diff --git a/src/sm_84.c b/src/sm_84.c index 7a19b54..cf49b1e 100644 --- a/src/sm_84.c +++ b/src/sm_84.c @@ -1221,7 +1221,6 @@ void DrawPlm(uint16 k) { // 0x848DAA VramWriteEntry *v25; int16 v28; int16 v31; - int16 v33; uint16 v35; uint16 a; @@ -1318,15 +1317,9 @@ LABEL_70: addr = R3_.addr + 2 * R22_; v31 = *(uint16 *)RomPtr_84orRAM(addr); if (v31) { - v31 = (uint8)v31; - if ((v31 & 0x80) != 0) - v31 |= 0xFF00u; - g_word_7E001E = plm_x_block + v31; + g_word_7E001E = plm_x_block + (int8)v31; uint16 v32 = addr + 1; - v33 = *RomPtr_84orRAM(v32); - if ((v33 & 0x80) != 0) - v33 |= 0xFF00u; - R32 = plm_y_block + v33; + R32 = plm_y_block + (int8)*RomPtr_84orRAM(v32); v1 = v32 + 1; goto LABEL_2; } diff --git a/src/sm_86.c b/src/sm_86.c index 8807287..653b619 100644 --- a/src/sm_86.c +++ b/src/sm_86.c @@ -545,15 +545,8 @@ uint16 EprojInstr_Goto(uint16 k, uint16 j) { // 0x8681AB } uint16 EprojInstr_GotoRel(uint16 k, uint16 j) { // 0x8681B0 - int16 v2; - R18_ = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtr_86(j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return R18_ + v2; + return R18_ + (int8)RomPtr_86(j); } uint16 EprojInstr_DecTimerAndGotoIfNonZero(uint16 k, uint16 j) { // 0x8681C6 @@ -835,15 +828,9 @@ void GetValuesForScreenShaking(void) { // 0x868427 } uint8 EprojColl_8506(void) { // 0x868506 - int16 v1; - - LOBYTE(v1) = BTS[cur_block_index]; - if ((uint8)v1) { - if ((BTS[cur_block_index] & 0x80) != 0) - v1 |= 0xFF00u; - else - v1 = (uint8)v1; - cur_block_index += v1; + uint8 t = BTS[cur_block_index]; + if (t) { + cur_block_index += (int8)t; return 0xff; } return 0; @@ -1579,60 +1566,30 @@ void EprojPreInstr_CrocomireBridgeCrumbling(uint16 k) { // 0x8692BA } uint16 MoveEprojWithVelocity(uint16 k) { // 0x8692D6 - int16 v3; - char v4; // t0 - int v1 = k >> 1; uint16 v2 = enemy_projectile_x_vel[v1]; - int carry = *((uint8 *)enemy_projectile_1A27 + k + 1) + LOBYTE(v2); - LOBYTE(v2) = carry; - *((uint8 *)enemy_projectile_1A27 + k + 1) = v2; - v2 &= 0xFF00u; - v4 = v2; - LOBYTE(v3) = HIBYTE(v2); - HIBYTE(v3) = v4; - if ((v3 & 0x80) != 0) - v3 |= 0xFF00u; - enemy_projectile_x_pos[v1] += v3 + (carry >> 8); + int carry = *((uint8 *)enemy_projectile_1A27 + k + 1) + (v2 & 0xff); + *((uint8 *)enemy_projectile_1A27 + k + 1) = carry; + enemy_projectile_x_pos[v1] += (int8)(v2 >> 8) + (carry >> 8); return MoveEprojWithVelocityY(k); } uint16 MoveEprojWithVelocityY(uint16 k) { // 0x8692F3 - int16 v3; - char v4; // t0 - int v1 = k >> 1; uint16 v2 = enemy_projectile_y_vel[v1]; - int carry = *((uint8 *)enemy_projectile_y_subpos + k + 1) + LOBYTE(v2); - LOBYTE(v2) = carry; - *((uint8 *)enemy_projectile_y_subpos + k + 1) = v2; - v2 &= 0xFF00u; - v4 = v2; - LOBYTE(v3) = HIBYTE(v2); - HIBYTE(v3) = v4; - if ((v3 & 0x80) != 0) - v3 |= 0xFF00u; - uint16 result = enemy_projectile_y_pos[v1] + v3 + (carry >> 8); + int carry = *((uint8 *)enemy_projectile_y_subpos + k + 1) + (v2 & 0xff); + *((uint8 *)enemy_projectile_y_subpos + k + 1) = carry; + uint16 result = enemy_projectile_y_pos[v1] + (int8)(v2 >> 8) + (carry >> 8); enemy_projectile_y_pos[v1] = result; return result; } uint16 MoveEprojWithVelocityX(uint16 k) { // 0x869311 - int16 v3; - char v4; // t0 - int v1 = k >> 1; uint16 v2 = enemy_projectile_x_vel[v1]; - int carry = *((uint8 *)enemy_projectile_1A27 + k + 1) + LOBYTE(v2); - LOBYTE(v2) = carry; - *((uint8 *)enemy_projectile_1A27 + k + 1) = v2; - v2 &= 0xFF00u; - v4 = v2; - LOBYTE(v3) = HIBYTE(v2); - HIBYTE(v3) = v4; - if ((v3 & 0x80) != 0) - v3 |= 0xFF00u; - uint16 result = enemy_projectile_x_pos[v1] + v3 + (carry >> 8); + int carry = *((uint8 *)enemy_projectile_1A27 + k + 1) + (v2 & 0xff); + *((uint8 *)enemy_projectile_1A27 + k + 1) = carry; + uint16 result = enemy_projectile_x_pos[v1] + (int8)(v2 >> 8) + (carry >> 8); enemy_projectile_x_pos[v1] = result; return result; } diff --git a/src/sm_87.c b/src/sm_87.c index a750346..cf54e92 100644 --- a/src/sm_87.c +++ b/src/sm_87.c @@ -110,15 +110,8 @@ uint16 AnimtilesInstr_Goto(uint16 k, uint16 j) { // 0x8780B7 } uint16 AnimtilesInstr_GotoRel(uint16 k, uint16 j) { // 0x8780BC - int16 v2; - animtiles_instruction = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtr_87(j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return animtiles_instruction + v2; + return j + (int8)*RomPtr_87(j); } uint16 AnimtilesInstr_DecrementTimerAndGoto(uint16 k, uint16 j) { // 0x8780D4 diff --git a/src/sm_88.c b/src/sm_88.c index 8c5141a..2584e86 100644 --- a/src/sm_88.c +++ b/src/sm_88.c @@ -660,15 +660,8 @@ uint16 HdmaobjInstr_Goto(uint8 db, uint16 k, uint16 j) { // 0x8885EC } uint16 HdmaobjInstr_GotoRel(uint8 db, uint16 k, uint16 j) { // 0x8885F1 - int16 v2; - R18_ = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtrWithBank(db, j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return R18_ + v2; + return j + (int8)*RomPtrWithBank(db, j); } uint16 HdmaobjInstr_DecrementAndGoto(uint8 db, uint16 k, uint16 j) { // 0x888607 diff --git a/src/sm_8b.c b/src/sm_8b.c index 288039a..5c9a4b1 100644 --- a/src/sm_8b.c +++ b/src/sm_8b.c @@ -1500,15 +1500,8 @@ uint16 CinematicSprInstr_ClearPreInstr(uint16 k, uint16 j) { // 0x8B9457 uint16 CinematicSprInstr_GotoRel(uint16 k, uint16 j) { // 0x8B94A2 - int16 v2; - R18_ = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtr_8B(j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return R18_ + v2; + return j + (int8)*RomPtr_8B(j); } uint16 CinematicSprInstr_Goto(uint16 k, uint16 j) { // 0x8B94BC @@ -4286,18 +4279,12 @@ void CinematicFunction_Intro_Func58(uint16 k) { // 0x8BBEB5 unsigned int v9; // kr0C_4 uint16 v4; - if (cinematic_function == (uint16)FUNC16(CinematicFunction_Intro_Func56)) { + if (cinematic_function == FUNC16(CinematicFunction_Intro_Func56)) { int v1 = k >> 1; uint16 v2 = cinematicspr_goto_timer[v1] + 128; cinematicspr_goto_timer[v1] = v2; - v3 = v2; - LOBYTE(v4) = HIBYTE(v2); - HIBYTE(v4) = v3; - R20_ = v4 & 0xFF00; - v4 = (uint8)v4; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; - R18_ = v4; + R20_ = (v2 & 0xff) << 8; + R18_ = (int8)(v2 >> 8); uint16 v5 = cinematicspr_arr7[v1]; bool v6 = __CFADD__uint16(R20_, v5); cinematicspr_arr7[v1] = R20_ + v5; @@ -6200,25 +6187,15 @@ void CinematicFunction_Intro_Func149(void) { // 0x8BE812 } *((uint16 *)v3 + 7) = g_word_8BE9CF[v4 + 1] + v5; uint16 v23 = *((uint16 *)v3 + 6); - uint16 v6 = HIBYTE(v23); - if ((v23 & 0x8000u) != 0) - v6 |= 0xFF00u; - R18_ = v6; - LOBYTE(v7) = HIBYTE(v23); - HIBYTE(v7) = v23; - R20_ = v7 & 0xFF00; + R18_ = (int8)HIBYTE(v23); + R20_ = (v23 << 8) & 0xFF00; v8 = *((uint16 *)v3 + 2); bool v9 = __CFADD__uint16(R20_, v8); *((uint16 *)v3 + 2) = R20_ + v8; *((uint16 *)v3 + 1) += R18_ + v9; uint16 v24 = *((uint16 *)v3 + 7); - uint16 v10 = HIBYTE(v24); - if ((v24 & 0x8000u) != 0) - v10 |= 0xFF00u; - R18_ = v10; - LOBYTE(v11) = HIBYTE(v24); - HIBYTE(v11) = v24; - R20_ = v11 & 0xFF00; + R18_ = (int8)HIBYTE(v24); + R20_ = (v24 << 8) & 0xFF00; v12 = *((uint16 *)v3 + 4); v9 = __CFADD__uint16(R20_, v12); *((uint16 *)v3 + 4) = R20_ + v12; diff --git a/src/sm_8d.c b/src/sm_8d.c index 71d7f15..906244e 100644 --- a/src/sm_8d.c +++ b/src/sm_8d.c @@ -197,15 +197,8 @@ PairU16 PalInstr_Goto(uint16 k, uint16 j) { // 0x8DC61E } PairU16 PalInstr_GotoRel(uint16 k, uint16 j) { // 0x8DC623 - int16 v2; - R18_ = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtr_8D(j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return MakePairU16(k, R18_ + v2); + return MakePairU16(k, j + (int8)*RomPtr_8D(j)); } PairU16 PalInstr_DecTimerGoto(uint16 k, uint16 j) { // 0x8DC639 diff --git a/src/sm_90.c b/src/sm_90.c index f2fc3b1..cbe9262 100644 --- a/src/sm_90.c +++ b/src/sm_90.c @@ -837,13 +837,11 @@ PairU16 Samus_CalcSpritemapPos(uint16 k) { } PairU16 Samus_CalcSpritemapPos_Default(uint16 j) { // 0x908C94 - uint16 v1 = *(&kPoseParams[0].y_offset_to_gfx + (uint16)(4 * j)); - if ((v1 & 0x80) != 0) - v1 |= 0xFF00u; + int v1 = (int8)*(&kPoseParams[0].y_offset_to_gfx + 4 * j); R18_ = v1; samus_spritemap_y_pos = samus_y_pos - v1 - layer1_y_pos; samus_spritemap_x_pos = samus_x_pos - layer1_x_pos; - return MakePairU16(samus_x_pos - layer1_x_pos, samus_y_pos - v1 - layer1_y_pos); + return MakePairU16(samus_spritemap_x_pos, samus_spritemap_y_pos); } PairU16 Samus_CalcSpritemapPos_Standing(uint16 j) { // 0x908CC3 @@ -890,13 +888,11 @@ PairU16 Samus_CalcSpritemapPos_Crouch(uint16 j) { // 0x908D3C if (sign16((j >> 1) - kPose_35_FaceR_CrouchTrans) || !sign16(v1 - kPose_41_FaceL_Morphball_Ground)) { return Samus_CalcSpritemapPos_Default(j); } else { - uint16 v4 = byte_908D80[(uint16)(samus_anim_frame + 2 * (v1 - 53))]; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; + int v4 = byte_908D80[(uint16)(samus_anim_frame + 2 * (v1 - 53))]; R18_ = v4; samus_spritemap_y_pos = v4 + samus_y_pos - layer1_y_pos; samus_spritemap_x_pos = samus_x_pos - layer1_x_pos; - return MakePairU16(samus_x_pos - layer1_x_pos, v4 + samus_y_pos - layer1_y_pos); + return MakePairU16(samus_x_pos - layer1_x_pos, samus_spritemap_y_pos); } } @@ -907,14 +903,11 @@ PairU16 Samus_CalcSpritemapPos_Special(uint16 j) { // 0x908D98 -5, 0, 0, 4, -3, -5, -3, 4, 0, 0, 4, 0, 0, 4, 0, 0, }; - int16 v1; - uint16 v2; + int v1, v2; v1 = j >> 1; - if (j >> 1 == kPose_E8_FaceR_Drained_CrouchFalling || v1 == kPose_E9_FaceL_Drained_CrouchFalling) { + if (v1 == kPose_E8_FaceR_Drained_CrouchFalling || v1 == kPose_E9_FaceL_Drained_CrouchFalling) { v2 = byte_908DEF[samus_anim_frame]; - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; } else { if (v1 != kPose_EA_FaceR_Drained_Stand && v1 != kPose_EB_FaceL_Drained_Stand || (int16)(samus_anim_frame - 5) < 0) { return Samus_CalcSpritemapPos_Default(j); @@ -4578,14 +4571,8 @@ void Samus_ArmCannon_Draw(void) { // 0x90C663 } R24_ = kDrawArmCannon_Char[v3 >> 1]; uint8 *v4 = RomPtr_90(R22_ + 2 * samus_anim_frame); - uint16 v5 = *v4; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - R18_ = v5; - uint16 v6 = v4[1]; - if ((v6 & 0x80) != 0) - v6 |= 0xFF00u; - R20_ = v6; + R18_ = (int8)v4[0]; + R20_ = (int8)v4[1]; R22_ = *(&kPoseParams[0].y_offset_to_gfx + (uint16)(8 * samus_pose)); uint16 v7 = oam_next_ptr; v8 = R18_ + samus_x_pos - layer1_x_pos; @@ -5510,14 +5497,9 @@ void ProjPreInstr_WaveSba(uint16 k) { // 0x90DA08 } else if (sign16(projectile_bomb_x_speed[v4] - 2048)) { projectile_bomb_x_speed[v4] += 64; } - uint16 v5; - LOBYTE(v5) = HIBYTE(projectile_bomb_x_speed[v4]); - HIBYTE(v5) = projectile_bomb_x_speed[v4]; + uint16 v5 = swap16(projectile_bomb_x_speed[v4]); R20_ = v5 & 0xFF00; - v5 = (uint8)v5; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - R18_ = v5; + R18_ = (int8)v5; uint16 v6 = projectile_bomb_x_subpos[v4]; bool v7 = __CFADD__uint16(R20_, v6); projectile_bomb_x_subpos[v4] = R20_ + v6; @@ -5528,14 +5510,9 @@ void ProjPreInstr_WaveSba(uint16 k) { // 0x90DA08 } else if (sign16(projectile_variables[v4] - 2048)) { projectile_variables[v4] += 64; } - uint16 v8; - LOBYTE(v8) = HIBYTE(projectile_variables[v4]); - HIBYTE(v8) = projectile_variables[v4]; + uint16 v8 = swap16(projectile_variables[v4]); R20_ = v8 & 0xFF00; - v8 = (uint8)v8; - if ((v8 & 0x80) != 0) - v8 |= 0xFF00u; - R18_ = v8; + R18_ = (int8)v8; uint16 v9 = projectile_bomb_y_subpos[v4]; v7 = __CFADD__uint16(R20_, v9); projectile_bomb_y_subpos[v4] = R20_ + v9; diff --git a/src/sm_94.c b/src/sm_94.c index e44ed04..c7b8ead 100644 --- a/src/sm_94.c +++ b/src/sm_94.c @@ -976,15 +976,9 @@ uint8 BlockColl_Vert_Door(void) { // 0x9493CE } uint8 BlockReact_HorizExt(void) { // 0x949411 - int16 v0; - - LOBYTE(v0) = BTS[cur_block_index]; - if ((uint8)v0) { - if ((BTS[cur_block_index] & 0x80) != 0) - v0 |= 0xFF00u; - else - v0 = (uint8)v0; - cur_block_index += v0; + uint8 t = BTS[cur_block_index]; + if (t) { + cur_block_index += (int8)t; return 0xff; // special } return 0; diff --git a/src/sm_9b.c b/src/sm_9b.c index a42c057..b857c99 100644 --- a/src/sm_9b.c +++ b/src/sm_9b.c @@ -90,33 +90,12 @@ void ProjectileTrail_Func5(uint16 k, uint16 j) { // 0x9BA3CC v5 = g_off_9BA4B3[projectile_type[v3] & 0xF] + 2 * (projectile_dir[v3] & 0xF); } uint16 v6 = *(uint16 *)RomPtr_9B(v5) + 4 * R22_; - LOBYTE(v5) = HIBYTE(*(uint16 *)RomPtr_9B(v6)); - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - else - v5 = (uint8)v5; + uint8 *p = RomPtr_9B(v6); int v7 = j >> 1; - projectiletrail_left_y_pos[v7] = R20_ + v5 - 4; - uint16 v8 = v6 - 1; - LOBYTE(v5) = HIBYTE(*(uint16 *)RomPtr_9B(v8)); - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - else - v5 = (uint8)v5; - projectiletrail_left_x_pos[v7] = R18_ + v5 - 4; - uint8 *v9 = RomPtr_9B(v8 + 1); - LOBYTE(v5) = HIBYTE(*((uint16 *)v9 + 1)); - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - else - v5 = (uint8)v5; - projectiletrail_right_y_pos[v7] = R20_ + v5 - 4; - LOBYTE(v5) = HIBYTE(*(uint16 *)(v9 + 1)); - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - else - v5 = (uint8)v5; - projectiletrail_right_x_pos[v7] = R18_ + v5 - 4; + projectiletrail_left_y_pos[v7] = R20_ + (int8)p[1] - 4; + projectiletrail_left_x_pos[v7] = R18_ + (int8)p[0] - 4; + projectiletrail_right_y_pos[v7] = R20_ + (int8)p[3] - 4; + projectiletrail_right_x_pos[v7] = R18_ + (int8)p[2] - 4; } void StartSamusDeathAnimation(void) { // 0x9BB3A7 @@ -686,23 +665,12 @@ LABEL_8:; samus_anim_frame = v3 + 32; } if (samus_pose_x_dir == 4) { - v6 = kGrappleBeam_SwingingData2[v2]; - if ((v6 & 0x80) != 0) - v6 |= 0xFF00u; - samus_x_pos = x_pos_of_start_of_grapple_beam + v6; - v5 = kGrappleBeam_SwingingData2[v2 + 1]; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; + samus_x_pos = x_pos_of_start_of_grapple_beam + (int8)kGrappleBeam_SwingingData2[v2]; + samus_y_pos = y_pos_of_start_of_grapple_beam + (int8)kGrappleBeam_SwingingData2[v2 + 1]; } else { - v4 = kGrappleBeam_SwingingData3[v2]; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; - samus_x_pos = x_pos_of_start_of_grapple_beam + v4; - v5 = kGrappleBeam_SwingingData3[v2 + 1]; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; + samus_x_pos = x_pos_of_start_of_grapple_beam + (int8)kGrappleBeam_SwingingData3[v2]; + samus_y_pos = y_pos_of_start_of_grapple_beam + (int8)kGrappleBeam_SwingingData3[v2 + 1]; } - samus_y_pos = y_pos_of_start_of_grapple_beam + v5; x_pos_of_start_of_grapple_beam_prevframe = x_pos_of_start_of_grapple_beam; y_pos_of_start_of_grapple_beam_prevframe = y_pos_of_start_of_grapple_beam; GrappleBeamFunc_BE98(); diff --git a/src/sm_a0.c b/src/sm_a0.c index 339b9e0..affdc06 100644 --- a/src/sm_a0.c +++ b/src/sm_a0.c @@ -101,15 +101,7 @@ uint16 EnemyInstr_Goto(uint16 k, uint16 j) { // 0xA080ED } uint16 EnemyInstr_GotoRel(uint16 k, uint16 j) { // 0xA080F2 - int16 v2; - - R18_ = j; - LOBYTE(v2) = HIBYTE(*(uint16 *)RomPtr_A0(j - 1)); - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - else - v2 = (uint8)v2; - return R18_ + v2; + return j + (int8)*RomPtr_A0(j); } uint16 EnemyInstr_DecTimerAndGoto(uint16 k, uint16 j) { // 0xA08108 @@ -4465,15 +4457,9 @@ uint8 EnemyBlockCollVertReact_Slope_NonSquare(void) { // 0xA0C51F } uint8 EnemyBlockCollReact_HorizExt(void) { // 0xA0C619 - int16 v0; - - LOBYTE(v0) = BTS[cur_block_index]; - if ((uint8)v0) { - if ((BTS[cur_block_index] & 0x80) != 0) - v0 |= 0xFF00u; - else - v0 = (uint8)v0; - cur_block_index += v0; + uint8 t = BTS[cur_block_index]; + if (t) { + cur_block_index += (int8)t; return 0xff; } return 0; diff --git a/src/sm_a2.c b/src/sm_a2.c index 8a59376..703f40d 100644 --- a/src/sm_a2.c +++ b/src/sm_a2.c @@ -1499,15 +1499,13 @@ void GunshipTop_1(uint16 k) { // 0xA2A784 if (v3 || v4) { uint16 v5 = 2 * E0->gtp_var_C; E0->gtp_var_D = g_byte_A2A7CF[v5]; - uint16 v6 = g_byte_A2A7CF[v5 + 1]; - if ((v6 & 0x80) != 0) - v6 |= 0xFF00u; + uint16 v6 = (int8)g_byte_A2A7CF[v5 + 1]; R18_ = v6; E0->base.y_pos += v6; Enemy_GunshipTop *E1 = Get_GunshipTop(k + 64); - E1->base.y_pos += R18_; + E1->base.y_pos += v6; Enemy_GunshipTop *E2 = Get_GunshipTop(k + 128); - E2->base.y_pos += R18_; + E2->base.y_pos += v6; E0->gtp_var_C = ((uint8)E0->gtp_var_C + 1) & 3; } } diff --git a/src/sm_a7.c b/src/sm_a7.c index d544334..875ccc7 100644 --- a/src/sm_a7.c +++ b/src/sm_a7.c @@ -2486,14 +2486,10 @@ void Phantoon_MoveInFigure8_LeftSideClockwise(uint16 j) { // 0xA7D215 for (R22_ = E->phant_var_C; R22_; --R22_) { R18_ = 2 * E->phant_var_A; uint8 *v2 = RomPtr_A7(R18_ + j); - uint16 v3 = *v2; - if ((v3 & 0x80) != 0) - v3 |= 0xFF00u; + uint16 v3 = (int8)v2[0]; R18_ = v3; E->base.x_pos += v3; - uint16 v4 = v2[1]; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; + uint16 v4 = (int8)v2[1]; R18_ = v4; E->base.y_pos += v4; uint16 v5 = E->phant_var_A + 1; @@ -2513,14 +2509,10 @@ void Phantoon_MoveInFigure8_RightSideClockwise(uint16 j) { // 0xA7D271 do { R18_ = 2 * E->phant_var_A; uint8 *v4 = RomPtr_A7(R18_ + j); - uint16 v5 = *v4; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; + uint16 v5 = (int8)*v4; R18_ = v5; E->base.x_pos -= v5; - uint16 v6 = v4[1]; - if ((v6 & 0x80) != 0) - v6 |= 0xFF00u; + uint16 v6 = (int8)v4[1]; R18_ = v6; E->base.y_pos -= v6; v7 = E->phant_var_A - 1; @@ -2578,13 +2570,9 @@ void Phantoon_MoveInSwoopingPattern(uint16 k) { // 0xA7D2D1 } else if (sign16(v2->phant_var_C - 2048)) { v2->phant_var_C += 32; } - LOBYTE(v9) = HIBYTE(v2->phant_var_C); - HIBYTE(v9) = v2->phant_var_C; + v9 = swap16(v2->phant_var_C); R20_ = v9 & 0xFF00; - v9 = (uint8)v9; - if ((v9 & 0x80) != 0) - v9 |= 0xFF00u; - R18_ = v9; + R18_ = (int8)v9; x_subpos = v7->base.x_subpos; v11 = __CFADD__uint16(R20_, x_subpos); v7->base.x_subpos = R20_ + x_subpos; @@ -2605,13 +2593,9 @@ void Phantoon_MoveInSwoopingPattern(uint16 k) { // 0xA7D2D1 } else if (sign16(v2->phant_var_D - 1536)) { v2->phant_var_D += 64; } - LOBYTE(v14) = HIBYTE(v2->phant_var_D); - HIBYTE(v14) = v2->phant_var_D; + v14 = swap16(v2->phant_var_D); R20_ = v14 & 0xFF00; - v14 = (uint8)v14; - if ((v14 & 0x80) != 0) - v14 |= 0xFF00u; - R18_ = v14; + R18_ = (int8)v14; y_subpos = v8->base.y_subpos; v11 = __CFADD__uint16(R20_, y_subpos); v8->base.y_subpos = R20_ + y_subpos; @@ -3106,17 +3090,9 @@ void Phantoon_DyingPhantoonExplosions(uint16 k) { // 0xA7D98B if (v2 || v3) { Enemy_Phantoon *E2 = Get_Phantoon(0x80); uint16 v5 = 4 * E2->phant_var_F; - uint16 v6 = g_byte_A7DA1D[v5]; - if ((v6 & 0x80) != 0) - v6 |= 0xFF00u; - R18_ = v6; Enemy_Phantoon *E0 = Get_Phantoon(0); - R18_ = v6 + E0->base.x_pos; - uint16 v8 = g_byte_A7DA1D[v5 + 1]; - if ((v8 & 0x80) != 0) - v8 |= 0xFF00u; - R20_ = v8; - R20_ = v8 + E0->base.y_pos; + R18_ = (int8)g_byte_A7DA1D[v5] + E0->base.x_pos; + R20_ = (int8)g_byte_A7DA1D[v5 + 1] + E0->base.y_pos; uint16 v11 = g_byte_A7DA1D[v5 + 2]; SpawnEnemyProjectileWithRoomGfx(addr_kEproj_DustCloudExplosion, v11); if (v11 == 29) diff --git a/src/sm_a9.c b/src/sm_a9.c index 81bf688..af64026 100644 --- a/src/sm_a9.c +++ b/src/sm_a9.c @@ -2770,54 +2770,30 @@ uint8 MotherBrain_MoveSamusForFallingAfterBeam(void) { // 0xA9BBE1 } uint8 MotherBrain_MoveSamusVerticallyTowardsCeilingFloor(uint16 a) { // 0xA9BBFD - int16 v1; - int16 v2; - char v3; // t0 - int carry = HIBYTE(samus_y_subpos) + LOBYTE(a); - LOBYTE(a) = carry; - HIBYTE(samus_y_subpos) = a; - HIBYTE(samus_prev_y_subpos) = a; - v1 = a & 0xFF00; - v3 = v1; - LOBYTE(v2) = HIBYTE(v1); - HIBYTE(v2) = v3; - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - uint16 v4 = samus_y_pos + v2 + (carry >> 8), v6; + HIBYTE(samus_y_subpos) = carry; + HIBYTE(samus_prev_y_subpos) = carry; + uint16 v4 = samus_y_pos + (int8)(a >> 8) + (carry >> 8), v6; if (sign16(v4 - 48)) { v6 = 48; } else { if (sign16(v4 - 192)) { - samus_y_pos = v4; - samus_prev_y_pos = v4; + samus_prev_y_pos = samus_y_pos = v4; return 0; } v6 = 192; } - samus_y_pos = v6; - samus_prev_y_pos = v6; + samus_prev_y_pos = samus_y_pos = v6; samus_y_subpos = 0; samus_prev_y_subpos = 0; return 1; } uint8 MotherBrain_MoveSamusHorizTowardsWall(uint16 a) { // 0xA9BC3F - int16 v1; - int16 v2; - char v3; // t0 - int carry = HIBYTE(samus_x_subpos) + LOBYTE(a); - LOBYTE(a) = carry; - HIBYTE(samus_x_subpos) = a; - HIBYTE(samus_prev_x_subpos) = a; - v1 = a & 0xFF00; - v3 = v1; - LOBYTE(v2) = HIBYTE(v1); - HIBYTE(v2) = v3; - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - uint16 v4 = samus_x_pos + v2 + (carry >> 8); + HIBYTE(samus_x_subpos) = carry; + HIBYTE(samus_prev_x_subpos) = carry; + uint16 v4 = samus_x_pos + (int8)(a >> 8) + (carry >> 8); if (sign16(v4 - 235)) { samus_x_pos = v4; samus_prev_x_pos = v4; @@ -3427,34 +3403,16 @@ void MotherBrain_Phase3_Neck_HyperBeamRecoil(void) { // 0xA9C3CD } void MoveEnemyWithVelocity(void) { // 0xA9C3EF - int16 v2; - char v3; // t0 - int16 v5; - char v6; // t1 - EnemyData *v0 = gEnemyData(cur_enemy_index); uint16 ai_var_B = v0->ai_var_B; int carry = HIBYTE(v0->x_subpos) + LOBYTE(ai_var_B); - LOBYTE(ai_var_B) = carry; - HIBYTE(v0->x_subpos) = ai_var_B; - ai_var_B &= 0xFF00u; - v3 = ai_var_B; - LOBYTE(v2) = HIBYTE(ai_var_B); - HIBYTE(v2) = v3; - if ((v2 & 0x80) != 0) - v2 |= 0xFF00u; - v0->x_pos += v2 + (carry >> 8); + HIBYTE(v0->x_subpos) = carry; + v0->x_pos += (int8)(ai_var_B >> 8) + (carry >> 8); + uint16 ai_var_C = v0->ai_var_C; carry = HIBYTE(v0->y_subpos) + LOBYTE(ai_var_C); - LOBYTE(ai_var_C) = carry; - HIBYTE(v0->y_subpos) = ai_var_C; - ai_var_C &= 0xFF00u; - v6 = ai_var_C; - LOBYTE(v5) = HIBYTE(ai_var_C); - HIBYTE(v5) = v6; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - v0->y_pos += v5 + (carry >> 8); + HIBYTE(v0->y_subpos) = carry; + v0->y_pos += (int8)(ai_var_C >> 8) + (carry >> 8); } void MotherBrain_SetBodyInstrs(uint16 a) { // 0xA9C42D @@ -3501,21 +3459,10 @@ uint16 sub_A9C46C(uint16 a, uint16 j) { // 0xA9C46C } void Enemy_IncreaseYpos(uint16 k, uint16 a) { // 0xA9C4A9 - int16 v3; - int16 v4; - char v5; // t0 - EnemyData *v2 = gEnemyData(k); int carry = HIBYTE(v2->y_subpos) + LOBYTE(a); - LOBYTE(a) = carry; - HIBYTE(v2->y_subpos) = a; - v3 = a & 0xFF00; - v5 = v3; - LOBYTE(v4) = HIBYTE(v3); - HIBYTE(v4) = v5; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; - v2->y_pos += v4 + (carry >> 8); + HIBYTE(v2->y_subpos) = carry; + v2->y_pos += (int8)(a >> 8) + (carry >> 8); } void Samus_DecrementAmmoDueToRainbowBeam(void) { // 0xA9C4C4 @@ -4867,84 +4814,37 @@ void DeadMonsters_Func_2(uint16 k) { // 0xA9D91D } uint8 DeadMonsters_Func_3(uint16 k) { // 0xA9D961 - int16 v2; - int16 v5; - uint16 v6; - char v7; // t0 - int16 v9; - int16 v10; - char v11; // t1 - Enemy_DeadMonsters *E = Get_DeadMonsters(k); DeadMonsters_Func_4(k, E->dms_var_0A); - v2 = 32; + uint16 v2 = 32; if ((E->dms_var_0B & 0x8000u) == 0) v2 = 128; uint16 v3 = E->dms_var_0B + v2; E->dms_var_0B = v3; R18_ = v3; if (sign16(E->base.x_pos - 544)) { - HIBYTE(v9) = HIBYTE(R18_); - int full = HIBYTE(E->base.y_subpos) + LOBYTE(R18_); - LOBYTE(v9) = full; - HIBYTE(E->base.y_subpos) = v9; - v9 &= 0xFF00u; - v11 = v9; - LOBYTE(v10) = HIBYTE(v9); - HIBYTE(v10) = v11; - if ((v10 & 0x80) != 0) - v10 |= 0xFF00u; - uint16 v12 = E->base.y_pos + v10 + (full >> 8); + int full = HIBYTE(E->base.y_subpos) + LOBYTE(v3); + HIBYTE(E->base.y_subpos) = full; + uint16 v12 = E->base.y_pos + (int8)(v3 >> 8) + (full >> 8); E->base.y_pos = v12; return sign16(v12 - 184) == 0; } else { - uint16 v4 = R18_; - HIBYTE(R18_) = R18_; - LOBYTE(R18_) = 0; - v5 = v4 & 0xFF00; - if (v5 < 0) - v5 |= 0xFFu; - v7 = v5; - LOBYTE(v6) = HIBYTE(v5); - HIBYTE(v6) = v7; - R20_ = v6; + R18_ = v3 << 8; + R20_ = (int8)(v3 >> 8); return Enemy_MoveDown(k); } } void DeadMonsters_Func_4(uint16 k, uint16 a) { // 0xA9D9C7 - int16 v4; - uint16 v5; - char v6; // t0 - int16 v7; - int16 v8; - char v9; // t1 - R18_ = a; Enemy_DeadMonsters *E = Get_DeadMonsters(k); if (sign16(E->base.x_pos - 544)) { - HIBYTE(v7) = HIBYTE(R18_); - int full = HIBYTE(E->base.x_subpos) + LOBYTE(R18_); - LOBYTE(v7) = full; - HIBYTE(E->base.x_subpos) = v7; - v7 &= 0xFF00u; - v9 = v7; - LOBYTE(v8) = HIBYTE(v7); - HIBYTE(v8) = v9; - if ((v8 & 0x80) != 0) - v8 |= 0xFF00u; - E->base.x_pos += v8 + (full >> 8); + int full = HIBYTE(E->base.x_subpos) + LOBYTE(a); + HIBYTE(E->base.x_subpos) = full; + E->base.x_pos += (int8)(a >> 8) + (full >> 8); } else { - uint16 v3 = R18_; - HIBYTE(R18_) = R18_; - LOBYTE(R18_) = 0; - v4 = v3 & 0xFF00; - if (v4 < 0) - v4 |= 0xFFu; - v6 = v4; - LOBYTE(v5) = HIBYTE(v4); - HIBYTE(v5) = v6; - R20_ = v5; + R18_ = a << 8; + R20_ = (int8)(a >> 8); Enemy_MoveRight_IgnoreSlopes(k); } } @@ -6779,96 +6679,50 @@ uint8 Shitroid_AccelerateTowardsPoint(uint16 k, uint16 a) { // 0xA9F5A6 } void Shitroid_AccelerateTowardsY(uint16 k) { // 0xA9F5B5 - int16 v2; - int16 v3; - int16 v4; - int16 v5; - char v6; // t0 - int16 v7; - int16 v8; - int16 v9; - char v10; // t1 - int16 v11; - Enemy_Shitroid *E = Get_Shitroid(k); - v2 = E->base.y_pos - R20_; - if (!v2) - goto LABEL_9; + int16 v2 = E->base.y_pos - R20_; + if (!v2) { + ++R28_; + return; + } if (v2 >= 0) { - v7 = E->shitr_var_C - R22_; + uint16 v7 = E->shitr_var_C - R22_; if (sign16(v7 + 1280)) v7 = -1280; E->shitr_var_C = v7; - v8 = v7 & 0xFF00; - v10 = v8; - LOBYTE(v9) = HIBYTE(v8); - HIBYTE(v9) = v10; - if ((v9 & 0x80) != 0) - v9 |= 0xFF00u; - v11 = E->base.y_pos + v9; - if (v11 == R20_ || (int16)(v11 - R20_) < 0) { + if ((int16)(E->base.y_pos + (int8)(v7 >> 8) - R20_) <= 0) { E->shitr_var_C = 0; ++R28_; } } else { - v3 = R22_ + E->shitr_var_C; + uint16 v3 = R22_ + E->shitr_var_C; if (!sign16(v3 - 1280)) v3 = 1280; E->shitr_var_C = v3; - v4 = v3 & 0xFF00; - v6 = v4; - LOBYTE(v5) = HIBYTE(v4); - HIBYTE(v5) = v6; - if ((v5 & 0x80) != 0) - v5 |= 0xFF00u; - if (!sign16(E->base.y_pos + v5 - R20_)) { + if ((int16)(E->base.y_pos + (int8)(v3 >> 8) - R20_) >= 0) { E->shitr_var_C = 0; -LABEL_9: ++R28_; } } } void Shitroid_AccelerateTowardsX(uint16 k) { // 0xA9F615 - int16 v2; - int16 v3; - int16 v4; - char v5; // t0 - int16 v6; - int16 v7; - int16 v8; - char v9; // t1 - int16 v10; - Enemy_Shitroid *E = Get_Shitroid(k); if ((int16)(E->base.x_pos - R18_) >= 0) { - v6 = E->shitr_var_B - R22_; + uint16 v6 = E->shitr_var_B - R22_; if (sign16(v6 + 1280)) v6 = -1280; E->shitr_var_B = v6; - v7 = v6 & 0xFF00; - v9 = v7; - LOBYTE(v8) = HIBYTE(v7); - HIBYTE(v8) = v9; - if ((v8 & 0x80) != 0) - v8 |= 0xFF00u; - v10 = E->base.x_pos + v8; - if (v10 == R18_ || (int16)(v10 - R18_) < 0) { + if ((int16)(E->base.x_pos + (int8)(v6 >> 8) - R18_) <= 0) { E->shitr_var_B = 0; ++R28_; } } else { - v2 = R22_ + E->shitr_var_B; + uint16 v2 = R22_ + E->shitr_var_B; if (!sign16(v2 - 1280)) v2 = 1280; E->shitr_var_B = v2; - v3 = v2 & 0xFF00; - v5 = v3; - LOBYTE(v4) = HIBYTE(v3); - HIBYTE(v4) = v5; - if ((v4 & 0x80) != 0) - v4 |= 0xFF00u; - if (!sign16(E->base.x_pos + v4 - R18_)) { + if ((int16)(E->base.x_pos + (int8)(v2 >> 8) - R18_) >= 0) { E->shitr_var_B = 0; ++R28_; }