diff --git a/src/firingrange/firingrange.c b/src/firingrange/firingrange.c index 121860112..2b24afa00 100644 --- a/src/firingrange/firingrange.c +++ b/src/firingrange/firingrange.c @@ -21,7 +21,7 @@ u8 weapon_dummy[] = { u8 weapon_falcon2[] = { start(), - set_num_targets(3, 1, 3), + set_max_active_targets(3, 1, 3), set_goal_score(120, 80, 170), set_time_limit(255, 15, 10), set_ammo_limit(255, 255, 24), @@ -48,7 +48,7 @@ u8 weapon_falcon2[] = { u8 weapon_falcon2_scope[] = { start(), - set_num_targets(1, 1, 3), + set_max_active_targets(1, 1, 3), set_goal_score(120, 120, 80), set_time_limit(255, 255, 10), set_ammo_limit(255, 255, 8), @@ -74,7 +74,7 @@ u8 weapon_falcon2_scope[] = { u8 weapon_falcon2_silencer[] = { start(), - set_num_targets(1, 9, 3), + set_max_active_targets(1, 9, 3), set_goal_score(120, 30, 80), set_time_limit(255, 255, 30), set_ammo_limit(255, 255, 255), @@ -108,7 +108,7 @@ u8 weapon_falcon2_silencer[] = { u8 weapon_magsec4[] = { start(), - set_num_targets(1, 7, 4), + set_max_active_targets(1, 7, 4), set_goal_score(135, 135, 80), set_time_limit(255, 255, 12), set_ammo_limit(255, 18, 255), @@ -118,23 +118,23 @@ u8 weapon_magsec4[] = { add_target(0x01, 0x2b, 0x09, FRTARGETFLAG_BRONZE), add_target(0x01, 0x2a, 0x09, FRTARGETFLAG_BRONZE), add_target(0x01, 0x29, 0x09, FRTARGETFLAG_BRONZE), - add_target(0x00, 0x42, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x42, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), add_target(0x00, 0x32, 0x03, FRTARGETFLAG_SILVER), add_target(0x00, 0x33, 0x03, FRTARGETFLAG_SILVER), add_target(0x00, 0x34, 0x03, FRTARGETFLAG_SILVER), add_target(0x00, 0x35, 0x03, FRTARGETFLAG_SILVER), add_target(0x00, 0x36, 0x03, FRTARGETFLAG_SILVER), add_target(0x00, 0x37, 0x03, FRTARGETFLAG_SILVER), - add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x3e, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x41, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x40, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x3f, 0x03, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), end(), }; u8 weapon_mauler[] = { start(), - set_num_targets(1, 8, 6), + set_max_active_targets(1, 8, 6), set_goal_score(200, 0, 0), set_time_limit(255, 255, 15), set_ammo_limit(255, 50, 35), @@ -158,18 +158,18 @@ u8 weapon_mauler[] = { add_target(0x00, 0x1a, 0x05, FRTARGETFLAG_SILVER), add_target(0x00, 0x1b, 0x05, FRTARGETFLAG_SILVER), add_target(0x00, 0x1c, 0x05, FRTARGETFLAG_SILVER), - add_target(0x00, 0x35, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x36, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x37, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x38, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x39, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x3a, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x35, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x36, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x37, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x38, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x39, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x3a, 0x05, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), end(), }; u8 weapon_phoenix[] = { start(), - set_num_targets(2, 3, 6), + set_max_active_targets(2, 3, 6), set_goal_score(90, 0, 0), set_time_limit(255, 255, 20), set_ammo_limit(255, 18, 3), @@ -184,15 +184,15 @@ u8 weapon_phoenix[] = { add_target(0x00, 0x40, 0x08, FRTARGETFLAG_BRONZE), add_target(0x00, 0x41, 0x08, FRTARGETFLAG_BRONZE), add_target(0x00, 0x3f, 0x08, FRTARGETFLAG_BRONZE), - add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), - add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_80), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3b, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3c, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), + add_target(0x00, 0x3d, 0x0c, FRTARGETFLAG_SILVER | FRTARGETFLAG_TMPINVINCIBLE), add_target(0x00, 0x22, 0x01, FRTARGETFLAG_GOLD), add_target(0x00, 0x21, 0x01, FRTARGETFLAG_GOLD), add_target(0x00, 0x20, 0x01, FRTARGETFLAG_GOLD), @@ -204,7 +204,7 @@ u8 weapon_phoenix[] = { u8 weapon_dy357magnum[] = { start(), - set_num_targets(1, 9, 9), + set_max_active_targets(1, 9, 9), set_goal_score(90, 80, 50), set_time_limit(255, 255, 12), set_ammo_limit(255, 3, 5), @@ -228,21 +228,21 @@ u8 weapon_dy357magnum[] = { add_target(0x00, 0x12, 0x01, FRTARGETFLAG_SILVER), add_target(0x01, 0x13, 0x01, FRTARGETFLAG_SILVER), add_target(0x02, 0x14, 0x01, FRTARGETFLAG_SILVER), - add_target(0x00, 0x32, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2b, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x36, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x38, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x30, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x3a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x32, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2b, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x36, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x38, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x30, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x3a, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), end(), }; u8 weapon_dy357lx[] = { start(), - set_num_targets(1, 3, 1), + set_max_active_targets(1, 3, 1), set_goal_score(90, 200, 100), set_time_limit(255, 30, 50), set_ammo_limit(255, 255, 12), @@ -269,7 +269,7 @@ u8 weapon_dy357lx[] = { u8 weapon_cmp150[] = { start(), - set_num_targets(3, 4, 3), + set_max_active_targets(3, 4, 3), set_score_multiplier(1, 0, 2), set_goal_score(240, 0, 175), set_time_limit(255, 255, 20), @@ -301,7 +301,7 @@ u8 weapon_cmp150[] = { u8 weapon_cyclone[] = { start(), - set_num_targets(3, 2, 3), + set_max_active_targets(3, 2, 3), set_score_multiplier(3, 0, 2), set_goal_score(250, 0, 200), set_time_limit(255, 20, 18), @@ -328,7 +328,7 @@ u8 weapon_cyclone[] = { u8 weapon_callistontg[] = { start(), - set_num_targets(6, 4, 9), + set_max_active_targets(6, 4, 9), set_score_multiplier(2, 0, 1), set_goal_score(240, 0, 250), set_time_limit(255, 30, 20), @@ -360,22 +360,26 @@ u8 weapon_callistontg[] = { u8 weapon_rcp120[] = { start(), - set_num_targets(1, 3, 9), + set_max_active_targets(1, 3, 9), set_score_multiplier(4, 2, 1), set_goal_score(250, 150, 0), set_time_limit(255, 20, 20), set_ammo_limit(255, 255, 180), set_extra_speed(0, 1, 3), + + // @bug: This causes the RC-P120 to show help messages. + // It's likely a copy/paste error from the Falcon 2. set_help_script(0), + cmd_0a(0x09), set_goal_targets(255, 255, 9), add_target(0x01, 0x07, 0xff, FRTARGETFLAG_BRONZE), - add_target(0x00, 0x14, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), - add_target(0x00, 0x13, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), - add_target(0x00, 0x12, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_08 | FRTARGETFLAG_10), - add_target(0x00, 0x14, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), - add_target(0x00, 0x13, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), - add_target(0x00, 0x12, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_08 | FRTARGETFLAG_10), + add_target(0x00, 0x14, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), + add_target(0x00, 0x13, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), + add_target(0x00, 0x12, 0x14, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), + add_target(0x00, 0x14, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), + add_target(0x00, 0x13, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), + add_target(0x00, 0x12, 0x04, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY | FRTARGETFLAG_ROTATEONCLOAK), add_target(0x00, 0x11, 0x0a, FRTARGETFLAG_GOLD), add_target(0x00, 0x10, 0x0a, FRTARGETFLAG_GOLD), add_target(0x00, 0x0f, 0x0a, FRTARGETFLAG_GOLD), @@ -387,7 +391,7 @@ u8 weapon_rcp120[] = { u8 weapon_laptopgun[] = { start(), - set_num_targets(3, 3, 3), + set_max_active_targets(3, 3, 3), set_score_multiplier(5, 0, 3), set_goal_score(150, 90, 250), set_time_limit(30, 20, 15), @@ -401,9 +405,9 @@ u8 weapon_laptopgun[] = { add_target(0x01, 0x12, 0x32, FRTARGETFLAG_BRONZE), add_target(0x01, 0x13, 0x32, FRTARGETFLAG_BRONZE), add_target(0x02, 0x14, 0x32, FRTARGETFLAG_BRONZE), - add_target(0x00, 0x12, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), - add_target(0x00, 0x13, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), - add_target(0x00, 0x14, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), + add_target(0x00, 0x12, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x13, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x14, 0x1e, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), add_target(0x00, 0x49, 0x32, FRTARGETFLAG_GOLD), add_target(0x00, 0x4a, 0x32, FRTARGETFLAG_GOLD), add_target(0x00, 0x4b, 0x32, FRTARGETFLAG_GOLD), @@ -412,7 +416,7 @@ u8 weapon_laptopgun[] = { u8 weapon_dragon[] = { start(), - set_num_targets(3, 1, 5), + set_max_active_targets(3, 1, 5), set_score_multiplier(3, 0, 2), set_goal_score(150, 0, 250), set_time_limit(255, 10, 15), @@ -441,7 +445,7 @@ u8 weapon_dragon[] = { u8 weapon_k7avenger[] = { start(), - set_num_targets(1, 5, 3), + set_max_active_targets(1, 5, 3), set_score_multiplier(3, 0, 0), set_goal_score(125, 0, 0), set_time_limit(255, 255, 15), @@ -453,13 +457,13 @@ u8 weapon_k7avenger[] = { add_target(0x01, 0x0d, 0x19, FRTARGETFLAG_BRONZE), add_target(0x01, 0x0e, 0x19, FRTARGETFLAG_BRONZE), add_target(0x00, 0x0c, 0xff, FRTARGETFLAG_SILVER), - add_target(0x00, 0x0d, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x0d, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_ONEHITEXPLODE), add_target(0x00, 0x0e, 0xff, FRTARGETFLAG_SILVER), - add_target(0x00, 0x0f, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x0f, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_ONEHITEXPLODE), add_target(0x00, 0x10, 0xff, FRTARGETFLAG_SILVER), - add_target(0x00, 0x11, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x11, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_ONEHITEXPLODE), add_target(0x00, 0x12, 0xff, FRTARGETFLAG_SILVER), - add_target(0x00, 0x13, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_20), + add_target(0x00, 0x13, 0xff, FRTARGETFLAG_SILVER | FRTARGETFLAG_ONEHITEXPLODE), add_target(0x00, 0x14, 0xff, FRTARGETFLAG_SILVER), add_target(0x00, 0x2b, 0x0a, FRTARGETFLAG_GOLD), add_target(0x00, 0x33, 0x0a, FRTARGETFLAG_GOLD), @@ -469,7 +473,7 @@ u8 weapon_k7avenger[] = { u8 weapon_ar34[] = { start(), - set_num_targets(3, 3, 1), + set_max_active_targets(3, 3, 1), set_score_multiplier(3, 0, 5), set_goal_score(150, 0, 100), set_time_limit(255, 255, 20), @@ -496,7 +500,7 @@ u8 weapon_ar34[] = { u8 weapon_superdragon[] = { start(), - set_num_targets(1, 9, 5), + set_max_active_targets(1, 9, 5), set_score_multiplier(3, 0, 1), set_goal_score(150, 0, 0), set_time_limit(255, 255, 30), @@ -531,7 +535,7 @@ u8 weapon_superdragon[] = { u8 weapon_shotgun[] = { start(), - set_num_targets(1, 3, 1), + set_max_active_targets(1, 3, 1), set_goal_score(240, 0, 170), set_time_limit(255, 30, 20), set_ammo_limit(255, 255, 30), @@ -560,7 +564,7 @@ u8 weapon_shotgun[] = { u8 weapon_sniperrifle[] = { start(), - set_num_targets(3, 3, 3), + set_max_active_targets(3, 3, 3), set_goal_score(120, 120, 150), set_time_limit(255, 255, 12), set_ammo_limit(255, 255, 15), @@ -587,37 +591,37 @@ u8 weapon_sniperrifle[] = { u8 weapon_farsightxr20[] = { start(), - set_num_targets(3, 9, 6), + set_max_active_targets(3, 9, 6), set_goal_score(0, 0, 40), set_time_limit(255, 15, 20), set_ammo_limit(255, 255, 3), set_extra_speed(0, 1, 3), cmd_0a(0x12), set_goal_targets(3, 6, 6), - add_target(0x01, 0x0c, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), - add_target(0x01, 0x10, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), - add_target(0x01, 0x14, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_40), - add_target(0x01, 0x29, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x2a, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x2b, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x2c, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x2d, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x2e, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_40), - add_target(0x01, 0x12, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), - add_target(0x01, 0x13, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), - add_target(0x01, 0x14, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_10), - add_target(0x01, 0x0c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + add_target(0x01, 0x0c, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x10, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x14, 0x03, FRTARGETFLAG_BRONZE | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x29, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x2a, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x2b, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x2c, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x2d, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x2e, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), + add_target(0x01, 0x12, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x01, 0x13, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x01, 0x14, 0x01, FRTARGETFLAG_SILVER | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x01, 0x0c, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), add_target(0x01, 0x12, 0x01, FRTARGETFLAG_GOLD), - add_target(0x01, 0x0e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + add_target(0x01, 0x0e, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), add_target(0x01, 0x14, 0x01, FRTARGETFLAG_GOLD), add_target(0x01, 0x10, 0x01, FRTARGETFLAG_GOLD), - add_target(0x00, 0x1f, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_40), + add_target(0x00, 0x1f, 0x01, FRTARGETFLAG_GOLD | FRTARGETFLAG_FARSIGHTAUTOTARGETABLE), end(), }; u8 weapon_crossbow[] = { start(), - set_num_targets(3, 3, 1), + set_max_active_targets(3, 3, 1), set_score_multiplier(0, 0, 1), set_goal_score(72, 90, 150), set_time_limit(255, 255, 30), @@ -636,7 +640,7 @@ u8 weapon_crossbow[] = { u8 weapon_tranquilizer[] = { start(), - set_num_targets(8, 3, 1), + set_max_active_targets(8, 3, 1), set_goal_score(120, 250, 0), set_time_limit(255, 20, 15), set_ammo_limit(255, 255, 18), @@ -683,7 +687,7 @@ u8 weapon_tranquilizer[] = { u8 weapon_reaper[] = { start(), - set_num_targets(3, 3, 3), + set_max_active_targets(3, 3, 3), set_score_multiplier(5, 0, 3), set_goal_score(200, 0, 250), set_time_limit(255, 30, 30), @@ -720,7 +724,7 @@ u8 weapon_reaper[] = { u8 weapon_devastator[] = { start(), - set_num_targets(3, 6, 1), + set_max_active_targets(3, 6, 1), set_goal_score(0, 0, 0), set_time_limit(255, 50, 30), set_ammo_limit(255, 10, 6), @@ -739,18 +743,18 @@ u8 weapon_devastator[] = { add_target(0x01, 0x45, 0x05, FRTARGETFLAG_SILVER), add_target(0x01, 0x46, 0x05, FRTARGETFLAG_SILVER), add_target(0x01, 0x47, 0x05, FRTARGETFLAG_SILVER), - add_target(0x00, 0x2c, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2f, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2d, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x31, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x2e, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), - add_target(0x00, 0x30, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_10), + add_target(0x00, 0x2c, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2f, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2d, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x31, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x2e, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), + add_target(0x00, 0x30, 0x08, FRTARGETFLAG_GOLD | FRTARGETFLAG_SPAWNFACINGAWAY), end(), }; u8 weapon_rocketlauncher[] = { start(), - set_num_targets(9, 8, 4), + set_max_active_targets(9, 8, 4), set_goal_score(0, 0, 40), set_time_limit(255, 255, 30), set_ammo_limit(255, 18, 4), @@ -783,7 +787,7 @@ u8 weapon_rocketlauncher[] = { u8 weapon_slayer[] = { start(), - set_num_targets(1, 4, 3), + set_max_active_targets(1, 4, 3), set_goal_score(0, 40, 60), set_time_limit(255, 255, 40), set_ammo_limit(255, 6, 8), @@ -811,7 +815,7 @@ u8 weapon_slayer[] = { u8 weapon_combatknife[] = { start(), - set_num_targets(1, 3, 8), + set_max_active_targets(1, 3, 8), set_goal_score(72, 90, 80), set_time_limit(255, 255, 30), set_ammo_limit(255, 18, 255), @@ -837,7 +841,7 @@ u8 weapon_combatknife[] = { u8 weapon_laser[] = { start(), - set_num_targets(3, 1, 3), + set_max_active_targets(3, 1, 3), set_goal_score(250, 180, 250), set_time_limit(255, 20, 20), set_ammo_limit(255, 255, 255), @@ -857,7 +861,7 @@ u8 weapon_laser[] = { u8 weapon_grenade[] = { start(), - set_num_targets(1, 3, 1), + set_max_active_targets(1, 3, 1), set_goal_score(0, 0, 0), set_time_limit(255, 30, 30), set_ammo_limit(255, 255, 6), @@ -894,7 +898,7 @@ u8 weapon_grenade[] = { u8 weapon_1e[] = { start(), - set_num_targets(3, 9, 4), + set_max_active_targets(3, 9, 4), set_goal_score(72, 90, 80), set_time_limit(255, 255, 12), set_ammo_limit(255, 18, 255), @@ -930,7 +934,7 @@ u8 weapon_1e[] = { u8 weapon_timedmine[] = { start(), - set_num_targets(3, 6, 6), + set_max_active_targets(3, 6, 6), set_goal_score(0, 0, 60), set_time_limit(255, 255, 12), set_ammo_limit(255, 6, 1), @@ -957,7 +961,7 @@ u8 weapon_timedmine[] = { u8 weapon_proximitymine[] = { start(), - set_num_targets(3, 3, 5), + set_max_active_targets(3, 3, 5), set_goal_score(0, 0, 0), set_time_limit(255, 255, 30), set_ammo_limit(255, 6, 4), @@ -980,7 +984,7 @@ u8 weapon_proximitymine[] = { u8 weapon_remotemine[] = { start(), - set_num_targets(3, 4, 7), + set_max_active_targets(3, 4, 7), set_goal_score(0, 0, 0), set_time_limit(255, 255, 12), set_ammo_limit(255, 4, 2), diff --git a/src/game/game_167ae0.c b/src/game/game_167ae0.c index 91cde2d23..949b8a228 100644 --- a/src/game/game_167ae0.c +++ b/src/game/game_167ae0.c @@ -766,7 +766,7 @@ glabel var7f1b784c .L0f168c88: /* f168c88: 14a10007 */ bne $a1,$at,.L0f168ca8 /* f168c8c: 02002025 */ or $a0,$s0,$zero -/* f168c90: 0fc67c88 */ jal func0f19f220 +/* f168c90: 0fc67c88 */ jal frIsTargetOneHitExplodable /* f168c94: afa8005c */ sw $t0,0x5c($sp) /* f168c98: 8fa8005c */ lw $t0,0x5c($sp) /* f168c9c: 10400002 */ beqz $v0,.L0f168ca8 @@ -1002,7 +1002,7 @@ glabel var7f1b784c // } // } // -// if (obj->modelnum == MODEL_TARGET && func0f19f220(prop)) { +// if (obj->modelnum == MODEL_TARGET && frIsTargetOneHitExplodable(prop)) { // pass = true; // } // diff --git a/src/game/training.c b/src/game/training.c index 1014e6623..7eb964094 100644 --- a/src/game/training.c +++ b/src/game/training.c @@ -426,8 +426,8 @@ void func0f19d4ec(void) g_FiringRangeData.helpscriptoffset = 0; g_FiringRangeData.helpscriptenabled = false; g_FiringRangeData.helpscriptsleep = 0; - g_FiringRangeData.unk464 = 0; - g_FiringRangeData.numtargets = 0; + g_FiringRangeData.menucountdown = 0; + g_FiringRangeData.maxactivetargets = 0; for (i = 0; i < 18; i++) { g_FiringRangeData.targets[i].prop = NULL; @@ -475,7 +475,7 @@ void frInitDefaults(void) padUnpack(g_FrPads[0], PADFIELD_POS, &pad); - g_FiringRangeData.numtargets = 0; + g_FiringRangeData.maxactivetargets = 0; g_FiringRangeData.goalscore = 0; g_FiringRangeData.timelimit = 200; g_FiringRangeData.ammolimit = 255; @@ -485,29 +485,29 @@ void frInitDefaults(void) g_FiringRangeData.speed = 1; for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { - g_FiringRangeData.targets[i].unk08.x = pad.pos.x; - g_FiringRangeData.targets[i].unk08.y = pad.pos.y; - g_FiringRangeData.targets[i].unk08.z = pad.pos.z; - g_FiringRangeData.targets[i].unk08.z += 6.0f * i; + g_FiringRangeData.targets[i].dstpos.x = pad.pos.x; + g_FiringRangeData.targets[i].dstpos.y = pad.pos.y; + g_FiringRangeData.targets[i].dstpos.z = pad.pos.z; + g_FiringRangeData.targets[i].dstpos.z += 6.0f * i; g_FiringRangeData.targets[i].unk00_01 = false; - g_FiringRangeData.targets[i].unk00_06 = false; - g_FiringRangeData.targets[i].unk00_03 = false; + g_FiringRangeData.targets[i].rotateoncloak = false; + g_FiringRangeData.targets[i].destroyed = false; g_FiringRangeData.targets[i].damage = 0; g_FiringRangeData.targets[i].scriptoffset = 0; - g_FiringRangeData.targets[i].unk1c = 0; - g_FiringRangeData.targets[i].unk14 = 255 * 60; - g_FiringRangeData.targets[i].unk18 = 0; + g_FiringRangeData.targets[i].travelspeed = 0; + g_FiringRangeData.targets[i].scriptsleep = SECSTOFRAMES60(255); + g_FiringRangeData.targets[i].timeuntilrotate = 0; - g_FiringRangeData.targets[i].unk00_05 = false; - g_FiringRangeData.targets[i].unk24 = 0; + g_FiringRangeData.targets[i].rotating = false; + g_FiringRangeData.targets[i].rotatespeed = 0; g_FiringRangeData.targets[i].angle = 0; - g_FiringRangeData.targets[i].unk2c = 0; + g_FiringRangeData.targets[i].rotatetoangle = 0; g_FiringRangeData.targets[i].unk31 = 0; g_FiringRangeData.targets[i].unk32 = 0; - g_FiringRangeData.targets[i].unk33 = 0; - g_FiringRangeData.targets[i].unk38 = 0; + g_FiringRangeData.targets[i].travelling = false; + g_FiringRangeData.targets[i].invincibletimer = 0; g_FiringRangeData.targets[i].frpadnum = -1; func0f13e40c(g_FiringRangeData.targets[i].prop, false); @@ -516,9 +516,9 @@ void frInitDefaults(void) g_FiringRangeData.timetaken = -240; g_FiringRangeData.score = 0; - g_FiringRangeData.curtarget = 0; + g_FiringRangeData.numtargets = 0; g_FiringRangeData.targetsdestroyed = 0; - g_FiringRangeData.unk464 = 0; + g_FiringRangeData.menucountdown = 0; g_FiringRangeData.unk470 = 0; g_FiringRangeData.feedbackzone = 0; g_FiringRangeData.feedbackttl = 0; @@ -533,7 +533,7 @@ void frInitDefaults(void) g_FiringRangeData.helpscriptenabled = false; g_FiringRangeData.helpscriptsleep = 0; g_FiringRangeData.proxyendtimer = 0; - g_FiringRangeData.unk465_04 = false; + g_FiringRangeData.donealarm = false; g_FiringRangeData.ammohasgrace = true; g_FiringRangeData.ammoextra = -1; } @@ -978,27 +978,27 @@ glabel var7f1b93ec // offset += 5; // break; // } -// if (g_FiringRangeData.curtarget < ARRAYCOUNT(g_FiringRangeData.targets)) { -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].frpadindex = frResolveFrPad(script[offset + 1]); -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].scriptindex = script[offset + 2]; -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].maxdamage = script[offset + 3]; -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].unk00_01 = true; -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags = script[offset + 4]; +// if (g_FiringRangeData.numtargets < ARRAYCOUNT(g_FiringRangeData.targets)) { +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].frpadindex = frResolveFrPad(script[offset + 1]); +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].scriptindex = script[offset + 2]; +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].maxdamage = script[offset + 3]; +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].unk00_01 = true; +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].flags = script[offset + 4]; // -// if (g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags & FRTARGETFLAG_08) { -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].unk00_06 = true; +// if (g_FiringRangeData.targets[g_FiringRangeData.numtargets].flags & FRTARGETFLAG_ROTATEONCLOAK) { +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].rotateoncloak = true; // } // -// if (g_FiringRangeData.targets[g_FiringRangeData.curtarget].flags & FRTARGETFLAG_20) { -// g_FiringRangeData.targets[g_FiringRangeData.curtarget].maxdamage = 1; +// if (g_FiringRangeData.targets[g_FiringRangeData.numtargets].flags & FRTARGETFLAG_ONEHITEXPLODE) { +// g_FiringRangeData.targets[g_FiringRangeData.numtargets].maxdamage = 1; // } // -// g_FiringRangeData.curtarget++; +// g_FiringRangeData.numtargets++; // } // offset += 5; // break; -// case FRCMD_SETNUMTARGETS: // f19db00 -// g_FiringRangeData.numtargets = script[offset + 1 + g_FiringRangeData.difficulty]; +// case FRCMD_SETMAXACTIVETARGETS: // f19db00 +// g_FiringRangeData.maxactivetargets = script[offset + 1 + g_FiringRangeData.difficulty]; // offset += 4; // break; // case FRCMD_SETSCOREMULTIPLIER: // f19db24 @@ -1161,7 +1161,7 @@ void frExecuteHelpScript(void) g_FiringRangeData.helpscriptoffset += 2; break; case FRCMD_WAITSECONDS: - g_FiringRangeData.helpscriptsleep = script[offset + 1] * 60; + g_FiringRangeData.helpscriptsleep = SECSTOFRAMES60(script[offset + 1]); g_FiringRangeData.helpscriptoffset += 2; break; case FRCMD_WAITUNTILSHOOT: @@ -1442,8 +1442,8 @@ glabel var7f1b941c // // switch (script[offset]) { // case FRCMD_END: -// g_FiringRangeData.targets[targetnum].unk00_04 = true; -// g_FiringRangeData.targets[targetnum].unk14 = 255 * 60; +// g_FiringRangeData.targets[targetnum].scriptenabled = true; +// g_FiringRangeData.targets[targetnum].scriptsleep = SECSTOFRAMES60(255); // return true; // case FRCMD_GOTOPAD: // frpadnum = frResolveFrPad(script[offset + 1]); @@ -1457,14 +1457,14 @@ glabel var7f1b941c // // padUnpack(g_FrPads[frpadnum], PADFIELD_POS, &pad); // -// g_FiringRangeData.targets[targetnum].unk08.x = pad.pos.x; -// g_FiringRangeData.targets[targetnum].unk08.y = pad.pos.y; -// g_FiringRangeData.targets[targetnum].unk08.z = pad.pos.z; -// g_FiringRangeData.targets[targetnum].unk08.z += 6.0f * targetnum; +// g_FiringRangeData.targets[targetnum].dstpos.x = pad.pos.x; +// g_FiringRangeData.targets[targetnum].dstpos.y = pad.pos.y; +// g_FiringRangeData.targets[targetnum].dstpos.z = pad.pos.z; +// g_FiringRangeData.targets[targetnum].dstpos.z += 6.0f * targetnum; // // if (script[offset + 2] == 0xff) { -// g_FiringRangeData.targets[targetnum].unk1c = -1; -// g_FiringRangeData.targets[targetnum].unk33 = 1; +// g_FiringRangeData.targets[targetnum].travelspeed = -1; +// g_FiringRangeData.targets[targetnum].travelling = true; // } else { // if (g_FrNumSounds < 3) { // g_FrNumSounds++; @@ -1472,11 +1472,11 @@ glabel var7f1b941c // -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1); // } // -// g_FiringRangeData.targets[targetnum].unk1c = (script[offset + 2] / 60.0f) * g_FiringRangeData.speed; -// g_FiringRangeData.targets[targetnum].unk33 = 1; +// g_FiringRangeData.targets[targetnum].travelspeed = (script[offset + 2] / 60.0f) * g_FiringRangeData.speed; +// g_FiringRangeData.targets[targetnum].travelling = true; // } // -// g_FiringRangeData.targets[targetnum].unk14 = script[offset + 3] * 60; +// g_FiringRangeData.targets[targetnum].scriptsleep = SECSTOFRAMES60(script[offset + 3]); // g_FiringRangeData.targets[targetnum].unk32 = 0; // g_FiringRangeData.targets[targetnum].scriptoffset += 4; // return true; @@ -1484,22 +1484,22 @@ glabel var7f1b941c // g_FiringRangeData.targets[targetnum].scriptoffset = 0; // return true; // case FRCMD_0E: -// g_FiringRangeData.targets[targetnum].unk00_04 = true; -// g_FiringRangeData.targets[targetnum].unk14 = script[offset + 1] * 60; +// g_FiringRangeData.targets[targetnum].scriptenabled = true; +// g_FiringRangeData.targets[targetnum].scriptsleep = SECSTOFRAMES60(script[offset + 1]); // g_FiringRangeData.targets[targetnum].scriptoffset += 2; // return true; // case FRCMD_ROTATE: -// if (g_FiringRangeData.targets[targetnum].unk00_06 == false) { +// if (g_FiringRangeData.targets[targetnum].rotateoncloak == false) { // f32 angles[4]; // angles[0] = DEG2RAD(-90); // angles[1] = DEG2RAD(-180); // angles[2] = DEG2RAD(90); // angles[3] = DEG2RAD(180); // -// g_FiringRangeData.targets[targetnum].unk2c = g_FiringRangeData.targets[targetnum].angle + angles[script[offset + 1]]; -// g_FiringRangeData.targets[targetnum].unk24 = angles[script[offset + 1]] / (script[offset + 2] * 15); -// g_FiringRangeData.targets[targetnum].unk00_05 = true; -// g_FiringRangeData.targets[targetnum].unk00_04 = false; +// g_FiringRangeData.targets[targetnum].rotatetoangle = g_FiringRangeData.targets[targetnum].angle + angles[script[offset + 1]]; +// g_FiringRangeData.targets[targetnum].rotatespeed = angles[script[offset + 1]] / (script[offset + 2] * 15); +// g_FiringRangeData.targets[targetnum].rotating = true; +// g_FiringRangeData.targets[targetnum].scriptenabled = false; // } // // g_FiringRangeData.targets[targetnum].scriptoffset += 3; @@ -1563,15 +1563,15 @@ void frInitTargets(void) prop->timetoregen = 0; if (g_FiringRangeData.targets[i].unk00_01) { - g_FiringRangeData.targets[i].unk00_04 = false; - g_FiringRangeData.targets[i].unk00_03 = false; + g_FiringRangeData.targets[i].scriptenabled = false; + g_FiringRangeData.targets[i].destroyed = false; - if (count < g_FiringRangeData.numtargets) { + if (count < g_FiringRangeData.maxactivetargets) { obj->flags2 &= ~OBJFLAG2_INVISIBLE; - g_FiringRangeData.targets[i].unk00_02 = true; + g_FiringRangeData.targets[i].active = true; } else { obj->flags2 |= OBJFLAG2_INVISIBLE; - g_FiringRangeData.targets[i].unk00_02 = false; + g_FiringRangeData.targets[i].active = false; } padUnpack(g_FrPads[g_FiringRangeData.targets[i].frpadindex], PADFIELD_POS, &pospad.pad); @@ -1583,10 +1583,10 @@ void frInitTargets(void) frExecuteTargetScript(i); - if (g_FiringRangeData.targets[i].unk1c == -1) { - pospad.pos.x = g_FiringRangeData.targets[i].unk08.x; - pospad.pos.y = g_FiringRangeData.targets[i].unk08.y; - pospad.pos.z = g_FiringRangeData.targets[i].unk08.z; + if (g_FiringRangeData.targets[i].travelspeed == -1) { + pospad.pos.x = g_FiringRangeData.targets[i].dstpos.x; + pospad.pos.y = g_FiringRangeData.targets[i].dstpos.y; + pospad.pos.z = g_FiringRangeData.targets[i].dstpos.z; } count++; @@ -1600,7 +1600,7 @@ void frInitTargets(void) pospad.pos.z = 6.0f * i; } - if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_10) { + if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_SPAWNFACINGAWAY) { func00016374(0.0f, sp144); g_FiringRangeData.targets[i].angle = M_PI; } else { @@ -2011,36 +2011,36 @@ void frSetFailReason(s32 failreason) frEndSession(false); g_FiringRangeData.failreason = frWasTooInaccurate() ? FRFAILREASON_INACCURATE : failreason; - g_FiringRangeData.unk465_00 = 2; - g_FiringRangeData.unk464 = 60; + g_FiringRangeData.menutype = FRMENUTYPE_FAILED; + g_FiringRangeData.menucountdown = 60; } -void func0f19f18c(void) +void frSetCompleted(void) { frEndSession(false); if (frWasTooInaccurate()) { g_FiringRangeData.failreason = FRFAILREASON_INACCURATE; - g_FiringRangeData.unk465_00 = 2; + g_FiringRangeData.menutype = FRMENUTYPE_FAILED; } else { u32 frweaponindex = frGetWeaponIndexByWeapon(frGetWeaponBySlot(g_FiringRangeData.slot)); frSaveScoreIfBest(frweaponindex, g_FiringRangeData.difficulty + 1); - g_FiringRangeData.unk465_00 = 3; + g_FiringRangeData.menutype = FRMENUTYPE_COMPLETED; } - g_FiringRangeData.unk464 = 60; + g_FiringRangeData.menucountdown = 60; } -bool func0f19f220(struct prop *prop) +bool frIsTargetOneHitExplodable(struct prop *prop) { s32 i; - for (i = 0; i < 18; i++) { + for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { if (g_FiringRangeData.targets[i].unk00_01 - && g_FiringRangeData.targets[i].unk00_03 == 0 - && g_FiringRangeData.targets[i].unk00_02 + && g_FiringRangeData.targets[i].destroyed == false + && g_FiringRangeData.targets[i].active && prop == g_FiringRangeData.targets[i].prop) { - if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_20) { + if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_ONEHITEXPLODE) { return true; } @@ -2073,7 +2073,7 @@ bool func0f19f2ec(struct prop *prop, struct coord *pos) if (prop == g_FiringRangeData.targets[i].prop) { f32 angle; - if (g_FiringRangeData.targets[i].unk00_03) { + if (g_FiringRangeData.targets[i].destroyed) { return false; } @@ -2219,8 +2219,8 @@ glabel var7f1b94bc // // Make list of targets which are facing the laptop gun // for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { // if (g_FiringRangeData.targets[i].unk00_01 -// && g_FiringRangeData.targets[i].unk00_03 == 0 -// && g_FiringRangeData.targets[i].unk00_02) { +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].active) { // f32 angle = func0f19f294(&g_FiringRangeData.targets[i].prop->pos, g_FiringRangeData.targets[i].angle, autogunpos); // // //if (!(angle > BADDEG2RAD(90) && angle < BADDEG2RAD(270))) { @@ -3068,7 +3068,7 @@ glabel var7f1b94e4 /* f1a02f4: 0182082a */ slt $at,$t4,$v0 /* f1a02f8: 14200005 */ bnez $at,.L0f1a0310 /* f1a02fc: 00000000 */ nop -/* f1a0300: 0fc67c63 */ jal func0f19f18c +/* f1a0300: 0fc67c63 */ jal frSetCompleted /* f1a0304: 00000000 */ nop /* f1a0308: 1000017a */ b .L0f1a08f4 /* f1a030c: 8fbf007c */ lw $ra,0x7c($sp) @@ -3088,7 +3088,7 @@ glabel var7f1b94e4 /* f1a033c: 54200006 */ bnezl $at,.L0f1a0358 /* f1a0340: 92ae0454 */ lbu $t6,0x454($s5) .L0f1a0344: -/* f1a0344: 0fc67c63 */ jal func0f19f18c +/* f1a0344: 0fc67c63 */ jal frSetCompleted /* f1a0348: 00000000 */ nop /* f1a034c: 10000169 */ b .L0f1a08f4 /* f1a0350: 8fbf007c */ lw $ra,0x7c($sp) @@ -3500,6 +3500,530 @@ glabel var7f1b94e4 /* f1a0920: 27bd0170 */ addiu $sp,$sp,0x170 ); +// Mismatch issues: +// - Floating point math at 448 is very different +// - g_FrNumSounds at 590 is calculated differently +// - Goal has extra mov.s instruction near 730 +//void frTick(void) +//{ +// struct coord diff; // sp344 +// struct coord newpos; // sp332 +// f32 s5[9]; // sp152 +// f32 s4[21]; // sp188 +// s32 ammotype; +// s32 capacity; +// s32 weaponnum; +// u8 weaponnum2; +// struct prop *prop; +// struct defaultobj *obj; +// struct defaultobj *obj2; +// s32 invincible; +// u8 exploding; +// s32 i; +// s32 j; +// f32 dist; +// f32 mult; +// struct inventory_ammo *ammo; +// struct model08thing *model08thing; +// bool oldside; +// bool newside; +// +// // 9c8 +// if (g_FrIsValidWeapon +// && g_Vars.currentplayer->unk1583_04 == 0 +// && currentPlayerCanHaveWeapon(frGetWeaponBySlot(g_FiringRangeData.slot))) { +// // a0c +// currentPlayerEquipWeapon(frGetWeaponBySlot(g_FiringRangeData.slot)); +// } +// +// // a1c +// // Handle the menu countdown +// if (g_FiringRangeData.menucountdown != 0) { +// g_FiringRangeData.menucountdown -= g_Vars.lvupdate240_60; +// +// // Prevent showing the menu until gun is put away +// if (g_FiringRangeData.menucountdown <= 0) { +// if ((g_FiringRangeData.menutype == FRMENUTYPE_FAILED || g_FiringRangeData.menutype == FRMENUTYPE_COMPLETED) +// && g_Vars.currentplayer->hands[0].weaponnum != WEAPON_UNARMED) { +// g_FiringRangeData.menucountdown = 1; +// } +// } +// +// if (g_FiringRangeData.menucountdown <= 0) { +// g_FiringRangeData.menucountdown = 0; +// +// for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { +// if (g_FiringRangeData.targets[i].prop) { +// func0f0926bc(g_FiringRangeData.targets[i].prop, 1, 0xffff); +// } +// } +// +// switch (g_FiringRangeData.menutype) { +// case FRMENUTYPE_WEAPONLIST: +// func0f0f85e0(ciGetFrWeaponListMenuDialog(), MENUROOT_TRAINING); +// break; +// case FRMENUTYPE_DETAILS: +// func0f0f85e0(&menudialog_frtraininginfo2, MENUROOT_TRAINING); +// break; +// case FRMENUTYPE_FAILED: +// audioStart(var80095200, 0x5db, NULL, -1, -1, -1, -1, -1); +// func0f0f85e0(&menudialog_frtrainingstats2, MENUROOT_TRAINING); +// break; +// case FRMENUTYPE_COMPLETED: +// audioStart(var80095200, 0x5dc, NULL, -1, -1, -1, -1, -1); +// func0f0f85e0(&menudialog_frtrainingstats, MENUROOT_TRAINING); +// func0f1094e4(&var800a22c0, 0, 0); +// break; +// } +// } +// return; +// } +// +// // be8 +// // End the session if the player slipped through the door before it closed +// if (g_Vars.currentplayer->prop->rooms[0] != CIROOM_FIRINGRANGE) { +// if (g_FrIsValidWeapon) { +// for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { +// if (g_FiringRangeData.targets[i].unk00_01 +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].unk31 == 0 +// && g_FiringRangeData.targets[i].travelling) { +// g_FiringRangeData.targets[i].unk31 = 1; +// func0f0926bc(g_FiringRangeData.targets[i].prop, 1, 0xffff); +// } +// } +// +// g_Vars.currentplayer->training = false; +// frEndSession(true); +// chrUnsetStageFlag(NULL, STAGEFLAG_CI_IN_TRAINING); +// } +// return; +// } +// +// // c94 +// if (!g_FrIsValidWeapon) { +// return; +// } +// +// if (g_Vars.currentplayer->isdead) { +// frEndSession(false); +// } +// +// // If paused, stop any target sounds +// if (g_Vars.lvupdate240 == 0) { +// for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { +// if (g_FiringRangeData.targets[i].unk00_01 +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].unk31 == 0 +// && g_FiringRangeData.targets[i].travelling) { +// g_FiringRangeData.targets[i].unk31 = 1; +// func0f0926bc(g_FiringRangeData.targets[i].prop, 1, 0xffff); +// } +// } +// return; +// } +// +// g_Vars.currentplayer->training = true; +// frExecuteHelpScript(); +// +// // d34 +// // Top up the player's ammo if the config defined more ammo than the +// // weapon allows, or if it defined unlimited ammo +// if (g_FiringRangeData.numshotssincetopup != 0) { +// u32 tmp; +// weaponnum = frGetWeaponBySlot(g_FiringRangeData.slot); +// ammotype = weaponGetAmmoType(weaponnum, 0); +// capacity = ammotypeGetMaxCapacity(ammotype); +// ammo = weaponGetAmmoByFunction(weaponnum, 0); +// capacity -= (ammo ? ammo->clipsize : 0); +// +// // d8c +// if (g_FiringRangeData.ammoextra > 0) { +// tmp = ammoGetQuantity(ammotype); +// g_FiringRangeData.ammoextra -= g_FiringRangeData.numshotssincetopup; +// +// if (g_FiringRangeData.ammoextra < 0) { +// g_FiringRangeData.ammoextra = 0; +// } +// +// capacity = tmp + g_FiringRangeData.numshotssincetopup; +// currentPlayerSetAmmoQuantity(ammotype, capacity); +// } else /*dd4*/ if (g_FiringRangeData.ammoextra == -1) { +// currentPlayerSetAmmoQuantity(ammotype, capacity); +// } +// +// // de8 +// if (weaponnum == WEAPON_SUPERDRAGON) { +// capacity = ammotypeGetMaxCapacity(AMMOTYPE_DEVASTATOR); +// +// // e04 +// if (g_FiringRangeData.sdgrenadeextra > 0) { +// tmp = ammoGetQuantity(AMMOTYPE_DEVASTATOR); +// g_FiringRangeData.sdgrenadeextra -= g_FiringRangeData.numshotssincetopup; +// +// if (g_FiringRangeData.sdgrenadeextra < 0) { +// g_FiringRangeData.sdgrenadeextra = 0; +// } +// +// capacity = tmp + g_FiringRangeData.numshotssincetopup; +// currentPlayerSetAmmoQuantity(AMMOTYPE_DEVASTATOR, capacity); +// } else /*e4c*/ if (g_FiringRangeData.sdgrenadeextra == -1) { +// currentPlayerSetAmmoQuantity(AMMOTYPE_DEVASTATOR, capacity); +// } +// } +// +// // e60 +// g_FiringRangeData.numshotssincetopup = 0; +// } +// +// g_FiringRangeData.timetaken += g_Vars.lvupdate240_60; +// +// // e6c +// // Handle prestart +// if (g_FiringRangeData.timetaken < 0) { +// if (g_FiringRangeData.numshots == 0) { +// if (g_FiringRangeData.donealarm == false && g_FiringRangeData.timetaken > -180) { +// g_FiringRangeData.donealarm = true; +// audioStart(var80095200, 0x5d4, NULL, -1, -1, -1, -1, -1); +// } +// +// if (!g_FiringRangeData.donelighting && g_FiringRangeData.timetaken > -225) { +// frInitLighting(); +// } +// +// return; +// } +// +// // Fired a shot during prestart +// if (!g_FiringRangeData.donelighting) { +// frInitLighting(); +// } +// +// g_FiringRangeData.timetaken = 0; +// g_FiringRangeData.donealarm = true; +// } +// +// // f38 +// for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { +// if (g_FiringRangeData.targets[i].unk00_01 +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].active) { +// // f7c +// invincible = false; +// exploding = false; +// weaponnum2 = frGetWeaponBySlot(g_FiringRangeData.slot); +// prop = g_FiringRangeData.targets[i].prop; +// obj = prop->obj; +// +// // f94 +// switch (weaponnum2) { +// case WEAPON_GRENADE: +// case WEAPON_PROXIMITYMINE: +// func0f08abd4(&prop->pos, 1); +// break; +// } +// +// // fb0 +// if (g_FiringRangeData.targets[i].travelling +// && g_FiringRangeData.targets[i].unk31 +// && g_FiringRangeData.targets[i].travelspeed != -1) { +// g_FiringRangeData.targets[i].unk31 = 0; +// func0f0939f8(NULL, g_FiringRangeData.targets[i].prop, 0x5d9, -1, +// -1, 0, 0, 0, 0, -1, 0, -1, -1, -1, -1); +// } +// +// // 028 +// if (g_FiringRangeData.targets[i].angle > 2.2915925979614f +// && g_FiringRangeData.targets[i].angle < 3.9915928840637f) { +// obj->damage = 0; +// } +// +// // 058 +// if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_TMPINVINCIBLE +// && g_FiringRangeData.targets[i].invincibletimer < 300) { +// invincible = true; +// g_FiringRangeData.targets[i].invincibletimer += g_Vars.lvupdate240_60; +// } +// +// // 088 +// if (obj->damage > 0) { +// // 090 +// if (invincible || g_FiringRangeData.targets[i].angle == M_PI) { +// obj->damage = 0; +// } else /*0bc*/ if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_ONEHITEXPLODE +// || obj->damage >= obj->maxdamage +// || frGetWeaponBySlot(g_FiringRangeData.slot) == WEAPON_PHOENIX) { +// g_FiringRangeData.numhitsbullseye++; +// g_FiringRangeData.score += 10; +// exploding = true; +// g_FiringRangeData.feedbackttl = 60; +// g_FiringRangeData.feedbackzone = FRZONE_EXPLODE; +// } +// } +// +// // 11c +// // Handle target being destroyed +// if (exploding || (g_FiringRangeData.targets[i].maxdamage != 255 && g_FiringRangeData.targets[i].damage >= g_FiringRangeData.targets[i].maxdamage)) { +// // 150 +// model08thing = func0f068af4(obj); +// +// if (g_FrNumSounds && g_FiringRangeData.targets[i].travelling) { +// g_FrNumSounds--; +// func0f0926bc(prop, 1, 0xffff); +// } +// +// // 1d0 +// func0f150820(&prop->pos, &obj->realrot[0], &obj->realrot[3], &obj->realrot[6], +// model08thing->unk04[0], model08thing->unk04[1], model08thing->unk04[2], +// model08thing->unk04[3], 2, prop); +// +// g_FiringRangeData.targetsdestroyed++; +// +// if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_ONEHITEXPLODE) { +// explosionCreateSimple(g_FiringRangeData.targets[i].prop, &g_FiringRangeData.targets[i].prop->pos, g_FiringRangeData.targets[i].prop->rooms, EXPLOSIONTYPE_5, 1); +// } +// +// // 210 +// g_FiringRangeData.targets[i].travelling = false; +// g_FiringRangeData.targets[i].active = false; +// g_FiringRangeData.targets[i].destroyed = true; +// +// obj->flags2 |= OBJFLAG2_INVISIBLE; +// +// prop->pos.x = 0; +// prop->pos.y = -5000; +// prop->pos.z = 0; +// +// func0f069c70(obj, true, false); +// +// // 25c +// // Activate another target +// for (j = 0; j < ARRAYCOUNT(g_FiringRangeData.targets); j++) { +// if (g_FiringRangeData.targets[j].destroyed == false +// && g_FiringRangeData.targets[j].unk00_01 +// && g_FiringRangeData.targets[j].active == false) { +// obj2 = g_FiringRangeData.targets[j].prop->obj; +// g_FiringRangeData.targets[j].active = true; +// obj2->flags2 &= ~OBJFLAG2_INVISIBLE; +// break; +// } +// } +// } +// } +// +// // 2bc +// } +// +// // 2dc +// if (g_FiringRangeData.goaltargets == 255) { +// if (g_FiringRangeData.goalscore && g_FiringRangeData.score >= g_FiringRangeData.goalscore) { +// frSetCompleted(); +// return; +// } +// } else if (g_FiringRangeData.targetsdestroyed >= g_FiringRangeData.goaltargets +// && (g_FiringRangeData.goalscore == 0 || g_FiringRangeData.score >= g_FiringRangeData.goalscore)) { +// frSetCompleted(); +// return; +// } +// +// // 354 +// if (g_FiringRangeData.targetsdestroyed >= g_FiringRangeData.numtargets) { +// frSetFailReason(FRFAILREASON_SCOREUNATTAINABLE); +// return; +// } +// +// // 374 +// if (frIsAmmoWasted()) { +// frSetFailReason(FRFAILREASON_OUTOFAMMO); +// return; +// } +// +// // 398 +// if (g_FiringRangeData.timelimit != 255 +// && g_FiringRangeData.timetaken >= SECSTOFRAMES60(g_FiringRangeData.timelimit)) { +// frSetFailReason(FRFAILREASON_TIMEOVER); +// return; +// } +// +// // 3d0 +// // Iterate targets and handle travelling, rotation and script execution +// for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { +// if (g_FiringRangeData.targets[i].unk00_01 +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].active) { +// prop = g_FiringRangeData.targets[i].prop; +// obj = prop->obj; +// +// // 410 +// if (g_FiringRangeData.targets[i].travelling) { +// // 430 +// if (g_FiringRangeData.targets[i].travelspeed == -1) { +// g_FiringRangeData.targets[i].unk32 = 1; +// g_FiringRangeData.targets[i].travelling = false; +// mult = 1; +// dist = -2; +// } else { +// // 448 +// f32 sum = 0; +// diff.x = g_FiringRangeData.targets[i].dstpos.x - prop->pos.x; +// diff.y = g_FiringRangeData.targets[i].dstpos.y - prop->pos.y; +// diff.z = g_FiringRangeData.targets[i].dstpos.z - prop->pos.z; +// sum = sum + diff.x * diff.x; +// sum = sum + diff.y * diff.y; +// sum = sum + diff.z * diff.z; +// +// dist = sqrtf(sum); +// mult = 1; +// +// // 4b0 +// if (dist != 0) { +// mult = (g_FiringRangeData.targets[i].travelspeed * g_Vars.lvupdate240) * 0.25f; +// diff.x *= 1.0f / dist; +// diff.y *= 1.0f / dist; +// diff.z *= 1.0f / dist; +// newpos.x = diff.x * mult + prop->pos.x; +// newpos.y = diff.y * mult + prop->pos.y; +// newpos.z = diff.z * mult + prop->pos.z; +// } else { +// dist = -2; +// } +// } +// +// // 550 +// if (mult >= dist) { +// // Stopping +// newpos.x = g_FiringRangeData.targets[i].dstpos.x; +// newpos.y = g_FiringRangeData.targets[i].dstpos.y; +// newpos.z = g_FiringRangeData.targets[i].dstpos.z; +// +// g_FiringRangeData.targets[i].scriptenabled = true; +// g_FiringRangeData.targets[i].travelling = false; +// +// if (g_FiringRangeData.targets[i].unk32 == false) { +// // 590 +// g_FiringRangeData.targets[i].unk32 = true; +// +// if (g_FrNumSounds) { +// g_FrNumSounds--; +// } +// +// // 5b8 +// func0f0926bc(prop, 1, 0xffff); +// func0f0939f8(NULL, prop, 0x5da, -1, +// -1, 1024, 0, 0, 0, -1, 0, -1, -1, -1, -1); +// } +// } +// +// prop->pos.x = newpos.x; +// prop->pos.y = newpos.y; +// prop->pos.z = newpos.z; +// +// func0f069c70(obj, true, false); +// } +// +// // 63c +// if (g_FiringRangeData.targets[i].rotateoncloak +// && g_FiringRangeData.targets[i].rotating == false) { +// // 650 +// if (g_FiringRangeData.targets[i].timeuntilrotate == 0) { +// struct chrdata *chr = g_Vars.currentplayer->prop->chr; +// bool cloaked = chr->hidden & CHRHFLAG_CLOAKED; +// +// // 670 +// if (cloaked) { +// // 690 +// if (g_FiringRangeData.targets[i].angle == M_PI) { +// g_FiringRangeData.targets[i].timeuntilrotate = 60; +// g_FiringRangeData.targets[i].rotatetoangle = 0; +// g_FiringRangeData.targets[i].rotatespeed = -M_PI / 90; +// } +// } else { +// // 6ac +// if (g_FiringRangeData.targets[i].angle == 0) { +// g_FiringRangeData.targets[i].timeuntilrotate = 60; +// g_FiringRangeData.targets[i].rotatetoangle = M_PI; +// g_FiringRangeData.targets[i].rotatespeed = M_PI / 90; +// } +// } +// } else { +// // 6e4 +// g_FiringRangeData.targets[i].timeuntilrotate -= g_Vars.lvupdate240_60; +// +// if (g_FiringRangeData.targets[i].timeuntilrotate <= 0) { +// g_FiringRangeData.targets[i].timeuntilrotate = 0; +// g_FiringRangeData.targets[i].rotating = true; +// } +// } +// } else /*70c*/ if (g_FiringRangeData.targets[i].rotating) { +// f32 speed = g_FiringRangeData.targets[i].rotatespeed; +// f32 toangle = g_FiringRangeData.targets[i].rotatetoangle; +// oldside = 0; +// +// // 730 +// if (g_FiringRangeData.targets[i].angle < toangle) { +// oldside = 1; +// } +// +// oldside = (u8)oldside; +// +// // 73c +// g_FiringRangeData.targets[i].angle += (speed * g_Vars.lvupdate240) * 0.25f; +// +// newside = 0; +// +// // 778 +// if (g_FiringRangeData.targets[i].angle < toangle) { +// newside = 1; +// } +// +// newside = (u8)newside; +// +// // 78c +// if (newside != oldside || g_FiringRangeData.targets[i].angle == toangle) { +// // 7b0 +// // Reached desired angle +// g_FiringRangeData.targets[i].angle = toangle; +// g_FiringRangeData.targets[i].rotating = false; +// g_FiringRangeData.targets[i].scriptenabled = true; +// g_FiringRangeData.targets[i].scriptsleep = 0; +// +// while (g_FiringRangeData.targets[i].angle > M_TAU) { +// g_FiringRangeData.targets[i].angle -= M_TAU; +// } +// +// while (g_FiringRangeData.targets[i].angle < 0) { +// g_FiringRangeData.targets[i].angle += M_TAU; +// } +// } +// +// // 81c +// func00016374(g_FiringRangeData.targets[i].angle + M_PI, s4); +// func00015f04(obj->model->unk14, s4); +// func00015da0(s4, s5); +// func00015cd8(s5, obj->realrot); +// } +// +// // 854 +// if (g_FiringRangeData.targets[i].scriptenabled +// && g_FiringRangeData.targets[i].scriptsleep != SECSTOFRAMES60(255)) { +// // 874 +// g_FiringRangeData.targets[i].scriptsleep -= g_Vars.lvupdate240_60; +// +// // 87c +// if (g_FiringRangeData.targets[i].scriptsleep <= 0) { +// g_FiringRangeData.targets[i].scriptenabled = false; +// +// while (!frExecuteTargetScript(i)); +// +// if (frTargetIsAtScriptStart(i)) { +// while (!frExecuteTargetScript(i)); +// } +// } +// } +// } +// } +//} + void func0f1a0924(struct prop *prop) { struct defaultobj *obj = prop->obj; @@ -3658,8 +4182,8 @@ glabel frChooseFarsightTarget ); // Mismatch because f26 and f28 are swapped and the multiplication order for -// unk1c is different. f26 should be constant 0 (used in dist > 0 and value < 0 -// checks) and f28 should be bestvalue. +// travelspeed is different. f26 should be constant 0 (used in dist > 0 and +// value < 0 checks) and f28 should be bestvalue. //bool frChooseFarsightTarget(void) //{ // f32 bestvalue = 1; @@ -3671,9 +4195,9 @@ glabel frChooseFarsightTarget // if (getCurrentPlayerWeaponId(0) == WEAPON_FARSIGHTXR20) { // for (i = 0; i < ARRAYCOUNT(g_FiringRangeData.targets); i++) { // if (g_FiringRangeData.targets[i].unk00_01 -// && g_FiringRangeData.targets[i].unk00_03 == 0 -// && g_FiringRangeData.targets[i].unk00_02 -// && g_FiringRangeData.targets[i].flags & FRTARGETFLAG_40) { +// && g_FiringRangeData.targets[i].destroyed == false +// && g_FiringRangeData.targets[i].active +// && g_FiringRangeData.targets[i].flags & FRTARGETFLAG_FARSIGHTAUTOTARGETABLE) { // struct prop *prop = g_FiringRangeData.targets[i].prop; // f32 xdiff = g_Vars.currentplayer->bond2.unk10.x - prop->pos.x; // f32 ydiff = g_Vars.currentplayer->bond2.unk10.y - prop->pos.y; @@ -3705,8 +4229,8 @@ glabel frChooseFarsightTarget s32 frIsInTraining(void) { - if (g_FiringRangeData.unk464 > 0 && - (g_FiringRangeData.unk465_00 == 2 || g_FiringRangeData.unk465_00 == 3)) { + if (g_FiringRangeData.menucountdown > 0 && + (g_FiringRangeData.menutype == FRMENUTYPE_FAILED || g_FiringRangeData.menutype == FRMENUTYPE_COMPLETED)) { return true; } @@ -3733,12 +4257,12 @@ void frCalculateHit(struct defaultobj *obj, struct coord *hitpos, f32 maulerchar f32 dist = sqrtf(xdiff * xdiff + ydiff * ydiff + zdiff * zdiff); - if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_20) { + if (g_FiringRangeData.targets[i].flags & FRTARGETFLAG_ONEHITEXPLODE) { g_FiringRangeData.targets[i].damage = g_FiringRangeData.targets[i].maxdamage; } else if (frGetWeaponBySlot(g_FiringRangeData.slot) == WEAPON_MAULER) { g_FiringRangeData.targets[i].damage += (f32)((s32)(maulercharge * 0.1f) + 1); - } else if ((g_FiringRangeData.targets[i].flags & FRTARGETFLAG_80) == 0 - || g_FiringRangeData.targets[i].unk38 >= 300) { + } else if ((g_FiringRangeData.targets[i].flags & FRTARGETFLAG_TMPINVINCIBLE) == 0 + || g_FiringRangeData.targets[i].invincibletimer >= 300) { g_FiringRangeData.targets[i].damage++; } @@ -3765,7 +4289,7 @@ void frCalculateHit(struct defaultobj *obj, struct coord *hitpos, f32 maulerchar void func0f1a0fc8(void) { g_FiringRangeData.numshots++; - g_FiringRangeData.unk45a++; + g_FiringRangeData.numshotssincetopup++; } bool ciIsChrBioUnlocked(u32 bodynum) @@ -4887,12 +5411,12 @@ Gfx *frRenderHud(Gfx *gdl) mult = 1; } - if (!g_FrIsValidWeapon && g_FiringRangeData.unk464 <= 0) { + if (!g_FrIsValidWeapon && g_FiringRangeData.menucountdown <= 0) { return gdl; } - if (g_FiringRangeData.unk464 != 0) { - alpha = (f32)(g_FiringRangeData.unk464 * 160) / 60.0f; + if (g_FiringRangeData.menucountdown != 0) { + alpha = (f32)(g_FiringRangeData.menucountdown * 160) / 60.0f; } gdl = func0f153628(gdl); diff --git a/src/include/constants.h b/src/include/constants.h index bd9e8482b..91e11cb09 100644 --- a/src/include/constants.h +++ b/src/include/constants.h @@ -21,6 +21,7 @@ #define PLAYERCOUNT() ((g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0) + (g_Vars.players[3] ? 1 : 0)) #define PLAYERCOUNT3012() ((g_Vars.players[3] ? 1 : 0) + (g_Vars.players[0] ? 1 : 0) + (g_Vars.players[1] ? 1 : 0) + (g_Vars.players[2] ? 1 : 0)) #define SECSTOFRAMES240(secs) (secs * 240) +#define SECSTOFRAMES60(secs) (secs * 60) #define TEXT(bankid, index) ((bankid << 9) | index) // These actions are assigned to chr->actiontype @@ -560,6 +561,7 @@ #define EXPLOSIONTYPE_0 0 #define EXPLOSIONTYPE_3 3 +#define EXPLOSIONTYPE_5 5 #define EXPLOSIONTYPE_8 8 #define EXPLOSIONTYPE_12 12 #define EXPLOSIONTYPE_14 14 @@ -581,29 +583,29 @@ #define FLOORTYPE_DIRT 7 #define FLOORTYPE_SNOW 8 -#define FRCMD_ADDTARGET 0x00 -#define FRCMD_SETNUMTARGETS 0x01 -#define FRCMD_SETGOALSCORE 0x02 -#define FRCMD_SETTIMELIMIT 0x03 -#define FRCMD_SETAMMOLIMIT 0x04 -#define FRCMD_SETEXTRASPEED 0x05 -#define FRCMD_SETGOALACCURACY 0x06 -#define FRCMD_SETGOALTARGETS 0x07 -#define FRCMD_SETHELPSCRIPT 0x08 -#define FRCMD_SETGRENADELIMIT 0x09 -#define FRCMD_0A 0x0a -#define FRCMD_SETSCOREMULTIPLIER 0x0b -#define FRCMD_GOTOPAD 0x0c -#define FRCMD_RESTART 0x0d -#define FRCMD_0E 0x0e -#define FRCMD_ROTATE 0x0f -#define FRCMD_HUDMSG 0x10 -#define FRCMD_WAITUNTILSHOOT 0x11 -#define FRCMD_WAITSECONDS 0x12 -#define FRCMD_END 0x13 -#define FRCMD_IFBRONZE 0xfb -#define FRCMD_IFSILVER 0xfc -#define FRCMD_IFGOLD 0xfd +#define FRCMD_ADDTARGET 0x00 +#define FRCMD_SETMAXACTIVETARGETS 0x01 +#define FRCMD_SETGOALSCORE 0x02 +#define FRCMD_SETTIMELIMIT 0x03 +#define FRCMD_SETAMMOLIMIT 0x04 +#define FRCMD_SETEXTRASPEED 0x05 +#define FRCMD_SETGOALACCURACY 0x06 +#define FRCMD_SETGOALTARGETS 0x07 +#define FRCMD_SETHELPSCRIPT 0x08 +#define FRCMD_SETGRENADELIMIT 0x09 +#define FRCMD_0A 0x0a +#define FRCMD_SETSCOREMULTIPLIER 0x0b +#define FRCMD_GOTOPAD 0x0c +#define FRCMD_RESTART 0x0d +#define FRCMD_0E 0x0e +#define FRCMD_ROTATE 0x0f +#define FRCMD_HUDMSG 0x10 +#define FRCMD_WAITUNTILSHOOT 0x11 +#define FRCMD_WAITSECONDS 0x12 +#define FRCMD_END 0x13 +#define FRCMD_IFBRONZE 0xfb +#define FRCMD_IFSILVER 0xfc +#define FRCMD_IFGOLD 0xfd #define FRDIFFICULTY_BRONZE 0 #define FRDIFFICULTY_SILVER 1 @@ -615,14 +617,19 @@ #define FRFAILREASON_SCOREUNATTAINABLE 3 #define FRFAILREASON_INACCURATE 4 -#define FRTARGETFLAG_BRONZE 0x01 -#define FRTARGETFLAG_SILVER 0x02 -#define FRTARGETFLAG_GOLD 0x04 -#define FRTARGETFLAG_08 0x08 -#define FRTARGETFLAG_10 0x10 -#define FRTARGETFLAG_20 0x20 -#define FRTARGETFLAG_40 0x40 -#define FRTARGETFLAG_80 0x80 +#define FRMENUTYPE_WEAPONLIST 0 +#define FRMENUTYPE_DETAILS 1 +#define FRMENUTYPE_FAILED 2 +#define FRMENUTYPE_COMPLETED 3 + +#define FRTARGETFLAG_BRONZE 0x01 +#define FRTARGETFLAG_SILVER 0x02 +#define FRTARGETFLAG_GOLD 0x04 +#define FRTARGETFLAG_ROTATEONCLOAK 0x08 +#define FRTARGETFLAG_SPAWNFACINGAWAY 0x10 +#define FRTARGETFLAG_ONEHITEXPLODE 0x20 +#define FRTARGETFLAG_FARSIGHTAUTOTARGETABLE 0x40 +#define FRTARGETFLAG_TMPINVINCIBLE 0x80 #define FRZONE_RING3 1 #define FRZONE_RING2 2 diff --git a/src/include/firingrange/frcommands.h b/src/include/firingrange/frcommands.h index 04d6d1699..355058855 100644 --- a/src/include/firingrange/frcommands.h +++ b/src/include/firingrange/frcommands.h @@ -1,7 +1,7 @@ #define add_target(frpadnum, script, target01, flags) \ 0x00, frpadnum, script, target01, flags -#define set_num_targets(bronze, silver, gold) \ +#define set_max_active_targets(bronze, silver, gold) \ 0x01, bronze, silver, gold #define set_goal_score(bronze, silver, gold) \ diff --git a/src/include/game/game_092610.h b/src/include/game/game_092610.h index 32fb070c6..9f11750fa 100644 --- a/src/include/game/game_092610.h +++ b/src/include/game/game_092610.h @@ -4,7 +4,7 @@ #include "types.h" u32 func0f092610(void); -void func0f0926bc(struct prop *prop, u32 arg1, u16 arg2); +void func0f0926bc(struct prop *prop, s32 arg1, u16 arg2); s32 func0f0927d4(f32 arg0, f32 arg1, f32 arg2, f32 arg3, s16 arg4); s32 func0f092914(s32 arg0); u32 func0f09294c(void); diff --git a/src/include/game/game_097ba0.h b/src/include/game/game_097ba0.h index eb35468c5..f69a3643d 100644 --- a/src/include/game/game_097ba0.h +++ b/src/include/game/game_097ba0.h @@ -152,7 +152,7 @@ void func0f0a9494(u32 operation); void func0f0a94d0(u32 operation, struct coord *a, struct coord *b); void func0f0a95ec(u32 arg0, bool enable); void currentPlayerSetAmmoQuantity(s32 ammotype, s32 quantity); -s32 ammoGetQuantity(u32 type); +s32 ammoGetQuantity(s32 type); s32 currentPlayerGetAmmoCount(s32 ammotype); s32 ammotypeGetMaxCapacity(u32 ammotype); bool ammotypeAllowsUnlimitedAmmo(u32 ammotype); diff --git a/src/include/game/game_150820.h b/src/include/game/game_150820.h index 525974889..93d7ff05c 100644 --- a/src/include/game/game_150820.h +++ b/src/include/game/game_150820.h @@ -3,7 +3,7 @@ #include #include "types.h" -u32 func0f150820(void); +u16 func0f150820(struct coord *pos, f32 *rotx, f32 *roty, f32 *rotz, f32 arg4, f32 arg5, f32 arg6, f32 arg7, u32 arg8, struct prop *prop); u32 func0f150d38(void); u32 func0f151780(void); u32 func0f151ed0(void); diff --git a/src/include/game/propobj.h b/src/include/game/propobj.h index fdbcec553..a70219647 100644 --- a/src/include/game/propobj.h +++ b/src/include/game/propobj.h @@ -69,7 +69,7 @@ u32 func0f06896c(void); u32 func0f068998(void); u32 func0f068aa8(void); u32 func0f068ad4(void); -u32 func0f068af4(void); +struct model08thing *func0f068af4(struct defaultobj *obj); u32 func0f068b14(void); u32 func0f068c04(void); u32 func0f068fc8(void); diff --git a/src/include/game/training.h b/src/include/game/training.h index b662047e1..54509cfb9 100644 --- a/src/include/game/training.h +++ b/src/include/game/training.h @@ -49,8 +49,8 @@ char *frGetWeaponDescription(void); void frEndSession(bool hidetargets); bool frWasTooInaccurate(void); void frSetFailReason(s32 failreason); -void func0f19f18c(void); -bool func0f19f220(struct prop *prop); +void frSetCompleted(void); +bool frIsTargetOneHitExplodable(struct prop *prop); f32 func0f19f294(struct coord *a, f32 angle, struct coord *b); bool func0f19f2ec(struct prop *prop, struct coord *pos); struct prop *frChooseAutogunTarget(struct coord *arg0); diff --git a/src/include/types.h b/src/include/types.h index da30f7d13..d4e839d59 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -5292,34 +5292,34 @@ struct hudmessage { struct frtarget { /*0x00*/ u8 unk00_01 : 1; - /*0x00*/ u8 unk00_02 : 1; - /*0x00*/ u8 unk00_03 : 1; - /*0x00*/ u8 unk00_04 : 1; - /*0x00*/ u8 unk00_05 : 1; - /*0x00*/ u8 unk00_06 : 1; + /*0x00*/ u8 active : 1; + /*0x00*/ u8 destroyed : 1; + /*0x00*/ u8 scriptenabled : 1; + /*0x00*/ u8 rotating : 1; + /*0x00*/ u8 rotateoncloak : 1; /*0x00*/ u8 frpadindex : 2; /*0x01*/ u8 maxdamage; /*0x02*/ u8 scriptindex; /*0x04*/ struct prop *prop; - /*0x08*/ struct coord unk08; - /*0x14*/ s32 unk14; // scriptsleep? - /*0x18*/ u32 unk18; - /*0x1c*/ f32 unk1c; + /*0x08*/ struct coord dstpos; + /*0x14*/ s32 scriptsleep; + /*0x18*/ s32 timeuntilrotate; + /*0x1c*/ f32 travelspeed; /*0x20*/ u8 damage; /*0x21*/ u8 scriptoffset; - /*0x24*/ f32 unk24; + /*0x24*/ f32 rotatespeed; // negative for reverse direction /*0x28*/ f32 angle; - /*0x2c*/ f32 unk2c; + /*0x2c*/ f32 rotatetoangle; /*0x30*/ u8 flags; /*0x31*/ u8 unk31; /*0x32*/ u8 unk32; - /*0x33*/ u8 unk33; + /*0x33*/ u8 travelling; /*0x34*/ s8 frpadnum; - /*0x38*/ s32 unk38; + /*0x38*/ s32 invincibletimer; }; struct frdata { - /*0x000*/ u8 numtargets; + /*0x000*/ u8 maxactivetargets; /*0x001*/ u8 unk001; /*0x002*/ u16 goalscore; /*0x004*/ u8 goaltargets; @@ -5331,21 +5331,21 @@ struct frdata { /*0x010*/ struct frtarget targets[18]; /*0x448*/ u8 difficulty; /*0x44c*/ s32 timetaken; - /*0x450*/ u32 score; - /*0x454*/ u8 curtarget; + /*0x450*/ s32 score; + /*0x454*/ u8 numtargets; /*0x455*/ u8 targetsdestroyed; /*0x456*/ u16 slot; /*0x458*/ u16 numshots; - /*0x45a*/ u8 unk45a; + /*0x45a*/ u8 numshotssincetopup; /*0x45b*/ u8 failreason; /*0x45c*/ u16 numhitsbullseye; /*0x45e*/ u16 numhitsring1; /*0x460*/ u16 numhitsring2; /*0x462*/ u16 numhitsring3; - /*0x464*/ s8 unk464; - /*0x465*/ u8 unk465_00 : 3; + /*0x464*/ s8 menucountdown; + /*0x465*/ u8 menutype : 3; /*0x465*/ u8 donelighting : 1; - /*0x465*/ u8 unk465_04 : 1; + /*0x465*/ u8 donealarm : 1; /*0x465*/ u8 ammohasgrace : 1; /*0x465*/ u8 unk465_06 : 2; /*0x466*/ u8 helpscriptindex; @@ -5357,7 +5357,7 @@ struct frdata { /*0x472*/ s8 feedbackttl; /*0x474*/ s16 proxyendtimer; /*0x476*/ s16 ammoextra; - /*0x478*/ u16 sdgrenadeextra; + /*0x478*/ s16 sdgrenadeextra; /*0x47c*/ u32 unk47c; }; @@ -6345,4 +6345,9 @@ struct padlockeddoor { struct padlockeddoor *next; }; +struct model08thing { + u32 unk00; + f32 unk04[4]; +}; + #endif