diff --git a/.gitignore b/.gitignore index c7e7582..3964348 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,5 @@ build100.sh keys.dat .exefs100/ .exefs130/ -build130.sh \ No newline at end of file +build130.sh +.DS_Store diff --git a/include/fl/packet.h b/include/fl/packet.h index 73ef9b0..b10c70a 100644 --- a/include/fl/packet.h +++ b/include/fl/packet.h @@ -59,6 +59,7 @@ namespace smo class InPacketPlayerTeleport : public InPacket { sead::Vector3f pos; + sead::Quatf rot; public: void parse(const u8* data, u32 len); void on(Server& server); diff --git a/include/fl/ui.h b/include/fl/ui.h index a40f061..573a617 100644 --- a/include/fl/ui.h +++ b/include/fl/ui.h @@ -15,7 +15,7 @@ class PracticeUI sead::Vector3f savedTrans; sead::Quatf savedQuat; bool saved = false; - bool teleportEnabled = false; + bool teleportEnabled = true; s8 reloadStageForPos = -1; sead::Vector3f reloadStagePos; sead::Quatf reloadStageQuat; @@ -45,10 +45,10 @@ class PracticeUI inline StageScene* getStageScene() {return stageScene;} - bool shineRefresh = false; - bool gotShineRefresh = false; - bool alwaysWarp = false; - bool disableAutoSave = false; + bool shineRefresh = true; + bool gotShineRefresh = true; + bool alwaysWarp = true; + bool disableAutoSave = true; bool skipBowser = false; bool isModeDiverOrJungleGymRom = false; @@ -60,7 +60,7 @@ class PracticeUI enum Page : u8 { - About, Options, Stage, Misc, Info, Tas, MoonInfo, Modes, Debug + About, Options, Stage, Misc, Info, Info2, Info3, Tas, MoonInfo, Modes, Debug }; enum MofumofuPattern : s8 diff --git a/smo-tas-server/include/common.h b/smo-tas-server/include/common.h index d1b6d2a..aa84275 100644 --- a/smo-tas-server/include/common.h +++ b/smo-tas-server/include/common.h @@ -5,6 +5,8 @@ #include #include +#define RAD(deg) (deg * (M_PI / 180)) + namespace smo { static const std::vector& getStages() diff --git a/smo-tas-server/include/packet.h b/smo-tas-server/include/packet.h index 49b730b..f6a3a9c 100644 --- a/smo-tas-server/include/packet.h +++ b/smo-tas-server/include/packet.h @@ -62,6 +62,7 @@ namespace smo { public: Vector3f pos; + Quatf rot; u32 calcLen(); void construct(u8* dst); diff --git a/smo-tas-server/include/server.h b/smo-tas-server/include/server.h index d96e0dc..6aaaef2 100644 --- a/smo-tas-server/include/server.h +++ b/smo-tas-server/include/server.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace smo { @@ -28,6 +29,7 @@ namespace smo { private: s32 socketfd; + void handleScript(std::deque args); void loopThread(); public: u8 start(u16 port); diff --git a/smo-tas-server/include/util.h b/smo-tas-server/include/util.h new file mode 100644 index 0000000..7a87d83 --- /dev/null +++ b/smo-tas-server/include/util.h @@ -0,0 +1,6 @@ +#include +#include + +namespace fl { + smo::Quatf eulerToQuat(smo::Vector3f euler); +} \ No newline at end of file diff --git a/smo-tas-server/src/packet.cpp b/smo-tas-server/src/packet.cpp index 6c9c932..a25e88b 100644 --- a/smo-tas-server/src/packet.cpp +++ b/smo-tas-server/src/packet.cpp @@ -40,7 +40,7 @@ void smo::OutPacketPlayerScriptInfo::construct(u8* dst) u32 smo::OutPacketPlayerTeleport::calcLen() { - return 12; + return 28; } void smo::OutPacketPlayerTeleport::construct(u8* dst) @@ -48,6 +48,10 @@ void smo::OutPacketPlayerTeleport::construct(u8* dst) *((float*) &dst[0]) = pos.x; *((float*) &dst[4]) = pos.y; *((float*) &dst[8]) = pos.z; + *((float*) &dst[12]) = rot.w; + *((float*) &dst[16]) = rot.x; + *((float*) &dst[20]) = rot.y; + *((float*) &dst[24]) = rot.z; } u32 smo::OutPacketPlayerGo::calcLen() diff --git a/smo-tas-server/src/server.cpp b/smo-tas-server/src/server.cpp index 14b386c..4d7a7c8 100644 --- a/smo-tas-server/src/server.cpp +++ b/smo-tas-server/src/server.cpp @@ -2,6 +2,7 @@ #include "script.h" #include "tas.h" #include "types.h" +#include "util.h" #include #include #include @@ -32,6 +33,10 @@ namespace smo { + std::deque scriptArgs; + std::deque goArgs; + std::deque tpArgs; + void smo::Client::connect() { struct in_addr ip; @@ -115,23 +120,104 @@ namespace smo return 0; } + void smo::Server::handleScript(std::deque args) { + if (args.size() != 1) + { + if (scriptArgs.empty()) { + std::cout << "script