diff options
| author | Colin Noga <Tempus@chronometry.ca> | 2012-06-24 19:34:56 -0500 | 
|---|---|---|
| committer | Colin Noga <Tempus@chronometry.ca> | 2012-06-24 19:34:56 -0500 | 
| commit | 10fa535e98f3e1043b04895aaab2e916549fcf69 (patch) | |
| tree | 7dda2c5658961801414f2eef9e9137efadd26d78 | |
| parent | fd286ae035b52d3d78e234d9f91b6610ae30def6 (diff) | |
| download | kamek-10fa535e98f3e1043b04895aaab2e916549fcf69.tar.gz kamek-10fa535e98f3e1043b04895aaab2e916549fcf69.zip  | |
Lots of bug fixes, bowser improvements, summer sun hacks, JPN support, etc.
Diffstat (limited to '')
| -rw-r--r-- | NewerProject.yaml | 1 | ||||
| -rw-r--r-- | NewerProjectKP.yaml | 1 | ||||
| -rw-r--r-- | SummerSun.yaml | 1 | ||||
| -rw-r--r-- | bugfixes.yaml | 30 | ||||
| -rw-r--r-- | growup.yaml | 30 | ||||
| -rw-r--r-- | kamek_configs.yaml | 10 | ||||
| -rw-r--r-- | kamek_jpn.x | 1523 | ||||
| -rwxr-xr-x | makeSummerSun | 8 | ||||
| -rw-r--r-- | poweruphax.yaml | 21 | ||||
| -rw-r--r-- | singAlong.yaml | 39 | ||||
| -rw-r--r-- | spritetex.yaml | 30 | ||||
| -rw-r--r-- | src/bonusRoom.cpp | 708 | ||||
| -rw-r--r-- | src/bossCaptainBowser.cpp | 4 | ||||
| -rw-r--r-- | src/fix38.S | 4 | ||||
| -rwxr-xr-x | src/growup.s | 96 | ||||
| -rw-r--r-- | src/poweruphax.cpp | 21 | ||||
| -rw-r--r-- | src/shyguy.cpp | 7 | ||||
| -rwxr-xr-x | src/spritetex.S | 54 | ||||
| -rw-r--r-- | src/summermodel.cpp | 69 | ||||
| -rw-r--r-- | summerhax.yaml | 192 | ||||
| -rwxr-xr-x | tools/mapfile_tool.py | 6 | 
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')
  | 
