From b10285db38887b5a3b2a79f55b8e37ac5bfea34b Mon Sep 17 00:00:00 2001 From: Snesrev Date: Mon, 3 Apr 2023 22:27:20 +0200 Subject: [PATCH] Remove lots of __CFADD__uint16 --- src/funcs.h | 2 +- src/sm_86.c | 10 +- src/sm_88.c | 55 +++----- src/sm_8b.c | 335 +++++++++++++-------------------------------- src/sm_90.c | 264 +++++++++-------------------------- src/sm_a0.c | 55 ++------ src/sm_a2.c | 249 ++++++++------------------------- src/sm_a3.c | 144 +++++-------------- src/sm_a4.c | 55 +++----- src/sm_a5.c | 139 +++++-------------- src/sm_a6.c | 29 +--- src/sm_a7.c | 169 +++++++---------------- src/sm_a8.c | 334 ++++++++++---------------------------------- src/sm_b3.c | 124 +++-------------- src/sm_cpu_infra.c | 20 +++ src/snes/cpu.c | 3 +- 16 files changed, 499 insertions(+), 1488 deletions(-) diff --git a/src/funcs.h b/src/funcs.h index 2d38c3c..ddbffd6 100644 --- a/src/funcs.h +++ b/src/funcs.h @@ -1252,7 +1252,7 @@ int32 Samus_CalcDisplacementMoveLeft(int32 amt); int32 Samus_CalcDisplacementMoveRight(int32 amt); void Samus_CalcDistanceMoved_X(void); void Samus_CalcDistanceMoved_Y(void); -int32 Samus_CalcSpeed_X(int32 amt); +uint32 Samus_CalcSpeed_X(uint32 amt); void Samus_CalcSpritemapPos_Default_(void); void Samus_CallInputHandler(void); void Samus_CheckStartFalling(void); diff --git a/src/sm_86.c b/src/sm_86.c index beb5e38..5695cae 100644 --- a/src/sm_86.c +++ b/src/sm_86.c @@ -1090,13 +1090,9 @@ void EprojPreInstr_CrocomireSpikeWallPieces(uint16 k) { v4 |= __CFADD__uint8(*((uint8 *)enemy_projectile_x_pos + k), v8); *((uint8 *)enemy_projectile_x_pos + k) += v8; *((uint8 *)enemy_projectile_x_pos + k + 1) += v4; - uint16 v10 = enemy_projectile_F[v1]; - enemy_projectile_F[v1] = v10 + 12288; - enemy_projectile_y_vel[v1] += __CFADD__uint16(v10, 12288); - uint16 v11 = enemy_projectile_y_subpos[v1]; - v4 = __CFADD__uint16(enemy_projectile_F[v1], v11); - enemy_projectile_y_subpos[v1] = enemy_projectile_F[v1] + v11; - enemy_projectile_y_pos[v1] += enemy_projectile_y_vel[v1] + v4; + AddToHiLo(&enemy_projectile_y_vel[v1], &enemy_projectile_F[v1], 0x3000); + AddToHiLo(&enemy_projectile_y_pos[v1], &enemy_projectile_y_subpos[v1], __PAIR32__(enemy_projectile_y_vel[v1], enemy_projectile_F[v1])); + if (enemy_projectile_y_pos[v1] >= 0xA8) { enemy_projectile_id[v1] = 0; if ((k & 2) == 0) diff --git a/src/sm_88.c b/src/sm_88.c index 81a612d..73f2dcf 100644 --- a/src/sm_88.c +++ b/src/sm_88.c @@ -658,16 +658,9 @@ void HdmaobjPreInstr_XrayFunc0_NoBeam(uint16 k) { // 0x888732 } void HdmaobjPreInstr_XrayFunc1_BeamWidening(uint16 k) { // 0x888754 - uint32 v1; // kr00_4 - if ((button_config_run_b & joypad1_lastkeys) != 0) { - v1 = __PAIR32__(demo_input_instr_timer, demo_input_instr_ptr) + 2048; - demo_input_instr_timer = v1 >> 16; - demo_input_instr_ptr = v1; - - bool v2 = __CFADD__uint16((uint16)v1, demo_input_new); - demo_input_new += v1; - demo_input += demo_input_instr_timer + v2; + AddToHiLo(&demo_input_instr_timer, &demo_input_instr_ptr, 2048); + AddToHiLo(&demo_input, &demo_input_new, __PAIR32__(demo_input_instr_timer, demo_input_instr_ptr)); if (!sign16(demo_input - 11)) { demo_input_new = 0; demo_input = 10; @@ -1194,7 +1187,7 @@ void HdmaobjPreInstr_PowerBombExplode_ExplosionWhite(uint16 k) { // 0x888EB2 hdma_object_timers[v3] = 0; hdma_object_D[v3] = 32; } - if (!__CFADD__uint16(power_bomb_pre_explosion_radius_speed, power_bomb_explosion_radius)) { + if (power_bomb_pre_explosion_radius_speed + power_bomb_explosion_radius < 0x10000) { power_bomb_explosion_radius += power_bomb_pre_explosion_radius_speed; power_bomb_pre_explosion_radius_speed += kPowerBombExplosionRadiusAccel; } @@ -1280,7 +1273,7 @@ void HdmaobjPreInstr_PowerBombExplode_PreExplosionYellow(uint16 k) { // 0x8891A hdma_object_instruction_list_pointers[k >> 1] += 2; hdma_object_timers[k >> 1] = 0; } - if (!__CFADD__uint16(power_bomb_pre_explosion_radius_speed, power_bomb_pre_explosion_flash_radius)) { + if (power_bomb_pre_explosion_radius_speed + power_bomb_pre_explosion_flash_radius < 0x10000) { power_bomb_pre_explosion_flash_radius += power_bomb_pre_explosion_radius_speed; power_bomb_pre_explosion_radius_speed -= kPowerBombPreExplosionRadiusAccel; } @@ -1658,11 +1651,9 @@ void HdmaobjPreInstr_SkyLandBG2XscrollInner(uint16 k) { // 0x88ADC2 reg_BG2SC = 74; uint16 v1 = 0; do { - uint16 scroll_subspeed = kHdmaScrollEntrys[v1].scroll_subspeed; - uint8 *v3 = &g_ram[kHdmaScrollEntrys[v1].hdma_data_table_entry]; - bool v4 = __CFADD__uint16(GET_WORD(v3), scroll_subspeed); - *(uint16 *)v3 += scroll_subspeed; - *((uint16 *)v3 + 1) += v4 + kHdmaScrollEntrys[v1++].scroll_speed; + uint16 *v3 = (uint16 *)&g_ram[kHdmaScrollEntrys[v1].hdma_data_table_entry]; + AddToHiLo(&v3[1], &v3[0], __PAIR32__(kHdmaScrollEntrys[v1].scroll_speed, kHdmaScrollEntrys[v1].scroll_subspeed)); + v1++; } while (sign16(v1 * 8 - 184)); scrolling_sky_bg2_hdma_data[44] = 0; scrolling_sky_bg2_hdma_data[45] = 0; @@ -2406,25 +2397,19 @@ void HdmaobjPreInstr_DC23(uint16 k) { // 0x88DC23 } void HdmaobjPreInstr_DC69(uint16 k) { // 0x88DC69 - uint16 v0 = k; - HandleEarthquakeSoundEffect(); earthquake_type = 13; earthquake_timer |= 0x20; if (!time_is_frozen_flag) { - int v1 = (uint8)v0 >> 1; - uint16 v2 = hdma_object_A[v1]; - hdma_object_A[v1] = v2 - 0x4000; - uint16 v3 = __CFADD__uint16(v2, -16384) + hdma_object_B[v1] - 1; - hdma_object_B[v1] = v3; - if (v3 == 0xFF10) { + int v1 = k >> 1; + AddToHiLo(&hdma_object_B[v1], &hdma_object_A[v1], -0x4000); + if (hdma_object_B[v1] == 0xFF10) { SpawnHardcodedPlm((SpawnHardcodedPlmArgs) { 0x06, 0x0c, 0xb773 }); SetEventHappened(0xA); - int v4 = (uint8)v0 >> 1; - hdma_object_instruction_timers[v4] = 1; - hdma_object_instruction_list_pointers[v4] += 2; + hdma_object_instruction_timers[v1] = 1; + hdma_object_instruction_list_pointers[v1] += 2; } - sub_88DBCB(v0); + sub_88DBCB(k); } } @@ -3095,18 +3080,12 @@ void sub_88E987(uint16 v0) { // 0x88E987 } void HdmaobjPreInstr_E9E6(uint16 k) { // 0x88E9E6 - unsigned int v1; // kr00_4 + int v2 = k >> 1; fx_layer_blending_config_c = 16; - v1 = __PAIR32__(g_word_7E9080, g_word_7E9082) + 0x4000; - g_word_7E9080 = (__PAIR32__(g_word_7E9080, g_word_7E9082) + 0x4000) >> 16; - g_word_7E9082 = v1; - int v2 = k >> 1; - uint16 v3 = hdma_object_D[v2]; - hdma_object_D[v2] = v1 + v3; - uint16 v4 = g_word_7E9080 + __CFADD__uint16((uint16)v1, v3) + hdma_object_C[v2]; - hdma_object_C[v2] = v4; - if (!sign16(v4 - 4)) { + AddToHiLo(&g_word_7E9080, &g_word_7E9082, 0x4000); + AddToHiLo(&hdma_object_C[v2], &hdma_object_D[v2], __PAIR32__(g_word_7E9080, g_word_7E9082)); + if (!sign16(hdma_object_C[v2] - 4)) { hdma_object_C[v2] = 4; int v5 = hdma_object_index >> 1; hdma_object_instruction_list_pointers[v5] += 2; diff --git a/src/sm_8b.c b/src/sm_8b.c index 5de585f..eb0f87b 100644 --- a/src/sm_8b.c +++ b/src/sm_8b.c @@ -2392,22 +2392,14 @@ static const uint16 kSetSomeStuffForSpriteObject_7_Tab1[82] = { // 0x8BA994 2, 0xc000, 2, 0xe000, 0x9dad, 0x991b, 0x1b7d,0x97ad, 0x991a, 0x1a7d, }; void SetSomeStuffForSpriteObject_7(uint16 k) { - int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - int v3 = (uint16)(4 * LOBYTE(cinematicspr_goto_timer[v1])) >> 1; + int v3 = 2 * LOBYTE(cinematicspr_goto_timer[v1]); assert(v3 + 1 < 12); - bool v4 = __CFADD__uint16(kSetSomeStuffForSpriteObject_7_Tab0[v3 + 1], v2); - cinematicspr_arr6[v1] = kSetSomeStuffForSpriteObject_7_Tab0[v3 + 1] + v2; - cinematicbg_arr7[v1] += kSetSomeStuffForSpriteObject_7_Tab0[v3] + v4; - uint16 v5 = cinematicspr_arr7[v1]; - int v6 = (uint16)(4 * HIBYTE(cinematicspr_goto_timer[v1])) >> 1; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], __PAIR32__(kSetSomeStuffForSpriteObject_7_Tab0[v3], kSetSomeStuffForSpriteObject_7_Tab0[v3 + 1])); + int v6 = 2 * HIBYTE(cinematicspr_goto_timer[v1]); assert(v6 + 1 < 82); - v4 = __CFADD__uint16(kSetSomeStuffForSpriteObject_7_Tab1[v6 + 1], v5); - cinematicspr_arr7[v1] = kSetSomeStuffForSpriteObject_7_Tab1[v6 + 1] + v5; - uint16 v7 = kSetSomeStuffForSpriteObject_7_Tab1[v6] + v4 + cinematicbg_arr8[v1]; - cinematicbg_arr8[v1] = v7; - if (sign16(v7 - 168)) { + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], __PAIR32__(kSetSomeStuffForSpriteObject_7_Tab1[v6], kSetSomeStuffForSpriteObject_7_Tab1[v6 + 1])); + if (sign16(cinematicbg_arr8[v1] - 168)) { cinematicspr_goto_timer[v1] += 256; } else { cinematicspr_instr_timer[v1] = 1; @@ -2453,47 +2445,26 @@ static const int16 kSetSomeStuffForSpriteObject_9_Tab1[138] = { }; void SetSomeStuffForSpriteObject_9(uint16 k) { - int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - int v3 = (uint16)(4 * LOBYTE(cinematicspr_goto_timer[v1])) >> 1; + int v3 = 2 * LOBYTE(cinematicspr_goto_timer[v1]); assert(v3 + 1 < 10); - bool v4 = __CFADD__uint16(kSetSomeStuffForSpriteObject_9_Tab0[v3 + 1], v2); - cinematicspr_arr6[v1] = kSetSomeStuffForSpriteObject_9_Tab0[v3 + 1] + v2; - cinematicbg_arr7[v1] += kSetSomeStuffForSpriteObject_9_Tab0[v3] + v4; - uint16 v5 = cinematicspr_goto_timer[v1]; - if ((v5 & 1) != 0) { - uint16 v10, v11; - v10 = 4 * HIBYTE(v5); - v11 = cinematicspr_arr7[v1]; - int v12; - v12 = v10 >> 1; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], __PAIR32__(kSetSomeStuffForSpriteObject_9_Tab0[v3], kSetSomeStuffForSpriteObject_9_Tab0[v3 + 1])); + if ((cinematicspr_goto_timer[v1] & 1) != 0) { + int v12 = 2 * HIBYTE(cinematicspr_goto_timer[v1]); assert(v12 + 1 < 124); - v4 = __CFADD__uint16(kSetSomeStuffForSpriteObject_9_Tab2[v12 + 1], v11); - cinematicspr_arr7[v1] = kSetSomeStuffForSpriteObject_9_Tab2[v12 + 1] + v11; - uint16 v13; - v13 = kSetSomeStuffForSpriteObject_9_Tab2[v12] + v4 + cinematicbg_arr8[v1]; - cinematicbg_arr8[v1] = v13; - if (!sign16(v13 - 168)) { -LABEL_5: - cinematicspr_instr_timer[v1] = 1; - cinematicspr_instr_ptr[v1] = addr_word_8BCD71; - cinematicspr_preinstr_func[v1] = FUNC16(CinematicFunction_nullsub_116); - return; - } + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], __PAIR32__(kSetSomeStuffForSpriteObject_9_Tab2[v12], kSetSomeStuffForSpriteObject_9_Tab2[v12 + 1])); } else { - uint16 v6 = 4 * HIBYTE(v5); - uint16 v7 = cinematicspr_arr7[v1]; - int v8 = v6 >> 1; - assert(v8 + 1 < 138); - v4 = __CFADD__uint16(kSetSomeStuffForSpriteObject_9_Tab1[v8 + 1], v7); - cinematicspr_arr7[v1] = kSetSomeStuffForSpriteObject_9_Tab1[v8 + 1] + v7; - uint16 v9 = kSetSomeStuffForSpriteObject_9_Tab1[v8] + v4 + cinematicbg_arr8[v1]; - cinematicbg_arr8[v1] = v9; - if (!sign16(v9 - 168)) - goto LABEL_5; + int v6 = 2 * HIBYTE(cinematicspr_goto_timer[v1]); + assert(v6 + 1 < 138); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], __PAIR32__(kSetSomeStuffForSpriteObject_9_Tab1[v6], kSetSomeStuffForSpriteObject_9_Tab1[v6 + 1])); + } + if (!sign16(cinematicbg_arr8[v1] - 168)) { + cinematicspr_instr_timer[v1] = 1; + cinematicspr_instr_ptr[v1] = addr_word_8BCD71; + cinematicspr_preinstr_func[v1] = FUNC16(CinematicFunction_nullsub_116); + } else { + cinematicspr_goto_timer[v1] += 256; } - cinematicspr_goto_timer[v1] += 256; } void SetSomeStuffForSpriteObject_10(uint16 j) { // 0x8BAD55 @@ -3340,12 +3311,8 @@ uint16 CinematicSprInstr_Func43(uint16 k, uint16 j) { // 0x8BB8C5 void CinematicFunction_Intro_Func44(uint16 k) { // 0x8BB8D8 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v2 + 0x8000; - cinematicbg_arr7[v1] += __CFADD__uint16(v2, 0x8000); - uint16 v3 = cinematicspr_arr7[v1]; - cinematicspr_arr7[v1] = v3 + 0x8000; - cinematicbg_arr8[v1] += __CFADD__uint16(v3, 0x8000); + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], 0x8000); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], 0x8000); if (sign16(cinematicbg_arr7[v1] + 8 - (samus_x_pos - 5))) { if (cinematicspr_preinstr_func[0] != FUNC16(CinematicFunction_Intro_Func39)) return; @@ -3361,17 +3328,10 @@ void CinematicFunction_Intro_Func44(uint16 k) { // 0x8BB8D8 static const uint16 kCinematicFunction_Intro_Func45_Tab0[4] = { 0, 0xffff, 0, 0xffff }; void CinematicFunction_Intro_Func45(uint16 k) { // 0x8BB93B int v1 = k >> 1; - uint16 v2 = 2 * cinematicspr_goto_timer[v1]; - cinematicbg_arr7[v1] += kCinematicFunction_Intro_Func45_Tab0[v2 >> 1] + __CFADD__uint16(cinematicspr_arr6[v1], 0x8000); - cinematicspr_arr6[v1] += 0x8000; - - uint16 v3 = cinematicspr_arr7[v1]; - cinematicspr_arr7[v1] = v3 + 0x8000; - uint16 v4 = __CFADD__uint16(v3, 0x8000) + cinematicbg_arr8[v1]; - cinematicbg_arr8[v1] = v4; - if (sign16(v4 - 16) - || !sign16(v4 - 208) - || cinematicspr_preinstr_func[0] == FUNC16(CinematicFunction_Intro_Func39)) { + int v2 = cinematicspr_goto_timer[v1]; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], __PAIR32__(kCinematicFunction_Intro_Func45_Tab0[v2], 0x8000)); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], 0x8000); + if (sign16(cinematicbg_arr8[v1] - 16) || !sign16(cinematicbg_arr8[v1] - 208) || cinematicspr_preinstr_func[0] == FUNC16(CinematicFunction_Intro_Func39)) { cinematicspr_instr_timer[v1] = 1; cinematicspr_instr_ptr[v1] = addr_off_8BCE53; } @@ -3454,12 +3414,7 @@ void CinematicFunction_Intro_Func51(uint16 k) { // 0x8BBA73 } else if (sign16(cinematic_var17 - 544)) { cinematic_var17 += 32; } - uint16 r20 = cinematic_var17 << 8; - uint16 r18 = (int8)(cinematic_var17 >> 8); - uint16 v4 = cinematicspr_arr7[v1]; - bool v5 = __CFADD__uint16(r20, v4); - cinematicspr_arr7[v1] = r20 + v4; - cinematicbg_arr8[v1] += r18 + v5; + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], INT16_SHL8(cinematic_var17)); if ((cinematic_var17 & 0x8000) == 0) { cinematic_var14 = 128; cinematicspr_preinstr_func[v1] = FUNC16(CinematicFunction_Intro_Func52); @@ -3478,46 +3433,32 @@ void CinematicFunction_Intro_Func52(uint16 k) { // 0x8BBB0D } void CinematicFunction_Intro_Func53(uint16 k) { // 0x8BBB24 + int kh = k >> 1; if (cinematic_var13) { - int v2 = k >> 1; - if (sign16(cinematicspr_goto_timer[v2] - 128)) { - uint16 v3 = cinematicspr_goto_timer[v2] + 1; - cinematicspr_goto_timer[v2] = v3; + if (sign16(cinematicspr_goto_timer[kh] - 128)) { + uint16 v3 = cinematicspr_goto_timer[kh] + 1; + cinematicspr_goto_timer[kh] = v3; if ((v3 & 0x3F) == 0) QueueSfx3_Max6(0x23); } - if ((int16)(samus_x_pos - cinematicbg_arr7[v2]) < 0) { + if ((int16)(samus_x_pos - cinematicbg_arr7[kh]) < 0) { if (!sign16(cinematic_var14 + 639)) cinematic_var14 -= 32; } else if (sign16(cinematic_var14 - 640)) { cinematic_var14 += 32; } - uint16 r20 = cinematic_var14 << 8; - uint16 r18 = (int8)GET_HIBYTE(cinematic_var14); - if (!sign16(r18)) - cinematic_var15 = -1; - else - cinematic_var15 = 1; - uint16 v6 = cinematicspr_arr6[v2]; - bool v7 = __CFADD__uint16(r20, v6); - cinematicspr_arr6[v2] = r20 + v6; - cinematicbg_arr7[v2] += r18 + v7; - if ((int16)(samus_y_pos - 8 - cinematicbg_arr8[v2]) < 0) { + cinematic_var15 = sign16(cinematic_var14) ? 1 : -1; + AddToHiLo(&cinematicbg_arr7[kh], &cinematicspr_arr6[kh], INT16_SHL8(cinematic_var14)); + if ((int16)(samus_y_pos - 8 - cinematicbg_arr8[kh]) < 0) { if (!sign16(cinematic_var17 + 543)) cinematic_var17 -= 32; } else if (sign16(cinematic_var17 - 544)) { cinematic_var17 += 32; } - 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; - cinematicbg_arr8[v2] += r18 + v7; + AddToHiLo(&cinematicbg_arr8[kh], &cinematicspr_arr7[kh], INT16_SHL8(cinematic_var17)); } else { - int v1 = k >> 1; - cinematicspr_instr_timer[v1] = 1; - cinematicspr_instr_ptr[v1] = addr_off_8BCE53; + cinematicspr_instr_timer[kh] = 1; + cinematicspr_instr_ptr[kh] = addr_off_8BCE53; cinematic_var15 = 0; } } @@ -3667,29 +3608,14 @@ void CinematicFunction_Intro_Func57(uint16 j) { // 0x8BBE7E } void CinematicFunction_Intro_Func58(uint16 k) { // 0x8BBEB5 - unsigned int v8; // kr08_4 - unsigned int v9; // kr0C_4 - if (cinematic_function == FUNC16(CinematicFunction_Intro_Func56)) { int v1 = k >> 1; - uint16 v2 = cinematicspr_goto_timer[v1] + 128; - cinematicspr_goto_timer[v1] = v2; - uint16 r20 = (v2 & 0xff) << 8; - uint16 r18 = (int8)(v2 >> 8); - uint16 v5 = cinematicspr_arr7[v1]; - bool v6 = __CFADD__uint16(r20, v5); - cinematicspr_arr7[v1] = r20 + v5; - cinematicbg_arr8[v1] += r18 + v6; - uint16 v7 = cinematicspr_arr6[v1]; - v6 = __CFADD__uint16(r20, v7); - cinematicspr_arr6[v1] = r20 + v7; - cinematicbg_arr7[v1] += r18 + v6; - v8 = __PAIR32__(r18, r20) + __PAIR32__(cinematic_var8, cinematic_var7); - cinematic_var8 = HIWORD(v8); - cinematic_var7 = v8; - v9 = __PAIR32__(r18, r20) + __PAIR32__(cinematic_var10, cinematic_var9); - cinematic_var10 = HIWORD(v9); - cinematic_var9 = v9; + cinematicspr_goto_timer[v1] += 128; + int32 d = INT16_SHL8(cinematicspr_goto_timer[v1]); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], d); + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], d); + AddToHiLo(&cinematic_var8, &cinematic_var7, d); + AddToHiLo(&cinematic_var10, &cinematic_var9, d); } } @@ -3702,9 +3628,8 @@ void CinematicFunction_Intro_Func59(uint16 j) { // 0x8BBF22 void CinematicFunction_Intro_Func60(uint16 k) { // 0x8BBF35 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v2 + 0x4000; - cinematicbg_arr7[v1] = (__CFADD__uint16(v2, 0x4000) + cinematicbg_arr7[v1]) & 0x1FF; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], 0x4000); + cinematicbg_arr7[v1] &= 0x1ff; } void CinematicFunction_Intro_Func61(uint16 j) { // 0x8BBF4C @@ -3716,9 +3641,8 @@ void CinematicFunction_Intro_Func61(uint16 j) { // 0x8BBF4C void CinematicFunction_Intro_Func62(uint16 k) { // 0x8BBF5F int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v2 + 4096; - cinematicbg_arr7[v1] = (__CFADD__uint16(v2, 4096) + cinematicbg_arr7[v1]) & 0x1FF; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], 4096); + cinematicbg_arr7[v1] &= 0x1ff; } void CinematicFunction_Intro_Func63(uint16 j) { // 0x8BBF76 @@ -3730,9 +3654,8 @@ void CinematicFunction_Intro_Func63(uint16 j) { // 0x8BBF76 void CinematicFunction_Intro_Func64(uint16 k) { // 0x8BBF89 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v2 + 2048; - cinematicbg_arr7[v1] = (__CFADD__uint16(v2, 2048) + cinematicbg_arr7[v1]) & 0x1FF; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], 2048); + cinematicbg_arr7[v1] &= 0x1ff; } void CinematicFunction_Intro_Func65(uint16 j) { // 0x8BBFA0 @@ -3750,23 +3673,17 @@ void CinematicFunction_Intro_Func65(uint16 j) { // 0x8BBFA0 void CinematicFunction_Intro_Func66(uint16 k) { // 0x8BBFC6 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v2 - 0x2000; - cinematicbg_arr7[v1] = (__PAIR32__(cinematicbg_arr7[v1], v2) - 0x2000) >> 16; + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], -0x2000); } void CinematicFunction_Intro_Func67(void) { // 0x8BBFDA - unsigned int v0; // kr00_4 - if (sign8(--reg_COLDATA[0] - 32)) reg_COLDATA[0] = 32; if (sign8(--reg_COLDATA[1] - 64)) reg_COLDATA[1] = 64; if (sign8(--reg_COLDATA[2] + 0x80)) reg_COLDATA[2] = 0x80; - v0 = __PAIR32__(cinematic_var8, cinematic_var7) - 0x2000; - cinematic_var8 = HIWORD(v0); - cinematic_var7 = v0; + AddToHiLo(&cinematic_var8, &cinematic_var7, -0x2000); if (sign16(cinematic_var6 - 3072)) { cinematic_var6 += 16; } else if (sign16(cinematic_var6 - 0x2000)) { @@ -3937,12 +3854,8 @@ void CinematicFunction_Intro_Func74(void) { // 0x8BC2E4 } void CinematicFunction_Intro_Func75(void) { // 0x8BC2F1 - uint16 v0 = (__PAIR32__(cinematic_var10, cinematic_var9) + 4096) >> 16; - cinematic_var9 += 4096; - cinematic_var10 = v0; - uint16 v1 = (__PAIR32__(cinematic_var8, cinematic_var7) - 0x4000) >> 16; - cinematic_var7 -= 0x4000; - cinematic_var8 = v1; + AddToHiLo(&cinematic_var10, &cinematic_var9, 4096); + AddToHiLo(&cinematic_var8, &cinematic_var7, -0x4000); ++cinematic_var6; HandleFadeIn(); if (reg_INIDISP == 15) { @@ -3955,12 +3868,8 @@ void CinematicFunction_Intro_Func75(void) { // 0x8BC2F1 } void CinematicFunction_Intro_Func76(void) { // 0x8BC345 - uint16 v0 = (__PAIR32__(cinematic_var10, cinematic_var9) + 4096) >> 16; - cinematic_var9 += 4096; - cinematic_var10 = v0; - uint16 v1 = (__PAIR32__(cinematic_var8, cinematic_var7) - 0x4000) >> 16; - cinematic_var7 -= 0x4000; - cinematic_var8 = v1; + AddToHiLo(&cinematic_var10, &cinematic_var9, 4096); + AddToHiLo(&cinematic_var8, &cinematic_var7, -0x4000); if (sign16(cinematic_var6 - 640)) { ++cinematic_var6; } else { @@ -3989,9 +3898,11 @@ uint16 CinematicSprInstr_SpawnCeresExplosions1(uint16 k, uint16 j) { // 0x8BC40 SpawnCinematicSpriteObject(addr_kCinematicSpriteObjectDef_8BCEBB, 4); return j; } + static const uint16 kCinematicFunction_Intro_Func78_Tab0[5] = { 1, 16, 32, 48, 64 }; static const int16 kCinematicFunction_Intro_Func78_Tab1[5] = { 16, -16, 16, -16, 0 }; static const int16 kCinematicFunction_Intro_Func78_Tab2[5] = { -16, 16, 16, -16, 0 }; + void CinematicFunction_Intro_Func78(uint16 j) { // 0x8BC434 uint16 v1 = cinematic_spawn_param; int v2 = j >> 1; @@ -4015,16 +3926,20 @@ void CinematicSprPreInstr_C489(uint16 k) { // 0x8BC489 } } } + static const int16 g_word_8BC4EB[16] = { // 0x8BC4B9 14, -8, 8, 12, -16, 12, -8, -14, 0, 0, 16, 14, -12, 4, -8, -16, }; -void CinematicFunction_Intro_Func80(uint16 j) { +static const int16 kCinematicFunction_Intro_Func81_Tab0[4] = { 1, 4, 8, 16 }; +static const int16 kCinematicFunction_Intro_Func81_Tab1[4] = { 8, 12, -8, -12 }; +static const int16 kCinematicFunction_Intro_Func81_Tab2[4] = { -4, 8, -10, 12 }; +void CinematicFunction_Intro_Func80(uint16 j) { uint16 v1 = cinematic_spawn_param; int v2 = j >> 1; cinematicspr_goto_timer[v2] = cinematic_spawn_param; - int v3 = (uint16)(4 * v1) >> 1; + int v3 = 2 * v1; cinematicbg_arr7[v2] = g_word_8BC4EB[v3] + reg_M7X - cinematic_var8; cinematicbg_arr8[v2] = g_word_8BC4EB[v3 + 1] + reg_M7Y - cinematic_var10; cinematicbg_arr9[v2] = 2560; @@ -4037,28 +3952,21 @@ uint16 CinematicSprInstr_SpawnCeresExplosions3(uint16 k, uint16 j) { // 0x8BC50 SpawnCinematicSpriteObject(addr_kCinematicSpriteObjectDef_8BCEC7, 3); return j; } -static const int16 kCinematicFunction_Intro_Func81_Tab0[4] = { 1, 4, 8, 16 }; -static const int16 kCinematicFunction_Intro_Func81_Tab1[4] = { 8, 12, -8, -12 }; -static const int16 kCinematicFunction_Intro_Func81_Tab2[4] = { -4, 8, -10, 12 }; + void CinematicFunction_Intro_Func81(uint16 j) { // 0x8BC533 uint16 v1 = cinematic_spawn_param; int v2 = j >> 1; cinematicspr_goto_timer[v2] = cinematic_spawn_param; - int v3 = v1; - cinematicspr_instr_timer[v2] = kCinematicFunction_Intro_Func81_Tab0[v3]; - cinematicbg_arr7[v2] = kCinematicFunction_Intro_Func81_Tab1[v3] + reg_M7X - cinematic_var8; - cinematicbg_arr8[v2] = kCinematicFunction_Intro_Func81_Tab2[v3] + reg_M7Y - cinematic_var10; + cinematicspr_instr_timer[v2] = kCinematicFunction_Intro_Func81_Tab0[v1]; + cinematicbg_arr7[v2] = kCinematicFunction_Intro_Func81_Tab1[v1] + reg_M7X - cinematic_var8; + cinematicbg_arr8[v2] = kCinematicFunction_Intro_Func81_Tab2[v1] + reg_M7Y - cinematic_var10; cinematicbg_arr9[v2] = 2560; } void CinematicFunction_Intro_Func82(uint16 k) { // 0x8BC582 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr7[v1]; - cinematicspr_arr7[v1] = v2 - 4096; - cinematicbg_arr8[v1] = (__PAIR32__(cinematicbg_arr8[v1], v2) - 4096) >> 16; - uint16 v3 = cinematicspr_arr6[v1]; - cinematicspr_arr6[v1] = v3 + 0x4000; - cinematicbg_arr7[v1] += __CFADD__uint16(v3, 0x4000); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], -4096); + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], 0x4000); } void CinematicFunction_Intro_Func83(uint16 j) { // 0x8BC5A9 @@ -4224,16 +4132,9 @@ void CinematicFunction_Intro_Func90(uint16 k) { // 0x8BC84E void CinematicFunction_Intro_Func91(uint16 k) { // 0x8BC85D int v1 = k >> 1; - uint16 v2 = cinematicspr_goto_timer[v1] + 64; - cinematicspr_goto_timer[v1] = v2; - uint16 r20 = v2 << 8; - uint16 r18 = (uint8)(v2 >> 8); - uint16 v4 = cinematicspr_arr7[v1]; - bool v5 = v4 < r20; - cinematicspr_arr7[v1] = v4 - r20; - uint16 v6 = cinematicbg_arr8[v1] - (v5 + r18); - cinematicbg_arr8[v1] = v6; - if (sign16(v6 + 128)) { + cinematicspr_goto_timer[v1] += 64; + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], -INT16_SHL8(cinematicspr_goto_timer[v1])); + if (sign16(cinematicbg_arr8[v1] + 128)) { cinematicspr_instr_timer[v1] = 1; cinematicspr_instr_ptr[v1] = addr_off_8BCE53; } @@ -4253,16 +4154,9 @@ void CinematicFunction_Intro_Func93(uint16 k) { // 0x8BC8AA void CinematicFunction_Intro_Func94(uint16 k) { // 0x8BC8B9 int v1 = k >> 1; - uint16 v2 = cinematicspr_goto_timer[v1] + 32; - cinematicspr_goto_timer[v1] = v2; - uint16 r20 = v2 << 8; - uint16 r18 = (uint8)(v2 >> 8); - uint16 v4 = cinematicspr_arr7[v1]; - bool v5 = v4 < r20; - cinematicspr_arr7[v1] = v4 - r20; - uint16 v6 = cinematicbg_arr8[v1] - (v5 + r18); - cinematicbg_arr8[v1] = v6; - if (sign16(v6 + 128)) { + cinematicspr_goto_timer[v1] += 32; + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], -INT16_SHL8(cinematicspr_goto_timer[v1])); + if (sign16(cinematicbg_arr8[v1] + 128)) { cinematicspr_instr_timer[v1] = 1; cinematicspr_instr_ptr[v1] = addr_off_8BCE53; cinematic_function = FUNC16(CinematicFunction_Intro_Func95); @@ -4276,16 +4170,9 @@ void CinematicFunction_Intro_Func96(uint16 k) { // 0x8BC8F9 void CinematicFunction_Intro_Func97(uint16 k) { // 0x8BC908 int v1 = k >> 1; - uint16 v2 = cinematicspr_goto_timer[v1] + 32; - cinematicspr_goto_timer[v1] = v2; - uint16 r20 = v2 << 8; - uint16 r18 = (uint8)(v2 >> 8); - uint16 v4 = cinematicspr_arr7[v1]; - bool v5 = v4 < r20; - cinematicspr_arr7[v1] = v4 - r20; - uint16 v6 = cinematicbg_arr8[v1] - (v5 + r18); - cinematicbg_arr8[v1] = v6; - if (sign16(v6 + 128)) { + cinematicspr_goto_timer[v1] += 32; + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], -INT16_SHL8(cinematicspr_goto_timer[v1])); + if (sign16(cinematicbg_arr8[v1] + 128)) { cinematicspr_instr_timer[v1] = 1; cinematicspr_instr_ptr[v1] = addr_off_8BCE53; } @@ -4359,14 +4246,8 @@ void CinematicFunction_Intro_Func104(uint16 j) { // 0x8BC9E6 } void CinematicFunction_Intro_Func105(void) { // 0x8BC9F9 - unsigned int v0; // kr00_4 - - v0 = __PAIR32__(cinematic_var10, cinematic_var9) + 0x2000; - cinematic_var10 = HIWORD(v0); - cinematic_var9 = v0; - bool v1 = cinematic_var7 >= 0x8000; - cinematic_var7 += 0x8000; - cinematic_var8 -= !v1; + AddToHiLo(&cinematic_var10, &cinematic_var9, 0x2000); + AddToHiLo(&cinematic_var8, &cinematic_var7, -0x8000); if (sign16(cinematic_var6 - 1152)) cinematic_var6 += 4; else @@ -4374,14 +4255,8 @@ void CinematicFunction_Intro_Func105(void) { // 0x8BC9F9 } void CinematicFunction_Intro_Func106(void) { // 0x8BCA36 - unsigned int v0; // kr00_4 - - v0 = __PAIR32__(cinematic_var10, cinematic_var9) + 0x2000; - cinematic_var10 = HIWORD(v0); - cinematic_var9 = v0; - bool v1 = cinematic_var7 >= 0x8000; - cinematic_var7 += 0x8000; - cinematic_var8 -= !v1; + AddToHiLo(&cinematic_var10, &cinematic_var9, 0x2000); + AddToHiLo(&cinematic_var8, &cinematic_var7, -0x8000); if (sign16(cinematic_var8 + 128)) { cinematic_function = FUNC16(CinematicFunction_Intro_Func107); } else { @@ -4392,15 +4267,8 @@ void CinematicFunction_Intro_Func106(void) { // 0x8BCA36 } void CinematicFunction_Intro_Func107(void) { // 0x8BCA85 - unsigned int v0; // kr00_4 - unsigned int v1; // kr04_4 - - v0 = __PAIR32__(cinematic_var10, cinematic_var9) + 0x2000; - cinematic_var10 = HIWORD(v0); - cinematic_var9 = v0; - v1 = __PAIR32__(cinematic_var8, cinematic_var7) + 0x2000; - cinematic_var8 = HIWORD(v1); - cinematic_var7 = v1; + AddToHiLo(&cinematic_var10, &cinematic_var9, 0x2000); + AddToHiLo(&cinematic_var8, &cinematic_var7, 0x2000); if (sign16(cinematic_var6 - 0x2000)) { cinematic_var6 += 32; } else { @@ -5568,29 +5436,24 @@ void CinematicFunction_Intro_Func150(uint16 j) { // 0x8BEF99 void CinematicFunction_Intro_Func151(uint16 k) { // 0x8BEFB2 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr7[v1]; - cinematicspr_arr7[v1] = v2 + 128; - cinematicbg_arr8[v1] += __CFADD__uint16(v2, 128); + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], 128); cinematicspr_arr6[v1] = cinematicspr_arr6[v1]; - uint16 v3 = cinematicbg_arr7[v1] + 1; - cinematicbg_arr7[v1] = v3; - if (!sign16(v3 - 272)) { + if (!sign16(++cinematicbg_arr7[v1] - 272)) { cinematicspr_instr_timer[v1] = 1; cinematicspr_instr_ptr[v1] = addr_off_8BEE9B; } } void CinematicFunction_Intro_Func152(uint16 j) { // 0x8BEFEA - cinematicbg_arr7[j >> 1] = 128; int v1 = j >> 1; + cinematicbg_arr7[v1] = 128; cinematicbg_arr8[v1] = 128; cinematicbg_arr9[v1] = 3584; } void CinematicFunction_Intro_Func153(uint16 j) { // 0x8BEFFD - cinematicbg_arr7[j >> 1] = -128; - int v1 = j >> 1; + cinematicbg_arr7[v1] = -128; cinematicbg_arr8[v1] = 128; cinematicbg_arr9[v1] = 3584; } @@ -5887,13 +5750,8 @@ void CinematicSprPreInstr_F35A(uint16 k) { // 0x8BF35A void CinematicFunction_Intro_Func189(uint16 k) { // 0x8BF375 int v1 = k >> 1; - uint16 v2 = cinematicspr_arr7[v1]; - cinematicspr_arr7[v1] = v2 - 32; - cinematicspr_goto_timer[v1] = __CFADD__uint16(v2, -32) + cinematicspr_goto_timer[v1] - 1; - uint16 v3 = cinematicspr_arr6[v1]; - bool v4 = __CFADD__uint16(cinematicspr_arr7[v1], v3); - cinematicspr_arr6[v1] = cinematicspr_arr7[v1] + v3; - cinematicbg_arr7[v1] += cinematicspr_goto_timer[v1] + v4; + AddToHiLo(&cinematicspr_goto_timer[v1], &cinematicspr_arr7[v1], -32); + AddToHiLo(&cinematicbg_arr7[v1], &cinematicspr_arr6[v1], __PAIR32__(cinematicspr_goto_timer[v1], cinematicspr_arr7[v1])); CinematicFunction_Intro_Func189b(k); } @@ -6117,14 +5975,9 @@ uint16 CinematicSprInstr_Func218(uint16 k, uint16 j) { // 0x8BF651 } void CinematicFunction_Intro_Func210_EndingSamusFall(uint16 k) { // 0x8BF65B - uint16 v1 = (__PAIR32__(samus_y_speed, samus_y_subspeed) + 14336) >> 16; - samus_y_subspeed += 14336; - samus_y_speed = v1; - int v2 = k >> 1; - uint16 v3 = cinematicspr_arr7[v2]; - bool v4 = __CFADD__uint16(samus_y_subspeed, v3); - cinematicspr_arr7[v2] = samus_y_subspeed + v3; - cinematicbg_arr8[v2] += samus_y_speed + v4; + AddToHiLo(&samus_y_speed, &samus_y_subspeed, 0x3800); + int v1 = k >> 1; + AddToHiLo(&cinematicbg_arr8[v1], &cinematicspr_arr7[v1], __PAIR32__(samus_y_speed, samus_y_subspeed)); } void CinematicFunction_Intro_Func216(void) { // 0x8BF682 diff --git a/src/sm_90.c b/src/sm_90.c index 550151a..44be9a1 100644 --- a/src/sm_90.c +++ b/src/sm_90.c @@ -1460,10 +1460,8 @@ LABEL_24: goto LABEL_26; } } - bool v0; - v0 = __CFADD__uint16(kSamus_HandleExtraRunspeedX_Tab1[0], samus_x_extra_run_subspeed); - samus_x_extra_run_subspeed += kSamus_HandleExtraRunspeedX_Tab1[0]; - samus_x_extra_run_speed += kSamus_HandleExtraRunspeedX_Tab0[0] + v0; + AddToHiLo(&samus_x_extra_run_speed, &samus_x_extra_run_subspeed, + __PAIR32__(kSamus_HandleExtraRunspeedX_Tab0[0], kSamus_HandleExtraRunspeedX_Tab1[0])); LABEL_26: if ((speed_boost_counter & 0xFF00) == 1024) samus_contact_damage_index = 1; @@ -1625,76 +1623,54 @@ LABEL_11:; samus_y_dir = 1; } +static bool IsGreaterThanQuirked(uint16 vhi, uint16 vlo, uint16 cmphi, uint16 cmplo) { + if ((int16)(vhi - cmphi) >= 0) { + if (vhi != cmphi || ((int16)(vlo - cmplo) >= 0) && vlo != cmplo) + return true; + } + return false; +} + int32 Samus_CalcBaseSpeed_X(uint16 k) { // 0x909A7E SamusSpeedTableEntry *sste = get_SamusSpeedTableEntry(k); - uint16 r18, r20; - if (samus_x_accel_mode) { - if (samus_x_decel_mult) { - r20 = Mult8x8(samus_x_decel_mult, HIBYTE(sste->decel_sub)); - r18 = Mult8x8(samus_x_decel_mult, sste->decel) >> 8; - } else { - r20 = sste->decel_sub; - r18 = sste->decel; - } - int16 v8 = (__PAIR32__(samus_x_base_speed, samus_x_base_subspeed) - __PAIR32__(r18, r20)) >> 16; - samus_x_base_subspeed -= r20; - samus_x_base_speed = v8; - if (v8 < 0) { + int32 delta = samus_x_decel_mult ? + __PAIR32__(Mult8x8(samus_x_decel_mult, sste->decel) >> 8, Mult8x8(samus_x_decel_mult, HIBYTE(sste->decel_sub))) : + __PAIR32__(sste->decel, sste->decel_sub); + AddToHiLo(&samus_x_base_speed, &samus_x_base_subspeed, -delta); + if ((int16)samus_x_base_speed < 0) { samus_x_base_speed = 0; samus_x_base_subspeed = 0; samus_x_accel_mode = 0; } } else { - bool v2 = __CFADD__uint16(sste->accel_sub, samus_x_base_subspeed); - samus_x_base_subspeed += sste->accel_sub; - uint16 v3 = sste->accel + v2 + samus_x_base_speed; - samus_x_base_speed = v3; - if ((int16)(v3 - sste->max_speed) >= 0) { - if (v3 != sste->max_speed - || ((int16)(samus_x_base_subspeed - sste->max_speed_sub) >= 0) - && samus_x_base_subspeed != sste->max_speed_sub) { - samus_x_base_speed = sste->max_speed; - samus_x_base_subspeed = sste->max_speed_sub; - } + AddToHiLo(&samus_x_base_speed, &samus_x_base_subspeed, __PAIR32__(sste->accel, sste->accel_sub)); + if (IsGreaterThanQuirked(samus_x_base_speed, samus_x_base_subspeed, sste->max_speed, sste->max_speed_sub)) { + samus_x_base_speed = sste->max_speed; + samus_x_base_subspeed = sste->max_speed_sub; } } return __PAIR32__(samus_x_base_speed, samus_x_base_subspeed); } static Pair_Bool_Amt Samus_CalcBaseSpeed_NoDecel_X(uint16 k) { // 0x909B1F - uint16 r18, r20; SamusSpeedTableEntry *sste = get_SamusSpeedTableEntry(k); - if ((samus_x_accel_mode & 1) != 0) { - if (samus_x_decel_mult) { - r20 = Mult8x8(samus_x_decel_mult, HIBYTE(sste->decel_sub)); - r18 = Mult8x8(samus_x_decel_mult, sste->decel) >> 8; - } else { - r20 = sste->decel_sub; - r18 = sste->decel; - } - int16 v8 = (__PAIR32__(samus_x_base_speed, samus_x_base_subspeed) - __PAIR32__(r18, r20)) >> 16; - samus_x_base_subspeed -= r20; - samus_x_base_speed = v8; - if (v8 < 0) { + int32 delta = samus_x_decel_mult ? + __PAIR32__(Mult8x8(samus_x_decel_mult, sste->decel) >> 8, Mult8x8(samus_x_decel_mult, HIBYTE(sste->decel_sub))) : + __PAIR32__(sste->decel, sste->decel_sub); + AddToHiLo(&samus_x_base_speed, &samus_x_base_subspeed, -delta); + if ((int16)samus_x_base_speed < 0) { samus_x_base_speed = 0; samus_x_base_subspeed = 0; samus_x_accel_mode = 0; } } else { - bool v2 = __CFADD__uint16(sste->accel_sub, samus_x_base_subspeed); - samus_x_base_subspeed += sste->accel_sub; - uint16 v3 = sste->accel + v2 + samus_x_base_speed; - samus_x_base_speed = v3; - if ((int16)(v3 - sste->max_speed) >= 0) { - if (v3 != sste->max_speed - || ((int16)(samus_x_base_subspeed - sste->max_speed_sub) >= 0) - && samus_x_base_subspeed != sste->max_speed_sub) { - samus_x_base_speed = sste->max_speed; - samus_x_base_subspeed = sste->max_speed_sub; - return (Pair_Bool_Amt) { true, __PAIR32__(samus_x_base_speed, samus_x_base_subspeed) }; - } + AddToHiLo(&samus_x_base_speed, &samus_x_base_subspeed, __PAIR32__(sste->accel, sste->accel_sub)); + if (IsGreaterThanQuirked(samus_x_base_speed, samus_x_base_subspeed, sste->max_speed, sste->max_speed_sub)) { + samus_x_base_speed = sste->max_speed; + samus_x_base_subspeed = sste->max_speed_sub; + return (Pair_Bool_Amt) { true, __PAIR32__(samus_x_base_speed, samus_x_base_subspeed) }; } } return (Pair_Bool_Amt) { false, __PAIR32__(samus_x_base_speed, samus_x_base_subspeed) }; @@ -5046,66 +5022,32 @@ void ProjPreInstr_SpreadBomb(uint16 k) { // 0x90D8F7 } Bomb_Func2(); if (projectile_variables[v1]) { - uint16 v2 = projectile_timers[v1]; - bool v3 = __CFADD__uint16(samus_y_subaccel, v2); - projectile_timers[v1] = samus_y_subaccel + v2; - projectile_bomb_y_speed[v1] += samus_y_accel + v3; - uint16 v4 = projectile_bomb_y_subpos[v1]; - v3 = __CFADD__uint16(projectile_timers[v1], v4); - projectile_bomb_y_subpos[v1] = projectile_timers[v1] + v4; - projectile_y_pos[v1] += projectile_bomb_y_speed[v1] + v3; + AddToHiLo(&projectile_bomb_y_speed[v1], &projectile_timers[v1], __PAIR32__(samus_y_accel, samus_y_subaccel)); + AddToHiLo(&projectile_y_pos[v1], &projectile_bomb_y_subpos[v1], __PAIR32__(projectile_bomb_y_speed[v1], projectile_timers[v1])); if (BlockCollSpreadBomb(k) & 1) { - uint16 v5 = projectile_index - 10; - int v6 = projectile_index >> 1; - uint16 v7 = projectile_bomb_y_subpos[v6]; - v3 = v7 < projectile_timers[v6]; - projectile_bomb_y_subpos[v6] = v7 - projectile_timers[v6]; - projectile_y_pos[v6] -= v3 + projectile_bomb_y_speed[v6]; - if ((projectile_bomb_y_speed[v6] & 0x8000) != 0) { - projectile_bomb_y_speed[v6] = 0; - projectile_y_radius[v6] = 0; + AddToHiLo(&projectile_y_pos[v1], &projectile_bomb_y_subpos[v1], -(int32)__PAIR32__(projectile_bomb_y_speed[v1], projectile_timers[v1])); + if ((projectile_bomb_y_speed[v1] & 0x8000) != 0) { + projectile_bomb_y_speed[v1] = 0; + projectile_y_radius[v1] = 0; } else { - projectile_timers[v6] = kBombSpread_Tab3[v5 >> 1]; - projectile_bomb_y_speed[v6] = projectile_unk_A[v6]; + projectile_timers[v1] = kBombSpread_Tab3[v1 - 5]; + projectile_bomb_y_speed[v1] = projectile_unk_A[v1]; } return; } - k = projectile_index; - int v8 = projectile_index >> 1; - uint16 t = projectile_bomb_x_speed[v8]; - uint16 r20 = t << 8; - uint16 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; - projectile_x_pos[v8] -= v3 + r18; - } else { - uint16 v10 = projectile_bomb_x_subpos[v8]; - v3 = __CFADD__uint16(r20, v10); - projectile_bomb_x_subpos[v8] = r20 + v10; - projectile_x_pos[v8] += r18 + v3; - } + uint16 t = projectile_bomb_x_speed[v1]; + if (t & 0x8000) + AddToHiLo(&projectile_x_pos[v1], &projectile_bomb_x_subpos[v1], -INT16_SHL8(t & 0x7fff)); + else + AddToHiLo(&projectile_x_pos[v1], &projectile_bomb_x_subpos[v1], INT16_SHL8(t)); } if (BlockCollSpreadBomb(k) & 1) { - int v12 = projectile_index >> 1; - uint16 t = projectile_bomb_x_speed[v12]; - uint16 r20 = t << 8; - uint16 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; - projectile_x_pos[v12] -= v3 + r18; - } else { - 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; - projectile_x_pos[v12] += r18 + v3; - } + uint16 t = projectile_bomb_x_speed[v1]; + projectile_bomb_x_speed[v1] ^= 0x8000; + if (!(t & 0x8000)) + AddToHiLo(&projectile_x_pos[v1], &projectile_bomb_x_subpos[v1], -INT16_SHL8(t)); + else + AddToHiLo(&projectile_x_pos[v1], &projectile_bomb_x_subpos[v1], INT16_SHL8(t & 0x7fff)); } } @@ -5130,40 +5072,27 @@ void ProjPreInstr_WaveSba(uint16 k) { // 0x90DA08 SpawnProjectileTrail(k); k = projectile_index; } - int v4 = k >> 1; - if ((int16)(samus_x_pos - projectile_x_pos[v4]) < 0) { - if (!sign16(projectile_bomb_x_speed[v4] + 2047)) - projectile_bomb_x_speed[v4] -= 64; - } else if (sign16(projectile_bomb_x_speed[v4] - 2048)) { - projectile_bomb_x_speed[v4] += 64; + if ((int16)(samus_x_pos - projectile_x_pos[v1]) < 0) { + if (!sign16(projectile_bomb_x_speed[v1] + 2047)) + projectile_bomb_x_speed[v1] -= 64; + } else if (sign16(projectile_bomb_x_speed[v1] - 2048)) { + projectile_bomb_x_speed[v1] += 64; } - uint16 v5 = swap16(projectile_bomb_x_speed[v4]); - uint16 r20 = v5 & 0xFF00; - uint16 r18 = (int8)v5; - uint16 v6 = projectile_bomb_x_subpos[v4]; - bool v7 = __CFADD__uint16(r20, v6); - projectile_bomb_x_subpos[v4] = r20 + v6; - projectile_x_pos[v4] += r18 + v7; - if ((int16)(samus_y_pos - projectile_y_pos[v4]) < 0) { - if (!sign16(projectile_variables[v4] + 2047)) - projectile_variables[v4] -= 64; - } else if (sign16(projectile_variables[v4] - 2048)) { - projectile_variables[v4] += 64; + AddToHiLo(&projectile_x_pos[v1], &projectile_bomb_x_subpos[v1], INT16_SHL8(projectile_bomb_x_speed[v1])); + + if ((int16)(samus_y_pos - projectile_y_pos[v1]) < 0) { + if (!sign16(projectile_variables[v1] + 2047)) + projectile_variables[v1] -= 64; + } else if (sign16(projectile_variables[v1] - 2048)) { + projectile_variables[v1] += 64; } - uint16 v8 = swap16(projectile_variables[v4]); - r20 = v8 & 0xFF00; - r18 = (int8)v8; - uint16 v9 = projectile_bomb_y_subpos[v4]; - v7 = __CFADD__uint16(r20, v9); - projectile_bomb_y_subpos[v4] = r20 + v9; - projectile_y_pos[v4] += r18 + v7; + AddToHiLo(&projectile_y_pos[v1], &projectile_bomb_y_subpos[v1], INT16_SHL8(projectile_variables[v1])); if (k == 6) { if ((projectile_bomb_x_speed[3] & 0x8000) != 0) { if ((R34 & 0x8000) == 0) - LABEL_26: - QueueSfx1_Max6(0x28); + QueueSfx1_Max6(0x28); } else if ((R34 & 0x8000) != 0) { - goto LABEL_26; + QueueSfx1_Max6(0x28); } } cooldown_timer = 2; @@ -5989,68 +5918,11 @@ int32 Samus_CalcDisplacementMoveRight(int32 amt) { // 0x90E4AD return Samus_ClampSpeed(amt); } -int32 Samus_CalcSpeed_X(int32 amt) { // 0x90E4E6 - uint16 r18 = amt >> 16, r20 = amt; - uint16 v0 = samus_x_speed_divisor; - if (!sign16(samus_x_speed_divisor - 5)) - v0 = 4; - 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; - r20 = (v3 & 0xFF00) + (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; - 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; - 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; - r20 = (v9 & 0xFF00) + (r20 >> 4); - samus_total_x_subspeed = r20; - break; - } - default: - Unreachable(); - } - return r18 << 16 | r20; +uint32 Samus_CalcSpeed_X(uint32 amt) { // 0x90E4E6 + amt += __PAIR32__(samus_x_extra_run_speed, samus_x_extra_run_subspeed); + amt >>= (samus_x_speed_divisor <= 4) ? samus_x_speed_divisor : 4; + SetHiLo(&samus_total_x_speed, &samus_total_x_subspeed, amt); + return amt; } void Samus_ClearXSpeedIfColl(void) { // 0x90E5CE diff --git a/src/sm_a0.c b/src/sm_a0.c index 8f33fda..bad515a 100644 --- a/src/sm_a0.c +++ b/src/sm_a0.c @@ -3131,56 +3131,19 @@ Point32 ConvertAngleToXy(uint16 r18, uint16 r20) { // 0xA0B643 } void EnemyFunc_B691(uint16 varE20, Point32 pt) { // 0xA0B691 - uint16 varE24 = pt.x >> 16; - uint16 varE26 = pt.x; - uint16 varE28 = pt.y >> 16; - uint16 varE2A = pt.y; - EnemyData *E = gEnemyData(cur_enemy_index); - uint16 x_subpos = E->x_subpos; - if (((varE20 + 64) & 0x80) != 0) { - bool v3 = x_subpos < varE26; - E->x_subpos = x_subpos - varE26; - E->x_pos -= v3 + varE24; - } else { - bool v3 = __CFADD__uint16(varE26, x_subpos); - E->x_subpos = varE26 + x_subpos; - E->x_pos += varE24 + v3; - } - uint16 y_subpos = E->y_subpos; - if (((varE20 + 128) & 0x80) != 0) { - bool v3 = y_subpos < varE2A; - E->y_subpos = y_subpos - varE2A; - E->y_pos -= v3 + varE28; - } else { - bool v3 = __CFADD__uint16(varE2A, y_subpos); - E->y_subpos = varE2A + y_subpos; - E->y_pos += varE28 + v3; - } + if (((varE20 + 64) & 0x80) != 0) + AddToHiLo(&E->x_pos, &E->x_subpos, -(int32)pt.x); + else + AddToHiLo(&E->x_pos, &E->x_subpos, pt.x); + if (((varE20 + 128) & 0x80) != 0) + AddToHiLo(&E->y_pos, &E->y_subpos, -(int32)pt.y); + else + AddToHiLo(&E->y_pos, &E->y_subpos, pt.y); } uint32 EnemyFunc_Divide(uint32 a, uint32 b) { // 0xA0B761 - if (!a) - return 0; - uint32 c = 0; - int n = 33; - uint8 carry = 0, carry2; - while (1) { - carry2 = b >> 31; - b = b * 2 + carry; - if (!--n) - break; - carry = c >> 31; - c = c * 2 + carry2; - if (c) { - carry = 0; - if (c >= a) { - c -= a; - carry = 1; - } - } - } - return b; + return a ? b / a : 0; } void EnemyFunc_B7A1(void) { // 0xA0B7A1 diff --git a/src/sm_a2.c b/src/sm_a2.c index ba978bb..dad24f9 100644 --- a/src/sm_a2.c +++ b/src/sm_a2.c @@ -505,17 +505,9 @@ void MaridiaBeybladeTurtle_Func8(uint16 k) { // 0xA28FEB QueueSfx2_Max6(0x1B); } else { MaridiaBeybladeTurtle_Func6(k); - uint16 mte_var_03 = E->mte_var_03; - bool v3 = __CFADD__uint16(E->mte_var_01, mte_var_03); - E->mte_var_03 = E->mte_var_01 + mte_var_03; - uint16 v5 = E->mte_var_02 + v3 + E->mte_var_E; - if ((int16)(abs16(v5) - g_word_A28D5E) >= 0) { - uint16 v4 = g_word_A28D5E; - if ((E->mte_var_E & 0x8000) != 0) - v4 = -g_word_A28D5E; - v5 = v4; - } - E->mte_var_E = v5; + AddToHiLo(&E->mte_var_E, &E->mte_var_03, __PAIR32__(E->mte_var_02, E->mte_var_01)); + if ((int16)(abs16(E->mte_var_E) - g_word_A28D5E) >= 0) + E->mte_var_E = (E->mte_var_E & 0x8000) != 0 ? -g_word_A28D5E : g_word_A28D5E; } } @@ -551,16 +543,11 @@ void MaridiaBeybladeTurtle_Func10(uint16 k) { // 0xA290CC void MaridiaBeybladeTurtle_Func11(uint16 k) { // 0xA290E1 MaridiaBeybladeTurtle_Func4(); Enemy_MaridiaTurtle *E = Get_MaridiaTurtle(k); - if ((int16)(Get_MaridiaTurtle(0)->mte_var_04 - g_word_A28D66) < 0) { - uint16 mte_var_07 = E->mte_var_07; - E->mte_var_07 = mte_var_07 + 0x2000; - E->mte_var_04 += __CFADD__uint16(mte_var_07, 0x2000); - } + if ((int16)(Get_MaridiaTurtle(0)->mte_var_04 - g_word_A28D66) < 0) + AddToHiLo(&E->mte_var_04, &E->mte_var_07, 0x2000); if (Enemy_MoveDown(k, INT16_SHL16(E->mte_var_04))) { - uint16 v4 = addr_kMaridiaBeybladeTurtle_Ilist_8C4A; - if ((E->mte_var_E & 0x8000) == 0) - v4 = addr_kMaridiaBeybladeTurtle_Ilist_8D28; - E->base.current_instruction = v4; + E->base.current_instruction = (E->mte_var_E & 0x8000) == 0 ? + addr_kMaridiaBeybladeTurtle_Ilist_8D28 : addr_kMaridiaBeybladeTurtle_Ilist_8C4A; E->base.instruction_timer = 1; E->mte_var_A = addr_locret_A28E09; } @@ -1137,15 +1124,8 @@ void SpikeShootingPlant_Main(void) { // 0xA29FB3 void SpikeShootingPlant_2(uint16 k) { // 0xA29FBA Enemy_SpikeShootingPlant *E = Get_SpikeShootingPlant(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; - bool v2 = __CFADD__uint16(E->sspt_var_C, x_subpos); - uint16 v3 = E->sspt_var_C + x_subpos; - if (v2) - ++E->base.x_pos; - E->base.x_subpos = v3; - uint16 v4 = E->sspt_var_D + E->base.x_pos; - E->base.x_pos = v4; - if ((int16)(v4 - E->sspt_var_00) < 0) { + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->sspt_var_D, E->sspt_var_C)); + if ((int16)(E->base.x_pos - E->sspt_var_00) < 0) { E->sspt_var_F = FUNC16(SpikeShootingPlant_3); E->sspt_var_E = 1; } @@ -1154,15 +1134,8 @@ void SpikeShootingPlant_2(uint16 k) { // 0xA29FBA void SpikeShootingPlant_3(uint16 k) { // 0xA29FEC Enemy_SpikeShootingPlant *E = Get_SpikeShootingPlant(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; - bool v2 = __CFADD__uint16(E->sspt_var_A, x_subpos); - uint16 v3 = E->sspt_var_A + x_subpos; - if (v2) - ++E->base.x_pos; - E->base.x_subpos = v3; - uint16 v4 = E->sspt_var_B + E->base.x_pos; - E->base.x_pos = v4; - if ((int16)(v4 - E->sspt_var_01) >= 0) { + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->sspt_var_B, E->sspt_var_A)); + if ((int16)(E->base.x_pos - E->sspt_var_01) >= 0) { E->sspt_var_F = FUNC16(SpikeShootingPlant_2); E->sspt_var_E = 0; } @@ -1275,30 +1248,16 @@ void MaridiaSpikeyShell_2(void) { // 0xA2A49D void MaridiaSpikeyShell_3(void) { // 0xA2A4B0 Enemy_MaridiaSpikeyShell *E = Get_MaridiaSpikeyShell(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->mssl_var_C, x_subpos); - uint16 v4 = E->mssl_var_C + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - uint16 v5 = E->mssl_var_D + E->base.x_pos; - E->base.x_pos = v5; - if ((int16)(v5 - E->mssl_var_01) < 0) + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->mssl_var_D, E->mssl_var_C)); + if ((int16)(E->base.x_pos - E->mssl_var_01) < 0) --E->mssl_var_E; MaridiaSpikeyShell_8(cur_enemy_index); } void MaridiaSpikeyShell_4(void) { // 0xA2A4D9 Enemy_MaridiaSpikeyShell *E = Get_MaridiaSpikeyShell(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->mssl_var_A, x_subpos); - uint16 v4 = E->mssl_var_A + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - uint16 v5 = E->mssl_var_B + E->base.x_pos; - E->base.x_pos = v5; - if ((int16)(v5 - E->mssl_var_02) >= 0) + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->mssl_var_B, E->mssl_var_A)); + if ((int16)(E->base.x_pos - E->mssl_var_02) >= 0) E->mssl_var_E = 0; MaridiaSpikeyShell_8(cur_enemy_index); } @@ -1452,58 +1411,31 @@ void GunshipTop_2(uint16 k) { // 0xA2A7D8 } void GunshipTop_3(uint16 k) { // 0xA2A80C - bool v2; // cf - uint16 y_subpos; - uint16 v6; - uint16 v7; - uint16 v9; - uint16 v11; - uint16 v12; - uint16 v13; - - Enemy_GunshipTop *GunshipTop = Get_GunshipTop(k); - if (sign16(GunshipTop->base.y_pos - 768)) { - v2 = __CFADD__uint16(samus_y_subpos, 0x8000); - samus_y_subpos += 0x8000; - samus_y_pos += v2 + 4; + Enemy_GunshipTop *E = Get_GunshipTop(k); + if (sign16(E->base.y_pos - 768)) { + AddToHiLo(&samus_y_pos, &samus_y_subpos, 0x48000); Enemy_GunshipTop *v3 = Get_GunshipTop(k + 128); - y_subpos = v3->base.y_subpos; - v3->base.y_subpos = y_subpos + 0x8000; - v3->base.y_pos += __CFADD__uint16(y_subpos, 0x8000) + 4; + AddToHiLo(&v3->base.y_pos, &v3->base.y_subpos, 0x48000); Enemy_GunshipTop *v5 = Get_GunshipTop(k + 64); - v6 = v5->base.y_subpos; - v5->base.y_subpos = v6 + 0x8000; - v5->base.y_pos += __CFADD__uint16(v6, 0x8000) + 4; - v7 = GunshipTop->base.y_subpos; - GunshipTop->base.y_subpos = v7 + 0x8000; - GunshipTop->base.y_pos += __CFADD__uint16(v7, 0x8000) + 4; + AddToHiLo(&v5->base.y_pos, &v5->base.y_subpos, 0x48000); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, 0x48000); } else { - v2 = __CFADD__uint16(samus_y_subpos, 0x8000); - samus_y_subpos += 0x8000; - samus_y_pos += v2 + 2; + AddToHiLo(&samus_y_pos, &samus_y_subpos, 0x28000); Enemy_GunshipTop *v8 = Get_GunshipTop(k + 128); - v9 = v8->base.y_subpos; - v8->base.y_subpos = v9 + 0x8000; - v8->base.y_pos += __CFADD__uint16(v9, 0x8000) + 2; + AddToHiLo(&v8->base.y_pos, &v8->base.y_subpos, 0x28000); Enemy_GunshipTop *v10 = Get_GunshipTop(k + 64); - v11 = v10->base.y_subpos; - v10->base.y_subpos = v11 + 0x8000; - v10->base.y_pos += __CFADD__uint16(v11, 0x8000) + 2; - v12 = GunshipTop->base.y_subpos; - GunshipTop->base.y_subpos = v12 + 0x8000; - v13 = __CFADD__uint16(v12, 0x8000) + GunshipTop->base.y_pos + 2; - GunshipTop->base.y_pos = v13; - if (!sign16(v13 - 1119)) { - GunshipTop->base.y_pos = 1119; + AddToHiLo(&v10->base.y_pos, &v10->base.y_subpos, 0x28000); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, 0x28000); + if (!sign16(E->base.y_pos - 1119)) { + E->base.y_pos = 1119; v10->base.y_pos = 1159; - v8->base.y_pos = GunshipTop->base.y_pos - 1; - GunshipTop->gtp_var_F = FUNC16(GunshipTop_4); - GunshipTop->gtp_var_E = 0; + v8->base.y_pos = E->base.y_pos - 1; + E->gtp_var_F = FUNC16(GunshipTop_4); + E->gtp_var_E = 0; } } } - void GunshipTop_4(uint16 k) { // 0xA2A8D0 int v2; uint16 v5; @@ -3127,18 +3059,13 @@ void HirisingSlowfalling_Init(void) { // 0xA2DF76 } void HirisingSlowfalling_Func_2(uint16 k, uint16 r18) { // 0xA2DFE9 - uint16 r20 = 0; - uint16 r22 = 0; + uint32 v = 0; uint16 r24 = 0; do { r24 += 512; - int v1 = (8 * ((r24 & 0xFF00) >> 8)) >> 1; - uint16 v2 = kCommonEnemySpeeds_Quadratic[v1] + r20; - if (__CFADD__uint16(kCommonEnemySpeeds_Quadratic[v1], r20)) - ++r22; - r20 = v2; - r22 += kCommonEnemySpeeds_Quadratic[v1 + 1]; - } while (sign16(r22 - r18)); + int v1 = 4 * (r24 >> 8); + v += __PAIR32__(kCommonEnemySpeeds_Quadratic[v1 + 1], kCommonEnemySpeeds_Quadratic[v1]); + } while (sign16((v >> 16) - r18)); Get_HirisingSlowfalling(k)->hsg_var_06 = r24; } @@ -3173,10 +3100,8 @@ void HirisingSlowfalling_Func_4(void) { // 0xA2E035 } void HirisingSlowfalling_Func_5(void) { // 0xA2E04F - int16 v1; - Enemy_HirisingSlowfalling *E = Get_HirisingSlowfalling(cur_enemy_index); - v1 = E->hsg_var_07 - 1; + int16 v1 = E->hsg_var_07 - 1; E->hsg_var_07 = v1; if (v1 < 0) { HirisingSlowfalling_Func_3(addr_kHirisingSlowfalling_Ilist_D834); @@ -3185,26 +3110,14 @@ void HirisingSlowfalling_Func_5(void) { // 0xA2E04F } void HirisingSlowfalling_Func_6(void) { // 0xA2E06A - int16 v5; - Enemy_HirisingSlowfalling *E = Get_HirisingSlowfalling(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - int v2 = (8 * HIBYTE(E->hsg_var_B)) >> 1; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v2 + 2], y_subpos); - uint16 v4 = kCommonEnemySpeeds_Quadratic[v2 + 2] + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; - E->base.y_pos += kCommonEnemySpeeds_Quadratic[v2 + 3]; - v5 = E->hsg_var_B - 512; + int v2 = 4 * HIBYTE(E->hsg_var_B); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v2 + 3], kCommonEnemySpeeds_Quadratic[v2 + 2])); + int16 v5 = E->hsg_var_B - 512; E->hsg_var_B = v5; if (v5 < 0) { - uint16 hsg_var_02 = E->hsg_var_02; - E->base.x_pos = hsg_var_02; - E->hsg_var_04 = hsg_var_02; - uint16 hsg_var_03 = E->hsg_var_03; - E->base.y_pos = hsg_var_03; - E->hsg_var_05 = hsg_var_03; + E->base.x_pos = E->hsg_var_04 = E->hsg_var_02; + E->base.y_pos = E->hsg_var_05 = E->hsg_var_03; E->hsg_var_C = 0; E->hsg_var_D = LOBYTE(E->hsg_parameter_1) - 1; HirisingSlowfalling_Func_3(addr_kHirisingSlowfalling_Ilist_D840); @@ -3648,10 +3561,7 @@ void TimedShutter_Func_5(uint16 k) { // 0xA2EB11 void TimedShutter_Func_6(void) { // 0xA2EB25 Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(E->tsr_var_01, y_subpos); - E->base.y_subpos = E->tsr_var_01 + y_subpos; - E->base.y_pos += E->tsr_var_00 + v2; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->tsr_var_00, E->tsr_var_01)); if ((int16)(E->tsr_var_B + 16 - E->base.y_pos) < 0) { E->base.y_pos = E->tsr_var_B + 9; ++E->tsr_var_F; @@ -3663,10 +3573,7 @@ void TimedShutter_Func_6(void) { // 0xA2EB25 void TimedShutter_Func_7(void) { // 0xA2EB66 Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(E->tsr_var_01, y_subpos); - E->base.y_subpos = E->tsr_var_01 + y_subpos; - E->base.y_pos += E->tsr_var_00 + v2; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->tsr_var_00, E->tsr_var_01)); if ((int16)(E->tsr_var_C + 16 - E->base.y_pos) < 0) { E->base.y_pos = E->tsr_var_C + 9; ++E->tsr_var_F; @@ -3678,10 +3585,7 @@ void TimedShutter_Func_7(void) { // 0xA2EB66 void TimedShutter_Func_8(void) { // 0xA2EBA7 Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(E->tsr_var_01, y_subpos); - E->base.y_subpos = E->tsr_var_01 + y_subpos; - E->base.y_pos += E->tsr_var_00 + v2; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->tsr_var_00, E->tsr_var_01)); if ((int16)(E->tsr_var_D + 16 - E->base.y_pos) < 0) { E->base.y_pos = E->tsr_var_D + 9; ++E->tsr_var_F; @@ -3693,10 +3597,7 @@ void TimedShutter_Func_8(void) { // 0xA2EBA7 void TimedShutter_Func_9(void) { // 0xA2EBE8 Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(E->tsr_var_01, y_subpos); - E->base.y_subpos = E->tsr_var_01 + y_subpos; - E->base.y_pos += E->tsr_var_00 + v2; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->tsr_var_00, E->tsr_var_01)); uint16 v3 = E->tsr_var_E + 16; if ((int16)(v3 - E->base.y_pos) < 0) { E->base.y_pos = v3; @@ -3717,28 +3618,21 @@ static Func_V *const off_A2EC3A[5] = { // 0xA2EC13 }; void TimedShutter_Func_10(uint16 k) { - int16 v4; - Enemy_TimedShutter *E = Get_TimedShutter(k); E->tsr_var_40 = E->base.y_pos; uint16 v2 = 2 * E->tsr_var_F; off_A2EC3A[v2 >> 1](); if (CheckIfEnemyTouchesSamus(k)) { - v4 = E->base.y_pos - E->tsr_var_40; + int16 v4 = E->base.y_pos - E->tsr_var_40; if (v4 < 0) extra_samus_y_displacement += v4; } } void TimedShutter_Func_11(void) { // 0xA2EC45 - int16 v3; - Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = y_subpos < E->tsr_var_01; - E->base.y_subpos = y_subpos - E->tsr_var_01; - E->base.y_pos -= v2 + E->tsr_var_00; - v3 = E->tsr_var_B - 16; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -(int32)__PAIR32__(E->tsr_var_00, E->tsr_var_01)); + int16 v3 = E->tsr_var_B - 16; if ((int16)(v3 - E->base.y_pos) >= 0) { E->base.y_pos = v3 + 7; ++E->tsr_var_F; @@ -3749,14 +3643,9 @@ void TimedShutter_Func_11(void) { // 0xA2EC45 } void TimedShutter_Func_12(void) { // 0xA2EC86 - int16 v3; - Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = y_subpos < E->tsr_var_01; - E->base.y_subpos = y_subpos - E->tsr_var_01; - E->base.y_pos -= v2 + E->tsr_var_00; - v3 = E->tsr_var_C - 16; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -(int32)__PAIR32__(E->tsr_var_00, E->tsr_var_01)); + int16 v3 = E->tsr_var_C - 16; if ((int16)(v3 - E->base.y_pos) >= 0) { E->base.y_pos = v3 + 7; ++E->tsr_var_F; @@ -3767,14 +3656,9 @@ void TimedShutter_Func_12(void) { // 0xA2EC86 } void TimedShutter_Func_13(void) { // 0xA2ECC7 - int16 v3; - Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = y_subpos < E->tsr_var_01; - E->base.y_subpos = y_subpos - E->tsr_var_01; - E->base.y_pos -= v2 + E->tsr_var_00; - v3 = E->tsr_var_D - 16; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -(int32)__PAIR32__(E->tsr_var_00, E->tsr_var_01)); + int16 v3 = E->tsr_var_D - 16; if ((int16)(v3 - E->base.y_pos) >= 0) { E->base.y_pos = v3 + 7; ++E->tsr_var_F; @@ -3786,10 +3670,7 @@ void TimedShutter_Func_13(void) { // 0xA2ECC7 void TimedShutter_Func_14(void) { // 0xA2ED08 Enemy_TimedShutter *E = Get_TimedShutter(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - bool v2 = y_subpos < E->tsr_var_01; - E->base.y_subpos = y_subpos - E->tsr_var_01; - E->base.y_pos -= v2 + E->tsr_var_00; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -(int32)__PAIR32__(E->tsr_var_00, E->tsr_var_01)); uint16 v3 = E->tsr_var_E - 16; if ((int16)(v3 - E->base.y_pos) >= 0) { E->base.y_pos = v3; @@ -3936,13 +3817,7 @@ void RisingFallingPlatform_Func_9(void) { // 0xA2EF68 E->rfpm_var_0A = 0; if (CheckIfEnemyTouchesSamus(cur_enemy_index)) E->rfpm_var_0A = 1; - uint16 y_subpos = E->base.y_subpos; - bool v3 = __CFADD__uint16(E->rfpm_var_E, y_subpos); - uint16 v4 = E->rfpm_var_E + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; - E->base.y_pos += E->rfpm_var_F; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->rfpm_var_F, E->rfpm_var_E)); if (E->rfpm_var_0A) extra_samus_y_displacement = E->base.y_pos - E->rfpm_var_0E; if ((int16)(E->rfpm_var_0F - E->base.y_pos) >= 0) { @@ -3961,13 +3836,7 @@ void RisingFallingPlatform_Func_10(void) { // 0xA2EFD4 E->rfpm_var_0A = 0; if (CheckIfEnemyTouchesSamus(cur_enemy_index)) E->rfpm_var_0A = 1; - uint16 y_subpos = E->base.y_subpos; - bool v3 = __CFADD__uint16(E->rfpm_var_C, y_subpos); - uint16 v4 = E->rfpm_var_C + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; - E->base.y_pos += E->rfpm_var_D; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->rfpm_var_D, E->rfpm_var_C)); if (E->rfpm_var_0A) extra_samus_y_displacement = E->base.y_pos - E->rfpm_var_0E; if ((int16)(E->base.y_pos - E->rfpm_var_10) >= 0) { @@ -4147,10 +4016,7 @@ void HorizontalShootableShutter_Func_8(void) { // 0xA2F272 E->rfpm_var_13 = 0; if (EnemyFunc_AC67(cur_enemy_index) && (int16)(samus_x_pos - E->base.x_pos) < 0) E->rfpm_var_13 = 1; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->rfpm_var_E, x_subpos); - E->base.x_subpos = E->rfpm_var_E + x_subpos; - E->base.x_pos += E->rfpm_var_F + v3; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->rfpm_var_F, E->rfpm_var_E)); if (E->rfpm_var_13) { extra_samus_x_subdisplacement = E->rfpm_var_E; extra_samus_x_displacement = E->rfpm_var_F; @@ -4172,10 +4038,7 @@ void HorizontalShootableShutter_Func_9(void) { // 0xA2F2E4 E->rfpm_var_13 = 0; if (EnemyFunc_AC67(cur_enemy_index) && (int16)(samus_x_pos - E->base.x_pos) >= 0) E->rfpm_var_13 = 1; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->rfpm_var_C, x_subpos); - E->base.x_subpos = E->rfpm_var_C + x_subpos; - E->base.x_pos += E->rfpm_var_D + v3; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->rfpm_var_D, E->rfpm_var_C)); if (E->rfpm_var_13) { extra_samus_x_subdisplacement = E->rfpm_var_C; extra_samus_x_displacement = E->rfpm_var_D; diff --git a/src/sm_a3.c b/src/sm_a3.c index 6551d58..b5db31f 100644 --- a/src/sm_a3.c +++ b/src/sm_a3.c @@ -335,11 +335,8 @@ void Fireflea_Main(void) { // 0xA38DEE E->base.y_pos = E->ffa_var_F + SineMult8bit(HIBYTE(E->ffa_var_D), E->ffa_var_C); E->ffa_var_D += *(uint16 *)((uint8 *)&E->ffa_var_A + 1); } else { - uint16 y_subpos = E->base.y_subpos; int v2 = E->ffa_var_02 >> 1; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Linear[v2 + 1], y_subpos); - E->base.y_subpos = kCommonEnemySpeeds_Linear[v2 + 1] + y_subpos; - E->base.y_pos += kCommonEnemySpeeds_Linear[v2] + v3; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[v2], kCommonEnemySpeeds_Linear[v2 + 1])); if ((int16)(E->base.y_pos - E->ffa_var_00) < 0 || (int16)(E->base.y_pos - E->ffa_var_01) >= 0) { E->ffa_var_02 ^= 4; @@ -531,19 +528,13 @@ void Elevator_Func_1(void) { // 0xA39548 void Elevator_Func_2(void) { // 0xA39579 Enemy_Elevator *E = Get_Elevator(cur_enemy_index); - uint16 v2; if (E->elevat_parameter_1) { elevator_direction = 0x8000; - uint16 y_subpos = E->base.y_subpos; - E->base.y_subpos = y_subpos + 0x8000; - v2 = (__PAIR32__(E->base.y_pos, y_subpos) - 98304) >> 16; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -0x18000); } else { elevator_direction = 0; - uint16 v1 = E->base.y_subpos; - E->base.y_subpos = v1 + 0x8000; - v2 = __CFADD__uint16(v1, 0x8000) + E->base.y_pos + 1; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, 0x18000); } - E->base.y_pos = v2; Elevator_Func_4(); } @@ -555,24 +546,17 @@ void Elevator_Func_3(void) { // 0xA395B9 void Elevator_Func3b(void) { // 0xA395BC Enemy_Elevator *E = Get_Elevator(cur_enemy_index); if (E->elevat_parameter_1) { - uint16 y_subpos; - y_subpos = E->base.y_subpos; - E->base.y_subpos = y_subpos + 0x8000; - uint16 v2; - v2 = __CFADD__uint16(y_subpos, 0x8000) + E->base.y_pos + 1; - E->base.y_pos = v2; - if (v2 < E->elevat_var_A) { -LABEL_3: + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, 0x18000); + if (E->base.y_pos < E->elevat_var_A) { Elevator_Func_4(); return; } } else { - uint16 v3 = E->base.y_subpos; - E->base.y_subpos = v3 + 0x8000; - uint16 v4 = (__PAIR32__(E->base.y_pos, v3) - 98304) >> 16; - E->base.y_pos = v4; - if (v4 >= E->elevat_var_A) - goto LABEL_3; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -0x18000); + if (E->base.y_pos >= E->elevat_var_A) { + Elevator_Func_4(); + return; + } } elevator_status = 0; elevator_flags = 0; @@ -1078,56 +1062,20 @@ void Roach_Func_29(uint16 k) { // 0xA3A578 void Roach_Func_30(uint16 k) { // 0xA3A5A3 Enemy_Roach *E = Get_Roach(k); - E->base.x_pos += E->roach_var_05; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->roach_var_04, x_subpos); - uint16 v4 = E->roach_var_04 + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.y_pos += E->roach_var_07; - uint16 y_subpos = E->base.y_subpos; - v3 = __CFADD__uint16(E->roach_var_06, y_subpos); - uint16 v6 = E->roach_var_06 + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v6; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->roach_var_05, E->roach_var_04)); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->roach_var_07, E->roach_var_06)); } void Roach_Func_31(uint16 k) { // 0xA3A5DA Enemy_Roach *E = Get_Roach(k); - E->base.x_pos += E->roach_var_09; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->roach_var_08, x_subpos); - uint16 v4 = E->roach_var_08 + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.y_pos += E->roach_var_0B; - uint16 y_subpos = E->base.y_subpos; - v3 = __CFADD__uint16(E->roach_var_0A, y_subpos); - uint16 v6 = E->roach_var_0A + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v6; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->roach_var_09, E->roach_var_08)); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->roach_var_0B, E->roach_var_0A)); } void Roach_Func_32(uint16 k) { // 0xA3A611 Enemy_Roach *E = Get_Roach(k); - E->base.x_pos += E->roach_var_0D; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->roach_var_0C, x_subpos); - uint16 v4 = E->roach_var_0C + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.y_pos += E->roach_var_0F; - uint16 y_subpos = E->base.y_subpos; - v3 = __CFADD__uint16(E->roach_var_0E, y_subpos); - uint16 v6 = E->roach_var_0E + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v6; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->roach_var_0D, E->roach_var_0C)); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->roach_var_0F, E->roach_var_0E)); } void Roach_Func_33(uint16 k) { // 0xA3A648 @@ -1154,19 +1102,11 @@ void Mochtroid_Main(void) { // 0xA3A790 } void Mochtroid_Func_1(void) { // 0xA3A7AA - int16 v4; - int16 v5; - int16 v9; - int16 v10; + int16 v5, v10; Enemy_Mochtroid *E = Get_Mochtroid(cur_enemy_index); - uint32 t = INT16_SHL8((int16)(E->base.y_pos - samus_y_pos) >> 2); - uint16 r18 = t, r20 = t >> 16; - uint16 mochtr_var_C = E->mochtr_var_C; - bool v3 = mochtr_var_C < r18; - E->mochtr_var_C = mochtr_var_C - r18; - v4 = E->mochtr_var_D - (v3 + r20); - E->mochtr_var_D = v4; + int32 t = INT16_SHL8((int16)(E->base.y_pos - samus_y_pos) >> 2); + AddToHiLo(&E->mochtr_var_D, &E->mochtr_var_C, -t); if ((int16)E->mochtr_var_D < 0) { if ((uint16)E->mochtr_var_D < 0xFFFD) { v5 = -3; @@ -1183,12 +1123,7 @@ LABEL_8: E->mochtr_var_D = 0; } t = INT16_SHL8((int16)(E->base.x_pos - samus_x_pos) >> 2); - r18 = t, r20 = t >> 16; - uint16 mochtr_var_A = E->mochtr_var_A; - v3 = mochtr_var_A < r18; - E->mochtr_var_A = mochtr_var_A - r18; - v9 = E->mochtr_var_B - (v3 + r20); - E->mochtr_var_B = v9; + AddToHiLo(&E->mochtr_var_B, &E->mochtr_var_A, -t); if ((int16)E->mochtr_var_B < 0) { if ((uint16)E->mochtr_var_B < 0xFFFD) { v10 = -3; @@ -2318,20 +2253,15 @@ void MaridiaSnail_Func_15(uint16 k) { // 0xA3D1B3 E->msl_var_20 = 1; QueueSfx2_Max3(0x70); } else { - uint16 r22, r24; - if ((E->msl_var_03 & 0x8000) != 0) { - r22 = 4096; - r24 = 0; - } else { - r22 = -4096; - r24 = -1; - } - uint16 msl_var_02 = E->msl_var_02; - bool v3 = __CFADD__uint16(r22, msl_var_02); - E->msl_var_02 = r22 + msl_var_02; - uint16 v4 = r24 + v3 + E->msl_var_03; - if (v4) - E->msl_var_03 = v4; + uint32 delta; + if ((E->msl_var_03 & 0x8000) != 0) + delta = 4096; + else + delta = -4096; + uint32 t = __PAIR32__(E->msl_var_03, E->msl_var_02) + delta; + E->msl_var_02 = t; + if (t >> 16) + E->msl_var_03 = (t >> 16); } } if (Enemy_MoveDown(k, __PAIR32__(E->msl_var_01, E->msl_var_00))) { @@ -2364,11 +2294,10 @@ void MaridiaSnail_Func_15(uint16 k) { // 0xA3D1B3 E->msl_var_20 = 0; } } else { - uint16 msl_var_00 = E->msl_var_00; - E->msl_var_00 = msl_var_00 + 0x2000; - uint16 v6 = __CFADD__uint16(msl_var_00, 0x2000) + E->msl_var_01; - if (sign16(v6 - 4)) - E->msl_var_01 = v6; + uint32 t = __PAIR32__(E->msl_var_01, E->msl_var_00) + 0x2000; + E->msl_var_00 = t; + if (sign16((t >> 16) - 4)) + E->msl_var_01 = (t >> 16); } } @@ -2782,11 +2711,8 @@ void FireZoomer_Func_2(uint16 k) { // 0xA3E785 E->fzr_var_04 = 0; E->fzr_var_F = E->fzr_var_03; } else { - if (sign16(E->fzr_var_02 - 4)) { - uint16 fzr_var_01 = E->fzr_var_01; - E->fzr_var_01 = fzr_var_01 + 0x8000; - E->fzr_var_02 += __CFADD__uint16(fzr_var_01, 0x8000); - } + if (sign16(E->fzr_var_02 - 4)) + AddToHiLo(&E->fzr_var_02, &E->fzr_var_01, 0x8000); if (!E->fzr_var_01 && !E->fzr_var_02) E->fzr_var_F = FUNC16(FireZoomer_Func_1); } diff --git a/src/sm_a4.c b/src/sm_a4.c index ea759b4..d5f85ff 100644 --- a/src/sm_a4.c +++ b/src/sm_a4.c @@ -1165,7 +1165,7 @@ LABEL_4:; r18 += g_word_7E0692; if (!v8) ++v7; - ++message_box_animation_y1; + message_box_animation_y1++; v6 += 2; } while ((int16)(v7 - g_word_7E0698) < 0); if ((int16)(v6 - 512) < 0) { @@ -1370,20 +1370,13 @@ void Crocomire_Func_71(void) { // 0xA4990A } void Crocomire_Func_72(void) { // 0xA499E5 - int16 v3; - Enemy_Crocomire *E = Get_Crocomire(0); if (sign16(E->base.x_pos - 224)) { - uint16 crocom_var_E = E->crocom_var_E; - E->crocom_var_E = crocom_var_E + 0x8000; - v3 = __CFADD__uint16(crocom_var_E, 0x8000) + E->crocom_var_F; - if (!sign16(v3 - 2)) - v3 = 2; - E->crocom_var_F = v3; - uint16 x_subpos = E->base.x_subpos; - bool v5 = __CFADD__uint16(E->crocom_var_E, x_subpos); - E->base.x_subpos = E->crocom_var_E + x_subpos; - E->base.x_pos += E->crocom_var_F + v5; + uint32 t = __PAIR32__(E->crocom_var_F, E->crocom_var_E) + 0x8000; + if (!sign16((t >> 16) - 2)) + t = (t & 0xffff) | (2 << 16); + SetHiLo(&E->crocom_var_F, &E->crocom_var_E, t); + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, t); } Enemy_Crocomire *E2 = Get_Crocomire(0x80); if (E2->crocom_var_D) { @@ -1397,24 +1390,14 @@ void Crocomire_Func_72(void) { // 0xA499E5 } void Crocomire_Func_73(void) { // 0xA49A38 - int16 v3; - Enemy_Crocomire *E = Get_Crocomire(0); - uint16 crocom_var_E = E->crocom_var_E; - E->crocom_var_E = crocom_var_E + 2048; - v3 = __CFADD__uint16(crocom_var_E, 2048) + E->crocom_var_F; - if (!sign16(v3 - 5)) - v3 = 5; - E->crocom_var_F = v3; - bool v4 = __CFADD__uint16(E->base.y_subpos, -8192); - E->base.y_subpos -= 0x2000; - E->base.y_pos += v4; - uint16 x_subpos = E->base.x_subpos; - v4 = __CFADD__uint16(E->crocom_var_E, x_subpos); - E->base.x_subpos = E->crocom_var_E + x_subpos; - uint16 v6 = E->crocom_var_F + v4 + E->base.x_pos; - E->base.x_pos = v6; - if (!sign16(v6 - 576)) { + uint32 t = __PAIR32__(E->crocom_var_F, E->crocom_var_E) + 2048; + if (!sign16((t >> 16) - 5)) + t = (t & 0xffff) | (5 << 16); + SetHiLo(&E->crocom_var_F, &E->crocom_var_E, t); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, -0x2000); + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, t); + if (!sign16(E->base.x_pos - 576)) { QueueSfx2_Max6(0x25); Get_Crocomire(0x40)->base.palette_index = E->base.palette_index; E->base.current_instruction = addr_kCrocomire_Ilist_E158; @@ -1483,16 +1466,12 @@ const uint16 *Crocomire_Func_87(const uint16 *jp, uint16 a) { // 0xA49ADA } void Crocomire_Func_88(void) { // 0xA49B06 - int16 v3; - Enemy_Crocomire *E = Get_Crocomire(0); if (sign16(E->base.current_instruction + 0x1E3A)) { - uint16 crocom_var_E = E->crocom_var_E; - E->crocom_var_E = crocom_var_E + 4096; - v3 = __CFADD__uint16(crocom_var_E, 4096) + E->crocom_var_F; - if (!sign16(v3 - 6)) - v3 = 6; - E->crocom_var_F = v3; + uint32 t = __PAIR32__(E->crocom_var_F, E->crocom_var_E) + 4096; + if (!sign16((t >> 16) - 6)) + t = (t & 0xffff) | (6 << 16); + SetHiLo(&E->crocom_var_F, &E->crocom_var_E, t); } else { E->base.current_instruction = addr_kCrocomire_Ilist_E1CC; E->base.instruction_timer = 1; diff --git a/src/sm_a5.c b/src/sm_a5.c index b7ef855..7afad8d 100644 --- a/src/sm_a5.c +++ b/src/sm_a5.c @@ -216,8 +216,7 @@ void Draygon_Func_5(void) { // 0xA58817 } } uint32 t = EnemyFunc_Divide(varE26 >> 2, Abs16(E->draygon_var_00 - samus_x_pos) << 16); - E->draygon_var_D = t >> 16; - E->draygon_var_E = t; + SetHiLo(&E->draygon_var_D, &E->draygon_var_E, t); uint16 v6 = varE26; *(uint16 *)((uint8 *)&g_word_7E9002 + varE26) = E->base.y_pos; E->draygon_var_B = v6; @@ -237,10 +236,7 @@ void Draygon_Func_6(void) { // 0xA588B1 Get_Draygon(cur_enemy_index)->base.y_pos = *(uint16 *)((uint8 *)&g_word_7E9002 + draygon_var_B); E->draygon_var_B -= 4; if (E->draygon_var_B) { - uint16 x_subpos = E->base.x_subpos; - bool v6 = __CFADD__uint16(E->draygon_var_E, x_subpos); - E->base.x_subpos = E->draygon_var_E + x_subpos; - E->base.x_pos += E->draygon_var_D + v6; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->draygon_var_D, E->draygon_var_E)); } else { E->draygon_var_A = FUNC16(Draygon_Func_8); } @@ -260,8 +256,7 @@ void Draygon_Func_8(void) { // 0xA58922 Draygon_Func_3(); Enemy_Draygon *E = Get_Draygon(0); uint32 t = EnemyFunc_Divide(E->draygon_var_C >> 2, (672 - E->base.x_pos) << 16); - E->draygon_var_D = t >> 16; - E->draygon_var_E = t; + SetHiLo(&E->draygon_var_D, &E->draygon_var_E, t); E->draygon_var_A = FUNC16(Draygon_Func_9); } @@ -283,10 +278,7 @@ void Draygon_Func_9(void) { // 0xA58951 else E->draygon_var_A = FUNC16(Draygon_Func_18); } else { - uint16 x_subpos = E->base.x_subpos; - bool v5 = __CFADD__uint16(E->draygon_var_E, x_subpos); - E->base.x_subpos = E->draygon_var_E + x_subpos; - E->base.x_pos += E->draygon_var_D + v5; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->draygon_var_D, E->draygon_var_E)); } } @@ -296,8 +288,7 @@ void Draygon_Func_10(void) { // 0xA589B3 printf("Wtf is varE26?\n"); uint16 varE26 = 0; // Wtf is varE26 uint32 t = EnemyFunc_Divide(varE26 >> 2, Abs16(E->draygon_var_02 - samus_x_pos) << 16); - E->draygon_var_D = t >> 16; - E->draygon_var_E = t; + SetHiLo(&E->draygon_var_D, &E->draygon_var_E, t); E->draygon_var_A = FUNC16(Draygon_Func_11); E->base.current_instruction = addr_kDraygon_Ilist_97BB; E->base.instruction_timer = 1; @@ -318,10 +309,7 @@ void Draygon_Func_11(void) { // 0xA58A00 Get_Draygon(cur_enemy_index)->base.y_pos = *(uint16 *)((uint8 *)&g_word_7E9002 + draygon_var_B); E->draygon_var_B -= 4; if (E->draygon_var_B) { - uint16 x_subpos = E->base.x_subpos; - bool v6 = x_subpos < E->draygon_var_E; - E->base.x_subpos = x_subpos - E->draygon_var_E; - E->base.x_pos -= v6 + E->draygon_var_D; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, -(int32)__PAIR32__(E->draygon_var_D, E->draygon_var_E)); } else { E->draygon_var_A = FUNC16(Draygon_Func_12); } @@ -347,10 +335,8 @@ void Draygon_Func_13(void) { // 0xA58A90 E3->base.instruction_timer = 1; } Get_Draygon(cur_enemy_index)->base.y_pos = *(uint16 *)((uint8 *)&g_word_7E9002 + draygon_var_B); - ++E->draygon_var_B; - ++E->draygon_var_B; - ++E->draygon_var_B; - if (++E->draygon_var_B == E->draygon_var_C) { + E->draygon_var_B += 4; + if (E->draygon_var_B == E->draygon_var_C) { if ((random_number & 1) != 0) { E->draygon_var_A = FUNC16(Draygon_Func_4); E->draygon_var_B = 0; @@ -361,10 +347,7 @@ void Draygon_Func_13(void) { // 0xA58A90 E->base.x_pos = E->draygon_var_00; } } else { - uint16 x_subpos = E->base.x_subpos; - bool v6 = x_subpos < E->draygon_var_E; - E->base.x_subpos = x_subpos - E->draygon_var_E; - E->base.x_pos -= v6 + E->draygon_var_D; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, -(int32)__PAIR32__(E->draygon_var_D, E->draygon_var_E)); } } @@ -396,16 +379,12 @@ void Draygon_Func_15(void) { // 0xA58B52 } else { E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos = E->base.x_subpos; - bool v4 = __CFADD__uint16(E->draygon_var_E, x_subpos); - E->base.x_subpos = E->draygon_var_E + x_subpos; - E->base.x_pos += E->draygon_var_D + v4; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->draygon_var_D, E->draygon_var_E)); } } void Draygon_Func_16(void) { // 0xA58BAE Enemy_Draygon *E = Get_Draygon(0); - int16 v5; Draygon_Func_3(); if (samus_x_speed_divisor) @@ -420,14 +399,8 @@ void Draygon_Func_16(void) { // 0xA58BAE } E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos; - x_subpos = E->base.x_subpos; - bool v4; - v4 = __CFADD__uint16(E->draygon_var_E, x_subpos); - E->base.x_subpos = E->draygon_var_E + x_subpos; - v5 = E->draygon_var_D + v4 + E->base.x_pos; - E->base.x_pos = v5; - if (v5 >= 0 && !sign16(v5 - 672)) { + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->draygon_var_D, E->draygon_var_E)); + if ((int16)E->base.x_pos >= 0 && !sign16(E->base.x_pos - 672)) { LABEL_8: if (!samus_x_speed_divisor) { Enemy_Draygon *E3 = Get_Draygon(0xC0); @@ -442,18 +415,12 @@ LABEL_9: } void Draygon_Func_17(uint16 k) { // 0xA58C33 - int16 v4; - Draygon_Func_35(); Enemy_Draygon *E = Get_Draygon(0); E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->draygon_var_E, x_subpos); - E->base.x_subpos = E->draygon_var_E + x_subpos; - v4 = E->draygon_var_D + v3 + E->base.x_pos; - E->base.x_pos = v4; - if (v4 >= 0 && !sign16(v4 - 672)) { + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->draygon_var_D, E->draygon_var_E)); + if ((int16)E->base.x_pos >= 0 && !sign16(E->base.x_pos - 672)) { E->draygon_var_A = FUNC16(Draygon_Func_10); E->base.x_pos = 592; E->base.y_pos = -80; @@ -488,17 +455,12 @@ void Draygon_Func_19(void) { // 0xA58CD4 } else { E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos = E->base.x_subpos; - bool v4 = x_subpos < E->draygon_var_E; - E->base.x_subpos = x_subpos - E->draygon_var_E; - E->base.x_pos -= v4 + E->draygon_var_D; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, -(int32)__PAIR32__(E->draygon_var_D, E->draygon_var_E)); } } void Draygon_Func_20(void) { // 0xA58D30 Enemy_Draygon *E = Get_Draygon(0); - int16 v5; - if (samus_x_speed_divisor) goto LABEL_9; if ((random_number & 0xF) == 0) { @@ -511,14 +473,8 @@ void Draygon_Func_20(void) { // 0xA58D30 } E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos; - x_subpos = E->base.x_subpos; - bool v4; - v4 = x_subpos < E->draygon_var_E; - E->base.x_subpos = x_subpos - E->draygon_var_E; - v5 = E->base.x_pos - (v4 + E->draygon_var_D); - E->base.x_pos = v5; - if (v5 < 0 && sign16(v5 + 80)) { + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, -(int32)__PAIR32__(E->draygon_var_D, E->draygon_var_E)); + if ((int32)E->base.x_pos < 0 && sign16(E->base.x_pos + 80)) { LABEL_8: if (!samus_x_speed_divisor) { Enemy_Draygon *E3 = Get_Draygon(0xC0); @@ -534,26 +490,18 @@ LABEL_9: void Draygon_Func_21(uint16 k) { // 0xA58DB2 Enemy_Draygon *E = Get_Draygon(0); - int16 v4; - Draygon_Func_35(); if (samus_x_speed_divisor) { E->draygon_var_A = FUNC16(Draygon_Func_22); } else { E->base.y_pos = CosineMult8bit(E->draygon_var_0D, 32) + 384; E->draygon_var_0D = (uint8)(E->draygon_var_0D + 1); - uint16 x_subpos = E->base.x_subpos; - bool v3 = x_subpos < E->draygon_var_E; - E->base.x_subpos = x_subpos - E->draygon_var_E; - v4 = E->base.x_pos - (v3 + E->draygon_var_D); - E->base.x_pos = v4; - if (v4 < 0) { - if (sign16(v4 + 80)) { - E->draygon_var_A = FUNC16(Draygon_Func_4); - E->base.x_pos = -80; - E->base.y_pos = -80; - E->draygon_var_B = E->draygon_var_C; - } + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, -(int32)__PAIR32__(E->draygon_var_D, E->draygon_var_E)); + if ((int16)E->base.x_pos < 0 && sign16(E->base.x_pos + 80)) { + E->draygon_var_A = FUNC16(Draygon_Func_4); + E->base.x_pos = -80; + E->base.y_pos = -80; + E->draygon_var_B = E->draygon_var_C; } } } @@ -646,12 +594,9 @@ void Draygon_Func_25(uint16 k) { // 0xA58FD6 uint16 y = E->base.y_pos - 16; CreateSpriteAtPos(x, y, 61, 0); } - uint16 draygon_var_09 = E->draygon_var_09; - E->draygon_var_09 = draygon_var_09 + 0x2000; - uint16 v5 = __CFADD__uint16(draygon_var_09, 0x2000) + E->draygon_var_05; - E->draygon_var_05 = v5; + AddToHiLo(&E->draygon_var_05, &E->draygon_var_09, 0x2000); uint16 draygon_var_0A, v8; - if (!sign16(v5 - 160) + if (!sign16(E->draygon_var_05 - 160) || (v6 = E->draygon_var_0B - 1, E->draygon_var_0B = v6, E->draygon_var_08 = (uint8)(LOBYTE(E->draygon_var_08) + HIBYTE(v6)), @@ -1148,31 +1093,15 @@ void Draygon_Func_42(uint16 varE24) { // 0xA59FE0 for (int i = 20; i >= 0; i -= 4) { int v2 = i >> 1; int v3 = v0 >> 1; - uint16 v4 = sprite_x_subpos[v3], v6; - if (((g_word_A5A1DF[v2] + 64) & 0x80) != 0) { - bool v5 = __CFADD__uint16(g_word_A5A1AF[v2], v4); - sprite_x_subpos[v3] = g_word_A5A1AF[v2] + v4; - v6 = v5 + sprite_x_pos[v3]; - sprite_x_pos[v3] = v6; - } else { - bool v5 = v4 < g_word_A5A1AF[v2]; - sprite_x_subpos[v3] = v4 - g_word_A5A1AF[v2]; - v6 = sprite_x_pos[v3] - (v5 + varE24); - sprite_x_pos[v3] = v6; - } - int v7 = v0 >> 1; - uint16 v8 = sprite_y_subpos[v7], v9; - if (((g_word_A5A1DF[v2] + 128) & 0x80) != 0) { - bool v5 = __CFADD__uint16(g_word_A5A1AF[v2 + 1], v8); - sprite_y_subpos[v7] = g_word_A5A1AF[v2 + 1] + v8; - v9 = v5 + sprite_y_pos[v7]; - sprite_y_pos[v7] = v9; - } else { - bool v5 = v8 < g_word_A5A1AF[v2 + 1]; - sprite_y_subpos[v7] = v8 - g_word_A5A1AF[v2 + 1]; - v9 = sprite_y_pos[v7] - v5; - sprite_y_pos[v7] = v9; - } + if (((g_word_A5A1DF[v2] + 64) & 0x80) != 0) + AddToHiLo(&sprite_x_pos[v3], &sprite_x_subpos[v3], g_word_A5A1AF[v2]); + else + AddToHiLo(&sprite_x_pos[v3], &sprite_x_subpos[v3], -g_word_A5A1AF[v2] - (varE24 << 16)); + uint16 v8 = sprite_y_subpos[v3]; + if (((g_word_A5A1DF[v2] + 128) & 0x80) != 0) + AddToHiLo(&sprite_y_pos[v3], &sprite_y_subpos[v3], g_word_A5A1AF[v2 + 1]); + else + AddToHiLo(&sprite_y_pos[v3], &sprite_y_subpos[v3], -g_word_A5A1AF[v2 + 1]); v0 -= 2; } } diff --git a/src/sm_a6.c b/src/sm_a6.c index 3cfed58..3b128a5 100644 --- a/src/sm_a6.c +++ b/src/sm_a6.c @@ -328,38 +328,20 @@ void Boulder_Func_6(void) { // 0xA689FC void Boulder_Func_7(uint16 j) { // 0xA68A00 Enemy_Boulder *E = Get_Boulder(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; int v3 = j >> 1; - bool v4 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v3], x_subpos); - uint16 v5 = kCommonEnemySpeeds_Quadratic[v3] + x_subpos; - if (v4) - ++E->base.x_pos; - E->base.x_subpos = v5; - E->base.x_pos += kCommonEnemySpeeds_Quadratic[v3 + 1]; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v3 + 1], kCommonEnemySpeeds_Quadratic[v3])); } void Boulder_Func_8(uint16 j) { // 0xA68A1D Enemy_Boulder *E = Get_Boulder(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; int v3 = j >> 1; - bool v4 = __CFADD__uint16(kCommonEnemySpeeds_Linear[v3 + 1], x_subpos); - uint16 v5 = kCommonEnemySpeeds_Linear[v3 + 1] + x_subpos; - if (v4) - ++E->base.x_pos; - E->base.x_subpos = v5; - E->base.x_pos += kCommonEnemySpeeds_Linear[v3]; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[v3 + 1], kCommonEnemySpeeds_Linear[v3])); } void Boulder_Func_9(uint16 j) { // 0xA68A3A Enemy_Boulder *E = Get_Boulder(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; int v3 = j >> 1; - bool v4 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v3], y_subpos); - uint16 v5 = kCommonEnemySpeeds_Quadratic[v3] + y_subpos; - if (v4) - ++E->base.y_pos; - E->base.y_subpos = v5; - E->base.y_pos += kCommonEnemySpeeds_Quadratic[v3 + 1]; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v3 + 1], kCommonEnemySpeeds_Quadratic[v3])); } @@ -827,10 +809,7 @@ void NuclearWaffle_Func_2(void) { // 0xA69682 E->base.y_pos = E->nwe_var_27 + SineMult8bit(v5, E->nwe_var_D); NuclearWaffle_Func_3(varE32); NuclearWaffle_Func_4(varE32); - uint16 nwe_var_20 = E->nwe_var_20; - bool v7 = __CFADD__uint16(E->nwe_var_24, nwe_var_20); - E->nwe_var_20 = E->nwe_var_24 + nwe_var_20; - E->nwe_var_21 += E->nwe_var_25 + v7; + AddToHiLo(&E->nwe_var_21, &E->nwe_var_20, __PAIR32__(E->nwe_var_25, E->nwe_var_24)); } void NuclearWaffle_Func_3(uint16 varE32) { // 0xA69721 diff --git a/src/sm_a7.c b/src/sm_a7.c index e12da16..4f73bcf 100644 --- a/src/sm_a7.c +++ b/src/sm_a7.c @@ -2341,35 +2341,23 @@ void Phantoon_AdjustSpeedLeftSideClockwise(void) { // 0xA7D114 uint16 phant_var_D = E->phant_var_D; if (phant_var_D) { if ((phant_var_D & 1) != 0) { - uint16 phant_var_B = E->phant_var_B; - bool v3 = __CFADD__uint16(g_word_A7CD77, phant_var_B); - E->phant_var_B = g_word_A7CD77 + phant_var_B; - uint16 v6 = g_word_A7CD79 + v3 + E->phant_var_C; - E->phant_var_C = v6; - if ((int16)(v6 - g_word_A7CD7D) >= 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, __PAIR32__(g_word_A7CD79, g_word_A7CD77)); + if ((int16)(E->phant_var_C - g_word_A7CD7D) >= 0) { E->phant_var_C = g_word_A7CD7D; E->phant_var_B = 0; ++E->phant_var_D; } } else { - uint16 v7 = E->phant_var_B; - bool v3 = v7 < g_word_A7CD77; - E->phant_var_B = v7 - g_word_A7CD77; - uint16 v8 = E->phant_var_C - (v3 + g_word_A7CD79); - E->phant_var_C = v8; - if (v8 == g_word_A7CD7F || (int16)(v8 - g_word_A7CD7F) < 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, -(int32)__PAIR32__(g_word_A7CD79, g_word_A7CD77)); + if (E->phant_var_C == g_word_A7CD7F || (int16)(E->phant_var_C - g_word_A7CD7F) < 0) { E->phant_var_C = g_word_A7CD7F + 1; E->phant_var_B = 0; E->phant_var_D = 0; } } } else { - uint16 v2 = E->phant_var_B; - bool v3 = __CFADD__uint16(g_word_A7CD73, v2); - E->phant_var_B = g_word_A7CD73 + v2; - uint16 v4 = g_word_A7CD75 + v3 + E->phant_var_C; - E->phant_var_C = v4; - if ((int16)(v4 - g_word_A7CD7B) >= 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, __PAIR32__(g_word_A7CD75, g_word_A7CD73)); + if ((int16)(E->phant_var_C - g_word_A7CD7B) >= 0) { E->phant_var_C = g_word_A7CD7B - 1; E->phant_var_B = 0; ++E->phant_var_D; @@ -2382,35 +2370,23 @@ void Phantoon_AdjustSpeedRightSideClockwise(void) { // 0xA7D193 uint16 phant_var_D = E->phant_var_D; if (phant_var_D) { if ((phant_var_D & 1) != 0) { - uint16 phant_var_B = E->phant_var_B; - bool v3 = phant_var_B < g_word_A7CD85; - E->phant_var_B = phant_var_B - g_word_A7CD85; - uint16 v6 = E->phant_var_C - (v3 + g_word_A7CD87); - E->phant_var_C = v6; - if (v6 == g_word_A7CD8B || (int16)(v6 - g_word_A7CD8B) < 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, -(int32)__PAIR32__(g_word_A7CD87, g_word_A7CD85)); + if (E->phant_var_C == g_word_A7CD8B || (int16)(E->phant_var_C - g_word_A7CD8B) < 0) { E->phant_var_C = g_word_A7CD8B + 1; E->phant_var_B = 0; ++E->phant_var_D; } } else { - uint16 v7 = E->phant_var_B; - bool v3 = __CFADD__uint16(g_word_A7CD85, v7); - E->phant_var_B = g_word_A7CD85 + v7; - uint16 v8 = g_word_A7CD87 + v3 + E->phant_var_C; - E->phant_var_C = v8; - if ((int16)(v8 - g_word_A7CD8D) >= 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, __PAIR32__(g_word_A7CD87, g_word_A7CD85)); + if ((int16)(E->phant_var_C - g_word_A7CD8D) >= 0) { E->phant_var_C = g_word_A7CD8D; E->phant_var_B = 0; E->phant_var_D = 0; } } } else { - uint16 v2 = E->phant_var_B; - bool v3 = v2 < g_word_A7CD81; - E->phant_var_B = v2 - g_word_A7CD81; - uint16 v4 = E->phant_var_C - (v3 + g_word_A7CD83); - E->phant_var_C = v4; - if (v4 == g_word_A7CD89 || (int16)(v4 - g_word_A7CD89) < 0) { + AddToHiLo(&E->phant_var_C, &E->phant_var_B, -(int32)__PAIR32__(g_word_A7CD83, g_word_A7CD81)); + if (E->phant_var_C == g_word_A7CD89 || (int16)(E->phant_var_C - g_word_A7CD89) < 0) { E->phant_var_C = (uint16)(g_word_A7CD89 + 2); E->phant_var_B = 0; ++E->phant_var_D; @@ -2441,86 +2417,59 @@ void Phantoon_MoveInFigure8_RightSideClockwise(uint16 j, uint16 r20) { // 0xA7D } void Phantoon_MoveInSwoopingPattern(uint16 k) { // 0xA7D2D1 - Enemy_Phantoon *Phantoon; - Enemy_Phantoon *v2; int16 phant_var_E; uint16 v4; uint16 v5; uint16 v6; - Enemy_Phantoon *v7; - Enemy_Phantoon *v8; - uint16 v9; - uint16 x_subpos; - bool v11; // cf - uint16 v12; int16 v13; - uint16 v14; - uint16 y_subpos; - uint16 v16; - Phantoon = Get_Phantoon(0x80); - v2 = Phantoon; - phant_var_E = Phantoon->phant_var_E; + Enemy_Phantoon *E2 = Get_Phantoon(0x80); + phant_var_E = E2->phant_var_E; if (phant_var_E < 0) { v6 = phant_var_E - 2; - Phantoon->phant_var_E = v6; + E2->phant_var_E = v6; v4 = v6 & 0x7FFF; if (!v4) { v4 = 0; - Phantoon->phant_var_E = 0; + E2->phant_var_E = 0; } } else { v4 = phant_var_E + 2; - Phantoon->phant_var_E = v4; + E2->phant_var_E = v4; if (!sign16(v4 - 256)) { v5 = v4 | 0x8000; - Phantoon->phant_var_E = v5; + E2->phant_var_E = v5; v4 = v5 & 0x7FFF; } } - v7 = Get_Phantoon(0); - v8 = v7; - if ((int16)(v4 - v7->base.x_pos) < 0) { - if (!sign16(v2->phant_var_C + 2047)) - v2->phant_var_C -= 32; - } else if (sign16(v2->phant_var_C - 2048)) { - v2->phant_var_C += 32; + Enemy_Phantoon *E0 = Get_Phantoon(0); + if ((int16)(v4 - E0->base.x_pos) < 0) { + if (!sign16(E2->phant_var_C + 2047)) + E2->phant_var_C -= 32; + } else if (sign16(E2->phant_var_C - 2048)) { + E2->phant_var_C += 32; } - v9 = swap16(v2->phant_var_C); - uint16 r20 = v9 & 0xFF00; - uint16 r18 = (int8)v9; - x_subpos = v7->base.x_subpos; - v11 = __CFADD__uint16(r20, x_subpos); - v7->base.x_subpos = r20 + x_subpos; - v12 = r18 + v11 + v7->base.x_pos; - v7->base.x_pos = v12; - if (sign16(v12 + 64)) { - v7->base.x_pos = -64; - } else if (!sign16(v12 - 448)) { - v7->base.x_pos = 448; + AddToHiLo(&E0->base.x_pos, &E0->base.x_subpos, INT16_SHL8(E2->phant_var_C)); + if (sign16(E0->base.x_pos + 64)) { + E0->base.x_pos = -64; + } else if (!sign16(E0->base.x_pos - 448)) { + E0->base.x_pos = 448; } if (Get_Phantoon(k)->phant_var_F == FUNC16(Phantoon_CompleteSwoopAfterFatalShot)) v13 = 112; else v13 = samus_y_pos - 48; - if ((int16)(v13 - v8->base.y_pos) < 0) { - if (!sign16(v2->phant_var_D + 1535)) - v2->phant_var_D -= 64; - } else if (sign16(v2->phant_var_D - 1536)) { - v2->phant_var_D += 64; + if ((int16)(v13 - E0->base.y_pos) < 0) { + if (!sign16(E2->phant_var_D + 1535)) + E2->phant_var_D -= 64; + } else if (sign16(E2->phant_var_D - 1536)) { + E2->phant_var_D += 64; } - v14 = swap16(v2->phant_var_D); - r20 = v14 & 0xFF00; - r18 = (int8)v14; - y_subpos = v8->base.y_subpos; - v11 = __CFADD__uint16(r20, y_subpos); - v8->base.y_subpos = r20 + y_subpos; - v16 = r18 + v11 + v8->base.y_pos; - v8->base.y_pos = v16; - if (sign16(v16 - 64)) { - v8->base.y_pos = 64; - } else if (!sign16(v16 - 216)) { - v8->base.y_pos = 216; + AddToHiLo(&E0->base.x_pos, &E0->base.x_subpos, INT16_SHL8(E2->phant_var_D)); + if (sign16(E0->base.y_pos - 64)) { + E0->base.y_pos = 64; + } else if (!sign16(E0->base.y_pos - 216)) { + E0->base.y_pos = 216; } } @@ -3340,12 +3289,8 @@ uint8 Etecoon_Func_2(uint16 k) { // 0xA7E974 uint8 Etecoon_Func_3(uint16 k) { // 0xA7E983 Enemy_Etecoon *E = Get_Etecoon(k); int32 amt = __PAIR32__(E->etecoon_var_A, E->etecoon_var_B); - if (sign16(E->etecoon_var_A - 5)) { - uint16 etecoo_var_B = E->etecoon_var_B; - bool v3 = __CFADD__uint16(samus_y_subaccel, etecoo_var_B); - E->etecoon_var_B = samus_y_subaccel + etecoo_var_B; - E->etecoon_var_A += samus_y_accel + v3; - } + if (sign16(E->etecoon_var_A - 5)) + AddToHiLo(&E->etecoon_var_A, &E->etecoon_var_B, __PAIR32__(samus_y_accel, samus_y_subaccel)); return Enemy_MoveDown(k, amt); } @@ -3837,12 +3782,8 @@ int32 Dachora_Func_6(uint16 k) { // 0xA7F6D5 E->dachor_var_B = g_word_A7F4D7; return __PAIR32__(g_word_A7F4D5, g_word_A7F4D7); } - bool v7 = __CFADD__uint16(g_word_A7F4DB, E->dachor_var_B); - uint16 v8 = g_word_A7F4DB + E->dachor_var_B; - uint16 v9 = g_word_A7F4D9 + v7 + E->dachor_var_A; - E->dachor_var_B = v8; - E->dachor_var_A = v9; - if ((v9 == 4 || v9 == 8) && !E->dachor_var_B) + AddToHiLo(&E->dachor_var_A, &E->dachor_var_B, __PAIR32__(g_word_A7F4D9, g_word_A7F4DB)); + if ((E->dachor_var_A == 4 || E->dachor_var_A == 8) && !E->dachor_var_B) E->base.current_instruction += 28; return __PAIR32__(E->dachor_var_A, E->dachor_var_B); } @@ -3886,19 +3827,12 @@ void Dachora_Func_8(uint16 k) { // 0xA7F806 Dachora_Func_10(k); Dachora_Func_9(k); Enemy_Dachora *E = Get_Dachora(k); - uint16 dachor_var_D = E->dachor_var_D; - bool v3 = __CFADD__uint16(samus_y_subaccel, dachor_var_D); - E->dachor_var_D = samus_y_subaccel + dachor_var_D; - E->dachor_var_C += samus_y_accel + v3; - - v3 = __CFADD__uint16(E->dachor_var_D, E->dachor_var_B); - uint16 v5 = E->dachor_var_D + E->dachor_var_B; - uint16 v6 = E->dachor_var_C + v3 + E->dachor_var_A; - E->dachor_var_B = v5; - E->dachor_var_A = v6; + AddToHiLo(&E->dachor_var_C, &E->dachor_var_D, __PAIR32__(samus_y_accel, samus_y_subaccel)); + AddToHiLo(&E->dachor_var_A, &E->dachor_var_B, __PAIR32__(E->dachor_var_C, E->dachor_var_D)); + uint16 v6 = E->dachor_var_A; if (!sign16(v6 - 15)) v6 = 15; - int32 amt = __PAIR32__(v6, v5); + int32 amt = __PAIR32__(v6, E->dachor_var_B); if (Enemy_MoveDown(k, -amt)) { if (E->dachor_parameter_1) { E->base.current_instruction = addr_kDachora_Ilist_F3FF; @@ -3966,13 +3900,8 @@ void Dachora_Func_10(uint16 k) { // 0xA7F90A void Dachora_Func_11(uint16 k) { // 0xA7F935 Enemy_Dachora *E = Get_Dachora(k); - uint16 dachor_var_B = E->dachor_var_B; - bool v3 = __CFADD__uint16(samus_y_subaccel, dachor_var_B); - uint16 v4 = samus_y_subaccel + dachor_var_B; - E->dachor_var_B = v4; - uint16 v5 = samus_y_accel + v3 + E->dachor_var_A; - E->dachor_var_A = v5; - int32 amt = __PAIR32__(v5, v4); + AddToHiLo(&E->dachor_var_A, &E->dachor_var_B, __PAIR32__(samus_y_accel, samus_y_subaccel)); + int32 amt = __PAIR32__(E->dachor_var_A, E->dachor_var_B); if (!sign16((amt >> 16) - 10)) amt = INT16_SHL16(10); if (Enemy_MoveDown(k, amt)) { diff --git a/src/sm_a8.c b/src/sm_a8.c index 2c80213..9d3ed77 100644 --- a/src/sm_a8.c +++ b/src/sm_a8.c @@ -269,21 +269,9 @@ void MiniDraygon_Func_5(void) { // 0xA88933 MiniDraygon_Func_1(); Enemy_MiniDraygon *E = Get_MiniDraygon(cur_enemy_index); if (E->mdn_var_00) { - E->base.y_pos += E->mdn_var_04; - uint16 y_subpos = E->base.y_subpos; - bool v3 = __CFADD__uint16(E->mdn_var_03, y_subpos); - uint16 v6 = E->mdn_var_03 + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v6; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->mdn_var_04, E->mdn_var_03)); } else { - E->base.y_pos += E->mdn_var_06; - uint16 v2 = E->base.y_subpos; - bool v3 = __CFADD__uint16(E->mdn_var_05, v2); - uint16 v4 = E->mdn_var_05 + v2; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->mdn_var_06, E->mdn_var_05)); } if ((--E->mdn_var_E & 0x8000) != 0) { E->mdn_var_E = HIBYTE(E->mdn_parameter_2); @@ -332,20 +320,8 @@ void MiniDraygon_Func_8(void) { // 0xA88A34 void MiniDraygon_Func_9(void) { // 0xA88A3B MiniDraygon_Func_11(); Enemy_MiniDraygon *E = Get_MiniDraygon(cur_enemy_index); - E->base.x_pos += E->mdn_var_07; - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->mdn_var_08, x_subpos); - uint16 v4 = E->mdn_var_08 + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.y_pos += E->mdn_var_09; - uint16 y_subpos = E->base.y_subpos; - v3 = __CFADD__uint16(E->mdn_var_0A, y_subpos); - uint16 v6 = E->mdn_var_0A + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v6; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->mdn_var_07, E->mdn_var_08)); + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->mdn_var_09, E->mdn_var_0A)); } void MiniDraygon_Func_10(void) { // 0xA88A78 @@ -562,10 +538,8 @@ void Fune_Init(void) { // 0xA896E3 E->fune_var_A = addr_off_A896DF; E->fune_var_B = FUNC16(Fune_Func_2); } - if ((E->fune_parameter_1 & 0xF0) != 0) { - ++E->fune_var_A; - ++E->fune_var_A; - } + if ((E->fune_parameter_1 & 0xF0) != 0) + E->fune_var_A += 2; Fune_Func_4(); E->fune_var_C = HIBYTE(E->fune_parameter_2); E->fune_var_F = HIBYTE(E->fune_parameter_1); @@ -735,9 +709,10 @@ void WreckedShipGhost_Func_3(uint16 k) { // 0xA89C31 } E->wsgt_var_B = v5; E->wsgt_var_C = wsgt_var_C + 2; - if ((wsgt_var_C & 2) == 0) - LABEL_6: - E->base.properties &= ~kEnemyProps_Invisible; + if ((wsgt_var_C & 2) == 0) { +LABEL_6: + E->base.properties &= ~kEnemyProps_Invisible; + } } } @@ -752,25 +727,9 @@ void WreckedShipGhost_Func_4(uint16 k) { // 0xA89C69 void WreckedShipGhost_Func_5(uint16 k) { // 0xA89C8A Enemy_WreckedShipGhost *E = Get_WreckedShipGhost(k); - uint16 y_subpos = E->base.y_subpos; - bool v3 = __CFADD__uint16(E->wsgt_var_01, y_subpos); - E->base.y_subpos = E->wsgt_var_01 + y_subpos; - E->base.y_pos += E->wsgt_var_02 + v3; - uint16 wsgt_var_01 = E->wsgt_var_01; - uint16 v5; - if ((int16)(E->base.y_pos - E->wsgt_var_00) < 0) { - v3 = __CFADD__uint16(g_word_A89AA0, wsgt_var_01); - E->wsgt_var_01 = g_word_A89AA0 + wsgt_var_01; - v5 = v3 + E->wsgt_var_02; - } else { - v3 = wsgt_var_01 < g_word_A89AA0; - E->wsgt_var_01 = wsgt_var_01 - g_word_A89AA0; - v5 = E->wsgt_var_02 - v3; - } - E->wsgt_var_02 = v5; - uint16 v6 = E->wsgt_var_B - 1; - E->wsgt_var_B = v6; - if (!v6) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->wsgt_var_02, E->wsgt_var_01)); + AddToHiLo(&E->wsgt_var_02, &E->wsgt_var_01, ((int16)(E->base.y_pos - E->wsgt_var_00) < 0) ? g_word_A89AA0 : -g_word_A89AA0); + if (--E->wsgt_var_B == 0) { E->wsgt_var_A = FUNC16(WreckedShipGhost_Func_4); E->base.properties |= kEnemyProps_Tangible; // todo: this must be swap16 it seems @@ -780,8 +739,7 @@ void WreckedShipGhost_Func_5(uint16 k) { // 0xA89C8A do { target_palettes[v9 >> 1] = 0x7FFF; v9 += 2; - n--; - } while ((n & 0x8000) == 0); + } while ((--n & 0x8000) == 0); } } @@ -811,19 +769,13 @@ void WreckedShipGhost_Func_7(uint16 k) { // 0xA89D36 E->wsgt_var_0D = g_word_A89A9E; v4 = 0; if ((int16)(samus_x_pos - E->wsgt_var_06) >= 0) { - if (samus_x_pos == E->wsgt_var_06) - v4 = 4; - else - v4 = 8; + v4 = (samus_x_pos == E->wsgt_var_06) ? 4 : 8; } if (v4 == E->wsgt_var_05) { v7 = 0; v9 = samus_y_pos - E->wsgt_var_0A; if (v9 >= 0) { - if (v9) - v7 = 24; - else - v7 = 12; + v7 = v9 ? 24 : 12; } if (v7 == E->wsgt_var_09) { uint16 v10 = E->wsgt_var_0E - 1; @@ -895,7 +847,6 @@ uint16 WreckedShipGhost_Func_8(void) { // 0xA89E88 v8 = v7 - 32; else v8 = v7 + 32; - r18 = v8; palette_buffer[v4] = v8 | palette_buffer[v4] & 0xFC1F; ++v0; } @@ -1109,57 +1060,19 @@ void YappingMaw_Func_7(void) { // 0xA8A402 } void YappingMaw_Func_8(void) { // 0xA8A445 - int16 v9; - int16 v11; // tt - int16 v13; // tt - int16 v16; - int16 v17; // tt - int16 v19; - int16 v20; // tt - int16 v22; - int16 v23; // tt - int16 v25; - int16 v26; // tt - int16 v28; - int16 v29; // tt - int16 v31; - int16 v32; // tt - uint16 v8; - Enemy_YappingMaw *E = Get_YappingMaw(cur_enemy_index); uint16 r20 = E->ymw_var_B >> 2; if (E->ymw_var_2F) { - bool v3 = __CFADD__uint16(r20, 128); - v9 = r20 + 128; - E->ymw_var_21 = r20 + 128; - v11 = v3; - v3 = __CFADD__uint16(v3, v9); - uint16 v10 = v11 + v9; - v3 |= __CFADD__uint16(r20, v10); - v10 += r20; - E->ymw_var_22 = v10; - v13 = v3; - v3 = __CFADD__uint16(v3, v10); - uint16 v12 = v13 + v10; - v3 |= __CFADD__uint16(r20, v12); - v12 += r20; - E->ymw_var_23 = v12; - v8 = r20 + v3 + v12; + E->ymw_var_21 = 128 + r20; + E->ymw_var_22 = 128 + r20 * 2; + E->ymw_var_23 = 128 + r20 * 3; + E->ymw_var_24 = 128 + r20 * 4; } else { - uint16 v2 = 128 - r20; - bool v3 = r20 <= 0x80; E->ymw_var_21 = 128 - r20; - uint16 v5 = !v3 + r20; - v3 = v2 < v5; - uint16 v4 = v2 - v5; - E->ymw_var_22 = v4; - uint16 v7 = v3 + r20; - v3 = v4 < v7; - uint16 v6 = v4 - v7; - E->ymw_var_23 = v6; - v8 = v6 - (v3 + r20); + E->ymw_var_22 = 128 - r20 * 2; + E->ymw_var_23 = 128 - r20 * 3; + E->ymw_var_24 = 128 - r20 * 4; } - E->ymw_var_24 = v8; uint16 varE32 = E->ymw_var_09; E->ymw_var_00 = YappingMaw_Func_16(E->ymw_var_21, varE32) - E->ymw_var_0E; E->ymw_var_02 = YappingMaw_Func_16(E->ymw_var_22, varE32) - E->ymw_var_0E; @@ -1174,46 +1087,14 @@ void YappingMaw_Func_8(void) { // 0xA8A445 YappingMaw_Func_5(); YappingMaw_Func_6(); YappingMaw_Func_7(); - uint16 ymw_var_00 = E->ymw_var_00; - bool v3 = __CFADD__uint16(E->ymw_var_27, ymw_var_00); - E->ymw_var_00 = E->ymw_var_27 + ymw_var_00; - uint16 ymw_var_01 = E->ymw_var_01; - v17 = v3; - v3 = __CFADD__uint16(v3, ymw_var_01); - v16 = v17 + ymw_var_01; - v3 |= __CFADD__uint16(E->ymw_var_28, v16); - E->ymw_var_01 = E->ymw_var_28 + v16; - uint16 ymw_var_02 = E->ymw_var_02; - v20 = v3; - v3 = __CFADD__uint16(v3, ymw_var_02); - v19 = v20 + ymw_var_02; - v3 |= __CFADD__uint16(E->ymw_var_29, v19); - E->ymw_var_02 = E->ymw_var_29 + v19; - uint16 ymw_var_03 = E->ymw_var_03; - v23 = v3; - v3 = __CFADD__uint16(v3, ymw_var_03); - v22 = v23 + ymw_var_03; - v3 |= __CFADD__uint16(E->ymw_var_2A, v22); - E->ymw_var_03 = E->ymw_var_2A + v22; - uint16 ymw_var_04 = E->ymw_var_04; - v26 = v3; - v3 = __CFADD__uint16(v3, ymw_var_04); - v25 = v26 + ymw_var_04; - v3 |= __CFADD__uint16(E->ymw_var_2B, v25); - E->ymw_var_04 = E->ymw_var_2B + v25; - uint16 ymw_var_05 = E->ymw_var_05; - v29 = v3; - v3 = __CFADD__uint16(v3, ymw_var_05); - v28 = v29 + ymw_var_05; - v3 |= __CFADD__uint16(E->ymw_var_2C, v28); - E->ymw_var_05 = E->ymw_var_2C + v28; - uint16 ymw_var_06 = E->ymw_var_06; - v32 = v3; - v3 = __CFADD__uint16(v3, ymw_var_06); - v31 = v32 + ymw_var_06; - v3 |= __CFADD__uint16(E->ymw_var_2D, v31); - E->ymw_var_06 = E->ymw_var_2D + v31; - E->ymw_var_07 += E->ymw_var_2E + v3; + E->ymw_var_00 += E->ymw_var_27; + E->ymw_var_01 += E->ymw_var_28; + E->ymw_var_02 += E->ymw_var_29; + E->ymw_var_03 += E->ymw_var_2A; + E->ymw_var_04 += E->ymw_var_2B; + E->ymw_var_05 += E->ymw_var_2C; + E->ymw_var_06 += E->ymw_var_2D; + E->ymw_var_07 += E->ymw_var_2E; E->base.x_pos = E->ymw_var_06 + E->ymw_var_0C; E->base.y_pos = E->ymw_var_07 + E->ymw_var_0D; YappingMaw_Func_9(cur_enemy_index); @@ -1221,10 +1102,7 @@ void YappingMaw_Func_8(void) { // 0xA8A445 if (!sign16(E->ymw_var_B - 128)) { E->ymw_var_B = 128; E->ymw_var_C = 0; - ++E->ymw_var_D; - ++E->ymw_var_D; - ++E->ymw_var_D; - ++E->ymw_var_D; + E->ymw_var_D += 4; } LABEL_19: if (E->ymw_var_30) @@ -1257,13 +1135,7 @@ LABEL_19: void YappingMaw_Func_9(uint16 k) { // 0xA8A63E Enemy_YappingMaw *E = Get_YappingMaw(k); int v2 = E->ymw_var_D >> 1; - E->ymw_var_B += kCommonEnemySpeeds_Quadratic[v2 + 1]; - uint16 ymw_var_C = E->ymw_var_C; - bool v4 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v2], ymw_var_C); - uint16 v5 = kCommonEnemySpeeds_Quadratic[v2] + ymw_var_C; - if (v4) - ++E->ymw_var_B; - E->ymw_var_C = v5; + AddToHiLo(&E->ymw_var_B, &E->ymw_var_C, __PAIR32__(kCommonEnemySpeeds_Quadratic[v2 + 1], kCommonEnemySpeeds_Quadratic[v2])); E->ymw_var_D += 8; } @@ -1737,17 +1609,13 @@ void NorfairLavaMan_Func_10(uint16 k) { // 0xA8B1DD } void NorfairLavaMan_Func_11(uint16 k) { // 0xA8B204 - EnemySpawnData *v3; - Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; - v3 = gEnemySpawnData(cur_enemy_index); - bool v4 = __CFADD__uint16(v3[31].ypos2, y_subpos); - E->base.y_subpos = v3[31].ypos2 + y_subpos; - if (v4) - ++E->nlmn_var_E; - E->base.y_pos += v3[31].field_14 + v4; - E->nlmn_var_E += v3[31].field_14; + EnemySpawnData *v3 = gEnemySpawnData(cur_enemy_index); + + uint32 v = v3[31].ypos2 + E->base.y_subpos; + E->base.y_subpos = v; + E->base.y_pos += v3[31].field_14 + (v >> 16); + E->nlmn_var_E += v3[31].field_14 + (v >> 16); NorfairLavaMan_Func_12(cur_enemy_index); } @@ -1787,16 +1655,10 @@ void NorfairLavaMan_Func_13(void) { // 0xA8B295 Enemy_NorfairLavaMan *E = Get_NorfairLavaMan(cur_enemy_index); v2 = gEnemySpawnData(cur_enemy_index); - E->base.y_pos += v2[31].xpos2; - E->nlmn_var_E += v2[31].xpos2; - uint16 y_subpos = E->base.y_subpos; - bool v4 = __CFADD__uint16(v2[31].field_E, y_subpos); - uint16 v5 = v2[31].field_E + y_subpos; - if (v4) { - ++E->base.y_pos; - ++E->nlmn_var_E; - } - E->base.y_subpos = v5; + bool v4 = __CFADD__uint16(v2[31].field_E, E->base.y_subpos); + E->base.y_subpos = v2[31].field_E + E->base.y_subpos; + E->base.y_pos += v2[31].xpos2 + v4; + E->nlmn_var_E += v2[31].xpos2 + v4; NorfairLavaMan_Func_14(cur_enemy_index); } @@ -1810,8 +1672,7 @@ void NorfairLavaMan_Func_14(uint16 k) { // 0xA8B2C5 gEnemySpawnData(k)[31].field_4 = 0; E->nlmn_var_F = FUNC16(NorfairLavaMan_Func_10); } else if ((int16)(-nlmn_var_E - g_word_A8AF55[(uint16)(E->nlmn_var_B - 2) >> 1]) < 0) { - --E->nlmn_var_B; - --E->nlmn_var_B; + E->nlmn_var_B -= 2; E->base.y_pos -= 8; E->nlmn_var_D = g_off_A8AF67[E->nlmn_var_B >> 1]; NorfairLavaMan_Func_20(); @@ -2507,10 +2368,7 @@ void MaridiaFloater_Func_5(uint16 k) { // 0xA8C2CF v6 = 0; E->mfr_var_C = v6; } - uint16 mfr_var_B = E->mfr_var_B; - bool v8 = __CFADD__uint16(g_word_A8C1BB, mfr_var_B); - E->mfr_var_B = g_word_A8C1BB + mfr_var_B; - E->mfr_var_A += g_word_A8C1B9 + v8; + AddToHiLo(&E->mfr_var_A, &E->mfr_var_B, __PAIR32__(g_word_A8C1B9, g_word_A8C1BB)); if (Enemy_MoveDown(k, __PAIR32__(E->mfr_var_A, E->mfr_var_B)) || (int16)(enemy_drawing_queue_sizes[(k >> 1) + 1] - g_word_A8C19F - E->base.y_pos) >= 0) { uint16 mfr_var_C = E->mfr_var_C; @@ -2534,10 +2392,7 @@ void MaridiaFloater_Func_6(uint16 k) { // 0xA8C36B bool v3 = (--E->mfr_var_D & 0x8000) != 0; if (!v2 && !v3) { LABEL_9:; - uint16 mfr_var_B = E->mfr_var_B; - bool v9 = __CFADD__uint16(g_word_A8C1BB, mfr_var_B); - E->mfr_var_B = g_word_A8C1BB + mfr_var_B; - E->mfr_var_A += g_word_A8C1B9 + v9; + AddToHiLo(&E->mfr_var_A, &E->mfr_var_B, __PAIR32__(g_word_A8C1B9, g_word_A8C1BB)); Enemy_MoveDown(k, __PAIR32__(E->mfr_var_A, E->mfr_var_B)); goto LABEL_10; } @@ -2580,16 +2435,10 @@ void MaridiaFloater_Func_7(uint16 k) { // 0xA8C3E1 v6 = 0; E->mfr_var_C = v6; } - uint16 mfr_var_B = E->mfr_var_B; - bool v8 = __CFADD__uint16(g_word_A8C1BB, mfr_var_B); - E->mfr_var_B = g_word_A8C1BB + mfr_var_B; - E->mfr_var_A += g_word_A8C1B9 + v8; + AddToHiLo(&E->mfr_var_A, &E->mfr_var_B, __PAIR32__(g_word_A8C1B9, g_word_A8C1BB)); if (Enemy_MoveDown(k, __PAIR32__(E->mfr_var_A, E->mfr_var_B)) - || (int16)(enemy_drawing_queue_sizes[(k >> 1) + 1] - - enemy_drawing_queue_sizes[(k >> 1) + 3] - - E->base.y_pos) >= 0) { - uint16 mfr_var_C = E->mfr_var_C; - if (!mfr_var_C || mfr_var_C == 6) + || (int16)(enemy_drawing_queue_sizes[(k >> 1) + 1] - enemy_drawing_queue_sizes[(k >> 1) + 3] - E->base.y_pos) >= 0) { + if (!E->mfr_var_C || E->mfr_var_C == 6) E->mfr_var_F = FUNC16(MaridiaFloater_Func_9); else E->mfr_var_F = FUNC16(MaridiaFloater_Func_8); @@ -2625,10 +2474,7 @@ void MaridiaFloater_Func_8(uint16 k) { // 0xA8C469 E->mfr_var_C = v7; } LABEL_11:; - uint16 mfr_var_B = E->mfr_var_B; - bool v9 = __CFADD__uint16(g_word_A8C1BB, mfr_var_B); - E->mfr_var_B = g_word_A8C1BB + mfr_var_B; - E->mfr_var_A += g_word_A8C1B9 + v9; + AddToHiLo(&E->mfr_var_A, &E->mfr_var_B, __PAIR32__(g_word_A8C1B9, g_word_A8C1BB)); Enemy_MoveDown(k, __PAIR32__(E->mfr_var_A, E->mfr_var_B)); goto LABEL_12; } @@ -2663,10 +2509,7 @@ void MaridiaFloater_Func_10(uint16 k) { // 0xA8C500 void MaridiaFloater_Func_11(uint16 k) { // 0xA8C51D Enemy_MaridiaFloater *E = Get_MaridiaFloater(k); - uint16 mfr_var_B = E->mfr_var_B; - bool v3 = __CFADD__uint16(g_word_A8C1BF, mfr_var_B); - E->mfr_var_B = g_word_A8C1BF + mfr_var_B; - E->mfr_var_A += g_word_A8C1BD + v3; + AddToHiLo(&E->mfr_var_A, &E->mfr_var_B, __PAIR32__(g_word_A8C1BD, g_word_A8C1BF)); Enemy_MoveDown(k, __PAIR32__(E->mfr_var_A, E->mfr_var_B)); int v4 = k >> 1; if ((int16)(E->base.y_pos - enemy_drawing_queue_sizes[v4 + 1]) >= 0) { @@ -2806,9 +2649,7 @@ void WreckedShipRobot_Main(void) { // 0xA8CC36 Enemy_WreckedShipRobot *E = Get_WreckedShipRobot(cur_enemy_index); if (!Enemy_MoveDown(cur_enemy_index, __PAIR32__(E->wsrt_var_F, E->wsrt_var_E))) { ++E->base.instruction_timer; - uint16 wsrt_var_E = E->wsrt_var_E; - E->wsrt_var_E = wsrt_var_E + 0x8000; - E->wsrt_var_F += __CFADD__uint16(wsrt_var_E, 0x8000); + AddToHiLo(&E->wsrt_var_F, &E->wsrt_var_E, 0x8000); } } @@ -3303,10 +3144,7 @@ void WalkingLavaSeahorse_Init(void) { // 0xA8DCCD E->wlse_var_A = FUNC16(WalkingLavaSeahorse_Func_3); WalkingLavaSeahorse_Func_1(cur_enemy_index); do { - uint16 wlse_var_C = E->wlse_var_C; - bool v4 = __CFADD__uint16(E->base.y_subpos, wlse_var_C); - E->base.y_subpos += wlse_var_C; - E->base.y_pos += v4 + E->wlse_var_B; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->wlse_var_B, E->wlse_var_C)); } while ((WalkingLavaSeahorse_Func_2(cur_enemy_index) & 0x8000) != 0); while (1) { if (Enemy_MoveDown(cur_enemy_index, __PAIR32__(E->wlse_var_B, E->wlse_var_C))) @@ -3329,12 +3167,8 @@ void WalkingLavaSeahorse_Func_1(uint16 k) { // 0xA8DD37 uint16 WalkingLavaSeahorse_Func_2(uint16 k) { // 0xA8DD55 Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(k); - uint16 wlse_var_C = E->wlse_var_C; - bool v3 = __CFADD__uint16(E->wlse_var_01, wlse_var_C); - E->wlse_var_C = E->wlse_var_01 + wlse_var_C; - uint16 result = E->wlse_var_00 + v3 + E->wlse_var_B; - E->wlse_var_B = result; - return result; + AddToHiLo(&E->wlse_var_B, &E->wlse_var_C, __PAIR32__(E->wlse_var_00, E->wlse_var_01)); + return E->wlse_var_B; } void CallWalkingLavaSeahorseFunc(uint32 ea, uint16 k) { @@ -3380,10 +3214,7 @@ void WalkingLavaSeahorse_Func_3(uint16 k) { // 0xA8DD71 void WalkingLavaSeahorse_Func_4(uint16 k) { // 0xA8DDC6 Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(k); - uint16 wlse_var_C = E->wlse_var_C; - bool v3 = __CFADD__uint16(E->base.y_subpos, wlse_var_C); - E->base.y_subpos += wlse_var_C; - E->base.y_pos += v3 + E->wlse_var_B; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->wlse_var_B, E->wlse_var_C)); if ((WalkingLavaSeahorse_Func_2(k) & 0x8000) == 0) sub_A8DDDE(k); } @@ -3461,22 +3292,15 @@ void WalkingLavaSeahorse_Func_7(uint16 k) { // 0xA8DE4B void WalkingLavaSeahorse_Func_8(uint16 k) { // 0xA8DECD Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(k); - uint16 wlse_var_C = E->wlse_var_C; - bool v3 = __CFADD__uint16(E->base.y_subpos, wlse_var_C); - E->base.y_subpos += wlse_var_C; - E->base.y_pos += v3 + E->wlse_var_B; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->wlse_var_B, E->wlse_var_C)); if ((WalkingLavaSeahorse_Func_2(k) & 0x8000) == 0) E->wlse_var_A = FUNC16(WalkingLavaSeahorse_Func_9); } void WalkingLavaSeahorse_Func_9(uint16 k) { // 0xA8DEEC Enemy_WalkingLavaSeahorse *E = Get_WalkingLavaSeahorse(k); - uint16 wlse_var_C = E->wlse_var_C; - bool v3 = __CFADD__uint16(E->base.y_subpos, wlse_var_C); - E->base.y_subpos += wlse_var_C; - uint16 v4 = E->base.y_pos + v3 + E->wlse_var_B; - E->base.y_pos = v4; - if ((int16)(v4 - E->wlse_var_F) >= 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(E->wlse_var_B, E->wlse_var_C)); + if ((int16)(E->base.y_pos - E->wlse_var_F) >= 0) { E->base.y_pos = E->wlse_var_F; E->base.x_pos = E->wlse_var_02; E->wlse_var_A = FUNC16(WalkingLavaSeahorse_Func_3); @@ -3924,30 +3748,20 @@ void KiHunter_Func_2(uint16 k) { // 0xA8F3B8 } LABEL_9: if ((E->khr_var_04 & 0x8000) == 0) { - uint16 khr_var_03 = E->khr_var_03; - bool v4 = __CFADD__uint16(E->khr_var_05, khr_var_03); - E->khr_var_03 = E->khr_var_05 + khr_var_03; - uint16 khr_var_00 = E->khr_var_04 + v4 + E->khr_var_02; - if ((int16)(khr_var_00 - E->khr_var_00) >= 0) - khr_var_00 = E->khr_var_00; - E->khr_var_02 = khr_var_00; - uint16 v9 = E->khr_var_02 + E->khr_var_F; - E->khr_var_F = v9; - if (!sign16(v9 - 256)) { + AddToHiLo(&E->khr_var_02, &E->khr_var_03, __PAIR32__(E->khr_var_04, E->khr_var_05)); + if ((int16)(E->khr_var_02 - E->khr_var_00) >= 0) + E->khr_var_02 = E->khr_var_00; + E->khr_var_F += E->khr_var_02; + if (!sign16(E->khr_var_F - 256)) { E->khr_var_A = FUNC16(KiHunter_Func_1); return; } } else { - uint16 v3 = E->khr_var_03; - bool v4 = __CFADD__uint16(E->khr_var_05, v3); - E->khr_var_03 = E->khr_var_05 + v3; - uint16 v5 = E->khr_var_04 + v4 + E->khr_var_02; - if ((int16)(v5 - E->khr_var_00) < 0) - v5 = E->khr_var_00; - E->khr_var_02 = v5; - uint16 v6 = E->khr_var_02 + E->khr_var_F; - E->khr_var_F = v6; - if (sign16(v6 - 128)) { + AddToHiLo(&E->khr_var_02, &E->khr_var_03, __PAIR32__(E->khr_var_04, E->khr_var_05)); + if ((int16)(E->khr_var_02 - E->khr_var_00) < 0) + E->khr_var_02 = E->khr_var_00; + E->khr_var_F += E->khr_var_02; + if (sign16(E->khr_var_F - 128)) { E->khr_var_A = FUNC16(KiHunter_Func_1); return; } @@ -4005,10 +3819,7 @@ void KiHunter_Func_4(uint16 k) { // 0xA8F55A if (Enemy_MoveDown(k, __PAIR32__(E->khr_var_09, E->khr_var_08))) { E->khr_var_A = FUNC16(KiHunter_Func_5); } else { - uint16 khr_var_08 = E->khr_var_08; - bool v3 = __CFADD__uint16(g_word_A8F182, khr_var_08); - E->khr_var_08 = g_word_A8F182 + khr_var_08; - E->khr_var_09 += g_word_A8F184 + v3; + AddToHiLo(&E->khr_var_09, &E->khr_var_08, __PAIR32__(g_word_A8F184, g_word_A8F182)); } } @@ -4055,10 +3866,7 @@ void KiHunter_Func_6(uint16 k) { // 0xA8F5F0 E->khr_var_07 = -E->khr_var_07; } else { EnemyFunc_C8AD(k); - uint16 khr_var_08 = E->khr_var_08; - bool v3 = __CFADD__uint16(g_word_A8F182, khr_var_08); - E->khr_var_08 = g_word_A8F182 + khr_var_08; - E->khr_var_09 += g_word_A8F184 + v3; + AddToHiLo(&E->khr_var_09, &E->khr_var_08, __PAIR32__(g_word_A8F184, g_word_A8F182)); } } } diff --git a/src/sm_b3.c b/src/sm_b3.c index 124713b..ffc9c3f 100644 --- a/src/sm_b3.c +++ b/src/sm_b3.c @@ -291,15 +291,8 @@ void NorfairPipeBug_Func_3(uint16 k) { // 0xB38C52 void NorfairPipeBug_Func_4(void) { // 0xB38CA6 Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); E->base.properties &= ~kEnemyProps_Invisible; - uint16 y_subpos = E->base.y_subpos; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Linear[67], y_subpos); - uint16 v4 = kCommonEnemySpeeds_Linear[67] + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; - uint16 v5 = kCommonEnemySpeeds_Linear[66] + E->base.y_pos; - E->base.y_pos = v5; - if ((int16)(v5 - samus_y_pos) < 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[66], kCommonEnemySpeeds_Linear[67])); + if ((int16)(E->base.y_pos - samus_y_pos) < 0) { E->pbg_var_A = E->pbg_var_F; E->pbg_var_01 = E->base.y_pos; E->base.instruction_timer = 1; @@ -320,15 +313,8 @@ void NorfairPipeBug_Func_5(uint16 k) { // 0xB38CFF void NorfairPipeBug_Func_6(void) { // 0xB38D0C Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); ++E->pbg_var_C; - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(kCommonEnemySpeeds_Linear[67], y_subpos); - uint16 v3 = kCommonEnemySpeeds_Linear[67] + y_subpos; - if (v2) - ++E->base.y_pos; - E->base.y_subpos = v3; - uint16 v4 = kCommonEnemySpeeds_Linear[66] + E->base.y_pos; - E->base.y_pos = v4; - if ((int16)(v4 + 16 - E->pbg_var_01) < 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[66], kCommonEnemySpeeds_Linear[67])); + if ((int16)(E->base.y_pos + 16 - E->pbg_var_01) < 0) { E->base.y_pos = E->pbg_var_01 - 16; E->base.y_subpos = 0; E->pbg_var_A = FUNC16(NorfairPipeBug_Func_12); @@ -336,18 +322,10 @@ void NorfairPipeBug_Func_6(void) { // 0xB38D0C } void NorfairPipeBug_Func_7(void) { // 0xB38D4E - Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); ++E->pbg_var_C; - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(kCommonEnemySpeeds_Linear[67], y_subpos); - uint16 v3 = kCommonEnemySpeeds_Linear[67] + y_subpos; - if (v2) - ++E->base.y_pos; - E->base.y_subpos = v3; - uint16 v4 = kCommonEnemySpeeds_Linear[66] + E->base.y_pos; - E->base.y_pos = v4; - if ((int16)(v4 + 32 - E->pbg_var_01) < 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[66], kCommonEnemySpeeds_Linear[67])); + if ((int16)(E->base.y_pos + 32 - E->pbg_var_01) < 0) { E->base.y_pos = E->pbg_var_01 - 32; E->base.y_subpos = 0; E->pbg_var_A = FUNC16(NorfairPipeBug_Func_12); @@ -355,18 +333,10 @@ void NorfairPipeBug_Func_7(void) { // 0xB38D4E } void NorfairPipeBug_Func_8(void) { // 0xB38D90 - Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); ++E->pbg_var_C; - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(kCommonEnemySpeeds_Linear[65], y_subpos); - uint16 v3 = kCommonEnemySpeeds_Linear[65] + y_subpos; - if (v2) - ++E->base.y_pos; - E->base.y_subpos = v3; - uint16 v4 = kCommonEnemySpeeds_Linear[64] + E->base.y_pos; - E->base.y_pos = v4; - if ((int16)(v4 - 16 - E->pbg_var_01) >= 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[64], kCommonEnemySpeeds_Linear[65])); + if ((int16)(E->base.y_pos - 16 - E->pbg_var_01) >= 0) { E->base.y_pos = E->pbg_var_01 + 16; E->base.y_subpos = 0; E->pbg_var_A = FUNC16(NorfairPipeBug_Func_12); @@ -374,18 +344,10 @@ void NorfairPipeBug_Func_8(void) { // 0xB38D90 } void NorfairPipeBug_Func_9(void) { // 0xB38DD2 - Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); ++E->pbg_var_C; - uint16 y_subpos = E->base.y_subpos; - bool v2 = __CFADD__uint16(kCommonEnemySpeeds_Linear[65], y_subpos); - uint16 v3 = kCommonEnemySpeeds_Linear[65] + y_subpos; - if (v2) - ++E->base.y_pos; - E->base.y_subpos = v3; - uint16 v4 = kCommonEnemySpeeds_Linear[64] + E->base.y_pos; - E->base.y_pos = v4; - if ((int16)(v4 - 32 - E->pbg_var_01) >= 0) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[64], kCommonEnemySpeeds_Linear[65])); + if ((int16)(E->base.y_pos - 32 - E->pbg_var_01) >= 0) { E->base.y_pos = E->pbg_var_01 + 32; E->base.y_subpos = 0; E->pbg_var_A = FUNC16(NorfairPipeBug_Func_12); @@ -393,29 +355,15 @@ void NorfairPipeBug_Func_9(void) { // 0xB38DD2 } void NorfairPipeBug_Func_10(void) { // 0xB38E14 - Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; int v2 = E->pbg_var_B >> 1; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Linear[v2 + 3], x_subpos); - uint16 v4 = kCommonEnemySpeeds_Linear[v2 + 3] + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.x_pos += kCommonEnemySpeeds_Linear[v2 + 2]; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[v2 + 2], kCommonEnemySpeeds_Linear[v2 + 3])); } void NorfairPipeBug_Func_11(void) { // 0xB38E35 - Enemy_PipeBug *E = Get_PipeBug(cur_enemy_index); - uint16 x_subpos = E->base.x_subpos; int v2 = E->pbg_var_B >> 1; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Linear[v2 + 1], x_subpos); - uint16 v4 = kCommonEnemySpeeds_Linear[v2 + 1] + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.x_pos += kCommonEnemySpeeds_Linear[v2]; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(kCommonEnemySpeeds_Linear[v2], kCommonEnemySpeeds_Linear[v2 + 1])); } void sub_B38E56(void) { // 0xB38E56 @@ -532,15 +480,8 @@ void BrinstarYellowPipeBug_Func_3(void) { // 0xB39028 } void BrinstarYellowPipeBug_Func_4(uint16 k) { // 0xB390A1 - Enemy_PipeBug *E = Get_PipeBug(k); - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->pbg_var_02, x_subpos); - uint16 v4 = E->pbg_var_02 + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.x_pos += E->pbg_var_03; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->pbg_var_03, E->pbg_var_02)); } void BrinstarYellowPipeBug_Func_5(void) { // 0xB390BD @@ -574,13 +515,7 @@ void BrinstarYellowPipeBug_Func_5(void) { // 0xB390BD void BrinstarYellowPipeBug_Func_6(uint16 k) { // 0xB3913A Enemy_PipeBug *E = Get_PipeBug(k); - uint16 x_subpos = E->base.x_subpos; - bool v3 = __CFADD__uint16(E->pbg_var_00, x_subpos); - uint16 v4 = E->pbg_var_00 + x_subpos; - if (v3) - ++E->base.x_pos; - E->base.x_subpos = v4; - E->base.x_pos += E->pbg_var_01; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, __PAIR32__(E->pbg_var_01, E->pbg_var_00)); } void BrinstarYellowPipeBug_Func_7(void) { // 0xB3915A @@ -648,14 +583,8 @@ void BrinstarYellowPipeBug_Func_8(void) { // 0xB391D8 void BrinstarYellowPipeBug_Func_9(uint16 k) { // 0xB39256 Enemy_PipeBug *E = Get_PipeBug(k); ++E->pbg_var_E; - uint16 y_subpos = E->base.y_subpos; int v3 = (8 * E->pbg_var_E) >> 1; - bool v4 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v3 + 2], y_subpos); - uint16 v5 = kCommonEnemySpeeds_Quadratic[v3 + 2] + y_subpos; - if (v4) - ++E->base.y_pos; - E->base.y_subpos = v5; - E->base.y_pos += kCommonEnemySpeeds_Quadratic[v3 + 3]; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v3 + 3], kCommonEnemySpeeds_Quadratic[v3 + 2])); } void BrinstarYellowPipeBug_Func_10(uint16 k) { // 0xB3927A @@ -664,14 +593,8 @@ void BrinstarYellowPipeBug_Func_10(uint16 k) { // 0xB3927A E->pbg_var_E = 0; E->pbg_var_F = 0; } else { - uint16 y_subpos = E->base.y_subpos; int v4 = (8 * E->pbg_var_E) >> 1; - bool v5 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v4], y_subpos); - uint16 v6 = kCommonEnemySpeeds_Quadratic[v4] + y_subpos; - if (v5) - ++E->base.y_pos; - E->base.y_subpos = v6; - E->base.y_pos += kCommonEnemySpeeds_Quadratic[v4 + 1]; + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v4 + 1], kCommonEnemySpeeds_Quadratic[v4])); } } @@ -1025,16 +948,9 @@ void Botwoon_Func_14(void) { // 0xB39A46 void Botwoon_Func_15(void) { // 0xB39A5E Enemy_Botwoon *E = Get_Botwoon(cur_enemy_index); - uint16 y_subpos = E->base.y_subpos; int v2 = (8 * HIBYTE(E->botwoon_var_28)) >> 1; - bool v3 = __CFADD__uint16(kCommonEnemySpeeds_Quadratic[v2], y_subpos); - uint16 v4 = kCommonEnemySpeeds_Quadratic[v2] + y_subpos; - if (v3) - ++E->base.y_pos; - E->base.y_subpos = v4; - uint16 v5 = kCommonEnemySpeeds_Quadratic[v2 + 1] + E->base.y_pos; - E->base.y_pos = v5; - if (sign16(v5 - 200)) { + AddToHiLo(&E->base.y_pos, &E->base.y_subpos, __PAIR32__(kCommonEnemySpeeds_Quadratic[v2 + 1], kCommonEnemySpeeds_Quadratic[v2])); + if (sign16(E->base.y_pos - 200)) { E->botwoon_var_28 += 192; } else { E->base.y_pos = 200; @@ -1404,9 +1320,7 @@ void EscapeEtecoon_Main(void) { // 0xB3E655 void EscapeEtecoon_E65C(uint16 k) { // 0xB3E65C Enemy_EscapeEtecoon *E = Get_EscapeEtecoon(k); - uint16 x_subpos = E->base.x_subpos; - E->base.x_subpos = x_subpos + 0x8000; - E->base.x_pos += __CFADD__uint16(x_subpos, 0x8000) + 3; + AddToHiLo(&E->base.x_pos, &E->base.x_subpos, 0x38000); } void EscapeEtecoon_E670(uint16 k) { // 0xB3E670 diff --git a/src/sm_cpu_infra.c b/src/sm_cpu_infra.c index 96abec8..215386d 100644 --- a/src/sm_cpu_infra.c +++ b/src/sm_cpu_infra.c @@ -254,7 +254,27 @@ static const uint32 kPatchedCarrys[] = { 0x90BC75, 0x90BC93, + + 0xA8A459, + 0xA8A45F, + 0xA8A465, + 0xA8A46B, + + 0xA8A477, + 0xA8A47D, + 0xA8A483, + 0xA8A489, + + + 0xA8a543, + 0xA8a54f, + 0xA8a55b, + 0xA8a567, + 0xA8a573, + 0xA8a57f, + 0xA8a58b, }; + static uint8 kPatchedCarrysOrg[arraysize(kPatchedCarrys)]; uint32 PatchBugs(uint32 mode, uint32 addr) { diff --git a/src/snes/cpu.c b/src/snes/cpu.c index 737dc12..a91d018 100644 --- a/src/snes/cpu.c +++ b/src/snes/cpu.c @@ -766,7 +766,8 @@ restart: case 0x65: case 0x6d: case 0x69: - case 0x7d: cpu->c = 0; goto restart; + case 0x7d: + case 0x7f: cpu->c = 0; goto restart; default: // printf("Unk op 0x%x!\n", opcode); goto restart;