summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NewerProject.yaml1
-rw-r--r--NewerProjectKP.yaml1
-rw-r--r--SummerSun.yaml1
-rw-r--r--bugfixes.yaml30
-rw-r--r--growup.yaml30
-rw-r--r--kamek_configs.yaml10
-rw-r--r--kamek_jpn.x1523
-rwxr-xr-xmakeSummerSun8
-rw-r--r--poweruphax.yaml21
-rw-r--r--singAlong.yaml39
-rw-r--r--spritetex.yaml30
-rw-r--r--src/bonusRoom.cpp708
-rw-r--r--src/bossCaptainBowser.cpp4
-rw-r--r--src/fix38.S4
-rwxr-xr-xsrc/growup.s96
-rw-r--r--src/poweruphax.cpp21
-rw-r--r--src/shyguy.cpp7
-rwxr-xr-xsrc/spritetex.S54
-rw-r--r--src/summermodel.cpp69
-rw-r--r--summerhax.yaml192
-rwxr-xr-xtools/mapfile_tool.py6
21 files changed, 2818 insertions, 37 deletions
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 <common.h>
+#include <game.h>
+#include <g3dhax.h>
+#include <sfx.h>
+#include <stage.h>
+
+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<dSingAlong> 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 <common.h>
+#include <game.h>
+
+
+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')