diff --git a/other/useful_regexps.txt b/other/useful_regexps.txt
new file mode 100644
index 0000000..8b48c0f
--- /dev/null
+++ b/other/useful_regexps.txt
@@ -0,0 +1,11 @@
+
+
+
+(, *|[-=+!] *|\()\*\(\(uint16 \*\)(v[0-9]+) \+ 2\) $1GET_WORD($2 + 4)
+
+(\(|[-=+!] *|, *)\*\(uint16 \*\)(v[0-9]+) $1GET_WORD($2)
+
+(, *|[-=+!] *|\()\*\(uint16 \*\)\((v[0-9]+) \+ 3\) $1GET_WORD($2 + 3)
+
+RespawnEnemy
+
diff --git a/src/funcs.h b/src/funcs.h
index 100e8bc..2dd3b7b 100644
--- a/src/funcs.h
+++ b/src/funcs.h
@@ -27,7 +27,7 @@ void AddGrappleToHudTilemap(void);
void AddMissilesToHudTilemap(void);
void AddPowerBombsToHudTilemap(void);
void AddSuperMissilesToHudTilemap(void);
-void AddToTilemapInner(uint16 k, uint16 j);
+void AddToTilemapInner(uint16 k, const uint16 *j);
void AddXrayToHudTilemap(void);
void CalculateBgScrollAndLayerPositionBlocks(void);
void CalculateBgScrolls(void);
@@ -41,9 +41,8 @@ void ClearTimerRam(void);
void ConfigureMode7RotationMatrix(void);
void CopySuperMetroidString(void);
void DebugScrollPosSaveLoad(void);
-void DecompressToMem(void);
-void DecompressToMem_IpArg(const void* p);
-void DecompressToVRAM(void);
+void DecompressToMem(uint32 src, uint8 *decompress_dst);
+void DecompressToVRAM(uint32 src, uint16 dst_addr);
void DisableIrqInterrupts(void);
void DisableNMI(void);
void DisplayViewablePartOfRoom(void);
@@ -52,10 +51,10 @@ void DoorTransitionScrollingSetup_Down(void);
void DoorTransitionScrollingSetup_Left(void);
void DoorTransitionScrollingSetup_Right(void);
void DoorTransitionScrollingSetup_Up(void);
-void DrawThreeHudDigits(uint16 a, uint16 k);
+void DrawThreeHudDigits(LongPtr r0, uint16 a, uint16 k);
void DrawTimer(void);
void DrawTimerSpritemap(uint16 a, uint16 j);
-void DrawTwoHudDigits(uint16 a, uint16 k);
+void DrawTwoHudDigits(LongPtr r0, uint16 a, uint16 k);
void DrawTwoTimerDigits(uint16 a, uint16 k);
void EnableIrqInterrupts(void);
void EnableIrqInterruptsNow(void);
@@ -97,7 +96,7 @@ void LoadFromLoadStation(void);
void LoadMirrorOfExploredMapTiles(void);
void Multiply16x16(uint16 a, uint16 j);
void NMI_ProcessMode7Queue(void);
-void NMI_ProcessMode7QueueInner(uint16 k);
+void NMI_ProcessMode7QueueInner(const uint8 *p);
void NMI_ProcessVramReadQueue(void);
void NMI_ProcessVramWriteQueue(void);
void NmiProcessAnimtilesVramTransfers(void);
@@ -198,7 +197,7 @@ void DrawSpritemap(uint8 db, uint16 j);
void DrawSpritemapOffScreen(uint16 j);
void DrawSpritemapWithBaseTile(uint8 db, uint16 j);
void DrawSpritemapWithBaseTile2(uint8 db, uint16 j);
-void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j);
+void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j, uint16 r20_x, uint16 r18_y);
void FileSelectClearRestOfMenuTilemapRow(uint16 k);
void FileSelectMap(void);
void FileSelectMap_0(void);
@@ -292,7 +291,7 @@ void SetupInitialExpandingSquareHDMA(void);
void SetupRoomSelectMapExpandingSquareTransHDMA(void);
void SwitchActiveFileSelectMapArea(void);
void UnpackMapFromSave(void);
-void sub_818A5F(uint16 j);
+void sub_818A5F(const uint8 *pp);
void sub_819591(void);
void sub_81A3D1(uint16 k);
void sub_81AEC8(void);
@@ -623,116 +622,116 @@ void sub_82F404(uint16 k);
void sub_82F419(uint16 j);
// Bank 84
-uint16 PlmInstr_ABD6(uint16 k, uint16 j);
-uint16 PlmInstr_ActivateEnergyStation(uint16 j, uint16 k);
-uint16 PlmInstr_ActivateMapStation(uint16 j, uint16 k);
-uint16 PlmInstr_ActivateMissileStation(uint16 j, uint16 k);
-uint16 PlmInstr_ActivateSaveStationAndGotoIfNo(uint16 j, uint16 k);
-uint16 PlmInstr_Call(uint16 j, uint16 k);
-uint16 PlmInstr_CallFunction(uint16 j, uint16 k);
-uint16 PlmInstr_ClearChargeBeamCounter(uint16 j, uint16 k);
-uint16 PlmInstr_ClearMusicQueueAndQueueTrack(uint16 j, uint16 k);
-uint16 PlmInstr_ClearPreInstr(uint16 j, uint16 k);
-uint16 PlmInstr_ClearTrigger(uint16 j, uint16 k);
-uint16 PlmInstr_CollectAmmoMissileTank(uint16 j, uint16 k);
-uint16 PlmInstr_CollectAmmoPowerBombTank(uint16 j, uint16 k);
-uint16 PlmInstr_CollectAmmoSuperMissileTank(uint16 j, uint16 k);
-uint16 PlmInstr_CollectHealthEnergyTank(uint16 j, uint16 k);
-uint16 PlmInstr_CollectHealthReserveTank(uint16 j, uint16 k);
-uint16 PlmInstr_CopyFromRamToVram(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurret(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurret2(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurretFacingDownLeft(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurretFacingDownRight(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurretFacingUpLeft(uint16 j, uint16 k);
-uint16 PlmInstr_DamageDraygonTurretFacingUpRight(uint16 j, uint16 k);
-uint16 PlmInstr_DealDamage_2(uint16 j, uint16 k);
-uint16 PlmInstr_DecrementAndBranchNonzero(uint16 j, uint16 k);
-uint16 PlmInstr_Delete(uint16 j, uint16 k);
-uint16 PlmInstr_DiagonalEarthquake(uint16 j, uint16 k);
-uint16 PlmInstr_DisableSamusControls(uint16 j, uint16 k);
-uint16 PlmInstr_DisplayGameSavedMessageBox(uint16 j, uint16 k);
-uint16 PlmInstr_Draw0x38FramesOfLeftTreadmill(uint16 j, uint16 k);
-uint16 PlmInstr_Draw0x38FramesOfRightTreadmill(uint16 j, uint16 k);
-uint16 PlmInstr_DrawItemFrame0(uint16 j, uint16 k);
-uint16 PlmInstr_DrawItemFrame1(uint16 j, uint16 k);
-uint16 PlmInstr_DrawItemFrame_Common(uint16 j, uint16 k);
-uint16 PlmInstr_DrawPlmBlock(uint16 j, uint16 k);
-uint16 PlmInstr_DrawPlmBlock_(uint16 j, uint16 k);
-uint16 PlmInstr_E63B(uint16 k, uint16 j);
-uint16 PlmInstr_EnableMovementAndSetSaveStationUsed(uint16 j, uint16 k);
-uint16 PlmInstr_EnableSamusControls(uint16 j, uint16 k);
-uint16 PlmInstr_EnableWaterPhysics(uint16 j, uint16 k);
-uint16 PlmInstr_FxBaseYPos_0x2D2(uint16 j, uint16 k);
-uint16 PlmInstr_GiveInvincibility(uint16 j, uint16 k);
-uint16 PlmInstr_Goto(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfBossBitSet(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfChozoSet(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfDoorBitSet(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfEventSet(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfItemBitSet(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfMissilesFull(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfRoomArgLess(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfSamusHealthFull(uint16 j, uint16 k);
-uint16 PlmInstr_GotoIfSamusNear(uint16 j, uint16 k);
-uint16 PlmInstr_IncrementArgumentAndJGE(uint16 j, uint16 k);
-uint16 PlmInstr_IncrementDoorHitCounterAndJGE(uint16 j, uint16 k);
-uint16 PlmInstr_JumpIfSamusHasNoBombs(uint16 j, uint16 k);
-uint16 PlmInstr_LoadItemPlmGfx(uint16 j, uint16 k);
-uint16 PlmInstr_MovePlmDownOneBlock(uint16 j, uint16 k);
-uint16 PlmInstr_MovePlmDownOneBlock_0(uint16 j, uint16 k);
-uint16 PlmInstr_MovePlmRight4Blocks(uint16 j, uint16 k);
-uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingLeft(uint16 j, uint16 k);
-uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingRight(uint16 j, uint16 k);
-uint16 PlmInstr_PickupBeamAndShowMessage(uint16 j, uint16 k);
-uint16 PlmInstr_PickupEquipmentAddGrappleShowMessage(uint16 j, uint16 k);
-uint16 PlmInstr_PickupEquipmentAddXrayShowMessage(uint16 j, uint16 k);
-uint16 PlmInstr_PickupEquipmentAndShowMessage(uint16 j, uint16 k);
-uint16 PlmInstr_PlaceSamusOnSaveStation(uint16 j, uint16 k);
-uint16 PlmInstr_PreInstr(uint16 j, uint16 k);
-uint16 PlmInstr_ProcessAirScrollUpdate(uint16 j, uint16 k);
-uint16 PlmInstr_ProcessSolidScrollUpdate(uint16 j, uint16 k);
-uint16 PlmInstr_QueueMusic(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx1_Max1(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx1_Max15(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx1_Max3(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx1_Max6(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx1_Max9(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx2_Max1(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx2_Max15(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx2_Max3(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx2_Max6(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx2_Max9(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx3_Max1(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx3_Max15(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx3_Max6(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx3_Max9(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSfx_Max3(uint16 j, uint16 k);
-uint16 PlmInstr_QueueSong1MusicTrack(uint16 j, uint16 k);
-uint16 PlmInstr_Return(uint16 j, uint16 k);
-uint16 PlmInstr_Scroll_0_1_Blue(uint16 j, uint16 k);
-uint16 PlmInstr_SetBTS(uint16 j, uint16 k);
-uint16 PlmInstr_SetBtsTo1(uint16 j, uint16 k);
-uint16 PlmInstr_SetCrittersEscapedEvent(uint16 j, uint16 k);
-uint16 PlmInstr_SetEvent(uint16 j, uint16 k);
-uint16 PlmInstr_SetGreyDoorPreInstr(uint16 j, uint16 k);
-uint16 PlmInstr_SetItemBit(uint16 j, uint16 k);
-uint16 PlmInstr_SetLinkReg(uint16 j, uint16 k);
-uint16 PlmInstr_SetRoomChozoBit(uint16 j, uint16 k);
-uint16 PlmInstr_SetTimer(uint16 j, uint16 k);
-uint16 PlmInstr_ShootEyeDoorProjectileWithProjectileArg(uint16 j, uint16 k);
-uint16 PlmInstr_Sleep(uint16 j, uint16 k);
-uint16 PlmInstr_Spawn10shardsAnd6n00bs(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnEnemyProjectile(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnEyeDoorSmokeProjectile(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnEyeDoorSweatEnemyProjectile(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnFourMotherBrainGlass(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnN00bTubeCrackEnemyProjectile(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnTorizoStatueBreaking(uint16 j, uint16 k);
-uint16 PlmInstr_SpawnTwoEyeDoorSmoke(uint16 j, uint16 k);
-uint16 PlmInstr_TransferWreckedShipChozoSpikesToSlopes(uint16 j, uint16 k);
-uint16 PlmInstr_TransferWreckedShipSlopesToChozoSpikes(uint16 j, uint16 k);
-uint16 PlmInstr_WakeEnemyProjectileAtPlmPos(uint16 j, uint16 k);
+const uint8 *PlmInstr_ABD6(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ActivateEnergyStation(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ActivateMapStation(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ActivateMissileStation(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ActivateSaveStationAndGotoIfNo(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Call(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CallFunction(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ClearChargeBeamCounter(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ClearMusicQueueAndQueueTrack(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ClearPreInstr(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ClearTrigger(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CollectAmmoMissileTank(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CollectAmmoPowerBombTank(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CollectAmmoSuperMissileTank(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CollectHealthEnergyTank(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CollectHealthReserveTank(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_CopyFromRamToVram(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurret(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurret2(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurretFacingDownLeft(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurretFacingDownRight(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurretFacingUpLeft(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DamageDraygonTurretFacingUpRight(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DealDamage_2(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DecrementAndBranchNonzero(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Delete(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DiagonalEarthquake(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DisableSamusControls(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DisplayGameSavedMessageBox(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Draw0x38FramesOfLeftTreadmill(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Draw0x38FramesOfRightTreadmill(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DrawItemFrame0(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DrawItemFrame1(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DrawItemFrame_Common(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DrawPlmBlock(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_DrawPlmBlock_(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_E63B(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_EnableMovementAndSetSaveStationUsed(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_EnableSamusControls(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_EnableWaterPhysics(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_FxBaseYPos_0x2D2(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GiveInvincibility(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Goto(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfBossBitSet(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfChozoSet(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfDoorBitSet(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfEventSet(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfItemBitSet(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfMissilesFull(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfRoomArgLess(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfSamusHealthFull(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_GotoIfSamusNear(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_IncrementArgumentAndJGE(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_IncrementDoorHitCounterAndJGE(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_JumpIfSamusHasNoBombs(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_LoadItemPlmGfx(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_MovePlmDownOneBlock(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_MovePlmDownOneBlock_0(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_MovePlmRight4Blocks(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_MoveUpAndMakeBlueDoorFacingLeft(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_MoveUpAndMakeBlueDoorFacingRight(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PickupBeamAndShowMessage(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PickupEquipmentAddGrappleShowMessage(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PickupEquipmentAddXrayShowMessage(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PickupEquipmentAndShowMessage(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PlaceSamusOnSaveStation(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_PreInstr(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ProcessAirScrollUpdate(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ProcessSolidScrollUpdate(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueMusic(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx1_Max1(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx1_Max15(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx1_Max3(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx1_Max6(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx1_Max9(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx2_Max1(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx2_Max15(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx2_Max3(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx2_Max6(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx2_Max9(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx3_Max1(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx3_Max15(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx3_Max6(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx3_Max9(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSfx_Max3(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_QueueSong1MusicTrack(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Return(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Scroll_0_1_Blue(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetBTS(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetBtsTo1(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetCrittersEscapedEvent(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetEvent(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetGreyDoorPreInstr(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetItemBit(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetLinkReg(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetRoomChozoBit(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SetTimer(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_ShootEyeDoorProjectileWithProjectileArg(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Sleep(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_Spawn10shardsAnd6n00bs(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnEnemyProjectile(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnEyeDoorSmokeProjectile(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnEyeDoorSweatEnemyProjectile(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnFourMotherBrainGlass(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnN00bTubeCrackEnemyProjectile(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnTorizoStatueBreaking(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_SpawnTwoEyeDoorSmoke(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_TransferWreckedShipChozoSpikesToSlopes(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_TransferWreckedShipSlopesToChozoSpikes(const uint8 *plmp, uint16 k);
+const uint8 *PlmInstr_WakeEnemyProjectileAtPlmPos(const uint8 *plmp, uint16 k);
uint16 SetBtsTo0x10AdvanceRow(uint16 k);
uint16 SetBtsTo0x10AdvanceRowUp(uint16 k);
uint8 ActivateStationIfSamusCannonLinedUp(uint16 a, uint16 j);
@@ -1491,9 +1490,9 @@ uint16 CalculateCrystalFlashHdmaDataTablesScaled_RightOfScreen(uint16 k, uint16
void CalculateCrystalFlashHdmaObjectTablePtrs(uint16 k);
void CalculatePowerBombHdmaObjectTablePtrs(uint16 k);
void CalculatePowerBombHdmaTablePointers(uint16 k);
-void CalculatePowerBombHdma_LeftOfScreen(uint16 k, uint16 j);
-void CalculatePowerBombHdma_OnScreen(uint16 k, uint16 j);
-void CalculatePowerBombHdma_RightOfScreen(uint16 k, uint16 j);
+void CalculatePowerBombHdma_LeftOfScreen(uint16 k, const uint8 *j);
+void CalculatePowerBombHdma_OnScreen(uint16 k, const uint8 *j);
+void CalculatePowerBombHdma_RightOfScreen(uint16 k, const uint8 *j);
void CalculateXrayHdmaTable(void);
void CinematicFunction_Intro_Func133(void);
void CrystalFlashCleanup(uint16 k);
@@ -3113,7 +3112,7 @@ void BlockInsideReact_SpecialAir_9(void);
void BlockInsideReact_SpecialAir_Default(void);
void BlockInsideReact_SpikeAir_BTS2(void);
void BombOrPowerBomb_Func1(uint16 k);
-void CalculateBlockAt(void);
+void CalculateBlockAt(uint16 r26, uint16 r28, uint16 r30, uint16 r32);
void ClearCarry_8(void);
void DrawGrappleOams(uint16 j);
void DrawGrappleOams2(void);
@@ -3210,21 +3209,20 @@ uint16 DetermineDirectionOfSamusFromEnemy(void);
uint16 EnemyFunc_AC67(uint16 k);
uint16 EnemyFunc_ACA8(void);
uint16 EnemyFunc_ADA3(uint16 a);
-uint16 EnemyInstr_ClearAiPreInstr(uint16 k, uint16 j);
-uint16 EnemyInstr_CopyToVram(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGotoRel(uint16 k, uint16 j);
-uint16 EnemyInstr_DisableOffScreenProcessing(uint16 k, uint16 j);
-uint16 EnemyInstr_EnableOffScreenProcessing(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto(uint16 k, uint16 j);
-uint16 EnemyInstr_GotoRel(uint16 k, uint16 j);
-uint16 EnemyInstr_SetAiPreInstr(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer(uint16 k, uint16 j);
-uint16 EnemyInstr_Skip2bytes(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep(uint16 k, uint16 j);
-uint16 EnemyInstr_StopScript(uint16 k, uint16 j);
-uint16 EnemyInstr_WaitNframes(uint16 k, uint16 j);
+const uint16 *EnemyInstr_ClearAiPreInstr(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_CopyToVram(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_DecTimerAndGoto(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_DecTimerAndGotoRel(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_DisableOffScreenProcessing(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_EnableOffScreenProcessing(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_Goto(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_GotoRel(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_SetAiPreInstr(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_SetTimer(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_Skip2bytes(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_Sleep(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_StopScript(uint16 k, const uint16 *jp);
+const uint16 *EnemyInstr_WaitNframes(uint16 k, const uint16 *jp);
uint16 EnemyWithNormalSpritesIsOffScreen(void);
uint16 GetSamusEnemyDelta_X(uint16 k);
uint16 GetSamusEnemyDelta_Y(uint16 k);
@@ -3270,7 +3268,6 @@ void ClearEnemyDataAndProcessEnemySet(void);
void ConvertAngleToXy(void);
void CreateADudShot(void);
void CreateDudShot(void);
-void DebugLoadEnemySetData(void);
void DecrementSamusTimers(void);
void DeleteEnemyAndConnectedEnemies(void);
void DetermineWhichEnemiesToProcess(void);
@@ -3361,59 +3358,53 @@ void TransferEnemyTilesToVramAndInit(void);
void WriteEnemyOams(void);
// Bank A2
-uint16 BouncingGoofball_Instr_88C5(uint16 k, uint16 j);
-uint16 BouncingGoofball_Instr_88C6(uint16 k, uint16 j);
+const uint16 *BouncingGoofball_Instr_88C5(uint16 k, const uint16 *jp);
+const uint16 *BouncingGoofball_Instr_88C6(uint16 k, const uint16 *jp);
uint16 BouncingGoofball_SamusCloseX(void);
-uint16 EnemyInstr_DecTimerAndGoto2_A2(uint16 k, uint16 j);
-uint16 EnemyInstr_DisableOffScreenProcessing_A2(uint16 k, uint16 j);
-uint16 EnemyInstr_EnableOffScreenProcessing_A2(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A2(uint16 k, uint16 j);
-uint16 EnemyInstr_Rio_Instr_1(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_A2(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A2(uint16 k, uint16 j);
+const uint16 *EnemyInstr_Rio_Instr_1(uint16 k, const uint16 *jp);
uint16 Flies_2(uint16 k);
-uint16 LavaSeahorse_Instr_E5FB(uint16 k, uint16 j);
-uint16 LowerNorfairRio_Instr_C6D2(uint16 k, uint16 j);
-uint16 LowerNorfairRio_Instr_C6DD(uint16 k, uint16 j);
-uint16 LowerNorfairRio_Instr_C6E8(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_9381(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_9412(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_9447(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_9451(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_946B(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_9485(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_94A1(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_94C7(uint16 k, uint16 j);
-uint16 MaridiaBeybladeTurtle_Instr_94D1(uint16 k, uint16 j);
-uint16 MaridiaLargeSnail_Instr_CB6B(uint16 k, uint16 j);
-uint16 MaridiaLargeSnail_Instr_CCB3(uint16 k, uint16 j);
-uint16 MaridiaLargeSnail_Instr_CCBE(uint16 k, uint16 j);
-uint16 MaridiaLargeSnail_Instr_CCC9(uint16 k, uint16 j);
-uint16 MaridiaSpikeyShell_Instr_A56D(uint16 k, uint16 j);
-uint16 MaridiaSpikeyShell_Instr_A571(uint16 k, uint16 j);
-uint16 MiniCrocomire_Instr_897E(uint16 k, uint16 j);
-uint16 MiniCrocomire_Instr_8990(uint16 k, uint16 j);
-uint16 MiniCrocomire_Instr_899D(uint16 k, uint16 j);
-uint16 NorfairLavajumpingEnemy_Instr_BE8E(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C1C9(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C1D4(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C1DF(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C1EA(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C1F5(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C200(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C20B(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C216(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C221(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C22C(uint16 k, uint16 j);
-uint16 NorfairRio_Instr_C237(uint16 k, uint16 j);
+const uint16 *LavaSeahorse_Instr_E5FB(uint16 k, const uint16 *jp);
+const uint16 *LowerNorfairRio_Instr_C6D2(uint16 k, const uint16 *jp);
+const uint16 *LowerNorfairRio_Instr_C6DD(uint16 k, const uint16 *jp);
+const uint16 *LowerNorfairRio_Instr_C6E8(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_9381(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_9412(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_9447(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_9451(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_946B(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_9485(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_94A1(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_94C7(uint16 k, const uint16 *jp);
+const uint16 *MaridiaBeybladeTurtle_Instr_94D1(uint16 k, const uint16 *jp);
+const uint16 *MaridiaLargeSnail_Instr_CB6B(uint16 k, const uint16 *jp);
+const uint16 *MaridiaLargeSnail_Instr_CCB3(uint16 k, const uint16 *jp);
+const uint16 *MaridiaLargeSnail_Instr_CCBE(uint16 k, const uint16 *jp);
+const uint16 *MaridiaLargeSnail_Instr_CCC9(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSpikeyShell_Instr_A56D(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSpikeyShell_Instr_A571(uint16 k, const uint16 *jp);
+const uint16 *MiniCrocomire_Instr_897E(uint16 k, const uint16 *jp);
+const uint16 *MiniCrocomire_Instr_8990(uint16 k, const uint16 *jp);
+const uint16 *MiniCrocomire_Instr_899D(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavajumpingEnemy_Instr_BE8E(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C1C9(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C1D4(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C1DF(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C1EA(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C1F5(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C200(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C20B(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C216(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C221(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C22C(uint16 k, const uint16 *jp);
+const uint16 *NorfairRio_Instr_C237(uint16 k, const uint16 *jp);
uint16 Rinka_2(uint16 k);
uint16 Rinka_Instr_B9A2(uint16 k, uint16 j);
-uint16 Rinka_Instr_B9B3(uint16 k, uint16 j);
-uint16 Rinka_Instr_B9BD(uint16 k, uint16 j);
-uint16 Rinka_Instr_B9C7(uint16 k, uint16 j);
-uint16 SpikeShootingPlant_Instr_9F2A(uint16 k, uint16 j);
-uint16 SpikeShootingPlant_Instr_A095(uint16 k, uint16 j);
-uint16 SpikeShootingPlant_Instr_A0A7(uint16 k, uint16 j);
+const uint16 *Rinka_Instr_B9B3(uint16 k, const uint16 *jp);
+const uint16 *Rinka_Instr_B9BD(uint16 k, const uint16 *jp);
+const uint16 *Rinka_Instr_B9C7(uint16 k, const uint16 *jp);
+const uint16 *SpikeShootingPlant_Instr_9F2A(uint16 k, const uint16 *jp);
+const uint16 *SpikeShootingPlant_Instr_A095(uint16 k, const uint16 *jp);
+const uint16 *SpikeShootingPlant_Instr_A0A7(uint16 k, const uint16 *jp);
uint8 Gripper_Func_1(uint16 k);
uint8 Gripper_Func_2(uint16 k);
uint8 MiniCrocomire_Func9(void);
@@ -3706,38 +3697,34 @@ void sub_A29A6C(uint16 a);
// Bank A3
uint16 Bang_Func_4(uint16 a);
-uint16 Bang_Instr_1(uint16 k, uint16 j);
-uint16 Bang_Instr_2(uint16 k, uint16 j);
-uint16 EnemyInstr_DisableOffScreenProcessing_A3(uint16 k, uint16 j);
-uint16 EnemyInstr_EnableOffScreenProcessing_A3(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A3(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A3(uint16 k, uint16 j);
-uint16 MaridiaFish_Instr_1(uint16 k, uint16 j);
-uint16 MaridiaFish_Instr_2(uint16 k, uint16 j);
-uint16 MaridiaFish_Instr_3(uint16 k, uint16 j);
-uint16 MaridiaRefillCandy_Instr_1(uint16 k, uint16 j);
-uint16 MaridiaRefillCandy_Instr_2(uint16 k, uint16 j);
-uint16 MaridiaRefillCandy_Instr_3(uint16 k, uint16 j);
-uint16 MaridiaSnail_Instr_1(uint16 k, uint16 j);
-uint16 MaridiaSnail_Instr_2(uint16 k, uint16 j);
-uint16 MaridiaSnail_Instr_3(uint16 k, uint16 j);
-uint16 MaridiaSnail_Instr_4(uint16 k, uint16 j);
-uint16 MaridiaSnail_Instr_5(uint16 k, uint16 j);
-uint16 Metalee_Instr_1(uint16 k, uint16 j);
-uint16 Metroid_Instr_1(uint16 k, uint16 j);
-uint16 Metroid_Instr_2(uint16 k, uint16 j);
-uint16 PlatformThatFallsWithSamus_Instr_1(uint16 k, uint16 j);
-uint16 PlatformThatFallsWithSamus_Instr_2(uint16 k, uint16 j);
-uint16 PlatformThatFallsWithSamus_Instr_3(uint16 k, uint16 j);
-uint16 PlatformThatFallsWithSamus_Instr_4(uint16 k, uint16 j);
-uint16 Reflec_Instr_1(uint16 k, uint16 j);
-uint16 Sidehopper_Func_1(uint16 k, uint16 j);
+const uint16 *Bang_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Bang_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *MaridiaFish_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *MaridiaFish_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *MaridiaFish_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *MaridiaRefillCandy_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *MaridiaRefillCandy_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *MaridiaRefillCandy_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSnail_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSnail_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSnail_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSnail_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *MaridiaSnail_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Metalee_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Metroid_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Metroid_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *PlatformThatFallsWithSamus_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *PlatformThatFallsWithSamus_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *PlatformThatFallsWithSamus_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *PlatformThatFallsWithSamus_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Reflec_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Sidehopper_Func_1(uint16 k, const uint16 *jp);
uint16 Sidehopper_Func_2(void);
-uint16 Sidehopper_Instr_1(uint16 k, uint16 j);
-uint16 Skree_Instr_1(uint16 k, uint16 j);
-uint16 Waver_Instr_1(uint16 k, uint16 j);
-uint16 WreckedShipOrangeZoomer_Func_1(uint16 k, uint16 j);
-uint16 Zoomer_Instr_SetPreinstr(uint16 k, uint16 j);
+const uint16 *Sidehopper_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Skree_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Waver_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipOrangeZoomer_Func_1(uint16 k, const uint16 *jp);
+const uint16 *Zoomer_Instr_SetPreinstr(uint16 k, const uint16 *jp);
uint8 MaridiaSnail_Func_17(uint16 k);
uint8 MaridiaSnail_Func_18(uint16 k);
uint8 MaridiaSnail_Func_19(uint16 k);
@@ -3983,61 +3970,59 @@ void WreckedShipOrangeZoomer_Main(void);
void sub_A3E168(uint16 k);
// Bank A4
-uint16 Crocomire_Func_10(uint16 k, uint16 j);
-uint16 Crocomire_Func_11(uint16 k, uint16 j);
-uint16 Crocomire_Func_12(uint16 k, uint16 j);
-uint16 Crocomire_Func_13(uint16 k, uint16 j);
-uint16 Crocomire_Func_14(uint16 k, uint16 j);
-uint16 Crocomire_Func_15(uint16 k, uint16 j);
-uint16 Crocomire_Func_16(uint16 k, uint16 j);
-uint16 Crocomire_Func_17(uint16 k, uint16 j);
-uint16 Crocomire_Func_18(uint16 k, uint16 j);
-uint16 Crocomire_Func_19(uint16 k, uint16 j);
-uint16 Crocomire_Func_2(uint16 k, uint16 j);
-uint16 Crocomire_Func_20(uint16 k);
-uint16 Crocomire_Func_21(uint16 k, uint16 j);
-uint16 Crocomire_Func_22(uint16 k, uint16 j);
-uint16 Crocomire_Func_23(uint16 k, uint16 j);
-uint16 Crocomire_Func_24(uint16 k, uint16 j);
-uint16 Crocomire_Func_25(uint16 k, uint16 j);
-uint16 Crocomire_Func_26(uint16 k, uint16 j);
-uint16 Crocomire_Func_3(uint16 k, uint16 j);
-uint16 Crocomire_Func_4(uint16 k, uint16 j);
-uint16 Crocomire_Func_5(uint16 k, uint16 j);
+const uint16 *Crocomire_Func_10(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_11(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_12(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_13(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_14(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_15(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_16(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_17(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_18(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_19(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_2(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_20(uint16 k);
+const uint16 *Crocomire_Func_21(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_22(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_23(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_24(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_25(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_26(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_3(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_4(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Func_5(uint16 k, const uint16 *jp);
uint16 Crocomire_Func_67(void);
-uint16 Crocomire_Func_7(uint16 k, uint16 j);
-uint16 Crocomire_Func_8(uint16 k, uint16 j);
-uint16 Crocomire_Func_87(uint16 j, uint16 a);
-uint16 Crocomire_Func_9(uint16 k, uint16 j);
-uint16 Crocomire_Instr_1(uint16 k, uint16 j);
-uint16 Crocomire_Instr_10(uint16 k, uint16 j);
-uint16 Crocomire_Instr_11(uint16 k, uint16 j);
-uint16 Crocomire_Instr_12(uint16 k, uint16 j);
-uint16 Crocomire_Instr_13(uint16 k, uint16 j);
-uint16 Crocomire_Instr_14(uint16 k, uint16 j);
-uint16 Crocomire_Instr_15(uint16 k, uint16 j);
-uint16 Crocomire_Instr_16(uint16 k, uint16 j);
-uint16 Crocomire_Instr_17(uint16 k, uint16 j);
-uint16 Crocomire_Instr_18(uint16 k, uint16 j);
-uint16 Crocomire_Instr_19(uint16 k, uint16 j);
-uint16 Crocomire_Instr_2(uint16 k, uint16 j);
-uint16 Crocomire_Instr_20(uint16 k, uint16 j);
-uint16 Crocomire_Instr_21(uint16 k, uint16 j);
-uint16 Crocomire_Instr_22(uint16 k, uint16 j);
-uint16 Crocomire_Instr_23(uint16 k, uint16 j);
-uint16 Crocomire_Instr_24(uint16 k, uint16 j);
-uint16 Crocomire_Instr_25(uint16 k, uint16 j);
-uint16 Crocomire_Instr_26(uint16 k, uint16 j);
-uint16 Crocomire_Instr_27(uint16 k, uint16 j);
-uint16 Crocomire_Instr_3(uint16 k, uint16 j);
-uint16 Crocomire_Instr_4(uint16 k, uint16 j);
-uint16 Crocomire_Instr_5(uint16 k, uint16 j);
-uint16 Crocomire_Instr_6(uint16 k, uint16 j);
-uint16 Crocomire_Instr_7(uint16 k, uint16 j);
-uint16 Crocomire_Instr_8(uint16 k, uint16 j);
-uint16 Crocomire_Instr_9(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A4(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A4(uint16 k, uint16 j);
+const uint16 *Crocomire_Func_7(uint16 k, const uint16 *j);
+const uint16 *Crocomire_Func_8(uint16 k, const uint16 *j);
+const uint16 *Crocomire_Func_87(const uint16 *jp, uint16 a);
+const uint16 *Crocomire_Func_9(uint16 k, const uint16 *j);
+const uint16 *Crocomire_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_19(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_20(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_21(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_22(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_23(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_24(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_25(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_26(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_27(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Crocomire_Instr_9(uint16 k, const uint16 *jp);
void CrocomireTongue_Init(void);
void CrocomireTongue_Main(void);
void Crocomire_8BA4(void);
@@ -4107,45 +4092,36 @@ void Enemy_NormalTouchAI_A4(void);
void GetCurEnemyIndex(void);
// Bank A5
-uint16 Draygon_Instr_1(uint16 k, uint16 j);
-uint16 Draygon_Instr_10(uint16 k, uint16 j);
-uint16 Draygon_Instr_11(uint16 k, uint16 j);
-uint16 Draygon_Instr_12(uint16 k, uint16 j);
-uint16 Draygon_Instr_13(uint16 k, uint16 j);
-uint16 Draygon_Instr_14(uint16 k, uint16 j);
-uint16 Draygon_Instr_15(uint16 k, uint16 j);
-uint16 Draygon_Instr_16(uint16 k, uint16 j);
-uint16 Draygon_Instr_17(uint16 k, uint16 j);
-uint16 Draygon_Instr_18(uint16 k, uint16 j);
-uint16 Draygon_Instr_19(uint16 k, uint16 j);
-uint16 Draygon_Instr_2(uint16 k, uint16 j);
-uint16 Draygon_Instr_20(uint16 k, uint16 j);
-uint16 Draygon_Instr_21(uint16 k, uint16 j);
-uint16 Draygon_Instr_22(uint16 k, uint16 j);
-uint16 Draygon_Instr_23(uint16 k, uint16 j);
-uint16 Draygon_Instr_24(uint16 k, uint16 j);
-uint16 Draygon_Instr_25(uint16 k, uint16 j);
-uint16 Draygon_Instr_26(uint16 k, uint16 j);
-uint16 Draygon_Instr_27(uint16 k, uint16 j);
-uint16 Draygon_Instr_28(uint16 k, uint16 j);
-uint16 Draygon_Instr_29(uint16 k, uint16 j);
-uint16 Draygon_Instr_3(uint16 k, uint16 j);
-uint16 Draygon_Instr_30(uint16 k, uint16 j);
-uint16 Draygon_Instr_4(uint16 k, uint16 j);
-uint16 Draygon_Instr_5(uint16 k, uint16 j);
-uint16 Draygon_Instr_53(uint16 k, uint16 j);
-uint16 Draygon_Instr_54(uint16 k, uint16 j);
-uint16 Draygon_Instr_55(uint16 k, uint16 j);
-uint16 Draygon_Instr_6(uint16 k, uint16 j);
-uint16 Draygon_Instr_7(uint16 k, uint16 j);
-uint16 Draygon_Instr_8(uint16 k, uint16 j);
-uint16 Draygon_Instr_9(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2_A5(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A5(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_A5(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A5(uint16 k, uint16 j);
-uint16 EnemyInstr_StopScript_A5(uint16 k, uint16 j);
-uint16 EnemyInstr_WaitNframes_A5(uint16 k, uint16 j);
+const uint16 *Draygon_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_19(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_20(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_21(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_22(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_23(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_24(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_25(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_26(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_27(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_28(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_29(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_30(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Draygon_Instr_9(uint16 k, const uint16 *jp);
void CreateADudShot_A5(void);
void Draygon_Func_1(void);
void Draygon_Func_10(void);
@@ -4230,86 +4206,78 @@ void sub_A5960D(void);
void sub_A5E9F5(void);
// Bank A6
-uint16 BabyMetroid_DBCB_DoubleRet(uint16 a);
-uint16 BabyMetroid_Incr2(uint16 k);
uint16 BabyMetroid_Instr_1(uint16 k);
uint16 BabyMetroid_Instr_2(uint16 k);
uint16 BabyMetroid_Instr_3(uint16 k);
-uint16 BabyMetroid_Instr_4(uint16 k);
-uint16 CeresDoor_Goto(uint16 j);
-uint16 CeresDoor_Incr(uint16 j);
-uint16 CeresDoor_Instr_1(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_2(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_3(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_4(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_5(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_6(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_7(uint16 k, uint16 j);
-uint16 CeresDoor_Instr_8(uint16 k, uint16 j);
+uint16 BabyMetroid_Goto(uint16 k);
+const uint16 *CeresDoor_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *CeresDoor_Instr_8(uint16 k, const uint16 *jp);
uint16 CeresRidley_AC30(uint16 a);
uint16 CeresRidley_Func_30(uint16 a);
uint16 CeresRidley_Func_31(uint16 a);
-uint16 CeresSteam_Instr_1(uint16 k, uint16 j);
-uint16 CeresSteam_Instr_2(uint16 k, uint16 j);
-uint16 CeresSteam_Instr_3(uint16 k, uint16 j);
-uint16 CeresSteam_Instr_4(uint16 k, uint16 j);
-uint16 CeresSteam_Instr_5(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A6(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A6(uint16 k, uint16 j);
-uint16 FakeKraid_Instr_1(uint16 k, uint16 j);
-uint16 FakeKraid_Instr_2(uint16 k, uint16 j);
-uint16 FakeKraid_Instr_3(uint16 k, uint16 j);
-uint16 FakeKraid_Instr_4(uint16 k, uint16 j);
-uint16 FakeKraid_Instr_5(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_1(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_10(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_11(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_12(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_13(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_14(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_15(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_16(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_17(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_18(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_19(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_2(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_20(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_21(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_22(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_23(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_24(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_3(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_4(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_5(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_6(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_7(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_8(uint16 k, uint16 j);
-uint16 FireGeyser_Instr_9(uint16 k, uint16 j);
+const uint16 *CeresSteam_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *CeresSteam_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *CeresSteam_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *CeresSteam_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *CeresSteam_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *FakeKraid_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *FakeKraid_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *FakeKraid_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *FakeKraid_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *FakeKraid_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_19(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_20(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_21(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_22(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_23(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_24(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *FireGeyser_Instr_9(uint16 k, const uint16 *jp);
uint16 NuclearWaffle_Func_5(uint16 a);
uint16 NuclearWaffle_Func_6(uint16 a);
-uint16 Ridley_E90C(uint16 k, uint16 j, uint16 a);
+const uint16 *Ridley_E90C(uint16 k, const uint16 *j, uint16 a);
uint16 Ridley_Func_122(void);
uint16 Ridley_Func_7(void);
-uint16 Ridley_Instr_1(uint16 k, uint16 j);
-uint16 Ridley_Instr_10(uint16 k, uint16 j);
-uint16 Ridley_Instr_11(uint16 k, uint16 j);
-uint16 Ridley_Instr_12(uint16 k, uint16 j);
-uint16 Ridley_Instr_13(uint16 k, uint16 j);
-uint16 Ridley_Instr_14(uint16 k, uint16 j);
-uint16 Ridley_Instr_15(uint16 k, uint16 j);
-uint16 Ridley_Instr_16(uint16 k, uint16 j);
-uint16 Ridley_Instr_2(uint16 k, uint16 j);
-uint16 Ridley_Instr_3(uint16 k, uint16 j);
-uint16 Ridley_Instr_4(uint16 k, uint16 j);
-uint16 Ridley_Instr_5(uint16 k, uint16 j);
-uint16 Ridley_Instr_6(uint16 k, uint16 j);
-uint16 Ridley_Instr_7(uint16 k, uint16 j);
-uint16 Ridley_Instr_8(uint16 k, uint16 j);
-uint16 Ridley_Instr_9(uint16 k, uint16 j);
+const uint16 *Ridley_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Ridley_Instr_9(uint16 k, const uint16 *jp);
uint16 SpikeyPlatform_Func_5(uint16 k);
uint16 Zebetites_Func_9(void);
-uint16 sub_A6E4E9(uint16 j);
-uint16 sub_A6E514(uint16 j);
uint8 CeresRidley_Func_12(void);
uint8 CeresRidley_Func_8(uint16 a);
uint8 HandleTypewriterText(void);
@@ -4589,22 +4557,18 @@ void sub_A6DF60(void);
// Bank A7
PairU16 Phantoon_SetColorBasedOnHp_FindEntry(uint16 k);
-uint16 EnemyInstr_Call_A7(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2_A7(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A7(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_A7(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A7(uint16 k, uint16 j);
+const uint16 *EnemyInstr_Call_A7(uint16 k, const uint16 *jp);
uint16 Kraid_CheckIfDead(void);
uint16 Kraid_ExecuteInstr(void);
-uint16 Kraid_Instr_1(uint16 k, uint16 j);
-uint16 Kraid_Instr_9(uint16 k, uint16 j);
-uint16 Kraid_Instr_DecYpos(uint16 k, uint16 j);
-uint16 Kraid_Instr_IncrYpos_Shake(uint16 k, uint16 j);
-uint16 Kraid_Instr_MoveHimRight(uint16 k, uint16 j);
-uint16 Kraid_Instr_PlaySound_0x76(uint16 k, uint16 j);
-uint16 Kraid_Instr_XposMinus3(uint16 k, uint16 j);
-uint16 Kraid_Instr_XposMinus3b(uint16 k, uint16 j);
-uint16 Kraid_Instr_XposPlus3(uint16 k, uint16 j);
+const uint16 *Kraid_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_9(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_DecYpos(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_IncrYpos_Shake(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_MoveHimRight(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_PlaySound_0x76(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_XposMinus3(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_XposMinus3b(uint16 k, const uint16 *jp);
+const uint16 *Kraid_Instr_XposPlus3(uint16 k, const uint16 *jp);
uint16 Kraid_ProcessKraidInstr(void);
uint16 Phantoon_CalculateNthTransitionColorComponentFromXtoY(uint16 a, uint16 k, uint16 j);
uint16 Phantoon_Func_10_CalculateNthTransitionColorFromXtoY(uint16 a, uint16 k, uint16 j);
@@ -4836,86 +4800,80 @@ void sub_A7A92A(void);
// Bank A8
uint16 Beetom_Func_2(void);
-uint16 Beetom_Instr_1(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2_A8(uint16 k, uint16 j);
-uint16 EnemyInstr_DisableOffScreenProcessing_A8(uint16 k, uint16 j);
-uint16 EnemyInstr_EnableOffScreenProcessing_A8(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_A8(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_A8(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_A8(uint16 k, uint16 j);
+const uint16 *Beetom_Instr_1(uint16 k, const uint16 *jp);
uint16 Fune_Func_3(void);
-uint16 Fune_Instr_1(uint16 k, uint16 j);
-uint16 Fune_Instr_2(uint16 k, uint16 j);
-uint16 Fune_Instr_3(uint16 k, uint16 j);
-uint16 Fune_Instr_4(uint16 k, uint16 j);
-uint16 Fune_Instr_5(uint16 k, uint16 j);
-uint16 Fune_Instr_6(uint16 k, uint16 j);
-uint16 Fune_Instr_7(uint16 k, uint16 j);
-uint16 KiHunter_Instr_1(uint16 k, uint16 j);
-uint16 KiHunter_Instr_2(uint16 k, uint16 j);
-uint16 KiHunter_Instr_3(uint16 k, uint16 j);
-uint16 KiHunter_Instr_4(uint16 k, uint16 j);
-uint16 KiHunter_Instr_5(uint16 k, uint16 j);
-uint16 MiniDraygon_Instr_1(uint16 k, uint16 j);
-uint16 MiniDraygon_Instr_2(uint16 k, uint16 j);
-uint16 MiniDraygon_Instr_3(uint16 k, uint16 j);
-uint16 MiniDraygon_Instr_4(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_1(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_10(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_11(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_12(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_13(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_14(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_15(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_16(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_2(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_3(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_4(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_5(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_6(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_7(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_8(uint16 k, uint16 j);
-uint16 NorfairLavaMan_Instr_9(uint16 k, uint16 j);
+const uint16 *Fune_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Fune_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *KiHunter_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *KiHunter_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *KiHunter_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *KiHunter_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *KiHunter_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *MiniDraygon_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *MiniDraygon_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *MiniDraygon_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *MiniDraygon_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *NorfairLavaMan_Instr_9(uint16 k, const uint16 *jp);
uint16 WalkingLavaSeahorse_Func_2(uint16 k);
-uint16 WalkingLavaSeahorse_Instr_1(uint16 k, uint16 j);
-uint16 WalkingLavaSeahorse_Instr_2(uint16 k, uint16 j);
-uint16 WalkingLavaSeahorse_Instr_3(uint16 k, uint16 j);
-uint16 WalkingLavaSeahorse_Instr_4(uint16 k, uint16 j);
-uint16 WalkingLavaSeahorse_Instr_5(uint16 k, uint16 j);
-uint16 WalkingLavaSeahorse_Instr_6(uint16 k, uint16 j);
+const uint16 *WalkingLavaSeahorse_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *WalkingLavaSeahorse_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *WalkingLavaSeahorse_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *WalkingLavaSeahorse_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *WalkingLavaSeahorse_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *WalkingLavaSeahorse_Instr_6(uint16 k, const uint16 *jp);
uint16 WreckedShipGhost_Func_8(void);
-uint16 WreckedShipRobot_CommonInstr(uint16 k, uint16 j);
-uint16 WreckedShipRobot_D10C(uint16 k, uint16 j);
-uint16 WreckedShipRobot_D147(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_1(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_10(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_11(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_12(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_13(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_14(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_15(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_16(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_17(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_18(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_2(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_3(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_4(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_5(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_6(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_7(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_8(uint16 k, uint16 j);
-uint16 WreckedShipRobot_Instr_9(uint16 k, uint16 j);
-uint16 WreckedShipSpark_Instr_1(uint16 k, uint16 j);
-uint16 WreckedShipSpark_Instr_2(uint16 k, uint16 j);
+const uint16 *WreckedShipRobot_CommonInstr(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_D10C(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_D147(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipRobot_Instr_9(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipSpark_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *WreckedShipSpark_Instr_2(uint16 k, const uint16 *jp);
uint16 YappingMaw_Func_16(uint16 a);
uint16 YappingMaw_Func_17(uint16 a);
-uint16 YappingMaw_Instr_1(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_2(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_3(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_4(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_5(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_6(uint16 k, uint16 j);
-uint16 YappingMaw_Instr_7(uint16 k, uint16 j);
+const uint16 *YappingMaw_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *YappingMaw_Instr_7(uint16 k, const uint16 *jp);
void Beetom_Func_1(void);
void Beetom_Func_10(void);
void Beetom_Func_11(void);
@@ -5161,72 +5119,71 @@ void sub_A8F6DC(uint16 k, uint16 j);
// Bank A9
uint16 ComputeCosMult(uint16 a);
uint16 ComputeSinMult(uint16 a);
-uint16 EnemyInstr_Sleep_A9(uint16 k, uint16 j);
-uint16 HandleRoomPaletteInstructionList(uint16 a);
+uint16 HandleMotherBrainInstructionList(uint16 a);
uint16 MotherBrain_DetermineShotReactionType(void);
uint16 MotherBrain_Func_1_DoubleRetTmp(void);
uint16 MotherBrain_Instr_AimRingsAtSamus(uint16 k);
uint16 MotherBrain_Instr_AimRingsAtShitroid(uint16 k);
uint16 MotherBrain_Instr_DisableNeckMovement(uint16 k);
-uint16 MotherBrain_Instr_Down2Right15(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_Down4Right6(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_Down2Right15(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_Down4Right6(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_EnableNeckMovementGoto(uint16 k);
uint16 MotherBrain_Instr_Goto(uint16 k);
uint16 MotherBrain_Instr_Goto2(uint16 k);
uint16 MotherBrain_Instr_GotoEitherOr(uint16 k);
-uint16 MotherBrain_Instr_IncrBeamAttackPhase(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_IncrBeamAttackPhase(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_IncrShitroidAttackCtr(uint16 k);
uint16 MotherBrain_Instr_MaybeGoto(uint16 k);
uint16 MotherBrain_Instr_MaybeGoto2(uint16 k);
-uint16 MotherBrain_Instr_MoveBodyUp10Left4(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveBodyUp12Right2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveBodyUp16Left4(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown1(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown10Right2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown12Left4(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown16Right2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown1Left3(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown2Right1(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveDown4Right2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveLeft2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveRight2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveUp1(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveUp1Right3_Sfx(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveUp2Left15_Sfx(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveUp2Right1(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_MoveUp4Left6(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_MoveBodyUp10Left4(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveBodyUp12Right2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveBodyUp16Left4(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown1(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown10Right2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown12Left4(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown16Right2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown1Left3(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown2Right1(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveDown4Right2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveLeft2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveRight2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveUp1(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveUp1Right3_Sfx(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveUp2Left15_Sfx(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveUp2Right1(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_MoveUp4Left6(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_QueueSfx2(uint16 k);
uint16 MotherBrain_Instr_QueueSfx3(uint16 k);
uint16 MotherBrain_Instr_QueueShitroidAttackSfx(uint16 k);
uint16 MotherBrain_Instr_SetMainShakeTimer50(uint16 k);
-uint16 MotherBrain_Instr_SetPose_Crouched(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_SetPose_CrouchedTrans(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_SetPose_DeathBeamMode(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_SetPose_LeaningDown(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_SetPose_Standing(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_SetPose_Walking(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_SetPose_Crouched(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_SetPose_CrouchedTrans(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_SetPose_DeathBeamMode(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_SetPose_LeaningDown(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_SetPose_Standing(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_SetPose_Walking(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_SetShitroidAttackCtr0(uint16 k);
uint16 MotherBrain_Instr_SetupFxForRainbowBeam(uint16 k);
uint16 MotherBrain_Instr_SpawnBlueRingEproj(uint16 k);
uint16 MotherBrain_Instr_SpawnBombEproj(uint16 k);
-uint16 MotherBrain_Instr_SpawnDeathBeamEproj(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_SpawnDeathBeamEproj(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_SpawnDroolEproj(uint16 k);
-uint16 MotherBrain_Instr_SpawnEprojToOffset(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_SpawnEprojToOffset(uint16 k, const uint16 *jp);
uint16 MotherBrain_Instr_SpawnLaserEproj(uint16 k);
uint16 MotherBrain_Instr_SpawnPurpleBreath(uint16 k);
uint16 MotherBrain_Instr_SpawnRainbowEproj(uint16 k);
-uint16 MotherBrain_Instr_Up2Left1_Sfx(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_Up2Left1_Sfx2(uint16 k, uint16 j);
-uint16 MotherBrain_Instr_Up4Left2(uint16 k, uint16 j);
+const uint16 *MotherBrain_Instr_Up2Left1_Sfx(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_Up2Left1_Sfx2(uint16 k, const uint16 *jp);
+const uint16 *MotherBrain_Instr_Up4Left2(uint16 k, const uint16 *jp);
uint16 Shitroid_HandleCrySoundEffect(uint16 k, uint16 a);
-uint16 Shitroid_Instr_1(uint16 k, uint16 j);
-uint16 Shitroid_Instr_2(uint16 k, uint16 j);
-uint16 Shitroid_Instr_3(uint16 k, uint16 j);
-uint16 Shitroid_Instr_4(uint16 k, uint16 j);
-uint16 Shitroid_Instr_5(uint16 k, uint16 j);
-uint16 Shitroid_Instr_6(uint16 k, uint16 j);
+const uint16 *Shitroid_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Shitroid_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Shitroid_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Shitroid_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Shitroid_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Shitroid_Instr_6(uint16 k, const uint16 *jp);
uint16 sub_A9C46C(uint16 a, uint16 j);
-uint16 sub_A9ECD0(uint16 k, uint16 j);
+const uint16 *sub_A9ECD0(uint16 k, const uint16 *jp);
uint8 DeadMonsters_Func_3(uint16 k);
uint8 DeadTorizo_Func_0(void);
uint8 MotherBrain_MakeHerCrouch(void);
@@ -5250,7 +5207,7 @@ uint8 Shitroid_CheckIfOnScreen(uint16 k);
uint8 Shitroid_Func_1(uint16 k, uint16 j);
uint8 Shitroid_Func_2(uint16 k);
uint8 Shitroid_Func_27(uint16 k);
-void CopyMoveCorpseRottingRotEntry(uint16 a);
+void CopyMoveCorpseRottingRotEntry(LongPtr r20, uint16 a);
void CorpseRottingRotEntryFinishedHook(void);
void DeadMonsters_Func_1(uint16 k);
void DeadMonsters_Func_2(uint16 k);
@@ -5306,7 +5263,7 @@ void Enemy_IncreaseYpos(uint16 k, uint16 a);
void Enemy_NormalFrozenAI_A9(void);
void Enemy_SetInstrList(uint16 k, uint16 a);
void HandleSamusRainbowPaletteAnimation(uint16 k);
-void InitializeCorpseRottingDataTable(uint16 k, uint16 a);
+void InitializeCorpseRottingDataTable(uint16 *table, uint16 a);
void InitializeEnemyCorpseRotting(uint16 k, uint16 j);
void MotherBomb_FiringDeathBeam(void);
void MotherBomb_FiringDeathBeam_0(void);
@@ -5665,94 +5622,87 @@ void Zoomer_CorpseRottingMoveFunc_2(uint16 j, uint16 k);
void Zoomer_CorpseRottingMoveFunc_4(uint16 j, uint16 k);
// Bank AA
-uint16 EnemyInstr_CopyToVram_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_StopScript_AA(uint16 k, uint16 j);
-uint16 EnemyInstr_WaitNframes_AA(uint16 k, uint16 j);
-uint16 Enemy_ClearAiPreInstr_AA(uint16 k, uint16 j);
-uint16 Enemy_SetAiPreInstr_AA(uint16 k, uint16 j);
-uint16 Shaktool_D956(uint16 k, uint16 j, uint16 a);
-uint16 Shaktool_Instr_1(uint16 k, uint16 j);
-uint16 Shaktool_Instr_10(uint16 k, uint16 j);
-uint16 Shaktool_Instr_11(uint16 k, uint16 j);
-uint16 Shaktool_Instr_12(uint16 k, uint16 j);
-uint16 Shaktool_Instr_13(uint16 k, uint16 j);
-uint16 Shaktool_Instr_14(uint16 k, uint16 j);
-uint16 Shaktool_Instr_2(uint16 k, uint16 j);
-uint16 Shaktool_Instr_3(uint16 k, uint16 j);
-uint16 Shaktool_Instr_4(uint16 k, uint16 j);
-uint16 Shaktool_Instr_5(uint16 k, uint16 j);
-uint16 Shaktool_Instr_6(uint16 k, uint16 j);
-uint16 Shaktool_Instr_7(uint16 k, uint16 j);
-uint16 Shaktool_Instr_8(uint16 k, uint16 j);
-uint16 Shaktool_Instr_9(uint16 k, uint16 j);
+const uint16 *Enemy_ClearAiPreInstr_AA(uint16 k, const uint16 *jp);
+const uint16 *Enemy_SetAiPreInstr_AA(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_D956(uint16 k, const uint16 *j, uint16 a);
+const uint16 *Shaktool_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Shaktool_Instr_9(uint16 k, const uint16 *jp);
uint16 Torizo_Func_12(uint16 k);
-uint16 Torizo_Instr_1(uint16 k, uint16 j);
-uint16 Torizo_Instr_10(uint16 k, uint16 j);
-uint16 Torizo_Instr_11(uint16 k, uint16 j);
-uint16 Torizo_Instr_12(uint16 k, uint16 j);
-uint16 Torizo_Instr_13(uint16 k, uint16 j);
-uint16 Torizo_Instr_14(uint16 k, uint16 j);
-uint16 Torizo_Instr_15(uint16 k, uint16 j);
-uint16 Torizo_Instr_16(uint16 k, uint16 j);
-uint16 Torizo_Instr_17(uint16 k, uint16 j);
-uint16 Torizo_Instr_18(uint16 k, uint16 j);
-uint16 Torizo_Instr_19(uint16 k, uint16 j);
-uint16 Torizo_Instr_2(uint16 k, uint16 j);
-uint16 Torizo_Instr_20(uint16 k, uint16 j);
-uint16 Torizo_Instr_21(uint16 k, uint16 j);
-uint16 Torizo_Instr_22(uint16 k, uint16 j);
-uint16 Torizo_Instr_23(uint16 k, uint16 j);
-uint16 Torizo_Instr_24(uint16 k, uint16 j);
-uint16 Torizo_Instr_25(uint16 k, uint16 j);
-uint16 Torizo_Instr_26(uint16 k, uint16 j);
-uint16 Torizo_Instr_27(uint16 k, uint16 j);
-uint16 Torizo_Instr_28(uint16 k, uint16 j);
-uint16 Torizo_Instr_29(uint16 k, uint16 j);
-uint16 Torizo_Instr_3(uint16 k, uint16 j);
-uint16 Torizo_Instr_30(uint16 k, uint16 j);
-uint16 Torizo_Instr_31(uint16 k, uint16 j);
-uint16 Torizo_Instr_32(uint16 k, uint16 j);
-uint16 Torizo_Instr_33(uint16 k, uint16 j);
-uint16 Torizo_Instr_34(uint16 k, uint16 j);
-uint16 Torizo_Instr_35(uint16 k, uint16 j);
-uint16 Torizo_Instr_36(uint16 k, uint16 j);
-uint16 Torizo_Instr_37(uint16 k, uint16 j);
-uint16 Torizo_Instr_38(uint16 k, uint16 j);
-uint16 Torizo_Instr_39(uint16 k, uint16 j);
-uint16 Torizo_Instr_4(uint16 k, uint16 j);
-uint16 Torizo_Instr_40(uint16 k, uint16 j);
-uint16 Torizo_Instr_41(uint16 k, uint16 j);
-uint16 Torizo_Instr_42(uint16 k, uint16 j);
-uint16 Torizo_Instr_43(uint16 k, uint16 j);
-uint16 Torizo_Instr_44(uint16 k, uint16 j);
-uint16 Torizo_Instr_45(uint16 k, uint16 j);
-uint16 Torizo_Instr_46(uint16 k, uint16 j);
-uint16 Torizo_Instr_47(uint16 k, uint16 j);
-uint16 Torizo_Instr_48(uint16 k, uint16 j);
-uint16 Torizo_Instr_49(uint16 k, uint16 j);
-uint16 Torizo_Instr_5(uint16 k, uint16 j);
-uint16 Torizo_Instr_50(uint16 k, uint16 j);
-uint16 Torizo_Instr_51(uint16 k, uint16 j);
-uint16 Torizo_Instr_52(uint16 k, uint16 j);
-uint16 Torizo_Instr_53(uint16 k, uint16 j);
-uint16 Torizo_Instr_54(uint16 k, uint16 j);
-uint16 Torizo_Instr_55(uint16 k, uint16 j);
-uint16 Torizo_Instr_56(uint16 k, uint16 j);
-uint16 Torizo_Instr_57(uint16 k, uint16 j);
-uint16 Torizo_Instr_58(uint16 k, uint16 j);
-uint16 Torizo_Instr_59(uint16 k, uint16 j);
-uint16 Torizo_Instr_6(uint16 k, uint16 j);
-uint16 Torizo_Instr_60(uint16 k, uint16 j);
-uint16 Torizo_Instr_61(uint16 k, uint16 j);
-uint16 Torizo_Instr_62(uint16 k, uint16 j);
-uint16 Torizo_Instr_63(uint16 k, uint16 j);
-uint16 Torizo_Instr_7(uint16 k, uint16 j);
-uint16 Torizo_Instr_8(uint16 k, uint16 j);
-uint16 Torizo_Instr_9(uint16 k, uint16 j);
+const uint16 *Torizo_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_19(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_20(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_21(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_22(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_23(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_24(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_25(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_26(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_27(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_28(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_29(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_30(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_31(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_32(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_33(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_34(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_35(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_36(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_37(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_38(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_39(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_40(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_41(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_42(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_43(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_44(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_45(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_46(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_47(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_48(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_49(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_50(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_51(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_52(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_53(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_54(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_55(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_56(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_57(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_58(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_59(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_60(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_61(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_62(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_63(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Torizo_Instr_9(uint16 k, const uint16 *jp);
void ChozoStatue_Init(void);
void ChozoStatue_Main(void);
void Enemy_GrappleReact_CancelBeam_AA(void);
@@ -5840,35 +5790,30 @@ void MotherBrain_SealWall(void);
void TurnOffLightsForShitroidDeath(void);
// Bank B2
-uint16 EnemyInstr_DecTimerAndGoto2_B2(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_B2(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_B2(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_B2(uint16 k, uint16 j);
-uint16 EnemyInstr_WaitNframes_B2(uint16 k, uint16 j);
uint16 SpacePirates_Func_10(void);
uint16 SpacePirates_Func_8(void);
uint16 SpacePirates_Func_9(void);
-uint16 SpacePirates_Instr_11(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_12(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_13(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_14(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_15(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_16(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_17(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_18(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_19(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_20(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_21(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_FireLaserL(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_FireLaserR(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_PlaySfx(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_PrepareWallJumpL(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_PrepareWallJumpR(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_RandomNewDirFaceL(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_RandomNewDirFaceR(uint16 k, uint16 j);
-uint16 SpacePirates_Instr_SetEnemyFunc(uint16 k, uint16 j);
+const uint16 *SpacePirates_Instr_11(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_12(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_13(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_14(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_15(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_16(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_17(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_18(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_19(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_20(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_21(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_FireLaserL(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_FireLaserR(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_PlaySfx(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_PrepareWallJumpL(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_PrepareWallJumpR(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_RandomNewDirFaceL(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_RandomNewDirFaceR(uint16 k, const uint16 *jp);
+const uint16 *SpacePirates_Instr_SetEnemyFunc(uint16 k, const uint16 *jp);
void Enemy_GrappleReact_CancelBeam_B2(void);
void Enemy_NormalFrozenAI_B2(void);
void NinjaSpacePirates_Init(void);
@@ -5910,30 +5855,26 @@ void sub_B2F554(void);
void sub_B2F5B3(void);
// Bank B3
-uint16 Botwoon_Instr_1(uint16 k, uint16 j);
-uint16 Botwoon_Instr_10(uint16 k, uint16 j);
-uint16 Botwoon_Instr_2(uint16 k, uint16 j);
-uint16 Botwoon_Instr_3(uint16 k, uint16 j);
-uint16 Botwoon_Instr_4(uint16 k, uint16 j);
-uint16 Botwoon_Instr_5(uint16 k, uint16 j);
-uint16 Botwoon_Instr_6(uint16 k, uint16 j);
-uint16 Botwoon_Instr_7(uint16 k, uint16 j);
-uint16 Botwoon_Instr_8(uint16 k, uint16 j);
-uint16 Botwoon_Instr_9(uint16 k, uint16 j);
-uint16 Botwoon_Instr_QueueSpitSfx(uint16 k, uint16 j);
-uint16 Botwoon_Instr_SetSpitting(uint16 k, uint16 j);
-uint16 EnemyInstr_DecTimerAndGoto2_B3(uint16 k, uint16 j);
-uint16 EnemyInstr_Goto_B3(uint16 k, uint16 j);
-uint16 EnemyInstr_SetTimer_B3(uint16 k, uint16 j);
-uint16 EnemyInstr_Sleep_B3(uint16 k, uint16 j);
-uint16 Enemy_ClearAiPreInstr_B3(uint16 k, uint16 j);
-uint16 Enemy_SetAiPreInstr_B3(uint16 k, uint16 j);
-uint16 EscapeDachora_Instr_1(uint16 k, uint16 j);
-uint16 EscapeDachora_Instr_2(uint16 k, uint16 j);
-uint16 EscapeDachora_Instr_3(uint16 k, uint16 j);
-uint16 EscapeDachora_Instr_4(uint16 k, uint16 j);
-uint16 EscapeEtecoon_Instr_1(uint16 k, uint16 j);
-uint16 EscapeEtecoon_Instr_2(uint16 k, uint16 j);
+const uint16 *Botwoon_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_10(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_5(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_6(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_7(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_8(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_9(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_QueueSpitSfx(uint16 k, const uint16 *jp);
+const uint16 *Botwoon_Instr_SetSpitting(uint16 k, const uint16 *jp);
+const uint16 *Enemy_ClearAiPreInstr_B3(uint16 k, const uint16 *jp);
+const uint16 *Enemy_SetAiPreInstr_B3(uint16 k, const uint16 *jp);
+const uint16 *EscapeDachora_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *EscapeDachora_Instr_2(uint16 k, const uint16 *jp);
+const uint16 *EscapeDachora_Instr_3(uint16 k, const uint16 *jp);
+const uint16 *EscapeDachora_Instr_4(uint16 k, const uint16 *jp);
+const uint16 *EscapeEtecoon_Instr_1(uint16 k, const uint16 *jp);
+const uint16 *EscapeEtecoon_Instr_2(uint16 k, const uint16 *jp);
void Botwoon_Func_1(uint16 k);
void Botwoon_Func_10(uint16 k);
void Botwoon_Func_11(uint16 k);
@@ -6037,7 +5978,6 @@ void SpriteObject_Instr_Goto(void);
void SpriteObject_Instr_RepeatLast(void);
void SpriteObject_Instr_Terminate(void);
void VerifySRAM(void);
-void DecompressToMem_IpArg(const void* p);
#define fnDrawTimer 0x809F6C
#define fnnullsub_1 0x818AB7
@@ -9514,4 +9454,4 @@ void DecompressToMem_IpArg(const void* p);
#define fnSpriteObject_Instr_Goto 0xB4BD12
#define fnlocret_828C81 0x828C81
#define fnlocret_8B9585 0x8B9585
-#define FUNC16(x) ((fn##x) & 0xffff)
+#define FUNC16(x) ((fn##x) & 0xffff)
\ No newline at end of file
diff --git a/src/ida_types.h b/src/ida_types.h
index 90d78b8..3e29e4a 100644
--- a/src/ida_types.h
+++ b/src/ida_types.h
@@ -246,11 +246,6 @@ typedef struct LoadBg_E {
uint16 field_2;
}LoadBg_E;
-/* 24 */
-typedef struct LoadBg_28 {
- uint16 field_0;
- uint16 field_2;
-}LoadBg_28;
/* 25 */
typedef struct LoadBg_4 {
@@ -1059,11 +1054,6 @@ typedef struct StartDmaCopy {
VoidP das;
} StartDmaCopy;
-/* 102 */
-typedef struct DecompressToParams {
- LongPtr field_0;
-} DecompressToParams;
-
/* 103 */
typedef struct OpcodeData3 {
uint16 field_0;
@@ -1190,16 +1180,19 @@ typedef struct DemoRoomData {
} DemoRoomData;
/* 118 */
-typedef struct PauseScreenSpriteAnimationData {
- VoidP unused;
- VoidP lr_highlight;
- VoidP item_selector;
- VoidP unused2;
- VoidP unused3;
- VoidP map_scroll_arrow_up;
- VoidP map_scroll_arrow_down;
- VoidP map_scroll_arrow_right;
- VoidP map_scroll_arrow_left;
+typedef union PauseScreenSpriteAnimationData {
+ struct {
+ VoidP unused;
+ VoidP lr_highlight;
+ VoidP item_selector;
+ VoidP unused2;
+ VoidP unused3;
+ VoidP map_scroll_arrow_up;
+ VoidP map_scroll_arrow_down;
+ VoidP map_scroll_arrow_right;
+ VoidP map_scroll_arrow_left;
+ };
+ VoidP arr[9];
} PauseScreenSpriteAnimationData;
/* 119 */
@@ -1559,6 +1552,7 @@ enum Consts_81 {
addr_kMenuTilemap_ClearSamusA = 0xB69A,
addr_kMenuTilemap_DataCleared = 0xB6DA,
addr_kAreaSelectForegroundTilemap = 0xB71A,
+ addr_kAreaSelectBackgroundTilemaps = 0xBF1A,
};
enum Consts_82 {
addr_kPauseMenuMapData = 0x9717,
@@ -2034,8 +2028,10 @@ enum Consts_9B {
addr_kSamusPalette_PowerSuit = 0x9400,
addr_kSamusPalette_VariaSuit = 0x9520,
addr_kSamusPalette_GravitySuit = 0x9800,
+ addr_word_9BA120 = 0xA120,
addr_word_9BA380 = 0xA380,
addr_word_9BA3A0 = 0xA3A0,
+
};
enum Consts_A0 {
addr_kSpritemap_Nothing_A0 = 0x804D,
@@ -2208,6 +2204,7 @@ enum Consts_A4 {
addr_kCrocomire_Ilist_BCD8 = 0xBCD8,
addr_kCrocomire_Ilist_BD2A = 0xBD2A,
addr_kCrocomire_Ilist_BD8E = 0xBD8E,
+ addr_kCrocomire_Ilist_BDA2 = 0xBDA2,
addr_kCrocomire_Ilist_BDAE = 0xBDAE,
addr_kCrocomire_Ilist_BDB2 = 0xBDB2,
addr_kCrocomire_Ilist_BDB6 = 0xBDB6,
@@ -2685,6 +2682,7 @@ enum Consts_B3 {
addr_kBrinstarYellowPipeBug_Ilist_8F24 = 0x8F24,
addr_kBrinstarYellowPipeBug_Ilist_8F38 = 0x8F38,
addr_kBotwoon_Ilist_9389 = 0x9389,
+ addr_stru_B3E150 = 0xE150,
addr_loc_B3E28C = 0xE28C,
addr_kEscapeEtecoon_Ilist_E556 = 0xE556,
addr_kEscapeEtecoon_Ilist_E582 = 0xE582,
@@ -2704,10 +2702,6 @@ enum Consts_B7 {
addr_kMotherBrain_Misc_TileData = 0xCE00,
};
-enum Consts_B9 {
- addr_byte_B9FA38 = 0xFA38,
- addr_byte_B9FE3E = 0xFE3E,
-};
static inline OamEnt *gOamEnt(int v) { return (OamEnt *)&g_ram[0x370 + v]; }
static inline VramWriteEntry *gVramWriteEntry(int a) { return (VramWriteEntry *)&g_ram[0xd0 + a]; }
@@ -2718,7 +2712,6 @@ struct StateHeaderTiles; static inline StateHeaderTiles *get_StateHeaderTiles(ui
struct EnemyDef_A2; static inline EnemyDef_A2 *get_EnemyDef_A2(uint16 a) { return (EnemyDef_A2 *)RomPtr(0xA00000 | a); }
struct EnemyTileset; static inline EnemyTileset *get_EnemyTileset(uint16 a) { return (EnemyTileset *)RomPtr(0xB40000 | a); }
struct RoomPlmEntry; static inline RoomPlmEntry *get_RoomPlmEntry(uint16 a) { return (RoomPlmEntry *)RomPtr(0x8F0000 | a); }
-struct PlmHeader_Size6; static inline PlmHeader_Size6 *get_PlmHeader_Size6(uint16 a) { return (PlmHeader_Size6 *)RomPtr(0x8F0000 | a); }
struct EnemyProjectileDef; static inline EnemyProjectileDef *get_EnemyProjectileDef(uint16 a) { return (EnemyProjectileDef *)RomPtr(0x860000 | a); }
struct Vulnerability; static inline Vulnerability *get_Vulnerability(uint16 a) { return (Vulnerability *)RomPtr(0xB40000 | a); }
struct ExtendedSpriteMap; static inline ExtendedSpriteMap *get_ExtendedSpriteMap(uint8 db, uint16 a) { return (ExtendedSpriteMap *)RomPtr(db << 16 | a); }
@@ -2735,14 +2728,14 @@ struct LoadBg_E; static inline LoadBg_E *get_LoadBg_E(uint16 a) { return (LoadBg
struct Mode7VramWriteQueue; static inline Mode7VramWriteQueue *get_Mode7VramWriteQueue(uint16 a) { return (Mode7VramWriteQueue *)RomPtr(0xA60000 | a); }
struct ProjectileInstr; static inline ProjectileInstr *get_ProjectileInstr(uint16 a) { return (ProjectileInstr *)RomPtr(0x930000 | a); }
struct PlmHeader_Size4; static inline PlmHeader_Size4 *get_PlmHeader_Size4(uint16 a) { return (PlmHeader_Size4 *)RomPtr(0x840000 | a); }
+struct PlmHeader_Size6; static inline PlmHeader_Size6 *get_PlmHeader_Size6(uint16 a) { return (PlmHeader_Size6 *)RomPtr(0x840000 | a); }
struct RoomDefStateSelect_E6E5_Finish; static inline RoomDefStateSelect_E6E5_Finish *get_RoomDefStateSelect_E6E5_Finish(uint16 a) { return (RoomDefStateSelect_E6E5_Finish *)RomPtr(0x8F0000 | a); }
struct SamusSpeedTableEntry; static inline SamusSpeedTableEntry *get_SamusSpeedTableEntry(uint16 a) { return (SamusSpeedTableEntry *)RomPtr(0x900000 | a); }
struct SpriteDrawEnt; static inline SpriteDrawEnt *get_SpriteDrawEnt(uint16 a) { return (SpriteDrawEnt *)RomPtr(0xA60000 | a); }
struct SamusTileAnimationDefs; static inline SamusTileAnimationDefs *get_SamusTileAnimationDefs(uint16 a) { return (SamusTileAnimationDefs *)RomPtr(0x920000 | a); }
-struct LoadBg_28; static inline LoadBg_28 *get_LoadBg_28(uint16 a) { return (LoadBg_28 *)RomPtr(0x8F0000 | a); }
struct PalFxDef; static inline PalFxDef *get_PalFxDef(uint16 a) { return (PalFxDef *)RomPtr(0x8D0000 | a); }
struct Mode7ObjectDef; static inline Mode7ObjectDef *get_Mode7ObjectDef(uint16 a) { return (Mode7ObjectDef *)RomPtr(0x8B0000 | a); }
static inline Ram7800_Default *gRam7800_Default(uint16 a) { return (Ram7800_Default *)&g_ram[0x7800 + a]; }
-
+static inline Mode7CgvmWriteQueue *get_Mode7CgvmWriteQueue_RAM(uint16 a) { return (Mode7CgvmWriteQueue *)RomPtr_RAM(a); }
#pragma pack(pop)
diff --git a/src/move_defines.py b/src/move_defines.py
new file mode 100644
index 0000000..e744ed0
--- /dev/null
+++ b/src/move_defines.py
@@ -0,0 +1,31 @@
+import re, glob
+
+
+def process(s):
+ lines = s.splitlines()
+
+ defines = []
+ insert_pos = None
+
+ for i, line in enumerate(lines):
+ if line.startswith('#define '):
+ lines[i] = None
+ defines.append(line.replace('RomPtr(', 'RomFixedPtr('))
+
+ if line.startswith('#include') and lines[i+1].strip()[:8] in ('', '#define ') and len(defines) == 0 and insert_pos == None:
+ insert_pos = i + 1
+
+ assert insert_pos != None
+ lines = lines[:insert_pos] + ['\n'] + defines + lines[insert_pos:]
+
+ return "\n".join(a for a in lines if a != None)
+
+
+for filename in list(glob.glob('sm_*.c')):
+ print(filename)
+ s = open(filename, 'r').read()
+ s2 = process(s)
+ if s != s2:
+ open(filename, 'w').write(s2)
+
+
diff --git a/src/sm.vcxproj b/src/sm.vcxproj
index 77a6c48..c7355e7 100644
--- a/src/sm.vcxproj
+++ b/src/sm.vcxproj
@@ -127,6 +127,7 @@
Default
4996
stdc11
+ true
$(CoreLibraryDependencies);%(AdditionalDependencies)
diff --git a/src/sm_80.c b/src/sm_80.c
index 0497229..58a5692 100644
--- a/src/sm_80.c
+++ b/src/sm_80.c
@@ -8,6 +8,14 @@
#include "spc_player.h"
+#define kMusicPointers (*(LongPtr*)RomFixedPtr(0x8fe7e1))
+#define kTimerDigitsSpritemapPtr ((uint16*)RomFixedPtr(0x809fd4))
+#define kLoadStationLists ((uint16*)RomFixedPtr(0x80c4b5))
+#define off_80CD46 ((uint16*)RomFixedPtr(0x80cd46))
+
+
+
+
void APU_UploadBank(void) { // 0x808028
if (!g_use_my_apu_code)
return;
@@ -27,7 +35,6 @@ uint16 NextRandom(void) { // 0x808111
void ReleaseButtonsFilter(uint16 v0) { // 0x808146
timed_held_input_timer_reset = v0;
- R18_ = ~joypad1_newkeys & joypad1_lastkeys;
bool v1 = ((uint16)~joypad1_newkeys & joypad1_lastkeys) == joypad_released_keys;
joypad_released_keys = ~joypad1_newkeys & joypad1_lastkeys;
if (!v1) {
@@ -156,8 +163,7 @@ CoroutineRet Vector_RESET_Async(void) { // 0x80841C
WriteReg(MEMSEL, 1u);
reg_MEMSEL = 1;
// Removed code to wait 4 frames
- for (int i = 8190; i >= 0; i -= 2)
- *(uint16 *)RomPtr_RAM(i) = 0;
+ memset(g_ram, 0, 8192);
COROUTINE_AWAIT(2, InitializeIoDisplayLogo_Async());
COROUTINE_MANUAL_POS(3); // Soft reset position
mov24(&R0_, 0xCF8000);
@@ -413,83 +419,69 @@ void ClearOamExt(void) { // 0x808B1A
}
void QueueMode7Transfers(uint8 db, uint16 k) { // 0x808B4F
- int16 v4; // dx
-
+ const uint8 *p = RomPtrWithBank(db, k);
uint16 v2 = mode7_vram_write_queue_tail;
- for (int i = k - 1; ; i += 7) {
- while (1) {
- v4 = *(uint16 *)RomPtrWithBank(db, i);
- if (v4 >= 0)
- break;
- uint8 *v6 = RomPtrWithBank(db, i);
- *(uint16 *)(&mode7_write_queue[0].field_0 + v2) = *(uint16 *)(v6 + 1);
- *(uint16 *)((char *)&mode7_write_queue[0].field_1 + v2 + 1) = *(uint16 *)(v6 + 3);
- *(uint16 *)&mode7_write_queue[0].gap3[v2 + 1] = *(uint16 *)(v6 + 5);
- *(uint16 *)&mode7_write_queue[0].gap3[v2 + 3] = *(uint16 *)(v6 + 7);
- *(uint16 *)((char *)&mode7_write_queue[1].field_1 + v2) = v6[9];
- i += 9;
- v2 += 9;
- }
- if ((v4 & 0x4000) == 0)
+ for (;;) {
+ int f = GET_BYTE(p);
+ if (f & 0x80) {
+ *(uint16 *)(&mode7_write_queue[0].field_0 + v2) = GET_WORD(p);
+ *(uint16 *)((char *)&mode7_write_queue[0].field_1 + v2 + 1) = GET_WORD(p + 2);
+ *(uint16 *)&mode7_write_queue[0].gap3[v2 + 1] = GET_WORD(p + 4);
+ *(uint16 *)&mode7_write_queue[0].gap3[v2 + 3] = GET_WORD(p + 6);
+ *(uint16 *)((char *)&mode7_write_queue[1].field_1 + v2) = p[8];
+ p += 9, v2 += 9;
+ } else if (f & 0x40) {
+ *(uint16 *)(&mode7_write_queue[0].field_0 + v2) = GET_WORD(p);
+ *(uint16 *)((char *)&mode7_write_queue[0].field_1 + v2 + 1) = GET_WORD(p + 2);
+ *(uint16 *)&mode7_write_queue[0].gap3[v2 + 1] = GET_WORD(p + 4);
+ *(uint16 *)&mode7_write_queue[0].gap3[v2 + 3] = p[6];
+ p += 7, v2 += 7;
+ } else {
break;
- uint8 *v5 = RomPtrWithBank(db, i);
- *(uint16 *)(&mode7_write_queue[0].field_0 + v2) = *(uint16 *)(v5 + 1);
- *(uint16 *)((char *)&mode7_write_queue[0].field_1 + v2 + 1) = *(uint16 *)(v5 + 3);
- *(uint16 *)&mode7_write_queue[0].gap3[v2 + 1] = *(uint16 *)(v5 + 5);
- *(uint16 *)&mode7_write_queue[0].gap3[v2 + 3] = v5[7];
- v2 += 7;
+ }
}
mode7_vram_write_queue_tail = v2;
}
void NMI_ProcessMode7Queue(void) { // 0x808BBA
if (mode7_vram_write_queue_tail) {
- NMI_ProcessMode7QueueInner(0x2D0u);
+ NMI_ProcessMode7QueueInner(&g_ram[0x2D0]);
*(uint16 *)&mode7_write_queue[0].field_0 = 0;
mode7_vram_write_queue_tail = 0;
}
}
-static inline Mode7CgvmWriteQueue *get_Mode7CgvmWriteQueue_RAM(uint16 a) { return (Mode7CgvmWriteQueue *)RomPtr_RAM(a); }
-void NMI_ProcessMode7QueueInner(uint16 k) { // 0x808BD3
- char v2;
- char v3;
- char v4;
- Mode7CgvmWriteQueue *v5;
- uint8 *v1;
-
+void NMI_ProcessMode7QueueInner(const uint8 *p) { // 0x808BD3
while (1) {
+ uint8 v2;
while (1) {
- v1 = RomPtr_RAM(k);
- v2 = *v1;
- if ((*v1 & 0x80) == 0)
+ v2 = *p;
+ if ((v2 & 0x80) == 0)
break;
- v4 = 2 * v2;
- WriteReg(DMAP1, ((uint8)v4 >> 1) & 0x1F);
- v5 = get_Mode7CgvmWriteQueue_RAM(k);
+ WriteReg(DMAP1, v2 & 0x1F);
+ Mode7CgvmWriteQueue *v5 = (Mode7CgvmWriteQueue *)p;
WriteRegWord(A1T1L, v5->src_addr.addr);
WriteReg(A1B1, v5->src_addr.bank);
WriteRegWord(DAS1L, v5->count);
- if (v4 < 0)
+ if (v2 & 0x40)
WriteReg(BBAD1, 0x19);
else
WriteReg(BBAD1, 0x18);
WriteRegWord(VMADDL, v5->vram_addr);
WriteReg(VMAIN, v5->vmain);
WriteReg(MDMAEN, 2u);
- k += 9;
+ p += sizeof(Mode7CgvmWriteQueue);
}
- v3 = 2 * v2;
- if (v3 >= 0)
+ if (!(v2 & 0x40))
break;
- WriteReg(DMAP1, ((uint8)v3 >> 1) & 0x1F);
- WriteRegWord(A1T1L, *(uint16 *)(v1 + 1));
- WriteReg(A1B1, v1[3]);
- WriteRegWord(DAS1L, *((uint16 *)v1 + 2));
+ WriteReg(DMAP1, v2 & 0x1F);
+ WriteRegWord(A1T1L, *(uint16 *)(p + 1));
+ WriteReg(A1B1, p[3]);
+ WriteRegWord(DAS1L, *((uint16 *)p + 2));
WriteReg(BBAD1, 0x22);
- WriteReg(CGADD, v1[6]);
+ WriteReg(CGADD, p[6]);
WriteReg(MDMAEN, 2u);
- k += 7;
+ p += 7;
}
}
@@ -660,7 +652,7 @@ uint8 HasQueuedMusic(void) { // 0x808EF4
}
return 1;
}
-#define kMusicPointers (*(LongPtr*)RomPtr(0x8fe7e1))
+
void HandleMusicQueue(void) { // 0x808F0C
bool v0 = music_timer-- == 1;
if ((music_timer & 0x8000u) == 0) {
@@ -743,20 +735,17 @@ void QueueSfx1_Max6(uint16 a) { // 0x809049
}
void QueueSfx1_Internal(uint16 a) { // 0x809051
- uint16 v2;
-
sfx_max_queued[0] = a;
if ((uint8)((sfx_writepos[0] - sfx_readpos[0]) & 0xF) < (uint8)a) {
- LOBYTE(v2) = HIBYTE(a);
- HIBYTE(v2) = (sfx_writepos[0] - sfx_readpos[0]) & 0xF;
+ uint8 v2 = GET_HIBYTE(a);
if (!debug_disable_sounds && game_state < 0x28u && (power_bomb_explosion_status & 0x8000u) == 0) {
- uint16 v1 = sfx_writepos[0];
- uint16 v3 = sfx_writepos[0] + 1;
- if ((uint8)(sfx_writepos[0] + 1) >= 0x10u)
+ uint8 v1 = sfx_writepos[0];
+ uint8 v3 = sfx_writepos[0] + 1;
+ if (v3 >= 0x10u)
v3 = 0;
if (v3 == sfx_readpos[0]) {
- if (v2 < *(uint16 *)&sfx1_queue[v1])
- *(uint16 *)&sfx1_queue[v1] = v2;
+ if (v2 < sfx1_queue[v1])
+ sfx1_queue[v1] = v2;
} else {
sfx1_queue[sfx_writepos[0]] = v2;
sfx_writepos[0] = v3;
@@ -787,21 +776,17 @@ void QueueSfx2_Max6(uint16 a) { // 0x8090CB
}
void QueueSfx2_Internal(uint16 a) { // 0x8090D3
- uint16 v1;
- uint16 v2;
-
sfx_max_queued[1] = a;
if ((uint8)((sfx_writepos[1] - sfx_readpos[1]) & 0xF) < (uint8)a) {
- LOBYTE(v2) = HIBYTE(a);
- HIBYTE(v2) = (sfx_writepos[1] - sfx_readpos[1]) & 0xF;
+ uint8 v2 = GET_HIBYTE(a);
if (!debug_disable_sounds && game_state < 0x28u && (power_bomb_explosion_status & 0x8000u) == 0) {
- LOBYTE(v1) = sfx_writepos[1];
+ uint8 v1 = sfx_writepos[1];
uint8 v3 = sfx_writepos[1] + 1;
- if ((uint8)(sfx_writepos[1] + 1) >= 0x10u)
+ if (v3 >= 0x10u)
v3 = 0;
if (v3 == sfx_readpos[1]) {
- if (v2 < *(uint16 *)&sfx2_queue[v1])
- *(uint16 *)&sfx2_queue[v1] = v2;
+ if (v2 < sfx2_queue[v1])
+ sfx2_queue[v1] = v2;
} else {
sfx2_queue[sfx_writepos[1]] = v2;
sfx_writepos[1] = v3;
@@ -834,17 +819,15 @@ void QueueSfx3_Max6(uint16 a) { // 0x80914D
void QueueSfx3_Internal(uint16 a) { // 0x809155
sfx_max_queued[2] = a;
if ((uint8)((sfx_writepos[2] - sfx_readpos[2]) & 0xF) < (uint8)a) {
- uint16 v2 = 0;
- LOBYTE(v2) = HIBYTE(a);
- HIBYTE(v2) = (sfx_writepos[2] - sfx_readpos[2]) & 0xF;
+ uint8 v2 = GET_HIBYTE(a);
if (!debug_disable_sounds && game_state < 0x28u && (power_bomb_explosion_status & 0x8000u) == 0) {
- uint16 v1 = sfx_writepos[2];
- int v3 = sfx_writepos[2] + 1;
+ uint8 v1 = sfx_writepos[2];
+ uint8 v3 = sfx_writepos[2] + 1;
if (v3 >= 0x10u)
v3 = 0;
if (v3 == sfx_readpos[2]) {
- if (v2 < *(uint16 *)&sfx3_queue[v1])
- *(uint16 *)&sfx3_queue[v1] = v2;
+ if (v2 < sfx3_queue[v1])
+ sfx3_queue[v1] = v2;
} else {
sfx3_queue[sfx_writepos[2]] = v2;
sfx_writepos[2] = v3;
@@ -949,44 +932,36 @@ void NmiUpdatePalettesAndOam(void) { // 0x80933A
void NmiTransferSamusToVram(void) { // 0x809376
WriteReg(VMAIN, 0x80);
if ((uint8)nmi_copy_samus_halves) {
- nmicopy1_var_d = nmi_copy_samus_top_half_src;
+ const uint8 *rp = RomPtr_92(nmi_copy_samus_top_half_src);
WriteRegWord(VMADDL, 0x6000);
WriteRegWord(DMAP1, 0x1801);
- uint16 v0 = *(uint16 *)RomPtr_92(nmicopy1_var_d);
+ uint16 v0 = GET_WORD(rp + 0);
WriteRegWord(A1T1L, v0);
- R20_ = v0;
- uint8 *v1 = RomPtr_92(nmicopy1_var_d);
- WriteRegWord(A1B1, *((uint16 *)v1 + 1));
- uint16 v2 = *(uint16 *)(RomPtr_92(nmicopy1_var_d) + 3);
+ WriteRegWord(A1B1, GET_WORD(rp + 2));
+ uint16 v2 = GET_WORD(rp + 3);
WriteRegWord(DAS1L, v2);
- R20_ += v2;
WriteReg(MDMAEN, 2u);
WriteRegWord(VMADDL, 0x6100);
- WriteRegWord(A1T1L, R20_);
- uint8 *v3 = RomPtr_92(nmicopy1_var_d);
- if (*(uint16 *)(v3 + 5)) {
- WriteRegWord(DAS1L, *(uint16 *)(v3 + 5));
+ WriteRegWord(A1T1L, v0 + v2);
+ if (GET_WORD(rp + 5)) {
+ WriteRegWord(DAS1L, GET_WORD(rp + 5));
WriteReg(MDMAEN, 2u);
}
}
if (HIBYTE(nmi_copy_samus_halves)) {
- nmicopy1_var_d = nmi_copy_samus_bottom_half_src;
+ const uint8 *rp = RomPtr_92(nmi_copy_samus_bottom_half_src);
WriteRegWord(VMADDL, 0x6080);
WriteRegWord(DMAP1, 0x1801);
- uint16 v4 = *(uint16 *)RomPtr_92(nmicopy1_var_d);
+ uint16 v4 = GET_WORD(rp + 0);
WriteRegWord(A1T1L, v4);
- R20_ = v4;
- uint8 *v5 = RomPtr_92(nmicopy1_var_d);
- WriteRegWord(A1B1, *((uint16 *)v5 + 1));
- uint16 v6 = *(uint16 *)(RomPtr_92(nmicopy1_var_d) + 3);
+ WriteRegWord(A1B1, GET_WORD(rp + 2));
+ uint16 v6 = GET_WORD(rp + 3);
WriteRegWord(DAS1L, v6);
- R20_ += v6;
WriteReg(MDMAEN, 2u);
WriteRegWord(VMADDL, 0x6180);
- WriteRegWord(A1T1L, R20_);
- uint8 *v7 = RomPtr_92(nmicopy1_var_d);
- if (*(uint16 *)(v7 + 5)) {
- WriteRegWord(DAS1L, *(uint16 *)(v7 + 5));
+ WriteRegWord(A1T1L, v4 + v6);
+ if (GET_WORD(rp + 5)) {
+ WriteRegWord(DAS1L, GET_WORD(rp + 5));
WriteReg(MDMAEN, 2u);
}
}
@@ -1331,29 +1306,28 @@ void AddMissilesToHudTilemap(void) {
}
void AddSuperMissilesToHudTilemap(void) { // 0x809A0E
- AddToTilemapInner(0x1C, addr_kHudTilemaps_Missiles + 12);
+ AddToTilemapInner(0x1C, (const uint16*)RomPtr_80(addr_kHudTilemaps_Missiles + 12));
}
void AddPowerBombsToHudTilemap(void) { // 0x809A1E
- AddToTilemapInner(0x22, addr_kHudTilemaps_Missiles + 20);
+ AddToTilemapInner(0x22, (const uint16 *)RomPtr_80(addr_kHudTilemaps_Missiles + 20));
}
void AddGrappleToHudTilemap(void) { // 0x809A2E
- AddToTilemapInner(0x28, addr_kHudTilemaps_Missiles + 28);
+ AddToTilemapInner(0x28, (const uint16 *)RomPtr_80(addr_kHudTilemaps_Missiles + 28));
}
void AddXrayToHudTilemap(void) { // 0x809A3E
- AddToTilemapInner(0x2E, addr_kHudTilemaps_Missiles + 36);
+ AddToTilemapInner(0x2E, (const uint16 *)RomPtr_80(addr_kHudTilemaps_Missiles + 36));
}
-void AddToTilemapInner(uint16 k, uint16 j) { // 0x809A4C
+void AddToTilemapInner(uint16 k, const uint16 *j) { // 0x809A4C
int v2 = k >> 1;
if ((hud_tilemap[v2] & 0x3FF) == 15) {
- uint16 *v3 = (uint16 *)RomPtr_80(j);
- hud_tilemap[v2] = *v3;
- hud_tilemap[v2 + 1] = v3[1];
- hud_tilemap[v2 + 32] = v3[2];
- hud_tilemap[v2 + 33] = v3[3];
+ hud_tilemap[v2] = j[0];
+ hud_tilemap[v2 + 1] = j[1];
+ hud_tilemap[v2 + 32] = j[2];
+ hud_tilemap[v2 + 33] = j[3];
}
}
@@ -1384,11 +1358,11 @@ void InitializeHud(void) { // 0x809A79
R0_.addr = addr_kDigitTilesetsWeapon;
*(uint16 *)&R0_.bank = 128;
if (samus_max_missiles)
- DrawThreeHudDigits(samus_missiles, 0x94);
+ DrawThreeHudDigits(R0_, samus_missiles, 0x94);
if (samus_max_super_missiles)
- DrawTwoHudDigits(samus_super_missiles, 0x9C);
+ DrawTwoHudDigits(R0_, samus_super_missiles, 0x9C);
if (samus_max_power_bombs)
- DrawTwoHudDigits(samus_power_bombs, 0xA2);
+ DrawTwoHudDigits(R0_, samus_power_bombs, 0xA2);
ToggleHudItemHighlight(hud_item_index, 0x1000);
ToggleHudItemHighlight(samus_prev_hud_item_index, 0x1400);
HandleHudTilemap();
@@ -1399,11 +1373,10 @@ static const uint16 kEnergyTankIconTilemapOffsets[14] = { 0x42, 0x44, 0x46, 0x48
void HandleHudTilemap(void) { // 0x809B44
R0_.bank = 0;
if (reserve_health_mode == 1) {
- uint16 v0 = addr_kHudTilemaps_AutoReserve;
+ const uint16 *v1 = (const uint16 *)RomPtr_80(addr_kHudTilemaps_AutoReserve);
if (!samus_reserve_health)
- v0 = addr_kHudTilemaps_AutoReserve + 12;
- uint16 *v1 = (uint16 *)RomPtr_80(v0);
- hud_tilemap[8] = *v1;
+ v1 += 6;
+ hud_tilemap[8] = v1[0];
hud_tilemap[9] = v1[1];
hud_tilemap[40] = v1[2];
hud_tilemap[41] = v1[3];
@@ -1429,23 +1402,23 @@ void HandleHudTilemap(void) { // 0x809B44
v2 += 2;
} while ((int16)(v2 - 28) < 0);
R0_.addr = addr_kDigitTilesetsHealth;
- DrawTwoHudDigits(R18_, 0x8C);
+ DrawTwoHudDigits(R0_, R18_, 0x8C);
}
R0_.addr = addr_kDigitTilesetsWeapon;
if (samus_max_missiles && samus_missiles != samus_prev_missiles) {
samus_prev_missiles = samus_missiles;
- DrawThreeHudDigits(samus_missiles, 0x94);
+ DrawThreeHudDigits(R0_, samus_missiles, 0x94);
}
if (samus_max_super_missiles && samus_super_missiles != samus_prev_super_missiles) {
samus_prev_super_missiles = samus_super_missiles;
if ((joypad_dbg_flags & 0x1F40) != 0)
- DrawThreeHudDigits(samus_prev_super_missiles, 0x9C);
+ DrawThreeHudDigits(R0_, samus_prev_super_missiles, 0x9C);
else
- DrawTwoHudDigits(samus_prev_super_missiles, 0x9C);
+ DrawTwoHudDigits(R0_, samus_prev_super_missiles, 0x9C);
}
if (samus_max_power_bombs && samus_power_bombs != samus_prev_power_bombs) {
samus_prev_power_bombs = samus_power_bombs;
- DrawTwoHudDigits(samus_power_bombs, 0xA2);
+ DrawTwoHudDigits(R0_, samus_power_bombs, 0xA2);
}
if (hud_item_index != samus_prev_hud_item_index) {
ToggleHudItemHighlight(hud_item_index, 0x1000);
@@ -1498,19 +1471,19 @@ void ToggleHudItemHighlight(uint16 a, uint16 k) { // 0x809CEA
}
}
-void DrawThreeHudDigits(uint16 a, uint16 k) { // 0x809D78
+void DrawThreeHudDigits(LongPtr r0, uint16 a, uint16 k) { // 0x809D78
uint16 v2 = 2 * (a / 100);
- hud_tilemap[k >> 1] = *(uint16 *)IndirPtr(&R0_, v2);
+ hud_tilemap[k >> 1] = IndirReadWord(r0, v2);
uint16 RegWord = (a % 100);
- DrawTwoHudDigits(RegWord, k + 2);
+ DrawTwoHudDigits(r0, RegWord, k + 2);
}
-void DrawTwoHudDigits(uint16 a, uint16 k) { // 0x809D98
+void DrawTwoHudDigits(LongPtr r0, uint16 a, uint16 k) { // 0x809D98
uint16 RegWord = a / 10;
int v3 = k >> 1;
- hud_tilemap[v3] = *(uint16 *)IndirPtr(&R0_, 2 * RegWord);
+ hud_tilemap[v3] = IndirReadWord(r0, 2 * RegWord);
uint16 v4 = 2 * (a % 10);
- hud_tilemap[v3 + 1] = *(uint16 *)IndirPtr(&R0_, v4);
+ hud_tilemap[v3 + 1] = IndirReadWord(r0, v4);
}
static Func_U8 *const kTimerProcessFuncs[7] = { // 0x809DE7
@@ -1524,7 +1497,7 @@ static Func_U8 *const kTimerProcessFuncs[7] = { // 0x809DE7
};
uint8 ProcessTimer(void) {
- return kTimerProcessFuncs[(uint16)(2 * (uint8)timer_status) >> 1]();
+ return kTimerProcessFuncs[(uint8)timer_status]();
}
uint8 ProcessTimer_CeresStart(void) { // 0x809E09
@@ -1639,7 +1612,6 @@ void DrawTimer(void) { // 0x809F6C
DrawTwoTimerDigits(*(uint16 *)&timer_centiseconds, 0x14);
}
-#define kTimerDigitsSpritemapPtr ((uint16*)RomPtr(0x809fd4))
void DrawTwoTimerDigits(uint16 a, uint16 k) { // 0x809F95
char v2;
@@ -2203,7 +2175,7 @@ void UpdateLevelOrBackgroundDataColumn(uint16 k) { // 0x80A9DE
uint16 v9 = 0;
loopcounter = 16;
do {
- tmp_block_to_update = *(uint16 *)IndirPtr(©withflip_src, v9);
+ tmp_block_to_update = IndirReadWord(copywithflip_src, v9);
uint16 v10 = tmp_block_to_update & 0x3FF;
uint16 v17 = v9;
uint16 v11 = tmp_vram_base_addr;
@@ -2297,7 +2269,7 @@ void UpdateLevelOrBackgroundDataRow(uint16 v0) { // 0x80AB78
uint16 v9 = 0;
loopcounter = 17;
do {
- tmp_block_to_update = *(uint16 *)IndirPtr(©withflip_src, v9);
+ tmp_block_to_update = IndirReadWord(copywithflip_src, v9);
uint16 v10 = tmp_block_to_update & 0x3FF;
uint16 v17 = v9;
uint16 v11 = tmp_vram_base_addr;
@@ -2558,86 +2530,82 @@ uint8 DoorTransition_Up(void) { // 0x80AF89
void ConfigureMode7RotationMatrix(void) { // 0x80B0C2
if (irq_enable_mode7) {
if ((nmi_frame_counter_word & 7) == 0) {
- reg_M7B = kSinCosTable8bit_Sext[((uint16)(2 * (uint8)mode7_rotation_angle) >> 1) + 64];
+ reg_M7B = kSinCosTable8bit_Sext[((uint8)mode7_rotation_angle) + 64];
reg_M7C = -reg_M7B;
- reg_M7A = kSinCosTable8bit_Sext[((uint16)(2 * (uint8)(mode7_rotation_angle + 64)) >> 1) + 64];
+ reg_M7A = kSinCosTable8bit_Sext[((uint8)(mode7_rotation_angle + 64)) + 64];
reg_M7D = reg_M7A;
++mode7_rotation_angle;
}
}
}
-uint8 DecompNextByte(void) {
- uint8 v2 = *RomPtrWithBank(decompress_src.bank, decompress_src.addr);
- if (decompress_src.addr++ == 0xFFFF) {
- decompress_src.addr = 0x8000;
- decompress_src.bank++;
- }
- return v2;
+static uint32 decompress_src;
+
+static uint8 DecompNextByte() {
+ uint8 b = *RomPtrWithBank(decompress_src >> 16, decompress_src);
+ if ((decompress_src++ & 0xffff) == 0xffff)
+ decompress_src += 0x8000;
+ return b;
}
-void DecompressToMem(void) { // 0x80B119
- HIBYTE(decompress_want_xor) = 0;
- uint16 dst_pos = 0;
+void DecompressToMem(uint32 src, uint8 *decompress_dst) { // 0x80B119
+ decompress_src = src;
+
+ int src_pos, dst_pos = 0;
while (1) {
int len;
- uint8 v2 = DecompNextByte(), cmd, b;
- decompress_last_byte = v2;
- if (v2 == 0xFF)
+ uint8 cmd, b;
+ b = DecompNextByte();
+ if (b == 0xFF)
break;
- if ((v2 & 0xE0) == 0xE0) {
- cmd = (8 * decompress_last_byte) & 0xE0;
- len = ((decompress_last_byte & 3) << 8 | DecompNextByte()) + 1;
+ if ((b & 0xE0) == 0xE0) {
+ cmd = (8 * b) & 0xE0;
+ len = ((b & 3) << 8 | DecompNextByte()) + 1;
} else {
- cmd = v2 & 0xE0;
- len = (decompress_last_byte & 0x1F) + 1;
+ cmd = b & 0xE0;
+ len = (b & 0x1F) + 1;
}
if (cmd & 0x80) {
- decompress_want_xor = cmd & 0x20;
- if (cmd >= 0xC0u) {
- decompress_last_byte = DecompNextByte();
- decompress_tmp1 = 0;
- *(uint16 *)&decompress_last_byte = dst_pos - *(uint16 *)&decompress_last_byte;
+ uint8 want_xor = cmd & 0x20 ? 0xff : 0;
+ if (cmd >= 0xC0) {
+ src_pos = dst_pos - DecompNextByte();
} else {
- decompress_last_byte = DecompNextByte();
- decompress_tmp1 = DecompNextByte();
+ src_pos = DecompNextByte();
+ src_pos += DecompNextByte() * 256;
}
do {
- uint16 v27 = *(uint16 *)&decompress_last_byte;
- b = *IndirPtr(&decompress_dst, *(uint16 *)&decompress_last_byte);
- *(uint16 *)&decompress_last_byte = v27 + 1;
- if (decompress_want_xor)
- b = ~b;
- IndirWriteByte(&decompress_dst, dst_pos++, b);
+ b = decompress_dst[src_pos++] ^ want_xor;
+ decompress_dst[dst_pos++] = b;
} while (--len);
} else {
switch (cmd) {
case 0x20:
b = DecompNextByte();
do {
- IndirWriteByte(&decompress_dst, dst_pos++, b);
+ decompress_dst[dst_pos++] = b;
} while (--len);
break;
- case 0x40:
- decompress_last_byte = DecompNextByte();
- decompress_tmp1 = DecompNextByte();
+ case 0x40: {
+ b = DecompNextByte();
+ uint8 b2 = DecompNextByte();
do {
- IndirWriteByte(&decompress_dst, dst_pos++, decompress_last_byte);
+ decompress_dst[dst_pos++] = b;
if (!--len)
break;
- IndirWriteByte(&decompress_dst, dst_pos++, decompress_tmp1);
+ decompress_dst[dst_pos++] = b2;
} while (--len);
break;
+ }
case 0x60:
b = DecompNextByte();
do {
- IndirWriteByte(&decompress_dst, dst_pos++, b++);
+ decompress_dst[dst_pos++] = b++;
} while (--len);
break;
default:
do {
b = DecompNextByte();
- IndirWriteByte(&decompress_dst, dst_pos++, b);
+ decompress_dst[dst_pos++] = b;
} while (--len);
break;
}
@@ -2645,168 +2613,83 @@ void DecompressToMem(void) { // 0x80B119
}
}
-void DecompressToVRAM(void) { // 0x80B271
- uint16 v0; // r8
- VoidP addr;
- int16 v5;
- int16 v7;
- int16 v10;
- int16 v13;
- int16 v14;
- int16 v16;
- int16 v21;
- int16 v28;
- int16 v29;
- int16 v30;
- int16 v31;
- int16 v32;
- int16 v33;
- int16 v34;
- uint8 v35;
+static uint8 ReadPpuByte(uint16 addr) {
+ WriteRegWord(VMADDL, addr >> 1);
+ ReadRegWord(RDVRAML); // latch
+ uint16 data = ReadRegWord(RDVRAML);
+ return (addr & 1) ? GET_HIBYTE(data) : data;
+}
- uint8 bank = decompress_src.bank;
- HIBYTE(decompress_want_xor) = 0;
- addr = decompress_dst.addr;
+void DecompressToVRAM(uint32 src, uint16 dst_addr) { // 0x80B271
+ decompress_src = src;
+ int src_pos, dst_pos = dst_addr;
while (1) {
- uint8 v2 = DecompNextByte();
- decompress_last_byte = v2;
- if (v2 == 0xFF)
+ int len;
+ uint8 b = DecompNextByte(), cmd;
+ if (b == 0xFF)
break;
- uint8 v4 = v2 & 0xE0;
- if (v4 == 0xE0) {
- v35 = (8 * decompress_last_byte) & 0xE0;
- HIBYTE(v5) = decompress_last_byte & 3;
- LOBYTE(v5) = DecompNextByte();
+ if ((b & 0xE0) == 0xE0) {
+ cmd = (8 * b) & 0xE0;
+ len = ((b & 3) << 8 | DecompNextByte()) + 1;
} else {
- v35 = v4;
- v5 = decompress_last_byte & 0x1F;
+ cmd = b & 0xE0;
+ len = (b & 0x1F) + 1;
}
- v7 = v5 + 1;
- LOBYTE(v0) = v35;
- if ((uint8)sign8(v0)) {
- if (v35 >= 0xC0u) {
- LOBYTE(decompress_want_xor) = v35 & 0x20;
- v34 = v5 + 1;
- uint8 v25 = DecompNextByte();
- v21 = v34;
- decompress_last_byte = v25;
- decompress_tmp1 = 0;
- *(uint16 *)&decompress_last_byte = addr - *(uint16 *)&decompress_last_byte;
+ if (cmd & 0x80) {
+ uint8 want_xor = cmd & 0x20 ? 0xff : 0;
+ if (cmd >= 0xC0) {
+ src_pos = dst_pos - DecompNextByte();
} else {
- LOBYTE(decompress_want_xor) = v35 & 0x20;
- v32 = v5 + 1;
- uint8 v17 = DecompNextByte();
- decompress_last_byte = v17;
- uint8 v19 = DecompNextByte();
- v21 = v32;
- decompress_tmp1 = v19;
- *(uint16 *)&decompress_last_byte += decompress_dst.addr;
+ src_pos = DecompNextByte();
+ src_pos += DecompNextByte() * 256;
+ src_pos += dst_addr;
}
do {
- v33 = v21;
- WriteRegWord(VMADDL, *(uint16 *)&decompress_last_byte >> 1);
- ReadRegWord(RDVRAML);
- uint16 RegWord = ReadRegWord(RDVRAML);
- uint8 v23 = RegWord;
- if (decompress_last_byte & 1)
- v23 = HIBYTE(RegWord);
- ++ *(uint16 *)&decompress_last_byte;
- if (decompress_want_xor)
- v23 = ~v23;
- WriteRegWord(VMADDL, addr >> 1);
- HIBYTE(v0) = (uint16)(addr >> 1) >> 8;
- if (addr & 1)
- WriteReg(VMDATAH, v23);
- else
- WriteReg(VMDATAL, v23);
- ++addr;
- --v21;
- } while (v33 != 1);
+ b = ReadPpuByte(src_pos++) ^ want_xor;
+ WriteRegWord(VMADDL, dst_pos >> 1);
+ WriteReg(VMDATAL + (dst_pos++ & 1), b);
+ } while (--len);
} else {
- switch (v35) {
- case ' ':
- v29 = v5 + 1;
- LOBYTE(v5) = DecompNextByte();
- v10 = v29;
+ switch (cmd) {
+ case 0x20:
+ b = DecompNextByte();
do {
- HIBYTE(v0) = HIBYTE(v5);
- if (addr & 1)
- WriteReg(VMDATAH, v5);
- else
- WriteReg(VMDATAL, v5);
- ++addr;
- --v10;
- } while (v10);
+ WriteReg(VMDATAL + (dst_pos++ & 1), b);
+ } while (--len);
break;
- case '@':
- v30 = v5 + 1;
- LOBYTE(v5) = DecompNextByte();
- decompress_last_byte = v5;
- LOBYTE(v5) = DecompNextByte();
- v13 = v30;
- decompress_tmp1 = v5;
+ case 0x40: {
+ b = DecompNextByte();
+ uint8 b2 = DecompNextByte();
do {
- HIBYTE(v0) = HIBYTE(v5);
- if (addr & 1)
- WriteReg(VMDATAH, decompress_last_byte);
- else
- WriteReg(VMDATAL, decompress_last_byte);
- ++addr;
- v14 = v13 - 1;
- if (!v14)
+ WriteReg(VMDATAL + (dst_pos++ & 1), b);
+ if (!--len)
break;
- HIBYTE(v0) = HIBYTE(v5);
- if (addr & 1)
- WriteReg(VMDATAH, decompress_tmp1);
- else
- WriteReg(VMDATAL, decompress_tmp1);
- ++addr;
- v13 = v14 - 1;
- } while (v13);
+ WriteReg(VMDATAL + (dst_pos++ & 1), b2);
+ } while (--len);
break;
- case '`':
- v31 = v5 + 1;
- LOBYTE(v5) = DecompNextByte();
- v16 = v31;
+ }
+ case 0x60:
+ b = DecompNextByte();
do {
- HIBYTE(v0) = HIBYTE(v5);
- if (addr & 1)
- WriteReg(VMDATAH, v5);
- else
- WriteReg(VMDATAL, v5);
- ++addr;
- LOBYTE(v5) = v5 + 1;
- --v16;
- } while (v16);
+ WriteReg(VMDATAL + (dst_pos++ & 1), b++);
+ } while (--len);
break;
default:
do {
- v28 = v7;
- LOBYTE(v5) = DecompNextByte();
- HIBYTE(v0) = HIBYTE(v5);
- if (addr & 1)
- WriteReg(VMDATAH, v5);
- else
- WriteReg(VMDATAL, v5);
- ++addr;
- v7 = v28 - 1;
- } while (v28 != 1);
+ b = DecompNextByte();
+ WriteReg(VMDATAL + (dst_pos++ & 1), b++);
+ } while (--len);
break;
}
}
}
}
-#define kLoadStationLists ((uint16*)RomPtr(0x80c4b5))
void LoadFromLoadStation(void) { // 0x80C437
save_station_lockout_flag = 1;
R18_ = 2 * load_station_index;
- uint16 *v0 = (uint16 *)RomPtr_80(
- kLoadStationLists[area_index]
- + 2
- * (load_station_index
- + 6 * load_station_index));
+ const uint16 *v0 = (const uint16 *)RomPtr_80(kLoadStationLists[area_index] + 14 * load_station_index);
room_ptr = *v0;
door_def_ptr = v0[1];
door_bts = v0[2];
@@ -2820,16 +2703,13 @@ void LoadFromLoadStation(void) { // 0x80C437
samus_prev_x_pos = samus_x_pos;
reg_BG1HOFS = 0;
reg_BG1VOFS = 0;
- LOBYTE(area_index) = RomPtr_8F(room_ptr)[1];
+ LOBYTE(area_index) = get_RoomDefHeader(room_ptr)->area_index_;
LOBYTE(debug_disable_minimap) = 0;
}
-#define off_80CD46 ((uint16*)RomPtr(0x80cd46))
void SetElevatorsAsUsed(void) { // 0x80CD07
- uint8 *v0 = RomPtr_80(
- off_80CD46[area_index]
- + 4 * (((uint8)elevator_door_properties_orientation & 0xFu) - 1));
- used_save_stations_and_elevators[*v0] |= v0[1];
+ const uint8 *v0 = RomPtr_80(off_80CD46[area_index] + 4 * (((uint8)elevator_door_properties_orientation & 0xF) - 1));
+ used_save_stations_and_elevators[v0[0]] |= v0[1];
used_save_stations_and_elevators[v0[2]] |= v0[3];
-}
+}
\ No newline at end of file
diff --git a/src/sm_81.c b/src/sm_81.c
index befc0f0..fdcba76 100644
--- a/src/sm_81.c
+++ b/src/sm_81.c
@@ -6,23 +6,31 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kOffsetToSaveSlot ((uint16*)RomPtr(0x81812b))
-#define kPackedBytesPerArea_Count ((uint8*)RomPtr(0x818131))
-#define kPackedBytesPerArea_PackedOffs ((uint16*)RomPtr(0x818138))
-#define kPackedBytesPerArea_UnpackedOffs ((uint16*)RomPtr(0x8182d6))
-#define kMenuPalettes ((uint16*)RomPtr(0x8ee400))
-#define kZebesAndStarsTilemap ((uint16*)RomPtr(0x8edc00))
-#define kAreaMapForegroundSetDefs ((uint16*)RomPtr(0x81a4e6))
-#define kAreaMapForegroundColors ((uint16*)RomPtr(0x81a40e))
-#define kBg2RoomSelectMapTilemap ((uint16*)RomPtr(0xb6e000))
-#define kFileSelectExpandingSquareTilemap ((uint16*)RomPtr(0x81b14b))
-#define kMapIconDataPointers ((MapIconDataPointers*)RomPtr(0x82c7cb))
-#define g_word_82C749 ((uint16*)RomPtr(0x82c749))
-#define kRoomState_aa82_aa8f (*(RoomDefRoomstate*)RomPtr(0x8faa8f))
-#define kLeftMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af32))
-#define kRightMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af3c))
-#define kUpMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af46))
-#define kDownMapScrollArrowData (*(MapScrollArrowData*)RomPtr(0x81af50))
+
+#define kOffsetToSaveSlot ((uint16*)RomFixedPtr(0x81812b))
+#define kPackedBytesPerArea_Count ((uint8*)RomFixedPtr(0x818131))
+#define kPackedBytesPerArea_PackedOffs ((uint16*)RomFixedPtr(0x818138))
+#define kPackedBytesPerArea_UnpackedOffs ((uint16*)RomFixedPtr(0x8182d6))
+#define kMenuPalettes ((uint16*)RomFixedPtr(0x8ee400))
+#define kZebesAndStarsTilemap ((uint16*)RomFixedPtr(0x8edc00))
+#define kAreaMapForegroundSetDefs ((uint16*)RomFixedPtr(0x81a4e6))
+#define kAreaMapForegroundColors ((uint16*)RomFixedPtr(0x81a40e))
+#define kBg2RoomSelectMapTilemap ((uint16*)RomFixedPtr(0xb6e000))
+#define kFileSelectExpandingSquareTilemap ((uint16*)RomFixedPtr(0x81b14b))
+#define kMapIconDataPointers ((MapIconDataPointers*)RomFixedPtr(0x82c7cb))
+#define g_word_82C749 ((uint16*)RomFixedPtr(0x82c749))
+#define kRoomState_aa82_aa8f (*(RoomDefRoomstate*)RomFixedPtr(0x8faa8f))
+#define kLeftMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af32))
+#define kRightMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af3c))
+#define kUpMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af46))
+#define kDownMapScrollArrowData (*(MapScrollArrowData*)RomFixedPtr(0x81af50))
+#define g_off_82C569 ((uint16*)RomFixedPtr(0x82c569))
+#define kSamusSpritemapTable ((uint16*)RomFixedPtr(0x92808d))
+#define g_off_93A1A1 ((uint16*)RomFixedPtr(0x93a1a1))
+#define kExpandingSquareVels ((ExpandingSquareVels*)RomFixedPtr(0x81aa34))
+
+
+
static const uint16 kFileSelectMap_AreaIndexes[6] = { 0, 3, 5, 1, 4, 2 };
void SoftReset(void) {
@@ -30,18 +38,14 @@ void SoftReset(void) {
}
void SaveToSram(uint16 a) { // 0x818000
- char v0 = a;
- uint16 v2;
- int16 v7;
- int16 v11;
+ uint16 v7;
+ uint16 v11;
- R20_ = 0;
- R18_ = 2 * (v0 & 3);
+ uint16 R20 = 0;
+ uint16 R18 = 2 * (a & 3);
for (int i = 94; i >= 0; i -= 2)
player_data_saved[i >> 1] = *(uint16 *)((char *)&equipped_items + i);
- LOBYTE(v2) = HIBYTE(area_index);
- HIBYTE(v2) = area_index;
- uint16 v3 = v2;
+ uint16 v3 = area_index * 256;
uint16 v4 = 0;
do {
explored_map_tiles_saved[v3 >> 1] = *(uint16 *)&map_tiles_explored[v4];
@@ -51,18 +55,18 @@ void SaveToSram(uint16 a) { // 0x818000
PackMapToSave();
sram_save_station_index = load_station_index;
sram_area_index = area_index;
- uint16 v5 = kOffsetToSaveSlot[R18_ >> 1];
+ uint16 v5 = kOffsetToSaveSlot[R18 >> 1];
uint16 *v6 = player_data_saved;
do {
v7 = *v6++;
*(uint16 *)(&g_sram[2 * (v5 >> 1)]) = v7;
- R20_ += v7;
+ R20 += v7;
v5 += 2;
} while (v6 != plm_instruction_timer);
- uint16 v8 = R18_;
- uint16 v9 = R20_;
- int v10 = R18_ >> 1;
- *(uint16 *)(&g_sram[2 * v10]) = R20_;
+ uint16 v8 = R18;
+ uint16 v9 = R20;
+ int v10 = R18 >> 1;
+ *(uint16 *)(&g_sram[2 * v10]) = R20;
*(uint16 *)(&g_sram[2 * v10 + 0x1FF0]) = v9;
v11 = ~v9;
*(uint16 *)(&g_sram[2 * v10 + 8]) = v11;
@@ -124,7 +128,7 @@ void UnpackMapFromSave(void) { // 0x8182E4
*(uint16 *)&R3_.bank = 126;
do {
uint16 v4 = R20_ + *RomPtr_81(R0_.addr);
- IndirWriteByte(&R3_, v4, compressed_map_data[v3]);
+ IndirWriteByte(R3_, v4, compressed_map_data[v3]);
++R0_.addr;
++v3;
--R18_;
@@ -145,7 +149,7 @@ void PackMapToSave(void) { // 0x81834B
*(uint16 *)&R3_.bank = 126;
do {
int v3 = R24_ + *RomPtr_81(R0_.addr);
- compressed_map_data[v1] = *IndirPtr(&R3_, v3);
+ compressed_map_data[v1] = IndirReadByte(R3_, v3);
++R0_.addr;
++v1;
--R22_;
@@ -160,7 +164,7 @@ void DrawSpritemap(uint8 db, uint16 j) { // 0x81879F
char v13;
char v15;
- uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
+ const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
@@ -172,8 +176,8 @@ void DrawSpritemap(uint8 db, uint16 j) { // 0x81879F
uint16 v5 = oam_next_ptr;
while (1) {
- uint8 *v6 = RomPtrWithBank(db, v3);
- v7 = R20_ + *(uint16 *)v6;
+ const uint8 *v6 = RomPtrWithBank(db, v3);
+ v7 = R20_ + GET_WORD(v6);
v8 = gOamEnt(v5);
*(uint16 *)&v8->xcoord = v7;
if ((v7 & 0x100) != 0) {
@@ -212,7 +216,7 @@ LABEL_21:
{
LABEL_22:
v8->ycoord = v15;
- *(uint16 *)&v8->charnum = R22_ | *(uint16 *)(v6 + 3) & 0xF1FF;
+ *(uint16 *)&v8->charnum = R22_ | GET_WORD(v6 + 3) & 0xF1FF;
v4 = v5 + 4;
if (((v5 + 4) & 0xFE00) != 0) {
oam_next_ptr = v4;
@@ -235,20 +239,19 @@ void DrawSpritemapOffScreen(uint16 j) { // 0x818853
char v12;
char v14;
- uint16 *v1 = (uint16 *)RomPtr_8C(j);
+ const uint16 *v1 = (const uint16 *)RomPtr_8C(j);
if (*v1) {
R24_ = *v1;
uint16 v2 = j + 2;
uint16 v3 = oam_next_ptr;
if ((oam_next_ptr & 0xFE00) != 0) {
-LABEL_25:
oam_next_ptr = v3;
return;
}
uint16 v4 = oam_next_ptr;
while (1) {
- uint8 *v5 = RomPtrWithBank(0x8c, v2);
- v6 = R20_ + *(uint16 *)v5;
+ const uint8 *v5 = RomPtrWithBank(0x8c, v2);
+ v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -287,8 +290,10 @@ LABEL_22:
v7->ycoord = v14;
*(uint16 *)&v7->charnum = R22_ | *(uint16 *)(v5 + 3) & 0xF1FF;
v3 = v4 + 4;
- if (((v4 + 4) & 0xFE00) != 0)
- goto LABEL_25;
+ if (((v4 + 4) & 0xFE00) != 0) {
+ oam_next_ptr = v3;
+ return;
+ }
v4 += 4;
v2 += 5;
if (!--R24_) {
@@ -305,255 +310,178 @@ void SetXCoordToInvalidPos(uint16 k) { // 0x818907
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v1]) |= kOamExtra_X8Small_And_Large[v1];
}
-#define g_off_82C569 ((uint16*)RomPtr(0x82c569))
void DrawMenuSpritemap(uint16 a, uint16 k, uint16 j) { // 0x81891F
- int16 v8;
- OamEnt *v9;
-
- R18_ = j;
- R20_ = k;
- uint16 v3 = g_off_82C569[a];
- uint16 *v4 = (uint16 *)RomPtr_82(v3);
- if (*v4) {
- R24_ = *v4;
- uint16 v5 = v3 + 2;
- uint16 v6 = oam_next_ptr;
+ const uint8 *pp = RomPtr_82(g_off_82C569[a]);
+ if (GET_WORD(pp + 0)) {
+ int n = GET_WORD(pp + 0);
+ pp += 2;
+ int v6 = oam_next_ptr;
do {
- uint8 *v7 = RomPtr_82(v5);
- v8 = R20_ + *(uint16 *)v7;
- v9 = gOamEnt(v6);
- *(uint16 *)&v9->xcoord = v8;
+ int v10 = v6 >> 1;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]);
+ uint16 v8 = k + GET_WORD(pp + 0);
+ OamEnt *v9 = gOamEnt(v6);
+ v9->xcoord = v8;
if ((v8 & 0x100) != 0) {
- int v10 = v6 >> 1;
- if (*(int16 *)v7 >= 0) {
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10];
+ if (*(int16 *)pp >= 0) {
+ *dst |= kOamExtra_X8Small_And_Large[v10];
} else {
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_Address_And_X8Large[v10 + 1];
+ *dst |= kOamExtra_Address_And_X8Large[v10 + 1];
}
-
- } else if (*(int16 *)v7 < 0) {
- int v12 = v6 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12 + 1];
+ } else if (*(int16 *)pp < 0) {
+ *dst |= kOamExtra_X8Small_And_Large[v10 + 1];
}
- *(uint16 *)&v9->ycoord = R18_ + *((uint16 *)v7 + 1);
- *(uint16 *)&v9->charnum = R3_.addr | *(uint16 *)(v7 + 3) & 0xF1FF;
- v5 += 5;
+ v9->ycoord = j + GET_BYTE(pp + 2);
+ *(uint16 *)&v9->charnum = R3_.addr | GET_WORD(pp + 3) & 0xF1FF;
+ pp += 5;
v6 = (v6 + 4) & 0x1FF;
- --R24_;
- } while (R24_);
+ } while (--n);
oam_next_ptr = v6;
}
}
-#define kSamusSpritemapTable ((uint16*)RomPtr(0x92808d))
void DrawSamusSpritemap(uint16 a, uint16 k, uint16 j) { // 0x8189AE
- int16 v8;
- OamEnt *v9;
- uint16 v15;
-
- R18_ = j;
- R20_ = k;
uint16 v3 = kSamusSpritemapTable[a];
if (v3 == 0)
return;
- uint16 *v4 = (uint16 *)RomPtr_92(v3);
- if (*v4) {
- R24_ = *v4;
- uint16 v5 = v3 + 2;
- uint16 v6 = oam_next_ptr;
- do {
- uint8 *v7 = RomPtr_92(v5);
- v8 = R20_ + *(uint16 *)v7;
- v9 = gOamEnt(v6);
- *(uint16 *)&v9->xcoord = v8;
- if ((v8 & 0x100) != 0) {
- int v10 = v6 >> 1;
- if (*(int16 *)v7 >= 0) {
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10];
- } else {
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_Address_And_X8Large[v10 + 1];
- }
- } else if (*(int16 *)v7 < 0) {
- int v12 = v6 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12 + 1];
+ const uint8 *pp = RomPtr_92(v3);
+ int n = GET_WORD(pp + 0);
+ pp += 2;
+ uint16 v6 = oam_next_ptr;
+ for(; n; n--) {
+ int v10 = v6 >> 1;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]);
+ uint16 v8 = k + GET_WORD(pp + 0);
+ OamEnt *v9 = gOamEnt(v6);
+ v9->xcoord = v8;
+ if ((v8 & 0x100) != 0) {
+ if (*(int16 *)pp >= 0) {
+ *dst |= kOamExtra_X8Small_And_Large[v10];
+ } else {
+ *dst |= kOamExtra_Address_And_X8Large[v10 + 1];
}
- *(uint16 *)&v9->ycoord = R18_ + *((uint16 *)v7 + 1);
- *(uint16 *)&v9->charnum = *(uint16 *)(v7 + 3);
- v5 += 5;
- v15 = (v6 + 4) & 0x1FF;
- v6 = v15;
- --R24_;
- } while (R24_);
- oam_next_ptr = v15;
+ } else if (*(int16 *)pp < 0) {
+ *dst |= kOamExtra_X8Small_And_Large[v10 + 1];
+ }
+ v9->ycoord = j + GET_BYTE(pp + 2);
+ *(uint16 *)&v9->charnum = GET_WORD(pp + 3);
+ pp += 5;
+ v6 = (v6 + 4) & 0x1FF;
}
+ oam_next_ptr = v6;
}
-#define g_off_93A1A1 ((uint16*)RomPtr(0x93a1a1))
void DrawBeamGrappleSpritemap(uint16 a) { // 0x818A37
- uint16 v1 = g_off_93A1A1[a];
- R24_ = *(uint16 *)RomPtr_93(v1);
- sub_818A5F(v1 + 2);
+ sub_818A5F(RomPtr_93(g_off_93A1A1[a]));
}
void DrawProjectileSpritemap(uint16 k) { // 0x818A4B
- uint16 v1 = projectile_spritemap_pointers[k >> 1];
- uint16 *v2 = (uint16 *)RomPtr_93(v1);
- if (*v2) {
- R24_ = *v2;
- sub_818A5F(v1 + 2);
- }
+ sub_818A5F(RomPtr_93(projectile_spritemap_pointers[k >> 1]));
}
-void sub_818A5F(uint16 j) { // 0x818A5F
- uint16 v0 = j;
- int16 v3;
- OamEnt *v4;
- uint16 v10;
-
- uint16 v1 = oam_next_ptr;
+void sub_818A5F(const uint8 *pp) { // 0x818A5F
+ int n = GET_WORD(pp);
+ if (!n)
+ return;
+ pp += 2;
+ uint16 idx = oam_next_ptr;
do {
- uint8 *v2 = RomPtr_93(v0);
- v3 = R20_ + *(uint16 *)v2;
- v4 = gOamEnt(v1);
- *(uint16 *)&v4->xcoord = v3;
- if ((v3 & 0x100) != 0) {
- int v5 = v1 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v5]) |= kOamExtra_X8Small_And_Large[v5];
- }
- if (*(int16 *)v2 < 0) {
- int v7 = v1 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]) |= kOamExtra_X8Small_And_Large[v7 + 1];
- }
- *(uint16 *)&v4->ycoord = R18_ + *((uint16 *)v2 + 1);
- *(uint16 *)&v4->charnum = *(uint16 *)(v2 + 3);
- v0 += 5;
- v10 = (v1 + 4) & 0x1FF;
- v1 = v10;
- --R24_;
- } while (R24_);
- oam_next_ptr = v10;
+ int v5 = idx >> 1;
+ uint16 v3 = R20_ + GET_WORD(pp);
+ OamEnt *v4 = gOamEnt(idx);
+ v4->xcoord = v3;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v5]);
+ if ((v3 & 0x100) != 0)
+ *dst |= kOamExtra_X8Small_And_Large[v5];
+ if (*(int16 *)pp < 0)
+ *dst |= kOamExtra_X8Small_And_Large[v5 + 1];
+ v4->ycoord = R18_ + GET_BYTE(pp + 2);
+ *(uint16 *)&v4->charnum = GET_WORD(pp + 3);
+ pp += 5;
+ idx = (idx + 4) & 0x1FF;
+ } while (--n);
+ oam_next_ptr = idx;
}
void DrawSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818AB8
- int16 v5;
- OamEnt *v6;
- uint16 v12;
-
if (j == 0)
return; // bug fix
- uint16 *v1 = (uint16 *)RomPtrWithBank(db, j);
- if (*v1) {
- uint16 v2 = j + 2;
- R24_ = *v1;
- uint16 v3 = oam_next_ptr;
- do {
- uint8 *v4 = RomPtrWithBank(db, v2);
- v5 = R20_ + *(uint16 *)v4;
- v6 = gOamEnt(v3);
- *(uint16 *)&v6->xcoord = v5;
- if ((v5 & 0x100) != 0) {
- int v7 = v3 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]) |= kOamExtra_X8Small_And_Large[v7];
- }
- if (*(int16 *)v4 < 0) {
- int v9 = v3 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v9]) |= kOamExtra_X8Small_And_Large[v9 + 1];
- }
- v6->ycoord = R18_ + v4[2];
- *(uint16 *)&v6->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v4 + 3));
- bool v11 = 0;// __CFADD__(v2, 5);
- v2 += 5;
- v12 = (v11 + v3 + 4) & 0x1FF;
- v3 = v12;
- --R24_;
- } while (R24_);
- oam_next_ptr = v12;
+ uint8 *pp = (uint8 *)RomPtrWithBank(db, j);
+ int n = GET_WORD(pp);
+ uint16 v3 = oam_next_ptr;
+ pp += 2;
+ for(; n != 0; n--) {
+ int v7 = v3 >> 1;
+ OamEnt *oam = gOamEnt(v3);
+ uint16 v5 = R20_ + GET_WORD(pp + 0);
+ oam->xcoord = v5;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v7]);
+ if ((v5 & 0x100) != 0)
+ *dst |= kOamExtra_X8Small_And_Large[v7];
+ if (*(int16 *)pp < 0)
+ *dst |= kOamExtra_X8Small_And_Large[v7 + 1];
+ oam->ycoord = R18_ + pp[2];
+ *(uint16 *)&oam->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
+ pp += 5;
+ v3 = (v3 + 4) & 0x1FF;
}
+ oam_next_ptr = v3;
}
void DrawSpritemapWithBaseTile2(uint8 db, uint16 j) { // 0x818B22
- int16 v6;
- OamEnt *v7;
-
- uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
- if (*v2) {
- uint16 v3 = j + 2;
- R24_ = *v2;
- uint16 v4 = oam_next_ptr;
- while (1) {
- uint8 *v5 = RomPtrWithBank(db, v3);
- v6 = R20_ + *(uint16 *)v5;
- v7 = gOamEnt(v4);
- *(uint16 *)&v7->xcoord = v6;
- if ((v6 & 0x100) != 0) {
- int v8 = v4 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]) |= kOamExtra_X8Small_And_Large[v8];
- }
- if (*(int16 *)v5 < 0) {
- int v10 = v4 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10 + 1];
- }
- int y = v5[2] + LOBYTE(R18_);
- if ((v5[2] & 0x80) ? (y & 0x100) == 0 : (y & 0x100) != 0)
- y = 0xf0;
- v7->ycoord = y;
- *(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v5 + 3));
- v3 += 5;
- uint16 v16 = (v4 + 4) & 0x1FF;
- v4 = v16;
- if (!--R24_) {
- oam_next_ptr = v16;
- return;
- }
- }
+ const uint8 *pp = RomPtrWithBank(db, j);
+ uint16 v4 = oam_next_ptr;
+ int n = GET_WORD(pp);
+ pp += 2;
+ for (; n != 0; n--) {
+ int v8 = v4 >> 1;
+ OamEnt *oam = gOamEnt(v4);
+ uint16 v6 = R20_ + GET_WORD(pp + 0);
+ oam->xcoord = v6;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]);
+ if ((v6 & 0x100) != 0)
+ *dst |= kOamExtra_X8Small_And_Large[v8];
+ if (*(int16 *)pp < 0)
+ *dst |= kOamExtra_X8Small_And_Large[v8 + 1];
+ int y = pp[2] + LOBYTE(R18_);
+ if ((pp[2] & 0x80) ? (y & 0x100) == 0 : (y & 0x100) != 0)
+ y = 0xf0;
+ oam->ycoord = y;
+ *(uint16 *)&oam->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
+ pp += 5;
+ v4 = (v4 + 4) & 0x1FF;
}
+ oam_next_ptr = v4;
}
-void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j) { // 0x818B96
- int16 v6;
- OamEnt *v7;
- char v12;
-
- uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
- if (*v2) {
- uint16 v3 = j + 2;
- R24_ = *v2;
- uint16 v4 = oam_next_ptr;
- while (1) {
- uint8 *v5 = RomPtrWithBank(db, v3);
- v6 = R20_ + *(uint16 *)v5;
- v7 = gOamEnt(v4);
- *(uint16 *)&v7->xcoord = v6;
- if ((v6 & 0x100) != 0) {
- int v8 = v4 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]) |= kOamExtra_X8Small_And_Large[v8];
- }
- if (*(int16 *)v5 < 0) {
- int v10 = v4 >> 1;
- *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v10]) |= kOamExtra_X8Small_And_Large[v10 + 1];
- }
- v12 = v5[2];
-
- bool v13 = __CFADD__uint8((uint8)R18_, v12);
- v12 += R18_;
-
- if (!!sign8(v5[2]) == (v13 != 0))
- v12 = -16;
-
- v7->ycoord = v12;
- *(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + *(uint16 *)(v5 + 3));
- v3 += 5;
- uint16 v16 = (v4 + 4) & 0x1FF;
- v4 = v16;
- if (!--R24_) {
- oam_next_ptr = v16;
- return;
- }
- }
+void DrawSpritemapWithBaseTileOffscreen(uint8 db, uint16 j, uint16 r20_x, uint16 r18_y) { // 0x818B96
+ const uint8 *pp = RomPtrWithBank(db, j);
+ uint16 v4 = oam_next_ptr;
+ int n = GET_WORD(pp); pp += 2;
+ for (; n; n--) {
+ int v8 = v4 >> 1;
+ int v6 = r20_x + GET_WORD(pp + 0);
+ OamEnt *v7 = gOamEnt(v4);
+ v7->xcoord = v6;
+ uint16 *dst = (uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v8]);
+ if ((v6 & 0x100) != 0)
+ *dst |= kOamExtra_X8Small_And_Large[v8];
+ if (*(int16 *)pp < 0)
+ *dst |= kOamExtra_X8Small_And_Large[v8 + 1];
+ uint8 v12 = pp[2];
+ bool v13 = __CFADD__uint8((uint8)R18_, v12);
+ v12 += r18_y;
+ if (!!sign8(pp[2]) == v13)
+ v12 = 0xf0;
+ v7->ycoord = v12;
+ *(uint16 *)&v7->charnum = R3_.addr | (R0_.addr + GET_WORD(pp + 3));
+ pp += 5;
+ v4 = (v4 + 4) & 0x1FF;
}
+ oam_next_ptr = v4;
}
void DrawEnemyProjectileSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818C0A
@@ -562,14 +490,14 @@ void DrawEnemyProjectileSpritemapWithBaseTile(uint8 db, uint16 j) { // 0x818C0A
char v10;
char v12; // cf
- uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
+ const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
uint16 v4 = oam_next_ptr;
while (1) {
- uint8 *v5 = RomPtrWithBank(db, v3);
- v6 = R20_ + *(uint16 *)v5;
+ const uint8 *v5 = RomPtrWithBank(db, v3);
+ v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -597,7 +525,7 @@ LABEL_10:
int v13 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v13]) |= kOamExtra_X8Small_And_Large[v13 + 1];
}
- *(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + *(uint16 *)(v5 + 3));
+ *(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + GET_WORD(v5 + 3));
v4 = (v4 + 4) & 0x1FF;
v3 += 5;
if (!--R24_) {
@@ -614,14 +542,14 @@ void DrawEnemyProjectileSpritemapWithBaseTileOffscreen(uint8 db, uint16 j) { //
char v10;
char v12; // cf
- uint16 *v2 = (uint16 *)RomPtrWithBank(db, j);
+ const uint16 *v2 = (const uint16 *)RomPtrWithBank(db, j);
if (*v2) {
R24_ = *v2;
uint16 v3 = j + 2;
uint16 v4 = oam_next_ptr;
while (1) {
- uint8 *v5 = RomPtrWithBank(db, v3);
- v6 = R20_ + *(uint16 *)v5;
+ const uint8 *v5 = RomPtrWithBank(db, v3);
+ v6 = R20_ + GET_WORD(v5);
v7 = gOamEnt(v4);
*(uint16 *)&v7->xcoord = v6;
if ((v6 & 0x100) != 0) {
@@ -650,7 +578,7 @@ LABEL_10:
int v13 = v4 >> 1;
*(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v13]) |= kOamExtra_X8Small_And_Large[v13 + 1];
}
- *(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + *(uint16 *)(v5 + 3));
+ *(uint16 *)&v7->charnum = R28_ | (R26_ + v12 + GET_WORD(v5 + 3));
v4 = (v4 + 4) & 0x1FF;
v3 += 5;
if (!--R24_) {
@@ -759,14 +687,14 @@ void LoadDebugGameOverMenuTilemaps(void) { // 0x818E7F
vram_write_queue_tail = v1 + 7;
uint16 v3 = v1 + 7;
for (int i = 0; ; i += 8) {
- uint16 v5 = *(uint16 *)IndirPtr(&R0_, i);
+ uint16 v5 = IndirReadWord(R0_, i);
if (v5 == 0xFFFF)
break;
VramWriteEntry *v6 = gVramWriteEntry(v3);
v6->size = v5;
- v6->src.addr = *(uint16 *)IndirPtr(&R0_, i + 2);
- *(uint16 *)&v6->src.bank = *(uint16 *)IndirPtr(&R0_, i + 4);
- v6->vram_dst = *(uint16 *)IndirPtr(&R0_, i + 6);
+ v6->src.addr = IndirReadWord(R0_, i + 2);
+ *(uint16 *)&v6->src.bank = IndirReadWord(R0_, i + 4);
+ v6->vram_dst = IndirReadWord(R0_, i + 6);
v3 += 7;
}
vram_write_queue_tail = v3;
@@ -2106,16 +2034,11 @@ void FileSelectMap_3_LoadAreaSelectBackgroundTilemap(void) { // 0x81A582
}
void LoadAreaSelectBackgroundTilemap(uint16 j) { // 0x81A58A
- VramWriteEntry *v2;
- int16 v3;
-
uint16 v1 = vram_write_queue_tail;
- v2 = gVramWriteEntry(vram_write_queue_tail);
+ VramWriteEntry *v2 = gVramWriteEntry(vram_write_queue_tail);
v2->size = 2048;
- LOBYTE(v3) = HIBYTE(j);
- HIBYTE(v3) = j;
- v2->src.addr = 8 * v3 - 16614;
- *(uint16 *)&v2->src.bank = 129;
+ v2->src.addr = 8 * 256 * j + addr_kAreaSelectBackgroundTilemaps;
+ v2->src.bank = 0x81;
v2->vram_dst = (reg_BG3SC & 0xFC) << 8;
vram_write_queue_tail = v1 + 7;
}
@@ -2329,7 +2252,6 @@ uint16 WraparoundFrom6to0(uint16 a) { // 0x81A89F
}
void SelectFileSelectMapArea(void) { // 0x81A8A9
- VoidP *v1;
char v2; // cf
int16 v3;
int16 v4;
@@ -2344,19 +2266,18 @@ void SelectFileSelectMapArea(void) { // 0x81A8A9
area_index = kFileSelectMap_AreaIndexes[file_select_map_area_index];
R18_ = *(uint16 *)&used_save_stations_and_elevators[(uint16)(2 * area_index)];
uint16 v0 = 0;
- *(uint16 *)&R0_.bank = 130;
+ R0_.bank = 130;
R0_.addr = addr_kMapIconDataPointers + 64;
- v1 = (VoidP *)IndirPtr(&R0_, 2 * area_index);
- while (!*v1)
- ;
- R0_.addr = *v1;
+ R0_.addr = IndirReadWord(R0_, 2 * area_index);
+ if (!R0_.addr)
+ InvalidInterrupt_Crash();
R20_ = 16;
while (1) {
v2 = R18_ & 1;
R18_ >>= 1;
if (!v2)
goto LABEL_10;
- v3 = *(uint16 *)IndirPtr(&R0_, 4 * v0);
+ v3 = IndirReadWord(R0_, 4 * v0);
if (v3 == -2)
goto LABEL_10;
if (v3 != -1)
@@ -2366,7 +2287,7 @@ LABEL_10:
++v0;
if (!--R20_) {
while (1) {
- v4 = *(uint16 *)IndirPtr(&R0_, 4 * v0);
+ v4 = IndirReadWord(R0_, 4 * v0);
if (v4 != -2) {
if (v4 != -1)
goto LABEL_16;
@@ -2409,52 +2330,38 @@ static const uint16 kAreaSelectMapLabelPositions[12] = { // 0x81A97E
0x87, 0x8b,
};
void DrawAreaSelectMapLabels(void) {
- VoidP v0;
- int16 v3;
- char v4; // cf
- int v5;
-
R3_.addr = 0;
DrawMenuSpritemap(g_word_82C749[0], 0x80, 0x10);
- R28_ = 0;
- do {
- v0 = 512;
- if (R28_ == file_select_map_area_index)
- v0 = 0;
- R3_.addr = v0;
- uint16 v1 = 2 * kFileSelectMap_AreaIndexes[R28_];
- R36 = *(uint16 *)&used_save_stations_and_elevators[v1];
- uint16 v2 = *(VoidP *)((char *)&kMapIconDataPointers[4].crateria + v1);
- g_word_7E001E = 16;
- while (1) {
- v3 = *(uint16 *)RomPtr_82(v2);
- if (v3 == -1)
- break;
- v4 = R36 & 1;
- R36 >>= 1;
- if (v4 && v3 != -2)
+ for(int i = 0; i < 6; i++) {
+ R3_.addr = (i == file_select_map_area_index) ? 0 : 512;
+ uint16 v1 = 2 * kFileSelectMap_AreaIndexes[i];
+ uint16 r36 = *(uint16 *)&used_save_stations_and_elevators[v1];
+ const uint16 *v2 = (const uint16 *)RomPtr_82(*(VoidP *)((char *)&kMapIconDataPointers[4].crateria + v1));
+ int R30 = 16;
+ while (*v2 != 0xffff) {
+ int v4 = r36 & 1;
+ r36 >>= 1;
+ if (v4 && *v2 != 0xfffe)
goto LABEL_11;
- v2 += 4;
- if (!--g_word_7E001E) {
- if (enable_debug && *(uint16 *)RomPtr_82(v2) != 0xFFFF) {
-LABEL_11:
- v5 = (uint16)(4 * kFileSelectMap_AreaIndexes[R28_]) >> 1;
+ v2 += 2;
+ if (!--R30) {
+ if (enable_debug && *v2 != 0xFFFF) {
+LABEL_11:;
+ int j = 4 * kFileSelectMap_AreaIndexes[i] >> 1;
DrawMenuSpritemap(
- g_word_82C749[0] + kFileSelectMap_AreaIndexes[R28_] + 1,
- kAreaSelectMapLabelPositions[v5],
- kAreaSelectMapLabelPositions[v5 + 1]);
+ g_word_82C749[0] + kFileSelectMap_AreaIndexes[i] + 1,
+ kAreaSelectMapLabelPositions[j],
+ kAreaSelectMapLabelPositions[j + 1]);
break;
}
break;
}
}
- ++R28_;
- } while (sign16(R28_ - 6));
+ }
}
static const uint16 kRoomSelectMapExpandingSquareTimers[6] = { 0x33, 0x35, 0x2d, 0x33, 0x33, 0x22 };
-#define kExpandingSquareVels ((ExpandingSquareVels*)RomPtr(0x81aa34))
void FileSelectMap_7_PrepExpandSquareTransToRoomMap(void) { // 0x81AAAC
VramWriteEntry *v1;
@@ -2648,14 +2555,14 @@ void FileSelectMap_10_RoomSelectMap(void) { // 0x81AD7F
;
R0_.addr = *v2;
v3 = 4 * load_station_index;
- R18_ = *(uint16 *)IndirPtr(&R0_, 4 * load_station_index);
- R20_ = *(uint16 *)IndirPtr(&R0_, v3 + 2);
+ R18_ = IndirReadWord(R0_, 4 * load_station_index);
+ R20_ = IndirReadWord(R0_, v3 + 2);
if (!sign16(load_station_index - 16))
goto LABEL_23;
do {
if (!sign16(++load_station_index - 16)) {
while (1) {
- v5 = *(uint16 *)IndirPtr(&R0_, 4 * load_station_index);
+ v5 = IndirReadWord(R0_, 4 * load_station_index);
if (v5 == -1)
break;
if (v5 != -2)
@@ -2668,12 +2575,12 @@ LABEL_23:
}
v4 = R24_ & 1;
R24_ >>= 1;
- } while (!v4 || *(uint16 *)IndirPtr(&R0_, 4 * load_station_index) >= 0xFFFEu);
+ } while (!v4 || IndirReadWord(R0_, 4 * load_station_index) >= 0xFFFEu);
LABEL_25:;
uint16 v6 = 4 * load_station_index;
- uint8 *v7 = IndirPtr(&R0_, 4 * load_station_index);
- if (sign16(*(uint16 *)v7 - reg_BG1HOFS) || !sign16(*(uint16 *)v7 - 256 - reg_BG1HOFS)) {
- v8 = reg_BG1HOFS + *(uint16 *)IndirPtr(&R0_, v6) - R18_;
+ uint16 w7 = IndirReadWord(R0_, 4 * load_station_index);
+ if (sign16(w7 - reg_BG1HOFS) || !sign16(w7 - 256 - reg_BG1HOFS)) {
+ v8 = reg_BG1HOFS + IndirReadWord(R0_, v6) - R18_;
if (v8 >= 0) {
if ((int16)(v8 - map_min_x_scroll) >= 0)
v8 = map_min_x_scroll;
@@ -2683,9 +2590,9 @@ LABEL_25:;
reg_BG1HOFS = v8;
}
uint16 v9 = v6 + 2;
- uint8 *v10 = IndirPtr(&R0_, v9);
- if (sign16(*(uint16 *)v10 - reg_BG1VOFS) || !sign16(*(uint16 *)v10 - 161 - reg_BG1VOFS)) {
- uint16 v11 = reg_BG1VOFS + *(uint16 *)IndirPtr(&R0_, v9) - R20_;
+ uint16 v10 = IndirReadWord(R0_, v9);
+ if (sign16(v10 - reg_BG1VOFS) || !sign16(v10 - 161 - reg_BG1VOFS)) {
+ uint16 v11 = reg_BG1VOFS + IndirReadWord(R0_, v9) - R20_;
if ((int16)(v11 - map_min_y_scroll) >= 0)
v11 = map_min_y_scroll;
reg_BG1VOFS = v11;
@@ -2945,4 +2852,4 @@ void LoadMenuTilemap(uint16 k, uint16 j) { // 0x81B3E2
k += 2;
j += 2;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_82.c b/src/sm_82.c
index f662c67..a19caab 100644
--- a/src/sm_82.c
+++ b/src/sm_82.c
@@ -6,7 +6,65 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kDemoRoomData ((uint16*)RomPtr(0x82876c))
+
+#define kDemoRoomData ((uint16*)RomFixedPtr(0x82876c))
+#define kPauseScreenSpriteAnimationData_0 (*(PauseScreenSpriteAnimationData*)RomFixedPtr(0x82c0b2))
+#define kPauseScreenSpriteAnimationData_1 (*(PauseScreenSpriteAnimationData*)RomFixedPtr(0x82c0c4))
+#define kPauseScreenSpriteAnimationData_2 (*(PauseScreenSpriteAnimationData*)RomFixedPtr(0x82c0d6))
+#define kPauseScreenSpriteAnimationData_3 (*(PauseScreenSpriteAnimationData*)RomFixedPtr(0x82c0e8))
+#define kPAuseSpritePaletteIndexValues ((uint16*)RomFixedPtr(0x82c0fa))
+#define kPausePtsToAnimationSpritemapBaseIds ((uint16*)RomFixedPtr(0x82c1e4))
+#define kInitialPalette ((uint16*)RomFixedPtr(0x9a8000))
+#define kDemoRoomData ((uint16*)RomFixedPtr(0x82876c))
+#define kPauseScreenPalettes ((uint16*)RomFixedPtr(0xb6f000))
+#define kPauseLrHighlightAnimData ((uint8*)RomFixedPtr(0x82c10c))
+#define kPauseAreaLabelTilemap ((uint16*)RomFixedPtr(0x82965f))
+#define kPauseMenuMapTilemaps ((LongPtr*)RomFixedPtr(0x82964a))
+#define kPauseMenuMapData ((uint16*)RomFixedPtr(0x829717))
+#define kEquipmentTilemaps_Tanks ((uint16*)RomFixedPtr(0x82c088))
+#define kEquipmentTilemaps_Weapons ((uint16*)RomFixedPtr(0x82c08c))
+#define kEquipmentTilemaps_Suits ((uint16*)RomFixedPtr(0x82c096))
+#define kEquipmentTilemaps_Boots ((uint16*)RomFixedPtr(0x82c0a2))
+#define kHyperBeamWeaponsTilemaps ((uint16*)RomFixedPtr(0x82c0a8))
+#define kEquipmentBitmasks_Weapons ((uint16*)RomFixedPtr(0x82c04c))
+#define kEquipmentBitmasks_Suits ((uint16*)RomFixedPtr(0x82c056))
+#define kEquipmentBitmasks_Boots ((uint16*)RomFixedPtr(0x82c062))
+#define kPauseAnimatedPalette ((uint16*)RomFixedPtr(0x82a987))
+#define kPauseReserveTankAnimationData ((uint8*)RomFixedPtr(0x82c165))
+#define kEquipmentTilemapOffs_Tanks ((uint16*)RomFixedPtr(0x82c068))
+#define kEquipmentTilemapOffs_Weapons ((uint16*)RomFixedPtr(0x82c06c))
+#define kEquipmentTilemapOffs_Suits ((uint16*)RomFixedPtr(0x82c076))
+#define kEquipmentTilemapOffs_Boots ((uint16*)RomFixedPtr(0x82c082))
+#define kEquipmentTilemaps_Tanks ((uint16*)RomFixedPtr(0x82c088))
+#define kEquipmentTilemaps_Weapons ((uint16*)RomFixedPtr(0x82c08c))
+#define kEquipmentTilemaps_Suits ((uint16*)RomFixedPtr(0x82c096))
+#define kEquipmentTilemaps_Boots ((uint16*)RomFixedPtr(0x82c0a2))
+#define kEquipmentScreenWireframeCmp ((uint16*)RomFixedPtr(0x82b257))
+#define kEquipmentScreenWireframePtrs ((uint16*)RomFixedPtr(0x82b25f))
+#define kEquipmentScreenPtrsToItemXYpos ((uint16*)RomFixedPtr(0x82c18e))
+#define kEquipmentPtrsToRamTilemapOffsets ((uint16*)RomFixedPtr(0x82c02c))
+#define kEquipmentPtrsToBitmasks ((uint16*)RomFixedPtr(0x82c034))
+#define kEquipmentPtrsToBitsets ((uint16*)RomFixedPtr(0x82c03c))
+#define kEquipmentPtrsToEquipmentTilemaps ((uint16*)RomFixedPtr(0x82c044))
+#define kMapIconDataPointers ((MapIconDataPointers*)RomFixedPtr(0x82c7cb))
+#define g_stru_82B9A0 ((MapScrollArrowData*)RomFixedPtr(0x82b9a0))
+#define g_stru_82B9AA ((MapScrollArrowData*)RomFixedPtr(0x82b9aa))
+#define g_stru_82B9B4 ((MapScrollArrowData*)RomFixedPtr(0x82b9b4))
+#define g_stru_82B9BE (*(MapScrollArrowData*)RomFixedPtr(0x82b9be))
+#define file_copy_arrow_stuff ((FileCopyArrowStuff*)RomFixedPtr(0x82bb0c))
+#define kMapElevatorDests ((uint16*)RomFixedPtr(0x82c74d))
+#define kStateHeaderGraphicsSets ((uint16*)RomFixedPtr(0x8fe7a7))
+#define kCommonSpritesPalette1 ((uint16*)RomFixedPtr(0x9afc00))
+#define kMenuPalettes ((uint16*)RomFixedPtr(0x8ee400))
+#define kOptionsMenuSpecialPtrs ((uint16*)RomFixedPtr(0x82f0ae))
+#define off_82F2ED ((uint16*)RomFixedPtr(0x82f2ed))
+#define off_82F54A ((uint16*)RomFixedPtr(0x82f54a))
+#define g_word_82F639 ((uint16*)RomFixedPtr(0x82f639))
+#define g_off_82F647 ((uint16*)RomFixedPtr(0x82f647))
+
+
+
+
void CallDemoRoomDataFunc(uint32 ea) {
switch (ea) {
case fnDemoRoom_ChargeBeamRoomScroll21: DemoRoom_ChargeBeamRoomScroll21(); return;
@@ -225,7 +283,6 @@ void InitPpuForGameplay(void) { // 0x8281DD
memset7E(ram4000.bg2_tilemap, 0x2C0F, 0xFE);
}
-#define kInitialPalette ((uint16*)RomPtr(0x9a8000))
void LoadInitialPalette(void) { // 0x8282C5
int16 v0;
@@ -471,7 +528,6 @@ CoroutineRet GameState_44_TransitionFromDemo(void) { // 0x8285FB
return kCoroutineNone;
}
-#define kDemoRoomData ((uint16*)RomPtr(0x82876c))
void CheckForNextDemo(void) { // 0x828637
R18_ = 2 * (demo_scene + 8 * demo_scene);
@@ -870,16 +926,16 @@ uint8 CreateOptionsMenuObject_(uint16 a, uint16 j) {
if ((v3 & 0x8000u) != 0)
return 1;
}
- uint8 *v5 = RomPtr_82(j);
+ const uint8 *v5 = RomPtr_82(j);
int v6 = v3 >> 1;
- optionsmenu_arr1[v6] = *((uint16 *)v5 + 1);
- optionsmenu_instr_ptr[v6] = *((uint16 *)v5 + 2);
+ optionsmenu_arr1[v6] = GET_WORD(v5 + 2);
+ optionsmenu_instr_ptr[v6] = GET_WORD(v5 + 4);
optionsmenu_instr_timer[v6] = 1;
optionsmenu_cur_data[v6] = 0;
optionsmenu_arr5[v6] = 0;
optionsmenu_arr6[v6] = 0;
optionsmenu_arr7[v6] = 0;
- CallOptionsEntryFunc(*(uint16 *)v5 | 0x820000, v3);
+ CallOptionsEntryFunc(GET_WORD(v5) | 0x820000, v3);
return 0;
}
@@ -927,20 +983,19 @@ void OptionsMenuFunc2(uint16 k) { // 0x828C2B
uint16 v1 = optionsmenu_index;
int v2 = optionsmenu_index >> 1;
if (optionsmenu_instr_timer[v2]-- == 1) {
- uint16 v4 = optionsmenu_instr_ptr[v2], v6;
+ uint16 v4 = optionsmenu_instr_ptr[v2];
+ uint16 *v5;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_82(v4);
- v6 = *v5;
- if ((*v5 & 0x8000u) == 0)
+ v5 = (uint16 *)RomPtr_82(v4);
+ if ((v5[0] & 0x8000u) == 0)
break;
- R18_ = *v5;
- v4 = CallOptionsInstr(v6 | 0x820000, v1, v4 + 2);
+ v4 = CallOptionsInstr(v5[0] | 0x820000, v1, v4 + 2);
if (!v4)
return;
}
int v7 = v1 >> 1;
- optionsmenu_instr_timer[v7] = v6;
- optionsmenu_cur_data[v7] = *((uint16 *)RomPtr_82(v4) + 1);
+ optionsmenu_instr_timer[v7] = v5[0];
+ optionsmenu_cur_data[v7] = v5[1];
optionsmenu_instr_ptr[v7] = v4 + 4;
}
}
@@ -1188,7 +1243,6 @@ void LoadEqupmentScreenReserveHealthTilemap(void) { // 0x828F70
}
}
-#define kPauseScreenPalettes ((uint16*)RomPtr(0xb6f000))
void BackupGameplayPalettesAndLoadForPause(void) { // 0x828FD4
int16 v0;
int16 v2;
@@ -1328,7 +1382,6 @@ void PauseMenu_5(void) { // 0x829186
++menu_index;
}
}
-#define kPauseLrHighlightAnimData ((uint8*)RomPtr(0x82c10c))
void PauseMenu_3_MapToEquipment_Load(void) { // 0x8291AB
DisplayMapElevatorDestinations();
EquipmentScreenSetupReserveMode();
@@ -1502,7 +1555,6 @@ CoroutineRet GameState_18_Unpausing(void) { // 0x8293A1
return kCoroutineNone;
}
-#define kPauseAreaLabelTilemap ((uint16*)RomPtr(0x82965f))
void LoadPauseMenuMapTilemapAndAreaLabel(void) { // 0x8293C3
reg_BG1HOFS = reg_BG4HOFS;
reg_BG1VOFS = reg_BG4VOFS;
@@ -1528,13 +1580,9 @@ void LoadPauseMenuMapTilemapAndAreaLabel(void) { // 0x8293C3
WriteReg(MDMAEN, 2u);
}
-#define kPauseMenuMapTilemaps ((LongPtr*)RomPtr(0x82964a))
-#define kPauseMenuMapData ((uint16*)RomPtr(0x829717))
void LoadPauseMenuMapTilemap(void) { // 0x82943D
- uint16 v5;
uint16 v6;
int16 v9;
- uint16 v13;
uint16 v0 = area_index;
if (!sign16(area_index - 7))
@@ -1544,28 +1592,20 @@ void LoadPauseMenuMapTilemap(void) { // 0x82943D
*(uint16 *)&R0_.bank = *(uint16 *)(&kPauseMenuMapTilemaps[0].bank + (uint16)(3 * v0));
R3_.addr = ADDR16_OF_RAM(ram4000);
*(uint16 *)&R3_.bank = 126;
- R8_ = 130;
- R6_ = kPauseMenuMapData[v0];
+ R6_.bank = 130;
+ R6_.addr = kPauseMenuMapData[v0];
if (map_station_byte_array[area_index]) {
- uint8 *v4 = IndirPtr(&R6_, 0);
- LOBYTE(v5) = HIBYTE(*(uint16 *)v4);
- HIBYTE(v5) = *(uint16 *)v4;
- R38 = v5;
- ++R6_;
- ++R6_;
+ R38 = swap16(IndirReadWord(R6_, 0));
+ R6_.addr += 2;
v6 = ADDR16_OF_RAM(*map_tiles_explored);
- *(uint16 *)((char *)&R10_ + 1) = 0;
- *(uint16 *)((char *)&R8_ + 1) = v6;
- uint8 *v7 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v5) = HIBYTE(*(uint16 *)v7);
- HIBYTE(v5) = *(uint16 *)v7;
- R40 = v5;
- ++ *(uint16 *)((char *)&R8_ + 1);
- ++ *(uint16 *)((char *)&R8_ + 1);
+ R9_.bank = 0;
+ R9_.addr = v6;
+ R40 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 2;
uint16 v8 = 0;
v9 = 16;
do {
- uint16 v10 = *(uint16 *)IndirPtr(&R0_, v8);
+ uint16 v10 = IndirReadWord(R0_, v8);
bool v11 = R40 >> 15;
R40 *= 2;
if (v11) {
@@ -1577,21 +1617,13 @@ void LoadPauseMenuMapTilemap(void) { // 0x82943D
if (!v11)
v10 = 31;
}
- IndirWriteWord(&R3_, v8, v10);
+ IndirWriteWord(R3_, v8, v10);
if (!--v9) {
v9 = 16;
- uint8 *v12 = IndirPtr(&R6_, 0);
- LOBYTE(v13) = HIBYTE(*(uint16 *)v12);
- HIBYTE(v13) = *(uint16 *)v12;
- R38 = v13;
- ++R6_;
- ++R6_;
- uint8 *v14 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v13) = HIBYTE(*(uint16 *)v14);
- HIBYTE(v13) = *(uint16 *)v14;
- R40 = v13;
- ++ *(uint16 *)((char *)&R8_ + 1);
- ++ *(uint16 *)((char *)&R8_ + 1);
+ R38 = swap16(IndirReadWord(R6_, 0));
+ R6_.addr += 2;
+ R40 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 2;
}
v8 += 2;
} while ((int16)(v8 - 4096) < 0);
@@ -1603,11 +1635,10 @@ void LoadPauseMenuMapTilemap(void) { // 0x82943D
uint8 t = map_tiles_explored[v2];
map_tiles_explored[v2] <<= 1;
if (!(t & 0x80)) {
- IndirWriteWord(&R3_, v1, 0x1F);
+ IndirWriteWord(R3_, v1, 0x1F);
} else {
++map_tiles_explored[v2];
- uint8 *v3 = IndirPtr(&R0_, v1);
- IndirWriteWord(&R3_, v1, *(uint16 *)v3 & 0xFBFF);
+ IndirWriteWord(R3_, v1, IndirReadWord(R0_, v1) & 0xFBFF);
}
v1 += 2;
LOBYTE(R18_) = R18_ + 1;
@@ -1622,10 +1653,8 @@ void LoadPauseMenuMapTilemap(void) { // 0x82943D
void DrawRoomSelectMap(void) { // 0x829517
uint16 v3; // r8
- uint16 v6;
unsigned int v7; // kr00_4
int16 v10;
- uint16 v14;
VramWriteEntry *v17;
reg_BG12NBA = 51;
@@ -1639,28 +1668,21 @@ void DrawRoomSelectMap(void) { // 0x829517
*(uint16 *)&R0_.bank = *(uint16 *)(&kPauseMenuMapTilemaps[0].bank + (uint16)(3 * v0));
R3_.addr = ADDR16_OF_RAM(ram3000);
R3_.bank = 126;
- R8_ = 130;
- R6_ = kPauseMenuMapData[v0];
+ R6_.bank = 130;
+ R6_.addr = kPauseMenuMapData[v0];
if (map_station_byte_array[area_index]) {
- uint8 *v5 = IndirPtr(&R6_, 0);
- LOBYTE(v6) = HIBYTE(*(uint16 *)v5);
- HIBYTE(v6) = *(uint16 *)v5;
- R38 = v6;
- ++R6_;
- ++R6_;
+ R38 = swap16(IndirReadWord(R6_, 0));
+ ++R6_.addr;
+ ++R6_.addr;
v7 = 2039;
- *(uint16 *)((char *)&R10_ + 1) = HIWORD(v7);
- *(uint16 *)((char *)&R8_ + 1) = v7;
- uint8 *v8 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v6) = HIBYTE(*(uint16 *)v8);
- HIBYTE(v6) = *(uint16 *)v8;
- R40 = v6;
- ++ *(uint16 *)((char *)&R8_ + 1);
- ++ *(uint16 *)((char *)&R8_ + 1);
+ R9_.bank = HIWORD(v7);
+ R9_.addr = v7;
+ R40 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 2;
uint16 v9 = 0;
v10 = 16;
do {
- uint16 v11 = *(uint16 *)IndirPtr(&R0_, v9);
+ uint16 v11 = IndirReadWord(R0_, v9);
bool v12 = R40 >> 15;
R40 *= 2;
if (v12) {
@@ -1672,21 +1694,13 @@ void DrawRoomSelectMap(void) { // 0x829517
if (!v12)
v11 = 31;
}
- IndirWriteWord(&R3_, v9, v11);
+ IndirWriteWord(R3_, v9, v11);
if (!--v10) {
v10 = 16;
- uint8 *v13 = IndirPtr(&R6_, 0);
- LOBYTE(v14) = HIBYTE(*(uint16 *)v13);
- HIBYTE(v14) = *(uint16 *)v13;
- R38 = v14;
- ++R6_;
- ++R6_;
- uint8 *v15 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v14) = HIBYTE(*(uint16 *)v15);
- HIBYTE(v14) = *(uint16 *)v15;
- R40 = v14;
- ++ *(uint16 *)((char *)&R8_ + 1);
- ++ *(uint16 *)((char *)&R8_ + 1);
+ R38 = swap16(IndirReadWord(R6_, 0));
+ R6_.addr += 2;
+ R40 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 2;
}
v9 += 2;
} while ((int16)(v9 - 4096) < 0);
@@ -1698,10 +1712,10 @@ void DrawRoomSelectMap(void) { // 0x829517
uint8 what = map_tiles_explored[v2];
map_tiles_explored[v2] <<= 1;
if (!(what & 0x80)) {
- IndirWriteWord(&R3_, v1, 0xF);
+ IndirWriteWord(R3_, v1, 0xF);
} else {
++map_tiles_explored[v2];
- IndirWriteWord(&R3_, v1, *(uint16 *)IndirPtr(&R0_, v1) & ~0x400);
+ IndirWriteWord(R3_, v1, IndirReadWord(R0_, v1) & ~0x400);
}
v1 += 2;
LOBYTE(R18_) = R18_ + 1;
@@ -1723,14 +1737,9 @@ void DrawRoomSelectMap(void) { // 0x829517
}
void DrawRoomSelectMapAreaLabel(void) { // 0x829628
- uint16 v0 = kPauseAreaLabelTilemap[area_index];
- uint16 v1 = 0;
- do {
- uint8 *v2 = RomPtr_82(v0);
- IndirWriteWord(&R0_, v1, *(uint16 *)v2 & 0xEFFF);
- v0 += 2;
- v1 += 2;
- } while ((int16)(v1 - 24) < 0);
+ const uint8 *v2 = RomPtr_82(kPauseAreaLabelTilemap[area_index]);
+ for(int i = 0; i < 24; i += 2)
+ IndirWriteWord(R0_, i, *(uint16 *)(v2 + i) & 0xEFFF);
}
void SetupMapScrollingForPauseMenu(uint16 a) { // 0x829E27
@@ -1763,26 +1772,26 @@ void SetupMapScrollingForPauseMenu(uint16 a) { // 0x829E27
void DetermineMapScrollLimits(void) { // 0x829EC4
if (has_area_map) {
- R8_ = 130;
- R6_ = addr_kPauseMenuMapData;
- R6_ = *(uint16 *)IndirPtr(&R6_, 2 * area_index);
+ R6_.bank = 130;
+ R6_.addr = addr_kPauseMenuMapData;
+ R6_.addr = IndirReadWord(R6_, 2 * area_index);
} else {
- R8_ = 0;
- R6_ = 2039;
+ R6_.bank = 0;
+ R6_.addr = 2039;
}
- R0_.bank = R8_;
- R0_.addr = R6_;
+ R0_.bank = R6_.bank;
+ R0_.addr = R6_.addr;
uint16 v0 = DetermineLeftmostMapColumn();
map_min_x_scroll = MultiplyBy8(v0);
if (area_index == 4)
map_min_x_scroll -= 24;
- R0_.addr = R6_ + 131;
+ R0_.addr = R6_.addr + 131;
uint16 v1 = DetermineRightmostMapColumn();
map_max_x_scroll = MultiplyBy8(v1);
- R0_.addr = R6_;
+ R0_.addr = R6_.addr;
uint16 v2 = DetermineTopmostMapColumn();
map_min_y_scroll = MultiplyBy8(v2);
- R0_.addr = R6_ + 124;
+ R0_.addr = R6_.addr + 124;
uint16 v3 = DetermineBottommostMapColumn();
map_max_y_scroll = MultiplyBy8(v3);
}
@@ -1804,7 +1813,7 @@ LABEL_2:
LOBYTE(v0) = result & 7;
LOBYTE(R18_) = k0x80Shr[v0];
uint16 v2 = 0;
- while (((uint8)R18_ & *IndirPtr(&R0_, v2)) == 0) {
+ while (((uint8)R18_ & IndirReadByte(R0_, v2)) == 0) {
v2 += 4;
if ((int16)(v2 - 128) >= 0) {
if ((int16)(++result - 64) >= 0)
@@ -1826,7 +1835,7 @@ uint16 DetermineRightmostMapColumn(void) { // 0x829FA9
LABEL_2:
LOBYTE(R18_) = k0x80Shr_0[result & 7];
uint16 v1 = 0;
- while (((uint8)R18_ & *IndirPtr(&R0_, v1)) == 0) {
+ while (((uint8)R18_ & IndirReadByte(R0_, v1)) == 0) {
v1 += 4;
if ((int16)(v1 - 128) >= 0) {
if ((--result & 0x8000u) != 0)
@@ -1848,7 +1857,7 @@ uint16 DetermineTopmostMapColumn(void) { // 0x82A009
R3_.bank = R0_.bank;
uint16 result = 0;
uint16 v1 = 0;
- while (!*IndirPtr(&R0_, v1) && !*IndirPtr(&R3_, v1)) {
+ while (!IndirReadByte(R0_, v1) && !IndirReadByte(R3_, v1)) {
if ((int16)(++v1 - 4) >= 0) {
v1 = 0;
R0_.addr += 4;
@@ -1865,7 +1874,7 @@ uint16 DetermineBottommostMapColumn(void) { // 0x82A053
R3_.bank = R0_.bank;
uint16 result = 31;
uint16 v1 = 0;
- while (!*IndirPtr(&R0_, v1) && !*IndirPtr(&R3_, v1)) {
+ while (!IndirReadByte(R0_, v1) && !IndirReadByte(R3_, v1)) {
if ((int16)(++v1 - 4) >= 0) {
v1 = 0;
R0_.addr -= 4;
@@ -1921,31 +1930,23 @@ void ResetPauseMenuAnimations(void) { // 0x82A0F7
pausemenu_palette_animation_timer = 1;
pausemenu_palette_animation_frame = 0;
}
-#define kEquipmentTilemaps_Tanks ((uint16*)RomPtr(0x82c088))
-#define kEquipmentTilemaps_Weapons ((uint16*)RomPtr(0x82c08c))
-#define kEquipmentTilemaps_Suits ((uint16*)RomPtr(0x82c096))
-#define kEquipmentTilemaps_Boots ((uint16*)RomPtr(0x82c0a2))
-#define kHyperBeamWeaponsTilemaps ((uint16*)RomPtr(0x82c0a8))
-#define kEquipmentBitmasks_Weapons ((uint16*)RomPtr(0x82c04c))
-#define kEquipmentBitmasks_Suits ((uint16*)RomPtr(0x82c056))
-#define kEquipmentBitmasks_Boots ((uint16*)RomPtr(0x82c062))
void LoadEquipmentScreenEquipmentTilemaps(void) { // 0x82A12B
if (samus_max_reserve_health) {
R3_.addr = addr_kEquipmentTilemapOffs_Tanks;
*(uint16 *)&R3_.bank = 130;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, 0);
+ R0_.addr = IndirReadWord(R3_, 0);
R22_ = 14;
Copy_R22_Bytes(kEquipmentTilemaps_Tanks[0]);
R3_.addr = addr_kEquipmentTilemapOffs_Tanks;
*(uint16 *)&R3_.bank = 130;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, 2u);
+ R0_.addr = IndirReadWord(R3_, 2u);
R22_ = 14;
Copy_R22_Bytes(kEquipmentTilemaps_Tanks[1]);
}
uint16 v0 = 0;
R3_.addr = addr_kEquipmentTilemapOffs_Weapons;
*(uint16 *)&R3_.bank = 130;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, 0);
+ R0_.addr = IndirReadWord(R3_, 0);
if (hyper_beam_flag) {
uint16 v3 = 0;
do {
@@ -1953,7 +1954,7 @@ void LoadEquipmentScreenEquipmentTilemaps(void) { // 0x82A12B
R22_ = 10;
Copy_R22_Bytes(v4);
v3 += 2;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, v3);
+ R0_.addr = IndirReadWord(R3_, v3);
} while ((int16)(v3 - 10) < 0);
} else {
do {
@@ -1972,13 +1973,13 @@ void LoadEquipmentScreenEquipmentTilemaps(void) { // 0x82A12B
Copy_R22_Bytes(addr_kEquipmentScreenTilemap_Blank);
}
v0 += 2;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, v0);
+ R0_.addr = IndirReadWord(R3_, v0);
} while ((int16)(v0 - 12) < 0);
}
uint16 v5 = 0;
R3_.addr = addr_kEquipmentTilemapOffs_Suits;
*(uint16 *)&R3_.bank = 130;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, 0);
+ R0_.addr = IndirReadWord(R3_, 0);
do {
int v6 = v5 >> 1;
if ((collected_items & kEquipmentBitmasks_Suits[v6]) != 0) {
@@ -1995,12 +1996,12 @@ void LoadEquipmentScreenEquipmentTilemaps(void) { // 0x82A12B
Copy_R22_Bytes(addr_kEquipmentScreenTilemap_Blank);
}
v5 += 2;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, v5);
+ R0_.addr = IndirReadWord(R3_, v5);
} while ((int16)(v5 - 12) < 0);
uint16 v8 = 0;
R3_.addr = addr_kEquipmentTilemapOffs_Boots;
*(uint16 *)&R3_.bank = 130;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, 0);
+ R0_.addr = IndirReadWord(R3_, 0);
do {
int v9 = v8 >> 1;
if ((collected_items & kEquipmentBitmasks_Boots[v9]) != 0) {
@@ -2016,32 +2017,29 @@ void LoadEquipmentScreenEquipmentTilemaps(void) { // 0x82A12B
Copy_R22_Bytes(addr_kEquipmentScreenTilemap_Blank);
}
v8 += 2;
- R0_.addr = *(uint16 *)IndirPtr(&R3_, v8);
+ R0_.addr = IndirReadWord(R3_, v8);
} while ((int16)(v8 - 6) < 0);
}
void Copy_R22_Bytes(uint16 k) { // 0x82A27E
- R0_.bank = 126;
+ R0_.bank = 0x7E;
uint16 v1 = 0;
do {
- uint16 *v2 = (uint16 *)RomPtr_82(k);
- IndirWriteWord(&R0_, v1, *v2);
+ const uint16 *v2 = (const uint16 *)RomPtr_82(k);
+ IndirWriteWord(R0_, v1, *v2);
k += 2;
v1 += 2;
- --R22_;
- --R22_;
+ R22_ -= 2;
} while (R22_);
}
void SetPaletteOfR22TilemapBytesToR18(void) { // 0x82A29D
- R0_.bank = 126;
+ R0_.bank = 0x7E;
uint16 v0 = 0;
do {
- uint8 *v1 = IndirPtr(&R0_, v0);
- IndirWriteWord(&R0_, v0, R18_ | *(uint16 *)v1 & 0xE3FF);
+ IndirWriteWord(R0_, v0, R18_ | IndirReadWord(R0_, v0) & 0xE3FF);
v0 += 2;
- --R22_;
- --R22_;
+ R22_ -= 2;
} while (R22_);
}
@@ -2423,47 +2421,25 @@ void UpdatePauseMenuLRStartVramTilemap(void) { // 0x82A84D
vram_write_queue_tail = v0 + 2;
}
-#define kPauseScreenSpriteAnimationData_0 (*(PauseScreenSpriteAnimationData*)RomPtr(0x82c0b2))
-#define kPauseScreenSpriteAnimationData_1 (*(PauseScreenSpriteAnimationData*)RomPtr(0x82c0c4))
-#define kPauseScreenSpriteAnimationData_2 (*(PauseScreenSpriteAnimationData*)RomPtr(0x82c0d6))
-#define kPauseScreenSpriteAnimationData_3 (*(PauseScreenSpriteAnimationData*)RomPtr(0x82c0e8))
-#define kPAuseSpritePaletteIndexValues ((uint16*)RomPtr(0x82c0fa))
-#define kPausePtsToAnimationSpritemapBaseIds ((uint16*)RomPtr(0x82c1e4))
-
-void DrawPauseScreenSpriteAnim(uint16 a, uint16 k, uint16 j) { // 0x82A881
- int16 v9;
- int16 v10;
- int16 v12;
-
- R18_ = k;
- R20_ = j;
- uint16 v3 = 2 * (a - 1);
- uint16 v4 = *(VoidP *)((char *)&kPauseScreenSpriteAnimationData_0.unused + v3);
- uint8 *v5 = RomPtr_RAM(v4);
- bool v6 = *(uint16 *)v5 == 1;
- bool v7 = (int16)-- * (uint16 *)v5 < 0;
- if (v6 || v7) {
- R24_ = v4;
- uint8 *v8 = RomPtr_RAM(*(VoidP *)((char *)&kPauseScreenSpriteAnimationData_1.unused + v3));
- v9 = *(uint16 *)v8 + 1;
- *(uint16 *)v8 = v9;
- R22_ = *(uint16 *)v8 + 2 * v9;
- v10 = *RomPtr_82(R22_ + *(VoidP *)((char *)&kPauseScreenSpriteAnimationData_3.unused + v3));
+void DrawPauseScreenSpriteAnim(uint16 a, uint16 input_k, uint16 input_j) { // 0x82A881
+ int t = a - 1;
+ uint16 *v8 = (uint16*)RomPtr_RAM(kPauseScreenSpriteAnimationData_1.arr[t]);
+ uint16 *v5 = (uint16*)RomPtr_RAM(kPauseScreenSpriteAnimationData_0.arr[t]);
+ const uint8 *v3 = RomPtr_82(kPauseScreenSpriteAnimationData_3.arr[t]);
+ if ((int16)--(*v5) <= 0) {
+ uint16 v10 = v3[3 * ++(*v8)];
if (v10 == 255) {
- *(uint16 *)RomPtr_RAM(*(VoidP *)((char *)&kPauseScreenSpriteAnimationData_1.unused + v3)) = 0;
- v10 = *RomPtr_82(*(VoidP *)((char *)&kPauseScreenSpriteAnimationData_3.unused + v3));
+ *v8 = 0;
+ v10 = v3[0];
}
- *(uint16 *)RomPtr_RAM(R24_) = v10;
+ *v5 = v10;
}
- R24_ = 3 * *(uint16 *)RomPtr_RAM(*(VoidP *)((char *)&kPauseScreenSpriteAnimationData_1.unused + v3));
- v12 = R24_ + *(VoidP *)((char *)&kPauseScreenSpriteAnimationData_3.unused + v3) + 1;
R3_.addr = kPAuseSpritePaletteIndexValues[3];
- R24_ = *RomPtr_82(v12 + 1);
- R26_ = 2 * *RomPtr_RAM(*(VoidP *)((char *)&kPauseScreenSpriteAnimationData_2.unused + v3));
- uint8 *v11 = RomPtr_82(R26_ + kPausePtsToAnimationSpritemapBaseIds[v3 >> 1]);
- DrawMenuSpritemap(R24_ + *(uint16 *)v11, R18_, R20_ - 1);
+ int r24 = v3[3 * *v8 + 2];
+ int r26 = 2 * *RomPtr_RAM(kPauseScreenSpriteAnimationData_2.arr[t]);
+ const uint8 *v11 = RomPtr_82(r26 + kPausePtsToAnimationSpritemapBaseIds[t]);
+ DrawMenuSpritemap(r24 + GET_WORD(v11), input_k, input_j - 1);
}
-#define kPauseAnimatedPalette ((uint16*)RomPtr(0x82a987))
void HandlePauseScreenPaletteAnimation(void) { // 0x82A92B
uint16 v2;
uint16 j;
@@ -2490,7 +2466,6 @@ void HandlePauseScreenPaletteAnimation(void) { // 0x82A92B
}
}
}
-#define kPauseReserveTankAnimationData ((uint8*)RomPtr(0x82c165))
void EquipmentScreenSetupReserveMode(void) { // 0x82AB47
VoidP v0;
int16 v3;
@@ -2513,7 +2488,7 @@ void EquipmentScreenSetupReserveMode(void) { // 0x82AB47
uint16 v2 = 0;
do {
v3 = ram3800.cinematic_bg_tilemap[v1 + 327] & 0xFC00;
- ram3800.cinematic_bg_tilemap[v1 + 327] = *(uint16 *)IndirPtr(&R0_, v2) | v3;
+ ram3800.cinematic_bg_tilemap[v1 + 327] = IndirReadWord(R0_, v2) | v3;
v2 += 2;
++v1;
--R18_;
@@ -2748,10 +2723,11 @@ void EquipmentScreenCategory_Tanks_0(void) {
}
void EquipmentScreenHudReserveAutoTilemap_On_BUGGY(void) { // 0x82AEFD
+ // loads garbage...
uint16 v0 = -26229;
if (!samus_reserve_health)
v0 = -26217;
- uint16 *v1 = (uint16 *)RomPtr_82(v0);
+ const uint16 *v1 = (const uint16 *)RomPtr_82(v0);
hud_tilemap[8] = *v1;
hud_tilemap[9] = v1[1];
hud_tilemap[40] = v1[2];
@@ -2827,14 +2803,6 @@ void EquipmentScreenCategory_Weapons_MoveButtons(void) { // 0x82AFDB
}
}
}
-#define kEquipmentTilemapOffs_Tanks ((uint16*)RomPtr(0x82c068))
-#define kEquipmentTilemapOffs_Weapons ((uint16*)RomPtr(0x82c06c))
-#define kEquipmentTilemapOffs_Suits ((uint16*)RomPtr(0x82c076))
-#define kEquipmentTilemapOffs_Boots ((uint16*)RomPtr(0x82c082))
-#define kEquipmentTilemaps_Tanks ((uint16*)RomPtr(0x82c088))
-#define kEquipmentTilemaps_Weapons ((uint16*)RomPtr(0x82c08c))
-#define kEquipmentTilemaps_Suits ((uint16*)RomPtr(0x82c096))
-#define kEquipmentTilemaps_Boots ((uint16*)RomPtr(0x82c0a2))
void EquipmentScreenCategory_Weapons_PlazmaSpazerCheck(void) { // 0x82B068
int t = equipped_beams & ~R36;
@@ -2926,8 +2894,6 @@ void WriteSamusWireframeTilemapAndQueue(void) { // 0x82B1E0
vram_write_queue_tail = v0 + 2;
}
-#define kEquipmentScreenWireframeCmp ((uint16*)RomPtr(0x82b257))
-#define kEquipmentScreenWireframePtrs ((uint16*)RomPtr(0x82b25f))
void WriteSamusWireframeTilemap(void) { // 0x82B20C
uint16 i;
@@ -2943,7 +2909,7 @@ void WriteSamusWireframeTilemap(void) { // 0x82B20C
uint16 v3 = v2;
R18_ = 8;
do {
- *(uint16 *)((char *)ram3800.cinematic_bg_tilemap + v2) = *(uint16 *)IndirPtr(&R0_, v1);
+ *(uint16 *)((char *)ram3800.cinematic_bg_tilemap + v2) = IndirReadWord(R0_, v1);
v2 += 2;
v1 += 2;
--R18_;
@@ -2953,14 +2919,12 @@ void WriteSamusWireframeTilemap(void) { // 0x82B20C
} while (R20_);
}
-#define kEquipmentScreenPtrsToItemXYpos ((uint16*)RomPtr(0x82c18e))
void EquipmentScreenDrawItemSelector(void) { // 0x82B267
if (samus_max_reserve_health | (uint16)(collected_items | collected_beams)) {
- R18_ = kEquipmentScreenPtrsToItemXYpos[(uint16)(2 * (uint8)pausemenu_equipment_category_item) >> 1];
- uint16 v0 = *(uint16 *)RomPtr_82(R18_ + 4 * HIBYTE(pausemenu_equipment_category_item)) - 1;
- uint16 v1 = *(uint16 *)RomPtr_82(R18_ + 4 * HIBYTE(pausemenu_equipment_category_item) + 2);
- DrawPauseScreenSpriteAnim(3u, v0, v1);
+ uint16 *t = (uint16*)RomPtr_82(kEquipmentScreenPtrsToItemXYpos[(uint8)pausemenu_equipment_category_item] +
+ 4 * HIBYTE(pausemenu_equipment_category_item));
+ DrawPauseScreenSpriteAnim(3, t[0] - 1, t[1]);
}
}
@@ -3162,10 +3126,6 @@ uint16 EquipmentScreenCategory_Boots_MoveUpInBoots(uint16 k) { // 0x82B53F
pausemenu_equipment_category_item = result;
return result;
}
-#define kEquipmentPtrsToRamTilemapOffsets ((uint16*)RomPtr(0x82c02c))
-#define kEquipmentPtrsToBitmasks ((uint16*)RomPtr(0x82c034))
-#define kEquipmentPtrsToBitsets ((uint16*)RomPtr(0x82c03c))
-#define kEquipmentPtrsToEquipmentTilemaps ((uint16*)RomPtr(0x82c044))
void EquipmentScreenCategory_ButtonResponse(void) { // 0x82B568
if ((joypad1_newkeys & kButton_A) != 0) {
QueueSfx1_Max6(0x38u);
@@ -3230,7 +3190,6 @@ void DrawMapIcons(void) { // 0x82B672
kMap_Criteria_SavePoints[1] - reg_BG1VOFS);
}
}
-#define kMapIconDataPointers ((MapIconDataPointers*)RomPtr(0x82c7cb))
void DrawFileSelectMapIcons(void) { // 0x82B6DD
int16 v0;
@@ -3245,8 +3204,8 @@ void DrawFileSelectMapIcons(void) { // 0x82B6DD
*(uint16 *)&R0_.bank = 130;
R0_.addr = *(VoidP *)((char *)&kMapIconDataPointers[4].crateria + (uint16)(2 * area_index));
v0 = 4 * load_station_index;
- uint16 v1 = *(uint16 *)IndirPtr(&R0_, 4 * load_station_index) - reg_BG1HOFS;
- uint16 v2 = *(uint16 *)IndirPtr(&R0_, v0 + 2) - reg_BG1VOFS;
+ uint16 v1 = IndirReadWord(R0_, 4 * load_station_index) - reg_BG1HOFS;
+ uint16 v2 = IndirReadWord(R0_, v0 + 2) - reg_BG1VOFS;
if ((samus_position_indicator_animation_loop_counter & 1) == 0)
DrawMenuSpritemap(0x12, v1, v2);
DrawMenuSpritemap(a, v1, v2);
@@ -3267,21 +3226,17 @@ void DrawFileSelectMapIcons(void) { // 0x82B6DD
void DrawSaveStationMapIcon(uint16 a, uint16 k) { // 0x82B798
static const uint8 kShlBit[8] = { 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80 };
-
-
- R32 = k;
R34 = a;
if (area_index == sram_area_index) {
R36 = *(uint16 *)&used_save_stations_and_elevators[(uint16)(2 * area_index)];
LOBYTE(R36) = R36 & kShlBit[load_station_index];
- uint16 v2 = *(uint16 *)RomPtr_82(R32 + 2 * area_index);
+ uint16 v2 = *(uint16 *)RomPtr_82(k + 2 * area_index);
if (v2)
DrawMapIconsOfType(v2);
}
}
void DrawDebugSaveMapIcons(uint16 a, uint16 k) { // 0x82B7D1
- R32 = k;
R34 = a;
R36 = *(uint16 *)&used_save_stations_and_elevators[(uint16)(2 * area_index)];
uint16 v2 = *(uint16 *)RomPtr_82(k + 2 * area_index);
@@ -3290,7 +3245,6 @@ void DrawDebugSaveMapIcons(uint16 a, uint16 k) { // 0x82B7D1
}
void DrawDebugElevatorMapIcons(uint16 a, uint16 k) { // 0x82B7EB
- R32 = k;
R34 = a;
R36 = *(uint16 *)&used_save_stations_and_elevators[(uint16)(2 * area_index) + 1];
uint16 v2 = *(uint16 *)RomPtr_82(k + 2 * area_index);
@@ -3299,7 +3253,6 @@ void DrawDebugElevatorMapIcons(uint16 a, uint16 k) { // 0x82B7EB
}
void DrawSimpleMapIcons(uint16 a, uint16 k) { // 0x82B805
- R32 = k;
R34 = a;
R36 = -1;
uint16 v2 = *(uint16 *)RomPtr_82(k + 2 * area_index);
@@ -3312,17 +3265,15 @@ void DrawMapIconsOfType(uint16 a) { // 0x82B81C
int16 v4;
while (1) {
- uint16 *v2 = (uint16 *)RomPtr_82(a);
+ const uint16 *v2 = (const uint16 *)RomPtr_82(a);
if ((*v2 & 0x8000u) != 0)
break;
v3 = R36 & 1;
R36 >>= 1;
if (v3) {
- v4 = CheckIfMapPositionIsExplored(*v2, v2[1]);
- if (v4) {
- uint8 *v5 = RomPtr_82(a);
- DrawMenuSpritemap(R34, *(uint16 *)v5 - reg_BG1HOFS, *((uint16 *)v5 + 1) - reg_BG1VOFS);
- }
+ v4 = CheckIfMapPositionIsExplored(v2[0], v2[1]);
+ if (v4)
+ DrawMenuSpritemap(R34, v2[0] - reg_BG1HOFS, v2[1] - reg_BG1VOFS);
}
a += 4;
}
@@ -3345,57 +3296,45 @@ uint16 CheckIfMapPositionIsExplored(uint16 k, uint16 j) { // 0x82B855
}
void DrawBossMapIcons(uint16 a, uint16 k) { // 0x82B892
- int16 v4;
- char v5; // cf
-
- R32 = k;
- R34 = a;
- R36 = boss_bits_for_area[area_index];
- uint8 *v2 = RomPtr_82(k + 2 * area_index);
- if (*(uint16 *)v2) {
- for (int i = *(uint16 *)v2; ; i += 4) {
- v4 = *(uint16 *)RomPtr_82(i);
- if (v4 == -1)
- return;
- if (v4 != -2) {
- R3_.addr = 3584;
- v5 = R36 & 1;
- R36 >>= 1;
- if (v5) {
- {
- uint8 *v7 = RomPtr_82(i);
- DrawMenuSpritemap(0x62, *(uint16 *)v7 - reg_BG1HOFS, *((uint16 *)v7 + 1) - reg_BG1VOFS);
- R3_.addr = 3072;
- }
-LABEL_7:;
- uint8 *v6 = RomPtr_82(i);
- DrawMenuSpritemap(R34, *(uint16 *)v6 - reg_BG1HOFS, *((uint16 *)v6 + 1) - reg_BG1VOFS);
- continue;
- }
- if (has_area_map)
- goto LABEL_7;
+ int bits = boss_bits_for_area[area_index];
+ int t = *(uint16 *)RomPtr_82(k + 2 * area_index);
+ if (t == 0)
+ return;
+ const uint16 *v4 = (const uint16 *)RomPtr_82(t);
+ for (; ; v4 += 2) {
+ if (v4[0] == 0xffff)
+ return;
+ if (v4[0] != 0xfffe) {
+ R3_.addr = 3584;
+ int v5 = bits & 1;
+ bits >>= 1;
+ if (v5) {
+ DrawMenuSpritemap(0x62, v4[0] - reg_BG1HOFS, v4[1] - reg_BG1VOFS);
+ R3_.addr = 3072;
+ DrawMenuSpritemap(a, v4[0] - reg_BG1HOFS, v4[1] - reg_BG1VOFS);
+ continue;
+ }
+ if (has_area_map) {
+ DrawMenuSpritemap(a, v4[0] - reg_BG1HOFS, v4[1] - reg_BG1VOFS);
+ continue;
}
- R36 >>= 1;
}
+ bits >>= 1;
}
}
void DrawMapScrollArrowAndCheckToScroll(uint8 db, uint16 k) { // 0x82B90A
- uint16 *v1 = (uint16 *)RomPtrWithBank(db, k);
+ const uint16 *v1 = (const uint16 *)RomPtrWithBank(db, k);
DrawPauseScreenSpriteAnim(v1[2], *v1, v1[1]);
- uint8 *v2 = RomPtrWithBank(db, k);
- if ((joypad1_lastkeys & *((uint16 *)v2 + 3)) != 0 && !map_scrolling_direction)
- map_scrolling_direction = *((uint16 *)v2 + 4);
+ const uint8 *v2 = RomPtrWithBank(db, k);
+ if ((joypad1_lastkeys & GET_WORD(v2 + 6)) != 0 && !map_scrolling_direction)
+ map_scrolling_direction = GET_WORD(v2 + 8);
}
void sub_82B932(void) { // 0x82B932
HandleMapScrollArrows();
}
-#define g_stru_82B9A0 ((MapScrollArrowData*)RomPtr(0x82b9a0))
-#define g_stru_82B9AA ((MapScrollArrowData*)RomPtr(0x82b9aa))
-#define g_stru_82B9B4 ((MapScrollArrowData*)RomPtr(0x82b9b4))
-#define g_stru_82B9BE (*(MapScrollArrowData*)RomPtr(0x82b9be))
void HandleMapScrollArrows(void) { // 0x82B934
if (sign16(map_min_x_scroll - 24 - reg_BG1HOFS))
@@ -3472,7 +3411,6 @@ void DrawMenuSelectionMissile(void) { // 0x82BA6E
enemy_projectile_id[5],
enemy_projectile_id[10]);
}
-#define file_copy_arrow_stuff ((FileCopyArrowStuff*)RomPtr(0x82bb0c))
void DrawFileCopyArrow(void) { // 0x82BABA
uint16 v0;
if ((int16)(enemy_projectile_id[16] - enemy_projectile_id[17]) >= 0) {
@@ -3496,15 +3434,14 @@ void DrawFileCopyArrow(void) { // 0x82BABA
file_copy_arrow_stuff[v0].xpos,
file_copy_arrow_stuff[v0].ypos);
}
-#define kMapElevatorDests ((uint16*)RomPtr(0x82c74d))
void DisplayMapElevatorDestinations(void) { // 0x82BB30
R3_.addr = 0;
if (map_station_byte_array[area_index]) {
for (int i = kMapElevatorDests[area_index]; ; i += 6) {
- uint8 *v1 = RomPtr_82(i);
- if (*(uint16 *)v1 == 0xFFFF)
+ const uint8 *v1 = RomPtr_82(i);
+ if (GET_WORD(v1) == 0xFFFF)
break;
- DrawMenuSpritemap(*((uint16 *)v1 + 2), *(uint16 *)v1 - reg_BG1HOFS, *((uint16 *)v1 + 1) - reg_BG1VOFS);
+ DrawMenuSpritemap(GET_WORD(v1 + 4), GET_WORD(v1) - reg_BG1HOFS, GET_WORD(v1 + 2) - reg_BG1VOFS);
}
}
}
@@ -3529,15 +3466,15 @@ void sub_82BB7F(uint16 a) { // 0x82BB7F
uint16 current_instruction = enemy_data[0].current_instruction;
enemy_data[0].instruction_timer = a - 1;
if (a == 1) {
- uint8 *v2 = RomPtr_82(enemy_data[0].current_instruction);
- if (*((uint16 *)v2 + 3) == 0xFFFF) {
+ const uint8 *v2 = RomPtr_82(enemy_data[0].current_instruction);
+ if (GET_WORD(v2 + 6) == 0xFFFF) {
sub_82BBDD();
- } else if ((int16)(*((uint16 *)v2 + 3) + 1) >= 0) {
- enemy_data[0].instruction_timer = *((uint16 *)v2 + 3);
+ } else if ((int16)(GET_WORD(v2 + 6) + 1) >= 0) {
+ enemy_data[0].instruction_timer = GET_WORD(v2 + 6);
enemy_data[0].current_instruction += 6;
DrawBabyMetroid(current_instruction + 6);
} else {
- R18_ = *((uint16 *)v2 + 3);
+ R18_ = GET_WORD(v2 + 6);
CallBabyMetroidPlaySfx(R18_ | 0x820000);
}
} else {
@@ -3553,24 +3490,20 @@ void sub_82BBDD(void) { // 0x82BBDD
void DrawBabyMetroid(uint16 k) { // 0x82BB9E
uint16 v1 = *((uint16 *)RomPtr_82(k) + 2);
- uint16 v2 = 0;
- do {
- palette_buffer[(v2 >> 1) + 192] = *(uint16 *)RomPtr_82(v1);
- v1 += 2;
- v2 += 2;
- } while ((int16)(v2 - 32) < 0);
+ for(int i = 0; i < 32; i += 2)
+ palette_buffer[(i >> 1) + 192] = *(uint16 *)RomPtr_82(v1 + i);
R3_.addr = 2048;
- uint8 *v3 = RomPtr_82(k);
- DrawMenuSpritemap(*((uint16 *)v3 + 1), 0x7C, 0x50);
+ const uint8 *v3 = RomPtr_82(k);
+ DrawMenuSpritemap(GET_WORD(v3 + 2), 0x7C, 0x50);
R3_.addr = 2560;
DrawMenuSpritemap(0x64, 0x7C, 0x50);
}
void FinishProcessingGameOverBabyMetroidAsm(void) { // 0x82BBF0
- uint16 current_instruction = enemy_data[0].current_instruction;
- enemy_data[0].instruction_timer = *((uint16 *)RomPtr_82(enemy_data[0].current_instruction) + 4);
+ uint16 t = *((uint16 *)RomPtr_82(enemy_data[0].current_instruction) + 4);
+ enemy_data[0].instruction_timer = t;
enemy_data[0].current_instruction += 8;
- if (*(uint16 *)RomPtr_82(current_instruction + 8) == 0xFFFF)
+ if (t == 0xFFFF)
sub_82BBDD();
else
DrawBabyMetroid(enemy_data[0].current_instruction);
@@ -3666,44 +3599,22 @@ uint8 AdvancePaletteFadeForAllPalettes(void) { // 0x82DA02
}
uint16 CalculateNthTransitionColorFromXtoY(uint16 a, uint16 k, uint16 j) { // 0x82DA4A
- int16 v3;
- char v4; // t0
- int16 v8;
-
- uint16 v7 = CalculateNthTransitionColorComponentFromXtoY(a, k & 0x1F, j & 0x1F);
- v8 = v7 | (32 * CalculateNthTransitionColorComponentFromXtoY(a, (k >> 5) & 0x1F, (j >> 5) & 0x1F));
- v3 = 4
- * CalculateNthTransitionColorComponentFromXtoY(
- a,
- ((uint16)(k >> 2) >> 8) & 0x1F,
- ((uint16)(j >> 2) >> 8) & 0x1F);
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
- return v8 | v3;
+ return CalculateNthTransitionColorComponentFromXtoY(a, k & 0x1F, j & 0x1F) |
+ CalculateNthTransitionColorComponentFromXtoY(a, (k >> 5) & 0x1F, (j >> 5) & 0x1F) << 5 |
+ CalculateNthTransitionColorComponentFromXtoY(a, (k >> 10) & 0x1F, (j >> 10) & 0x1F) << 10;
}
uint16 CalculateNthTransitionColorComponentFromXtoY(uint16 a, uint16 k, uint16 j) { // 0x82DAA6
- int16 v4;
- char v6; // t0
- int16 v8;
-
if (!a)
return k;
- v4 = a - 1;
+ uint16 v4 = a - 1;
if (v4 == palette_change_denom)
return j;
R20_ = v4 + 1;
R18_ = j - k;
- uint16 v5 = abs16(j - k);
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- uint16 RegWord = SnesDivide(v5 & 0xFF00, palette_change_denom - R20_ + 1);
+ uint16 RegWord = SnesDivide((abs16(j - k) << 8) & 0xFF00, palette_change_denom - R20_ + 1);
R18_ = sign16(R18_) ? -RegWord : RegWord;
- LOBYTE(v8) = HIBYTE(k);
- HIBYTE(v8) = k;
- return (uint16)(R18_ + v8) >> 8;
+ return (uint16)(R18_ + (k << 8)) >> 8;
}
uint8 sub_82DAF7(uint16 a) { // 0x82DAF7
@@ -3941,7 +3852,7 @@ void LoadDoorHeader(void) { // 0x82DE12
else
samus_distance_from_door = 200;
}
- *(uint16 *)((char *)&R18_ + 1) = samus_distance_from_door;
+ R19_ = samus_distance_from_door;
samus_door_transition_subspeed = R18_;
samus_door_transition_speed = R20_;
}
@@ -3965,7 +3876,6 @@ void LoadRoomHeader(void) { // 0x82DE6F
uint16 prod = Mult8x8(room_width_in_blocks, room_height_in_blocks);
room_size_in_blocks = 2 * prod;
}
-#define kStateHeaderGraphicsSets ((uint16*)RomPtr(0x8fe7a7))
void LoadStateHeader(void) { // 0x82DEF2
StateHeaderTiles *StateHeaderTiles; // r10
RoomDefRoomstate *RoomDefRoomstate; // r11
@@ -4085,7 +3995,6 @@ void PlayRoomMusicTrackAfterAFrames(uint16 a) { // 0x82E118
}
}
-#define kCommonSpritesPalette1 ((uint16*)RomPtr(0x9afc00))
void LoadColorsForSpritesBeamsAndEnemies(void) { // 0x82E139
uint16 j;
uint16 k;
@@ -4292,9 +4201,6 @@ CoroutineRet DoorTransitionFunction_SetupScrolling(void) { // 0x82E38E
}
CoroutineRet DoorTransitionFunction_PlaceSamusLoadTiles(void) { // 0x82E3C0
- static const LongPtr unk_82E421 = LONGPTR(0x7e7000);
- static const LongPtr unk_82E432 = LONGPTR(0x7e2000);
- static const LongPtr unk_82E443 = LONGPTR(0x7ec200);
static const CopyToVramAtNextInterruptArgs unk_82E449 = { LONGPTR(0x7e2000), 0x0000, 0x2000 };
static const CopyToVramAtNextInterruptArgs unk_82E453 = { LONGPTR(0x7e4000), 0x1000, 0x2000 };
static const CopyToVramAtNextInterruptArgs unk_82E45D = { LONGPTR(0x7e6000), 0x2000, 0x1000 };
@@ -4315,18 +4221,15 @@ CoroutineRet DoorTransitionFunction_PlaceSamusLoadTiles(void) { // 0x82E3C0
v0 = 22;
irqhandler_next_handler = v0;
WaitUntilEndOfVblankAndEnableIrq();
- if ((cre_bitset & 2) != 0 && door_def_ptr != (uint16)addr_kDoorDef_947a) {
- mov24(&decompress_src, 0xb98000);
- DecompressToMem_IpArg(&unk_82E421);
+ if ((cre_bitset & 2) != 0 && door_def_ptr != addr_kDoorDef_947a) {
+ DecompressToMem(0xb98000, g_ram + 0x7000);
}
- copy24(&decompress_src, &tileset_tiles_pointer);
- DecompressToMem_IpArg(&unk_82E432);
- copy24(&decompress_src, &tileset_compr_palette_ptr);
- DecompressToMem_IpArg(&unk_82E443);
+ DecompressToMem(Load24(&tileset_tiles_pointer), g_ram + 0x2000);
+ DecompressToMem(Load24(&tileset_compr_palette_ptr), g_ram + 0xc200);
CopyToVramAtNextInterrupt(&unk_82E449);
CopyToVramAtNextInterrupt(&unk_82E453);
CopyToVramAtNextInterrupt(&unk_82E45D);
- if ((cre_bitset & 6) != 0 && door_def_ptr != (uint16)addr_kDoorDef_947a) {
+ if ((cre_bitset & 6) != 0 && door_def_ptr != addr_kDoorDef_947a) {
CopyToVramAtNextInterrupt(&unk_82E477);
CopyToVramAtNextInterrupt(&unk_82E481);
CopyToVramAtNextInterrupt(&unk_82E48B);
@@ -4349,7 +4252,7 @@ static Func_Y_Y *const kUpdateBackgroundCommands[8] = {
};
CoroutineRet DoorTransitionFunction_LoadMoreThings_Async(void) {
- int16 bg_data_ptr;
+ uint16 bg_data_ptr;
COROUTINE_BEGIN(coroutine_state_1, 0);
@@ -4377,7 +4280,7 @@ CoroutineRet DoorTransitionFunction_LoadMoreThings_Async(void) {
WaitForIrqDoorTransitionVramUpdate();
}
bg_data_ptr = get_RoomDefRoomstate(roomdefroomstate_ptr)->bg_data_ptr;
- if (bg_data_ptr < 0) {
+ if (bg_data_ptr & 0x8000) {
do {
int v1 = *(uint16 *)RomPtr_8F(bg_data_ptr) >> 1;
bg_data_ptr = kUpdateBackgroundCommands[v1](bg_data_ptr + 2);
@@ -4444,22 +4347,17 @@ uint16 UpdateBackgroundCommand_E_DoorDependentTransferToVRAM(uint16 j) { // 0x8
}
uint16 UpdateBackgroundCommand_2_TransferToVram(uint16 j) { // 0x82E5EB
- uint8 *v1 = RomPtr_8F(j);
- door_transition_vram_update_dst = *(uint16 *)(v1 + 3);
+ const uint8 *v1 = RomPtr_8F(j);
+ door_transition_vram_update_dst = GET_WORD(v1 + 3);
copy24(&door_transition_vram_update_src, (LongPtr *)v1);
- door_transition_vram_update_size = *(uint16 *)(v1 + 5);
+ door_transition_vram_update_size = GET_WORD(v1 + 5);
WaitForIrqDoorTransitionVramUpdate();
return j + 7;
}
uint16 UpdateBackgroundCommand_4_Decompression(uint16 j) { // 0x82E616
- LongPtr *v1;
-
- v1 = (LongPtr *)RomPtr_8F(j);
- copy24(&decompress_src, v1);
- *(VoidP *)((char *)&decompress_dst.addr + 1) = 32256;
- decompress_dst.addr = v1[1].addr;
- DecompressToMem();
+ const uint8 *v1 = RomPtr_8F(j);
+ DecompressToMem(Load24((LongPtr *)v1), g_ram + GET_WORD(v1 + 3));
return j + 5;
}
@@ -4556,18 +4454,11 @@ void LoadDestinationRoomThings(void) { // 0x82E76B
void LoadCRETilesTilesetTilesAndPalette(void) { // 0x82E783
elevator_flags = 0;
WriteRegWord(VMAIN, 0x80);
- mov24(&decompress_src, 0xb98000);
- decompress_dst.addr = addr_unk_605000;
- WriteRegWord(VMADDL, 0x2800);
- DecompressToVRAM();
- copy24(&decompress_src, &tileset_tiles_pointer);
+ WriteRegWord(VMADDL, addr_unk_605000 >> 1);
+ DecompressToVRAM(0xb98000, addr_unk_605000);
WriteRegWord(VMADDL, 0);
- decompress_dst.addr = 0;
- DecompressToVRAM();
- *(VoidP *)((char *)&decompress_src.addr + 1) = *(VoidP *)((char *)&tileset_compr_palette_ptr.addr + 1);
- decompress_src.addr = tileset_compr_palette_ptr.addr;
- static const LongPtr unk_82E7CD = LONGPTR(0x7ec200);
- DecompressToMem_IpArg(&unk_82E7CD);
+ DecompressToVRAM(Load24(&tileset_tiles_pointer), 0);
+ DecompressToMem(Load24(&tileset_compr_palette_ptr), &g_ram[0xc200]);
}
void LoadLevelDataAndOtherThings(void) { // 0x82E7D3
@@ -4580,19 +4471,12 @@ void LoadLevelDataAndOtherThings(void) { // 0x82E7D3
uint16 m;
char v10;
char v11;
-
uint16 n;
char v14;
- static const LongPtr unk_82E849 = LONGPTR(0x7ea000);
- static const LongPtr unk_82E85A = LONGPTR(0x7ea800);
- static const LongPtr unk_82E86D = LONGPTR(0x7ea000);
-
for (int i = 25598; i >= 0; i -= 2)
level_data[i >> 1] = 0x8000;
- copy24(&decompress_src, &room_compr_level_data_ptr);
- static const DecompressToParams unk_82E7F8 = { LONGPTR(0x7f0000) };
- DecompressToMem_IpArg(&unk_82E7F8);
+ DecompressToMem(Load24(&room_compr_level_data_ptr), g_ram + 0x10000);
uint16 v1 = ram7F_start;
for (j = ram7F_start + ram7F_start + (ram7F_start >> 1); ; custom_background[v1 >> 1] = level_data[j >> 1]) {
j -= 2;
@@ -4608,13 +4492,10 @@ void LoadLevelDataAndOtherThings(void) { // 0x82E7D3
break;
}
if (area_index == 6) {
- copy24(&decompress_src, &tileset_tile_table_pointer);
- DecompressToMem_IpArg(&unk_82E86D);
+ DecompressToMem(Load24(&tileset_tile_table_pointer), g_ram + 0xa000);
} else {
- mov24(&decompress_src, 0xb9a09d);
- DecompressToMem_IpArg(&unk_82E849);
- copy24(&decompress_src, &tileset_tile_table_pointer);
- DecompressToMem_IpArg(&unk_82E85A);
+ DecompressToMem(0xb9a09d, g_ram + 0xa000);
+ DecompressToMem(Load24(&tileset_tile_table_pointer), g_ram + 0xa800);
}
RoomDefRoomstate = get_RoomDefRoomstate(roomdefroomstate_ptr);
rdf_scroll_ptr = RoomDefRoomstate->rdf_scroll_ptr;
@@ -4654,7 +4535,7 @@ void LoadLevelDataAndOtherThings(void) { // 0x82E7D3
void SpawnDoorClosingPLM(void) { // 0x82E8EB
if (!CheckIfColoredDoorCapSpawned()) {
- uint16 *v0 = (uint16 *)RomPtr_8F(2 * door_direction + addr_kDoorClosingPlmIds);
+ const uint16 *v0 = (const uint16 *)RomPtr_8F(2 * door_direction + addr_kDoorClosingPlmIds);
if (*v0) {
R18_ = *v0;
R20_ = *(uint16 *)&get_DoorDef(door_def_ptr)->x_pos_plm;
@@ -4664,15 +4545,9 @@ void SpawnDoorClosingPLM(void) { // 0x82E8EB
}
uint8 CheckIfColoredDoorCapSpawned(void) { // 0x82E91C
- DoorDef *DoorDef;
- int16 x_pos_plm;
- int16 v2;
- int16 v6;
-
- DoorDef = get_DoorDef(door_def_ptr);
- uint16 prod = Mult8x8(DoorDef->y_pos_plm, room_width_in_blocks);
- x_pos_plm = DoorDef->x_pos_plm;
- v2 = 2 * (prod + x_pos_plm);
+ DoorDef *DD = get_DoorDef(door_def_ptr);
+ uint16 prod = Mult8x8(DD->y_pos_plm, room_width_in_blocks);
+ uint16 v2 = 2 * (prod + DD->x_pos_plm);
uint16 v3 = 78;
while (v2 != plm_block_indices[v3 >> 1]) {
v3 -= 2;
@@ -4682,18 +4557,17 @@ uint8 CheckIfColoredDoorCapSpawned(void) { // 0x82E91C
int v5 = v3 >> 1;
if (!plm_header_ptr[v5])
return 0;
- v6 = plm_room_arguments[v5];
+ int16 v6 = plm_room_arguments[v5];
if (v6 >= 0) {
int idx = PrepareBitAccess(v6);
if ((bitmask & opened_door_bit_array[idx]) != 0)
return 0;
}
- int v7 = v3 >> 1;
- plm_instruction_timer[v7] = 1;
- uint16 v8 = plm_header_ptr[v7];
+ plm_instruction_timer[v5] = 1;
+ uint16 v8 = plm_header_ptr[v5];
if (!v8)
return 0;
- plm_instr_list_ptrs[v3 >> 1] = get_PlmHeader_Size4(v8)[1].func_ptr;
+ plm_instr_list_ptrs[v5] = get_PlmHeader_Size6(v8)->instr_list_2_ptr;
return 1;
}
@@ -4709,7 +4583,7 @@ static Func_Y_Y *const kLoadLibraryBackgroundFuncs[8] = { // 0x82E97C
};
void LoadLibraryBackground(void) {
- int16 bg_data_ptr;
+ uint16 bg_data_ptr;
ClearFXTilemap();
if (fx_tilemap_ptr) {
@@ -4722,7 +4596,7 @@ void LoadLibraryBackground(void) {
WriteReg(MDMAEN, 2u);
}
bg_data_ptr = get_RoomDefRoomstate(roomdefroomstate_ptr)->bg_data_ptr;
- if (bg_data_ptr < 0) {
+ if (bg_data_ptr & 0x8000) {
do {
uint16 v1 = *(uint16 *)RomPtr_8F(bg_data_ptr);
bg_data_ptr += 2;
@@ -4743,7 +4617,7 @@ uint16 LoadLibraryBackgroundFunc_E_DoorDependentTransferToVram(uint16 j) { // 0
}
uint16 LoadLibraryBackgroundFunc_2_TransferToVram(uint16 j) { // 0x82E9F9
- uint16 *LoadBg_28 = (uint16 *)get_LoadBg_28(j);
+ uint16 *LoadBg_28 = (uint16 *)RomPtr_8F(j);
WriteRegWord(VMADDL, *(uint16 *)((char *)LoadBg_28 + 3));
WriteRegWord(DMAP1, 0x1801);
WriteRegWord(A1T1L, *LoadBg_28);
@@ -4755,13 +4629,8 @@ uint16 LoadLibraryBackgroundFunc_2_TransferToVram(uint16 j) { // 0x82E9F9
}
uint16 LoadLibraryBackgroundFunc_4_Decompress(uint16 j) { // 0x82EA2D
- LongPtr *LoadBg_28;
-
- LoadBg_28 = (LongPtr *)get_LoadBg_28(j);
- copy24(&decompress_src, LoadBg_28);
- *(VoidP *)((char *)&decompress_dst.addr + 1) = 32256;
- decompress_dst.addr = LoadBg_28[1].addr;
- DecompressToMem();
+ const uint8 *p = RomPtr_8F(j);
+ DecompressToMem(Load24((LongPtr *)p), g_ram + GET_WORD(p + 3));
return j + 5;
}
@@ -4797,10 +4666,6 @@ void LoadLevelScrollAndCre(void) { // 0x82EA73
char v11;
char v12;
- static const LongPtr unk_82EAA0 = LONGPTR(0x7f0000);
- static const LongPtr unk_82EAF9 = LONGPTR(0x7ea000);
- static const LongPtr unk_82EB0A = LONGPTR(0x7ea800);
- static const LongPtr unk_82EB1D = LONGPTR(0x7ea000);
for (int i = 6398; i >= 0; i -= 2) {
level_data[i >> 1] = 0x8000;
@@ -4808,8 +4673,7 @@ void LoadLevelScrollAndCre(void) { // 0x82EA73
level_data[(i >> 1) + 3200 * 2] = 0x8000;
level_data[(i >> 1) + 3200 * 3] = 0x8000;
}
- copy24(&decompress_src, &room_compr_level_data_ptr);
- DecompressToMem_IpArg(&unk_82EAA0);
+ DecompressToMem(Load24(&room_compr_level_data_ptr), g_ram + 0x10000);
uint16 v1 = ram7F_start;
for (j = ram7F_start + ram7F_start + (ram7F_start >> 1); ; custom_background[v1 >> 1] = level_data[j >> 1]) {
j -= 2;
@@ -4827,15 +4691,12 @@ void LoadLevelScrollAndCre(void) { // 0x82EA73
break;
}
if (area_index == 6) {
- copy24(&decompress_src, &tileset_tile_table_pointer);
- DecompressToMem_IpArg(&unk_82EB1D);
+ DecompressToMem(Load24(&tileset_tile_table_pointer), g_ram + 0xa000);
} else {
if ((cre_bitset & 2) != 0) {
- mov24(&decompress_src, 0xb9a09d);
- DecompressToMem_IpArg(&unk_82EAF9);
+ DecompressToMem(0xb9a09d, g_ram + 0xa000);
}
- copy24(&decompress_src, &tileset_tile_table_pointer);
- DecompressToMem_IpArg(&unk_82EB0A);
+ DecompressToMem(Load24(&tileset_tile_table_pointer), g_ram + 0xa800);
}
RoomDefRoomstate = get_RoomDefRoomstate(roomdefroomstate_ptr);
rdf_scroll_ptr = RoomDefRoomstate->rdf_scroll_ptr;
@@ -4868,7 +4729,7 @@ void CreatePlmsExecuteDoorAsmRoomSetup(void) { // 0x82EB6C
RoomDefRoomstate *RoomDefRoomstate;
RoomDefRoomstate = get_RoomDefRoomstate(roomdefroomstate_ptr);
if (RoomDefRoomstate->room_plm_header_ptr) {
- for (int i = RoomDefRoomstate->room_plm_header_ptr; get_PlmHeader_Size6(i)->func_ptr; i += 6)
+ for (int i = RoomDefRoomstate->room_plm_header_ptr; get_RoomPlmEntry(i)->plm_header_ptr_; i += 6)
SpawnRoomPLM(i);
}
RunDoorSetupCode();
@@ -4916,16 +4777,8 @@ void GameOptionsMenuFunc_0(void) { // 0x82EBDB
}
}
-#define kMenuPalettes ((uint16*)RomPtr(0x8ee400))
void GameOptionsMenu_1_LoadingOptionsScreen(void) { // 0x82EC11
uint16 j;
-
- static const DecompressToParams unk_82EC74 = { LONGPTR(0x7fc000) };
- static const DecompressToParams unk_82EC85 = { LONGPTR(0x7fc800) };
- static const DecompressToParams unk_82EC96 = { LONGPTR(0x7fd000) };
- static const DecompressToParams unk_82ECA7 = { LONGPTR(0x7fd800) };
- static const DecompressToParams unk_82ECB8 = { LONGPTR(0x7fe000) };
-
reg_BG12NBA = 0;
reg_TM = 19;
reg_TS = 0;
@@ -4948,16 +4801,11 @@ void GameOptionsMenu_1_LoadingOptionsScreen(void) { // 0x82EC11
debug_invincibility = 0;
for (int i = 510; i >= 0; i -= 2)
palette_buffer[i >> 1] = kMenuPalettes[i >> 1];
- mov24(&decompress_src, 0x978DF4);
- DecompressToMem_IpArg(&unk_82EC74);
- mov24(&decompress_src, 0x978FCD);
- DecompressToMem_IpArg(&unk_82EC85);
- mov24(&decompress_src, 0x9791C4);
- DecompressToMem_IpArg(&unk_82EC96);
- mov24(&decompress_src, 0x97938D);
- DecompressToMem_IpArg(&unk_82ECA7);
- mov24(&decompress_src, 0x97953A);
- DecompressToMem_IpArg(&unk_82ECB8);
+ DecompressToMem(0x978DF4, g_ram + 0x1c000);
+ DecompressToMem(0x978FCD, g_ram + 0x1c800);
+ DecompressToMem(0x9791C4, g_ram + 0x1d000);
+ DecompressToMem(0x97938D, g_ram + 0x1d800);
+ DecompressToMem(0x97953A, g_ram + 0x1e000);
for (j = 1023; (j & 0x8000u) == 0; --j)
ram3000.pause_menu_map_tilemap[j] = custom_background[j + 5375];
menu_option_index = 0;
@@ -5206,10 +5054,9 @@ void GameOptionsMenu_8_SpecialSettings(void) {
GameOptionsMenuItemFunc_4();
}
}
-#define kOptionsMenuSpecialPtrs ((uint16*)RomPtr(0x82f0ae))
void GameOptionsMenuSpecialSettings_0(void) { // 0x82F08E
uint8 *v0 = RomPtr_RAM(kOptionsMenuSpecialPtrs[menu_option_index]);
- if (*(uint16 *)v0)
+ if (GET_WORD(v0))
*(uint16 *)v0 = 0;
else
*(uint16 *)v0 = 1;
@@ -5341,14 +5188,13 @@ void sub_82F296(uint16 j) { // 0x82F296
enemy_projectile_x_vel[v1 + 3] = 56;
enemy_projectile_x_vel[v1 + 11] = 3584;
}
-#define off_82F2ED ((uint16*)RomPtr(0x82f2ed))
void OptionsPreInstr_F2A9(uint16 v0) { // 0x82F2A9
if (game_state == kGameState_2_GameOptionsMenu) {
int v2 = game_options_screen_index;
uint16 v3 = off_82F2ED[v2];
if (v3) {
R18_ = off_82F2ED[v2];
- uint16 *v4 = (uint16 *)RomPtr_82(v3 + 4 * menu_option_index);
+ const uint16 *v4 = (const uint16 *)RomPtr_82(v3 + 4 * menu_option_index);
int v5 = v0 >> 1;
enemy_projectile_y_pos[v5 + 13] = *v4;
enemy_projectile_x_vel[v5 + 3] = v4[1];
@@ -5444,7 +5290,6 @@ void OptionsPreInstr_F42C(uint16 k) { // 0x82F42C
enemy_projectile_y_vel[v1 + 17] = addr_off_82F4B6;
}
}
-#define off_82F54A ((uint16*)RomPtr(0x82f54a))
void LoadControllerOptionsFromControllerBindings(void) { // 0x82F4DC
int16 v2;
@@ -5496,8 +5341,6 @@ uint8 OptionsMenuFunc8(void) {
} while (v2 < 12);
return 0;
}
-#define g_word_82F639 ((uint16*)RomPtr(0x82f639))
-#define g_off_82F647 ((uint16*)RomPtr(0x82f647))
static const uint16 g_word_82F6AD[6] = { // 0x82F587
0,
0xe,
@@ -5513,7 +5356,7 @@ void OptionsMenuFunc6(void) {
v4 = v0;
int v1 = v0 >> 1;
uint16 v2 = g_word_82F639[v1];
- uint16 *v3 = (uint16 *)RomPtr_82(g_off_82F647[(uint16)(2 * enemy_projectile_F[v1 + 13]) >> 1]);
+ const uint16 *v3 = (const uint16 *)RomPtr_82(g_off_82F647[(uint16)(2 * enemy_projectile_F[v1 + 13]) >> 1]);
*(uint16 *)((char *)ram3000.pause_menu_map_tilemap + v2) = *v3;
*(uint16 *)((char *)&ram3000.pause_menu_map_tilemap[1] + v2) = v3[1];
*(uint16 *)((char *)&ram3000.pause_menu_map_tilemap[2] + v2) = v3[2];
@@ -5560,4 +5403,4 @@ void OptionsMenuControllerFunc_0(void) { // 0x82F6B9
enemy_projectile_F[v4 + 13] = R18_;
enemy_projectile_F[(v2 >> 1) + 13] = R20_;
OptionsMenuFunc6();
-}
+}
\ No newline at end of file
diff --git a/src/sm_84.c b/src/sm_84.c
index af4d181..2753088 100644
--- a/src/sm_84.c
+++ b/src/sm_84.c
@@ -4,22 +4,30 @@
#include "sm_rtl.h"
#include "funcs.h"
-void CallPlmPreInstr(uint32 ea, uint16 k);
-uint16 CallPlmInstr(uint32 ea, uint16 j, uint16 k);
-#define kGoldenTorizoPalette1 ((uint16*)RomPtr(0x848032))
-#define kGoldenTorizoPalette2 ((uint16*)RomPtr(0x848132))
-#define kXrayBlockDrawingInstrs ((uint16*)RomPtr(0x84839d))
-#define kGrayDoorPreInstrs ((uint16*)RomPtr(0x84be4b))
-#define kDowardGatePlmListPtrs ((uint16*)RomPtr(0x84c70a))
-#define kDowardGateLeftBlockBts ((uint16*)RomPtr(0x84c71a))
-#define kDowardGateRightBlockBts ((uint16*)RomPtr(0x84c72a))
-#define kUpwardGatePlmListPtrs ((uint16*)RomPtr(0x84c764))
-#define kUpwardGateLeftBlockBts ((uint16*)RomPtr(0x84c774))
-#define kUpwardGateRightBlockBts ((uint16*)RomPtr(0x84c784))
-#define off_84DB28 ((uint16*)RomPtr(0x84db28))
-#define off_84E05F ((uint16*)RomPtr(0x84e05f))
-#define off_84E077 ((uint16*)RomPtr(0x84e077))
+#define kGoldenTorizoPalette1 ((uint16*)RomFixedPtr(0x848032))
+#define kGoldenTorizoPalette2 ((uint16*)RomFixedPtr(0x848132))
+#define kXrayBlockDrawingInstrs ((uint16*)RomFixedPtr(0x84839d))
+#define kGrayDoorPreInstrs ((uint16*)RomFixedPtr(0x84be4b))
+#define kDowardGatePlmListPtrs ((uint16*)RomFixedPtr(0x84c70a))
+#define kDowardGateLeftBlockBts ((uint16*)RomFixedPtr(0x84c71a))
+#define kDowardGateRightBlockBts ((uint16*)RomFixedPtr(0x84c72a))
+#define kUpwardGatePlmListPtrs ((uint16*)RomFixedPtr(0x84c764))
+#define kUpwardGateLeftBlockBts ((uint16*)RomFixedPtr(0x84c774))
+#define kUpwardGateRightBlockBts ((uint16*)RomFixedPtr(0x84c784))
+#define off_84DB28 ((uint16*)RomFixedPtr(0x84db28))
+#define off_84E05F ((uint16*)RomFixedPtr(0x84e05f))
+#define off_84E077 ((uint16*)RomFixedPtr(0x84e077))
+#define fnPlmPreInstr_Empty4 0x848AA6
+#define kPlmVramAddresses ((uint16*)RomFixedPtr(0x8487cd))
+#define kPlmTileDataOffs ((uint16*)RomFixedPtr(0x8487d5))
+#define kPlmStartingTileNumber ((uint16*)RomFixedPtr(0x8487dd))
+
+
+
+void CallPlmPreInstr(uint32 ea, uint16 k);
+const uint8 *CallPlmInstr(uint32 ea, const uint8 *j, uint16 k);
+
void SetGoldenTorizoPalette(uint16 a) { // 0x848000
int16 v1;
@@ -39,13 +47,12 @@ void SetGoldenTorizoPalette(uint16 a) { // 0x848000
void LoadRoomPlmGfx(void) { // 0x848232
plm_item_gfx_index = 0;
- uint16 v0 = 0, v1;
+ int v0 = 0;
do {
- v1 = v0;
if (plm_item_gfx_ptrs[v0 >> 1]) // bugfix
- PlmInstr_LoadItemPlmGfx(plm_item_gfx_ptrs[v0 >> 1], v0);
+ PlmInstr_LoadItemPlmGfx(RomPtr_84(plm_item_gfx_ptrs[v0 >> 1]), v0);
v0 += 2;
- } while (v1 != 6);
+ } while (v0 != 8);
}
void ClearSoundsWhenGoingThroughDoor(void) { // 0x848250
@@ -73,34 +80,18 @@ void CalculatePlmBlockCoords(uint16 k) { // 0x848290
}
void WriteLevelDataBlockTypeAndBts(uint16 k, uint16 a) { // 0x8482B4
- R18_ = a;
- uint8 *v2 = RomPtr_7F(k);
+ uint8 *v2 = &g_ram[0x10000 + k];
v2[3] = HIBYTE(a) | v2[3] & 0xF;
- BTS[k >> 1] = R18_;
+ BTS[k >> 1] = a;
}
void WriteRowOfLevelDataBlockAndBTS(uint16 k, uint16 arg0, uint16 arg1, uint16 arg2) { // 0x8482D6
- uint16 v1 = k;
-
- R18_ = arg0;
- R20_ = arg1;
- R22_ = arg2;
- uint16 v2 = plm_block_indices[v1 >> 1];
+ uint16 v2 = plm_block_indices[k >> 1];
uint16 v8 = v2 >> 1;
- uint16 v3 = R18_;
- uint16 v4 = R22_;
- do {
- level_data[v2 >> 1] = v3;
- v2 += 2;
- --v4;
- } while (v4);
- uint16 v5 = v8;
- uint8 v6 = R20_;
- uint16 v7 = R22_;
- do {
- BTS[v5++] = v6;
- --v7;
- } while (v7);
+ for (int i = 0; i < arg2; i++) {
+ level_data[(v2 + i * 2) >> 1] = arg0;
+ BTS[v8 + i] = arg1;
+ }
}
void LoadXrayBlocks(void) { // 0x84831A
@@ -110,14 +101,14 @@ void LoadXrayBlocks(void) { // 0x84831A
for (int i = 78; i >= 0; i -= 2) {
int v1 = i >> 1;
- if (plm_header_ptr[v1] >= (uint16)FUNC16(PlmPreInstr_GotoLinkIfTriggered)) {
+ if (plm_header_ptr[v1] >= FUNC16(PlmPreInstr_GotoLinkIfTriggered)) {
uint16 k = i;
uint16 v2 = item_bit_array[PrepareBitAccess(plm_room_arguments[v1])];
i = k;
if ((bitmask & v2) == 0) {
CalculatePlmBlockCoords(k);
- uint8 *v3 = RomPtr_84(kXrayBlockDrawingInstrs[plm_variables[k >> 1] >> 1]);
- LoadBlockToXrayTilemap(*((uint16 *)v3 + 1) & 0xFFF, plm_x_block, plm_y_block);
+ const uint8 *v3 = RomPtr_84(kXrayBlockDrawingInstrs[plm_variables[k >> 1] >> 1]);
+ LoadBlockToXrayTilemap(GET_WORD(v3 + 2) & 0xFFF, plm_x_block, plm_y_block);
i = k;
}
}
@@ -125,13 +116,13 @@ void LoadXrayBlocks(void) { // 0x84831A
RoomDefRoomstate = get_RoomDefRoomstate(roomdefroomstate_ptr);
if (RoomDefRoomstate->xray_special_casing_ptr) {
for (j = RoomDefRoomstate->xray_special_casing_ptr; ; j += 4) {
- uint8 *v6 = RomPtr_8F(j);
- v7 = *(uint16 *)v6;
- if (!*(uint16 *)v6)
+ const uint8 *v6 = RomPtr_8F(j);
+ v7 = GET_WORD(v6);
+ if (!GET_WORD(v6))
break;
R18_ = (uint8)v7;
R20_ = v6[1];
- LoadBlockToXrayTilemap(*((uint16 *)v6 + 1), (uint8)v7, R20_);
+ LoadBlockToXrayTilemap(GET_WORD(v6 + 2), (uint8)v7, R20_);
}
}
}
@@ -371,29 +362,31 @@ CoroutineRet PlmHandler_Async(void) { // 0x8485B4
CallPlmPreInstr(plm_pre_instrs[plm_id >> 1] | 0x840000, plm_id);
if (--plm_instruction_timer[plm_id >> 1])
continue;
- uint16 v4, *v5;
- v4 = plm_instr_list_ptrs[plm_id >> 1];
+ const uint8 *base, *v5;
+ base = RomPtr_84(0x8000) - 0x8000;
+ v5 = base + plm_instr_list_ptrs[plm_id >> 1];
while (1) {
- v5 = (uint16 *)RomPtr_84(v4);
- if ((*v5 & 0x8000u) == 0)
+ if ((GET_WORD(v5) & 0x8000) == 0)
break;
- R18_ = *v5;
- v4 = CallPlmInstr(*v5 | 0x840000, v4 + 2, plm_id);
- if (!v4)
+ v5 = CallPlmInstr(GET_WORD(v5) | 0x840000, v5 + 2, plm_id);
+ if (!v5)
goto NEXT_PLM;
+ if ((uintptr_t)v5 < 0x10000)
+ v5 = base + (uintptr_t)v5;
// If the plm handler wanted to display a message, then display it.
if (queued_message_box_index != 0) {
- plm_instr_list_ptrs[plm_id >> 1] = v4;
+ plm_instr_list_ptrs[plm_id >> 1] = v5 - base;
COROUTINE_AWAIT(1, DisplayMessageBox_Async(queued_message_box_index));
queued_message_box_index = 0;
- v4 = plm_instr_list_ptrs[plm_id >> 1];
+ base = RomPtr_84(0x8000) - 0x8000;
+ v5 = base + plm_instr_list_ptrs[plm_id >> 1];
}
}
int v7;
v7 = plm_id >> 1;
- plm_instruction_timer[v7] = v5[0];
- plm_instruction_draw_ptr[v7] = v5[1];
- plm_instr_list_ptrs[v7] = v4 + 4;
+ plm_instruction_timer[v7] = GET_WORD(v5);
+ plm_instruction_draw_ptr[v7] = GET_WORD(v5 + 2);
+ plm_instr_list_ptrs[v7] = v5 + 4 - base;
ProcessPlmDrawInstruction(plm_id);
CalculatePlmBlockCoords(plm_id);
DrawPlm(plm_id);
@@ -403,7 +396,6 @@ NEXT_PLM:;
COROUTINE_END(0);
}
-#define fnPlmPreInstr_Empty4 0x848AA6
void CallPlmPreInstr(uint32 ea, uint16 k) {
switch (ea) {
case fnPlmPreInstr_nullsub_60: return;
@@ -467,7 +459,7 @@ void CallPlmPreInstr(uint32 ea, uint16 k) {
}
}
-uint16 CallPlmInstr(uint32 ea, uint16 j, uint16 k) {
+const uint8 *CallPlmInstr(uint32 ea, const uint8 *j, uint16 k) {
switch (ea) {
case fnPlmInstr_Sleep: return PlmInstr_Sleep(j, k);
case fnPlmInstr_Delete: return PlmInstr_Delete(j, k);
@@ -579,13 +571,13 @@ uint16 CallPlmInstr(uint32 ea, uint16 j, uint16 k) {
case fnPlmInstr_SetBtsTo1: return PlmInstr_SetBtsTo1(j, k);
case fnPlmInstr_DisableSamusControls: return PlmInstr_DisableSamusControls(j, k);
case fnPlmInstr_EnableSamusControls: return PlmInstr_EnableSamusControls(j, k);
- default: return Unreachable();
+ default: Unreachable(); return NULL;
}
}
-static inline uint8_t *RomPtr_84orRAM(uint16_t addr) {
+static inline uint8 *RomPtr_84orRAM(uint16_t addr) {
if (addr & 0x8000) {
- return RomPtr(0x840000 | addr);
+ return (uint8*)RomPtr(0x840000 | addr);
} else {
assert(addr < 0x2000);
return RomPtr_RAM(addr);
@@ -593,85 +585,44 @@ static inline uint8_t *RomPtr_84orRAM(uint16_t addr) {
}
void ProcessPlmDrawInstruction(uint16 v0) { // 0x84861E
- int16 v4;
- int16 v8;
- int16 v9;
- int16 v10;
- uint16 v5;
-
int v1 = v0 >> 1;
- uint16 v2 = plm_instruction_draw_ptr[v1];
- R18_ = plm_block_indices[v1];
- uint16 v3 = R18_;
+ uint16 *p = (uint16 *)RomPtr_84orRAM(plm_instruction_draw_ptr[v1]);
+ uint16 dst = plm_block_indices[v1], dst_base = dst;
while (1) {
- v4 = *(uint16 *)RomPtr_84orRAM(v2);
- if (v4 < 0) {
- R22_ = (uint8)v4;
- v5 = v2 + 2;
- do {
- level_data[v3 >> 1] = *(uint16 *)RomPtr_84orRAM(v5);
- v5 += 2;
- v3 += room_width_in_blocks * 2;
- --R22_;
- } while (R22_);
+ uint16 v4 = *p++;
+ if (v4 & 0x8000) {
+ for (int i = 0, t = room_width_in_blocks * 2; i < (uint8)v4; i++)
+ level_data[(dst + i * t) >> 1] = *p++;
} else {
- R22_ = (uint8)v4;
- v5 = v2 + 2;
- do {
- level_data[v3 >> 1] = *(uint16 *)RomPtr_84orRAM(v5);
- v5 += 2;
- v3 += 2;
- --R22_;
- } while (R22_);
+ for (int i = 0; i < (uint8)v4; i++)
+ level_data[(dst + i * 2) >> 1] = *p++;
}
- if (!*(uint16 *)RomPtr_84orRAM(v5))
+ if (!*p)
break;
- uint16 v6 = v5 - 1;
- uint8 *v7 = RomPtr_84orRAM(v6);
- v8 = (int8)HIBYTE(*(uint16 *)v7);
- R20_ = R18_ + 2 * v8;
- LOBYTE(v8) = HIBYTE(*(uint16 *)(v7 + 1));
- if ((v8 & 0x80) == 0) {
- v8 = (uint8)v8;
- if ((uint8)v8) {
- v10 = (uint8)v8;
- v8 = 0;
- do {
- v8 += room_width_in_blocks;
- --v10;
- } while (v10);
- }
- } else {
- v9 = -(v8 | 0xFF00);
- v8 = 0;
- do {
- v8 -= room_width_in_blocks;
- --v9;
- } while (v9);
- }
- v3 = R20_ + 2 * v8;
- v2 = v6 + 3;
+ dst = dst_base + 2 * ((int8)*p + (int8)(*p >> 8) * room_width_in_blocks);
+ p++;
}
}
-uint16 PlmInstr_Sleep(uint16 j, uint16 k) { // 0x8486B4
- plm_instr_list_ptrs[k >> 1] = j - 2;
+const uint8 *PlmInstr_Sleep(const uint8 *plmp, uint16 k) { // 0x8486B4
+ const uint8 *base = RomPtr_84(0x8000) - 0x8000;
+ plm_instr_list_ptrs[k >> 1] = plmp - base - 2;
return 0;
}
-uint16 PlmInstr_Delete(uint16 j, uint16 k) { // 0x8486BC
+const uint8 *PlmInstr_Delete(const uint8 *plmp, uint16 k) { // 0x8486BC
plm_header_ptr[k >> 1] = 0;
return 0;
}
-uint16 PlmInstr_PreInstr(uint16 j, uint16 k) { // 0x8486C1
- plm_pre_instrs[k >> 1] = *(uint16 *)RomPtr_84(j);
- return j + 2;
+const uint8 *PlmInstr_PreInstr(const uint8 *plmp, uint16 k) { // 0x8486C1
+ plm_pre_instrs[k >> 1] = GET_WORD(plmp);
+ return plmp + 2;
}
-uint16 PlmInstr_ClearPreInstr(uint16 j, uint16 k) { // 0x8486CA
+const uint8 *PlmInstr_ClearPreInstr(const uint8 *plmp, uint16 k) { // 0x8486CA
plm_pre_instrs[k >> 1] = FUNC16(PlmPreInstr_Empty);
- return j;
+ return plmp;
}
void CallPlmInstrFunc(uint32 ea) {
@@ -682,309 +633,276 @@ void CallPlmInstrFunc(uint32 ea) {
}
}
-uint16 PlmInstr_CallFunction(uint16 j, uint16 k) { // 0x84870B
- uint8 *v2 = RomPtr_84(j);
- copy24((LongPtr *)&R18_, (LongPtr *)v2);
+const uint8 *PlmInstr_CallFunction(const uint8 *plmp, uint16 k) { // 0x84870B
+ copy24((LongPtr *)&R18_, (LongPtr *)plmp);
CallPlmInstrFunc(Load24(&R18_));
- return j + 3;
+ return plmp + 3;
}
-uint16 PlmInstr_Goto(uint16 j, uint16 k) { // 0x848724
- return *(uint16 *)RomPtr_84(j);
+const uint8 *PlmInstr_Goto(const uint8 *plmp, uint16 k) { // 0x848724
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
}
-uint16 PlmInstr_DecrementAndBranchNonzero(uint16 j, uint16 k) { // 0x84873F
- int v2 = k >> 1;
- if (plm_timers[v2]-- == 1)
- return j + 2;
+const uint8 *PlmInstr_DecrementAndBranchNonzero(const uint8 *plmp, uint16 k) { // 0x84873F
+ if (plm_timers[k >> 1]-- == 1)
+ return plmp + 2;
else
- return PlmInstr_Goto(j, k);
+ return PlmInstr_Goto(plmp, k);
}
-uint16 PlmInstr_SetTimer(uint16 j, uint16 k) { // 0x84874E
- *((uint8 *)plm_timers + k) = *RomPtr_84(j);
- return j + 1;
+const uint8 *PlmInstr_SetTimer(const uint8 *plmp, uint16 k) { // 0x84874E
+ *((uint8 *)plm_timers + k) = *plmp;
+ return plmp + 1;
}
-#define kPlmVramAddresses ((uint16*)RomPtr(0x8487cd))
-#define kPlmTileDataOffs ((uint16*)RomPtr(0x8487d5))
-#define kPlmStartingTileNumber ((uint16*)RomPtr(0x8487dd))
-
-uint16 PlmInstr_LoadItemPlmGfx(uint16 j, uint16 k) { // 0x848764
- VramWriteEntry *v5; // r10
+const uint8 *PlmInstr_LoadItemPlmGfx(const uint8 *plmp, uint16 k) { // 0x848764
uint16 v2 = plm_item_gfx_index;
plm_variables[k >> 1] = plm_item_gfx_index;
- plm_item_gfx_index = ((uint8)v2 + 2) & 6;
+ plm_item_gfx_index = (v2 + 2) & 6;
int v3 = v2 >> 1;
- R18_ = kPlmVramAddresses[v3];
- R20_ = kPlmTileDataOffs[v3];
- R22_ = kPlmStartingTileNumber[v3];
- plm_item_gfx_ptrs[v3] = j;
- uint16 v4 = vram_write_queue_tail;
- v5 = gVramWriteEntry(vram_write_queue_tail);
+ int R18 = kPlmVramAddresses[v3];
+ int R20 = kPlmTileDataOffs[v3];
+ int R22 = kPlmStartingTileNumber[v3];
+ const uint8 *base = RomPtr_84(0x8000) - 0x8000;
+ plm_item_gfx_ptrs[v3] = plmp - base;
+ int v4 = vram_write_queue_tail;
+ VramWriteEntry *v5 = gVramWriteEntry(vram_write_queue_tail);
v5->size = 256;
- v5->src.addr = *(uint16 *)RomPtr_84(j);
- *(uint16 *)&v5->src.bank = 137;
- v5->vram_dst = R18_;
+ v5->src.addr = GET_WORD(plmp);
+ v5->src.bank = 0x89;
+ v5->vram_dst = R18;
vram_write_queue_tail = v4 + 7;
- uint16 result = j + 2;
- uint16 v7 = R20_;
- R24_ = R20_ + 16;
+ plmp += 2;
+ int v7 = R20;
+ int R24 = R20 + 16;
do {
- *(uint16 *)((char *)&tile_table.tables[0].top_left + v7) = R22_ + (*RomPtr_84(result) << 10);
- ++R22_;
- ++result;
+ *(uint16 *)((char *)&tile_table.tables[0].top_left + v7) = R22 + (plmp[0] << 10);
+ ++R22;
+ plmp++;
v7 += 2;
- } while (v7 != R24_);
- return result;
+ } while (v7 != R24);
+ return plmp;
}
-uint16 PlmInstr_CopyFromRamToVram(uint16 j, uint16 k) { // 0x8487E5
- VramWriteEntry *v4;
-
+const uint8 *PlmInstr_CopyFromRamToVram(const uint8 *plmp, uint16 k) { // 0x8487E5
uint16 v2 = vram_write_queue_tail;
- uint8 *v3 = RomPtr_84(j);
- v4 = gVramWriteEntry(vram_write_queue_tail);
- v4->size = *(uint16 *)v3;
- v4->src.addr = *((uint16 *)v3 + 1);
- *(VoidP *)((char *)&v4->src.addr + 1) = *(uint16 *)(v3 + 3);
- v4->vram_dst = *(uint16 *)(v3 + 5);
+ VramWriteEntry *v4 = gVramWriteEntry(vram_write_queue_tail);
+ v4->size = GET_WORD(plmp);
+ v4->src.addr = GET_WORD(plmp + 2);
+ v4->src.bank = plmp[4];
+ v4->vram_dst = GET_WORD(plmp + 5);
vram_write_queue_tail = v2 + 7;
- return j + 7;
+ return plmp + 7;
}
-uint16 PlmInstr_GotoIfBossBitSet(uint16 j, uint16 k) { // 0x84880E
- uint8 *v2 = RomPtr_84(j);
- uint16 v3 = j + 1;
- if (CheckBossBitForCurArea((uint8) * (uint16 *)v2))
- return PlmInstr_Goto(v3, k);
+const uint8 *PlmInstr_GotoIfBossBitSet(const uint8 *plmp, uint16 k) { // 0x84880E
+ if (CheckBossBitForCurArea(plmp[0]))
+ return PlmInstr_Goto(plmp + 1, k);
else
- return v3 + 2;
+ return plmp + 3;
}
-uint16 PlmInstr_GotoIfEventSet(uint16 j, uint16 k) { // 0x84882D
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- uint16 v3 = j + 2;
- if (CheckEventHappened(*v2))
- return PlmInstr_Goto(v3, k);
+const uint8 *PlmInstr_GotoIfEventSet(const uint8 *plmp, uint16 k) { // 0x84882D
+ if (CheckEventHappened(GET_WORD(plmp)))
+ return PlmInstr_Goto(plmp + 2, k);
else
- return v3 + 2;
+ return plmp + 4;
}
-uint16 PlmInstr_SetEvent(uint16 j, uint16 k) { // 0x84883E
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SetEventHappened(*v2);
- return j + 2;
+const uint8 *PlmInstr_SetEvent(const uint8 *plmp, uint16 k) { // 0x84883E
+ SetEventHappened(GET_WORD(plmp));
+ return plmp + 2;
}
-uint16 PlmInstr_GotoIfChozoSet(uint16 j, uint16 k) { // 0x848848
- int16 v3;
-
- int v2 = k >> 1;
- v3 = plm_room_arguments[v2];
+const uint8 *PlmInstr_GotoIfChozoSet(const uint8 *plmp, uint16 k) { // 0x848848
+ uint16 v3 = plm_room_arguments[k >> 1];
int idx = PrepareBitAccess(v3);
- if (v3 >= 0 && ((bitmask & room_chozo_bits[idx]) != 0))
- return PlmInstr_Goto(j, k);
+ if (!sign16(v3) && ((bitmask & room_chozo_bits[idx]) != 0))
+ return PlmInstr_Goto(plmp, k);
else
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_SetRoomChozoBit(uint16 j, uint16 k) { // 0x848865
- int16 v3;
-
- int v2 = k >> 1;
- v3 = plm_room_arguments[v2];
- if (v3 >= 0) {
+const uint8 *PlmInstr_SetRoomChozoBit(const uint8 *plmp, uint16 k) { // 0x848865
+ uint16 v3 = plm_room_arguments[k >> 1];
+ if (!sign16(v3)) {
int idx = PrepareBitAccess(v3);
room_chozo_bits[idx] |= bitmask;
}
- return j;
+ return plmp;
}
-uint16 PlmInstr_GotoIfItemBitSet(uint16 j, uint16 k) { // 0x84887C
- int16 v2;
-
- v2 = plm_room_arguments[k >> 1];
+const uint8 *PlmInstr_GotoIfItemBitSet(const uint8 *plmp, uint16 k) { // 0x84887C
+ uint16 v2 = plm_room_arguments[k >> 1];
int idx = PrepareBitAccess(v2);
- if (v2 >= 0 && (bitmask & item_bit_array[idx]) != 0)
- return PlmInstr_Goto(j, k);
+ if (!sign16(v2) && (bitmask & item_bit_array[idx]) != 0)
+ return PlmInstr_Goto(plmp, k);
else
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_SetItemBit(uint16 j, uint16 k) { // 0x848899
- int16 v2;
-
- v2 = plm_room_arguments[k >> 1];
- if (v2 >= 0) {
+const uint8 *PlmInstr_SetItemBit(const uint8 *plmp, uint16 k) { // 0x848899
+ uint16 v2 = plm_room_arguments[k >> 1];
+ if (!sign16(v2)) {
uint16 v3 = PrepareBitAccess(v2);
item_bit_array[v3] |= bitmask;
}
- return j;
+ return plmp;
}
-uint16 PlmInstr_PickupBeamAndShowMessage(uint16 j, uint16 k) { // 0x8488B0
- uint8 *v2 = RomPtr_84(j);
- collected_beams |= *(uint16 *)v2;
- equipped_beams |= *(uint16 *)v2;
- equipped_beams &= ~((2 * (uint8) * (uint16 *)v2) & 8);
- equipped_beams &= ~((*(uint16 *)v2 >> 1) & 4);
+const uint8 *PlmInstr_PickupBeamAndShowMessage(const uint8 *plmp, uint16 k) { // 0x8488B0
+ uint16 t = GET_WORD(plmp);
+ collected_beams |= t;
+ equipped_beams |= t;
+ equipped_beams &= ~((t << 1) & 8);
+ equipped_beams &= ~((t >> 1) & 4);
UpdateBeamTilesAndPalette();
PlayRoomMusicTrackAfterAFrames(0x168u);
- uint8 *v3 = RomPtr_84(j);
- DisplayMessageBox(v3[2]);
- return j + 3;
+ DisplayMessageBox(plmp[2]);
+ return plmp + 3;
}
-uint16 PlmInstr_PickupEquipmentAndShowMessage(uint16 j, uint16 k) { // 0x8488F3
- uint8 *v2 = RomPtr_84(j);
- equipped_items |= *(uint16 *)v2;
- collected_items |= *(uint16 *)v2;
+const uint8 *PlmInstr_PickupEquipmentAndShowMessage(const uint8 *plmp, uint16 k) { // 0x8488F3
+ uint16 t = GET_WORD(plmp);
+ equipped_items |= t;
+ collected_items |= t;
PlayRoomMusicTrackAfterAFrames(0x168u);
- DisplayMessageBox(v2[2]);
- return j + 3;
+ DisplayMessageBox(plmp[2]);
+ return plmp + 3;
}
-uint16 PlmInstr_PickupEquipmentAddGrappleShowMessage(uint16 j, uint16 k) { // 0x84891A
- uint8 *v2 = RomPtr_84(j);
- equipped_items |= *(uint16 *)v2;
- collected_items |= *(uint16 *)v2;
+const uint8 *PlmInstr_PickupEquipmentAddGrappleShowMessage(const uint8 *plmp, uint16 k) { // 0x84891A
+ uint16 t = GET_WORD(plmp);
+ equipped_items |= t;
+ collected_items |= t;
AddGrappleToHudTilemap();
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(5u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_PickupEquipmentAddXrayShowMessage(uint16 j, uint16 k) { // 0x848941
- uint8 *v2 = RomPtr_84(j);
- equipped_items |= *(uint16 *)v2;
- collected_items |= *(uint16 *)v2;
+const uint8 *PlmInstr_PickupEquipmentAddXrayShowMessage(const uint8 *plmp, uint16 k) { // 0x848941
+ uint16 t = GET_WORD(plmp);
+ equipped_items |= t;
+ collected_items |= t;
AddXrayToHudTilemap();
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(6u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_CollectHealthEnergyTank(uint16 j, uint16 k) { // 0x848968
- samus_max_health += *(uint16 *)RomPtr_84(j);
+const uint8 *PlmInstr_CollectHealthEnergyTank(const uint8 *plmp, uint16 k) { // 0x848968
+ samus_max_health += GET_WORD(plmp);
samus_health = samus_max_health;
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(1u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_CollectHealthReserveTank(uint16 j, uint16 k) { // 0x848986
- samus_max_reserve_health += *(uint16 *)RomPtr_84(j);
+const uint8 *PlmInstr_CollectHealthReserveTank(const uint8 *plmp, uint16 k) { // 0x848986
+ samus_max_reserve_health += GET_WORD(plmp);
if (!reserve_health_mode)
++reserve_health_mode;
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(0x19u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_CollectAmmoMissileTank(uint16 j, uint16 k) { // 0x8489A9
- uint8 *v2 = RomPtr_84(j);
- samus_max_missiles += *(uint16 *)v2;
- samus_missiles += *(uint16 *)v2;
+const uint8 *PlmInstr_CollectAmmoMissileTank(const uint8 *plmp, uint16 k) { // 0x8489A9
+ uint16 t = GET_WORD(plmp);
+ samus_max_missiles += t;
+ samus_missiles += t;
AddMissilesToHudTilemap();
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(2u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_CollectAmmoSuperMissileTank(uint16 j, uint16 k) { // 0x8489D2
- uint8 *v2 = RomPtr_84(j);
- samus_max_super_missiles += *(uint16 *)v2;
- samus_super_missiles += *(uint16 *)v2;
+const uint8 *PlmInstr_CollectAmmoSuperMissileTank(const uint8 *plmp, uint16 k) { // 0x8489D2
+ uint16 t = GET_WORD(plmp);
+ samus_max_super_missiles += t;
+ samus_super_missiles += t;
AddSuperMissilesToHudTilemap();
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(3u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_CollectAmmoPowerBombTank(uint16 j, uint16 k) { // 0x8489FB
- uint8 *v2 = RomPtr_84(j);
- samus_max_power_bombs += *(uint16 *)v2;
- samus_power_bombs += *(uint16 *)v2;
+const uint8 *PlmInstr_CollectAmmoPowerBombTank(const uint8 *plmp, uint16 k) { // 0x8489FB
+ uint16 t = GET_WORD(plmp);
+ samus_max_power_bombs += t;
+ samus_power_bombs += t;
AddPowerBombsToHudTilemap();
PlayRoomMusicTrackAfterAFrames(0x168u);
DisplayMessageBox(4u);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_SetLinkReg(uint16 j, uint16 k) { // 0x848A24
- plm_instruction_list_link_reg[k >> 1] = *(uint16 *)RomPtr_84(j);
- return j + 2;
+const uint8 *PlmInstr_SetLinkReg(const uint8 *plmp, uint16 k) { // 0x848A24
+ plm_instruction_list_link_reg[k >> 1] = GET_WORD(plmp);
+ return plmp + 2;
}
-uint16 PlmInstr_Call(uint16 j, uint16 k) { // 0x848A2E
- plm_instruction_list_link_reg[k >> 1] = j + 2;
- return *(uint16 *)RomPtr_84(j);
+const uint8 *PlmInstr_Call(const uint8 *plmp, uint16 k) { // 0x848A2E
+ const uint8 *base = RomPtr_84(0x8000) - 0x8000;
+ plm_instruction_list_link_reg[k >> 1] = plmp - base + 2;
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
}
-uint16 PlmInstr_Return(uint16 j, uint16 k) { // 0x848A3A
- return plm_instruction_list_link_reg[k >> 1];
+const uint8 *PlmInstr_Return(const uint8 *plmp, uint16 k) { // 0x848A3A
+ return RomPtr_84(plm_instruction_list_link_reg[k >> 1]);
}
-uint16 PlmInstr_GotoIfDoorBitSet(uint16 j, uint16 k) { // 0x848A72
- int16 v2;
-
- v2 = plm_room_arguments[k >> 1];
+const uint8 *PlmInstr_GotoIfDoorBitSet(const uint8 *plmp, uint16 k) { // 0x848A72
+ uint16 v2 = plm_room_arguments[k >> 1];
if (sign16(v2))
- return j + 2;
+ return plmp + 2;
int idx = PrepareBitAccess(v2);
- if (v2 >= 0 && (bitmask & opened_door_bit_array[idx]) != 0)
- return *(uint16 *)RomPtr_84(j);
+ if (!sign16(v2) && (bitmask & opened_door_bit_array[idx]) != 0)
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
else
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_IncrementDoorHitCounterAndJGE(uint16 j, uint16 k) { // 0x848A91
- int16 v5;
-
+const uint8 *PlmInstr_IncrementDoorHitCounterAndJGE(const uint8 *plmp, uint16 k) { // 0x848A91
int v2 = k >> 1;
- uint16 v3 = plm_variables[v2] + 1;
- plm_variables[v2] = v3;
- if ((uint8)v3 < *RomPtr_84(j))
- return j + 3;
- v5 = plm_room_arguments[v2];
- if (v5 >= 0) {
+ if ((uint8)++plm_variables[v2] < plmp[0])
+ return plmp + 3;
+ uint16 v5 = plm_room_arguments[v2];
+ if (!sign16(v5)) {
int idx = PrepareBitAccess(v5);
- v5 = bitmask | opened_door_bit_array[idx];
- opened_door_bit_array[idx] = v5;
- v5 = WORD(opened_door_bit_array[idx]);
+ opened_door_bit_array[idx] |= bitmask;
+ plm_room_arguments[v2] = WORD(opened_door_bit_array[idx]) | 0x8000;
}
- int v6 = k >> 1;
- plm_room_arguments[v6] = v5 | 0x8000;
- plm_pre_instrs[v6] = addr_PlmPreInstr_Empty4;
- return PlmInstr_Goto(j + 1, k);
+ plm_pre_instrs[v2] = addr_PlmPreInstr_Empty4;
+ return PlmInstr_Goto(plmp + 1, k);
}
-uint16 PlmInstr_IncrementArgumentAndJGE(uint16 j, uint16 k) { // 0x848ACD
+const uint8 *PlmInstr_IncrementArgumentAndJGE(const uint8 *plmp, uint16 k) { // 0x848ACD
uint8 v2 = *((uint8 *)plm_room_arguments + k) + 1;
- if (v2 >= *RomPtr_84(j)) {
+ if (v2 >= plmp[0]) {
int v4 = k >> 1;
plm_room_arguments[v4] = -1;
plm_pre_instrs[v4] = addr_locret_848AE0;
- return PlmInstr_Goto(j + 1, k);
+ return PlmInstr_Goto(plmp + 1, k);
} else {
plm_room_arguments[k >> 1] = v2;
- return j + 3;
+ return plmp + 3;
}
}
-uint16 PlmInstr_SetBTS(uint16 j, uint16 k) { // 0x848AF1
- BTS[plm_block_indices[k >> 1] >> 1] = *RomPtr_84(j);
- return j + 1;
+const uint8 *PlmInstr_SetBTS(const uint8 *plmp, uint16 k) { // 0x848AF1
+ BTS[plm_block_indices[k >> 1] >> 1] = plmp[0];
+ return plmp + 1;
}
-uint16 PlmInstr_DrawPlmBlock(uint16 j, uint16 k) { // 0x848B05
- return PlmInstr_DrawPlmBlock_(j, k);
+const uint8 *PlmInstr_DrawPlmBlock(const uint8 *plmp, uint16 k) { // 0x848B05
+ return PlmInstr_DrawPlmBlock_(plmp, k);
}
-uint16 PlmInstr_DrawPlmBlock_(uint16 j, uint16 k) { // 0x848B17
+const uint8 *PlmInstr_DrawPlmBlock_(const uint8 *plmp, uint16 k) { // 0x848B17
int v2 = k >> 1;
uint16 v3 = plm_variable[v2];
level_data[plm_block_indices[v2] >> 1] = v3;
@@ -993,7 +911,8 @@ uint16 PlmInstr_DrawPlmBlock_(uint16 j, uint16 k) { // 0x848B17
custom_draw_instr_zero_terminator = 0;
plm_instruction_timer[v2] = 1;
plm_instruction_draw_ptr[v2] = ADDR16_OF_RAM(custom_draw_instr_num_blocks);
- plm_instr_list_ptrs[v2] = j;
+ const uint8 *base = RomPtr_84(0x8000) - 0x8000;
+ plm_instr_list_ptrs[v2] = plmp - base;
ProcessPlmDrawInstruction(k);
uint16 v4 = plm_id;
CalculatePlmBlockCoords(plm_id);
@@ -1001,57 +920,44 @@ uint16 PlmInstr_DrawPlmBlock_(uint16 j, uint16 k) { // 0x848B17
return 0;
}
-uint16 PlmInstr_ProcessAirScrollUpdate(uint16 j, uint16 k) { // 0x848B55
- uint16 v4;
- char *v5;
-
+const uint8 *PlmInstr_ProcessAirScrollUpdate(const uint8 *plmp, uint16 k) { // 0x848B55
int v2 = k >> 1;
plm_variable[v2] = 0;
uint16 v3 = plm_room_arguments[v2];
- HIBYTE(v4) = 0;
while (1) {
- v5 = (char *)RomPtr_8F(v3);
- if (*v5 < 0)
+ const uint8 *v5 = RomPtr_8F(v3);
+ if (v5[0] & 0x80)
break;
- LOBYTE(v4) = *v5;
- scrolls[v4] = v5[1];
+ scrolls[v5[0]] = v5[1];
v3 += 2;
}
- uint16 result = j;
int v7 = plm_block_indices[k >> 1] >> 1;
level_data[v7] = level_data[v7] & 0xFFF | 0x3000;
- return result;
+ return plmp;
}
-uint16 PlmInstr_ProcessSolidScrollUpdate(uint16 j, uint16 k) { // 0x848B93
- uint16 v4;
- char *v5;
-
+const uint8 *PlmInstr_ProcessSolidScrollUpdate(const uint8 *plmp, uint16 k) { // 0x848B93
int v2 = k >> 1;
plm_variable[v2] = 0;
uint16 v3 = plm_room_arguments[v2];
- HIBYTE(v4) = 0;
while (1) {
- v5 = (char *)RomPtr_8F(v3);
- if (*v5 < 0)
+ const uint8 *v5 = RomPtr_8F(v3);
+ if (v5[0] & 0x80)
break;
- LOBYTE(v4) = *v5;
- scrolls[v4] = v5[1];
+ scrolls[v5[0]] = v5[1];
v3 += 2;
}
- uint16 result = j;
int v7 = plm_block_indices[k >> 1] >> 1;
level_data[v7] = level_data[v7] & 0xFFF | 0xB000;
- return result;
+ return plmp;
}
-uint16 PlmInstr_QueueMusic(uint16 j, uint16 k) { // 0x848BD1
- uint8 *v2 = RomPtr_84(j);
- QueueMusic_Delayed8(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueMusic(const uint8 *plmp, uint16 k) { // 0x848BD1
+ QueueMusic_Delayed8(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_ClearMusicQueueAndQueueTrack(uint16 j, uint16 k) { // 0x848BDD
+const uint8 *PlmInstr_ClearMusicQueueAndQueueTrack(const uint8 *plmp, uint16 k) { // 0x848BDD
for (int i = 14; i >= 0; i -= 2) {
int v3 = i >> 1;
music_queue_track[v3] = 0;
@@ -1060,151 +966,132 @@ uint16 PlmInstr_ClearMusicQueueAndQueueTrack(uint16 j, uint16 k) { // 0x848BDD
music_queue_read_pos = music_queue_write_pos;
music_timer = 0;
music_entry = 0;
- uint8 *v4 = RomPtr_84(j);
- QueueMusic_Delayed8(*v4);
- return j + 1;
+ QueueMusic_Delayed8(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx1_Max6(uint16 j, uint16 k) { // 0x848C07
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx1_Max6(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx1_Max6(const uint8 *plmp, uint16 k) { // 0x848C07
+ QueueSfx1_Max6(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx2_Max6(uint16 j, uint16 k) { // 0x848C10
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx2_Max6(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx2_Max6(const uint8 *plmp, uint16 k) { // 0x848C10
+ QueueSfx2_Max6(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx3_Max6(uint16 j, uint16 k) { // 0x848C19
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx3_Max6(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx3_Max6(const uint8 *plmp, uint16 k) { // 0x848C19
+ QueueSfx3_Max6(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx1_Max15(uint16 j, uint16 k) { // 0x848C22
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx1_Max15(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx1_Max15(const uint8 *plmp, uint16 k) { // 0x848C22
+ QueueSfx1_Max15(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx2_Max15(uint16 j, uint16 k) { // 0x848C2B
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx2_Max15(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx2_Max15(const uint8 *plmp, uint16 k) { // 0x848C2B
+ QueueSfx2_Max15(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx3_Max15(uint16 j, uint16 k) { // 0x848C34
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx3_Max15(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx3_Max15(const uint8 *plmp, uint16 k) { // 0x848C34
+ QueueSfx3_Max15(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx1_Max3(uint16 j, uint16 k) { // 0x848C3D
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx1_Max3(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx1_Max3(const uint8 *plmp, uint16 k) { // 0x848C3D
+ QueueSfx1_Max3(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx2_Max3(uint16 j, uint16 k) { // 0x848C46
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx2_Max3(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx2_Max3(const uint8 *plmp, uint16 k) { // 0x848C46
+ QueueSfx2_Max3(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx_Max3(uint16 j, uint16 k) { // 0x848C4F
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx3_Max3(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx_Max3(const uint8 *plmp, uint16 k) { // 0x848C4F
+ QueueSfx3_Max3(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx1_Max9(uint16 j, uint16 k) { // 0x848C58
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx1_Max9(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx1_Max9(const uint8 *plmp, uint16 k) { // 0x848C58
+ QueueSfx1_Max9(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx2_Max9(uint16 j, uint16 k) { // 0x848C61
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx2_Max9(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx2_Max9(const uint8 *plmp, uint16 k) { // 0x848C61
+ QueueSfx2_Max9(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx3_Max9(uint16 j, uint16 k) { // 0x848C6A
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx3_Max9(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx3_Max9(const uint8 *plmp, uint16 k) { // 0x848C6A
+ QueueSfx3_Max9(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx1_Max1(uint16 j, uint16 k) { // 0x848C73
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx1_Max1(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx1_Max1(const uint8 *plmp, uint16 k) { // 0x848C73
+ QueueSfx1_Max1(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx2_Max1(uint16 j, uint16 k) { // 0x848C7C
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx2_Max1(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx2_Max1(const uint8 *plmp, uint16 k) { // 0x848C7C
+ QueueSfx2_Max1(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_QueueSfx3_Max1(uint16 j, uint16 k) { // 0x848C85
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- QueueSfx3_Max1(*v2);
- return j + 1;
+const uint8 *PlmInstr_QueueSfx3_Max1(const uint8 *plmp, uint16 k) { // 0x848C85
+ QueueSfx3_Max1(plmp[0]);
+ return plmp + 1;
}
-uint16 PlmInstr_ActivateMapStation(uint16 j, uint16 k) { // 0x848C8F
+const uint8 *PlmInstr_ActivateMapStation(const uint8 *plmp, uint16 k) { // 0x848C8F
*(uint16 *)&map_station_byte_array[area_index] |= 0xFFu;
DisplayMessageBox(0x14u);
has_area_map = 1;
- return j;
+ return plmp;
}
-uint16 PlmInstr_ActivateEnergyStation(uint16 j, uint16 k) { // 0x848CAF
+const uint8 *PlmInstr_ActivateEnergyStation(const uint8 *plmp, uint16 k) { // 0x848CAF
if (samus_max_health != samus_health) {
DisplayMessageBox(0x15u);
samus_health = samus_max_health;
}
CallSomeSamusCode(1u);
- return j;
+ return plmp;
}
-uint16 PlmInstr_ActivateMissileStation(uint16 j, uint16 k) { // 0x848CD0
+const uint8 *PlmInstr_ActivateMissileStation(const uint8 *plmp, uint16 k) { // 0x848CD0
if (samus_max_missiles != samus_missiles) {
DisplayMessageBox(0x16u);
samus_missiles = samus_max_missiles;
}
CallSomeSamusCode(1u);
- return j;
+ return plmp;
}
-uint16 PlmInstr_ActivateSaveStationAndGotoIfNo(uint16 j, uint16 k) { // 0x848CF1
+const uint8 *PlmInstr_ActivateSaveStationAndGotoIfNo(const uint8 *plmp, uint16 k) { // 0x848CF1
int r = DisplayMessageBox_Poll(23);
if (r < 0)
- return j - 2; // restart plm instr
-
+ return plmp - 2; // restart plm instr
if (r == 2)
- return *(uint16 *)RomPtr_84(j);
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_SaveStationElectricity, 0);
load_station_index = plm_room_arguments[plm_id >> 1] & 7;
PrepareBitAccess(load_station_index);
used_save_stations_and_elevators[(uint16)(2 * area_index)] |= bitmask;
SaveToSram(selected_save_slot);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_GotoIfSamusNear(uint16 j, uint16 k) { // 0x848D41
- uint8 v4;
-
+const uint8 *PlmInstr_GotoIfSamusNear(const uint8 *plmp, uint16 k) { // 0x848D41
CalculatePlmBlockCoords(k);
uint8 v2 = abs16((samus_x_pos >> 4) - plm_x_block);
- uint8 *v3 = RomPtr_84(j);
- if ((v2 < *v3 || v2 == *v3) && (v4 = abs16((samus_y_pos >> 4) - plm_y_block), v4 < v3[1] || v4 == v3[1]))
- return *((uint16 *)v3 + 1);
+ uint8 v4 = abs16((samus_y_pos >> 4) - plm_y_block);
+ if (v2 <= plmp[0] && v4 <= plmp[1])
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp + 2));
else
- return j + 4;
+ return plmp + 4;
}
void DrawPlm(uint16 k) { // 0x848DAA
@@ -1224,28 +1111,28 @@ void DrawPlm(uint16 k) { // 0x848DAA
uint16 v35;
uint16 a;
- *(uint16 *)((char *)&R8_ + 1) = addr_unk_605000;
+ R9_.addr = addr_unk_605000;
R12_ = addr_unk_6053E0;
uint16 v1 = plm_instruction_draw_ptr[k >> 1];
- g_word_7E001E = plm_x_block;
- R32 = plm_y_block;
+ R30_ = plm_x_block;
+ R32_ = plm_y_block;
LABEL_2:
R26_ = layer1_y_pos >> 4;
- if (!sign16((layer1_y_pos >> 4) + 15 - R32)) {
+ if (!sign16((layer1_y_pos >> 4) + 15 - R32_)) {
v2 = *(uint16 *)RomPtr_84orRAM(v1);
if (v2 < 0) {
R20_ = v2 & 0x7FFF;
- if (layer1_x_pos >> 4 == g_word_7E001E || (int16)((layer1_x_pos >> 4) - g_word_7E001E) < 0) {
+ if (layer1_x_pos >> 4 == R30_ || (int16)((layer1_x_pos >> 4) - R30_) < 0) {
v20 = (layer1_x_pos >> 4) + 17;
- if (v20 != g_word_7E001E && (int16)(v20 - g_word_7E001E) >= 0) {
- R24_ = g_word_7E001E;
+ if (v20 != R30_ && (int16)(v20 - R30_) >= 0) {
+ R24_ = R30_;
R18_ = 0;
R22_ = R26_ + 16;
- if ((int16)(R26_ - R32) < 0) {
- R26_ = R32;
+ if ((int16)(R26_ - R32_) < 0) {
+ R26_ = R32_;
} else {
- R18_ = R26_ - R32;
- if (sign16(R32 + R20_ - R26_))
+ R18_ = R26_ - R32_;
+ if (sign16(R32_ + R20_ - R26_))
return;
bool v21 = R20_ == R18_;
bool v22 = (int16)(R20_ - R18_) < 0;
@@ -1272,36 +1159,36 @@ LABEL_2:
uint16 v26;
v26 = 0;
while (1) {
- g_word_7E001E = *(uint16 *)RomPtr_84orRAM(R3_.addr);
+ R30_ = *(uint16 *)RomPtr_84orRAM(R3_.addr);
uint16 v27, v29;
- v27 = g_word_7E001E & 0x3FF;
- v28 = g_word_7E001E & 0xC00;
- if ((g_word_7E001E & 0xC00) != 0) {
+ v27 = R30_ & 0x3FF;
+ v28 = R30_ & 0xC00;
+ if ((R30_ & 0xC00) != 0) {
if (v28 == 1024) {
- IndirWriteWord(&R0_, v26, tile_table.tables[v27].top_right ^ 0x4000);
- IndirWriteWord(&R6_, v26, tile_table.tables[v27].top_left ^ 0x4000);
+ IndirWriteWord(R0_, v26, tile_table.tables[v27].top_right ^ 0x4000);
+ IndirWriteWord(R6_, v26, tile_table.tables[v27].top_left ^ 0x4000);
v29 = v26 + 2;
- IndirWriteWord(&R0_, v29, tile_table.tables[v27].bottom_right ^ 0x4000);
- IndirWriteWord(&R6_, v29, tile_table.tables[v27].bottom_left ^ 0x4000);
+ IndirWriteWord(R0_, v29, tile_table.tables[v27].bottom_right ^ 0x4000);
+ IndirWriteWord(R6_, v29, tile_table.tables[v27].bottom_left ^ 0x4000);
} else if (v28 == 2048) {
- IndirWriteWord(&R0_, v26, tile_table.tables[v27].bottom_left ^ 0x8000);
- IndirWriteWord(&R6_, v26, tile_table.tables[v27].bottom_right ^ 0x8000);
+ IndirWriteWord(R0_, v26, tile_table.tables[v27].bottom_left ^ 0x8000);
+ IndirWriteWord(R6_, v26, tile_table.tables[v27].bottom_right ^ 0x8000);
v29 = v26 + 2;
- IndirWriteWord(&R0_, v29, tile_table.tables[v27].top_left ^ 0x8000);
- IndirWriteWord(&R6_, v29, tile_table.tables[v27].top_right ^ 0x8000);
+ IndirWriteWord(R0_, v29, tile_table.tables[v27].top_left ^ 0x8000);
+ IndirWriteWord(R6_, v29, tile_table.tables[v27].top_right ^ 0x8000);
} else {
- IndirWriteWord(&R0_, v26, tile_table.tables[v27].bottom_right ^ 0xC000);
- IndirWriteWord(&R6_, v26, tile_table.tables[v27].bottom_left ^ 0xC000);
+ IndirWriteWord(R0_, v26, tile_table.tables[v27].bottom_right ^ 0xC000);
+ IndirWriteWord(R6_, v26, tile_table.tables[v27].bottom_left ^ 0xC000);
v29 = v26 + 2;
- IndirWriteWord(&R0_, v29, tile_table.tables[v27].top_right ^ 0xC000);
- IndirWriteWord(&R6_, v29, tile_table.tables[v27].top_left ^ 0xC000);
+ IndirWriteWord(R0_, v29, tile_table.tables[v27].top_right ^ 0xC000);
+ IndirWriteWord(R6_, v29, tile_table.tables[v27].top_left ^ 0xC000);
}
} else {
- IndirWriteWord(&R0_, v26, tile_table.tables[v27].top_left);
- IndirWriteWord(&R6_, v26, tile_table.tables[v27].top_right);
+ IndirWriteWord(R0_, v26, tile_table.tables[v27].top_left);
+ IndirWriteWord(R6_, v26, tile_table.tables[v27].top_right);
v29 = v26 + 2;
- IndirWriteWord(&R0_, v29, tile_table.tables[v27].bottom_left);
- IndirWriteWord(&R6_, v29, tile_table.tables[v27].bottom_right);
+ IndirWriteWord(R0_, v29, tile_table.tables[v27].bottom_left);
+ IndirWriteWord(R6_, v29, tile_table.tables[v27].bottom_right);
}
v26 = v29 + 2;
++R3_.addr;
@@ -1317,9 +1204,9 @@ LABEL_70:
addr = R3_.addr + 2 * R22_;
v31 = *(uint16 *)RomPtr_84orRAM(addr);
if (v31) {
- g_word_7E001E = plm_x_block + (int8)v31;
+ R30_ = plm_x_block + (int8)v31;
uint16 v32 = addr + 1;
- R32 = plm_y_block + (int8)*RomPtr_84orRAM(v32);
+ R32_ = plm_y_block + (int8)*RomPtr_84orRAM(v32);
v1 = v32 + 1;
goto LABEL_2;
}
@@ -1333,21 +1220,21 @@ LABEL_70:
} else {
R20_ = v2 & 0x7FFF;
R28_ = 0;
- if (sign16(R32 - R26_))
+ if (sign16(R32_ - R26_))
return;
- R26_ = R32;
+ R26_ = R32_;
R18_ = 0;
- R24_ = g_word_7E001E;
+ R24_ = R30_;
R22_ = ((uint16)(layer1_x_pos + 15) >> 4) - 1;
- if ((int16)(R22_ - g_word_7E001E) >= 0 && R22_ != g_word_7E001E) {
- R18_ = R22_ - g_word_7E001E;
- if (g_word_7E001E + R20_ == R22_ || (int16)(g_word_7E001E + R20_ - R22_) < 0)
+ if ((int16)(R22_ - R30_) >= 0 && R22_ != R30_) {
+ R18_ = R22_ - R30_;
+ if (R30_ + R20_ == R22_ || (int16)(R30_ + R20_ - R22_) < 0)
return;
R20_ -= R18_;
R24_ = R22_;
}
R22_ += 17;
- if (!sign16(R22_ - g_word_7E001E)) {
+ if (!sign16(R22_ - R30_)) {
R22_ = R20_ + R24_ - 1 - R22_;
if ((R22_ & 0x8000u) != 0 || (R20_ -= R22_) != 0) {
v35 = k;
@@ -1362,13 +1249,13 @@ LABEL_70:
if ((bg1_x_offset & 0x100) != 0)
a -= 1024;
} else {
- v5 = *(uint16 *)((char *)&R8_ + 1) + 2 * v4;
+ v5 = R9_.addr + 2 * v4;
uint16 RegWord = prod;
a = RegWord + v5;
if ((bg1_x_offset & 0x100) != 0)
a += 1024;
}
- g_word_7E001E = 2 * R20_;
+ R30_ = 2 * R20_;
R34 = a & 0x1F;
if (((2 * R20_ + (a & 0x1F) - 1) & 0xFFE0) != 0) {
if ((int16)(v3 - 228) >= 0 || (int16)(32 - R34) < 0)
@@ -1381,7 +1268,7 @@ LABEL_70:
v10[1].vram_dst = a & 0xFFE0 ^ 0x400;
v10[3].vram_dst = v10[1].vram_dst + 32;
v10[2].vram_dst = v10->vram_dst + 32;
- g_word_7E001E = 4 * R20_;
+ R30_ = 4 * R20_;
uint16 v11 = 4 * R20_ - v10->size;
v10[1].size = v11;
v10[3].size = v11;
@@ -1392,12 +1279,12 @@ LABEL_70:
v10[1].src.addr = v13;
uint16 v14 = v10[1].size + v13;
v10[2].src.addr = v14;
- R6_ = v14;
+ R6_.addr = v14;
v10[3].src.addr = v10[2].size + v14;
v10->src.bank = 126;
R0_.bank = 126;
v10[1].src.bank = 126;
- LOBYTE(R8_) = 126;
+ R6_.bank = 126;
v10[2].src.bank = 126;
v10[3].src.bank = 126;
vram_write_queue_tail = v3 + 28;
@@ -1411,39 +1298,38 @@ LABEL_70:
R3_.addr = R18_ + v1 + 2;
uint16 v16 = 0;
while (1) {
- g_word_7E001E = *(uint16 *)RomPtr_84orRAM(R3_.addr);
- uint16 v17 = g_word_7E001E & 0x3FF, v19;
- v18 = g_word_7E001E & 0xC00;
- if ((g_word_7E001E & 0xC00) != 0) {
+ R30_ = *(uint16 *)RomPtr_84orRAM(R3_.addr);
+ uint16 v17 = R30_ & 0x3FF, v19;
+ v18 = R30_ & 0xC00;
+ if ((R30_ & 0xC00) != 0) {
if (v18 == 1024) {
- IndirWriteWord(&R0_, v16, tile_table.tables[v17].top_right ^ 0x4000);
- IndirWriteWord(&R6_, v16, tile_table.tables[v17].bottom_right ^ 0x4000);
+ IndirWriteWord(R0_, v16, tile_table.tables[v17].top_right ^ 0x4000);
+ IndirWriteWord(R6_, v16, tile_table.tables[v17].bottom_right ^ 0x4000);
v19 = v16 + 2;
- IndirWriteWord(&R0_, v19, tile_table.tables[v17].top_left ^ 0x4000);
- IndirWriteWord(&R6_, v19, tile_table.tables[v17].bottom_left ^ 0x4000);
+ IndirWriteWord(R0_, v19, tile_table.tables[v17].top_left ^ 0x4000);
+ IndirWriteWord(R6_, v19, tile_table.tables[v17].bottom_left ^ 0x4000);
} else if (v18 == 2048) {
- IndirWriteWord(&R0_, v16, tile_table.tables[v17].bottom_left ^ 0x8000);
- IndirWriteWord(&R6_, v16, tile_table.tables[v17].top_left ^ 0x8000);
+ IndirWriteWord(R0_, v16, tile_table.tables[v17].bottom_left ^ 0x8000);
+ IndirWriteWord(R6_, v16, tile_table.tables[v17].top_left ^ 0x8000);
v19 = v16 + 2;
- IndirWriteWord(&R0_, v19, tile_table.tables[v17].bottom_right ^ 0x8000);
- IndirWriteWord(&R6_, v19, tile_table.tables[v17].top_right ^ 0x8000);
+ IndirWriteWord(R0_, v19, tile_table.tables[v17].bottom_right ^ 0x8000);
+ IndirWriteWord(R6_, v19, tile_table.tables[v17].top_right ^ 0x8000);
} else {
- IndirWriteWord(&R0_, v16, tile_table.tables[v17].bottom_right ^ 0xC000);
- IndirWriteWord(&R6_, v16, tile_table.tables[v17].top_right ^ 0xC000);
+ IndirWriteWord(R0_, v16, tile_table.tables[v17].bottom_right ^ 0xC000);
+ IndirWriteWord(R6_, v16, tile_table.tables[v17].top_right ^ 0xC000);
v19 = v16 + 2;
- IndirWriteWord(&R0_, v19, tile_table.tables[v17].bottom_left ^ 0xC000);
- IndirWriteWord(&R6_, v19, tile_table.tables[v17].top_left ^ 0xC000);
+ IndirWriteWord(R0_, v19, tile_table.tables[v17].bottom_left ^ 0xC000);
+ IndirWriteWord(R6_, v19, tile_table.tables[v17].top_left ^ 0xC000);
}
} else {
- IndirWriteWord(&R0_, v16, tile_table.tables[v17].top_left);
- IndirWriteWord(&R6_, v16, tile_table.tables[v17].bottom_left);
+ IndirWriteWord(R0_, v16, tile_table.tables[v17].top_left);
+ IndirWriteWord(R6_, v16, tile_table.tables[v17].bottom_left);
v19 = v16 + 2;
- IndirWriteWord(&R0_, v19, tile_table.tables[v17].top_right);
- IndirWriteWord(&R6_, v19, tile_table.tables[v17].bottom_right);
+ IndirWriteWord(R0_, v19, tile_table.tables[v17].top_right);
+ IndirWriteWord(R6_, v19, tile_table.tables[v17].bottom_right);
}
v16 = v19 + 2;
- ++R3_.addr;
- ++R3_.addr;
+ R3_.addr += 2;
plm_draw_tilemap_index += 8;
if (!sign16(plm_draw_tilemap_index - 512))
break;
@@ -1472,7 +1358,7 @@ void CalculatePlmDrawTilemapVramDst(uint16 k) { // 0x8491DC
if ((bg1_x_offset & 0x100) != 0)
a -= 1024;
} else {
- v2 = *(uint16 *)((char *)&R8_ + 1) + 2 * v1;
+ v2 = R9_.addr + 2 * v1;
uint16 v3 = prod;
a = v3 + v2;
if ((bg1_x_offset & 0x100) != 0)
@@ -1495,16 +1381,16 @@ void PartiallyQueueVramForSingleScreenPlm(uint16 a, uint16 k) { // 0x849220
R0_.addr = v4;
uint16 v5 = v2->size + v4;
v2[1].src.addr = v5;
- R6_ = v5;
+ R6_.addr = v5;
v2->src.bank = 126;
v2[1].src.bank = 126;
R0_.bank = 126;
- LOBYTE(R8_) = 126;
+ R6_.bank = 126;
}
-uint16 PlmInstr_MovePlmDownOneBlock(uint16 j, uint16 k) { // 0x84AB00
+const uint8 *PlmInstr_MovePlmDownOneBlock(const uint8 *plmp, uint16 k) { // 0x84AB00
plm_block_indices[k >> 1] += 2 * room_width_in_blocks;
- return j;
+ return plmp;
}
uint8 PlmSetup_CrumbleBotwoonWall(uint16 j) { // 0x84AB28
@@ -1512,22 +1398,19 @@ uint8 PlmSetup_CrumbleBotwoonWall(uint16 j) { // 0x84AB28
return 0;
}
-uint16 PlmInstr_Scroll_0_1_Blue(uint16 j, uint16 k) { // 0x84AB51
+const uint8 *PlmInstr_Scroll_0_1_Blue(const uint8 *plmp, uint16 k) { // 0x84AB51
*(uint16 *)scrolls = 257;
- return j;
+ return plmp;
}
-uint16 PlmInstr_MovePlmDownOneBlock_0(uint16 j, uint16 k) { // 0x84AB59
- plm_block_indices[k >> 1] += room_width_in_blocks
- + room_width_in_blocks;
- return j;
+const uint8 *PlmInstr_MovePlmDownOneBlock_0(const uint8 *plmp, uint16 k) { // 0x84AB59
+ plm_block_indices[k >> 1] += 2 * room_width_in_blocks;
+ return plmp;
}
-uint16 PlmInstr_ABD6(uint16 j, uint16 k) { // 0x84ABD6
- int v1 = k >> 1;
- ++plm_block_indices[v1];
- ++plm_block_indices[v1];
- return j;
+const uint8 *PlmInstr_ABD6(const uint8 *plmp, uint16 k) { // 0x84ABD6
+ plm_block_indices[k >> 1] += 2;
+ return plmp;
}
void PlmPreInstr_PositionSamusAndInvincible(uint16 k) { // 0x84AC89
@@ -1537,55 +1420,55 @@ void PlmPreInstr_PositionSamusAndInvincible(uint16 k) { // 0x84AC89
samus_invincibility_timer |= 0x10u;
}
-uint16 PlmInstr_DealDamage_2(uint16 j, uint16 k) { // 0x84AC9D
+const uint8 *PlmInstr_DealDamage_2(const uint8 *plmp, uint16 k) { // 0x84AC9D
samus_periodic_damage += 2;
- return j;
+ return plmp;
}
-uint16 PlmInstr_GiveInvincibility(uint16 j, uint16 k) { // 0x84ACB1
+const uint8 *PlmInstr_GiveInvincibility(const uint8 *plmp, uint16 k) { // 0x84ACB1
samus_invincibility_timer = 48;
- return j;
+ return plmp;
}
-uint16 PlmInstr_Draw0x38FramesOfRightTreadmill(uint16 j, uint16 k) { // 0x84AD43
+const uint8 *PlmInstr_Draw0x38FramesOfRightTreadmill(const uint8 *plmp, uint16 k) { // 0x84AD43
WriteRowOfLevelDataBlockAndBTS(k, 0x30ff, 0x8, 0x38);
- return j;
+ return plmp;
}
-uint16 PlmInstr_Draw0x38FramesOfLeftTreadmill(uint16 j, uint16 k) { // 0x84AD58
+const uint8 *PlmInstr_Draw0x38FramesOfLeftTreadmill(const uint8 *plmp, uint16 k) { // 0x84AD58
WriteRowOfLevelDataBlockAndBTS(k, 0x30ff, 0x9, 0x38);
- return j;
+ return plmp;
}
-uint16 PlmInstr_GotoIfSamusHealthFull(uint16 j, uint16 k) { // 0x84AE35
+const uint8 *PlmInstr_GotoIfSamusHealthFull(const uint8 *plmp, uint16 k) { // 0x84AE35
if (samus_max_health != samus_health)
- return j + 2;
+ return plmp + 2;
CallSomeSamusCode(1u);
- return *(uint16 *)RomPtr_84(j);
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
}
-uint16 PlmInstr_GotoIfMissilesFull(uint16 j, uint16 k) { // 0x84AEBF
+const uint8 *PlmInstr_GotoIfMissilesFull(const uint8 *plmp, uint16 k) { // 0x84AEBF
if (samus_max_missiles != samus_missiles)
- return j + 2;
+ return plmp + 2;
CallSomeSamusCode(1u);
- return *(uint16 *)RomPtr_84(j);
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
}
-uint16 PlmInstr_PlaceSamusOnSaveStation(uint16 j, uint16 k) { // 0x84B00E
+const uint8 *PlmInstr_PlaceSamusOnSaveStation(const uint8 *plmp, uint16 k) { // 0x84B00E
samus_x_pos = (samus_x_pos + 8) & 0xFFF0;
MakeSamusFaceForward();
- return j;
+ return plmp;
}
-uint16 PlmInstr_DisplayGameSavedMessageBox(uint16 j, uint16 k) { // 0x84B024
+const uint8 *PlmInstr_DisplayGameSavedMessageBox(const uint8 *plmp, uint16 k) { // 0x84B024
DisplayMessageBox(0x18u);
- return j;
+ return plmp;
}
-uint16 PlmInstr_EnableMovementAndSetSaveStationUsed(uint16 j, uint16 k) { // 0x84B030
+const uint8 *PlmInstr_EnableMovementAndSetSaveStationUsed(const uint8 *plmp, uint16 k) { // 0x84B030
CallSomeSamusCode(1u);
save_station_lockout_flag = 1;
- return j;
+ return plmp;
}
uint8 PlmSetup_SetrupWreckedShipEntrance(uint16 j) { // 0x84B04A
@@ -1951,8 +1834,8 @@ uint8 PlmSetup_QuicksandSurfaceB_0(uint16 j) { // 0x84B500
R20_ = 0;
return 1;
} else {
- if (word_84B53D[j >> 1] < *(uint16 *)((char *)&R18_ + 1))
- *(uint16 *)((char *)&R18_ + 1) = word_84B53D[j >> 1];
+ if (word_84B53D[j >> 1] < R19_)
+ R19_ = word_84B53D[j >> 1];
++flag_samus_in_quicksand;
}
}
@@ -2206,9 +2089,9 @@ uint8 PlmSetup_B9C1_CrittersEscapeBlock(uint16 j) { // 0x84B978
return 0;
}
-uint16 PlmInstr_SetCrittersEscapedEvent(uint16 j, uint16 k) { // 0x84B9B9
+const uint8 *PlmInstr_SetCrittersEscapedEvent(const uint8 *plmp, uint16 k) { // 0x84B9B9
SetEventHappened(0xFu);
- return j;
+ return plmp;
}
uint8 PlmSetup_B9ED_CrittersEscapeBlock(uint16 j) { // 0x84B9C5
@@ -2234,11 +2117,11 @@ uint8 sub_84B9F1(uint16 j) { // 0x84B9F1
return 0;
}
-uint16 PlmInstr_JumpIfSamusHasNoBombs(uint16 j, uint16 k) { // 0x84BA6F
+const uint8 *PlmInstr_JumpIfSamusHasNoBombs(const uint8 *plmp, uint16 k) { // 0x84BA6F
if ((collected_items & 0x1000) != 0)
- return j + 2;
+ return plmp + 2;
else
- return *(uint16 *)RomPtr_84(j);
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp));
}
void UNUSED_sub_84BAD1(uint16 j) { // 0x84BAD1
@@ -2254,9 +2137,9 @@ uint8 PlmSetup_BB30_CrateriaMainstreetEscape(uint16 j) { // 0x84BB09
return 0;
}
-uint16 PlmInstr_MovePlmRight4Blocks(uint16 j, uint16 k) { // 0x84BB25
+const uint8 *PlmInstr_MovePlmRight4Blocks(const uint8 *plmp, uint16 k) { // 0x84BB25
plm_block_indices[k >> 1] += 8;
- return j;
+ return plmp;
}
void PlmPreInstr_WakePlmIfTriggered(uint16 k) { // 0x84BB52
@@ -2293,18 +2176,17 @@ void PlmPreInstr_WakePlmIfTriggeredOrSamusAbovePlm(uint16 k) { // 0x84BBA4
}
}
-uint16 PlmInstr_ClearTrigger(uint16 j, uint16 k) { // 0x84BBDD
+const uint8 *PlmInstr_ClearTrigger(const uint8 *plmp, uint16 k) { // 0x84BBDD
plm_timers[k >> 1] = 0;
- return j;
+ return plmp;
}
-uint16 PlmInstr_SpawnEnemyProjectile(uint16 j, uint16 k) { // 0x84BBE1
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SpawnEnemyProjectileWithRoomGfx(*v2, *v2);
- return j + 2;
+const uint8 *PlmInstr_SpawnEnemyProjectile(const uint8 *plmp, uint16 k) { // 0x84BBE1
+ SpawnEnemyProjectileWithRoomGfx(GET_WORD(plmp), 0);
+ return plmp + 2;
}
-uint16 PlmInstr_WakeEnemyProjectileAtPlmPos(uint16 j, uint16 k) { // 0x84BBF0
+const uint8 *PlmInstr_WakeEnemyProjectileAtPlmPos(const uint8 *plmp, uint16 k) { // 0x84BBF0
int i;
uint16 v2 = plm_block_indices[k >> 1];
@@ -2314,9 +2196,8 @@ uint16 PlmInstr_WakeEnemyProjectileAtPlmPos(uint16 j, uint16 k) { // 0x84BBF0
}
int v4 = i >> 1;
enemy_projectile_instr_timers[v4] = 1;
- ++enemy_projectile_instr_list_ptr[v4];
- ++enemy_projectile_instr_list_ptr[v4];
- return j + 2;
+ enemy_projectile_instr_list_ptr[v4] += 2;
+ return plmp + 2;
}
void PlmPreInstr_GoToLinkInstrIfShot(uint16 k) { // 0x84BD0F
@@ -2439,9 +2320,9 @@ void PlmPreInstr_GotoLinkIfCrittersEscaped(uint16 k) { // 0x84BE30
PlmPreInstr_PlayDudSound(k);
}
-uint16 PlmInstr_SetGreyDoorPreInstr(uint16 j, uint16 k) { // 0x84BE3F
+const uint8 *PlmInstr_SetGreyDoorPreInstr(const uint8 *plmp, uint16 k) { // 0x84BE3F
plm_pre_instrs[k >> 1] = kGrayDoorPreInstrs[plm_variable[k >> 1] >> 1];
- return j;
+ return plmp;
}
uint8 PlmSetup_C806_LeftGreenGateTrigger(uint16 j) { // 0x84C54D
@@ -2650,9 +2531,9 @@ uint8 PlmSetup_Door_Strange(uint16 j) { // 0x84C7E2
return 0;
}
-uint16 PlmInstr_SetBtsTo1(uint16 j, uint16 k) { // 0x84CD93
- *(uint16 *)&BTS[plm_block_indices[k >> 1] >> 1] = (BTS[(plm_block_indices[k >> 1] >> 1) + 1] << 8) | 1;
- return j;
+const uint8 *PlmInstr_SetBtsTo1(const uint8 *plmp, uint16 k) { // 0x84CD93
+ BTS[plm_block_indices[k >> 1] >> 1] = 1;
+ return plmp;
}
uint8 PlmSetup_D028_D02C_Unused(uint16 j) { // 0x84CDC2
@@ -2836,9 +2717,9 @@ uint8 PlmSetup_D138(uint16 j) { // 0x84D12B
return 0;
}
-uint16 PlmInstr_FxBaseYPos_0x2D2(uint16 j, uint16 k) { // 0x84D155
+const uint8 *PlmInstr_FxBaseYPos_0x2D2(const uint8 *plmp, uint16 k) { // 0x84D155
fx_base_y_pos = 722;
- return j;
+ return plmp;
}
void PlmPreInstr_DeletePlmAndSpawnTriggerIfBlockDestroyed(uint16 k) { // 0x84D15C
@@ -2870,36 +2751,27 @@ uint8 PlmSetup_D6DA_LowerNorfairChozoHandTrigger(uint16 j) { // 0x84D18F
}
void PlmPreInstr_IncrementRoomArgIfShotBySuperMissile(uint16 k) { // 0x84D1E6
- int16 v3;
-
int v1 = k >> 1;
uint16 v2 = plm_timers[v1];
- if (v2) {
- v3 = v2 & 0xF00;
- if (v3 == 512 || v3 == 256) {
- plm_timers[v1] = 0;
- ++plm_room_arguments[v1];
- }
- }
+ if ((v2 & 0xF00) == 512 || (v2 & 0xF00) == 256)
+ plm_room_arguments[v1]++;
plm_timers[v1] = 0;
}
-uint16 PlmInstr_GotoIfRoomArgLess(uint16 j, uint16 k) { // 0x84D2F9
- uint8 *v2 = RomPtr_84(j);
- if (plm_room_arguments[k >> 1] >= *(uint16 *)v2)
- return j + 4;
+const uint8 *PlmInstr_GotoIfRoomArgLess(const uint8 *plmp, uint16 k) { // 0x84D2F9
+ if (plm_room_arguments[k >> 1] >= GET_WORD(plmp))
+ return plmp + 4;
else
- return *((uint16 *)v2 + 1);
+ return INSTRB_RETURN_ADDR(GET_WORD(plmp + 2));
}
-uint16 PlmInstr_SpawnFourMotherBrainGlass(uint16 j, uint16 k) { // 0x84D30B
+const uint8 *PlmInstr_SpawnFourMotherBrainGlass(const uint8 *plmp, uint16 k) { // 0x84D30B
QueueSfx3_Max15(0x2Eu);
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SpawnMotherBrainGlassShatteringShard(*v2);
- SpawnMotherBrainGlassShatteringShard(v2[1]);
- SpawnMotherBrainGlassShatteringShard(v2[2]);
- SpawnMotherBrainGlassShatteringShard(v2[3]);
- return j + 8;
+ SpawnMotherBrainGlassShatteringShard(GET_WORD(plmp + 0));
+ SpawnMotherBrainGlassShatteringShard(GET_WORD(plmp + 2));
+ SpawnMotherBrainGlassShatteringShard(GET_WORD(plmp + 4));
+ SpawnMotherBrainGlassShatteringShard(GET_WORD(plmp + 6));
+ return plmp + 8;
}
void SpawnMotherBrainGlassShatteringShard(uint16 a) { // 0x84D331
@@ -2916,46 +2788,26 @@ void PlmPreInstr_WakePlmIfSamusHasBombs(uint16 k) { // 0x84D33B
}
}
-uint16 PlmInstr_SpawnTorizoStatueBreaking(uint16 j, uint16 k) { // 0x84D357
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SpawnEnemyProjectileWithRoomGfx(0xA993, *v2);
- return j + 2;
+const uint8 *PlmInstr_SpawnTorizoStatueBreaking(const uint8 *plmp, uint16 k) { // 0x84D357
+ SpawnEnemyProjectileWithRoomGfx(0xA993, GET_WORD(plmp));
+ return plmp + 2;
}
-uint16 PlmInstr_QueueSong1MusicTrack(uint16 j, uint16 k) { // 0x84D3C7
+const uint8 *PlmInstr_QueueSong1MusicTrack(const uint8 *plmp, uint16 k) { // 0x84D3C7
QueueMusic_Delayed8(6u);
- return j;
+ return plmp;
}
-uint16 PlmInstr_TransferWreckedShipChozoSpikesToSlopes(uint16 j, uint16 k) { // 0x84D3D7
+const uint8 *PlmInstr_TransferWreckedShipChozoSpikesToSlopes(const uint8 *plmp, uint16 k) { // 0x84D3D7
WriteLevelDataBlockTypeAndBts(0x1608, 0x1012);
WriteLevelDataBlockTypeAndBts(0x160A, 0x1013);
- return j;
+ return plmp;
}
-uint16 PlmInstr_TransferWreckedShipSlopesToChozoSpikes(uint16 j, uint16 k) { // 0x84D3F4
+const uint8 *PlmInstr_TransferWreckedShipSlopesToChozoSpikes(const uint8 *plmp, uint16 k) { // 0x84D3F4
WriteLevelDataBlockTypeAndBts(0x1608, 0xA000);
WriteLevelDataBlockTypeAndBts(0x160A, 0xA000);
- return j;
-}
-
-void UNUSED_sub_84D409(uint16 k) { // 0x84D409
- int v1 = k >> 1;
- if ((plm_timers[v1] & 0xF00) == 1280) {
- plm_instr_list_ptrs[v1] = plm_instruction_list_link_reg[v1];
- plm_instruction_timer[v1] = 1;
- }
- plm_timers[v1] = 0;
-}
-
-void UNUSED_sub_84D476(void) { // 0x84D476
- fx_target_y_pos = 722;
- fx_y_vel = 112;
- fx_timer = 32;
-}
-
-void UNUSED_sub_84D489(void) { // 0x84D489
- fx_base_y_pos = 722;
+ return plmp;
}
void PlmPreInstr_WakeOnKeyPress(uint16 k) { // 0x84D4BF
@@ -2967,24 +2819,24 @@ void PlmPreInstr_WakeOnKeyPress(uint16 k) { // 0x84D4BF
}
}
-uint16 PlmInstr_EnableWaterPhysics(uint16 j, uint16 k) { // 0x84D525
+const uint8 *PlmInstr_EnableWaterPhysics(const uint8 *plmp, uint16 k) { // 0x84D525
fx_liquid_options &= ~4u;
- return j;
+ return plmp;
}
-uint16 PlmInstr_SpawnN00bTubeCrackEnemyProjectile(uint16 j, uint16 k) { // 0x84D52C
+const uint8 *PlmInstr_SpawnN00bTubeCrackEnemyProjectile(const uint8 *plmp, uint16 k) { // 0x84D52C
uint16 v2 = 0; // undefined
SpawnEnemyProjectileWithRoomGfx(0xD904, v2);
- return j;
+ return plmp;
}
-uint16 PlmInstr_DiagonalEarthquake(uint16 j, uint16 k) { // 0x84D536
+const uint8 *PlmInstr_DiagonalEarthquake(const uint8 *plmp, uint16 k) { // 0x84D536
earthquake_type = 11;
earthquake_timer = 64;
- return j;
+ return plmp;
}
-uint16 PlmInstr_Spawn10shardsAnd6n00bs(uint16 j, uint16 k) { // 0x84D543
+const uint8 *PlmInstr_Spawn10shardsAnd6n00bs(const uint8 *plmp, uint16 k) { // 0x84D543
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeShards, 0);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeShards, 2u);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeShards, 4u);
@@ -3001,17 +2853,17 @@ uint16 PlmInstr_Spawn10shardsAnd6n00bs(uint16 j, uint16 k) { // 0x84D543
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeReleasedAirBubbles, 6u);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeReleasedAirBubbles, 8u);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_N00bTubeReleasedAirBubbles, 0xA);
- return j;
+ return plmp;
}
-uint16 PlmInstr_DisableSamusControls(uint16 j, uint16 k) { // 0x84D5E6
+const uint8 *PlmInstr_DisableSamusControls(const uint8 *plmp, uint16 k) { // 0x84D5E6
CallSomeSamusCode(0);
- return j;
+ return plmp;
}
-uint16 PlmInstr_EnableSamusControls(uint16 j, uint16 k) { // 0x84D5EE
+const uint8 *PlmInstr_EnableSamusControls(const uint8 *plmp, uint16 k) { // 0x84D5EE
CallSomeSamusCode(1);
- return j;
+ return plmp;
}
uint8 PlmSetup_MotherBrainGlass(uint16 j) { // 0x84D5F6
@@ -3095,31 +2947,29 @@ void PlmPreInstr_WakePlmIfRoomArgumentDoorIsSet(uint16 k) { // 0x84D753
}
}
-uint16 PlmInstr_ShootEyeDoorProjectileWithProjectileArg(uint16 j, uint16 k) { // 0x84D77A
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SpawnEnemyProjectileWithRoomGfx(addr_kEproj_EyeDoorProjectile, *v2);
+const uint8 *PlmInstr_ShootEyeDoorProjectileWithProjectileArg(const uint8 *plmp, uint16 k) { // 0x84D77A
+ SpawnEnemyProjectileWithRoomGfx(addr_kEproj_EyeDoorProjectile, GET_WORD(plmp));
QueueSfx2_Max6(0x4Cu);
- return j + 2;
+ return plmp + 2;
}
-uint16 PlmInstr_SpawnEyeDoorSweatEnemyProjectile(uint16 j, uint16 k) { // 0x84D790
- uint16 *v2 = (uint16 *)RomPtr_84(j);
- SpawnEnemyProjectileWithRoomGfx(addr_kEproj_EyeDoorSweat, *v2);
- return j + 2;
+const uint8 *PlmInstr_SpawnEyeDoorSweatEnemyProjectile(const uint8 *plmp, uint16 k) { // 0x84D790
+ SpawnEnemyProjectileWithRoomGfx(addr_kEproj_EyeDoorSweat, GET_WORD(plmp));
+ return plmp + 2;
}
-uint16 PlmInstr_SpawnTwoEyeDoorSmoke(uint16 j, uint16 k) { // 0x84D79F
+const uint8 *PlmInstr_SpawnTwoEyeDoorSmoke(const uint8 *plmp, uint16 k) { // 0x84D79F
SpawnEnemyProjectileWithRoomGfx(0xE517, 0x30A);
SpawnEnemyProjectileWithRoomGfx(0xE517, 0x30A);
- return j;
+ return plmp;
}
-uint16 PlmInstr_SpawnEyeDoorSmokeProjectile(uint16 j, uint16 k) { // 0x84D7B6
+const uint8 *PlmInstr_SpawnEyeDoorSmokeProjectile(const uint8 *plmp, uint16 k) { // 0x84D7B6
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_EyeDoorSmoke, 0xB);
- return j;
+ return plmp;
}
-uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingRight(uint16 j, uint16 k) { // 0x84D7C3
+const uint8 *PlmInstr_MoveUpAndMakeBlueDoorFacingRight(const uint8 *plmp, uint16 k) { // 0x84D7C3
int v2 = k >> 1;
uint16 v3 = (__PAIR32__(plm_block_indices[v2] - room_width_in_blocks, plm_block_indices[v2])
- __PAIR32__(room_width_in_blocks, room_width_in_blocks)) >> 16;
@@ -3127,10 +2977,10 @@ uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingRight(uint16 j, uint16 k) { // 0x84D
uint16 v4 = v3;
WriteLevelDataBlockTypeAndBts(v3, 0xC041);
sub_84D7EF(v4);
- return j;
+ return plmp;
}
-uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingLeft(uint16 j, uint16 k) { // 0x84D7DA
+const uint8 *PlmInstr_MoveUpAndMakeBlueDoorFacingLeft(const uint8 *plmp, uint16 k) { // 0x84D7DA
int v2 = k >> 1;
uint16 v3 = (__PAIR32__(plm_block_indices[v2] - room_width_in_blocks, plm_block_indices[v2])
- __PAIR32__(room_width_in_blocks, room_width_in_blocks)) >> 16;
@@ -3138,7 +2988,7 @@ uint16 PlmInstr_MoveUpAndMakeBlueDoorFacingLeft(uint16 j, uint16 k) { // 0x84D7
uint16 v4 = v3;
WriteLevelDataBlockTypeAndBts(v3, 0xC040);
sub_84D7EF(v4);
- return j;
+ return plmp;
}
void sub_84D7EF(uint16 k) { // 0x84D7EF
@@ -3146,9 +2996,7 @@ void sub_84D7EF(uint16 k) { // 0x84D7EF
WriteLevelDataBlockTypeAndBts(v1, 0xD0FF);
uint16 v2 = room_width_in_blocks * 2 + v1;
WriteLevelDataBlockTypeAndBts(v2, 0xD0FE);
- WriteLevelDataBlockTypeAndBts(
- room_width_in_blocks * 2 + v2,
- 0xD0FDu);
+ WriteLevelDataBlockTypeAndBts(room_width_in_blocks * 2 + v2, 0xD0FDu);
}
uint8 PlmSetup_EyeDoorEye(uint16 j) { // 0x84DA8C
@@ -3156,11 +3004,7 @@ uint8 PlmSetup_EyeDoorEye(uint16 j) { // 0x84DA8C
if ((bitmask & opened_door_bit_array[idx]) == 0) {
int v1 = j >> 1;
WriteLevelDataBlockTypeAndBts(plm_block_indices[v1], 0xC044);
- WriteLevelDataBlockTypeAndBts(
- room_width_in_blocks
- + room_width_in_blocks
- + plm_block_indices[v1],
- 0xD0FFu);
+ WriteLevelDataBlockTypeAndBts(2 * room_width_in_blocks + plm_block_indices[v1], 0xD0FFu);
}
return 0;
}
@@ -3216,17 +3060,15 @@ void SetPlmVarPtr(uint16 k, uint16 a) {
*(uint16 *)&g_ram[plm_variable[k >> 1]] = a;
}
-uint16 PlmInstr_DamageDraygonTurret(uint16 j, uint16 k) { // 0x84DB8E
+const uint8 *PlmInstr_DamageDraygonTurret(const uint8 *plmp, uint16 k) { // 0x84DB8E
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
- WriteLevelDataBlockTypeAndBts(
- room_width_in_blocks * 2 + v2,
- 0xA003u);
- return j;
+ WriteLevelDataBlockTypeAndBts(room_width_in_blocks * 2 + v2, 0xA003u);
+ return plmp;
}
-uint16 PlmInstr_DamageDraygonTurretFacingDownRight(uint16 j, uint16 k) { // 0x84DBB8
+const uint8 *PlmInstr_DamageDraygonTurretFacingDownRight(const uint8 *plmp, uint16 k) { // 0x84DBB8
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
@@ -3235,10 +3077,10 @@ uint16 PlmInstr_DamageDraygonTurretFacingDownRight(uint16 j, uint16 k) { // 0x8
uint16 v4 = room_width_in_blocks * 2 + v3;
WriteLevelDataBlockTypeAndBts(v4, 0xA003);
WriteLevelDataBlockTypeAndBts(v4 + 2, 0);
- return j;
+ return plmp;
}
-uint16 PlmInstr_DamageDraygonTurretFacingUpRight(uint16 j, uint16 k) { // 0x84DBF7
+const uint8 *PlmInstr_DamageDraygonTurretFacingUpRight(const uint8 *plmp, uint16 k) { // 0x84DBF7
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
@@ -3246,20 +3088,18 @@ uint16 PlmInstr_DamageDraygonTurretFacingUpRight(uint16 j, uint16 k) { // 0x84D
uint16 v4 = room_width_in_blocks * 2 + v2;
WriteLevelDataBlockTypeAndBts(v4, 0xA003);
WriteLevelDataBlockTypeAndBts(v4 + 2, 0xA003);
- return j;
+ return plmp;
}
-uint16 PlmInstr_DamageDraygonTurret2(uint16 j, uint16 k) { // 0x84DC36
+const uint8 *PlmInstr_DamageDraygonTurret2(const uint8 *plmp, uint16 k) { // 0x84DC36
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
- WriteLevelDataBlockTypeAndBts(
- room_width_in_blocks * 2 + v2,
- 0xA003u);
- return j;
+ WriteLevelDataBlockTypeAndBts(room_width_in_blocks * 2 + v2, 0xA003u);
+ return plmp;
}
-uint16 PlmInstr_DamageDraygonTurretFacingDownLeft(uint16 j, uint16 k) { // 0x84DC60
+const uint8 *PlmInstr_DamageDraygonTurretFacingDownLeft(const uint8 *plmp, uint16 k) { // 0x84DC60
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
@@ -3267,10 +3107,10 @@ uint16 PlmInstr_DamageDraygonTurretFacingDownLeft(uint16 j, uint16 k) { // 0x84
uint16 v4 = room_width_in_blocks * 2 + v2;
WriteLevelDataBlockTypeAndBts(v4, 0xA003);
WriteLevelDataBlockTypeAndBts(v4 - 2, 0);
- return j;
+ return plmp;
}
-uint16 PlmInstr_DamageDraygonTurretFacingUpLeft(uint16 j, uint16 k) { // 0x84DC9F
+const uint8 *PlmInstr_DamageDraygonTurretFacingUpLeft(const uint8 *plmp, uint16 k) { // 0x84DC9F
SetPlmVarPtr(k, 1);
uint16 v2 = plm_block_indices[k >> 1];
WriteLevelDataBlockTypeAndBts(v2, 0xA003);
@@ -3278,7 +3118,7 @@ uint16 PlmInstr_DamageDraygonTurretFacingUpLeft(uint16 j, uint16 k) { // 0x84DC
uint16 v4 = v2 + room_width_in_blocks * 2;
WriteLevelDataBlockTypeAndBts(v4, 0xA003);
WriteLevelDataBlockTypeAndBts(v4 - 2, 0xA003);
- return j;
+ return plmp;
}
uint8 PlmSetup_DraygonCannonFacingRight(uint16 j) { // 0x84DE94
@@ -3354,20 +3194,21 @@ void PlmPreInstr_WakeIfTriggered(uint16 k) { // 0x84DFE6
}
}
-uint16 PlmInstr_DrawItemFrame0(uint16 j, uint16 k) { // 0x84E04F
+const uint8 *PlmInstr_DrawItemFrame0(const uint8 *plmp, uint16 k) { // 0x84E04F
plm_instruction_draw_ptr[k >> 1] = off_84E05F[plm_variables[k >> 1] >> 1];
- return PlmInstr_DrawItemFrame_Common(j, k);
+ return PlmInstr_DrawItemFrame_Common(plmp, k);
}
-uint16 PlmInstr_DrawItemFrame1(uint16 j, uint16 k) { // 0x84E067
+const uint8 *PlmInstr_DrawItemFrame1(const uint8 *plmp, uint16 k) { // 0x84E067
plm_instruction_draw_ptr[k >> 1] = off_84E077[plm_variables[k >> 1] >> 1];
- return PlmInstr_DrawItemFrame_Common(j, k);
+ return PlmInstr_DrawItemFrame_Common(plmp, k);
}
-uint16 PlmInstr_DrawItemFrame_Common(uint16 j, uint16 k) { // 0x84E07F
+const uint8 *PlmInstr_DrawItemFrame_Common(const uint8 *plmp, uint16 k) { // 0x84E07F
int v2 = k >> 1;
plm_instruction_timer[v2] = 4;
- plm_instr_list_ptrs[v2] = j;
+ const uint8 *base = RomPtr_84(0x8000) - 0x8000;
+ plm_instr_list_ptrs[v2] = plmp - base;
ProcessPlmDrawInstruction(k);
uint16 v3 = plm_id;
CalculatePlmBlockCoords(plm_id);
@@ -3375,14 +3216,14 @@ uint16 PlmInstr_DrawItemFrame_Common(uint16 j, uint16 k) { // 0x84E07F
return 0;
}
-uint16 PlmInstr_ClearChargeBeamCounter(uint16 j, uint16 k) { // 0x84E29D
+const uint8 *PlmInstr_ClearChargeBeamCounter(const uint8 *plmp, uint16 k) { // 0x84E29D
flare_counter = 0;
- return j;
+ return plmp;
}
-uint16 PlmInstr_E63B(uint16 j, uint16 k) { // 0x84E63B
+const uint8 *PlmInstr_E63B(const uint8 *plmp, uint16 k) { // 0x84E63B
fx_y_vel = -32;
- return j;
+ return plmp;
}
uint8 sub_84EE4D(uint16 j) { // 0x84EE4D
@@ -3457,4 +3298,4 @@ uint8 sub_84EEAB(uint16 v0) { // 0x84EEAB
plm_timers[i >> 1] = 255;
}
return 0;
-}
+}
\ No newline at end of file
diff --git a/src/sm_85.c b/src/sm_85.c
index a1622d0..cb6a86d 100644
--- a/src/sm_85.c
+++ b/src/sm_85.c
@@ -3,6 +3,11 @@
#include "variables.h"
#include "funcs.h"
+
+#define kMessageBoxDefs ((MsgBoxConfig*)RomFixedPtr(0x85869b))
+
+
+
int DisplayMessageBox_Poll(uint16 a) {
if (a == message_box_index) {
message_box_index = 0;
@@ -130,7 +135,6 @@ void CallMsgBoxModify(uint32 ea) {
default: Unreachable();
}
}
-#define kMessageBoxDefs ((MsgBoxConfig*)RomPtr(0x85869b))
void InitializeMessageBox(void) { // 0x858241
bg3_tilemap_offset = 2 * (message_box_index - 1);
uint16 v0 = message_box_index - 1;
@@ -182,11 +186,11 @@ uint16 WriteMessageTilemap(void) { // 0x8582B8
ram3000.pause_menu_map_tilemap[i] = 0;
bg3_tilemap_offset = 2 * (message_box_index - 1);
R0_.addr = *(VoidP *)((char *)&kMessageBoxDefs[0].message_tilemap + (uint16)(6 * (message_box_index - 1)));
- *(uint16 *)((char *)&R8_ + 1) = *(VoidP *)((char *)&kMessageBoxDefs[1].message_tilemap
+ R9_.addr = *(VoidP *)((char *)&kMessageBoxDefs[1].message_tilemap
+ (uint16)(6 * (message_box_index - 1)))
- R0_.addr;
- R22_ = *(uint16 *)((char *)&R8_ + 1) >> 1;
- *(uint16 *)((char *)&R8_ + 1) += 128;
+ R22_ = R9_.addr >> 1;
+ R9_.addr += 128;
uint16 v1 = 32;
uint16 v2 = 0;
do {
@@ -224,7 +228,7 @@ void SetupPpuForActiveMessageBox(void) { // 0x85831E
WriteRegWord(DMAP1, 0x1801);
WriteRegWord(A1T1L, ADDR16_OF_RAM(ram3000) + 512);
WriteRegWord(A1B1, 0x7E);
- WriteRegWord(DAS1L, *(uint16 *)((char *)&R8_ + 1));
+ WriteRegWord(DAS1L, R9_.addr);
WriteRegWord(DAS10, 0);
WriteRegWord(A2A1H, 0);
WriteReg(VMAIN, 0x80);
@@ -432,4 +436,4 @@ void RestorePpuForMessageBox(void) { // 0x85861A
WriteReg(CGDATA, HIBYTE(palette_buffer[25]));
WriteReg(CGDATA, palette_buffer[26]);
WriteReg(CGDATA, HIBYTE(palette_buffer[26]));
-}
+}
\ No newline at end of file
diff --git a/src/sm_86.c b/src/sm_86.c
index 58e32a1..39ef24c 100644
--- a/src/sm_86.c
+++ b/src/sm_86.c
@@ -5,17 +5,42 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kScreenShakeOffsets ((uint16*)RomPtr(0x86846b))
-#define kAlignYPos_Tab0 ((uint8*)RomPtr(0x948b2b))
-#define kAlignPos_Tab1 ((uint8*)RomPtr(0x94892b))
-#define off_868A75 ((uint16*)RomPtr(0x868a75))
-#define word_869105 ((uint16*)RomPtr(0x869105))
-#define off_86A64D ((uint16*)RomPtr(0x86a64d))
-#define stru_86BB50 (*(EnemyProjectileDef*)RomPtr(0x86bb50))
-#define off_86BB1E ((uint16*)RomPtr(0x86bb1e))
-#define kCommonEnemySpeeds_Quadratic_Copy ((uint16*)RomPtr(0xa0cbc7))
-#define off_86C040 ((uint16*)RomPtr(0x86c040))
-#define off_86C929 ((uint16*)RomPtr(0x86c929))
+
+#define kScreenShakeOffsets ((uint16*)RomFixedPtr(0x86846b))
+#define kAlignYPos_Tab0 ((uint8*)RomFixedPtr(0x948b2b))
+#define kAlignPos_Tab1 ((uint8*)RomFixedPtr(0x94892b))
+#define off_868A75 ((uint16*)RomFixedPtr(0x868a75))
+#define word_869105 ((uint16*)RomFixedPtr(0x869105))
+#define off_86A64D ((uint16*)RomFixedPtr(0x86a64d))
+#define stru_86BB50 (*(EnemyProjectileDef*)RomFixedPtr(0x86bb50))
+#define off_86BB1E ((uint16*)RomFixedPtr(0x86bb1e))
+#define kCommonEnemySpeeds_Quadratic_Copy ((uint16*)RomFixedPtr(0xa0cbc7))
+#define off_86C040 ((uint16*)RomFixedPtr(0x86c040))
+#define off_86C929 ((uint16*)RomFixedPtr(0x86c929))
+#define CHECK_locret_868728(i) (unk_868729[i] & 0x80 ? -1 : 0)
+#define g_word_869059 ((uint16*)RomFixedPtr(0x869059))
+#define off_86A2E2 ((uint16*)RomFixedPtr(0x86a2e2))
+#define kEprojInit_BombTorizoStatueBreaking_InstrList ((uint16*)RomFixedPtr(0x86a7ab))
+#define off_86B209 ((uint16*)RomFixedPtr(0x86b209))
+#define kEproj_MotherBrainRoomTurrets_DirectionIndexes ((uint16*)RomFixedPtr(0x86bee1))
+#define kEproj_MotherBrainRoomTurrets_AllowedRotations ((uint16*)RomFixedPtr(0x86bec9))
+#define kEproj_MotherBrainRoomTurrets_InstrLists ((uint16*)RomFixedPtr(0x86beb9))
+#define g_off_86C040 ((uint16*)RomFixedPtr(0x86c040))
+#define kEprojInit_MotherBrainGlassShatteringShard_InstrPtrs ((uint16*)RomFixedPtr(0x86ce41))
+#define kEprojInit_N00bTubeShards_InstrPtrs ((uint16*)RomFixedPtr(0x86d760))
+#define off_86D96A ((uint16*)RomFixedPtr(0x86d96a))
+#define kSporeMovementData ((uint8*)RomFixedPtr(0x86dd6c))
+#define word_86DEB6 ((uint16*)RomFixedPtr(0x86deb6))
+#define off_86E42C ((uint16*)RomFixedPtr(0x86e42c))
+#define word_86E47E ((uint16*)RomFixedPtr(0x86e47e))
+#define kEprojInit_BotwoonsBody_InstrLists ((uint16*)RomFixedPtr(0x86e9f1))
+#define off_86EF04 ((uint16*)RomFixedPtr(0x86ef04))
+#define off_86EFD5 ((uint16*)RomFixedPtr(0x86efd5))
+#define kEnemyDef_F3D3 (*(EnemyDef_B2*)RomFixedPtr(0xa0f3d3))
+#define g_word_86F3D4 ((uint16*)RomFixedPtr(0x86f3d4)) // bug:: oob read
+
+
+
void EnableEnemyProjectiles(void) { // 0x868000
enemy_projectile_enable_flag |= 0x8000u;
@@ -484,7 +509,7 @@ void EprojRunOne(uint16 k) { // 0x868125
if (enemy_projectile_instr_timers[v2]-- == 1) {
uint16 v4 = enemy_projectile_instr_list_ptr[v2], v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_86(v4);
+ const uint16 *v5 = (const uint16 *)RomPtr_86(v4);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -532,7 +557,7 @@ void CallEprojFunc(uint32 ea, uint32 k) {
}
uint16 EprojInstr_CallFunc(uint16 k, uint16 j) { // 0x868171
- uint8 *v2 = RomPtr_86(j);
+ const uint8 *v2 = RomPtr_86(j);
copy24((LongPtr *)&R18_, (LongPtr *)v2);
uint32 ea = Load24((LongPtr *)&R18_);
@@ -580,13 +605,13 @@ uint16 EprojInstr_MoveRandomlyWithinRadius(uint16 k, uint16 j) { // 0x8681DF
R18_ = NextRandom();
do {
Random = NextRandom();
- uint8 *v3 = RomPtr_86(j);
+ const uint8 *v3 = RomPtr_86(j);
v4 = (*v3 & Random) - v3[1];
} while (v4 < 0);
enemy_projectile_x_pos[k >> 1] += sign16(R18_) ? -(uint8)v4 : (uint8)v4;
do {
LOBYTE(v6) = NextRandom();
- uint8 *v5 = RomPtr_86(j);
+ const uint8 *v5 = RomPtr_86(j);
LOBYTE(v6) = (v5[2] & v6) - v5[3];
} while ((v6 & 0x80) != 0);
v6 = (uint8)v6;
@@ -670,10 +695,10 @@ uint16 EprojInstr_CalculateDirectionTowardsSamus(uint16 k, uint16 j) { // 0x868
}
uint16 EprojInstr_WriteColorsToPalette(uint16 k, uint16 j) { // 0x8682D5
- uint8 *v2 = RomPtr_86(j);
- uint16 v3 = *((uint16 *)v2 + 1);
+ const uint8 *v2 = RomPtr_86(j);
+ uint16 v3 = GET_WORD(v2 + 2);
R18_ = v2[4];
- uint16 v4 = *(uint16 *)v2;
+ uint16 v4 = GET_WORD(v2);
do {
palette_buffer[v3 >> 1] = *(uint16 *)RomPtr_86(v4);
v4 += 2;
@@ -684,91 +709,91 @@ uint16 EprojInstr_WriteColorsToPalette(uint16 k, uint16 j) { // 0x8682D5
}
uint16 EprojInstr_QueueMusic(uint16 k, uint16 j) { // 0x8682FD
- uint8 *v2 = RomPtr_86(j);
+ const uint8 *v2 = RomPtr_86(j);
QueueMusic_Delayed8(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx1_Max6(uint16 k, uint16 j) { // 0x868309
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx1_Max6(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx2_Max6(uint16 k, uint16 j) { // 0x868312
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx2_Max6(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx3_Max6(uint16 k, uint16 j) { // 0x86831B
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx3_Max6(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx1_Max15(uint16 k, uint16 j) { // 0x868324
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx1_Max15(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx2_Max15(uint16 k, uint16 j) { // 0x86832D
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx2_Max15(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx3_Max15(uint16 k, uint16 j) { // 0x868336
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx3_Max15(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx1_Max3(uint16 k, uint16 j) { // 0x86833F
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx1_Max3(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx2_Max3(uint16 k, uint16 j) { // 0x868348
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx2_Max3(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx3_Max3(uint16 k, uint16 j) { // 0x868351
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx3_Max3(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx1_Max9(uint16 k, uint16 j) { // 0x86835A
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx1_Max9(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx2_Max9(uint16 k, uint16 j) { // 0x868363
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx2_Max9(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx3_Max9(uint16 k, uint16 j) { // 0x86836C
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx3_Max9(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx1_Max1(uint16 k, uint16 j) { // 0x868375
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx1_Max1(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx2_Max1(uint16 k, uint16 j) { // 0x86837E
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx2_Max1(*v2);
return j + 1;
}
uint16 EprojInstr_QueueSfx3_Max1(uint16 k, uint16 j) { // 0x868387
- uint16 *v2 = (uint16 *)RomPtr_86(j);
+ const uint16 *v2 = (uint16 *)RomPtr_86(j);
QueueSfx3_Max1(*v2);
return j + 1;
}
@@ -842,14 +867,14 @@ uint8 EprojColl_Unknown8536(void) { // 0x86853C
if (BTS[cur_block_index]) {
uint16 v1;
if ((BTS[cur_block_index] & 0x80) != 0) {
- temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
+ uint16 temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
v1 = cur_block_index;
do {
v1 -= room_width_in_blocks;
++temp_collision_DD4;
} while (temp_collision_DD4);
} else {
- temp_collision_DD4 = BTS[cur_block_index];
+ uint16 temp_collision_DD4 = BTS[cur_block_index];
v1 = cur_block_index;
do {
v1 += room_width_in_blocks;
@@ -892,19 +917,18 @@ static const uint8 unk_868729[20] = { // 0x8685C2
};
-#define CHECK_locret_868728(i) (unk_868729[i] & 0x80 ? -1 : 0)
uint8 EprojColl_85C2(uint16 a, uint16 k) {
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R34 & 8) >> 3));
- if (!R32) {
+ if (!R32_) {
int v3 = enemy_projectile_index >> 1;
- if ((((uint8)enemy_projectile_y_pos[v3] - (uint8)g_word_7E001E) & 8) != 0
+ if ((((uint8)enemy_projectile_y_pos[v3] - (uint8)R30_) & 8) != 0
|| CHECK_locret_868728(v2) >= 0) {
uint16 v4 = v2 ^ 2;
- if ((((uint8)g_word_7E001E + (uint8)enemy_projectile_y_pos[v3] - 1) & 8) == 0
+ if ((((uint8)R30_ + (uint8)enemy_projectile_y_pos[v3] - 1) & 8) == 0
|| CHECK_locret_868728(v4) >= 0) {
return 0;
}
@@ -912,15 +936,15 @@ uint8 EprojColl_85C2(uint16 a, uint16 k) {
goto LABEL_17;
}
if (!R26_) {
- if ((((uint8)g_word_7E001E + (uint8)enemy_projectile_y_pos[enemy_projectile_index >> 1] - 1) & 8) == 0) {
+ if ((((uint8)R30_ + (uint8)enemy_projectile_y_pos[enemy_projectile_index >> 1] - 1) & 8) == 0) {
if (CHECK_locret_868728(v2) >= 0)
return 0;
goto LABEL_17;
}
goto LABEL_14;
}
- if (R26_ != R32
- || (((uint8)enemy_projectile_y_pos[enemy_projectile_index >> 1] - (uint8)g_word_7E001E) & 8) == 0) {
+ if (R26_ != R32_
+ || (((uint8)enemy_projectile_y_pos[enemy_projectile_index >> 1] - (uint8)R30_) & 8) == 0) {
LABEL_14:
if (CHECK_locret_868728(v2) < 0)
goto LABEL_17;
@@ -942,10 +966,10 @@ LABEL_17:;
uint8 EprojColl_8676(uint16 a, uint16 k, uint16 j) { // 0x868676
uint16 v2 = enemy_projectile_index;
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v3 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R34 & 8) >> 2));
- if (!R32) {
+ if (!R32_) {
printf("Y unknown!\n");
int v4 = v2 >> 1;
if ((((uint8)enemy_projectile_x_pos[v4] - (uint8)R28_) & 8) != 0
@@ -966,7 +990,7 @@ uint8 EprojColl_8676(uint16 a, uint16 k, uint16 j) { // 0x868676
}
goto LABEL_14;
}
- if (R26_ != R32 || (((uint8)enemy_projectile_x_pos[enemy_projectile_index >> 1] - (uint8)R28_) & 8) == 0) {
+ if (R26_ != R32_ || (((uint8)enemy_projectile_x_pos[enemy_projectile_index >> 1] - (uint8)R28_) & 8) == 0) {
LABEL_14:
if (CHECK_locret_868728(v3) < 0)
goto LABEL_17;
@@ -978,9 +1002,9 @@ LABEL_17:;
uint16 v8;
enemy_projectile_y_subpos[v7] = 0;
if ((R20_ & 0x8000u) != 0)
- v8 = g_word_7E001E + (R34 | 7) + 1;
+ v8 = R30_ + (R34 | 7) + 1;
else
- v8 = (R34 & 0xFFF8) - g_word_7E001E;
+ v8 = (R34 & 0xFFF8) - R30_;
enemy_projectile_y_pos[v7] = v8;
return 1;
}
@@ -1008,8 +1032,8 @@ uint8 EprojColl_874E(void) { // 0x86874E
int v10 = v0 >> 1;
v11 = enemy_projectile_x_pos[v10] >> 4;
if (v11 == mod) {
- temp_collision_DD4 = ((uint8)R24_ - (uint8)g_word_7E001E) & 0xF ^ 0xF;
- temp_collision_DD6 = 16 * (BTS[v9] & 0x1F);
+ uint16 temp_collision_DD4 = ((uint8)R24_ - (uint8)R30_) & 0xF ^ 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[v9] & 0x1F);
v12 = BTS[v9] << 8;
if (v12 < 0
&& ((v12 & 0x4000) != 0 ? (v13 = enemy_projectile_x_pos[v10] ^ 0xF) : (v13 = enemy_projectile_x_pos[v10]),
@@ -1032,8 +1056,8 @@ uint8 EprojColl_874E(void) { // 0x86874E
int v2 = v0 >> 1;
v3 = enemy_projectile_x_pos[v2] >> 4;
if (v3 == mod) {
- temp_collision_DD4 = ((uint8)g_word_7E001E + (uint8)R24_ - 1) & 0xF;
- temp_collision_DD6 = 16 * (BTS[v1] & 0x1F);
+ uint16 temp_collision_DD4 = ((uint8)R30_ + (uint8)R24_ - 1) & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[v1] & 0x1F);
v5 = BTS[v1] << 8;
if (v5 >= 0
&& ((v5 & 0x4000) != 0 ? (v6 = enemy_projectile_x_pos[v2] ^ 0xF) : (v6 = enemy_projectile_x_pos[v2]),
@@ -1117,13 +1141,13 @@ uint8 EnemyProjectileBlockCollisition_Horiz(uint16 k) { // 0x8688B6
v2 = enemy_projectile_x_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
- g_word_7E001E = HIBYTE(enemy_projectile_radius[v1]);
+ R19_ = v2;
+ R30_ = HIBYTE(enemy_projectile_radius[v1]);
R28_ = LOBYTE(enemy_projectile_radius[v1]);
- R26_ = (enemy_projectile_y_pos[v1] - g_word_7E001E) & 0xFFF0;
- R26_ = (uint16)(g_word_7E001E + enemy_projectile_y_pos[v1] - 1 - R26_) >> 4;
- R32 = R26_;
- uint16 prod = Mult8x8((uint16)(enemy_projectile_y_pos[v1] - g_word_7E001E) >> 4, room_width_in_blocks);
+ R26_ = (enemy_projectile_y_pos[v1] - R30_) & 0xFFF0;
+ R26_ = (uint16)(R30_ + enemy_projectile_y_pos[v1] - 1 - R26_) >> 4;
+ R32_ = R26_;
+ uint16 prod = Mult8x8((uint16)(enemy_projectile_y_pos[v1] - R30_) >> 4, room_width_in_blocks);
uint16 v3 = (__PAIR32__(R20_, R18_) + __PAIR32__(enemy_projectile_x_pos[v1], enemy_projectile_1A27[v1])) >> 16;
R22_ = R18_ + enemy_projectile_1A27[v1];
R24_ = v3;
@@ -1168,20 +1192,20 @@ uint8 EnemyProjectileBlockCollisition_Vertical(uint16 k) { // 0x86897B
v2 = enemy_projectile_y_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
- g_word_7E001E = HIBYTE(enemy_projectile_radius[v1]);
+ R19_ = v2;
+ R30_ = HIBYTE(enemy_projectile_radius[v1]);
R28_ = LOBYTE(enemy_projectile_radius[v1]);
R26_ = (enemy_projectile_x_pos[v1] - R28_) & 0xFFF0;
R26_ = (uint16)(R28_ + enemy_projectile_x_pos[v1] - 1 - R26_) >> 4;
- R32 = R26_;
+ R32_ = R26_;
uint16 v3 = (__PAIR32__(R20_, R18_) + __PAIR32__(enemy_projectile_y_pos[v1], enemy_projectile_y_subpos[v1])) >> 16;
R22_ = R18_ + enemy_projectile_y_subpos[v1];
R24_ = v3;
uint16 v4;
if ((R20_ & 0x8000u) != 0)
- v4 = v3 - g_word_7E001E;
+ v4 = v3 - R30_;
else
- v4 = g_word_7E001E + v3 - 1;
+ v4 = R30_ + v3 - 1;
R34 = v4;
uint16 prod = Mult8x8(v4 >> 4, room_width_in_blocks);
v5 = (uint16)(enemy_projectile_x_pos[v1] - R28_) >> 4;
@@ -1196,12 +1220,12 @@ uint8 EnemyProjectileBlockCollisition_Vertical(uint16 k) { // 0x86897B
int v9 = k >> 1;
enemy_projectile_y_subpos[v9] = 0;
if ((R20_ & 0x8000u) != 0) {
- uint16 v11 = g_word_7E001E + (R34 | 0xF) + 1;
+ uint16 v11 = R30_ + (R34 | 0xF) + 1;
if (v11 < enemy_projectile_y_pos[v9] || v11 == enemy_projectile_y_pos[v9])
enemy_projectile_y_pos[v9] = v11;
return 1;
} else {
- uint16 v10 = (R34 & 0xFFF0) - g_word_7E001E;
+ uint16 v10 = (R34 & 0xFFF0) - R30_;
if (v10 >= enemy_projectile_y_pos[v9])
enemy_projectile_y_pos[v9] = v10;
return 1;
@@ -1444,7 +1468,6 @@ void EprojInit_CrocomireProjectile(uint16 j) { // 0x869023
}
static const int16 word_869059[9] = { -16, 0, 32, -16, 0, 32, -16, 0, 32 }; // bug: oob read
-#define g_word_869059 ((uint16*)RomPtr(0x869059))
void EprojPreInstr_CrocomireProjectile(uint16 k) { // 0x86906B
EnemyProjectileBlockCollisition_Horiz(k);
enemy_projectile_gfx_idx[0] = 2560;
@@ -1600,12 +1623,13 @@ uint16 MoveEprojWithVelocityX(uint16 k) { // 0x869311
void SetAreaDependentEprojPropertiesEx(uint16 k, uint16 j) { // 0x86932F
uint16 v2;
+ uint16 *p = (uint16 *)RomPtr_86(k);
if (area_index == 2) {
- v2 = *((uint16 *)RomPtr_86(k) + 1);
+ v2 = p[1];
} else if (area_index == 5) {
- v2 = *((uint16 *)RomPtr_86(k) + 2);
+ v2 = p[2];
} else {
- v2 = *(uint16 *)RomPtr_86(k);
+ v2 = p[0];
}
enemy_projectile_properties[j >> 1] = v2;
}
@@ -2342,7 +2366,6 @@ void EprojPreInstr_PirateClawThrownRight(uint16 k) { // 0x86A124
}
static const int16 word_86A2D6[6] = { 64, 72, 80, -64, -72, -80 };
-#define off_86A2E2 ((uint16*)RomPtr(0x86a2e2))
void EprojInit_A379(uint16 j) { // 0x86A2A1
int v1 = j >> 1;
@@ -2494,7 +2517,6 @@ void EprojInit_A977(uint16 j) { // 0x86A6C7
static const int16 kEprojInit_BombTorizoExplosiveSwipe_Tab0[11] = { -30, -40, -47, -31, -21, -1, -28, -43, -48, -31, -21 };
static const int16 kEprojInit_BombTorizoExplosiveSwipe_Tab1[11] = { -52, -28, -11, 9, 21, 20, -52, -27, -10, 9, 20 };
-#define kEprojInit_BombTorizoStatueBreaking_InstrList ((uint16*)RomPtr(0x86a7ab))
static const int16 kEprojInit_BombTorizoStatueBreaking_Xpos[16] = { 8, 0x18, -8, 8, 0x18, -8, 8, 0x18, 8, -8, 0x18, 8, -8, 0x18, 8, -8 };
static const int16 kEprojInit_BombTorizoStatueBreaking_Ypos[8] = { -8, -8, 8, 8, 8, 0x18, 0x18, 0x18 };
static const int16 kEprojInit_BombTorizoStatueBreaking_Yvel[8] = { 256, 256, 256, 256, 256, 256, 256, 256 };
@@ -2661,7 +2683,7 @@ void EprojPreInstr_AB07(uint16 k) { // 0x86AA8C
uint16 v2 = 8 * (samus_x_pos - enemy_projectile_x_pos[v1]);
if (((samus_x_pos - enemy_projectile_x_pos[v1]) & 0x1000) != 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
bool v3 = __CFADD__uint16(enemy_projectile_1A27[v1], R18_);
enemy_projectile_1A27[v1] += R18_;
enemy_projectile_x_pos[v1] += v3 + R20_;
@@ -2670,7 +2692,7 @@ void EprojPreInstr_AB07(uint16 k) { // 0x86AA8C
uint16 v4 = 8 * (samus_y_pos - 36 - enemy_projectile_y_pos[v1]);
if (((samus_y_pos - 36 - enemy_projectile_y_pos[v1]) & 0x1000) != 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v4;
+ R19_ = v4;
v3 = __CFADD__uint16(enemy_projectile_y_subpos[v1], R18_);
enemy_projectile_y_subpos[v1] += R18_;
enemy_projectile_y_pos[v1] += v3 + R20_;
@@ -2678,19 +2700,15 @@ void EprojPreInstr_AB07(uint16 k) { // 0x86AA8C
uint16 EprojInstr_SpawnEnemyDrops(uint16 k, uint16 j) { // 0x86AB8A
int v2 = k >> 1;
- uint16 v3;
R18_ = enemy_projectile_x_pos[v2];
R20_ = enemy_projectile_y_pos[v2];
- if (area_index)
- v3 = *((uint16 *)RomPtr_86(j) + 1);
- else
- v3 = *(uint16 *)RomPtr_86(j);
- SpawnEnemyDrops(v3, k);
+ uint16 *p = (uint16 *)RomPtr_86(j);
+ SpawnEnemyDrops(area_index ? p[1] : p[0], k);
return j + 4;
}
void Eproj_InitXYVelRandom(uint16 j, uint16 k) { // 0x86ABAE
- uint16 *v2 = (uint16 *)RomPtr_86(k);
+ const uint16 *v2 = (const uint16 *)RomPtr_86(k);
int v3 = j >> 1;
enemy_projectile_instr_list_ptr[v3] = *v2;
enemy_projectile_x_pos[v3] = v2[1] + R18_;
@@ -2778,15 +2796,16 @@ uint16 EprojInstr_GotoDependingOnXDirection(uint16 k, uint16 j) { // 0x86AD92
v3 = enemy_projectile_x_vel[v2];
if (v3 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v3;
+ R19_ = v3;
uint16 v4 = enemy_projectile_1A27[v2];
bool v5 = __CFADD__uint16(R18_, v4);
enemy_projectile_1A27[v2] = R18_ + v4;
enemy_projectile_x_pos[v2] += R20_ + v5;
+ uint16 *t = (uint16 *)RomPtr_86(j);
if ((enemy_projectile_x_vel[v2] & 0x8000u) == 0)
- return *((uint16 *)RomPtr_86(j) + 1);
+ return t[1];
else
- return *(uint16 *)RomPtr_86(j);
+ return t[0];
}
void EprojInit_TorizoSonicBoom(uint16 j) { // 0x86AE15
@@ -2972,7 +2991,6 @@ uint16 sub_86B183(uint16 k, uint16 j) { // 0x86B183
}
static const int16 word_86B205[2] = { -0x1e, 0x1e };
-#define off_86B209 ((uint16*)RomPtr(0x86b209))
void EprojInit_GoldenTorizoSuperMissile(uint16 j) { // 0x86B1CE
uint16 v4;
@@ -3331,7 +3349,7 @@ void EprojPreInstr_TourianStatueUnlockingParticle(uint16 k) { // 0x86B982
v2 = enemy_projectile_x_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 v3 = enemy_projectile_1A27[v1];
bool v4 = __CFADD__uint16(R18_, v3);
enemy_projectile_1A27[v1] = R18_ + v3;
@@ -3342,7 +3360,7 @@ void EprojPreInstr_TourianStatueUnlockingParticle(uint16 k) { // 0x86B982
v5 = enemy_projectile_y_vel[v1];
if (v5 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v5;
+ R19_ = v5;
uint16 v6 = enemy_projectile_y_subpos[v1];
v4 = __CFADD__uint16(R18_, v6);
enemy_projectile_y_subpos[v1] = R18_ + v6;
@@ -3366,7 +3384,7 @@ void EprojPreInstr_TourianStatueSoul(uint16 k) { // 0x86B9FD
v2 = enemy_projectile_y_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 v3 = enemy_projectile_y_subpos[v1];
bool v4 = __CFADD__uint16(R18_, v3);
enemy_projectile_y_subpos[v1] = R18_ + v3;
@@ -3571,9 +3589,6 @@ void EprojPreInstr_BE12(uint16 k) { // 0x86BE12
}
}
-#define kEproj_MotherBrainRoomTurrets_DirectionIndexes ((uint16*)RomPtr(0x86bee1))
-#define kEproj_MotherBrainRoomTurrets_AllowedRotations ((uint16*)RomPtr(0x86bec9))
-#define kEproj_MotherBrainRoomTurrets_InstrLists ((uint16*)RomPtr(0x86beb9))
static const int16 kEprojInit_MotherBrainRoomTurrets_X[12] = { 0x398, 0x348, 0x328, 0x2d8, 0x288, 0x268, 0x218, 0x1c8, 0x1a8, 0x158, 0x108, 0xe8 };
static const int16 EprojInit_MotherBrainRoomTurrets_Y[12] = { 0x30, 0x40, 0x40, 0x30, 0x40, 0x40, 0x30, 0x40, 0x40, 0x30, 0x40, 0x40 };
@@ -3614,7 +3629,6 @@ void EprojInit_MotherBrainRoomTurretBullets(uint16 j) { // 0x86BF59
enemy_projectile_y_pos[v1] = R20_ + enemy_projectile_y_pos[v4];
}
-#define g_off_86C040 ((uint16*)RomPtr(0x86c040))
void EprojPreInstr_MotherBrainRoomTurrets(uint16 k) { // 0x86BFDF
if (Eproj_MotherBrainRoomTurretBullets_CheckIfTurretOnScreen(k) & 1) {
@@ -3826,7 +3840,7 @@ uint16 Math_MultByCos(uint16 a) { // 0x86C272
}
uint16 Math_MultBySinCos(uint16 a) { // 0x86C27A
- R46 = kSinCosTable8bit_Sext[((uint16)((2 * a) & 0x1FE) >> 1) + 64];
+ R46 = kSinCosTable8bit_Sext[(a & 0xff) + 64];
R40 = abs16(R46);
Math_Mult16U();
uint16 r = *(uint16 *)((char *)&R42 + 1);
@@ -4269,7 +4283,6 @@ void MotherBrainTubeFallingFunc_Falling(uint16 k) { // 0x86CC08
}
}
-#define kEprojInit_MotherBrainGlassShatteringShard_InstrPtrs ((uint16*)RomPtr(0x86ce41))
static const int16 kEprojInit_MotherBrainGlassShatteringShard_X[3] = { 8, -40, -16 };
static const int16 kEprojInit_MotherBrainGlassShatteringShard_Y[3] = { 32, 32, 32 };
@@ -4308,7 +4321,7 @@ void EprojPreInstr_MotherBrainGlassShatteringShard(uint16 k) { // 0x86CE9B
v2 = enemy_projectile_x_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 v3 = enemy_projectile_1A27[v1];
bool v4 = __CFADD__uint16(R18_, v3);
enemy_projectile_1A27[v1] = R18_ + v3;
@@ -4318,7 +4331,7 @@ void EprojPreInstr_MotherBrainGlassShatteringShard(uint16 k) { // 0x86CE9B
v5 = enemy_projectile_y_vel[v1];
if (v5 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v5;
+ R19_ = v5;
uint16 v6 = enemy_projectile_y_subpos[v1];
v4 = __CFADD__uint16(R18_, v6);
enemy_projectile_y_subpos[v1] = R18_ + v6;
@@ -4646,7 +4659,6 @@ static const int16 kEprojInit_N00bTubeShards_X[10] = { -56, -64, -20, -40, -64,
static const int16 kEprojInit_N00bTubeShards_Y[10] = { 8, -12, -26, -24, -32, 28, 16, -8, -24, 16 };
static const int16 kEprojInit_N00bTubeShards_Xvel[10] = { -384, -384, -160, -288, -288, -320, -96, -352, 0, -64 };
static const int16 kEprojInit_N00bTubeShards_Yvel[10] = { 320, -256, -416, -288, -288, 448, 576, -96, -288, 384 };
-#define kEprojInit_N00bTubeShards_InstrPtrs ((uint16*)RomPtr(0x86d760))
void EprojInit_N00bTubeShards(uint16 j) { // 0x86D6C9
CalculatePlmBlockCoords(plm_id);
@@ -4686,7 +4698,7 @@ void sub_86D7BF(uint16 k) { // 0x86D7BF
void sub_86D7DE(uint16 k) { // 0x86D7DE
R18_ = 0;
R20_ = 0;
- *(uint16 *)((char *)&R18_ + 1) = 192;
+ R19_ = 192;
int v1 = k >> 1;
uint16 v2 = enemy_projectile_y_subpos[v1];
bool v3 = __CFADD__uint16(R18_, v2);
@@ -4704,7 +4716,7 @@ void EprojPreInstr_N00bTubeShards(uint16 k) { // 0x86D7FD
v2 = enemy_projectile_x_vel[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 v3 = enemy_projectile_E[v1];
bool v4 = __CFADD__uint16(R18_, v3);
enemy_projectile_E[v1] = R18_ + v3;
@@ -4714,7 +4726,7 @@ void EprojPreInstr_N00bTubeShards(uint16 k) { // 0x86D7FD
v5 = enemy_projectile_y_vel[v1];
if (v5 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v5;
+ R19_ = v5;
uint16 v6 = enemy_projectile_y_subpos[v1];
v4 = __CFADD__uint16(R18_, v6);
enemy_projectile_y_subpos[v1] = R18_ + v6;
@@ -4732,7 +4744,7 @@ void sub_86D83D(uint16 k) { // 0x86D83D
uint16 v3 = kSinCosTable8bit_Sext[v2 + 64];
if ((kSinCosTable8bit_Sext[v2 + 64] & 0x8000u) != 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = (int16)v3 >> 2;
+ R19_ = (int16)v3 >> 2;
uint16 v5 = enemy_projectile_index;
int v6 = enemy_projectile_index >> 1;
uint16 v7 = enemy_projectile_E[v6];
@@ -4745,7 +4757,7 @@ void sub_86D83D(uint16 k) { // 0x86D83D
v8 = enemy_projectile_y_vel[v6];
if (v8 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v8;
+ R19_ = v8;
uint16 v9 = enemy_projectile_y_subpos[v6];
v4 = __CFADD__uint16(R18_, v9);
enemy_projectile_y_subpos[v6] = R18_ + v9;
@@ -4761,7 +4773,7 @@ void sub_86D89F(uint16 k) { // 0x86D89F
uint16 v3 = kSinCosTable8bit_Sext[v2 + 64];
if ((kSinCosTable8bit_Sext[v2 + 64] & 0x8000u) != 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = (int16)v3 >> 2;
+ R19_ = (int16)v3 >> 2;
int v5 = enemy_projectile_index >> 1;
uint16 v6 = enemy_projectile_E[v5];
bool v4 = __CFADD__uint16(R18_, v6);
@@ -4779,7 +4791,7 @@ void sub_86D8DF(uint16 k) { // 0x86D8DF
v7 = enemy_projectile_y_vel[v5];
if (v7 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v7;
+ R19_ = v7;
uint16 v8 = enemy_projectile_y_subpos[v5];
bool v4 = __CFADD__uint16(R18_, v8);
enemy_projectile_y_subpos[v5] = R18_ + v8;
@@ -4787,7 +4799,6 @@ void sub_86D8DF(uint16 k) { // 0x86D8DF
enemy_projectile_x_pos[v5] = enemy_projectile_F[v5];
}
-#define off_86D96A ((uint16*)RomPtr(0x86d96a))
void sub_86D992(uint16 v0) { // 0x86D992
uint16 v1 = enemy_projectile_init_param;
@@ -5032,7 +5043,6 @@ void EprojInit_SporeSpawners(uint16 j) { // 0x86DCD4
enemy_projectile_y_pos[v1] = 520;
}
-#define kSporeMovementData ((uint8*)RomPtr(0x86dd6c))
void EprojPreInstr_Spores(uint16 k) { // 0x86DCEE
int v1 = k >> 1;
@@ -5061,7 +5071,6 @@ void EprojPreInstr_SporeSpawners(uint16 k) { // 0x86DD46
}
}
-#define word_86DEB6 ((uint16*)RomPtr(0x86deb6))
void EprojInit_NamiFuneFireball(uint16 j) { // 0x86DED6
int v2 = j >> 1;
@@ -5208,8 +5217,6 @@ uint16 sub_86E0B0(uint16 k) { // 0x86E0B0
|| (int16)(layer1_y_pos + 256 - enemy_projectile_y_pos[v1]) < 0;
}
-#define off_86E42C ((uint16*)RomPtr(0x86e42c))
-#define word_86E47E ((uint16*)RomPtr(0x86e47e))
void EprojInst_DustCloudOrExplosion(uint16 v0) { // 0x86E468
int v1 = v0 >> 1;
@@ -5220,7 +5227,7 @@ void EprojInst_DustCloudOrExplosion(uint16 v0) { // 0x86E468
void EprojInit_EyeDoorSmoke(uint16 j) { // 0x86E4A6
int v1 = j >> 1;
- enemy_projectile_instr_list_ptr[v1] = off_86E42C[(uint16)(2 * (uint8)enemy_projectile_init_param) >> 1];
+ enemy_projectile_instr_list_ptr[v1] = off_86E42C[(uint8)enemy_projectile_init_param];
int v2 = (uint16)(8 * HIBYTE(enemy_projectile_init_param)) >> 1;
R18_ = word_86E47E[v2 + 2] + (word_86E47E[v2] & random_number);
R20_ = word_86E47E[v2 + 3] + (word_86E47E[v2 + 1] & *(uint16 *)((char *)&random_number + 1));
@@ -5361,7 +5368,6 @@ void Eproj_AngleToSamus(uint16 j) { // 0x86E7AB
enemy_projectile_F[v1] = R28_;
}
-#define kEprojInit_BotwoonsBody_InstrLists ((uint16*)RomPtr(0x86e9f1))
void EprojInit_BotwoonsBody(uint16 j) { // 0x86EA31
int v1 = j >> 1;
@@ -5398,7 +5404,7 @@ void CallBotwoonEprojFunc(uint32 ea, uint16 k) {
void EprojPreInstr_BotwoonsBody(uint16 k) { // 0x86EA80
if (*(uint16 *)&extra_enemy_ram8000[0].pad[32]) {
int v1 = k >> 1;
- if (enemy_projectile_x_vel[v1] == (uint16)FUNC16(Eproj_BotwoonsBody_Main))
+ if (enemy_projectile_x_vel[v1] == FUNC16(Eproj_BotwoonsBody_Main))
enemy_projectile_x_vel[v1] = FUNC16(Eproj_BotwonsBodyFunction_Dying);
}
CallBotwoonEprojFunc(enemy_projectile_x_vel[k >> 1] | 0x860000, k);
@@ -5565,7 +5571,6 @@ uint16 EprojInstr_QueueSfx2_B(uint16 k, uint16 j) { // 0x86EEA3
return j;
}
-#define off_86EF04 ((uint16*)RomPtr(0x86ef04))
uint16 EprojInstr_EEAF(uint16 k, uint16 j) { // 0x86EEAF
uint16 v2 = RandomDropRoutine(k);
@@ -5618,7 +5623,6 @@ void EprojInit_F337(uint16 j) { // 0x86EF29
}
}
-#define off_86EFD5 ((uint16*)RomPtr(0x86efd5))
void EprojInit_EnemyDeathExplosion(uint16 j) { // 0x86EF89
EnemyData *v1 = gEnemyData(cur_enemy_index);
@@ -5745,11 +5749,11 @@ uint16 RandomDropRoutine(uint16 k) { // 0x86F106
health_drop_bias_flag = v5;
LABEL_7:
if ((uint8)health_drop_bias_flag) {
- uint8 *v6 = RomPtr_B4(v2);
+ const uint8 *v6 = RomPtr_B4(v2);
LOBYTE(R18_) = v6[1] + *v6;
LOBYTE(R22_) = 3;
} else {
- uint8 *v7 = RomPtr_B4(v2);
+ const uint8 *v7 = RomPtr_B4(v2);
LOBYTE(R18_) = v7[3];
LOBYTE(R22_) = 8;
if (samus_health != samus_max_health || samus_reserve_health != samus_max_reserve_health) {
@@ -5780,7 +5784,7 @@ LABEL_7:
v9 = R22_ & 1;
LOBYTE(R22_) = (uint8)R22_ >> 1;
if (v9) {
- uint8 *v10 = RomPtr_B4(v2);
+ const uint8 *v10 = RomPtr_B4(v2);
uint16 RegWord = Mult8x8(R20_, *v10);
int divved = SnesDivide(RegWord, R18_);
uint16 v12 = R24_;
@@ -5796,7 +5800,7 @@ LABEL_26:
v9 = R22_ & 1;
LOBYTE(R22_) = (uint8)R22_ >> 1;
if (v9) {
- uint8 *v14 = RomPtr_B4(v2);
+ const uint8 *v14 = RomPtr_B4(v2);
if ((uint16)(R24_ + *v14) >= R26_)
return byte_86F25E[i];
R24_ += *v14;
@@ -5815,16 +5819,16 @@ void RespawnEnemy(uint16 v0) { // 0x86F264
int16 v7;
cur_enemy_index = v0;
- uint8 *v1 = RomPtr_A1(room_enemy_population_ptr + (v0 >> 2));
+ const uint8 *v1 = RomPtr_A1(room_enemy_population_ptr + (v0 >> 2));
EnemyData *v2 = gEnemyData(v0);
- v2->enemy_ptr = *(uint16 *)v1;
- v2->x_pos = *((uint16 *)v1 + 1);
- v2->y_pos = *((uint16 *)v1 + 2);
- v2->current_instruction = *((uint16 *)v1 + 3);
- v2->properties = *((uint16 *)v1 + 4);
- v2->extra_properties = *((uint16 *)v1 + 5);
- v2->parameter_1 = *((uint16 *)v1 + 6);
- v2->parameter_2 = *((uint16 *)v1 + 7);
+ v2->enemy_ptr = GET_WORD(v1);
+ v2->x_pos = GET_WORD(v1 + 2);
+ v2->y_pos = GET_WORD(v1 + 4);
+ v2->current_instruction = GET_WORD(v1 + 6);
+ v2->properties = GET_WORD(v1 + 8);
+ v2->extra_properties = GET_WORD(v1 + 10);
+ v2->parameter_1 = GET_WORD(v1 + 12);
+ v2->parameter_2 = GET_WORD(v1 + 14);
v3 = gEnemySpawnData(v0);
EnemyData *v4 = gEnemyData(v0);
v4->palette_index = v3->palette_index;
@@ -5847,18 +5851,16 @@ void RespawnEnemy(uint16 v0) { // 0x86F264
v2->x_width = EnemyDef_A2->x_radius;
v2->y_height = EnemyDef_A2->y_radius;
v2->health = EnemyDef_A2->health;
- v2->layer = RomPtr_A0(enemy_ptr)[57];
+ v2->layer = EnemyDef_A2->layer;
v7 = *(uint16 *)&EnemyDef_A2->bank;
*(uint16 *)&v2->bank = v7;
enemy_ai_pointer.bank = v7;
CallEnemyAi(Load24(&enemy_ai_pointer));
}
-#define kEnemyDef_F3D3 (*(EnemyDef_B2*)RomPtr(0xa0f3d3))
void EprojInit_Sparks(uint16 j) { // 0x86F391
static const uint16 word_86F3D4[14] = { 0xffff, 0xb800, 0xffff, 0xc000, 0xffff, 0xe000, 0xffff, 0xff00, 0, 0x100, 0, 0x2000, 0, 0x4000 };
-#define g_word_86F3D4 ((uint16*)RomPtr(0x86f3d4)) // bug:: oob read
int v2 = j >> 1;
enemy_projectile_instr_list_ptr[v2] = addr_kEnemyDef_F353;
EnemyData *v3 = gEnemyData(cur_enemy_index);
@@ -5912,4 +5914,4 @@ void EprojPreInstr_Sparks(uint16 k) { // 0x86F3F0
R24_ = enemy_projectile_gfx_idx[v1];
CreateSpriteAtPos();
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_87.c b/src/sm_87.c
index cf54e92..2bafee1 100644
--- a/src/sm_87.c
+++ b/src/sm_87.c
@@ -3,6 +3,10 @@
#include "funcs.h"
#include "variables.h"
+
+
+
+
void EnableAnimtiles(void) { // 0x878000
animtiles_enable_flag |= 0x8000;
}
@@ -28,7 +32,7 @@ void SpawnAnimtiles(uint16 j) { // 0x878027
int v2 = v1 >> 1;
animtiles_ids[v2] = v0;
animtiles_timers[v2] = 0;
- uint16 *v3 = (uint16 *)RomPtr_87(v0);
+ const uint16 *v3 = (const uint16 *)RomPtr_87(v0);
animtiles_instr_list_ptrs[v2] = *v3;
animtiles_src_ptr[v2] = 0;
animtiles_sizes[v2] = v3[1];
@@ -84,7 +88,7 @@ void ProcessAnimtilesObject(void) { // 0x878085
if (animtiles_instr_timers[v1]-- == 1) {
uint16 v3 = animtiles_instr_list_ptrs[v1], v5;
while (1) {
- uint16 *v4 = (uint16 *)RomPtr_87(v3);
+ const uint16 *v4 = (const uint16 *)RomPtr_87(v3);
v5 = *v4;
if ((*v4 & 0x8000u) == 0)
break;
@@ -136,31 +140,31 @@ uint16 AnimtilesInstr_SetTimer(uint16 k, uint16 j) { // 0x8780E3
}
uint16 AnimtilesInstr_QueueMusic(uint16 k, uint16 j) { // 0x8780F0
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
QueueMusic_Delayed8(*v2);
return j + 1;
}
uint16 AnimtilesInstr_QueueSfx1(uint16 k, uint16 j) { // 0x8780FC
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
QueueSfx1_Max6(*v2);
return j + 1;
}
uint16 AnimtilesInstr_QueueSfx2(uint16 k, uint16 j) { // 0x878108
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
QueueSfx2_Max6(*v2);
return j + 1;
}
uint16 AnimtilesInstr_QueueSfx3(uint16 k, uint16 j) { // 0x878114
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
QueueSfx3_Max6(*v2);
return j + 1;
}
uint16 AnimtilesInstr_GotoIfBossBitSet(uint16 k, uint16 j) { // 0x878120
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
uint16 v3 = j + 1;
if (CheckBossBitForCurArea((uint8) * (uint16 *)v2) & 1)
return AnimtilesInstr_Goto(k, v3);
@@ -169,13 +173,13 @@ uint16 AnimtilesInstr_GotoIfBossBitSet(uint16 k, uint16 j) { // 0x878120
}
uint16 AnimtilesInstr_SetBossBit(uint16 k, uint16 j) { // 0x878133
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
SetBossBitForCurArea(*v2);
return j + 1;
}
uint16 AnimtilesInstr_GotoIfEventHappened(uint16 k, uint16 j) { // 0x87813F
- uint16 *v2 = (uint16 *)RomPtr_87(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_87(j);
uint16 v3 = j + 2;
if (CheckEventHappened(*v2) & 1)
return AnimtilesInstr_Goto(k, v3);
@@ -184,7 +188,7 @@ uint16 AnimtilesInstr_GotoIfEventHappened(uint16 k, uint16 j) { // 0x87813F
}
uint16 AnimtilesInstr_SetEventHappened(uint16 k, uint16 j) { // 0x878150
- uint16 *v2 = (uint16 *)RomPtr_87(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_87(j);
SetEventHappened(*v2);
return j + 2;
}
@@ -206,7 +210,7 @@ uint16 AnimtilesInstr_WaitUntilAreaBossDead_DoubleRet(uint16 k, uint16 j) { //
}
uint16 AnimtilesInstr_GotoIfBossBitSetInArea(uint16 k, uint16 j) { // 0x878303
- uint8 *v2 = RomPtr_87(j);
+ const uint8 *v2 = RomPtr_87(j);
uint16 v3 = j + 2;
if ((*v2 & boss_bits_for_area[v2[1]]) != 0)
return AnimtilesInstr_Goto(k, v3);
@@ -215,13 +219,13 @@ uint16 AnimtilesInstr_GotoIfBossBitSetInArea(uint16 k, uint16 j) { // 0x878303
}
uint16 AnimtilesInstr_SpawnTourianStatueEyeGlow(uint16 k, uint16 j) { // 0x878320
- uint16 *v2 = (uint16 *)RomPtr_87(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_87(j);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianStatueEyeGlow, *v2);
return j + 2;
}
uint16 AnimtilesInstr_SpawnTourianStatueSoul(uint16 k, uint16 j) { // 0x87832F
- uint16 *v2 = (uint16 *)RomPtr_87(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_87(j);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianStatueSoul, *v2);
return j + 2;
}
@@ -252,7 +256,7 @@ uint16 AnimtilesInstr_Clear3PaletteColors(uint16 k, uint16 j) { // 0x87835B
}
uint16 AnimtilesInstr_SpawnPalfxObj(uint16 k, uint16 j) { // 0x878372
- uint16 *v2 = (uint16 *)RomPtr_87(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_87(j);
SpawnPalfxObject(*v2);
return j + 2;
}
@@ -266,4 +270,4 @@ uint16 AnimtilesInstr_Write8PaletteColors(uint16 k, uint16 j) { // 0x87837F
v2 += 2;
}
return j + 2;
-}
+}
\ No newline at end of file
diff --git a/src/sm_88.c b/src/sm_88.c
index d9533cd..a8a4bd2 100644
--- a/src/sm_88.c
+++ b/src/sm_88.c
@@ -4,6 +4,22 @@
#include "sm_rtl.h"
#include "funcs.h"
+
+#define g_byte_88A206 ((uint8*)RomFixedPtr(0x88a206))
+#define g_byte_88A286 ((uint8*)RomFixedPtr(0x88a286))
+#define kPowerBombExplosionColors ((uint8*)RomFixedPtr(0x888d85))
+#define g_byte_889079 ((uint8*)RomFixedPtr(0x889079))
+#define g_word_88A938 ((uint16*)RomFixedPtr(0x88a938))
+#define kHdmaScrollEntrys ((HdmaScrollEntry*)RomFixedPtr(0x88aec1))
+#define g_word_88B589 ((uint16*)RomFixedPtr(0x88b589))
+#define g_word_88B60A ((uint16*)RomFixedPtr(0x88b60a))
+#define g_word_88D992 ((uint16*)RomFixedPtr(0x88d992))
+#define g_byte_88E3C9 ((uint8*)RomFixedPtr(0x88e3c9))
+#define g_word_88E833 ((uint16*)RomFixedPtr(0x88e833))
+#define g_byte_88EA8B ((uint8*)RomFixedPtr(0x88ea8b))
+
+
+
static Func_Y_Y *const kLayerBlendFuncTable[27] = {
nullsub_9,
nullsub_9,
@@ -235,7 +251,7 @@ void HandleLayerBlendingXrayCantShowBlocks(void) { // 0x8881A4
reg_TSW = 4;
next_gameplay_CGWSEL = 34;
next_gameplay_CGADSUB = next_gameplay_CGADSUB & 0x80 | 0x61;
- if (room_ptr == (uint16)addr_kRoom_cefb)
+ if (room_ptr == addr_kRoom_cefb)
reg_TM = 17;
}
@@ -257,7 +273,7 @@ static Func_V *const kLayerBlendPowerBombFuncs[4] = { // 0x8881FE
LayerBlendPowerBombFunc_6,
};
void HandleLayerBlendingPowerBomb(uint16 j) {
- if (room_ptr == (uint16)addr_kRoom_a66a)
+ if (room_ptr == addr_kRoom_a66a)
j = 6;
kLayerBlendPowerBombFuncs[j >> 1]();
}
@@ -323,12 +339,12 @@ void sub_8882AC(void) { // 0x8882AC
void InitializeSpecialEffectsForNewRoom(void) { // 0x8882C1
earthquake_sfx_index = 0;
earthquake_sfx_timer = 0;
- if (room_ptr == (uint16)addr_kRoom_9804
- || room_ptr == (uint16)addr_kRoom_96ba
- || room_ptr == (uint16)addr_kRoom_b32e
- || room_ptr == (uint16)addr_kRoom_b457
- || room_ptr == (uint16)addr_kRoom_dd58
- || room_ptr == (uint16)addr_kRoom_dede) {
+ if (room_ptr == addr_kRoom_9804
+ || room_ptr == addr_kRoom_96ba
+ || room_ptr == addr_kRoom_b32e
+ || room_ptr == addr_kRoom_b457
+ || room_ptr == addr_kRoom_dd58
+ || room_ptr == addr_kRoom_dede) {
earthquake_sfx_timer = -1;
}
debug_disable_minimap = 0;
@@ -400,8 +416,6 @@ void InitializeSpecialEffectsForNewRoom(void) { // 0x8882C1
}
uint16 SpawnHdmaObjectInner(uint16 k, uint16 *p) { // 0x888477
- uint16 v4;
-
int v2 = k >> 1;
hdma_object_pre_instructions[v2] = FUNC16(nullsub_293);
hdma_object_pre_instruction_bank[v2] = 136;
@@ -412,9 +426,7 @@ uint16 SpawnHdmaObjectInner(uint16 k, uint16 *p) { // 0x888477
hdma_object_B[v2] = 0;
hdma_object_C[v2] = 0;
hdma_object_D[v2] = 0;
- LOBYTE(v4) = HIBYTE(R18_);
- HIBYTE(v4) = R18_;
- hdma_object_channels_bitmask[v2] = v4;
+ hdma_object_channels_bitmask[v2] = swap16(R18_);
hdma_object_bank_slot[v2] = R24_ | R20_;
WriteRegWord((SnesRegs)(R20_ + 17152), *p);
return k;
@@ -588,7 +600,7 @@ void HdmaobjInstructionHandler(uint16 k) { // 0x88851C
uint16 v4 = hdma_object_instruction_list_pointers[v2];
uint16 v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtrWithBank(v8, v4);
+ const uint16 *v5 = (const uint16 *)RomPtrWithBank(v8, v4);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -610,8 +622,8 @@ uint16 HdmaobjInstr_Delete(uint16 k, uint16 j) { // 0x888569
}
uint16 HdmaobjInstr_SetPreInstr(uint8 db, uint16 k, uint16 j) { // 0x888570
- uint8 *v2 = RomPtrWithBank(db, j);
- hdma_object_pre_instructions[k >> 1] = *(uint16 *)v2;
+ const uint8 *v2 = RomPtrWithBank(db, j);
+ hdma_object_pre_instructions[k >> 1] = GET_WORD(v2);
*((uint8 *)hdma_object_pre_instruction_bank + k) = v2[2];
return j + 3;
}
@@ -649,7 +661,7 @@ void CallHdmaobjInstrFunc(uint32 ea, uint16 k) {
}
uint16 HdmaobjInstr_CallFarFunc(uint8 db, uint16 k, uint16 j) { // 0x8885B4
- uint8 *v2 = RomPtrWithBank(db, j);
+ const uint8 *v2 = RomPtrWithBank(db, j);
copy24((LongPtr *)&R18_, (LongPtr *)v2);
CallHdmaobjInstrFunc(Load24(&R18_), k);
return j + 3;
@@ -686,13 +698,13 @@ uint16 HdmaobjInstr_SetTimer(uint8 db, uint16 k, uint16 j) { // 0x888616
}
uint16 HdmaobjInstr_SetHdmaControl(uint8 db, uint16 k, uint16 j) { // 0x888622
- uint8 *v2 = RomPtrWithBank(db, j);
+ const uint8 *v2 = RomPtrWithBank(db, j);
WriteReg((SnesRegs)(LOBYTE(hdma_object_bank_slot[k >> 1]) + DMAP0), *v2);
return j + 1;
}
uint16 HdmaobjInstr_SetHdmaTarget(uint8 db, uint16 k, uint16 j) { // 0x888637
- uint8 *v2 = RomPtrWithBank(db, j);
+ const uint8 *v2 = RomPtrWithBank(db, j);
WriteReg((SnesRegs)(LOBYTE(hdma_object_bank_slot[k >> 1]) + BBAD0), *v2);
return j + 1;
}
@@ -703,13 +715,13 @@ uint16 HdmaobjInstr_SetHdmaTablePtr(uint8 db, uint16 k, uint16 j) { // 0x88864C
}
uint16 HdmaobjInstr_SetHdmaTableBank(uint8 db, uint16 k, uint16 j) { // 0x888655
- uint8 *v2 = RomPtrWithBank(db, j);
+ const uint8 *v2 = RomPtrWithBank(db, j);
WriteReg((SnesRegs)(LOBYTE(hdma_object_bank_slot[k >> 1]) + A1B0), *v2);
return j + 1;
}
uint16 HdmaobjInstr_SetIndirectHdmaDataBank(uint8 db, uint16 k, uint16 j) { // 0x88866A
- uint8 *v2 = RomPtrWithBank(db, j);
+ const uint8 *v2 = RomPtrWithBank(db, j);
WriteReg((SnesRegs)(LOBYTE(hdma_object_bank_slot[k >> 1]) + DAS00), *v2);
return j + 1;
}
@@ -909,7 +921,7 @@ void HdmaobjPreInstr_XrayFunc3_DeactivateBeam(uint16 k) { // 0x888934
int16 v1;
VramWriteEntry *v4;
- mov24((LongPtr *)&demo_enable, 0x980001);
+ mov24(&hdma_ptr_1, 0x980001);
*(uint16 *)((char *)&demo_num_input_frames + 1) = 0;
demo_input_prev = 0;
demo_input_prev_new = 0;
@@ -979,7 +991,7 @@ void HdmaobjPreInstr_XrayFunc5_DeactivateBeam(uint16 k) { // 0x888A08
xray_angle = 0;
demo_input = 0;
demo_input_new = 0;
- mov24((LongPtr *)&demo_enable, 0x980001);
+ mov24(&hdma_ptr_1, 0x980001);
*(uint16 *)((char *)&demo_num_input_frames + 1) = 0;
demo_input_prev = 0;
demo_input_prev_new = 0;
@@ -995,7 +1007,7 @@ void HdmaobjPreInstr_XrayFunc5_DeactivateBeam(uint16 k) { // 0x888A08
R0_.bank = 126;
R0_.addr = ADDR16_OF_RAM(*hdma_table_1);
for (int i = 510; i >= 0; i -= 2)
- IndirWriteWord(&R0_, i, 0xFF);
+ IndirWriteWord(R0_, i, 0xFF);
if (samus_auto_cancel_hud_item_index) {
hud_item_index = 0;
samus_auto_cancel_hud_item_index = 0;
@@ -1082,9 +1094,9 @@ void HdmaobjPreInstr_PowerBombExplode_Stage5_Afterglow(uint16 k) { // 0x888B98
}
}
-void CalculatePowerBombHdma_LeftOfScreen(uint16 k, uint16 j) { // 0x888BEA
+void CalculatePowerBombHdma_LeftOfScreen(uint16 k, const uint8 *j) { // 0x888BEA
do {
- uint8 w = *RomPtr_88(j);
+ uint8 w = *j;
uint8 c = power_bomb_explosion_x_pos_plus_0x100;
if (__CFADD__uint8(w, c)) {
power_bomb_explosion_right_hdma[k] = w + c;
@@ -1098,9 +1110,9 @@ void CalculatePowerBombHdma_LeftOfScreen(uint16 k, uint16 j) { // 0x888BEA
} while (k != 192);
}
-void CalculatePowerBombHdma_OnScreen(uint16 k, uint16 j) { // 0x888C12
+void CalculatePowerBombHdma_OnScreen(uint16 k, const uint8 *j) { // 0x888C12
do {
- uint8 w = *RomPtr_88(j);
+ uint8 w = *j;
if (!w)
break;
uint8 c = power_bomb_explosion_x_pos_plus_0x100;
@@ -1113,9 +1125,9 @@ void CalculatePowerBombHdma_OnScreen(uint16 k, uint16 j) { // 0x888C12
} while (k != 192);
}
-void CalculatePowerBombHdma_RightOfScreen(uint16 k, uint16 j) { // 0x888C3A
+void CalculatePowerBombHdma_RightOfScreen(uint16 k, const uint8 *j) { // 0x888C3A
do {
- uint8 w = *RomPtr_88(j);
+ uint8 w = *j;
if ((uint8)power_bomb_explosion_x_pos_plus_0x100 < w) {
power_bomb_explosion_left_hdma[k] = power_bomb_explosion_x_pos_plus_0x100 - w;
power_bomb_explosion_right_hdma[k] = -1;
@@ -1144,7 +1156,6 @@ void CalculatePowerBombHdmaObjectTablePtrs(uint16 k) { // 0x888C62
hdma_object_table_pointers[(k >> 1) + 1] = R22_ + addr_kIndirectHdmaTable_PowerBombExplodeRight;
}
-#define g_byte_88A206 ((uint8*)RomPtr(0x88a206))
static uint16 k_out;
@@ -1243,48 +1254,41 @@ uint16 CalculatePowerBombHdmaScaled_RightOfScreen(uint16 k, uint16 j, uint8 mult
k_out = LOBYTE(k);
return v9 << 8 | v8;
}
-#define g_byte_88A286 ((uint8*)RomPtr(0x88a286))
-#define kPowerBombExplosionColors ((uint8*)RomPtr(0x888d85))
void HdmaobjPreInstr_PowerBombExplode_ExplosionYellow(uint16 k) { // 0x888DE9
- int16 v2;
+ uint16 v2;
if ((power_bomb_explosion_status & 0x8000u) == 0)
return;
-
- uint16 v8 = k;
CalculatePowerBombHdmaObjectTablePtrs(k);
- LOBYTE(R18_) = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A286[0]) >> 8;
- int kk = LOBYTE(R18_);
+ int kk = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A286[0]) >> 8;
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
- v2 = CalculatePowerBombHdmaScaled_OnScreen(kk, 96, HIBYTE(power_bomb_explosion_radius));
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
+ v2 = CalculatePowerBombHdmaScaled_OnScreen(kk, 96, GET_HIBYTE(power_bomb_explosion_radius));
else
- v2 = CalculatePowerBombHdmaScaled_RightOfScreen(kk, 96, HIBYTE(power_bomb_explosion_radius));
+ v2 = CalculatePowerBombHdmaScaled_RightOfScreen(kk, 96, GET_HIBYTE(power_bomb_explosion_radius));
} else {
- v2 = CalculatePowerBombHdmaScaled_LeftOfScreen(kk, 96, HIBYTE(power_bomb_explosion_radius));
+ v2 = CalculatePowerBombHdmaScaled_LeftOfScreen(kk, 96, GET_HIBYTE(power_bomb_explosion_radius));
}
int i = k_out;
do {
- power_bomb_explosion_left_hdma[(uint8)i] = v2;
- power_bomb_explosion_right_hdma[(uint8)i] = HIBYTE(v2);
- LOBYTE(i) = i - 1;
- } while ((i & 0x80) == 0);
- for (uint8 v3 = R18_ + 1; v3 != 0xc0; v3++) {
+ power_bomb_explosion_left_hdma[i] = v2;
+ power_bomb_explosion_right_hdma[i] = GET_HIBYTE(v2);
+ } while ((--i & 0x80) == 0);
+ for (int v3 = kk + 1; v3 != 0xc0; v3++) {
power_bomb_explosion_left_hdma[v3] = 255;
power_bomb_explosion_right_hdma[v3] = 0;
}
- LOBYTE(R18_) = HIBYTE(power_bomb_explosion_radius) >> 3;
- int pos = 3 * LOBYTE(R18_);
- reg_COLDATA[0] = kPowerBombExplosionColors[pos + 0] | 0x20;
- reg_COLDATA[1] = kPowerBombExplosionColors[pos + 1] | 0x40;
- reg_COLDATA[2] = kPowerBombExplosionColors[pos + 2] | 0x80;
+ int t = 3 * (GET_HIBYTE(power_bomb_explosion_radius) >> 3);
+ reg_COLDATA[0] = kPowerBombExplosionColors[t + 0] | 0x20;
+ reg_COLDATA[1] = kPowerBombExplosionColors[t + 1] | 0x40;
+ reg_COLDATA[2] = kPowerBombExplosionColors[t + 2] | 0x80;
power_bomb_explosion_radius += power_bomb_pre_explosion_radius_speed;
if (power_bomb_explosion_radius < 0x8600u) {
power_bomb_pre_explosion_radius_speed += kPowerBombExplosionRadiusAccel;
} else {
- int v7 = v8 >> 1;
+ int v7 = k >> 1;
hdma_object_instruction_timers[v7] = 1;
hdma_object_instruction_list_pointers[v7] += 2;
hdma_object_timers[v7] = 0;
@@ -1296,20 +1300,19 @@ void HdmaobjPreInstr_PowerBombExplode_ExplosionWhite(uint16 k) { // 0x888EB2
return;
CalculatePowerBombHdmaObjectTablePtrs(k);
- uint16 v1 = pre_scaled_power_bomb_explosion_shape_def_ptr;
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
+ const uint8 *v1 = RomPtr_88(pre_scaled_power_bomb_explosion_shape_def_ptr);
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
CalculatePowerBombHdma_OnScreen(0, v1);
else
CalculatePowerBombHdma_RightOfScreen(0, v1);
} else {
CalculatePowerBombHdma_LeftOfScreen(0, v1);
}
- LOBYTE(R18_) = HIBYTE(power_bomb_explosion_radius) >> 3;
- uint8 v2 = 3 * (HIBYTE(power_bomb_explosion_radius) >> 3);
- reg_COLDATA[0] = kPowerBombExplosionColors[v2] | 0x20;
- reg_COLDATA[1] = kPowerBombExplosionColors[v2 + 1] | 0x40;
- reg_COLDATA[2] = kPowerBombExplosionColors[v2 + 2] | 0x80;
+ int t = 3 * (GET_HIBYTE(power_bomb_explosion_radius) >> 3);
+ reg_COLDATA[0] = kPowerBombExplosionColors[t] | 0x20;
+ reg_COLDATA[1] = kPowerBombExplosionColors[t + 1] | 0x40;
+ reg_COLDATA[2] = kPowerBombExplosionColors[t + 2] | 0x80;
pre_scaled_power_bomb_explosion_shape_def_ptr += 192;
if (pre_scaled_power_bomb_explosion_shape_def_ptr == addr_byte_889F06) {
int v3 = k >> 1;
@@ -1343,16 +1346,13 @@ void CalculatePowerBombHdmaTablePointers(uint16 v0) { // 0x888F56
}
}
-#define g_byte_889079 ((uint8*)RomPtr(0x889079))
void HdmaobjPreInstr_PowerBombExplode_PreExplosionWhite(uint16 k) { // 0x8890DF
if ((power_bomb_explosion_status & 0x8000u) == 0)
return;
CalculatePowerBombHdmaTablePointers(k);
uint16 v1 = 96, v2;
- LOBYTE(R18_) = Mult8x8(HIBYTE(power_bomb_pre_explosion_flash_radius), g_byte_88A286[0]) >> 8;
-
- int kk = LOBYTE(R18_);
+ int kk = Mult8x8(HIBYTE(power_bomb_pre_explosion_flash_radius), g_byte_88A286[0]) >> 8;
if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
v2 = CalculatePowerBombHdmaScaled_OnScreen(kk, v1, HIBYTE(power_bomb_pre_explosion_flash_radius));
@@ -1367,15 +1367,14 @@ void HdmaobjPreInstr_PowerBombExplode_PreExplosionWhite(uint16 k) { // 0x8890DF
power_bomb_explosion_right_hdma[i] = HIBYTE(v2);
i--;
} while ((i & 0x80) == 0);
- for(uint8 v3 = R18_ + 1; v3 != 0xc0; v3++) {
+ for(uint8 v3 = kk + 1; v3 != 0xc0; v3++) {
power_bomb_explosion_left_hdma[v3] = 255;
power_bomb_explosion_right_hdma[v3] = 0;
}
- LOBYTE(R18_) = (HIBYTE(power_bomb_pre_explosion_flash_radius) >> 3) & 0xF;
- int pos = 3 * LOBYTE(R18_);
- reg_COLDATA[0] = g_byte_889079[pos + 0] | 0x20;
- reg_COLDATA[1] = g_byte_889079[pos + 1] | 0x40;
- reg_COLDATA[2] = g_byte_889079[pos + 2] | 0x80;
+ int t = (HIBYTE(power_bomb_pre_explosion_flash_radius) >> 3) & 0xF;
+ reg_COLDATA[0] = g_byte_889079[t * 3 + 0] | 0x20;
+ reg_COLDATA[1] = g_byte_889079[t * 3 + 1] | 0x40;
+ reg_COLDATA[2] = g_byte_889079[t * 3 + 2] | 0x80;
power_bomb_pre_explosion_flash_radius += power_bomb_pre_explosion_radius_speed;
if (power_bomb_pre_explosion_flash_radius < 0x9200) {
power_bomb_pre_explosion_radius_speed -= kPowerBombPreExplosionRadiusAccel;
@@ -1390,19 +1389,19 @@ void HdmaobjPreInstr_PowerBombExplode_PreExplosionYellow(uint16 k) { // 0x8891A
if ((power_bomb_explosion_status & 0x8000u) == 0)
return;
CalculatePowerBombHdmaTablePointers(k);
- uint16 v1 = pre_scaled_power_bomb_explosion_shape_def_ptr;
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
+ const uint8 *v1 = RomPtr_88(pre_scaled_power_bomb_explosion_shape_def_ptr);
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
CalculatePowerBombHdma_OnScreen(0, v1);
else
CalculatePowerBombHdma_RightOfScreen(0, v1);
} else {
CalculatePowerBombHdma_LeftOfScreen(0, v1);
}
- LOBYTE(R18_) = (HIBYTE(power_bomb_pre_explosion_flash_radius) >> 3) & 0xF;
- reg_COLDATA[0] = g_byte_889079[(uint8)(3 * R18_)] | 0x20;
- reg_COLDATA[1] = g_byte_889079[(uint8)(3 * R18_) + 1] | 0x40;
- reg_COLDATA[2] = g_byte_889079[(uint8)(3 * R18_) + 2] | 0x80;
+ int t = (GET_HIBYTE(power_bomb_pre_explosion_flash_radius) >> 3) & 0xF;
+ reg_COLDATA[0] = g_byte_889079[3 * t] | 0x20;
+ reg_COLDATA[1] = g_byte_889079[3 * t + 1] | 0x40;
+ reg_COLDATA[2] = g_byte_889079[3 * t + 2] | 0x80;
pre_scaled_power_bomb_explosion_shape_def_ptr += 192;
if (pre_scaled_power_bomb_explosion_shape_def_ptr == 0xA206) {
hdma_object_instruction_timers[k >> 1] = 1;
@@ -1498,19 +1497,19 @@ void CalculateCrystalFlashHdmaObjectTablePtrs(uint16 k) { // 0x88A42F
uint16 CalculateCrystalFlashHdmaDataTablesScaled_LeftOfScreen(uint16 k, uint16 j) { // 0x88A493
uint8 right, left;
do {
- LOBYTE(R20_) = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
- uint8 w = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
+ uint8 r20 = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
+ uint8 w = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
uint8 c = power_bomb_explosion_x_pos_plus_0x100;
left = (w + c >= 256) ? 0 : 255;
right = (w + c >= 256) ? w + c : 0;
while (1) {
power_bomb_explosion_left_hdma[(uint8)k] = left;
power_bomb_explosion_right_hdma[(uint8)k] = right;
- if ((uint8)k == (uint8)R20_)
+ if ((uint8)k == r20)
break;
- LOBYTE(k) = k - 1;
+ k--;
}
- LOBYTE(j) = j + 1;
+ j--;
} while ((j & 0x80) == 0);
k_out = LOBYTE(k);
return right << 8 | left;
@@ -1519,19 +1518,19 @@ uint16 CalculateCrystalFlashHdmaDataTablesScaled_LeftOfScreen(uint16 k, uint16 j
uint16 CalculateCrystalFlashHdmaDataTablesScaled_OnScreen(uint16 k, uint16 j) { // 0x88A4D1
uint8 right, left;
do {
- LOBYTE(R20_) = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
- uint8 w = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
+ uint8 r20 = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
+ uint8 w = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
uint8 c = power_bomb_explosion_x_pos_plus_0x100;
right = c + w < 256 ? c + w : 255;
left = c - w >= 0 ? c - w : 0;
while (1) {
power_bomb_explosion_left_hdma[(uint8)k] = left;
power_bomb_explosion_right_hdma[(uint8)k] = right;
- if ((uint8)k == (uint8)R20_)
+ if ((uint8)k == r20)
break;
- LOBYTE(k) = k - 1;
+ k--;
}
- LOBYTE(j) = j + 1;
+ j--;
} while ((j & 0x80) == 0);
k_out = LOBYTE(k);
return right << 8 | left;
@@ -1540,19 +1539,19 @@ uint16 CalculateCrystalFlashHdmaDataTablesScaled_OnScreen(uint16 k, uint16 j) {
uint16 CalculateCrystalFlashHdmaDataTablesScaled_RightOfScreen(uint16 k, uint16 j) { // 0x88A513
uint8 left, right;
do {
- LOBYTE(R20_) = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
- uint8 w = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
+ uint8 r20 = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j + 32]) >> 8;
+ uint8 w = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A206[(uint8)j]) >> 8;
uint8 c = power_bomb_explosion_x_pos_plus_0x100;
right = (c < w) ? 255 : 0;
left = (c < w) ? c - w : 255;
while (1) {
power_bomb_explosion_left_hdma[(uint8)k] = left;
power_bomb_explosion_right_hdma[(uint8)k] = right;
- if ((uint8)k == (uint8)R20_)
+ if ((uint8)k == r20)
break;
- LOBYTE(k) = k - 1;
+ k--;
}
- LOBYTE(j) = j + 1;
+ j--;
} while ((j & 0x80) == 0);
k_out = LOBYTE(k);
return right << 8 | left;
@@ -1563,11 +1562,10 @@ void HdmaobjPreInstr_CrystalFlash_Stage1_Explosion(uint16 k) { // 0x88A552
return;
CalculateCrystalFlashHdmaObjectTablePtrs(k);
- int kk = LOBYTE(R18_);
uint16 v2;
- LOBYTE(R18_) = Mult8x8(HIBYTE(power_bomb_explosion_radius), g_byte_88A286[0]) >> 8;
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
- if (HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
+ int kk = Mult8x8(GET_HIBYTE(power_bomb_explosion_radius), g_byte_88A286[0]) >> 8;
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100)) {
+ if (GET_HIBYTE(power_bomb_explosion_x_pos_plus_0x100) == 1)
v2 = CalculateCrystalFlashHdmaDataTablesScaled_OnScreen(kk, 96);
else
v2 = CalculateCrystalFlashHdmaDataTablesScaled_RightOfScreen(kk, 96);
@@ -1577,15 +1575,14 @@ void HdmaobjPreInstr_CrystalFlash_Stage1_Explosion(uint16 k) { // 0x88A552
int i = k_out;
do {
power_bomb_explosion_left_hdma[(uint8)i] = v2;
- power_bomb_explosion_right_hdma[(uint8)i] = HIBYTE(v2);
+ power_bomb_explosion_right_hdma[(uint8)i] = GET_HIBYTE(v2);
i--;
} while ((i & 0x80u) == 0);
- for (uint8 v3 = R18_ + 1; v3 != 0xc0; v3++) {
+ for (uint8 v3 = kk + 1; v3 != 0xc0; v3++) {
power_bomb_explosion_left_hdma[v3] = 255;
power_bomb_explosion_right_hdma[v3] = 0;
}
- LOBYTE(R18_) = HIBYTE(power_bomb_explosion_radius) >> 3;
- int pos = LOBYTE(R18_) * 3;
+ int pos = (HIBYTE(power_bomb_explosion_radius) >> 3) * 3;
reg_COLDATA[0] = kPowerBombExplosionColors[pos + 0] | 0x20;
reg_COLDATA[1] = kPowerBombExplosionColors[pos + 1] | 0x40;
reg_COLDATA[2] = kPowerBombExplosionColors[pos + 2] | 0x80;
@@ -1616,8 +1613,8 @@ void HdmaobjPreInstr_FxType22_BG3Yscroll(uint16 k) { // 0x88A643
DamageSamusInTopRow();
R0_.addr = addr_word_88A8E8;
R3_.addr = addr_word_88A8E8__plus__2;
- R6_ = addr_word_88A8E8__plus__4;
- *(uint16 *)((char *)&R8_ + 1) = addr_word_88A8E8__plus__6;
+ R6_.addr = addr_word_88A8E8__plus__4;
+ R9_.addr = addr_word_88A8E8__plus__6;
R24_ = 78;
Unreachable();
k = SetupSomeHdmaTablesBG3();
@@ -1628,7 +1625,6 @@ uint16 HdmaobjInstr_SetFlagB(uint16 k, uint16 j) { // 0x88A66C
hdma_object_B[k >> 1] = 1;
return j;
}
-#define g_word_88A938 ((uint16*)RomPtr(0x88a938))
static const int16 g_word_88C46E[16] = { // 0x88A673
0, 1, 1, 0, 0, -1, -1, 0,
0, 1, 1, 0, 0, -1, -1, 0,
@@ -1757,7 +1753,7 @@ uint16 SetupSomeHdmaTablesBG3(void) { // 0x88A81C
R18_ = layer1_y_pos + 32;
uint16 v2 = 0;
while ((int16)(v1 - *(uint16 *)&RomPtr_88(R0_.addr)[v2]) < 0
- || (int16)(v1 - *(uint16 *)&RomPtr_88(*(uint16 *)((char *)&R8_ + 1))[v2]) >= 0) {
+ || (int16)(v1 - *(uint16 *)&RomPtr_88(R9_.addr)[v2]) >= 0) {
v2 += 6;
if ((int16)(v2 - R24_) >= 0)
return v0;
@@ -1769,7 +1765,7 @@ uint16 SetupSomeHdmaTablesBG3(void) { // 0x88A81C
v3 = R18_ & 0x1F;
R22_ = v3;
*(uint16 *)&mother_brain_indirect_hdma[3] = *(uint16 *)&RomPtr_88(R3_.addr)[v2] - v3;
- *(uint16 *)&mother_brain_indirect_hdma[4] = R22_ + *(uint16 *)&RomPtr_88(R6_)[v2] - g_word_7E0598;
+ *(uint16 *)&mother_brain_indirect_hdma[4] = R22_ + *(uint16 *)&RomPtr_88(R6_.addr)[v2] - g_word_7E0598;
while (1) {
R20_ = mother_brain_indirect_hdma[v0];
R18_ += R20_;
@@ -1778,13 +1774,13 @@ uint16 SetupSomeHdmaTablesBG3(void) { // 0x88A81C
if (!sign16(g_word_7E0598 - 224))
break;
while ((int16)(R18_ - *(uint16 *)&RomPtr_88(R0_.addr)[v2]) < 0
- || (int16)(R18_ - *(uint16 *)&RomPtr_88(*(uint16 *)((char *)&R8_ + 1))[v2]) >= 0) {
+ || (int16)(R18_ - *(uint16 *)&RomPtr_88(R9_.addr)[v2]) >= 0) {
v2 += 6;
if ((int16)(v2 - R24_) >= 0)
return v0;
}
*(uint16 *)&mother_brain_indirect_hdma[v0] = *(uint16 *)&RomPtr_88(R3_.addr)[v2];
- *(uint16 *)&mother_brain_indirect_hdma[v0 + 1] = *(uint16 *)&RomPtr_88(R6_)[v2] - g_word_7E0598;
+ *(uint16 *)&mother_brain_indirect_hdma[v0 + 1] = *(uint16 *)&RomPtr_88(R6_.addr)[v2] - g_word_7E0598;
}
return v0;
}
@@ -1803,7 +1799,6 @@ void HdmaobjPreInstr_SkyLandBG2Xscroll2(uint16 k) { // 0x88ADBA
if (!time_is_frozen_flag)
HdmaobjPreInstr_SkyLandBG2XscrollInner(k);
}
-#define kHdmaScrollEntrys ((HdmaScrollEntry*)RomPtr(0x88aec1))
void HdmaobjPreInstr_SkyLandBG2XscrollInner(uint16 k) { // 0x88ADC2
uint16 i;
@@ -1812,7 +1807,7 @@ void HdmaobjPreInstr_SkyLandBG2XscrollInner(uint16 k) { // 0x88ADC2
do {
uint16 scroll_subspeed = kHdmaScrollEntrys[v1].scroll_subspeed;
uint8 *v3 = &g_ram[kHdmaScrollEntrys[v1].hdma_data_table_entry];
- bool v4 = __CFADD__uint16(*(uint16 *)v3, scroll_subspeed);
+ bool v4 = __CFADD__uint16(GET_WORD(v3), scroll_subspeed);
*(uint16 *)v3 += scroll_subspeed;
*((uint16 *)v3 + 1) += v4 + kHdmaScrollEntrys[v1++].scroll_speed;
} while (sign16(v1 * 8 - 184));
@@ -1889,10 +1884,10 @@ void RoomMainAsm_ScrollingSky(void) { // 0x88AFA3
int v2 = 8 * (uint8)tt;
int y1 = (uint8)(tt >> 8);
int y2 = (uint8)((tt >> 8) + 1);
- VoidP v3 = *(uint16 *)IndirPtr(&R0_, 2 * y1) + v2;
+ VoidP v3 = IndirReadWord(R0_, 2 * y1) + v2;
v1[0].src.addr = v3;
v1[1].src.addr = v3 + 64;
- VoidP v5 = *(uint16 *)IndirPtr(&R0_, 2 * y2) + v2;
+ VoidP v5 = IndirReadWord(R0_, 2 * y2) + v2;
v1[2].src.addr = v5;
v1[3].src.addr = v5 + 64;
v1[0].src.bank = 0x8a;
@@ -2120,7 +2115,6 @@ void HdmaobjPreInstr_LavaAcidBG3YScroll(uint16 k) { // 0x88B3B0
int16 v2;
int16 v3;
int16 v4;
- uint16 v7;
int16 v8;
fx_layer_blending_config_c = fx_layer_blending_config_b;
@@ -2147,9 +2141,7 @@ LABEL_8:
QueueSfx2_Max6(kLavaSoundEffects[random_number & 7]);
}
}
- LOBYTE(v7) = HIBYTE(random_number);
- HIBYTE(v7) = random_number;
- random_number = v7;
+ random_number = swap16(random_number);
if ((lava_acid_y_pos & 0x8000u) == 0) {
v8 = lava_acid_y_pos - layer1_y_pos + 256;
if (v8 < 0) {
@@ -2166,7 +2158,7 @@ LABEL_17:
goto LABEL_17;
}
if ((uint16)v3 < 0x100u) {
- v4 = (uint8)~(uint8)v3;
+ v4 = (uint8)~v3;
goto LABEL_8;
}
}
@@ -2203,7 +2195,6 @@ void Handle_LavaAcidBG2YScroll_Func1(uint16 v0) { // 0x88B51D
v1 -= 2;
} while ((v1 & 0x80) == 0);
}
-#define g_word_88B589 ((uint16*)RomPtr(0x88b589))
void Handle_LavaAcidBG2YScroll_Func2(uint16 v0) { // 0x88B53B
WriteReg((SnesRegs)(*((uint8 *)hdma_object_bank_slot + v0) + 17153), 0xF);
int v1 = v0 >> 1;
@@ -2221,7 +2212,6 @@ void Handle_LavaAcidBG2YScroll_Func2(uint16 v0) { // 0x88B53B
--R18_;
} while ((R18_ & 0x8000u) == 0);
}
-#define g_word_88B60A ((uint16*)RomPtr(0x88b60a))
void Handle_LavaAcidBG2YScroll_Func3(uint16 v0) { // 0x88B5A9
WriteReg((SnesRegs)(*((uint8 *)hdma_object_bank_slot + v0) + BBAD0), 0x10);
int v1 = v0 >> 1;
@@ -2447,7 +2437,6 @@ void FxTypeFunc_A_Rain(void) { // 0x88D950
SpawnAnimtiles(addr_kAnimtiles_Rain);
}
-#define g_word_88D992 ((uint16*)RomPtr(0x88d992))
uint16 HdmaobjInstr_1938_RandomNumber(uint16 k, uint16 j) { // 0x88D981
hdma_object_D[k >> 1] = g_word_88D992[(uint16)((random_number >> 1) & 6) >> 1];
@@ -2838,12 +2827,11 @@ uint8 VariaSuitPickup_1(void) { // 0x88E0D7
hdma_table_1[i >> 1] = suit_pickup_light_beam_pos;
if (sign16((uint8)suit_pickup_light_beam_pos - 97)) {
++substate;
- suit_pickup_light_beam_pos = -31636;
+ suit_pickup_light_beam_pos = 0x846C;
}
return 1;
}
-#define g_byte_88E3C9 ((uint8*)RomPtr(0x88e3c9))
uint8 VariaSuitPickup_2_LightBeamWidens(void) { // 0x88E113
char v1;
@@ -2954,7 +2942,7 @@ uint8 GravitySuitPickup_6(void) { // 0x88E25F
reg_COLDATA[2] = 0x80;
reg_COLDATA[1] = 64;
reg_COLDATA[0] = 32;
- mov24((LongPtr *)&demo_enable, 0x980001);
+ mov24(&hdma_ptr_1, 0x980001);
*(uint16 *)((char *)&demo_num_input_frames + 1) = 0;
demo_input_prev = 0;
demo_input_prev_new = 0;
@@ -3119,10 +3107,10 @@ void HdmaobjPreInstr_E567(uint16 v0) { // 0x88E567
if (enemy_data[1].parameter_1) {
if ((enemy_data[1].parameter_1 & 1) != 0) {
R28_ = 4;
- g_word_7E001E = 128;
+ R30_ = 128;
} else {
R28_ = 8;
- g_word_7E001E = 64;
+ R30_ = 64;
}
int v2 = v0 >> 1;
if (hdma_object_B[v2]-- == 1) {
@@ -3161,7 +3149,7 @@ void HdmaobjPreInstr_E567(uint16 v0) { // 0x88E567
*(uint16 *)((char *)&g_word_7E9100 + v11) = R18_ + reg_BG2HOFS;
}
v4 = v8 + 2;
- } while ((int16)(v4 - g_word_7E001E) < 0);
+ } while ((int16)(v4 - R30_) < 0);
if ((enemy_data[1].parameter_1 & 1) != 0) {
for (int i = 126; i >= 0; i -= 2)
*(uint16 *)((char *)&g_word_7E9180 + i) = reg_BG2HOFS + reg_BG2HOFS - *(uint16 *)((char *)&g_word_7E9100 + i);
@@ -3211,7 +3199,6 @@ void HdmaobjPreInstr_E7BC(uint16 k) { // 0x88E7BC
}
}
-#define g_word_88E833 ((uint16*)RomPtr(0x88e833))
void sub_88E7ED(void) { // 0x88E7ED
uint16 v0 = g_word_88E833[hdma_object_A[0] >> 1];
@@ -3305,7 +3292,6 @@ void HdmaobjPreInstr_E9E6(uint16 k) { // 0x88E9E6
sub_88E987(k);
}
-#define g_byte_88EA8B ((uint8*)RomPtr(0x88ea8b))
void HdmaobjPreInstr_EA3C(uint16 k) { // 0x88EA3C
fx_layer_blending_config_c = 16;
@@ -3434,7 +3420,7 @@ void HdmaobjPreInstr_ECB6(uint16 k) { // 0x88ECB6
if (g_word_7E0D9C) {
R28_ = 4;
- g_word_7E001E = 128;
+ R30_ = 128;
R18_ = 2 * loop_counter_transfer_enemies_to_vram;
int v3 = k >> 1;
hdma_object_A[v3] = (2 * loop_counter_transfer_enemies_to_vram + hdma_object_A[v3]) & 0x1FF;
@@ -3469,7 +3455,7 @@ void HdmaobjPreInstr_ECB6(uint16 k) { // 0x88ECB6
hdma_table_1[v10 >> 1] = R18_ + reg_BG3HOFS;
}
v4 = v8 + 2;
- } while ((int16)(v4 - g_word_7E001E) < 0);
+ } while ((int16)(v4 - R30_) < 0);
for (int i = 126; i >= 0; i -= 2)
hdma_table_1[(i >> 1) + 64] = reg_BG3HOFS + reg_BG3HOFS - hdma_table_1[i >> 1];
} else {
@@ -3477,4 +3463,4 @@ void HdmaobjPreInstr_ECB6(uint16 k) { // 0x88ECB6
hdma_object_instruction_list_pointers[v2] += 2;
hdma_object_instruction_timers[v2] = 1;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_89.c b/src/sm_89.c
index 295cb77..9a846d7 100644
--- a/src/sm_89.c
+++ b/src/sm_89.c
@@ -4,7 +4,15 @@
#include "variables.h"
#include "funcs.h"
-#define g_word_89AA02 ((uint16*)RomPtr(0x89aa02))
+
+#define g_word_89AA02 ((uint16*)RomFixedPtr(0x89aa02))
+#define kFxTypeTilemapPtrs ((uint16*)RomFixedPtr(0x83abf0))
+#define kAreaPalFxListPointers ((uint16*)RomFixedPtr(0x83ac46))
+#define kAreaAnimtilesListPtrs ((uint16*)RomFixedPtr(0x83ac56))
+#define g_word_89AD5F ((uint16*)RomFixedPtr(0x89ad5f))
+
+
+
void LoadFxEntry(uint16 v0) { // 0x89AB02
FxDef *FxDef;
@@ -30,7 +38,6 @@ void LoadFxEntry(uint16 v0) { // 0x89AB02
void nullsub_106(void) {}
-#define kFxTypeTilemapPtrs ((uint16*)RomPtr(0x83abf0))
static Func_V *const kFxTypeFuncPtrs[23] = { // 0x89AB82
nullsub_106,
FxTypeFunc_2_Lava,
@@ -56,8 +63,6 @@ static Func_V *const kFxTypeFuncPtrs[23] = { // 0x89AB82
FxTypeFunc_CeresElevator,
FxTypeFunc_2C_Haze,
};
-#define kAreaPalFxListPointers ((uint16*)RomPtr(0x83ac46))
-#define kAreaAnimtilesListPtrs ((uint16*)RomPtr(0x83ac56))
void LoadFXHeader(void) {
int i;
FxDef *v6;
@@ -105,7 +110,7 @@ void LoadFXHeader(void) {
v6 = get_FxDef(current_fx_entry_ptr);
uint16 v7 = v6->type;
if (v6->type) {
- *(uint16 *)((char *)&R18_ + 1) = -30720;
+ R19_ = -30720;
kFxTypeFuncPtrs[v7 >> 1]();
}
v8 = get_FxDef(current_fx_entry_ptr);
@@ -118,7 +123,7 @@ void LoadFXHeader(void) {
current_fx_palette_fx_bitset >>= 1;
if (!v10)
break;
- uint8 *v11 = RomPtr_83(current_region_animated_palette_fx);
+ const uint8 *v11 = RomPtr_83(current_region_animated_palette_fx);
SpawnPalfxObject(*(uint16 *)&v11[j]);
j += 2;
}
@@ -134,7 +139,7 @@ void LoadFXHeader(void) {
current_fx_palette_fx_bitset >>= 1;
if (!v10)
break;
- uint8 *v14 = RomPtr_83(current_region_animated_palette_fx);
+ const uint8 *v14 = RomPtr_83(current_region_animated_palette_fx);
SpawnAnimtiles(*(uint16 *)&v14[k]);
k += 2;
}
@@ -142,7 +147,6 @@ void LoadFXHeader(void) {
}
}
}
-#define g_word_89AD5F ((uint16*)RomPtr(0x89ad5f))
void RoomCode_CeresElevatorShaft(void) { // 0x89ACC3
int16 v1;
@@ -179,4 +183,4 @@ void RoomCode_CeresElevatorShaft(void) { // 0x89ACC3
*(uint16 *)room_main_asm_variables = v1;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_8b.c b/src/sm_8b.c
index f7d7496..049f581 100644
--- a/src/sm_8b.c
+++ b/src/sm_8b.c
@@ -4,32 +4,37 @@
#include "funcs.h"
#include "variables.h"
-#define kPalettes_Intro ((uint16*)RomPtr(0x8ce3e9))
-#define kPalettes_Intro2 ((uint16*)RomPtr(0x8ce5e9))
-#define kPalettes_Intro4 ((uint16*)RomPtr(0x8ce7e9))
-#define kPalettes_Intro5 ((uint16*)RomPtr(0x8ce9e9))
-#define kPalettes_Intro6 ((uint16*)RomPtr(0x8cebe9))
-#define kPalettes_Intro3 ((uint16*)RomPtr(0x8cede9))
-#define g_word_8CD81B ((uint16*)RomPtr(0x8cd81b))
-#define g_word_8BA72B ((uint16*)RomPtr(0x8ba72b))
-#define kLevelData_MotherBrainRoomFromCutscene ((uint16*)RomPtr(0x8cbec3))
-#define kLevelData_RoomWithBabyMetroidHatching ((uint16*)RomPtr(0x8cc083))
-#define g_word_8CDC9B ((uint16*)RomPtr(0x8cdc9b))
-#define g_word_8CDEDB ((uint16*)RomPtr(0x8cdedb))
-#define g_word_8CEFE9 ((uint16*)RomPtr(0x8cefe9))
-#define g_off_8BE70D ((uint16*)RomPtr(0x8be70d))
-#define g_word_8BE717 ((uint16*)RomPtr(0x8be717))
-#define g_word_8BE721 ((uint16*)RomPtr(0x8be721))
-#define g_word_8BE737 ((uint16*)RomPtr(0x8be737))
-#define g_word_8BE741 ((uint16*)RomPtr(0x8be741))
-#define g_word_8BE9CF ((uint16*)RomPtr(0x8be9cf))
-#define kCinematicFunction_Intro_Func142_Tab0 ((uint16*)RomPtr(0x8be45a))
-#define kCinematicFunction_Intro_Func144_Tab0 ((uint16*)RomPtr(0x8be5e7))
-#define g_word_8CDF5B ((uint16*)RomPtr(0x8cdf5b))
-#define g_word_8BE9A7 ((uint16*)RomPtr(0x8be9a7))
-#define g_word_8BF6B8 ((uint16*)RomPtr(0x8bf6b8))
-#define g_word_8BF6D8 ((uint16*)RomPtr(0x8bf6d8))
-#define g_word_8CE1E9 ((uint16*)RomPtr(0x8ce1e9))
+
+#define kPalettes_Intro ((uint16*)RomFixedPtr(0x8ce3e9))
+#define kPalettes_Intro2 ((uint16*)RomFixedPtr(0x8ce5e9))
+#define kPalettes_Intro4 ((uint16*)RomFixedPtr(0x8ce7e9))
+#define kPalettes_Intro5 ((uint16*)RomFixedPtr(0x8ce9e9))
+#define kPalettes_Intro6 ((uint16*)RomFixedPtr(0x8cebe9))
+#define kPalettes_Intro3 ((uint16*)RomFixedPtr(0x8cede9))
+#define g_word_8CD81B ((uint16*)RomFixedPtr(0x8cd81b))
+#define g_word_8BA72B ((uint16*)RomFixedPtr(0x8ba72b))
+#define kLevelData_MotherBrainRoomFromCutscene ((uint16*)RomFixedPtr(0x8cbec3))
+#define kLevelData_RoomWithBabyMetroidHatching ((uint16*)RomFixedPtr(0x8cc083))
+#define g_word_8CDC9B ((uint16*)RomFixedPtr(0x8cdc9b))
+#define g_word_8CDEDB ((uint16*)RomFixedPtr(0x8cdedb))
+#define g_word_8CEFE9 ((uint16*)RomFixedPtr(0x8cefe9))
+#define g_off_8BE70D ((uint16*)RomFixedPtr(0x8be70d))
+#define g_word_8BE717 ((uint16*)RomFixedPtr(0x8be717))
+#define g_word_8BE721 ((uint16*)RomFixedPtr(0x8be721))
+#define g_word_8BE737 ((uint16*)RomFixedPtr(0x8be737))
+#define g_word_8BE741 ((uint16*)RomFixedPtr(0x8be741))
+#define g_word_8BE9CF ((uint16*)RomFixedPtr(0x8be9cf))
+#define kCinematicFunction_Intro_Func142_Tab0 ((uint16*)RomFixedPtr(0x8be45a))
+#define kCinematicFunction_Intro_Func144_Tab0 ((uint16*)RomFixedPtr(0x8be5e7))
+#define g_word_8CDF5B ((uint16*)RomFixedPtr(0x8cdf5b))
+#define g_word_8BE9A7 ((uint16*)RomFixedPtr(0x8be9a7))
+#define g_word_8BF6B8 ((uint16*)RomFixedPtr(0x8bf6b8))
+#define g_word_8BF6D8 ((uint16*)RomFixedPtr(0x8bf6d8))
+#define g_word_8CE1E9 ((uint16*)RomFixedPtr(0x8ce1e9))
+#define g_off_8CBC5D ((uint16*)RomFixedPtr(0x8cbc5d))
+
+
+
void SetupPpuForTitleSequence(void) { // 0x8B8000
WriteReg(INIDISP, 0x80);
@@ -423,21 +428,14 @@ void HandleMode7TransformationNoRotation(void) { // 0x8B8518
}
void HandleMode7TransformationMatrix(void) { // 0x8B8532
- uint16 v0;
- uint16 v1;
-
- R38 = kSinCosTable8bit_Sext[((uint16)(2 * (uint8)(cinematic_var5 + 64)) >> 1) + 64];
+ R38 = kSinCosTable8bit_Sext[((uint8)(cinematic_var5 + 64)) + 64];
R40 = cinematic_var6;
Smult16x16Shr16();
- HIBYTE(v0) = R42;
- LOBYTE(v0) = HIBYTE(R44);
- reg_M7A = v0;
- reg_M7D = v0;
- R38 = kSinCosTable8bit_Sext[((uint16)(2 * (uint8)cinematic_var5) >> 1) + 64];
+ reg_M7D = reg_M7A = PAIR16(R42, HIBYTE(R44));
+ R38 = kSinCosTable8bit_Sext[((uint8)cinematic_var5) + 64];
R40 = cinematic_var6;
Smult16x16Shr16();
- HIBYTE(v1) = R42;
- LOBYTE(v1) = HIBYTE(R44);
+ uint16 v1 = PAIR16(R42, HIBYTE(R44));
reg_M7B = v1;
reg_M7C = -v1;
reg_BG1HOFS = cinematic_var8;
@@ -561,7 +559,7 @@ void ProcessCinematicBgObject_DrawChar(uint16 k, uint16 j) { // 0x8B884D
cinematicbg_var1 = cinematicbg_var1 == 0;
SpawnTextGlowObject(j);
- uint8 *v2 = RomPtr_8C(cinematicbg_instr_ptr[k >> 1]);
+ const uint8 *v2 = RomPtr_8C(cinematicbg_instr_ptr[k >> 1]);
if (*((int16 *)v2 + 3) < 0) {
cinematicbg_arr7[15] = 8;
v3 = 8 * (v2[3] + 2);
@@ -570,7 +568,7 @@ void ProcessCinematicBgObject_DrawChar(uint16 k, uint16 j) { // 0x8B884D
v3 = 8 * v2[9];
}
cinematicbg_arr8[15] = v3 - 8;
- if (*((uint16 *)v2 + 2) != 0xD67D && cinematicbg_var1)
+ if (GET_WORD(v2 + 4) != 0xD67D && cinematicbg_var1)
QueueSfx3_Max6(0xDu);
ProcessCinematicBgObject_DrawToTextTilemap(0x1E, j);
}
@@ -579,7 +577,7 @@ void ProcessCinematicBgObject_DrawToTextTilemap(uint16 k, uint16 j) { // 0x8B88
uint16 jorg = j;
uint16 TilemapOffsetForTile = CinematicGetTilemapOffsetForTile();
- uint8 *v3 = RomPtr_8C(j);
+ const uint8 *v3 = RomPtr_8C(j);
R18_ = v3[2];
R24_ = R18_;
R20_ = v3[3];
@@ -605,7 +603,7 @@ void ProcessCinematicBgObject_DrawToBgTilemap(uint16 k, uint16 j) { // 0x8B88FD
uint16 jorg = j;
uint16 TilemapOffsetForTile = CinematicGetTilemapOffsetForTile();
- uint8 *v3 = RomPtr_8C(j);
+ const uint8 *v3 = RomPtr_8C(j);
R18_ = v3[2];
R24_ = R18_;
R20_ = v3[3];
@@ -632,7 +630,7 @@ uint16 CinematicGetTilemapOffsetForTile(void) { // 0x8B8943
void ProcessCinematicBgObject_Unk1(uint16 k, uint16 j) { // 0x8B896B
Mult0x80Add();
- uint8 *v2 = RomPtr_8C(j);
+ const uint8 *v2 = RomPtr_8C(j);
R18_ = v2[2];
R20_ = v2[3];
uint16 v3 = j + 4;
@@ -654,7 +652,7 @@ void ProcessCinematicBgObject_Unk1(uint16 k, uint16 j) { // 0x8B896B
void ProcessCinematicBgObject_Unk2(uint16 k, uint16 j) { // 0x8B89CF
Mult0x80Add();
- uint8 *v2 = RomPtr_8C(j);
+ const uint8 *v2 = RomPtr_8C(j);
R18_ = v2[2];
R20_ = v2[3];
uint16 v3 = j + 4;
@@ -680,118 +678,77 @@ void Mult0x80Add(void) { // 0x8B8A2C
}
void Samus_CalcPos_Mode7(void) { // 0x8B8A52
- uint16 v0;
- int16 v1;
- uint16 v2;
- int16 v3;
-
R34 = samus_x_pos - reg_M7X;
R36 = reg_M7Y - samus_y_pos;
R38 = samus_x_pos - reg_M7X;
R40 = reg_M7A;
Smult16x16Shr16();
- HIBYTE(v0) = R42;
- LOBYTE(v0) = HIBYTE(R44);
- R26_ = v0;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7B;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v1) = R42;
- LOBYTE(v1) = HIBYTE(R44);
- R26_ += v1;
+ R26_ += PAIR16(R42, HIBYTE(R44));
samus_x_pos = R26_ + reg_M7X;
R38 = reg_M7C;
R40 = R34;
Smult16x16Shr16();
- HIBYTE(v2) = R42;
- LOBYTE(v2) = HIBYTE(R44);
- R26_ = v2;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7A;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v3) = R42;
- LOBYTE(v3) = HIBYTE(R44);
- R26_ += v3;
+ R26_ += PAIR16(R42, HIBYTE(R44));
samus_y_pos = reg_M7Y - R26_;
}
void CalcExplosion_Mode7(uint16 k) { // 0x8B8AD9
- uint16 v2;
- int16 v3;
- uint16 v4;
- int16 v5;
-
int v1 = k >> 1;
R34 = projectile_x_pos[v1] - reg_M7X;
R36 = reg_M7Y - projectile_y_pos[v1];
R38 = R34;
R40 = reg_M7A;
Smult16x16Shr16();
- HIBYTE(v2) = R42;
- LOBYTE(v2) = HIBYTE(R44);
- R26_ = v2;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7B;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v3) = R42;
- LOBYTE(v3) = HIBYTE(R44);
- R26_ += v3;
+ R26_ += PAIR16(R42, HIBYTE(R44));
R20_ = R26_ + reg_M7X - layer1_x_pos;
R38 = reg_M7C;
R40 = R34;
Smult16x16Shr16();
- HIBYTE(v4) = R42;
- LOBYTE(v4) = HIBYTE(R44);
- R26_ = v4;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7A;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v5) = R42;
- LOBYTE(v5) = HIBYTE(R44);
- R26_ += v5;
+ R26_ += PAIR16(R42, HIBYTE(R44));
R18_ = reg_M7Y - R26_ - layer1_y_pos;
}
void CalcCeresSteamPos_Mode7(void) { // 0x8B8B66
- uint16 v0;
- int16 v1;
- uint16 v2;
- int16 v3;
-
R34 = R18_ - reg_M7X;
R36 = reg_M7Y - R20_;
R38 = R18_ - reg_M7X;
R40 = reg_M7A;
Smult16x16Shr16();
- HIBYTE(v0) = R42;
- LOBYTE(v0) = HIBYTE(R44);
- R26_ = v0;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7B;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v1) = R42;
- LOBYTE(v1) = HIBYTE(R44);
- R26_ += v1;
+ R26_ += PAIR16(R42, HIBYTE(R44));
R18_ = R26_ + reg_M7X;
R38 = reg_M7C;
R40 = R34;
Smult16x16Shr16();
- HIBYTE(v2) = R42;
- LOBYTE(v2) = HIBYTE(R44);
- R26_ = v2;
+ R26_ = PAIR16(R42, HIBYTE(R44));
R38 = reg_M7A;
R40 = R36;
Smult16x16Shr16();
- HIBYTE(v3) = R42;
- LOBYTE(v3) = HIBYTE(R44);
- R26_ += v3;
+ R26_ += PAIR16(R42, HIBYTE(R44));
R20_ = reg_M7Y - R26_;
}
void CopyPalettesToFadingPalettes(void) { // 0x8B8BE9
- int16 v0;
-
- v0 = 256;
+ int v0 = 256;
uint16 v1 = 0;
do {
tilemap_stuff[(v1 >> 1) + 256] = palette_buffer[v1 >> 1];
@@ -801,35 +758,22 @@ void CopyPalettesToFadingPalettes(void) { // 0x8B8BE9
}
void DecomposePaletteDataForFading(void) { // 0x8B8C09
- int16 v1;
- uint16 v3;
- char v5; // t2
- char v7; // tt
-
uint16 v0 = 0;
- v1 = 256;
+ int v1 = 256;
do {
int v2 = v0 >> 1;
R18_ = tilemap_stuff[v2 + 256];
- LOBYTE(v3) = 0;
- HIBYTE(v3) = R18_ & 0x1F;
- tilemap_stuff[v2 + 512] = v3;
- tilemap_stuff[v2 + 1280] = 8 * HIBYTE(v3);
- uint16 v4 = 8 * (R18_ & 0x3E0);
- tilemap_stuff[v2 + 768] = v4;
- v5 = v4;
- LOBYTE(v4) = HIBYTE(v4);
- HIBYTE(v4) = v5;
- tilemap_stuff[v2 + 1536] = 8 * v4;
- uint16 v6 = (uint16)(R18_ & 0x7C00) >> 2;
- tilemap_stuff[v2 + 1024] = v6;
- v7 = v6;
- LOBYTE(v6) = HIBYTE(v6);
- HIBYTE(v6) = v7;
- tilemap_stuff[v2 + 1792] = 8 * v6;
+ int v3 = (R18_ & 0x1F);
+ tilemap_stuff[v2 + 512] = v3 << 8;
+ tilemap_stuff[v2 + 1280] = v3 << 3;
+ int v4 = (R18_ & 0x3E0) >> 5;
+ tilemap_stuff[v2 + 768] = v4 << 8;
+ tilemap_stuff[v2 + 1536] = v4 << 3;
+ int v6 = (R18_ & 0x7C00) >> 10;
+ tilemap_stuff[v2 + 1024] = v6 << 8;
+ tilemap_stuff[v2 + 1792] = v6 << 3;
v0 += 2;
- --v1;
- } while (v1);
+ } while (--v1);
}
void ClearYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8C5E
@@ -840,8 +784,7 @@ void ClearYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8C5E
tilemap_stuff[v2 + 768] = 0;
tilemap_stuff[v2 + 1024] = 0;
k += 2;
- --j;
- } while (j);
+ } while (--j);
}
void FadeOutYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8C83
@@ -851,8 +794,7 @@ void FadeOutYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8C83
tilemap_stuff[v2 + 768] -= tilemap_stuff[v2 + 1536];
tilemap_stuff[v2 + 1024] -= tilemap_stuff[v2 + 1792];
k += 2;
- --j;
- } while (j);
+ } while (--j);
}
void FadeInYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8CB2
@@ -862,40 +804,34 @@ void FadeInYColorsFromIndexX(uint16 k, uint16 j) { // 0x8B8CB2
tilemap_stuff[v2 + 768] = (tilemap_stuff[v2 + 1536] + tilemap_stuff[v2 + 768]) & 0x1FFF;
tilemap_stuff[v2 + 1024] = (tilemap_stuff[v2 + 1792] + tilemap_stuff[v2 + 1024]) & 0x1FFF;
k += 2;
- --j;
- } while (j);
+ } while (--j);
}
void ComposeFadingPalettes(void) { // 0x8B8CEA
- int16 v1;
-
uint16 v0 = 0;
- v1 = 256;
+ int v1 = 256;
do {
int v2 = v0 >> 1;
- R18_ = HIBYTE(tilemap_stuff[v2 + 512]) & 0x1F;
- R18_ |= (tilemap_stuff[v2 + 768] >> 3) & 0x3E0;
- uint16 v3 = R18_ | (4 * tilemap_stuff[v2 + 1024]) & 0x7C00;
+ int R18 = HIBYTE(tilemap_stuff[v2 + 512]) & 0x1F;
+ R18 |= (tilemap_stuff[v2 + 768] >> 3) & 0x3E0;
+ uint16 v3 = R18 | (tilemap_stuff[v2 + 1024] << 2) & 0x7C00;
tilemap_stuff[v2] = v3;
palette_buffer[v2] = v3;
v0 += 2;
- --v1;
- } while (v1);
+ } while (--v1);
}
void CinematicFunction_Intro_Func20(uint16 j) { // 0x8B8D23
uint16 *tt = (uint16 *)RomPtr_8B(j);
uint16 v2 = tt[0];
- R18_ = tt[1];
+ int R18 = tt[1];
uint16 *dst = ram4000.intro_japanese_text_tiles;
do {
- R22_ = tt[2];
- memcpy(dst + (v2 >> 1), (uint16 *)RomPtr_7F(R22_ + 0xa000), 16);
- R22_ = tt[3];
- memcpy(dst + ((v2 + 768) >> 1), (uint16 *)RomPtr_7F(R22_ + 0xa000), 16);
+ memcpy(dst + (v2 >> 1), (uint16 *)&g_ram[tt[2] + 0x1a000], 16);
+ memcpy(dst + ((v2 + 768) >> 1), (uint16 *)&g_ram[tt[3] + 0x1a000], 16);
v2 += 16;
tt += 2;
- } while (--R18_);
+ } while (--R18);
}
void TransferJapaneseTextTilesToVram(void) { // 0x8B8DE6
@@ -1142,11 +1078,7 @@ CoroutineRet InitializeIoDisplayLogo_Async(void) { // 0x8B9146
reg_COLDATA[2] = 0x80;
WriteReg(SETINI, 0);
reg_SETINI = 0;
- mov24(&decompress_src, 0x9580D8);
- {
- static const LongPtr unk_8B92A1 = LONGPTR(0x7f5000);
- DecompressToMem_IpArg(&unk_8B92A1);
- }
+ DecompressToMem(0x9580D8, g_ram + 0x15000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0x60);
WriteReg(VMAIN, 0x80);
@@ -1304,16 +1236,16 @@ void CallCinematicSpriteObjectSetup(uint32 ea, uint16 j) {
}
uint8 SpawnCimenaticSpriteObjectInner(uint16 k, uint16 j) { // 0x8B93AC
- uint8 *v2 = RomPtr_8B(k);
+ const uint8 *v2 = RomPtr_8B(k);
int v3 = j >> 1;
- cinematicspr_preinstr_func[v3] = *((uint16 *)v2 + 1);
- cinematicspr_instr_ptr[v3] = *((uint16 *)v2 + 2);
+ cinematicspr_preinstr_func[v3] = GET_WORD(v2 + 2);
+ cinematicspr_instr_ptr[v3] = GET_WORD(v2 + 4);
cinematicspr_instr_timer[v3] = 1;
cinematicspr_whattodraw[v3] = 0;
cinematicspr_goto_timer[v3] = 0;
cinematicspr_arr6[v3] = 0;
cinematicspr_arr7[v3] = 0;
- CallCinematicSpriteObjectSetup(*(uint16 *)v2 | 0x8B0000, j);
+ CallCinematicSpriteObjectSetup(GET_WORD(v2) | 0x8B0000, j);
return 0;
}
@@ -1460,7 +1392,7 @@ void ProcessCinematicSpriteInstructionList(uint16 k) { // 0x8B9409
if (cinematicspr_instr_timer[v2]-- == 1) {
uint16 v4 = cinematicspr_instr_ptr[v2], v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_8B(v4);
+ const uint16 *v5 = (const uint16 *)RomPtr_8B(v4);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -1629,7 +1561,7 @@ void ProcessMode7ObjectInstructions(uint16 k) { // 0x8B9537
if (mode7_obj_instr_timer[v2]-- == 1) {
uint16 v4 = mode7_obj_instr_ptr[v2], v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_8B(v4);
+ const uint16 *v5 = (const uint16 *)RomPtr_8B(v4);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -1639,8 +1571,8 @@ void ProcessMode7ObjectInstructions(uint16 k) { // 0x8B9537
return;
}
mode7_obj_instr_timer[v1 >> 1] = v6;
- uint8 *v7 = RomPtr_8B(v4);
- QueueMode7Transfers(0x8b, *((uint16 *)v7 + 1));
+ const uint8 *v7 = RomPtr_8B(v4);
+ QueueMode7Transfers(0x8b, GET_WORD(v7 + 2));
mode7_obj_instr_ptr[v1 >> 1] = v4 + 4;
}
}
@@ -1721,14 +1653,14 @@ uint8 SpawnCinematicBgObject(uint16 j, uint16 a) { // 0x8B95F0
if ((v3 & 0x8000u) != 0)
return 1;
}
- uint8 *v5 = RomPtr_8B(j);
+ const uint8 *v5 = RomPtr_8B(j);
int v6 = v3 >> 1;
- cinematicbg_preinstr[v6] = *((uint16 *)v5 + 1);
- cinematicbg_instr_ptr[v6] = *((uint16 *)v5 + 2);
+ cinematicbg_preinstr[v6] = GET_WORD(v5 + 2);
+ cinematicbg_instr_ptr[v6] = GET_WORD(v5 + 4);
cinematicbg_instr_timer[v6] = 1;
cinematicbg_arr1[v6] = 0;
cinematicbg_arr6[v6] = 0;
- CallCinematicBgObjectSetup(*(uint16 *)v5 | 0x8B0000, v3);
+ CallCinematicBgObjectSetup(GET_WORD(v5) | 0x8B0000, v3);
return 0;
}
@@ -1789,7 +1721,7 @@ void ProcessCinematicBgObjectsInstrs(uint16 k) { // 0x8B9659
if (cinematicbg_instr_timer[v2]-- == 1) {
uint16 v4 = cinematicbg_instr_ptr[v2], v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_8C(v4);
+ const uint16 *v5 = (const uint16 *)RomPtr_8C(v4);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -1800,9 +1732,9 @@ void ProcessCinematicBgObjectsInstrs(uint16 k) { // 0x8B9659
}
int v7 = v1 >> 1;
cinematicbg_instr_timer[v7] = v6;
- uint8 *v8 = RomPtr_8C(v4);
- R18_ = *((uint16 *)v8 + 1);
- cinematicbg_arr1[v7] = *((uint16 *)v8 + 2);
+ const uint8 *v8 = RomPtr_8C(v4);
+ R18_ = GET_WORD(v8 + 2);
+ cinematicbg_arr1[v7] = GET_WORD(v8 + 4);
ProcessCinematicBgObject(v1);
cinematicbg_instr_ptr[v7] = v4 + 6;
}
@@ -1897,7 +1829,7 @@ void ProcessTextGlowObject(void) { // 0x8B9849
R20_ = 2 * LOBYTE(enemy_projectile_pre_instr[v1 + 10]);
R22_ = R20_ + Mult8x8(*((uint8 *)enemy_projectile_1A27 + v0), 0x40);
uint16 v4 = R22_;
- uint8 *v5 = RomPtr_8C(v3);
+ const uint8 *v5 = RomPtr_8C(v3);
R18_ = v5[2];
R24_ = R18_;
R20_ = v5[3];
@@ -1958,12 +1890,12 @@ void CallCreditsObjectFunc(uint32 ea, uint16 k) {
}
void CreditsObject_Init(uint16 j) { // 0x8B9932
- uint8 *v1 = RomPtr_8B(j);
- cinematic_var24 = *((uint16 *)v1 + 1);
- cinematic_var21 = *((uint16 *)v1 + 2);
+ const uint8 *v1 = RomPtr_8B(j);
+ cinematic_var24 = GET_WORD(v1 + 2);
+ cinematic_var21 = GET_WORD(v1 + 4);
cinematic_var22 = 1;
cinematic_var23 = 0;
- CallCreditsObjectFunc(*(uint16 *)v1 | 0x8B0000, 0);
+ CallCreditsObjectFunc(GET_WORD(v1) | 0x8B0000, 0);
}
void CreditsObject_Process(void) { // 0x8B9955
@@ -1995,7 +1927,7 @@ void CreditsObject_ProcessOne(void) { // 0x8B996A
if (!sign16(v0 - enemy_projectile_pre_instr[0] - 8)) {
enemy_projectile_pre_instr[0] = cinematic_var10;
for (i = cinematic_var21; ; ) {
- uint16 *v2 = (uint16 *)RomPtr_8C(i);
+ const uint16 *v2 = (const uint16 *)RomPtr_8C(i);
uint16 v3 = *v2;
if ((*v2 & 0x8000u) == 0)
break;
@@ -2017,7 +1949,7 @@ void CreditsObject_Func1(uint16 j) { // 0x8B99C1
R20_ = 31;
uint16 v2 = *((uint16 *)RomPtr_8C(j) + 1);
do {
- *(uint16 *)((char *)ram3000.pause_menu_map_tilemap + RegWord) = *(uint16 *)IndirPtr(&R0_, v2);
+ *(uint16 *)((char *)ram3000.pause_menu_map_tilemap + RegWord) = IndirReadWord(R0_, v2);
RegWord += 2;
v2 += 2;
--R20_;
@@ -2273,18 +2205,10 @@ void LoadTitleSequenceGraphics(void) { // 0x8B9B87
palette_buffer[v0 >> 1] = g_word_8CE1E9[v0 >> 1];
v0 += 2;
} while ((int16)(v0 - 512) < 0);
- mov24(&decompress_src, 0x94E000);
- static const LongPtr unk_8B9BB4 = LONGPTR(0x7f0000);
- static const LongPtr unk_8B9BC5 = LONGPTR(0x7f4000);
- static const LongPtr unk_8B9BD6 = LONGPTR(0x7f5000);
- static const LongPtr unk_8B9BE7 = LONGPTR(0x7f9000);
- DecompressToMem_IpArg(&unk_8B9BB4);
- mov24(&decompress_src, 0x96FC04);
- DecompressToMem_IpArg(&unk_8B9BC5);
- mov24(&decompress_src, 0x9580D8);
- DecompressToMem_IpArg(&unk_8B9BD6);
- mov24(&decompress_src, 0x95A5E1);
- DecompressToMem_IpArg(&unk_8B9BE7);
+ DecompressToMem(0x94E000, g_ram + 0x10000);
+ DecompressToMem(0x96FC04, g_ram + 0x14000);
+ DecompressToMem(0x9580D8, g_ram + 0x15000);
+ DecompressToMem(0x95A5E1, g_ram + 0x19000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -2592,7 +2516,6 @@ void CinematicFunc_Func9(void) { // 0x8B9FAE
}
void ConfigureTitleSequenceGradientHDMA(void) { // 0x8BA00A
-#define g_off_8CBC5D ((uint16*)RomPtr(0x8cbc5d))
uint16 v0 = g_off_8CBC5D[(uint16)((uint8)(cinematic_var6 & 0xF0) >> 3) >> 1];
for (int i = 0; ; i += 2) {
uint16 v2 = *(uint16 *)RomPtr_8C(v0);
@@ -2690,25 +2613,12 @@ void CinematicFunction_Intro_Initial(void) { // 0x8BA395
palette_buffer[v1 >> 1] = kPalettes_Intro[v1 >> 1];
v1 += 2;
} while ((int16)(v1 - 512) < 0);
- static const LongPtr unk_8BA3FC = LONGPTR(0x7f0000);
- static const LongPtr unk_8BA40D = LONGPTR(0x7f8000);
- static const LongPtr unk_8BA41E = LONGPTR(0x7f9000);
- static const LongPtr unk_8BA42F = LONGPTR(0x7f9800);
- static const LongPtr unk_8BA440 = LONGPTR(0x7fb800);
- static const LongPtr unk_8BA451 = LONGPTR(0x7fe000);
-
- mov24(&decompress_src, 0x95f90e);
- DecompressToMem_IpArg(&unk_8BA3FC);
- mov24(&decompress_src, 0x95d089);
- DecompressToMem_IpArg(&unk_8BA40D);
- mov24(&decompress_src, 0x9788cc);
- DecompressToMem_IpArg(&unk_8BA41E);
- mov24(&decompress_src, 0x96ff14);
- DecompressToMem_IpArg(&unk_8BA42F);
- mov24(&decompress_src, 0x95e4c2);
- DecompressToMem_IpArg(&unk_8BA440);
- mov24(&decompress_src, 0x978d12);
- DecompressToMem_IpArg(&unk_8BA451);
+ DecompressToMem(0x95f90e, g_ram + 0x10000);
+ DecompressToMem(0x95d089, g_ram + 0x18000);
+ DecompressToMem(0x9788cc, g_ram + 0x19000);
+ DecompressToMem(0x96ff14, g_ram + 0x19800);
+ DecompressToMem(0x95e4c2, g_ram + 0x1b800);
+ DecompressToMem(0x978d12, g_ram + 0x1e000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -2751,9 +2661,7 @@ void CinematicFunction_Intro_Initial(void) { // 0x8BA395
static const StartDmaCopy unk_8BA529 = { 1, 1, 0x18, LONGPTR(0x7fb800), 0x2400 };
SetupDmaTransfer(&unk_8BA529);
WriteReg(MDMAEN, 2u);
- mov24(&decompress_src, 0x95D713);
- static const LongPtr unk_8BA546 = LONGPTR(0x7fa000);
- DecompressToMem_IpArg(&unk_8BA546);
+ DecompressToMem(0x95D713, g_ram + 0x1a000);
EnableNMI();
screen_fade_delay = 3;
screen_fade_counter = 3;
@@ -3603,8 +3511,8 @@ void CinematicFunction_Intro_Fadestuff2(void) { // 0x8BB458
}
void CinematicBgPreInstr_SamusBlink(uint16 k) { // 0x8BB4BC
- if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Func15b)
- || cinematic_function == (uint16)FUNC16(nullsub_121)) {
+ if (cinematic_function == FUNC16(CinematicFunction_Intro_Func15b)
+ || cinematic_function == FUNC16(nullsub_121)) {
int v1 = k >> 1;
cinematicbg_instr_ptr[v1] = -10733;
cinematicbg_instr_timer[v1] = 1;
@@ -3928,7 +3836,7 @@ void CinematicFunction_Intro_Func44(uint16 k) { // 0x8BB8D8
cinematicbg_arr8[v1] += __CFADD__uint16(v3, 0x8000);
R18_ = samus_x_pos - 5;
if (sign16(cinematicbg_arr7[v1] + 8 - (samus_x_pos - 5))) {
- if (cinematicspr_preinstr_func[0] != (uint16)FUNC16(CinematicFunction_Intro_Func39))
+ if (cinematicspr_preinstr_func[0] != FUNC16(CinematicFunction_Intro_Func39))
return;
} else {
samus_invincibility_timer = 11;
@@ -4020,8 +3928,6 @@ void CinematicFunction_Intro_Func50(uint16 k) { // 0x8BBA5E
}
void CinematicFunction_Intro_Func51(uint16 k) { // 0x8BBA73
- int16 v2;
-
int v1 = k >> 1;
if (cinematicbg_arr8[v1] == 145) {
SpawnCinematicSpriteObject(addr_kCinematicSpriteObjectDef_8BCEF1, 0);
@@ -4036,13 +3942,8 @@ void CinematicFunction_Intro_Func51(uint16 k) { // 0x8BBA73
} else if (sign16(cinematic_var17 - 544)) {
cinematic_var17 += 32;
}
- LOBYTE(v2) = HIBYTE(cinematic_var17);
- HIBYTE(v2) = cinematic_var17;
- R20_ = v2 & 0xFF00;
- uint16 v3 = HIBYTE(cinematic_var17);
- if ((cinematic_var17 & 0x8000u) != 0)
- v3 = HIBYTE(cinematic_var17) | 0xFF00;
- R18_ = v3;
+ R20_ = cinematic_var17 << 8;
+ R18_ = (int8)(cinematic_var17 >> 8);
uint16 v4 = cinematicspr_arr7[v1];
bool v5 = __CFADD__uint16(R20_, v4);
cinematicspr_arr7[v1] = R20_ + v4;
@@ -4065,10 +3966,6 @@ void CinematicFunction_Intro_Func52(uint16 k) { // 0x8BBB0D
}
void CinematicFunction_Intro_Func53(uint16 k) { // 0x8BBB24
- int16 v4;
- int16 v5;
- int16 v8;
-
if (cinematic_var13) {
int v2 = k >> 1;
if (sign16(cinematicspr_goto_timer[v2] - 128)) {
@@ -4083,14 +3980,9 @@ void CinematicFunction_Intro_Func53(uint16 k) { // 0x8BBB24
} else if (sign16(cinematic_var14 - 640)) {
cinematic_var14 += 32;
}
- LOBYTE(v4) = HIBYTE(cinematic_var14);
- HIBYTE(v4) = cinematic_var14;
- R20_ = v4 & 0xFF00;
- v5 = HIBYTE(cinematic_var14);
- if ((cinematic_var14 & 0x8000u) != 0)
- v5 = HIBYTE(cinematic_var14) | 0xFF00;
- R18_ = v5;
- if (v5 >= 0)
+ R20_ = cinematic_var14 << 8;
+ R18_ = (int8)GET_HIBYTE(cinematic_var14);
+ if (!sign16(R18_))
cinematic_var15 = -1;
else
cinematic_var15 = 1;
@@ -4104,13 +3996,8 @@ void CinematicFunction_Intro_Func53(uint16 k) { // 0x8BBB24
} else if (sign16(cinematic_var17 - 544)) {
cinematic_var17 += 32;
}
- LOBYTE(v8) = HIBYTE(cinematic_var17);
- HIBYTE(v8) = cinematic_var17;
- R20_ = v8 & 0xFF00;
- uint16 v9 = HIBYTE(cinematic_var17);
- if ((cinematic_var17 & 0x8000u) != 0)
- v9 = HIBYTE(cinematic_var17) | 0xFF00;
- R18_ = v9;
+ R20_ = cinematic_var17 << 8;
+ R18_ = (int8)GET_HIBYTE(cinematic_var17);
uint16 v10 = cinematicspr_arr7[v2];
v7 = __CFADD__uint16(R20_, v10);
cinematicspr_arr7[v2] = R20_ + v10;
@@ -4166,41 +4053,35 @@ void CinematicFunction_Intro_Func54(void) { // 0x8BBCA0
palette_buffer[v0 >> 1] = kPalettes_Intro2[v0 >> 1];
v0 += 2;
} while ((int16)(v0 - 512) < 0);
- static const DecompressToParams unk_8BBCCA = { LONGPTR(0x7f0000) };
- static const DecompressToParams unk_8BBCDB = { LONGPTR(0x7f4000) };
- static const DecompressToParams unk_8BBCEC = { LONGPTR(0x7f5000) };
- mov24(&decompress_src, 0x95A82F);
- DecompressToMem_IpArg(&unk_8BBCCA);
- mov24(&decompress_src, 0x96FE69);
- DecompressToMem_IpArg(&unk_8BBCDB);
- mov24(&decompress_src, 0x96D10A);
- DecompressToMem_IpArg(&unk_8BBCEC);
- WriteReg(VMADDL, 0);
- WriteReg(VMADDH, 0);
+ DecompressToMem(0x95A82F, g_ram + 0x10000);
+ DecompressToMem(0x96FE69, g_ram + 0x14000);
+ DecompressToMem(0x96D10A, g_ram + 0x15000);
+ WriteRegWord(VMADDL, 0);
WriteReg(VMAIN, 0x80);
static const StartDmaCopy unk_8BBD04 = { 1, 0, 0x19, LONGPTR(0x7f0000), 0x4000 };
SetupDmaTransfer(&unk_8BBD04);
WriteReg(MDMAEN, 2u);
+
WriteReg(VMAIN, 0);
- WriteReg(VMADDL, 0);
- WriteReg(VMADDH, 0);
+ WriteRegWord(VMADDL, 0);
v1 = 0x4000;
do {
WriteReg(VMDATAL, 0x8C);
--v1;
} while (v1);
- WriteReg(VMADDL, 0);
- WriteReg(VMADDH, 0);
+
+ WriteRegWord(VMADDL, 0);
WriteReg(VMAIN, 0);
static const StartDmaCopy unk_8BBD3C = { 1, 0, 0x18, LONGPTR(0x7f4000), 0x0300 };
SetupDmaTransfer(&unk_8BBD3C);
WriteReg(MDMAEN, 2u);
- WriteReg(VMADDL, 0);
- WriteReg(VMADDH, 0x60);
+
+ WriteRegWord(VMADDL, 0x6000);
WriteReg(VMAIN, 0x80);
static const StartDmaCopy unk_8BBD5C = { 1, 1, 0x18, LONGPTR(0x7f5000), 0x4000 };
SetupDmaTransfer(&unk_8BBD5C);
WriteReg(MDMAEN, 2u);
+
WriteRegWord(M7A, 0x100);
reg_M7A = 256;
WriteRegWord(M7B, 0);
@@ -4464,15 +4345,9 @@ void CinematicFunctionBlackoutFromCeres(void) { // 0x8BC11B
palette_buffer[v2 >> 1] = kPalettes_Intro2[v2 >> 1];
v2 += 2;
} while ((int16)(v2 - 512) < 0);
- static const DecompressToParams unk_8BC162 = { LONGPTR(0x7f0000) };
- static const DecompressToParams unk_8BC173 = { LONGPTR(0x7f4000) };
- static const DecompressToParams unk_8BC184 = { LONGPTR(0x7f5000) };
- mov24(&decompress_src, 0x95A82F);
- DecompressToMem_IpArg(&unk_8BC162);
- mov24(&decompress_src, 0x96FE69);
- DecompressToMem_IpArg(&unk_8BC173);
- mov24(&decompress_src, 0x96D10A);
- DecompressToMem_IpArg(&unk_8BC184);
+ DecompressToMem(0x95A82F, g_ram + 0x10000);
+ DecompressToMem(0x96FE69, g_ram + 0x14000);
+ DecompressToMem(0x96D10A, g_ram + 0x15000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -4619,7 +4494,7 @@ void CinematicFunction_Intro_Func78(uint16 j) { // 0x8BC434
}
void CinematicSprPreInstr_C489(uint16 k) { // 0x8BC489
- if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Func77)) {
+ if (cinematic_function == FUNC16(CinematicFunction_Intro_Func77)) {
cinematicspr_preinstr_func[k >> 1] = FUNC16(CinematicFunction_nullsub_116);
} else {
bool v1 = (--cinematic_var4 & 0x8000u) != 0;
@@ -4739,15 +4614,11 @@ void CinematicFunction_Intro_Func85(void) { // 0x8BC627
}
void CinematicFunction_Intro_Func86(void) { // 0x8BC699
- static const DecompressToParams unk_8BC6BB = { LONGPTR(0x7f9000) };
- static const DecompressToParams unk_8BC6CC = { LONGPTR(0x7f5000) };
SetupPpu_4_Mode1();
for (int i = 656; i >= 0; i -= 2)
*(uint16 *)((char *)&cinematic_var5 + (uint16)i) = 0;
- mov24(&decompress_src, 0x978ADB);
- DecompressToMem_IpArg(&unk_8BC6BB);
- mov24(&decompress_src, 0x96EC76);
- DecompressToMem_IpArg(&unk_8BC6CC);
+ DecompressToMem(0x978ADB, g_ram + 0x19000);
+ DecompressToMem(0x96EC76, g_ram + 0x15000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0);
@@ -4837,21 +4708,16 @@ void CinematicFunction_Intro_Func89(uint16 j) { // 0x8BC83B
}
void CinematicFunction_Intro_Func90(uint16 k) { // 0x8BC84E
- if (cinematic_function == (uint16)FUNC16(nullsub_124))
+ if (cinematic_function == FUNC16(nullsub_124))
cinematicspr_preinstr_func[k >> 1] = FUNC16(CinematicFunction_Intro_Func91);
}
void CinematicFunction_Intro_Func91(uint16 k) { // 0x8BC85D
- char v3; // t0
-
int v1 = k >> 1;
uint16 v2 = cinematicspr_goto_timer[v1] + 64;
cinematicspr_goto_timer[v1] = v2;
- v3 = v2;
- LOBYTE(v2) = HIBYTE(v2);
- HIBYTE(v2) = v3;
- R20_ = v2 & 0xFF00;
- R18_ = (uint8)v2;
+ R20_ = v2 << 8;
+ R18_ = (uint8)(v2 >> 8);
uint16 v4 = cinematicspr_arr7[v1];
bool v5 = v4 < R20_;
cinematicspr_arr7[v1] = v4 - R20_;
@@ -4871,21 +4737,16 @@ void CinematicFunction_Intro_Func92(uint16 j) { // 0x8BC897
}
void CinematicFunction_Intro_Func93(uint16 k) { // 0x8BC8AA
- if (cinematic_function == (uint16)FUNC16(nullsub_124))
+ if (cinematic_function == FUNC16(nullsub_124))
cinematicspr_preinstr_func[k >> 1] = FUNC16(CinematicFunction_Intro_Func94);
}
void CinematicFunction_Intro_Func94(uint16 k) { // 0x8BC8B9
- char v3; // t0
-
int v1 = k >> 1;
uint16 v2 = cinematicspr_goto_timer[v1] + 32;
cinematicspr_goto_timer[v1] = v2;
- v3 = v2;
- LOBYTE(v2) = HIBYTE(v2);
- HIBYTE(v2) = v3;
- R20_ = v2 & 0xFF00;
- R18_ = (uint8)v2;
+ R20_ = v2 << 8;
+ R18_ = (uint8)(v2 >> 8);
uint16 v4 = cinematicspr_arr7[v1];
bool v5 = v4 < R20_;
cinematicspr_arr7[v1] = v4 - R20_;
@@ -4899,21 +4760,16 @@ void CinematicFunction_Intro_Func94(uint16 k) { // 0x8BC8B9
}
void CinematicFunction_Intro_Func96(uint16 k) { // 0x8BC8F9
- if (cinematic_function == (uint16)FUNC16(nullsub_124))
+ if (cinematic_function == FUNC16(nullsub_124))
cinematicspr_preinstr_func[k >> 1] = FUNC16(CinematicFunction_Intro_Func97);
}
void CinematicFunction_Intro_Func97(uint16 k) { // 0x8BC908
- char v3; // t0
-
int v1 = k >> 1;
uint16 v2 = cinematicspr_goto_timer[v1] + 32;
cinematicspr_goto_timer[v1] = v2;
- v3 = v2;
- LOBYTE(v2) = HIBYTE(v2);
- HIBYTE(v2) = v3;
- R20_ = v2 & 0xFF00;
- R18_ = (uint8)v2;
+ R20_ = v2 << 8;
+ R18_ = (uint8)(v2 >> 8);
uint16 v4 = cinematicspr_arr7[v1];
bool v5 = v4 < R20_;
cinematicspr_arr7[v1] = v4 - R20_;
@@ -5091,15 +4947,9 @@ void CinematicFunctionEscapeFromCebes(void) { // 0x8BD480
palette_buffer[v2 >> 1] = kPalettes_Intro3[v2 >> 1];
v2 += 2;
} while ((int16)(v2 - 512) < 0);
- static const DecompressToParams unk_8BD4C2 = { LONGPTR(0x7f0000) };
- static const DecompressToParams unk_8BD4D3 = { LONGPTR(0x7f4000) };
- static const DecompressToParams unk_8BD4E4 = { LONGPTR(0x7f8000) };
- mov24(&decompress_src, 0x98bcd6);
- DecompressToMem_IpArg(&unk_8BD4C2);
- mov24(&decompress_src, 0x99a56f);
- DecompressToMem_IpArg(&unk_8BD4D3);
- mov24(&decompress_src, 0x99d17e);
- DecompressToMem_IpArg(&unk_8BD4E4);
+ DecompressToMem(0x98bcd6, g_ram + 0x10000);
+ DecompressToMem(0x99a56f, g_ram + 0x14000);
+ DecompressToMem(0x99d17e, g_ram + 0x18000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -5124,41 +4974,21 @@ void CinematicFunctionEscapeFromCebes(void) { // 0x8BD480
static const StartDmaCopy unk_8BD55C = { 1, 0, 0x19, LONGPTR(0x7f0000), 0x4000 };
SetupDmaTransfer(&unk_8BD55C);
WriteReg(MDMAEN, 2u);
- static const DecompressToParams unk_8BD579 = { LONGPTR(0x7f8000) };
- static const DecompressToParams unk_8BD58A = { LONGPTR(0x7f0000) };
- static const DecompressToParams unk_8BD59B = { LONGPTR(0x7f4000) };
- static const DecompressToParams unk_8BD5BD = { LONGPTR(0x7fe000) };
- static const DecompressToParams unk_8BD5CE = { LONGPTR(0x7fe800) };
- static const DecompressToParams unk_8BD5DF = { LONGPTR(0x7ff000) };
- static const DecompressToParams unk_8BD5F0 = { LONGPTR(0x7ff800) };
- static const DecompressToParams unk_8BD601 = { LONGPTR(0x7ea000) };
- static const DecompressToParams unk_8BD612 = { LONGPTR(0x7e2000) };
- static const DecompressToParams unk_8BD623 = { LONGPTR(0x7e6000) };
- mov24(&decompress_src, 0x988304);
- DecompressToMem_IpArg(&unk_8BD579);
- mov24(&decompress_src, 0x95a82f);
- DecompressToMem_IpArg(&unk_8BD58A);
- mov24(&decompress_src, 0x96fe69);
- DecompressToMem_IpArg(&unk_8BD59B);
+ DecompressToMem(0x988304, g_ram + 0x18000);
+ DecompressToMem(0x95a82f, g_ram + 0x10000);
+ DecompressToMem(0x96fe69, g_ram + 0x14000);
uint16 v3 = 768;
do {
*(uint16 *)((char *)&g_ram[0x14000] + v3) = 0x8c8c;
v3 += 2;
} while ((int16)(v3 - 0x4000) < 0);
- mov24(&decompress_src, 0x98b5c1);
- DecompressToMem_IpArg(&unk_8BD5BD);
- mov24(&decompress_src, 0x98b857);
- DecompressToMem_IpArg(&unk_8BD5CE);
- mov24(&decompress_src, 0x98baed);
- DecompressToMem_IpArg(&unk_8BD5DF);
- mov24(&decompress_src, 0x98bccd);
- DecompressToMem_IpArg(&unk_8BD5F0);
- mov24(&decompress_src, 0x97e7de);
- DecompressToMem_IpArg(&unk_8BD601);
- mov24(&decompress_src, 0x99d65b);
- DecompressToMem_IpArg(&unk_8BD612);
- mov24(&decompress_src, 0x99d932);
- DecompressToMem_IpArg(&unk_8BD623);
+ DecompressToMem(0x98b5c1, g_ram + 0x1e000);
+ DecompressToMem(0x98b857, g_ram + 0x1e800);
+ DecompressToMem(0x98baed, g_ram + 0x1f000);
+ DecompressToMem(0x98bccd, g_ram + 0x1f800);
+ DecompressToMem(0x97e7de, g_ram + 0xa000);
+ DecompressToMem(0x99d65b, g_ram + 0x2000);
+ DecompressToMem(0x99d932, g_ram + 0x6000);
WriteRegWord(M7A, 0x100);
reg_M7A = 256;
WriteRegWord(M7B, 0);
@@ -5235,9 +5065,7 @@ void CinematicFunction_Intro_Func112(void) { // 0x8BD731
static const StartDmaCopy unk_8BD766 = { 1, 1, 0x18, LONGPTR(0x7e2000), 0x4000 };
SetupDmaTransfer(&unk_8BD766);
WriteReg(MDMAEN, 2u);
- mov24(&decompress_src, 0x98ED4F);
- static const DecompressToParams unk_8BD783 = { LONGPTR(0x7e2000) };
- DecompressToMem_IpArg(&unk_8BD783);
+ DecompressToMem(0x98ED4F, g_ram + 0x2000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -5287,9 +5115,7 @@ void CinematicFunction_Intro_Func115(void) { // 0x8BD837
static const StartDmaCopy unk_8BD86C = { 1, 1, 0x18, LONGPTR(0x7e6000), 0x4000 };
SetupDmaTransfer(&unk_8BD86C);
WriteReg(MDMAEN, 2u);
- mov24(&decompress_src, 0x999101);
- static const DecompressToParams unk_8BD889 = { LONGPTR(0x7e6000) };
- DecompressToMem_IpArg(&unk_8BD889);
+ DecompressToMem(0x999101, g_ram + 0x6000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
WriteReg(VMAIN, 0x80);
@@ -5619,30 +5445,14 @@ void CinematicFunction_Intro_Func126(void) { // 0x8BDE80
palette_buffer[v0 >> 1] = kPalettes_Intro5[v0 >> 1];
v0 += 2;
} while ((int16)(v0 - 256) < 0);
- static const DecompressToParams unk_8BDEAA = { LONGPTR(0x7f0000) };
- static const DecompressToParams unk_8BDEBB = { LONGPTR(0x7e2000) };
- static const DecompressToParams unk_8BDECC = { LONGPTR(0x7e6000) };
- static const DecompressToParams unk_8BDEDD = { LONGPTR(0x7fc000) };
- static const DecompressToParams unk_8BDEEE = { LONGPTR(0x7fe000) };
- static const DecompressToParams unk_8BDEFF = { LONGPTR(0x7f4000) };
- static const DecompressToParams unk_8BDF10 = { LONGPTR(0x7fe800) };
- static const DecompressToParams unk_8BDF21 = { LONGPTR(0x7ff000) };
- mov24(&decompress_src, 0x979803);
- DecompressToMem_IpArg(&unk_8BDEAA);
- mov24(&decompress_src, 0x97B957);
- DecompressToMem_IpArg(&unk_8BDEBB);
- mov24(&decompress_src, 0x97D7FC);
- DecompressToMem_IpArg(&unk_8BDECC);
- mov24(&decompress_src, 0x97E7DE);
- DecompressToMem_IpArg(&unk_8BDEDD);
- mov24(&decompress_src, 0x9796F4);
- DecompressToMem_IpArg(&unk_8BDEEE);
- mov24(&decompress_src, 0x97F987);
- DecompressToMem_IpArg(&unk_8BDEFF);
- mov24(&decompress_src, 0x99DA9F);
- DecompressToMem_IpArg(&unk_8BDF10);
- mov24(&decompress_src, 0x99DAB1);
- DecompressToMem_IpArg(&unk_8BDF21);
+ DecompressToMem(0x979803, g_ram + 0x10000);
+ DecompressToMem(0x97B957, g_ram + 0x2000);
+ DecompressToMem(0x97D7FC, g_ram + 0x6000);
+ DecompressToMem(0x97E7DE, g_ram + 0x1c000);
+ DecompressToMem(0x9796F4, g_ram + 0x1e000);
+ DecompressToMem(0x97F987, g_ram + 0x14000);
+ DecompressToMem(0x99DA9F, g_ram + 0x1e800);
+ DecompressToMem(0x99DAB1, g_ram + 0x1f000);
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0x20);
WriteReg(VMAIN, 0x80);
@@ -5680,12 +5490,8 @@ void CinematicFunction_Intro_Func126(void) { // 0x8BDE80
SetupDmaTransfer(&unk_8BDFD9);
WriteReg(MDMAEN, 2u);
- mov24(&decompress_src, 0x99E089);
- static const DecompressToParams unk_8BDFF6 = { LONGPTR(0x7e6000) };
- DecompressToMem_IpArg(&unk_8BDFF6);
- mov24(&decompress_src, 0x99ECC4);
- static const DecompressToParams unk_8BE007 = { LONGPTR(0x7e8000) };
- DecompressToMem_IpArg(&unk_8BE007);
+ DecompressToMem(0x99E089, g_ram + 0x6000);
+ DecompressToMem(0x99ECC4, g_ram + 0x8000);
if (sign16(game_time_hours - 3)) {
WriteReg(VMADDL, 0);
WriteReg(VMADDH, 0);
@@ -5725,9 +5531,7 @@ void CinematicFunction_Intro_Func126(void) { // 0x8BDE80
for (int i = 510; i >= 0; i -= 2)
hdma_table_1[i >> 1] = 0;
CinematicFunction_Intro_Func127();
- mov24(&decompress_src, 0x97EEFF);
- static const DecompressToParams unk_8BE0CB = { LONGPTR(0x7f0000) };
- DecompressToMem_IpArg(&unk_8BE0CB);
+ DecompressToMem(0x97EEFF, g_ram + 0x10000);
ClearCinematicBgObjects(0x7F);
CinematicFunction_Intro_Func128(0x7F);
EnableTextGlowObjects_();
@@ -6055,7 +5859,7 @@ uint16 CalcItemPercentageCount(uint16 k, uint16 instrp) { // 0x8BE627
uint16 v0 = 4;
R18_ = 0;
do {
- uint16 *v1 = (uint16 *)RomPtr_RAM(g_off_8BE70D[v0]);
+ const uint16 *v1 = (const uint16 *)RomPtr_RAM(g_off_8BE70D[v0]);
R18_ += SnesDivide(*v1, g_word_8BE717[v0]);
--v0;
} while ((v0 & 0x8000u) == 0);
@@ -6166,7 +5970,7 @@ void CinematicFunction_Intro_Func149(void) { // 0x8BE812
uint8 *v3 = RomPtr_RAM(v0);
if (*(int16 *)v3 < 0) {
uint8 *v1 = RomPtr_RAM(v0);
- v2 = *((uint16 *)v1 + 5) - 1;
+ v2 = GET_WORD(v1 + 10) - 1;
*((uint16 *)v1 + 5) = v2;
if (v2 < 0) {
*((uint16 *)v1 + 5) = 32;
@@ -6174,25 +5978,25 @@ void CinematicFunction_Intro_Func149(void) { // 0x8BE812
}
} else {
int v4 = (uint16)(8 * (uint8) * (uint16 *)v3) >> 1;
- if (sign16((*(uint16 *)v3 & 0xFF00) - 1024)) {
+ if (sign16((GET_WORD(v3) & 0xFF00) - 1024)) {
*((uint16 *)v3 + 6) += g_word_8BE9CF[v4];
- v5 = *((uint16 *)v3 + 7);
+ v5 = GET_WORD(v3 + 14);
} else {
*((uint16 *)v3 + 6) += g_word_8BE9CF[v4] + g_word_8BE9CF[v4];
v5 = g_word_8BE9CF[v4 + 1] + *((uint16 *)v3 + 7);
}
*((uint16 *)v3 + 7) = g_word_8BE9CF[v4 + 1] + v5;
- uint16 v23 = *((uint16 *)v3 + 6);
+ uint16 v23 = GET_WORD(v3 + 12);
R18_ = (int8)HIBYTE(v23);
R20_ = (v23 << 8) & 0xFF00;
- v8 = *((uint16 *)v3 + 2);
+ v8 = GET_WORD(v3 + 4);
bool v9 = __CFADD__uint16(R20_, v8);
*((uint16 *)v3 + 2) = R20_ + v8;
*((uint16 *)v3 + 1) += R18_ + v9;
- uint16 v24 = *((uint16 *)v3 + 7);
+ uint16 v24 = GET_WORD(v3 + 14);
R18_ = (int8)HIBYTE(v24);
R20_ = (v24 << 8) & 0xFF00;
- v12 = *((uint16 *)v3 + 4);
+ v12 = GET_WORD(v3 + 8);
v9 = __CFADD__uint16(R20_, v12);
*((uint16 *)v3 + 4) = R20_ + v12;
*((uint16 *)v3 + 3) += R18_ + v9;
@@ -6207,10 +6011,10 @@ void CinematicFunction_Intro_Func149(void) { // 0x8BE812
uint8 *v15 = RomPtr_RAM(v14);
uint8 *v16 = v15;
if (*(int16 *)v15 >= 0) {
- v17 = *((uint16 *)v15 + 1);
+ v17 = GET_WORD(v15 + 2);
if (v15[3]
|| ((v17 - 4) & 0xFF00) != 0
- || (v18 = gOamEnt(v13), *(uint16 *)&v18->xcoord = v17 - 4, v19 = *((uint16 *)v16 + 3), v16[7])
+ || (v18 = gOamEnt(v13), *(uint16 *)&v18->xcoord = v17 - 4, v19 = GET_WORD(v16 + 6), v16[7])
|| ((v19 - 4) & 0xFF00) != 0) {
uint8 *v21 = RomPtr_RAM(v14);
*((uint16 *)v21 + 5) = 32;
@@ -6223,15 +6027,15 @@ void CinematicFunction_Intro_Func149(void) { // 0x8BE812
*(uint16 *)v21 = *v21;
} else {
*(uint16 *)&v18->ycoord = v19 - 4;
- v20 = *((uint16 *)v16 + 5) - 1;
+ v20 = GET_WORD(v16 + 10) - 1;
*((uint16 *)v16 + 5) = v20;
if (v20 <= 0) {
- v22 = *(uint16 *)v16;
+ v22 = GET_WORD(v16);
*((uint16 *)v16 + 5) = g_word_8BE9CF[((uint16)(8 * (uint8) * (uint16 *)v16) >> 1) + 2];
*(uint16 *)v16 = v22 + 512;
}
if (v16[1]) {
- *(uint16 *)&gOamEnt(v13)->charnum = g_word_8BE9A7[(uint16)HIBYTE(*(uint16 *)v16) >> 1];
+ *(uint16 *)&gOamEnt(v13)->charnum = g_word_8BE9A7[(uint16)GET_HIBYTE(GET_WORD(v16)) >> 1];
v13 += 4;
}
}
@@ -6566,7 +6370,7 @@ uint16 CinematicSprInstr_Func187(uint16 k, uint16 j) { // 0x8BF32B
void CinematicSprPreInstr_F35A(uint16 k) { // 0x8BF35A
- if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Func121)) {
+ if (cinematic_function == FUNC16(CinematicFunction_Intro_Func121)) {
int v1 = k >> 1;
cinematicspr_preinstr_func[v1] = FUNC16(CinematicFunction_Intro_Func189);
cinematicspr_arr7[v1] = 0x4000;
@@ -6601,7 +6405,7 @@ uint16 CinematicSprInstr_Func190(uint16 k, uint16 j) { // 0x8BF3B0
}
void CinematicFunction_Intro_Func191(uint16 k) { // 0x8BF3B9
- if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Func126)) {
+ if (cinematic_function == FUNC16(CinematicFunction_Intro_Func126)) {
int v1 = k >> 1;
cinematicspr_instr_timer[v1] = 1;
cinematicspr_instr_ptr[v1] = addr_off_8BEE9B;
@@ -6705,7 +6509,7 @@ void CinematicFunction_Intro_Func206(uint16 k) { // 0x8BF4E0
}
void CinematicFunction_Intro_Func207(uint16 k) { // 0x8BF507
- if (cinematic_function == (uint16)FUNC16(nullsub_125)) {
+ if (cinematic_function == FUNC16(nullsub_125)) {
int v1 = k >> 1;
cinematicspr_instr_timer[v1] = 1;
cinematicspr_instr_ptr[v1] = addr_off_8BEE9B;
@@ -6852,4 +6656,4 @@ uint16 CinematicFunction_Intro_Func219(uint16 k, uint16 j) { // 0x8BF6FE
cinematic_function = FUNC16(CinematicFunction_Intro_Func129);
cinematic_var4 = 60;
return j;
-}
+}
\ No newline at end of file
diff --git a/src/sm_8d.c b/src/sm_8d.c
index 906244e..1d510dc 100644
--- a/src/sm_8d.c
+++ b/src/sm_8d.c
@@ -3,6 +3,10 @@
#include "variables.h"
#include "funcs.h"
+
+
+
+
void EnablePaletteFx(void) { // 0x8DC4C2
flag_for_palette_fx_objects |= 0x8000u;
}
@@ -114,7 +118,7 @@ void PalFx_ProcessOne(uint16 k) { // 0x8DC54A
if (palettefx_instr_timers[v2]-- == 1) {
uint16 j = palettefx_instr_list_ptrs[v2], v6;
while (1) {
- uint16 *v5 = (uint16 *)RomPtr_8D(j);
+ const uint16 *v5 = (const uint16 *)RomPtr_8D(j);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -128,18 +132,18 @@ void PalFx_ProcessOne(uint16 k) { // 0x8DC54A
int v8 = v1 >> 1;
palettefx_instr_timers[v8] = v6;
uint16 v9 = palettefx_color_indexes[v8];
- uint8 *v10;
+ const uint8 *v10;
do {
while (1) {
v10 = RomPtr_8D(j);
- v11 = *((uint16 *)v10 + 1);
+ v11 = GET_WORD(v10 + 2);
if (v11 & 0x8000)
break;
palette_buffer[v9 >> 1] = v11;
v9 += 2;
j += 2;
}
- R18_ = *((uint16 *)v10 + 1);
+ R18_ = GET_WORD(v10 + 2);
v12 = CallPalInstr((uint16)v11 | 0x8D0000, v9, j);
v9 = v12.k;
j = v12.j;
@@ -232,25 +236,25 @@ PairU16 PalInstr_SetColorIndex(uint16 k, uint16 j) { // 0x8DC655
}
PairU16 PalInstr_QueueMusic(uint16 k, uint16 j) { // 0x8DC65E
- uint8 *v2 = RomPtr_8D(j);
+ const uint8 *v2 = RomPtr_8D(j);
QueueMusic_Delayed8(*v2);
return MakePairU16(k, j + 1);
}
PairU16 PalInstr_QueueSfx1(uint16 k, uint16 j) { // 0x8DC66A
- uint16 *v2 = (uint16 *)RomPtr_8D(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_8D(j);
QueueSfx1_Max6(*v2);
return MakePairU16(k, j + 1);
}
PairU16 PalInstr_QueueSfx2(uint16 k, uint16 j) { // 0x8DC673
- uint16 *v2 = (uint16 *)RomPtr_8D(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_8D(j);
QueueSfx2_Max6(*v2);
return MakePairU16(k, j + 1);
}
PairU16 PalInstr_QueueSfx3(uint16 k, uint16 j) { // 0x8DC67C
- uint16 *v2 = (uint16 *)RomPtr_8D(j);
+ const uint16 *v2 = (const uint16 *)RomPtr_8D(j);
QueueSfx3_Max6(*v2);
return MakePairU16(k, j + 1);
}
@@ -260,7 +264,7 @@ void PalInit_E1BC(uint16 k, uint16 j) { // 0x8DE204
}
void PalPreInstr_E1BC(uint16 k) { // 0x8DE20B
- if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Page2)) {
+ if (cinematic_function == FUNC16(CinematicFunction_Intro_Page2)) {
int v1 = k >> 1;
palettefx_instr_list_ptrs[v1] = addr_off_8DE192;
palettefx_instr_timers[v1] = 1;
@@ -351,4 +355,4 @@ void PalPreInstr_F621(uint16 k) { // 0x8DF621
void PalInit_F779_Brinstar8(uint16 k, uint16 j) { // 0x8DF730
if ((*(uint16 *)&boss_bits_for_area[area_index] & 2) != 0)
palettefx_ids[j >> 1] = 0;
-}
+}
\ No newline at end of file
diff --git a/src/sm_8f.c b/src/sm_8f.c
index 78a15fe..e7de84a 100644
--- a/src/sm_8f.c
+++ b/src/sm_8f.c
@@ -4,6 +4,10 @@
#include "sm_rtl.h"
#include "funcs.h"
+
+
+
+
static const SpawnHardcodedPlmArgs unk_8F9198 = { 0x3d, 0x0b, 0xbb30 };
static const SpawnHardcodedPlmArgs unk_8F91AD = { 0x10, 0x87, 0xb964 };
static const SpawnHardcodedPlmArgs unk_8F91B6 = { 0x0f, 0x0a, 0xb9ed };
@@ -526,7 +530,7 @@ void RoomCode_Elevatube(void) { // 0x8FE2B6
R20_ = 0;
if (*(int16 *)&room_main_asm_variables[4] < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = *(uint16 *)&room_main_asm_variables[4];
+ R19_ = *(uint16 *)&room_main_asm_variables[4];
v0 = (__PAIR32__(R20_, R18_) + *(uint32 *)room_main_asm_variables) >> 16;
*(uint16 *)room_main_asm_variables += R18_;
*(uint16 *)&room_main_asm_variables[2] = v0;
@@ -731,9 +735,9 @@ uint16 RoomDefStateSelect_Finish(uint16 k) { // 0x8FE5E6
}
uint16 RoomDefStateSelect_Door(uint16 k) { // 0x8FE5EB
- uint8 *v1 = RomPtr_8F(k);
- if (*(uint16 *)v1 == door_def_ptr)
- return RoomDefStateSelect_Finish(*((uint16 *)v1 + 1));
+ const uint8 *v1 = RomPtr_8F(k);
+ if (GET_WORD(v1) == door_def_ptr)
+ return RoomDefStateSelect_Finish(GET_WORD(v1 + 2));
else
return k + 4;
}
@@ -741,22 +745,22 @@ uint16 RoomDefStateSelect_Door(uint16 k) { // 0x8FE5EB
uint16 RoomDefStateSelect_TourianBoss01(uint16 k) { // 0x8FE5FF
if (!(CheckBossBitForCurArea(1u) & 1))
return k + 2;
- uint16 *v1 = (uint16 *)RomPtr_8F(k);
+ const uint16 *v1 = (const uint16 *)RomPtr_8F(k);
return RoomDefStateSelect_Finish(*v1);
}
uint16 RoomDefStateSelect_IsEventSet(uint16 k) { // 0x8FE612
- uint8 *v1 = RomPtr_8F(k);
+ const uint8 *v1 = RomPtr_8F(k);
if (CheckEventHappened(*v1))
- return RoomDefStateSelect_Finish(*(uint16 *)(v1 + 1));
+ return RoomDefStateSelect_Finish(GET_WORD(v1 + 1));
else
return k + 3;
}
uint16 RoomDefStateSelect_IsBossDead(uint16 k) { // 0x8FE629
- uint8 *v1 = RomPtr_8F(k);
+ const uint8 *v1 = RomPtr_8F(k);
if (CheckBossBitForCurArea(*v1) & 1)
- return RoomDefStateSelect_Finish(*(uint16 *)(v1 + 1));
+ return RoomDefStateSelect_Finish(GET_WORD(v1 + 1));
else
return k + 3;
}
@@ -764,14 +768,14 @@ uint16 RoomDefStateSelect_IsBossDead(uint16 k) { // 0x8FE629
uint16 RoomDefStateSelect_MorphBallMissiles(uint16 k) { // 0x8FE652
if ((collected_items & 4) == 0 || !samus_max_missiles)
return k + 2;
- uint16 *v1 = (uint16 *)RomPtr_8F(k);
+ const uint16 *v1 = (const uint16 *)RomPtr_8F(k);
return RoomDefStateSelect_Finish(*v1);
}
uint16 RoomDefStateSelect_PowerBombs(uint16 k) { // 0x8FE669
if (!samus_max_power_bombs)
return k + 2;
- uint16 *v1 = (uint16 *)RomPtr_8F(k);
+ const uint16 *v1 = (const uint16 *)RomPtr_8F(k);
return RoomDefStateSelect_Finish(*v1);
}
@@ -987,4 +991,4 @@ void RoomCode_RidleyRoomShaking(void) { // 0x8FE950
reg_BG1VOFS += kRoomCode_RidleyRoomShaking_Y[v1];
reg_BG2VOFS += kRoomCode_RidleyRoomShaking_Y[v1];
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_90.c b/src/sm_90.c
index 9ac2817..b0deb82 100644
--- a/src/sm_90.c
+++ b/src/sm_90.c
@@ -5,6 +5,18 @@
#include "sm_rtl.h"
#include "funcs.h"
+
+#define kSamusFramesForUnderwaterSfx ((uint8*)RomFixedPtr(0x90a514))
+#define kPauseMenuMapData ((uint16*)RomFixedPtr(0x829717))
+#define kPauseMenuMapTilemaps ((LongPtr*)RomFixedPtr(0x82964a))
+#define kBeamTilePtrs ((uint16*)RomFixedPtr(0x90c3b1))
+#define kBeamPalettePtrs ((uint16*)RomFixedPtr(0x90c3c9))
+#define off_90B5BB ((uint16*)RomFixedPtr(0x90b5bb))
+#define off_90B609 ((uint16*)RomFixedPtr(0x90b609))
+#define kFlareAnimDelays ((uint16*)RomFixedPtr(0x90c481))
+
+
+
static const uint16 kUnchargedProjectile_Sfx[12] = { 0xb, 0xd, 0xc, 0xe, 0xf, 0x12, 0x10, 0x11, 0x13, 0x16, 0x14, 0x15 };
static const uint16 kChargedProjectile_Sfx[12] = { 0x17, 0x19, 0x18, 0x1a, 0x1b, 0x1e, 0x1c, 0x1d, 0x1f, 0x22, 0x20, 0x21 };
static const uint16 kNonBeamProjectile_Sfx[9] = { 0, 3, 4, 0, 0, 0, 0, 0, 0 };
@@ -226,15 +238,15 @@ static Func_Y_Y *const kAnimDelayFuncs[16] = { // 0x9082DC
void Samus_HandleAnimDelay(void) {
int16 v2;
- byte_7E0002 = -111;
+ R0_.bank = -111;
uint16 v0 = samus_anim_frame;
R0_.addr = kSamusAnimationDelayData[samus_pose];
- if ((*IndirPtr(&R0_, samus_anim_frame) & 0x80) != 0) {
+ if ((IndirReadByte(R0_, samus_anim_frame) & 0x80) != 0) {
uint16 v1 = Samus_HandleSpeedBoosterAnimDelay(v0);
if (v1) {
v2 = kAnimDelayFuncs[v1 & 0xF](v0);
if (v2 >= 0)
- samus_anim_frame_timer = samus_anim_frame_buffer + *IndirPtr(&R0_, v2);
+ samus_anim_frame_timer = samus_anim_frame_buffer + IndirReadByte(R0_, v2);
}
} else {
Samus_HandleNormalAnimDelay(v0);
@@ -260,7 +272,7 @@ uint16 Samus_AnimDelayFunc_7(uint16 j) { // 0x908360
}
uint16 Samus_AnimDelayFunc_8_AutoJumpHack(uint16 j) { // 0x908370
- if (samus_input_handler == (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler == FUNC16(Samus_InputHandler_E91D))
return Samus_AnimDelayFunc_13_TransToPose(j);
if (samus_new_pose != kPose_4B_FaceR_Jumptrans
&& samus_new_pose != kPose_4C_FaceL_Jumptrans
@@ -274,16 +286,16 @@ uint16 Samus_AnimDelayFunc_8_AutoJumpHack(uint16 j) { // 0x908370
uint16 Samus_AnimDelayFunc_9_TransToPose(uint16 j) { // 0x90839A
uint16 v1 = j + 1;
- R18_ = *(uint16 *)IndirPtr(&R0_, v1);
+ R18_ = IndirReadWord(R0_, v1);
if ((R18_ & equipped_items) != 0) {
if (samus_y_speed || samus_y_subspeed)
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 5);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 5);
else
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 4);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 4);
} else if (samus_y_speed || samus_y_subspeed) {
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 3);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 3);
} else {
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 2);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 2);
}
samus_hurt_switch_index = 3;
return -1;
@@ -291,9 +303,9 @@ uint16 Samus_AnimDelayFunc_9_TransToPose(uint16 j) { // 0x90839A
uint16 UNUSED_Samus_AnimDelayFunc_10(uint16 j) { // 0x9083F6
if (samus_y_speed || samus_y_subspeed)
- samus_new_pose_transitional = *IndirPtr(&R0_, j + 2);
+ samus_new_pose_transitional = IndirReadByte(R0_, j + 2);
else
- samus_new_pose_transitional = *IndirPtr(&R0_, j + 1);
+ samus_new_pose_transitional = IndirReadByte(R0_, j + 1);
samus_hurt_switch_index = 3;
return -1;
}
@@ -326,23 +338,23 @@ LABEL_10:
uint16 Samus_AnimDelayFunc_12_TransToPose(uint16 j) { // 0x90848B
uint16 v1 = j + 1;
- R18_ = *(uint16 *)IndirPtr(&R0_, v1);
+ R18_ = IndirReadWord(R0_, v1);
if ((R18_ & equipped_items) != 0)
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 3);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 3);
else
- samus_new_pose_transitional = *IndirPtr(&R0_, v1 + 2);
+ samus_new_pose_transitional = IndirReadByte(R0_, v1 + 2);
samus_hurt_switch_index = 3;
return -1;
}
uint16 Samus_AnimDelayFunc_13_TransToPose(uint16 j) { // 0x9084B6
- samus_new_pose_transitional = *IndirPtr(&R0_, j + 1);
+ samus_new_pose_transitional = IndirReadByte(R0_, j + 1);
samus_hurt_switch_index = 3;
return -1;
}
uint16 Samus_AnimDelayFunc_14_Goto(uint16 j) { // 0x9084C7
- R18_ = *IndirPtr(&R0_, j + 1);
+ R18_ = IndirReadByte(R0_, j + 1);
samus_anim_frame -= R18_;
return samus_anim_frame;
}
@@ -354,16 +366,16 @@ uint16 Samus_AnimDelayFunc_15_GotoStart(uint16 j) { // 0x9084DB
}
void Samus_HandleNormalAnimDelay(uint16 j) { // 0x9084E3
- byte_7E0002 = -111;
+ R0_.bank = -111;
if (samus_has_momentum_flag && samus_movement_type == 1) {
uint16 *kDefaultAnimFramePtr = (uint16 *)RomPtr(0x91B5D1);
if ((equipped_items & 0x2000) != 0)
- R0_.addr = kSpeedBoostToAnimFramePtr[(uint16)(2 * HIBYTE(speed_boost_counter)) >> 1];
+ R0_.addr = kSpeedBoostToAnimFramePtr[HIBYTE(speed_boost_counter)];
else
R0_.addr = *kDefaultAnimFramePtr;
}
- samus_anim_frame_timer = samus_anim_frame_buffer + *IndirPtr(&R0_, j);
+ samus_anim_frame_timer = samus_anim_frame_buffer + IndirReadByte(R0_, j);
}
@@ -371,17 +383,17 @@ void Samus_HandleNormalAnimDelay(uint16 j) { // 0x9084E3
uint16 Samus_HandleSpeedBoosterAnimDelay(uint16 j) { // 0x90852C
uint16 *kDefaultAnimFramePtr = (uint16 *)RomPtr(0x91B5D1);
- byte_7E0002 = 0x91;
+ R0_.bank = 0x91;
if (!samus_has_momentum_flag || (button_config_run_b & joypad1_lastkeys) == 0 || samus_movement_type != 1)
- return *IndirPtr(&R0_, j);
+ return IndirReadByte(R0_, j);
if ((equipped_items & 0x2000) == 0) {
samus_anim_frame = 0;
R0_.addr = *kDefaultAnimFramePtr;
- samus_anim_frame_timer = samus_anim_frame_buffer + *IndirPtr(&R0_, 0);
+ samus_anim_frame_timer = samus_anim_frame_buffer + IndirReadByte(R0_, 0);
return 0;
}
if ((uint8)--speed_boost_counter)
- return *IndirPtr(&R0_, j);
+ return IndirReadByte(R0_, j);
uint16 v2 = speed_boost_counter;
if ((speed_boost_counter & 0x400) == 0) {
v2 = speed_boost_counter + 256;
@@ -397,7 +409,7 @@ uint16 Samus_HandleSpeedBoosterAnimDelay(uint16 j) { // 0x90852C
speed_boost_counter = kSpeedBoostToCtr[v3] | speed_boost_counter & 0xFF00;
samus_anim_frame = 0;
R0_.addr = kSpeedBoostToAnimFramePtr[v3];
- samus_anim_frame_timer = samus_anim_frame_buffer + *IndirPtr(&R0_, 0);
+ samus_anim_frame_timer = samus_anim_frame_buffer + IndirReadByte(R0_, 0);
return 0;
}
@@ -1008,7 +1020,7 @@ void Samus_BombJumpRisingYMovement_(void) {
if ((uint8)bomb_jump_dir != 2)
samus_x_accel_mode = 2;
} else if (sign16(samus_y_speed - 1)) {
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(Samus_InputHandler_E913);
}
}
@@ -2124,7 +2136,6 @@ void Samus_Movement_02_NormalJumping(void) { // 0x90A42E
}
// Warning: OOB
-#define kSamusFramesForUnderwaterSfx ((uint8*)RomPtr(0x90a514))
void Samus_Movement_03_SpinJumping(void) { // 0x90A436
static const uint16 kSamusPhys_JumpMinYVelAir = 0x280;
@@ -2442,7 +2453,7 @@ void DisableMinimapAndMarkBossRoomAsExplored(void) { // 0x90A7E2
return;
}
for (int i = g_stru_90A83A[v2].ptrs; ; i += 4) {
- uint16 *v4 = (uint16 *)RomPtr_90(i);
+ const uint16 *v4 = (const uint16 *)RomPtr_90(i);
if ((*v4 & 0x8000u) != 0)
break;
R18_ = *v4;
@@ -2471,10 +2482,8 @@ void InitializeMiniMapBroken(void) { // 0x90A8EF
}
-#define kPauseMenuMapData ((uint16*)RomPtr(0x829717))
void UpdateMinimap(void) { // 0x90A91B
int16 v4;
- uint16 v5;
int16 v10;
int16 v11;
@@ -2490,8 +2499,8 @@ void UpdateMinimap(void) { // 0x90A91B
R22_ = room_y_coordinate_on_map + (uint8)((uint16)(samus_y_pos & 0xFF00) >> 8) + 1;
uint16 v2 = R20_ + 4 * (R34 + R22_);
map_tiles_explored[v2] |= kShr0x80[((uint8)room_x_coordinate_on_map + v0) & 7];
- R32 = v1;
- g_word_7E001E = v2;
+ R32_ = v1;
+ R30_ = v2;
uint16 v3 = v2 - 4;
v4 = v1 - 2;
if ((int16)(v1 - 2) < 0) {
@@ -2501,36 +2510,21 @@ void UpdateMinimap(void) { // 0x90A91B
}
R50 = v3;
bg3_tilemap_offset = 2 * v4;
- LOBYTE(v5) = HIBYTE(*(uint16 *)&map_tiles_explored[v3]);
- HIBYTE(v5) = *(uint16 *)&map_tiles_explored[v3];
int v6 = bg3_tilemap_offset >> 1;
- R24_ = kShr0xFc00[v6] & v5;
- LOBYTE(v5) = HIBYTE(*(uint16 *)&map_tiles_explored[v3 + 4]);
- HIBYTE(v5) = *(uint16 *)&map_tiles_explored[v3 + 4];
- R26_ = kShr0xFc00[v6] & v5;
- LOBYTE(v5) = HIBYTE(*(uint16 *)&map_tiles_explored[v3 + 8]);
- HIBYTE(v5) = *(uint16 *)&map_tiles_explored[v3 + 8];
- R28_ = kShr0xFc00[v6] & v5;
- *(uint16 *)((char *)&R10_ + 1) = 130;
- *(uint16 *)((char *)&R8_ + 1) = kPauseMenuMapData[area_index];
- *(uint16 *)((char *)&R14_ + 1) = *(uint16 *)((char *)&R8_ + 1);
- *(uint16 *)((char *)&R8_ + 1) += v3;
- uint8 *v7 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v5) = HIBYTE(*(uint16 *)v7);
- HIBYTE(v5) = *(uint16 *)v7;
- R38 = v5;
- *(uint16 *)((char *)&R8_ + 1) += 4;
- uint8 *v8 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v5) = HIBYTE(*(uint16 *)v8);
- HIBYTE(v5) = *(uint16 *)v8;
- R40 = v5;
- *(uint16 *)((char *)&R8_ + 1) += 4;
- uint8 *v9 = IndirPtr((char *)&R8_ + 1, 0);
- LOBYTE(v5) = HIBYTE(*(uint16 *)v9);
- HIBYTE(v5) = *(uint16 *)v9;
- R42 = v5;
+ R24_ = kShr0xFc00[v6] & swap16(*(uint16 *)&map_tiles_explored[v3]);
+ R26_ = kShr0xFc00[v6] & swap16(*(uint16 *)&map_tiles_explored[v3 + 4]);
+ R28_ = kShr0xFc00[v6] & swap16(*(uint16 *)&map_tiles_explored[v3 + 8]);
+ R9_.bank = 130;
+ R9_.addr = kPauseMenuMapData[area_index];
+ *(uint16 *)((char *)&R14_ + 1) = R9_.addr;
+ R9_.addr += v3;
+ R38 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 4;
+ R40 = swap16(IndirReadWord(R9_, 0));
+ R9_.addr += 4;
+ R42 = swap16(IndirReadWord(R9_, 0));
if ((R50 & 3) == 3) {
- v10 = R46 ? bg3_tilemap_offset >> 1 : R32;
+ v10 = R46 ? bg3_tilemap_offset >> 1 : R32_;
if (!sign16(v10 - 6)) {
if (R34)
LOBYTE(R48) = R50 - 124;
@@ -2553,7 +2547,6 @@ void UpdateMinimap(void) { // 0x90A91B
}
}
-#define kPauseMenuMapTilemaps ((LongPtr*)RomPtr(0x82964a))
void UpdateMinimapInside(void) { // 0x90AA43
uint16 v0;
int16 v1;
@@ -2569,46 +2562,46 @@ void UpdateMinimapInside(void) { // 0x90AA43
else
v1 = remaining_enemy_spritemap_entries - 34;
uint16 v2 = 2 * v1;
- *(uint16 *)&byte_7E0002 = *(uint16 *)((char *)kPauseMenuMapTilemaps + 2 + (uint16)(3 * area_index));
- R3_.bank = *(uint16 *)&byte_7E0002;
- R8_ = *(uint16 *)&byte_7E0002;
+ *(uint16 *)&R0_.bank = *(uint16 *)((char *)kPauseMenuMapTilemaps + 2 + (uint16)(3 * area_index));
+ R3_.bank = *(uint16 *)&R0_.bank;
+ R6_.bank = *(uint16 *)&R0_.bank;
R0_.addr = *(uint16 *)((char *)kPauseMenuMapTilemaps + (uint16)(3 * area_index));
R3_.addr = R0_.addr + 64;
- R6_ = R0_.addr + 128;
+ R6_.addr = R0_.addr + 128;
R18_ = 5;
uint16 v3 = 0;
do {
bool v4 = R38 >> 15;
R38 *= 2;
- if (!v4 || (v5 = *(uint16 *)IndirPtr(&R0_, v2), !has_area_map))
+ if (!v4 || (v5 = IndirReadWord(R0_, v2), !has_area_map))
v5 = 31;
int v6 = v3 >> 1;
hud_tilemap[v6 + 26] = v5 & 0xC3FF | 0x2C00;
v4 = R24_ >> 15;
R24_ *= 2;
if (v4)
- hud_tilemap[v6 + 26] = *(uint16 *)IndirPtr(&R0_, v2) & 0xC3FF | 0x2800;
+ hud_tilemap[v6 + 26] = IndirReadWord(R0_, v2) & 0xC3FF | 0x2800;
v4 = R40 >> 15;
R40 *= 2;
- if (!v4 || (v7 = *(uint16 *)IndirPtr(&R3_, v2), !has_area_map))
+ if (!v4 || (v7 = IndirReadWord(R3_, v2), !has_area_map))
v7 = 31;
hud_tilemap[v6 + 58] = v7 & 0xC3FF | 0x2C00;
v4 = R26_ >> 15;
R26_ *= 2;
if (v4) {
- hud_tilemap[v6 + 58] = *(uint16 *)IndirPtr(&R3_, v2) & 0xC3FF | 0x2800;
+ hud_tilemap[v6 + 58] = IndirReadWord(R3_, v2) & 0xC3FF | 0x2800;
if (R18_ == 3 && (hud_tilemap[v6 + 58] & 0x1FF) == 40)
MarkMapTileAboveSamusAsExplored();
}
v4 = R42 >> 15;
R42 *= 2;
- if (!v4 || (v8 = *(uint16 *)IndirPtr(&R6_, v2), !has_area_map))
+ if (!v4 || (v8 = IndirReadWord(R6_, v2), !has_area_map))
v8 = 31;
hud_tilemap[v6 + 90] = v8 & 0xC3FF | 0x2C00;
v4 = R28_ >> 15;
R28_ *= 2;
if (v4)
- hud_tilemap[v6 + 90] = *(uint16 *)IndirPtr(&R6_, v2) & 0xC3FF | 0x2800;
+ hud_tilemap[v6 + 90] = IndirReadWord(R6_, v2) & 0xC3FF | 0x2800;
v3 += 2;
v2 += 2;
if ((v2 & 0x3F) == 0)
@@ -2620,46 +2613,40 @@ void UpdateMinimapInside(void) { // 0x90AA43
}
void MarkMapTileAboveSamusAsExplored(void) { // 0x90AB5F
- *((uint8 *)&music_data_index + g_word_7E001E) |= kShr0x80[R32];
+ *((uint8 *)&music_data_index + R30_) |= kShr0x80[R32_];
}
void AdjustMapBitsForMapPageSpill(void) { // 0x90AB75
uint16 v0 = (uint8)R48;
- *(uint16 *)((char *)&R8_ + 1) = *(uint16 *)((char *)&R14_ + 1) + (uint8)R48;
+ R9_.addr = *(uint16 *)((char *)&R14_ + 1) + (uint8)R48;
LOBYTE(R44) = map_tiles_explored[(uint8)R48];
- HIBYTE(R44) = *IndirPtr((char *)&R8_ + 1, 0);
+ HIBYTE(R44) = IndirReadByte(R9_, 0);
if ((uint8)R34 == 32) {
- uint16 v1 = R44;
- HIBYTE(R38) = HIBYTE(v1);
- HIBYTE(R24_) = v1;
+ HIBYTE(R38) = HIBYTE(R44);
+ HIBYTE(R24_) = R44;
} else {
- uint16 v2 = R44;
- LOBYTE(R38) = HIBYTE(v2);
- LOBYTE(R24_) = v2;
+ LOBYTE(R38) = HIBYTE(R44);
+ LOBYTE(R24_) = R44;
}
LOBYTE(R44) = map_tiles_explored[v0 + 4];
- *(uint16 *)((char *)&R8_ + 1) += 4;
- HIBYTE(R44) = *IndirPtr((char *)&R8_ + 1, 0);
+ R9_.addr += 4;
+ HIBYTE(R44) = IndirReadByte(R9_, 0);
if ((uint8)R34 == 32) {
- uint16 v3 = R44;
- HIBYTE(R40) = HIBYTE(v3);
- HIBYTE(R26_) = v3;
+ HIBYTE(R40) = HIBYTE(R44);
+ HIBYTE(R26_) = R44;
} else {
- uint16 v4 = R44;
- LOBYTE(R40) = HIBYTE(v4);
- LOBYTE(R26_) = v4;
+ LOBYTE(R40) = HIBYTE(R44);
+ LOBYTE(R26_) = R44;
}
LOBYTE(R44) = map_tiles_explored[v0 + 8];
- *(uint16 *)((char *)&R8_ + 1) += 4;
- HIBYTE(R44) = *IndirPtr((char *)&R8_ + 1, 0);
+ R9_.addr += 4;
+ HIBYTE(R44) = IndirReadByte(R9_, 0);
if ((uint8)R34 == 32) {
- uint16 v5 = R44;
- HIBYTE(R42) = HIBYTE(v5);
- HIBYTE(R28_) = v5;
+ HIBYTE(R42) = HIBYTE(R44);
+ HIBYTE(R28_) = R44;
} else {
- uint16 v6 = R44;
- LOBYTE(R42) = HIBYTE(v6);
- LOBYTE(R28_) = v6;
+ LOBYTE(R42) = HIBYTE(R44);
+ LOBYTE(R28_) = R44;
}
}
@@ -2697,8 +2684,6 @@ LABEL_3:
return 0;
}
-#define kBeamTilePtrs ((uint16*)RomPtr(0x90c3b1))
-#define kBeamPalettePtrs ((uint16*)RomPtr(0x90c3c9))
void UpdateBeamTilesAndPalette(void) { // 0x90AC8D
uint16 v0 = 2 * (equipped_beams & 0xFFF);
@@ -2723,7 +2708,7 @@ void WriteBeamPalette_Y(uint16 j) { // 0x90ACCD
uint16 v1 = 0;
uint16 v2 = 0;
do {
- palette_buffer[(v2 >> 1) + 224] = *(uint16 *)IndirPtr(&R0_, v1);
+ palette_buffer[(v2 >> 1) + 224] = IndirReadWord(R0_, v1);
v2 += 2;
v1 += 2;
} while ((int16)(v1 - 32) < 0);
@@ -2735,7 +2720,7 @@ void LoadProjectilePalette(uint16 a) { // 0x90ACFC
uint16 v1 = 0;
uint16 v2 = 0;
do {
- palette_buffer[(v2 >> 1) + 224] = *(uint16 *)IndirPtr(&R0_, v1);
+ palette_buffer[(v2 >> 1) + 224] = IndirReadWord(R0_, v1);
v2 += 2;
v1 += 2;
} while ((int16)(v1 - 32) < 0);
@@ -3355,9 +3340,9 @@ void Missile_Func1(uint16 k) { // 0x90B2F6
v3 = R18_ - 0x3CD5;
else
v3 = R18_ - 0x3CFD;
- uint8 *v4 = RomPtr_90(v3);
- projectile_bomb_x_speed[v1] += *(uint16 *)v4;
- projectile_bomb_y_speed[v1] += *((uint16 *)v4 + 1);
+ const uint8 *v4 = RomPtr_90(v3);
+ projectile_bomb_x_speed[v1] += GET_WORD(v4);
+ projectile_bomb_y_speed[v1] += GET_WORD(v4 + 2);
} else {
uint16 v2 = word_90C301 + projectile_variables[v1];
projectile_variables[v1] = v2;
@@ -3372,15 +3357,11 @@ void Missile_Func1(uint16 k) { // 0x90B2F6
}
void SuperMissileBlockCollDetect_Y(void) { // 0x90B366
- int16 v1;
- int16 v2;
- char v3; // t0
-
int v0 = projectile_index >> 1;
if ((projectile_type[v0] & 0xF00) == 512 || (projectile_type[v0] & 0xF00) == 2048) {
uint8 v5 = projectile_variables[v0];
if (*((uint8 *)projectile_variables + projectile_index + 1)) {
- v1 = abs16(projectile_bomb_y_speed[v0]) & 0xFF00;
+ uint16 v1 = abs16(projectile_bomb_y_speed[v0]) & 0xFF00;
if (sign16(v1 - 2816)) {
int v4 = projectile_index >> 1;
if ((projectile_type[v4] & 0xF00) != 2048) {
@@ -3388,10 +3369,7 @@ void SuperMissileBlockCollDetect_Y(void) { // 0x90B366
return;
}
} else {
- v3 = v1;
- LOBYTE(v2) = HIBYTE(v1);
- HIBYTE(v2) = v3;
- R18_ = v2 - 10;
+ R18_ = (v1 >> 8) - 10;
if ((projectile_bomb_y_speed[v0] & 0x8000u) == 0) {
uint16 v6 = projectile_index;
projectile_y_pos[v5 >> 1] = projectile_y_pos[v0] - R18_;
@@ -3424,15 +3402,11 @@ void Projectile_Func4(uint16 k) { // 0x90B4A6
}
void SuperMissileBlockCollDetect_X(void) { // 0x90B406
- int16 v1;
- int16 v2;
- char v3; // t0
-
int v0 = projectile_index >> 1;
if ((projectile_type[v0] & 0xF00) == 512 || (projectile_type[v0] & 0xF00) == 2048) {
uint8 v5 = projectile_variables[v0];
if (*((uint8 *)projectile_variables + projectile_index + 1)) {
- v1 = abs16(projectile_bomb_x_speed[v0]) & 0xFF00;
+ uint16 v1 = abs16(projectile_bomb_x_speed[v0]) & 0xFF00;
if (sign16(v1 - 2816)) {
int v4 = projectile_index >> 1;
if ((projectile_type[v4] & 0xF00) != 2048) {
@@ -3440,10 +3414,7 @@ void SuperMissileBlockCollDetect_X(void) { // 0x90B406
return;
}
} else {
- v3 = v1;
- LOBYTE(v2) = HIBYTE(v1);
- HIBYTE(v2) = v3;
- R18_ = v2 - 10;
+ R18_ = (v1 >> 8) - 10;
if ((projectile_bomb_x_speed[v0] & 0x8000u) == 0) {
uint16 v6 = projectile_index;
projectile_x_pos[v5 >> 1] = projectile_x_pos[v0] - R18_;
@@ -3480,8 +3451,6 @@ void ProjInstr_MoveLeftProjectileTrailUp(uint16 j) { // 0x90B5B3
}
void SpawnProjectileTrail(uint16 k) { // 0x90B657
-#define off_90B5BB ((uint16*)RomPtr(0x90b5bb))
-#define off_90B609 ((uint16*)RomPtr(0x90b609))
int16 v2;
uint16 v1 = projectile_type[k >> 1];
@@ -3549,7 +3518,7 @@ void HandleProjectileTrails(void) { // 0x90B6A9
if (v3)
goto LABEL_10;
for (i = projectiletrail_left_instr_list_ptr[v1]; ; i += 2) {
- uint16 *v5 = (uint16 *)RomPtr_90(i);
+ const uint16 *v5 = (const uint16 *)RomPtr_90(i);
v6 = *v5;
if ((*v5 & 0x8000u) == 0)
break;
@@ -3570,7 +3539,7 @@ LABEL_14:;
if (v15)
goto LABEL_21;
for (j = projectiletrail_right_instr_list_ptr[v13]; ; j += 2) {
- uint16 *v17 = (uint16 *)RomPtr_90(j);
+ const uint16 *v17 = (const uint16 *)RomPtr_90(j);
v18 = *v17;
if ((*v17 & 0x8000u) == 0)
break;
@@ -3904,7 +3873,6 @@ uint8 InitProjectilePositionDirection(void) { // 0x90BA56
}
void HandleChargingBeamGfxAudio(void) { // 0x90BAFC
-#define kFlareAnimDelays ((uint16*)RomPtr(0x90c481))
int16 v1;
int16 v4;
uint16 v9;
@@ -3940,7 +3908,7 @@ void HandleChargingBeamGfxAudio(void) { // 0x90BAFC
QueueSfx1_Max9(8u);
uint16 v0 = 0;
do {
- byte_7E0002 = -112;
+ R0_.bank = -112;
v1 = *(uint16 *)((char *)&flare_animation_timer + v0) - 1;
*(uint16 *)((char *)&flare_animation_timer + v0) = v1;
if (v1 < 0) {
@@ -3948,17 +3916,17 @@ void HandleChargingBeamGfxAudio(void) { // 0x90BAFC
*(uint16 *)((char *)&flare_animation_frame + v0) = v2;
uint16 v3 = v2;
R0_.addr = kFlareAnimDelays[v0 >> 1];
- v4 = *IndirPtr(&R0_, v2);
+ v4 = IndirReadByte(R0_, v2);
if (v4 == 255) {
*(uint16 *)((char *)&flare_animation_frame + v0) = 0;
v3 = 0;
} else if (v4 == 254) {
- R18_ = *IndirPtr(&R0_, v3 + 1);
+ R18_ = IndirReadByte(R0_, v3 + 1);
uint16 v5 = *(uint16 *)((char *)&flare_animation_frame + v0) - R18_;
*(uint16 *)((char *)&flare_animation_frame + v0) = v5;
v3 = v5;
}
- *(uint16 *)((char *)&flare_animation_timer + v0) = *IndirPtr(&R0_, v3);
+ *(uint16 *)((char *)&flare_animation_timer + v0) = IndirReadByte(R0_, v3);
}
v9 = v0;
DrawFlareAnimationComponent(v0);
@@ -3982,7 +3950,7 @@ void DrawFlareAnimationComponent(uint16 k) { // 0x90BBE1
int16 v2;
uint16 v1;
- byte_7E0002 = -109;
+ R0_.bank = -109;
R18_ = *((uint8 *)&flare_animation_frame + k);
if (samus_pose_x_dir == 4)
v1 = word_93A22B[k >> 1];
@@ -4172,9 +4140,6 @@ void ProjectileReflection(void) { // 0x90BE00
}
void HudSelectionHandler_MissilesOrSuperMissiles(void) { // 0x90BE62
- uint16 v2;
- char v6;
-
if ((button_config_shoot_x & joypad1_newkeys) == 0 && (button_config_shoot_x & joypad1_newinput_samusfilter) == 0
|| !(Samus_CanFireSuperMissile() & 1)) {
return;
@@ -4205,12 +4170,9 @@ LABEL_10:;
int v1 = R20_ >> 1;
projectile_timers[v1] = 4;
uint16 v3 = hud_item_index;
- LOBYTE(v2) = HIBYTE(v3);
- v6 = v3;
- HIBYTE(v2) = hud_item_index;
- R18_ = v2;
- projectile_type[v1] |= v2 | 0x8000;
- uint16 v4 = 2 * (v6 & 0xF);
+ R18_ = swap16(hud_item_index);
+ projectile_type[v1] |= R18_ | 0x8000;
+ uint16 v4 = 2 * (v3 & 0xF);
if (!cinematic_function)
QueueSfx1_Max6(kNonBeamProjectile_Sfx[v4 >> 1]);
InitializeProjectileSpeedOfType();
@@ -4259,9 +4221,6 @@ void Missile_Func2(void) { // 0x90BF46
}
void HudSelectionHandler_MorphBall(void) { // 0x90BF9D
- uint16 v3;
- char v6;
-
if ((button_config_shoot_x & joypad1_lastkeys) != 0) {
if (hud_item_index == 3) {
if ((power_bomb_flag & 0x8000u) == 0) {
@@ -4278,13 +4237,11 @@ void HudSelectionHandler_MorphBall(void) { // 0x90BF9D
}
}
R20_ = v2;
- LOBYTE(v3) = HIBYTE(hud_item_index);
- HIBYTE(v3) = hud_item_index;
- R18_ = v3;
+ R18_ = swap16(hud_item_index);
int v4 = v2 >> 1;
- uint16 v5 = v3 | projectile_type[v4];
+ uint16 v5 = R18_ | projectile_type[v4];
projectile_type[v4] = v5;
- v6 = HIBYTE(v5);
+ uint8 v6 = HIBYTE(v5);
projectile_dir[v4] = 0;
projectile_x_pos[v4] = samus_x_pos;
projectile_y_pos[v4] = samus_y_pos;
@@ -4486,7 +4443,7 @@ uint8 SwitchToHudHandler_PowerBombs(void) { // 0x90C577
uint8 SwitchToHudHandler_Grapple(void) { // 0x90C58A
if ((equipped_items & 0x4000) == 0)
return 1;
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_Inactive)) {
Samus_LoadSuitPalette();
flare_counter = 0;
ClearFlareAnimationState();
@@ -4553,7 +4510,7 @@ void Samus_ArmCannon_Draw(void) { // 0x90C663
if (arm_cannon_frame && (!samus_invincibility_timer || (nmi_frame_counter_word & 1) == 0)) {
uint16 v0 = kPlayerPoseToPtr[samus_pose];
- uint8 *v1 = RomPtr_90(v0);
+ const uint8 *v1 = RomPtr_90(v0);
v2 = *v1;
if ((v2 & 0x80) != 0) {
if (samus_anim_frame)
@@ -4566,7 +4523,7 @@ void Samus_ArmCannon_Draw(void) { // 0x90C663
R22_ = v0 + 2;
}
R24_ = kDrawArmCannon_Char[v3 >> 1];
- uint8 *v4 = RomPtr_90(R22_ + 2 * samus_anim_frame);
+ const uint8 *v4 = RomPtr_90(R22_ + 2 * samus_anim_frame);
R18_ = (int8)v4[0];
R20_ = (int8)v4[1];
R22_ = *(&kPoseParams[0].y_offset_to_gfx + (uint16)(8 * samus_pose));
@@ -4586,7 +4543,7 @@ void Samus_ArmCannon_Draw(void) { // 0x90C663
}
}
}
- uint8 *v11 = RomPtr_90(kPlayerPoseToPtr[samus_pose]);
+ const uint8 *v11 = RomPtr_90(kPlayerPoseToPtr[samus_pose]);
v12 = *v11;
if ((v12 & 0x80) != 0) {
if (samus_anim_frame)
@@ -4706,8 +4663,8 @@ uint8 FireSba_FireWave(void) { // 0x90CD1A
uint8 FireSba_FireIce(void) { // 0x90CD9B
static const uint16 kIcePlasmaSbaProjectileOriginAngles[8] = { 0, 0x40, 0x80, 0xc0, 0x20, 0x60, 0xa0, 0xe0 };
- if (projectile_bomb_pre_instructions[0] == (uint16)FUNC16(ProjPreInstr_IceSba2)
- || projectile_bomb_pre_instructions[0] == (uint16)FUNC16(ProjPreInstr_IceSba)) {
+ if (projectile_bomb_pre_instructions[0] == FUNC16(ProjPreInstr_IceSba2)
+ || projectile_bomb_pre_instructions[0] == FUNC16(ProjPreInstr_IceSba)) {
return 0;
}
for (int i = 6; i >= 0; i -= 2) {
@@ -4764,7 +4721,7 @@ uint8 FireSba_FirePlasma(void) { // 0x90CE98
static const uint16 kIcePlasmaSbaProjectileOriginAngles[8] = { 0, 0x40, 0x80, 0xc0, 0x20, 0x60, 0xa0, 0xe0 };
- if (projectile_bomb_pre_instructions[0] == (uint16)FUNC16(ProjPreInstr_PlasmaSba))
+ if (projectile_bomb_pre_instructions[0] == FUNC16(ProjPreInstr_PlasmaSba))
return 0;
for (int i = 6; i >= 0; i -= 2) {
int v2 = i >> 1;
@@ -5064,7 +5021,7 @@ static Func_V *const kSamus_MoveHandler_ShinesparkCrash[3] = { // 0x90D346
void Samus_MoveHandler_ShinesparkCrash(void) {
samus_shine_timer = 15;
- kSamus_MoveHandler_ShinesparkCrash[(uint16)(2 * HIBYTE(speed_echoes_index)) >> 1]();
+ kSamus_MoveHandler_ShinesparkCrash[HIBYTE(speed_echoes_index)]();
for (int i = 2; i >= 0; i -= 2) {
int v1 = i >> 1;
Projectile_SinLookup(speed_echo_xspeed[v1], (uint8)speed_echoes_index);
@@ -5220,7 +5177,7 @@ uint8 Hdmaobj_CrystalFlash(void) { // 0x90D5A2
samus_prev_pose = samus_pose;
*(uint16 *)&samus_prev_pose_x_dir = *(uint16 *)&samus_pose_x_dir;
samus_movement_handler = FUNC16(SamusMoveHandler_CrystalFlashStart);
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(nullsub_152);
timer_for_shinesparks_startstop = 9;
which_item_to_pickup = 0;
@@ -5312,7 +5269,7 @@ void kSamusMoveHandler_CrystalFlashFinish(void) { // 0x90D75B
power_bomb_flag = 0;
samus_shine_timer = -1;
samus_movement_handler = FUNC16(Samus_MovementHandler_Normal);
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D)) {
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D)) {
samus_input_handler = FUNC16(Samus_InputHandler_E913);
samus_invincibility_timer = 0;
samus_knockback_timer = 0;
@@ -5385,10 +5342,6 @@ static const uint16 kBombSpread_Tab2[5] = { 0, 1, 2, 1, 0 };
static const uint16 kBombSpread_Tab3[5] = { 0, 0, 0x8000, 0, 0 };
void ProjPreInstr_SpreadBomb(uint16 k) { // 0x90D8F7
- int16 v13;
- int16 v17;
- uint16 v9;
-
int v1 = k >> 1;
if ((projectile_dir[v1] & 0xF0) != 0) {
ClearProjectile(k);
@@ -5422,13 +5375,11 @@ void ProjPreInstr_SpreadBomb(uint16 k) { // 0x90D8F7
}
k = projectile_index;
int v8 = projectile_index >> 1;
- LOBYTE(v9) = HIBYTE(projectile_bomb_x_speed[v8]);
- HIBYTE(v9) = projectile_bomb_x_speed[v8];
- R20_ = v9 & 0xFF00;
- v9 = (uint8)v9;
- R18_ = v9;
- if ((v9 & 0x80) != 0) {
- R18_ = v9 & 0x7F;
+ uint16 t = projectile_bomb_x_speed[v8];
+ R20_ = t << 8;
+ R18_ = t >> 8;
+ if (t & 0x8000) {
+ R18_ = R18_ & 0x7F;
uint16 v11 = projectile_bomb_x_subpos[v8];
v3 = v11 < R20_;
projectile_bomb_x_subpos[v8] = v11 - R20_;
@@ -5442,26 +5393,22 @@ void ProjPreInstr_SpreadBomb(uint16 k) { // 0x90D8F7
}
if (BlockCollSpreadBomb(k) & 1) {
int v12 = projectile_index >> 1;
- v17 = projectile_bomb_x_speed[v12];
- LOBYTE(v13) = HIBYTE(v17);
- HIBYTE(v13) = v17;
- R20_ = v13 & 0xFF00;
- R18_ = HIBYTE(v17) & 0x7F;
- uint16 v15;
- if (v17 >= 0) {
- projectile_bomb_x_speed[v12] = v17 | 0x8000;
+ uint16 t = projectile_bomb_x_speed[v12];
+ R20_ = t << 8;
+ R18_ = (t >> 8) & 0x7F;
+ if (t & 0x8000) {
+ projectile_bomb_x_speed[v12] = t | 0x8000;
uint16 v16 = projectile_bomb_x_subpos[v12];
bool v3 = v16 < R20_;
projectile_bomb_x_subpos[v12] = v16 - R20_;
- v15 = projectile_x_pos[v12] - (v3 + R18_);
+ projectile_x_pos[v12] -= v3 + R18_;
} else {
- projectile_bomb_x_speed[v12] = v17 & 0x7FFF;
+ projectile_bomb_x_speed[v12] = t & 0x7FFF;
uint16 v14 = projectile_bomb_x_subpos[v12];
bool v3 = __CFADD__uint16(R20_, v14);
projectile_bomb_x_subpos[v12] = R20_ + v14;
- v15 = R18_ + v3 + projectile_x_pos[v12];
+ projectile_x_pos[v12] += R18_ + v3;
}
- projectile_x_pos[v12] = v15;
}
}
@@ -5528,7 +5475,7 @@ void ProjPreInstr_WaveSba(uint16 k) { // 0x90DA08
void BombSpread(void) { // 0x90D849
- if (bomb_functions[0] != (uint16)FUNC16(ProjPreInstr_SpreadBomb)) {
+ if (bomb_functions[0] != FUNC16(ProjPreInstr_SpreadBomb)) {
uint16 v0 = 10;
do {
int v1 = v0 >> 1;
@@ -5753,7 +5700,7 @@ void HudSelectionHandler_Normal(void) { // 0x90DD3D
HudSelectionHandler_TurningAround,
};
uint16 v0;
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_Inactive)) {
if (time_is_frozen_flag)
v0 = 10;
else
@@ -5771,7 +5718,7 @@ void HudSelectionHandler_Grappling(void) { // 0x90DD6F
void HudSelectionHandler_TurningAround(void) { // 0x90DD74
if (new_projectile_direction_changed_pose) {
HudSelectionHandler_Normal();
- } else if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ } else if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)) {
grapple_beam_function = FUNC16(GrappleBeamFunc_Cancel);
}
}
@@ -5783,7 +5730,7 @@ void HudSelectionHandler_CrouchEtcTrans(void) { // 0x90DD8C
if (!sign16(samus_pose - kPose_DB))
return;
if (byte_90DDAA[(uint16)(samus_pose - 53)]) {
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)) {
grapple_beam_function = FUNC16(GrappleBeamFunc_Cancel);
HudSelectionHandler_Normal();
}
@@ -5794,7 +5741,7 @@ LABEL_4:
}
void HudSelectionHandler_JumpEtc(void) { // 0x90DDB6
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)) {
grapple_beam_function = FUNC16(GrappleBeamFunc_Cancel);
HudSelectionHandler_Normal();
}
@@ -5899,7 +5846,7 @@ uint8 Samus_HitInterrupt_Turning(void) { // 0x90DEE2
}
uint8 Samus_HitInterrupt_Falling(void) { // 0x90DEEA
- if (frame_handler_gamma != (uint16)FUNC16(Samus_Func9))
+ if (frame_handler_gamma != FUNC16(Samus_Func9))
return Samus_HitInterrupt_Stand();
samus_special_transgfx_index = 0;
knockback_dir = 0;
@@ -6061,7 +6008,7 @@ static Func_V *const kSamus_MoveHandler_BombJumpMain[4] = { // 0x90E032
void Samus_MoveHandler_BombJumpMain(void) {
if (bomb_jump_dir)
- kSamus_MoveHandler_BombJumpMain[(uint16)(2 * (uint8)bomb_jump_dir) >> 1]();
+ kSamus_MoveHandler_BombJumpMain[(uint8)bomb_jump_dir]();
else
Samus_MoveHandler_BombJumpFunc1();
}
@@ -6081,7 +6028,7 @@ void Samus_VerticalBombJump(void) { // 0x90E066
void Samus_MoveHandler_BombJumpFunc1(void) { // 0x90E07D
samus_movement_handler = FUNC16(Samus_MovementHandler_Normal);
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(Samus_InputHandler_E913);
bomb_jump_dir = 0;
}
@@ -6217,7 +6164,7 @@ void Samus_Func6(void) { // 0x90E21C
}
}
void Samus_GrabbedByDraygonFrameHandler(void) { // 0x90E2A1
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_ConnectedLockedInPlace)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_ConnectedLockedInPlace)) {
samus_new_pose = -1;
samus_momentum_routine_index = 0;
}
@@ -6361,97 +6308,68 @@ void Samus_CalcDisplacementMoveRight(void) { // 0x90E4AD
}
void Samus_CalcSpeed_X(void) { // 0x90E4E6
- int16 v1;
- uint16 v3;
- char v4; // t1
- uint16 v5;
- char v6; // tt
- uint16 v7;
- char v8; // t1
- uint16 v9;
- char v10; // tt
-
uint16 v0 = samus_x_speed_divisor;
if (!sign16(samus_x_speed_divisor - 5))
v0 = 4;
- v1 = 2 * v0;
- if (v1) {
- switch (v1) {
- case 2: {
- bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
- R20_ += samus_x_extra_run_subspeed;
- LOBYTE(v3) = (uint16)(samus_x_extra_run_speed + v2 + R18_) >> 8;
- HIBYTE(v3) = samus_x_extra_run_speed + v2 + R18_;
- v3 >>= 1;
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
- R18_ = (uint8)v3;
- samus_total_x_speed = (uint8)v3;
- R22_ = v3 & 0xFF00;
- R20_ = (v3 & 0xFF00) + (R20_ >> 1);
- samus_total_x_subspeed = R20_;
- break;
- }
- case 4: {
- bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
- R20_ += samus_x_extra_run_subspeed;
- LOBYTE(v5) = (uint16)(samus_x_extra_run_speed + v2 + R18_) >> 8;
- HIBYTE(v5) = samus_x_extra_run_speed + v2 + R18_;
- v5 >>= 2;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R18_ = (uint8)v5;
- samus_total_x_speed = (uint8)v5;
- R22_ = v5 & 0xFF00;
- R20_ = (v5 & 0xFF00) + (R20_ >> 2);
- samus_total_x_subspeed = R20_;
- break;
- }
- case 6: {
- bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
- R20_ += samus_x_extra_run_subspeed;
- LOBYTE(v7) = (uint16)(samus_x_extra_run_speed + v2 + R18_) >> 8;
- HIBYTE(v7) = samus_x_extra_run_speed + v2 + R18_;
- v7 >>= 3;
- v8 = v7;
- LOBYTE(v7) = HIBYTE(v7);
- HIBYTE(v7) = v8;
- R18_ = (uint8)v7;
- samus_total_x_speed = (uint8)v7;
- R22_ = v7 & 0xFF00;
- R20_ = (v7 & 0xFF00) + (R20_ >> 3);
- samus_total_x_subspeed = R20_;
- break;
- }
- case 8: {
- bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
- R20_ += samus_x_extra_run_subspeed;
- LOBYTE(v9) = (uint16)(samus_x_extra_run_speed + v2 + R18_) >> 8;
- HIBYTE(v9) = samus_x_extra_run_speed + v2 + R18_;
- v9 >>= 4;
- v10 = v9;
- LOBYTE(v9) = HIBYTE(v9);
- HIBYTE(v9) = v10;
- R18_ = (uint8)v9;
- samus_total_x_speed = (uint8)v9;
- R22_ = v9 & 0xFF00;
- R20_ = (v9 & 0xFF00) + (R20_ >> 4);
- samus_total_x_subspeed = R20_;
- break;
- }
- default:
- Unreachable();
- while (1)
- ;
- }
- } else {
+ switch (v0) {
+ case 0: {
bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
R20_ += samus_x_extra_run_subspeed;
samus_total_x_subspeed = R20_;
R18_ += samus_x_extra_run_speed + v2;
samus_total_x_speed = R18_;
+ break;
+ }
+ case 1: {
+ bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
+ R20_ += samus_x_extra_run_subspeed;
+ uint16 t = samus_x_extra_run_speed + v2 + R18_;
+ uint16 v3 = swap16(swap16(t) >> 1);
+ R18_ = (uint8)v3;
+ samus_total_x_speed = (uint8)v3;
+ R22_ = v3 & 0xFF00;
+ R20_ = R22_ + (R20_ >> 1);
+ samus_total_x_subspeed = R20_;
+ break;
+ }
+ case 2: {
+ bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
+ R20_ += samus_x_extra_run_subspeed;
+ uint16 t = samus_x_extra_run_speed + v2 + R18_;
+ uint16 v5 = swap16(swap16(t) >> 2);
+ R18_ = (uint8)v5;
+ samus_total_x_speed = (uint8)v5;
+ R22_ = v5 & 0xFF00;
+ R20_ = (v5 & 0xFF00) + (R20_ >> 2);
+ samus_total_x_subspeed = R20_;
+ break;
+ }
+ case 3: {
+ bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
+ R20_ += samus_x_extra_run_subspeed;
+ uint16 t = samus_x_extra_run_speed + v2 + R18_;
+ uint16 v7 = swap16(swap16(t) >> 3);
+ R18_ = (uint8)v7;
+ samus_total_x_speed = (uint8)v7;
+ R22_ = v7 & 0xFF00;
+ R20_ = (v7 & 0xFF00) + (R20_ >> 3);
+ samus_total_x_subspeed = R20_;
+ break;
+ }
+ case 4: {
+ bool v2 = __CFADD__uint16(samus_x_extra_run_subspeed, R20_);
+ R20_ += samus_x_extra_run_subspeed;
+ uint16 t = samus_x_extra_run_speed + v2 + R18_;
+ uint16 v9 = swap16(swap16(t) >> 4);
+ R18_ = (uint8)v9;
+ samus_total_x_speed = (uint8)v9;
+ R22_ = v9 & 0xFF00;
+ R20_ = (v9 & 0xFF00) + (R20_ >> 4);
+ samus_total_x_subspeed = R20_;
+ break;
+ }
+ default:
+ Unreachable();
}
}
@@ -6664,7 +6582,7 @@ void Samus_Func16(void) { // 0x90E86A
void Samus_Func18(void) { // 0x90E8AA
Samus_FrameHandlerBeta_Func17();
- if (frame_handler_gamma == (uint16)FUNC16(DrawTimer_) && game_state != kGameState_35_TimeUp)
+ if (frame_handler_gamma == FUNC16(DrawTimer_) && game_state != kGameState_35_TimeUp)
game_state = kGameState_35_TimeUp;
}
@@ -6877,8 +6795,6 @@ void Samus_JumpCheck(void) { // 0x90EAB3
}
void Samus_Func10(void) { // 0x90EB02
- int16 v0;
-
projectile_init_speed_samus_moved_left = 0;
projectile_init_speed_samus_moved_left_fract = 0;
projectile_init_speed_samus_moved_right = 0;
@@ -6889,9 +6805,7 @@ void Samus_Func10(void) { // 0x90EB02
projectile_init_speed_samus_moved_down_fract = 0;
samus_anim_frame_skip = 0;
new_projectile_direction_changed_pose = 0;
- LOBYTE(v0) = HIBYTE(UNUSED_word_7E0DFA);
- HIBYTE(v0) = UNUSED_word_7E0DFA;
- UNUSED_word_7E0DFA = v0 & 0xFF00;
+ UNUSED_word_7E0DFA <<= 8;
WORD(g_ram[0xa10]) = *(uint16 *)&samus_pose_x_dir;
}
@@ -6949,8 +6863,8 @@ void sub_90EB86(void) { // 0x90EB86
sub_90EB55();
return;
}
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Firing)
- || grapple_beam_function == (uint16)FUNC16(UNUSED_sub_9BC759)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_Firing)
+ || grapple_beam_function == FUNC16(UNUSED_sub_9BC759)) {
GrappleBeamFunc_BF1B();
}
HandleGrappleBeamFlare();
@@ -7326,7 +7240,7 @@ uint8 SamusCode_02_ReachCeresElevator(void) { // 0x90F125
}
uint8 SamusCode_03(void) { // 0x90F152
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)) {
grapple_beam_function = FUNC16(GrappleBeam_Func2);
return 0;
}
@@ -7429,7 +7343,7 @@ uint8 SamusCode_0B_DrawHandlerDefault(void) { // 0x90F295
uint8 SamusCode_0C_UnlockFromMapStation(void) { // 0x90F29E
SamusFunc_E633();
- if (frame_handler_beta == (uint16)FUNC16(j_HandleDemoRecorder_2)) {
+ if (frame_handler_beta == FUNC16(j_HandleDemoRecorder_2)) {
frame_handler_alfa = FUNC16(Samus_FrameHandlerAlfa_Func11);
frame_handler_beta = FUNC16(Samus_FrameHandlerBeta_Func17);
}
@@ -7457,7 +7371,7 @@ uint8 SamusCode_0F_EnableTimerHandling(void) { // 0x90F2D8
}
uint8 SamusCode_10(void) { // 0x90F2E0
- if (frame_handler_beta != (uint16)FUNC16(j_HandleDemoRecorder_2_0)) {
+ if (frame_handler_beta != FUNC16(j_HandleDemoRecorder_2_0)) {
frame_handler_alfa = FUNC16(Samus_FrameHandlerAlfa_Func11);
frame_handler_beta = FUNC16(Samus_FrameHandlerBeta_Func17);
}
@@ -7574,7 +7488,7 @@ uint8 SamusCode_1A(void) { // 0x90F409
}
uint8 SamusCode_1B_CheckedLockSamus(void) { // 0x90F411
- if (frame_handler_beta == (uint16)FUNC16(j_HandleDemoRecorder_2_0))
+ if (frame_handler_beta == FUNC16(j_HandleDemoRecorder_2_0))
return 1;
else
return SamusCode_00_LockSamus();
@@ -7688,8 +7602,8 @@ void Samus_ShootCheck(void) { // 0x90F576
}
}
if (CheckEventHappened(0xEu) & 1
- && frame_handler_gamma == (uint16)FUNC16(DrawTimer_)
+ && frame_handler_gamma == FUNC16(DrawTimer_)
&& game_state != kGameState_35_TimeUp) {
game_state = kGameState_35_TimeUp;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_91.c b/src/sm_91.c
index 7faae2d..cff32f7 100644
--- a/src/sm_91.c
+++ b/src/sm_91.c
@@ -4,6 +4,34 @@
#include "funcs.h"
#include "sm_rtl.h"
+
+#define unk_91CAF2 (*(SpawnHdmaObject_Args*)RomFixedPtr(0x91caf2))
+#define stru_91D2D6 ((XrayBlockData*)RomFixedPtr(0x91d2d6))
+#define stru_91D2D6 ((XrayBlockData*)RomFixedPtr(0x91d2d6))
+#define off_91D727 ((uint16*)RomFixedPtr(0x91d727))
+#define kSamusPalette_HyperBeam ((uint16*)RomFixedPtr(0x91d829))
+#define kSamusPalette_NonPseudoScrew ((uint16*)RomFixedPtr(0x91d7d5))
+#define kSamusPalette_PseudoScrew ((uint16*)RomFixedPtr(0x91d7ff))
+#define word_9BA3C0 ((uint16*)RomFixedPtr(0x9ba3c0))
+#define kSamus_SpeedBoostingPalettes ((uint16*)RomFixedPtr(0x91d998))
+#define kSamus_HyperBeamPalettes ((uint16*)RomFixedPtr(0x91d99e))
+#define kSamusPal_ScrewAttack ((uint16*)RomFixedPtr(0x91da4a))
+#define kSamusPal_SpeedBoost ((uint16*)RomFixedPtr(0x91daa9))
+#define kSamusPal_SpeedBoostShine ((uint16*)RomFixedPtr(0x91db10))
+#define kSamusPal_Shinespark ((uint16*)RomFixedPtr(0x91db75))
+#define stru_91DC00 ((SamusCrystalFlashPalTable*)RomFixedPtr(0x91dc00))
+#define off_91DC28 ((uint16*)RomFixedPtr(0x91dc28))
+#define word_91E921 ((uint16*)RomFixedPtr(0x91e921))
+#define word_91E9F3 ((uint16*)RomFixedPtr(0x91e9f3))
+#define word_91EB74 ((uint16*)RomFixedPtr(0x91eb74))
+#define kSamusTurnPose_Standing ((uint8*)RomFixedPtr(0x91f9c2))
+#define kSamusTurnPose_Crouching ((uint8*)RomFixedPtr(0x91f9cc))
+#define kSamusTurnPose_Jumping ((uint8*)RomFixedPtr(0x91f9d6))
+#define kSamusTurnPose_Falling ((uint8*)RomFixedPtr(0x91f9e0))
+#define kSamusTurnPose_Moonwalk ((uint8*)RomFixedPtr(0x91f9ea))
+
+
+
static Func_V *const kSamusInputHandlers[28] = {
Samus_Input_00_Standing,
Samus_Input_01_Running,
@@ -376,9 +404,9 @@ void ProcessDemoInputObject(void) { // 0x9183F2
return;
}
demo_input_instr_timer = *v1;
- uint8 *v3 = RomPtr_91(v0);
- demo_input = *((uint16 *)v3 + 1);
- demo_input_new = *((uint16 *)v3 + 2);
+ const uint8 *v3 = RomPtr_91(v0);
+ demo_input = GET_WORD(v3 + 2);
+ demo_input_new = GET_WORD(v3 + 4);
demo_input_instr_ptr = v0 + 6;
}
}
@@ -637,12 +665,9 @@ static Func_V *const kXrayHdmaFuncs[5] = { // 0x91BE11
};
void CalculateXrayHdmaTable_OriginOffScreen(uint16 k, uint16 j) {
- int16 v2;
- uint16 v3;
+ int v3;
- LOBYTE(v2) = HIBYTE(k);
- HIBYTE(v2) = k;
- R22_ = v2 & 0xFF00;
+ R22_ = (k << 8);
R24_ = j;
R26_ = R18_ - R20_;
R26_ += (R26_ & 0x8000u) != 0 ? 0x100 : 0;
@@ -677,11 +702,11 @@ LABEL_16:;
uint16 v4 = R26_;
if (!sign16(R26_ - 128))
v4 = R26_ - 128;
- g_word_7E001E = kTanTable[v4];
+ R30_ = kTanTable[v4];
uint16 v5 = R28_;
if (!sign16(R28_ - 128))
v5 = R28_ - 128;
- R32 = kTanTable[v5];
+ R32_ = kTanTable[v5];
kXrayHdmaFuncs[v3 >> 1]();
}
@@ -693,8 +718,8 @@ void XrayHdmaFunc_BeamAimedR(void) { // 0x91BEC2
R34 = R22_;
R36 = R22_;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
v0 -= 2;
@@ -703,28 +728,28 @@ void XrayHdmaFunc_BeamAimedR(void) { // 0x91BEC2
goto LABEL_10;
}
}
- IndirWriteWord(&R0_, v0, HIBYTE(R34) | 0xFF00);
+ IndirWriteWord(R0_, v0, HIBYTE(R34) | 0xFF00);
R18_ = v0 + 2;
v2 = v0 - 2;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteWord(&R0_, v2, HIBYTE(R34) | 0xFF00);
+ IndirWriteWord(R0_, v2, HIBYTE(R34) | 0xFF00);
v2 -= 2;
if (v2 < 0)
goto LABEL_10;
}
do {
- IndirWriteWord(&R0_, v2, 0xFF);
+ IndirWriteWord(R0_, v2, 0xFF);
v2 -= 2;
} while (v2 >= 0);
LABEL_10:;
uint16 v3 = 2 * R24_;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
v3 += 2;
@@ -733,29 +758,29 @@ LABEL_10:;
goto LABEL_19;
}
}
- IndirWriteWord(&R0_, v3, HIBYTE(R36) | 0xFF00);
+ IndirWriteWord(R0_, v3, HIBYTE(R36) | 0xFF00);
R20_ = v3 - 2;
uint16 v4;
v4 = v3 - 2 + 4;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteWord(&R0_, v4, HIBYTE(R36) | 0xFF00);
+ IndirWriteWord(R0_, v4, HIBYTE(R36) | 0xFF00);
v4 += 2;
if ((int16)(v4 - 460) >= 0)
goto LABEL_19;
}
do {
- IndirWriteWord(&R0_, v4, 0xFF);
+ IndirWriteWord(R0_, v4, 0xFF);
v4 += 2;
} while ((int16)(v4 - 460) < 0);
LABEL_19:;
uint16 v5 = R18_;
do {
do {
- IndirWriteWord(&R0_, v5, 0xFF00);
+ IndirWriteWord(R0_, v5, 0xFF00);
v5 += 2;
} while ((int16)(v5 - R20_) < 0);
} while (v5 == R20_);
@@ -769,8 +794,8 @@ void XrayHdmaFunc_BeamAimedL(void) { // 0x91BF72
R34 = R22_;
R36 = R22_;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
v0 -= 2;
@@ -779,28 +804,28 @@ void XrayHdmaFunc_BeamAimedL(void) { // 0x91BF72
goto LABEL_10;
}
}
- IndirWriteWord(&R0_, v0, R36 & 0xFF00);
+ IndirWriteWord(R0_, v0, R36 & 0xFF00);
R18_ = v0 + 2;
v2 = v0 - 2;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteWord(&R0_, v2, R36 & 0xFF00);
+ IndirWriteWord(R0_, v2, R36 & 0xFF00);
v2 -= 2;
if (v2 < 0)
goto LABEL_10;
}
do {
- IndirWriteWord(&R0_, v2, 0xFF);
+ IndirWriteWord(R0_, v2, 0xFF);
v2 -= 2;
} while (v2 >= 0);
LABEL_10:;
uint16 v3 = 2 * R24_;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
v3 += 2;
@@ -809,29 +834,29 @@ LABEL_10:;
goto LABEL_19;
}
}
- IndirWriteWord(&R0_, v3, R34 & 0xFF00);
+ IndirWriteWord(R0_, v3, R34 & 0xFF00);
R20_ = v3 - 2;
uint16 v4;
v4 = v3 - 2 + 4;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteWord(&R0_, v4, R34 & 0xFF00);
+ IndirWriteWord(R0_, v4, R34 & 0xFF00);
v4 += 2;
if ((int16)(v4 - 460) >= 0)
goto LABEL_19;
}
do {
- IndirWriteWord(&R0_, v4, 0xFF);
+ IndirWriteWord(R0_, v4, 0xFF);
v4 += 2;
} while ((int16)(v4 - 460) < 0);
LABEL_19:;
uint16 v5 = R18_;
do {
do {
- IndirWriteWord(&R0_, v5, 0xFF00);
+ IndirWriteWord(R0_, v5, 0xFF00);
v5 += 2;
} while ((int16)(v5 - R20_) < 0);
} while (v5 == R20_);
@@ -858,7 +883,7 @@ void XrayHdmaFunc_BeamAimedU(void) {
off_91C063[v0 >> 1](2 * (R24_ - 1));
uint16 v1 = R18_;
do {
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 += 2;
} while ((int16)(v1 - 460) < 0);
}
@@ -871,8 +896,8 @@ void XrayHdmaFunc_BeamAimedUUR(uint16 v0) { // 0x91C069
v6 = v0;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
v0 -= 2;
@@ -881,22 +906,22 @@ void XrayHdmaFunc_BeamAimedUUR(uint16 v0) { // 0x91C069
goto LABEL_12;
}
}
- IndirWriteByte(&R0_, v0, HIBYTE(R34));
+ IndirWriteByte(R0_, v0, HIBYTE(R34));
v2 = v0 - 2;
if (v2 >= 0) {
R18_ = v2 + 4;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 -= 2;
if (v2 < 0)
goto LABEL_12;
}
do {
- IndirWriteByte(&R0_, v2, 0xFF);
+ IndirWriteByte(R0_, v2, 0xFF);
v2 -= 2;
} while (v2 >= 0);
} else {
@@ -905,8 +930,8 @@ void XrayHdmaFunc_BeamAimedUUR(uint16 v0) { // 0x91C069
LABEL_12:
v3 = v6 + 1;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
v3 -= 2;
@@ -915,22 +940,22 @@ LABEL_12:
goto LABEL_23;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R36));
+ IndirWriteByte(R0_, v3, HIBYTE(R36));
v4 = v3 - 2;
if (v4 >= 0) {
R20_ = v4 + 4;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R36));
+ IndirWriteByte(R0_, v4, HIBYTE(R36));
v4 -= 2;
if (v4 < 0)
goto LABEL_23;
}
do {
- IndirWriteByte(&R0_, v4, 0xFF);
+ IndirWriteByte(R0_, v4, 0xFF);
v4 -= 2;
} while (v4 >= 0);
} else {
@@ -939,7 +964,7 @@ LABEL_12:
LABEL_23:;
uint16 v5 = R18_;
do {
- IndirWriteByte(&R0_, v5, 0);
+ IndirWriteByte(R0_, v5, 0);
v5 += 2;
} while ((int16)(v5 - R20_) < 0);
R18_ = R20_ - 1;
@@ -952,8 +977,8 @@ void XrayHdmaFunc_BeamAimedUU(uint16 j) { // 0x91C123
uint16 v5 = j;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
j -= 2;
@@ -962,22 +987,22 @@ void XrayHdmaFunc_BeamAimedUU(uint16 j) { // 0x91C123
goto LABEL_12;
}
}
- IndirWriteByte(&R0_, j, HIBYTE(R34));
+ IndirWriteByte(R0_, j, HIBYTE(R34));
v2 = j - 2;
if (v2 >= 0) {
R18_ = v2 + 4;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 -= 2;
if (v2 < 0)
goto LABEL_12;
}
do {
- IndirWriteByte(&R0_, v2, 0);
+ IndirWriteByte(R0_, v2, 0);
v2 -= 2;
} while (v2 >= 0);
} else {
@@ -986,8 +1011,8 @@ void XrayHdmaFunc_BeamAimedUU(uint16 j) { // 0x91C123
LABEL_12:
v3 = v5 + 1;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
v3 -= 2;
@@ -996,22 +1021,22 @@ LABEL_12:
return;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R36));
+ IndirWriteByte(R0_, v3, HIBYTE(R36));
v4 = v3 - 2;
if (v4 >= 0) {
R20_ = v4 + 4;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R36));
+ IndirWriteByte(R0_, v4, HIBYTE(R36));
v4 -= 2;
if (v4 < 0)
return;
}
do {
- IndirWriteByte(&R0_, v4, 0xFF);
+ IndirWriteByte(R0_, v4, 0xFF);
v4 -= 2;
} while (v4 >= 0);
} else {
@@ -1026,8 +1051,8 @@ void XrayHdmaFunc_BeamAimedUUL(uint16 j) { // 0x91C1CA
uint16 v6 = j;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
j -= 2;
@@ -1036,22 +1061,22 @@ void XrayHdmaFunc_BeamAimedUUL(uint16 j) { // 0x91C1CA
goto LABEL_12;
}
}
- IndirWriteByte(&R0_, j, HIBYTE(R34));
+ IndirWriteByte(R0_, j, HIBYTE(R34));
v2 = j - 2;
if (v2 >= 0) {
R18_ = v2 + 4;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 -= 2;
if (v2 < 0)
goto LABEL_12;
}
do {
- IndirWriteByte(&R0_, v2, 0);
+ IndirWriteByte(R0_, v2, 0);
v2 -= 2;
} while (v2 >= 0);
} else {
@@ -1060,8 +1085,8 @@ void XrayHdmaFunc_BeamAimedUUL(uint16 j) { // 0x91C1CA
LABEL_12:
v3 = v6 + 1;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
v3 -= 2;
@@ -1070,22 +1095,22 @@ LABEL_12:
goto LABEL_23;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R34));
+ IndirWriteByte(R0_, v3, HIBYTE(R34));
v4 = v3 - 2;
if (v4 >= 0) {
R20_ = v4 + 4;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R36));
+ IndirWriteByte(R0_, v4, HIBYTE(R36));
v4 -= 2;
if (v4 < 0)
goto LABEL_23;
}
do {
- IndirWriteByte(&R0_, v4, 0);
+ IndirWriteByte(R0_, v4, 0);
v4 -= 2;
} while (v4 >= 0);
} else {
@@ -1094,7 +1119,7 @@ LABEL_12:
LABEL_23:;
uint16 v5 = R20_;
do {
- IndirWriteByte(&R0_, v5, 0xFF);
+ IndirWriteByte(R0_, v5, 0xFF);
v5 += 2;
} while ((int16)(v5 - R18_) < 0);
}
@@ -1121,7 +1146,7 @@ void XrayHdmaFunc_BeamAimedD(void) {
off_91C2B7[v0 >> 1](R24_ * 2);
v1 = R18_;
do {
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 -= 2;
} while (v1 >= 0);
}
@@ -1129,8 +1154,8 @@ void XrayHdmaFunc_BeamAimedD(void) {
void XrayHdmaFunc_BeamAimedDDR(uint16 j) { // 0x91C2BD
uint16 v6 = j;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
j += 2;
@@ -1139,23 +1164,23 @@ void XrayHdmaFunc_BeamAimedDDR(uint16 j) { // 0x91C2BD
goto LABEL_12;
}
}
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
uint16 v2;
v2 = j + 2;
if ((int16)(v2 - 460) < 0) {
R18_ = v2 - 4;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteWord(&R0_, v2, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, v2, *(uint16 *)((char *)&R36 + 1));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
goto LABEL_12;
}
do {
- IndirWriteWord(&R0_, v2, 0xFF);
+ IndirWriteWord(R0_, v2, 0xFF);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
} else {
@@ -1164,8 +1189,8 @@ void XrayHdmaFunc_BeamAimedDDR(uint16 j) { // 0x91C2BD
LABEL_12:;
uint16 v3 = v6 + 1;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
v3 += 2;
@@ -1174,23 +1199,23 @@ LABEL_12:;
goto LABEL_23;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R34));
+ IndirWriteByte(R0_, v3, HIBYTE(R34));
uint16 v4;
v4 = v3 + 2;
if ((int16)(v4 - 460) < 0) {
R20_ = v4 - 4;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R34));
+ IndirWriteByte(R0_, v4, HIBYTE(R34));
v4 += 2;
if ((int16)(v4 - 460) >= 0)
goto LABEL_23;
}
do {
- IndirWriteByte(&R0_, v4, 0xFF);
+ IndirWriteByte(R0_, v4, 0xFF);
v4 += 2;
} while ((int16)(v4 - 460) < 0);
} else {
@@ -1199,7 +1224,7 @@ LABEL_12:;
LABEL_23:;
uint16 v5 = R18_;
do {
- IndirWriteByte(&R0_, v5, 0);
+ IndirWriteByte(R0_, v5, 0);
v5 -= 2;
} while ((int16)(v5 - R20_) >= 0);
R18_ = R20_ - 1;
@@ -1207,10 +1232,10 @@ LABEL_23:;
void XrayHdmaFunc_BeamAimedDD(uint16 j) { // 0x91C381
uint16 v5 = j;
- if (R32) {
+ if (R32_) {
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
j += 2;
@@ -1219,22 +1244,22 @@ void XrayHdmaFunc_BeamAimedDD(uint16 j) { // 0x91C381
goto LABEL_15;
}
}
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
uint16 v2 = j + 2;
if ((int16)(v2 - 460) < 0) {
R18_ = v2 - 4;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteWord(&R0_, v2, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, v2, *(uint16 *)((char *)&R36 + 1));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
goto LABEL_15;
}
do {
- IndirWriteWord(&R0_, v2, 0);
+ IndirWriteWord(R0_, v2, 0);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
} else {
@@ -1243,15 +1268,15 @@ void XrayHdmaFunc_BeamAimedDD(uint16 j) { // 0x91C381
} else {
R18_ = j;
do {
- IndirWriteWord(&R0_, j, 0);
+ IndirWriteWord(R0_, j, 0);
j += 2;
} while ((int16)(j - 460) < 0);
}
LABEL_15:;
uint16 v3 = v5 + 1;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
v3 += 2;
@@ -1260,22 +1285,22 @@ LABEL_15:;
return;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R34));
+ IndirWriteByte(R0_, v3, HIBYTE(R34));
uint16 v4 = v3 + 2;
if ((int16)(v4 - 460) < 0) {
R20_ = v4 - 4;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R34));
+ IndirWriteByte(R0_, v4, HIBYTE(R34));
v4 += 2;
if ((int16)(v4 - 460) >= 0)
return;
}
do {
- IndirWriteByte(&R0_, v4, 0xFF);
+ IndirWriteByte(R0_, v4, 0xFF);
v4 += 2;
} while ((int16)(v4 - 460) < 0);
} else {
@@ -1286,8 +1311,8 @@ LABEL_15:;
void XrayHdmaFunc_BeamAimedDDL(uint16 j) { // 0x91C446
uint16 v6 = j;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
j += 2;
@@ -1296,23 +1321,23 @@ void XrayHdmaFunc_BeamAimedDDL(uint16 j) { // 0x91C446
goto LABEL_12;
}
}
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
uint16 v2;
v2 = j + 2;
if ((int16)(v2 - 460) < 0) {
R18_ = v2 - 4;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteWord(&R0_, v2, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, v2, *(uint16 *)((char *)&R36 + 1));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
goto LABEL_12;
}
do {
- IndirWriteWord(&R0_, v2, 0);
+ IndirWriteWord(R0_, v2, 0);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
} else {
@@ -1321,8 +1346,8 @@ void XrayHdmaFunc_BeamAimedDDL(uint16 j) { // 0x91C446
LABEL_12:;
uint16 v3 = v6 + 1;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
v3 += 2;
@@ -1331,23 +1356,23 @@ LABEL_12:;
goto LABEL_23;
}
}
- IndirWriteByte(&R0_, v3, HIBYTE(R34));
+ IndirWriteByte(R0_, v3, HIBYTE(R34));
uint16 v4;
v4 = v3 + 2;
if ((int16)(v4 - 460) < 0) {
R20_ = v4 - 4;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, v4, HIBYTE(R34));
+ IndirWriteByte(R0_, v4, HIBYTE(R34));
v4 += 2;
if ((int16)(v4 - 460) >= 0)
goto LABEL_23;
}
do {
- IndirWriteByte(&R0_, v4, 0);
+ IndirWriteByte(R0_, v4, 0);
v4 += 2;
} while ((int16)(v4 - 460) < 0);
} else {
@@ -1356,7 +1381,7 @@ LABEL_12:;
LABEL_23:;
uint16 v5 = R20_;
do {
- IndirWriteByte(&R0_, v5, 0xFF);
+ IndirWriteByte(R0_, v5, 0xFF);
v5 -= 2;
} while ((int16)(v5 - R18_) >= 0);
}
@@ -1365,30 +1390,27 @@ void XrayHdmaFunc_BeamHoriz(void) { // 0x91C505
int16 v1;
uint16 v0 = 2 * (R24_ - 1);
- IndirWriteWord(&R0_, v0, 0xFF00);
+ IndirWriteWord(R0_, v0, 0xFF00);
v1 = v0 - 2;
do {
- if (*(uint16 *)IndirPtr(&R0_, v1) == 255)
+ if (IndirReadWord(R0_, v1) == 255)
break;
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 -= 2;
} while (v1 >= 0);
uint16 v2 = 2 * R24_;
do {
- if (*(uint16 *)IndirPtr(&R0_, v2) == 255)
+ if (IndirReadWord(R0_, v2) == 255)
break;
- IndirWriteWord(&R0_, v2, 0xFF);
+ IndirWriteWord(R0_, v2, 0xFF);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
}
void CalculateXrayHdmaTable_OriginOnScreen(uint16 k, uint16 j) { // 0x91C54B
- int16 v2;
- uint16 v3;
+ int v3;
- LOBYTE(v2) = HIBYTE(k);
- HIBYTE(v2) = k;
- R22_ = v2 & 0xFF00;
+ R22_ = k << 8;
R24_ = j;
R26_ = R18_ - R20_;
R26_ += (R26_ & 0x8000u) != 0 ? 0x100 : 0;
@@ -1423,11 +1445,11 @@ LABEL_16:;
uint16 v4 = R26_;
if (!sign16(R26_ - 128))
v4 = R26_ - 128;
- g_word_7E001E = kTanTable[v4];
+ R30_ = kTanTable[v4];
uint16 v5 = R28_;
if (!sign16(R28_ - 128))
v5 = R28_ - 128;
- R32 = kTanTable[v5];
+ R32_ = kTanTable[v5];
grapple_beam_unkD1E = 0;
static Func_V *const kXrayHdmaOnScreen_Funcs[5] = {
XrayHdmaOnScreen_BeamAimedR,
@@ -1444,38 +1466,38 @@ void XrayHdmaOnScreen_BeamAimedR(void) { // 0x91C5FF
int16 v1;
uint16 v0 = 2 * (R24_ - 1);
- IndirWriteWord(&R0_, v0, HIBYTE(R22_) | 0xFF00);
+ IndirWriteWord(R0_, v0, HIBYTE(R22_) | 0xFF00);
v1 = v0 - 2;
R34 = R22_;
R36 = R22_;
while (1) {
- bool v2 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v2 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v2)
break;
- IndirWriteWord(&R0_, v1, HIBYTE(R34) | 0xFF00);
+ IndirWriteWord(R0_, v1, HIBYTE(R34) | 0xFF00);
v1 -= 2;
if (v1 < 0)
goto LABEL_6;
}
do {
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 -= 2;
} while (v1 >= 0);
LABEL_6:;
uint16 v3 = 2 * R24_;
while (1) {
- bool v2 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v2 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v2)
break;
- IndirWriteWord(&R0_, v3, HIBYTE(R36) | 0xFF00);
+ IndirWriteWord(R0_, v3, HIBYTE(R36) | 0xFF00);
v3 += 2;
if ((int16)(v3 - 460) >= 0)
return;
}
do {
- IndirWriteWord(&R0_, v3, 0xFF);
+ IndirWriteWord(R0_, v3, 0xFF);
v3 += 2;
} while ((int16)(v3 - 460) < 0);
}
@@ -1484,46 +1506,46 @@ void XrayHdmaOnScreen_BeamAimedL(void) { // 0x91C660
int16 v1;
uint16 v0 = 2 * (R24_ - 1);
- IndirWriteWord(&R0_, v0, R22_ & 0xFF00);
+ IndirWriteWord(R0_, v0, R22_ & 0xFF00);
v1 = v0 - 2;
R34 = R22_;
R36 = R22_;
while (1) {
- bool v2 = R36 >= R32;
- R36 -= R32;
+ bool v2 = R36 >= R32_;
+ R36 -= R32_;
if (!v2)
break;
- IndirWriteWord(&R0_, v1, R36 & 0xFF00);
+ IndirWriteWord(R0_, v1, R36 & 0xFF00);
v1 -= 2;
if (v1 < 0)
goto LABEL_6;
}
do {
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 -= 2;
} while (v1 >= 0);
LABEL_6:;
uint16 v3 = 2 * R24_;
while (1) {
- bool v2 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v2 = R34 >= R30_;
+ R34 -= R30_;
if (!v2)
break;
- IndirWriteWord(&R0_, v3, R34 & 0xFF00);
+ IndirWriteWord(R0_, v3, R34 & 0xFF00);
v3 += 2;
if ((int16)(v3 - 460) >= 0)
return;
}
do {
- IndirWriteWord(&R0_, v3, 0xFF);
+ IndirWriteWord(R0_, v3, 0xFF);
v3 += 2;
} while ((int16)(v3 - 460) < 0);
}
void XrayHdmaOnScreen_BeamAimedU(void) { // 0x91C6C1
uint16 v0 = 2 * (R24_ - 1);
- IndirWriteByte(&R0_, v0++, HIBYTE(R22_));
- IndirWriteByte(&R0_, v0, HIBYTE(R22_));
+ IndirWriteByte(R0_, v0++, HIBYTE(R22_));
+ IndirWriteByte(R0_, v0, HIBYTE(R22_));
uint16 v1 = v0 - 3;
uint16 v2;
R34 = R22_;
@@ -1543,9 +1565,9 @@ void XrayHdmaOnScreen_BeamAimedU(void) { // 0x91C6C1
off_91C716[v2 >> 1](v1);
uint16 v3 = 2 * R24_;
do {
- if (*(uint16 *)IndirPtr(&R0_, v3) == 255)
+ if (IndirReadWord(R0_, v3) == 255)
break;
- IndirWriteWord(&R0_, v3, 0xFF);
+ IndirWriteWord(R0_, v3, 0xFF);
v3 += 2;
} while ((int16)(v3 - 460) < 0);
}
@@ -1556,39 +1578,39 @@ void XrayHdmaOnScreen_BeamAimedUUR(uint16 v0) { // 0x91C71C
v4 = v0;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v0, HIBYTE(R34));
+ IndirWriteByte(R0_, v0, HIBYTE(R34));
v0 -= 2;
if ((v0 & 0x8000u) != 0)
goto LABEL_7;
}
grapple_beam_unkD1E = v0;
do {
- IndirWriteByte(&R0_, v0, 0xFF);
+ IndirWriteByte(R0_, v0, 0xFF);
v0 -= 2;
} while ((v0 & 0x8000u) == 0);
LABEL_7:
v2 = v4 + 1;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R36));
+ IndirWriteByte(R0_, v2, HIBYTE(R36));
v2 -= 2;
if (v2 < 0)
return;
}
do {
- IndirWriteByte(&R0_, v2, 0xFF);
+ IndirWriteByte(R0_, v2, 0xFF);
v2 -= 2;
} while (v2 >= 0);
if (grapple_beam_unkD1E) {
for (int i = grapple_beam_unkD1E - 2; i >= 0; i -= 2)
- IndirWriteWord(&R0_, i, 0xFF);
+ IndirWriteWord(R0_, i, 0xFF);
}
}
@@ -1598,33 +1620,33 @@ void XrayHdmaOnScreen_BeamAimedUU(uint16 v0) { // 0x91C77F
v3 = v0;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, v0, HIBYTE(R34));
+ IndirWriteByte(R0_, v0, HIBYTE(R34));
v0 -= 2;
if (v0 < 0)
goto LABEL_6;
}
do {
- IndirWriteByte(&R0_, v0, 0);
+ IndirWriteByte(R0_, v0, 0);
v0 -= 2;
} while (v0 >= 0);
LABEL_6:
v2 = v3 + 1;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R36));
+ IndirWriteByte(R0_, v2, HIBYTE(R36));
v2 -= 2;
if (v2 < 0)
return;
}
do {
- IndirWriteByte(&R0_, v2, 0xFF);
+ IndirWriteByte(R0_, v2, 0xFF);
v2 -= 2;
} while (v2 >= 0);
}
@@ -1636,39 +1658,39 @@ void XrayHdmaOnScreen_BeamAimedUUL(uint16 j) { // 0x91C7CB
uint16 v4 = j;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, j, HIBYTE(R34));
+ IndirWriteByte(R0_, j, HIBYTE(R34));
j -= 2;
if ((j & 0x8000u) != 0)
goto LABEL_6;
}
do {
- IndirWriteByte(&R0_, j, 0);
+ IndirWriteByte(R0_, j, 0);
j -= 2;
} while ((j & 0x8000u) == 0);
LABEL_6:
v2 = v4 + 1;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R36));
+ IndirWriteByte(R0_, v2, HIBYTE(R36));
v2 -= 2;
if (v2 < 0)
return;
}
v5 = v2;
do {
- IndirWriteByte(&R0_, v2, 0);
+ IndirWriteByte(R0_, v2, 0);
v2 -= 2;
} while (v2 >= 0);
v3 = v5 - 1;
do {
- IndirWriteByte(&R0_, v3, 0xFF);
+ IndirWriteByte(R0_, v3, 0xFF);
v3 -= 2;
} while (v3 >= 0);
}
@@ -1678,8 +1700,8 @@ void XrayHdmaOnScreen_BeamAimedD(void) { // 0x91C822
uint16 v2;
uint16 v0 = 2 * (R24_ - 1);
- IndirWriteByte(&R0_, v0++, HIBYTE(R22_));
- IndirWriteByte(&R0_, v0, HIBYTE(R22_));
+ IndirWriteByte(R0_, v0++, HIBYTE(R22_));
+ IndirWriteByte(R0_, v0, HIBYTE(R22_));
uint16 v1 = v0 + 1;
R34 = R22_;
R36 = R22_;
@@ -1698,9 +1720,9 @@ void XrayHdmaOnScreen_BeamAimedD(void) { // 0x91C822
off_91C874[v2 >> 1](v1);
v3 = 2 * (R24_ - 2);
do {
- if (*(uint16 *)IndirPtr(&R0_, v3) == 255)
+ if (IndirReadWord(R0_, v3) == 255)
break;
- IndirWriteWord(&R0_, v3, 0xFF);
+ IndirWriteWord(R0_, v3, 0xFF);
v3 -= 2;
} while (v3 >= 0);
}
@@ -1708,41 +1730,41 @@ void XrayHdmaOnScreen_BeamAimedD(void) { // 0x91C822
void XrayHdmaOnScreen_BeamAimedDDR(uint16 j) { // 0x91C87A
uint16 v4 = j;
while (1) {
- bool v1 = __CFADD__uint16(R32, R36);
- R36 += R32;
+ bool v1 = __CFADD__uint16(R32_, R36);
+ R36 += R32_;
if (v1)
break;
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
j += 2;
if ((int16)(j - 460) >= 0)
goto LABEL_7;
}
grapple_beam_unkD1E = j;
do {
- IndirWriteWord(&R0_, j, 0xFF);
+ IndirWriteWord(R0_, j, 0xFF);
j += 2;
} while ((int16)(j - 460) < 0);
LABEL_7:;
uint16 v2 = v4 + 1;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
return;
}
do {
- IndirWriteByte(&R0_, v2, 0xFF);
+ IndirWriteByte(R0_, v2, 0xFF);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
if (grapple_beam_unkD1E) {
uint16 v3 = grapple_beam_unkD1E + 2;
if ((int16)(grapple_beam_unkD1E - 458) < 0) {
do {
- IndirWriteWord(&R0_, v3, 0xFF);
+ IndirWriteWord(R0_, v3, 0xFF);
v3 += 2;
} while ((int16)(v3 - 460) < 0);
}
@@ -1752,33 +1774,33 @@ LABEL_7:;
void XrayHdmaOnScreen_BeamAimedDD(uint16 j) { // 0x91C8E8
uint16 v3 = j;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
j += 2;
if ((int16)(j - 460) >= 0)
goto LABEL_6;
}
do {
- IndirWriteWord(&R0_, j, 0);
+ IndirWriteWord(R0_, j, 0);
j += 2;
} while ((int16)(j - 460) < 0);
LABEL_6:;
uint16 v2 = v3 + 1;
while (1) {
- bool v1 = __CFADD__uint16(g_word_7E001E, R34);
- R34 += g_word_7E001E;
+ bool v1 = __CFADD__uint16(R30_, R34);
+ R34 += R30_;
if (v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
return;
}
do {
- IndirWriteByte(&R0_, v2, 0xFF);
+ IndirWriteByte(R0_, v2, 0xFF);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
}
@@ -1786,39 +1808,39 @@ LABEL_6:;
void XrayHdmaOnScreen_BeamAimedDDL(uint16 j) { // 0x91C939
uint16 v4 = j;
while (1) {
- bool v1 = R36 >= R32;
- R36 -= R32;
+ bool v1 = R36 >= R32_;
+ R36 -= R32_;
if (!v1)
break;
- IndirWriteWord(&R0_, j, *(uint16 *)((char *)&R36 + 1));
+ IndirWriteWord(R0_, j, *(uint16 *)((char *)&R36 + 1));
j += 2;
if ((int16)(j - 460) >= 0)
goto LABEL_6;
}
do {
- IndirWriteWord(&R0_, j, 0);
+ IndirWriteWord(R0_, j, 0);
j += 2;
} while ((int16)(j - 460) < 0);
LABEL_6:;
uint16 v2 = v4 + 1;
while (1) {
- bool v1 = R34 >= g_word_7E001E;
- R34 -= g_word_7E001E;
+ bool v1 = R34 >= R30_;
+ R34 -= R30_;
if (!v1)
break;
- IndirWriteByte(&R0_, v2, HIBYTE(R34));
+ IndirWriteByte(R0_, v2, HIBYTE(R34));
v2 += 2;
if ((int16)(v2 - 460) >= 0)
return;
}
uint16 v5 = v2;
do {
- IndirWriteByte(&R0_, v2, 0);
+ IndirWriteByte(R0_, v2, 0);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
uint16 v3 = v5 - 1;
do {
- IndirWriteByte(&R0_, v3, 0xFF);
+ IndirWriteByte(R0_, v3, 0xFF);
v3 += 2;
} while ((int16)(v3 - 460) < 0);
}
@@ -1828,23 +1850,22 @@ void XrayHdmaOnScreen_BeamHoriz(void) { // 0x91C998
uint16 v0 = 2 * (R24_ - 1);
if (R18_ == 64)
- IndirWriteWord(&R0_, v0, HIBYTE(R22_) | 0xFF00);
+ IndirWriteWord(R0_, v0, HIBYTE(R22_) | 0xFF00);
else
- IndirWriteWord(&R0_, v0, R22_ & 0xFF00);
+ IndirWriteWord(R0_, v0, R22_ & 0xFF00);
v1 = v0 - 2;
do {
- IndirWriteWord(&R0_, v1, 0xFF);
+ IndirWriteWord(R0_, v1, 0xFF);
v1 -= 2;
} while (v1 >= 0);
uint16 v2 = 2 * R24_;
do {
- IndirWriteWord(&R0_, v2, 0xFF);
+ IndirWriteWord(R0_, v2, 0xFF);
v2 += 2;
} while ((int16)(v2 - 460) < 0);
}
void XrayRunHandler(void) { // 0x91CAD6
-#define unk_91CAF2 (*(SpawnHdmaObject_Args*)RomPtr(0x91caf2))
if (!time_is_frozen_flag && (button_config_run_b & joypad1_lastkeys) != 0) {
if (Xray_Initialize() & 1)
SpawnHdmaObject(0x91, &unk_91CAF2);
@@ -1901,14 +1922,14 @@ void Xray_SetupStage4(void) { // 0x91CB8E
R18_ = 16;
R26_ = R24_ & 0x7E0;
R28_ = R24_ & 0x1F;
- g_word_7E001E = 0;
+ R30_ = 0;
do {
- if (!sign16(g_word_7E001E + R28_ - 32)) {
+ if (!sign16(R30_ + R28_ - 32)) {
R26_ = (R26_ + 1024) & 0x7E0;
R28_ = 0;
- g_word_7E001E = 0;
+ R30_ = 0;
}
- uint16 v0 = g_word_7E001E + R28_ + R26_;
+ uint16 v0 = R30_ + R28_ + R26_;
uint16 v11 = ram4000.xray_tilemaps[v0 + 4096];
uint16 v10 = ram4000.xray_tilemaps[v0 + 4097];
uint16 v9 = ram4000.xray_tilemaps[v0 + 4128];
@@ -1920,11 +1941,11 @@ void Xray_SetupStage4(void) { // 0x91CB8E
*(uint16 *)((char *)&ram4000.xray_tilemaps[1] + v2) = v10;
*(uint16 *)((char *)ram4000.xray_tilemaps + v2) = v11;
R22_ += 4;
- g_word_7E001E += 2;
+ R30_ += 2;
--R18_;
} while (R18_);
Xray_SetupStage4_Func1();
- R32 = R24_ & 0x400;
+ R32_ = R24_ & 0x400;
R24_ = (R24_ & 0x400) + ((R24_ + 64) & 0x3FF);
R22_ += 64;
--R20_;
@@ -1963,13 +1984,13 @@ void Xray_SetupStage4(void) { // 0x91CB8E
void Xray_SetupStage4_Func1(void) { // 0x91CCF1
int16 v0;
- R32 = R26_;
- v0 = g_word_7E001E + R28_;
- if (!sign16(g_word_7E001E + R28_ - 32)) {
- R32 = (R32 + 1024) & 0x7E0;
+ R32_ = R26_;
+ v0 = R30_ + R28_;
+ if (!sign16(R30_ + R28_ - 32)) {
+ R32_ = (R32_ + 1024) & 0x7E0;
v0 = 0;
}
- uint16 v1 = R32 + v0;
+ uint16 v1 = R32_ + v0;
uint16 v6 = ram4000.xray_tilemaps[v1 + 4096];
uint16 v5 = ram4000.xray_tilemaps[v1 + 4097];
uint16 v4 = ram4000.xray_tilemaps[v1 + 4128];
@@ -2029,7 +2050,6 @@ uint16 Xray_Func21(uint16 j) { // 0x91CDCB
return j;
}
-#define stru_91D2D6 ((XrayBlockData*)RomPtr(0x91d2d6))
PairU16 Xray_HandleXrayedBlock(uint16 k) { // 0x91CDD6
uint16 value;
@@ -2143,7 +2163,6 @@ void Xray_Func6C(void) { // 0x91CED0
Xray_Func20();
}
-#define stru_91D2D6 ((XrayBlockData*)RomPtr(0x91d2d6))
void Xray_Func20(void) { // 0x91CEFD
int i;
@@ -2225,7 +2244,7 @@ uint16 Xray_Func11(uint16 j) { // 0x91CF6F
}
void Xray_Func12(uint16 j) { // 0x91CFBF
- uint8 *v1 = RomPtr_91(R3_.addr);
+ const uint8 *v1 = RomPtr_91(R3_.addr);
Xray_Func13(*(uint16 *)&v1[j]);
}
@@ -2370,10 +2389,10 @@ void Xray_SetupStage7(void) { // 0x91D1A0
v1->vram_dst = ((reg_BG2SC & 0xFC) << 8) + 1024;
vram_write_queue_tail = v0 + 7;
}
- mov24((LongPtr *)&demo_enable, 0x9800E4);
- mov24((LongPtr *)((char *)&demo_num_input_frames + 1), 0x98C8E4);
- mov24((LongPtr *)&demo_input_prev_new, 0x999098);
- *(uint16 *)((char *)&demo_backup_prev_controller_input + 1) = 0;
+ mov24(&hdma_ptr_1, 0x9800E4);
+ mov24(&hdma_ptr_2, 0x98C8E4);
+ mov24(&hdma_ptr_3, 0x999098);
+ hdma_var_1 = 0;
demo_input_pre_instr = 0;
demo_input_instr_timer = 0;
demo_input_instr_ptr = 0;
@@ -2386,7 +2405,7 @@ void Xray_SetupStage7(void) { // 0x91D1A0
}
void HdmaobjPreInstr_XraySetup(uint16 k) { // 0x91D27F
- int16 v1;
+ uint16 v1;
v1 = 4096;
if (fx_type == 36) {
@@ -2410,10 +2429,6 @@ void Xray_SetupStage8_SetBackdropColor(void) { // 0x91D2BC
palette_buffer[0] = 3171;
}
-void sub_91D2D1(void) { // 0x91D2D1
- ;
-}
-
void GameState_28_Unused_(void) { // 0x91D4DA
Unreachable();
}
@@ -2509,13 +2524,12 @@ void InitializeSuitPickupHdma(void) { // 0x91D692
reg_COLDATA[0] = suit_pickup_color_math_R;
reg_COLDATA[1] = suit_pickup_color_math_G;
reg_COLDATA[2] = suit_pickup_color_math_B;
- mov24((LongPtr *)&demo_enable, 0x9800E4);
- mov24((LongPtr *)((char *)&demo_num_input_frames + 1), 0x98C8E4);
- mov24((LongPtr *)&demo_input_prev_new, 0x999098);
- *(uint16 *)((char *)&demo_backup_prev_controller_input + 1) = 0;
+ mov24(&hdma_ptr_1, 0x9800E4);
+ mov24(&hdma_ptr_2, 0x98C8E4);
+ mov24(&hdma_ptr_3, 0x999098);
+ hdma_var_1 = 0;
}
-#define off_91D727 ((uint16*)RomPtr(0x91d727))
static Func_U8 *const off_91D72D[11] = { // 0x91D6F7
Samus_HandleScrewAttackSpeedBoostingPals,
@@ -2539,9 +2553,7 @@ void Samus_HandlePalette(void) {
}
HandleMiscSamusPalette();
}
-#define kSamusPalette_HyperBeam ((uint16*)RomPtr(0x91d829))
-#define kSamusPalette_NonPseudoScrew ((uint16*)RomPtr(0x91d7d5))
-#define kSamusPalette_PseudoScrew ((uint16*)RomPtr(0x91d7ff))
+
uint8 HandleBeamChargePalettes(void) { // 0x91D743
if (charged_shot_glow_timer) {
if (hyper_beam_flag) {
@@ -2550,7 +2562,7 @@ uint8 HandleBeamChargePalettes(void) { // 0x91D743
charged_shot_glow_timer = 0;
return 1;
}
- CopyToSamusSuitPalette(kSamusPalette_HyperBeam[(uint8)(charged_shot_glow_timer & 0x1E) >> 1]);
+ CopyToSamusSuitPalette(kSamusPalette_HyperBeam[(charged_shot_glow_timer & 0x1E) >> 1]);
}
--charged_shot_glow_timer;
return 0;
@@ -2562,15 +2574,14 @@ uint8 HandleBeamChargePalettes(void) { // 0x91D743
} else {
return 1;
}
- } else if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Inactive)
+ } else if (grapple_beam_function == FUNC16(GrappleBeamFunc_Inactive)
&& flare_counter
&& !sign16(flare_counter - 60)) {
if (samus_contact_damage_index == 4)
R36 = kSamusPalette_PseudoScrew[samus_suit_palette_index >> 1];
else
R36 = kSamusPalette_NonPseudoScrew[samus_suit_palette_index >> 1];
- uint16 v0 = *(uint16 *)RomPtr_91(R36 + samus_charge_palette_index);
- CopyToSamusSuitPalette(v0);
+ CopyToSamusSuitPalette(*(uint16 *)RomPtr_91(R36 + samus_charge_palette_index));
uint16 v1 = samus_charge_palette_index + 2;
if (!sign16(samus_charge_palette_index - 10))
v1 = 0;
@@ -2582,12 +2593,7 @@ uint8 HandleBeamChargePalettes(void) { // 0x91D743
}
}
-#define word_9BA3C0 ((uint16*)RomPtr(0x9ba3c0))
uint8 HandleVisorPalette(void) { // 0x91D83F
- int16 v2;
- uint16 v3;
- char v4; // t0
-
if (timer_for_shine_timer == 8)
return 0;
if (fx_layer_blending_config_a == 40 || fx_layer_blending_config_a == 42) {
@@ -2597,13 +2603,10 @@ uint8 HandleVisorPalette(void) { // 0x91D83F
return 0;
samus_visor_palette_timer_index = v1 | 5;
palette_buffer[196] = word_9BA3C0[HIBYTE(v1) >> 1];
- v2 = HIBYTE(v1) + 2;
+ int v2 = HIBYTE(v1) + 2;
if (sign16(v2 - 12)) {
- v4 = v2;
- LOBYTE(v3) = HIBYTE(v2);
- HIBYTE(v3) = v4;
- R18_ = v3;
- samus_visor_palette_timer_index = v3 | (uint8)samus_visor_palette_timer_index;
+ R18_ = swap16(v2);
+ samus_visor_palette_timer_index = R18_ | (uint8)samus_visor_palette_timer_index;
} else {
samus_visor_palette_timer_index = (uint8)samus_visor_palette_timer_index | 0x600;
}
@@ -2614,8 +2617,6 @@ uint8 HandleVisorPalette(void) { // 0x91D83F
}
}
-#define kSamus_SpeedBoostingPalettes ((uint16*)RomPtr(0x91d998))
-#define kSamus_HyperBeamPalettes ((uint16*)RomPtr(0x91d99e))
void HandleMiscSamusPalette(void) { // 0x91D8A5
if (!samus_special_super_palette_flags) {
@@ -2624,7 +2625,7 @@ void HandleMiscSamusPalette(void) { // 0x91D8A5
return;
if (samus_hurt_flash_counter == 2) {
if (!cinematic_function
- && (frame_handler_beta != (uint16)FUNC16(j_HandleDemoRecorder_2_0)
+ && (frame_handler_beta != FUNC16(j_HandleDemoRecorder_2_0)
|| samus_pose != kPose_54_FaceL_Knockback)) {
QueueSfx1_Max6(0x35u);
goto LABEL_14;
@@ -2646,7 +2647,7 @@ LABEL_17:;
uint16 v1 = samus_hurt_flash_counter + 1;
samus_hurt_flash_counter = v1;
if (v1 == 40) {
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_Inactive)) {
if (samus_movement_type == kMovementType_03_SpinJumping || samus_movement_type == kMovementType_14_WallJumping) {
CallSomeSamusCode(0x1Cu);
} else if (!sign16(flare_counter - 16) && (button_config_shoot_x & joypad1_lastkeys) != 0) {
@@ -2677,8 +2678,6 @@ LABEL_17:;
}
}
-#define kSamusPal_ScrewAttack ((uint16*)RomPtr(0x91da4a))
-#define kSamusPal_SpeedBoost ((uint16*)RomPtr(0x91daa9))
uint8 Samus_HandleScrewAttackSpeedBoostingPals(void) { // 0x91D9B2
if ((samus_suit_palette_index & 4) == 0) {
@@ -2738,7 +2737,6 @@ LABEL_10:
return 1;
}
-#define kSamusPal_SpeedBoostShine ((uint16*)RomPtr(0x91db10))
uint8 Samus_SpeedBoosterShinePals(void) { // 0x91DAC7
uint16 v0 = samus_shine_timer;
@@ -2764,7 +2762,6 @@ uint8 Samus_SpeedBoosterShinePals(void) { // 0x91DAC7
}
}
-#define kSamusPal_Shinespark ((uint16*)RomPtr(0x91db75))
uint8 Samus_HandleShinesparkingPals(void) { // 0x91DB3A
bool v0 = (--samus_shine_timer & 0x8000u) != 0;
if (!samus_shine_timer || v0) {
@@ -2783,8 +2780,6 @@ uint8 Samus_HandleShinesparkingPals(void) { // 0x91DB3A
}
}
-#define stru_91DC00 ((SamusCrystalFlashPalTable*)RomPtr(0x91dc00))
-#define off_91DC28 ((uint16*)RomPtr(0x91dc28))
uint8 Samus_HandleCrystalFlashPals(void) { // 0x91DB93
if ((samus_shine_timer & 0x8000u) != 0) {
WriteBeamPalette_A(equipped_beams);
@@ -2816,27 +2811,11 @@ uint8 Samus_HandleCrystalFlashPals(void) { // 0x91DB93
}
void Samus_Copy10PalColors(uint16 v0) { // 0x91DC34
- uint16 *v1 = (uint16 *)RomPtr_9B(v0);
- palette_buffer[224] = *v1;
- palette_buffer[225] = v1[1];
- palette_buffer[226] = v1[2];
- palette_buffer[227] = v1[3];
- palette_buffer[228] = v1[4];
- palette_buffer[229] = v1[5];
- palette_buffer[230] = v1[6];
- palette_buffer[231] = v1[7];
- palette_buffer[232] = v1[8];
- palette_buffer[233] = v1[9];
+ memcpy(&palette_buffer[224], RomPtr_9B(v0), 20);
}
void Samus_Copy6PalColors(uint16 j) { // 0x91DC82
- uint16 *v1 = (uint16 *)RomPtr_9B(j);
- palette_buffer[234] = *v1;
- palette_buffer[235] = v1[1];
- palette_buffer[236] = v1[2];
- palette_buffer[237] = v1[3];
- palette_buffer[238] = v1[4];
- palette_buffer[239] = v1[5];
+ memcpy(&palette_buffer[234], RomPtr_9B(j), 12);
}
uint8 Samus_HandleXrayPals(void) { // 0x91DCB4
@@ -2880,43 +2859,11 @@ uint8 nullsub_164(void) { // 0x91DD31
}
void CopyToSamusSuitPalette(uint16 k) { // 0x91DD5B
- uint16 *v1 = (uint16 *)RomPtr_9B(k);
- palette_buffer[192] = *v1;
- palette_buffer[193] = v1[1];
- palette_buffer[194] = v1[2];
- palette_buffer[195] = v1[3];
- palette_buffer[196] = v1[4];
- palette_buffer[197] = v1[5];
- palette_buffer[198] = v1[6];
- palette_buffer[199] = v1[7];
- palette_buffer[200] = v1[8];
- palette_buffer[201] = v1[9];
- palette_buffer[202] = v1[10];
- palette_buffer[203] = v1[11];
- palette_buffer[204] = v1[12];
- palette_buffer[205] = v1[13];
- palette_buffer[206] = v1[14];
- palette_buffer[207] = v1[15];
+ memcpy(&palette_buffer[192], (uint16 *)RomPtr_9B(k), 32);
}
void CopyToSamusSuitTargetPalette(uint16 k) { // 0x91DDD7
- uint16 *v1 = (uint16 *)RomPtr_9B(k);
- target_palettes[192] = *v1;
- target_palettes[193] = v1[1];
- target_palettes[194] = v1[2];
- target_palettes[195] = v1[3];
- target_palettes[196] = v1[4];
- target_palettes[197] = v1[5];
- target_palettes[198] = v1[6];
- target_palettes[199] = v1[7];
- target_palettes[200] = v1[8];
- target_palettes[201] = v1[9];
- target_palettes[202] = v1[10];
- target_palettes[203] = v1[11];
- target_palettes[204] = v1[12];
- target_palettes[205] = v1[13];
- target_palettes[206] = v1[14];
- target_palettes[207] = v1[15];
+ memcpy(&target_palettes[192], (uint16 *)RomPtr_9B(k), 32);
}
void Samus_CancelSpeedBoost(void) { // 0x91DE53
@@ -3149,11 +3096,11 @@ uint8 Xray_Initialize(void) { // 0x91E16D
DisablePLMs();
DisableAnimtiles();
DisablePaletteFx();
- mov24((LongPtr *)&demo_enable, 0x980001);
+ mov24(&hdma_ptr_1, 0x980001);
*(uint16 *)((char *)&demo_num_input_frames + 1) = 0;
demo_input_prev = -26424;
- mov24((LongPtr *)&demo_input_prev_new, 0x999098);
- *(uint16 *)((char *)&demo_backup_prev_controller_input + 1) = 0;
+ mov24(&hdma_ptr_3, 0x999098);
+ hdma_var_1 = 0;
demo_input_pre_instr = 0;
demo_input_instr_timer = 0;
demo_input_instr_ptr = 0;
@@ -3392,7 +3339,7 @@ void SamusFunc_E633(void) {
speed_echo_ypos[0] = 0;
speed_echo_ypos[1] = 0;
}
- if (grapple_beam_function == (uint16)FUNC16(GrappleBeamFunc_Inactive)) {
+ if (grapple_beam_function == FUNC16(GrappleBeamFunc_Inactive)) {
if ((equipped_beams & 0x1000) != 0) {
if (!sign16(flare_counter - 16))
QueueSfx1_Max6(0x41u);
@@ -3515,7 +3462,7 @@ static Func_V *const kSamus_HandleTransFromBlockColl[6] = { // 0x91E8B6
void Samus_HandleTransFromBlockColl(void) {
if (input_to_pose_calc)
- kSamus_HandleTransFromBlockColl[(uint16)(2 * (uint8)input_to_pose_calc) >> 1]();
+ kSamus_HandleTransFromBlockColl[(uint8)input_to_pose_calc]();
}
void Samus_HandleTransFromBlockColl_3(void) { // 0x91E8D8
samus_new_pose = samus_pose;
@@ -3527,7 +3474,6 @@ void Samus_HandleTransFromBlockColl_4(void) { // 0x91E8E5
samus_momentum_routine_index = 5;
}
-#define word_91E921 ((uint16*)RomPtr(0x91e921))
uint8 nullsub_18_U8(void) {
return 0;
@@ -3556,13 +3502,12 @@ void Samus_HandleTransFromBlockColl_2(void) {
void Samus_HandleTransFromBlockColl_1(void) { // 0x91E931
if (HIBYTE(input_to_pose_calc) != 4) {
- if (off_91E951[(uint16)(2 * HIBYTE(input_to_pose_calc)) >> 1]() & 1)
+ if (off_91E951[HIBYTE(input_to_pose_calc)]() & 1)
samus_momentum_routine_index = 0;
else
samus_momentum_routine_index = 5;
}
}
-#define word_91E9F3 ((uint16*)RomPtr(0x91e9f3))
uint8 Samus_HandleTransFromBlockColl_1_0(void) { // 0x91E95D
int16 v0;
@@ -3674,7 +3619,6 @@ void Samus_HandleTransFromBlockColl_5(void) { // 0x91EABE
samus_momentum_routine_index = 5;
}
-#define word_91EB74 ((uint16*)RomPtr(0x91eb74))
uint8 Samus_CheckWalkedIntoSomething(void) { // 0x91EADE
int16 v0;
@@ -3916,7 +3860,7 @@ uint8 Samus_HandleTransitionsB_1_11(void) { // 0x91EDA4
}
uint8 Samus_HandleTransitionsB_1_6(void) { // 0x91EDA6
- if (frame_handler_gamma == (uint16)FUNC16(Samus_Func9))
+ if (frame_handler_gamma == FUNC16(Samus_Func9))
return 0;
else
return Samus_HandleTransitionsB_1_0();
@@ -3978,7 +3922,7 @@ void Samus_HandleTransitionsB_2(void) { // 0x91EE69
void Samus_HandleTransitionsB_3(void) { // 0x91EE80
bomb_jump_dir = (uint8)bomb_jump_dir | 0x800;
samus_movement_handler = FUNC16(Samus_MoveHandler_BombJumpStart);
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(nullsub_152);
}
@@ -4105,7 +4049,7 @@ static Func_V *const kSamus_HandleTransitionsA_5[7] = { // 0x91EFC4
Samus_HandleTransitionsA_5_6,
};
void Samus_HandleTransitionsA_5(void) {
- kSamus_HandleTransitionsA_5[(uint16)(2 * (uint8)input_to_pose_calc) >> 1]();
+ kSamus_HandleTransitionsA_5[(uint8)input_to_pose_calc]();
}
void Samus_HandleTransitionsA_5_4(void) { // 0x91EFDF
@@ -4142,7 +4086,7 @@ void Samus_HandleTransitionsA_5_1(void) {
HandleLandingSoundEffectsAndGfx();
if (HIBYTE(input_to_pose_calc) == 4) {
SamusFunc_F1D3();
- } else if (!(kSamus_HandleTransitionsA_5_1[(uint16)(2 * HIBYTE(input_to_pose_calc)) >> 1]() & 1)) {
+ } else if (!(kSamus_HandleTransitionsA_5_1[HIBYTE(input_to_pose_calc)]() & 1)) {
UNUSED_word_7E0A18 = 0;
samus_x_accel_mode = 0;
samus_x_base_speed = 0;
@@ -4289,7 +4233,7 @@ void SamusFunc_F1D3(void) { // 0x91F1D3
}
uint8 Samus_HandleTransitionsA_5_1_0(void) { // 0x91F1EC
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(HandleAutoJumpHack);
return 0;
}
@@ -4402,7 +4346,7 @@ void Samus_HandleTransitionsC_1(void) { // 0x91F31D
samus_is_falling_flag = 1;
samus_y_dir = 2;
Samus_AlignBottomWithPrevPose();
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(Samus_InputHandler_E913);
}
@@ -4803,11 +4747,6 @@ uint8 SamusFunc_F468_DamageBoost_(void) { // 0x91F8CB
return 0;
}
-#define kSamusTurnPose_Standing ((uint8*)RomPtr(0x91f9c2))
-#define kSamusTurnPose_Crouching ((uint8*)RomPtr(0x91f9cc))
-#define kSamusTurnPose_Jumping ((uint8*)RomPtr(0x91f9d6))
-#define kSamusTurnPose_Falling ((uint8*)RomPtr(0x91f9e0))
-#define kSamusTurnPose_Moonwalk ((uint8*)RomPtr(0x91f9ea))
uint8 SamusFunc_F468_TurningAroundOnGround(void) { // 0x91F8D3
if (samus_prev_pose && samus_prev_pose != kPose_9B_FaceF_VariaGravitySuit) {
uint16 v0 = *(&kPoseParams[0].direction_shots_fired + (uint16)(8 * samus_prev_pose));
@@ -5275,4 +5214,4 @@ uint8 HandleCollDueToChangedPose_Block_CollBoth(void) { // 0x91FFA7
samus_prev_y_pos = samus_y_pos;
}
return 0;
-}
+}
\ No newline at end of file
diff --git a/src/sm_92.c b/src/sm_92.c
index ffabc28..cd63ae6 100644
--- a/src/sm_92.c
+++ b/src/sm_92.c
@@ -4,9 +4,13 @@
#include "variables.h"
#include "funcs.h"
-#define kSamus_AnimationDefinitionPtrs ((uint16*)RomPtr(0x92d94e))
-#define kSamus_TileDefs_TopHalf ((uint16*)RomPtr(0x92d91e))
-#define kSamus_TileDefs_BottomHalf ((uint16*)RomPtr(0x92d938))
+
+#define kSamus_AnimationDefinitionPtrs ((uint16*)RomFixedPtr(0x92d94e))
+#define kSamus_TileDefs_TopHalf ((uint16*)RomFixedPtr(0x92d91e))
+#define kSamus_TileDefs_BottomHalf ((uint16*)RomFixedPtr(0x92d938))
+
+
+
void SetSamusTilesDefsForCurAnim(void) { // 0x928000
int16 v2;
@@ -62,4 +66,4 @@ void DrawSamusSuitExploding(void) { // 0x92EDBE
else
R18_ = g_word_7E0DE4 + 2076;
DrawSamusSpritemap(R18_, samus_x_pos, samus_y_pos);
-}
+}
\ No newline at end of file
diff --git a/src/sm_93.c b/src/sm_93.c
index 89e6694..9b2cffe 100644
--- a/src/sm_93.c
+++ b/src/sm_93.c
@@ -3,22 +3,25 @@
#include "variables.h"
#include "funcs.h"
-#define kProjectileData_UnchargedBeams ((uint16*)RomPtr(0x9383c1))
-#define kProjectileData_ChargedBeams ((uint16*)RomPtr(0x9383d9))
-#define kProjectileData_NonBeams ((uint16*)RomPtr(0x9383f1))
-#define kShinesparkEchoSpazer_ProjectileData ((uint16*)RomPtr(0x938403))
-#define kRunInstrForSuperMissile ((uint16*)RomPtr(0x93842b))
-#define g_stru_938691 (*(ProjectileDamagesAndInstrPtr*)RomPtr(0x938691))
-#define g_stru_938679 (*(ProjectileDamagesAndInstrPtr*)RomPtr(0x938679))
-#define kProjInstrList_Explosion (*(ProjectileDamagesAndInstrPtr*)RomPtr(0x938681))
-#define g_off_938413 ((uint16*)RomPtr(0x938413))
+
+#define kProjectileData_UnchargedBeams ((uint16*)RomFixedPtr(0x9383c1))
+#define kProjectileData_ChargedBeams ((uint16*)RomFixedPtr(0x9383d9))
+#define kProjectileData_NonBeams ((uint16*)RomFixedPtr(0x9383f1))
+#define kShinesparkEchoSpazer_ProjectileData ((uint16*)RomFixedPtr(0x938403))
+#define kRunInstrForSuperMissile ((uint16*)RomFixedPtr(0x93842b))
+#define g_stru_938691 (*(ProjectileDamagesAndInstrPtr*)RomFixedPtr(0x938691))
+#define g_stru_938679 (*(ProjectileDamagesAndInstrPtr*)RomFixedPtr(0x938679))
+#define kProjInstrList_Explosion (*(ProjectileDamagesAndInstrPtr*)RomFixedPtr(0x938681))
+#define g_off_938413 ((uint16*)RomFixedPtr(0x938413))
+
+
+
void InitializeProjectile(uint16 k) { // 0x938000
ProjectileDataTable *ProjectileDataTable;
- int16 damage;
int v1 = k >> 1;
- R18_ = 2 * (projectile_dir[v1] & 0xF);
+ int R18 = 2 * (projectile_dir[v1] & 0xF);
uint16 v2 = projectile_type[v1], v3;
if ((v2 & 0xF00) != 0) {
v3 = kProjectileData_NonBeams[HIBYTE(v2) & 0xF];
@@ -28,44 +31,36 @@ void InitializeProjectile(uint16 k) { // 0x938000
v3 = kProjectileData_UnchargedBeams[projectile_type[v1] & 0xF];
}
ProjectileDataTable = get_ProjectileDataTable(v3);
- damage = ProjectileDataTable->damage;
- projectile_damage[v1] = ProjectileDataTable->damage;
- if (damage < 0)
+ if (sign16(ProjectileDataTable->damage))
InvalidInterrupt_Crash();
- uint8 *v6 = RomPtr_93(R18_ + v3 + 2);
- uint16 v7 = *(uint16 *)v6;
- projectile_bomb_instruction_ptr[v1] = *(uint16 *)v6;
- uint8 *v8 = RomPtr_93(v7);
+ projectile_damage[v1] = ProjectileDataTable->damage;
+ uint16 v7 = GET_WORD(RomPtr_93(v3 + R18 + 2));
+ projectile_bomb_instruction_ptr[v1] = v7;
+ const uint8 *v8 = RomPtr_93(v7);
projectile_x_radius[v1] = v8[4];
projectile_y_radius[v1] = v8[5];
projectile_bomb_instruction_timers[v1] = 1;
}
void InitializeInstrForSuperMissile(uint16 v0) { // 0x938071
- int16 v4;
-
int v1 = v0 >> 1;
- uint16 v2 = kRunInstrForSuperMissile[HIBYTE(projectile_type[v1]) & 0xF];
- uint8 *v3 = RomPtr_93(v2);
- v4 = *(uint16 *)v3;
- projectile_damage[v1] = *(uint16 *)v3;
- if (v4 < 0)
+ const uint8 *v3 = RomPtr_93(kRunInstrForSuperMissile[HIBYTE(projectile_type[v1]) & 0xF]);
+ uint16 v4 = GET_WORD(v3);
+ projectile_damage[v1] = v4;
+ if (sign16(v4))
InvalidInterrupt_Crash();
- projectile_bomb_instruction_ptr[v1] = *(uint16 *)RomPtr_93(v2 + 2);
+ projectile_bomb_instruction_ptr[v1] = GET_WORD(v3 + 2);
projectile_bomb_instruction_timers[v1] = 1;
}
void InitializeInstrForMissile(uint16 v0) { // 0x9380A0
- int16 v4;
-
int v1 = v0 >> 1;
- uint16 v2 = kProjectileData_NonBeams[HIBYTE(projectile_type[v1]) & 0xF];
- uint8 *v3 = RomPtr_93(v2);
- v4 = *(uint16 *)v3;
- projectile_damage[v1] = *(uint16 *)v3;
- if (v4 < 0)
+ const uint8 *v3 = RomPtr_93(kProjectileData_NonBeams[HIBYTE(projectile_type[v1]) & 0xF]);
+ uint16 v4 = GET_WORD(v3);
+ projectile_damage[v1] = GET_WORD(v3);
+ if (sign16(v4))
InvalidInterrupt_Crash();
- projectile_bomb_instruction_ptr[v1] = *(uint16 *)RomPtr_93(v2 + 2);
+ projectile_bomb_instruction_ptr[v1] = GET_WORD(v3 + 2);
projectile_bomb_instruction_timers[v1] = 1;
}
@@ -101,30 +96,25 @@ void InitializeBombExplosion(uint16 k) { // 0x93814E
}
void InitializeShinesparkEchoOrSpazerSba(uint16 k) { // 0x938163
- int16 v4;
-
int v1 = k >> 1;
- R18_ = 2 * (projectile_dir[v1] & 0xF);
- uint16 v2 = kShinesparkEchoSpazer_ProjectileData[LOBYTE(projectile_type[v1]) - 34];
- uint8 *v3 = RomPtr_93(v2);
- v4 = *(uint16 *)v3;
- projectile_damage[v1] = *(uint16 *)v3;
- if (v4 < 0)
+ int R18 = 2 * (projectile_dir[v1] & 0xF);
+ const uint8 *v3 = RomPtr_93(kShinesparkEchoSpazer_ProjectileData[LOBYTE(projectile_type[v1]) - 34]);
+ uint16 v4 = GET_WORD(v3);
+ projectile_damage[v1] = GET_WORD(v3);
+ if (sign16(v4))
InvalidInterrupt_Crash();
- projectile_bomb_instruction_ptr[v1] = *(uint16 *)RomPtr_93(R18_ + v2 + 2);
+ projectile_bomb_instruction_ptr[v1] = GET_WORD(v3 + 2 + R18);
projectile_bomb_instruction_timers[v1] = 1;
}
void InitializeSbaProjectile(uint16 k) { // 0x9381A4
- int16 v3;
-
int v1 = k >> 1;
- uint8 *v2 = RomPtr_93(g_off_938413[projectile_type[v1] & 0xF]);
- v3 = *(uint16 *)v2;
- projectile_damage[v1] = *(uint16 *)v2;
- if (v3 < 0)
+ const uint8 *v2 = RomPtr_93(g_off_938413[projectile_type[v1] & 0xF]);
+ uint16 v3 = GET_WORD(v2);
+ projectile_damage[v1] = GET_WORD(v2);
+ if (sign16(v3))
InvalidInterrupt_Crash();
- projectile_bomb_instruction_ptr[v1] = *((uint16 *)v2 + 1);
+ projectile_bomb_instruction_ptr[v1] = GET_WORD(v2 + 2);
projectile_bomb_instruction_timers[v1] = 1;
}
@@ -181,11 +171,11 @@ uint16 Proj93Instr_Goto(uint16 k, uint16 j) { // 0x938239
}
uint16 Proj93Instr_GotoIfLess(uint16 k, uint16 j) { // 0x938240
- uint8 *v2 = RomPtr_93(j);
- if ((int16)(*(uint16 *)v2 - projectile_variables[k >> 1]) >= 0)
- return *((uint16 *)RomPtr_93(j) + 1);
+ const uint8 *v2 = RomPtr_93(j);
+ if ((int16)(GET_WORD(v2) - projectile_variables[k >> 1]) >= 0)
+ return GET_WORD(v2 + 2);
else
- return *((uint16 *)v2 + 2);
+ return GET_WORD(v2 + 4);
}
void DrawPlayerExplosions2(void) { // 0x938254
@@ -289,4 +279,4 @@ LABEL_16:
v0 -= 2;
projectile_index = v0;
} while ((v0 & 0x8000u) == 0);
-}
+}
\ No newline at end of file
diff --git a/src/sm_94.c b/src/sm_94.c
index 1a97782..1d6407d 100644
--- a/src/sm_94.c
+++ b/src/sm_94.c
@@ -4,6 +4,15 @@
#include "variables.h"
#include "funcs.h"
+
+#define fnkPlmHeaderDefPtrs 0x949139
+#define off_9492D9 ((uint16*)RomFixedPtr(0x9492d9))
+#define off_9492E9 ((uint16*)RomFixedPtr(0x9492e9))
+#define kPlmHeaderDefPtrs ((uint16*)RomFixedPtr(0x949139))
+#define off_94936B ((uint16*)RomFixedPtr(0x94936b))
+
+
+
static const uint8 kAlignPos_Tab1[512] = {
16, 16, 16, 16, 16, 16, 16, 16, 0, 0, 0, 0, 0, 0, 0, 0,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
@@ -119,11 +128,7 @@ static const uint16 kBlockColl_Horiz_Slope_NonSquare_Tab[64] = {
0x6000, 0x50,
};
-#define fnkPlmHeaderDefPtrs 0x949139
-#define off_9492D9 ((uint16*)RomPtr(0x9492d9))
-#define off_9492E9 ((uint16*)RomPtr(0x9492e9))
-#define kPlmHeaderDefPtrs ((uint16*)RomPtr(0x949139))
uint16 PostGrappleColl_Horiz_Slope_NonSquare(uint16 k) { // 0x948000
int16 v1;
@@ -137,8 +142,8 @@ uint16 PostGrappleColl_Horiz_Slope_NonSquare(uint16 k) { // 0x948000
v1 = samus_x_pos >> 4;
if (v1 != mod)
return -1;
- temp_collision_DD4 = R32 & 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = R32_ & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
if ((BTS[k] & 0x40) != 0) {
if (BTS[k] & 0x80)
v3 = samus_y_pos ^ 0xF;
@@ -146,7 +151,7 @@ uint16 PostGrappleColl_Horiz_Slope_NonSquare(uint16 k) { // 0x948000
v3 = samus_y_pos;
uint16 v4 = temp_collision_DD6 + (v3 & 0xF);
uint16 result = (kAlignPos_Tab1[v4] & 0x1F) - temp_collision_DD4 - 1;
- if ((kAlignPos_Tab1[v4] & 0x1F) - temp_collision_DD4 != 1 && (result & 0x8000u) != 0)
+ if ((kAlignPos_Tab1[v4] & 0x1F) - temp_collision_DD4 != 1 && (result & 0x8000) != 0)
return -1;
return result;
}
@@ -156,8 +161,8 @@ uint16 PostGrappleColl_Horiz_Slope_NonSquare(uint16 k) { // 0x948000
v5 = samus_x_pos >> 4;
if (v5 != mod)
return -1;
- temp_collision_DD4 = R32 & 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = R32_ & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
if (BTS[k] & 0x40)
return PostGrappleColl_Horiz_Solid();
if (BTS[k] & 0x80)
@@ -186,8 +191,8 @@ uint16 PostGrappleColl_Vert_Slope_NonSquare(uint16 k) { // 0x9480E0
v1 = samus_x_pos >> 4;
if (v1 != mod)
return -1;
- temp_collision_DD4 = R32 & 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = R32_ & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
v3 = BTS[k];
if (v3 & 0x80) {
if ((v3 & 0x40) != 0)
@@ -196,7 +201,7 @@ uint16 PostGrappleColl_Vert_Slope_NonSquare(uint16 k) { // 0x9480E0
v4 = samus_x_pos;
uint16 v5 = temp_collision_DD6 + (v4 & 0xF);
uint16 result = (kAlignYPos_Tab0[v5] & 0x1F) - temp_collision_DD4 - 1;
- if ((kAlignYPos_Tab0[v5] & 0x1F) - temp_collision_DD4 != 1 && (result & 0x8000u) != 0)
+ if ((kAlignYPos_Tab0[v5] & 0x1F) - temp_collision_DD4 != 1 && (result & 0x8000) != 0)
return -1;
return result;
}
@@ -206,8 +211,8 @@ uint16 PostGrappleColl_Vert_Slope_NonSquare(uint16 k) { // 0x9480E0
v6 = samus_x_pos >> 4;
if (v6 != mod)
return -1;
- temp_collision_DD4 = R32 & 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = R32_ & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
v7 = BTS[k];
if (v7 & 0x80)
return PostGrappleColl_Vert_Solid();
@@ -224,9 +229,9 @@ uint16 PostGrappleColl_Vert_Slope_NonSquare(uint16 k) { // 0x9480E0
}
uint16 PostGrappleColl_Horiz_Slope_Square(uint16 k) { // 0x9481B8
- temp_collision_DD4 = 4 * (BTS[k] & 0x1F);
- temp_collision_DD6 = BTS[k] >> 6;
- uint16 v1 = temp_collision_DD4 + (temp_collision_DD6 ^ ((uint8)(R32 & 8) >> 3));
+ uint16 temp_collision_DD4 = 4 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
+ uint16 v1 = temp_collision_DD4 + (temp_collision_DD6 ^ ((uint8)(R32_ & 8) >> 3));
if (!R26_) {
if ((((uint8)samus_y_radius + (uint8)samus_y_pos - 1) & 8) == 0) {
if (!kTab948E54[v1])
@@ -244,15 +249,15 @@ LABEL_7:
return -1;
LABEL_10:
if (samus_collision_direction & 1)
- return R32 & 7;
+ return R32_ & 7;
else
- return R32 & 7 ^ 7;
+ return R32_ & 7 ^ 7;
}
uint16 PostGrappleColl_Vertical_Slope_Square(uint16 k) { // 0x948230
- temp_collision_DD4 = 4 * (BTS[k] & 0x1F);
- temp_collision_DD6 = BTS[k] >> 6;
- uint16 v1 = temp_collision_DD4 + (temp_collision_DD6 ^ ((uint8)(R32 & 8) >> 2));
+ uint16 temp_collision_DD4 = 4 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
+ uint16 v1 = temp_collision_DD4 + (temp_collision_DD6 ^ ((uint8)(R32_ & 8) >> 2));
if (!R26_) {
if ((((uint8)samus_x_radius + (uint8)samus_x_pos - 1) & 8) == 0) {
if (!kTab948E54[v1])
@@ -270,9 +275,9 @@ LABEL_7:
return -1;
LABEL_10:
if (samus_collision_direction & 1)
- return R32 & 7;
+ return R32_ & 7;
else
- return R32 & 7 ^ 7;
+ return R32_ & 7 ^ 7;
}
uint16 ClearCarry_0(void) { // 0x9482A7
@@ -280,25 +285,25 @@ uint16 ClearCarry_0(void) { // 0x9482A7
}
uint16 PostGrappleColl_Horiz_Slope(void) { // 0x9482A9
- if ((BTS[cur_block_index] & 0x1Fu) < 5)
+ if ((BTS[cur_block_index] & 0x1F) < 5)
return PostGrappleColl_Horiz_Slope_Square(cur_block_index);
else
return PostGrappleColl_Horiz_Slope_NonSquare(cur_block_index);
}
uint16 PostGrappleColl_Horiz_Solid(void) { // 0x9482BE
- return R32 & 0xF;
+ return R32_ & 0xF;
}
uint16 PostGrappleColl_Vert_Slope(void) { // 0x9482C5
- if ((BTS[cur_block_index] & 0x1Fu) < 5)
+ if ((BTS[cur_block_index] & 0x1F) < 5)
return PostGrappleColl_Vertical_Slope_Square(cur_block_index);
else
return PostGrappleColl_Vert_Slope_NonSquare(cur_block_index);
}
uint16 PostGrappleColl_Vert_Solid(void) { // 0x9482DA
- return R32 & 0xF;
+ return R32_ & 0xF;
}
static Func_U16 *const kPostGrappleColl_Horiz[16] = { // 0x948321
@@ -357,8 +362,8 @@ void PostGrappleCollisionDetect_Right(void) { // 0x94834F
uint16 prod = Mult8x8((uint16)(samus_y_pos - samus_y_radius) >> 4, room_width_in_blocks);
R22_ = samus_x_subpos;
R24_ = samus_x_pos;
- R32 = samus_x_radius + samus_x_pos - 1;
- v0 = R32 >> 4;
+ R32_ = samus_x_radius + samus_x_pos - 1;
+ v0 = R32_ >> 4;
cur_block_index = prod + v0;
uint16 v1 = 2 * cur_block_index;
do {
@@ -370,7 +375,7 @@ void PostGrappleCollisionDetect_Right(void) { // 0x94834F
}
v1 += room_width_in_blocks * 2;
--R26_;
- } while ((R26_ & 0x8000u) == 0);
+ } while ((R26_ & 0x8000) == 0);
}
void PostGrappleCollisionDetect_Left(void) { // 0x9483B1
@@ -383,7 +388,7 @@ void PostGrappleCollisionDetect_Left(void) { // 0x9483B1
uint16 prod = Mult8x8((uint16)(samus_y_pos - samus_y_radius) >> 4, room_width_in_blocks);
R22_ = samus_x_subpos;
R24_ = samus_x_pos;
- R32 = samus_x_pos - samus_x_radius;
+ R32_ = samus_x_pos - samus_x_radius;
v0 = (uint16)(samus_x_pos - samus_x_radius) >> 4;
cur_block_index = prod + v0;
uint16 v1 = 2 * cur_block_index;
@@ -396,7 +401,7 @@ void PostGrappleCollisionDetect_Left(void) { // 0x9483B1
}
v1 += room_width_in_blocks * 2;
--R26_;
- } while ((R26_ & 0x8000u) == 0);
+ } while ((R26_ & 0x8000) == 0);
}
void PostGrappleCollisionDetect_Down(void) { // 0x94840F
@@ -408,8 +413,8 @@ void PostGrappleCollisionDetect_Down(void) { // 0x94840F
Samus_GetXposSpan();
R22_ = samus_y_subpos;
R24_ = samus_y_pos;
- R32 = samus_y_radius + samus_y_pos - 1;
- uint16 prod = Mult8x8(R32 >> 4, room_width_in_blocks);
+ R32_ = samus_y_radius + samus_y_pos - 1;
+ uint16 prod = Mult8x8(R32_ >> 4, room_width_in_blocks);
v0 = (uint16)(samus_x_pos - samus_x_radius) >> 4;
cur_block_index = prod + v0;
uint16 v1 = 2 * cur_block_index;
@@ -422,7 +427,7 @@ void PostGrappleCollisionDetect_Down(void) { // 0x94840F
}
v1 += 2;
--R26_;
- } while ((R26_ & 0x8000u) == 0);
+ } while ((R26_ & 0x8000) == 0);
}
void PostGrappleCollisionDetect_Up(void) { // 0x94846A
@@ -434,7 +439,7 @@ void PostGrappleCollisionDetect_Up(void) { // 0x94846A
Samus_GetXposSpan();
R22_ = samus_y_subpos;
R24_ = samus_y_pos;
- R32 = samus_y_pos - samus_y_radius;
+ R32_ = samus_y_pos - samus_y_radius;
uint16 prod = Mult8x8((uint16)(samus_y_pos - samus_y_radius) >> 4, room_width_in_blocks);
v0 = (uint16)(samus_x_pos - samus_x_radius) >> 4;
cur_block_index = prod + v0;
@@ -448,7 +453,7 @@ void PostGrappleCollisionDetect_Up(void) { // 0x94846A
}
v1 += 2;
--R26_;
- } while ((R26_ & 0x8000u) == 0);
+ } while ((R26_ & 0x8000) == 0);
}
void PostGrappleCollisionDetect_X(void) { // 0x9484C4
@@ -462,14 +467,11 @@ void PostGrappleCollisionDetect_Y(void) { // 0x9484CD
}
uint8 BlockColl_Horiz_Slope_NonSquare(void) { // 0x9484D6
- uint16 v2;
-
if ((current_slope_bts & 0x80) != 0 || __PAIR32__(samus_y_speed, samus_y_subspeed))
return 0;
uint16 v1 = 4 * (current_slope_bts & 0x1F);
- HIBYTE(v2) = R18_;
- LOBYTE(v2) = HIBYTE(R20_);
- if ((R18_ & 0x8000u) == 0) {
+ uint16 v2 = PAIR16(R18_, HIBYTE(R20_));
+ if ((R18_ & 0x8000) == 0) {
Multiply16x16(v2, kBlockColl_Horiz_Slope_NonSquare_Tab[(v1 >> 1) + 1]);
R20_ = mult_product_lo;
R18_ = mult_product_hi;
@@ -480,7 +482,6 @@ uint8 BlockColl_Horiz_Slope_NonSquare(void) { // 0x9484D6
return 0;
}
-
uint8 BlockColl_Vert_Slope_NonSquare(uint16 k) { // 0x9486FE
int16 v1;
int16 v3;
@@ -499,8 +500,8 @@ uint8 BlockColl_Vert_Slope_NonSquare(uint16 k) { // 0x9486FE
uint16 mod = SnesModulus(cur_block_index, room_width_in_blocks);
v8 = samus_x_pos >> 4;
if (v8 == mod) {
- temp_collision_DD4 = ((uint8)samus_y_radius + (uint8)R24_ - 1) & 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = ((uint8)samus_y_radius + (uint8)R24_ - 1) & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
v9 = BTS[k];
if (!(v9 & 0x80)
&& ((v9 & 0x40) != 0 ? (v10 = samus_x_pos ^ 0xF) : (v10 = samus_x_pos),
@@ -524,8 +525,8 @@ uint8 BlockColl_Vert_Slope_NonSquare(uint16 k) { // 0x9486FE
uint16 mod = SnesModulus(cur_block_index, room_width_in_blocks);
v1 = samus_x_pos >> 4;
if (v1 == mod) {
- temp_collision_DD4 = ((uint8)R24_ - (uint8)samus_y_radius) & 0xF ^ 0xF;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD4 = ((uint8)R24_ - (uint8)samus_y_radius) & 0xF ^ 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
v3 = BTS[k];
if ((v3 & 0x80)
&& ((v3 & 0x40) != 0 ? (v4 = samus_x_pos ^ 0xF) : (v4 = samus_x_pos),
@@ -549,28 +550,18 @@ uint8 BlockColl_Vert_Slope_NonSquare(uint16 k) { // 0x9486FE
}
void Samus_AlignYPosSlope(void) { // 0x9487F4
- int16 v0;
- char v1;
- int16 v2;
- int16 v3;
- char v4;
- int16 v6;
-
if ((enable_horiz_slope_coll & 2) != 0) {
R26_ = samus_x_pos;
R28_ = samus_y_radius + samus_y_pos - 1;
- g_word_7E001E = 0;
- R32 = 0;
- CalculateBlockAt();
- if ((level_data[cur_block_index] & 0xF000) == 4096
- && (BTS[cur_block_index] & 0x1Fu) >= 5) {
- temp_collision_DD4 = ((uint8)samus_y_radius + (uint8)samus_y_pos - 1) & 0xF;
- temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
- v0 = BTS[cur_block_index];
+ CalculateBlockAt(R26_, R28_, 0, 0);
+ if ((level_data[cur_block_index] & 0xF000) == 4096 && (BTS[cur_block_index] & 0x1F) >= 5) {
+ uint16 temp_collision_DD4 = (samus_y_radius + samus_y_pos - 1) & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
+ uint8 v0 = BTS[cur_block_index];
if (!(v0 & 0x80)) {
- v1 = (v0 & 0x40) != 0 ? samus_x_pos ^ 0xF : samus_x_pos;
- v2 = (kAlignYPos_Tab0[(uint16)(temp_collision_DD6 + (v1 & 0xF))] & 0x1F) - temp_collision_DD4 - 1;
- if (v2 < 0) {
+ uint16 v1 = (v0 & 0x40) != 0 ? samus_x_pos ^ 0xF : samus_x_pos;
+ uint16 v2 = (kAlignYPos_Tab0[temp_collision_DD6 + (v1 & 0xF)] & 0x1F) - temp_collision_DD4 - 1;
+ if ((int16)v2 < 0) {
samus_y_pos += v2;
samus_pos_adjusted_by_slope_flag = 1;
}
@@ -578,22 +569,15 @@ void Samus_AlignYPosSlope(void) { // 0x9487F4
}
R26_ = samus_x_pos;
R28_ = samus_y_pos - samus_y_radius;
- g_word_7E001E = 0;
- R32 = 0;
- CalculateBlockAt();
- if ((level_data[cur_block_index] & 0xF000) == 4096
- && (BTS[cur_block_index] & 0x1Fu) >= 5) {
- temp_collision_DD4 = ((uint8)samus_y_pos - (uint8)samus_y_radius) & 0xF ^ 0xF;
- temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
- v3 = BTS[cur_block_index];
+ CalculateBlockAt(R26_, R28_, 0, 0);
+ if ((level_data[cur_block_index] & 0xF000) == 4096 && (BTS[cur_block_index] & 0x1F) >= 5) {
+ uint16 temp_collision_DD4 = (samus_y_pos - samus_y_radius) & 0xF ^ 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
+ uint8 v3 = BTS[cur_block_index];
if (v3 & 0x80) {
- if ((v3 & 0x40) != 0)
- v4 = samus_x_pos ^ 0xF;
- else
- v4 = samus_x_pos;
- uint16 v5 = temp_collision_DD6 + (v4 & 0xF);
- v6 = (kAlignYPos_Tab0[v5] & 0x1F) - temp_collision_DD4 - 1;
- if ((kAlignYPos_Tab0[v5] & 0x1F) - temp_collision_DD4 == 1 || v6 < 0) {
+ uint16 v4 = (v3 & 0x40) != 0 ? samus_x_pos ^ 0xF : samus_x_pos;
+ uint16 v6 = (kAlignYPos_Tab0[temp_collision_DD6 + (v4 & 0xF)] & 0x1F) - temp_collision_DD4 - 1;
+ if ((int16)v6 <= 0) {
samus_y_pos -= v6;
samus_pos_adjusted_by_slope_flag = 1;
}
@@ -606,9 +590,9 @@ uint8 BlockColl_Horiz_Slope_Square(uint16 a, uint16 k) { // 0x948D2B
int16 v4;
int16 v5;
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
- uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R32 & 8) >> 3));
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
+ uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R32_ & 8) >> 3));
if (!R26_) {
if ((((uint8)samus_y_radius + (uint8)samus_y_pos - 1) & 8) == 0) {
if (!kTab948E54[v2])
@@ -626,15 +610,15 @@ LABEL_7:
return 0;
LABEL_10:
R20_ = 0;
- if ((R18_ & 0x8000u) != 0) {
- v5 = samus_x_radius + (R32 | 7) + 1 - samus_x_pos;
+ if ((R18_ & 0x8000) != 0) {
+ v5 = samus_x_radius + (R32_ | 7) + 1 - samus_x_pos;
if (v5 >= 0)
v5 = 0;
R18_ = v5;
samus_x_subpos = 0;
return 1;
} else {
- v4 = (__PAIR32__((R32 & 0xFFF8) - samus_x_radius, R32 & 0xFFF8) - __PAIR32__(samus_x_pos, samus_x_radius)) >> 16;
+ v4 = (__PAIR32__((R32_ & 0xFFF8) - samus_x_radius, R32_ & 0xFFF8) - __PAIR32__(samus_x_pos, samus_x_radius)) >> 16;
if (v4 < 0)
v4 = 0;
R18_ = v4;
@@ -647,9 +631,9 @@ uint8 BlockColl_Vert_Slope_Square(uint16 a, uint16 k) { // 0x948DBD
int16 v4;
int16 v5;
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
- uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R32 & 8) >> 2));
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
+ uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R32_ & 8) >> 2));
if (!R26_) {
if ((((uint8)samus_x_radius + (uint8)samus_x_pos - 1) & 8) == 0) {
if (!kTab948E54[v2])
@@ -667,15 +651,15 @@ LABEL_7:
return 0;
LABEL_10:
R20_ = 0;
- if ((R18_ & 0x8000u) != 0) {
- v5 = samus_y_radius + (R32 | 7) + 1 - samus_y_pos;
+ if ((R18_ & 0x8000) != 0) {
+ v5 = samus_y_radius + (R32_ | 7) + 1 - samus_y_pos;
if (v5 >= 0)
v5 = 0;
R18_ = v5;
samus_y_subpos = 0;
return 1;
} else {
- v4 = (__PAIR32__((R32 & 0xFFF8) - samus_y_radius, R32 & 0xFFF8) - __PAIR32__(samus_y_pos, samus_y_radius)) >> 16;
+ v4 = (__PAIR32__((R32_ & 0xFFF8) - samus_y_radius, R32_ & 0xFFF8) - __PAIR32__(samus_y_pos, samus_y_radius)) >> 16;
if (v4 < 0)
v4 = 0;
R18_ = v4;
@@ -738,15 +722,15 @@ uint8 BlockColl_Horiz_SolidShootGrappleBlock(void) { // 0x948F49
int16 v2;
R20_ = 0;
- if ((R18_ & 0x8000u) != 0) {
- v2 = samus_x_radius + (R32 | 0xF) + 1 - samus_x_pos;
+ if ((R18_ & 0x8000) != 0) {
+ v2 = samus_x_radius + (R32_ | 0xF) + 1 - samus_x_pos;
if (v2 >= 0)
v2 = 0;
R18_ = v2;
samus_x_subpos = 0;
return 1;
} else {
- v0 = (R32 & 0xFFF0) - samus_x_radius - samus_x_pos;
+ v0 = (R32_ & 0xFFF0) - samus_x_radius - samus_x_pos;
if (v0 < 0)
v0 = 0;
R18_ = v0;
@@ -760,15 +744,15 @@ uint8 BlockColl_Vert_SolidShootGrappleBlock(void) { // 0x948F82
int16 v2;
R20_ = 0;
- if ((R18_ & 0x8000u) != 0) {
- v2 = samus_y_radius + (R32 | 0xF) + 1 - samus_y_pos;
+ if ((R18_ & 0x8000) != 0) {
+ v2 = samus_y_radius + (R32_ | 0xF) + 1 - samus_y_pos;
if (v2 >= 0)
v2 = 0;
R18_ = v2;
samus_y_subpos = 0;
return 1;
} else {
- v0 = (R32 & 0xFFF0) - samus_y_radius - samus_y_pos;
+ v0 = (R32_ & 0xFFF0) - samus_y_radius - samus_y_pos;
if (v0 < 0)
v0 = 0;
R18_ = v0;
@@ -838,9 +822,8 @@ uint8 BlockColl_Horiz_SpecialAir(void) { // 0x94906F
v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0) {
- R34 = off_9492D9[area_index];
- uint8 *v2 = RomPtr_94(R34);
- return SpawnPLM(*(uint16 *)&v2[(uint16)(2 * (v0 & 0x7F))]) & 1;
+ const uint16 *v2 = (const uint16 *)RomPtr_94(off_9492D9[area_index]);
+ return SpawnPLM(v2[v0 & 0x7f]) & 1;
} else {
SpawnPLM(kPlmHeaderDefPtrs[v0]);
return 0;
@@ -852,9 +835,8 @@ uint8 BlockColl_Vert_SpecialAir(void) { // 0x94909D
v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0) {
- R34 = off_9492D9[area_index];
- uint8 *v2 = RomPtr_94(R34);
- return SpawnPLM(*(uint16 *)&v2[(uint16)(2 * (v0 & 0x7F))]) & 1;
+ const uint16 *v2 = (const uint16 *)RomPtr_94(off_9492D9[area_index]);
+ return SpawnPLM(v2[v0 & 0x7f]) & 1;
} else {
SpawnPLM(kPlmHeaderDefPtrs[v0]);
return 0;
@@ -866,15 +848,14 @@ uint8 BlockColl_Horiz_SpecialBlock(void) { // 0x9490CB
v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0) {
- R34 = off_9492E9[area_index];
- uint8 *v3 = RomPtr_94(R34);
- uint8 v4 = SpawnPLM(*(uint16 *)&v3[(uint16)(2 * (v0 & 0x7F))]) & 1;
+ const uint16 *v2 = (const uint16 *)RomPtr_94(off_9492E9[area_index]);
+ uint8 v4 = SpawnPLM(v2[v0 & 0x7f]) & 1;
if (v4)
return BlockColl_Horiz_SolidShootGrappleBlock();
return v4;
} else {
uint8 v1 = SpawnPLM(kPlmHeaderDefPtrs[v0]) & 1;
- if (v1 & 1)
+ if (v1)
return BlockColl_Horiz_SolidShootGrappleBlock();
return v1;
}
@@ -885,8 +866,7 @@ uint8 BlockColl_Vert_SpecialBlock(void) { // 0x949102
v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0) {
- R34 = off_9492E9[area_index];
- uint16 *v3 = (uint16*)RomPtr_94(R34);
+ const uint16 *v3 = (const uint16 *)RomPtr_94(off_9492E9[area_index]);
uint8 v4 = SpawnPLM(v3[v0 & 0x7F]) & 1;
if (v4)
return BlockColl_Vert_SolidShootGrappleBlock();
@@ -899,30 +879,23 @@ uint8 BlockColl_Vert_SpecialBlock(void) { // 0x949102
}
}
-#define off_94936B ((uint16*)RomPtr(0x94936b))
uint8 BlockColl_Horiz_BombableAir(void) { // 0x9492F9
- int16 v0;
-
- v0 = BTS[cur_block_index];
+ uint16 v0 = BTS[cur_block_index];
if ((v0 & 0x80) == 0)
SpawnPLM(off_94936B[v0]);
return 0;
}
uint8 BlockColl_Vert_BombableAir(void) { // 0x949313
- int16 v0;
-
- v0 = BTS[cur_block_index];
+ uint16 v0 = BTS[cur_block_index];
if ((v0 & 0x80) == 0)
SpawnPLM(off_94936B[v0]);
return 0;
}
uint8 BlockColl_Horiz_BombBlock(void) { // 0x94932D
- int16 v0;
-
- v0 = BTS[cur_block_index];
+ uint16 v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0)
return BlockColl_Horiz_SolidShootGrappleBlock();
uint8 v1 = SpawnPLM(off_94936B[v0]) & 1;
@@ -933,9 +906,7 @@ uint8 BlockColl_Horiz_BombBlock(void) { // 0x94932D
}
uint8 BlockColl_Vert_BombBlock(void) { // 0x94934C
- int16 v0;
-
- v0 = BTS[cur_block_index];
+ uint16 v0 = BTS[cur_block_index];
if ((v0 & 0x80) != 0)
return BlockColl_Vert_SolidShootGrappleBlock();
uint8 v1 = SpawnPLM(off_94936B[v0]) & 1;
@@ -948,8 +919,8 @@ uint8 BlockColl_Vert_BombBlock(void) { // 0x94934C
uint8 BlockColl_Horiz_Door(void) { // 0x94938B
door_transition_function = FUNC16(DoorTransitionFunction_HandleElevator);
door_bts = BTS[cur_block_index];
- uint16 v0 = *(uint16 *)RomPtr_8F(door_list_pointer + 2 * ((uint8)door_bts & 0x7Fu));
- if ((get_DoorDef(v0)->room_definition_ptr & 0x8000u) == 0) {
+ uint16 v0 = *(uint16 *)RomPtr_8F(door_list_pointer + 2 * (door_bts & 0x7F));
+ if ((get_DoorDef(v0)->room_definition_ptr & 0x8000) == 0) {
if (samus_pose < kGameState_9_HitDoorBlock)
elevator_flags = 1;
return BlockColl_Horiz_SolidShootGrappleBlock();
@@ -963,8 +934,8 @@ uint8 BlockColl_Horiz_Door(void) { // 0x94938B
uint8 BlockColl_Vert_Door(void) { // 0x9493CE
door_transition_function = FUNC16(DoorTransitionFunction_HandleElevator);
door_bts = BTS[cur_block_index];
- uint16 v0 = *(uint16 *)RomPtr_8F(door_list_pointer + 2 * (door_bts & 0x7Fu));
- if (*(int16 *)RomPtr_83(v0) >= 0) {
+ uint16 v0 = *(uint16 *)RomPtr_8F(door_list_pointer + 2 * (door_bts & 0x7F));
+ if ((get_DoorDef(v0)->room_definition_ptr & 0x8000) == 0) {
if (samus_pose < kPose_09_MoveR_NoAim)
elevator_flags = 1;
return BlockColl_Vert_SolidShootGrappleBlock();
@@ -988,14 +959,14 @@ uint8 BlockReact_VertExt(void) { // 0x949447
uint16 v0;
if (BTS[cur_block_index]) {
if ((BTS[cur_block_index] & 0x80) != 0) {
- temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
+ uint16 temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
v0 = cur_block_index;
do {
v0 -= room_width_in_blocks;
++temp_collision_DD4;
} while (temp_collision_DD4);
} else {
- temp_collision_DD4 = BTS[cur_block_index];
+ uint16 temp_collision_DD4 = BTS[cur_block_index];
v0 = cur_block_index;
do {
v0 += room_width_in_blocks;
@@ -1082,15 +1053,15 @@ uint8 BlockColl_Handle_Horiz(void) { // 0x949543
R22_ = R20_ + samus_x_subpos;
uint16 v0 = R18_ + __CFADD__uint16(R20_, samus_x_subpos) + samus_x_pos;
R24_ = v0;
- if ((R18_ & 0x8000u) == 0)
+ if ((R18_ & 0x8000) == 0)
v1 = samus_x_radius + v0 - 1;
else
v1 = v0 - samus_x_radius;
- R32 = v1;
+ R32_ = v1;
uint16 v2 = 2 * (prod + (v1 >> 4));
while (!(BlockColl_Horiz_CheckColl(v2) & 1)) {
v2 += room_width_in_blocks * 2;
- if ((--R26_ & 0x8000u) != 0)
+ if ((--R26_ & 0x8000) != 0)
return 0;
}
return 1;
@@ -1103,16 +1074,16 @@ uint8 BlockColl_Handle_Vert_LeftToRight(void) { // 0x94959E
R22_ = R20_ + samus_y_subpos;
uint16 v0 = R18_ + __CFADD__uint16(R20_, samus_y_subpos) + samus_y_pos, v1;
R24_ = v0;
- if ((R18_ & 0x8000u) == 0)
+ if ((R18_ & 0x8000) == 0)
v1 = samus_y_radius + v0 - 1;
else
v1 = v0 - samus_y_radius;
- R32 = v1;
+ R32_ = v1;
uint16 prod = Mult8x8(v1 >> 4, room_width_in_blocks);
v2 = (uint16)(samus_x_pos - samus_x_radius) >> 4;
cur_block_index = prod + v2;
for (int i = 2 * cur_block_index; !(BlockColl_Vert_CheckColl(i) & 1); i += 2) {
- if ((--R26_ & 0x8000u) != 0)
+ if ((--R26_ & 0x8000) != 0)
return 0;
}
return 1;
@@ -1126,11 +1097,11 @@ uint8 BlockColl_Handle_Vert_RightToLeft(void) { // 0x9495F5
R22_ = R20_ + samus_y_subpos;
uint16 v0 = R18_ + __CFADD__uint16(R20_, samus_y_subpos) + samus_y_pos, v1;
R24_ = v0;
- if ((R18_ & 0x8000u) == 0)
+ if ((R18_ & 0x8000) == 0)
v1 = samus_y_radius + v0 - 1;
else
v1 = v0 - samus_y_radius;
- R32 = v1;
+ R32_ = v1;
uint16 prod = Mult8x8(v1 >> 4, room_width_in_blocks);
v2 = (uint16)(samus_x_radius + samus_x_pos - 1) >> 4;
cur_block_index = prod + v2;
@@ -1142,7 +1113,7 @@ uint8 BlockColl_Handle_Vert_RightToLeft(void) { // 0x9495F5
}
void AbsoluteValueOfInt32(void) { // 0x949653
- if ((R18_ & 0x8000u) != 0) {
+ if ((R18_ & 0x8000) != 0) {
R18_ = ~R18_;
bool v0 = R20_ == 0;
R20_ = -R20_;
@@ -1152,7 +1123,7 @@ void AbsoluteValueOfInt32(void) { // 0x949653
}
void AbsoluteValueOfInt32_0(void) { // 0x949669
- if ((R18_ & 0x8000u) != 0) {
+ if ((R18_ & 0x8000) != 0) {
R18_ = ~R18_;
bool v0 = R20_ == 0;
R20_ = -R20_;
@@ -1496,7 +1467,7 @@ uint8 BlockInsideReact_SpecialAir(void) {
v0 = BTS[cur_block_index] << 8;
if (v0 < 0) {
R34 = g_off_949B06[area_index];
- uint8 *v3 = RomPtr_94(R34);
+ const uint8 *v3 = RomPtr_94(R34);
SpawnPLM(*(uint16 *)&v3[(2 * (HIBYTE(v0) & 0x7F))]);
} else {
off_949966[v0 >> 8]();
@@ -1533,9 +1504,7 @@ void BlockInsideDetection(void) { // 0x949B60
R26_ = samus_x_pos;
samus_bottom_boundary_position = samus_y_radius + samus_y_pos - 1;
R28_ = samus_y_radius + samus_y_pos - 1;
- g_word_7E001E = 0;
- R32 = 0;
- CalculateBlockAt();
+ CalculateBlockAt(R26_, R28_, 0, 0);
uint8 rv;
do {
rv = kSamus_BlockInsideDetection[(HIBYTE(level_data[cur_block_index]) & 0xF0) >> 4]();
@@ -1544,9 +1513,7 @@ void BlockInsideDetection(void) { // 0x949B60
if (((samus_bottom_boundary_position ^ samus_y_pos) & 0xFFF0) != 0) {
R26_ = samus_x_pos;
R28_ = samus_y_pos;
- g_word_7E001E = 0;
- R32 = 0;
- CalculateBlockAt();
+ CalculateBlockAt(R26_, R28_, 0, 0);
do {
rv = kSamus_BlockInsideDetection[(HIBYTE(level_data[cur_block_index]) & 0xF0) >> 4]();
} while (rv & 0x80);
@@ -1556,25 +1523,24 @@ void BlockInsideDetection(void) { // 0x949B60
&& ((samus_y_pos ^ (samus_bottom_boundary_position ^ (uint16)(samus_y_pos - samus_y_radius)) & 0xFFF0) & 0xFFF0) != 0) {
R26_ = samus_x_pos;
R28_ = samus_y_pos - samus_y_radius;
- g_word_7E001E = 0;
- R32 = 0;
- CalculateBlockAt();
+ CalculateBlockAt(R26_, R28_, 0, 0);
do {
rv = kSamus_BlockInsideDetection[(HIBYTE(level_data[cur_block_index]) & 0xF0) >> 4]();
} while (rv & 0x80);
}
}
-void CalculateBlockAt(void) { // 0x949C1D
+void CalculateBlockAt(uint16 r26, uint16 r28, uint16 r30, uint16 r32) { // 0x949C1D
int16 v0;
int16 v1;
+ uint16 temp_collision_DD4;
- v0 = g_word_7E001E + R26_;
- if ((int16)(g_word_7E001E + R26_) >= 0
+ v0 = r30 + r26;
+ if ((int16)(r30 + r26) >= 0
&& sign16(v0 - 4096)
&& (temp_collision_DD4 = (uint16)(v0 & 0xFFF0) >> 4,
- v1 = R32 + R28_,
- (int16)(R32 + R28_) >= 0)
+ v1 = r32 + r28,
+ (int16)(r32 + r28) >= 0)
&& sign16(v1 - 4096)) {
uint16 RegWord = (uint16)(v1 & 0xFFF0) >> 4;
RegWord = Mult8x8(RegWord, room_width_in_blocks);
@@ -1614,10 +1580,10 @@ void BlockFunc_9C73(uint16 v0) {
int v1 = v0 >> 1;
if ((projectile_type[v1] & 0xF00) != 0) {
- temp_collision_DD2 = kBlockFunc_9C73_Tab1[(uint16)(2 * (HIBYTE(projectile_type[v1]) & 0xF) + 1)];
+ temp_collision_DD2 = kBlockFunc_9C73_Tab1[2 * (HIBYTE(projectile_type[v1]) & 0xF) + 1];
} else {
- R18_ = projectile_type[v1] & 0xF;
- temp_collision_DD2 = kBlockFunc_9C73_Tab0[(uint16)(R18_ + 2 * R18_ + 2)];
+ int R18 = projectile_type[v1] & 0xF;
+ temp_collision_DD2 = kBlockFunc_9C73_Tab0[3 * R18 + 2];
}
}
@@ -1635,10 +1601,8 @@ void BombOrPowerBomb_Func1(uint16 v0) { // 0x949CAC
if (v3 >= 0) {
R28_ = projectile_y_pos[v1];
if ((int16)(HIBYTE(v3) - room_height_in_scrolls) < 0) {
- g_word_7E001E = 0;
- R32 = 0;
cur_block_index = 0;
- CalculateBlockAt();
+ CalculateBlockAt(R26_, R28_, 0, 0);
if (temp_collision_DD2 == 2)
BlockColl_BombExplosion(v0);
else
@@ -1698,7 +1662,7 @@ uint8 SetCarry_0(void) { // 0x949D5B
}
uint8 sub_949D5D(void) { // 0x949D5D
- if ((BTS[cur_block_index] & 0x1Fu) < 5)
+ if ((BTS[cur_block_index] & 0x1F) < 5)
return 1;
else
return BlockShotReactVert_Slope_NonSquare() & 1;
@@ -1711,7 +1675,7 @@ uint8 BlockBombedReact_Special(void) { // 0x949D71
if ((v0 & 0x80) != 0) {
uint16 *kBlockBombedReact_Region_Plm = (uint16 *)RomPtr_94(0x9e44);
R18_ = kBlockBombedReact_Region_Plm[area_index];
- uint8 *v2 = RomPtr_94(R18_);
+ const uint8 *v2 = RomPtr_94(R18_);
SpawnPLM(*(uint16 *)&v2[(uint16)(2 * (v0 & 0x7F))]);
} else {
uint16 *kBlockBombedReact_Special_Plm = (uint16 *)RomPtr_94(0x9dA4);
@@ -1853,7 +1817,7 @@ void BlockFunc_A11A(uint16 a) { // 0x94A11A
uint8 BlockShotReactHoriz_Slope(void) { // 0x94A147
- if ((BTS[cur_block_index] & 0x1Fu) < 5)
+ if ((BTS[cur_block_index] & 0x1F) < 5)
return BlockShotReactVert_Slope_Square(BTS[cur_block_index] & 0x1F, cur_block_index);
else
return BlockShotReactVert_Slope_NonSquare();
@@ -1864,7 +1828,7 @@ uint8 SetCarry_1(void) { // 0x94A15C
}
uint8 BlockShotReactVert_Slope(void) { // 0x94A15E
- if ((BTS[cur_block_index] & 0x1Fu) < 5)
+ if ((BTS[cur_block_index] & 0x1F) < 5)
return BlockShotReactHoriz_Slope_Square(BTS[cur_block_index] & 0x1F, cur_block_index);
else
return BlockShotReactHoriz_Slope_NonSquare();
@@ -1957,14 +1921,14 @@ void BlockGetSomePos2(uint16 k) { // 0x94A219
uint8 BlockCollNoWaveBeamHoriz(uint16 k) { // 0x94A23B
int16 v2;
- g_word_7E001E = 0;
+ R30_ = 0;
R18_ = 0;
R20_ = 0;
int v1 = k >> 1;
v2 = projectile_bomb_x_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
BlockGetSomePos1(k);
uint16 prod = Mult8x8((uint16)(projectile_y_pos[v1] - projectile_y_radius[v1]) >> 4, room_width_in_blocks);
uint16 v3 = projectile_bomb_x_subpos[v1];
@@ -1975,7 +1939,7 @@ uint8 BlockCollNoWaveBeamHoriz(uint16 k) { // 0x94A23B
uint16 v6 = R20_ + v4 + projectile_x_pos[v1], v7;
projectile_x_pos[v1] = v6;
R24_ = v6;
- if ((R20_ & 0x8000u) != 0)
+ if ((R20_ & 0x8000) != 0)
v7 = v6 - projectile_x_radius[v1];
else
v7 = projectile_x_radius[v1] + v6 - 1;
@@ -1987,8 +1951,8 @@ uint8 BlockCollNoWaveBeamHoriz(uint16 k) { // 0x94A23B
BlockShotReactHoriz(v8);
v8 += room_width_in_blocks * 2;
--R38;
- } while ((R38 & 0x8000u) == 0);
- if ((R40 & 0x8000u) == 0)
+ } while ((R38 & 0x8000) == 0);
+ if ((R40 & 0x8000) == 0)
return 0;
KillProjectile(k);
return 1;
@@ -1999,14 +1963,14 @@ uint8 BlockCollNoWaveBeamVert(uint16 k) { // 0x94A2CA
int16 v8;
int16 v9;
- g_word_7E001E = 0;
+ R30_ = 0;
R18_ = 0;
R20_ = 0;
int v1 = k >> 1;
v2 = projectile_bomb_y_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
BlockGetSomePos2(k);
uint16 v3 = projectile_bomb_y_subpos[v1];
bool v4 = __CFADD__uint16(R18_, v3);
@@ -2016,7 +1980,7 @@ uint8 BlockCollNoWaveBeamVert(uint16 k) { // 0x94A2CA
uint16 v6 = R20_ + v4 + projectile_y_pos[v1], v7;
projectile_y_pos[v1] = v6;
R24_ = v6;
- if ((R20_ & 0x8000u) != 0)
+ if ((R20_ & 0x8000) != 0)
v7 = v6 - projectile_y_radius[v1];
else
v7 = projectile_y_radius[v1] + v6 - 1;
@@ -2029,8 +1993,8 @@ uint8 BlockCollNoWaveBeamVert(uint16 k) { // 0x94A2CA
BlockShotReactVert(v9);
v9 += 2;
--R38;
- } while ((R38 & 0x8000u) == 0);
- if ((R40 & 0x8000u) == 0)
+ } while ((R38 & 0x8000) == 0);
+ if ((R40 & 0x8000) == 0)
return 0;
KillProjectile(k);
return 1;
@@ -2042,14 +2006,14 @@ uint8 BlockCollWaveBeamHoriz(uint16 k) { // 0x94A352
char v9;
int16 v10;
- g_word_7E001E = 0;
+ R30_ = 0;
R18_ = 0;
R20_ = 0;
int v1 = k >> 1;
v2 = projectile_bomb_x_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
BlockGetSomePos1(k);
uint16 prod = Mult8x8((uint16)(projectile_y_pos[v1] - projectile_y_radius[v1]) >> 4, room_width_in_blocks);
uint16 v3 = projectile_bomb_x_subpos[v1];
@@ -2060,7 +2024,7 @@ uint8 BlockCollWaveBeamHoriz(uint16 k) { // 0x94A352
uint16 v6 = R20_ + v4 + projectile_x_pos[v1], v7;
projectile_x_pos[v1] = v6;
R24_ = v6;
- if ((R20_ & 0x8000u) != 0)
+ if ((R20_ & 0x8000) != 0)
v7 = v6 - projectile_x_radius[v1];
else
v7 = projectile_x_radius[v1] + v6 - 1;
@@ -2076,7 +2040,7 @@ uint8 BlockCollWaveBeamHoriz(uint16 k) { // 0x94A352
BlockShotReactHoriz(v10);
v10 += room_width_in_blocks * 2;
--R38;
- } while ((R38 & 0x8000u) == 0);
+ } while ((R38 & 0x8000) == 0);
}
}
return 0;
@@ -2089,14 +2053,14 @@ uint8 BlockCollWaveBeamVert(uint16 k) { // 0x94A3E4
char v10;
int16 v11;
- g_word_7E001E = 0;
+ R30_ = 0;
R18_ = 0;
R20_ = 0;
int v1 = k >> 1;
v2 = projectile_bomb_y_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
BlockGetSomePos2(k);
uint16 v3 = projectile_bomb_y_subpos[v1];
bool v4 = __CFADD__uint16(R18_, v3);
@@ -2106,7 +2070,7 @@ uint8 BlockCollWaveBeamVert(uint16 k) { // 0x94A3E4
uint16 v6 = R20_ + v4 + projectile_y_pos[v1], v7;
projectile_y_pos[v1] = v6;
R24_ = v6;
- if ((R20_ & 0x8000u) != 0)
+ if ((R20_ & 0x8000) != 0)
v7 = v6 - projectile_y_radius[v1];
else
v7 = projectile_y_radius[v1] + v6 - 1;
@@ -2124,7 +2088,7 @@ uint8 BlockCollWaveBeamVert(uint16 k) { // 0x94A3E4
BlockShotReactVert(v11);
v11 += 2;
--R38;
- } while ((R38 & 0x8000u) == 0);
+ } while ((R38 & 0x8000) == 0);
}
}
return 0;
@@ -2133,7 +2097,7 @@ uint8 BlockCollWaveBeamVert(uint16 k) { // 0x94A3E4
uint8 BlockCollMissileHoriz(uint16 k) { // 0x94A46F
int16 v2;
- g_word_7E001E = 1;
+ R30_ = 1;
R38 = 0;
R26_ = 0;
R18_ = 0;
@@ -2142,7 +2106,7 @@ uint8 BlockCollMissileHoriz(uint16 k) { // 0x94A46F
v2 = projectile_bomb_x_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 prod = Mult8x8(projectile_y_pos[v1] >> 4, room_width_in_blocks);
uint16 v3 = projectile_bomb_x_subpos[v1];
bool v4 = __CFADD__uint16(R18_, v3);
@@ -2164,7 +2128,7 @@ uint8 BlockCollMissileVert(uint16 k) { // 0x94A4D9
int16 v2;
int16 v7;
- g_word_7E001E = 1;
+ R30_ = 1;
R38 = 0;
R26_ = 0;
R18_ = 0;
@@ -2173,7 +2137,7 @@ uint8 BlockCollMissileVert(uint16 k) { // 0x94A4D9
v2 = projectile_bomb_y_speed[v1];
if (v2 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v2;
+ R19_ = v2;
uint16 v3 = projectile_bomb_y_subpos[v1];
bool v4 = __CFADD__uint16(R18_, v3);
uint16 v5 = R18_ + v3;
@@ -2223,14 +2187,14 @@ uint8 BlockShotReact_Slope_NonSquare(uint16 j, uint16 k) { // 0x94A58F
int16 v5;
uint16 v2;
- temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
+ uint16 temp_collision_DD6 = 16 * (BTS[k] & 0x1F);
if ((BTS[k] & 0x40) != 0)
v2 = projectile_x_pos[j >> 1] ^ 0xF;
else
v2 = projectile_x_pos[j >> 1];
uint16 v6 = temp_collision_DD6 + (v2 & 0xF);
if (!(BTS[k] & 0x80)) {
- temp_collision_DD4 = projectile_y_pos[j >> 1] & 0xF;
+ uint16 temp_collision_DD4 = projectile_y_pos[j >> 1] & 0xF;
v5 = kAlignYPos_Tab0[v6] & 0x1F;
if ((int16)(v5 - temp_collision_DD4) < 0 || v5 == temp_collision_DD4) {
R38 = 0;
@@ -2240,7 +2204,7 @@ uint8 BlockShotReact_Slope_NonSquare(uint16 j, uint16 k) { // 0x94A58F
return 0;
}
} else {
- temp_collision_DD4 = projectile_y_pos[j >> 1] & 0xF ^ 0xF;
+ uint16 temp_collision_DD4 = projectile_y_pos[j >> 1] & 0xF ^ 0xF;
v3 = kAlignYPos_Tab0[v6] & 0x1F;
if ((int16)(v3 - temp_collision_DD4) < 0 || v3 == temp_collision_DD4) {
R38 = 0;
@@ -2276,10 +2240,10 @@ uint8 BlockCollSpreadBomb(uint16 k) { // 0x94A621
int v1 = k >> 1;
R26_ = projectile_x_pos[v1];
R28_ = projectile_y_pos[v1];
- g_word_7E001E = 0;
- R32 = 0;
+ R30_ = 0;
+ R32_ = 0;
cur_block_index = 0;
- CalculateBlockAt();
+ CalculateBlockAt(R26_, R28_, R30_, R32_);
if (!projectile_variables[v1]) {
BlockColl_BombExplosion(k);
return 0;
@@ -2294,10 +2258,10 @@ uint8 BlockCollSpreadBomb(uint16 k) { // 0x94A621
}
uint8 BlockShotReactVert_Slope_Square(uint16 a, uint16 k) { // 0x94A66A
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R28_ & 8) >> 3));
- if (!g_word_7E001E) {
+ if (!R30_) {
if (!R26_) {
int v3 = projectile_index >> 1;
if (((projectile_y_pos[v3] - projectile_y_radius[v3]) & 8) != 0
@@ -2329,10 +2293,10 @@ uint8 BlockShotReactVert_Slope_Square(uint16 a, uint16 k) { // 0x94A66A
uint8 BlockShotReactHoriz_Slope_Square(uint16 a, uint16 k) { // 0x94A71A
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R28_ & 8) >> 2));
- if (!g_word_7E001E) {
+ if (!R30_) {
if (!R26_) {
int v3 = projectile_index >> 1;
if (((projectile_x_pos[v3] - projectile_x_radius[v3]) & 8) != 0
@@ -2422,12 +2386,12 @@ uint8 BlockCollGrappleBeam(void) { // 0x94A85B
*(uint16 *)((char *)&grapple_beam_tmpD82 + 1) = grapple_beam_extension_x_velocity;
*(uint32 *)&grapple_beam_tmpD82 >>= 2;
- if ((grapple_beam_extension_x_velocity & 0x8000u) != 0)
+ if ((grapple_beam_extension_x_velocity & 0x8000) != 0)
grapple_beam_tmpD84 |= 0xFFC0u;
*(uint16 *)((char *)&grapple_beam_y_quarter_subvel + 1) = grapple_beam_extension_y_velocity;
*(uint32 *)&grapple_beam_y_quarter_subvel >>= 2;
- if ((grapple_beam_extension_y_velocity & 0x8000u) != 0)
+ if ((grapple_beam_extension_y_velocity & 0x8000) != 0)
grapple_beam_y_quarter_vel |= 0xFFC0u;
grapple_beam_tmpD8A = 4;
while (1) {
@@ -2511,14 +2475,14 @@ void BlockFunc_A957(void) {
int16 v7;
uint16 v0 = grapple_beam_tmpD82, v2, v3;
- if ((grapple_beam_flags & 0x8000u) == 0) {
+ if ((grapple_beam_flags & 0x8000) == 0) {
int v1 = grapple_beam_tmpD82 >> 1;
- if ((kSinCosTable8bit_Sext[v1 + 64] & 0x8000u) != 0)
+ if ((kSinCosTable8bit_Sext[v1 + 64] & 0x8000) != 0)
v2 = grapple_beam_end_x_pos & 0xFFF0 | 7;
else
v2 = grapple_beam_end_x_pos & 0xFFF0 | 8;
grapple_beam_end_x_pos = v2;
- if ((kSinCosTable8bit_Sext[v1] & 0x8000u) != 0)
+ if ((kSinCosTable8bit_Sext[v1] & 0x8000) != 0)
v3 = grapple_beam_end_y_pos & 0xFFF0 | 7;
else
v3 = grapple_beam_end_y_pos & 0xFFF0 | 8;
@@ -2722,7 +2686,7 @@ void BlockFunc_AC11(void) { // 0x94AC11
uint8 BlockFunc_AC31(void) { // 0x94AC31
if (!grapple_beam_length_delta)
return 0;
- if ((grapple_beam_length_delta & 0x8000u) != 0) {
+ if ((grapple_beam_length_delta & 0x8000) != 0) {
uint16 v0 = grapple_beam_length_delta + grapple_beam_length;
if ((uint16)(grapple_beam_length_delta + grapple_beam_length) < 8u) {
grapple_beam_length_delta = 0;
@@ -2750,7 +2714,7 @@ LABEL_8:
}
uint16 v3;
v3 = grapple_beam_length_delta + grapple_beam_length;
- if ((uint16)(grapple_beam_length_delta + grapple_beam_length) >= 0x3Fu) {
+ if ((uint16)(grapple_beam_length_delta + grapple_beam_length) >= 0x3F) {
grapple_beam_length_delta = 0;
v3 = 63;
}
@@ -2825,9 +2789,9 @@ LABEL_12:
*(uint16 *)&grapple_beam_end_subangle += g_word_7E0D9C;
grapple_beam_end_angles_mirror = *(uint16 *)&grapple_beam_end_subangle;
grapple_beam_unkD36 &= ~0x8000u;
- if ((--grapple_beam_unkD30 & 0x8000u) != 0)
+ if ((--grapple_beam_unkD30 & 0x8000) != 0)
grapple_beam_unkD30 = 0;
- if ((grapple_beam_unkD2E & 0x8000u) == 0) {
+ if ((grapple_beam_unkD2E & 0x8000) == 0) {
v3 = grapple_beam_unkD2E - 6;
if ((int16)(grapple_beam_unkD2E - 6) >= 0) {
LABEL_19:
@@ -2857,9 +2821,9 @@ LABEL_28:
*(uint16 *)&grapple_beam_end_subangle += g_word_7E0D9C;
grapple_beam_end_angles_mirror = *(uint16 *)&grapple_beam_end_subangle;
grapple_beam_unkD36 &= ~0x8000u;
- if ((--grapple_beam_unkD30 & 0x8000u) != 0)
+ if ((--grapple_beam_unkD30 & 0x8000) != 0)
grapple_beam_unkD30 = 0;
- if ((grapple_beam_unkD2E & 0x8000u) == 0) {
+ if ((grapple_beam_unkD2E & 0x8000) == 0) {
v6 = grapple_beam_unkD2E - 6;
if ((int16)(grapple_beam_unkD2E - 6) >= 0) {
LABEL_35:
@@ -2897,7 +2861,7 @@ LABEL_39:
}
uint8 BlockFunc_AEE3(void) { // 0x94AEE3
- if (((grapple_beam_unkD26 ^ *(uint16 *)&grapple_beam_end_subangle) & 0x8000u) != 0) {
+ if (((grapple_beam_unkD26 ^ *(uint16 *)&grapple_beam_end_subangle) & 0x8000) != 0) {
grapple_beam_unkD38 = 0;
return 1;
} else {
@@ -2947,19 +2911,19 @@ void HandleGrappleBeamGfx(void) { // 0x94AFBA
if ((kSinCosTable8bit_Sext[v1 + 64] & 0x1000) != 0)
--R28_;
*(uint16 *)((char *)&R26_ + 1) = v2;
- g_word_7E001E = 0;
- R32 = 0;
+ R30_ = 0;
+ R32_ = 0;
uint16 v3 = 8 * kSinCosTable8bit_Sext[v1];
if ((kSinCosTable8bit_Sext[v1] & 0x1000) != 0)
- --R32;
- *(uint16 *)((char *)&g_word_7E001E + 1) = v3;
+ --R32_;
+ *(uint16 *)((char *)&R30_ + 1) = v3;
R38 = (uint16)(*(uint16 *)&grapple_beam_end_subangle & 0x8000) >> 1;
R38 |= 2 * ((*(uint16 *)&grapple_beam_end_subangle ^ R38) & 0x4000 ^ 0x4000);
R20_ = x_pos_of_start_of_grapple_beam_prevframe - layer1_x_pos - 4;
R18_ = 0;
R24_ = y_pos_of_start_of_grapple_beam_prevframe - layer1_y_pos - 4;
R22_ = 0;
- if ((grapple_beam_length & 0x8000u) == 0) {
+ if ((grapple_beam_length & 0x8000) == 0) {
RegWord = grapple_beam_length / 8;
if (RegWord >= 0) {
R40 = (RegWord & 0xF) - 1;
@@ -2969,9 +2933,9 @@ void HandleGrappleBeamGfx(void) { // 0x94AFBA
uint16 v10;
if (grapple_segment_anim_instr_timers[v6]-- == 1) {
for (i = grapple_segment_anim_instr_ptrs[v6]; ; ) {
- uint16 *v9 = (uint16 *)RomPtr_94(i);
+ const uint16 *v9 = (const uint16 *)RomPtr_94(i);
v10 = *v9;
- if ((*v9 & 0x8000u) == 0)
+ if ((*v9 & 0x8000) == 0)
break;
R36 = *v9;
i = CallGrappleInstr(v10 | 0x940000, i + 2);
@@ -2986,7 +2950,7 @@ void HandleGrappleBeamGfx(void) { // 0x94AFBA
DrawGrappleOams(v12);
v5 -= 2;
--R40;
- } while ((R40 & 0x8000u) == 0);
+ } while ((R40 & 0x8000) == 0);
if (samus_pose == kPose_B2_FaceR_Grapple_Air || samus_pose == kPose_B3_FaceL_Grapple_Air)
DrawGrappleOams3();
else
@@ -3007,7 +2971,7 @@ void DrawGrappleOams(uint16 j) { // 0x94B0AA
R20_ = HIWORD(v3);
R18_ = v3;
*(uint16 *)&v2->ycoord = R24_;
- v4 = __PAIR32__(R32, g_word_7E001E) + __PAIR32__(R24_, R22_);
+ v4 = __PAIR32__(R32_, R30_) + __PAIR32__(R24_, R22_);
R24_ = HIWORD(v4);
R22_ = v4;
*(uint16 *)&v2->charnum = R38 | j;
@@ -3059,4 +3023,4 @@ void DrawGrappleOams3(void) { // 0x94B14B
*(uint16 *)&v2->ycoord = grapple_beam_end_y_pos - layer1_y_pos - 4;
*(uint16 *)&v2->charnum = 14880;
oam_next_ptr = v0 + 4;
-}
+}
\ No newline at end of file
diff --git a/src/sm_9b.c b/src/sm_9b.c
index c5eba4c..fb72a0c 100644
--- a/src/sm_9b.c
+++ b/src/sm_9b.c
@@ -3,27 +3,56 @@
#include "variables.h"
#include "funcs.h"
-#define g_off_9BA4B3 ((uint16*)RomPtr(0x9ba4b3))
-#define g_off_9BA4CB ((uint16*)RomPtr(0x9ba4cb))
-#define g_off_9BA4E3 ((uint16*)RomPtr(0x9ba4e3))
+
+#define g_off_9BA4B3 ((uint16*)RomFixedPtr(0x9ba4b3))
+#define g_off_9BA4CB ((uint16*)RomFixedPtr(0x9ba4cb))
+#define g_off_9BA4E3 ((uint16*)RomFixedPtr(0x9ba4e3))
+#define g_off_9BB5C8 ((uint16*)RomFixedPtr(0x9bb5c8))
+#define g_byte_9BB823 ((uint8*)RomFixedPtr(0x9bb823))
+#define g_off_9BB6D2 ((uint16*)RomFixedPtr(0x9bb6d2))
+#define kDeathSequencePals_PowerSuit ((uint16*)RomFixedPtr(0x9bb7d3))
+#define kDeathSequencePals_VariaSuit ((uint16*)RomFixedPtr(0x9bb7e7))
+#define kDeathSequencePals_GravitySuit ((uint16*)RomFixedPtr(0x9bb7fb))
+#define kDeathSequencePals_Suitless ((uint16*)RomFixedPtr(0x9bb80f))
+#define g_off_9BC3C6 ((uint16*)RomFixedPtr(0x9bc3c6))
+#define g_off_9BC3EE ((uint16*)RomFixedPtr(0x9bc3ee))
+#define g_off_9BC416 ((uint16*)RomFixedPtr(0x9bc416))
+#define grapple_beam_special_angles ((GrappleBeamSpecialAngles*)RomFixedPtr(0x9bc43e))
+#define kGrappleBeam_SwingingData ((uint8*)RomFixedPtr(0x9bc1c2))
+#define kGrappleBeam_SwingingData2 ((uint8*)RomFixedPtr(0x9bc2c2))
+#define kGrappleBeam_SwingingData3 ((uint8*)RomFixedPtr(0x9bc302))
+#define kGrappleBeam_OriginX_NoRun ((uint16*)RomFixedPtr(0x9bc122))
+#define kGrappleBeam_OriginY_NoRun ((uint16*)RomFixedPtr(0x9bc136))
+#define kGrappleBeam_0x0d1a_offs_NoRun ((uint16*)RomFixedPtr(0x9bc14a))
+#define kGrappleBeam_0x0d1c_offs_NoRun ((uint16*)RomFixedPtr(0x9bc15e))
+#define kGrappleBeam_OriginX_Run ((uint16*)RomFixedPtr(0x9bc172))
+#define kGrappleBeam_OriginY_Run ((uint16*)RomFixedPtr(0x9bc186))
+#define kGrappleBeam_0x0d1a_offs_Run ((uint16*)RomFixedPtr(0x9bc19a))
+#define kGrappleBeam_0x0d1c_offs_Run ((uint16*)RomFixedPtr(0x9bc1ae))
+#define g_off_9BC344 (*(uint16*)RomFixedPtr(0x9bc344))
+#define g_off_9BC342 (*(uint16*)RomFixedPtr(0x9bc342))
+#define g_off_9BC346 ((uint16*)RomFixedPtr(0x9bc346))
+#define kFlareAnimDelays ((uint16*)RomFixedPtr(0x90c481))
+#define kFlareAnimDelays_Main ((uint8*)RomFixedPtr(0x90c487))
+#define kFlareAnimDelays_SlowSparks ((uint8*)RomFixedPtr(0x90c4a7))
+#define kFlareAnimDelays_FastSparks ((uint8*)RomFixedPtr(0x90c4ae))
+#define g_word_93A22B ((uint16*)RomFixedPtr(0x93a22b))
+#define g_word_93A225 ((uint16*)RomFixedPtr(0x93a225))
+#define g_byte_9BC9BA ((uint8*)RomFixedPtr(0x9bc9ba))
+#define g_byte_9BC9C4 ((uint8*)RomFixedPtr(0x9bc9c4))
+#define kGrappleBeam_Ext_Xvel ((uint16*)RomFixedPtr(0x9bc0db))
+#define kGrappleBeam_Ext_Yvel ((uint16*)RomFixedPtr(0x9bc0ef))
+#define kGrappleBeam_Init_EndAngle ((uint16*)RomFixedPtr(0x9bc104))
+
+
+
static const uint8 kDeathAnimationFrames[28] = {
5, 5, 5, 5, 1, 5, 5, 0, 1,
0, 5, 5, 5, 5, 5, 5, 5, 1,
1, 1, 5, 5, 5, 5, 5, 5, 5,
5,
};
-#define g_off_9BB5C8 ((uint16*)RomPtr(0x9bb5c8))
-#define g_byte_9BB823 ((uint8*)RomPtr(0x9bb823))
-#define g_off_9BB6D2 ((uint16*)RomPtr(0x9bb6d2))
-#define kDeathSequencePals_PowerSuit ((uint16*)RomPtr(0x9bb7d3))
-#define kDeathSequencePals_VariaSuit ((uint16*)RomPtr(0x9bb7e7))
-#define kDeathSequencePals_GravitySuit ((uint16*)RomPtr(0x9bb7fb))
-#define kDeathSequencePals_Suitless ((uint16*)RomPtr(0x9bb80f))
-#define g_off_9BC3C6 ((uint16*)RomPtr(0x9bc3c6))
-#define g_off_9BC3EE ((uint16*)RomPtr(0x9bc3ee))
-#define g_off_9BC416 ((uint16*)RomPtr(0x9bc416))
-#define grapple_beam_special_angles ((GrappleBeamSpecialAngles*)RomPtr(0x9bc43e))
static const uint16 g_word_9BC118 = 24;
static const uint16 g_word_9BC11A = 0xc;
static const uint16 g_word_9BC11C = 5;
@@ -42,31 +71,6 @@ static const uint8 kIsGrappleBannedForMovementType[28] = {
1, 0, 0, 1, 1, 1, 0, 1, 1, 1,
1, 0, 0, 1, 1, 1, 0, 1,
};
-#define kGrappleBeam_SwingingData ((uint8*)RomPtr(0x9bc1c2))
-#define kGrappleBeam_SwingingData2 ((uint8*)RomPtr(0x9bc2c2))
-#define kGrappleBeam_SwingingData3 ((uint8*)RomPtr(0x9bc302))
-#define kGrappleBeam_OriginX_NoRun ((uint16*)RomPtr(0x9bc122))
-#define kGrappleBeam_OriginY_NoRun ((uint16*)RomPtr(0x9bc136))
-#define kGrappleBeam_0x0d1a_offs_NoRun ((uint16*)RomPtr(0x9bc14a))
-#define kGrappleBeam_0x0d1c_offs_NoRun ((uint16*)RomPtr(0x9bc15e))
-#define kGrappleBeam_OriginX_Run ((uint16*)RomPtr(0x9bc172))
-#define kGrappleBeam_OriginY_Run ((uint16*)RomPtr(0x9bc186))
-#define kGrappleBeam_0x0d1a_offs_Run ((uint16*)RomPtr(0x9bc19a))
-#define kGrappleBeam_0x0d1c_offs_Run ((uint16*)RomPtr(0x9bc1ae))
-#define g_off_9BC344 (*(uint16*)RomPtr(0x9bc344))
-#define g_off_9BC342 (*(uint16*)RomPtr(0x9bc342))
-#define g_off_9BC346 ((uint16*)RomPtr(0x9bc346))
-#define kFlareAnimDelays ((uint16*)RomPtr(0x90c481))
-#define kFlareAnimDelays_Main ((uint8*)RomPtr(0x90c487))
-#define kFlareAnimDelays_SlowSparks ((uint8*)RomPtr(0x90c4a7))
-#define kFlareAnimDelays_FastSparks ((uint8*)RomPtr(0x90c4ae))
-#define g_word_93A22B ((uint16*)RomPtr(0x93a22b))
-#define g_word_93A225 ((uint16*)RomPtr(0x93a225))
-#define g_byte_9BC9BA ((uint8*)RomPtr(0x9bc9ba))
-#define g_byte_9BC9C4 ((uint8*)RomPtr(0x9bc9c4))
-#define kGrappleBeam_Ext_Xvel ((uint16*)RomPtr(0x9bc0db))
-#define kGrappleBeam_Ext_Yvel ((uint16*)RomPtr(0x9bc0ef))
-#define kGrappleBeam_Init_EndAngle ((uint16*)RomPtr(0x9bc104))
void ProjectileTrail_Func5(uint16 k, uint16 j) { // 0x9BA3CC
ProjectileInsts_GetValue(k);
@@ -90,7 +94,7 @@ void ProjectileTrail_Func5(uint16 k, uint16 j) { // 0x9BA3CC
v5 = g_off_9BA4B3[projectile_type[v3] & 0xF] + 2 * (projectile_dir[v3] & 0xF);
}
uint16 v6 = *(uint16 *)RomPtr_9B(v5) + 4 * R22_;
- uint8 *p = RomPtr_9B(v6);
+ const uint8 *p = RomPtr_9B(v6);
int v7 = j >> 1;
projectiletrail_left_y_pos[v7] = R20_ + (int8)p[1] - 4;
projectiletrail_left_x_pos[v7] = R18_ + (int8)p[0] - 4;
@@ -147,41 +151,9 @@ uint16 HandleSamusDeathSequence(void) { // 0x9BB441
}
void HandleSamusDeathSequence_Helper2(void) { // 0x9BB4B6
- uint16 *v0 = (uint16 *)RomPtr_9B(g_off_9BB5C8[samus_suit_palette_index >> 1]);
- uint16 *v1 = (uint16 *)RomPtr_9B(*v0);
- palette_buffer[192] = *v1;
- palette_buffer[193] = v1[1];
- palette_buffer[194] = v1[2];
- palette_buffer[195] = v1[3];
- palette_buffer[196] = v1[4];
- palette_buffer[197] = v1[5];
- palette_buffer[198] = v1[6];
- palette_buffer[199] = v1[7];
- palette_buffer[200] = v1[8];
- palette_buffer[201] = v1[9];
- palette_buffer[202] = v1[10];
- palette_buffer[203] = v1[11];
- palette_buffer[204] = v1[12];
- palette_buffer[205] = v1[13];
- palette_buffer[206] = v1[14];
- palette_buffer[207] = v1[15];
- uint16 *v2 = (uint16 *)RomPtr_9B(0xA120);
- palette_buffer[240] = *v2;
- palette_buffer[241] = v2[1];
- palette_buffer[242] = v2[2];
- palette_buffer[243] = v2[3];
- palette_buffer[244] = v2[4];
- palette_buffer[245] = v2[5];
- palette_buffer[246] = v2[6];
- palette_buffer[247] = v2[7];
- palette_buffer[248] = v2[8];
- palette_buffer[249] = v2[9];
- palette_buffer[250] = v2[10];
- palette_buffer[251] = v2[11];
- palette_buffer[252] = v2[12];
- palette_buffer[253] = v2[13];
- palette_buffer[254] = v2[14];
- palette_buffer[255] = v2[15];
+ const uint16 *v0 = (const uint16 *)RomPtr_9B(g_off_9BB5C8[samus_suit_palette_index >> 1]);
+ memcpy(&palette_buffer[192], RomPtr_9B(*v0), 32);
+ memcpy(&palette_buffer[240], RomPtr_9B(addr_word_9BA120), 32);
QueueTransferOfSamusDeathSequence(8);
game_options_screen_index = g_byte_9BB823[0];
g_word_7E0DE4 = 0;
@@ -190,43 +162,10 @@ void HandleSamusDeathSequence_Helper2(void) { // 0x9BB4B6
}
void CopyPalettesForSamusDeath(uint16 v0) { // 0x9BB5CE
- R20_ = g_off_9BB6D2[samus_suit_palette_index >> 1];
- R18_ = kDeathSequencePals_Suitless[v0 >> 1];
- uint16 *v1 = (uint16 *)RomPtr_9B(R20_ + v0);
- uint16 *v2 = (uint16 *)RomPtr_9B(*v1);
- palette_buffer[192] = *v2;
- palette_buffer[193] = v2[1];
- palette_buffer[194] = v2[2];
- palette_buffer[195] = v2[3];
- palette_buffer[196] = v2[4];
- palette_buffer[197] = v2[5];
- palette_buffer[198] = v2[6];
- palette_buffer[199] = v2[7];
- palette_buffer[200] = v2[8];
- palette_buffer[201] = v2[9];
- palette_buffer[202] = v2[10];
- palette_buffer[203] = v2[11];
- palette_buffer[204] = v2[12];
- palette_buffer[205] = v2[13];
- palette_buffer[206] = v2[14];
- palette_buffer[207] = v2[15];
- uint16 *v3 = (uint16 *)RomPtr_9B(R18_);
- palette_buffer[240] = *v3;
- palette_buffer[241] = v3[1];
- palette_buffer[242] = v3[2];
- palette_buffer[243] = v3[3];
- palette_buffer[244] = v3[4];
- palette_buffer[245] = v3[5];
- palette_buffer[246] = v3[6];
- palette_buffer[247] = v3[7];
- palette_buffer[248] = v3[8];
- palette_buffer[249] = v3[9];
- palette_buffer[250] = v3[10];
- palette_buffer[251] = v3[11];
- palette_buffer[252] = v3[12];
- palette_buffer[253] = v3[13];
- palette_buffer[254] = v3[14];
- palette_buffer[255] = v3[15];
+ int R20 = g_off_9BB6D2[samus_suit_palette_index >> 1];
+ const uint16 *v1 = (const uint16 *)RomPtr_9B(R20 + v0);
+ memcpy(&palette_buffer[192], RomPtr_9B(*v1), 32);
+ memcpy(&palette_buffer[240], RomPtr_9B(kDeathSequencePals_Suitless[v0 >> 1]), 32);
}
void QueueTransferOfSamusDeathSequence(uint16 v0) { // 0x9BB6D8
@@ -247,20 +186,13 @@ uint16 GameState_24_SamusNoHealth_Explosion_Helper(void) { // 0x9BB701
}
void GameState_24_SamusNoHealth_Explosion_1(void) { // 0x9BB710
- *(VoidP *)((char *)&R0_.addr + 1) = 32256;
if (!substate && g_word_7E0DE4) {
- uint16 v0 = 2 * g_word_7E0DE6;
- R0_.addr = -16384;
- uint16 v1 = 0;
- do {
- IndirWriteWord(&R0_, v1, kShadesOfWhite[v0 >> 1]);
- v1 += 2;
- } while ((int16)(v1 - 384) < 0);
- uint16 v2 = 416;
- do {
- IndirWriteWord(&R0_, v2, kShadesOfWhite[v0 >> 1]);
- v2 += 2;
- } while ((int16)(v2 - 480) < 0);
+ int v0 = g_word_7E0DE6;
+ uint16 *dst = (uint16*)(g_ram + 0xc000);
+ for(int i = 0; i < 384/2; i++)
+ dst[i] = kShadesOfWhite[v0];
+ for(int i = 416/2; i < 480/2; i++)
+ dst[i] = kShadesOfWhite[v0];
if (sign16(g_word_7E0DE6 - 20))
++g_word_7E0DE6;
}
@@ -291,11 +223,11 @@ void CancelGrappleBeamIfIncompatiblePose(void) { // 0x9BB861
if (kIsGrappleBannedForMovementType[samus_movement_type]) {
LABEL_2:
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive))
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive))
grapple_beam_function = FUNC16(GrappleBeamFunc_Cancel);
return;
}
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)
&& sign16(grapple_beam_function + 0x3882)) {
v0 = *(&kPoseParams[0].direction_shots_fired + (uint16)(8 * samus_pose));
if ((v0 & 0xF0) == 0) {
@@ -333,36 +265,36 @@ int ProcessEnemyGrappleBeamColl(uint16 a) { // 0x9BB907
uint16 v3;
v1 = 2 * a;
- switch (v1) {
+ switch (a) {
case 0:
- case 4:
- return -1; // clc
- case 6:
- return 1;
case 2:
- case 8:
- case 10:
+ return -1; // clc
+ case 3:
+ return 1;
+ case 1:
+ case 4:
+ case 5:
+ return 0;
+ case 6:
+ R18_ = *((uint16 *)RomPtr_A0(R18_) + 3);
+ if ((equipped_items & 0x20) != 0) {
+ R18_ >>= 1;
+ R18_ >>= 1;
+ v3 = R18_;
+ } else {
+ if (equipped_items & 1)
+ R18_ >>= 1;
+ v3 = R18_;
+ }
+ Samus_DealDamage(v3);
+ samus_invincibility_timer = 96;
+ samus_knockback_timer = 5;
+ knockback_x_dir = samus_pose_x_dir == 4;
+ return 1;
+ default:
+ Unreachable();
return 0;
}
- if (v1 != 12) {
- Unreachable();
- while (1);
- }
- R18_ = *((uint16 *)RomPtr_A0(R18_) + 3);
- if ((equipped_items & 0x20) != 0) {
- R18_ >>= 1;
- R18_ >>= 1;
- v3 = R18_;
- } else {
- if (equipped_items & 1)
- R18_ >>= 1;
- v3 = R18_;
- }
- Samus_DealDamage(v3);
- samus_invincibility_timer = 96;
- samus_knockback_timer = 5;
- knockback_x_dir = samus_pose_x_dir == 4;
- return 1;
}
void CallGrappleNextFunc(uint32 ea) {
@@ -462,15 +394,10 @@ void UNUSED_sub_9BBA31(void) { // 0x9BBA31
}
void HandleConnectingGrapple_Swinging(void) { // 0x9BBA61
- char v1; // t0
-
samus_special_transgfx_index = 9;
R18_ = samus_x_pos - grapple_beam_end_x_pos;
R20_ = samus_y_pos - grapple_beam_end_y_pos;
- uint16 v0 = CalculateAngleFromXY();
- v1 = v0;
- LOBYTE(v0) = HIBYTE(v0);
- HIBYTE(v0) = v1;
+ uint16 v0 = swap16(CalculateAngleFromXY());
*(uint16 *)&grapple_beam_end_subangle = v0;
grapple_beam_end_angles_mirror = v0;
grapple_beam_length_delta = 0;
@@ -480,15 +407,10 @@ void HandleConnectingGrapple_Swinging(void) { // 0x9BBA61
}
void HandleConnectingGrapple_StuckInPlace(void) { // 0x9BBA9B
- char v1; // t0
-
samus_special_transgfx_index = 10;
R18_ = samus_x_pos - grapple_beam_end_x_pos;
R20_ = samus_y_pos - grapple_beam_end_y_pos;
- uint16 v0 = CalculateAngleFromXY();
- v1 = v0;
- LOBYTE(v0) = HIBYTE(v0);
- HIBYTE(v0) = v1;
+ uint16 v0 = swap16(CalculateAngleFromXY());
*(uint16 *)&grapple_beam_end_subangle = v0;
grapple_beam_end_angles_mirror = v0;
grapple_beam_length_delta = 0;
@@ -498,9 +420,6 @@ void HandleConnectingGrapple_StuckInPlace(void) { // 0x9BBA9B
}
uint8 HandleSpecialGrappleBeamAngles(void) { // 0x9BBAD5
- int16 v2;
- int16 v3;
-
uint16 v0 = 7;
while (*(uint16 *)&grapple_beam_end_subangle != grapple_beam_special_angles[v0].field_0) {
if ((--v0 & 0x8000u) != 0)
@@ -512,14 +431,14 @@ uint8 HandleSpecialGrappleBeamAngles(void) { // 0x9BBAD5
grapple_beam_function = grapple_beam_special_angles[v0].field_8;
samus_special_transgfx_index = 0;
slow_grabble_scrolling_flag = 0;
- v2 = samus_x_pos - samus_prev_x_pos;
+ int16 v2 = samus_x_pos - samus_prev_x_pos;
if ((int16)(samus_x_pos - samus_prev_x_pos) < 0) {
if (sign16(v2 + 12))
samus_prev_x_pos = samus_x_pos + 12;
} else if (!sign16(v2 - 13)) {
samus_prev_x_pos = samus_x_pos - 12;
}
- v3 = samus_y_pos - samus_prev_y_pos;
+ int16 v3 = samus_y_pos - samus_prev_y_pos;
if ((int16)(samus_y_pos - samus_prev_y_pos) < 0) {
if (sign16(v3 + 12))
samus_prev_y_pos = samus_y_pos + 12;
@@ -809,7 +728,7 @@ void GrappleBeamHandler(void) { // 0x9BC490
samus_grapple_flags &= ~1u;
CancelGrappleBeamIfIncompatiblePose();
CallGrappleBeamFunc(grapple_beam_function | 0x9B0000);
- if (grapple_beam_function != (uint16)FUNC16(GrappleBeamFunc_Inactive)
+ if (grapple_beam_function != FUNC16(GrappleBeamFunc_Inactive)
&& sign16(grapple_beam_function + 0x37AA)
&& (samus_suit_palette_index & 4) == 0
&& fx_type
@@ -1256,4 +1175,4 @@ void GrappleBeamFunc_ReleaseFromSwing(void) { // 0x9BCB8B
hud_item_index = 0;
samus_auto_cancel_hud_item_index = 0;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_a0.c b/src/sm_a0.c
index c3fe13f..9db5d8b 100644
--- a/src/sm_a0.c
+++ b/src/sm_a0.c
@@ -5,7 +5,18 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kEnemyLayerToQueuePtr ((uint16*)RomPtr(0xa0b133))
+
+#define kEnemyLayerToQueuePtr ((uint16*)RomFixedPtr(0xa0b133))
+#define kStandardSpriteTiles ((uint16*)RomFixedPtr(0x9ad200))
+#define kSine8bit ((uint8*)RomFixedPtr(0xa0b143))
+#define kEquationForQuarterCircle ((uint16*)RomFixedPtr(0xa0b7ee))
+#define g_off_A0C2DA ((uint16*)RomFixedPtr(0xa0c2da))
+#define CHECK_locret_A0C434(i) (byte_A0C435[i] & 0x80 ? -1 : 0)
+#define g_word_A0C49F ((uint16*)RomFixedPtr(0xa0c49f))
+#define kAlignYPos_Tab0 ((uint8*)RomFixedPtr(0x948b2b))
+
+
+
void Enemy_GrappleReact_NoInteract_A0(void) { // 0xA08000
SwitchEnemyAiToMainAi();
@@ -75,106 +86,98 @@ void func_nullsub_170(void) {
;
}
-uint16 EnemyInstr_SetAiPreInstr(uint16 k, uint16 j) { // 0xA0806B
- uint16 v2 = *(uint16 *)RomPtr_A0(j);
- gEnemyData(k)->ai_preinstr = v2;
- return j + 2;
+const uint16 *EnemyInstr_SetAiPreInstr(uint16 k, const uint16 *jp) { // 0xA0806B
+ gEnemyData(k)->ai_preinstr = jp[0];
+ return jp + 1;
}
-uint16 EnemyInstr_ClearAiPreInstr(uint16 k, uint16 j) { // 0xA08074
+const uint16 *EnemyInstr_ClearAiPreInstr(uint16 k, const uint16 *jp) { // 0xA08074
gEnemyData(k)->ai_preinstr = FUNC16(nullsub_171);
- return j;
+ return jp;
}
void func_nullsub_171(void) {
;
}
-uint16 EnemyInstr_StopScript(uint16 k, uint16 j) { // 0xA0807C
+const uint16 *EnemyInstr_StopScript(uint16 k, const uint16 *jp) { // 0xA0807C
EnemyData *v2 = gEnemyData(k);
v2->properties |= kEnemyProps_Deleted;
return 0;
}
-uint16 EnemyInstr_Goto(uint16 k, uint16 j) { // 0xA080ED
- return *(uint16 *)RomPtr_A0(j);
+const uint16 *EnemyInstr_Goto(uint16 k, const uint16 *jp) { // 0xA280ED
+ return INSTR_RETURN_ADDR(*jp);
}
-uint16 EnemyInstr_GotoRel(uint16 k, uint16 j) { // 0xA080F2
- return j + (int8)*RomPtr_A0(j);
+const uint16 *EnemyInstr_GotoRel(uint16 k, const uint16 *jp) { // 0xA080F2
+ return (const uint16 * )((uint8*)jp + *(int8*)jp);
}
-uint16 EnemyInstr_DecTimerAndGoto(uint16 k, uint16 j) { // 0xA08108
+const uint16 *EnemyInstr_DecTimerAndGoto(uint16 k, const uint16 *jp) { // 0xA08108
EnemyData *v2 = gEnemyData(k);
if (v2->timer-- == 1)
- return j + 2;
+ return jp + 1;
else
- return EnemyInstr_Goto(k, j);
+ return EnemyInstr_Goto(k, jp);
}
-uint16 EnemyInstr_DecTimerAndGoto2(uint16 k, uint16 j) { // 0xA08110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto(k, j);
-}
-
-uint16 EnemyInstr_DecTimerAndGotoRel(uint16 k, uint16 j) { // 0xA08118
+const uint16 *EnemyInstr_DecTimerAndGotoRel(uint16 k, const uint16 *jp) { // 0xA08118
EnemyData *v2 = gEnemyData(k);
if (LOBYTE(v2->timer)-- == 1)
- return j + 1;
+ return (const uint16 *)((uint8 *)jp + 1);
else
- return EnemyInstr_GotoRel(k, j);
+ return EnemyInstr_GotoRel(k, jp);
}
-uint16 EnemyInstr_SetTimer(uint16 k, uint16 j) { // 0xA08123
- uint16 v2 = *(uint16 *)RomPtr_A0(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
+const uint16 *EnemyInstr_SetTimer(uint16 k, const uint16 *jp) { // 0xA08123
+ gEnemyData(k)->timer = *jp;
+ return jp + 1;
}
-uint16 EnemyInstr_Skip2bytes(uint16 k, uint16 j) { // 0xA0812C
- return j + 2;
+const uint16 *EnemyInstr_Skip2bytes(uint16 k, const uint16 *jp) { // 0xA0812C
+ return jp + 1;
}
-uint16 EnemyInstr_Sleep(uint16 k, uint16 j) { // 0xA0812F
- gEnemyData(k)->current_instruction = j - 2;
+const uint16 *EnemyInstr_Sleep(uint16 k, const uint16 *jp) { // 0xA2812F
+ EnemyData *ED = gEnemyData(k);
+ const uint8 *base_ptr = RomPtrWithBank(ED->bank, 0x8000) - 0x8000;
+ ED->current_instruction = (const uint8 *)jp - 2 - base_ptr;
return 0;
}
-uint16 EnemyInstr_WaitNframes(uint16 k, uint16 j) { // 0xA0813A
- uint16 v2 = *(uint16 *)RomPtr_A0(j);
- EnemyData *v3 = gEnemyData(k);
- v3->instruction_timer = v2;
- v3->current_instruction = j + 2;
+const uint16 *EnemyInstr_WaitNframes(uint16 k, const uint16 *jp) { // 0xA0813A
+ EnemyData *ED = gEnemyData(k);
+ const uint8 *base_ptr = RomPtrWithBank(ED->bank, 0x8000) - 0x8000;
+ ED->instruction_timer = jp[0];
+ ED->current_instruction = (const uint8 *)jp + 2 - base_ptr;
return 0;
}
-uint16 EnemyInstr_CopyToVram(uint16 k, uint16 j) { // 0xA0814B
+const uint16 *EnemyInstr_CopyToVram(uint16 k, const uint16 *jp) { // 0xA0814B
VramWriteEntry *v4;
uint16 v2 = vram_write_queue_tail;
- uint8 *v3 = RomPtr_A0(j);
+ uint8 *v3 = (uint8*)jp;
v4 = gVramWriteEntry(vram_write_queue_tail);
- v4->size = *(uint16 *)v3;
- v4->src.addr = *((uint16 *)v3 + 1);
- *(VoidP *)((char *)&v4->src.addr + 1) = *(uint16 *)(v3 + 3);
- v4->vram_dst = *(uint16 *)(v3 + 5);
+ v4->size = GET_WORD(v3);
+ v4->src.addr = GET_WORD(v3 + 2);
+ *(VoidP *)((char *)&v4->src.addr + 1) = GET_WORD(v3 + 3);
+ v4->vram_dst = GET_WORD(v3 + 5);
vram_write_queue_tail = v2 + 7;
- return j + 7;
+ return INSTR_INCR_BYTES(jp, 7);
}
-uint16 EnemyInstr_EnableOffScreenProcessing(uint16 k, uint16 j) { // 0xA08173
+const uint16 *EnemyInstr_EnableOffScreenProcessing(uint16 k, const uint16 *jp) { // 0xA08173
EnemyData *v2 = gEnemyData(k);
v2->properties |= 0x800u;
- return j;
+ return jp;
}
-uint16 EnemyInstr_DisableOffScreenProcessing(uint16 k, uint16 j) { // 0xA0817D
+const uint16 *EnemyInstr_DisableOffScreenProcessing(uint16 k, const uint16 *jp) { // 0xA0817D
EnemyData *v2 = gEnemyData(k);
v2->properties &= ~0x800u;
- return j;
+ return jp;
}
static const uint16 kRoomShakes[144] = { // 0xA08687
@@ -284,7 +287,7 @@ void DrawSamusEnemiesAndProjectiles(void) { // 0xA0884D
do {
loop_index = v1;
uint8 *v2 = RomPtr_RAM(enemy_drawing_queue_base + v1);
- uint16 v3 = *(uint16 *)v2;
+ uint16 v3 = GET_WORD(v2);
*(uint16 *)v2 = 0;
cur_enemy_index = v3;
WriteEnemyOams();
@@ -317,7 +320,7 @@ void RecordEnemySpawnData(uint16 j) { // 0xA088D0
R28_ = 0;
uint16 name_ptr = get_EnemyDef_A2(v1->enemy_ptr)->name_ptr;
if (name_ptr) {
- uint16 *v4 = (uint16 *)RomPtr_B4(name_ptr);
+ const uint16 *v4 = (const uint16 *)RomPtr_B4(name_ptr);
R18_ = *v4;
R20_ = v4[1];
R22_ = v4[2];
@@ -334,47 +337,7 @@ void RecordEnemySpawnData(uint16 j) { // 0xA088D0
*(uint16 *)&v5->name[10] = R28_;
}
-void DebugLoadEnemySetData(void) { // 0xA0896F
- int16 v1;
-
- uint16 v0 = 0;
- v1 = 160;
- do {
- *(uint16 *)&debug_enemy_set_name[v0] = 0;
- v0 += 2;
- v1 -= 2;
- } while (v1);
- uint8 *v2 = RomPtr_B4(room_enemy_tilesets_ptr - 7);
- *(uint16 *)debug_enemy_set_name = *(uint16 *)v2;
- *(uint16 *)&debug_enemy_set_name[2] = *((uint16 *)v2 + 1);
- *(uint16 *)&debug_enemy_set_name[4] = *((uint16 *)v2 + 2);
- *(uint16 *)&debug_enemy_set_name[6] = *((uint16 *)v2 + 3);
- uint16 v3 = 7;
- for (int i = room_enemy_tilesets_ptr; ; i += 4) {
- uint16 v5 = *(uint16 *)RomPtr_B4(i);
- if (v5 == 0xFFFF)
- break;
- uint16 v6 = *((uint16 *)RomPtr_A0(v5) + 31);
- if (!v6)
- v6 = addr_asc_B4DD89;
- uint16 *v7 = (uint16 *)RomPtr_B4(v6);
- R18_ = *v7;
- R20_ = v7[1];
- R22_ = v7[2];
- R24_ = v7[3];
- R26_ = v7[4];
- *(uint16 *)&debug_enemy_set_name[v3] = R18_;
- *(uint16 *)&debug_enemy_set_name[v3 + 2] = R20_;
- *(uint16 *)&debug_enemy_set_name[v3 + 4] = R22_;
- *(uint16 *)&debug_enemy_set_name[v3 + 6] = R24_;
- *(uint16 *)&debug_enemy_set_data[v3] = R26_;
- *(uint16 *)&debug_enemy_set_data[v3 + 2] = *((uint16 *)RomPtr_B4(i) + 1);
- v3 += 12;
- }
-}
-
void LoadEnemies(void) { // 0xA08A1E
- // DebugLoadEnemySetData();
debug_time_frozen_for_enemies = 0;
*(uint16 *)&enemy_gfx_drawn_hook.bank = 160;
enemy_gfx_drawn_hook.addr = FUNC16(nullsub_170);
@@ -490,7 +453,7 @@ void LoadEnemyGfxIndexes(uint16 k, uint16 j) { // 0xA08BF3
R18_ = k;
R20_ = j;
R28_ = room_enemy_tilesets_ptr;
- g_word_7E001E = 0;
+ R30_ = 0;
while (1) {
enemy_ptr = get_EnemyPopulation(0xa1, R18_)->enemy_ptr;
EnemyTileset = get_EnemyTileset(R28_);
@@ -506,7 +469,7 @@ void LoadEnemyGfxIndexes(uint16 k, uint16 j) { // 0xA08BF3
v6->palette_index = 2560;
return;
}
- g_word_7E001E += get_EnemyDef_A2(EnemyTileset->enemy_def)->tile_data_size >> 5;
+ R30_ += get_EnemyDef_A2(EnemyTileset->enemy_def)->tile_data_size >> 5;
R28_ += 4;
}
uint16 v7 = (get_EnemyTileset(R28_)->vram_dst & 0xF) << 9;
@@ -515,11 +478,10 @@ void LoadEnemyGfxIndexes(uint16 k, uint16 j) { // 0xA08BF3
v9->palette_index = v7;
v10 = gEnemySpawnData(v8);
v10->palette_index = v7;
- uint16 v11 = g_word_7E001E;
- v9->vram_tiles_index = g_word_7E001E;
+ uint16 v11 = R30_;
+ v9->vram_tiles_index = R30_;
v10->vram_tiles_index = v11;
}
-#define kStandardSpriteTiles ((uint16*)RomPtr(0x9ad200))
void LoadEnemyTileData(void) { // 0xA08C6C
for (int i = 510; i >= 0; i -= 2)
gEnemySpawnData(i)->some_flag = kStandardSpriteTiles[(i >> 1) + 3072];
@@ -576,7 +538,7 @@ void TransferEnemyTilesToVramAndInit(void) { // 0xA08CD7
void ProcessEnemyTilesets(void) { // 0xA08D64
enemy_tile_load_data_write_pos = 0;
- g_word_7E001E = 2048;
+ R30_ = 2048;
enemy_def_ptr[0] = 0;
enemy_def_ptr[1] = 0;
enemy_def_ptr[2] = 0;
@@ -600,7 +562,7 @@ void ProcessEnemyTilesets(void) { // 0xA08D64
varE2E = 0;
LD->tile_data_size = ED->tile_data_size & 0x7FFF;
LD->tile_data_ptr = ED->tile_data;
- uint16 v10 = g_word_7E001E;
+ uint16 v10 = R30_;
if ((ED->tile_data_size & 0x8000u) != 0)
v10 = (uint16)(ET->vram_dst & 0x3000) >> 3;
LD->offset_into_ram = v10;
@@ -612,7 +574,7 @@ void ProcessEnemyTilesets(void) { // 0xA08D64
enemy_gfxdata_vram_ptr[v11 >> 1] = ET->vram_dst;
enemy_gfx_data_write_ptr += 2;
next_enemy_tiles_index += ED->tile_data_size >> 5;
- g_word_7E001E += ED->tile_data_size;
+ R30_ += ED->tile_data_size;
}
}
@@ -625,7 +587,7 @@ void DetermineWhichEnemiesToProcess(void) { // 0xA08EB6
do {
uint16 v5 = cur_enemy_index;
EnemyData *v6 = gEnemyData(cur_enemy_index);
- if (v6->enemy_ptr && v6->enemy_ptr != (uint16)addr_kEnemyDef_DAFF) {
+ if (v6->enemy_ptr && v6->enemy_ptr != addr_kEnemyDef_DAFF) {
if ((v6->properties & 0x200) != 0) {
v6->enemy_ptr = 0;
} else {
@@ -649,7 +611,7 @@ void DetermineWhichEnemiesToProcess(void) { // 0xA08EB6
do {
uint16 v0 = cur_enemy_index;
EnemyData *v1 = gEnemyData(cur_enemy_index);
- if (v1->enemy_ptr && v1->enemy_ptr != (uint16)addr_kEnemyDef_DAFF) {
+ if (v1->enemy_ptr && v1->enemy_ptr != addr_kEnemyDef_DAFF) {
uint16 properties = v1->properties;
if ((properties & 0x200) != 0) {
v1->enemy_ptr = 0;
@@ -1327,14 +1289,14 @@ void CallEnemyPreInstr(uint32 ea) {
}
}
-uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
+const uint16 *CallEnemyInstr(uint32 ea, uint16 k, const uint16 *j) {
switch (ea) {
- case fnEnemyInstr_Goto_A2: return EnemyInstr_Goto_A2(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_A2: return EnemyInstr_DecTimerAndGoto2_A2(k, j);
- case fnEnemyInstr_SetTimer_A2: return EnemyInstr_SetTimer_A2(k, j);
- case fnEnemyInstr_Sleep_A2: return EnemyInstr_Sleep_A2(k, j);
- case fnEnemyInstr_EnableOffScreenProcessing_A2: return EnemyInstr_EnableOffScreenProcessing_A2(k, j);
- case fnEnemyInstr_DisableOffScreenProcessing_A2: return EnemyInstr_DisableOffScreenProcessing_A2(k, j);
+ case fnEnemyInstr_Goto_A2: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_A2: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_A2: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_A2: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_EnableOffScreenProcessing_A2: return EnemyInstr_EnableOffScreenProcessing(k, j);
+ case fnEnemyInstr_DisableOffScreenProcessing_A2: return EnemyInstr_DisableOffScreenProcessing(k, j);
case fnBouncingGoofball_Instr_88C5: return BouncingGoofball_Instr_88C5(k, j);
case fnBouncingGoofball_Instr_88C6: return BouncingGoofball_Instr_88C6(k, j);
case fnMiniCrocomire_Instr_897E: return MiniCrocomire_Instr_897E(k, j);
@@ -1378,10 +1340,10 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnMaridiaLargeSnail_Instr_CCBE: return MaridiaLargeSnail_Instr_CCBE(k, j);
case fnMaridiaLargeSnail_Instr_CCC9: return MaridiaLargeSnail_Instr_CCC9(k, j);
case fnLavaSeahorse_Instr_E5FB: return LavaSeahorse_Instr_E5FB(k, j);
- case fnEnemyInstr_Goto_A3: return EnemyInstr_Goto_A3(k, j);
- case fnEnemyInstr_Sleep_A3: return EnemyInstr_Sleep_A3(k, j);
- case fnEnemyInstr_EnableOffScreenProcessing_A3: return EnemyInstr_EnableOffScreenProcessing_A3(k, j);
- case fnEnemyInstr_DisableOffScreenProcessing_A3: return EnemyInstr_DisableOffScreenProcessing_A3(k, j);
+ case fnEnemyInstr_Goto_A3: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_Sleep_A3: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_EnableOffScreenProcessing_A3: return EnemyInstr_EnableOffScreenProcessing(k, j);
+ case fnEnemyInstr_DisableOffScreenProcessing_A3: return EnemyInstr_DisableOffScreenProcessing(k, j);
case fnWaver_Instr_1: return Waver_Instr_1(k, j);
case fnMetalee_Instr_1: return Metalee_Instr_1(k, j);
case fnMaridiaFish_Instr_3: return MaridiaFish_Instr_3(k, j);
@@ -1409,8 +1371,8 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnZoomer_Instr_SetPreinstr: return Zoomer_Instr_SetPreinstr(k, j);
case fnMetroid_Instr_2: return Metroid_Instr_2(k, j);
case fnMetroid_Instr_1: return Metroid_Instr_1(k, j);
- case fnEnemyInstr_Goto_A4: return EnemyInstr_Goto_A4(k, j);
- case fnEnemyInstr_Sleep_A4: return EnemyInstr_Sleep_A4(k, j);
+ case fnEnemyInstr_Goto_A4: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_Sleep_A4: return EnemyInstr_Sleep(k, j);
case fnCrocomire_Instr_1: return Crocomire_Instr_1(k, j);
case fnCrocomire_Instr_14: return Crocomire_Instr_14(k, j);
case fnCrocomire_Instr_11: return Crocomire_Instr_11(k, j);
@@ -1438,12 +1400,12 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnCrocomire_Instr_25: return Crocomire_Instr_25(k, j);
case fnCrocomire_Instr_26: return Crocomire_Instr_26(k, j);
case fnCrocomire_Instr_27: return Crocomire_Instr_27(k, j);
- case fnEnemyInstr_StopScript_A5: return EnemyInstr_StopScript_A5(k, j);
- case fnEnemyInstr_Goto_A5: return EnemyInstr_Goto_A5(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_A5: return EnemyInstr_DecTimerAndGoto2_A5(k, j);
- case fnEnemyInstr_SetTimer_A5: return EnemyInstr_SetTimer_A5(k, j);
- case fnEnemyInstr_Sleep_A5: return EnemyInstr_Sleep_A5(k, j);
- case fnEnemyInstr_WaitNframes_A5: return EnemyInstr_WaitNframes_A5(k, j);
+ case fnEnemyInstr_StopScript_A5: return EnemyInstr_StopScript(k, j);
+ case fnEnemyInstr_Goto_A5: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_A5: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_A5: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_A5: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_WaitNframes_A5: return EnemyInstr_WaitNframes(k, j);
case fnDraygon_Instr_1: return Draygon_Instr_1(k, j);
case fnDraygon_Instr_13: return Draygon_Instr_13(k, j);
case fnDraygon_Instr_8: return Draygon_Instr_8(k, j);
@@ -1474,8 +1436,8 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnDraygon_Instr_19: return Draygon_Instr_19(k, j);
case fnDraygon_Instr_28: return Draygon_Instr_28(k, j);
case fnDraygon_Instr_26: return Draygon_Instr_26(k, j);
- case fnEnemyInstr_Goto_A6: return EnemyInstr_Goto_A6(k, j);
- case fnEnemyInstr_Sleep_A6: return EnemyInstr_Sleep_A6(k, j);
+ case fnEnemyInstr_Goto_A6: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_Sleep_A6: return EnemyInstr_Sleep(k, j);
case fnFireGeyser_Instr_1: return FireGeyser_Instr_1(k, j);
case fnFireGeyser_Instr_2: return FireGeyser_Instr_2(k, j);
case fnFireGeyser_Instr_3: return FireGeyser_Instr_3(k, j);
@@ -1535,10 +1497,10 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnCeresDoor_Instr_2: return CeresDoor_Instr_2(k, j);
case fnCeresDoor_Instr_7: return CeresDoor_Instr_7(k, j);
case fnEnemyInstr_Call_A7: return EnemyInstr_Call_A7(k, j);
- case fnEnemyInstr_Goto_A7: return EnemyInstr_Goto_A7(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_A7: return EnemyInstr_DecTimerAndGoto2_A7(k, j);
- case fnEnemyInstr_SetTimer_A7: return EnemyInstr_SetTimer_A7(k, j);
- case fnEnemyInstr_Sleep_A7: return EnemyInstr_Sleep_A7(k, j);
+ case fnEnemyInstr_Goto_A7: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_A7: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_A7: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_A7: return EnemyInstr_Sleep(k, j);
case fnKraid_Instr_9: return Kraid_Instr_9(k, j);
case fnKraid_Instr_1: return Kraid_Instr_1(k, j);
case fnKraid_Instr_DecYpos: return Kraid_Instr_DecYpos(k, j);
@@ -1548,12 +1510,12 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnKraid_Instr_XposMinus3b: return Kraid_Instr_XposMinus3b(k, j);
case fnKraid_Instr_XposPlus3: return Kraid_Instr_XposPlus3(k, j);
case fnKraid_Instr_MoveHimRight: return Kraid_Instr_MoveHimRight(k, j);
- case fnEnemyInstr_Goto_A8: return EnemyInstr_Goto_A8(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_A8: return EnemyInstr_DecTimerAndGoto2_A8(k, j);
- case fnEnemyInstr_SetTimer_A8: return EnemyInstr_SetTimer_A8(k, j);
- case fnEnemyInstr_Sleep_A8: return EnemyInstr_Sleep_A8(k, j);
- case fnEnemyInstr_EnableOffScreenProcessing_A8: return EnemyInstr_EnableOffScreenProcessing_A8(k, j);
- case fnEnemyInstr_DisableOffScreenProcessing_A8: return EnemyInstr_DisableOffScreenProcessing_A8(k, j);
+ case fnEnemyInstr_Goto_A8: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_A8: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_A8: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_A8: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_EnableOffScreenProcessing_A8: return EnemyInstr_EnableOffScreenProcessing(k, j);
+ case fnEnemyInstr_DisableOffScreenProcessing_A8: return EnemyInstr_DisableOffScreenProcessing(k, j);
case fnMiniDraygon_Instr_2: return MiniDraygon_Instr_2(k, j);
case fnMiniDraygon_Instr_1: return MiniDraygon_Instr_1(k, j);
case fnMiniDraygon_Instr_3: return MiniDraygon_Instr_3(k, j);
@@ -1620,7 +1582,7 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnKiHunter_Instr_3: return KiHunter_Instr_3(k, j);
case fnKiHunter_Instr_4: return KiHunter_Instr_4(k, j);
case fnKiHunter_Instr_5: return KiHunter_Instr_5(k, j);
- case fnEnemyInstr_Sleep_A9: return EnemyInstr_Sleep_A9(k, j);
+ case fnEnemyInstr_Sleep_A9: return EnemyInstr_Sleep(k, j);
case fnShitroid_Instr_1: return Shitroid_Instr_1(k, j);
case fnShitroid_Instr_2: return Shitroid_Instr_2(k, j);
case fnsub_A9ECD0: return sub_A9ECD0(k, j);
@@ -1630,13 +1592,13 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnShitroid_Instr_5: return Shitroid_Instr_5(k, j);
case fnEnemy_SetAiPreInstr_AA: return Enemy_SetAiPreInstr_AA(k, j);
case fnEnemy_ClearAiPreInstr_AA: return Enemy_ClearAiPreInstr_AA(k, j);
- case fnEnemyInstr_StopScript_AA: return EnemyInstr_StopScript_AA(k, j);
- case fnEnemyInstr_Goto_AA: return EnemyInstr_Goto_AA(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_AA: return EnemyInstr_DecTimerAndGoto2_AA(k, j);
- case fnEnemyInstr_SetTimer_AA: return EnemyInstr_SetTimer_AA(k, j);
- case fnEnemyInstr_Sleep_AA: return EnemyInstr_Sleep_AA(k, j);
- case fnEnemyInstr_WaitNframes_AA: return EnemyInstr_WaitNframes_AA(k, j);
- case fnEnemyInstr_CopyToVram_AA: return EnemyInstr_CopyToVram_AA(k, j);
+ case fnEnemyInstr_StopScript_AA: return EnemyInstr_StopScript(k, j);
+ case fnEnemyInstr_Goto_AA: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_AA: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_AA: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_AA: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_WaitNframes_AA: return EnemyInstr_WaitNframes(k, j);
+ case fnEnemyInstr_CopyToVram_AA: return EnemyInstr_CopyToVram(k, j);
case fnTorizo_Instr_3: return Torizo_Instr_3(k, j);
case fnTorizo_Instr_31: return Torizo_Instr_31(k, j);
case fnTorizo_Instr_33: return Torizo_Instr_33(k, j);
@@ -1714,11 +1676,11 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnShaktool_Instr_12: return Shaktool_Instr_12(k, j);
case fnShaktool_Instr_7: return Shaktool_Instr_7(k, j);
case fnShaktool_Instr_14: return Shaktool_Instr_14(k, j);
- case fnEnemyInstr_Goto_B2: return EnemyInstr_Goto_B2(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_B2: return EnemyInstr_DecTimerAndGoto2_B2(k, j);
- case fnEnemyInstr_SetTimer_B2: return EnemyInstr_SetTimer_B2(k, j);
- case fnEnemyInstr_Sleep_B2: return EnemyInstr_Sleep_B2(k, j);
- case fnEnemyInstr_WaitNframes_B2: return EnemyInstr_WaitNframes_B2(k, j);
+ case fnEnemyInstr_Goto_B2: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_B2: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_B2: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_B2: return EnemyInstr_Sleep(k, j);
+ case fnEnemyInstr_WaitNframes_B2: return EnemyInstr_WaitNframes(k, j);
case fnSpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight: return SpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight(k, j);
case fnSpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft: return SpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft(k, j);
case fnSpacePirates_Instr_RandomNewDirFaceR: return SpacePirates_Instr_RandomNewDirFaceR(k, j);
@@ -1742,10 +1704,10 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnSpacePirates_Instr_13: return SpacePirates_Instr_13(k, j);
case fnEnemy_SetAiPreInstr_B3: return Enemy_SetAiPreInstr_B3(k, j);
case fnEnemy_ClearAiPreInstr_B3: return Enemy_ClearAiPreInstr_B3(k, j);
- case fnEnemyInstr_Goto_B3: return EnemyInstr_Goto_B3(k, j);
- case fnEnemyInstr_DecTimerAndGoto2_B3: return EnemyInstr_DecTimerAndGoto2_B3(k, j);
- case fnEnemyInstr_SetTimer_B3: return EnemyInstr_SetTimer_B3(k, j);
- case fnEnemyInstr_Sleep_B3: return EnemyInstr_Sleep_B3(k, j);
+ case fnEnemyInstr_Goto_B3: return EnemyInstr_Goto(k, j);
+ case fnEnemyInstr_DecTimerAndGoto2_B3: return EnemyInstr_DecTimerAndGoto(k, j);
+ case fnEnemyInstr_SetTimer_B3: return EnemyInstr_SetTimer(k, j);
+ case fnEnemyInstr_Sleep_B3: return EnemyInstr_Sleep(k, j);
case fnBotwoon_Instr_1: return Botwoon_Instr_1(k, j);
case fnBotwoon_Instr_2: return Botwoon_Instr_2(k, j);
case fnBotwoon_Instr_3: return Botwoon_Instr_3(k, j);
@@ -1796,7 +1758,7 @@ uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j) {
case fnMotherBrain_Instr_SpawnDeathBeamEproj: return MotherBrain_Instr_SpawnDeathBeamEproj(k, j);
case fnMotherBrain_Instr_IncrBeamAttackPhase: return MotherBrain_Instr_IncrBeamAttackPhase(k, j);
- default: return Unreachable();
+ default: Unreachable(); return NULL;
}
}
@@ -1810,7 +1772,6 @@ void EnemyMain(void) { // 0xA08FD4
gEnemyData(enemy_index_to_shake)->shake_timer = 64;
enemy_index_to_shake = -1;
}
- interactive_enemy_indexes_index = 0;
for (active_enemy_indexes_index = 0; ; ++active_enemy_indexes_index) {
int v0 = active_enemy_indexes_index >> 1;
uint16 v1 = active_enemy_indexes[v0];
@@ -1932,22 +1893,13 @@ void DeleteEnemyAndConnectedEnemies(void) { // 0xA0922B
}
uint16 SpawnEnemy(uint8 db, uint16 k) { // 0xA09275
- int16 v3;
VoidP v7;
- int16 v12;
- EnemyPopulation *v13;
- EnemyPopulation *v16;
- EnemyDef_A2 *v17;
- EnemyDef_A2 *EnemyDef_A2;
- EnemyPopulation *EnemyPopulation;
-
- uint8 v19 = db;
enemy_population_ptr = k;
cur_enemy_index_backup = cur_enemy_index;
enemy_ai_pointer_backup.addr = enemy_ai_pointer.addr;
*(uint16 *)&enemy_ai_pointer_backup.bank = *(uint16 *)&enemy_ai_pointer.bank;
uint16 enemy_ptr = get_EnemyPopulation(db, k)->enemy_ptr;
- v3 = get_EnemyDef_A2(enemy_ptr)->num_parts - 1;
+ int16 v3 = get_EnemyDef_A2(enemy_ptr)->num_parts - 1;
if (v3 < 0)
v3 = 0;
draw_oam_x_offset = v3;
@@ -1960,41 +1912,37 @@ uint16 SpawnEnemy(uint8 db, uint16 k) { // 0xA09275
if (!draw_oam_x_offset) {
while (1) {
uint16 v5 = new_enemy_index;
- EnemyPopulation = get_EnemyPopulation(v19, enemy_population_ptr);
- v7 = EnemyPopulation->enemy_ptr;
+ EnemyPopulation *EP = get_EnemyPopulation(db, enemy_population_ptr);
+ v7 = EP->enemy_ptr;
uint16 v8 = 0;
- if (EnemyPopulation->enemy_ptr == enemy_def_ptr[0]
+ if (EP->enemy_ptr == enemy_def_ptr[0]
|| (v8 = 2, v7 == enemy_def_ptr[1])
|| (v8 = 4, v7 == enemy_def_ptr[2])
|| (v8 = 6, v7 == enemy_def_ptr[3])) {
int v10 = v8 >> 1;
EnemyData *v11 = gEnemyData(new_enemy_index);
v11->vram_tiles_index = enemy_gfxdata_tiles_index[v10];
- LOBYTE(v12) = HIBYTE(enemy_gfxdata_vram_ptr[v10]);
- HIBYTE(v12) = enemy_gfxdata_vram_ptr[v10];
- v11->palette_index = 2 * v12;
+ v11->palette_index = 2 * swap16(enemy_gfxdata_vram_ptr[v10]);
} else {
EnemyData *v9 = gEnemyData(new_enemy_index);
v9->vram_tiles_index = 0;
v9->palette_index = 0;
}
- v13 = get_EnemyPopulation(v19, enemy_population_ptr);
- EnemyDef_A2 = get_EnemyDef_A2(v13->enemy_ptr);
+ EnemyDef_A2 * edef = get_EnemyDef_A2(EP->enemy_ptr);
EnemyData *v15 = gEnemyData(v5);
- v15->x_width = EnemyDef_A2->x_radius;
- v15->y_height = EnemyDef_A2->y_radius;
- v15->health = EnemyDef_A2->health;
- v15->layer = EnemyDef_A2->layer;
- *(uint16 *)&v15->bank = *(uint16 *)&EnemyDef_A2->bank;
- v16 = get_EnemyPopulation(v19, enemy_population_ptr);
- v15->enemy_ptr = v16->enemy_ptr;
- v15->x_pos = v16->x_pos;
- v15->y_pos = v16->y_pos;
- v15->current_instruction = v16->init_param;
- v15->properties = v16->properties;
- v15->extra_properties = v16->extra_properties;
- v15->parameter_1 = v16->parameter1;
- v15->parameter_2 = v16->parameter2;
+ v15->x_width = edef->x_radius;
+ v15->y_height = edef->y_radius;
+ v15->health = edef->health;
+ v15->layer = edef->layer;
+ *(uint16 *)&v15->bank = *(uint16 *)&edef->bank;
+ v15->enemy_ptr = EP->enemy_ptr;
+ v15->x_pos = EP->x_pos;
+ v15->y_pos = EP->y_pos;
+ v15->current_instruction = EP->init_param;
+ v15->properties = EP->properties;
+ v15->extra_properties = EP->extra_properties;
+ v15->parameter_1 = EP->parameter1;
+ v15->parameter_2 = EP->parameter2;
v15->frame_counter = 0;
v15->timer = 0;
v15->ai_var_A = 0;
@@ -2007,12 +1955,8 @@ uint16 SpawnEnemy(uint8 db, uint16 k) { // 0xA09275
v15->frame_counter = 0;
RecordEnemySpawnData(v5);
cur_enemy_index = v5;
- v17 = get_EnemyDef_A2(v15->enemy_ptr);
- if (!sign16(v17->ai_init + 0x8000)) {
- enemy_ai_pointer.addr = v17->ai_init;
- *(uint16 *)&enemy_ai_pointer.bank = *(uint16 *)&v17->bank;
- CallEnemyAi(Load24(&enemy_ai_pointer));
- }
+ if (sign16(edef->ai_init))
+ CallEnemyAi(edef->bank << 16 | edef->ai_init);
EnemyData *v18 = gEnemyData(v5);
if ((v18->properties & 0x2000) != 0)
v18->spritemap_pointer = addr_kSpritemap_Nothing_A0;
@@ -2103,7 +2047,7 @@ void WriteEnemyOams(void) { // 0xA0944A
R18_ = enemy_population_ptr + ypos;
if (((R18_ + 128) & 0xFE00) == 0) {
if (HIBYTE(R18_))
- DrawSpritemapWithBaseTileOffscreen(db, R22_);
+ DrawSpritemapWithBaseTileOffscreen(db, R22_, R20_, R18_);
else
DrawSpritemapWithBaseTile2(db, R22_);
}
@@ -2132,7 +2076,7 @@ void NormalEnemyFrozenAI(void) { // 0xA0957E
}
void ProcessExtendedTilemap(uint8 db) { // 0xA096CA
- uint8 *p = RomPtrWithBank(db, R22_ + 2);
+ const uint8 *p = RomPtrWithBank(db, R22_ + 2);
while (1) {
uint16 v2 = *(uint16 *)p;
if (v2 == 0xFFFF)
@@ -2417,7 +2361,7 @@ void EnemySamusCollHandler_Multibox(void) { // 0xA09A5A
enemy_processing_stage = 6;
if (v0[11]) {
touch_ai = get_EnemyDef_A2(*v0)->touch_ai;
- if (touch_ai != (uint16)FUNC16(nullsub_170) && touch_ai != (uint16)FUNC16(nullsub_169)) {
+ if (touch_ai != FUNC16(nullsub_170) && touch_ai != FUNC16(nullsub_169)) {
if (samus_contact_damage_index) {
samus_invincibility_timer = 0;
} else if (samus_invincibility_timer) {
@@ -2483,13 +2427,13 @@ void EnemyProjectileCollHandler_Multibox(void) { // 0xA09B7F
EnemyData *v0 = gEnemyData(cur_enemy_index);
uint16 spritemap_pointer = v0->spritemap_pointer;
if (spritemap_pointer) {
- if (spritemap_pointer != (uint16)addr_kExtendedSpritemap_Nothing_A0) {
+ if (spritemap_pointer != addr_kExtendedSpritemap_Nothing_A0) {
shot_ai = get_EnemyDef_A2(v0->enemy_ptr)->shot_ai;
- if (shot_ai != (uint16)FUNC16(nullsub_170) && shot_ai != (uint16)FUNC16(nullsub_169)) {
+ if (shot_ai != FUNC16(nullsub_170) && shot_ai != FUNC16(nullsub_169)) {
EnemyData *v3 = gEnemyData(cur_enemy_index);
if ((v3->properties & 0x400) == 0
&& !v3->invincibility_timer
- && v3->enemy_ptr != (uint16)addr_kEnemyDef_DAFF) {
+ && v3->enemy_ptr != addr_kEnemyDef_DAFF) {
collision_detection_index = 0;
while (1) {
uint16 v4;
@@ -2577,8 +2521,8 @@ void EnemyBombCollHandler_Multibox(void) { // 0xA09D23
if ((v0->properties & 0x400) == 0 && !v0->invincibility_timer) {
uint16 enemy_ptr = gEnemyData(cur_enemy_index)->enemy_ptr;
shot_ai = get_EnemyDef_A2(enemy_ptr)->shot_ai;
- if (shot_ai != (uint16)FUNC16(nullsub_170)
- && shot_ai != (uint16)FUNC16(nullsub_169)
+ if (shot_ai != FUNC16(nullsub_170)
+ && shot_ai != FUNC16(nullsub_169)
&& bomb_counter) {
collision_detection_index = 5;
while (1) {
@@ -2649,49 +2593,47 @@ LABEL_25:
uint16 GrappleBeam_CollDetect_Enemy(void) { // 0xA09E9A
VoidP grapple_ai;
- EnemyData *v4;
+ EnemyData *ED;
CallSomeSamusCode(0xDu);
collision_detection_index = 0;
- for (interactive_enemy_indexes_index = 0; ; ++interactive_enemy_indexes_index) {
- uint16 v2 = interactive_enemy_indexes[interactive_enemy_indexes_index >> 1];
- cur_enemy_index = v2;
- if (v2 == 0xFFFF) {
+ for (int i = 0; ; i++) {
+ cur_enemy_index = interactive_enemy_indexes[i];
+ if (cur_enemy_index == 0xFFFF) {
R18_ = 0;
return 0;
}
- v4 = gEnemyData(v2);
- if (!v4->invincibility_timer) {
- uint16 v5 = abs16(v4->x_pos - grapple_beam_end_x_pos);
- bool v6 = v5 < v4->x_width;
- uint16 v7 = v5 - v4->x_width;
+ ED = gEnemyData(cur_enemy_index);
+ if (!ED->invincibility_timer) {
+ uint16 v5 = abs16(ED->x_pos - grapple_beam_end_x_pos);
+ bool v6 = v5 < ED->x_width;
+ uint16 v7 = v5 - ED->x_width;
if (v6 || v7 < 8u) {
- uint16 v8 = abs16(v4->y_pos - grapple_beam_end_y_pos);
- v6 = v8 < v4->y_height;
- uint16 v9 = v8 - v4->y_height;
+ uint16 v8 = abs16(ED->y_pos - grapple_beam_end_y_pos);
+ v6 = v8 < ED->y_height;
+ uint16 v9 = v8 - ED->y_height;
if (v6 || v9 < 8u)
break;
}
}
- ++interactive_enemy_indexes_index;
}
- v4->ai_handler_bits = 1;
+ ED->ai_handler_bits = 1;
uint16 v0 = 0;
- uint16 enemy_ptr = v4->enemy_ptr;
- grapple_ai = get_EnemyDef_A2(v4->enemy_ptr)->grapple_ai;
- if (grapple_ai + (uint16)FUNC16(Enemy_GrappleReact_NoInteract_A0)) {
+ uint16 enemy_ptr = ED->enemy_ptr;
+ grapple_ai = get_EnemyDef_A2(ED->enemy_ptr)->grapple_ai;
+ if (grapple_ai + FUNC16(Enemy_GrappleReact_NoInteract_A0)) {
v0 = 1;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_SamusLatchesOn_A0)) {
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_SamusLatchesOn_A0)) {
v0 = 2;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_KillEnemy_A0)) {
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_KillEnemy_A0)) {
v0 = 3;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_CancelBeam_A0)) {
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_CancelBeam_A0)) {
v0 = 4;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_SamusLatchesNoInvinc_A0)) {
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_SamusLatchesNoInvinc_A0)) {
v0 = 5;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_SamusLatchesParalyze_A0)) {
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_SamusLatchesParalyze_A0)) {
v0 = 6;
- if (grapple_ai != (uint16)FUNC16(Enemy_GrappleReact_HurtSamus_A0))
+ if (grapple_ai != FUNC16(Enemy_GrappleReact_HurtSamus_A0))
v0 = 0;
}
}
@@ -2793,7 +2735,7 @@ void EnemySamusCollHandler(void) { // 0xA0A07A
if (samus_contact_damage_index) {
samus_invincibility_timer = 0;
} else if (samus_invincibility_timer) {
- if (gEnemyData(cur_enemy_index)->enemy_ptr != (uint16)addr_kEnemyDef_DAFF)
+ if (gEnemyData(cur_enemy_index)->enemy_ptr != addr_kEnemyDef_DAFF)
return;
uint16 some_flag = gEnemySpawnData(cur_enemy_index)->some_flag;
if (!some_flag || some_flag == 8)
@@ -2801,7 +2743,7 @@ void EnemySamusCollHandler(void) { // 0xA0A07A
}
uint16 enemy_ptr = gEnemyData(cur_enemy_index)->enemy_ptr;
touch_ai = get_EnemyDef_A2(enemy_ptr)->touch_ai;
- if (touch_ai != (uint16)FUNC16(nullsub_170) && touch_ai != (uint16)FUNC16(nullsub_169)) {
+ if (touch_ai != FUNC16(nullsub_170) && touch_ai != FUNC16(nullsub_169)) {
EnemyData *v3 = gEnemyData(cur_enemy_index);
uint16 v4 = abs16(samus_x_pos - v3->x_pos);
bool v5 = v4 < samus_x_radius;
@@ -2812,7 +2754,7 @@ void EnemySamusCollHandler(void) { // 0xA0A07A
uint16 v8 = v7 - samus_y_radius;
if (v5 || v8 < v3->y_height) {
R20_ = 2 * gEnemyData(cur_enemy_index)->spritemap_pointer;
- if (gEnemyData(cur_enemy_index)->enemy_ptr == (uint16)addr_kEnemyDef_DAFF
+ if (gEnemyData(cur_enemy_index)->enemy_ptr == addr_kEnemyDef_DAFF
|| !gEnemyData(cur_enemy_index)->frozen_timer) {
enemy_ptr = gEnemyData(cur_enemy_index)->enemy_ptr;
enemy_ai_pointer.addr = get_EnemyDef_A2(enemy_ptr)->touch_ai;
@@ -2834,9 +2776,9 @@ void EnemyProjectileCollHandler(void) { // 0xA0A143
EnemyData *v0 = gEnemyData(cur_enemy_index);
uint16 spritemap_pointer = v0->spritemap_pointer;
if (spritemap_pointer) {
- if (spritemap_pointer != (uint16)addr_kSpritemap_Nothing_A0
+ if (spritemap_pointer != addr_kSpritemap_Nothing_A0
&& (v0->properties & 0x400) == 0
- && v0->enemy_ptr != (uint16)addr_kEnemyDef_DAFF
+ && v0->enemy_ptr != addr_kEnemyDef_DAFF
&& !v0->invincibility_timer) {
collision_detection_index = 0;
int v2;
@@ -2887,7 +2829,7 @@ void EnemyBombCollHandler(void) { // 0xA0A236
if (bomb_counter) {
if (gEnemyData(cur_enemy_index)->spritemap_pointer) {
EnemyData *v0 = gEnemyData(cur_enemy_index);
- if (!v0->invincibility_timer && v0->enemy_ptr != (uint16)addr_kEnemyDef_DAFF) {
+ if (!v0->invincibility_timer && v0->enemy_ptr != addr_kEnemyDef_DAFF) {
collision_detection_index = 5;
while (1) {
int v1 = collision_detection_index;
@@ -2934,7 +2876,7 @@ void ProcessEnemyPowerBombInteraction(void) { // 0xA0A306
if (!v0->invincibility_timer) {
uint16 enemy_ptr = v0->enemy_ptr;
if (v0->enemy_ptr) {
- if (enemy_ptr != (uint16)addr_kEnemyDef_DAFF) {
+ if (enemy_ptr != addr_kEnemyDef_DAFF) {
uint16 vulnerability_ptr = get_EnemyDef_A2(enemy_ptr)->vulnerability_ptr;
if (!vulnerability_ptr)
vulnerability_ptr = addr_stru_B4EC1C;
@@ -3329,47 +3271,8 @@ uint16 Samus_CheckSolidEnemyColl(void) { // 0xA0A8F0
if (!interactive_enemy_indexes_write_ptr)
return 0;
v1 = 2 * (samus_collision_direction & 3);
- if (v1) {
- switch (v1) {
- case 2: {
- samus_target_x_pos = samus_x_pos + R18_;
- bool v3 = samus_x_subpos + R20_ == 0;
- if (__CFADD__uint16(samus_x_subpos, R20_))
- v3 = samus_target_x_pos++ == 0xFFFF;
- if (!v3)
- ++samus_target_x_pos;
- samus_target_y_pos = samus_y_pos;
- samus_target_y_subpos = samus_y_subpos;
- break;
- }
- case 4: {
- samus_target_y_pos = samus_y_pos - R18_;
- bool v4 = samus_y_subpos == R20_;
- if (samus_y_subpos < R20_)
- v4 = samus_target_y_pos-- == 1;
- if (!v4)
- --samus_target_y_pos;
- samus_target_x_pos = samus_x_pos;
- samus_target_x_subpos = samus_x_subpos;
- break;
- }
- case 6: {
- samus_target_y_pos = samus_y_pos + R18_;
- bool v5 = samus_y_subpos + R20_ == 0;
- if (__CFADD__uint16(samus_y_subpos, R20_))
- v5 = samus_target_y_pos++ == 0xFFFF;
- if (!v5)
- ++samus_target_y_pos;
- samus_target_x_pos = samus_x_pos;
- samus_target_x_subpos = samus_x_subpos;
- break;
- }
- default:
- Unreachable();
- while (1)
- ;
- }
- } else {
+ switch (v1) {
+ case 0: {
samus_target_x_pos = samus_x_pos - R18_;
bool v2 = samus_x_subpos == R20_;
if (samus_x_subpos < R20_)
@@ -3378,117 +3281,147 @@ uint16 Samus_CheckSolidEnemyColl(void) { // 0xA0A8F0
--samus_target_x_pos;
samus_target_y_pos = samus_y_pos;
samus_target_y_subpos = samus_y_subpos;
+ break;
+ }
+ case 2: {
+ samus_target_x_pos = samus_x_pos + R18_;
+ bool v3 = samus_x_subpos + R20_ == 0;
+ if (__CFADD__uint16(samus_x_subpos, R20_))
+ v3 = samus_target_x_pos++ == 0xFFFF;
+ if (!v3)
+ ++samus_target_x_pos;
+ samus_target_y_pos = samus_y_pos;
+ samus_target_y_subpos = samus_y_subpos;
+ break;
+ }
+ case 4: {
+ samus_target_y_pos = samus_y_pos - R18_;
+ bool v4 = samus_y_subpos == R20_;
+ if (samus_y_subpos < R20_)
+ v4 = samus_target_y_pos-- == 1;
+ if (!v4)
+ --samus_target_y_pos;
+ samus_target_x_pos = samus_x_pos;
+ samus_target_x_subpos = samus_x_subpos;
+ break;
+ }
+ case 6: {
+ samus_target_y_pos = samus_y_pos + R18_;
+ bool v5 = samus_y_subpos + R20_ == 0;
+ if (__CFADD__uint16(samus_y_subpos, R20_))
+ v5 = samus_target_y_pos++ == 0xFFFF;
+ if (!v5)
+ ++samus_target_y_pos;
+ samus_target_x_pos = samus_x_pos;
+ samus_target_x_subpos = samus_x_subpos;
+ break;
+ }
+ default:
+ Unreachable();
+ while (1)
+ ;
}
samus_x_radius_mirror = samus_x_radius;
samus_y_radius_mirror = samus_y_radius;
collision_detection_index = 0;
- for (interactive_enemy_indexes_index = 0; ; ++interactive_enemy_indexes_index) {
- int v6 = interactive_enemy_indexes_index >> 1;
- uint16 v7 = interactive_enemy_indexes[v6];
+ for (int i = 0; ;i++) {
+ uint16 v7 = interactive_enemy_indexes[i];
if (v7 == 0xFFFF)
break;
- collision_detection_index = interactive_enemy_indexes[v6];
- EnemyData *v8 = gEnemyData(v7);
- if (v8->frozen_timer || (v8->properties & 0x8000u) != 0) {
- uint8 *v9 = RomPtr_7E(v7 + 3962);
- uint8 *v10 = (uint8*)&samus_target_x_pos;
- uint16 v11 = abs16(*(uint16 *)v9 - *(uint16 *)v10);
- bool v12 = v11 < *((uint16 *)v9 + 4);
- uint16 v13 = v11 - *((uint16 *)v9 + 4);
- if (v12 || v13 < *((uint16 *)v10 + 4)) {
- uint16 v14 = abs16(*((uint16 *)v9 + 2) - *((uint16 *)v10 + 2));
- v12 = v14 < *((uint16 *)v9 + 5);
- uint16 v15 = v14 - *((uint16 *)v9 + 5);
- if (v12 || v15 < *((uint16 *)v10 + 5)) {
- v16 = 2 * (samus_collision_direction & 3);
- if (v16) {
- switch (v16) {
- case 2: {
- draw_enemy_layer = samus_x_radius + samus_x_pos;
- EnemyData *v19 = gEnemyData(collision_detection_index);
- v18 = v19->x_pos - v19->x_width - (samus_x_radius + samus_x_pos);
- if (!v18)
- goto LABEL_57;
- if (v18 >= 0)
- goto LABEL_58;
- break;
- }
- case 4: {
- EnemyData *v20 = gEnemyData(collision_detection_index);
- draw_enemy_layer = v20->y_height + v20->y_pos;
- v18 = samus_y_pos - samus_y_radius - draw_enemy_layer;
- if (samus_y_pos - samus_y_radius == draw_enemy_layer)
- goto LABEL_57;
- if ((int16)(samus_y_pos - samus_y_radius - draw_enemy_layer) >= 0)
- goto LABEL_58;
- break;
- }
- case 6: {
- draw_enemy_layer = samus_y_radius + samus_y_pos;
- EnemyData *v21;
- v21 = gEnemyData(collision_detection_index);
- v18 = v21->y_pos - v21->y_height - (samus_y_radius + samus_y_pos);
- if (!v18) {
+ collision_detection_index = v7;
+ EnemyData *ED = gEnemyData(v7);
+ if (!ED->frozen_timer && (ED->properties & 0x8000u) == 0)
+ continue;
+ uint16 *v9 = &ED->x_pos;
+ uint16 *v10 = &samus_target_x_pos;
+ uint16 v11 = abs16(*v9 - *v10);
+ bool v12 = v11 < *(v9 + 4);
+ uint16 v13 = v11 - *(v9 + 4);
+ if (v12 || v13 < *(v10 + 4)) {
+ uint16 v14 = abs16(*(v9 + 2) - *(v10 + 2));
+ v12 = v14 < *(v9 + 5);
+ uint16 v15 = v14 - *(v9 + 5);
+ if (v12 || v15 < *(v10 + 5)) {
+ v16 = 2 * (samus_collision_direction & 3);
+ switch (v16) {
+ case 0: {
+ draw_enemy_layer = ED->x_width + ED->x_pos;
+ v18 = samus_x_pos - samus_x_radius - draw_enemy_layer;
+ if (samus_x_pos - samus_x_radius == draw_enemy_layer)
+ goto LABEL_57;
+ if ((int16)(samus_x_pos - samus_x_radius - draw_enemy_layer) >= 0)
+ goto LABEL_58;
+ break;
+ }
+ case 2: {
+ draw_enemy_layer = samus_x_radius + samus_x_pos;
+ v18 = ED->x_pos - ED->x_width - (samus_x_radius + samus_x_pos);
+ if (!v18)
+ goto LABEL_57;
+ if (v18 >= 0)
+ goto LABEL_58;
+ break;
+ }
+ case 4: {
+ draw_enemy_layer = ED->y_height + ED->y_pos;
+ v18 = samus_y_pos - samus_y_radius - draw_enemy_layer;
+ if (samus_y_pos - samus_y_radius == draw_enemy_layer)
+ goto LABEL_57;
+ if ((int16)(samus_y_pos - samus_y_radius - draw_enemy_layer) >= 0)
+ goto LABEL_58;
+ break;
+ }
+ case 6: {
+ draw_enemy_layer = samus_y_radius + samus_y_pos;
+ v18 = ED->y_pos - ED->y_height - (samus_y_radius + samus_y_pos);
+ if (!v18) {
LABEL_57:
- samus_y_subpos = 0;
- samus_x_pos_colliding_solid = samus_x_pos;
- samus_x_subpos_colliding_solid = samus_x_subpos;
- EnemyData *v22 = gEnemyData(collision_detection_index);
- enemy_x_pos_colliding_solid = v22->x_pos;
- enemy_x_subpos_colliding_solid = v22->x_subpos;
- samus_pos_delta_colliding_solid = R18_;
- samus_subpos_delta_colliding_solid = R20_;
- samus_y_pos_colliding_solid = samus_y_pos;
- samus_y_subpos_colliding_solid = 0;
- solid_enemy_collision_type = 1;
- R18_ = 0;
- R20_ = 0;
- R22_ = collision_detection_index;
- int v23 = samus_collision_direction & 3;
- enemy_index_colliding_dirs[v23] = collision_detection_index;
- distance_to_enemy_colliding_dirs[v23] = 0;
- return -1;
- }
- if (v18 >= 0) {
-LABEL_58:
- samus_x_pos_colliding_solid = samus_x_pos;
- samus_x_subpos_colliding_solid = samus_x_subpos;
- EnemyData *v24 = gEnemyData(collision_detection_index);
- enemy_x_pos_colliding_solid = v24->x_pos;
- enemy_x_subpos_colliding_solid = v24->x_subpos;
- samus_pos_delta_colliding_solid = R18_;
- samus_subpos_delta_colliding_solid = R20_;
- samus_y_pos_colliding_solid = samus_y_pos;
- samus_y_subpos_colliding_solid = samus_y_subpos;
- solid_enemy_collision_type = 2;
- R18_ = v18;
- int v25 = samus_collision_direction & 3;
- distance_to_enemy_colliding_dirs[v25] = v18;
- R20_ = 0;
- R22_ = collision_detection_index;
- enemy_index_colliding_dirs[v25] = collision_detection_index;
- return -1;
- }
- break;
- }
- default:
- Unreachable();
- while (1)
- ;
- }
- } else {
- EnemyData *v17 = gEnemyData(collision_detection_index);
- draw_enemy_layer = v17->x_width + v17->x_pos;
- v18 = samus_x_pos - samus_x_radius - draw_enemy_layer;
- if (samus_x_pos - samus_x_radius == draw_enemy_layer)
- goto LABEL_57;
- if ((int16)(samus_x_pos - samus_x_radius - draw_enemy_layer) >= 0)
- goto LABEL_58;
+ samus_y_subpos = 0;
+ samus_x_pos_colliding_solid = samus_x_pos;
+ samus_x_subpos_colliding_solid = samus_x_subpos;
+ enemy_x_pos_colliding_solid = ED->x_pos;
+ enemy_x_subpos_colliding_solid = ED->x_subpos;
+ samus_pos_delta_colliding_solid = R18_;
+ samus_subpos_delta_colliding_solid = R20_;
+ samus_y_pos_colliding_solid = samus_y_pos;
+ samus_y_subpos_colliding_solid = 0;
+ solid_enemy_collision_type = 1;
+ R18_ = 0;
+ R20_ = 0;
+ R22_ = collision_detection_index;
+ int v23 = samus_collision_direction & 3;
+ enemy_index_colliding_dirs[v23] = collision_detection_index;
+ distance_to_enemy_colliding_dirs[v23] = 0;
+ return -1;
}
+ if (v18 >= 0) {
+LABEL_58:
+ samus_x_pos_colliding_solid = samus_x_pos;
+ samus_x_subpos_colliding_solid = samus_x_subpos;
+ enemy_x_pos_colliding_solid = ED->x_pos;
+ enemy_x_subpos_colliding_solid = ED->x_subpos;
+ samus_pos_delta_colliding_solid = R18_;
+ samus_subpos_delta_colliding_solid = R20_;
+ samus_y_pos_colliding_solid = samus_y_pos;
+ samus_y_subpos_colliding_solid = samus_y_subpos;
+ solid_enemy_collision_type = 2;
+ R18_ = v18;
+ int v25 = samus_collision_direction & 3;
+ distance_to_enemy_colliding_dirs[v25] = v18;
+ R20_ = 0;
+ R22_ = collision_detection_index;
+ enemy_index_colliding_dirs[v25] = collision_detection_index;
+ return -1;
+ }
+ break;
+ }
+ default:
+ Unreachable();
+ while (1)
+ ;
}
}
}
- ++interactive_enemy_indexes_index;
}
return 0;
}
@@ -3699,17 +3632,10 @@ uint16 SineMult8bitNegative(uint16 a) { // 0xA0B0C6
return SineMult8bit();
}
-#define kSine8bit ((uint8*)RomPtr(0xa0b143))
-#define kEquationForQuarterCircle ((uint16*)RomPtr(0xa0b7ee))
-
uint16 SineMult8bit(void) { // 0xA0B0DA
- int16 v1;
-
uint16 RegWord = Mult8x8(kSine8bit[enemy_drawing_queue_index & 0x7F], draw_enemy_layer);
- LOBYTE(v1) = HIBYTE(RegWord);
- HIBYTE(v1) = RegWord;
- loop_index_end = HIBYTE(RegWord);
- loop_index = v1 & 0xFF00;
+ loop_index_end = RegWord >> 8;
+ loop_index = RegWord << 8;
if ((enemy_drawing_queue_index & 0x80) != 0) {
loop_index_end = -loop_index_end;
loop_index = -loop_index;
@@ -4189,32 +4115,26 @@ uint8 IsEnemyLeavingScreen(uint16 k) { // 0xA0C18E
}
void ProcessEnemyInstructions(void) { // 0xA0C26A
- VoidP *v4;
- int16 v5;
-
- EnemyData *v1 = gEnemyData(cur_enemy_index);
- if ((v1->ai_handler_bits & 4) == 0) {
- if (v1->instruction_timer-- == 1) {
- uint8 bank = v1->bank;
- uint16 current_instruction = v1->current_instruction;
- while (1) {
- v4 = (VoidP *)RomPtrWithBank(bank, current_instruction);
- v5 = *v4;
- if ((*v4 & 0x8000u) == 0)
- break;
- enemy_ai_pointer.addr = *v4;
- current_instruction = CallEnemyInstr(Load24(&enemy_ai_pointer), cur_enemy_index, current_instruction + 2);
- if (!current_instruction)
+ EnemyData *ED = gEnemyData(cur_enemy_index);
+ if ((ED->ai_handler_bits & 4) == 0) {
+ if (ED->instruction_timer-- == 1) {
+ assert(ED->current_instruction & 0x8000);
+ const uint8 *base_ptr = RomPtrWithBank(ED->bank, 0x8000) - 0x8000;
+ const uint16 *pc = (const uint16 *)(base_ptr + ED->current_instruction);
+ while ((*pc & 0x8000u) != 0) {
+ enemy_ai_pointer.addr = *pc;
+ pc = CallEnemyInstr(Load24(&enemy_ai_pointer), cur_enemy_index, pc + 1);
+ if (!pc)
return;
+ if ((uintptr_t)pc < 0x10000)
+ pc = (const uint16*)(base_ptr + (uintptr_t)pc);
}
- EnemyData *v6 = gEnemyData(cur_enemy_index);
- v6->instruction_timer = v5;
- v6->spritemap_pointer = *((uint16 *)RomPtrWithBank(bank, current_instruction) + 1);
- v6->current_instruction = current_instruction + 4;
- v6->extra_properties |= 0x8000u;
+ ED->instruction_timer = pc[0];
+ ED->spritemap_pointer = pc[1];
+ ED->current_instruction = (uint8 *)pc + 4 - base_ptr;
+ ED->extra_properties |= 0x8000;
} else {
- EnemyData *v7 = gEnemyData(cur_enemy_index);
- v7->extra_properties &= ~0x8000u;
+ ED->extra_properties &= ~0x8000;
}
}
}
@@ -4227,7 +4147,6 @@ uint8 SetCarry_4(void) { // 0xA0C2BE
return 1;
}
-#define g_off_A0C2DA ((uint16*)RomPtr(0xa0c2da))
uint8 EnemyBlockCollReact_Spike(void) { // 0xA0C2C0
uint16 v0 = g_off_A0C2DA[BTS[cur_block_index] & 0x7F];
@@ -4263,13 +4182,12 @@ static const uint8 byte_A0C435[20] = { // 0xA0C32E
0x80, 0x81, 0x82, 0x83,
};
-#define CHECK_locret_A0C434(i) (byte_A0C435[i] & 0x80 ? -1 : 0)
uint8 EnemyBlockCollHorizReact_Slope_Square(uint16 k, uint16 a) {
EnemyData *v4;
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R26_ & 8) >> 3));
if (!R28_) {
EnemyData *v3 = gEnemyData(cur_enemy_index);
@@ -4277,7 +4195,7 @@ uint8 EnemyBlockCollHorizReact_Slope_Square(uint16 k, uint16 a) {
return CHECK_locret_A0C434(v2) < 0;
goto LABEL_7;
}
- if (R28_ != g_word_7E001E || (v4 = gEnemyData(cur_enemy_index), ((v4->y_pos - v4->y_height) & 8) == 0)) {
+ if (R28_ != R30_ || (v4 = gEnemyData(cur_enemy_index), ((v4->y_pos - v4->y_height) & 8) == 0)) {
LABEL_7:
if (CHECK_locret_A0C434(v2) < 0)
return 1;
@@ -4299,8 +4217,8 @@ void Enemy_SetXpos_Aligned(uint16 j) { // 0xA0C390
uint8 EnemyBlockCollVertReact_Slope_Square(uint16 a, uint16 k) { // 0xA0C3B2
EnemyData *v4;
- temp_collision_DD4 = 4 * a;
- temp_collision_DD6 = BTS[k] >> 6;
+ uint16 temp_collision_DD4 = 4 * a;
+ uint16 temp_collision_DD6 = BTS[k] >> 6;
uint16 v2 = 4 * a + (temp_collision_DD6 ^ ((uint8)(R26_ & 8) >> 2));
if (!R28_) {
EnemyData *v3 = gEnemyData(cur_enemy_index);
@@ -4308,7 +4226,7 @@ uint8 EnemyBlockCollVertReact_Slope_Square(uint16 a, uint16 k) { // 0xA0C3B2
return CHECK_locret_A0C434(v2) < 0;
goto LABEL_7;
}
- if (R28_ != g_word_7E001E || (v4 = gEnemyData(cur_enemy_index), ((v4->x_pos - v4->x_width) & 8) == 0)) {
+ if (R28_ != R30_ || (v4 = gEnemyData(cur_enemy_index), ((v4->x_pos - v4->x_width) & 8) == 0)) {
LABEL_7:
if (CHECK_locret_A0C434(v2) < 0)
return 1;
@@ -4327,23 +4245,21 @@ uint8 Enemy_SetYpos_Aligned(uint16 j) { // 0xA0C413
v1->y_pos = v2;
return 1;
}
-#define g_word_A0C49F ((uint16*)RomPtr(0xa0c49f))
uint8 EnemyBlockCollHorizReact_Slope_NonSquare(void) { // 0xA0C449
- if ((R32 & 0x8000u) == 0)
- return (R32 & 0x4000) != 0;
+ if ((R32_ & 0x8000u) == 0)
+ return (R32_ & 0x4000) != 0;
uint16 v2 = 4 * (current_slope_bts & 0x1F);
if ((R20_ & 0x8000u) == 0) {
- Multiply16x16(*(uint16 *)((char *)&R18_ + 1), g_word_A0C49F[(v2 >> 1) + 1]);
+ Multiply16x16(R19_, g_word_A0C49F[(v2 >> 1) + 1]);
R18_ = mult_product_lo;
R20_ = mult_product_hi;
} else {
- Multiply16x16(-*(uint16 *)((char *)&R18_ + 1), g_word_A0C49F[(v2 >> 1) + 1]);
+ Multiply16x16(-R19_, g_word_A0C49F[(v2 >> 1) + 1]);
Negate32(&mult_product_hi, &mult_product_lo, &R20_, &R18_);
}
return 0;
}
-#define kAlignYPos_Tab0 ((uint8*)RomPtr(0x948b2b))
uint8 EnemyBlockCollVertReact_Slope_NonSquare(void) { // 0xA0C51F
int16 v3;
@@ -4363,8 +4279,8 @@ uint8 EnemyBlockCollVertReact_Slope_NonSquare(void) { // 0xA0C51F
EnemyData *v10 = gEnemyData(cur_enemy_index);
v11 = v10->x_pos >> 4;
if (v11 == mod) {
- temp_collision_DD4 = (R24_ - v10->y_height) & 0xF ^ 0xF;
- temp_collision_DD6 = 16 * (BTS[v9] & 0x1F);
+ uint16 temp_collision_DD4 = (R24_ - v10->y_height) & 0xF ^ 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[v9] & 0x1F);
v12 = BTS[v9] << 8;
if (v12 < 0
&& ((v12 & 0x4000) != 0 ? (x_pos = v10->x_pos ^ 0xF) : (x_pos = v10->x_pos),
@@ -4387,8 +4303,8 @@ uint8 EnemyBlockCollVertReact_Slope_NonSquare(void) { // 0xA0C51F
EnemyData *v2 = gEnemyData(cur_enemy_index);
v3 = v2->x_pos >> 4;
if (v3 == mod) {
- temp_collision_DD4 = (LOBYTE(v2->y_height) + (uint8)R24_ - 1) & 0xF;
- temp_collision_DD6 = 16 * (BTS[v1] & 0x1F);
+ uint16 temp_collision_DD4 = (LOBYTE(v2->y_height) + (uint8)R24_ - 1) & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[v1] & 0x1F);
v5 = BTS[v1] << 8;
if (v5 >= 0
&& ((v5 & 0x4000) != 0 ? (v6 = v2->x_pos ^ 0xF) : (v6 = v2->x_pos),
@@ -4421,14 +4337,14 @@ uint8 EnemyBlockCollReact_VertExt(void) { // 0xA0C64F
uint16 v0;
if (BTS[cur_block_index]) {
if ((BTS[cur_block_index] & 0x80) != 0) {
- temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
+ uint16 temp_collision_DD4 = BTS[cur_block_index] | 0xFF00;
v0 = cur_block_index;
do {
v0 -= room_width_in_blocks;
++temp_collision_DD4;
} while (temp_collision_DD4);
} else {
- temp_collision_DD4 = BTS[cur_block_index];
+ uint16 temp_collision_DD4 = BTS[cur_block_index];
v0 = cur_block_index;
do {
v0 += room_width_in_blocks;
@@ -4442,17 +4358,17 @@ uint8 EnemyBlockCollReact_VertExt(void) { // 0xA0C64F
}
uint8 Enemy_MoveRight_SlopesAsWalls(uint16 k) { // 0xA0C69D
- R32 = 0x4000;
+ R32_ = 0x4000;
return Enemy_MoveRight_IgnoreSlopes_Inner(k);
}
uint8 Enemy_MoveRight_ProcessSlopes(uint16 k) { // 0xA0C6A4
- R32 = 0x8000;
+ R32_ = 0x8000;
return Enemy_MoveRight_IgnoreSlopes_Inner(k);
}
uint8 Enemy_MoveRight_IgnoreSlopes(uint16 k) { // 0xA0C6AB
- R32 = 0;
+ R32_ = 0;
return Enemy_MoveRight_IgnoreSlopes_Inner(k);
}
@@ -4462,7 +4378,7 @@ uint8 Enemy_MoveRight_IgnoreSlopes_Inner(uint16 k) { // 0xA0C6AD
EnemyData *v3 = gEnemyData(k);
R28_ = (v3->y_pos - v3->y_height) & 0xFFF0;
R28_ = (uint16)(v3->y_height + v3->y_pos - 1 - R28_) >> 4;
- g_word_7E001E = R28_;
+ R30_ = R28_;
uint16 prod = Mult8x8((uint16)(v3->y_pos - v3->y_height) >> 4, room_width_in_blocks);
uint16 v4 = (__PAIR32__(R20_, R18_) + __PAIR32__(v3->x_pos, v3->x_subpos)) >> 16;
R22_ = R18_ + v3->x_subpos;
@@ -4502,7 +4418,7 @@ uint8 Enemy_MoveRight_IgnoreSlopes_Inner(uint16 k) { // 0xA0C6AD
}
uint8 Enemy_MoveDown(uint16 k) { // 0xA0C786
- R32 = 0;
+ R32_ = 0;
return Enemy_MoveDownInner(k);
}
@@ -4515,7 +4431,7 @@ uint8 Enemy_MoveDownInner(uint16 k) { // 0xA0C788
EnemyData *v3 = gEnemyData(k);
R28_ = (v3->x_pos - v3->x_width) & 0xFFF0;
R28_ = (uint16)(v3->x_width + v3->x_pos - 1 - R28_) >> 4;
- g_word_7E001E = R28_;
+ R30_ = R28_;
uint16 v4 = (__PAIR32__(R20_, R18_) + __PAIR32__(v3->y_pos, v3->y_subpos)) >> 16;
R22_ = R18_ + v3->y_subpos;
R24_ = v4;
@@ -4627,8 +4543,8 @@ uint8 EnemyFunc_C8AD(uint16 k) { // 0xA0C8AD
if ((level_data[cur_block_index] & 0xF000) == 4096
&& (BTS[cur_block_index] & 0x1Fu) >= 5) {
result = 1;
- temp_collision_DD4 = (LOBYTE(v1->y_height) + LOBYTE(v1->y_pos) - 1) & 0xF;
- temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
+ uint16 temp_collision_DD4 = (LOBYTE(v1->y_height) + LOBYTE(v1->y_pos) - 1) & 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
v2 = BTS[cur_block_index] << 8;
if (v2 >= 0) {
v3 = (v2 & 0x4000) != 0 ? v1->x_pos ^ 0xF : v1->x_pos;
@@ -4641,8 +4557,8 @@ uint8 EnemyFunc_C8AD(uint16 k) { // 0xA0C8AD
if ((level_data[cur_block_index] & 0xF000) == 4096
&& (BTS[cur_block_index] & 0x1Fu) >= 5) {
result = 1;
- temp_collision_DD4 = (v1->y_pos - v1->y_height) & 0xF ^ 0xF;
- temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
+ uint16 temp_collision_DD4 = (v1->y_pos - v1->y_height) & 0xF ^ 0xF;
+ uint16 temp_collision_DD6 = 16 * (BTS[cur_block_index] & 0x1F);
v5 = BTS[cur_block_index] << 8;
if (v5 < 0) {
if ((v5 & 0x4000) != 0)
@@ -4655,4 +4571,4 @@ uint8 EnemyFunc_C8AD(uint16 k) { // 0xA0C8AD
}
}
return result;
-}
+}
\ No newline at end of file
diff --git a/src/sm_a2.c b/src/sm_a2.c
index d520507..04af7ef 100644
--- a/src/sm_a2.c
+++ b/src/sm_a2.c
@@ -5,11 +5,47 @@
#include "enemy_types.h"
#include "variables.h"
-#define kEnemyInit_BouncingGoofball_Tab0 ((uint16*)RomPtr(0xa286df))
-#define kEnemyInit_BouncingGoofball_Tab1 ((uint16*)RomPtr(0xa286ef))
-#define kBouncingGoofball_Tab0 ((uint8*)RomPtr(0xa28701))
-#define g_word_A28D56 (*(uint16*)RomPtr(0xa28d56))
-#define g_word_A28D58 (*(uint16*)RomPtr(0xa28d58))
+
+#define kEnemyInit_BouncingGoofball_Tab0 ((uint16*)RomFixedPtr(0xa286df))
+#define kEnemyInit_BouncingGoofball_Tab1 ((uint16*)RomFixedPtr(0xa286ef))
+#define kBouncingGoofball_Tab0 ((uint8*)RomFixedPtr(0xa28701))
+#define g_word_A28D56 (*(uint16*)RomFixedPtr(0xa28d56))
+#define g_word_A28D58 (*(uint16*)RomFixedPtr(0xa28d58))
+#define g_word_A29A07 (*(uint16*)RomFixedPtr(0xa29a07))
+#define g_word_A29A09 (*(uint16*)RomFixedPtr(0xa29a09))
+#define g_word_A29A0B (*(uint16*)RomFixedPtr(0xa29a0b))
+#define g_word_A29A0D (*(uint16*)RomFixedPtr(0xa29a0d))
+#define g_word_A29F36 ((uint16*)RomFixedPtr(0xa29f36))
+#define g_off_A29F42 ((uint16*)RomFixedPtr(0xa29f42))
+#define g_word_A2A3DD ((uint16*)RomFixedPtr(0xa2a3dd))
+#define g_word_A2A3ED ((uint16*)RomFixedPtr(0xa2a3ed))
+#define g_byte_A2A7CF ((uint8*)RomFixedPtr(0xa2a7cf))
+#define g_word_A2A622 ((uint16*)RomFixedPtr(0xa2a622))
+#define g_word_A2AC07 ((uint16*)RomFixedPtr(0xa2ac07))
+#define g_word_A2AC11 ((uint16*)RomFixedPtr(0xa2ac11))
+#define g_word_A2B520 ((uint16*)RomFixedPtr(0xa2b520))
+#define g_word_A2B530 ((uint16*)RomFixedPtr(0xa2b530))
+#define g_word_A2B550 ((uint16*)RomFixedPtr(0xa2b550))
+#define g_word_A2B75B ((uint16*)RomFixedPtr(0xa2b75b))
+#define g_word_A2BBBB (*(uint16*)RomFixedPtr(0xa2bbbb))
+#define g_word_A2BBBF (*(uint16*)RomFixedPtr(0xa2bbbf))
+#define g_word_A2BE86 ((uint16*)RomFixedPtr(0xa2be86))
+#define g_word_A2C1C1 ((uint16*)RomFixedPtr(0xa2c1c1))
+#define g_word_A2C1C5 (*(uint16*)RomFixedPtr(0xa2c1c5))
+#define g_word_A2C6CA (*(uint16*)RomFixedPtr(0xa2c6ca))
+#define g_word_A2C6CE (*(uint16*)RomFixedPtr(0xa2c6ce))
+#define g_off_A2CB77 ((uint16*)RomFixedPtr(0xa2cb77))
+#define g_off_A2DF5E ((uint16*)RomFixedPtr(0xa2df5e))
+#define g_off_A2DF6A ((uint16*)RomFixedPtr(0xa2df6a))
+#define g_off_A2E5EF ((uint16*)RomFixedPtr(0xa2e5ef))
+#define g_word_A2EA56 ((uint16*)RomFixedPtr(0xa2ea56))
+#define g_off_A2EA4E ((uint16*)RomFixedPtr(0xa2ea4e))
+#define g_off_A2EC3A ((uint16*)RomFixedPtr(0xa2ec3a))
+#define g_off_A2EDFB ((uint16*)RomFixedPtr(0xa2edfb))
+#define g_off_A2F107 ((uint16*)RomFixedPtr(0xa2f107))
+
+
+
static const uint16 g_word_A28D50 = 0x30;
static const uint16 g_word_A28D52 = 1;
@@ -30,73 +66,6 @@ static const int16 g_word_A28E80[48] = {
-12, -11, -10, -9, -8, -7, -6, -5,
-4, -3, -3, -2, 0, 0, 0, 0,
};
-#define g_word_A29A07 (*(uint16*)RomPtr(0xa29a07))
-#define g_word_A29A09 (*(uint16*)RomPtr(0xa29a09))
-#define g_word_A29A0B (*(uint16*)RomPtr(0xa29a0b))
-#define g_word_A29A0D (*(uint16*)RomPtr(0xa29a0d))
-#define g_word_A29F36 ((uint16*)RomPtr(0xa29f36))
-#define g_off_A29F42 ((uint16*)RomPtr(0xa29f42))
-#define g_word_A2A3DD ((uint16*)RomPtr(0xa2a3dd))
-#define g_word_A2A3ED ((uint16*)RomPtr(0xa2a3ed))
-#define g_byte_A2A7CF ((uint8*)RomPtr(0xa2a7cf))
-#define g_word_A2A622 ((uint16*)RomPtr(0xa2a622))
-#define g_word_A2AC07 ((uint16*)RomPtr(0xa2ac07))
-#define g_word_A2AC11 ((uint16*)RomPtr(0xa2ac11))
-#define g_word_A2B520 ((uint16*)RomPtr(0xa2b520))
-#define g_word_A2B530 ((uint16*)RomPtr(0xa2b530))
-#define g_word_A2B550 ((uint16*)RomPtr(0xa2b550))
-#define g_word_A2B75B ((uint16*)RomPtr(0xa2b75b))
-#define g_word_A2BBBB (*(uint16*)RomPtr(0xa2bbbb))
-#define g_word_A2BBBF (*(uint16*)RomPtr(0xa2bbbf))
-#define g_word_A2BE86 ((uint16*)RomPtr(0xa2be86))
-#define g_word_A2C1C1 ((uint16*)RomPtr(0xa2c1c1))
-#define g_word_A2C1C5 (*(uint16*)RomPtr(0xa2c1c5))
-#define g_word_A2C6CA (*(uint16*)RomPtr(0xa2c6ca))
-#define g_word_A2C6CE (*(uint16*)RomPtr(0xa2c6ce))
-#define g_off_A2CB77 ((uint16*)RomPtr(0xa2cb77))
-#define g_off_A2DF5E ((uint16*)RomPtr(0xa2df5e))
-#define g_off_A2DF6A ((uint16*)RomPtr(0xa2df6a))
-#define g_off_A2E5EF ((uint16*)RomPtr(0xa2e5ef))
-#define g_word_A2EA56 ((uint16*)RomPtr(0xa2ea56))
-#define g_off_A2EA4E ((uint16*)RomPtr(0xa2ea4e))
-#define g_off_A2EC3A ((uint16*)RomPtr(0xa2ec3a))
-#define g_off_A2EDFB ((uint16*)RomPtr(0xa2edfb))
-#define g_off_A2F107 ((uint16*)RomPtr(0xa2f107))
-
-uint16 EnemyInstr_DecTimerAndGoto2_A2(uint16 k, uint16 j) { // 0xA28110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_A2(k, j);
-}
-
-uint16 EnemyInstr_DisableOffScreenProcessing_A2(uint16 k, uint16 j) { // 0xA2817D
- EnemyData *v2 = gEnemyData(k);
- v2->properties &= ~kEnemyProps_ProcessedOffscreen;
- return j;
-}
-
-uint16 EnemyInstr_EnableOffScreenProcessing_A2(uint16 k, uint16 j) { // 0xA28173
- EnemyData *v2 = gEnemyData(k);
- v2->properties |= kEnemyProps_ProcessedOffscreen;
- return j;
-}
-
-uint16 EnemyInstr_Goto_A2(uint16 k, uint16 j) { // 0xA280ED
- return *(uint16 *)RomPtr_A2(j);
-}
-
-uint16 EnemyInstr_SetTimer_A2(uint16 k, uint16 j) { // 0xA28123
- uint16 v2 = *(uint16 *)RomPtr_A2(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-
-uint16 EnemyInstr_Sleep_A2(uint16 k, uint16 j) { // 0xA2812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
void Enemy_GrappleReact_CancelBeam_A2(void) { // 0xA2800F
Enemy_SwitchToFrozenAi();
@@ -239,34 +208,33 @@ void BouncingGoofball_Func3(void) { // 0xA288B2
E->base.timer = 0;
}
-uint16 BouncingGoofball_Instr_88C5(uint16 k, uint16 j) { // 0xA288C5
- return j;
+const uint16 *BouncingGoofball_Instr_88C5(uint16 k, const uint16 *jp) { // 0xA288C5
+ return jp;
}
-uint16 BouncingGoofball_Instr_88C6(uint16 k, uint16 j) { // 0xA288C6
+const uint16 *BouncingGoofball_Instr_88C6(uint16 k, const uint16 *jp) { // 0xA288C6
Get_BouncingGoofball(cur_enemy_index)->bgl_var_02 = 0;
QueueSfx2_Max6(0xEu);
- return j;
+ return jp;
}
-uint16 MiniCrocomire_Instr_897E(uint16 k, uint16 j) { // 0xA2897E
- uint16 *v2 = (uint16 *)RomPtr_A2(j);
- SpawnEnemyProjectileWithGfx(*v2, cur_enemy_index, addr_Eproj_DBF2);
- return j + 2;
+const uint16 *MiniCrocomire_Instr_897E(uint16 k, const uint16 *jp) { // 0xA2897E
+ SpawnEnemyProjectileWithGfx(*jp, cur_enemy_index, addr_Eproj_DBF2);
+ return jp + 1;
}
-uint16 MiniCrocomire_Instr_8990(uint16 k, uint16 j) { // 0xA28990
+const uint16 *MiniCrocomire_Instr_8990(uint16 k, const uint16 *jp) { // 0xA28990
Enemy_MiniCrocomire *E = Get_MiniCrocomire(cur_enemy_index);
E->mce_var_F = FUNC16(MiniCrocomire_PreInstr5);
E->mce_var_E = 0;
- return j;
+ return jp;
}
-uint16 MiniCrocomire_Instr_899D(uint16 k, uint16 j) { // 0xA2899D
+const uint16 *MiniCrocomire_Instr_899D(uint16 k, const uint16 *jp) { // 0xA2899D
Enemy_MiniCrocomire *E = Get_MiniCrocomire(cur_enemy_index);
E->mce_var_F = FUNC16(MiniCrocomire_PreInstr6);
E->mce_var_E = 1;
- return j;
+ return jp;
}
void MiniCrocomire_Init(void) { // 0xA289AD
@@ -776,7 +744,7 @@ void MaridiaBeybladeTurtle_Func4(void) { // 0xA29315
}
}
-uint16 MaridiaBeybladeTurtle_Instr_9381(uint16 k, uint16 j) { // 0xA29381
+const uint16 *MaridiaBeybladeTurtle_Instr_9381(uint16 k, const uint16 *jp) { // 0xA29381
R48 = 0;
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_displacement += Get_MaridiaBeybladeTurtle(cur_enemy_index)->mbte_var_E;
@@ -807,10 +775,10 @@ uint16 MaridiaBeybladeTurtle_Instr_9381(uint16 k, uint16 j) { // 0xA29381
if (R48)
extra_samus_y_displacement += Get_MaridiaBeybladeTurtle(v9)->base.y_pos - R50;
}
- return j;
+ return jp;
}
-uint16 MaridiaBeybladeTurtle_Instr_9412(uint16 k, uint16 j) { // 0xA29412
+const uint16 *MaridiaBeybladeTurtle_Instr_9412(uint16 k, const uint16 *jp) { // 0xA29412
int16 v4;
Enemy_MaridiaBeybladeTurtle *E = Get_MaridiaBeybladeTurtle(cur_enemy_index);
@@ -823,62 +791,61 @@ uint16 MaridiaBeybladeTurtle_Instr_9412(uint16 k, uint16 j) { // 0xA29412
E->mbte_var_E = v4;
}
if ((Get_MaridiaBeybladeTurtle(cur_enemy_index)->mbte_var_E & 0x8000u) != 0)
- return addr_kMaridiaBeybladeTurtle_Ilist_8B80;
- return addr_kMaridiaBeybladeTurtle_Ilist_8C72;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8B80);
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8C72);
}
-uint16 MaridiaBeybladeTurtle_Instr_9447(uint16 k, uint16 j) { // 0xA29447
+const uint16 *MaridiaBeybladeTurtle_Instr_9447(uint16 k, const uint16 *jp) { // 0xA29447
Get_MaridiaBeybladeTurtle(cur_enemy_index)->mbte_var_A = FUNC16(MaridiaBeybladeTurtle_Func5);
- return j;
+ return jp;
}
-uint16 MaridiaBeybladeTurtle_Instr_9451(uint16 k, uint16 j) { // 0xA29451
+const uint16 *MaridiaBeybladeTurtle_Instr_9451(uint16 k, const uint16 *jp) { // 0xA29451
Enemy_MaridiaTurtle *E = Get_MaridiaTurtle(cur_enemy_index);
E->mte_var_A = FUNC16(MaridiaBeybladeTurtle_Func7);
E->mte_var_E = -1;
E->mte_var_00 = 16;
- return addr_kMaridiaBeybladeTurtle_Ilist_8C02;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8C02);
}
-uint16 MaridiaBeybladeTurtle_Instr_946B(uint16 k, uint16 j) { // 0xA2946B
+const uint16 *MaridiaBeybladeTurtle_Instr_946B(uint16 k, const uint16 *jp) { // 0xA2946B
Enemy_MaridiaTurtle *E = Get_MaridiaTurtle(cur_enemy_index);
E->mte_var_A = FUNC16(MaridiaBeybladeTurtle_Func7);
E->mte_var_E = 1;
E->mte_var_00 = 16;
- return addr_kMaridiaBeybladeTurtle_Ilist_8C02;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8C02);
}
-uint16 MaridiaBeybladeTurtle_Instr_9485(uint16 k, uint16 j) { // 0xA29485
+const uint16 *MaridiaBeybladeTurtle_Instr_9485(uint16 k, const uint16 *jp) { // 0xA29485
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
if ((Get_MaridiaBeybladeTurtle(cur_enemy_index)->mbte_var_E & 0x8000u) == 0)
- return addr_kMaridiaBeybladeTurtle_Ilist_8D40;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8D40);
else
- return addr_kMaridiaBeybladeTurtle_Ilist_8C62;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8C62);
}
- return j;
+ return jp;
}
-uint16 MaridiaBeybladeTurtle_Instr_94A1(uint16 k, uint16 j) { // 0xA294A1
+const uint16 *MaridiaBeybladeTurtle_Instr_94A1(uint16 k, const uint16 *jp) { // 0xA294A1
Enemy_MaridiaBeybladeTurtle *E = Get_MaridiaBeybladeTurtle(cur_enemy_index);
if (CheckIfEnemyTouchesSamus(cur_enemy_index))
E->mbte_var_A = FUNC16(MiniMaridiaBeybladeTurtle_Func7);
else
E->mbte_var_A = FUNC16(MiniMaridiaBeybladeTurtle_Func1);
- uint16 result = addr_kMaridiaBeybladeTurtle_Ilist_8B80;
if ((E->mbte_var_E & 0x8000u) == 0)
- return addr_kMaridiaBeybladeTurtle_Ilist_8C72;
- return result;
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8C72);
+ return INSTR_RETURN_ADDR(addr_kMaridiaBeybladeTurtle_Ilist_8B80);
}
-uint16 MaridiaBeybladeTurtle_Instr_94C7(uint16 k, uint16 j) { // 0xA294C7
+const uint16 *MaridiaBeybladeTurtle_Instr_94C7(uint16 k, const uint16 *jp) { // 0xA294C7
Enemy_MaridiaBeybladeTurtle *E = Get_MaridiaBeybladeTurtle(cur_enemy_index);
E->mbte_var_A = FUNC16(MiniMaridiaBeybladeTurtle_Func6);
- return j;
+ return jp;
}
-uint16 MaridiaBeybladeTurtle_Instr_94D1(uint16 k, uint16 j) { // 0xA294D1
+const uint16 *MaridiaBeybladeTurtle_Instr_94D1(uint16 k, const uint16 *jp) { // 0xA294D1
QueueSfx2_Max6(0x3Au);
- return j;
+ return jp;
}
void ThinHoppingBlobs_Init(void) { // 0xA29A3F
@@ -953,7 +920,7 @@ void ThinHoppingBlobs_Func4(void) { // 0xA29B06
}
void ThinHoppingBlobs_Func5(void) { // 0xA29B1A
- int16 v2;
+ uint16 v2;
Enemy_ThinHoppingBlobs *E = Get_ThinHoppingBlobs(cur_enemy_index);
uint16 thbs_var_F = E->thbs_var_F;
R22_ = 0;
@@ -964,8 +931,7 @@ void ThinHoppingBlobs_Func5(void) { // 0xA29B1A
+ (uint16)(8 * (uint8)((uint16)(R22_ & 0xFF00) >> 8))
+ 1);
thbs_var_F = E->thbs_var_F;
- LOBYTE(v2) = HIBYTE(*(uint16 *)((char *)&g_word_A29A07 + thbs_var_F));
- HIBYTE(v2) = *(uint16 *)((char *)&g_word_A29A07 + thbs_var_F);
+ v2 = swap16(*(uint16 *)((char *)&g_word_A29A07 + thbs_var_F));
} while (!sign16(v2 - R24_));
E->thbs_var_B = R22_;
E->thbs_var_03 = 0;
@@ -1002,19 +968,11 @@ void ThinHoppingBlobs_Func7(void) { // 0xA29B81
}
void ThinHoppingBlobs_Func8(void) { // 0xA29B88
- int16 thbs_var_B;
- int16 v4;
- char v5; // t0
-
Enemy_ThinHoppingBlobs *E = Get_ThinHoppingBlobs(cur_enemy_index);
- thbs_var_B = E->thbs_var_B;
+ uint16 thbs_var_B = E->thbs_var_B;
if (!sign16(thbs_var_B - 0x4000))
thbs_var_B = 0x4000;
- v4 = thbs_var_B & 0xFF00;
- v5 = v4;
- LOBYTE(v4) = HIBYTE(v4);
- HIBYTE(v4) = v5;
- uint16 v6 = 8 * v4;
+ uint16 v6 = 8 * swap16(thbs_var_B);
if (E->thbs_var_03)
v6 -= 4;
int v7 = v6 >> 1;
@@ -1175,9 +1133,9 @@ void ThinHoppingBlobs_Func16(void) { // 0xA29DCD
}
}
-uint16 SpikeShootingPlant_Instr_9F2A(uint16 k, uint16 j) { // 0xA29F2A
+const uint16 *SpikeShootingPlant_Instr_9F2A(uint16 k, const uint16 *jp) { // 0xA29F2A
QueueSfx2_Max6(0x34u);
- return j;
+ return jp;
}
void SpikeShootingPlant_Init(void) { // 0xA29F48
@@ -1280,18 +1238,17 @@ void SpikeShootingPlant_8(void) { // 0xA2A082
E->base.timer = 0;
}
-uint16 SpikeShootingPlant_Instr_A095(uint16 k, uint16 j) { // 0xA2A095
+const uint16 *SpikeShootingPlant_Instr_A095(uint16 k, const uint16 *jp) { // 0xA2A095
Enemy_SpikeShootingPlant *E = Get_SpikeShootingPlant(k);
E->sspt_var_F = FUNC16(SpikeShootingPlant_2);
if (E->sspt_var_E)
E->sspt_var_F = FUNC16(SpikeShootingPlant_3);
- return j;
+ return jp;
}
-uint16 SpikeShootingPlant_Instr_A0A7(uint16 k, uint16 j) { // 0xA2A0A7
- uint16 *v2 = (uint16 *)RomPtr_A2(j);
- SpawnEnemyProjectileWithGfx(*v2, cur_enemy_index, addr_kEproj_SpikeShootingPlantSpikes);
- return j + 2;
+const uint16 *SpikeShootingPlant_Instr_A0A7(uint16 k, const uint16 *jp) { // 0xA2A0A7
+ SpawnEnemyProjectileWithGfx(*jp, cur_enemy_index, addr_kEproj_SpikeShootingPlantSpikes);
+ return jp + 1;
}
static Func_V *const off_A2A3D3[7] = { // 0xA2A3F9
@@ -1317,7 +1274,7 @@ void MaridiaSpikeyShell_Init(void) {
int v4 = (uint16)(2 * HIBYTE(E->mssl_parameter_2)) >> 1;
E->mssl_var_02 = g_word_A2A3DD[v4] + E->base.x_pos;
E->mssl_var_01 = E->base.x_pos - g_word_A2A3DD[v4];
- E->mssl_var_00 = g_word_A2A3ED[(uint16)(2 * HIBYTE(E->mssl_parameter_1)) >> 1];
+ E->mssl_var_00 = g_word_A2A3ED[HIBYTE(E->mssl_parameter_1)];
E->mssl_var_F = 0;
if (E->mssl_var_E == 2) {
E->mssl_var_F = 16;
@@ -1387,7 +1344,7 @@ void MaridiaSpikeyShell_6(void) { // 0xA2A517
++E->base.y_pos;
if (!sign16(++E->mssl_var_F - 16)) {
E->mssl_var_E = 2;
- E->mssl_var_00 = g_word_A2A3ED[(uint16)(2 * HIBYTE(E->mssl_parameter_1)) >> 1];
+ E->mssl_var_00 = g_word_A2A3ED[HIBYTE(E->mssl_parameter_1)];
}
}
@@ -1405,14 +1362,14 @@ void MaridiaSpikeyShell_8(uint16 k) { // 0xA2A553
E->mssl_var_E = 3;
}
-uint16 MaridiaSpikeyShell_Instr_A56D(uint16 k, uint16 j) { // 0xA2A56D
+const uint16 *MaridiaSpikeyShell_Instr_A56D(uint16 k, const uint16 *jp) { // 0xA2A56D
Get_MaridiaSpikeyShell(k)->mssl_var_E = 0;
- return j;
+ return jp;
}
-uint16 MaridiaSpikeyShell_Instr_A571(uint16 k, uint16 j) { // 0xA2A571
+const uint16 *MaridiaSpikeyShell_Instr_A571(uint16 k, const uint16 *jp) { // 0xA2A571
Get_MaridiaSpikeyShell(k)->mssl_var_E = 1;
- return j;
+ return jp;
}
void MaridiaSpikeyShell_Shot(void) { // 0xA2A579
@@ -1643,7 +1600,7 @@ void GunshipTop_7(uint16 k) { // 0xA2A987
}
void GunshipTop_8(uint16 k) { // 0xA2A9BD
- if (game_state == 8 && frame_handler_alfa == (uint16)FUNC16(Samus_FrameHandlerAlfa_Func11)) {
+ if (game_state == 8 && frame_handler_alfa == FUNC16(Samus_FrameHandlerAlfa_Func11)) {
Enemy_GunshipTop *E = Get_GunshipTop(k);
if ((int16)(E->base.x_pos - 8 - samus_x_pos) < 0
&& (int16)(E->base.x_pos + 8 - samus_x_pos) >= 0
@@ -1870,20 +1827,15 @@ void GunshipTop_20(uint16 k) { // 0xA2AD0E
}
void GunshipTop_21(uint16 k) { // 0xA2AD2D
- int16 v4;
- unsigned int v6; // kr00_4
-
Enemy_GunshipTop *E = Get_GunshipTop(k + 64);
uint16 v3 = E->gtp_var_F + 64;
E->gtp_var_F = v3;
if (!sign16((v3 & 0xFF00) - 2560))
E->gtp_var_F = 2304;
- LOBYTE(v4) = HIBYTE(E->gtp_var_F);
- HIBYTE(v4) = E->gtp_var_F;
- R20_ = v4 & 0xFF00;
- R18_ = (uint8)v4;
- v6 = __PAIR32__(samus_y_pos, samus_y_subpos) - __PAIR32__((uint8)v4, v4 & 0xFF00);
- uint16 v5 = (__PAIR32__(samus_y_pos, samus_y_subpos) - __PAIR32__((uint8)v4, v4 & 0xFF00)) >> 16;
+ R20_ = E->gtp_var_F << 8;
+ R18_ = E->gtp_var_F >> 8;
+ uint32 v6 = __PAIR32__(samus_y_pos, samus_y_subpos) - __PAIR32__(R18_, R20_);
+ uint16 v5 = (__PAIR32__(samus_y_pos, samus_y_subpos) - __PAIR32__(R18_, R20_)) >> 16;
samus_y_subpos = v6;
samus_y_pos = v5;
v5 -= 17;
@@ -2220,7 +2172,8 @@ void Rinka_Main(void) { // 0xA2B7C4
if (E->rinka_parameter_1 && Get_Rinka(0)->rinka_var_1D) {
Rinka_6(cur_enemy_index);
Rinka_8(cur_enemy_index);
- printf("A unknown\n"); v2 = 0;
+ //printf("A unknown\n");
+ v2 = 0;
RinkasDeathAnimation(v2);
} else {
CallRinkaFunc(E->rinka_var_A | 0xA20000, cur_enemy_index);
@@ -2351,7 +2304,7 @@ void Rinka_Frozen(uint16 k) { // 0xA2B929
if (Get_Rinka(0)->rinka_var_1D) {
Rinka_6(k);
Rinka_8(k);
- printf("A undefined!\n");
+// printf("A undefined!\n");
uint16 v1 = 0;
RinkasDeathAnimation(v1);
}
@@ -2400,30 +2353,30 @@ uint16 Rinka_Instr_B9A2(uint16 k, uint16 j) { // 0xA2B9A2
return *(uint16 *)RomPtr_A2(j);
}
-uint16 Rinka_Instr_B9B3(uint16 k, uint16 j) { // 0xA2B9B3
+const uint16 *Rinka_Instr_B9B3(uint16 k, const uint16 *jp) { // 0xA2B9B3
Enemy_Rinka *E = Get_Rinka(k);
E->base.properties |= kEnemyProps_Tangible | kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 Rinka_Instr_B9BD(uint16 k, uint16 j) { // 0xA2B9BD
+const uint16 *Rinka_Instr_B9BD(uint16 k, const uint16 *jp) { // 0xA2B9BD
Enemy_Rinka *E = Get_Rinka(k);
E->base.properties |= kEnemyProps_ProcessedOffscreen | kEnemyProps_Tangible | kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 Rinka_Instr_B9C7(uint16 k, uint16 j) { // 0xA2B9C7
+const uint16 *Rinka_Instr_B9C7(uint16 k, const uint16 *jp) { // 0xA2B9C7
Enemy_Rinka *E = Get_Rinka(k);
E->base.properties &= ~(kEnemyProps_Tangible | kEnemyProps_Invisible);
E->rinka_var_A = FUNC16(Rinka_3);
Enemy_Rinka *E0 = Get_Rinka(0);
++E0->rinka_var_1E;
- return j;
+ return jp;
}
-uint16 EnemyInstr_Rio_Instr_1(uint16 k, uint16 j) { // 0xA2BBC3
+const uint16 *EnemyInstr_Rio_Instr_1(uint16 k, const uint16 *jp) { // 0xA2BBC3
Get_Rio(cur_enemy_index)->rio_var_E = 1;
- return j;
+ return jp;
}
void Rio_Init(void) { // 0xA2BBCD
@@ -2486,7 +2439,7 @@ void Rio_3(uint16 k) { // 0xA2BC48
rio_var_D = E->rio_var_D;
if (rio_var_D < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_D;
+ R19_ = rio_var_D;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1) {
E->rio_var_D = -E->rio_var_D;
LABEL_13:
@@ -2499,7 +2452,7 @@ LABEL_13:
rio_var_C = E->rio_var_C;
if (rio_var_C < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_C;
+ R19_ = rio_var_C;
if (Enemy_MoveDown(k) & 1)
goto LABEL_13;
v4 = E->rio_var_C - 24;
@@ -2525,7 +2478,7 @@ void Rio_4(uint16 k) { // 0xA2BCB7
rio_var_D = E->rio_var_D;
if (rio_var_D < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_D;
+ R19_ = rio_var_D;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1)
E->rio_var_D = -E->rio_var_D;
R18_ = 0;
@@ -2533,7 +2486,7 @@ void Rio_4(uint16 k) { // 0xA2BCB7
rio_var_C = E->rio_var_C;
if (rio_var_C < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_C;
+ R19_ = rio_var_C;
if (Enemy_MoveDown(k) & 1) {
Rio_6(addr_kRio_Ilist_BBA3);
E->rio_var_B = FUNC16(Rio_2);
@@ -2559,14 +2512,14 @@ void Rio_5(uint16 k) { // 0xA2BCFF
rio_var_D = E->rio_var_D;
if (rio_var_D < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_D;
+ R19_ = rio_var_D;
Enemy_MoveRight_IgnoreSlopes(k);
R18_ = 0;
R20_ = 0;
rio_var_C = E->rio_var_C;
if (rio_var_C < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = rio_var_C;
+ R19_ = rio_var_C;
Enemy_MoveDown(k);
}
}
@@ -2581,9 +2534,9 @@ void Rio_6(uint16 a) { // 0xA2BD54
}
}
-uint16 NorfairLavajumpingEnemy_Instr_BE8E(uint16 k, uint16 j) { // 0xA2BE8E
+const uint16 *NorfairLavajumpingEnemy_Instr_BE8E(uint16 k, const uint16 *jp) { // 0xA2BE8E
Get_NorfairLavajumpingEnemy(cur_enemy_index)->nley_var_00 = 1;
- return j;
+ return jp;
}
void NorfairLavajumpingEnemy_Init(void) { // 0xA2BE99
@@ -2683,59 +2636,59 @@ void NorfairLavajumpingEnemy_Func_6(uint16 a) { // 0xA2C012
}
}
-uint16 NorfairRio_Instr_C1C9(uint16 k, uint16 j) { // 0xA2C1C9
+const uint16 *NorfairRio_Instr_C1C9(uint16 k, const uint16 *jp) { // 0xA2C1C9
Get_NorfairRio(cur_enemy_index)->nro_var_01 = 1;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C1D4(uint16 k, uint16 j) { // 0xA2C1D4
+const uint16 *NorfairRio_Instr_C1D4(uint16 k, const uint16 *jp) { // 0xA2C1D4
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 8;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C1DF(uint16 k, uint16 j) { // 0xA2C1DF
+const uint16 *NorfairRio_Instr_C1DF(uint16 k, const uint16 *jp) { // 0xA2C1DF
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 8;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C1EA(uint16 k, uint16 j) { // 0xA2C1EA
+const uint16 *NorfairRio_Instr_C1EA(uint16 k, const uint16 *jp) { // 0xA2C1EA
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 12;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C1F5(uint16 k, uint16 j) { // 0xA2C1F5
+const uint16 *NorfairRio_Instr_C1F5(uint16 k, const uint16 *jp) { // 0xA2C1F5
Get_NorfairRio(cur_enemy_index)->nro_var_02 = -12;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C200(uint16 k, uint16 j) { // 0xA2C200
+const uint16 *NorfairRio_Instr_C200(uint16 k, const uint16 *jp) { // 0xA2C200
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 4;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C20B(uint16 k, uint16 j) { // 0xA2C20B
+const uint16 *NorfairRio_Instr_C20B(uint16 k, const uint16 *jp) { // 0xA2C20B
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 0;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C216(uint16 k, uint16 j) { // 0xA2C216
+const uint16 *NorfairRio_Instr_C216(uint16 k, const uint16 *jp) { // 0xA2C216
Get_NorfairRio(cur_enemy_index)->nro_var_02 = -4;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C221(uint16 k, uint16 j) { // 0xA2C221
+const uint16 *NorfairRio_Instr_C221(uint16 k, const uint16 *jp) { // 0xA2C221
Get_NorfairRio(cur_enemy_index)->nro_var_02 = -12;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C22C(uint16 k, uint16 j) { // 0xA2C22C
+const uint16 *NorfairRio_Instr_C22C(uint16 k, const uint16 *jp) { // 0xA2C22C
Get_NorfairRio(cur_enemy_index)->nro_var_02 = -16;
- return j;
+ return jp;
}
-uint16 NorfairRio_Instr_C237(uint16 k, uint16 j) { // 0xA2C237
+const uint16 *NorfairRio_Instr_C237(uint16 k, const uint16 *jp) { // 0xA2C237
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 12;
- return j;
+ return jp;
}
void NorfairRio_Init(void) { // 0xA2C242
@@ -2769,7 +2722,7 @@ void NorfairRio_Func_1(uint16 k) { // 0xA2C281
E->base.frozen_timer = v3;
if (v3
|| (E->base.properties &= ~kEnemyProps_Invisible,
- gEnemySpawnData(k)[31].some_flag == (uint16)addr_kNorfairRio_Ilist_C0F1)) {
+ gEnemySpawnData(k)[31].some_flag == addr_kNorfairRio_Ilist_C0F1)) {
E->base.properties |= kEnemyProps_Invisible;
} else {
R18_ = addr_kNorfairRio_Ilist_C18F;
@@ -2824,7 +2777,7 @@ void NorfairRio_Func_4(uint16 k) { // 0xA2C361
nro_var_B = E->nro_var_B;
if (nro_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_B;
+ R19_ = nro_var_B;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1)
E->nro_var_B = -E->nro_var_B;
R18_ = 0;
@@ -2832,7 +2785,7 @@ void NorfairRio_Func_4(uint16 k) { // 0xA2C361
nro_var_A = E->nro_var_A;
if (nro_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_A;
+ R19_ = nro_var_A;
if (Enemy_MoveDown(k) & 1 || (v4 = E->nro_var_A - 32, E->nro_var_A = v4, v4 < 0)) {
E->nro_var_A = -1;
NorfairRio_Func_7(addr_kNorfairRio_Ilist_C145);
@@ -2850,7 +2803,7 @@ void NorfairRio_Func_5(uint16 k) { // 0xA2C3B1
nro_var_B = E->nro_var_B;
if (nro_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_B;
+ R19_ = nro_var_B;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1)
E->nro_var_B = -E->nro_var_B;
R18_ = 0;
@@ -2858,7 +2811,7 @@ void NorfairRio_Func_5(uint16 k) { // 0xA2C3B1
nro_var_A = E->nro_var_A;
if (nro_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_A;
+ R19_ = nro_var_A;
if (Enemy_MoveDown(k) & 1) {
E->nro_var_F = FUNC16(NorfairRio_Func_6);
} else {
@@ -2884,19 +2837,19 @@ void NorfairRio_Func_7(uint16 a) { // 0xA2C40D
}
}
-uint16 LowerNorfairRio_Instr_C6D2(uint16 k, uint16 j) { // 0xA2C6D2
+const uint16 *LowerNorfairRio_Instr_C6D2(uint16 k, const uint16 *jp) { // 0xA2C6D2
Get_NorfairRio(cur_enemy_index)->nro_var_01 = 1;
- return j;
+ return jp;
}
-uint16 LowerNorfairRio_Instr_C6DD(uint16 k, uint16 j) { // 0xA2C6DD
+const uint16 *LowerNorfairRio_Instr_C6DD(uint16 k, const uint16 *jp) { // 0xA2C6DD
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 0;
- return j;
+ return jp;
}
-uint16 LowerNorfairRio_Instr_C6E8(uint16 k, uint16 j) { // 0xA2C6E8
+const uint16 *LowerNorfairRio_Instr_C6E8(uint16 k, const uint16 *jp) { // 0xA2C6E8
Get_NorfairRio(cur_enemy_index)->nro_var_02 = 1;
- return j;
+ return jp;
}
void LowerNorfairRio_Init(void) { // 0xA2C6F3
@@ -2973,7 +2926,7 @@ void LowerNorfairRio_Func_4(uint16 k) { // 0xA2C7D6
lnro_var_D = E->lnro_var_D;
if (lnro_var_D < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = lnro_var_D;
+ R19_ = lnro_var_D;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1)
E->lnro_var_D = -E->lnro_var_D;
R18_ = 0;
@@ -2981,7 +2934,7 @@ void LowerNorfairRio_Func_4(uint16 k) { // 0xA2C7D6
lnro_var_C = E->lnro_var_C;
if (lnro_var_C < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = lnro_var_C;
+ R19_ = lnro_var_C;
if (Enemy_MoveDown(k) & 1 || (v4 = E->lnro_var_C - 32, E->lnro_var_C = v4, v4 < 0)) {
E->lnro_var_C = -1;
LowerNorfairRio_Func_7(addr_kLowerNorfairRio_Ilist_C662);
@@ -3000,7 +2953,7 @@ void LowerNorfairRio_Func_5(uint16 k) { // 0xA2C82D
nro_var_D = E->nro_var_D;
if (nro_var_D < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_D;
+ R19_ = nro_var_D;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1)
E->nro_var_D = -E->nro_var_D;
R18_ = 0;
@@ -3008,7 +2961,7 @@ void LowerNorfairRio_Func_5(uint16 k) { // 0xA2C82D
nro_var_C = E->nro_var_C;
if (nro_var_C < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = nro_var_C;
+ R19_ = nro_var_C;
if (Enemy_MoveDown(k) & 1) {
LowerNorfairRio_Func_7(addr_kLowerNorfairRio_Ilist_C686);
E->nro_var_F = FUNC16(LowerNorfairRio_Func_6);
@@ -3040,24 +2993,24 @@ void LowerNorfairRio_Func_7(uint16 a) { // 0xA2C8A3
}
}
-uint16 MaridiaLargeSnail_Instr_CB6B(uint16 k, uint16 j) { // 0xA2CB6B
+const uint16 *MaridiaLargeSnail_Instr_CB6B(uint16 k, const uint16 *jp) { // 0xA2CB6B
QueueSfx2_Max6(0xEu);
- return j;
+ return jp;
}
-uint16 MaridiaLargeSnail_Instr_CCB3(uint16 k, uint16 j) { // 0xA2CCB3
+const uint16 *MaridiaLargeSnail_Instr_CCB3(uint16 k, const uint16 *jp) { // 0xA2CCB3
Get_MaridiaLargeSnail(cur_enemy_index)->mlsl_var_02 = 1;
- return j;
+ return jp;
}
-uint16 MaridiaLargeSnail_Instr_CCBE(uint16 k, uint16 j) { // 0xA2CCBE
+const uint16 *MaridiaLargeSnail_Instr_CCBE(uint16 k, const uint16 *jp) { // 0xA2CCBE
Get_MaridiaLargeSnail(cur_enemy_index)->mlsl_var_03 = 1;
- return j;
+ return jp;
}
-uint16 MaridiaLargeSnail_Instr_CCC9(uint16 k, uint16 j) { // 0xA2CCC9
+const uint16 *MaridiaLargeSnail_Instr_CCC9(uint16 k, const uint16 *jp) { // 0xA2CCC9
Get_MaridiaLargeSnail(cur_enemy_index)->mlsl_var_03 = 0;
- return j;
+ return jp;
}
void MaridiaLargeSnail_Init(void) { // 0xA2CCD4
@@ -3235,26 +3188,19 @@ void MaridiaLargeSnail_Func_6(void) { // 0xA2CF40
}
void MaridiaLargeSnail_Func_7(uint16 k) { // 0xA2CF66
- int16 v2;
- int16 v3;
- char v4; // t0
- int16 v6;
-
Enemy_MaridiaLargeSnail *E = Get_MaridiaLargeSnail(k);
- v2 = E->mlsl_var_B + 384;
- if (!sign16(E->mlsl_var_B - 16000))
+ uint16 v2 = E->mlsl_var_B + 384;
+ if (!sign16(v2 - 0x4000))
v2 = 0x4000;
E->mlsl_var_B = v2;
- v3 = v2 & 0xFF00;
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
+
+ uint16 v3 = swap16(v2);
int v5 = (uint16)(8 * v3) >> 1;
R18_ = kCommonEnemySpeeds_Quadratic[v5];
R20_ = kCommonEnemySpeeds_Quadratic[v5 + 1];
if (Enemy_MoveDown(k) & 1) {
--E->mlsl_var_E;
- v6 = E->mlsl_var_B - 4096;
+ int16 v6 = E->mlsl_var_B - 4096;
if (v6 < 0)
E->mlsl_var_E = 0;
E->mlsl_var_B = v6;
@@ -3263,18 +3209,11 @@ void MaridiaLargeSnail_Func_7(uint16 k) { // 0xA2CF66
}
void MaridiaLargeSnail_Func_8(uint16 k) { // 0xA2CFA9
- int16 v2;
- int16 v3;
- char v4; // t0
-
Enemy_MaridiaLargeSnail *E = Get_MaridiaLargeSnail(k);
- v2 = E->mlsl_var_B - 384;
+ int16 v2 = E->mlsl_var_B - 384;
E->mlsl_var_B = v2;
if (v2 >= 0) {
- v3 = v2 & 0x7F00;
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
+ uint16 v3 = (v2 & 0x7F00) >> 8;
int v5 = (uint16)(8 * v3) >> 1;
R18_ = kCommonEnemySpeeds_Quadratic[v5 + 2];
R20_ = kCommonEnemySpeeds_Quadratic[v5 + 3];
@@ -3441,8 +3380,8 @@ void HirisingSlowfalling_Func_6(void) { // 0xA2E06A
void HirisingSlowfalling_Func_7(void) { // 0xA2E0CD
Enemy_HirisingSlowfalling *E = Get_HirisingSlowfalling(cur_enemy_index);
- uint8 *v1 = RomPtr_A2(E->hsg_var_E + 4 * HIBYTE(E->hsg_var_C));
- if (*(uint16 *)v1 == 0x8000) {
+ const uint8 *v1 = RomPtr_A2(E->hsg_var_E + 4 * HIBYTE(E->hsg_var_C));
+ if (GET_WORD(v1) == 0x8000) {
E->hsg_var_05 += E->hsg_var_F;
E->hsg_var_C = 0;
if ((--E->hsg_var_D & 0x8000u) != 0) {
@@ -3455,8 +3394,8 @@ void HirisingSlowfalling_Func_7(void) { // 0xA2E0CD
E->hsg_var_A = FUNC16(HirisingSlowfalling_Func_4);
}
} else {
- E->base.x_pos = *(uint16 *)v1 + E->hsg_var_04;
- E->base.y_pos = *((uint16 *)v1 + 1) + E->hsg_var_05;
+ E->base.x_pos = GET_WORD(v1) + E->hsg_var_04;
+ E->base.y_pos = GET_WORD(v1 + 2) + E->hsg_var_05;
E->hsg_var_C += 256;
}
}
@@ -3633,9 +3572,9 @@ void Ripper_Main(void) { // 0xA2E4DA
}
}
-uint16 LavaSeahorse_Instr_E5FB(uint16 k, uint16 j) { // 0xA2E5FB
+const uint16 *LavaSeahorse_Instr_E5FB(uint16 k, const uint16 *jp) { // 0xA2E5FB
Get_LavaSeahorse(cur_enemy_index)->lse_var_02 = 1;
- return j;
+ return jp;
}
void LavaSeahorse_Init(void) { // 0xA2E606
@@ -4105,8 +4044,8 @@ void CallRisingFallingPlatformFunc(uint32 ea) {
void RisingFallingPlatform_Main(void) { // 0xA2EED1
Enemy_RisingFallingPlatform *E = Get_RisingFallingPlatform(cur_enemy_index);
CallRisingFallingPlatformFunc(E->rfpm_var_A | 0xA20000);
- if (E->rfpm_var_A != (uint16)FUNC16(RisingFallingPlatform_Func_9)
- && E->rfpm_var_A != (uint16)FUNC16(RisingFallingPlatform_Func_10)
+ if (E->rfpm_var_A != FUNC16(RisingFallingPlatform_Func_9)
+ && E->rfpm_var_A != FUNC16(RisingFallingPlatform_Func_10)
&& (enemy_index_colliding_dirs[3] & (uint16)(enemy_index_colliding_dirs[2] & enemy_index_colliding_dirs[1] & enemy_index_colliding_dirs[0])) != 0xFFFF
&& (enemy_index_colliding_dirs[3] & (uint16)(enemy_index_colliding_dirs[2] & enemy_index_colliding_dirs[1] & enemy_index_colliding_dirs[0])) == cur_enemy_index) {
if (samus_contact_damage_index)
@@ -4263,8 +4202,8 @@ LABEL_10:
return;
E->rfpm_var_0C = 1;
}
- if (E->rfpm_var_A != (uint16)FUNC16(RisingFallingPlatform_Func_9)
- && E->rfpm_var_A != (uint16)FUNC16(RisingFallingPlatform_Func_10)) {
+ if (E->rfpm_var_A != FUNC16(RisingFallingPlatform_Func_9)
+ && E->rfpm_var_A != FUNC16(RisingFallingPlatform_Func_10)) {
E->rfpm_var_A = FUNC16(RisingFallingPlatform_Func_9);
if (E->rfpm_var_20)
E->rfpm_var_A = FUNC16(RisingFallingPlatform_Func_10);
@@ -4321,8 +4260,8 @@ void HorizontalShootableShutter_Func_1(uint16 k) { // 0xA2F11E
void HorizontalShootableShutter_Main(void) { // 0xA2F1DE
Enemy_RisingFallingPlatform *E = Get_RisingFallingPlatform(cur_enemy_index);
CallRisingFallingPlatformFunc(E->rfpm_var_A | 0xA20000);
- if (E->rfpm_var_A != (uint16)FUNC16(HorizontalShootableShutter_Func_8)
- && E->rfpm_var_A != (uint16)FUNC16(HorizontalShootableShutter_Func_9)
+ if (E->rfpm_var_A != FUNC16(HorizontalShootableShutter_Func_8)
+ && E->rfpm_var_A != FUNC16(HorizontalShootableShutter_Func_9)
&& (enemy_index_colliding_dirs[3] & (uint16)(enemy_index_colliding_dirs[2] & enemy_index_colliding_dirs[1] & enemy_index_colliding_dirs[0])) != 0xFFFF
&& (enemy_index_colliding_dirs[3] & (uint16)(enemy_index_colliding_dirs[2] & enemy_index_colliding_dirs[1] & enemy_index_colliding_dirs[0])) == cur_enemy_index
&& samus_contact_damage_index) {
@@ -4468,7 +4407,7 @@ void HorizontalShootableShutter_Func_14(void) { // 0xA2F3D4
void HorizontalShootableShutter_Touch(void) { // 0xA2F3D8
Enemy_HorizontalShootableShutter *E = Get_HorizontalShootableShutter(cur_enemy_index);
- if (E->hssr_var_A == (uint16)FUNC16(HorizontalShootableShutter_Func_14)) {
+ if (E->hssr_var_A == FUNC16(HorizontalShootableShutter_Func_14)) {
if ((int16)(samus_x_pos - E->base.x_pos) >= 0) {
if ((joypad1_lastkeys & 0x200) != 0) {
extra_samus_x_displacement = 4;
@@ -4494,12 +4433,12 @@ void HorizontalShootableShutter_Powerbomb(void) { // 0xA2F41A
return;
E->rfpm_var_0C = 1;
}
- if (E->rfpm_var_A != (uint16)FUNC16(HorizontalShootableShutter_Func_8)
- && E->rfpm_var_A != (uint16)FUNC16(HorizontalShootableShutter_Func_9)) {
+ if (E->rfpm_var_A != FUNC16(HorizontalShootableShutter_Func_8)
+ && E->rfpm_var_A != FUNC16(HorizontalShootableShutter_Func_9)) {
E->rfpm_var_20 ^= 1u;
E->rfpm_var_A = FUNC16(HorizontalShootableShutter_Func_8);
if (E->rfpm_var_20)
E->rfpm_var_A = FUNC16(HorizontalShootableShutter_Func_9);
}
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_a3.c b/src/sm_a3.c
index e331e5c..f00a0c2 100644
--- a/src/sm_a3.c
+++ b/src/sm_a3.c
@@ -5,83 +5,65 @@
#include "funcs.h"
#include "enemy_types.h"
-#define g_off_A386DB ((uint16*)RomPtr(0xa386db))
-#define g_off_A3894E ((uint16*)RomPtr(0xa3894e))
-#define g_word_A38D1D ((uint16*)RomPtr(0xa38d1d))
-#define g_word_A394E2 ((uint16*)RomPtr(0xa394e2))
-#define g_off_A396DB ((uint16*)RomPtr(0xa396db))
-#define g_off_A3992B ((uint16*)RomPtr(0xa3992b))
-#define g_off_A3A111 ((uint16*)RomPtr(0xa3a111))
-#define g_off_A3A121 ((uint16*)RomPtr(0xa3a121))
+
+#define g_off_A386DB ((uint16*)RomFixedPtr(0xa386db))
+#define g_off_A3894E ((uint16*)RomFixedPtr(0xa3894e))
+#define g_word_A38D1D ((uint16*)RomFixedPtr(0xa38d1d))
+#define g_word_A394E2 ((uint16*)RomFixedPtr(0xa394e2))
+#define g_off_A396DB ((uint16*)RomFixedPtr(0xa396db))
+#define g_off_A3992B ((uint16*)RomFixedPtr(0xa3992b))
+#define g_off_A3A111 ((uint16*)RomFixedPtr(0xa3a111))
+#define g_off_A3A121 ((uint16*)RomFixedPtr(0xa3a121))
+#define g_off_A3AAC2 ((uint16*)RomFixedPtr(0xa3aac2))
+#define g_off_A3AACA ((uint16*)RomFixedPtr(0xa3aaca))
+#define g_off_A3AAD2 ((uint16*)RomFixedPtr(0xa3aad2))
+#define g_off_A3AADA ((uint16*)RomFixedPtr(0xa3aada))
+#define g_off_A3AAE2 ((uint16*)RomFixedPtr(0xa3aae2))
+#define g_word_A3AAE6 ((uint16*)RomFixedPtr(0xa3aae6))
+#define g_word_A3AAEA ((uint16*)RomFixedPtr(0xa3aaea))
+#define g_word_A3AAEE ((uint16*)RomFixedPtr(0xa3aaee))
+#define g_word_A3AAF2 ((uint16*)RomFixedPtr(0xa3aaf2))
+#define g_word_A3AAF6 ((uint16*)RomFixedPtr(0xa3aaf6))
+#define g_word_A3AAFA ((uint16*)RomFixedPtr(0xa3aafa))
+#define g_word_A3B415 ((uint16*)RomFixedPtr(0xa3b415))
+#define g_off_A3B40D ((uint16*)RomFixedPtr(0xa3b40d))
+#define g_off_A3B667 ((uint16*)RomFixedPtr(0xa3b667))
+#define g_word_A3BA84 ((uint16*)RomFixedPtr(0xa3ba84))
+#define g_word_A3BA94 ((uint16*)RomFixedPtr(0xa3ba94))
+#define g_word_A3BC4A ((uint16*)RomFixedPtr(0xa3bc4a))
+#define g_word_A3BC6A ((uint16*)RomFixedPtr(0xa3bc6a))
+#define g_off_A3B722 ((uint16*)RomFixedPtr(0xa3b722))
+#define g_off_A3C69C ((uint16*)RomFixedPtr(0xa3c69c))
+#define g_stru_A3CD42 ((MaridiaSnailData2*)RomFixedPtr(0xa3cd42))
+#define g_word_A3CD82 ((uint16*)RomFixedPtr(0xa3cd82))
+#define g_word_A3CDC2 ((uint16*)RomFixedPtr(0xa3cdc2))
+#define g_word_A3CCA2 ((uint16*)RomFixedPtr(0xa3cca2))
+#define g_off_A3CDD2 ((uint16*)RomFixedPtr(0xa3cdd2))
+#define g_off_A3D1AB ((uint16*)RomFixedPtr(0xa3d1ab))
+#define g_off_A3D30D ((uint16*)RomFixedPtr(0xa3d30d))
+#define g_off_A3D50F ((uint16*)RomFixedPtr(0xa3d50f))
+#define g_word_A3D517 ((uint16*)RomFixedPtr(0xa3d517))
+#define g_off_A3D5A4 ((uint16*)RomFixedPtr(0xa3d5a4))
+#define g_word_A3DABC ((uint16*)RomFixedPtr(0xa3dabc))
+#define g_off_A3DC0B ((uint16*)RomFixedPtr(0xa3dc0b))
+#define g_word_A3DCAE ((uint16*)RomFixedPtr(0xa3dcae))
+#define g_off_A3DCA6 ((uint16*)RomFixedPtr(0xa3dca6))
+#define g_off_A3E03B ((uint16*)RomFixedPtr(0xa3e03b))
+#define g_word_A3E5F0 ((uint16*)RomFixedPtr(0xa3e5f0))
+#define g_off_A3E2CC ((uint16*)RomFixedPtr(0xa3e2cc))
+#define g_off_A3E630 ((uint16*)RomFixedPtr(0xa3e630))
+#define g_off_A3E63C ((uint16*)RomFixedPtr(0xa3e63c))
+#define g_off_A3E648 ((uint16*)RomFixedPtr(0xa3e648))
+#define g_off_A3E654 ((uint16*)RomFixedPtr(0xa3e654))
+#define g_word_A3E931 ((uint16*)RomFixedPtr(0xa3e931))
+#define g_word_A3EAD6 ((uint16*)RomFixedPtr(0xa3ead6))
+#define g_word_A3EA3F ((uint16*)RomFixedPtr(0xa3ea3f))
+
+
+
static const int16 g_word_A3A76D[4] = { 2, 0, -2, 0 };
static const int16 g_word_A3A775[4] = { 0, -2, 0, 2 };
-#define g_off_A3AAC2 ((uint16*)RomPtr(0xa3aac2))
-#define g_off_A3AACA ((uint16*)RomPtr(0xa3aaca))
-#define g_off_A3AAD2 ((uint16*)RomPtr(0xa3aad2))
-#define g_off_A3AADA ((uint16*)RomPtr(0xa3aada))
-#define g_off_A3AAE2 ((uint16*)RomPtr(0xa3aae2))
-#define g_word_A3AAE6 ((uint16*)RomPtr(0xa3aae6))
-#define g_word_A3AAEA ((uint16*)RomPtr(0xa3aaea))
-#define g_word_A3AAEE ((uint16*)RomPtr(0xa3aaee))
-#define g_word_A3AAF2 ((uint16*)RomPtr(0xa3aaf2))
-#define g_word_A3AAF6 ((uint16*)RomPtr(0xa3aaf6))
-#define g_word_A3AAFA ((uint16*)RomPtr(0xa3aafa))
-#define g_word_A3B415 ((uint16*)RomPtr(0xa3b415))
-#define g_off_A3B40D ((uint16*)RomPtr(0xa3b40d))
-#define g_off_A3B667 ((uint16*)RomPtr(0xa3b667))
-#define g_word_A3BA84 ((uint16*)RomPtr(0xa3ba84))
-#define g_word_A3BA94 ((uint16*)RomPtr(0xa3ba94))
-#define g_word_A3BC4A ((uint16*)RomPtr(0xa3bc4a))
-#define g_word_A3BC6A ((uint16*)RomPtr(0xa3bc6a))
-#define g_off_A3B722 ((uint16*)RomPtr(0xa3b722))
-#define g_off_A3C69C ((uint16*)RomPtr(0xa3c69c))
-#define g_stru_A3CD42 ((MaridiaSnailData2*)RomPtr(0xa3cd42))
-#define g_word_A3CD82 ((uint16*)RomPtr(0xa3cd82))
-#define g_word_A3CDC2 ((uint16*)RomPtr(0xa3cdc2))
-#define g_word_A3CCA2 ((uint16*)RomPtr(0xa3cca2))
-#define g_off_A3CDD2 ((uint16*)RomPtr(0xa3cdd2))
-#define g_off_A3D1AB ((uint16*)RomPtr(0xa3d1ab))
-#define g_off_A3D30D ((uint16*)RomPtr(0xa3d30d))
-#define g_off_A3D50F ((uint16*)RomPtr(0xa3d50f))
-#define g_word_A3D517 ((uint16*)RomPtr(0xa3d517))
-#define g_off_A3D5A4 ((uint16*)RomPtr(0xa3d5a4))
-#define g_word_A3DABC ((uint16*)RomPtr(0xa3dabc))
-#define g_off_A3DC0B ((uint16*)RomPtr(0xa3dc0b))
-#define g_word_A3DCAE ((uint16*)RomPtr(0xa3dcae))
-#define g_off_A3DCA6 ((uint16*)RomPtr(0xa3dca6))
-#define g_off_A3E03B ((uint16*)RomPtr(0xa3e03b))
-#define g_word_A3E5F0 ((uint16*)RomPtr(0xa3e5f0))
-#define g_off_A3E2CC ((uint16*)RomPtr(0xa3e2cc))
-#define g_off_A3E630 ((uint16*)RomPtr(0xa3e630))
-#define g_off_A3E63C ((uint16*)RomPtr(0xa3e63c))
-#define g_off_A3E648 ((uint16*)RomPtr(0xa3e648))
-#define g_off_A3E654 ((uint16*)RomPtr(0xa3e654))
-#define g_word_A3E931 ((uint16*)RomPtr(0xa3e931))
-#define g_word_A3EAD6 ((uint16*)RomPtr(0xa3ead6))
-#define g_word_A3EA3F ((uint16*)RomPtr(0xa3ea3f))
-
-uint16 EnemyInstr_EnableOffScreenProcessing_A3(uint16 k, uint16 j) { // 0xA38173
- EnemyData *v2 = gEnemyData(k);
- v2->properties |= kEnemyProps_ProcessedOffscreen;
- return j;
-}
-
-uint16 EnemyInstr_DisableOffScreenProcessing_A3(uint16 k, uint16 j) { // 0xA3817D
- EnemyData *v2 = gEnemyData(k);
- v2->properties &= ~kEnemyProps_ProcessedOffscreen;
- return j;
-}
-
-uint16 EnemyInstr_Goto_A3(uint16 k, uint16 j) { // 0xA380ED
- return *(uint16 *)RomPtr_A3(j);
-}
-
-
-uint16 EnemyInstr_Sleep_A3(uint16 k, uint16 j) { // 0xA3812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
void Enemy_GrappleReact_NoInteract_A3(void) { // 0xA38000
SwitchEnemyAiToMainAi();
@@ -115,9 +97,9 @@ void Enemy_NormalFrozenAI_A3(void) { // 0xA38041
NormalEnemyFrozenAI();
}
-uint16 Waver_Instr_1(uint16 k, uint16 j) { // 0xA386E3
+const uint16 *Waver_Instr_1(uint16 k, const uint16 *jp) { // 0xA386E3
Get_Waver(cur_enemy_index)->waver_var_E = 1;
- return j;
+ return jp;
}
void Waver_Init(void) { // 0xA386ED
@@ -182,9 +164,9 @@ void Waver_Func_1(void) { // 0xA387FE
}
}
-uint16 Metalee_Instr_1(uint16 k, uint16 j) { // 0xA38956
+const uint16 *Metalee_Instr_1(uint16 k, const uint16 *jp) { // 0xA38956
Get_Metalee(cur_enemy_index)->metalee_var_E = 1;
- return j;
+ return jp;
}
void Metalee_Init(void) { // 0xA38960
@@ -348,7 +330,7 @@ void Fireflea_Func_3(uint16 k) { // 0xA38D75
void Fireflea_Func_4(uint16 k) { // 0xA38D9C
Enemy_Fireflea *E = Get_Fireflea(k);
- E->firefl_var_C = LOBYTE(g_word_A38D1D[(uint16)(2 * HIBYTE(E->firefl_parameter_2)) >> 1]);
+ E->firefl_var_C = LOBYTE(g_word_A38D1D[HIBYTE(E->firefl_parameter_2)]);
}
void Fireflea_Func_5(uint16 k) { // 0xA38DAE
@@ -412,19 +394,19 @@ void Fireflea_Common(void) { // 0xA38E8D
}
}
-uint16 MaridiaFish_Instr_3(uint16 k, uint16 j) { // 0xA39096
+const uint16 *MaridiaFish_Instr_3(uint16 k, const uint16 *jp) { // 0xA39096
Get_MaridiaFish(cur_enemy_index)->base.layer = 6;
- return j;
+ return jp;
}
-uint16 MaridiaFish_Instr_1(uint16 k, uint16 j) { // 0xA390A0
+const uint16 *MaridiaFish_Instr_1(uint16 k, const uint16 *jp) { // 0xA390A0
Get_MaridiaFish(cur_enemy_index)->base.layer = 2;
- return j;
+ return jp;
}
-uint16 MaridiaFish_Instr_2(uint16 k, uint16 j) { // 0xA390AA
+const uint16 *MaridiaFish_Instr_2(uint16 k, const uint16 *jp) { // 0xA390AA
Get_MaridiaFish(cur_enemy_index)->mfh_var_01 = 1;
- return j;
+ return jp;
}
void MaridiaFish_Init(void) { // 0xA390B5
@@ -663,24 +645,24 @@ void Slug_Func_1(void) { // 0xA39955
;
}
-uint16 PlatformThatFallsWithSamus_Instr_3(uint16 k, uint16 j) { // 0xA39C6B
+const uint16 *PlatformThatFallsWithSamus_Instr_3(uint16 k, const uint16 *jp) { // 0xA39C6B
Get_PlatformThatFallsWithSamus(cur_enemy_index)->ptfwss_var_02 = 0;
- return j;
+ return jp;
}
-uint16 PlatformThatFallsWithSamus_Instr_4(uint16 k, uint16 j) { // 0xA39C76
+const uint16 *PlatformThatFallsWithSamus_Instr_4(uint16 k, const uint16 *jp) { // 0xA39C76
Get_PlatformThatFallsWithSamus(cur_enemy_index)->ptfwss_var_02 = 1;
- return j;
+ return jp;
}
-uint16 PlatformThatFallsWithSamus_Instr_1(uint16 k, uint16 j) { // 0xA39C81
+const uint16 *PlatformThatFallsWithSamus_Instr_1(uint16 k, const uint16 *jp) { // 0xA39C81
Get_PlatformThatFallsWithSamus(cur_enemy_index)->ptfwss_var_02 = 0;
- return j;
+ return jp;
}
-uint16 PlatformThatFallsWithSamus_Instr_2(uint16 k, uint16 j) { // 0xA39C8C
+const uint16 *PlatformThatFallsWithSamus_Instr_2(uint16 k, const uint16 *jp) { // 0xA39C8C
Get_PlatformThatFallsWithSamus(cur_enemy_index)->ptfwss_var_02 = 1;
- return j;
+ return jp;
}
void PlatformThatFallsWithSamus_Init(void) { // 0xA39C9F
@@ -989,7 +971,7 @@ void Roach_Func_9(void) { // 0xA3A2D7
Enemy_Roach *E = Get_Roach(cur_enemy_index);
if (IsSamusWithinEnemy_X(cur_enemy_index, LOBYTE(E->roach_parameter_2))) {
if (IsSamusWithinEnemy_Y(cur_enemy_index, LOBYTE(E->roach_parameter_2)))
- E->roach_var_B = g_off_A3A121[(uint16)(2 * HIBYTE(E->roach_parameter_2)) >> 1];
+ E->roach_var_B = g_off_A3A121[HIBYTE(E->roach_parameter_2)];
}
}
@@ -1256,8 +1238,8 @@ void Mochtroid_Func_1(void) { // 0xA3A7AA
R18_ = 0;
R20_ = 0;
Enemy_Mochtroid *E = Get_Mochtroid(cur_enemy_index);
- *(uint16 *)((char *)&R18_ + 1) = (uint16)(E->base.y_pos - samus_y_pos) >> 2;
- if ((*(uint16 *)((char *)&R18_ + 1) & 0x2000) != 0)
+ R19_ = (uint16)(E->base.y_pos - samus_y_pos) >> 2;
+ if ((R19_ & 0x2000) != 0)
R20_ = (uint8)R20_ | 0xFFC0;
uint16 mochtr_var_C = E->mochtr_var_C;
bool v3 = mochtr_var_C < R18_;
@@ -1287,8 +1269,8 @@ LABEL_8:
}
R18_ = 0;
R20_ = 0;
- *(uint16 *)((char *)&R18_ + 1) = (uint16)(E->base.x_pos - samus_x_pos) >> 2;
- if ((*(uint16 *)((char *)&R18_ + 1) & 0x2000) != 0)
+ R19_ = (uint16)(E->base.x_pos - samus_x_pos) >> 2;
+ if ((R19_ & 0x2000) != 0)
R20_ = (uint8)R20_ | 0xFFC0;
uint16 mochtr_var_A = E->mochtr_var_A;
v3 = mochtr_var_A < R18_;
@@ -1397,15 +1379,14 @@ void Mochtroid_Shot(void) { // 0xA3A9A8
Enemy_NormalShotAI_A3();
}
-uint16 Sidehopper_Func_1(uint16 k, uint16 j) { // 0xA3AA68
- uint16 *v2 = (uint16 *)RomPtr_A3(j);
- QueueSfx2_Max3(*v2);
- return j + 2;
+const uint16 *Sidehopper_Func_1(uint16 k, const uint16 *jp) { // 0xA3AA68
+ QueueSfx2_Max3(*jp);
+ return jp + 1;
}
-uint16 Sidehopper_Instr_1(uint16 k, uint16 j) { // 0xA3AAFE
+const uint16 *Sidehopper_Instr_1(uint16 k, const uint16 *jp) { // 0xA3AAFE
Get_Sidehopper(cur_enemy_index)->sideh_var_04 = 1;
- return j;
+ return jp;
}
void Sidehopper_Init(void) { // 0xA3AB09
@@ -1694,19 +1675,19 @@ void Sidehopper_Func_22(void) { // 0xA3AE8E
}
}
-uint16 MaridiaRefillCandy_Instr_1(uint16 k, uint16 j) { // 0xA3B429
+const uint16 *MaridiaRefillCandy_Instr_1(uint16 k, const uint16 *jp) { // 0xA3B429
Get_MaridiaRefillCandy(cur_enemy_index)->mrcy_var_00 = 4;
- return j;
+ return jp;
}
-uint16 MaridiaRefillCandy_Instr_2(uint16 k, uint16 j) { // 0xA3B434
+const uint16 *MaridiaRefillCandy_Instr_2(uint16 k, const uint16 *jp) { // 0xA3B434
Get_MaridiaRefillCandy(cur_enemy_index)->mrcy_var_00 = 8;
- return j;
+ return jp;
}
-uint16 MaridiaRefillCandy_Instr_3(uint16 k, uint16 j) { // 0xA3B43F
+const uint16 *MaridiaRefillCandy_Instr_3(uint16 k, const uint16 *jp) { // 0xA3B43F
Get_MaridiaRefillCandy(cur_enemy_index)->mrcy_var_00 = 12;
- return j;
+ return jp;
}
void MaridiaRefillCandy_Init(void) { // 0xA3B44A
@@ -1825,14 +1806,14 @@ void NorfairSlowFireball_Func_1(void) { // 0xA3B6F9
;
}
-uint16 Bang_Instr_1(uint16 k, uint16 j) { // 0xA3BA78
+const uint16 *Bang_Instr_1(uint16 k, const uint16 *jp) { // 0xA3BA78
QueueSfx2_Max6(0x56u);
- return j;
+ return jp;
}
-uint16 Bang_Instr_2(uint16 k, uint16 j) { // 0xA3BAA8
+const uint16 *Bang_Instr_2(uint16 k, const uint16 *jp) { // 0xA3BAA8
Get_Bang(cur_enemy_index)->bang_var_22 = 1;
- return j;
+ return jp;
}
void Bang_Init(void) { // 0xA3BAB3
@@ -2022,25 +2003,19 @@ void Bang_Func_13(void) { // 0xA3BD89
}
void Bang_Func_14(void) { // 0xA3BDB9
- char v2; // t0
-
R18_ = kSine16bit[(uint8)(Get_Bang(cur_enemy_index)->bang_var_01 + 64)];
if ((R18_ & 0x8000u) != 0)
Get_Bang(cur_enemy_index)->bang_var_07 = 1;
- uint16 v1 = Abs16(R18_) & 0xFF00;
- v2 = v1;
- LOBYTE(v1) = HIBYTE(v1);
- HIBYTE(v1) = v2;
- R22_ = v1;
+ R22_ = (uint16)Abs16(R18_) >> 8;
Enemy_Bang *E = Get_Bang(cur_enemy_index);
R24_ = E->bang_var_0A;
Bang_Func_16();
R22_ = R28_;
- R24_ = g_word_7E001E;
+ R24_ = R30_;
if (E->bang_var_07) {
Bang_Func_17();
R22_ = R28_;
- R24_ = g_word_7E001E;
+ R24_ = R30_;
}
uint16 x_subpos = E->base.x_subpos;
bool v5 = __CFADD__uint16(R22_, x_subpos);
@@ -2049,25 +2024,19 @@ void Bang_Func_14(void) { // 0xA3BDB9
}
void Bang_Func_15(void) { // 0xA3BE1C
- char v2; // t0
-
- R18_ = kSine16bit[(uint16)(2 * (uint8)Get_Bang(cur_enemy_index)->bang_var_01) >> 1];
+ R18_ = kSine16bit[(uint8)Get_Bang(cur_enemy_index)->bang_var_01];
if ((R18_ & 0x8000u) != 0)
Get_Bang(cur_enemy_index)->bang_var_08 = 1;
- uint16 v1 = Abs16(R18_) & 0xFF00;
- v2 = v1;
- LOBYTE(v1) = HIBYTE(v1);
- HIBYTE(v1) = v2;
- R22_ = v1;
+ R22_ = (uint16)Abs16(R18_) >> 8;
Enemy_Bang *E = Get_Bang(cur_enemy_index);
R24_ = E->bang_var_0A;
Bang_Func_16();
R22_ = R28_;
- R24_ = g_word_7E001E;
+ R24_ = R30_;
if (E->bang_var_08) {
Bang_Func_17();
R22_ = R28_;
- R24_ = g_word_7E001E;
+ R24_ = R30_;
}
uint16 y_subpos = E->base.y_subpos;
bool v5 = __CFADD__uint16(R22_, y_subpos);
@@ -2076,24 +2045,20 @@ void Bang_Func_15(void) { // 0xA3BE1C
}
void Bang_Func_16(void) { // 0xA3BE7B
- int16 v1;
-
R28_ = Mult8x8(R22_, R24_);
uint16 prod = Mult8x8(R22_, HIBYTE(R24_));
- g_word_7E001E = (uint8)((uint16)(prod & 0xFF00) >> 8);
- uint16 RegWord = (uint8)prod;
- LOBYTE(v1) = HIBYTE(RegWord);
- HIBYTE(v1) = RegWord;
+ R30_ = (prod & 0xFF00) >> 8;
+ uint16 v1 = prod << 8;
bool v2 = __CFADD__uint16(R28_, v1);
R28_ += v1;
if (v2)
- ++g_word_7E001E;
+ ++R30_;
}
void Bang_Func_17(void) { // 0xA3BEBE
if (R22_ || R24_) {
R28_ = -R22_;
- g_word_7E001E = ~R24_;
+ R30_ = ~R24_;
}
}
@@ -2130,9 +2095,9 @@ void Bang_Shot(void) { // 0xA3BEFD
}
}
-uint16 Skree_Instr_1(uint16 k, uint16 j) { // 0xA3C6A4
+const uint16 *Skree_Instr_1(uint16 k, const uint16 *jp) { // 0xA3C6A4
Get_Skree(cur_enemy_index)->skree_var_E = 1;
- return j;
+ return jp;
}
void Skree_Init(void) { // 0xA3C6AE
@@ -2245,38 +2210,34 @@ void Skree_Shot(void) { // 0xA3C7F5
}
}
-uint16 MaridiaSnail_Instr_1(uint16 k, uint16 j) { // 0xA3CC36
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
- Get_MaridiaSnail(k)->msl_var_F = v2;
- return j + 2;
+const uint16 *MaridiaSnail_Instr_1(uint16 k, const uint16 *jp) { // 0xA3CC36
+ Get_MaridiaSnail(k)->msl_var_F = *jp;
+ return jp + 1;
}
-uint16 MaridiaSnail_Instr_2(uint16 k, uint16 j) { // 0xA3CC3F
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
- Get_MaridiaSnail(k)->msl_var_D = v2;
- return j + 2;
+const uint16 *MaridiaSnail_Instr_2(uint16 k, const uint16 *jp) { // 0xA3CC3F
+ Get_MaridiaSnail(k)->msl_var_D = *jp;
+ return jp + 1;
}
-uint16 MaridiaSnail_Instr_4(uint16 k, uint16 j) { // 0xA3CC48
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
+const uint16 *MaridiaSnail_Instr_4(uint16 k, const uint16 *jp) { // 0xA3CC48
Enemy_MaridiaSnail *E = Get_MaridiaSnail(k);
- E->msl_var_07 = v2;
- E->msl_var_C = *(uint16 *)((char *)&g_stru_A3CD42[0].field_6 + (uint16)(8 * v2));
- return j + 2;
+ E->msl_var_07 = jp[0];
+ E->msl_var_C = *(uint16 *)((char *)&g_stru_A3CD42[0].field_6 + 8 * E->msl_var_07);
+ return jp + 1;
}
-uint16 MaridiaSnail_Instr_3(uint16 k, uint16 j) { // 0xA3CC5F
- uint8 *v2 = RomPtr_A3(j);
+const uint16 *MaridiaSnail_Instr_3(uint16 k, const uint16 *jp) { // 0xA3CC5F
Enemy_MaridiaSnail *E = Get_MaridiaSnail(k);
- E->base.x_pos += *(uint16 *)v2;
- E->base.y_pos += *((uint16 *)v2 + 1);
- return j + 4;
+ E->base.x_pos += jp[0];
+ E->base.y_pos += jp[1];
+ return jp + 2;
}
-uint16 MaridiaSnail_Instr_5(uint16 k, uint16 j) { // 0xA3CC78
+const uint16 *MaridiaSnail_Instr_5(uint16 k, const uint16 *jp) { // 0xA3CC78
if (Get_MaridiaSnail(k)->msl_var_08 == 2 || (NextRandom() & 1) != 0)
- j -= 6;
- return j;
+ jp -= 3;
+ return jp;
}
void MaridiaSnail_Func_1(uint16 k) { // 0xA3CC92
@@ -2397,7 +2358,7 @@ void MaridiaSnail_Func_7(uint16 k) { // 0xA3CF60
void MaridiaSnail_Func_8(uint16 a) { // 0xA3CF8F
if ((a & 0x8000u) != 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = a;
+ R19_ = a;
uint16 v1;
if ((R20_ & 0x8000u) == 0)
v1 = R20_ + 7;
@@ -2469,7 +2430,7 @@ void MaridiaSnail_D002(uint16 k, uint16 j) { // 0xA3D002
msl_var_A = E->msl_var_A;
if (msl_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = msl_var_A;
+ R19_ = msl_var_A;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -2487,19 +2448,19 @@ void MaridiaSnail_D002(uint16 k, uint16 j) { // 0xA3D002
msl_var_B = E->msl_var_B;
if (msl_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = msl_var_B;
+ R19_ = msl_var_B;
if (Enemy_MoveDown(k) & 1) {
E->msl_var_A = -E->msl_var_A;
- uint8 *v6 = RomPtr_A3(j);
- MaridiaSnail_Func_13(k, *((uint16 *)v6 + 3));
+ const uint8 *v6 = RomPtr_A3(j);
+ MaridiaSnail_Func_13(k, GET_WORD(v6 + 6));
}
} else {
uint16 v7 = E->msl_var_E + 1;
E->msl_var_E = v7;
if (sign16(v7 - 4)) {
E->msl_var_B = -E->msl_var_B;
- uint8 *v8 = RomPtr_A3(j);
- MaridiaSnail_Func_13(k, *((uint16 *)v8 + 2));
+ const uint8 *v8 = RomPtr_A3(j);
+ MaridiaSnail_Func_13(k, GET_WORD(v8 + 4));
} else {
MaridiaSnail_Func_14(k);
}
@@ -2517,7 +2478,7 @@ void MaridiaSnail_D07E(uint16 k, uint16 j) { // 0xA3D07E
msl_var_B = E->msl_var_B;
if (msl_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = msl_var_B;
+ R19_ = msl_var_B;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -2533,11 +2494,11 @@ void MaridiaSnail_D07E(uint16 k, uint16 j) { // 0xA3D07E
msl_var_A = E->msl_var_A;
if (msl_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = msl_var_A;
+ R19_ = msl_var_A;
if (Enemy_MoveRight_ProcessSlopes(k) & 1) {
E->msl_var_B = -E->msl_var_B;
- uint8 *v6 = RomPtr_A3(j);
- MaridiaSnail_Func_13(k, *((uint16 *)v6 + 3));
+ const uint8 *v6 = RomPtr_A3(j);
+ MaridiaSnail_Func_13(k, GET_WORD(v6 + 6));
} else {
uint8 carry = EnemyFunc_C8AD(k);
MaridiaSnail_Func_12(k, carry);
@@ -2547,8 +2508,8 @@ void MaridiaSnail_D07E(uint16 k, uint16 j) { // 0xA3D07E
E->msl_var_E = v7;
if (sign16(v7 - 4)) {
E->msl_var_A = -E->msl_var_A;
- uint8 *v8 = RomPtr_A3(j);
- MaridiaSnail_Func_13(k, *((uint16 *)v8 + 2));
+ const uint8 *v8 = RomPtr_A3(j);
+ MaridiaSnail_Func_13(k, GET_WORD(v8 + 4));
} else {
MaridiaSnail_Func_14(k);
}
@@ -2557,16 +2518,16 @@ void MaridiaSnail_D07E(uint16 k, uint16 j) { // 0xA3D07E
void MaridiaSnail_Func_10(uint16 k, uint16 j) { // 0xA3D0F8
Enemy_MaridiaSnail *E = Get_MaridiaSnail(k);
- uint8 *v3 = RomPtr_A3(j);
- E->base.x_pos += *(uint16 *)v3;
- E->base.y_pos += *((uint16 *)v3 + 1);
+ const uint8 *v3 = RomPtr_A3(j);
+ E->base.x_pos += GET_WORD(v3);
+ E->base.y_pos += GET_WORD(v3 + 2);
}
void MaridiaSnail_Func_11(uint16 k, uint16 j) { // 0xA3D10D
Enemy_MaridiaSnail *E = Get_MaridiaSnail(k);
- uint8 *v3 = RomPtr_A3(j);
- E->base.x_pos -= *(uint16 *)v3;
- E->base.y_pos = E->base.y_pos - *((uint16 *)v3 + 1);
+ const uint8 *v3 = RomPtr_A3(j);
+ E->base.x_pos -= GET_WORD(v3);
+ E->base.y_pos = E->base.y_pos - GET_WORD(v3 + 2);
}
void MaridiaSnail_Func_12(uint16 k, uint16 carry) { // 0xA3D124
@@ -2837,10 +2798,9 @@ void Reflec_Func_1(void) { // 0xA3DB0C
}
}
-uint16 Reflec_Instr_1(uint16 k, uint16 j) { // 0xA3DBC8
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
- Get_Reflec(k)->reflec_parameter_2 = v2;
- return j + 2;
+const uint16 *Reflec_Instr_1(uint16 k, const uint16 *jp) { // 0xA3DBC8
+ Get_Reflec(k)->reflec_parameter_2 = jp[0];
+ return jp + 1;
}
void Reflec_Init(void) { // 0xA3DBD3
@@ -2945,10 +2905,9 @@ void Reflec_Func_13(void) { // 0xA3DEFD
loop_index_end = Get_Reflec(cur_enemy_index)->base.y_pos;
}
-uint16 WreckedShipOrangeZoomer_Func_1(uint16 k, uint16 j) { // 0xA3DFC2
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
- Get_WreckedShipOrangeZoomer(k)->wsozr_var_F = v2;
- return j + 2;
+const uint16 *WreckedShipOrangeZoomer_Func_1(uint16 k, const uint16 *jp) { // 0xA3DFC2
+ Get_WreckedShipOrangeZoomer(k)->wsozr_var_F = jp[0];
+ return jp + 1;
}
void WreckedShipOrangeZoomer_Init(void) { // 0xA3E043
@@ -2989,7 +2948,7 @@ void WreckedShipOrangeZoomer_Func_2(uint16 k) { // 0xA3E091
wsozr_var_A = E->wsozr_var_A;
if (wsozr_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = wsozr_var_A;
+ R19_ = wsozr_var_A;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -3004,7 +2963,7 @@ void WreckedShipOrangeZoomer_Func_2(uint16 k) { // 0xA3E091
wsozr_var_B = E->wsozr_var_B;
if (wsozr_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = wsozr_var_B;
+ R19_ = wsozr_var_B;
if (!(Enemy_MoveDown(k) & 1)) {
if ((int16)(samus_y_pos - E->base.y_pos) >= 0) {
v7 = E->wsozr_var_B;
@@ -3060,7 +3019,7 @@ void sub_A3E168(uint16 k) { // 0xA3E168
wsozr_var_B = E->wsozr_var_B;
if (wsozr_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = wsozr_var_B;
+ R19_ = wsozr_var_B;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -3074,7 +3033,7 @@ void sub_A3E168(uint16 k) { // 0xA3E168
wsozr_var_A = E->wsozr_var_A;
if (wsozr_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = wsozr_var_A;
+ R19_ = wsozr_var_A;
if (!(Enemy_MoveRight_ProcessSlopes(k) & 1)) {
EnemyFunc_C8AD(k);
if ((int16)(samus_x_pos - E->base.x_pos) >= 0) {
@@ -3121,19 +3080,18 @@ void BigEyeBugs_Init(void) { // 0xA3E2D4
void FireZoomer_Init(void) { // 0xA3E59C
Enemy_FireZoomer *E = Get_FireZoomer(cur_enemy_index);
- E->base.current_instruction = g_off_A3E2CC[(uint16)(2 * (E->base.current_instruction & 3)) >> 1];
+ E->base.current_instruction = g_off_A3E2CC[(E->base.current_instruction & 3)];
StoneZoomer_E67A(cur_enemy_index);
}
-uint16 Zoomer_Instr_SetPreinstr(uint16 k, uint16 j) { // 0xA3E660
- uint16 v2 = *(uint16 *)RomPtr_A3(j);
- gEnemyData(k)->ai_preinstr = v2;
- return j + 2;
+const uint16 *Zoomer_Instr_SetPreinstr(uint16 k, const uint16 *jp) { // 0xA3E660
+ gEnemyData(k)->ai_preinstr = jp[0];
+ return jp + 1;
}
void StoneZoomer_Init(void) { // 0xA3E669
Enemy_StoneZoomer *E = Get_StoneZoomer(cur_enemy_index);
- E->base.current_instruction = g_off_A3E2CC[(uint16)(2 * (E->base.current_instruction & 3)) >> 1];
+ E->base.current_instruction = g_off_A3E2CC[(E->base.current_instruction & 3)];
StoneZoomer_E67A(cur_enemy_index);
}
@@ -3175,7 +3133,7 @@ void FireZoomer_Func_1(uint16 k) { // 0xA3E6C8
fzr_var_A = E->fzr_var_A;
if (fzr_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = fzr_var_A;
+ R19_ = fzr_var_A;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -3190,7 +3148,7 @@ void FireZoomer_Func_1(uint16 k) { // 0xA3E6C8
fzr_var_B = E->fzr_var_B;
if (fzr_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = fzr_var_B;
+ R19_ = fzr_var_B;
if (Enemy_MoveDown(k) & 1) {
E->fzr_var_A = -E->fzr_var_A;
uint16 fzr_parameter_2 = E->fzr_parameter_2, v7;
@@ -3258,7 +3216,7 @@ void FireZoomer_Func_3(uint16 k) { // 0xA3E7F2
fzr_var_B = E->fzr_var_B;
if (fzr_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = fzr_var_B;
+ R19_ = fzr_var_B;
uint16 v4;
if ((R20_ & 0x8000u) == 0)
v4 = R20_ + 1;
@@ -3328,7 +3286,7 @@ void FireZoomer_E8A5(uint16 k) { // 0xA3E8A5
v3 = E->fzr_var_A;
if (v3 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v3;
+ R19_ = v3;
}
}
@@ -3350,15 +3308,15 @@ void Metroid_Init(void) { // 0xA3EA4F
E->metroid_var_02 = 0;
}
-uint16 Metroid_Instr_2(uint16 k, uint16 j) { // 0xA3EAA5
+const uint16 *Metroid_Instr_2(uint16 k, const uint16 *jp) { // 0xA3EAA5
QueueSfx2_Max6(0x50u);
- return j;
+ return jp;
}
-uint16 Metroid_Instr_1(uint16 k, uint16 j) { // 0xA3EAB1
+const uint16 *Metroid_Instr_1(uint16 k, const uint16 *jp) { // 0xA3EAB1
int v2 = (uint16)(2 * (NextRandom() & 7)) >> 1;
QueueSfx2_Max6(g_word_A3EAD6[v2]);
- return j;
+ return jp;
}
void Metroid_Frozen(void) { // 0xA3EAE6
@@ -3426,8 +3384,8 @@ void Metroid_Func_1(void) { // 0xA3EC11
R18_ = 0;
R20_ = 0;
Enemy_Metroid *E = Get_Metroid(cur_enemy_index);
- *(uint16 *)((char *)&R18_ + 1) = (uint16)(E->base.y_pos - draw_enemy_layer) >> 2;
- if ((*(uint16 *)((char *)&R18_ + 1) & 0x2000) != 0)
+ R19_ = (uint16)(E->base.y_pos - draw_enemy_layer) >> 2;
+ if ((R19_ & 0x2000) != 0)
R20_ = (uint8)R20_ | 0xFFC0;
uint16 metroid_var_C = E->metroid_var_C;
bool v2 = metroid_var_C < R18_;
@@ -3454,8 +3412,8 @@ LABEL_9:
}
R18_ = 0;
R20_ = 0;
- *(uint16 *)((char *)&R18_ + 1) = (uint16)(E->base.x_pos - samus_x_pos) >> 2;
- if ((*(uint16 *)((char *)&R18_ + 1) & 0x2000) != 0)
+ R19_ = (uint16)(E->base.x_pos - samus_x_pos) >> 2;
+ if ((R19_ & 0x2000) != 0)
R20_ = (uint8)R20_ | 0xFFC0;
uint16 metroid_var_A = E->metroid_var_A;
v2 = metroid_var_A < R18_;
@@ -3717,4 +3675,4 @@ void Metroid_Powerbomb(uint16 k) { // 0xA3F042
sprite_instr_list_ptrs[Get_Metroid(cur_enemy_index)->metroid_var_00 >> 1] = 0;
sprite_instr_list_ptrs[Get_Metroid(cur_enemy_index)->metroid_var_01 >> 1] = 0;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_a4.c b/src/sm_a4.c
index 6eb7180..c57b68e 100644
--- a/src/sm_a4.c
+++ b/src/sm_a4.c
@@ -4,6 +4,28 @@
#include "funcs.h"
#include "enemy_types.h"
+
+#define g_word_A4B89D ((uint16*)RomFixedPtr(0xa4b89d))
+#define g_word_A4B8BD ((uint16*)RomFixedPtr(0xa4b8bd))
+#define g_word_A4B8DD ((uint16*)RomFixedPtr(0xa4b8dd))
+#define g_word_A4B8FD ((uint16*)RomFixedPtr(0xa4b8fd))
+#define g_word_A4B91D ((uint16*)RomFixedPtr(0xa4b91d))
+#define g_off_A48B79 ((uint16*)RomFixedPtr(0xa48b79))
+#define g_word_A49156 ((uint16*)RomFixedPtr(0xa49156))
+#define g_word_A49C79 ((uint16*)RomFixedPtr(0xa49c79))
+#define g_word_A49E7B ((uint16*)RomFixedPtr(0xa49e7b))
+#define g_word_A49BC5 (*(uint16*)RomFixedPtr(0xa49bc5))
+#define g_word_A49BC7 (*(uint16*)RomFixedPtr(0xa49bc7))
+#define g_word_A49BC9 (*(uint16*)RomFixedPtr(0xa49bc9))
+#define g_word_A49BCB (*(uint16*)RomFixedPtr(0xa49bcb))
+#define kCrocoVlineRandomPos ((uint8*)RomFixedPtr(0xa49697))
+#define g_word_A49BBD ((uint16*)RomFixedPtr(0xa49bbd))
+#define g_word_A498CA ((uint16*)RomFixedPtr(0xa498ca))
+#define g_word_A499CB ((uint16*)RomFixedPtr(0xa499cb))
+#define g_word_A499D9 ((uint16*)RomFixedPtr(0xa499d9))
+
+
+
static const uint16 g_word_A48692 = 8;
static const uint16 g_word_A48694 = 8;
static const uint16 g_word_A48696 = 0;
@@ -14,34 +36,6 @@ static const uint16 g_word_A4869E = 3;
static const uint16 g_word_A486A0 = 8;
static const uint16 g_word_A486A2 = 0x300;
static const uint16 g_word_A486A4 = 0x640;
-#define g_word_A4B89D ((uint16*)RomPtr(0xa4b89d))
-#define g_word_A4B8BD ((uint16*)RomPtr(0xa4b8bd))
-#define g_word_A4B8DD ((uint16*)RomPtr(0xa4b8dd))
-#define g_word_A4B8FD ((uint16*)RomPtr(0xa4b8fd))
-#define g_word_A4B91D ((uint16*)RomPtr(0xa4b91d))
-#define g_off_A48B79 ((uint16*)RomPtr(0xa48b79))
-#define g_word_A49156 ((uint16*)RomPtr(0xa49156))
-#define g_word_A49C79 ((uint16*)RomPtr(0xa49c79))
-#define g_word_A49E7B ((uint16*)RomPtr(0xa49e7b))
-#define g_word_A49BC5 (*(uint16*)RomPtr(0xa49bc5))
-#define g_word_A49BC7 (*(uint16*)RomPtr(0xa49bc7))
-#define g_word_A49BC9 (*(uint16*)RomPtr(0xa49bc9))
-#define g_word_A49BCB (*(uint16*)RomPtr(0xa49bcb))
-#define kCrocoVlineRandomPos ((uint8*)RomPtr(0xa49697))
-#define g_word_A49BBD ((uint16*)RomPtr(0xa49bbd))
-#define g_word_A498CA ((uint16*)RomPtr(0xa498ca))
-#define g_word_A499CB ((uint16*)RomPtr(0xa499cb))
-#define g_word_A499D9 ((uint16*)RomPtr(0xa499d9))
-
-
-uint16 EnemyInstr_Goto_A4(uint16 k, uint16 j) { // 0xA480ED
- return *(uint16 *)RomPtr_A4(j);
-}
-
-uint16 EnemyInstr_Sleep_A4(uint16 k, uint16 j) { // 0xA4812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
void Enemy_GrappleReact_SamusLatchesOn_A4(void) { // 0xA48005
SamusLatchesOnWithGrapple();
@@ -64,7 +58,9 @@ void Crocomire_Hurt(void) { // 0xA48687
Crocomire_Func_31();
}
-static Func_XY_Y *const off_A486B3[21] = { // 0xA486A6
+typedef const uint16 *CrocomireFunc(uint16 k, const uint16 *jp);
+
+static CrocomireFunc *const off_A486B3[21] = { // 0xA486A6
Crocomire_Func_2, Crocomire_Func_3, Crocomire_Func_4, Crocomire_Func_5,
Crocomire_Func_7, Crocomire_Func_8, Crocomire_Func_9, Crocomire_Func_10,
Crocomire_Func_11, Crocomire_Func_13, Crocomire_Func_14, Crocomire_Func_15,
@@ -73,64 +69,62 @@ static Func_XY_Y *const off_A486B3[21] = { // 0xA486A6
Crocomire_Func_26,
};
-uint16 Crocomire_Instr_1(uint16 k, uint16 j) {
-
+const uint16 *Crocomire_Instr_1(uint16 k, const uint16 *jp) {
uint16 crocom_var_C = Get_Crocomire(cur_enemy_index)->crocom_var_C;
- return off_A486B3[crocom_var_C >> 1](crocom_var_C, j);
+ return off_A486B3[crocom_var_C >> 1](crocom_var_C, jp);
}
-uint16 Crocomire_Func_2(uint16 k, uint16 j) { // 0xA486DE
- uint16 result = addr_kCrocomire_Ilist_BADE;
+const uint16 *Crocomire_Func_2(uint16 k, const uint16 *jp) { // 0xA486DE
Get_Crocomire(k)->base.instruction_timer = 1;
- return result;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BADE);
}
-uint16 Crocomire_Func_3(uint16 k, uint16 j) { // 0xA486E8
+const uint16 *Crocomire_Func_3(uint16 k, const uint16 *jp) { // 0xA486E8
Get_Crocomire(0)->crocom_var_C = 4;
- return addr_kCrocomire_Ilist_BBCE;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCE);
}
-uint16 Crocomire_Func_4(uint16 k, uint16 j) { // 0xA486F2
+const uint16 *Crocomire_Func_4(uint16 k, const uint16 *jp) { // 0xA486F2
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 v1 = abs16(E->base.x_pos - samus_x_pos);
if (sign16(v1 - 224)) {
E->crocom_var_B |= 0x8000u;
- j = addr_kCrocomire_Ilist_BC56;
E->crocom_var_C = 18;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC56);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_5(uint16 k, uint16 j) { // 0xA48717
+const uint16 *Crocomire_Func_5(uint16 k, const uint16 *jp) { // 0xA48717
Enemy_Crocomire *E = Get_Crocomire(0);
if ((E->crocom_var_B & 0x800) != 0 && (E->crocom_var_B &= ~0x800u, E->crocom_var_D)) {
- j = addr_kCrocomire_Ilist_BC30;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
E->crocom_var_C = 12;
} else if ((int16)(E->base.x_pos - g_word_A486A2) < 0) {
- j = addr_kCrocomire_Ilist_BE7E;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BE7E);
E->crocom_var_C = 10;
- } else if ((int16)(j + 0x43CC) >= 0) {
- return addr_kCrocomire_Ilist_BBCE;
+ } else if ((int16)(INSTR_ADDR_TO_PTR(0, jp) - addr_kCrocomire_Ilist_BC34) >= 0) {
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCE);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_14(uint16 k, uint16 j) { // 0xA48752
+const uint16 *Crocomire_Instr_14(uint16 k, const uint16 *jp) { // 0xA48752
if (sign16((random_number & 0xFFF) - 1024)) {
Enemy_Crocomire *E = Get_Crocomire(0);
E->crocom_var_C = 8;
E->crocom_var_F = 0;
- return addr_kCrocomire_Ilist_BB36;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BB36);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_7(uint16 k, uint16 j) { // 0xA4876C
+const uint16 *Crocomire_Func_7(uint16 k, const uint16 *jp) { // 0xA4876C
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 crocom_var_B = E->crocom_var_B;
if ((crocom_var_B & 0x800) != 0) {
E->crocom_var_B = crocom_var_B & 0xF7FF;
- j = addr_kCrocomire_Ilist_BC30;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
E->crocom_var_C = 12;
} else {
uint16 crocom_var_F = E->crocom_var_F;
@@ -140,107 +134,107 @@ uint16 Crocomire_Func_7(uint16 k, uint16 j) { // 0xA4876C
SpawnEnemyProjectileWithGfx(crocom_var_F, cur_enemy_index, addr_stru_868F8F);
QueueSfx3_Max6(0x1Cu);
} else {
- j = addr_kCrocomire_Ilist_BBCA;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCA);
E->crocom_var_C = 6;
}
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_8(uint16 k, uint16 j) { // 0xA487B2
+const uint16 *Crocomire_Func_8(uint16 k, const uint16 *jp) { // 0xA487B2
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 crocom_var_B = E->crocom_var_B;
if ((crocom_var_B & 0x800) != 0) {
E->crocom_var_B = crocom_var_B & 0xF7FF;
- j = addr_kCrocomire_Ilist_BC30;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
E->crocom_var_C = 12;
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_9(uint16 k, uint16 j) { // 0xA487CA
+const uint16 *Crocomire_Func_9(uint16 k, const uint16 *jp) { // 0xA487CA
uint16 v2;
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 crocom_var_D = E->crocom_var_D;
if (crocom_var_D && (v2 = crocom_var_D - 1, (E->crocom_var_D = v2) != 0)) {
E->crocom_var_C = 12;
- return addr_kCrocomire_Ilist_BC34;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC34);
} else {
E->crocom_var_C = 6;
- return addr_kCrocomire_Ilist_BBCE;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCE);
}
}
-uint16 Crocomire_Func_10(uint16 k, uint16 j) { // 0xA487E9
+const uint16 *Crocomire_Func_10(uint16 k, const uint16 *jp) { // 0xA487E9
Enemy_Crocomire *E = Get_Crocomire(0);
if ((int16)(E->base.x_pos - g_word_A486A2) >= 0) {
E->crocom_var_C = 6;
- return addr_kCrocomire_Ilist_BBCE;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCE);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_11(uint16 k, uint16 j) { // 0xA487FB
+const uint16 *Crocomire_Func_11(uint16 k, const uint16 *jp) { // 0xA487FB
Get_Crocomire(0)->crocom_var_C = 6;
- return addr_kCrocomire_Ilist_BD2A;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BD2A);
}
-uint16 Crocomire_Func_12(uint16 k, uint16 j) { // 0xA48805
+const uint16 *Crocomire_Func_12(uint16 k, const uint16 *jp) { // 0xA48805
Enemy_Crocomire *E = Get_Crocomire(0);
E->crocom_var_B &= ~0x400u;
- return addr_kCrocomire_Ilist_BCD8;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BCD8);
}
-uint16 Crocomire_Func_13(uint16 k, uint16 j) { // 0xA48812
+const uint16 *Crocomire_Func_13(uint16 k, const uint16 *jp) { // 0xA48812
Enemy_Crocomire *E = Get_Crocomire(0);
if ((E->crocom_var_B & 0x800) != 0) {
E->crocom_var_B &= ~0x800u;
E->crocom_var_C = 20;
- return addr_kCrocomire_Ilist_BC30;
- } else if ((int16)(j + 0x425E) >= 0) {
- return addr_kCrocomire_Ilist_BD2A;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
+ } else if ((int16)(INSTR_ADDR_TO_PTR(0, jp) - addr_kCrocomire_Ilist_BDA2) >= 0) {
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BD2A);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_14(uint16 k, uint16 j) { // 0xA48836
+const uint16 *Crocomire_Func_14(uint16 k, const uint16 *jp) { // 0xA48836
Enemy_Crocomire *E = Get_Crocomire(0);
if ((E->crocom_var_B & 0x800) != 0) {
E->crocom_var_B &= ~0x800u;
E->crocom_var_C = 12;
- return addr_kCrocomire_Ilist_BC30;
- } else if ((int16)(j + 0x425E) >= 0) {
- return addr_kCrocomire_Ilist_BD2A;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
+ } else if ((int16)(INSTR_ADDR_TO_PTR(0, jp) - addr_kCrocomire_Ilist_BDA2) >= 0) {
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BD2A);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_15(uint16 k, uint16 j) { // 0xA4885A
+const uint16 *Crocomire_Func_15(uint16 k, const uint16 *jp) { // 0xA4885A
Enemy_Crocomire *E = Get_Crocomire(0);
if ((E->crocom_var_B & 0x800) != 0) {
E->crocom_var_B &= ~0x800u;
E->crocom_var_C = 12;
- return addr_kCrocomire_Ilist_BC30;
- } else if ((int16)(j + 0x425E) >= 0) {
- return addr_kCrocomire_Ilist_BD2A;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BC30);
+ } else if ((int16)(INSTR_ADDR_TO_PTR(0, jp) - addr_kCrocomire_Ilist_BDA2) >= 0) {
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BD2A);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_16(uint16 k, uint16 j) { // 0xA4887E
+const uint16 *Crocomire_Func_16(uint16 k, const uint16 *jp) { // 0xA4887E
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 v1 = E->crocom_var_D - 1;
E->crocom_var_D = v1;
if (sign16(v1 - 2)) {
E->crocom_var_D = 0;
E->crocom_var_C = 6;
- return addr_kCrocomire_Ilist_BBCE;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BBCE);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_17(uint16 k, uint16 j) { // 0xA4889A
+const uint16 *Crocomire_Func_17(uint16 k, const uint16 *jp) { // 0xA4889A
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 crocom_var_B = E->crocom_var_B;
if ((crocom_var_B & 0x800) != 0) {
@@ -251,13 +245,13 @@ uint16 Crocomire_Func_17(uint16 k, uint16 j) { // 0xA4889A
QueueSfx2_Max6(0x54u);
} else {
Get_Crocomire(cur_enemy_index)->crocom_var_C = 10;
- return addr_kCrocomire_Ilist_BD8E;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BD8E);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_18(uint16 k, uint16 j) { // 0xA488D2
- uint16 result = Crocomire_Func_2(cur_enemy_index, j);
+const uint16 *Crocomire_Func_18(uint16 k, const uint16 *jp) { // 0xA488D2
+ const uint16 *result = Crocomire_Func_2(cur_enemy_index, jp);
Enemy_Crocomire *E = Get_Crocomire(0);
E->crocom_var_B |= 0x200u;
E->crocom_var_D = 32;
@@ -265,110 +259,110 @@ uint16 Crocomire_Func_18(uint16 k, uint16 j) { // 0xA488D2
return result;
}
-uint16 Crocomire_Func_19(uint16 k, uint16 j) { // 0xA488EE
+const uint16 *Crocomire_Func_19(uint16 k, const uint16 *jp) { // 0xA488EE
bool v2; // zf
- j = Crocomire_Func_2(cur_enemy_index, j);
+ jp = Crocomire_Func_2(cur_enemy_index, jp);
Enemy_Crocomire *E = Get_Crocomire(0);
if (!E->crocom_var_D || (v2 = E->crocom_var_D == 1, --E->crocom_var_D, v2)) {
- j = Crocomire_Func_20(cur_enemy_index);
+ jp = Crocomire_Func_20(cur_enemy_index);
E->crocom_var_C = 32;
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_20(uint16 k) { // 0xA4890B
+const uint16 *Crocomire_Func_20(uint16 k) { // 0xA4890B
Get_Crocomire(k)->crocom_var_C = 20;
Enemy_Crocomire *E = Get_Crocomire(0);
E->crocom_var_B = E->crocom_var_B;
- return addr_kCrocomire_Ilist_BAEA;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BAEA);
}
-uint16 Crocomire_Func_21(uint16 k, uint16 j) { // 0xA4891B
+const uint16 *Crocomire_Func_21(uint16 k, const uint16 *jp) { // 0xA4891B
Enemy_Crocomire *E = Get_Crocomire(0);
if ((E->crocom_var_B & 0x100) != 0) {
- j = Crocomire_Func_2(cur_enemy_index, j);
+ jp = Crocomire_Func_2(cur_enemy_index, jp);
E->crocom_var_D = 16;
E->crocom_var_C = 34;
} else {
- j = Crocomire_Func_20(cur_enemy_index);
+ jp = Crocomire_Func_20(cur_enemy_index);
E->crocom_var_C = 32;
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_22(uint16 k, uint16 j) { // 0xA48940
+const uint16 *Crocomire_Func_22(uint16 k, const uint16 *jp) { // 0xA48940
k = cur_enemy_index;
- j = Crocomire_Func_2(k, j);
+ jp = Crocomire_Func_2(k, jp);
Enemy_Crocomire *E = Get_Crocomire(0);
if (!E->crocom_var_D) {
E->crocom_var_B |= 0x2000u;
- j = Crocomire_Func_3(k, j);
+ jp = Crocomire_Func_3(k, jp);
E->crocom_var_C = 36;
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_23(uint16 k, uint16 j) { // 0xA4895E
+const uint16 *Crocomire_Func_23(uint16 k, const uint16 *jp) { // 0xA4895E
k = cur_enemy_index;
Enemy_Crocomire *E = Get_Crocomire(0);
if (sign16(E->base.x_pos - 672)) {
- j = Crocomire_Func_3(k, j);
+ jp = Crocomire_Func_3(k, jp);
E->crocom_var_C = 36;
E->crocom_var_D = 3;
} else {
if ((E->crocom_var_B & 0x4000) == 0) {
E->crocom_var_C = 38;
- j = Crocomire_Func_12(k, j);
+ jp = Crocomire_Func_12(k, jp);
}
if ((E->crocom_var_B & 0x4000) != 0) {
E->crocom_var_D = 5;
- j = addr_kCrocomire_Ilist_BCD8;
+ jp = INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BCD8);
E->crocom_var_F = E->crocom_var_C;
E->crocom_var_C = 42;
}
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_24(uint16 k, uint16 j) { // 0xA489A8
+const uint16 *Crocomire_Func_24(uint16 k, const uint16 *jp) { // 0xA489A8
bool v2; // zf
k = cur_enemy_index;
Enemy_Crocomire *E = Get_Crocomire(0);
if (!E->crocom_var_D || (v2 = E->crocom_var_D == 1, --E->crocom_var_D, v2)) {
- j = Crocomire_Func_3(k, j);
+ jp = Crocomire_Func_3(k, jp);
E->crocom_var_C = 40;
E->crocom_var_B &= ~0x400u;
} else {
E->crocom_var_C = 36;
Get_Crocomire(0x40u)->crocom_var_D = 0;
E->crocom_var_B |= 0x400u;
- return addr_kCrocomire_Ilist_BCD8;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BCD8);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Func_25(uint16 k, uint16 j) { // 0xA489DE
+const uint16 *Crocomire_Func_25(uint16 k, const uint16 *jp) { // 0xA489DE
k = cur_enemy_index;
Enemy_Crocomire *E = Get_Crocomire(0);
uint16 crocom_var_B = E->crocom_var_B;
if ((crocom_var_B & 0x2000) == 0)
E->crocom_var_B = crocom_var_B & 0xFCFF;
- j = Crocomire_Func_3(k, j);
+ jp = Crocomire_Func_3(k, jp);
E->crocom_var_C = 40;
- return j;
+ return jp;
}
-uint16 Crocomire_Func_26(uint16 k, uint16 j) { // 0xA489F9
+const uint16 *Crocomire_Func_26(uint16 k, const uint16 *jp) { // 0xA489F9
Enemy_Crocomire *E = Get_Crocomire(0);
if (E->crocom_var_D) {
uint16 crocom_var_B = E->crocom_var_B;
if ((crocom_var_B & 0x4000) != 0) {
--E->crocom_var_D;
QueueSfx2_Max6(0x3Bu);
- return addr_kCrocomire_Ilist_BCD8;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BCD8);
} else {
E->crocom_var_B = crocom_var_B & 0xBFFF;
E->crocom_var_C = 12;
@@ -377,9 +371,9 @@ uint16 Crocomire_Func_26(uint16 k, uint16 j) { // 0xA489F9
E->crocom_var_B &= ~0x4000u;
E->base.instruction_timer = 1;
E->crocom_var_C = E->crocom_var_F;
- return addr_kCrocomire_Ilist_BCD8;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BCD8);
}
- return j;
+ return jp;
}
void Crocomire_Init(void) { // 0xA48A5A
@@ -541,19 +535,19 @@ void Crocomire_Func_31(void) { // 0xA48CCB
}
}
-uint16 Crocomire_Instr_11(uint16 k, uint16 j) { // 0xA48CFB
+const uint16 *Crocomire_Instr_11(uint16 k, const uint16 *jp) { // 0xA48CFB
QueueSfx2_Max6(0x74u);
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_7(uint16 k, uint16 j) { // 0xA48D07
+const uint16 *Crocomire_Instr_7(uint16 k, const uint16 *jp) { // 0xA48D07
QueueSfx2_Max6(0x25u);
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_19(uint16 k, uint16 j) { // 0xA48D13
+const uint16 *Crocomire_Instr_19(uint16 k, const uint16 *jp) { // 0xA48D13
QueueSfx2_Max6(0x75u);
- return j;
+ return jp;
}
void Crocomire_Func_35(void) { // 0xA48D1F
@@ -722,30 +716,30 @@ void Crocomire_Func_38(uint16 k) { // 0xA48FC2
Enemy_MoveDown(k);
}
-uint16 Crocomire_Instr_2(uint16 k, uint16 j) { // 0xA48FC7
+const uint16 *Crocomire_Instr_2(uint16 k, const uint16 *jp) { // 0xA48FC7
earthquake_type = 4;
earthquake_timer = 5;
QueueSfx2_Max6(0x76u);
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_4(uint16 k, uint16 j) { // 0xA48FDF
+const uint16 *Crocomire_Instr_4(uint16 k, const uint16 *jp) { // 0xA48FDF
if ((Get_Crocomire(0)->crocom_var_B & 0x800) == 0) {
R18_ = 0;
R20_ = -4;
Enemy_MoveRight_IgnoreSlopes(cur_enemy_index);
}
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_3(uint16 k, uint16 j) { // 0xA48FFA
+const uint16 *Crocomire_Instr_3(uint16 k, const uint16 *jp) { // 0xA48FFA
Crocomire_Func_43();
- return Crocomire_Instr_4(k, j);
+ return Crocomire_Instr_4(k, jp);
}
-uint16 Crocomire_Instr_15(uint16 k, uint16 j) { // 0xA48FFF
+const uint16 *Crocomire_Instr_15(uint16 k, const uint16 *jp) { // 0xA48FFF
Crocomire_Func_43();
- return Crocomire_Instr_4(k, j);
+ return Crocomire_Instr_4(k, jp);
}
void Crocomire_Func_43(void) { // 0xA49004
@@ -755,22 +749,22 @@ void Crocomire_Func_43(void) { // 0xA49004
Crocomire_Func_87(0, v1);
}
-uint16 Crocomire_Instr_16(uint16 k, uint16 j) { // 0xA4901D
+const uint16 *Crocomire_Instr_16(uint16 k, const uint16 *jp) { // 0xA4901D
R18_ = 0;
R20_ = -4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
Get_Crocomire(0)->crocom_var_C = 14;
- return addr_kCrocomire_Ilist_BF3C;
+ return INSTR_RETURN_ADDR(addr_kCrocomire_Ilist_BF3C);
} else {
uint16 v2 = 32;
if (!sign16(random_number - 2048))
v2 = -32;
R18_ = v2;
- return Crocomire_Func_87(j, v2 + (random_number & 0xF));
+ return Crocomire_Func_87(jp, v2 + (random_number & 0xF));
}
}
-uint16 Crocomire_Instr_13(uint16 k, uint16 j) { // 0xA4905B
+const uint16 *Crocomire_Instr_13(uint16 k, const uint16 *jp) { // 0xA4905B
R18_ = 0;
R20_ = 4;
Enemy_Crocomire *E = Get_Crocomire(0);
@@ -779,24 +773,24 @@ uint16 Crocomire_Instr_13(uint16 k, uint16 j) { // 0xA4905B
- ((uint16)((E->base.x_pos < E->base.x_width) + 256) | 0x40000)) >> 16)
- layer1_x_pos) < 0)
Enemy_MoveRight_IgnoreSlopes(cur_enemy_index);
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_18(uint16 k, uint16 j) { // 0xA4907F
+const uint16 *Crocomire_Instr_18(uint16 k, const uint16 *jp) { // 0xA4907F
R18_ = 0;
R20_ = 4;
Enemy_MoveRight_IgnoreSlopes(k);
- return j;
+ return jp;
}
-uint16 Crocomire_Instr_12(uint16 k, uint16 j) { // 0xA4908F
+const uint16 *Crocomire_Instr_12(uint16 k, const uint16 *jp) { // 0xA4908F
Crocomire_Func_43();
- return Crocomire_Instr_13(k, j);
+ return Crocomire_Instr_13(k, jp);
}
-uint16 Crocomire_Instr_17(uint16 k, uint16 j) { // 0xA49094
+const uint16 *Crocomire_Instr_17(uint16 k, const uint16 *jp) { // 0xA49094
Crocomire_Func_43();
- return Crocomire_Instr_18(k, j);
+ return Crocomire_Instr_18(k, jp);
}
void Crocomire_Func_49(void) { // 0xA49099
@@ -1093,7 +1087,6 @@ void Crocomire_Func_59(void) { // 0xA493ED
void Crocomire_Func_60(void) { // 0xA4943D
int i;
- int16 v4;
int16 j;
Enemy_Crocomire *E = Get_Crocomire(cur_enemy_index);
@@ -1114,14 +1107,11 @@ void Crocomire_Func_60(void) { // 0xA4943D
break;
v6 = i;
uint16 v3 = *(uint16 *)((char *)&g_word_A49BC7 + i);
- R18_ = g_word_7E068E;
+ int n = g_word_7E068E;
do {
- v4 = *(uint16 *)IndirPtr(&R0_, v2);
- *(uint16 *)RomPtr_7E(v3) = v4;
- v3 += 2;
- v2 += 2;
- --R18_;
- } while ((R18_ & 0x8000u) == 0);
+ *(uint16 *)&g_ram[v3] = IndirReadWord(R0_, v2);
+ v3 += 2, v2 += 2;
+ } while (--n >= 0);
}
croco_word_7E069A = i + 2;
g_word_7E068A = i + 2;
@@ -1507,65 +1497,65 @@ void Crocomire_Func_73(void) { // 0xA49A38
}
}
-uint16 Crocomire_Instr_8(uint16 k, uint16 j) { // 0xA49A9B
- return Crocomire_Func_87(j, 0xFFE0);
+const uint16 *Crocomire_Instr_8(uint16 k, const uint16 *jp) { // 0xA49A9B
+ return Crocomire_Func_87(jp, 0xFFE0);
}
-uint16 Crocomire_Instr_6(uint16 k, uint16 j) { // 0xA49AA0
- return Crocomire_Func_87(j, 0);
+const uint16 *Crocomire_Instr_6(uint16 k, const uint16 *jp) { // 0xA49AA0
+ return Crocomire_Func_87(jp, 0);
}
-uint16 Crocomire_Instr_9(uint16 k, uint16 j) { // 0xA49AA5
- return Crocomire_Func_87(j, 0xFFF0);
+const uint16 *Crocomire_Instr_9(uint16 k, const uint16 *jp) { // 0xA49AA5
+ return Crocomire_Func_87(jp, 0xFFF0);
}
-uint16 Crocomire_Instr_5(uint16 k, uint16 j) { // 0xA49AAA
- return Crocomire_Func_87(j, 0x10);
+const uint16 *Crocomire_Instr_5(uint16 k, const uint16 *jp) { // 0xA49AAA
+ return Crocomire_Func_87(jp, 0x10);
}
-uint16 Crocomire_Instr_20(uint16 k, uint16 j) { // 0xA49AAF
- return Crocomire_Func_87(j, 0);
+const uint16 *Crocomire_Instr_20(uint16 k, const uint16 *jp) { // 0xA49AAF
+ return Crocomire_Func_87(jp, 0);
}
-uint16 Crocomire_Instr_21(uint16 k, uint16 j) { // 0xA49AB4
- return Crocomire_Func_87(j, 8u);
+const uint16 *Crocomire_Instr_21(uint16 k, const uint16 *jp) { // 0xA49AB4
+ return Crocomire_Func_87(jp, 8u);
}
-uint16 Crocomire_Instr_22(uint16 k, uint16 j) { // 0xA49AB9
- return Crocomire_Func_87(j, 0x10);
+const uint16 *Crocomire_Instr_22(uint16 k, const uint16 *jp) { // 0xA49AB9
+ return Crocomire_Func_87(jp, 0x10);
}
-uint16 Crocomire_Instr_23(uint16 k, uint16 j) { // 0xA49ABE
- return Crocomire_Func_87(j, 0x18);
+const uint16 *Crocomire_Instr_23(uint16 k, const uint16 *jp) { // 0xA49ABE
+ return Crocomire_Func_87(jp, 0x18);
}
-uint16 Crocomire_Instr_24(uint16 k, uint16 j) { // 0xA49AC3
- return Crocomire_Func_87(j, 0x20);
+const uint16 *Crocomire_Instr_24(uint16 k, const uint16 *jp) { // 0xA49AC3
+ return Crocomire_Func_87(jp, 0x20);
}
-uint16 Crocomire_Instr_10(uint16 k, uint16 j) { // 0xA49AC8
- return Crocomire_Func_87(j, 0x28);
+const uint16 *Crocomire_Instr_10(uint16 k, const uint16 *jp) { // 0xA49AC8
+ return Crocomire_Func_87(jp, 0x28);
}
-uint16 Crocomire_Instr_25(uint16 k, uint16 j) { // 0xA49ACD
- return Crocomire_Func_87(j, 0x30);
+const uint16 *Crocomire_Instr_25(uint16 k, const uint16 *jp) { // 0xA49ACD
+ return Crocomire_Func_87(jp, 0x30);
}
-uint16 Crocomire_Instr_26(uint16 k, uint16 j) { // 0xA49AD2
- return Crocomire_Func_87(j, 0x38);
+const uint16 *Crocomire_Instr_26(uint16 k, const uint16 *jp) { // 0xA49AD2
+ return Crocomire_Func_87(jp, 0x38);
}
-uint16 Crocomire_Instr_27(uint16 k, uint16 j) { // 0xA49AD7
- return Crocomire_Func_87(j, 0x40);
+const uint16 *Crocomire_Instr_27(uint16 k, const uint16 *jp) { // 0xA49AD7
+ return Crocomire_Func_87(jp, 0x40);
}
-uint16 Crocomire_Func_87(uint16 j, uint16 a) { // 0xA49ADA
+const uint16 *Crocomire_Func_87(const uint16 *jp, uint16 a) { // 0xA49ADA
R18_ = a;
Enemy_Crocomire *E = Get_Crocomire(0);
R18_ = a + E->base.x_pos + (random_number & 7);
R20_ = E->base.y_height + E->base.y_pos - 16;
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_DustCloudExplosion, 0x15);
- return j;
+ return jp;
}
static const SpawnHardcodedPlmArgs unk_A49B3E = { 0x30, 0x03, 0xb753 };
@@ -1772,4 +1762,4 @@ void CrocomireTongue_Init(void) { // 0xA4F67A
void CrocomireTongue_Main(void) { // 0xA4F6BB
;
-}
+}
\ No newline at end of file
diff --git a/src/sm_a5.c b/src/sm_a5.c
index 87319a8..66c793b 100644
--- a/src/sm_a5.c
+++ b/src/sm_a5.c
@@ -4,58 +4,27 @@
#include "variables.h"
#include "funcs.h"
#include "enemy_types.h"
-#define kDraygon_MorePalettes ((uint16*)RomPtr(0xa5a217))
-#define kDraygon_MorePalettes2 ((uint16*)RomPtr(0xa5a277))
-#define g_word_A5A297 ((uint16*)RomPtr(0xa5a297))
-#define g_word_A587DC ((uint16*)RomPtr(0xa587dc))
-#define g_word_A596AF ((uint16*)RomPtr(0xa596af))
-#define g_word_A596EF ((uint16*)RomPtr(0xa596ef))
-#define g_word_A5A19F ((uint16*)RomPtr(0xa5a19f))
-#define g_word_A5A1AF ((uint16*)RomPtr(0xa5a1af))
-#define g_word_A5A1C7 ((uint16*)RomPtr(0xa5a1c7))
-#define g_word_A5A1DF ((uint16*)RomPtr(0xa5a1df))
-#define g_byte_A5CE07 ((uint8*)RomPtr(0xa5ce07))
-#define g_word_A5E379 ((uint16*)RomPtr(0xa5e379))
-#define g_word_A5E3F9 ((uint16*)RomPtr(0xa5e3f9))
-#define g_word_A5E4F9 ((uint16*)RomPtr(0xa5e4f9))
-#define g_word_A5E5D9 ((uint16*)RomPtr(0xa5e5d9))
-#define kSporeSpawn_Palette ((uint16*)RomPtr(0xa5e359))
-uint16 EnemyInstr_Goto_A5(uint16 k, uint16 j) { // 0xA580ED
- return *(uint16 *)RomPtr_A5(j);
-}
+#define kDraygon_MorePalettes ((uint16*)RomFixedPtr(0xa5a217))
+#define kDraygon_MorePalettes2 ((uint16*)RomFixedPtr(0xa5a277))
+#define g_word_A5A297 ((uint16*)RomFixedPtr(0xa5a297))
+#define g_word_A587DC ((uint16*)RomFixedPtr(0xa587dc))
+#define g_word_A596AF ((uint16*)RomFixedPtr(0xa596af))
+#define g_word_A596EF ((uint16*)RomFixedPtr(0xa596ef))
+#define g_word_A5A19F ((uint16*)RomFixedPtr(0xa5a19f))
+#define g_word_A5A1AF ((uint16*)RomFixedPtr(0xa5a1af))
+#define g_word_A5A1C7 ((uint16*)RomFixedPtr(0xa5a1c7))
+#define g_word_A5A1DF ((uint16*)RomFixedPtr(0xa5a1df))
+#define g_byte_A5CE07 ((uint8*)RomFixedPtr(0xa5ce07))
+#define g_word_A5E379 ((uint16*)RomFixedPtr(0xa5e379))
+#define g_word_A5E3F9 ((uint16*)RomFixedPtr(0xa5e3f9))
+#define g_word_A5E4F9 ((uint16*)RomFixedPtr(0xa5e4f9))
+#define g_word_A5E5D9 ((uint16*)RomFixedPtr(0xa5e5d9))
+#define kSporeSpawn_Palette ((uint16*)RomFixedPtr(0xa5e359))
-uint16 EnemyInstr_DecTimerAndGoto2_A5(uint16 k, uint16 j) { // 0xA58110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_A5(k, j);
-}
-uint16 EnemyInstr_SetTimer_A5(uint16 k, uint16 j) { // 0xA58123
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-uint16 EnemyInstr_Sleep_A5(uint16 k, uint16 j) { // 0xA5812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
-uint16 EnemyInstr_StopScript_A5(uint16 k, uint16 j) { // 0xA5807C
- EnemyData *v2 = gEnemyData(k);
- v2->properties |= kEnemyProps_Deleted;
- return 0;
-}
-uint16 EnemyInstr_WaitNframes_A5(uint16 k, uint16 j) { // 0xA5813A
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- EnemyData *v3 = gEnemyData(k);
- v3->instruction_timer = v2;
- v3->current_instruction = j + 2;
- return 0;
-}
void Enemy_GrappleReact_NoInteract_A5(void) { // 0xA58000
SwitchEnemyAiToMainAi();
@@ -1041,37 +1010,24 @@ void Draygon_Func_40(uint16 k) { // 0xA594A9
}
}
-uint16 Draygon_Instr_1(uint16 k, uint16 j) { // 0xA594DD
- uint16 *v2 = (uint16 *)RomPtr_A5(j);
- Get_Draygon(0)->base.current_instruction = *v2;
- Get_Draygon(0x40u)->base.current_instruction = v2[1];
- Get_Draygon(0x80)->base.current_instruction = v2[2];
- Enemy_Draygon *E = Get_Draygon(0xC0u);
- E->base.current_instruction = v2[3];
+const uint16 *Draygon_Instr_1(uint16 k, const uint16 *jp) { // 0xA594DD
+ Get_Draygon(0)->base.current_instruction = jp[0];
+ Get_Draygon(0x40)->base.current_instruction = jp[1];
+ Get_Draygon(0x80)->base.current_instruction = jp[2];
+ Get_Draygon(0xC0)->base.current_instruction = jp[3];
Get_Draygon(0)->base.instruction_timer = 1;
- Get_Draygon(0x40u)->base.instruction_timer = 1;
+ Get_Draygon(0x40)->base.instruction_timer = 1;
Get_Draygon(0x80)->base.instruction_timer = 1;
- E->base.instruction_timer = 1;
- return j + 8;
+ Get_Draygon(0xC0)->base.instruction_timer = 1;
+ return jp + 4;
}
void Draygon_Hurt(void) { // 0xA5954D
- int16 v2;
- int16 v7;
- int16 v9;
-
uint16 v0 = addr_kDraygon_MorePalettes2;
if ((Get_Draygon(cur_enemy_index)->base.flash_timer & 2) != 0)
v0 = addr_word_A5A297;
- uint16 v1 = addr_kDraygon_BigSprmap_C08F__plus__17;
- remaining_enemy_spritemap_entries = 16;
- do {
- v2 = *(uint16 *)RomPtr_A5(v0);
- *(uint16 *)RomPtr_7E(v1) = v2;
- v1 += 2;
- v0 += 2;
- --remaining_enemy_spritemap_entries;
- } while (remaining_enemy_spritemap_entries);
+ memcpy(g_ram + addr_kDraygon_BigSprmap_C08F__plus__17, RomPtr_A5(v0), 32);
+
if ((Get_Draygon(cur_enemy_index)->base.flash_timer & 2) == 0) {
uint16 v3 = 4 * Get_Draygon(0)->draygon_var_0E;
for (int i = 0; i != 8; i += 2) {
@@ -1082,19 +1038,12 @@ void Draygon_Hurt(void) { // 0xA5954D
uint16 v5 = addr_kDraygon_Palette;
if ((Get_Draygon(cur_enemy_index)->base.flash_timer & 2) != 0)
v5 = addr_word_A5A297;
- uint16 v6 = addr_kDraygon_BigSprmap_C11B__plus__197;
- remaining_enemy_spritemap_entries = 16;
- do {
- v7 = *(uint16 *)RomPtr_A5(v5);
- *(uint16 *)RomPtr_7E(v6) = v7;
- v6 += 2;
- v5 += 2;
- --remaining_enemy_spritemap_entries;
- } while (remaining_enemy_spritemap_entries);
+ memcpy(g_ram + addr_kDraygon_BigSprmap_C11B__plus__197, RomPtr_A5(v5), 32);
+
if ((samus_grapple_flags & 1) != 0) {
Enemy_Draygon *E = Get_Draygon(0);
if ((E->base.frame_counter & 7) == 0) {
- v9 = E->base.health - 256;
+ int16 v9 = E->base.health - 256;
if (v9 < 0)
v9 = 0;
E->base.health = v9;
@@ -1173,42 +1122,41 @@ void Draygon_Func_41(void) { // 0xA59701
}
}
-uint16 Draygon_Instr_13(uint16 k, uint16 j) { // 0xA59736
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- Get_Draygon(k)->draygon_var_A = v2;
- return j + 2;
+const uint16 *Draygon_Instr_13(uint16 k, const uint16 *jp) { // 0xA59736
+ Get_Draygon(k)->draygon_var_A = jp[0];
+ return jp + 1;
}
-uint16 Draygon_Instr_8(uint16 k, uint16 j) { // 0xA5973F
+const uint16 *Draygon_Instr_8(uint16 k, const uint16 *jp) { // 0xA5973F
Draygon_Func_47();
R22_ = 21;
R24_ = 0;
CreateSpriteAtPos();
- return j;
+ return jp;
}
-uint16 Draygon_Instr_7(uint16 k, uint16 j) { // 0xA59752
+const uint16 *Draygon_Instr_7(uint16 k, const uint16 *jp) { // 0xA59752
Draygon_Func_47();
R22_ = 3;
R24_ = 0;
CreateSpriteAtPos();
- return j;
+ return jp;
}
-uint16 Draygon_Instr_6(uint16 k, uint16 j) { // 0xA59765
+const uint16 *Draygon_Instr_6(uint16 k, const uint16 *jp) { // 0xA59765
Draygon_Func_47();
R22_ = 29;
R24_ = 0;
CreateSpriteAtPos();
- return j;
+ return jp;
}
-uint16 Draygon_Instr_9(uint16 k, uint16 j) { // 0xA59778
+const uint16 *Draygon_Instr_9(uint16 k, const uint16 *jp) { // 0xA59778
Draygon_Func_47();
R22_ = 24;
R24_ = 0;
CreateSpriteAtPos();
- return j;
+ return jp;
}
void Draygon_Func_47(void) { // 0xA5978B
@@ -1220,12 +1168,12 @@ void Draygon_Func_47(void) { // 0xA5978B
R20_ += E->base.y_pos;
}
-uint16 Draygon_Instr_2(uint16 k, uint16 j) { // 0xA59895
+const uint16 *Draygon_Instr_2(uint16 k, const uint16 *jp) { // 0xA59895
room_loading_irq_handler = 12;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_11(uint16 k, uint16 j) { // 0xA598D3
+const uint16 *Draygon_Instr_11(uint16 k, const uint16 *jp) { // 0xA598D3
Enemy_Draygon *E2 = Get_Draygon(0x80);
E2->base.instruction_timer = 1;
E2->base.current_instruction = addr_kDraygon_Ilist_97B9;
@@ -1233,20 +1181,20 @@ uint16 Draygon_Instr_11(uint16 k, uint16 j) { // 0xA598D3
Enemy_Draygon *E3 = Get_Draygon(0xC0u);
E3->base.instruction_timer = 1;
E3->base.current_instruction = addr_kDraygon_Ilist_97B9;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_5(uint16 k, uint16 j) { // 0xA598EF
+const uint16 *Draygon_Instr_5(uint16 k, const uint16 *jp) { // 0xA598EF
Enemy_Draygon *E = Get_Draygon(0);
E->base.properties |= kEnemyProps_Tangible;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_15(uint16 k, uint16 j) { // 0xA59B9A
+const uint16 *Draygon_Instr_15(uint16 k, const uint16 *jp) { // 0xA59B9A
Enemy_Draygon *E = Get_Draygon(0);
E->draygon_var_0F = 24;
- uint8 *v3 = RomPtr_A0(E->base.enemy_ptr);
- uint16 v4 = SuitDamageDivision(*((uint16 *)v3 + 3));
+ const uint8 *v3 = RomPtr_A0(E->base.enemy_ptr);
+ uint16 v4 = SuitDamageDivision(GET_WORD(v3 + 6));
Samus_DealDamage(v4);
earthquake_timer = 32;
earthquake_type = 7;
@@ -1255,56 +1203,52 @@ uint16 Draygon_Instr_15(uint16 k, uint16 j) { // 0xA59B9A
R22_ = 21;
R24_ = 0;
CreateSpriteAtPos();
- return j;
+ return jp;
}
-uint16 Draygon_Instr_17(uint16 k, uint16 j) { // 0xA59C8A
+const uint16 *Draygon_Instr_17(uint16 k, const uint16 *jp) { // 0xA59C8A
room_loading_irq_handler = 12;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_14(uint16 k, uint16 j) { // 0xA59E0A
- uint8 *v2 = RomPtr_A5(j);
+const uint16 *Draygon_Instr_14(uint16 k, const uint16 *jp) { // 0xA59E0A
Enemy_Draygon *E = Get_Draygon(0);
- E->draygon_var_5E = *(uint16 *)v2;
- E->draygon_var_5F = *((uint16 *)v2 + 1);
- return j + 4;
+ E->draygon_var_5E = jp[0];
+ E->draygon_var_5F = jp[1];
+ return jp + 2;
}
-uint16 Draygon_Instr_16(uint16 k, uint16 j) { // 0xA59F57
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- Get_Draygon(0)->draygon_var_A = v2;
- return j + 2;
+const uint16 *Draygon_Instr_16(uint16 k, const uint16 *jp) { // 0xA59F57
+ Get_Draygon(0)->draygon_var_A = jp[0];
+ return jp + 1;
}
-uint16 Draygon_Instr_10(uint16 k, uint16 j) { // 0xA59F60
- uint16 *v2 = (uint16 *)RomPtr_A5(j);
- QueueSfx2_Max6(*v2);
- return j + 2;
+const uint16 *Draygon_Instr_10(uint16 k, const uint16 *jp) { // 0xA59F60
+ QueueSfx2_Max6(jp[0]);
+ return jp + 1;
}
-uint16 Draygon_Instr_4(uint16 k, uint16 j) { // 0xA59F6E
- uint16 *v2 = (uint16 *)RomPtr_A5(j);
- QueueSfx3_Max6(*v2);
- return j + 2;
+const uint16 *Draygon_Instr_4(uint16 k, const uint16 *jp) { // 0xA59F6E
+ QueueSfx3_Max6(jp[0]);
+ return jp + 1;
}
-uint16 Draygon_Instr_12(uint16 k, uint16 j) { // 0xA59F7C
+const uint16 *Draygon_Instr_12(uint16 k, const uint16 *jp) { // 0xA59F7C
Enemy_Draygon *E = Get_Draygon(0);
R18_ = E->base.x_pos - 28;
R20_ = E->base.y_pos - 16;
enemy_projectile_unk1995 = (NextRandom() & 0x3F) + 128;
SpawnEnemyProjectileWithGfx(2u, cur_enemy_index, addr_stru_868E50);
- return j;
+ return jp;
}
-uint16 Draygon_Instr_18(uint16 k, uint16 j) { // 0xA59FAE
+const uint16 *Draygon_Instr_18(uint16 k, const uint16 *jp) { // 0xA59FAE
Enemy_Draygon *E = Get_Draygon(0);
R18_ = E->base.x_pos + 24;
R20_ = E->base.y_pos - 16;
enemy_projectile_unk1995 = (NextRandom() & 0x3F) + 192;
SpawnEnemyProjectileWithGfx(2u, cur_enemy_index, addr_stru_868E50);
- return j;
+ return jp;
}
void Draygon_Func_42(void) { // 0xA59FE0
@@ -1422,10 +1366,9 @@ void DraygonsEye_Init(void) { // 0xA5C46B
E->draygon_var_A = FUNC16(nullsub_169_A5);
}
-uint16 Draygon_Instr_3(uint16 k, uint16 j) { // 0xA5C47B
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- Get_Draygon(0x40u)->draygon_var_A = v2;
- return j + 2;
+const uint16 *Draygon_Instr_3(uint16 k, const uint16 *jp) { // 0xA5C47B
+ Get_Draygon(0x40u)->draygon_var_A = jp[0];
+ return jp + 1;
}
void DraygonsEye_Main(void) { // 0xA5C486
@@ -1515,32 +1458,31 @@ void DraygonsArms_Init(void) { // 0xA5C5AD
v0->layer = 2;
}
-uint16 Draygon_Instr_25(uint16 k, uint16 j) { // 0xA5E75F
+const uint16 *Draygon_Instr_25(uint16 k, const uint16 *jp) { // 0xA5E75F
Enemy_Draygon *E = Get_Draygon(0);
if (sign16(E->draygon_var_0B - 40))
E->draygon_var_0B += 8;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_24(uint16 k, uint16 j) { // 0xA5E771
+const uint16 *Draygon_Instr_24(uint16 k, const uint16 *jp) { // 0xA5E771
Get_Draygon(0)->draygon_var_2F = 0;
- return j;
+ return jp;
}
void Draygon_Func_50(uint16 j) { // 0xA5E811
- uint8 *v1 = RomPtr_A5(j);
+ const uint8 *v1 = RomPtr_A5(j);
Enemy_Draygon *E = Get_Draygon(0);
- E->draygon_var_0B = *(uint16 *)v1;
- E->draygon_var_0C = *((uint16 *)v1 + 1);
- E->draygon_var_0A = *((uint16 *)v1 + 2);
+ E->draygon_var_0B = GET_WORD(v1);
+ E->draygon_var_0C = GET_WORD(v1 + 2);
+ E->draygon_var_0A = GET_WORD(v1 + 4);
}
-uint16 Draygon_Instr_21(uint16 k, uint16 j) { // 0xA5E82D
- uint8 *v2 = RomPtr_A5(j);
+const uint16 *Draygon_Instr_21(uint16 k, const uint16 *jp) { // 0xA5E82D
Enemy_Draygon *E = Get_Draygon(0);
- E->draygon_var_0B = *(uint16 *)v2;
- E->draygon_var_0C = *((uint16 *)v2 + 1);
- return j + 4;
+ E->draygon_var_0B = jp[0];
+ E->draygon_var_0C = jp[1];
+ return jp + 2;
}
void Draygon_Func_51(uint16 j) { // 0xA5E840
@@ -1559,95 +1501,57 @@ uint16 Draygon_Instr_53(uint16 k, uint16 j) { // 0xA5E854
return j + 2;
}
-uint16 Draygon_Instr_54(uint16 k, uint16 j) { // 0xA5E863
- Enemy_Draygon *E = Get_Draygon(0);
- E->draygon_var_0C += *(uint16 *)RomPtr_A5(j);
- return j + 2;
+const uint16 *Draygon_Instr_22(uint16 k, const uint16 *jp) { // 0xA5E872
+ kraid_unk9000 = jp[0];
+ return jp + 1;
}
-uint16 Draygon_Instr_22(uint16 k, uint16 j) { // 0xA5E872
- kraid_unk9000 = *(uint16 *)RomPtr_A5(j);
- return j + 2;
-}
-
-uint16 Draygon_Instr_27(uint16 k, uint16 j) { // 0xA5E87C
+const uint16 *Draygon_Instr_27(uint16 k, const uint16 *jp) { // 0xA5E87C
Enemy_Draygon *E = Get_Draygon(0);
E->base.x_pos = 128;
E->base.y_pos = 624;
E->base.properties = E->base.properties & 0x5BFF | 0xA000;
- return j;
+ return jp;
}
-uint16 Draygon_Instr_23(uint16 k, uint16 j) { // 0xA5E895
- uint16 *v2 = (uint16 *)RomPtr_A5(j);
- QueueSfx2_Max6(*v2);
- return j + 2;
+const uint16 *Draygon_Instr_23(uint16 k, const uint16 *jp) { // 0xA5E895
+ QueueSfx2_Max6(jp[0]);
+ return jp + 1;
}
-uint16 Draygon_Instr_55(uint16 k, uint16 j) { // 0xA5E8A3
- uint16 *v2 = (uint16 *)RomPtr_A5(j);
- QueueSfx3_Max6(*v2);
- return j + 2;
-}
-
-uint16 Draygon_Instr_30(uint16 k, uint16 j) { // 0xA5E8B1
+const uint16 *Draygon_Instr_30(uint16 k, const uint16 *jp) { // 0xA5E8B1
Enemy_ItemDrop_SporeSpawn(k);
- return j;
+ return jp;
}
-uint16 Draygon_Instr_20(uint16 k, uint16 j) { // 0xA5E8BA
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- Get_Draygon(cur_enemy_index)->draygon_var_A = v2;
- return j + 2;
+const uint16 *Draygon_Instr_20(uint16 k, const uint16 *jp) { // 0xA5E8BA
+ Get_Draygon(cur_enemy_index)->draygon_var_A = jp[0];
+ return jp + 1;
}
-uint16 Draygon_Instr_29(uint16 k, uint16 j) { // 0xA5E8CA
- uint16 m;
- uint16 n;
-
- R18_ = j;
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- for (int i = 0; i != 32; i += 2) {
- palette_buffer[(i >> 1) + 144] = g_word_A5E3F9[v2 >> 1];
- v2 += 2;
- }
- uint16 v4 = *(uint16 *)RomPtr_A5(R18_);
- for (m = 0; m != 32; m += 2) {
- palette_buffer[(m >> 1) + 64] = g_word_A5E4F9[v4 >> 1];
- v4 += 2;
- }
- uint16 v6 = *(uint16 *)RomPtr_A5(R18_);
- for (n = 0; n != 32; n += 2) {
- palette_buffer[(n >> 1) + 112] = g_word_A5E5D9[v6 >> 1];
- v6 += 2;
- }
- return j + 2;
+const uint16 *Draygon_Instr_29(uint16 k, const uint16 *jp) { // 0xA5E8CA
+ uint16 v2 = jp[0];
+ for (int i = 0; i != 32; i += 2)
+ palette_buffer[(i >> 1) + 144] = g_word_A5E3F9[(v2 + i) >> 1];
+ for (int i = 0; i != 32; i += 2)
+ palette_buffer[(i >> 1) + 64] = g_word_A5E4F9[(v2 + i) >> 1];
+ for (int i = 0; i != 32; i += 2)
+ palette_buffer[(i >> 1) + 112] = g_word_A5E5D9[(v2 + i) >> 1];
+ return jp + 1;
}
-uint16 Draygon_Instr_19(uint16 k, uint16 j) { // 0xA5E91C
- uint16 m;
- uint16 n;
-
- R18_ = j;
- uint16 v2 = *(uint16 *)RomPtr_A5(j);
- for (int i = 0; i != 32; i += 2) {
- target_palettes[(i >> 1) + 144] = g_word_A5E3F9[v2 >> 1];
- v2 += 2;
- }
- uint16 v4 = *(uint16 *)RomPtr_A5(R18_);
- for (m = 0; m != 32; m += 2) {
- target_palettes[(m >> 1) + 64] = g_word_A5E4F9[v4 >> 1];
- v4 += 2;
- }
- uint16 v6 = *(uint16 *)RomPtr_A5(R18_);
- for (n = 0; n != 32; n += 2) {
- target_palettes[(n >> 1) + 112] = g_word_A5E5D9[v6 >> 1];
- v6 += 2;
- }
- return j + 2;
+const uint16 *Draygon_Instr_19(uint16 k, const uint16 *jp) { // 0xA5E91C
+ uint16 v2 = jp[0];
+ for (int i = 0; i != 32; i += 2)
+ target_palettes[(i >> 1) + 144] = g_word_A5E3F9[(v2 + i) >> 1];
+ for (int i = 0; i != 32; i += 2)
+ target_palettes[(i >> 1) + 64] = g_word_A5E4F9[(v2 + i) >> 1];
+ for (int i = 0; i != 32; i += 2)
+ target_palettes[(i >> 1) + 112] = g_word_A5E5D9[(v2 + i) >> 1];
+ return jp + 1;
}
-uint16 Draygon_Instr_28(uint16 k, uint16 j) { // 0xA5E96E
+const uint16 *Draygon_Instr_28(uint16 k, const uint16 *jp) { // 0xA5E96E
NextRandom();
R18_ = (random_number & 0x7F) - 64;
Enemy_Draygon *E = Get_Draygon(0);
@@ -1656,10 +1560,10 @@ uint16 Draygon_Instr_28(uint16 k, uint16 j) { // 0xA5E96E
R20_ += E->base.y_pos;
SpawnEnemyProjectileWithRoomGfx(0xE509, 0x15);
QueueSfx2_Max6(0x29u);
- return j;
+ return jp;
}
-uint16 Draygon_Instr_26(uint16 k, uint16 j) { // 0xA5E9B1
+const uint16 *Draygon_Instr_26(uint16 k, const uint16 *jp) { // 0xA5E9B1
NextRandom();
R18_ = (random_number & 0x7F) - 64;
Enemy_Draygon *E = Get_Draygon(0);
@@ -1670,7 +1574,7 @@ uint16 Draygon_Instr_26(uint16 k, uint16 j) { // 0xA5E9B1
R24_ = 0;
CreateSpriteAtPos();
QueueSfx2_Max6(0x25u);
- return j;
+ return jp;
}
void sub_A5E9F5(void) { // 0xA5E9F5
@@ -1930,4 +1834,4 @@ void SporeSpawn_Func_7(uint16 a) { // 0xA5EE4A
palette_buffer[(i >> 1) + 144] = g_word_A5E379[v1 >> 1];
v1 += 2;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_a6.c b/src/sm_a6.c
index 6b767b6..39945f1 100644
--- a/src/sm_a6.c
+++ b/src/sm_a6.c
@@ -5,6 +5,66 @@
#include "funcs.h"
#include "enemy_types.h"
+
+#define g_byte_A6E269 ((uint8*)RomFixedPtr(0xa6e269))
+#define g_word_A6E2AA ((uint16*)RomFixedPtr(0xa6e2aa))
+#define g_word_A6E30A ((uint16*)RomFixedPtr(0xa6e30a))
+#define g_word_A6E46A ((uint16*)RomFixedPtr(0xa6e46a))
+#define g_off_A6A4EB ((uint16*)RomFixedPtr(0xa6a4eb))
+#define g_off_A6A743 ((uint16*)RomFixedPtr(0xa6a743))
+#define g_word_A6AE4D ((uint16*)RomFixedPtr(0xa6ae4d))
+#define g_word_A6AF2F ((uint16*)RomFixedPtr(0xa6af2f))
+#define g_word_A6B00F ((uint16*)RomFixedPtr(0xa6b00f))
+#define g_off_A6ACDA ((uint16*)RomFixedPtr(0xa6acda))
+#define g_off_A6AD45 ((uint16*)RomFixedPtr(0xa6ad45))
+#define g_word_A6B60D ((uint16*)RomFixedPtr(0xa6b60d))
+#define g_word_A6B63B ((uint16*)RomFixedPtr(0xa6b63b))
+#define g_word_A6B6C8 ((uint16*)RomFixedPtr(0xa6b6c8))
+#define g_word_A6B9D5 ((uint16*)RomFixedPtr(0xa6b9d5))
+#define g_word_A6B9DB ((uint16*)RomFixedPtr(0xa6b9db))
+#define g_off_A6B965 ((uint16*)RomFixedPtr(0xa6b965))
+#define g_off_A6B96D ((uint16*)RomFixedPtr(0xa6b96d))
+#define g_word_A6B9D5 ((uint16*)RomFixedPtr(0xa6b9d5))
+#define g_word_A6B9DB ((uint16*)RomFixedPtr(0xa6b9db))
+#define g_word_A6B94D ((uint16*)RomFixedPtr(0xa6b94d))
+#define g_word_A6B959 ((uint16*)RomFixedPtr(0xa6b959))
+#define g_word_A6BB48 ((uint16*)RomFixedPtr(0xa6bb48))
+#define g_word_A6BB4E ((uint16*)RomFixedPtr(0xa6bb4e))
+#define g_word_A6C1DF ((uint16*)RomFixedPtr(0xa6c1df))
+#define g_off_A6C7BA ((uint16*)RomFixedPtr(0xa6c7ba))
+#define g_word_A6C804 ((uint16*)RomFixedPtr(0xa6c804))
+#define g_off_A6C808 ((uint16*)RomFixedPtr(0xa6c808))
+#define g_word_A6C836 ((uint16*)RomFixedPtr(0xa6c836))
+#define g_off_A6C83A ((uint16*)RomFixedPtr(0xa6c83a))
+#define g_word_A6C868 ((uint16*)RomFixedPtr(0xa6c868))
+#define g_off_A6C86C ((uint16*)RomFixedPtr(0xa6c86c))
+#define g_word_A6C89A ((uint16*)RomFixedPtr(0xa6c89a))
+#define g_off_A6C89E ((uint16*)RomFixedPtr(0xa6c89e))
+#define g_word_A6C8CC ((uint16*)RomFixedPtr(0xa6c8cc))
+#define g_off_A6C8D0 ((uint16*)RomFixedPtr(0xa6c8d0))
+#define g_word_A6C6CE ((uint16*)RomFixedPtr(0xa6c6ce))
+#define g_off_A6C6E6 ((uint16*)RomFixedPtr(0xa6c6e6))
+#define g_word_A6CC12 ((uint16*)RomFixedPtr(0xa6cc12))
+#define g_word_A6CC18 ((uint16*)RomFixedPtr(0xa6cc18))
+#define g_off_A6DB02 ((uint16*)RomFixedPtr(0xa6db02))
+#define kRidley_Ilist_DCBA ((uint16*)RomFixedPtr(0xa6dcba))
+#define g_off_A6EFF5 ((uint16*)RomFixedPtr(0xa6eff5))
+#define g_off_A6F001 ((uint16*)RomFixedPtr(0xa6f001))
+#define g_off_A6F72B ((uint16*)RomFixedPtr(0xa6f72b))
+#define g_off_A6F52C ((uint16*)RomFixedPtr(0xa6f52c))
+#define g_word_A6F840 ((uint16*)RomFixedPtr(0xa6f840))
+#define g_off_A6F900 ((uint16*)RomFixedPtr(0xa6f900))
+#define g_word_A6FC03 ((uint16*)RomFixedPtr(0xa6fc03))
+#define g_word_A6FC0B ((uint16*)RomFixedPtr(0xa6fc0b))
+#define g_off_A6FC13 ((uint16*)RomFixedPtr(0xa6fc13))
+#define g_word_A6FC1B ((uint16*)RomFixedPtr(0xa6fc1b))
+#define g_word_A6FC23 ((uint16*)RomFixedPtr(0xa6fc23))
+#define g_word_A6FC2B ((uint16*)RomFixedPtr(0xa6fc2b))
+#define g_off_A6FD4A ((uint16*)RomFixedPtr(0xa6fd4a))
+#define g_off_A6FD54 ((uint16*)RomFixedPtr(0xa6fd54))
+
+
+
int BabyMetroid_DBCB_DoubleRetEx(uint16 a);
uint8 Ridley_Func_40_Carry();
uint8 Ridley_Func_40_Sign();
@@ -59,75 +119,14 @@ static const uint16 g_word_A695FE[4] = { 0xffe8, 0xfff4, 0x18, 0xc };
static const uint16 g_word_A69606[4] = { 0x180, 0x100, 0x100, 0x180 };
static const uint16 g_word_A69A48[8] = { 0xfe00, 0xfb00, 0xfc00, 0xfb00, 0x200, 0xfb00, 0x400, 0xfb00 };
-#define g_byte_A6E269 ((uint8*)RomPtr(0xa6e269))
-#define g_word_A6E2AA ((uint16*)RomPtr(0xa6e2aa))
-#define g_word_A6E30A ((uint16*)RomPtr(0xa6e30a))
-#define g_word_A6E46A ((uint16*)RomPtr(0xa6e46a))
-#define g_off_A6A4EB ((uint16*)RomPtr(0xa6a4eb))
-#define g_off_A6A743 ((uint16*)RomPtr(0xa6a743))
-#define g_word_A6AE4D ((uint16*)RomPtr(0xa6ae4d))
-#define g_word_A6AF2F ((uint16*)RomPtr(0xa6af2f))
-#define g_word_A6B00F ((uint16*)RomPtr(0xa6b00f))
-#define g_off_A6ACDA ((uint16*)RomPtr(0xa6acda))
-#define g_off_A6AD45 ((uint16*)RomPtr(0xa6ad45))
static const uint16 g_word_A6B288 = 8;
-#define g_word_A6B60D ((uint16*)RomPtr(0xa6b60d))
-#define g_word_A6B63B ((uint16*)RomPtr(0xa6b63b))
-#define g_word_A6B6C8 ((uint16*)RomPtr(0xa6b6c8))
-#define g_word_A6B9D5 ((uint16*)RomPtr(0xa6b9d5))
-#define g_word_A6B9DB ((uint16*)RomPtr(0xa6b9db))
-#define g_off_A6B965 ((uint16*)RomPtr(0xa6b965))
-#define g_off_A6B96D ((uint16*)RomPtr(0xa6b96d))
-#define g_word_A6B9D5 ((uint16*)RomPtr(0xa6b9d5))
-#define g_word_A6B9DB ((uint16*)RomPtr(0xa6b9db))
-#define g_word_A6B94D ((uint16*)RomPtr(0xa6b94d))
-#define g_word_A6B959 ((uint16*)RomPtr(0xa6b959))
-#define g_word_A6BB48 ((uint16*)RomPtr(0xa6bb48))
-#define g_word_A6BB4E ((uint16*)RomPtr(0xa6bb4e))
static const uint16 g_word_A6BBEB[3] = { 0x40, 0, 0xd0 };
static const uint16 g_word_A6BC62[3] = { 0xb0, 0, 0x50 };
-#define g_word_A6C1DF ((uint16*)RomPtr(0xa6c1df))
static const int16 g_word_A6C66E[20] = { -24, -24, -20, 20, 16, -30, 30, -3, 14, -13, -2, 18, -2, -32, -31, 8, -4, -10, 19, 19 };
-#define g_off_A6C7BA ((uint16*)RomPtr(0xa6c7ba))
-#define g_word_A6C804 ((uint16*)RomPtr(0xa6c804))
-#define g_off_A6C808 ((uint16*)RomPtr(0xa6c808))
-#define g_word_A6C836 ((uint16*)RomPtr(0xa6c836))
-#define g_off_A6C83A ((uint16*)RomPtr(0xa6c83a))
-#define g_word_A6C868 ((uint16*)RomPtr(0xa6c868))
-#define g_off_A6C86C ((uint16*)RomPtr(0xa6c86c))
-#define g_word_A6C89A ((uint16*)RomPtr(0xa6c89a))
-#define g_off_A6C89E ((uint16*)RomPtr(0xa6c89e))
-#define g_word_A6C8CC ((uint16*)RomPtr(0xa6c8cc))
-#define g_off_A6C8D0 ((uint16*)RomPtr(0xa6c8d0))
-#define g_word_A6C6CE ((uint16*)RomPtr(0xa6c6ce))
-#define g_off_A6C6E6 ((uint16*)RomPtr(0xa6c6e6))
-#define g_word_A6CC12 ((uint16*)RomPtr(0xa6cc12))
-#define g_word_A6CC18 ((uint16*)RomPtr(0xa6cc18))
static const int16 g_word_A6CF54[3] = { 0x20, 0, -0x20 };
static const uint8 g_byte_A6D61F[16] = { 0x10, 0xf, 0xe, 0xd, 0xc, 0xb, 0xa, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
static const uint8 g_byte_A6D712[16] = { 0x10, 0xf, 0xe, 0xd, 0xc, 0xb, 0xa, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
static const uint16 g_word_A6D9ED[8] = { 0xc, 0xe, 0x10, 0x12, 0x1c, 0x20, 0x28, 0x30 };
-#define g_off_A6DB02 ((uint16*)RomPtr(0xa6db02))
-#define kRidley_Ilist_DCBA ((uint16*)RomPtr(0xa6dcba))
-#define g_off_A6EFF5 ((uint16*)RomPtr(0xa6eff5))
-#define g_off_A6F001 ((uint16*)RomPtr(0xa6f001))
-#define g_off_A6F72B ((uint16*)RomPtr(0xa6f72b))
-#define g_off_A6F52C ((uint16*)RomPtr(0xa6f52c))
-#define g_word_A6F840 ((uint16*)RomPtr(0xa6f840))
-#define g_off_A6F900 ((uint16*)RomPtr(0xa6f900))
-#define g_word_A6FC03 ((uint16*)RomPtr(0xa6fc03))
-#define g_word_A6FC0B ((uint16*)RomPtr(0xa6fc0b))
-#define g_off_A6FC13 ((uint16*)RomPtr(0xa6fc13))
-#define g_word_A6FC1B ((uint16*)RomPtr(0xa6fc1b))
-#define g_word_A6FC23 ((uint16*)RomPtr(0xa6fc23))
-#define g_word_A6FC2B ((uint16*)RomPtr(0xa6fc2b))
-#define g_off_A6FD4A ((uint16*)RomPtr(0xa6fd4a))
-#define g_off_A6FD54 ((uint16*)RomPtr(0xa6fd54))
-
-uint16 EnemyInstr_Sleep_A6(uint16 k, uint16 j) { // 0xA6812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
void Enemy_GrappleReact_NoInteract_A6(void) { // 0xA68000
SwitchEnemyAiToMainAi();
@@ -149,11 +148,6 @@ void Enemy_NormalFrozenAI_A6(void) { // 0xA68041
NormalEnemyFrozenAI();
}
-uint16 EnemyInstr_Goto_A6(uint16 k, uint16 j) { // 0xA680ED
- return *(uint16 *)RomPtr_A6(j);
-}
-
-
void Boulder_Init(void) { // 0xA686F5
int16 boulder_parameter_2_high;
@@ -496,189 +490,189 @@ uint16 SpikeyPlatform_Func_5(uint16 k) { // 0xA68CA1
return 0;
}
-uint16 FireGeyser_Instr_1(uint16 k, uint16 j) { // 0xA68DAF
+const uint16 *FireGeyser_Instr_1(uint16 k, const uint16 *jp) { // 0xA68DAF
QueueSfx2_Max6(0x61u);
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_2(uint16 k, uint16 j) { // 0xA68E13
+const uint16 *FireGeyser_Instr_2(uint16 k, const uint16 *jp) { // 0xA68E13
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DBB;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DE7;
E->base.x_width = 8;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_3(uint16 k, uint16 j) { // 0xA68E2D
+const uint16 *FireGeyser_Instr_3(uint16 k, const uint16 *jp) { // 0xA68E2D
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DBD;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DE9;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_4(uint16 k, uint16 j) { // 0xA68E41
+const uint16 *FireGeyser_Instr_4(uint16 k, const uint16 *jp) { // 0xA68E41
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DBF;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DEB;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_5(uint16 k, uint16 j) { // 0xA68E55
+const uint16 *FireGeyser_Instr_5(uint16 k, const uint16 *jp) { // 0xA68E55
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DC1;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DED;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_6(uint16 k, uint16 j) { // 0xA68E69
+const uint16 *FireGeyser_Instr_6(uint16 k, const uint16 *jp) { // 0xA68E69
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DC3;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DEF;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_7(uint16 k, uint16 j) { // 0xA68E7D
+const uint16 *FireGeyser_Instr_7(uint16 k, const uint16 *jp) { // 0xA68E7D
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DC5;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DF1;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_8(uint16 k, uint16 j) { // 0xA68E91
+const uint16 *FireGeyser_Instr_8(uint16 k, const uint16 *jp) { // 0xA68E91
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DC7;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DF3;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_9(uint16 k, uint16 j) { // 0xA68EA5
+const uint16 *FireGeyser_Instr_9(uint16 k, const uint16 *jp) { // 0xA68EA5
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DC9;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DF5;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_10(uint16 k, uint16 j) { // 0xA68EB9
+const uint16 *FireGeyser_Instr_10(uint16 k, const uint16 *jp) { // 0xA68EB9
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DCB;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DF7;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_11(uint16 k, uint16 j) { // 0xA68ECD
+const uint16 *FireGeyser_Instr_11(uint16 k, const uint16 *jp) { // 0xA68ECD
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DCD;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DF9;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_12(uint16 k, uint16 j) { // 0xA68EE1
+const uint16 *FireGeyser_Instr_12(uint16 k, const uint16 *jp) { // 0xA68EE1
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DCF;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DFB;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_13(uint16 k, uint16 j) { // 0xA68EF5
+const uint16 *FireGeyser_Instr_13(uint16 k, const uint16 *jp) { // 0xA68EF5
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DD1;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DFD;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_14(uint16 k, uint16 j) { // 0xA68F09
+const uint16 *FireGeyser_Instr_14(uint16 k, const uint16 *jp) { // 0xA68F09
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DD3;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68DFF;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_15(uint16 k, uint16 j) { // 0xA68F1D
+const uint16 *FireGeyser_Instr_15(uint16 k, const uint16 *jp) { // 0xA68F1D
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DD5;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E01;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_16(uint16 k, uint16 j) { // 0xA68F31
+const uint16 *FireGeyser_Instr_16(uint16 k, const uint16 *jp) { // 0xA68F31
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DD7;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E03;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_17(uint16 k, uint16 j) { // 0xA68F45
+const uint16 *FireGeyser_Instr_17(uint16 k, const uint16 *jp) { // 0xA68F45
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DD9;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E05;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_18(uint16 k, uint16 j) { // 0xA68F59
+const uint16 *FireGeyser_Instr_18(uint16 k, const uint16 *jp) { // 0xA68F59
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DDB;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E07;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_19(uint16 k, uint16 j) { // 0xA68F6D
+const uint16 *FireGeyser_Instr_19(uint16 k, const uint16 *jp) { // 0xA68F6D
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DDD;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E09;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_20(uint16 k, uint16 j) { // 0xA68F81
+const uint16 *FireGeyser_Instr_20(uint16 k, const uint16 *jp) { // 0xA68F81
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DDF;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E0B;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_21(uint16 k, uint16 j) { // 0xA68F95
+const uint16 *FireGeyser_Instr_21(uint16 k, const uint16 *jp) { // 0xA68F95
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DE1;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E0D;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_22(uint16 k, uint16 j) { // 0xA68FA9
+const uint16 *FireGeyser_Instr_22(uint16 k, const uint16 *jp) { // 0xA68FA9
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DE3;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E0F;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_23(uint16 k, uint16 j) { // 0xA68FBD
+const uint16 *FireGeyser_Instr_23(uint16 k, const uint16 *jp) { // 0xA68FBD
uint16 v2 = Get_FireGeyser(cur_enemy_index)->fgr_var_D - g_word_A68DE5;
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index + 64);
E->base.y_pos = v2;
E->base.y_height = g_word_A68E11;
- return j;
+ return jp;
}
-uint16 FireGeyser_Instr_24(uint16 k, uint16 j) { // 0xA68FD1
+const uint16 *FireGeyser_Instr_24(uint16 k, const uint16 *jp) { // 0xA68FD1
Enemy_FireGeyser *E = Get_FireGeyser(cur_enemy_index);
E->fgr_var_C = 1;
Enemy_FireGeyser *E1 = Get_FireGeyser(cur_enemy_index + 64);
@@ -687,7 +681,7 @@ uint16 FireGeyser_Instr_24(uint16 k, uint16 j) { // 0xA68FD1
E->base.y_pos = E->fgr_var_D;
E->base.properties |= kEnemyProps_Invisible;
E1->base.properties |= 0x400u;
- return j;
+ return jp;
}
void FireGeyser_Init(void) { // 0xA68FFC
@@ -839,9 +833,9 @@ void NuclearWaffle_Func_1(void) { // 0xA69615
void NuclearWaffle_Func_2(void) { // 0xA69682
Enemy_NuclearWaffle *E = Get_NuclearWaffle(cur_enemy_index);
draw_enemy_layer = E->nwe_var_D;
- g_word_7E001E = NuclearWaffle_Func_6(E->nwe_var_21);
- uint16 v8 = g_word_7E001E;
- if (g_word_7E001E != E->nwe_var_33) {
+ R30_ = NuclearWaffle_Func_6(E->nwe_var_21);
+ uint16 v8 = R30_;
+ if (R30_ != E->nwe_var_33) {
R18_ = E->base.x_pos;
R20_ = E->base.y_pos;
R22_ = 46;
@@ -876,9 +870,9 @@ void NuclearWaffle_Func_3(void) { // 0xA69721
R36 -= E->nwe_var_2B;
Enemy_NuclearWaffle *ET = Get_NuclearWaffle(cur_enemy_index + E->nwe_var_2A);
uint16 nwe_var_00 = ET->nwe_var_00;
- g_word_7E001E = NuclearWaffle_Func_6(R36);
- uint16 v13 = g_word_7E001E;
- if (g_word_7E001E != ET->nwe_var_08) {
+ R30_ = NuclearWaffle_Func_6(R36);
+ uint16 v13 = R30_;
+ if (R30_ != ET->nwe_var_08) {
int v5 = nwe_var_00 >> 1;
R18_ = enemy_projectile_x_pos[v5];
R20_ = enemy_projectile_y_pos[v5];
@@ -917,9 +911,9 @@ void NuclearWaffle_Func_4(void) { // 0xA697E9
R36 -= E->nwe_var_2B;
Enemy_NuclearWaffle *ET = Get_NuclearWaffle(cur_enemy_index + E->nwe_var_2A);
uint16 nwe_var_10 = ET->nwe_var_10;
- g_word_7E001E = NuclearWaffle_Func_6(R36);
- uint16 v13 = g_word_7E001E;
- if (g_word_7E001E != ET->nwe_var_18) {
+ R30_ = NuclearWaffle_Func_6(R36);
+ uint16 v13 = R30_;
+ if (R30_ != ET->nwe_var_18) {
R38 = E->nwe_var_34;
int v5 = nwe_var_10 >> 1;
R18_ = sprite_x_pos[v5];
@@ -937,10 +931,10 @@ void NuclearWaffle_Func_4(void) { // 0xA697E9
ET->nwe_var_18 = v13;
uint16 v6 = NuclearWaffle_Func_5(R36);
uint16 v7 = CosineMult8bit(v6);
- R32 = E->nwe_var_26 + v7;
+ R32_ = E->nwe_var_26 + v7;
uint16 v9 = NuclearWaffle_Func_5(R36);
R34 = E->nwe_var_27 + SineMult8bitNegative(v9);
- sprite_x_pos[nwe_var_10 >> 1] = R32;
+ sprite_x_pos[nwe_var_10 >> 1] = R32_;
sprite_y_pos[nwe_var_10 >> 1] = R34;
v12 = E->nwe_var_2A - 2;
E->nwe_var_2A = v12;
@@ -991,7 +985,7 @@ uint16 NuclearWaffle_Func_6(uint16 a) { // 0xA698E7
}
void NuclearWaffle_Func_7(void) { // 0xA6993F
- if (g_word_7E001E != 2)
+ if (R30_ != 2)
QueueSfx2_Max6(0x5Eu);
}
@@ -1050,7 +1044,7 @@ void FakeKraid_Func_1(uint16 k, uint16 j) { // 0xA69ADC
}
}
-uint16 FakeKraid_Instr_2(uint16 k, uint16 j) { // 0xA69B26
+const uint16 *FakeKraid_Instr_2(uint16 k, const uint16 *jp) { // 0xA69B26
Enemy_FakeKraid *E = Get_FakeKraid(cur_enemy_index);
if (E->fkd_var_E)
--E->fkd_var_E;
@@ -1067,40 +1061,38 @@ LABEL_7:
E->fkd_var_C = -4;
if ((int16)(E->base.x_pos - samus_x_pos) < 0)
E->fkd_var_C = 4;
- return j;
+ return jp;
}
-uint16 FakeKraid_Instr_1(uint16 k, uint16 j) { // 0xA69B74
+const uint16 *FakeKraid_Instr_1(uint16 k, const uint16 *jp) { // 0xA69B74
Enemy_FakeKraid *E = Get_FakeKraid(cur_enemy_index);
- uint16 result;
if (E->fkd_var_E) {
if ((E->fkd_var_C & 0x8000u) != 0) {
- result = addr_stru_A699AE;
if ((Get_FakeKraid(cur_enemy_index)->fkd_var_B & 0x8000u) == 0)
- return addr_stru_A699C6;
+ return INSTR_RETURN_ADDR(addr_stru_A699C6);
+ return INSTR_RETURN_ADDR(addr_stru_A699AE);
} else {
- result = addr_stru_A699FC;
if ((E->fkd_var_B & 0x8000u) != 0)
- return addr_stru_A69A14;
+ return INSTR_RETURN_ADDR(addr_stru_A69A14);
+ return INSTR_RETURN_ADDR(addr_stru_A699FC);
}
} else {
E->fkd_var_E = (random_number & 3) + 3;
- result = addr_kFakeKraid_Ilist_9A2A;
if ((E->fkd_var_C & 0x8000u) != 0)
- return addr_kFakeKraid_Ilist_99DC;
+ return INSTR_RETURN_ADDR(addr_kFakeKraid_Ilist_99DC);
+ return INSTR_RETURN_ADDR(addr_kFakeKraid_Ilist_9A2A);
}
- return result;
}
-uint16 FakeKraid_Instr_3(uint16 k, uint16 j) { // 0xA69BB2
+const uint16 *FakeKraid_Instr_3(uint16 k, const uint16 *jp) { // 0xA69BB2
if (CheckIfEnemyIsOnScreen() == 0)
QueueSfx2_Max6(0x16u);
- return j;
+ return jp;
}
-uint16 FakeKraid_Instr_4(uint16 k, uint16 j) { // 0xA69BC4
+const uint16 *FakeKraid_Instr_4(uint16 k, const uint16 *jp) { // 0xA69BC4
FakeKraid_InstrHelper_45(k, 0, 0xFFFC);
- return j;
+ return jp;
}
void FakeKraid_InstrHelper_45(uint16 k, uint16 j, uint16 a) { // 0xA69BCB
@@ -1118,9 +1110,9 @@ void FakeKraid_InstrHelper_45(uint16 k, uint16 j, uint16 a) { // 0xA69BCB
SpawnEnemyProjectileWithGfx(v8, ka, addr_kEproj_MiniKraidSpit);
}
-uint16 FakeKraid_Instr_5(uint16 k, uint16 j) { // 0xA69C02
+const uint16 *FakeKraid_Instr_5(uint16 k, const uint16 *jp) { // 0xA69C02
FakeKraid_InstrHelper_45(k, 8u, 4u);
- return j;
+ return jp;
}
void sub_A69C0B(void) { // 0xA69C0B
@@ -2039,7 +2031,7 @@ void Ridley_Func_6(void) { // 0xA6B3F8
uint16 Ridley_Func_7(void) { // 0xA6B42E
static const uint16 g_word_A6B439[4] = { 4, 8, 0xa, 0xc };
- return g_word_A6B439[(uint16)(2 * Get_Ridley(0)->ridley_var_12) >> 1];
+ return g_word_A6B439[Get_Ridley(0)->ridley_var_12];
}
void Ridley_Func_8(void) { // 0xA6B441
@@ -2406,7 +2398,7 @@ void Ridley_Func_29(void) { // 0xA6B90F
tilemap_stuff[7] = g_word_A6B94D[v3];
tilemap_stuff[6] = g_word_A6B959[v3];
E->ridley_var_C = *(uint16 *)&RomPtr_A6(R20_)[v2];
- uint8 *v4 = RomPtr_A6(R18_);
+ const uint8 *v4 = RomPtr_A6(R18_);
uint16 t = *(uint16 *)&v4[v2];
E->ridley_var_B = sign16(E->ridley_var_B) ? -t : t;
}
@@ -2787,29 +2779,25 @@ void DrawBabyMetroid_0(void) { // 0xA6BF1A
uint16 BabyMetroid_Instr_2(uint16 k) { // 0xA6BFC9
if (!Get_Ridley(0)->ridley_var_46 && (random_number & 1) != 0)
- return BabyMetroid_Instr_4(k);
+ return BabyMetroid_Goto(k);
QueueSfx3_Max6(0x24u);
- return BabyMetroid_Incr2(k);
-}
-
-uint16 BabyMetroid_Incr2(uint16 k) { // 0xA6BFDE
return k + 2;
}
uint16 BabyMetroid_Instr_3(uint16 k) { // 0xA6BFE1
uint16 v1 = *(uint16 *)RomPtr_A6(k);
WriteColorsToPalette(0x162, 0xa6, v1, 0xF);
- return BabyMetroid_Incr2(k);
+ return k + 2;
}
uint16 BabyMetroid_Instr_1(uint16 k) { // 0xA6BFF2
if (Get_Ridley(0)->ridley_var_46)
- return BabyMetroid_Instr_4(k);
+ return BabyMetroid_Goto(k);
else
- return BabyMetroid_Incr2(k);
+ return k + 2;
}
-uint16 BabyMetroid_Instr_4(uint16 k) { // 0xA6BFF8
+uint16 BabyMetroid_Goto(uint16 k) { // 0xA6BFF8
return *(uint16 *)RomPtr_A6(k);
}
@@ -2931,12 +2919,12 @@ void Ridley_Func_59(void) { // 0xA6C136
VramWriteEntry *v2;
uint16 v0 = vram_write_queue_tail;
- uint8 *v1 = RomPtr_A6(addr_byte_A6C15D);
+ const uint8 *v1 = RomPtr_A6(addr_byte_A6C15D);
v2 = gVramWriteEntry(vram_write_queue_tail);
- v2->size = *(uint16 *)v1;
- *(VoidP *)((char *)&v2->src.addr + 1) = *(uint16 *)(v1 + 3);
- v2->src.addr = *((uint16 *)v1 + 1);
- v2->vram_dst = *(uint16 *)(v1 + 5);
+ v2->size = GET_WORD(v1);
+ *(VoidP *)((char *)&v2->src.addr + 1) = GET_WORD(v1 + 3);
+ v2->src.addr = GET_WORD(v1 + 2);
+ v2->vram_dst = GET_WORD(v1 + 5);
vram_write_queue_tail = v0 + 7;
}
@@ -2984,14 +2972,14 @@ uint8 ProcessEscapeTimerTileTransfers(void) { // 0xA6C26E
EnemyData *v0 = gEnemyData(0);
uint16 ai_var_E = v0->ai_var_E;
uint16 v2 = vram_write_queue_tail;
- uint8 *v3 = RomPtr_A6(ai_var_E);
+ const uint8 *v3 = RomPtr_A6(ai_var_E);
uint8 result = 1;
- if (*(uint16 *)v3) {
+ if (GET_WORD(v3)) {
v4 = gVramWriteEntry(vram_write_queue_tail);
- v4->size = *(uint16 *)v3;
- *(VoidP *)((char *)&v4->src.addr + 1) = *(uint16 *)(v3 + 3);
- v4->src.addr = *((uint16 *)v3 + 1);
- v4->vram_dst = *(uint16 *)(v3 + 5);
+ v4->size = GET_WORD(v3);
+ *(VoidP *)((char *)&v4->src.addr + 1) = GET_WORD(v3 + 3);
+ v4->src.addr = GET_WORD(v3 + 2);
+ v4->vram_dst = GET_WORD(v3 + 5);
vram_write_queue_tail = v2 + 7;
v0->ai_var_E = ai_var_E + 7;
if (*(uint16 *)RomPtr_A6(v0->ai_var_E))
@@ -3074,14 +3062,14 @@ void Ridley_Func_62(void) { // 0xA6C383
uint16 v0 = addr_stru_A6C3B8;
for (i = vram_write_queue_tail; ; i += 7) {
- uint8 *v2 = RomPtr_A6(v0);
- if (!*(uint16 *)v2)
+ const uint8 *v2 = RomPtr_A6(v0);
+ if (!GET_WORD(v2))
break;
v3 = gVramWriteEntry(i);
- v3->size = *(uint16 *)v2;
- *(VoidP *)((char *)&v3->src.addr + 1) = *(uint16 *)(v2 + 3);
- v3->src.addr = *((uint16 *)v2 + 1);
- v3->vram_dst = *(uint16 *)(v2 + 5);
+ v3->size = GET_WORD(v2);
+ *(VoidP *)((char *)&v3->src.addr + 1) = GET_WORD(v2 + 3);
+ v3->src.addr = GET_WORD(v2 + 2);
+ v3->vram_dst = GET_WORD(v2 + 5);
v0 += 7;
}
vram_write_queue_tail = i;
@@ -3885,14 +3873,15 @@ void Ridley_Func_93(uint16 j, uint16 k) { // 0xA6D3B4
int16 v3;
int16 v5;
- R20_ = 126;
- R18_ = j;
+ LongPtr r18;
+ r18.bank = 126;
+ r18.addr = j;
uint16 v2 = 0;
v3 = 7;
do {
v5 = v3;
- uint16 *v4 = (uint16 *)RomPtr_A6(k);
- IndirWriteWord(&R18_, v2, *v4);
+ const uint16 *v4 = (const uint16 *)RomPtr_A6(k);
+ IndirWriteWord(r18, v2, *v4);
k += 2;
v2 += 20;
--v3;
@@ -3938,8 +3927,8 @@ uint8 Ridley_Func_97(void) { // 0xA6D431
void Ridley_Func_98(void) { // 0xA6D453
uint16 enemy_ptr = Get_Ridley(cur_enemy_index)->base.enemy_ptr;
- uint8 *v1 = RomPtr_A0(enemy_ptr);
- uint16 v2 = SuitDamageDivision(*((uint16 *)v1 + 3));
+ const uint8 *v1 = RomPtr_A0(enemy_ptr);
+ uint16 v2 = SuitDamageDivision(GET_WORD(v1 + 6));
Samus_DealDamage(v2);
}
@@ -4373,25 +4362,17 @@ void Ridley_Func_115(void) { // 0xA6D97D
}
void Ridley_Func_116(void) { // 0xA6D9A8
- int16 v1;
- int16 v3;
- char v4; // t0
-
Enemy_Ridley *E = Get_Ridley(0);
R18_ = abs16(E->ridley_var_B);
- v1 = R18_ + abs16(E->ridley_var_C);
+ uint16 v1 = R18_ + abs16(E->ridley_var_C);
if (v1) {
uint16 v2 = v1 - R18_;
if (sign16(v2 - R18_))
v2 = R18_;
- v3 = (4 * v2) & 0xF00;
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
- uint16 v5 = 2 * v3;
- if (v5 >= 0xEu)
- v5 = 14;
- uint16 v6 = g_word_A6D9ED[v5 >> 1];
+ int v5 = (((4 * v2) & 0xF00) >> 8);
+ if (v5 >= 7)
+ v5 = 7;
+ uint16 v6 = g_word_A6D9ED[v5];
if ((E->ridley_var_C & 0x8000u) == 0)
v6 >>= 1;
E->ridley_var_08 = v6;
@@ -4449,9 +4430,9 @@ void Ridley_Func_119(uint8 carry) { // 0xA6DA8B
v3 = gVramWriteEntry(vram_write_queue_tail);
*(VoidP *)((char *)&v3->src.addr + 1) = -20480;
*(VoidP *)((char *)&v3[1].src.addr + 1) = -20480;
- uint8 *v4 = RomPtr_A6(v1);
- v3->src.addr = *(uint16 *)v4;
- v3[1].src.addr = *((uint16 *)v4 + 1);
+ const uint8 *v4 = RomPtr_A6(v1);
+ v3->src.addr = GET_WORD(v4);
+ v3[1].src.addr = GET_WORD(v4 + 2);
v3->vram_dst = 31424;
v3[1].vram_dst = 31680;
v3->size = 128;
@@ -4514,95 +4495,64 @@ uint16 CallBabyMetroidInstr(uint32 ea, uint16 k) {
case fnBabyMetroid_Instr_2: return BabyMetroid_Instr_2(k);
case fnBabyMetroid_Instr_3: return BabyMetroid_Instr_3(k);
case fnBabyMetroid_Instr_1: return BabyMetroid_Instr_1(k);
- case fnBabyMetroid_Instr_4: return BabyMetroid_Instr_4(k);
+ case fnBabyMetroid_Instr_4: return BabyMetroid_Goto(k);
default: return Unreachable();
}
}
+
+typedef struct BabyMetroidExecState {
+ uint16 ip;
+ uint16 timer;
+} BabyMetroidExecState;
+
int BabyMetroid_DBCB_DoubleRetEx(uint16 a) {
- int16 v3;
+ BabyMetroidExecState *st = (BabyMetroidExecState *)&g_ram[a];
- R0_.addr = a;
- R3_.addr = a + 2;
- R0_.bank = 126;
- R3_.bank = 126;
-
- uint16 *instr_ptr = (uint16 *)IndirPtr(&R0_, 0);
- uint16 *timer_ptr = (uint16 *)IndirPtr(&R3_, 0);
-
- if ((*instr_ptr & 0x8000u) == 0)
+ if ((st->ip & 0x8000u) == 0)
return -1; // double ret
-
- uint16 v2 = *instr_ptr;
- v3 = *(uint16 *)RomPtr_A6(v2);
- if (v3 < 0)
+ uint16 v2 = st->ip;
+ const uint16 *v3 = (uint16 *)RomPtr_A6(v2);
+ if (sign16(v3[0]))
goto LABEL_7;
- if (*timer_ptr != v3) {
- (*timer_ptr)++;
- return *((uint16 *)RomPtr_A6(v2) + 1);
+ if (st->timer != v3[0]) {
+ st->timer++;
+ return v3[1];
}
v2 += 4;
for (; ; ) {
- v3 = *(uint16 *)RomPtr_A6(v2);
- if (v3 >= 0)
+ v3 = (uint16 *)RomPtr_A6(v2);
+ if (!sign16(v3[0]))
break;
LABEL_7:
- R6_ = v3;
- v2 = CallBabyMetroidInstr((uint16)v3 | 0xA60000, v2 + 2);
+ v2 = CallBabyMetroidInstr(v3[0] | 0xA60000, v2 + 2);
}
- *timer_ptr = 1;
- *instr_ptr = v2;
- return *((uint16 *)RomPtr_A6(v2) + 1);
+ st->timer = 1;
+ st->ip = v2;
+ return v3[1];
}
void sub_A6DC13(uint16 j) { // 0xA6DC13
- int16 *v5;
- int16 v6;
- int16 v7;
- char v8; // t0
- int16 v9;
- int16 v10;
- OamEnt *v11;
- int16 v13;
- int16 v15;
-
- uint16 *v1 = (uint16 *)RomPtr_A6(j);
- uint16 v2 = j + 2;
- R24_ = *v1;
- uint16 v3 = oam_next_ptr;
+ const uint8 *p = RomPtr_A6(j);
+ int n = GET_WORD(p);
+ p += 2;
+ int v3 = oam_next_ptr;
do {
- uint8 *v4 = RomPtr_A6(v2);
- v5 = (int16 *)v4;
- v6 = v4[2] << 8;
- if ((v4[2] & 0x80) != 0)
- v6 |= 0xFFu;
- v8 = v6;
- LOBYTE(v7) = HIBYTE(v6);
- HIBYTE(v7) = v8;
- v9 = R20_ + v7 - layer1_y_pos;
+ int16 v9 = R20_ + (int8)p[2] - layer1_y_pos;
if (v9 >= 0 && sign16(v9 - 224)) {
- R26_ = v9;
- v10 = R18_ + *(uint16 *)v4 - layer1_x_pos;
- v11 = gOamEnt(v3);
- *(uint16 *)&v11->xcoord = v10;
- if ((v10 & 0x100) != 0) {
- int v12 = v3 >> 1;
- R28_ = kOamExtra_Address_And_X8Large[v12];
- v13 = kOamExtra_X8Small_And_Large[v12] | *(uint16 *)RomPtr_RAM(R28_);
- *(uint16 *)RomPtr_RAM(R28_) = v13;
- }
- if (*v5 < 0) {
- int v14 = v3 >> 1;
- R28_ = kOamExtra_Address_And_X8Large[v14];
- v15 = kOamExtra_X8Small_And_Large[v14 + 1] | *(uint16 *)RomPtr_RAM(R28_);
- *(uint16 *)RomPtr_RAM(R28_) = v15;
- }
- *(uint16 *)&v11->ycoord = R26_;
- *(uint16 *)&v11->charnum = R22_ | *(int16 *)((char *)v5 + 3);
+ uint16 v10 = R18_ + GET_WORD(p) - layer1_x_pos;
+ OamEnt *v11 = gOamEnt(v3);
+ v11->xcoord = v10;
+ int v12 = v3 >> 1;
+ if ((v10 & 0x100) != 0)
+ *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12];
+ if (sign16(GET_WORD(p)))
+ *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v12]) |= kOamExtra_X8Small_And_Large[v12 + 1];
+ v11->ycoord = v9;
+ *(uint16 *)&v11->charnum = R22_ | GET_WORD(p + 3);
v3 = (v3 + 4) & 0x1FF;
}
- v2 += 5;
- --R24_;
- } while (R24_);
+ p += 5;
+ } while (--n);
oam_next_ptr = v3;
}
@@ -4795,84 +4745,74 @@ void Ridley_Func_129(void) { // 0xA6E088
}
}
-uint16 Ridley_Instr_5(uint16 k, uint16 j) { // 0xA6E4BE
+const uint16 *Ridley_Instr_5(uint16 k, const uint16 *jp) { // 0xA6E4BE
Get_Ridley(0)->ridley_var_0F = 89;
QueueSfx2_Max6(0x59u);
- return j;
+ return jp;
}
-uint16 Ridley_Instr_6(uint16 k, uint16 j) { // 0xA6E4CA
+const uint16 *Ridley_Instr_6(uint16 k, const uint16 *jp) { // 0xA6E4CA
Get_Ridley(0)->ridley_var_0F = 0;
- return j;
+ return jp;
}
-uint16 Ridley_Instr_10(uint16 k, uint16 j) { // 0xA6E4D2
+const uint16 *Ridley_Instr_10(uint16 k, const uint16 *jp) { // 0xA6E4D2
if (area_index == 2 || !sign16(samus_health - 30))
- return sub_A6E514(j);
+ return jp + 1;
Get_Ridley(0)->ridley_var_00 = 8;
- return sub_A6E4E9(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 sub_A6E4E9(uint16 j) { // 0xA6E4E9
- return *(uint16 *)RomPtr_A6(j);
-}
-
-uint16 Ridley_Instr_4(uint16 k, uint16 j) { // 0xA6E4EE
+const uint16 *Ridley_Instr_4(uint16 k, const uint16 *jp) { // 0xA6E4EE
if (Get_Ridley(0)->ridley_var_1B)
- return sub_A6E4E9(j);
+ return INSTR_RETURN_ADDR(jp[0]);
else
- return sub_A6E4E9(j + 2);
+ return INSTR_RETURN_ADDR(jp[1]);
}
-uint16 Ridley_Instr_3(uint16 k, uint16 j) { // 0xA6E4F8
+const uint16 *Ridley_Instr_3(uint16 k, const uint16 *jp) { // 0xA6E4F8
if (Get_Ridley(0)->ridley_var_1B)
- return j + 2;
+ return jp + 1;
else
- return sub_A6E4E9(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Ridley_Instr_2(uint16 k, uint16 j) { // 0xA6E501
+const uint16 *Ridley_Instr_2(uint16 k, const uint16 *jp) { // 0xA6E501
samus_prev_x_pos = samus_x_pos;
samus_prev_y_pos = samus_y_pos;
- uint16 v2 = *(uint16 *)RomPtr_A6(j);
- Get_Ridley(0)->ridley_var_1D = v2;
- return sub_A6E514(j);
+ Get_Ridley(0)->ridley_var_1D = jp[0];
+ return jp + 1;
}
-uint16 sub_A6E514(uint16 j) { // 0xA6E514
- return j + 2;
-}
-
-uint16 Ridley_Instr_1(uint16 k, uint16 j) { // 0xA6E517
+const uint16 *Ridley_Instr_1(uint16 k, const uint16 *jp) { // 0xA6E517
if (Get_Ridley(0)->ridley_var_10)
- return sub_A6E4E9(j);
+ return INSTR_RETURN_ADDR(jp[0]);
else
- return sub_A6E514(j);
+ return jp + 1;
}
-uint16 Ridley_Instr_14(uint16 k, uint16 j) { // 0xA6E51F
- uint8 *v2 = RomPtr_A6(j);
+const uint16 *Ridley_Instr_14(uint16 k, const uint16 *jp) { // 0xA6E51F
Enemy_Ridley *E = Get_Ridley(0);
- E->base.x_pos += *(uint16 *)v2;
- E->base.y_pos += *((uint16 *)v2 + 1);
- return j + 4;
+ E->base.x_pos += jp[0];
+ E->base.y_pos += jp[1];
+ return jp + 2;
}
-uint16 Ridley_Instr_9(uint16 k, uint16 j) { // 0xA6E71C
+const uint16 *Ridley_Instr_9(uint16 k, const uint16 *jp) { // 0xA6E71C
Get_Ridley(0)->ridley_var_10 = 0;
Ridley_Func_96();
- return j;
+ return jp;
}
-uint16 Ridley_Instr_7(uint16 k, uint16 j) { // 0xA6E727
+const uint16 *Ridley_Instr_7(uint16 k, const uint16 *jp) { // 0xA6E727
Get_Ridley(0)->ridley_var_10 = 1;
- return j;
+ return jp;
}
-uint16 Ridley_Instr_8(uint16 k, uint16 j) { // 0xA6E72F
+const uint16 *Ridley_Instr_8(uint16 k, const uint16 *jp) { // 0xA6E72F
Get_Ridley(0)->ridley_var_10 = 2;
Ridley_Func_96();
- return j;
+ return jp;
}
void Ridley_Func_131(uint16 k) { // 0xA6E828
@@ -4887,7 +4827,7 @@ void Ridley_Func_132(uint16 k, uint16 a) { // 0xA6E840
SpawnEnemyProjectileWithGfx(a, k, addr_stru_869634);
}
-uint16 Ridley_Instr_11(uint16 k, uint16 j) { // 0xA6E84D
+const uint16 *Ridley_Instr_11(uint16 k, const uint16 *jp) { // 0xA6E84D
Enemy_Ridley *E = Get_Ridley(0);
if (E->ridley_var_10) {
R18_ = E->base.x_pos + 25;
@@ -4928,37 +4868,37 @@ LABEL_7:
LABEL_14:
E->ridley_var_19 = Math_MultBySin(0x500u);
E->ridley_var_1A = Math_MultByCos(0x500u);
- return j;
+ return jp;
}
-uint16 Ridley_Instr_12(uint16 k, uint16 j) { // 0xA6E904
- return Ridley_E90C(k, j, 0);
+const uint16 *Ridley_Instr_12(uint16 k, const uint16 *jp) { // 0xA6E904
+ return Ridley_E90C(k, jp, 0);
}
-uint16 Ridley_Instr_13(uint16 k, uint16 j) { // 0xA6E909
- return Ridley_E90C(k, j, 0xe);
+const uint16 *Ridley_Instr_13(uint16 k, const uint16 *jp) { // 0xA6E909
+ return Ridley_E90C(k, jp, 0xe);
}
-uint16 Ridley_E90C(uint16 k, uint16 j, uint16 a) { // 0xA6E90C
+const uint16 *Ridley_E90C(uint16 k, const uint16 *jp, uint16 a) { // 0xA6E90C
enemy_projectile_unk1995 = a;
Enemy_Ridley *E = Get_Ridley(0);
SpawnEnemyProjectileWithRoomGfx(0x9642, E->ridley_var_10);
- return j;
+ return jp;
}
-uint16 Ridley_Instr_15(uint16 k, uint16 j) { // 0xA6E969
+const uint16 *Ridley_Instr_15(uint16 k, const uint16 *jp) { // 0xA6E969
Enemy_Ridley *E = Get_Ridley(0);
E->ridley_var_A = FUNC16(CeresRidley_Func_9);
E->ridley_var_C = -352;
- return j;
+ return jp;
}
-uint16 Ridley_Instr_16(uint16 k, uint16 j) { // 0xA6E976
+const uint16 *Ridley_Instr_16(uint16 k, const uint16 *jp) { // 0xA6E976
Enemy_Ridley *E = Get_Ridley(0);
E->ridley_var_A = FUNC16(Ridley_Func_3);
E->ridley_var_C = -352;
- return j;
+ return jp;
}
void CeresSteam_Init(void) { // 0xA6EFB1
@@ -5006,54 +4946,45 @@ void CeresSteam_Touch(void) { // 0xA6F03F
NormalEnemyTouchAi();
}
-uint16 CeresSteam_Instr_1(uint16 k, uint16 j) { // 0xA6F11D
+const uint16 *CeresSteam_Instr_1(uint16 k, const uint16 *jp) { // 0xA6F11D
Enemy_CeresSteam *E = Get_CeresSteam(k);
E->base.properties |= kEnemyProps_Tangible | kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 CeresSteam_Instr_2(uint16 k, uint16 j) { // 0xA6F127
+const uint16 *CeresSteam_Instr_2(uint16 k, const uint16 *jp) { // 0xA6F127
Enemy_CeresSteam *E = Get_CeresSteam(k);
if (E->csm_var_D-- != 1)
- return *(uint16 *)RomPtr_A6(j);
- uint8 *v5 = RomPtr_A6(j);
- return CeresSteam_Instr_3(k, *((uint16 *)v5 + 1));
+ return INSTR_RETURN_ADDR(jp[0]);
+ return CeresSteam_Instr_3(k, (uint16 *)RomPtr_A6(jp[1]));
}
-uint16 CeresSteam_Instr_3(uint16 k, uint16 j) { // 0xA6F135
+const uint16 *CeresSteam_Instr_3(uint16 k, const uint16 *jp) { // 0xA6F135
Enemy_CeresSteam *E = Get_CeresSteam(k);
E->base.properties &= 0xFAFFu;
- return j;
+ return jp;
}
-uint16 CeresDoor_Instr_6(uint16 k, uint16 j) { // 0xA6F63E
+const uint16 *CeresDoor_Instr_6(uint16 k, const uint16 *jp) { // 0xA6F63E
Enemy_CeresDoor *E = Get_CeresDoor(k);
if (abs16(E->base.x_pos - samus_x_pos) >= 0x30u || abs16(E->base.y_pos - samus_y_pos) >= 0x30u)
- return CeresDoor_Goto(j);
+ return INSTR_RETURN_ADDR(*jp);
else
- return CeresDoor_Incr(j);
+ return jp + 1;
}
-uint16 CeresDoor_Incr(uint16 j) { // 0xA6F662
- return j + 2;
-}
-
-uint16 CeresDoor_Goto(uint16 j) { // 0xA6F665
- return *(uint16 *)RomPtr_A6(j);
-}
-
-uint16 CeresDoor_Instr_4(uint16 k, uint16 j) { // 0xA6F66A
+const uint16 *CeresDoor_Instr_4(uint16 k, const uint16 *jp) { // 0xA6F66A
if (*(uint16 *)&boss_bits_for_area[area_index] & 1)
- return CeresDoor_Incr(j);
+ return jp + 1;
else
- return CeresDoor_Goto(j);
+ return INSTR_RETURN_ADDR(*jp);
}
-uint16 CeresDoor_Instr_8(uint16 k, uint16 j) { // 0xA6F678
+const uint16 *CeresDoor_Instr_8(uint16 k, const uint16 *jp) { // 0xA6F678
if (ceres_status)
- return CeresDoor_Incr(j);
+ return jp + 1;
else
- return CeresDoor_Goto(j);
+ return INSTR_RETURN_ADDR(*jp);
}
void CeresDoor_Func_6b(void) { // 0xA6F67F
@@ -5061,43 +4992,43 @@ void CeresDoor_Func_6b(void) { // 0xA6F67F
ceres_status = FUNC16(Enemy_GrappleReact_NoInteract_A6);
}
-uint16 CeresSteam_Instr_4(uint16 k, uint16 j) { // 0xA6F68B
+const uint16 *CeresSteam_Instr_4(uint16 k, const uint16 *jp) { // 0xA6F68B
Enemy_CeresSteam *E = Get_CeresSteam(k);
E->base.properties |= kEnemyProps_Tangible;
- return j;
+ return jp;
}
-uint16 CeresDoor_Instr_1(uint16 k, uint16 j) { // 0xA6F695
+const uint16 *CeresDoor_Instr_1(uint16 k, const uint16 *jp) { // 0xA6F695
Enemy_CeresDoor *E = Get_CeresDoor(k);
E->base.properties &= ~kEnemyProps_Tangible;
- return j;
+ return jp;
}
-uint16 CeresDoor_Instr_3(uint16 k, uint16 j) { // 0xA6F69F
+const uint16 *CeresDoor_Instr_3(uint16 k, const uint16 *jp) { // 0xA6F69F
Get_CeresDoor(k)->cdr_var_B = 1;
- return j;
+ return jp;
}
-uint16 CeresSteam_Instr_5(uint16 k, uint16 j) { // 0xA6F6A6
+const uint16 *CeresSteam_Instr_5(uint16 k, const uint16 *jp) { // 0xA6F6A6
Enemy_CeresSteam *E = Get_CeresSteam(k);
E->base.properties |= kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 CeresDoor_Instr_5(uint16 k, uint16 j) { // 0xA6F6B0
+const uint16 *CeresDoor_Instr_5(uint16 k, const uint16 *jp) { // 0xA6F6B0
Get_CeresDoor(k)->cdr_var_B = 0;
- return CeresDoor_Instr_2(k, j);
+ return CeresDoor_Instr_2(k, jp);
}
-uint16 CeresDoor_Instr_2(uint16 k, uint16 j) { // 0xA6F6B3
+const uint16 *CeresDoor_Instr_2(uint16 k, const uint16 *jp) { // 0xA6F6B3
Enemy_CeresDoor *E = Get_CeresDoor(k);
E->base.properties &= ~kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 CeresDoor_Instr_7(uint16 k, uint16 j) { // 0xA6F6BD
+const uint16 *CeresDoor_Instr_7(uint16 k, const uint16 *jp) { // 0xA6F6BD
QueueSfx3_Max6(0x2Cu);
- return j;
+ return jp;
}
void CeresDoor_Init(void) { // 0xA6F6C5
@@ -5399,4 +5330,4 @@ void Zebetites_Shot(void) { // 0xA6FDAC
Enemy_Zebetites *G = Get_Zebetites(E->zebet_parameter_2);
G->base.health = E->base.health;
G->base.flash_timer = E->base.flash_timer;
-}
+}
\ No newline at end of file
diff --git a/src/sm_a7.c b/src/sm_a7.c
index 319cc52..a82339f 100644
--- a/src/sm_a7.c
+++ b/src/sm_a7.c
@@ -6,12 +6,49 @@
#include "sm_rtl.h"
+#define kKraid_Palette2 ((uint16*)RomFixedPtr(0xa786c7))
+#define kKraid_Palette2 ((uint16*)RomFixedPtr(0xa786c7))
+#define kKraid_BgTargetPalette3 ((uint16*)RomFixedPtr(0xa7aaa6))
+#define g_word_A7ACB3 ((uint16*)RomFixedPtr(0xa7acb3))
+#define g_off_A7ACC5 ((uint16*)RomFixedPtr(0xa7acc5))
+#define g_stru_A796D2 (*(KraidInstrList*)RomFixedPtr(0xa796d2))
+#define g_stru_A796DA (*(KraidInstrList*)RomFixedPtr(0xa796da))
+#define g_word_A7B161 ((uint16*)RomFixedPtr(0xa7b161))
+#define kKraid_BgPalette7 ((uint16*)RomFixedPtr(0xa7b3d3))
+#define kKraid_BgPalette7_KraidDeath ((uint16*)RomFixedPtr(0xa7b4f3))
+#define kKraid_SprPalette7_KraidDeath ((uint16*)RomFixedPtr(0xa7b513))
+#define g_stru_A7974A ((KraidInstrList*)RomFixedPtr(0xa7974a))
+#define g_stru_A79764 ((KraidInstrList*)RomFixedPtr(0xa79764))
+#define g_stru_A792B7 (*(Hitbox*)RomFixedPtr(0xa792b7))
+#define g_word_A7BA7D ((uint16*)RomFixedPtr(0xa7ba7d))
+#define g_word_A7BC65 ((uint16*)RomFixedPtr(0xa7bc65))
+#define kKraid_Ilist_8B0A (*(SpriteDrawInstr*)RomFixedPtr(0xa78b0a))
+#define g_off_A7BE3E ((uint16*)RomFixedPtr(0xa7be3e))
+#define g_off_A7BE46 ((uint16*)RomFixedPtr(0xa7be46))
+#define g_word_A7BF1D ((uint16*)RomFixedPtr(0xa7bf1d))
+#define kKraidSinkEntry ((KraidSinkTable*)RomFixedPtr(0xa7c5e7))
+#define g_off_A7CE8E ((uint16*)RomFixedPtr(0xa7ce8e))
+#define g_word_A7CDED ((uint16*)RomFixedPtr(0xa7cded))
+#define g_stru_A7902D ((ExtendedSpriteMap*)RomFixedPtr(0xa7902d))
+#define g_byte_A7CFC2 ((uint8*)RomFixedPtr(0xa7cfc2))
+#define g_off_A7CCFD ((uint16*)RomFixedPtr(0xa7ccfd))
+#define g_word_A7CD41 ((uint16*)RomFixedPtr(0xa7cd41))
+#define g_word_A7CD53 ((uint16*)RomFixedPtr(0xa7cd53))
+#define g_word_A7CD63 ((uint16*)RomFixedPtr(0xa7cd63))
+#define g_off_A7D40D ((uint16*)RomFixedPtr(0xa7d40d))
+#define g_word_A7CDAD ((uint16*)RomFixedPtr(0xa7cdad))
+#define g_byte_A7DA1D ((uint8*)RomFixedPtr(0xa7da1d))
+#define g_off_A7DC4A ((uint16*)RomFixedPtr(0xa7dc4a))
+#define g_off_A7F787 ((uint16*)RomFixedPtr(0xa7f787))
+#define g_off_A7F92D ((uint16*)RomFixedPtr(0xa7f92d))
+#define g_word_A7CA41 ((uint16*)RomFixedPtr(0xa7ca41))
+#define g_word_A7CA61 ((uint16*)RomFixedPtr(0xa7ca61))
+#define g_off_A7F55F ((uint16*)RomFixedPtr(0xa7f55f))
+
+
+
+
-#define kKraid_Palette2 ((uint16*)RomPtr(0xa786c7))
-#define kKraid_Palette2 ((uint16*)RomPtr(0xa786c7))
-#define kKraid_BgTargetPalette3 ((uint16*)RomPtr(0xa7aaa6))
-#define g_word_A7ACB3 ((uint16*)RomPtr(0xa7acb3))
-#define g_off_A7ACC5 ((uint16*)RomPtr(0xa7acc5))
static const uint16 g_word_A7A916 = 0x120;
static const uint16 g_word_A7A918 = 0xa0;
@@ -22,31 +59,7 @@ static const uint16 g_word_A7A922 = 4;
static const uint16 g_word_A7A926 = 0x8000;
static const uint16 g_word_A7A928 = 3;
-#define g_stru_A796D2 (*(KraidInstrList*)RomPtr(0xa796d2))
-#define g_stru_A796DA (*(KraidInstrList*)RomPtr(0xa796da))
-#define g_word_A7B161 ((uint16*)RomPtr(0xa7b161))
-#define kKraid_BgPalette7 ((uint16*)RomPtr(0xa7b3d3))
-#define kKraid_BgPalette7_KraidDeath ((uint16*)RomPtr(0xa7b4f3))
-#define kKraid_SprPalette7_KraidDeath ((uint16*)RomPtr(0xa7b513))
-#define g_stru_A7974A ((KraidInstrList*)RomPtr(0xa7974a))
-#define g_stru_A79764 ((KraidInstrList*)RomPtr(0xa79764))
-#define g_stru_A792B7 (*(Hitbox*)RomPtr(0xa792b7))
-#define g_word_A7BA7D ((uint16*)RomPtr(0xa7ba7d))
-#define g_word_A7BC65 ((uint16*)RomPtr(0xa7bc65))
-#define kKraid_Ilist_8B0A (*(SpriteDrawInstr*)RomPtr(0xa78b0a))
-#define g_off_A7BE3E ((uint16*)RomPtr(0xa7be3e))
-#define g_off_A7BE46 ((uint16*)RomPtr(0xa7be46))
-#define g_word_A7BF1D ((uint16*)RomPtr(0xa7bf1d))
-#define kKraidSinkEntry ((KraidSinkTable*)RomPtr(0xa7c5e7))
-#define g_off_A7CE8E ((uint16*)RomPtr(0xa7ce8e))
-#define g_word_A7CDED ((uint16*)RomPtr(0xa7cded))
-#define g_stru_A7902D ((ExtendedSpriteMap*)RomPtr(0xa7902d))
-#define g_byte_A7CFC2 ((uint8*)RomPtr(0xa7cfc2))
-#define g_off_A7CCFD ((uint16*)RomPtr(0xa7ccfd))
-#define g_word_A7CD41 ((uint16*)RomPtr(0xa7cd41))
-#define g_word_A7CD53 ((uint16*)RomPtr(0xa7cd53))
-#define g_word_A7CD63 ((uint16*)RomPtr(0xa7cd63))
static const uint16 g_word_A7CD73 = 0x600;
static const uint16 g_word_A7CD75 = 0;
static const uint16 g_word_A7CD77 = 0x1000;
@@ -61,16 +74,12 @@ static const uint16 g_word_A7CD87 = 0;
static const uint16 g_word_A7CD89 = 0xfffe;
static const uint16 g_word_A7CD8B = 0xfff9;
static const uint16 g_word_A7CD8D = 0;
-#define g_off_A7D40D ((uint16*)RomPtr(0xa7d40d))
static const uint16 g_word_A7CD9B = 0x40;
static const uint16 g_word_A7CD9D = 0xc00;
static const uint16 g_word_A7CD9F = 0x100;
static const uint16 g_word_A7CDA1 = 0xf000;
static const uint16 g_word_A7CDA3 = 8;
static const uint8 g_byte_A7CDA5[8] = { 6, 6, 8, 8, 6, 8, 6, 8 };
-#define g_word_A7CDAD ((uint16*)RomPtr(0xa7cdad))
-#define g_byte_A7DA1D ((uint8*)RomPtr(0xa7da1d))
-#define g_off_A7DC4A ((uint16*)RomPtr(0xa7dc4a))
static const uint16 g_word_A7E900 = 0xfffd;
static const uint16 g_word_A7E902 = 0;
static const uint16 g_word_A7E906 = 0;
@@ -90,22 +99,6 @@ static const uint16 g_word_A7F4D5 = 8;
static const uint16 g_word_A7F4D7 = 0;
static const uint16 g_word_A7F4D9 = 0;
static const uint16 g_word_A7F4DB = 0x1000;
-#define g_off_A7F787 ((uint16*)RomPtr(0xa7f787))
-#define g_off_A7F92D ((uint16*)RomPtr(0xa7f92d))
-#define g_word_A7CA41 ((uint16*)RomPtr(0xa7ca41))
-#define g_word_A7CA61 ((uint16*)RomPtr(0xa7ca61))
-
-uint16 EnemyInstr_Goto_A7(uint16 k, uint16 j) { // 0xA780ED
- return *(uint16 *)RomPtr_A7(j);
-}
-
-uint16 EnemyInstr_DecTimerAndGoto2_A7(uint16 k, uint16 j) { // 0xA78110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_A7(k, j);
-}
void CallEnemyInstrExtFunc(uint32 ea, uint16 k) {
switch (ea) {
@@ -117,19 +110,9 @@ void CallEnemyInstrExtFunc(uint32 ea, uint16 k) {
}
}
-uint16 EnemyInstr_Call_A7(uint16 k, uint16 j) { // 0xA7808A
- R18_ = *(uint16 *)RomPtr_A7(j);
- CallEnemyInstrExtFunc(R18_ | 0xA70000, k);
- return j + 2;
-}
-uint16 EnemyInstr_SetTimer_A7(uint16 k, uint16 j) { // 0xA78123
- uint16 v2 = *(uint16 *)RomPtr_A7(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-uint16 EnemyInstr_Sleep_A7(uint16 k, uint16 j) { // 0xA7812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
+const uint16 *EnemyInstr_Call_A7(uint16 k, const uint16 *jp) { // 0xA7808A
+ CallEnemyInstrExtFunc(jp[0] | 0xA70000, k);
+ return jp + 1;
}
@@ -153,14 +136,14 @@ void Enemy_NormalFrozenAI_A7(void) { // 0xA78041
NormalEnemyFrozenAI();
}
-uint16 Kraid_Instr_9(uint16 k, uint16 j) { // 0xA78A8F
+const uint16 *Kraid_Instr_9(uint16 k, const uint16 *jp) { // 0xA78A8F
Enemy_Kraid *E = Get_Kraid(0);
if ((int16)(E->base.health - E->kraid_healths_8ths[3]) < 0) {
Enemy_Kraid *E1 = Get_Kraid(0x40u);
if (sign16(E1->base.current_instruction + 0x75BF))
- return addr_kKraid_Ilist_8A41;
+ return INSTR_RETURN_ADDR(addr_kKraid_Ilist_8A41);
}
- return j;
+ return jp;
}
void Kraid_Touch_ArmFoot(void) { // 0xA7948B
@@ -281,14 +264,8 @@ void Kraid_Init(void) { // 0xA7A959
}
void Kraid_SetupGfxWithTilePrioClear(void) { // 0xA7AAC6
- decompress_src.addr = addr_byte_B9FA38;
- decompress_src.bank = -71;
- decompress_dst.addr = 0x4000;
- DecompressToMem();
- decompress_src.addr = addr_byte_B9FE3E;
- decompress_src.bank = -71;
- decompress_dst.addr = 0x2000;
- DecompressToMem();
+ DecompressToMem(0xB9FA38, g_ram + 0x4000);
+ DecompressToMem(0xB9FE3E, g_ram + 0x2000);
Enemy_Kraid *E = Get_Kraid(0);
E->kraid_hurt_frame = 0;
E->kraid_hurt_frame_timer = 0;
@@ -690,7 +667,7 @@ uint16 Kraid_ExecuteInstr(void) { // 0xA7AF3D
Enemy_Kraid *E = Get_Kraid(0);
RESTART:;
uint16 kraid_var_B = E->kraid_var_B;
- uint16 *v2 = (uint16 *)RomPtr_A7(kraid_var_B);
+ const uint16 *v2 = (const uint16 *)RomPtr_A7(kraid_var_B);
uint16 result = *v2;
if (*v2 != 0xFFFF) {
if ((int16)(*v2 + 1) < 0) {
@@ -730,20 +707,20 @@ void Kraid_Shot_Mouth(void) { // 0xA7AFAA
Enemy_Kraid *E = Get_Kraid(0);
if (!sign16(E->kraid_var_A + 0x3AC9))
return;
- uint8 *v2 = RomPtr_A7(E->kraid_var_B - 8);
- if (*((uint16 *)v2 + 3) == 0xFFFF) {
+ const uint8 *v2 = RomPtr_A7(E->kraid_var_B - 8);
+ if (GET_WORD(v2 + 6) == 0xFFFF) {
v3 = 0;
goto LABEL_14;
}
uint16 v4;
- v4 = *((uint16 *)v2 + 3);
+ v4 = GET_WORD(v2 + 6);
E->kraid_var_E = 1;
v3 = 0;
- uint8 *v5;
+ const uint8 *v5;
v5 = RomPtr_A7(v4);
- R22_ = E->base.x_pos + *(uint16 *)v5;
- R20_ = E->base.y_pos + *((uint16 *)v5 + 1);
- R18_ = E->base.y_pos + *((uint16 *)v5 + 3);
+ R22_ = E->base.x_pos + GET_WORD(v5);
+ R20_ = E->base.y_pos + GET_WORD(v5 + 2);
+ R18_ = E->base.y_pos + GET_WORD(v5 + 6);
if (projectile_counter) {
uint16 v6 = 2 * projectile_counter;
while (1) {
@@ -848,11 +825,11 @@ void Kraid_Shot_Body(void) { // 0xA7B181
E->kraid_var_E = 0;
E->kraid_mouth_flags &= ~1u;
R48 = 0;
- uint8 *v2 = RomPtr_A7(E->kraid_var_B - 8);
- uint8 *v3 = RomPtr_A7(*((uint16 *)v2 + 2));
- R22_ = E->base.x_pos + *(uint16 *)v3;
- R20_ = E->base.y_pos + *((uint16 *)v3 + 1);
- R18_ = E->base.y_pos + *((uint16 *)v3 + 3);
+ const uint8 *v2 = RomPtr_A7(E->kraid_var_B - 8);
+ const uint8 *v3 = RomPtr_A7(GET_WORD(v2 + 4));
+ R22_ = E->base.x_pos + GET_WORD(v3);
+ R20_ = E->base.y_pos + GET_WORD(v3 + 2);
+ R18_ = E->base.y_pos + GET_WORD(v3 + 6);
if (projectile_counter) {
for (int i = 2 * projectile_counter; i >= 0; i -= 2) {
int v5 = i >> 1;
@@ -885,7 +862,7 @@ LABEL_7:
}
}
if (R48) {
- if (E->kraid_var_A == (uint16)FUNC16(Kraid_Mainloop_Thinking)) {
+ if (E->kraid_var_A == FUNC16(Kraid_Mainloop_Thinking)) {
E->kraid_var_A = FUNC16(Kraid_InitEyeGlowing);
uint16 kraid_mouth_flags = E->kraid_mouth_flags;
if ((kraid_mouth_flags & 1) != 0)
@@ -951,48 +928,48 @@ void Kraid_HealthBasedPaletteHandling(void) { // 0xA7B394
} while ((int16)(v4 - 32) < 0);
}
-uint16 Kraid_Instr_1(uint16 k, uint16 j) { // 0xA7B633
- return j;
+const uint16 *Kraid_Instr_1(uint16 k, const uint16 *jp) { // 0xA7B633
+ return jp;
}
-uint16 Kraid_Instr_DecYpos(uint16 k, uint16 j) { // 0xA7B636
+const uint16 *Kraid_Instr_DecYpos(uint16 k, const uint16 *jp) { // 0xA7B636
Enemy_Kraid *E = Get_Kraid(0);
--E->base.y_pos;
- return j;
+ return jp;
}
-uint16 Kraid_Instr_IncrYpos_Shake(uint16 k, uint16 j) { // 0xA7B63C
+const uint16 *Kraid_Instr_IncrYpos_Shake(uint16 k, const uint16 *jp) { // 0xA7B63C
Enemy_Kraid *E = Get_Kraid(0);
++E->base.y_pos;
earthquake_type = 1;
earthquake_timer = 10;
- return j;
+ return jp;
}
-uint16 Kraid_Instr_PlaySound_0x76(uint16 k, uint16 j) { // 0xA7B64E
+const uint16 *Kraid_Instr_PlaySound_0x76(uint16 k, const uint16 *jp) { // 0xA7B64E
QueueSfx2_Max6(0x76u);
- return j;
+ return jp;
}
-uint16 Kraid_Instr_XposMinus3(uint16 k, uint16 j) { // 0xA7B65A
+const uint16 *Kraid_Instr_XposMinus3(uint16 k, const uint16 *jp) { // 0xA7B65A
Enemy_Kraid *E = Get_Kraid(0);
E->base.x_pos -= g_word_A7A91C;
- return j;
+ return jp;
}
-uint16 Kraid_Instr_XposMinus3b(uint16 k, uint16 j) { // 0xA7B667
+const uint16 *Kraid_Instr_XposMinus3b(uint16 k, const uint16 *jp) { // 0xA7B667
Enemy_Kraid *E = Get_Kraid(0);
E->base.x_pos -= g_word_A7A91C;
- return j;
+ return jp;
}
-uint16 Kraid_Instr_XposPlus3(uint16 k, uint16 j) { // 0xA7B674
+const uint16 *Kraid_Instr_XposPlus3(uint16 k, const uint16 *jp) { // 0xA7B674
Enemy_Kraid *E = Get_Kraid(0);
E->base.x_pos += g_word_A7A920;
- return j;
+ return jp;
}
-uint16 Kraid_Instr_MoveHimRight(uint16 k, uint16 j) { // 0xA7B683
+const uint16 *Kraid_Instr_MoveHimRight(uint16 k, const uint16 *jp) { // 0xA7B683
uint16 v3;
Enemy_Kraid *E = Get_Kraid(0);
@@ -1006,7 +983,7 @@ uint16 Kraid_Instr_MoveHimRight(uint16 k, uint16 j) { // 0xA7B683
Get_Kraid(0x140u)->base.x_pos = x_pos;
}
}
- return j;
+ return jp;
}
void Kraid_InitEyeGlowing(void) { // 0xA7B6BF
@@ -1283,7 +1260,7 @@ void KraidsFoot_SecondPhase_Thinking(void) { // 0xA7BA2E
v4 = random_number & 0x1C;
if (!sign16(v4 - 16))
v4 = 16;
- uint16 *v5 = (uint16 *)RomPtr_A7(g_word_A7BA7D[(v2 >> 1) + 1] + v4);
+ const uint16 *v5 = (const uint16 *)RomPtr_A7(g_word_A7BA7D[(v2 >> 1) + 1] + v4);
uint16 v6 = v5[1];
if ((int16)(*v5 - E0->base.x_pos) >= 0)
Kraid_SetWalkingBackwards(v6, *v5);
@@ -1386,7 +1363,7 @@ void Kraid_Main_AttackWithMouthOpen(void) { // 0xA7BBEA
E->kraid_mouth_flags = 0;
}
} else {
- if (*((uint16 *)RomPtr_A7(E->kraid_var_B - 8) + 1) == (uint16)addr_kKraidTilemaps_3
+ if (*((uint16 *)RomPtr_A7(E->kraid_var_B - 8) + 1) == addr_kKraidTilemaps_3
&& (E->kraid_var_C & 0xF) == 0) {
SpawnEnemyProjectileWithGfx(
g_word_A7BC65[(uint8)(random_number & 0xE) >> 1],
@@ -1464,12 +1441,12 @@ void KraidsFingernail_Init(void) { // 0xA7BD60
v2 = g_off_A7BE3E[(uint8)(random_number & 6) >> 1];
else
v2 = g_off_A7BE46[(uint8)(random_number & 6) >> 1];
- uint8 *v3 = RomPtr_A7(v2);
+ const uint8 *v3 = RomPtr_A7(v2);
Enemy_Kraid *E = Get_Kraid(cur_enemy_index);
- E->kraid_var_B = *(uint16 *)v3;
- E->kraid_var_C = *((uint16 *)v3 + 1);
- E->kraid_var_D = *((uint16 *)v3 + 2);
- E->kraid_var_E = *((uint16 *)v3 + 3);
+ E->kraid_var_B = GET_WORD(v3);
+ E->kraid_var_C = GET_WORD(v3 + 2);
+ E->kraid_var_D = GET_WORD(v3 + 4);
+ E->kraid_var_E = GET_WORD(v3 + 6);
E->kraid_parameter_1 = 1;
E->base.properties &= ~(kEnemyProps_Tangible | kEnemyProps_Invisible);
E->base.instruction_timer = 1;
@@ -1597,11 +1574,11 @@ void Kraid_HandleFirstPhase(void) { // 0xA7C005
E0->kraid_next = FUNC16(Kraid_GetsBig_ReleaseCamera);
uint16 v2 = *((uint16 *)RomPtr_A7(E0->kraid_var_B) + 1);
uint16 v3 = 50;
- if (v2 != (uint16)addr_kKraidTilemaps_0) {
+ if (v2 != addr_kKraidTilemaps_0) {
v3 = 42;
- if (v2 != (uint16)addr_kKraidTilemaps_1) {
+ if (v2 != addr_kKraidTilemaps_1) {
v3 = 34;
- if (v2 != (uint16)addr_kKraidTilemaps_2)
+ if (v2 != addr_kKraidTilemaps_2)
v3 = 26;
}
}
@@ -2247,8 +2224,6 @@ void Phantoon_Func_2(uint16 k) { // 0xA7CF0C
}
uint8 Phantoon_Func_3(void) { // 0xA7CF27
- char v2; // t1
-
Enemy_Phantoon *E = Get_Phantoon(0xC0u);
if (E->phant_var_E) {
uint16 phant_var_D = E->phant_var_D;
@@ -2259,13 +2234,10 @@ uint8 Phantoon_Func_3(void) { // 0xA7CF27
return 1;
}
} else {
- R22_ = (uint8)((uint16)(R20_ & 0xFF00) >> 8);
+ R22_ = (R20_ & 0xFF00) >> 8;
uint16 v1 = R18_ + E->phant_var_D;
E->phant_var_D = v1;
- v1 &= 0xFF00u;
- v2 = v1;
- LOBYTE(v1) = HIBYTE(v1);
- HIBYTE(v1) = v2;
+ v1 = (v1 & 0xFF00) >> 8;
if (!sign16(v1 - R22_))
E->phant_var_D = R20_;
}
@@ -2482,7 +2454,7 @@ void Phantoon_MoveInFigure8_LeftSideClockwise(uint16 j) { // 0xA7D215
Enemy_Phantoon *E = Get_Phantoon(0);
for (R22_ = E->phant_var_C; R22_; --R22_) {
R18_ = 2 * E->phant_var_A;
- uint8 *v2 = RomPtr_A7(R18_ + j);
+ const uint8 *v2 = RomPtr_A7(R18_ + j);
uint16 v3 = (int8)v2[0];
R18_ = v3;
E->base.x_pos += v3;
@@ -2505,7 +2477,7 @@ void Phantoon_MoveInFigure8_RightSideClockwise(uint16 j) { // 0xA7D271
if (!v2) {
do {
R18_ = 2 * E->phant_var_A;
- uint8 *v4 = RomPtr_A7(R18_ + j);
+ const uint8 *v4 = RomPtr_A7(R18_ + j);
uint16 v5 = (int8)*v4;
R18_ = v5;
E->base.x_pos -= v5;
@@ -2580,7 +2552,7 @@ void Phantoon_MoveInSwoopingPattern(uint16 k) { // 0xA7D2D1
} else if (!sign16(v12 - 448)) {
v7->base.x_pos = 448;
}
- if (Get_Phantoon(k)->phant_var_F == (uint16)FUNC16(Phantoon_CompleteSwoopAfterFatalShot))
+ if (Get_Phantoon(k)->phant_var_F == FUNC16(Phantoon_CompleteSwoopAfterFatalShot))
v13 = 112;
else
v13 = samus_y_pos - 48;
@@ -2626,8 +2598,8 @@ void Phantoon_StartDeathSequence(uint16 k) { // 0xA7D421
int16 v3;
Enemy_Phantoon *E = Get_Phantoon(k);
- if (E->phant_var_F == (uint16)FUNC16(Phantoon_IsSwooping)
- || E->phant_var_F == (uint16)FUNC16(Phantoon_FadeoutWithSwoop)) {
+ if (E->phant_var_F == FUNC16(Phantoon_IsSwooping)
+ || E->phant_var_F == FUNC16(Phantoon_FadeoutWithSwoop)) {
E->phant_var_F = FUNC16(Phantoon_CompleteSwoopAfterFatalShot);
} else {
E->phant_var_F = FUNC16(Phantoon_DyingPhantoonFadeInOut);
@@ -3245,7 +3217,7 @@ PairU16 Phantoon_SetColorBasedOnHp_FindEntry(uint16 k) { // 0xA7DC0F
R20_ += R18_;
++R22_;
} while (sign16(R22_ - 7));
- uint16 *v1 = (uint16 *)RomPtr_A7(R24_ + g_off_A7DC4A[R22_]);
+ const uint16 *v1 = (const uint16 *)RomPtr_A7(R24_ + g_off_A7DC4A[R22_]);
return MakePairU16(R24_, *v1);
}
@@ -3267,26 +3239,13 @@ uint8 Phantoon_Func_9(void) { // 0xA7DC5A
}
uint16 Phantoon_Func_10_CalculateNthTransitionColorFromXtoY(uint16 a, uint16 k, uint16 j) { // 0xA7DC95
- int16 v3;
- char v4; // t0
- int16 v8;
-
- uint16 v7 = Phantoon_CalculateNthTransitionColorComponentFromXtoY(a, k & 0x1F, j & 0x1F);
- v8 = v7 | (32 * Phantoon_CalculateNthTransitionColorComponentFromXtoY(a, (k >> 5) & 0x1F, (j >> 5) & 0x1F));
- v3 = 4
- * Phantoon_CalculateNthTransitionColorComponentFromXtoY(
- a,
- ((uint16)(k >> 2) >> 8) & 0x1F,
- ((uint16)(j >> 2) >> 8) & 0x1F);
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
- return v8 | v3;
+ return Phantoon_CalculateNthTransitionColorComponentFromXtoY(a, k & 0x1F, j & 0x1F) +
+ (Phantoon_CalculateNthTransitionColorComponentFromXtoY(a, (k >> 5) & 0x1F, (j >> 5) & 0x1F) << 5) +
+ (Phantoon_CalculateNthTransitionColorComponentFromXtoY(a, (k >> 10) & 0x1F, (j >> 10) & 0x1F) << 10);
}
uint16 Phantoon_CalculateNthTransitionColorComponentFromXtoY(uint16 a, uint16 k, uint16 j) { // 0xA7DCF1
int16 v4;
- int16 v9;
if (!a)
return k;
@@ -3299,9 +3258,7 @@ uint16 Phantoon_CalculateNthTransitionColorComponentFromXtoY(uint16 a, uint16 k,
uint8 v6 = abs16(R18_);
uint16 RegWord = SnesDivide(v6 << 8, LOBYTE(E->phant_var_D) - R20_ + 1);
R18_ = sign16(R18_) ? -RegWord : RegWord;
- LOBYTE(v9) = HIBYTE(k);
- HIBYTE(v9) = k;
- return (uint16)(R18_ + v9) >> 8;
+ return (uint16)(R18_ + swap16(k)) >> 8;
}
void Phantoon_Hurt(void) { // 0xA7DD3F
@@ -3356,9 +3313,9 @@ void Phantoon_Shot(void) { // 0xA7DD9B
if ((EK->base.ai_handler_bits & 2) != 0) {
QueueSfx2_Max6(0x73u);
uint16 phanto_var_F = EK->phant_var_F;
- if (phanto_var_F != (uint16)FUNC16(Phantoon_EyeFollowsSamusUntilTimerRunsOut)
- && phanto_var_F != (uint16)FUNC16(Phantoon_FollowSamusWithEyeDuringFireballRain)) {
- if (phanto_var_F != (uint16)FUNC16(Phantoon_IsSwooping)) {
+ if (phanto_var_F != FUNC16(Phantoon_EyeFollowsSamusUntilTimerRunsOut)
+ && phanto_var_F != FUNC16(Phantoon_FollowSamusWithEyeDuringFireballRain)) {
+ if (phanto_var_F != FUNC16(Phantoon_IsSwooping)) {
LABEL_20:
Get_Phantoon(0x80)->phant_parameter_2 = 2;
return;
@@ -3855,19 +3812,15 @@ void Dachora_Main(void) { // 0xA7F52E
Enemy_Dachora *E = Get_Dachora(cur_enemy_index);
CallEnemyPreInstr(E->dachor_var_F | 0xA70000);
}
-#define g_off_A7F55F ((uint16*)RomPtr(0xa7f55f))
void Dachora_Func_1(uint16 j, uint16 k) { // 0xA7F535
- uint16 v3;
-
*(VoidP *)((char *)&R0_.addr + 1) = 32256;
Enemy_Dachora *E = Get_Dachora(k);
- LOBYTE(v3) = HIBYTE(E->base.palette_index);
- HIBYTE(v3) = E->base.palette_index;
+ uint16 v3 = swap16(E->base.palette_index);
R0_.addr = g_off_A7F55F[v3 >> 1];
uint16 v5 = 0;
do {
- uint16 *v6 = (uint16 *)RomPtr_A7(j);
- IndirWriteWord(&R0_, v5, *v6);
+ const uint16 *v6 = (const uint16 *)RomPtr_A7(j);
+ IndirWriteWord(R0_, v5, *v6);
j += 2;
v5 += 2;
} while ((int16)(v5 - 32) < 0);
@@ -3960,7 +3913,7 @@ void Dachora_Func_6(uint16 k) { // 0xA7F6D5
uint16 v2 = E->dachor_var_E - 1;
E->dachor_var_E = v2;
if (!(uint8)v2) {
- Dachora_Func_1(g_off_A7F787[(uint16)(2 * HIBYTE(E->dachor_var_E)) >> 1], k);
+ Dachora_Func_1(g_off_A7F787[HIBYTE(E->dachor_var_E)], k);
uint16 v3 = E->dachor_var_E + 272;
E->dachor_var_E = v3;
if (!sign16(v3 - 1040))
@@ -4114,7 +4067,7 @@ void Dachora_Func_9(uint16 k) { // 0xA7F89A
void Dachora_Func_10(uint16 k) { // 0xA7F90A
Enemy_Dachora *E = Get_Dachora(k);
- Dachora_Func_1(g_off_A7F92D[(uint16)(2 * HIBYTE(E->dachor_var_E)) >> 1], k);
+ Dachora_Func_1(g_off_A7F92D[HIBYTE(E->dachor_var_E)], k);
uint16 v2 = E->dachor_var_E + 256;
E->dachor_var_E = v2;
if (!sign16(v2 - 1024))
@@ -4164,4 +4117,4 @@ LABEL_6:
return;
}
E->base.properties &= ~kEnemyProps_Invisible;
-}
+}
\ No newline at end of file
diff --git a/src/sm_a8.c b/src/sm_a8.c
index b73e323..38ceeac 100644
--- a/src/sm_a8.c
+++ b/src/sm_a8.c
@@ -6,9 +6,38 @@
#include "funcs.h"
#include "enemy_types.h"
+
+#define g_off_A890DA ((uint16*)RomFixedPtr(0xa890da))
+#define g_word_A8A0A7 (*(uint16*)RomFixedPtr(0xa8a0a7))
+#define g_word_A8A0A9 (*(uint16*)RomFixedPtr(0xa8a0a9))
+#define g_word_A8A0AB (*(uint16*)RomFixedPtr(0xa8a0ab))
+#define g_word_A8A0AD (*(uint16*)RomFixedPtr(0xa8a0ad))
+#define g_word_A8A0B3 (*(uint16*)RomFixedPtr(0xa8a0b3))
+#define g_word_A8A0B5 (*(uint16*)RomFixedPtr(0xa8a0b5))
+#define g_word_A8A0B7 (*(uint16*)RomFixedPtr(0xa8a0b7))
+#define g_word_A8A0B9 (*(uint16*)RomFixedPtr(0xa8a0b9))
+#define g_word_A8A0BB (*(uint16*)RomFixedPtr(0xa8a0bb))
+#define g_word_A8A0BD (*(uint16*)RomFixedPtr(0xa8a0bd))
+#define g_word_A8A0C3 (*(uint16*)RomFixedPtr(0xa8a0c3))
+#define g_word_A8A0C5 (*(uint16*)RomFixedPtr(0xa8a0c5))
+#define g_off_A8A097 ((uint16*)RomFixedPtr(0xa8a097))
+#define kNorfairLavaMan_Palette ((uint16*)RomFixedPtr(0xa8ac1c))
+#define g_word_A8AF79 ((uint16*)RomFixedPtr(0xa8af79))
+#define g_word_A8AF55 ((uint16*)RomFixedPtr(0xa8af55))
+#define g_off_A8AF67 ((uint16*)RomFixedPtr(0xa8af67))
+#define kBeetom_Ilist_B74E ((uint16*)RomFixedPtr(0xa8b74e))
+#define g_off_A8C599 ((uint16*)RomFixedPtr(0xa8c599))
+#define g_off_A8CC30 ((uint16*)RomFixedPtr(0xa8cc30))
+#define g_off_A8E380 ((uint16*)RomFixedPtr(0xa8e380))
+#define g_off_A8E682 ((uint16*)RomFixedPtr(0xa8e682))
+#define g_off_A8E688 ((uint16*)RomFixedPtr(0xa8e688))
+#define g_word_A8E7CC ((uint16*)RomFixedPtr(0xa8e7cc))
+#define g_off_A8F3B0 ((uint16*)RomFixedPtr(0xa8f3b0))
+
+
+
static const int16 g_word_A890CA[4] = { -8, 8, 0, 0 };
static const int16 g_word_A890D2[4] = { 0, 0, -8, 8 };
-#define g_off_A890DA ((uint16*)RomPtr(0xa890da))
static const uint16 g_word_A89050 = 0x80;
static const uint16 g_word_A89052 = 0xb0;
static const uint16 g_word_A89054 = 0x80;
@@ -26,26 +55,8 @@ static const uint16 kWreckedShipGhost_Palette[16] = { 0x3800, 0x57ff, 0x42f7, 0x
static const uint16 g_word_A89D32 = 1;
static const uint16 g_word_A89D34 = 1;
-#define g_word_A8A0A7 (*(uint16*)RomPtr(0xa8a0a7))
-#define g_word_A8A0A9 (*(uint16*)RomPtr(0xa8a0a9))
-#define g_word_A8A0AB (*(uint16*)RomPtr(0xa8a0ab))
-#define g_word_A8A0AD (*(uint16*)RomPtr(0xa8a0ad))
-#define g_word_A8A0B3 (*(uint16*)RomPtr(0xa8a0b3))
-#define g_word_A8A0B5 (*(uint16*)RomPtr(0xa8a0b5))
-#define g_word_A8A0B7 (*(uint16*)RomPtr(0xa8a0b7))
-#define g_word_A8A0B9 (*(uint16*)RomPtr(0xa8a0b9))
-#define g_word_A8A0BB (*(uint16*)RomPtr(0xa8a0bb))
-#define g_word_A8A0BD (*(uint16*)RomPtr(0xa8a0bd))
-#define g_word_A8A0C3 (*(uint16*)RomPtr(0xa8a0c3))
-#define g_word_A8A0C5 (*(uint16*)RomPtr(0xa8a0c5))
-#define g_off_A8A097 ((uint16*)RomPtr(0xa8a097))
-#define kNorfairLavaMan_Palette ((uint16*)RomPtr(0xa8ac1c))
-#define g_word_A8AF79 ((uint16*)RomPtr(0xa8af79))
-#define g_word_A8AF55 ((uint16*)RomPtr(0xa8af55))
-#define g_off_A8AF67 ((uint16*)RomPtr(0xa8af67))
-#define kBeetom_Ilist_B74E ((uint16*)RomPtr(0xa8b74e))
static const int16 g_word_A8C277[3] = { -12, -16, -20 };
static const int16 g_word_A8C27D[3] = { -20, -16, -12 };
static const uint16 g_word_A8C19F = 0x40;
@@ -59,8 +70,6 @@ static const uint16 g_word_A8C1C3 = 0;
static const uint16 g_word_A8C1C5 = 0xffff;
static const uint16 g_word_A8C1C7 = 0x8000;
-#define g_off_A8C599 ((uint16*)RomPtr(0xa8c599))
-#define g_off_A8CC30 ((uint16*)RomPtr(0xa8cc30))
static const int16 g_word_A8CCC1[31] = {
0x1f, 0x18, 0xf, 8, 0x40,
0x18, 0xf, 8, 0x1f, 0x10,
@@ -88,48 +97,11 @@ static const int16 g_word_A8D895[26] = {
};
static const uint16 g_word_A8DCC7 = 0x50;
static const uint16 g_word_A8DCCB = 0x70;
-#define g_off_A8E380 ((uint16*)RomPtr(0xa8e380))
-#define g_off_A8E682 ((uint16*)RomPtr(0xa8e682))
-#define g_off_A8E688 ((uint16*)RomPtr(0xa8e688))
-#define g_word_A8E7CC ((uint16*)RomPtr(0xa8e7cc))
-#define g_off_A8F3B0 ((uint16*)RomPtr(0xa8f3b0))
static const uint16 g_word_A8F180 = 0x60;
static const uint16 g_word_A8F182 = 0xe000;
static const uint16 g_word_A8F184 = 0;
static const uint8 g_byte_A8F186 = 0x30;
-uint16 EnemyInstr_DisableOffScreenProcessing_A8(uint16 k, uint16 j) { // 0xA8817D
- EnemyData *v2 = gEnemyData(k);
- v2->properties &= ~kEnemyProps_ProcessedOffscreen;
- return j;
-}
-uint16 EnemyInstr_EnableOffScreenProcessing_A8(uint16 k, uint16 j) { // 0xA88173
- EnemyData *v2 = gEnemyData(k);
- v2->properties |= kEnemyProps_ProcessedOffscreen;
- return j;
-}
-uint16 EnemyInstr_SetTimer_A8(uint16 k, uint16 j) { // 0xA88123
- uint16 v2 = *(uint16 *)RomPtr_A8(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-uint16 EnemyInstr_Sleep_A8(uint16 k, uint16 j) { // 0xA8812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
-
-uint16 EnemyInstr_Goto_A8(uint16 k, uint16 j) { // 0xA880ED
- return *(uint16 *)RomPtr_A8(j);
-}
-
-uint16 EnemyInstr_DecTimerAndGoto2_A8(uint16 k, uint16 j) { // 0xA88110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_A8(k, j);
-}
-
void Enemy_GrappleReact_NoInteract_A8(void) { // 0xA88000
SwitchEnemyAiToMainAi();
}
@@ -166,35 +138,35 @@ void Enemy_NormalFrozenAI_A8(void) { // 0xA88041
NormalEnemyFrozenAI();
}
-uint16 MiniDraygon_Instr_2(uint16 k, uint16 j) { // 0xA8878F
+const uint16 *MiniDraygon_Instr_2(uint16 k, const uint16 *jp) { // 0xA8878F
QueueSfx2_Max6(0x5Eu);
- return j;
+ return jp;
}
-uint16 MiniDraygon_Instr_1(uint16 k, uint16 j) { // 0xA8879B
- if (gEnemySpawnData(cur_enemy_index)[30].cause_of_death == (uint16)addr_kMiniDraygon_Ilist_870B)
+const uint16 *MiniDraygon_Instr_1(uint16 k, const uint16 *jp) { // 0xA8879B
+ if (gEnemySpawnData(cur_enemy_index)[30].cause_of_death == addr_kMiniDraygon_Ilist_870B)
Get_MiniDraygon(cur_enemy_index)->mdn_var_F = -8;
else
Get_MiniDraygon(cur_enemy_index)->mdn_var_F = 8;
- return j;
+ return jp;
}
-uint16 MiniDraygon_Instr_3(uint16 k, uint16 j) { // 0xA887B6
+const uint16 *MiniDraygon_Instr_3(uint16 k, const uint16 *jp) { // 0xA887B6
Enemy_MiniDraygon *E = Get_MiniDraygon(cur_enemy_index);
- if (gEnemySpawnData(cur_enemy_index)[30].cause_of_death == (uint16)addr_kMiniDraygon_Ilist_870B) {
+ if (gEnemySpawnData(cur_enemy_index)[30].cause_of_death == addr_kMiniDraygon_Ilist_870B) {
++E->mdn_var_F;
} else {
--E->mdn_var_F;
}
- return j;
+ return jp;
}
-uint16 MiniDraygon_Instr_4(uint16 k, uint16 j) { // 0xA887CB
+const uint16 *MiniDraygon_Instr_4(uint16 k, const uint16 *jp) { // 0xA887CB
Enemy_MiniDraygon *E = Get_MiniDraygon(cur_enemy_index);
E->mdn_var_0C = 0;
E->mdn_var_0B = 0;
E->mdn_var_C = FUNC16(MiniDraygon_Func_8);
- return j;
+ return jp;
}
void MiniDraygon_Init(void) { // 0xA887E0
@@ -448,7 +420,7 @@ void MiniDraygon_Func_13(void) { // 0xA88B16
if (frozen_timer) {
E1->base.frozen_timer = frozen_timer;
E1->base.ai_handler_bits |= 4u;
- if (E2->mdn_var_C != (uint16)FUNC16(MiniDraygon_Func_9)) {
+ if (E2->mdn_var_C != FUNC16(MiniDraygon_Func_9)) {
E2->base.ai_handler_bits |= 4u;
E2->base.frozen_timer = E->base.frozen_timer;
}
@@ -541,51 +513,51 @@ void MorphBallEye_Func_4(uint16 k) { // 0xA891CE
E->mbee_var_F = FUNC16(MorphBallEye_Func_1);
}
-uint16 Fune_Instr_2(uint16 k, uint16 j) { // 0xA89625
+const uint16 *Fune_Instr_2(uint16 k, const uint16 *jp) { // 0xA89625
QueueSfx2_Max9(0x1Fu);
- return j;
+ return jp;
}
-uint16 Fune_Instr_6(uint16 k, uint16 j) { // 0xA89631
+const uint16 *Fune_Instr_6(uint16 k, const uint16 *jp) { // 0xA89631
enemy_projectile_unk1995 = LOBYTE(Get_Fune(cur_enemy_index)->fune_parameter_2);
SpawnEnemyProjectileWithGfx(0, cur_enemy_index, addr_stru_86DFBC);
- return j;
+ return jp;
}
-uint16 Fune_Instr_7(uint16 k, uint16 j) { // 0xA8964A
+const uint16 *Fune_Instr_7(uint16 k, const uint16 *jp) { // 0xA8964A
enemy_projectile_unk1995 = LOBYTE(Get_Fune(cur_enemy_index)->fune_parameter_2);
SpawnEnemyProjectileWithGfx(1u, cur_enemy_index, addr_stru_86DFBC);
- return j;
+ return jp;
}
-uint16 Fune_Instr_1(uint16 k, uint16 j) { // 0xA89663
+const uint16 *Fune_Instr_1(uint16 k, const uint16 *jp) { // 0xA89663
enemy_projectile_unk1995 = LOBYTE(Get_Fune(cur_enemy_index)->fune_parameter_2);
SpawnEnemyProjectileWithGfx(0, cur_enemy_index, addr_stru_86DFCA);
- return j;
+ return jp;
}
-uint16 Fune_Instr_4(uint16 k, uint16 j) { // 0xA8967C
+const uint16 *Fune_Instr_4(uint16 k, const uint16 *jp) { // 0xA8967C
enemy_projectile_unk1995 = LOBYTE(Get_Fune(cur_enemy_index)->fune_parameter_2);
SpawnEnemyProjectileWithGfx(1u, cur_enemy_index, addr_stru_86DFCA);
- return j;
+ return jp;
}
-uint16 Fune_Instr_3(uint16 k, uint16 j) { // 0xA89695
+const uint16 *Fune_Instr_3(uint16 k, const uint16 *jp) { // 0xA89695
Enemy_Fune *E = Get_Fune(cur_enemy_index);
E->fune_var_A += 4;
E->fune_var_B = FUNC16(Fune_Func_1);
if (E->fune_var_D)
E->fune_var_B = FUNC16(Fune_Func_2);
- return j;
+ return jp;
}
-uint16 Fune_Instr_5(uint16 k, uint16 j) { // 0xA896B4
+const uint16 *Fune_Instr_5(uint16 k, const uint16 *jp) { // 0xA896B4
Enemy_Fune *E = Get_Fune(cur_enemy_index);
E->fune_var_A += 4;
E->fune_var_B = FUNC16(Fune_Func_1);
if (E->fune_var_D)
E->fune_var_B = FUNC16(Fune_Func_2);
- return j;
+ return jp;
}
void Fune_Init(void) { // 0xA896E3
@@ -661,8 +633,6 @@ void Fune_Func_4(void) { // 0xA8979B
}
void WreckedShipGhost_Init(void) { // 0xA89AEE
- int16 v2;
-
Enemy_WreckedShipGhost *E = Get_WreckedShipGhost(cur_enemy_index);
E->base.properties |= kEnemyProps_DisableSamusColl | kEnemyProps_Tangible | kEnemyProps_Invisible;
E->base.instruction_timer = 1;
@@ -671,15 +641,13 @@ void WreckedShipGhost_Init(void) { // 0xA89AEE
E->wsgt_var_A = FUNC16(WreckedShipGhost_Func_6);
E->wsgt_var_B = g_word_A89AA4 + 160;
- LOBYTE(v2) = HIBYTE(E->base.palette_index);
- HIBYTE(v2) = E->base.palette_index;
+ uint16 v2 = swap16(E->base.palette_index);
uint16 v3 = 16 * v2 + 256;
- R18_ = 16;
+ int n = 16;
do {
target_palettes[v3 >> 1] = 0;
v3 += 2;
- --R18_;
- } while ((R18_ & 0x8000u) == 0);
+ } while (--n >= 0);
}
void CallWreckedShipGhost(uint32 ea, uint16 k) {
@@ -700,17 +668,11 @@ void WreckedShipGhost_Main(void) { // 0xA89B3C
}
void WreckedShipGhost_Func_1(uint16 k) { // 0xA89B42
- int16 v1;
- int16 v3;
- int16 v7;
-
WreckedShipGhost_Func_3(k);
- v1 = 16;
Enemy_WreckedShipGhost *E = Get_WreckedShipGhost(cur_enemy_index);
- LOBYTE(v3) = HIBYTE(E->base.palette_index);
- HIBYTE(v3) = E->base.palette_index;
+ uint16 v3 = swap16(E->base.palette_index);
uint16 v4 = 16 * v3 + 256;
- R18_ = 16;
+ int n = 16, v1 = 0;
do {
int v5 = v4 >> 1;
if (sign16((palette_buffer[v5] & 0x1F) - 31)) {
@@ -718,12 +680,10 @@ void WreckedShipGhost_Func_1(uint16 k) { // 0xA89B42
--v1;
}
v4 += 2;
- --R18_;
- } while (R18_);
+ } while (--n);
if ((int16)(v1 - 16) >= 0) {
E->wsgt_var_A = FUNC16(WreckedShipGhost_Func_2);
- LOBYTE(v7) = HIBYTE(E->base.palette_index);
- HIBYTE(v7) = E->base.palette_index;
+ uint16 v7 = swap16(E->base.palette_index);
uint16 v8 = 16 * v7 + 256;
uint16 v9 = 0;
do {
@@ -799,8 +759,6 @@ void WreckedShipGhost_Func_4(uint16 k) { // 0xA89C69
}
void WreckedShipGhost_Func_5(uint16 k) { // 0xA89C8A
- int16 v8;
-
Enemy_WreckedShipGhost *E = Get_WreckedShipGhost(k);
uint16 y_subpos = E->base.y_subpos;
bool v3 = __CFADD__uint16(E->wsgt_var_01, y_subpos);
@@ -823,15 +781,15 @@ void WreckedShipGhost_Func_5(uint16 k) { // 0xA89C8A
if (!v6) {
E->wsgt_var_A = FUNC16(WreckedShipGhost_Func_4);
E->base.properties |= kEnemyProps_Tangible;
- LOBYTE(v8) = HIBYTE(E->base.palette_index);
- HIBYTE(v8) = E->base.palette_index;
- uint16 v9 = 16 * v8 + 256;
- R18_ = 16;
+
+ int t = E->base.palette_index * 256;
+ uint16 v9 = 16 * t + 256;
+ int n = 16;
do {
target_palettes[v9 >> 1] = 0x7FFF;
v9 += 2;
- --R18_;
- } while ((R18_ & 0x8000u) == 0);
+ n--;
+ } while ((n & 0x8000u) == 0);
}
}
@@ -916,7 +874,6 @@ LABEL_13:
}
uint16 WreckedShipGhost_Func_8(void) { // 0xA89E88
- int16 v2;
int16 v5;
int16 v7;
int16 v9;
@@ -924,8 +881,7 @@ uint16 WreckedShipGhost_Func_8(void) { // 0xA89E88
uint16 v0 = 0;
if (!door_transition_flag_enemies) {
Enemy_WreckedShipGhost *E = Get_WreckedShipGhost(cur_enemy_index);
- LOBYTE(v2) = HIBYTE(E->base.palette_index);
- HIBYTE(v2) = E->base.palette_index;
+ uint16 v2 = swap16(E->base.palette_index);
uint16 v3 = 16 * v2 + 256;
R20_ = 16 * v2 + 288;
do {
@@ -974,52 +930,52 @@ uint16 WreckedShipGhost_Func_8(void) { // 0xA89E88
return v0;
}
-uint16 YappingMaw_Instr_2(uint16 k, uint16 j) { // 0xA8A0C7
+const uint16 *YappingMaw_Instr_2(uint16 k, const uint16 *jp) { // 0xA8A0C7
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0AB;
E->ymw_var_33 = g_word_A8A0AD;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_4(uint16 k, uint16 j) { // 0xA8A0D9
+const uint16 *YappingMaw_Instr_4(uint16 k, const uint16 *jp) { // 0xA8A0D9
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0C3;
E->ymw_var_33 = g_word_A8A0C5;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_5(uint16 k, uint16 j) { // 0xA8A0EB
+const uint16 *YappingMaw_Instr_5(uint16 k, const uint16 *jp) { // 0xA8A0EB
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0B3;
E->ymw_var_33 = g_word_A8A0B5;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_7(uint16 k, uint16 j) { // 0xA8A0FD
+const uint16 *YappingMaw_Instr_7(uint16 k, const uint16 *jp) { // 0xA8A0FD
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0BB;
E->ymw_var_33 = g_word_A8A0BD;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_3(uint16 k, uint16 j) { // 0xA8A10F
+const uint16 *YappingMaw_Instr_3(uint16 k, const uint16 *jp) { // 0xA8A10F
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0A7;
E->ymw_var_33 = g_word_A8A0A9;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_6(uint16 k, uint16 j) { // 0xA8A121
+const uint16 *YappingMaw_Instr_6(uint16 k, const uint16 *jp) { // 0xA8A121
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
E->ymw_var_32 = g_word_A8A0B7;
E->ymw_var_33 = g_word_A8A0B9;
- return j;
+ return jp;
}
-uint16 YappingMaw_Instr_1(uint16 k, uint16 j) { // 0xA8A133
+const uint16 *YappingMaw_Instr_1(uint16 k, const uint16 *jp) { // 0xA8A133
if (!Get_YappingMaw(cur_enemy_index)->ymw_var_36)
QueueSfx2_Max6(0x2Fu);
- return j;
+ return jp;
}
void YappingMaw_Init(void) { // 0xA8A148
@@ -1346,7 +1302,7 @@ void YappingMaw_Func_11(void) { // 0xA8A68A
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
if (E->ymw_var_30)
YappingMaw_Func_10();
- if ((--E->ymw_var_E & 0x8000u) != 0 && samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D)) {
+ if ((--E->ymw_var_E & 0x8000u) != 0 && samus_input_handler != FUNC16(Samus_InputHandler_E91D)) {
samus_input_handler = FUNC16(Samus_InputHandler_E913);
E->ymw_var_30 = 0;
E->ymw_var_35 = 48;
@@ -1393,7 +1349,7 @@ uint16 YappingMaw_Func_17(uint16 a) { // 0xA8A742
R18_ = a;
R20_ = 0;
R22_ = 0;
- v1 = kSine16bit[(uint16)(2 * (uint8)-(int8)a) >> 1];
+ v1 = kSine16bit[(uint8)-(int8)a];
if (v1 < 0) {
v1 = -v1;
++R20_;
@@ -1422,7 +1378,7 @@ void YappingMaw_Shot(void) { // 0xA8A7BD
Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index);
if (E->base.health) {
if (E->base.frozen_timer) {
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(Samus_InputHandler_E913);
E->ymw_var_30 = 0;
}
@@ -1432,7 +1388,7 @@ void YappingMaw_Shot(void) { // 0xA8A7BD
*(uint16 *)((char *)enemy_projectile_id + E->ymw_var_42) = 0;
*(uint16 *)((char *)enemy_projectile_id + E->ymw_var_43) = 0;
sprite_instr_list_ptrs[E->ymw_var_46 >> 1] = 0;
- if (samus_input_handler != (uint16)FUNC16(Samus_InputHandler_E91D))
+ if (samus_input_handler != FUNC16(Samus_InputHandler_E91D))
samus_input_handler = FUNC16(Samus_InputHandler_E913);
Get_YappingMaw(cur_enemy_index)->ymw_var_30 = 0;
}
@@ -1527,55 +1483,54 @@ void Kago_Shot(void) { // 0xA8AB83
SpawnEnemyProjectileWithGfx(E->base.y_pos, cur_enemy_index, addr_loc_A8D02E);
}
-uint16 NorfairLavaMan_Instr_1(uint16 k, uint16 j) { // 0xA8AE12
+const uint16 *NorfairLavaMan_Instr_1(uint16 k, const uint16 *jp) { // 0xA8AE12
if (!CheckIfEnemyIsOnScreen()) {
- uint16 *v2 = (uint16 *)RomPtr_A8(j);
- QueueSfx2_Max6(*v2);
+ QueueSfx2_Max6(jp[0]);
}
- return j + 2;
+ return jp + 1;
}
-uint16 NorfairLavaMan_Instr_8(uint16 k, uint16 j) { // 0xA8AE26
+const uint16 *NorfairLavaMan_Instr_8(uint16 k, const uint16 *jp) { // 0xA8AE26
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
++E->base.y_pos;
++E->base.y_pos;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_14(uint16 k, uint16 j) { // 0xA8AE30
+const uint16 *NorfairLavaMan_Instr_14(uint16 k, const uint16 *jp) { // 0xA8AE30
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
--E->base.y_pos;
--E->base.y_pos;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_2(uint16 k, uint16 j) { // 0xA8AE3A
+const uint16 *NorfairLavaMan_Instr_2(uint16 k, const uint16 *jp) { // 0xA8AE3A
Get_NorfairLavaMan(cur_enemy_index)->nlmn_var_01 = 1;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_7(uint16 k, uint16 j) { // 0xA8AE45
+const uint16 *NorfairLavaMan_Instr_7(uint16 k, const uint16 *jp) { // 0xA8AE45
Get_NorfairLavaMan(cur_enemy_index)->nlmn_var_01 = 0;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_10(uint16 k, uint16 j) { // 0xA8AE50
+const uint16 *NorfairLavaMan_Instr_10(uint16 k, const uint16 *jp) { // 0xA8AE50
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
--E->base.y_pos;
Enemy_NorfairLavaMan *E1 = Get_NorfairLavaMan(cur_enemy_index + 64);
--E1->base.y_pos;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_12(uint16 k, uint16 j) { // 0xA8AE5A
+const uint16 *NorfairLavaMan_Instr_12(uint16 k, const uint16 *jp) { // 0xA8AE5A
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
++E->base.y_pos;
Enemy_NorfairLavaMan *E1 = Get_NorfairLavaMan(cur_enemy_index + 64);
++E1->base.y_pos;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_9(uint16 k, uint16 j) { // 0xA8AE64
+const uint16 *NorfairLavaMan_Instr_9(uint16 k, const uint16 *jp) { // 0xA8AE64
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
uint16 v4 = E->nlmn_var_03 + 24;
E->base.y_pos = v4;
@@ -1584,18 +1539,18 @@ uint16 NorfairLavaMan_Instr_9(uint16 k, uint16 j) { // 0xA8AE64
E1->base.properties &= ~0x100u;
Enemy_NorfairLavaMan *E2 = Get_NorfairLavaMan(cur_enemy_index + 128);
E2->base.properties &= ~0x100u;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_11(uint16 k, uint16 j) { // 0xA8AE88
+const uint16 *NorfairLavaMan_Instr_11(uint16 k, const uint16 *jp) { // 0xA8AE88
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
uint16 nlmn_var_03 = E->nlmn_var_03;
E->base.y_pos = nlmn_var_03;
Get_NorfairLavaMan(cur_enemy_index + 64)->base.y_pos = nlmn_var_03;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_13(uint16 k, uint16 j) { // 0xA8AE96
+const uint16 *NorfairLavaMan_Instr_13(uint16 k, const uint16 *jp) { // 0xA8AE96
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
uint16 v4 = E->nlmn_var_03 + 4;
E->base.y_pos = v4;
@@ -1604,41 +1559,41 @@ uint16 NorfairLavaMan_Instr_13(uint16 k, uint16 j) { // 0xA8AE96
E1->base.properties |= 0x100u;
Enemy_NorfairLavaMan *E2 = Get_NorfairLavaMan(cur_enemy_index + 128);
E2->base.properties |= 0x100u;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_5(uint16 k, uint16 j) { // 0xA8AEBA
+const uint16 *NorfairLavaMan_Instr_5(uint16 k, const uint16 *jp) { // 0xA8AEBA
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
SpawnEnemyProjectileWithGfx(E->nlmn_var_B, cur_enemy_index, addr_kEproj_LavaThrownByLavaman);
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_15(uint16 k, uint16 j) { // 0xA8AECA
+const uint16 *NorfairLavaMan_Instr_15(uint16 k, const uint16 *jp) { // 0xA8AECA
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
E->base.x_pos = E->nlmn_var_12 + 8;
E->base.y_pos = E->nlmn_var_13 - 4;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_4(uint16 k, uint16 j) { // 0xA8AEE4
+const uint16 *NorfairLavaMan_Instr_4(uint16 k, const uint16 *jp) { // 0xA8AEE4
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
E->base.x_pos = E->nlmn_var_12 - 8;
E->base.y_pos = E->nlmn_var_13 - 4;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_16(uint16 k, uint16 j) { // 0xA8AEFE
+const uint16 *NorfairLavaMan_Instr_16(uint16 k, const uint16 *jp) { // 0xA8AEFE
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
E->base.x_pos = E->nlmn_var_12 + 8;
E->base.y_pos = E->nlmn_var_13 - 8;
- return j;
+ return jp;
}
-uint16 NorfairLavaMan_Instr_6(uint16 k, uint16 j) { // 0xA8AF18
+const uint16 *NorfairLavaMan_Instr_6(uint16 k, const uint16 *jp) { // 0xA8AF18
Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index);
E->base.x_pos = E->nlmn_var_12 - 8;
E->base.y_pos = E->nlmn_var_13 - 4;
- return j;
+ return jp;
}
void sub_A8AF32(void) { // 0xA8AF32
@@ -1647,9 +1602,9 @@ void sub_A8AF32(void) { // 0xA8AF32
E->base.y_pos = E->nlmn_var_13;
}
-uint16 NorfairLavaMan_Instr_3(uint16 k, uint16 j) { // 0xA8AF44
+const uint16 *NorfairLavaMan_Instr_3(uint16 k, const uint16 *jp) { // 0xA8AF44
Get_NorfairLavaMan(cur_enemy_index)->nlmn_var_04 = 256;
- return j;
+ return jp;
}
static Func_V *const g_off_A8AF4F[3] = { NorfairLavaMan_Func_1, NorfairLavaMan_Func_2, NorfairLavaMan_Func_3 };
void NorfairLavaMan_Init(void) { // 0xA8AF8B
@@ -1888,7 +1843,7 @@ void NorfairLavaMan_Func_14(uint16 k) { // 0xA8B2C5
}
void NorfairLavaMan_Func_15(uint16 k) { // 0xA8B30D
- if (enemy_drawing_queue[(cur_enemy_index >> 1) + 87] == (uint16)FUNC16(NorfairLavaMan_Func_8))
+ if (enemy_drawing_queue[(cur_enemy_index >> 1) + 87] == FUNC16(NorfairLavaMan_Func_8))
Get_NorfairLavaMan(cur_enemy_index)->nlmn_var_F = FUNC16(NorfairLavaMan_Func_17);
}
@@ -1928,7 +1883,7 @@ void NorfairLavaMan_Func_17(uint16 k) { // 0xA8B356
void NorfairLavaMan_Func_18(uint16 k) { // 0xA8B3A7
int v1 = cur_enemy_index >> 1;
- if (enemy_drawing_queue[v1 + 87] == (uint16)FUNC16(NorfairLavaMan_Func_7))
+ if (enemy_drawing_queue[v1 + 87] == FUNC16(NorfairLavaMan_Func_7))
Get_NorfairLavaMan(cur_enemy_index)->nlmn_var_F = FUNC16(NorfairLavaMan_Func_15);
else
Get_NorfairLavaMan(cur_enemy_index)->base.y_pos = enemy_drawing_queue[v1 + 93]
@@ -1987,8 +1942,8 @@ void NorfairLavaMan_Common(void) { // 0xA8B410
}
}
-uint16 Beetom_Instr_1(uint16 k, uint16 j) { // 0xA8B75E
- return j;
+const uint16 *Beetom_Instr_1(uint16 k, const uint16 *jp) { // 0xA8B75E
+ return jp;
}
void Beetom_Func_1(void) { // 0xA8B762
@@ -2544,8 +2499,8 @@ void Beetom_Shot(void) { // 0xA8BEAC
Enemy_NormalShotAI_A8();
Enemy_Beetom *E = Get_Beetom(cur_enemy_index);
if (E->base.frozen_timer
- && (E->beetom_var_C == (uint16)FUNC16(Beetom_Func_33)
- || E->beetom_var_C == (uint16)FUNC16(Beetom_Func_32))) {
+ && (E->beetom_var_C == FUNC16(Beetom_Func_33)
+ || E->beetom_var_C == FUNC16(Beetom_Func_32))) {
E->beetom_var_C = FUNC16(Beetom_Func_15);
}
E->beetom_var_08 = 0;
@@ -2851,7 +2806,8 @@ void MaridiaFloater_Func_13(uint16 k) { // 0xA8C59F
enemy_drawing_queue[v4 + 100] = 0;
enemy_drawing_queue[v4 + 97] |= 0x200u;
MaridiaFloater_Func_1(k);
- printf("A undefined!\n"); v5 = 0;
+ //printf("A undefined!\n");
+ v5 = 0;
EnemyDeathAnimation(k, v5);
} else {
MaridiaFloater_Func_2(k);
@@ -2992,7 +2948,7 @@ void WreckedShipRobot_Func_2(uint16 k) { // 0xA8CCFF
E->wsrt_var_B = wsrt_var_B - 1;
}
-uint16 WreckedShipRobot_Instr_4(uint16 k, uint16 j) { // 0xA8CD09
+const uint16 *WreckedShipRobot_Instr_4(uint16 k, const uint16 *jp) { // 0xA8CD09
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = -512;
@@ -3000,7 +2956,7 @@ uint16 WreckedShipRobot_Instr_4(uint16 k, uint16 j) { // 0xA8CD09
R20_ = -4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_kWreckedShipRobot_Ilist_C73F;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C73F);
} else {
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
@@ -3020,13 +2976,13 @@ uint16 WreckedShipRobot_Instr_4(uint16 k, uint16 j) { // 0xA8CD09
E->base.x_pos = E->wsrt_var_C;
E->base.y_pos = E->wsrt_var_D;
E->wsrt_var_A = 512;
- return addr_kWreckedShipRobot_Ilist_CB65;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_CB65);
}
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_9(uint16 k, uint16 j) { // 0xA8CDA4
+const uint16 *WreckedShipRobot_Instr_9(uint16 k, const uint16 *jp) { // 0xA8CDA4
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = -512;
@@ -3034,15 +2990,15 @@ uint16 WreckedShipRobot_Instr_9(uint16 k, uint16 j) { // 0xA8CDA4
R20_ = -4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_kWreckedShipRobot_Ilist_C73F;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C73F);
} else if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
extra_samus_x_displacement = -4;
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_6(uint16 k, uint16 j) { // 0xA8CDEA
+const uint16 *WreckedShipRobot_Instr_6(uint16 k, const uint16 *jp) { // 0xA8CDEA
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = -512;
@@ -3050,7 +3006,7 @@ uint16 WreckedShipRobot_Instr_6(uint16 k, uint16 j) { // 0xA8CDEA
R20_ = 4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_stru_A8C6E9;
+ return INSTR_RETURN_ADDR(addr_stru_A8C6E9);
} else {
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
@@ -3070,13 +3026,13 @@ uint16 WreckedShipRobot_Instr_6(uint16 k, uint16 j) { // 0xA8CDEA
E->base.x_pos = E->wsrt_var_C;
E->base.y_pos = E->wsrt_var_D;
E->wsrt_var_A = -512;
- return addr_kWreckedShipRobot_Ilist_C91B;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C91B);
}
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_8(uint16 k, uint16 j) { // 0xA8CE85
+const uint16 *WreckedShipRobot_Instr_8(uint16 k, const uint16 *jp) { // 0xA8CE85
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = -512;
@@ -3084,19 +3040,19 @@ uint16 WreckedShipRobot_Instr_8(uint16 k, uint16 j) { // 0xA8CE85
R20_ = 4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_stru_A8C6E9;
+ return INSTR_RETURN_ADDR(addr_stru_A8C6E9);
} else if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
extra_samus_x_displacement = 4;
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_7(uint16 k, uint16 j) { // 0xA8CECB
- return addr_kWreckedShipRobot_Ilist_C92D;
+const uint16 *WreckedShipRobot_Instr_7(uint16 k, const uint16 *jp) { // 0xA8CECB
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C92D);
}
-uint16 WreckedShipRobot_Instr_15(uint16 k, uint16 j) { // 0xA8CECF
+const uint16 *WreckedShipRobot_Instr_15(uint16 k, const uint16 *jp) { // 0xA8CECF
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = 512;
@@ -3104,7 +3060,7 @@ uint16 WreckedShipRobot_Instr_15(uint16 k, uint16 j) { // 0xA8CECF
R20_ = 4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_kWreckedShipRobot_Ilist_C985;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C985);
} else {
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
@@ -3124,13 +3080,13 @@ uint16 WreckedShipRobot_Instr_15(uint16 k, uint16 j) { // 0xA8CECF
E->base.x_pos = E->wsrt_var_C;
E->base.y_pos = E->wsrt_var_D;
E->wsrt_var_A = -512;
- return addr_kWreckedShipRobot_Ilist_C91B;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C91B);
}
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_18(uint16 k, uint16 j) { // 0xA8CF6A
+const uint16 *WreckedShipRobot_Instr_18(uint16 k, const uint16 *jp) { // 0xA8CF6A
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = 512;
@@ -3138,15 +3094,15 @@ uint16 WreckedShipRobot_Instr_18(uint16 k, uint16 j) { // 0xA8CF6A
R20_ = 4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_kWreckedShipRobot_Ilist_C985;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_C985);
} else if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
extra_samus_x_displacement = 4;
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_16(uint16 k, uint16 j) { // 0xA8CFB0
+const uint16 *WreckedShipRobot_Instr_16(uint16 k, const uint16 *jp) { // 0xA8CFB0
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = 512;
@@ -3154,7 +3110,7 @@ uint16 WreckedShipRobot_Instr_16(uint16 k, uint16 j) { // 0xA8CFB0
R20_ = -4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_stru_A8C6E9;
+ return INSTR_RETURN_ADDR(addr_stru_A8C6E9);
} else {
if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
@@ -3174,13 +3130,13 @@ uint16 WreckedShipRobot_Instr_16(uint16 k, uint16 j) { // 0xA8CFB0
E->base.y_pos = E->wsrt_var_D;
E->base.x_pos = E->wsrt_var_C;
E->wsrt_var_A = 512;
- return addr_kWreckedShipRobot_Ilist_CB65;
+ return INSTR_RETURN_ADDR(addr_kWreckedShipRobot_Ilist_CB65);
}
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_17(uint16 k, uint16 j) { // 0xA8D04B
+const uint16 *WreckedShipRobot_Instr_17(uint16 k, const uint16 *jp) { // 0xA8D04B
WreckedShipRobot_Func_2(cur_enemy_index);
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
E->wsrt_var_A = 512;
@@ -3188,15 +3144,15 @@ uint16 WreckedShipRobot_Instr_17(uint16 k, uint16 j) { // 0xA8D04B
R20_ = -4;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
E->wsrt_var_B += 8;
- return addr_stru_A8C6E9;
+ return INSTR_RETURN_ADDR(addr_stru_A8C6E9);
} else if (CheckIfEnemyTouchesSamus(cur_enemy_index)) {
extra_samus_x_subdisplacement = 0;
extra_samus_x_displacement = -4;
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_3(uint16 k, uint16 j) { // 0xA8D091
+const uint16 *WreckedShipRobot_Instr_3(uint16 k, const uint16 *jp) { // 0xA8D091
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index);
if ((int16)(layer1_x_pos - E->base.x_pos) < 0
&& (int16)(layer1_x_pos + 256 - E->base.x_pos) >= 0
@@ -3204,26 +3160,26 @@ uint16 WreckedShipRobot_Instr_3(uint16 k, uint16 j) { // 0xA8D091
&& (int16)(layer1_y_pos + 224 - E->base.y_pos) >= 0) {
QueueSfx2_Max6(0x68u);
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_10(uint16 k, uint16 j) { // 0xA8D0C2
- return addr_stru_A8C6E9;
+const uint16 *WreckedShipRobot_Instr_10(uint16 k, const uint16 *jp) { // 0xA8D0C2
+ return INSTR_RETURN_ADDR(addr_stru_A8C6E9);
}
-uint16 WreckedShipRobot_Instr_14(uint16 k, uint16 j) { // 0xA8D0C6
+const uint16 *WreckedShipRobot_Instr_14(uint16 k, const uint16 *jp) { // 0xA8D0C6
R50 = addr_kWreckedShipRobot_Ilist_CB1D;
R48 = addr_kEproj_WreckedShipRobotLaserUpRight;
- return WreckedShipRobot_CommonInstr(k, j);
+ return WreckedShipRobot_CommonInstr(k, jp);
}
-uint16 WreckedShipRobot_Instr_2(uint16 k, uint16 j) { // 0xA8D0D2
+const uint16 *WreckedShipRobot_Instr_2(uint16 k, const uint16 *jp) { // 0xA8D0D2
R50 = addr_kWreckedShipRobot_Ilist_C8D1;
R48 = addr_kEproj_WreckedShipRobotLaserUpLeft;
- return WreckedShipRobot_CommonInstr(k, j);
+ return WreckedShipRobot_CommonInstr(k, jp);
}
-uint16 WreckedShipRobot_CommonInstr(uint16 k, uint16 j) { // 0xA8D0DC
+const uint16 *WreckedShipRobot_CommonInstr(uint16 k, const uint16 *jp) { // 0xA8D0DC
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(k);
if (E->wsrt_var_B) {
WreckedShipRobot_Func_2(k);
@@ -3231,22 +3187,22 @@ uint16 WreckedShipRobot_CommonInstr(uint16 k, uint16 j) { // 0xA8D0DC
uint16 v3 = (random_number & 0x1F) + 16;
E->wsrt_var_B = v3;
SpawnEnemyProjectileWithGfx(v3, cur_enemy_index, R48);
- return R50;
+ return INSTR_RETURN_ADDR(R50);
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_13(uint16 k, uint16 j) { // 0xA8D100
+const uint16 *WreckedShipRobot_Instr_13(uint16 k, const uint16 *jp) { // 0xA8D100
R50 = addr_kWreckedShipRobot_Ilist_CB09;
- return WreckedShipRobot_D10C(k, j);
+ return WreckedShipRobot_D10C(k, jp);
}
-uint16 WreckedShipRobot_Instr_1(uint16 k, uint16 j) { // 0xA8D107
+const uint16 *WreckedShipRobot_Instr_1(uint16 k, const uint16 *jp) { // 0xA8D107
R50 = addr_kWreckedShipRobot_Ilist_C8BD;
- return WreckedShipRobot_D10C(k, j);
+ return WreckedShipRobot_D10C(k, jp);
}
-uint16 WreckedShipRobot_D10C(uint16 k, uint16 j) { // 0xA8D10C
+const uint16 *WreckedShipRobot_D10C(uint16 k, const uint16 *jp) { // 0xA8D10C
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(k);
if (E->wsrt_var_B) {
WreckedShipRobot_Func_2(k);
@@ -3254,24 +3210,24 @@ uint16 WreckedShipRobot_D10C(uint16 k, uint16 j) { // 0xA8D10C
uint16 v3 = (random_number & 0x1F) + 16;
E->wsrt_var_B = v3;
SpawnEnemyProjectileWithGfx(v3, cur_enemy_index, addr_kEproj_WreckedShipRobotLaserHorizontal);
- return R50;
+ return INSTR_RETURN_ADDR(R50);
}
- return j;
+ return jp;
}
-uint16 WreckedShipRobot_Instr_12(uint16 k, uint16 j) { // 0xA8D131
+const uint16 *WreckedShipRobot_Instr_12(uint16 k, const uint16 *jp) { // 0xA8D131
R48 = addr_kEproj_WreckedShipRobotLaserDownRight;
R50 = addr_kWreckedShipRobot_Ilist_CAFD;
- return WreckedShipRobot_D147(k, j);
+ return WreckedShipRobot_D147(k, jp);
}
-uint16 WreckedShipRobot_Instr_5(uint16 k, uint16 j) { // 0xA8D13D
+const uint16 *WreckedShipRobot_Instr_5(uint16 k, const uint16 *jp) { // 0xA8D13D
R48 = addr_kEproj_WreckedShipRobotLaserDownLeft;
R50 = addr_kWreckedShipRobot_Ilist_C8B1;
- return WreckedShipRobot_D147(k, j);
+ return WreckedShipRobot_D147(k, jp);
}
-uint16 WreckedShipRobot_D147(uint16 k, uint16 j) { // 0xA8D147
+const uint16 *WreckedShipRobot_D147(uint16 k, const uint16 *jp) { // 0xA8D147
Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(k);
if (E->wsrt_var_B) {
WreckedShipRobot_Func_2(k);
@@ -3279,14 +3235,14 @@ uint16 WreckedShipRobot_D147(uint16 k, uint16 j) { // 0xA8D147
uint16 v3 = (random_number & 0x1F) + 16;
E->wsrt_var_B = v3;
SpawnEnemyProjectileWithGfx(v3, cur_enemy_index, R48);
- return R50;
+ return INSTR_RETURN_ADDR(R50);
}
- return j;
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 WreckedShipRobot_Instr_11(uint16 k, uint16 j) { // 0xA8D16B
+const uint16 *WreckedShipRobot_Instr_11(uint16 k, const uint16 *jp) { // 0xA8D16B
WreckedShipRobot_Func_2(cur_enemy_index);
- return j;
+ return jp;
}
void WreckedShipRobotDeactivated_Touch(void) { // 0xA8D174
@@ -3412,17 +3368,11 @@ void MaridiaPuffer_Func_5(void) { // 0xA8D9AA
}
void MaridiaPuffer_Func_6(void) { // 0xA8D9DB
- char v2; // t0
-
R26_ = 0;
R18_ = kSine16bit[(uint8)(Get_MaridiaPuffer(cur_enemy_index)->mpr_var_02 + 64)];
if ((R18_ & 0x8000u) != 0)
++R26_;
- uint16 v1 = Abs16(R18_) & 0xFF00;
- v2 = v1;
- LOBYTE(v1) = HIBYTE(v1);
- HIBYTE(v1) = v2;
- R22_ = v1;
+ R22_ = (Abs16(R18_) & 0xFF00) >> 8;
Enemy_MaridiaPuffer *E = Get_MaridiaPuffer(cur_enemy_index);
R24_ = E->mpr_var_D;
MaridiaPuffer_Func_10();
@@ -3431,22 +3381,16 @@ void MaridiaPuffer_Func_6(void) { // 0xA8D9DB
uint16 x_subpos = E->base.x_subpos;
bool v5 = __CFADD__uint16(R28_, x_subpos);
E->base.x_subpos = R28_ + x_subpos;
- E->base.x_pos += g_word_7E001E + v5;
+ E->base.x_pos += R30_ + v5;
}
void MaridiaPuffer_Func_7(void) { // 0xA8DA28
- char v2; // t0
-
+ Enemy_MaridiaPuffer *E = Get_MaridiaPuffer(cur_enemy_index);
R26_ = 0;
- R18_ = kSine16bit[(uint16)(2 * (uint8)Get_MaridiaPuffer(cur_enemy_index)->mpr_var_02) >> 1];
+ R18_ = kSine16bit[(uint8)E->mpr_var_02];
if ((R18_ & 0x8000u) != 0)
++R26_;
- uint16 v1 = Abs16(R18_) & 0xFF00;
- v2 = v1;
- LOBYTE(v1) = HIBYTE(v1);
- HIBYTE(v1) = v2;
- R22_ = v1;
- Enemy_MaridiaPuffer *E = Get_MaridiaPuffer(cur_enemy_index);
+ R22_ = (Abs16(R18_) & 0xFF00) >> 8;
R24_ = E->mpr_var_D;
MaridiaPuffer_Func_10();
if (R26_)
@@ -3454,7 +3398,7 @@ void MaridiaPuffer_Func_7(void) { // 0xA8DA28
uint16 y_subpos = E->base.y_subpos;
bool v5 = __CFADD__uint16(R28_, y_subpos);
E->base.y_subpos = R28_ + y_subpos;
- E->base.y_pos += g_word_7E001E + v5;
+ E->base.y_pos += R30_ + v5;
}
void MaridiaPuffer_Func_8(uint16 k) { // 0xA8DA71
@@ -3476,30 +3420,26 @@ void MaridiaPuffer_Func_9(uint16 k) { // 0xA8DA92
}
void MaridiaPuffer_Func_10(void) { // 0xA8DAB3
- int16 v1;
-
uint16 prod1 = Mult8x8(R22_, R24_);
uint16 prod2 = Mult8x8(R22_, HIBYTE(R24_));
R28_ = prod1;
- g_word_7E001E = (uint8)((uint16)(prod2 & 0xFF00) >> 8);
- uint16 RegWord = (uint8)prod2;
- LOBYTE(v1) = HIBYTE(RegWord);
- HIBYTE(v1) = RegWord;
+ R30_ = (uint8)(prod2 >> 8);
+ uint16 v1 = (uint8)prod2 << 8;
bool v2 = __CFADD__uint16(R28_, v1);
R28_ += v1;
if (v2)
- ++g_word_7E001E;
+ ++R30_;
}
void MaridiaPuffer_Func_11(void) { // 0xA8DAF6
if (R28_) {
R28_ = -R28_;
} else {
- if (!g_word_7E001E)
+ if (!R30_)
return;
--R28_;
}
- g_word_7E001E = ~g_word_7E001E;
+ R30_ = ~R30_;
}
void MaridiaPuffer_Shot(void) { // 0xA8DB14
@@ -3719,9 +3659,9 @@ void WalkingLavaSeahorse_Func_9(uint16 k) { // 0xA8DEEC
}
}
-uint16 WalkingLavaSeahorse_Instr_4(uint16 k, uint16 j) { // 0xA8DF1C
+const uint16 *WalkingLavaSeahorse_Instr_4(uint16 k, const uint16 *jp) { // 0xA8DF1C
WalkingLavaSeahorse_DF20(0);
- return j;
+ return jp;
}
void WalkingLavaSeahorse_DF20(uint16 a) { // 0xA8DF20
@@ -3729,17 +3669,17 @@ void WalkingLavaSeahorse_DF20(uint16 a) { // 0xA8DF20
QueueSfx2_Max6(0x3Fu);
}
-uint16 WalkingLavaSeahorse_Instr_3(uint16 k, uint16 j) { // 0xA8DF33
+const uint16 *WalkingLavaSeahorse_Instr_3(uint16 k, const uint16 *jp) { // 0xA8DF33
WalkingLavaSeahorse_DF20(2u);
- return j;
+ return jp;
}
-uint16 WalkingLavaSeahorse_Instr_5(uint16 k, uint16 j) { // 0xA8DF39
+const uint16 *WalkingLavaSeahorse_Instr_5(uint16 k, const uint16 *jp) { // 0xA8DF39
WalkingLavaSeahorse_DF20(4u);
- return j;
+ return jp;
}
-uint16 WalkingLavaSeahorse_Instr_6(uint16 k, uint16 j) { // 0xA8DF3F
+const uint16 *WalkingLavaSeahorse_Instr_6(uint16 k, const uint16 *jp) { // 0xA8DF3F
int16 v3;
Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(cur_enemy_index);
@@ -3748,36 +3688,35 @@ uint16 WalkingLavaSeahorse_Instr_6(uint16 k, uint16 j) { // 0xA8DF3F
if ((random_number & 3) == 0)
v3 = 2;
E->wlse_var_04 = v3;
- uint16 result = addr_kWalkingLavaSeahorse_Ilist_DBE7;
if ((E->wlse_var_D & 0x8000u) == 0)
- return addr_kWalkingLavaSeahorse_Ilist_DC57;
- return result;
+ return INSTR_RETURN_ADDR(addr_kWalkingLavaSeahorse_Ilist_DC57);
+ return INSTR_RETURN_ADDR(addr_kWalkingLavaSeahorse_Ilist_DBE7);
}
-uint16 WalkingLavaSeahorse_Instr_2(uint16 k, uint16 j) { // 0xA8DF63
+const uint16 *WalkingLavaSeahorse_Instr_2(uint16 k, const uint16 *jp) { // 0xA8DF63
Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(cur_enemy_index);
uint16 wlse_var_04 = E->wlse_var_04;
if (wlse_var_04)
E->wlse_var_04 = wlse_var_04 - 1;
- return WalkingLavaSeahorse_Instr_1(cur_enemy_index, j);
+ return WalkingLavaSeahorse_Instr_1(cur_enemy_index, jp);
}
-uint16 WalkingLavaSeahorse_Instr_1(uint16 k, uint16 j) { // 0xA8DF71
+const uint16 *WalkingLavaSeahorse_Instr_1(uint16 k, const uint16 *jp) { // 0xA8DF71
int16 wlse_var_D;
R18_ = 0;
Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(cur_enemy_index);
R20_ = E->wlse_var_D;
if (Enemy_MoveRight_IgnoreSlopes(cur_enemy_index) & 1) {
- j = addr_stru_A8DBE9;
+ jp = INSTR_RETURN_ADDR(addr_stru_A8DBE9);
wlse_var_D = E->wlse_var_D;
if (wlse_var_D < 0)
- j = addr_stru_A8DC59;
+ jp = INSTR_RETURN_ADDR(addr_stru_A8DC59);
E->wlse_var_D = -wlse_var_D;
} else {
EnemyFunc_C8AD(cur_enemy_index);
}
- return j;
+ return jp;
}
void WalkingLavaSeahorse_Func_10(void) { // 0xA8DF9D
@@ -3876,16 +3815,16 @@ void WreckedShipOrbs_Func_6(void) { // 0xA8E462
E->base.x_subpos = v3;
}
-uint16 WreckedShipSpark_Instr_2(uint16 k, uint16 j) { // 0xA8E61D
+const uint16 *WreckedShipSpark_Instr_2(uint16 k, const uint16 *jp) { // 0xA8E61D
Enemy_WreckedShipSpark *E = Get_WreckedShipSpark(cur_enemy_index);
E->base.properties |= kEnemyProps_Tangible;
- return j;
+ return jp;
}
-uint16 WreckedShipSpark_Instr_1(uint16 k, uint16 j) { // 0xA8E62A
+const uint16 *WreckedShipSpark_Instr_1(uint16 k, const uint16 *jp) { // 0xA8E62A
Enemy_WreckedShipSpark *E = Get_WreckedShipSpark(cur_enemy_index);
E->base.properties &= ~kEnemyProps_Tangible;
- return j;
+ return jp;
}
void WreckedShipSpark_Init(void) { // 0xA8E637
@@ -4261,7 +4200,7 @@ void KiHunter_Func_3(uint16 k) { // 0xA8F4ED
}
}
-uint16 KiHunter_Instr_1(uint16 k, uint16 j) { // 0xA8F526
+const uint16 *KiHunter_Instr_1(uint16 k, const uint16 *jp) { // 0xA8F526
uint16 result = addr_kKiHunter_Ilist_E9FA;
R18_ = addr_kKiHunter_Ilist_EA4E;
Enemy_KiHunter *E = Get_KiHunter(k);
@@ -4269,14 +4208,14 @@ uint16 KiHunter_Instr_1(uint16 k, uint16 j) { // 0xA8F526
result = addr_kKiHunter_Ilist_EA24;
R18_ = addr_kKiHunter_Ilist_EA5E;
}
- E->base.current_instruction = result;
+ E->base.current_instruction = R18_;
E->base.instruction_timer = 1;
Enemy_KiHunter *E1 = Get_KiHunter(k + 64);
- if (E1->khr_var_A == (uint16)FUNC16(KiHunter_Func_9)) {
+ if (E1->khr_var_A == FUNC16(KiHunter_Func_9)) {
E1->base.current_instruction = R18_;
E1->base.instruction_timer = 1;
}
- return result;
+ return INSTR_RETURN_ADDR(result);
}
void KiHunter_Func_4(uint16 k) { // 0xA8F55A
@@ -4310,9 +4249,9 @@ void KiHunter_Func_5(uint16 k) { // 0xA8F58B
E->base.instruction_timer = 1;
}
-uint16 KiHunter_Instr_2(uint16 k, uint16 j) { // 0xA8F5E4
+const uint16 *KiHunter_Instr_2(uint16 k, const uint16 *jp) { // 0xA8F5E4
Get_KiHunter(cur_enemy_index)->khr_var_A = FUNC16(KiHunter_Func_6);
- return j;
+ return jp;
}
void KiHunter_Func_6(uint16 k) { // 0xA8F5F0
@@ -4348,9 +4287,9 @@ void KiHunter_Func_6(uint16 k) { // 0xA8F5F0
}
}
-uint16 KiHunter_Instr_3(uint16 k, uint16 j) { // 0xA8F67F
+const uint16 *KiHunter_Instr_3(uint16 k, const uint16 *jp) { // 0xA8F67F
Get_KiHunter(cur_enemy_index)->khr_var_A = FUNC16(KiHunter_Func_7);
- return j;
+ return jp;
}
void KiHunter_Func_7(uint16 k) { // 0xA8F68B
@@ -4376,14 +4315,14 @@ void KiHunter_Func_8(uint16 k) { // 0xA8F6B3
E->khr_var_A = addr_locret_A8F5E3;
}
-uint16 KiHunter_Instr_4(uint16 k, uint16 j) { // 0xA8F6D2
+const uint16 *KiHunter_Instr_4(uint16 k, const uint16 *jp) { // 0xA8F6D2
sub_A8F6DC(k, addr_loc_A8CF18);
- return j;
+ return jp;
}
-uint16 KiHunter_Instr_5(uint16 k, uint16 j) { // 0xA8F6D8
+const uint16 *KiHunter_Instr_5(uint16 k, const uint16 *jp) { // 0xA8F6D8
sub_A8F6DC(k, addr_loc_A8CF26);
- return j;
+ return jp;
}
void sub_A8F6DC(uint16 k, uint16 j) { // 0xA8F6DC
@@ -4413,7 +4352,7 @@ void KiHunter_Shot(void) { // 0xA8F701
EK->khr_var_08 = 0;
EK->khr_var_09 = 1;
cur_enemy_index = old_cur_enemy_index + 64;
- if (E1->khr_var_A != (uint16)FUNC16(KiHunter_Func_10)) {
+ if (E1->khr_var_A != FUNC16(KiHunter_Func_10)) {
E1->khr_var_07 = E1->base.y_pos;
E1->khr_var_08 = E1->base.x_pos;
KiHunter_Func_17();
@@ -4546,7 +4485,6 @@ void KiHunter_Func_16(uint16 k) { // 0xA8F96A
}
void KiHunter_Func_17(void) { // 0xA8F98D
- char v4; // t0
uint16 v5;
Enemy_KiHunter *E = Get_KiHunter(cur_enemy_index);
@@ -4555,11 +4493,8 @@ void KiHunter_Func_17(void) { // 0xA8F98D
do {
uint16 v3 = E->khr_var_0A + 384;
E->khr_var_0A = v3;
- v3 &= 0xFF00u;
- v4 = v3;
- LOBYTE(v3) = HIBYTE(v3);
- HIBYTE(v3) = v4;
+ v3 >>= 8;
v5 = *(uint16 *)((char *)kCommonEnemySpeeds_Quadratic + (uint16)(8 * v3) + 1) + E->khr_var_D;
E->khr_var_D = v5;
} while (sign16(v5 - 0x2000));
-}
+}
\ No newline at end of file
diff --git a/src/sm_a9.c b/src/sm_a9.c
index ba44804..01adc37 100644
--- a/src/sm_a9.c
+++ b/src/sm_a9.c
@@ -6,11 +6,42 @@
#include "enemy_types.h"
#include "sm_rtl.h"
-#define g_word_A98929 ((uint16*)RomPtr(0xa98929))
+
+#define g_word_A98929 ((uint16*)RomFixedPtr(0xa98929))
+#define g_off_A98B7B ((uint16*)RomFixedPtr(0xa98b7b))
+#define g_word_A9B099 ((uint16*)RomFixedPtr(0xa9b099))
+#define g_word_A9B109 ((uint16*)RomFixedPtr(0xa9b109))
+#define g_word_A9B10F ((uint16*)RomFixedPtr(0xa9b10f))
+#define g_off_A9B6D4 ((uint16*)RomFixedPtr(0xa9b6d4))
+#define MotherBrain_RainbowBeamPalettes ((uint16*)RomFixedPtr(0xade434))
+#define g_off_A9C61E ((uint16*)RomFixedPtr(0xa9c61e))
+#define g_off_A9C664 ((uint16*)RomFixedPtr(0xa9c664))
+#define kShitroid_FadingToBlack ((uint16*)RomFixedPtr(0xade8e2))
+#define g_word_A9CDFC ((uint16*)RomFixedPtr(0xa9cdfc))
+#define kShitroid_HealthBasedPalettes_Shell ((uint16*)RomFixedPtr(0xade7e2))
+#define kShitroid_HealthBasedPalettes_Innards ((uint16*)RomFixedPtr(0xade882))
+#define g_off_A9D260 ((uint16*)RomFixedPtr(0xa9d260))
+#define g_word_A9D583 ((uint16*)RomFixedPtr(0xa9d583))
+#define g_word_A9D549 ((uint16*)RomFixedPtr(0xa9d549))
+#define g_word_A9D67C ((uint16*)RomFixedPtr(0xa9d67c))
+#define g_word_A9D69C ((uint16*)RomFixedPtr(0xa9d69c))
+#define kDeadTorizo_TileData ((uint16*)RomFixedPtr(0xb7a800))
+#define g_off_A9D86A ((uint16*)RomFixedPtr(0xa9d86a))
+#define g_off_A9D870 ((uint16*)RomFixedPtr(0xa9d870))
+#define g_off_A9D897 ((uint16*)RomFixedPtr(0xa9d897))
+#define g_off_A9D89B ((uint16*)RomFixedPtr(0xa9d89b))
+#define g_off_A9D8C0 ((uint16*)RomFixedPtr(0xa9d8c0))
+#define g_off_A9D8C6 ((uint16*)RomFixedPtr(0xa9d8c6))
+#define g_word_A9D951 ((uint16*)RomFixedPtr(0xa9d951))
+#define g_word_A9D959 ((uint16*)RomFixedPtr(0xa9d959))
+#define TILEMAP_ADDR(x) &g_ram[0x2000 + x]
+#define kDeadMonsters_TileData RomPtr_B7(addr_kDeadMonsters_TileData)
+
+
+
static const uint16 g_word_A98B5D[5] = { 0x10, 0x10, 8, 8, 0x10 };
static const uint16 g_word_A98B67[5] = { 0x20, 0x20, 0x18, 0x18, 0x20 };
static const uint16 g_word_A98B71[5] = { 0xf8, 0xf8, 0xf0, 0xf0, 0xf6 };
-#define g_off_A98B7B ((uint16*)RomPtr(0xa98b7b))
static const uint16 g_word_A98C61[4] = { 0xfff8, 2, 0xfffc, 6 };
static const uint8 g_byte_A98F7D[2] = { 9, 0x12 };
static const uint16 g_word_A98F7F[8] = { 0x3d, 0x54, 0x20, 0x35, 0x5a, 0x43, 0x67, 0x29 };
@@ -19,13 +50,9 @@ static const int16 g_word_A993BB[4] = { 0, -1, 0, 1 };
static const int16 g_word_A993C3[4] = { 0, 1, -1, 1 };
static const uint16 g_word_A99E0F[13] = { 0x6f, 0x6f, 0x6f, 0x7e, 0x6f, 0x6f, 0x7e, 0x6f, 0x6f, 0x7e, 0x7e, 0x6f, 0x6f };
-#define g_word_A9B099 ((uint16*)RomPtr(0xa9b099))
-#define g_word_A9B109 ((uint16*)RomPtr(0xa9b109))
-#define g_word_A9B10F ((uint16*)RomPtr(0xa9b10f))
static const uint16 g_word_A9B393[8] = { 8, 0x6c, 0x18, 0x80, 9, 0x90, 0x18, 0x74 };
static const uint8 g_byte_A9B546[8] = { 0, 1, 1, 0, 0, 0, 0, 0 };
static const uint8 g_byte_A9B5A1[8] = { 2, 1, 1, 0, 0, 0, 0, 0 };
-#define g_off_A9B6D4 ((uint16*)RomPtr(0xa9b6d4))
static const uint8 g_byte_A9B6DC[3] = { 0x40, 0x80, 0xc0 };
static const uint8 g_byte_A9B6DF[3] = { 0x10, 0x20, 0xd0 };
static const int16 g_word_A9B72C[28] = {
@@ -34,33 +61,12 @@ static const int16 g_word_A9B72C[28] = {
};
static const int16 g_word_A9BCA6[8] = { -8, 6, -4, 2, 3, -6, 8, 0 };
static const int16 g_word_A9BCB6[8] = { -7, 2, 5, -4, 6, -2, -6, 7 };
-#define MotherBrain_RainbowBeamPalettes ((uint16*)RomPtr(0xade434))
static const uint8 g_byte_A9BEEE[16] = { 2, 0, 2, 0, 6, 0, 6, 0, 8, 0, 8, 0, 10, 0, 10, 0 };
static const uint16 g_word_A9BEFE[8] = { 0x500, 0x500, 0x200, 0x200, 0xc0, 0xc0, 0x40, 0x40 };
static const int16 g_word_A9C049[8] = { 0x10, 0x10, 0x20, 0x20, 0x30, 0x30, 0x40, 0x40 };
static const uint16 g_word_A9C544 = 1;
-#define g_off_A9C61E ((uint16*)RomPtr(0xa9c61e))
-#define g_off_A9C664 ((uint16*)RomPtr(0xa9c664))
-#define kShitroid_FadingToBlack ((uint16*)RomPtr(0xade8e2))
-#define g_word_A9CDFC ((uint16*)RomPtr(0xa9cdfc))
-#define kShitroid_HealthBasedPalettes_Shell ((uint16*)RomPtr(0xade7e2))
-#define kShitroid_HealthBasedPalettes_Innards ((uint16*)RomPtr(0xade882))
-#define g_off_A9D260 ((uint16*)RomPtr(0xa9d260))
-#define g_word_A9D583 ((uint16*)RomPtr(0xa9d583))
-#define g_word_A9D549 ((uint16*)RomPtr(0xa9d549))
-#define g_word_A9D67C ((uint16*)RomPtr(0xa9d67c))
-#define g_word_A9D69C ((uint16*)RomPtr(0xa9d69c))
-#define kDeadTorizo_TileData ((uint16*)RomPtr(0xb7a800))
-#define g_off_A9D86A ((uint16*)RomPtr(0xa9d86a))
-#define g_off_A9D870 ((uint16*)RomPtr(0xa9d870))
-#define g_off_A9D897 ((uint16*)RomPtr(0xa9d897))
-#define g_off_A9D89B ((uint16*)RomPtr(0xa9d89b))
-#define g_off_A9D8C0 ((uint16*)RomPtr(0xa9d8c0))
-#define g_off_A9D8C6 ((uint16*)RomPtr(0xa9d8c6))
-#define g_word_A9D951 ((uint16*)RomPtr(0xa9d951))
-#define g_word_A9D959 ((uint16*)RomPtr(0xa9d959))
static const int8 g_byte_A9F56A[16] = { 0x10, 0xf, 0xe, 0xd, 0xc, 0xb, 0xa, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
void CallCorpseRottingMove(uint32 ea, uint16 k, uint16 j) {
@@ -262,11 +268,6 @@ void Enemy_NormalFrozenAI_A9(void) { // 0xA98041
NormalEnemyFrozenAI();
}
-uint16 EnemyInstr_Sleep_A9(uint16 k, uint16 j) { // 0xA9812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
-
void MotherBrainsBody_Init(void) { // 0xA98687
for (int i = 4094; i >= 0; i -= 2)
tilemap_stuff[i >> 1] = 824;
@@ -1271,57 +1272,27 @@ void MotherBrain_DrawNeckSegment(void) { // 0xA993CB
}
void MotherBrain_AddSpritemapToOam(uint16 j) { // 0xA993EE
- int16 *v5;
- int16 v6;
- int16 v7;
- char v8; // t0
- int16 v10;
- int16 v12;
- OamEnt *v13;
- int16 v15;
- int16 v17;
-
- uint16 *v1 = (uint16 *)RomPtr_A9(j);
- uint16 v2 = j + 2;
- R24_ = *v1;
- uint16 v3 = oam_next_ptr;
+ const uint8 *p = RomPtr_A9(j);
+ int n = GET_WORD(p);
+ p += 2;
+ int v3 = oam_next_ptr;
do {
- uint8 *v4 = RomPtr_A9(v2);
- v5 = (int16 *)v4;
- v6 = v4[2] << 8;
- if ((v4[2] & 0x80) != 0)
- v6 |= 0xFFu;
- v8 = v6;
- LOBYTE(v7) = HIBYTE(v6);
- HIBYTE(v7) = v8;
- uint16 v9 = R20_ + v7;
- bool v11 = v9 < layer1_y_pos;
- v10 = v9 - layer1_y_pos;
- v11 = !v11;
+ int16 v10 = R20_ + (int8)p[2] - layer1_y_pos;
if (v10 >= 0) {
- R26_ = v10;
- v12 = R18_ + v11 + *(uint16 *)v4 - layer1_x_pos;
- v13 = gOamEnt(v3);
- *(uint16 *)&v13->xcoord = v12;
- if ((v12 & 0x100) != 0) {
- int v14 = v3 >> 1;
- R28_ = kOamExtra_Address_And_X8Large[v14];
- v15 = kOamExtra_X8Small_And_Large[v14] | *(uint16 *)RomPtr_RAM(R28_);
- *(uint16 *)RomPtr_RAM(R28_) = v15;
- }
- if (*v5 < 0) {
- int v16 = v3 >> 1;
- R28_ = kOamExtra_Address_And_X8Large[v16];
- v17 = kOamExtra_X8Small_And_Large[v16 + 1] | *(uint16 *)RomPtr_RAM(R28_);
- *(uint16 *)RomPtr_RAM(R28_) = v17;
- }
- *(uint16 *)&v13->ycoord = R26_;
- *(uint16 *)&v13->charnum = R22_ | *(int16 *)((char *)v5 + 3);
+ uint16 v12 = R18_ + GET_WORD(p) - layer1_x_pos;
+ OamEnt *v13 = gOamEnt(v3);
+ v13->xcoord = v12;
+ int v14 = v3 >> 1;
+ if ((v12 & 0x100) != 0)
+ *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v14]) |= kOamExtra_X8Small_And_Large[v14];
+ if (sign16(GET_WORD(p)))
+ *(uint16 *)RomPtr_RAM(kOamExtra_Address_And_X8Large[v14]) |= kOamExtra_X8Small_And_Large[v14 + 1];
+ v13->ycoord = v10;
+ *(uint16 *)&v13->charnum = R22_ | GET_WORD(p + 3);
v3 = (v3 + 4) & 0x1FF;
}
- v2 += 5;
- --R24_;
- } while (R24_);
+ p += 5;
+ } while (--n);
oam_next_ptr = v3;
}
@@ -1352,199 +1323,199 @@ void MotherBrain_FootstepEffect(void) { // 0xA99599
// word_80914D = 22;
}
-uint16 MotherBrain_Instr_MoveBodyUp10Left4(uint16 k, uint16 j) { // 0xA995B6
+const uint16 *MotherBrain_Instr_MoveBodyUp10Left4(uint16 k, const uint16 *jp) { // 0xA995B6
MotherBrain_MoveBodyDownScrollLeft(4u, 0xFFF6);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveBodyUp16Left4(uint16 k, uint16 j) { // 0xA995C0
+const uint16 *MotherBrain_Instr_MoveBodyUp16Left4(uint16 k, const uint16 *jp) { // 0xA995C0
MotherBrain_MoveBodyDownScrollLeft(4u, 0xFFF0);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveBodyUp12Right2(uint16 k, uint16 j) { // 0xA995CA
+const uint16 *MotherBrain_Instr_MoveBodyUp12Right2(uint16 k, const uint16 *jp) { // 0xA995CA
MotherBrain_MoveBodyDownScrollLeft(0xFFFE, 0xFFF4);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown12Left4(uint16 k, uint16 j) { // 0xA995DE
+const uint16 *MotherBrain_Instr_MoveDown12Left4(uint16 k, const uint16 *jp) { // 0xA995DE
MotherBrain_MoveBodyDownScrollLeft(4u, 0xC);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown16Right2(uint16 k, uint16 j) { // 0xA995E8
+const uint16 *MotherBrain_Instr_MoveDown16Right2(uint16 k, const uint16 *jp) { // 0xA995E8
MotherBrain_MoveBodyDownScrollLeft(0xFFFE, 0x10);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown10Right2(uint16 k, uint16 j) { // 0xA995F2
+const uint16 *MotherBrain_Instr_MoveDown10Right2(uint16 k, const uint16 *jp) { // 0xA995F2
MotherBrain_MoveBodyDownScrollLeft(0xFFFE, 0xA);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveUp2Right1(uint16 k, uint16 j) { // 0xA995FC
+const uint16 *MotherBrain_Instr_MoveUp2Right1(uint16 k, const uint16 *jp) { // 0xA995FC
Enemy_MotherBrain *E = Get_MotherBrain(0);
++E->base.x_pos;
MotherBrain_MoveBodyDown(0xFFFEu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveRight2(uint16 k, uint16 j) { // 0xA9960C
+const uint16 *MotherBrain_Instr_MoveRight2(uint16 k, const uint16 *jp) { // 0xA9960C
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos += 2;
MotherBrain_MoveBodyDown(0);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveUp1(uint16 k, uint16 j) { // 0xA9961C
+const uint16 *MotherBrain_Instr_MoveUp1(uint16 k, const uint16 *jp) { // 0xA9961C
MotherBrain_MoveBodyDown(1u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveUp1Right3_Sfx(uint16 k, uint16 j) { // 0xA99622
+const uint16 *MotherBrain_Instr_MoveUp1Right3_Sfx(uint16 k, const uint16 *jp) { // 0xA99622
MotherBrain_FootstepEffect();
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos += 3;
MotherBrain_MoveBodyDown(1u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_Down2Right15(uint16 k, uint16 j) { // 0xA99638
+const uint16 *MotherBrain_Instr_Down2Right15(uint16 k, const uint16 *jp) { // 0xA99638
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos += 15;
MotherBrain_MoveBodyDown(0xFFFEu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_Down4Right6(uint16 k, uint16 j) { // 0xA99648
+const uint16 *MotherBrain_Instr_Down4Right6(uint16 k, const uint16 *jp) { // 0xA99648
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos += 6;
MotherBrain_MoveBodyDown(0xFFFCu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_Up4Left2(uint16 k, uint16 j) { // 0xA99658
+const uint16 *MotherBrain_Instr_Up4Left2(uint16 k, const uint16 *jp) { // 0xA99658
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos -= 2;
MotherBrain_MoveBodyDown(4u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_Up2Left1_Sfx(uint16 k, uint16 j) { // 0xA99668
+const uint16 *MotherBrain_Instr_Up2Left1_Sfx(uint16 k, const uint16 *jp) { // 0xA99668
MotherBrain_FootstepEffect();
Enemy_MotherBrain *E = Get_MotherBrain(0);
--E->base.x_pos;
MotherBrain_MoveBodyDown(2u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_Up2Left1_Sfx2(uint16 k, uint16 j) { // 0xA9967E
+const uint16 *MotherBrain_Instr_Up2Left1_Sfx2(uint16 k, const uint16 *jp) { // 0xA9967E
MotherBrain_FootstepEffect();
Enemy_MotherBrain *E = Get_MotherBrain(0);
--E->base.x_pos;
MotherBrain_MoveBodyDown(2u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveLeft2(uint16 k, uint16 j) { // 0xA99694
+const uint16 *MotherBrain_Instr_MoveLeft2(uint16 k, const uint16 *jp) { // 0xA99694
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos -= 2;
MotherBrain_MoveBodyDown(0);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown1(uint16 k, uint16 j) { // 0xA996A4
+const uint16 *MotherBrain_Instr_MoveDown1(uint16 k, const uint16 *jp) { // 0xA996A4
MotherBrain_MoveBodyDown(0xFFFFu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown1Left3(uint16 k, uint16 j) { // 0xA996AA
+const uint16 *MotherBrain_Instr_MoveDown1Left3(uint16 k, const uint16 *jp) { // 0xA996AA
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos -= 3;
MotherBrain_MoveBodyDown(0xFFFFu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveUp2Left15_Sfx(uint16 k, uint16 j) { // 0xA996BA
+const uint16 *MotherBrain_Instr_MoveUp2Left15_Sfx(uint16 k, const uint16 *jp) { // 0xA996BA
MotherBrain_FootstepEffect();
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos -= 15;
MotherBrain_MoveBodyDown(2u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveUp4Left6(uint16 k, uint16 j) { // 0xA996D0
+const uint16 *MotherBrain_Instr_MoveUp4Left6(uint16 k, const uint16 *jp) { // 0xA996D0
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos -= 6;
MotherBrain_MoveBodyDown(4u);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown4Right2(uint16 k, uint16 j) { // 0xA996E0
+const uint16 *MotherBrain_Instr_MoveDown4Right2(uint16 k, const uint16 *jp) { // 0xA996E0
Enemy_MotherBrain *E = Get_MotherBrain(0);
E->base.x_pos += 2;
MotherBrain_MoveBodyDown(0xFFFCu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_MoveDown2Right1(uint16 k, uint16 j) { // 0xA996F0
+const uint16 *MotherBrain_Instr_MoveDown2Right1(uint16 k, const uint16 *jp) { // 0xA996F0
Enemy_MotherBrain *E = Get_MotherBrain(0);
++E->base.x_pos;
MotherBrain_MoveBodyDown(0xFFFEu);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_Standing(uint16 k, uint16 j) { // 0xA99700
+const uint16 *MotherBrain_Instr_SetPose_Standing(uint16 k, const uint16 *jp) { // 0xA99700
Get_MotherBrain(0)->mbn_var_02 = 0;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_Walking(uint16 k, uint16 j) { // 0xA99708
+const uint16 *MotherBrain_Instr_SetPose_Walking(uint16 k, const uint16 *jp) { // 0xA99708
Get_MotherBrain(0)->mbn_var_02 = 1;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_Crouched(uint16 k, uint16 j) { // 0xA99710
+const uint16 *MotherBrain_Instr_SetPose_Crouched(uint16 k, const uint16 *jp) { // 0xA99710
Get_MotherBrain(0)->mbn_var_02 = 3;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_CrouchedTrans(uint16 k, uint16 j) { // 0xA99718
+const uint16 *MotherBrain_Instr_SetPose_CrouchedTrans(uint16 k, const uint16 *jp) { // 0xA99718
Get_MotherBrain(0)->mbn_var_02 = 2;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_DeathBeamMode(uint16 k, uint16 j) { // 0xA99720
+const uint16 *MotherBrain_Instr_SetPose_DeathBeamMode(uint16 k, const uint16 *jp) { // 0xA99720
Get_MotherBrain(0)->mbn_var_02 = 4;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SetPose_LeaningDown(uint16 k, uint16 j) { // 0xA99728
+const uint16 *MotherBrain_Instr_SetPose_LeaningDown(uint16 k, const uint16 *jp) { // 0xA99728
Get_MotherBrain(0)->mbn_var_02 = 6;
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_SpawnEprojToOffset(uint16 k, uint16 j) { // 0xA99AC8
- uint8 *v2 = RomPtr_A9(j);
+const uint16 *MotherBrain_Instr_SpawnEprojToOffset(uint16 k, const uint16 *jp) { // 0xA99AC8
Enemy_MotherBrain *E = Get_MotherBrain(0);
- R18_ = E->base.x_pos + *(uint16 *)v2;
- R20_ = E->base.y_pos + *((uint16 *)v2 + 1);
- SpawnEnemyProjectileWithRoomGfx(addr_kEproj_DustCloudExplosion, *((uint16 *)v2 + 2));
- return j + 6;
+ R18_ = E->base.x_pos + jp[0];
+ R20_ = E->base.y_pos + jp[1];
+ SpawnEnemyProjectileWithRoomGfx(addr_kEproj_DustCloudExplosion, jp[2]);
+ return jp + 3;
}
-uint16 MotherBrain_Instr_SpawnDeathBeamEproj(uint16 k, uint16 j) { // 0xA99AEF
+const uint16 *MotherBrain_Instr_SpawnDeathBeamEproj(uint16 k, const uint16 *jp) { // 0xA99AEF
uint16 v2;
- printf("A undefined\n"); v2 = 0;
+ //printf("A undefined\n");
+ v2 = 0;
QueueSfx2_Max6(0x63u);
SpawnEnemyProjectileWithGfx(v2, 0x40, addr_kEproj_MotherBrainDeathBeamCharging);
- return j;
+ return jp;
}
-uint16 MotherBrain_Instr_IncrBeamAttackPhase(uint16 k, uint16 j) { // 0xA99B05
+const uint16 *MotherBrain_Instr_IncrBeamAttackPhase(uint16 k, const uint16 *jp) { // 0xA99B05
Enemy_MotherBrain *E = Get_MotherBrain(0);
++E->mbn_var_17;
- return j;
+ return jp;
}
uint16 MotherBrain_Instr_Goto(uint16 k) { // 0xA99B0F
@@ -1562,13 +1533,13 @@ uint16 MotherBrain_Instr_DisableNeckMovement(uint16 k) { // 0xA99B20
}
uint16 MotherBrain_Instr_QueueSfx2(uint16 k) { // 0xA99B28
- uint16 *v2 = (uint16 *)RomPtr_A9(k);
+ const uint16 *v2 = (const uint16 *)RomPtr_A9(k);
QueueSfx2_Max6(*v2);
return k + 2;
}
uint16 MotherBrain_Instr_QueueSfx3(uint16 k) { // 0xA99B32
- uint16 *v2 = (uint16 *)RomPtr_A9(k);
+ const uint16 *v2 = (const uint16 *)RomPtr_A9(k);
QueueSfx3_Max6(*v2);
return k + 2;
}
@@ -1590,7 +1561,8 @@ uint16 MotherBrain_Instr_SpawnDroolEproj(uint16 k) { // 0xA99B3C
uint16 MotherBrain_Instr_SpawnPurpleBreath(uint16 k) { // 0xA99B6D
uint16 v2;
- printf("A undefined\n"); v2 = 0;
+ //printf("A undefined\n");
+ v2 = 0;
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_MotherBrainPurpleBreathBig, v2);
return k;
}
@@ -1685,7 +1657,7 @@ uint16 MotherBrain_Instr_SetShitroidAttackCtr0(uint16 k) { // 0xA99EB5
}
uint16 MotherBrain_Instr_SpawnBombEproj(uint16 k) { // 0xA99EBD
- uint16 *v2 = (uint16 *)RomPtr_A9(k);
+ const uint16 *v2 = (const uint16 *)RomPtr_A9(k);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_MotherBrainBomb, *v2);
return k + 2;
}
@@ -1701,7 +1673,8 @@ uint16 MotherBrain_Instr_SpawnLaserEproj(uint16 k) { // 0xA99F46
uint16 MotherBrain_Instr_SpawnRainbowEproj(uint16 k) { // 0xA99F84
uint16 v2;
- printf("A undefined\n"); v2 = 0;
+ //printf("A undefined\n");
+ v2 = 0;
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_MotherBrainRainbowBeamCharging, v2);
return k;
}
@@ -1836,7 +1809,7 @@ void MotherBrain_GenerateExplosions(uint16 a) { // 0xA9B03E
int v5 = v3 >> 1;
R18_ = g_word_A9B099[v5];
R20_ = g_word_A9B099[v5 + 1];
- uint16 *v6 = (uint16 *)RomPtr_A9(R22_);
+ const uint16 *v6 = (const uint16 *)RomPtr_A9(R22_);
uint16 v7 = *v6;
uint16 Random = NextRandom();
if (Random >= 0x4000) {
@@ -2104,7 +2077,7 @@ void MotherBrain_SamusCollDetect(void) { // 0xA9B3B6
uint8 MotherBrain_SamusCollDetectPart(uint16 k) { // 0xA9B455
int16 v5;
- uint16 *v1 = (uint16 *)RomPtr_A9(k);
+ const uint16 *v1 = (const uint16 *)RomPtr_A9(k);
if (!*v1)
return 0;
R22_ = *v1;
@@ -2285,7 +2258,7 @@ void MotherBrain_Body_Phase2_TryAttack(void) { // 0xA9B64B
if (abs16(E1->base.y_pos + 4 - samus_y_pos) < 0x20)
v2 = addr_byte_A9B6DF;
uint16 v4 = 0;
- uint8 *v5 = RomPtr_A9(v2);
+ const uint8 *v5 = RomPtr_A9(v2);
if ((uint8)random_number >= *v5) {
v4 = 2;
if ((uint8)random_number >= v5[1]) {
@@ -2295,12 +2268,12 @@ void MotherBrain_Body_Phase2_TryAttack(void) { // 0xA9B64B
}
}
uint16 v6 = g_off_A9B6D4[v4 >> 1];
- if (v6 == (uint16)addr_kMotherBrain_Ilist_9ECC) {
+ if (v6 == addr_kMotherBrain_Ilist_9ECC) {
if (sign16(E1->mbn_var_05 - 1)) {
E->mbn_var_A = FUNC16(MotherBrain_FiringBomb_DecideOnWalking);
MotherBrain_FiringBomb_DecideOnWalking();
}
- } else if (v6 == (uint16)addr_kMotherBrain_Ilist_9F34) {
+ } else if (v6 == addr_kMotherBrain_Ilist_9F34) {
E->mbn_var_A = FUNC16(MotherBomb_FiringLaser_PositionHead);
MotherBomb_FiringLaser_PositionHead();
} else {
@@ -3452,7 +3425,7 @@ uint16 ComputeCosMult(uint16 a) { // 0xA9C465
}
uint16 sub_A9C46C(uint16 a, uint16 j) { // 0xA9C46C
- uint16 v2 = kSinCosTable8bit_Sext[((uint16)((2 * a) & 0x1FE) >> 1) + 64];
+ uint16 v2 = kSinCosTable8bit_Sext[(a & 0xff) + 64];
WriteReg(M7A, v2);
WriteReg(M7A, HIBYTE(v2));
WriteReg(M7B, j);
@@ -3545,14 +3518,14 @@ uint8 ProcessSpriteTilesTransfers(uint8 db, uint16 k) { // 0xA9C5BE
mbn_var_22 = k;
uint16 v3 = mbn_var_22;
uint16 v4 = vram_write_queue_tail;
- uint8 *v5 = RomPtrWithBank(db, mbn_var_22);
- uint16 v6 = *(uint16 *)v5;
- if (*(uint16 *)v5) {
+ const uint8 *v5 = RomPtrWithBank(db, mbn_var_22);
+ uint16 v6 = GET_WORD(v5);
+ if (GET_WORD(v5)) {
v7 = gVramWriteEntry(vram_write_queue_tail);
v7->size = v6;
- *(VoidP *)((char *)&v7->src.addr + 1) = *(uint16 *)(v5 + 3);
- v7->src.addr = *((uint16 *)v5 + 1);
- v7->vram_dst = *(uint16 *)(v5 + 5);
+ *(VoidP *)((char *)&v7->src.addr + 1) = GET_WORD(v5 + 3);
+ v7->src.addr = GET_WORD(v5 + 2);
+ v7->vram_dst = GET_WORD(v5 + 5);
vram_write_queue_tail = v4 + 7;
E->mbn_var_22 = v3 + 7;
v6 = *(uint16 *)RomPtrWithBank(db, E->mbn_var_22);
@@ -3919,7 +3892,7 @@ void ShitroidInCutscene_MoveToSamus(uint16 k) { // 0xA9C9C3
if ((random_number & 0xFFFu) >= 0xFA0)
QueueSfx2_Max6(0x52u);
uint16 sice_var_0E = E->sice_var_0E;
- uint16 *v3 = (uint16 *)RomPtr_A9(sice_var_0E);
+ const uint16 *v3 = (const uint16 *)RomPtr_A9(sice_var_0E);
R18_ = *v3;
R20_ = v3[1];
R22_ = v3[3];
@@ -4266,7 +4239,7 @@ void ShitroidInCutscene_Shake(uint16 k) { // 0xA9CEDB
void ShitroidInCutscene_Touch(void) { // 0xA9CF03
Enemy_ShitroidInCutscene *E = Get_ShitroidInCutscene(cur_enemy_index);
- if (E->sice_var_A == (uint16)FUNC16(ShitroidInCutscene_LatchOntoSamus)) {
+ if (E->sice_var_A == FUNC16(ShitroidInCutscene_LatchOntoSamus)) {
R18_ = samus_x_pos;
R20_ = samus_y_pos - 20;
if (Shitroid_AccelerateTowardsPoint(cur_enemy_index, 0x10) & 1) {
@@ -4309,12 +4282,12 @@ void ShitroidInCutscene_UpdateSpeedAndAngle(uint16 k) { // 0xA9CF31
E->sice_var_C = Math_MultByCos(E->sice_var_0B);
}
-uint16 Shitroid_Instr_1(uint16 k, uint16 j) { // 0xA9CFB4
- return addr_kShitroid_Ilist_CFA2;
+const uint16 *Shitroid_Instr_1(uint16 k, const uint16 *jp) { // 0xA9CFB4
+ return INSTR_RETURN_ADDR(addr_kShitroid_Ilist_CFA2);
}
-uint16 Shitroid_Instr_2(uint16 k, uint16 j) { // 0xA9CFCA
- return addr_kShitroid_Ilist_CFB8;
+const uint16 *Shitroid_Instr_2(uint16 k, const uint16 *jp) { // 0xA9CFCA
+ return INSTR_RETURN_ADDR(addr_kShitroid_Ilist_CFB8);
}
void MotherBrain_Pal_ProcessInvincibility(void) { // 0xA9CFD4
@@ -4348,7 +4321,7 @@ void MotherBrain_Pal_EndScreenFlash(void) { // 0xA9D00C
}
void MotherBrain_Pal_HandleRoomPal(void) { // 0xA9D01C
- uint16 j = HandleRoomPaletteInstructionList(ADDR16_OF_RAM(*enemy_ram7800) + 28);
+ uint16 j = HandleMotherBrainInstructionList(ADDR16_OF_RAM(*enemy_ram7800) + 28);
if (j)
MotherBrain_Pal_WriteRoomPal(j);
}
@@ -4359,41 +4332,39 @@ void MotherBrain_Pal_WriteRoomPal(uint16 j) { // 0xA9D025
WriteColorsToPalette(0xE6, 0xa9, j + 24, 12);
}
-uint16 HandleRoomPaletteInstructionList(uint16 a) { // 0xA9D192
- int16 v4;
+typedef struct MotherBrainInstrExecState {
+ uint16 ip;
+ uint16 timer;
+} MotherBrainInstrExecState;
- R0_.addr = a;
- R3_.addr = a + 2;
- R0_.bank = 126;
- R3_.bank = 126;
- uint16 *v1 = (uint16 *)IndirPtr(&R0_, 0);
- if ((*v1 & 0x8000) == 0)
+uint16 HandleMotherBrainInstructionList(uint16 a) { // 0xA9D192
+ MotherBrainInstrExecState *st = (MotherBrainInstrExecState *)&g_ram[a];
+ if ((st->ip & 0x8000) == 0)
return 0;
- uint16 v3 = *v1;
- v4 = *(uint16 *)RomPtr_A9(*v1);
- if (v4 < 0)
+ uint16 v2 = st->ip;
+ const uint16 *v3 = (uint16 *)RomPtr_A6(v2);
+ if (sign16(v3[0]))
goto LABEL_8;
- if (v4 == *(uint16 *)IndirPtr(&R3_, 0)) {
- for (v3 += 4; ; ) {
- v4 = *(uint16 *)RomPtr_A9(v3);
- if (!v4)
- break;
- if (v4 >= 0) {
- IndirWriteWord(&R3_, 0, 1u);
- IndirWriteWord(&R0_, 0, v3);
- return *((uint16 *)RomPtr_A9(v3) + 1);
- }
+ if (st->timer != v3[0]) {
+ st->timer++;
+ return v3[1];
+ }
+ v2 += 4;
+ for (; ; ) {
+ v3 = (uint16 *)RomPtr_A6(v2);
+ if (!sign16(v3[0]))
+ break;
LABEL_8:
- R6_ = v4;
- v3 = CallMotherBrainInstr((uint16)v4 | 0xA90000, v3 + 2);
- }
- IndirWriteWord(&R0_, 0, 0);
- IndirWriteWord(&R3_, 0, 0);
+ v2 = CallMotherBrainInstr(v3[0] | 0xA90000, v2 + 2);
+ }
+ if (!v3[0]) {
+ st->ip = 0;
+ st->timer = 0;
return 0;
} else {
- uint8 *v5 = IndirPtr(&R3_, 0);
- IndirWriteWord(&R3_, 0, *(uint16 *)v5 + 1);
- return *((uint16 *)RomPtr_A9(v3) + 1);
+ st->timer = 1;
+ st->ip = v2;
+ return v3[1];
}
}
@@ -4427,7 +4398,7 @@ void MotherBrain_HandleBrainPal(void) { // 0xA9D206
HIBYTE(E->mbn_var_D) = E->mbn_var_E;
mbn_var_D = E->mbn_var_D;
if (mbn_var_D
- || Get_MotherBrain(0x40)->mbn_var_A == (uint16)FUNC16(MotherBrainsBrain_SetupBrainAndNeckToDraw)) {
+ || Get_MotherBrain(0x40)->mbn_var_A == FUNC16(MotherBrainsBrain_SetupBrainAndNeckToDraw)) {
uint8 v4 = (mbn_var_D + 1) & 7;
LOBYTE(E->mbn_var_D) = v4;
uint16 v5 = 290;
@@ -4561,31 +4532,32 @@ uint8 DeadTorizo_Func_0(void) { // 0xA9D443
Enemy_DeadTorizo *E = Get_DeadTorizo(0);
R18_ = E->base.x_pos;
R20_ = E->base.y_pos;
- uint16 *v1 = (uint16 *)RomPtr_A9(addr_kDeadTorizo_Hitbox_D77C);
+ const uint16 *v1 = (const uint16 *)RomPtr_A9(addr_kDeadTorizo_Hitbox_D77C);
if (!*v1)
return 0;
- R22_ = *v1;
- for (int i = 0xd77c + 2; ; i += 8) {
+ int R22 = *v1;
+ for (int i = addr_kDeadTorizo_Hitbox_D77C + 2; ; i += 8) {
+ const uint8 *t = RomPtr_A9(i);
if ((int16)(samus_y_pos - R20_) >= 0) {
R24_ = samus_y_pos - R20_;
- v3 = *((uint16 *)RomPtr_A9(i) + 3);
+ v3 = *((uint16 *)t + 3);
} else {
R24_ = R20_ - samus_y_pos;
- v3 = *((uint16 *)RomPtr_A9(i) + 1);
+ v3 = *((uint16 *)t + 1);
}
if ((int16)(samus_y_radius + abs16(v3) - R24_) >= 0) {
if ((int16)(samus_x_pos - R18_) >= 0) {
R24_ = samus_x_pos - R18_;
- v4 = *((uint16 *)RomPtr_A9(i) + 2);
+ v4 = *((uint16 *)t + 2);
} else {
R24_ = R18_ - samus_x_pos;
- v4 = *(uint16 *)RomPtr_A9(i);
+ v4 = *(uint16 *)t;
}
v5 = samus_x_radius + abs16(v4) - R24_;
if (v5 >= 0)
break;
}
- if (!--R22_)
+ if (!--R22)
return 0;
}
if (sign16(v5 - 4))
@@ -4974,7 +4946,7 @@ uint8 ProcessCorpseRotting(uint16 k) { // 0xA9DB12
uint16 *v6;
while (1) {
v15 = v4;
- v5 = (int16 *)RomPtr_7E(dms_var_52);
+ v5 = (int16 *)(g_ram + dms_var_52);
v6 = (uint16 *)v5;
if (*v5 >= 0)
break;
@@ -4994,45 +4966,46 @@ LABEL_12:
R18_ = E0->dms_var_42;
if (v15 >= E0->dms_var_47)
R18_ = E0->dms_var_43;
- R20_ = E0->dms_var_44;
- R22_ = 169;
- CopyMoveCorpseRottingRotEntry(*v6);
+
+ LongPtr r20;
+ r20.addr = E0->dms_var_44;
+ r20.bank = 169;
+ CopyMoveCorpseRottingRotEntry(r20, *v6);
}
goto LABEL_12;
}
Enemy_DeadMonsters *E = Get_DeadMonsters(0);
R18_ = E->dms_var_43;
- R20_ = E->dms_var_44;
- R22_ = 169;
- uint16 *v11 = (uint16 *)RomPtr_7E(dms_var_52);
- CopyMoveCorpseRottingRotEntry(*v11);
- uint16 v12 = *(uint16 *)RomPtr_7E(dms_var_52) + 2;
+
+ LongPtr r20;
+ r20.addr = E->dms_var_44;
+ r20.bank = 169;
+ uint16 *v11 = (uint16 *)(g_ram + dms_var_52);
+ CopyMoveCorpseRottingRotEntry(r20, *v11);
+ uint16 v12 = *v11 + 2;
if (v12 < E->dms_var_46) {
-LABEL_11:
- *(uint16 *)RomPtr_7E(dms_var_52) = v12;
+ *(uint16 *)v11 = v12;
goto LABEL_12;
}
R18_ = E->dms_var_49;
CallCorpseRottingFinish(R18_ | 0xA90000);
if (v15 < Get_DeadMonsters(0)->dms_var_46) {
- v12 = -1;
- goto LABEL_11;
+ *(uint16 *)v11 = -1;
+ goto LABEL_12;
}
return 0;
}
-void CopyMoveCorpseRottingRotEntry(uint16 a) { // 0xA9DBE0
+void CopyMoveCorpseRottingRotEntry(LongPtr r20, uint16 a) { // 0xA9DBE0
Enemy_DeadMonsters *E = Get_DeadMonsters(0);
E->dms_var_41 = a;
uint16 v1 = (uint16)(a & 0xFFF8) >> 2;
uint16 v2 = a & 7;
- uint8 *v4 = IndirPtr(&R20_, v1);
+ uint16 v6 = IndirReadWord(r20, v1) + 2 * v2;
if (v2 >= 6u) {
- uint16 v6 = *(uint16 *)v4 + 2 * v2;
CallCorpseRottingMove(R18_ | 0xA90000, E->dms_var_48 + v6, v6);
} else {
- uint16 v5 = *(uint16 *)v4 + 2 * v2;
- CallCorpseRottingMove(R18_ | 0xA90000, v5, v5);
+ CallCorpseRottingMove(R18_ | 0xA90000, v6, v6);
}
}
@@ -5045,57 +5018,53 @@ void CorpseRottingRotEntryFinishedHook(void) { // 0xA9DC08
QueueSfx2_Max3(0x10);
}
-void InitializeCorpseRottingDataTable(uint16 k, uint16 a) { // 0xA9DC40
+void InitializeCorpseRottingDataTable(uint16 *table, uint16 a) { // 0xA9DC40
int16 v2;
-
v2 = a - 1;
R18_ = 0;
do {
- *(uint16 *)RomPtr_7E(k) = v2;
- uint16 v3 = k + 2;
- *(uint16 *)RomPtr_7E(v3) = R18_;
- k = v3 + 2;
+ table[0] = v2;
+ table[1] = R18_;
+ table += 2;
R18_ += 2;
--v2;
} while (v2 >= 0);
}
void InitializeEnemyCorpseRotting(uint16 k, uint16 j) { // 0xA9DC5F
- uint8 *v2 = RomPtr_A9(j);
+ const uint8 *v2 = RomPtr_A9(j);
Enemy_DeadMonsters *E = Get_DeadMonsters(k);
- E->dms_var_52 = *(uint16 *)v2;
- E->dms_var_53 = *((uint16 *)v2 + 1);
- E->dms_var_54 = *((uint16 *)v2 + 2);
- E->dms_var_55 = *((uint16 *)v2 + 3);
- E->dms_var_5B = *((uint16 *)v2 + 7);
- uint16 v4 = *((uint16 *)v2 + 6);
+ E->dms_var_52 = GET_WORD(v2);
+ E->dms_var_53 = GET_WORD(v2 + 2);
+ E->dms_var_54 = GET_WORD(v2 + 4);
+ E->dms_var_55 = GET_WORD(v2 + 6);
+ E->dms_var_5B = GET_WORD(v2 + 14);
+ uint16 v4 = GET_WORD(v2 + 12);
E->dms_var_56 = v4;
E->dms_var_5A = *((uint16 *)RomPtr_A9(v4) + 1) - 12;
- uint16 *v5 = (uint16 *)RomPtr_A9(j);
+ uint16 *v5 = (uint16 *)v2;
uint16 v6 = v5[4];
E->dms_var_57 = v6--;
E->dms_var_58 = v6;
E->dms_var_59 = v6 - 1;
- InitializeCorpseRottingDataTable(*v5, v5[4]);
+ InitializeCorpseRottingDataTable((uint16*)(g_ram + *v5), v5[4]);
R18_ = v5[5];
CallCorpseRottingInit(R18_ | 0xA90000);
}
void ProcessCorpseRottingVramTransfers(uint16 k) { // 0xA9DCB9
- VramWriteEntry *v3;
-
+ const uint8 *p = RomPtr_A9(k);
uint16 v1 = vram_write_queue_tail;
- uint16 v2 = *(uint16 *)RomPtr_A9(k);
+ uint16 v2 = *(uint16 *)p;
do {
- v3 = gVramWriteEntry(v1);
+ VramWriteEntry *v3 = gVramWriteEntry(v1);
v3->size = v2;
- uint8 *v4 = RomPtr_A9(k);
- *(VoidP *)((char *)&v3->src.addr + 1) = *((uint16 *)v4 + 1);
- v3->src.addr = *((uint16 *)v4 + 2);
- v3->vram_dst = *((uint16 *)v4 + 3);
+ *(VoidP *)((char *)&v3->src.addr + 1) = *((uint16 *)p + 1);
+ v3->src.addr = *((uint16 *)p + 2);
+ v3->vram_dst = *((uint16 *)p + 3);
v1 += 7;
- k += 8;
- v2 = *(uint16 *)RomPtr_A9(k);
+ p += 8;
+ v2 = *(uint16 *)p;
} while (v2);
Get_DeadEnemy(0)->dey_var_22 = 0;
vram_write_queue_tail = v1;
@@ -5153,10 +5122,9 @@ void DeadSidehopper_Touch(void) { // 0xA9DD44
DeadSidehopper_DD31();
}
-#define TILEMAP_ADDR(x) RomPtr_7E(0x2000 + x)
void Torizo_CorpseRottingInitFunc(void) { // 0xA9DE18
- uint8 *p = RomPtr_B7(addr_kDeadTorizo_TileData);
+ const uint8 *p = RomPtr_B7(addr_kDeadTorizo_TileData);
MemCpy(TILEMAP_ADDR(0x060), p + 288, 0xC0);
MemCpy(TILEMAP_ADDR(0x1A0), p + 800, 0xC0);
MemCpy(TILEMAP_ADDR(0x2C0), p + 1280, 0x100);
@@ -5171,8 +5139,9 @@ void Torizo_CorpseRottingInitFunc(void) { // 0xA9DE18
MemCpy(TILEMAP_ADDR(0xDC0), p + 5824, 0x140);
}
+
void Sidehopper_CorpseRottingInitFunc_0(void) { // 0xA9DEC1
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x040), p + 64, 0x60);
MemCpy(TILEMAP_ADDR(0x0A0), p + 512, 0xA0);
MemCpy(TILEMAP_ADDR(0x140), p + 1024, 0xA0);
@@ -5181,7 +5150,7 @@ void Sidehopper_CorpseRottingInitFunc_0(void) { // 0xA9DEC1
}
void Sidehopper_CorpseRottingInitFunc_2(void) { // 0xA9DF08
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x320), p + 288, 0x40);
MemCpy(TILEMAP_ADDR(0x3C0), p + 800, 0xA0);
MemCpy(TILEMAP_ADDR(0x460), p + 1312, 0xA0);
@@ -5190,37 +5159,37 @@ void Sidehopper_CorpseRottingInitFunc_2(void) { // 0xA9DF08
}
void Zoomer_CorpseRottingInitFunc_0(void) { // 0xA9DF4F
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x940), p + 2656, 0x60);
MemCpy(TILEMAP_ADDR(0x9A0), p + 3168, 0x60);
}
void Zoomer_CorpseRottingInitFunc_2(void) { // 0xA9DF6C
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0xA00), p + 2752, 0x60);
MemCpy(TILEMAP_ADDR(0xA60), p + 3264, 0x60);
}
void Zoomer_CorpseRottingInitFunc_4(void) { // 0xA9DF89
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0xAC0), p + 2848, 0x60);
MemCpy(TILEMAP_ADDR(0xB20), p + 3360, 0x60);
}
void Ripper_CorpseRottingInitFunc_0(void) { // 0xA9DFA6
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0xB80), p + 2560, 0x60);
MemCpy(TILEMAP_ADDR(0xBE0), p + 3072, 0x60);
}
void Ripper_CorpseRottingInitFunc_2(void) { // 0xA9DFC3
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0xC40), p + 2944, 0x60);
MemCpy(TILEMAP_ADDR(0xCA0), p + 3456, 0x60);
}
void Skree_CorpseRottingInitFunc_0(void) { // 0xA9DFE0
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x640), p + 672, 0x40);
MemCpy(TILEMAP_ADDR(0x680), p + 1184, 0x40);
MemCpy(TILEMAP_ADDR(0x6C0), p + 1696, 0x40);
@@ -5228,7 +5197,7 @@ void Skree_CorpseRottingInitFunc_0(void) { // 0xA9DFE0
}
void Skree_CorpseRottingInitFunc_2(void) { // 0xA9E019
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x740), p + 224, 0x40);
MemCpy(TILEMAP_ADDR(0x780), p + 736, 0x40);
MemCpy(TILEMAP_ADDR(0x7C0), p + 1248, 0x40);
@@ -5236,7 +5205,7 @@ void Skree_CorpseRottingInitFunc_2(void) { // 0xA9E019
}
void Skree_CorpseRottingInitFunc_4(void) { // 0xA9E052
- uint8 *p = RomPtr_B7(addr_kDeadMonsters_TileData);
+ const uint8 *p = kDeadMonsters_TileData;
MemCpy(TILEMAP_ADDR(0x840), p + 448, 0x40);
MemCpy(TILEMAP_ADDR(0x880), p + 960, 0x40);
MemCpy(TILEMAP_ADDR(0x8C0), p + 1472, 0x40);
@@ -5244,24 +5213,14 @@ void Skree_CorpseRottingInitFunc_4(void) { // 0xA9E052
}
void MotherBrain_CorpseRottingInitFunc(void) { // 0xA9E08B
- uint8 *v0 = RomPtr_7E(0x9000);
- uint8 *v1 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 192);
- MemCpy(v0, v1, 0xC0);
- uint8 *v2 = RomPtr_7E(0x90E0);
- uint8 *v3 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 704);
- MemCpy(v2, v3, 0xC0);
- uint8 *v4 = RomPtr_7E(0x91C0);
- uint8 *v5 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 1216);
- MemCpy(v4, v5, 0xC0);
- uint8 *v6 = RomPtr_7E(0x92A0);
- uint8 *v7 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 1728);
- MemCpy(v6, v7, 0xC0);
- uint8 *v8 = RomPtr_7E(0x9380);
- uint8 *v9 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 2240);
- MemCpy(v8, v9, 0xE0);
- uint8 *v10 = RomPtr_7E(0x9460);
- uint8 *v11 = RomPtr_B7(addr_kMotherBrain_Misc_TileData + 2752);
- MemCpy(v10, v11, 0xE0);
+ uint8 *base = &g_ram[0x9000];
+ const uint8 *src = RomPtr_B7(addr_kMotherBrain_Misc_TileData);
+ MemCpy(base, src + 192, 0xC0);
+ MemCpy(base + 0xe0, src + 704, 0xC0);
+ MemCpy(base + 0x1C0, src + 1216, 0xC0);
+ MemCpy(base + 0x2a0, src + 1728, 0xC0);
+ MemCpy(base + 0x380, src + 2240, 0xE0);
+ MemCpy(base + 0x460, src + 2752, 0xE0);
}
void Torizo_CorpseRottingMoveFunc(uint16 j, uint16 k) { // 0xA9E272
@@ -6027,13 +5986,13 @@ void MotherBrain_CorpseRottingCopyFunc(uint16 j, uint16 k) { // 0xA9EB0B
}
}
-uint16 sub_A9ECD0(uint16 k, uint16 j) { // 0xA9ECD0
+const uint16 *sub_A9ECD0(uint16 k, const uint16 *jp) { // 0xA9ECD0
uint16 v2 = FUNC16(DeadMonsters_Func_1);
Enemy_DeadMonsters *E = Get_DeadMonsters(k);
if (E->dms_var_08)
v2 = FUNC16(DeadMonsters_Func_5);
E->dms_var_A = v2;
- return j;
+ return jp;
}
uint8 Shitroid_Func_1(uint16 k, uint16 j) { // 0xA9EED1
@@ -6420,7 +6379,7 @@ void Shitroid_F3C4(uint16 k) { // 0xA9F3C4
}
void Shitroid_Func_26(uint16 k) { // 0xA9F3CB
- if (Get_Shitroid(k)->shitr_var_A == (uint16)FUNC16(Shitroid_Func_25))
+ if (Get_Shitroid(k)->shitr_var_A == FUNC16(Shitroid_Func_25))
Shitroid_F3C4(k);
}
@@ -6720,7 +6679,7 @@ void Shitroid_Touch(void) { // 0xA9F789
E->shitr_var_B += v4;
uint16 v6 = Math_MultByCos(0x40);
E->shitr_var_C += v6;
- } else if (E->shitr_var_A == (uint16)FUNC16(Shitroid_Func_14)) {
+ } else if (E->shitr_var_A == FUNC16(Shitroid_Func_14)) {
R18_ = samus_x_pos;
R20_ = samus_y_pos - 32;
if (Shitroid_AccelerateTowardsPoint(cur_enemy_index, 0x200) & 1) {
@@ -6733,7 +6692,7 @@ void Shitroid_Touch(void) { // 0xA9F789
E->shitr_var_C = 0;
E->shitr_var_A = FUNC16(Shitroid_Func_15);
}
- } else if (E->shitr_var_A == (uint16)FUNC16(Shitroid_Func_13)) {
+ } else if (E->shitr_var_A == FUNC16(Shitroid_Func_13)) {
E->shitr_var_A = FUNC16(Shitroid_Func_14);
}
}
@@ -6757,21 +6716,21 @@ void Shitroid_Shot(void) { // 0xA9F842
}
}
-uint16 Shitroid_Instr_3(uint16 k, uint16 j) { // 0xA9F920
- return addr_kShitroid_Ilist_F90E;
+const uint16 *Shitroid_Instr_3(uint16 k, const uint16 *jp) { // 0xA9F920
+ return INSTR_RETURN_ADDR(addr_kShitroid_Ilist_F90E);
}
-uint16 Shitroid_Instr_4(uint16 k, uint16 j) { // 0xA9F936
- return addr_kShitroid_Ilist_F924;
+const uint16 *Shitroid_Instr_4(uint16 k, const uint16 *jp) { // 0xA9F936
+ return INSTR_RETURN_ADDR(addr_kShitroid_Ilist_F924);
}
-uint16 Shitroid_Instr_6(uint16 k, uint16 j) { // 0xA9F990
- return addr_kShitroid_Ilist_F93A;
+const uint16 *Shitroid_Instr_6(uint16 k, const uint16 *jp) { // 0xA9F990
+ return INSTR_RETURN_ADDR(addr_kShitroid_Ilist_F93A);
}
-uint16 Shitroid_Instr_5(uint16 k, uint16 j) { // 0xA9F994
+const uint16 *Shitroid_Instr_5(uint16 k, const uint16 *jp) { // 0xA9F994
if ((random_number & 0x8000) == 0)
- return *(uint16 *)RomPtr_A9(j);
+ return INSTR_RETURN_ADDR(jp[0]);
QueueSfx2_Max6(0x52u);
- return j + 2;
-}
+ return jp + 1;
+}
\ No newline at end of file
diff --git a/src/sm_aa.c b/src/sm_aa.c
index 9fabdf2..40628c1 100644
--- a/src/sm_aa.c
+++ b/src/sm_aa.c
@@ -4,6 +4,33 @@
#include "funcs.h"
#include "enemy_types.h"
+
+#define g_off_AAC967 ((uint16*)RomFixedPtr(0xaac967))
+#define g_off_AAD810 ((uint16*)RomFixedPtr(0xaad810))
+#define g_word_AAD765 ((uint16*)RomFixedPtr(0xaad765))
+#define g_word_AAD785 ((uint16*)RomFixedPtr(0xaad785))
+#define g_off_AADF13 ((uint16*)RomFixedPtr(0xaadf13))
+#define g_off_AADF21 ((uint16*)RomFixedPtr(0xaadf21))
+#define kSine ((uint16*)RomFixedPtr(0xaae0bd))
+#define kCosine ((uint16*)RomFixedPtr(0xaae13d))
+#define kNegativeSine ((uint16*)RomFixedPtr(0xaae1bd))
+#define kNegativeCosine_0 ((uint16*)RomFixedPtr(0xaae23d))
+#define kNegativeCosine ((uint16*)RomFixedPtr(0xaae03d))
+#define g_off_AADD15 ((uint16*)RomFixedPtr(0xaadd15))
+#define g_word_AADE95 ((uint16*)RomFixedPtr(0xaade95))
+#define g_word_AADEA3 ((uint16*)RomFixedPtr(0xaadea3))
+#define g_word_AADEB1 ((uint16*)RomFixedPtr(0xaadeb1))
+#define g_off_AADEDB ((uint16*)RomFixedPtr(0xaadedb))
+#define g_word_AADEF7 ((uint16*)RomFixedPtr(0xaadef7))
+#define g_word_AADECD ((uint16*)RomFixedPtr(0xaadecd))
+#define g_word_AAE630 ((uint16*)RomFixedPtr(0xaae630))
+#define g_word_AAE670 ((uint16*)RomFixedPtr(0xaae670))
+#define g_word_AAE6B0 ((uint16*)RomFixedPtr(0xaae6b0))
+#define kN00bTubeCracks_Palette2 ((uint16*)RomFixedPtr(0xaae2dd))
+#define g_off_AAE7A2 ((uint16*)RomFixedPtr(0xaae7a2))
+
+
+
static const uint16 g_word_AAB096 = 6;
static const uint16 g_word_AAB098 = 5;
static const uint16 g_word_AAB09A = 3;
@@ -22,7 +49,6 @@ static const int16 g_word_AAC532[20] = {
};
static const int16 g_word_AAC95F[2] = { 0xdb, 0x1a8 };
static const int16 g_word_AAC963[2] = { 0xb3, 0x90 };
-#define g_off_AAC967 ((uint16*)RomPtr(0xaac967))
static const int16 g_word_AAC96B[2] = { 0x2800, 0x2800 };
static const int16 g_word_AAC96F[2] = { 0x12, 0x12 };
static const int16 g_word_AAC973[2] = { 0x30, 0x29 };
@@ -41,29 +67,7 @@ static const int16 g_word_AAD59A[20] = {
-5, 0, -5, -19, -16, -7, 0, -7, -17, -18, 5, 0, 5, 19, 16, 7,
0, 7, 17, 18,
};
-#define g_off_AAD810 ((uint16*)RomPtr(0xaad810))
-#define g_word_AAD765 ((uint16*)RomPtr(0xaad765))
-#define g_word_AAD785 ((uint16*)RomPtr(0xaad785))
-#define g_off_AADF13 ((uint16*)RomPtr(0xaadf13))
-#define g_off_AADF21 ((uint16*)RomPtr(0xaadf21))
-#define kSine ((uint16*)RomPtr(0xaae0bd))
-#define kCosine ((uint16*)RomPtr(0xaae13d))
-#define kNegativeSine ((uint16*)RomPtr(0xaae1bd))
-#define kNegativeCosine_0 ((uint16*)RomPtr(0xaae23d))
-#define kNegativeCosine ((uint16*)RomPtr(0xaae03d))
-#define g_off_AADD15 ((uint16*)RomPtr(0xaadd15))
-#define g_word_AADE95 ((uint16*)RomPtr(0xaade95))
-#define g_word_AADEA3 ((uint16*)RomPtr(0xaadea3))
-#define g_word_AADEB1 ((uint16*)RomPtr(0xaadeb1))
-#define g_off_AADEDB ((uint16*)RomPtr(0xaadedb))
static const uint16 g_word_AADEE9[7] = { 0, 0x20, 0x60, 0xc0, 0x140, 0x1a0, 0x1e0 };
-#define g_word_AADEF7 ((uint16*)RomPtr(0xaadef7))
-#define g_word_AADECD ((uint16*)RomPtr(0xaadecd))
-#define g_word_AAE630 ((uint16*)RomPtr(0xaae630))
-#define g_word_AAE670 ((uint16*)RomPtr(0xaae670))
-#define g_word_AAE6B0 ((uint16*)RomPtr(0xaae6b0))
-#define kN00bTubeCracks_Palette2 ((uint16*)RomPtr(0xaae2dd))
-#define g_off_AAE7A2 ((uint16*)RomPtr(0xaae7a2))
static const uint16 kChozoStatue_Palette[16] = { 0x3800, 0x633f, 0x4a9f, 0x2ddf, 0x6739, 0x4e73, 0x318c, 0x18c6, 0x27ff, 0x1af7, 0xdce, 0xc6, 0x3fff, 0x2b39, 0x7fff, 0 };
static const int16 kChozoStatue_Palettes[16] = {
0x3800, 0x633f, 0x4a9f, 0x2ddf, 0x4210, 0x318c, 0x2108, 0x1084,
@@ -86,74 +90,22 @@ void Enemy_NormalFrozenAI_AA(void) { // 0xAA8041
NormalEnemyFrozenAI();
}
-uint16 Enemy_ClearAiPreInstr_AA(uint16 k, uint16 j) { // 0xAA8074
+const uint16 *Enemy_ClearAiPreInstr_AA(uint16 k, const uint16 *jp) { // 0xAA8074
gEnemyData(k)->ai_preinstr = FUNC16(nullsub_171_AA);
- return j;
+ return jp;
}
-uint16 Enemy_SetAiPreInstr_AA(uint16 k, uint16 j) { // 0xAA806B
- gEnemyData(k)->ai_preinstr = *(uint16 *)RomPtr_AA(j);
- return j + 2;
+const uint16 *Enemy_SetAiPreInstr_AA(uint16 k, const uint16 *jp) { // 0xAA806B
+ gEnemyData(k)->ai_preinstr = jp[0];
+ return jp + 1;
}
-uint16 EnemyInstr_StopScript_AA(uint16 k, uint16 j) { // 0xAA807C
- EnemyData *v2 = gEnemyData(k);
- v2->properties |= kEnemyProps_Deleted;
- return 0;
+const uint16 *Torizo_Instr_3(uint16 k, const uint16 *jp) { // 0xAAB09C
+ Get_Torizo(k)->toriz_var_E = jp[0];
+ return jp + 1;
}
-uint16 EnemyInstr_Goto_AA(uint16 k, uint16 j) { // 0xAA80ED
- return *(uint16 *)RomPtr_AA(j);
-}
-
-uint16 EnemyInstr_DecTimerAndGoto2_AA(uint16 k, uint16 j) { // 0xAA8110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_AA(k, j);
-}
-
-uint16 EnemyInstr_SetTimer_AA(uint16 k, uint16 j) { // 0xAA8123
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-
-uint16 EnemyInstr_Sleep_AA(uint16 k, uint16 j) { // 0xAA812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
-
-uint16 EnemyInstr_WaitNframes_AA(uint16 k, uint16 j) { // 0xAA813A
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
- EnemyData *v3 = gEnemyData(k);
- v3->instruction_timer = v2;
- v3->current_instruction = j + 2;
- return 0;
-}
-
-uint16 EnemyInstr_CopyToVram_AA(uint16 k, uint16 j) { // 0xAA814B
- VramWriteEntry *v4;
-
- uint16 v2 = vram_write_queue_tail;
- uint8 *v3 = RomPtr_AA(j);
- v4 = gVramWriteEntry(vram_write_queue_tail);
- v4->size = *(uint16 *)v3;
- v4->src.addr = *((uint16 *)v3 + 1);
- *(VoidP *)((char *)&v4->src.addr + 1) = *(uint16 *)(v3 + 3);
- v4->vram_dst = *(uint16 *)(v3 + 5);
- vram_write_queue_tail = v2 + 7;
- return j + 7;
-}
-
-uint16 Torizo_Instr_3(uint16 k, uint16 j) { // 0xAAB09C
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
- Get_Torizo(k)->toriz_var_E = v2;
- return j + 2;
-}
-
-uint16 Torizo_Instr_31(uint16 k, uint16 j) { // 0xAAB11D
+const uint16 *Torizo_Instr_31(uint16 k, const uint16 *jp) { // 0xAAB11D
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_2 = E->toriz_parameter_2 | 0x8000;
SpawnEnemyProjectileWithGfx(0, k, addr_stru_86A95B);
@@ -162,60 +114,60 @@ uint16 Torizo_Instr_31(uint16 k, uint16 j) { // 0xAAB11D
SpawnEnemyProjectileWithGfx(0, k, addr_stru_86A95B);
SpawnEnemyProjectileWithGfx(0, k, addr_stru_86A95B);
SpawnEnemyProjectileWithGfx(0, k, addr_stru_86A95B);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_33(uint16 k, uint16 j) { // 0xAAB1BE
+const uint16 *Torizo_Instr_33(uint16 k, const uint16 *jp) { // 0xAAB1BE
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_2 |= 0x4000u;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_36(uint16 k, uint16 j) { // 0xAAB224
+const uint16 *Torizo_Instr_36(uint16 k, const uint16 *jp) { // 0xAAB224
Enemy_Torizo *E = Get_Torizo(k);
E->base.properties &= ~kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_37(uint16 k, uint16 j) { // 0xAAB22E
+const uint16 *Torizo_Instr_37(uint16 k, const uint16 *jp) { // 0xAAB22E
Enemy_Torizo *E = Get_Torizo(k);
E->base.properties |= kEnemyProps_Invisible;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_35(uint16 k, uint16 j) { // 0xAAB238
+const uint16 *Torizo_Instr_35(uint16 k, const uint16 *jp) { // 0xAAB238
for (int i = 30; i >= 0; i -= 2) {
int v3 = i >> 1;
target_palettes[v3 + 160] = 0;
target_palettes[v3 + 144] = 0;
}
- return j;
+ return jp;
}
-uint16 Torizo_Instr_38(uint16 k, uint16 j) { // 0xAAB24D
+const uint16 *Torizo_Instr_38(uint16 k, const uint16 *jp) { // 0xAAB24D
SetBossBitForCurArea(4u);
QueueMusic_Delayed8(g_word_AAB09A);
if (area_index)
Enemy_ItemDrop_GoldenTorizo(k);
else
Enemy_ItemDrop_BombTorizo(k);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_6(uint16 k, uint16 j) { // 0xAAB271
+const uint16 *Torizo_Instr_6(uint16 k, const uint16 *jp) { // 0xAAB271
sub_82DAF7(0x600u);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_5(uint16 k, uint16 j) { // 0xAAB94D
+const uint16 *Torizo_Instr_5(uint16 k, const uint16 *jp) { // 0xAAB94D
Torizo_C268();
- return j;
+ return jp;
}
-uint16 Torizo_Instr_9(uint16 k, uint16 j) { // 0xAAB951
+const uint16 *Torizo_Instr_9(uint16 k, const uint16 *jp) { // 0xAAB951
QueueMusic_Delayed8(g_word_AAB098);
SpawnPalfxObject(addr_stru_8DF759);
- return j;
+ return jp;
}
void Torizo_C20A(uint16 k) { // 0xAAC20A
@@ -286,241 +238,237 @@ void Torizo_C2B0(void) { // 0xAAC2B0
}
}
-uint16 Torizo_Instr_7(uint16 k, uint16 j) { // 0xAAC2C8
- return j;
+const uint16 *Torizo_Instr_7(uint16 k, const uint16 *jp) { // 0xAAC2C8
+ return jp;
}
-uint16 Torizo_Instr_2(uint16 k, uint16 j) { // 0xAAC2C9
+const uint16 *Torizo_Instr_2(uint16 k, const uint16 *jp) { // 0xAAC2C9
Get_Torizo(k)->toriz_var_04 = 30583;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_8(uint16 k, uint16 j) { // 0xAAC2D1
+const uint16 *Torizo_Instr_8(uint16 k, const uint16 *jp) { // 0xAAC2D1
Get_Torizo(k)->toriz_var_04 = 0;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_25(uint16 k, uint16 j) { // 0xAAC2D9
+const uint16 *Torizo_Instr_25(uint16 k, const uint16 *jp) { // 0xAAC2D9
if ((Get_Torizo(k)->toriz_parameter_2 & 0x4000) != 0)
- return *(uint16 *)RomPtr_AA(j);
- j += 2;
+ return INSTR_RETURN_ADDR(jp[0]);
if (area_index)
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[1]);
else
- return j + 2;
+ return jp + 2;
}
-uint16 Torizo_Instr_22(uint16 k, uint16 j) { // 0xAAC2ED
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
- Get_Torizo(k)->toriz_var_00 = v2;
- return j + 2;
+const uint16 *Torizo_Instr_22(uint16 k, const uint16 *jp) { // 0xAAC2ED
+ Get_Torizo(k)->toriz_var_00 = jp[0];
+ return jp + 1;
}
-uint16 Torizo_Instr_19(uint16 k, uint16 j) { // 0xAAC2F7
- return Get_Torizo(k)->toriz_var_00;
+const uint16 *Torizo_Instr_19(uint16 k, const uint16 *jp) { // 0xAAC2F7
+ return INSTR_RETURN_ADDR(Get_Torizo(k)->toriz_var_00);
}
-uint16 Torizo_Instr_32(uint16 k, uint16 j) { // 0xAAC2FD
- return Get_Torizo(k)->toriz_var_01;
+const uint16 *Torizo_Instr_32(uint16 k, const uint16 *jp) { // 0xAAC2FD
+ return INSTR_RETURN_ADDR(Get_Torizo(k)->toriz_var_01);
}
-uint16 Torizo_Instr_30(uint16 k, uint16 j) { // 0xAAC303
- uint16 a = *(uint16 *)RomPtr_AA(j);
+const uint16 *Torizo_Instr_30(uint16 k, const uint16 *jp) { // 0xAAC303
+ uint16 a = jp[0];
for (int i = 5; i >= 0; --i)
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_BombTorizoLowHealthExplode, a);
Enemy_Torizo *E = Get_Torizo(k);
- E->base.current_instruction = j + 2;
+ E->base.current_instruction = INSTR_ADDR_TO_PTR(k, jp + 1);
E->base.flash_timer = 40;
E->base.instruction_timer = 40;
return 0;
}
-uint16 Torizo_Instr_34(uint16 k, uint16 j) { // 0xAAC32F
- printf("A undefined\n");
+const uint16 *Torizo_Instr_34(uint16 k, const uint16 *jp) { // 0xAAC32F
+ //printf("A undefined\n");
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_BombTorizoDeathExplosion, 0);
Enemy_Torizo *E = Get_Torizo(k);
- E->base.current_instruction = j;
+ E->base.current_instruction = INSTR_ADDR_TO_PTR(k, jp);
E->base.flash_timer = 1;
E->base.instruction_timer = 1;
return 0;
}
-uint16 Torizo_Instr_24(uint16 k, uint16 j) { // 0xAAC34A
- printf("A undefined\n");
+const uint16 *Torizo_Instr_24(uint16 k, const uint16 *jp) { // 0xAAC34A
+ //printf("A undefined\n");
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianLandingDustCloudsRightFoot, 0);
SpawnEnemyProjectileWithRoomGfx(addr_stru_86AFF3, 0);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_12(uint16 k, uint16 j) { // 0xAAC35B
+const uint16 *Torizo_Instr_12(uint16 k, const uint16 *jp) { // 0xAAC35B
uint16 health = Get_Torizo(k)->base.health;
if (health < 0x15Eu)
SpawnEnemyProjectileWithGfx(health, k, addr_kEproj_BombTorizoLowHealthInitialDrool);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_10(uint16 k, uint16 j) { // 0xAAC36D
+const uint16 *Torizo_Instr_10(uint16 k, const uint16 *jp) { // 0xAAC36D
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_1 |= 0x4000u;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_11(uint16 k, uint16 j) { // 0xAAC377
+const uint16 *Torizo_Instr_11(uint16 k, const uint16 *jp) { // 0xAAC377
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_1 &= 0x1FFFu;
++E->toriz_var_09;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_29(uint16 k, uint16 j) { // 0xAAC38A
+const uint16 *Torizo_Instr_29(uint16 k, const uint16 *jp) { // 0xAAC38A
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_1 = E->toriz_parameter_1 & 0x1FFF | 0x8000;
++E->toriz_var_09;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_1(uint16 k, uint16 j) { // 0xAAC3A0
+const uint16 *Torizo_Instr_1(uint16 k, const uint16 *jp) { // 0xAAC3A0
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_1 = E->toriz_parameter_1 & 0x1FFF | 0x2000;
++E->toriz_var_09;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_28(uint16 k, uint16 j) { // 0xAAC3B6
+const uint16 *Torizo_Instr_28(uint16 k, const uint16 *jp) { // 0xAAC3B6
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_1 = E->toriz_parameter_1 & 0x1FFF | 0xA000;
++E->toriz_var_09;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_4(uint16 k, uint16 j) { // 0xAAC3CC
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
+const uint16 *Torizo_Instr_4(uint16 k, const uint16 *jp) { // 0xAAC3CC
+ uint16 v2 = jp[0];
Enemy_Torizo *E = Get_Torizo(k);
E->base.x_pos += g_word_AAC3EE[v2 >> 1];
E->base.y_pos += g_word_AAC40E[(uint8)(v2 & 0xF) >> 1];
- return j + 2;
+ return jp + 1;
}
-uint16 Torizo_Instr_40(uint16 k, uint16 j) { // 0xAAC41E
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
+const uint16 *Torizo_Instr_40(uint16 k, const uint16 *jp) { // 0xAAC41E
+ uint16 v2 = jp[0];
Enemy_Torizo *E = Get_Torizo(k);
E->base.x_pos -= g_word_AAC440[v2 >> 1];
E->base.y_pos -= g_word_AAC460[(uint8)(v2 & 0xF) >> 1];
- return j + 2;
+ return jp + 1;
}
-uint16 Torizo_Instr_16(uint16 k, uint16 j) { // 0xAAC470
+const uint16 *Torizo_Instr_16(uint16 k, const uint16 *jp) { // 0xAAC470
R18_ = 0;
- R20_ = g_word_AAC4BD[*(uint16 *)RomPtr_AA(j) >> 1];
+ R20_ = g_word_AAC4BD[jp[0] >> 1];
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_var_A = R20_;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1) {
E->toriz_var_03 = 0;
if ((E->toriz_parameter_1 & 0x8000u) != 0)
- return addr_kTorizo_Ilist_B962;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_B962);
else
- return addr_kTorizo_Ilist_BDD8;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_BDD8);
} else {
EnemyFunc_C8AD(k);
if (((E->toriz_parameter_1 ^ (samus_x_pos - E->base.x_pos)) & 0x8000u) == 0) {
if (!E->toriz_var_03)
E->toriz_var_03 = 72;
- return j + 2;
+ return jp + 1;
} else {
- return j + 2;
+ return jp + 1;
}
}
}
-uint16 Torizo_Instr_27(uint16 k, uint16 j) { // 0xAAC4E5
+const uint16 *Torizo_Instr_27(uint16 k, const uint16 *jp) { // 0xAAC4E5
R18_ = 0;
- R20_ = g_word_AAC532[*(uint16 *)RomPtr_AA(j) >> 1];
+ R20_ = g_word_AAC532[jp[0] >> 1];
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_var_A = R20_;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1) {
E->toriz_var_03 = 0;
if ((E->toriz_parameter_1 & 0x8000u) != 0)
- return addr_kTorizo_Ilist_BD0E;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_BD0E);
else
- return addr_kTorizo_Ilist_C188;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_C188);
} else {
EnemyFunc_C8AD(k);
if (((E->toriz_parameter_1 ^ (samus_x_pos - E->base.x_pos)) & 0x8000u) == 0) {
if (!E->toriz_var_03)
E->toriz_var_03 = 72;
- return j + 2;
+ return jp + 1;
} else {
- return j + 2;
+ return jp + 1;
}
}
}
-uint16 Torizo_Instr_23(uint16 k, uint16 j) { // 0xAAC55A
+const uint16 *Torizo_Instr_23(uint16 k, const uint16 *jp) { // 0xAAC55A
if ((Get_Torizo(k)->toriz_var_B & 0x8000u) != 0)
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
else
- return j + 2;
+ return jp + 1;
}
-uint16 Torizo_Instr_14(uint16 k, uint16 j) { // 0xAAC567
+const uint16 *Torizo_Instr_14(uint16 k, const uint16 *jp) { // 0xAAC567
if (CompareDistToSamus_X(k, 0x38) & 1)
- return j + 2;
+ return jp + 1;
Enemy_Torizo *E = Get_Torizo(k);
if (((E->toriz_parameter_1 ^ (samus_x_pos - E->base.x_pos)) & 0x8000u) == 0)
- return j + 2;
- E->toriz_var_00 = j + 2;
- return *(uint16 *)RomPtr_AA(j);
+ return jp + 1;
+ E->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 1);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_15(uint16 k, uint16 j) { // 0xAAC58B
+const uint16 *Torizo_Instr_15(uint16 k, const uint16 *jp) { // 0xAAC58B
if (CompareDistToSamus_X(k, 0x20) & 1 || (Torizo_Func_12(k) & 0x8000u) != 0)
- return j + 2;
+ return jp + 1;
Torizo_C22D(k);
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_26(uint16 k, uint16 j) { // 0xAAC5A4
- Get_Torizo(k)->toriz_var_00 = j + 4;
+const uint16 *Torizo_Instr_26(uint16 k, const uint16 *jp) { // 0xAAC5A4
+ Enemy_Torizo *E = Get_Torizo(k);
+ E->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 2);
if (samus_missiles < 5u || ((nmi_frame_counter_word + (samus_x_pos & 1) + (samus_x_pos >> 1)) & 8) != 0)
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
else
- return *((uint16 *)RomPtr_AA(j) + 1);
+ return INSTR_RETURN_ADDR(jp[1]);
}
-uint16 Torizo_Instr_18(uint16 k, uint16 j) { // 0xAAC5CB
- printf("A unknown\n");
+const uint16 *Torizo_Instr_18(uint16 k, const uint16 *jp) { // 0xAAC5CB
+ //printf("A unknown\n");
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_BombTorizosChozoOrbs);
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_BombTorizosChozoOrbs);
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_BombTorizosChozoOrbs);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_20(uint16 k, uint16 j) { // 0xAAC5E3
- uint16 *v2 = (uint16 *)RomPtr_AA(j);
- SpawnEnemyProjectileWithGfx(*v2, k, addr_kEproj_BombTorizoSonicBoom);
- return j + 2;
+const uint16 *Torizo_Instr_20(uint16 k, const uint16 *jp) { // 0xAAC5E3
+ SpawnEnemyProjectileWithGfx(jp[0], k, addr_kEproj_BombTorizoSonicBoom);
+ return jp + 1;
}
-uint16 Torizo_Instr_44(uint16 k, uint16 j) { // 0xAAC5F2
- uint16 *v2 = (uint16 *)RomPtr_AA(j);
- SpawnEnemyProjectileWithGfx(*v2, k, addr_kEproj_GoldenTorizoSonicBoom);
- return j + 2;
+const uint16 *Torizo_Instr_44(uint16 k, const uint16 *jp) { // 0xAAC5F2
+ SpawnEnemyProjectileWithGfx(jp[0], k, addr_kEproj_GoldenTorizoSonicBoom);
+ return jp + 1;
}
-uint16 Torizo_Instr_21(uint16 k, uint16 j) { // 0xAAC601
- uint16 *v2 = (uint16 *)RomPtr_AA(j);
- SpawnEnemyProjectileWithRoomGfx(addr_kEproj_BombTorizoExplosiveSwipe, *v2);
- return j + 2;
+const uint16 *Torizo_Instr_21(uint16 k, const uint16 *jp) { // 0xAAC601
+ SpawnEnemyProjectileWithRoomGfx(addr_kEproj_BombTorizoExplosiveSwipe, jp[0]);
+ return jp + 1;
}
-uint16 Torizo_Instr_17(uint16 k, uint16 j) { // 0xAAC610
+const uint16 *Torizo_Instr_17(uint16 k, const uint16 *jp) { // 0xAAC610
QueueSfx2_Max6(0x27u);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_13(uint16 k, uint16 j) { // 0xAAC618
+const uint16 *Torizo_Instr_13(uint16 k, const uint16 *jp) { // 0xAAC618
QueueSfx2_Max6(0x4Bu);
- return j;
+ return jp;
}
void Torizo_C620(uint16 k) { // 0xAAC620
@@ -543,7 +491,7 @@ void Torizo_C643(uint16 k) { // 0xAAC643
torizo_var_B = E->toriz_var_B;
if (torizo_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = torizo_var_B;
+ R19_ = torizo_var_B;
if (Enemy_MoveDown(k) & 1) {
v3 = E->toriz_var_B;
if (v3 >= 0 && v3 != 256) {
@@ -603,7 +551,7 @@ void Torizo_Func_4(uint16 k) { // 0xAAC6C6
Enemy_Torizo *E = Get_Torizo(k);
E->base.properties |= kEnemyProps_Tangible;
uint16 v2 = 78;
- while (plm_header_ptr[v2 >> 1] != (uint16)addr_kPlmHeader_D6EA) {
+ while (plm_header_ptr[v2 >> 1] != addr_kPlmHeader_D6EA) {
v2 -= 2;
if ((v2 & 0x8000u) != 0) {
QueueMusic_Delayed8(g_word_AAB096);
@@ -719,7 +667,7 @@ void Torizo_Func_7(uint16 k) { // 0xAAC82C
torizo_var_A = E->toriz_var_A;
if (torizo_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = torizo_var_A;
+ R19_ = torizo_var_A;
Enemy_MoveRight_IgnoreSlopes(k);
EnemyFunc_C8AD(k);
R18_ = 0;
@@ -727,7 +675,7 @@ void Torizo_Func_7(uint16 k) { // 0xAAC82C
torizo_var_B = E->toriz_var_B;
if (torizo_var_B < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = torizo_var_B;
+ R19_ = torizo_var_B;
if (Enemy_MoveDown(k) & 1) {
E->base.current_instruction = E->toriz_var_00;
E->base.instruction_timer = 1;
@@ -817,67 +765,67 @@ void Torizo_Func_8(void) { // 0xAAC9C2
Torizo_D658();
}
-uint16 Torizo_Instr_39(uint16 k, uint16 j) { // 0xAACACE
+const uint16 *Torizo_Instr_39(uint16 k, const uint16 *jp) { // 0xAACACE
if (Get_Torizo(k)->base.y_pos == 375)
- return j + 2;
+ return jp + 1;
else
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_41(uint16 k, uint16 j) { // 0xAACADE
+const uint16 *Torizo_Instr_41(uint16 k, const uint16 *jp) { // 0xAACADE
Torizo_C298();
- return j;
+ return jp;
}
-uint16 Torizo_Instr_42(uint16 k, uint16 j) { // 0xAACAE2
+const uint16 *Torizo_Instr_42(uint16 k, const uint16 *jp) { // 0xAACAE2
QueueMusic_Delayed8(5u);
Enemy_Torizo *E = Get_Torizo(k);
E->base.x_width = 18;
E->base.y_height = 48;
SpawnPalfxObject(addr_stru_8DF75D);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_48(uint16 k, uint16 j) { // 0xAACDD7
+const uint16 *Torizo_Instr_48(uint16 k, const uint16 *jp) { // 0xAACDD7
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_2 &= ~0x1000u;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_57(uint16 k, uint16 j) { // 0xAAD0E9
- printf("A unknown\n");
+const uint16 *Torizo_Instr_57(uint16 k, const uint16 *jp) { // 0xAAD0E9
+ //printf("A unknown\n");
SpawnEnemyProjectileWithRoomGfx(addr_stru_86B1C0, 0);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_58(uint16 k, uint16 j) { // 0xAAD0F3
+const uint16 *Torizo_Instr_58(uint16 k, const uint16 *jp) { // 0xAAD0F3
int16 v2;
v2 = 34;
while (*(uint16 *)((char *)enemy_projectile_id + (uint16)v2) != 0xB1C0) {
v2 -= 2;
if (v2 < 0)
- return j + 2;
+ return jp + 1;
}
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_59(uint16 k, uint16 j) { // 0xAAD17B
+const uint16 *Torizo_Instr_59(uint16 k, const uint16 *jp) { // 0xAAD17B
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_var_06 &= ~0x8000u;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_62(uint16 k, uint16 j) { // 0xAAD187
+const uint16 *Torizo_Instr_62(uint16 k, const uint16 *jp) { // 0xAAD187
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_var_06 |= 0x8000u;
- return j;
+ return jp;
}
-uint16 Torizo_Instr_63(uint16 k, uint16 j) { // 0xAAD1E7
+const uint16 *Torizo_Instr_63(uint16 k, const uint16 *jp) { // 0xAAD1E7
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_parameter_2 &= ~0x2000u;
- return j;
+ return jp;
}
@@ -892,19 +840,19 @@ void GoldTorizo_Main(void) { // 0xAAD369
CallTorizoFunc(E->toriz_var_E | 0xAA0000, cur_enemy_index);
}
-uint16 Torizo_Instr_56(uint16 k, uint16 j) { // 0xAAD38F
+const uint16 *Torizo_Instr_56(uint16 k, const uint16 *jp) { // 0xAAD38F
QueueSfx2_Max6(0x34u);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_60(uint16 k, uint16 j) { // 0xAAD397
+const uint16 *Torizo_Instr_60(uint16 k, const uint16 *jp) { // 0xAAD397
QueueSfx2_Max6(0x67u);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_46(uint16 k, uint16 j) { // 0xAAD39F
+const uint16 *Torizo_Instr_46(uint16 k, const uint16 *jp) { // 0xAAD39F
QueueSfx2_Max6(0x48u);
- return j;
+ return jp;
}
uint16 Torizo_Func_12(uint16 k) { // 0xAAD3A7
@@ -930,14 +878,14 @@ void GoldTorizo_Hurt(void) { // 0xAAD3BA
}
}
-uint16 Torizo_Instr_47(uint16 k, uint16 j) { // 0xAAD3E0
+const uint16 *Torizo_Instr_47(uint16 k, const uint16 *jp) { // 0xAAD3E0
uint16 v2 = 0;
- printf("A unknown\n");
+ //printf("A unknown\n");
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_GoldenTorizoSuperMissile, v2);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_49(uint16 k, uint16 j) { // 0xAAD3EA
+const uint16 *Torizo_Instr_49(uint16 k, const uint16 *jp) { // 0xAAD3EA
if ((Torizo_Func_12(k) & 0x8000u) == 0
|| !(CompareDistToSamus_X(k, 4u) & 1)
|| CompareDistToSamus_X(k, 0x28) & 1
@@ -948,104 +896,103 @@ uint16 Torizo_Instr_49(uint16 k, uint16 j) { // 0xAAD3EA
&& samus_pose != kPose_7A_FaceL_Springball_Ground
&& samus_pose != kPose_7B_MoveR_Springball_Ground
&& samus_pose != kPose_7C_MoveL_Springball_Ground) {
- return j + 2;
+ return jp + 1;
}
Get_Torizo(k)->toriz_var_09 = 0;
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_61(uint16 k, uint16 j) { // 0xAAD436
- uint16 *v2 = (uint16 *)RomPtr_AA(j);
- SpawnEnemyProjectileWithRoomGfx(addr_kEproj_GoldenTorizoEyeBeam, *v2);
- return j + 2;
+const uint16 *Torizo_Instr_61(uint16 k, const uint16 *jp) { // 0xAAD436
+ SpawnEnemyProjectileWithRoomGfx(addr_kEproj_GoldenTorizoEyeBeam, jp[0]);
+ return jp + 1;
}
-uint16 Torizo_Instr_53(uint16 k, uint16 j) { // 0xAAD445
+const uint16 *Torizo_Instr_53(uint16 k, const uint16 *jp) { // 0xAAD445
if ((Torizo_Func_12(k) & 0x8000u) != 0
|| !(CompareDistToSamus_X(k, 0x20) & 1)
|| CompareDistToSamus_X(k, 0x60) & 1
|| (NextRandom() & 0x110) != 0) {
- return j + 2;
+ return jp + 1;
}
- Get_Torizo(k)->toriz_var_00 = j + 2;
- return *(uint16 *)RomPtr_AA(j);
+ Get_Torizo(k)->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 1);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_55(uint16 k, uint16 j) { // 0xAAD474
+const uint16 *Torizo_Instr_55(uint16 k, const uint16 *jp) { // 0xAAD474
Enemy_Torizo *E = Get_Torizo(k);
if (E->base.health > 0x788u || (NextRandom() & 0x102) != 0)
- return j + 2;
+ return INSTR_RETURN_ADDR(jp + 1);
E->toriz_var_09 = 0;
- E->toriz_var_00 = j + 2;
- return *(uint16 *)RomPtr_AA(j);
+ E->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 1);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_52(uint16 k, uint16 j) { // 0xAAD49B
+const uint16 *Torizo_Instr_52(uint16 k, const uint16 *jp) { // 0xAAD49B
Enemy_Torizo *E = Get_Torizo(k);
if (E->base.health <= 0x2A30u || (E->toriz_parameter_2 & 0x2000) == 0)
- return j + 2;
- E->toriz_var_00 = j + 2;
- return *(uint16 *)RomPtr_AA(j);
+ return jp + 1;
+ E->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 1);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_50(uint16 k, uint16 j) { // 0xAAD4BA
+const uint16 *Torizo_Instr_50(uint16 k, const uint16 *jp) { // 0xAAD4BA
if (!(CompareDistToSamus_X(k, 0x70) & 1))
- return j + 2;
+ return jp + 1;
if ((Torizo_Func_12(k) & 0x8000u) != 0)
- return j + 2;
+ return jp + 1;
Enemy_Torizo *E = Get_Torizo(k);
if (E->toriz_var_07 <= 0x168u && ((joypad1_lastkeys & 0x300) == 0 || (NextRandom() & 0x101) == 0))
- return j + 2;
+ return jp + 1;
E->toriz_var_09 = 0;
Torizo_C20A(k);
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_43(uint16 k, uint16 j) { // 0xAAD4F3
- uint16 v2;
- printf("A unknown\n"); v2 = 0;
+const uint16 *Torizo_Instr_43(uint16 k, const uint16 *jp) { // 0xAAD4F3
+ uint16 v2 = 0;
+ //printf("A unknown\n"); v2 = 0;
SpawnEnemyProjectileWithGfx(v2, k, addr_kEproj_GoldenTorizosChozoOrbs);
- return j;
+ return jp;
}
-uint16 Torizo_Instr_51(uint16 k, uint16 j) { // 0xAAD4FD
+const uint16 *Torizo_Instr_51(uint16 k, const uint16 *jp) { // 0xAAD4FD
Enemy_Torizo *E = Get_Torizo(k);
if (E->toriz_var_09 < 8u && (CompareDistToSamus_X(k, 0x20) & 1 || (Torizo_Func_12(k) & 0x8000u) != 0))
- return j + 2;
+ return jp + 1;
E->toriz_var_09 = 0;
Torizo_C22D(k);
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 Torizo_Instr_45(uint16 k, uint16 j) { // 0xAAD526
- Get_Torizo(k)->toriz_var_00 = j + 4;
+const uint16 *Torizo_Instr_45(uint16 k, const uint16 *jp) { // 0xAAD526
+ Get_Torizo(k)->toriz_var_00 = INSTR_ADDR_TO_PTR(k, jp + 2);
if (samus_missiles < 0x20u
|| (((uint8)nmi_frame_counter_word + (samus_x_pos & 1) + (uint8)(samus_x_pos >> 1)) & 8) != 0) {
- return *(uint16 *)RomPtr_AA(j);
+ return INSTR_RETURN_ADDR(jp[0]);
} else {
- return *((uint16 *)RomPtr_AA(j) + 1);
+ return INSTR_RETURN_ADDR(jp[1]);
}
}
-uint16 Torizo_Instr_54(uint16 k, uint16 j) { // 0xAAD54D
+const uint16 *Torizo_Instr_54(uint16 k, const uint16 *jp) { // 0xAAD54D
R18_ = 0;
- R20_ = g_word_AAD59A[*(uint16 *)RomPtr_AA(j) >> 1];
+ R20_ = g_word_AAD59A[jp[0] >> 1];
Enemy_Torizo *E = Get_Torizo(k);
E->toriz_var_A = R20_;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1) {
E->toriz_var_03 = 0;
if ((E->toriz_parameter_1 & 0x8000u) != 0)
- return addr_kTorizo_Ilist_D203;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_D203);
else
- return addr_kTorizo_Ilist_D2BF;
+ return INSTR_RETURN_ADDR(addr_kTorizo_Ilist_D2BF);
} else {
EnemyFunc_C8AD(k);
if (((E->toriz_parameter_1 ^ (samus_x_pos - E->base.x_pos)) & 0x8000u) == 0) {
if (!E->toriz_var_03)
E->toriz_var_03 = 16;
- return j + 2;
+ return jp + 1;
} else {
- return j + 2;
+ return jp + 1;
}
}
}
@@ -1198,7 +1145,7 @@ void TourianEntranceStatue_Init(void) { // 0xAAD7C8
uint16 v1 = g_off_AAD810[v0->parameter_1 >> 1];
v0->current_instruction = v1;
if (!v0->parameter_1) {
- printf("A unknown\n");
+// printf("A unknown\n");
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianStatueBaseDecoration, 0);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianStatueRidley, 0);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_TourianStatuePhantoon, 0);
@@ -1210,29 +1157,29 @@ void TourianEntranceStatue_Init(void) { // 0xAAD7C8
}
}
-uint16 Shaktool_Instr_2(uint16 k, uint16 j) { // 0xAAD931
+const uint16 *Shaktool_Instr_2(uint16 k, const uint16 *jp) { // 0xAAD931
Enemy_Shaktool *E = Get_Shaktool(k);
Enemy_Shaktool *EX = Get_Shaktool(E->shakt_var_E + 192);
- return Shaktool_D956(k, j, EX->shakt_var_D ^ 0x80);
+ return Shaktool_D956(k, jp, EX->shakt_var_D ^ 0x80);
}
-uint16 Shaktool_Instr_3(uint16 k, uint16 j) { // 0xAAD93F
+const uint16 *Shaktool_Instr_3(uint16 k, const uint16 *jp) { // 0xAAD93F
Enemy_Shaktool *E = Get_Shaktool(k);
Enemy_Shaktool *EX = Get_Shaktool(E->shakt_var_E + 192);
- return Shaktool_D956(k, j, EX->shakt_var_D);
+ return Shaktool_D956(k, jp, EX->shakt_var_D);
}
-uint16 Shaktool_Instr_4(uint16 k, uint16 j) { // 0xAAD94A
+const uint16 *Shaktool_Instr_4(uint16 k, const uint16 *jp) { // 0xAAD94A
Enemy_Shaktool *E = Get_Shaktool(k);
- return Shaktool_D956(k, j, *(uint16 *)((char *)&E->shakt_var_A + 1) ^ 0x80);
+ return Shaktool_D956(k, jp, *(uint16 *)((char *)&E->shakt_var_A + 1) ^ 0x80);
}
-uint16 Shaktool_Instr_5(uint16 k, uint16 j) { // 0xAAD953
+const uint16 *Shaktool_Instr_5(uint16 k, const uint16 *jp) { // 0xAAD953
Enemy_Shaktool *E = Get_Shaktool(k);
- return Shaktool_D956(k, j, *(uint16 *)((char *)&E->shakt_var_A + 1));
+ return Shaktool_D956(k, jp, *(uint16 *)((char *)&E->shakt_var_A + 1));
}
-uint16 Shaktool_D956(uint16 k, uint16 j, uint16 a) { // 0xAAD956
+const uint16 *Shaktool_D956(uint16 k, const uint16 *jp, uint16 a) { // 0xAAD956
int16 v4;
int16 v8;
@@ -1242,7 +1189,7 @@ uint16 Shaktool_D956(uint16 k, uint16 j, uint16 a) { // 0xAAD956
v4 = kSinCosTable8bit_Sext[v3 + 64];
if (v4 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v4;
+ R19_ = v4;
Enemy_Shaktool *E = Get_Shaktool(k);
uint16 x_subpos = E->base.x_subpos;
bool v7 = __CFADD__uint16(R18_, x_subpos);
@@ -1253,26 +1200,26 @@ uint16 Shaktool_D956(uint16 k, uint16 j, uint16 a) { // 0xAAD956
v8 = kSinCosTable8bit_Sext[v3];
if (v8 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v8;
+ R19_ = v8;
uint16 y_subpos = E->base.y_subpos;
v7 = __CFADD__uint16(R18_, y_subpos);
E->base.y_subpos = R18_ + y_subpos;
E->base.y_pos += R20_ + v7;
- return j;
+ return jp;
}
-uint16 Shaktool_Instr_6(uint16 k, uint16 j) { // 0xAAD99F
- return j;
+const uint16 *Shaktool_Instr_6(uint16 k, const uint16 *jp) { // 0xAAD99F
+ return jp;
}
void Shaktool_Func_2(uint16 k) { // 0xAAD9A0
- printf("A unknown!\n");
+// printf("A unknown!\n");
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_ShaktoolAttackFrontCircle);
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_ShaktoolAttackMiddleCircle);
SpawnEnemyProjectileWithGfx(0, k, addr_kEproj_ShaktoolAttackBackCircle);
}
-uint16 Shaktool_Instr_1(uint16 k, uint16 j) { // 0xAAD9BA
+const uint16 *Shaktool_Instr_1(uint16 k, const uint16 *jp) { // 0xAAD9BA
uint16 shakt_var_E = Get_Shaktool(k)->shakt_var_E;
Get_Shaktool(shakt_var_E)->shakt_var_F = g_off_AADEDB[0];
Get_Shaktool(shakt_var_E + 64)->shakt_var_F = g_off_AADEDB[1];
@@ -1281,7 +1228,7 @@ uint16 Shaktool_Instr_1(uint16 k, uint16 j) { // 0xAAD9BA
Get_Shaktool(shakt_var_E + 256)->shakt_var_F = g_off_AADEDB[4];
Get_Shaktool(shakt_var_E + 320)->shakt_var_F = g_off_AADEDB[5];
Get_Shaktool(shakt_var_E + 384)->shakt_var_F = g_off_AADEDB[6];
- return j;
+ return jp;
}
void Shaktool_DAE5(uint16 k) { // 0xAADAE5
@@ -1405,7 +1352,7 @@ void Shaktool_DC2A(uint16 k) { // 0xAADC2A
v4 = kSine[v3];
if (v4 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v4;
+ R19_ = v4;
int v5 = k >> 1;
bool v6 = __CFADD__uint16(enemy_drawing_queue[v5 + 92], R18_);
E->base.x_subpos = enemy_drawing_queue[v5 + 92] + R18_;
@@ -1415,7 +1362,7 @@ void Shaktool_DC2A(uint16 k) { // 0xAADC2A
v7 = kNegativeCosine[v3];
if (v7 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v7;
+ R19_ = v7;
v6 = __CFADD__uint16(enemy_drawing_queue[v5 + 94], R18_);
E->base.y_subpos = enemy_drawing_queue[v5 + 94] + R18_;
E->base.y_pos = enemy_drawing_queue[v5 + 93] + v6 + R20_;
@@ -1468,7 +1415,6 @@ void Shaktool_DCD7(uint16 k) { // 0xAADCD7
}
void Shaktool_DD25(uint16 k) { // 0xAADD25
- char v6; // t0
int16 v7;
Enemy_Shaktool *E = Get_Shaktool(k);
@@ -1494,10 +1440,7 @@ void Shaktool_DD25(uint16 k) { // 0xAADD25
}
E->shakt_var_D = 0;
uint16 v5 = CalculateAngleOfEnemyXfromEnemyY(k, E->shakt_var_E);
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- v7 = v5 & 0xFF00;
+ v7 = v5 << 8;
uint16 v8;
if ((E->shakt_parameter_1 & 0x8000u) != 0)
v8 = v7 - 0x4000;
@@ -1570,20 +1513,20 @@ void Shaktool_Shot(void) { // 0xAADF34
}
}
-uint16 Shaktool_Instr_9(uint16 k, uint16 j) { // 0xAAE429
+const uint16 *Shaktool_Instr_9(uint16 k, const uint16 *jp) { // 0xAAE429
fx_timer = 32;
fx_y_vel = 64;
- return j;
+ return jp;
}
-uint16 Shaktool_Instr_11(uint16 k, uint16 j) { // 0xAAE436
+const uint16 *Shaktool_Instr_11(uint16 k, const uint16 *jp) { // 0xAAE436
fx_base_y_pos = 722;
- return j;
+ return jp;
}
-uint16 Shaktool_Instr_10(uint16 k, uint16 j) { // 0xAAE43D
+const uint16 *Shaktool_Instr_10(uint16 k, const uint16 *jp) { // 0xAAE43D
CallSomeSamusCode(1u);
- return j;
+ return jp;
}
void sub_AAE445(uint16 k) { // 0xAAE445
@@ -1594,33 +1537,33 @@ void sub_AAE445(uint16 k) { // 0xAAE445
}
}
-uint16 Shaktool_Instr_8(uint16 k, uint16 j) { // 0xAAE57F
+const uint16 *Shaktool_Instr_8(uint16 k, const uint16 *jp) { // 0xAAE57F
QueueSfx2_Max6(0x1Cu);
- return j;
+ return jp;
}
-uint16 Shaktool_Instr_13(uint16 k, uint16 j) { // 0xAAE587
+const uint16 *Shaktool_Instr_13(uint16 k, const uint16 *jp) { // 0xAAE587
QueueSfx2_Max6(0x4Bu);
- return j;
+ return jp;
}
-uint16 Shaktool_Instr_12(uint16 k, uint16 j) { // 0xAAE58F
+const uint16 *Shaktool_Instr_12(uint16 k, const uint16 *jp) { // 0xAAE58F
Enemy_Shaktool *e = Get_Shaktool(k);
- uint16 arg = *(uint16 *)RomPtr_AA(j);
+ uint16 arg = jp[0];
CalculateBlockContainingPixelPos(e->base.x_pos + arg, e->base.y_pos + 28);
if ((level_data[room_width_in_blocks + cur_block_index] & 0xF000) == 0xA000) {
SpawnPLM(addr_kPlmHeader_D113);
SpawnEnemyProjectileWithRoomGfx(addr_kEproj_WreckedShipChozoSpikeFootsteps_1, arg);
}
- return j + 2;
+ return jp + 1;
}
-uint16 Shaktool_Instr_7(uint16 k, uint16 j) { // 0xAAE5D8
+const uint16 *Shaktool_Instr_7(uint16 k, const uint16 *jp) { // 0xAAE5D8
int16 v4;
int16 v5;
- uint16 v2 = *(uint16 *)RomPtr_AA(j);
+ uint16 v2 = jp[0];
Enemy_Shaktool *E = Get_Shaktool(k);
E->shakt_var_C = v2;
R18_ = 0;
@@ -1628,23 +1571,23 @@ uint16 Shaktool_Instr_7(uint16 k, uint16 j) { // 0xAAE5D8
v4 = g_word_AAE630[E->shakt_var_C >> 1];
if (v4 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v4;
+ R19_ = v4;
Enemy_MoveRight_IgnoreSlopes(k);
R18_ = 0;
R20_ = 0;
v5 = abs16(g_word_AAE630[E->shakt_var_C >> 1]);
if (v5 < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = v5;
+ R19_ = v5;
Enemy_MoveDown(k);
EnemyFunc_C8AD(k);
int v6 = E->shakt_var_C >> 1;
samus_x_pos = g_word_AAE670[v6] + E->base.x_pos;
samus_y_pos = g_word_AAE6B0[v6] + E->base.y_pos;
- return j + 2;
+ return jp + 1;
}
-uint16 Shaktool_Instr_14(uint16 k, uint16 j) { // 0xAAE6F0
+const uint16 *Shaktool_Instr_14(uint16 k, const uint16 *jp) { // 0xAAE6F0
CallSomeSamusCode(1u);
*(uint16 *)&scrolls[6] = 0;
*(uint16 *)&scrolls[8] = 0;
@@ -1652,7 +1595,7 @@ uint16 Shaktool_Instr_14(uint16 k, uint16 j) { // 0xAAE6F0
*(uint16 *)&scrolls[13] = 1;
static const SpawnHardcodedPlmArgs unk_AAE711 = { 0x17, 0x1d, 0xd6fc };
SpawnHardcodedPlm(&unk_AAE711);
- return j;
+ return jp;
}
void N00bTubeCracks_Init(void) { // 0xAAE716
@@ -1713,4 +1656,4 @@ void Shaktool_PreInstr_0(uint16 k) { // 0xAAE7AE
E->shakt_var_B = 256;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_ad.c b/src/sm_ad.c
index c79ab88..cd153f3 100644
--- a/src/sm_ad.c
+++ b/src/sm_ad.c
@@ -3,6 +3,18 @@
#include "funcs.h"
#include "enemy_types.h"
+
+#define kMotherBrain_HealthBasedPalettes_Brain ((uint16*)RomFixedPtr(0xade6a2))
+#define kMotherBrain_HealthBasedPalettes_BackLeg ((uint16*)RomFixedPtr(0xade742))
+#define kMotherBrain_FadePalToBlack ((uint16*)RomFixedPtr(0xade9e8))
+#define kMotherBrain_TransitionToFromGrey_Incr ((uint16*)RomFixedPtr(0xaded8a))
+#define kMotherBrain_TransitionToFromGrey_Decr ((uint16*)RomFixedPtr(0xaded9c))
+#define kMotherBrain_FadeToGray_Drained ((uint16*)RomFixedPtr(0xadef87))
+#define kMotherBrain_FadeToGray_RealDeath ((uint16*)RomFixedPtr(0xadf107))
+#define kMotherBrain_Phase3_TurnLightsBackOn ((uint16*)RomFixedPtr(0xadf273))
+
+
+
void nullsub_341(void) {}
static Func_V *const funcs_BE56D[16] = {
@@ -12,14 +24,6 @@ static Func_V *const funcs_BE56D[16] = {
MotherBrain_CalcHdma_Down, 0, 0, MotherBrain_CalcHdma_Down,
};
-#define kMotherBrain_HealthBasedPalettes_Brain ((uint16*)RomPtr(0xade6a2))
-#define kMotherBrain_HealthBasedPalettes_BackLeg ((uint16*)RomPtr(0xade742))
-#define kMotherBrain_FadePalToBlack ((uint16*)RomPtr(0xade9e8))
-#define kMotherBrain_TransitionToFromGrey_Incr ((uint16*)RomPtr(0xaded8a))
-#define kMotherBrain_TransitionToFromGrey_Decr ((uint16*)RomPtr(0xaded9c))
-#define kMotherBrain_FadeToGray_Drained ((uint16*)RomPtr(0xadef87))
-#define kMotherBrain_FadeToGray_RealDeath ((uint16*)RomPtr(0xadf107))
-#define kMotherBrain_Phase3_TurnLightsBackOn ((uint16*)RomPtr(0xadf273))
void MotherBrain_CalcHdma(void) { // 0xADDE00
@@ -59,43 +63,38 @@ void MotherBrain_CalcHdma_BeamAimedRight(void) { // 0xADDECE
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
- R18_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3A)) >> 1];
- R20_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3B)) >> 1];
+ R18_ = kTanTable[LOBYTE(E->mbn_var_3A)];
+ R20_ = kTanTable[LOBYTE(E->mbn_var_3B)];
uint16 mbn_var_3F = E->mbn_var_3F;
- uint16 v2 = 2 * (mbn_var_3F - 32) - 25342;
- uint8 *v3 = RomPtr_7E(v2);
- *((uint16 *)v3 + 1) = 255;
- *((uint16 *)v3 + 2) = 255;
- uint16 v8 = v2;
+ uint16 *v2 = hdma_table_2 + (mbn_var_3F - 32) + 1;
+ v2[1] = 255;
+ v2[2] = 255;
+ uint16 *v8 = v2;
do {
uint16 v4 = R20_ + R24_;
if (__CFADD__uint16(R20_, R24_))
break;
R24_ += R20_;
- *(uint16 *)RomPtr_7E(v2) = HIBYTE(v4) | 0xFF00;
- v2 -= 2;
+ *v2-- = HIBYTE(v4) | 0xFF00;
--mbn_var_3F;
} while (mbn_var_3F != 32);
do {
- *(uint16 *)RomPtr_7E(v2) = 255;
- v2 -= 2;
+ *v2-- = 255;
--mbn_var_3F;
} while (mbn_var_3F != 32);
- uint16 v5 = v8 + 2;
+ uint16 *v5 = v8 + 1;
uint16 var_3F = gRam8000_Default(0)->var_3F;
while (1) {
uint16 v7 = R18_ + R22_;
if (__CFADD__uint16(R18_, R22_))
break;
R22_ += R18_;
- *(uint16 *)RomPtr_7E(v5) = HIBYTE(v7) | 0xFF00;
- v5 += 2;
+ *v5++ = HIBYTE(v7) | 0xFF00;
if (++var_3F == 232)
return;
}
do {
- *(uint16 *)RomPtr_7E(v5) = 255;
- v5 += 2;
+ *v5++ = 255;
++var_3F;
} while (var_3F != 232);
}
@@ -141,112 +140,85 @@ void MotherBrain_CalcHdma_BeamAimedUp(void) {
}
void MotherBrain_CalcHdma_Up_UpRight(void) { // 0xADE02C
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
- R18_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3B)) >> 1];
- R20_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3A)) >> 1];
+ R18_ = kTanTable[LOBYTE(E->mbn_var_3B)];
+ R20_ = kTanTable[LOBYTE(E->mbn_var_3A)];
uint16 mbn_var_3D = E->mbn_var_3D;
- uint16 v2 = 2 * (mbn_var_3D - 32) - 25342;
- uint8 *v3 = RomPtr_7E(v2);
- *((uint16 *)v3 + 1) = 255;
- *((uint16 *)v3 + 2) = 255;
+ uint16 *v2 = hdma_table_2 + (mbn_var_3D - 32) + 1;
+ v2[1] = 255;
+ v2[2] = 255;
do {
uint16 v4 = R18_ + R22_;
if (__CFADD__uint16(R18_, R22_))
v4 = -1;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R36 = v5;
+ R36 = (v4 >> 8) & 0xff;
uint16 v7 = R20_ + R24_;
if (__CFADD__uint16(R20_, R24_))
v7 = -1;
R24_ = v7;
- v8 = R36 | v7 & 0xFF00;
- if (v8 == -1)
+ uint16 v8 = R36 | v7 & 0xFF00;
+ if (v8 == 0xffff)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 -= 2;
+ *v2-- = v8;
--mbn_var_3D;
} while (mbn_var_3D != 32);
}
void MotherBrain_CalcHdma_Up_Up(void) { // 0xADE0A6
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
R18_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3B)];
- R20_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3A)) >> 1];
+ R20_ = kTanTable[LOBYTE(E->mbn_var_3A)];
uint16 mbn_var_3D = E->mbn_var_3D;
- uint16 v2 = 2 * (mbn_var_3D - 32) - 25342;
- uint8 *v3 = RomPtr_7E(v2);
- *((uint16 *)v3 + 1) = 255;
- *((uint16 *)v3 + 2) = 255;
+ uint16 *v2 = hdma_table_2 + (mbn_var_3D - 32) + 1;
+ v2[1] = 255;
+ v2[2] = 255;
do {
uint16 v4 = R22_ - R18_;
if (R22_ < R18_)
v4 = 0;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R26_ = v5;
+ R26_ = (uint8)(v4 >> 8);
uint16 v7 = R20_ + R24_;
if (__CFADD__uint16(R20_, R24_))
v7 = -1;
R24_ = v7;
- v8 = R26_ | v7 & 0xFF00;
- if (v8 == -1)
+ uint16 v8 = R26_ | v7 & 0xFF00;
+ if (v8 == 0xffff)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 -= 2;
+ *v2-- = v8;
--mbn_var_3D;
} while (mbn_var_3D != 32);
}
void MotherBrain_CalcHdma_Up_UpLeft(void) { // 0xADE124
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
R18_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3B)];
R20_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3A)];
uint16 mbn_var_3D = E->mbn_var_3D;
- uint16 v2 = 2 * (mbn_var_3D - 32) - 25342;
- uint8 *v3 = RomPtr_7E(v2);
- *((uint16 *)v3 + 1) = 255;
- *((uint16 *)v3 + 2) = 255;
+ uint16 *v2 = hdma_table_2 + (mbn_var_3D - 32) + 1;
+ v2[1] = 255;
+ v2[2] = 255;
do {
uint16 v4 = R22_ - R18_;
if (R22_ < R18_)
v4 = 0;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R36 = v5;
+ R36 = v4 >> 8;
uint16 v7 = R24_ - R20_;
if (R24_ < R20_)
v7 = 0;
R24_ = v7;
- v8 = R36 | v7 & 0xFF00;
- if (v8 == -1)
+ uint16 v8 = R36 | v7 & 0xFF00;
+ if (v8 == 0xffff)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 -= 2;
+ *v2-- = v8;
--mbn_var_3D;
} while (mbn_var_3D != 32);
}
@@ -271,124 +243,92 @@ void MotherBrain_CalcHdma_Down(void) { // 0xADE1A6
}
void MotherBrain_CalcHdma_Down_DownRight(void) { // 0xADE216
- int16 v1;
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
- R18_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3A)) >> 1];
- R20_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3B)) >> 1];
- v1 = E->mbn_var_3D - 32;
- uint16 v2 = 0x9D04;
+ R18_ = kTanTable[LOBYTE(E->mbn_var_3A)];
+ R20_ = kTanTable[LOBYTE(E->mbn_var_3B)];
+ uint16 v1 = E->mbn_var_3D - 32;
+ uint16 *dst = hdma_table_2 + 1;
do {
- *(uint16 *)RomPtr_7E(v2) = 255;
- v2 += 2;
- --v1;
- } while (v1);
+ *dst++ = 255;
+ } while (--v1);
uint16 mbn_var_3D = Get_MotherBrain(0)->mbn_var_3D;
do {
uint16 v4 = R18_ + R22_;
if (__CFADD__uint16(R18_, R22_))
v4 = -1;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R26_ = v5;
+ R26_ = v4 >> 8;
uint16 v7 = R20_ + R24_;
if (__CFADD__uint16(R20_, R24_))
v7 = -1;
R24_ = v7;
- v8 = R26_ | v7 & 0xFF00;
+ uint16 v8 = R26_ | v7 & 0xFF00;
if (v8 == -1)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 += 2;
+ *dst++ = v8;
++mbn_var_3D;
} while (mbn_var_3D != 232);
}
void MotherBrain_CalcHdma_Down_Down(void) { // 0xADE293
- int16 v1;
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
R18_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3A)];
- R20_ = kTanTable[(uint16)(2 * LOBYTE(E->mbn_var_3B)) >> 1];
- v1 = E->mbn_var_3D - 32;
- uint16 v2 = -25340;
+ R20_ = kTanTable[LOBYTE(E->mbn_var_3B)];
+ uint16 v1 = E->mbn_var_3D - 32;
+ uint16 *dst = hdma_table_2 + 1;
do {
- *(uint16 *)RomPtr_7E(v2) = 255;
- v2 += 2;
- --v1;
- } while (v1);
+ *dst++ = 255;
+ } while (--v1);
uint16 mbn_var_3D = Get_MotherBrain(0)->mbn_var_3D;
do {
uint16 v4 = R22_ - R18_;
if (R22_ < R18_)
v4 = 0;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
- R26_ = v5;
+ R26_ = v4 >> 8;
uint16 v7 = R20_ + R24_;
if (__CFADD__uint16(R20_, R24_))
v7 = -1;
R24_ = v7;
- v8 = R26_ | v7 & 0xFF00;
- if (v8 == -1)
+ uint16 v8 = R26_ | v7 & 0xFF00;
+ if (v8 == 0xffff)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 += 2;
+ *dst++ = v8;
++mbn_var_3D;
} while (mbn_var_3D != 232);
}
void MotherBrain_CalcHdma_Down_DownLeft(void) { // 0xADE314
- int16 v1;
- char v6; // t0
- int16 v8;
-
hdma_table_2[0] = 255;
hdma_table_2[1] = 255;
Enemy_MotherBrain *E = Get_MotherBrain(0);
R18_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3A)];
R20_ = kTanTable[(uint8)-LOBYTE(E->mbn_var_3B)];
- v1 = E->mbn_var_3D - 32;
- uint16 v2 = -25340;
+ uint16 v1 = E->mbn_var_3D - 32;
+ uint16 *dst = hdma_table_2 + 1;
do {
- *(uint16 *)RomPtr_7E(v2) = 255;
- v2 += 2;
- --v1;
- } while (v1);
+ *dst++ = 255;
+ } while (--v1);
uint16 mbn_var_3D = Get_MotherBrain(0)->mbn_var_3D;
do {
uint16 v4 = R22_ - R18_;
if (R22_ < R18_)
v4 = 0;
R22_ = v4;
- uint16 v5 = v4 & 0xFF00;
- v6 = v5;
- LOBYTE(v5) = HIBYTE(v5);
- HIBYTE(v5) = v6;
+ uint16 v5 = v4 >> 8;
R26_ = v5;
uint16 v7 = R24_ - R20_;
if (R24_ < R20_)
v7 = 0;
R24_ = v7;
- v8 = R26_ | v7 & 0xFF00;
+ uint16 v8 = R26_ | v7 & 0xFF00;
if (!v8)
v8 = 255;
- *(uint16 *)RomPtr_7E(v2) = v8;
- v2 += 2;
+ *dst++ = v8;
++mbn_var_3D;
} while (mbn_var_3D != 232);
}
@@ -458,8 +398,6 @@ uint8 MotherBrain_EEF6(uint16 a) { // 0xADEEF6
}
uint8 MotherBrain_FadeFromGray_Drained(uint16 a) { // 0xADEF0D
- int16 v3;
-
int v1 = a;
if (!kMotherBrain_TransitionToFromGrey_Decr[v1])
return 1;
@@ -467,14 +405,11 @@ uint8 MotherBrain_FadeFromGray_Drained(uint16 a) { // 0xADEF0D
WriteColorsToPalette(0x82, 0xad, j, 13);
WriteColorsToPalette(0x122, 0xad, j, 13);
WriteColorsToPalette(0x168, 0xad, j + 26, 5);
- v3 = *(uint16 *)RomPtr_AD(j + 36);
- *(uint16 *)&g_ram[0x17C] = v3;
+ *(uint16 *)&g_ram[0x17C] = *(uint16 *)RomPtr_AD(j + 36);
return 0;
}
uint8 MotherBrain_FadeToGray_Drained(uint16 a) { // 0xADEF4A
- int16 v3;
-
int v1 = a;
if (!kMotherBrain_FadeToGray_Drained[v1])
return 1;
@@ -482,8 +417,7 @@ uint8 MotherBrain_FadeToGray_Drained(uint16 a) { // 0xADEF4A
WriteColorsToPalette(0x82, 0xad, j, 15);
WriteColorsToPalette(0x122, 0xad, j, 15);
WriteColorsToPalette(0x168, 0xad, j + 30, 5);
- v3 = *(uint16 *)RomPtr_AD(j + 40);
- *(uint16 *)&g_ram[0x17C] = v3;
+ *(uint16 *)&g_ram[0x17C] = *(uint16 *)RomPtr_AD(j + 40);
return 0;
}
@@ -525,4 +459,4 @@ void HandleMotherBrainBodyFlickering(void) { // 0xADF41C
*(uint16 *)®_TM &= ~2u;
v0->properties |= kEnemyProps_Invisible;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_b2.c b/src/sm_b2.c
index ec59431..a5bf77d 100644
--- a/src/sm_b2.c
+++ b/src/sm_b2.c
@@ -4,8 +4,12 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kWallSpacePirates_Palette_3 ((uint16*)RomPtr(0xb28727))
-#define g_off_B2F959 ((uint16*)RomPtr(0xb2f959))
+
+#define kWallSpacePirates_Palette_3 ((uint16*)RomFixedPtr(0xb28727))
+#define g_off_B2F959 ((uint16*)RomFixedPtr(0xb2f959))
+
+
+
void Enemy_GrappleReact_CancelBeam_B2(void) { // 0xB2800F
Enemy_SwitchToFrozenAi();
@@ -15,34 +19,6 @@ void Enemy_NormalFrozenAI_B2(void) { // 0xB28041
NormalEnemyFrozenAI();
}
-uint16 EnemyInstr_Goto_B2(uint16 k, uint16 j) { // 0xB280ED
- return *(uint16 *)RomPtr_B2(j);
-}
-
-uint16 EnemyInstr_DecTimerAndGoto2_B2(uint16 k, uint16 j) { // 0xB28110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- != 1)
- return EnemyInstr_Goto_B2(k, j);
- return j + 2;
-}
-
-uint16 EnemyInstr_SetTimer_B2(uint16 k, uint16 j) { // 0xB28123
- gEnemyData(k)->timer = *(uint16 *)RomPtr_B2(j);
- return j + 2;
-}
-
-uint16 EnemyInstr_Sleep_B2(uint16 k, uint16 j) { // 0xB2812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
-}
-
-uint16 EnemyInstr_WaitNframes_B2(uint16 k, uint16 j) { // 0xB2813A
- EnemyData *v3 = gEnemyData(k);
- v3->instruction_timer = *(uint16 *)RomPtr_B2(j);
- v3->current_instruction = j + 2;
- return 0;
-}
-
void WalkingSpacePirates_Powerbomb(void) { // 0xB28767
NormalEnemyPowerBombAi();
}
@@ -53,7 +29,7 @@ void WalkingSpacePirates_Touch(void) { // 0xB2876C
}
void WalkingSpacePirates_Shot(void) { // 0xB28779
- if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr == (uint16)addr_kEnemyDef_F593)
+ if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr == addr_kEnemyDef_F593)
WalkingSpacePirates_8789();
else
NormalEnemyShotAi();
@@ -66,7 +42,7 @@ void WalkingSpacePirates_8789(void) { // 0xB28789
NormalEnemyShotAiSkipDeathAnim_CurEnemy();
if (!E->base.health) {
uint16 v1 = cur_enemy_index;
- if (E->base.enemy_ptr == (uint16)addr_kEnemyDef_F593) {
+ if (E->base.enemy_ptr == addr_kEnemyDef_F593) {
E->sps_var_B = 0;
EnemyDeathAnimation(v1, 4u);
Enemy_ItemDrop_LowerNorfairSpacePirate(v1);
@@ -82,7 +58,7 @@ void WalkingSpacePirates_87C8(void) { // 0xB287C8
int16 v3;
Vulnerability *Vulnerability;
- if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr != (uint16)addr_kEnemyDef_F593)
+ if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr != addr_kEnemyDef_F593)
goto LABEL_2;
R18_ = projectile_type[collision_detection_index];
if (sign16((R18_ & kProjectileType_TypeMask) - kProjectileType_PowerBomb)) {
@@ -116,7 +92,7 @@ LABEL_2:
}
void WalkingSpacePirates_883E(void) { // 0xB2883E
- if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr != (uint16)addr_kEnemyDef_F593) {
+ if (Get_SpacePirates(cur_enemy_index)->base.enemy_ptr != addr_kEnemyDef_F593) {
WalkingSpacePirates_8789();
return;
}
@@ -144,97 +120,94 @@ void WalkingSpacePirates_883E(void) { // 0xB2883E
QueueSfx2_Max6(0x66u);
}
-uint16 SpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight(uint16 k, uint16 j) { // 0xB2EE40
+const uint16 *SpacePirates_Instr_MovePixelsDownAndChangeDirFaceRight(uint16 k, const uint16 *jp) { // 0xB2EE40
R18_ = 0;
- R20_ = *(uint16 *)RomPtr_B2(j);
+ R20_ = jp[0];
if (!(Enemy_MoveDown(cur_enemy_index) & 1))
- return j + 2;
+ return jp + 1;
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
E->sps_var_C ^= 1u;
- uint16 result = addr_kSpacePirates_Ilist_ED36;
if (E->sps_var_C)
- return addr_off_B2ECEC;
- return result;
+ return INSTR_RETURN_ADDR(addr_off_B2ECEC);
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_ED36);
}
-uint16 SpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft(uint16 k, uint16 j) { // 0xB2EE72
+const uint16 *SpacePirates_Instr_MovePixelsDownAndChangeDirFaceLeft(uint16 k, const uint16 *jp) { // 0xB2EE72
R18_ = 0;
- R20_ = *(uint16 *)RomPtr_B2(j);
+ R20_ = jp[0];
if (!(Enemy_MoveDown(cur_enemy_index) & 1))
- return j + 2;
+ return jp + 1;
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
E->sps_var_C ^= 1u;
- uint16 result = addr_off_B2EDAC;
if (E->sps_var_C)
- return addr_kSpacePirates_Ilist_EDF6;
- return result;
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_EDF6);
+ return INSTR_RETURN_ADDR(addr_off_B2EDAC);
}
-uint16 SpacePirates_Instr_RandomNewDirFaceR(uint16 k, uint16 j) { // 0xB2EEA4
+const uint16 *SpacePirates_Instr_RandomNewDirFaceR(uint16 k, const uint16 *jp) { // 0xB2EEA4
uint16 result = addr_kSpacePirates_Ilist_ED36;
uint16 v4 = NextRandom() & 1;
Get_SpacePirates(cur_enemy_index)->sps_var_C = v4;
if (v4)
- return addr_off_B2ECEC;
- return result;
+ return INSTR_RETURN_ADDR(addr_off_B2ECEC);
+ return INSTR_RETURN_ADDR(result);
}
-uint16 SpacePirates_Instr_RandomNewDirFaceL(uint16 k, uint16 j) { // 0xB2EEBC
+const uint16 *SpacePirates_Instr_RandomNewDirFaceL(uint16 k, const uint16 *jp) { // 0xB2EEBC
uint16 result = addr_off_B2EDAC;
uint16 v4 = NextRandom() & 1;
Get_SpacePirates(cur_enemy_index)->sps_var_C = v4;
if (v4)
- return addr_kSpacePirates_Ilist_EDF6;
- return result;
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_EDF6);
+ return INSTR_RETURN_ADDR(result);
}
-uint16 SpacePirates_Instr_PrepareWallJumpR(uint16 k, uint16 j) { // 0xB2EED4
+const uint16 *SpacePirates_Instr_PrepareWallJumpR(uint16 k, const uint16 *jp) { // 0xB2EED4
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
E->sps_var_B = E->base.x_pos + E->sps_parameter_2;
E->sps_var_D = E->base.x_pos + (E->sps_parameter_2 >> 1);
E->sps_var_E = E->base.y_pos;
E->sps_var_F = 64;
- return j;
+ return jp;
}
-uint16 SpacePirates_Instr_PrepareWallJumpL(uint16 k, uint16 j) { // 0xB2EEFD
+const uint16 *SpacePirates_Instr_PrepareWallJumpL(uint16 k, const uint16 *jp) { // 0xB2EEFD
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
E->sps_var_B = E->base.x_pos - E->sps_parameter_2;
R18_ = E->sps_parameter_2 >> 1;
E->sps_var_D = E->base.x_pos - R18_;
E->sps_var_E = E->base.y_pos;
E->sps_var_F = 192;
- return j;
+ return jp;
}
-uint16 SpacePirates_Instr_FireLaserL(uint16 k, uint16 j) { // 0xB2EF2A
+const uint16 *SpacePirates_Instr_FireLaserL(uint16 k, const uint16 *jp) { // 0xB2EF2A
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
enemy_projectile_init_param = *((uint16 *)RomPtr_A0(E->base.enemy_ptr) + 3);
R18_ = E->base.x_pos - 24;
R20_ = E->base.y_pos - 16;
R22_ = 0;
SpawnEnemyProjectileWithRoomGfx(addr_stru_86A17B, 0);
- return j;
+ return jp;
}
-uint16 SpacePirates_Instr_FireLaserR(uint16 k, uint16 j) { // 0xB2EF5D
+const uint16 *SpacePirates_Instr_FireLaserR(uint16 k, const uint16 *jp) { // 0xB2EF5D
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
R18_ = E->base.x_pos + 24;
R20_ = E->base.y_pos - 16;
R22_ = 1;
SpawnEnemyProjectileWithRoomGfx(addr_stru_86A17B, 1u);
- return j;
+ return jp;
}
-uint16 SpacePirates_Instr_SetEnemyFunc(uint16 k, uint16 j) { // 0xB2EF83
- uint16 v2 = *(uint16 *)RomPtr_B2(j);
- Get_SpacePirates(cur_enemy_index)->sps_var_A = v2;
- return j + 2;
+const uint16 *SpacePirates_Instr_SetEnemyFunc(uint16 k, const uint16 *jp) { // 0xB2EF83
+ Get_SpacePirates(cur_enemy_index)->sps_var_A = jp[0];
+ return jp + 1;
}
-uint16 SpacePirates_Instr_PlaySfx(uint16 k, uint16 j) { // 0xB2EF93
+const uint16 *SpacePirates_Instr_PlaySfx(uint16 k, const uint16 *jp) { // 0xB2EF93
QueueSfx2_Max6(0x66u);
- return j;
+ return jp;
}
void WallSpacePirates_Init(void) { // 0xB2EF9F
@@ -353,34 +326,31 @@ void SpacePirates_Func_4(uint16 k) { // 0xB2F0E4
}
}
-uint16 SpacePirates_Instr_20(uint16 k, uint16 j) { // 0xB2F536
- uint16 v2 = *(uint16 *)RomPtr_B2(j);
- Get_SpacePirates(cur_enemy_index)->base.palette_index = v2;
- return j + 2;
+const uint16 *SpacePirates_Instr_20(uint16 k, const uint16 *jp) { // 0xB2F536
+ Get_SpacePirates(cur_enemy_index)->base.palette_index = jp[0];
+ return jp + 1;
}
-uint16 SpacePirates_Instr_16(uint16 k, uint16 j) { // 0xB2F546
- uint16 *v2 = (uint16 *)RomPtr_B2(j);
- QueueSfx2_Max6(*v2);
- return j + 2;
+const uint16 *SpacePirates_Instr_16(uint16 k, const uint16 *jp) { // 0xB2F546
+ QueueSfx2_Max6(jp[0]);
+ return jp + 1;
}
void sub_B2F554(void) { // 0xB2F554
gEnemyData(cur_enemy_index)->instruction_timer = 1;
}
-uint16 SpacePirates_Instr_15(uint16 k, uint16 j) { // 0xB2F564
- uint16 *v2 = (uint16 *)RomPtr_B2(j);
- R22_ = v2[1];
- R24_ = v2[2];
+const uint16 *SpacePirates_Instr_15(uint16 k, const uint16 *jp) { // 0xB2F564
+ R22_ = jp[1];
+ R24_ = jp[2];
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
R18_ = E->base.x_pos;
R20_ = E->base.y_pos;
- SpawnEnemyProjectileWithGfx(*v2, cur_enemy_index, addr_kEproj_PirateClaw);
- return j + 6;
+ SpawnEnemyProjectileWithGfx(jp[0], cur_enemy_index, addr_kEproj_PirateClaw);
+ return jp + 3;
}
-uint16 SpacePirates_Instr_18(uint16 k, uint16 j) { // 0xB2F590
+const uint16 *SpacePirates_Instr_18(uint16 k, const uint16 *jp) { // 0xB2F590
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
R18_ = E->base.x_pos - samus_x_pos;
E->base.instruction_timer = 1;
@@ -388,7 +358,7 @@ uint16 SpacePirates_Instr_18(uint16 k, uint16 j) { // 0xB2F590
if ((R18_ & 0x8000u) != 0)
result = addr_kSpacePirates_Ilist_F420;
E->sps_var_C = result;
- return result;
+ return INSTR_RETURN_ADDR(result);
}
void sub_B2F5B3(void) { // 0xB2F5B3
@@ -401,9 +371,9 @@ void sub_B2F5B3(void) { // 0xB2F5B3
v0->ai_var_C = v1;
}
-uint16 SpacePirates_Instr_17(uint16 k, uint16 j) { // 0xB2F5D6
+const uint16 *SpacePirates_Instr_17(uint16 k, const uint16 *jp) { // 0xB2F5D6
Get_SpacePirates(k)->sps_var_00 = 0;
- return j;
+ return jp;
}
void NinjaSpacePirates_Init(void) { // 0xB2F5DE
@@ -620,12 +590,12 @@ void SpacePirates_Func_16(void) { // 0xB2F917
}
}
-uint16 SpacePirates_Instr_19(uint16 k, uint16 j) { // 0xB2F969
+const uint16 *SpacePirates_Instr_19(uint16 k, const uint16 *jp) { // 0xB2F969
Enemy_SpacePirates *E = Get_SpacePirates(k);
E->sps_var_00 = 1536;
E->sps_var_03 = E->sps_var_D
+ ((uint16)(E->sps_var_F - E->sps_var_D) >> 1);
- return j;
+ return jp;
}
void SpacePirates_F985(uint16 k) { // 0xB2F985
@@ -674,12 +644,12 @@ void SpacePirates_FA15(uint16 k) { // 0xB2FA15
}
}
-uint16 SpacePirates_Instr_21(uint16 k, uint16 j) { // 0xB2FA3D
+const uint16 *SpacePirates_Instr_21(uint16 k, const uint16 *jp) { // 0xB2FA3D
Enemy_SpacePirates *E = Get_SpacePirates(k);
E->sps_var_00 = 1536;
E->sps_var_03 = E->sps_var_E
+ ((uint16)(E->sps_var_D - E->sps_var_E) >> 1);
- return j;
+ return jp;
}
void SpacePirates_FA59(uint16 k) { // 0xB2FA59
@@ -742,42 +712,39 @@ void SpacePirates_FB11(uint16 k) { // 0xB2FB11
CreateSpriteAtPos();
}
-uint16 SpacePirates_Instr_12(uint16 k, uint16 j) { // 0xB2FC68
+const uint16 *SpacePirates_Instr_12(uint16 k, const uint16 *jp) { // 0xB2FC68
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
R18_ = E->base.x_pos - 24;
- R20_ = E->base.y_pos - *(uint16 *)RomPtr_B2(j);
+ R20_ = E->base.y_pos - jp[0];
R22_ = 0;
SpawnEnemyProjectileWithRoomGfx(addr_stru_86A17B, 0);
- return j + 2;
+ return jp + 1;
}
-uint16 SpacePirates_Instr_14(uint16 k, uint16 j) { // 0xB2FC90
+const uint16 *SpacePirates_Instr_14(uint16 k, const uint16 *jp) { // 0xB2FC90
Enemy_SpacePirates *E = Get_SpacePirates(cur_enemy_index);
R18_ = E->base.x_pos + 24;
- R20_ = E->base.y_pos - *(uint16 *)RomPtr_B2(j);
+ R20_ = E->base.y_pos - jp[0];
R22_ = 1;
SpawnEnemyProjectileWithRoomGfx(addr_stru_86A17B, 1u);
- return j + 2;
+ return jp + 1;
}
-uint16 SpacePirates_Instr_11(uint16 k, uint16 j) { // 0xB2FCB8
- uint16 v2 = *(uint16 *)RomPtr_B2(j);
- Get_SpacePirates(cur_enemy_index)->sps_var_A = v2;
- return j + 2;
+const uint16 *SpacePirates_Instr_11(uint16 k, const uint16 *jp) { // 0xB2FCB8
+ Get_SpacePirates(cur_enemy_index)->sps_var_A = jp[0];
+ return jp + 1;
}
-uint16 SpacePirates_Instr_13(uint16 k, uint16 j) { // 0xB2FCC8
- uint16 result;
+const uint16 *SpacePirates_Instr_13(uint16 k, const uint16 *jp) { // 0xB2FCC8
if (IsSamusWithinEnemy_Y(cur_enemy_index, 0x10)) {
- result = addr_kSpacePirates_Ilist_FB8C;
if ((int16)(samus_x_pos - Get_SpacePirates(cur_enemy_index)->base.x_pos) >= 0)
- return addr_kSpacePirates_Ilist_FC0E;
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_FC0E);
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_FB8C);
} else {
- result = addr_kSpacePirates_Ilist_FBE6;
if ((int16)(samus_x_pos - Get_SpacePirates(cur_enemy_index)->base.x_pos) >= 0)
- return addr_kSpacePirates_Ilist_FB64;
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_FB64);
+ return INSTR_RETURN_ADDR(addr_kSpacePirates_Ilist_FBE6);
}
- return result;
}
void WalkingSpacePirates_Init(void) { // 0xB2FD02
@@ -876,4 +843,4 @@ void WalkingSpacePirates_FE4B(void) { // 0xB2FE4B
E->base.current_instruction = v3;
E->base.instruction_timer = 1;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_b3.c b/src/sm_b3.c
index 05c2298..8bd39d5 100644
--- a/src/sm_b3.c
+++ b/src/sm_b3.c
@@ -5,21 +5,25 @@
#include "enemy_types.h"
-#define g_off_B3882B ((uint16*)RomPtr(0xb3882b))
-#define g_off_B38833 ((uint16*)RomPtr(0xb38833))
-#define g_word_B3949B ((uint16*)RomPtr(0xb3949b))
-#define g_word_B394BB ((uint16*)RomPtr(0xb394bb))
-#define g_word_B39675 ((uint16*)RomPtr(0xb39675))
-#define kBotwoonHealthThresForPalChange ((uint16*)RomPtr(0xb3981b))
-#define kBotwoonHealthBasedPalette ((uint16*)RomPtr(0xb3971b))
-#define g_off_B3946B ((uint16*)RomPtr(0xb3946b))
-#define g_off_B3948B ((uint16*)RomPtr(0xb3948b))
+#define g_off_B3882B ((uint16*)RomFixedPtr(0xb3882b))
+#define g_off_B38833 ((uint16*)RomFixedPtr(0xb38833))
+#define g_word_B3949B ((uint16*)RomFixedPtr(0xb3949b))
+#define g_word_B394BB ((uint16*)RomFixedPtr(0xb394bb))
+#define g_word_B39675 ((uint16*)RomFixedPtr(0xb39675))
+#define kBotwoonHealthThresForPalChange ((uint16*)RomFixedPtr(0xb3981b))
+#define kBotwoonHealthBasedPalette ((uint16*)RomFixedPtr(0xb3971b))
+#define g_off_B3946B ((uint16*)RomFixedPtr(0xb3946b))
+#define g_off_B3948B ((uint16*)RomFixedPtr(0xb3948b))
+#define g_word_B3E718 ((uint16*)RomFixedPtr(0xb3e718))
+#define g_word_B3E71E ((uint16*)RomFixedPtr(0xb3e71e))
+#define g_off_B3E72A ((uint16*)RomFixedPtr(0xb3e72a))
+#define g_off_B3E724 ((uint16*)RomFixedPtr(0xb3e724))
+#define g_word_B3E730 ((uint16*)RomFixedPtr(0xb3e730))
+
+
+
+
static const int16 g_word_B39E77[3] = { 2, 3, 4 };
-#define g_word_B3E718 ((uint16*)RomPtr(0xb3e718))
-#define g_word_B3E71E ((uint16*)RomPtr(0xb3e71e))
-#define g_off_B3E72A ((uint16*)RomPtr(0xb3e72a))
-#define g_off_B3E724 ((uint16*)RomPtr(0xb3e724))
-#define g_word_B3E730 ((uint16*)RomPtr(0xb3e730))
void Enemy_GrappleReact_NoInteract_B3(void) { // 0xB38000
SwitchEnemyAiToMainAi();
@@ -57,38 +61,14 @@ void Enemy_NormalFrozenAI_B3(void) { // 0xB38041
NormalEnemyFrozenAI();
}
-uint16 Enemy_SetAiPreInstr_B3(uint16 k, uint16 j) { // 0xB3806B
- uint16 v2 = *(uint16 *)RomPtr_B3(j);
- gEnemyData(k)->ai_preinstr = v2;
- return j + 2;
+const uint16 *Enemy_SetAiPreInstr_B3(uint16 k, const uint16 *jp) { // 0xB3806B
+ gEnemyData(k)->ai_preinstr = jp[0];
+ return jp + 1;
}
-uint16 Enemy_ClearAiPreInstr_B3(uint16 k, uint16 j) { // 0xB38074
+const uint16 *Enemy_ClearAiPreInstr_B3(uint16 k, const uint16 *jp) { // 0xB38074
gEnemyData(k)->ai_preinstr = FUNC16(nullsub_171_B3);
- return j;
-}
-
-uint16 EnemyInstr_Goto_B3(uint16 k, uint16 j) { // 0xB380ED
- return *(uint16 *)RomPtr_B3(j);
-}
-
-uint16 EnemyInstr_DecTimerAndGoto2_B3(uint16 k, uint16 j) { // 0xB38110
- EnemyData *v2 = gEnemyData(k);
- if (v2->timer-- == 1)
- return j + 2;
- else
- return EnemyInstr_Goto_B3(k, j);
-}
-
-uint16 EnemyInstr_SetTimer_B3(uint16 k, uint16 j) { // 0xB38123
- uint16 v2 = *(uint16 *)RomPtr_B3(j);
- gEnemyData(k)->timer = v2;
- return j + 2;
-}
-
-uint16 EnemyInstr_Sleep_B3(uint16 k, uint16 j) { // 0xB3812F
- gEnemyData(k)->current_instruction = j - 2;
- return 0;
+ return jp;
}
void UnusedSpinningTurtleEye_Init(void) { // 0xB386FB
@@ -257,10 +237,10 @@ void NorfairPipeBug_8BA8(void) { // 0xB38BA8
void NorfairPipeBug_Func_1(void) { // 0xB38BCD
if (LOBYTE(Get_PipeBug(cur_enemy_index)->pbg_parameter_2)
- && Get_PipeBug(cur_enemy_index + 64)->pbg_var_A == (uint16)FUNC16(NorfairPipeBug_Func_1)
- && Get_PipeBug(cur_enemy_index + 128)->pbg_var_A == (uint16)FUNC16(NorfairPipeBug_Func_1)
- && Get_PipeBug(cur_enemy_index + 192)->pbg_var_A == (uint16)FUNC16(NorfairPipeBug_Func_1)
- && Get_PipeBug(cur_enemy_index + 256)->pbg_var_A == (uint16)FUNC16(NorfairPipeBug_Func_1)) {
+ && Get_PipeBug(cur_enemy_index + 64)->pbg_var_A == FUNC16(NorfairPipeBug_Func_1)
+ && Get_PipeBug(cur_enemy_index + 128)->pbg_var_A == FUNC16(NorfairPipeBug_Func_1)
+ && Get_PipeBug(cur_enemy_index + 192)->pbg_var_A == FUNC16(NorfairPipeBug_Func_1)
+ && Get_PipeBug(cur_enemy_index + 256)->pbg_var_A == FUNC16(NorfairPipeBug_Func_1)) {
Get_PipeBug(cur_enemy_index)->pbg_var_A = FUNC16(NorfairPipeBug_Func_2);
}
}
@@ -695,85 +675,85 @@ void BrinstarYellowPipeBug_Func_10(uint16 k) { // 0xB3927A
}
}
-uint16 Botwoon_Instr_1(uint16 k, uint16 j) { // 0xB394C7
+const uint16 *Botwoon_Instr_1(uint16 k, const uint16 *jp) { // 0xB394C7
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 8;
E->base.y_height = 16;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_2(uint16 k, uint16 j) { // 0xB394D7
+const uint16 *Botwoon_Instr_2(uint16 k, const uint16 *jp) { // 0xB394D7
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 12;
E->base.y_height = 12;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_3(uint16 k, uint16 j) { // 0xB394E7
+const uint16 *Botwoon_Instr_3(uint16 k, const uint16 *jp) { // 0xB394E7
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 16;
E->base.y_height = 8;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_4(uint16 k, uint16 j) { // 0xB394F7
+const uint16 *Botwoon_Instr_4(uint16 k, const uint16 *jp) { // 0xB394F7
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 12;
E->base.y_height = 12;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_5(uint16 k, uint16 j) { // 0xB39507
+const uint16 *Botwoon_Instr_5(uint16 k, const uint16 *jp) { // 0xB39507
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 8;
E->base.y_height = 16;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_6(uint16 k, uint16 j) { // 0xB39517
+const uint16 *Botwoon_Instr_6(uint16 k, const uint16 *jp) { // 0xB39517
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 8;
E->base.y_height = 16;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_7(uint16 k, uint16 j) { // 0xB39527
+const uint16 *Botwoon_Instr_7(uint16 k, const uint16 *jp) { // 0xB39527
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 12;
E->base.y_height = 12;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_8(uint16 k, uint16 j) { // 0xB39537
+const uint16 *Botwoon_Instr_8(uint16 k, const uint16 *jp) { // 0xB39537
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 16;
E->base.y_height = 8;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_9(uint16 k, uint16 j) { // 0xB39547
+const uint16 *Botwoon_Instr_9(uint16 k, const uint16 *jp) { // 0xB39547
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 12;
E->base.y_height = 12;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_10(uint16 k, uint16 j) { // 0xB39557
+const uint16 *Botwoon_Instr_10(uint16 k, const uint16 *jp) { // 0xB39557
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->base.x_width = 8;
E->base.y_height = 16;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_SetSpitting(uint16 k, uint16 j) { // 0xB39567
+const uint16 *Botwoon_Instr_SetSpitting(uint16 k, const uint16 *jp) { // 0xB39567
Get_Botwoon(cur_enemy_index)->botwoon_var_5A = 1;
- return j;
+ return jp;
}
-uint16 Botwoon_Instr_QueueSpitSfx(uint16 k, uint16 j) { // 0xB39572
+const uint16 *Botwoon_Instr_QueueSpitSfx(uint16 k, const uint16 *jp) { // 0xB39572
QueueSfx2_Max6(0x7Cu);
- return j;
+ return jp;
}
void Botwoon_QueueExplosionSfx(void) { // 0xB3957B
@@ -1403,10 +1383,10 @@ void Botwoon_Func_32(void) { // 0xB3E250
Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index);
E->botwoon_var_E = addr_loc_B3E28C;
E->botwoon_var_3C = 0;
- uint8 *v1 = RomPtr_B3(E->botwoon_var_40 - 7856);
- E->botwoon_var_42 = *(uint16 *)v1;
- E->botwoon_var_37 = *((uint16 *)v1 + 2);
- int16 v2 = *((uint16 *)v1 + 1);
+ const uint8 *v1 = RomPtr_B3(E->botwoon_var_40 + addr_stru_B3E150);
+ E->botwoon_var_42 = GET_WORD(v1);
+ E->botwoon_var_37 = GET_WORD(v1 + 4);
+ int16 v2 = GET_WORD(v1 + 2);
E->botwoon_var_44 = v2;
if (v2 < 0)
E->botwoon_var_42 -= 4;
@@ -1422,7 +1402,7 @@ void Botwoon_Func_33(void) { // 0xB3E28C
if ((E->botwoon_var_44 & 0x8000u) != 0)
R22_ = -2;
do {
- uint8 *v6 = RomPtr_B3(E->botwoon_var_42);
+ const uint8 *v6 = RomPtr_B3(E->botwoon_var_42);
uint16 v7 = SignExtend8(*v6), v8;
if (v7 == 0xFF80 || (R18_ += v7, v8 = SignExtend8(v6[1]), v8 == 0xFF80)) {
E->botwoon_var_41 = 0;
@@ -1441,17 +1421,17 @@ void Botwoon_Func_33(void) { // 0xB3E28C
E->base.y_pos += R20_;
}
-uint16 EscapeEtecoon_Instr_1(uint16 k, uint16 j) { // 0xB3E545
+const uint16 *EscapeEtecoon_Instr_1(uint16 k, const uint16 *jp) { // 0xB3E545
if (lava_acid_y_pos >= 0xCEu)
- return j + 2;
+ return jp + 1;
else
- return *(uint16 *)RomPtr_B3(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 EscapeEtecoon_Instr_2(uint16 k, uint16 j) { // 0xB3E610
+const uint16 *EscapeEtecoon_Instr_2(uint16 k, const uint16 *jp) { // 0xB3E610
Enemy_EscapeEtecoon *E = Get_EscapeEtecoon(k);
- E->base.x_pos += *(uint16 *)RomPtr_B3(j);
- return j + 2;
+ E->base.x_pos += jp[0];
+ return jp + 1;
}
void EscapeEtecoon_Main(void) { // 0xB3E655
@@ -1480,7 +1460,7 @@ void EscapeEtecoon_E680(uint16 k) { // 0xB3E680
een_var_A = E->een_var_A;
if (een_var_A < 0)
--R20_;
- *(uint16 *)((char *)&R18_ + 1) = een_var_A;
+ R19_ = een_var_A;
if (Enemy_MoveRight_IgnoreSlopes(k) & 1) {
E->base.instruction_timer = 1;
bool v3 = (-E->een_var_A & 0x8000u) != 0;
@@ -1513,30 +1493,30 @@ void EscapeEtecoon_Init(void) { // 0xB3E6CB
}
}
-uint16 EscapeDachora_Instr_2(uint16 k, uint16 j) { // 0xB3EAA8
+const uint16 *EscapeDachora_Instr_2(uint16 k, const uint16 *jp) { // 0xB3EAA8
if (lava_acid_y_pos >= 0xCEu)
- return j + 2;
+ return jp + 1;
else
- return *(uint16 *)RomPtr_B3(j);
+ return INSTR_RETURN_ADDR(jp[0]);
}
-uint16 EscapeDachora_Instr_3(uint16 k, uint16 j) { // 0xB3EAB8
+const uint16 *EscapeDachora_Instr_3(uint16 k, const uint16 *jp) { // 0xB3EAB8
if (CheckEventHappened(0xFu))
- return *(uint16 *)RomPtr_B3(j);
+ return INSTR_RETURN_ADDR(jp[0]);
else
- return j + 2;
+ return jp + 1;
}
-uint16 EscapeDachora_Instr_1(uint16 k, uint16 j) { // 0xB3EAC9
+const uint16 *EscapeDachora_Instr_1(uint16 k, const uint16 *jp) { // 0xB3EAC9
Enemy_EscapeDachora *E = Get_EscapeDachora(cur_enemy_index);
E->base.x_pos -= 6;
- return j;
+ return jp;
}
-uint16 EscapeDachora_Instr_4(uint16 k, uint16 j) { // 0xB3EAD7
+const uint16 *EscapeDachora_Instr_4(uint16 k, const uint16 *jp) { // 0xB3EAD7
Enemy_EscapeDachora *E = Get_EscapeDachora(cur_enemy_index);
E->base.x_pos += 6;
- return j;
+ return jp;
}
void EscapeDachora_Init(void) { // 0xB3EAE5
@@ -1550,4 +1530,4 @@ void EscapeDachora_Init(void) { // 0xB3EAE5
E->base.timer = 0;
E->base.current_instruction = addr_kEscapeDachora_Ilist_E964;
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_b4.c b/src/sm_b4.c
index d8e0437..fb71e9c 100644
--- a/src/sm_b4.c
+++ b/src/sm_b4.c
@@ -4,7 +4,11 @@
#include "funcs.h"
#include "enemy_types.h"
-#define kCreateSprite_Ilists ((uint16*)RomPtr(0xb4bda8))
+
+#define kCreateSprite_Ilists ((uint16*)RomFixedPtr(0xb4bda8))
+
+
+
void CreateSpriteAtPos(void) { // 0xB4BC26
int v0 = 62;
@@ -39,34 +43,31 @@ void CallSpriteObjectInstr(uint32 ea) {
void HandleSpriteObjects(void) { // 0xB4BC82
uint16 v1;
- if (!(debug_time_frozen_for_enemies | time_is_frozen_flag)) {
- sprite_object_index = 62;
- while (1) {
- int v0;
- v0 = sprite_object_index >> 1;
- if (!sprite_instr_list_ptrs[v0] || (sprite_disable_flag[v0] & 1) != 0)
- goto LABEL_9;
- v1 = sprite_instr_timer[v0];
- if ((v1 & 0x8000u) != 0)
- break;
- sprite_instr_timer[v0] = v1 - 1;
- if (v1 == 1) {
- uint16 v3 = sprite_instr_list_ptrs[v0] + 4;
- sprite_instr_list_ptrs[v0] = v3;
- v1 = *(uint16 *)RomPtr_B4(v3);
- if (!sign16(v1 + 0x8000))
- break;
- sprite_instr_timer[sprite_object_index >> 1] = v1;
- }
-LABEL_9:
- sprite_object_index -= 2;
- if ((sprite_object_index & 0x8000u) != 0)
- return;
+ if (debug_time_frozen_for_enemies | time_is_frozen_flag)
+ return;
+
+ sprite_object_index = 62;
+ do {
+ int v0;
+ v0 = sprite_object_index >> 1;
+ if (!sprite_instr_list_ptrs[v0] || (sprite_disable_flag[v0] & 1) != 0)
+ continue;
+ v1 = sprite_instr_timer[v0];
+ if (sign16(v1)) {
+BREAKLABEL:
+ CallSpriteObjectInstr(v1 | 0xB40000);
+ continue;
}
- R18_ = v1;
- CallSpriteObjectInstr(v1 | 0xB40000);
- goto LABEL_9;
- }
+ sprite_instr_timer[v0] = v1 - 1;
+ if (v1 == 1) {
+ uint16 v3 = sprite_instr_list_ptrs[v0] + 4;
+ sprite_instr_list_ptrs[v0] = v3;
+ v1 = *(uint16 *)RomPtr_B4(v3);
+ if (sign16(v1))
+ goto BREAKLABEL;
+ sprite_instr_timer[sprite_object_index >> 1] = v1;
+ }
+ } while (!sign16(sprite_object_index -= 2));
}
void SpriteObject_Instr_RepeatLast(void) { // 0xB4BCF0
@@ -80,9 +81,9 @@ void SpriteObject_Instr_Terminate(void) { // 0xB4BD07
}
void SpriteObject_Instr_Goto(void) { // 0xB4BD12
- uint16 v2 = *((uint16 *)RomPtr_B4(sprite_instr_list_ptrs[sprite_object_index >> 1]) + 1);
+ uint16 v2 = GET_WORD(RomPtr_B4(sprite_instr_list_ptrs[sprite_object_index >> 1]) + 2);
sprite_instr_list_ptrs[sprite_object_index >> 1] = v2;
- sprite_instr_timer[sprite_object_index >> 1] = *(uint16 *)RomPtr_B4(v2);
+ sprite_instr_timer[sprite_object_index >> 1] = GET_WORD(RomPtr_B4(v2));
}
void DrawSpriteObjects(void) { // 0xB4BD32
@@ -98,8 +99,8 @@ void DrawSpriteObjects(void) { // 0xB4BD32
if (sign16(v2 - 272)) {
R3_.addr = sprite_palettes[v1] & 0xE00;
R0_.addr = sprite_palettes[v1] & 0x1FF;
- uint8 *v3 = RomPtr_B4(sprite_instr_list_ptrs[v1]);
- DrawSpritemapWithBaseTile(0xB4, *((uint16 *)v3 + 1));
+ const uint8 *v3 = RomPtr_B4(sprite_instr_list_ptrs[v1]);
+ DrawSpritemapWithBaseTile(0xB4, GET_WORD(v3 + 2));
}
}
}
@@ -114,4 +115,4 @@ void ClearSpriteObjects(void) { // 0xB4BD97
sprite_instr_list_ptrs[v0 >> 1] = 0;
v0 -= 2;
} while (v0);
-}
+}
\ No newline at end of file
diff --git a/src/sm_cpu_infra.c b/src/sm_cpu_infra.c
index 9145d36..b1da8f6 100644
--- a/src/sm_cpu_infra.c
+++ b/src/sm_cpu_infra.c
@@ -4,6 +4,10 @@
#include "snes/snes.h"
#include "tracing.h"
+
+
+
+
#include "ida_types.h"
#include "variables.h"
#include "funcs.h"
@@ -56,8 +60,12 @@ void Call(uint32 addr) {
RunAsmCode(addr, 0, 0, 0, 0);
}
+uint8_t *SnesRomPtr(uint32 v) {
+ return (uint8*)RomPtr(v);
+}
+
bool ProcessHook(uint32 v) {
- uint8_t *rombyte = RomPtr(v);
+ uint8_t *rombyte = SnesRomPtr(v);
switch (hookmode) {
case 0: // remove hooks
*rombyte = hook_orgbyte[hookcnt++];
@@ -79,7 +87,7 @@ bool ProcessHook(uint32 v) {
bool FixBugHook(uint32 addr) {
switch (hookmode) {
case 1: { // install hooks
- uint8_t *rombyte = RomPtr(addr);
+ uint8_t *rombyte = SnesRomPtr(addr);
hook_fixbug_orgbyte[hookcnt++] = *rombyte;
*rombyte = 0;
return false;
@@ -167,6 +175,9 @@ static const uint32 kPatchedCarrys[] = {
0x94B176,
0x94B156,
+ // MotherBrain
+ 0xA99413,
+
// room_width_in_blocks etc
0x80ab5d,
0x84865c,
@@ -326,6 +337,9 @@ uint32 PatchBugs(uint32 mode, uint32 addr) {
} else if (FixBugHook(0x88AFF2)) {
if (g_cpu->a < 256) // RoomMainAsm_ScrollingSky reads oob
g_cpu->a = 256;
+ } else if (FixBugHook(0x8189bd)) {
+ if (g_cpu->y == 0) // DrawSamusSpritemap reads invalid ptr
+ return 0x818A35;
}
return 0;
@@ -339,7 +353,7 @@ int RunPatchBugHook(uint32 addr) {
} else {
g_cpu->k = new_pc >> 16;
g_cpu->pc = (new_pc & 0xffff) + 1;
- return *RomPtr(new_pc);
+ return *SnesRomPtr(new_pc);
}
}
@@ -373,10 +387,9 @@ static void VerifySnapshotsEq(Snapshot *b, Snapshot *a, Snapshot *prev) {
memcpy(&b->ram[0x0], &a->ram[0x0], 0x34); // R18, R20, R22 etc
memcpy(&b->ram[0x1f5b], &a->ram[0x1f5b], 0x100 - 0x5b); // stacck
- memcpy(&b->ram[0x44], &a->ram[0x44], 3); // decompress_dst_tmp
+ memcpy(&b->ram[0x44], &a->ram[0x44], 13); // decompress temp
memcpy(&b->ram[0x19b3], &a->ram[0x19b3], 1); // mode7_spawn_param
memcpy(&b->ram[0x1993], &a->ram[0x1993], 2); // enemy_projectile_init_param
- memcpy(&b->ram[0x49], &a->ram[0x49], 1); // decompress_src.bank
memcpy(&b->ram[0x1B9D], &a->ram[0x1B9D], 2); // cinematic_spawn_param
memcpy(&b->ram[0x1a93], &a->ram[0x1a93], 2); // cinematic_spawn_param
memcpy(&b->ram[0xA82], &a->ram[0xA82], 2); // xray_angle
@@ -389,13 +402,22 @@ static void VerifySnapshotsEq(Snapshot *b, Snapshot *a, Snapshot *prev) {
memcpy(&a->ram[0x77e], &b->ram[0x77e], 5); // my counter
memcpy(&a->ram[0xe20], &b->ram[0xe20], 2); // enemy_population_ptr
+ memcpy(&a->ram[0x1784], &b->ram[0x1784], 3); // enemy_ai_pointer
+ memcpy(&a->ram[0x3c], &b->ram[0x3c], 2); // nmicopy1_var_d
+ memcpy(&a->ram[0x17aa], &b->ram[0x17aa], 2); // interactive_enemy_indexes_index
+ memcpy(&a->ram[0x60B], &b->ram[0x60B], 2); // remaining_enemy_spritemap_entries
+
+ memcpy(&a->ram[0xdd4], &b->ram[0xdd4], 4); // temp_collision_DD4
+
+
+
if (memcmp(b->ram, a->ram, 0x20000)) {
fprintf(stderr, "@%d: Memory compare failed (mine != theirs, prev):\n", snes_frame_counter);
int j = 0;
for (size_t i = 0; i < 0x20000; i++) {
if (a->ram[i] != b->ram[i]) {
if (++j < 256) {
- if (/* (i & 1) == 0 && */a->ram[i + 1] != b->ram[i + 1]) {
+ if (((i & 1) == 0 || i < 0x10000) && a->ram[i + 1] != b->ram[i + 1]) {
fprintf(stderr, "0x%.6X: %.4X != %.4X (%.4X)\n", (int)i,
WORD(b->ram[i]), WORD(a->ram[i]), WORD(prev->ram[i]));
i++, j++;
@@ -553,12 +575,12 @@ static bool loadRom(const char *name, Snes *snes) {
void PatchBytes(uint32 addr, const uint8 *value, size_t n) {
for(size_t i = 0; i != n; i++)
- RomPtr(addr)[i] = value[i];
+ SnesRomPtr(addr)[i] = value[i];
}
// Patches add/sub to ignore carry
void FixupCarry(uint32 addr) {
- *RomPtr(addr) = 0;
+ *SnesRomPtr(addr) = 0;
}
void RtlUpdateSnesPatchForBugfix() {
@@ -580,6 +602,7 @@ Snes *SnesInit(const char *filename) {
}
g_sram = g_snes->cart->ram;
+ g_rom = g_snes->cart->rom;
RtlSetupEmuCallbacks(NULL, &RtlRunFrameCompare, NULL);
@@ -751,7 +774,7 @@ Snes *SnesInit(const char *filename) {
RtlUpdateSnesPatchForBugfix();
for (size_t i = 0; i != arraysize(kPatchedCarrys); i++) {
- uint8 t = *RomPtr(kPatchedCarrys[i]);
+ uint8 t = *SnesRomPtr(kPatchedCarrys[i]);
if (t) {
kPatchedCarrysOrg[i] = t;
FixupCarry(kPatchedCarrys[i]);
@@ -827,7 +850,7 @@ again_theirs:
MakeSnapshot(&g_snapshot_theirs);
// Run my version and snapshot
-again_mine:
+//again_mine:
g_snes->ppu = g_snes->my_ppu;
RestoreSnapshot(&g_snapshot_before);
diff --git a/src/sm_rtl.c b/src/sm_rtl.c
index bbf4c95..150e2a3 100644
--- a/src/sm_rtl.c
+++ b/src/sm_rtl.c
@@ -7,6 +7,10 @@
#include "spc_player.h"
#include "util.h"
+
+
+
+
struct StateRecorder;
static void RtlSaveMusicStateToRam_Locked();
@@ -14,6 +18,7 @@ static void RtlRestoreMusicAfterLoad_Locked(bool is_reset);
uint8 g_ram[0x20000];
uint8 *g_sram;
+const uint8 *g_rom;
static uint8 *g_rtl_memory_ptr;
static RunFrameFunc *g_rtl_runframe;
@@ -510,11 +515,6 @@ uint32 Load24(void *a) {
return *(uint32 *)a & 0xffffff;
}
-void DecompressToMem_IpArg(const void *p) {
- decompress_dst = *(LongPtr *)p;
- DecompressToMem();
-}
-
bool Unreachable(void) {
printf("Unreachable!\n");
assert(0);
@@ -522,28 +522,36 @@ bool Unreachable(void) {
return false;
}
-uint8_t *RomPtr(uint32_t addr) {
+const uint8 *RomPtr(uint32_t addr) {
if (!(addr & 0x8000)) {
printf("RomPtr - Invalid access 0x%x!\n", addr);
g_fail = true;
}
- return &g_snes->cart->rom[(((addr >> 16) << 15) | (addr & 0x7fff)) & (g_snes->cart->romSize - 1)];
+ return &g_rom[(((addr >> 16) << 15) | (addr & 0x7fff)) & 0x3fffff];
}
-uint8_t *IndirPtr(void *ptr, uint16 offs) {
- uint32 a = (*(uint32 *)ptr & 0xffffff) + offs;
- if ((a >> 16) >= 0x7e && (a >> 16) <= 0x7f || a < 0x2000) {
+static uint8 *IndirPtr(LongPtr ptr, uint16 offs) {
+ uint32 a = (ptr.bank << 16 | ptr.addr) + offs;
+ if (ptr.bank >= 0x7e && ptr.bank <= 0x7f || a < 0x2000) {
return &g_ram[a & 0x1ffff];
} else {
- return RomPtr(a);
+ return (uint8 *)RomPtr(a);
}
}
-void IndirWriteWord(void *ptr, uint16 offs, uint16 value) {
+uint16 IndirReadWord(LongPtr ptr, uint16 offs) {
+ return *(uint16 *)IndirPtr(ptr, offs);
+}
+
+void IndirWriteWord(LongPtr ptr, uint16 offs, uint16 value) {
*(uint16 *)IndirPtr(ptr, offs) = value;
}
-void IndirWriteByte(void *ptr, uint16 offs, uint8 value) {
+uint8 IndirReadByte(LongPtr ptr, uint16 offs) {
+ return *(uint8_t *)IndirPtr(ptr, offs);
+}
+
+void IndirWriteByte(LongPtr ptr, uint16 offs, uint8 value) {
*IndirPtr(ptr, offs) = value;
}
@@ -757,4 +765,4 @@ void RtlWriteSram(void) {
} else {
fprintf(stderr, "Unable to write saves/sm.srm\n");
}
-}
+}
\ No newline at end of file
diff --git a/src/sm_rtl.h b/src/sm_rtl.h
index fcfbbdf..4dbe4ec 100644
--- a/src/sm_rtl.h
+++ b/src/sm_rtl.h
@@ -8,6 +8,7 @@ extern void RtlApuWrite(uint32 adr, uint8 val);
extern int snes_frame_counter;
extern uint8 *g_sram;
+extern const uint8 *g_rom;
extern bool g_use_my_apu_code;
#define LONGPTR(t) {(t) & 0xffff, (t) >> 16}
extern bool g_debug_flag;
@@ -31,10 +32,13 @@ typedef uint16 Func_XY_Y(uint16 k, uint16 j);
typedef void FuncXY_V(uint16 k, uint16 j);
typedef PairU16 Func_Y_To_PairU16(uint16 j);
-uint8_t *RomPtr(uint32_t addr);
-uint8_t *IndirPtr(void *ptr, uint16 offs);
-void IndirWriteWord(void *ptr, uint16 offs, uint16 value);
-void IndirWriteByte(void *ptr, uint16 offs, uint8 value);
+const uint8 *RomPtr(uint32_t addr);
+uint8 IndirReadByte(LongPtr ptr, uint16 offs);
+uint16 IndirReadWord(LongPtr ptr, uint16 offs);
+void IndirWriteByte(LongPtr ptr, uint16 offs, uint8 value);
+void IndirWriteWord(LongPtr ptr, uint16 offs, uint16 value);
+
+static inline const uint8 *RomFixedPtr(uint32_t addr) { return &g_rom[(((addr >> 16) << 15) | (addr & 0x7fff)) & 0x3fffff]; }
struct LongPtr;
void mov24(LongPtr *dst, uint32 src);
@@ -42,116 +46,83 @@ void copy24(LongPtr *dst, LongPtr *src);
uint32 Load24(void *a);
void MemCpy(void *dst, const void *src, int size);
void Call(uint32 addr);
+bool Unreachable();
-static inline uint8_t *RomPtr_RAM(uint16_t addr) { assert(addr < 0x2000); return g_ram + addr; }
+#define INSTR_RETURN_ADDR(x) ((const uint16*)(uintptr_t)(x))
+#define INSTR_INCR_BYTES(x, n) ((const uint16*)((uintptr_t)(x) + n))
+#define INSTR_ADDR_TO_PTR(k, jp) ((uint8*)(jp) - (RomPtrWithBank(gEnemyData(k)->bank, 0x8000) - 0x8000))
-static inline uint8_t *RomPtr_7E(uint16_t addr) { return g_ram + addr; }
-static inline uint8_t *RomPtr_7F(uint16_t addr) { return g_ram + 0x10000 + addr; }
-static inline uint8_t *RomPtr_80(uint16_t addr) { return RomPtr(0x800000 | addr); }
-static inline uint8_t *RomPtr_81(uint16_t addr) { return RomPtr(0x810000 | addr); }
-static inline uint8_t *RomPtr_82(uint16_t addr) { return RomPtr(0x820000 | addr); }
-static inline uint8_t *RomPtr_83(uint16_t addr) { return RomPtr(0x830000 | addr); }
-static inline uint8_t *RomPtr_84(uint16_t addr) { return RomPtr(0x840000 | addr); }
-static inline uint8_t *RomPtr_85(uint16_t addr) { return RomPtr(0x850000 | addr); }
-static inline uint8_t *RomPtr_86(uint16_t addr) { return RomPtr(0x860000 | addr); }
-static inline uint8_t *RomPtr_87(uint16_t addr) { return RomPtr(0x870000 | addr); }
-static inline uint8_t *RomPtr_88(uint16_t addr) { return RomPtr(0x880000 | addr); }
-static inline uint8_t *RomPtr_89(uint16_t addr) { return RomPtr(0x890000 | addr); }
-static inline uint8_t *RomPtr_8A(uint16_t addr) { return RomPtr(0x8a0000 | addr); }
-static inline uint8_t *RomPtr_8B(uint16_t addr) { return RomPtr(0x8b0000 | addr); }
-static inline uint8_t *RomPtr_8C(uint16_t addr) { return RomPtr(0x8c0000 | addr); }
-static inline uint8_t *RomPtr_8D(uint16_t addr) { return RomPtr(0x8d0000 | addr); }
-static inline uint8_t *RomPtr_8E(uint16_t addr) { return RomPtr(0x8e0000 | addr); }
-static inline uint8_t *RomPtr_8F(uint16_t addr) { return RomPtr(0x8f0000 | addr); }
-static inline uint8_t *RomPtr_90(uint16_t addr) { return RomPtr(0x900000 | addr); }
-static inline uint8_t *RomPtr_91(uint16_t addr) { return RomPtr(0x910000 | addr); }
-static inline uint8_t *RomPtr_92(uint16_t addr) { return RomPtr(0x920000 | addr); }
-static inline uint8_t *RomPtr_93(uint16_t addr) { return RomPtr(0x930000 | addr); }
-static inline uint8_t *RomPtr_94(uint16_t addr) { return RomPtr(0x940000 | addr); }
-static inline uint8_t *RomPtr_95(uint16_t addr) { return RomPtr(0x950000 | addr); }
-static inline uint8_t *RomPtr_96(uint16_t addr) { return RomPtr(0x960000 | addr); }
-static inline uint8_t *RomPtr_97(uint16_t addr) { return RomPtr(0x970000 | addr); }
-static inline uint8_t *RomPtr_98(uint16_t addr) { return RomPtr(0x980000 | addr); }
-static inline uint8_t *RomPtr_99(uint16_t addr) { return RomPtr(0x990000 | addr); }
-static inline uint8_t *RomPtr_9A(uint16_t addr) { return RomPtr(0x9a0000 | addr); }
-static inline uint8_t *RomPtr_9B(uint16_t addr) { return RomPtr(0x9b0000 | addr); }
-static inline uint8_t *RomPtr_9C(uint16_t addr) { return RomPtr(0x9c0000 | addr); }
-static inline uint8_t *RomPtr_9D(uint16_t addr) { return RomPtr(0x9d0000 | addr); }
-static inline uint8_t *RomPtr_9E(uint16_t addr) { return RomPtr(0x9e0000 | addr); }
-static inline uint8_t *RomPtr_9F(uint16_t addr) { return RomPtr(0x9f0000 | addr); }
-static inline uint8_t *RomPtr_A0(uint16_t addr) { return RomPtr(0xa00000 | addr); }
-static inline uint8_t *RomPtr_A1(uint16_t addr) { return RomPtr(0xa10000 | addr); }
-static inline uint8_t *RomPtr_A2(uint16_t addr) { return RomPtr(0xa20000 | addr); }
-static inline uint8_t *RomPtr_A3(uint16_t addr) { return RomPtr(0xa30000 | addr); }
-static inline uint8_t *RomPtr_A4(uint16_t addr) { return RomPtr(0xa40000 | addr); }
-static inline uint8_t *RomPtr_A5(uint16_t addr) { return RomPtr(0xa50000 | addr); }
-static inline uint8_t *RomPtr_A6(uint16_t addr) { return RomPtr(0xa60000 | addr); }
-static inline uint8_t *RomPtr_A7(uint16_t addr) { return RomPtr(0xa70000 | addr); }
-static inline uint8_t *RomPtr_A8(uint16_t addr) { return RomPtr(0xa80000 | addr); }
-static inline uint8_t *RomPtr_A9(uint16_t addr) { return RomPtr(0xa90000 | addr); }
-static inline uint8_t *RomPtr_AA(uint16_t addr) { return RomPtr(0xaa0000 | addr); }
-static inline uint8_t *RomPtr_AB(uint16_t addr) { return RomPtr(0xab0000 | addr); }
-static inline uint8_t *RomPtr_AC(uint16_t addr) { return RomPtr(0xac0000 | addr); }
-static inline uint8_t *RomPtr_AD(uint16_t addr) { return RomPtr(0xad0000 | addr); }
-static inline uint8_t *RomPtr_AE(uint16_t addr) { return RomPtr(0xae0000 | addr); }
-static inline uint8_t *RomPtr_AF(uint16_t addr) { return RomPtr(0xaf0000 | addr); }
-static inline uint8_t *RomPtr_B0(uint16_t addr) { return RomPtr(0xb00000 | addr); }
-static inline uint8_t *RomPtr_B1(uint16_t addr) { return RomPtr(0xb10000 | addr); }
-static inline uint8_t *RomPtr_B2(uint16_t addr) { return RomPtr(0xb20000 | addr); }
-static inline uint8_t *RomPtr_B3(uint16_t addr) { return RomPtr(0xb30000 | addr); }
-static inline uint8_t *RomPtr_B4(uint16_t addr) { return RomPtr(0xb40000 | addr); }
-static inline uint8_t *RomPtr_B5(uint16_t addr) { return RomPtr(0xb50000 | addr); }
-static inline uint8_t *RomPtr_B6(uint16_t addr) { return RomPtr(0xb60000 | addr); }
-static inline uint8_t *RomPtr_B7(uint16_t addr) { return RomPtr(0xb70000 | addr); }
-static inline uint8_t *RomPtr_B8(uint16_t addr) { return RomPtr(0xb80000 | addr); }
-static inline uint8_t *RomPtr_B9(uint16_t addr) { return RomPtr(0xb90000 | addr); }
-static inline uint8_t *RomPtr_BA(uint16_t addr) { return RomPtr(0xba0000 | addr); }
-static inline uint8_t *RomPtr_BB(uint16_t addr) { return RomPtr(0xbb0000 | addr); }
-static inline uint8_t *RomPtr_BC(uint16_t addr) { return RomPtr(0xbc0000 | addr); }
-static inline uint8_t *RomPtr_BD(uint16_t addr) { return RomPtr(0xbd0000 | addr); }
-static inline uint8_t *RomPtr_BE(uint16_t addr) { return RomPtr(0xbe0000 | addr); }
-static inline uint8_t *RomPtr_BF(uint16_t addr) { return RomPtr(0xbf0000 | addr); }
-static inline uint8_t *RomPtr_C0(uint16_t addr) { return RomPtr(0xc00000 | addr); }
-static inline uint8_t *RomPtr_C1(uint16_t addr) { return RomPtr(0xc10000 | addr); }
-static inline uint8_t *RomPtr_C2(uint16_t addr) { return RomPtr(0xc20000 | addr); }
-static inline uint8_t *RomPtr_C3(uint16_t addr) { return RomPtr(0xc30000 | addr); }
-static inline uint8_t *RomPtr_C4(uint16_t addr) { return RomPtr(0xc40000 | addr); }
-static inline uint8_t *RomPtr_C5(uint16_t addr) { return RomPtr(0xc50000 | addr); }
-static inline uint8_t *RomPtr_C6(uint16_t addr) { return RomPtr(0xc60000 | addr); }
-static inline uint8_t *RomPtr_C7(uint16_t addr) { return RomPtr(0xc70000 | addr); }
-static inline uint8_t *RomPtr_C8(uint16_t addr) { return RomPtr(0xc80000 | addr); }
-static inline uint8_t *RomPtr_C9(uint16_t addr) { return RomPtr(0xc90000 | addr); }
-static inline uint8_t *RomPtr_CA(uint16_t addr) { return RomPtr(0xca0000 | addr); }
-static inline uint8_t *RomPtr_CB(uint16_t addr) { return RomPtr(0xcb0000 | addr); }
-static inline uint8_t *RomPtr_CC(uint16_t addr) { return RomPtr(0xcc0000 | addr); }
-static inline uint8_t *RomPtr_CD(uint16_t addr) { return RomPtr(0xcd0000 | addr); }
-static inline uint8_t *RomPtr_CE(uint16_t addr) { return RomPtr(0xce0000 | addr); }
-static inline uint8_t *RomPtr_CF(uint16_t addr) { return RomPtr(0xcf0000 | addr); }
-static inline uint8_t *RomPtr_D0(uint16_t addr) { return RomPtr(0xd00000 | addr); }
-static inline uint8_t *RomPtr_D1(uint16_t addr) { return RomPtr(0xd10000 | addr); }
-static inline uint8_t *RomPtr_D2(uint16_t addr) { return RomPtr(0xd20000 | addr); }
-static inline uint8_t *RomPtr_D3(uint16_t addr) { return RomPtr(0xd30000 | addr); }
-static inline uint8_t *RomPtr_D4(uint16_t addr) { return RomPtr(0xd40000 | addr); }
-static inline uint8_t *RomPtr_D5(uint16_t addr) { return RomPtr(0xd50000 | addr); }
-static inline uint8_t *RomPtr_D6(uint16_t addr) { return RomPtr(0xd60000 | addr); }
-static inline uint8_t *RomPtr_D7(uint16_t addr) { return RomPtr(0xd70000 | addr); }
-static inline uint8_t *RomPtr_D8(uint16_t addr) { return RomPtr(0xd80000 | addr); }
-static inline uint8_t *RomPtr_D9(uint16_t addr) { return RomPtr(0xd90000 | addr); }
-static inline uint8_t *RomPtr_DA(uint16_t addr) { return RomPtr(0xda0000 | addr); }
-static inline uint8_t *RomPtr_DB(uint16_t addr) { return RomPtr(0xdb0000 | addr); }
-static inline uint8_t *RomPtr_DC(uint16_t addr) { return RomPtr(0xdc0000 | addr); }
-static inline uint8_t *RomPtr_DD(uint16_t addr) { return RomPtr(0xdd0000 | addr); }
-static inline uint8_t *RomPtr_DE(uint16_t addr) { return RomPtr(0xde0000 | addr); }
-static inline uint8_t *RomPtr_DF(uint16_t addr) { return RomPtr(0xdf0000 | addr); }
+#define INSTRB_RETURN_ADDR(x) ((const uint8*)(uintptr_t)(x))
-static inline uint8_t *RomPtrWithBank(uint8 bank, uint16_t addr) { return RomPtr((bank << 16) | addr); }
+#if defined(_DEBUG)
+// Gives better warning messages but non inlined on tcc
+static inline uint16 GET_WORD(const uint8 *p) { return *(uint16 *)(p); }
+#else
+#define GET_WORD(p) (*(uint16*)(p))
+#endif
+
+#define GET_BYTE(p) (*(uint8*)(p))
+
+static inline uint8 *RomPtr_RAM(uint16_t addr) { assert(addr < 0x2000); return g_ram + addr; }
+static inline const uint8 *RomPtr_80(uint16_t addr) { return RomPtr(0x800000 | addr); }
+static inline const uint8 *RomPtr_81(uint16_t addr) { return RomPtr(0x810000 | addr); }
+static inline const uint8 *RomPtr_82(uint16_t addr) { return RomPtr(0x820000 | addr); }
+static inline const uint8 *RomPtr_83(uint16_t addr) { return RomPtr(0x830000 | addr); }
+static inline const uint8 *RomPtr_84(uint16_t addr) { return RomPtr(0x840000 | addr); }
+static inline const uint8 *RomPtr_85(uint16_t addr) { return RomPtr(0x850000 | addr); }
+static inline const uint8 *RomPtr_86(uint16_t addr) { return RomPtr(0x860000 | addr); }
+static inline const uint8 *RomPtr_87(uint16_t addr) { return RomPtr(0x870000 | addr); }
+static inline const uint8 *RomPtr_88(uint16_t addr) { return RomPtr(0x880000 | addr); }
+static inline const uint8 *RomPtr_89(uint16_t addr) { return RomPtr(0x890000 | addr); }
+static inline const uint8 *RomPtr_8A(uint16_t addr) { return RomPtr(0x8a0000 | addr); }
+static inline const uint8 *RomPtr_8B(uint16_t addr) { return RomPtr(0x8b0000 | addr); }
+static inline const uint8 *RomPtr_8C(uint16_t addr) { return RomPtr(0x8c0000 | addr); }
+static inline const uint8 *RomPtr_8D(uint16_t addr) { return RomPtr(0x8d0000 | addr); }
+static inline const uint8 *RomPtr_8E(uint16_t addr) { return RomPtr(0x8e0000 | addr); }
+static inline const uint8 *RomPtr_8F(uint16_t addr) { return RomPtr(0x8f0000 | addr); }
+static inline const uint8 *RomPtr_90(uint16_t addr) { return RomPtr(0x900000 | addr); }
+static inline const uint8 *RomPtr_91(uint16_t addr) { return RomPtr(0x910000 | addr); }
+static inline const uint8 *RomPtr_92(uint16_t addr) { return RomPtr(0x920000 | addr); }
+static inline const uint8 *RomPtr_93(uint16_t addr) { return RomPtr(0x930000 | addr); }
+static inline const uint8 *RomPtr_94(uint16_t addr) { return RomPtr(0x940000 | addr); }
+static inline const uint8 *RomPtr_95(uint16_t addr) { return RomPtr(0x950000 | addr); }
+static inline const uint8 *RomPtr_96(uint16_t addr) { return RomPtr(0x960000 | addr); }
+static inline const uint8 *RomPtr_97(uint16_t addr) { return RomPtr(0x970000 | addr); }
+static inline const uint8 *RomPtr_98(uint16_t addr) { return RomPtr(0x980000 | addr); }
+static inline const uint8 *RomPtr_99(uint16_t addr) { return RomPtr(0x990000 | addr); }
+static inline const uint8 *RomPtr_9A(uint16_t addr) { return RomPtr(0x9a0000 | addr); }
+static inline const uint8 *RomPtr_9B(uint16_t addr) { return RomPtr(0x9b0000 | addr); }
+static inline const uint8 *RomPtr_9C(uint16_t addr) { return RomPtr(0x9c0000 | addr); }
+static inline const uint8 *RomPtr_9D(uint16_t addr) { return RomPtr(0x9d0000 | addr); }
+static inline const uint8 *RomPtr_9E(uint16_t addr) { return RomPtr(0x9e0000 | addr); }
+static inline const uint8 *RomPtr_9F(uint16_t addr) { return RomPtr(0x9f0000 | addr); }
+static inline const uint8 *RomPtr_A0(uint16_t addr) { return RomPtr(0xa00000 | addr); }
+static inline const uint8 *RomPtr_A1(uint16_t addr) { return RomPtr(0xa10000 | addr); }
+static inline const uint8 *RomPtr_A2(uint16_t addr) { return RomPtr(0xa20000 | addr); }
+static inline const uint8 *RomPtr_A3(uint16_t addr) { return RomPtr(0xa30000 | addr); }
+static inline const uint8 *RomPtr_A4(uint16_t addr) { return RomPtr(0xa40000 | addr); }
+static inline const uint8 *RomPtr_A5(uint16_t addr) { return RomPtr(0xa50000 | addr); }
+static inline const uint8 *RomPtr_A6(uint16_t addr) { return RomPtr(0xa60000 | addr); }
+static inline const uint8 *RomPtr_A7(uint16_t addr) { return RomPtr(0xa70000 | addr); }
+static inline const uint8 *RomPtr_A8(uint16_t addr) { return RomPtr(0xa80000 | addr); }
+static inline const uint8 *RomPtr_A9(uint16_t addr) { return RomPtr(0xa90000 | addr); }
+static inline const uint8 *RomPtr_AA(uint16_t addr) { return RomPtr(0xaa0000 | addr); }
+static inline const uint8 *RomPtr_AB(uint16_t addr) { return RomPtr(0xab0000 | addr); }
+static inline const uint8 *RomPtr_AC(uint16_t addr) { return RomPtr(0xac0000 | addr); }
+static inline const uint8 *RomPtr_AD(uint16_t addr) { return RomPtr(0xad0000 | addr); }
+static inline const uint8 *RomPtr_AE(uint16_t addr) { return RomPtr(0xae0000 | addr); }
+static inline const uint8 *RomPtr_AF(uint16_t addr) { return RomPtr(0xaf0000 | addr); }
+static inline const uint8 *RomPtr_B2(uint16_t addr) { return RomPtr(0xb20000 | addr); }
+static inline const uint8 *RomPtr_B3(uint16_t addr) { return RomPtr(0xb30000 | addr); }
+static inline const uint8 *RomPtr_B4(uint16_t addr) { return RomPtr(0xb40000 | addr); }
+static inline const uint8 *RomPtr_B7(uint16_t addr) { return RomPtr(0xb70000 | addr); }
+static inline const uint8 *RomPtrWithBank(uint8 bank, uint16_t addr) { return RomPtr((bank << 16) | addr); }
void WriteReg(uint16 reg, uint8 value);
void WriteRegWord(uint16 reg, uint16 value);
uint16 ReadRegWord(uint16 reg);
uint8 ReadReg(uint16 reg);
-
typedef void RunFrameFunc(uint16 input, int run_what);
typedef void SyncAllFunc();
@@ -213,39 +184,31 @@ struct VramWriteEntry;
PairU16 MakePairU16(uint16 k, uint16 j);
-#define R0_ (*(LongPtr*)(g_ram+0x0))
-#define R3_ (*(LongPtr*)(g_ram+0x3))
-#define byte_7E0002 R0_.bank
-
-#define kPoseParams ((SamusPoseParams*)RomPtr(0x91b629))
-#define kAtmosphericGraphicAnimationTimers ((uint16*)RomPtr(0x908b93))
-#define kAtmosphericTypeNumFrames ((uint16*)RomPtr(0x908bef))
-#define g_off_908BFF ((uint16*)RomPtr(0x908bff))
-#define g_stru_90A83A ((DisableMinimapAndMarkBossRoomAsExploredEnt*)RomPtr(0x90a83a))
-#define kPlayerPoseToPtr ((uint16*)RomPtr(0x90c7df))
-#define kDrawArmCannon_Tab2 ((uint16*)RomPtr(0x90c7a5))
+#define kPoseParams ((SamusPoseParams*)RomFixedPtr(0x91b629))
+#define kAtmosphericGraphicAnimationTimers ((uint16*)RomFixedPtr(0x908b93))
+#define kAtmosphericTypeNumFrames ((uint16*)RomFixedPtr(0x908bef))
+#define g_off_908BFF ((uint16*)RomFixedPtr(0x908bff))
+#define g_stru_90A83A ((DisableMinimapAndMarkBossRoomAsExploredEnt*)RomFixedPtr(0x90a83a))
+#define kPlayerPoseToPtr ((uint16*)RomFixedPtr(0x90c7df))
+#define kDrawArmCannon_Tab2 ((uint16*)RomFixedPtr(0x90c7a5))
extern const int16 kSinCosTable8bit_Sext[320];
-#define kPoseTransitionTable ((uint16*)RomPtr(0x919ee2))
-#define kDemoSetDefPtrs ((uint16*)RomPtr(0x918885))
-#define kSpeedBoostToCtr ((uint16*)RomPtr(0x91b61f))
-#define kSpeedBoostToAnimFramePtr ((uint16 *)RomPtr(0x91B5DE))
-#define kSamusPoseToBaseSpritemapIndexTop ((uint16*)RomPtr(0x929263))
-#define kSamusPoseToBaseSpritemapIndexBottom ((uint16*)RomPtr(0x92945d))
-#define kSamusAnimationDelayData ((uint16*)RomPtr(0x91b010))
-
-bool Unreachable();
-
-
-#define kCommonEnemySpeeds_Linear ((uint16*)RomPtr(0xa28187))
-#define kCommonEnemySpeeds_Quadratic ((uint16*)RomPtr(0xa2838f))
-#define kSine16bit ((uint16*)RomPtr(0xa0b1c3))
-#define kOamExtra_X8Small_And_Large ((uint16*)RomPtr(0x81839f))
-#define kOamExtra_Address_And_X8Large ((uint16*)RomPtr(0x81859f))
-#define kTanTable ((uint16*)RomPtr(0x91c9d4))
+#define kPoseTransitionTable ((uint16*)RomFixedPtr(0x919ee2))
+#define kDemoSetDefPtrs ((uint16*)RomFixedPtr(0x918885))
+#define kSpeedBoostToCtr ((uint16*)RomFixedPtr(0x91b61f))
+#define kSpeedBoostToAnimFramePtr ((uint16 *)RomFixedPtr(0x91B5DE))
+#define kSamusPoseToBaseSpritemapIndexTop ((uint16*)RomFixedPtr(0x929263))
+#define kSamusPoseToBaseSpritemapIndexBottom ((uint16*)RomFixedPtr(0x92945d))
+#define kSamusAnimationDelayData ((uint16*)RomFixedPtr(0x91b010))
+#define kCommonEnemySpeeds_Linear ((uint16*)RomFixedPtr(0xa28187))
+#define kCommonEnemySpeeds_Quadratic ((uint16*)RomFixedPtr(0xa2838f))
+#define kSine16bit ((uint16*)RomFixedPtr(0xa0b1c3))
+#define kOamExtra_X8Small_And_Large ((uint16*)RomFixedPtr(0x81839f))
+#define kOamExtra_Address_And_X8Large ((uint16*)RomFixedPtr(0x81859f))
+#define kTanTable ((uint16*)RomFixedPtr(0x91c9d4))
void CallEnemyAi(uint32 ea);
void CallEnemyPreInstr(uint32 ea);
-uint16 CallEnemyInstr(uint32 ea, uint16 k, uint16 j);
+const uint16 *CallEnemyInstr(uint32 ea, uint16 k, const uint16 *jp);
void CalculateBlockContainingPixelPos(uint16 xpos, uint16 ypos);
@@ -460,4 +423,3 @@ typedef enum SnesRegs {
UNUSED7 = 0x437B,
MIRR7 = 0x437F,
} SnesRegs;
-
diff --git a/src/types.h b/src/types.h
index dc05f79..f186a29 100644
--- a/src/types.h
+++ b/src/types.h
@@ -143,6 +143,10 @@ typedef struct Point16U {
#define HIBYTE(x) BYTEn(x,HIGH_IND(x,uint8))
#define HIWORD(x) WORDn(x,HIGH_IND(x,uint16))
+#define GET_HIBYTE(x) (((x) & 0xff00) >> 8)
+
+#define PAIR16(high, low) ((uint16)((high) << 8) | (uint8)low)
+
// Generate a pair of operands.
#define __PAIR32__(high, low) (((uint32) (high) << 16) | (uint16)(low))
diff --git a/src/variables.h b/src/variables.h
index 7d0d2f7..15bd728 100644
--- a/src/variables.h
+++ b/src/variables.h
@@ -4,11 +4,16 @@
extern uint8 g_ram[0x20000];
+
+// Aliasing
+// This is used in some R18:R20 places to multiply by 256
+#define R19_ (*(uint16*)(g_ram+0x13))
+
#define R0_ (*(LongPtr*)(g_ram+0x0))
#define R3_ (*(LongPtr*)(g_ram+0x3))
-#define R6_ (*(uint16*)(g_ram+0x6))
-#define R8_ (*(uint16*)(g_ram+0x8))
-#define R10_ (*(uint16*)(g_ram+0xA))
+#define R6_ (*(LongPtr*)(g_ram+0x6))
+#define R9_ (*(LongPtr*)(g_ram+0x9))
+
#define R12_ (*(uint16*)(g_ram+0xC))
#define R14_ (*(uint16*)(g_ram+0xE))
#define R16_ (*(uint16*)(g_ram+0x10))
@@ -18,8 +23,8 @@ extern uint8 g_ram[0x20000];
#define R24_ (*(uint16*)(g_ram+0x18))
#define R26_ (*(uint16*)(g_ram+0x1A))
#define R28_ (*(uint16*)(g_ram+0x1C))
-#define g_word_7E001E (*(uint16*)(g_ram+0x1E))
-#define R32 (*(uint16*)(g_ram+0x20))
+#define R30_ (*(uint16*)(g_ram+0x1E))
+#define R32_ (*(uint16*)(g_ram+0x20))
#define R34 (*(uint16*)(g_ram+0x22))
#define R36 (*(uint16*)(g_ram+0x24))
#define R38 (*(uint16*)(g_ram+0x26))
@@ -35,12 +40,12 @@ extern uint8 g_ram[0x20000];
#define g_byte_7E003A (*(uint8*)(g_ram+0x3A))
#define nmicopy1_var_d (*(uint16*)(g_ram+0x3C))
#define g_word_7E003E (*(uint16*)(g_ram+0x3E))
-#define decompress_dst_tmp (*(LongPtr*)(g_ram+0x44))
-#define decompress_src (*(LongPtr*)(g_ram+0x47))
-#define decompress_last_byte (*(uint8*)(g_ram+0x4A))
-#define decompress_tmp1 (*(uint8*)(g_ram+0x4B))
-#define decompress_dst (*(LongPtr*)(g_ram+0x4C))
-#define decompress_want_xor (*(uint16*)(g_ram+0x4F))
+#define REMOVED_decompress_dst_tmp (*(LongPtr*)(g_ram+0x44))
+#define REMOVED_decompress_src (*(LongPtr*)(g_ram+0x47))
+#define REMOVED_decompress_last_byte (*(uint8*)(g_ram+0x4A))
+#define REMOVED_decompress_tmp1 (*(uint8*)(g_ram+0x4B))
+#define REMOVED_decompress_dst (*(LongPtr*)(g_ram+0x4C))
+#define REMOVED_decompress_want_xor (*(uint16*)(g_ram+0x4F))
#define reg_INIDISP (*(uint8*)(g_ram+0x51))
#define reg_OBSEL (*(uint8*)(g_ram+0x52))
#define reg_OAMaddr_UNUSED (*(uint16*)(g_ram+0x53))
@@ -518,6 +523,13 @@ extern uint8 g_ram[0x20000];
#define demo_input (*(uint16*)(g_ram+0xA84))
#define demo_input_new (*(uint16*)(g_ram+0xA86))
#define demo_enable (*(uint16*)(g_ram+0xA88))
+
+// These are aliased
+#define hdma_ptr_1 (*(LongPtr*)(g_ram+0xA88))
+#define hdma_ptr_2 (*(LongPtr*)(g_ram+0xA8B))
+#define hdma_ptr_3 (*(LongPtr*)(g_ram+0xA8E))
+#define hdma_var_1 (*(uint16*)(g_ram+0xA91))
+
#define demo_num_input_frames (*(uint16*)(g_ram+0xA8A))
#define demo_input_prev (*(uint16*)(g_ram+0xA8C))
#define demo_input_prev_new (*(uint16*)(g_ram+0xA8E))
@@ -717,8 +729,8 @@ extern uint8 g_ram[0x20000];
#define samus_collides_with_solid_enemy (*(uint16*)(g_ram+0xDCE))
#define samus_collision_flag (*(uint16*)(g_ram+0xDD0))
#define temp_collision_DD2 (*(uint16*)(g_ram+0xDD2))
-#define temp_collision_DD4 (*(uint16*)(g_ram+0xDD4))
-#define temp_collision_DD6 (*(uint16*)(g_ram+0xDD6))
+#define REMOVED_temp_collision_DD4 (*(uint16*)(g_ram+0xDD4))
+#define REMOVED_temp_collision_DD6 (*(uint16*)(g_ram+0xDD6))
#define suit_pickup_light_beam_widening_speed (*(uint16*)(g_ram+0xDDC))
#define projectile_index (*(uint16*)(g_ram+0xDDE))
#define debug_invincibility (*(uint16*)(g_ram+0xDE0))
@@ -805,7 +817,7 @@ extern uint8 g_ram[0x20000];
#define active_enemy_indexes_write_ptr (*(uint16*)(g_ram+0x17A4))
#define interactive_enemy_indexes_write_ptr (*(uint16*)(g_ram+0x17A6))
#define active_enemy_indexes_index (*(uint16*)(g_ram+0x17A8))
-#define interactive_enemy_indexes_index (*(uint16*)(g_ram+0x17AA))
+#define REMOVED_interactive_enemy_indexes_index (*(uint16*)(g_ram+0x17AA))
#define active_enemy_indexes ((uint16*)(g_ram+0x17AC))
#define interactive_enemy_indexes ((uint16*)(g_ram+0x17EC))
#define enemy_index_colliding_dirs ((uint16*)(g_ram+0x182C))