From 10fa535e98f3e1043b04895aaab2e916549fcf69 Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Sun, 24 Jun 2012 19:34:56 -0500 Subject: Lots of bug fixes, bowser improvements, summer sun hacks, JPN support, etc. --- NewerProject.yaml | 1 + NewerProjectKP.yaml | 1 + SummerSun.yaml | 1 - bugfixes.yaml | 30 +- growup.yaml | 30 +- kamek_configs.yaml | 10 + kamek_jpn.x | 1523 +++++++++++++++++++++++++++++++++++++++++++++ makeSummerSun | 8 + poweruphax.yaml | 21 +- singAlong.yaml | 39 ++ spritetex.yaml | 30 +- src/bonusRoom.cpp | 708 +++++++++++++++++++++ src/bossCaptainBowser.cpp | 4 +- src/fix38.S | 4 + src/growup.s | 96 +++ src/poweruphax.cpp | 21 + src/shyguy.cpp | 7 +- src/spritetex.S | 54 ++ src/summermodel.cpp | 69 +- summerhax.yaml | 192 +++++- tools/mapfile_tool.py | 6 +- 21 files changed, 2818 insertions(+), 37 deletions(-) create mode 100644 kamek_jpn.x create mode 100644 singAlong.yaml create mode 100644 src/bonusRoom.cpp create mode 100644 src/poweruphax.cpp diff --git a/NewerProject.yaml b/NewerProject.yaml index c308818..f514baf 100644 --- a/NewerProject.yaml +++ b/NewerProject.yaml @@ -50,5 +50,6 @@ modules: - processed/electricLine.yaml - processed/makeYourOwn.yaml - processed/challengeStar.yaml + - processed/singAlong.yaml # - processed/pengi.yaml # - processed/actorlog.yaml diff --git a/NewerProjectKP.yaml b/NewerProjectKP.yaml index d7d4343..ced24a8 100644 --- a/NewerProjectKP.yaml +++ b/NewerProjectKP.yaml @@ -49,5 +49,6 @@ modules: - processed/electricLine.yaml - processed/makeYourOwn.yaml - processed/challengeStar.yaml + - processed/singAlong.yaml # - processed/pengi.yaml # - processed/actorlog.yaml diff --git a/SummerSun.yaml b/SummerSun.yaml index 078243c..e58fb93 100644 --- a/SummerSun.yaml +++ b/SummerSun.yaml @@ -3,4 +3,3 @@ code_address: 0x808D9000 modules: - processed/prolog.yaml - processed/summerhax.yaml - - processed/bugfixes.yaml diff --git a/bugfixes.yaml b/bugfixes.yaml index 8d17f79..1504dcd 100644 --- a/bugfixes.yaml +++ b/bugfixes.yaml @@ -90,9 +90,33 @@ hooks: addr_pal: 0x8001F93C data: '48000014' - - name: RockyWrenchFix + - name: StarsDontKillSpikesUD type: patch - addr_pal: 0x808A9448 - data: '60000000' + addr_pal: 0x80AFF4D8 + data: '809A5490' + - name: StarsDontKillSpikesD + type: patch + addr_pal: 0x80AFF784 + data: '809A5490' + + - name: StarsDontKillSpikesU + type: patch + addr_pal: 0x80AFFA30 + data: '809A5490' + + - name: StarsDontKillSpikesLR + type: patch + addr_pal: 0x80AFFCDC + data: '809A5490' + + - name: StarsDontKillSpikesR + type: patch + addr_pal: 0x80AFFF88 + data: '809A5490' + + - name: StarsDontKillSpikesL + type: patch + addr_pal: 0x80B00234 + data: '809A5490' diff --git a/growup.yaml b/growup.yaml index 0fe73ed..5e8b54e 100644 --- a/growup.yaml +++ b/growup.yaml @@ -42,6 +42,22 @@ hooks: target_func: 'ModifySpeedUpdatesB' +# Prevent large enemies from being fireballed, unless they subclass the fireball state + + - name: TooBigToBurn + type: branch_insn + branch_type: bl + src_addr_pal: 0x800A08F0 + target_func: 'TooBigToBurn' + + - name: TooBigToFreeze + type: branch_insn + branch_type: bl + src_addr_pal: 0x800A0A50 + target_func: 'TooBigToFreeze' + + + # Loading Patches # - name: Global_SizeLoader_X @@ -286,12 +302,16 @@ hooks: target_func: 'GabonRockZOrderDeathDrop' + - name: BigBooZOrderHack + type: patch + addr_pal: 0x8042C6BC + data: "45ABE000" -# - name: BooZOrderHack -# type: branch_insn -# branch_type: bl -# src_addr_pal: 0x80AAEA90 -# target_func: 'BooZOrderHack' + - name: BooZOrderHack + type: branch_insn + branch_type: bl + src_addr_pal: 0x80AAEAAC + target_func: 'BooZOrderHack' # diff --git a/kamek_configs.yaml b/kamek_configs.yaml index a65f321..94bbccc 100644 --- a/kamek_configs.yaml +++ b/kamek_configs.yaml @@ -26,6 +26,15 @@ rel_area_start: 0x807684C0 rel_area_end: 0x80B8E33C +- friendly_name: "New Super Mario Bros. JPN v1" + short_name: 'jpn' + defines: [REGION_JPN, VERSION_1] + include_dirs: ['include', 'src'] + dynamic_link: true + linker_script: kamek_jpn.x + rel_area_start: 0x807684C0 + rel_area_end: 0x80B8E33C + #- friendly_name: "New Super Mario Bros. PAL v2" # short_name: 'pal2' # defines: [REGION_PAL, VERSION_2] @@ -33,3 +42,4 @@ # linker_script: kamek_pal2.x # rel_area_start: 0x807684C0 # rel_area_end: 0x80B75CA8 + diff --git a/kamek_jpn.x b/kamek_jpn.x new file mode 100644 index 0000000..48deb24 --- /dev/null +++ b/kamek_jpn.x @@ -0,0 +1,1523 @@ +SECTIONS { + +/* Scrolling is annoying, clown car goes here! */ + + __ct__20daJrClownForPlayer_cFv = 0x80810210; + __dt__20daJrClownForPlayer_cFv = 0x808102D0; /* Beans indeed. */ + + PClownCarExecute = 0x800A3600; + PClownCarAfterCreate = 0x800951D0; + PClownCarDraw = 0x80810920; + PClownCarMove = 0x80811C00; + + sAllocatorFunc__FrmHeap = 0x8042DFF0; + + GetActivePlayerCount = 0x8005FFB0; + getEffectiveScreenLeft__19ClassWithCameraInfoFv = 0x80082240; + instance__19ClassWithCameraInfo = 0x80429B20; + + BowserExitDemoState = 0x8005B5D0; + MagicEnd = 0x807CCBA0; + +/* Back to other shit I didn't want to scroll for */ + + GlobalTickCount = 0x8042A088; + + GetSpecificPlayerActor = 0x8005F900; + Actor_SearchByID = 0x80162B10; + TimeStopFlag = 0x80429A1A; + TimerBranch = 0x800E3948; + MarioDescentRate = 0x8042B584; + MarioJumpArc = 0x802F543C; + MarioJumpMax = 0x8042B568; + MiniMarioJumpArc = 0x802F5484; + MarioSize = 0x8042B594; + AlwaysDrawFlag = 0x80064540; + AlwaysDrawBranch = 0x80064544; + GenerateRandomNumber = 0x800B2EE0; + OneofManySoundPlayers = 0x800CE840; + BombExplodeState = 0x80B12348; + NoFreezie = 0x800A0B08; + + DoSceneChange__FUsUiUi = 0x800E1DE0; + + SinFIdx__Q24nw4r4mathFf = 0x802379E0; + CosFIdx__Q24nw4r4mathFf = 0x80237A50; + SinCosFIdx__Q24nw4r4mathFPfPff = 0x80237AB0; + + archiveHeap__5mHeap = 0x8042A16C; + commandHeap__5mHeap = 0x8042A170; + dylinkHeap__5mHeap = 0x8042A174; + assertHeap__5mHeap = 0x8042A178; + gameHeaps__5mHeap = 0x803779C8; + + init__18StandOnTopColliderFP13dStageActor_cfffffsUcP7Point2d = 0x800DB100; + __ct__18StandOnTopColliderFv = 0x800DB0B0; + __dt__18StandOnTopColliderFv = 0x80044400; + + + __dt__13BasicColliderFv = 0x800DAD80; + + addToList__13BasicColliderFv = 0x800DAE00; + + __ct__21RideableActorColliderFv = 0x800DB3D0; + init__21RideableActorColliderFP13dStageActor_cP7Point2dP7Point2d = 0x800DB420; + init__21RideableActorColliderFP13dStageActor_cffff = 0x800DB4B0; + setPosition__21RideableActorColliderFP7Point2dP7Point2d = 0x800DB510; + setPosition__21RideableActorColliderFffff = 0x800DB570; + + drawWithMatrix__21SomethingAboutShroomsFfP4mMtx = 0x800BC630; + + original_onCreate__13daObjKinoko_cFv = 0x8087F660; + + instance__13dCourseFull_c = 0x80429BB8; + getRectByID__9dCourse_cFUcP5mRect = 0x8008E890; + + modifyPlayerPropertiesWithRollingObject = 0x80057820; + EN_LandbarrelPlayerCollision = 0x80A57BA0; + GetCountofActivePlayers = 0x8005FFB0; + +/* Boss Related */ + + StartBGMMusic = 0x807DB1B0; + StopBGMMusic = 0x807DB1C0; + instance__11dStage32C_c = 0x80429C30; + instance__7WLClass = 0x804299B4; + + ShakeScreen = 0x800D8BE0; + StageScreen = 0x80429D28; + + createChild__13dStageActor_cF6ActorsP13dStageActor_cUiP7Point3dP6S16VecUc = 0x80064680; + GameMgrBossEndFunc = 0x8001CDB0; + MakeMarioEnterDemoMode = 0x807C7CE0; + MakeMarioExitDemoMode = 0x8005CA50; + ForceMarioExitDemoMode = 0x8005CA50; + + ResetPlayerState = 0x80052170; + UpdateGameMgr = 0x8001CDB0; + UnsetShit = 0x80056CB0; + + StateID_DemoSt2__12daKameckDemo = 0x809998D4; + StateID_DemoSt__12daKameckDemo = 0x80999914; + StateID_DemoWait__12daKameckDemo = 0x80999954; + + StateID_DemoWait__9daNeedles = 0x8099CC5C; + StateID_DemoAwake__9daNeedles = 0x8099CCA0; + StateID_Idle__9daNeedles = 0x8099CCE0; + StateID_Die__9daNeedles = 0x8099CD20; + + StateID_None__7dPlayer = 0x80353F9C; + StateID_Walk__7dPlayer = 0x80353FDC; + StateID_Jump__7dPlayer = 0x8035401C; + StateID_DemoNone__7dPlayer = 0x8035441C; + StateID_DemoWait__7dPlayer = 0x8035449C; + StateID_DemoGoal__7dPlayer = 0x8035485C; + StateID_DemoControl__7dPlayer = 0x8035489C; + + PlayWrenchSound = 0x808A9250; + WaterManager = 0x80429E20; + CheckforLiquid = 0x800EB8B0; + +/* Mr Sun Related */ + + ActivePhysics_InitWithStruct = 0x8008C3E0; + ActivePhysics_AddToList = 0x8008C330; + __ct__13ActivePhysicsFv = 0x8008C200; + __dt__13ActivePhysicsFv = 0x8008C260; + HandleXSpeed = 0x8006CD90; + HandleYSpeed = 0x8006CDE0; + UpdateObjectPosBasedOnSpeedValues_real = 0x8006CD40; + dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3 = 0x80096240; + CalculateDistanceFromActorsNextPosToFurthestPlayer = 0x80064740; + + doSpriteMovement = 0x800955F0; + + + instance__17dEffectBreakMgr_c = 0x80429C08; + spawnTile__17dEffectBreakMgr_cFP7Point3dUic = 0x800925F0; + + CollidedWithTile = 0x80070CB0; + SomeStrangeModification = 0x80096E60; + + + Actor_GetVec3WithValuesAdded = 0x8006CED0; + ConvertStagePositionIntoScreenPosition__Maybe = 0x8006A4B0; + AnotherSoundRelatedFunction = 0x80197D10; + YetAnotherSoundPlayer = 0x80198DD0; + CheckIfPlayingSound = 0x80196410; + RelatedToPlayingSoundsAlongsideAnims = 0x801051C0; + + SoundRelatedClass = 0x8042A1A8; + + ConvertStagePositionToScreenPosition__FP7Point2dP7Point3d = 0x8006A4B0; + + PlaySoundAtPosition__17SoundPlayingClassFiP7Point2dUi = 0x80198A40; + instance2__17SoundPlayingClass = 0x80429A80; + + ExitStage__Fiiii = 0x801021E0; + + + zero__4mMtxFv = 0x8016EF60; + rotationX__4mMtxFPs = 0x8016EA00; + applyRotationX__4mMtxFPs = 0x8016EAC0; + rotationY__4mMtxFPs = 0x8016EB20; + applyRotationY__4mMtxFPs = 0x8016EBE0; + rotationZ__4mMtxFPs = 0x8016EC40; + applyRotationZ__4mMtxFPs = 0x8016ED00; + applyRotationYXZ__4mMtxFPsPsPs = 0x8016ED60; + applyRotationZYX__4mMtxFPsPsPs = 0x8016EDE0; + + _savefpr_14 = 0x802DCAB8; + _savefpr_15 = 0x802DCABC; + _savefpr_16 = 0x802DCAC0; + _savefpr_17 = 0x802DCAC4; + _savefpr_18 = 0x802DCAC8; + _savefpr_19 = 0x802DCACC; + _savefpr_20 = 0x802DCAD0; + _savefpr_21 = 0x802DCAD4; + _savefpr_22 = 0x802DCAD8; + _savefpr_23 = 0x802DCADC; + _savefpr_24 = 0x802DCAE0; + _savefpr_25 = 0x802DCAE4; + _savefpr_26 = 0x802DCAE8; + _savefpr_27 = 0x802DCAEC; + _savefpr_28 = 0x802DCAF0; + _savefpr_29 = 0x802DCAF4; + _savefpr_30 = 0x802DCAF8; + _savefpr_31 = 0x802DCAFC; + + _restfpr_14 = 0x802DCB04; + _restfpr_15 = 0x802DCB08; + _restfpr_16 = 0x802DCB0C; + _restfpr_17 = 0x802DCB10; + _restfpr_18 = 0x802DCB14; + _restfpr_19 = 0x802DCB18; + _restfpr_20 = 0x802DCB1C; + _restfpr_21 = 0x802DCB20; + _restfpr_22 = 0x802DCB24; + _restfpr_23 = 0x802DCB28; + _restfpr_24 = 0x802DCB2C; + _restfpr_25 = 0x802DCB30; + _restfpr_26 = 0x802DCB34; + _restfpr_27 = 0x802DCB38; + _restfpr_28 = 0x802DCB3C; + _restfpr_29 = 0x802DCB40; + _restfpr_30 = 0x802DCB44; + _restfpr_31 = 0x802DCB48; + + _savegpr_14 = 0x802DCB50; + _savegpr_15 = 0x802DCB54; + _savegpr_16 = 0x802DCB58; + _savegpr_17 = 0x802DCB5C; + _savegpr_18 = 0x802DCB60; + _savegpr_19 = 0x802DCB64; + _savegpr_20 = 0x802DCB68; + _savegpr_21 = 0x802DCB6C; + _savegpr_22 = 0x802DCB70; + _savegpr_23 = 0x802DCB74; + _savegpr_24 = 0x802DCB78; + _savegpr_25 = 0x802DCB7C; + _savegpr_26 = 0x802DCB80; + _savegpr_27 = 0x802DCB84; + _savegpr_28 = 0x802DCB88; + _savegpr_29 = 0x802DCB8C; + _savegpr_30 = 0x802DCB90; + _savegpr_31 = 0x802DCB94; + + _restgpr_14 = 0x802DCB9C; + _restgpr_15 = 0x802DCBA0; + _restgpr_16 = 0x802DCBA4; + _restgpr_17 = 0x802DCBA8; + _restgpr_18 = 0x802DCBAC; + _restgpr_19 = 0x802DCBB0; + _restgpr_20 = 0x802DCBB4; + _restgpr_21 = 0x802DCBB8; + _restgpr_22 = 0x802DCBBC; + _restgpr_23 = 0x802DCBC0; + _restgpr_24 = 0x802DCBC4; + _restgpr_25 = 0x802DCBC8; + _restgpr_26 = 0x802DCBCC; + _restgpr_27 = 0x802DCBD0; + _restgpr_28 = 0x802DCBD4; + _restgpr_29 = 0x802DCBD8; + _restgpr_30 = 0x802DCBDC; + _restgpr_31 = 0x802DCBE0; + + __shl2i = 0x802DCFFC; + + __nw__FUl = 0x802B9020; + __dl__FPv = 0x802B9090; + + __construct_new_array = 0x802DC5F0; + __destroy_new_array = 0x802DC920; + __destroy_arr = 0x802DC8A8; + sub_80024C20 = 0x80024C20; + + __register_global_object = 0x802DC590; + __ptmf_scall = 0x802DCA0C; + + + setup__13FunctionChainFPPFPv_bUs = 0x8015F410; + + /* collisionMgr_c */ + __ct__14collisionMgr_c = 0x8006CF40; + __dt__14collisionMgr_c = 0x8006CF40; + Clear1__14collisionMgr_cFv = 0x8006CFE0; + Clear2__14collisionMgr_cFv = 0x8006D000; + Init__14collisionMgr_cFP13dStageActor_cPCUcPCUcPCUc = 0x8006D090; + Clear3__14collisionMgr_cFv = 0x8006D440; + CollidedWithTile__14collisionMgr_cFv = 0x80070CB0; + SomethingSemiImportant__14collisionMgr_cFUi = 0x8006EF40; + execute__14collisionMgr_cFv = 0x80072BC0; + s_8006FA40__14collisionMgr_cFPv = 0x8006FA40; + s_80070760__14collisionMgr_cFv = 0x80070760; + s_800707E0__14collisionMgr_cFv = 0x800707E0; + + /* freezeMgr_c */ + __ct_11freezeMgr_c = 0x800B83C0; + __dt__11freezeMgr_cFv = 0x800B8460; + doSomethingCool1__11freezeMgr_c = 0x800B84D0; + doSomethingCool2__11freezeMgr_c = 0x800B85A0; + setSomething__11freezeMgr_cFUiUiUi = 0x800B8670; + Create_ICEACTORs__11freezeMgr_cFPvi = 0x800B8680; + Delete_ICEACTORs__11freezeMgr_c = 0x800B87D0; + SetIceTimer_pt1__11freezeMgr_c = 0x800B8850; + SetIceTimer_pt2__11freezeMgr_c = 0x800B88B0; + CheckIceTimer_lte_Value__11freezeMgr_c = 0x800B8930; + doSomethingCool3__11freezeMgr_c = 0x800B89A0; + doSomethingCool4__11freezeMgr_c = 0x800B8A30; + doSomethingCool5__11freezeMgr_c = 0x800B8AB0; + doSomethingCool6__11freezeMgr_c = 0x800B8B30; + DoMeltNormal__11freezeMgr_c = 0x800B8BB0; + doSomethingCool7__11freezeMgr_c = 0x800B8C70; + CheckCountdownTimer__11freezeMgr_c = 0x800B8E60; + + __vt__7fBase_c = 0x80329178; + onCreate__7fBase_cFv = 0x80161B90; + onDelete__7fBase_cFv = 0x80161C40; + onExecute__7fBase_cFv = 0x80161EE0; + willBeDeleted__7fBase_cFv = 0x801620E0; + moreHeapShit__7fBase_cFUiPv = 0x80162400; + createHeap__7fBase_cFUiPv = 0x80162600; + heapCreated__7fBase_cFv = 0x801626C0; + Delete__7fBase_cFv = 0x80162320; + findNextUninitialisedProcess__7fBase_cFv = 0x801627C0; + hasUninitialisedProcesses__7fBase_cFv = 0x80162830; + onDraw__7fBase_cFv = 0x80161FE0; + _Z15fBase_c__DeletePv = 0x80162320; + fBase_c__Delete__FPv = 0x80162320; + + GetExplanationString__7dBase_cFv = 0x8006C660; + + __vt__15daEnBlockMain_c = 0x80301CC8; + __dt__15daEnBlockMain_cFv = 0x80023340; + calledWhenUpMoveBegins__15daEnBlockMain_cFv = 0x80022E80; + calledWhenDownMoveBegins__15daEnBlockMain_cFv = 0x80022F60; + calledWhenUpMoveExecutes__15daEnBlockMain_cFv = 0x80022F30; + calledWhenUpMoveDiffExecutes__15daEnBlockMain_cFv = 0x800231A0; + calledWhenDownMoveExecutes__15daEnBlockMain_cFv = 0x80023010; + calledWhenDownMoveEndExecutes__15daEnBlockMain_cFv = 0x80023080; + calledWhenDownMoveDiffExecutes__15daEnBlockMain_cFv = 0x800232C0; + calledWhenDownMoveDiffEndExecutes__15daEnBlockMain_cFv = 0x80023330; + updateScale__15daEnBlockMain_cFb = 0x80022DC0; + upMove_Begin__15daEnBlockMain_cFv = 0x80022E60; + upMove_Execute__15daEnBlockMain_cFv = 0x80022EA0; + upMove_End__15daEnBlockMain_cFv = 0x80022E90; + downMove_Begin__15daEnBlockMain_cFv = 0x80022F40; + downMove_Execute__15daEnBlockMain_cFv = 0x80022F80; + downMove_End__15daEnBlockMain_cFv = 0x80022F70; + downMoveEnd_Begin__15daEnBlockMain_cFv = 0x80023020; + downMoveEnd_Execute__15daEnBlockMain_cFv = 0x80023040; + downMoveEnd_End__15daEnBlockMain_cFv = 0x80023030; + upMove_Diff_Begin__15daEnBlockMain_cFv = 0x80023090; + upMove_Diff_Execute__15daEnBlockMain_cFv = 0x800230D0; + upMove_Diff_End__15daEnBlockMain_cFv = 0x800230C0; + downMove_Diff_Begin__15daEnBlockMain_cFv = 0x800231B0; + downMove_Diff_Execute__15daEnBlockMain_cFv = 0x800231F0; + downMove_Diff_End__15daEnBlockMain_cFv = 0x800231E0; + downMove_DiffEnd_Begin__15daEnBlockMain_cFv = 0x800232D0; + downMove_DiffEnd_Execute__15daEnBlockMain_cFv = 0x800232F0; + downMove_DiffEnd_End__15daEnBlockMain_cFv = 0x800232E0; + blockInit__15daEnBlockMain_cFf = 0x80021690; + blockUpdate__15daEnBlockMain_cFv = 0x800217B0; + blockResult__15daEnBlockMain_cFv = 0x800212C0; + PhysicsCallback1__15daEnBlockMain_c = 0x80021180; + g = 0x80021170; + PhysicsCallback3__15daEnBlockMain_c = 0x800211A0; + OPhysicsCallback1__15daEnBlockMain_c = 0x80020BF0; + OPhysicsCallback2__15daEnBlockMain_c = 0x80020E70; + OPhysicsCallback3__15daEnBlockMain_c = 0x80021010; + StateID_UpMove__15daEnBlockMain_c = 0x803527B4; + StateID_DownMove__15daEnBlockMain_c = 0x803527F4; + StateID_DownMoveEnd__15daEnBlockMain_c = 0x80352834; + StateID_UpMove_Diff__15daEnBlockMain_c = 0x80352874; + StateID_DownMove_Diff__15daEnBlockMain_c = 0x803528B4; + StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x803528F4; + + __ct__5dEn_cFv = 0x80094E80; + __dt__5dEn_cFv = 0x80095130; + afterCreate__5dEn_cFi = 0x800951D0; + afterExecute__5dEn_cFi = 0x80095480; + kill__5dEn_cFv = 0x80097F70; + eatIn__5dEn_cFv = 0x80097C40; + disableEatIn__5dEn_cFv = 0x80097CB0; + _vf8C__5dEn_cFPv = 0x80097D30; + _vfCC__5dEn_cFP7Point2df = 0x800973F0; + _vfD0__5dEn_cFP7Point2df = 0x800974F0; + doStateChange__5dEn_cFP12dStateBase_c = 0x800A7DF0; + collisionCallback__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095950; + preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095CE0; + prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095D30; + preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095F50; + stageActorCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80096060; + spriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095C10; + playerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095C20; + yoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x80095C80; + collisionCat3_StarPower__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009F840; + collisionCat5_Mario__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FB50; + _vf108__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FE40; + collisionCatD_GroundPound__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FFD0; + _vf110__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FFC0; + collisionCat8_FencePunch__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FCE0; + collisionCat7_WMWaggleWater__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A0150; + collisionCat7_WMWaggleWaterYoshi__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A02D0; + _vf120__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FCD0; + collisionCatA_PenguinMario__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009FCC0; + collisionCat11_PipeCannon__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x8009F9D0; + collisionCat9_RollingObject__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A0700; + collisionCat1_Fireball_E_Explosion__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A08D0; + collisionCat2_IceBall_15_YoshiIce__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A0A30; + collisionCat13_Hammer__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A03C0; + collisionCat14_YoshiFire__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0x800A0550; + _vf140__5dEn_cFP13dStageActor_c = 0x800A10B0; + _vf144__5dEn_cFi = 0x800A0C70; + _vf148__5dEn_cFv = 0x800A12A0; + _vf14C__5dEn_cFv = 0x800A1370; + _vf150__5dEn_cFv = 0x800206D0; + eatenByYoshiProbably__5dEn_cFv = 0x80096230; + playHpdpSound1__5dEn_cFv = 0x800A1C00; + playEnemyDownSound1__5dEn_cFv = 0x800A1BB0; + playEnemyDownComboSound__5dEn_cFPv = 0x800A1C80; + playHpdpSound2__5dEn_cFv = 0x800A1D90; + _vf168__5dEn_cFv = 0x800A1E10; + dieFumi_Begin__5dEn_cFv = 0x800A1470; + dieFumi_Execute__5dEn_cFv = 0x800A1600; + dieFumi_End__5dEn_cFv = 0x800A1820; + dieFall_Begin__5dEn_cFv = 0x800A16A0; + dieFall_Execute__5dEn_cFv = 0x800A1830; + dieFall_End__5dEn_cFv = 0x800A1820; + dieBigFall_Begin__5dEn_cFv = 0x800A1910; + dieBigFall_Execute__5dEn_cFv = 0x800A1930; + dieBigFall_End__5dEn_cFv = 0x800A1920; + dieSmoke_Begin__5dEn_cFv = 0x800A1980; + dieSmoke_Execute__5dEn_cFv = 0x800A1A00; + dieSmoke_End__5dEn_cFv = 0x800A19F0; + dieYoshiFumi_Begin__5dEn_cFv = 0x800A1AC0; + dieYoshiFumi_Execute__5dEn_cFv = 0x800A1B40; + dieYoshiFumi_End__5dEn_cFv = 0x800A1B30; + dieIceVanish_Begin__5dEn_cFv = 0x800A1A10; + dieIceVanish_Execute__5dEn_cFv = 0x800A1AB0; + dieIceVanish_End__5dEn_cFv = 0x800A1AA0; + dieGoal_Begin__5dEn_cFv = 0x800A1B50; + dieGoal_Execute__5dEn_cFv = 0x800A1B70; + dieGoal_End__5dEn_cFv = 0x800A1B60; + dieOther_Begin__5dEn_cFv = 0x800A1B80; + dieOther_Execute__5dEn_cFv = 0x800A1BA0; + dieOther_End__5dEn_cFv = 0x800A1B90; + eatIn_Begin__5dEn_cFv = 0x800A81C0; + eatIn_Execute__5dEn_cFv = 0x800A81E0; + eatIn_End__5dEn_cFv = 0x800A81D0; + eatNow_Begin__5dEn_cFv = 0x800A8260; + eatNow_Execute__5dEn_cFv = 0x800A8280; + eatNow_End__5dEn_cFv = 0x800A8270; + eatOut_Begin__5dEn_cFv = 0x800A8290; + eatOut_Execute__5dEn_cFv = 0x800A82B0; + eatOut_End__5dEn_cFv = 0x800A82A0; + hitSpin_Begin__5dEn_cFv = 0x800A8190; + hitSpin_Execute__5dEn_cFv = 0x800A81B0; + hitSpin_End__5dEn_cFv = 0x800A81A0; + ice_Begin__5dEn_cFv = 0x800A7E90; + ice_Execute__5dEn_cFv = 0x800A7F40; + ice_End__5dEn_cFv = 0x800A7F30; + spawnHitEffectAtPosition__5dEn_cF7Point2d = 0x80095520; + doSomethingWithHardHitAndSoftHitEffects__5dEn_cF7Point3d = 0x80095530; + playEnemyDownSound2__5dEn_cFv = 0x80095580; + add2ToYSpeed__5dEn_cFv = 0x800955D0; + _vf218__5dEn_cFv = 0x80095890; + _vf21C__5dEn_cFv = 0x80097770; + _vf220__5dEn_cFPv = 0x80097F20; + _vf224__5dEn_cFv = 0x80097F60; + _vf228__5dEn_cFv = 0x800206C0; + CreateIceActors__5dEn_cFv = 0x800A8060; + _vf230__5dEn_cFv = 0x800A8150; + _vf234__5dEn_cFv = 0x800A8160; + _vf238__5dEn_cFv = 0x800A8180; + _vf23C__5dEn_cFv = 0x800206B0; + _vf240__5dEn_cFv = 0x800206A0; + _vf244__5dEn_cFv = 0x80020690; + _vf248__5dEn_cFi = 0x800968E0; + _vf24C__5dEn_cFPv = 0x80096710; + addScoreWhenHit__5dEn_cFPv = 0x80096700; + _vf254__5dEn_cFPv = 0x80096720; + _vf258__5dEn_cFPv = 0x80096760; + _vf25C__5dEn_cFPv = 0x80096770; + _vf260__5dEn_cFPv = 0x80096910; + _vf264__5dEn_cFP13dStageActor_c = 0x80096D60; + _vf268__5dEn_cFPv = 0x80096A20; + spawnHitEffectAtPositionAgain__5dEn_cF7Point2d = 0x80096DF0; + playMameStepSound__5dEn_cFv = 0x80096C40; + _vf274__5dEn_cFv = 0x80096E50; + _vf278__5dEn_cFPv = 0x80096B30; + _vf27C__5dEn_cFv = 0x80096E40; + + StateID_DieFumi__5dEn_c = 0x80357934; + StateID_DieFall__5dEn_c = 0x80357974; + StateID_DieBigFall__5dEn_c = 0x803579B4; + StateID_DieSmoke__5dEn_c = 0x803579F4; + StateID_DieIceVanish__5dEn_c = 0x80357A34; + StateID_DieYoshiFumi__5dEn_c = 0x80357A74; + StateID_DieGoal__5dEn_c = 0x80357AB4; + StateID_DieOther__5dEn_c = 0x80357AF4; + + doSpriteMovement__5dEn_cFv = 0x800955F0; + CheckIfPlayerBelow__5dEn_cFff = 0x800978C0; + stuffRelatingToCollisions__5dEn_cFfff = 0x800957B0; + checkLiquidImmersion__5dEn_cFP7Point2df = 0x80097250; + + _vfD8__18dActorMultiState_cFv = 0x80067590; + _vfDC__18dActorMultiState_cFv = 0x800675B0; + _vfE0__18dActorMultiState_cFv = 0x800675A0; + + __ct__13dStageActor_cFv = 0x80064110; + __dt__13dStageActor_cFv = 0x800642B0; + beforeCreate__13dStageActor_cFv = 0x80064350; + afterCreate__13dStageActor_cFi = 0x80064380; + beforeDelete__13dStageActor_cFv = 0x80064390; + afterDelete__13dStageActor_cFi = 0x800643E0; + beforeExecute__13dStageActor_cFv = 0x800643F0; + afterExecute__13dStageActor_cFi = 0x80064490; + beforeDraw__13dStageActor_cFv = 0x80064540; + afterDraw__13dStageActor_cFi = 0x800645E0; + GetExplanationString__13dStageActor_cFv = 0x800645F0; + _vf60__13dStageActor_cFv = 0x80065080; + kill__13dStageActor_cFv = 0x80065650; + _vf68__13dStageActor_cFv = 0x8001D210; + _vf6C__13dStageActor_cFv = 0x8001D200; + _vf70__13dStageActor_cFv = 0x80065620; + _vf74__13dStageActor_cFv = 0x8001D1F0; + _vf78__13dStageActor_cFv = 0x80065820; + _vf7C__13dStageActor_cFv = 0x8001D1E0; + eatIn__13dStageActor_cFv = 0x80065830; + disableEatIn__13dStageActor_cFv = 0x80065850; + _vf88__13dStageActor_cFv = 0x80065860; + _vf8C__13dStageActor_cFPv = 0x80065870; + _vf90__13dStageActor_cFP13dStageActor_c = 0x80065880; + _vf94__13dStageActor_cFPv = 0x80065AC0; + removeMyActivePhysics__13dStageActor_cFv = 0x80066080; + addMyActivePhysics__13dStageActor_cFv = 0x80066090; + returnRegularScale__13dStageActor_cFv = 0x80065950; + _vfA4__13dStageActor_cFPv = 0x80065970; + _vfA8__13dStageActor_cFPv = 0x80065A00; + _vfAC__13dStageActor_cFPv = 0x80065A40; + killedByLevelClear__13dStageActor_cFv = 0x80065660; + _vfB4__13dStageActor_cFv = 0x80065B40; + _vfB8__13dStageActor_cFv = 0x8001D1D0; + _vfBC__13dStageActor_cFv = 0x80065B50; + _vfC0__13dStageActor_cFv = 0x80065B60; + _vfC4__13dStageActor_cFv = 0x80065B70; + _vfC8__13dStageActor_cFP7Point2df = 0x80065CC0; + _vfCC__13dStageActor_cFP7Point2df = 0x80065DC0; + _vfD0__13dStageActor_cFP7Point2df = 0x80065EC0; + outOfZone__13dStageActor_cF7Point3dPfUc = 0x80064DA0; + checkZoneBoundaries__13dStageActor_cFUi = 0x80064F50; + create__13dStageActor_cF6ActorsUiP7Point3dP6S16VecUc = 0x80064610; + Delete__13dStageActor_cFUc = 0x80064D10; + + __ct__8dScene_cFv = 0x800E1930; + __dt__8dScene_cFv = 0x800E19A0; + beforeCreate__8dScene_cFv = 0x800E1A20; + afterCreate__8dScene_cFi = 0x800E1A60; + beforeDelete__8dScene_cFv = 0x800E1AD0; + afterDelete__8dScene_cFi = 0x800E1B00; + beforeExecute__8dScene_cFv = 0x800E1B60; + afterExecute__8dScene_cFi = 0x800E1CA0; + beforeDraw__8dScene_cFv = 0x800E1CF0; + afterDraw__8dScene_cFi = 0x800E1D20; + + __ct__8dActor_cFv = 0x8006C6D0; + __dt__8dActor_cFv = 0x8006C7F0; + UpdateObjectPosBasedOnSpeedValuesReal__8dActor_cFv = 0x8006CD40; + HandleXSpeed__8dActor_cFv = 0x8006CD90; + HandleYSpeed__8dActor_cFv = 0x8006CDE0; + + __ct__7dBase_cFv = 0x8006C420; + __dt__7dBase_cFv = 0x8006C490; + beforeCreate__7dBase_cFv = 0x8006C540; + afterCreate__7dBase_cFi = 0x8006C570; + beforeDelete__7dBase_cFv = 0x8006C580; + afterDelete__7dBase_cFi = 0x8006C5B0; + beforeExecute__7dBase_cFv = 0x8006C5C0; + afterExecute__7dBase_cFi = 0x8006C600; + beforeDraw__7dBase_cFv = 0x8006C610; + afterDraw__7dBase_cFi = 0x8006C650; + + + specialDraw1__8dActor_cFv = 0x8006CA50; + specialDraw2__8dActor_cFv = 0x8006CA60; + _vf58__8dActor_cFv = 0x8001D1C0; + _vf5C__8dActor_cFv = 0x8001D1B0; + + __ct__12dStateBase_cFPCc = 0x8015F5D0; + __dt__12dStateBase_cFv = 0x8015F610; + isInvalid__12dStateBase_cFv = 0x8015F650; + isEqualNotUsedForSomeReason__12dStateBase_cFP12dStateBase_c = 0x8015F660; + isEqual__12dStateBase_cFP12dStateBase_c = 0x8015F6D0; + isNotEqual__12dStateBase_cFP12dStateBase_c = 0x8015F6E0; + getName__12dStateBase_cFv = 0x8015F730; + getID__12dStateBase_cFv = 0x8015F740; + + /* HACK HACK */ + /* These don't actually exist, they're just here to save us some space for newer */ + isSameStateName__12dStateBase_cFPCc = 0x800142A0; + doBegin__12dStateBase_cFPv = 0x80012970; + doExecute__12dStateBase_cFPv = 0x80012940; + doEnd__12dStateBase_cFPv = 0x80012910; + /* END HACK */ + + mNoState__12dStateBase_c = 0x80377784; + + __dt__15dStateMgrBase_cFv = 0x8015F800; + + __ct__11dStateMgr_cFP17dStatePointless_cP20dStateExecutorBase_cP12dStateBase_c = 0x8015FAA0; + + __ct__10dFlagMgr_c = 0x800E3A60; + setup__10dFlagMgr_cFb = 0x800E3B20; + applyAndClearAllTimedActions__10dFlagMgr_cFv = 0x800E3EA0; + execute__10dFlagMgr_cFv = 0x800E3F90; + set__10dFlagMgr_cFUcibbbUi = 0x800E4140; + findLowestFlagInSet__10dFlagMgr_cFUiUl = 0x800E43F0; + setSpecial__10dFlagMgr_cFUcffUcUiUl = 0x800E44D0; + get8__10dFlagMgr_cFUc = 0x800E4510; + get108__10dFlagMgr_cFUc = 0x800E4520; + get208__10dFlagMgr_cFUc = 0x800E4530; + get248__10dFlagMgr_cFUc = 0x800E4540; + get448__10dFlagMgr_cFUc = 0x800E4560; + instance__10dFlagMgr_c = 0x80429D98; + + + clear__13ActivePhysicsFv = 0x8008C2C0; + removeFromList__13ActivePhysicsFv = 0x8008C380; + addToList__13ActivePhysicsFv = 0x8008C330; + initWithStruct__13ActivePhysicsFP8dActor_cPCQ213ActivePhysics4Info = 0x8008C3E0; + + + __ct__7PhysicsFv = 0x8007F7A0; + __dt__7PhysicsFv = 0x8007F810; + baseSetup__7PhysicsFP8dActor_cPvPvPvUcUc = 0x8007F9B0; + setup__7PhysicsFP8dActor_cffffPvPvPvUcUcP7Point2d = 0x8007FA40; + setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10; + + spinningPhysicsCallback = 0x808A2110; + /* spinningPhysicsCallback__7Physics = 0x808A2110; */ + + addToList__7PhysicsFv = 0x8007F900; + removeFromList__7PhysicsFv = 0x8007F950; + update__7PhysicsFv = 0x8007FDA0; + + getTileRendererList__7dBgGm_cFi = 0x80078520; + + getPointerToTile__8BgGmBaseFiiiPib = 0x80077520; + placeTile__8BgGmBaseFUsUsii = 0x80077860; + + add__Q212TileRenderer4ListFP12TileRenderer = 0x80014820; + remove__Q212TileRenderer4ListFP12TileRenderer = 0x80014860; + + __ct__12TileRendererFv = 0x800145B0; + __dt__12TileRendererFv = 0x800145F0; + setPosition__12TileRendererFfff = 0x800146B0; + setVars__12TileRendererFf = 0x800146D0; + + __ct__21dPlayerModelHandler_cFUc = 0x800D6C40; + loadModel__21dPlayerModelHandler_cFUcii = 0x800D6D70; + setSRT__21dPlayerModelHandler_cF7Point3d6S16Vec7Point3d = 0x800D6EC0; + callVF20__21dPlayerModelHandler_cFv = 0x800D6F80; + draw__21dPlayerModelHandler_cFv = 0x800D6FA0; + update__21dPlayerModelHandler_cFv = 0x800D6E10; + + _Z15FindActorByType6ActorsP5Actor = 0x80162B60; + FindActorByType__F6ActorsP5Actor = 0x80162B60; + _Z19RetrieveFileFromArcPvPcS0_ = 0x800DF100; + _Z8OSReportPKcz = 0x8015F540; + OSReport__FPCce = 0x8015F540; + _Z7OSFatal7GXColorS_PKc = 0x801AF3E0; + + GetSomeSizeRelatedBULLSHIT__Fv = 0x800E2500; + CalculateSomethingAboutRatio__Fffff = 0x800E2670; + CalculateSomethingElseAboutRatio__Fv = 0x800E2740; + DoSomethingCameraRelatedWithEGGScreen__FiPQ23EGG6Screen = 0x80169030; + + GlobalScreenWidth = 0x80429E0C; + GlobalScreenHeight = 0x80429E10; + + currentScreenSizeID = 0x8042AC28; + ScreenSizesAndMultipliers = 0x80350240; + + setOrtho__Q23EGG7FrustumFffffff = 0x802C68F0; + + __ct__Q23EGG6ScreenFv = 0x802D0AD0; + __dt__Q23EGG6ScreenFv = 0x802D08B0; + + __vt__Q23EGG12LookAtCamera = 0x8034FDD8; + assignToNW4RCamera__Q23EGG12LookAtCameraFRQ34nw4r3g3d6Camera = 0x802BE690; + + __ct__Q23EGG12ProjectOrthoFv = 0x802BF1E0; + setVolume__Q23EGG12ProjectOrthoFffff = 0x802BF230; + + GetCameraByID__Fi = 0x80164930; + GetCurrentCameraID__Fv = 0x80164950; + SetCurrentCameraID__Fi = 0x80164960; + + LinkScene__Fi = 0x80164A20; + UnlinkScene__Fi = 0x801649A0; + + SceneCalcWorld__Fi = 0x80164AE0; + SceneCameraStuff__Fi = 0x80164B70; + + CalcMaterial__Fv = 0x80164B60; + DrawOpa__Fv = 0x80164C40; + DrawXlu__Fv = 0x80164C50; + + ChangeAlphaUpdate__Fb = 0x802D2D90; + ChangeColorUpdate__Fb = 0x802D2D30; + + DoSpecialDrawing1__Fv = 0x8006CAE0; + DoSpecialDrawing2__Fv = 0x8006CB40; + + SetupLYTDrawing__Fv = 0x80163030; + ClearLayoutDrawList__Fv = 0x80162F80; + + RenderAllLayouts__Fv = 0x800067A0; + DrawAllLayoutsBeforeX__Fi = 0x80163110; + DrawAllLayoutsAfterX__Fi = 0x801631A0; + DrawAllLayoutsAfterXandBeforeY__Fii = 0x80163230; + + findPaneByName__Q23m2d17EmbedLayoutBase_cCFPCc = 0x80007300; + findTextBoxByName__Q23m2d17EmbedLayoutBase_cCFPCc = 0x80007320; + findPictureByName__Q23m2d17EmbedLayoutBase_cCFPCc = 0x800073D0; + findWindowByName__Q23m2d17EmbedLayoutBase_cCFPCc = 0x80007470; + __ct__Q23m2d13EmbedLayout_cFv = 0x800C88D0; + __dt__Q23m2d13EmbedLayout_cFv = 0x800C8920; + loadArc__Q23m2d13EmbedLayout_cFPCcb = 0x800C8C30; + loadAnimations__Q23m2d13EmbedLayout_cFPPCci = 0x800C8F30; + loadGroups__Q23m2d13EmbedLayout_cFPPCcPii = 0x800C9070; + enableNonLoopAnim__Q23m2d13EmbedLayout_cFib = 0x800C9270; + enableLoopAnim__Q23m2d13EmbedLayout_cFi = 0x800C9300; + resetAnim__Q23m2d13EmbedLayout_cFib = 0x800C9350; + disableAllAnimations__Q23m2d13EmbedLayout_cFv = 0x800C9480; + isAnimOn__Q23m2d13EmbedLayout_cFi = 0x800C9590; + free__Q23m2d13EmbedLayout_cFv = 0x800C98B0; + execAnimations__Q23m2d13EmbedLayout_cFv = 0x800C94E0; + scheduleForDrawing__Q23m2d6Base_cFv = 0x80163660; + + RenderEffects__Fii = 0x80093F10; + + RemoveAllFromScnRoot__Fv = 0x80164C80; + Reset3DState__Fv = 0x80164CD0; + + GetRenderModeObj__Q34nw4r3g3d8G3DStateFv = 0x8024D3E0; + + __ct__Q34nw4r3g3d6CameraFPQ34nw4r3g3d10CameraData = 0x802535E0; + SetOrtho__Q34nw4r3g3d6CameraFffffff = 0x80253A80; + SetPerspective__Q34nw4r3g3d6CameraFffff = 0x80253A40; + SetViewportJitter__Q34nw4r3g3d6CameraFUi = 0x80253C30; + SetPosture__Q34nw4r3g3d6CameraFRCQ44nw4r3g3d6Camera11PostureInfo = 0x802537D0; + SetPosition__Q34nw4r3g3d6CameraFRC7Point3d = 0x80253760; + SetCameraMtxDirectly__Q34nw4r3g3d6CameraFRA3_A4_Cf = 0x802539F0; + GetCameraMtx__Q34nw4r3g3d6CameraCFPA3_A4_f = 0x80253EC0; + + CheckRevision__Q34nw4r3g3d7ResFileCFv = 0x8023A670; + Init__Q34nw4r3g3d7ResFileFv = 0x8023A3A0; + Bind__Q34nw4r3g3d7ResFileFQ34nw4r3g3d7ResFile = 0x8023A160; + GetResMdl__Q34nw4r3g3d7ResFileCFPCc = 0x80239C40; + GetResTex__Q34nw4r3g3d7ResFileCFPCc = 0x80239D30; + g3dMemAllocator__Q24nw4r3g3d = 0x8042A0E8; + __ScnMdl__Construct__Q24nw4r3g3dFPvPUiPvUii = 0x8025C830; + __ScnMdlSimple__Construct__Q24nw4r3g3dFPvPUiPvi = 0x8025A190; + InsertIntoScene__Q24nw4r3g3dFPv = 0x80164C60; + + GetResMat__Q34nw4r3g3d6ResMdlCFPCc = 0x8023B570; + + DisableIndirectTexturing__3m3dFv = 0x80164D60; + InitTexObjWithResTex__3m3dFP9_GXTexObjPv14_GXTexWrapMode14_GXTexWrapMode12_GXTexFilter12_GXTexFilter = 0x802C7A80; + + /* This is preliminary and kinda strange, most of these just point to ScnLeaf for now */ + setup__Q23m3d6proc_cFPvPUi = 0x80164DE0; + returnUnknown__Q23m3d6proc_cFv = 0x8000F720; + + __ct__Q23m3d9scnLeaf_cFv = 0x80169E20; + __dt__Q23m3d9scnLeaf_cFv = 0x80169E40; + free__Q23m3d9scnLeaf_cFv = 0x80169EA0; + scheduleForDrawing__Q23m3d9scnLeaf_cFv = 0x80169EF0; + getViewMatrix__Q23m3d9scnLeaf_cFPA3_A4_f = 0x80169FA0; + /* End preliminary section */ + + __vt__Q23m3d5mdl_c = 0x803293A4; + __ct__Q23m3d5mdl_cFv = 0x80169AE0; + __dt__Q23m3d5mdl_cFv = 0x80169B30; + setup__Q23m3d5mdl_cFQ34nw4r3g3d6ResMdlPvUiiPUi = 0x80169BA0; + oneSetupType__Q23m3d5mdl_cFv = 0x80064C10; + sub_80064BF0__Q23m3d5mdl_cFv = 0x80064BF0; + setDrawMatrix__Q23m3d5mdl_cFPA4_Cf = 0x80169F80; + setScale__Q23m3d5mdl_cFfff = 0x80169F40; + setScale__Q23m3d5mdl_cFP7Point3d = 0x80169F60; + calcWorld__Q23m3d5mdl_cFb = 0x80169FB0; + bindAnim__Q23m3d5mdl_cFPQ23m3d6banm_cf = 0x80169D90; + vf1C__Q3m3d5mdl_cFv = 0x80169D50; + + SetupTextures_Player__FPQ23m3d5mdl_ci = 0x800B3E50; + SetupTextures_Map__FPQ23m3d5mdl_ci = 0x800B3F50; + SetupTextures_Boss__FPQ23m3d5mdl_ci = 0x800B4050; + SetupTextures_Enemy__FPQ23m3d5mdl_ci = 0x800B4170; + SetupTextures_MapObj__FPQ23m3d5mdl_ci = 0x800B42B0; + SetupTextures_Item__FPQ23m3d5mdl_ci = 0x800B43D0; + + __ct__16mHeapAllocator_cFv = 0x80069020; + __dt__16mHeapAllocator_cFv = 0x80069060; + link__16mHeapAllocator_cFiPvPCci = 0x800690C0; + unlink__16mHeapAllocator_cFv = 0x800690E0; + + __ct__10mTexture_cFUsUs9_GXTexFmt = 0x802C0890; + load__10mTexture_cF11_GXTexMapID = 0x802C0970; + flushDC__10mTexture_cFv = 0x802C0A30; + makeLinearGradient__10mTexture_cFicUsUs8_GXColor8_GXColorb = 0x802C0C40; + allocateBuffer__10mTexture_cFPv = 0x802C0FF0; + plotPixel__10mTexture_cFUsUs8_GXColor = 0x802C1090; + + SetFontSize__Q34nw4r2ut10CharWriterFff = 0x8022D100; + + __ct__Q34nw4r2ut10TextWriterFv = 0x80230590; + __dt__Q34nw4r2ut10TextWriterFv = 0x802305F0; + CalcStringWidth__Q34nw4r2ut10TextWriterCFPCwi = 0x80230EE0; + + GameHeaps = 0x803779C8; + + BGDatClass = 0x80429B10; + instance__10BGDatClass = 0x80429B10; + GetTilesetName__FPvii = 0x800813F0; + + getTilesetName__10BGDatClassFii = 0x800813F0; + + getPointerToTile__12TilemapClassFiiPUib = 0x80083B40; + + IsWideScreen__Fv = 0x800B5430; + + Player_Active = 0x80354BD0; + Player_ID = 0x80354BE0; + Player_Powerup = 0x80354BF0; + Player_Flags = 0x80354C00; + Player_Lives = 0x80354C10; + Player_Coins = 0x80354C20; + + AllocateMemoryBlock = 0x801626D0; + EnsureAllArcsAreLoaded = 0x800DF460; + FindRotationController = 0x8002AC00; + GetObjectName = 0x80101730; + GetObjectParent = 0x801623A0; + OSReport = 0x8015F540; + + StagePtr = 0x80429EE8; + + _Z20CreateParentedObjectsPvic = 0x80162910; + _Z47CheckIfMenuShouldBeCancelledForSpecifiedWiimotei = 0x800B5320; + _Z21StartTitleScreenStagebi = 0x80101750; + _Z17CreateChildObjectsPviii = 0x8006CBA0; + + CreateParentedObject__FsPvic = 0x80162910; + CheckIfMenuShouldBeCancelledForSpecifiedWiimote__Fi = 0x800B5320; + StartTitleScreenStage__Fbi = 0x80101750; + CreateChildObject__FsPviii = 0x8006CBA0; + + ObjCreate1 = 0x80162910; + ObjCreate2 = 0x80162930; + RestoreObjectState = 0x800B0FD0; + QueueArcLoad = 0x800DF7C0; + RetrieveFileFromArc = 0x800DF100; + RetrieveFileFromArcAlt = 0x800DF340; + + SpawnSprite = 0x80064610; + StoreObjectState = 0x800B1100; + TriggerEventFlag = 0x800E49B0; + + _ZN8SaveFile14CheckIfWritingEv = 0x800E03D0; + _Z8SaveGamePvb = 0x8092F330; + + CheckIfWriting__8SaveFileFv = 0x800E03D0; + SaveGame__FPvb = 0x8092F330; + + _Z9DVD_Startv = 0x8006A6F0; + _Z12DVD_LoadFilePvPcS0_S_ = 0x800DF7C0; + _Z12DVD_FreeFilePvPc = 0x800DF0B0; + _Z16DVD_StillLoadingPv = 0x800DF460; + _Z7DVD_Endv = 0x8006A760; + + DVD_Start__Fv = 0x8006A6F0; + DVD_LoadFile__FPvPcPcPv = 0x800DF7C0; + DVD_FreeFile__FPvPc = 0x800DF0B0; + DVD_StillLoading__FPv = 0x800DF460; + DVD_End__Fv = 0x8006A760; + DVD_GetFile__FPvPCcPCc = 0x800DF100; + DVD_GetFile__FPvPCcPCcPUi = 0x800DF160; + + __ct__12dDvdLoader_cFv = 0x8008F140; + __dt__12dDvdLoader_cFv = 0x8008F170; + load__12dDvdLoader_cFPCcUcPv = 0x8008F1B0; + unload__12dDvdLoader_cFv = 0x8008F310; + + SZSDecompClass = 0x80377864; + LZDecompClass = 0x80377870; + LHDecompClass = 0x8037787C; + LRCDecompClass = 0x80377888; + RLDecompClass = 0x80377894; + StoreCompressionClassList = 0x8016AEA0; + DecompBufferPointer = 0x80429190; + + TryAndFindCompressedFile = 0x8016B8B0; + + _Z22BgTexMng__LoadAnimTilePvisPcS0_c = 0x80087B60; /* same for ntsc */ + BgTexMng__LoadAnimTile__FPvisPcPcc = 0x80087B60; /* same for ntsc */ + + _Z12ActivateWipei = 0x800B0DB0; + ActivateWipe__Fi = 0x800B0DB0; + + CurrentDrawFunc = 0x80429C78; + + currentHeap = 0x8042AB30; + + _Z20GameSetup__LoadScenePv = 0x809192A0; + _Z9FreeScenei = 0x801646C0; + _Z17GameSetupDrawFuncv = 0x809176D0; + _Z16WorldMapDrawFuncv = 0x809264B0; + + GameSetup__LoadScene__FPv = 0x809192A0; + FreeScene__Fi = 0x801646C0; + GameSetupDrawFunc__Fv = 0x809176D0; + WorldMapDrawFunc__Fv = 0x809264B0; + + memcpy = 0x80004364; + memset = 0x800046B4; + strncat = 0x802E1878; + strncpy = 0x802E1808; + strcmp = 0x802E18C4; + sprintf = 0x802E15EC; + strrchr = 0x802E1A50; + + wcslen = 0x802E422C; + + IOS_Open = 0x80224A80; + IOS_Close = 0x80224C70; + IOS_Seek = 0x80225220; + IOS_Read = 0x80224E20; + IOS_Write = 0x80225030; + + ArchiveHeap = 0x8042A16C; + DVDClass = 0x80429D58; + GameMgr = 0x80429C9C; + SaveFileInstance = 0x80429D60; + SaveHandlerInstance = 0x80429CD8; + RemoconMng = 0x80429C70; + ActiveWiimoteID = 0x8042A184; + ActiveWiimote = 0x8042A188; + + MakeScene = 0x80007610; + GetRes = 0x800DF100; + GetSceneLightInfo = 0x80164980; + GetAnmScn = 0x8023A0F0; + BindAnmScn = 0x802424E0; + AssignAnmScnToLightInfo = 0x802C8650; + LoadBlight = 0x80919630; + LoadBlmap = 0x80919620; + + _Z23QueryPlayerAvailabilityi = 0x800B4690; + _Z12DoStartLevelPvP10StartLevel = 0x800BB700; + _Z20SetSomeConditionShitiij = 0x80102650; + _Z8WpadShiti = 0x8016F450; + _Z32CheckIfContinueShouldBeActivatedv = 0x800B5270; + _Z24SearchForIndexOfPlayerIDi = 0x80060110; + + QueryPlayerAvailability__Fi = 0x800B4690; + DoStartLevel__FPvP14StartLevelInfo = 0x800BB700; + SetSomeConditionShit__FiiUi = 0x80102650; + WpadShit__Fi = 0x8016F450; + CheckIfContinueShouldBeActivated__Fv = 0x800B5270; + SearchForIndexOfPlayerID__Fi = 0x80060110; + + _Z18AllocFromGameHeap1j = 0x801626D0; + _Z17FreeFromGameHeap1Pv = 0x80162730; + + AllocFromGameHeap1__FUi = 0x801626D0; + FreeFromGameHeap1__FPv = 0x80162730; + + AllocFromGameHeap1 = 0x801626D0; + + _Z19lyt__Layout__LayoutPv = 0x802AC950; + _Z15lyt__Layout__dtPvi = 0x802AC990; + _Z18lyt__Layout__BuildPvPKvS_ = 0x802ACAC0; + + _Z47nsmbw__ArcResourceAccessor__ArcResourceAccessorPv = 0x802B6430; + _Z30nsmbw__ArcResourceAccessor__dtPvi = 0x80006930; + _Z31nsmbw__ArcResourceAccessor__SetPvS_PKc = 0x802B6490; + _Z39nsmbw__ArcResourceAccessor__GetResourcePvmPKcPm = 0x80006A50; + + _Z23lyt__DrawInfo__DrawInfoPv = 0x802B4B40; + _Z17lyt__DrawInfo__dtPvi = 0x802B4BC0; + + _Z15PSMTXTransApplyPA4_fS0_fff = 0x801C0A20; + + _Z13NSMBWLoadFileP15NSMBWFileHandlePciPv = 0x8008F1B0; + _Z13NSMBWFreeFileP15NSMBWFileHandle = 0x8008F310; + + _Z16NSMBWBrlan__LoadPvPKcS_S_b = 0x80163C70; + _Z16NSMBWBrlan__FreePv = 0x80163DC0; + + _Z24DVDConvertPathToEntrynumPKc = 0x801CA490; + _Z11DVDFastOpeniP9DVDHandle = 0x801CA7A0; + _Z11DVDReadPrioP9DVDHandlePviii = 0x801CA930; + _Z8DVDCloseP9DVDHandle = 0x801CA810; + + DVDConvertPathToEntrynum__FPCc = 0x801CA490; + DVDFastOpen__FiP9DVDHandle = 0x801CA7A0; + DVDReadPrio__FP9DVDHandlePviii = 0x801CA930; + DVDClose__FP9DVDHandle = 0x801CA810; + + DVDConvertPathToEntrynum = 0x801CA490; + + _ZN8SaveFile8GetBlockEi = 0x800E0300; + _ZN8SaveFile10GetQSBlockEi = 0x800E0330; + + GetBlock__8SaveFileFi = 0x800E0300; + GetQSBlock__8SaveFileFi = 0x800E0330; + + _ZN9SaveBlock17GetLevelConditionEii = 0x800CE320; + + GetLevelCondition__9SaveBlockFii = 0x800CE320; + + _Z20CheckIfWeCantDoStuffv = 0x8076D860; + _Z15QueryGlobal5758j = 0x800B3B50; + + + + + CheckIfWeCantDoStuff__Fv = 0x8076D860; + QueryGlobal5758__FUi = 0x800B3B50; + + _Z16EGG__Heap__allocmiPv = 0x802B8AD0; + _Z15EGG__Heap__freePvS_ = 0x802B8D80; + + EGG__Heap__alloc__FUliPv = 0x802B8AD0; + EGG__Heap__free__FPvPv = 0x802B8D80; + + _Z5__nwam = 0x802B9060; + _Z19construct_new_arrayPvS_S_ii = 0x802DC5F0; + _Z11DeleteArrayPvS_ = 0x802DC920; + + _Z8MTXOrthoPA4_fffffff = 0x801C1160; + _Z15GXSetProjectionPA4_fh = 0x801C9650; + + _Z8IOS_OpenPKcj = 0x80224A80; + _Z9IOS_WriteiPKvi = 0x80225030; + _Z9IOS_Closei = 0x80224C70; + + _Z6strlenPKc = 0x802DC4AC; + strlen__FPCc = 0x802DC4AC; + strlen = 0x802DC4AC; + strcpy = 0x802E1748; + strncmp = 0x802E19E0; + + atan = 0x802E7A24; + atan2 = 0x802E8420; + cos = 0x802E7DCC; + sin = 0x802E82D4; + ceil = 0x802E7C54; + floor = 0x802E7E94; + + LayoutHelper_Link = 0x80163470; + + __nwa__FUl = 0x802B9060; + + _Z19EmbeddedLayout_ctorP6Layout = 0x800C88D0; + _Z19EmbeddedLayout_dtorP6Layoutb = 0x800C8920; + _Z19EmbeddedLayout_FreeP6Layout = 0x800C98B0; + _Z25EmbeddedLayout_LoadArcOldP6LayoutPKcb = 0x800C8C30; + _Z25EmbeddedLayout_LoadBrlansP6LayoutPPKci = 0x800C8F30; + _Z25EmbeddedLayout_LoadGroupsP6LayoutPPKcPii = 0x800C9070; + _Z38EmbeddedLayout_ResetAnimToInitialStateP6Layoutib = 0x800C9350; + _Z22EmbeddedLayout_ProcessP6Layout = 0x800C94E0; + _Z28EmbeddedLayout_AddToDrawListP6Layout = 0x80163660; + _Z32EmbeddedLayout_EnableNonLoopAnimP6Layoutib = 0x800C9270; + _Z29EmbeddedLayout_EnableLoopAnimP6Layouti = 0x800C9300; + _Z30EmbeddedLayout_DisableAllAnimsP6Layout = 0x800C9480; + _Z35EmbeddedLayout_CheckIfAnimationIsOnP6Layouti = 0x800C9590; + _Z29EmbeddedLayout_FindPaneByNameP6LayoutPKc = 0x80007300; + _Z32EmbeddedLayout_FindTextBoxByNameP6LayoutPKc = 0x80007320; + + EmbeddedLayout_ctor__FP6Layout = 0x800C88D0; + EmbeddedLayout_dtor__FP6Layoutb = 0x800C8920; + EmbeddedLayout_Free__FP6Layout = 0x800C98B0; + EmbeddedLayout_LoadArcOld__FP6LayoutPKcb = 0x800C8C30; + EmbeddedLayout_LoadBrlans__FP6LayoutPPCci = 0x800C8F30; + EmbeddedLayout_LoadGroups__FP6LayoutPPCcPii = 0x800C9070; + EmbeddedLayout_ResetAnimToInitialState__FP6Layoutib = 0x800C9350; + EmbeddedLayout_Process__FP6Layout = 0x800C94E0; + EmbeddedLayout_AddToDrawList__FP6Layout = 0x80163660; + EmbeddedLayout_EnableNonLoopAnim__FP6Layoutib = 0x800C9270; + EmbeddedLayout_EnableLoopAnim__FP6Layouti = 0x800C9300; + EmbeddedLayout_DisableAllAnims__FP6Layout = 0x800C9480; + EmbeddedLayout_CheckIfAnimationIsOn__FP6Layouti = 0x800C9590; + EmbeddedLayout_FindPaneByName__FP6LayoutPCc = 0x80007300; + EmbeddedLayout_FindTextBoxByName__FP6LayoutPCc = 0x80007320; + + _Z6memsetPvij = 0x800046B4; + _Z7sprintfPcPKcz = 0x802E15EC; + _Z8snprintfPciPKcz = 0x802E14F8; + _Z6strcatPKcS0_ = 0x802E184C; + + _Z6memsetPvij = 0x800046B4; + sprintf__FPcPCce = 0x802E15EC; + snprintf__FPciPCce = 0x802E14F8; + memcmp__FPCvPCvUi = 0x802DEEA8; + _Z6strcatPKcS0_ = 0x802E184C; + + _Znaj = 0x802B9020; + + _Z23Hook_GetGXRenderModeObjv = 0x8024D3E0; + Hook_GetGXRenderModeObj__Fv = 0x8024D3E0; + + _Z3sinf = 0x802E82D4; + _Z3cosf = 0x802E7DCC; + + ARCInitHandle = 0x8019F470; + ARCOpen = 0x8019F510; + ARCFastOpen = 0x8019F7C0; + ARCConvertPathToEntrynum = 0x8019F810; + ARCGetStartAddrInMem = 0x8019FC60; + ARCGetStartOffset = 0x8019FC80; + ARCGetLength = 0x8019FC90; + ARCClose = 0x8019FCA0; + ARCChangeDir = 0x8019FCB0; + ARCOpenDir = 0x8019FD10; + ARCReadDir = 0x8019FD90; + ARCCloseDir = 0x8019FE50; + + DCStoreRangeNoSync = 0x801AC310; + + VIGetNextField = 0x801BDCF0; + + PSMTXIdentity = 0x801C02E0; + PSMTXCopy = 0x801C0310; + PSMTXConcat = 0x801C0350; + PSMTXInverse = 0x801C05B0; + PSMTXRotRad = 0x801C0780; + PSMTXRotAxisRad = 0x801C0960; + PSMTXTrans = 0x801C09E0; + PSMTXTransApply = 0x801C0A20; + PSMTXScale = 0x801C0A70; + PSMTXScaleApply = 0x801C0AA0; + PSMTXMultVec = 0x801C0F70; + + PSVECAdd = 0x801C1200; + PSVECSubtract = 0x801C1230; + PSVECScale = 0x801C1260; + PSVECNormalize = 0x801C1280; + /*PSVECSquareMag*/ + PSVECMag = 0x801C12D0; + PSVECDotProduct = 0x801C1320; + PSVECCrossProduct = 0x801C1340; + PSVECSquareDistance = 0x801C1380; + PSVECDistance = 0x801C1460; + + C_MTXLookAt = 0x801C0BB0; + C_MTXFrustum = 0x801C0FD0; + C_MTXPerspective = 0x801C1070; + C_MTXOrtho = 0x801C1160; + + GXSetVtxDesc = 0x801C35D0; + GXClearVtxDesc = 0x801C3E80; + GXSetVtxAttrFmt = 0x801C3EC0; + GXSetArray = 0x801C4590; + GXInvalidateVtxCache = 0x801C45D0; + GXSetTexCoordGen2 = 0x801C45E0; + GXSetNumTexGens = 0x801C4830; + GXBegin = 0x801C5380; + GXSetCullMode = 0x801C5670; + GXInitLightAttn = 0x801C6240; + GXInitLightSpot = 0x801C6280; + GXInitLightDistAttn = 0x801C6420; + GXInitLightPos = 0x801C64F0; + GXInitLightDir = 0x801C6520; + GXInitSpecularDir = 0x801C6570; + GXInitLightColor = 0x801C6680; + GXLoadLightObjImm = 0x801C6690; + GXSetChanAmbColor = 0x801C6710; + GXSetChanMatColor = 0x801C67F0; + GXSetNumChans = 0x801C68D0; + GXSetChanCtrl = 0x801C6900; + GXInitTexObj = 0x801C6BA0; + GXInitTexObjCI = 0x801C6DB0; + GXInitTexObjLOD = 0x801C6E00; + GXInitTexObjTlut = 0x801C6F30; + GXInitTexObjWrapMode = 0x801C6F10; + GXLoadTexObj = 0x801C72D0; + GXInvalidateTexAll = 0x801C74D0; + GXSetNumIndStages = 0x801C7F20; + GXSetTevDirect = 0x801C7F40; + GXSetTevOp = 0x801C8060; + GXSetTevColorIn = 0x801C8100; + GXSetTevAlphaIn = 0x801C8140; + GXSetTevColorOp = 0x801C8180; + GXSetTevAlphaOp = 0x801C81E0; + GXSetTevColor = 0x801C8240; + GXSetTevColorS10 = 0x801C82A0; + GXSetTevKColor = 0x801C8310; + GXSetTevKColorSel = 0x801C8370; + GXSetTevKAlphaSel = 0x801C83C0; + GXSetTevSwapMode = 0x801C8410; + GXSetTevSwapModeTable = 0x801C8450; + GXSetAlphaCompare = 0x801C84D0; + GXSetTevOrder = 0x801C85A0; + GXSetNumTevStages = 0x801C8700; + GXSetFog = 0x801C8730; + GXSetFogRangeAdj = 0x801C8AC0; + GXSetBlendMode = 0x801C8BD0; + GXSetColorUpdate = 0x801C8C20; + GXSetAlphaUpdate = 0x801C8C50; + GXSetZMode = 0x801C8C80; + GXSetZCompLoc = 0x801C8CC0; + GXSetDither = 0x801C8DA0; + GXSetDstAlpha = 0x801C8DD0; + GXCallDisplayList = 0x801C93F0; + GXSetProjection = 0x801C9650; + GXLoadPosMtxImm = 0x801C9750; + GXLoadNrmMtxImm = 0x801C97D0; + GXSetCurrentMtx = 0x801C9870; + GXSetViewportJitter = 0x801C99E0; + GXSetViewport = 0x801C9A20; + GXDrawDone = 0x801C4CB0; + + GXWGFifo = 0xCC008000; + + TPLBind = 0x80227FE0; + TPLGet = 0x80228100; + + /* Gakenoko stuff */ + mHeapAllocatorSubclass_Link = 0x800690C0; + mHeapAllocatorSubclass_UnLink = 0x800690E0; + + GetResMdl = 0x80239C40; + GetResAnmChr = 0x80239EC0; + GetResAnmVis = 0x80239F30; + GetResAnmTexPat = 0x8023A010; + GetResAnmTexSrt = 0x8023A080; + + GetResAnmChr__Q34nw4r3g3d7ResFileCFPCc = 0x80239EC0; + GetResAnmVis__Q34nw4r3g3d7ResFileCFPCc = 0x80239F30; + GetResAnmTexPat__Q34nw4r3g3d7ResFileCFPCc = 0x8023A010; + GetResAnmTexSrt__Q34nw4r3g3d7ResFileCFPCc = 0x8023A080; + + __vt__Q23EGG9Allocator = 0x8034F9E0; + + __ct__12mAllocator_cFv = 0x8016A3F0; + __vt__12mAllocator_c = 0x80329424; + __dt__12mAllocator_cFv = 0x8016A440; + setup__12mAllocator_cFPvi = 0x8016A4A0; + + __vt__Q23m3d6banm_c = 0x80329340; + __dt__Q23m3d6banm_cFv = 0x80167CD0; + detach__Q23m3d6banm_cFv = 0x80167D40; + process__Q23m3d6banm_cFv = 0x8002A1F0; + setupHeap__Q23m3d6banm_cFv = 0x80167DB0; + testAnmFlag__Q23m3d6banm_cFv = 0x80167E70; + getCurrentFrame__Q23m3d6banm_cFv = 0x80167E90; + setCurrentFrame__Q23m3d6banm_cFf = 0x80167EB0; + getUpdateRate__Q23m3d6banm_cFv = 0x80167ED0; + setUpdateRate__Q23m3d6banm_cFf = 0x80167EF0; + __ct__Q23m3d6fanm_cFv = 0x80168B20; + __vt__Q23m3d6fanm_c = 0x80329388; + __dt__Q23m3d6fanm_cFv = 0x80168B90; + process__Q23m3d6fanm_cFv = 0x80168BF0; + setCurrentFrame__Q23m3d6fanm_cFf = 0x80168DF0; + isAnimationDone__Q23m3d6fanm_cFv = 0x80168E30; + querySomething__Q23m3d6fanm_cFv = 0x80168EF0; + + __vt__Q23m3d8anmChr_c = 0x80303228; + __dt__Q23m3d8anmChr_cFv = 0x800260C0; + vf0C__Q23m3d8anmChr_cFv = 0x8002A210; + setup__Q23m3d8anmChr_cFQ34nw4r3g3d6ResMdlQ34nw4r3g3d9ResAnmChrP12mAllocator_cPUi = 0x80164EE0; + bind__Q23m3d8anmChr_cFPQ23m3d5mdl_cQ34nw4r3g3d9ResAnmChri = 0x80165000; + internalBind__Q23m3d8anmChr_cFv = 0x80165090; + + /* m3d::anmVis_c */ + __vt__Q23m3d8anmVis_c = 0x80AD7A58; + __dt__Q23m3d8anmVis_cFv = 0x809B1990; + vf0C__Q23m3d8anmVis_cFv = 0x809B3520; + setup__Q23m3d8anmVis_cFQ34nw4r3g3d6ResMdlQ34nw4r3g3d9ResAnmVisP12mAllocator_cPUi = 0x80167A50; + bind__Q23m3d8anmVis_cFPQ23m3d5mdl_cQ34nw4r3g3d9ResAnmVisi = 0x80167B70; + internalBind__Q23m3d8anmVis_cFv = 0x80167C60; + + __vt__Q23m3d11anmTexPat_c = 0x803292B0; + __dt__Q23m3d11anmTexPat_cFv = 0x80166880; + detach__Q23m3d11anmTexPat_cFv = 0x801668F0; + setup__Q23m3d11anmTexPat_cFQ34nw4r3g3d6ResMdlQ34nw4r3g3d12ResAnmTexPatP12mAllocator_cPUii = 0x80166640; + bindEntry__Q23m3d11anmTexPat_cFv = 0x801669E0; + bindEntry__Q23m3d11anmTexPat_cFPQ23m3d5mdl_cPQ34nw4r3g3d12ResAnmTexPatii = 0x801669E0; + process__Q23m3d11anmTexPat_cFv = 0x80166BE0; + processOneEntry__Q23m3d11anmTexPat_cFv = 0x80166C90; + getFrameForEntry__Q23m3d11anmTexPat_cFv = 0x80166CF0; + setFrameForEntry__Q23m3d11anmTexPat_cFfi = 0x80166CF0; + getUpdateRateForEntry__Q23m3d11anmTexPat_cFv = 0x80166D10; + setUpdateRateForEntry__Q23m3d11anmTexPat_cFfi = 0x80166D20; + isEntryAnimationDone__Q23m3d11anmTexPat_cFv = 0x80166D30; + queryEntrySomething__Q23m3d11anmTexPat_cFv = 0x80166D40; + setEntryByte34__Q23m3d11anmTexPat_cFUci = 0x80166D50; + getEntryField28__Q23m3d11anmTexPat_cFv = 0x80166D70; + vf0C__Q23m3d11anmTexPat_cFv = 0x80166D90; + + AllocSizeForAnmTexSrt = 0x80167150; + setup__Q23m3d11anmTexSrt_cFQ34nw4r3g3d6ResMdlQ34nw4r3g3d12ResAnmTexSrtP12mAllocator_cPUii = 0x80167230; + __vt__Q23m3d11anmTexSrt_c = 0x803292E0; + __dt__Q23m3d11anmTexSrt_cFv = 0x801674B0; + detach__Q23m3d11anmTexSrt_cFv = 0x80167520; + bindEntry__Q23m3d11anmTexSrt_cFPQ23m3d5mdl_cQ34nw4r3g3d12ResAnmTexSrtii = 0x80167610; + sub80167a80__Q23m3d11anmTexSrt_cFv = 0x80167750; + process__Q23m3d11anmTexSrt_cFv = 0x80167810; + processOneEntry__Q23m3d11anmTexSrt_cFi = 0x801678C0; + getFrameForEntry__Q23m3d11anmTexSrt_cFi = 0x80167920; + setFrameForEntry__Q23m3d11anmTexSrt_cFfi = 0x80167930; + getUpdateRateForEntry__Q23m3d11anmTexSrt_cFi = 0x80167940; + setUpdateRateForEntry__Q23m3d11anmTexSrt_cFfi = 0x80167950; + isEntryAnimationDone__Q23m3d11anmTexSrt_cFi = 0x80167960; + setEntryByte34__Q23m3d11anmTexSrt_cFUci = 0x80167970; + getEntryField28__Q23m3d11anmTexSrt_cFi = 0x80167990; + getEntryField2C__Q23m3d11anmTexSrt_cFi = 0x801679B0; + vf0C__Q23m3d11anmTexSrt_cFv = 0x801679D0; + + __vt__Q23m3d10anmTexSrt_c__child_cFv = 0x803292F8; + __dt__Q23m3d10anmTexSrt_c__child_cFv = 0x801679E0; + vf0C__Q23m3d10anmTexSrt_c__child_cFv = 0x80167A40; + + + m3d__mdl_c__DoStuff = 0x80169BA0; + + __ashldi3 = 0x802DCFFC; + + + _Z13FindActorByIDj = 0x80162B10; + FindActorByID__FUi = 0x80162B10; + + EventTable = 0x80429D98; + dBgActorManager = 0x80429AF8; + + ContinueBgActorSpawn = 0x8007EA9C; + + SomeModelAnimationClass_Setup = 0x80164EE0; + + EGGTSystem_Pointer = 0x80429DAC; + + dSys_c__RootHeapMEM1 = 0x80429DB0; + dSys_c__RootHeapMEM2 = 0x80429DB4; + + BG_GM_ptr = 0x80429AF0; + instance__7dBgGm_c = 0x80429AF0; + + BgActorDefs = 0x80429AFC; + + _Z16GetPointerToTileP9BG_GM_haxtttPsb = 0x80077520; + GetPointerToTile__FP9BG_GM_haxUsUsUsPsb = 0x80077520; + + GameHeap1 = 0x803779CC; + GameHeap2 = 0x803779D0; + WiimotePtr1 = 0x80377A08; + + continueFromFlagObjCheck = 0x807EB9F4; + returnFromFlagObjCheck = 0x807EBA0C; + + Global5758 = 0x80429C68; + + EggControllerClassPtrMaybe = 0x80429C70; + + MEMGetTotalFreeSizeForExpHeap = 0x801D45F0; + + sub_80064BD0 = 0x80064BD0; + sub_80166970 = 0x80166640; + sub_80166D10 = 0x801669E0; + + daEnGakeNoko_c__StateID_FoolMove = 0x80B144C0; + + EnItem_BindAnimation_Continued = 0x80A28AE4; + dAcPy_c__ChangePowerupWithAnimation = 0x801458D0; + PlayerProjectileShooting = 0x8013B9A0; + + PlayPlayerSound = 0x80057E70; + CreateActor = 0x80064610; + Actor_SearchByName = 0x80162B60; + + daEnItem_c__GetWhetherPlayerCanGetPowerupOrNot = 0x80A2B760; + + returnFromGPSFASixth = 0x80141CC8; + + continuePlumberSetPowerupTexture = 0x800CA5AC; + doneSettingThePowerupTexture = 0x800D46CC; + doneSettingThePowerupTexture2 = 0x80141244; + + continueToadPowerupSet = 0x800BCF04; + + continuePlumberSetPowerupTextureDebug = 0x800CA544; + + returnFromPowerupSoundChange = 0x8014110C; + + ExitFromTileGodHack = 0x807E1414; + + SomeTable_802F5440 = 0x802F4F60; + SomeTable_802F5580 = 0x802F50A0; + SomeTable_802F56C0 = 0x802F51E0; + + BlahTable = 0x80324FC8; + + TileTable = 0x802EF7D8; + + CurrentLevel = 0x803159BD; + CurrentWorld = 0x803159BC; + CurrentStartedArea = 0x803159B6; /*WRONG*/ + CurrentStartedEntrance = 0x803159B7; /*WRONG*/ + + GetRandomSeed = 0x800B2EC0; + RandomSeed = 0x80429C64; + + MakeRandomNumber__Fi = 0x800B2EE0; + MakeRandomNumberForTiles__Fi = 0x801611B0; + + StrangeReplayValue1 = 0x804276AE; + StrangeReplayValue2 = 0x80429A89; + StrangeReplayValue3 = 0x80429A8A; + + OSGetTime = 0x801B5D90; + OSTicksToCalendarTime = 0x801B5E90; + snprintf = 0x802E14F8; + continueFromReplayHookStart = 0x80924424; + continueFromReplayEndHook = 0x801020AC; + returnFromRecorder = 0x800B5FF0; + GetSomeGlobalClass = 0x801092C0; + SomeUnknownClass5408 = 0x80429FB8; + SomeWipeClass = 0x8042A160; + QueryGlobal5758 = 0x800B3B50; + + SoundClassRelated = 0x80429A7C; + BufferToCheckIfPlaying = 0x8042A1A8; + StopSoundBasic = 0x801952B0; + StopSoundRelated = 0x80195D20; + + GetHermiteCurveValue = 0x8017D330; + GetHermiteCurveValue__FfP10HermiteKeyUi = 0x8017D330; + + SpawnEffect = 0x8016C6A0; + + __ct__Q23EGG6EffectFv = 0x802D78B0; + + __vt__Q23mEf8effect_c = 0x80329788; + + __vt__Q23mEf3es2 = 0x803296C0; + __dt__Q23mEf3es2Fv = 0x80025F60; + + RectanglesOverlap__FP7Point3dP7Point3dP7Point3dP7Point3d = 0x800B3100; + + fmod = 0x802E8424; + + /* MEGA TESTS */ + usedForDeterminingStatePress_or_playerCollision = 0x800964A0; + DoStuffAndMarkDead = 0x80097170; + SmoothRotation = 0x8015F300; + ClassAt1EC_Init = 0x8006D090; + HandlesOverallScale = 0x8009EA50; + posIsInZone = 0x800B5660; + ScreenPositionClass = 0x80429D28; + ShakeScreen = 0x800D8BE0; + + /* daEnemy_c */ + /*FIXME bad vtable address :( */ + //__vt__9daEnemy_c = 0x80AE7B68; + _vf58__9daEnemy_cFv = 0x809A4DA0; + _vf5C__9daEnemy_cFv = 0x809A4D90; + _vf68__9daEnemy_cFv = 0x809A4DE0; + ptrToWhichPlayer__9daEnemy_cFv = 0x809A2E10; + _vf74__9daEnemy_cFv = 0x809A4DD0; + _vf7C__9daEnemy_cFv = 0x809A4DC0; + _vfB8__9daEnemy_cFv = 0x809A4DB0; + _vf228__9daEnemy_cFv = 0x809A4E20; + _vf23C__9daEnemy_cFv = 0x809A4E10; + _vf240__9daEnemy_cFv = 0x809A4E00; + _vf244__9daEnemy_cFv = 0x809A4DF0; + + /* daEnDosun_c */ + __ct_11daEnDosun_cFv = 0x809F5390; + __ct_14daEnBigDosun_cFv = 0x809F5420; + __vt__11daEnDosun_c = 0x80AE7B28; + onCreate__11daEnDosun_cFv = 0x809F54B0; + onDelete__11daEnDosun_cFv = 0x809F5890; + onExecute__11daEnDosun_cFv = 0x809F5710; + onDraw__11daEnDosun_cFv = 0x809F5760; + __dt_11daEnDosun_cFv = 0x809F6A00; + kill__11daEnDosun_cFv = 0x809F69D0; + killedByLevelClear__11daEnDosun_cFv = 0x809F60D0; + collisionCat3_StarPower__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F5910; + _vf108__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F58A0; + collisionCatD_GroundPound__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F69F0; + _vf110__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F5950; + collisionCat7_WMWaggleWater__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F69E0; + collisionCat9_RollingObject__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F6960; + collisionCat1_Fireball_E_Explosion__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F69A0; + collisionCat2_IceBall_15_YoshiIce__11daEnDosun_cFP13ActivePhysicsP13ActivePhysics = 0x809F6970; + _vf144__11daEnDosun_cFi = 0x809F59E0; + DieFall_Begin__11daEnDosun_cFv = 0x809F66C0; + DieFall_Execute__11daEnDosun_cFv = 0x809F67D0; + DieFall_End__11daEnDosun_cFv = 0x809F67C0; + Ice_Begin__11daEnDosun_cFv = 0x809F68E0; + Ice_Execute__11daEnDosun_cFv = 0x809F6950; + Ice_End__11daEnDosun_cFv = 0x809F6940; + CreateIceActors__11daEnDosun_cFv = 0x809F5B20; + setupBodyModel__11daEnDosun_cFv = 0x809F5CB0; + s_809F6530__11daEnDosun_cFv = 0x809F5DF0; + spawnEffects__11daEnDosun_cFv = 0x809F5F60; + StateID_UpWait__11daEnDosun_c = 0x80B13C50; + StateID_DownMoveWait__11daEnDosun_c = 0x80B13C90; + StateID_PuruMove__11daEnDosun_c = 0x80B13CD0; + StateID_DownMove_Kameck__11daEnDosun_c = 0x80B13D10; + StateID_DownMove__11daEnDosun_c = 0x80B13D50; + StateID_DownWait__11daEnDosun_c = 0x80B13D90; + StateID_UpMove__11daEnDosun_c = 0x80B13DD0; + StateID_DieFall__11daEnDosun_c = 0x80B13E0C; + StateID_Ice__11daEnDosun_c = 0x80B13E4C; + + SpawnThwompEffects = 0x809F5F60; + + HurtMarioBecauseOfBeingSquashed = 0x80056370; + + + .text : { + FILL (0) + + __text_start = . ; + *(.init) + *(.text) + __ctor_loc = . ; + *(.ctors) + __ctor_end = . ; + *(.dtors) + *(.rodata) + /**(.sdata)*/ + *(.data) + /**(.sbss)*/ + *(.bss) + *(.fini) + *(.rodata.*) + __text_end = . ; + } +} diff --git a/makeSummerSun b/makeSummerSun index a8b665b..5add3fb 100755 --- a/makeSummerSun +++ b/makeSummerSun @@ -13,6 +13,10 @@ rm ~/Dropbox/NEWERsmbw/Summer\ Sun/SystemUS_2.bin rm ~/Dropbox/NEWERsmbw/Summer\ Sun/DLCodeUS_2.bin rm ~/Dropbox/NEWERsmbw/Summer\ Sun/DLRelocsUS_2.bin +rm ~/Dropbox/NEWERsmbw/Summer\ Sun/SystemJP_1.bin +rm ~/Dropbox/NEWERsmbw/Summer\ Sun/DLCodeJP_1.bin +rm ~/Dropbox/NEWERsmbw/Summer\ Sun/DLRelocsJP_1.bin + python tools/mapfile_tool.py python tools/kamek.py SummerSun.yaml --no-rels --use-mw --use-wine --gcc-type=/usr/local/devkitPRO/devkitPPC/bin/powerpc-eabi --mw-path=tools if [ "$?" = "0" ]; then @@ -33,5 +37,9 @@ mv NewerASM/ntsc2_loader.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/SystemUS_2.bin mv NewerASM/ntsc2_dlcode.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/DLCodeUS_2.bin mv NewerASM/ntsc2_dlrelocs.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/DLRelocsUS_2.bin +mv NewerASM/jpn_loader.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/SystemJP_1.bin +mv NewerASM/jpn_dlcode.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/DLCodeJP_1.bin +mv NewerASM/jpn_dlrelocs.bin ~/Dropbox/NEWERsmbw/Summer\ Sun/DLRelocsJP_1.bin + echo Built all! diff --git a/poweruphax.yaml b/poweruphax.yaml index 3a9aa21..29f2636 100644 --- a/poweruphax.yaml +++ b/poweruphax.yaml @@ -1,5 +1,5 @@ --- -source_files: [../src/poweruphax.S] +source_files: [../src/poweruphax.S, ../src/poweruphax.cpp] hooks: - name: GetInfoFromDumbTable type: branch_insn @@ -282,6 +282,11 @@ hooks: addr_pal: 0x80ACF9F4 data: '0008820e' + - name: HammerBigThwompBounce + type: add_func_pointer + src_addr_pal: 0x80AE8360 + target_func: 'ThwompHammer(dEn_c *, ActivePhysics *, ActivePhysics *)' + - name: HammerBigBoo type: patch addr_pal: 0x80AD4AA0 @@ -292,6 +297,11 @@ hooks: addr_pal: 0x80AD4AA4 data: '20020000' + - name: HammerBigBooBounce + type: add_func_pointer + src_addr_pal: 0x80B0AE20 + target_func: 'BooHammer(dEn_c *, ActivePhysics *, ActivePhysics *)' + - name: HammerAmp type: patch addr_pal: 0x80ACE17C @@ -312,6 +322,11 @@ hooks: addr_pal: 0x80AD4F48 data: '00088a1e' + - name: HammerBigUrchinBounce + type: add_func_pointer + src_addr_pal: 0x80B0CF40 + target_func: 'UrchinHammer(dEn_c *, ActivePhysics *, ActivePhysics *)' + - name: HammerChainChomp type: patch addr_pal: 0x80AD5214 @@ -367,6 +382,10 @@ hooks: addr_pal: 0x80AD5538 data: '003AFFFE' + - name: HammerMicroGoomba + type: patch + addr_pal: 0x80ACD9A0 + data: '0008A2BE' # - name: HammerClam # type: patch diff --git a/singAlong.yaml b/singAlong.yaml new file mode 100644 index 0000000..7c9ba66 --- /dev/null +++ b/singAlong.yaml @@ -0,0 +1,39 @@ +--- +# SingAlong = WM_KILLERBULLET (0x276) +# SongBlock = WM_KILLER (0x275) + +source_files: [../src/bonusRoom.cpp] + +hooks: + + ################################################ + # HOOKS FOR Sing Along + ################################################ + - name: SingAlongBuild + type: add_func_pointer + src_addr_pal: 0x8098369C + target_func: 'dSingAlong::build(void)' + + - name: UpdateSingAlongSpriteInfo + type: patch + addr_pal: 0x8030A598 + data: '0276 0000 00000010 00000010 00000000 00000000 00000200 00000200 0000 0000 0200 0200 0000 0000' + # 0x8030A340 + sprite num * 0x28 == offset + + - name: SingAlongSpriteFileInfo + type: add_func_pointer + src_addr_pal: 0x8031AB88 + target_func: 'SAarcNameList' + + # 0x8031AB4C + sprite num * 0x4 == offset + # That offset stores a pointer to a table of pointers to strings, followed by four bytes of padding + # Each string is an arcname to load + + + ################################################ + # HOOKS FOR Song Block + ################################################ + - name: SongBlockBuild + type: add_func_pointer + src_addr_pal: 0x809834F0 + target_func: 'dSongBlock::build(void)' diff --git a/spritetex.yaml b/spritetex.yaml index 6d38857..c852ce9 100644 --- a/spritetex.yaml +++ b/spritetex.yaml @@ -293,6 +293,13 @@ hooks: target_func: 'TEX_Goal' + - name: TEX_ColorBlock + type: branch_insn + branch_type: bl + src_addr_pal: 0x800BEBD4 + target_func: 'TEX_ColorBlock' + + # - name: TEX_StretchMush # type: branch_insn # branch_type: bl @@ -404,11 +411,11 @@ hooks: target_func: 'TEX_PokeyC' - - name: TEX_PokeyNoSand - type: branch_insn - branch_type: bl - src_addr_pal: 0x80A9E7A8 - target_func: 'TEX_PokeyNoSand' + # - name: TEX_PokeyNoSand + # type: branch_insn + # branch_type: bl + # src_addr_pal: 0x80A9E7A8 + # target_func: 'TEX_PokeyNoSand' # - name: TEX_PokeySnowmanPos @@ -418,6 +425,19 @@ hooks: # target_func: 'TEX_PokeySnowmanPos' + - name: TEX_SnowmanSandToSnow + type: branch_insn + branch_type: bl + src_addr_pal: 0x80A9E7D0 + target_func: 'TEX_SnowmanSandToSnow' + + - name: TEX_SnowmanSandToSnowB + type: branch_insn + branch_type: bl + src_addr_pal: 0x80A9EA00 + target_func: 'TEX_SnowmanSandToSnowB' + + # - name: TEX_PokeySnowmanPosZ # type: patch # data: '60000000' diff --git a/src/bonusRoom.cpp b/src/bonusRoom.cpp new file mode 100644 index 0000000..6b61f27 --- /dev/null +++ b/src/bonusRoom.cpp @@ -0,0 +1,708 @@ +#include +#include +#include +#include +#include + +extern "C" bool SpawnEffect(const char*, int, Vec*, S16Vec*, Vec*); +extern "C" void *PlaySound(dStageActor_c *, int soundID); +extern "C" void *PlaySoundAsync(dStageActor_c *, int soundID); +extern "C" void *StopBGMMusic(); +extern "C" void *StartBGMMusic(); + +int Songs[2][4][15][2] = { + + { // Song 1 - + {{3,0},{3,15},{3,45},{1,75},{3,90},{5,120},{0,0}}, // First number is the note, Second is timing: 30 is one quarter note at 120 bpm, 0,0 ends the sequence + {{8,0},{5,22},{3,45},{6,67},{7,82},{6,97},{6,105},{0,0}}, + {{1,0},{1,7},{1,22},{1,37},{2,45},{3,60},{1,67},{7,82},{6,90},{0,0}}, + {{1,0},{1,7},{1,22},{1,37},{2,45},{3,52},{0,0}} + }, + + { // Song 2 - + {{1,30},{2,60},{3,90},{4,120}}, + {}, + {}, + {} + } + +}; + + +const char* Prizes[10][4] = { + { "I_kinoko", "g3d/I_kinoko.brres", "I_kinoko", "wait2" }, + { "I_fireflower", "g3d/I_fireflower.brres", "I_fireflower", "wait2" }, + { "I_iceflower", "g3d/I_iceflower.brres", "I_iceflower", "wait2" }, + { "I_penguin", "g3d/I_penguin.brres", "I_penguin", "wait2" }, + { "I_propeller", "g3d/I_propeller_model.brres", "I_propeller_model", "wait2" }, + { "I_kinoko_bundle","g3d/I_mini_kinoko.brres", "I_mini_kinoko", "wait2" }, + { "I_hammer", "g3d/I_hammer.brres", "I_hammer", "wait2" }, + { "I_star", "g3d/I_star.brres", "I_star", "wait2" }, + { "I_kinoko_bundle","g3d/I_life_kinoko.brres", "I_life_kinoko", "wait2" }, + { "obj_coin", "g3d/obj_coin.brres", "obj_coin", "wait2" } +}; + +int PrizePacks[2][4] = { // Numbers list prizes for each level + // 0 = Mushroom + // 1 = Fireflower + // 2 = Iceflower + // 3 = Penguin + // 4 = Propeller + // 5 = MiniShroom + // 6 = Starman + // 7 = Hammer + // 8 = 1-ups + // 9 = Coins + + {9, 0, 8, 1}, + {0, 0, 8, 5} +}; + +int Notes[9] = { + SE_EMY_PATAMET_STEP, + SE_EMY_PATAMET_STEP_2, + SE_EMY_PATAMET_STEP_3, + SE_EMY_PATAMET_STEP_4, + SE_EMY_PATAMET_STEP_5, + SE_EMY_PATAMET_STEP_6, + SE_EMY_PATAMET_STEP_7, + SE_EMY_PATAMET_STEP_8, + SE_EMY_PATAMET_COMPLETE +}; + + + +const char* SAarcNameList [] = { + "obj_coin", + "I_hammer", + "I_star", + "light_block", + "light_block_color", + "I_kinoko_bundle", + NULL +}; + +class dSongBlock; + +class dSingAlong : public dStageActor_c { + public: + static dSingAlong *instance; + static dSingAlong *build(); + + void RegisterNote(int note); + void addPowerups(); + + int onCreate(); + int onDelete(); + int onExecute(); + int onDraw(); + + int beforeExecute() { return true; } + int afterExecute(int) { return true; } + + dSingAlong() : state(this, &StateID_Intro) { } + + mHeapAllocator_c allocator; + nw4r::g3d::ResFile resFile[4]; + m3d::mdl_c pModel[4]; + m3d::anmChr_c pAnim[4]; + Vec prizePos[4]; + Vec prizeScale[4]; + + HermiteKey keysX[0x10]; + unsigned int Xkey_count; + HermiteKey keysY[0x10]; + unsigned int Ykey_count; + HermiteKey keysS[0x10]; + unsigned int Skey_count; + + + dSongBlock *Cblock; + dSongBlock *Dblock; + dSongBlock *Eblock; + dSongBlock *Fblock; + dSongBlock *Gblock; + dSongBlock *Ablock; + dSongBlock *Bblock; + + + // you might get casting issues. due to C++. blah = (int (*)[15][2])BigArray; fixes it + // int (*song)[4][15][2]; + // int (*prizes)[4]; + int song; + int prize; + int chorus; + // int (*currentNote)[2]; + int currentNote; + int endNote; + int timer; + int counter; + int Powerups[10]; + int isResponding; + + dStateWrapper_c state; + + // Intro, Call, Response, Display Prize, Failure, Win, Collect Prizes + USING_STATES(dSingAlong); + DECLARE_STATE(Intro); + DECLARE_STATE(Call); + DECLARE_STATE(Response); + DECLARE_STATE(Prize); + DECLARE_STATE(Failure); + DECLARE_STATE(Win); +}; + +dSingAlong *dSingAlong::instance = 0; +dSingAlong *dSingAlong::build() { + OSReport("Building Sing Along."); + void *buffer = AllocFromGameHeap1(sizeof(dSingAlong)); + dSingAlong *c = new(buffer) dSingAlong; + + instance = c; + return c; +} + + +/*****************************************************************************/ +// Events +int dSingAlong::onCreate() { + + OSReport("Creating the Sing Along gang."); + // Load in the settings + // this->song = Songs; + this->song = this->settings & 0xF; + // this->prizes = PrizePacks; + this->prize = (this->settings >> 4) & 0xF; + this->chorus = -1; + // this->currentNote = song[chorus][0]; + this->currentNote = 0; + + this->Powerups[0] = 0; // Mushroom + this->Powerups[1] = 0; // Fireflower + this->Powerups[2] = 0; // Iceflower + this->Powerups[3] = 0; // Penguin + this->Powerups[4] = 0; // Propeller + this->Powerups[5] = 0; // MiniShroom + this->Powerups[6] = 0; // Starman + this->Powerups[7] = 0; // Hammer + this->Powerups[8] = 0; // 1-ups + this->Powerups[9] = 0; // Coins + + // Load in the prize models + allocator.link(-1, GameHeaps[0], 0, 0x20); + + int p; + nw4r::g3d::ResMdl mdl; + nw4r::g3d::ResAnmChr anmChr; + + for (int i = 0; i < 4; i++) { + p = PrizePacks[prize][i]; + + // nw4r::g3d::ResFile file; + // resFile[i] = file; + // m3d::mdl_c model; + // pModel[i] = model; + // m3d::anmChr_c anim; + // pAnim[i] = anim; + + OSReport("Model %d: %s, %s, %s", i, Prizes[p][0], Prizes[p][1], Prizes[p][2]); + resFile[i].data = getResource(Prizes[p][0], Prizes[p][1]); + mdl = resFile[i].GetResMdl(Prizes[p][2]); + pModel[i].setup(mdl, &allocator, 0x224, 1, 0); + SetupTextures_Item(&pModel[i], 0); // 800B43D0 + + anmChr = resFile[i].GetResAnmChr("wait2"); + pAnim[i].setup(mdl, anmChr, &allocator, 0); + // pAnim[i].bind(&pModel[i], anmChr, 1); + // pModel[i].bindAnim(&pAnim[i], 0.0); + pAnim[i].setUpdateRate(1.0); + + prizePos[i] = (Vec){ pos.x, pos.y, pos.z }; + prizeScale[i] = (Vec){ 5.0, 5.0, 5.0 }; + } + + allocator.unlink(); + + // Create and prepare the blocks + float x = pos.x; + float y = pos.y - 40.0; + float z = pos.z; + S16Vec rot = (S16Vec){0,0,0}; + + Cblock = (dSongBlock*)create(WM_KILLER, 1, &(Vec){x-96.0, y, z}, &rot, 0); + Dblock = (dSongBlock*)create(WM_KILLER, 2, &(Vec){x-64.0, y, z}, &rot, 0); + Eblock = (dSongBlock*)create(WM_KILLER, 3, &(Vec){x-32.0, y, z}, &rot, 0); + Fblock = (dSongBlock*)create(WM_KILLER, 4, &(Vec){x , y, z}, &rot, 0); + Gblock = (dSongBlock*)create(WM_KILLER, 5, &(Vec){x+32.0, y, z}, &rot, 0); + Ablock = (dSongBlock*)create(WM_KILLER, 6, &(Vec){x+64.0, y, z}, &rot, 0); + Bblock = (dSongBlock*)create(WM_KILLER, 7, &(Vec){x+96.0, y, z}, &rot, 0); + + // // Trigger the intro state + // state.setState(&StateID_Intro); + + isResponding = 0; + OSReport("Is now responding: %d", isResponding); + OSReport("Daddy is at: %x", this); + + return true; +} + +int dSingAlong::onExecute() { + state.execute(); + + return true; +} + +int dSingAlong::onDraw() { + + if (chorus == -1) { return true; } + + for (int i = 0; i < (chorus + 1); i++) { + matrix.translation(prizePos[i].x, prizePos[i].y, prizePos[i].z); + matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z); + + pModel[i].setDrawMatrix(matrix); + + pModel[i].setScale(&prizeScale[i]); + + // OSReport("Calc World"); + // pModel[i].calcWorld(false); + + // OSReport("Schedule"); + // pModel[i].scheduleForDrawing(); + + // if (pAnim[i].isAnimationDone()) { + // pAnim[i].setCurrentFrame(0.0); } + + // OSReport("vf1C"); + // pModel[i]._vf1C(); + } + + return true; +} + +int dSingAlong::onDelete() { + return 1; +} + +/*****************************************************************************/ +// Register a Note being played by the players +void dSingAlong::RegisterNote(int note) { + OSReport("Register Note begins: %d", note); + OSReport("Responding is: %d", isResponding); + + if (isResponding == 1) { + OSReport("State was checked"); + + if (note == Songs[song][chorus][currentNote][0]) { + OSReport("Note was correct"); + + currentNote += 1; + } + else { + OSReport("Player failed"); + isResponding = 0; + state.setState(&StateID_Failure); + } + } +} + + +// Game Flow +// +// 1) Intro, maybe a banner 'Match the music' +// 2) Present the prize +// 3) Play the music +// 4) Wait for responses +// 6) If failure, make prize disappear, award banked prizes, end stage, play failure music +// 7) If successful, place the prize in the bank, and proceed to step 3 on the next segment +// 8) If all things are successful, play the victory theme and award the banked prizes, end stage + + +/*****************************************************************************/ +// Intro +CREATE_STATE(dSingAlong, Intro); + +void dSingAlong::executeState_Intro() { + state.setState(&StateID_Prize); +} + +//*****************************************************************************/ +// Prize +CREATE_STATE(dSingAlong, Prize); + +void dSingAlong::beginState_Prize() { + this->timer = 0; + + if (chorus != 0) { + this->timer = 120; + } + + Xkey_count = 2; + Ykey_count = 2; + Skey_count = 2; + + // /* keysX[i] = { frame, value, slope }; */ + keysX[0] = (HermiteKey){ 0.0, pos.x, 0.8 }; + keysY[0] = (HermiteKey){ 0.0, pos.y, 0.8 }; + keysS[0] = (HermiteKey){ 0.0, 5.0, 0.8 }; + + keysX[1] = (HermiteKey){ 60.0, pos.x + (30.0 * (chorus + 1)) - 320.0, 0.8 }; + keysY[1] = (HermiteKey){ 60.0, pos.y - 80.0, 0.8 }; + keysS[1] = (HermiteKey){ 60.0, 1.0, 0.8 }; +} +void dSingAlong::executeState_Prize() { + + if (timer == 120) { // Play a nice success sound, and wait a second + PlaySound(this, SE_MG_IH_PAIR_OK); // SE_MG_IH_NICE or SE_MG_UH_NICE + + int p; + p = PrizePacks[prize][chorus]; + this->Powerups[p] += 1; + } + + if (timer < 60 && timer >= 0) { // Move last time's model to the corner. + float modX = GetHermiteCurveValue(60.0 - timer, keysX, Xkey_count); + float modY = GetHermiteCurveValue(60.0 - timer, keysY, Ykey_count); + float modS = GetHermiteCurveValue(60.0 - timer, keysS, Skey_count); + + + prizePos[chorus] = (Vec){ modX, modY, prizePos[chorus].z }; + prizeScale[chorus] = (Vec){ modS, modS, modS }; + } + + if (timer == 0) { + chorus += 1; + + SpawnEffect("Wm_en_blockcloud", 0, &(Vec){pos.x, pos.y, pos.z+500.0}, &(S16Vec){0,0,0}, &(Vec){1.5, 1.5, 1.5}); + PlaySound(this, SE_OBJ_ITEM_APPEAR); // SE_OBJ_GOOD_ITEM_APPEAR + } + + if (timer == -90) { + state.setState(&StateID_Call); + } + + timer -= 1; +} + +//*****************************************************************************/ +// Call +CREATE_STATE(dSingAlong, Call); + +void dSingAlong::beginState_Call() { + timer = 0; + currentNote = 0; + + OSReport("SONG: {%d, %d} {%d %d} {%d %d}", Songs[song][chorus][0][0], Songs[song][chorus][0][1], Songs[song][chorus][1][0], Songs[song][chorus][1][1], Songs[song][chorus][2][0], Songs[song][chorus][2][1]); +} +void dSingAlong::executeState_Call() { + + // OSReport("%d: Waiting for timer %d", timer, *currentNote[1]); + + if (timer == Songs[song][chorus][currentNote][1]) { + OSReport("Playing Note %d", Songs[song][chorus][currentNote][0]); + + // int play = Notes[Songs[song][chorus][currentNote][0]-1]; + + // if ((currentNote > 1) && + // (Notes[Songs[song][chorus][currentNote][0]-1] == Notes[Songs[song][chorus][currentNote-1][0]-1]) && + // (Notes[Songs[song][chorus][currentNote][0]-1] == Notes[Songs[song][chorus][currentNote-2][0]-1])) + // { + // SoundPlayingClass::instance3->PlaySoundAtPosition(play, &(Vec2){pos.x,pos.y}, 0); + // } + + // else if ((currentNote > 0) && (Notes[Songs[song][chorus][currentNote][0]-1] == Notes[Songs[song][chorus][currentNote-1][0]-1])) { + // SoundPlayingClass::instance2->PlaySoundAtPosition(play, &(Vec2){pos.x,pos.y}, 0); + // } + // else { + // SoundPlayingClass::instance1->PlaySoundAtPosition(play, &(Vec2){pos.x,pos.y}, 0); + // } + + SoundPlayingClass::instance1->PlaySoundAtPosition(Notes[Songs[song][chorus][currentNote][0]-1], &(Vec2){pos.x,pos.y}, 0); + + // PlaySoundAsync(this, Notes[Songs[song][chorus][currentNote][0]-1]); + + + + currentNote += 1; + // currentNote = song[chorus][counter]; + OSReport("Next Note %d", Songs[song][chorus][currentNote][0]); + + if (Songs[song][chorus][currentNote][0] == 0) { + OSReport("Switching to Response Mode"); + state.setState(&StateID_Response); + } + } + + timer += 1; +} + +/*****************************************************************************/ +// Response +CREATE_STATE(dSingAlong, Response); + +void dSingAlong::beginState_Response() { + timer = 0; + currentNote = 0; + isResponding = 1; + OSReport("Is now responding: %d", isResponding); +} +void dSingAlong::executeState_Response() { + if (Songs[song][chorus][currentNote][0] == 0) { + isResponding = 0; + OSReport("Switching to some other mode: %d", isResponding); + if (chorus == 3) { + state.setState(&StateID_Win); + } + else { + state.setState(&StateID_Prize); + } + } +} + +/*****************************************************************************/ +// Failure +CREATE_STATE(dSingAlong, Failure); + +void dSingAlong::beginState_Failure() { + this->timer = 0; + + PlaySound(this, SE_MG_CMN_WIN_CLOSE); +} +void dSingAlong::executeState_Failure() { + if (timer == 240) { + this->addPowerups(); + ExitStage(3, 0, 0, 4); + } + timer += 1; +} + +/*****************************************************************************/ +// Win +CREATE_STATE(dSingAlong, Win); + +void dSingAlong::beginState_Win() { + this->timer = 0; + + PlaySound(this, SE_MG_CMN_FANFARE_GREAT); +} +void dSingAlong::executeState_Win() { + if (timer == 240) { + this->addPowerups(); + ExitStage(3, 0, 0, 4); + } + timer += 1; +} + +/*****************************************************************************/ +// Add Powerups at the End of the Stage +void dSingAlong::addPowerups() { + SaveFile *file = GetSaveFile(); + SaveBlock *block = file->GetBlock(file->header.current_file); + + for (int i = 0; i < 7; i++) { // Change this to 8 to support hammers + + block->powerups_available[i] = block->powerups_available[i] + this->Powerups[i]; + + if (block->powerups_available[i] > 99) { block->powerups_available[i] = 99; } + } + + + for (int i = 0; i < 4; i++) { // Make sure all players get the reward! + block->player_coins[i] = (this->Powerups[9] * 50) + block->player_coins[i]; + + for (;block->player_coins[i] < 100; block->player_coins[i] - 100) { + block->player_lives[i] = 1 + block->player_lives[i]; + } + + block->player_lives[i] = this->Powerups[8] + block->player_lives[i]; + if (block->player_lives[i] > 99) { block->player_lives[i] = 99; } + } + + return; +} + + +/*****************************************************************************/ +/*****************************************************************************/ +/*****************************************************************************/ +// Replaces: Nothing yet + +class dSongBlock : public daEnBlockMain_c { +public: + Physics::Info physicsInfo; + + int onCreate(); + int onDelete(); + int onExecute(); + int onDraw(); + + mHeapAllocator_c allocator; + nw4r::g3d::ResFile resFile; + + m3d::mdl_c bodyModel; + m3d::anmChr_c glow; + + int note; + + void calledWhenUpMoveExecutes(); + void calledWhenDownMoveExecutes(); + void blockWasHit(bool isDown); + USING_STATES(dSongBlock); + DECLARE_STATE(Wait); + + static dSongBlock *build(); +}; + + +CREATE_STATE(dSongBlock, Wait); + + +dSongBlock *dSongBlock::build() { + void *buffer = AllocFromGameHeap1(sizeof(dSongBlock)); + return new(buffer) dSongBlock; +} + + +int dSongBlock::onCreate() { + + // Settings + this->note = this->settings; + + // Model creation + allocator.link(-1, GameHeaps[0], 0, 0x20); + + this->resFile.data = getResource("light_block", "g3d/light_block.brres"); + nw4r::g3d::ResMdl mdl = this->resFile.GetResMdl("light_block"); + bodyModel.setup(mdl, &allocator, 0x224, 1, 0); + SetupTextures_MapObj(&bodyModel, 0); // 800B42B0 + + // Animation Assignment + nw4r::g3d::ResAnmChr anmChr = this->resFile.GetResAnmChr("light_block"); + this->glow.setup(mdl, anmChr, &this->allocator, 0); + glow.bind(&bodyModel, anmChr, 1); + bodyModel.bindAnim(&glow, 0.0); + glow.setUpdateRate(1.0); + allocator.unlink(); + + // Block Physics + blockInit(pos.y); + + physicsInfo.x1 = -8; + physicsInfo.y1 = 16; + physicsInfo.x2 = 8; + physicsInfo.y2 = 0; + + physicsInfo.otherCallback1 = &daEnBlockMain_c::OPhysicsCallback1; + physicsInfo.otherCallback2 = &daEnBlockMain_c::OPhysicsCallback2; + physicsInfo.otherCallback3 = &daEnBlockMain_c::OPhysicsCallback3; + + physics.setup(this, &physicsInfo, 3, currentLayerID); + physics.flagsMaybe = 0x260; + physics.callback1 = &daEnBlockMain_c::PhysicsCallback1; + physics.callback2 = &daEnBlockMain_c::PhysicsCallback2; + physics.callback3 = &daEnBlockMain_c::PhysicsCallback3; + physics.addToList(); + + // Change State + doStateChange(&dSongBlock::StateID_Wait); + + return true; +} + + +int dSongBlock::onDelete() { + physics.removeFromList(); + return true; +} + + +int dSongBlock::onExecute() { + acState.execute(); + physics.update(); + blockUpdate(); + + // now check zone bounds based on state + if (acState.getCurrentState()->isEqual(&StateID_Wait)) { + checkZoneBoundaries(0); + } + + return true; +} + + +int dSongBlock::onDraw() { + + // tile.x = pos.x - 8; + // tile.y = -(16 + pos.y); + + matrix.translation(pos.x, pos.y+8.0, pos.z); + matrix.applyRotationYXZ(&rot.x, &rot.y, &rot.z); + + bodyModel.setDrawMatrix(matrix); + Vec myScale = (Vec){scale.x * 0.5, scale.y * 0.5, scale.z * 0.5}; + bodyModel.setScale(&myScale); + bodyModel.calcWorld(false); + + bodyModel.scheduleForDrawing(); + return true; +} + + +void dSongBlock::blockWasHit(bool isDown) { + pos.y = initialY; + + PlaySoundAsync(this, Notes[this->note-1]); + // Play an effect? + OSReport("Note is: %d", this->note); + dSingAlong::instance->RegisterNote(this->note); + OSReport("Note successfully registered"); + + physics.setup(this, &physicsInfo, 3, currentLayerID); + physics.addToList(); + + doStateChange(&StateID_Wait); +} + + +void dSongBlock::calledWhenUpMoveExecutes() { + this->bodyModel._vf1C(); + + if (this->glow.isAnimationDone()) { + this->glow.setCurrentFrame(0.0); } + + if (initialY >= pos.y) + blockWasHit(false); +} + +void dSongBlock::calledWhenDownMoveExecutes() { + this->bodyModel._vf1C(); + + if (this->glow.isAnimationDone()) { + this->glow.setCurrentFrame(0.0); } + + if (initialY <= pos.y) + blockWasHit(true); +} + + +void dSongBlock::beginState_Wait() {} +void dSongBlock::endState_Wait() {} +void dSongBlock::executeState_Wait() { + int result = blockResult(); + + if (result == 0) + return; + + if (result == 1) { + doStateChange(&daEnBlockMain_c::StateID_UpMove); + anotherFlag = 2; + isGroundPound = false; + } else { + doStateChange(&daEnBlockMain_c::StateID_DownMove); + anotherFlag = 1; + isGroundPound = true; + } +} + + diff --git a/src/bossCaptainBowser.cpp b/src/bossCaptainBowser.cpp index a8602c2..9157efb 100644 --- a/src/bossCaptainBowser.cpp +++ b/src/bossCaptainBowser.cpp @@ -318,8 +318,8 @@ int daCaptainBowser::onExecute() { if(this->isIntro == 0) { - float xmod = sin(this->sinTimer * 3.14 / 180.0) * 80.0; - float ymod = sin(this->sinTimer * 3.14 / 130.0) * 112.0; + float xmod = sin(this->sinTimer * 3.14 / 180.0) * 60.0; + float ymod = sin(this->sinTimer * 3.14 / 130.0) * 84.0; pos.x = ClassWithCameraInfo::instance->screenCentreX + 200.0 + xmod; pos.y = ClassWithCameraInfo::instance->screenCentreY - 180.0 + ymod; diff --git a/src/fix38.S b/src/fix38.S index cdbf3d0..b91c4b8 100644 --- a/src/fix38.S +++ b/src/fix38.S @@ -28,3 +28,7 @@ fix38WithJumpCoin: isExemptedActor: b continueFromFlagObjCheck +.global PreventW5Vine +PreventW5Vine: + li r3, 1 + blr \ No newline at end of file diff --git a/src/growup.s b/src/growup.s index 6e78e52..f9b06c9 100755 --- a/src/growup.s +++ b/src/growup.s @@ -441,6 +441,74 @@ ModifySpeedUpdatesA: # blr +NotTooBigToBurn: + lwz r4, 4(r5) + blr + +.global TooBigToBurn +TooBigToBurn: + + # Go back if Type is a Player, Yoshi, or World Map Shit + lhz r10, 8(r31) + cmpwi r10, 0x12 + blt NotTooBigToBurn + + # Go back if it's 60 + cmpwi r10, 60 + beq NotTooBigToBurn + + # Go back if SizerOn is 0 (off) + lis r10, SizerOn@h + ori r10, r10, SizerOn@l + lbz r10, 0(r10) + cmpwi r10, 0 + beq NotTooBigToBurn + + stb r30, 0x34(r1) + lwz r31, 0x4C(r1) + stb r29, 0x35(r1) + lwz r30, 0x48(r1) + lwz r29, 0x44(r1) + lwz r0, 0x54(r1) + mtlr r0 + addi r1, r1, 0x50 + blr + + +NotTooBigToFreeze: + lwz r0, 0x490(r3) + blr + +.global TooBigToFreeze +TooBigToFreeze: + + # Go back if Type is a Player, Yoshi, or World Map Shit + lhz r10, 8(r28) + cmpwi r10, 0x12 + blt NotTooBigToFreeze + + # Go back if it's 60 + cmpwi r10, 60 + beq NotTooBigToFreeze + + # Go back if SizerOn is 0 (off) + lis r10, SizerOn@h + ori r10, r10, SizerOn@l + lbz r10, 0(r10) + cmpwi r10, 0 + beq NotTooBigToFreeze + + lwz r31, 0x1C(r1) + li r3, 1 + lwz r30, 0x18(r1) + lwz r29, 0x14(r1) + lwz r28, 0x10(r1) + lwz r0, 0x24(r1) + mtlr r0 + addi r1, r1, 0x20 + blr + + CollisionNoChanges: stw r4, 4(r3) @@ -1276,6 +1344,32 @@ NormalGabonRockZorderDrop: blr +notRegularTeresa: + li r5, 1 + blr + +.global BooZOrderHack +BooZOrderHack: + + lhz r0, 8(r3) + cmplwi r0, 0xB0 + bne notRegularTeresa + + lfs f8, 0xB4(r30) + + lis r11, booZorderPlus@h + ori r11, r11, booZorderPlus@l + lfs f7, 0(r11) + + fadds f8, f8, f7 + + stfs f7, 0xB4(r30) + stfs f7, 0x990(r30) + stfs f7, 0x99C(r30) + + li r5, 1 + blr + .data @@ -1326,4 +1420,6 @@ ConvertFloat: Stupid: .string "Fucking Sprite was enlarged by %f times\n" .align 4 +booZorderPlus: + .float 5500.0 diff --git a/src/poweruphax.cpp b/src/poweruphax.cpp new file mode 100644 index 0000000..787e88f --- /dev/null +++ b/src/poweruphax.cpp @@ -0,0 +1,21 @@ +#include +#include + + +void ThwompHammer(dEn_c *thwomp, ActivePhysics *apThis, ActivePhysics *apOther) { + if (thwomp->name == 0x51) { + thwomp->dEn_c::collisionCat13_Hammer(apThis, apOther); + } + return; +} + +void BooHammer(dEn_c *boo, ActivePhysics *apThis, ActivePhysics *apOther) { + if (boo->name == 0xB0) { + boo->dEn_c::collisionCat13_Hammer(apThis, apOther); + } + return; +} + +void UrchinHammer(dEn_c *urchin, ActivePhysics *apThis, ActivePhysics *apOther) { + return; +} diff --git a/src/shyguy.cpp b/src/shyguy.cpp index f65ed17..8f311de 100644 --- a/src/shyguy.cpp +++ b/src/shyguy.cpp @@ -1050,15 +1050,13 @@ void daShyGuy::updateModelMatrices() { // Spike State /////////////// void daShyGuy::beginState_Spike() { - this->timer = 0; + this->timer = 80; spikeTurn = 0; } void daShyGuy::executeState_Spike() { if (this->timer == 0) { bindAnimChr_and_setUpdateRate("c18_OB_IDLE_R", 1, 0.0, 1.0); } - this->timer = this->timer + 1; - if (this->timer < 120) { // Always face Mario u8 facing = dSprite_c__getXDirectionOfFurthestPlayerRelativeToVEC3(this, this->pos); @@ -1162,6 +1160,9 @@ void daShyGuy::updateModelMatrices() { this->timer = 0; } } + + this->timer = this->timer + 1; + } void daShyGuy::endState_Spike() { } diff --git a/src/spritetex.S b/src/spritetex.S index 18a09e1..51e4cb7 100755 --- a/src/spritetex.S +++ b/src/spritetex.S @@ -415,6 +415,13 @@ TEX_Midway: b GetTexFilenameForR5 +.global TEX_ColorBlock +TEX_ColorBlock: + lwz r5, 4(r30) + srwi r5, r5, 28 + andi. r5, r5, 0xFF + b GetTexFilenameForR5 + .global TEX_Platforms @@ -503,6 +510,45 @@ TEX_Platform_ShifterSL: +# The small sand pieces that fall from the snowman +.global TEX_SnowmanSandToSnow +TEX_SnowmanSandToSnow: + + lwz r10, 4(r29) + srwi r10, r10, 24 + andi. r10, r10, 0xF + + cmpwi r10, 0x2 + bne SnowmanSandToSnow + + lis r4, snoweffectC@h + ori r4, r4, snoweffectC@l + blr + +SnowmanSandToSnow: + addi r4, r4, 0x792C + blr + + +# The small sand puffs that occur when it moves +.global TEX_SnowmanSandToSnowB +TEX_SnowmanSandToSnowB: + + lwz r10, 4(r30) + srwi r10, r10, 24 + andi. r10, r10, 0xF + + cmpwi r10, 0x2 + bne SnowmanSandToSnowB + + lis r4, snoweffectD@h + ori r4, r4, snoweffectD@l + blr + +SnowmanSandToSnowB: + addi r4, r4, 0x7944 + blr + .global TEX_PokeySnowman TEX_PokeySnowman: @@ -1192,6 +1238,14 @@ rockeffectB: .string "Wm_ob_cmnrockpiece" .align 4 +snoweffectD: + .string "Wm_ob_icebreaksmk" +.align 4 + +snoweffectC: + .string "Wm_ob_icewait" +.align 4 + ConvertFloat: diff --git a/src/summermodel.cpp b/src/summermodel.cpp index ddbc2e5..5a76549 100644 --- a/src/summermodel.cpp +++ b/src/summermodel.cpp @@ -186,57 +186,102 @@ int dMakeYourOwn::onCreate() { case 10: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim10", 1.0); // AnmChr name, animation speed + setupAnim("anim00", 1.0); // AnmChr name, animation speed break; // ends the case case 11: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim11", 1.0); // AnmChr name, animation speed + setupAnim("anim01", 1.0); // AnmChr name, animation speed break; // ends the case case 12: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim12", 1.0); // AnmChr name, animation speed + setupAnim("anim02", 1.0); // AnmChr name, animation speed break; // ends the case case 13: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim13", 1.0); // AnmChr name, animation speed + setupAnim("anim03", 1.0); // AnmChr name, animation speed break; // ends the case case 14: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim14", 1.0); // AnmChr name, animation speed + setupAnim("anim04", 1.0); // AnmChr name, animation speed break; // ends the case case 15: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! - setupModel("morton", "g3d/model0.brres", "model0"); // arc name (no .arc), brres name, model name + setupModel("morton", "g3d/model1.brres", "model1"); // arc name (no .arc), brres name, model name + SetupTextures_Item(&bodyModel, 0); + this->pos.z = 3300.0; + + setupAnim("anim05", 1.0); // AnmChr name, animation speed + break; // ends the case + + case 16: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! + + setupModel("morton", "g3d/model3.brres", "model3"); // arc name (no .arc), brres name, model name + SetupTextures_Item(&bodyModel, 0); + this->pos.z = 3300.0; + + setupAnim("anim01", 1.0); // AnmChr name, animation speed + break; // ends the case + + case 17: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! + + setupModel("morton", "g3d/model3.brres", "model3"); // arc name (no .arc), brres name, model name + SetupTextures_Item(&bodyModel, 0); + this->pos.z = 3300.0; + + setupAnim("anim02", 1.0); // AnmChr name, animation speed + break; // ends the case + + case 18: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! + + setupModel("morton", "g3d/model3.brres", "model3"); // arc name (no .arc), brres name, model name SetupTextures_Item(&bodyModel, 0); this->pos.z = 3300.0; - setupAnim("anim15", 1.0); // AnmChr name, animation speed + setupAnim("anim03", 1.0); // AnmChr name, animation speed break; // ends the case + + case 19: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! + + setupModel("morton", "g3d/model3.brres", "model3"); // arc name (no .arc), brres name, model name + SetupTextures_Item(&bodyModel, 0); + this->pos.z = 3300.0; + + setupAnim("anim04", 1.0); // AnmChr name, animation speed + break; // ends the case + + case 20: // If nyb 12 is 1, it'll load this model. Add more cases for each model you'd like! + + setupModel("morton", "g3d/model3.brres", "model3"); // arc name (no .arc), brres name, model name + SetupTextures_Item(&bodyModel, 0); + this->pos.z = 3300.0; + + setupAnim("anim05", 1.0); // AnmChr name, animation speed + break; // ends the case } diff --git a/summerhax.yaml b/summerhax.yaml index b943cb4..2f24d33 100644 --- a/summerhax.yaml +++ b/summerhax.yaml @@ -1,16 +1,200 @@ -source_files: [../src/summermodel.cpp] +source_files: [../src/summermodel.cpp, ../src/fix38.S] hooks: - {name: RemoveTitleReplay, addr_pal: 0x80781FBC, type: patch, data: '60000000 60000000 60000000'} - {name: RemoveToadHouseMsg1, addr_pal: 0x808FB974, type: patch, data: '60000000'} - {name: RemoveToadHouseMsg2, addr_pal: 0x808FB968, type: patch, data: '60000000'} -- {name: UpdateChompModelInfo, addr_pal: 0x8030B998, type: patch, data: '0200BC0000000000100000001000000000000000000000080000000800000000000000000000080000'} +- {name: UpdateChompModelInfo, addr_pal: 0x8030B998, type: patch, data: '00BC0000000000100000001000000000000000000000080000000800000000000000000000000000'} + +- name: Fix38WithJumpCoin + src_addr_pal: 0x807EBC5C + type: branch_insn + branch_type: b + target_func: 'fix38WithJumpCoin' + +- name: PreventW5Vine + type: patch + addr_pal: 0x809882A4 + data: '808FCEF0' + +- name: PreventW5VineSoundA + type: patch + addr_pal: 0x80803144 + data: '38800305' + +- name: PreventW5VineSoundB + type: patch + addr_pal: 0x80803344 + data: '38800306' - name: BuildYourOwnModel type: add_func_pointer - src_addr_pal: 0x80988574 + src_addr_pal: 0x8098FEAC target_func: 'dMakeYourOwn::build(void)' - name: UpdateModelSpriteInfo type: patch addr_pal: 0x8030A4F8 - data: '029E 0000 00000000 00000000 FFFFFC00 FFFFFC00 00000400 00000400 0400 0400 0000 0000 0008 0000' + data: '0010 0000 00000000 00000000 FFFFFF80 FFFFFF80 00000080 00000080 0080 0080 0000 0000 0000 0000' + +- name: FixMemoryLeaks + type: patch + addr_pal: 0x800E53E0 + data: '4E800020' + +- name: 1-1 BG Fix + type: patch + addr_pal: 0x801180AC + data: '38000003' + +- name: PipeFix_NodeCalc + type: patch + addr_pal: 0x800508F8 + data: 'A01E0010540007FF41820014A0E300043807FFFEB01F042C4800000C38000001B01F042CA0A30002A89F042C80C6003C7C052214540020367CA60214A8850002' + +- name: PipeFix_ExitPatch1 + type: patch + addr_pal: 0x80050A5C + data: '88030013' + +- name: PipeFix_ExitPatch2 + type: patch + addr_pal: 0x80050A60 + data: '2C000000' + +- name: PipeFix_ExitPatch3 + type: patch + addr_pal: 0x80050A68 + data: '2C000001' + +- name: PipeFix_ExitPatch4 + type: patch + addr_pal: 0x80050A70 + data: '2C000002' + +- name: PipeFix_ExitPatch5 + type: patch + addr_pal: 0x80050A78 + data: '2C000003' + +- name: PipeFix_ExitPatch6 + type: patch + addr_pal: 0x80050A88 + data: '389F065C' + +- name: TileGodLayerFix + type: patch + addr_pal: 0x807E16D0 + data: '88D2038F' + +- name: EN_BIGPILEFix + type: patch + addr_pal: 0x8001F93C + data: '48000014' + +- name: StarsDontKillSpikesUD + type: patch + addr_pal: 0x80AFF4D8 + data: '809A5490' + +- name: StarsDontKillSpikesD + type: patch + addr_pal: 0x80AFF784 + data: '809A5490' + +- name: StarsDontKillSpikesU + type: patch + addr_pal: 0x80AFFA30 + data: '809A5490' + +- name: StarsDontKillSpikesLR + type: patch + addr_pal: 0x80AFFCDC + data: '809A5490' + +- name: StarsDontKillSpikesR + type: patch + addr_pal: 0x80AFFF88 + data: '809A5490' + +- name: StarsDontKillSpikesL + type: patch + addr_pal: 0x80B00234 + data: '809A5490' + + +- name: WaterEffectsWm_ob_sandpillar02 + type: patch + addr_pal: 0x8095E0DC + data: '576D5F6D725F7761746572776176655F696E00' # Wm_mr_waterwave_in + +- name: WaterEffectsWm_ob_sandpillar01 + type: patch + addr_pal: 0x8095E0F0 + data: '576D5F6D725F7761746572776176655F6F757400' # Wm_mr_waterwave_out + +- name: WaterEffectsWm_ob_spillarsign01 + type: patch + addr_pal: 0x8095DE34 + data: '576D5F656E5F776174657273706C61736800' # Wm_en_watersplash + +- name: WaterEffectsWm_ob_spillarsign02 + type: patch + addr_pal: 0x8095DE48 + data: '576D5F656E5F62757273745F7761746572303200' # Wm_en_burst_water02 + +- name: WaterEffectsWm_en_sphitsmoke + type: patch + addr_pal: 0x8095DE10 + data: '576D5F6D725F77666C6F617473706C61736800' # Wm_mr_wfloatsplash + + + +# - name: NoSandEffectsA +# type: patch +# addr_pal: 0x80803124 +# data: '60000000' + +# - name: NoSandEffectsB +# type: patch +# addr_pal: 0x80803150 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsC +# type: patch +# addr_pal: 0x80803350 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsD +# type: patch +# addr_pal: 0x8080337C +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsE +# type: patch +# addr_pal: 0x808032DC +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsG +# type: patch +# addr_pal: 0x808034CC +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsH +# type: patch +# addr_pal: 0x808034F8 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsI +# type: patch +# addr_pal: 0x80803524 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsJ +# type: patch +# addr_pal: 0x808038D8 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' + +# - name: NoSandEffectsK +# type: patch +# addr_pal: 0x80803904 +# data: '60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000 60000000' diff --git a/tools/mapfile_tool.py b/tools/mapfile_tool.py index 540d3e0..92e53ad 100755 --- a/tools/mapfile_tool.py +++ b/tools/mapfile_tool.py @@ -185,6 +185,7 @@ def fix_offs_jpn_v1(offs): if offs >= 0x8010F430 and offs <= 0xDEADBEEF: return offs - 0x330 + return offs import yaml @@ -193,7 +194,8 @@ original = 'pal' fix_for = { 'pal2': fix_offs_ntsc_v1, 'ntsc': fix_offs_ntsc_v1, - 'ntsc2': fix_offs_ntsc_v2 + 'ntsc2': fix_offs_ntsc_v2, + 'jpn': fix_offs_jpn_v1 } def do_mapfile(src, dest, fix_offset): @@ -265,10 +267,12 @@ def main(): do_mapfile('kamek_pal.x', 'kamek_pal2.x', fix_offs_pal_v2) do_mapfile('kamek_pal.x', 'kamek_ntsc.x', fix_offs_ntsc_v1) do_mapfile('kamek_pal.x', 'kamek_ntsc2.x', fix_offs_ntsc_v2) + do_mapfile('kamek_pal.x', 'kamek_jpn.x', fix_offs_jpn_v1) already_done = set() do_project('NewerProject.yaml', already_done) do_project('NewerProjectKP.yaml', already_done) + do_project('SummerSun.yaml', already_done) do_module('anotherhax.yaml', 'processed/anotherhax.yaml') -- cgit v1.2.3