System: Implement GameDataUtil (#759)

This commit is contained in:
Naii-the-Baf 2025-11-22 03:36:56 -06:00 committed by GitHub
parent fa52a34d88
commit ca8e7eb87a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
21 changed files with 2457 additions and 230 deletions

View file

@ -94274,6 +94274,8 @@ ModeBalloon/NexRankingUploader.o:
label: _ZNSt3__16vectorIN2nn3nex24DataStoreRateObjectParamENS2_12MemAllocatorIS3_EEE21__push_back_slow_pathIRKS3_EEvOT_
status: NotDecompiled
lazy: true
ModeBalloon/RankingLocalFunction.h:
'.text':
- offset: 0x35c158
size: 16
label: _ZN20RankingLocalFunction27isValidCourceIdYukimaruRaceEi
@ -149756,675 +149758,675 @@ System/GameDataUtil.o:
- offset: 0x53174c
size: 44
label: _ZN2rs30createSaveObjInfoWriteSaveDataERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x531778
size: 44
label: _ZN2rs30createSaveObjInfoWriteSaveDataERKN2al13ActorInitInfoERKNS0_13PlacementInfoE
status: NotDecompiled
status: Matching
- offset: 0x5317a4
size: 44
label: _ZN2rs43createSaveObjInfoNoWriteSaveDataInSameWorldERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x5317d0
size: 44
label: _ZN2rs43createSaveObjInfoNoWriteSaveDataInSameWorldERKN2al13ActorInitInfoERKNS0_13PlacementInfoE
status: NotDecompiled
status: Matching
- offset: 0x5317fc
size: 44
label: _ZN2rs56createSaveObjInfoNoWriteSaveDataInSameWorldResetMiniGameERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x531828
size: 44
label: _ZN2rs56createSaveObjInfoNoWriteSaveDataInSameWorldResetMiniGameERKN2al13ActorInitInfoERKNS0_13PlacementInfoE
status: NotDecompiled
status: Matching
- offset: 0x531854
size: 44
label: _ZN2rs46createSaveObjInfoNoWriteSaveDataInSameScenarioERKN2al13ActorInitInfoE
status: NotDecompiled
status: Matching
- offset: 0x531880
size: 44
label: _ZN2rs46createSaveObjInfoNoWriteSaveDataInSameScenarioERKN2al13ActorInitInfoERKNS0_13PlacementInfoE
status: NotDecompiled
status: Matching
- offset: 0x5318ac
size: 4
label: _ZN2rs30createSaveObjInfoWriteSaveDataERKN2al13ActorInitInfoEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5318b0
size: 4
label: _ZN2rs43createSaveObjInfoNoWriteSaveDataInSameWorldERKN2al13ActorInitInfoEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5318b4
size: 4
label: _ZN2rs56createSaveObjInfoNoWriteSaveDataInSameWorldResetMiniGameERKN2al13ActorInitInfoEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5318b8
size: 4
label: _ZN2rs46createSaveObjInfoNoWriteSaveDataInSameScenarioERKN2al13ActorInitInfoEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5318bc
size: 4
label: _ZN2rs13onSaveObjInfoEP11SaveObjInfo
status: NotDecompiled
status: Matching
- offset: 0x5318c0
size: 4
label: _ZN2rs14offSaveObjInfoEP11SaveObjInfo
status: NotDecompiled
status: Matching
- offset: 0x5318c4
size: 4
label: _ZN2rs15isOnSaveObjInfoEPK11SaveObjInfo
status: NotDecompiled
status: Matching
- offset: 0x5318c8
size: 68
label: _ZN2rs17setGrowFlowerTimeEPKN2al9LiveActorEPKNS0_11PlacementIdES6_m
status: NotDecompiled
status: Matching
- offset: 0x53190c
size: 52
label: _ZN2rs17setGrowFlowerTimeEPKN2al9LiveActorEPKNS0_11PlacementIdEm
status: NotDecompiled
status: Matching
- offset: 0x531940
size: 44
label: _ZN2rs17getGrowFlowerTimeEPKN2al9LiveActorEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x53196c
size: 44
label: _ZN2rs20isUsedGrowFlowerSeedEPKN2al9LiveActorEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x531998
size: 52
label: _ZN2rs22addGrowFlowerGrowLevelEPKN2al9LiveActorEPKNS0_11PlacementIdEj
status: NotDecompiled
status: Matching
- offset: 0x5319cc
size: 44
label: _ZN2rs22getGrowFlowerGrowLevelEPKN2al9LiveActorEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5319f8
size: 44
label: _ZN2rs29findGrowFlowerPotIdFromSeedIdEPKN2al9LiveActorEPKNS0_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x531a24
size: 44
label: _ZN2rs22isPlayFirstTimeBalloonEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531a50
size: 40
label: _ZN2rs20playTimeBalloonFirstEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531a78
size: 40
label: _ZN2rs17onShortExplainGetEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531aa0
size: 40
label: _ZN2rs17onShortExplainSetEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531ac8
size: 36
label: _ZN2rs17isShortExplainGetEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531aec
size: 36
label: _ZN2rs17isShortExplainSetEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531b10
size: 40
label: _ZN2rs21onReactedLuigiCostumeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531b38
size: 36
label: _ZN2rs21isReactedLuigiCostumeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531b5c
size: 36
label: _ZN2rs13getPlayerRankEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531b80
size: 16
label: _ZN2rs13getPlayerRankE22GameDataHolderAccessor
status: NotDecompiled
status: Matching
- offset: 0x531b90
size: 48
label: _ZN2rs13setPlayerRankEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x531bc0
size: 16
label: _ZN2rs13setPlayerRankE22GameDataHolderAccessori
status: NotDecompiled
status: Matching
- offset: 0x531bd0
size: 36
label: _ZN2rs14getPrincipalIdEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531bf4
size: 48
label: _ZN2rs14setPrincipalIdEPKN2al9LiveActorEm
status: NotDecompiled
status: Matching
- offset: 0x531c24
size: 44
label: _ZN2rs25isAnswerCorrectSphinxQuizE22GameDataHolderAccessorPKc
status: NotDecompiled
status: Matching
- offset: 0x531c50
size: 28
label: _ZN2rs23answerCorrectSphinxQuizEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531c6c
size: 44
label: _ZN2rs28isAnswerCorrectSphinxQuizAllE22GameDataHolderAccessorPKc
status: NotDecompiled
status: Matching
- offset: 0x531c98
size: 28
label: _ZN2rs26answerCorrectSphinxQuizAllEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531cb4
size: 60
label: _ZN2rs26isTalkAlreadyLocalLanguageEPK16NpcEventDirector
status: NotDecompiled
status: Matching
- offset: 0x531cf0
size: 28
label: _ZN2rs17talkLocalLanguageEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531d0c
size: 64
label: _ZN2rs20getLocalLanguageNameEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531d4c
size: 96
label: _ZN2rs20getLocalLanguageNameEPK16NpcEventDirector
status: NotDecompiled
status: Matching
- offset: 0x531dac
size: 56
label: _ZN2rs34isOnFlagKinopioBrigadeNpcFirstTalkEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531de4
size: 60
label: _ZN2rs32onFlagKinopioBrigadeNpcFirstTalkEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531e20
size: 56
label: _ZN2rs24isOnFlagHintNpcFirstTalkEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531e58
size: 60
label: _ZN2rs22onFlagHintNpcFirstTalkEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x531e94
size: 40
label: _ZN2rs23playScenarioStartCameraEPKN2al9LiveActorEPK9QuestInfo
status: NotDecompiled
status: Matching
- offset: 0x531ebc
size: 40
label: _ZN2rs23playScenarioStartCameraEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x531ee4
size: 32
label: _ZN2rs17setExistKoopaShipEPK9KoopaShip
status: NotDecompiled
status: Matching
- offset: 0x531f04
size: 28
label: _ZN2rs19resetExistKoopaShipEPK9KoopaShip
status: NotDecompiled
status: Matching
- offset: 0x531f20
size: 120
label: _ZN2rs16isExistKoopaShipEPK16ShineTowerRocket
status: NotDecompiled
status: Matching
- offset: 0x531f98
size: 92
label: _ZN2rs21isExistKoopaShipInSkyEPK16ShineTowerRocket
status: NotDecompiled
status: Matching
- offset: 0x531ff4
size: 100
label: _ZN2rs18tryUnlockShineNameEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x532058
size: 116
label: _ZN2rs32calcShineIndexTableNameAvailableEPiS0_PKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5320cc
size: 116
label: _ZN2rs33calcShineIndexTableNameUnlockableEPiS0_PKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532140
size: 312
label: _ZN2rs26calcWorldIdByWorldWarpHoleEPK13WorldWarpHolePKc
status: NotDecompiled
status: Matching
- offset: 0x532278
size: 104
label: _ZN2rs39checkIsOpenWorldWarpHoleCurrentScenarioEPK13WorldWarpHole
status: NotDecompiled
status: Matching
- offset: 0x5322e0
size: 76
label: _ZN2rs10isKidsModeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x53232c
size: 100
label: _ZN2rs10isKidsModeEPKN2al11LayoutActorE
status: NotDecompiled
status: Matching
- offset: 0x532390
size: 100
label: _ZN2rs10isKidsModeEPKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x5323f4
size: 96
label: _ZN2rs10isKidsModeEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x532454
size: 68
label: _ZN2rs10isKidsModeEPK14GameDataHolder
status: NotDecompiled
status: Matching
- offset: 0x532498
size: 32
label: _ZN2rs33isEnableCapMessageLifeOneKidsModeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5324b8
size: 32
label: _ZN2rs32disableCapMessageLifeOneKidsModeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5324d8
size: 80
label: _ZN2rs20isInvalidChangeStageEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532528
size: 80
label: _ZN2rs27isSequenceTimeBalloonOrRaceEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532578
size: 56
label: _ZN2rs27isSequenceTimeBalloonOrRaceEPK14GameDataHolder
status: NotDecompiled
status: Matching
- offset: 0x5325b0
size: 80
label: _ZN2rs22isTreasureBoxDeadStageEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532600
size: 148
label: _ZN2rs14findRaceRecordEPbS0_PiS1_S1_PKN2al9LiveActorEPKc
status: NotDecompiled
status: Matching
- offset: 0x532694
size: 168
label: _ZN2rs14findRaceRecordEPbS0_PiS1_S1_PKN2al5SceneEPKc
status: NotDecompiled
status: Matching
- offset: 0x53273c
size: 236
label: _ZN2rs25findRaceRecordRaceManRaceEPbS0_PiS1_S1_PKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x532828
size: 232
label: _ZN2rs25findRaceRecordRaceManRaceEPbS0_PiS1_S1_PKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532910
size: 216
label: _ZN2rs36findRaceRecordRaceManRaceWithWorldIdEPbS0_PiS1_S1_PKN2al5SceneEi
status: NotDecompiled
status: Matching
- offset: 0x5329e8
size: 204
label: _ZN2rs36findRaceRecordRaceManRaceWithWorldIdEPbS0_PiS1_S1_PKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x532ab4
size: 212
label: _ZN2rs21findRaceRecordRadiconEPbS0_PiS1_S1_PKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x532b88
size: 200
label: _ZN2rs21findRaceRecordRadiconEPbS0_PiS1_S1_PKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x532c50
size: 320
label: _ZN2rs22findRaceRecordYukimaruEPbS0_PiS1_S1_PKN2al5SceneEi
status: NotDecompiled
status: Matching
- offset: 0x532d90
size: 308
label: _ZN2rs22findRaceRecordYukimaruEPbS0_PiS1_S1_PKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x532ec4
size: 128
label: _ZN2rs15writeRaceRecordEPKN2al9LiveActorEPKciii
status: NotDecompiled
status: Matching
- offset: 0x532f44
size: 152
label: _ZN2rs15writeRaceRecordEPKN2al5SceneEPKciii
status: NotDecompiled
status: Matching
- offset: 0x532fdc
size: 56
label: _ZN2rs23getJumpingRopeBestCountEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533014
size: 56
label: _ZN2rs23getJumpingRopeBestCountEPKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x53304c
size: 64
label: _ZN2rs23setJumpingRopeBestCountEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x53308c
size: 64
label: _ZN2rs23setJumpingRopeBestCountEPKN2al5SceneEi
status: NotDecompiled
status: Matching
- offset: 0x5330cc
size: 56
label: _ZN2rs22getJumpingRopeDayCountEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533104
size: 72
label: _ZN2rs22setJumpingRopeDayCountEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x53314c
size: 56
label: _ZN2rs29setJumpingRopeUpdateScoreFlagEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533184
size: 56
label: _ZN2rs24isExistRecordJumpingRopeEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5331bc
size: 56
label: _ZN2rs24isExistRecordJumpingRopeEPKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x5331f4
size: 56
label: _ZN2rs29isExistRecordInDayJumpingRopeEPKN2al11LayoutActorE
status: NotDecompiled
status: Matching
- offset: 0x53322c
size: 56
label: _ZN2rs22getVolleyballBestCountEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533264
size: 56
label: _ZN2rs22getVolleyballBestCountEPKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x53329c
size: 64
label: _ZN2rs22setVolleyballBestCountEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x5332dc
size: 64
label: _ZN2rs22setVolleyballBestCountEPKN2al5SceneEi
status: NotDecompiled
status: Matching
- offset: 0x53331c
size: 56
label: _ZN2rs21getVolleyballDayCountEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533354
size: 72
label: _ZN2rs21setVolleyballDayCountEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x53339c
size: 56
label: _ZN2rs28setVolleyballUpdateScoreFlagEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5333d4
size: 56
label: _ZN2rs23isExistRecordVolleyballEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x53340c
size: 56
label: _ZN2rs23isExistRecordVolleyballEPKN2al5SceneE
status: NotDecompiled
status: Matching
- offset: 0x533444
size: 56
label: _ZN2rs28isExistRecordInDayVolleyballEPKN2al11LayoutActorE
status: NotDecompiled
status: Matching
- offset: 0x53347c
size: 220
label: _ZN2rs26writeRaceRecordRaceManRaceEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533558
size: 32
label: _ZN2rs20isTalkFirstAmiiboNpcEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533578
size: 32
label: _ZN2rs25offFlagTalkFirstAmiiboNpcEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533598
size: 60
label: _ZN2rs35checkGetShineForWorldTravelingPeachE22GameDataHolderAccessorPKc
status: NotDecompiled
status: Matching
- offset: 0x5335d4
size: 148
label: _ZN2rs40checkEnableAppearMoonWorldTravelingPeachEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533668
size: 28
label: _ZN2rs26isStartWorldTravelingPeachEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533684
size: 28
label: _ZN2rs24startWorldTravelingPeachEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5336a0
size: 100
label: _ZN2rs19checkGetEnoughShineEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533704
size: 140
label: _ZN2rs33checkGetEnoughShineInCurrentWorldEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533790
size: 36
label: _ZN2rs26setFlagOnStartKoopaCaptureEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5337b4
size: 32
label: _ZN2rs19isStartKoopaCaptureEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5337d4
size: 48
label: _ZN2rs33isAlreadyTalkPrevWorldInWorldWarpEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533804
size: 48
label: _ZN2rs33isAlreadyTalkNextWorldInWorldWarpEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533834
size: 48
label: _ZN2rs34setAlreadyTalkPrevWorldInWorldWarpEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533864
size: 48
label: _ZN2rs34setAlreadyTalkNextWorldInWorldWarpEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533894
size: 180
label: _ZN2rs22checkNeedTalkPrevWorldEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533948
size: 32
label: _ZN2rs20getTipsIdInWorldWarpEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533968
size: 32
label: _ZN2rs20addTipsIdInWorldWarpEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533988
size: 56
label: _ZN2rs25setTalkSpecialInWorldWarpEPKN2al9LiveActorEbb
status: NotDecompiled
status: Matching
- offset: 0x5339c0
size: 32
label: _ZN2rs26isTalkFindKoopaInWorldWarpEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5339e0
size: 32
label: _ZN2rs25isTalkBossRaidInWorldWarpEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533a00
size: 152
label: _ZN2rs19isClearMainScenarioEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x533a98
size: 12
label: _ZN2rs22checkAlreadyVisitStageEPK14GameDataHolderPKc
status: NotDecompiled
status: Matching
- offset: 0x533aa4
size: 12
label: _ZN2rs10visitStageEPK14GameDataHolderPKc
status: NotDecompiled
status: Matching
- offset: 0x533ab0
size: 152
label: _ZN2rs23isSequenceGoToNextWorldEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x533b48
size: 236
label: _ZN2rs37isSequenceCollectShineBeforeGameClearEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x533c34
size: 144
label: _ZN2rs35isSequenceCollectShineForRepairHomeEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x533cc4
size: 228
label: _ZN2rs22isSequenceCollectShineEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x533da8
size: 136
label: _ZN2rs22isSequenceGoToMoonRockEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x533e30
size: 100
label: _ZN2rs23isEnableExplainShopCoinEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533e94
size: 88
label: _ZN2rs15explainShopCoinEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533eec
size: 152
label: _ZN2rs30checkShowNewItemAndPrepareSaveEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533f84
size: 36
label: _ZN2rs23isInNormalCoinShopFirstEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533fa8
size: 36
label: _ZN2rs24offInNormalCoinShopFirstEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x533fcc
size: 120
label: _ZN2rs21checkExistNewShopItemEPKN2al9LiveActorEiib
status: NotDecompiled
status: Matching
- offset: 0x534044
size: 52
label: _ZN2rs21getCapMessageBossDataEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x534078
size: 4
label: _ZN2rs13getYoshiFruitEP11SaveObjInfo
status: NotDecompiled
status: Matching
- offset: 0x53407c
size: 4
label: _ZN2rs15isGetYoshiFruitEPK11SaveObjInfo
status: NotDecompiled
status: Matching
- offset: 0x534080
size: 28
label: _ZN2rs11isTalkKakkuEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x53409c
size: 28
label: _ZN2rs9talkKakkuEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5340b8
size: 28
label: _ZN2rs25isTalkWorldTravelingPeachEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5340d4
size: 28
label: _ZN2rs23talkWorldTravelingPeachEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5340f0
size: 28
label: _ZN2rs19isTalkCollectBgmNpcEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x53410c
size: 28
label: _ZN2rs17talkCollectBgmNpcEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x534128
size: 28
label: _ZN2rs37getTokimekiMayorNpcFavorabilityRatingEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x534144
size: 44
label: _ZN2rs37setTokimekiMayorNpcFavorabilityRatingEPKN2al9LiveActorEi
status: NotDecompiled
status: Matching
- offset: 0x534170
size: 80
label: _ZN2rs20tryFindCoinStackSaveEPiPKN2al9LiveActorEPKNS1_11PlacementIdE
status: NotDecompiled
status: Matching
- offset: 0x5341c0
size: 76
label: _ZN2rs13saveCoinStackEPKN2al9LiveActorEPKNS0_11PlacementIdEi
status: NotDecompiled
status: Matching
- offset: 0x53420c
size: 72
label: _ZN2rs31isCollectedBgmCityWorldCelemonyEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x534254
size: 80
label: _ZN2rs33isCollectedBgmCityWorldCelemony2DEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5342a4
size: 20
label: _ZN2rs27calcGetShineNumCollectedBgmE22GameDataHolderAccessor
status: NotDecompiled
status: Matching
- offset: 0x5342b8
size: 120
label: _ZN2rs28checkGetShineCollectedBgmAllEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x534330
size: 48
label: _ZN2rs19checkSavedHintPhotoEPKN2al9LiveActorEPKc
status: NotDecompiled
status: Matching
- offset: 0x534360
size: 48
label: _ZN2rs13saveHintPhotoEPKN2al9LiveActorEPKc
status: NotDecompiled
status: Matching
- offset: 0x534390
size: 12
label: _ZN2rs12isRideSphinxE22GameDataHolderAccessor
status: NotDecompiled
status: Matching
- offset: 0x53439c
size: 36
label: _ZN2rs10rideSphinxEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5343c0
size: 12
label: _ZN2rs16isRideMotorcycleE22GameDataHolderAccessor
status: NotDecompiled
status: Matching
- offset: 0x5343cc
size: 36
label: _ZN2rs14rideMotorcycleEPKN2al9LiveActorE
status: NotDecompiled
status: Matching
- offset: 0x5343f0
size: 60
label: _ZN2rs26setShowInformationPoleGrabEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x53442c
size: 64
label: _ZN2rs29isNeedShowInformationPoleGrabEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x53446c
size: 60
label: _ZN2rs27setShowInformationPoleClimbEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x5344a8
size: 64
label: _ZN2rs30isNeedShowInformationPoleClimbEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x5344e8
size: 60
label: _ZN2rs30setShowInformationPoleClimbTopEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x534524
size: 64
label: _ZN2rs33isNeedShowInformationPoleClimbTopEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x534564
size: 56
label: _ZN2rs25isNeedConfirmNetworkFirstEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
- offset: 0x53459c
size: 52
label: _ZN2rs23saveConfirmNetworkFirstEPKN2al18IUseSceneObjHolderE
status: NotDecompiled
status: Matching
System/GameProgressData.o:
'.text':
- offset: 0x5345d0

View file

@ -0,0 +1,11 @@
#pragma once
namespace al {
class RankingDirector;
class IUseRanking {
public:
virtual RankingDirector* getRankingDirector() const;
virtual bool isAvailableRanking() const;
};
} // namespace al

64
src/MapObj/KoopaShip.h Normal file
View file

@ -0,0 +1,64 @@
#pragma once
#include <math/seadMatrix.h>
#include "Library/LiveActor/LiveActor.h"
namespace al {
struct ActorInitInfo;
}
class KoopaShipWeddingPartsInfo;
class Peach;
class PropellerRotateInfo;
class KoopaShip : public al::LiveActor {
public:
KoopaShip(const char*);
void init(const al::ActorInitInfo&) override;
void onSwitchGateKeeperOpeningDemoStart();
void onBlurMovie();
void initAfterPlacement() override;
void offDepthShadow();
void onDepthShadow();
void movement() override;
void control() override;
void appear() override;
void kill() override;
void calcAnim() override;
void startClipped() override;
void endClipped() override;
void exeWait();
void endWait();
void exeDemo();
void exeDemoAppear();
void exeDemoGateKeeper();
void exeDemoHomeFlyAway();
void exeDemoHomeFlyAwayAfter();
void startDemoWait();
void endDemoWait(Peach*);
void skipGateKeeperOpeningDemo();
void startDemoHomeFlyAway();
bool isEnableStartWipeDemoHomeFlyAway() const;
s32 getWipeDemoFlyAwayStep();
bool isEnableEndDemoHomeFlyAway() const;
static KoopaShip* createForKoopaLv1(al::LiveActor*, Peach*, const al::ActorInitInfo&);
void switchHalfModel();
private:
const char* _108;
void* filler_110[9];
KoopaShipWeddingPartsInfo** _158;
void* filler_160[2];
sead::Matrix34f _170;
sead::Matrix34f _1a0;
void* filler_1d0[4];
};
namespace KoopaShipFunction {
al::LiveActor* tryCreateLinkKoopaShip(const al::ActorInitInfo&);
s32 getPropellerRotateInfoNum();
PropellerRotateInfo* getPropellerRotateInfo(s32);
const char* getWeddingPartsInitFileName();
} // namespace KoopaShipFunction
static_assert(sizeof(KoopaShip) == 0x1f0);

View file

@ -0,0 +1,125 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/Event/IEventFlowEventReceiver.h"
#include "Library/LiveActor/LiveActor.h"
#include "Demo/IUseDemoSkip.h"
namespace al {
struct ActorInitInfo;
class HitSensor;
class SensorMsg;
} // namespace al
class ShineTowerCommonKeeper;
namespace rs {
void setupHomeMeter(al::LiveActor*);
void setupHomeMeterFitherParam(al::LiveActor*, ShineTowerCommonKeeper*);
void setupHomeSticker(al::LiveActor*);
void setupHomeCompLight(al::LiveActor*);
void getHomeArchiveName(const al::LiveActor*);
} // namespace rs
class ShineTowerRocket : public al::LiveActor,
public al::IEventFlowEventReceiver,
public IUseDemoSkip {
public:
ShineTowerRocket(const char*);
void init(const al::ActorInitInfo&) override;
void onSwitchDither();
void offSwitchDither();
void makeActorDead() override;
void makeActorAlive() override;
void initAfterPlacement() override;
void startClipped() override;
void control() override;
bool isActiveDirtyModel() const;
void calcAnim() override;
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) override;
void attackSensor(al::HitSensor* self, al::HitSensor* other) override;
bool receiveEvent(const al::EventFlowEventData*) override;
void tryStartEntranceCamera(s32);
bool isFirstDemo() const override;
bool isEnableSkipDemo() const override;
void skipDemo() override;
void exeWait();
void updateParts();
bool isNearPlayerEntrance() const;
void exeReaction();
void exeDemoPrepare();
bool tryStartDemo();
void tryEndEntranceCamera();
void exeDemoWalkPlayerToPoint();
void calcPlayerPoseForPayDemo();
void tryStartHitReactionDemoStart();
void exeDemoAppearShine();
void exeDemoWaitAfterAppearShine();
bool tryLevelUp();
void exeDemoWaitBeforeScaleUpDirect();
void calcCameraMtxMeterUpPrev();
void exeDemoScaleUp();
void exeDemoMeterRotate();
void calcCameraMtx();
void setupRotateMeter();
void exeDemoMeterUpPrev();
void exeDemoMeterUp();
void exeDemoMeterUpPost();
void exeDemoTutorialShine();
void exeDemoSelectGoOtherWorld();
void exeDemoAwardMoon();
void exeDemoUpLevelCamera();
void calcCameraMtxLevelUp();
void exeDemoUpLevel();
void exeDemoInformPowerUp();
void exeDemoInformPowerUpMessage();
void exeDemoKoopaShip();
void exeDemoKoopaShipFade();
void exeDemoUpLevelCloseFade();
void exeDemoUpLevelWaitFade();
void exeDemoUpLevelOpenFade();
void exeDemoInformNewHome();
void exeDemoInformNewHomeMessage();
void exeDemoInformPeachCastleCap();
void exeDemoInformRepairHome();
void exeDemoInformNewItem();
void exeDemoInformCompleteShineFadeIn();
void exeDemoInformCompleteShineFadeWait();
void exeDemoInformCompleteShineFadeOut();
void exeDemoInformCompleteShine();
void exeDemoWarpWorld();
void exeWaitDemo();
void exeDemoAppearPlayerFromHome();
bool isActiveDamageModel() const;
void exeDemoAppearPlayerFromHomeAfter();
void exeDemoReturnToHome();
bool isActiveDirtyOrClashModel() const;
void exeDemoWorldTakeoff();
void exeDemoWorldTakeoffNext();
void setupWorldTakeoffPose(bool);
void exeDemoAppearFromEntrance();
void exeDemoWorldTakeoffForDebug();
void exeNoStart();
void exeNoStartEarth();
void exeNoStartEnter();
void exeBackDoor();
void exeNoStartAndCoin();
void exeGoToWorldMapWithCamera();
void setupWorldMapCameraParam();
void exeGoToWorldMapWithFade();
void exeWorldMap();
void cancelWorldMap();
void decideWorldMap(s32);
bool isWorldMap() const;
void startDemoAppearPlayerFromHome();
void startDemoReturnToHome();
void updatePartsByDamage();
bool isActiveClashModel() const;
private:
char filler[0x3c8];
};
static_assert(sizeof(ShineTowerRocket) == 0x4e0);

View file

@ -0,0 +1,57 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadQuat.h>
#include <math/seadVector.h>
#include "Library/LiveActor/LiveActor.h"
namespace al {
struct ActorInitInfo;
class CameraTicket;
class HitSensor;
class RippleCtrl;
class SensorMsg;
} // namespace al
class CapMessageEnableChecker;
class IUsePlayerPuppet;
class WorldWarpHole : public al::LiveActor {
public:
WorldWarpHole(const char*);
void init(const al::ActorInitInfo&) override;
void initAfterPlacement() override;
bool receiveMsg(const al::SensorMsg* message, al::HitSensor* other,
al::HitSensor* self) override;
void control() override;
void exeCloseWait();
void exeOpenWait();
void exeInvalidStart();
void exeInvalid();
void exeInvalidEnd();
void exeBindStart();
void exeBind();
void exeIn();
void exeInAfter();
void exeOutBefore();
void exeOut();
void exeOutBindRequest();
private:
IUsePlayerPuppet* mPlayerPuppet;
const char* mChangeStageId;
CapMessageEnableChecker* mCapMessageEnableChecker;
sead::Vector3f _120;
sead::Quatf _12c;
sead::Vector3f _13c;
bool _148;
bool _149;
s32 mWorldId;
al::CameraTicket* mCameraTicket;
sead::Vector3f _158;
sead::Vector3f _164;
sead::Vector3f _170;
al::RippleCtrl* mRippleCtrl;
};
static_assert(sizeof(WorldWarpHole) == 0x188);

View file

@ -0,0 +1,87 @@
#pragma once
#include <basis/seadTypes.h>
#include <container/seadObjArray.h>
#include <prim/seadSafeString.h>
#include "Library/LiveActor/LiveActor.h"
#include "Library/Ranking/IUseRanking.h"
namespace al {
struct ActorInitInfo;
class IUseDataStore;
class RankingDirector;
class RankingStateUploadCommonData;
class RankingStateUploadScore;
} // namespace al
namespace nn::nex {
class BufferQueueParam;
class qBuffer;
class DataStoreRatingInitParam;
template <typename T1, typename T2>
class qMap;
template <typename T>
class qVector;
} // namespace nn::nex
namespace TimeBalloon {
class BalloonDataServer;
class NoticeDataServer;
} // namespace TimeBalloon
enum class RankingCategory : s32;
class NexRankingUploader : public al::IUseRanking, public al::LiveActor {
public:
NexRankingUploader(const char*, const char*);
virtual ~NexRankingUploader();
void init(const al::ActorInitInfo&) override;
al::RankingDirector* getRankingDirector() const override;
bool isAvailableRanking() const override;
void uploadScore(u32, RankingCategory, bool);
void uploadName(const sead::WFixedSafeString<128>&);
void uploadAccountNickname();
bool tryLoadNickname();
bool isSuccess() const;
bool isFailure() const;
void exeUploadScore();
void exeUploadCommonData();
void exeEnd();
void requestInitializeNetwork(al::IUseRanking*);
private:
al::RankingStateUploadScore* _110;
al::RankingStateUploadCommonData* _118;
sead::FixedSafeString<128>* _120;
const char* _128;
};
namespace rs {
void restorePrincipalId(u64*, const nn::nex::qBuffer*);
void startUploadTimeBalloonNoticeData(al::IUseDataStore*, const TimeBalloon::NoticeDataServer&);
bool tryEndUploadTimeBalloonNoticeData(bool*, u64*, const al::IUseDataStore*);
bool tryStartAddTimeBalloonHistory(al::IUseDataStore*, u64, u32, u64);
bool tryStartAddTimeBalloonHistoryList(al::IUseDataStore*,
const nn::nex::qVector<nn::nex::BufferQueueParam>&,
const nn::nex::qVector<nn::nex::qBuffer>&);
bool tryEndAddTimeBalloonHistory(bool*, al::IUseDataStore*);
bool tryStartGetTimeBalloonHistory(al::IUseDataStore*, nn::nex::qVector<nn::nex::qBuffer>*, u64,
u32);
bool tryStartGetTimeBalloonHistoryList(al::IUseDataStore*,
const nn::nex::qVector<nn::nex::BufferQueueParam>&,
const nn::nex::qVector<nn::nex::qBuffer>&);
bool tryEndGetTimeBalloonHistory(bool*, const al::IUseDataStore*);
void startUploadTimeBalloonBalloonData(al::IUseDataStore*, const TimeBalloon::BalloonDataServer&,
nn::nex::qMap<s8, nn::nex::DataStoreRatingInitParam>*);
bool tryEndUploadTimeBalloonBalloonData(bool*, u64*, const al::IUseDataStore*);
bool tryStartUploadBalloonFindBalloonData(
al::IUseDataStore*, u16, const void*, s32,
const nn::nex::qMap<s8, nn::nex::DataStoreRatingInitParam>*);
bool tryStartUpdateRatingPlayedBalloon(al::IUseDataStore*, u64, u64, bool);
bool tryStartUpdateRatingBrokeBalloon(al::IUseDataStore*, u64, u64, u64, s32, s32);
bool tryEndUpdateRating(bool*, al::IUseDataStore*);
} // namespace rs
static_assert(sizeof(NexRankingUploader) == 0x130);

View file

@ -0,0 +1,41 @@
#pragma once
#include <basis/seadTypes.h>
#include <container/seadObjArray.h>
enum class alignas(8) RankingCategory : s32;
namespace RankingLocalFunction {
bool isValidCourceIdYukimaruRace(s32);
RankingCategory getRankingCategoryYukimaruRace(s32);
bool isValidWorldIdRaceManRace(s32);
RankingCategory getRankingCategoryRaceManRace(s32);
bool isRankingCategoryYukimaruRace(RankingCategory);
bool isRankingCategoryRaceManRace(RankingCategory);
s32 getRaceManRaceWorldId(RankingCategory);
bool isRankingCategoryRace(RankingCategory);
bool tryGetRankingCategoryIndex(s32*, RankingCategory, const sead::ObjArray<RankingCategory>&);
bool isExistRankingCategory(RankingCategory, const sead::ObjArray<RankingCategory>&);
RankingCategory findRankingCategoryByRaceRecordName(const char*);
bool isRankingUploadableScore(u32, RankingCategory);
} // namespace RankingLocalFunction
struct RankingDataOneRecord {
void clear();
void* filler_0[14];
};
class RankingDataOneCategory {
public:
RankingDataOneCategory(RankingCategory, s32);
void clear();
void setData(s32, u64, u32, u32, const char16*);
private:
RankingCategory _0;
void* filler_8[3];
};
static_assert(sizeof(RankingDataOneRecord) == 0x70);
static_assert(sizeof(RankingDataOneCategory) == 0x20);

View file

@ -0,0 +1,77 @@
#pragma once
#include <basis/seadTypes.h>
#include "Library/Camera/IUseCamera.h"
#include "Library/Collision/IUseCollision.h"
#include "Library/Execute/IUseExecutor.h"
#include "Library/Message/IUseMessageSystem.h"
#include "Library/Nerve/NerveExecutor.h"
#include "Library/Scene/IUseSceneObjHolder.h"
namespace al {
struct ActorInitInfo;
class CameraDirector;
class CollisionDirector;
class PlayerHolder;
class MessageSystem;
class SceneObjHolder;
class WipeSimple;
} // namespace al
class EventDemoCtrl;
class EventFlowSceneExecuteCtrl;
class NpcEventBalloonInfo;
class NpcEventCtrlInfo;
class NpcEventSceneInfo;
class NpcEventTalkInfo;
class NpcEventDirector : public al::NerveExecutor,
public al::IUseCamera,
public al::IUseCollision,
public al::IUseExecutor,
public al::IUseMessageSystem,
public al::IUseSceneObjHolder {
public:
NpcEventDirector(const al::PlayerHolder*, al::CameraDirector*, al::CollisionDirector*,
const al::MessageSystem*, EventFlowSceneExecuteCtrl*);
void init(const al::ActorInitInfo& initInfo);
void execute() override;
void updateBalloon();
void killAllBalloonForSnapshotMode();
void exeWait();
void exeDemo();
void exeDemoWipeClose();
void exeDemoWipeOpen();
void exeDemoTalk();
void endDemoTalk();
void exeDemoTalkEnd();
void exeDemoSelectChoiceStart();
void exeDemoSelectChoice();
al::CameraDirector* getCameraDirector() const override { return mCameraDirector; }
al::CollisionDirector* getCollisionDirector() const override { return mCollisionDirector; }
const al::MessageSystem* getMessageSystem() const override { return mMessageSystem; }
al::SceneObjHolder* getSceneObjHolder() const override { return mSceneObjHolder; }
private:
NpcEventSceneInfo* mNpcEventSceneInfo;
NpcEventCtrlInfo* mNpcEventCtrlInfo;
void* _48;
void* _50;
EventDemoCtrl* mEventDemoCtrl;
EventFlowSceneExecuteCtrl* mEventFlowSceneExecuteCtrl;
al::WipeSimple* mWipeSimple;
s32 mWipeFrames;
NpcEventBalloonInfo* mNpcEventBalloonInfo;
NpcEventTalkInfo* mNpcEventTalkInfo;
const al::PlayerHolder* mPlayerHolder;
al::CameraDirector* mCameraDirector;
al::CollisionDirector* mCollisionDirector;
al::SceneObjHolder* mSceneObjHolder;
const al::MessageSystem* mMessageSystem;
};
static_assert(sizeof(NpcEventDirector) == 0xb0);

44
src/Scene/QuestInfo.h Normal file
View file

@ -0,0 +1,44 @@
#pragma once
#include <basis/seadTypes.h>
#include <prim/seadSafeString.h>
#include "Library/Scene/IUseSceneObjHolder.h"
namespace al {
struct ActorInitInfo;
class PlacementInfo;
class SceneObjHolder;
} // namespace al
class QuestInfo : public al::IUseSceneObjHolder {
public:
QuestInfo();
void clear();
void init(const al::ActorInitInfo&);
void init(const al::PlacementInfo&, const al::ActorInitInfo&);
void init(const al::PlacementInfo&, al::SceneObjHolder*);
void setStageName(const char*);
void setLabel(const char*);
void copy(const QuestInfo*);
void end();
bool isEqual(const QuestInfo*) const;
al::SceneObjHolder* getSceneObjHolder() const override { return mSceneObjHolder; }
s32 getQuestNo() const { return mQuestNo; }
private:
s32 mQuestNo;
void* filler_10;
bool mIsMainQuest;
al::SceneObjHolder* mSceneObjHolder;
sead::SafeString* mScenarioName;
void* filler_30[0x12];
sead::SafeString* mStageName;
void* filler_c8[0x12];
bool mIsSingle;
void* filler_160[0x26];
};
static_assert(sizeof(QuestInfo) == 0x290);

34
src/System/CollectBgm.h Normal file
View file

@ -0,0 +1,34 @@
#pragma once
class CollectBgm {
public:
inline static const char* const cSituationNameList[9] = {
"BossForestBattle3rd",
"BossGolemBattle3rd",
"CollectBgmGiantWanderBoss",
"CollectBgmGiantWanderBoss8Bit",
"CollectBgmWorldMap",
"In2DArea",
"InWater",
"MuteOffPaulineVocal",
"TankZone",
};
inline static const char* cCeremonyCollectBgmName = "StmRsBgmCityScenario03Clct";
inline static const char* cBonusCollectBgmName01 = "StmRsBgmEndRockSpecial";
inline static const char* cBonusCollectBgmName02 = "StmRsBgmCityScenario03Special";
inline static const char* cBonusCollectBgmSituationName02 = "MuteOffPaulineVocal";
CollectBgm();
CollectBgm(const char*, const char*, const char*, const char*, const char*);
bool isEqualRequest(const char*, const char*, const char*);
private:
const char* _0;
const char* _8;
const char* _10;
const char* _18;
const char* _20;
};
static_assert(sizeof(CollectBgm) == 0x28);

View file

@ -1,7 +1,10 @@
#pragma once
#include <basis/seadTypes.h>
#include <math/seadVector.h>
#include <prim/seadBitFlag.h>
#include <prim/seadSafeString.h>
#include <stream/seadStream.h>
#include <time/seadDateTime.h>
#include "System/UniqObjInfo.h"
@ -9,12 +12,36 @@
constexpr s32 sNumWorlds = 20;
namespace al {
struct ActorInitInfo;
class ByamlWriter;
class IUseSceneObjHolder;
class PlacementId;
class PlacementInfo;
} // namespace al
namespace ShopItem {
struct ItemInfo;
}
class ChangeStageInfo;
class CollectBgm;
class GameDataHolder;
class GameProgressData;
class HintPhotoData;
struct ItemInfo;
class NetworkUploadFlag;
class PlayerHitPointData;
class QuestInfo;
class RaceRecord;
class SessionMusicianType;
struct ShineInfo;
class ShopTalkData;
class SphinxQuizData;
class TimeBalloonSaveData;
class UniqObjInfo;
class VisitStageData;
class WorldList;
class WorldWarpTalkData;
class GameDataFile {
public:
@ -71,6 +98,8 @@ public:
bool unkBool3;
};
struct CoinCollectInfo;
template <typename T, s32 Size>
class FixedHeapArray {
public:
@ -90,6 +119,19 @@ public:
T* mPtr = nullptr;
};
enum class CountType : s32 {
Value_0 = 0,
Value_1 = 1,
Value_2 = 2,
};
GameDataFile(GameDataHolder*);
void initializeData();
bool tryReadByamlData(const u8*);
CoinCollectInfo* tryFindCoinCollectInfo(const u8*, const u8*) const;
s32 tryFindShineIndexByUniqueId(s32) const;
s32 tryFindCoinCollectIndexByUniqueId(s32) const;
void buyDefaultItem();
void unlockAchievementShineName();
bool isKidsMode() const;
void updateWorldMapIndex();
@ -97,83 +139,448 @@ public:
s32 getScenarioNo(s32 worldId) const;
s32 getMainScenarioNo(s32 worldId) const;
bool isEmpty() const;
void initializeCheckpointTable();
void generateSaveDataIdForPrepo();
void resetMapIcon();
void wearDefault();
void initializeHintList();
void initializeCoinCollectList();
void resetTempData();
bool isGameClear() const;
bool isUnlockedWorld(s32 worldId) const;
bool isAlreadyGoWorld(s32 worldId) const;
void addPlayTime(s32, const al::IUseSceneObjHolder*);
s64 getPlayTimeTotal() const;
void updateSaveTime();
void updateSaveTimeForDisp();
void updateSaveInfoForDisp();
sead::DateTime getLastUpdateTime() const;
void generateSaveDataIdForPrepoForWrite();
void resetSaveDataIdForPrepoForWrite();
void startStage(const char*, s32);
bool isRaceStart() const;
bool checkIsHomeStage(const char* stageName) const;
void setGameClear();
void setOriginalHintTrans(s32);
PlayerHitPointData* getPlayerHitPointData() const;
void startDemoStage(const char*);
void changeNextStage(const char*);
void returnPrevStage();
void changeNextStageWithDemoWorldWarp(const char*);
void changeNextStageWithWorldWarpHole(const char*);
void restartStage();
s32 calcNextScenarioNo() const;
const char* getStageNameCurrent() const;
const char* tryGetStageNameCurrent() const;
const char* getStageNameNext() const;
void changeWipeType(const char*);
void setActivateHome();
bool isGoToCeremonyFromInsideHomeShip() const;
const char* getPlayerStartId() const;
void setCheckpointId(const al::PlacementId*);
void setRestartPointId(const al::PlacementId*);
void clearStartId();
const char* tryGetRestartPointIdString() const;
void endStage();
void missAndRestartStage();
void setMissRestartInfo(const al::PlacementInfo&);
bool isUseMissRestartInfo(const al::PlacementInfo&) const;
bool isFirstTimeNextWorld() const;
void getAchievement(const char*);
bool isGotShine(const ShineInfo*) const;
bool isGotShine(s32) const;
bool checkGotShine(const char*) const;
void setGotShine(const ShineInfo*);
s32 getShineNum() const;
s32 getShineNum(s32) const;
s32 getTotalShineNum() const;
s32 getTotalShopShineNum() const;
bool tryGetNextMainScenarioLabel(sead::BufferedSafeStringBase<char>*,
sead::BufferedSafeStringBase<char>*) const;
bool tryGetNextMainScenarioPos(sead::Vector3f*) const;
HintInfo* tryFindNextMainScenarioInfo() const;
void addPayShine(s32);
void addPayShineCurrentAll();
s32 getPayShineNum(s32 worldId = -1) const;
s32 getTotalPayShineNum() const;
bool isPayShineAllInAllWorld() const;
void addKey(s32);
s32 getKeyNum() const;
void addOpenDoorLockNum(s32);
void setStartedObj(const al::PlacementId*);
bool isStartedObj(const al::PlacementId*, const char*) const;
bool isStartedObj(const char* stageName, const char* objId) const;
void setSaveObjS32(const al::PlacementId*, s32);
const SaveObjS32* tryFindSaveObjS32(const al::PlacementId* placementId);
bool isExistSessionMember(const SessionMusicianType&) const;
void addSessionMember(const SessionMusicianType&) const;
void addCoinCollect(const al::PlacementId*);
bool isGotCoinCollect(const al::PlacementId*) const;
s32 getCoinCollectNum() const;
s32 getCoinCollectGotNum() const;
s32 getCoinCollectGotNum(s32) const;
void useCoinCollect(s32 purplesUsed);
const char* tryFindCoinCollectStageName(s32) const;
void payCoinToSphinx();
bool isPayCoinToSphinx() const;
void answerCorrectSphinxQuiz();
void answerCorrectSphinxQuizAll();
bool isAnswerCorrectSphinxQuiz(s32 index) const;
bool isAnswerCorrectSphinxQuizAll(s32 index) const;
bool isTalkAlreadyLocalLanguage() const;
void talkLocalLanguage();
bool isFirstWorldTravelingStatus() const;
void saveWorldTravelingStatus();
const char* getWorldTravelingStatus() const;
bool isStartWorldTravelingPeach() const;
void startWorldTravelingPeach();
void setGrowFlowerTime(const al::PlacementId*, const al::PlacementId*, u64 time);
void setGrowFlowerTime(const al::PlacementId*, u64 time);
u64 getGrowFlowerTime(const al::PlacementId*) const;
void addGrowFlowerGrowLevel(const al::PlacementId*, u32 growLevel);
u32 getGrowFlowerGrowLevel(const al::PlacementId*) const;
bool isUsedGrowFlowerSeed(const al::PlacementId*) const;
const char* findGrowFlowerPotIdFromSeedId(const al::PlacementId*);
void addCoin(s32);
void addPlayerJumpCount();
s32 getPlayerJumpCount() const;
void addPlayerThrowCapCount();
s32 getPlayerThrowCapCount() const;
bool readFromStream(sead::ReadStream*, u8*);
bool tryReadByamlDataFromStream(sead::ReadStream*, u8*, s32);
void writeToStream(sead::WriteStream*, sead::Heap*) const;
bool tryWriteByByaml(sead::WriteStream*, sead::Heap*) const;
bool isPlayDemoPlayerDownForBattleKoopaAfter() const;
s32 getCheckpointNumMaxInWorld() const;
const sead::Vector3f& getCheckpointTransInWorld(const char*) const;
bool isGotCheckpointInWorld(s32) const;
s32 calcCheckpointIndexInScenario(s32) const;
const char* getCheckpointObjIdInWorld(s32) const;
bool isGotCheckpoint(al::PlacementId*) const;
void changeNextSceneByGotCheckpoint(s32);
void changeNextSceneByWarp();
void changeNextSceneByHome();
void startYukimaruRace();
void startYukimaruRaceTutorial();
void startRaceManRace();
void registerCheckpointTrans(const al::PlacementId*, const sead::Vector3f&);
s32 calcGetCheckpointNum() const;
bool isEnableUnlockHint() const;
s32 calcRestHintNum() const;
void unlockHint();
void unlockHintImpl(s32);
void unlockHintAmiibo();
void unlockHintAddByMoonRock();
s32 calcHintNum() const;
const sead::Vector3f& calcHintTrans(s32) const;
HintInfo* findHint(s32) const;
const sead::Vector3f& calcHintTransMostEasy() const;
HintInfo* findHintInfoMostEasy() const;
s32 calcHintMoonRockNum() const;
const sead::Vector3f& calcHintMoonRockTrans(s32) const;
HintInfo* findHintMoonRock(s32) const;
bool tryUnlockShineName(s32, s32);
bool isOpenMoonRock(s32) const;
void calcShineIndexTableNameAvailable(s32*, s32*, s32);
void calcShineIndexTableNameUnlockable(s32*, s32*, s32);
bool isUnlockAchievementShineName() const;
void unlockWorld(s32);
void noPlayDemoWorldWarp();
s32 calcWorldWarpHoleThroughNum() const;
s32 getWorldWarpHoleThroughNumMax() const;
void enteredStage();
void buyItem(const ShopItem::ItemInfo*, bool);
const sead::FixedSafeString<64>* tryFindItemList(ItemInfo*) const;
s32 calcHaveClothNum() const;
s32 calcHaveCapNum() const;
s32 calcHaveStickerNum() const;
s32 calcHaveGiftNum() const;
bool isBuyItem(const ShopItem::ItemInfo*) const;
bool isBuyItem(const char*, const sead::FixedSafeString<64>*) const;
void buyItemAll();
void wearCostume(const char* name);
void wearCap(const char* name);
void addHackDictionary(const char*);
bool isExistInHackDictionary(const char*) const;
HintInfo* findShine(s32, s32) const;
bool isGotShine(s32, s32) const;
bool isOpenShineName(s32, s32) const;
s32 calcShineNumInOneShine(s32, s32) const;
bool checkAchievementShine(s32, s32) const;
s32 getWorldTotalShineNum(s32) const;
s32 getWorldTotalShineNumMax(s32) const;
void winRace();
RaceRecord* findRaceRecord(const char*) const;
void incrementRaceLoseCount(s32);
s32 getRaceLoseCount(s32) const;
void setJumpingRopeBestCount(s32);
void setUpdateJumpingRopeScoreFlag();
void setVolleyballBestCount(s32);
void setUpdateVolleyballScoreFlag();
bool isExistJango() const;
void setJangoTrans(const sead::Vector3f&);
void setAmiiboNpcTrans(const sead::Vector3f&);
void setTimeBalloonNpcTrans(const sead::Vector3f&);
void setPoetterTrans(const sead::Vector3f&);
void setShopNpcTrans(const sead::Vector3f&, const char*, s32);
void setMoonRockTrans(const sead::Vector3f&);
void setMiniGameInfo(const sead::Vector3f&, const char*);
s32 calcMiniGameNum() const;
s32 getMiniGameNumMax() const;
const sead::Vector3f& getMiniGameTrans(s32) const;
const char* getMiniGameName(s32) const;
bool isExistTimeBalloonNpc() const;
const sead::Vector3f& getTimeBalloonNpcTrans() const;
bool isExistPoetter() const;
const sead::Vector3f& getPoetterTrans() const;
bool isAlreadyShowExplainCheckpointFlag() const;
void showExplainCheckpointFlag();
const sead::Vector3f& getShopNpcTrans(s32) const;
bool isShopSellout() const;
s32 calcShopNum() const;
s32 getShopNpcIconNumMax() const;
s32 getScenarioNo() const;
s32 getScenarioNoPlacement() const;
bool isClearWorldMainScenario(s32) const;
bool isFlagOnTalkMessageInfo(s32) const;
void setFlagOnTalkMessageInfo(s32);
bool isTalkKakku() const;
void talkKakku();
bool isTalkWorldTravelingPeach() const;
void talkWorldTravelingPeach();
bool isTalkCollectBgmNpc() const;
void talkCollectBgmNpc();
s32 getTokimekiMayorNpcFavorabilityRating() const;
void setTokimekiMayorNpcFavorabilityRating(s32);
bool isFirstNetwork() const;
void noFirstNetwork();
void setKidsMode(bool);
bool isPlayScenarioCamera(const QuestInfo*) const;
bool isNextMainShine(const QuestInfo*) const;
bool isNextMainShine(s32) const;
bool isMainShine(s32) const;
bool isLatestGetMainShine(const ShineInfo*) const;
bool calcIsGetMainShineAll(const al::IUseSceneObjHolder*) const;
bool calcIsGetShineAllInWorld(s32) const;
s32 tryFindLinkedShineIndex(const al::ActorInitInfo&, const al::IUseSceneObjHolder*) const;
s32 tryFindLinkedShineIndex(const al::ActorInitInfo&, s32, const al::IUseSceneObjHolder*) const;
s32 tryFindLinkedShineIndexByLinkName(const al::IUseSceneObjHolder*, const al::ActorInitInfo&,
const char*) const;
s32 calcLinkedShineNum(const al::ActorInitInfo&) const;
s32 tryFindShineIndex(const al::ActorInitInfo&) const;
s32 tryFindShineIndex(const char*, const char*) const;
void disableHintById(s32 shineIndex);
void enableHintById(s32 shineIndex);
void setStartShine(const ShineInfo*);
s32 getStartShineNextIndex() const;
void setHintTrans(s32, const sead::Vector3f&);
void resetHintTrans(s32);
void registerShineInfo(const ShineInfo*, const sead::Vector3f&);
s32 calcRestShineInStageWithWorldProgress(const char*) const;
s32 calcGetShineNumByObjectNameOrOptionalId(const char*, CountType) const;
s32 calcGetShineNumByObjectNameWithWorldId(const char*, s32) const;
s32 calcAllShineNumByObjectNameOrOptionalId(const char*) const;
s32 calcGetShineNumByStageName(const char*) const;
bool tryFindAndInitShineInfoByOptionalId(ShineInfo*, const char*);
s32 tryFindUniqueId(const ShineInfo*) const;
s32 findUnlockShineNumCurrentWorld(bool*) const;
s32 getMainScenarioNoCurrent() const;
void setMainScenarioNo(s32);
bool isCollectedBgm(const char*, const char*) const;
const CollectBgm* getCollectBgmByIndex(s32) const;
bool trySetCollectedBgm(const char*, const char*);
s32 getCollectedBgmNum() const;
s32 getCollectedBgmNumMax() const;
void setGotShine(s32);
void setGotShine(const HintInfo*);
bool isEnableOpenMoonRock(s32) const;
bool tryWriteByByaml(al::ByamlWriter*) const;
bool isHintNpcFirstTalk() const { return mIsHintNpcFirstTalk; }
void hintNpcFirstTalk() { mIsHintNpcFirstTalk = true; }
bool isKinopioBrigadeNpcFirstTalk() const { return mIsKinopioBrigadeNpcFirstTalk; }
void kinopioBrigadeNpcFirstTalk() { mIsKinopioBrigadeNpcFirstTalk = true; }
TimeBalloonSaveData* getTimeBalloonSaveData() const { return mTimeBalloonSaveData; }
bool isTalkFirstAmiiboNpc() const { return mIsTalkFirstAmiiboNpc; }
void offTalkFirstAmiiboNpc() { mIsTalkFirstAmiiboNpc = false; }
WorldWarpTalkData* getWorldWarpTalkData() const { return mWorldWarpTalkData; }
VisitStageData* getVisitStageData() const { return mVisitStageData; }
NetworkUploadFlag* getNetworkUploadFlag() const { return mNetworkUploadFlag; }
HintPhotoData* getHintPhotoData() const { return mHintPhotoData; }
bool isRideSphinx() const { return mIsRideSphinx; }
void rideSphinx() { mIsRideSphinx = true; }
bool isRideMotorcycle() const { return mIsRideMotorcycle; }
void rideMotorcycle() { mIsRideMotorcycle = true; }
s32 getJumpingRopeBestCount() const { return mJumpingRopeBestCount; }
s32 getJumpingRopeDayCount() const { return mJumpingRopeDayCount; }
void setJumpingRopeDayCount(s32 count) { mJumpingRopeDayCount = count; }
bool isExistRecordJumpingRope() const { return mIsExistRecordJumpingRope; }
void existRecordJumpingRope() { mIsExistRecordJumpingRope = true; }
bool isExistRecordInDayJumpingRope() const { return mIsExistRecordInDayJumpingRope; }
void existRecordInDayJumpingRope() { mIsExistRecordInDayJumpingRope = true; }
s32 getVolleyballBestCount() const { return mVolleyballBestCount; }
s32 getVolleyballDayCount() const { return mVolleyballDayCount; }
void setVolleyballDayCount(s32 count) { mVolleyballDayCount = count; }
bool isExistRecordVolleyball() const { return mIsExistRecordVolleyball; }
void existRecordVolleyball() { mIsExistRecordVolleyball = true; }
bool isExistRecordInDayVolleyball() const { return mIsExistRecordInDayVolleyball; }
void existRecordInDayVolleyball() { mIsExistRecordInDayVolleyball = true; }
s32 getCurrentWorldId() const { return mCurrentWorldId; }
void startKoopaCapture() { mIsStartKoopaCapture = true; }
bool isStartKoopaCapture() const { return mIsStartKoopaCapture; }
ShopTalkData* getShopTalkData() const { return mShopTalkData; }
bool isEnableCapMessageLifeOneKidsMode() const { return mIsEnableCapMessageLifeOneKidsMode; }
void disableCapMessageLifeOneKidsMode() { mIsEnableCapMessageLifeOneKidsMode = false; }
private:
char _000[24];
char _000[0x18];
FixedHeapArray<s32, sNumWorlds> mShopShineNum;
FixedHeapArray<s32, sNumWorlds> mMainScenarioNo;
char _028[768];
s32 mStartShineIndex;
char _02c[0x98];
sead::FixedSafeString<128> mPlayerStartIdForSave;
char _15c[0x30];
WorldList* mWorldList;
char _198[0x60];
sead::FixedSafeString<128> mCheckpointName;
char _28c[0x98];
sead::FixedSafeString<128> mCurrentStageName;
char _3c0[160];
char _3bc[0xa0];
FixedHeapArray<bool, sNumWorlds> mIsWorldWarpHoleThrough;
sead::DateTime mSaveTimeForDisp;
sead::DateTime mSaveTime;
char _478[8];
s64 mSaveDataIdForPrepo;
s64 mSaveDataIdForPrepoForWrite;
FixedHeapArray<UniqObjInfo, 320> mGotCheckpoint;
char _490[280];
char _490[0x118];
FixedHeapArray<s32, sNumWorlds> mPayShineNum;
char _5b0[16];
bool mIsPayShineInAllWorld;
s32 mKeyNum;
char _5b8[0x8];
FixedHeapArray<UniqObjInfo, 512> mStartedObj;
FixedHeapArray<SaveObjS32, 256> mSaveObjS32;
char _5d0[24];
char _5d0[0x8];
s32 mCoinNum;
s32 mTotalCoinNum;
s32 mPlayerJumpCount;
s32 mPlayerThrowCapCount;
FixedHeapArray<s32, sNumWorlds> mUseCoinCollectNum;
FixedHeapArray<s32, sNumWorlds> mUnlockedWorldId;
bool mIsPlayDemoOpening;
char _5f9[23];
bool mIsEnableCap;
char _5fa[0xe];
s32 mSessionEventProgress;
bool mIsPayCoinToSphinx;
SphinxQuizData* mSphinxQuizData;
FixedHeapArray<bool, sNumWorlds> mIsTalkLocalLanguage;
char _620[115];
bool mIsHintNpcFirstTalk;
bool mIsKinopioBrigadeNpcFirstTalk;
s32 mCapStatusForJango;
char _628[0x4];
s32 mJangoCount;
TimeBalloonSaveData* mTimeBalloonSaveData;
sead::FixedSafeString<64> mWorldTravelingStatus;
bool mIsStartWorldTravelingPeach;
bool mIsPlayAlreadyWorldWarp;
bool mIsTalkFirstAmiiboNpc;
bool mIsUnlockAchievement;
char _694[20];
WorldWarpTalkData* mWorldWarpTalkData;
VisitStageData* mVisitStageData;
GameProgressData* mGameProgressData;
char _6b0[96];
char _6b0[0x20];
NetworkUploadFlag* mNetworkUploadFlag;
char _6d8[0x8];
HintPhotoData* mHintPhotoData;
s64 mPlayTimeTotal;
char _6f0[0x20];
sead::FixedSafeString<64> mCurrentCostumeName;
sead::FixedSafeString<64> mCurrentCapName;
char _7c0[24];
bool mIsCostumeRandom;
bool mIsCapRandom;
char _7c2[0xe];
bool mIsRideSphinx;
bool mIsRideMotorcycle;
FixedHeapArray<s32, sNumWorlds> mScenarioNo;
char _7e0[72];
char _7e0[0x10];
s32 mRaceLoseCountLv1;
s32 mRaceLoseCountLv2;
s32 mJumpingRopeBestCount;
s32 mJumpingRopeDayCount;
bool mIsExistRecordJumpingRope;
bool mIsExistRecordInDayJumpingRope;
s32 mVolleyballBestCount;
s32 mVolleyballDayCount;
bool mIsExistRecordVolleyball;
bool mIsExistRecordInDayVolleyball;
s32 mNextWorldId;
s32 mPrevWorldId;
bool mIsPlayDemoPlayerDownForBattleKoopaAfter;
char _819[0xf];
bool mIsKidsMode;
char _829[39];
char _829[0x17];
bool mIsTalkKakku;
bool mIsTalkWorldTravelingPeach;
s32 mTokimekiMayorNpcFavorabilityRating;
bool mIsFirstNetwork;
GameDataHolder* mGameDataHolder;
char _858[16];
char _858[0x8];
PlayerHitPointData* mPlayerHitPointData;
sead::BufferedSafeString mNextStageName;
char _880[288];
char _884[0x11c];
FixedHeapArray<HintInfo, 1024> mHintList;
char _9a8[72];
char _9a8[0x48];
s32 mCurrentWorldId;
char _9f4[332];
s32 mWorldId;
char _9f8[0x38];
ChangeStageInfo* mChangeStageInfo;
char _a38[0x9];
bool mIsStartKoopaCapture;
char _a42[0x1e];
ShopTalkData* mShopTalkData;
char _a68[0x8];
bool mIsShowExplainCheckpointFlag;
char _a71[0xcf];
FixedHeapArray<s32, sNumWorlds> mWorldMapIndex;
s32 mWorldMapNum;
char _b4c[4];
FixedHeapArray<s32, sNumWorlds> mWorldWarpIndex;
s32 mWorldWarpNum;
char _b5c[12];
char _b5c[0x9];
bool mIsEnableCapMessageLifeOneKidsMode;
char _b66[0x2];
inline s32 getCurrentWorldIdNoDevelop() const;
};

View file

@ -221,6 +221,10 @@ public:
WorldList* getWorldList() const { return mWorldList; }
bool isExistKoopaShip() const { return mIsExistKoopaShip; }
void setExistKoopaShip(bool isExistKoopaShip) { mIsExistKoopaShip = isExistKoopaShip; }
GameSequenceInfo* getSequenceInfo() const { return mSequenceInfo; }
private:
@ -283,7 +287,7 @@ private:
bool mIsSeparatePlay;
bool mIsPlayDemoLavaErupt;
QuestInfoHolder* mQuestInfoHolder;
bool _250; // related to resetTempSaveData
bool mIsExistKoopaShip;
GameSequenceInfo* mSequenceInfo;
TimeBalloonSequenceInfo* mTimeBalloonSequenceInfo;
};

1036
src/System/GameDataUtil.cpp Normal file

File diff suppressed because it is too large Load diff

View file

@ -49,14 +49,16 @@ SaveObjInfo* createSaveObjInfoNoWriteSaveDataInSameScenario(const al::ActorInitI
void onSaveObjInfo(SaveObjInfo* saveObjInfo);
void offSaveObjInfo(SaveObjInfo* saveObjInfo);
bool isOnSaveObjInfo(const SaveObjInfo* saveObjInfo);
void setGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId*, const al::PlacementId*,
u64 time);
void setGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId*, u64 time);
u64 getGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId*);
bool isUsedGrowFlowerSeed(const al::LiveActor* actor, const al::PlacementId*);
void addGrowFlowerGrowLevel(const al::LiveActor* actor, const al::PlacementId*, u32 growLevel);
u32 getGrowFlowerGrowLevel(const al::LiveActor* actor, const al::PlacementId*);
const char* findGrowFlowerPotIdFromSeedId(const al::LiveActor* actor, const al::PlacementId*);
void setGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId* placement1,
const al::PlacementId* placement2, u64 time);
void setGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId* placement, u64 time);
u64 getGrowFlowerTime(const al::LiveActor* actor, const al::PlacementId* placement);
bool isUsedGrowFlowerSeed(const al::LiveActor* actor, const al::PlacementId* placement);
void addGrowFlowerGrowLevel(const al::LiveActor* actor, const al::PlacementId* placement,
u32 growLevel);
u32 getGrowFlowerGrowLevel(const al::LiveActor* actor, const al::PlacementId* placement);
const char* findGrowFlowerPotIdFromSeedId(const al::LiveActor* actor,
const al::PlacementId* placement);
bool isPlayFirstTimeBalloon(const al::LiveActor* actor);
void playTimeBalloonFirst(const al::LiveActor* actor);
void onShortExplainGet(const al::LiveActor* actor);
@ -90,8 +92,8 @@ void resetExistKoopaShip(const KoopaShip* koopaShip);
bool isExistKoopaShip(const ShineTowerRocket* shineTowerRocket);
bool isExistKoopaShipInSky(const ShineTowerRocket* shineTowerRocket);
bool tryUnlockShineName(const al::LiveActor* actor, s32 shineIdx);
void calcShineIndexTableNameAvailable(s32*, s32*, const al::LiveActor* actor);
void calcShineIndexTableNameUnlockable(s32*, s32*, const al::LiveActor* actor);
void calcShineIndexTableNameAvailable(s32* unk, s32* out, const al::LiveActor* actor);
void calcShineIndexTableNameUnlockable(s32* unk, s32* out, const al::LiveActor* actor);
s32 calcWorldIdByWorldWarpHole(const WorldWarpHole* worldWarpHole, const char* changeStageId);
bool checkIsOpenWorldWarpHoleCurrentScenario(const WorldWarpHole* worldWarpHole);
bool isKidsMode(const al::LiveActor* actor);
@ -103,31 +105,34 @@ bool isEnableCapMessageLifeOneKidsMode(const al::LiveActor* actor);
void disableCapMessageLifeOneKidsMode(const al::LiveActor* actor);
bool isInvalidChangeStage(const al::LiveActor* actor);
bool isSequenceTimeBalloonOrRace(const al::LiveActor* actor);
bool isSequenceTimeBalloonOrRace(const al::LiveActor* actor);
bool isSequenceTimeBalloonOrRace(const GameDataHolder* holder);
bool isTreasureBoxDeadStage(const al::LiveActor* actor);
void findRaceRecord(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::LiveActor* actor, const char* raceName);
void findRaceRecord(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::Scene* actor, const char* raceName);
void findRaceRecordRaceManRace(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::Scene* scene);
void findRaceRecordRaceManRace(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::LiveActor* actor);
void findRaceRecordRaceManRaceWithWorldId(bool* isExistRecord, bool*, s32* record, s32*,
s32* lapRecord, const al::Scene* scene, s32 worldId);
void findRaceRecordRaceManRaceWithWorldId(bool* isExistRecord, bool*, s32* record, s32*,
s32* lapRecord, const al::LiveActor* actor, s32 worldId);
void findRaceRecordRadicon(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::Scene* scene);
void findRaceRecordRadicon(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::LiveActor* actor);
void findRaceRecordYukimaru(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::Scene* scene, s32 level);
void findRaceRecordYukimaru(bool* isExistRecord, bool*, s32* record, s32*, s32* lapRecord,
const al::LiveActor* actor, s32 level);
void writeRaceRecord(const al::LiveActor* actor, const char* raceName, s32 record, s32,
void findRaceRecord(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::LiveActor* actor, const char* raceName);
void findRaceRecord(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::Scene* scene, const char* raceName);
void findRaceRecordRaceManRace(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::Scene* scene);
void findRaceRecordRaceManRace(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::LiveActor* actor);
void findRaceRecordRaceManRaceWithWorldId(bool* isExistRecord, bool* isRecordSet, s32* record,
s32* bestRecord, s32* lapRecord, const al::Scene* scene,
s32 worldId);
void findRaceRecordRaceManRaceWithWorldId(bool* isExistRecord, bool* isRecordSet, s32* record,
s32* bestRecord, s32* lapRecord,
const al::LiveActor* actor, s32 worldId);
void findRaceRecordRadicon(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::Scene* scene);
void findRaceRecordRadicon(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::LiveActor* actor);
void findRaceRecordYukimaru(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::Scene* scene, s32 level);
void findRaceRecordYukimaru(bool* isExistRecord, bool* isRecordSet, s32* record, s32* bestRecord,
s32* lapRecord, const al::LiveActor* actor, s32 level);
void writeRaceRecord(const al::LiveActor* actor, const char* raceName, s32 record, s32 bestRecord,
s32 lapRecord);
void writeRaceRecord(const al::Scene* scene, const char* raceName, s32 record, s32 bestRecord,
s32 lapRecord);
void writeRaceRecord(const al::Scene* scene, const char* raceName, s32 record, s32, s32 lapRecord);
s32 getJumpingRopeBestCount(const al::LiveActor* actor);
s32 getJumpingRopeBestCount(const al::Scene* scene);
void setJumpingRopeBestCount(const al::LiveActor* actor, s32 count);
@ -159,14 +164,15 @@ bool checkGetEnoughShine(const al::LiveActor* actor, s32 count);
bool checkGetEnoughShineInCurrentWorld(const al::LiveActor* actor);
void setFlagOnStartKoopaCapture(const al::LiveActor* actor);
bool isStartKoopaCapture(const al::LiveActor* actor);
bool isAlreadyTalkPrevWorldInWorldWarp(const al::LiveActor* actor, s32);
bool isAlreadyTalkNextWorldInWorldWarp(const al::LiveActor* actor, s32);
void setAlreadyTalkPrevWorldInWorldWarp(const al::LiveActor* actor, s32);
void setAlreadyTalkNextWorldInWorldWarp(const al::LiveActor* actor, s32);
bool isAlreadyTalkPrevWorldInWorldWarp(const al::LiveActor* actor, s32 worldId);
bool isAlreadyTalkNextWorldInWorldWarp(const al::LiveActor* actor, s32 worldId);
void setAlreadyTalkPrevWorldInWorldWarp(const al::LiveActor* actor, s32 worldId);
void setAlreadyTalkNextWorldInWorldWarp(const al::LiveActor* actor, s32 worldId);
bool checkNeedTalkPrevWorld(const al::LiveActor* actor);
s32 getTipsIdInWorldWarp(const al::LiveActor* actor);
void addTipsIdInWorldWarp(const al::LiveActor* actor);
void setTalkSpecialInWorldWarp(const al::LiveActor* actor, bool, bool);
void setTalkSpecialInWorldWarp(const al::LiveActor* actor, bool isTalkFindKoopa,
bool isTalkBossRaid);
bool isTalkFindKoopaInWorldWarp(const al::LiveActor* actor);
bool isTalkBossRaidInWorldWarp(const al::LiveActor* actor);
bool isClearMainScenario(const al::LiveActor* actor, s32 worldId);
@ -182,7 +188,7 @@ void explainShopCoin(const al::LiveActor* actor);
bool checkShowNewItemAndPrepareSave(const al::LiveActor* actor);
bool isInNormalCoinShopFirst(const al::LiveActor* actor);
void offInNormalCoinShopFirst(const al::LiveActor* actor);
bool checkExistNewShopItem(const al::LiveActor* actor, s32, s32, bool);
bool checkExistNewShopItem(const al::LiveActor* actor, s32 unk1, s32 unk2, bool unk3);
CapMessageBossData* getCapMessageBossData(const al::LiveActor* actor);
void getYoshiFruit(SaveObjInfo* saveObjInfo);
bool isGetYoshiFruit(const SaveObjInfo* saveObjInfo);
@ -194,8 +200,8 @@ bool isTalkCollectBgmNpc(const al::LiveActor* actor);
void talkCollectBgmNpc(const al::LiveActor* actor);
s32 getTokimekiMayorNpcFavorabilityRating(const al::LiveActor* actor);
void setTokimekiMayorNpcFavorabilityRating(const al::LiveActor* actor, s32 rating);
bool tryFindCoinStackSave(s32*, const al::LiveActor* actor, const al::PlacementId*);
void saveCoinStack(const al::LiveActor* actor, const al::PlacementId*, s32);
bool tryFindCoinStackSave(s32* out, const al::LiveActor* actor, const al::PlacementId* placement);
void saveCoinStack(const al::LiveActor* actor, const al::PlacementId* placement, s32 value);
bool isCollectedBgmCityWorldCelemony(const al::LiveActor* actor);
bool isCollectedBgmCityWorldCelemony2D(const al::LiveActor* actor);
s32 calcGetShineNumCollectedBgm(GameDataHolderAccessor accessor);

View file

@ -0,0 +1,29 @@
#pragma once
#include <basis/seadTypes.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
class GameDataFile;
class HintPhotoData : public ByamlSave {
public:
HintPhotoData(const GameDataFile*);
void init();
void saveHintPhoto(const char*);
bool checkSavedHintPhoto(const char*) const;
void write(al::ByamlWriter*) override;
void read(const al::ByamlIter&) override;
private:
GameDataFile* mGameDataFile;
s32 mSize;
const char** mNameList;
};
static_assert(sizeof(HintPhotoData) == 0x20);

View file

@ -0,0 +1,32 @@
#pragma once
#include <basis/seadTypes.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
enum class RankingCategory : s32;
class NetworkUploadFlag : public ByamlSave {
public:
NetworkUploadFlag();
void init();
bool isNeedUpload(const RankingCategory&) const;
void upload(const RankingCategory&);
void updateScore(const RankingCategory&);
void write(al::ByamlWriter*) override;
void read(const al::ByamlIter&) override;
struct Entry {
bool isNeedUpload;
u64 lastUploadTime;
};
private:
Entry* mFlags;
};
static_assert(sizeof(NetworkUploadFlag) == 0x10);

View file

@ -23,6 +23,16 @@ public:
void write(al::ByamlWriter* writer) override;
void read(const al::ByamlIter& save) override;
s32 getRecord() const { return mRecord; }
s32 getBestRecord() const { return mBestRecord; }
s32 getLapRecord() const { return mLapRecord; }
bool isExistRecord() const { return mIsExistRecord; }
bool isRecordSet() const { return mIsRecordSet; }
private:
s32 mRecord = RaceTimeFunction::getRaceTimeMaxCsec();
s32 mBestRecord = RaceTimeFunction::getRaceTimeMaxCsec();

46
src/System/ShopTalkData.h Normal file
View file

@ -0,0 +1,46 @@
#pragma once
#include <basis/seadTypes.h>
#include <container/seadPtrArray.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
namespace ShopItem {
struct ShopItemInfo;
}
class GameDataHolderAccessor;
class ShopTalkData : public ByamlSave {
public:
ShopTalkData(s32, const s32*, s32, const sead::PtrArray<ShopItem::ShopItemInfo>&);
void init();
bool isEnableExplainShopCoin(s32) const;
bool checkShowNewItemAndPrepareSave(const GameDataHolderAccessor&, bool, s32);
bool checkExistNewItem(const GameDataHolderAccessor&, s32, s32, bool) const;
void write(al::ByamlWriter*) override;
void read(const al::ByamlIter&) override;
bool isInNormalCoinShopFirst() const { return mIsInNormalCoinShopFirst; }
void resetInNormalCoinShopFirst() { mIsInNormalCoinShopFirst = false; }
void resetIsEnableExplainShopCoin(s32 worldId) { mIsEnableExplainShopCoin[worldId] = false; }
private:
bool mIsInNormalCoinShopFirst;
s32 mSize;
bool* mIsEnableExplainShopCoin; // Array of bool of size mSize
bool* _18;
bool* _20;
s32* _28;
s32 _30;
ShopItem::ShopItemInfo** _38;
};
static_assert(sizeof(ShopTalkData) == 0x40);

View file

@ -0,0 +1,52 @@
#pragma once
#include <basis/seadTypes.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
class TimeBalloonSaveData : public ByamlSave {
public:
TimeBalloonSaveData();
void init();
void write(al::ByamlWriter*) override;
void read(const al::ByamlIter&) override;
bool isExplainedTutorial() const { return mIsExplainedTutorial; }
void setExplainedTutorial() { mIsExplainedTutorial = true; }
bool isReactedLuigiCostume() const { return mIsReactedLuigiCostume; }
void setReactedLuigiCostume() { mIsReactedLuigiCostume = true; }
bool isShortExplainGet() const { return mIsShortExplainGet; }
void setShortExplainGet() { mIsShortExplainGet = true; }
bool isShortExplainSet() const { return mIsShortExplainSet; }
void setShortExplainSet() { mIsShortExplainSet = true; }
s32 getPlayerRank() const { return mPlayerRank; }
void setPlayerRank(s32 rank) { mPlayerRank = rank; }
u64 getPrincipalId() const { return mPrincipalId; }
void setPrincipalId(u64 id) { mPrincipalId = id; }
private:
bool mIsExplainedTutorial;
bool mIsReactedLuigiCostume;
u64 mPrincipalId;
s32 mPlayerRank;
bool mIsShortExplainGet;
bool mIsShortExplainSet;
};
static_assert(sizeof(TimeBalloonSaveData) == 0x20);

View file

@ -0,0 +1,26 @@
#pragma once
#include <basis/seadTypes.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
class VisitStageData : public ByamlSave {
public:
VisitStageData();
void init();
bool checkAlreadyVisit(const char*) const;
void visit(const char*);
void write(al::ByamlWriter*);
void read(const al::ByamlIter&);
private:
void* _8;
s32 _10;
};
static_assert(sizeof(VisitStageData) == 0x18);

View file

@ -0,0 +1,37 @@
#pragma once
#include <basis/seadTypes.h>
#include "System/ByamlSave.h"
namespace al {
class ByamlIter;
class ByamlWriter;
} // namespace al
class WorldWarpTalkData : public ByamlSave {
public:
WorldWarpTalkData(s32);
void init();
bool isAlreadyTalkPrevWorld(s32 worldId) const;
bool isAlreadyTalkNextWorld(s32 worldId) const;
void setAlreadyTalkPrevWorld(s32 worldId);
void setAlreadyTalkNextWorld(s32 worldId);
s32 getTipsId() const;
void addTipsId();
void setTalkSpecial(bool isTalkFindKoopa, bool isTalkBossRaid);
bool isTalkFindKoopa() const;
bool isTalkBossRaid() const;
void write(al::ByamlWriter*) override;
void read(const al::ByamlIter&) override;
private:
s32 mSize;
bool* mPrev; // Array of bools of size mSize
bool* mNext; // Array of bools of size mSize
s32 mTipsId;
bool mIsTalkFindKoopa;
bool mIsTalkBossRaid;
};
static_assert(sizeof(WorldWarpTalkData) == 0x28);