SuperMarioOdysseyOnline/patches/codehook.slpatch
Amethyst-szs 7fa8c659e1
new: custom boot screen before main menu
- Show "SMOO made by CraftyBoss" for about 5 seconds
- Then show "Freeze-Tag & Sardines made by Amethyst-szs" for about 5 seconds.
- This does only overlay the game starting normally and does not slow down the process additionally.

---

Changes compared to the original cherry-picked version:
- Put all into the speedboot namespace instead of only a few things.
- Don't load into the game, but stay in the main menu
  - (Because of issues with new save files)
- Added text: "Made by CraftyBoss"
- Added text: "& Sardines"
- Speed up transition animation between the two screens
  - (Because it is now shown for a shorter total time)

Instead of directly (speed)booting into the game like in the original cherry-picked commit, this stays in the main menu.
The original behavior can be restored by setting `speedbootAutoload` to `true` inside `BootHooks.cpp`.

This is to prevent issues with new empty save files.
They normally don't get to the main menu but to an extra menu that now is invisible behind the custom boot screen.
The game doesn't load automatically then but the player needs to blindly navigate the invisible menu to start the game.
Till Cap Kingdom is fully loaded only the custom boot screen is visible (e.g. during the first cutscene video).

(cherry picked from commit c1eac0852eb839560dbc2ccafe373176c9911684)

Co-authored-by: Robin C. Ladiges <rcl.git@blackpinguin.de>
2024-10-27 00:44:02 +02:00

139 lines
4.6 KiB
Text

[version=100, target=main]
// StageScene::control+18 BL stageSceneHook
4C8DD0 BL stageInitHook // hook to the init of a stage to modify certain conditions (we also have access to SceneInitInfo)
50F928 BL hakoniwaSequenceHook
// hooks to start logger
5359D8 BL tryInitSocket // GameSystem::init
B59E28 B seadPrintHook // sead::system::print
// Debug Stuff
5359DC:
MOV X0, X19 // move GameSystem to arg register
BL setupDebugMenu
50F258: // HakoniwaSequence::drawMain+80
MOV X0, X19 // HakoniwaSequence
MOV X1, SP // viewport
MOV X2, X20 // drawContext
BL drawMainHook
// Main Stuff
50E89C BL constructHook // HakoniwaSequence::init+1F4
50EF2C: // HakoniwaSequence::init+884
MOV X0, X19 // move HakoniwaSequence ptr to arg register
BL threadInit
41B4E4 BL setPlayerModel
1B3F0C NOP // disables call to open HTML viewer during first time odyssey flight
1F2998 B freezeIsCheckpointWarpAllowed // Patches checkpoint system to always allow warping, disable in freeze tag
216FAC MOV W0, #0 // disables AppearSwitchTimer's camera switch
// Puppet Actor Setup
4B5E30 B ProjectActorFactory // patches actor factory ctor with custom matching factory
4CA0E4 BL initPuppetActors
// Shine Syncing
// 1CF470 BL shineHook
// Shine::get
1D03EC MOV X1, X19
1D03F4 BL sendShinePacket
// Shine::getWithDemo
1D1378 MOV X1, X19
1D1380 BL sendShinePacket
// Shine::exeWaitRequestDemo
1D14C8 MOV X1, X19
1D14D0 BL sendShinePacket
// Shine::receiveMsg
1D0188 MOV X1, X19
1D0190 BL sendShinePacket
// Shine::getDirect
1CF124 MOV X1, X19
1CF12C BL sendShinePacket
1CEEDC BL registerShineToList
// Amiibo Button Disabling
577078: // rs::isHoldAmiiboMode
MOV X0, #0
RET
577018: // rs::isTriggerAmiiboMode
MOV X0, #0
RET
// Remap Snapshot to !L + Down, disables snapshot mode in freeze tag
577014 B comboBtnHook
// Capture Syncing
9CFB84 BL initObjHook
// Save Data Edits
5167D0: GameConfigData::write+D0
B saveWriteHook
5168F8: GameConfigData::read+124
BL saveReadHook
// WindowConfirm Edits
99C758: // WindowConfirmWait:tryEnd+1C (Forces logic to ignore current nerve)
NOP
NOP
// Coin Counter Changes
20CA78 BL startCounterHook // starts coin counter if a gamemode is not active
20CAA8 BL startCounterHook // starts purple coin counter if gamemode is not active
// Other HUD Changes
20CB4C BL modeE3Hook // PlayGuideMenuLyt at StageSceneStateLayout::start+140
20CA5C BL modeE3Hook // MapMini::appearSlideIn at StageSceneStateLayout::start+50
20D160 BL modeE3Hook // MapMini::end at StageSceneStateLayout::exeEnd+8C
20D154 BL playGuideEndHook
// Pause Menu Changes
// 4EAEC4 B overrideNerveHook // makes any button on pause menu run a specific nerve
4EA104 MOV W2, #5 // update state count to account for new custom state
4EA1F0 BL initNerveStateHook // inits options nerve state and server config state
4EA174 MOV X0, X20 // moves StageSceneStatePauseMenu to first arg
4EA17C NOP // prevents first new of StageSceneStateOption
4EA1A8 BL initStateHook // inits StageSceneStateOption and StageSceneStateServerConfig
4EA1C0 NOP // prevents mStateOption ptr from being overriden
4EAFA4 B overrideHelpFadeNerve
// Gravity hooks
455230 NOP // PlayerJointControlKeeper::update+C0 prevents PlayerJointControlGroundPose from updating
4B5E30 B ProjectActorFactory // patches actor factory ctor with custom matching factory
4BE628 B ProjectCameraPoserFactory // patches camera poser factory with custom matching factory
4463D8 BL initHackCapHook
4C9080 BL createTicketHook // hook to the init of a stage to create custom gravity camera ticket
5C00B0 BL borderPullBackHook // hooks over isFirstStep in WorldEndBorderKeeper::exePullBack so we can kill the player if they reach the border of the map
// 4E46BC NOP // removes call to setEnableData for one of the commonverticallists in the options menu, which makes all entries in the menu look the same
8912B8 B drawTableHook
// 891394 BL drawInitHook
// 91328 BL updateInitHook
// Freeze tag hooks
4272F0 BL freezeDeathArea // Replaces functionality of death areas in freeze tag
538A94 B freezePlayerHitPointDamage // Reimplements the damage function, disabling it's functionality in Freeze Tag
51B280 B freezeKidsMode // Forces kids mode to be enabled during Freeze Tag
1CFBA0 BL freezeMoonHitboxDisable // When mode enabled, disable hitboxes with moons to avoid softlocks
// custom bootscreen hooks
50EF28 BL speedboot::hakoniwaSetNerveSetup
50EB88 ORR w2, wzr, #0x1f // nerve state count
50EB64 BL speedboot::prepareLayoutInitInfo