diff options
| author | Colin Noga <Tempus@Spectrum-Song.local> | 2011-08-14 13:38:04 -0500 | 
|---|---|---|
| committer | Colin Noga <Tempus@Spectrum-Song.local> | 2011-08-14 13:38:04 -0500 | 
| commit | 74a7d023469eb0a5a2dc713c74709b11e1815b8a (patch) | |
| tree | 017199545fe6110e2e700907ea393a6654865cb8 | |
| parent | ead037af2d2665e94ed8d804a1e220c47ba54db9 (diff) | |
| parent | 4d482b80241de4512b68bc160dfc29b7e521134d (diff) | |
| download | kamek-74a7d023469eb0a5a2dc713c74709b11e1815b8a.tar.gz kamek-74a7d023469eb0a5a2dc713c74709b11e1815b8a.zip  | |
Merge branch 'level-select' of treeki:newergit/Kamek into level-select
Diffstat (limited to '')
| -rw-r--r-- | NewerProject.yaml | 1 | ||||
| -rw-r--r-- | include/game.h | 58 | ||||
| -rw-r--r-- | kamek_ntsc.x | 278 | ||||
| -rw-r--r-- | kamek_ntsc2.x | 278 | ||||
| -rw-r--r-- | kamek_pal.x | 10 | ||||
| -rw-r--r-- | kamek_pal2.x | 278 | ||||
| -rw-r--r-- | poweruphax.yaml | 2 | ||||
| -rw-r--r-- | randtilegen.rb | 376 | ||||
| -rw-r--r-- | randtiles.yaml | 31 | ||||
| -rw-r--r-- | src/poweruphax.S | 38 | ||||
| -rw-r--r-- | src/randtiles.cpp | 215 | ||||
| -rw-r--r-- | src/randtiles.h | 63 | ||||
| -rw-r--r-- | tools/hooks.pyc | bin | 5873 -> 5873 bytes | 
13 files changed, 1505 insertions, 123 deletions
diff --git a/NewerProject.yaml b/NewerProject.yaml index 560b015..0441d98 100644 --- a/NewerProject.yaml +++ b/NewerProject.yaml @@ -10,6 +10,7 @@ modules:  #  - processed/gakenoko.yaml    - processed/poweruphax.yaml  #  - processed/heapbar.yaml +  - processed/randtiles.yaml    - processed/tilegod.yaml    - processed/linegod.yaml    - processed/tilesetfixer.yaml diff --git a/include/game.h b/include/game.h index 8bc0dc2..7412762 100644 --- a/include/game.h +++ b/include/game.h @@ -40,6 +40,9 @@ inline void *GetDVDClass2() {  void *DVD_GetFile(void *dvdclass2, const char *arc, const char *file);  void *DVD_GetFile(void *dvdclass2, const char *arc, const char *file, u32 *length); +int MakeRandomNumber(int count); +int MakeRandomNumberForTiles(int count); +  extern int Player_Active[4];  extern int Player_ID[4]; @@ -2034,5 +2037,60 @@ namespace m2d {  } + +/* Tilemap related stuff */ +class TilemapClass { +	public: +		virtual ~TilemapClass(); + +		u16 *allocatedBlocks[256]; +		u32 _404; + +		u8 blockLookup[2048]; +		 +		u16 blockCount; + +		u32 _C0C; +		u32 ts1ID, ts2ID, ts3ID, layerID, areaID, frmHeap, is2Castle; + +		// Only the public API is listed +		u16 *getPointerToTile(int x, int y, u32 *blockNum = 0, bool unkBool = 0); +		// TODO: more? +}; + +class BGDatClass { +	public: +		BGDatClass(); +		virtual ~BGDatClass(); + +		u8 *bgData[4][3]; +		TilemapClass *tilemaps[4][3]; +		u8 *tsObjIndexData[4][4]; +		u8 *tsObjData[4][4]; +		char tsNames[4][4][0x20]; +		// this is fucked up! +		// the parent heap is frmHeaps[0][0] +		// each tileset's heap is frmHeaps[AREA][LAYER+1] +		void *frmHeaps[4][4]; + +		static BGDatClass *instance; // 8042A0D0 + +		// I've only listed the public API because other stuff isn't really needed atm. +		const char *getTilesetName(int area, int number); +		// TODO: more? +}; + +struct BGRender { +	u8 unk[0xC00]; +	u8 *objectData; +	u8 _C04, _C05; +	u16 _C06, _C08; +	u16 blockNumber; +	u16 curX, curY; +	u16 tileToPlace; +	u16 objDataOffset, objType, objX, objY, objWidth, objHeight; +	u16 tileNumberWithinBlock, areaID; +}; +  #endif diff --git a/kamek_ntsc.x b/kamek_ntsc.x index 45db184..ab702c3 100644 --- a/kamek_ntsc.x +++ b/kamek_ntsc.x @@ -6,6 +6,7 @@ OUTPUT_FORMAT ("binary")  SECTIONS {  	GetSpecificPlayerActor = 0x8005F900; +	Actor_SearchByID = 0x80162D00;  	TimeStopFlag = 0x80429CFA;  	TimerBranch = 0x800E39C8;  	MarioDescentRate = 0x8042B864; @@ -16,6 +17,8 @@ SECTIONS {  	AlwaysDrawFlag = 0x80064540;  	AlwaysDrawBranch = 0x80064544;  	GenerateRandomNumber = 0x800B2EE0; +	OneofManySoundPlayers = 0x800CE8C0; +	BombExplodeState = 0x80B12A68;  	_savefpr_14 = 0x802DCCA8;  	_savefpr_15 = 0x802DCCAC; @@ -101,6 +104,9 @@ SECTIONS {  	__construct_new_array = 0x802DC7E0;  	__destroy_new_array = 0x802DCB10; +	__register_global_object = 0x802DC780; +	__ptmf_scall = 0x802DCBFC; +  	setup__13FunctionChainFPPFPv_bUs = 0x8015F600; @@ -113,16 +119,216 @@ SECTIONS {  	GetExplanationString__7dBase_cFv = 0x8006C660; +	__vt__15daEnBlockMain_c = 0x80301EA8; +	__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; +	PhysicsCallback2__15daEnBlockMain_c = 0x80021170; +	PhysicsCallback3__15daEnBlockMain_c = 0x800211A0; +	OPhysicsCallback1__15daEnBlockMain_c = 0x80020BF0; +	OPhysicsCallback2__15daEnBlockMain_c = 0x80020E70; +	OPhysicsCallback3__15daEnBlockMain_c = 0x80021010; +	StateID_UpMove__15daEnBlockMain_c = 0x80352A34; +	StateID_DownMove__15daEnBlockMain_c = 0x80352A74; +	StateID_DownMoveEnd__15daEnBlockMain_c = 0x80352AB4; +	StateID_UpMove_Diff__15daEnBlockMain_c = 0x80352AF4; +	StateID_DownMove_Diff__15daEnBlockMain_c = 0x80352B34; +	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74; + +	__ct__5dEn_cFv = 0x80094E80; +	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_cFP7Point2d = 0x800973F0; +	_vfD0__5dEn_cFP7Point2d = 0x800974F0; +	doStateChange__5dEn_cFP9StateBase = 0x800A7DF0; +	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; +	_vf22C__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; +	_vf250__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; + +	_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; +	_vf68__13dStageActor_cFv = 0x8001D210; +	_vf6C__13dStageActor_cFv = 0x8001D200; +	_vf70__13dStageActor_cFv = 0x80065620; +	_vf74__13dStageActor_cFv = 0x8001D1F0; +	_vf78__13dStageActor_cFv = 0x80065820; +	_vf7C__13dStageActor_cFv = 0x8001D1E0; +	_vf88__13dStageActor_cFv = 0x80065860; +	_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; +	_vfB0__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_cFP7Point2d = 0x80065CC0; +	checkZoneBoundaries__13dStageActor_cFUi = 0x80064F50; +	create__13dStageActor_cF6ActorsUiP7Point3dP6S16VecUc = 0x80064610; +  	__ct__8dScene_cFv = 0x800E19B0;  	__dt__8dScene_cFv = 0x800E1A20;  	beforeCreate__8dScene_cFv = 0x800E1AA0; -	afterCreate__8dScene_cFv = 0x800E1AE0; +	afterCreate__8dScene_cFi = 0x800E1AE0;  	beforeDelete__8dScene_cFv = 0x800E1B50; -	afterDelete__8dScene_cFv = 0x800E1B80; +	afterDelete__8dScene_cFi = 0x800E1B80;  	beforeExecute__8dScene_cFv = 0x800E1BE0; -	afterExecute__8dScene_cFv = 0x800E1D20; +	afterExecute__8dScene_cFi = 0x800E1D20;  	beforeDraw__8dScene_cFv = 0x800E1D70; -	afterDraw__8dScene_cFv = 0x800E1DA0; +	afterDraw__8dScene_cFi = 0x800E1DA0;  	__ct__8dActor_cFv = 0x8006C6D0;  	__dt__8dActor_cFv = 0x8006C7F0; @@ -130,13 +336,13 @@ SECTIONS {  	__ct__7dBase_cFv = 0x8006C420;  	__dt__7dBase_cFv = 0x8006C490;  	beforeCreate__7dBase_cFv = 0x8006C540; -	afterCreate__7dBase_cFv = 0x8006C570; +	afterCreate__7dBase_cFi = 0x8006C570;  	beforeDelete__7dBase_cFv = 0x8006C580; -	afterDelete__7dBase_cFv = 0x8006C5B0; +	afterDelete__7dBase_cFi = 0x8006C5B0;  	beforeExecute__7dBase_cFv = 0x8006C5C0; -	afterExecute__7dBase_cFv = 0x8006C600; +	afterExecute__7dBase_cFi = 0x8006C600;  	beforeDraw__7dBase_cFv = 0x8006C610; -	afterDraw__7dBase_cFv = 0x8006C650; +	afterDraw__7dBase_cFi = 0x8006C650;  	onDraw__7fBase_cFv = 0x801621D0; @@ -145,6 +351,46 @@ SECTIONS {  	_vf58__8dActor_cFv = 0x8001D1C0;  	_vf5C__8dActor_cFv = 0x8001D1B0; +	__ct__9StateBaseFPCc = 0x8015F7C0; +	__dt__9StateBaseFv = 0x8015F800; +	isInvalid__9StateBaseFv = 0x8015F840; +	isEqualNotUsedForSomeReason__9StateBaseFP9StateBase = 0x8015F850; +	isEqual__9StateBaseFP9StateBase = 0x8015F8C0; +	isNotEqual__9StateBaseFP9StateBase = 0x8015F8D0; +	getName__9StateBaseFv = 0x8015F920; +	getID__9StateBaseFv = 0x8015F930; + +	__ct__10dFlagMgr_c = 0x800E3AE0; +	setup__10dFlagMgr_cFb = 0x800E3BA0; +	applyAndClearAllTimedActions__10dFlagMgr_cFv = 0x800E3F20; +	execute__10dFlagMgr_cFv = 0x800E4010; +	set__10dFlagMgr_cFUcibbbUi = 0x800E41C0; +	findLowestFlagInSet__10dFlagMgr_cFUiUl = 0x800E4470; +	setSpecial__10dFlagMgr_cFUcffUcUiUl = 0x800E4550; +	get8__10dFlagMgr_cFUc = 0x800E4590; +	get108__10dFlagMgr_cFUc = 0x800E45A0; +	get208__10dFlagMgr_cFUc = 0x800E45B0; +	get248__10dFlagMgr_cFUc = 0x800E45C0; +	get448__10dFlagMgr_cFUc = 0x800E45E0; +	instance__10dFlagMgr_c = 0x8042A078; + + +	__ct__7PhysicsFv = 0x8007F7A0; +	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10; +	addToList__7PhysicsFv = 0x8007F900; +	removeFromList__7PhysicsFv = 0x8007F950; +	update__7PhysicsFv = 0x8007FDA0; + +	getTileRendererList__7dBgGm_cFi = 0x80078520; + +	add__Q212TileRenderer4ListFP12TileRenderer = 0x80014820; +	remove__Q212TileRenderer4ListFP12TileRenderer = 0x80014860; + +	__ct__12TileRendererFv = 0x800145B0; +	__dt__12TileRendererFv = 0x800145F0; +	setPosition__12TileRendererFfff = 0x800146B0; +	setVars__12TileRendererFf = 0x800146D0; +  	__ct__21dPlayerModelHandler_cFUc = 0x800D6CC0;  	loadModel__21dPlayerModelHandler_cFUcii = 0x800D6DF0;  	setSRT__21dPlayerModelHandler_cF7Point3d6S16Vec7Point3d = 0x800D6F40; @@ -277,8 +523,13 @@ SECTIONS {  	GameHeaps = 0x80377C48;  	BGDatClass = 0x80429DF0; +	instance__10BGDatClass = 0x80429DF0;  	GetTilesetName__FPvii = 0x800813F0; +	getTilesetName__10BGDatClassFii = 0x800813F0; + +	getPointerToTile__12TilemapClassFiiPUib = 0x80083B40; +  	IsWideScreen__Fv = 0x800B54B0;  	Player_Active = 0x80354E50; @@ -379,6 +630,7 @@ SECTIONS {  	strncpy = 0x802E19F8;  	strcmp = 0x802E1AB4;  	sprintf = 0x802E17DC; +	strrchr = 0x802E1C40;  	wcslen = 0x802E441C; @@ -692,6 +944,7 @@ SECTIONS {  	dSys_c__RootHeapMEM2 = 0x8042A094;  	BG_GM_ptr = 0x80429DD0; +	instance__7dBgGm_c = 0x80429DD0;  	BgActorDefs = 0x80429DDC; @@ -735,6 +988,8 @@ SECTIONS {  	continuePlumberSetPowerupTextureDebug = 0x800CA5C4; +	returnFromPowerupSoundChange = 0x801412FC; +  	ExitFromTileGodHack = 0x807E1684;  	SomeTable_802F5440 = 0x802F5140; @@ -753,6 +1008,9 @@ SECTIONS {  	GetRandomSeed = 0x800B2EC0;  	RandomSeed = 0x80429F44; +	MakeRandomNumber__Fi = 0x800B2EE0; +	MakeRandomNumberForTiles__Fi = 0x801613A0; +  	StrangeReplayValue1 = 0x8042792E;  	StrangeReplayValue2 = 0x80429D69;  	StrangeReplayValue3 = 0x80429D6A; @@ -768,13 +1026,16 @@ SECTIONS {  	SomeWipeClass = 0x8042A440;  	QueryGlobal5758 = 0x800B3B50; +  	.text : {  		FILL (0)  		__text_start = . ;  		*(.init)  		*(.text) +		__ctor_loc = . ;  		*(.ctors) +		__ctor_end = . ;  		*(.dtors)  		*(.rodata)  		/**(.sdata)*/ @@ -786,4 +1047,3 @@ SECTIONS {  		__text_end  = . ;  	}  } - diff --git a/kamek_ntsc2.x b/kamek_ntsc2.x index a35703f..f803db3 100644 --- a/kamek_ntsc2.x +++ b/kamek_ntsc2.x @@ -6,6 +6,7 @@ OUTPUT_FORMAT ("binary")  SECTIONS {  	GetSpecificPlayerActor = 0x8005F900; +	Actor_SearchByID = 0x80162D00;  	TimeStopFlag = 0x80429CFA;  	TimerBranch = 0x800E39C8;  	MarioDescentRate = 0x8042B864; @@ -16,6 +17,8 @@ SECTIONS {  	AlwaysDrawFlag = 0x80064540;  	AlwaysDrawBranch = 0x80064544;  	GenerateRandomNumber = 0x800B2EE0; +	OneofManySoundPlayers = 0x800CE8C0; +	BombExplodeState = 0x80B12A88;  	_savefpr_14 = 0x802DCCA8;  	_savefpr_15 = 0x802DCCAC; @@ -101,6 +104,9 @@ SECTIONS {  	__construct_new_array = 0x802DC7E0;  	__destroy_new_array = 0x802DCB10; +	__register_global_object = 0x802DC780; +	__ptmf_scall = 0x802DCBFC; +  	setup__13FunctionChainFPPFPv_bUs = 0x8015F600; @@ -113,16 +119,216 @@ SECTIONS {  	GetExplanationString__7dBase_cFv = 0x8006C660; +	__vt__15daEnBlockMain_c = 0x80301EA8; +	__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; +	PhysicsCallback2__15daEnBlockMain_c = 0x80021170; +	PhysicsCallback3__15daEnBlockMain_c = 0x800211A0; +	OPhysicsCallback1__15daEnBlockMain_c = 0x80020BF0; +	OPhysicsCallback2__15daEnBlockMain_c = 0x80020E70; +	OPhysicsCallback3__15daEnBlockMain_c = 0x80021010; +	StateID_UpMove__15daEnBlockMain_c = 0x80352A34; +	StateID_DownMove__15daEnBlockMain_c = 0x80352A74; +	StateID_DownMoveEnd__15daEnBlockMain_c = 0x80352AB4; +	StateID_UpMove_Diff__15daEnBlockMain_c = 0x80352AF4; +	StateID_DownMove_Diff__15daEnBlockMain_c = 0x80352B34; +	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0x80352B74; + +	__ct__5dEn_cFv = 0x80094E80; +	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_cFP7Point2d = 0x800973F0; +	_vfD0__5dEn_cFP7Point2d = 0x800974F0; +	doStateChange__5dEn_cFP9StateBase = 0x800A7DF0; +	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; +	_vf22C__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; +	_vf250__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; + +	_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; +	_vf68__13dStageActor_cFv = 0x8001D210; +	_vf6C__13dStageActor_cFv = 0x8001D200; +	_vf70__13dStageActor_cFv = 0x80065620; +	_vf74__13dStageActor_cFv = 0x8001D1F0; +	_vf78__13dStageActor_cFv = 0x80065820; +	_vf7C__13dStageActor_cFv = 0x8001D1E0; +	_vf88__13dStageActor_cFv = 0x80065860; +	_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; +	_vfB0__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_cFP7Point2d = 0x80065CC0; +	checkZoneBoundaries__13dStageActor_cFUi = 0x80064F50; +	create__13dStageActor_cF6ActorsUiP7Point3dP6S16VecUc = 0x80064610; +  	__ct__8dScene_cFv = 0x800E19B0;  	__dt__8dScene_cFv = 0x800E1A20;  	beforeCreate__8dScene_cFv = 0x800E1AA0; -	afterCreate__8dScene_cFv = 0x800E1AE0; +	afterCreate__8dScene_cFi = 0x800E1AE0;  	beforeDelete__8dScene_cFv = 0x800E1B50; -	afterDelete__8dScene_cFv = 0x800E1B80; +	afterDelete__8dScene_cFi = 0x800E1B80;  	beforeExecute__8dScene_cFv = 0x800E1BE0; -	afterExecute__8dScene_cFv = 0x800E1D20; +	afterExecute__8dScene_cFi = 0x800E1D20;  	beforeDraw__8dScene_cFv = 0x800E1D70; -	afterDraw__8dScene_cFv = 0x800E1DA0; +	afterDraw__8dScene_cFi = 0x800E1DA0;  	__ct__8dActor_cFv = 0x8006C6D0;  	__dt__8dActor_cFv = 0x8006C7F0; @@ -130,13 +336,13 @@ SECTIONS {  	__ct__7dBase_cFv = 0x8006C420;  	__dt__7dBase_cFv = 0x8006C490;  	beforeCreate__7dBase_cFv = 0x8006C540; -	afterCreate__7dBase_cFv = 0x8006C570; +	afterCreate__7dBase_cFi = 0x8006C570;  	beforeDelete__7dBase_cFv = 0x8006C580; -	afterDelete__7dBase_cFv = 0x8006C5B0; +	afterDelete__7dBase_cFi = 0x8006C5B0;  	beforeExecute__7dBase_cFv = 0x8006C5C0; -	afterExecute__7dBase_cFv = 0x8006C600; +	afterExecute__7dBase_cFi = 0x8006C600;  	beforeDraw__7dBase_cFv = 0x8006C610; -	afterDraw__7dBase_cFv = 0x8006C650; +	afterDraw__7dBase_cFi = 0x8006C650;  	onDraw__7fBase_cFv = 0x801621D0; @@ -145,6 +351,46 @@ SECTIONS {  	_vf58__8dActor_cFv = 0x8001D1C0;  	_vf5C__8dActor_cFv = 0x8001D1B0; +	__ct__9StateBaseFPCc = 0x8015F7C0; +	__dt__9StateBaseFv = 0x8015F800; +	isInvalid__9StateBaseFv = 0x8015F840; +	isEqualNotUsedForSomeReason__9StateBaseFP9StateBase = 0x8015F850; +	isEqual__9StateBaseFP9StateBase = 0x8015F8C0; +	isNotEqual__9StateBaseFP9StateBase = 0x8015F8D0; +	getName__9StateBaseFv = 0x8015F920; +	getID__9StateBaseFv = 0x8015F930; + +	__ct__10dFlagMgr_c = 0x800E3AE0; +	setup__10dFlagMgr_cFb = 0x800E3BA0; +	applyAndClearAllTimedActions__10dFlagMgr_cFv = 0x800E3F20; +	execute__10dFlagMgr_cFv = 0x800E4010; +	set__10dFlagMgr_cFUcibbbUi = 0x800E41C0; +	findLowestFlagInSet__10dFlagMgr_cFUiUl = 0x800E4470; +	setSpecial__10dFlagMgr_cFUcffUcUiUl = 0x800E4550; +	get8__10dFlagMgr_cFUc = 0x800E4590; +	get108__10dFlagMgr_cFUc = 0x800E45A0; +	get208__10dFlagMgr_cFUc = 0x800E45B0; +	get248__10dFlagMgr_cFUc = 0x800E45C0; +	get448__10dFlagMgr_cFUc = 0x800E45E0; +	instance__10dFlagMgr_c = 0x8042A078; + + +	__ct__7PhysicsFv = 0x8007F7A0; +	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0x8007FB10; +	addToList__7PhysicsFv = 0x8007F900; +	removeFromList__7PhysicsFv = 0x8007F950; +	update__7PhysicsFv = 0x8007FDA0; + +	getTileRendererList__7dBgGm_cFi = 0x80078520; + +	add__Q212TileRenderer4ListFP12TileRenderer = 0x80014820; +	remove__Q212TileRenderer4ListFP12TileRenderer = 0x80014860; + +	__ct__12TileRendererFv = 0x800145B0; +	__dt__12TileRendererFv = 0x800145F0; +	setPosition__12TileRendererFfff = 0x800146B0; +	setVars__12TileRendererFf = 0x800146D0; +  	__ct__21dPlayerModelHandler_cFUc = 0x800D6CC0;  	loadModel__21dPlayerModelHandler_cFUcii = 0x800D6DF0;  	setSRT__21dPlayerModelHandler_cF7Point3d6S16Vec7Point3d = 0x800D6F40; @@ -277,8 +523,13 @@ SECTIONS {  	GameHeaps = 0x80377C48;  	BGDatClass = 0x80429DF0; +	instance__10BGDatClass = 0x80429DF0;  	GetTilesetName__FPvii = 0x800813F0; +	getTilesetName__10BGDatClassFii = 0x800813F0; + +	getPointerToTile__12TilemapClassFiiPUib = 0x80083B40; +  	IsWideScreen__Fv = 0x800B54B0;  	Player_Active = 0x80354E50; @@ -379,6 +630,7 @@ SECTIONS {  	strncpy = 0x802E19F8;  	strcmp = 0x802E1AB4;  	sprintf = 0x802E17DC; +	strrchr = 0x802E1C40;  	wcslen = 0x802E441C; @@ -692,6 +944,7 @@ SECTIONS {  	dSys_c__RootHeapMEM2 = 0x8042A094;  	BG_GM_ptr = 0x80429DD0; +	instance__7dBgGm_c = 0x80429DD0;  	BgActorDefs = 0x80429DDC; @@ -735,6 +988,8 @@ SECTIONS {  	continuePlumberSetPowerupTextureDebug = 0x800CA5C4; +	returnFromPowerupSoundChange = 0x801412FC; +  	ExitFromTileGodHack = 0x807E1694;  	SomeTable_802F5440 = 0x802F5140; @@ -753,6 +1008,9 @@ SECTIONS {  	GetRandomSeed = 0x800B2EC0;  	RandomSeed = 0x80429F44; +	MakeRandomNumber__Fi = 0x800B2EE0; +	MakeRandomNumberForTiles__Fi = 0x801613A0; +  	StrangeReplayValue1 = 0x8042792E;  	StrangeReplayValue2 = 0x80429D69;  	StrangeReplayValue3 = 0x80429D6A; @@ -768,13 +1026,16 @@ SECTIONS {  	SomeWipeClass = 0x8042A440;  	QueryGlobal5758 = 0x800B3B50; +  	.text : {  		FILL (0)  		__text_start = . ;  		*(.init)  		*(.text) +		__ctor_loc = . ;  		*(.ctors) +		__ctor_end = . ;  		*(.dtors)  		*(.rodata)  		/**(.sdata)*/ @@ -786,4 +1047,3 @@ SECTIONS {  		__text_end  = . ;  	}  } - diff --git a/kamek_pal.x b/kamek_pal.x index 6bf4875..81be80c 100644 --- a/kamek_pal.x +++ b/kamek_pal.x @@ -523,8 +523,13 @@ SECTIONS {  	GameHeaps = 0x80377F48;  	BGDatClass = 0x8042A0D0; +	instance__10BGDatClass = 0x8042A0D0;  	GetTilesetName__FPvii = 0x800813F0; +	getTilesetName__10BGDatClassFii = 0x800813F0; + +	getPointerToTile__12TilemapClassFiiPUib = 0x80083B40; +  	IsWideScreen__Fv = 0x800B5500;  	Player_Active = 0x80355150; @@ -983,6 +988,8 @@ SECTIONS {  	continuePlumberSetPowerupTextureDebug = 0x800CA6B4; +	returnFromPowerupSoundChange = 0x8014143C; +  	ExitFromTileGodHack = 0x807E1684;  	SomeTable_802F5440 = 0x802F5440; @@ -1001,6 +1008,9 @@ SECTIONS {  	GetRandomSeed = 0x800B2EC0;  	RandomSeed = 0x8042A224; +	MakeRandomNumber__Fi = 0x800B2EE0; +	MakeRandomNumberForTiles__Fi = 0x801614E0; +	  	StrangeReplayValue1 = 0x80427C2E;  	StrangeReplayValue2 = 0x8042A049;  	StrangeReplayValue3 = 0x8042A04A; diff --git a/kamek_pal2.x b/kamek_pal2.x index 16d9c48..f9f8a9a 100644 --- a/kamek_pal2.x +++ b/kamek_pal2.x @@ -6,6 +6,7 @@ OUTPUT_FORMAT ("binary")  SECTIONS {  	GetSpecificPlayerActor = 0xDEADBEEF; +	Actor_SearchByID = 0xDEADBEEF;  	TimeStopFlag = 0xDEADBEEF;  	TimerBranch = 0xDEADBEEF;  	MarioDescentRate = 0xDEADBEEF; @@ -16,6 +17,8 @@ SECTIONS {  	AlwaysDrawFlag = 0xDEADBEEF;  	AlwaysDrawBranch = 0xDEADBEEF;  	GenerateRandomNumber = 0xDEADBEEF; +	OneofManySoundPlayers = 0xDEADBEEF; +	BombExplodeState = 0xDEADBEEF;  	_savefpr_14 = 0xDEADBEEF;  	_savefpr_15 = 0xDEADBEEF; @@ -101,6 +104,9 @@ SECTIONS {  	__construct_new_array = 0xDEADBEEF;  	__destroy_new_array = 0xDEADBEEF; +	__register_global_object = 0xDEADBEEF; +	__ptmf_scall = 0xDEADBEEF; +  	setup__13FunctionChainFPPFPv_bUs = 0xDEADBEEF; @@ -113,16 +119,216 @@ SECTIONS {  	GetExplanationString__7dBase_cFv = 0xDEADBEEF; +	__vt__15daEnBlockMain_c = 0xDEADBEEF; +	__dt__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenUpMoveBegins__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenDownMoveBegins__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenUpMoveExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenUpMoveDiffExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenDownMoveExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenDownMoveEndExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenDownMoveDiffExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	calledWhenDownMoveDiffEndExecutes__15daEnBlockMain_cFv = 0xDEADBEEF; +	updateScale__15daEnBlockMain_cFb = 0xDEADBEEF; +	upMove_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	upMove_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	upMove_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMoveEnd_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMoveEnd_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMoveEnd_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	upMove_Diff_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	upMove_Diff_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	upMove_Diff_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_Diff_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_Diff_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_Diff_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_DiffEnd_Begin__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_DiffEnd_Execute__15daEnBlockMain_cFv = 0xDEADBEEF; +	downMove_DiffEnd_End__15daEnBlockMain_cFv = 0xDEADBEEF; +	blockInit__15daEnBlockMain_cFf = 0xDEADBEEF; +	blockUpdate__15daEnBlockMain_cFv = 0xDEADBEEF; +	blockResult__15daEnBlockMain_cFv = 0xDEADBEEF; +	PhysicsCallback1__15daEnBlockMain_c = 0xDEADBEEF; +	PhysicsCallback2__15daEnBlockMain_c = 0xDEADBEEF; +	PhysicsCallback3__15daEnBlockMain_c = 0xDEADBEEF; +	OPhysicsCallback1__15daEnBlockMain_c = 0xDEADBEEF; +	OPhysicsCallback2__15daEnBlockMain_c = 0xDEADBEEF; +	OPhysicsCallback3__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_UpMove__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_DownMove__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_DownMoveEnd__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_UpMove_Diff__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_DownMove_Diff__15daEnBlockMain_c = 0xDEADBEEF; +	StateID_DownMove_DiffEnd__15daEnBlockMain_c = 0xDEADBEEF; + +	__ct__5dEn_cFv = 0xDEADBEEF; +	afterCreate__5dEn_cFi = 0xDEADBEEF; +	afterExecute__5dEn_cFi = 0xDEADBEEF; +	kill__5dEn_cFv = 0xDEADBEEF; +	eatIn__5dEn_cFv = 0xDEADBEEF; +	disableEatIn__5dEn_cFv = 0xDEADBEEF; +	_vf8C__5dEn_cFPv = 0xDEADBEEF; +	_vfCC__5dEn_cFP7Point2d = 0xDEADBEEF; +	_vfD0__5dEn_cFP7Point2d = 0xDEADBEEF; +	doStateChange__5dEn_cFP9StateBase = 0xDEADBEEF; +	preSpriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	prePlayerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	preYoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	stageActorCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	spriteCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	playerCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	yoshiCollision__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat3_StarPower__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat5_Mario__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	_vf108__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCatD_GroundPound__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	_vf110__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat8_FencePunch__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat7_WMWaggleWater__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat7_WMWaggleWaterYoshi__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	_vf120__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCatA_PenguinMario__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat11_PipeCannon__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat9_RollingObject__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat1_Fireball_E_Explosion__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat2_IceBall_15_YoshiIce__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat13_Hammer__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	collisionCat14_YoshiFire__5dEn_cFP13ActivePhysicsP13ActivePhysics = 0xDEADBEEF; +	_vf140__5dEn_cFP13dStageActor_c = 0xDEADBEEF; +	_vf144__5dEn_cFi = 0xDEADBEEF; +	_vf148__5dEn_cFv = 0xDEADBEEF; +	_vf14C__5dEn_cFv = 0xDEADBEEF; +	_vf150__5dEn_cFv = 0xDEADBEEF; +	eatenByYoshiProbably__5dEn_cFv = 0xDEADBEEF; +	playHpdpSound1__5dEn_cFv = 0xDEADBEEF; +	playEnemyDownSound1__5dEn_cFv = 0xDEADBEEF; +	playEnemyDownComboSound__5dEn_cFPv = 0xDEADBEEF; +	playHpdpSound2__5dEn_cFv = 0xDEADBEEF; +	_vf168__5dEn_cFv = 0xDEADBEEF; +	dieFumi_Begin__5dEn_cFv = 0xDEADBEEF; +	dieFumi_Execute__5dEn_cFv = 0xDEADBEEF; +	dieFumi_End__5dEn_cFv = 0xDEADBEEF; +	dieFall_Begin__5dEn_cFv = 0xDEADBEEF; +	dieFall_Execute__5dEn_cFv = 0xDEADBEEF; +	dieFall_End__5dEn_cFv = 0xDEADBEEF; +	dieBigFall_Begin__5dEn_cFv = 0xDEADBEEF; +	dieBigFall_Execute__5dEn_cFv = 0xDEADBEEF; +	dieBigFall_End__5dEn_cFv = 0xDEADBEEF; +	dieSmoke_Begin__5dEn_cFv = 0xDEADBEEF; +	dieSmoke_Execute__5dEn_cFv = 0xDEADBEEF; +	dieSmoke_End__5dEn_cFv = 0xDEADBEEF; +	dieYoshiFumi_Begin__5dEn_cFv = 0xDEADBEEF; +	dieYoshiFumi_Execute__5dEn_cFv = 0xDEADBEEF; +	dieYoshiFumi_End__5dEn_cFv = 0xDEADBEEF; +	dieIceVanish_Begin__5dEn_cFv = 0xDEADBEEF; +	dieIceVanish_Execute__5dEn_cFv = 0xDEADBEEF; +	dieIceVanish_End__5dEn_cFv = 0xDEADBEEF; +	dieGoal_Begin__5dEn_cFv = 0xDEADBEEF; +	dieGoal_Execute__5dEn_cFv = 0xDEADBEEF; +	dieGoal_End__5dEn_cFv = 0xDEADBEEF; +	dieOther_Begin__5dEn_cFv = 0xDEADBEEF; +	dieOther_Execute__5dEn_cFv = 0xDEADBEEF; +	dieOther_End__5dEn_cFv = 0xDEADBEEF; +	eatIn_Begin__5dEn_cFv = 0xDEADBEEF; +	eatIn_Execute__5dEn_cFv = 0xDEADBEEF; +	eatIn_End__5dEn_cFv = 0xDEADBEEF; +	eatNow_Begin__5dEn_cFv = 0xDEADBEEF; +	eatNow_Execute__5dEn_cFv = 0xDEADBEEF; +	eatNow_End__5dEn_cFv = 0xDEADBEEF; +	eatOut_Begin__5dEn_cFv = 0xDEADBEEF; +	eatOut_Execute__5dEn_cFv = 0xDEADBEEF; +	eatOut_End__5dEn_cFv = 0xDEADBEEF; +	hitSpin_Begin__5dEn_cFv = 0xDEADBEEF; +	hitSpin_Execute__5dEn_cFv = 0xDEADBEEF; +	hitSpin_End__5dEn_cFv = 0xDEADBEEF; +	ice_Begin__5dEn_cFv = 0xDEADBEEF; +	ice_Execute__5dEn_cFv = 0xDEADBEEF; +	ice_End__5dEn_cFv = 0xDEADBEEF; +	spawnHitEffectAtPosition__5dEn_cF7Point2d = 0xDEADBEEF; +	doSomethingWithHardHitAndSoftHitEffects__5dEn_cF7Point3d = 0xDEADBEEF; +	playEnemyDownSound2__5dEn_cFv = 0xDEADBEEF; +	add2ToYSpeed__5dEn_cFv = 0xDEADBEEF; +	_vf218__5dEn_cFv = 0xDEADBEEF; +	_vf21C__5dEn_cFv = 0xDEADBEEF; +	_vf220__5dEn_cFPv = 0xDEADBEEF; +	_vf224__5dEn_cFv = 0xDEADBEEF; +	_vf228__5dEn_cFv = 0xDEADBEEF; +	_vf22C__5dEn_cFv = 0xDEADBEEF; +	_vf230__5dEn_cFv = 0xDEADBEEF; +	_vf234__5dEn_cFv = 0xDEADBEEF; +	_vf238__5dEn_cFv = 0xDEADBEEF; +	_vf23C__5dEn_cFv = 0xDEADBEEF; +	_vf240__5dEn_cFv = 0xDEADBEEF; +	_vf244__5dEn_cFv = 0xDEADBEEF; +	_vf248__5dEn_cFi = 0xDEADBEEF; +	_vf24C__5dEn_cFPv = 0xDEADBEEF; +	_vf250__5dEn_cFPv = 0xDEADBEEF; +	_vf254__5dEn_cFPv = 0xDEADBEEF; +	_vf258__5dEn_cFPv = 0xDEADBEEF; +	_vf25C__5dEn_cFPv = 0xDEADBEEF; +	_vf260__5dEn_cFPv = 0xDEADBEEF; +	_vf264__5dEn_cFP13dStageActor_c = 0xDEADBEEF; +	_vf268__5dEn_cFPv = 0xDEADBEEF; +	spawnHitEffectAtPositionAgain__5dEn_cF7Point2d = 0xDEADBEEF; +	playMameStepSound__5dEn_cFv = 0xDEADBEEF; +	_vf274__5dEn_cFv = 0xDEADBEEF; +	_vf278__5dEn_cFPv = 0xDEADBEEF; +	_vf27C__5dEn_cFv = 0xDEADBEEF; + +	_vfD8__18dActorMultiState_cFv = 0xDEADBEEF; +	_vfDC__18dActorMultiState_cFv = 0xDEADBEEF; +	_vfE0__18dActorMultiState_cFv = 0xDEADBEEF; + +	__ct__13dStageActor_cFv = 0xDEADBEEF; +	__dt__13dStageActor_cFv = 0xDEADBEEF; +	beforeCreate__13dStageActor_cFv = 0xDEADBEEF; +	afterCreate__13dStageActor_cFi = 0xDEADBEEF; +	beforeDelete__13dStageActor_cFv = 0xDEADBEEF; +	afterDelete__13dStageActor_cFi = 0xDEADBEEF; +	beforeExecute__13dStageActor_cFv = 0xDEADBEEF; +	afterExecute__13dStageActor_cFi = 0xDEADBEEF; +	beforeDraw__13dStageActor_cFv = 0xDEADBEEF; +	afterDraw__13dStageActor_cFi = 0xDEADBEEF; +	GetExplanationString__13dStageActor_cFv = 0xDEADBEEF; +	_vf60__13dStageActor_cFv = 0xDEADBEEF; +	_vf68__13dStageActor_cFv = 0xDEADBEEF; +	_vf6C__13dStageActor_cFv = 0xDEADBEEF; +	_vf70__13dStageActor_cFv = 0xDEADBEEF; +	_vf74__13dStageActor_cFv = 0xDEADBEEF; +	_vf78__13dStageActor_cFv = 0xDEADBEEF; +	_vf7C__13dStageActor_cFv = 0xDEADBEEF; +	_vf88__13dStageActor_cFv = 0xDEADBEEF; +	_vf90__13dStageActor_cFP13dStageActor_c = 0xDEADBEEF; +	_vf94__13dStageActor_cFPv = 0xDEADBEEF; +	removeMyActivePhysics__13dStageActor_cFv = 0xDEADBEEF; +	addMyActivePhysics__13dStageActor_cFv = 0xDEADBEEF; +	returnRegularScale__13dStageActor_cFv = 0xDEADBEEF; +	_vfA4__13dStageActor_cFPv = 0xDEADBEEF; +	_vfA8__13dStageActor_cFPv = 0xDEADBEEF; +	_vfAC__13dStageActor_cFPv = 0xDEADBEEF; +	_vfB0__13dStageActor_cFv = 0xDEADBEEF; +	_vfB4__13dStageActor_cFv = 0xDEADBEEF; +	_vfB8__13dStageActor_cFv = 0xDEADBEEF; +	_vfBC__13dStageActor_cFv = 0xDEADBEEF; +	_vfC0__13dStageActor_cFv = 0xDEADBEEF; +	_vfC4__13dStageActor_cFv = 0xDEADBEEF; +	_vfC8__13dStageActor_cFP7Point2d = 0xDEADBEEF; +	checkZoneBoundaries__13dStageActor_cFUi = 0xDEADBEEF; +	create__13dStageActor_cF6ActorsUiP7Point3dP6S16VecUc = 0xDEADBEEF; +  	__ct__8dScene_cFv = 0xDEADBEEF;  	__dt__8dScene_cFv = 0xDEADBEEF;  	beforeCreate__8dScene_cFv = 0xDEADBEEF; -	afterCreate__8dScene_cFv = 0xDEADBEEF; +	afterCreate__8dScene_cFi = 0xDEADBEEF;  	beforeDelete__8dScene_cFv = 0xDEADBEEF; -	afterDelete__8dScene_cFv = 0xDEADBEEF; +	afterDelete__8dScene_cFi = 0xDEADBEEF;  	beforeExecute__8dScene_cFv = 0xDEADBEEF; -	afterExecute__8dScene_cFv = 0xDEADBEEF; +	afterExecute__8dScene_cFi = 0xDEADBEEF;  	beforeDraw__8dScene_cFv = 0xDEADBEEF; -	afterDraw__8dScene_cFv = 0xDEADBEEF; +	afterDraw__8dScene_cFi = 0xDEADBEEF;  	__ct__8dActor_cFv = 0xDEADBEEF;  	__dt__8dActor_cFv = 0xDEADBEEF; @@ -130,13 +336,13 @@ SECTIONS {  	__ct__7dBase_cFv = 0xDEADBEEF;  	__dt__7dBase_cFv = 0xDEADBEEF;  	beforeCreate__7dBase_cFv = 0xDEADBEEF; -	afterCreate__7dBase_cFv = 0xDEADBEEF; +	afterCreate__7dBase_cFi = 0xDEADBEEF;  	beforeDelete__7dBase_cFv = 0xDEADBEEF; -	afterDelete__7dBase_cFv = 0xDEADBEEF; +	afterDelete__7dBase_cFi = 0xDEADBEEF;  	beforeExecute__7dBase_cFv = 0xDEADBEEF; -	afterExecute__7dBase_cFv = 0xDEADBEEF; +	afterExecute__7dBase_cFi = 0xDEADBEEF;  	beforeDraw__7dBase_cFv = 0xDEADBEEF; -	afterDraw__7dBase_cFv = 0xDEADBEEF; +	afterDraw__7dBase_cFi = 0xDEADBEEF;  	onDraw__7fBase_cFv = 0xDEADBEEF; @@ -145,6 +351,46 @@ SECTIONS {  	_vf58__8dActor_cFv = 0xDEADBEEF;  	_vf5C__8dActor_cFv = 0xDEADBEEF; +	__ct__9StateBaseFPCc = 0xDEADBEEF; +	__dt__9StateBaseFv = 0xDEADBEEF; +	isInvalid__9StateBaseFv = 0xDEADBEEF; +	isEqualNotUsedForSomeReason__9StateBaseFP9StateBase = 0xDEADBEEF; +	isEqual__9StateBaseFP9StateBase = 0xDEADBEEF; +	isNotEqual__9StateBaseFP9StateBase = 0xDEADBEEF; +	getName__9StateBaseFv = 0xDEADBEEF; +	getID__9StateBaseFv = 0xDEADBEEF; + +	__ct__10dFlagMgr_c = 0xDEADBEEF; +	setup__10dFlagMgr_cFb = 0xDEADBEEF; +	applyAndClearAllTimedActions__10dFlagMgr_cFv = 0xDEADBEEF; +	execute__10dFlagMgr_cFv = 0xDEADBEEF; +	set__10dFlagMgr_cFUcibbbUi = 0xDEADBEEF; +	findLowestFlagInSet__10dFlagMgr_cFUiUl = 0xDEADBEEF; +	setSpecial__10dFlagMgr_cFUcffUcUiUl = 0xDEADBEEF; +	get8__10dFlagMgr_cFUc = 0xDEADBEEF; +	get108__10dFlagMgr_cFUc = 0xDEADBEEF; +	get208__10dFlagMgr_cFUc = 0xDEADBEEF; +	get248__10dFlagMgr_cFUc = 0xDEADBEEF; +	get448__10dFlagMgr_cFUc = 0xDEADBEEF; +	instance__10dFlagMgr_c = 0xDEADBEEF; + + +	__ct__7PhysicsFv = 0xDEADBEEF; +	setup__7PhysicsFP8dActor_cPQ27Physics4InfoUcUcP7Point2d = 0xDEADBEEF; +	addToList__7PhysicsFv = 0xDEADBEEF; +	removeFromList__7PhysicsFv = 0xDEADBEEF; +	update__7PhysicsFv = 0xDEADBEEF; + +	getTileRendererList__7dBgGm_cFi = 0xDEADBEEF; + +	add__Q212TileRenderer4ListFP12TileRenderer = 0xDEADBEEF; +	remove__Q212TileRenderer4ListFP12TileRenderer = 0xDEADBEEF; + +	__ct__12TileRendererFv = 0xDEADBEEF; +	__dt__12TileRendererFv = 0xDEADBEEF; +	setPosition__12TileRendererFfff = 0xDEADBEEF; +	setVars__12TileRendererFf = 0xDEADBEEF; +  	__ct__21dPlayerModelHandler_cFUc = 0xDEADBEEF;  	loadModel__21dPlayerModelHandler_cFUcii = 0xDEADBEEF;  	setSRT__21dPlayerModelHandler_cF7Point3d6S16Vec7Point3d = 0xDEADBEEF; @@ -277,8 +523,13 @@ SECTIONS {  	GameHeaps = 0xDEADBEEF;  	BGDatClass = 0xDEADBEEF; +	instance__10BGDatClass = 0xDEADBEEF;  	GetTilesetName__FPvii = 0xDEADBEEF; +	getTilesetName__10BGDatClassFii = 0xDEADBEEF; + +	getPointerToTile__12TilemapClassFiiPUib = 0xDEADBEEF; +  	IsWideScreen__Fv = 0xDEADBEEF;  	Player_Active = 0xDEADBEEF; @@ -379,6 +630,7 @@ SECTIONS {  	strncpy = 0xDEADBEEF;  	strcmp = 0xDEADBEEF;  	sprintf = 0xDEADBEEF; +	strrchr = 0xDEADBEEF;  	wcslen = 0xDEADBEEF; @@ -692,6 +944,7 @@ SECTIONS {  	dSys_c__RootHeapMEM2 = 0xDEADBEEF;  	BG_GM_ptr = 0xDEADBEEF; +	instance__7dBgGm_c = 0xDEADBEEF;  	BgActorDefs = 0xDEADBEEF; @@ -735,6 +988,8 @@ SECTIONS {  	continuePlumberSetPowerupTextureDebug = 0xDEADBEEF; +	returnFromPowerupSoundChange = 0xDEADBEEF; +  	ExitFromTileGodHack = 0xDEADBEEF;  	SomeTable_802F5440 = 0xDEADBEEF; @@ -753,6 +1008,9 @@ SECTIONS {  	GetRandomSeed = 0xDEADBEEF;  	RandomSeed = 0xDEADBEEF; +	MakeRandomNumber__Fi = 0xDEADBEEF; +	MakeRandomNumberForTiles__Fi = 0xDEADBEEF; +  	StrangeReplayValue1 = 0xDEADBEEF;  	StrangeReplayValue2 = 0xDEADBEEF;  	StrangeReplayValue3 = 0xDEADBEEF; @@ -768,13 +1026,16 @@ SECTIONS {  	SomeWipeClass = 0xDEADBEEF;  	QueryGlobal5758 = 0xDEADBEEF; +  	.text : {  		FILL (0)  		__text_start = . ;  		*(.init)  		*(.text) +		__ctor_loc = . ;  		*(.ctors) +		__ctor_end = . ;  		*(.dtors)  		*(.rodata)  		/**(.sdata)*/ @@ -786,4 +1047,3 @@ SECTIONS {  		__text_end  = . ;  	}  } - diff --git a/poweruphax.yaml b/poweruphax.yaml index 1eb53af..191c31d 100644 --- a/poweruphax.yaml +++ b/poweruphax.yaml @@ -186,7 +186,7 @@ hooks:    - name: FixPowerupSound      type: branch_insn -    branch_type: bl +    branch_type: b      src_addr_pal: 0x80141334      target_func: 'FixPowerupSound' diff --git a/randtilegen.rb b/randtilegen.rb new file mode 100644 index 0000000..b807c2f --- /dev/null +++ b/randtilegen.rb @@ -0,0 +1,376 @@ +class RandTileGenerator +	Types = [:none, :horz, :vert, :both] +	Specials = [nil, :vdouble_top, :vdouble_bottom] + +	def initialize +		@sections = {} +	end + +	def section(*namelist) +		raise "what" unless namelist.all?{|x| x.is_a?(String)} +		@current_section = (@sections[namelist] ||= {entries: []}) +		yield +	end + +	def random(range, type=:both, numbers=nil) +		case range +		when Range +			# Regular handling +			numbers = range if numbers.nil? +			@current_section[:entries] << {range: range, type: type, numbers: numbers.to_a} +		when Numeric +			# One number +			random(range..range, type, numbers) +		when Enumerable +			# An array or something else similar +			numbers = range if numbers.nil? +			range.each { |r| random(r, type, numbers) } +		end +	end + +	def pack +		# first, work out an offset for every section and entry +		# also, collect the data for each individual entry into an Array +		current_offset = 8 + (@sections.count * 4) +		all_entry_data = [] + +		@sections.each_pair do |name, section| +			section[:offset] = current_offset +			current_offset += 8 + +			section[:entries].each do |entry| +				entry[:offset] = current_offset +				all_entry_data << entry[:numbers] +				current_offset += 8 +			end +		end + +		# assign an offset to each section name list +		namelist_offsets = {} +		@sections.each_key do |namelist| +			namelist_offsets[namelist] = current_offset +			current_offset += 4 + (4 * namelist.size) +		end + +		# assign an offset to each piece of entry data +		data_offsets = {} +		all_entry_data.uniq! + +		all_entry_data.each do |data| +			data_offsets[data] = current_offset +			current_offset += data.size +		end + +		# assign an offset to each section name +		name_offsets = {} +		@sections.each_key do |namelist| +			namelist.each do |name| +				name_offsets[name] = current_offset +				current_offset += name.size + 1 +			end +		end + +		# now pack it all together +		header = ['NwRT', @sections.count].pack('a4 N') +		offsets = @sections.each_value.map{|s| s[:offset]}.pack('N*') + +		section_data = @sections.each_pair.map do |namelist, section| +			namelist_offset = namelist_offsets[namelist] - section[:offset] +			entry_count = section[:entries].count + +			entry_data = section[:entries].map do |entry| +				lower_bound = entry[:range].min +				upper_bound = entry[:range].max + +				count = entry[:numbers].count + +				type_sym, special_sym = entry[:type].to_s.split('_', 2).map(&:to_sym) +				type_id = Types.index(type_sym) +				special_id = Specials.index(special_sym) +				type = type_id | (special_id << 2) + +				num_offset = data_offsets[entry[:numbers]] - entry[:offset] + +				[lower_bound, upper_bound, count, type, num_offset].pack('CCCC N') +			end + +			[namelist_offset, entry_count].pack('NN') + entry_data.join +		end + +		namelist_data = @sections.each_key.map do |namelist| +			puts "Writing list: #{namelist.inspect}" +			count = namelist.size +			c_offsets = namelist.map{|n| name_offsets[n] - namelist_offsets[namelist]} +			puts "Offsets: #{c_offsets.inspect}" + +			[count].pack('N') + c_offsets.pack('N*') +		end + +		output = [header, offsets] +		output += section_data +		output += namelist_data +		output += all_entry_data.map{|data| data.pack('C*')} +		output << @sections.keys.flatten.join("\0") +		output << "\0" +		output.join +	end + + +	def regular_terrain +		# Left Side +		random([0x10, 0x20, 0x30, 0x40], :vert) +		# Right Side +		random([0x11, 0x21, 0x31, 0x41], :vert) +		# Top Side +		random(2..7, :horz) +		# Bottom Side +		random(0x22..0x27, :horz) +		# Middle +		random(0x12..0x17) +	end + +	def sub_terrain +		# Left Side +		random([0x18, 0x28, 0x38, 0x48], :vert) +		# Right Side +		random([0x19, 0x29, 0x39, 0x49], :vert) +		# Top Side +		random(0xA..0xF, :horz) +		# Bottom Side +		random(0x2A..0x2F, :horz) +		# Middle +		random(0x1A..0x1F) +	end +end + + +g = RandTileGenerator.new +g.section('TestTileset') do +	g.random(1..20) +	g.random(21..24, :none) +	g.random(250..255, :vert, 0..5) +end + +regular_ts1 = %w(chika setsugen shiro suichu daishizen sabaku_chika) +regular_ts1 += %w(nohara2 kurayami_chika shiro_yogan koopa_out shiro_koopa gake_yougan) +regular_ts2 = %w(doukutu doukutu2 doukutu3 doukutu4 doukutu5 doukutu6 doukutu8) +newer = %w(ghostrocks Pa1_daishizenkuri Pa1_darkmtmush Pa1_e3setsugen Pa2_darkcave) +newer += %w(Pa3_autumnbg Pa2_volcanobg Pa1_mushcastle Pa1_pumpkin) + +regular_ts1.map!{ |x| "Pa1_#{x}" } +regular_ts2.map!{ |x| "Pa2_#{x}" } +g.section(*regular_ts1, *regular_ts2, *newer) do +	g.regular_terrain +end + +nohara_clones = %w(nohara cracks springwater space) +g.section(*nohara_clones.map{ |x| "Pa1_#{x}"}) do +	g.regular_terrain +	g.sub_terrain +end + +g.section('Pa1_gake', 'Pa1_gake_nocoll', 'Pa1_Mountains') do +	g.regular_terrain +	g.sub_terrain +	g.random([0xAA, 0xBA, 0xCA, 0xDA], :vert) +	g.random([0xAB, 0xBB, 0xCB, 0xDB], :vert) +	g.random([0x8E, 0x9E, 0xAE, 0xBE], :vert) +	g.random([0x8F, 0x9F, 0xAF, 0xBF], :vert) +	g.random(0xC4..0xC9, :horz) +	g.random(0xD4..0xD9, :horz) +	g.random(0xE4..0xE9, :horz) +end + +g.section('Pa1_kaigan', 'Pa1_kaiganplus') do +	g.regular_terrain +	g.random(0x18..0x1B) +	g.random(0x28..0x2A) +	g.random(0x3A..0x3D) +end + +g.section('Pa1_obake_soto') do +	g.random(0xA..0xF, :horz) +	g.random(0x1A..0x1F) +	g.random(0x2A..0x2F, :horz) +	g.random([0x4E, 0x5E, 0x6E, 0x7E], :vert) +	g.random([0x4F, 0x5F, 0x6F, 0x7F], :vert) +end + +g.section('Pa1_korichika') do +	g.regular_terrain +	g.random(0x6A..0x6F, :horz) +	g.random(0x7A..0x7F) +	g.random(0x8A..0x8F, :horz) +	g.random([0x1E, 0x2E, 0x3E, 0x4E], :vert) +	g.random([0x1F, 0x2F, 0x3F, 0x4F], :vert) +	g.random(0x6A..0x6F, :horz) +	g.random(0x7A..0x7F) +	g.random(0x8A..0x8F, :horz) +	g.random([0xB8, 0xC8, 0xD8, 0xE8], :vert) +	g.random([0xB9, 0xC9, 0xD9, 0xE9], :vert) +end + +g.section('Pa1_shiro_boss1') do +	g.regular_terrain +	g.random(0x60..0x65, :horz) +end + +g.section('Pa2_kori', 'Pa2_e3kori') do +	g.regular_terrain +	g.random(0xA0..0xA5, :horz) +	g.random(0xB0..0xB5, :horz) +end + + +g.section('Cloudscape', 'pa2_clouds') do +	g.random(0x20..0x23, :horz) +	g.random(0x30..0x33) +	g.random(0x24..0x27, :horz) +	g.random([0x8, 0x18, 0x28, 0x38], :vert) +	g.random([0x9, 0x19, 0x29, 0x39], :vert) +end + +g.section('Pa1_autumncastle', 'Pa3_autumncastle', 'Pa1_snowfort', 'Pa2_ghostcastle', 'Pa2_crystalcastle') do +	g.random([0xB0, 0xC0, 0xD0, 0xE0], :vert) +	g.random([0xB1, 0xC1, 0xD1, 0xE1], :vert) +	g.random(0xB2..0xB7, :horz) +	g.random(0xC2..0xC7) +	g.random(0xD2..0xD7, :horz) +end + +g.section('CrackedMega') do +	g.random([0x20, 0x30, 0x40], :vert) +	g.random([0x21, 0x31, 0x41], :vert) +	g.random(0x22..0x27, :horz) +	g.random(0x2A..0x2F, :horz) +	g.random([0x5E, 0x6E, 0x7E], :vert) +	g.random([0x5F, 0x6F, 0x7F], :vert) +	g.random(0xB0..0xDF) +	g.random(0x2..0x7, :horz_vdouble_top) +	g.random(0x12..0x17, :horz_vdouble_bottom) +	g.random(0xA..0xF, :horz_vdouble_top) +	g.random(0x1A..0x1F, :horz_vdouble_bottom) +end + +g.section('Pa1_dessert') do +	g.regular_terrain +	g.random(0xC..0xE, :horz) +	g.random(0x1C..0x1E, :horz) +end + +g.section('Pa1_freezeflame') do +	g.random(0x1A..0x1F, :horz) +	g.random(0x2A..0x2F, :horz) +	g.random([0x10, 0x20, 0x30, 0x40], :vert) +	g.random([0x11, 0x21, 0x31, 0x41], :vert) +	g.random([0x18, 0x28, 0x38, 0x48], :vert) +	g.random([0x19, 0x29, 0x39, 0x49], :vert) +	g.random(0x2..0x7, :horz) +	g.random(0x12..0x17) +	g.random(0x22..0x27, :horz) +	g.random(0x6A..0x6F) +	g.random(0x52..0x57, :horz) +	g.random([0x96, 0xA6, 0xB6, 0xC6], :vert) +	g.random([0x97, 0xA7, 0xB7, 0xC7], :vert) +	g.random([0xBE, 0xCE, 0xDE, 0xEE], :vert) +	g.random([0xBF, 0xCF, 0xDF, 0xEF], :vert) +	g.random(0xB8..0xBD, :horz) +	g.random(0xC8..0xCD) +	g.random(0xD8..0xDD, :horz) +	g.random(0xE8..0xED) +	g.random(0xF8..0xFD, :horz) +end + +g.section(*%w(Pa1_magicsnow Pa2_magicsnow Pa3_magicsnow)) do +	g.random(0xB4..0xB9, :horz) +end + +g.section('Pa1_graveyard', 'Pa3_graveyars', 'Pa3_graveyard') do +	g.regular_terrain +	g.random(0x19..0x1E, :horz) +end + +g.section('Pa3_ghostship') do +	g.random(0xA..0xF, :horz) +	g.random(0x1A..0x1F) +	g.random(0x2A..0x2F, :horz) +	g.random([0x4E, 0x5E, 0x6E, 0x7E], :vert) +	g.random([0x4F, 0x5F, 0x6F, 0x7F], :vert) +	g.random(0xA0..0xA3, :horz) +end + +g.section('Pa1_lavaglow') do +	g.random([0x20, 0x30, 0x40, 0x50], :vert) +	g.random([0x21, 0x31, 0x41, 0x51], :vert) +	g.random(0x2..0x7, :horz_vdouble_top) +	g.random(0x12..0x17, :horz_vdouble_bottom) +	g.random(0x22..0x27) +	g.random(0x32..0x37, :horz) +	g.random(0x28..0x2D, :horz) +end + +g.section('Pa1_StarRoad') do +	g.random(0x11, :both, [0x11, 0x4C, 0x4D, 0x4E, 0x4F, 0x5C, 0x5D, 0x5E, 0x5F]) +end + +g.section('Pa2_forestobake') do +	g.random(0..5, :horz) +	g.random(0x10..0x15) +	g.random(0x20..0x25, :horz) +	g.random([0x40, 0x50, 0x60, 0x70], :vert) +	g.random([0x41, 0x51, 0x61, 0x71], :vert) +end + +g.section('Pa1_newnohara') do +	g.sub_terrain + +	g.random(2..7, :horz) +	g.random(0x22..0x27, :horz) +	g.random([0x10, 0x20, 0x30, 0x40], :vert) +	g.random([0x11, 0x21, 0x31, 0x41], :vert) +	random_set = (0xAA..0xAF).to_a + (0xBA..0xBF).to_a + (0xCA..0xCF).to_a +	random_set += (0xDA..0xDF).to_a + (0xEA..0xEF).to_a + (0xFA..0xFF).to_a +	g.random(0x12..0x17, :both, random_set) +	g.random(0xAA..0xAF, :both, random_set) +	g.random(0xBA..0xBF, :both, random_set) +	g.random(0xCA..0xCF, :both, random_set) +	g.random(0xDA..0xDF, :both, random_set) +	g.random(0xEA..0xEF, :both, random_set) +	g.random(0xFA..0xFF, :both, random_set) +end + +g.section('Pa1_mtmush') do +	g.sub_terrain + +	g.random(2..7, :horz) +	g.random(0x22..0x27, :horz) +	g.random([0x10, 0x20, 0x30, 0x40], :vert) +	g.random([0x11, 0x21, 0x31, 0x41], :vert) +	random_set = (0xDA..0xDF).to_a + (0xEA..0xEF).to_a + (0xFA..0xFF).to_a +	g.random(0x12..0x17, :both, random_set) +	g.random(0xDA..0xDF, :both, random_set) +	g.random(0xEA..0xEF, :both, random_set) +	g.random(0xFA..0xFF, :both, random_set) +end + +g.section('Pa1_darkmtmush') do +	g.sub_terrain + +	g.random(2..7, :horz) +	g.random(0x22..0x27, :horz) +	g.random([0x10, 0x20, 0x30, 0x40], :vert) +	g.random([0x11, 0x21, 0x31, 0x41], :vert) +	random_set = (0xCC..0xCF).to_a + (0xDC..0xDF).to_a + (0xEC..0xEF).to_a + (0xFC..0xFF).to_a +	g.random(0x12..0x17, :both, random_set) +	g.random(0xCC..0xCF, :both, random_set) +	g.random(0xDC..0xDF, :both, random_set) +	g.random(0xEC..0xEF, :both, random_set) +	g.random(0xFC..0xFF, :both, random_set) +end + + + +File.open('/home/me/Games/Newer/DolphinPatch/NewerRes/RandTiles.bin', 'wb') do |f| +	f.write g.pack +end + diff --git a/randtiles.yaml b/randtiles.yaml new file mode 100644 index 0000000..5bdc11c --- /dev/null +++ b/randtiles.yaml @@ -0,0 +1,31 @@ +--- +source_files: [../src/randtiles.cpp] +hooks: +  - name: ModifyTilemapClassSize +    type: patch +    addr_pal: 0x80083598 +    data: '3860 0C3C' + +  - name: LoadRandTiles +    type: branch_insn +    branch_type: b +    src_addr_pal: 0x8015BCD0 +    target_func: 'RandTileLoadHook' + +  - name: HookIdentifyTilesets +    type: branch_insn +    branch_type: bl +    src_addr_pal: 0x800838AC +    target_func: 'IdentifyTilesets' + +  - name: HookTilePlacer +    type: branch_insn +    branch_type: bl +    src_addr_pal: 0x80086B48 +    target_func: 'TryAndRandomise' + +  - name: AHackOfGiganticProportions +    type: patch +    addr_pal: 0x80086B4C +    data: '4800 0120' + diff --git a/src/poweruphax.S b/src/poweruphax.S index 9274b78..e028eb9 100644 --- a/src/poweruphax.S +++ b/src/poweruphax.S @@ -16,6 +16,7 @@  .extern continuePlumberSetPowerupTexture  .extern doneSettingThePowerupTexture  .extern doneSettingThePowerupTexture2 +.extern returnFromPowerupSoundChange  #ifndef __MWERKS__  .set r0,0;   .set r1,1;   .set r2,2; .set r3,3;   .set r4,4 @@ -391,16 +392,30 @@ _not19:  .global FixPowerupSound  FixPowerupSound: -	# WARNING! This is a bad, bad, bad hack. -	# I was too lazy to add anything to the linker script, so... - -	# We branch at 80141334, so our LR is 80141338 -	# We need to jump to 80141384 -	mflr r3 -	addi r3, r3, 0x4C -	mtlr r3 +	#lis r3, DBString@h +	#ori r3, r3, DBString@l +	#lwz r4, 0x1090(r29) +	#crclr 4*cr1+eq +	#bl OSReport + +	lwz r5, 0x14DC(r29) # Original powerup +	lwz r0, 0x1090(r29) # New powerup +	# if NEW is 1 (big) and OLD is not 0 or 3, then play 273 (powerdown) +	cmpwi r0, 1 +	bne dontConsiderPowerdown + +	cmpwi r5, 0 +	beq dontConsiderPowerdown +	cmpwi r5, 3 +	beq dontConsiderPowerdown +	# If the player is here, he was downgraded from a higher powerup to Big Mario +	# So play the powerdown sound +	mr r3, r29 +	li r4, 273 +	li r5, 0 +	b returnFromPowerupSoundChange -	lwz r0, 0x1090(r29) +dontConsiderPowerdown:  	lis r3, PowerupSounds@h  	ori r3, r3, PowerupSounds@l  	slwi r4, r0, 2 @@ -408,7 +423,7 @@ FixPowerupSound:  	mr r3, r29  	li r5, 0 -	blr +	b returnFromPowerupSoundChange  .global WeirdAnimLoadHack @@ -719,6 +734,9 @@ I_hammerModelName:  PowerupTexDebugStr:  	.string "Plumber::SetPowerupTexture() called on class %p with texnum %d lr=%p\n" +DBString: +	.string "PW:%d\n" +  #.global BrosModelFilename  #BrosModelFilename:  #	.string "g3d/bros.brres" diff --git a/src/randtiles.cpp b/src/randtiles.cpp index 0bc2ede..1508200 100644 --- a/src/randtiles.cpp +++ b/src/randtiles.cpp @@ -1,22 +1,193 @@ -#include "randtiles.h" - -u32 djb2(u8 *str) { -	u32 hash = 5381; -	int c; -	 -	while (c = *str++) -		hash = ((hash << 5) + hash) + c; -	 -	return hash; -} - -RandTiles_Section *RandTiles_Search(void *file, u32 nameHash) { -	for (int i = 0; i < RandTiles_GetSectionCount(file); i++) { -		RandTiles_Section *sect = RandTiles_GetSection(file, i); -		 -		if (sect->nameHash == nameHash) -			return sect; -	} -	 -	return 0; -} +#include <game.h>
 +
 +class RandomTileData {
 +public:
 +	enum Type {
 +		CHECK_NONE = 0,
 +		CHECK_HORZ = 1,
 +		CHECK_VERT = 2,
 +		CHECK_BOTH = 3
 +	};
 +
 +	enum Special {
 +		SP_NONE = 0,
 +		SP_VDOUBLE_TOP = 1,
 +		SP_VDOUBLE_BOTTOM = 2
 +	};
 +
 +	class NameList {
 +	public:
 +		u32 count;
 +		u32 offsets[1]; // variable size
 +
 +		const char *getName(int index) {
 +			return ((char*)this) + offsets[index];
 +		}
 +
 +		bool contains(const char *name) {
 +			for (int i = 0; i < count; i++) {
 +				if (strcmp(name, getName(i)) == 0)
 +					return true;
 +			}
 +
 +			return false;
 +		}
 +	};
 +
 +	class Entry {
 +	public:
 +		u8 lowerBound, upperBound;
 +		u8 count, type;
 +		u32 tileNumOffset;
 +
 +		u8 *getTileNums() {
 +			return ((u8*)this) + tileNumOffset;
 +		}
 +	};
 +
 +	class Section {
 +	public:
 +		u32 nameListOffset;
 +		u32 entryCount;
 +		Entry entries[1]; // variable size
 +
 +		NameList *getNameList() {
 +			return (NameList*)(((u32)this) + nameListOffset);
 +		}
 +	};
 +
 +	u32 magic;
 +	u32 sectionCount;
 +	u32 offsets[1]; // variable size
 +
 +	Section *getSection(int id) {
 +		return (Section*)(((char*)this) + offsets[id]);
 +	}
 +
 +	Section *getSection(const char *name);
 +
 +	static RandomTileData *instance;
 +};
 +
 +class RTilemapClass : public TilemapClass {
 +public:
 +	// NEWER ADDITIONS
 +	RandomTileData::Section *sections[4];
 +};
 +
 +RandomTileData::Section *RandomTileData::getSection(const char *name) {
 +	for (int i = 0; i < sectionCount; i++) {
 +		RandomTileData::Section *sect = getSection(i);
 +
 +		if (sect->getNameList()->contains(name))
 +			return sect;
 +	}
 +
 +	return 0;
 +}
 +
 +
 +// Real tile handling code
 +
 +RandomTileData *RandomTileData::instance = 0;
 +
 +dDvdLoader_c RandTileLoader;
 +
 +extern "C" bool RandTileLoadHook() {
 +	OSReport("Trying to load...");
 +	void *buf = RandTileLoader.load("/NewerRes/RandTiles.bin");
 +	if (buf == 0) {
 +		OSReport("Failed.\n");
 +		return false;
 +	} else {
 +		OSReport("Successfully loaded RandTiles.bin [%p].\n", buf);
 +		RandomTileData::instance = (RandomTileData*)buf;
 +		return true;
 +	}
 +}
 +
 +
 +extern "C" void IdentifyTilesets(RTilemapClass *self) {
 +	self->_C0C = 0xFFFFFFFF;
 +
 +	for (int i = 0; i < 4; i++) {
 +		const char *tilesetName = BGDatClass::instance->getTilesetName(self->areaID, i);
 +
 +		self->sections[i] = RandomTileData::instance->getSection(tilesetName);
 +		OSReport("[%d] Chose %p for %s\n", i, self->sections[i], tilesetName);
 +	}
 +}
 +
 +extern "C" void TryAndRandomise(RTilemapClass *self, BGRender *bgr) {
 +	int fullTile = bgr->tileToPlace & 0x3FF;
 +	int tile = fullTile & 0xFF;
 +	int tileset = fullTile >> 8;
 +
 +	RandomTileData::Section *rtSect = self->sections[tileset];
 +	if (rtSect == 0)
 +		return;
 +
 +	for (int i = 0; i < rtSect->entryCount; i++) {
 +		RandomTileData::Entry *entry = &rtSect->entries[i];
 +
 +		if (tile >= entry->lowerBound && tile <= entry->upperBound) {
 +			// Found it!!
 +			// Try to make one until we meet the conditions
 +			u8 type = entry->type & 3;
 +			u8 special = entry->type >> 2;
 +
 +			u8 *tileNums = entry->getTileNums();
 +			u16 chosen = 0xFF;
 +
 +			// If it's the top special, then ignore this tile, we'll place that one
 +			// once we choose the bottom one
 +			if (special == RandomTileData::SP_VDOUBLE_TOP)
 +				break;
 +
 +			u16 *top = 0, *left = 0, *right = 0, *bottom = 0;
 +			if (type == RandomTileData::CHECK_HORZ || type == RandomTileData::CHECK_BOTH) {
 +				left = self->getPointerToTile((bgr->curX - 1) * 16, bgr->curY * 16);
 +				right = self->getPointerToTile((bgr->curX + 1) * 16, bgr->curY * 16);
 +			}
 +
 +			if (type == RandomTileData::CHECK_VERT || type == RandomTileData::CHECK_BOTH) {
 +				top = self->getPointerToTile(bgr->curX * 16, (bgr->curY - 1) * 16);
 +				bottom = self->getPointerToTile(bgr->curX * 16, (bgr->curY + 1) * 16);
 +			}
 +
 +			int attempts = 0;
 +			while (true) {
 +				// is there even a point to using that special random function?
 +				chosen = (tileset << 8) | tileNums[MakeRandomNumberForTiles(entry->count)];
 +
 +				// avoid infinite loops
 +				attempts++;
 +				if (attempts > 5)
 +					break;
 +
 +				if (top != 0 && *top == chosen)
 +					continue;
 +				if (bottom != 0 && *bottom == chosen)
 +					continue;
 +				if (left != 0 && *left == chosen)
 +					continue;
 +				if (right != 0 && *right == chosen)
 +					continue;
 +				break;
 +			}
 +
 +			bgr->tileToPlace = chosen;
 +
 +			if (special == RandomTileData::SP_VDOUBLE_BOTTOM) {
 +				if (top == 0)
 +					top = self->getPointerToTile(bgr->curX * 16, (bgr->curY - 1) * 16);
 +
 +				*top = (chosen - 0x10);
 +			}
 +
 +			return;
 +		}
 +	}
 +}
 +
 +
 diff --git a/src/randtiles.h b/src/randtiles.h deleted file mode 100644 index 14355da..0000000 --- a/src/randtiles.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef __NEWER_RANDTILES_H -#define __NEWER_RANDTILES_H - -#include <common.h> -#include "fileload.h" - -#define RAND_CHECK_HORZ -#define RAND_CHECK_VERT -#define RAND_CHECK_BOTH - -struct RandTiles_Header { -	u32 magic; -	u32 sectionCount; -}; - -struct RandTiles_Section { -	u32 nameHash; -	u32 entryCount; -}; - -struct RandTiles_Entry { -	u16 startTile; -	u16 endTile; -	u8 count; -	u8 type; -	u16 reserved; -	u32 dataOffset; -}; - -inline u32 RandTiles_GetSectionCount(void *file) { -	return ((RandTiles_Header*)file)->sectionCount; -} - -inline u32 *RandTiles_GetOffsets(void *file) { -	return (u32*)(((RandTiles_Header*)file)+1); -} - -inline RandTiles_Section *RandTiles_GetSection(void *file, int id) { -	u32 offs = RandTiles_GetOffsets(file)[id]; -	return (RandTiles_Section*)(((char*)file)+offs); -}; - -inline RandTiles_Entry *RandTiles_GetTiles(void *file, RandTiles_Section *section) { -	return (RandTiles_Entry*)(section+1); -} - -inline RandTiles_Entry *RandTiles_GetTiles(void *file, int sectionID) { -	return (RandTiles_Entry*)(RandTiles_GetSection(file, sectionID)+1); -} - -inline char *RandTiles_GetName(void *file, RandTiles_Section *section) { -	return ((char*)file)+section->nameOffset; -} - -inline u16 *RandTiles_GetData(void *file, RandTiles_Entry *entry) { -	return (u16*)(((char*)file)+entry->dataOffset); -} - -u32 djb2(u8 *str); -RandTiles_Section *RandTiles_Search(void *file, u32 nameHash); - - -#endif diff --git a/tools/hooks.pyc b/tools/hooks.pyc Binary files differindex e345d54..84b5c26 100644 --- a/tools/hooks.pyc +++ b/tools/hooks.pyc  | 
