Skip to content

Commit

Permalink
Merge pull request #43 from Mars2032/stable
Browse files Browse the repository at this point in the history
Added more 1.2 support, fixed Replay desync
  • Loading branch information
Amethyst-szs authored Oct 25, 2023
2 parents 85463d6 + 4483b33 commit e100e4a
Show file tree
Hide file tree
Showing 22 changed files with 995 additions and 966 deletions.
30 changes: 17 additions & 13 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ project(subsdk CXX C ASM)

## Error if not using switch toolchain file
if (NOT SWITCH)
message(FATAL_ERROR "Not targeting switch, make sure to specify -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.cmake")
message(FATAL_ERROR "Not targeting switch, make sure to specify -DCMAKE_TOOLCHAIN_FILE=cmake/toolchain.cmake")
endif ()

set(CMAKE_C_STANDARD 17)
Expand All @@ -14,11 +14,11 @@ set(TITLE_ID 0100000000010000)
set(CONFIG_TITLE_ID 0x${TITLE_ID})

execute_process(
COMMAND git describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
OUTPUT_VARIABLE GIT_VER
OUTPUT_STRIP_TRAILING_WHITESPACE
)
COMMAND git describe --tags --abbrev=0
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
OUTPUT_VARIABLE GIT_VER
OUTPUT_STRIP_TRAILING_WHITESPACE
)

add_compile_definitions(EXL_PROGRAM_ID=${CONFIG_TITLE_ID} NNSDK=1 IMGUI_USER_CONFIG="imgui_backend/nvn_imgui_config.h" GIT_VER="${GIT_VER}")
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/module/subsdk9.json.template ${CMAKE_CURRENT_BINARY_DIR}/subsdk9.json)
Expand Down Expand Up @@ -56,7 +56,7 @@ target_embed_binaries(subsdk9 "${PROJECT_SOURCE_DIR}/imgui.bin")
set(SUBSDK_LD_PATH ${CMAKE_CURRENT_SOURCE_DIR}/module/subsdk9.ld)
execute_process(COMMAND uname OUTPUT_VARIABLE uname)
if (uname MATCHES "^MINGW")
string(REGEX REPLACE "^/([a-zA-Z])/" "\\1:/" SUBSDK_LD_PATH "${SUBSDK_LD_PATH}")
string(REGEX REPLACE "^/([a-zA-Z])/" "\\1:/" SUBSDK_LD_PATH "${SUBSDK_LD_PATH}")
endif ()
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/module/subsdk9.specs.template ${CMAKE_CURRENT_BINARY_DIR}/subsdk9.specs)

Expand All @@ -68,11 +68,15 @@ set_target_properties(subsdk9 PROPERTIES LINK_FLAGS "-specs ${CMAKE_BINARY_DIR}/

add_custom_target(subsdk9_meta DEPENDS create_npdm subsdk9_nso)
if (FTP_IP)
## Upload to target switch
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND ncftpput -u crafty -p boss -P 5000 ${FTP_IP} atmosphere/contents/${TITLE_ID}/exefs ${CMAKE_BINARY_DIR}/main.npdm ${CMAKE_BINARY_DIR}/subsdk9)
endif()
## Upload to target switch
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND ncftpput -u crafty -p boss -P 5000 ${FTP_IP} atmosphere/contents/${TITLE_ID}/exefs ${CMAKE_BINARY_DIR}/main.npdm ${CMAKE_BINARY_DIR}/subsdk9)
endif ()

if (RYU_PATH)
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND cp ${CMAKE_BINARY_DIR}/main.npdm ${RYU_PATH}/mods/contents/${TITLE_ID}/mods/exefs/main.npdm)
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND cp ${CMAKE_BINARY_DIR}/subsdk9 ${RYU_PATH}/mods/contents/${TITLE_ID}/mods/exefs/subsdk9)
endif ()

if(RYU_PATH)
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND cp ${CMAKE_BINARY_DIR}/main.npdm ${RYU_PATH}/mods/contents/${TITLE_ID}/mods/exefs/main.npdm)
add_custom_command(TARGET subsdk9_meta POST_BUILD COMMAND cp ${CMAKE_BINARY_DIR}/subsdk9 ${RYU_PATH}/mods/contents/${TITLE_ID}/mods/exefs/subsdk9)
if (GAME_VERSION)
add_compile_definitions("GAME_VERSION=${GAME_VERSION}")
endif ()
926 changes: 462 additions & 464 deletions src/al/util/SensorUtil.h

Large diffs are not rendered by default.

178 changes: 108 additions & 70 deletions src/game/Player/PlayerHackKeeper.h
Original file line number Diff line number Diff line change
@@ -1,76 +1,114 @@
/**
* @file PlayerHackKeeper.h
* @brief Contains info on the current hack (capture)
*/

#pragma once

#include "al/LiveActor/LiveActor.h"
#include "game/Interfaces/IUsePlayerHack.h"
#include "game/Player/PlayerInput.h"
#include "game/Player/HackCap.h"
#include "game/Player/PlayerCollider.h"
#include "game/Player/HackCap/CapTargetInfo.h"
#include <container/seadPtrArray.h>
#include <math/seadMatrix.h>

namespace al {
class LiveActor;
class HitSensor;
class CollisionPartsFilterBase;
} // namespace al

class PlayerRecoverySafetyPoint;
class HackCap;
class PlayerInput;
class PlayerDamageKeeper;
class IPlayerModelChanger;
class IUsePlayerHeightCheck;
class IUsePlayerHack;
class HackObjInfo;
class CapTargetInfo;
class PlayerHackStartTexKeeper;
class HackEndParam;

struct HackEndParam;
struct PlayerRecoverySafetyPoint;
struct PlayerDamageKeeper;
struct IPlayerModelChanger;
struct IUsePlayerHeightCheck;
class PlayerHackKeeper {
public:
al::LiveActor* mParent;
HackCap* mHackCap;
PlayerRecoverySafetyPoint* mRecoverySafePoint;
void* field_18;
void* field_20;
PlayerInput* mInput;
sead::Matrix34f* field_30;
PlayerDamageKeeper* mDamageKeeper;
IPlayerModelChanger* mModelChanger;
IUsePlayerHeightCheck* mHeightCheck;
al::HitSensor* mParentBodySensor;
bool mIsPuppetable;
bool mIsCancellingHack;
bool mIsHackDemoStarted;
bool mIsPuppetable2;
bool mIsStartedHacking;
bool mIsHack;
bool mIsTookDamage;
al::CollisionPartsFilterBase* mCollisionFilter;
al::LiveActor* mHackActor;
al::HitSensor* mHackHitSensor;
HackObjInfo* mHackObjectInfo;
al::HitSensor* mStageStartActorSensor;
al::LiveActor* mStageStartActor;
CapTargetInfo* mStageStartCapTargetInfo;
PlayerHackStartTexKeeper* mHackStartTexKeeper;
al::LiveActor* mHackModel;
sead::PtrArray<sead::Matrix34f> mHackModelSlices;
sead::Matrix34f* field_b8;
s32 field_c0;
s32 field_c4;
s32 field_c8;

class PlayerHackKeeper
{
public:
PlayerHackKeeper(al::LiveActor *,HackCap *,PlayerRecoverySafetyPoint *,PlayerInput const*,sead::Matrix34f const*,PlayerDamageKeeper const*,IPlayerModelChanger const*,IUsePlayerHeightCheck const*);
void createHackModel(al::ActorInitInfo const&);
void startHack(al::HitSensor *,al::HitSensor *,al::LiveActor *);
void setupHack(al::HitSensor *,al::HitSensor *,al::LiveActor *);
void endHack(HackEndParam const*);
void endHackStartDemo(al::LiveActor *);
void startHackStartDemo(al::LiveActor *);
void startHackStartDemoPuppetable(al::LiveActor *);
void addHackStartDemo(al::LiveActor *);
void appearHackDemoModel(sead::Matrix34f const&,float);
void updateHackDemoModel(sead::Matrix34f const&,float);
void deleteHackDemoModelEffect(void);
void killHackDemoModel(void);
bool isActiveHackStartDemo(void) const;
void recordHack(void);
void cancelHackArea(void);
void cancelHack(void);
void cancelForceRecovery(void);
void tryEscapeHack(void);
void sendTransferHack(void);
void sendMarioDemo(void);
void forceKillHack(void);
void sendMarioDead(void);
void sendMarioInWater(void);
void sendMarioDeathArea(void);
void sendMsgEnableMapCheckPointWarp(void);
void sendMsgSelfCeilingCheckMiss(void);
void receiveRequestTransferHack(al::HitSensor *);
void requestDamage(void);
void receiveRequestDamage(void);
void sendSyncDamageVisibility(void);
void pushWorldEndBorder(sead::Vector3f const&);
const char *getCurrentHackName(void) const;
PlayerCollider *getPlayerCollision(void);
float getHackGuideHeight(void);
bool isHackGuideEnable(void) const;
float getHackStayGravityMargine(void);
void *getCollisionPartsFilter(void);
bool isHackGroupTalkScare(void) const;
bool isHackNoCollisionMsg(void) const;
bool isHackNoSeparateCameraInput(void) const;
bool isHackUsePlayerCollision(void) const;
bool isHackCancelCeilingCheck(void) const;
bool isHackInvalidLifeRecovery(void) const;
void requestForceHackStageStart(al::HitSensor *,CapTargetInfo const*,al::LiveActor *);
void executeForceHackStageStart(al::HitSensor *,IUsePlayerHack *);
void startDemo(void);
void endDemo(void);
PlayerHackKeeper(al::LiveActor*, HackCap*, PlayerRecoverySafetyPoint*, const PlayerInput*, const sead::Matrix34f*, const PlayerDamageKeeper*,
const IPlayerModelChanger*, const IUsePlayerHeightCheck*);
void createHackModel(const al::ActorInitInfo&);
void startHack(al::HitSensor*, al::HitSensor*, al::LiveActor*);
void setupHack(al::HitSensor*, al::HitSensor*, al::LiveActor*);
void endHack(const HackEndParam*);
void endHackStartDemo(al::LiveActor*);
void startHackStartDemo(al::LiveActor*);
void startHackStartDemoPuppetable(al::LiveActor*);
void addHackStartDemo(al::LiveActor*);
void appearHackDemoModel(const sead::Matrix34f&, f32);
void updateHackDemoModel(const sead::Matrix34f&, f32);
void deleteHackDemoModelEffect();
void killHackDemoModel();
bool isActiveHackStartDemo() const;
void recordHack();
void cancelHackArea();
void cancelHack();
void cancelForceRecovery();
bool tryEscapeHack();
void sendTransferHack();
void sendMarioCheckpointFlagWarp();
void sendMarioDemo();
void forceKillHack();
void sendMarioDead();
void sendMarioInWater();
void sendMarioDeathArea();
void sendMsgEnableMapCheckPointWarp();
void sendMsgSelfCeilingCheckMiss();
void receiveRequestTransferHack(al::HitSensor*);
void requestDamage();
void receiveRequestDamage();
void sendSyncDamageVisibility();
void pushWorldEndBorder(const sead::Vector3f&);
const char* getCurrentHackName() const;
void* getPlayerCollision() const;
void* getHackGuideHeight() const;
bool isHackGuideEnable() const;
void getHackStayGravityMargine() const;
void getCollisionPartsFilter() const;
bool isHackGroupTalkScare() const;
bool isHackNoCollisionMsg() const;
bool isHackNoSeparateCameraInput() const;
bool isHackUsePlayerCollision() const;
bool isHackCancelCeilingCheck() const;
bool isHackInvalidLifeRecovery() const;
void requestForceHackStageStart(al::HitSensor*, const CapTargetInfo*, al::LiveActor*);
void executeForceHackStageStart(al::HitSensor*, IUsePlayerHack*);
void startDemo();
void endDemo();
};

char padding[0x68];
al::LiveActor *currentHackActor;
// 0x98 PlayerHackStartTexKeeper
class IUsePlayerHack {
public:
virtual PlayerHackKeeper* getPlayerHackKeeper() const = 0;
};
46 changes: 43 additions & 3 deletions src/game/StageScene/StageScene.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,21 @@ class StageSceneStateCloset;
class StageSceneStateSkipDemo;
class StageSceneStateCheckpointWarp;
class StageSceneStateCarryMeat;

#if GAME_VERSION == 100
class StageSceneStateTimeBalloon;
class TimeBalloonDirector;
class TimeBalloonSequenceInfo;
class TimeBalloonNpc;
#elif GAME_VERSION == 120
class StageSceneStateBalloonGame;
class StageSceneStateBalloonGameEntry;
class BalloonGameNpc;
class BalloonGameData;
class BalloonGameDataAccessor;
class PlayReportFootPrintHolder;
#endif

class StageSceneStateTitleLogo;
class StageSceneStateMiss;
class StageSceneStateYukimaruRace;
Expand All @@ -41,15 +55,12 @@ class LocationNameCtrl;
class MiniGameMenu;
class MapLayout;
class CollectionList;
class TimeBalloonNpc;
class ProjectItemDirector;
class Pyramid;
class OpeningStageStartDemo;
class SceneAudioSystemPauseController;
class DemoSoundSynchronizer;
class ProjectSeNamedList;
class TimeBalloonDirector;
class TimeBalloonSequenceInfo;
class CollectBgmPlayer;
class CollectBgmRegister;
class BgmAnimeSyncDirector;
Expand Down Expand Up @@ -95,7 +106,15 @@ class StageScene : public al::Scene {
StageSceneStateSkipDemo* mStateSkipDemo;
StageSceneStateCheckpointWarp* mStateCheckpointWarp;
StageSceneStateCarryMeat* mStateCarryMeat;

#if GAME_VERSION == 100
StageSceneStateTimeBalloon* mStateTimeBalloon;
#elif GAME_VERSION == 120
StageSceneStateBalloonGame* mStateBalloonGame;
StageSceneStateBalloonGameEntry* mStateBalloonGameEntry;
void* unused_1b8;
#endif

StageSceneStateTitleLogo* mStateTitleLogo;
StageSceneStateMiss* mStateMiss;
StageSceneStateYukimaruRace* mStateYukimaruRace;
Expand Down Expand Up @@ -138,7 +157,14 @@ class StageScene : public al::Scene {
al::LiveActorGroup* mShopGroup; // name unsure, 2 different LiveActorGroups inited in the same spot(?)
CollectionList* mCollectionList;
al::LiveActor* mKoopaLv1;

#if GAME_VERSION == 100
TimeBalloonNpc* mTimeBalloonNpc;
#elif GAME_VERSION == 120
BalloonGameNpc* mBalloonGameNpc;
void* unused_3b0;
#endif

ProjectItemDirector* mProjectItemDirector;
Pyramid* mPyramid;
OpeningStageStartDemo* mOpeningStageStartDemo;
Expand All @@ -150,8 +176,17 @@ class StageScene : public al::Scene {
al::SimpleAudioUser* mSnapShotCameraCtrl;
ProjectSeNamedList* mSeNamedList;
void* unused_3f0;

#if GAME_VERSION == 100
TimeBalloonDirector* mTimeBalloonDirector;
TimeBalloonSequenceInfo* mTimeBalloonSequenceInfo;
#elif GAME_VERSION == 120
BalloonGameData* mBalloonGameData;
BalloonGameDataAccessor* mBalloonGameDataAccessor;
void* unused_420;
void* unused_428;
#endif

void* unused_408;
al::CameraTicket* mCheckpointWarpArriveCamera;
sead::Vector3f mCheckpointWarpTargetPos;
Expand All @@ -172,6 +207,11 @@ class StageScene : public al::Scene {
bool mUpdateKitAndGraphics;
bool mAlwaysFalse; // supposed to be set in exeDemoHackStartFirst but presumed coding mistake prevents that
NpcEventDirector* mNpcEventDirector;

#if GAME_VERSION == 120
PlayReportFootPrintHolder* mPlayReportFootPrintHolder;
#endif

al::ChromakeyDrawer* mChromakeyDrawer;
al::HtmlViewer* mHtmlViewer;
ProjectNfpDirector* mProjectNfpDirector;
Expand Down
Loading

0 comments on commit e100e4a

Please sign in to comment.