diff --git a/include/rnc/hero/hero_state.h b/include/rnc/hero/hero_state.h index 7aaf8dac8e..c7cf74327a 100644 --- a/include/rnc/hero/hero_state.h +++ b/include/rnc/hero/hero_state.h @@ -135,6 +135,10 @@ enum HeroStateId { HERO_STATE_DYING_ZERO_HEALTH = 0x82 }; +enum HeroAnimationEntryMode { + HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS = 0x2 +}; + enum HeroVehicleMode { HERO_VEHICLE_MODE_ON_FOOT = 0x0, HERO_VEHICLE_MODE_CLANK = 0x1, diff --git a/include/rnc/mobys/moby_state.h b/include/rnc/mobys/moby_state.h new file mode 100644 index 0000000000..f1d95a268b --- /dev/null +++ b/include/rnc/mobys/moby_state.h @@ -0,0 +1,9 @@ +#ifndef LOMBYTE_RNC_MOBYS_MOBY_STATE_H +#define LOMBYTE_RNC_MOBYS_MOBY_STATE_H + +enum MobyRemovalState { + MOBY_STATE_ALTERNATE_REMOVAL_MARKER = 0xFD, + MOBY_STATE_REMOVAL_MARKER = 0xFE +}; + +#endif /* LOMBYTE_RNC_MOBYS_MOBY_STATE_H */ diff --git a/include/rnc/overlay/shared/game/queue_planet_unlock_message.h b/include/rnc/overlay/shared/game/queue_planet_unlock_message.h index 97877941bd..7b432b8ad5 100644 --- a/include/rnc/overlay/shared/game/queue_planet_unlock_message.h +++ b/include/rnc/overlay/shared/game/queue_planet_unlock_message.h @@ -5,6 +5,6 @@ void queue_planet_unlock_message(s32) __asm__("FUN_L00_00262d38"); -void FUN_L00_00262cf0(void *, void *); +void fast_add_rotations_cf_spherical_offset(void *, void *) __asm__("FUN_L00_00262cf0"); #endif /* LOMBYTE_RNC_OVERLAY_SHARED_GAME_QUEUE_PLANET_UNLOCK_MESSAGE_H */ diff --git a/include/rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h b/include/rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h index f9cbe3aef8..d681232c09 100644 --- a/include/rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h +++ b/include/rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h @@ -7,7 +7,7 @@ void update_joint_animation(void *m, unsigned char *p, int c, float fa, float fb void initialize_moby_transform_history(int source_moby, char *history_state) __asm__("FUN_L00_00262500"); -int FUN_L00_00261b48(int, void *, void *, void *); +int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); void path_sample_at_distance(int, float *, float *, void *, float, float) __asm__("FUN_L00_00262360"); #endif /* LOMBYTE_RNC_OVERLAY_SHARED_MOBYS_TEST_PATH_SEGMENT_STRICT_CROSSING_H */ diff --git a/src/audio/voices/is_voice_active.c b/src/audio/voices/is_voice_active.c index 372bea7348..86fc88d890 100644 --- a/src/audio/voices/is_voice_active.c +++ b/src/audio/voices/is_voice_active.c @@ -6,7 +6,7 @@ struct VoiceState { u8 pad_0[0x74]; u8 unk74; u8 pad_75[0x9]; - s16 unk7E; + s16 resolved_sound_id; }; s32 is_voice_active(s32 voice_index, s32 sound_id) __asm__("FUN_001eb740"); @@ -16,7 +16,7 @@ s32 is_voice_active(s32 voice_index, s32 sound_id) { if (voice_index >= 0) { voice = (struct VoiceState *)(voice_index * 0x70 + ((u8 *)&voice_pool)); - if (voice->unk7E == sound_id + D_0015F5B4) { + if (voice->resolved_sound_id == sound_id + D_0015F5B4) { if ((u32)(voice->unk74 - 1) < 2) { return 1; } diff --git a/src/camera/apply_camera_shake.c b/src/camera/apply_camera_shake.c index 17867fcf2e..766de120ee 100644 --- a/src/camera/apply_camera_shake.c +++ b/src/camera/apply_camera_shake.c @@ -26,7 +26,7 @@ void apply_camera_shake(struct CameraShake *shake, s32 axis_index) { f32 total_frames_float; f32 remaining_frame_ratio; f32 oscillation_cosine; - f32 val; + f32 applied_shake_offset; s32 remaining_frames; if (cur_cam[0] != 0 && cur_cam[0]->unk86 == 6) { @@ -44,12 +44,13 @@ void apply_camera_shake(struct CameraShake *shake, s32 axis_index) { remaining_frame_ratio = remaining_frames_float / total_frames_float; oscillation_cosine = fast_cos(fast_normalize_angle(2.0f * convert_integer_to_float(shake->unk8))); - val = shake->unk0 * oscillation_cosine * remaining_frame_ratio * remaining_frame_ratio; - shake->unk4 = val; + applied_shake_offset = + shake->unk0 * oscillation_cosine * remaining_frame_ratio * remaining_frame_ratio; + shake->unk4 = applied_shake_offset; if (axis_index == 0) { - fast_vec_normalize(shake_offset, D_001872B0, val); + fast_vec_normalize(shake_offset, D_001872B0, applied_shake_offset); } else { - fast_vec_normalize(shake_offset, camera_rows, val); + fast_vec_normalize(shake_offset, camera_rows, applied_shake_offset); } fast_vec_add(camera_position, camera_position, shake_offset); } else { diff --git a/src/camera/camera_activation_check_priority.c b/src/camera/camera_activation_check_priority.c index c957200651..ff087d0fee 100644 --- a/src/camera/camera_activation_check_priority.c +++ b/src/camera/camera_activation_check_priority.c @@ -101,8 +101,9 @@ int camera_activation_check_priority(struct UpdateCam *candidate, struct UpdateC return 1; } { - CamRec20 *rec = &D_0015EF90[candidate->descriptor_index]; - int secondary_descriptor_index = *(int *)((char *)rec->unk1C + 0x24); + CamRec20 *candidate_descriptor_entry = &D_0015EF90[candidate->descriptor_index]; + int secondary_descriptor_index = + *(int *)((char *)candidate_descriptor_entry->unk1C + 0x24); if (secondary_descriptor_index < 0 || (hero_state->rail_spline == D_0015EF40[secondary_descriptor_index].unk10 && diff --git a/src/camera/restore_camera_vectors.c b/src/camera/restore_camera_vectors.c index b4668ddf96..9584774041 100644 --- a/src/camera/restore_camera_vectors.c +++ b/src/camera/restore_camera_vectors.c @@ -6,8 +6,11 @@ void restore_camera_vectors(void) __asm__("FUN_001ec868"); void restore_camera_vectors(void) { + enum { + CAMERA_TRANSITION_ALTERNATE_DISABLED = 0 + }; struct CameraTransition *transition = &cam_trans_state; - if (transition->kind != 0) { + if (transition->kind != CAMERA_TRANSITION_ALTERNATE_DISABLED) { qcopy(transition->blend.position, transition->orbit.saved_position); qcopy(transition->blend.rotation, transition->orbit.saved_rotation); } diff --git a/src/camera/start_camera_blend.c b/src/camera/start_camera_blend.c index b361de0c31..5191c43842 100644 --- a/src/camera/start_camera_blend.c +++ b/src/camera/start_camera_blend.c @@ -21,18 +21,22 @@ void start_camera_blend(struct UpdateCam *source) { CAMERA_TRANSITION_KIND_BLEND = 0, CAMERA_TRANSITION_PHASE_SEED_FROM_SOURCE = 1 }; + enum { + CAMERA_TRANSITION_KIND_ORBIT_ACTIVE_CAMERA = 1, + CAMERA_TRANSITION_KIND_ORBIT_SHARED_TARGET = 2 + }; struct CameraTransition *transition = &cam_trans_state; char orbit_reference_direction[16]; char orbit_yaw_side_direction[16]; char orbit_axis[16]; - unsigned char sub; + unsigned char requested_transition_kind; if (transition->mode == CAMERA_TRANSITION_PHASE_SEED_FROM_SOURCE) { - sub = transition->requested_kind; - if (sub == 0) { + requested_transition_kind = transition->requested_kind; + if (requested_transition_kind == CAMERA_TRANSITION_KIND_BLEND) { qcopy(transition->blend.position, &source->pos); extract_matrix_rotation_quaternion(transition->blend.rotation, source); - } else if (sub == 2) { + } else if (requested_transition_kind == CAMERA_TRANSITION_KIND_ORBIT_SHARED_TARGET) { qcopy(transition->orbit.saved_position, &source->pos); extract_matrix_rotation_quaternion(transition->orbit.saved_rotation, source); capture_camera_orientation(); @@ -55,14 +59,14 @@ void start_camera_blend(struct UpdateCam *source) { qcopy(transition->orbit.saved_rotation, transition->orbit.rotation); } } else { - sub = transition->requested_kind; - if (sub == 2) { + requested_transition_kind = transition->requested_kind; + if (requested_transition_kind == CAMERA_TRANSITION_KIND_ORBIT_SHARED_TARGET) { save_camera_vectors(); capture_camera_orientation(); - } else if (sub == 1) { + } else if (requested_transition_kind == CAMERA_TRANSITION_KIND_ORBIT_ACTIVE_CAMERA) { save_camera_vectors(); qcopy(transition->orbit.rotation, transition->orbit.saved_rotation); - } else if (sub == 0) { + } else if (requested_transition_kind == CAMERA_TRANSITION_KIND_BLEND) { restore_camera_vectors(); } } diff --git a/src/game/missions/collect_mission_ids.c b/src/game/missions/collect_mission_ids.c index cb4ac05250..76daaaede8 100644 --- a/src/game/missions/collect_mission_ids.c +++ b/src/game/missions/collect_mission_ids.c @@ -16,6 +16,9 @@ int collect_mission_ids(int *out, int use_selected_ids) __asm__("FUN_0020bc00"); int collect_mission_ids(int *mission_ids, int *mask, int *nums, int use_selected_ids) { + enum { + MISSION_STATUS_ALL_CONDITIONS_MET = 2 + }; MissionNode *mission_node_cursor = mission_id_collection_node_source[0]; int count = 0; int all = 1; @@ -40,11 +43,12 @@ int collect_mission_ids(int *mission_ids, int *mask, int *nums, int use_selected if (!(f & 2) && t != 0 && !((f & 1) && t == 2)) { mission_ids[count] = mission_node_cursor->id; if (use_selected_ids != 0) { - mission_ids[count] = (mission_node_cursor->status == 2) - ? 0x523E - : mission_node_cursor->ids[mission_node_cursor->sel]; + mission_ids[count] = + (mission_node_cursor->status == MISSION_STATUS_ALL_CONDITIONS_MET) + ? 0x523E + : mission_node_cursor->ids[mission_node_cursor->sel]; } - if (mask != 0 && mission_node_cursor->status == 2) { + if (mask != 0 && mission_node_cursor->status == MISSION_STATUS_ALL_CONDITIONS_MET) { *mask |= 1 << count; } if (nums != 0) { diff --git a/src/input/init_pads.c b/src/input/init_pads.c index de8b6d172b..e3e0e85eda 100644 --- a/src/input/init_pads.c +++ b/src/input/init_pads.c @@ -9,22 +9,26 @@ typedef struct { u8 reserve[4]; } scePad2SocketParam; -scePad2SocketParam D_001CD760 = {0}; +scePad2SocketParam controller_socket_params __asm__("D_001CD760") = {0}; extern s32 scePad2Init(s32); extern s32 scePad2CreateSocket(scePad2SocketParam *, void *); void init_pads(void) __asm__("FUN_00217048"); void init_pads(void) { + enum { + CONTROLLER_PROFILE_INITIAL_STATE = 0, + CONTROLLER_DEVICE_INITIAL_STATE = 0 + }; sceDbcInit(); scePad2Init(0); - D_001CD760.port = 2; - D_001CD760.slot = 0; - controller_state.socket = scePad2CreateSocket(&D_001CD760, &controller_state); - D_001CD760.port = 2; - D_001CD760.slot = 1; - controller_state.profile_state = 0; - controller_state.device_state = 0; + controller_socket_params.port = 2; + controller_socket_params.slot = 0; + controller_state.socket = scePad2CreateSocket(&controller_socket_params, &controller_state); + controller_socket_params.port = 2; + controller_socket_params.slot = 1; + controller_state.profile_state = CONTROLLER_PROFILE_INITIAL_STATE; + controller_state.device_state = CONTROLLER_DEVICE_INITIAL_STATE; } extern __typeof__(init_pads) func_00217048 __attribute__((alias("FUN_00217048"))); diff --git a/src/input/poll_pad_device_state.c b/src/input/poll_pad_device_state.c index 8a1fa50661..6fb1fd959d 100644 --- a/src/input/poll_pad_device_state.c +++ b/src/input/poll_pad_device_state.c @@ -41,9 +41,9 @@ void poll_pad_device_state(struct PadState *pad_state) { for (i = 0; i < byte_count; i++) { pad_state->button_profile[i] = pad_response_buffer[i]; } - pad_state->profile_state = 1; + pad_state->profile_state = PAD_INPUT_POLLING; } else { - pad_state->profile_state = 2; + pad_state->profile_state = PAD_BUTTON_PROFILE_TOO_LARGE; byte_count = 0; } for (i = byte_count; i < 4; i++) { @@ -73,7 +73,7 @@ void poll_pad_device_state(struct PadState *pad_state) { } } else { clear_pad_input(pad_state); - pad_state->profile_state = 0; + pad_state->profile_state = PAD_PROFILE_INITIALIZATION; } pad_state->unk188 = 0; pad_state->unk189 = 0; diff --git a/src/mobys/attach_manipulator.c b/src/mobys/attach_manipulator.c index faaf45c459..5e75fe783e 100644 --- a/src/mobys/attach_manipulator.c +++ b/src/mobys/attach_manipulator.c @@ -6,7 +6,7 @@ typedef struct MobyAttachOwner { u8 pad0[0x24]; void *unk24; u8 pad28[0x3C]; - Manipulator *unk64; + Manipulator *manipulator_head; } MobyAttachOwner; struct Manipulator { @@ -43,8 +43,8 @@ void attach_manipulator(MobyAttachOwner *source_moby, s32 slot_index, Manipulato u8 record_byte_offset = *slot_record; manip->unk4 = (void *)((slot_record[record_byte_offset + 4] << 6) + 0x70000000); } - manip->unk8 = source_moby->unk64; - source_moby->unk64 = manip; + manip->unk8 = source_moby->manipulator_head; + source_moby->manipulator_head = manip; } } diff --git a/src/mobys/init_moby_instance.c b/src/mobys/init_moby_instance.c index c5e000302a..49c3b98ded 100644 --- a/src/mobys/init_moby_instance.c +++ b/src/mobys/init_moby_instance.c @@ -65,9 +65,9 @@ typedef struct { unsigned char unkA3; /* 0xA3 */ unsigned char unkA4; /* 0xA4 */ char padA5; - short unkA6; /* 0xA6 */ - int unkA8; /* 0xA8 */ - int unkAC; /* 0xAC */ + short original_class_id; /* 0xA6 */ + int unkA8; /* 0xA8 */ + int unkAC; /* 0xAC */ char padB0[0xD]; unsigned char unkBD; /* 0xBD */ char padBE[0x42]; @@ -102,7 +102,7 @@ void init_moby_instance(void *moby_mem, int oClass) { moby_instance->unk21 = 0xFF; moby_instance->unk71 = 0xFF; moby_instance->unk72 = 0xFF; - moby_instance->unkA6 = oClass; + moby_instance->original_class_id = oClass; moby_instance->unk38 = 0x40404000000000L; moby_instance->unk36 = 0x7F80; resident_pool_slot_index = ((char *)moby_instance - (char *)resident_object_pool) >> 8; diff --git a/src/mobys/prune_moby_references.c b/src/mobys/prune_moby_references.c index 72b881baa9..47e32d7224 100644 --- a/src/mobys/prune_moby_references.c +++ b/src/mobys/prune_moby_references.c @@ -5,7 +5,7 @@ struct MobyRecord { u8 pad_0[0x20]; u8 unk20; u8 pad_21[0x31]; - u8 unk52; + u8 primary_binding_selector; }; void prune_moby_references(void) __asm__("FUN_0020cc60"); @@ -21,7 +21,7 @@ void prune_moby_references(void) { do { moby = *slot; remaining -= 1; - if ((moby != NULL) && ((moby->unk20 & 0x80) || (moby->unk52 != mask))) { + if ((moby != NULL) && ((moby->unk20 & 0x80) || (moby->primary_binding_selector != mask))) { *slot = NULL; } slot += 1; diff --git a/src/mobys/update_moby_voice.c b/src/mobys/update_moby_voice.c index 361fa22425..815793db8e 100644 --- a/src/mobys/update_moby_voice.c +++ b/src/mobys/update_moby_voice.c @@ -5,12 +5,12 @@ struct MobyVoiceFlags { u8 pad_0[0x7C]; u8 unk7C; - u8 unk7D; + u8 current_voice_slot_index; }; struct MobyVoiceEntry { u8 pad_0[0x7E]; - s16 unk7E; + s16 voice_entry_index; u8 pad_80[0x8]; s32 unk88; }; @@ -23,17 +23,17 @@ void update_moby_voice(struct MobyVoiceFlags *moby) { s32 voice_slot_index; struct MobyVoiceEntry *voice_slot; - if (moby->unk7D != 0xFF) { - voice_slot_index = moby->unk7D; + if (moby->current_voice_slot_index != 0xFF) { + voice_slot_index = moby->current_voice_slot_index; voice_slot = (struct MobyVoiceEntry *)(voice_slot_index * 0x70 + ((u8 *)&voice_pool)); if (voice_slot->unk88 != (s32)moby) { - moby->unk7D = 0xFF; - } else if (voice_slot->unk7E != moby->unk7C) { + moby->current_voice_slot_index = 0xFF; + } else if (voice_slot->voice_entry_index != moby->unk7C) { release_voice_slot(voice_slot_index); - moby->unk7D = 0xFF; + moby->current_voice_slot_index = 0xFF; } } else if (moby->unk7C != 0xFF) { - moby->unk7D = allocate_voice_for_target_entry(moby->unk7C, 4, moby); + moby->current_voice_slot_index = allocate_voice_for_target_entry(moby->unk7C, 4, moby); } } diff --git a/src/movies/decoder/buffers/read_buf_delete.c b/src/movies/decoder/buffers/read_buf_delete.c index a93b8678d4..3063f9970a 100644 --- a/src/movies/decoder/buffers/read_buf_delete.c +++ b/src/movies/decoder/buffers/read_buf_delete.c @@ -2,7 +2,7 @@ void read_buf_delete(struct ReadBuf *buf) __asm__("func_0023B958"); -void read_buf_delete(struct ReadBuf *buf) { +void read_buf_delete(struct ReadBuf *stream_read_buffer) { } /* Recovered original symbol name. */ diff --git a/src/overlays/l00/mobys/clank_cutscene_trigger.c b/src/overlays/l00/mobys/clank_cutscene_trigger.c index 50ca1dd7f1..7d5308dc9f 100644 --- a/src/overlays/l00/mobys/clank_cutscene_trigger.c +++ b/src/overlays/l00/mobys/clank_cutscene_trigger.c @@ -146,7 +146,7 @@ typedef struct { s16 count; u8 pad46[0x132]; VeldinMoby *mobys[1]; - VeldinMoby *unk17C; + VeldinMoby *particle_pair_source_moby; u8 pad180[4]; VeldinMoby *unk184; VeldinMoby *unk188; @@ -226,7 +226,7 @@ void apply_level_specific_cutscene_moby_effects(void) { add_draw_callback((s32)FUN_L00_002935b8, (s32)D_L00_0016C860.unk188); } if (current_level_index == 14 && D_L00_0016C860.state == 0) { - particle_source_moby = D_L00_0016C860.unk17C; + particle_source_moby = D_L00_0016C860.particle_pair_source_moby; if (particle_source_moby != 0 && (u32)(D_L00_0016C860.timer - 0x1C) < 6) { emit_moby_particle_pairs(particle_source_moby); add_draw_callback((s32)glow_quads_draw, (s32)particle_source_moby); diff --git a/src/overlays/l00/mobys/cutscene_effects.c b/src/overlays/l00/mobys/cutscene_effects.c index 75ac6e6b5f..b687a96f78 100644 --- a/src/overlays/l00/mobys/cutscene_effects.c +++ b/src/overlays/l00/mobys/cutscene_effects.c @@ -28,7 +28,7 @@ typedef struct { s32 unk4; u8 pad8[2]; u8 unkA; - u8 unkB; + u8 initial_duration_frames; } FlockTail; typedef struct { @@ -114,7 +114,7 @@ void phase_effect_controller_update(FlockMoby *moby) { part->unkA = scale_game_frames_s32(60); tail->unk4 = 2; tail->unkA = color >> 24; - tail->unkB = part->unkA; + tail->initial_duration_frames = part->unkA; } } } diff --git a/src/overlays/l00/mobys/veldin_robot_enemy.c b/src/overlays/l00/mobys/veldin_robot_enemy.c index 7c3ae43a65..8f74569e06 100644 --- a/src/overlays/l00/mobys/veldin_robot_enemy.c +++ b/src/overlays/l00/mobys/veldin_robot_enemy.c @@ -1,5 +1,6 @@ /* Level 00 moby class veldin_robot_enemy: its update, damage and targeting, and its effect quad. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/overlay/shared/world/level_labels.h" #include "rnc/hero/hero.h" #include "rnc/globals.h" @@ -65,11 +66,11 @@ typedef struct { u8 unk5A; u8 pad5B[0x60 - 0x5B]; u8 unk60[7]; - u8 unk67; + u8 damage_secondary_red; u8 pad68[8]; u8 unk70[0x10]; f32 unk80; - f32 unk84; + f32 knockback_xy_speed_step; f32 unk88; f32 unk8C; s32 unk90; @@ -85,14 +86,14 @@ typedef struct { ElectroidVec targetPos; u8 padE0[0x110 - 0xE0]; ElectroidMoby *target; - s32 unk114; + s32 target_selection_status; u8 pad118[0x120 - 0x118]; u8 unk120[0x1A0 - 0x120]; u128 spawnPos; u8 pad1B0[4]; - s32 unk1B4; + s32 targeting_path_index; s32 pathIdx; - s32 unk1BC; + s32 candidate_target_moby_index; u8 pad1C0[0x1D0 - 0x1C0]; f32 turnVel; f32 speed; @@ -112,7 +113,7 @@ struct ElectroidMoby { u8 pad36[0x40 - 0x36]; ElectroidVec unk40; u8 pad50[2]; - u8 unk52; + u8 blend_source_animation; u8 anim; u8 pad54[0x70 - 0x54]; u8 unk70; @@ -182,6 +183,9 @@ void veldin_robot_enemy_update(ElectroidMoby *moby) __asm__("FUN_L00_002e0 /* Moby class 1440 */ void veldin_robot_enemy_update(ElectroidMoby *moby) { + enum { + VELDIN_ROBOT_TARGET_SELECTION_UNAVAILABLE = 2 + }; ElectroidVars *vars; ElectroidMoby *target; Path *path; @@ -219,7 +223,7 @@ void veldin_robot_enemy_update(ElectroidMoby *moby) { moby->flags |= 0x8000; } if (vars->pathIdx >= 0) { - if (vars->unk1B4 == -1) { + if (vars->targeting_path_index == -1) { mark_moby_for_removal(moby); return; } @@ -239,7 +243,7 @@ void veldin_robot_enemy_update(ElectroidMoby *moby) { ELECTROID_ANIM(moby, 1, scale_game_frames_s32(20)); } } - if (vars->unk114 != 2) { + if (vars->target_selection_status != VELDIN_ROBOT_TARGET_SELECTION_UNAVAILABLE) { moby->state = VELDIN_ROBOT_STATE_FOLLOW_PATH; ELECTROID_ANIM(moby, 9, scale_game_frames_s32(10)); } @@ -280,7 +284,8 @@ void veldin_robot_enemy_update(ElectroidMoby *moby) { } else if (moby->unk70 & 2) { ELECTROID_ANIM(moby, random_integer_below(2) + 1, scale_game_frames_s32(20)); } - if (vars->unk114 != 2 && register_beam_slot(moby, 0, 0) != 0) { + if (vars->target_selection_status != VELDIN_ROBOT_TARGET_SELECTION_UNAVAILABLE && + register_beam_slot(moby, 0, 0) != 0) { moby->state = VELDIN_ROBOT_STATE_WAIT_TO_START_COLLISION_PROBES; ELECTROID_ANIM(moby, 5, scale_game_frames_s32(10)); } @@ -327,7 +332,8 @@ void veldin_robot_enemy_update(ElectroidMoby *moby) { query.unk8A = moby->unkA6; query.dir[2] = 1.0f; query.unk88 = 0; - if (moby->unk52 == moby->anim && compute_interpolated_record_value(moby) > 1.0f) { + if (moby->blend_source_animation == moby->anim && + compute_interpolated_record_value(moby) > 1.0f) { hit = 1; query.flags |= 1; } @@ -437,6 +443,11 @@ f32 veldin_robot_knockback_xy_scale_gp __asm__("D_L00_00161BDC") = 1e+01 f32 veldin_robot_knockback_z_scale_gp __asm__("D_L00_00161BE0") = 9.5f; void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { + enum { + VELDIN_ROBOT_TARGET_SELECTION_ALTERNATE_MOBY = 1, + VELDIN_ROBOT_TARGET_SELECTION_UNAVAILABLE = 2 + }; + ElectroidVars *vars; void *anim; ElectroidHit *coll; @@ -467,7 +478,7 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { vars->health -= dmg; vars->unk90 = 0x200; vars->unk80 = veldin_robot_knockback_gravity_gp * frame_time_sq; - vars->unk84 = veldin_robot_knockback_xy_speed_step_gp * frame_time_sq; + vars->knockback_xy_speed_step = veldin_robot_knockback_xy_speed_step_gp * frame_time_sq; vars->unk88 = veldin_robot_knockback_xy_scale_gp * frame_time; vars->unk8C = veldin_robot_knockback_z_scale_gp * frame_time; vars->unkAD = 0; @@ -484,7 +495,7 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { vars->unkC4 = 16.0f; moby->state = VELDIN_ROBOT_STATE_DEATH_KNOCKBACK; moby->unk94 = 0; - vars->unk67 = 0x78; + vars->damage_secondary_red = 0x78; trooper_anim_update(moby, anim); FUN_L00_00257470(moby, 0, -1); } else { @@ -496,7 +507,7 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { moby, vars->unk70, 8, 1, 0, fast_arc_tan(coll->pos.f[0], coll->pos.f[1])); vars->unkC4 = vars->unkC0 = -1.0f; moby->state = VELDIN_ROBOT_STATE_DAMAGE_KNOCKBACK; - vars->unk67 = 0xFA; + vars->damage_secondary_red = 0xFA; vars->unk26 = scale_game_frames(0x3C); trooper_anim_update(moby, anim); } @@ -505,7 +516,7 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { moby->unkA4 = 0xFF; trooper_anim_finish(moby, anim); if (moby->state == VELDIN_ROBOT_STATE_WAIT_TO_FOLLOW_PATH) { - path = toad_paths[vars->unk1B4]; + path = toad_paths[vars->targeting_path_index]; FUN_L00_0025ff38(moby, &vars->targetPos, 0, 0, path->pts, path->count, 64.0f); } else if (moby->state != VELDIN_ROBOT_STATE_PROCESS_COLLISION_PROBES) { range = veldin_robot_default_target_range_gp; @@ -514,7 +525,7 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { } if (select_moby_combat_target(moby, range, &vars->targetPos) != 2 && range < vector_distance_xy(&moby->pos, &vars->targetPos)) { - vars->unk114 = 2; + vars->target_selection_status = VELDIN_ROBOT_TARGET_SELECTION_UNAVAILABLE; } } if (vars->target == 0) { @@ -522,17 +533,17 @@ void update_veldin_robot_damage_and_targeting(ElectroidMoby *moby) { vars->target = ((ElectroidMoby *)hero_ptr->moby); qcopy(&vars->targetPos, &hero_ptr->motion.pos); } - if (vars->unk1BC >= 0) { - candidate_target = (ElectroidMoby *)(moby_table + (vars->unk1BC << 8)); - if (candidate_target == 0 || candidate_target->state == 0xFE || + if (vars->candidate_target_moby_index >= 0) { + candidate_target = (ElectroidMoby *)(moby_table + (vars->candidate_target_moby_index << 8)); + if (candidate_target == 0 || candidate_target->state == MOBY_STATE_REMOVAL_MARKER || candidate_target->state == 0xFD) { - vars->unk1BC = -1; + vars->candidate_target_moby_index = -1; } else { range = vector_distance_xy(&moby->pos, &candidate_target->pos); if (range < vector_distance_xy(&moby->pos, &vars->target->pos)) { vars->target = candidate_target; qcopy(&vars->targetPos, &candidate_target->pos); - vars->unk114 = 1; + vars->target_selection_status = VELDIN_ROBOT_TARGET_SELECTION_ALTERNATE_MOBY; } } } diff --git a/src/overlays/l01/hero/hero_set_state.c b/src/overlays/l01/hero/hero_set_state.c index d4b383aeb7..26c2191426 100644 --- a/src/overlays/l01/hero/hero_set_state.c +++ b/src/overlays/l01/hero/hero_set_state.c @@ -76,10 +76,11 @@ int l01_hero_set_state(int requested_state, int animation_setup_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - animation_setup_mode != 2)) + animation_setup_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((cutscene_mode == 2 || cutscene_mode == 6) && animation_setup_mode != 2) + if ((cutscene_mode == 2 || cutscene_mode == 6) && + animation_setup_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l01/mobys/agnogg_ship_front.c b/src/overlays/l01/mobys/agnogg_ship_front.c index 2bd5ab29d2..ca0b464141 100644 --- a/src/overlays/l01/mobys/agnogg_ship_front.c +++ b/src/overlays/l01/mobys/agnogg_ship_front.c @@ -93,8 +93,8 @@ typedef struct { /* 0x32 */ unsigned short f32; /* 0x34 */ unsigned short flags; /* 0x36 */ char pad36[0x1C]; - /* 0x52 */ unsigned char f52; - /* 0x53 */ unsigned char f53; + /* 0x52 */ unsigned char animation_sequence; + /* 0x53 */ unsigned char requested_animation_sequence; /* 0x54 */ char pad54[0x1C]; /* 0x70 */ unsigned char f70; /* 0x71 */ char pad71[7]; @@ -104,9 +104,9 @@ typedef struct { /* 0x98 */ char pad98[0xE]; /* 0xA6 */ short oclass; /* 0xA8 */ char padA8[8]; - /* 0xB0 */ unsigned char fB0; + /* 0xB0 */ unsigned char persistent_slot_index; /* 0xB1 */ char padB1; - /* 0xB2 */ short fB2; + /* 0xB2 */ short collected_state_index; /* 0xB4 */ char padB4[8]; /* 0xBC */ unsigned char fBC; /* 0xBD */ char padBD[0x43]; @@ -191,10 +191,10 @@ void agnogg_ship_front_update(Moby_2FC140 *moby) { moby->pos.z = moby->pos.z + fd; break; case AGNOGG_SHIP_WAIT_FOR_DESCENT_TRIGGER: - level_table_byte = - *(unsigned char *)(moby->fB0 + (current_level_index_macro << 4) + visited52); + level_table_byte = *(unsigned char *)(moby->persistent_slot_index + + (current_level_index_macro << 4) + visited52); if (level_table_byte == 0xFF) { - if (moby->f53 != 2) { + if (moby->requested_animation_sequence != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(0x14)); } moby->state = AGNOGG_SHIP_HOLD_TARGET_HEIGHT; @@ -242,7 +242,7 @@ void agnogg_ship_front_update(Moby_2FC140 *moby) { fast_arc_tan(moby->pos.x - l01_cuboids_macro[linked_moby_data->rec].pos.x, moby->pos.y - l01_cuboids_macro[linked_moby_data->rec].pos.y); } - if (moby->f53 == 0) { + if (moby->requested_animation_sequence == 0) { if (moby->pos.z - data->fC <= 0.0f) { set_moby_animation(moby, 1, 0); } @@ -253,13 +253,13 @@ void agnogg_ship_front_update(Moby_2FC140 *moby) { } break; case AGNOGG_SHIP_WAIT_FOR_ANIMATION_1_GATE: - if (moby->f52 != 1) { + if (moby->animation_sequence != 1) { break; } if ((moby->f70 & 2) == 0) { break; } - if (moby->f53 != 2) { + if (moby->requested_animation_sequence != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(0x14)); } if (moby->oclass == 0x2DA) { @@ -326,13 +326,14 @@ void agnogg_ship_front_update(Moby_2FC140 *moby) { queue_planet_unlock_message(3); moby->flags = moby->flags & 0xFFBE; if (data->link != -1) { - ((Lv *)D_L01_001BAD60_2FC140)->collected[ents_macro[data->link].fB2] = - ents_macro[data->link].fB0 + 2; - if (ents_macro[data->link].fB0 == 0xFF || - (D_L01_0015FC88[ents_macro[data->link].fB0] != 0xFF && - visited52[ents_macro[data->link].fB0 + (current_level_index_macro << 4)] == - 0xFF)) { - l01_save_state.cleared[ents_macro[data->link].fB2] = ents_macro[data->link].fB0 + 2; + ((Lv *)D_L01_001BAD60_2FC140)->collected[ents_macro[data->link].collected_state_index] = + ents_macro[data->link].persistent_slot_index + 2; + if (ents_macro[data->link].persistent_slot_index == 0xFF || + (D_L01_0015FC88[ents_macro[data->link].persistent_slot_index] != 0xFF && + visited52[ents_macro[data->link].persistent_slot_index + + (current_level_index_macro << 4)] == 0xFF)) { + l01_save_state.cleared[ents_macro[data->link].collected_state_index] = + ents_macro[data->link].persistent_slot_index + 2; } } if (data->f3C != -1) { @@ -348,7 +349,7 @@ void agnogg_ship_front_update(Moby_2FC140 *moby) { &ents_macro[data->f38].fBC, 1, &ents_macro[data->f38], 1, D_L01_001BAAA0); } } - jet_clear_persistent(moby->fB0); + jet_clear_persistent(moby->persistent_slot_index); if (data->rec != -1) { jet_reset_camera(&l01_cuboids_macro[data->rec].pos, &l01_cuboids_macro[data->rec].rot); } diff --git a/src/overlays/l01/mobys/beehive.c b/src/overlays/l01/mobys/beehive.c index a2e9907c56..78f6ee3ccf 100644 --- a/src/overlays/l01/mobys/beehive.c +++ b/src/overlays/l01/mobys/beehive.c @@ -43,7 +43,7 @@ typedef struct { u8 pad50[0x28]; void *pvars; u8 pad7C[0x18]; - s32 w94; + s32 spatial_cell_update_gate; } ClonedMoby; extern void get_first_moby_in_group(ClonedMoby **, s32, s32, s32) __asm__("FUN_L00_002591d0"); @@ -57,10 +57,10 @@ typedef struct { typedef struct { u8 pad0[0x60]; u8 path[0x18]; - s32 w78; - s32 w7C; + s32 knockback_horizontal_magnitude; + s32 knockback_initial_vertical_step; s32 w80; - s32 w84; + s32 knockback_motion_flags; f32 f88; u8 pad8C[0x24]; f32 fB0; @@ -87,7 +87,7 @@ typedef struct { extern ClonedMoby *initialize_beehive_spawn_moby(ClonedMoby *) __asm__("FUN_L01_00302328"); extern void trooper_start_knockback(void *, void *, s32, s32, s32, f32) __asm__("FUN_L00_0025c558"); -s32 D_L01_00161E90 = 5; +s32 l01_beehive_spawn_attempt_limit __asm__("D_L01_00161E90") = 5; void beehive_update(SpawnerMoby *m) __asm__("FUN_L01_003021b8"); @@ -113,7 +113,7 @@ void beehive_update(SpawnerMoby *beehive_moby) { if (count_active_moby_group_members(beehive_vars->src_id, 0xC) != 0) { break; } - if (beehive_vars->count >= D_L01_00161E90) { + if (beehive_vars->count >= l01_beehive_spawn_attempt_limit) { break; } beehive_vars->count++; @@ -121,13 +121,13 @@ void beehive_update(SpawnerMoby *beehive_moby) { if (spawned_clone != 0) { nv = spawned_clone->pvars; k = 0.8f; - nv->w84 = 8; + nv->knockback_motion_flags = 8; nv->w80 = truncate_float_to_s32(nv->f250 * k * 1024.0f); nv->f88 = nv->f250 * k; nv->fB0 = 7.0f; nv->fB4 = 13.0f; - nv->w78 = 0; - nv->w7C = 0; + nv->knockback_horizontal_magnitude = 0; + nv->knockback_initial_vertical_step = 0; trooper_start_knockback( spawned_clone, nv->path, @@ -157,7 +157,7 @@ ClonedMoby *initialize_beehive_spawn_moby(ClonedMoby *clone_spawner_moby) { destination_moby->h32 = 0x80; destination_moby->d38 = clone_spawner_moby->d38; destination_moby->b31 = 1; - destination_moby->w94 = destination_moby->mclass->w10; + destination_moby->spatial_cell_update_gate = destination_moby->mclass->w10; destination_moby->flags |= 0x1020; destination_moby->scale = destination_moby->mclass->f24; { diff --git a/src/overlays/l01/mobys/birdbot.c b/src/overlays/l01/mobys/birdbot.c index d1ba587343..c15b71c270 100644 --- a/src/overlays/l01/mobys/birdbot.c +++ b/src/overlays/l01/mobys/birdbot.c @@ -298,9 +298,9 @@ typedef struct { typedef struct { char pad0[0x20]; float f20; - short h24; - short h26; - unsigned char b28; + short initial_health; + short hit_reaction_cooldown; + unsigned char hit_response_profile_index; unsigned char b29; char pad2A[0xE]; int w38; @@ -315,24 +315,24 @@ typedef struct { unsigned char b67; char pad68[8]; char x70[0x10]; - float f80; + float knockback_gravity_step; float f84; - float f88; - float f8C; + float knockback_horizontal_launch_step; + float knockback_vertical_launch_step; int w90; int w94; - float f98; + float knockback_collision_height_offset; char pad9C[0x11]; unsigned char bAD; char padAE[0x12]; - float fC0; - float fC4; + float knockback_animation_target_frame; + float knockback_animation_stop_frame; char padC8[8]; char xD0[8]; float fD8; float fDC; char padE0[8]; - float fE8; + float fall_motion_step; float fEC; char padF0[4]; float fF4; @@ -345,32 +345,32 @@ typedef struct { char pad138[0x18]; PeCursor main; char pad168[0x18]; - Vec4 v180; - int w190; - float f194; - float f198; + Vec4 projectile_aim_point; + int firing_retry_timer; + float yaw_turn_step; + float projectile_aim_distance; char pad19C[4]; - float f1A0; - short h1A4; - short h1A6; - float f1A8; - short h1AC; - short h1AE; + float combat_target_radius; + short burst_shots_fired; + short steering_path_node_index; + float deployment_trigger_radius; + short ordered_path_traversal; + short path_has_stop_nodes; char pad1B0[4]; - int w1B4; - float f1B8; - float f1BC; - int w1C0; - int w1C4; - int w1C8; - float f1CC; - Vec4 v1D0; + int skip_initial_height_lift; + float path_movement_step_length; + float pitch_turn_step; + int deployment_trigger_volume_index; + int deployment_mount_cuboid_index; + int mount_release_timer; + float previous_animation_frame; + Vec4 deployment_motion_delta; unsigned short h1E0; short h1E2; - int w1E4; - int w1E8; - short h1EC; - short h1EE; + int deployment_destination_cuboid_index; + int deployment_trigger_override; + short deployment_vertical_steering_timer; + short skip_path_braking; char pad1F0[0x10]; unsigned char x200[1]; } PeVars; @@ -380,7 +380,7 @@ typedef struct PeMoby { Vec4 pos; unsigned char state; char pad21[3]; - char *w24; + char *moby_class_record; char pad28[9]; unsigned char b31; unsigned short h32; @@ -390,9 +390,9 @@ typedef struct PeMoby { Vec4 rot; char pad50[2]; unsigned char b52; - unsigned char b53; + unsigned char target_animation_sequence; char pad54[4]; - float f58; + float animation_playback_speed; char pad5C[0x14]; unsigned char b70; char pad71[7]; @@ -402,9 +402,9 @@ typedef struct PeMoby { char pad98[0xC]; unsigned char bA4; char padA5; - short hA6; + short moby_class_id; char padA8[0xA]; - short hB2; + short maya_instance_id; } PeMoby; typedef struct { @@ -543,18 +543,19 @@ void birdbot_update(PeMoby *birdbot_moby) { } FUN_L00_00263ac8_u(2.5f, (int)birdbot_moby, 2, birdbot_vars->x200); qcopy(&birdbot_position_before_update, &birdbot_moby->pos); - if (birdbot_vars->w1C8 > 0) { - birdbot_vars->w1C8--; + if (birdbot_vars->mount_release_timer > 0) { + birdbot_vars->mount_release_timer--; } if (birdbot_moby->state != BIRDBOT_STATE_INITIALIZE) { path_reposition_requested = select_birdbot_path_node(birdbot_moby, &idx); } - target_search_radius = flag ? birdbot_vars->f1A0 * 2.0f : birdbot_vars->f1A0; + target_search_radius = + flag ? birdbot_vars->combat_target_radius * 2.0f : birdbot_vars->combat_target_radius; select_moby_combat_target(birdbot_moby, &selected_combat_target, target_search_radius); hit = find_moby_hit(birdbot_moby, 0x210000, 0); kind = FUN_L00_0025a478_u(birdbot_moby, hit, &birdbot_vars->f20, 0, &hits, &dmg, 0, 4); - fast_dec_timer_s16(&birdbot_vars->h26); - if (hit != 0 && birdbot_vars->h26 == 0) { + fast_dec_timer_s16(&birdbot_vars->hit_reaction_cooldown); + if (hit != 0 && birdbot_vars->hit_reaction_cooldown == 0) { if (hit->src != 0) { struct Hero *player = &hero; @@ -586,41 +587,49 @@ void birdbot_update(PeMoby *birdbot_moby) { break; case BIRDBOT_HIT_REACTION_FATAL_KNOCKBACK: case BIRDBOT_HIT_REACTION_FORCE_FATAL_KNOCKBACK: - birdbot_vars->f98 = 0.3f; + birdbot_vars->knockback_collision_height_offset = 0.3f; birdbot_vars->f84 = frame_time_sq * 10.0f; - birdbot_vars->f80 = frame_time_sq * 40.0f; - birdbot_vars->f88 = square_root(birdbot_vars->f84 * 2.0f * 10.0f); - birdbot_vars->f8C = frame_time * 15.0f; - birdbot_vars->fC0 = 5.0f; - birdbot_vars->fC4 = 10.0f; + birdbot_vars->knockback_gravity_step = frame_time_sq * 40.0f; + birdbot_vars->knockback_horizontal_launch_step = + square_root(birdbot_vars->f84 * 2.0f * 10.0f); + birdbot_vars->knockback_vertical_launch_step = frame_time * 15.0f; + birdbot_vars->knockback_animation_target_frame = 5.0f; + birdbot_vars->knockback_animation_stop_frame = 10.0f; birdbot_vars->w94 = 1; birdbot_vars->bAD = 0; *(u128 *)&va = *(u128 *)&hit->pos; - trooper_knockback_arc(&va, &knockback_heading, &birdbot_vars->f88, &birdbot_vars->f8C); + trooper_knockback_arc(&va, + &knockback_heading, + &birdbot_vars->knockback_horizontal_launch_step, + &birdbot_vars->knockback_vertical_launch_step); FUN_L00_0025c558_u( knockback_heading, birdbot_moby, birdbot_vars->x70, 9, scale_game_frames(2), 0); birdbot_vars->b67 = 0xB4; birdbot_moby->state = BIRDBOT_STATE_FATAL_KNOCKBACK; birdbot_moby->h34 &= 0xEFFF; trooper_anim_update(birdbot_moby, (short *)birdbot_vars->x60); - birdbot_vars->h26 = scale_game_frames(0x3C); + birdbot_vars->hit_reaction_cooldown = scale_game_frames(0x3C); break; case BIRDBOT_HIT_REACTION_NONFATAL_KNOCKBACK: case BIRDBOT_HIT_REACTION_ANIMATED_NONFATAL_KNOCKBACK: birdbot_vars->w90 = 0x200; birdbot_vars->b67 = 0x78; - birdbot_vars->f98 = 0.5f; - birdbot_vars->f80 = 0.008f; - birdbot_vars->f88 = square_root(birdbot_vars->f84 * 2.0f * 1.5f); + birdbot_vars->knockback_collision_height_offset = 0.5f; + birdbot_vars->knockback_gravity_step = 0.008f; + birdbot_vars->knockback_horizontal_launch_step = + square_root(birdbot_vars->f84 * 2.0f * 1.5f); birdbot_vars->w94 = 1; - birdbot_vars->fC0 = 5.0f; - birdbot_vars->f8C = frame_time * 8.5f; - birdbot_vars->fC4 = 10.0f; + birdbot_vars->knockback_animation_target_frame = 5.0f; + birdbot_vars->knockback_vertical_launch_step = frame_time * 8.5f; + birdbot_vars->knockback_animation_stop_frame = 10.0f; birdbot_vars->bAD = 0; *(u128 *)&va = *(u128 *)&hit->pos; - trooper_knockback_arc(&va, &knockback_heading, &birdbot_vars->f88, &birdbot_vars->f8C); + trooper_knockback_arc(&va, + &knockback_heading, + &birdbot_vars->knockback_horizontal_launch_step, + &birdbot_vars->knockback_vertical_launch_step); FUN_L00_0025c558_u(knockback_heading, birdbot_moby, birdbot_vars->x70, 0xC, 6, 0); - if (birdbot_moby->b53 != 0xB) { + if (birdbot_moby->target_animation_sequence != 0xB) { blend_moby_animation(birdbot_moby, 0xB, 0, scale_game_frames(6)); } birdbot_moby->state = BIRDBOT_STATE_NONFATAL_KNOCKBACK; @@ -630,15 +639,19 @@ void birdbot_update(PeMoby *birdbot_moby) { case BIRDBOT_HIT_REACTION_LOW_SPEED_NONFATAL_KNOCKBACK_NO_BLEND: birdbot_vars->w90 = 0x200; birdbot_vars->b67 = 0xFA; - birdbot_vars->f80 = 0.008f; - birdbot_vars->f88 = square_root(birdbot_vars->f84 * 2.0f * 1.5f); + birdbot_vars->knockback_gravity_step = 0.008f; + birdbot_vars->knockback_horizontal_launch_step = + square_root(birdbot_vars->f84 * 2.0f * 1.5f); birdbot_vars->w94 = 1; - birdbot_vars->f8C = frame_time * 5.0f; - birdbot_vars->fC0 = 7.0f; - birdbot_vars->fC4 = 13.5f; + birdbot_vars->knockback_vertical_launch_step = frame_time * 5.0f; + birdbot_vars->knockback_animation_target_frame = 7.0f; + birdbot_vars->knockback_animation_stop_frame = 13.5f; birdbot_vars->bAD = 0; *(u128 *)&va = *(u128 *)&hit->pos; - trooper_knockback_arc(&va, &knockback_heading, &birdbot_vars->f88, &birdbot_vars->f8C); + trooper_knockback_arc(&va, + &knockback_heading, + &birdbot_vars->knockback_horizontal_launch_step, + &birdbot_vars->knockback_vertical_launch_step); FUN_L00_0025c558_u(knockback_heading, birdbot_moby, birdbot_vars->x70, 0xE, 6, 0); birdbot_moby->state = BIRDBOT_STATE_NONFATAL_KNOCKBACK; trooper_anim_update(birdbot_moby, (short *)birdbot_vars->x60); @@ -660,7 +673,9 @@ void birdbot_update(PeMoby *birdbot_moby) { c = &birdbot_vars->main; if (birdbot_vars->main.path_id == -1) { - DebugPrint(birdbot_missing_path_format, birdbot_moby->hA6, birdbot_moby->hB2); + DebugPrint(birdbot_missing_path_format, + birdbot_moby->moby_class_id, + birdbot_moby->maya_instance_id); mark_moby_for_removal(birdbot_moby); return; } @@ -672,15 +687,15 @@ void birdbot_update(PeMoby *birdbot_moby) { qcopy(&birdbot_moby->pos, &birdbot_vars->side.path->points[0]); } else { qcopy(&birdbot_moby->pos, &birdbot_vars->main.path->points[0]); - if (birdbot_vars->w1B4 == 0) { + if (birdbot_vars->skip_initial_height_lift == 0) { birdbot_vars->side.path = 0; birdbot_moby->pos.f[2] += 20.0f; } } - birdbot_vars->h1AE = 0; + birdbot_vars->path_has_stop_nodes = 0; for (i = 0; i < c->path->count; i++) { if (c->path->points[i].f[3] == 1.0f) { - birdbot_vars->h1AE = 1; + birdbot_vars->path_has_stop_nodes = 1; } } birdbot_moby->h34 |= 0x1000; @@ -699,12 +714,12 @@ void birdbot_update(PeMoby *birdbot_moby) { birdbot_vars->fDC = 2.0f; birdbot_vars->fD8 = 2.0f; birdbot_vars->f20 = 2.0f; - birdbot_vars->h24 = truncate_float_to_s32(birdbot_vars->f20); + birdbot_vars->initial_health = truncate_float_to_s32(birdbot_vars->f20); birdbot_vars->b29 = 0; - birdbot_vars->b28 = 1; + birdbot_vars->hit_response_profile_index = 1; clear_u64_value(&birdbot_vars->v40); - birdbot_vars->w1C8 = -1; - if (birdbot_moby->b53 != 0) { + birdbot_vars->mount_release_timer = -1; + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_vars->h1E0 = birdbot_moby->h32; @@ -723,13 +738,15 @@ void birdbot_update(PeMoby *birdbot_moby) { c = &birdbot_vars->main; a = fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], selected_combat_target.pos.f[1] - birdbot_moby->pos.f[1]); - FUN_L00_00258278_cf((char *)birdbot_moby, &birdbot_vars->f194, a, 0.02f, 0.3f, 0.1f); - fast_dec_timer(&birdbot_vars->w190); + FUN_L00_00258278_cf( + (char *)birdbot_moby, &birdbot_vars->yaw_turn_step, a, 0.02f, 0.3f, 0.1f); + fast_dec_timer(&birdbot_vars->firing_retry_timer); d = vector_distance_xy(&birdbot_moby->pos, &selected_combat_target); - if ((flag ? d < birdbot_vars->f1A0 * 2.0f : d < birdbot_vars->f1A0) && + if ((flag ? d < birdbot_vars->combat_target_radius * 2.0f + : d < birdbot_vars->combat_target_radius) && absolute_float(birdbot_moby->pos.f[2] - selected_combat_target.pos.f[2]) < 2.0f && birdbot_moby->b31 != 0 && (!flag || path_reposition_requested == 0) && - birdbot_vars->w190 == 0 && + birdbot_vars->firing_retry_timer == 0 && fast_difference_between_rotations( birdbot_moby->rot.f[2], fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], @@ -739,15 +756,15 @@ void birdbot_update(PeMoby *birdbot_moby) { *(u128 *)&vb = *(u128 *)&birdbot_moby->pos; vb.f[2] = va.f[2]; if (collision_line(&vb, &va, 0, birdbot_moby, 0) == 0) { - birdbot_vars->h1A4 = 0; - birdbot_vars->f198 = 4.0f; + birdbot_vars->burst_shots_fired = 0; + birdbot_vars->projectile_aim_distance = 4.0f; birdbot_moby->state = BIRDBOT_STATE_FIRE_BURST; - if (birdbot_moby->b53 != 4) { + if (birdbot_moby->target_animation_sequence != 4) { blend_moby_animation(birdbot_moby, 4, 0, scale_game_frames(6)); } - birdbot_vars->w190 = 0; + birdbot_vars->firing_retry_timer = 0; } else { - birdbot_vars->w190 = scale_game_frames(0x3C); + birdbot_vars->firing_retry_timer = scale_game_frames(0x3C); } } else if (flag || (vector_distance_xy(&birdbot_moby->pos, &selected_combat_target) < 4.0f && @@ -755,45 +772,48 @@ void birdbot_update(PeMoby *birdbot_moby) { 6.0f)) { if (path_reposition_requested != 0 && fast_vec_dist(&birdbot_moby->pos, (Vec4 *)c->path + (idx + 1)) > 0.25f) { - if (birdbot_vars->h1AC == 0 || c->idx < c->path->count - 1) { + if (birdbot_vars->ordered_path_traversal == 0 || c->idx < c->path->count - 1) { int i; float f; - if (birdbot_moby->b53 != 8) { + if (birdbot_moby->target_animation_sequence != 8) { blend_moby_animation(birdbot_moby, 8, 0, scale_game_frames(10)); } i = idx; f = *(float *)&birdbot_path_entry_animation_speed_gp; c->idx = i; - birdbot_moby->f58 = f; + birdbot_moby->animation_playback_speed = f; birdbot_moby->state = BIRDBOT_STATE_BEGIN_PATH_MOVEMENT; } } } - if (birdbot_vars->w1C8 == 0 && birdbot_vars->w1C4 != -1) { + if (birdbot_vars->mount_release_timer == 0 && + birdbot_vars->deployment_mount_cuboid_index != -1) { jet_end_mount(0); l01_hero_set_state(HERO_STATE_IDLE, 1); cutscene_active = 0; - birdbot_vars->w1C4 = -1; + birdbot_vars->deployment_mount_cuboid_index = -1; } break; } case BIRDBOT_STATE_WAIT_FOR_TRIGGER: - if (vector_distance_xy(&birdbot_moby->pos, &selected_combat_target) < birdbot_vars->f1A8 || - is_point_inside_clip_volume(&hero.motion.pos, birdbot_vars->w1C0) != 0 || - birdbot_vars->w1E8 != 0) { - if (birdbot_vars->w1C4 != -1) { + if (vector_distance_xy(&birdbot_moby->pos, &selected_combat_target) < + birdbot_vars->deployment_trigger_radius || + is_point_inside_clip_volume(&hero.motion.pos, + birdbot_vars->deployment_trigger_volume_index) != 0 || + birdbot_vars->deployment_trigger_override != 0) { + if (birdbot_vars->deployment_mount_cuboid_index != -1) { LevelCuboid *p; l01_hero_set_state(0x1F, 0); - p = &l01_cuboids[birdbot_vars->w1C4]; + p = &l01_cuboids[birdbot_vars->deployment_mount_cuboid_index]; jet_mount(&p->pos, &p->rot, 0, 0, 0); cutscene_active = 1; - birdbot_vars->w1C8 = scale_game_frames(0x168); + birdbot_vars->mount_release_timer = scale_game_frames(0x168); } - birdbot_moby->w94 = *(int *)(birdbot_moby->w24 + 0x10); + birdbot_moby->w94 = *(int *)(birdbot_moby->moby_class_record + 0x10); birdbot_moby->h34 &= 0xFFBE; - if (birdbot_moby->b53 != 8) { + if (birdbot_moby->target_animation_sequence != 8) { blend_moby_animation(birdbot_moby, 8, 0, scale_game_frames(10)); } birdbot_moby->state = BIRDBOT_STATE_DEPLOY; @@ -814,11 +834,12 @@ void birdbot_update(PeMoby *birdbot_moby) { birdbot_moby->pos.f[0], side_path_cursor->path->points[side_path_next_node_index].f[1] - birdbot_moby->pos.f[1]); - FUN_L00_00258278_cf((char *)birdbot_moby, &birdbot_vars->f194, a, 0.01f, 0.3f, 0.1f); + FUN_L00_00258278_cf( + (char *)birdbot_moby, &birdbot_vars->yaw_turn_step, a, 0.01f, 0.3f, 0.1f); path = side_path_cursor->path; qcopy(&vb, &path->points[side_path_next_node_index]); if (side_path_cursor->idx == path->count - 1) { - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -830,36 +851,51 @@ void birdbot_update(PeMoby *birdbot_moby) { side_path_cursor->idx = side_path_next_node_index; } } - } else if (birdbot_vars->w1E4 != -1) { + } else if (birdbot_vars->deployment_destination_cuboid_index != -1) { LevelCuboid *p; float a; float deployment_step_length; float z; - p = (LevelCuboid *)((birdbot_vars->w1E4 << 7) + (int)l01_cuboids); + p = (LevelCuboid *)((birdbot_vars->deployment_destination_cuboid_index << 7) + + (int)l01_cuboids); a = fast_arc_tan(p->pos.x - birdbot_moby->pos.f[0], p->pos.y - birdbot_moby->pos.f[1]); - FUN_L00_00258278_cf((char *)birdbot_moby, &birdbot_vars->f194, a, 0.01f, 0.3f, 0.1f); - deployment_step_length = fast_vec_length(&birdbot_vars->v1D0); - z = birdbot_vars->v1D0.f[2]; - fast_vec_normalize( - &birdbot_vars->v1D0, &birdbot_vars->v1D0, deployment_step_length * 0.95f); - fast_vec_sub(&vb, &l01_cuboids[birdbot_vars->w1E4].pos, &birdbot_moby->pos); + FUN_L00_00258278_cf( + (char *)birdbot_moby, &birdbot_vars->yaw_turn_step, a, 0.01f, 0.3f, 0.1f); + deployment_step_length = fast_vec_length(&birdbot_vars->deployment_motion_delta); + z = birdbot_vars->deployment_motion_delta.f[2]; + fast_vec_normalize(&birdbot_vars->deployment_motion_delta, + &birdbot_vars->deployment_motion_delta, + deployment_step_length * 0.95f); + fast_vec_sub(&vb, + &l01_cuboids[birdbot_vars->deployment_destination_cuboid_index].pos, + &birdbot_moby->pos); fast_vec_normalize(&vb, &vb, deployment_step_length * 0.05f); - fast_vec_add(&birdbot_vars->v1D0, &birdbot_vars->v1D0, &vb); + fast_vec_add(&birdbot_vars->deployment_motion_delta, + &birdbot_vars->deployment_motion_delta, + &vb); if (frame_time * 10.0f < deployment_step_length) { - fast_vec_normalize(&vb, &birdbot_vars->v1D0, -(frame_time_sq * 10.0f)); - fast_vec_add(&birdbot_vars->v1D0, &birdbot_vars->v1D0, &vb); + fast_vec_normalize( + &vb, &birdbot_vars->deployment_motion_delta, -(frame_time_sq * 10.0f)); + fast_vec_add(&birdbot_vars->deployment_motion_delta, + &birdbot_vars->deployment_motion_delta, + &vb); } else if (deployment_step_length < frame_time * 5.0f) { - fast_vec_normalize(&vb, &birdbot_vars->v1D0, frame_time_sq * 5.0f); - fast_vec_add(&birdbot_vars->v1D0, &birdbot_vars->v1D0, &vb); + fast_vec_normalize( + &vb, &birdbot_vars->deployment_motion_delta, frame_time_sq * 5.0f); + fast_vec_add(&birdbot_vars->deployment_motion_delta, + &birdbot_vars->deployment_motion_delta, + &vb); } - if (fast_dec_timer_s16(&birdbot_vars->h1EC) == 0) { - birdbot_vars->v1D0.f[2] = z; + if (fast_dec_timer_s16(&birdbot_vars->deployment_vertical_steering_timer) == 0) { + birdbot_vars->deployment_motion_delta.f[2] = z; } - fast_vec_add(&birdbot_moby->pos, &birdbot_moby->pos, &birdbot_vars->v1D0); - if (fast_vec_dist(&birdbot_moby->pos, &l01_cuboids[birdbot_vars->w1E4].pos) < + fast_vec_add( + &birdbot_moby->pos, &birdbot_moby->pos, &birdbot_vars->deployment_motion_delta); + if (fast_vec_dist(&birdbot_moby->pos, + &l01_cuboids[birdbot_vars->deployment_destination_cuboid_index].pos) < frame_time * 10.0f) { - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -872,7 +908,7 @@ void birdbot_update(PeMoby *birdbot_moby) { } fast_vec_add(&birdbot_moby->pos, &birdbot_moby->pos, &va); if (fast_vec_length(&va) < frame_time) { - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -882,14 +918,14 @@ void birdbot_update(PeMoby *birdbot_moby) { (u128 *)&birdbot_position_before_update); break; case BIRDBOT_STATE_FIRE_BURST: - if (birdbot_vars->f1CC < 14.0f && frame >= 14.0f) { + if (birdbot_vars->previous_animation_frame < 14.0f && frame >= 14.0f) { float a; float yaw; float pitch; a = birdbot_moby->rot.f[2]; moby_point_position(birdbot_moby, 0, &va); - qcopy(&birdbot_vars->v180, &va); + qcopy(&birdbot_vars->projectile_aim_point, &va); if (fast_difference_between_rotations( fast_arc_tan(selected_combat_target.pos.f[0] - va.f[0], selected_combat_target.pos.f[1] - va.f[1]), @@ -897,9 +933,11 @@ void birdbot_update(PeMoby *birdbot_moby) { a = fast_arc_tan(selected_combat_target.pos.f[0] - va.f[0], selected_combat_target.pos.f[1] - va.f[1]); } - birdbot_vars->v180.f[0] += fast_cos(a) * birdbot_vars->f198; - birdbot_vars->v180.f[1] += fast_sin(a) * birdbot_vars->f198; - fast_vec_sub(&vb, &birdbot_vars->v180, &va); + birdbot_vars->projectile_aim_point.f[0] += + fast_cos(a) * birdbot_vars->projectile_aim_distance; + birdbot_vars->projectile_aim_point.f[1] += + fast_sin(a) * birdbot_vars->projectile_aim_distance; + fast_vec_sub(&vb, &birdbot_vars->projectile_aim_point, &va); fast_vec_normalize(&vb, &vb, *(float *)&birdbot_projectile_speed_gp * frame_time); vb.f[2] += 0.0f; *(u128 *)&vc = *(u128 *)&birdbot_moby->pos; @@ -913,9 +951,9 @@ void birdbot_update(PeMoby *birdbot_moby) { yaw, pitch, truncate_float_to_s32(FUN_L04_001f1978(10.0f))); - birdbot_vars->h1A4++; + birdbot_vars->burst_shots_fired++; } else { - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -923,14 +961,15 @@ void birdbot_update(PeMoby *birdbot_moby) { } } if (frame < 2.0f) { - if (birdbot_vars->h1A4 >= 4 || + if (birdbot_vars->burst_shots_fired >= 4 || vector_distance_xy(&birdbot_moby->pos, &selected_combat_target) > - (flag ? birdbot_vars->f1A0 * 2.0f : birdbot_vars->f1A0) || + (flag ? birdbot_vars->combat_target_radius * 2.0f + : birdbot_vars->combat_target_radius) || absolute_float(birdbot_moby->pos.f[2] - selected_combat_target.pos.f[2]) > 6.0f) { - if (birdbot_moby->b53 != 5) { + if (birdbot_moby->target_animation_sequence != 5) { blend_moby_animation(birdbot_moby, 5, 5, scale_game_frames(10)); } - birdbot_moby->f58 = 0.5f; + birdbot_moby->animation_playback_speed = 0.5f; birdbot_moby->state = BIRDBOT_STATE_RECOVER_FROM_BURST; } } @@ -940,15 +979,16 @@ void birdbot_update(PeMoby *birdbot_moby) { a = fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], selected_combat_target.pos.f[1] - birdbot_moby->pos.f[1]); - FUN_L00_00258278_cf((char *)birdbot_moby, &birdbot_vars->f194, a, 0.02f, 0.3f, 0.1f); - if (birdbot_moby->b53 == 0) { - if (fast_dec_timer(&birdbot_vars->w190) != 0) { - if (birdbot_moby->b53 != 5) { + FUN_L00_00258278_cf( + (char *)birdbot_moby, &birdbot_vars->yaw_turn_step, a, 0.02f, 0.3f, 0.1f); + if (birdbot_moby->target_animation_sequence == 0) { + if (fast_dec_timer(&birdbot_vars->firing_retry_timer) != 0) { + if (birdbot_moby->target_animation_sequence != 5) { blend_moby_animation(birdbot_moby, 5, 0, scale_game_frames(0xF)); } } } else if (birdbot_moby->b70 & 2) { - birdbot_moby->f58 = 1.0f; + birdbot_moby->animation_playback_speed = 1.0f; if ((flag || (vector_distance_xy(&birdbot_moby->pos, &selected_combat_target) < 8.0f && absolute_float(birdbot_moby->pos.f[2] - selected_combat_target.pos.f[2]) < 6.0f)) && @@ -956,20 +996,22 @@ void birdbot_update(PeMoby *birdbot_moby) { fast_vec_dist(&birdbot_moby->pos, (Vec4 *)birdbot_vars->main.path + (idx + 1)) > 0.25f) { birdbot_vars->main.idx = idx; - if (birdbot_moby->b53 != 8) { + if (birdbot_moby->target_animation_sequence != 8) { blend_moby_animation(birdbot_moby, 8, 0, scale_game_frames(10)); } - birdbot_moby->f58 = *(float *)&birdbot_path_entry_animation_speed_gp; + birdbot_moby->animation_playback_speed = + *(float *)&birdbot_path_entry_animation_speed_gp; birdbot_moby->state = BIRDBOT_STATE_BEGIN_PATH_MOVEMENT; } else { float d; d = vector_distance_xy(&birdbot_moby->pos, &selected_combat_target); - if ((flag ? d < birdbot_vars->f1A0 * 2.0f : d < birdbot_vars->f1A0) && + if ((flag ? d < birdbot_vars->combat_target_radius * 2.0f + : d < birdbot_vars->combat_target_radius) && absolute_float(birdbot_moby->pos.f[2] - selected_combat_target.pos.f[2]) < 2.0f && birdbot_moby->b31 != 0 && (!flag || path_reposition_requested == 0) && - birdbot_vars->w190 == 0 && + birdbot_vars->firing_retry_timer == 0 && fast_difference_between_rotations( birdbot_moby->rot.f[2], fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], @@ -979,18 +1021,18 @@ void birdbot_update(PeMoby *birdbot_moby) { *(u128 *)&vb = *(u128 *)&birdbot_moby->pos; vb.f[2] = va.f[2]; if (collision_line(&vb, &va, 0, birdbot_moby, 0) == 0) { - birdbot_vars->h1A4 = 0; - birdbot_vars->f198 = 4.0f; + birdbot_vars->burst_shots_fired = 0; + birdbot_vars->projectile_aim_distance = 4.0f; birdbot_moby->state = BIRDBOT_STATE_FIRE_BURST; - if (birdbot_moby->b53 != 4) { + if (birdbot_moby->target_animation_sequence != 4) { blend_moby_animation(birdbot_moby, 4, 0, scale_game_frames(6)); } - birdbot_vars->w190 = 0; + birdbot_vars->firing_retry_timer = 0; break; } - birdbot_vars->w190 = scale_game_frames(0x3C); + birdbot_vars->firing_retry_timer = scale_game_frames(0x3C); } - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(5)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -999,9 +1041,9 @@ void birdbot_update(PeMoby *birdbot_moby) { break; } case BIRDBOT_STATE_BEGIN_PATH_MOVEMENT: - birdbot_moby->f58 = 1.0f; - birdbot_vars->f1B8 = 0.0f; - birdbot_vars->f1BC = 0.0f; + birdbot_moby->animation_playback_speed = 1.0f; + birdbot_vars->path_movement_step_length = 0.0f; + birdbot_vars->pitch_turn_step = 0.0f; birdbot_moby->state = BIRDBOT_STATE_MOVE_TO_PATH_NODE; spawn_birdbot_movement_particles((SplashMoby *)birdbot_moby, (u128 *)&birdbot_position_before_update); @@ -1011,7 +1053,7 @@ void birdbot_update(PeMoby *birdbot_moby) { float path_node_height_offset; c = &birdbot_vars->main; - if (birdbot_vars->h1AE != 0) { + if (birdbot_vars->path_has_stop_nodes != 0) { int i; int best; float bd; @@ -1027,16 +1069,18 @@ void birdbot_update(PeMoby *birdbot_moby) { best = i; } } - birdbot_vars->h1A6 = c->idx < best ? best - 1 : best < c->idx ? best + 1 : c->idx; + birdbot_vars->steering_path_node_index = c->idx < best ? best - 1 + : best < c->idx ? best + 1 + : c->idx; } else { - birdbot_vars->h1A6 = c->idx; + birdbot_vars->steering_path_node_index = c->idx; } - qcopy(&va, &c->path->points[birdbot_vars->h1A6]); + qcopy(&va, &c->path->points[birdbot_vars->steering_path_node_index]); path_node_height_offset = 0.8f; va.f[2] += path_node_height_offset; FUN_L00_00258278_cf( (char *)birdbot_moby, - &birdbot_vars->f194, + &birdbot_vars->yaw_turn_step, fast_arc_tan(va.f[0] - birdbot_moby->pos.f[0], va.f[1] - birdbot_moby->pos.f[1]), frame_time_sq * 6.2831855f, frame_time_sq * 3.1415927f, @@ -1045,20 +1089,22 @@ void birdbot_update(PeMoby *birdbot_moby) { birdbot_moby->rot.f[2], fast_arc_tan(va.f[0] - birdbot_moby->pos.f[0], va.f[1] - birdbot_moby->pos.f[1])) < 0.7853982f) { - if (birdbot_vars->f1B8 < *(float *)&birdbot_path_speed_scale_gp * frame_time) { - birdbot_vars->f1B8 = - birdbot_vars->f1B8 + *(float *)&birdbot_path_speed_scale_gp * frame_time_sq; + if (birdbot_vars->path_movement_step_length < + *(float *)&birdbot_path_speed_scale_gp * frame_time) { + birdbot_vars->path_movement_step_length = + birdbot_vars->path_movement_step_length + + *(float *)&birdbot_path_speed_scale_gp * frame_time_sq; } build_spherical_offset(&vb, - birdbot_vars->f1B8, + birdbot_vars->path_movement_step_length, birdbot_moby->rot.f[2], fast_arc_tan(vector_distance_xy(&birdbot_moby->pos, &va), va.f[2] - birdbot_moby->pos.f[2])); fast_vec_add(&birdbot_moby->pos, &birdbot_moby->pos, &vb); birdbot_moby->rot.f[1] = - spring_turn(&birdbot_vars->f1BC, + spring_turn(&birdbot_vars->pitch_turn_step, birdbot_moby->rot.f[1], - birdbot_vars->f1B8 / + birdbot_vars->path_movement_step_length / (*(float *)&birdbot_path_speed_scale_gp * frame_time) * 0.5235988f, frame_time_sq * 6.2831855f, frame_time_sq * 3.1415927f, @@ -1074,16 +1120,18 @@ void birdbot_update(PeMoby *birdbot_moby) { break; } case BIRDBOT_STATE_BRAKE_AND_FACE_TARGET: - if (birdbot_vars->f1B8 > 0.0f && birdbot_vars->h1EE == 0) { - birdbot_vars->f1B8 -= *(float *)&birdbot_path_speed_scale_gp * 3.0f * frame_time_sq; - va.f[0] = fast_cos(birdbot_moby->rot.f[2]) * birdbot_vars->f1B8; - va.f[1] = fast_sin(birdbot_moby->rot.f[2]) * birdbot_vars->f1B8; + if (birdbot_vars->path_movement_step_length > 0.0f && + birdbot_vars->skip_path_braking == 0) { + birdbot_vars->path_movement_step_length -= + *(float *)&birdbot_path_speed_scale_gp * 3.0f * frame_time_sq; + va.f[0] = fast_cos(birdbot_moby->rot.f[2]) * birdbot_vars->path_movement_step_length; + va.f[1] = fast_sin(birdbot_moby->rot.f[2]) * birdbot_vars->path_movement_step_length; va.f[2] = 0.0f; fast_vec_add(&birdbot_moby->pos, &birdbot_moby->pos, &va); birdbot_moby->rot.f[1] = - spring_turn(&birdbot_vars->f1BC, + spring_turn(&birdbot_vars->pitch_turn_step, birdbot_moby->rot.f[1], - birdbot_vars->f1B8 / + birdbot_vars->path_movement_step_length / (*(float *)&birdbot_path_speed_scale_gp * frame_time) * 0.5235988f, frame_time_sq * 6.2831855f, frame_time_sq * 3.1415927f, @@ -1094,28 +1142,31 @@ void birdbot_update(PeMoby *birdbot_moby) { a = fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], selected_combat_target.pos.f[1] - birdbot_moby->pos.f[1]); - FUN_L00_00258278_cf((char *)birdbot_moby, &birdbot_vars->f194, a, 0.02f, 0.3f, 0.1f); + FUN_L00_00258278_cf( + (char *)birdbot_moby, &birdbot_vars->yaw_turn_step, a, 0.02f, 0.3f, 0.1f); k = *(float *)&birdbot_path_speed_scale_gp * frame_time; - birdbot_vars->f1B8 = 0.0f; - birdbot_moby->rot.f[1] = spring_turn(&birdbot_vars->f1BC, - birdbot_moby->rot.f[1], - birdbot_vars->f1B8 / k * 0.5235988f, - frame_time_sq * 6.2831855f, - frame_time_sq * 3.1415927f, - frame_time * 6.2831855f); + birdbot_vars->path_movement_step_length = 0.0f; + birdbot_moby->rot.f[1] = + spring_turn(&birdbot_vars->pitch_turn_step, + birdbot_moby->rot.f[1], + birdbot_vars->path_movement_step_length / k * 0.5235988f, + frame_time_sq * 6.2831855f, + frame_time_sq * 3.1415927f, + frame_time * 6.2831855f); } - if (birdbot_moby->b53 != 0xA && birdbot_vars->f1B8 <= 0.0f && + if (birdbot_moby->target_animation_sequence != 0xA && + birdbot_vars->path_movement_step_length <= 0.0f && fast_difference_between_rotations( birdbot_moby->rot.f[2], fast_arc_tan(selected_combat_target.pos.f[0] - birdbot_moby->pos.f[0], selected_combat_target.pos.f[1] - birdbot_moby->pos.f[1])) < 0.034906585f) { - birdbot_vars->f1B8 = 0.0f; - if (birdbot_moby->b53 != 0xA) { + birdbot_vars->path_movement_step_length = 0.0f; + if (birdbot_moby->target_animation_sequence != 0xA) { blend_moby_animation(birdbot_moby, 0xA, 0, scale_game_frames(3)); } } else if (birdbot_moby->b52 == 0xA && (birdbot_moby->b70 & 2)) { - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(6)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -1130,17 +1181,17 @@ void birdbot_update(PeMoby *birdbot_moby) { int i; float f; - if (birdbot_moby->b53 != 8) { + if (birdbot_moby->target_animation_sequence != 8) { blend_moby_animation(birdbot_moby, 8, 0, scale_game_frames(10)); } i = idx; f = *(float *)&birdbot_path_entry_animation_speed_gp; birdbot_vars->main.idx = i; - birdbot_moby->f58 = f; + birdbot_moby->animation_playback_speed = f; birdbot_moby->state = BIRDBOT_STATE_BEGIN_PATH_MOVEMENT; return; } - if (birdbot_moby->b53 != 0) { + if (birdbot_moby->target_animation_sequence != 0) { blend_moby_animation(birdbot_moby, 0, 0, scale_game_frames(6)); } birdbot_moby->state = BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION; @@ -1242,18 +1293,18 @@ void birdbot_update(PeMoby *birdbot_moby) { break; } trooper_anim_finish(birdbot_moby, birdbot_vars->x60); - birdbot_vars->f1CC = frame; + birdbot_vars->previous_animation_frame = frame; if (birdbot_moby->state == BIRDBOT_STATE_TRACK_TARGET_AND_SELECT_ACTION || birdbot_moby->state == 5 || birdbot_moby->state == BIRDBOT_STATE_FIRE_BURST || birdbot_moby->state == BIRDBOT_STATE_RECOVER_FROM_BURST || birdbot_moby->state == BIRDBOT_STATE_BRAKE_AND_FACE_TARGET) { - birdbot_vars->fE8 += frame_time_sq * 9.8f; - birdbot_moby->pos.f[2] -= birdbot_vars->fE8 - 2.0f; + birdbot_vars->fall_motion_step += frame_time_sq * 9.8f; + birdbot_moby->pos.f[2] -= birdbot_vars->fall_motion_step - 2.0f; ground = probe_ground_height(&birdbot_moby->pos, 0, 0.5f); birdbot_moby->pos.f[2] -= 2.0f; if (birdbot_moby->pos.f[2] < ground) { birdbot_moby->pos.f[2] = ground; - birdbot_vars->fE8 = 0.0f; + birdbot_vars->fall_motion_step = 0.0f; } } else { ground = probe_ground_height(&birdbot_moby->pos, 0, 0.5f); diff --git a/src/overlays/l01/mobys/birdbot_projectile.c b/src/overlays/l01/mobys/birdbot_projectile.c index f1c3d21086..ce53419f4e 100644 --- a/src/overlays/l01/mobys/birdbot_projectile.c +++ b/src/overlays/l01/mobys/birdbot_projectile.c @@ -208,7 +208,7 @@ typedef struct { u8 pad20[0x58]; DropVars *vars; u8 pad7C[0x2A]; - u16 hA6; + u16 collision_probe_id; } DropMoby; typedef struct { @@ -269,7 +269,7 @@ void birdbot_projectile_update(DropMoby *projectile) { ((f32 *)&probe.dir)[3] = 5627.9248f; probe.b28 = 1; probe.b29 = 1; - probe.id = projectile->hA6; + probe.id = projectile->collision_probe_id; if (fast_dec_timer(projectile_vars->sound) != 0) { burst_position = projectile->pos.q; spawn_explosion_effects(projectile, &burst_position, 0, 0.5f, zero); diff --git a/src/overlays/l01/mobys/bomber_jet.c b/src/overlays/l01/mobys/bomber_jet.c index bbde8b4c74..c04652263f 100644 --- a/src/overlays/l01/mobys/bomber_jet.c +++ b/src/overlays/l01/mobys/bomber_jet.c @@ -71,7 +71,7 @@ typedef struct { u8 b31; s16 h32; u8 pad34[0xC]; - s32 w40; + s32 rotation_vector_x_bits; f32 rot_x; f32 rot_z; u8 pad4c[0x2C]; @@ -103,7 +103,7 @@ BeamMoby *spawn_bomber_jet_beam(void *owner, u128 *pos, u128 *dir, u128 *color, if (created_moby != NULL) { beam_vars = created_moby->vars; beam_vars->owner = owner; - created_moby->w40 = 0; + created_moby->rotation_vector_x_bits = 0; created_moby->b30 = 0xFF; created_moby->h32 = 0xFF; created_moby->b31 = 1; @@ -199,7 +199,7 @@ typedef struct { s32 f0; s16 f4; s16 pad6; - s32 f8; + s32 clip_volume_index; } GunshipGuardVars; typedef struct { @@ -525,9 +525,10 @@ void bomber_jet_update(GunshipMoby *bomber_jet_moby) { GunshipGuardVars *guard_vars = o->vars; if (guard_vars->f4 == 0 && guard_vars->f0 == 0 && random_integer_below(0x64) < 0x64 && - is_point_inside_clip_volume(&hero.motion.pos, - guard_vars->f8) && - is_point_inside_clip_volume(camera_pos, guard_vars->f8)) { + is_point_inside_clip_volume( + &hero.motion.pos, guard_vars->clip_volume_index) && + is_point_inside_clip_volume( + camera_pos, guard_vars->clip_volume_index)) { beam_guard_moby_indices[k] = gunship_vars->guards[i]; k++; } diff --git a/src/overlays/l01/mobys/create_spark_particle.c b/src/overlays/l01/mobys/create_spark_particle.c index 37ac745365..21424d330d 100644 --- a/src/overlays/l01/mobys/create_spark_particle.c +++ b/src/overlays/l01/mobys/create_spark_particle.c @@ -25,9 +25,9 @@ typedef struct { typedef struct { u8 b0; u8 b1; - u8 b2; - u8 b3; - s32 w4; + u8 texture_id; + u8 particle_mode; + s32 packed_color; u8 b8; u8 b9; s16 hA; @@ -91,16 +91,16 @@ void create_spark_particle(s32 id, if (mode == SPARK_MODE_FROM_KIND) { spark->b9 = (kind >> 5) * 16 + truncate_float_to_s32(4.0f); if (kind & 1) { - spark->b3 = 0x48; + spark->particle_mode = 0x48; } else { - spark->b3 = 0x44; + spark->particle_mode = 0x44; } } else { spark->b9 = kind; - spark->b3 = mode; + spark->particle_mode = mode; } spark->b1 = 0; - spark->b2 = *spark_texture_table[texture_table_index]; + spark->texture_id = *spark_texture_table[texture_table_index]; spark_body->x = x; spark_body->y = y; spark_body->z = z; @@ -114,5 +114,5 @@ void create_spark_particle(s32 id, spark->b8 = alpha * 255.0f; spark->hA = scale_game_frames(life); spark_body->b1B = 0; - spark->w4 = FUN_L00_0025bfe0(r, g, b, size); + spark->packed_color = FUN_L00_0025bfe0(r, g, b, size); } diff --git a/src/overlays/l01/mobys/cutscene_effects.c b/src/overlays/l01/mobys/cutscene_effects.c index d44103eaa3..2ca141201f 100644 --- a/src/overlays/l01/mobys/cutscene_effects.c +++ b/src/overlays/l01/mobys/cutscene_effects.c @@ -32,7 +32,7 @@ typedef struct { s32 unk4; u8 pad8[2]; u8 unkA; - u8 unkB; + u8 initial_frame_count; } FxSparkTail; typedef struct { @@ -192,7 +192,7 @@ void level01_cutscene_effects_update(struct Moby *moby) { spark->unk9 = truncate_float_to_s32(4.0f) + 0x40; spark_tail->unk4 = 2; spark_tail->unkA = color >> 24; - spark_tail->unkB = spark->unkA; + spark_tail->initial_frame_count = spark->unkA; } } } diff --git a/src/overlays/l01/mobys/peckbot.c b/src/overlays/l01/mobys/peckbot.c index 7aac95d861..147519e438 100644 --- a/src/overlays/l01/mobys/peckbot.c +++ b/src/overlays/l01/mobys/peckbot.c @@ -158,7 +158,7 @@ typedef struct { typedef struct { Vec577 pos; u8 pad10[0x30]; - void *p40; + void *combat_target_moby; u8 pad44[0xC]; } Mob577Target; @@ -178,7 +178,7 @@ extern s32 FUN_L00_001f35d8_cf(void) __asm__("FUN_001f0b58"); extern void FUN_L00_001ff500_cf(void *, void *, float) __asm__("FUN_001f9bf8"); extern void FUN_L00_00257470(void *, s32, s32); extern void FUN_L00_00258278(void *, void *, f32, f32, f32, f32); -extern s32 FUN_L00_00258b50(void *, void *, void *, void *, f32); +extern s32 move_moby_with_ground_and_collision_checks(void *, void *, void *, void *, f32) __asm__("FUN_L00_00258b50"); extern void FUN_L00_0025a120(void *); extern void hit_reaction(void *, void *, void *, s32, void *, void *, s32, s32) __asm__("FUN_L00_0025a478"); @@ -265,7 +265,7 @@ void peckbot_update(Mob577 *peckbot_moby) { peckbot_moby->id = peckbot_moby->ref->id; peckbot_moby->flags &= ~0x41; select_moby_combat_target(peckbot_moby, &target, peckbot_vars->range + 4.0f); - target_moby = target.p40; + target_moby = target.combat_target_moby; qcopy(&oldpos, &peckbot_moby->pos); if (peckbot_vars->x38 != 0) { peckbot_vars->x214 = scale_game_frames(0xF0); @@ -566,7 +566,7 @@ void peckbot_update(Mob577 *peckbot_moby) { vector_scratch.f[0] = fast_cos(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[1] = fast_sin(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[2] = 0.0f; - movement_result_flags = FUN_L00_00258b50( + movement_result_flags = move_moby_with_ground_and_collision_checks( peckbot_moby, &peckbot_vars->x180, &vector_scratch, &position_scratch, 1.0f); if (fast_dec_timer(&peckbot_vars->turn_timer) != 0) { peckbot_vars->turn_timer = scale_game_frames(random_float_between(30.0f, 90.0f)); @@ -646,7 +646,7 @@ void peckbot_update(Mob577 *peckbot_moby) { vector_scratch.f[0] = fast_cos(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[1] = fast_sin(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[2] = 0.0f; - movement_result_flags = FUN_L00_00258b50( + movement_result_flags = move_moby_with_ground_and_collision_checks( peckbot_moby, &peckbot_vars->x180, &vector_scratch, &position_scratch, 1.0f); if (vector_distance_xy(&peckbot_moby->pos, &peckbot_vars->home) < 2.0f) { peckbot_moby->state = PECKBOT_STATE_GROUNDED_IDLE; @@ -788,7 +788,7 @@ void peckbot_update(Mob577 *peckbot_moby) { vector_scratch.f[0] = fast_cos(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[1] = fast_sin(peckbot_moby->rot.f[2]) * 2.0f; vector_scratch.f[2] = 0.0f; - recovery_movement_result_flags = FUN_L00_00258b50( + recovery_movement_result_flags = move_moby_with_ground_and_collision_checks( peckbot_moby, &peckbot_vars->x180, &vector_scratch, &position_scratch, 1.0f); fast_vec_sub(&home_to_target, &target.pos, &peckbot_vars->home); if (vector_distance_xy(&peckbot_moby->pos, &target.pos) < 1.5f && diff --git a/src/overlays/l01/mobys/pool_tiles_and_effects.c b/src/overlays/l01/mobys/pool_tiles_and_effects.c index 83c73a0ff5..456c0cf874 100644 --- a/src/overlays/l01/mobys/pool_tiles_and_effects.c +++ b/src/overlays/l01/mobys/pool_tiles_and_effects.c @@ -456,11 +456,11 @@ typedef struct { u128 pos; u8 pad20[0xC]; f32 scale; - u8 b30; + u8 update_distance; u8 b31; - s16 h32; + s16 draw_distance; u8 pad34[0xC]; - s32 w40; + s32 rotation_x_bits; u8 pad44[4]; f32 rotz; u8 pad4C[0x2C]; @@ -477,9 +477,9 @@ OrbMoby *FUN_L01_002ffcd0(u128 *pos, f32 scale) { if (spawned_moby != 0) { spawned_moby_vars = spawned_moby->pvars; copy_hero_moby_field_38(spawned_moby); - spawned_moby->w40 = 0; - spawned_moby->h32 = 0x40; - spawned_moby->b30 = 0xFF; + spawned_moby->rotation_x_bits = 0; + spawned_moby->draw_distance = 0x40; + spawned_moby->update_distance = 0xFF; spawned_moby->scale = spawned_moby->scale * scale; spawned_moby->rotz = random_angle_radians(); qcopy(&spawned_moby->pos, pos); diff --git a/src/overlays/l01/mobys/tall_shroom.c b/src/overlays/l01/mobys/tall_shroom.c index 21352ec1a2..9f6732dcdf 100644 --- a/src/overlays/l01/mobys/tall_shroom.c +++ b/src/overlays/l01/mobys/tall_shroom.c @@ -6,7 +6,7 @@ typedef struct { u8 pad0[0x2C]; - f32 f2c; + f32 removal_trigger_value; } TriggerHit; typedef struct { @@ -41,7 +41,7 @@ void tall_shroom_update(TriggerMoby *shroom_moby) { shroom_moby->state = TALL_SHROOM_STATE_WAIT_FOR_HIT; break; case TALL_SHROOM_STATE_WAIT_FOR_HIT: - if (hit != 0 && hit->f2c > 0.0f) { + if (hit != 0 && hit->removal_trigger_value > 0.0f) { flag = 1; } if (flag) { diff --git a/src/overlays/l01/mobys/water_lily.c b/src/overlays/l01/mobys/water_lily.c index faaaccd92d..8269ec709d 100644 --- a/src/overlays/l01/mobys/water_lily.c +++ b/src/overlays/l01/mobys/water_lily.c @@ -18,13 +18,21 @@ void move_moby_xy_with_collision_constraints( extern f32 frame_time_macro __asm__("D_0015ED6C") MACRO_ADDR; -f32 FUN_L01_002f81c8(f32 *spring_axis_position, - f32 *spring_axis_velocity, - f32 target, - f32 velocity_adjustment_scale, - f32 damp, +f32 advance_spring_axis_toward_target(f32 *spring_axis_position, + f32 *spring_axis_velocity, + f32 target, + f32 velocity_adjustment_scale, + f32 damp, - f32 range) { + f32 range) __asm__("FUN_L01_002f81c8"); + +f32 advance_spring_axis_toward_target(f32 *spring_axis_position, + f32 *spring_axis_velocity, + f32 target, + f32 velocity_adjustment_scale, + f32 damp, + + f32 range) { f32 velocity_adjustment; f32 f; diff --git a/src/overlays/l02/hero/hero_set_state.c b/src/overlays/l02/hero/hero_set_state.c index 164deeda39..d38a0568db 100644 --- a/src/overlays/l02/hero/hero_set_state.c +++ b/src/overlays/l02/hero/hero_set_state.c @@ -77,10 +77,11 @@ int hero_set_state(int requested_state, int entry_animation_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - entry_animation_mode != 2)) + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((level_game_mode == 2 || level_game_mode == 6) && entry_animation_mode != 2) + if ((level_game_mode == 2 || level_game_mode == 6) && + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l02/hero/update_hero_state_motion.c b/src/overlays/l02/hero/update_hero_state_motion.c index c381521e81..a660f4e646 100644 --- a/src/overlays/l02/hero/update_hero_state_motion.c +++ b/src/overlays/l02/hero/update_hero_state_motion.c @@ -720,7 +720,7 @@ extern int FUN_L00_00227d40_cf(float, void *, void *) __asm__("FUN_L00_001ff600" extern int try_start_hero_item_idle_animation(void) __asm__("FUN_L00_00229a98"); extern int allocate_voice_for_target_entry(int, int, int) __asm__("FUN_0022da68"); extern short D_L02_0015F688 __attribute__((sda)); -s32 D_L02_0015F68C = 0; +s32 l02_look_timer_expiration_count __asm__("D_L02_0015F68C") = 0; extern void FUN_001efa68_cf(float *dst, float *src, float dz) __asm__("FUN_L00_00233810"); extern void rotate_hero_about_fixed_local_pivot(float, float, float) __asm__("FUN_L00_002091d8"); extern void hero_integrate_velocity(void) __asm__("FUN_L00_00214108"); @@ -827,7 +827,7 @@ void update_hero_state_motion(void) { usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; *(int *)&D_L02_0015F688 = -1; - D_L02_0015F68C++; + l02_look_timer_expiration_count++; } } } diff --git a/src/overlays/l02/hud_counter.c b/src/overlays/l02/hud_counter.c index 6ce389193f..9f7c961286 100644 --- a/src/overlays/l02/hud_counter.c +++ b/src/overlays/l02/hud_counter.c @@ -47,12 +47,12 @@ extern char hud_counter_decimal_format[] __asm__("D_L02_0015F850"); extern s32 hud_counter_bar_growth_divisor_gp __asm__("D_L02_0015F91C") __attribute__((sda)); extern s32 hud_counter_text_shade_divisor_gp __asm__("D_L02_0015F920") __attribute__((sda)); -s32 D_L02_0015F944 = 0x18; -s32 D_L02_0015F948 = 0x1e0; -s32 D_L02_0015F950 = 0xe08080; -s32 D_L02_0015F954 = 0x80e08080; -s32 D_L02_0015F958 = 0x30; -s32 D_L02_0015F95C = 0x46; +s32 l02_hud_counter_left_anchor_x __asm__("D_L02_0015F944") = 0x18; +s32 l02_hud_counter_right_anchor_x __asm__("D_L02_0015F948") = 0x1e0; +s32 l02_hud_counter_text_fade_start_color __asm__("D_L02_0015F950") = 0xe08080; +s32 l02_hud_counter_text_fade_end_color __asm__("D_L02_0015F954") = 0x80e08080; +s32 l02_hud_counter_narrow_bar_width __asm__("D_L02_0015F958") = 0x30; +s32 l02_hud_counter_wide_bar_width __asm__("D_L02_0015F95C") = 0x46; /* Draws the counter: a stretched bar behind the icon and the count, on whichever side of the screen it sits. */ s32 draw_hud_counter(HudElem *hud_element) __asm__("FUN_L02_0023cda8"); @@ -83,9 +83,9 @@ s32 draw_hud_counter(HudElem *hud_element) { hud_screen_position(hud_element, &x, &y); left = x < 0x101; if (left) { - x = D_L02_0015F944; + x = l02_hud_counter_left_anchor_x; } else { - x = D_L02_0015F948; + x = l02_hud_counter_right_anchor_x; } bottom = frame_size[0]; y = pal_mode != FALSE ? bottom - 0x2A : bottom - 0x32; @@ -106,9 +106,9 @@ s32 draw_hud_counter(HudElem *hud_element) { sprintf(text, hud_counter_decimal_format, hud_element->unk74); alpha = truncate_float_to_s32((f32)truncate_float_to_s32(grow * 128.0f) * 0.7f); if (hud_element->unk08 < 10) { - full_bar_width = D_L02_0015F958; + full_bar_width = l02_hud_counter_narrow_bar_width; } else { - full_bar_width = D_L02_0015F95C; + full_bar_width = l02_hud_counter_wide_bar_width; } px = x; bar = px + 4; @@ -134,7 +134,8 @@ s32 draw_hud_counter(HudElem *hud_element) { } else { hud_frame(hud_element, hud_element->icon, x - 0x16, y, 0, 0x80); } - bright = fast_tween_color(D_L02_0015F950, D_L02_0015F954, shade); + bright = fast_tween_color( + l02_hud_counter_text_fade_start_color, l02_hud_counter_text_fade_end_color, shade); dark = fast_tween_color(0, 0x80000000, shade); if (left) { font_print_right(x + 0x43, y + 9, dark, text, -1); diff --git a/src/overlays/l02/mobys/constructorbot.c b/src/overlays/l02/mobys/constructorbot.c index d9daf6fffb..ddae7c7b44 100644 --- a/src/overlays/l02/mobys/constructorbot.c +++ b/src/overlays/l02/mobys/constructorbot.c @@ -80,8 +80,8 @@ extern int D_L02_0015F5CC_i __asm__("D_L02_0015F5CC"); #include "rnc/overlay/l02/mobys/constructorbot_data/constructorbot_update.h" int D_L02_00161A88 = 0x40808080; -int D_L02_00161A90 = 0x3c; -int D_L02_00161A94 = 0x78; +int l02_constructorbot_wake_spray_frame_count_min __asm__("D_L02_00161A90") = 0x3c; +int l02_constructorbot_wake_spray_frame_count_max __asm__("D_L02_00161A94") = 0x78; extern float constructorbot_wake_spray_planar_magnitude_max_gp __asm__("D_L02_00161A98") __attribute__((sda)); extern float approach_value(float *p, float target, float maxstep) __asm__("FUN_00213ed8"); @@ -359,8 +359,9 @@ void constructorbot_update(struct Moby *moby) { direction, D_L02_00161A88, D_L02_00161A88, - random_int_between(scale_game_frames(D_L02_00161A90), - scale_game_frames(D_L02_00161A94)), + random_int_between( + scale_game_frames(l02_constructorbot_wake_spray_frame_count_min), + scale_game_frames(l02_constructorbot_wake_spray_frame_count_max)), 1, 40000.0f); } @@ -567,22 +568,22 @@ typedef struct { unsigned char pad66; unsigned char flash; /* 0x67 */ char pad68[8]; - char knock[0x10]; /* 0x70: passed to trooper_start_knockback */ - float f80; /* 0x80 */ - float f84; - float f88; - float f8C; - int i90; /* 0x90 */ + char knock[0x10]; /* 0x70: passed to trooper_start_knockback */ + float knockback_gravity_step; /* 0x80 */ + float knockback_horizontal_speed_approach_step; + float knockback_initial_horizontal_speed; + float knockback_initial_vertical_speed; + int knockback_collision_radius_fixed; /* 0x90 */ int i94; - float f98; + float knockback_collision_center_z_offset; char pad9C[4]; - float fA0; /* 0xA0 */ + float knockback_collision_restitution; /* 0xA0 */ char padA4[9]; unsigned char bAD; /* 0xAD */ char padAE[0xE]; - float fBC; /* 0xBC */ - float fC0; - float fC4; + float knockback_horizontal_target_speed; /* 0xBC */ + float knockback_ascent_animation_target_frame; + float knockback_descent_animation_target_frame; char padC8[0x158]; char *target; /* 0x220 */ } Vars85b8; @@ -605,21 +606,24 @@ void handle_constructorbot_damage_and_retargeting(void *owner_moby) { resolve_moby_hit_response(moby, hit_record, &moby_vars->hp, 0, &hit, &dmg, 0, 4); if (hit != 1 && ((unsigned char *)moby)[0x20] != 0x11) { moby_vars->hp -= dmg; - moby_vars->i90 = truncate_float_to_s32(614.4f); - moby_vars->f98 = 0.6f; + moby_vars->knockback_collision_radius_fixed = truncate_float_to_s32(614.4f); + moby_vars->knockback_collision_center_z_offset = 0.6f; if (0.0f < moby_vars->hp) { if (dmg < 1.0f) { moby_vars->flash = 100; } else { void *k = moby_vars->knock; moby_vars->flash = 0x78; - moby_vars->f80 = constructorbot_gravity_gp * frame_time_sq; - moby_vars->f84 = + moby_vars->knockback_gravity_step = constructorbot_gravity_gp * frame_time_sq; + moby_vars->knockback_horizontal_speed_approach_step = constructorbot_hit_knockback_horizontal_speed_approach_rate_gp * frame_time_sq; - moby_vars->f88 = constructorbot_hit_knockback_horizontal_speed_gp * D_0015ED6C; - moby_vars->f8C = constructorbot_hit_knockback_vertical_speed_gp * D_0015ED6C; - moby_vars->fBC = constructorbot_knockback_horizontal_target_speed_gp * D_0015ED6C; - moby_vars->fA0 = 0.5f; + moby_vars->knockback_initial_horizontal_speed = + constructorbot_hit_knockback_horizontal_speed_gp * D_0015ED6C; + moby_vars->knockback_initial_vertical_speed = + constructorbot_hit_knockback_vertical_speed_gp * D_0015ED6C; + moby_vars->knockback_horizontal_target_speed = + constructorbot_knockback_horizontal_target_speed_gp * D_0015ED6C; + moby_vars->knockback_collision_restitution = 0.5f; moby_vars->i94 = 25; moby_vars->bAD = 0; trooper_start_knockback(fast_arc_tan(MOBY(moby)->pos.x - hero.motion.pos.f[0], @@ -629,18 +633,21 @@ void handle_constructorbot_damage_and_retargeting(void *owner_moby) { 0xB, 1, 0); - moby_vars->fC0 = 6.5f; - moby_vars->fC4 = 11.0f; + moby_vars->knockback_ascent_animation_target_frame = 6.5f; + moby_vars->knockback_descent_animation_target_frame = 11.0f; moby[0x20] = 0x10; } } else { void *k2 = moby_vars->knock; - moby_vars->f80 = constructorbot_gravity_gp * frame_time_sq; - moby_vars->f84 = + moby_vars->knockback_gravity_step = constructorbot_gravity_gp * frame_time_sq; + moby_vars->knockback_horizontal_speed_approach_step = constructorbot_death_knockback_horizontal_speed_approach_rate_gp * frame_time_sq; - moby_vars->f88 = constructorbot_death_knockback_horizontal_speed_gp * D_0015ED6C; - moby_vars->f8C = constructorbot_death_knockback_vertical_speed_gp * D_0015ED6C; - moby_vars->fBC = constructorbot_knockback_horizontal_target_speed_gp * D_0015ED6C; + moby_vars->knockback_initial_horizontal_speed = + constructorbot_death_knockback_horizontal_speed_gp * D_0015ED6C; + moby_vars->knockback_initial_vertical_speed = + constructorbot_death_knockback_vertical_speed_gp * D_0015ED6C; + moby_vars->knockback_horizontal_target_speed = + constructorbot_knockback_horizontal_target_speed_gp * D_0015ED6C; moby_vars->i94 = 9; moby_vars->bAD = 0; trooper_start_knockback(fast_arc_tan(MOBY(moby)->pos.x - hero.motion.pos.f[0], @@ -650,8 +657,8 @@ void handle_constructorbot_damage_and_retargeting(void *owner_moby) { 0xE, 1, 0); - moby_vars->fC0 = 6.5f; - moby_vars->fC4 = 13.0f; + moby_vars->knockback_ascent_animation_target_frame = 6.5f; + moby_vars->knockback_descent_animation_target_frame = 13.0f; MOBY(moby)->flags &= 0xEFFF; moby_vars->flash = 0xFA; moby[0x20] = 0x11; diff --git a/src/overlays/l02/mobys/elevator.c b/src/overlays/l02/mobys/elevator.c index dff580b4af..03870e8907 100644 --- a/src/overlays/l02/mobys/elevator.c +++ b/src/overlays/l02/mobys/elevator.c @@ -249,12 +249,12 @@ extern float level02_elevator_ring_segment_half_height_gp __asm__("D_L02_00161BF __attribute__((sda)); extern float level02_elevator_ring_segment_angle_degrees_gp __asm__("D_L02_00161C10") __attribute__((sda)); -int D_L02_00161BF4 = 0; -int D_L02_00161BF8 = 2; -int D_L02_00161BFC = 0; -int D_L02_00161C00 = 1; -int D_L02_00161C04 = 0x206068; -int D_L02_00161C08 = 0x40107020; +int level02_elevator_ring_blend_color_a_selector __asm__("D_L02_00161BF4") = 0; +int level02_elevator_ring_blend_color_b_selector __asm__("D_L02_00161BF8") = 2; +int level02_elevator_ring_blend_alpha_selector __asm__("D_L02_00161BFC") = 0; +int level02_elevator_ring_blend_color_d_selector __asm__("D_L02_00161C00") = 1; +int level02_elevator_ring_zero_speed_color __asm__("D_L02_00161C04") = 0x206068; +int level02_elevator_ring_max_speed_color __asm__("D_L02_00161C08") = 0x40107020; extern int fast_tween_color(int, int, float) __asm__("FUN_001fa6e0"); extern void draw_geometry_quad(void *, void *, int); @@ -286,8 +286,8 @@ void draw_elevator_rotating_rings(struct Moby *moby) { int i, j, sign, period; lower = lower - half; lower += translation; - color = fast_tween_color(D_L02_00161C04, - D_L02_00161C08, + color = fast_tween_color(level02_elevator_ring_zero_speed_color, + level02_elevator_ring_max_speed_color, absolute_float((moby_vars->unkB0)) / (level02_elevator_max_vertical_speed_gp * D_0015ED6C)); copy_matrix_rotation(&matrix, &moby->rot_row0); @@ -296,8 +296,10 @@ void draw_elevator_rotating_rings(struct Moby *moby) { matrix.position[3] = 1.0f; packet.texture = get_effect_texture(14); packet.flags = 0xFF9000000260L; - packet.mode = (long)D_L02_00161BF4 | ((long)D_L02_00161BF8 << 2) | ((long)D_L02_00161BFC << 4) | - ((long)D_L02_00161C00 << 6) | 0x8000000000L; + packet.mode = (long)level02_elevator_ring_blend_color_a_selector | + ((long)level02_elevator_ring_blend_color_b_selector << 2) | + ((long)level02_elevator_ring_blend_alpha_selector << 4) | + ((long)level02_elevator_ring_blend_color_d_selector << 6) | 0x8000000000L; packet.zero = 0; uv = level02_elevator_ring_segment_uvs; point = packet.position; diff --git a/src/overlays/l02/mobys/rocket_launcher.c b/src/overlays/l02/mobys/rocket_launcher.c index 717c94fa82..7f9410c799 100644 --- a/src/overlays/l02/mobys/rocket_launcher.c +++ b/src/overlays/l02/mobys/rocket_launcher.c @@ -52,8 +52,8 @@ extern f32 rocket_launcher_projectile_speed_gp __asm__("D_L02_00161C6C") __attri #include "rnc/overlay/l02/mobys/rocket_launcher_data/rocket_launcher_update_2.h" -s32 D_L02_00161C78 = 0x800000ff; -s32 D_L02_00161C7C = 0x80329600; +s32 l02_rocket_launcher_glow_blend_start_color __asm__("D_L02_00161C78") = 0x800000ff; +s32 l02_rocket_launcher_glow_blend_end_color __asm__("D_L02_00161C7C") = 0x80329600; #include "rnc/overlay/l02/mobys/rocket_launcher_data/rocket_launcher_update.h" @@ -165,7 +165,9 @@ void rocket_launcher_update(struct Moby *moby) { glow_blend_fraction = compute_interpolated_record_value(moby) / 10.0f; if (glow_blend_fraction > 1.0f) glow_blend_fraction = 1.0f; - moby->glow_color = turret_lerp_colour(glow_blend_fraction, D_L02_00161C78, D_L02_00161C7C); + moby->glow_color = turret_lerp_colour(glow_blend_fraction, + l02_rocket_launcher_glow_blend_start_color, + l02_rocket_launcher_glow_blend_end_color); if (moby->anim_flags & 2) { if (moby->prev_seq != 0) blend_moby_animation(moby, 0, 0, 1); diff --git a/src/overlays/l02/mobys/rocket_launcher_projectile.c b/src/overlays/l02/mobys/rocket_launcher_projectile.c index 6e85a32447..0b81a7996a 100644 --- a/src/overlays/l02/mobys/rocket_launcher_projectile.c +++ b/src/overlays/l02/mobys/rocket_launcher_projectile.c @@ -22,8 +22,8 @@ typedef struct { extern f32 rocket_launcher_projectile_vertical_velocity_approach_scale_gp __asm__("D_L02_00161F58") __attribute__((sda)); -s32 D_L02_00161F5C = 0x30704020; -s32 D_L02_00161F60 = 0x50e0e0e0; +s32 l02_rocket_projectile_particle_color_argb __asm__("D_L02_00161F5C") = 0x30704020; +s32 l02_rocket_projectile_position_particle_alpha_source __asm__("D_L02_00161F60") = 0x50e0e0e0; extern LevelFx l02_projectile_trail_particle_tint_source __asm__("D_L02_001B2680"); extern void fast_vec_add(void *, void *, void *) __asm__("FUN_001f9a10"); extern void fast_vec_scale(void *, void *, f32) __asm__("FUN_001f9a68"); @@ -69,8 +69,8 @@ void rocket_launcher_projectile_update(struct Moby *moby) { particle = spawn_particle(&trail_position, &back, particle_frame_count, - D_L02_00161F5C >> 24, - D_L02_00161F5C & 0xFFFFFF, + l02_rocket_projectile_particle_color_argb >> 24, + l02_rocket_projectile_particle_color_argb & 0xFFFFFF, 3, random_float_between(300000.0f, 500000.0f), 10000.0f, @@ -88,8 +88,8 @@ void rocket_launcher_projectile_update(struct Moby *moby) { particle = spawn_particle(&moby->pos, &back, scale_game_frames(6), - D_L02_00161F60 >> 24, - D_L02_00161F5C & 0xFFFFFF, + l02_rocket_projectile_position_particle_alpha_source >> 24, + l02_rocket_projectile_particle_color_argb & 0xFFFFFF, 3, 250000.0f, 5000.0f, diff --git a/src/overlays/l02/mobys/sand_shark.c b/src/overlays/l02/mobys/sand_shark.c index 560b7a6a20..cd4611b0e0 100644 --- a/src/overlays/l02/mobys/sand_shark.c +++ b/src/overlays/l02/mobys/sand_shark.c @@ -14,6 +14,7 @@ #include "rnc/overlay/l02/mobys/sand_shark_globals.h" #include "rnc/overlay/shared/math/random/random_int_between.h" #include "rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h" + #include "rnc/rendering/clip_volume.h" #include "rnc/world/collision/ground_probe.h" @@ -166,18 +167,18 @@ void emit_sand_shark_dust_segment(struct Moby *moby, extern void emit_sand_shark_dust_segment(struct Moby *moby, int a, int b, int d) __asm__("FUN_L02_002d3c98"); -int D_L02_001619EC = 0xa; -int D_L02_001619F0 = 0xa; -int D_L02_001619F4 = 8; -int D_L02_001619F8 = 8; +int l02_sand_shark_dust_segment_2_3_puff_count __asm__("D_L02_001619EC") = 0xa; +int l02_sand_shark_dust_segment_0_1_puff_count __asm__("D_L02_001619F0") = 0xa; +int l02_sand_shark_dust_segments_4_5_and_6_7_puff_count __asm__("D_L02_001619F4") = 8; +int l02_sand_shark_dust_segment_8_9_puff_count __asm__("D_L02_001619F8") = 8; void emit_sand_shark_dust_burst(void *moby) __asm__("FUN_L02_002d3dd0"); void emit_sand_shark_dust_burst(void *moby) { - emit_sand_shark_dust_segment(moby, 0, 1, D_L02_001619F0); - emit_sand_shark_dust_segment(moby, 2, 3, D_L02_001619EC); - emit_sand_shark_dust_segment(moby, 4, 5, D_L02_001619F4); - emit_sand_shark_dust_segment(moby, 6, 7, D_L02_001619F4); - emit_sand_shark_dust_segment(moby, 8, 9, D_L02_001619F8); + emit_sand_shark_dust_segment(moby, 0, 1, l02_sand_shark_dust_segment_0_1_puff_count); + emit_sand_shark_dust_segment(moby, 2, 3, l02_sand_shark_dust_segment_2_3_puff_count); + emit_sand_shark_dust_segment(moby, 4, 5, l02_sand_shark_dust_segments_4_5_and_6_7_puff_count); + emit_sand_shark_dust_segment(moby, 6, 7, l02_sand_shark_dust_segments_4_5_and_6_7_puff_count); + emit_sand_shark_dust_segment(moby, 8, 9, l02_sand_shark_dust_segment_8_9_puff_count); } /* pvars of the Aridia enemy sand_shark_update updates (it leaves its burrow, walks, jumps and digs back in). */ @@ -188,7 +189,7 @@ typedef struct { /* 0x026 */ char pad26[3]; /* 0x029 */ unsigned char unk29; /* 0x02A */ char pad2A[4]; - /* 0x02E */ unsigned char unk2E; + /* 0x02E */ unsigned char relaunch_request_state; /* 0x02F */ char pad2F[0x11]; /* 0x040 */ OvlVec4 vel; /* 0x050 */ char pad50[8]; @@ -212,34 +213,34 @@ typedef struct { /* 0x1A8 */ char pad1A8[0x28]; /* 0x1D0 */ OvlVec4 target; /* 0x1E0 */ char pad1E0[0x34]; - /* 0x214 */ int unk214; + /* 0x214 */ int target_selection_status; /* 0x218 */ char pad218[8]; /* 0x220 */ OvlVec4 home; /* 0x230 */ OvlVec4 unk230; /* 0x240 */ float turn_vel; /* 0x244 */ float turn_offset; /* 0x248 */ float turn_range; - /* 0x24C */ float unk24C; + /* 0x24C */ float base_target_selection_range; /* 0x250 */ char pad250[4]; /* 0x254 */ float unk254; - /* 0x258 */ int unk258; - /* 0x25C */ short unk25C; - /* 0x25E */ short unk25E; + /* 0x258 */ int initialization_gate_moby_index; + /* 0x25C */ short target_range_refresh_timer; + /* 0x25E */ short target_range_extension_timer; /* 0x260 */ int turn_timer; /* 0x264 */ char pad264[8]; - /* 0x26C */ int unk26C; + /* 0x26C */ int primary_hero_launch_trigger_volume_index; /* 0x270 */ int unk270; - /* 0x274 */ int unk274; - /* 0x278 */ int unk278; - /* 0x27C */ int unk27C; + /* 0x274 */ int wander_target_volume_index; + /* 0x278 */ int target_activation_volume_index; + /* 0x27C */ int selected_relaunch_moby; /* 0x280 */ char pad280[4]; - /* 0x284 */ int unk284; + /* 0x284 */ int turn_offset_multiplier; /* 0x288 */ int unk288; - /* 0x28C */ int unk28C; + /* 0x28C */ int launch_origin_moby_index; /* 0x290 */ int path; /* 0x294 */ float unk294; - /* 0x298 */ int unk298; - /* 0x29C */ int unk29C; + /* 0x298 */ int outside_path_return_active; + /* 0x29C */ int death_landing_particles_emitted; /* 0x2A0 */ char unk2A0[0x10]; } Varsd3e50; @@ -260,7 +261,8 @@ extern void FUN_L00_00257470_e50(void *, int, int) __asm__("FUN_L00_0025 extern void random_vector(void *, float, float) __asm__("FUN_L00_00257d78"); extern void FUN_L00_00258278_c(void *, float, float *, float, float, float) __asm__("FUN_L00_00258278"); -extern void FUN_L00_00258b50(void *, void *, void *, void *, float); +extern void move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern void play_entity_sound(void *, void *, float, int, float, float, int, int, int) __asm__("FUN_L00_002598b0"); extern void FUN_L00_0025a120_e50(void *) __asm__("FUN_L00_0025a120"); extern void @@ -277,14 +279,14 @@ extern void FUN_L02_002d5a68_e50(void *) __asm__("FUN_L02_002d5a68"); extern void FUN_L02_002d5c88_e50(void *) __asm__("FUN_L02_002d5c88"); extern void FUN_L02_002d63c0_e50(void *) __asm__("FUN_L02_002d63c0"); -int D_L02_001619A8 = 0; +int l02_sand_shark_update_disabled __asm__("D_L02_001619A8") = 0; unsigned char D_L02_00161900 = 0xa; #include "rnc/overlay/l02/mobys/sand_shark_data/sand_shark_update.h" int D_L02_001619B0 = 0xa000000; -int D_L02_001619E4 = 0x40306058; -int D_L02_001619E8 = 0x306058; +int l02_sand_shark_ballistic_particle_initial_color __asm__("D_L02_001619E4") = 0x40306058; +int l02_sand_shark_ballistic_particle_secondary_color __asm__("D_L02_001619E8") = 0x306058; /* Aridia burrowing enemy: profiled with EE timer 0 around its state machine. */ void sand_shark_update(struct Moby *moby) __asm__("FUN_L02_002d3e50"); @@ -301,7 +303,7 @@ void sand_shark_update(struct Moby *moby) { OvlVec4 particle_position_or_forward_step; float f; - if (D_L02_001619A8 != 0) { + if (l02_sand_shark_update_disabled != 0) { return; } *(volatile unsigned int *)0x10000010 = 0x81; @@ -336,9 +338,9 @@ void sand_shark_update(struct Moby *moby) { sand_shark_behavior_vars->unk20 = 1.0f; sand_shark_behavior_vars->unk58 = D_L02_00161900; sand_shark_behavior_vars->unk5C = 1; - sand_shark_behavior_vars->unk2E = 1; + sand_shark_behavior_vars->relaunch_request_state = 1; sand_shark_behavior_vars->unk29 = 1; - sand_shark_behavior_vars->unk25E = 0; + sand_shark_behavior_vars->target_range_extension_timer = 0; FUN_L01_0026d930_e50(&sand_shark_behavior_vars->walk_mode); sand_shark_behavior_vars->walk_188 = sand_shark_behavior_vars->walk_18C = 2.0f; sand_shark_behavior_vars->walk_mode = 0x200; @@ -348,8 +350,8 @@ void sand_shark_update(struct Moby *moby) { moby->flags |= 0x8000; } sand_shark_behavior_vars->unkD0 = &D_L02_001619B0; - if (sand_shark_behavior_vars->unk26C >= 0) { - if (sand_shark_behavior_vars->unk28C == -1) { + if (sand_shark_behavior_vars->primary_hero_launch_trigger_volume_index >= 0) { + if (sand_shark_behavior_vars->launch_origin_moby_index == -1) { mark_moby_for_removal(moby); return; } @@ -360,13 +362,13 @@ void sand_shark_update(struct Moby *moby) { if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(3)); } - } else if (sand_shark_behavior_vars->unk278 >= 0) { + } else if (sand_shark_behavior_vars->target_activation_volume_index >= 0) { sand_shark_behavior_vars->walk_18C = 0.2f; moby->state = SAND_SHARK_WAIT_FOR_TARGET_IN_VOLUME; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(3)); } - } else if (sand_shark_behavior_vars->unk258 >= 0) { + } else if (sand_shark_behavior_vars->initialization_gate_moby_index >= 0) { moby->state = SAND_SHARK_WAIT_FOR_LINKED_MOBY_BEFORE_INITIALIZE; moby->collision = 0; moby->flags = (moby->flags | 0x41) & ~0x1000; @@ -379,13 +381,13 @@ void sand_shark_update(struct Moby *moby) { break; case SAND_SHARK_WAIT_FOR_LINKED_MOBY_BEFORE_INITIALIZE: if (((struct Moby *)((char *)D_L02_0015FFD8_macro + - (sand_shark_behavior_vars->unk258 << 8))) + (sand_shark_behavior_vars->initialization_gate_moby_index << 8))) ->state >= 5 && camera_secondary_mode != 0x72) { moby->flags = (moby->flags & 0xFFBE) | 0x1000; moby->collision = moby->pclass->collision; - sand_shark_behavior_vars->unk258 = -1; - sand_shark_behavior_vars->unk25C = scale_game_frames(0x1518); + sand_shark_behavior_vars->initialization_gate_moby_index = -1; + sand_shark_behavior_vars->target_range_refresh_timer = scale_game_frames(0x1518); moby->state = SAND_SHARK_INITIALIZE; moby->pos.z -= sand_shark_height_offset_gp; } @@ -421,20 +423,22 @@ void sand_shark_update(struct Moby *moby) { FUN_L02_002d5a68_e50(&target_or_particle_vector); } moby->pos.z -= sand_shark_height_offset_gp; - if (sand_shark_behavior_vars->unk214 != 2) { - if (sand_shark_behavior_vars->unk274 >= 0) { - if ((!is_point_inside_clip_volume(&sand_shark_behavior_vars->target, - sand_shark_behavior_vars->unk274) || - sand_shark_behavior_vars->unk25E != 0) && + if (sand_shark_behavior_vars->target_selection_status != 2) { + if (sand_shark_behavior_vars->wander_target_volume_index >= 0) { + if ((!is_point_inside_clip_volume( + &sand_shark_behavior_vars->target, + sand_shark_behavior_vars->wander_target_volume_index) || + sand_shark_behavior_vars->target_range_extension_timer != 0) && random_integer_below(9) == 0) { - sand_shark_behavior_vars->unk274 = -1; + sand_shark_behavior_vars->wander_target_volume_index = -1; } } else if (random_integer_below(4) == 0) { sand_shark_behavior_vars->turn_offset = sand_shark_behavior_vars->turn_range * 0.017453292f; - if (sand_shark_behavior_vars->unk284 != 0) { - sand_shark_behavior_vars->turn_offset = sand_shark_behavior_vars->turn_offset * - (float)sand_shark_behavior_vars->unk284; + if (sand_shark_behavior_vars->turn_offset_multiplier != 0) { + sand_shark_behavior_vars->turn_offset = + sand_shark_behavior_vars->turn_offset * + (float)sand_shark_behavior_vars->turn_offset_multiplier; } else if (random_integer_below(0x100) & 1) { sand_shark_behavior_vars->turn_offset = -sand_shark_behavior_vars->turn_offset; } @@ -446,20 +450,21 @@ void sand_shark_update(struct Moby *moby) { blend_moby_animation(moby, 0xC, 0, scale_game_frames(3)); } } - } else if (sand_shark_behavior_vars->unk25E != 0 && random_integer_below(0x13) == 0) { + } else if (sand_shark_behavior_vars->target_range_extension_timer != 0 && + random_integer_below(0x13) == 0) { moby->state = SAND_SHARK_ALIGN_TO_GROUND_BEFORE_APPROACH_TARGET_WITH_PATH_PROXIMITY_CHECK; allocate_voice_for_target_entry(4, 0, moby); if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, 0); } - sand_shark_behavior_vars->unk274 = -1; + sand_shark_behavior_vars->wander_target_volume_index = -1; } break; case SAND_SHARK_WAIT_FOR_TARGET_IN_VOLUME: - if (sand_shark_behavior_vars->unk214 != 2 && + if (sand_shark_behavior_vars->target_selection_status != 2 && is_point_inside_clip_volume(&sand_shark_behavior_vars->target, - sand_shark_behavior_vars->unk278)) { + sand_shark_behavior_vars->target_activation_volume_index)) { moby->state = SAND_SHARK_APPROACH_TARGET; if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(3)); @@ -482,20 +487,20 @@ void sand_shark_update(struct Moby *moby) { position_or_offset_scratch.f[1] = 2.0f * fast_sin(moby->rot.z); position_or_offset_scratch.f[2] = 0.0f; fast_vec_add(&position_or_offset_scratch, &position_or_offset_scratch, &moby->pos); - FUN_L00_00258b50(moby, - &sand_shark_behavior_vars->walk_mode, - &position_or_offset_scratch, - &target_home_delta, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &sand_shark_behavior_vars->walk_mode, + &position_or_offset_scratch, + &target_home_delta, + 1.0f); FUN_L02_002d63c0_e50(moby); - if (FUN_L00_00261b48(sand_shark_behavior_vars->path, - &moby->pos, - &target_or_particle_vector, - &navigation_point) && + if (path_8808(sand_shark_behavior_vars->path, + &moby->pos, + &target_or_particle_vector, + &navigation_point) && fast_vec_dist(&moby->pos, &navigation_point) < sand_shark_behavior_vars->unk294) { hit14 = 1; } - if (sand_shark_behavior_vars->unk25E != 0) { + if (sand_shark_behavior_vars->target_range_extension_timer != 0) { if (hit14) { moby->state = SAND_SHARK_FACE_TARGET; if (moby->prev_seq != 5) { @@ -506,7 +511,7 @@ void sand_shark_update(struct Moby *moby) { if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(0xA)); } - } else if (sand_shark_behavior_vars->unk214 != 2) { + } else if (sand_shark_behavior_vars->target_selection_status != 2) { moby->state = SAND_SHARK_APPROACH_TARGET; if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0xF)); @@ -525,13 +530,13 @@ void sand_shark_update(struct Moby *moby) { frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, D_0015ED6C * 6.2831855f); - if (sand_shark_behavior_vars->unk25E != 0) { + if (sand_shark_behavior_vars->target_range_extension_timer != 0) { if (vector_distance_xy(&moby->pos, &sand_shark_behavior_vars->target) < 1.5f) { moby->state = SAND_SHARK_CLOSE_RANGE_ATTACK; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(0xA)); } - } else if (sand_shark_behavior_vars->unk214 != 2) { + } else if (sand_shark_behavior_vars->target_selection_status != 2) { moby->state = SAND_SHARK_APPROACH_TARGET; if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0xF)); @@ -624,19 +629,20 @@ void sand_shark_update(struct Moby *moby) { position_or_offset_scratch.f[1] = 2.0f * fast_sin(moby->rot.z); position_or_offset_scratch.f[2] = 0.0f; fast_vec_add(&position_or_offset_scratch, &position_or_offset_scratch, &moby->pos); - FUN_L00_00258b50(moby, - &sand_shark_behavior_vars->walk_mode, - &position_or_offset_scratch, - &target_or_particle_vector, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &sand_shark_behavior_vars->walk_mode, + &position_or_offset_scratch, + &target_or_particle_vector, + 1.0f); FUN_L02_002d63c0_e50(moby); if (moby->state == SAND_SHARK_APPROACH_TARGET_WITH_HEIGHT_OFFSET) { moby->pos.z -= sand_shark_height_offset_gp; } - if (sand_shark_behavior_vars->unk214 != 2) { - if (sand_shark_behavior_vars->unk278 >= 0 && - !is_point_inside_clip_volume(&sand_shark_behavior_vars->target, - sand_shark_behavior_vars->unk278)) { + if (sand_shark_behavior_vars->target_selection_status != 2) { + if (sand_shark_behavior_vars->target_activation_volume_index >= 0 && + !is_point_inside_clip_volume( + &sand_shark_behavior_vars->target, + sand_shark_behavior_vars->target_activation_volume_index)) { moby->state = SAND_SHARK_RETURN_HOME; } else { fast_vec_sub(&target_home_delta, @@ -657,9 +663,9 @@ void sand_shark_update(struct Moby *moby) { } } } - } else if (sand_shark_behavior_vars->unk278 >= 0) { + } else if (sand_shark_behavior_vars->target_activation_volume_index >= 0) { moby->state = SAND_SHARK_RETURN_HOME; - } else if (sand_shark_behavior_vars->unk25E != 0) { + } else if (sand_shark_behavior_vars->target_range_extension_timer != 0) { moby->state = SAND_SHARK_APPROACH_TARGET_WITH_PATH_PROXIMITY_CHECK; } else { moby->state = SAND_SHARK_ALIGN_TO_GROUND_BEFORE_RETURN_HOME_WITH_HEIGHT_OFFSET; @@ -717,18 +723,18 @@ void sand_shark_update(struct Moby *moby) { position_or_offset_scratch.f[1] = 2.0f * fast_sin(moby->rot.z); position_or_offset_scratch.f[2] = 0.0f; fast_vec_add(&position_or_offset_scratch, &position_or_offset_scratch, &moby->pos); - FUN_L00_00258b50(moby, - &sand_shark_behavior_vars->walk_mode, - &position_or_offset_scratch, - &target_or_particle_vector, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &sand_shark_behavior_vars->walk_mode, + &position_or_offset_scratch, + &target_or_particle_vector, + 1.0f); if (moby->state == SAND_SHARK_RETURN_HOME_WITH_HEIGHT_OFFSET) { moby->pos.z -= sand_shark_height_offset_gp; } if (vector_distance_xy(&moby->pos, &sand_shark_behavior_vars->home) < 0.5f) { - sand_shark_behavior_vars->unk298 = 0; + sand_shark_behavior_vars->outside_path_return_active = 0; if (moby->state == SAND_SHARK_RETURN_HOME) { - if (sand_shark_behavior_vars->unk278 >= 0) { + if (sand_shark_behavior_vars->target_activation_volume_index >= 0) { moby->state = SAND_SHARK_WAIT_FOR_TARGET_IN_VOLUME; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(3)); @@ -748,19 +754,21 @@ void sand_shark_update(struct Moby *moby) { } } } - if (sand_shark_behavior_vars->unk298 == 0) { - if (sand_shark_behavior_vars->unk214 != 2) { + if (sand_shark_behavior_vars->outside_path_return_active == 0) { + if (sand_shark_behavior_vars->target_selection_status != 2) { fast_vec_sub(&target_home_delta, &sand_shark_behavior_vars->target, &sand_shark_behavior_vars->home); - if (sand_shark_behavior_vars->unk278 >= 0) { - if (is_point_inside_clip_volume(&sand_shark_behavior_vars->target, - sand_shark_behavior_vars->unk278)) { + if (sand_shark_behavior_vars->target_activation_volume_index >= 0) { + if (is_point_inside_clip_volume( + &sand_shark_behavior_vars->target, + sand_shark_behavior_vars->target_activation_volume_index)) { moby->state = SAND_SHARK_APPROACH_TARGET; sand_shark_behavior_vars->walk_step = sand_shark_behavior_vars->unk254 * D_0015ED6C; } - } else if (fast_vec_length(&target_home_delta) < sand_shark_behavior_vars->unk24C) { + } else if (fast_vec_length(&target_home_delta) < + sand_shark_behavior_vars->base_target_selection_range) { if (moby->state == SAND_SHARK_RETURN_HOME) { moby->state = SAND_SHARK_APPROACH_TARGET; } else { @@ -772,14 +780,15 @@ void sand_shark_update(struct Moby *moby) { blend_moby_animation(moby, 0, 0, scale_game_frames(3)); } } - } else if (sand_shark_behavior_vars->unk25E != 0 && random_integer_below(0x13) == 0) { + } else if (sand_shark_behavior_vars->target_range_extension_timer != 0 && + random_integer_below(0x13) == 0) { moby->state = SAND_SHARK_ALIGN_TO_GROUND_BEFORE_APPROACH_TARGET_WITH_PATH_PROXIMITY_CHECK; allocate_voice_for_target_entry(4, 0, moby); if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, 0); } - sand_shark_behavior_vars->unk274 = -1; + sand_shark_behavior_vars->wander_target_volume_index = -1; } } else { extern float frame_time __asm__("D_0015ED6C") __attribute__((sda)); @@ -810,16 +819,19 @@ void sand_shark_update(struct Moby *moby) { break; case SAND_SHARK_WAIT_FOR_HERO_LAUNCH_TRIGGER: { int in; - if (is_point_inside_clip_volume(&hero.motion.pos, sand_shark_behavior_vars->unk26C)) { + if (is_point_inside_clip_volume( + &hero.motion.pos, + sand_shark_behavior_vars->primary_hero_launch_trigger_volume_index)) { in = 1; } else { in = is_point_inside_clip_volume(&hero.motion.pos, sand_shark_behavior_vars->unk270) != 0; } if (in) { - struct Moby *dest = &D_L02_0015FFD8_macro[sand_shark_behavior_vars->unk28C]; - float dz = dest->pos.z - sand_shark_behavior_vars->home.f[2]; - float up = random_float_between(6.0f, 10.0f) * D_0015ED6C; + struct Moby *dest = + &D_L02_0015FFD8_macro[sand_shark_behavior_vars->launch_origin_moby_index]; + float dz = dest->pos.z - sand_shark_behavior_vars->home.f[2]; + float up = random_float_between(6.0f, 10.0f) * D_0015ED6C; float flight_duration = (square_root(2.0f * (frame_time_sq * 10.8f) * dz) + 2.0f * up) / (frame_time_sq * 10.8f); float speed = @@ -850,8 +862,8 @@ void sand_shark_update(struct Moby *moby) { life = scale_game_frames(random_int_between(0x14, 0x28)); spawn_effect(&moby->pos, &target_or_particle_vector, - D_L02_001619E4, - D_L02_001619E8, + l02_sand_shark_ballistic_particle_initial_color, + l02_sand_shark_ballistic_particle_secondary_color, life, 0x64, random_int_between(0x78, 0x96), @@ -881,15 +893,16 @@ void sand_shark_update(struct Moby *moby) { } case SAND_SHARK_DEATH_KNOCKBACK: { int knockback_status_flags = step_moby_motion(moby, sand_shark_behavior_vars->unk120); - if ((knockback_status_flags & 1) && sand_shark_behavior_vars->unk29C == 0) { - sand_shark_behavior_vars->unk29C = 1; + if ((knockback_status_flags & 1) && + sand_shark_behavior_vars->death_landing_particles_emitted == 0) { + sand_shark_behavior_vars->death_landing_particles_emitted = 1; position_or_offset_scratch.q = *(OvlQuad *)&moby->pos; emit_sand_shark_radial_particles(&position_or_offset_scratch, 0x1B); } if (knockback_status_flags & 0x140) { FUN_L00_00257470_e50(moby, 0, -1); - sand_shark_behavior_vars->unk27C = select_group_class_29c_moby(moby); - if (sand_shark_behavior_vars->unk27C != 0) { + sand_shark_behavior_vars->selected_relaunch_moby = select_group_class_29c_moby(moby); + if (sand_shark_behavior_vars->selected_relaunch_moby != 0) { emit_sand_shark_dust_burst(moby); moby->state = SAND_SHARK_INACTIVE_WAIT_FOR_RELAUNCH; moby->anim_speed = 0.0f; @@ -913,8 +926,8 @@ void sand_shark_update(struct Moby *moby) { if (moby->alpha >= 8) { moby->alpha -= 8; } else { - sand_shark_behavior_vars->unk27C = select_group_class_29c_moby(moby); - if (sand_shark_behavior_vars->unk27C != 0) { + sand_shark_behavior_vars->selected_relaunch_moby = select_group_class_29c_moby(moby); + if (sand_shark_behavior_vars->selected_relaunch_moby != 0) { emit_sand_shark_dust_burst(moby); moby->alpha = 0x80; moby->state = SAND_SHARK_INACTIVE_WAIT_FOR_RELAUNCH; @@ -929,8 +942,8 @@ void sand_shark_update(struct Moby *moby) { } break; case SAND_SHARK_INACTIVE_WAIT_FOR_RELAUNCH: - sand_shark_behavior_vars->unk27C = select_group_class_29c_moby(moby); - if (sand_shark_behavior_vars->unk27C == 0) { + sand_shark_behavior_vars->selected_relaunch_moby = select_group_class_29c_moby(moby); + if (sand_shark_behavior_vars->selected_relaunch_moby == 0) { mark_moby_for_removal(moby); return; } @@ -1019,9 +1032,9 @@ extern int sand_shark_particle_third_frame_count_range_start_gp __asm__("D_L02_0 __attribute__((sda)); extern int sand_shark_particle_third_frame_count_range_end_gp __asm__("D_L02_00161954") __attribute__((sda)); -int D_L02_00161958 = 0x60306058; -int D_L02_0016195C = 0x20306058; -int D_L02_00161960 = -1; +int l02_sand_shark_radial_particle_initial_color __asm__("D_L02_00161958") = 0x60306058; +int l02_sand_shark_radial_particle_secondary_color __asm__("D_L02_0016195C") = 0x20306058; +int l02_sand_shark_radial_particle_header_selector __asm__("D_L02_00161960") = -1; /* Same routine as FUN_L12_002e19a8: spawns n particles around pos, fewer when D_L02_00160178 is high. */ void emit_sand_shark_radial_particles(void *particle_origin, int particle_count) { @@ -1076,12 +1089,12 @@ void emit_sand_shark_radial_particles(void *particle_origin, int particle_count) spawn_spark(particle_position, vertical_motion, radial_motion, - D_L02_00161958, - D_L02_0016195C, + l02_sand_shark_radial_particle_initial_color, + l02_sand_shark_radial_particle_secondary_color, frame_count, second_frame_count, third_frame_count, - D_L02_00161960); + l02_sand_shark_radial_particle_header_selector); } } @@ -1114,9 +1127,9 @@ extern s32 sand_shark_single_particle_third_frame_count_range_start_gp __asm__(" __attribute__((sda)); extern s32 sand_shark_single_particle_third_frame_count_range_end_gp __asm__("D_L02_00161998") __attribute__((sda)); -s32 D_L02_0016199C = 0x40306058; -s32 D_L02_001619A0 = 0x10306058; -s32 D_L02_001619A4 = -1; +s32 l02_sand_shark_single_particle_initial_color __asm__("D_L02_0016199C") = 0x40306058; +s32 l02_sand_shark_single_particle_secondary_color __asm__("D_L02_001619A0") = 0x10306058; +s32 l02_sand_shark_single_particle_header_selector __asm__("D_L02_001619A4") = -1; void emit_sand_shark_single_particle(Vec4 *from) __asm__("FUN_L02_002d5a68"); @@ -1173,12 +1186,12 @@ void emit_sand_shark_single_particle(Vec4 *from) { spawn_spark(&at, &vertical_motion, &radial_motion, - D_L02_0016199C, - D_L02_001619A0, + l02_sand_shark_single_particle_initial_color, + l02_sand_shark_single_particle_secondary_color, frame_count, second_frame_count, third_frame_count, - D_L02_001619A4); + l02_sand_shark_single_particle_header_selector); } /* pvars of the class FUN_L02_002d5c88 updates (only the fields it touches). */ @@ -1186,51 +1199,51 @@ typedef struct { char pad0[0x20]; float hp; /* 0x20 */ char pad24[0xA]; - unsigned char b2E; /* 0x2E: 2 = respawn requested */ + unsigned char relaunch_request_state; /* 0x2E: 2 = respawn requested */ char pad2F[9]; - int i38; /* 0x38 */ + int target_range_timer_refresh_request; /* 0x38 */ char pad3C[0xD4]; short anim[3]; /* 0x110: passed to trooper_anim_update / trooper_anim_finish */ char pad116; - unsigned char b117; /* 0x117 */ + unsigned char hit_flash_target_red; /* 0x117 */ char pad118[8]; - char knock[0x10]; /* 0x120: passed to trooper_start_knockback */ - float f130; /* 0x130 */ - float f134; - float f138; - float f13C; - int i140; /* 0x140 */ - int i144; - float f148; - int i14C; /* 0x14C: count kept by the spawner moby */ + char knock[0x10]; /* 0x120: passed to trooper_start_knockback */ + float knockback_gravity_per_update; /* 0x130 */ + float knockback_horizontal_speed_approach_step; + float knockback_horizontal_speed; + float knockback_initial_vertical_speed; + int knockback_collision_radius; /* 0x140 */ + int knockback_flags; + float knockback_collision_z_offset; + int spawner_active_shark_count; /* 0x14C: count kept by the spawner moby */ char pad150[0xD]; unsigned char b15D; /* 0x15D */ char pad15E[0xE]; - float f16C; /* 0x16C */ - float f170; - float f174; + float knockback_target_horizontal_speed; /* 0x16C */ + float knockback_ascent_animation_target; + float knockback_descent_animation_target; char pad178[0x58]; float tgt[4]; /* 0x1D0: point followed along the path */ char pad1E0[0x30]; - int i210; /* 0x210 */ - int i214; + int selected_target_moby; /* 0x210 */ + int target_selection_status; char pad218[8]; float home[4]; /* 0x220 */ char pad230[0x1C]; - float f24C; /* 0x24C */ - float f250; + float base_target_selection_range; /* 0x24C */ + float effective_target_selection_range; char pad254[8]; short t25C; /* 0x25C */ short t25E; char pad260[0x1C]; - int i27C; /* 0x27C */ - int i280; + int selected_relaunch_moby; /* 0x27C */ + int entry_moby_state; char pad284[4]; - int i288; /* 0x288: spawner moby index, -1 if none */ + int spawning_moby_index; /* 0x288: spawner moby index, -1 if none */ char pad28C[4]; - int i290; /* 0x290: path index */ + int configured_path_index; /* 0x290: path index */ char pad294[8]; - int i29C; /* 0x29C */ + int death_landing_particles_emitted; /* 0x29C */ } Vars5c88; #include "rnc/overlay/l02/mobys/sand_shark_data/handle_sand_shark_damage_and_targeting.h" @@ -1252,6 +1265,11 @@ extern void trooper_anim_finish(void *, void *) __asm__("FUN_L00_0025d538"); void handle_sand_shark_damage_and_targeting(unsigned char *moby) __asm__("FUN_L02_002d5c88"); void handle_sand_shark_damage_and_targeting(unsigned char *moby) { + enum { + SAND_SHARK_RELAUNCH_REQUEST_CONSUMED = 1, + SAND_SHARK_RELAUNCH_REQUEST_PENDING = 2, + SAND_SHARK_TARGET_SELECTION_EXCLUDED = 2 + }; Vars5c88 *moby_vars = ((Vars5c88 *)MOBY(moby)->pvars); char *hit_record; int *path; @@ -1262,16 +1280,17 @@ void handle_sand_shark_damage_and_targeting(unsigned char *moby) { OvlVec4 ground_probe_position; OvlVec4 hit_knockback_vector; - moby_vars->i280 = moby[0x20]; + moby_vars->entry_moby_state = moby[0x20]; if (moby[0x20] == 0) { return; } - if (moby_vars->b2E == 2) { - moby_vars->b2E = 1; - if (moby_vars->i288 >= 0) { - (*(Vars5c88 **)((moby_vars->i288 << 8) + D_L02_0015FFD8 + 0x78))->i14C -= 1; + if (moby_vars->relaunch_request_state == SAND_SHARK_RELAUNCH_REQUEST_PENDING) { + moby_vars->relaunch_request_state = SAND_SHARK_RELAUNCH_REQUEST_CONSUMED; + if (moby_vars->spawning_moby_index >= 0) { + (*(Vars5c88 **)((moby_vars->spawning_moby_index << 8) + D_L02_0015FFD8 + 0x78)) + ->spawner_active_shark_count -= 1; } - if ((moby_vars->i27C = select_group_class_29c_moby(moby)) == 0) { + if ((moby_vars->selected_relaunch_moby = select_group_class_29c_moby(moby)) == 0) { mark_moby_for_removal(moby); return; } @@ -1280,72 +1299,87 @@ void handle_sand_shark_damage_and_targeting(unsigned char *moby) { MOBY(moby)->collision = 0; MOBY(moby)->pos.z -= 10.0f; } - if (moby_vars->i38 != 0 || (!fast_dec_timer_s16(&moby_vars->t25C) && - vector_distance_xy(moby + 0x10, &hero.motion.pos) < 10.0f)) { + if (moby_vars->target_range_timer_refresh_request != 0 || + (!fast_dec_timer_s16(&moby_vars->t25C) && + vector_distance_xy(moby + 0x10, &hero.motion.pos) < 10.0f)) { moby_vars->t25E = truncate_float_to_s32(scale_time(random_float_between(180.0f, 240.0f))); } - moby_vars->i38 = 0; + moby_vars->target_range_timer_refresh_request = 0; if (fast_dec_timer_s16(&moby_vars->t25E)) { - moby_vars->f250 = moby_vars->f24C; + moby_vars->effective_target_selection_range = moby_vars->base_target_selection_range; } else { - moby_vars->f250 = moby_vars->f24C + 5.0f; + moby_vars->effective_target_selection_range = moby_vars->base_target_selection_range + 5.0f; } dmg = 0.0f; hit_record = find_moby_hit(moby, 0x330000, 0); resolve_moby_hit_response(moby, hit_record, &moby_vars->hp, 0, &hit, &dmg, 0, 4); if (hit != 1 && moby[0x20] != 0x18) { extend_group_sand_shark_timers((char *)moby); - moby_vars->i29C = 0; + moby_vars->death_landing_particles_emitted = 0; moby_vars->hp -= dmg; if (moby_vars->hp <= 0.0f) { moby_vars->hp -= dmg; - moby_vars->i140 = 0x200; - moby_vars->f130 = sand_shark_death_knockback_gravity_gp * frame_time_sq; - moby_vars->f134 = + moby_vars->knockback_collision_radius = 0x200; + moby_vars->knockback_gravity_per_update = + sand_shark_death_knockback_gravity_gp * frame_time_sq; + moby_vars->knockback_horizontal_speed_approach_step = sand_shark_death_knockback_horizontal_speed_approach_rate_gp * frame_time_sq; - moby_vars->f138 = sand_shark_death_knockback_horizontal_speed_gp * D_0015ED6C; - moby_vars->f13C = sand_shark_death_knockback_vertical_speed_gp * D_0015ED6C; + moby_vars->knockback_horizontal_speed = + sand_shark_death_knockback_horizontal_speed_gp * D_0015ED6C; + moby_vars->knockback_initial_vertical_speed = + sand_shark_death_knockback_vertical_speed_gp * D_0015ED6C; moby_vars->b15D = 0; - moby_vars->i144 = 9; - moby_vars->f16C = 2.0f * D_0015ED6C; - moby_vars->f148 = 0.5f; + moby_vars->knockback_flags = 9; + moby_vars->knockback_target_horizontal_speed = 2.0f * D_0015ED6C; + moby_vars->knockback_collision_z_offset = 0.5f; qcopy(&ground_probe_position, moby + 0x10); ground_probe_position.f[2] += 2.0f; ground_height = probe_ground_height(&ground_probe_position, 0, 0.5f); if (MOBY(moby)->pos.z < ground_height) { MOBY(moby)->pos.z = ground_height; } - if (moby_vars->i288 >= 0) { + if (moby_vars->spawning_moby_index >= 0) { extern int D_L02_0015FFD8_s __asm__("D_L02_0015FFD8") __attribute__((sda)); - (*(Vars5c88 **)((moby_vars->i288 << 8) + D_L02_0015FFD8_s + 0x78))->i14C -= 1; + (*(Vars5c88 **)((moby_vars->spawning_moby_index << 8) + D_L02_0015FFD8_s + 0x78)) + ->spawner_active_shark_count -= 1; moby_vars->b15D = 0; } else { ground_probe_position.f[2] += 0.01f; } - moby_vars->i144 |= 0x20; + moby_vars->knockback_flags |= 0x20; MOBY(moby)->flags &= 0xEFFF; hit_knockback_vector.q = *(OvlQuad *)(hit_record + 0x10); - trooper_knockback_arc(&hit_knockback_vector, &k, &moby_vars->f138, &moby_vars->f13C); + trooper_knockback_arc(&hit_knockback_vector, + &k, + &moby_vars->knockback_horizontal_speed, + &moby_vars->knockback_initial_vertical_speed); trooper_start_knockback(k, moby, moby_vars->knock, 6, 1, 0); - moby_vars->f148 = 0.85f; - moby_vars->f170 = 7.0f; - moby_vars->f174 = 14.0f; + moby_vars->knockback_collision_z_offset = 0.85f; + moby_vars->knockback_ascent_animation_target = 7.0f; + moby_vars->knockback_descent_animation_target = 14.0f; moby[0x20] = 0x18; MOBY(moby)->collision = 0; - moby_vars->b117 = 0x78; + moby_vars->hit_flash_target_red = 0x78; trooper_anim_update(moby, moby_vars->anim); } } moby[0xA4] = 0xFF; trooper_anim_finish(moby, moby_vars->anim); - path = D_L02_001B0AB0_5c88[moby_vars->i290]; - if (FUN_L00_0025ff38(moby_vars->f250, moby, moby_vars->tgt, 0, 0, path + 4, *path) != 2 && - (moby_vars->f250 < vector_distance_xy(moby_vars->home, moby_vars->tgt) || + path = D_L02_001B0AB0_5c88[moby_vars->configured_path_index]; + if (FUN_L00_0025ff38(moby_vars->effective_target_selection_range, + moby, + moby_vars->tgt, + 0, + 0, + path + 4, + *path) != 2 && + (moby_vars->effective_target_selection_range < + vector_distance_xy(moby_vars->home, moby_vars->tgt) || absolute_float(MOBY(moby)->pos.z - moby_vars->tgt[2]) > 3.0f)) { - moby_vars->i214 = 2; + moby_vars->target_selection_status = SAND_SHARK_TARGET_SELECTION_EXCLUDED; } - if (moby_vars->i210 == 0) { - moby_vars->i210 = (int)hero.moby; + if (moby_vars->selected_target_moby == 0) { + moby_vars->selected_target_moby = (int)hero.moby; qcopy(moby_vars->tgt, &hero.motion.pos); } } diff --git a/src/overlays/l02/mobys/sand_shark_nest.c b/src/overlays/l02/mobys/sand_shark_nest.c index 2654bfd9ce..6cb21f82d4 100644 --- a/src/overlays/l02/mobys/sand_shark_nest.c +++ b/src/overlays/l02/mobys/sand_shark_nest.c @@ -101,7 +101,7 @@ typedef struct { float f20; /* 0x20 */ short s24; /* 0x24 */ char pad26[8]; - unsigned char b2E; /* 0x2E */ + unsigned char removal_request_state; /* 0x2E */ char pad2F[0x11]; float vel[4]; /* 0x40: passed to spawn_explosion */ char pad50[0x20]; @@ -115,8 +115,8 @@ typedef struct { /* Counters kept in the spawner moby's pvars. */ typedef struct { char pad0[0x14C]; - int i14C; - int i150; + int launched_sand_shark_count; + int active_nest_count; } Spawnercb38; extern BoltSourceStats bolt_source_stats_lui[][64] __asm__("D_0014D590") NOT_SDA; @@ -152,6 +152,9 @@ void sand_shark_nest_update(unsigned char *moby) __asm__("FUN_L02_002dcb38"); /* Moby class 668 */ void sand_shark_nest_update(unsigned char *moby) { + enum { + SAND_SHARK_NEST_REMOVAL_REQUEST_IDLE = 1 + }; Varscb38 *nest_vars = ((Varscb38 *)MOBY(moby)->pvars); char *launched_shark; int spawn_delay_factor; @@ -175,10 +178,11 @@ void sand_shark_nest_update(unsigned char *moby) { MOBY(moby)->state = SAND_SHARK_NEST_WAIT_FOR_SPAWN; nest_vars->f20 = 3.0f; nest_vars->s24 = 3; - nest_vars->b2E = 1; + nest_vars->removal_request_state = SAND_SHARK_NEST_REMOVAL_REQUEST_IDLE; nest_vars->timer = scale_game_frames(nest_vars->delay); if (nest_vars->spawner >= 0) { - (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8 + 0x78))->i150 += 1; + (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8 + 0x78)) + ->active_nest_count += 1; } break; case SAND_SHARK_NEST_WAIT_FOR_SPAWN: @@ -210,8 +214,8 @@ void sand_shark_nest_update(unsigned char *moby) { if (launched_shark) { char *od = *(char **)(launched_shark + 0x78); if (nest_vars->spawner >= 0) { - (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8 + 0x78))->i14C += - 1; + (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8 + 0x78)) + ->launched_sand_shark_count += 1; } qcopy(&launch_position, moby + 0x10); launch_position.f[2] += 1.5f; @@ -239,7 +243,8 @@ void sand_shark_nest_update(unsigned char *moby) { if (step_moby_motion(moby, nest_vars->anim) & 0x40) { if (nest_vars->spawner >= 0) { extern int D_L02_0015FFD8_s __asm__("D_L02_0015FFD8") __attribute__((sda)); - (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8_s + 0x78))->i150 -= 1; + (*(Spawnercb38 **)((nest_vars->spawner << 8) + D_L02_0015FFD8_s + 0x78)) + ->active_nest_count -= 1; } qcopy(&launch_velocity_or_explosion_position, moby + 0x10); spawn_explosion(moby, diff --git a/src/overlays/l02/mobys/sandshark_egg.c b/src/overlays/l02/mobys/sandshark_egg.c index e7bf3f32d3..68c6d0ec7a 100644 --- a/src/overlays/l02/mobys/sandshark_egg.c +++ b/src/overlays/l02/mobys/sandshark_egg.c @@ -17,8 +17,8 @@ extern int step_moby_motion(void *, void *) __asm__("FUN_L00_0025c698"); extern void spawn_effect(void *, void *, int, int, int, int, int, int) __asm__("FUN_L00_00269958"); -int D_L02_00161C9C = 0x6f707070; -int D_L02_00161CA0 = 0x707070; +int l02_sandshark_egg_effect_initial_color __asm__("D_L02_00161C9C") = 0x6f707070; +int l02_sandshark_egg_effect_color_endpoint __asm__("D_L02_00161CA0") = 0x707070; void sandshark_egg_update(struct Moby *moby) __asm__("FUN_L02_002e0280"); typedef struct SandsharkEggVars { @@ -57,8 +57,8 @@ void sandshark_egg_update(struct Moby *moby) { random_effect_value = random_int_between(0x14, 0x28); spawn_effect(vp, u, - D_L02_00161C9C, - D_L02_00161CA0, + l02_sandshark_egg_effect_initial_color, + l02_sandshark_egg_effect_color_endpoint, effect_frame_count, 0x28, random_effect_value, diff --git a/src/overlays/l02/mobys/skids_agent.c b/src/overlays/l02/mobys/skids_agent.c index 3676db3c50..c80be7f89a 100644 --- a/src/overlays/l02/mobys/skids_agent.c +++ b/src/overlays/l02/mobys/skids_agent.c @@ -86,15 +86,15 @@ typedef struct SkidsAgentVars { u8 pad_12C[0x24]; s32 unk150; s32 clip_volume_154; - s32 unk158; + s32 camera_start_cuboid_index; s32 unk15C; - u8 unk160; + u8 idle_look_target_position; u8 pad_161[0x11]; s16 timer_172; s16 timer_174; s16 timer_176; - struct Moby *unk178; - f32 unk17C; + struct Moby *carried_prop; + f32 fade_amount; f32 unk180; f32 unk184; } SkidsAgentVars; @@ -125,11 +125,11 @@ void skids_agent_update(struct Moby *moby) { initialize_npc_dialogue(moby, skids_agent_vars); initialize_moby_grounding(moby); prop = create_moby(0x38); - skids_agent_vars->unk178 = prop; + skids_agent_vars->carried_prop = prop; prop->draw_dist = 0x40; - skids_agent_vars->unk178->visible = 1; - skids_agent_vars->unk178->spawn_frame = moby->spawn_frame; - skids_agent_vars->unk178->flags |= 0x100; + skids_agent_vars->carried_prop->visible = 1; + skids_agent_vars->carried_prop->spawn_frame = moby->spawn_frame; + skids_agent_vars->carried_prop->flags |= 0x100; break; case SKIDS_AGENT_IDLE_AND_TALK: if (skids_agent_vars->unk8 == 1 && @@ -189,9 +189,9 @@ void skids_agent_update(struct Moby *moby) { moby->visible = 0; moby->collision = 0; moby->flags |= 1; - if (skids_agent_vars->unk178 != 0) { - skids_agent_vars->unk178->flags |= 1; - skids_agent_vars->unk178->visible = 0; + if (skids_agent_vars->carried_prop != 0) { + skids_agent_vars->carried_prop->flags |= 1; + skids_agent_vars->carried_prop->visible = 0; } start_indexed_disc_stream(2); moby->state = SKIDS_AGENT_END_CONVERSATION; @@ -221,10 +221,12 @@ void skids_agent_update(struct Moby *moby) { frame_time_sq * 0.25f, frame_time * 0.5f); lerp_vector(&pos, - (char *)l02_cuboids + (skids_agent_vars->unk158 << 7) + 0x30, + (char *)l02_cuboids + (skids_agent_vars->camera_start_cuboid_index << 7) + 0x30, (char *)l02_cuboids + (skids_agent_vars->unk15C << 7) + 0x30, skids_agent_vars->unk180); - qcopy_nc(&from, (char *)((skids_agent_vars->unk158 << 7) + (s32)l02_cuboids) + 0x70); + qcopy_nc(&from, + (char *)((skids_agent_vars->camera_start_cuboid_index << 7) + (s32)l02_cuboids) + + 0x70); qcopy_nc(&to, (char *)((skids_agent_vars->unk15C << 7) + (s32)l02_cuboids) + 0x70); rot.f[2] = fast_add_rotations( fast_subtract_rotations(to.f[2], from.f[2]) * skids_agent_vars->unk180, from.f[2]); @@ -235,24 +237,24 @@ void skids_agent_update(struct Moby *moby) { set_camera_position(&pos); set_camera_rotation(&rot); if (skids_agent_vars->unk180 < 1.0f) { - approach_value(&skids_agent_vars->unk17C, 0.0f, 0.1f); + approach_value(&skids_agent_vars->fade_amount, 0.0f, 0.1f); } else { - approach_value(&skids_agent_vars->unk17C, 1.0f, 0.1f); - if (skids_agent_vars->unk17C == 1.0f) { + approach_value(&skids_agent_vars->fade_amount, 1.0f, 0.1f); + if (skids_agent_vars->fade_amount == 1.0f) { moby->state = SKIDS_AGENT_FADE_TO_ZERO_AND_DELETE; jet_end_mount(0); } } - D_L02_0015F3FC = skids_agent_vars->unk17C; + D_L02_0015F3FC = skids_agent_vars->fade_amount; break; } case SKIDS_AGENT_FADE_TO_ZERO_AND_DELETE: { - approach_value(&skids_agent_vars->unk17C, 0.0f, 0.1f); - fade = skids_agent_vars->unk17C; + approach_value(&skids_agent_vars->fade_amount, 0.0f, 0.1f); + fade = skids_agent_vars->fade_amount; D_L02_0015F3FC = fade; if (fade == 0.0f) { - if (skids_agent_vars->unk178 != 0) { - mark_moby_for_removal(skids_agent_vars->unk178); + if (skids_agent_vars->carried_prop != 0) { + mark_moby_for_removal(skids_agent_vars->carried_prop); } kill: mark_moby_for_removal(moby); @@ -266,14 +268,16 @@ void skids_agent_update(struct Moby *moby) { ({ float mtx[16]; Vec4 offset; - if (skids_agent_vars->unk178 != 0) { - moby_point_position(moby, 2, &skids_agent_vars->unk178->pos); + if (skids_agent_vars->carried_prop != 0) { + moby_point_position(moby, 2, &skids_agent_vars->carried_prop->pos); build_moby_bone_transform(moby, 2, mtx); - copy_matrix3x4(&skids_agent_vars->unk178->rot_row0, mtx); + copy_matrix3x4(&skids_agent_vars->carried_prop->rot_row0, mtx); transform_vector_by_basis( - &offset, skids_agent_prop_local_offset, &skids_agent_vars->unk178->rot_row0); - fast_vec_add(&skids_agent_vars->unk178->pos, &skids_agent_vars->unk178->pos, &offset); - update_entity(skids_agent_vars->unk178); + &offset, skids_agent_prop_local_offset, &skids_agent_vars->carried_prop->rot_row0); + fast_vec_add(&skids_agent_vars->carried_prop->pos, + &skids_agent_vars->carried_prop->pos, + &offset); + update_entity(skids_agent_vars->carried_prop); } }); @@ -306,7 +310,7 @@ void skids_agent_update(struct Moby *moby) { } } else if (skids_agent_vars->timer_174 != 0) { skids_agent_vars->timer_174 = 0; - qcopy(&skids_agent_vars->unk160, &hero.motion.body_center); + qcopy(&skids_agent_vars->idle_look_target_position, &hero.motion.body_center); } if (fast_dec_timer_s16(&skids_agent_vars->timer_176)) { skids_agent_vars->timer_176 = @@ -314,15 +318,18 @@ void skids_agent_update(struct Moby *moby) { heading = fast_add_rotations(moby->rot.z, random_float_between(-90.0f, 90.0f) * 0.017453292f); pitch = random_float_between(0.0f, 30.0f) * 0.017453292f; - build_spherical_offset(&skids_agent_vars->unk160, 6.0f, heading, pitch); - fast_vec_add(&skids_agent_vars->unk160, &skids_agent_vars->unk160, &moby->pos); + build_spherical_offset( + &skids_agent_vars->idle_look_target_position, 6.0f, heading, pitch); + fast_vec_add(&skids_agent_vars->idle_look_target_position, + &skids_agent_vars->idle_look_target_position, + &moby->pos); } if (skids_agent_vars->timer_174 != 0) { qcopy(&target, &hero.motion.body_center); rotation_step = 0.04f; rotation_limit = 0.3f; } else { - qcopy(&target, &skids_agent_vars->unk160); + qcopy(&target, &skids_agent_vars->idle_look_target_position); } } if (look_enabled) { diff --git a/src/overlays/l02/mobys/smoke_vent.c b/src/overlays/l02/mobys/smoke_vent.c index 1f9ba392d2..fa8612d49e 100644 --- a/src/overlays/l02/mobys/smoke_vent.c +++ b/src/overlays/l02/mobys/smoke_vent.c @@ -34,10 +34,10 @@ extern f32 alternating_smoke_puff_acceleration_w_random_range_start_gp __asm__(" __attribute__((sda)); extern f32 alternating_smoke_puff_acceleration_w_random_range_end_gp __asm__("D_L02_00162074") __attribute__((sda)); -s32 D_L02_00162078 = 0x404080ff; -s32 D_L02_0016207C = 0x404080c0; -s32 D_L02_00162080 = 0x20804050; -s32 D_L02_00162084 = 0x20603038; +s32 l02_alternating_smoke_puff_first_color_tween_start __asm__("D_L02_00162078") = 0x404080ff; +s32 l02_alternating_smoke_puff_first_color_tween_end __asm__("D_L02_0016207C") = 0x404080c0; +s32 l02_alternating_smoke_puff_second_color_tween_start __asm__("D_L02_00162080") = 0x20804050; +s32 l02_alternating_smoke_puff_second_color_tween_end __asm__("D_L02_00162084") = 0x20603038; #include "rnc/overlay/l02/mobys/smoke_vent_data/update_smoke_vent_6.h" @@ -56,10 +56,10 @@ extern f32 view_gated_smoke_puff_acceleration_w_random_range_start_gp __asm__("D __attribute__((sda)); extern f32 view_gated_smoke_puff_acceleration_w_random_range_end_gp __asm__("D_L02_001620B4") __attribute__((sda)); -s32 D_L02_001620B8 = 0x6000ff80; -s32 D_L02_001620BC = 0x6020ff40; -s32 D_L02_001620C0 = 0x20408040; -s32 D_L02_001620C4 = 0x20206020; +s32 l02_view_gated_smoke_puff_first_color_tween_start __asm__("D_L02_001620B8") = 0x6000ff80; +s32 l02_view_gated_smoke_puff_first_color_tween_end __asm__("D_L02_001620BC") = 0x6020ff40; +s32 l02_view_gated_smoke_puff_second_color_tween_start __asm__("D_L02_001620C0") = 0x20408040; +s32 l02_view_gated_smoke_puff_second_color_tween_end __asm__("D_L02_001620C4") = 0x20206020; #include "rnc/overlay/l02/mobys/smoke_vent_data/update_smoke_vent_4.h" @@ -78,13 +78,13 @@ extern f32 view_gated_smoke_burst_acceleration_w_random_range_start_gp __asm__(" __attribute__((sda)); extern f32 view_gated_smoke_burst_acceleration_w_random_range_end_gp __asm__("D_L02_001620F8") __attribute__((sda)); -s32 D_L02_001620FC = 0x804080ff; -s32 D_L02_00162100 = 0x8040ffff; -s32 D_L02_00162104 = 0x80204040; -s32 D_L02_00162108 = 0x80204080; +s32 l02_view_gated_smoke_burst_first_color_tween_start __asm__("D_L02_001620FC") = 0x804080ff; +s32 l02_view_gated_smoke_burst_first_color_tween_end __asm__("D_L02_00162100") = 0x8040ffff; +s32 l02_view_gated_smoke_burst_second_color_tween_start __asm__("D_L02_00162104") = 0x80204040; +s32 l02_view_gated_smoke_burst_second_color_tween_end __asm__("D_L02_00162108") = 0x80204080; extern s32 view_gated_smoke_burst_interval_min_gp __asm__("D_L02_0016210C") __attribute__((sda)); extern s32 view_gated_smoke_burst_interval_max_gp __asm__("D_L02_00162110") __attribute__((sda)); -s32 D_L02_00162114 = 0x10019; +s32 l02_view_gated_smoke_burst_spawn_options __asm__("D_L02_00162114") = 0x10019; #include "rnc/overlay/l02/mobys/smoke_vent_data/update_smoke_vent_2.h" @@ -103,13 +103,13 @@ extern f32 alternating_smoke_burst_acceleration_w_random_range_start_gp __asm__( __attribute__((sda)); extern f32 alternating_smoke_burst_acceleration_w_random_range_end_gp __asm__("D_L02_00162148") __attribute__((sda)); -s32 D_L02_0016214C = 0x804080ff; -s32 D_L02_00162150 = 0x8040ffff; -s32 D_L02_00162154 = 0x80204040; -s32 D_L02_00162158 = 0x80204080; +s32 l02_alternating_smoke_burst_first_color_tween_start __asm__("D_L02_0016214C") = 0x804080ff; +s32 l02_alternating_smoke_burst_first_color_tween_end __asm__("D_L02_00162150") = 0x8040ffff; +s32 l02_alternating_smoke_burst_second_color_tween_start __asm__("D_L02_00162154") = 0x80204040; +s32 l02_alternating_smoke_burst_second_color_tween_end __asm__("D_L02_00162158") = 0x80204080; extern s32 alternating_smoke_burst_interval_min_gp __asm__("D_L02_0016215C") __attribute__((sda)); extern s32 alternating_smoke_burst_interval_max_gp __asm__("D_L02_00162160") __attribute__((sda)); -s32 D_L02_00162164 = 0x10019; +s32 l02_alternating_smoke_burst_spawn_options __asm__("D_L02_00162164") = 0x10019; /* Smoke vent: once visible within 120 units it puffs bursts (D_L02_001620C8 / D_L02_00162118 parameter blocks) * on a timer plus occasional single puffs (D_L02_00162088 / D_L02_00162048); state 2 alternates its puff life. @@ -206,10 +206,14 @@ void smoke_vent_update(struct Moby *moby) { acc.f[3] = random_float_between( view_gated_smoke_burst_acceleration_w_random_range_start_gp, view_gated_smoke_burst_acceleration_w_random_range_end_gp); - color_a1_burst = fast_tween_color( - D_L02_001620FC, D_L02_00162100, random_float_between(0.0f, 1.0f)); - color_b1_burst = fast_tween_color( - D_L02_00162104, D_L02_00162108, random_float_between(0.0f, 1.0f)); + color_a1_burst = + fast_tween_color(l02_view_gated_smoke_burst_first_color_tween_start, + l02_view_gated_smoke_burst_first_color_tween_end, + random_float_between(0.0f, 1.0f)); + color_b1_burst = + fast_tween_color(l02_view_gated_smoke_burst_second_color_tween_start, + l02_view_gated_smoke_burst_second_color_tween_end, + random_float_between(0.0f, 1.0f)); time_a1_burst = truncate_float_to_s32( scale_time((f32)view_gated_smoke_burst_timing_random_span_gp * random_float_between(0.0f, 1.0f) + @@ -232,7 +236,7 @@ void smoke_vent_update(struct Moby *moby) { (random_float_between(-view_gated_smoke_burst_timing_variation_fraction_gp, view_gated_smoke_burst_timing_variation_fraction_gp) + 1.0f))), - D_L02_00162114); + l02_view_gated_smoke_burst_spawn_options); } } if (random_integer_below(4) != 0) { @@ -265,10 +269,12 @@ void smoke_vent_update(struct Moby *moby) { view_gated_smoke_puff_velocity_w_random_range_end_gp); acc.f[3] = random_float_between(view_gated_smoke_puff_acceleration_w_random_range_start_gp, view_gated_smoke_puff_acceleration_w_random_range_end_gp); - color_a1_puff = - fast_tween_color(D_L02_001620B8, D_L02_001620BC, random_float_between(0.0f, 1.0f)); - color_b1_puff = - fast_tween_color(D_L02_001620C0, D_L02_001620C4, random_float_between(0.0f, 1.0f)); + color_a1_puff = fast_tween_color(l02_view_gated_smoke_puff_first_color_tween_start, + l02_view_gated_smoke_puff_first_color_tween_end, + random_float_between(0.0f, 1.0f)); + color_b1_puff = fast_tween_color(l02_view_gated_smoke_puff_second_color_tween_start, + l02_view_gated_smoke_puff_second_color_tween_end, + random_float_between(0.0f, 1.0f)); time_a1_puff = truncate_float_to_s32(scale_time( (f32)view_gated_smoke_puff_timing_random_span_gp * random_float_between(0.0f, 1.0f) + 1.0f)); @@ -343,10 +349,14 @@ void smoke_vent_update(struct Moby *moby) { acc.f[3] = random_float_between( alternating_smoke_burst_acceleration_w_random_range_start_gp, alternating_smoke_burst_acceleration_w_random_range_end_gp); - color_a2_burst = fast_tween_color( - D_L02_0016214C, D_L02_00162150, random_float_between(0.0f, 1.0f)); - color_b2_burst = fast_tween_color( - D_L02_00162154, D_L02_00162158, random_float_between(0.0f, 1.0f)); + color_a2_burst = + fast_tween_color(l02_alternating_smoke_burst_first_color_tween_start, + l02_alternating_smoke_burst_first_color_tween_end, + random_float_between(0.0f, 1.0f)); + color_b2_burst = + fast_tween_color(l02_alternating_smoke_burst_second_color_tween_start, + l02_alternating_smoke_burst_second_color_tween_end, + random_float_between(0.0f, 1.0f)); time_a2_burst = truncate_float_to_s32( scale_time((f32)alternating_smoke_burst_timing_random_span_gp * random_float_between(0.0f, 1.0f) + @@ -369,7 +379,7 @@ void smoke_vent_update(struct Moby *moby) { -alternating_smoke_burst_timing_variation_fraction_gp, alternating_smoke_burst_timing_variation_fraction_gp) + 1.0f))), - D_L02_00162164); + l02_alternating_smoke_burst_spawn_options); } } fast_vec_normalize_scale_first( @@ -399,10 +409,12 @@ void smoke_vent_update(struct Moby *moby) { alternating_smoke_puff_velocity_w_random_range_end_gp); acc.f[3] = random_float_between(alternating_smoke_puff_acceleration_w_random_range_start_gp, alternating_smoke_puff_acceleration_w_random_range_end_gp); - color_a2_puff = - fast_tween_color(D_L02_00162078, D_L02_0016207C, random_float_between(0.0f, 1.0f)); - color_b2_puff = - fast_tween_color(D_L02_00162080, D_L02_00162084, random_float_between(0.0f, 1.0f)); + color_a2_puff = fast_tween_color(l02_alternating_smoke_puff_first_color_tween_start, + l02_alternating_smoke_puff_first_color_tween_end, + random_float_between(0.0f, 1.0f)); + color_b2_puff = fast_tween_color(l02_alternating_smoke_puff_second_color_tween_start, + l02_alternating_smoke_puff_second_color_tween_end, + random_float_between(0.0f, 1.0f)); time_a2_puff = truncate_float_to_s32( scale_time((f32) * &smoke_vent_vars->unkC8 * random_float_between(0.0f, 1.0f) + 1.0f)); time_b2_puff = truncate_float_to_s32( diff --git a/src/overlays/l02/mobys/transport_pod.c b/src/overlays/l02/mobys/transport_pod.c index 10b2edb08c..04c1e08b72 100644 --- a/src/overlays/l02/mobys/transport_pod.c +++ b/src/overlays/l02/mobys/transport_pod.c @@ -149,7 +149,7 @@ void transport_pod_update(unsigned char *moby) { MOBY(moby)->update_dist = 0xFF; MOBY(moby)->command = 1; qcopy(moby + 0x10, &l02_cuboids[transport_pod_vars->node_b].pos); - MOBY(moby)->state = 1; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_GEAR_MOVEMENT_TRIGGER; ((struct Moby *)moby)->pos.z -= 6.0f; transport_pod_vars->rail_a = create_moby(0x421); *(short *)(transport_pod_vars->rail_a + 0x32) = 0x40; @@ -176,7 +176,7 @@ void transport_pod_update(unsigned char *moby) { case TRANSPORT_POD_WAIT_FOR_GEAR_MOVEMENT_TRIGGER: if (visited52[MOBY(moby)->mission + current_level_index * 16] == 0xFF) { transport_pod_vars->timer = scale_game_frames(30); - MOBY(moby)->state = 2; + MOBY(moby)->state = TRANSPORT_POD_TIMED_GEAR_MOVEMENT; } break; case TRANSPORT_POD_TIMED_GEAR_MOVEMENT: @@ -210,7 +210,7 @@ void transport_pod_update(unsigned char *moby) { update_entity((char *)D_L02_0015FFD8 + (transport_pod_vars->gear[2] << 8)); update_entity((char *)D_L02_0015FFD8 + (transport_pod_vars->gear[3] << 8)); if (fast_dec_timer(&transport_pod_vars->timer)) { - MOBY(moby)->state = 3; + MOBY(moby)->state = TRANSPORT_POD_RAISE_FOR_BOARDING; allocate_voice_for_target_entry(1, 0, moby); } break; @@ -224,7 +224,7 @@ void transport_pod_update(unsigned char *moby) { snap_transport_pod_rails_to_offsets((struct Moby *)moby); if (l02_cuboids[transport_pod_vars->node_a].pos.z - 0.0001f <= ((struct Moby *)moby)->pos.z) { - MOBY(moby)->state = 4; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FOR_BOARDING; allocate_voice_for_target_entry(0, 0, moby); } break; @@ -236,7 +236,7 @@ void transport_pod_update(unsigned char *moby) { ((struct Moby *)moby)->pos.z - 2.0f) < 0.0001f && absolute_float(*(float *)(transport_pod_vars->rail_b + 0x18) - ((struct Moby *)moby)->pos.z + 4.0f) < 0.0001f) { - MOBY(moby)->state = 5; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_OR_RECALL; } break; case TRANSPORT_POD_WAIT_FOR_RIDER_OR_RECALL: @@ -248,7 +248,7 @@ void transport_pod_update(unsigned char *moby) { transport_pod_vars->rail_a_off = -1.0f; transport_pod_vars->rail_b_off = -1.0f; snap_transport_pod_rails_to_offsets((struct Moby *)moby); - MOBY(moby)->state = 3; + MOBY(moby)->state = TRANSPORT_POD_RAISE_FOR_BOARDING; MOBY(moby)->command = 1; allocate_voice_for_target_entry(1, 0, moby); } else if (MOBY(moby)->command == 1 && @@ -260,7 +260,7 @@ void transport_pod_update(unsigned char *moby) { transport_pod_vars->rail_b_off = -1.0f; snap_transport_pod_rails_to_offsets((struct Moby *)moby); MOBY(moby)->command = 0; - MOBY(moby)->state = 3; + MOBY(moby)->state = TRANSPORT_POD_RAISE_FOR_BOARDING; allocate_voice_for_target_entry(1, 0, moby); } else if ((unsigned char *)hero.ground_moby == (struct Moby *)moby && hero.air_frames.s == 0 && hero.vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) { @@ -306,7 +306,7 @@ void transport_pod_update(unsigned char *moby) { camera_target_or_hero_position_or_rotation.f[2] - camera_position_or_stop_look.f[2]); } - MOBY(moby)->state = 6; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_READY_FOR_DEPARTURE; transport_pod_vars->ride_timer = scale_game_frames(0xB4); request_hero_target_pose( moby + 0x10, @@ -326,15 +326,15 @@ void transport_pod_update(unsigned char *moby) { case TRANSPORT_POD_WAIT_FOR_RIDER_READY_FOR_DEPARTURE: { int rider_readiness_status = get_hero_target_pose_status(); if (rider_readiness_status == HERO_TARGET_POSE_STATUS_READY) { - MOBY(moby)->state = 7; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FOR_DEPARTURE; allocate_voice_for_target_entry(2, 0, moby); hero_set_state(0x72, 0); } else if (rider_readiness_status == HERO_TARGET_POSE_STATUS_INACTIVE) { jet_end_mount(2); - MOBY(moby)->state = 0xD; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_TO_LEAVE; } else if (fast_dec_timer(&transport_pod_vars->ride_timer)) { jet_end_mount(2); - MOBY(moby)->state = 0xD; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_TO_LEAVE; enter_hero_idle_or_stop(); } break; @@ -347,7 +347,7 @@ void transport_pod_update(unsigned char *moby) { ((struct Moby *)moby)->pos.z + 1.0f) < 0.01f && absolute_float(*(float *)(transport_pod_vars->rail_b + 0x18) - ((struct Moby *)moby)->pos.z + 1.0f) < 0.01f) { - MOBY(moby)->state = 8; + MOBY(moby)->state = TRANSPORT_POD_LOWER_AND_TRANSFER_TO_OTHER_STOP; } break; case TRANSPORT_POD_LOWER_AND_TRANSFER_TO_OTHER_STOP: @@ -387,7 +387,7 @@ void transport_pod_update(unsigned char *moby) { 0x72, 0); transport_pod_vars->speed = -transport_pod_vars->speed; - MOBY(moby)->state = 9; + MOBY(moby)->state = TRANSPORT_POD_ADVANCE_RIDE_CAMERA; set_active_camera_mode(2, scale_game_frames(0xB4)); } break; @@ -401,7 +401,7 @@ void transport_pod_update(unsigned char *moby) { if (transport_pod_vars->cam_goal != 0 ? (float)transport_pod_vars->cam_goal <= transport_pod_vars->cam_pos : transport_pod_vars->cam_pos <= (float)transport_pod_vars->cam_goal) { - MOBY(moby)->state = 10; + MOBY(moby)->state = TRANSPORT_POD_RAISE_FOR_DISEMBARKING; } sample_camera_path(D_L02_001B0AB0_dc88[transport_pod_vars->path], 0, @@ -436,7 +436,7 @@ void transport_pod_update(unsigned char *moby) { D_L02_00161C30_gp * D_0015ED6C); snap_transport_pod_rails_to_offsets((struct Moby *)moby); if (l02_cuboids[transport_pod_vars->node_a].pos.z <= ((struct Moby *)moby)->pos.z) { - MOBY(moby)->state = 0xB; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FOR_DISEMBARKING; allocate_voice_for_target_entry(0, 0, moby); } break; @@ -459,7 +459,7 @@ void transport_pod_update(unsigned char *moby) { help_request(0x7DD, 0x48); } } - MOBY(moby)->state = 0xD; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_TO_LEAVE; jet_end_mount(2); hero_set_state(0, 1); } @@ -467,12 +467,12 @@ void transport_pod_update(unsigned char *moby) { case TRANSPORT_POD_RAISE_TO_STOP_HEIGHT: ((struct Moby *)moby)->pos.z += D_0015ED6C * 4.0f; if (l02_cuboids[transport_pod_vars->node_a].pos.z <= ((struct Moby *)moby)->pos.z) { - MOBY(moby)->state = 5; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_OR_RECALL; } break; case TRANSPORT_POD_WAIT_FOR_RIDER_TO_LEAVE: if ((unsigned char *)hero.ground_moby != (struct Moby *)moby) { - MOBY(moby)->state = 5; + MOBY(moby)->state = TRANSPORT_POD_WAIT_FOR_RIDER_OR_RECALL; } break; case TRANSPORT_POD_CREATE_RAILS: @@ -490,14 +490,14 @@ void transport_pod_update(unsigned char *moby) { *(unsigned short *)(transport_pod_vars->rail_b + 0x34) = MOBY(moby)->flags; qcopy_nc(transport_pod_vars->rail_b + 0x10, moby + 0x10); qcopy_nc(transport_pod_vars->rail_b + 0x40, moby + 0x40); - MOBY(moby)->state = 0xF; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FROM_CONFIGURED_OFFSETS; break; case TRANSPORT_POD_POSITION_RAILS_FROM_CONFIGURED_OFFSETS: transport_pod_vars->rail_a_off = transport_pod_configured_rail_a_height_offset_gp; transport_pod_vars->rail_b_off = transport_pod_configured_rail_b_height_offset_gp; advance_transport_pod_rails_to_offsets((struct Moby *)moby); if (transport_pod_rail_cycle_enabled_gp != 0.0f) { - MOBY(moby)->state = 0x10; + MOBY(moby)->state = TRANSPORT_POD_CYCLE_RAILS_TO_SPLIT_HEIGHTS; } break; case TRANSPORT_POD_CYCLE_RAILS_TO_SPLIT_HEIGHTS: @@ -505,12 +505,12 @@ void transport_pod_update(unsigned char *moby) { transport_pod_vars->rail_b_off = -4.0f; advance_transport_pod_rails_to_offsets((struct Moby *)moby); if (transport_pod_rail_cycle_enabled_gp == 0.0f) { - MOBY(moby)->state = 0xF; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FROM_CONFIGURED_OFFSETS; } else if (absolute_float(*(float *)(transport_pod_vars->rail_a + 0x18) - ((struct Moby *)moby)->pos.z - 2.0f) < 0.01f && absolute_float(*(float *)(transport_pod_vars->rail_b + 0x18) - ((struct Moby *)moby)->pos.z + 4.0f) < 0.01f) { - MOBY(moby)->state = 0x11; + MOBY(moby)->state = TRANSPORT_POD_CYCLE_RAILS_TO_SHARED_LOWER_HEIGHT; } break; case TRANSPORT_POD_CYCLE_RAILS_TO_SHARED_LOWER_HEIGHT: @@ -518,12 +518,12 @@ void transport_pod_update(unsigned char *moby) { transport_pod_vars->rail_b_off = -1.0f; advance_transport_pod_rails_to_offsets((struct Moby *)moby); if (transport_pod_rail_cycle_enabled_gp == 0.0f) { - MOBY(moby)->state = 0xF; + MOBY(moby)->state = TRANSPORT_POD_POSITION_RAILS_FROM_CONFIGURED_OFFSETS; } else if (absolute_float(*(float *)(transport_pod_vars->rail_a + 0x18) - ((struct Moby *)moby)->pos.z + 1.0f) < 0.01f && absolute_float(*(float *)(transport_pod_vars->rail_b + 0x18) - ((struct Moby *)moby)->pos.z + 1.0f) < 0.01f) { - MOBY(moby)->state = 0x10; + MOBY(moby)->state = TRANSPORT_POD_CYCLE_RAILS_TO_SPLIT_HEIGHTS; } break; } diff --git a/src/overlays/l03/hero/hero_set_state.c b/src/overlays/l03/hero/hero_set_state.c index 3c3faba792..9678fe9c3b 100644 --- a/src/overlays/l03/hero/hero_set_state.c +++ b/src/overlays/l03/hero/hero_set_state.c @@ -76,10 +76,11 @@ int hero_set_state(int requested_state, int entry_animation_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - entry_animation_mode != 2)) + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L03_0015F5C4 == 2 || D_L03_0015F5C4 == 6) && entry_animation_mode != 2) + if ((D_L03_0015F5C4 == 2 || D_L03_0015F5C4 == 6) && + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l03/hero/update_hero_motion_for_current_state.c b/src/overlays/l03/hero/update_hero_motion_for_current_state.c index a497c13e25..8ac3e2d2ae 100644 --- a/src/overlays/l03/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l03/hero/update_hero_motion_for_current_state.c @@ -224,7 +224,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -316,7 +316,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L03_0020ef60" void update_hero_motion_for_current_state(void) { struct MobyView *moby = MV(hero.moby); - s32 sub = hero.state.step; + s32 initial_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 spatial_scratch_or_hit_descriptor; @@ -744,11 +744,11 @@ void update_hero_motion_for_current_state(void) { spatial_scratch_or_hit_descriptor.f[1] += random_float_between(0.0f, 0.03f); spatial_scratch_or_hit_descriptor.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -2481,7 +2481,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (initial_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l03/hero_relative_camera.c b/src/overlays/l03/hero_relative_camera.c index 8a7d9e9d0a..f3cb0cfed1 100644 --- a/src/overlays/l03/hero_relative_camera.c +++ b/src/overlays/l03/hero_relative_camera.c @@ -208,8 +208,8 @@ void update_camera_state_outside_clip_volume(char *moby) __asm__("FUN_L03_002ebd void update_camera_state_outside_clip_volume(char *moby) { char *camera_table_entry = (char *)((*(short *)(moby + 0x84) << 5) + D_L03_0015EF50); - char *sub = *(char **)(camera_table_entry + 0x1C); - int clip_volume_index = *(int *)(sub + 0xC); + char *camera_config = *(char **)(camera_table_entry + 0x1C); + int clip_volume_index = *(int *)(camera_config + 0xC); if (clip_volume_index >= 0 && is_point_inside_clip_volume(D_0013E533 + 0xE9D, clip_volume_index) == 0) { *(short *)(moby + 0x7E) = 3; diff --git a/src/overlays/l03/mobys/kerwan_path_enemy.c b/src/overlays/l03/mobys/kerwan_path_enemy.c index a0e6ad1fbc..4839b0cd71 100644 --- a/src/overlays/l03/mobys/kerwan_path_enemy.c +++ b/src/overlays/l03/mobys/kerwan_path_enemy.c @@ -51,10 +51,10 @@ int try_start_kerwan_path_enemy_heading_turn(float desired_heading, typedef struct KerwanPathEnemyVars { u8 pad_0[0x263]; - u8 unk263; - s32 unk264; + u8 heading_turn_cooldown_frames; + s32 turn_gate_moby_index; u8 pad_268[0x24]; - f32 unk28C; + f32 turn_destination_heading; } KerwanPathEnemyVars; int try_start_kerwan_path_enemy_heading_turn(float desired_heading, @@ -66,7 +66,7 @@ int try_start_kerwan_path_enemy_heading_turn(float desired_heading, float heading_delta; unsigned char previous_state; if (*(int *)&target->rot != 0) { - linked_moby_index = enemy_pvars->unk264; + linked_moby_index = enemy_pvars->turn_gate_moby_index; if (linked_moby_index != -1) { char *linked_moby = (char *)(linked_moby_index << 8) + (int)*(char **)&D_L03_0015FFD8_u; if (MOBY(linked_moby)->oclass == 0x336) { @@ -75,8 +75,8 @@ int try_start_kerwan_path_enemy_heading_turn(float desired_heading, } } heading_delta = fast_subtract_rotations(desired_heading, moby->rot.z); - if (absolute_float(heading_delta) >= 0.7853982f && enemy_pvars->unk263 == 0 && - moby->prev_seq != 1) { + if (absolute_float(heading_delta) >= 0.7853982f && + enemy_pvars->heading_turn_cooldown_frames == 0 && moby->prev_seq != 1) { goto go; } if (absolute_float(heading_delta) > 1.5707964f) { @@ -88,7 +88,7 @@ int try_start_kerwan_path_enemy_heading_turn(float desired_heading, } else { blend_moby_animation(moby, 9, 0, scale_game_frames(10)); } - enemy_pvars->unk28C = desired_heading; + enemy_pvars->turn_destination_heading = desired_heading; previous_state = moby->state; moby->state = ENEMY_TURN_TO_HEADING; moby->command = previous_state; @@ -133,14 +133,14 @@ typedef struct { float f14; float f18; float f1C; - int i20; - int i24; + int collision_radius_fixed; + int knockback_flags; float f28; char p2C[0x11]; unsigned char b3D; - short s3E; + short jump_phase; char p40[0xC]; - float f4C; + float target_horizontal_speed; float f50; float f54; char p58[8]; @@ -155,12 +155,12 @@ typedef struct { char p1C[8]; float f24; float f28; - float f2C; + float path_node_proximity_distance; char p30[8]; int i38; - float f3C; + float turn_acceleration; float f40; - float f44; + float max_turn_speed; char p48[8]; } Mover2C8398; @@ -174,7 +174,7 @@ typedef struct { typedef struct { char p0[0x68]; - float f68; + float target_yaw_offset; char p6C[0x14]; } Look2C8398; @@ -205,7 +205,7 @@ typedef struct Data2C8398 { Look2C8398 look0; Look2C8398 look1; short s250; - short s252; + short target_range_boost_timer; unsigned char b254; unsigned char b255; short s256; @@ -215,8 +215,8 @@ typedef struct Data2C8398 { unsigned char b263; int i264; char p268[4]; - float f26C; - float f270; + float base_target_selection_range; + float target_selection_range; int i274; float f278; float f27C; @@ -399,7 +399,7 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { Data2C8398 *moby_data = m->data; float target_distance; - select_moby_combat_target(m, &selected_target, moby_data->f270); + select_moby_combat_target(m, &selected_target, moby_data->target_selection_range); target_distance = vector_distance_xy(m->pos, &selected_target); manipulator_set_scale(&moby_data->look0, 2.5f); if (moby_data->b262 == 1) { @@ -424,23 +424,26 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { fast_subtract_rotations_cf(&moby_data->b263); if (m->b31 != 0 || target_distance < 24.0f) { if (m->state == ENEMY_TURN_TO_HEADING) { - moby_data->look0.f68 = fast_subtract_rotations(moby_data->f28C, m->rot[2]) * 0.25f; - moby_data->look1.f68 = fast_subtract_rotations(moby_data->f28C, m->rot[2]) * 0.75f; - } else if (m->state < ENEMY_MOVE_TO_PATH_NODE && target_distance < moby_data->f270) { - moby_data->look1.f68 = + moby_data->look0.target_yaw_offset = + fast_subtract_rotations(moby_data->f28C, m->rot[2]) * 0.25f; + moby_data->look1.target_yaw_offset = + fast_subtract_rotations(moby_data->f28C, m->rot[2]) * 0.75f; + } else if (m->state < ENEMY_MOVE_TO_PATH_NODE && + target_distance < moby_data->target_selection_range) { + moby_data->look1.target_yaw_offset = fast_subtract_rotations(fast_arc_tan(selected_target.pos[0] - m->pos[0], selected_target.pos[1] - m->pos[1]), m->rot[2]); } - if (moby_data->look0.f68 > 0.7853982f) { - moby_data->look0.f68 = 0.7853982f; - } else if (moby_data->look0.f68 < -0.7853982f) { - moby_data->look0.f68 = -0.7853982f; + if (moby_data->look0.target_yaw_offset > 0.7853982f) { + moby_data->look0.target_yaw_offset = 0.7853982f; + } else if (moby_data->look0.target_yaw_offset < -0.7853982f) { + moby_data->look0.target_yaw_offset = -0.7853982f; } - if (moby_data->look1.f68 > 0.7853982f) { - moby_data->look1.f68 = 0.7853982f; - } else if (moby_data->look1.f68 < -0.7853982f) { - moby_data->look1.f68 = -0.7853982f; + if (moby_data->look1.target_yaw_offset > 0.7853982f) { + moby_data->look1.target_yaw_offset = 0.7853982f; + } else if (moby_data->look1.target_yaw_offset < -0.7853982f) { + moby_data->look1.target_yaw_offset = -0.7853982f; } update_joint_animation( (char *)m, (char *)&moby_data->look0, 2, frame_scale_sq * 0.03f, frame_scale_sq * 0.3f); @@ -454,13 +457,14 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { FUN_001f96b0_cf((char *)&moby_data->mv); moby_data->mv.fC = 3.0f; moby_data->mv.f18 = 0.0f; - moby_data->mv.f3C = frame_time_sq * 6.2831855f; + moby_data->mv.turn_acceleration = frame_time_sq * 6.2831855f; moby_data->mv.f40 = frame_time_sq * 12.566371f; - moby_data->mv.f44 = frame_time * 3.1415927f; + moby_data->mv.max_turn_speed = frame_time * 3.1415927f; moby_data->mv.f24 = frame_time * 6.0f; moby_data->mv.f8 = 2.0f; moby_data->mv.f28 = 3.1415927f; - moby_data->mv.f2C = moby_data->mv.f24 * truncate_float_to_s32_cf(15.0f); + moby_data->mv.path_node_proximity_distance = + moby_data->mv.f24 * truncate_float_to_s32_cf(15.0f); moby_data->mv.i38 = 9; moby_data->f20 = 3.0f; moby_data->s24 = truncate_float_to_s32(3.0f); @@ -468,8 +472,8 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { moby_data->b28 = 2; moby_data->f30 = 1.75f; moby_data->q.f28 = 0.7f; - moby_data->q.i20 = truncate_float_to_s32(716.8f); - moby_data->q.f4C = 0.0f; + moby_data->q.collision_radius_fixed = truncate_float_to_s32(716.8f); + moby_data->q.target_horizontal_speed = 0.0f; moby_data->b58 = 0xA; moby_data->b5A = 0xC; clear_u64_value(moby_data->v40); @@ -525,7 +529,8 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { blend_moby_animation(m, 0, 0, scale_game_frames(10)); m->state = ENEMY_WAIT_FOR_LINKED_MOBY; } else { - if (target_distance < moby_data->f270 || target_distance < moby_data->f27C) { + if (target_distance < moby_data->target_selection_range || + target_distance < moby_data->f27C) { if (try_start_kerwan_path_enemy_heading_turn( fast_arc_tan(selected_target.pos[0] - m->pos[0], selected_target.pos[1] - m->pos[1]), @@ -549,7 +554,7 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { if (m->anim != 2) { blend_moby_animation(m, 2, 0, scale_game_frames(10)); } - } else if (target_distance < moby_data->f270 && + } else if (target_distance < moby_data->target_selection_range && absolute_float(selected_target.pos[2] - m->pos[2]) < 10.0f && fast_dec_timer_s16(&moby_data->s250)) { if (fast_difference_between_rotations( @@ -567,7 +572,7 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { } break; case ENEMY_WAIT_FOR_LINKED_MOBY: - if (target_distance < moby_data->f270 && + if (target_distance < moby_data->target_selection_range && absolute_float(selected_target.pos[2] - m->pos[2]) < 4.0f && m->anim != 0xA) { blend_moby_animation(m, 0xA, 0, scale_game_frames(10)); break; @@ -672,7 +677,7 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { (char *)&selected_target)) { break; } - if (target_distance < moby_data->f270 && + if (target_distance < moby_data->target_selection_range && absolute_float(selected_target.pos[2] - m->pos[2]) < 10.0f && fast_dec_timer_s16(&moby_data->s250) && fast_difference_between_rotations( @@ -925,7 +930,7 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { case ENEMY_KNOCKBACK_RECOVERY: { int fl; float g; - if (moby_data->q.s3E != 2) { + if (moby_data->q.jump_phase != 2) { fl = step_moby_motion(m, &moby_data->q); } else { m->f58 = 1.0f; @@ -1046,8 +1051,8 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { q->f8 = q->f8 - q->f10; speed = vector_length_xy(q); want = 0.0f; - if (q->s3E != 2) { - want = q->f4C; + if (q->jump_phase != 2) { + want = q->target_horizontal_speed; } approach_value(&speed, want, q->f14); set_vector_length_xy(q, q, speed); @@ -1056,11 +1061,14 @@ void kerwan_path_enemy_update(Moby2C8398 *m) { fast_vec_add(m->pos, m->pos, q); qcopy(b, m->pos); b[2] += q->f28; - if (fast_vec_length(q) > (float)q->i20) { + if (fast_vec_length(q) > (float)q->collision_radius_fixed) { collision_line(a, b, 0x24, m, 0); qcopy(b, &D_L03_00173F40.point); } - if (coll_sphere(convert_integer_to_float(q->i20) * 0.0009765625f, b, 0x24, m)) { + if (coll_sphere(convert_integer_to_float(q->collision_radius_fixed) * 0.0009765625f, + b, + 0x24, + m)) { qcopy(m->pos, sphere_collision_resolved_position); m->pos[2] = a[2] + q->f8 - q->f28; } @@ -1506,12 +1514,12 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { moby_data = moby->data; if (moby_data->i38 != 0) { moby_data->i38 = 0; - moby_data->s252 = scale_game_frames(240); + moby_data->target_range_boost_timer = scale_game_frames(240); } - if (fast_dec_timer_s16(&moby_data->s252)) { - moby_data->f270 = moby_data->f26C; + if (fast_dec_timer_s16(&moby_data->target_range_boost_timer)) { + moby_data->target_selection_range = moby_data->base_target_selection_range; } else { - moby_data->f270 = moby_data->f26C + 5.0f; + moby_data->target_selection_range = moby_data->base_target_selection_range + 5.0f; } hit = find_moby_hit(moby, 0x330000, 0); hit_response_code = @@ -1550,7 +1558,7 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { (2.0f * JUMP_SPEED(D_L03_001618E0, 80.0f) / (frame_time_sq * 80.0f))) * 0.5f; moby_data->q.f1C = JUMP_SPEED(D_L03_001618E0, 80.0f); - moby_data->q.i24 = 9; + moby_data->q.knockback_flags = 9; moby_data->q.b3D = 0; *(OvlQuad *)hit_knockback_vector = *(OvlQuad *)(hit + 0x10); trooper_knockback_arc( @@ -1578,7 +1586,7 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { kerwan_path_enemy_knockback_horizontal_deceleration * frame_time_sq * 0.5f * (2.0f * JUMP_SPEED(D_L03_001618E0, 80.0f) / (frame_time_sq * 80.0f)); moby_data->q.f1C = JUMP_SPEED(D_L03_001618E0, 80.0f); - moby_data->q.i24 = 9; + moby_data->q.knockback_flags = 9; moby_data->q.b3D = 0; *(OvlQuad *)hit_knockback_vector = *(OvlQuad *)(hit + 0x10); trooper_knockback_arc( @@ -1601,7 +1609,7 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { kerwan_path_enemy_knockback_horizontal_deceleration * frame_time_sq * 0.5f * (2.0f * JUMP_SPEED(D_L03_001618E0, 80.0f) / (frame_time_sq * 80.0f)); moby_data->q.f1C = JUMP_SPEED(D_L03_001618E0, 80.0f); - moby_data->q.i24 = 9; + moby_data->q.knockback_flags = 9; moby_data->q.b3D = 0; *(OvlQuad *)hit_knockback_vector = *(OvlQuad *)(hit + 0x10); trooper_knockback_arc( @@ -1621,7 +1629,7 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { kerwan_path_enemy_knockback_horizontal_deceleration * frame_time_sq * 0.5f * (2.0f * JUMP_SPEED(2.0f, 40.0f) / (frame_time_sq * 40.0f)); moby_data->q.f1C = JUMP_SPEED(2.0f, 40.0f); - moby_data->q.i24 = 9; + moby_data->q.knockback_flags = 9; moby_data->q.b3D = 0; *(OvlQuad *)hit_knockback_vector = *(OvlQuad *)(hit + 0x10); trooper_knockback_arc( @@ -1629,7 +1637,7 @@ void update_kerwan_path_enemy_hit_reaction(Moby2C8398 *moby) { trooper_start_knockback(angle, moby, (char *)moby_data + 0x70, 7, 5, 2); moby_data->q.f50 = 10.0f; moby_data->q.f54 = 20.0f; - moby_data->q.f4C = 2.0f * frame_time; + moby_data->q.target_horizontal_speed = 2.0f * frame_time; moby_data->b255 = 0; moby->flags &= 0xEFFF; moby_data->b67 = 0xFA; @@ -1651,7 +1659,9 @@ extern int select_moby_target_with_hero_fallback(char *, char *, float) __asm__( /* Picks the path node to head for next: walks the path ring from the start and keeps the node best aligned * with the target direction, else the one nearest the target (but at least 16 units away). */ -void FUN_L03_002c9ca0(Moby2C8398 *moby) { +void select_kerwan_path_enemy_next_node(Moby2C8398 *moby) __asm__("FUN_L03_002c9ca0"); + +void select_kerwan_path_enemy_next_node(Moby2C8398 *moby) { Tgt2C8398 target; float near[4]; float pt[4]; @@ -1669,7 +1679,8 @@ void FUN_L03_002c9ca0(Moby2C8398 *moby) { best_ang = 0.0f; pf = &moby_data->pf; best_dist = best_ang; - select_moby_target_with_hero_fallback((char *)moby, (char *)&target, moby_data->f270); + select_moby_target_with_hero_fallback( + (char *)moby, (char *)&target, moby_data->target_selection_range); seg = pf->idx; FUN_L00_0025df68(pf->path, moby->pos, diff --git a/src/overlays/l03/mobys/metropolis_train_locomotive.c b/src/overlays/l03/mobys/metropolis_train_locomotive.c index 20cc1d1ed6..d3e0741c7c 100644 --- a/src/overlays/l03/mobys/metropolis_train_locomotive.c +++ b/src/overlays/l03/mobys/metropolis_train_locomotive.c @@ -109,15 +109,15 @@ extern void gunship_update(char *) __asm__("FUN_L01_002f5168"); typedef struct { char p00[0x60]; char motion[0x40]; - int iA0; + int first_car_moby_index; char pA4[0x14]; int iB8; char pBC[4]; float fC0; int iC4; float fC8; - float fCC; - float fD0; + float yaw_turn_step; + float pitch_turn_step; char pD4[8]; float fDC; } Train292890; @@ -127,8 +127,8 @@ typedef struct { char motion[0x80]; float prev_pos[4]; float prev_rot[4]; - int iC0; - float fC4; + int next_car_moby_index; + float hitch_offset_distance; } Car292890; void update_metropolis_train_motion(char *moby) __asm__("FUN_L03_00292890"); @@ -157,7 +157,7 @@ void update_metropolis_train_motion(char *moby) { ((unsigned char *)moby)[0x72] = 0xFF; qcopy(old_pos, moby + 0x10); qcopy(old_rot, moby + 0x40); - next_id = locomotive_state->iA0; + next_id = locomotive_state->first_car_moby_index; if (next_id != -1) { /* Fakematch: writing the unchanged next car id back is a no-op, but the * test-and-store survives until after register allocation (reload's cse @@ -165,7 +165,7 @@ void update_metropolis_train_motion(char *moby) { * then the branch's label stops reload from reusing the $4 copy of * `coupling` below, which gives retail's reload of it from the stack. */ if (next_id != 0) { - locomotive_state->iA0 = next_id; + locomotive_state->first_car_moby_index = next_id; } id = next_id; target = coupling + 0x10; @@ -187,7 +187,7 @@ void update_metropolis_train_motion(char *moby) { *(float *)(coupling + 0x14) - MOBY(moby)->pos.y), 3.1415927f); MOBY(moby)->rot.z = - spring_turn(&locomotive_state->fCC, + spring_turn(&locomotive_state->yaw_turn_step, MOBY(moby)->rot.z, distance_margin_or_target_angle, (locomotive_state->fC8 * 60.0f / locomotive_state->fC0) * 0.25f * @@ -199,7 +199,7 @@ void update_metropolis_train_motion(char *moby) { fast_arc_tan(vector_distance_xy(moby + 0x10, target), *(float *)(coupling + 0x18) - MOBY(moby)->pos.z); MOBY(moby)->rot.y = - spring_turn(&locomotive_state->fD0, + spring_turn(&locomotive_state->pitch_turn_step, MOBY(moby)->rot.y, distance_margin_or_target_angle, (locomotive_state->fC8 * 60.0f / locomotive_state->fC0) * 0.25f * @@ -220,7 +220,8 @@ void update_metropolis_train_motion(char *moby) { fast_vec_sub(car_position_adjustment, hitch, car + 0x10); fast_vec_normalize(car_position_adjustment, car_position_adjustment, - fast_vec_length(car_position_adjustment) - car_data->fC4); + fast_vec_length(car_position_adjustment) - + car_data->hitch_offset_distance); fast_vec_add(car + 0x10, car_position_adjustment, car + 0x10); *(float *)(car + 0x48) = fast_add_rotations( fast_arc_tan(hitch[0] - *(float *)(car + 0x10), hitch[1] - *(float *)(car + 0x14)), @@ -235,7 +236,7 @@ void update_metropolis_train_motion(char *moby) { update_entity_matrix(car_data->motion, delta, car_data->prev_rot, car + 0x40); qcopy(car_data->prev_pos, car + 0x10); qcopy(car_data->prev_rot, car + 0x40); - id = car_data->iC0; + id = car_data->next_car_moby_index; } while (id != -1); fast_vec_sub(delta, moby + 0x10, old_pos); update_entity_matrix(locomotive_state->motion, delta, old_rot, moby + 0x40); @@ -309,37 +310,37 @@ typedef struct { char p40[0x5C]; int i9C; char pA0[4]; - int iA4; - int iA8; - int iAC; - int iB0; - int iB4; + int first_path_index; + int boarding_placement_path_index; + int second_path_index; + int reset_clip_volume_index; + int boarding_clip_volume_index; int iB8; - float fBC; + float front_hitch_offset_distance; float fC0; int iC4; float fC8; char pCC[8]; - int iD4; - int iD8; + int second_path_stop_node_index; + int second_path_turret_moby_index; float fDC; int ids[8]; - int i100; + int boarding_turret_moby_index; int i104; int i108; - int i10C; + int fall_check_airborne_frames; } Engine292e98; typedef struct { char p00[0x60]; - int i60; + int path_node_index; char p64[0xC]; char *path; int i74; char p78[0x78]; - float fF0; + float path_segment_fraction; char pF4[8]; - float fFC; + float path_step_distance; } Coupling292e98; typedef struct { @@ -347,7 +348,7 @@ typedef struct { float f14; float f18; char p1C[0xC]; - int i28; + int cuboid_index; int i2C; } Turret292e98; @@ -445,7 +446,7 @@ void metropolis_train_locomotive_update(char *moby) { train_engine_pvars = ((Engine292e98 *)MOBY(moby)->pvars); ident = *(unsigned short *)(moby + 0xA8); train_engine_pvars->iB8 = ident; - if (train_engine_pvars->iA4 == -1) { + if (train_engine_pvars->first_path_index == -1) { train_engine_pvars->i20 = 0; train_engine_pvars->s24 = 0; train_engine_pvars->b28 = 4; @@ -466,16 +467,16 @@ void metropolis_train_locomotive_update(char *moby) { train_engine_pvars->b28 = 4; train_engine_pvars->s3E = 0xD; moby_point_position(moby, 0, start); - train_engine_pvars->fBC = vector_distance_xy(start, moby + 0x10); + train_engine_pvars->front_hitch_offset_distance = vector_distance_xy(start, moby + 0x10); train_engine_pvars->fDC = 20.0f; train_engine_pvars->fC8 = train_engine_pvars->fC0 = train_engine_pvars->fC0 * frame_time; - if (train_engine_pvars->iAC != -1) { - second_path = ((char *)l03_paths[train_engine_pvars->iAC]); - train_engine_pvars->iD4 = -1; + if (train_engine_pvars->second_path_index != -1) { + second_path = ((char *)l03_paths[train_engine_pvars->second_path_index]); + train_engine_pvars->second_path_stop_node_index = -1; second_path_node_index = 0; if (*(int *)second_path > 0) { if (*(float *)(second_path + second_path_node_index * 0x10 + 0x1C) == 1.0f) { - train_engine_pvars->iD4 = second_path_node_index; + train_engine_pvars->second_path_stop_node_index = second_path_node_index; } else { next: second_path_node_index++; @@ -484,7 +485,7 @@ void metropolis_train_locomotive_update(char *moby) { 1.0f) { goto next; } - train_engine_pvars->iD4 = second_path_node_index; + train_engine_pvars->second_path_stop_node_index = second_path_node_index; } } } @@ -494,29 +495,35 @@ void metropolis_train_locomotive_update(char *moby) { *(unsigned short *)(coupling + 0x34) |= 6; break; case TRAIN_SETUP_COUPLING_PATH: - *(OvlQuad *)start = *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->iA4]) + 0x10); + *(OvlQuad *)start = + *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->first_path_index]) + 0x10); place_metropolis_train(moby, start, 0.0f); - cdata->i74 = train_engine_pvars->iA4; - cdata->fFC = train_engine_pvars->fC0; + cdata->i74 = train_engine_pvars->first_path_index; + cdata->path_step_distance = train_engine_pvars->fC0; gunship_update(coupling); MOBY(moby)->command = 2; break; case TRAIN_POSITION_FOR_BOARDING: - *(OvlQuad *)start = *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->iA8]) + 0x10); + *(OvlQuad *)start = + *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->boarding_placement_path_index]) + + 0x10); place_metropolis_train( - moby, start, PATH_HEADING(((char *)l03_paths[train_engine_pvars->iA8]))); + moby, + start, + PATH_HEADING(((char *)l03_paths[train_engine_pvars->boarding_placement_path_index]))); MOBY(moby)->command = 3; - cdata->i74 = train_engine_pvars->iA4; + cdata->i74 = train_engine_pvars->first_path_index; cdata->path = ((char *)l03_paths[cdata->i74]); - cdata->i60 = 1; + cdata->path_node_index = 1; train_engine_pvars->fC8 = 0.0f; break; case TRAIN_WAIT_FOR_BOARDING: update_metropolis_train_idle_motion(moby); - if (!is_point_inside_clip_volume(&hero.motion, train_engine_pvars->iB4)) { + if (!is_point_inside_clip_volume(&hero.motion, + train_engine_pvars->boarding_clip_volume_index)) { break; } - if (train_engine_pvars->i100 == -1) { + if (train_engine_pvars->boarding_turret_moby_index == -1) { break; } mode = hero.state.control_mode; @@ -525,8 +532,11 @@ void metropolis_train_locomotive_update(char *moby) { D_L03_0015FDFC = 1; request_music_track(4, 7); set_moby_dialogue_record_value(moby, 1); - ((char *)&D_L03_0015FFD8_m292[train_engine_pvars->i100])[0xBC] = 1; - td = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->i100] + 0x78); + ((char *)&D_L03_0015FFD8_m292[train_engine_pvars->boarding_turret_moby_index])[0xBC] = + 1; + td = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars + ->boarding_turret_moby_index] + + 0x78); AIM_AT_HERO(td); td->i2C = scale_game_frames(860); train_engine_pvars->i104 = scale_game_frames(30); @@ -544,8 +554,8 @@ void metropolis_train_locomotive_update(char *moby) { if (hero.air_frames.s != 0 && hero.state.control_mode != 3) { FUN_L00_0025df68( cdata->path, hero.motion.pos.f, start, &seg, &frac, 0, 999.0f, 5.0f, 0.0f); - train_engine_pvars->i10C += 1; - if (scale_game_frames(60) < train_engine_pvars->i10C && + train_engine_pvars->fall_check_airborne_frames += 1; + if (scale_game_frames(60) < train_engine_pvars->fall_check_airborne_frames && hero.motion.pos.f[2] < start[2] - 10.0f) { RELEASE_VOICE(train_engine_pvars->i108); train_engine_pvars->i108 = -1; @@ -554,10 +564,13 @@ void metropolis_train_locomotive_update(char *moby) { break; } } else { - train_engine_pvars->i10C = 0; + train_engine_pvars->fall_check_airborne_frames = 0; } - if (((unsigned char *)(char *)&D_L03_0015FFD8_m292[train_engine_pvars->i100])[0xBC] != 0) { - td = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->i100] + 0x78); + if (((unsigned char *)(char *)&D_L03_0015FFD8_m292 + [train_engine_pvars->boarding_turret_moby_index])[0xBC] != 0) { + td = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars + ->boarding_turret_moby_index] + + 0x78); AIM_AT_HERO(td); } if (hero.ground_moby != 0 && @@ -567,13 +580,14 @@ void metropolis_train_locomotive_update(char *moby) { if (!is_hero_on_moby(moby)) { break; } - if (train_engine_pvars->iAC == -1) { + if (train_engine_pvars->second_path_index == -1) { break; } - if (train_engine_pvars->iD8 == -1) { + if (train_engine_pvars->second_path_turret_moby_index == -1) { break; } - if (((unsigned char *)(char *)&D_L03_0015FFD8_m292[train_engine_pvars->i100])[0xBC] != 0) { + if (((unsigned char *)(char *)&D_L03_0015FFD8_m292 + [train_engine_pvars->boarding_turret_moby_index])[0xBC] != 0) { break; } for (i = 0; i < 8; i++) { @@ -585,51 +599,60 @@ void metropolis_train_locomotive_update(char *moby) { break; } } - if (train_engine_pvars->iD4 == -1) { + if (train_engine_pvars->second_path_stop_node_index == -1) { debug_printf_292e98(train_end_path_missing_stop_node_warning); break; } - ((char *)&D_L03_0015FFD8_m292[train_engine_pvars->iD8])[0xBC] = 1; - tdb = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->iD8] + 0x78); - path = ((char *)l03_paths[train_engine_pvars->iAC]); + ((char *)&D_L03_0015FFD8_m292[train_engine_pvars->second_path_turret_moby_index])[0xBC] = 1; + tdb = *( + Turret292e98 * + *)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->second_path_turret_moby_index] + + 0x78); + path = ((char *)l03_paths[train_engine_pvars->second_path_index]); tdb->f18 = fast_arc_tan(*(float *)(path + 0x10) - l03_camera.pos.f[0], *(float *)(path + 0x14) - l03_camera.pos.f[1]); tdb->f14 = -fast_arc_tan( vector_distance_xy(l03_camera.pos.f, - ((char *)l03_paths[train_engine_pvars->iAC]) + 0x10), - *(float *)(((char *)l03_paths[train_engine_pvars->iAC]) + 0x18) - l03_camera.pos.f[2]); - l03_cuboids[tdb->i28].pos.x = - fast_cos(PATH_HEADING(((char *)l03_paths[train_engine_pvars->iAC]))) * + ((char *)l03_paths[train_engine_pvars->second_path_index]) + 0x10), + *(float *)(((char *)l03_paths[train_engine_pvars->second_path_index]) + 0x18) - + l03_camera.pos.f[2]); + l03_cuboids[tdb->cuboid_index].pos.x = + fast_cos(PATH_HEADING(((char *)l03_paths[train_engine_pvars->second_path_index]))) * -(train_engine_pvars->fDC + 4.0f); - l03_cuboids[tdb->i28].pos.y = - fast_sin(PATH_HEADING(((char *)l03_paths[train_engine_pvars->iAC]))) * + l03_cuboids[tdb->cuboid_index].pos.y = + fast_sin(PATH_HEADING(((char *)l03_paths[train_engine_pvars->second_path_index]))) * -(train_engine_pvars->fDC + 4.0f); - l03_cuboids[tdb->i28].pos.z = 0.0f; - fast_vec_add(&l03_cuboids[tdb->i28].pos, - &l03_cuboids[tdb->i28].pos, - ((char *)l03_paths[train_engine_pvars->iAC]) + 0x10); - l03_cuboids[tdb->i28].pos.z += 2.7f; - clear_u64_value(&l03_cuboids[tdb->i28].rot); - l03_cuboids[tdb->i28].rot.z = PATH_HEADING(((char *)l03_paths[train_engine_pvars->iAC])); + l03_cuboids[tdb->cuboid_index].pos.z = 0.0f; + fast_vec_add(&l03_cuboids[tdb->cuboid_index].pos, + &l03_cuboids[tdb->cuboid_index].pos, + ((char *)l03_paths[train_engine_pvars->second_path_index]) + 0x10); + l03_cuboids[tdb->cuboid_index].pos.z += 2.7f; + clear_u64_value(&l03_cuboids[tdb->cuboid_index].rot); + l03_cuboids[tdb->cuboid_index].rot.z = + PATH_HEADING(((char *)l03_paths[train_engine_pvars->second_path_index])); tdb->i2C = scale_game_frames(10000); - *(OvlQuad *)start = *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->iAC]) + 0x10); + *(OvlQuad *)start = + *(OvlQuad *)(((char *)l03_paths[train_engine_pvars->second_path_index]) + 0x10); place_metropolis_train( - moby, start, PATH_HEADING(((char *)l03_paths[train_engine_pvars->iAC]))); - cdata->i74 = train_engine_pvars->iAC; - cdata->i60 = 1; - cdata->fF0 = 1.0f; + moby, start, PATH_HEADING(((char *)l03_paths[train_engine_pvars->second_path_index]))); + cdata->i74 = train_engine_pvars->second_path_index; + cdata->path_node_index = 1; + cdata->path_segment_fraction = 1.0f; train_engine_pvars->fC0 = 2.0f * train_engine_pvars->fC0; - cdata->fFC = train_engine_pvars->fC0; + cdata->path_step_distance = train_engine_pvars->fC0; gunship_update(coupling); MOBY(moby)->command = 5; request_music_track(0, 8); break; case TRAIN_FOLLOW_SECOND_PATH_AND_BRAKE: - td = *(Turret292e98 **)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->iD8] + 0x78); + td = *( + Turret292e98 * + *)((char *)&D_L03_0015FFD8_m292[train_engine_pvars->second_path_turret_moby_index] + + 0x78); update_metropolis_train_motion(moby); D_L03_0015FDFC = 1; ENGINE_SOUND(); - if (cdata->i60 >= train_engine_pvars->iD4) { + if (cdata->path_node_index >= train_engine_pvars->second_path_stop_node_index) { train_engine_pvars->fDC = 0.0f; braking_speed_floor = train_engine_pvars->fDC; train_engine_pvars->fC8 -= train_engine_pvars->fC0 / 1.9f * frame_time; @@ -637,7 +660,8 @@ void metropolis_train_locomotive_update(char *moby) { train_engine_pvars->fC8 = braking_speed_floor; } if (train_engine_pvars->fC8 == braking_speed_floor) { - ((char *)&D_L03_0015FFD8_m292[train_engine_pvars->iD8])[0xBC] = 0; + ((char *)&D_L03_0015FFD8_m292[train_engine_pvars + ->second_path_turret_moby_index])[0xBC] = 0; MOBY(moby)->command = 6; train_engine_pvars->fC0 *= 0.5f; RELEASE_VOICE(train_engine_pvars->i108); @@ -647,7 +671,8 @@ void metropolis_train_locomotive_update(char *moby) { AIM_AT_HERO(td); break; case TRAIN_WAIT_FOR_RESET_VOLUME: - if (is_point_inside_clip_volume(&hero.motion, train_engine_pvars->iB0)) { + if (is_point_inside_clip_volume(&hero.motion, + train_engine_pvars->reset_clip_volume_index)) { for (i6 = 0; i6 < 8; i6++) { linked_moby = D_L03_0015FFD8_292e98 + (train_engine_pvars->ids[i6] << 8); if (train_engine_pvars->ids[i6] != -1 && linked_moby != 0 && diff --git a/src/overlays/l03/mobys/mine_layer.c b/src/overlays/l03/mobys/mine_layer.c index e099e9f6ff..6e97f5e5c7 100644 --- a/src/overlays/l03/mobys/mine_layer.c +++ b/src/overlays/l03/mobys/mine_layer.c @@ -71,8 +71,8 @@ typedef struct { f32 unkF4; u8 padF8[0x14]; f32 unk10C; - f32 unk110; - f32 unk114; + f32 patrol_turn_damping_factor; + f32 patrol_turn_step_limit; u8 pad118[8]; TrooperPatrol patrol; /* 0x120 */ u8 pad138[0x18]; @@ -161,8 +161,8 @@ void mine_layer_update(struct Moby *mine_layer_moby) { case MINE_LAYER_INITIALIZE: FUN_L01_0026d930(mine_layer_vars->walk); mine_layer_vars->unk10C = frame_time_sq * 6.2831855f; - mine_layer_vars->unk114 = frame_time * 6.2831855f; - mine_layer_vars->unk110 = frame_time_sq * 18.849556f; + mine_layer_vars->patrol_turn_step_limit = frame_time * 6.2831855f; + mine_layer_vars->patrol_turn_damping_factor = frame_time_sq * 18.849556f; mine_layer_vars->unkF4 = frame_time * 5.0f; mine_layer_vars->unk58 = 8; mine_layer_vars->unk5A = 8; diff --git a/src/overlays/l03/mobys/moving_platform_small.c b/src/overlays/l03/mobys/moving_platform_small.c index db5139eeac..d645be68b1 100644 --- a/src/overlays/l03/mobys/moving_platform_small.c +++ b/src/overlays/l03/mobys/moving_platform_small.c @@ -38,7 +38,7 @@ typedef struct MovingPlatformSmallVars { s32 voice; s32 unk108; s32 easing_frames; - f32 unk110; + f32 path_endpoint_distance; f32 glide_speed; } MovingPlatformSmallVars; @@ -103,11 +103,11 @@ void moving_platform_small_update(char *moby) { MOBY(moby)->scale = MOBY(moby)->pclass->scale * platform_pvars->unkFC; platform_pvars->voice = -1; if (fast_dec_timer(&platform_pvars->timer_100)) { - platform_pvars->unk110 = fast_vec_dist( + platform_pvars->path_endpoint_distance = fast_vec_dist( *(char **)(pa + 0x10) + 0x10, *(char **)(pa + 0x10) + **(int **)(pa + 0x10) * 0x10); easing_frame_count = scale_game_frames(240); platform_pvars->glide_speed = - platform_pvars->unk110 * 4.0f / + platform_pvars->path_endpoint_distance * 4.0f / convert_integer_to_float(easing_frame_count * scale_game_frames(240)); platform_pvars->easing_frames = 0; MOBY(moby)->state = PLATFORM_EASED_ENDPOINT_TRAVEL; @@ -125,12 +125,13 @@ void moving_platform_small_update(char *moby) { if (scale_game_frames(240) / 2 < platform_pvars->easing_frames) { speed = -speed; easing_frame_count = scale_game_frames(240) - platform_pvars->easing_frames; - eased_endpoint_distance = platform_pvars->unk110; + eased_endpoint_distance = platform_pvars->path_endpoint_distance; } eased_endpoint_distance += speed * 0.5f * convert_integer_to_float(easing_frame_count * easing_frame_count); if (pb[4] < 0) { - eased_endpoint_distance = platform_pvars->unk110 - eased_endpoint_distance; + eased_endpoint_distance = + platform_pvars->path_endpoint_distance - eased_endpoint_distance; } fast_vec_sub(endpoint_delta_or_position, *(char **)(pb + 0x10) + **(int **)(pb + 0x10) * 0x10, diff --git a/src/overlays/l03/mobys/rail_lift.c b/src/overlays/l03/mobys/rail_lift.c index 03308d0553..543dd820c1 100644 --- a/src/overlays/l03/mobys/rail_lift.c +++ b/src/overlays/l03/mobys/rail_lift.c @@ -83,8 +83,8 @@ extern void update_entity_matrix(void *, void *, void *, void *) __asm__("FUN_L0 /* Pvars of a rail lift that carries the hero between the ends of two rail paths. */ struct RailLiftVars { u8 pad0[0x20]; - u8 coll[0x44]; /* 0x20: collision record moved with the lift */ - s32 unk64; /* 0x64: set to 1 when a ride starts */ + u8 coll[0x44]; /* 0x20: collision record moved with the lift */ + s32 target_path_point_index; /* 0x64: set to 1 when a ride starts */ u8 pad68[0x10]; s32 snd; /* 0x78: travel sound voice (FUN_L03_002d3918) */ s32 started; /* 0x7C: set once the first ride starts */ @@ -145,7 +145,7 @@ void rail_lift_update(struct Moby *lift_moby) { *(u128 *)&lift_moby->pos = *(u128 *)&(l03_paths[lift_vars->path[hero_end]])->points[0]; lift_moby->state = LIFT_FOLLOW_PATH; - lift_vars->unk64 = 1; + lift_vars->target_path_point_index = 1; lift_vars->started = 1; lift_vars->ready = 0; break; @@ -160,14 +160,14 @@ void rail_lift_update(struct Moby *lift_moby) { if ((((u32)pad_pressed_lui) & 0x10) && D_L03_0015F594 == 8) { request_hero_target_pose(&lift_moby->pos, lift_moby->rot.z, 0); lift_moby->command ^= 1; - lift_vars->unk64 = 1; + lift_vars->target_path_point_index = 1; lift_vars->ready = 0; lift_moby->state = LIFT_WAIT_FOR_HERO_ANIMATION; } } else if (hero_end != lift_end) { lift_moby->state = LIFT_FOLLOW_PATH; lift_moby->command ^= 1; - lift_vars->unk64 = 1; + lift_vars->target_path_point_index = 1; lift_vars->ready = 0; } break; diff --git a/src/overlays/l03/mobys/red_ship_1.c b/src/overlays/l03/mobys/red_ship_1.c index b2cb1933f4..e979fb3248 100644 --- a/src/overlays/l03/mobys/red_ship_1.c +++ b/src/overlays/l03/mobys/red_ship_1.c @@ -510,7 +510,7 @@ typedef struct RedShip1Vars { u8 pad_2D[0x33]; u8 unk60; u8 pad_61[0x2F]; - f32 unk90[4]; + f32 segment_start_tangent[4]; f32 unkA0; f32 unkA4; f32 unkA8; @@ -525,7 +525,7 @@ typedef struct RedShip1Vars { f32 unk108; f32 unk10C; u8 pad_110[0x4]; - f32 unk114; + f32 roll_spring_velocity; u8 pad_118[0x4]; f32 unk11C; u8 pad_120[0xC]; @@ -539,7 +539,7 @@ typedef struct RedShip1Vars { f32 unk140; f32 unk144; u8 pad_148[0x2]; - s16 unk14A; + s16 respawn_timer; u8 pad_14C[0x4]; s32 unk150; } RedShip1Vars; @@ -685,7 +685,7 @@ void red_ship_1_update(char *moby) { -fast_arc_tan(vector_length_xy(initial_path_tangent), spline_moby_pvars->unkA8); MOBY(moby)->rot.z = fast_arc_tan(spline_moby_pvars->unkA0 - zero[0], spline_moby_pvars->unkA4 - zero[1]); - spline_moby_pvars->unk114 = 0.0f; + spline_moby_pvars->roll_spring_velocity = 0.0f; spline_moby_pvars->unk11C = 0.0f; *(OvlQuad *)&MOBY(moby)->pos = *(OvlQuad *)&spline_moby_pvars->unkE0[0]; add_moby_rotation_based_offsets(moby, moby_position); @@ -702,7 +702,7 @@ void red_ship_1_update(char *moby) { if (spline_moby_pvars->timer_12C > 0) { MOBY(moby)->state = RED_SHIP_WAIT_FOR_MOVEMENT_TIMER; } else { - spline_moby_pvars->unk14A = 0; + spline_moby_pvars->respawn_timer = 0; MOBY(moby)->state = RED_SHIP_FOLLOW_PATH_SPLINE; } break; @@ -731,7 +731,8 @@ void red_ship_1_update(char *moby) { if (spline_moby_pvars->unk100 >= 1.0f) { spline_moby_pvars->unk100 -= 1.0f; advanced_path_node_index = advance_path_node_index(pm); - *(OvlQuad *)&spline_moby_pvars->unk90[0] = *(OvlQuad *)&spline_moby_pvars->unkA0; + *(OvlQuad *)&spline_moby_pvars->segment_start_tangent[0] = + *(OvlQuad *)&spline_moby_pvars->unkA0; compute_path_node_tangent(path_tangent_or_moby_position, (int *)pm, 1, @@ -752,7 +753,7 @@ void red_ship_1_update(char *moby) { spline_moby_pvars->unkD0, spline_moby_pvars->unkB0, spline_moby_pvars->unkC0, - spline_moby_pvars->unk90, + spline_moby_pvars->segment_start_tangent, path_tangent_or_moby_position); if (!flag) { update_spline_moby_orientation(moby); diff --git a/src/overlays/l03/mobys/robot_dog.c b/src/overlays/l03/mobys/robot_dog.c index 9eeee3c0b2..370b1277be 100644 --- a/src/overlays/l03/mobys/robot_dog.c +++ b/src/overlays/l03/mobys/robot_dog.c @@ -1,5 +1,6 @@ /* Level 03 moby class robot_dog. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/globals.h" #include "rnc/mobys/moby.h" #include "rnc/math/fast_math.h" @@ -78,41 +79,41 @@ typedef struct { char pCA[6]; void *pD0; char pD4[0x3C]; - char m110[0x10]; - char m120[0x60]; + char animation_state[0x10]; + char knockback_motion_state[0x60]; int i180; char p184[4]; - float f188; - float f18C; + float movement_drop_limit; + float movement_rise_limit; char p190[0x14]; - float f1A4; - float f1A8; - float f1AC; + float max_movement_step; + float movement_heading_error_limit; + float movement_arrival_distance; char p1B0[8]; - int i1B8; - float f1BC; - float f1C0; - float f1C4; + int movement_control_flags; + float path_turn_spring_strength; + float path_turn_damping_factor; + float path_turn_step_limit; char p1C8[0x38]; float home[4]; char p210[0x10]; float v220[4]; - float f230; - float f234; + float target_engagement_radius; + float movement_speed; char p238[4]; - int i23C; - int i240; - int i244; - int i248; + int chase_timer; + int extended_engagement_radius_timer; + int melee_cooldown_timer; + int linked_partner_index; char p24C[0x14]; int i260; float f264; char p268[4]; int i26C; - int i270; - float f274; - int i278; - int i27C; + int activation_path_index; + float path_activation_distance; + int path_target_node_index; + int activation_clip_volume_id; char m280[0x10]; } Data2c5bb8; @@ -121,9 +122,10 @@ char D_L03_001618D0 = 3; extern float D_L03_0015F580_macro[] __asm__("D_L03_0015F580") MACRO_ADDR; extern float FUN_L04_001f1978(float); extern int rand(void) __asm__("FUN_001160d8"); -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); -extern int step_mover_2e3f20(char *m, char *p, char *pos, char *v) __asm__("FUN_L00_00259028"); -extern int FUN_L00_002dc9f0(void *, void *); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); +extern int step_mover_2e3f20(char *m, char *p, char *pos, char *v) __asm__("FUN_L00_00259028"); +extern int FUN_L00_002dc9f0(void *, void *); extern int select_moby_target_with_hero_fallback(char *, char *, float) __asm__("FUN_L03_0024e830"); extern void FUN_L00_00257470(void *, int, int); extern void FUN_L00_00258278(char *moby, float *vel, float target, float k, float d, float max); @@ -168,10 +170,11 @@ void robot_dog_update(char *moby) { float initialization_multiplier_or_desired_heading; robot_dog_state = ((Data2c5bb8 *)MOBY(moby)->pvars); - select_moby_target_with_hero_fallback(moby, (char *)&selected_target, robot_dog_state->f230); + select_moby_target_with_hero_fallback( + moby, (char *)&selected_target, robot_dog_state->target_engagement_radius); FUN_L00_00263ac8_c5bb8(moby, 0, robot_dog_state->m280, 2.1f); update_robot_dog_hit_reaction((struct Moby *)moby); - fast_dec_timer(&robot_dog_state->i244); + fast_dec_timer(&robot_dog_state->melee_cooldown_timer); switch (((unsigned char *)moby)[0x20]) { case ROBOT_DOG_INITIALIZE: MOBY(moby)->flags |= 0x1000; @@ -180,31 +183,32 @@ void robot_dog_update(char *moby) { MOBY(moby)->shadow_range = 0x18; robot_dog_state->f20 = 1.0f; robot_dog_state->b29 = 0; - robot_dog_state->i240 = 0; + robot_dog_state->extended_engagement_radius_timer = 0; robot_dog_state->s24 = 1; FUN_L01_0026d930((char *)&robot_dog_state->i180, robot_dog_state->home); - robot_dog_state->f1BC = frame_time_sq * 6.2831855f; - robot_dog_state->f1C0 = frame_time_sq * 12.566371f; - robot_dog_state->f1C4 = frame_time * 3.1415927f; - robot_dog_state->f188 = robot_dog_state->f18C = 2.0f; + robot_dog_state->path_turn_spring_strength = frame_time_sq * 6.2831855f; + robot_dog_state->path_turn_damping_factor = frame_time_sq * 12.566371f; + robot_dog_state->path_turn_step_limit = frame_time * 3.1415927f; + robot_dog_state->movement_drop_limit = robot_dog_state->movement_rise_limit = 2.0f; robot_dog_state->i180 = 0x38D; - robot_dog_state->f1A4 = robot_dog_state->f234 * frame_time; - robot_dog_state->i1B8 |= 0x20; - robot_dog_state->f1A8 = 2.0954423f; + robot_dog_state->max_movement_step = robot_dog_state->movement_speed * frame_time; + robot_dog_state->movement_control_flags |= 0x20; + robot_dog_state->movement_heading_error_limit = 2.0954423f; initialization_multiplier_or_desired_heading = FUN_L04_001f1978(6.0f); robot_dog_state->f264 = 1.0f; - robot_dog_state->i244 = 0; + robot_dog_state->melee_cooldown_timer = 0; robot_dog_state->i26C = 0; robot_dog_state->i260 = 0; - robot_dog_state->f1AC = - robot_dog_state->f1A4 * initialization_multiplier_or_desired_heading; + robot_dog_state->movement_arrival_distance = + robot_dog_state->max_movement_step * initialization_multiplier_or_desired_heading; robot_dog_state->b58 = 8; robot_dog_state->b5A = 7; if (rand() & 1) { MOBY(moby)->flags |= 0x8000; } robot_dog_state->pD0 = &D_L03_001618D0; - if (robot_dog_state->i248 != -1 && robot_dog_state->i270 == -1) { + if (robot_dog_state->linked_partner_index != -1 && + robot_dog_state->activation_path_index == -1) { if (((unsigned char *)moby)[0x53] != 0) { blend_moby_animation(moby, 0, 0, 0); } @@ -214,25 +218,28 @@ void robot_dog_update(char *moby) { } break; case ROBOT_DOG_WAIT_FOR_ACTIVATION: - if (robot_dog_state->i270 != -1) { - activation_path = ((char *)l03_paths[robot_dog_state->i270]); + if (robot_dog_state->activation_path_index != -1) { + activation_path = ((char *)l03_paths[robot_dog_state->activation_path_index]); *(OvlQuad *)&MOBY(moby)->pos = *(OvlQuad *)(activation_path + 0x10); MOBY(moby)->rot.z = fast_arc_tan( *(float *)(activation_path + 0x20) - *(float *)(activation_path + 0x10), *(float *)(activation_path + 0x24) - *(float *)(activation_path + 0x14)); if ((random_integer_below(14) == 0 && is_point_inside_clip_volume_cf(((unsigned char *)moby)[0x21])) || - is_point_inside_clip_volume(&selected_target, robot_dog_state->i27C) || - (fast_vec_dist(&selected_target, moby + 0x10) < robot_dog_state->f274 && + is_point_inside_clip_volume(&selected_target, + robot_dog_state->activation_clip_volume_id) || + (fast_vec_dist(&selected_target, moby + 0x10) < + robot_dog_state->path_activation_distance && absolute_float(selected_target.pos[2] - MOBY(moby)->pos.z) < 4.0f)) { - robot_dog_state->i278 = 0; + robot_dog_state->path_target_node_index = 0; MOBY(moby)->state = ROBOT_DOG_FOLLOW_PATH; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } } } else if (random_integer_below(14) == 0 && - fast_vec_dist(&selected_target, robot_dog_state->home) < robot_dog_state->f230 && + fast_vec_dist(&selected_target, robot_dog_state->home) < + robot_dog_state->target_engagement_radius && absolute_float(selected_target.pos[2] - MOBY(moby)->pos.z) < 3.0f) { MOBY(moby)->state = ROBOT_DOG_TURN_TO_TARGET; if (((unsigned char *)moby)[0x53] != 2) { @@ -243,13 +250,14 @@ void robot_dog_update(char *moby) { break; case ROBOT_DOG_WAIT_FOR_PARTNER_RELEASE: if (random_integer_below(14) == 0) { - partner_moby_index = robot_dog_state->i248; + partner_moby_index = robot_dog_state->linked_partner_index; if (partner_moby_index == -1 || (partner_moby = D_L03_0015FFD8_c5bb8 + (partner_moby_index << 8)) == 0 || ((unsigned char *)partner_moby)[0x20] == 0xFE || ((unsigned char *)partner_moby)[0x20] == 0xFD || can_release_linked_robot_dog((struct Moby *)partner_moby)) { - robot_dog_state->i23C = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robot_dog_state->chase_timer = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); MOBY(moby)->state = ROBOT_DOG_CHASE_TARGET; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(10)); @@ -267,7 +275,8 @@ void robot_dog_update(char *moby) { 0.3f, 0.1f); if (((unsigned char *)moby)[0x70] & 2) { - robot_dog_state->i23C = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robot_dog_state->chase_timer = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); MOBY(moby)->state = ROBOT_DOG_CHASE_TARGET; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(10)); @@ -286,44 +295,48 @@ void robot_dog_update(char *moby) { forward_vector_or_path_point[0] = 2.0f * fast_cos(MOBY(moby)->rot.z); forward_vector_or_path_point[1] = 2.0f * fast_sin(MOBY(moby)->rot.z); forward_vector_or_path_point[2] = 0.0f; - FUN_L00_00258b50(moby, &robot_dog_state->i180, forward_vector_or_path_point, push, 1.0f); - if (fast_dec_timer(&robot_dog_state->i23C)) { - robot_dog_state->i23C = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + move_moby_with_ground_and_collision_checks( + moby, &robot_dog_state->i180, forward_vector_or_path_point, push, 1.0f); + if (fast_dec_timer(&robot_dog_state->chase_timer)) { + robot_dog_state->chase_timer = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); } target_distance = vector_distance_xy(moby + 0x10, &selected_target); - if (target_distance < robot_dog_state->f234 * frame_time * 0.5f * FUN_L04_001f1978(40.0f) + - robot_dog_state->f234 * frame_time * FUN_L04_001f1978(10.0f) + - 1.5f) { + if (target_distance < + robot_dog_state->movement_speed * frame_time * 0.5f * FUN_L04_001f1978(40.0f) + + robot_dog_state->movement_speed * frame_time * FUN_L04_001f1978(10.0f) + 1.5f) { MOBY(moby)->state = ROBOT_DOG_MELEE_ATTACK; if (((unsigned char *)moby)[0x53] != 5) { blend_moby_animation(moby, 5, 0, truncate_float_to_s32(FUN_L04_001f1978(10.0f))); } - } else if (robot_dog_state->f230 < fast_vec_dist(&selected_target, robot_dog_state->home) || + } else if (robot_dog_state->target_engagement_radius < + fast_vec_dist(&selected_target, robot_dog_state->home) || absolute_float(selected_target.pos[2] - MOBY(moby)->pos.z) > 3.0f) { MOBY(moby)->state = ROBOT_DOG_RETURN_HOME; } break; case ROBOT_DOG_FOLLOW_PATH: - path = (int *)l03_paths[robot_dog_state->i270]; + path = (int *)l03_paths[robot_dog_state->activation_path_index]; FUN_L00_0025df68( path, moby + 0x10, forward_vector_or_path_point, &seg, &frac, 0, 999.0f, 5.0f, 0.0f); - if (robot_dog_state->i278 < seg) { - robot_dog_state->i278 = seg; + if (robot_dog_state->path_target_node_index < seg) { + robot_dog_state->path_target_node_index = seg; } if (step_mover_2e3f20(moby, (char *)&robot_dog_state->i180, - (char *)path + (robot_dog_state->i278 * 0x10 + 0x10), + (char *)path + + (robot_dog_state->path_target_node_index * 0x10 + 0x10), (char *)robot_dog_state->v40) & 0x14) { - if (robot_dog_state->i278 < *path - 1) { - robot_dog_state->i278++; + if (robot_dog_state->path_target_node_index < *path - 1) { + robot_dog_state->path_target_node_index++; } else { - robot_dog_state->i270 = -1; + robot_dog_state->activation_path_index = -1; MOBY(moby)->state = ROBOT_DOG_WAIT_FOR_ACTIVATION; if (((unsigned char *)moby)[0x53] != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } - if (robot_dog_state->i248 != -1) { + if (robot_dog_state->linked_partner_index != -1) { if (((unsigned char *)moby)[0x53] != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } @@ -332,14 +345,15 @@ void robot_dog_update(char *moby) { } } if (random_integer_below(14) == 0) { - partner_moby_index = robot_dog_state->i248; + partner_moby_index = robot_dog_state->linked_partner_index; if (partner_moby_index == -1 || (partner_moby = D_L03_0015FFD8_c5bb8 + (partner_moby_index << 8)) == 0 || ((unsigned char *)partner_moby)[0x20] == 0xFE || ((unsigned char *)partner_moby)[0x20] == 0xFD || can_release_linked_robot_dog((struct Moby *)partner_moby)) { - robot_dog_state->i270 = -1; - robot_dog_state->i23C = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robot_dog_state->activation_path_index = -1; + robot_dog_state->chase_timer = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); MOBY(moby)->state = ROBOT_DOG_CHASE_TARGET; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(10)); @@ -359,12 +373,12 @@ void robot_dog_update(char *moby) { forward_vector_or_path_point[0] = 2.0f * fast_cos(MOBY(moby)->rot.z); forward_vector_or_path_point[1] = 2.0f * fast_sin(MOBY(moby)->rot.z); forward_vector_or_path_point[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &robot_dog_state->i180, forward_vector_or_path_point, robot_dog_state->v40, 1.0f); if (((unsigned char *)moby)[0x52] == 5) { - approach_value(&robot_dog_state->f1A4, + approach_value(&robot_dog_state->max_movement_step, 0.0f, - robot_dog_state->f234 * frame_time / FUN_L04_001f1978(40.0f)); + robot_dog_state->movement_speed * frame_time / FUN_L04_001f1978(40.0f)); } if (absolute_float(compute_interpolated_record_value(moby) - 25.0f) <= 0.25f && absolute_float(selected_target.pos[2] - MOBY(moby)->pos.z) < 1.0f && @@ -380,12 +394,12 @@ void robot_dog_update(char *moby) { at[2] += 0.75f; spawn_nearby_effect(selected_target.obj, moby, 1, at, push, 1.0f); } else if (((unsigned char *)moby)[0x70] & 2) { - robot_dog_state->f1A4 = robot_dog_state->f234 * frame_time; + robot_dog_state->max_movement_step = robot_dog_state->movement_speed * frame_time; MOBY(moby)->state = ROBOT_DOG_RETURN_HOME; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(3)); } - robot_dog_state->i244 = scale_game_frames(120); + robot_dog_state->melee_cooldown_timer = scale_game_frames(120); } break; case ROBOT_DOG_RETURN_HOME: @@ -401,17 +415,18 @@ void robot_dog_update(char *moby) { forward_vector_or_path_point[0] = 2.0f * fast_cos(MOBY(moby)->rot.z); forward_vector_or_path_point[1] = 2.0f * fast_sin(MOBY(moby)->rot.z); forward_vector_or_path_point[2] = 0.0f; - FUN_L00_00258b50(moby, &robot_dog_state->i180, forward_vector_or_path_point, push, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, &robot_dog_state->i180, forward_vector_or_path_point, push, 1.0f); if (vector_distance_xy(moby + 0x10, robot_dog_state->home) < 1.0f) { MOBY(moby)->state = ROBOT_DOG_WAIT_FOR_ACTIVATION; if (((unsigned char *)moby)[0x53] != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(3)); } - } else if (robot_dog_state->i244 == 0) { + } else if (robot_dog_state->melee_cooldown_timer == 0) { target_distance = vector_distance_xy(moby + 0x10, &selected_target); if (target_distance < - robot_dog_state->f234 * frame_time * 0.5f * FUN_L04_001f1978(40.0f) + - robot_dog_state->f234 * frame_time * FUN_L04_001f1978(10.0f) + 1.5f) { + robot_dog_state->movement_speed * frame_time * 0.5f * FUN_L04_001f1978(40.0f) + + robot_dog_state->movement_speed * frame_time * FUN_L04_001f1978(10.0f) + 1.5f) { MOBY(moby)->state = ROBOT_DOG_MELEE_ATTACK; if (((unsigned char *)moby)[0x53] != 5) { blend_moby_animation( @@ -421,7 +436,7 @@ void robot_dog_update(char *moby) { } break; case ROBOT_DOG_FALL_RECOVERY: - if (step_moby_motion(moby, robot_dog_state->m120) & 0x60) { + if (step_moby_motion(moby, robot_dog_state->knockback_motion_state) & 0x60) { MOBY(moby)->state = ROBOT_DOG_CHASE_TARGET; if (((unsigned char *)moby)[0x53] != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(10)); @@ -430,14 +445,14 @@ void robot_dog_update(char *moby) { } goto low; case ROBOT_DOG_WAIT_TO_REINITIALIZE: - if (FUN_L00_002dc9f0(moby, robot_dog_state->m120)) { + if (FUN_L00_002dc9f0(moby, robot_dog_state->knockback_motion_state)) { MOBY(moby)->state = ROBOT_DOG_INITIALIZE; robot_dog_state->sC8 = 0; } break; case ROBOT_DOG_DEATH_FALL: MOBY(moby)->flags &= 0xEFFF; - if (step_moby_motion(moby, robot_dog_state->m120) & 0x60) { + if (step_moby_motion(moby, robot_dog_state->knockback_motion_state) & 0x60) { clear_u64_value(forward_vector_or_path_point); cart_burst(moby, moby + 0x10, -1, 0.5f, 13.0f); spawn_debris_c5bb8(moby, @@ -476,7 +491,7 @@ void robot_dog_update(char *moby) { if (((unsigned char *)moby)[0x31] != 0 && fast_vec_dist(moby + 0x10, D_L03_00166EC0) < 32.0f) { FUN_L00_0025a120(moby); } - trooper_anim_finish(moby, robot_dog_state->m110); + trooper_anim_finish(moby, robot_dog_state->animation_state); ((unsigned char *)moby)[0xBC] = 0; } /* Applies damage reaction, knockback parameters and animation state. */ @@ -554,7 +569,7 @@ int can_release_linked_robot_dog(struct Moby *moby) { state = moby->state; if (state == MOBY_STATE_PENDING_REMOVAL) return 0; - if (state == 0xFD) + if (state == MOBY_STATE_ALTERNATE_REMOVAL_MARKER) return 0; if (moby->oclass != 0x23E) return 0; diff --git a/src/overlays/l04/mobys/big_axebot.c b/src/overlays/l04/mobys/big_axebot.c index 70d201589b..effdf52e8e 100644 --- a/src/overlays/l04/mobys/big_axebot.c +++ b/src/overlays/l04/mobys/big_axebot.c @@ -27,7 +27,7 @@ void blend_big_axebot_and_axe_animation(char *moby, typedef struct BigAxebotVars { u8 pad_0[0x424]; - char *unk424; + char *axe_moby; } BigAxebotVars; void blend_big_axebot_and_axe_animation(char *moby, @@ -38,7 +38,7 @@ void blend_big_axebot_and_axe_animation(char *moby, BigAxebotVars *axebot_pvars = (BigAxebotVars *)MOBY(moby)->pvars; void *linked_axe_moby; blend_moby_animation(moby, new_seq, frame_index, blend_frames); - linked_axe_moby = (void *)axebot_pvars->unk424; + linked_axe_moby = (void *)axebot_pvars->axe_moby; if (linked_axe_moby != 0) { blend_moby_animation(linked_axe_moby, new_seq, frame_index, blend_frames); } @@ -52,8 +52,8 @@ void set_big_axebot_and_axe_animation_speed(struct Moby *moby, void set_big_axebot_and_axe_animation_speed(struct Moby *moby, float animation_speed) { BigAxebotVars *big_axebot_pvars = (BigAxebotVars *)moby->pvars; moby->anim_speed = animation_speed; - if (big_axebot_pvars->unk424 != 0) { - *(float *)(big_axebot_pvars->unk424 + 0x58) = animation_speed; + if (big_axebot_pvars->axe_moby != 0) { + *(float *)(big_axebot_pvars->axe_moby + 0x58) = animation_speed; } } /* Spawns an effect on the moby at its marker vector. */ @@ -131,56 +131,56 @@ typedef struct D_B7B0 { char pad2F; float f30; char pad34[4]; - int f38; + int extended_detection_request; char pad3C[0x1C]; unsigned char f58; char pad59; unsigned char f5A; char pad5B[0x55]; - char fB0[7]; + char hit_transition_state[7]; unsigned char fB7; char padB8[8]; float fC0[4]; - float fD0; - float fD4; - float fD8; - float fDC; + float knockback_gravity_step; + float knockback_horizontal_deceleration; + float knockback_initial_horizontal_displacement; + float knockback_initial_vertical_displacement; int fE0; - int fE4; - float fE8; + int knockback_motion_flags; + float knockback_collision_height_offset; char padEC[0x11]; unsigned char fFD; char padFE[0x12]; - float f110; - float f114; + float knockback_ascent_target_frame; + float knockback_descent_target_frame; char pad118[8]; - Manip_B7B0 m120; - Manip_B7B0 m160; - char f1A0[0x250]; + Manip_B7B0 recoil_manipulator; + Manip_B7B0 aim_manipulator; + char leg_rig_state[0x250]; V4_B7B0 home; - unsigned char f400; - unsigned char f401; - short f402; - short f404; - unsigned char f406; - unsigned char f407; - float f408; + unsigned char start_waiting_for_target; + unsigned char last_non_hit_recovery_state; + short idle_action_delay_timer; + short hit_response_cooldown_timer; + unsigned char extended_detection_timer; + unsigned char alert_voice_cooldown_timer; + float recoil_pitch_angle; char pad40C[4]; - float f410; - float f414; - float f418; - int f41C; - float f420; - struct M_B7B0 *f424; - float f428; - float f42C; - int f430; - int f434; - short f438; - short f43A; - float f43C; + float yaw_turn_velocity; + float movement_yaw; + float hit_recovery_displacement; + int movement_boundary_path_index; + float fall_displacement; + struct M_B7B0 *attached_axe_moby; + float tracked_aim_yaw; + float recoil_displacement; + int path_trigger_volume_index; + int approach_path_index; + short path_waypoint_index; + short path_follow_started; + float detection_range; char pad440[8]; - int f448; + int recoil_pose_cooldown_timer; } D_B7B0; typedef struct M_B7B0 { @@ -188,14 +188,14 @@ typedef struct M_B7B0 { V4_B7B0 pos; unsigned char state; char pad21[0x10]; - unsigned char f31; + unsigned char proximity_ground_probe_enabled; char pad32[2]; unsigned short f34; char pad36[0xA]; V4_B7B0 rot; char pad50[2]; - unsigned char f52; - unsigned char f53; + unsigned char animation_source_sequence; + unsigned char animation_target_sequence; char pad54[4]; float f58; char pad5C[0x14]; @@ -209,7 +209,7 @@ typedef struct M_B7B0 { char padA5; short cls; char padA8[0x14]; - unsigned char fBC; + unsigned char behavior_flags; char padBD[3]; V4_B7B0 fC0; } M_B7B0; @@ -226,7 +226,7 @@ typedef struct { V4_B7B0 pos; M_B7B0 *att; char pad24[8]; - float f2C; + float damage_amount; } Hit_B7B0; typedef struct { @@ -325,17 +325,18 @@ void big_axebot_update(M_B7B0 *moby) { float target_yaw; float hd; - if (data->f38 != 0 || data->f406 != 0) { + if (data->extended_detection_request != 0 || data->extended_detection_timer != 0) { flag = 1; } - FUN_L00_00263ac8(2.5f, (int)moby, 0, (unsigned char *)&data->m120); - if (moby->f31 != 0) { + FUN_L00_00263ac8(2.5f, (int)moby, 0, (unsigned char *)&data->recoil_manipulator); + if (moby->proximity_ground_probe_enabled != 0) { if (fast_vec_dist(moby->pos, D_L04_00166F40) < 27.0f) { FUN_L00_0025a120(moby); moby->f7F = 0x15; } } - select_moby_combat_target((char *)moby, (float *)&tg, flag ? data->f43C * 2.0f : data->f43C); + select_moby_combat_target( + (char *)moby, (float *)&tg, flag ? data->detection_range * 2.0f : data->detection_range); target_moby = tg.f40; rot = moby->rot[2]; target_distance = vector_distance_xy(moby->pos, (float *)&tg); @@ -343,25 +344,25 @@ void big_axebot_update(M_B7B0 *moby) { hd = compute_interpolated_record_value(moby); if (D_L04_0015F5C4 == 2) { moby->f34 |= 0x41; - if (data->f424 != 0) { - data->f424->f34 |= 0x41; + if (data->attached_axe_moby != 0) { + data->attached_axe_moby->f34 |= 0x41; } } else if (moby->f34 & 1) { moby->f34 &= ~0x41; - if (data->f424 != 0) { - data->f424->f34 &= ~0x41; + if (data->attached_axe_moby != 0) { + data->attached_axe_moby->f34 &= ~0x41; } } qcopy(initial_position_snapshot, moby->pos); qcopy(dest, moby->pos); qcopy(tpos, tg.pos); - if (moby->f31 != 0) { + if (moby->proximity_ground_probe_enabled != 0) { if (fast_vec_dist(moby->pos, D_L04_00166F40) < 32.0f) { FUN_L00_0025a120(moby); moby->f7F = 0x1A; } } - fast_dec_timer_s16(&data->f404); + fast_dec_timer_s16(&data->hit_response_cooldown_timer); if (moby->state != BIG_AXEBOT_STATE_DYING && moby->state != BIG_AXEBOT_STATE_INITIALIZE) { int unused_hit_reaction_output; float dmg; @@ -388,22 +389,22 @@ void big_axebot_update(M_B7B0 *moby) { knockback_yaw = fast_arc_tan(moby->pos[0] - h->motion.pos.f[0], moby->pos[1] - h->motion.pos.f[1]); } - data->fD4 = frame_time_sq * 12.0f; - data->fD0 = frame_time_sq * 35.0f; - data->fD8 = frame_time * 7.0f; - data->fE4 = 9; + data->knockback_horizontal_deceleration = frame_time_sq * 12.0f; + data->knockback_gravity_step = frame_time_sq * 35.0f; + data->knockback_initial_horizontal_displacement = frame_time * 7.0f; + data->knockback_motion_flags = 9; data->fFD = 0; data->hp -= dmg; if (data->hp <= 0.0f) { hit_reaction_result = 1; } - if (data->f404 != 0 && hit_reaction_result != 1) { - if (data->f448 <= 0) { - data->f408 = -0.5235988f; + if (data->hit_response_cooldown_timer != 0 && hit_reaction_result != 1) { + if (data->recoil_pose_cooldown_timer <= 0) { + data->recoil_pitch_angle = -0.5235988f; } - data->f448 = scale_game_frames(0x1E); + data->recoil_pose_cooldown_timer = scale_game_frames(0x1E); data->fB7 = 0x78; - trooper_anim_update(moby, (short *)data->fB0); + trooper_anim_update(moby, (short *)data->hit_transition_state); } else { switch (hit_reaction_result) { case BIG_AXEBOT_HIT_REACTION_NONE: @@ -412,70 +413,72 @@ void big_axebot_update(M_B7B0 *moby) { case BIG_AXEBOT_HIT_REACTION_CONDITIONAL_RECOIL_RECOVERY: case BIG_AXEBOT_HIT_REACTION_CONDITIONAL_RECOVERY: allocate_voice_for_target_entry(0xB, 0, (char *)moby); - if (data->f448 <= 0) { - data->f408 = -0.5235988f; + if (data->recoil_pose_cooldown_timer <= 0) { + data->recoil_pitch_angle = -0.5235988f; } - data->f448 = scale_game_frames(0x1E); - if ((hit->att->cls == 0 || hit->f2C > 1.0f) && - (moby->f52 != 4 || hd < 17.0f || hd > 20.0f)) { - moby->fBC |= 5; + data->recoil_pose_cooldown_timer = scale_game_frames(0x1E); + if ((hit->att->cls == 0 || hit->damage_amount > 1.0f) && + (moby->animation_source_sequence != 4 || hd < 17.0f || hd > 20.0f)) { + moby->behavior_flags |= 5; blend_big_axebot_and_axe_animation( (char *)moby, (void *)5, 0, (void *)scale_game_frames(6)); set_big_axebot_and_axe_animation_speed(moby, 2.0f); moby->state = BIG_AXEBOT_STATE_HIT_RECOVERY; } - data->f42C = 3.4f / scale_time(7.0f) * 0.5f; + data->recoil_displacement = 3.4f / scale_time(7.0f) * 0.5f; data->fB7 = 0x78; - trooper_anim_update(moby, (short *)data->fB0); - data->f404 = scale_game_frames(0x46); - data->f406 = scale_game_frames(0xF0); + trooper_anim_update(moby, (short *)data->hit_transition_state); + data->hit_response_cooldown_timer = scale_game_frames(0x46); + data->extended_detection_timer = scale_game_frames(0xF0); break; case BIG_AXEBOT_HIT_REACTION_KNOCKBACK: allocate_voice_for_target_entry(0xB, 0, (char *)moby); - if (data->f448 <= 0) { - data->f408 = -0.5235988f; + if (data->recoil_pose_cooldown_timer <= 0) { + data->recoil_pitch_angle = -0.5235988f; } - data->f448 = scale_game_frames(0x1E); - moby->fBC |= 5; + data->recoil_pose_cooldown_timer = scale_game_frames(0x1E); + moby->behavior_flags |= 5; blend_big_axebot_and_axe_animation( (char *)moby, (void *)5, 0, (void *)scale_game_frames(6)); set_big_axebot_and_axe_animation_speed(moby, 2.0f); moby->state = BIG_AXEBOT_STATE_HIT_RECOVERY; trooper_start_knockback(knockback_yaw, moby, data->fC0, 5, 1, 0); - data->f110 = 5.0f; - data->f114 = 10.0f; - data->f42C = 3.4f / scale_time(7.0f); + data->knockback_ascent_target_frame = 5.0f; + data->knockback_descent_target_frame = 10.0f; + data->recoil_displacement = 3.4f / scale_time(7.0f); data->fB7 = 0x78; - trooper_anim_update(moby, (short *)data->fB0); - data->f404 = scale_game_frames(0x46); - data->f406 = scale_game_frames(0xF0); + trooper_anim_update(moby, (short *)data->hit_transition_state); + data->hit_response_cooldown_timer = scale_game_frames(0x46); + data->extended_detection_timer = scale_game_frames(0xF0); break; case BIG_AXEBOT_HIT_REACTION_RETURN_TO_IDLE: case BIG_AXEBOT_HIT_REACTION_IDLE_RECOVERY: allocate_voice_for_target_entry(0xB, 0, (char *)moby); blend_big_axebot_and_axe_animation( (char *)moby, (void *)6, (void *)2, (void *)scale_game_frames(4)); - data->f402 = scale_game_frames(0x28); + data->idle_action_delay_timer = scale_game_frames(0x28); moby->state = BIG_AXEBOT_STATE_IDLE; - data->f42C = 3.4f / scale_time(7.0f); + data->recoil_displacement = 3.4f / scale_time(7.0f); data->fB7 = 0x78; - trooper_anim_update(moby, (short *)data->fB0); - data->f404 = scale_game_frames(0x46); - data->f406 = scale_game_frames(0xF0); + trooper_anim_update(moby, (short *)data->hit_transition_state); + data->hit_response_cooldown_timer = scale_game_frames(0x46); + data->extended_detection_timer = scale_game_frames(0xF0); break; case BIG_AXEBOT_HIT_REACTION_FATAL: - data->fE8 = 1.0f; + data->knockback_collision_height_offset = 1.0f; data->fE0 = 0x400; trooper_set_knockback(data->fC0, 5.7f, 4.0f); *(OvlQuad *)vector_quaternion_scratch = *(OvlQuad *)hit->pos; - trooper_knockback_arc( - vector_quaternion_scratch, &knockback_yaw, &data->fD8, &data->fDC); + trooper_knockback_arc(vector_quaternion_scratch, + &knockback_yaw, + &data->knockback_initial_horizontal_displacement, + &data->knockback_initial_vertical_displacement); trooper_start_knockback(knockback_yaw, moby, data->fC0, 7, 1, 0); - data->f110 = 12.0f; - data->f114 = 25.0f; + data->knockback_ascent_target_frame = 12.0f; + data->knockback_descent_target_frame = 25.0f; moby->state = BIG_AXEBOT_STATE_DYING; data->fB7 = 0x78; - trooper_anim_update(moby, (short *)data->fB0); + trooper_anim_update(moby, (short *)data->hit_transition_state); FUN_L00_00257470(moby, 0, -1); break; case BIG_AXEBOT_HIT_REACTION_SKIP_ADDITIONAL_RESPONSE: @@ -488,19 +491,19 @@ void big_axebot_update(M_B7B0 *moby) { } } moby->fA4 = 0xFF; - if (data->f38 != 0) { - data->f406 = scale_game_frames(0xF0); + if (data->extended_detection_request != 0) { + data->extended_detection_timer = scale_game_frames(0xF0); } - data->f38 = 0; - FUN_L00_001fefc8(&data->f406); + data->extended_detection_request = 0; + FUN_L00_001fefc8(&data->extended_detection_timer); if (moby->state != BIG_AXEBOT_STATE_INITIALIZE && data->f2E != 1) { - if (data->f424 != 0) { - mark_moby_for_removal(data->f424); + if (data->attached_axe_moby != 0) { + mark_moby_for_removal(data->attached_axe_moby); } mark_moby_for_removal(moby); return; } - fast_dec_timer_s16(&data->f402); + fast_dec_timer_s16(&data->idle_action_delay_timer); switch (moby->state) { case BIG_AXEBOT_STATE_INITIALIZE: data->hp = 3.0f; @@ -509,19 +512,19 @@ void big_axebot_update(M_B7B0 *moby) { data->f2E = 1; data->f29 = 0; data->f30 = 1.5f; - moby->fBC = 0; - data->f420 = 0.0f; - data->f424 = 0; - data->f407 = 0; + moby->behavior_flags = 0; + data->fall_displacement = 0.0f; + data->attached_axe_moby = 0; + data->alert_voice_cooldown_timer = 0; qcopy(data->home, moby->pos); - if (data->m120.on == 0) { - attach_manipulator((char *)moby, 0, &data->m120); + if (data->recoil_manipulator.on == 0) { + attach_manipulator((char *)moby, 0, &data->recoil_manipulator); } - attach_manipulator((char *)moby, 0xC, &data->m160); - data->f428 = moby->rot[2]; + attach_manipulator((char *)moby, 0xC, &data->aim_manipulator); + data->tracked_aim_yaw = moby->rot[2]; data->f58 = 0xA; data->f5A = 0xC; - if (data->f400 != 0) { + if (data->start_waiting_for_target != 0) { moby->state = BIG_AXEBOT_STATE_WAIT_FOR_TARGET; blend_big_axebot_and_axe_animation( (char *)moby, (void *)0xA, 0, (void *)scale_game_frames(0xC)); @@ -530,11 +533,12 @@ void big_axebot_update(M_B7B0 *moby) { } break; case BIG_AXEBOT_STATE_IDLE: { - if (moby->f53 == 6 && data->f402 == scale_game_frames(0x25)) { + if (moby->animation_target_sequence == 6 && + data->idle_action_delay_timer == scale_game_frames(0x25)) { allocate_voice_for_target_entry(2, 0, (char *)moby); } - if ((moby->f70 & 2) && - (flag ? data->f43C * 2.0f < target_distance : data->f43C < target_distance)) { + if ((moby->f70 & 2) && (flag ? data->detection_range * 2.0f < target_distance + : data->detection_range < target_distance)) { int arr[6]; random_integer_below_cf(arr, 0, 0x18); @@ -543,35 +547,40 @@ void big_axebot_update(M_B7B0 *moby) { (void *)arr[random_integer_below(6)], 0, (void *)scale_game_frames(0x18)); - } else if (moby->f53 != 0xD && (moby->f53 != 6 || (moby->f70 & 2))) { - if (flag ? target_distance < data->f43C * 2.0f : target_distance < data->f43C) { + } else if (moby->animation_target_sequence != 0xD && + (moby->animation_target_sequence != 6 || (moby->f70 & 2))) { + if (flag ? target_distance < data->detection_range * 2.0f + : target_distance < data->detection_range) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)0xD, 0, (void *)scale_game_frames(0x18)); } } - if (data->f430 != -1 && data->f434 != -1 && data->f43A == 0 && - (flag || is_point_inside_clip_volume(&hero.motion.pos, data->f430) != 0)) { + if (data->path_trigger_volume_index != -1 && data->approach_path_index != -1 && + data->path_follow_started == 0 && + (flag || + is_point_inside_clip_volume(&hero.motion.pos, data->path_trigger_volume_index) != 0)) { moby->state = BIG_AXEBOT_STATE_FOLLOW_PATH; - moby->fBC |= 1; - data->f43A = 1; + moby->behavior_flags |= 1; + data->path_follow_started = 1; } else { - if (moby->f52 == 0xD && FUN_L00_001fefc8(&data->f407) != 0) { + if (moby->animation_source_sequence == 0xD && + FUN_L00_001fefc8(&data->alert_voice_cooldown_timer) != 0) { allocate_voice_for_target_entry(0xA, 0, (char *)moby); - data->f407 = scale_game_frames(0xB4); + data->alert_voice_cooldown_timer = scale_game_frames(0xB4); } - if (data->f402 == 0) { + if (data->idle_action_delay_timer == 0) { if (target_distance < 4.5f) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)4, (void *)4, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_MELEE_ATTACK; - } else if (flag ? target_distance < data->f43C * 2.0f - : target_distance < data->f43C) { - int nf = (moby->fBC & 1) == 0; + } else if (flag ? target_distance < data->detection_range * 2.0f + : target_distance < data->detection_range) { + int nf = (moby->behavior_flags & 1) == 0; if (nf) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)2, 0, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_ALERT; - moby->fBC |= 1; + moby->behavior_flags |= 1; } } } @@ -579,10 +588,11 @@ void big_axebot_update(M_B7B0 *moby) { break; } case BIG_AXEBOT_STATE_ALERT: - if (moby->f52 == 2 && (moby->f70 & 2)) { + if (moby->animation_source_sequence == 2 && (moby->f70 & 2)) { blend_big_axebot_and_axe_animation( (char *)moby, - (void *)((flag ? target_distance < data->f43C * 2.0f : target_distance < data->f43C) + (void *)((flag ? target_distance < data->detection_range * 2.0f + : target_distance < data->detection_range) ? 0xD : 0), 0, @@ -591,31 +601,32 @@ void big_axebot_update(M_B7B0 *moby) { } break; case BIG_AXEBOT_STATE_WAIT_FOR_TARGET: - if (moby->f52 != 0 && (moby->f70 & 2)) { + if (moby->animation_source_sequence != 0 && (moby->f70 & 2)) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)0xB, 0, (void *)scale_game_frames(0xC)); } - if (data->f402 == 0) { + if (data->idle_action_delay_timer == 0) { if (target_distance < 4.5f) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)4, (void *)4, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_MELEE_ATTACK; - } else if (flag ? target_distance < data->f43C * 2.0f : target_distance < data->f43C) { - int nf = (moby->fBC & 1) == 0; + } else if (flag ? target_distance < data->detection_range * 2.0f + : target_distance < data->detection_range) { + int nf = (moby->behavior_flags & 1) == 0; if (nf) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)2, 0, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_ALERT; - moby->fBC |= 1; + moby->behavior_flags |= 1; } } } break; case BIG_AXEBOT_STATE_FOLLOW_PATH: { - P_B7B0 *path = ((P_B7B0 *)l04_paths[data->f434]); + P_B7B0 *path = ((P_B7B0 *)l04_paths[data->approach_path_index]); float a; - if (moby->f53 != 3) { + if (moby->animation_target_sequence != 3) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)3, 0, (void *)scale_game_frames(0xC)); } @@ -624,10 +635,11 @@ void big_axebot_update(M_B7B0 *moby) { (char *)moby, (void *)4, (void *)4, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_MELEE_ATTACK; } - if (vector_distance_xy(path->pts[data->f438], moby->pos) < 1.0f) { - data->f438++; - if (data->f438 == path->count) { - if (flag ? data->f43C * 2.0f < target_distance : data->f43C < target_distance) { + if (vector_distance_xy(path->pts[data->path_waypoint_index], moby->pos) < 1.0f) { + data->path_waypoint_index++; + if (data->path_waypoint_index == path->count) { + if (flag ? data->detection_range * 2.0f < target_distance + : data->detection_range < target_distance) { blend_big_axebot_and_axe_animation( (char *)moby, 0, 0, (void *)scale_game_frames(0x18)); } else { @@ -638,11 +650,11 @@ void big_axebot_update(M_B7B0 *moby) { break; } } - a = fast_arc_tan(path->pts[data->f438][0] - moby->pos[0], - path->pts[data->f438][1] - moby->pos[1]); + a = fast_arc_tan(path->pts[data->path_waypoint_index][0] - moby->pos[0], + path->pts[data->path_waypoint_index][1] - moby->pos[1]); moby->rot[2] = spring_turn(moby->rot[2], a, - &data->f410, + &data->yaw_turn_velocity, frame_time_sq * 12.566371f, frame_time_sq * 6.2831855f, frame_time * 3.1415927f); @@ -655,37 +667,43 @@ void big_axebot_update(M_B7B0 *moby) { break; } case BIG_AXEBOT_STATE_CHASE_TARGET: - if (moby->fBC & 8) { - moby->fBC &= ~8; - reset_leg_rig_from_animation(moby, data->f1A0); + if (moby->behavior_flags & 8) { + moby->behavior_flags &= ~8; + reset_leg_rig_from_animation(moby, data->leg_rig_state); } - data->f414 = spring_turn(moby->rot[2], - target_yaw, - &data->f410, - frame_time_sq * 6.2831855f, - frame_time_sq * 125.663704f, - frame_time * 12.566371f); - leg_walker_update(moby, data->f1A0, frame_time * 4.0f, data->f414, frame_time_sq * 20.0f); + data->movement_yaw = spring_turn(moby->rot[2], + target_yaw, + &data->yaw_turn_velocity, + frame_time_sq * 6.2831855f, + frame_time_sq * 125.663704f, + frame_time * 12.566371f); + leg_walker_update(moby, + data->leg_rig_state, + frame_time * 4.0f, + data->movement_yaw, + frame_time_sq * 20.0f); if (target_distance < 4.5f) { blend_big_axebot_and_axe_animation( (char *)moby, (void *)4, (void *)4, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_MELEE_ATTACK; - } else if (data->f41C != -1) { + } else if (data->movement_boundary_path_index != -1) { vector_quaternion_scratch[0] = fast_cos(moby->rot[2]) * 2.0f; vector_quaternion_scratch[1] = fast_sin(moby->rot[2]) * 2.0f; vector_quaternion_scratch[2] = 0.0f; fast_vec_add(vector_quaternion_scratch, vector_quaternion_scratch, moby->pos); - if (point_in_path_xy(vector_quaternion_scratch, - ((P_B7B0 *)l04_paths[data->f41C])->pts, - ((P_B7B0 *)l04_paths[data->f41C])->count) == 0) { - data->f410 = 0.0f; + if (point_in_path_xy( + vector_quaternion_scratch, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->count) == 0) { + data->yaw_turn_velocity = 0.0f; blend_big_axebot_and_axe_animation( (char *)moby, (void *)8, 0, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_TURN; } - if (point_in_path_xy(tpos, - ((P_B7B0 *)l04_paths[data->f41C])->pts, - ((P_B7B0 *)l04_paths[data->f41C])->count) == 0) { + if (point_in_path_xy( + tpos, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->count) == 0) { moby->state = BIG_AXEBOT_STATE_RETURN_HOME; } } @@ -698,46 +716,52 @@ void big_axebot_update(M_B7B0 *moby) { } else { float a; - if (moby->fBC & 8) { - moby->fBC &= ~8; - reset_leg_rig_from_animation(moby, data->f1A0); + if (moby->behavior_flags & 8) { + moby->behavior_flags &= ~8; + reset_leg_rig_from_animation(moby, data->leg_rig_state); } a = fast_arc_tan(data->home[0] - moby->pos[0], data->home[1] - moby->pos[1]); - data->f414 = spring_turn(moby->rot[2], - a, - &data->f410, - frame_time_sq * 6.2831855f, - frame_time_sq * 125.663704f, - frame_time * 12.566371f); - leg_walker_update( - moby, data->f1A0, frame_time * 4.0f, data->f414, frame_time_sq * 20.0f); + data->movement_yaw = spring_turn(moby->rot[2], + a, + &data->yaw_turn_velocity, + frame_time_sq * 6.2831855f, + frame_time_sq * 125.663704f, + frame_time * 12.566371f); + leg_walker_update(moby, + data->leg_rig_state, + frame_time * 4.0f, + data->movement_yaw, + frame_time_sq * 20.0f); if (vector_distance_xy(moby->pos, data->home) < 2.0f) { moby->state = BIG_AXEBOT_STATE_IDLE; } - if (data->f41C != -1) { + if (data->movement_boundary_path_index != -1) { vector_quaternion_scratch[0] = fast_cos(moby->rot[2]) * 2.0f; vector_quaternion_scratch[1] = fast_sin(moby->rot[2]) * 2.0f; vector_quaternion_scratch[2] = 0.0f; fast_vec_add(vector_quaternion_scratch, vector_quaternion_scratch, moby->pos); - if (point_in_path_xy(vector_quaternion_scratch, - ((P_B7B0 *)l04_paths[data->f41C])->pts, - ((P_B7B0 *)l04_paths[data->f41C])->count) == 0) { - data->f410 = 0.0f; + if (point_in_path_xy( + vector_quaternion_scratch, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->count) == 0) { + data->yaw_turn_velocity = 0.0f; blend_big_axebot_and_axe_animation( (char *)moby, (void *)8, 0, (void *)scale_game_frames(0xC)); moby->state = BIG_AXEBOT_STATE_TURN; - moby->fBC |= 0x10; + moby->behavior_flags |= 0x10; } - if (point_in_path_xy(tpos, - ((P_B7B0 *)l04_paths[data->f41C])->pts, - ((P_B7B0 *)l04_paths[data->f41C])->count) != 0) { + if (point_in_path_xy( + tpos, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_B7B0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { moby->state = BIG_AXEBOT_STATE_IDLE; } } } break; case BIG_AXEBOT_STATE_MELEE_ATTACK: - if (moby->f52 == moby->f53 && compute_interpolated_record_value(moby) >= 17.0f && + if (moby->animation_source_sequence == moby->animation_target_sequence && + compute_interpolated_record_value(moby) >= 17.0f && compute_interpolated_record_value(moby) < 20.0f && absolute_float(moby->pos[2] - tg.pos[2]) < 2.0f && vector_distance_xy(moby->pos, (float *)&tg) < 4.5f) { @@ -762,11 +786,12 @@ void big_axebot_update(M_B7B0 *moby) { set_big_axebot_and_axe_animation_speed(moby, animation_speed); } } - if (moby->f52 == 4 && (moby->f70 & 2)) { - data->f402 = scale_game_frames(0x5A); + if (moby->animation_source_sequence == 4 && (moby->f70 & 2)) { + data->idle_action_delay_timer = scale_game_frames(0x5A); blend_big_axebot_and_axe_animation( (char *)moby, - (void *)((flag ? target_distance < data->f43C * 2.0f : target_distance < data->f43C) + (void *)((flag ? target_distance < data->detection_range * 2.0f + : target_distance < data->detection_range) ? 0xD : 0), 0, @@ -775,66 +800,74 @@ void big_axebot_update(M_B7B0 *moby) { } break; case BIG_AXEBOT_STATE_HIT_RECOVERY: - if (!(moby->f53 == 5 && (moby->f52 != moby->f53 || hd <= 13.0f))) { - if (moby->fBC & 4) { - moby->fBC &= ~4; + if (!(moby->animation_target_sequence == 5 && + (moby->animation_source_sequence != moby->animation_target_sequence || + hd <= 13.0f))) { + if (moby->behavior_flags & 4) { + moby->behavior_flags &= ~4; blend_big_axebot_and_axe_animation( (char *)moby, (void *)4, (void *)4, (void *)scale_game_frames(6)); set_big_axebot_and_axe_animation_speed(moby, 1.5f); moby->state = BIG_AXEBOT_STATE_MELEE_ATTACK; - } else if (moby->f53 == 8 && (hd < 28.0f || moby->f52 != moby->f53)) { + } else if (moby->animation_target_sequence == 8 && + (hd < 28.0f || + moby->animation_source_sequence != moby->animation_target_sequence)) { float hit_recovery_displacement_limit = frame_scale * 0.11111111f; - if (data->f418 < hit_recovery_displacement_limit) { - data->f418 += frame_time_sq * 20.0f; + if (data->hit_recovery_displacement < hit_recovery_displacement_limit) { + data->hit_recovery_displacement += frame_time_sq * 20.0f; } else { - data->f418 = hit_recovery_displacement_limit; + data->hit_recovery_displacement = hit_recovery_displacement_limit; } - build_spherical_offset( - vector_quaternion_scratch, data->f418, data->f414, moby->rot[1]); + build_spherical_offset(vector_quaternion_scratch, + data->hit_recovery_displacement, + data->movement_yaw, + moby->rot[1]); fast_vec_add(moby->pos, moby->pos, vector_quaternion_scratch); moby->rot[2] = spring_turn(moby->rot[2], target_yaw, - &data->f410, + &data->yaw_turn_velocity, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); - } else if (data->f418 > 0.0f) { - data->f418 -= frame_time_sq * 200.0f; - build_spherical_offset( - vector_quaternion_scratch, data->f418, data->f414, moby->rot[1]); + } else if (data->hit_recovery_displacement > 0.0f) { + data->hit_recovery_displacement -= frame_time_sq * 200.0f; + build_spherical_offset(vector_quaternion_scratch, + data->hit_recovery_displacement, + data->movement_yaw, + moby->rot[1]); fast_vec_add(moby->pos, moby->pos, vector_quaternion_scratch); moby->rot[2] = spring_turn(moby->rot[2], target_yaw, - &data->f410, + &data->yaw_turn_velocity, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); } else { moby->state = BIG_AXEBOT_STATE_IDLE; - data->f402 = 0; + data->idle_action_delay_timer = 0; } } break; case BIG_AXEBOT_STATE_TURN: - if (moby->f52 == 8 && (moby->f70 & 2)) { + if (moby->animation_source_sequence == 8 && (moby->f70 & 2)) { moby->state = BIG_AXEBOT_STATE_CHASE_TARGET; - moby->fBC = (moby->fBC | 8) & ~0x10; + moby->behavior_flags = (moby->behavior_flags | 8) & ~0x10; blend_big_axebot_and_axe_animation( (char *)moby, (void *)9, 0, (void *)scale_game_frames(0xC)); - } else if (moby->fBC & 0x10) { + } else if (moby->behavior_flags & 0x10) { float a = fast_arc_tan(data->home[0] - moby->pos[0], data->home[1] - moby->pos[1]); moby->rot[2] = spring_turn(moby->rot[2], a, - &data->f410, + &data->yaw_turn_velocity, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); } else { moby->rot[2] = spring_turn(moby->rot[2], target_yaw, - &data->f410, + &data->yaw_turn_velocity, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); @@ -843,8 +876,8 @@ void big_axebot_update(M_B7B0 *moby) { case BIG_AXEBOT_STATE_DYING: if ((step_moby_motion(moby, data->fC0) & 0x40) || moby->pos[2] < 1.0f) { mark_moby_for_removal_cf((char *)moby); - if (data->f424 != 0) { - mark_moby_for_removal(data->f424); + if (data->attached_axe_moby != 0) { + mark_moby_for_removal(data->attached_axe_moby); } FUN_L00_00257470(moby, 0, -1); FUN_L00_00263fd8((char *)moby, @@ -882,47 +915,48 @@ void big_axebot_update(M_B7B0 *moby) { } break; } - trooper_anim_finish(moby, data->fB0); - if (data->f42C > 0.0f) { + trooper_anim_finish(moby, data->hit_transition_state); + if (data->recoil_displacement > 0.0f) { struct Hero *h = &hero; vector_quaternion_scratch[0] = fast_cos(fast_arc_tan(moby->pos[0] - h->motion.pos.f[0], moby->pos[1] - h->motion.pos.f[1])) * - data->f42C; + data->recoil_displacement; vector_quaternion_scratch[1] = fast_sin(fast_arc_tan(moby->pos[0] - h->motion.pos.f[0], moby->pos[1] - h->motion.pos.f[1])) * - data->f42C; + data->recoil_displacement; vector_quaternion_scratch[2] = 0.0f; fast_vec_add(vector_quaternion_scratch, vector_quaternion_scratch, moby->pos); - if (data->f420 == 0.0f) { - data->f42C += -3.4f / (scale_time(7.0f) * scale_time(7.0f)); + if (data->fall_displacement == 0.0f) { + data->recoil_displacement += -3.4f / (scale_time(7.0f) * scale_time(7.0f)); } move_moby_xy_with_collision_constraints( moby, moby->pos, vector_quaternion_scratch, 1, 0.25f, 1.5f, 0.75f, 0.87266463f); } - data->f408 *= 0.96f; - fast_dec_timer(&data->f448); - build_axis_rotation_quaternion(vector_quaternion_scratch, 1, data->f408); - build_axis_rotation_quaternion(data->m120.q, 2, 0.0f); - multiply_quaternions(data->m120.q, data->m120.q, vector_quaternion_scratch); + data->recoil_pitch_angle *= 0.96f; + fast_dec_timer(&data->recoil_pose_cooldown_timer); + build_axis_rotation_quaternion(vector_quaternion_scratch, 1, data->recoil_pitch_angle); + build_axis_rotation_quaternion(data->recoil_manipulator.q, 2, 0.0f); + multiply_quaternions( + data->recoil_manipulator.q, data->recoil_manipulator.q, vector_quaternion_scratch); if (moby->state != BIG_AXEBOT_STATE_HIT_RECOVERY) { - data->f401 = moby->state; + data->last_non_hit_recovery_state = moby->state; } - data->f420 += frame_time_sq * 29.8f; - moby->pos[2] -= data->f420 - 2.0f; + data->fall_displacement += frame_time_sq * 29.8f; + moby->pos[2] -= data->fall_displacement - 2.0f; { float ground_height = probe_ground_height(moby->pos, 0, 0.5f); moby->pos[2] -= 2.0f; if (moby->pos[2] < ground_height) { moby->pos[2] = ground_height; - data->f420 = 0.0f; + data->fall_displacement = 0.0f; } } if (moby->pos[2] < data->home[2] - 8.0f) { mark_moby_for_removal_cf((char *)moby); - if (data->f424 != 0) { - mark_moby_for_removal(data->f424); + if (data->attached_axe_moby != 0) { + mark_moby_for_removal(data->attached_axe_moby); } mark_moby_for_removal(moby); return; @@ -932,34 +966,36 @@ void big_axebot_update(M_B7B0 *moby) { float bone_transform[4][4]; float bone_euler_angles[4]; { - data->f428 = fast_add_rotations(data->f428, fast_subtract_rotations(moby->rot[2], rot)); + data->tracked_aim_yaw = fast_add_rotations(data->tracked_aim_yaw, + fast_subtract_rotations(moby->rot[2], rot)); build_moby_bone_transform((char *)moby, 0xC, (char *)bone_transform); matrix_to_euler(bone_transform, bone_euler_angles); - build_axis_rotation_quaternion(q, 2, fast_subtract_rotations(target_yaw, data->f428)); - data->f428 = target_yaw; - multiply_quaternions(data->m160.q, data->m160.q, q); + build_axis_rotation_quaternion( + q, 2, fast_subtract_rotations(target_yaw, data->tracked_aim_yaw)); + data->tracked_aim_yaw = target_yaw; + multiply_quaternions(data->aim_manipulator.q, data->aim_manipulator.q, q); } } - if (data->f424 != 0) { + if (data->attached_axe_moby != 0) { float axe_bone_transform[4][4]; { M_B7B0 *axe; build_moby_bone_transform((char *)moby, 0xD, (char *)axe_bone_transform); - axe = data->f424; + axe = data->attached_axe_moby; qcopy(axe->pos, axe_bone_transform[3]); advance_moby_animation(axe); - update_entity(data->f424); - copy_matrix3x4(data->f424->fC0, axe_bone_transform); - normalize_vector_triplet(data->f424->fC0); - refresh_moby_spatial_bounds_from_basis(data->f424); - data->f424->f34 |= 6; + update_entity(data->attached_axe_moby); + copy_matrix3x4(data->attached_axe_moby->fC0, axe_bone_transform); + normalize_vector_triplet(data->attached_axe_moby->fC0); + refresh_moby_spatial_bounds_from_basis(data->attached_axe_moby); + data->attached_axe_moby->f34 |= 6; } } else { float p[4]; moby_point_position(moby, 0xB, p); - data->f424 = spawn_big_axebot_axe(moby, p); + data->attached_axe_moby = spawn_big_axebot_axe(moby, p); } } diff --git a/src/overlays/l04/mobys/blarg_trooper.c b/src/overlays/l04/mobys/blarg_trooper.c index 6dd97726d7..a794183bbc 100644 --- a/src/overlays/l04/mobys/blarg_trooper.c +++ b/src/overlays/l04/mobys/blarg_trooper.c @@ -124,13 +124,13 @@ struct Path5BD0 { struct Shot5BD0 { float f0; float f4; - float f8; + float hit_direction_z; float fC; void *p10; int v14; char c18; char c19; - short h1A; + short hit_source_class; float f1C; int pad[4]; }; @@ -711,15 +711,15 @@ void blarg_trooper_update(struct Moby *moby) { moby->rot.z) < 0.2617994f) { update_scratch.w.p.blk.f0 = fast_cos(moby->rot.z) * 0.2f; update_scratch.w.p.blk.f4 = fast_sin(moby->rot.z) * 0.2f; - update_scratch.w.p.blk.f8 = 0.0f; + update_scratch.w.p.blk.hit_direction_z = 0.0f; update_scratch.w.p.blk.p10 = moby; update_scratch.w.p.blk.v14 = 1; update_scratch.w.p.blk.f1C = 1.0f; set_vector_length_xy(&update_scratch.w.p.blk, &update_scratch.w.p.blk, 1.0f); - update_scratch.w.p.blk.f8 = 1.0f; + update_scratch.w.p.blk.hit_direction_z = 1.0f; update_scratch.w.p.blk.fC = 5627.925f; update_scratch.w.p.blk.c19 = 1; - update_scratch.w.p.blk.h1A = (u16)moby->oclass; + update_scratch.w.p.blk.hit_source_class = (u16)moby->oclass; update_scratch.w.p.blk.c18 = 0; qcopy(update_scratch.w.p.v70, update_scratch.v50); update_scratch.w.p.v70[2] = update_scratch.w.p.v70[2] + 0.75f; diff --git a/src/overlays/l04/mobys/butterfly_swarm.c b/src/overlays/l04/mobys/butterfly_swarm.c index 4f7003aead..72bf8cf389 100644 --- a/src/overlays/l04/mobys/butterfly_swarm.c +++ b/src/overlays/l04/mobys/butterfly_swarm.c @@ -524,14 +524,14 @@ typedef struct SwarmPartVars { Vec4f *leader_pos; s32 unk58; s16 unk5C; - s16 unk5E; + s16 repulsion_class_count; s16 oclass; - s16 unk62; + s16 secondary_repulsion_class; u8 pad64[0xC]; f32 unk70; f32 unk74; u8 pad78[0x18]; - f32 unk90; + f32 same_class_repulsion_distance_scale; f32 unk94; } SwarmPartVars; @@ -646,10 +646,10 @@ void butterfly_swarm_update(struct Moby *moby) { part->unk48 = 1.056f; part->unk5C = -1; part->unk40 = 0.003f; - part->unk5E = 2; + part->repulsion_class_count = 2; part->oclass = 0x55; - part->unk90 = 1.0f; - part->unk62 = 0x1ee; + part->same_class_repulsion_distance_scale = 1.0f; + part->secondary_repulsion_class = 0x1ee; part->unk94 = 5.0f; update_entity(child); } diff --git a/src/overlays/l04/mobys/circular_saw_enemy.c b/src/overlays/l04/mobys/circular_saw_enemy.c index 2fcfcc1892..dae68f7a3c 100644 --- a/src/overlays/l04/mobys/circular_saw_enemy.c +++ b/src/overlays/l04/mobys/circular_saw_enemy.c @@ -330,7 +330,7 @@ typedef struct D_35F0 { char pad2F; float f30; char pad34[4]; - int f38; + int alert_range_refresh_trigger; char pad3C[0x1C]; unsigned char f58; char pad59; @@ -341,7 +341,7 @@ typedef struct D_35F0 { float f68; float f6C; char pad70[8]; - float f78; + float downward_move_step; char pad7C[8]; float f84; char pad88[0x10]; @@ -359,37 +359,37 @@ typedef struct D_35F0 { char padE8[0x15]; unsigned char fFD; char padFE[0x22]; - V4_35F0 f120; - float f130; + V4_35F0 home_position; + float yaw_turn_step; char pad134[2]; - short f136; - int f138; - float f13C; - float f140; - short f144; - short f146; + short alert_range_timer; + int movement_boundary_path_index; + float knockback_move_step; + float target_detection_range; + short movement_animation_change_timer; + short action_timer; char pad148[4]; - unsigned char f14C; - unsigned char f14D; - unsigned short f14E; - int f150; + unsigned char movement_direction_index; + unsigned char hit_reaction_cooldown_timer; + unsigned short combat_history_flags; + int patrol_path_index; int f154; short f158; - short f15A; + short point_attack_phase; char pad15C[4]; - int f160[4]; + int point_attack_cuboid_indices[4]; char pad170[0x78]; - short f1E8; + short suck_cannon_phase; char pad1EA[6]; - short *f1F0; + short *suck_cannon_config; char pad1F4[0x44]; - int f238; + int engine_sound_voice_handle; char pad23C[4]; V4_35F0 f240; char pad250[4]; - float f254; - float f258; - float f25C; + float wander_move_step; + float wander_turn_step; + float wander_radius; char pad260[0x10]; unsigned char f270[4]; } D_35F0; @@ -453,7 +453,7 @@ typedef struct { char pad00[0x20]; M_35F0 *att; char pad24[8]; - float f2C; + float damage_amount; } Hit_35F0; typedef struct { @@ -482,7 +482,7 @@ extern int collect_mobies_in_sphere(void *, int, void *, void *, float) __asm__( extern int move_moby_xy_with_collision_constraints( void *, void *, void *, int, float, float, float, float) __asm__("FUN_L00_00258490"); extern int FUN_L00_002dc9f0(void *, void *); -short D_L04_00161878 = 0x101; +short l04_circular_saw_suck_cannon_config_header __asm__("D_L04_00161878") = 0x101; extern void FUN_L01_0026d930(char *p); extern void update_circular_saw_engine_sound(struct Moby *) __asm__("FUN_L04_002c1b80"); extern void transform_vector_by_basis(void *, void *, void *); @@ -524,7 +524,7 @@ void circular_saw_enemy_update(M_35F0 *moby) { float target_distance; float ta; - if (data->f38 != 0 || data->f136 != 0) { + if (data->alert_range_refresh_trigger != 0 || data->alert_range_timer != 0) { flag = 1; } FUN_L00_00263ac8(2.9f, (int)moby, 7, data->f270); @@ -534,7 +534,10 @@ void circular_saw_enemy_update(M_35F0 *moby) { moby->f7F = 0x15; } } - select_moby_combat_target((char *)moby, (float *)&tg, flag ? data->f140 * 2.0f : data->f140); + select_moby_combat_target((char *)moby, + (float *)&tg, + flag ? data->target_detection_range * 2.0f + : data->target_detection_range); target_moby = tg.f40; hd = compute_interpolated_record_value(moby); target_distance = vector_distance_xy(moby->pos, (float *)&tg); @@ -546,11 +549,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { H_35F0 *h = (H_35F0 *)(((char *)((char *)&hero))); if (h->f240 == moby || fast_vec_dist(moby->pos, h->pos) < 1.5f) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); moby->state = CIRCULAR_SAW_STATE_MELEE_ATTACK; } } - FUN_L00_001fefc8(&data->f14D); + FUN_L00_001fefc8(&data->hit_reaction_cooldown_timer); if (moby->state != CIRCULAR_SAW_STATE_DYING && moby->state != CIRCULAR_SAW_STATE_INITIALIZE) { int unused_hit_reaction_output; float dmg; @@ -561,7 +564,8 @@ void circular_saw_enemy_update(M_35F0 *moby) { dmg = 0.0f; hit = find_moby_hit(moby, 0x210000, 0); r = hit_reaction(moby, hit, &data->hp, 0, &unused_hit_reaction_output, &dmg, 0, 4); - if (hit != 0 && moby->state != CIRCULAR_SAW_STATE_INITIALIZE && data->f14D == 0) { + if (hit != 0 && moby->state != CIRCULAR_SAW_STATE_INITIALIZE && + data->hit_reaction_cooldown_timer == 0) { if (hit->att != 0) { struct Hero *h = &hero; if (hit->att != h->items[0].moby) { @@ -582,14 +586,14 @@ void circular_saw_enemy_update(M_35F0 *moby) { data->fE4 = 9; data->fFD = 0; if ((unsigned int)(hit->att->cls.u - 0xB0) < 2) { - hit->f2C = 1.0f; + hit->damage_amount = 1.0f; dmg = 1.0f; } data->hp -= dmg; if (data->hp <= 0.0f) { r = 1; } - data->f136 = scale_game_frames(0xF0); + data->alert_range_timer = scale_game_frames(0xF0); switch (r) { case CIRCULAR_SAW_HIT_REACTION_NONE: break; @@ -604,18 +608,18 @@ void circular_saw_enemy_update(M_35F0 *moby) { case CIRCULAR_SAW_HIT_REACTION_RECOIL_RECOVERY: blend_moby_animation(moby, (void *)8, 0, (void *)scale_game_frames(5)); if (hit->att->cls.s == 0x131 || hit->att->cls.s == 0xB0) { - data->f13C = 10.0f / scale_time(15.0f) * 0.5f; + data->knockback_move_step = 10.0f / scale_time(15.0f) * 0.5f; } else { - data->f13C = 10.0f / scale_time(15.0f); + data->knockback_move_step = 10.0f / scale_time(15.0f); } moby->state = CIRCULAR_SAW_STATE_HIT_RECOVERY; moby->rot = fast_add_rotations(3.1415927f, ang); data->fB7 = 0x78; trooper_anim_update(moby, (short *)data->fB0); - data->f14D = scale_game_frames(0x14); + data->hit_reaction_cooldown_timer = scale_game_frames(0x14); data->fB7 = 0x78; trooper_anim_update(moby, (short *)data->fB0); - data->f14D = scale_game_frames(0x14); + data->hit_reaction_cooldown_timer = scale_game_frames(0x14); break; case CIRCULAR_SAW_HIT_REACTION_IGNORED: case CIRCULAR_SAW_HIT_REACTION_NO_ADDITIONAL_REACTION: @@ -627,11 +631,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { } } moby->fA4 = 0xFF; - if (data->f38 != 0) { - data->f136 = scale_game_frames(0xF0); + if (data->alert_range_refresh_trigger != 0) { + data->alert_range_timer = scale_game_frames(0xF0); } - data->f38 = 0; - fast_dec_timer_s16(&data->f136); + data->alert_range_refresh_trigger = 0; + fast_dec_timer_s16(&data->alert_range_timer); if (moby->state == CIRCULAR_SAW_STATE_MELEE_ATTACK && moby->f52 == 7 && hd > 15.0f && hd < 44.0f) { int i; @@ -650,14 +654,15 @@ void circular_saw_enemy_update(M_35F0 *moby) { melee_hit_parameters.f20 = 1; collect_mobies_in_sphere(jp, 0x10, moby, &melee_hit_parameters, 0.5f); if (coll_hit.moby == target_moby) { - data->f146 = - data->f146 < scale_game_frames(0x3C) ? data->f146 : scale_game_frames(0x3C); + data->action_timer = data->action_timer < scale_game_frames(0x3C) + ? data->action_timer + : scale_game_frames(0x3C); } } } } if (moby->state != CIRCULAR_SAW_STATE_INITIALIZE && data->f2E != 1) { - int engine_voice_index = data->f238; + int engine_voice_index = data->engine_sound_voice_handle; if (engine_voice_index != -1) { char *e = (char *)((char *)&D_0013E550) + engine_voice_index * 0x70; if (*(M_35F0 **)(e + 0x88) == moby) { @@ -666,11 +671,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { } } } - data->f238 = -1; + data->engine_sound_voice_handle = -1; mark_moby_for_removal(moby); return; } - fast_dec_timer_s16(&data->f146); + fast_dec_timer_s16(&data->action_timer); switch (moby->state) { case CIRCULAR_SAW_STATE_INITIALIZE: { float k; @@ -691,15 +696,15 @@ void circular_saw_enemy_update(M_35F0 *moby) { data->f64 = 1.0f; data->f98 = 4; qcopy(data->f240, moby->pos); - data->f25C = 2.0f; - data->f254 = k * 2.0f; - data->f258 = k * 2.9670596f; - qcopy(data->f120, moby->pos); - data->f146 = scale_game_frames(0x3C); - data->f1F0 = &D_L04_00161878; - data->f136 = 0; - data->f144 = 0; - if (data->f150 == -1) { + data->wander_radius = 2.0f; + data->wander_move_step = k * 2.0f; + data->wander_turn_step = k * 2.9670596f; + qcopy(data->home_position, moby->pos); + data->action_timer = scale_game_frames(0x3C); + data->suck_cannon_config = &l04_circular_saw_suck_cannon_config_header; + data->alert_range_timer = 0; + data->movement_animation_change_timer = 0; + if (data->patrol_path_index == -1) { moby->state = CIRCULAR_SAW_STATE_IDLE; } else { moby->state = CIRCULAR_SAW_STATE_FOLLOW_PATH; @@ -711,38 +716,41 @@ void circular_saw_enemy_update(M_35F0 *moby) { { qcopy(save, moby->pos); update_object_wander_movement((char *)moby, (char *)data->f240, 0.35f, 0.25f); - if (data->f138 != -1) { - if (point_in_path_xy(moby->pos, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) == 0) { + if (data->movement_boundary_path_index != -1) { + if (point_in_path_xy( + moby->pos, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) == 0) { qcopy(moby->pos, save); } } if (moby->f52 != 0 && (moby->f70 & 2)) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(5)); } - if (flag ? target_distance < data->f140 * 2.0f : target_distance < data->f140) { - if (flag || data->f138 == -1 || - point_in_path_xy(&tg, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { - int nf = (data->f14E & 1) == 0; + if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (flag || data->movement_boundary_path_index == -1 || + point_in_path_xy( + &tg, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { + int nf = (data->combat_history_flags & 1) == 0; if (nf) { - data->f14E |= 1; + data->combat_history_flags |= 1; blend_moby_animation(moby, (void *)6, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); } ta = fast_arc_tan(tg.pos[0] - moby->pos[0], tg.pos[1] - moby->pos[1]); - if (target_distance < 2.0f && data->f146 == 0 && + if (target_distance < 2.0f && data->action_timer == 0 && check_circular_saw_melee_attack_spacing((char *)moby) != 0) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); moby->state = CIRCULAR_SAW_STATE_MELEE_ATTACK; - } else if (flag ? target_distance < data->f140 * 2.0f - : target_distance < data->f140) { - if (data->f146 == 0) { + } else if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (data->action_timer == 0) { blend_moby_animation(moby, (void *)1, 0, (void *)scale_game_frames(10)); - data->f14C = 0; + data->movement_direction_index = 0; moby->state = CIRCULAR_SAW_STATE_CHASE_TARGET; } } @@ -754,67 +762,73 @@ void circular_saw_enemy_update(M_35F0 *moby) { case CIRCULAR_SAW_STATE_JUMP: if (moby->f53 != 5) { blend_moby_animation(moby, (void *)5, 0, (void *)scale_game_frames(5)); - data->f78 = -(frame_time * 7.668f); + data->downward_move_step = -(frame_time * 7.668f); } else if (moby->f70 & 2) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(10)); moby->state = CIRCULAR_SAW_STATE_IDLE; } break; case CIRCULAR_SAW_STATE_CHASE_TARGET: - if ((flag ? target_distance < data->f140 * 2.0f : target_distance < data->f140) && - (flag || data->f138 == -1 || + if ((flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) && + (flag || data->movement_boundary_path_index == -1 || point_in_path_xy(&tg, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0)) { - rot = compute_circular_saw_flock_steering( - moby, dest, flag ? data->f140 * 2.0f : data->f140); - if (target_distance < 2.0f && data->f146 == 0 && + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != + 0)) { + rot = compute_circular_saw_flock_steering(moby, + dest, + flag ? data->target_detection_range * 2.0f + : data->target_detection_range); + if (target_distance < 2.0f && data->action_timer == 0 && check_circular_saw_melee_attack_spacing((char *)moby) != 0) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); moby->state = CIRCULAR_SAW_STATE_MELEE_ATTACK; } } else if (flag == 0) { - qcopy(dest, data->f120); - if (vector_distance_xy(moby->pos, data->f120) < 1.0f) { + qcopy(dest, data->home_position); + if (vector_distance_xy(moby->pos, data->home_position) < 1.0f) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(10)); moby->state = CIRCULAR_SAW_STATE_IDLE; } } func_L00_002592B0_b((char *)moby, rot, - &data->f130, + &data->yaw_turn_step, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); break; case CIRCULAR_SAW_STATE_FOLLOW_PATH: { - P_35F0 *path = ((P_35F0 *)l04_paths[data->f150]); + P_35F0 *path = ((P_35F0 *)l04_paths[data->patrol_path_index]); int i; float *yaw_velocity; - if (flag ? target_distance < data->f140 * 2.0f : target_distance < data->f140) { - if (flag || data->f138 == -1 || - point_in_path_xy(&tg, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { - int nf = (data->f14E & 1) == 0; + if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (flag || data->movement_boundary_path_index == -1 || + point_in_path_xy( + &tg, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { + int nf = (data->combat_history_flags & 1) == 0; if (nf) { - data->f14E |= 1; + data->combat_history_flags |= 1; blend_moby_animation(moby, (void *)6, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); } ta = fast_arc_tan(tg.pos[0] - moby->pos[0], tg.pos[1] - moby->pos[1]); - if (target_distance < 2.0f && data->f146 == 0 && + if (target_distance < 2.0f && data->action_timer == 0 && check_circular_saw_melee_attack_spacing((char *)moby) != 0) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); moby->state = CIRCULAR_SAW_STATE_MELEE_ATTACK; - } else if (flag ? target_distance < data->f140 * 2.0f - : target_distance < data->f140) { - if (data->f146 == 0) { + } else if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (data->action_timer == 0) { blend_moby_animation(moby, (void *)1, 0, (void *)scale_game_frames(10)); - data->f14C = 0; + data->movement_direction_index = 0; moby->state = CIRCULAR_SAW_STATE_CHASE_TARGET; } } @@ -831,13 +845,13 @@ void circular_saw_enemy_update(M_35F0 *moby) { } } i = 0; - yaw_velocity = &data->f130; + yaw_velocity = &data->yaw_turn_step; for (; i < 4; i++) { - if (data->f146 == 0 && data->f160[i] != -1 && - is_point_inside_clip_volume(moby->pos, data->f160[i]) != 0) { - data->f158 = data->f160[i]; + if (data->action_timer == 0 && data->point_attack_cuboid_indices[i] != -1 && + is_point_inside_clip_volume(moby->pos, data->point_attack_cuboid_indices[i]) != 0) { + data->f158 = data->point_attack_cuboid_indices[i]; moby->state = CIRCULAR_SAW_STATE_POINT_ATTACK; - data->f15A = 0; + data->point_attack_phase = 0; break; } } @@ -855,44 +869,46 @@ void circular_saw_enemy_update(M_35F0 *moby) { break; } case CIRCULAR_SAW_STATE_POINT_ATTACK: { - P_35F0 *path = ((P_35F0 *)l04_paths[data->f150]); + P_35F0 *path = ((P_35F0 *)l04_paths[data->patrol_path_index]); - if (flag ? target_distance < data->f140 * 2.0f : target_distance < data->f140) { - if (flag || data->f138 == -1 || - point_in_path_xy(&tg, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { - int nf = (data->f14E & 1) == 0; + if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (flag || data->movement_boundary_path_index == -1 || + point_in_path_xy( + &tg, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { + int nf = (data->combat_history_flags & 1) == 0; if (nf) { - data->f14E |= 1; + data->combat_history_flags |= 1; blend_moby_animation(moby, (void *)6, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); } ta = fast_arc_tan(tg.pos[0] - moby->pos[0], tg.pos[1] - moby->pos[1]); - if (target_distance < 2.0f && data->f146 == 0 && + if (target_distance < 2.0f && data->action_timer == 0 && check_circular_saw_melee_attack_spacing((char *)moby) != 0) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); - data->f146 = scale_game_frames(0x3C); + data->action_timer = scale_game_frames(0x3C); moby->state = CIRCULAR_SAW_STATE_MELEE_ATTACK; - data->f130 = 0.0f; - } else if (flag ? target_distance < data->f140 * 2.0f - : target_distance < data->f140) { - if (data->f146 == 0) { + data->yaw_turn_step = 0.0f; + } else if (flag ? target_distance < data->target_detection_range * 2.0f + : target_distance < data->target_detection_range) { + if (data->action_timer == 0) { blend_moby_animation(moby, (void *)1, 0, (void *)scale_game_frames(10)); - data->f14C = 0; + data->movement_direction_index = 0; moby->state = CIRCULAR_SAW_STATE_CHASE_TARGET; } } } } - switch (data->f15A) { + switch (data->point_attack_phase) { case CIRCULAR_SAW_POINT_ATTACK_APPROACH_AND_ALIGN: { LevelCuboid *e = l04_cuboids; int n = data->f158; qcopy(dest, &e[n].pos); func_L00_002592B0_b((char *)moby, e[n].rot.z, - &data->f130, + &data->yaw_turn_step, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); @@ -902,7 +918,7 @@ void circular_saw_enemy_update(M_35F0 *moby) { if (vector_distance_xy(moby->pos, dest) < 1.0f) { if (fast_difference_between_rotations(moby->rot, l04_cuboids[data->f158].rot.z) < 0.17453292f) { - data->f15A = 1; + data->point_attack_phase = 1; } } break; @@ -913,8 +929,8 @@ void circular_saw_enemy_update(M_35F0 *moby) { blend_moby_animation(moby, (void *)7, 0, (void *)scale_game_frames(10)); } else if (moby->f70 & 2) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(10)); - data->f130 = 0.0f; - data->f15A = 2; + data->yaw_turn_step = 0.0f; + data->point_attack_phase = 2; } break; case CIRCULAR_SAW_POINT_ATTACK_TURN_TO_PATH: { @@ -923,7 +939,7 @@ void circular_saw_enemy_update(M_35F0 *moby) { path->pts[data->f154][1] - moby->pos[1]); func_L00_002592B0_b((char *)moby, ta, - &data->f130, + &data->yaw_turn_step, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); @@ -932,7 +948,7 @@ void circular_saw_enemy_update(M_35F0 *moby) { fast_arc_tan(path->pts[data->f154][0] - moby->pos[0], path->pts[data->f154][1] - moby->pos[1])) < 0.17453292f) { moby->state = CIRCULAR_SAW_STATE_FOLLOW_PATH; - data->f146 = scale_game_frames(0xF0); + data->action_timer = scale_game_frames(0xF0); } break; } @@ -940,17 +956,17 @@ void circular_saw_enemy_update(M_35F0 *moby) { break; } case CIRCULAR_SAW_STATE_MELEE_ATTACK: - rot = - compute_circular_saw_flock_steering(moby, dest, flag ? data->f140 * 2.0f : data->f140); - if (data->f146 == 0 && (hd > 44.0f || (moby->f70 & 2))) { + rot = compute_circular_saw_flock_steering( + moby, dest, flag ? data->target_detection_range * 2.0f : data->target_detection_range); + if (data->action_timer == 0 && (hd > 44.0f || (moby->f70 & 2))) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(5)); - data->f146 = scale_game_frames(0x78); + data->action_timer = scale_game_frames(0x78); moby->state = CIRCULAR_SAW_STATE_IDLE; - data->f14E |= 2; + data->combat_history_flags |= 2; } func_L00_002592B0_b((char *)moby, rot, - &data->f130, + &data->yaw_turn_step, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); @@ -960,7 +976,7 @@ void circular_saw_enemy_update(M_35F0 *moby) { (moby->f70 & 2)) { blend_moby_animation(moby, 0, 0, (void *)scale_game_frames(10)); moby->state = CIRCULAR_SAW_STATE_IDLE; - data->f146 = 0; + data->action_timer = 0; } break; case CIRCULAR_SAW_STATE_DYING: @@ -973,18 +989,18 @@ void circular_saw_enemy_update(M_35F0 *moby) { case CIRCULAR_SAW_STATE_SUCK_CANNON_CONTROLLED: if (FUN_L00_002dc9f0(moby, data->fC0) != 0) { moby->state = CIRCULAR_SAW_STATE_INITIALIZE; - data->f1E8 = 0; + data->suck_cannon_phase = 0; } break; } - if (data->f13C > 0.0f) { + if (data->knockback_move_step > 0.0f) { V4_35F0 v; { - v[0] = fast_cos(fast_add_rotations(moby->rot, 3.1415927f)) * data->f13C; - v[1] = fast_sin(fast_add_rotations(moby->rot, 3.1415927f)) * data->f13C; + v[0] = fast_cos(fast_add_rotations(moby->rot, 3.1415927f)) * data->knockback_move_step; + v[1] = fast_sin(fast_add_rotations(moby->rot, 3.1415927f)) * data->knockback_move_step; v[2] = 0.0f; fast_vec_add(v, v, moby->pos); - data->f13C += -10.0f / (scale_time(15.0f) * scale_time(15.0f)); + data->knockback_move_step += -10.0f / (scale_time(15.0f) * scale_time(15.0f)); move_moby_xy_with_collision_constraints( moby, moby->pos, v, 1, 0.25f, 0.57f, 0.5f, 0.5235988f); } @@ -1005,10 +1021,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { fast_vec_add(v, v, moby->pos); qcopy(np, moby->pos); move_moby_xy_with_collision_constraints(moby, np, v, 0, 0.25f, 0.57f, 0.5f, 0.5235988f); - if (data->f138 == -1 || - point_in_path_xy(np, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { + if (data->movement_boundary_path_index == -1 || + point_in_path_xy( + np, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { qcopy(moby->pos, np); } } @@ -1029,13 +1046,14 @@ void circular_saw_enemy_update(M_35F0 *moby) { } if (fast_difference_between_rotations( fast_normalize_angle(fast_normalize_angle( - convert_integer_to_float(data->f14C) * 1.5707964f)), + convert_integer_to_float(data->movement_direction_index) * 1.5707964f)), rel) > 1.7453293f) { - data->f14C = truncate_float_to_s32(biased_relative_yaw * 1.999f / 3.1415927f); - anim = movement_animation_by_direction.v[data->f14C]; + data->movement_direction_index = + truncate_float_to_s32(biased_relative_yaw * 1.999f / 3.1415927f); + anim = movement_animation_by_direction.v[data->movement_direction_index]; } - movement_relative_yaw = - fast_normalize_angle(convert_integer_to_float(data->f14C) * 1.5707964f); + movement_relative_yaw = fast_normalize_angle( + convert_integer_to_float(data->movement_direction_index) * 1.5707964f); v[0] = fast_cos(fast_add_rotations(moby->rot, movement_relative_yaw)) * (frame_time * 3.0f); v[1] = fast_sin(fast_add_rotations(moby->rot, movement_relative_yaw)) * @@ -1049,10 +1067,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { qcopy(np, moby->pos); moved = move_moby_xy_with_collision_constraints( moby, np, v, 0, 0.25f, 0.57f, 0.5f, 0.5235988f); - if (data->f138 == -1 || - point_in_path_xy(np, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { + if (data->movement_boundary_path_index == -1 || + point_in_path_xy( + np, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { qcopy(moby->pos, np); if (moved == 0) { anim = 0; @@ -1060,9 +1079,10 @@ void circular_saw_enemy_update(M_35F0 *moby) { } else { anim = 0; } - if (fast_dec_timer_s16(&data->f144) != 0 && anim != moby->f53) { + if (fast_dec_timer_s16(&data->movement_animation_change_timer) != 0 && + anim != moby->f53) { blend_moby_animation(moby, (void *)anim, 0, (void *)scale_game_frames(10)); - data->f144 = scale_game_frames(0xF); + data->movement_animation_change_timer = scale_game_frames(0xF); } } } else if (moby->state == CIRCULAR_SAW_STATE_POINT_ATTACK || @@ -1080,10 +1100,11 @@ void circular_saw_enemy_update(M_35F0 *moby) { qcopy(np, moby->pos); move_moby_xy_with_collision_constraints( moby, np, v, 0, 0.25f, 1.25f, 0.5f, 0.5235988f); - if (data->f138 == -1 || - point_in_path_xy(np, - ((P_35F0 *)l04_paths[data->f138])->pts, - ((P_35F0 *)l04_paths[data->f138])->count) != 0) { + if (data->movement_boundary_path_index == -1 || + point_in_path_xy( + np, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->pts, + ((P_35F0 *)l04_paths[data->movement_boundary_path_index])->count) != 0) { qcopy(moby->pos, np); } } @@ -1097,17 +1118,17 @@ void circular_saw_enemy_update(M_35F0 *moby) { moby, moby->pos, v, 0, 0.25f, 0.57f, 0.5f, 0.5235988f); } } - data->f78 += frame_time_sq * 9.8f; - moby->pos[2] -= data->f78 - 2.0f; + data->downward_move_step += frame_time_sq * 9.8f; + moby->pos[2] -= data->downward_move_step - 2.0f; { float g = probe_ground_height(moby->pos, 0, 0.5f); moby->pos[2] -= 2.0f; if (moby->pos[2] < g) { moby->pos[2] = g; - data->f78 = 0.0f; + data->downward_move_step = 0.0f; } } - if (moby->pos[2] < data->f120[2] - 5.0f) { + if (moby->pos[2] < data->home_position[2] - 5.0f) { spawn_circular_saw_destruction_effects((char *)moby); mark_moby_for_removal(moby); return; diff --git a/src/overlays/l04/mobys/snow_plow.c b/src/overlays/l04/mobys/snow_plow.c index 44acbebc33..ab69bf61b7 100644 --- a/src/overlays/l04/mobys/snow_plow.c +++ b/src/overlays/l04/mobys/snow_plow.c @@ -70,17 +70,17 @@ typedef struct SnowPlowVars { u8 pad_13C[0x4]; f32 unk140; f32 unk144; - u8 unk148; - u8 unk149; - s16 unk14A; - f32 unk14C; + u8 selected_clip_volume_index; + u8 clip_volume_movement_state; + s16 clip_volume_movement_timer; + f32 saved_return_heading; s32 unk150; u8 pad_154[0xC]; - f32 unk160[4]; - s32 unk170; - s32 unk174; - s32 unk178; - s32 unk17C; + f32 saved_return_position[4]; + s32 hit_recovery_timer; + s32 hit_recovery_active; + s32 saved_draw_distance; + s32 linked_moby_index; u8 manipulator; u8 pad_181[0xF]; u8 unk190; @@ -164,13 +164,13 @@ void snow_plow_update(struct Moby *moby) { moby->draw_dist = 0x7f; moby->update_dist = 0xff; snow_plow_vars->unk138 = snow_plow_vars->unkFC; - snow_plow_vars->unk178 = moby->draw_dist; + snow_plow_vars->saved_draw_distance = moby->draw_dist; } amount = 0.0f; gunship_update(moby); if (moby->oclass != 0x1e4) { - fast_dec_timer_s16(&snow_plow_vars->unk14A); - switch (snow_plow_vars->unk149) { + fast_dec_timer_s16(&snow_plow_vars->clip_volume_movement_timer); + switch (snow_plow_vars->clip_volume_movement_state) { case SNOW_PLOW_SCAN_CLIP_VOLUMES: { float length = snow_plow_vars->unkFC; float target = snow_plow_vars->unk138; @@ -182,12 +182,12 @@ void snow_plow_update(struct Moby *moby) { p = &snow_plow_vars->unk150; i = 0; do { - if (snow_plow_vars->unk14A == 0 && p[i] != -1 && + if (snow_plow_vars->clip_volume_movement_timer == 0 && p[i] != -1 && is_point_inside_clip_volume(&moby->pos, p[i])) { - qcopy(snow_plow_vars->unk160, &moby->pos); - snow_plow_vars->unk148 = *(unsigned char *)&p[i]; - snow_plow_vars->unk149 = 1; - snow_plow_vars->unk14C = moby->rot.z; + qcopy(snow_plow_vars->saved_return_position, &moby->pos); + snow_plow_vars->selected_clip_volume_index = *(unsigned char *)&p[i]; + snow_plow_vars->clip_volume_movement_state = SNOW_PLOW_MOVE_TO_CLIP_VOLUME; + snow_plow_vars->saved_return_heading = moby->rot.z; *(int *)&snow_plow_vars->unk7C = 0; moby->state = SNOW_PLOW_WAIT_TO_RESUME_PATH; snow_plow_vars->unk11C = scale_game_frames(36000); @@ -199,44 +199,48 @@ void snow_plow_update(struct Moby *moby) { } case SNOW_PLOW_MOVE_TO_CLIP_VOLUME: FUN_L00_00258278(moby, - l04_cuboids[snow_plow_vars->unk148].rot.z, + l04_cuboids[snow_plow_vars->selected_clip_volume_index].rot.z, &snow_plow_vars->unk7C, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); - if (vector_distance_xy(&moby->pos, &l04_cuboids[snow_plow_vars->unk148].pos) < 1.0f && + if (vector_distance_xy(&moby->pos, + &l04_cuboids[snow_plow_vars->selected_clip_volume_index].pos) < + 1.0f && fast_difference_between_rotations( - moby->rot.z, l04_cuboids[snow_plow_vars->unk148].rot.z) < 0.17453292f) { - snow_plow_vars->unk149 = 2; - snow_plow_vars->unk14A = scale_game_frames(300); + moby->rot.z, l04_cuboids[snow_plow_vars->selected_clip_volume_index].rot.z) < + 0.17453292f) { + snow_plow_vars->clip_volume_movement_state = SNOW_PLOW_WAIT_BEFORE_RETURN; + snow_plow_vars->clip_volume_movement_timer = scale_game_frames(300); } - fast_vec_sub(&delta, &l04_cuboids[snow_plow_vars->unk148].pos, &moby->pos); + fast_vec_sub( + &delta, &l04_cuboids[snow_plow_vars->selected_clip_volume_index].pos, &moby->pos); fast_vec_normalize(&delta, &delta, frame_time * 3.0f); fast_vec_add(&moby->pos, &moby->pos, &delta); break; case SNOW_PLOW_WAIT_BEFORE_RETURN: - if (snow_plow_vars->unk14A == 0) { + if (snow_plow_vars->clip_volume_movement_timer == 0) { snow_plow_vars->unk7C = amount; - snow_plow_vars->unk149 = 3; + snow_plow_vars->clip_volume_movement_state = SNOW_PLOW_RETURN_TO_SAVED_TRANSFORM; } break; case SNOW_PLOW_RETURN_TO_SAVED_TRANSFORM: FUN_L00_00258278(moby, - snow_plow_vars->unk14C, + snow_plow_vars->saved_return_heading, &snow_plow_vars->unk7C, frame_time_sq * 1.0471976f, frame_time_sq * 3.1415927f, frame_time * 3.1415927f); - if (vector_distance_xy(&moby->pos, snow_plow_vars->unk160) < 1.0f && - fast_difference_between_rotations(moby->rot.z, snow_plow_vars->unk14C) < - 0.034906585f) { - snow_plow_vars->unk149 = 0; - snow_plow_vars->unk14A = scale_game_frames(600); + if (vector_distance_xy(&moby->pos, snow_plow_vars->saved_return_position) < 1.0f && + fast_difference_between_rotations( + moby->rot.z, snow_plow_vars->saved_return_heading) < 0.034906585f) { + snow_plow_vars->clip_volume_movement_state = SNOW_PLOW_SCAN_CLIP_VOLUMES; + snow_plow_vars->clip_volume_movement_timer = scale_game_frames(600); snow_plow_vars->unkFC = amount; snow_plow_vars->unk7C = amount; snow_plow_vars->unk11C = 0; } - fast_vec_sub(&delta, snow_plow_vars->unk160, &moby->pos); + fast_vec_sub(&delta, snow_plow_vars->saved_return_position, &moby->pos); length = fast_vec_length(&delta); step = frame_time * 3.0f; return_delta_ptr = δ @@ -301,8 +305,9 @@ void snow_plow_update(struct Moby *moby) { break; } } - if (snow_plow_vars->unk17C != -1) { - struct Moby *other = (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->unk17C << 8)); + if (snow_plow_vars->linked_moby_index != -1) { + struct Moby *other = + (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->linked_moby_index << 8)); other->draw_dist = 0x7f; switch (moby->oclass) { case SNOW_PLOW_CLASS_WITH_QUARTER_TURN_LINKED_MOBY: @@ -382,8 +387,8 @@ void snow_plow_update(struct Moby *moby) { allocate_voice_for_target_entry(0, 0, moby); else if (moby->oclass != 0x1e6) allocate_voice_for_target_entry(1, 0, moby); - snow_plow_vars->unk170 = scale_game_frames(600); - snow_plow_vars->unk174 = 1; + snow_plow_vars->hit_recovery_timer = scale_game_frames(600); + snow_plow_vars->hit_recovery_active = 1; break; case SNOW_PLOW_CLASS_OFFSET_WITH_TWO_POINT_CART_BURST: sphere_pos.q = 0; @@ -421,8 +426,8 @@ void snow_plow_update(struct Moby *moby) { clear_u64_value(&sphere2.vector); sphere2.zero = 0; collect_mobies_in_sphere(&moby->pos, 6.0f, 0x10, moby, &sphere2); - snow_plow_vars->unk170 = scale_game_frames(600); - snow_plow_vars->unk174 = 1; + snow_plow_vars->hit_recovery_timer = scale_game_frames(600); + snow_plow_vars->hit_recovery_active = 1; break; } fast_vec_scale(&delta, &moby->rot_row0, frame_scale * 0.075f); @@ -719,19 +724,19 @@ void snow_plow_update(struct Moby *moby) { } } moby->hit_slot = 0xff; - if (snow_plow_vars->unk174 == 0) + if (snow_plow_vars->hit_recovery_active == 0) return; - if (fast_dec_timer(&snow_plow_vars->unk170)) { + if (fast_dec_timer(&snow_plow_vars->hit_recovery_timer)) { char *camera = D_L04_00166E00; amount = fast_arc_tan(moby->pos.x - *(float *)(camera + 0x140), moby->pos.y - *(float *)(camera + 0x144)); if (1.5707964f < fast_difference_between_rotations(*(float *)(camera + 0x158), amount)) { moby->collision = moby->pclass->collision; moby->flags &= 0xffbe; - snow_plow_vars->unk174 = 0; - if (snow_plow_vars->unk17C != -1) { + snow_plow_vars->hit_recovery_active = 0; + if (snow_plow_vars->linked_moby_index != -1) { struct Moby *other = - (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->unk17C << 8)); + (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->linked_moby_index << 8)); other->flags &= 0xffbe; } moby->flags |= 0x1000; @@ -740,8 +745,9 @@ void snow_plow_update(struct Moby *moby) { } moby->collision = 0; moby->flags |= 0x41; - if (snow_plow_vars->unk17C != -1) { - struct Moby *other = (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->unk17C << 8)); + if (snow_plow_vars->linked_moby_index != -1) { + struct Moby *other = + (struct Moby *)(D_L04_0015FFD8 + (snow_plow_vars->linked_moby_index << 8)); other->flags |= 0x41; } moby->flags &= 0xefff; diff --git a/src/overlays/l04/mobys/translation_delta_matrix.c b/src/overlays/l04/mobys/translation_delta_matrix.c index e60d8ea43a..52efc38c00 100644 --- a/src/overlays/l04/mobys/translation_delta_matrix.c +++ b/src/overlays/l04/mobys/translation_delta_matrix.c @@ -17,6 +17,9 @@ void translation_delta_matrix_update(char *moby) { enum { MOBY_TRANSLATION_DELTA_STATE_INITIALIZE = 0 }; + enum { + MOBY_TRANSLATION_DELTA_STATE_INITIALIZED = 1 + }; char *moby_vars = ((char *)MOBY(moby)->pvars); float position_delta[4]; fast_vec_sub(position_delta, moby + 0x10, moby_vars + 0xA0); @@ -28,6 +31,6 @@ void translation_delta_matrix_update(char *moby) { moby_vars[0x28] = 4; *(short *)(moby_vars + 0x3E) = 0xD; copy_hero_moby_field_38(moby); - MOBY(moby)->state = 1; + MOBY(moby)->state = MOBY_TRANSLATION_DELTA_STATE_INITIALIZED; } } diff --git a/src/overlays/l04/mobys/woodcut_bot.c b/src/overlays/l04/mobys/woodcut_bot.c index 61aa14586b..113e165225 100644 --- a/src/overlays/l04/mobys/woodcut_bot.c +++ b/src/overlays/l04/mobys/woodcut_bot.c @@ -45,27 +45,27 @@ typedef struct WoodcutBotVars { u8 unk211; u8 unk212; u8 unk213; - u8 unk214; - u8 unk215; + u8 auxiliary_joint_a; + u8 auxiliary_joint_b; u8 pad_216[0xE]; - f32 unk224; + f32 movement_acceleration_step_limit; u8 pad_228[0x4]; f32 unk22C; f32 unk230; f32 unk234; u8 pad_238[0x4]; - f32 unk23C; + f32 movement_gravity_step; f32 unk240; u8 pad_244[0xC]; - u8 unk250; - u8 unk251; - u8 unk252; - u8 unk253; + u8 leg_a_joint; + u8 leg_a_secondary_joint; + u8 leg_a_manipulator_slot_a; + u8 leg_a_manipulator_slot_b; u8 pad_254[0xAC]; - u8 unk300; - u8 unk301; - u8 unk302; - u8 unk303; + u8 leg_b_joint; + u8 leg_b_secondary_joint; + u8 leg_b_manipulator_slot_a; + u8 leg_b_manipulator_slot_b; } WoodcutBotVars; void initialize_woodcut_bot_movement_data(void *moby) { @@ -99,25 +99,25 @@ void initialize_woodcut_bot_movement_data(void *moby) { speed = frameScale * 9.8f; angleHalf = frameScale * 3.1415927f; amount = frameScale * 10.0f; - moby_vars->unk214 = 7; + moby_vars->auxiliary_joint_a = 7; moby_vars->unk210 = 0; moby_vars->unk211 = 0; - moby_vars->unk23C = speed; + moby_vars->movement_gravity_step = speed; moby_vars->unk22C = angleHalf; moby_vars->unk230 = angleFull; moby_vars->unk234 = angleOther; - moby_vars->unk224 = amount; + moby_vars->movement_acceleration_step_limit = amount; moby_vars->unk212 = 0xff; moby_vars->unk213 = 0x10; - moby_vars->unk215 = 7; - moby_vars->unk250 = 10; - moby_vars->unk251 = 8; - moby_vars->unk253 = 12; - moby_vars->unk252 = 14; - moby_vars->unk300 = 11; - moby_vars->unk301 = 9; - moby_vars->unk303 = 13; - moby_vars->unk302 = 15; + moby_vars->auxiliary_joint_b = 7; + moby_vars->leg_a_joint = 10; + moby_vars->leg_a_secondary_joint = 8; + moby_vars->leg_a_manipulator_slot_b = 12; + moby_vars->leg_a_manipulator_slot_a = 14; + moby_vars->leg_b_joint = 11; + moby_vars->leg_b_secondary_joint = 9; + moby_vars->leg_b_manipulator_slot_b = 13; + moby_vars->leg_b_manipulator_slot_a = 15; moby_vars->unk240 = 0.5f; initialize_leg_rig(moby, movement_data); } @@ -197,7 +197,7 @@ typedef struct WBData { /* 0x02A */ char pad02A[6]; /* 0x030 */ float f30; /* 0x034 */ char pad034[4]; - /* 0x038 */ int f38; + /* 0x038 */ int pending_excitement; /* 0x03C */ char pad03C[0x1C]; /* 0x058 */ unsigned char f58; /* 0x059 */ char pad059; @@ -217,31 +217,31 @@ typedef struct WBData { /* 0x0EC */ char pad0EC[0x11]; /* 0x0FD */ unsigned char fFD; /* 0x0FE */ char pad0FE[0x12]; - /* 0x110 */ float f110; - /* 0x114 */ float f114; + /* 0x110 */ float knockback_ascent_target_frame; + /* 0x114 */ float knockback_descent_target_frame; /* 0x118 */ char pad118[8]; - /* 0x120 */ unsigned char f120; - /* 0x121 */ unsigned char f121; + /* 0x120 */ unsigned char manipulator_slot_index; + /* 0x121 */ unsigned char manipulator_attached; /* 0x122 */ char pad122[0xE]; - /* 0x130 */ char f130[0x30]; - /* 0x160 */ char f160[0xB7]; - /* 0x217 */ unsigned char f217; + /* 0x130 */ char recoil_rotation[0x30]; + /* 0x160 */ char leg_rig_movement_data[0xB7]; + /* 0x217 */ unsigned char leg_rig_animation_mode; /* 0x218 */ char pad218[0x198]; - /* 0x3B0 */ float f3B0[4]; - /* 0x3C0 */ unsigned char f3C0; - /* 0x3C1 */ unsigned char f3C1; + /* 0x3B0 */ float initial_position[4]; + /* 0x3C0 */ unsigned char initial_debris_animation_enabled; + /* 0x3C1 */ unsigned char saved_non_recovery_state; /* 0x3C2 */ short t3C2; /* 0x3C4 */ short t3C4; /* 0x3C6 */ short t3C6; - /* 0x3C8 */ float f3C8; + /* 0x3C8 */ float recoil_tilt_angle; /* 0x3CC */ char pad3CC[4]; - /* 0x3D0 */ float f3D0; - /* 0x3D4 */ float f3D4; - /* 0x3D8 */ float f3D8; - /* 0x3DC */ int f3DC; - /* 0x3E0 */ float f3E0; - /* 0x3E4 */ float f3E4; - /* 0x3E8 */ float f3E8; + /* 0x3D0 */ float yaw_turn_spring_state; + /* 0x3D4 */ float reposition_bearing; + /* 0x3D8 */ float reposition_step; + /* 0x3DC */ int movement_path_index; + /* 0x3E0 */ float vertical_fall_step; + /* 0x3E4 */ float recoil_horizontal_step; + /* 0x3E8 */ float target_engagement_range; } WBData; typedef struct WBMoby { @@ -361,10 +361,13 @@ void woodcut_bot_update(WBMoby *m) { float target_distance; float hd; - if (d->f38 != 0 || d->t3C6 != 0) + if (d->pending_excitement != 0 || d->t3C6 != 0) excited = 1; - select_moby_combat_target(m, selected_target_position, excited ? d->f3E8 * 2.0f : d->f3E8); - p = &d->f120; + select_moby_combat_target(m, + selected_target_position, + excited ? d->target_engagement_range * 2.0f + : d->target_engagement_range); + p = &d->manipulator_slot_index; FUN_L00_00263ac8(2.5f, m, 6, p); manipulator = p; pos = m->pos; @@ -439,32 +442,32 @@ void woodcut_bot_update(WBMoby *m) { *(OvlQuad *)v = *(OvlQuad *)(p + 0x10); trooper_knockback_arc(v, &angle, &d->fD8, &d->fDC); trooper_start_knockback(angle, m, d->fC0, 8, 1, 0); - d->f110 = 14.0f; - d->f114 = 24.0f; + d->knockback_ascent_target_frame = 14.0f; + d->knockback_descent_target_frame = 24.0f; m->state = WOODCUT_BOT_DEATH_KNOCKBACK; FUN_L00_00257470(m, 0, -1); d->fB7 = 0x78; trooper_anim_update(m, d->fB0); - d->f3E4 = (2.0f / scale_time(15.0f)) * 2.0f; + d->recoil_horizontal_step = (2.0f / scale_time(15.0f)) * 2.0f; break; case WOODCUT_BOT_REACTION_HIT_RECOVERY_AND_REPOSITION: case WOODCUT_BOT_REACTION_HIT_RECOVERY_WITH_MELEE_WINDOW_GUARD: - d->f3C8 = -0.5235988f; + d->recoil_tilt_angle = -0.5235988f; if (m->anim != 4 || hd < 16.0f || hd > 27.0f) { short hit_source_moby_class; m->fBC |= 5; blend_moby_animation(m, 5, 0, scale_game_frames(3)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_HIT_RECOVERY_AND_REPOSITION; hit_source_moby_class = *(short *)(*(char **)(p + 0x20) + 0xA6); if (hit_source_moby_class == 0x131 || hit_source_moby_class == 0xB0) { - d->f3E4 = (2.0f / scale_time(15.0f)) * 0.5f; + d->recoil_horizontal_step = (2.0f / scale_time(15.0f)) * 0.5f; } else { - d->f3E4 = 2.0f / scale_time(15.0f); + d->recoil_horizontal_step = 2.0f / scale_time(15.0f); } *(OvlQuad *)v = *(OvlQuad *)(p + 0x10); - trooper_knockback_arc(v, &angle, &d->f3E4, &one); + trooper_knockback_arc(v, &angle, &d->recoil_horizontal_step, &one); d->fB7 = 0x78; trooper_anim_update(m, d->fB0); d->t3C4 = scale_game_frames(0xF); @@ -474,11 +477,11 @@ void woodcut_bot_update(WBMoby *m) { case WOODCUT_BOT_REACTION_RECOIL_TO_IDLE: case WOODCUT_BOT_REACTION_RECOIL_TO_IDLE_WITH_COOLDOWNS: blend_moby_animation(m, 6, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_IDLE; - d->f3E4 = 2.0f / scale_time(15.0f); + d->recoil_horizontal_step = 2.0f / scale_time(15.0f); *(OvlQuad *)v = *(OvlQuad *)(p + 0x10); - trooper_knockback_arc(v, &angle, &d->f3E4, &one); + trooper_knockback_arc(v, &angle, &d->recoil_horizontal_step, &one); m->rot[2] = fast_add_rotations(3.1415927f, angle); d->fB7 = 0x78; trooper_anim_update(m, d->fB0); @@ -496,10 +499,10 @@ void woodcut_bot_update(WBMoby *m) { } } m->fA4 = 0xFF; - if (d->f38 != 0) + if (d->pending_excitement != 0) d->t3C6 = scale_game_frames(0xF0); tm = &d->t3C2; - d->f38 = 0; + d->pending_excitement = 0; fast_dec_timer_s16(&d->t3C6); if (m->state == WOODCUT_BOT_MELEE_ATTACK) { @@ -537,15 +540,15 @@ void woodcut_bot_update(WBMoby *m) { d->f28 = 1; d->f29 = 0; m->fBC = 0; - d->f3E0 = 0.0f; + d->vertical_fall_step = 0.0f; d->t3C6 = 0; d->f58 = 8; d->f5A = 8; - qcopy(d->f3B0, pos); - if (d->f121 == 0) + qcopy(d->initial_position, pos); + if (d->manipulator_attached == 0) attach_manipulator(m, 6, manipulator); initialize_woodcut_bot_movement_data(m); - if (d->f3C0 != 0) { + if (d->initial_debris_animation_enabled != 0) { m->state = WOODCUT_BOT_PLAY_ANIMATION_AND_EMIT_DEBRIS; blend_moby_animation(m, 0xB, 0, scale_game_frames(10)); } else { @@ -554,7 +557,8 @@ void woodcut_bot_update(WBMoby *m) { break; case WOODCUT_BOT_IDLE: if (m->f70 & 2) { - if (excited ? (d->f3E8 * 2.0f < target_distance) : (d->f3E8 < target_distance)) { + if (excited ? (d->target_engagement_range * 2.0f < target_distance) + : (d->target_engagement_range < target_distance)) { int anims[6]; memset(anims, 0, 0x18); @@ -568,29 +572,31 @@ void woodcut_bot_update(WBMoby *m) { if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); m->state = WOODCUT_BOT_MELEE_ATTACK; - } else if (excited ? (target_distance < d->f3E8 * 2.0f) : (target_distance < d->f3E8)) { + } else if (excited ? (target_distance < d->target_engagement_range * 2.0f) + : (target_distance < d->target_engagement_range)) { if (m->fBC & 1) { - if (excited || d->f3DC == -1 || + if (excited || d->movement_path_index == -1 || point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { m->state = WOODCUT_BOT_MOVE_TOWARD_TARGET; m->fBC |= 8; } } else { - d->f3D0 = 0.0f; + d->yaw_turn_spring_state = 0.0f; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_TURN_BEFORE_MOVEMENT; m->fBC |= 1; } } if (!excited) { - if (vector_distance_xy(pos, d->f3B0) > 2.0f) { - if (d->f3E8 < target_distance || - (d->f3DC != -1 && point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) == 0)) { + if (vector_distance_xy(pos, d->initial_position) > 2.0f) { + if (d->target_engagement_range < target_distance || + (d->movement_path_index != -1 && + point_in_path_xy(selected_target_position, + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0)) { m->state = WOODCUT_BOT_RETURN_TO_SAVED_POSITION; m->fBC |= 8; } @@ -600,10 +606,10 @@ void woodcut_bot_update(WBMoby *m) { break; case WOODCUT_BOT_WAIT_FOR_ANIMATION_BEFORE_PURSUIT: if (m->anim == 2 && (m->f70 & 2)) { - if (excited || d->f3DC == -1 || + if (excited || d->movement_path_index == -1 || point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { m->state = WOODCUT_BOT_MOVE_TOWARD_TARGET; m->fBC |= 8; } else { @@ -653,19 +659,20 @@ void woodcut_bot_update(WBMoby *m) { if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); m->state = WOODCUT_BOT_MELEE_ATTACK; - } else if (excited ? (target_distance < d->f3E8 * 2.0f) : (target_distance < d->f3E8)) { + } else if (excited ? (target_distance < d->target_engagement_range * 2.0f) + : (target_distance < d->target_engagement_range)) { if (m->fBC & 1) { - if (excited || d->f3DC == -1 || + if (excited || d->movement_path_index == -1 || point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { m->state = WOODCUT_BOT_MOVE_TOWARD_TARGET; m->fBC |= 8; } } else { - d->f3D0 = 0.0f; + d->yaw_turn_spring_state = 0.0f; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_TURN_BEFORE_MOVEMENT; m->fBC |= 1; } @@ -677,17 +684,18 @@ void woodcut_bot_update(WBMoby *m) { if (excited) { if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_MELEE_ATTACK; - } else if (d->f3DC == -1 || point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + } else if (d->movement_path_index == -1 || + point_in_path_xy(selected_target_position, + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { m->state = WOODCUT_BOT_MOVE_TOWARD_TARGET; m->fBC |= 8; } else if (adiff > 1.5707964f) { - d->f3D0 = 0.0f; + d->yaw_turn_spring_state = 0.0f; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_TURN_BEFORE_MOVEMENT; } } else { @@ -697,19 +705,19 @@ void woodcut_bot_update(WBMoby *m) { case WOODCUT_BOT_MOVE_TOWARD_TARGET: { if (m->fBC & 8) { m->fBC &= ~8; - reset_leg_rig_from_animation(m, d->f160); + reset_leg_rig_from_animation(m, d->leg_rig_movement_data); } leg_walker_update(m, - d->f160, + d->leg_rig_movement_data, frame_time * 4.0f, fast_arc_tan(selected_target_position[0] - m->pos[0], selected_target_position[1] - m->pos[1]), frame_time_sq * 20.0f); if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_MELEE_ATTACK; - } else if (d->f3DC != -1) { + } else if (d->movement_path_index != -1) { float v[4]; v[0] = fast_cos(m->rot[2]) * 2.0f; @@ -717,25 +725,26 @@ void woodcut_bot_update(WBMoby *m) { v[2] = 0.0f; p = (unsigned char *)v; fast_vec_add(p, p, pos); - if (point_in_path_xy( - p, ((int *)l04_paths[d->f3DC]) + 4, *((int *)l04_paths[d->f3DC])) == 0) { + if (point_in_path_xy(p, + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0) { if (excited && point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) == 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0) { m->state = WOODCUT_BOT_STOP_MOVEMENT; } else if (point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { - d->f3D0 = 0.0f; + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { + d->yaw_turn_spring_state = 0.0f; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_TURN_BEFORE_MOVEMENT; } } if (!excited) { if (point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) == 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0) { m->state = WOODCUT_BOT_RETURN_TO_SAVED_POSITION; } } @@ -745,26 +754,27 @@ void woodcut_bot_update(WBMoby *m) { case WOODCUT_BOT_RETURN_TO_SAVED_POSITION: if (m->fBC & 8) { m->fBC &= ~8; - reset_leg_rig_from_animation(m, d->f160); + reset_leg_rig_from_animation(m, d->leg_rig_movement_data); } if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_MELEE_ATTACK; } else { if (m->fBC & 8) { m->fBC &= ~8; - reset_leg_rig_from_animation(m, d->f160); + reset_leg_rig_from_animation(m, d->leg_rig_movement_data); } - if (vector_distance_xy(pos, d->f3B0) < 2.0f) { + if (vector_distance_xy(pos, d->initial_position) < 2.0f) { m->state = WOODCUT_BOT_STOP_MOVEMENT; } else { leg_walker_update(m, - d->f160, + d->leg_rig_movement_data, frame_time * 4.0f, - fast_arc_tan(d->f3B0[0] - m->pos[0], d->f3B0[1] - m->pos[1]), + fast_arc_tan(d->initial_position[0] - m->pos[0], + d->initial_position[1] - m->pos[1]), frame_time_sq * 20.0f); - if (d->f3DC != -1) { + if (d->movement_path_index != -1) { float v[4]; v[0] = fast_cos(m->rot[2]) * 2.0f; @@ -772,16 +782,16 @@ void woodcut_bot_update(WBMoby *m) { v[2] = 0.0f; fast_vec_add(v, v, pos); if (point_in_path_xy(v, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) == 0) { - d->f3D0 = 0.0f; + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0) { + d->yaw_turn_spring_state = 0.0f; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_TURN_BEFORE_MOVEMENT; m->fBC |= 0x10; } else if (point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { m->state = WOODCUT_BOT_STOP_MOVEMENT; } } @@ -791,11 +801,12 @@ void woodcut_bot_update(WBMoby *m) { case WOODCUT_BOT_STOP_MOVEMENT: if (target_distance < 3.0f && adiff < 1.5707964f) { blend_moby_animation(m, 4, 0, scale_game_frames(10)); - reset_walker_gait_helpers(d->f160); + reset_walker_gait_helpers(d->leg_rig_movement_data); m->state = WOODCUT_BOT_MELEE_ATTACK; } else { - leg_walker_update(m, d->f160, frame_time * 0.0f, m->rot[2], frame_time_sq * 20.0f); - if (d->f217 == 0) { + leg_walker_update( + m, d->leg_rig_movement_data, frame_time * 0.0f, m->rot[2], frame_time_sq * 20.0f); + if (d->leg_rig_animation_mode == 0) { if (excited) { m->state = WOODCUT_BOT_SELECT_ACTION_WHILE_EXCITED; } else { @@ -815,7 +826,7 @@ void woodcut_bot_update(WBMoby *m) { if (m->anim2 != 5 || (m->anim == 5 && (m->f70 & 2))) { if (m->fBC & 4) { m->fBC &= ~4; - if (d->f3DC == -1) { + if (d->movement_path_index == -1) { blend_moby_animation(m, 0, 0, scale_game_frames(10)); m->state = WOODCUT_BOT_IDLE; d->t3C2 = 0; @@ -844,12 +855,12 @@ void woodcut_bot_update(WBMoby *m) { build_spherical_offset(v, 6.0f, candidate_reposition_bearing, m->rot[1]); fast_vec_add(v, v, pos); if (point_in_path_xy(v, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) != 0) { + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) != 0) { found = 1; blend_moby_animation(m, 0x10, 0, scale_game_frames(10)); - d->f3D4 = candidate_reposition_bearing; - d->f3D8 = 0.0f; + d->reposition_bearing = candidate_reposition_bearing; + d->reposition_step = 0.0f; break; } } @@ -875,28 +886,28 @@ void woodcut_bot_update(WBMoby *m) { if (hd < 28.0f && m->anim == 0x10) { float reposition_step_limit = frame_scale * 0.11111111f; - if (d->f3D8 < reposition_step_limit) { - d->f3D8 = d->f3D8 + frame_time_sq * 20.0f; + if (d->reposition_step < reposition_step_limit) { + d->reposition_step = d->reposition_step + frame_time_sq * 20.0f; } else { - d->f3D8 = reposition_step_limit; + d->reposition_step = reposition_step_limit; } - build_spherical_offset(v, d->f3D8, d->f3D4, m->rot[1]); + build_spherical_offset(v, d->reposition_step, d->reposition_bearing, m->rot[1]); fast_vec_add(pos, pos, v); m->rot[2] = spring_turn(m->rot[2], fast_arc_tan(selected_target_position[0] - m->pos[0], selected_target_position[1] - m->pos[1]), - &d->f3D0, + &d->yaw_turn_spring_state, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); - } else if (d->f3D8 > 0.0f) { - d->f3D8 -= frame_time_sq * 200.0f; - build_spherical_offset(v, d->f3D8, d->f3D4, m->rot[1]); + } else if (d->reposition_step > 0.0f) { + d->reposition_step -= frame_time_sq * 200.0f; + build_spherical_offset(v, d->reposition_step, d->reposition_bearing, m->rot[1]); fast_vec_add(pos, pos, v); m->rot[2] = spring_turn(m->rot[2], fast_arc_tan(selected_target_position[0] - m->pos[0], selected_target_position[1] - m->pos[1]), - &d->f3D0, + &d->yaw_turn_spring_state, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); @@ -909,9 +920,10 @@ void woodcut_bot_update(WBMoby *m) { break; case WOODCUT_BOT_TURN_BEFORE_MOVEMENT: if (m->anim == 0x10 && (m->f70 & 2)) { - if ((m->fBC & 0x10) || point_in_path_xy(selected_target_position, - ((int *)l04_paths[d->f3DC]) + 4, - *((int *)l04_paths[d->f3DC])) == 0) { + if ((m->fBC & 0x10) || + point_in_path_xy(selected_target_position, + ((int *)l04_paths[d->movement_path_index]) + 4, + *((int *)l04_paths[d->movement_path_index])) == 0) { m->state = WOODCUT_BOT_RETURN_TO_SAVED_POSITION; blend_moby_animation(m, 0, 0, scale_game_frames(10)); } else { @@ -921,8 +933,9 @@ void woodcut_bot_update(WBMoby *m) { m->fBC = (m->fBC | 8) & ~0x10; } else if (m->fBC & 0x10) { m->rot[2] = spring_turn(m->rot[2], - fast_arc_tan(d->f3B0[0] - m->pos[0], d->f3B0[1] - m->pos[1]), - &d->f3D0, + fast_arc_tan(d->initial_position[0] - m->pos[0], + d->initial_position[1] - m->pos[1]), + &d->yaw_turn_spring_state, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 4.1887903f); @@ -930,7 +943,7 @@ void woodcut_bot_update(WBMoby *m) { m->rot[2] = spring_turn(m->rot[2], fast_arc_tan(selected_target_position[0] - m->pos[0], selected_target_position[1] - m->pos[1]), - &d->f3D0, + &d->yaw_turn_spring_state, 0.03f, 0.3f, frame_time * 6.4577184f); @@ -955,37 +968,37 @@ void woodcut_bot_update(WBMoby *m) { float recoil_scratch[16]; trooper_anim_finish(m, d->fB0); - if (d->f3E4 > 0.0f) { + if (d->recoil_horizontal_step > 0.0f) { struct Hero *h = &hero; recoil_scratch[0] = fast_cos(fast_arc_tan(m->pos[0] - h->motion.pos.f[0], m->pos[1] - h->motion.pos.f[1])) * - d->f3E4; + d->recoil_horizontal_step; recoil_scratch[1] = fast_sin(fast_arc_tan(m->pos[0] - h->motion.pos.f[0], m->pos[1] - h->motion.pos.f[1])) * - d->f3E4; + d->recoil_horizontal_step; recoil_scratch[2] = 0.0f; fast_vec_add(recoil_scratch, recoil_scratch, pos); - d->f3E4 += -2.0f / (scale_time(15.0f) * scale_time(15.0f)); + d->recoil_horizontal_step += -2.0f / (scale_time(15.0f) * scale_time(15.0f)); move_moby_xy_with_collision_constraints( m, pos, recoil_scratch, 1, 0.25f, 1.0f, 0.75f, 0.87266463f); } - d->f3C8 *= 0.96f; - build_axis_rotation_quaternion(recoil_scratch, 1, d->f3C8); - build_axis_rotation_quaternion(d->f130, 2, 0.0f); - multiply_quaternions(d->f130, d->f130, recoil_scratch); + d->recoil_tilt_angle *= 0.96f; + build_axis_rotation_quaternion(recoil_scratch, 1, d->recoil_tilt_angle); + build_axis_rotation_quaternion(d->recoil_rotation, 2, 0.0f); + multiply_quaternions(d->recoil_rotation, d->recoil_rotation, recoil_scratch); if (m->state != WOODCUT_BOT_HIT_RECOVERY_AND_REPOSITION) - d->f3C1 = m->state; + d->saved_non_recovery_state = m->state; if (m->state != WOODCUT_BOT_MOVE_TOWARD_TARGET && m->fBC != 6) { float g; - d->f3E0 += frame_time_sq * 9.8f; - m->pos[2] -= d->f3E0 - 2.0f; + d->vertical_fall_step += frame_time_sq * 9.8f; + m->pos[2] -= d->vertical_fall_step - 2.0f; g = probe_ground_height(pos, 0, 0.5f); m->pos[2] -= 2.0f; if (m->pos[2] < g) { m->pos[2] = g; - d->f3E0 = 0.0f; + d->vertical_fall_step = 0.0f; } if (m->pos[2] < 2.0f) { FUN_L00_00257470(m, 0, -1); diff --git a/src/overlays/l04/mobys/woodcut_bot_debris.c b/src/overlays/l04/mobys/woodcut_bot_debris.c index e8ee88e2b9..93ee1db6f3 100644 --- a/src/overlays/l04/mobys/woodcut_bot_debris.c +++ b/src/overlays/l04/mobys/woodcut_bot_debris.c @@ -15,7 +15,7 @@ typedef struct { u8 pad0[4]; f32 f4; - f32 f8; + f32 collision_radius; s16 hC; s16 hE; f32 vel[4] __attribute__((aligned(16))); @@ -27,7 +27,7 @@ typedef struct { f32 pos[4] __attribute__((aligned(16))); u8 b20, b21, b22, b23; u8 pad24[8]; - f32 f2c; + f32 uniform_scale; u8 pad30[0x10]; f32 f40, f44, f48; u8 pad4c[0x2C]; @@ -60,7 +60,7 @@ void woodcut_bot_debris_update(M2e5178 *entity) { if (entity->pos[2] < pv->f4 - 3.0f) { entity->b20 = 1; } else if (fast_dec_timer_s16(&pv->hE) && pv->hC != 0 && - coll_sphere(entity->pos, 2, 0, pv->f8)) { + coll_sphere(entity->pos, 2, 0, pv->collision_radius)) { collision_normal = coll_hit_normal_lui; if (fast_vec_dot(pv->vel, collision_normal) < 0.0f) { qcopy(entity->pos, collision_normal - 1); @@ -78,7 +78,7 @@ void woodcut_bot_debris_update(M2e5178 *entity) { } break; case ENTITY_MOTION_STATE_DECAY_AND_REMOVE: - entity->f2c *= 0.9f; + entity->uniform_scale *= 0.9f; if (entity->b23 < 4) { mark_moby_for_removal(entity); } else { diff --git a/src/overlays/l05/hero/apply_hero_ground_material_effects.c b/src/overlays/l05/hero/apply_hero_ground_material_effects.c index ed7644f146..58564cc06a 100644 --- a/src/overlays/l05/hero/apply_hero_ground_material_effects.c +++ b/src/overlays/l05/hero/apply_hero_ground_material_effects.c @@ -30,6 +30,10 @@ extern int hero_set_state(int, int) __asm__("FUN_L05_0024cee8"); void apply_hero_ground_material_effects(void) __asm__("FUN_L05_00239fc0"); void apply_hero_ground_material_effects(void) { + enum { + GROUND_MATERIAL_SINK_SURFACE_PROBE_THROUGH = 3, + GROUND_MATERIAL_SINK_SURFACE_CONTACT_BYPASS = 11 + }; u8 save = hero.ground_sound_class; s16 saved_ground_type = hero.ground_type; f32 water_depth; @@ -61,7 +65,7 @@ void apply_hero_ground_material_effects(void) { hero.wading = 1; hero.base_condition = 1; } - if (saved_ground_type == 3) + if (saved_ground_type == GROUND_MATERIAL_SINK_SURFACE_PROBE_THROUGH) hero.selector_3 = 1; if (current_level_index == 13 && hero.state.current != 0x7B && FUN_L00_001f0d60_239fc0( @@ -69,7 +73,7 @@ void apply_hero_ground_material_effects(void) { collision_hit_material() == 11) { goto s7B; } - if (saved_ground_type == 11) + if (saved_ground_type == GROUND_MATERIAL_SINK_SURFACE_CONTACT_BYPASS) hero.selector_11 = 1; if (saved_ground_type == 5) hero.selector_5 = 1; @@ -172,6 +176,9 @@ void update_hero_ground_contact(void) { GROUND_MATERIAL_SINK_SURFACE_PROBE_THROUGH = 3, GROUND_MATERIAL_SINK_SURFACE_CONTACT_BYPASS = 0xB }; + enum { + GROUND_MATERIAL_STATE_DEPENDENT_CONTACT_BYPASS = 1 + }; V shared_probe_endpoint, ground_probe_endpoint, ground_vector_scratch, side_probe_endpoint, unused_probe_vector, hit_normal_angles, normalized_hit_normal; f32 f; @@ -251,7 +258,8 @@ void update_hero_ground_contact(void) { hero.sink_surface_z = D_L05_00174268; goto d1; } - if (hero.ground_type == 1 && (u32)(hero.state.current - 0x7C) < 2) { + if (hero.ground_type == GROUND_MATERIAL_STATE_DEPENDENT_CONTACT_BYPASS && + (u32)(hero.state.current - 0x7C) < 2) { goto d1; } if (HH.moby != 0) { diff --git a/src/overlays/l05/hero/hero_set_state.c b/src/overlays/l05/hero/hero_set_state.c index 73fd29270e..dc66fb77a5 100644 --- a/src/overlays/l05/hero/hero_set_state.c +++ b/src/overlays/l05/hero/hero_set_state.c @@ -81,17 +81,19 @@ extern void draw_hud_timer(void) __asm__("FUN_L05_00266710"); extern int hero_set_state(int, int) __asm__("FUN_L05_0024cee8"); extern char level05_hero_water_surface_jump_velocity_keys[] __asm__("D_L05_0017C3C0"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int animation_request_mode) { int saved_state_step; char *moby; int old20A7; { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + animation_request_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L05_0015F5C4 == 2 || D_L05_0015F5C4 == 6) && b != 2) + if ((D_L05_0015F5C4 == 2 || D_L05_0015F5C4 == 6) && + animation_request_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; @@ -163,7 +165,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (animation_request_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -179,7 +181,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (animation_request_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -205,7 +207,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -216,7 +218,7 @@ int hero_set_state(int requested_state, int b) { p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.momentum, frame_time * 3.5f); - if (b) + if (animation_request_mode) set_hero_animation(0x7C, 0, (float)scale_game_frames(0xC)); break; } @@ -232,7 +234,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->unk6A0 = 0; p->unk690 = p->motion.pos.f[2] - p->unk69C; - if (b) + if (animation_request_mode) set_hero_animation(0x74, 0, (float)scale_game_frames(0xB)); break; } @@ -254,7 +256,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->unk8E0 = 0; n = scale_game_frames(0xC); - if (b) + if (animation_request_mode) set_hero_animation(0x3B, 0, (float)n); } break; @@ -275,7 +277,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0xB); if (p->state.prev == 0x33) n = scale_game_frames(0xF); - if (b) + if (animation_request_mode) set_hero_animation(0x3D, 0, (float)n); break; } @@ -292,7 +294,7 @@ int hero_set_state(int requested_state, int b) { t = -2; if (p->state.prev != 0x35) t = n; - if (b) + if (animation_request_mode) set_hero_animation(0x3C, 0, (float)t); break; } @@ -365,7 +367,7 @@ int hero_set_state(int requested_state, int b) { s->motion.momentum.f[2] = 0.0f; FUN_L00_0025f730(&s->motion.momentum, frame_time * 5.5f); s->rand_timer.range = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x16)); } break; @@ -389,7 +391,7 @@ int hero_set_state(int requested_state, int b) { int t = scale_game_frames(0x4D); struct Hero *q = &hero; q->invulnerable_frames = t; - if (b) { + if (animation_request_mode) { if (q->state.current == 0x75) { set_hero_animation(0x70, 3, -3.0f); } else { @@ -413,7 +415,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->drown_sink_speed = 0; p->unk698 = scale_game_frames(0x2D); p->rand_timer.range = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x65, 0, (float)scale_game_frames(0x11)); break; } @@ -453,7 +455,7 @@ int hero_set_state(int requested_state, int b) { v = (char *)&hero.motion.momentum; qcopy(v, v - 0x40); } - if (b) + if (animation_request_mode) set_hero_animation(0x5F, 0, (float)scale_game_frames(0xA)); break; } @@ -464,7 +466,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(0x80, 0, (float)scale_game_frames(0xA)); break; } @@ -541,7 +543,7 @@ int hero_set_state(int requested_state, int b) { q->board_vertical_speed = -fast_vec_dot(&q->gravity_dir, &q->motion.displacement); } } - if (b) { + if (animation_request_mode) { struct Hero *t = &hero; if (t->race_ammo != 0) { set_hero_animation(0x7D, 0, (float)scale_game_frames(5)); @@ -557,7 +559,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 8; p->item_select_blocked = 1; p->unk870 = 0; - if (b) + if (animation_request_mode) set_hero_animation( select_hero_hoverboard_animation_variant(), 5, (float)scale_game_frames(8)); break; @@ -610,7 +612,7 @@ int hero_set_state(int requested_state, int b) { gravity_flatten((float *)w, (float *)w); FUN_L00_0025f730(w, frame_time * 9.5f); *(int *)(hero_velocity_bytes + 0xF18) = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x11)); } break; @@ -622,7 +624,7 @@ int hero_set_state(int requested_state, int b) { release_and_clear_hero_voice_slots(); p->boost_pad_timer = 0; p->rand_timer.range = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x62, 4, (float)scale_game_frames(4)); break; } @@ -630,7 +632,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_request_mode) set_hero_animation(0x46, 0, (float)scale_game_frames(8)); break; } @@ -638,7 +640,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_request_mode) set_hero_animation(0x47, 0, (float)scale_game_frames(8)); break; } @@ -646,7 +648,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_request_mode) set_hero_animation(0x48, 0, (float)scale_game_frames(8)); break; } @@ -658,7 +660,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L05_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = get_hero_idle_animation_index(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && animation_request_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -747,7 +749,7 @@ int hero_set_state(int requested_state, int b) { scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (animation_request_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L05_0015F6E8[v->state.step], (float)n); } @@ -763,7 +765,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (animation_request_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -782,7 +784,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; fill_transfer_words((char *)p + 0x9D0, 0, 0x20); qcopy(&p->motion.momentum, &p->motion.displacement); - if (b) + if (animation_request_mode) set_hero_animation(0x64, 0, (float)scale_game_frames(0xF)); break; } @@ -804,7 +806,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (animation_request_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -821,7 +823,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (animation_request_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -848,7 +850,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (animation_request_mode) { if (q->moby->seq == get_hero_idle_animation_index(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -875,7 +877,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (animation_request_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -888,7 +890,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (animation_request_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -900,7 +902,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (animation_request_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -956,7 +958,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (animation_request_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -972,7 +974,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -984,7 +986,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (animation_request_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -999,7 +1001,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (animation_request_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -1014,7 +1016,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -1023,7 +1025,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_request_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -1032,7 +1034,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_request_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -1041,7 +1043,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -1065,7 +1067,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (animation_request_mode) { if (q->vehicle_mode == 3) { set_hero_animation(6, 0, (float)scale_game_frames(8)); return 1; @@ -1091,7 +1093,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (animation_request_mode) { set_hero_animation(0x13, 0, (float)animation_timing_parameter); } break; @@ -1106,7 +1108,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (animation_request_mode) { set_hero_animation(0x13, 0, (float)animation_timing_setting); } break; @@ -1472,7 +1474,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (animation_request_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1566,7 +1568,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (animation_request_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1603,7 +1605,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (animation_request_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1618,7 +1620,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (animation_request_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1649,7 +1651,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (animation_request_mode) { char *m; int j = 0; int n; @@ -1680,7 +1682,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (animation_request_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1699,7 +1701,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (animation_request_mode) { char *m; HeroTableRow2C *e = &D_L05_0017C088[p->attack_record]; int k = e->kind; @@ -1720,7 +1722,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (animation_request_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1742,7 +1744,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_request_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = level05_hero_animation_blend_curves[q->anim_blend_curve] [(q->anim_blend_step)++]; @@ -1767,7 +1769,7 @@ int hero_set_state(int requested_state, int b) { r->rand_timer.range = 0x68; r->target_speed = 0.0f; r->ground_speed = 0.0f; - if (b) + if (animation_request_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); } break; @@ -1781,7 +1783,7 @@ int hero_set_state(int requested_state, int b) { p->collision_off_frames = 0x2710; allocate_hero_voice_for_entry(9, 0); p->rand_timer.range = 0x68; - if (b) + if (animation_request_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); break; } @@ -1807,7 +1809,7 @@ int hero_set_state(int requested_state, int b) { p->collision_off_frames = 0x2710; p->sink_surface_z = p->ground_z.f; allocate_hero_voice_for_entry(9, 0); - if (b) + if (animation_request_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); } break; @@ -1816,7 +1818,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (animation_request_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1824,7 +1826,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (animation_request_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1835,7 +1837,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1846,7 +1848,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1863,7 +1865,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (animation_request_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1873,7 +1875,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_request_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1886,7 +1888,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_request_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = level05_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1907,7 +1909,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (animation_request_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1959,7 +1961,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (animation_request_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } @@ -1970,7 +1972,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (animation_request_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -1980,7 +1982,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (animation_request_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } diff --git a/src/overlays/l05/hero/update_hero_motion_by_state.c b/src/overlays/l05/hero/update_hero_motion_by_state.c index dfb92d1cc9..9b0828fcca 100644 --- a/src/overlays/l05/hero/update_hero_motion_by_state.c +++ b/src/overlays/l05/hero/update_hero_motion_by_state.c @@ -120,7 +120,7 @@ struct PlayerJointTable { }; extern s32 D_L05_0015F688 __attribute__((sda)); -s32 D_L05_0015F68C = 0; +s32 l05_look_timer_expiry_count __asm__("D_L05_0015F68C") = 0; extern u8 D_L05_001671D8[]; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); @@ -177,7 +177,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -272,7 +272,7 @@ void update_hero_motion_by_state(void) __asm__("FUN_L05_00244a70"); void update_hero_motion_by_state(void) { struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 state_step_on_entry = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 vector_and_hit_scratch; @@ -325,7 +325,7 @@ void update_hero_motion_by_state(void) { D_L05_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L05_0015F68C++; + l05_look_timer_expiry_count++; } } } @@ -703,11 +703,11 @@ void update_hero_motion_by_state(void) { vector_and_hit_scratch.f[1] += random_float_between(0.0f, 0.03f); vector_and_hit_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -3101,7 +3101,7 @@ void update_hero_motion_by_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (state_step_on_entry != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l05/mobys/amoeboid.c b/src/overlays/l05/mobys/amoeboid.c index 161decf5b6..a594557d0c 100644 --- a/src/overlays/l05/mobys/amoeboid.c +++ b/src/overlays/l05/mobys/amoeboid.c @@ -16,7 +16,8 @@ extern float fast_sin(float); extern float approach_angle(float *, float *, float, float, float, float) __asm__("FUN_L00_0025be00"); -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern void FUN_L01_0026d930(char *p); extern void handle_amoeboid_hits(unsigned char *m) __asm__("FUN_L05_002daf58"); extern void spawn_amoeboid_particles(unsigned char *moby) __asm__("FUN_L05_002db018"); @@ -34,7 +35,7 @@ typedef struct AmoeboidVars { f32 unk68; f32 unk6C; u8 pad_70[0x14]; - f32 unk84; + f32 movement_speed_cap; u8 pad_88[0x28]; s32 path_B0; s32 unkB4; @@ -69,7 +70,7 @@ void amoeboid_update(struct Moby *moby) { int r = truncate_float_to_s32(409.6f); float movement_speed_limit = frame_time * 4.0f; moby_data->unk60 = r; - moby_data->unk84 = movement_speed_limit; + moby_data->movement_speed_cap = movement_speed_limit; } break; case AMOEBOID_FOLLOW_PATH: { @@ -85,7 +86,8 @@ void amoeboid_update(struct Moby *moby) { facing_direction[0] = fast_cos(moby->rot.z); facing_direction[1] = fast_sin(moby->rot.z); facing_direction[2] = 0.0f; - FUN_L00_00258b50(moby, &moby_data->unk60, facing_direction, &moby_data->unk40, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, &moby_data->unk60, facing_direction, &moby_data->unk40, 1.0f); if (fast_dec_timer(&moby_data->timer_B8) != 0 || vector_distance_xy(&moby->pos, ((char *)l05_paths[moby_data->path_B0]) + diff --git a/src/overlays/l05/mobys/drain_cover.c b/src/overlays/l05/mobys/drain_cover.c index 1fedc2de87..5a9559ccb4 100644 --- a/src/overlays/l05/mobys/drain_cover.c +++ b/src/overlays/l05/mobys/drain_cover.c @@ -151,15 +151,15 @@ typedef struct { char f20[0x40]; float vel[4]; float home[4]; - float f80; - float f84; - float f88; + float rise_height; + float hover_height_above_home; + float hover_duration; int timer; char pad90[8]; - float f98; - float f9C; - float fA0; - float fA4; + float tilt_x_phase; + float tilt_y_phase; + float tilt_x_phase_increment; + float tilt_y_phase_increment; int sound; DrainCoverLid *lid; } DrainCoverData; @@ -178,7 +178,7 @@ typedef struct { char pad00[0x80]; float pos[4]; char pad90[0x1FF0]; - int f2080; + int nearby_effect_owner; } DrainCoverHero; void drain_cover_update(DrainCoverMoby *moby) __asm__("FUN_L05_0030e7f8"); @@ -232,13 +232,15 @@ void drain_cover_update(DrainCoverMoby *moby) { drain_cover_data->timer = scale_game_frames(0x78); drain_cover_data->sound = 0xFF; qcopy(drain_cover_data->home, moby->pos); - drain_cover_data->f98 = random_angle_radians(); - drain_cover_data->f9C = random_angle_radians(); - drain_cover_data->fA0 = randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; - drain_cover_data->fA4 = randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; - minimum_rise_height = drain_cover_data->f84 + 1.0f; - if (drain_cover_data->f80 <= minimum_rise_height) { - drain_cover_data->f80 = minimum_rise_height; + drain_cover_data->tilt_x_phase = random_angle_radians(); + drain_cover_data->tilt_y_phase = random_angle_radians(); + drain_cover_data->tilt_x_phase_increment = + randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; + drain_cover_data->tilt_y_phase_increment = + randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; + minimum_rise_height = drain_cover_data->hover_height_above_home + 1.0f; + if (drain_cover_data->rise_height <= minimum_rise_height) { + drain_cover_data->rise_height = minimum_rise_height; } break; case DRAIN_COVER_WAIT_TO_RISE: @@ -247,7 +249,7 @@ void drain_cover_update(DrainCoverMoby *moby) { fast_dec_timer(&drain_cover_data->timer) != 0) { moby->state = DRAIN_COVER_RISE; clear_u64_value(drain_cover_data->vel); - drain_cover_data->vel[2] = square_root(drain_cover_data->f80 * 2.0f * + drain_cover_data->vel[2] = square_root(drain_cover_data->rise_height * 2.0f * (l05_drain_cover_gravity * frame_time_sq)); } else if ((float)drain_cover_data->timer < (float)scale_game_frames(*(int *)&D_L05_00161DB8) * 0.5f) { @@ -315,8 +317,9 @@ void drain_cover_update(DrainCoverMoby *moby) { drain_cover_data->vel[2] - l05_drain_cover_gravity * frame_time_sq; if (drain_cover_data->vel[2] <= 0.0f) { moby->state = DRAIN_COVER_HOVER; - drain_cover_data->home[3] = drain_cover_data->f84 - 0.5f; - drain_cover_data->timer = truncate_float_to_s32(scale_time(drain_cover_data->f88)); + drain_cover_data->home[3] = drain_cover_data->hover_height_above_home - 0.5f; + drain_cover_data->timer = + truncate_float_to_s32(scale_time(drain_cover_data->hover_duration)); } break; case DRAIN_COVER_HOVER: @@ -329,10 +332,10 @@ void drain_cover_update(DrainCoverMoby *moby) { &moby->pos[2], &drain_cover_data->vel[2]); if (drain_cover_data->vel[2] == 0.0f) { - if (drain_cover_data->home[3] > drain_cover_data->f84) { - drain_cover_data->home[3] = drain_cover_data->f84 - 0.5f; + if (drain_cover_data->home[3] > drain_cover_data->hover_height_above_home) { + drain_cover_data->home[3] = drain_cover_data->hover_height_above_home - 0.5f; } else { - drain_cover_data->home[3] = drain_cover_data->f84 + 0.5f; + drain_cover_data->home[3] = drain_cover_data->hover_height_above_home + 0.5f; } } if (fast_dec_timer(&drain_cover_data->timer) != 0) { @@ -357,10 +360,12 @@ void drain_cover_update(DrainCoverMoby *moby) { moby->state = DRAIN_COVER_WAIT_TO_RISE; drain_cover_data->timer = scale_game_frames(0x78); qcopy(moby->pos, drain_cover_data->home); - drain_cover_data->f98 = random_angle_radians(); - drain_cover_data->f9C = random_angle_radians(); - drain_cover_data->fA0 = randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; - drain_cover_data->fA4 = randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; + drain_cover_data->tilt_x_phase = random_angle_radians(); + drain_cover_data->tilt_y_phase = random_angle_radians(); + drain_cover_data->tilt_x_phase_increment = + randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; + drain_cover_data->tilt_y_phase_increment = + randf_sym(70.0f, 120.0f) * 0.017453292f * frame_time; } break; } @@ -374,7 +379,7 @@ void drain_cover_update(DrainCoverMoby *moby) { effect_velocity[2] = 0.0f; qcopy(effect_position, hero->pos); effect_position[2] += 0.75f; - spawn_nearby_effect((void *)hero->f2080, + spawn_nearby_effect((void *)hero->nearby_effect_owner, (int)moby, 1, effect_position, @@ -469,7 +474,7 @@ extern float fast_add_rotations(float, float); typedef struct DrainCoverVars { u8 pad_0[0x90]; - f32 unk90; + f32 tilt_x_velocity; f32 unk94; f32 unk98; f32 unk9C; @@ -514,7 +519,8 @@ void update_drain_cover_tilt(char *moby, float turn_scale, float speed_scale) { rate0 = drain_cover_tilt_acceleration_gp * speed_scale * 0.017453292f * frame_time_sq; rate1 = drain_cover_tilt_deceleration_gp * speed_scale * 0.017453292f * frame_time_sq; limit = drain_cover_tilt_max_speed_gp * 0.017453292f * frame_time; - approach_angle(&MOBY(moby)->rot.x, target0, &drain_cover_vars->unk90, rate0, rate1, limit); + approach_angle( + &MOBY(moby)->rot.x, target0, &drain_cover_vars->tilt_x_velocity, rate0, rate1, limit); approach_angle(&MOBY(moby)->rot.y, target1, &drain_cover_vars->unk94, diff --git a/src/overlays/l05/mobys/elevator_with_button.c b/src/overlays/l05/mobys/elevator_with_button.c index 143e365aae..7630df9da8 100644 --- a/src/overlays/l05/mobys/elevator_with_button.c +++ b/src/overlays/l05/mobys/elevator_with_button.c @@ -263,7 +263,11 @@ extern short lift_camera_height_offset_gp __asm__("D_L05_00161EC0") __attribute_ extern short lift_camera_pitch_degrees_gp __asm__("D_L05_00161EC4") __attribute__((sda)); extern short lift_camera_distance_along_facing_gp __asm__("D_L05_00161EC8") __attribute__((sda)); -void FUN_L05_00315ee0(char *lift_moby, char *camera_position, char *camera_rotation) { +void compute_lift_camera_view(char *lift_moby, + char *camera_position, + char *camera_rotation) __asm__("FUN_L05_00315ee0"); + +void compute_lift_camera_view(char *lift_moby, char *camera_position, char *camera_rotation) { float pitch_degrees; fast_vec_normalize( camera_position, lift_moby + 0xC0, *(float *)&lift_camera_distance_along_facing_gp); @@ -277,7 +281,9 @@ void FUN_L05_00315ee0(char *lift_moby, char *camera_position, char *camera_rotat } /* Ported from rac1-decomp (src/overlays/l05_rilgar/vendor_0030EB68.c: func_L05_00317438), where it is exact; names translated to the US level program. */ -void FUN_L05_00315f70(char *moby) { +void position_lift_marker_ring_points(char *moby) __asm__("FUN_L05_00315f70"); + +void position_lift_marker_ring_points(char *moby) { int i = 0; char *lift_vars = ((char *)MOBY(moby)->pvars); char *tab = ((char *)l05_paths[*(int *)(lift_vars + 0x68)]); diff --git a/src/overlays/l05/mobys/extermibot.c b/src/overlays/l05/mobys/extermibot.c index 1b02c8273c..077a88fb6f 100644 --- a/src/overlays/l05/mobys/extermibot.c +++ b/src/overlays/l05/mobys/extermibot.c @@ -45,7 +45,8 @@ extern float D_0015ED70; float absolute_float(float input) __asm__("func_001F99C0"); extern float approach_angle(float *, float *, float, float, float, float) __asm__("FUN_L00_0025be00"); -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern void FUN_L01_0026d930(char *p); /* Extermibot update: wakes from its dormant pose, walks its path, closes in on the target and strikes it, bursts into sparks between strikes, and dies on a hit. */ /* Ported from rac1-decomp (src/overlays/l05_rilgar/vendor_002D28D0.c: func_L05_003033A0), where it is exact; names translated to the US level program. */ @@ -61,7 +62,7 @@ extern float fast_vec_dist(void *, void *); extern int D_L05_0015FFD8; extern int D_L05_0015F5C4; extern int step_moby_motion(void *, void *) __asm__("FUN_L00_0025c698"); -extern int FUN_L00_00261b48(int, void *, void *, void *); +extern int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); extern int is_point_inside_clip_volume(void *point, int volume_index) __asm__("func_00214720"); extern s32 follow_path(void *, s32, s32, void *, s32, void *, f32) __asm__("FUN_L01_00276fe8"); extern s32 @@ -129,21 +130,21 @@ typedef struct ExtermibotVars { f32 goal[4]; f32 yaw_vel; f32 unk294; - f32 unk298; + f32 path_heading_offset_degrees; u8 pad_29C[0x10]; s32 unk2AC; - s32 unk2B0; - s32 unk2B4; - s32 unk2B8; - s32 unk2BC; + s32 target_pursuit_timer; + s32 hide_below_start_on_init; + s32 activation_moby_index; + s32 activation_clip_volume_index; s32 path; s32 path_pos; u8 pad_2C8[0x8]; s16 unk2D0; - s16 unk2D2; + s16 wander_elapsed_frames; u8 pad_2D4[0x4]; - f32 unk2D8; - s32 unk2DC; + f32 glow_phase_angle; + s32 temporary_flags_applied; } ExtermibotVars; /* Moby class 623 */ @@ -163,10 +164,10 @@ void extermibot_update(unsigned char *moby) { manipulator_set_scale(&moby_data->manipulator, 2.5f); if (D_L05_0015F5C4 == 2 && ((MOBY(moby)->flags ^ 1) & 1)) { - moby_data->unk2DC = 1; + moby_data->temporary_flags_applied = 1; MOBY(moby)->flags |= 0x41; - } else if (moby_data->unk2DC != 0 && D_L05_0015F5C4 == 0) { - moby_data->unk2DC = 0; + } else if (moby_data->temporary_flags_applied != 0 && D_L05_0015F5C4 == 0) { + moby_data->temporary_flags_applied = 0; MOBY(moby)->flags &= 0xFFBE; } if (MOBY(moby)->visible != 0 && @@ -183,7 +184,7 @@ void extermibot_update(unsigned char *moby) { qcopy(&moby_data->unk270, moby + 0x10); moby_data->health = 2.0f; moby_data->unk29 = 0; - moby_data->unk2B0 = 0; + moby_data->target_pursuit_timer = 0; moby_data->unk28 = 1; moby_data->unk30 = 1.0f; moby_data->max_health = 2; @@ -201,20 +202,20 @@ void extermibot_update(unsigned char *moby) { moby_data->speed = initial_movement_speed; } } - moby_data->unk2D8 = random_angle_radians(); + moby_data->glow_phase_angle = random_angle_radians(); if (random_integer_below(2) != 0) { MOBY(moby)->flags |= 0x8000; } else { MOBY(moby)->flags &= 0x7FFF; } - if (moby_data->unk2B4 != 0) { + if (moby_data->hide_below_start_on_init != 0) { MOBY(moby)->state = EXTERMIBOT_HIDDEN_BELOW_START; MOBY(moby)->visible = 0; MOBY(moby)->collision = 0; MOBY(moby)->flags &= 0xEFFF; MOBY(moby)->pos.z -= 20.0f; MOBY(moby)->draw_dist = 0; - } else if (*(long *)&moby_data->unk2B8 != -1) { + } else if (*(long *)&moby_data->activation_moby_index != -1) { MOBY(moby)->flags &= 0xEFFF; MOBY(moby)->state = EXTERMIBOT_WAIT_FOR_ACTIVATION_TRIGGER; if (MOBY(moby)->prev_seq != 0) @@ -236,9 +237,10 @@ void extermibot_update(unsigned char *moby) { path_goal_or_facing_vector, (D_L05_00161A98) * 0.4f) != 0) { if (random_integer_below(0x100) & 1) { - moby_data->unk298 = -moby_data->unk298; + moby_data->path_heading_offset_degrees = + -moby_data->path_heading_offset_degrees; } - moby_data->unk294 = moby_data->unk298 * 0.017453292f; + moby_data->unk294 = moby_data->path_heading_offset_degrees * 0.017453292f; moby_data->unk2AC = scale_game_frames((int)random_float_between(30.0f, 90.0f)); MOBY(moby)->state = EXTERMIBOT_FOLLOW_TARGET; if (MOBY(moby)->prev_seq != 1) @@ -247,7 +249,8 @@ void extermibot_update(unsigned char *moby) { moby_data->mode = EXTERMIBOT_TARGET_PATH_UNAVAILABLE; } } - if (moby_data->mode == EXTERMIBOT_TARGET_PATH_UNAVAILABLE && moby_data->unk2B0 != 0) { + if (moby_data->mode == EXTERMIBOT_TARGET_PATH_UNAVAILABLE && + moby_data->target_pursuit_timer != 0) { MOBY(moby)->state = EXTERMIBOT_APPROACH_TARGET_DIRECTLY; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); @@ -256,7 +259,7 @@ void extermibot_update(unsigned char *moby) { FUN_L00_00257d78(moby_data->goal, 0.0f, 4.0f); moby_data->goal[2] = 0.0f; fast_vec_add(moby_data->goal, moby_data->goal, &moby_data->unk270); - moby_data->unk2D2 = 0; + moby_data->wander_elapsed_frames = 0; MOBY(moby)->command = MOBY(moby)->state; MOBY(moby)->state = EXTERMIBOT_WANDER_NEAR_START; if (MOBY(moby)->prev_seq != 1) @@ -284,18 +287,19 @@ void extermibot_update(unsigned char *moby) { path_goal_or_facing_vector[0] = fast_cos(MOBY(moby)->rot.z) * 2.0f; path_goal_or_facing_vector[1] = fast_sin(MOBY(moby)->rot.z) * 2.0f; path_goal_or_facing_vector[2] = 0.0f; - FUN_L00_00258b50(moby, - &moby_data->move, - path_goal_or_facing_vector, - movement_displacement_or_spark_vector_or_strike_position, - 1.0f); + move_moby_with_ground_and_collision_checks( + moby, + &moby_data->move, + path_goal_or_facing_vector, + movement_displacement_or_spark_vector_or_strike_position, + 1.0f); resolve_point_path_segment_xy_clearance( moby_data->path, moby_position, moby_position, (D_L05_00161A98) * 0.4f); } - (moby_data->unk2D2)++; + (moby_data->wander_elapsed_frames)++; if ((vector_distance_xy(moby_position, moby_data->goal) < 1.0f && - moby_data->unk2D2 > scale_game_frames(0x3C)) || - moby_data->unk2D2 > scale_game_frames(0xB4)) { + moby_data->wander_elapsed_frames > scale_game_frames(0x3C)) || + moby_data->wander_elapsed_frames > scale_game_frames(0xB4)) { MOBY(moby)->state = MOBY(moby)->command; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(20)); @@ -321,16 +325,17 @@ void extermibot_update(unsigned char *moby) { path_goal_or_facing_vector[0] = fast_cos(MOBY(moby)->rot.z) * 2.0f; path_goal_or_facing_vector[1] = fast_sin(MOBY(moby)->rot.z) * 2.0f; path_goal_or_facing_vector[2] = 0.0f; - FUN_L00_00258b50(moby, - &moby_data->move, - path_goal_or_facing_vector, - movement_displacement_or_spark_vector_or_strike_position, - 1.0f); + move_moby_with_ground_and_collision_checks( + moby, + &moby_data->move, + path_goal_or_facing_vector, + movement_displacement_or_spark_vector_or_strike_position, + 1.0f); resolve_point_path_segment_xy_clearance( moby_data->path, moby_position, moby_position, (D_L05_00161A98) * 0.4f); } near = 0; - if (FUN_L00_00261b48(moby_data->path, moby_position, target_moby + 0x10, hit) != 0 && + if (path_8808(moby_data->path, moby_position, target_moby + 0x10, hit) != 0 && fast_vec_dist((float *)moby_position, hit) < 1.5f) { near = 1; } @@ -338,7 +343,7 @@ void extermibot_update(unsigned char *moby) { MOBY(moby)->state = EXTERMIBOT_WAIT_FOR_TARGET_IN_STRIKE_RANGE; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(20)); - } else if (moby_data->unk2B0 != 0) { + } else if (moby_data->target_pursuit_timer != 0) { if (vector_distance_xy(moby_position, target_moby + 0x10) < 3.0f) { MOBY(moby)->state = EXTERMIBOT_AIM_BEFORE_STRIKE; moby_data->unk2D0 = scale_game_frames(extermibot_pre_strike_delay_frames_gp); @@ -351,7 +356,7 @@ void extermibot_update(unsigned char *moby) { break; } case EXTERMIBOT_WAIT_FOR_TARGET_IN_STRIKE_RANGE: - if (moby_data->unk2B0 == 0) { + if (moby_data->target_pursuit_timer == 0) { moby_data->speed = 0.0f; MOBY(moby)->state = EXTERMIBOT_RETURN_TO_START; if (MOBY(moby)->prev_seq != 1) @@ -364,10 +369,12 @@ void extermibot_update(unsigned char *moby) { } break; case EXTERMIBOT_WAIT_FOR_ACTIVATION_TRIGGER: - if ((moby_data->unk2B8 != -1 && - ((unsigned char *)*(int *)&D_L05_0015FFD8)[moby_data->unk2B8 * 256 + 0xBC] != 0) || - (moby_data->unk2BC != -1 && - is_point_inside_clip_volume(((char *)D_0013F3D0), moby_data->unk2BC) != 0)) { + if ((moby_data->activation_moby_index != -1 && + ((unsigned char *)*( + int *)&D_L05_0015FFD8)[moby_data->activation_moby_index * 256 + 0xBC] != 0) || + (moby_data->activation_clip_volume_index != -1 && + is_point_inside_clip_volume(((char *)D_0013F3D0), + moby_data->activation_clip_volume_index) != 0)) { MOBY(moby)->draw_dist = 0x40; MOBY(moby)->flags |= 0x1000; MOBY(moby)->state = EXTERMIBOT_IDLE_AND_CHECK_TARGET_PATH; @@ -376,7 +383,7 @@ void extermibot_update(unsigned char *moby) { FUN_L00_00257d78(moby_data->goal, 0.0f, 4.0f); moby_data->goal[2] = 0.0f; fast_vec_add(moby_data->goal, moby_data->goal, &moby_data->unk270); - moby_data->unk2D2 = scale_game_frames(0x5A); + moby_data->wander_elapsed_frames = scale_game_frames(0x5A); MOBY(moby)->command = MOBY(moby)->state; MOBY(moby)->state = EXTERMIBOT_WANDER_NEAR_START; if (MOBY(moby)->prev_seq != 1) @@ -561,7 +568,7 @@ void extermibot_update(unsigned char *moby) { MOBY(moby)->state = EXTERMIBOT_FOLLOW_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(3)); - } else if (moby_data->unk2B0 != 0) { + } else if (moby_data->target_pursuit_timer != 0) { MOBY(moby)->state = EXTERMIBOT_APPROACH_TARGET_DIRECTLY; } break; @@ -667,57 +674,57 @@ typedef struct Wing { char pad0[0x20]; float hp; char pad1[0x14]; - int f38; + int targeting_range_boost_pending; char pad2[0x24]; short f60[3]; char pad3[0x1]; - unsigned char b67; + unsigned char hit_flash_target; char pad4[0x8]; char f70[16]; - float f80; + float knockback_gravity; char pad5[0x4]; - float f88; - float f8C; - int f90; - int f94; - float f98; + float knockback_xy_magnitude; + float knockback_z_magnitude; + int knockback_collision_radius_fixed_point; + int knockback_motion_flags; + float knockback_collision_z_offset; char pad6[0x11]; unsigned char bAD; char pad7[0x12]; - float fC0; - float fC4; + float knockback_apex_animation_target; + float knockback_landing_animation_target; char pad8[0x58]; - char f120[8]; - float f128; + char selected_target_position_xy[8]; + float selected_target_position_z; char pad9[0x34]; struct Moby *target; - int f164; + int target_selection_status; char pad10[0x8]; - char f170[16]; + char first_joint_animation[16]; char pad11[0x54]; - float f1D4; - float f1D8; + float first_joint_target_pitch; + float first_joint_target_yaw; char pad12[0x14]; - char f1F0[16]; + char second_joint_animation[16]; char pad13[0x58]; - float f258; + float second_joint_target_yaw; char pad14[0x14]; - char f270[16]; + char start_position[16]; char pad15[0x1C]; - float f29C; - float f2A0; + float base_targeting_range; + float effective_targeting_range; char pad16[0xC]; - int f2B0; + int targeting_range_boost_timer; char pad17[0x14]; - int f2C8; - int f2CC; + int target_group_index; + int targeting_path_index; char pad18[0x4]; - int f2D4; - float f2D8; + int path_stuck_timer; + float glow_pulse_phase; } Wing; -int D_L05_00161A74 = 0x80004000; -int D_L05_00161A78 = 0x80008000; +int l05_extermibot_glow_color_start __asm__("D_L05_00161A74") = 0x80004000; +int l05_extermibot_glow_color_end __asm__("D_L05_00161A78") = 0x80008000; #include "rnc/overlay/l05/mobys/extermibot_data/handle_extermibot_hits_and_update_targeting_2.h" @@ -761,6 +768,9 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { EXTERMIBOT_HIT_FLASH_ONLY = 10, EXTERMIBOT_HIT_NO_REACTION = 11 }; + enum { + EXTERMIBOT_GROUP_TARGET_SELECTED = 1 + }; Vec_3047E8 working_vector; Vec_3047E8 hit_test_endpoint; int collision_hit_status; @@ -773,7 +783,7 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { int k; moby_data = *(struct Wing **)&moby->pvars; - fast_dec_timer(&moby_data->f2D4); + fast_dec_timer(&moby_data->path_stuck_timer); dmg = 0.0f; hit_record = func_L00_0025B478_3047E8(moby, 0x330000, 0); if (hit_record != 0) { @@ -806,10 +816,10 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { hit_response = 1; } k = truncate_float_to_s32(D_L05_00161A98_gp * 409.6f); - moby_data->f98 = D_L05_00161A98_gp * 0.4f; - moby_data->f80 = extermibot_knockback_gravity_gp * D_0015ED70; - moby_data->f90 = k; - moby_data->f94 = 9; + moby_data->knockback_collision_z_offset = D_L05_00161A98_gp * 0.4f; + moby_data->knockback_gravity = extermibot_knockback_gravity_gp * D_0015ED70; + moby_data->knockback_collision_radius_fixed_point = k; + moby_data->knockback_motion_flags = 9; moby_data->bAD = 0; switch (hit_response) { case EXTERMIBOT_HIT_NO_RESPONSE: @@ -817,7 +827,7 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { break; case EXTERMIBOT_HIT_FLASH: case EXTERMIBOT_HIT_FLASH_ONLY: - moby_data->b67 = 0xFA; + moby_data->hit_flash_target = 0xFA; break; case EXTERMIBOT_HIT_NONLETHAL_KNOCKBACK: case EXTERMIBOT_HIT_KNOCKBACK_AND_FLASH: @@ -825,35 +835,41 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { case EXTERMIBOT_HIT_START_NONLETHAL_KNOCKBACK: case EXTERMIBOT_HIT_START_NONLETHAL_KNOCKBACK_AND_FLASH: case EXTERMIBOT_HIT_START_KNOCKBACK_WITH_FLASH: - moby_data->fC0 = 5.0f; - moby_data->f88 = extermibot_nonlethal_knockback_xy_scale_gp * D_0015ED6C; - moby_data->f8C = extermibot_nonlethal_knockback_z_scale_gp * D_0015ED6C; - moby_data->fC4 = 10.0f; + moby_data->knockback_apex_animation_target = 5.0f; + moby_data->knockback_xy_magnitude = + extermibot_nonlethal_knockback_xy_scale_gp * D_0015ED6C; + moby_data->knockback_z_magnitude = + extermibot_nonlethal_knockback_z_scale_gp * D_0015ED6C; + moby_data->knockback_landing_animation_target = 10.0f; nonlethal_knockback_heading = fast_arc_tan(moby->pos.x - hit_record->who->pos.x, moby->pos.y - hit_record->who->pos.y); *(u128_3047E8 *)working_vector = hit_record->dir; - trooper_knockback_arc( - working_vector, &nonlethal_knockback_heading, &moby_data->f88, &moby_data->f8C); + trooper_knockback_arc(working_vector, + &nonlethal_knockback_heading, + &moby_data->knockback_xy_magnitude, + &moby_data->knockback_z_magnitude); trooper_start_knockback(moby, moby_data->f70, nonlethal_knockback_heading, 5, 1, 0); moby->state = EXTERMIBOT_NONLETHAL_KNOCKBACK; - moby_data->b67 = 0x78; + moby_data->hit_flash_target = 0x78; break; case EXTERMIBOT_HIT_LETHAL: case EXTERMIBOT_HIT_DEATH_KNOCKBACK: moby->flags &= 0xEFFF; - moby_data->f80 = extermibot_death_knockback_gravity_gp * D_0015ED70; - moby_data->f88 = extermibot_death_knockback_xy_scale_gp * D_0015ED6C; - moby_data->f8C = extermibot_death_knockback_z_scale_gp * D_0015ED6C; - moby_data->fC0 = 5.5f; - moby_data->fC4 = 11.0f; + moby_data->knockback_gravity = extermibot_death_knockback_gravity_gp * D_0015ED70; + moby_data->knockback_xy_magnitude = extermibot_death_knockback_xy_scale_gp * D_0015ED6C; + moby_data->knockback_z_magnitude = extermibot_death_knockback_z_scale_gp * D_0015ED6C; + moby_data->knockback_apex_animation_target = 5.5f; + moby_data->knockback_landing_animation_target = 11.0f; death_knockback_heading = fast_arc_tan(moby->pos.x - hit_record->who->pos.x, moby->pos.y - hit_record->who->pos.y); *(u128_3047E8 *)working_vector = hit_record->dir; - trooper_knockback_arc( - working_vector, &death_knockback_heading, &moby_data->f88, &moby_data->f8C); + trooper_knockback_arc(working_vector, + &death_knockback_heading, + &moby_data->knockback_xy_magnitude, + &moby_data->knockback_z_magnitude); trooper_start_knockback(moby, moby_data->f70, death_knockback_heading, 6, 1, 0); moby->state = EXTERMIBOT_DEATH_KNOCKBACK; - moby_data->b67 = 0xF0; + moby_data->hit_flash_target = 0xF0; if (hit_record->who != 0 && *(struct Moby **)&hit_record->who->pclass != 0 && *(short *)((u8 *)((struct Moby *)hit_record->who->pclass) + 0x46) == 5) { stop_animation_l08(moby, 0x800, -1); @@ -866,45 +882,51 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { } moby->hit_slot = 0xFF; trooper_anim_finish(moby, moby_data->f60); - if (moby_data->f38 != 0) { - moby_data->f2B0 = truncate_float_to_s32(scale_time(random_float_between(180.0f, 240.0f))); - moby_data->f38 = 0; + if (moby_data->targeting_range_boost_pending != 0) { + moby_data->targeting_range_boost_timer = + truncate_float_to_s32(scale_time(random_float_between(180.0f, 240.0f))); + moby_data->targeting_range_boost_pending = 0; } - fast_dec_timer(&moby_data->f2B0); - if (moby_data->f2B0 != 0) { - moby_data->f2A0 = moby_data->f29C + 20.0f; + fast_dec_timer(&moby_data->targeting_range_boost_timer); + if (moby_data->targeting_range_boost_timer != 0) { + moby_data->effective_targeting_range = moby_data->base_targeting_range + 20.0f; } else { - moby_data->f2A0 = moby_data->f29C; + moby_data->effective_targeting_range = moby_data->base_targeting_range; } - if (activate_effect_l08(moby_data->f2A0, + if (activate_effect_l08(moby_data->effective_targeting_range, moby, - moby_data->f120, + moby_data->selected_target_position_xy, 0, 0, - ((Path_3047E8 *)l05_paths[moby_data->f2CC])->pts, - ((Path_3047E8 *)l05_paths[moby_data->f2CC])->n) != 2) { - if (moby_data->f2A0 < vector_distance_xy(moby_data->f270, moby_data->f120) || - 3.0f < func_001F9B88_3047E8(moby->pos.z - moby_data->f128)) { - moby_data->f164 = 2; + ((Path_3047E8 *)l05_paths[moby_data->targeting_path_index])->pts, + ((Path_3047E8 *)l05_paths[moby_data->targeting_path_index])->n) != 2) { + if (moby_data->effective_targeting_range < + vector_distance_xy(moby_data->start_position, + moby_data->selected_target_position_xy) || + 3.0f < func_001F9B88_3047E8(moby->pos.z - moby_data->selected_target_position_z)) { + moby_data->target_selection_status = EXTERMIBOT_TARGET_PATH_UNAVAILABLE; } } - if (moby_data->f2C8 >= 0) { - Moby *candidate_target = func_L05_003053D8_3047E8(moby, moby_data->f2C8); + if (moby_data->target_group_index >= 0) { + Moby *candidate_target = func_L05_003053D8_3047E8(moby, moby_data->target_group_index); if (candidate_target != 0) { - if (moby_data->f164 == 2 || + if (moby_data->target_selection_status == EXTERMIBOT_TARGET_PATH_UNAVAILABLE || vector_distance_xy(((float *)&moby->pos), ((float *)&candidate_target->pos)) < vector_distance_xy(((float *)&moby->pos), ((float *)&moby_data->target->pos))) { moby_data->target = candidate_target; - moby_data->f164 = 1; + moby_data->target_selection_status = EXTERMIBOT_GROUP_TARGET_SELECTED; } } } if (moby_data->target == 0) { moby_data->target = (*(Moby **)D_001413D0_lui); } - moby_data->f2D8 = fast_add_rotations(moby_data->f2D8, D_0015ED6C * 9.424778f); - moby->glow_color = fast_tween_color( - D_L05_00161A74, D_L05_00161A78, (func_001F9FA8_3047E8(moby_data->f2D8) + 1.0f) * 0.5f); + moby_data->glow_pulse_phase = + fast_add_rotations(moby_data->glow_pulse_phase, D_0015ED6C * 9.424778f); + moby->glow_color = + fast_tween_color(l05_extermibot_glow_color_start, + l05_extermibot_glow_color_end, + (func_001F9FA8_3047E8(moby_data->glow_pulse_phase) + 1.0f) * 0.5f); k = moby->state; if (k < 10) { if (k >= 4 && moby_data->target == (*(Moby **)D_001413D0_lui)) { @@ -927,13 +949,15 @@ void handle_extermibot_hits_and_update_targeting(Moby *moby) { } else if (pitch < -0.5235988f) { pitch = -0.5235988f; } - moby_data->f1D4 = pitch; - moby_data->f1D8 = yaw * 0.7f; - moby_data->f258 = yaw * 0.3f; + moby_data->first_joint_target_pitch = pitch; + moby_data->first_joint_target_yaw = yaw * 0.7f; + moby_data->second_joint_target_yaw = yaw * 0.3f; } } - update_joint_animation(moby, moby_data->f170, 1, frame_scale_sq * 0.04f, frame_scale_sq * 0.3f); - update_joint_animation(moby, moby_data->f1F0, 2, frame_scale_sq * 0.04f, frame_scale_sq * 0.3f); + update_joint_animation( + moby, moby_data->first_joint_animation, 1, frame_scale_sq * 0.04f, frame_scale_sq * 0.3f); + update_joint_animation( + moby, moby_data->second_joint_animation, 2, frame_scale_sq * 0.04f, frame_scale_sq * 0.3f); } extern int frame_number __asm__("D_L05_0015F5CC"); @@ -1020,7 +1044,8 @@ void move_extermibot_along_path(struct Moby *moby, s32 destination_position, f32 facing_direction.x = fast_cos(moby->rot.z) * 2.0f; facing_direction.y = fast_sin(moby->rot.z) * 2.0f; facing_direction.z = 0.0f; - FUN_L00_00258b50(moby, walker_vars->move, &facing_direction, &movement_displacement, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, walker_vars->move, &facing_direction, &movement_displacement, 1.0f); if (walker_vars->stuck_timer == 0) { if (FUN_L05_00304058_u( walker_vars->path, &moby->pos, &moby->pos, D_L05_00161A98_gp * 0.4f) > 2.0f) diff --git a/src/overlays/l05/mobys/extermitank.c b/src/overlays/l05/mobys/extermitank.c index 3daef698ff..a66659a6d8 100644 --- a/src/overlays/l05/mobys/extermitank.c +++ b/src/overlays/l05/mobys/extermitank.c @@ -104,7 +104,7 @@ typedef struct ExtermitankVars { u8 unk28; u8 unk29; u8 pad_2A[0x4]; - u8 unk2E; + u8 lifecycle_state; u8 pad_2F[0x9]; s32 unk38; u8 pad_3C[0x2]; @@ -121,7 +121,7 @@ typedef struct ExtermitankVars { f32 unk78; f32 unk7C; u8 pad_80[0x4]; - f32 unk84; + f32 child_animation_speed_bias; u8 pad_88[0xC]; f32 unk94; u8 pad_98[0x14]; @@ -142,18 +142,18 @@ typedef struct ExtermitankVars { u8 pad_131[0xF]; f32 unk140[4]; u8 pad_150[0x24]; - f32 unk174; - s32 unk178; + f32 firing_range_xy; + s32 firing_range_timer; u8 pad_17C[0x4]; s32 unk180; char *unk184; char *unk188; u8 pad_18C[0x4]; s32 path_190; - f32 unk194; - f32 unk198; + f32 turret_yaw; + f32 turret_pitch; u8 pad_19C[0x2]; - s16 unk19E; + s16 removal_scaled_frames; f32 particle_slots[4]; } ExtermitankVars; @@ -167,7 +167,7 @@ void extermitank_update(unsigned char *moby) { handle_extermitank_hits_and_sync_children((char *)moby); process_extermitank_particle_hits((char *)moby); - if (extermitank_vars->unk2E == 2) { + if (extermitank_vars->lifecycle_state == 2) { if (extermitank_vars->unk184 != 0) mark_moby_for_removal_c3(extermitank_vars->unk184); if (extermitank_vars->unk188 != 0) @@ -238,16 +238,16 @@ void extermitank_update(unsigned char *moby) { extermitank_vars->unk94 = D_L05_00161AF8 * D_0015ED6C_gp; clear_u64_value(extermitank_vars->unk40); extermitank_vars->unk3E |= 2; - extermitank_vars->unk2E = 1; + extermitank_vars->lifecycle_state = 1; extermitank_vars->unk29 = 0; extermitank_vars->max_health = 6; extermitank_vars->unk28 = 3; extermitank_vars->health = 6.0f; extermitank_vars->unk180 = scale_game_frames(0x3C); - *(int *)&extermitank_vars->unk198 = 0; + *(int *)&extermitank_vars->turret_pitch = 0; { float t = *(volatile float *)&D_L05_00161B78; - extermitank_vars->unk194 = *(volatile float *)(moby + 0x48); + extermitank_vars->turret_yaw = *(volatile float *)(moby + 0x48); extermitank_vars->unk58 = truncate_float_to_s32(t); } extermitank_vars->unk5A = truncate_float_to_s32(D_L05_00161B7C * 8.0f); @@ -279,7 +279,7 @@ void extermitank_update(unsigned char *moby) { *(int *)pp = idx; } h = ((char *)&D_0013F350 + 0x80); - if (vector_distance_xy(moby + 0x10, h) < extermitank_vars->unk174) { + if (vector_distance_xy(moby + 0x10, h) < extermitank_vars->firing_range_xy) { if (absolute_float(MOBY(moby)->pos.z - *(float *)(h + 8)) < 4.0f) { if (extermitank_vars->path_190 == -1 || FUN_L00_00259740(h, @@ -299,20 +299,21 @@ void extermitank_update(unsigned char *moby) { char *g = ((char *)&D_0013F350); float a = fast_arc_tan(*(float *)(g + 0x80) - MOBY(moby)->pos.x, *(float *)(g + 0x84) - MOBY(moby)->pos.y); - step_angle_toward_target(&extermitank_vars->unk194, 0, a, D_0015ED6C_gp * 1.5707964f); step_angle_toward_target( - &extermitank_vars->unk198, 0, 0.08726646f, D_0015ED6C_gp * 1.5707964f); + &extermitank_vars->turret_yaw, 0, a, D_0015ED6C_gp * 1.5707964f); + step_angle_toward_target( + &extermitank_vars->turret_pitch, 0, 0.08726646f, D_0015ED6C_gp * 1.5707964f); } else { step_angle_toward_target( - &extermitank_vars->unk194, 0, MOBY(moby)->rot.z, D_0015ED6C_gp * 1.5707964f); + &extermitank_vars->turret_yaw, 0, MOBY(moby)->rot.z, D_0015ED6C_gp * 1.5707964f); step_angle_toward_target( - &extermitank_vars->unk198, 0, 0.0f, D_0015ED6C_gp * 1.5707964f); + &extermitank_vars->turret_pitch, 0, 0.0f, D_0015ED6C_gp * 1.5707964f); } - build_axis_rotation_quaternion(extermitank_vars->unk140, 1, extermitank_vars->unk198); + build_axis_rotation_quaternion(extermitank_vars->unk140, 1, extermitank_vars->turret_pitch); build_axis_rotation_quaternion( extermitank_vars->unk100, 2, - fast_subtract_rotations(extermitank_vars->unk194, MOBY(moby)->rot.z)); + fast_subtract_rotations(extermitank_vars->turret_yaw, MOBY(moby)->rot.z)); break; } case EXTERMITANK_FIRE_PARTICLES: { @@ -354,10 +355,10 @@ void extermitank_update(unsigned char *moby) { working_position[1] += random_float_between(-0.065f, 0.065f); working_position[2] += random_float_between(-0.065f, 0.065f); particle_vector_a[0] = - fast_cos(extermitank_vars->unk194) * + fast_cos(extermitank_vars->turret_yaw) * (extermitank_tracked_particle_vector_a_xy_scale_gp * D_0015ED6C_gp); particle_vector_a[1] = - fast_sin(extermitank_vars->unk194) * + fast_sin(extermitank_vars->turret_yaw) * (extermitank_tracked_particle_vector_a_xy_scale_gp * D_0015ED6C_gp); particle_vector_a[2] = 0.0f; particle_vector_a[2] = random_float_between( @@ -367,10 +368,10 @@ void extermitank_update(unsigned char *moby) { extermitank_tracked_particle_vector_b_spread_degrees_gp) * 0.017453292f; particle_vector_b[0] = - fast_cos(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_cos(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_tracked_particle_vector_b_xy_scale_gp * D_0015ED6C_gp); particle_vector_b[1] = - fast_sin(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_sin(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_tracked_particle_vector_b_xy_scale_gp * D_0015ED6C_gp); particle_vector_b[2] = 0.0f; particle_vector_b[2] = random_float_between( @@ -419,10 +420,10 @@ void extermitank_update(unsigned char *moby) { extermitank_secondary_particle_vector_a_spread_degrees_gp) * 0.017453292f; particle_vector_a[0] = - fast_cos(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_cos(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_secondary_particle_vector_a_xy_scale_gp * D_0015ED6C_gp); particle_vector_a[1] = - fast_sin(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_sin(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_secondary_particle_vector_a_xy_scale_gp * D_0015ED6C_gp); particle_vector_a[2] = 0.0f; particle_vector_a[2] = random_float_between( @@ -432,10 +433,10 @@ void extermitank_update(unsigned char *moby) { extermitank_secondary_particle_vector_b_spread_degrees_gp) * 0.017453292f; particle_vector_b[0] = - fast_cos(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_cos(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_secondary_particle_vector_b_xy_scale_gp * D_0015ED6C_gp); particle_vector_b[1] = - fast_sin(fast_add_rotations(extermitank_vars->unk194, ang)) * + fast_sin(fast_add_rotations(extermitank_vars->turret_yaw, ang)) * (extermitank_secondary_particle_vector_b_xy_scale_gp * D_0015ED6C_gp); particle_vector_b[2] = 0.0f; particle_vector_b[2] = random_float_between( @@ -463,7 +464,7 @@ void extermitank_update(unsigned char *moby) { qcopy(working_position, moby + 0x10); working_position[2] = working_position[2] + 3.0f; h = ((char *)&D_0013F350 + 0x80); - if (extermitank_vars->unk174 < vector_distance_xy(moby + 0x10, h) || + if (extermitank_vars->firing_range_xy < vector_distance_xy(moby + 0x10, h) || 4.0f <= absolute_float(MOBY(moby)->pos.z - *(float *)(h + 8)) || (extermitank_vars->path_190 != -1 && FUN_L00_00259740(h, @@ -478,15 +479,16 @@ void extermitank_update(unsigned char *moby) { char *g = ((char *)&D_0013F350); float a = fast_arc_tan(*(float *)(g + 0x80) - MOBY(moby)->pos.x, *(float *)(g + 0x84) - MOBY(moby)->pos.y); - step_angle_toward_target(&extermitank_vars->unk194, 0, a, D_0015ED6C_gp * 1.5707964f); step_angle_toward_target( - &extermitank_vars->unk198, 0, 0.08726646f, D_0015ED6C_gp * 1.5707964f); + &extermitank_vars->turret_yaw, 0, a, D_0015ED6C_gp * 1.5707964f); + step_angle_toward_target( + &extermitank_vars->turret_pitch, 0, 0.08726646f, D_0015ED6C_gp * 1.5707964f); } - build_axis_rotation_quaternion(extermitank_vars->unk140, 1, extermitank_vars->unk198); + build_axis_rotation_quaternion(extermitank_vars->unk140, 1, extermitank_vars->turret_pitch); build_axis_rotation_quaternion( extermitank_vars->unk100, 2, - fast_subtract_rotations(extermitank_vars->unk194, MOBY(moby)->rot.z)); + fast_subtract_rotations(extermitank_vars->turret_yaw, MOBY(moby)->rot.z)); break; } case EXTERMITANK_REMOVE: @@ -530,7 +532,7 @@ extern float fast_difference_between_rotations(float, float) __asm__("FUN_001fa6 extern float fast_vec_length(void *) __asm__("FUN_001f9af0"); extern void finish_motion_305178(void *, void *) __asm__("FUN_L00_0025d538"); -int D_L05_00161B74 = 5; +int l05_extermitank_removal_base_frames __asm__("D_L05_00161B74") = 5; extern float extermitank_child_animation_speed_divisor_gp __asm__("D_L05_00161AF0") __attribute__((sda)); extern float extermitank_child_animation_speed_offset_scale_gp __asm__("D_L05_00161AF4") @@ -650,10 +652,11 @@ void handle_extermitank_hits_and_sync_children(char *moby) { 1, -1, 0); - extermitank_hit_sync_vars->unk19E = scale_game_frames(D_L05_00161B74); + extermitank_hit_sync_vars->removal_scaled_frames = + scale_game_frames(l05_extermitank_removal_base_frames); MOBY(moby)->state = EXTERMITANK_REMOVE; clear_u64_value(effect_data); - *(float *)(effect_data + 8) = extermitank_hit_sync_vars->unk194; + *(float *)(effect_data + 8) = extermitank_hit_sync_vars->turret_yaw; spawn_particle_305178(moby, 0x6dd, moby + 0x10, @@ -745,8 +748,9 @@ void handle_extermitank_hits_and_sync_children(char *moby) { ((unsigned char *)extermitank_hit_sync_vars->unk184)[0xa4] = 0xff; if (extermitank_hit_sync_vars->unk188 != 0) ((unsigned char *)extermitank_hit_sync_vars->unk188)[0xa4] = 0xff; - if (extermitank_hit_sync_vars->unk38 != 0 && extermitank_hit_sync_vars->unk178 == 0) { - extermitank_hit_sync_vars->unk178 = scale_game_frames(0xf0); + if (extermitank_hit_sync_vars->unk38 != 0 && + extermitank_hit_sync_vars->firing_range_timer == 0) { + extermitank_hit_sync_vars->firing_range_timer = scale_game_frames(0xf0); extermitank_hit_sync_vars->unk38 = 0; hero_turn_reference = &hero; angle = fast_arc_tan(hero_turn_reference->motion.pos.f[0] - MOBY(moby)->pos.x, @@ -754,10 +758,10 @@ void handle_extermitank_hits_and_sync_children(char *moby) { if (fast_difference_between_rotations(MOBY(moby)->rot.z, angle) > 1.5707964f) ((signed char *)extermitank_hit_sync_vars)[0xc4] *= -1; } - if (fast_dec_timer(&extermitank_hit_sync_vars->unk178) != 0) - extermitank_hit_sync_vars->unk174 = 20.0f; + if (fast_dec_timer(&extermitank_hit_sync_vars->firing_range_timer) != 0) + extermitank_hit_sync_vars->firing_range_xy = 20.0f; else - extermitank_hit_sync_vars->unk174 = 14.0f; + extermitank_hit_sync_vars->firing_range_xy = 14.0f; if (extermitank_hit_sync_vars->unk184 != 0) { char *first; float offset_scale; @@ -766,7 +770,7 @@ void handle_extermitank_hits_and_sync_children(char *moby) { offset_scale = extermitank_child_animation_speed_offset_scale_gp; *(float *)(extermitank_hit_sync_vars->unk184 + 0x58) = speed; *(float *)(extermitank_hit_sync_vars->unk184 + 0x58) += - extermitank_hit_sync_vars->unk84 * offset_scale; + extermitank_hit_sync_vars->child_animation_speed_bias * offset_scale; first = extermitank_hit_sync_vars->unk184; qcopy(first + 0x40, moby + 0x40); qcopy(first + 0x10, moby + 0x10); @@ -779,7 +783,7 @@ void handle_extermitank_hits_and_sync_children(char *moby) { offset_scale = extermitank_child_animation_speed_offset_scale_gp; *(float *)(extermitank_hit_sync_vars->unk188 + 0x58) = speed; *(float *)(extermitank_hit_sync_vars->unk188 + 0x58) -= - extermitank_hit_sync_vars->unk84 * offset_scale; + extermitank_hit_sync_vars->child_animation_speed_bias * offset_scale; second = extermitank_hit_sync_vars->unk188; qcopy(second + 0x40, moby + 0x40); qcopy(second + 0x10, moby + 0x10); diff --git a/src/overlays/l05/mobys/hoverboard_girl.c b/src/overlays/l05/mobys/hoverboard_girl.c index 48f69c9fab..7315ba95bb 100644 --- a/src/overlays/l05/mobys/hoverboard_girl.c +++ b/src/overlays/l05/mobys/hoverboard_girl.c @@ -203,6 +203,12 @@ void hoverboard_girl_update(HoverboardGirlMoby *moby) { HOVERBOARD_GIRL_STATE_UPDATE_DIALOGUE = 1, HOVERBOARD_GIRL_STATE_WAIT_TO_RESUME_DIALOGUE = 3 }; + enum { + HOVERBOARD_GIRL_DIALOGUE_ALTERNATE_ITEM_REWARD = 4 + }; + enum { + HOVERBOARD_GIRL_DIALOGUE_SETUP_RACE_CAMERA = 3 + }; HoverboardGirlState *state = moby->data; HoverboardGirlVector target_position; HoverboardGirlVector head_position; @@ -238,7 +244,7 @@ void hoverboard_girl_update(HoverboardGirlMoby *moby) { begin_dialogue_camera_transition(2.0f, moby); moby->state = HOVERBOARD_GIRL_STATE_WAIT_TO_RESUME_DIALOGUE; } - if (state->dialogue_state == 3) { + if (state->dialogue_state == HOVERBOARD_GIRL_DIALOGUE_SETUP_RACE_CAMERA) { state->previous_dialogue_state = state->dialogue_state; state->dialogue_state = 2; state->dialogue_state_frame = frame_number; @@ -253,7 +259,7 @@ void hoverboard_girl_update(HoverboardGirlMoby *moby) { request_music_track(0, 8); if (alternate_item_available == 0) { state->previous_dialogue_state = state->dialogue_state; - state->dialogue_state = 4; + state->dialogue_state = HOVERBOARD_GIRL_DIALOGUE_ALTERNATE_ITEM_REWARD; state->dialogue_state_frame = frame_number; state->race_return_pending = 1; } @@ -287,7 +293,7 @@ void hoverboard_girl_update(HoverboardGirlMoby *moby) { case HOVERBOARD_GIRL_STATE_WAIT_TO_RESUME_DIALOGUE: if (game_mode != GAME_MODE_CUTSCENE) { moby->state = HOVERBOARD_GIRL_STATE_UPDATE_DIALOGUE; - if (state->previous_dialogue_state == 4) { + if (state->previous_dialogue_state == HOVERBOARD_GIRL_DIALOGUE_ALTERNATE_ITEM_REWARD) { alternate_item_available = 1; queue_dialogue_message(0x1395, scale_game_frames(300)); memcard_save_data(0, -1); diff --git a/src/overlays/l05/mobys/scenery_ship.c b/src/overlays/l05/mobys/scenery_ship.c index b7995c116d..fd855906d8 100644 --- a/src/overlays/l05/mobys/scenery_ship.c +++ b/src/overlays/l05/mobys/scenery_ship.c @@ -115,17 +115,17 @@ typedef union { typedef struct { /* 0x000 */ int path; /* 0x004 */ float f4; - /* 0x008 */ float f8; + /* 0x008 */ float path_sample_position; /* 0x00C */ float fC; /* 0x010 */ int pad10[3]; /* 0x01C */ float f1C; /* 0x020 */ Vec4f_2d7140 trail[3][16]; - /* 0x320 */ short f320; - /* 0x322 */ unsigned short f322; - /* 0x324 */ int *f324; - /* 0x328 */ int f328; + /* 0x320 */ short trail_segment_count; + /* 0x322 */ unsigned short trail_write_index; + /* 0x324 */ int *trail_last_queued_frame_ptr; + /* 0x328 */ int voice_slot_index; /* 0x32C */ int pad32C[15]; - /* 0x368 */ float f368; + /* 0x368 */ float glow_quad_pulse_phase; } Data_2D8388; extern float D_0015ED6C; @@ -133,10 +133,10 @@ extern float D_0015ED70; #include "rnc/overlay/l05/mobys/scenery_ship_data/scenery_ship_update.h" -int D_L05_001613D8 = 0x80000080; -int D_L05_001613DC = 0x80202020; -float D_L05_001613E0 = 5.0f; -int D_L05_001613E4 = 1; +int l05_scenery_ship_glow_pulse_start_color __asm__("D_L05_001613D8") = 0x80000080; +int l05_scenery_ship_glow_pulse_end_color __asm__("D_L05_001613DC") = 0x80202020; +float l05_scenery_ship_trail_segment_limit __asm__("D_L05_001613E0") = 5.0f; +int l05_scenery_ship_glow_update_enabled __asm__("D_L05_001613E4") = 1; extern float scenery_ship_removal_effect_basis_scale_gp __asm__("D_L05_001613E8") __attribute__((sda)); extern float scenery_ship_removal_effect_z_addend_gp __asm__("D_L05_001613EC") __attribute__((sda)); @@ -199,8 +199,8 @@ void scenery_ship_update(char *moby) { MOBY(moby)->scale = MOBY(moby)->pclass->scale * scenery_ship_initialization_scale_multiplier_gp; scenery_ship_instance_vars->f1C = random_angle_radians(); - scenery_ship_instance_vars->f328 = -1; - scenery_ship_instance_vars->f368 = random_angle_radians(); + scenery_ship_instance_vars->voice_slot_index = -1; + scenery_ship_instance_vars->glow_quad_pulse_phase = random_angle_radians(); path = ((char *)l05_paths[scenery_ship_instance_vars->path]); if (*(float *)(path + 0x1C) == -1.0f) { max_turn = 0.0f; @@ -244,7 +244,8 @@ void scenery_ship_update(char *moby) { scenery_ship_instance_vars->fC = fast_vec_dist((float *)(path + 0x10), (float *)(path + 0x20)); MOBY(moby)->state = SCENERY_SHIP_FOLLOW_PATH; - scenery_ship_instance_vars->f8 = (float)*(int *)path * scenery_ship_instance_vars->f4; + scenery_ship_instance_vars->path_sample_position = + (float)*(int *)path * scenery_ship_instance_vars->f4; break; } case SCENERY_SHIP_FOLLOW_PATH: { @@ -253,16 +254,20 @@ void scenery_ship_update(char *moby) { float wave; scenery_ship_instance_vars->f1C = phase; wave = func_001F9FA8_2D8388(phase); - MOBY(moby)->glow_color = - func_001FA8A8_2D8388(D_L05_001613D8, D_L05_001613DC, (wave + 1.0f) * 0.5f); + MOBY(moby)->glow_color = func_001FA8A8_2D8388(l05_scenery_ship_glow_pulse_start_color, + l05_scenery_ship_glow_pulse_end_color, + (wave + 1.0f) * 0.5f); advance_scenery_ship_along_path(moby, (int *)l05_paths[scenery_ship_instance_vars->path]); - if (voice_is_playing(moby, scenery_ship_instance_vars->f328) == 0) { - scenery_ship_instance_vars->f328 = allocate_voice_for_target_entry(1, 4, (int)moby); + if (voice_is_playing(moby, scenery_ship_instance_vars->voice_slot_index) == 0) { + scenery_ship_instance_vars->voice_slot_index = + allocate_voice_for_target_entry(1, 4, (int)moby); } if ((frame_number & 3) == 0) { - scenery_ship_instance_vars->f322 = (scenery_ship_instance_vars->f322 + 1) & 0xF; - if ((float)scenery_ship_instance_vars->f320 < D_L05_001613E0) { - scenery_ship_instance_vars->f320++; + scenery_ship_instance_vars->trail_write_index = + (scenery_ship_instance_vars->trail_write_index + 1) & 0xF; + if ((float)scenery_ship_instance_vars->trail_segment_count < + l05_scenery_ship_trail_segment_limit) { + scenery_ship_instance_vars->trail_segment_count++; } } left_offset.q = 0; @@ -270,32 +275,35 @@ void scenery_ship_update(char *moby) { left_offset.f[1] = 0.4f; left_offset.f[2] = 0.45f; transform_vector_by_basis(&left_offset, &left_offset, moby + 0xC0); - func_001F9BD8_2D8388( - (float *)&scenery_ship_instance_vars->trail[0][(short)scenery_ship_instance_vars->f322], - left_offset.f, - (float *)&MOBY(moby)->pos); - scenery_ship_instance_vars->trail[0][(short)scenery_ship_instance_vars->f322].w = 1.0f; + func_001F9BD8_2D8388((float *)&scenery_ship_instance_vars + ->trail[0][(short)scenery_ship_instance_vars->trail_write_index], + left_offset.f, + (float *)&MOBY(moby)->pos); + scenery_ship_instance_vars->trail[0][(short)scenery_ship_instance_vars->trail_write_index] + .w = 1.0f; tail_offset.q = 0; tail_offset.f[0] = -1.5f; tail_offset.f[2] = -0.3f; transform_vector_by_basis(&tail_offset, &tail_offset, moby + 0xC0); - func_001F9BD8_2D8388( - (float *)&scenery_ship_instance_vars->trail[1][(short)scenery_ship_instance_vars->f322], - tail_offset.f, - (float *)&MOBY(moby)->pos); - scenery_ship_instance_vars->trail[1][(short)scenery_ship_instance_vars->f322].w = 1.0f; + func_001F9BD8_2D8388((float *)&scenery_ship_instance_vars + ->trail[1][(short)scenery_ship_instance_vars->trail_write_index], + tail_offset.f, + (float *)&MOBY(moby)->pos); + scenery_ship_instance_vars->trail[1][(short)scenery_ship_instance_vars->trail_write_index] + .w = 1.0f; right_offset.q = 0; right_offset.f[0] = -1.2f; right_offset.f[1] = -0.4f; right_offset.f[2] = 0.45f; transform_vector_by_basis(&right_offset, &right_offset, moby + 0xC0); - func_001F9BD8_2D8388( - (float *)&scenery_ship_instance_vars->trail[2][(short)scenery_ship_instance_vars->f322], - right_offset.f, - (float *)&MOBY(moby)->pos); - scenery_ship_instance_vars->trail[2][(short)scenery_ship_instance_vars->f322].w = 1.0f; - if (frame_number != *scenery_ship_instance_vars->f324) { - *scenery_ship_instance_vars->f324 = frame_number; + func_001F9BD8_2D8388((float *)&scenery_ship_instance_vars + ->trail[2][(short)scenery_ship_instance_vars->trail_write_index], + right_offset.f, + (float *)&MOBY(moby)->pos); + scenery_ship_instance_vars->trail[2][(short)scenery_ship_instance_vars->trail_write_index] + .w = 1.0f; + if (frame_number != *scenery_ship_instance_vars->trail_last_queued_frame_ptr) { + *scenery_ship_instance_vars->trail_last_queued_frame_ptr = frame_number; add_draw_callback(func_L05_002D8B68_2D8388, moby); } if (MOBY(moby)->pos.x < 8.0f) { @@ -356,7 +364,7 @@ void scenery_ship_update(char *moby) { return; } } - if (D_L05_001613E4) + if (l05_scenery_ship_glow_update_enabled) update_moby_glow_and_queue_draw(moby); } /* Ported from rac1-decomp (src/overlays/l05_rilgar/vendor_002D28D0.c: func_L05_002D8AD8), where it is exact; names translated to the US level program. */ @@ -387,14 +395,14 @@ typedef struct { u64 flags; } L05GlowPacket; -int D_L05_001613F0 = 0; -int D_L05_001613F4 = 0; -int D_L05_001613F8 = 0; -int D_L05_001613FC = 2; -int D_L05_00161400 = 0; -int D_L05_00161404 = 1; -int D_L05_00161408 = 0x40806060; -int D_L05_0016140C = 0x802020; +int l05_scenery_ship_trail_callback_disabled __asm__("D_L05_001613F0") = 0; +int l05_scenery_ship_trail_ribbon_draw_disabled __asm__("D_L05_001613F4") = 0; +int l05_scenery_ship_trail_blend_a_selector __asm__("D_L05_001613F8") = 0; +int l05_scenery_ship_trail_blend_b_selector __asm__("D_L05_001613FC") = 2; +int l05_scenery_ship_trail_blend_c_selector __asm__("D_L05_00161400") = 0; +int l05_scenery_ship_trail_blend_d_selector __asm__("D_L05_00161404") = 1; +int l05_scenery_ship_trail_fade_start_color __asm__("D_L05_00161408") = 0x40806060; +int l05_scenery_ship_trail_fade_end_color __asm__("D_L05_0016140C") = 0x802020; extern unsigned char l05_scenery_ship_extended_trail_selector __asm__("D_L05_0015EDB2"); extern struct Moby *D_L05_0015FFD8 __asm__("D_L05_0015FFD8"); extern short *D_L05_001ABCC0_7920[] __asm__("D_L05_001ABCC0"); @@ -426,31 +434,36 @@ void draw_group_scenery_ship_trails(struct Moby *moby) { u64 texture; L05GlowPacket *glow_packet; - if (D_L05_001613F0 != 0) + if (l05_scenery_ship_trail_callback_disabled != 0) return; if (l05_scenery_ship_extended_trail_selector != 0) - D_L05_001613E0 = 16.0f; + l05_scenery_ship_trail_segment_limit = 16.0f; else - D_L05_001613E0 = 5.0f; + l05_scenery_ship_trail_segment_limit = 5.0f; for (i = 0; i < 16; i++) { texture = get_effect_texture(0x13); glow_packet = &packet[i]; glow_packet->effect_texture = texture; glow_packet->texture = 0xff9000000260ULL; glow_packet->zero = 0; - glow_packet->flags = (u64)D_L05_001613F8 | ((u64)D_L05_001613FC << 2) | - ((u64)D_L05_00161400 << 4) | ((u64)D_L05_00161404 << 6) | - 0x8000000000ULL; - phase = convert_integer_to_float((frame_number + 3) & 3) / (D_L05_001613E0 * 4.0f); + glow_packet->flags = (u64)l05_scenery_ship_trail_blend_a_selector | + ((u64)l05_scenery_ship_trail_blend_b_selector << 2) | + ((u64)l05_scenery_ship_trail_blend_c_selector << 4) | + ((u64)l05_scenery_ship_trail_blend_d_selector << 6) | 0x8000000000ULL; + phase = convert_integer_to_float((frame_number + 3) & 3) / + (l05_scenery_ship_trail_segment_limit * 4.0f); for (j = 0; j < 4; j++) { packet[i].uv[j][0] = D_L05_001CDD70[j][0]; packet[i].uv[j][1] = D_L05_001CDD70[j][1]; - ratio = convert_integer_to_float(i + 1 - (j >> 1)) / (D_L05_001613E0 + phase); + ratio = convert_integer_to_float(i + 1 - (j >> 1)) / + (l05_scenery_ship_trail_segment_limit + phase); if (ratio > 1.0f) ratio = 1.0f; else if (ratio < 0.0f) ratio = 0.0f; - packet[i].color[j] = interpolate_color_7920(ratio, D_L05_00161408, D_L05_0016140C); + packet[i].color[j] = interpolate_color_7920(ratio, + l05_scenery_ship_trail_fade_start_color, + l05_scenery_ship_trail_fade_end_color); } } memset(matrix, 0, 0x20); @@ -474,7 +487,7 @@ void draw_group_scenery_ship_trails(struct Moby *moby) { trail_segment_start_index = (*(short *)(scenery_ship_vars + 0x322) - frame + 15) & 15; for (ribbon = 0; ribbon < 3; ribbon++) { - if (D_L05_001613F4 == 0) { + if (l05_scenery_ship_trail_ribbon_draw_disabled == 0) { points = scenery_ship_vars + (ribbon * 0x100 + 0x20); for (k = 0; k < 4; k++) { index = (trail_segment_start_index + (k >> 1)) & 15; diff --git a/src/overlays/l05/mobys/sharkigator.c b/src/overlays/l05/mobys/sharkigator.c index 91195cf707..50fb823f48 100644 --- a/src/overlays/l05/mobys/sharkigator.c +++ b/src/overlays/l05/mobys/sharkigator.c @@ -41,7 +41,7 @@ typedef struct Hero Hero; typedef struct SharkigatorVars { u8 pad_0[0x60]; s32 path_60; - s32 unk64; + s32 start_in_leap_wait; s32 unk68; s32 timer_6C; f32 unk70; @@ -86,7 +86,7 @@ void sharkigator_update(char *moby) { } state_zero: { float height; - if (sharkigator_instance_vars->unk64 != 0) { + if (sharkigator_instance_vars->start_in_leap_wait != 0) { MOBY(moby)->state = SHARKIGATOR_WAIT_TO_LEAP; MOBY(moby)->flags |= 1; MOBY(moby)->update_dist = 0xff; diff --git a/src/overlays/l05/mobys/skid_mcmarx.c b/src/overlays/l05/mobys/skid_mcmarx.c index 61287c3b4d..4b0aa88517 100644 --- a/src/overlays/l05/mobys/skid_mcmarx.c +++ b/src/overlays/l05/mobys/skid_mcmarx.c @@ -145,18 +145,18 @@ void start_racer_branch_jump(char *moby) __asm__("FUN_L05_00307358"); typedef struct SkidMcmarxVars { u8 pad_0[0x210]; - f32 unk210[4]; + f32 jump_target_node[4]; s32 path_220; u8 pad_224[0x20]; char *unk244; u8 pad_248[0x4]; - f32 unk24C; + f32 racer_vertical_speed; u8 pad_250[0x8]; - s16 unk258; + s16 current_path_node_index; u8 pad_25A[0x12]; - s32 unk26C; + s32 jump_elapsed_frames; u8 pad_270[0xC]; - s32 unk27C; + s32 jump_landing_node_index; } SkidMcmarxVars; void start_racer_branch_jump(char *moby) { @@ -165,8 +165,8 @@ void start_racer_branch_jump(char *moby) { int path_node_index; int path_node_byte_offset; if (active_path != ((char *)l05_paths[moby_data->path_220])) { - if (moby_data->unk24C <= 0.0f) { - path_node_index = moby_data->unk258; + if (moby_data->racer_vertical_speed <= 0.0f) { + path_node_index = moby_data->current_path_node_index; path_node_byte_offset = path_node_index * 16; if (*(float *)(active_path + path_node_byte_offset + 0x1C) == 1.0f) { while (*(float *)(active_path + path_node_byte_offset + 0x1C) != 2.0f) { @@ -174,9 +174,9 @@ void start_racer_branch_jump(char *moby) { active_path = moby_data->unk244; path_node_byte_offset = path_node_index * 16; } - moby_data->unk27C = path_node_index; - qcopy(moby_data->unk210, moby_data->unk244 + path_node_index * 16 + 0x10); - moby_data->unk26C = 1; + moby_data->jump_landing_node_index = path_node_index; + qcopy(moby_data->jump_target_node, moby_data->unk244 + path_node_index * 16 + 0x10); + moby_data->jump_elapsed_frames = 1; } } } @@ -359,7 +359,7 @@ typedef struct { typedef struct { char p00[0x64]; float f64; - float f68; + float target_rotation_z; char p6C[0x14]; } Manip_308D68; @@ -629,9 +629,9 @@ void skid_mcmarx_update(Moby *moby) { if (moby->flags & 0x8000) { turn = -turn; } - racer_instance_vars->m[3].f68 = turn * 30.0f; - racer_instance_vars->m[0].f68 = turn * 20.0f; - racer_instance_vars->m[2].f68 = turn * 50.0f; + racer_instance_vars->m[3].target_rotation_z = turn * 30.0f; + racer_instance_vars->m[0].target_rotation_z = turn * 20.0f; + racer_instance_vars->m[2].target_rotation_z = turn * 50.0f; racer_instance_vars->m[1].f64 = turn * 40.0f; FUN_L00_002628d8((char *)moby, (char *)&racer_instance_vars->m[3], diff --git a/src/overlays/l05/mobys/triggered_motion.c b/src/overlays/l05/mobys/triggered_motion.c index 26fe86299b..f08b392ce0 100644 --- a/src/overlays/l05/mobys/triggered_motion.c +++ b/src/overlays/l05/mobys/triggered_motion.c @@ -31,7 +31,7 @@ typedef struct TriggeredMotionVars { s32 unk58; f32 unk5C; f32 unk60; - f32 unk64; + f32 manipulator_angular_velocity; } TriggeredMotionVars; /* Moby class 893 */ @@ -104,7 +104,7 @@ void triggered_motion_update(char *moby) { approach = -0.5934119f; } approach_angle(&motion_and_manipulator_vars->unk60, - &motion_and_manipulator_vars->unk64, + &motion_and_manipulator_vars->manipulator_angular_velocity, approach, frame_time_sq * 4.1887903f, frame_time_sq * 4.1887903f, @@ -117,7 +117,7 @@ void triggered_motion_update(char *moby) { motion_and_manipulator_vars->unk60 = 0.0f; if (MOBY(moby)->command == 0) { MOBY(moby)->command = 1; - motion_and_manipulator_vars->unk64 *= -0.33f; + motion_and_manipulator_vars->manipulator_angular_velocity *= -0.33f; } else if (motion_and_manipulator_vars->unk60 == end) { if (MOBY(moby)->state == MOBY_SETTLE_AT_UPPER_MANIPULATOR_ANGLE) MOBY(moby)->state = MOBY_MOTION_SEQUENCE_COMPLETE; diff --git a/src/overlays/l06/hero/hero_set_state.c b/src/overlays/l06/hero/hero_set_state.c index b3c51a8d1e..e3b43d2461 100644 --- a/src/overlays/l06/hero/hero_set_state.c +++ b/src/overlays/l06/hero/hero_set_state.c @@ -69,7 +69,7 @@ extern void clear_moby_transform_history(char *o) __asm__("FUN_L00_00262840"); extern int hero_set_state(int, int) __asm__("FUN_L06_002356a0"); extern char level06_hero_transform_trail_jump_velocity_keys[] __asm__("D_L06_0017C6A0"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int entry_animation_mode) { int saved_state_step; char *moby; int old20A7; @@ -80,10 +80,12 @@ int hero_set_state(int requested_state, int b) { { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L06_0015F5C4 == 2 || D_L06_0015F5C4 == 6) && b != 2) + if ((D_L06_0015F5C4 == 2 || D_L06_0015F5C4 == 6) && + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; @@ -155,7 +157,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (entry_animation_mode) { if (get_hero_help_value(0) == 0x54) { set_hero_animation(get_hero_help_value(0), 0, (float)scale_game_frames(0x12)); } else { @@ -170,7 +172,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (entry_animation_mode) { if (get_hero_help_value(0) == 0x54) { set_hero_animation(get_hero_help_value(0), 0, (float)scale_game_frames(0x12)); } else { @@ -195,7 +197,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -206,7 +208,7 @@ int hero_set_state(int requested_state, int b) { p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.momentum, frame_time * 3.5f); - if (b) + if (entry_animation_mode) set_hero_animation(0x7C, 0, (float)scale_game_frames(0xC)); break; } @@ -222,7 +224,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->unk6A0 = 0; p->unk690 = p->motion.pos.f[2] - p->unk69C; - if (b) + if (entry_animation_mode) set_hero_animation(0x74, 0, (float)scale_game_frames(0xB)); break; } @@ -234,7 +236,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L06_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = get_hero_help_value(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && entry_animation_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -318,7 +320,7 @@ int hero_set_state(int requested_state, int b) { if (u->state.prev2_control_mode == 4 && scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (entry_animation_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L06_0015F6D8[v->state.step], (float)n); } @@ -333,7 +335,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (entry_animation_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -362,7 +364,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (entry_animation_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -379,7 +381,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (entry_animation_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -406,7 +408,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (entry_animation_mode) { if (q->moby->seq == get_hero_help_value(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -433,7 +435,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -446,7 +448,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -458,7 +460,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (entry_animation_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -514,7 +516,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (entry_animation_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -530,7 +532,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -542,7 +544,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -597,7 +599,7 @@ int hero_set_state(int requested_state, int b) { } } } - if (b) { + if (entry_animation_mode) { struct Hero *r = &hero; set_hero_animation(r->grind_anim_variant + 0x31, 0, (float)scale_game_frames(6)); } @@ -614,7 +616,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (entry_animation_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -629,7 +631,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (entry_animation_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -638,7 +640,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -647,7 +649,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -656,7 +658,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -680,7 +682,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (entry_animation_mode) { if (q->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { set_hero_animation(4, 0, (float)scale_game_frames(8)); return 1; @@ -710,7 +712,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x13, 0, (float)animation_blend_spec); } break; @@ -725,7 +727,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x13, 0, (float)landing_animation_blend_spec); } break; @@ -1109,7 +1111,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (entry_animation_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1214,7 +1216,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (entry_animation_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1251,7 +1253,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (entry_animation_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1266,7 +1268,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (entry_animation_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1297,7 +1299,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (entry_animation_mode) { char *m; int j = 0; int n; @@ -1341,7 +1343,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k + 7; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (entry_animation_mode) { int n; if (k == 0) { n = scale_game_frames(5); @@ -1354,7 +1356,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (entry_animation_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1377,7 +1379,7 @@ int hero_set_state(int requested_state, int b) { } else { p->attack_record = 0; } - if (b) { + if (entry_animation_mode) { struct Hero *q = &hero; char *m; int n = scale_game_frames(4); @@ -1393,7 +1395,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (entry_animation_mode) { char *m; HeroTableRow2C *e = &D_L06_0017C3A8[p->attack_record]; int k = e->kind; @@ -1414,7 +1416,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1436,7 +1438,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = level06_hero_animation_blend_curves[q->anim_blend_curve] [(q->anim_blend_step)++]; @@ -1466,7 +1468,7 @@ int hero_set_state(int requested_state, int b) { p->collision_off_frames = 0x2710; p->sink_surface_z = p->ground_z.f; allocate_hero_voice_for_entry(9, 0); - if (b) + if (entry_animation_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); } break; @@ -1482,7 +1484,7 @@ int hero_set_state(int requested_state, int b) { m = ((char *)p->unkA88); qcopy(m + 0x10, &p->motion.pos); allocate_voice_for_target_entry(9, 0, (int)m); - if (b) + if (entry_animation_mode) set_hero_animation(0x11, 0, (float)scale_game_frames(8)); break; } @@ -1494,7 +1496,7 @@ int hero_set_state(int requested_state, int b) { hero_set_state(0x52, 1); return 0; } - if (b) + if (entry_animation_mode) set_hero_animation(0, 0, (float)scale_game_frames(9)); break; } @@ -1506,7 +1508,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) + if (entry_animation_mode) set_hero_animation(0xE, 0, (float)scale_game_frames(0xC)); break; } @@ -1516,7 +1518,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(4, 0, (float)scale_game_frames(8)); break; } @@ -1525,7 +1527,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(4, 0, (float)scale_game_frames(0xC)); break; } @@ -1539,7 +1541,7 @@ int hero_set_state(int requested_state, int b) { hero_change_health(1); p->unk1EE = scale_game_frames(0x2D); p->invulnerable_frames = scale_game_frames(0x32); - if (b) { + if (entry_animation_mode) { set_hero_animation(6, 3, -3.0f); p->moby->anim_time = level06_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1562,7 +1564,7 @@ int hero_set_state(int requested_state, int b) { if (q->state.prev_control_mode == 0) q->ground_speed = vector_length_xy(&q->motion.momentum); q->unk3B8 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(2, 0, (float)scale_game_frames(8)); } break; @@ -1573,7 +1575,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(5, 0, (float)scale_game_frames(0xC)); break; } @@ -1587,7 +1589,7 @@ int hero_set_state(int requested_state, int b) { p->unk4EC = p->jump_gravity; p->unk4F0 = p->smoothed_ground_z; } - if (b) + if (entry_animation_mode) set_hero_animation(8, 0x12, (float)(scale_game_frames(7) + 2)); break; } @@ -1595,7 +1597,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 3; p->unk2284 = 0xD; - if (b) + if (entry_animation_mode) set_hero_animation(0xA, 0, (float)scale_game_frames(6)); break; } @@ -1603,7 +1605,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 3; p->unk2284 = 0xD; - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(6)); break; } @@ -1611,7 +1613,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 3; p->unk2284 = 0xD; - if (b) + if (entry_animation_mode) set_hero_animation(0xC, 0, (float)scale_game_frames(6)); break; } @@ -1619,7 +1621,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1627,7 +1629,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (entry_animation_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1638,7 +1640,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1649,7 +1651,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1666,7 +1668,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1676,7 +1678,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1689,7 +1691,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (entry_animation_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = level06_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1710,7 +1712,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1761,7 +1763,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(get_hero_help_value(0), 0, -1.0f); break; } @@ -1772,7 +1774,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -1782,7 +1784,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (entry_animation_mode) set_hero_animation(get_hero_help_value(0), 0, -1.0f); break; } diff --git a/src/overlays/l06/hero/update_hero_motion_for_current_state.c b/src/overlays/l06/hero/update_hero_motion_for_current_state.c index aa15aa4243..2aae0a3505 100644 --- a/src/overlays/l06/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l06/hero/update_hero_motion_for_current_state.c @@ -875,7 +875,7 @@ struct PlayerJointTable { extern f32 D_0015ED6C_c __asm__("D_0015ED6C"); extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); extern s32 D_L06_0015F688 __attribute__((sda)); -s32 D_L06_0015F68C = 0; +s32 l06_look_usage_record_count __asm__("D_L06_0015F68C") = 0; extern u8 D_L06_00167558[]; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); @@ -917,7 +917,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern void build_spherical_offset(void *, f32, f32, f32) __asm__("FUN_00214db0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); @@ -1016,7 +1016,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L06_0022e020"); void update_hero_motion_for_current_state(void) { struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 initial_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 vector_or_hit_descriptor_scratch; @@ -1067,7 +1067,7 @@ void update_hero_motion_for_current_state(void) { D_L06_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L06_0015F68C++; + l06_look_usage_record_count++; } } } @@ -3257,7 +3257,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (initial_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l06/mobys/alien_queen.c b/src/overlays/l06/mobys/alien_queen.c index cde0a1166c..d475c6de74 100644 --- a/src/overlays/l06/mobys/alien_queen.c +++ b/src/overlays/l06/mobys/alien_queen.c @@ -197,9 +197,9 @@ extern int D_L06_001413D0 NOT_SDA; #include "rnc/overlay/l06/mobys/alien_queen_data/update_alien_queen_hit_response_and_recovery.h" -int D_L06_00161F10 = 0x80808080; +int l06_alien_queen_glow_tween_start_color __asm__("D_L06_00161F10") = 0x80808080; -int D_L06_00161F14 = 0x80804080; +int l06_alien_queen_glow_tween_end_color __asm__("D_L06_00161F14") = 0x80804080; /* Updates the object's health, hit response, recovery timer and path motion. */ void update_alien_queen_hit_response_and_recovery(char *moby) __asm__("FUN_L06_002fa9c0"); @@ -363,7 +363,7 @@ typedef struct AlienQueenVars { u8 unk28; u8 unk29; u8 pad_2A[0x4]; - u8 unk2E; + u8 death_control_flags; u8 pad_2F[0x19]; f32 z_velocity; u8 pad_4C[0xC]; @@ -373,7 +373,7 @@ typedef struct AlienQueenVars { u8 pad_5B[0x5]; u8 anim_state; u8 pad_61[0x6]; - u8 unk67; + u8 hit_reaction_tween_target; u8 pad_68[0x8]; u8 unk70; u8 pad_71[0x3F]; @@ -394,9 +394,9 @@ typedef struct AlienQueenVars { s32 slider_list; s32 unk108; s32 animation_update; - s32 unk110; - s32 unk114; - f32 unk118; + s32 health_sixteenths; + s32 saved_path_point_count; + f32 camera_blend_fraction; u8 unk11C; u8 pad_11D[0x3]; s32 timer_120; @@ -405,9 +405,9 @@ typedef struct AlienQueenVars { s32 timer_12C; u8 unk130; u8 pad_131[0x3F]; - s32 unk170; + s32 intro_or_recovery_delay_active; f32 recovery_health; - s32 unk178; + s32 suppress_death_dialogue; } AlienQueenVars; /* Moby class 1051 */ @@ -430,7 +430,7 @@ void alien_queen_update(unsigned char *moby) { func_L00_00236710_q, func_L00_00236830_q, func_L06_0024A080_q, - &alien_queen_update_vars->unk110, + &alien_queen_update_vars->health_sixteenths, 0x1EF); } switch ((unsigned char)moby[0x20]) { @@ -440,14 +440,15 @@ void alien_queen_update(unsigned char *moby) { alien_queen_update_vars->max_health = 0x1E; alien_queen_update_vars->unk29 = 1; alien_queen_update_vars->unk28 = 3; - alien_queen_update_vars->unk2E = 1; + alien_queen_update_vars->death_control_flags = 1; alien_queen_update_vars->unk58 = truncate_float_to_s32(14.0f); alien_queen_update_vars->unk5A = truncate_float_to_s32(18.4f); alien_queen_update_vars->timer_120 = scale_game_frames(0x4B0); - alien_queen_update_vars->unk178 = 0; + alien_queen_update_vars->suppress_death_dialogue = 0; qcopy(alien_queen_update_vars->unkC0, moby + 0x10); alien_queen_update_vars->animation_update = -1; - alien_queen_update_vars->unk114 = *D_L06_001B0C30_q[alien_queen_update_vars->path]; + alien_queen_update_vars->saved_path_point_count = + *D_L06_001B0C30_q[alien_queen_update_vars->path]; path = D_L06_001B0C30_q[alien_queen_update_vars->path]; lerp_vector(alien_queen_update_vars->path_midpoint, path + 4, @@ -473,8 +474,8 @@ void alien_queen_update(unsigned char *moby) { return; if (*(short *)(target + 0xA6) != 0) return; - if (alien_queen_update_vars->unk170 == 0) { - alien_queen_update_vars->unk170 = 1; + if (alien_queen_update_vars->intro_or_recovery_delay_active == 0) { + alien_queen_update_vars->intro_or_recovery_delay_active = 1; alien_queen_update_vars->timer_12C = scale_game_frames(10); break; } @@ -484,7 +485,7 @@ void alien_queen_update(unsigned char *moby) { func_L06_002F6818_q(level_mobys_q + (alien_queen_update_vars->unk100 << 8)); set_listed_alien_queen_sliders_state_2_and_data_28_to_one( alien_queen_update_vars->slider_list); - alien_queen_update_vars->unk170 = 0; + alien_queen_update_vars->intro_or_recovery_delay_active = 0; moby[0x20] = 2; MOBY(moby)->collision = MOBY(moby)->pclass->collision; MOBY(moby)->flags = (MOBY(moby)->flags | 0x1000) & 0xFFFE; @@ -727,9 +728,9 @@ void alien_queen_update(unsigned char *moby) { case ALIEN_QUEEN_STATE_DEATH: { unsigned char *flag; menu_item_enabled_19_lui[4] = 1; - alien_queen_update_vars->unk110 = 0; + alien_queen_update_vars->health_sixteenths = 0; moby[0x30] = 0xFF; - if (alien_queen_update_vars->unk2E == 2) { + if (alien_queen_update_vars->death_control_flags == 2) { func_L06_002F6790_q(level_mobys_q + (alien_queen_update_vars->unk100 << 8)); set_listed_alien_queen_sliders_state_2_and_clear_data_28( alien_queen_update_vars->slider_list); @@ -759,7 +760,7 @@ void alien_queen_update(unsigned char *moby) { MOBY(moby)->collision = 0; moby[0x31] = 0; MOBY(moby)->flags |= 1; - if (alien_queen_update_vars->unk178 != 0) + if (alien_queen_update_vars->suppress_death_dialogue != 0) return; flag = D_0013D407_q + 1; if (flag[0xA] != 0) @@ -825,7 +826,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { return; if ((unsigned int)(MOBY(moby)->state - 4) < 10 && alien_queen_hit_recovery_vars->unk108 != -1) D_L06_0014162A = *(short *)&alien_queen_hit_recovery_vars->unk108; - alien_queen_hit_recovery_vars->unk110 = + alien_queen_hit_recovery_vars->health_sixteenths = truncate_float_to_s32(alien_queen_hit_recovery_vars->health * 16.0f); dmg = 0.0f; hit = FUN_L00_0025a420(moby, 0x330000, 0); @@ -847,7 +848,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { } } alien_queen_hit_recovery_vars->health -= dmg; - if (alien_queen_hit_recovery_vars->unk170 == 0) { + if (alien_queen_hit_recovery_vars->intro_or_recovery_delay_active == 0) { if (scale_game_frames(10) <= alien_queen_hit_recovery_vars->timer_12C) { hp = alien_queen_hit_recovery_vars->health; recovery_hp = 20.0f; @@ -860,7 +861,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { if (hp <= recovery_hp && hp + dmg > recovery_hp) { start_recovery: alien_queen_hit_recovery_vars->health = recovery_hp; - alien_queen_hit_recovery_vars->unk170 = 1; + alien_queen_hit_recovery_vars->intro_or_recovery_delay_active = 1; alien_queen_hit_recovery_vars->recovery_health = recovery_hp; alien_queen_hit_recovery_vars->timer_12C = scale_game_frames(30); } @@ -886,7 +887,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { case HIT_RESPONSE_NONLETHAL_ANIMATION_MAINTENANCE: case HIT_RESPONSE_NONLETHAL_ANIMATION_FEEDBACK: case HIT_RESPONSE_NONLETHAL_ANIMATION_RESPONSE: - alien_queen_hit_recovery_vars->unk67 = 200; + alien_queen_hit_recovery_vars->hit_reaction_tween_target = 200; break; case HIT_RESPONSE_DEATH: case HIT_RESPONSE_DEATH_SEQUENCE: { @@ -902,7 +903,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { MOBY(moby)->flags &= 0xEFFF; if ((unsigned char)moby[0x53] != 10) FUN_00212f90(moby, 10, 0, scale_game_frames(10)); - alien_queen_hit_recovery_vars->unk67 = 0xFA; + alien_queen_hit_recovery_vars->hit_reaction_tween_target = 0xFA; break; } } @@ -911,7 +912,8 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { } MOBY(moby)->hit_slot = 0xFF; trooper_anim_finish(moby, &alien_queen_hit_recovery_vars->anim_state); - if ((alien_queen_hit_recovery_vars->unk2E & 2) && (unsigned char)moby[0x20] != 15) { + if ((alien_queen_hit_recovery_vars->death_control_flags & 2) && + (unsigned char)moby[0x20] != 15) { if (alien_queen_hit_recovery_vars->animation_update != -1) { set_animation_parameter(alien_queen_hit_recovery_vars->animation_update, 0); alien_queen_hit_recovery_vars->animation_update = -1; @@ -920,9 +922,9 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { return; } if ((unsigned char)moby[0x20] >= 2 && D_L06_00140408 != 8 && (pad_held_lui & 0x20)) - alien_queen_hit_recovery_vars->unk178 = 1; + alien_queen_hit_recovery_vars->suppress_death_dialogue = 1; timer = alien_queen_hit_recovery_vars->timer_12C; - if (timer != 0 && alien_queen_hit_recovery_vars->unk170 != 0) { + if (timer != 0 && alien_queen_hit_recovery_vars->intro_or_recovery_delay_active != 0) { --alien_queen_hit_recovery_vars->timer_12C; if (alien_queen_hit_recovery_vars->timer_12C < scale_game_frames(10)) D_L06_0015F3FC = @@ -932,7 +934,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { if (alien_queen_hit_recovery_vars->health > 10.0f) { alien_queen_hit_recovery_vars->health = 19.9f; moby[0x20] = 3; - alien_queen_hit_recovery_vars->unk170 = 0; + alien_queen_hit_recovery_vars->intro_or_recovery_delay_active = 0; qcopy(moby + 0x10, alien_queen_hit_recovery_vars->unkC0); MOBY(moby)->rot.z = fast_arc_tan(hero.motion.pos.f[0] - MOBY(moby)->pos.x, hero.motion.pos.f[1] - MOBY(moby)->pos.y); @@ -944,7 +946,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { LevelCuboid *base; alien_queen_hit_recovery_vars->health = 9.9f; moby[0x20] = 5; - alien_queen_hit_recovery_vars->unk170 = 0; + alien_queen_hit_recovery_vars->intro_or_recovery_delay_active = 0; base = &l06_cuboids[alien_queen_hit_recovery_vars->cuboid]; set_race_camera(&base->pos, &base->rot, 0x72, 1); qcopy(moby + 0x10, alien_queen_hit_recovery_vars->unkC0); @@ -956,7 +958,7 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { FUN_L06_002fb148_recovery_low(moby); } } - } else if (alien_queen_hit_recovery_vars->unk170 == 0) { + } else if (alien_queen_hit_recovery_vars->intro_or_recovery_delay_active == 0) { if (alien_queen_hit_recovery_vars->timer_12C < scale_game_frames(10)) { D_L06_0015F3FC = 1.0f - convert_integer_to_float(++alien_queen_hit_recovery_vars->timer_12C) / 10.0f; @@ -966,8 +968,8 @@ void update_alien_queen_hit_response_and_recovery(char *moby) { fast_add_rotations(alien_queen_hit_recovery_vars->unk128, alien_queen_glow_phase_speed_degrees_gp * 0.017453292f * frame_time); MOBY(moby)->glow_color = - fast_tween_color(D_L06_00161F10, - D_L06_00161F14, + fast_tween_color(l06_alien_queen_glow_tween_start_color, + l06_alien_queen_glow_tween_end_color, (fast_sin(alien_queen_hit_recovery_vars->unk128) + 1.0f) * 0.5f); path = D_L06_001B0C30[alien_queen_hit_recovery_vars->path]; FUN_L00_0025ff38(moby, &alien_queen_hit_recovery_vars->unk70, 0, 0, path + 4, *path, 255.0f); @@ -996,7 +998,7 @@ void start_alien_queen_intro(char *moby) { float output_position[4], output_rotation[4], moby_offset_vector[4]; AlienQueenVars *alien_queen_vars = (AlienQueenVars *)MOBY(moby)->pvars; LevelCuboid *hero_placement_node = &l06_cuboids[alien_queen_vars->cuboid]; - *(int *)&alien_queen_vars->unk118 = 0; + *(int *)&alien_queen_vars->camera_blend_fraction = 0; set_race_camera(&hero_placement_node->pos, &hero_placement_node->rot, 0x72, 0); qcopy(output_position, moby + 0x10); output_position[2] = hero.motion.pos.f[2] + 2.0f; @@ -1027,7 +1029,7 @@ int update_alien_queen_intro_camera(char *moby) { pos = moby + 0x10; } else { blend_acceleration_step = *(float *)&frame_time_sq * 3.0f; - advance_accelerated_scalar(&alien_queen_state->unk118, + advance_accelerated_scalar(&alien_queen_state->camera_blend_fraction, (float *)&alien_queen_state->unk11C, 1.0f, blend_acceleration_step, @@ -1041,17 +1043,19 @@ int update_alien_queen_intro_camera(char *moby) { fast_vec_add(hero_offset_position, hero_offset_position, &x->motion.pos); hero_offset_position[2] += 4.0f; pos = moby + 0x10; - lerp_vector( - output_position, moby_offset_position, hero_offset_position, alien_queen_state->unk118); + lerp_vector(output_position, + moby_offset_position, + hero_offset_position, + alien_queen_state->camera_blend_fraction); } output_rotation[2] = fast_arc_tan(MOBY(moby)->pos.x - output_position[0], MOBY(moby)->pos.y - output_position[1]); output_rotation[1] = -fast_arc_tan(vector_distance_xy(output_position, pos), MOBY(moby)->pos.z - output_position[2]) - - (1.0f - alien_queen_state->unk118) * 30.0f * DEG_TO_RAD; + (1.0f - alien_queen_state->camera_blend_fraction) * 30.0f * DEG_TO_RAD; set_camera_position(output_position); set_camera_rotation(output_rotation); - if (alien_queen_state->unk118 >= 1.0f && MOBY(moby)->prev_seq == 1) + if (alien_queen_state->camera_blend_fraction >= 1.0f && MOBY(moby)->prev_seq == 1) return 1; return 0; } diff --git a/src/overlays/l06/mobys/alien_snapper.c b/src/overlays/l06/mobys/alien_snapper.c index 2678dbc082..6ba008e36b 100644 --- a/src/overlays/l06/mobys/alien_snapper.c +++ b/src/overlays/l06/mobys/alien_snapper.c @@ -14,6 +14,7 @@ #include "rnc/math/random.h" #include "rnc/mobys/moby_spawn.h" #include "rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h" + #include "rnc/rendering/clip_volume.h" enum { @@ -91,21 +92,21 @@ typedef struct { u8 pad59; u8 f5A; /* 0x5A */ u8 pad5B[0x15]; - u8 f70[0x10]; /* 0x70 */ - f32 f80; /* 0x80 */ - f32 f84; /* 0x84 */ - f32 return_speed; /* 0x88 */ - f32 f8C; /* 0x8C */ - s32 f90; /* 0x90 */ - s32 f94; /* 0x94 */ - f32 f98; /* 0x98 */ + u8 f70[0x10]; /* 0x70 */ + f32 gravity_step; /* 0x80 */ + f32 motion_speed_adjustment_step; /* 0x84 */ + f32 return_speed; /* 0x88 */ + f32 f8C; /* 0x8C */ + s32 collision_radius_fixed; /* 0x90 */ + s32 motion_flags; /* 0x94 */ + f32 collision_height_offset; /* 0x98 */ u8 pad9C[0x11]; u8 fAD; /* 0xAD */ u8 padAE[0x22]; - s32 movement; /* 0xD0 */ - f32 fD4; /* 0xD4 */ - f32 fD8; /* 0xD8 */ - f32 fDC; /* 0xDC */ + s32 movement; /* 0xD0 */ + f32 fD4; /* 0xD4 */ + f32 max_ground_drop_distance; /* 0xD8 */ + f32 max_ground_rise_distance; /* 0xDC */ u8 padE0[0x14]; f32 speed; /* 0xF4 */ u8 padF8[0x28]; @@ -121,18 +122,18 @@ typedef struct { f32 angle_jitter; /* 0x194 */ f32 jitter_degrees; /* 0x198 */ u8 pad19C[4]; - f32 f1A0; /* 0x1A0 */ - f32 base_speed; /* 0x1A4 */ - s32 timer; /* 0x1A8 */ - s32 f1AC; /* 0x1AC */ - s32 path; /* 0x1B0 */ - s32 f1B4; /* 0x1B4 */ - s32 timer_max; /* 0x1B8 */ - s32 node; /* 0x1BC */ - s32 clip_volume; /* 0x1C0 */ - f32 reach_distance; /* 0x1C4 */ - f32 f1C8; /* 0x1C8 */ - s32 f1CC; /* 0x1CC */ + f32 f1A0; /* 0x1A0 */ + f32 base_speed; /* 0x1A4 */ + s32 timer; /* 0x1A8 */ + s32 f1AC; /* 0x1AC */ + s32 path; /* 0x1B0 */ + s32 activate_on_initialize; /* 0x1B4 */ + s32 timer_max; /* 0x1B8 */ + s32 node; /* 0x1BC */ + s32 clip_volume; /* 0x1C0 */ + f32 reach_distance; /* 0x1C4 */ + f32 f1C8; /* 0x1C8 */ + s32 f1CC; /* 0x1CC */ u8 pad1D0[0x10]; u8 f1E0[0x10]; /* 0x1E0 */ } SnapperVars_91A8; @@ -177,8 +178,8 @@ extern void func_L00_002592B0_91A8(Moby *, float, float *, float, float, float) __asm__("FUN_L00_00258278"); extern float approach_value(float *, float, float) __asm__("FUN_00213ed8"); extern float func_L06_002FAB28_91A8(Moby *) __asm__("FUN_L06_002f96f8"); -extern int -func_L00_00259B88_91A8(Moby *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); +extern int move_moby_with_ground_and_collision_checks( + Moby *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern void func_L00_00262DF0_91A8(float, int, void *, void *) __asm__("FUN_L00_00261d78"); extern void func_L00_00262DF0_b91A8(int, void *, void *, float) __asm__("FUN_L00_00261d78"); extern float compute_interpolated_record_value(Moby *) __asm__("FUN_0020c9e0"); @@ -206,29 +207,29 @@ typedef struct BlargVars { char pad00[0x20]; float health; /* 0x20 */ char pad24[0x14]; - int f38; /* 0x38 */ + int targeting_boost_refresh_pending; /* 0x38 */ char pad3C[0x24]; char f60[0x7]; /* 0x60 */ unsigned char f67; /* 0x67 */ char pad68[0x8]; - char f70[0x18]; /* 0x70 */ - float f88; /* 0x88 */ - float f8C; /* 0x8C */ + char f70[0x18]; /* 0x70 */ + float horizontal_motion_speed; /* 0x88 */ + float f8C; /* 0x8C */ char pad90[0x30]; - float fC0; /* 0xC0 */ - float fC4; /* 0xC4 */ + float motion_apex_animation_frame; /* 0xC0 */ + float motion_landing_animation_frame; /* 0xC4 */ char padC8[0x58]; - char f120[0x8]; /* 0x120 */ - float f128; /* 0x128 */ + char selected_target_xy[0x8]; /* 0x120 */ + float selected_target_z; /* 0x128 */ char pad12C[0x34]; - int f160; /* 0x160 */ - int f164; /* 0x164 */ + int selected_target_moby; /* 0x160 */ + int f164; /* 0x164 */ char pad168[0x8]; - char f170[0x30]; /* 0x170 */ - float f1A0; /* 0x1A0 */ + char home_position[0x30]; /* 0x170 */ + float f1A0; /* 0x1A0 */ char pad1A4[0x8]; - int f1AC; /* 0x1AC */ - int f1B0; /* 0x1B0 */ + int f1AC; /* 0x1AC */ + int movement_path_index; /* 0x1B0 */ char pad1B4[0x14]; float f1C8; /* 0x1C8 */ int f1CC; /* 0x1CC */ @@ -241,9 +242,9 @@ extern int D_001413D0[]; #include "rnc/overlay/l06/mobys/alien_snapper_data/update_alien_snapper_hit_response_and_targeting.h" -int D_L06_00161EE8 = 0x80808080; +int l06_alien_snapper_glow_gray_color __asm__("D_L06_00161EE8") = 0x80808080; -int D_L06_00161EEC = 0x80604040; +int l06_alien_snapper_glow_tinted_color __asm__("D_L06_00161EEC") = 0x80604040; extern int resolve_moby_hit_response() __asm__("FUN_00213928"); void trooper_anim_update(void *a, void *s) __asm__("FUN_L00_0025d458"); @@ -311,27 +312,27 @@ void alien_snapper_update(Moby *moby) { qcopy(&snapper_behavior->home, &moby->pos); snapper_behavior->reach_distance = random_float_between(0.0f, 1.0f); func_L01_0026E8E0_91A8(&snapper_behavior->movement); - snapper_behavior->fDC = 2.0f; - snapper_behavior->fD8 = 2.0f; + snapper_behavior->max_ground_rise_distance = 2.0f; + snapper_behavior->max_ground_drop_distance = 2.0f; snapper_behavior->movement = truncate_float_to_s32(D_L06_00161EB0 * 1024.0f); snapper_behavior->fD4 = D_L06_00161EB0; snapper_behavior->speed = snapper_behavior->base_speed * frame_time; - snapper_behavior->f90 = truncate_float_to_s32(768.0f); - snapper_behavior->f98 = 0.75f; - snapper_behavior->f80 = l06_alien_snapper_gravity * D_0015ED70; + snapper_behavior->collision_radius_fixed = truncate_float_to_s32(768.0f); + snapper_behavior->collision_height_offset = 0.75f; + snapper_behavior->gravity_step = l06_alien_snapper_gravity * D_0015ED70; snapper_behavior->fAD = 0; - snapper_behavior->f84 = 0.0005f; - snapper_behavior->f94 = 9; + snapper_behavior->motion_speed_adjustment_step = 0.0005f; + snapper_behavior->motion_flags = 9; snapper_behavior->f1C8 = random_angle_radians(); if (snapper_behavior->f1CC != 0) { - moby->state = 0xF; + moby->state = ALIEN_SNAPPER_STATE_FACE_HERO; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 0); } } else if (snapper_behavior->clip_volume >= 0) { - moby->state = 3; - } else if (snapper_behavior->f1B4 != 0) { - moby->state = 2; + moby->state = ALIEN_SNAPPER_STATE_WAIT_FOR_CLIP_TRIGGER; + } else if (snapper_behavior->activate_on_initialize != 0) { + moby->state = ALIEN_SNAPPER_STATE_ACTIVATION_SEQUENCE; snapper_behavior->timer = scale_game_frames(1); if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, 0); @@ -340,7 +341,7 @@ void alien_snapper_update(Moby *moby) { func_L06_002FAAC8_91A8(moby); } } else { - moby->state = 1; + moby->state = ALIEN_SNAPPER_STATE_WAIT_FOR_ACTIVATION; if (moby->prev_seq != 0) { blend_moby_animation(moby, 0, 0, 0); } @@ -349,7 +350,7 @@ void alien_snapper_update(Moby *moby) { break; case ALIEN_SNAPPER_STATE_WAIT_FOR_ACTIVATION: if (snapper_behavior->f164 != 2) { - moby->state = 2; + moby->state = ALIEN_SNAPPER_STATE_ACTIVATION_SEQUENCE; snapper_behavior->timer = scale_game_frames(1); if (moby->group != 0xFF) { func_L06_002FAAC8_91A8(moby); @@ -369,7 +370,7 @@ void alien_snapper_update(Moby *moby) { } else if (moby->anim_flags & 2) { if (vector_distance_xy(&moby->pos, ((char *)&D_0013F3D0)) < l06_alien_snapper_base_targeting_radius) { - moby->state = 8; + moby->state = ALIEN_SNAPPER_STATE_APPROACH_TARGET; snapper_behavior->angle_jitter = random_float_between(snapper_behavior->jitter_degrees * 0.017453292f, -(snapper_behavior->jitter_degrees * 0.017453292f)); @@ -379,7 +380,7 @@ void alien_snapper_update(Moby *moby) { } else { int frames = *((u8 *)moby->pclass->seqs[2] + 0x10); - moby->state = 6; + moby->state = ALIEN_SNAPPER_STATE_FACE_GOAL_AND_WAIT; if (moby->prev_seq != 2) { start_frame = random_float_between(0.0f, (float)frames - 1.0f); blend_moby_animation(moby, 2, start_frame, scale_game_frames(30)); @@ -391,7 +392,7 @@ void alien_snapper_update(Moby *moby) { if (snapper_behavior->clip_volume >= 0) { if (is_point_inside_clip_volume(((char *)&D_0013F3D0), snapper_behavior->clip_volume) != 0) { - moby->state = 4; + moby->state = ALIEN_SNAPPER_STATE_PREPARE_HOME_NODE_JUMP; if (moby->prev_seq != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(5)); } @@ -405,7 +406,7 @@ void alien_snapper_update(Moby *moby) { blend_moby_animation(moby, 6, 0, scale_game_frames(5)); break; case ALIEN_SNAPPER_ANIM_HOME_NODE_JUMP_WINDUP: - moby->state = 5; + moby->state = ALIEN_SNAPPER_STATE_JUMP_TO_HOME_NODE; qcopy(&snapper_behavior->home, &l06_cuboids[snapper_behavior->node].pos); snapper_behavior->return_speed = vector_distance_xy(&moby->pos, &snapper_behavior->home) / @@ -414,8 +415,8 @@ void alien_snapper_update(Moby *moby) { &snapper_behavior->home, 0, snapper_behavior->return_speed, - -snapper_behavior->f80); - snapper_behavior->f94 = 5; + -snapper_behavior->gravity_step); + snapper_behavior->motion_flags = 5; snapper_behavior->fAD = 3; func_L00_0025D5B0_91A8(moby, snapper_behavior->f70, @@ -433,7 +434,7 @@ void alien_snapper_update(Moby *moby) { break; case ALIEN_SNAPPER_STATE_JUMP_TO_HOME_NODE: if (func_L00_0025D6F0_91A8(moby, snapper_behavior->f70) & 1) { - moby->state = 6; + moby->state = ALIEN_SNAPPER_STATE_FACE_GOAL_AND_WAIT; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 5); } @@ -448,11 +449,11 @@ void alien_snapper_update(Moby *moby) { 0.3f, frame_time * 6.2831855f); if (snapper_behavior->f164 != 2) { - moby->state = 7; + moby->state = ALIEN_SNAPPER_STATE_WAIT_TO_APPROACH; snapper_behavior->timer = truncate_float_to_s32( random_float_between(0.0f, (float)snapper_behavior->timer_max)); } else if (snapper_behavior->f1AC != 0) { - moby->state = 9; + moby->state = ALIEN_SNAPPER_STATE_REPOSITION_AROUND_TARGET; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -486,25 +487,25 @@ void alien_snapper_update(Moby *moby) { scratch.m.dir[0] = fast_cos(moby->rot.z) * 2.0f; scratch.m.dir[1] = fast_sin(moby->rot.z) * 2.0f; scratch.m.dir[2] = 0.0f; - func_L00_00259B88_91A8( + move_moby_with_ground_and_collision_checks( moby, &snapper_behavior->movement, scratch.m.dir, scratch.m.out, 1.0f); moby->rot.z = saved_rot; func_L00_00262DF0_91A8(0.5f, snapper_behavior->path, &moby->pos, &moby->pos); - if (FUN_L00_00261b48( - snapper_behavior->path, &moby->pos, &target->pos, scratch.m.path_point) != 0 && + if (path_8808(snapper_behavior->path, &moby->pos, &target->pos, scratch.m.path_point) != + 0 && fast_vec_dist(&moby->pos, scratch.m.path_point) < snapper_behavior->reach_distance) { near = 1; } if (snapper_behavior->f1AC == 0) { - moby->state = 0xC; + moby->state = ALIEN_SNAPPER_STATE_RETURN_HOME; } else if (near) { - moby->state = 0xA; + moby->state = ALIEN_SNAPPER_STATE_WAIT_FOR_REPOSITION_ANIMATION; if (moby->prev_seq != 5) { blend_moby_animation(moby, 5, 0, scale_game_frames(10)); } } else if (vector_distance_xy(&moby->pos, &target->pos) < l06_alien_snapper_bite_approach_radius) { - moby->state = 0xB; + moby->state = ALIEN_SNAPPER_STATE_BITE_TARGET; if (moby->prev_seq != 4) { blend_moby_animation(moby, 4, 0, scale_game_frames(10)); } @@ -513,7 +514,7 @@ void alien_snapper_update(Moby *moby) { } case ALIEN_SNAPPER_STATE_WAIT_FOR_REPOSITION_ANIMATION: if (moby->anim_flags & 2) { - moby->state = 9; + moby->state = ALIEN_SNAPPER_STATE_REPOSITION_AROUND_TARGET; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(20)); } @@ -521,7 +522,7 @@ void alien_snapper_update(Moby *moby) { break; case ALIEN_SNAPPER_STATE_WAIT_TO_APPROACH: if (fast_dec_timer(&snapper_behavior->timer) != 0) { - moby->state = 8; + moby->state = ALIEN_SNAPPER_STATE_APPROACH_TARGET; snapper_behavior->angle_jitter = random_float_between(snapper_behavior->jitter_degrees * 0.017453292f, -(snapper_behavior->jitter_degrees * 0.017453292f)); @@ -560,21 +561,21 @@ void alien_snapper_update(Moby *moby) { scratch.m.dir[0] = fast_cos(moby->rot.z) * 2.0f; scratch.m.dir[1] = fast_sin(moby->rot.z) * 2.0f; scratch.m.dir[2] = 0.0f; - func_L00_00259B88_91A8( + move_moby_with_ground_and_collision_checks( moby, &snapper_behavior->movement, scratch.m.dir, scratch.m.out, 1.0f); moby->rot.z = saved_rot; func_L00_00262DF0_91A8(0.5f, snapper_behavior->path, &moby->pos, &moby->pos); if (l06_alien_snapper_max_home_distance < fast_vec_dist(&moby->pos, &snapper_behavior->home) || snapper_behavior->f164 == 2) { - moby->state = 0xC; + moby->state = ALIEN_SNAPPER_STATE_RETURN_HOME; } else if (vector_distance_xy(&moby->pos, &target->pos) < l06_alien_snapper_bite_approach_radius) { if (absolute_float(target->pos.z - moby->pos.z) < 1.0f) { char *hero = ((char *)&D_0013F350); if (*(int *)(hero + 0x1C0) < scale_game_frames(10)) { - moby->state = 0xB; + moby->state = ALIEN_SNAPPER_STATE_BITE_TARGET; if (moby->prev_seq != 4) { blend_moby_animation(moby, 4, 0, scale_game_frames(10)); } @@ -606,7 +607,7 @@ void alien_snapper_update(Moby *moby) { scratch.bite.dir[2] = 0.0f; func_L00_001F2BE8_91A8(0.5f, bite_query_position, 0, moby, &scratch.bite); } else if (moby->anim_flags & 2) { - moby->state = 8; + moby->state = ALIEN_SNAPPER_STATE_APPROACH_TARGET; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(20)); } @@ -629,13 +630,13 @@ void alien_snapper_update(Moby *moby) { scratch.m.dir[0] = fast_cos(moby->rot.z) * 2.0f; scratch.m.dir[1] = fast_sin(moby->rot.z) * 2.0f; scratch.m.dir[2] = 0.0f; - func_L00_00259B88_91A8( + move_moby_with_ground_and_collision_checks( moby, &snapper_behavior->movement, scratch.m.dir, scratch.m.out, 1.0f); moby->rot.z = saved_rot; func_L00_00262DF0_91A8(0.5f, snapper_behavior->path, &moby->pos, &moby->pos); if (fast_dec_timer(&snapper_behavior->timer) != 0 || l06_alien_snapper_retreat_distance_limit < fast_vec_dist(&moby->pos, &target->pos)) { - moby->state = 0xB; + moby->state = ALIEN_SNAPPER_STATE_BITE_TARGET; snapper_behavior->speed = frame_time * 5.0f; if (l06_alien_snapper_retreat_bite_override_enabled != 0) { if (moby->prev_seq != 4) { @@ -663,16 +664,16 @@ void alien_snapper_update(Moby *moby) { scratch.m.dir[0] = fast_cos(moby->rot.z) * 2.0f; scratch.m.dir[1] = fast_sin(moby->rot.z) * 2.0f; scratch.m.dir[2] = 0.0f; - func_L00_00259B88_91A8( + move_moby_with_ground_and_collision_checks( moby, &snapper_behavior->movement, scratch.m.dir, scratch.m.out, 1.0f); func_L00_00262DF0_b91A8(snapper_behavior->path, &moby->pos, &moby->pos, 0.5f); if (fast_vec_dist(&moby->pos, &snapper_behavior->home) < 1.0f) { - moby->state = 6; + moby->state = ALIEN_SNAPPER_STATE_FACE_GOAL_AND_WAIT; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(20)); } } else if (snapper_behavior->f164 != 2) { - moby->state = 8; + moby->state = ALIEN_SNAPPER_STATE_APPROACH_TARGET; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(20)); } @@ -690,7 +691,7 @@ void alien_snapper_update(Moby *moby) { D_0015ED70 * 6.2831855f, frame_time * 12.566371f); if (vector_distance_xy(&moby->pos, hero + 0x80) < 4.0f) { - moby->state = 0x10; + moby->state = ALIEN_SNAPPER_STATE_BITE_HERO; if (moby->prev_seq != 4) { blend_moby_animation(moby, 4, 0, scale_game_frames(20)); } @@ -723,7 +724,7 @@ void alien_snapper_update(Moby *moby) { func_L00_001F2BE8_91A8(0.5f, bite_query_position, 0, moby, &scratch.bite); collision_line(bite_query_position, &moby->pos, 0, moby, &scratch.bite); } else if (moby->anim_flags & 2) { - moby->state = 0xF; + moby->state = ALIEN_SNAPPER_STATE_FACE_HERO; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(20)); } @@ -738,7 +739,7 @@ void alien_snapper_update(Moby *moby) { mark_moby_for_removal(moby); break; } - moby->state = 0xD; + moby->state = ALIEN_SNAPPER_STATE_RETREAT_FROM_TARGET; moby->anim_speed = 1.0f; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(20)); @@ -787,10 +788,10 @@ void update_alien_snapper_hit_response_and_targeting(Moby *moby) { Target *target; int reaction; - if (snapper_vars->f38 != 0) { + if (snapper_vars->targeting_boost_refresh_pending != 0) { snapper_vars->f1AC = truncate_float_to_s32(func_001F9878_2FA618(random_float_between(180.0f, 240.0f))); - snapper_vars->f38 = 0; + snapper_vars->targeting_boost_refresh_pending = 0; } fast_dec_timer(&snapper_vars->f1AC); damage = 0.0f; @@ -826,10 +827,10 @@ void update_alien_snapper_hit_response_and_targeting(Moby *moby) { case HIT_RESPONSE_NONLETHAL_ANIMATION_FEEDBACK: case HIT_RESPONSE_NONLETHAL_KNOCKBACK: moby->state = ALIEN_SNAPPER_STATE_HIT_KNOCKBACK; - snapper_vars->f88 = frame_time + frame_time; + snapper_vars->horizontal_motion_speed = frame_time + frame_time; snapper_vars->f8C = frame_time; - snapper_vars->fC0 = 5.0f; - snapper_vars->fC4 = 8.5f; + snapper_vars->motion_apex_animation_frame = 5.0f; + snapper_vars->motion_landing_animation_frame = 8.5f; func_L00_0025D5B0_2FA618( moby, snapper_vars->f70, 9, 1, 0, fast_arc_tan(target->x, target->y)); snapper_vars->f67 = 0xFA; @@ -838,10 +839,10 @@ void update_alien_snapper_hit_response_and_targeting(Moby *moby) { case HIT_RESPONSE_DEATH_SEQUENCE: moby->state = ALIEN_SNAPPER_STATE_DEATH_MOTION; moby->flags &= 0xEFFF; - snapper_vars->f88 = frame_time * 8.0f; + snapper_vars->horizontal_motion_speed = frame_time * 8.0f; snapper_vars->f8C = frame_time * 5.0f; - snapper_vars->fC0 = 7.5f; - snapper_vars->fC4 = 14.5f; + snapper_vars->motion_apex_animation_frame = 7.5f; + snapper_vars->motion_landing_animation_frame = 14.5f; func_L00_0025D5B0_2FA618( moby, snapper_vars->f70, 10, 1, 0, fast_arc_tan(target->x, target->y)); snapper_vars->f67 = 0xFA; @@ -867,8 +868,9 @@ void update_alien_snapper_hit_response_and_targeting(Moby *moby) { } snapper_vars->f1C8 = fast_add_rotations( snapper_vars->f1C8, alien_snapper_glow_phase_speed_degrees_gp * 0.017453292f * frame_time); - moby->glow_color = func_001FA8A8_2FA618( - D_L06_00161EE8, D_L06_00161EEC, (fast_sin(snapper_vars->f1C8) + 1.0f) * 0.5f); + moby->glow_color = func_001FA8A8_2FA618(l06_alien_snapper_glow_gray_color, + l06_alien_snapper_glow_tinted_color, + (fast_sin(snapper_vars->f1C8) + 1.0f) * 0.5f); if (snapper_vars->f1AC != 0) { snapper_vars->f1A0 = l06_alien_snapper_base_targeting_radius + 6.0f; @@ -884,18 +886,19 @@ void update_alien_snapper_hit_response_and_targeting(Moby *moby) { if (activate_effect_l08(snapper_vars->f1A0, moby, - snapper_vars->f120, + snapper_vars->selected_target_xy, 0, 0, - D_L06_001B0FB0_2FA618[snapper_vars->f1B0] + 4, - *D_L06_001B0FB0_2FA618[snapper_vars->f1B0]) != 2) { - if (snapper_vars->f1A0 < vector_distance_xy(snapper_vars->f170, snapper_vars->f120) || - 3.0f < absolute_float(moby->pos.z - snapper_vars->f128)) { + D_L06_001B0FB0_2FA618[snapper_vars->movement_path_index] + 4, + *D_L06_001B0FB0_2FA618[snapper_vars->movement_path_index]) != 2) { + if (snapper_vars->f1A0 < + vector_distance_xy(snapper_vars->home_position, snapper_vars->selected_target_xy) || + 3.0f < absolute_float(moby->pos.z - snapper_vars->selected_target_z)) { snapper_vars->f164 = 2; } } - if (snapper_vars->f160 == 0) { - snapper_vars->f160 = D_001413D0[0]; + if (snapper_vars->selected_target_moby == 0) { + snapper_vars->selected_target_moby = D_001413D0[0]; } } diff --git a/src/overlays/l06/mobys/beam_barrier.c b/src/overlays/l06/mobys/beam_barrier.c index 00ae458dbe..37099c7992 100644 --- a/src/overlays/l06/mobys/beam_barrier.c +++ b/src/overlays/l06/mobys/beam_barrier.c @@ -346,23 +346,23 @@ extern int get_effect_texture(int) __asm__("FUN_001f44b8"); extern void vu1_add_g_sregister(int, long) __asm__("FUN_00233980"); extern void FUN_L06_00216b88(int *, float *); -int D_L06_00161DD0 = 0; +int l06_beam_barrier_gs_alpha_a_selector __asm__("D_L06_00161DD0") = 0; -int D_L06_00161DD4 = 2; +int l06_beam_barrier_gs_alpha_b_selector __asm__("D_L06_00161DD4") = 2; -int D_L06_00161DD8 = 0; +int l06_beam_barrier_gs_alpha_c_selector __asm__("D_L06_00161DD8") = 0; -int D_L06_00161DDC = 1; +int l06_beam_barrier_gs_alpha_d_selector __asm__("D_L06_00161DDC") = 1; int D_L06_00161DF0 = 0x80c04070; -int D_L06_00161DF4 = 0xff0000; +int l06_beam_barrier_strand_color_at_threshold __asm__("D_L06_00161DF4") = 0xff0000; float beam_barrier_texture_u_step_gp __asm__("D_L06_00161DF8") = 0.25f; -float D_L06_00161DFC = 0; +float l06_beam_barrier_texture_u_phase __asm__("D_L06_00161DFC") = 0; -Vec4 D_L06_001DB0F0[4][30] = {0}; +Vec4 l06_beam_barrier_strand_local_points[4][30] __asm__("D_L06_001DB0F0") = {0}; void draw_beam_barrier_segments(char *moby) { float base_matrix[16]; @@ -391,9 +391,10 @@ void draw_beam_barrier_segments(char *moby) { vu1_add_g_sregister(0x14, 0xFF9000000260L); vu1_add_g_sregister(8, 0); vu1_add_g_sregister(0x42, - (long)D_L06_00161DD0 | ((long)D_L06_00161DD4 << 2) | - ((long)D_L06_00161DD8 << 4) | ((long)D_L06_00161DDC << 6) | - 0x8000000000L); + (long)l06_beam_barrier_gs_alpha_a_selector | + ((long)l06_beam_barrier_gs_alpha_b_selector << 2) | + ((long)l06_beam_barrier_gs_alpha_c_selector << 4) | + ((long)l06_beam_barrier_gs_alpha_d_selector << 6) | 0x8000000000L); font_queue_vu_state(); first_matrix = segment_matrix[0]; segment_params = beam_segment_draw_params; @@ -415,11 +416,11 @@ void draw_beam_barrier_segments(char *moby) { color = fast_tween_color( D_L06_00161DF0 & 0xFFFFFF, D_L06_00161DF0, *(float *)(beam_barrier_vars + 0x18)); strand_cycle_duration_frames = D_L06_00161E50; - points = (int *)D_L06_001DB0F0; + points = (int *)l06_beam_barrier_strand_local_points; strand_color_transition_threshold_frames = D_L06_00161E54; - fourth = D_L06_00161DF4; + fourth = l06_beam_barrier_strand_color_at_threshold; seventh = beam_barrier_texture_u_step_gp; - eighth = D_L06_00161DFC; + eighth = l06_beam_barrier_texture_u_phase; sequence = D_L06_00161E40; beam_segment_draw_params[0] = strand_cycle_duration_frames; beam_segment_draw_params[2] = (int)sequence; @@ -443,7 +444,7 @@ f32 beam_barrier_class_scale_multiplier_gp __asm__("D_L06_00161E14") = 1. f32 beam_barrier_strand_jitter_max_speed_gp __asm__("D_L06_00161E04") = 0.4f; extern int D_L06_00161E40[4] MACRO_ADDR; -Vec4 D_L06_001DB870[4][30] = {0}; +Vec4 l06_beam_barrier_strand_point_drifts[4][30] __asm__("D_L06_001DB870") = {0}; extern void FUN_L06_00217300(void *); @@ -460,32 +461,39 @@ void animate_beam_barrier_strands(struct Moby *moby) { moby->rot.x = fast_add_rotations( moby->rot.x, beam_barrier_rotation_x_speed_degrees_gp * DEG_TO_RAD * frame_time); - phase = D_L06_00161DFC + beam_barrier_render_phase_speed_gp * frame_time; + phase = l06_beam_barrier_texture_u_phase + beam_barrier_render_phase_speed_gp * frame_time; moby->scale = moby->pclass->scale * beam_barrier_class_scale_multiplier_gp; - D_L06_00161DFC = phase; + l06_beam_barrier_texture_u_phase = phase; if (phase > 1.0f) { - D_L06_00161DFC = phase - 1.0f; + l06_beam_barrier_texture_u_phase = phase - 1.0f; } step = l06_beam_barrier_strand_length / 30.0f; y = -(l06_beam_barrier_strand_length * 0.5f); for (i = 0; i < 4; i++) { if (D_L06_00161E40[i] == 0) { for (k = 0; k < 30; k++) { - FUN_L06_00217300(&D_L06_001DB0F0[i][k]); - D_L06_001DB0F0[i][k].f[1] = y; + FUN_L06_00217300(&l06_beam_barrier_strand_local_points[i][k]); + l06_beam_barrier_strand_local_points[i][k].f[1] = y; random_vector( &jitter[k], 0.0f, beam_barrier_strand_jitter_max_speed_gp * frame_time); y += step; } for (k = 1; k < 29; k++) { - fast_vec_add(&D_L06_001DB870[i][k], &jitter[k - 1], &jitter[k]); - fast_vec_add(&D_L06_001DB870[i][k], &D_L06_001DB870[i][k], &jitter[k + 1]); - fast_vec_scale(&D_L06_001DB870[i][k], &D_L06_001DB870[i][k], 0.333f); + fast_vec_add( + &l06_beam_barrier_strand_point_drifts[i][k], &jitter[k - 1], &jitter[k]); + fast_vec_add(&l06_beam_barrier_strand_point_drifts[i][k], + &l06_beam_barrier_strand_point_drifts[i][k], + &jitter[k + 1]); + fast_vec_scale(&l06_beam_barrier_strand_point_drifts[i][k], + &l06_beam_barrier_strand_point_drifts[i][k], + 0.333f); } D_L06_00161E40[i] = D_L06_00161E50; } else { for (j = 1; j < 29; j++) { - fast_vec_add(&D_L06_001DB0F0[i][j], &D_L06_001DB0F0[i][j], &D_L06_001DB870[i][j]); + fast_vec_add(&l06_beam_barrier_strand_local_points[i][j], + &l06_beam_barrier_strand_local_points[i][j], + &l06_beam_barrier_strand_point_drifts[i][j]); } D_L06_00161E40[i]--; } diff --git a/src/overlays/l06/mobys/breakable_window.c b/src/overlays/l06/mobys/breakable_window.c index 15a8192d0e..3db0ffd421 100644 --- a/src/overlays/l06/mobys/breakable_window.c +++ b/src/overlays/l06/mobys/breakable_window.c @@ -67,7 +67,7 @@ typedef struct { typedef struct { char pad[0x38]; - float f38; + float translation_z; int pad3c; } B3003f0; @@ -792,7 +792,7 @@ void draw_backdrop_mesh(void) { quad.unk70 = 0; set_identity_matrix(&backdrop_draw_transform); shared_quad_vertex_color = l06_backdrop_mesh_vertex_color; - backdrop_draw_transform.f38 = moby_breakup_z_offset_gp; + backdrop_draw_transform.translation_z = moby_breakup_z_offset_gp; quad.color[3] = shared_quad_vertex_color; quad.color[2] = shared_quad_vertex_color; quad.color[1] = shared_quad_vertex_color; diff --git a/src/overlays/l06/mobys/elevator.c b/src/overlays/l06/mobys/elevator.c index 573a218b9c..8e2b2e578c 100644 --- a/src/overlays/l06/mobys/elevator.c +++ b/src/overlays/l06/mobys/elevator.c @@ -55,20 +55,20 @@ typedef struct { char f20[0x40]; int f60; int f64; - int f68; + int base_height_linked_moby_index; int f6C; int f70; int f74; - int f78; - int f7C; - int f80; - int f84; + int height_cuboid_index; + int vehicle_exit_placement_cuboid_index; + int vehicle_entry_placement_cuboid_index; + int vehicle_entry_configuration_active; int f88; - float f8C; + float height_velocity; int f90; int f94; int f98; - float f9C; + float color_pulse_phase; } Data_2FDA70; typedef struct Moby_2FDA70 { @@ -89,7 +89,7 @@ typedef struct Moby_2FDA70 { int f90; int f94; char pad98[0xE]; - short fA6; + short class_id; char padA8[0x58]; } Moby_2FDA70; @@ -104,9 +104,9 @@ typedef struct { short f30E; char pad310[0x1D70]; Moby_2FDA70 *moby; - int f2084; + int hero_state; char pad2088[0x1C]; - unsigned char f20A4; + unsigned char vehicle_mode; char pad20A5[0x226]; unsigned char f22CB; } Hero_2FDA70; @@ -129,13 +129,13 @@ extern float D_L06_00161F60 __attribute__((sda)); extern float height_cycle_max_speed_gp __asm__("D_L06_00161F64") __attribute__((sda)); extern float height_cycle_acceleration_gp __asm__("D_L06_00161F68") __attribute__((sda)); -int D_L06_00161F6C = 0x80202020; +int l06_elevator_pulse_dim_color __asm__("D_L06_00161F6C") = 0x80202020; -int D_L06_00161F70 = 0x80808080; +int l06_elevator_pulse_bright_color __asm__("D_L06_00161F70") = 0x80808080; -int D_L06_00161F74 = 0x80208020; +int l06_elevator_move_and_clearance_color __asm__("D_L06_00161F74") = 0x80208020; -int D_L06_00161F78 = -1; +int l06_elevator_scene_3_latch __asm__("D_L06_00161F78") = -1; extern void start_scene(int) __asm__("FUN_L00_00298840"); extern void request_music_track(int, int) __asm__("FUN_L01_0027a248"); @@ -196,11 +196,11 @@ void elevator_update(Moby_2FDA70 *moby) { moby->f2C = moby->cls->f24 * D_L06_00161F60; switch (moby->state) { case INITIALIZE_POSITION_AND_LINKED_MOBYS: - if (D_L06_00161F78 == -1) { + if (l06_elevator_scene_3_latch == -1) { if (D_0013D5DD_2FDA70[0x10] != 0) { - D_L06_00161F78 = 1; + l06_elevator_scene_3_latch = 1; } else { - D_L06_00161F78 = 0; + l06_elevator_scene_3_latch = 0; } } moby_data->f94 = 0; @@ -210,17 +210,18 @@ void elevator_update(Moby_2FDA70 *moby) { } else { moby->state = WAIT_FOR_HERO_TRIGGER_AT_NODE_OFFSET_HEIGHT; } - moby->pos.z = - l06_cuboids_macro[moby_data->f78].pos.z + l06_cuboids_macro[moby_data->f78].axes[2].z; - if (((Hero_2FDA70 *)(D_0013F350))->f20A4 == 0) { + moby->pos.z = l06_cuboids_macro[moby_data->height_cuboid_index].pos.z + + l06_cuboids_macro[moby_data->height_cuboid_index].axes[2].z; + if (((Hero_2FDA70 *)(D_0013F350))->vehicle_mode == 0) { ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f34 |= 1; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f34 |= 2; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f94 = 0; - } else if (((Hero_2FDA70 *)(D_0013F350))->f20A4 == 1) { + } else if (((Hero_2FDA70 *)(D_0013F350))->vehicle_mode == 1) { set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f60 << 8)); } set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + + (moby_data->base_height_linked_moby_index << 8)); break; case WAIT_FOR_INITIAL_HERO_ACTIVATION: if (is_point_inside_clip_volume(&((Hero_2FDA70 *)(D_0013F350))->pos, moby_data->f70) != 0) { @@ -229,9 +230,9 @@ void elevator_update(Moby_2FDA70 *moby) { } moby->state = WAIT_FOR_HERO_TRIGGER_AT_NODE_OFFSET_HEIGHT; moby_data->f90 = 0; - } else if (((Hero_2FDA70 *)(D_0013F350))->moby->fA6 == 0x57) { + } else if (((Hero_2FDA70 *)(D_0013F350))->moby->class_id == 0x57) { moby->state = WAIT_FOR_HERO_TRIGGER_AT_NODE_OFFSET_HEIGHT; - moby_data->f84 = 1; + moby_data->vehicle_entry_configuration_active = 1; } break; case WAIT_FOR_SCENE_GAME_MODE_CLEAR: @@ -244,39 +245,40 @@ void elevator_update(Moby_2FDA70 *moby) { if (fast_dec_timer(&moby_data->f90) != 0 && is_point_inside_clip_volume(&((Hero_2FDA70 *)(D_0013F350))->pos, moby_data->f70) != 0) { int ok; - if (((Hero_2FDA70 *)(D_0013F350))->f20A4 == 1) { + if (((Hero_2FDA70 *)(D_0013F350))->vehicle_mode == 1) { ok = try_set_help_message(9, 0x1781) != 0; } else if (D_0013D5CA_2FDA70[0] == 0) { ok = try_set_help_message(9, 0x177E) != 0; - } else if (moby_data->f84 != 0) { + } else if (moby_data->vehicle_entry_configuration_active != 0) { ok = try_set_help_message(9, 0x1785) != 0; } else { ok = try_set_help_message(9, 0x1789) != 0; } - if ((pad_pressed_words[0] & 0x10) && ((Hero_2FDA70 *)(D_0013F350))->f2084 != 100 && + if ((pad_pressed_words[0] & 0x10) && ((Hero_2FDA70 *)(D_0013F350))->hero_state != 100 && ok) { ((Hero_2FDA70 *)(D_0013F350))->f1F2 = scale_game_frames(0x3C); moby_data->f90 = scale_game_frames(0x78); - if (((Hero_2FDA70 *)(D_0013F350))->f20A4 == 1) { + if (((Hero_2FDA70 *)(D_0013F350))->vehicle_mode == 1) { fade_to_black(scale_game_frames(0x10)); set_moby_and_links_to_states_2_and_3(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); - set_moby_and_links_to_states_2_and_3(D_L06_0015FFD8_macro + - (moby_data->f68 << 8)); + set_moby_and_links_to_states_2_and_3( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f60 << 8)); - moby_data->f84 = 0; + moby_data->vehicle_entry_configuration_active = 0; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f94 = 0; restore_hero_from_vehicle_mode(); { - LevelCuboid *b = &l06_cuboids_macro[moby_data->f7C]; + LevelCuboid *b = + &l06_cuboids_macro[moby_data->vehicle_exit_placement_cuboid_index]; set_race_camera(&b->pos, &b->rot, 0, 1); } request_music_track(0, 10); ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f34 |= 1; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f34 |= 2; - if (D_0013D5DD_2FDA70[0x10] != 0 && D_L06_00161F78 == 0) { - D_L06_00161F78 = 1; + if (D_0013D5DD_2FDA70[0x10] != 0 && l06_elevator_scene_3_latch == 0) { + l06_elevator_scene_3_latch = 1; start_scene(3); moby->state = WAIT_FOR_SCENE_GAME_MODE_CLEAR; break; @@ -285,47 +287,50 @@ void elevator_update(Moby_2FDA70 *moby) { fade_to_black(scale_game_frames(0x10)); set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + - (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); set_moby_and_links_to_states_2_and_3(D_L06_0015FFD8_macro + (moby_data->f60 << 8)); - moby_data->f84 = 1; + moby_data->vehicle_entry_configuration_active = 1; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f94 = ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].cls->f10; ((Moby_2FDA70 *)D_L06_0015FFD8_macro)[moby_data->f6C].f34 &= 0xFFFE; { - LevelCuboid *b = &l06_cuboids_macro[moby_data->f80]; + LevelCuboid *b = + &l06_cuboids_macro[moby_data->vehicle_entry_placement_cuboid_index]; set_race_camera(&b->pos, &b->rot, 0, 1); } enter_hero_vehicle_mode_and_set_moby( 1, 0x43, (int)(D_L06_0015FFD8_macro + (moby_data->f6C << 8))); request_music_track(2, 7); - } else if (moby_data->f84 == 0) { + } else if (moby_data->vehicle_entry_configuration_active == 0) { fade_to_black(scale_game_frames(0x10)); set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + - (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); set_moby_and_links_to_states_2_and_3(D_L06_0015FFD8_macro + (moby_data->f60 << 8)); - moby_data->f84 = 1; + moby_data->vehicle_entry_configuration_active = 1; moby_data->f94 = 1; { - LevelCuboid *b = &l06_cuboids_macro[moby_data->f80]; + LevelCuboid *b = + &l06_cuboids_macro[moby_data->vehicle_entry_placement_cuboid_index]; set_race_camera(&b->pos, &b->rot, 0, 1); } } else { fade_to_black(scale_game_frames(0x10)); set_moby_and_links_to_states_2_and_3(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + - (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f60 << 8)); - moby_data->f84 = 0; + moby_data->vehicle_entry_configuration_active = 0; moby_data->f94 = 0; { - LevelCuboid *b = &l06_cuboids_macro[moby_data->f7C]; + LevelCuboid *b = + &l06_cuboids_macro[moby_data->vehicle_exit_placement_cuboid_index]; set_race_camera(&b->pos, &b->rot, 0, 1); } } @@ -342,13 +347,14 @@ void elevator_update(Moby_2FDA70 *moby) { moby_data->f90 = scale_game_frames(0x78); } else { moby->state = MOVE_TO_NODE_OFFSET_HEIGHT; - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); moby_data->f90 = scale_game_frames(0x78); } } else if (vector_distance_xy(&moby->pos, &((Hero_2FDA70 *)(D_0013F350))->pos) < 24.0f && moby->state == WAIT_FOR_HERO_TRIGGER_AT_NODE_OFFSET_HEIGHT && ((Hero_2FDA70 *)(D_0013F350))->pos.z + 5.0f < moby->pos.z) { - moby_data->f84 = 1; + moby_data->vehicle_entry_configuration_active = 1; moby_data->f94 = 1; moby->state = MOVE_TO_NODE_BASE_HEIGHT; set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); @@ -358,7 +364,8 @@ void elevator_update(Moby_2FDA70 *moby) { moby->state == WAIT_FOR_HERO_TRIGGER_AT_NODE_BASE_HEIGHT && moby->pos.z < ((Hero_2FDA70 *)(D_0013F350))->pos.z - 5.0f) { moby->state = MOVE_TO_NODE_OFFSET_HEIGHT; - set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + (moby_data->f68 << 8)); + set_moby_and_links_to_states_8_and_9(D_L06_0015FFD8_macro + + (moby_data->base_height_linked_moby_index << 8)); moby_data->f90 = scale_game_frames(0x78); } break; @@ -366,13 +373,13 @@ void elevator_update(Moby_2FDA70 *moby) { case MOVE_TO_NODE_OFFSET_HEIGHT: { float target; float height_acceleration_step; - target = l06_cuboids_macro[moby_data->f78].pos.z; + target = l06_cuboids_macro[moby_data->height_cuboid_index].pos.z; if (moby->state == MOVE_TO_NODE_OFFSET_HEIGHT) { - target += l06_cuboids_macro[moby_data->f78].axes[2].z; + target += l06_cuboids_macro[moby_data->height_cuboid_index].axes[2].z; } height_acceleration_step = height_cycle_acceleration_gp * frame_time_sq_macro; advance_accelerated_scalar(&moby->pos.z, - &moby_data->f8C, + &moby_data->height_velocity, target, height_acceleration_step, height_acceleration_step, @@ -382,7 +389,8 @@ void elevator_update(Moby_2FDA70 *moby) { moby->state = WAIT_FOR_HERO_CLEARANCE_AT_NODE_OFFSET_HEIGHT; set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f64 << 8)); } else { - set_moby_and_links_to_states_4_and_5(D_L06_0015FFD8_macro + (moby_data->f68 << 8)); + set_moby_and_links_to_states_4_and_5( + D_L06_0015FFD8_macro + (moby_data->base_height_linked_moby_index << 8)); moby->state = WAIT_FOR_HERO_CLEARANCE_AT_NODE_BASE_HEIGHT; } } @@ -406,18 +414,20 @@ void elevator_update(Moby_2FDA70 *moby) { } if (moby->state >= MOVE_TO_NODE_BASE_HEIGHT && moby->state <= WAIT_FOR_HERO_CLEARANCE_AT_NODE_BASE_HEIGHT) { - moby_data->f9C = 0.0f; - moby->f90 = D_L06_00161F74; + moby_data->color_pulse_phase = 0.0f; + moby->f90 = l06_elevator_move_and_clearance_color; } else { float color_blend; - moby_data->f9C = fast_add_rotations(moby_data->f9C, D_0015ED6C * 5.2359877f); - color_blend = fast_sin(moby_data->f9C) * 4.0f - 3.0f; + moby_data->color_pulse_phase = + fast_add_rotations(moby_data->color_pulse_phase, D_0015ED6C * 5.2359877f); + color_blend = fast_sin(moby_data->color_pulse_phase) * 4.0f - 3.0f; if (color_blend > 1.0f) { color_blend = 1.0f; } else if (color_blend < 0.0f) { color_blend = 0.0f; } - moby->f90 = fast_tween_color(D_L06_00161F6C, D_L06_00161F70, color_blend); + moby->f90 = fast_tween_color( + l06_elevator_pulse_dim_color, l06_elevator_pulse_bright_color, color_blend); } fast_vec_add(&position_delta, &position_delta, &moby->pos); update_entity_matrix(moby_data->f20, &position_delta, &initial_rotation, &moby->rot); diff --git a/src/overlays/l06/mobys/fred.c b/src/overlays/l06/mobys/fred.c index 8c1b10edca..861a46e2f6 100644 --- a/src/overlays/l06/mobys/fred.c +++ b/src/overlays/l06/mobys/fred.c @@ -40,7 +40,7 @@ typedef struct Data_301070 { char pad00[4]; short f4; char pad06[2]; - unsigned char f8; + unsigned char dialogue_activation_mode; char pad09[3]; float fC; char pad10[0x10]; @@ -53,9 +53,9 @@ typedef struct Data_301070 { float fB0; char padB4[0xC]; char fC0[0x68]; - float f128; + float look_yaw_target; char pad12C[0x14]; - float f140[4]; + float idle_look_target_position[4]; char pad150[8]; int f158, f15C; int f160, f164, f168, f16C, f170; @@ -149,7 +149,7 @@ void fred_update(struct Moby *moby) { initialize_npc_dialogue(moby, fred_vars); break; case UPDATE_FRED_DIALOGUE: - if (fred_vars->f8 == 1 && + if (fred_vars->dialogue_activation_mode == 1 && is_point_inside_clip_volume(&hero.motion.pos, fred_vars->f168) != 0) { fred_vars->fC = 16.0f; } else { @@ -316,7 +316,7 @@ void fred_update(struct Moby *moby) { fast_dec_timer(&fred_vars->f158); } else if (fred_vars->f158) { fred_vars->f158 = 0; - qcopy(fred_vars->f140, &hero.motion.body_center); + qcopy(fred_vars->idle_look_target_position, &hero.motion.body_center); } if (fast_dec_timer(&fred_vars->f15C)) { float heading; @@ -324,18 +324,20 @@ void fred_update(struct Moby *moby) { truncate_float_to_s32(scale_time(random_float_between(180.0f, 300.0f))); heading = fast_add_rotations(moby->rot.z, random_float_between(-90.0f, 90.0f) * 0.017453292f); - build_spherical_offset(fred_vars->f140, + build_spherical_offset(fred_vars->idle_look_target_position, 6.0f, heading, random_float_between(0.0f, 30.0f) * 0.017453292f); - fast_vec_add(fred_vars->f140, fred_vars->f140, ((float *)&moby->pos)); + fast_vec_add(fred_vars->idle_look_target_position, + fred_vars->idle_look_target_position, + ((float *)&moby->pos)); } if (fred_vars->f158) { qcopy(target, &hero.motion.body_center); rate = 0.04f; head_rate = 0.3f; } else { - qcopy(target, fred_vars->f140); + qcopy(target, fred_vars->idle_look_target_position); } } if (tracking) { @@ -356,7 +358,7 @@ void fred_update(struct Moby *moby) { pitch = -0.5235988f; fred_vars->fA4 = pitch; fred_vars->fA8 = yaw * 0.6f; - fred_vars->f128 = yaw * 0.4f; + fred_vars->look_yaw_target = yaw * 0.4f; } } if (big_head_cheat_enabled[0]) diff --git a/src/overlays/l06/mobys/spark_emitter.c b/src/overlays/l06/mobys/spark_emitter.c index d70ae28234..ed079242b7 100644 --- a/src/overlays/l06/mobys/spark_emitter.c +++ b/src/overlays/l06/mobys/spark_emitter.c @@ -24,7 +24,7 @@ typedef struct SparkData { int f4; char pad8[0x18]; int f20; - int f24; + int burst_timer; int f28; } SparkData; @@ -106,9 +106,9 @@ void spark_emitter_update(struct Moby *emitter) { case SPARK_EMITTER_TIMED_BURSTS: { int spark_count = 1; int k; - if (fast_dec_timer(&emitter_data->f24)) { + if (fast_dec_timer(&emitter_data->burst_timer)) { spark_count = 5; - emitter_data->f24 = + emitter_data->burst_timer = truncate_float_to_s32(scale_time(random_float_between(60.0f, 120.0f))); } if (random_integer_below(4) != 0 && spark_count < 2) { diff --git a/src/overlays/l06/mobys/toxic_gas_vent.c b/src/overlays/l06/mobys/toxic_gas_vent.c index 59b435d02b..99502fc1ce 100644 --- a/src/overlays/l06/mobys/toxic_gas_vent.c +++ b/src/overlays/l06/mobys/toxic_gas_vent.c @@ -65,7 +65,7 @@ typedef struct { int flags; char b18; char b19; - unsigned short h1A; + unsigned short vent_moby_class; float f1C; int i20; } Sx; @@ -87,7 +87,7 @@ typedef struct ToxicGasVentVars { f32 unk54; u8 pad_58[0x8]; s32 unk60; - f32 unk64; + f32 oscillation_amplitude_degrees; f32 unk68; f32 unk6C; f32 unk70; @@ -95,7 +95,7 @@ typedef struct ToxicGasVentVars { f32 unk78; f32 unk7C; f32 unk80; - f32 unk84; + f32 initial_heading_radians; s32 timer_88; u8 pad_8C[0x4]; s32 clip_volume_90; @@ -129,7 +129,7 @@ void toxic_gas_vent_update(char *vent_moby) { vent_moby[0x20] = 1; vent_data->unk80 = 360.0f / vent_data->unk68 * DEG_TO_RAD * frame_time; vent_data->unk7C = vent_data->unk6C * DEG_TO_RAD; - vent_data->unk84 = MOBY(vent_moby)->rot.z; + vent_data->initial_heading_radians = MOBY(vent_moby)->rot.z; } else { vent_moby[0x20] = 3; vent_data->timer_88 = scale_game_frames( @@ -143,9 +143,11 @@ void toxic_gas_vent_update(char *vent_moby) { } emit_toxic_gas_vent_sparks(vent_moby); check_oscillating_toxic_gas_vent_collisions(vent_moby); - heading_offset_radians = vent_data->unk64 * DEG_TO_RAD * fast_sin(vent_data->unk7C); + heading_offset_radians = + vent_data->oscillation_amplitude_degrees * DEG_TO_RAD * fast_sin(vent_data->unk7C); vent_data->unk7C = fast_add_rotations(vent_data->unk7C, vent_data->unk80); - MOBY(vent_moby)->rot.z = fast_add_rotations(vent_data->unk84, heading_offset_radians); + MOBY(vent_moby)->rot.z = + fast_add_rotations(vent_data->initial_heading_radians, heading_offset_radians); break; case VENT_TIMED_ACTIVE: if (voice_is_playing(vent_moby, vent_data->voice) == 0) { @@ -281,7 +283,7 @@ void check_oscillating_toxic_gas_vent_collisions(char *m) { collision_params.fC = 5627.9248f; collision_params.b18 = 3; collision_params.b19 = one; - collision_params.h1A = *(unsigned short *)(m + 0xA6); + collision_params.vent_moby_class = *(unsigned short *)(m + 0xA6); for (i = 3; i >= 0; i--) { segment_start_radius = remaining_radius; ra = fast_add_rotations(*(float *)(moby_data + 0x84), diff --git a/src/overlays/l07/mobys/bombomatic.c b/src/overlays/l07/mobys/bombomatic.c index b8347e9382..1bbac21c5b 100644 --- a/src/overlays/l07/mobys/bombomatic.c +++ b/src/overlays/l07/mobys/bombomatic.c @@ -164,7 +164,7 @@ typedef struct BombomaticVars { u8 pad_28[0x38]; s16 anim_state; u8 pad_62[0x5]; - u8 unk67; + u8 hit_transition_target; u8 pad_68[0x8]; u8 manipulator_70; u8 pad_71[0xF]; @@ -173,7 +173,7 @@ typedef struct BombomaticVars { s32 unkB0; s32 unkB4; s16 timer_B8; - s16 unkBA; + s16 launch_burst_index; f32 unkBC; f32 unkC0; s32 unkC4; @@ -325,7 +325,7 @@ void bombomatic_update(char *moby) { } tv -= hit_damage; *(float *)health_ptr = tv; - moby_data->unk67 = 0xFA; + moby_data->hit_transition_target = 0xFA; moby_data->unk26 = scale_game_frames(60); trooper_anim_update(moby, &moby_data->anim_state); } @@ -354,7 +354,7 @@ void bombomatic_update(char *moby) { moby_data->unkB4 = D_L07_0015F5CC + r9; moby_data->timer_B8 = 0; moby_data->unkBC = random_angle_radians(); - moby_data->unkBA = 0; + moby_data->launch_burst_index = 0; MOBY(moby)->state = BOMBOMATIC_LAUNCH_BURST; } break; @@ -407,8 +407,9 @@ void bombomatic_update(char *moby) { debris_velocity[2] = FUN_L00_0025abf0( vA0, launch_work_vector, 0, D_0015ED6C_gp * 7.0f, -(D_0015ED70 * 9.8f)); fast_vec_add(vA0, vA0, debris_velocity); - spawn_bombomatic_projectile(vA0, debris_velocity, (int)moby, moby_data->unkBA); - moby_data->unkBA = moby_data->unkBA + 1; + spawn_bombomatic_projectile( + vA0, debris_velocity, (int)moby, moby_data->launch_burst_index); + moby_data->launch_burst_index = moby_data->launch_burst_index + 1; } eeE4: if (moby_data->unkB4 <= D_L07_0015F5CC) { diff --git a/src/overlays/l07/mobys/command_falling_platform.c b/src/overlays/l07/mobys/command_falling_platform.c index 7136f98264..8ca22a5788 100644 --- a/src/overlays/l07/mobys/command_falling_platform.c +++ b/src/overlays/l07/mobys/command_falling_platform.c @@ -47,9 +47,9 @@ typedef struct CommandFallingPlatformVars { f32 unkB4; f32 unkB8; u8 unkBC; - u8 unkBD; - u8 unkBE; - u8 unkBF; + u8 pre_fall_delay; + u8 fall_signaling_enabled; + u8 parent_fall_signal; f32 unkC0; f32 unkC4; s32 unkC8; @@ -94,7 +94,7 @@ void command_falling_platform_update(char *moby) { if (((unsigned char *)moby)[0xBC] == 2) { MOBY(moby)->state = PLATFORM_TIMED_SWAY_BEFORE_FALL; MOBY(moby)->command = 3; - falling_platform_vars->unkAC = falling_platform_vars->unkBD; + falling_platform_vars->unkAC = falling_platform_vars->pre_fall_delay; } switch (((unsigned char *)moby)[0x20]) { case PLATFORM_INITIALIZE: @@ -126,7 +126,7 @@ void command_falling_platform_update(char *moby) { break; if (falling_platform_vars->unkAC == 0) falling_platform_vars->unkAC = rand() % 10; - if (falling_platform_vars->unkBE != 0) + if (falling_platform_vars->fall_signaling_enabled != 0) FUN_L01_0026e090(((unsigned char *)moby)[0x21], 2); MOBY(moby)->rot.x = fast_add_rotations( falling_platform_vars->saved_rot_x, @@ -152,8 +152,8 @@ void command_falling_platform_update(char *moby) { 0.017453292f); if (!fast_dec_timer(&falling_platform_vars->unkAC)) break; - if (falling_platform_vars->unkBE != 0) { - parent_data[0x19D] = falling_platform_vars->unkBF; + if (falling_platform_vars->fall_signaling_enabled != 0) { + parent_data[0x19D] = falling_platform_vars->parent_fall_signal; parent[0x20] = 12; } MOBY(moby)->state = PLATFORM_TILT_AND_FALL; diff --git a/src/overlays/l07/mobys/hero_falling_platform.c b/src/overlays/l07/mobys/hero_falling_platform.c index 12c4d2a85d..be66f4579b 100644 --- a/src/overlays/l07/mobys/hero_falling_platform.c +++ b/src/overlays/l07/mobys/hero_falling_platform.c @@ -39,7 +39,7 @@ typedef struct HeroFallingPlatformVars { f32 unk60[4]; u8 pad_70[0x30]; s16 timer_A0; - s16 unkA2; + s16 contact_sound_entry_index; f32 unkA4; f32 unkA8; f32 unkAC; @@ -74,16 +74,16 @@ void hero_falling_platform_update(char *moby) { MOBY(moby)->rot.x += random_float_between(-0.034906585f, 0.034906585f); MOBY(moby)->rot.y += random_float_between(-0.034906585f, 0.034906585f); MOBY(moby)->pos.z += random_float_between(-0.02f, 0.02f); - MOBY(moby)->state = 1; + MOBY(moby)->state = LEAF_WAIT_FOR_HERO_CONTACT; break; case LEAF_WAIT_FOR_HERO_CONTACT: if (is_hero_on_moby(moby)) { moby_data->unkA8 = MOBY(moby)->rot.x; moby_data->unkAC = MOBY(moby)->rot.y; moby_data->timer_A0 = scale_game_frames(0x1E); - if (moby_data->unkA2 != -1) - allocate_voice_for_target_entry(moby_data->unkA2, 0, (int)moby); - MOBY(moby)->state = 2; + if (moby_data->contact_sound_entry_index != -1) + allocate_voice_for_target_entry(moby_data->contact_sound_entry_index, 0, (int)moby); + MOBY(moby)->state = LEAF_TIMED_SWAY_AND_DESCENT; } break; case LEAF_TIMED_SWAY_AND_DESCENT: @@ -99,7 +99,7 @@ void hero_falling_platform_update(char *moby) { } if (fast_dec_timer_s16(&moby_data->timer_A0)) { moby_data->unkA4 = frame_scale * 0.002f; - MOBY(moby)->state = 3; + MOBY(moby)->state = LEAF_ACCELERATED_FALL; } break; case LEAF_ACCELERATED_FALL: diff --git a/src/overlays/l07/mobys/mine_group.c b/src/overlays/l07/mobys/mine_group.c index 198040d60c..59bf2821f5 100644 --- a/src/overlays/l07/mobys/mine_group.c +++ b/src/overlays/l07/mobys/mine_group.c @@ -158,10 +158,13 @@ char D_L07_00211580[] = "Moby 871 short on mines at %d in group %d compared to mine count in pVar %d\n"; void reset_moby_from_class_defaults(struct Moby *moby) { + enum { + MOBY_RESET_STATE = 0 + }; struct SpawnClassView *class_defaults; struct AnimTimer *animation_timer; - moby->state = 0; + moby->state = MOBY_RESET_STATE; class_defaults = (struct SpawnClassView *)moby->pclass; moby->command = 0; moby->flags = class_defaults->flags; @@ -186,7 +189,7 @@ typedef struct MineGroupVars { u8 pad_0[0x20]; f32 unk20; u8 pad_24[0x2]; - s16 unk26; + s16 surviving_hit_frame_count; u8 pad_28[0x38]; s16 anim_state; u8 pad_62[0x5]; @@ -197,9 +200,9 @@ typedef struct MineGroupVars { s32 unk78; f32 unk7C; f32 unk80; - s32 unk84; + s32 child_reset_gate; u8 pad_88[0x8]; - s32 unk90; + s32 child_reset_segment_index; u8 unk94; u8 unk95; } MineGroupVars; @@ -293,7 +296,7 @@ void mine_group_update(struct Moby *moby) { } *remaining -= step; boltcrate_pvars->unk67 = 0xfa; - boltcrate_pvars->unk26 = scale_game_frames(0x3c); + boltcrate_pvars->surviving_hit_frame_count = scale_game_frames(0x3c); trooper_anim_update(moby, &boltcrate_pvars->anim_state); } moby->hit_slot = 0xff; @@ -318,7 +321,7 @@ void mine_group_update(struct Moby *moby) { debug_print(mine_group_not_found_message, boltcrate_pvars->unk74); return; } - child_placement_segment_index = boltcrate_pvars->unk90 = + child_placement_segment_index = boltcrate_pvars->child_reset_segment_index = select_point_index_by_distance(&moby->pos, path, 0.0f); placed = 0; if (0 < ((MineGroupView *)boltcrate_pvars)->child_count) @@ -375,11 +378,11 @@ void mine_group_update(struct Moby *moby) { *(int *)(child + 0x94) = *(int *)(child + 0x90) + 1; if (cursor == 0 || *(unsigned char *)(cursor + 0x20) == 0xfe || *(unsigned char *)(cursor + 0x20) == 0xfd) { - if (boltcrate_pvars->unk84 != -1) { + if (boltcrate_pvars->child_reset_gate != -1) { fast_vec_sub((char *)child + 0x60, (char *)child + 0x80, (char *)cursor + 0x10); qcopy((void *)(cursor + 0x10), (void *)(child + 0x80)); if (fast_dec_timer((int *)(child + 0x98)) && - *(int *)(child + 0x90) == boltcrate_pvars->unk90) + *(int *)(child + 0x90) == boltcrate_pvars->child_reset_segment_index) reset_moby_from_class_defaults((struct Moby *)cursor); } } diff --git a/src/overlays/l07/mobys/snagglebeast.c b/src/overlays/l07/mobys/snagglebeast.c index 4da29cc31a..4d8f4bc463 100644 --- a/src/overlays/l07/mobys/snagglebeast.c +++ b/src/overlays/l07/mobys/snagglebeast.c @@ -96,15 +96,15 @@ typedef struct SnagglebeastVars { f32 turn_target[4]; u8 pad_D0[0x30]; f32 unk100[4]; - f32 unk110[4]; + f32 rope_start_position[4]; f32 unk120[4]; f32 unk130[4]; f32 unk140[4]; f32 unk150[4]; s32 timer; s32 unk164; - s32 unk168; - f32 unk16C; + s32 turn_controller_state; + f32 rope_extension_length; s32 navigation_ids[6]; s32 nav_path; s32 measured_path; @@ -128,7 +128,7 @@ typedef struct SnagglebeastVars { u8 unk1C4; u8 sphere_fade_direction; u8 sphere_shade; - u8 unk1C7; + u8 hero_capture_attack_enabled; f32 sphere_fade; s32 unk1CC; s32 unk1D0; @@ -139,9 +139,9 @@ typedef struct SnagglebeastVars { u8 turn_resume_animation; u8 timer_1F7; s32 voice; - f32 unk1FC; + f32 damage_reaction_amount; u8 joint_animation[0x64]; - f32 unk264; + f32 joint_damage_reaction_target; f32 target_yaw_offset; u8 pad_26C[0x14]; s16 point_light; @@ -330,7 +330,7 @@ void draw_snagglebeast_rope_attack_layer( quad.texture_coordinates[2][1] = half; quad.texture_coordinates[3][1] = half; } - qcopy(&quad.positions[1], rope_layer_moby_vars->unk110); + qcopy(&quad.positions[1], rope_layer_moby_vars->rope_start_position); qcopy(&quad.positions[3], rope_layer_moby_vars->unk140); inner = quad; qcopy(&inner.positions[0], rope_layer_moby_vars->unk120); @@ -380,19 +380,26 @@ void draw_and_probe_snagglebeast_rope_attack(char *moby) { rope_attack_moby_vars = (SnagglebeastVars *)MOBY(moby)->pvars; qzero(&rope_offset); one = 1.0f; - fast_vec_normalize( - &rope_offset, rope_attack_moby_vars->unk130, rope_attack_moby_vars->unk16C * 0.8f); - fast_vec_add(rope_attack_moby_vars->unk140, &rope_offset, rope_attack_moby_vars->unk110); - fast_vec_normalize(&rope_offset, &rope_offset, rope_attack_moby_vars->unk16C); - fast_vec_add(rope_attack_moby_vars->unk120, &rope_offset, rope_attack_moby_vars->unk110); + fast_vec_normalize(&rope_offset, + rope_attack_moby_vars->unk130, + rope_attack_moby_vars->rope_extension_length * 0.8f); + fast_vec_add( + rope_attack_moby_vars->unk140, &rope_offset, rope_attack_moby_vars->rope_start_position); + fast_vec_normalize(&rope_offset, &rope_offset, rope_attack_moby_vars->rope_extension_length); + fast_vec_add( + rope_attack_moby_vars->unk120, &rope_offset, rope_attack_moby_vars->rope_start_position); draw_snagglebeast_rope_attack_layer(moby, one, 0, one, 0x20000080); draw_snagglebeast_rope_attack_layer(moby, 0.7f, 10, 2.0f, 0x28008080); draw_snagglebeast_rope_attack_layer(moby, 0.4f, 20, 3.0f, 0x30B0FFFF); - fast_vec_sub(rope_direction, rope_attack_moby_vars->unk120, rope_attack_moby_vars->unk110); + fast_vec_sub( + rope_direction, rope_attack_moby_vars->unk120, rope_attack_moby_vars->rope_start_position); fast_vec_normalize(rope_direction, rope_direction, one); make_hit_descriptor(blk, moby, 0x30000, 1.00012302f, rope_direction); - if (collision_line( - rope_attack_moby_vars->unk110, rope_attack_moby_vars->unk120, 0, moby, blk) == 0) { + if (collision_line(rope_attack_moby_vars->rope_start_position, + rope_attack_moby_vars->unk120, + 0, + moby, + blk) == 0) { collect_mobies_in_sphere(0.5f, rope_attack_moby_vars->unk120, 0, moby, blk); } } @@ -531,7 +538,7 @@ void process_snagglebeast_damage(char *moby, remaining = -2.0f; if (!(2.0f < damage + damage)) remaining = -(damage + damage); - snagglebeast_instance_vars->unk1FC = remaining; + snagglebeast_instance_vars->damage_reaction_amount = remaining; FUN_L00_00200228(original_health / frame, (void *)((unsigned)&scratch | 4)); if ((float)snagglebeast_instance_vars->max_health - 1.0f < original_health) scratch.threshold = 5.0f; @@ -565,7 +572,7 @@ void process_snagglebeast_damage(char *moby, } if ((wide < original_health && *health <= wide) || (narrow < original_health && *health <= narrow)) - snagglebeast_instance_vars->unk1C7 = 1; + snagglebeast_instance_vars->hero_capture_attack_enabled = 1; } } goto decay_hit; @@ -580,10 +587,10 @@ void process_snagglebeast_damage(char *moby, MOBY(moby)->hit_slot = 0xff; } trooper_anim_finish(moby, &snagglebeast_instance_vars->unk60); - output = snagglebeast_instance_vars->unk1FC + 0.3f; - snagglebeast_instance_vars->unk1FC = output; + output = snagglebeast_instance_vars->damage_reaction_amount + 0.3f; + snagglebeast_instance_vars->damage_reaction_amount = output; if (output > 0.0f) - snagglebeast_instance_vars->unk1FC = 0.0f; + snagglebeast_instance_vars->damage_reaction_amount = 0.0f; } extern float random_float_between(float, float) __asm__("FUN_002132a8"); @@ -786,11 +793,14 @@ int start_snagglebeast_turn_toward_target(unsigned char *moby, int resume_animation, int use_fixed_target_position) { + enum { + SNAGGLEBEAST_TURN_CONTROLLER_RESET = 0 + }; float target_heading = fast_arc_tan(target_position[0] - MOBY(moby)->pos.x, target_position[1] - MOBY(moby)->pos.y); if (moby_vars->turn_start_angle < fast_difference_between_rotations(MOBY(moby)->rot.z, target_heading)) { - moby_vars->unk168 = 0; + moby_vars->turn_controller_state = SNAGGLEBEAST_TURN_CONTROLLER_RESET; MOBY(moby)->anim_speed = 1.0f; moby_vars->turn_saved_state = MOBY(moby)->state; moby_vars->turn_resume_animation = resume_animation; @@ -838,7 +848,7 @@ void update_snagglebeast_target_joint_animation(char *moby, moby_vars->target_yaw_offset = -1.3962634f; } k = frame_scale_sq; - moby_vars->unk264 = moby_vars->unk1FC; + moby_vars->joint_damage_reaction_target = moby_vars->damage_reaction_amount; update_joint_animation(moby, moby_vars->joint_animation, 0xB, k * 0.030f, k * 0.3f); } @@ -1043,9 +1053,9 @@ void snagglebeast_update(unsigned char *moby) { } if (FUN_L00_001fefc8(&snagglebeast_instance_state->timer_1F7)) { if ((vector_distance_xy(moby + 0x10, ((char *)&hero) + 0x80) > 8.0f && - MOBY(moby)->state != 5) || + MOBY(moby)->state != SNAGGLEBEAST_CHASE_TARGET) || (vector_distance_xy(moby + 0x10, ((char *)&hero) + 0x80) > 6.0f && - (MOBY(moby)->state == 5 || MOBY(moby)->command % 3U == 1))) { + (MOBY(moby)->state == SNAGGLEBEAST_CHASE_TARGET || MOBY(moby)->command % 3U == 1))) { follow_target = 1; } } @@ -1054,7 +1064,7 @@ void snagglebeast_update(unsigned char *moby) { if (fast_dec_timer_s16(&snagglebeast_instance_state->timer_19A) && target_distance > 9.0f) timer19a = 1; sight_ready = 0; - if (snagglebeast_instance_state->unk1C7 != 0) { + if (snagglebeast_instance_state->hero_capture_attack_enabled != 0) { char *g = ((char *)&hero); if (sight.moby == *(void **)(g + 0x2080) && target_distance < 30.0f && absolute_float(fast_subtract_rotations(target_angle, MOBY(moby)->rot.z)) < 1.3962634f) { @@ -1063,9 +1073,9 @@ void snagglebeast_update(unsigned char *moby) { } target_close = 0; if (fast_dec_timer_s16(&snagglebeast_instance_state->timer_198)) { - if (((MOBY(moby)->state == 5 || MOBY(moby)->command % 3U == 1) && + if (((MOBY(moby)->state == SNAGGLEBEAST_CHASE_TARGET || MOBY(moby)->command % 3U == 1) && target_distance < 14.0f) || - (MOBY(moby)->state != 5 && target_distance < 10.0f)) + (MOBY(moby)->state != SNAGGLEBEAST_CHASE_TARGET && target_distance < 10.0f)) target_close = 1; } { @@ -1110,7 +1120,7 @@ void snagglebeast_update(unsigned char *moby) { case SNAGGLEBEAST_PHASE_AFTER_THIRD_HEALTH_THRESHOLD: timer194 = 0; sight_ready = 0; - if (MOBY(moby)->state != 1) + if (MOBY(moby)->state != SNAGGLEBEAST_IDLE) timer19a = 0; break; case SNAGGLEBEAST_PHASE_FIRST_TIMED_DAMAGE_SEQUENCE: @@ -1143,7 +1153,8 @@ void snagglebeast_update(unsigned char *moby) { } if (MOBY(moby)->command % 3U == 2) snagglebeast_instance_state->health_display += 0xF; - if (MOBY(moby)->state != 8 && MOBY(moby)->state != 0) + if (MOBY(moby)->state != SNAGGLEBEAST_CAPTURE_HERO_AND_DRAIN_AMMO && + MOBY(moby)->state != SNAGGLEBEAST_INITIALIZE) suck_beam_queue_draw((int)moby); if ((int)snagglebeast_instance_state->sphere_fade_direction - 1 == 0) { if (snagglebeast_instance_state->voice == -1) @@ -1176,7 +1187,9 @@ void snagglebeast_update(unsigned char *moby) { add_draw_callback(draw_snagglebeast_sphere_effect, moby); update_snagglebeast_target_joint_animation( (char *)moby, snagglebeast_instance_state, hero.motion.pos.f); - if (MOBY(moby)->state != 0 && MOBY(moby)->state != 0xA && MOBY(moby)->state != 0x10) { + if (MOBY(moby)->state != SNAGGLEBEAST_INITIALIZE && + MOBY(moby)->state != SNAGGLEBEAST_DEATH_EXPLOSION && + MOBY(moby)->state != SNAGGLEBEAST_POST_DEATH_CLEANUP) { snagglebeast_instance_state->unk1B0 = queue_animation_update(0x16, 0xFFFF, @@ -1189,7 +1202,7 @@ void snagglebeast_update(unsigned char *moby) { switch (MOBY(moby)->state) { case SNAGGLEBEAST_INITIALIZE: *(int *)&D_L07_00161B64 = 0; - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; MOBY(moby)->command = 0; snagglebeast_instance_state->point_light = -1; snagglebeast_instance_state->measured_path_length = 0.0f; @@ -1245,7 +1258,7 @@ void snagglebeast_update(unsigned char *moby) { moby + 0x10, D_L07_001B0530[snagglebeast_instance_state->nav_path], 0.0f); suck_reset(moby); MOBY(moby)->scale *= 1.75f; - snagglebeast_instance_state->unk1C7 = 0; + snagglebeast_instance_state->hero_capture_attack_enabled = 0; snagglebeast_instance_state->turn_start_angle = 1.7453293f; snagglebeast_instance_state->unk29 = 1; snagglebeast_instance_state->unk58 = truncate_float_to_s32(30.0f); @@ -1267,16 +1280,16 @@ void snagglebeast_update(unsigned char *moby) { int r = random_int_between(0, 2); FUN_00212f90(moby, 5, r, random_int_between(0x12, 0x14)); } - MOBY(moby)->state = 4; + MOBY(moby)->state = SNAGGLEBEAST_SWEEP_BEAM_ATTACK; } if (timer194) { - if (MOBY(moby)->state != 5 || FUN_00213260(4) == 0) { + if (MOBY(moby)->state != SNAGGLEBEAST_CHASE_TARGET || FUN_00213260(4) == 0) { snagglebeast_instance_state->unk164 = 0; if (MOBY(moby)->prev_seq != 4) { int r = random_int_between(0, 9); FUN_00212f90(moby, 4, r, random_int_between(0x14, 0x28)); } - MOBY(moby)->state = 3; + MOBY(moby)->state = SNAGGLEBEAST_TRIPLE_SPAWN_ATTACK; MOBY(moby)->anim_speed = 1.0f; } } @@ -1286,9 +1299,9 @@ void snagglebeast_update(unsigned char *moby) { FUN_00212f90(moby, 6, r, random_int_between(0xF, 0x19)); } snagglebeast_instance_state->unk164 = 0; - snagglebeast_instance_state->unk16C = 0.0f; + snagglebeast_instance_state->rope_extension_length = 0.0f; snagglebeast_instance_state->unk1C4 = 0; - MOBY(moby)->state = 8; + MOBY(moby)->state = SNAGGLEBEAST_CAPTURE_HERO_AND_DRAIN_AMMO; snagglebeast_instance_state->unk294 = 0; snagglebeast_instance_state->voice = FUN_0022da68(9, 4, (int)moby); } @@ -1297,17 +1310,17 @@ void snagglebeast_update(unsigned char *moby) { int r = random_int_between(0, 2); FUN_00212f90(moby, 9, r, random_int_between(0x11, 0x19)); } - MOBY(moby)->state = 2; + MOBY(moby)->state = SNAGGLEBEAST_ALTERNATING_JOINT_EMISSION_BURST; } } - if (follow_target && MOBY(moby)->state != 8) { + if (follow_target && MOBY(moby)->state != SNAGGLEBEAST_CAPTURE_HERO_AND_DRAIN_AMMO) { if (MOBY(moby)->prev_seq != 0xA) { int r = random_int_between(0, 4); FUN_00212f90(moby, 0xA, r, random_int_between(0x14, 0x1E)); } MOBY(moby)->anim_speed = 1.5f; snagglebeast_instance_state->unk298 = 0; - MOBY(moby)->state = 5; + MOBY(moby)->state = SNAGGLEBEAST_CHASE_TARGET; } break; case SNAGGLEBEAST_ALTERNATING_JOINT_EMISSION_BURST: { @@ -1322,7 +1335,7 @@ void snagglebeast_update(unsigned char *moby) { break; FUN_L00_00258278((struct Moby *)moby, target_angle, - (float *)&snagglebeast_instance_state->unk168, + (float *)&snagglebeast_instance_state->turn_controller_state, frame_time_sq * 2.0943952f, frame_time_sq * 0.6981317f, frame_time * 2.0943952f); @@ -1344,14 +1357,14 @@ void snagglebeast_update(unsigned char *moby) { (MOBY(moby)->command % 3U == 1 && vector_distance_xy(&sight, moby + 0x10) > 20.0f)) { snagglebeast_instance_state->timer_198 = scale_game_frames(0x23); snagglebeast_instance_state->timer = scale_game_frames(0x1E); - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } break; } case SNAGGLEBEAST_TRIPLE_SPAWN_ATTACK: FUN_L00_00258278((struct Moby *)moby, target_angle, - (float *)&snagglebeast_instance_state->unk168, + (float *)&snagglebeast_instance_state->turn_controller_state, frame_time_sq * 1.5707964f, frame_time_sq * 0.6981317f, frame_time * 1.0471976f); @@ -1362,7 +1375,7 @@ void snagglebeast_update(unsigned char *moby) { snagglebeast_instance_state->unk164 += 1; qcopy(&position, moby + 0x10); speed = frame_time * 8.0f; - snagglebeast_instance_state->unk168 = 0; + snagglebeast_instance_state->turn_controller_state = 0; spawn_fading_ring_effect((int)moby, &position, 0x3A, 1.0f, 25.0f, 2.0f, speed, 1.0f); FUN_L00_0024f7c8(moby, (snagglebeast_instance_state->unk164 & 1) + 5, &position); configure_timed_point_light(moby, @@ -1403,7 +1416,7 @@ void snagglebeast_update(unsigned char *moby) { int r2 = random_int_between(0, 0xF); FUN_00212f90(moby, r1, r2, random_int_between(0x1E, 0x2A)); } - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } break; case SNAGGLEBEAST_SWEEP_BEAM_ATTACK: @@ -1462,7 +1475,7 @@ void snagglebeast_update(unsigned char *moby) { fast_vec_sub(&velocity, &offset, &velocity); fast_vec_add(&start, &start, &velocity); fast_vec_add(&direction, &direction, &velocity); - qcopy(snagglebeast_instance_state->unk110, &start); + qcopy(snagglebeast_instance_state->rope_start_position, &start); qcopy(snagglebeast_instance_state->unk120, &direction); qcopy(snagglebeast_instance_state->unk140, &start); fast_vec_sub(snagglebeast_instance_state->unk130, &direction, &start); @@ -1483,7 +1496,7 @@ void snagglebeast_update(unsigned char *moby) { snagglebeast_instance_state->unk164 = 0; snagglebeast_instance_state->timer_19A = scale_game_frames(0xF0); snagglebeast_instance_state->timer = scale_game_frames(0xC8); - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } } } @@ -1551,7 +1564,7 @@ void snagglebeast_update(unsigned char *moby) { int r = random_int_between(0, 1); FUN_00212f90(moby, 3, r, random_int_between(0xF, 0x16)); } - MOBY(moby)->state = 7; + MOBY(moby)->state = SNAGGLEBEAST_TURN_TOWARD_TARGET; } else { int hit = update_snagglebeast_chase_movement((struct Moby *)moby, @@ -1589,7 +1602,7 @@ void snagglebeast_update(unsigned char *moby) { FUN_00212f90(moby, r1, r2, random_int_between(0x14, 0x28)); } snagglebeast_instance_state->unk1A8 = -1; - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; break; } if (MOBY(moby)->prev_seq != 0xA) { @@ -1608,7 +1621,7 @@ void snagglebeast_update(unsigned char *moby) { int r = random_int_between(0, 2); FUN_00212f90(moby, 5, r, random_int_between(0x14, 0x19)); } - MOBY(moby)->state = 4; + MOBY(moby)->state = SNAGGLEBEAST_SWEEP_BEAM_ATTACK; } if (timer194) { snagglebeast_instance_state->unk164 = 0; @@ -1616,7 +1629,7 @@ void snagglebeast_update(unsigned char *moby) { int r = random_int_between(0, 5); FUN_00212f90(moby, 4, r, random_int_between(0x14, 0x28)); } - MOBY(moby)->state = 3; + MOBY(moby)->state = SNAGGLEBEAST_TRIPLE_SPAWN_ATTACK; MOBY(moby)->anim_speed = 1.0f; } if (target_above) { @@ -1626,7 +1639,7 @@ void snagglebeast_update(unsigned char *moby) { qcopy(snagglebeast_instance_state->unk150, *(char **)(g + 0x2FC) + 0x10); } snagglebeast_instance_state->unk150[2] += 3.0f; - MOBY(moby)->state = 9; + MOBY(moby)->state = SNAGGLEBEAST_ROPE_ATTACK; } if (sight_ready) { MOBY(moby)->anim_speed = 1.0f; @@ -1635,10 +1648,10 @@ void snagglebeast_update(unsigned char *moby) { FUN_00212f90(moby, 6, r, random_int_between(0x14, 0x19)); } snagglebeast_instance_state->unk164 = 0; - snagglebeast_instance_state->unk16C = 0.0f; + snagglebeast_instance_state->rope_extension_length = 0.0f; snagglebeast_instance_state->unk1C4 = 0; snagglebeast_instance_state->unk294 = 0; - MOBY(moby)->state = 8; + MOBY(moby)->state = SNAGGLEBEAST_CAPTURE_HERO_AND_DRAIN_AMMO; snagglebeast_instance_state->voice = FUN_0022da68(9, 4, (int)moby); } } @@ -1649,7 +1662,7 @@ void snagglebeast_update(unsigned char *moby) { int r2 = random_int_between(0, 2); FUN_00212f90(moby, r1, r2, random_int_between(0x1C, 0x28)); } - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } if (MOBY(moby)->seq == 0xC) update_alternating_joint_emission_burst( @@ -1687,7 +1700,7 @@ void snagglebeast_update(unsigned char *moby) { (struct Moby *)moby, fast_arc_tan(snagglebeast_instance_state->turn_target[0] - MOBY(moby)->pos.x, snagglebeast_instance_state->turn_target[1] - MOBY(moby)->pos.y), - (float *)&snagglebeast_instance_state->unk168, + (float *)&snagglebeast_instance_state->turn_controller_state, frame_time_sq * 2.0943952f, frame_time_sq * 0.6981317f, frame_time * 2.0943952f); @@ -1736,7 +1749,7 @@ void snagglebeast_update(unsigned char *moby) { if (MOBY(moby)->prev_seq != 0xB) FUN_00212f90(moby, 0xB, 0x3D, 1); } - MOBY(moby)->state = 0xD; + MOBY(moby)->state = SNAGGLEBEAST_WAIT_BEFORE_TIMED_DAMAGE; snagglebeast_instance_state->unk100[2] = 0.0f; if (MOBY(moby)->command % 3U < 2) MOBY(moby)->command += 1; @@ -1812,7 +1825,7 @@ void snagglebeast_update(unsigned char *moby) { if (done) { snagglebeast_instance_state->timer = scale_game_frames(0xA); snagglebeast_instance_state->sphere_fade_direction = 2; - MOBY(moby)->state = 0xE; + MOBY(moby)->state = SNAGGLEBEAST_APPLY_TIMED_DAMAGE_AND_SELECT_PATH; snagglebeast_instance_state->unk164 = snagglebeast_instance_state->max_health / 6; } break; @@ -1858,7 +1871,7 @@ void snagglebeast_update(unsigned char *moby) { (char *)l07_cuboids + (snagglebeast_instance_state->cuboid << 7) + 0x70); } - MOBY(moby)->state = 0xA; + MOBY(moby)->state = SNAGGLEBEAST_DEATH_EXPLOSION; } else { if (snagglebeast_instance_state->unk164 > 0) { snagglebeast_instance_state->timer = scale_game_frames(0xA); @@ -1904,7 +1917,7 @@ void snagglebeast_update(unsigned char *moby) { (int)collect_snagglebeast_navigation_ids( moby, snagglebeast_instance_state, &position), snagglebeast_instance_state->nav_path); - MOBY(moby)->state = 0xF; + MOBY(moby)->state = SNAGGLEBEAST_RESTORE_TRANSFORM_AND_RESUME_CHASE; } } break; @@ -1936,7 +1949,7 @@ void snagglebeast_update(unsigned char *moby) { MOBY(moby)->anim_speed = 1.5f; MOBY(moby)->command += 1; snagglebeast_instance_state->unk298 = 0; - MOBY(moby)->state = 6; + MOBY(moby)->state = SNAGGLEBEAST_CHASE_AFTER_TRANSFORM_RESTORE; snagglebeast_instance_state->timer = scale_game_frames(0x37); } break; @@ -1951,7 +1964,7 @@ void snagglebeast_update(unsigned char *moby) { ((int *)snagglebeast_instance_state)[0xA5] = 1; FUN_L00_00258278((struct Moby *)moby, hero_angle, - (float *)&snagglebeast_instance_state->unk168, + (float *)&snagglebeast_instance_state->turn_controller_state, frame_time_sq * 2.0943952f, frame_time_sq * 0.6981317f, frame_time * 2.0943952f); @@ -1961,10 +1974,10 @@ void snagglebeast_update(unsigned char *moby) { break; qcopy(snagglebeast_instance_state->unk140, ((char *)&hero) + 0x80); snagglebeast_instance_state->unk140[2] += 0.6f; - if (snagglebeast_instance_state->unk16C < hero_distance) { + if (snagglebeast_instance_state->rope_extension_length < hero_distance) { float step_time = frame_time * 15.0f; snagglebeast_instance_state->timer = 0; - snagglebeast_instance_state->unk16C += step_time; + snagglebeast_instance_state->rope_extension_length += step_time; } else { if (snagglebeast_instance_state->unk1C4 != 0 || (fast_dec_timer(&snagglebeast_instance_state->timer) && fr < 0.6f)) { @@ -1972,7 +1985,7 @@ void snagglebeast_update(unsigned char *moby) { char *g = ((char *)&hero); snagglebeast_instance_state->unk1C4 = 1; if (*(int *)(g + 0x2084) != 0x78) { - qcopy(snagglebeast_instance_state->unk110, ((char *)&hero) + 0x80); + qcopy(snagglebeast_instance_state->rope_start_position, ((char *)&hero) + 0x80); qcopy(snagglebeast_instance_state->unk120, ((char *)&hero) + 0x80); if (MOBY(moby)->pos.z < *(float *)(g + 0x88)) { snagglebeast_instance_state->unk120[2] = *(float *)(g + 0x88) + 2.0f; @@ -1986,13 +1999,13 @@ void snagglebeast_update(unsigned char *moby) { } fast_vec_sub(&velocity, snagglebeast_instance_state->unk120, - snagglebeast_instance_state->unk110); + snagglebeast_instance_state->rope_start_position); fast_vec_scale(&velocity, &velocity, frame_scale * 0.1f); - fast_vec_add(snagglebeast_instance_state->unk110, - snagglebeast_instance_state->unk110, + fast_vec_add(snagglebeast_instance_state->rope_start_position, + snagglebeast_instance_state->rope_start_position, &velocity); - qcopy(((char *)&hero) + 0x1D30, snagglebeast_instance_state->unk110); - qcopy(((char *)&hero) + 0x80, snagglebeast_instance_state->unk110); + qcopy(((char *)&hero) + 0x1D30, snagglebeast_instance_state->rope_start_position); + qcopy(((char *)&hero) + 0x80, snagglebeast_instance_state->rope_start_position); { char *captured_hero = ((char *)&hero); *(float *)(captured_hero + 0x1D48) = fast_add_rotations( @@ -2000,7 +2013,7 @@ void snagglebeast_update(unsigned char *moby) { *(float *)(captured_hero + 0x98) = fast_add_rotations( *(float *)(captured_hero + 0x1D48), frame_time * 25.132742f); } - snagglebeast_instance_state->unk16C = hero_distance; + snagglebeast_instance_state->rope_extension_length = hero_distance; slot = snagglebeast_ammo_drain_entries[snagglebeast_instance_state->unk164][0]; if (slot == -1) { snagglebeast_instance_state->unk164 = 0; @@ -2012,7 +2025,7 @@ void snagglebeast_update(unsigned char *moby) { if (*(int *)(g3 + 0x2084) == 0x78) hero_set_state(0, 1); } - snagglebeast_instance_state->unk1C7 = 0; + snagglebeast_instance_state->hero_capture_attack_enabled = 0; if (snagglebeast_instance_state->voice != -1) { char *sl = (voice_slot_state_base - 0x74) + snagglebeast_instance_state->voice * 0x70; @@ -2021,7 +2034,7 @@ void snagglebeast_update(unsigned char *moby) { } } snagglebeast_instance_state->voice = -1; - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } else { int ammo_transfer_count = (l07_ammo_transfer_records + slot)->count; int rem; @@ -2112,7 +2125,7 @@ void snagglebeast_update(unsigned char *moby) { hero_set_state(0, 1); } snagglebeast_instance_state->timer = scale_game_frames(0x46); - snagglebeast_instance_state->unk1C7 = 0; + snagglebeast_instance_state->hero_capture_attack_enabled = 0; if (snagglebeast_instance_state->voice != -1) { char *sl = (voice_slot_state_base - 0x74) + snagglebeast_instance_state->voice * 0x70; @@ -2121,7 +2134,7 @@ void snagglebeast_update(unsigned char *moby) { } } snagglebeast_instance_state->voice = -1; - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } if (target_close) { snagglebeast_instance_state->timer_196 = scale_game_frames(0x1E); @@ -2143,7 +2156,7 @@ void snagglebeast_update(unsigned char *moby) { } } snagglebeast_instance_state->voice = -1; - MOBY(moby)->state = 2; + MOBY(moby)->state = SNAGGLEBEAST_ALTERNATING_JOINT_EMISSION_BURST; } break; } @@ -2156,7 +2169,7 @@ void snagglebeast_update(unsigned char *moby) { FUN_L00_00258278((struct Moby *)moby, fast_arc_tan(snagglebeast_instance_state->unk150[0] - MOBY(moby)->pos.x, snagglebeast_instance_state->unk150[1] - MOBY(moby)->pos.y), - (float *)&snagglebeast_instance_state->unk168, + (float *)&snagglebeast_instance_state->turn_controller_state, frame_time_sq * 2.0943952f, frame_time_sq * 0.6981317f, frame_time * 2.0943952f); @@ -2177,10 +2190,10 @@ void snagglebeast_update(unsigned char *moby) { FUN_L00_0024f7c8(moby, 1, &direction); fast_vec_add(&position, &velocity, &direction); fast_vec_scale(&position, &position, 0.5f); - qcopy(snagglebeast_instance_state->unk110, &position); + qcopy(snagglebeast_instance_state->rope_start_position, &position); fast_vec_sub(snagglebeast_instance_state->unk130, snagglebeast_instance_state->unk150, - snagglebeast_instance_state->unk110); + snagglebeast_instance_state->rope_start_position); fast_vec_normalize(snagglebeast_instance_state->unk130, snagglebeast_instance_state->unk130, frame_scale); @@ -2198,15 +2211,15 @@ void snagglebeast_update(unsigned char *moby) { spawn_moby_point_offset_particle((char *)moby, 1, 800000.0f, 5.0f); } if (compute_interpolated_record_value(moby) >= 31.5f) { - snagglebeast_instance_state->unk16C = 0.0f; + snagglebeast_instance_state->rope_extension_length = 0.0f; snagglebeast_instance_state->unk164 = 3; - *(int *)&snagglebeast_instance_state->unk110[3] = 0; + *(int *)&snagglebeast_instance_state->rope_start_position[3] = 0; } break; case SNAGGLEBEAST_ROPE_EXTEND: { float r = vector_distance_xy(moby + 0x10, &sight.position30); - snagglebeast_instance_state->unk16C += frame_scale; - if (r <= snagglebeast_instance_state->unk16C) + snagglebeast_instance_state->rope_extension_length += frame_scale; + if (r <= snagglebeast_instance_state->rope_extension_length) snagglebeast_instance_state->unk164 = 4; if (fast_dec_timer(&snagglebeast_instance_state->timer)) snagglebeast_instance_state->timer = scale_game_frames(0x14); @@ -2216,15 +2229,15 @@ void snagglebeast_update(unsigned char *moby) { case SNAGGLEBEAST_ROPE_RETRACT: fast_vec_sub(&position, snagglebeast_instance_state->unk120, - snagglebeast_instance_state->unk110); + snagglebeast_instance_state->rope_start_position); fast_vec_normalize(&position, &position, frame_scale); - fast_vec_add(snagglebeast_instance_state->unk110, - snagglebeast_instance_state->unk110, + fast_vec_add(snagglebeast_instance_state->rope_start_position, + snagglebeast_instance_state->rope_start_position, &position); configure_timed_point_light(moby, snagglebeast_instance_state, 3, - snagglebeast_instance_state->unk110, + snagglebeast_instance_state->rope_start_position, scale_game_frames(0x1E), 0x800060FF, 0, @@ -2244,7 +2257,7 @@ void snagglebeast_update(unsigned char *moby) { int r2 = random_int_between(0, 7); FUN_00212f90(moby, r1, r2, random_int_between(0x1B, 0x2D)); } - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; break; } break; @@ -2281,7 +2294,7 @@ void snagglebeast_update(unsigned char *moby) { if (snagglebeast_instance_state->unk1CC != -1) initialize_moby_particle_effect_state(level_mobys + (snagglebeast_instance_state->unk1CC << 8)); - MOBY(moby)->state = 0x10; + MOBY(moby)->state = SNAGGLEBEAST_POST_DEATH_CLEANUP; MOBY(moby)->pos.z = 20.0f; } break; @@ -2294,9 +2307,9 @@ void snagglebeast_update(unsigned char *moby) { qcopy(snagglebeast_instance_state->unk150, *(char **)(g + 0x2FC) + 0x10); } snagglebeast_instance_state->unk150[2] += 3.0f; - MOBY(moby)->state = 9; + MOBY(moby)->state = SNAGGLEBEAST_ROPE_ATTACK; } else { - MOBY(moby)->state = 1; + MOBY(moby)->state = SNAGGLEBEAST_IDLE; } } break; @@ -2317,7 +2330,7 @@ void snagglebeast_update(unsigned char *moby) { break; } fast_vec_sub(snagglebeast_instance_state->unk100, moby + 0x10, &oldpos); - if (MOBY(moby)->state < 0xA) + if (MOBY(moby)->state < SNAGGLEBEAST_DEATH_EXPLOSION) jet_animate((struct Moby *)moby, 2.5f); update_timed_point_light_color((char *)snagglebeast_instance_state); } diff --git a/src/overlays/l07/mobys/snagglebeast_effects.c b/src/overlays/l07/mobys/snagglebeast_effects.c index 1e14191330..05de038257 100644 --- a/src/overlays/l07/mobys/snagglebeast_effects.c +++ b/src/overlays/l07/mobys/snagglebeast_effects.c @@ -45,9 +45,9 @@ allocate_packed_color_point_light_slot(float *, float, float, int) __asm__("FUN_ typedef struct EffData { char pad0[0x140]; - float f140[4]; - float f150[3]; - float f15C; + float beam_reference_position[4]; + float previous_hit_position[3]; + float previous_hit_valid; } EffData; typedef struct Packet { @@ -235,7 +235,7 @@ void draw_collision_clipped_moby_beam(struct Moby *effect_owner_moby) { Packet pkt; frame_phase_work_value = convert_integer_to_float(D_L07_0015F5CC_lui); - qcopy(oscillating_reference_position, moby_effect_data->f140); + qcopy(oscillating_reference_position, moby_effect_data->beam_reference_position); oscillation_work_value = fast_cos(normalize_angle(frame_phase_work_value / 11.0f)); frame_phase_work_value = frame_phase_work_value / 10.0f; oscillation_work_value = @@ -265,10 +265,11 @@ void draw_collision_clipped_moby_beam(struct Moby *effect_owner_moby) { effect_owner_moby, 1.0f, 1.0f); - if (moby_effect_data->f15C != 0.0f) { - fast_vec_sub(effect_sample_step, line_endpoint, moby_effect_data->f150); + if (moby_effect_data->previous_hit_valid != 0.0f) { + fast_vec_sub( + effect_sample_step, line_endpoint, moby_effect_data->previous_hit_position); fast_vec_normalize(effect_sample_step, effect_sample_step, 0.2f); - qcopy(effect_sample_position, moby_effect_data->f150); + qcopy(effect_sample_position, moby_effect_data->previous_hit_position); for (k = 0; k < 4; k++) { fast_vec_add(effect_sample_position, effect_sample_position, effect_sample_step); fast_vec_sub(sample_probe_offset, effect_sample_position, attachment_position); @@ -301,10 +302,10 @@ void draw_collision_clipped_moby_beam(struct Moby *effect_owner_moby) { } } } - qcopy(moby_effect_data->f150, line_endpoint); - moby_effect_data->f15C = 1.0f; + qcopy(moby_effect_data->previous_hit_position, line_endpoint); + moby_effect_data->previous_hit_valid = 1.0f; } else { - moby_effect_data->f15C = 0.0f; + moby_effect_data->previous_hit_valid = 0.0f; } pkt.x128 = get_effect_texture(0x3B); pkt.col[0] = pkt.col[1] = pkt.col[2] = pkt.col[3] = 0x80808080; diff --git a/src/overlays/l07/mobys/water.c b/src/overlays/l07/mobys/water.c index b8ce1e9bd3..5143b19956 100644 --- a/src/overlays/l07/mobys/water.c +++ b/src/overlays/l07/mobys/water.c @@ -33,9 +33,9 @@ typedef struct { int i2C; float f30; /* 0x30 */ float f34; - float f38; - unsigned char b3C; /* 0x3C */ - unsigned char b3D; + float water_direction_z; + unsigned char grid_alpha_2_fix; /* 0x3C */ + unsigned char grid_alpha_1_fix; } Cab; typedef struct { @@ -57,9 +57,9 @@ typedef struct { typedef struct { char pad0[0x10]; - float pos[4]; /* 0x10 */ - unsigned char state; /* 0x20 */ - unsigned char f21; /* 0x21 */ + float pos[4]; /* 0x10 */ + unsigned char state; /* 0x20 */ + unsigned char moby_list_id; /* 0x21 */ char pad22[0x12]; unsigned short flags; /* 0x34 */ char pad36[0x42]; @@ -190,7 +190,7 @@ void water_update(Moby_30D8E8 *water_moby) { fast_arc_tan(water_direction_source->f10, water_direction_source->f14); cab->f30 = fast_cos(water_direction_xy_angle) * 0.57735f; cab->f34 = fast_sin(water_direction_xy_angle) * 0.57735f; - cab->f38 = -0.57735f; + cab->water_direction_z = -0.57735f; cab->i28 = 0x28; cab->i2C = 0x29; p = water_grid_geometry_descriptors; @@ -198,8 +198,8 @@ void water_update(Moby_30D8E8 *water_moby) { D_L07_0016120C = 32768.0f; D_L07_00161210 = 255.0f; D_L07_00161214 = 48.0f; - cab->b3C = 0x40; - cab->b3D = 0x40; + cab->grid_alpha_2_fix = 0x40; + cab->grid_alpha_1_fix = 0x40; D_L07_001612D0 = l07_water_grids; l07_water_grid_geometry_descriptor_base = p; D_L07_00161208 = 0; @@ -235,11 +235,11 @@ void water_update(Moby_30D8E8 *water_moby) { break; case WATER_APPROACH_LOW_HEIGHT: if (water_moby->sub & 4) { - set_moby_list_state(water_moby->f21, 1); - } else if (FUN_L07_00281ef8_2cd2b0(water_moby, water_moby->f21, 1, 0) && + set_moby_list_state(water_moby->moby_list_id, 1); + } else if (FUN_L07_00281ef8_2cd2b0(water_moby, water_moby->moby_list_id, 1, 0) && water_moby->sub != 1) { approach_value(&water_moby->pos[2], water_data->lo, D_0015ED6C * 4.0f); - FUN_L01_0026e090_2cd2b0(water_moby->f21, 1); + FUN_L01_0026e090_2cd2b0(water_moby->moby_list_id, 1); } else if (water_moby->sub == 1) { approach_value(&water_moby->pos[2], water_data->lo, D_0015ED6C * 4.0f); } @@ -252,11 +252,11 @@ void water_update(Moby_30D8E8 *water_moby) { break; case WATER_APPROACH_HIGH_HEIGHT: if (water_moby->sub & 8) { - set_moby_list_state(water_moby->f21, 2); - } else if (FUN_L07_00281ef8_2cd2b0(water_moby, water_moby->f21, 1, 0) && + set_moby_list_state(water_moby->moby_list_id, 2); + } else if (FUN_L07_00281ef8_2cd2b0(water_moby, water_moby->moby_list_id, 1, 0) && water_moby->sub != 2) { approach_value(&water_moby->pos[2], water_data->hi, D_0015ED6C * 4.0f); - FUN_L01_0026e090_2cd2b0(water_moby->f21, 2); + FUN_L01_0026e090_2cd2b0(water_moby->moby_list_id, 2); } else if (water_moby->sub == 2) { approach_value(&water_moby->pos[2], water_data->hi, D_0015ED6C * 4.0f); } @@ -271,7 +271,7 @@ void water_update(Moby_30D8E8 *water_moby) { if (water_data->volume >= 0 && is_point_inside_clip_volume(&hero.motion.pos, water_data->volume)) { water_data->f1C = 0; - set_moby_list_state(water_moby->f21, 4); + set_moby_list_state(water_moby->moby_list_id, 4); } break; case WATER_WAIT_BEFORE_RISING: @@ -305,8 +305,8 @@ void water_update(Moby_30D8E8 *water_moby) { } { Cab *cab = &l07_water_grid_parameters; - l07_water_grids[water_data->idx].alpha_2_fix = cab->b3C; - l07_water_grids[water_data->idx].alpha_1_fix = cab->b3D; + l07_water_grids[water_data->idx].alpha_2_fix = cab->grid_alpha_2_fix; + l07_water_grids[water_data->idx].alpha_1_fix = cab->grid_alpha_1_fix; } l07_water_grids[water_data->idx].z = water_moby->pos[2]; on = 0.0f; diff --git a/src/overlays/l08/hero/hero_set_state.c b/src/overlays/l08/hero/hero_set_state.c index 4c7f997d7a..8f579d8410 100644 --- a/src/overlays/l08/hero/hero_set_state.c +++ b/src/overlays/l08/hero/hero_set_state.c @@ -77,10 +77,11 @@ int hero_set_state(int requested_state, int animation_request_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - animation_request_mode != 2)) + animation_request_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((level_game_mode == 2 || level_game_mode == 6) && animation_request_mode != 2) + if ((level_game_mode == 2 || level_game_mode == 6) && + animation_request_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l08/hero/update_hero_motion_for_current_state.c b/src/overlays/l08/hero/update_hero_motion_for_current_state.c index 6b6b2907ae..ac2f58bb1a 100644 --- a/src/overlays/l08/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l08/hero/update_hero_motion_for_current_state.c @@ -250,7 +250,7 @@ struct PlayerJointTable { }; extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); -s32 D_L08_0015F68C = 0; +s32 l08_look_timer_completion_count __asm__("D_L08_0015F68C") = 0; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); extern void build_scaled_hero_move_impulse(f32, f32) __asm__("FUN_L00_002132b8"); @@ -291,7 +291,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -385,7 +385,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L08_002284e0"); void update_hero_motion_for_current_state(void) { struct MobyView *moby = MV(hero.moby); - s32 sub = hero.state.step; + s32 saved_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 vector_and_attack_descriptor_scratch; @@ -439,7 +439,7 @@ void update_hero_motion_for_current_state(void) { D_L08_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L08_0015F68C++; + l08_look_timer_completion_count++; } } } @@ -815,11 +815,11 @@ void update_hero_motion_for_current_state(void) { vector_and_attack_descriptor_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -2919,7 +2919,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (saved_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l08/mobys/blarg_bombthrower.c b/src/overlays/l08/mobys/blarg_bombthrower.c index f3d4fd4395..2c7cacdbd9 100644 --- a/src/overlays/l08/mobys/blarg_bombthrower.c +++ b/src/overlays/l08/mobys/blarg_bombthrower.c @@ -52,7 +52,7 @@ typedef struct { char pad24[5]; unsigned char b29; char pad2A[0xE]; - int i38; + int alternate_throw_trigger; char pad3C[4]; float v40[4]; char pad50[8]; @@ -81,11 +81,11 @@ typedef struct { float f10C, f110, f114; char pad118[8]; struct Moby *waypoint; - struct Moby *p124; - int i128; + struct Moby *thrown_bomb; + int throw_delay_timer; char blk12C[4]; short s130, s132; - int i134; + int waypoint_reselection_timer; char pad138[0x28]; char blk160[0x10]; } Data_DBF68; @@ -323,12 +323,12 @@ void blarg_bombthrower_update(struct Moby *moby) { clear_u64_value(bombthrower_vars->v40); bombthrower_vars->waypoint = (struct Moby *)FUN_L08_002daa10_c((char *)moby); bombthrower_vars->waypoint->command = 1; - bombthrower_vars->i128 = scale_game_frames(0xB4); + bombthrower_vars->throw_delay_timer = scale_game_frames(0xB4); if (moby->prev_seq != 4) { FUN_00212f90(moby, 4, 0, 0); } moby->state = BOMBTHROWER_STATE_APPROACH_WAYPOINT; - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); break; case BOMBTHROWER_STATE_APPROACH_WAYPOINT: step_mover_2e3f20((char *)moby, @@ -347,7 +347,7 @@ void blarg_bombthrower_update(struct Moby *moby) { moby->state = BOMBTHROWER_STATE_MOVE_ONTO_WAYPOINT; break; } - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); { struct Moby *old_waypoint = bombthrower_vars->waypoint; struct Moby *next_waypoint = (struct Moby *)FUN_L08_002daa10_c((char *)moby); @@ -361,7 +361,7 @@ void blarg_bombthrower_update(struct Moby *moby) { break; } } - if (fast_dec_timer(&bombthrower_vars->i134) != 0) { + if (fast_dec_timer(&bombthrower_vars->waypoint_reselection_timer) != 0) { old_waypoint = bombthrower_vars->waypoint; if ((bombthrower_vars->waypoint = (struct Moby *)FUN_L08_002daa10_c((char *)moby)) == 0) { @@ -369,7 +369,7 @@ void blarg_bombthrower_update(struct Moby *moby) { } old_waypoint->command = 0; bombthrower_vars->waypoint->command = 1; - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); } break; case BOMBTHROWER_STATE_MOVE_ONTO_WAYPOINT: @@ -387,7 +387,7 @@ void blarg_bombthrower_update(struct Moby *moby) { moby->state = BOMBTHROWER_STATE_WAIT_TO_THROW; moby->flags &= 0xEFFF; moby->rot.z = fast_arc_tan(target->pos.x - moby->pos.x, target->pos.y - moby->pos.y); - bombthrower_vars->i128 = scale_game_frames(0x78); + bombthrower_vars->throw_delay_timer = scale_game_frames(0x78); moby->collision = 0; } break; @@ -400,7 +400,7 @@ void blarg_bombthrower_update(struct Moby *moby) { 0.3f, 0.2f); if (target_distance_xy < 20.0f && 8.0f < target_distance_xy && - fast_dec_timer(&bombthrower_vars->i128) != 0) { + fast_dec_timer(&bombthrower_vars->throw_delay_timer) != 0) { LevelCamera *cam = &l08_camera; if (fast_difference_between_rotations( cam->yaw, @@ -409,7 +409,7 @@ void blarg_bombthrower_update(struct Moby *moby) { goto attack; } } - if (bombthrower_vars->i38 == 0 || !(0.5f < target_distance_xy)) { + if (bombthrower_vars->alternate_throw_trigger == 0 || !(0.5f < target_distance_xy)) { break; } attack: @@ -450,7 +450,7 @@ void blarg_bombthrower_update(struct Moby *moby) { FUN_00212f90(moby, 4, 0, scale_game_frames(7)); } moby->state = BOMBTHROWER_STATE_APPROACH_WAYPOINT; - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); } else { if (moby->prev_seq != 3) { FUN_00212f90(moby, 3, 0, scale_game_frames(6)); @@ -488,15 +488,15 @@ void blarg_bombthrower_update(struct Moby *moby) { FUN_L00_0025abf0(point, aim, &bomb_flight_time, time, -(frame_time_sq * 15.0f)); spawned_bomb_moby = spawn_bomb_with_velocity((int)moby, (char *)point, (char *)velocity); - bombthrower_vars->p124 = (struct Moby *)spawned_bomb_moby; + bombthrower_vars->thrown_bomb = (struct Moby *)spawned_bomb_moby; if (spawned_bomb_moby != 0) { char *next_vars = *(char **)(spawned_bomb_moby + 0x78); *(int *)(next_vars + 0x20) = scale_game_frames(0xB4); *(short *)(next_vars + 0xC) = scale_game_frames(10); *(short *)(next_vars + 0xE) = scale_game_frames(10); - bombthrower_vars->p124->state = 1; - bombthrower_vars->p124->command |= 3; - bombthrower_vars->i128 = scale_game_frames(0xB4); + bombthrower_vars->thrown_bomb->state = 1; + bombthrower_vars->thrown_bomb->command |= 3; + bombthrower_vars->throw_delay_timer = scale_game_frames(0xB4); } break; } @@ -505,7 +505,7 @@ void blarg_bombthrower_update(struct Moby *moby) { if (moby->prev_seq != 4) { FUN_00212f90(moby, 4, 0, 3); } - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); } break; case BOMBTHROWER_STATE_WAIT_FOR_FALL_RECOVERY: @@ -532,7 +532,7 @@ void blarg_bombthrower_update(struct Moby *moby) { FUN_00212f90(moby, 4, 0, 10); } moby->state = BOMBTHROWER_STATE_APPROACH_WAYPOINT; - bombthrower_vars->i134 = scale_game_frames(0xF0); + bombthrower_vars->waypoint_reselection_timer = scale_game_frames(0xF0); } if (moby->pos.z < 5.0f) { mark_moby_for_removal(moby); @@ -553,5 +553,5 @@ void blarg_bombthrower_update(struct Moby *moby) { break; } trooper_anim_finish(moby, bombthrower_vars->anim); - bombthrower_vars->i38 = 0; + bombthrower_vars->alternate_throw_trigger = 0; } diff --git a/src/overlays/l08/mobys/bolt_pickup.c b/src/overlays/l08/mobys/bolt_pickup.c index 0cba1d707f..6dbe36708a 100644 --- a/src/overlays/l08/mobys/bolt_pickup.c +++ b/src/overlays/l08/mobys/bolt_pickup.c @@ -43,7 +43,7 @@ typedef struct Moby_2B94B0 { float pos[4]; unsigned char state; char pad21[0x27]; - float f48; + float spin_angle; char pad4C[0x2C]; MobyData *data; } Moby_2B94B0; @@ -52,14 +52,14 @@ typedef struct Hero_2B94B0 { char pad0[0x80]; float pos[4]; char pad90[0x480]; - float v510[4]; - float v520[4]; - float v530[4]; + float bolt_collection_probe_a[4]; + float bolt_collection_probe_b[4]; + float bolt_collection_probe_c[4]; char pad540[0x1B4C]; int f208C; char pad2090[0x1F8]; - float f2288; - float f228C; + float collection_radius_xy; + float collection_height_tolerance; } Hero_2B94B0; extern float D_0015ED70; @@ -182,18 +182,21 @@ void bolt_pickup_update(Moby_2B94B0 *moby) { qcopy(moby->pos, P); case MOBY_STATE_CHECK_COLLECTION: hit = 0; - moby->f48 = fast_add_rotations(moby->f48, moby_data->fC); + moby->spin_angle = fast_add_rotations(moby->spin_angle, moby_data->fC); if (((Hero_2B94B0 *)((char *)&hero))->f208C == 15) { - if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->v510, moby->pos) < 0.5f) + if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->bolt_collection_probe_a, + moby->pos) < 0.5f) hit = 1; - if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->v520, moby->pos) < 0.5f) + if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->bolt_collection_probe_b, + moby->pos) < 0.5f) hit = 1; - if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->v530, moby->pos) < 0.5f) + if (vector_distance_xy(((Hero_2B94B0 *)((char *)&hero))->bolt_collection_probe_c, + moby->pos) < 0.5f) hit = 1; } else if (vector_distance_xy(moby->pos, ((Hero_2B94B0 *)((char *)&hero))->pos) < - ((Hero_2B94B0 *)((char *)&hero))->f2288) { + ((Hero_2B94B0 *)((char *)&hero))->collection_radius_xy) { if (absolute_float(moby->pos[2] - ((Hero_2B94B0 *)((char *)&hero))->pos[2]) < - ((Hero_2B94B0 *)((char *)&hero))->f228C) + ((Hero_2B94B0 *)((char *)&hero))->collection_height_tolerance) hit = 1; } if (hit == 0) diff --git a/src/overlays/l08/mobys/bomb.c b/src/overlays/l08/mobys/bomb.c index 7259628a57..cb5938b404 100644 --- a/src/overlays/l08/mobys/bomb.c +++ b/src/overlays/l08/mobys/bomb.c @@ -87,7 +87,7 @@ blk16 l08_bomb_moving_particle_initial_colors __asm__("D_L08_00161868") = { typedef struct Moby248Vars { u8 pad_0[0x7]; - u8 unk7; + u8 fuse_flash_target_red; u8 pad_8[0x8]; u8 unk10; u8 pad_11[0x7]; @@ -242,7 +242,7 @@ void moby_248_update(char *moby) { } else if (bomb_vars->timer_20 == scale_game_frames(0x3C) || bomb_vars->timer_20 == scale_game_frames(0x28) || bomb_vars->timer_20 == scale_game_frames(0x14)) { - bomb_vars->unk7 = 0xFA; + bomb_vars->fuse_flash_target_red = 0xFA; trooper_anim_update(moby, (short *)bomb_vars); } trooper_anim_finish(moby, bomb_vars); diff --git a/src/overlays/l08/mobys/bomber_tank.c b/src/overlays/l08/mobys/bomber_tank.c index 60878eb424..5ad3803303 100644 --- a/src/overlays/l08/mobys/bomber_tank.c +++ b/src/overlays/l08/mobys/bomber_tank.c @@ -105,7 +105,7 @@ typedef struct { u8 unk29; u8 unk2A; u8 pad2B[3]; - u8 unk2E; /* 0x2E: 2 removes the tank and its parts */ + u8 removal_control; /* 0x2E: 2 removes the tank and its parts */ u8 pad2F; f32 unk30; u8 pad34[0xA]; @@ -130,7 +130,7 @@ typedef struct { Moby *part_a; /* 0x160 */ Moby *part_b; /* 0x164 */ u8 pad168[4]; - f32 unk16C; + f32 path_target_speed; f32 yaw; /* 0x170: added to rot.z for shots */ u8 pad174[4]; f32 pitch; /* 0x178 */ @@ -151,7 +151,7 @@ void bomber_tank_update(Moby *moby) { qcopy(old_pos, &moby->pos); qcopy(old_rot, &moby->rot); - if (bomber_tank_update_vars->unk2E == 2) { + if (bomber_tank_update_vars->removal_control == 2) { if (bomber_tank_update_vars->part_a != 0) mark_moby_for_removal(bomber_tank_update_vars->part_a); if (bomber_tank_update_vars->part_b != 0) @@ -193,7 +193,7 @@ void bomber_tank_update(Moby *moby) { } attach_manipulator(moby, 0, bomber_tank_update_vars->manipulator); moby->flags |= 0x1000; - bomber_tank_update_vars->unk16C = frame_time + frame_time; + bomber_tank_update_vars->path_target_speed = frame_time + frame_time; if (bomber_tank_update_vars->trigger_moby > 0) { moby->state = BOMBER_TANK_STATE_WAIT_FOR_TRIGGER; moby->flags = (moby->flags & 0xEFFF) | 0x41; @@ -234,7 +234,7 @@ void bomber_tank_update(Moby *moby) { bomber_tank_update_vars->unk30 = 3.0f; bomber_tank_update_vars->health = 9.0f; bomber_tank_update_vars->unk2A = 12; - bomber_tank_update_vars->unk2E = 1; + bomber_tank_update_vars->removal_control = 1; bomber_tank_update_vars->flags |= 2; clear_u64_value(&bomber_tank_update_vars->unk40); bomber_tank_update_vars->pitch = 0.0f; @@ -336,7 +336,7 @@ void bomber_tank_update(Moby *moby) { case 12: /* Fakematch: a never-true test keeps case 12 a block of its own until gcse, which then puts the default path's copies where retail has them. */ if (never) - bomber_tank_update_vars->unk2E = 0; + bomber_tank_update_vars->removal_control = 0; break; case BOMBER_TANK_STATE_DAMAGED_FOLLOW_PATH: { float frame; diff --git a/src/overlays/l08/mobys/rocket.c b/src/overlays/l08/mobys/rocket.c index c19e2f21aa..f8e96fbcdf 100644 --- a/src/overlays/l08/mobys/rocket.c +++ b/src/overlays/l08/mobys/rocket.c @@ -159,7 +159,7 @@ extern int D_L08_0015F5C4_macro __asm__("D_L08_0015F5C4") MACRO_ADDR; #include "rnc/overlay/l08/mobys/rocket_data/rocket_update.h" extern unsigned int D_L08_0015FFDC MACRO_ADDR; -extern void FUN_L00_00262cf0(void *, void *, float, float, float); +extern void fast_add_rotations_cf(void *, void *, float, float, float) __asm__("FUN_L00_00262cf0"); extern void spawn_effect(void *, void *, int, int, int, int, int, int) __asm__("FUN_L00_00269958"); extern void FUN_L08_002de528_u(void *, int, int, int) __asm__("FUN_L08_002de528"); void rocket_update(M46 *moby) __asm__("FUN_L08_002dd3c0"); @@ -225,7 +225,7 @@ void rocket_update(M46 *moby) { yaw = fast_arc_tan(moby->position[0] - target[0], moby->position[1] - target[1]); pitch = fast_arc_tan(vector_distance_xy(target, moby->position), moby->position[2] - target[2]); - FUN_L00_00262cf0(target, target, data->roll, data->yaw, data->pitch); + fast_add_rotations_cf(target, target, data->roll, data->yaw, data->pitch); fast_vec_sub(delta, target, moby->position); FUN_L00_0025f730(delta, target_data->speed * D_0015ED6C); fast_vec_sub(velocity_correction_or_effect_velocity, delta, data->velocity); diff --git a/src/overlays/l09/mobys/barrier.c b/src/overlays/l09/mobys/barrier.c index 66d4266a5e..6eb5d37bf7 100644 --- a/src/overlays/l09/mobys/barrier.c +++ b/src/overlays/l09/mobys/barrier.c @@ -40,7 +40,7 @@ typedef struct Hit_309688 { typedef struct Flags_309688 { char pad0[0x43]; - unsigned char f43; + unsigned char barrier_cleared; } Flags_309688; #include "rnc/overlay/l09/mobys/barrier_data/barrier_update.h" @@ -111,14 +111,15 @@ void barrier_update(Moby *moby) { if (moby->state == BARRIER_STATE_UNINITIALIZED) { if (barrier_vars->idx != -1) - ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->f43 = 0; + ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->barrier_cleared = 0; moby->state = BARRIER_STATE_INITIALIZED; } if (moby->mission != 0xFF) { int row = current_level_index * 16; if (visited52[moby->mission + row] == 0xFF) { if (barrier_vars->idx != -1) - ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->f43 = 1; + ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->barrier_cleared = + 1; mark_moby_for_removal(moby); return; } @@ -195,7 +196,7 @@ void barrier_update(Moby *moby) { 0); if (moby->oclass == 0x508) { if (barrier_vars->idx != -1) - ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->f43 = 1; + ((Flags_309688 *)(alternate_item_available + barrier_vars->idx))->barrier_cleared = 1; } if (moby->oclass == 0x508 || has_next) mark_moby_for_removal(moby); diff --git a/src/overlays/l09/mobys/platform.c b/src/overlays/l09/mobys/platform.c index fd8734f850..e410299c79 100644 --- a/src/overlays/l09/mobys/platform.c +++ b/src/overlays/l09/mobys/platform.c @@ -36,10 +36,10 @@ typedef struct { float baseZ; /* 0x84 */ int timer; /* 0x88 */ int pad8C; - float f90; /* 0x90 */ - float f94; /* 0x94 */ - float f98; /* 0x98 */ - float f9C; /* 0x9C */ + float rotation_amplitude_phase_angle; /* 0x90 */ + float rotation_orientation_phase_angle; /* 0x94 */ + float vertical_oscillation_phase_angle; /* 0x98 */ + float previous_vertical_oscillation_offset; /* 0x9C */ } PlatVars; extern float D_0015ED70; @@ -153,11 +153,14 @@ void platform_update(Moby *moby) { allocate_voice_for_target_entry(2, 0, moby); } } - update_moby_vertical_oscillation( - 0.14f, frame_time * 0.5235987901687622f, moby, &platform_vars->f98, &platform_vars->f9C); + update_moby_vertical_oscillation(0.14f, + frame_time * 0.5235987901687622f, + moby, + &platform_vars->vertical_oscillation_phase_angle, + &platform_vars->previous_vertical_oscillation_offset); update_moby_rotation_oscillation(moby, - &platform_vars->f90, - &platform_vars->f94, + &platform_vars->rotation_amplitude_phase_angle, + &platform_vars->rotation_orientation_phase_angle, 0.0872664600610733f, frame_time * 0.3141592741012573f, frame_time * 0.48869219422340393f); diff --git a/src/overlays/l09/mobys/refueling_station.c b/src/overlays/l09/mobys/refueling_station.c index 3690245b70..cae920979e 100644 --- a/src/overlays/l09/mobys/refueling_station.c +++ b/src/overlays/l09/mobys/refueling_station.c @@ -168,7 +168,7 @@ typedef struct RefuelingStationVars { u8 pad_21[0x4F]; s32 unk70; s16 timer_74; - s16 unk76; + s16 removal_check_index; s32 unk78; s32 voice; } RefuelingStationVars; @@ -181,8 +181,9 @@ void refueling_station_update(struct Moby *moby) { handle_refueling_station_damage(moby, station_vars, &station_vars->unk20); switch (moby->state) { case REFUELING_STATION_STATE_INITIALIZE: - if (station_vars->unk76 != -1 && - (removal_check_base = (unsigned char *)D_0013D388 + station_vars->unk76)[0x39] != 0) { + if (station_vars->removal_check_index != -1 && + (removal_check_base = + (unsigned char *)D_0013D388 + station_vars->removal_check_index)[0x39] != 0) { mark_moby_for_removal(moby); return; } diff --git a/src/overlays/l09/mobys/turret.c b/src/overlays/l09/mobys/turret.c index 78f6ea2e53..fa62b9adca 100644 --- a/src/overlays/l09/mobys/turret.c +++ b/src/overlays/l09/mobys/turret.c @@ -58,11 +58,11 @@ typedef struct { u8 pad0[0x160]; f32 unk160; u8 pad164[4]; - s32 unk168; + s32 longer_shot_response_frame_count; u8 pad16C[4]; f32 unk170; u8 pad174[4]; - s32 unk178; + s32 shorter_shot_response_frame_count; } TurretShake; /* moby the sound collision probe ignores (clamp_voice_position_to_collision) */ @@ -263,9 +263,11 @@ void turret_update(struct Moby *moby) { spawn_turret_shot(moby, &muzzle, &shot, scale_game_frames(90)); allocate_voice_for_target_entry(0, 0, moby); l09_turret_shot_response_state.unk160 = 0.03f; - l09_turret_shot_response_state.unk168 = scale_game_frames(10); + l09_turret_shot_response_state.longer_shot_response_frame_count = + scale_game_frames(10); l09_turret_shot_response_state.unk170 = 0.03f; - l09_turret_shot_response_state.unk178 = scale_game_frames(7); + l09_turret_shot_response_state.shorter_shot_response_frame_count = + scale_game_frames(7); turret_vars->barrel = 0; for (i = 0; i < 5; i++) { rnd.q = 0; @@ -310,9 +312,11 @@ void turret_update(struct Moby *moby) { spawn_turret_shot(moby, &muzzle, &shot, scale_game_frames(90)); allocate_voice_for_target_entry(0, 0, moby); l09_turret_shot_response_state.unk160 = 0.03f; - l09_turret_shot_response_state.unk168 = scale_game_frames(10); + l09_turret_shot_response_state.longer_shot_response_frame_count = + scale_game_frames(10); l09_turret_shot_response_state.unk170 = 0.03f; - l09_turret_shot_response_state.unk178 = scale_game_frames(7); + l09_turret_shot_response_state.shorter_shot_response_frame_count = + scale_game_frames(7); turret_vars->barrel = 1; for (i = 0; i < 5; i++) { rnd.q = 0; diff --git a/src/overlays/l10/mobys/blarg_ship.c b/src/overlays/l10/mobys/blarg_ship.c index 9175d17f69..017fa3f9bd 100644 --- a/src/overlays/l10/mobys/blarg_ship.c +++ b/src/overlays/l10/mobys/blarg_ship.c @@ -71,19 +71,19 @@ typedef struct Ship_5E48 { char p21[3]; char *p24; char p28[4]; - float f2C; + float scale; char p30; unsigned char b31; short s32; unsigned short s34; char p36[0xE]; - float f44; - float f48; + float pitch; + float heading; char p4C[6]; unsigned char b52; - unsigned char b53; + unsigned char requested_animation_sequence; char p54[4]; - float f58; + float animation_speed; char p5C[0x14]; unsigned char b70; char p71[7]; @@ -93,10 +93,10 @@ typedef struct Ship_5E48 { char p80[0x14]; int i94; char p98[0xE]; - short sA6; - unsigned short hA8; + short moby_class_id; + unsigned short maya_instance_id; char pAA[6]; - unsigned char bB0; + unsigned char mission_index; char pB1[0xB]; unsigned char bBC; } Ship_5E48; @@ -110,28 +110,28 @@ typedef struct ShipD_5E48 { unsigned char b29; char p2A[0x16]; char a40[0xB0]; - AlignedVec4f vF0; + AlignedVec4f target_aim_position; char p100[0x10]; Ship_5E48 *tgt; - int i114; + int targeting_status; char p118[8]; AlignedVec4f a120; char p130[0x10]; - int i140; - int i144; - int i148; + int entry_path_index; + int firing_path_index; + int activation_volume_index; char p14C[0xC]; - int i158; + int path_point_index; char p15C[4]; - float f160; - float f164; - int i168; + float firing_duration_seconds; + float cooldown_duration_seconds; + int firing_phase_timer; char p16C[0x2A]; short s196; - float f198; - float f19C; + float heading_turn_velocity; + float pitch_turn_velocity; char p1A0[0x10]; - int i1B0; + int departure_volume_index; char p1B4[0x1C]; unsigned char a1D0[4]; } ShipD_5E48; @@ -194,6 +194,9 @@ void blarg_ship_update(Ship_5E48 *m) __asm__("FUN_L10_002e4a88"); /* Moby class 1229 */ void blarg_ship_update(Ship_5E48 *ship) { + enum { + BLARG_SHIP_TARGETING_FIRE_BLOCKED = 2 + }; ShipD_5E48 *d = ship->d; Ship_5E48 *tgt; AlignedVec4f A; @@ -205,8 +208,9 @@ void blarg_ship_update(Ship_5E48 *ship) { float aim_elevation; FUN_L00_00263ac8(2.5f, (int)ship, 2, d->a1D0); - if (d->i140 == -1) { - DebugPrint(blarg_ship_missing_path_error_format, ship->sA6, ship->hA8); + if (d->entry_path_index == -1) { + DebugPrint( + blarg_ship_missing_path_error_format, ship->moby_class_id, ship->maya_instance_id); goto del; } FUN_L10_002e5968_c((char *)ship); @@ -218,23 +222,23 @@ void blarg_ship_update(Ship_5E48 *ship) { d->s24 = truncate_float_to_s32(9.0f); d->b28 = 3; d->b29 = 0; - d->f19C = 0.0f; + d->pitch_turn_velocity = 0.0f; ship->s32 = 0x7F; - qcopy(&ship->pos, &l10_paths[d->i140]->points[0]); + qcopy(&ship->pos, &l10_paths[d->entry_path_index]->points[0]); d->s196 = scale_game_frames(D_L10_00161EE4); ship->i94 = 0; ship->s34 |= 0x41; - if (ship->b53 != 0) + if (ship->requested_animation_sequence != 0) blend_moby_animation(ship, 0, 0, 0); ship->state = BLARG_SHIP_STATE_WAIT_FOR_TARGET_IN_VOLUME; - if (visited52[ship->bB0 + (D_0015ED84 << 4)] != 0xFF) + if (visited52[ship->mission_index + (D_0015ED84 << 4)] != 0xFF) break; goto del; case BLARG_SHIP_STATE_WAIT_FOR_TARGET_IN_VOLUME: - if (!is_point_inside_clip_volume(&tgt->pos, d->i148)) + if (!is_point_inside_clip_volume(&tgt->pos, d->activation_volume_index)) break; ship->state = BLARG_SHIP_STATE_RISE_TO_ENTRY_PATH; - if (ship->b53 != 1) + if (ship->requested_animation_sequence != 1) blend_moby_animation(ship, 1, 0, scale_game_frames(20)); ship->s34 &= 0xFFBE; ship->i94 = *(int *)(ship->p24 + 0x10); @@ -245,52 +249,69 @@ void blarg_ship_update(Ship_5E48 *ship) { break; case BLARG_SHIP_STATE_RISE_TO_ENTRY_PATH: desired_heading = fast_arc_tan(tgt->pos.x - ship->pos.x, tgt->pos.y - ship->pos.y); - FUN_L00_00258278( - (char *)ship, &d->f198, desired_heading, 0.02f, 0.3f, D_0015ED6C * 3.1415927f); + FUN_L00_00258278((char *)ship, + &d->heading_turn_velocity, + desired_heading, + 0.02f, + 0.3f, + D_0015ED6C * 3.1415927f); aim_elevation = fast_arc_tan(vector_distance_xy(&ship->pos, &tgt->pos), tgt->pos.z - ship->pos.z); - ship->f44 = - spring_turn(&d->f19C, ship->f44, -aim_elevation, 0.02f, 0.3f, D_0015ED6C * 3.1415927f); - if ((ship->b70 & 2) && ship->b53 == 1) + ship->pitch = spring_turn(&d->pitch_turn_velocity, + ship->pitch, + -aim_elevation, + 0.02f, + 0.3f, + D_0015ED6C * 3.1415927f); + if ((ship->b70 & 2) && ship->requested_animation_sequence == 1) blend_moby_animation(ship, 2, 0, scale_game_frames(20)); ship->pos.z += D_0015ED6C * 4.0f; - if (fast_vec_dist(&ship->pos, &l10_paths[d->i140]->points[0]) < 0.5f) { + if (fast_vec_dist(&ship->pos, &l10_paths[d->entry_path_index]->points[0]) < 0.5f) { ship->state = BLARG_SHIP_STATE_FOLLOW_ENTRY_PATH; - if (ship->b53 != 2) + if (ship->requested_animation_sequence != 2) blend_moby_animation(ship, 2, 0, scale_game_frames(10)); } break; case BLARG_SHIP_STATE_FOLLOW_ENTRY_PATH: - qcopy(&A, &l10_paths[d->i140]->points[d->i158]); + qcopy(&A, &l10_paths[d->entry_path_index]->points[d->path_point_index]); desired_heading = fast_arc_tan(A.x - ship->pos.x, A.y - ship->pos.y); - FUN_L00_00258278( - (char *)ship, &d->f198, desired_heading, 0.02f, 0.3f, D_0015ED6C * 12.566371f); + FUN_L00_00258278((char *)ship, + &d->heading_turn_velocity, + desired_heading, + 0.02f, + 0.3f, + D_0015ED6C * 12.566371f); aim_elevation = fast_arc_tan(vector_distance_xy(&ship->pos, &tgt->pos), tgt->pos.z - ship->pos.z); - ship->f44 = - spring_turn(&d->f19C, ship->f44, -aim_elevation, 0.02f, 0.3f, D_0015ED6C * 3.1415927f); + ship->pitch = spring_turn(&d->pitch_turn_velocity, + ship->pitch, + -aim_elevation, + 0.02f, + 0.3f, + D_0015ED6C * 3.1415927f); fast_vec_sub(&B, &A, &ship->pos); fast_vec_normalize(&d->a120, &B, D_0015ED6C * 8.0f); fast_vec_add(&ship->pos, &ship->pos, &d->a120); if (fast_vec_length(&B) < 0.5f) { - int n = d->i158 + 1; - if (n < l10_paths[d->i140]->count) { - d->i158 = n; + int n = d->path_point_index + 1; + if (n < l10_paths[d->entry_path_index]->count) { + d->path_point_index = n; } else { - d->i158 = 0; + d->path_point_index = 0; ship->state = BLARG_SHIP_STATE_FIRE_AT_TARGET; - d->i168 = truncate_float_to_s32(FUN_L04_001f1978(d->f160 * 60.0f)); + d->firing_phase_timer = + truncate_float_to_s32(FUN_L04_001f1978(d->firing_duration_seconds * 60.0f)); } } break; case BLARG_SHIP_STATE_FIRE_AT_TARGET: - if (is_point_inside_clip_volume(&(&hero)->motion.pos, d->i1B0)) { + if (is_point_inside_clip_volume(&(&hero)->motion.pos, d->departure_volume_index)) { ship->state = BLARG_SHIP_STATE_FLY_AWAY; break; } *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&tgt->pos; if ((&hero)->vehicle_mode != 1) { - *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&d->vF0; + *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&d->target_aim_position; collision_line(&ship->pos, &A, 0, ship, 0); } else { if ((Ship_5E48 *)(&hero)->moby == tgt) { @@ -303,24 +324,33 @@ void blarg_ship_update(Ship_5E48 *ship) { D_L10_001742D8 = tgt; } desired_heading = fast_arc_tan(tgt->pos.x - ship->pos.x, tgt->pos.y - ship->pos.y); - FUN_L00_00258278( - (char *)ship, &d->f198, desired_heading, 0.02f, 0.3f, D_0015ED6C * 12.566371f); + FUN_L00_00258278((char *)ship, + &d->heading_turn_velocity, + desired_heading, + 0.02f, + 0.3f, + D_0015ED6C * 12.566371f); aim_elevation = fast_arc_tan(vector_distance_xy(&ship->pos, &A), A.z - ship->pos.z); - ship->f44 = - spring_turn(&d->f19C, ship->f44, -aim_elevation, 0.02f, 0.3f, D_0015ED6C * 3.1415927f); + ship->pitch = spring_turn(&d->pitch_turn_velocity, + ship->pitch, + -aim_elevation, + 0.02f, + 0.3f, + D_0015ED6C * 3.1415927f); if (fast_difference_between_rotations( - ship->f48, fast_arc_tan(tgt->pos.x - ship->pos.x, tgt->pos.y - ship->pos.y)) < + ship->heading, fast_arc_tan(tgt->pos.x - ship->pos.x, tgt->pos.y - ship->pos.y)) < 0.17453292f) { - if (ship->b53 != 3) + if (ship->requested_animation_sequence != 3) blend_moby_animation(ship, 3, 0, scale_game_frames(6)); - ship->f58 = blarg_ship_firing_animation_speed_gp; + ship->animation_speed = blarg_ship_firing_animation_speed_gp; } - if (ship->b52 == 3 && d->i114 != 2 && D_L10_001742D8 == tgt) { + if (ship->b52 == 3 && d->targeting_status != BLARG_SHIP_TARGETING_FIRE_BLOCKED && + D_L10_001742D8 == tgt) { int near = is_value_within_interpolated_window((char *)ship, 1.0f); int far = is_value_within_interpolated_window((char *)ship, 16.0f); if (near || far) { FUN_L00_0024f7c8(ship, far == 0, &C); - build_spherical_offset(&B, 1.0f, ship->f48, -ship->f44); + build_spherical_offset(&B, 1.0f, ship->heading, -ship->pitch); add_vectors(&D, &C, &B); fast_vec_sub(&B, &A, &C); fast_vec_normalize(&B, &B, blarg_ship_rocket_speed_gp * D_0015ED6C); @@ -329,33 +359,34 @@ void blarg_ship_update(Ship_5E48 *ship) { emit_radial_particle_burst(ship, &E, 0); spawn_blarg_ship_rocket(&B, &C, (int)ship, (int)tgt, scale_game_frames(300), 1.0f); } - } else if (ship->b52 == 3 && ship->b53 != 2) { + } else if (ship->b52 == 3 && ship->requested_animation_sequence != 2) { blend_moby_animation(ship, 2, 0, scale_game_frames(10)); } - if (fast_dec_timer(&d->i168)) { - if (ship->b53 != 2) + if (fast_dec_timer(&d->firing_phase_timer)) { + if (ship->requested_animation_sequence != 2) blend_moby_animation(ship, 2, 0, scale_game_frames(10)); ship->state = BLARG_SHIP_STATE_FIRE_COOLDOWN; - d->i168 = truncate_float_to_s32(FUN_L04_001f1978(d->f164 * 60.0f)); + d->firing_phase_timer = + truncate_float_to_s32(FUN_L04_001f1978(d->cooldown_duration_seconds * 60.0f)); } - qcopy(&B, &l10_paths[d->i144]->points[d->i158]); + qcopy(&B, &l10_paths[d->firing_path_index]->points[d->path_point_index]); fast_vec_sub(&C, &B, &ship->pos); FUN_L00_0025f730_c(&C, D_0015ED6C * 8.0f); fast_vec_add(&ship->pos, &ship->pos, &C); if (fast_vec_length(&C) < D_0015ED6C) { - int n = d->i158 + 1; - if (n < l10_paths[d->i144]->count) - d->i158 = n; + int n = d->path_point_index + 1; + if (n < l10_paths[d->firing_path_index]->count) + d->path_point_index = n; } break; case BLARG_SHIP_STATE_FIRE_COOLDOWN: - if (is_point_inside_clip_volume(&(&hero)->motion.pos, d->i1B0)) { + if (is_point_inside_clip_volume(&(&hero)->motion.pos, d->departure_volume_index)) { ship->state = BLARG_SHIP_STATE_FLY_AWAY; break; } *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&tgt->pos; if ((&hero)->vehicle_mode != 1) { - *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&d->vF0; + *(u128_2E52B0 *)&A = *(u128_2E52B0 *)&d->target_aim_position; collision_line(&ship->pos, &A, 0, ship, 0); } else { if ((Ship_5E48 *)(&hero)->moby == tgt) { @@ -368,33 +399,42 @@ void blarg_ship_update(Ship_5E48 *ship) { D_L10_001742D8 = tgt; } desired_heading = fast_arc_tan(tgt->pos.x - ship->pos.x, tgt->pos.y - ship->pos.y); - FUN_L00_00258278( - (char *)ship, &d->f198, desired_heading, 0.02f, 0.3f, D_0015ED6C * 12.566371f); + FUN_L00_00258278((char *)ship, + &d->heading_turn_velocity, + desired_heading, + 0.02f, + 0.3f, + D_0015ED6C * 12.566371f); aim_elevation = fast_arc_tan(vector_distance_xy(&ship->pos, &A), A.z - ship->pos.z); - ship->f44 = - spring_turn(&d->f19C, ship->f44, -aim_elevation, 0.02f, 0.3f, D_0015ED6C * 3.1415927f); - if (fast_dec_timer(&d->i168)) { + ship->pitch = spring_turn(&d->pitch_turn_velocity, + ship->pitch, + -aim_elevation, + 0.02f, + 0.3f, + D_0015ED6C * 3.1415927f); + if (fast_dec_timer(&d->firing_phase_timer)) { blend_moby_animation(ship, 3, 0, scale_game_frames(10)); - ship->f58 = blarg_ship_firing_animation_speed_gp; + ship->animation_speed = blarg_ship_firing_animation_speed_gp; ship->state = BLARG_SHIP_STATE_FIRE_AT_TARGET; - d->i168 = truncate_float_to_s32(FUN_L04_001f1978(d->f160 * 60.0f)); + d->firing_phase_timer = + truncate_float_to_s32(FUN_L04_001f1978(d->firing_duration_seconds * 60.0f)); } - qcopy(&B, &l10_paths[d->i144]->points[d->i158]); + qcopy(&B, &l10_paths[d->firing_path_index]->points[d->path_point_index]); fast_vec_sub(&C, &B, &ship->pos); FUN_L00_0025f730_c(&C, D_0015ED6C * 8.0f); fast_vec_add(&ship->pos, &ship->pos, &C); if (fast_vec_length(&C) < D_0015ED6C) { - int n = d->i158 + 1; - if (n < l10_paths[d->i144]->count) - d->i158 = n; + int n = d->path_point_index + 1; + if (n < l10_paths[d->firing_path_index]->count) + d->path_point_index = n; } break; case BLARG_SHIP_STATE_FLY_AWAY: ship->pos.z += D_0015ED6C * 10.0f; - ship->f2C *= frame_scale * -0.015299976f + 1.0f; + ship->scale *= frame_scale * -0.015299976f + 1.0f; if (250.0f < ship->pos.z) goto del; - if (!(ship->f2C < 0.01f)) + if (!(ship->scale < 0.01f)) break; goto del; case BLARG_SHIP_STATE_HIT_REACTION: { @@ -406,16 +446,18 @@ void blarg_ship_update(Ship_5E48 *ship) { pre_hit_state = ship->bBC; if (pre_hit_state == BLARG_SHIP_STATE_FIRE_AT_TARGET) { blend_moby_animation(ship, 3, 0, scale_game_frames(10)); - ship->f58 = blarg_ship_firing_animation_speed_gp; + ship->animation_speed = blarg_ship_firing_animation_speed_gp; ship->state = pre_hit_state; - d->i168 = truncate_float_to_s32(FUN_L04_001f1978(d->f160 * 60.0f)); + d->firing_phase_timer = + truncate_float_to_s32(FUN_L04_001f1978(d->firing_duration_seconds * 60.0f)); } else if (pre_hit_state == BLARG_SHIP_STATE_FLY_AWAY) { blend_moby_animation(ship, 2, 0, scale_game_frames(10)); ship->state = pre_hit_state; } else { blend_moby_animation(ship, 2, 0, scale_game_frames(10)); ship->state = BLARG_SHIP_STATE_FIRE_COOLDOWN; - d->i168 = truncate_float_to_s32(FUN_L04_001f1978(d->f164 * 60.0f)); + d->firing_phase_timer = + truncate_float_to_s32(FUN_L04_001f1978(d->cooldown_duration_seconds * 60.0f)); } break; } diff --git a/src/overlays/l10/mobys/bombthrower_grass.c b/src/overlays/l10/mobys/bombthrower_grass.c index 97781d1be4..0351571cef 100644 --- a/src/overlays/l10/mobys/bombthrower_grass.c +++ b/src/overlays/l10/mobys/bombthrower_grass.c @@ -19,8 +19,8 @@ extern int spawn_bombthrower_grass_projectile() __asm__("FUN_L10_002d8058"); -int D_L10_00161BF0 = 240; -int D_L10_00161BF4 = 600; +int l10_bombthrower_grass_launch_delay_min_frames __asm__("D_L10_00161BF0") = 240; +int l10_bombthrower_grass_launch_delay_max_frames __asm__("D_L10_00161BF4") = 600; #include "rnc/overlay/l10/mobys/bombthrower_grass_globals.h" @@ -86,7 +86,8 @@ void bombthrower_grass_update(struct Moby *moby) { float launch_position[4]; if (moby->state == BOMBTHROWER_GRASS_STATE_LAUNCH_TIMER_UNINITIALIZED) { *(int *)launch_timer = - scale_game_frames(random_int_between(D_L10_00161BF0, D_L10_00161BF4)); + scale_game_frames(random_int_between(l10_bombthrower_grass_launch_delay_min_frames, + l10_bombthrower_grass_launch_delay_max_frames)); moby->state = BOMBTHROWER_GRASS_STATE_LAUNCH_TIMER_INITIALIZED; } if (fast_dec_timer((int *)launch_timer)) { @@ -106,6 +107,7 @@ void bombthrower_grass_update(struct Moby *moby) { spawn_bombthrower_grass_projectile(moby, launch_position, launch_offset); allocate_voice_for_target_entry(0, 0, (int)moby); *(int *)launch_timer = - scale_game_frames(random_int_between(D_L10_00161BF0, D_L10_00161BF4)); + scale_game_frames(random_int_between(l10_bombthrower_grass_launch_delay_min_frames, + l10_bombthrower_grass_launch_delay_max_frames)); } } diff --git a/src/overlays/l10/mobys/configurable_particle_emitter.c b/src/overlays/l10/mobys/configurable_particle_emitter.c index 84e20ca28f..c81f8c51a5 100644 --- a/src/overlays/l10/mobys/configurable_particle_emitter.c +++ b/src/overlays/l10/mobys/configurable_particle_emitter.c @@ -160,10 +160,10 @@ extern int burst_spark_base_frame_count_gp __asm__("D_L10_00161F84") __attribu extern int burst_spark_base_second_frame_count_gp __asm__("D_L10_00161F88") __attribute__((sda)); extern int burst_spark_base_third_frame_count_gp __asm__("D_L10_00161F8C") __attribute__((sda)); extern float burst_spark_frame_count_scale_spread_gp __asm__("D_L10_00161F90") __attribute__((sda)); -int D_L10_00161F94 = 0x4000ff80; -int D_L10_00161F98 = 0x4010ffff; -int D_L10_00161F9C = 0x2000ff80; -int D_L10_00161FA0 = 0x200080ff; +int l10_burst_spark_initial_color_from __asm__("D_L10_00161F94") = 0x4000ff80; +int l10_burst_spark_initial_color_to __asm__("D_L10_00161F98") = 0x4010ffff; +int l10_burst_spark_second_color_from __asm__("D_L10_00161F9C") = 0x2000ff80; +int l10_burst_spark_second_color_to __asm__("D_L10_00161FA0") = 0x200080ff; extern int burst_spark_timer_reset_min_gp __asm__("D_L10_00161FA4") __attribute__((sda)); extern int burst_spark_timer_reset_max_gp __asm__("D_L10_00161FA8") __attribute__((sda)); extern int burst_spark_active_duration_min_gp __asm__("D_L10_00161FAC") __attribute__((sda)); @@ -211,13 +211,16 @@ void emit_burst_spark_particle(void *emission_position, short *timer, short *bur truncate_float_to_s32((float)burst_spark_base_second_frame_count_gp * frame_count_scale); third_frame_count = truncate_float_to_s32((float)burst_spark_base_third_frame_count_gp * frame_count_scale); - initial_spark_color = - fast_tween_color(D_L10_00161F94, D_L10_00161F98, random_float_between(0.0f, 1.0f)); + initial_spark_color = fast_tween_color(l10_burst_spark_initial_color_from, + l10_burst_spark_initial_color_to, + random_float_between(0.0f, 1.0f)); spawn_spark(emission_position, burst_spark_vertical_vector, acc, initial_spark_color, - fast_tween_color(D_L10_00161F9C, D_L10_00161FA0, random_float_between(0.0f, 1.0f)), + fast_tween_color(l10_burst_spark_second_color_from, + l10_burst_spark_second_color_to, + random_float_between(0.0f, 1.0f)), frame_count, second_frame_count, third_frame_count, @@ -248,10 +251,10 @@ extern int timed_spark_base_third_frame_count_gp __asm__("D_L10_00161FE0") __a extern float timed_spark_frame_count_scale_spread_gp __asm__("D_L10_00161FE4") __attribute__((sda)); extern int timed_spark_timer_reset_min_gp __asm__("D_L10_00161FF8") __attribute__((sda)); extern int timed_spark_timer_reset_max_gp __asm__("D_L10_00161FFC") __attribute__((sda)); -int D_L10_00161FE8 = 0x400080ff; -int D_L10_00161FEC = 0x4010ffff; -int D_L10_00161FF0 = 0x2000c0ff; -int D_L10_00161FF4 = 0x200080ff; +int l10_timed_spark_initial_color_from __asm__("D_L10_00161FE8") = 0x400080ff; +int l10_timed_spark_initial_color_to __asm__("D_L10_00161FEC") = 0x4010ffff; +int l10_timed_spark_second_color_from __asm__("D_L10_00161FF0") = 0x2000c0ff; +int l10_timed_spark_second_color_to __asm__("D_L10_00161FF4") = 0x200080ff; extern void clear_u64_value(void *); void emit_timed_spark_particle(void *emission_position, short *timer) { @@ -285,13 +288,16 @@ void emit_timed_spark_particle(void *emission_position, short *timer) { truncate_float_to_s32((float)timed_spark_base_second_frame_count_gp * frame_count_scale); third_frame_count = truncate_float_to_s32((float)timed_spark_base_third_frame_count_gp * frame_count_scale); - initial_spark_color = - fast_tween_color(D_L10_00161FE8, D_L10_00161FEC, random_float_between(0.0f, 1.0f)); + initial_spark_color = fast_tween_color(l10_timed_spark_initial_color_from, + l10_timed_spark_initial_color_to, + random_float_between(0.0f, 1.0f)); spawn_spark(emission_position, spark_vertical_vector, acc, initial_spark_color, - fast_tween_color(D_L10_00161FF0, D_L10_00161FF4, random_float_between(0.0f, 1.0f)), + fast_tween_color(l10_timed_spark_second_color_from, + l10_timed_spark_second_color_to, + random_float_between(0.0f, 1.0f)), frame_count, second_frame_count, third_frame_count, @@ -320,10 +326,10 @@ extern short height_adjusted_spark_base_third_frame_count_gp __asm__("D_L10_0016 __attribute__((sda)); extern short height_adjusted_spark_frame_count_scale_spread_gp __asm__("D_L10_00162020") __attribute__((sda)); -int D_L10_00162024 = 0x80002040; -int D_L10_00162028 = 0x80104040; -int D_L10_0016202C = 0x30002040; -int D_L10_00162030 = 0x30004020; +int l10_height_adjusted_spark_initial_color_from __asm__("D_L10_00162024") = 0x80002040; +int l10_height_adjusted_spark_initial_color_to __asm__("D_L10_00162028") = 0x80104040; +int l10_height_adjusted_spark_second_color_from __asm__("D_L10_0016202C") = 0x30002040; +int l10_height_adjusted_spark_second_color_to __asm__("D_L10_00162030") = 0x30004020; extern short height_adjusted_spark_timer_reset_max_gp __asm__("D_L10_00162038") __attribute__((sda)); extern short height_adjusted_spark_timer_reset_min_gp __asm__("D_L10_00162034") @@ -336,7 +342,7 @@ extern short height_adjusted_spark_pause_duration_max_gp __asm__("D_L10_00162048 __attribute__((sda)); extern short height_adjusted_spark_pause_duration_min_gp __asm__("D_L10_00162044") __attribute__((sda)); -int D_L10_0016204C = 24; +int l10_height_adjusted_spark_lookup_index_and_flags __asm__("D_L10_0016204C") = 24; extern short height_adjusted_spark_height_derived_frame_count_scale_gp __asm__("D_L10_00162050") __attribute__((sda)); @@ -399,17 +405,20 @@ void emit_height_adjusted_burst_spark_particle(void *emission_position, acc[3] = random_float_between( *(float *)&height_adjusted_spark_random_vector_fourth_component_min_gp, *(float *)&height_adjusted_spark_random_vector_fourth_component_max_gp); - initial_spark_color = - fast_tween_color(D_L10_00162024, D_L10_00162028, random_float_between(0.0f, 1.0f)); + initial_spark_color = fast_tween_color(l10_height_adjusted_spark_initial_color_from, + l10_height_adjusted_spark_initial_color_to, + random_float_between(0.0f, 1.0f)); spawn_spark(emission_position, spark_first_vector, acc, initial_spark_color, - fast_tween_color(D_L10_0016202C, D_L10_00162030, random_float_between(0.0f, 1.0f)), + fast_tween_color(l10_height_adjusted_spark_second_color_from, + l10_height_adjusted_spark_second_color_to, + random_float_between(0.0f, 1.0f)), frame_count, second_frame_count, third_frame_count, - D_L10_0016204C); + l10_height_adjusted_spark_lookup_index_and_flags); *timer = truncate_float_to_s32( random_float_between((float)*(int *)&height_adjusted_spark_timer_reset_min_gp, (float)*(int *)&height_adjusted_spark_timer_reset_max_gp)); diff --git a/src/overlays/l10/mobys/darter.c b/src/overlays/l10/mobys/darter.c index ea32ffa7dc..b3e1526487 100644 --- a/src/overlays/l10/mobys/darter.c +++ b/src/overlays/l10/mobys/darter.c @@ -92,7 +92,7 @@ typedef struct Vars_2e01a8 { unsigned char b5A; char p5B[5]; char a60[0x80]; - AlignedVec4f vE0; + AlignedVec4f dive_attack_aim_position; char pF0[0x10]; Moby *target; int f104; @@ -372,11 +372,12 @@ void darter_update(Moby *moby) { 0.02f, 0.3f, frame_time * 6.2831855f); - func_L00_0025CC58_2E0630(&moby->rot.y, - 0, - -fast_arc_tan(vector_distance_xy(&moby->pos, &darter_vars->vE0), - darter_vars->vE0.z - moby->pos.z), - frame_time * 12.566371f); + func_L00_0025CC58_2E0630( + &moby->rot.y, + 0, + -fast_arc_tan(vector_distance_xy(&moby->pos, &darter_vars->dive_attack_aim_position), + darter_vars->dive_attack_aim_position.z - moby->pos.z), + frame_time * 12.566371f); if (is_value_within_interpolated_window((char *)moby, 20.0f)) { float one = 1.0f; *(int *)&vector_and_collision_scratch[13] = 1; @@ -619,7 +620,7 @@ typedef struct Hit_2E2B80 { float f10[4]; struct Moby *moby; char pad24[8]; - float f2C; + float damage; int f30; } Hit_2E2B80; @@ -690,7 +691,7 @@ void update_darter_hit_reactions_and_targeting(struct Moby *moby) { resolve_moby_hit_response( moby, hit_record, &class_1199_vars->f20, 5, &hit_processing_status, 0, 0, 4); if (hit_record != 0 && hit_record->moby->oclass != moby->oclass) { - if (class_1199_vars->f20 <= hit_record->f2C) { + if (class_1199_vars->f20 <= hit_record->damage) { class_1199_vars->f20 = 0.0f; moby->flags &= 0xEFFF; if (moby->prev_seq != 4) @@ -717,7 +718,7 @@ void update_darter_hit_reactions_and_targeting(struct Moby *moby) { trooper_anim_update(moby, class_1199_vars->f110); func_L00_00261B00_2E2B80(moby, 1, 3, 0, -1); } else { - class_1199_vars->f20 = class_1199_vars->f20 - hit_record->f2C; + class_1199_vars->f20 = class_1199_vars->f20 - hit_record->damage; class_1199_vars->f117 = 0xFA; class_1199_vars->f26 = scale_game_frames(60); trooper_anim_update(moby, class_1199_vars->f110); diff --git a/src/overlays/l10/mobys/height_adjusted_projectile.c b/src/overlays/l10/mobys/height_adjusted_projectile.c index 101c57879e..4719c0280f 100644 --- a/src/overlays/l10/mobys/height_adjusted_projectile.c +++ b/src/overlays/l10/mobys/height_adjusted_projectile.c @@ -47,7 +47,7 @@ typedef struct HeightAdjustedProjectileVars { u8 pad_0[0x10]; u8 timer_10; u8 pad_11[0x1]; - s16 unk12; + s16 height_adjustment_mode; char *unk14; f32 unk18; f32 unk1C; @@ -74,7 +74,7 @@ void height_adjusted_projectile_update(struct Moby *moby) { qcopy(movement_start_position, &moby->pos); fast_vec_add(&moby->pos, &moby->pos, projectile_vars); find_point_ahead(20.0f, moby, found); - switch (projectile_vars->unk12) { + switch (projectile_vars->height_adjustment_mode) { case HEIGHT_MODE_SKIP_ADJUSTMENT: break; case HEIGHT_MODE_APPROACH_FIXED_HEIGHT: diff --git a/src/overlays/l10/mobys/help_hints.c b/src/overlays/l10/mobys/help_hints.c index 1e72838a53..6c5a3e0b3a 100644 --- a/src/overlays/l10/mobys/help_hints.c +++ b/src/overlays/l10/mobys/help_hints.c @@ -24,7 +24,7 @@ extern unsigned char D_00141C48[]; typedef struct EvData { int f0; int f4; - int f8; + int help_2715_volume_index; int fC; int f10; int f14; @@ -41,14 +41,14 @@ typedef struct HeroPos { typedef struct Msg { int f0; char pad4[0x20]; - int f24; + int requested_help_message_id; } Msg; typedef struct Save_2E9978 { char pad0[0x358]; - unsigned short f358; - unsigned short f35A; - int f35C; + unsigned short help_2718_condition_seen; + unsigned short help_2718_last_frame_bucket; + int help_2718_level_flags; } Save_2E9978; typedef struct Flags_2E9978 { @@ -99,13 +99,15 @@ void help_hints_update(Moby *moby) { case HELP_MESSAGE_STATE_CHECK_CONDITIONS: if (is_point_inside_clip_volume(D_0013F3D0_r, conditional_help_config->f0) != 0 && (((HeroPos *)(D_0013F3D0_r))->f200C < 2 || ((HeroPos *)(D_0013F3D0_r))->f200C == 9) && - ((Msg *)D_L10_00179890)->f0 == 0 && ((Msg *)D_L10_00179890)->f24 == -1 && + ((Msg *)D_L10_00179890)->f0 == 0 && + ((Msg *)D_L10_00179890)->requested_help_message_id == -1 && *(unsigned short *)(l10_help_message_2710_gate) == 0) { help_request(0x2710, 0x35); } if (is_point_inside_clip_volume(D_0013F3D0_r, conditional_help_config->f4) != 0 && (((HeroPos *)(D_0013F3D0_r))->f200C < 2 || ((HeroPos *)(D_0013F3D0_r))->f200C == 9) && - ((Msg *)D_L10_00179890)->f0 == 0 && ((Msg *)D_L10_00179890)->f24 == -1) { + ((Msg *)D_L10_00179890)->f0 == 0 && + ((Msg *)D_L10_00179890)->requested_help_message_id == -1) { if (((Flags_2E9978 *)(alternate_item_available))->f4 == 0) { if (*(unsigned short *)(D_00141B20_r) == 0) { help_request(0x2712, 0x37); @@ -117,14 +119,17 @@ void help_hints_update(Moby *moby) { } } if (D_L10_0015F5C4_vendor == 0 && D_0013D504_r[0] != 0 && - ((Msg *)D_L10_00179890)->f0 == 0 && ((Msg *)D_L10_00179890)->f24 == -1 && + ((Msg *)D_L10_00179890)->f0 == 0 && + ((Msg *)D_L10_00179890)->requested_help_message_id == -1 && *(unsigned short *)(l10_help_message_2711_gate) == 0) { help_request(0x2711, 0x36); } - if (is_point_inside_clip_volume(D_0013F3D0_r, conditional_help_config->f8) != 0 && + if (is_point_inside_clip_volume(D_0013F3D0_r, + conditional_help_config->help_2715_volume_index) != 0 && (((HeroPos *)(D_0013F3D0_r))->f200C < 2 || ((HeroPos *)(D_0013F3D0_r))->f200C == 9) && D_0013D4CB[0] == 0 && ((Msg *)D_L10_00179890)->f0 == 0 && - ((Msg *)D_L10_00179890)->f24 == -1 && *(unsigned short *)(D_00141C48) == 0) { + ((Msg *)D_L10_00179890)->requested_help_message_id == -1 && + *(unsigned short *)(D_00141C48) == 0) { help_request(0x2715, 0x5C); } any_active = 0; @@ -156,25 +161,30 @@ void help_hints_update(Moby *moby) { break; if (D_L10_0015FFD8_c2[conditional_help_config->f20].state == 4) break; - if (((Save_2E9978 *)(D_00141968_r))->f358 != 0) { - elapsed = - scale_game_frames(D_0015EEA4_gp) - ((Save_2E9978 *)(D_00141968_r))->f35A * 600; + if (((Save_2E9978 *)(D_00141968_r))->help_2718_condition_seen != 0) { + elapsed = scale_game_frames(D_0015EEA4_gp) - + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket * 600; if ((int)((float)scale_game_frames(0x12) * 60.0f) < elapsed || - ((Save_2E9978 *)(D_00141968_r))->f35A * 600 == 0) { + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket * 600 == 0) { help_request(0x2718, 0x6B); break; } - if (scale_game_frames(D_0015EEA4_gp) / 600 > ((Save_2E9978 *)(D_00141968_r))->f35A) { - ((Save_2E9978 *)(D_00141968_r))->f35A = scale_game_frames(D_0015EEA4_gp) / 600; + if (scale_game_frames(D_0015EEA4_gp) / 600 > + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket) { + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket = + scale_game_frames(D_0015EEA4_gp) / 600; } break; } - ((Save_2E9978 *)(D_00141968_r))->f358++; - if (scale_game_frames(D_0015EEA4_gp) / 600 > ((Save_2E9978 *)(D_00141968_r))->f35A) { - ((Save_2E9978 *)(D_00141968_r))->f35A = scale_game_frames(D_0015EEA4_gp) / 600; + ((Save_2E9978 *)(D_00141968_r))->help_2718_condition_seen++; + if (scale_game_frames(D_0015EEA4_gp) / 600 > + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket) { + ((Save_2E9978 *)(D_00141968_r))->help_2718_last_frame_bucket = + scale_game_frames(D_0015EEA4_gp) / 600; } - ((Save_2E9978 *)(D_00141968_r))->f35C = - ((Save_2E9978 *)(D_00141968_r))->f35C | (1 << current_level_index) | 0x80000000; + ((Save_2E9978 *)(D_00141968_r))->help_2718_level_flags = + ((Save_2E9978 *)(D_00141968_r))->help_2718_level_flags | (1 << current_level_index) | + 0x80000000; break; } } diff --git a/src/overlays/l10/mobys/hero_relocation_trigger.c b/src/overlays/l10/mobys/hero_relocation_trigger.c index 51619dba05..eb56884a56 100644 --- a/src/overlays/l10/mobys/hero_relocation_trigger.c +++ b/src/overlays/l10/mobys/hero_relocation_trigger.c @@ -45,7 +45,7 @@ typedef struct { int switch_b; } PickupVars; -int D_L10_00161388 = 1; +int l10_relocation_help_counter_reset_pending __asm__("D_L10_00161388") = 1; extern char *D_L10_0015FFD8_98b68 __asm__("D_L10_0015FFD8"); extern int D_L10_001BA950[]; extern u8 D_001413F4_98b68[] __asm__("D_001413F4"); @@ -65,8 +65,8 @@ void hero_relocation_trigger_update(struct Moby *moby) { struct Moby *target; moby->update_dist = 0xFF; relocation_trigger_vars = (PickupVars *)moby->pvars; - if (D_L10_00161388 == 1) { - D_L10_00161388 = 0; + if (l10_relocation_help_counter_reset_pending == 1) { + l10_relocation_help_counter_reset_pending = 0; D_00141948 = 0; } if (relocation_trigger_vars->switch_a != -1 && relocation_trigger_vars->switch_b != -1) { diff --git a/src/overlays/l10/mobys/linked_moby_hitbox.c b/src/overlays/l10/mobys/linked_moby_hitbox.c index de6a64904a..272c52488c 100644 --- a/src/overlays/l10/mobys/linked_moby_hitbox.c +++ b/src/overlays/l10/mobys/linked_moby_hitbox.c @@ -136,8 +136,8 @@ typedef struct LinkedMobyHitboxVars { s32 unkC; s32 unk10; s16 unk14; - s8 unk16; - s8 unk17; + s8 target_state_on_activation; + s8 target_state_for_hitbox_removal; s32 unk18; u8 pad_1C[0x24]; s32 unk40; @@ -238,8 +238,8 @@ void linked_moby_hitbox_update(struct Moby *moby) { break; case LINKED_HITBOX_STATE_WAIT_FOR_LINKED_MOBIES: if (differences == 0) { - if (target != 0 && linked_hitbox_vars->unk16 != -1) - target->state = *(unsigned char *)&linked_hitbox_vars->unk16; + if (target != 0 && linked_hitbox_vars->target_state_on_activation != -1) + target->state = *(unsigned char *)&linked_hitbox_vars->target_state_on_activation; linked_hitbox_vars->unk40 = linked_hitbox_vars->unkC; moby->state = LINKED_HITBOX_STATE_WAIT_FOR_TARGET_STATE_OR_TIMER; } @@ -253,8 +253,9 @@ void linked_moby_hitbox_update(struct Moby *moby) { target->alpha = FUN_001fa6d0_2c9c70(linked_hitbox_vars->unk44 * now / initial); } } - if ((linked_hitbox_vars->unk8 & 4) == 0 && target != 0 && linked_hitbox_vars->unk17 != -1 && - target->state == linked_hitbox_vars->unk17) + if ((linked_hitbox_vars->unk8 & 4) == 0 && target != 0 && + linked_hitbox_vars->target_state_for_hitbox_removal != -1 && + target->state == linked_hitbox_vars->target_state_for_hitbox_removal) moby->state = LINKED_HITBOX_STATE_REMOVE; if ((linked_hitbox_vars->unk8 & 8) == 0 && FUN_001f9740_2c9c70(&linked_hitbox_vars->unk40) != 0) diff --git a/src/overlays/l10/mobys/screamer.c b/src/overlays/l10/mobys/screamer.c index 986ff05b07..977605655f 100644 --- a/src/overlays/l10/mobys/screamer.c +++ b/src/overlays/l10/mobys/screamer.c @@ -325,7 +325,7 @@ typedef struct Hit_2DFC38 { float f10[4]; struct Moby *moby; char pad24[8]; - float f2C; + float damage; int f30; } Hit_2DFC38; @@ -333,33 +333,33 @@ typedef struct MobyData_2DFC38 { char pad0[0x20]; float f20; char pad24[2]; - short f26; + short nonlethal_hit_duration_frames; char pad28[0x10]; - int f38; + int target_range_boost_requested; char pad3C[0x24]; char f60[0x10]; float f70, f74, f78, f7C; char pad80[4]; - int f84; + int knockback_flags; char pad88[0x15]; unsigned char f9D; char pad9E[0x22]; - char fC0[0x40]; + char selected_target_vectors[0x40]; int f100, f104; char pad108[8]; - char f110[7]; - unsigned char f117; + char color_reaction_state_header[7]; + unsigned char secondary_color_red; char pad118[0x18]; - char f130[0x44]; + char navigation_state[0x44]; int f174; - float f178; - int f17C; - float f180; - int f184; - float f188; - int f18C; + float default_target_range; + int active_target_path_index; + float current_target_range; + int target_range_boost_timer; + float activation_wait_target_range; + int activation_wait_target_path_index; char pad190[4]; - int f194; + int target_bounds_cuboid_index; } MobyData_2DFC38; extern char D_0013F3D0[]; @@ -397,18 +397,18 @@ void update_screamer_hit_reactions_and_targeting(struct Moby *moby) { int target_selection_status; float knockback_angle; - if (screamer_vars->f38 != 0) { - screamer_vars->f184 = + if (screamer_vars->target_range_boost_requested != 0) { + screamer_vars->target_range_boost_timer = truncate_float_to_s32(scale_time(random_float_between(180.0f, 240.0f))); - screamer_vars->f38 = 0; + screamer_vars->target_range_boost_requested = 0; } - fast_dec_timer(&screamer_vars->f184); + fast_dec_timer(&screamer_vars->target_range_boost_timer); if (moby->state != SCREAMER_STATE_DEATH_KNOCKBACK) { hit_record = (Hit_2DFC38 *)find_moby_hit(moby, 0x330000, 0); hit_update_2DFC38( moby, hit_record, &screamer_vars->f20, 5, &hit_processing_status, 0, 0, 4); if (hit_record != 0) { - if (screamer_vars->f20 <= hit_record->f2C) { + if (screamer_vars->f20 <= hit_record->damage) { if (screamer_death_message_gate != 0 && item_unlocked[0x10] == 0) { item_unlocked[0x10] = 1; allocate_voice_for_bank_entry_2DFC38(1, 0, 0); @@ -422,7 +422,7 @@ void update_screamer_hit_reactions_and_targeting(struct Moby *moby) { screamer_vars->f70 = D_0015ED70 * 26.0f; screamer_vars->f9D = 3; screamer_vars->f74 = 0.0005f; - screamer_vars->f84 = 9; + screamer_vars->knockback_flags = 9; screamer_vars->f78 = D_0015ED6C * 7.0f; screamer_vars->f7C = D_0015ED6C * 10.0f; if (hit_record->f30 & 1) @@ -431,32 +431,33 @@ void update_screamer_hit_reactions_and_targeting(struct Moby *moby) { knockback_angle = fast_arc_tan(moby->pos.x - hit_record->x, moby->pos.y - hit_record->y); trooper_start_knockback(moby, screamer_vars->f60, knockback_angle, 5, 1, 0); - screamer_vars->f117 = 0x78; - trooper_anim_update(moby, screamer_vars->f110); + screamer_vars->secondary_color_red = 0x78; + trooper_anim_update(moby, screamer_vars->color_reaction_state_header); func_L00_00261B00_2E2B80(moby, 1, 3, 0, -1); } else { - screamer_vars->f20 = screamer_vars->f20 - hit_record->f2C; - screamer_vars->f117 = 0xfa; - screamer_vars->f26 = scale_game_frames(60); - trooper_anim_update(moby, screamer_vars->f110); + screamer_vars->f20 = screamer_vars->f20 - hit_record->damage; + screamer_vars->secondary_color_red = 0xfa; + screamer_vars->nonlethal_hit_duration_frames = scale_game_frames(60); + trooper_anim_update(moby, screamer_vars->color_reaction_state_header); } moby->hit_slot = 0xff; } } - trooper_anim_finish(moby, screamer_vars->f110); + trooper_anim_finish(moby, screamer_vars->color_reaction_state_header); if (screamer_vars->f174 == 2) - screamer_vars->f180 = 42.0f; - else if (screamer_vars->f184 != 0) - screamer_vars->f180 = screamer_vars->f178 + 6.0f; + screamer_vars->current_target_range = 42.0f; + else if (screamer_vars->target_range_boost_timer != 0) + screamer_vars->current_target_range = screamer_vars->default_target_range + 6.0f; else if (moby->state == SCREAMER_STATE_WAIT_FOR_ACTIVATION) - screamer_vars->f180 = screamer_vars->f188; + screamer_vars->current_target_range = screamer_vars->activation_wait_target_range; else - screamer_vars->f180 = screamer_vars->f178; + screamer_vars->current_target_range = screamer_vars->default_target_range; if (screamer_vars->f174 == 2) { - target_selection_status = ahead_f(screamer_vars->f180, moby, screamer_vars->fC0); + target_selection_status = ahead_f( + screamer_vars->current_target_range, moby, screamer_vars->selected_target_vectors); if (target_selection_status != TARGET_SELECTION_DEFAULT_TARGET_EXCLUDED) { - LevelCuboid *bp = &l10_cuboids[screamer_vars->f194]; + LevelCuboid *bp = &l10_cuboids[screamer_vars->target_bounds_cuboid_index]; fast_vec_sub(relative_offset, D_0013F3D0, &bp->pos); relative_offset[3] = 0.0f; transform_vector_by_basis(transformed_offset, relative_offset, bp->to_local); @@ -465,19 +466,34 @@ void update_screamer_hit_reactions_and_targeting(struct Moby *moby) { transformed_offset[2] <= -1.0f || 1.0f <= transformed_offset[2]) screamer_vars->f104 = 2; } - } else if (moby->state == SCREAMER_STATE_WAIT_FOR_ACTIVATION && screamer_vars->f18C >= 0) { - LevelPath *path = l10_paths[screamer_vars->f18C]; - target_selection_status = activate_effect_l08( - screamer_vars->f180, moby, screamer_vars->fC0, 0, 0, path->points, path->count); - } else if (moby->state != SCREAMER_STATE_WAIT_FOR_ACTIVATION && screamer_vars->f17C >= 0) { - LevelPath *path = l10_paths[screamer_vars->f17C]; - target_selection_status = activate_effect_l08( - screamer_vars->f180, moby, screamer_vars->fC0, 0, 0, path->points, path->count); + } else if (moby->state == SCREAMER_STATE_WAIT_FOR_ACTIVATION && + screamer_vars->activation_wait_target_path_index >= 0) { + LevelPath *path = l10_paths[screamer_vars->activation_wait_target_path_index]; + target_selection_status = activate_effect_l08(screamer_vars->current_target_range, + moby, + screamer_vars->selected_target_vectors, + 0, + 0, + path->points, + path->count); + } else if (moby->state != SCREAMER_STATE_WAIT_FOR_ACTIVATION && + screamer_vars->active_target_path_index >= 0) { + LevelPath *path = l10_paths[screamer_vars->active_target_path_index]; + target_selection_status = activate_effect_l08(screamer_vars->current_target_range, + moby, + screamer_vars->selected_target_vectors, + 0, + 0, + path->points, + path->count); } else { - target_selection_status = ahead_f(screamer_vars->f180, moby, screamer_vars->fC0); + target_selection_status = ahead_f( + screamer_vars->current_target_range, moby, screamer_vars->selected_target_vectors); } if (target_selection_status != TARGET_SELECTION_DEFAULT_TARGET_EXCLUDED) { - if (screamer_vars->f180 < vector_distance_xy(screamer_vars->f130, screamer_vars->fC0)) + if (screamer_vars->current_target_range < + vector_distance_xy(screamer_vars->navigation_state, + screamer_vars->selected_target_vectors)) screamer_vars->f104 = 2; else if (moby->visible == 0) screamer_vars->f104 = 2; diff --git a/src/overlays/l10/mobys/toxic_crab.c b/src/overlays/l10/mobys/toxic_crab.c index e511c16312..0c8c002e95 100644 --- a/src/overlays/l10/mobys/toxic_crab.c +++ b/src/overlays/l10/mobys/toxic_crab.c @@ -1,5 +1,6 @@ /* Level 10 moby class toxic_crab: sight, targeting, group approach, particles and hit reactions. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/game/item_state.h" #include "rnc/hero/hero.h" #include "rnc/mobys/moby.h" @@ -47,6 +48,10 @@ enum { TOXIC_CRAB_STATE_FALL_TO_DEATH = 12 }; +enum ToxicCrabTargetSelectionStatus { + TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE = 2 +}; + typedef struct Moby Moby; extern struct Moby *D_L10_0015FFD0_macro[] __asm__("D_L10_0015FFD0") MACRO_ADDR; extern float D_0015ED6C; @@ -100,12 +105,12 @@ typedef struct Crab2E30F8 { char q60[7]; unsigned char b67; char p68[8]; - float v70[2]; - float f78; + float knockback_motion_xy[2]; + float vertical_motion_step; char p7C[4]; float f80; char p84[0xC]; - int i90; + int knockback_probe_radius_fixed; int i94; float f98; char p9C[0x11]; @@ -114,36 +119,36 @@ typedef struct Crab2E30F8 { float fC0; float fC4; char pC8[8]; - int iD0; - float fD4; - float fD8; - float fDC; + int movement_size_scale_fixed; + float movement_size_scale; + float maximum_ground_drop; + float maximum_ground_rise; char pE0[0x14]; - float fF4; + float horizontal_movement_step_limit; char pF8[0x28]; - float f120; - float f124; + float tracked_position_x; + float tracked_position_y; char p128[0x38]; char *tgt; - int i164; + int tracked_target_selection_status; char p168[8]; - float v170[4]; + float home_position_and_heading[4]; char p180[0x10]; - float f190; - float f194; - float f198; + float heading_turn_step; + float pursuit_entry_angle_sample_radians; + float pursuit_entry_angle_bound_degrees; char p19C[4]; float f1A0; - float f1A4; - int i1A8; + float movement_speed; + int behavior_timer_frames; char p1AC[8]; - int i1B4; - int i1B8; - int i1BC; - float v1C0[4]; + int activation_override_enabled; + int pursuit_delay_upper_bound_frames; + int activation_dependency_moby_index; + float pursuit_progress_sample_position[4]; char p1D0[8]; - int i1D8; - int i1DC; + int pursuit_movement_blocked; + int remove_in_clank_mode; char p1E0[0xD0]; unsigned char q2B0[4]; } Crab2E30F8; @@ -152,17 +157,17 @@ typedef struct Moby2E30F8 { char p00[0x10]; float pos[4]; unsigned char state; - unsigned char b21; + unsigned char group_index; char p22[2]; char *p24; char p28[4]; - float f2C; + float scaled_class_size; char p30; unsigned char b31; char p32[2]; - unsigned short s34; + unsigned short moby_flags; char p36[0x12]; - float f48; + float heading_radians; char p4C[7]; unsigned char anim; char p54[4]; @@ -176,7 +181,7 @@ typedef struct Moby2E30F8 { char p80[0x26]; unsigned short cls; char pA8[8]; - unsigned char bB0; + unsigned char mission_index; char pB1; unsigned short id; } Moby2E30F8; @@ -193,7 +198,8 @@ extern float fast_cos(float); extern float fast_sin(float); extern int D_L10_0015F5CC; extern int D_L10_0015FFD8; -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern float l10_toxic_crab_size_scale __asm__("D_L10_00161E24") __attribute__((sda)); #include "rnc/overlay/l10/mobys/toxic_crab_data/toxic_crab_update_2.h" @@ -234,12 +240,6 @@ extern float fast_vec_dist(void *, void *); /* Moby class 1202 */ void toxic_crab_update(Moby2E30F8 *m) { - enum { - MOBY_STATE_MARKED_FOR_REMOVAL = 0xFE - }; - enum { - MOBY_STATE_ALTERNATE_REMOVAL_MARKER = 0xFD - }; int see = 0; Crab2E30F8 *crab_data = m->data; char *target_moby; @@ -248,7 +248,7 @@ void toxic_crab_update(Moby2E30F8 *m) { update_toxic_crab_hit_reactions_and_targeting(m); target_moby = crab_data->tgt; - m->f2C = *(float *)(m->p24 + 0x24) * l10_toxic_crab_size_scale; + m->scaled_class_size = *(float *)(m->p24 + 0x24) * l10_toxic_crab_size_scale; FUN_L00_00263ac8(2.5f, (int)m, 2, crab_data->q2B0); *(OvlQuad *)from = *(OvlQuad *)m->pos; from[2] += 1.0f; @@ -267,7 +267,8 @@ void toxic_crab_update(Moby2E30F8 *m) { } switch (m->state) { case TOXIC_CRAB_STATE_INITIALIZE: - if (crab_data->i1DC != 0 && ((unsigned char *)&D_0013E533)[0x2EC1] == 1) { + if (crab_data->remove_in_clank_mode != FALSE && + ((unsigned char *)&D_0013E533)[0x2EC1] == 1) { mark_moby_for_removal(m); return; } @@ -278,36 +279,36 @@ void toxic_crab_update(Moby2E30F8 *m) { crab_data->b28 = 3; crab_data->b58 = truncate_float_to_s32(10.0f); crab_data->b5A = truncate_float_to_s32(16.0f); - m->s34 |= 0x5000; - qcopy(crab_data->v170, m->pos); - crab_data->v170[3] = m->f48; - FUN_L01_0026d930((char *)&crab_data->iD0); + m->moby_flags |= 0x5000; + qcopy(crab_data->home_position_and_heading, m->pos); + crab_data->home_position_and_heading[3] = m->heading_radians; + FUN_L01_0026d930((char *)&crab_data->movement_size_scale_fixed); { float k = l10_toxic_crab_size_scale * 1024.0f; float initial_movement_step; float initial_movement_size_scale; int r; - crab_data->fDC = 0.5f; - crab_data->fD8 = 2.0f; + crab_data->maximum_ground_rise = 0.5f; + crab_data->maximum_ground_drop = 2.0f; r = truncate_float_to_s32(k); - initial_movement_step = crab_data->f1A4 * frame_time; + initial_movement_step = crab_data->movement_speed * frame_time; initial_movement_size_scale = l10_toxic_crab_size_scale; - crab_data->iD0 = r; - crab_data->fD4 = initial_movement_size_scale; - crab_data->fF4 = initial_movement_step; + crab_data->movement_size_scale_fixed = r; + crab_data->movement_size_scale = initial_movement_size_scale; + crab_data->horizontal_movement_step_limit = initial_movement_step; } { - int k = crab_data->i1BC; + int k = crab_data->activation_dependency_moby_index; if (k != -1) { Moby2E30F8 *p = (Moby2E30F8 *)((char *)D_L10_0015FFD0_macro[2] + (k << 8)); - if (p == 0 || p->state == MOBY_STATE_MARKED_FOR_REMOVAL || + if (p == 0 || p->state == MOBY_STATE_REMOVAL_MARKER || p->state == MOBY_STATE_ALTERNATE_REMOVAL_MARKER || (((*(int *)(((char *)&D_0014C190) + (((short)p->id >> 5) * 4 + (current_level_index << 8))) >> (p->id & 0x1F)) & 1) && - visited52[p->bB0 + (current_level_index << 4)] == 0xFF)) { - crab_data->i1BC = -1; + visited52[p->mission_index + (current_level_index << 4)] == 0xFF)) { + crab_data->activation_dependency_moby_index = -1; } } } @@ -318,39 +319,45 @@ void toxic_crab_update(Moby2E30F8 *m) { crab_data->f1A0 = *(float *)&D_L10_00161E40_gp; break; case TOXIC_CRAB_STATE_WAIT_FOR_ACTIVATION: - FUN_L00_00258278( - (char *)m, &crab_data->f190, crab_data->v170[3], 0.02f, 0.3f, frame_time * 6.2831855f); - if (crab_data->i1BC != -1) { + FUN_L00_00258278((char *)m, + &crab_data->heading_turn_step, + crab_data->home_position_and_heading[3], + 0.02f, + 0.3f, + frame_time * 6.2831855f); + if (crab_data->activation_dependency_moby_index != -1) { char *moby_instance_array_base = D_L10_0015FFD8; - Moby2E30F8 *p = (Moby2E30F8 *)(moby_instance_array_base + (crab_data->i1BC << 8)); - if (p == 0 || p->state == MOBY_STATE_MARKED_FOR_REMOVAL || + Moby2E30F8 *p = (Moby2E30F8 *)(moby_instance_array_base + + (crab_data->activation_dependency_moby_index << 8)); + if (p == 0 || p->state == MOBY_STATE_REMOVAL_MARKER || p->state == MOBY_STATE_ALTERNATE_REMOVAL_MARKER || ((*(int *)(((char *)&D_0014C190) + (((short)p->id >> 5) * 4 + (current_level_index << 8))) >> (p->id & 0x1F)) & 1)) { m->state = TOXIC_CRAB_STATE_ACTIVATE; - crab_data->i1A8 = scale_game_frames(1); - if (m->b21 != 0xFF) { + crab_data->behavior_timer_frames = scale_game_frames(1); + if (m->group_index != 0xFF) { activate_waiting_moby_group_members((struct Moby *)m); } } } - if (crab_data->i164 != 2 || crab_data->i1B4 != 0) { + if (crab_data->tracked_target_selection_status != TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE || + crab_data->activation_override_enabled != 0) { m->state = TOXIC_CRAB_STATE_ACTIVATE; - crab_data->i1A8 = scale_game_frames(1); - if (m->b21 != 0xFF) { + crab_data->behavior_timer_frames = scale_game_frames(1); + if (m->group_index != 0xFF) { activate_waiting_moby_group_members((struct Moby *)m); } } break; case TOXIC_CRAB_STATE_ACTIVATE: if (m->anim == 0) { - if (crab_data->i1A8 == 0) { - crab_data->i1A8 = + if (crab_data->behavior_timer_frames == 0) { + crab_data->behavior_timer_frames = truncate_float_to_s32(FUN_L04_001f1978(random_float_between(0.0f, 20.0f))); - } else if (fast_dec_timer(&crab_data->i1A8)) { - if (crab_data->i1B4 != 0) { + } else if (fast_dec_timer(&crab_data->behavior_timer_frames)) { + if (crab_data->activation_override_enabled != 0) { if (m->anim != 1) { blend_moby_animation(m, 1, 0, scale_game_frames(10)); } @@ -364,11 +371,11 @@ void toxic_crab_update(Moby2E30F8 *m) { if (vector_distance_xy(m->pos, &hero.motion.pos) < *(float *)&D_L10_00161E40_gp) { float x; m->state = TOXIC_CRAB_STATE_PURSUE_TARGET; - crab_data->i1D8 = 0; - qcopy(crab_data->v1C0, m->pos); - crab_data->fF4 = 0.0f; - x = crab_data->f198 * DEG_TO_RAD; - crab_data->f194 = random_float_between(x, -x); + crab_data->pursuit_movement_blocked = 0; + qcopy(crab_data->pursuit_progress_sample_position, m->pos); + crab_data->horizontal_movement_step_limit = 0.0f; + x = crab_data->pursuit_entry_angle_bound_degrees * DEG_TO_RAD; + crab_data->pursuit_entry_angle_sample_radians = random_float_between(x, -x); if (m->anim != 3) { blend_moby_animation(m, 3, 0, scale_game_frames(5)); } @@ -381,24 +388,26 @@ void toxic_crab_update(Moby2E30F8 *m) { } break; case TOXIC_CRAB_STATE_FACE_TRACKED_POSITION: { - float ang = fast_arc_tan(crab_data->f120 - m->pos[0], crab_data->f124 - m->pos[1]); - FUN_L00_00258278((char *)m, &crab_data->f190, ang, 0.02f, 0.3f, frame_time * 6.2831855f); - if (crab_data->i164 != 2) { + float ang = fast_arc_tan(crab_data->tracked_position_x - m->pos[0], + crab_data->tracked_position_y - m->pos[1]); + FUN_L00_00258278( + (char *)m, &crab_data->heading_turn_step, ang, 0.02f, 0.3f, frame_time * 6.2831855f); + if (crab_data->tracked_target_selection_status != TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { m->state = TOXIC_CRAB_STATE_WAIT_TO_PURSUE; - crab_data->i1A8 = - truncate_float_to_s32(random_float_between(0.0f, (float)crab_data->i1B8)); + crab_data->behavior_timer_frames = truncate_float_to_s32( + random_float_between(0.0f, (float)crab_data->pursuit_delay_upper_bound_frames)); } break; } case TOXIC_CRAB_STATE_WAIT_TO_PURSUE: - if (fast_dec_timer(&crab_data->i1A8)) { + if (fast_dec_timer(&crab_data->behavior_timer_frames)) { float x; m->state = TOXIC_CRAB_STATE_PURSUE_TARGET; - crab_data->i1D8 = 0; - qcopy(crab_data->v1C0, m->pos); - crab_data->fF4 = 0.0f; - x = crab_data->f198 * DEG_TO_RAD; - crab_data->f194 = random_float_between(x, -x); + crab_data->pursuit_movement_blocked = 0; + qcopy(crab_data->pursuit_progress_sample_position, m->pos); + crab_data->horizontal_movement_step_limit = 0.0f; + x = crab_data->pursuit_entry_angle_bound_degrees * DEG_TO_RAD; + crab_data->pursuit_entry_angle_sample_radians = random_float_between(x, -x); if (m->anim != 3) { blend_moby_animation(m, 3, 0, scale_game_frames(5)); } @@ -417,32 +426,41 @@ void toxic_crab_update(Moby2E30F8 *m) { target_distance = fast_vec_dist(m->pos, target_moby + 0x10); if (target_distance > (MOBY(target_moby)->oclass == 0x359 ? 2.0f : 3.57f)) { - approach_value(&crab_data->fF4, crab_data->f1A4 * frame_time, frame_time_sq * 8.0f); + approach_value(&crab_data->horizontal_movement_step_limit, + crab_data->movement_speed * frame_time, + frame_time_sq * 8.0f); } else { - approach_value( - &crab_data->fF4, crab_data->f1A4 * frame_time * 0.3f, frame_time_sq * 20.0f); + approach_value(&crab_data->horizontal_movement_step_limit, + crab_data->movement_speed * frame_time * 0.3f, + frame_time_sq * 20.0f); } *(OvlQuad *)pre_movement_position = *(OvlQuad *)m->pos; if (see && absolute_float(target_distance - (MOBY(target_moby)->oclass == 0x359 ? 2.0f : 3.57f)) < 0.35f) { - approach_value(&crab_data->fF4, 0.0f, frame_time_sq * 30.0f); - } else if (crab_data->i1D8 != 0) { - approach_value(&crab_data->fF4, 0.0f, frame_time_sq * 10.0f); + approach_value( + &crab_data->horizontal_movement_step_limit, 0.0f, frame_time_sq * 30.0f); + } else if (crab_data->pursuit_movement_blocked != 0) { + approach_value( + &crab_data->horizontal_movement_step_limit, 0.0f, frame_time_sq * 10.0f); } ang = fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], MOBY(target_moby)->pos.y - m->pos[1]); - diff = fast_difference_between_rotations(ang, m->f48); + diff = fast_difference_between_rotations(ang, m->heading_radians); if (0.87266463f < diff) { - float lim = crab_data->f1A4 * frame_time * 0.25f; - if (lim < crab_data->fF4) { - crab_data->fF4 = lim; + float lim = crab_data->movement_speed * frame_time * 0.25f; + if (lim < crab_data->horizontal_movement_step_limit) { + crab_data->horizontal_movement_step_limit = lim; } } if (toxic_crab_pursuit_heading_threshold_degrees_gp * DEG_TO_RAD < diff || - crab_data->i1D8 == 0) { - FUN_L00_00258278( - (char *)m, &crab_data->f190, ang, 0.02f, 0.3f, frame_time * 6.2831855f); + crab_data->pursuit_movement_blocked == 0) { + FUN_L00_00258278((char *)m, + &crab_data->heading_turn_step, + ang, + 0.02f, + 0.3f, + frame_time * 6.2831855f); } aim = compute_toxic_crab_group_approach_angle((struct Moby *)m); v[0] = fast_cos(aim) * (MOBY(target_moby)->oclass == 0x359 ? 2.0f : 3.57f); @@ -450,11 +468,11 @@ void toxic_crab_update(Moby2E30F8 *m) { v[2] = 0.0f; fast_vec_add(v, v, target_moby + 0x10); if (hero.vehicle_mode != HERO_VEHICLE_MODE_CLANK) { - float rot = m->f48; + float rot = m->heading_radians; int r; - m->f48 = fast_arc_tan(v[0] - m->pos[0], v[1] - m->pos[1]); - dir[0] = fast_cos(m->f48) * 2.0f; - dir[1] = fast_sin(m->f48) * 2.0f; + m->heading_radians = fast_arc_tan(v[0] - m->pos[0], v[1] - m->pos[1]); + dir[0] = fast_cos(m->heading_radians) * 2.0f; + dir[1] = fast_sin(m->heading_radians) * 2.0f; dir[2] = 0.0f; clear_u64_value(out); { @@ -471,45 +489,49 @@ void toxic_crab_update(Moby2E30F8 *m) { fast_vec_dist(from2, h + 0x20) < toxic_crab_obstacle_pause_distance_gp) { m->state = TOXIC_CRAB_STATE_PAUSE_PURSUIT; - crab_data->i1A8 = scale_game_frames(0x3C); + crab_data->behavior_timer_frames = scale_game_frames(0x3C); if (m->anim != 1) { blend_moby_animation(m, 1, 0, scale_game_frames(7)); } } } } - r = FUN_L00_00258b50(m, &crab_data->iD0, dir, out, 1.0f); - m->f48 = rot; + r = move_moby_with_ground_and_collision_checks( + m, &crab_data->movement_size_scale_fixed, dir, out, 1.0f); + m->heading_radians = rot; if (r & 3) { if (vector_distance_xy(m->pos, pre_movement_position) < - crab_data->fF4 * 0.25f) { - crab_data->i1D8 = 1; + crab_data->horizontal_movement_step_limit * 0.25f) { + crab_data->pursuit_movement_blocked = 1; } else { - crab_data->i1D8 = 0; + crab_data->pursuit_movement_blocked = 0; } - if (D_L10_0015F5CC % 7 == 0 && crab_data->i1A8 == 0) { - if (vector_distance_xy(crab_data->v1C0, m->pos) < crab_data->fF4 && + if (D_L10_0015F5CC % 7 == 0 && crab_data->behavior_timer_frames == 0) { + if (vector_distance_xy(crab_data->pursuit_progress_sample_position, + m->pos) < + crab_data->horizontal_movement_step_limit && diff <= toxic_crab_pursuit_heading_threshold_degrees_gp * DEG_TO_RAD) { m->state = TOXIC_CRAB_STATE_PAUSE_PURSUIT; - crab_data->i1A8 = scale_game_frames(0x3C); + crab_data->behavior_timer_frames = scale_game_frames(0x3C); if (m->anim != 1) { blend_moby_animation(m, 1, 0, scale_game_frames(7)); } } else if (m->anim == 1) { blend_moby_animation(m, 3, 0, scale_game_frames(7)); } - qcopy(crab_data->v1C0, m->pos); + qcopy(crab_data->pursuit_progress_sample_position, m->pos); } } else { - crab_data->i1D8 = 0; + crab_data->pursuit_movement_blocked = 0; } if (m->state == TOXIC_CRAB_STATE_PURSUE_TARGET && - fast_dec_timer(&crab_data->i1A8) && 0.0f < crab_data->fF4 && - crab_data->i1D8 == 0 && m->anim == 1) { + fast_dec_timer(&crab_data->behavior_timer_frames) && + 0.0f < crab_data->horizontal_movement_step_limit && + crab_data->pursuit_movement_blocked == 0 && m->anim == 1) { blend_moby_animation(m, 3, 0, scale_game_frames(7)); } } else { - if (absolute_float(crab_data->f190) > frame_time * 0.08726646f) { + if (absolute_float(crab_data->heading_turn_step) > frame_time * 0.08726646f) { if (m->anim != 3) { blend_moby_animation(m, 3, 0, scale_game_frames(7)); } @@ -521,9 +543,10 @@ void toxic_crab_update(Moby2E30F8 *m) { } m->f58 = 1.2f; { - float home = fast_vec_dist(m->pos, crab_data->v170); + float home = fast_vec_dist(m->pos, crab_data->home_position_and_heading); if ((hero.vehicle_mode == HERO_VEHICLE_MODE_CLANK ? 1.0f : 30.0f) < home || - crab_data->i164 == 2) { + crab_data->tracked_target_selection_status == + TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { m->state = TOXIC_CRAB_STATE_RETURN_HOME; blend_moby_animation(m, 4, 0, scale_game_frames(0xC)); } else if (vector_distance_xy(m->pos, target_moby + 0x10) < @@ -547,14 +570,14 @@ void toxic_crab_update(Moby2E30F8 *m) { diff = fast_difference_between_rotations(fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], MOBY(target_moby)->pos.y - m->pos[1]), - m->f48); + m->heading_radians); if (0.87266463f < diff) { - float lim = crab_data->f1A4 * frame_time * 0.25f; - if (lim < crab_data->fF4) { - crab_data->fF4 = lim; + float lim = crab_data->movement_speed * frame_time * 0.25f; + if (lim < crab_data->horizontal_movement_step_limit) { + crab_data->horizontal_movement_step_limit = lim; } } - if (fast_dec_timer(&crab_data->i1A8) || + if (fast_dec_timer(&crab_data->behavior_timer_frames) || toxic_crab_pursuit_heading_threshold_degrees_gp * DEG_TO_RAD < diff) { float from2[4]; float to2[4]; @@ -573,16 +596,17 @@ void toxic_crab_update(Moby2E30F8 *m) { } if (ok) { m->state = TOXIC_CRAB_STATE_PURSUE_TARGET; - crab_data->i1D8 = 0; - qcopy(crab_data->v1C0, m->pos); - crab_data->fF4 = 0.0f; - crab_data->i1A8 = scale_game_frames(0xF); + crab_data->pursuit_movement_blocked = 0; + qcopy(crab_data->pursuit_progress_sample_position, m->pos); + crab_data->horizontal_movement_step_limit = 0.0f; + crab_data->behavior_timer_frames = scale_game_frames(0xF); } } { - float home = fast_vec_dist(m->pos, crab_data->v170); + float home = fast_vec_dist(m->pos, crab_data->home_position_and_heading); if ((hero.vehicle_mode == HERO_VEHICLE_MODE_CLANK ? 1.0f : 30.0f) < home || - crab_data->i164 == 2) { + crab_data->tracked_target_selection_status == + TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { m->state = TOXIC_CRAB_STATE_RETURN_HOME; blend_moby_animation(m, 4, 0, scale_game_frames(0xC)); } else if (vector_distance_xy(m->pos, target_moby + 0x10) < @@ -606,7 +630,8 @@ void toxic_crab_update(Moby2E30F8 *m) { fr = compute_interpolated_record_value(m); ang = fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], MOBY(target_moby)->pos.y - m->pos[1]); - FUN_L00_00258278((char *)m, &crab_data->f190, ang, 0.03f, 0.3f, frame_time * 6.2831855f); + FUN_L00_00258278( + (char *)m, &crab_data->heading_turn_step, ang, 0.03f, 0.3f, frame_time * 6.2831855f); if (m->anim >= 6 && m->anim <= 7 && 4.0f <= fr && fr <= 7.0f) { Hit2E30F8 hit; float v[4]; @@ -617,8 +642,8 @@ void toxic_crab_update(Moby2E30F8 *m) { hit.flags = 0x10001; hit.f = 3.1f; hit.n = 1; - hit.v[0] = fast_cos(m->f48); - hit.v[1] = fast_sin(m->f48); + hit.v[0] = fast_cos(m->heading_radians); + hit.v[1] = fast_sin(m->heading_radians); hit.v[2] = 1.0f; hit.v[3] = 5627.925f; hit.b0 = 0; @@ -638,16 +663,17 @@ void toxic_crab_update(Moby2E30F8 *m) { collision_line(pos, v, 9, m, &hit); } } else if (m->anim >= 6 && m->anim <= 7 && (m->b70 & 2)) { - float home = fast_vec_dist(m->pos, crab_data->v170); + float home = fast_vec_dist(m->pos, crab_data->home_position_and_heading); if ((((unsigned char *)&D_0013E533)[0x2EC1] == 1 ? 1.0f : 30.0f) < home || - crab_data->i164 == 2) { + crab_data->tracked_target_selection_status == + TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { m->state = TOXIC_CRAB_STATE_RETURN_HOME; blend_moby_animation(m, 4, 0, scale_game_frames(0xC)); } else { m->state = TOXIC_CRAB_STATE_PURSUE_TARGET; - crab_data->i1D8 = 0; - qcopy(crab_data->v1C0, m->pos); - crab_data->fF4 = 0.0f; + crab_data->pursuit_movement_blocked = 0; + qcopy(crab_data->pursuit_progress_sample_position, m->pos); + crab_data->horizontal_movement_step_limit = 0.0f; if (m->anim != 3) { blend_moby_animation(m, 3, 0, scale_game_frames(7)); } @@ -662,28 +688,35 @@ void toxic_crab_update(Moby2E30F8 *m) { float rot; float ang; - approach_value( - &crab_data->fF4, crab_data->f1A4 * 3.0f * frame_time, frame_time_sq * 20.0f); + approach_value(&crab_data->horizontal_movement_step_limit, + crab_data->movement_speed * 3.0f * frame_time, + frame_time_sq * 20.0f); ang = fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], MOBY(target_moby)->pos.y - m->pos[1]); - FUN_L00_00258278( - (char *)m, &crab_data->f190, ang, 0.02f, 0.3f, frame_time * 6.2831855f); - rot = m->f48; - m->f48 = fast_add_rotations(fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], - MOBY(target_moby)->pos.y - m->pos[1]), - 3.14159f); - dir[0] = fast_cos(m->f48) * 2.0f; - dir[1] = fast_sin(m->f48) * 2.0f; + FUN_L00_00258278((char *)m, + &crab_data->heading_turn_step, + ang, + 0.02f, + 0.3f, + frame_time * 6.2831855f); + rot = m->heading_radians; + m->heading_radians = + fast_add_rotations(fast_arc_tan(MOBY(target_moby)->pos.x - m->pos[0], + MOBY(target_moby)->pos.y - m->pos[1]), + 3.14159f); + dir[0] = fast_cos(m->heading_radians) * 2.0f; + dir[1] = fast_sin(m->heading_radians) * 2.0f; dir[2] = 0.0f; - FUN_L00_00258b50(m, &crab_data->iD0, dir, out, 1.0f); - m->f48 = rot; + move_moby_with_ground_and_collision_checks( + m, &crab_data->movement_size_scale_fixed, dir, out, 1.0f); + m->heading_radians = rot; if (see) { - if (fast_dec_timer(&crab_data->i1A8) || + if (fast_dec_timer(&crab_data->behavior_timer_frames) || toxic_crab_back_away_distance_limit_gp < fast_vec_dist(m->pos, target_moby + 0x10)) { int anim; m->state = TOXIC_CRAB_STATE_MELEE_ATTACK; - crab_data->fF4 = frame_time * 5.0f; + crab_data->horizontal_movement_step_limit = frame_time * 5.0f; anim = 7; if (random_integer_below(100) & 1) { anim = 6; @@ -700,30 +733,39 @@ void toxic_crab_update(Moby2E30F8 *m) { float out[4]; float ang; - approach_value(&crab_data->fF4, crab_data->f1A4 * frame_time, frame_time_sq * 5.0f); - ang = fast_arc_tan(crab_data->v170[0] - m->pos[0], crab_data->v170[1] - m->pos[1]); - func_L00_002592B0_b( - (char *)m, ang, 0.02f, 0.3f, frame_time * 6.2831855f, &crab_data->f190); - if (0.87266463f < fast_difference_between_rotations(ang, m->f48)) { - float lim = crab_data->f1A4 * frame_time * 0.25f; - if (lim < crab_data->fF4) { - crab_data->fF4 = lim; + approach_value(&crab_data->horizontal_movement_step_limit, + crab_data->movement_speed * frame_time, + frame_time_sq * 5.0f); + ang = fast_arc_tan(crab_data->home_position_and_heading[0] - m->pos[0], + crab_data->home_position_and_heading[1] - m->pos[1]); + func_L00_002592B0_b((char *)m, + ang, + 0.02f, + 0.3f, + frame_time * 6.2831855f, + &crab_data->heading_turn_step); + if (0.87266463f < fast_difference_between_rotations(ang, m->heading_radians)) { + float lim = crab_data->movement_speed * frame_time * 0.25f; + if (lim < crab_data->horizontal_movement_step_limit) { + crab_data->horizontal_movement_step_limit = lim; } } - dir[0] = fast_cos(m->f48) * 2.0f; - dir[1] = fast_sin(m->f48) * 2.0f; + dir[0] = fast_cos(m->heading_radians) * 2.0f; + dir[1] = fast_sin(m->heading_radians) * 2.0f; dir[2] = 0.0f; - FUN_L00_00258b50(m, &crab_data->iD0, dir, out, 1.0f); - if (fast_vec_dist(m->pos, crab_data->v170) < 1.0f) { + move_moby_with_ground_and_collision_checks( + m, &crab_data->movement_size_scale_fixed, dir, out, 1.0f); + if (fast_vec_dist(m->pos, crab_data->home_position_and_heading) < 1.0f) { m->state = TOXIC_CRAB_STATE_FACE_TRACKED_POSITION; if (m->anim != 1) { blend_moby_animation(m, 1, 0, scale_game_frames(0x14)); } - } else if (crab_data->i164 != 2) { + } else if (crab_data->tracked_target_selection_status != + TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { m->state = TOXIC_CRAB_STATE_PURSUE_TARGET; - crab_data->i1D8 = 0; - qcopy(crab_data->v1C0, m->pos); - crab_data->fF4 = 0.0f; + crab_data->pursuit_movement_blocked = 0; + qcopy(crab_data->pursuit_progress_sample_position, m->pos); + crab_data->horizontal_movement_step_limit = 0.0f; if (m->anim != 3) { blend_moby_animation(m, 3, 0, scale_game_frames(7)); } @@ -732,21 +774,21 @@ void toxic_crab_update(Moby2E30F8 *m) { break; } case TOXIC_CRAB_STATE_HIT_KNOCKBACK: - if (step_moby_motion(m, crab_data->v70) & 0x41) { + if (step_moby_motion(m, crab_data->knockback_motion_xy) & 0x41) { int anim; m->state = TOXIC_CRAB_STATE_MELEE_ATTACK; - crab_data->fF4 = frame_time * 5.0f; + crab_data->horizontal_movement_step_limit = frame_time * 5.0f; anim = 7; if (random_integer_below(100) & 1) { anim = 6; } blend_moby_animation(m, anim, 0, scale_game_frames(6)); - } else if (m->pos[2] < crab_data->v170[2] - 0.2f) { + } else if (m->pos[2] < crab_data->home_position_and_heading[2] - 0.2f) { if (m->anim != 0xE) { blend_moby_animation(m, 0xE, 0, scale_game_frames(6)); } m->state = TOXIC_CRAB_STATE_FALL_TO_DEATH; - crab_data->f78 = crab_data->f78 / 3.0f; + crab_data->vertical_motion_step = crab_data->vertical_motion_step / 3.0f; } break; case TOXIC_CRAB_STATE_FALL_TO_DEATH: { @@ -754,8 +796,8 @@ void toxic_crab_update(Moby2E30F8 *m) { float fall_motion_scratch[4]; int r; - crab_data->f78 = crab_data->f78 - crab_data->f80; - add_vectors(fall_motion_scratch, m->pos, crab_data->v70); + crab_data->vertical_motion_step = crab_data->vertical_motion_step - crab_data->f80; + add_vectors(fall_motion_scratch, m->pos, crab_data->knockback_motion_xy); if (m->pos[2] < probe_ground_height(m->pos, 0, 0.5f)) { int knockback_collision_radius_fixed; float x; @@ -765,20 +807,24 @@ void toxic_crab_update(Moby2E30F8 *m) { mark_moby_for_removal(m); return; } - m->s34 &= 0xEFFF; + m->moby_flags &= 0xEFFF; m->state = TOXIC_CRAB_STATE_DEATH_EFFECTS; knockback_collision_radius_fixed = truncate_float_to_s32(768.0f); x = toxic_crab_death_knockback_gravity_gp * frame_time_sq; crab_data->bAD = 0; - crab_data->i90 = knockback_collision_radius_fixed; + crab_data->knockback_probe_radius_fixed = knockback_collision_radius_fixed; crab_data->f98 = 0.75f; crab_data->i94 = 9; crab_data->f80 = x; - trooper_set_knockback(crab_data->v70, 2.0f, 1.5f); + trooper_set_knockback(crab_data->knockback_motion_xy, 2.0f, 1.5f); crab_data->fC0 = 7.0f; crab_data->fC4 = 13.0f; - func_L00_0025D5B0_b( - m, crab_data->v70, 0xD, 1, 0, fast_add_rotations(m->f48, 3.1415927f)); + func_L00_0025D5B0_b(m, + crab_data->knockback_motion_xy, + 0xD, + 1, + 0, + fast_add_rotations(m->heading_radians, 3.1415927f)); crab_data->b67 = 0xFA; FUN_L00_0025d458(m, (short *)crab_data->q60); FUN_L00_00257470(m, 0, -1); @@ -823,15 +869,15 @@ void toxic_crab_update(Moby2E30F8 *m) { m->state == TOXIC_CRAB_STATE_RETURN_HOME) { float ground_height = probe_ground_height(m->pos, 0, 0.5f); if (ground_height < m->pos[2]) { - crab_data->f78 = crab_data->f78 - crab_data->f80; - if (crab_data->f78 < frame_time * -7.0f) { - crab_data->f78 = frame_time * -7.0f; + crab_data->vertical_motion_step = crab_data->vertical_motion_step - crab_data->f80; + if (crab_data->vertical_motion_step < frame_time * -7.0f) { + crab_data->vertical_motion_step = frame_time * -7.0f; } - m->pos[2] = m->pos[2] + crab_data->f78; + m->pos[2] = m->pos[2] + crab_data->vertical_motion_step; if (m->pos[2] < ground_height) { m->pos[2] = ground_height; } - if (ground_height < crab_data->v170[2] - 2.0f) { + if (ground_height < crab_data->home_position_and_heading[2] - 2.0f) { if (m->anim != 0xE) { blend_moby_animation(m, 0xE, 0, scale_game_frames(6)); } @@ -971,9 +1017,9 @@ typedef struct D_2E52B0 { char p14[0xC]; float f20; char p24[2]; - short h26; + short hit_reaction_suppression_timer_frames; char p28[0x10]; - int f38; + int target_range_boost_pending; char p3C[0x24]; char a60[7]; unsigned char b67; @@ -981,10 +1027,10 @@ typedef struct D_2E52B0 { float a70[4]; float f80; char p84[4]; - float f88; - float f8C; + float knockback_xy_scale; + float knockback_z_scale; int f90; - int f94; + int knockback_motion_flags; float f98; char p9C[0x11]; unsigned char bAD; @@ -994,17 +1040,17 @@ typedef struct D_2E52B0 { char pC8[0x58]; AlignedVec4f a120; char p130[0x30]; - struct Moby *f160; - int f164; + struct Moby *selected_target_moby; + int target_selection_status; char p168[8]; AlignedVec4f a170; char p180[0x20]; float f1A0; char p1A4[8]; - int f1AC; - int f1B0; + int target_range_boost_timer_frames; + int target_path_index; char p1B4[0x20]; - int f1D4; + int target_loss_frames; } D_2E52B0; typedef struct Hit_2E52B0 { @@ -1014,7 +1060,7 @@ typedef struct Hit_2E52B0 { char p24[4]; unsigned char b28; char p29; - unsigned short h2A; + unsigned short hit_source_class; } Hit_2E52B0; #include "rnc/overlay/l10/mobys/toxic_crab_globals.h" @@ -1042,6 +1088,7 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { ARC_ADJUSTED_KNOCKBACK_HIT_RESPONSE = 10, SUPPRESSED_HIT_RESPONSE = 11 }; + Moby *moby = mv; AlignedVec4f vA; AlignedVec4f vB; @@ -1063,30 +1110,30 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { moby->state = TOXIC_CRAB_STATE_ACTIVATE; } } - if (moby_data->f38 != 0) { + if (moby_data->target_range_boost_pending != 0) { func_L10_002E14F8_2E52B0(moby); - moby_data->f1AC = + moby_data->target_range_boost_timer_frames = truncate_float_to_s32(func_001F9878_2E52B0(random_float_between(180.0f, 240.0f))); - moby_data->f38 = 0; + moby_data->target_range_boost_pending = 0; } - fast_dec_timer(&moby_data->f1AC); + fast_dec_timer(&moby_data->target_range_boost_timer_frames); A = 1; B = 0.0f; hit_record = find_moby_hit(moby, 0xB30000, 0); hit_response_code = resolve_moby_hit_response(moby, hit_record, &moby_data->f20, 0, &A, &B, 0, 4); - fast_dec_timer_s16(&moby_data->h26); + fast_dec_timer_s16(&moby_data->hit_reaction_suppression_timer_frames); if ((unsigned int)A >= 2 && moby->state != TOXIC_CRAB_STATE_DEATH_EFFECTS && moby->state != TOXIC_CRAB_STATE_FALL_TO_DEATH) { if (current_level_index == 10 && hit_record != 0 && hit_record->f20 != 0 && hit_record->f20->oclass == 0x31A) { - if (moby_data->f1AC != 0 && item_unlocked[0x11] == 0) { + if (moby_data->target_range_boost_timer_frames != 0 && item_unlocked[0x11] == 0) { item_unlocked[0x11] = 1; allocate_voice_for_bank_entry(1, 0, 0); queue_dialogue_message(0x53D6, -1); } } - if (moby_data->h26 != 0 && hit_record->b28 == 0) { + if (moby_data->hit_reaction_suppression_timer_frames != 0 && hit_record->b28 == 0) { hit_response_code = 11; if (B < 3.0f) B = 0.0f; @@ -1097,7 +1144,7 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { if (2.0f < B) B = 2.0f; } - if (hit_record->h2A == moby->oclass) { + if (hit_record->hit_source_class == moby->oclass) { B = 0.0f; hit_response_code = 11; } @@ -1108,7 +1155,7 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { hit_response_code = 11; } } - if (hit_record->h2A == 0x47) { + if (hit_record->hit_source_class == 0x47) { *(u128_2E52B0 *)&vA = *(u128_2E52B0 *)(((char *)&hero) + 0x80); *(u128_2E52B0 *)&vB = *(u128_2E52B0 *)((AlignedVec4f *)&moby->pos); vA.z += 1.0f; @@ -1140,7 +1187,7 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { func_L10_002E14F8_2E52B0(moby); moby_data->f90 = truncate_float_to_s32(768.0f); moby_data->f98 = 0.75f; - moby_data->f94 = 9; + moby_data->knockback_motion_flags = 9; moby_data->bAD = 0; fx = fast_arc_tan(hit_record->pos.x, hit_record->pos.y); switch (hit_response_code) { @@ -1151,13 +1198,14 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { case HIT_DIRECTED_KNOCKBACK_HIT_RESPONSE: case ARC_ADJUSTED_KNOCKBACK_HIT_RESPONSE: moby->state = TOXIC_CRAB_STATE_HIT_KNOCKBACK; - moby_data->h26 = scale_game_frames(60); + moby_data->hit_reaction_suppression_timer_frames = scale_game_frames(60); moby_data->f80 = toxic_crab_hit_knockback_gravity_gp * D_0015ED70; trooper_set_knockback(moby_data->a70, 0.5f, 0.5f); moby_data->fC0 = 8.0f; moby_data->fC4 = 10.0f; *(u128_2E52B0 *)&vA = *(u128_2E52B0 *)&hit_record->pos; - trooper_knockback_arc(&vA, &fx, &moby_data->f88, &moby_data->f8C); + trooper_knockback_arc( + &vA, &fx, &moby_data->knockback_xy_scale, &moby_data->knockback_z_scale); func_L00_0025D5B0_2E52B0(moby, moby_data->a70, 9, 1, 0, fx); moby_data->b67 = 0xFA; trooper_anim_update(moby, moby_data->a60); @@ -1166,14 +1214,15 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { case VEHICLE_DEPENDENT_KNOCKBACK_HIT_RESPONSE: { float knockback_strength; moby->state = TOXIC_CRAB_STATE_HIT_KNOCKBACK; - moby_data->h26 = scale_game_frames(60); + moby_data->hit_reaction_suppression_timer_frames = scale_game_frames(60); moby_data->f80 = toxic_crab_hit_knockback_gravity_gp * D_0015ED70; knockback_strength = ((Hero *)(((char *)&hero)))->vehicle_mode == 1 ? 1.0f : 3.0f; trooper_set_knockback(moby_data->a70, knockback_strength, 0.5f); moby_data->fC0 = 3.5f; moby_data->fC4 = 7.0f; *(u128_2E52B0 *)&vA = *(u128_2E52B0 *)&hit_record->pos; - trooper_knockback_arc(&vA, &fx, &moby_data->f88, &moby_data->f8C); + trooper_knockback_arc( + &vA, &fx, &moby_data->knockback_xy_scale, &moby_data->knockback_z_scale); func_L00_0025D5B0_2E52B0( moby, moby_data->a70, 9, 1, 0, fast_arc_tan(hit_record->pos.x, hit_record->pos.y)); moby_data->b67 = 0xFA; @@ -1193,10 +1242,10 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { moby->hit_slot = 0xFF; trooper_anim_finish(moby, moby_data->a60); if ((unsigned char)(moby->state - 10) < 3) { - moby_data->f1D4 = 0; + moby_data->target_loss_frames = 0; return; } - if (moby_data->f1AC != 0) { + if (moby_data->target_range_boost_timer_frames != 0) { moby_data->f1A0 = D_L10_00161E40_gp + 6.0f; } else if (moby->state == TOXIC_CRAB_STATE_WAIT_FOR_ACTIVATION) { if (moby == ((Moby *)((Hero *)(((char *)&hero)))->unk240) || @@ -1210,28 +1259,29 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { } else { moby_data->f1A0 = D_L10_00161E40_gp; } - if (moby_data->f1AC != 0) { + if (moby_data->target_range_boost_timer_frames != 0) { func_L00_00260D30_2E52B0(moby, &moby_data->a120, moby_data->f1A0); if (moby_data->f1A0 < vector_distance_xy(&moby_data->a170, &moby_data->a120) || 3.0f < absolute_float(moby->pos.z - moby_data->a120.z)) { - moby_data->f164 = 2; + moby_data->target_selection_status = TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE; } } else if (moby_data->f1A0 < vector_distance_xy(&moby_data->a170, &moby_data->a120) || 3.0f < absolute_float(moby->pos.z - moby_data->a120.z)) { func_L00_00260D30_2E52B0(moby, &moby_data->a120, moby_data->f1A0); - moby_data->f164 = 2; + moby_data->target_selection_status = TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE; } else { activate_effect_l08(moby_data->f1A0, moby, &moby_data->a120, 0, 0, - l10_paths[moby_data->f1B0]->points, - l10_paths[moby_data->f1B0]->count); + l10_paths[moby_data->target_path_index]->points, + l10_paths[moby_data->target_path_index]->count); } - if (moby->state != TOXIC_CRAB_STATE_WAIT_FOR_ACTIVATION && moby_data->f164 == 2) { - moby_data->f1D4++; - if (scale_game_frames(300) < moby_data->f1D4) { + if (moby->state != TOXIC_CRAB_STATE_WAIT_FOR_ACTIVATION && + moby_data->target_selection_status == TOXIC_CRAB_TARGET_SELECTION_UNAVAILABLE) { + moby_data->target_loss_frames++; + if (scale_game_frames(300) < moby_data->target_loss_frames) { if (1.0f < fast_vec_dist(&moby->pos, &moby_data->a170)) { moby->state = TOXIC_CRAB_STATE_RETURN_HOME; if (moby->prev_seq != 4) @@ -1243,10 +1293,10 @@ void update_toxic_crab_hit_reactions_and_targeting(void *mv) { } } } else { - moby_data->f1D4 = 0; + moby_data->target_loss_frames = 0; } - if (moby_data->f160 == 0) - moby_data->f160 = ((Hero *)(((char *)&hero)))->moby; + if (moby_data->selected_target_moby == 0) + moby_data->selected_target_moby = ((Hero *)(((char *)&hero)))->moby; } extern float toxic_crab_group_approach_angle_limit_degrees_gp __asm__("D_L10_00161E48") diff --git a/src/overlays/l11/hero/hero_set_state.c b/src/overlays/l11/hero/hero_set_state.c index 81dc5552f8..847dd324ad 100644 --- a/src/overlays/l11/hero/hero_set_state.c +++ b/src/overlays/l11/hero/hero_set_state.c @@ -65,17 +65,19 @@ extern int hero_set_state(int, int) __asm__("FUN_L11_0024db50"); extern char level_11_water_surface_jump_velocity_keys[] __asm__("D_L11_0017C960"); extern char level_11_trail_jump_velocity_keys[] __asm__("D_L11_0017C920"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int animation_update_mode) { int previous_state_step; char *moby; int old20A7; { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L11_0015F5C4 == 2 || D_L11_0015F5C4 == 6) && b != 2) + if ((D_L11_0015F5C4 == 2 || D_L11_0015F5C4 == 6) && + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; @@ -147,7 +149,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (animation_update_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -163,7 +165,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (animation_update_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -189,7 +191,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -200,7 +202,7 @@ int hero_set_state(int requested_state, int b) { p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.momentum, frame_time * 3.5f); - if (b) + if (animation_update_mode) set_hero_animation(0x7C, 0, (float)scale_game_frames(0xC)); break; } @@ -216,7 +218,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->unk6A0 = 0; p->unk690 = p->motion.pos.f[2] - p->unk69C; - if (b) + if (animation_update_mode) set_hero_animation(0x74, 0, (float)scale_game_frames(0xB)); break; } @@ -238,7 +240,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->unk8E0 = 0; n = scale_game_frames(0xC); - if (b) + if (animation_update_mode) set_hero_animation(0x3B, 0, (float)n); } break; @@ -259,7 +261,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0xB); if (p->state.prev == 0x33) n = scale_game_frames(0xF); - if (b) + if (animation_update_mode) set_hero_animation(0x3D, 0, (float)n); break; } @@ -274,7 +276,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0x23); if (p->state.prev == 0x35) n = -2; - if (b) + if (animation_update_mode) set_hero_animation(0x3C, 0, (float)n); break; } @@ -342,7 +344,7 @@ int hero_set_state(int requested_state, int b) { s->motion.momentum.f[2] = 0.0f; FUN_L00_0025f730(&s->motion.momentum, frame_time * 5.5f); s->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x16)); } break; @@ -366,7 +368,7 @@ int hero_set_state(int requested_state, int b) { int t = scale_game_frames(0x4D); struct Hero *q = &hero; q->invulnerable_frames = t; - if (b) { + if (animation_update_mode) { if (q->state.current == 0x75) { set_hero_animation(0x70, 3, -3.0f); } else { @@ -390,7 +392,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->drown_sink_speed = 0; p->unk698 = scale_game_frames(0x2D); p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x65, 0, (float)scale_game_frames(0x11)); break; } @@ -432,7 +434,7 @@ int hero_set_state(int requested_state, int b) { char *v = (char *)&hero.motion.momentum; qcopy(v, v - 0x40); } - if (b) + if (animation_update_mode) set_hero_animation(0x5F, 0, (float)scale_game_frames(0xA)); break; } @@ -443,7 +445,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x80, 0, (float)scale_game_frames(0xA)); break; } @@ -451,7 +453,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x46, 0, (float)scale_game_frames(8)); break; } @@ -459,7 +461,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x47, 0, (float)scale_game_frames(8)); break; } @@ -467,7 +469,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x48, 0, (float)scale_game_frames(8)); break; } @@ -479,7 +481,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L11_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = get_hero_idle_animation_index(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && animation_update_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -568,7 +570,7 @@ int hero_set_state(int requested_state, int b) { scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (animation_update_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L11_0015F6D8[v->state.step], (float)n); } @@ -584,7 +586,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (animation_update_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -614,7 +616,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (animation_update_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -631,7 +633,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (animation_update_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -658,7 +660,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (animation_update_mode) { if (q->moby->seq == get_hero_idle_animation_index(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -685,7 +687,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (animation_update_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -698,7 +700,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -710,7 +712,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -766,7 +768,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (animation_update_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -782,7 +784,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -794,7 +796,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -809,7 +811,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (animation_update_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -824,7 +826,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -833,7 +835,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -842,7 +844,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -851,7 +853,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -875,7 +877,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { if (q->vehicle_mode == 3) { set_hero_animation(6, 0, (float)scale_game_frames(8)); return 1; @@ -901,7 +903,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)state_81_animation_timing_override); } break; @@ -916,7 +918,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)animation_timing_override); } break; @@ -1225,7 +1227,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (animation_update_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1315,7 +1317,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (animation_update_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1352,7 +1354,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (animation_update_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1367,7 +1369,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (animation_update_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1398,7 +1400,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (animation_update_mode) { char *m; int j = 0; int n; @@ -1429,7 +1431,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (animation_update_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1448,7 +1450,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (animation_update_mode) { char *m; HeroTableRow2C *e = &D_L11_0017C628[p->attack_record]; int k = e->kind; @@ -1469,7 +1471,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1491,7 +1493,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = level_11_hero_animation_blend_curves[q->anim_blend_curve] [(q->anim_blend_step)++]; @@ -1503,7 +1505,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1511,7 +1513,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (animation_update_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1522,7 +1524,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1533,7 +1535,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1550,7 +1552,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (animation_update_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1560,7 +1562,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1573,7 +1575,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = level_11_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1594,7 +1596,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1646,7 +1648,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } @@ -1657,7 +1659,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -1667,7 +1669,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (animation_update_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } diff --git a/src/overlays/l11/hero/update_hero_motion_by_state.c b/src/overlays/l11/hero/update_hero_motion_by_state.c index 57d5b67c3b..9eb7a8745a 100644 --- a/src/overlays/l11/hero/update_hero_motion_by_state.c +++ b/src/overlays/l11/hero/update_hero_motion_by_state.c @@ -231,7 +231,7 @@ struct PlayerJointTable { }; extern s32 D_L11_0015F688 __attribute__((sda)); -s32 D_L11_0015F68C = 0; +s32 l11_look_timer_completion_count __asm__("D_L11_0015F68C") = 0; extern u8 D_L11_001677D8[]; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); @@ -276,7 +276,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -368,7 +368,7 @@ void update_hero_motion_by_state(void) __asm__("FUN_L11_00246b70"); void update_hero_motion_by_state(void) { struct MobyView *moby = MV(hero.moby); - s32 sub = hero.state.step; + s32 initial_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 vector_and_hit_descriptor_head_scratch; @@ -422,7 +422,7 @@ void update_hero_motion_by_state(void) { D_L11_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L11_0015F68C++; + l11_look_timer_completion_count++; } } } @@ -799,11 +799,11 @@ void update_hero_motion_by_state(void) { vector_and_hit_descriptor_head_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -2388,7 +2388,7 @@ void update_hero_motion_by_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (initial_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l11/mobys/bob.c b/src/overlays/l11/mobys/bob.c index 7451524f82..26bd478658 100644 --- a/src/overlays/l11/mobys/bob.c +++ b/src/overlays/l11/mobys/bob.c @@ -25,7 +25,7 @@ typedef struct { char pad00[4]; short h04; char pad06[6]; - float f0C; + float dialogue_activation_threshold; char pad10[0x30]; int region; char pad44[0x2C]; @@ -77,7 +77,7 @@ void bob_update(WatcherMoby *moby) { moby->state = BOB_CHECK_DIALOGUE; } initialize_npc_dialogue(moby, moby_vars); - moby_vars->f0C = 3.7f; + moby_vars->dialogue_activation_threshold = 3.7f; break; case BOB_CHECK_DIALOGUE: if (is_point_inside_clip_volume(hero.motion.pos.f, moby_vars->region)) { diff --git a/src/overlays/l11/mobys/child_sets_controller.c b/src/overlays/l11/mobys/child_sets_controller.c index 5fd7163bdf..713f738e9d 100644 --- a/src/overlays/l11/mobys/child_sets_controller.c +++ b/src/overlays/l11/mobys/child_sets_controller.c @@ -31,20 +31,20 @@ struct Moby *l11_three_per_side_child_mobys[6] __asm__("D_L11_001DA710") = {0}; extern struct Moby *D_L11_00161F10[] MACRO_ADDR; extern struct Moby *D_L11_00161F20[] MACRO_ADDR; extern struct Moby *D_L11_00161F30[] MACRO_ADDR; -float D_L11_00161EC4 = 0; +float l11_child_set_fold_rotation_x_progress __asm__("D_L11_00161EC4") = 0; float D_L11_00161EC8 = 0; -float D_L11_00161ECC = 0; +float l11_even_source_child_rotation_x_progress __asm__("D_L11_00161ECC") = 0; float D_L11_00161ED0 = 0; -float D_L11_00161ED4 = 0; -float D_L11_00161ED8 = 0; -float D_L11_00161EDC = 0; -float D_L11_00161EE0 = 0; -float D_L11_00161EE4 = 0; -float D_L11_00161EE8 = 0; -float D_L11_00161EEC = 0; -float D_L11_00161EF0 = 0; -float D_L11_00161EF4 = 0; -float D_L11_00161EF8 = 0; +float l11_even_attached_child_rotation_y_progress __asm__("D_L11_00161ED4") = 0; +float l11_final_child_axis0_spacing_progress __asm__("D_L11_00161ED8") = 0; +float l11_child_sets_camera_pose_blend_progress __asm__("D_L11_00161EDC") = 0; +float l11_child_set_fold_rotation_x_progress_step __asm__("D_L11_00161EE0") = 0; +float l11_odd_source_child_rotation_x_progress_step __asm__("D_L11_00161EE4") = 0; +float l11_even_source_child_rotation_x_progress_step __asm__("D_L11_00161EE8") = 0; +float l11_odd_attached_child_rotation_y_progress_step __asm__("D_L11_00161EEC") = 0; +float l11_even_attached_child_rotation_y_progress_step __asm__("D_L11_00161EF0") = 0; +float l11_final_child_axis0_spacing_progress_step __asm__("D_L11_00161EF4") = 0; +float l11_child_sets_camera_pose_blend_progress_step __asm__("D_L11_00161EF8") = 0; extern float D_L11_0015F3FC; extern int D_L11_0015FFD8_c788 __asm__("D_L11_0015FFD8"); @@ -85,13 +85,13 @@ void child_sets_controller_update(struct Moby *child_sets_controller) { child_sets_controller->visible = 0; child_sets_controller->collision = 0; child_sets_controller->flags |= 1; - D_L11_00161EC4 = 0.0f; + l11_child_set_fold_rotation_x_progress = 0.0f; D_L11_00161EC8 = 0.0f; - D_L11_00161ECC = 0.0f; + l11_even_source_child_rotation_x_progress = 0.0f; D_L11_00161ED0 = 0.0f; - D_L11_00161ED4 = 0.0f; - D_L11_00161ED8 = 0.0f; - D_L11_00161EDC = 0.0f; + l11_even_attached_child_rotation_y_progress = 0.0f; + l11_final_child_axis0_spacing_progress = 0.0f; + l11_child_sets_camera_pose_blend_progress = 0.0f; child_sets_controller->command = 0; for (i = 0; i < 6; i++) { l11_three_per_side_child_mobys[i] = create_moby(0x480); @@ -197,27 +197,31 @@ void child_sets_controller_update(struct Moby *child_sets_controller) { } break; case CHILD_SETS_STATE_UNFOLD_AND_BLEND_POSES: - if (D_L11_00161EC4 < 1.0f) { - advance_accelerated_scalar( - &D_L11_00161EC4, &D_L11_00161EE0, 1.0f, frame_time_sq, frame_time_sq, frame_time); + if (l11_child_set_fold_rotation_x_progress < 1.0f) { + advance_accelerated_scalar(&l11_child_set_fold_rotation_x_progress, + &l11_child_set_fold_rotation_x_progress_step, + 1.0f, + frame_time_sq, + frame_time_sq, + frame_time); } - if (0.9f < D_L11_00161EC4 && D_L11_00161EC8 == 0.0f) { + if (0.9f < l11_child_set_fold_rotation_x_progress && D_L11_00161EC8 == 0.0f) { allocate_voice_for_target_entry(1, 0, child_sets_controller); } - if (0.9f < D_L11_00161EC4 && D_L11_00161EC8 < 1.0f) { + if (0.9f < l11_child_set_fold_rotation_x_progress && D_L11_00161EC8 < 1.0f) { advance_accelerated_scalar(&D_L11_00161EC8, - &D_L11_00161EE4, + &l11_odd_source_child_rotation_x_progress_step, 1.0f, frame_time_sq + frame_time_sq, frame_time_sq + frame_time_sq, frame_time + frame_time); } - if (0.5f < D_L11_00161EC8 && D_L11_00161ECC == 0.0f) { + if (0.5f < D_L11_00161EC8 && l11_even_source_child_rotation_x_progress == 0.0f) { allocate_voice_for_target_entry(1, 0, child_sets_controller); } - if (0.5f < D_L11_00161EC8 && D_L11_00161ECC < 1.0f) { - advance_accelerated_scalar(&D_L11_00161ECC, - &D_L11_00161EE8, + if (0.5f < D_L11_00161EC8 && l11_even_source_child_rotation_x_progress < 1.0f) { + advance_accelerated_scalar(&l11_even_source_child_rotation_x_progress, + &l11_even_source_child_rotation_x_progress_step, 1.0f, frame_time_sq + frame_time_sq, frame_time_sq + frame_time_sq, @@ -225,23 +229,25 @@ void child_sets_controller_update(struct Moby *child_sets_controller) { } if (1.0f <= D_L11_00161EC8 && D_L11_00161ED0 < 1.0f) { advance_accelerated_scalar(&D_L11_00161ED0, - &D_L11_00161EEC, + &l11_odd_attached_child_rotation_y_progress_step, 1.0f, frame_time_sq + frame_time_sq, frame_time_sq + frame_time_sq, frame_time + frame_time); } - if (1.0f <= D_L11_00161ECC && D_L11_00161ED4 < 1.0f) { - advance_accelerated_scalar(&D_L11_00161ED4, - &D_L11_00161EF0, + if (1.0f <= l11_even_source_child_rotation_x_progress && + l11_even_attached_child_rotation_y_progress < 1.0f) { + advance_accelerated_scalar(&l11_even_attached_child_rotation_y_progress, + &l11_even_attached_child_rotation_y_progress_step, 1.0f, frame_time_sq + frame_time_sq, frame_time_sq + frame_time_sq, frame_time + frame_time); } - if (0.9f < D_L11_00161ED4 && D_L11_00161ED8 < 1.0f) { - advance_accelerated_scalar(&D_L11_00161ED8, - &D_L11_00161EF4, + if (0.9f < l11_even_attached_child_rotation_y_progress && + l11_final_child_axis0_spacing_progress < 1.0f) { + advance_accelerated_scalar(&l11_final_child_axis0_spacing_progress, + &l11_final_child_axis0_spacing_progress_step, 1.0f, frame_time_sq + frame_time_sq, frame_time_sq * 4.0f, @@ -251,14 +257,14 @@ void child_sets_controller_update(struct Moby *child_sets_controller) { if (alternate_item_available[0x56] != 0 && ((u32)pad_pressed_lui) != 0) { child_sets_controller->command = 1; } - if (D_L11_00161ED8 < 1.0f && child_sets_controller->command == 0) { + if (l11_final_child_axis0_spacing_progress < 1.0f && child_sets_controller->command == 0) { approach_value(&child_sets_controller_vars->fade, 0.0f, frame_time * 4.0f); } else { approach_value(&child_sets_controller_vars->fade, 1.0f, frame_time * 4.0f); } D_L11_0015F3FC = child_sets_controller_vars->fade; - advance_accelerated_scalar(&D_L11_00161EDC, - &D_L11_00161EF8, + advance_accelerated_scalar(&l11_child_sets_camera_pose_blend_progress, + &l11_child_sets_camera_pose_blend_progress_step, 1.0f, frame_time_sq * 0.2f, frame_time_sq * 0.2f, @@ -266,20 +272,20 @@ void child_sets_controller_update(struct Moby *child_sets_controller) { lerp_vector(&pos, (char *)((int)l11_cuboids + (child_sets_controller_vars->from << 7)) + 0x30, (char *)((int)l11_cuboids + (child_sets_controller_vars->to << 7)) + 0x30, - D_L11_00161EDC); + l11_child_sets_camera_pose_blend_progress); lerp_vector(&rot, (char *)((int)l11_cuboids + (child_sets_controller_vars->from << 7)) + 0x70, (char *)((int)l11_cuboids + (child_sets_controller_vars->to << 7)) + 0x70, - D_L11_00161EDC); + l11_child_sets_camera_pose_blend_progress); set_camera_position(&pos); set_camera_rotation(&rot); if (1.0f <= child_sets_controller_vars->fade) { - D_L11_00161EC4 = 1.0f; + l11_child_set_fold_rotation_x_progress = 1.0f; D_L11_00161EC8 = 1.0f; - D_L11_00161ECC = 1.0f; + l11_even_source_child_rotation_x_progress = 1.0f; D_L11_00161ED0 = 1.0f; - D_L11_00161ED4 = 1.0f; - D_L11_00161ED8 = 1.0f; + l11_even_attached_child_rotation_y_progress = 1.0f; + l11_final_child_axis0_spacing_progress = 1.0f; update_child_set_poses(child_sets_controller); child_sets_controller->state = CHILD_SETS_STATE_FADE_AFTER_HERO_HANDOFF; jet_end_mount(3); @@ -329,8 +335,10 @@ void update_child_set_poses(struct Moby *parent_moby) { for (i = 0; i < 6; i++) { int s = (i >= 3) ? 1 : -1; float ang = - (float)(i % 3) * 0.5235988f - - (child_set_fold_rotation_x_degrees_gp * (1.0f - D_L11_00161EC4) + 30.0f) * 0.017453292f; + (float)(i % 3) * 0.5235988f - (child_set_fold_rotation_x_degrees_gp * + (1.0f - l11_child_set_fold_rotation_x_progress) + + 30.0f) * + 0.017453292f; qcopy_nc(&l11_three_per_side_child_mobys[i]->rot, &parent_moby->rot); l11_three_per_side_child_mobys[i]->rot.z = fast_add_rotations(l11_three_per_side_child_mobys[i]->rot.z, (float)s * 1.5707964f); @@ -358,8 +366,10 @@ void update_child_set_poses(struct Moby *parent_moby) { int s = (j >= 2) ? 1 : -1; int k = (j & 1) ? -1 : 1; float ang = - (float)(j % 2) * 0.5235988f - - (child_set_fold_rotation_x_degrees_gp * (1.0f - D_L11_00161EC4) + 15.0f) * 0.017453292f; + (float)(j % 2) * 0.5235988f - (child_set_fold_rotation_x_degrees_gp * + (1.0f - l11_child_set_fold_rotation_x_progress) + + 15.0f) * + 0.017453292f; float r; qcopy_nc(&D_L11_00161F20[j]->rot, &parent_moby->rot); D_L11_00161F20[j]->rot.z = @@ -381,7 +391,7 @@ void update_child_set_poses(struct Moby *parent_moby) { &child_position_scratch, &child_position_scratch, &child_placement_vector_scratch); qcopy(&D_L11_00161F20[j]->pos, &child_position_scratch); r = fast_subtract_rotations((float)k * 0.2617994f, 1.3962634f); - r = r * ((k == -1) ? D_L11_00161EC8 : D_L11_00161ECC); + r = r * ((k == -1) ? D_L11_00161EC8 : l11_even_source_child_rotation_x_progress); r = fast_add_rotations(r, 1.3962634f); D_L11_00161F20[j]->rot.x = fast_add_rotations(D_L11_00161F20[j]->rot.x, r); update_entity(D_L11_00161F20[j]); @@ -402,7 +412,9 @@ void update_child_set_poses(struct Moby *parent_moby) { &child_placement_vector_scratch); qcopy(&D_L11_00161F30[attached_child_index]->rot, &D_L11_00161F20[attached_child_index]->rot); - rotation_y_progress = (attached_child_index & 1) ? D_L11_00161ED0 : D_L11_00161ED4; + rotation_y_progress = (attached_child_index & 1) + ? D_L11_00161ED0 + : l11_even_attached_child_rotation_y_progress; D_L11_00161F30[attached_child_index]->rot.y = fast_add_rotations( D_L11_00161F30[attached_child_index]->rot.y, -(attached_child_rotation_y_degrees_gp * 0.017453292f) * rotation_y_progress); @@ -415,8 +427,8 @@ void update_child_set_poses(struct Moby *parent_moby) { if (final_child_index >= 2) { sgn = 1.0f; } - signed_axis0_offset = - (float)(final_child_index & 1) * 7.5f + 3.75f + (1.0f - D_L11_00161ED8) * 13.25f; + signed_axis0_offset = (float)(final_child_index & 1) * 7.5f + 3.75f + + (1.0f - l11_final_child_axis0_spacing_progress) * 13.25f; if (20.0f < signed_axis0_offset) { signed_axis0_offset = 20.0f; } diff --git a/src/overlays/l11/mobys/fred_pokitaru.c b/src/overlays/l11/mobys/fred_pokitaru.c index 837730e27d..54b5be0fcf 100644 --- a/src/overlays/l11/mobys/fred_pokitaru.c +++ b/src/overlays/l11/mobys/fred_pokitaru.c @@ -41,9 +41,9 @@ extern unsigned char D_0014C050[]; /* Pokitaru sentry pvars (class of fred_pokitaru_update). */ struct PokSentryVars { char pad00[4]; - short h04; + short dialogue_result; char pad06[6]; - float f0C; + float dialogue_activation_threshold; char pad10[0x38]; int slot; char pad4C[4]; @@ -94,7 +94,7 @@ void fred_pokitaru_update(struct Moby *moby) { return; } initialize_npc_dialogue(moby, moby_vars); - moby_vars->f0C = 4.0f; + moby_vars->dialogue_activation_threshold = 4.0f; break; case FRED_POKITARU_CHECK_DIALOGUE: if (update_npc_dialogue(moby, moby_vars)) { @@ -126,7 +126,7 @@ void fred_pokitaru_update(struct Moby *moby) { case FRED_POKITARU_WAIT_FOR_DIALOGUE_END: if (D_L11_0015F5C4 != 2) { moby->state = FRED_POKITARU_CHECK_DIALOGUE; - if (moby_vars->h04 == 2) { + if (moby_vars->dialogue_result == 2) { alternate_item_available[1] = 0; discount_purchase_pricing[0] = 1; D_0013D50B = 1; diff --git a/src/overlays/l11/mobys/jet_fighter.c b/src/overlays/l11/mobys/jet_fighter.c index 6c50ddd2f2..18982c3264 100644 --- a/src/overlays/l11/mobys/jet_fighter.c +++ b/src/overlays/l11/mobys/jet_fighter.c @@ -614,7 +614,7 @@ extern f32 D_L11_00162090_gp __asm__("D_L11_00162090") __attribute__(( extern unsigned char D_0013A4E0[]; extern short ship_shot_direction_base_scale_gp __asm__("D_L11_0016205C") __attribute__((sda)); -int D_L11_00162060 = 4; +int l11_ship_shot_cooldown_frames __asm__("D_L11_00162060") = 4; void update_ship_shot_firing_and_reticle(struct Moby *moby, char *ship_vars, float aim_azimuth, @@ -642,7 +642,7 @@ void update_ship_shot_firing_and_reticle(struct Moby *moby, moby_point_position(moby, 3 + (ship_vars[0x61] & 1), projectile_spawn_position); fast_vec_add(projectile_spawn_position, projectile_spawn_position, muzzle_forward_offset); spawn_fighter_jet_missile(moby, shot_direction, projectile_spawn_position, 200.0f, -1.0f); - *(int *)(ship_vars + 0x80) = D_L11_00162060; + *(int *)(ship_vars + 0x80) = l11_ship_shot_cooldown_frames; ship_vars[0x61] ^= 1; allocate_voice_for_target_entry(3, 0, (int)moby); } @@ -659,7 +659,7 @@ void update_ship_shot_firing_and_reticle(struct Moby *moby, extern int spawn_ship_rocket(void *, void *, int, void *, float, int) __asm__("FUN_L11_00309378"); extern short ship_projectile_base_scale_gp __asm__("D_L11_00162064") __attribute__((sda)); -int D_L11_00162068 = 30; +int l11_ship_projectile_cooldown_frames __asm__("D_L11_00162068") = 30; void try_fire_ship_projectile(struct Moby *moby, char *ship_vars) __asm__("FUN_L11_003126f8"); void try_fire_ship_projectile(struct Moby *moby, char *ship_vars) { @@ -685,7 +685,7 @@ void try_fire_ship_projectile(struct Moby *moby, char *ship_vars) { scale_game_frames(300))) { allocate_voice_for_target_entry(2, 0, (int)moby); hero.ship_ammo -= 1; - *(int *)(ship_vars + 0x84) = D_L11_00162068; + *(int *)(ship_vars + 0x84) = l11_ship_projectile_cooldown_frames; } } } @@ -721,28 +721,28 @@ typedef struct { float f6C; float f70; char pad74[0xC]; - int i80; - int i84; + int shot_cooldown_frames; + int rocket_cooldown_frames; char pad88[8]; float f90, f94, f98, f9C; float fA0, fA4, fA8, fAC; float fB0, fB4, fB8, fBC; float fC0, fC4, fC8, fCC; float fD0, fD4, fD8; - int iDC; + int collision_damage_cooldown_timer_frames; char padE0[8]; - short sE8; - short sEA; + short active_listed_moby_count; + short visible_listed_moby_count; char padEC[4]; float shown_hp; int hp_bar_fill; - int iF8; + int respawn_or_exit_delay_timer_frames; int exit_path; int exit_path2; char pad104[8]; - int i10C; + int blarg_ship_list_index; char pad110[4]; - int i114; + int blarg_ship_activation_timer_frames; int i118; char pad11C[0x10]; short voice; @@ -753,9 +753,9 @@ typedef struct { extern unsigned short D_00141C10 NOT_SDA; extern float D_L11_0016D4F0 NOT_SDA; extern char jet_fighter_collision_query_result[] __asm__("D_L11_00174840"); -int D_L11_00161FF0 = 120; -int D_L11_00162004 = 5; -int D_L11_0016214C = 10; +int l11_jet_fighter_startup_acceleration_frame_threshold __asm__("D_L11_00161FF0") = 120; +int l11_jet_fighter_steering_enable_frame_threshold __asm__("D_L11_00162004") = 5; +int l11_jet_fighter_collision_damage_cooldown_frames __asm__("D_L11_0016214C") = 10; #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_15.h" @@ -797,23 +797,31 @@ extern float l11_jet_fighter_vertical_steering_spring_damping_coefficient __asm_ #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_9.h" -extern float D_L11_001620BC __attribute__((sda)); -extern float D_L11_001620C0 __attribute__((sda)); +extern float l11_jet_fighter_rotation_x_spring_error_gain __asm__("D_L11_001620BC") + __attribute__((sda)); +extern float l11_jet_fighter_rotation_x_spring_damping_coefficient __asm__("D_L11_001620C0") + __attribute__((sda)); #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_8.h" -extern float D_L11_001620E0 __attribute__((sda)); -extern float D_L11_001620E4 __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_x_spring_error_gain __asm__("D_L11_001620E0") + __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_x_spring_damping_coefficient __asm__("D_L11_001620E4") + __attribute__((sda)); #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_7.h" -extern float D_L11_001620EC __attribute__((sda)); -extern float D_L11_001620F0 __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_y_spring_error_gain __asm__("D_L11_001620EC") + __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_y_spring_damping_coefficient __asm__("D_L11_001620F0") + __attribute__((sda)); #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_6.h" -extern float D_L11_001620F8 __attribute__((sda)); -extern float D_L11_001620FC __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_z_spring_error_gain __asm__("D_L11_001620F8") + __attribute__((sda)); +extern float l11_jet_fighter_camera_rotation_z_spring_damping_coefficient __asm__("D_L11_001620FC") + __attribute__((sda)); #include "rnc/overlay/l11/mobys/jet_fighter_data/update_player_ship_flight_5.h" @@ -915,7 +923,7 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) ship_vars->sel = 0; } } - if (D_L11_00161FF0 < ship_vars->count) { + if (l11_jet_fighter_startup_acceleration_frame_threshold < ship_vars->count) { pad = &controller_state; if (pad->raw_held & 0x40) { float accelerated_speed; @@ -954,7 +962,7 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) ship_vars->count += 1; } - if (D_L11_00162004 < ship_vars->count) { + if (l11_jet_fighter_steering_enable_frame_threshold < ship_vars->count) { hero_input_source = &hero; x = hero_input_source->stick_x; y = hero_input_source->stick_y; @@ -986,8 +994,8 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) &ship_vars->f98, 0, ship_vars->f6C * D_L11_0016207C, - D_L11_001620BC, - D_L11_001620C0, + l11_jet_fighter_rotation_x_spring_error_gain, + l11_jet_fighter_rotation_x_spring_damping_coefficient, jet_fighter_rotation_x_snap_threshold_scale_gp); ship_vars->f34 = fast_subtract_rotations(ship_vars->f34, ship_vars->f70 * D_L11_00162014); if (ship_vars->f34 > 1.3962634f) { @@ -1066,22 +1074,22 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) &ship_vars->fA0, 0, wr.e[1].v[0], - D_L11_001620E0, - D_L11_001620E4, + l11_jet_fighter_camera_rotation_x_spring_error_gain, + l11_jet_fighter_camera_rotation_x_spring_damping_coefficient, jet_fighter_camera_rotation_x_snap_threshold_scale_gp); spring_angle(&ship_vars->f24, &ship_vars->fA4, 0, wr.e[1].v[1], - D_L11_001620EC, - D_L11_001620F0, + l11_jet_fighter_camera_rotation_y_spring_error_gain, + l11_jet_fighter_camera_rotation_y_spring_damping_coefficient, jet_fighter_camera_rotation_y_snap_threshold_scale_gp); spring_angle(&ship_vars->f28, &ship_vars->fA8, 0, wr.e[1].v[2], - D_L11_001620F8, - D_L11_001620FC, + l11_jet_fighter_camera_rotation_z_spring_error_gain, + l11_jet_fighter_camera_rotation_z_spring_damping_coefficient, jet_fighter_camera_rotation_z_snap_threshold_scale_gp); } camera_rotation[0] = ship_vars->f20; @@ -1130,7 +1138,7 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) ship_moby->visible = 0; ship_moby->state = JET_FIGHTER_STATE_WAIT_FOR_RESPAWN; ship_moby->flags |= 1; - ship_vars->iF8 = scale_game_frames(0x5A); + ship_vars->respawn_or_exit_delay_timer_frames = scale_game_frames(0x5A); } else { hc = *(short *)(*(char **)(collision_result + 0x18) + 0xA6); if (hc != 0 && hc != 0x192 && hc != 0x4C2 && hc != 0x4C3) { @@ -1151,7 +1159,7 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) k = ship_vars->speed * D_L11_0016204C; ship_vars->f34 = collision_adjusted_pitch; ship_vars->speed = k; - if (ship_vars->iDC == 0) { + if (ship_vars->collision_damage_cooldown_timer_frames == 0) { hero.ship_hp = hero.ship_hp - jet_fighter_collision_damage_gp; if (hero.ship_hp < 0.0f) { fast_vec_sub(side, collision_result + 0x50, collision_result + 0x60); @@ -1183,7 +1191,8 @@ void update_player_ship_flight(struct Moby *ship_moby, ShipVars_2838 *ship_vars) 0); ship_moby->state = JET_FIGHTER_STATE_WAIT_FOR_RESPAWN; } - ship_vars->iDC = D_L11_0016214C; + ship_vars->collision_damage_cooldown_timer_frames = + l11_jet_fighter_collision_damage_cooldown_frames; } } } @@ -1235,7 +1244,7 @@ unsigned char l11_jet_fighter_max_ammo __asm__("D_L11_00162058") = 0x14; #include "rnc/overlay/l11/mobys/jet_fighter_data/jet_fighter_update.h" extern float D_L11_00162078 __attribute__((sda)); -int D_L11_00162168 = 180; +int l11_jet_fighter_exit_delay_frames __asm__("D_L11_00162168") = 180; extern float D_L11_0016D4F0_a[] __asm__("D_L11_0016D4F0"); extern void print_3290(char *) __asm__("FUN_001e93b0"); extern void FUN_L11_0024db50(int, int); @@ -1264,7 +1273,7 @@ void jet_fighter_update(struct Moby *moby) { if (moby != 0) { ship_vars = (ShipVars_2838 *)moby->pvars; - fast_dec_timer(&ship_vars->iDC); + fast_dec_timer(&ship_vars->collision_damage_cooldown_timer_frames); if (moby->state != JET_FIGHTER_STATE_WAIT_FOR_RESPAWN && moby->state != JET_FIGHTER_STATE_WAIT_FOR_BOARDING && moby->state != JET_FIGHTER_STATE_BOARD) { @@ -1355,8 +1364,8 @@ void jet_fighter_update(struct Moby *moby) { *(Block400_3290 *)ship_hp_bar_saved_palette = *(Block400_3290 *)hp_bar_palette.clut; } hp_bar_saved = 1; - ship_vars->iF8 = 1; - ship_vars->sE8 = 1; + ship_vars->respawn_or_exit_delay_timer_frames = 1; + ship_vars->active_listed_moby_count = 1; ship_vars->fade = 0.0f; if (moby->mission != 0xFF && D_0014C050[current_level_index][moby->mission] == 0xFF) { moby->state = JET_FIGHTER_STATE_INACTIVE; @@ -1406,7 +1415,7 @@ void jet_fighter_update(struct Moby *moby) { clear_u64_value(&ship_vars->f30); clear_u64_value(&ship_vars->f20); ship_vars->f38 = ship_vars->f28 = moby->rot.z; - ship_vars->i114 = scale_game_frames(0x708); + ship_vars->blarg_ship_activation_timer_frames = scale_game_frames(0x708); if (help_records[0x55].count == 0) { help_request(0x2AFC, 0x55); } @@ -1432,8 +1441,8 @@ void jet_fighter_update(struct Moby *moby) { ship_vars->speed = jet_fighter_initial_flight_speed_gp; ship_vars->f6C = 0.0f; ship_vars->f70 = 0.0f; - ship_vars->i84 = 0; - ship_vars->i80 = 0; + ship_vars->rocket_cooldown_frames = 0; + ship_vars->shot_cooldown_frames = 0; ship_vars->fD4 = 0.0f; ship_vars->fD8 = 0.0f; moby->draw_dist = 0xFF; @@ -1454,15 +1463,16 @@ void jet_fighter_update(struct Moby *moby) { D_L11_0015F608 = 2; update_player_ship_flight(moby, ship_vars); { - int alive = count_listed_blarg_ships_in_state_5(ship_vars->i10C); - if (ship_vars->sEA != 0 && alive < 5 - ship_vars->sE8 && - fast_dec_timer(&ship_vars->i114) && - activate_listed_blarg_ship(ship_vars->i10C)) { - ship_vars->i114 = scale_game_frames(0xF0); + int alive = count_listed_blarg_ships_in_state_5(ship_vars->blarg_ship_list_index); + if (ship_vars->visible_listed_moby_count != 0 && + alive < 5 - ship_vars->active_listed_moby_count && + fast_dec_timer(&ship_vars->blarg_ship_activation_timer_frames) && + activate_listed_blarg_ship(ship_vars->blarg_ship_list_index)) { + ship_vars->blarg_ship_activation_timer_frames = scale_game_frames(0xF0); } } - if (ship_vars->sE8 <= 0) { - ship_vars->iF8 = D_L11_00162168; + if (ship_vars->active_listed_moby_count <= 0) { + ship_vars->respawn_or_exit_delay_timer_frames = l11_jet_fighter_exit_delay_frames; moby->state = JET_FIGHTER_STATE_DELAYED_EXIT; } if (hero.ship_flags & 1) { @@ -1509,14 +1519,14 @@ void jet_fighter_update(struct Moby *moby) { } case JET_FIGHTER_STATE_WAIT_FOR_RESPAWN: D_L11_0015F608 = 2; - if (fast_dec_timer(&ship_vars->iF8)) { + if (fast_dec_timer(&ship_vars->respawn_or_exit_delay_timer_frames)) { hero_respawn(); } break; case JET_FIGHTER_STATE_DELAYED_EXIT: D_L11_0015F608 = 2; update_player_ship_flight(moby, ship_vars); - if (fast_dec_timer(&ship_vars->iF8)) { + if (fast_dec_timer(&ship_vars->respawn_or_exit_delay_timer_frames)) { approach_value(&ship_vars->fade, 1.0f, frame_time * 4.0f); D_L11_0015F3FC = ship_vars->fade; if (ship_vars->fade >= 1.0f) { diff --git a/src/overlays/l11/mobys/link_triggered_moby_motion.c b/src/overlays/l11/mobys/link_triggered_moby_motion.c index 83de84ea61..657eec76f9 100644 --- a/src/overlays/l11/mobys/link_triggered_moby_motion.c +++ b/src/overlays/l11/mobys/link_triggered_moby_motion.c @@ -18,7 +18,7 @@ typedef struct { char pad[0x57]; - char f57; + char motion_triggered; } Rec57; extern float fast_add_rotations(float, float); @@ -68,7 +68,7 @@ void link_triggered_moby_motion_update(struct Moby *moving_moby) { source_moby_class = moving_moby->pclass; moving_moby->scale = source_moby_class->scale * private_data->unkC; spawned_moby->scale = source_moby_class->scale * private_data->unkC; - spawned_moby->state = 1; + spawned_moby->state = LINKED_MOTION_STATE_WAIT_FOR_LINK_TRIGGER; moving_moby->state = LINKED_MOTION_STATE_WAIT_FOR_LINK_TRIGGER; break; case LINKED_MOTION_STATE_WAIT_FOR_LINK_TRIGGER: @@ -79,7 +79,8 @@ void link_triggered_moby_motion_update(struct Moby *moving_moby) { if (linked_moby->oclass == 0x33E && linked_moby->command != 0) { go: moving_moby->state = LINKED_MOTION_STATE_MOVE_ALONG_LOCAL_AXIS; - ((Rec57 *)(private_data->unk14 + (int)(alternate_item_available)))->f57 = 1; + ((Rec57 *)(private_data->unk14 + (int)(alternate_item_available)))->motion_triggered = + 1; allocate_voice_for_target_entry(0, 0, moving_moby); } break; diff --git a/src/overlays/l11/mobys/psytcopus.c b/src/overlays/l11/mobys/psytcopus.c index 928b42357c..8adb389278 100644 --- a/src/overlays/l11/mobys/psytcopus.c +++ b/src/overlays/l11/mobys/psytcopus.c @@ -41,16 +41,16 @@ struct PokiPathVars { u8 unk5A; /* 0x5A */ u8 pad_5B[5]; u8 unk60[7]; /* 0x60: passed to trooper_anim_update / trooper_anim_finish */ - u8 unk67; /* 0x67 */ + u8 hit_reaction_channel_target; /* 0x67 */ u8 pad_68[8]; u8 unk70[0x10]; /* 0x70: passed to trooper_start_knockback / step_moby_motion */ f32 unk80; /* 0x80 */ - f32 unk84; /* 0x84 */ - f32 unk88; /* 0x88 */ - f32 unk8C; /* 0x8C */ - s32 unk90; /* 0x90 */ - s32 unk94; /* 0x94 */ - f32 unk98; /* 0x98 */ + f32 knockback_speed_approach_step; /* 0x84 */ + f32 unk88; /* 0x88 */ + f32 knockback_vertical_speed; /* 0x8C */ + s32 knockback_collision_radius; /* 0x90 */ + s32 unk94; /* 0x94 */ + f32 unk98; /* 0x98 */ u8 pad_9C[0x11]; u8 unkAD; /* 0xAD */ u8 pad_AE[0x12]; @@ -70,9 +70,9 @@ struct PokiPathVars { u8 pad_144[8]; f32 unk14C; /* 0x14C */ u8 pad_150[8]; - s32 unk158; /* 0x158 */ + s32 knockback_extension_timer; /* 0x158 */ u8 pad_15C[4]; - void *unk160; /* 0x160 */ + void *held_projectile; /* 0x160 */ u8 pad_164[0x7C]; u8 unk1E0[0x10]; /* 0x1E0 */ }; @@ -189,7 +189,7 @@ void psytcopus_update(struct Moby *psytcopus) { psytcopus_projectile_forward_offset_length_gp); fast_vec_add(&projectile_vector_scratch, &projectile_vector_scratch, &psytcopus->pos); projectile_vector_scratch.z += psytcopus_projectile_z_offset_gp; - psytcopus_vars->unk160 = + psytcopus_vars->held_projectile = spawn_class_511_moby_with_sparks(psytcopus, &projectile_vector_scratch, 5); break; } @@ -210,12 +210,13 @@ void psytcopus_update(struct Moby *psytcopus) { frame_time_sq * 6.2831855f, frame_time * 6.2831855f); } - if (psytcopus_vars->unk160 != 0 && + if (psytcopus_vars->held_projectile != 0 && is_value_within_interpolated_window(psytcopus, 33.0f) != 0) { fast_vec_normalize( &projectile_vector_scratch, &psytcopus->rot_row0, frame_time * 30.0f); - set_moby_state_two_data_and_timer(psytcopus_vars->unk160, &projectile_vector_scratch); - psytcopus_vars->unk160 = 0; + set_moby_state_two_data_and_timer(psytcopus_vars->held_projectile, + &projectile_vector_scratch); + psytcopus_vars->held_projectile = 0; } if (psytcopus->anim_flags & 2) { psytcopus->state = PSYTCOPUS_STATE_ATTACK_RECOVERY; @@ -288,9 +289,9 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { u32 hit_reaction; float source_to_psytcopus_heading; - fast_dec_timer(&psytcopus_vars->unk158); + fast_dec_timer(&psytcopus_vars->knockback_extension_timer); psytcopus->scale = psytcopus->pclass->scale * D_L11_00161F9C; - if (psytcopus_vars->unk160 != 0) { + if (psytcopus_vars->held_projectile != 0) { fast_vec_normalize(&projectile_and_hit_vector_scratch, &psytcopus->rot_row0, psytcopus_projectile_forward_offset_length_gp); @@ -298,7 +299,7 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { &projectile_and_hit_vector_scratch, &psytcopus->pos); projectile_and_hit_vector_scratch.z += psytcopus_projectile_z_offset_gp; - set_moby_position_and_refresh_removal_timer(psytcopus_vars->unk160, + set_moby_position_and_refresh_removal_timer(psytcopus_vars->held_projectile, &projectile_and_hit_vector_scratch); } damage = 0.0f; @@ -310,10 +311,10 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { if (psytcopus_vars->health <= 0.0f) { hit_reaction = 1; } - psytcopus_vars->unk90 = truncate_float_to_s32(512.0f); + psytcopus_vars->knockback_collision_radius = truncate_float_to_s32(512.0f); psytcopus_vars->unk98 = 0.5f; psytcopus_vars->unk80 = psytcopus_knockback_base_gravity_gp * frame_time_sq; - psytcopus_vars->unk84 = 0.0005f; + psytcopus_vars->knockback_speed_approach_step = 0.0005f; psytcopus_vars->unk94 = 9; psytcopus_vars->unkAD = 0; switch (hit_reaction) { @@ -322,7 +323,7 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { break; case HIT_REACTION_HURT_WITHOUT_KNOCKBACK: case HIT_REACTION_HURT_WITHOUT_STATE_CHANGE: - psytcopus_vars->unk67 = 0xFA; + psytcopus_vars->hit_reaction_channel_target = 0xFA; break; case HIT_REACTION_KNOCKBACK: case HIT_REACTION_KNOCKBACK_AND_CANCEL_PROJECTILE: @@ -331,7 +332,8 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { case HIT_REACTION_KNOCKBACK_WITH_SOURCE_RELATIVE_HEADING: case HIT_REACTION_KNOCKBACK_WITH_SOURCE_RELATIVE_HEADING_AND_TIMER_EXTENSION: psytcopus_vars->unk88 = psytcopus_hurt_knockback_base_horizontal_speed_gp * frame_time; - psytcopus_vars->unk8C = psytcopus_hurt_knockback_base_vertical_speed_gp * frame_time; + psytcopus_vars->knockback_vertical_speed = + psytcopus_hurt_knockback_base_vertical_speed_gp * frame_time; psytcopus_vars->unkC0 = 3.0f; psytcopus_vars->unkC4 = 6.0f; source_to_psytcopus_heading = fast_arc_tan( @@ -342,22 +344,23 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { FUN_L00_0025ab48_p(&projectile_and_hit_vector_scratch, &angle1, &psytcopus_vars->unk88, - &psytcopus_vars->unk8C); + &psytcopus_vars->knockback_vertical_speed); FUN_L00_0025c558_p(psytcopus, psytcopus_vars->unk70, 5, 1, 0, angle1); psytcopus->state = PSYTCOPUS_STATE_KNOCKBACK; - psytcopus_vars->unk67 = 0x78; - if (psytcopus_vars->unk160 != 0) { - FUN_L00_002371e0_p(psytcopus_vars->unk160); - psytcopus_vars->unk160 = 0; + psytcopus_vars->hit_reaction_channel_target = 0x78; + if (psytcopus_vars->held_projectile != 0) { + FUN_L00_002371e0_p(psytcopus_vars->held_projectile); + psytcopus_vars->held_projectile = 0; } - psytcopus_vars->unk158 += scale_game_frames(60); + psytcopus_vars->knockback_extension_timer += scale_game_frames(60); break; case HIT_REACTION_DEATH: case HIT_REACTION_DEATH_KNOCKBACK: psytcopus->flags &= 0xEFFF; psytcopus_vars->unk80 = psytcopus_knockback_base_gravity_gp * frame_time_sq; psytcopus_vars->unk88 = psytcopus_death_knockback_base_horizontal_speed_gp * frame_time; - psytcopus_vars->unk8C = psytcopus_death_knockback_base_vertical_speed_gp * frame_time; + psytcopus_vars->knockback_vertical_speed = + psytcopus_death_knockback_base_vertical_speed_gp * frame_time; psytcopus_vars->unkC0 = 4.0f; psytcopus_vars->unkC4 = 10.0f; source_to_psytcopus_heading = fast_arc_tan( @@ -368,13 +371,13 @@ void handle_psytcopus_hits(struct Moby *psytcopus) { FUN_L00_0025ab48_p(&projectile_and_hit_vector_scratch, &angle2, &psytcopus_vars->unk88, - &psytcopus_vars->unk8C); + &psytcopus_vars->knockback_vertical_speed); FUN_L00_0025c558_p(psytcopus, psytcopus_vars->unk70, 6, 1, 0, angle2); psytcopus->state = PSYTCOPUS_STATE_DEATH_KNOCKBACK; - psytcopus_vars->unk67 = 0xF0; - if (psytcopus_vars->unk160 != 0) { - FUN_L00_002371e0_p(psytcopus_vars->unk160); - psytcopus_vars->unk160 = 0; + psytcopus_vars->hit_reaction_channel_target = 0xF0; + if (psytcopus_vars->held_projectile != 0) { + FUN_L00_002371e0_p(psytcopus_vars->held_projectile); + psytcopus_vars->held_projectile = 0; } FUN_L00_00257470_p(psytcopus, 0, -1); break; diff --git a/src/overlays/l11/mobys/puffoid.c b/src/overlays/l11/mobys/puffoid.c index d1a715d5e2..797fea865b 100644 --- a/src/overlays/l11/mobys/puffoid.c +++ b/src/overlays/l11/mobys/puffoid.c @@ -87,12 +87,12 @@ typedef struct { u8 pad23C[8]; s32 unk244; /* 0x244 */ u8 pad248[4]; - f32 unk24C; /* 0x24C: heading offset for FUN_L11_00315f58 */ - f32 unk250; /* 0x250: turn speed */ - s32 carrier; /* 0x254: moby index of the carrier, or < 0 */ - f32 unk258; /* 0x258 */ - s32 point; /* 0x25C: current path point */ - f32 unk260[4]; /* 0x260 */ + f32 chase_heading_offset_radians; /* 0x24C: heading offset for FUN_L11_00315f58 */ + f32 yaw_turn_velocity; /* 0x250: turn speed */ + s32 carrier; /* 0x254: moby index of the carrier, or < 0 */ + f32 carrier_jump_local_x_threshold; /* 0x258 */ + s32 point; /* 0x25C: current path point */ + f32 wander_destination[4]; /* 0x260 */ u8 pad270[0x10]; u8 unk280[0x10]; /* 0x280 */ } CreatureVars_4318; @@ -190,7 +190,7 @@ void puffoid_update(struct Moby *moby) { qcopy(puffoid_vars->home, (char *)l11_paths[puffoid_vars->path] + 0x20); } else if (puffoid_vars->carrier >= 0) { moby->state = PUFFOID_STATE_WAIT_FOR_CARRIER_JUMP; - puffoid_vars->unk258 = random_float_between(-3.0f, 3.0f); + puffoid_vars->carrier_jump_local_x_threshold = random_float_between(-3.0f, 3.0f); moby->visible = 0; moby->collision = 0; moby->flags |= 1; @@ -208,7 +208,7 @@ void puffoid_update(struct Moby *moby) { float home_jump_heading = fast_arc_tan(*(float *)(path + 0x20) - moby->pos.x, *(float *)(path + 0x24) - moby->pos.y); approach_angle(&moby->rot.z, - &puffoid_vars->unk250, + &puffoid_vars->yaw_turn_velocity, home_jump_heading, frame_time_sq * 8.726646f, frame_time_sq * 8.726646f, @@ -253,7 +253,7 @@ void puffoid_update(struct Moby *moby) { break; case PUFFOID_STATE_IDLE: if (puffoid_vars->unk214 != 2) { - puffoid_vars->unk24C = + puffoid_vars->chase_heading_offset_radians = random_float_between(-puffoid_chase_heading_offset_limit_degrees_gp, puffoid_chase_heading_offset_limit_degrees_gp) * 0.017453292f; @@ -265,10 +265,12 @@ void puffoid_update(struct Moby *moby) { fast_vec_dist(&moby->pos, D_L11_001677C0_4318) < 32.0f) { float a = random_angle_radians(); float wander_radius = random_float_between(1.0f, 3.0f); - puffoid_vars->unk260[0] = fast_cos(a) * wander_radius; - puffoid_vars->unk260[1] = fast_sin(a) * wander_radius; - puffoid_vars->unk260[2] = 0.0f; - fast_vec_add(puffoid_vars->unk260, puffoid_vars->unk260, puffoid_vars->home); + puffoid_vars->wander_destination[0] = fast_cos(a) * wander_radius; + puffoid_vars->wander_destination[1] = fast_sin(a) * wander_radius; + puffoid_vars->wander_destination[2] = 0.0f; + fast_vec_add(puffoid_vars->wander_destination, + puffoid_vars->wander_destination, + puffoid_vars->home); moby->state = PUFFOID_STATE_WANDER_NEAR_HOME; if (moby->prev_seq != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(10)); @@ -276,9 +278,10 @@ void puffoid_update(struct Moby *moby) { } break; case PUFFOID_STATE_WANDER_NEAR_HOME: - update_moby_target_heading_and_conditional_movement((char *)moby, puffoid_vars->unk260); + update_moby_target_heading_and_conditional_movement((char *)moby, + puffoid_vars->wander_destination); if (puffoid_vars->unk214 != 2) { - puffoid_vars->unk24C = + puffoid_vars->chase_heading_offset_radians = random_float_between(-puffoid_chase_heading_offset_limit_degrees_gp, puffoid_chase_heading_offset_limit_degrees_gp) * 0.017453292f; @@ -318,7 +321,7 @@ void puffoid_update(struct Moby *moby) { float target_facing_heading = fast_arc_tan(puffoid_vars->target->pos.x - moby->pos.x, puffoid_vars->target->pos.y - moby->pos.y); approach_angle(rz, - &puffoid_vars->unk250, + &puffoid_vars->yaw_turn_velocity, target_facing_heading, frame_time_sq * 12.566371f, frame_time_sq * 12.566371f, @@ -356,7 +359,7 @@ void puffoid_update(struct Moby *moby) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } } else if (puffoid_vars->unk214 != 2) { - puffoid_vars->unk24C = + puffoid_vars->chase_heading_offset_radians = random_float_between(-puffoid_chase_heading_offset_limit_degrees_gp, puffoid_chase_heading_offset_limit_degrees_gp) * 0.017453292f; @@ -413,7 +416,7 @@ void puffoid_update(struct Moby *moby) { transpose_rotation_matrix(basis, &carrier_moby->rot_row0); fast_vec_sub(pos, &moby->pos, &carrier_moby->pos); transform_vector(pos, pos, basis); - if (pos[0] < puffoid_vars->unk258 && pos[0] > -3.1f) { + if (pos[0] < puffoid_vars->carrier_jump_local_x_threshold && pos[0] > -3.1f) { float lo; float hi; int scaled_animation_frames; @@ -473,7 +476,7 @@ void puffoid_update(struct Moby *moby) { &moby->pos, &moby->rot); if (puffoid_vars->unk214 != 2) { - puffoid_vars->unk24C = + puffoid_vars->chase_heading_offset_radians = random_float_between(-puffoid_chase_heading_offset_limit_degrees_gp, puffoid_chase_heading_offset_limit_degrees_gp) * 0.017453292f; @@ -584,7 +587,7 @@ void puffoid_update(struct Moby *moby) { float *rz = &moby->rot.z; float path_point_heading = fast_arc_tan(pos[0] - moby->pos.x, pos[1] - moby->pos.y); approach_angle(rz, - &puffoid_vars->unk250, + &puffoid_vars->yaw_turn_velocity, path_point_heading, frame_time_sq * 12.566371f, frame_time_sq * 12.566371f, @@ -691,23 +694,23 @@ struct L11PatrolVars { s32 retimer; /* 0x38: nonzero restarts the timer at 0x244 */ u8 pad3C[0xD4]; u8 move[7]; /* 0x110: movement state (trooper_anim_update / trooper_anim_finish) */ - u8 unk117; /* 0x117 */ + u8 hit_flash_red_target; /* 0x117 */ u8 pad118[8]; - u8 unk120[0x10]; /* 0x120 */ - f32 unk130; /* 0x130 */ - f32 unk134; /* 0x134 */ - f32 unk138; /* 0x138 */ - f32 unk13C; /* 0x13C */ - s32 unk140; /* 0x140 */ - s32 unk144; /* 0x144 */ - f32 unk148; /* 0x148 */ + u8 unk120[0x10]; /* 0x120 */ + f32 unk130; /* 0x130 */ + f32 unk134; /* 0x134 */ + f32 unk138; /* 0x138 */ + f32 unk13C; /* 0x13C */ + s32 unk140; /* 0x140 */ + s32 unk144; /* 0x144 */ + f32 knockback_collision_z_offset; /* 0x148 */ u8 pad14C[0x11]; u8 unk15D; /* 0x15D */ u8 pad15E[0x12]; - f32 unk170; /* 0x170 */ - f32 unk174; /* 0x174 */ + f32 knockback_apex_animation_frame; /* 0x170 */ + f32 knockback_landing_animation_frame; /* 0x174 */ u8 pad178[0x2C]; - f32 unk1A4; /* 0x1A4 */ + f32 horizontal_movement_step_limit; /* 0x1A4 */ u8 pad1A8[0x28]; Vec4f goal; /* 0x1D0 */ u8 pad1E0[0x30]; @@ -772,7 +775,7 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { char *path; moby->scale = moby->pclass->scale * D_L11_001622CC; - patrol_vars->unk1A4 = l11_puffoid_horizontal_speed_limit * frame_time; + patrol_vars->horizontal_movement_step_limit = l11_puffoid_horizontal_speed_limit * frame_time; if (patrol_vars->carrier != -1 && moby->state != PUFFOID_STATE_DEATH_KNOCKBACK && moby->state != PUFFOID_STATE_KNOCKBACK && moby->state != PUFFOID_STATE_CARRIER_DEATH_KNOCKBACK && @@ -811,7 +814,7 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { kind = HIT_RESPONSE_DEATH; } patrol_vars->unk140 = truncate_float_to_s32(512.0f); - patrol_vars->unk148 = 0.2f; + patrol_vars->knockback_collision_z_offset = 0.2f; patrol_vars->unk134 = 0.0f; patrol_vars->unk130 = puffoid_hit_motion_time_squared_scale_gp * frame_time_sq; patrol_vars->unk144 = 9; @@ -821,7 +824,7 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { break; case HIT_RESPONSE_NON_KNOCKBACK_REACTION: case HIT_RESPONSE_NON_KNOCKBACK_REACTION_ALTERNATE: - patrol_vars->unk117 = 0xFA; + patrol_vars->hit_flash_red_target = 0xFA; break; case HIT_RESPONSE_KNOCKBACK: case HIT_RESPONSE_KNOCKBACK_ALTERNATE: @@ -832,8 +835,8 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { float yaw; patrol_vars->unk138 = puffoid_hit_knockback_horizontal_scale_gp * frame_time; patrol_vars->unk13C = puffoid_hit_knockback_vertical_scale_gp * frame_time; - patrol_vars->unk170 = 7.5f; - patrol_vars->unk174 = 11.0f; + patrol_vars->knockback_apex_animation_frame = 7.5f; + patrol_vars->knockback_landing_animation_frame = 11.0f; yaw = fast_arc_tan(moby->pos.x - hit->moby->pos.x, moby->pos.y - hit->moby->pos.y); position_scratch.q = hit->pos.q; trooper_knockback_arc( @@ -844,7 +847,7 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { } else { moby->state = PUFFOID_STATE_CARRIER_KNOCKBACK; } - patrol_vars->unk117 = 0x78; + patrol_vars->hit_flash_red_target = 0x78; break; } case HIT_RESPONSE_DEATH: @@ -854,8 +857,8 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { patrol_vars->unk130 = puffoid_hit_motion_time_squared_scale_gp * frame_time_sq; patrol_vars->unk138 = puffoid_death_knockback_horizontal_scale_gp * frame_time; patrol_vars->unk13C = puffoid_death_knockback_vertical_scale_gp * frame_time; - patrol_vars->unk170 = 7.5f; - patrol_vars->unk174 = 11.0f; + patrol_vars->knockback_apex_animation_frame = 7.5f; + patrol_vars->knockback_landing_animation_frame = 11.0f; yaw = fast_arc_tan(moby->pos.x - hit->moby->pos.x, moby->pos.y - hit->moby->pos.y); position_scratch.q = hit->pos.q; trooper_knockback_arc( @@ -866,7 +869,7 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { } else { moby->state = PUFFOID_STATE_CARRIER_DEATH_KNOCKBACK; } - patrol_vars->unk117 = 0xF0; + patrol_vars->hit_flash_red_target = 0xF0; FUN_L00_00257470(moby, 0, -1); break; } @@ -920,7 +923,8 @@ void update_puffoid_damage_and_path_goal(struct Moby *moby) { } extern float frame_scale_inv_macro[] __asm__("D_0015ED68") MACRO_ADDR; -extern void FUN_L00_00258b50_c(char *, char *, float *, float *, float) __asm__("FUN_L00_00258b50"); +extern void move_moby_with_ground_and_collision_checks( + char *, char *, float *, float *, float) __asm__("FUN_L00_00258b50"); void update_moby_target_heading_and_conditional_movement( char *moby, float *target_position) __asm__("FUN_L11_00315f58"); @@ -947,7 +951,7 @@ void update_moby_target_heading_and_conditional_movement(char *moby, float *targ planar_heading_vector[0] = fast_cos(MOBY(moby)->rot.z) * 2.0f; planar_heading_vector[1] = fast_sin(MOBY(moby)->rot.z) * 2.0f; *(int *)&planar_heading_vector[2] = 0; - FUN_L00_00258b50_c( + move_moby_with_ground_and_collision_checks( moby, moby_vars + 0x180, planar_heading_vector, helper_scratch_buffer, 1.0f); } } diff --git a/src/overlays/l11/mobys/resort_owner.c b/src/overlays/l11/mobys/resort_owner.c index 840939c00c..8dd390ef9b 100644 --- a/src/overlays/l11/mobys/resort_owner.c +++ b/src/overlays/l11/mobys/resort_owner.c @@ -73,7 +73,7 @@ typedef struct ResortOwnerVars { s16 unk56; u8 pad_58[0x28]; void *unk80; - void *unk84; + void *supplemental_clearance_path; void *unk88; u8 pad_8C[0x64]; s32 unkF0; @@ -86,8 +86,8 @@ typedef struct ResortOwnerVars { f32 unk130[4]; f32 unk140[4]; f32 unk150; - f32 unk154; - u32 unk158; + f32 horizontal_step_distance; + u32 current_path_leg; s32 unk15C; } ResortOwnerVars; @@ -147,8 +147,8 @@ extern void transform_attachment_pose(void *, void *, void *, void *, void *, v extern void FUN_00212f90(void *, int, int, int); extern float D_0015ED70; extern float D_0015ED6C; -float D_L11_001613E0 = 3.2f; -int D_L11_001613F0 = 0; +float l11_resort_owner_gate_attachment_local_x_offset __asm__("D_L11_001613E0") = 3.2f; +int l11_resort_owner_gate_attachment_rotation __asm__("D_L11_001613F0") = 0; extern int resort_owner_completion_rotation_trigger_state[] __asm__("D_L11_0016D260"); extern int D_L11_0015FFD8; @@ -185,11 +185,11 @@ void update_resort_owner_state_actions(void *mp) { D_0015ED70 * 12.566371f, D_0015ED70 * 25.132742f, D_0015ED6C * 12.566371f); - pvars->unk130[0] = fast_cos(*(float *)(yaw_ptr)) * pvars->unk154; + pvars->unk130[0] = fast_cos(*(float *)(yaw_ptr)) * pvars->horizontal_step_distance; motion_scalar = fast_sin(*(float *)(yaw_ptr)); vertical_motion = pvars->unk140[2]; vertical_motion_decrement = D_0015ED70 * 20.0f; - horizontal_speed = pvars->unk154; + horizontal_speed = pvars->horizontal_step_distance; pvars->unk130[1] = motion_scalar * horizontal_speed; vertical_motion = vertical_motion - vertical_motion_decrement; pvars->unk130[2] = vertical_motion; @@ -199,7 +199,7 @@ void update_resort_owner_state_actions(void *mp) { * deletes, but it keeps f3 live into this branch, so the * first scheduling pass hoists the 0x154 load and the * allocator gives it $f4 as in retail. */ - pvars->unk154 = horizontal_speed; + pvars->horizontal_step_distance = horizontal_speed; } break; } @@ -223,15 +223,15 @@ void update_resort_owner_state_actions(void *mp) { break; case RESORT_OWNER_WAIT_AT_GATE: { int *gate_moby_index_ptr = &pvars->unkF0; - unsigned int gate_slot_index = 0U < pvars->unk158; + unsigned int gate_slot_index = 0U < pvars->current_path_leg; char *gate_moby; gate_moby_index_ptr += gate_slot_index; gate_moby = (char *)D_L11_0015FFD8; gate_moby += *gate_moby_index_ptr << 8; transform_attachment_pose(moby, gate_moby, - &D_L11_001613E0, - &D_L11_001613F0, + &l11_resort_owner_gate_attachment_local_x_offset, + &l11_resort_owner_gate_attachment_rotation, (char *)moby + 0x10, (char *)moby + 0x40); if (try_activate_pokitaru_gate((struct Moby *)gate_moby) == 0) @@ -272,15 +272,15 @@ void apply_resort_owner_movement(void *mp) { (MOBY(moby)->state == RESORT_OWNER_JUMP_TO_TARGET && moby_vars->unk15C == 3)) { resolve_point_path_segment_xy_clearance( 0.3f, - *(void **)((u8 *)moby_vars + 0x60 - -(*(int *)&moby_vars->unk158 * 4)), + *(void **)((u8 *)moby_vars + 0x60 - -(*(int *)&moby_vars->current_path_leg * 4)), moby + 0x10, moby + 0x10); - switch (*(int *)&moby_vars->unk158) { + switch (*(int *)&moby_vars->current_path_leg) { case RESORT_OWNER_PENULTIMATE_PATH_LEG: resolve_point_path_segment_xy_clearance( 0.3f, moby_vars->unk80, moby + 0x10, moby + 0x10); resolve_point_path_segment_xy_clearance( - 0.3f, moby_vars->unk84, moby + 0x10, moby + 0x10); + 0.3f, moby_vars->supplemental_clearance_path, moby + 0x10, moby + 0x10); resolve_point_path_segment_xy_clearance( 0.3f, moby_vars->unk88, moby + 0x10, moby + 0x10); break; @@ -288,7 +288,7 @@ void apply_resort_owner_movement(void *mp) { resolve_point_path_segment_xy_clearance( 0.3f, moby_vars->unk80, moby + 0x10, moby + 0x10); resolve_point_path_segment_xy_clearance( - 0.3f, moby_vars->unk84, moby + 0x10, moby + 0x10); + 0.3f, moby_vars->supplemental_clearance_path, moby + 0x10, moby + 0x10); break; } } @@ -349,9 +349,9 @@ struct PokKeeperVars { s32 unk104; s32 unk108; s32 unk10C; - s32 unk110; - s32 unk114; - s32 unk118; + s32 second_gate_arrival_cuboid_index; + s32 final_path_arrival_cuboid_index; + s32 post_path_dialogue_condition_index; u8 pad11C[4]; Vec4f target; /* 0x120 */ Vec4f unk130; @@ -423,12 +423,12 @@ void update_resort_owner_state_transitions(void *resort_owner_moby) { qcopy_nc(&moby->pos, &l11_cuboids[moby_vars->points[1]].pos); qcopy_nc(&moby->rot, &l11_cuboids[moby_vars->points[1]].rot); FUN_L11_002d2088_c(moby, 6); - l11_cuboids[moby_vars->unk114].pos.z -= 500.0f; + l11_cuboids[moby_vars->final_path_arrival_cuboid_index].pos.z -= 500.0f; FUN_L11_0030a840((unsigned char *)(D_L11_0015FFD8 + (moby_vars->gates[0] << 8))); break; } - l11_cuboids[moby_vars->unk110].pos.z -= 500.0f; - l11_cuboids[moby_vars->unk114].pos.z -= 500.0f; + l11_cuboids[moby_vars->second_gate_arrival_cuboid_index].pos.z -= 500.0f; + l11_cuboids[moby_vars->final_path_arrival_cuboid_index].pos.z -= 500.0f; moby_vars->leg = 0; moby_vars->talk_range = 5.0f; FUN_L11_002d2088_c(moby, 1); @@ -505,7 +505,7 @@ void update_resort_owner_state_transitions(void *resort_owner_moby) { &o->rot_row2, resort_owner_gate_jump_target_local_z_offset_gp); fast_vec_add(&moby_vars->target, &moby_vars->target, position_scratch); - l11_cuboids[moby_vars->unk110].pos.z += 500.0f; + l11_cuboids[moby_vars->second_gate_arrival_cuboid_index].pos.z += 500.0f; moby_vars->next_state = RESORT_OWNER_MOVE_TO_GATE_TARGET; FUN_L11_002d2088_c(moby, 7); break; @@ -514,7 +514,7 @@ void update_resort_owner_state_transitions(void *resort_owner_moby) { FUN_L11_002d2088_c(moby, 0xB); break; case RESORT_OWNER_FINAL_PATH_LEG: - l11_cuboids[moby_vars->unk114].pos.z += 500.0f; + l11_cuboids[moby_vars->final_path_arrival_cuboid_index].pos.z += 500.0f; FUN_L11_002d2088_c(moby, 0xC); break; } @@ -575,7 +575,7 @@ void update_resort_owner_state_transitions(void *resort_owner_moby) { } break; case RESORT_OWNER_CHECK_POST_PATH_DIALOGUE: - if (D_0014C050[moby_vars->unk118 + D_0015ED84 * 16] == 0xFF && + if (D_0014C050[moby_vars->post_path_dialogue_condition_index + D_0015ED84 * 16] == 0xFF && camera_secondary_mode[0] != 0x32 && update_npc_dialogue(moby, moby_vars->talk)) { begin_dialogue_camera_transition(moby, 2.5f); FUN_L11_002d2088_c(moby, 0xF); @@ -595,7 +595,7 @@ void update_resort_owner_state_transitions(void *resort_owner_moby) { extern float resort_owner_follow_hero_speed_gp __asm__("D_L11_001613D0") __attribute__((sda)); extern float resort_owner_distant_follow_and_path_speed_gp __asm__("D_L11_001613D4") __attribute__((sda)); -float D_L11_00161400 = -3.0f; +float l11_resort_owner_gate_departure_target_local_x_offset __asm__("D_L11_00161400") = -3.0f; void set_resort_owner_state(struct Moby *moby, unsigned char state) __asm__("FUN_L11_002d2088"); @@ -621,13 +621,14 @@ void set_resort_owner_state(struct Moby *moby, unsigned char state) { case RESORT_OWNER_FOLLOW_HERO: if (moby->prev_seq != 2) FUN_00212f90(moby, 2, 0, scale_game_frames(0x14)); - moby_vars->unk154 = resort_owner_follow_hero_speed_gp * frame_time; + moby_vars->horizontal_step_distance = resort_owner_follow_hero_speed_gp * frame_time; break; case RESORT_OWNER_FOLLOW_DISTANT_HERO: case RESORT_OWNER_MOVE_TO_PATH_POINT: if (moby->prev_seq != 3) FUN_00212f90(moby, 3, 0, scale_game_frames(0x14)); - moby_vars->unk154 = resort_owner_distant_follow_and_path_speed_gp * frame_time; + moby_vars->horizontal_step_distance = + resort_owner_distant_follow_and_path_speed_gp * frame_time; break; case RESORT_OWNER_JUMP_TO_TARGET: if (moby->prev_seq != 4) @@ -639,7 +640,7 @@ void set_resort_owner_state(struct Moby *moby, unsigned char state) { FUN_00212f90(moby, 3, 0, scale_game_frames(0x14)); { int *tbl = &moby_vars->unkF0; - unsigned int idx = 0U < moby_vars->unk158; + unsigned int idx = 0U < moby_vars->current_path_leg; int p; char *o; tbl += idx; @@ -647,7 +648,8 @@ void set_resort_owner_state(struct Moby *moby, unsigned char state) { o = (char *)D_L11_0015FFD8; o += p << 8; qcopy(moby_vars->unk120, o + 0x10); - transform_vector_by_basis(gate_target_offset, &D_L11_001613E0, o + 0xC0); + transform_vector_by_basis( + gate_target_offset, &l11_resort_owner_gate_attachment_local_x_offset, o + 0xC0); fast_vec_add(moby_vars->unk120, moby_vars->unk120, gate_target_offset); } break; @@ -662,7 +664,7 @@ void set_resort_owner_state(struct Moby *moby, unsigned char state) { FUN_00212f90(moby, 3, 0, scale_game_frames(0x14)); { int *tbl = &moby_vars->unkF0; - unsigned int idx = 0U < moby_vars->unk158; + unsigned int idx = 0U < moby_vars->current_path_leg; int p; char *o; tbl += idx; @@ -670,7 +672,9 @@ void set_resort_owner_state(struct Moby *moby, unsigned char state) { o = (char *)D_L11_0015FFD8; o += p << 8; qcopy(moby_vars->unk120, o + 0x10); - transform_vector_by_basis(gate_target_offset, &D_L11_00161400, o + 0xC0); + transform_vector_by_basis(gate_target_offset, + &l11_resort_owner_gate_departure_target_local_x_offset, + o + 0xC0); fast_vec_add(moby_vars->unk120, moby_vars->unk120, gate_target_offset); } break; @@ -806,8 +810,8 @@ int try_find_resort_owner_jump_target(struct Moby *moby, float *jump_target_posi fast_vec_normalize(candidate_position, candidate_position, 4.0f); fast_vec_add(candidate_position, candidate_position, pos); { - int *path_entry = - (int *)l11_paths[*(int *)((u8 *)pvars - (-(*(int *)&pvars->unk158 * 4)) + 0x60)]; + int *path_entry = (int *) + l11_paths[*(int *)((u8 *)pvars - (-(*(int *)&pvars->current_path_leg * 4)) + 0x60)]; if (point_in_path_xy(candidate_position, path_entry + 4, *path_entry)) { candidate_position[2] += 5.0f; landing_ground_height = func_L00_0025A748_f(candidate_position); diff --git a/src/overlays/l11/mobys/teleporter.c b/src/overlays/l11/mobys/teleporter.c index f64717a4e6..73988d659b 100644 --- a/src/overlays/l11/mobys/teleporter.c +++ b/src/overlays/l11/mobys/teleporter.c @@ -264,11 +264,11 @@ extern void draw_geometry_quad(void *, void *, int) __asm__("FUN_0 extern float teleporter_ring_quad_uvs[] __asm__("D_L11_001D3530"); -int D_L11_00161920 = 0; -int D_L11_00161924 = 2; -int D_L11_00161928 = 0; -int D_L11_0016192C = 1; -int D_L11_00161930 = 0x13; +int l11_teleporter_ring_blend_a_selector __asm__("D_L11_00161920") = 0; +int l11_teleporter_ring_blend_b_selector __asm__("D_L11_00161924") = 2; +int l11_teleporter_ring_blend_c_selector __asm__("D_L11_00161928") = 0; +int l11_teleporter_ring_blend_d_selector __asm__("D_L11_0016192C") = 1; +int l11_teleporter_ring_effect_texture_index __asm__("D_L11_00161930") = 0x13; unsigned int l11_teleporter_ring_vertex_color __asm__("D_L11_00161934") = 0x60408080; float teleporter_ring_local_z_center_gp __asm__("D_L11_00161938") = 1.0f; /* Draws a ring of 32 textured quads around the moby; the band widens as the radius at pvars+0x3C shrinks below 1.15. */ @@ -284,10 +284,11 @@ void draw_teleporter_ring(struct Moby *moby) { copy_matrix_rotation(matrix, &moby->rot_row0); qcopy(matrix + 12, &moby->pos); - quad.tag[1] = get_effect_texture(D_L11_00161930); - quad.tag[3] = (unsigned long long)D_L11_00161920 | (unsigned long long)D_L11_00161924 << 2 | - (unsigned long long)D_L11_00161928 << 4 | - (unsigned long long)D_L11_0016192C << 6 | 0x8000000000ULL; + quad.tag[1] = get_effect_texture(l11_teleporter_ring_effect_texture_index); + quad.tag[3] = (unsigned long long)l11_teleporter_ring_blend_a_selector | + (unsigned long long)l11_teleporter_ring_blend_b_selector << 2 | + (unsigned long long)l11_teleporter_ring_blend_c_selector << 4 | + (unsigned long long)l11_teleporter_ring_blend_d_selector << 6 | 0x8000000000ULL; quad.tag[2] = 0xff9000000260ULL; quad.tag[0] = 0; { diff --git a/src/overlays/l11/mobys/water_tile.c b/src/overlays/l11/mobys/water_tile.c index 66e4e09138..65a139b7b5 100644 --- a/src/overlays/l11/mobys/water_tile.c +++ b/src/overlays/l11/mobys/water_tile.c @@ -45,7 +45,7 @@ typedef struct { } Light_e088; extern Light_e088 l11_water_tile_light __asm__("D_L11_001CB280"); -int D_L11_00161F64 = 0; +int l11_water_tile_allocation_count __asm__("D_L11_00161F64") = 0; char D_L11_0021B4C0[] = "I'm really sorry, but you can't have more than 128 water tiles in this level"; /* One fixed-point bounds record (pool_bind_tile: x, y, z, two scale shorts) per water grid; @@ -86,9 +86,9 @@ void water_tile_update(struct Moby *water_tile_moby) { switch (water_tile_moby->state) { case WATER_TILE_STATE_INITIALIZE: water_tile_moby->update_dist = 0xFF; - water_tile_vars[1] = D_L11_00161F64; - D_L11_00161F64 = D_L11_00161F64 + 1; - if (D_L11_00161F64 >= 0x80) { + water_tile_vars[1] = l11_water_tile_allocation_count; + l11_water_tile_allocation_count = l11_water_tile_allocation_count + 1; + if (l11_water_tile_allocation_count >= 0x80) { print_e088(D_L11_0021B4C0); } water_tile_moby->update_dist = 0xFF; @@ -141,7 +141,7 @@ void water_tile_update(struct Moby *water_tile_moby) { water_tile_moby->state = WATER_TILE_STATE_FIND_NEIGHBORS; break; case WATER_TILE_STATE_FIND_NEIGHBORS: - D_L11_00161F64 = 0; + l11_water_tile_allocation_count = 0; populate_water_tile_neighbor_indices(water_tile_vars[1]); water_tile_moby->state = WATER_TILE_STATE_APPROACH_UPPER_HEIGHT; break; diff --git a/src/overlays/l12/hero/hero_set_state.c b/src/overlays/l12/hero/hero_set_state.c index 154ecb7be9..25fd725307 100644 --- a/src/overlays/l12/hero/hero_set_state.c +++ b/src/overlays/l12/hero/hero_set_state.c @@ -66,17 +66,19 @@ extern int hero_set_state(int, int) __asm__("FUN_L12_002400d0"); extern char level12_transform_trail_jump_velocity_key_profile[] __asm__("D_L12_0017C3A0"); extern char level12_water_surface_jump_velocity_key_profile[] __asm__("D_L12_0017C3E0"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int entry_animation_mode) { int previous_state_step; char *moby; int old20A7; { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L12_0015F5C4 == 2 || D_L12_0015F5C4 == 6) && b != 2) + if ((D_L12_0015F5C4 == 2 || D_L12_0015F5C4 == 6) && + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; @@ -155,7 +157,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (entry_animation_mode) { if (hero_get_gadget_anim_id(0) == 0x54) { set_hero_animation(hero_get_gadget_anim_id(0), 0, (float)scale_game_frames(0x12)); } else { @@ -170,7 +172,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (entry_animation_mode) { if (hero_get_gadget_anim_id(0) == 0x54) { set_hero_animation(hero_get_gadget_anim_id(0), 0, (float)scale_game_frames(0x12)); } else { @@ -195,7 +197,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -206,7 +208,7 @@ int hero_set_state(int requested_state, int b) { p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.momentum, frame_time * 3.5f); - if (b) + if (entry_animation_mode) set_hero_animation(0x7C, 0, (float)scale_game_frames(0xC)); break; } @@ -222,7 +224,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->unk6A0 = 0; p->unk690 = p->motion.pos.f[2] - p->unk69C; - if (b) + if (entry_animation_mode) set_hero_animation(0x74, 0, (float)scale_game_frames(0xB)); break; } @@ -244,7 +246,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->unk8E0 = 0; n = scale_game_frames(0xC); - if (b) + if (entry_animation_mode) set_hero_animation(0x3B, 0, (float)n); } break; @@ -265,7 +267,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0xB); if (p->state.prev == 0x33) n = scale_game_frames(0xF); - if (b) + if (entry_animation_mode) set_hero_animation(0x3D, 0, (float)n); break; } @@ -280,7 +282,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0x23); if (p->state.prev == 0x35) n = -2; - if (b) + if (entry_animation_mode) set_hero_animation(0x3C, 0, (float)n); break; } @@ -348,7 +350,7 @@ int hero_set_state(int requested_state, int b) { s->motion.momentum.f[2] = 0.0f; FUN_L00_0025f730(&s->motion.momentum, frame_time * 5.5f); s->rand_timer.range = 0x68; - if (b) + if (entry_animation_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x16)); } break; @@ -372,7 +374,7 @@ int hero_set_state(int requested_state, int b) { int t = scale_game_frames(0x4D); struct Hero *q = &hero; q->invulnerable_frames = t; - if (b) { + if (entry_animation_mode) { if (q->state.current == 0x75) { set_hero_animation(0x70, 3, -3.0f); } else { @@ -396,7 +398,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->drown_sink_speed = 0; p->unk698 = scale_game_frames(0x2D); p->rand_timer.range = 0x68; - if (b) + if (entry_animation_mode) set_hero_animation(0x65, 0, (float)scale_game_frames(0x11)); break; } @@ -438,7 +440,7 @@ int hero_set_state(int requested_state, int b) { char *v = (char *)&hero.motion.momentum; qcopy(v, v - 0x40); } - if (b) + if (entry_animation_mode) set_hero_animation(0x5F, 0, (float)scale_game_frames(0xA)); break; } @@ -449,7 +451,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0x80, 0, (float)scale_game_frames(0xA)); break; } @@ -457,7 +459,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(0x46, 0, (float)scale_game_frames(8)); break; } @@ -465,7 +467,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(0x47, 0, (float)scale_game_frames(8)); break; } @@ -473,7 +475,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(0x48, 0, (float)scale_game_frames(8)); break; } @@ -485,7 +487,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L12_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = hero_get_gadget_anim_id(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && entry_animation_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -586,7 +588,7 @@ int hero_set_state(int requested_state, int b) { scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (entry_animation_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L12_0015F6D8[v->state.step], (float)n); } @@ -598,7 +600,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 1; p->unk2284 = 0; - if (b) { + if (entry_animation_mode) { if (p->state.prev == 4) { set_hero_animation(0x5E, 2, (float)scale_game_frames(5)); } else { @@ -615,7 +617,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (entry_animation_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -648,7 +650,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (entry_animation_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -665,7 +667,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (entry_animation_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -692,7 +694,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (entry_animation_mode) { if (q->moby->seq == hero_get_gadget_anim_id(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -719,7 +721,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -732,7 +734,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -744,7 +746,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (entry_animation_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -800,7 +802,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (entry_animation_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -816,7 +818,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -828,7 +830,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -843,7 +845,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (entry_animation_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -858,7 +860,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (entry_animation_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -867,7 +869,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -876,7 +878,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -885,7 +887,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -909,7 +911,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (entry_animation_mode) { if (q->vehicle_mode == 3) { set_hero_animation(6, 0, (float)scale_game_frames(8)); return 1; @@ -935,7 +937,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x13, 0, (float)animation_blend_selector); } break; @@ -950,7 +952,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x13, 0, (float)animation_blend_selector); } break; @@ -1259,7 +1261,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (entry_animation_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1349,7 +1351,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (entry_animation_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1386,7 +1388,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (entry_animation_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1401,7 +1403,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (entry_animation_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1432,7 +1434,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (entry_animation_mode) { char *m; int j = 0; int n; @@ -1463,7 +1465,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (entry_animation_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1492,7 +1494,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; int e = D_L12_0017C0A8[q->attack_record].kind; - if (b) { + if (entry_animation_mode) { char *m; int z = e == 0; int n = scale_game_frames(5); @@ -1509,7 +1511,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (entry_animation_mode) { char *m; HeroTableRow2C *e = &D_L12_0017C0A8[p->attack_record]; int k = e->kind; @@ -1530,7 +1532,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1552,7 +1554,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (entry_animation_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = level12_hero_animation_blend_curves[q->anim_blend_curve] [(q->anim_blend_step)++]; @@ -1564,7 +1566,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1572,7 +1574,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (entry_animation_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1583,7 +1585,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1594,7 +1596,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1611,7 +1613,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (entry_animation_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1621,7 +1623,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (entry_animation_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1634,7 +1636,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (entry_animation_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = level12_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1655,7 +1657,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (entry_animation_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1706,7 +1708,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (entry_animation_mode) set_hero_animation(hero_get_gadget_anim_id(0), 0, -1.0f); break; } @@ -1717,7 +1719,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (entry_animation_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -1727,7 +1729,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (entry_animation_mode) set_hero_animation(hero_get_gadget_anim_id(0), 0, -1.0f); break; } diff --git a/src/overlays/l12/hero/update_hero_motion_for_current_state.c b/src/overlays/l12/hero/update_hero_motion_for_current_state.c index d7fbdc307c..c552720a63 100644 --- a/src/overlays/l12/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l12/hero/update_hero_motion_for_current_state.c @@ -38,6 +38,9 @@ float absolute_float(float input) __asm__("func_001F99C0"); void update_hero_ground_material_flags(void) __asm__("FUN_L12_0022de30"); void update_hero_ground_material_flags(void) { + enum { + GROUND_MATERIAL_FIXED_WATER_DEPTH = 0xE + }; struct Hero *hero_for_ground_flags_update = &hero; unsigned char saved; int state; @@ -61,7 +64,7 @@ void update_hero_ground_material_flags(void) { } } } - if (state == 0xE) { + if (state == GROUND_MATERIAL_FIXED_WATER_DEPTH) { struct Hero *hero_for_surface_update = &hero; hero_for_surface_update->base_condition = 1; hero_for_surface_update->water_depth = 0.2f; @@ -511,7 +514,7 @@ extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); extern s32 D_0015EEA4; extern u8 D_0013D4DC[]; extern s32 D_L12_0015F688 __attribute__((sda)); -s32 D_L12_0015F68C = 0; +s32 l12_look_usage_event_count __asm__("D_L12_0015F68C") = 0; extern u8 D_L12_00167258[]; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); @@ -559,7 +562,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern void build_spherical_offset(void *, f32, f32, f32) __asm__("FUN_00214db0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); @@ -653,7 +656,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L12_00238900"); void update_hero_motion_for_current_state(void) { struct MobyView *moby = MV(hero.moby); - s32 sub = hero.state.step; + s32 entry_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 geometry_and_hit_descriptor_scratch; @@ -711,7 +714,7 @@ void update_hero_motion_for_current_state(void) { D_L12_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L12_0015F68C++; + l12_look_usage_event_count++; } } } @@ -1092,11 +1095,11 @@ void update_hero_motion_for_current_state(void) { geometry_and_hit_descriptor_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -2851,7 +2854,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (entry_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l12/mobys/blarg_helicopter.c b/src/overlays/l12/mobys/blarg_helicopter.c index ed649869ab..a2cf97bd11 100644 --- a/src/overlays/l12/mobys/blarg_helicopter.c +++ b/src/overlays/l12/mobys/blarg_helicopter.c @@ -141,14 +141,14 @@ typedef struct BlargHelicopterVars { u8 pad_5B[0x5]; u8 anim_state; u8 pad_61[0x6]; - u8 unk67; + u8 hit_flash_target_red; u8 pad_68[0x8]; f32 unk70[4]; s32 unk80; u8 pad_84[0x4]; f32 yaw_turn_velocity; - s16 unk8C; - s16 unk8E; + s16 rocket_fire_timer_frames; + s16 knockback_timer_frames; f32 bob_angle; f32 unk94; f32 unk98; @@ -162,7 +162,7 @@ typedef struct BlargHelicopterVars { s32 unkB4; s32 unkB8; s16 unkBC; - s16 unkBE; + s16 target_first_path_endpoint; s32 unkC0; s32 unkC4; u8 pad_C8[0x8]; @@ -322,14 +322,14 @@ void blarg_helicopter_update(struct Moby *moby) { l12_camera.focus_time = 0; } if (blarg_helicopter_vars->unkC0) { - count = blarg_helicopter_vars->unk8C; + count = blarg_helicopter_vars->rocket_fire_timer_frames; limit = D_L12_00161F20 - 3; if (limit > 5) limit = 5; if (limit < 0) limit = 0; if (count < limit * scale_game_frames(15)) - blarg_helicopter_vars->unk8C = limit * scale_game_frames(15); + blarg_helicopter_vars->rocket_fire_timer_frames = limit * scale_game_frames(15); } if (follow_blarg_helicopter_path(moby, blarg_helicopter_vars->unkA0)) moby->state = BLARG_HELICOPTER_AIM_AND_FIRE; @@ -368,7 +368,7 @@ void blarg_helicopter_update(struct Moby *moby) { frame_time * 0.7853982f); clear_u64_value(blarg_helicopter_vars->unk70); update_blarg_helicopter_motion_tilt(moby); - if (fast_dec_timer_s16(&blarg_helicopter_vars->unk8C)) { + if (fast_dec_timer_s16(&blarg_helicopter_vars->rocket_fire_timer_frames)) { ++blarg_helicopter_vars->unkBC; moby_point_position(moby, blarg_helicopter_vars->unkB8, &position); blarg_helicopter_vars->unkB8 = blarg_helicopter_vars->unkB8 == 0; @@ -413,7 +413,7 @@ void blarg_helicopter_update(struct Moby *moby) { blarg_helicopter_vars->unkBC = 0; moby->state = BLARG_HELICOPTER_MOVE_BETWEEN_PATH_ENDPOINTS; } else - blarg_helicopter_vars->unk8C = scale_game_frames(40); + blarg_helicopter_vars->rocket_fire_timer_frames = scale_game_frames(40); } } break; @@ -428,7 +428,7 @@ void blarg_helicopter_update(struct Moby *moby) { frame_time * 0.7853982f); { char *path = ((char *)l12_paths[blarg_helicopter_vars->unkA4]); - if (blarg_helicopter_vars->unkBE != 0) + if (blarg_helicopter_vars->target_first_path_endpoint != 0) fast_vec_sub(&position, path + 16, &moby->pos); else fast_vec_sub(&position, path + *(int *)path * 16, &moby->pos); @@ -437,8 +437,9 @@ void blarg_helicopter_update(struct Moby *moby) { if (!(distance > 5.5f)) { approach_value(&blarg_helicopter_vars->unk94, 0.0f, frame_time_sq * 9.0f); if (blarg_helicopter_vars->unk94 == 0.0f) { - blarg_helicopter_vars->unk8C = scale_game_frames(50); - blarg_helicopter_vars->unkBE = blarg_helicopter_vars->unkBE == 0; + blarg_helicopter_vars->rocket_fire_timer_frames = scale_game_frames(50); + blarg_helicopter_vars->target_first_path_endpoint = + blarg_helicopter_vars->target_first_path_endpoint == 0; moby->state = BLARG_HELICOPTER_AIM_AND_FIRE; break; } @@ -449,7 +450,7 @@ void blarg_helicopter_update(struct Moby *moby) { update_blarg_helicopter_motion_tilt(moby); break; case BLARG_HELICOPTER_KNOCKBACK: - if (fast_dec_timer_s16(&blarg_helicopter_vars->unk8E)) { + if (fast_dec_timer_s16(&blarg_helicopter_vars->knockback_timer_frames)) { moby->state = moby->command; } else { value = blarg_helicopter_vars->unk94 - frame_time_sq * 4.0f; @@ -662,7 +663,7 @@ void process_blarg_helicopter_hits(struct Moby *moby) { allocate_voice_for_target_entry(2, 0, moby); moby->state = BLARG_HELICOPTER_EXPLODE_AND_REMOVE_OR_RESET; } else if (hit_reaction_code != 0xB) { - blarg_helicopter_hit_vars->unk67 = 0xB4; + blarg_helicopter_hit_vars->hit_flash_target_red = 0xB4; trooper_anim_update(moby, (short *)&blarg_helicopter_hit_vars->anim_state); if (*(float *)(hit_record + 0x1C) == 5627.925f && moby->state != BLARG_HELICOPTER_KNOCKBACK) { @@ -680,7 +681,7 @@ void process_blarg_helicopter_hits(struct Moby *moby) { blarg_helicopter_hit_vars->unk9C = 0.0f; } blarg_helicopter_hit_vars->unk94 = frame_time * 4.0f; - blarg_helicopter_hit_vars->unk8E = scale_game_frames(0x3C); + blarg_helicopter_hit_vars->knockback_timer_frames = scale_game_frames(0x3C); moby->command = moby->state; moby->state = BLARG_HELICOPTER_KNOCKBACK; allocate_voice_for_target_entry(1, 0, moby); diff --git a/src/overlays/l12/mobys/blarg_trooper.c b/src/overlays/l12/mobys/blarg_trooper.c index 02ed23f2d0..7bc95812bd 100644 --- a/src/overlays/l12/mobys/blarg_trooper.c +++ b/src/overlays/l12/mobys/blarg_trooper.c @@ -68,7 +68,7 @@ extern float vector_length_xy(void *); extern int D_L12_0015F5C4 __asm__("D_L12_0015F5C4"); extern void update_joint_animation(float, float, void *, void *, int) __asm__("FUN_L00_002628d8"); extern void build_spherical_offset(void *, float, float, float) __asm__("FUN_00214db0"); -extern s32 FUN_L00_00258b50(void *, void *, void *, void *, f32); +extern s32 move_moby_with_ground_and_collision_checks(void *, void *, void *, void *, f32) __asm__("FUN_L00_00258b50"); /* Steers the moby toward a point 100 units ahead along its heading. */ s32 move_moby_along_heading(struct Moby *moby, void *ctl) __asm__("FUN_L12_00271dd8"); @@ -80,7 +80,8 @@ s32 move_moby_along_heading(struct Moby *moby, void *ctl) { qcopy(&ahead, &moby->pos); ahead.f[0] += fast_cos(moby->rot.z) * 100.0f; ahead.f[1] += fast_sin(moby->rot.z) * 100.0f; - return FUN_L00_00258b50(moby, ctl, &ahead, &movement_displacement, 1.0f); + return move_moby_with_ground_and_collision_checks( + moby, ctl, &ahead, &movement_displacement, 1.0f); } /* Tests whether a point lies within height, distance and heading limits of a moby. */ diff --git a/src/overlays/l12/mobys/hoven_anklebiter.c b/src/overlays/l12/mobys/hoven_anklebiter.c index f8eaec66c5..777e7e5b1e 100644 --- a/src/overlays/l12/mobys/hoven_anklebiter.c +++ b/src/overlays/l12/mobys/hoven_anklebiter.c @@ -21,6 +21,7 @@ #include "rnc/overlay/shared/mobys/count_active_moby_group_members.h" #include "rnc/overlay/shared/mobys.h" #include "rnc/overlay/shared/mobys/test_path_segment_strict_crossing.h" + #include "rnc/overlay/shared/weapons/suckcannon.h" /* Suck cannon suction method: state 8 while sucked (alerting its group), back to 1 when released; no suction in states 9, 11 and 13. */ @@ -187,9 +188,9 @@ extern int spark_scatter_third_frame_count_range_start_gp __asm__("D_L12_001618B __attribute__((sda)); extern int spark_scatter_third_frame_count_range_end_gp __asm__("D_L12_001618C0") __attribute__((sda)); -int D_L12_001618C4 = 0xa0f0e8e0; -int D_L12_001618C8 = 0x20f0e8e0; -int D_L12_001618CC = 0x10017; +int l12_spark_scatter_start_color __asm__("D_L12_001618C4") = 0xa0f0e8e0; +int l12_spark_scatter_end_color __asm__("D_L12_001618C8") = 0x20f0e8e0; +int l12_spark_scatter_table_index_and_mode __asm__("D_L12_001618CC") = 0x10017; void spawn_spark_scatter(void *spark_scatter_origin) __asm__("FUN_L12_002e19a8"); void spawn_spark_scatter(void *pos) __asm__("FUN_L12_002e19a8"); extern void spawn_spark_scatter(void *) __asm__("FUN_L12_002e19a8"); @@ -240,19 +241,19 @@ void spawn_spark_scatter(void *spark_scatter_origin) { spawn_spark(spark_position, vertical_spark_vector, radial_spark_vector, - D_L12_001618C4, - D_L12_001618C8, + l12_spark_scatter_start_color, + l12_spark_scatter_end_color, frame_count, second_frame_count, third_frame_count, - D_L12_001618CC); + l12_spark_scatter_table_index_and_mode); } while (--i >= 0); } #include "rnc/math/vector.h" extern unsigned char D_0013F3D0_r[] __asm__("D_0013F3D0"); -int D_L12_001618E8 = 0xa030303; +int l12_anklebiter_tuning_preset __asm__("D_L12_001618E8") = 0xa030303; extern float D_0015ED64; extern float D_0015ED6C; extern float D_0015ED70; @@ -362,7 +363,7 @@ void hoven_anklebiter_update(AnklebiterMoby *moby) { moby->pos[2] = probe_ground_height(target_report_or_vector_scratch.v0, 0, 0.5f); if (rand() & 1) moby->flags |= 0x8000; - data->tuning = &D_L12_001618E8; + data->tuning = &l12_anklebiter_tuning_preset; } break; case ANKLEBITER_IDLE: { @@ -702,10 +703,10 @@ int move_hoven_anklebiter_toward_heading(struct Moby *moby, float speed) { fast_vec_sub(path_test_offset, pre_move_position, &moby->pos); fast_vec_normalize(path_test_offset, path_test_offset, 0.05f); fast_vec_add(path_test_position, pre_move_position, path_test_offset); - if (FUN_L00_00261b48(*(int *)(moby_vars + 0x2D0), - &moby->pos, - path_test_position, - path_corrected_position) != 0) { + if (path_8808(*(int *)(moby_vars + 0x2D0), + &moby->pos, + path_test_position, + path_corrected_position) != 0) { char *path = ((char *)l12_paths[*(int *)(moby_vars + 0x2D0)]); if (point_in_path_xy(&moby->pos, path + 0x10, *(int *)path) == 0) *(OvlQuad *)&moby->pos = *(OvlQuad *)path_corrected_position; @@ -721,8 +722,8 @@ int move_hoven_anklebiter_toward_heading(struct Moby *moby, float speed) { return move_result; } -int D_L12_0016183C = 0xa; -int D_L12_00161840 = 8; +int l12_anklebiter_spark_burst_count __asm__("D_L12_0016183C") = 0xa; +int l12_anklebiter_sparks_per_burst __asm__("D_L12_00161840") = 8; extern float l12_anklebiter_spark_burst_origin_jitter __asm__("D_L12_00161844") __attribute__((sda)); extern float l12_anklebiter_spark_position_jitter __asm__("D_L12_00161848") __attribute__((sda)); @@ -740,12 +741,12 @@ extern float l12_anklebiter_spark_downward_velocity_scale __asm__("D_L12_0016186 __attribute__((sda)); extern float D_L12_00161864 __attribute__((sda)); extern float D_L12_00161868 __attribute__((sda)); -int D_L12_0016186C = 0x8000eeee; -int D_L12_00161870 = 0xffee; -int D_L12_00161874 = 0x8000ff90; -int D_L12_00161878 = 0xffee; -int D_L12_0016187C = 0xa; -int D_L12_00161880 = 0x1e; +int l12_anklebiter_spark_start_color_range_start __asm__("D_L12_0016186C") = 0x8000eeee; +int l12_anklebiter_spark_end_color_range_start __asm__("D_L12_00161870") = 0xffee; +int l12_anklebiter_spark_start_color_range_end __asm__("D_L12_00161874") = 0x8000ff90; +int l12_anklebiter_spark_end_color_range_end __asm__("D_L12_00161878") = 0xffee; +int l12_anklebiter_spark_life_frames __asm__("D_L12_0016187C") = 0xa; +int l12_anklebiter_spark_fade_frames __asm__("D_L12_00161880") = 0x1e; extern int l12_anklebiter_spark_random_time_base __asm__("D_L12_00161884") __attribute__((sda)); extern void add_random_offset_to_vector_xyz(void *, float) __asm__("FUN_L00_0025f8e0"); extern float scale_time(float) __asm__("FUN_001f96b0"); @@ -775,7 +776,7 @@ void spawn_hoven_anklebiter_death_sparks(struct Moby *moby) { int life; int fade; - count = D_L12_0016183C; + count = l12_anklebiter_spark_burst_count; spark_moby_vars = (char *)moby->pvars; if (moby->state == ANKLEBITER_DEATH_EFFECTS_AND_REMOVE) count = truncate_float_to_s32((float)count * 1.5f); @@ -802,9 +803,10 @@ void spawn_hoven_anklebiter_death_sparks(struct Moby *moby) { push[2] = 0.0f; fast_vec_add(spark_launch_velocity, spark_launch_velocity, push); qcopy(gravity_adjusted_spark_velocity, spark_launch_velocity); - gravity_adjusted_spark_velocity[2] -= l12_anklebiter_spark_downward_velocity_scale * - D_0015ED70 * (float)scale_game_frames(D_L12_00161880); - for (j = 0; j < D_L12_00161840; j++) { + gravity_adjusted_spark_velocity[2] -= + l12_anklebiter_spark_downward_velocity_scale * D_0015ED70 * + (float)scale_game_frames(l12_anklebiter_spark_fade_frames); + for (j = 0; j < l12_anklebiter_sparks_per_burst; j++) { size = random_float_between(0.5f, 1.5f); spark_launch_velocity[3] = size * D_L12_00161864; gravity_adjusted_spark_velocity[3] = size * D_L12_00161868; @@ -812,12 +814,14 @@ void spawn_hoven_anklebiter_death_sparks(struct Moby *moby) { add_random_offset_to_vector_xyz(gravity_adjusted_spark_velocity, l12_anklebiter_spark_velocity_jitter_scale * D_0015ED6C); - start_color = - fast_tween_color(D_L12_0016186C, D_L12_00161874, random_float_between(0.0f, 1.0f)); - end_color = - fast_tween_color(D_L12_00161870, D_L12_00161878, random_float_between(0.0f, 1.0f)); - life = scale_game_frames(D_L12_0016187C); - fade = scale_game_frames(D_L12_00161880); + start_color = fast_tween_color(l12_anklebiter_spark_start_color_range_start, + l12_anklebiter_spark_start_color_range_end, + random_float_between(0.0f, 1.0f)); + end_color = fast_tween_color(l12_anklebiter_spark_end_color_range_start, + l12_anklebiter_spark_end_color_range_end, + random_float_between(0.0f, 1.0f)); + life = scale_game_frames(l12_anklebiter_spark_life_frames); + fade = scale_game_frames(l12_anklebiter_spark_fade_frames); time_base = (float)l12_anklebiter_spark_random_time_base; spawn_spark(pos, spark_launch_velocity, @@ -842,8 +846,8 @@ typedef struct { u8 pad28[0x10]; s32 reset_alert; /* 0x38 */ u8 pad3C[0xD4]; - u8 anim[7]; /* 0x110: animation blend state */ - u8 unk117; /* 0x117 */ + u8 anim[7]; /* 0x110: animation blend state */ + u8 damage_blend_target; /* 0x117 */ u8 pad118[8]; u8 fall[0x10]; /* 0x120 */ f32 unk130; /* 0x130 */ @@ -859,8 +863,8 @@ typedef struct { u8 pad15C; u8 unk15D; /* 0x15D */ u8 pad15E[0x12]; - f32 unk170; /* 0x170 */ - f32 unk174; /* 0x174 */ + f32 knockback_ascent_animation_target; /* 0x170 */ + f32 knockback_descent_animation_target; /* 0x174 */ u8 pad178[0x134]; f32 speed; /* 0x2AC */ u8 pad2B0[0x14]; @@ -958,10 +962,10 @@ void process_hoven_anklebiter_damage_and_alerts(struct Moby *moby) { &anklebiter_vars->unk138, &anklebiter_vars->unk13C); start_fall_e3528(moby, anklebiter_vars->fall, 6, 1, 0, angle); - anklebiter_vars->unk170 = 11.0f; - anklebiter_vars->unk174 = 18.0f; + anklebiter_vars->knockback_ascent_animation_target = 11.0f; + anklebiter_vars->knockback_descent_animation_target = 18.0f; moby->state = ANKLEBITER_DEATH_FALL; - anklebiter_vars->unk117 = 0x78; + anklebiter_vars->damage_blend_target = 0x78; anim_reset_e3528(moby, anklebiter_vars->anim); } else { help_direction_or_hit_position.q = coll->pos.q; @@ -970,9 +974,10 @@ void process_hoven_anklebiter_damage_and_alerts(struct Moby *moby) { &anklebiter_vars->unk138, &anklebiter_vars->unk13C); start_fall_e3528(moby, anklebiter_vars->fall, 0xE, 1, 0, unused); - anklebiter_vars->unk174 = anklebiter_vars->unk170 = -1.0f; + anklebiter_vars->knockback_descent_animation_target = + anklebiter_vars->knockback_ascent_animation_target = -1.0f; moby->state = ANKLEBITER_KNOCKBACK_FALL; - anklebiter_vars->unk117 = 0xFA; + anklebiter_vars->damage_blend_target = 0xFA; anklebiter_vars->stun_timer = scale_game_frames(0x3C); anim_reset_e3528(moby, anklebiter_vars->anim); } diff --git a/src/overlays/l12/mobys/hoven_turret.c b/src/overlays/l12/mobys/hoven_turret.c index 9e6ed614c5..933e883d2e 100644 --- a/src/overlays/l12/mobys/hoven_turret.c +++ b/src/overlays/l12/mobys/hoven_turret.c @@ -109,20 +109,20 @@ typedef float Vec_304920[4] __attribute__((aligned(16))); typedef struct { char pad0; - unsigned char b1; + unsigned char manipulator_attached; char pad2[0xE]; char f10[0x60]; short f70; short f72; float f74; - float f78; - float f7C; - int f80; + float pitch_step; + float yaw_step; + int muzzle_alternation_state; int f84; int f88; float f8C; - int f90; - int f94; + int damage_cooldown_frames; + int completion_trigger_moby_index; int f98; int f9C; float fA0; @@ -139,7 +139,7 @@ typedef struct { typedef struct { char pad0[0x2C]; - float f2C; + float damage_amount; } Hit_304920; extern char *FUN_L00_0025a420(void *, int, int); @@ -182,7 +182,7 @@ extern void spawn_explosion(void *, int, int, int) __asm__("FUN_L00_0025e450"); -extern void FUN_L00_00262cf0(void *, void *, float, float, float); +extern void fast_add_rotations_cf(void *, void *, float, float, float) __asm__("FUN_L00_00262cf0"); extern void start_scene(int) __asm__("FUN_L00_00298840"); extern void queue_scene_movie_with_game_language(int) __asm__("FUN_L00_00299460"); extern void spawn_turret_rocket(void *, void *, void *, int) __asm__("FUN_L08_002e7eb0"); @@ -230,8 +230,8 @@ void hoven_turret_update(struct Moby *moby) { moby->rot.y = 0.0f; hoven_turret_state->f70 = scale_game_frames(0x1E); hoven_turret_state->f72 = 0; - hoven_turret_state->f78 = 0.0f; - hoven_turret_state->f7C = 0.0f; + hoven_turret_state->pitch_step = 0.0f; + hoven_turret_state->yaw_step = 0.0f; hoven_turret_state->fA0 = moby->pos.z; hoven_turret_state->f98 = -1; moby->rot.z = 3.1415927f; @@ -298,11 +298,11 @@ void hoven_turret_update(struct Moby *moby) { add_draw_callback(draw_hoven_turret_hud, moby); } update_hoven_turret_target_alignment_timer(moby); - if (fast_dec_timer(&hoven_turret_state->f90)) { + if (fast_dec_timer(&hoven_turret_state->damage_cooldown_frames)) { Hit_304920 *hit = (Hit_304920 *)FUN_L00_0025a420(moby, 0x10000, 0); if (hit != 0) { - hoven_turret_state->f90 = scale_game_frames(4); - hoven_turret_state->f8C = hoven_turret_state->f8C - hit->f2C; + hoven_turret_state->damage_cooldown_frames = scale_game_frames(4); + hoven_turret_state->f8C = hoven_turret_state->f8C - hit->damage_amount; } moby->hit_slot = 0xFF; } @@ -321,12 +321,12 @@ void hoven_turret_update(struct Moby *moby) { break; } } - if (hoven_turret_state->f94 != -1 && - (signed char)((struct Moby *)((hoven_turret_state->f94 << 8) + + if (hoven_turret_state->completion_trigger_moby_index != -1 && + (signed char)((struct Moby *)((hoven_turret_state->completion_trigger_moby_index << 8) + (*(int *)&D_L12_0015FFD8_gp))) ->state < 0) { if (D_L12_0015F5C4_macro == 2) { - if (hoven_turret_state->b1 != 0) { + if (hoven_turret_state->manipulator_attached != 0) { detach_manipulator(moby, hoven_turret_state); } if (moby->prev_seq != 0) { @@ -372,34 +372,38 @@ void hoven_turret_update(struct Moby *moby) { } joy[1] = y; target_yaw_step = hoven_turret_yaw_input_rate * 0.017453292f * D_0015ED6C_gp * -joy[0]; - if ((hoven_turret_state->f7C >= 0.0f && hoven_turret_state->f7C < target_yaw_step) || - (hoven_turret_state->f7C <= 0.0f && target_yaw_step < hoven_turret_state->f7C)) { - approach_value(&hoven_turret_state->f7C, + if ((hoven_turret_state->yaw_step >= 0.0f && + hoven_turret_state->yaw_step < target_yaw_step) || + (hoven_turret_state->yaw_step <= 0.0f && + target_yaw_step < hoven_turret_state->yaw_step)) { + approach_value(&hoven_turret_state->yaw_step, target_yaw_step, hoven_turret_yaw_acceleration_rate * 0.017453292f * frame_time_sq_macro); } else { - approach_value(&hoven_turret_state->f7C, + approach_value(&hoven_turret_state->yaw_step, target_yaw_step, hoven_turret_yaw_braking_rate * 0.017453292f * frame_time_sq_macro); } - moby->rot.z = fast_add_rotations(moby->rot.z, hoven_turret_state->f7C); + moby->rot.z = fast_add_rotations(moby->rot.z, hoven_turret_state->yaw_step); target_pitch_step = -(hoven_turret_pitch_input_rate * 0.017453292f * D_0015ED6C_gp) * -joy[1]; - if ((hoven_turret_state->f78 >= 0.0f && hoven_turret_state->f78 < target_pitch_step) || - (hoven_turret_state->f78 <= 0.0f && target_pitch_step < hoven_turret_state->f78)) { - approach_value(&hoven_turret_state->f78, + if ((hoven_turret_state->pitch_step >= 0.0f && + hoven_turret_state->pitch_step < target_pitch_step) || + (hoven_turret_state->pitch_step <= 0.0f && + target_pitch_step < hoven_turret_state->pitch_step)) { + approach_value(&hoven_turret_state->pitch_step, target_pitch_step, hoven_turret_pitch_acceleration_rate * 0.017453292f * frame_time_sq_macro); } else { - approach_value(&hoven_turret_state->f78, + approach_value(&hoven_turret_state->pitch_step, target_pitch_step, hoven_turret_pitch_braking_rate * 0.017453292f * frame_time_sq_macro); } hoven_turret_state->f74 = - fast_add_rotations(hoven_turret_state->f74, hoven_turret_state->f78); + fast_add_rotations(hoven_turret_state->f74, hoven_turret_state->pitch_step); if (hoven_turret_state->f74 > hoven_turret_pitch_max) { hoven_turret_state->f74 = hoven_turret_pitch_max; } @@ -417,18 +421,19 @@ void hoven_turret_update(struct Moby *moby) { float yaw; int i; - blend_moby_animation(moby, hoven_turret_state->f80 == 1 ? 4 : 3, 0, 1); + blend_moby_animation( + moby, hoven_turret_state->muzzle_alternation_state == 1 ? 4 : 3, 0, 1); yaw = fast_add_rotations(moby->rot.z, 1.5707964f); build_spherical_offset(firing_offset, hoven_turret_firing_offset_rate * D_0015ED6C_gp, yaw, hoven_turret_state->f74); - if (hoven_turret_state->f80 == 1) { - hoven_turret_state->f80 = 0; + if (hoven_turret_state->muzzle_alternation_state == 1) { + hoven_turret_state->muzzle_alternation_state = 0; moby_point_position(moby, 2, muz); } else { moby_point_position(moby, 1, muz); - hoven_turret_state->f80 = 1; + hoven_turret_state->muzzle_alternation_state = 1; } fast_vec_add(muz, muz, firing_offset); fast_vec_add(muz, muz, firing_offset); @@ -494,11 +499,11 @@ void hoven_turret_update(struct Moby *moby) { randomized_view_pitch = fast_add_rotations(l12_camera.pitch, randf_sym(0.0f, 0.5235988f)); qcopy(explosion_position, &l12_camera.pos); - FUN_L00_00262cf0(explosion_position, - explosion_position, - randomized_view_offset_distance, - randomized_view_yaw, - randomized_view_pitch); + fast_add_rotations_cf(explosion_position, + explosion_position, + randomized_view_offset_distance, + randomized_view_yaw, + randomized_view_pitch); t = random_float_between(0.5f, 1.3f); spawn_explosion(moby, D_L12_0015F580_macro, diff --git a/src/overlays/l12/mobys/oscillating_target_link.c b/src/overlays/l12/mobys/oscillating_target_link.c index 0869768f61..757bc79f9c 100644 --- a/src/overlays/l12/mobys/oscillating_target_link.c +++ b/src/overlays/l12/mobys/oscillating_target_link.c @@ -151,9 +151,9 @@ typedef struct OscillatingTargetLinkVars { u8 pad_0[0x2300]; u8 timer_2300; u8 pad_2301[0x23]; - f32 unk2324; + f32 link_length; u8 pad_2328[0x4]; - s32 unk232C; + s32 strip_point_count; } OscillatingTargetLinkVars; void update_oscillating_target_link_strips(struct Moby *moby) { @@ -171,12 +171,12 @@ void update_oscillating_target_link_strips(struct Moby *moby) { float *points; float *intermediate; if (fast_dec_timer((int *)((char *)oscillating_link_strip_state + 0x2300 + strip * 4))) { - int vector_count = oscillating_link_strip_state->unk232C; + int vector_count = oscillating_link_strip_state->strip_point_count; float intermediate_storage[vector_count][4]; char *timers = &oscillating_link_strip_state->timer_2300; intermediate = &intermediate_storage[0][0]; i = 0; - if (0 < oscillating_link_strip_state->unk232C) { + if (0 < oscillating_link_strip_state->strip_point_count) { points = (float *)((char *)oscillating_link_strip_state + strip * 0x460); do { float vector_count_float; @@ -184,8 +184,8 @@ void update_oscillating_target_link_strips(struct Moby *moby) { float index; float rate; clear_u64_value(points); - vector_count_float = (float)oscillating_link_strip_state->unk232C; - length = oscillating_link_strip_state->unk2324; + vector_count_float = (float)oscillating_link_strip_state->strip_point_count; + length = oscillating_link_strip_state->link_length; index = (float)i; rate = oscillating_link_strip_random_delta_magnitude_rate_gp * frame_time; points[3] = 1.0f; @@ -193,10 +193,10 @@ void update_oscillating_target_link_strips(struct Moby *moby) { random_vector(intermediate + i * 4, 0.0f, rate); points += 4; i++; - } while (i < oscillating_link_strip_state->unk232C); + } while (i < oscillating_link_strip_state->strip_point_count); } count = 1; - if (count < oscillating_link_strip_state->unk232C - 1) { + if (count < oscillating_link_strip_state->strip_point_count - 1) { points = (float *)((char *)oscillating_link_strip_state + strip * 0x460 + 0x1190); do { fast_vec_add( @@ -205,11 +205,11 @@ void update_oscillating_target_link_strips(struct Moby *moby) { fast_vec_scale(points, points, 0.333f); count++; points += 4; - } while (count < oscillating_link_strip_state->unk232C - 1); + } while (count < oscillating_link_strip_state->strip_point_count - 1); } *(int *)(timers + (strip << 2)) = oscillating_link_strip_reset_ticks; } else { - for (i = 1; i < oscillating_link_strip_state->unk232C - 1; i++) { + for (i = 1; i < oscillating_link_strip_state->strip_point_count - 1; i++) { float *point = (float *)((char *)oscillating_link_strip_state + strip * 0x460 + i * 16); float *delta = (float *)((char *)oscillating_link_strip_state + strip * 0x460 + @@ -227,10 +227,10 @@ void update_oscillating_target_link_strips(struct Moby *moby) { typedef struct Data_304310 { char pad0[0x2300]; - int f2300; - int f2304; - int f2308; - int f230C; + int first_strip_reset_countdown; + int second_strip_reset_countdown; + int third_strip_reset_countdown; + int fourth_strip_reset_countdown; int row; /* 0x2310 */ int target; /* 0x2314 */ float angle; /* 0x2318 */ @@ -285,10 +285,10 @@ void oscillating_target_link_update(Moby *moby) { oscillating_link_strip_fade_pivot_ticks = 0x16; oscillating_link_strip_reset_ticks = 0x2D; oscillating_target_link_state->f231C = -1; - oscillating_target_link_state->f2304 = 0xB; - oscillating_target_link_state->f2308 = 0x17; - oscillating_target_link_state->f230C = 0x22; - oscillating_target_link_state->f2300 = 0; + oscillating_target_link_state->second_strip_reset_countdown = 0xB; + oscillating_target_link_state->third_strip_reset_countdown = 0x17; + oscillating_target_link_state->fourth_strip_reset_countdown = 0x22; + oscillating_target_link_state->first_strip_reset_countdown = 0; moby->state = TARGET_TRACKING_STATE_ACTIVE; break; case TARGET_TRACKING_STATE_ACTIVE: diff --git a/src/overlays/l12/mobys/planetbuster_maximus_part.c b/src/overlays/l12/mobys/planetbuster_maximus_part.c index 09a8430e07..6f64f0f218 100644 --- a/src/overlays/l12/mobys/planetbuster_maximus_part.c +++ b/src/overlays/l12/mobys/planetbuster_maximus_part.c @@ -49,17 +49,17 @@ typedef struct { float f60; char pad64[0x1C]; float f80; - int w84; + int damage_cooldown_timer; char pad88[4]; - float f8C; - short h90; - char b92; - char b93; + float yaw_sweep_direction; + short yaw_sweep_active; + char firing_voice_window_timer; + char firing_voice_repeat_timer; char pad94[4]; - short h98; - short h9A; - short h9C; - short h9E; + short firing_inhibit_timer; + short firing_point_selector; + short shot_cooldown_timer; + short aim_alignment_fire_holdoff_timer; } Gun; extern char D_L12_00167240[]; @@ -135,21 +135,22 @@ void update_planetbuster_maximus_guns(char *moby) { MOBY(gun_moby)->pos.y), -1.5707964f), MOBY(moby)->rot.z); - if (md->h90 == 0) { + if (md->yaw_sweep_active == 0) { if (step_angle_toward_target((float *)(ent + 0x18), yaw, 0, D_0015ED6C_gp * 0.5235988f + D_0015ED6C_gp * 0.17453292f * (float)i) < 0.08726646f) { - md->h90 = 1; - md->f8C = 1.0f; + md->yaw_sweep_active = 1; + md->yaw_sweep_direction = 1.0f; if (i & 1) { - md->f8C = -1.0f; + md->yaw_sweep_direction = -1.0f; } } } else { - float sweep_target_yaw = fast_add_rotations(yaw, md->f8C * 0.55850536f); + float sweep_target_yaw = + fast_add_rotations(yaw, md->yaw_sweep_direction * 0.55850536f); if (absolute_float(spring_angle(ent + 0x18, sweep_target_yaw, (char *)md + 0x94, @@ -159,7 +160,7 @@ void update_planetbuster_maximus_guns(char *moby) { D_0015ED6C_gp * 0.2617994f + (float)i * (D_0015ED6C_gp * 0.05235988f))) < 0.017453292f) { - md->f8C = -md->f8C; + md->yaw_sweep_direction = -md->yaw_sweep_direction; } } flag = 0; @@ -175,27 +176,28 @@ void update_planetbuster_maximus_guns(char *moby) { l12_planetbuster_maximus_proximity_fire_counter = 0; } if ((D_L12_00161F00_gp != 0 || flag) && md->f80 > 0.0f) { - fast_dec_timer_s16(&md->h98); - fast_dec_timer_s16(&md->h9C); - if (md->h98 == 0) { + fast_dec_timer_s16(&md->firing_inhibit_timer); + fast_dec_timer_s16(&md->shot_cooldown_timer); + if (md->firing_inhibit_timer == 0) { if (fast_difference_between_rotations( *(float *)(owner_data + gun_entry_index * 0x30 + 0x18), yaw) < 0.06981317f) { - md->h9E = scale_game_frames(0x14); + md->aim_alignment_fire_holdoff_timer = scale_game_frames(0x14); } - if (fast_dec_timer_s16(&md->h9E) == 0) { - if (FUN_L00_001fefc8(&md->b92) == 0) { - if (FUN_L00_001fefc8(&md->b93) != 0) { + if (fast_dec_timer_s16(&md->aim_alignment_fire_holdoff_timer) == 0) { + if (FUN_L00_001fefc8(&md->firing_voice_window_timer) == 0) { + if (FUN_L00_001fefc8(&md->firing_voice_repeat_timer) != 0) { allocate_voice_for_target_entry(0, 0, gun_moby); - md->b93 = scale_game_frames(9); + md->firing_voice_repeat_timer = scale_game_frames(9); } } - if (fast_dec_timer_s16(&md->h9C) != 0) { + if (fast_dec_timer_s16(&md->shot_cooldown_timer) != 0) { float rz; float pitch; int n; - moby_point_position(gun_moby, md->h9A + 1, position_buffer); - md->h9A = md->h9A == 0; + moby_point_position( + gun_moby, md->firing_point_selector + 1, position_buffer); + md->firing_point_selector = md->firing_point_selector == 0; rz = fast_add_rotations(MOBY(gun_moby)->rot.z, 1.5707964f); if (D_L12_00161F00_gp != 0) { qcopy(aim_target_position, D_L12_00167240); @@ -224,7 +226,7 @@ void update_planetbuster_maximus_guns(char *moby) { scratch_vector, scale_game_frames(0x96)) != 0) { int j; - md->b92 = scale_game_frames(0x14); + md->firing_voice_window_timer = scale_game_frames(0x14); for (j = 0; j < 9; j++) { int firing_particle_color_low_byte; int firing_particle_color; @@ -251,7 +253,7 @@ void update_planetbuster_maximus_guns(char *moby) { 1); } } - md->h9C = scale_game_frames(7); + md->shot_cooldown_timer = scale_game_frames(7); n = D_L12_00161F20; if (scale_game_frames(0xB) < n) { n = scale_game_frames(0xB); @@ -259,13 +261,13 @@ void update_planetbuster_maximus_guns(char *moby) { if (n < 0) { n = 0; } - md->h9C += n; + md->shot_cooldown_timer += n; } } } } if (D_L12_00161F04_gp == 0 && md->f80 > 0.0f) { - if (fast_dec_timer(&md->w84) != 0) { + if (fast_dec_timer(&md->damage_cooldown_timer) != 0) { float dmg = 1.0f; char *r = find_moby_hit(gun_moby, 0x50000, 0); if (r == 0) { @@ -292,7 +294,7 @@ void update_planetbuster_maximus_guns(char *moby) { l12_planetbuster_maximus_proximity_fire_counter = scale_game_frames(0xFA0); goto done; } - md->w84 = scale_game_frames(0x14); + md->damage_cooldown_timer = scale_game_frames(0x14); md->f80 -= dmg; if (md->f80 <= 0.0f) { int j; @@ -660,31 +662,31 @@ typedef struct PlanetbusterMaximusVars { u8 pad_0[0x5C0]; s32 path; u8 pad_5C4[0x4]; - f32 unk5C8; + f32 vertical_oscillation_previous_offset; f32 unk5CC; u8 pad_5D0[0x14]; - u8 unk5E4; + u8 rotation_common_factor_phase; u8 pad_5E5[0x3]; - u8 unk5E8; + u8 rotation_component_mix_phase; u8 pad_5E9[0x3]; - s32 unk5EC; - f32 unk5F0; - f32 unk5F4; + s32 path_start_clip_volume; + f32 path_movement_step; + f32 yaw_turn_step; s16 path_node; - s16 unk5FA; - s16 unk5FC; + s16 detached_parts_update_count; + s16 remaining_gun_health; u8 pad_5FE[0x6]; - s32 unk604; + s32 voice_slot; s32 camera_point; - s32 unk60C; - f32 unk610; - f32 unk614; + s32 transition_target_camera_point; + f32 camera_transition_fraction; + f32 camera_transition_step; f32 unk618; - s32 unk61C; + s32 height_timer_refresh_clip_volume; s32 timer; - s32 unk624; - s32 unk628; - f32 unk62C; + s32 linked_parts_flags_clip_volume; + s32 height_raise_clip_volume; + f32 height_spring_velocity; } PlanetbusterMaximusVars; /* Moby class 1274 */ @@ -736,15 +738,16 @@ void planetbuster_maximus_part_update(char *moby) { D_L12_00161F40_gp = -1.0f; for (j = 17; j >= 0; j--) D_L12_001FB688[j] = 0; - moby_data->unk604 = -1; - moby_data->unk5FC = 100; + moby_data->voice_slot = -1; + moby_data->remaining_gun_health = 100; MOBY(moby)->state = PLANETBUSTER_WAIT_FOR_PATH_TRIGGER; } break; case PLANETBUSTER_WAIT_FOR_PATH_TRIGGER: { char *clip_test_position; int r; - if (is_point_inside_clip_volume(D_L12_00167240, moby_data->unk624)) { + if (is_point_inside_clip_volume(D_L12_00167240, + moby_data->linked_parts_flags_clip_volume)) { int i; char *base = (char *)D_L12_0015FFD8_gp; MOBY(moby)->flags |= 0x41; @@ -764,7 +767,7 @@ void planetbuster_maximus_part_update(char *moby) { } } clip_test_position = D_0013F3D0; - r = is_point_inside_clip_volume(clip_test_position, moby_data->unk628); + r = is_point_inside_clip_volume(clip_test_position, moby_data->height_raise_clip_volume); if (*(float *)(clip_test_position + 8) > 52.0f && r == 0) { approach_value( (float *)&MOBY(moby)->pos.z, moby_data->unk618, D_0015ED6C_gp + D_0015ED6C_gp); @@ -772,31 +775,36 @@ void planetbuster_maximus_part_update(char *moby) { float add = 3.0f; if (r) add = 10.0f; - if (is_point_inside_clip_volume(D_0013F3D0, moby_data->unk61C)) { + if (is_point_inside_clip_volume(D_0013F3D0, + moby_data->height_timer_refresh_clip_volume)) { moby_data->timer = scale_game_frames(0x5A); } if (!fast_dec_timer(&moby_data->timer)) add = 19.0f; vendor_spring((float *)&MOBY(moby)->pos.z, - &moby_data->unk62C, + &moby_data->height_spring_velocity, moby_data->unk618 + add, frame_scale_sq_macro * 0.03f, frame_scale_sq_macro * 0.3f, D_0015ED6C_gp * 2.7f); } - update_moby_vertical_oscillation( - 0.7f, D_0015ED6C_gp * 1.2217305f, moby, &moby_data->unk5CC, &moby_data->unk5C8); + update_moby_vertical_oscillation(0.7f, + D_0015ED6C_gp * 1.2217305f, + moby, + &moby_data->unk5CC, + &moby_data->vertical_oscillation_previous_offset); update_moby_rotation_oscillation( moby, - &moby_data->unk5E4, - &moby_data->unk5E8, + &moby_data->rotation_common_factor_phase, + &moby_data->rotation_component_mix_phase, planetbuster_maximus_rotation_oscillation_amplitude_gp, planetbuster_maximus_rotation_oscillation_common_factor_phase_rate_degrees * 0.017453292f * D_0015ED6C_gp, planetbuster_maximus_rotation_oscillation_component_mix_phase_rate_degrees * 0.017453292f * D_0015ED6C_gp); apply_linked_moby_relative_transforms(moby, moby_data, 0x11); - if (is_point_inside_clip_volume(D_0013F3D0, moby_data->unk5EC) || D_L12_00161F00_gp) { + if (is_point_inside_clip_volume(D_0013F3D0, moby_data->path_start_clip_volume) || + D_L12_00161F00_gp) { int i; D_L12_001619B4 = 1; for (i = 0; i < 5; i++) { @@ -812,12 +820,15 @@ void planetbuster_maximus_part_update(char *moby) { P_7DB0 *path; int nx; float target_yaw; - update_moby_vertical_oscillation( - 0.7f, D_0015ED6C_gp * 1.2217305f, moby, &moby_data->unk5CC, &moby_data->unk5C8); + update_moby_vertical_oscillation(0.7f, + D_0015ED6C_gp * 1.2217305f, + moby, + &moby_data->unk5CC, + &moby_data->vertical_oscillation_previous_offset); update_moby_rotation_oscillation( moby, - &moby_data->unk5E4, - &moby_data->unk5E8, + &moby_data->rotation_common_factor_phase, + &moby_data->rotation_component_mix_phase, planetbuster_maximus_rotation_oscillation_amplitude_gp, planetbuster_maximus_rotation_oscillation_common_factor_phase_rate_degrees * 0.017453292f * D_0015ED6C_gp, @@ -825,17 +836,18 @@ void planetbuster_maximus_part_update(char *moby) { 0.017453292f * D_0015ED6C_gp); path = ((P_7DB0 **)&(*(int *)l12_paths))[moby_data->path]; if (moby_data->path_node < *(int *)path - 11) { - approach_value(&moby_data->unk5F0, D_0015ED6C_gp * 8.0f, frame_time_sq_macro * 10.0f); + approach_value( + &moby_data->path_movement_step, D_0015ED6C_gp * 8.0f, frame_time_sq_macro * 10.0f); } else { - approach_value(&moby_data->unk5F0, 0.0f, frame_time_sq_macro * 8.0f); - if (moby_data->unk5F0 == 0.0f) { + approach_value(&moby_data->path_movement_step, 0.0f, frame_time_sq_macro * 8.0f); + if (moby_data->path_movement_step == 0.0f) { MOBY(moby)->state = PLANETBUSTER_POST_PATH_GUN_UPDATE; break; } } nx = (moby_data->path_node + 1) % *(int *)path; fast_vec_sub(v, &path[nx + 1], &path[moby_data->path_node + 1]); - fast_vec_normalize(v, v, moby_data->unk5F0); + fast_vec_normalize(v, v, moby_data->path_movement_step); fast_vec_add(moby + 0x10, moby + 0x10, v); target_yaw = fast_arc_tan(*(float *)((char *)path + (nx << 4) + 0x10) - @@ -846,7 +858,7 @@ void planetbuster_maximus_part_update(char *moby) { target_yaw = 3.0543261f; FUN_L00_00258278(moby, target_yaw, - &moby_data->unk5F4, + &moby_data->yaw_turn_step, frame_scale_sq_macro * 0.0015f, frame_scale_sq_macro * 0.3f, D_0015ED6C_gp * 0.17453292f); @@ -867,17 +879,20 @@ void planetbuster_maximus_part_update(char *moby) { l12_planetbuster_maximus_proximity_fire_counter++; spring_angle(moby + 0x48, 3.0543261f, - &moby_data->unk5F4, + &moby_data->yaw_turn_step, -1, frame_scale_sq_macro * 0.0015f, frame_scale_sq_macro * 0.3f, D_0015ED6C_gp * 0.17453292f); - update_moby_vertical_oscillation( - 0.7f, D_0015ED6C_gp * 1.2217305f, moby, &moby_data->unk5CC, &moby_data->unk5C8); + update_moby_vertical_oscillation(0.7f, + D_0015ED6C_gp * 1.2217305f, + moby, + &moby_data->unk5CC, + &moby_data->vertical_oscillation_previous_offset); update_moby_rotation_oscillation( moby, - &moby_data->unk5E4, - &moby_data->unk5E8, + &moby_data->rotation_common_factor_phase, + &moby_data->rotation_component_mix_phase, planetbuster_maximus_rotation_oscillation_amplitude_gp, planetbuster_maximus_rotation_oscillation_common_factor_phase_rate_degrees * 0.017453292f * D_0015ED6C_gp, @@ -887,7 +902,7 @@ void planetbuster_maximus_part_update(char *moby) { update_planetbuster_maximus_guns(moby); break; case PLANETBUSTER_DROP_PARTS_AND_TRANSITION: - if (moby_data->camera_point != -1 && moby_data->unk60C != -1) { + if (moby_data->camera_point != -1 && moby_data->transition_target_camera_point != -1) { switch ((unsigned char)MOBY(moby)->command) { case PLANETBUSTER_TRANSITION_SETUP: MOBY(moby)->command = 1; @@ -897,39 +912,43 @@ void planetbuster_maximus_part_update(char *moby) { D_L12_001619A0 = 1; break; case PLANETBUSTER_TRANSITION_INTERPOLATE: - if (moby_data->unk610 < 1.0f) { - advance_accelerated_scalar(&moby_data->unk610, - &moby_data->unk614, + if (moby_data->camera_transition_fraction < 1.0f) { + advance_accelerated_scalar(&moby_data->camera_transition_fraction, + &moby_data->camera_transition_step, 1.0f, frame_time_sq_macro * 0.666f, frame_time_sq_macro * 0.666f, D_0015ED6C_gp * 0.4f); lerp_vector(v, D_L12_001600EC + moby_data->camera_point * 128 + 0x30, - D_L12_001600EC + moby_data->unk60C * 128 + 0x30, - moby_data->unk610); + D_L12_001600EC + moby_data->transition_target_camera_point * 128 + + 0x30, + moby_data->camera_transition_fraction); clear_u64_value(transition_rotation); transition_rotation[0] = fast_subtract_rotations( - *(float *)(D_L12_001600EC + moby_data->unk60C * 128 + 0x70), + *(float *)(D_L12_001600EC + + moby_data->transition_target_camera_point * 128 + 0x70), *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x70)) * - moby_data->unk610; + moby_data->camera_transition_fraction; transition_rotation[0] = fast_add_rotations( *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x70), transition_rotation[1]); transition_rotation[1] = fast_subtract_rotations( - *(float *)(D_L12_001600EC + moby_data->unk60C * 128 + 0x74), + *(float *)(D_L12_001600EC + + moby_data->transition_target_camera_point * 128 + 0x74), *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x74)) * - moby_data->unk610; + moby_data->camera_transition_fraction; transition_rotation[1] = fast_add_rotations( *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x74), transition_rotation[1]); transition_rotation[2] = fast_subtract_rotations( - *(float *)(D_L12_001600EC + moby_data->unk60C * 128 + 0x78), + *(float *)(D_L12_001600EC + + moby_data->transition_target_camera_point * 128 + 0x78), *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x78)) * - moby_data->unk610; + moby_data->camera_transition_fraction; transition_rotation[2] = fast_add_rotations( *(float *)(D_L12_001600EC + moby_data->camera_point * 128 + 0x78), transition_rotation[2]); @@ -963,7 +982,7 @@ void planetbuster_maximus_part_update(char *moby) { } } } - if (moby_data->unk5FA == 0) { + if (moby_data->detached_parts_update_count == 0) { int i; for (i = 0; i < 17; i++) { if (D_L12_001FB688[i] == 0) @@ -974,23 +993,23 @@ void planetbuster_maximus_part_update(char *moby) { for (i = 0; i < 18; i++) initialize_planetbuster_maximus_detached_part_motion((struct Moby *)moby, i); } - moby_data->unk5FA = moby_data->unk5FA + 1; + moby_data->detached_parts_update_count = moby_data->detached_parts_update_count + 1; update_planetbuster_maximus_detached_parts(moby); break; } update_planetbuster_maximus_glow_color(moby); if ((unsigned char)MOBY(moby)->state >= PLANETBUSTER_WAIT_FOR_PATH_TRIGGER && (unsigned char)MOBY(moby)->state <= PLANETBUSTER_POST_PATH_GUN_UPDATE) { - if (moby_data->unk604 == -1) - moby_data->unk604 = allocate_voice_for_target_entry(0, 4, moby); + if (moby_data->voice_slot == -1) + moby_data->voice_slot = allocate_voice_for_target_entry(0, 4, moby); } else { - int s = moby_data->unk604; + int s = moby_data->voice_slot; if (s != -1) { Voice_7DB0 *voice_pool_entry = (Voice_7DB0 *)(((unsigned char *)D_0013E550) + s * 0x70); if (voice_pool_entry->owner == moby && voice_pool_entry->active != 0) release_voice_slot(s); } - moby_data->unk604 = -1; + moby_data->voice_slot = -1; } } diff --git a/src/overlays/l12/mobys/platform.c b/src/overlays/l12/mobys/platform.c index 436bb60782..f457a8dfde 100644 --- a/src/overlays/l12/mobys/platform.c +++ b/src/overlays/l12/mobys/platform.c @@ -225,17 +225,17 @@ typedef struct { char f60[0x40]; Walk walk; char padB8[0x18]; - float fD0; - float fD4; - float fD8; - int fDC; + float target_speed; + float acceleration; + float path_oscillation_phase; + int movement_blocking_group_id; int timer; int kind; - float fE8; - float fEC; - int fF0; + float tumble_rotation_x_step; + float tumble_rotation_y_step; + int height_reference_moby_index; char padF4[8]; - int fFC; + int movement_blocking_moby_index; } Data_2E51E8; extern int is_hero_on_moby(void *) __asm__("FUN_L01_00277fb8"); @@ -298,13 +298,14 @@ void platform_update(Moby *moby) { platform_vars = (*(Data_2E51E8 **)&moby->pvars); qcopy(oldPos, (*(float(*)[4]) & moby->pos)); qcopy(oldRot, (*(float(*)[4]) & moby->rot)); - if (moby->state != PLATFORM_INITIALIZE && platform_vars->fFC != -1 && - (signed char)(*(Moby **)&D_L12_0015FFD8_p)[platform_vars->fFC].state >= 0) { + if (moby->state != PLATFORM_INITIALIZE && platform_vars->movement_blocking_moby_index != -1 && + (signed char)(*(Moby **)&D_L12_0015FFD8_p)[platform_vars->movement_blocking_moby_index] + .state >= 0) { emit_platform_exhaust_effects((char *)moby); return; } - if (moby->state != PLATFORM_INITIALIZE && platform_vars->fDC != -1 && - count_active_moby_group_members(platform_vars->fDC, -1) != 0) { + if (moby->state != PLATFORM_INITIALIZE && platform_vars->movement_blocking_group_id != -1 && + count_active_moby_group_members(platform_vars->movement_blocking_group_id, -1) != 0) { emit_platform_exhaust_effects((char *)moby); return; } @@ -316,10 +317,10 @@ void platform_update(Moby *moby) { platform_vars->walk.path = ((Path *)l12_paths[platform_vars->walk.pathIdx]); platform_vars->walk.idx = 0; platform_vars->walk.dir = 1; - if (platform_vars->fD0 == 0.0f) - platform_vars->fD0 = 6.0f; - if (platform_vars->fD4 == 0.0f) - platform_vars->fD4 = 6.0f; + if (platform_vars->target_speed == 0.0f) + platform_vars->target_speed = 6.0f; + if (platform_vars->acceleration == 0.0f) + platform_vars->acceleration = 6.0f; platform_vars->f3E |= 9; clear_u64_value(platform_vars->vel); moby->state = PLATFORM_FOLLOW_WAYPOINTS; @@ -329,11 +330,11 @@ void platform_update(Moby *moby) { platform_vars->walk.path = ((Path *)l12_paths[platform_vars->walk.pathIdx]); platform_vars->walk.idx = 0; platform_vars->walk.dir = 1; - if (platform_vars->fD4 == 0.0f) - platform_vars->fD4 = 2.0f; - if (platform_vars->fD0 == 0.0f) - platform_vars->fD0 = 4.0f; - platform_vars->fD8 = random_angle_radians(); + if (platform_vars->acceleration == 0.0f) + platform_vars->acceleration = 2.0f; + if (platform_vars->target_speed == 0.0f) + platform_vars->target_speed = 4.0f; + platform_vars->path_oscillation_phase = random_angle_radians(); platform_vars->f3E |= 9; clear_u64_value(platform_vars->vel); moby->state = PLATFORM_OSCILLATE_BETWEEN_PATH_ENDPOINTS; @@ -345,10 +346,10 @@ void platform_update(Moby *moby) { platform_vars->walk.path = ((Path *)l12_paths[platform_vars->walk.pathIdx]); platform_vars->walk.idx = 0; platform_vars->walk.dir = 1; - if (platform_vars->fD4 == 0.0f) - platform_vars->fD4 = 8.0f; - if (platform_vars->fD0 == 0.0f) - platform_vars->fD0 = 8.0f; + if (platform_vars->acceleration == 0.0f) + platform_vars->acceleration = 8.0f; + if (platform_vars->target_speed == 0.0f) + platform_vars->target_speed = 8.0f; clear_u64_value(platform_vars->vel); moby->state = PLATFORM_OSCILLATE_BETWEEN_PATH_ENDPOINTS_FIXED_PITCH; break; @@ -359,8 +360,8 @@ void platform_update(Moby *moby) { break; case PLATFORM_KIND_TRACK_REFERENCED_MOBY_HEIGHT: moby->state = PLATFORM_TRACK_REFERENCED_MOBY_HEIGHT; - platform_vars->fD4 = 4.0f; - platform_vars->fD0 = 4.0f; + platform_vars->acceleration = 4.0f; + platform_vars->target_speed = 4.0f; platform_vars->f3E &= 0xFFFE; break; } @@ -376,7 +377,8 @@ void platform_update(Moby *moby) { if (fast_vec_dist((*(float(*)[4]) & moby->pos), &path->nodes[next_waypoint_index]) < 0.5f) { platform_vars->walk.idx = next_waypoint_index; if (platform_vars->walk.path->nodes[next_waypoint_index].w != -1.0f) { - platform_vars->fD0 = platform_vars->walk.path->nodes[next_waypoint_index].w; + platform_vars->target_speed = + platform_vars->walk.path->nodes[next_waypoint_index].w; } } fast_vec_sub(to_goal, goal, (*(float(*)[4]) & moby->pos)); @@ -393,12 +395,15 @@ void platform_update(Moby *moby) { case PLATFORM_OSCILLATE_BETWEEN_PATH_ENDPOINTS: { Path *path = platform_vars->walk.path; float swing; - platform_vars->fD4 = 0.0f; - platform_vars->fD8 = fast_add_rotations(platform_vars->fD8, D_0015ED6C * 1.2217305f); - swing = fast_sin(platform_vars->fD8); - if (platform_vars->fD8 > 1.5707964f && platform_vars->fD8 < 3.1415927f) + platform_vars->acceleration = 0.0f; + platform_vars->path_oscillation_phase = + fast_add_rotations(platform_vars->path_oscillation_phase, D_0015ED6C * 1.2217305f); + swing = fast_sin(platform_vars->path_oscillation_phase); + if (platform_vars->path_oscillation_phase > 1.5707964f && + platform_vars->path_oscillation_phase < 3.1415927f) swing = 2.0f - swing; - if (platform_vars->fD8 > -3.1415927f && platform_vars->fD8 < -1.5707964f) + if (platform_vars->path_oscillation_phase > -3.1415927f && + platform_vars->path_oscillation_phase < -1.5707964f) swing = 2.0f - swing; swing = swing * 0.5f; swing = swing + 0.5f; @@ -421,11 +426,14 @@ void platform_update(Moby *moby) { case PLATFORM_OSCILLATE_BETWEEN_PATH_ENDPOINTS_FIXED_PITCH: { Path *path = platform_vars->walk.path; float swing; - platform_vars->fD8 = fast_add_rotations(platform_vars->fD8, D_0015ED6C * 1.2217305f); - swing = fast_sin(platform_vars->fD8); - if (platform_vars->fD8 > 1.5707964f && platform_vars->fD8 < 3.1415927f) + platform_vars->path_oscillation_phase = + fast_add_rotations(platform_vars->path_oscillation_phase, D_0015ED6C * 1.2217305f); + swing = fast_sin(platform_vars->path_oscillation_phase); + if (platform_vars->path_oscillation_phase > 1.5707964f && + platform_vars->path_oscillation_phase < 3.1415927f) swing = 2.0f - swing; - if (platform_vars->fD8 > -3.1415927f && platform_vars->fD8 < -1.5707964f) + if (platform_vars->path_oscillation_phase > -3.1415927f && + platform_vars->path_oscillation_phase < -1.5707964f) swing = 2.0f - swing; swing = swing * 0.5f; swing = swing + 0.5f; @@ -508,10 +516,10 @@ void platform_update(Moby *moby) { return; } platform_vars->vel[2] = platform_vars->vel[2] - D_0015ED70 * 7.0f; - (*(float(*)[4]) & moby->rot)[0] = - fast_add_rotations(platform_vars->fE8, (*(float(*)[4]) & moby->rot)[0]); - (*(float(*)[4]) & moby->rot)[1] = - fast_add_rotations(platform_vars->fEC, (*(float(*)[4]) & moby->rot)[1]); + (*(float(*)[4]) & moby->rot)[0] = fast_add_rotations(platform_vars->tumble_rotation_x_step, + (*(float(*)[4]) & moby->rot)[0]); + (*(float(*)[4]) & moby->rot)[1] = fast_add_rotations(platform_vars->tumble_rotation_y_step, + (*(float(*)[4]) & moby->rot)[1]); if (platform_vars->walk.path != 0 && vector_distance_xy((*(float(*)[4]) & moby->pos), &platform_vars->walk.path->nodes[0]) < 0.5f) { @@ -522,8 +530,8 @@ void platform_update(Moby *moby) { } break; case PLATFORM_TRACK_REFERENCED_MOBY_HEIGHT: { - Moby *height_reference_moby = - (Moby *)((char *)(*(Moby **)&D_L12_0015FFD8_p) + (platform_vars->fF0 << 8)); + Moby *height_reference_moby = (Moby *)((char *)(*(Moby **)&D_L12_0015FFD8_p) + + (platform_vars->height_reference_moby_index << 8)); qcopy(angles, (*(float(*)[4]) & moby->pos)); angles[2] = (*(float(*)[4]) & height_reference_moby->pos)[2]; clear_u64_value(goal); diff --git a/src/overlays/l12/mobys/water_reservoir.c b/src/overlays/l12/mobys/water_reservoir.c index 78af1fb49c..c2bf049723 100644 --- a/src/overlays/l12/mobys/water_reservoir.c +++ b/src/overlays/l12/mobys/water_reservoir.c @@ -35,7 +35,7 @@ int D_L12_001619E8 = 1; int D_L12_001619F0 = 1; int D_L12_001619F4 = 0x40404040; -int D_L12_001619F8 = 0x10022; +int l12_water_reservoir_spark_table_selector __asm__("D_L12_001619F8") = 0x10022; #include "rnc/overlay/l12/mobys/water_reservoir_data/water_reservoir_update.h" @@ -122,7 +122,7 @@ void water_reservoir_update(struct Moby *moby) { D_L12_001619E8, scale_game_frames(water_reservoir_effect_delta_scale_divisor_gp), D_L12_001619F0, - D_L12_001619F8); + l12_water_reservoir_spark_table_selector); } } if ((moby->command & 1) && *(int *)&reservoir_state[1] == 0) { @@ -151,12 +151,12 @@ extern char water_reservoir_quad_vertex_template[] __asm__("D_L12_001F5B20"); extern float fast_cos(float); extern float fast_sin(float); extern int fast_tween_color(int, int, float) __asm__("FUN_001fa6e0"); -int D_L12_00161A10 = 1; -int D_L12_00161A14 = 0; -int D_L12_00161A0C = 0; -int D_L12_00161A18 = 1; -int D_L12_00161A1C = 0x40602020; -int D_L12_00161A20 = 0x40681818; +int l12_water_reservoir_alpha_b_selector __asm__("D_L12_00161A10") = 1; +int l12_water_reservoir_alpha_c_selector __asm__("D_L12_00161A14") = 0; +int l12_water_reservoir_alpha_a_selector __asm__("D_L12_00161A0C") = 0; +int l12_water_reservoir_alpha_d_selector __asm__("D_L12_00161A18") = 1; +int l12_water_reservoir_tween_start_color __asm__("D_L12_00161A1C") = 0x40602020; +int l12_water_reservoir_tween_end_color __asm__("D_L12_00161A20") = 0x40681818; extern short water_reservoir_segment_cosine_scale_gp __asm__("D_L12_00161A24") __attribute__((sda)); extern void draw_geometry_quad(void *, void *, int); @@ -174,10 +174,13 @@ void draw_water_reservoir(struct Moby *moby) { quad.g[1] = get_effect_texture(0x10); quad.g[0] = 0; quad.g[2] = 0xFF9000000260UL; - quad.g[3] = (long)D_L12_00161A0C | ((long)D_L12_00161A10 << 2) | ((long)D_L12_00161A14 << 4) | - ((long)D_L12_00161A18 << 6) | (0x8000L << 24); - col = fast_tween_color( - D_L12_00161A1C, D_L12_00161A20, (fast_sin(*(float *)water_reservoir_vars) + 1.0f) * 0.5f); + quad.g[3] = (long)l12_water_reservoir_alpha_a_selector | + ((long)l12_water_reservoir_alpha_b_selector << 2) | + ((long)l12_water_reservoir_alpha_c_selector << 4) | + ((long)l12_water_reservoir_alpha_d_selector << 6) | (0x8000L << 24); + col = fast_tween_color(l12_water_reservoir_tween_start_color, + l12_water_reservoir_tween_end_color, + (fast_sin(*(float *)water_reservoir_vars) + 1.0f) * 0.5f); for (i = 0; i < 4; i++) { quad.uv[i * 2] = 0.5f; *(&quad.uv[i * 2] + 1) = 0.5f; diff --git a/src/overlays/l13/mobys/asteroid.c b/src/overlays/l13/mobys/asteroid.c index e545a2317e..e65df333d0 100644 --- a/src/overlays/l13/mobys/asteroid.c +++ b/src/overlays/l13/mobys/asteroid.c @@ -59,7 +59,7 @@ typedef struct AsteroidVars { u8 pad_44[0x4]; char *unk48; s16 unk4C; - s16 unk4E; + s16 splits_remaining; } AsteroidVars; char *spawn_asteroid_fragment(char *parent_asteroid, @@ -85,7 +85,7 @@ char *spawn_asteroid_fragment(char *parent_asteroid, moby_data->unk48 = parent_asteroid; moby_data->unk40 = 1; moby_data->unk4C = scale_game_frames(0x1E); - moby_data->unk4E = remaining_split_count; + moby_data->splits_remaining = remaining_split_count; MOBY(moby)->collision = 0; spin_increment = random_float_between(-30.0f, 30.0f) * DEG_TO_RAD * frame_time; switch (RandomNext() % 3) { diff --git a/src/overlays/l13/mobys/attached_rocket.c b/src/overlays/l13/mobys/attached_rocket.c index 85a31c5df0..b8ce9cbfe1 100644 --- a/src/overlays/l13/mobys/attached_rocket.c +++ b/src/overlays/l13/mobys/attached_rocket.c @@ -54,7 +54,7 @@ typedef struct AttachedRocketVars { u8 pad_11[0xF]; struct Moby *unk20; s16 unk24; - s16 unk26; + s16 attachment_joint_index; f32 unk28; s32 unk2C; } AttachedRocketVars; @@ -76,7 +76,7 @@ void launch_attached_rocket(struct Moby *moby, *(OvlQuad *)&moby->rot_row0 = *(OvlQuad *)&MOBY(source_moby)->rot_row0; *(OvlQuad *)&moby->rot_row1 = *(OvlQuad *)&MOBY(source_moby)->rot_row1; *(OvlQuad *)&moby->rot_row2 = *(OvlQuad *)&MOBY(source_moby)->rot_row2; - moby_point_position((void *)moby_vars->unk20, moby_vars->unk26, mp); + moby_point_position((void *)moby_vars->unk20, moby_vars->attachment_joint_index, mp); qcopy(&moby_vars->unk10, mp); qcopy(moby_vars, pos); moby_vars->unk2C = distance_reference_moby; @@ -150,7 +150,8 @@ void attached_rocket_update(struct Moby *moby) { *(OvlQuad *)&moby->rot_row0 = *(OvlQuad *)&source->rot_row0; *(OvlQuad *)&moby->rot_row1 = *(OvlQuad *)&source->rot_row1; *(OvlQuad *)&moby->rot_row2 = *(OvlQuad *)&source->rot_row2; - moby_point_position(attached_rocket_vars->unk20, attached_rocket_vars->unk26, &moby->pos); + moby_point_position( + attached_rocket_vars->unk20, attached_rocket_vars->attachment_joint_index, &moby->pos); qcopy(&attached_rocket_vars->unk10, &moby->pos); { struct Moby *source = attached_rocket_vars->unk20; diff --git a/src/overlays/l13/mobys/blarg_space_commando.c b/src/overlays/l13/mobys/blarg_space_commando.c index d4e1dcb889..99379140f2 100644 --- a/src/overlays/l13/mobys/blarg_space_commando.c +++ b/src/overlays/l13/mobys/blarg_space_commando.c @@ -124,16 +124,17 @@ typedef struct { s32 timer; /* 0x194 */ s32 path; /* 0x198 */ u8 pad19C[0xC]; - f32 unk1A8; + f32 approach_heading_offset; u8 pad1AC[0x34]; Vec4 unk1E0; u8 pad1F0[0x210]; u8 unk400[1]; } Vars_309330; -extern int FUN_L00_00258b50(struct Moby *, void *, void *, void *, float); +extern int move_moby_with_ground_and_collision_checks( + struct Moby *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); -extern int FUN_L00_00261b48(int, void *, void *, void *); +extern int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); extern s32 rand(void); @@ -362,28 +363,31 @@ void blarg_space_commando_update(struct Moby *moby) { } break; case BLARG_SPACE_COMMANDO_APPROACH_TARGET_WITH_TURN_OFFSET: - func_L00_002592B0_309330(moby, - fast_add_rotations(fast_arc_tan(target->pos.x - moby->pos.x, - target->pos.y - moby->pos.y), - blarg_space_commando_vars->unk1A8), - &blarg_space_commando_vars->turn, - 0.05f, - 0.3f, - frame_time * 6.2831855f); + func_L00_002592B0_309330( + moby, + fast_add_rotations( + fast_arc_tan(target->pos.x - moby->pos.x, target->pos.y - moby->pos.y), + blarg_space_commando_vars->approach_heading_offset), + &blarg_space_commando_vars->turn, + 0.05f, + 0.3f, + frame_time * 6.2831855f); point.f[0] = 2.0f * fast_cos(moby->rot.z); point.f[1] = 2.0f * fast_sin(moby->rot.z); point.f[2] = 0.0f; - if (FUN_L00_00258b50(moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f) & 2) { + if (move_moby_with_ground_and_collision_checks( + moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f) & + 2) { rand(); - blarg_space_commando_vars->unk1A8 = convert_integer_to_float(-1) * 1.0995574f; + blarg_space_commando_vars->approach_heading_offset = + convert_integer_to_float(-1) * 1.0995574f; } else { - blarg_space_commando_vars->unk1A8 = 0.0f; + blarg_space_commando_vars->approach_heading_offset = 0.0f; } resolve_point_path_segment_xy_clearance( blarg_space_commando_vars->path, &moby->pos, &moby->pos, 0.75f); path_blocked = 0; - if (FUN_L00_00261b48( - blarg_space_commando_vars->path, &moby->pos, &target->pos, &direction) != 0 && + if (path_8808(blarg_space_commando_vars->path, &moby->pos, &target->pos, &direction) != 0 && fast_vec_dist(&moby->pos, &direction) < 0.8f) { path_blocked = 1; } @@ -419,11 +423,11 @@ void blarg_space_commando_update(struct Moby *moby) { point.f[0] = 2.0f * fast_cos(moby->rot.z); point.f[1] = 2.0f * fast_sin(moby->rot.z); point.f[2] = 0.0f; - FUN_L00_00258b50(moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f); resolve_point_path_segment_xy_clearance( blarg_space_commando_vars->path, &moby->pos, &moby->pos, 0.75f); - if (FUN_L00_00261b48( - blarg_space_commando_vars->path, &moby->pos, &target->pos, &direction) != 0 && + if (path_8808(blarg_space_commando_vars->path, &moby->pos, &target->pos, &direction) != 0 && fast_vec_dist(&moby->pos, &direction) < 0.8f) { blocked = 1; } @@ -485,7 +489,8 @@ void blarg_space_commando_update(struct Moby *moby) { moby->rot.z, fast_arc_tan(blarg_space_commando_vars->home.f[0] - moby->pos.x, blarg_space_commando_vars->home.f[1] - moby->pos.y)) < 0.7853982f) { - FUN_L00_00258b50(moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, &blarg_space_commando_vars->ctl, &point, &origin, 1.0f); resolve_point_path_segment_xy_clearance( blarg_space_commando_vars->path, &moby->pos, &moby->pos, 0.75f); } @@ -799,7 +804,7 @@ extern char gemlik_trail_direction_source[] __asm__("D_L13_00174180"); extern float gemlik_trail_spread_degrees_gp __asm__("D_L13_00161E80") __attribute__((sda)); -int D_L13_00161E84 = 150; +int l13_gemlik_trail_lifetime_frames __asm__("D_L13_00161E84") = 150; void initialize_gemlik_trail(struct Moby *moby) __asm__("FUN_L13_00309370"); @@ -823,7 +828,7 @@ void initialize_gemlik_trail(struct Moby *moby) { *(float *)(moby_vars + 0x21C + i * 16) = 1.0f; } } - *(float *)(moby_vars + 0x1FC) = scale_game_frames(D_L13_00161E84); + *(float *)(moby_vars + 0x1FC) = scale_game_frames(l13_gemlik_trail_lifetime_frames); } extern float approach_value(float *, float, float) __asm__("FUN_00213ed8"); @@ -951,16 +956,16 @@ typedef struct { u64 tag[4]; } QuadPacket; -s32 D_L13_00161E88 = 0; -s32 D_L13_00161E8C = 2; -s32 D_L13_00161E90 = 0; -s32 D_L13_00161E94 = 1; -s32 D_L13_00161E98 = 0x80; -s32 D_L13_00161E9C = 0xb; -s32 D_L13_00161EA0 = 0x40ff; -s32 D_L13_00161EA4 = 0x600040ff; -s32 D_L13_00161EA8 = 0xcccc; -s32 D_L13_00161EAC = 0x6000cccc; +s32 l13_point_table_quad_blend_color_a_selector __asm__("D_L13_00161E88") = 0; +s32 l13_point_table_quad_blend_color_b_selector __asm__("D_L13_00161E8C") = 2; +s32 l13_point_table_quad_blend_alpha_selector __asm__("D_L13_00161E90") = 0; +s32 l13_point_table_quad_blend_color_d_selector __asm__("D_L13_00161E94") = 1; +s32 l13_point_table_quad_blend_fixed_alpha __asm__("D_L13_00161E98") = 0x80; +s32 l13_point_table_quad_effect_texture_index __asm__("D_L13_00161E9C") = 0xb; +s32 l13_point_table_quad_even_corner_color_start __asm__("D_L13_00161EA0") = 0x40ff; +s32 l13_point_table_quad_even_corner_color_end __asm__("D_L13_00161EA4") = 0x600040ff; +s32 l13_point_table_quad_inset_corner_color_start __asm__("D_L13_00161EA8") = 0xcccc; +s32 l13_point_table_quad_inset_corner_color_end __asm__("D_L13_00161EAC") = 0x6000cccc; /* Scrolling texture coordinates of the four corners. */ f32 D_L13_001D9B70[4][2] = { @@ -991,13 +996,13 @@ void draw_point_table_quads(struct Moby *moby) { vu1_add_g_sregister(0x47, 0x5380B); i = 0; - pk[0].tag[1] = get_effect_texture(D_L13_00161E9C); - pk[1].tag[1] = get_effect_texture(D_L13_00161E9C); - regs = D_L13_00161E88; - regs |= (u64)D_L13_00161E8C << 2; - regs |= (u64)D_L13_00161E90 << 4; - regs |= (u64)D_L13_00161E94 << 6; - regs |= (u64)D_L13_00161E98 << 32; + pk[0].tag[1] = get_effect_texture(l13_point_table_quad_effect_texture_index); + pk[1].tag[1] = get_effect_texture(l13_point_table_quad_effect_texture_index); + regs = l13_point_table_quad_blend_color_a_selector; + regs |= (u64)l13_point_table_quad_blend_color_b_selector << 2; + regs |= (u64)l13_point_table_quad_blend_alpha_selector << 4; + regs |= (u64)l13_point_table_quad_blend_color_d_selector << 6; + regs |= (u64)l13_point_table_quad_blend_fixed_alpha << 32; /* Store order is load-bearing: it sets which register keeps regs. */ pk[1].tag[2] = 0x0000FF9000000260ULL; pk[0].tag[2] = 0x0000FF9000000260ULL; @@ -1023,13 +1028,13 @@ void draw_point_table_quads(struct Moby *moby) { corner_position[2] -= 0.125f; pk[0].col[j] = fast_tween_color(*(f32 *)(point_table_pvars + source_point_byte_offset + 0x21C), - D_L13_00161EA8, - D_L13_00161EAC); + l13_point_table_quad_inset_corner_color_start, + l13_point_table_quad_inset_corner_color_end); } else { pk[0].col[j] = fast_tween_color(*(f32 *)(point_table_pvars + source_point_byte_offset + 0x21C), - D_L13_00161EA0, - D_L13_00161EA4); + l13_point_table_quad_even_corner_color_start, + l13_point_table_quad_even_corner_color_end); } pk[0].uv[j][0] = D_L13_001D9B70[j][0]; pk[0].uv[j][1] = D_L13_001D9B70[j][1]; @@ -1070,7 +1075,7 @@ extern short point_spark_xy_multiplier_range_end __asm__("D_L13_00161EDC") __att extern short point_spark_z_range_start __asm__("D_L13_00161EE0") __attribute__((sda)); extern short point_spark_z_range_end __asm__("D_L13_00161EE4") __attribute__((sda)); extern short point_spark_spawn_random_threshold __asm__("D_L13_00161EE8") __attribute__((sda)); -int D_L13_00161EEC = 24; +int l13_point_spark_table_index_and_flags __asm__("D_L13_00161EEC") = 24; void spawn_point_table_sparks(struct Moby *moby) __asm__("FUN_L13_00309bc8"); @@ -1138,6 +1143,6 @@ void spawn_point_table_sparks(struct Moby *moby) { frame_count, second_frame_count, third_frame_count, - D_L13_00161EEC); + l13_point_spark_table_index_and_flags); } } diff --git a/src/overlays/l13/mobys/blarg_space_fighter.c b/src/overlays/l13/mobys/blarg_space_fighter.c index e22358b057..eb07fc1d83 100644 --- a/src/overlays/l13/mobys/blarg_space_fighter.c +++ b/src/overlays/l13/mobys/blarg_space_fighter.c @@ -452,7 +452,7 @@ typedef struct Veh { typedef struct Boss { char pad0[0x10E]; unsigned char b10E; - unsigned char b10F; + unsigned char firing_fighter_update_count; } Boss; typedef struct Moby_2C56B0 { @@ -473,7 +473,7 @@ typedef struct Moby_2C56B0 { char pad98[0xE]; short hA6; char padA8[0xA]; - short hB2; + short diagnostic_moby_number; char padB4[8]; unsigned char bBC; } Moby_2C56B0; @@ -481,24 +481,24 @@ typedef struct Moby_2C56B0 { typedef struct Data_2C56B0 { char pad0[0x20]; float f20; - short h24; + short reinitialization_health; char pad26[0x4A]; V4_2C56B0 vel; char pad80[0x10]; - V4_2C56B0 v90; - int fA0; - int fA4; - int fA8; - float fAC; - float fB0; - short hB4; - short hB6; - int fB8; - int fBC; + V4_2C56B0 path_join_position; + int flight_path_index; + int shot_interval_timer; + int fire_exit_frame_counter; + float aim_offset_radius_scale; + float aim_offset_angle_radians; + short target_path_node_index; + short previous_path_node_index; + int attack_phase_timer; + int linked_boss_index; char padC0[0x10]; - signed char bD0; + signed char path_node_step; char padD1[3]; - int fD4; + int fighter_voice_slot; } Data_2C56B0; typedef struct Hero_2C56B0 { @@ -569,8 +569,8 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { fighter_data = moby->data; veh = ((Hero_2C56B0 *)(((char *)&D_0013F350)))->veh; path = 0; - if (fighter_data->fA0 != -1) { - path = D_L13_001B07B0[fighter_data->fA0]; + if (fighter_data->flight_path_index != -1) { + path = D_L13_001B07B0[fighter_data->flight_path_index]; } switch (moby->state) { case FIGHTER_INITIALIZE: @@ -579,19 +579,21 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { return; } if (path == 0) { - func_001E9730_d(blarg_space_fighter_missing_path_debug_format, moby->hB2); + func_001E9730_d(blarg_space_fighter_missing_path_debug_format, + moby->diagnostic_moby_number); mark_moby_for_removal(moby); return; } { - int path_table_index = fighter_data->fA0; + int path_table_index = fighter_data->flight_path_index; qcopy(&moby->pos, D_L13_001B07B0[path_table_index] + 0x10); - fighter_data->hB4 = 1; - fighter_data->hB6 = *(unsigned short *)D_L13_001B07B0[path_table_index] - 1; + fighter_data->target_path_node_index = 1; + fighter_data->previous_path_node_index = + *(unsigned short *)D_L13_001B07B0[path_table_index] - 1; } - qcopy(&fighter_data->v90, path + 0x20); - qcopy(&moby->pos, &fighter_data->v90); - fighter_data->fA8 = scale_game_frames(0x14) + 5; + qcopy(&fighter_data->path_join_position, path + 0x20); + qcopy(&moby->pos, &fighter_data->path_join_position); + fighter_data->fire_exit_frame_counter = scale_game_frames(0x14) + 5; moby->b30 = 0xFF; moby->h32 = 0xFF; moby->state = FIGHTER_WAIT_TO_JOIN_PATH; @@ -599,20 +601,21 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { moby->flags = (moby->flags | 1) & 0xEFFF; moby->f94 = 0; moby->b31 = 0; - fighter_data->bD0 = 1; + fighter_data->path_node_step = 1; break; case FIGHTER_WAIT_TO_JOIN_PATH: { Moby_2C56B0 *p; - if (fighter_data->fBC == -1 || - (p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->fBC << 8))) == 0 || + if (fighter_data->linked_boss_index == -1 || + (p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->linked_boss_index << 8))) == 0 || p->state == MOBY_STATE_REMOVAL_AT_OR_ABOVE_INSTANCE_END || p->state == MOBY_STATE_REMOVAL_BELOW_INSTANCE_END || p->bBC == 4) { fast_vec_normalize(scratch_vector, D_L13_001670C0 + 0x84, 40.0f); fast_vec_sub(scratch_vector, D_L13_001670C0, scratch_vector); - fighter_data->hB6 = fighter_data->hB4 = + fighter_data->previous_path_node_index = fighter_data->target_path_node_index = select_point_index_by_distance(scratch_vector, path, 0.0f); - qcopy(&fighter_data->v90, path + (fighter_data->hB6 * 16 + 0x10)); - qcopy(&moby->pos, &fighter_data->v90); + qcopy(&fighter_data->path_join_position, + path + (fighter_data->previous_path_node_index * 16 + 0x10)); + qcopy(&moby->pos, &fighter_data->path_join_position); moby->f94 = moby->cls->f10; moby->b31 = 1; moby->flags = (moby->flags & 0xFFFE) | 0x1000; @@ -643,14 +646,15 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { qcopy(hpos, ((char *)&D_0013F3D0)); } if (moby->b31 == 0) { - fighter_data->fA8++; + fighter_data->fire_exit_frame_counter++; } else if (close != 0) { - fighter_data->fA8 = 0; + fighter_data->fire_exit_frame_counter = 0; } boss = 0; bossd = 0; - if (fighter_data->fBC != -1) { - Moby_2C56B0 *p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->fBC << 8)); + if (fighter_data->linked_boss_index != -1) { + Moby_2C56B0 *p = + (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->linked_boss_index << 8)); if (p != 0 && p->state != MOBY_STATE_REMOVAL_AT_OR_ABOVE_INSTANCE_END && p->state != MOBY_STATE_REMOVAL_BELOW_INSTANCE_END) { boss = p; @@ -666,44 +670,46 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { } { Snd *e; - if (fighter_data->fD4 == -1 || - (e = (Snd *)(((char *)&D_0013E550) + fighter_data->fD4 * 0x70))->f88 != moby || + if (fighter_data->fighter_voice_slot == -1 || + (e = (Snd *)(((char *)&D_0013E550) + fighter_data->fighter_voice_slot * 0x70)) + ->f88 != moby || e->b74 == 0) { - fighter_data->fD4 = -1; - fighter_data->fD4 = allocate_voice_for_target_entry(1, 4, moby); + fighter_data->fighter_voice_slot = -1; + fighter_data->fighter_voice_slot = allocate_voice_for_target_entry(1, 4, moby); } } func_L13_002C5248_56B0(moby, fighter_data, 1); switch (moby->bBC) { case FIGHTER_ATTACK_WAIT_TO_FIRE: if (vehd != 0 && veh->state == 4 && moby->b31 != 0 && close != 0 && boss != 0 && - bossd->b10F < 3) { - fighter_data->fB8 = scale_game_frames(0x258); - fighter_data->fAC = 1.0f; - fighter_data->fA8 = 0; + bossd->firing_fighter_update_count < 3) { + fighter_data->attack_phase_timer = scale_game_frames(0x258); + fighter_data->aim_offset_radius_scale = 1.0f; + fighter_data->fire_exit_frame_counter = 0; moby->bBC = 1; } break; case FIGHTER_ATTACK_FIRE: if (boss != 0) { - bossd->b10F++; + bossd->firing_fighter_update_count++; } - if (bossd->b10F < 4) { + if (bossd->firing_fighter_update_count < 4) { if (moby->b31 == 0) { - fighter_data->fA8++; + fighter_data->fire_exit_frame_counter++; } - if (moby->b31 == 0 || close == 0 || scale_game_frames(0x14) <= fighter_data->fA8) { - fighter_data->fB8 = scale_game_frames(0x1E); + if (moby->b31 == 0 || close == 0 || + scale_game_frames(0x14) <= fighter_data->fire_exit_frame_counter) { + fighter_data->attack_phase_timer = scale_game_frames(0x1E); moby->bBC = 2; } - if (fast_dec_timer(&fighter_data->fB8) != 0) { - fighter_data->fB8 = scale_game_frames(0x78); + if (fast_dec_timer(&fighter_data->attack_phase_timer) != 0) { + fighter_data->attack_phase_timer = scale_game_frames(0x78); moby->bBC = 2; } - if (fast_dec_timer(&fighter_data->fA4) != 0 && + if (fast_dec_timer(&fighter_data->shot_interval_timer) != 0 && optional_glow_suppression_level < 0.9f && blarg_space_fighter_fire_suppression_level < 0.9f) { - fighter_data->fA4 = + fighter_data->shot_interval_timer = scale_game_frames(6) + truncate_float_to_s32((optional_glow_suppression_level + blarg_space_fighter_fire_suppression_level) * @@ -718,11 +724,14 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { fast_vec_cross(lateral_aim_offset, &vehd->vel, up); fast_vec_cross(up, lateral_aim_offset, &vehd->vel); - fast_vec_normalize( - up, up, fighter_data->fAC * 5.0f * fast_sin(fighter_data->fB0)); + fast_vec_normalize(up, + up, + fighter_data->aim_offset_radius_scale * 5.0f * + fast_sin(fighter_data->aim_offset_angle_radians)); fast_vec_normalize(lateral_aim_offset, lateral_aim_offset, - fighter_data->fAC * 5.0f * fast_cos(fighter_data->fB0)); + fighter_data->aim_offset_radius_scale * 5.0f * + fast_cos(fighter_data->aim_offset_angle_radians)); fast_vec_add(scratch_vector, hpos, up); fast_vec_add(scratch_vector, scratch_vector, lateral_aim_offset); add_random_offset_to_vector_xyz(scratch_vector, 0.6f); @@ -742,21 +751,23 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { 5.0f); allocate_voice_for_target_entry(0, 0, moby); } - fighter_data->fAC = - fighter_data->fAC * + fighter_data->aim_offset_radius_scale = + fighter_data->aim_offset_radius_scale * ((random_float_between(0.92f, 0.94f) - 1.0f) * D_0015ED60 + 1.0f); - if (fighter_data->fB0 > 1.5707964f) { - fighter_data->fB0 = fighter_data->fB0 - random_float_between(20.0f, 40.0f) * - 0.017453292f * D_0015ED6C; + if (fighter_data->aim_offset_angle_radians > 1.5707964f) { + fighter_data->aim_offset_angle_radians = + fighter_data->aim_offset_angle_radians - + random_float_between(20.0f, 40.0f) * 0.017453292f * D_0015ED6C; } else { - fighter_data->fB0 = fighter_data->fB0 + random_float_between(20.0f, 40.0f) * - 0.017453292f * D_0015ED6C; + fighter_data->aim_offset_angle_radians = + fighter_data->aim_offset_angle_radians + + random_float_between(20.0f, 40.0f) * 0.017453292f * D_0015ED6C; } } } break; case FIGHTER_ATTACK_COOLDOWN: - if (fast_dec_timer(&fighter_data->fB8) != 0) { + if (fast_dec_timer(&fighter_data->attack_phase_timer) != 0) { moby->bBC = 0; } break; @@ -767,12 +778,12 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { Moby_2C56B0 *boss; Boss *bossd; - if (fighter_data->fD4 != -1) { - Snd *e = (Snd *)(((char *)&D_0013E550) + fighter_data->fD4 * 0x70); + if (fighter_data->fighter_voice_slot != -1) { + Snd *e = (Snd *)(((char *)&D_0013E550) + fighter_data->fighter_voice_slot * 0x70); if (e->f88 == moby && e->b74 != 0) { - release_voice_slot(fighter_data->fD4); + release_voice_slot(fighter_data->fighter_voice_slot); } - fighter_data->fD4 = -1; + fighter_data->fighter_voice_slot = -1; } fast_vec_sub(scratch_vector, D_L13_001670C0, &moby->pos); func_L00_0025F4A8_alt(moby, @@ -815,8 +826,9 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { } boss = 0; bossd = 0; - if (fighter_data->fBC != -1) { - Moby_2C56B0 *p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->fBC << 8)); + if (fighter_data->linked_boss_index != -1) { + Moby_2C56B0 *p = + (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->linked_boss_index << 8)); if (p != 0 && p->state != MOBY_STATE_REMOVAL_AT_OR_ABOVE_INSTANCE_END && p->state != MOBY_STATE_REMOVAL_BELOW_INSTANCE_END) { boss = p; @@ -835,11 +847,11 @@ void blarg_space_fighter_update(Moby_2C56B0 *moby) { } case FIGHTER_WAIT_TO_REINITIALIZE: { Moby_2C56B0 *p; - if (fighter_data->fBC != -1 && - (p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->fBC << 8))) != 0 && + if (fighter_data->linked_boss_index != -1 && + (p = (Moby_2C56B0 *)(D_L13_0015FFD8 + (fighter_data->linked_boss_index << 8))) != 0 && p->state != MOBY_STATE_REMOVAL_AT_OR_ABOVE_INSTANCE_END && p->state != MOBY_STATE_REMOVAL_BELOW_INSTANCE_END && p->bBC != 4) { - fighter_data->f20 = fighter_data->h24; + fighter_data->f20 = fighter_data->reinitialization_health; moby->state = FIGHTER_INITIALIZE; } break; diff --git a/src/overlays/l13/mobys/blarg_turret.c b/src/overlays/l13/mobys/blarg_turret.c index 13bdcc705c..b9f22aa59f 100644 --- a/src/overlays/l13/mobys/blarg_turret.c +++ b/src/overlays/l13/mobys/blarg_turret.c @@ -53,7 +53,7 @@ typedef struct Moby_2B5368 { char pad30[0x10]; V4_2B5368 rot; char pad50[3]; - unsigned char b53; + unsigned char animation_sequence_index; char pad54[0x24]; void *data; char pad7C[0x2A]; @@ -131,7 +131,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { turret_moby->scale = turret_moby->cls->scale * 1.5f; data->gun = FUN_L13_002b4958_2b0e80(turret_moby); data->f54 = turret_moby->rot.z; - if (turret_moby->b53 != 0) { + if (turret_moby->animation_sequence_index != 0) { blend_moby_animation(turret_moby, 0, 0, 10); } turret_moby->state = BLARG_TURRET_STATE_WAIT_FOR_TARGET; @@ -146,7 +146,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { (data->volume == -1 || is_point_inside_clip_volume(D_0013F420_2b0e80, data->volume) != 0)) { data->f68 = 8.0f; - if (turret_moby->b53 != 1) { + if (turret_moby->animation_sequence_index != 1) { int animation_start_frame = random_int_between(0, 3); blend_moby_animation( turret_moby, 1, animation_start_frame, random_int_between(7, 13)); @@ -162,7 +162,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { if (data->gun == 0 || data->gun->cls_id != 0x24 || (unsigned char)data->gun->state == 0xFE || (unsigned char)data->gun->state == 0xFD || (unsigned char)data->gun->state == 2) { - if (turret_moby->b53 != 0) { + if (turret_moby->animation_sequence_index != 0) { blend_moby_animation(turret_moby, 0, 0, random_int_between(7, 13)); } data->f64 = 1.0f; @@ -178,7 +178,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { vector_distance_xy(&turret_moby->pos, &target_moby->pos) > 22.0f || (data->volume != -1 && is_point_inside_clip_volume(D_0013F420_2b0e80, data->volume) == 0)) { - if (turret_moby->b53 != 0) { + if (turret_moby->animation_sequence_index != 0) { blend_moby_animation(turret_moby, 0, 0, random_int_between(7, 13)); } turret_moby->state = BLARG_TURRET_STATE_WAIT_FOR_TARGET; @@ -206,7 +206,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { if (data->gun == 0 || data->gun->cls_id != 0x24 || (unsigned char)data->gun->state == 0xFE || (unsigned char)data->gun->state == 0xFD || (unsigned char)data->gun->state == 2) { - if (turret_moby->b53 != 0) { + if (turret_moby->animation_sequence_index != 0) { blend_moby_animation(turret_moby, 0, 0, random_int_between(7, 13)); } data->f64 = 1.0f; @@ -267,7 +267,7 @@ void blarg_turret_update(Moby_2B5368 *turret_moby) { extern float blarg_turret_launch_displacement_scale_gp __asm__("D_L13_00161388") __attribute__((sda)); -int D_L13_0016138C = 2; +int l13_blarg_turret_fire_interval_frames __asm__("D_L13_0016138C") = 2; void fire_blarg_turret_projectile(struct Moby *moby) __asm__("FUN_L13_002b47a0"); @@ -277,7 +277,7 @@ void fire_blarg_turret_projectile(struct Moby *moby) { char *blarg_turret_vars; float target_distance, x, projectile_yaw; blarg_turret_vars = (char *)moby->pvars; - if (frame_count % D_L13_0016138C == 0) { + if (frame_count % l13_blarg_turret_fire_interval_frames == 0) { moby_point_position(moby, 0, projectile_spawn_position); target_distance = vector_distance_xy(&moby->pos, *(char **)(blarg_turret_vars + 0x40) + 0x10); diff --git a/src/overlays/l13/mobys/fighter_jet.c b/src/overlays/l13/mobys/fighter_jet.c index 853d0bb33b..b7b53d983a 100644 --- a/src/overlays/l13/mobys/fighter_jet.c +++ b/src/overlays/l13/mobys/fighter_jet.c @@ -112,15 +112,15 @@ extern void add_random_offset_to_vector_xyz(float *v, float s) __asm__("FUN_L00_ extern void spawn_type_74_particle(void *, float *, float *, void *, int) __asm__("FUN_L01_0028a7a8"); -short D_L13_001613D8 = 0xff; +short l13_fighter_jet_first_spawn_particle_definition __asm__("D_L13_001613D8") = 0xff; -short D_L13_001613E8 = -1; +short l13_fighter_jet_second_spawn_particle_definition __asm__("D_L13_001613E8") = -1; -short D_L13_001613F8 = 0x7f4f; +short l13_fighter_jet_third_spawn_particle_definition __asm__("D_L13_001613F8") = 0x7f4f; -short D_L13_00161408 = -32513; +short l13_fighter_jet_extra_offset_particle_definition __asm__("D_L13_00161408") = -32513; -short D_L13_00161418 = 0x7f00; +short l13_fighter_jet_extra_joint_particle_definition __asm__("D_L13_00161418") = 0x7f00; /* Sets the state of every live moby of class id whose state is not negative. */ /* Ported from rac1-decomp (src/overlays/l13_gemlik/mobyutil_00266128.c: func_L13_00266128), where it is exact; names translated to the US level program. */ @@ -318,20 +318,29 @@ void spawn_fighter_jet_joint_particles(void *moby, char *flight_data) { -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 2.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, first_particle_spawn_position, initial_particle_velocity, &D_L13_001613D8, 1); + spawn_type_74_particle(moby, + first_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_first_spawn_particle_definition, + 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 3.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, second_particle_spawn_position, initial_particle_velocity, &D_L13_001613E8, 1); + spawn_type_74_particle(moby, + second_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_second_spawn_particle_definition, + 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 4.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, third_particle_spawn_position, initial_particle_velocity, &D_L13_001613F8, 1); + spawn_type_74_particle(moby, + third_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_third_spawn_particle_definition, + 1); if (*(float *)(flight_data + 0xC4) > 0.5f) { add_random_offset_to_vector_xyz(first_particle_spawn_position, *(float *)(flight_data + 0xC4) * 0.02f + 0.01f); @@ -343,8 +352,11 @@ void spawn_fighter_jet_joint_particles(void *moby, char *flight_data) { -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 2.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, first_particle_spawn_position, initial_particle_velocity, &D_L13_001613D8, 1); + spawn_type_74_particle(moby, + first_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_first_spawn_particle_definition, + 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 3.0f) * frame_time) * @@ -352,26 +364,35 @@ void spawn_fighter_jet_joint_particles(void *moby, char *flight_data) { spawn_type_74_particle(moby, second_particle_spawn_position, initial_particle_velocity, - &D_L13_001613E8, + &l13_fighter_jet_second_spawn_particle_definition, 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 4.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, third_particle_spawn_position, initial_particle_velocity, &D_L13_001613F8, 1); + spawn_type_74_particle(moby, + third_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_third_spawn_particle_definition, + 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 2.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, first_particle_spawn_position, initial_particle_velocity, &D_L13_00161408, 1); + spawn_type_74_particle(moby, + first_particle_spawn_position, + initial_particle_velocity, + &l13_fighter_jet_extra_offset_particle_definition, + 1); initial_particle_velocity[0] = -((random_float_between(6.0f, 7.0f) + *(float *)(flight_data + 0xC4) * 3.0f) * frame_time) * particle_velocity_scale; - spawn_type_74_particle( - moby, joint_world_position, initial_particle_velocity, &D_L13_00161418, 1); + spawn_type_74_particle(moby, + joint_world_position, + initial_particle_velocity, + &l13_fighter_jet_extra_joint_particle_definition, + 1); } } } @@ -464,7 +485,7 @@ extern float fighter_jet_target_selection_offset_vector[] __asm__("D_L13_001672E extern float normalize_angle(float) __asm__("FUN_L00_0025e310"); -short D_L13_001613C8 = 2; +short l13_fighter_jet_offscreen_arrow_vertices __asm__("D_L13_001613C8") = 2; extern unsigned char D_0013E500[]; @@ -669,7 +690,7 @@ int select_fighter_jet_target_and_draw_indicators(int source_moby, tab, 0x1E, 0xFFFFF3, 0x500000FF, x, y, 1.3f, -ang); } } else { - emit_transformed_2d_vertex_packet(&D_L13_001613C8, + emit_transformed_2d_vertex_packet(&l13_fighter_jet_offscreen_arrow_vertices, 3, 0xFFFFF3, (arrow_alpha << 24) | 0x8000, @@ -1732,7 +1753,7 @@ int hp_bar_saved __asm__("D_L13_001613C4") = 0; extern short fighter_jet_hidden_moby_classes[] __asm__("D_L13_001CBDE8"); -short D_L13_00161440 = 0x7f; +short l13_fighter_jet_mount_flag_moby_classes __asm__("D_L13_00161440") = 0x7f; extern float D_L13_0015F3FC; @@ -1891,7 +1912,7 @@ void fighter_jet_update(Jet *jet_moby) { if (jet_data->group_b > 0) jet_group_state(jet_data->group_b, 0, 0, 0); jet_group_switch(fighter_jet_hidden_moby_classes, 1, 1, -1); - jet_group_switch(&D_L13_00161440, 1, -1, -1); + jet_group_switch(&l13_fighter_jet_mount_flag_moby_classes, 1, -1, -1); jet_group_flag(0x102, 0); jet_data->lock_index = -1; jet_data->start_timer = scale_game_frames(575); @@ -1993,7 +2014,7 @@ void fighter_jet_update(Jet *jet_moby) { if (jet_data->group_b > 0) jet_group_state(jet_data->group_b, 1, 1, 1); jet_group_switch(fighter_jet_hidden_moby_classes, 0, 0, -1); - jet_group_switch(&D_L13_00161440, 0, -1, -1); + jet_group_switch(&l13_fighter_jet_mount_flag_moby_classes, 0, -1, -1); jet_group_flag(0x102, 0); jet_moby->position[2] += 3.0f; jet_moby->scale = jet_moby->model->scale * 0.25f; @@ -2044,7 +2065,7 @@ void fighter_jet_update(Jet *jet_moby) { if (jet_data->group_b > 0) jet_group_state(jet_data->group_b, 0, 0, 0); jet_group_switch(fighter_jet_hidden_moby_classes, 1, 1, -1); - jet_group_switch(&D_L13_00161440, 1, -1, -1); + jet_group_switch(&l13_fighter_jet_mount_flag_moby_classes, 1, -1, -1); jet_group_flag(0x102, 0); if (jet_data->exit_path != -1) { LevelCuboid *path = &l13_cuboids[jet_data->exit_path]; @@ -2158,7 +2179,7 @@ void fighter_jet_update(Jet *jet_moby) { if (jet_data->group_b > 0) jet_group_state(jet_data->group_b, 0, 0, 0); jet_group_switch(fighter_jet_hidden_moby_classes, 1, 1, -1); - jet_group_switch(&D_L13_00161440, 1, -1, -1); + jet_group_switch(&l13_fighter_jet_mount_flag_moby_classes, 1, -1, -1); jet_group_flag(0x102, 0); path = &l13_cuboids[jet_data->destination_path]; set_race_camera(&path->pos, &path->rot, 0, 1); diff --git a/src/overlays/l13/mobys/gemlik_projectile.c b/src/overlays/l13/mobys/gemlik_projectile.c index 0bab8a5d0e..c6a215aafd 100644 --- a/src/overlays/l13/mobys/gemlik_projectile.c +++ b/src/overlays/l13/mobys/gemlik_projectile.c @@ -75,13 +75,13 @@ typedef struct { struct L13Ent00178480 { char pad0[0x24]; - int i24; + int hit_flags; unsigned char b28; unsigned char b29; - unsigned short s2A; - float f2C; + unsigned short source_oclass; + float damage; int pad30; - char *p34; + char *owner_moby; char pad38[8]; }; @@ -145,19 +145,19 @@ void gemlik_projectile_update(struct Moby *moby) { *(unsigned short *)(work.hit + 0x1A) = *(unsigned short *)((char *)moby + 0xA6); work.hit[0x19] = 1; if ((unsigned char)ent[0xA4] == 0xFF || - (target_hit_entry = &l13_moby_hit_entries[(unsigned char)ent[0xA4]])->p34 != - ent) { + (target_hit_entry = &l13_moby_hit_entries[(unsigned char)ent[0xA4]]) + ->owner_moby != ent) { record_moby_hit(ent, work.hit); } else { - target_hit_entry->f2C += 1.0f; + target_hit_entry->damage += 1.0f; l13_moby_hit_entries[(unsigned char)ent[0xA4]].b28 = 1; l13_moby_hit_entries[(unsigned char)ent[0xA4]].b29 = 1; - l13_moby_hit_entries[(unsigned char)ent[0xA4]].s2A = + l13_moby_hit_entries[(unsigned char)ent[0xA4]].source_oclass = *(unsigned short *)((char *)moby + 0xA6); { struct L13Ent00178480 *matched_target_hit_entry = &l13_moby_hit_entries[(unsigned char)ent[0xA4]]; - matched_target_hit_entry->i24 = hit_mask; + matched_target_hit_entry->hit_flags = hit_mask; } } break; diff --git a/src/overlays/l13/mobys/homing_rocket.c b/src/overlays/l13/mobys/homing_rocket.c index 6dcd83e3de..836505c933 100644 --- a/src/overlays/l13/mobys/homing_rocket.c +++ b/src/overlays/l13/mobys/homing_rocket.c @@ -102,8 +102,8 @@ typedef struct Veh_2C27B0 { char pad0[0x64]; float f64; char pad68[0x28]; - float f90; - float f94; + float lead_yaw_offset; + float lead_pitch_offset; } Veh_2C27B0; typedef struct Tex { @@ -286,8 +286,10 @@ void level_13_homing_rocket_update(ProjectileMoby *rocket_moby) { if (hero_state->veh != 0 && hero_state->veh->cls_id == 0x45 && rocket_data->owner->state != 5) { Veh_2C27B0 *vd = hero_state->veh->data; - float vehicle_lead_yaw = fast_add_rotations(hero_state->veh->rot.z, vd->f90); - float vehicle_lead_pitch = fast_add_rotations(hero_state->veh->rot.y, vd->f94); + float vehicle_lead_yaw = + fast_add_rotations(hero_state->veh->rot.z, vd->lead_yaw_offset); + float vehicle_lead_pitch = + fast_add_rotations(hero_state->veh->rot.y, vd->lead_pitch_offset); build_spherical_offset_c(&scratch_vector, fast_vec_dist(&rocket_moby->pos, &hero_state->veh->pos) / (rocket_data->speed + 24.0f) * vd->f64, diff --git a/src/overlays/l13/mobys/hovering_rocket_attacker.c b/src/overlays/l13/mobys/hovering_rocket_attacker.c index c1fd5f9dea..ea787c35e3 100644 --- a/src/overlays/l13/mobys/hovering_rocket_attacker.c +++ b/src/overlays/l13/mobys/hovering_rocket_attacker.c @@ -87,7 +87,7 @@ typedef struct HoveringRocketAttackerVars { u8 pad_5B[0x5]; u8 anim_state; u8 pad_61[0x6]; - u8 unk67; + u8 hit_reaction_interpolation_target; u8 pad_68[0x8]; f32 unk70[4]; u8 pad_80[0x30]; @@ -107,7 +107,7 @@ typedef struct HoveringRocketAttackerVars { u8 *rocket1; u8 *rocket0; f32 unk100[4]; - s32 unk110; + s32 voice_handle; } HoveringRocketAttackerVars; /* Moby class 101 */ @@ -154,7 +154,7 @@ void hovering_rocket_attacker_update(unsigned char *moby) { moby_data->unk100[0] = random_angle_radians(); moby_data->unk100[2] = random_angle_radians(); moby_data->unk100[3] = random_angle_radians(); - moby_data->unk110 = -1; + moby_data->voice_handle = -1; break; case WAIT_TO_MOVE_TO_TABLE_POINT: if (moby_data->unkB4 == 2) @@ -403,9 +403,9 @@ void update_hovering_rocket_attacker_common(unsigned char *moby) { moby_data = ((unsigned char *)MOBY(moby)->pvars); if (MOBY(moby)->state == UPDATE_INITIALIZE) return; - if (moby_data->unk110 == -1 || voice_is_playing(moby, moby_data->unk110) == 0) { - moby_data->unk110 = -1; - moby_data->unk110 = FUN_L13_002c2d30_allocate(1, 4, moby); + if (moby_data->voice_handle == -1 || voice_is_playing(moby, moby_data->voice_handle) == 0) { + moby_data->voice_handle = -1; + moby_data->voice_handle = FUN_L13_002c2d30_allocate(1, 4, moby); } update_moby_vertical_oscillation( 0.5f, frame_time * 1.39626336f, moby, moby_data->unk100, &moby_data->unk100[1]); @@ -505,7 +505,7 @@ void update_hovering_rocket_attacker_common(unsigned char *moby) { switch (hit_reaction_code) { case HIT_REACTION_HIGH_INTERPOLATION_TARGET: case HIT_REACTION_HIGH_INTERPOLATION_TARGET_ALTERNATE: - moby_data->unk67 = 0xFA; + moby_data->hit_reaction_interpolation_target = 0xFA; break; case HIT_REACTION_LOW_INTERPOLATION_TARGET: case HIT_REACTION_LOW_INTERPOLATION_TARGET_ALTERNATE: @@ -513,13 +513,13 @@ void update_hovering_rocket_attacker_common(unsigned char *moby) { case HIT_REACTION_LOW_INTERPOLATION_TARGET_THIRD_ALTERNATE: case HIT_REACTION_LOW_INTERPOLATION_TARGET_FOURTH_ALTERNATE: case HIT_REACTION_LOW_INTERPOLATION_TARGET_FIFTH_ALTERNATE: - moby_data->unk67 = 0x78; + moby_data->hit_reaction_interpolation_target = 0x78; break; case HIT_REACTION_LETHAL: case HIT_REACTION_REMOVE: FUN_L00_00257470(moby, 0, -1); MOBY(moby)->state = EMIT_EFFECT_AND_REMOVE; - moby_data->unk67 = 0xF0; + moby_data->hit_reaction_interpolation_target = 0xF0; break; case HIT_REACTION_NONE: case HIT_REACTION_NO_HIT: diff --git a/src/overlays/l13/mobys/linked_switch_group.c b/src/overlays/l13/mobys/linked_switch_group.c index 599bfa5a92..fe68f3afba 100644 --- a/src/overlays/l13/mobys/linked_switch_group.c +++ b/src/overlays/l13/mobys/linked_switch_group.c @@ -109,14 +109,14 @@ typedef struct { short unk70; short unk72; short unk74; - short unk76; + short opened_color_flash_timer; u8 unk78; - u8 unk79; - u8 unk7A; - u8 unk7B; + u8 is_group_follower; + u8 reported_hit_count; + u8 enumerated_group_entry_count; int unk7C; char *unk80; - short unk84; + short opened_state_duration; } SwitchVars; #define MIN(a, b) ((a) < (b) ? (a) : (b)) @@ -140,11 +140,11 @@ void linked_switch_group_update(char *moby) { } switch ((unsigned char)MOBY(moby)->state) { case INITIALIZE_LINKED_GROUP: - if (switch_vars->unk79 == 0) { + if (switch_vars->is_group_follower == 0) { char *iter[4]; char *linked; - switch_vars->unk7B = 0; + switch_vars->enumerated_group_entry_count = 0; switch_vars->unk80 = moby; get_first_moby_in_group(iter, (unsigned char)MOBY(moby)->group, 0, 0); while ((linked = *iter) != 0) { @@ -153,17 +153,17 @@ void linked_switch_group_update(char *moby) { SwitchVars *other_data = *(SwitchVars **)(linked + 0x78); other_data->unk80 = moby; - other_data->unk79 = 1; + other_data->is_group_follower = 1; } - switch_vars->unk7B++; + switch_vars->enumerated_group_entry_count++; get_next_moby_in_group(iter, iter[0], 0, 0); } } switch_vars->unk70 = 0; switch_vars->unk72 = 0; - switch_vars->unk7A = 0; + switch_vars->reported_hit_count = 0; switch_vars->unk74 = 0; - switch_vars->unk76 = 0; + switch_vars->opened_color_flash_timer = 0; set_moby_color(moby, 0x80, 0x80, 0x80); MOBY(moby)->state = MONITOR_LINKED_GROUP_HITS; @@ -176,29 +176,29 @@ void linked_switch_group_update(char *moby) { linked = switch_vars->unk80; linked_data = *(SwitchVars **)(linked + 0x78); if ((unsigned char)linked[0x20] == 1) { - switch_vars->unk7A = 0; + switch_vars->reported_hit_count = 0; linked[0x20] = 2; if (linked_data->unk7C > 0) { linked_data->unk70 = scale_game_frames(switch_vars->unk7C); } } - linked_data->unk7A++; + linked_data->reported_hit_count++; allocate_voice_for_target_entry(3, 0, moby); set_moby_color(moby, 0, 0xFF, 0); switch_vars->unk74 = 1; } if ((unsigned char)MOBY(moby)->state == WAIT_FOR_LINKED_GROUP_COMPLETION) { - if (switch_vars->unk7A >= switch_vars->unk7B) { + if (switch_vars->reported_hit_count >= switch_vars->enumerated_group_entry_count) { set_moby_list_state((unsigned char)MOBY(moby)->group, 4); allocate_voice_for_target_entry(1, 0, moby); - switch_vars->unk70 = switch_vars->unk84; + switch_vars->unk70 = switch_vars->opened_state_duration; debug_print( D_L13_001F4D90, ((short)MOBY(moby)->save_id), MOBY(moby)->oclass, frame_count); MOBY(moby)->state = UPDATE_OPENED_STATE; } else { if (switch_vars->unk7C >= 0) { if (fast_dec_timer_s16(&switch_vars->unk70) != 0) { - switch_vars->unk7A = 0; + switch_vars->reported_hit_count = 0; switch_vars->unk74 = 0; allocate_voice_for_target_entry(2, 0, moby); @@ -221,16 +221,16 @@ void linked_switch_group_update(char *moby) { case RESET_HIT_STATE: set_moby_color(moby, 0x80, 0x80, 0x80); - switch_vars->unk7A = 0; + switch_vars->reported_hit_count = 0; switch_vars->unk74 = 0; switch_vars->unk20 = (float)switch_vars->unk24; MOBY(moby)->state = MONITOR_LINKED_GROUP_HITS; break; case UPDATE_OPENED_STATE: - if (switch_vars->unk79 == 0 && switch_vars->unk70 != -1) { + if (switch_vars->is_group_follower == 0 && switch_vars->unk70 != -1) { if (fast_dec_timer_s16(&switch_vars->unk70) != 0) { - switch_vars->unk7A = 0; + switch_vars->reported_hit_count = 0; switch_vars->unk74 = 0; allocate_voice_for_target_entry(2, 0, moby); @@ -247,8 +247,8 @@ void linked_switch_group_update(char *moby) { scale_game_frames(5) + switch_vars->unk70 / scale_game_frames(0x28)); } } - if (fast_dec_timer_s16(&switch_vars->unk76) != 0) { - switch_vars->unk76 = scale_game_frames(0x14); + if (fast_dec_timer_s16(&switch_vars->opened_color_flash_timer) != 0) { + switch_vars->opened_color_flash_timer = scale_game_frames(0x14); if (switch_vars->unk78 != 0) { set_moby_color(moby, 0, 0xFF, 0); switch_vars->unk78 = 0; diff --git a/src/overlays/l13/mobys/moby_volume_trigger.c b/src/overlays/l13/mobys/moby_volume_trigger.c index 19d7aa4cf8..24720e0b4a 100644 --- a/src/overlays/l13/mobys/moby_volume_trigger.c +++ b/src/overlays/l13/mobys/moby_volume_trigger.c @@ -32,25 +32,25 @@ typedef struct MobyVolumeTriggerVars { s32 unk1C; s32 unk20; s8 unk24; - s8 unk25; - s8 unk26; - s8 unk27; + s8 second_moby_entry_state; + s8 third_moby_entry_state; + s8 fourth_moby_entry_state; s8 unk28; s8 unk29; s8 unk2A; - s8 unk2B; + s8 fourth_moby_exit_state; s8 unk2C; - s8 unk2D; - s8 unk2E; - s8 unk2F; + s8 second_list_entry_state; + s8 third_list_entry_state; + s8 fourth_list_entry_state; s8 unk30; - s8 unk31; - s8 unk32; - s8 unk33; + s8 second_list_exit_state; + s8 third_list_exit_state; + s8 fourth_list_exit_state; s8 unk34; - s8 unk35; + s8 trigger_exit_state; s8 unk36; - s8 unk37; + s8 trigger_exit_command; s8 unk38; } MobyVolumeTriggerVars; @@ -89,15 +89,17 @@ void moby_volume_trigger_update(char *moby) { unsigned char st = m[0x20]; if (st != 0xFE) { if (st != 0xFD) { - if (volume_trigger_vars->unk25 != -1) - m[0x20] = volume_trigger_vars->unk25; + if (volume_trigger_vars->second_moby_entry_state != -1) + m[0x20] = volume_trigger_vars->second_moby_entry_state; } } } } } - if (volume_trigger_vars->unk18 != -1 && volume_trigger_vars->unk2D != -1) - set_moby_list_state(volume_trigger_vars->unk18, volume_trigger_vars->unk2D); + if (volume_trigger_vars->unk18 != -1 && + volume_trigger_vars->second_list_entry_state != -1) + set_moby_list_state(volume_trigger_vars->unk18, + volume_trigger_vars->second_list_entry_state); { int uid = volume_trigger_vars->unkC; if (uid != -1) { @@ -106,15 +108,17 @@ void moby_volume_trigger_update(char *moby) { unsigned char st = m[0x20]; if (st != 0xFE) { if (st != 0xFD) { - if (volume_trigger_vars->unk26 != -1) - m[0x20] = volume_trigger_vars->unk26; + if (volume_trigger_vars->third_moby_entry_state != -1) + m[0x20] = volume_trigger_vars->third_moby_entry_state; } } } } } - if (volume_trigger_vars->unk1C != -1 && volume_trigger_vars->unk2E != -1) - set_moby_list_state(volume_trigger_vars->unk1C, volume_trigger_vars->unk2E); + if (volume_trigger_vars->unk1C != -1 && + volume_trigger_vars->third_list_entry_state != -1) + set_moby_list_state(volume_trigger_vars->unk1C, + volume_trigger_vars->third_list_entry_state); { int uid = volume_trigger_vars->unk10; if (uid != -1) { @@ -123,15 +127,17 @@ void moby_volume_trigger_update(char *moby) { unsigned char st = m[0x20]; if (st != 0xFE) { if (st != 0xFD) { - if (volume_trigger_vars->unk27 != -1) - m[0x20] = volume_trigger_vars->unk27; + if (volume_trigger_vars->fourth_moby_entry_state != -1) + m[0x20] = volume_trigger_vars->fourth_moby_entry_state; } } } } } - if (volume_trigger_vars->unk20 != -1 && volume_trigger_vars->unk2F != -1) - set_moby_list_state(volume_trigger_vars->unk20, volume_trigger_vars->unk2F); + if (volume_trigger_vars->unk20 != -1 && + volume_trigger_vars->fourth_list_entry_state != -1) + set_moby_list_state(volume_trigger_vars->unk20, + volume_trigger_vars->fourth_list_entry_state); if (volume_trigger_vars->unk34 != -1) MOBY(moby)->state = volume_trigger_vars->unk34; if (volume_trigger_vars->unk36 != -1) @@ -172,8 +178,10 @@ void moby_volume_trigger_update(char *moby) { } } } - if (volume_trigger_vars->unk18 != -1 && volume_trigger_vars->unk31 != -1) - set_moby_list_state(volume_trigger_vars->unk18, volume_trigger_vars->unk31); + if (volume_trigger_vars->unk18 != -1 && + volume_trigger_vars->second_list_exit_state != -1) + set_moby_list_state(volume_trigger_vars->unk18, + volume_trigger_vars->second_list_exit_state); { int uid = volume_trigger_vars->unkC; if (uid != -1) { @@ -189,8 +197,10 @@ void moby_volume_trigger_update(char *moby) { } } } - if (volume_trigger_vars->unk1C != -1 && volume_trigger_vars->unk32 != -1) - set_moby_list_state(volume_trigger_vars->unk1C, volume_trigger_vars->unk32); + if (volume_trigger_vars->unk1C != -1 && + volume_trigger_vars->third_list_exit_state != -1) + set_moby_list_state(volume_trigger_vars->unk1C, + volume_trigger_vars->third_list_exit_state); { int uid = volume_trigger_vars->unk10; if (uid != -1) { @@ -199,19 +209,21 @@ void moby_volume_trigger_update(char *moby) { unsigned char st = m[0x20]; if (st != 0xFE) { if (st != 0xFD) { - if (volume_trigger_vars->unk2B != -1) - m[0x20] = volume_trigger_vars->unk2B; + if (volume_trigger_vars->fourth_moby_exit_state != -1) + m[0x20] = volume_trigger_vars->fourth_moby_exit_state; } } } } } - if (volume_trigger_vars->unk20 != -1 && volume_trigger_vars->unk33 != -1) - set_moby_list_state(volume_trigger_vars->unk20, volume_trigger_vars->unk33); - if (volume_trigger_vars->unk35 != -1) - MOBY(moby)->state = volume_trigger_vars->unk35; - if (volume_trigger_vars->unk37 != -1) - MOBY(moby)->command = volume_trigger_vars->unk37; + if (volume_trigger_vars->unk20 != -1 && + volume_trigger_vars->fourth_list_exit_state != -1) + set_moby_list_state(volume_trigger_vars->unk20, + volume_trigger_vars->fourth_list_exit_state); + if (volume_trigger_vars->trigger_exit_state != -1) + MOBY(moby)->state = volume_trigger_vars->trigger_exit_state; + if (volume_trigger_vars->trigger_exit_command != -1) + MOBY(moby)->command = volume_trigger_vars->trigger_exit_command; volume_trigger_vars->unk38 = 0; } } diff --git a/src/overlays/l13/mobys/qwarks_starfighter.c b/src/overlays/l13/mobys/qwarks_starfighter.c index cf5f5de99f..6191cbeb9d 100644 --- a/src/overlays/l13/mobys/qwarks_starfighter.c +++ b/src/overlays/l13/mobys/qwarks_starfighter.c @@ -675,14 +675,14 @@ typedef struct { Sub sub; char pad28[0x38]; char q60[7]; - unsigned char b67; + unsigned char damage_flash_red; char pad68[0x5C]; Moby_2EAE80 *list[11]; Moby_2EAE80 *first; char padF4[0xC]; - int f100; + int tractor_beam_timer_frames; char pad104[0x18]; - int i11C; + int tractor_beam_voice_slot_index; char pad120[0x18]; unsigned short h138; char pad13A[0xE]; @@ -693,8 +693,8 @@ typedef struct { char pad0[0x20]; Moby_2EAE80 *target; char pad24[6]; - unsigned short h2A; - float f2C; + unsigned short damage_adjustment_selector; + float damage_amount; } Hit_2EAE80; typedef struct { @@ -706,7 +706,7 @@ typedef struct { typedef struct { char pad0[0x15F0]; - Moby_2EAE80 *f15F0; + Moby_2EAE80 *piloted_ship_moby; } Hero_2EAE80; extern void begin_starfighter_death_sequence(); @@ -771,19 +771,19 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { r->target->oclass == 0xD4)) { moby_data->first->bA4 = 0xFF; } else if (hit >= 2) { - if (0.0f < r->f2C && r->h2A == 0x3F1) { - r->f2C = 0.3f; + if (0.0f < r->damage_amount && r->damage_adjustment_selector == 0x3F1) { + r->damage_amount = 0.3f; } if (r != 0 && moby->bBC == 7) { - r->f2C = r->f2C * 1.5f; + r->damage_amount = r->damage_amount * 1.5f; } - if (dd->health <= r->f2C) { + if (dd->health <= r->damage_amount) { func_L13_002EAC18_2EAE80(moby, moby_data, dd, r); mode = ATTACHMENT_DAMAGE_LETHAL; moby_data->first->bA4 = 0xFF; } else { - dd->health = dd->health - r->f2C; - moby_data->b67 = 0xFA; + dd->health = dd->health - r->damage_amount; + moby_data->damage_flash_red = 0xFA; mode = ATTACHMENT_DAMAGE_APPLIED; moby_data->sub.h6 = scale_game_frames(0); func_L00_0025E4B0_2EAE80(moby, moby_data->q60); @@ -811,12 +811,16 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { moby->state = STARFIGHTER_STATE_FOLLOW_COMMAND_PATH_WITH_TIMED_VOLLEY; } moby->bBC++; - if (moby_data->i11C != -1) { - if (((Voice *)(D_0013E550 + moby_data->i11C * 0x70))->f88 == moby && - ((Voice *)(D_0013E550 + moby_data->i11C * 0x70))->b74 != 0) { - release_voice_slot(moby_data->i11C); + if (moby_data->tractor_beam_voice_slot_index != -1) { + if (((Voice *)(D_0013E550 + + moby_data->tractor_beam_voice_slot_index * 0x70)) + ->f88 == moby && + ((Voice *)(D_0013E550 + + moby_data->tractor_beam_voice_slot_index * 0x70)) + ->b74 != 0) { + release_voice_slot(moby_data->tractor_beam_voice_slot_index); } - moby_data->i11C = -1; + moby_data->tractor_beam_voice_slot_index = -1; } rf = 1; { @@ -859,26 +863,26 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { if (hit < 2) { continue; } - if (0.0f < r->f2C) { - switch (r->h2A) { + if (0.0f < r->damage_amount) { + switch (r->damage_adjustment_selector) { case CHILD_HIT_FIXED_DAMAGE: - r->f2C = 0.1f; + r->damage_amount = 0.1f; break; case CHILD_HIT_HALF_DAMAGE: - r->f2C = r->f2C * 0.5f; + r->damage_amount = r->damage_amount * 0.5f; break; } } if (r != 0 && moby->bBC == 7) { - r->f2C = r->f2C * 1.5f; + r->damage_amount = r->damage_amount * 1.5f; } - if (dd->health <= r->f2C) { + if (dd->health <= r->damage_amount) { func_L13_002EAC18_2EAE80(moby, moby_data, dd, r); mode = ATTACHMENT_DAMAGE_LETHAL; moby_data->list[i]->bA4 = 0xFF; } else { - dd->health = dd->health - r->f2C; - moby_data->b67 = 0xFA; + dd->health = dd->health - r->damage_amount; + moby_data->damage_flash_red = 0xFA; mode = ATTACHMENT_DAMAGE_APPLIED; moby_data->sub.h6 = scale_game_frames(0); func_L00_0025E4B0_2EAE80(moby, moby_data->q60); @@ -888,7 +892,7 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { moby->bBC++; rf = 1; { - Vars_2EAE80 *v = ((Hero_2EAE80 *)&hero)->f15F0->vars; + Vars_2EAE80 *v = ((Hero_2EAE80 *)&hero)->piloted_ship_moby->vars; v->f88 = 0; v->fEC = 0; @@ -906,16 +910,18 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { moby->state = STARFIGHTER_STATE_FOLLOW_COMMAND_PATH_WITH_TIMED_VOLLEY; } moby->bBC++; - if (moby_data->i11C != -1) { - if (((Voice *)(D_0013E550 + moby_data->i11C * 0x70))->f88 == moby && - ((Voice *)(D_0013E550 + moby_data->i11C * 0x70))->b74 != 0) { - release_voice_slot(moby_data->i11C); + if (moby_data->tractor_beam_voice_slot_index != -1) { + if (((Voice *)(D_0013E550 + moby_data->tractor_beam_voice_slot_index * 0x70)) + ->f88 == moby && + ((Voice *)(D_0013E550 + moby_data->tractor_beam_voice_slot_index * 0x70)) + ->b74 != 0) { + release_voice_slot(moby_data->tractor_beam_voice_slot_index); } - moby_data->i11C = -1; + moby_data->tractor_beam_voice_slot_index = -1; } rf = 1; { - Vars_2EAE80 *v = ((Hero_2EAE80 *)&hero)->f15F0->vars; + Vars_2EAE80 *v = ((Hero_2EAE80 *)&hero)->piloted_ship_moby->vars; v->f88 = 0; v->fEC = 0; @@ -945,7 +951,7 @@ void process_moby_attachment_damage(Moby_2EAE80 *moby, Data_2EAE80 *moby_data) { func_L13_002E9B30_2EAE80(moby, moby_data, 0xC, 4); break; case DAMAGE_STAGE_START_TIMER_AND_QUEUE_LINE: - moby_data->f100 = scale_game_frames(0x78); + moby_data->tractor_beam_timer_frames = scale_game_frames(0x78); func_L13_002E9B30_2EAE80(moby, moby_data, 0x10, 1); break; case DAMAGE_STAGE_QUEUE_SINGLE_LINE: @@ -1446,34 +1452,34 @@ void update_qwarks_starfighter_attack_commands(void *mobyp, void *pp) { typedef struct { char pad0[0x20]; float f20; - short s24; + short starfighter_max_health; char pad26[0x4A]; float f70; - float f74; + float flight_velocity_y; int i78; int pad7C; - float v80[4]; + float tractor_beam_endpoint[4]; char pad90[0xC]; - short s9C; - short s9E; + short path_target_node_index; + short path_previous_node_index; int iA0; - float fA4; - float fA8; - float fAC; + float pitch_spring_velocity; + float yaw_spring_velocity; + float flight_speed; int paths[5]; char *parts[10]; char *owner; - char *pF0; + char *command_joint_attachment_moby; int iF4; - int iF8; - unsigned char bFC; - unsigned char bFD; - unsigned char bFE; - unsigned char bFF; - int i100; + int attack_and_death_timer_frames; + unsigned char rocket_muzzle_toggle; + unsigned char attack_sequence_counter; + unsigned char mine_attack_selected; + unsigned char tractor_beam_capture_active; + int tractor_beam_cycle_timer_frames; int hud104; - int i108; - unsigned char b10C; + int health_hud_packed_value; + unsigned char path_traversal_direction; unsigned char b10D; unsigned char b10E; unsigned char b10F; @@ -1482,18 +1488,18 @@ typedef struct { int snd118; int snd11C; int light120; - int i124; + int attack_cooldown_frames; int pad128; - int i12C; + int vendor_item_id; int pad130; - int i134; + int linked_ship_moby_index; unsigned short h138; - unsigned char b13A; - unsigned char b13B; - int i13C; + unsigned char queued_voice_line_pending; + unsigned char selected_path_slot; + int voice_line_history_mask; int pad140; - short h144; - short h146; + short long_voice_line_cooldown_frames; + short short_voice_line_cooldown_frames; unsigned char b148; } Ship388; @@ -1505,7 +1511,7 @@ typedef struct { char *cls; int pad28; float scale; - unsigned char b30; + unsigned char update_distance; unsigned char b31; short s32; unsigned short flags; @@ -1518,7 +1524,7 @@ typedef struct { char pad98[0xE]; short cls_id; char padA8[8]; - unsigned char bB0; + unsigned char visited_slot_index; char padB1[0xB]; unsigned char bBC; char padBD[3]; @@ -1561,9 +1567,9 @@ extern int D_0015ED84; extern int D_0015EEA4; -int D_L13_00161950 = 0; +int l13_starfighter_owner_unavailable_voice_line_index __asm__("D_L13_00161950") = 0; -int D_L13_00161954 = -1; +int l13_starfighter_boss_start_counter __asm__("D_L13_00161954") = -1; extern int qwarks_starfighter_command_path_slots[] __asm__("D_L13_001D3448"); @@ -1634,26 +1640,29 @@ void qwarks_starfighter_update(Moby388 *moby) { float probe[4]; int i; - starfighter_vars->i108 = truncate_float_to_s32(starfighter_vars->f20 * 16.0f) & 0xFFF0; - if (starfighter_vars->i108 >= - truncate_float_to_s32(((float)starfighter_vars->s24 - 0.5f) * 16.0f)) { - starfighter_vars->i108 |= 0xF; + starfighter_vars->health_hud_packed_value = + truncate_float_to_s32(starfighter_vars->f20 * 16.0f) & 0xFFF0; + if (starfighter_vars->health_hud_packed_value >= + truncate_float_to_s32(((float)starfighter_vars->starfighter_max_health - 0.5f) * 16.0f)) { + starfighter_vars->health_hud_packed_value |= 0xF; } if (0.5f < starfighter_vars->f20) { - int segment = - ((truncate_float_to_s32(starfighter_vars->f20) % (starfighter_vars->s24 / 6)) * 16) / - (starfighter_vars->s24 / 6); + int segment = ((truncate_float_to_s32(starfighter_vars->f20) % + (starfighter_vars->starfighter_max_health / 6)) * + 16) / + (starfighter_vars->starfighter_max_health / 6); if (segment < 0) segment = 0; - starfighter_vars->i108 += segment & 0xF; + starfighter_vars->health_hud_packed_value += segment & 0xF; } else { - starfighter_vars->i108 = 0; + starfighter_vars->health_hud_packed_value = 0; } switch (moby->state) { case STARFIGHTER_STATE_INITIALIZE: { int j; - if (moby->bB0 != 0xFF && visited52[moby->bB0 + (D_0015ED84 << 4)] == 0xFF) { + if (moby->visited_slot_index != 0xFF && + visited52[moby->visited_slot_index + (D_0015ED84 << 4)] == 0xFF) { mark_moby_for_removal(moby); return; } @@ -1669,29 +1678,30 @@ void qwarks_starfighter_update(Moby388 *moby) { *(int *)path -= 1; } } - starfighter_vars->fAC = frame_time * 42.0f * 0.1f; - starfighter_vars->f70 = fast_cos(moby->rot[2]) * starfighter_vars->fAC; - starfighter_vars->f74 = fast_sin(moby->rot[2]) * starfighter_vars->fAC; + starfighter_vars->flight_speed = frame_time * 42.0f * 0.1f; + starfighter_vars->f70 = fast_cos(moby->rot[2]) * starfighter_vars->flight_speed; + starfighter_vars->flight_velocity_y = + fast_sin(moby->rot[2]) * starfighter_vars->flight_speed; starfighter_vars->i78 = 0; qcopy(moby->pos, walker_paths[starfighter_vars->paths[0]] + 0x10); - starfighter_vars->s9E = 0; - starfighter_vars->s9C = 1; - moby->b30 = 0xFF; + starfighter_vars->path_previous_node_index = 0; + starfighter_vars->path_target_node_index = 1; + moby->update_distance = 0xFF; moby->s32 = 0xFF; - starfighter_vars->b10C = 1; - starfighter_vars->bFE = 0; - starfighter_vars->bFC = 0; + starfighter_vars->path_traversal_direction = 1; + starfighter_vars->mine_attack_selected = 0; + starfighter_vars->rocket_muzzle_toggle = 0; moby->state = STARFIGHTER_STATE_WAIT_FOR_HERO_SHIP; starfighter_vars->b10E = 8; starfighter_vars->child110 = 0; starfighter_vars->snd114 = -1; starfighter_vars->snd118 = -1; starfighter_vars->snd11C = -1; - starfighter_vars->f20 = starfighter_vars->s24; + starfighter_vars->f20 = starfighter_vars->starfighter_max_health; starfighter_vars->light120 = -1; starfighter_vars->h138 = 0; starfighter_vars->b148 = 0; - starfighter_vars->i13C = 0; + starfighter_vars->voice_line_history_mask = 0; if (starfighter_vars->hud104 != -1) { set_animation_parameter(starfighter_vars->hud104, 0); starfighter_vars->hud104 = -1; @@ -1709,22 +1719,22 @@ void qwarks_starfighter_update(Moby388 *moby) { if (*(Moby388 **)(hero + 0x15F0) != 0) { char *ship = (char *)(*(Moby388 **)(hero + 0x15F0))->d; int elapsed; - if (D_L13_00161954 == -1) { - D_L13_00161954 = D_0015EEA4; + if (l13_starfighter_boss_start_counter == -1) { + l13_starfighter_boss_start_counter = D_0015EEA4; DebugPrint_alt(qwarks_starfighter_boss_start_time_format, D_0015EEA4, D_0015EEA4 / 60, D_0015EEA4 / 360); } - elapsed = (unsigned int)(D_0015EEA4 - D_L13_00161954) / 360; + elapsed = (unsigned int)(D_0015EEA4 - l13_starfighter_boss_start_counter) / 360; if (elapsed >= 0x29) { DebugPrint_alt(qwarks_starfighter_high_elapsed_time_adjustment_message); - starfighter_vars->s24 = 0x66; + starfighter_vars->starfighter_max_health = 0x66; starfighter_vars->f20 = 102.0f; *(int *)(ship + 0x138) = 0x221; } else if (elapsed >= 0x1A) { DebugPrint_alt(qwarks_starfighter_mid_elapsed_time_adjustment_message); - starfighter_vars->s24 = 0x78; + starfighter_vars->starfighter_max_health = 0x78; starfighter_vars->f20 = 120.0f; *(int *)(ship + 0x138) = 0x234; } @@ -1741,14 +1751,16 @@ void qwarks_starfighter_update(Moby388 *moby) { (*(Moby388 **)(hero + 0x15F0))->bBC = 0; } } - starfighter_vars->hud104 = queue_animation_update(0x11, - 0xFFFF, - (int)reset_numeric_hud_element, - (int)hud_update_counter, - (int)FUN_L06_00249738, - (int)&starfighter_vars->i108, - (starfighter_vars->s24 << 4) | 0xF); - starfighter_vars->fAC += (frame_time * 42.0f - starfighter_vars->fAC) * 0.1f; + starfighter_vars->hud104 = + queue_animation_update(0x11, + 0xFFFF, + (int)reset_numeric_hud_element, + (int)hud_update_counter, + (int)FUN_L06_00249738, + (int)&starfighter_vars->health_hud_packed_value, + (starfighter_vars->starfighter_max_health << 4) | 0xF); + starfighter_vars->flight_speed += + (frame_time * 42.0f - starfighter_vars->flight_speed) * 0.1f; if (advance_moby_along_selected_path(moby, starfighter_vars, 0, 1) != 0) { char *hero = ((char *)&D_0013F350); char *ship; @@ -1758,21 +1770,25 @@ void qwarks_starfighter_update(Moby388 *moby) { *(int *)(ship + 0xEC) = 0; *(int *)(ship + 0x8C) = 0; *(int *)(ship + 0x118) = 0; - starfighter_vars->b13B = qwarks_starfighter_command_path_slots[moby->bBC]; - starfighter_vars->iF8 = scale_game_frames(0x14); + starfighter_vars->selected_path_slot = qwarks_starfighter_command_path_slots[moby->bBC]; + starfighter_vars->attack_and_death_timer_frames = scale_game_frames(0x14); moby->state = STARFIGHTER_STATE_FOLLOW_COMMAND_PATH; - starfighter_vars->s9C = select_point_index_by_distance( - moby->pos, walker_paths[starfighter_vars->paths[starfighter_vars->b13B]], 0.0f); - starfighter_vars->s9C = + starfighter_vars->path_target_node_index = select_point_index_by_distance( + moby->pos, + walker_paths[starfighter_vars->paths[starfighter_vars->selected_path_slot]], + 0.0f); + starfighter_vars->path_target_node_index = *(unsigned short *)((char *)starfighter_vars + 0x9C) + random_int_between(3, 7); - starfighter_vars->s9C = - starfighter_vars->s9C % - *(int *)walker_paths[starfighter_vars->paths[starfighter_vars->b13B]]; - starfighter_vars->s9E = starfighter_vars->s9C - 1; - if (starfighter_vars->s9E < 0) { - starfighter_vars->s9E = + starfighter_vars->path_target_node_index = + starfighter_vars->path_target_node_index % + *(int *)walker_paths[starfighter_vars->paths[starfighter_vars->selected_path_slot]]; + starfighter_vars->path_previous_node_index = + starfighter_vars->path_target_node_index - 1; + if (starfighter_vars->path_previous_node_index < 0) { + starfighter_vars->path_previous_node_index = *(unsigned short *) - walker_paths[starfighter_vars->paths[starfighter_vars->b13B]] - + walker_paths[starfighter_vars + ->paths[starfighter_vars->selected_path_slot]] - 1; } } @@ -1780,38 +1796,42 @@ void qwarks_starfighter_update(Moby388 *moby) { } case STARFIGHTER_STATE_FOLLOW_COMMAND_PATH: case STARFIGHTER_STATE_FOLLOW_COMMAND_PATH_WITH_TIMED_VOLLEY: - starfighter_vars->hud104 = queue_animation_update(0x11, - 0xFFFF, - (int)reset_numeric_hud_element, - (int)hud_update_counter, - (int)FUN_L06_00249738, - (int)&starfighter_vars->i108, - (starfighter_vars->s24 << 4) | 0xF); + starfighter_vars->hud104 = + queue_animation_update(0x11, + 0xFFFF, + (int)reset_numeric_hud_element, + (int)hud_update_counter, + (int)FUN_L06_00249738, + (int)&starfighter_vars->health_hud_packed_value, + (starfighter_vars->starfighter_max_health << 4) | 0xF); if (*(Moby388 **)(((char *)&D_00140940)) != 0 && (*(Moby388 **)(((char *)&D_00140940)))->cls_id == 0x45) { (*(Moby388 **)(((char *)&D_00140940)))->bBC = 0; } update_qwarks_starfighter_attack_commands(moby, starfighter_vars); if (update_moby_path_following_away_from_hero( - moby, starfighter_vars, starfighter_vars->b13B, 1) & + moby, starfighter_vars, starfighter_vars->selected_path_slot, 1) & 2) { - if (starfighter_vars->b13B != qwarks_starfighter_command_path_slots[moby->bBC]) { - starfighter_vars->b13B = qwarks_starfighter_command_path_slots[moby->bBC]; - starfighter_vars->s9C = select_point_index_by_distance( + if (starfighter_vars->selected_path_slot != + qwarks_starfighter_command_path_slots[moby->bBC]) { + starfighter_vars->selected_path_slot = + qwarks_starfighter_command_path_slots[moby->bBC]; + starfighter_vars->path_target_node_index = select_point_index_by_distance( moby->pos, walker_paths[starfighter_vars ->paths[qwarks_starfighter_command_path_slots[moby->bBC]]], 0.0f); - starfighter_vars->s9C = + starfighter_vars->path_target_node_index = *(unsigned short *)((char *)starfighter_vars + 0x9C) + random_int_between(3, 7); - starfighter_vars->s9C = - starfighter_vars->s9C % + starfighter_vars->path_target_node_index = + starfighter_vars->path_target_node_index % *(int *) walker_paths[starfighter_vars ->paths[qwarks_starfighter_command_path_slots[moby->bBC]]]; - starfighter_vars->s9E = starfighter_vars->s9C - 1; - if (starfighter_vars->s9E < 0) { - starfighter_vars->s9E = + starfighter_vars->path_previous_node_index = + starfighter_vars->path_target_node_index - 1; + if (starfighter_vars->path_previous_node_index < 0) { + starfighter_vars->path_previous_node_index = *(unsigned short *) walker_paths[starfighter_vars->paths [qwarks_starfighter_command_path_slots[moby->bBC]]] - @@ -1827,16 +1847,18 @@ void qwarks_starfighter_update(Moby388 *moby) { break; case STARFIGHTER_STATE_TRACTOR_BEAM: { float hero_distance; - starfighter_vars->hud104 = queue_animation_update(0x11, - 0xFFFF, - (int)reset_numeric_hud_element, - (int)hud_update_counter, - (int)FUN_L06_00249738, - (int)&starfighter_vars->i108, - (starfighter_vars->s24 << 4) | 0xF); + starfighter_vars->hud104 = + queue_animation_update(0x11, + 0xFFFF, + (int)reset_numeric_hud_element, + (int)hud_update_counter, + (int)FUN_L06_00249738, + (int)&starfighter_vars->health_hud_packed_value, + (starfighter_vars->starfighter_max_health << 4) | 0xF); update_qwarks_starfighter_attack_commands(moby, starfighter_vars); FUN_L00_0024f7c8(moby, 0x13, joint); - hero_distance = fast_vec_dist(starfighter_vars->v80, ((char *)&D_0013F3D0)); + hero_distance = + fast_vec_dist(starfighter_vars->tractor_beam_endpoint, ((char *)&D_0013F3D0)); if (starfighter_vars->snd11C != -1) { char *voice = D_0013E633_snd + 0x1D + starfighter_vars->snd11C * 0x70; if (*(Moby388 **)(voice + 0x88) == moby && *(unsigned char *)(voice + 0x74) != 0) @@ -1845,7 +1867,7 @@ void qwarks_starfighter_update(Moby388 *moby) { starfighter_vars->snd11C = -1; starfighter_vars->snd11C = allocate_voice_for_target_entry(4, 4, (int)moby); have11C: - if (starfighter_vars->bFF == 0) { + if (starfighter_vars->tractor_beam_capture_active == 0) { { char *hero = ((char *)&D_0013F350); if (*(Moby388 **)(hero + 0x15F0) != 0 && @@ -1853,41 +1875,49 @@ void qwarks_starfighter_update(Moby388 *moby) { (*(Moby388 **)(hero + 0x15F0))->bBC = 0; } } - starfighter_vars->fAC += (frame_time * 30.0f - starfighter_vars->fAC) * 0.1f; + starfighter_vars->flight_speed += + (frame_time * 30.0f - starfighter_vars->flight_speed) * 0.1f; if (frame_time * 40.0f < hero_distance) { - fast_vec_sub(offset, ((char *)&D_0013F3D0), starfighter_vars->v80); + fast_vec_sub( + offset, ((char *)&D_0013F3D0), starfighter_vars->tractor_beam_endpoint); fast_vec_normalize(offset, offset, frame_time * 40.0f); - fast_vec_add(starfighter_vars->v80, starfighter_vars->v80, offset); + fast_vec_add(starfighter_vars->tractor_beam_endpoint, + starfighter_vars->tractor_beam_endpoint, + offset); } else { qcopy(offset, ((char *)&D_0013F3D0)); - starfighter_vars->iF8 = scale_game_frames(0x78); + starfighter_vars->attack_and_death_timer_frames = scale_game_frames(0x78); if (!(starfighter_vars->h138 & 4)) { if (queue_starfighter_voice_line(moby, starfighter_vars, 0x17, 4) != 0) { starfighter_vars->h138 |= 4; } } - starfighter_vars->bFF = 1; + starfighter_vars->tractor_beam_capture_active = 1; } if (advance_moby_along_selected_path( - moby, starfighter_vars, starfighter_vars->b13B, 1) & + moby, starfighter_vars, starfighter_vars->selected_path_slot, 1) & 2) { - if (starfighter_vars->b13B != qwarks_starfighter_command_path_slots[moby->bBC]) { - starfighter_vars->b13B = qwarks_starfighter_command_path_slots[moby->bBC]; - starfighter_vars->s9C = select_point_index_by_distance( + if (starfighter_vars->selected_path_slot != + qwarks_starfighter_command_path_slots[moby->bBC]) { + starfighter_vars->selected_path_slot = + qwarks_starfighter_command_path_slots[moby->bBC]; + starfighter_vars->path_target_node_index = select_point_index_by_distance( moby->pos, walker_paths[starfighter_vars ->paths[qwarks_starfighter_command_path_slots[moby->bBC]]], 0.0f); - starfighter_vars->s9C = *(unsigned short *)((char *)starfighter_vars + 0x9C) + - random_int_between(3, 7); - starfighter_vars->s9C = - starfighter_vars->s9C % + starfighter_vars->path_target_node_index = + *(unsigned short *)((char *)starfighter_vars + 0x9C) + + random_int_between(3, 7); + starfighter_vars->path_target_node_index = + starfighter_vars->path_target_node_index % *(int *) walker_paths[starfighter_vars->paths [qwarks_starfighter_command_path_slots[moby->bBC]]]; - starfighter_vars->s9E = starfighter_vars->s9C - 1; - if (starfighter_vars->s9E < 0) { - starfighter_vars->s9E = + starfighter_vars->path_previous_node_index = + starfighter_vars->path_target_node_index - 1; + if (starfighter_vars->path_previous_node_index < 0) { + starfighter_vars->path_previous_node_index = *(unsigned short *)walker_paths [starfighter_vars ->paths[qwarks_starfighter_command_path_slots[moby->bBC]]] - @@ -1895,23 +1925,24 @@ void qwarks_starfighter_update(Moby388 *moby) { } } } - fast_vec_sub(ray_start, starfighter_vars->v80, joint); + fast_vec_sub(ray_start, starfighter_vars->tractor_beam_endpoint, joint); fast_vec_normalize(ray_start, ray_start, 8.0f); fast_vec_add(ray_start, ray_start, joint); - if (collision_line(ray_start, starfighter_vars->v80, 0, moby, 0) != 0) { + if (collision_line(ray_start, starfighter_vars->tractor_beam_endpoint, 0, moby, 0) != + 0) { if (D_L13_00174158[0] == 0 || D_L13_00174158[0]->cls_id == 0xD4) { - starfighter_vars->i100 = 0; + starfighter_vars->tractor_beam_cycle_timer_frames = 0; } } - qcopy(probe, starfighter_vars->v80); + qcopy(probe, starfighter_vars->tractor_beam_endpoint); probe[3] = 1.0f; if (fast_bsphere_check(probe, 100.0f) <= 0 && moby->b31 == 0) { DebugPrint_alt(qwarks_starfighter_tractor_offscreen_abort_message); - starfighter_vars->i100 = 0; + starfighter_vars->tractor_beam_cycle_timer_frames = 0; } if (fast_vec_dist(ray_start, ((char *)&D_0013F3D0)) > 100.0f) { DebugPrint_alt(D_L13_001F4F38); - starfighter_vars->i100 = 0; + starfighter_vars->tractor_beam_cycle_timer_frames = 0; } } else { char *hero = ((char *)&D_0013F350); @@ -1925,19 +1956,21 @@ void qwarks_starfighter_update(Moby388 *moby) { (*(Moby388 **)(hero + 0x15F0))->cls_id == 0x45) { (*(Moby388 **)(hero + 0x15F0))->bBC = 1; } - starfighter_vars->fAC *= 0.8f; + starfighter_vars->flight_speed *= 0.8f; fast_vec_dist(moby->pos, ((char *)&D_0013F3D0)); FUN_L00_0024f7c8(moby, 0x13, probe); - fast_vec_sub(ray_start, starfighter_vars->v80, probe); + fast_vec_sub(ray_start, starfighter_vars->tractor_beam_endpoint, probe); fast_vec_normalize(ray_start, ray_start, 30.0f); fast_vec_add(ray_start, ray_start, probe); - fast_vec_sub(offset, ray_start, starfighter_vars->v80); + fast_vec_sub(offset, ray_start, starfighter_vars->tractor_beam_endpoint); distance = fast_vec_dist(ray_start, ((char *)&D_0013F3D0)); if (distance != 30.0f) { fast_vec_normalize(offset, offset, (frame_time * 15.0f < distance) ? frame_time * 15.0f : distance); - fast_vec_add(starfighter_vars->v80, starfighter_vars->v80, offset); + fast_vec_add(starfighter_vars->tractor_beam_endpoint, + starfighter_vars->tractor_beam_endpoint, + offset); } { char *hero = ((char *)&D_0013F350); @@ -1945,7 +1978,7 @@ void qwarks_starfighter_update(Moby388 *moby) { Moby388 *ship_moby = *(Moby388 **)(hero + 0x15F0); char *ship; float yaw_error, abs_yaw_error, pitch_error, abs_pitch_error; - qcopy(ship_moby->pos, starfighter_vars->v80); + qcopy(ship_moby->pos, starfighter_vars->tractor_beam_endpoint); ship = (char *)ship_moby->d; yaw_error = fast_subtract_rotations(fast_arc_tan(moby->pos[0] - ship_moby->pos[0], @@ -1995,14 +2028,19 @@ void qwarks_starfighter_update(Moby388 *moby) { (*(Moby388 **)(((char *)&D_00140940)))->cls_id == 0x45) { (*(Moby388 **)(((char *)&D_00140940)))->bBC = 0; } - advance_moby_along_selected_path(moby, starfighter_vars, starfighter_vars->b13B, 1); + advance_moby_along_selected_path( + moby, starfighter_vars, starfighter_vars->selected_path_slot, 1); dialog = (char *)&music_stream_state; if (*(int *)(dialog + 0x50) == 0) { int line = *(int *)(dialog + 0x1C); if (line == -1 && (short)starfighter_vars->h138 <= 0) { if (queue_starfighter_voice_line( - moby, starfighter_vars, D_L13_00161950 + 0x1D, 1) != 0) { - D_L13_00161950 = (D_L13_00161950 + 1) % 4; + moby, + starfighter_vars, + l13_starfighter_owner_unavailable_voice_line_index + 0x1D, + 1) != 0) { + l13_starfighter_owner_unavailable_voice_line_index = + (l13_starfighter_owner_unavailable_voice_line_index + 1) % 4; starfighter_vars->h138 += 1; } } @@ -2015,37 +2053,40 @@ void qwarks_starfighter_update(Moby388 *moby) { (*(Moby388 **)(((char *)&D_00140940)))->cls_id == 0x45) { (*(Moby388 **)(((char *)&D_00140940)))->bBC = 0; } - if (starfighter_vars->iF8 == 1) { + if (starfighter_vars->attack_and_death_timer_frames == 1) { detach_moby_joint_attachment(moby, starfighter_vars, 8); allocate_voice_for_target_entry(7, 0, (int)moby); } - fast_dec_timer(&starfighter_vars->iF8); - if (advance_moby_along_selected_path(moby, starfighter_vars, starfighter_vars->b13B, 0) != - 0 || - starfighter_vars->s9C >= - *(int *)walker_paths[starfighter_vars->paths[starfighter_vars->b13B]] - 1) { - starfighter_vars->iF8 = scale_game_frames(0xB4); + fast_dec_timer(&starfighter_vars->attack_and_death_timer_frames); + if (advance_moby_along_selected_path( + moby, starfighter_vars, starfighter_vars->selected_path_slot, 0) != 0 || + starfighter_vars->path_target_node_index >= + *(int *)walker_paths[starfighter_vars + ->paths[starfighter_vars->selected_path_slot]] - + 1) { + starfighter_vars->attack_and_death_timer_frames = scale_game_frames(0xB4); moby->state = STARFIGHTER_STATE_EXPLODE_AND_REMOVE; } moby->rot[0] = fast_add_rotations(moby->rot[0], frame_time * 4.1887903f); { - Path388 *path = - (Path388 *)walker_paths[starfighter_vars->paths[starfighter_vars->b13B]]; - int i = starfighter_vars->s9C; + Path388 *path = (Path388 *) + walker_paths[starfighter_vars->paths[starfighter_vars->selected_path_slot]]; + int i = starfighter_vars->path_target_node_index; int n = path->n; target_yaw = fast_arc_tan(path->pts[(i + 3 >= n - 1) ? n - 1 : i + 3][0] - path->pts[i][0], path->pts[(i + 3 < n - 1) ? i + 3 : n - 1][1] - path->pts[i][1]); } { - char *path = walker_paths[starfighter_vars->paths[starfighter_vars->b13B]]; - int i = starfighter_vars->s9C; + char *path = + walker_paths[starfighter_vars->paths[starfighter_vars->selected_path_slot]]; + int i = starfighter_vars->path_target_node_index; int n = *(int *)path; float flat_distance = vector_distance_xy( path + (i * 16 + 0x10), path + (((i + 3 >= n - 1) ? n - 1 : i + 3) * 16 + 0x10)); - Path388 *path2 = - (Path388 *)walker_paths[starfighter_vars->paths[starfighter_vars->b13B]]; - int i2 = starfighter_vars->s9C; + Path388 *path2 = (Path388 *) + walker_paths[starfighter_vars->paths[starfighter_vars->selected_path_slot]]; + int i2 = starfighter_vars->path_target_node_index; int path_point_count = path2->n; target_pitch = -fast_arc_tan( flat_distance, @@ -2053,19 +2094,19 @@ void qwarks_starfighter_update(Moby388 *moby) { path2->pts[i2][2]); } FUN_L00_00258278(moby, - &starfighter_vars->fA8, + &starfighter_vars->yaw_spring_velocity, target_yaw, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); - moby->rot[1] = spring_turn(&starfighter_vars->fA4, + moby->rot[1] = spring_turn(&starfighter_vars->pitch_spring_velocity, moby->rot[1], target_pitch, frame_time_sq * 3.1415927f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); moby->scale *= 0.99925f; - starfighter_vars->fAC *= 0.9992f; + starfighter_vars->flight_speed *= 0.9992f; if (random_integer_below(0x11) == 0) { float size_ratio = moby->scale / (*(float *)(moby->cls + 0x24) * 3.0f); fast_vec_normalize(joint, moby->mat[0], random_float_between(-5.0f, 5.0f) * size_ratio); @@ -2080,15 +2121,16 @@ void qwarks_starfighter_update(Moby388 *moby) { { char *dialog = (char *)&music_stream_state; if (*(int *)(dialog + 0x50) == 0 && *(int *)(dialog + 0x1C) == -1) { - if (starfighter_vars->iF8 < scale_game_frames(0x1A4) && - starfighter_vars->i13C < 0) { + if (starfighter_vars->attack_and_death_timer_frames < scale_game_frames(0x1A4) && + starfighter_vars->voice_line_history_mask < 0) { if (queue_starfighter_voice_line(moby, starfighter_vars, 0x23, 1) != 0) { - starfighter_vars->i13C &= 0x7FFFFFFF; + starfighter_vars->voice_line_history_mask &= 0x7FFFFFFF; } - } else if (starfighter_vars->iF8 < scale_game_frames(0xB4) && - (starfighter_vars->i13C & 0x40000000) && + } else if (starfighter_vars->attack_and_death_timer_frames < + scale_game_frames(0xB4) && + (starfighter_vars->voice_line_history_mask & 0x40000000) && queue_starfighter_voice_line(moby, starfighter_vars, 0x24, 1) != 0) { - starfighter_vars->i13C &= 0xBFFFFFFF; + starfighter_vars->voice_line_history_mask &= 0xBFFFFFFF; } } } @@ -2105,7 +2147,7 @@ void qwarks_starfighter_update(Moby388 *moby) { moby->rot[2] = *(float *)(view + 0x158); moby->rot[1] = *(float *)(view + 0x154); moby->scale *= 0.98f; - if (starfighter_vars->iF8 == scale_game_frames(0x1E)) { + if (starfighter_vars->attack_and_death_timer_frames == scale_game_frames(0x1E)) { spawn_explosion(moby, &starfighter_vars->f70, 0, @@ -2126,14 +2168,15 @@ void qwarks_starfighter_update(Moby388 *moby) { 0); } func_L13_002E9F90_2(moby, starfighter_vars); - if (fast_dec_timer(&starfighter_vars->iF8) != 0) { - Moby388 *owner = (Moby388 *)((char *)moby_base + (starfighter_vars->i134 << 8)); + if (fast_dec_timer(&starfighter_vars->attack_and_death_timer_frames) != 0) { + Moby388 *owner = + (Moby388 *)((char *)moby_base + (starfighter_vars->linked_ship_moby_index << 8)); owner->state = 8; owner->flags |= 2; if (starfighter_vars->light120 != -1) { release_point_light_slot(starfighter_vars->light120); } - flag_vendor_item(starfighter_vars->i12C); + flag_vendor_item(starfighter_vars->vendor_item_id); mark_moby_for_removal(moby); return; } @@ -2142,9 +2185,9 @@ void qwarks_starfighter_update(Moby388 *moby) { case STARFIGHTER_STATE_RESET: { char *path; char **parts; - if (starfighter_vars->pF0 != 0) { - mark_moby_for_removal(starfighter_vars->pF0); - starfighter_vars->pF0 = 0; + if (starfighter_vars->command_joint_attachment_moby != 0) { + mark_moby_for_removal(starfighter_vars->command_joint_attachment_moby); + starfighter_vars->command_joint_attachment_moby = 0; } if (starfighter_vars->child110 != 0) { mark_moby_for_removal(starfighter_vars->child110); @@ -2189,34 +2232,34 @@ void qwarks_starfighter_update(Moby388 *moby) { qcopy(moby->pos, path + 0x10); moby->rot[2] = fast_arc_tan(*(float *)(path + 0x20) - moby->pos[0], *(float *)(path + 0x24) - moby->pos[1]); - starfighter_vars->b10C = 1; - starfighter_vars->s9C = 0; - starfighter_vars->s9E = 0; + starfighter_vars->path_traversal_direction = 1; + starfighter_vars->path_target_node_index = 0; + starfighter_vars->path_previous_node_index = 0; starfighter_vars->iA0 = 0; - starfighter_vars->fA4 = 0; - starfighter_vars->fA8 = 0; - starfighter_vars->fAC = 0; + starfighter_vars->pitch_spring_velocity = 0; + starfighter_vars->yaw_spring_velocity = 0; + starfighter_vars->flight_speed = 0; starfighter_vars->iF4 = 0; - starfighter_vars->iF8 = 0; - starfighter_vars->bFC = 0; - starfighter_vars->bFD = 0; - starfighter_vars->bFE = 0; - starfighter_vars->bFF = 0; - starfighter_vars->i100 = 0; + starfighter_vars->attack_and_death_timer_frames = 0; + starfighter_vars->rocket_muzzle_toggle = 0; + starfighter_vars->attack_sequence_counter = 0; + starfighter_vars->mine_attack_selected = 0; + starfighter_vars->tractor_beam_capture_active = 0; + starfighter_vars->tractor_beam_cycle_timer_frames = 0; starfighter_vars->b10D = 0; starfighter_vars->b10E = 0; starfighter_vars->b10F = 0; - starfighter_vars->i124 = 0; + starfighter_vars->attack_cooldown_frames = 0; starfighter_vars->h138 = 0; - starfighter_vars->b13A = 0; - starfighter_vars->b13B = 0; - starfighter_vars->i13C = 0; - starfighter_vars->h144 = 0; - starfighter_vars->h146 = 0; + starfighter_vars->queued_voice_line_pending = 0; + starfighter_vars->selected_path_slot = 0; + starfighter_vars->voice_line_history_mask = 0; + starfighter_vars->long_voice_line_cooldown_frames = 0; + starfighter_vars->short_voice_line_cooldown_frames = 0; starfighter_vars->b148 = 0; moby->bBC = 0; qzero(&starfighter_vars->f70); - qzero(starfighter_vars->v80); + qzero(starfighter_vars->tractor_beam_endpoint); moby->state = STARFIGHTER_STATE_INITIALIZE; return; } @@ -2277,7 +2320,7 @@ void qwarks_starfighter_update(Moby388 *moby) { if (moby->state >= STARFIGHTER_STATE_FOLLOW_INITIAL_PATH) { update_moby_joint_attachments(moby, starfighter_vars); if (moby->state != STARFIGHTER_STATE_EXPLODE_AND_REMOVE || - scale_game_frames(0x78) < starfighter_vars->iF8) { + scale_game_frames(0x78) < starfighter_vars->attack_and_death_timer_frames) { emit_gated_moby_joint_effects(moby, starfighter_vars); } if (starfighter_vars->snd114 != -1) { @@ -2303,15 +2346,20 @@ void qwarks_starfighter_update(Moby388 *moby) { starfighter_vars->b10F = 0; { - Moby388 *owner = (Moby388 *)((char *)moby_base + (starfighter_vars->i134 << 8)); + Moby388 *owner = + (Moby388 *)((char *)moby_base + (starfighter_vars->linked_ship_moby_index << 8)); if (moby->state != STARFIGHTER_STATE_OWNER_UNAVAILABLE) { if (owner == 0 || owner->cls_id != 0x45 || owner->state == MOBY_STATE_REMOVAL_AT_OR_ABOVE_INSTANCE_END || owner->state == MOBY_STATE_REMOVAL_BELOW_INSTANCE_END || owner->state == 7) { moby->state = STARFIGHTER_STATE_OWNER_UNAVAILABLE; if (queue_starfighter_voice_line( - moby, starfighter_vars, D_L13_00161950 + 0x1D, 1) != 0) { - D_L13_00161950 = (D_L13_00161950 + 1) % 4; + moby, + starfighter_vars, + l13_starfighter_owner_unavailable_voice_line_index + 0x1D, + 1) != 0) { + l13_starfighter_owner_unavailable_voice_line_index = + (l13_starfighter_owner_unavailable_voice_line_index + 1) % 4; starfighter_vars->h138 = 1; } else { starfighter_vars->h138 = 0; @@ -2320,12 +2368,12 @@ void qwarks_starfighter_update(Moby388 *moby) { } } - if (starfighter_vars->b13A != 0) { + if (starfighter_vars->queued_voice_line_pending != 0) { if (dialogue_playback_phase[0] == 3) { continue_audio_stream_if_ready(); - starfighter_vars->h144 = scale_game_frames(0x168); - starfighter_vars->h146 = scale_game_frames(0x3C); - starfighter_vars->b13A = 0; + starfighter_vars->long_voice_line_cooldown_frames = scale_game_frames(0x168); + starfighter_vars->short_voice_line_cooldown_frames = scale_game_frames(0x3C); + starfighter_vars->queued_voice_line_pending = 0; } } else { if (moby->state != STARFIGHTER_STATE_OWNER_UNAVAILABLE) { @@ -2341,8 +2389,8 @@ void qwarks_starfighter_update(Moby388 *moby) { } } } - fast_dec_timer_s16(&starfighter_vars->h144); - fast_dec_timer_s16(&starfighter_vars->h146); + fast_dec_timer_s16(&starfighter_vars->long_voice_line_cooldown_frames); + fast_dec_timer_s16(&starfighter_vars->short_voice_line_cooldown_frames); if (moby->state >= STARFIGHTER_STATE_FOLLOW_INITIAL_PATH && moby->state <= STARFIGHTER_STATE_TRACTOR_BEAM && (((unsigned char *)D_0013E533)[0x242C] & 1)) { diff --git a/src/overlays/l13/mobys/robosquawker.c b/src/overlays/l13/mobys/robosquawker.c index fbb2b3a157..087d00d48e 100644 --- a/src/overlays/l13/mobys/robosquawker.c +++ b/src/overlays/l13/mobys/robosquawker.c @@ -263,11 +263,11 @@ typedef struct { char pad0[0x20]; float f20; short h24; - short h26; + short damage_cooldown_frames; unsigned char b28; unsigned char b29; char pad2A[0xE]; - int w38; + int alert_refresh_requested; char pad3C[4]; RsVec v40; char pad50[8]; @@ -281,50 +281,50 @@ typedef struct { char padD4[0x3C]; char x110[0x10]; char x120[0x10]; - float f130; - float f134; - float f138; - float f13C; - int w140; - int w144; - float f148; + float motion_gravity_step; + float motion_horizontal_speed_change_limit; + float motion_horizontal_launch_step; + float motion_vertical_launch_step; + int motion_collision_radius_fixed_point; + int motion_behavior_flags; + float motion_bounce_restitution; char pad14C[0x11]; unsigned char b15D; char pad15E[0x12]; - float f170; - float f174; + float motion_ascent_end_animation_frame; + float motion_descent_end_animation_frame; char pad178[8]; int w180; int w184; - float f188; - float f18C; + float ground_max_drop_height; + float ground_max_rise_height; char pad190[8]; - float f198; + float ground_vertical_step; char pad19C[8]; - float f1A4; + float ground_movement_step_length; char pad1A8[0x10]; - int w1B8; + int ground_movement_flags; char pad1BC[0x14]; - RsVec v1D0; - RsVec v1E0; - float f1F0; - float f1F4; - float f1F8; - float f1FC; - float f200; - float f204; + RsVec home_position; + RsVec flight_destination; + float yaw_turn_step; + float chase_yaw_offset_radians; + float chase_yaw_offset_degrees; + float target_engagement_radius; + float default_target_engagement_radius; + float walking_speed; short h208; - short h20A; - int w20C; - int w210; - short h214; - short h216; - char *p218; - int w21C; - int w220; - int w224; + short ground_idle_preference; + int random_flight_timer_frames; + int chase_yaw_flip_timer_frames; + short alert_timer_frames; + short walk_range_radius; + char *walk_range_anchor; + int ground_navigation_path_index; + int flight_path_index; + int flight_waypoint_index; void *p228; - int w22C; + int target_clip_volume_index; unsigned char x230[1]; } RsVars; @@ -332,7 +332,7 @@ typedef struct { char pad0[0x10]; RsVec pos; unsigned char state; - unsigned char b21; + unsigned char command_recipient_list_index; char pad22[2]; char *w24; char pad28[9]; @@ -343,9 +343,9 @@ typedef struct { RsVec rot; char pad50[2]; unsigned char b52; - unsigned char b53; + unsigned char animation_index; char pad54[4]; - float f58; + float animation_playback_speed; char pad5C[0x14]; unsigned char b70; char pad71[7]; @@ -377,7 +377,7 @@ typedef struct { RsVec pos; RsMoby *src; char pad24[8]; - float f2C; + float damage_amount; } RsHit; extern char *level13_moby_list_head __asm__("D_L13_0015FFE4"); @@ -411,7 +411,8 @@ extern int coll_sphere(float, void *, int, void *) __asm__("FUN_L00_001f0d60"); extern int FUN_L00_00258830(void *, void *, float, float, float, int); -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); extern int FUN_L00_002dc9f0(void *, void *); @@ -497,71 +498,79 @@ void robosquawker_update(RsMoby *robosquawker_moby) { } robosquawker_moby->w94 = *(int *)(robosquawker_moby->w24 + 0x10); robosquawker_moby->h34 &= 0xFFBE; - select_robosquawker_target( - (char *)robosquawker_moby, (char *)&selected_target_record, robosquawker_vars->f1FC + 4.0f); + select_robosquawker_target((char *)robosquawker_moby, + (char *)&selected_target_record, + robosquawker_vars->target_engagement_radius + 4.0f); tm = selected_target_record.moby; if (tm == 0 || - (robosquawker_vars->h214 == 0 && robosquawker_vars->w22C != -1 && - is_point_inside_clip_volume(&selected_target_record, robosquawker_vars->w22C) == 0)) { + (robosquawker_vars->alert_timer_frames == 0 && + robosquawker_vars->target_clip_volume_index != -1 && + is_point_inside_clip_volume(&selected_target_record, + robosquawker_vars->target_clip_volume_index) == 0)) { selected_target_record.moby = 0; tm = 0; qzero(&selected_target_record); } qcopy(&previous_position, &robosquawker_moby->pos); - if (robosquawker_vars->w38 != 0) { - robosquawker_vars->h214 = scale_game_frames(0xF0); + if (robosquawker_vars->alert_refresh_requested != 0) { + robosquawker_vars->alert_timer_frames = scale_game_frames(0xF0); } - robosquawker_vars->w38 = 0; + robosquawker_vars->alert_refresh_requested = 0; fast_dec_timer_s16(&robosquawker_vars->h208); if (robosquawker_moby->state != ROBOSQUAWKER_STATE_INITIALIZE) { - if (fast_dec_timer_s16(&robosquawker_vars->h214) != 0) { - robosquawker_vars->f1FC = robosquawker_vars->v1D0.f[3]; + if (fast_dec_timer_s16(&robosquawker_vars->alert_timer_frames) != 0) { + robosquawker_vars->target_engagement_radius = robosquawker_vars->home_position.f[3]; } else { - robosquawker_vars->f1FC = robosquawker_vars->f200; + robosquawker_vars->target_engagement_radius = + robosquawker_vars->default_target_engagement_radius; } } dmg = 0.0f; hit = FUN_L00_0025a420(robosquawker_moby, 0x330000, 0); resolve_moby_hit_response( robosquawker_moby, hit, &robosquawker_vars->f20, 0, &hits, &dmg, 0, 4); - fast_dec_timer_s16(&robosquawker_vars->h26); - if (robosquawker_vars->h26 < scale_game_frames(0x2D) && hit != 0 && + fast_dec_timer_s16(&robosquawker_vars->damage_cooldown_frames); + if (robosquawker_vars->damage_cooldown_frames < scale_game_frames(0x2D) && hit != 0 && robosquawker_moby->state != ROBOSQUAWKER_STATE_DEATH_KNOCKBACK) { - if (hit->src->hA6 >= 0xB0 && hit->src->hA6 <= 0xB1 && robosquawker_vars->h26 != 0) { - hit->f2C = 0.0f; + if (hit->src->hA6 >= 0xB0 && hit->src->hA6 <= 0xB1 && + robosquawker_vars->damage_cooldown_frames != 0) { + hit->damage_amount = 0.0f; } - if (robosquawker_moby->b21 != 0xFF) { - FUN_L01_0026e090(robosquawker_moby->b21, 1); + if (robosquawker_moby->command_recipient_list_index != 0xFF) { + FUN_L01_0026e090(robosquawker_moby->command_recipient_list_index, 1); } - if (hit->f2C != 0.0f) { + if (hit->damage_amount != 0.0f) { knockback_yaw = fast_arc_tan(robosquawker_moby->pos.f[0] - selected_target_record.pos.f[0], robosquawker_moby->pos.f[1] - selected_target_record.pos.f[1]); - robosquawker_vars->f148 = 0.5f; - robosquawker_vars->w140 = 0x202; - robosquawker_vars->f20 -= hit->f2C; - robosquawker_vars->f130 = 0.0055f; - robosquawker_vars->f134 = 0.0011f; - robosquawker_vars->f138 = + robosquawker_vars->motion_bounce_restitution = 0.5f; + robosquawker_vars->motion_collision_radius_fixed_point = 0x202; + robosquawker_vars->f20 -= hit->damage_amount; + robosquawker_vars->motion_gravity_step = 0.0055f; + robosquawker_vars->motion_horizontal_speed_change_limit = 0.0011f; + robosquawker_vars->motion_horizontal_launch_step = robosquawker_damage_knockback_horizontal_speed_gp * frame_time; - robosquawker_vars->f13C = robosquawker_damage_knockback_vertical_speed_gp * frame_time; - robosquawker_vars->w144 = 9; + robosquawker_vars->motion_vertical_launch_step = + robosquawker_damage_knockback_vertical_speed_gp * frame_time; + robosquawker_vars->motion_behavior_flags = 9; robosquawker_vars->b15D = 0; if (robosquawker_vars->f20 <= 0.0f) { robosquawker_moby->h34 &= 0xEFFF; - robosquawker_vars->f138 = frame_time * 10.0f; - robosquawker_vars->f13C = frame_time * 5.5f; + robosquawker_vars->motion_horizontal_launch_step = frame_time * 10.0f; + robosquawker_vars->motion_vertical_launch_step = frame_time * 5.5f; *(u128 *)&va = *(u128 *)&hit->pos; - trooper_knockback_arc( - &va, &knockback_yaw, &robosquawker_vars->f138, &robosquawker_vars->f13C); + trooper_knockback_arc(&va, + &knockback_yaw, + &robosquawker_vars->motion_horizontal_launch_step, + &robosquawker_vars->motion_vertical_launch_step); trooper_start_knockback(robosquawker_moby, robosquawker_vars->x120, knockback_yaw, (rand() & 1) + 9, 1, 0); - robosquawker_vars->f170 = 11.0f; - robosquawker_vars->f174 = 18.0f; + robosquawker_vars->motion_ascent_end_animation_frame = 11.0f; + robosquawker_vars->motion_descent_end_animation_frame = 18.0f; robosquawker_moby->state = ROBOSQUAWKER_STATE_DEATH_KNOCKBACK; release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); robosquawker_vars->x110[7] = 0x78; @@ -569,20 +578,22 @@ void robosquawker_update(RsMoby *robosquawker_moby) { FUN_L00_00257470(robosquawker_moby, 0, -1); } else { *(u128 *)&va = *(u128 *)&hit->pos; - trooper_knockback_arc( - &va, &knockback_yaw, &robosquawker_vars->f138, &robosquawker_vars->f13C); + trooper_knockback_arc(&va, + &knockback_yaw, + &robosquawker_vars->motion_horizontal_launch_step, + &robosquawker_vars->motion_vertical_launch_step); trooper_start_knockback(robosquawker_moby, robosquawker_vars->x120, knockback_yaw, (rand() & 1) + 9, 1, 0); - robosquawker_vars->f170 = 5.0f; - robosquawker_vars->f174 = 10.0f; + robosquawker_vars->motion_ascent_end_animation_frame = 5.0f; + robosquawker_vars->motion_descent_end_animation_frame = 10.0f; robosquawker_moby->state = ROBOSQUAWKER_STATE_DAMAGE_KNOCKBACK; release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); *(unsigned char *)&robosquawker_vars->x110[7] = 0xFA; - robosquawker_vars->h26 = scale_game_frames(0x3C); + robosquawker_vars->damage_cooldown_frames = scale_game_frames(0x3C); trooper_anim_update(robosquawker_moby, (short *)robosquawker_vars->x110); } } @@ -590,21 +601,21 @@ void robosquawker_update(RsMoby *robosquawker_moby) { robosquawker_moby->bA4 = 0xFF; switch (robosquawker_moby->state) { case ROBOSQUAWKER_STATE_INITIALIZE: - qcopy(&robosquawker_vars->v1D0, &robosquawker_moby->pos); - robosquawker_vars->v1D0.f[3] = robosquawker_vars->f1FC; - if (robosquawker_vars->h20A != 0) { + qcopy(&robosquawker_vars->home_position, &robosquawker_moby->pos); + robosquawker_vars->home_position.f[3] = robosquawker_vars->target_engagement_radius; + if (robosquawker_vars->ground_idle_preference != 0) { robosquawker_moby->state = ROBOSQUAWKER_STATE_GROUND_IDLE; - if (robosquawker_moby->b53 != 3) { + if (robosquawker_moby->animation_index != 3) { blend_moby_animation(robosquawker_moby, 3, 0, 0); } } else { robosquawker_moby->state = ROBOSQUAWKER_STATE_FLIGHT_IDLE; robosquawker_moby->pos.f[2] += 6.0f; - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, 0); } } - robosquawker_vars->h214 = 0; + robosquawker_vars->alert_timer_frames = 0; robosquawker_vars->h208 = 0; robosquawker_vars->b29 = 0; robosquawker_vars->f20 = 1.0f; @@ -613,17 +624,18 @@ void robosquawker_update(RsMoby *robosquawker_moby) { robosquawker_vars->b5A = 4; FUN_L01_0026d930((char *)&robosquawker_vars->w180); robosquawker_vars->w180 = 0x38D; - robosquawker_vars->f18C = 2.0f; - robosquawker_vars->f188 = 2.0f; - robosquawker_vars->f1A4 = robosquawker_vars->f204 * frame_time; - robosquawker_vars->w1B8 |= 0x30; + robosquawker_vars->ground_max_rise_height = 2.0f; + robosquawker_vars->ground_max_drop_height = 2.0f; + robosquawker_vars->ground_movement_step_length = + robosquawker_vars->walking_speed * frame_time; + robosquawker_vars->ground_movement_flags |= 0x30; if (rand() & 1) { robosquawker_moby->h34 |= 0x8000; } robosquawker_vars->pD0 = &D_L13_001613A0; - if (robosquawker_vars->w220 != -1) { - robosquawker_vars->w224 = select_point_index_by_distance( - &robosquawker_moby->pos, walker_paths[robosquawker_vars->w220], 0.0f); + if (robosquawker_vars->flight_path_index != -1) { + robosquawker_vars->flight_waypoint_index = select_point_index_by_distance( + &robosquawker_moby->pos, walker_paths[robosquawker_vars->flight_path_index], 0.0f); } break; case ROBOSQUAWKER_STATE_FLIGHT_IDLE: { @@ -632,44 +644,51 @@ void robosquawker_update(RsMoby *robosquawker_moby) { update_robosquawker_particle((unsigned char *)robosquawker_moby, (char *)robosquawker_vars); fast_vec_sub(&va, &selected_target_record, &robosquawker_moby->pos); d = probe_ground_height(&robosquawker_moby->pos, 0x120, 0.5f); - if (d > 1.0f && vector_length_xy(&va) < robosquawker_vars->f1FC + 4.0f && + if (d > 1.0f && + vector_length_xy(&va) < robosquawker_vars->target_engagement_radius + 4.0f && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 10.0f && random_integer_below(0x13) == 0) { - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_LAND; release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); } else if (d > 1.0f && robosquawker_moby->bBC == 1 && random_integer_below(4) == 0) { if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); - if (robosquawker_moby->b53 != 0) { + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); robosquawker_moby->state = ROBOSQUAWKER_STATE_LAND; clear_u64_value(&robosquawker_vars->v40); robosquawker_moby->bBC = 0; - } else if (robosquawker_vars->w220 != -1) { + } else if (robosquawker_vars->flight_path_index != -1) { char *path; - path = walker_paths[robosquawker_vars->w220]; - if (fast_vec_dist(&robosquawker_moby->pos, path + (robosquawker_vars->w224 * 16 + 16)) < + path = walker_paths[robosquawker_vars->flight_path_index]; + if (fast_vec_dist(&robosquawker_moby->pos, + path + (robosquawker_vars->flight_waypoint_index * 16 + 16)) < 0.25f) { - robosquawker_vars->w224 += 1; - if (robosquawker_vars->w224 >= *(int *)path) { - robosquawker_vars->w224 = 0; + robosquawker_vars->flight_waypoint_index += 1; + if (robosquawker_vars->flight_waypoint_index >= *(int *)path) { + robosquawker_vars->flight_waypoint_index = 0; } } - qcopy(&robosquawker_vars->v1E0, path + robosquawker_vars->w224 * 16 + 16); + qcopy(&robosquawker_vars->flight_destination, + path + robosquawker_vars->flight_waypoint_index * 16 + 16); robosquawker_moby->state = ROBOSQUAWKER_STATE_FOLLOW_FLIGHT_PATH; - } else if (fast_dec_timer(&robosquawker_vars->w20C) != 0) { + } else if (fast_dec_timer(&robosquawker_vars->random_flight_timer_frames) != 0) { int i; - robosquawker_vars->w20C = scale_game_frames(FUN_L00_00257b90(0x28, 0x78)); + robosquawker_vars->random_flight_timer_frames = + scale_game_frames(FUN_L00_00257b90(0x28, 0x78)); for (i = 0; i < 10; i++) { float r; float a; @@ -680,12 +699,14 @@ void robosquawker_update(RsMoby *robosquawker_moby) { vb.f[1] = fast_sin(a) * r; vb.f[2] = 0.0f; vb.f[2] = random_float_between(5.0f, 7.0f); - fast_vec_add(&robosquawker_vars->v1E0, &vb, &robosquawker_vars->v1D0); - if (probe_ground_height(&robosquawker_vars->v1E0, 0x120, 0.5f) > 1.0f) { + fast_vec_add( + &robosquawker_vars->flight_destination, &vb, &robosquawker_vars->home_position); + if (probe_ground_height(&robosquawker_vars->flight_destination, 0x120, 0.5f) > + 1.0f) { break; } } - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_FLY_TO_RANDOM_POINT; @@ -695,13 +716,15 @@ void robosquawker_update(RsMoby *robosquawker_moby) { case ROBOSQUAWKER_STATE_FLY_TO_RANDOM_POINT: { float a; - a = fast_arc_tan(robosquawker_vars->v1E0.f[0] - robosquawker_moby->pos.f[0], - robosquawker_vars->v1E0.f[1] - robosquawker_moby->pos.f[1]); + a = fast_arc_tan(robosquawker_vars->flight_destination.f[0] - robosquawker_moby->pos.f[0], + robosquawker_vars->flight_destination.f[1] - robosquawker_moby->pos.f[1]); FUN_L00_00258278( - (char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.03f, 0.6f, 0.09f); + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.03f, 0.6f, 0.09f); flight_step_length = fast_vec_length(&robosquawker_vars->v40); - robosquawker_moby->f58 = flight_step_length * 20.0f + 1.0f; - fast_vec_sub(&robosquawker_vars->v40, &robosquawker_vars->v1E0, &robosquawker_moby->pos); + robosquawker_moby->animation_playback_speed = flight_step_length * 20.0f + 1.0f; + fast_vec_sub(&robosquawker_vars->v40, + &robosquawker_vars->flight_destination, + &robosquawker_moby->pos); if (fast_vec_length(&robosquawker_vars->v40) > 1.0f) { approach_value(&flight_step_length, frame_time * 4.0f, frame_time_sq * 6.0f); } else { @@ -711,16 +734,17 @@ void robosquawker_update(RsMoby *robosquawker_moby) { fast_vec_add(&va, &robosquawker_vars->v40, &robosquawker_moby->pos); if (coll_sphere(1.2f, &va, 0, robosquawker_moby) != 0) { clear_u64_value(&robosquawker_vars->v40); - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_FLIGHT_IDLE; } else { qcopy(&robosquawker_moby->pos, &va); } - if (fast_vec_dist(&robosquawker_moby->pos, &robosquawker_vars->v1E0) < flight_step_length || + if (fast_vec_dist(&robosquawker_moby->pos, &robosquawker_vars->flight_destination) < + flight_step_length || flight_step_length == 0.0f) { - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_FLIGHT_IDLE; @@ -733,19 +757,22 @@ void robosquawker_update(RsMoby *robosquawker_moby) { float a; float d; - path = walker_paths[robosquawker_vars->w220]; - a = fast_arc_tan(robosquawker_vars->v1E0.f[0] - robosquawker_moby->pos.f[0], - robosquawker_vars->v1E0.f[1] - robosquawker_moby->pos.f[1]); + path = walker_paths[robosquawker_vars->flight_path_index]; + a = fast_arc_tan(robosquawker_vars->flight_destination.f[0] - robosquawker_moby->pos.f[0], + robosquawker_vars->flight_destination.f[1] - robosquawker_moby->pos.f[1]); FUN_L00_00258278( - (char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.018f, 0.8f, 0.09f); - fast_vec_sub(&robosquawker_vars->v40, &robosquawker_vars->v1E0, &robosquawker_moby->pos); + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.018f, 0.8f, 0.09f); + fast_vec_sub(&robosquawker_vars->v40, + &robosquawker_vars->flight_destination, + &robosquawker_moby->pos); FUN_L00_0025f730(&robosquawker_vars->v40, frame_time * 4.0f); fast_vec_add(&va, &robosquawker_vars->v40, &robosquawker_moby->pos); - robosquawker_moby->f58 = fast_vec_length(&robosquawker_vars->v40) * 20.0f + 1.0f; + robosquawker_moby->animation_playback_speed = + fast_vec_length(&robosquawker_vars->v40) * 20.0f + 1.0f; if (coll_sphere(1.2f, &va, 0, robosquawker_moby) != 0) { int i; - robosquawker_vars->w20C = scale_game_frames(0x78); + robosquawker_vars->random_flight_timer_frames = scale_game_frames(0x78); for (i = 0; i < 10; i++) { float r; float an; @@ -756,35 +783,39 @@ void robosquawker_update(RsMoby *robosquawker_moby) { vb.f[1] = fast_sin(an) * r; vb.f[2] = 0.0f; vb.f[2] = random_float_between(5.0f, 7.0f); - fast_vec_add(&robosquawker_vars->v1E0, &vb, &robosquawker_vars->v1D0); - if (probe_ground_height(&robosquawker_vars->v1E0, 0x120, 0.5f) > 1.0f) { + fast_vec_add( + &robosquawker_vars->flight_destination, &vb, &robosquawker_vars->home_position); + if (probe_ground_height(&robosquawker_vars->flight_destination, 0x120, 0.5f) > + 1.0f) { break; } } - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_FLY_TO_RANDOM_POINT; } else { qcopy(&robosquawker_moby->pos, &va); } - d = fast_vec_dist(&robosquawker_moby->pos, &robosquawker_vars->v1E0); + d = fast_vec_dist(&robosquawker_moby->pos, &robosquawker_vars->flight_destination); if (d < fast_vec_length(&robosquawker_vars->v40)) { float g; - robosquawker_vars->w224 += 1; - if (robosquawker_vars->w224 >= *(int *)path) { - robosquawker_vars->w224 = 0; + robosquawker_vars->flight_waypoint_index += 1; + if (robosquawker_vars->flight_waypoint_index >= *(int *)path) { + robosquawker_vars->flight_waypoint_index = 0; } - qcopy(&robosquawker_vars->v1E0, path + robosquawker_vars->w224 * 16 + 16); - robosquawker_vars->v1E0.f[2] = - robosquawker_vars->v1E0.f[2] + random_float_between(-0.2f, 0.2f); + qcopy(&robosquawker_vars->flight_destination, + path + robosquawker_vars->flight_waypoint_index * 16 + 16); + robosquawker_vars->flight_destination.f[2] = + robosquawker_vars->flight_destination.f[2] + random_float_between(-0.2f, 0.2f); g = probe_ground_height(&robosquawker_moby->pos, 0x120, 0.5f); - if (g > 1.0f && vector_length_xy(&vb) < robosquawker_vars->f1FC + 4.0f && + if (g > 1.0f && + vector_length_xy(&vb) < robosquawker_vars->target_engagement_radius + 4.0f && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 10.0f && random_integer_below(0x13) == 0) { - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } qzero(&robosquawker_vars->v40); @@ -792,12 +823,14 @@ void robosquawker_update(RsMoby *robosquawker_moby) { release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); } else if (g > 1.0f && robosquawker_moby->bBC == 1 && random_integer_below(4) == 0) { if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = scale_game_frames((int)random_float_between(30.0f, 90.0f)); - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); @@ -816,21 +849,24 @@ void robosquawker_update(RsMoby *robosquawker_moby) { g = probe_ground_height(&robosquawker_moby->pos, 0x120, 0.5f); approach_value(&robosquawker_vars->v40.f[2], -(frame_time * 8.0f), frame_time_sq * 10.8f); FUN_L00_00258830(robosquawker_moby, &robosquawker_vars->v40, 0.6f, 0.5f, 0.0f, 0); - if (robosquawker_moby->b53 != 2 && + if (robosquawker_moby->animation_index != 2 && robosquawker_moby->pos.f[2] - g <= frame_time * 8.0f * FUN_L04_001f1978(45.0f) && - robosquawker_moby->b53 != 2) { + robosquawker_moby->animation_index != 2) { blend_moby_animation(robosquawker_moby, 2, 0, scale_game_frames(5)); } if (robosquawker_moby->pos.f[2] <= g) { robosquawker_moby->pos.f[2] = g; if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; clear_u64_value(&robosquawker_vars->v40); - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } @@ -846,10 +882,11 @@ void robosquawker_update(RsMoby *robosquawker_moby) { approach_value(&robosquawker_vars->v40.f[2], frame_time, frame_time_sq * 10.8f); } FUN_L00_00258830(robosquawker_moby, &robosquawker_vars->v40, 0.6f, 0.5f, 0.0f, 0); - robosquawker_moby->f58 = 6.0f - (robosquawker_moby->pos.f[2] - g) / 6.0f * 5.0f; + robosquawker_moby->animation_playback_speed = + 6.0f - (robosquawker_moby->pos.f[2] - g) / 6.0f * 5.0f; if (g + 6.0f <= robosquawker_moby->pos.f[2]) { robosquawker_moby->pos.f[2] = g + 6.0f; - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } robosquawker_moby->state = ROBOSQUAWKER_STATE_FLIGHT_IDLE; @@ -860,29 +897,32 @@ void robosquawker_update(RsMoby *robosquawker_moby) { } case ROBOSQUAWKER_STATE_GROUND_IDLE: fast_vec_sub(&va, &selected_target_record, &robosquawker_moby->pos); - if (fast_vec_length(&va) < robosquawker_vars->f1FC + 4.0f && + if (fast_vec_length(&va) < robosquawker_vars->target_engagement_radius + 4.0f && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 8.0f && random_integer_below(0x13) == 0) { robosquawker_moby->state = ROBOSQUAWKER_STATE_FACE_AWAY_WAIT_FOR_CHASE; - if (robosquawker_moby->b53 != 4) { + if (robosquawker_moby->animation_index != 4) { blend_moby_animation(robosquawker_moby, 4, 0, scale_game_frames(3)); } } else if (robosquawker_moby->bBC == 1 && random_integer_below(0x13) == 0) { if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } robosquawker_moby->bBC = 0; - } else if (fast_vec_length(&va) > robosquawker_vars->f1FC + 6.0f && - robosquawker_vars->h20A == 0) { + } else if (fast_vec_length(&va) > robosquawker_vars->target_engagement_radius + 6.0f && + robosquawker_vars->ground_idle_preference == 0) { qzero(&robosquawker_vars->v40); robosquawker_moby->state = ROBOSQUAWKER_STATE_TAKEOFF; - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } } @@ -890,12 +930,12 @@ void robosquawker_update(RsMoby *robosquawker_moby) { break; case ROBOSQUAWKER_STATE_WAIT_FOR_CLOSE_TARGET: fast_vec_sub(&va, &selected_target_record, &robosquawker_moby->pos); - if (fast_vec_length(&va) < robosquawker_vars->f1FC - 4.0f && + if (fast_vec_length(&va) < robosquawker_vars->target_engagement_radius - 4.0f && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 8.0f && random_integer_below(0x13) == 0) { robosquawker_moby->state = ROBOSQUAWKER_STATE_FACE_AWAY_WAIT_FOR_CHASE; robosquawker_moby->pos.f[2] += 1.0f; - if (robosquawker_moby->b53 != 4) { + if (robosquawker_moby->animation_index != 4) { blend_moby_animation(robosquawker_moby, 4, 0, scale_game_frames(3)); } } @@ -903,30 +943,32 @@ void robosquawker_update(RsMoby *robosquawker_moby) { case ROBOSQUAWKER_STATE_PREPARE_HOME_HOP: { float a; - a = fast_arc_tan(robosquawker_vars->v1D0.f[0] - robosquawker_moby->pos.f[0], - robosquawker_vars->v1D0.f[1] - robosquawker_moby->pos.f[1]); - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.05f, 0.3f, 0.2f); - fast_vec_sub(&va, &selected_target_record, &robosquawker_vars->v1D0); - if ((fast_vec_length(&va) < robosquawker_vars->f1FC && - absolute_float(robosquawker_vars->v1D0.f[2] - selected_target_record.pos.f[2]) < - 8.0f) || + a = fast_arc_tan(robosquawker_vars->home_position.f[0] - robosquawker_moby->pos.f[0], + robosquawker_vars->home_position.f[1] - robosquawker_moby->pos.f[1]); + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.05f, 0.3f, 0.2f); + fast_vec_sub(&va, &selected_target_record, &robosquawker_vars->home_position); + if ((fast_vec_length(&va) < robosquawker_vars->target_engagement_radius && + absolute_float(robosquawker_vars->home_position.f[2] - + selected_target_record.pos.f[2]) < 8.0f) || robosquawker_moby->bBC == 2) { - if (robosquawker_moby->b21 != 0xFF) { - FUN_L01_0026e090(robosquawker_moby->b21, 2); + if (robosquawker_moby->command_recipient_list_index != 0xFF) { + FUN_L01_0026e090(robosquawker_moby->command_recipient_list_index, 2); } - if (robosquawker_moby->b53 != (rand() & 1) + 9) { + if (robosquawker_moby->animation_index != (rand() & 1) + 9) { blend_moby_animation(robosquawker_moby, (rand() & 1) + 9, 0, scale_game_frames(3)); } - robosquawker_vars->f134 = 0.0f; - robosquawker_vars->f130 = robosquawker_home_hop_gravity_gp; - robosquawker_vars->f138 = robosquawker_home_hop_horizontal_speed_gp * frame_time; - robosquawker_vars->f13C = + robosquawker_vars->motion_horizontal_speed_change_limit = 0.0f; + robosquawker_vars->motion_gravity_step = robosquawker_home_hop_gravity_gp; + robosquawker_vars->motion_horizontal_launch_step = + robosquawker_home_hop_horizontal_speed_gp * frame_time; + robosquawker_vars->motion_vertical_launch_step = FUN_L00_0025abf0(&robosquawker_moby->pos, - &robosquawker_vars->v1D0, + &robosquawker_vars->home_position, &home_hop_travel_duration, robosquawker_home_hop_horizontal_speed_gp * frame_time, -robosquawker_home_hop_gravity_gp); - robosquawker_vars->w144 = 0xD; + robosquawker_vars->motion_behavior_flags = 0xD; robosquawker_vars->b15D = 0; trooper_start_knockback(robosquawker_moby, robosquawker_vars->x120, @@ -934,8 +976,8 @@ void robosquawker_update(RsMoby *robosquawker_moby) { (rand() & 1) + 9, 1, 0); - robosquawker_vars->f170 = 5.0f; - robosquawker_vars->f174 = 10.0f; + robosquawker_vars->motion_ascent_end_animation_frame = 5.0f; + robosquawker_vars->motion_descent_end_animation_frame = 10.0f; update_robosquawker_particle((unsigned char *)robosquawker_moby, (char *)robosquawker_vars); robosquawker_moby->state = ROBOSQUAWKER_STATE_HOME_HOP; @@ -948,11 +990,14 @@ void robosquawker_update(RsMoby *robosquawker_moby) { qzero(robosquawker_vars->x120); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); - if (robosquawker_moby->b53 != 5) { + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 8, scale_game_frames(3)); } return; @@ -967,37 +1012,44 @@ void robosquawker_update(RsMoby *robosquawker_moby) { a = fast_arc_tan(robosquawker_moby->pos.f[0] - selected_target_record.pos.f[0], robosquawker_moby->pos.f[1] - selected_target_record.pos.f[1]); - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.02f, 0.3f, 0.1f); + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.02f, 0.3f, 0.1f); fast_vec_sub(&va, &selected_target_record, &robosquawker_moby->pos); - if (fast_vec_length(&va) < robosquawker_vars->f1FC && + if (fast_vec_length(&va) < robosquawker_vars->target_engagement_radius && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 8.0f && random_integer_below(0x13) == 0) { - if (robosquawker_moby->b21 != 0xFF) { - FUN_L01_0026e090(robosquawker_moby->b21, 1); + if (robosquawker_moby->command_recipient_list_index != 0xFF) { + FUN_L01_0026e090(robosquawker_moby->command_recipient_list_index, 1); } if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } robosquawker_moby->bBC = 0; } else if (robosquawker_moby->bBC == 1 && random_integer_below(0x13) == 0) { if (random_integer_below(0x100) & 1) { - robosquawker_vars->f1F8 = -robosquawker_vars->f1F8; + robosquawker_vars->chase_yaw_offset_degrees = + -robosquawker_vars->chase_yaw_offset_degrees; } - robosquawker_vars->f1F4 = robosquawker_vars->f1F8 * 0.017453292f; - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robosquawker_vars->chase_yaw_offset_radians = + robosquawker_vars->chase_yaw_offset_degrees * 0.017453292f; + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } robosquawker_moby->bBC = 0; } - if (robosquawker_moby->b53 == 4 && (robosquawker_moby->b70 & 2)) { + if (robosquawker_moby->animation_index == 4 && (robosquawker_moby->b70 & 2)) { blend_moby_animation(robosquawker_moby, 3, 0, scale_game_frames(3)); } update_robosquawker_ground_height((char *)robosquawker_moby, (char *)robosquawker_vars); @@ -1011,27 +1063,32 @@ void robosquawker_update(RsMoby *robosquawker_moby) { r = absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]); r = r / vector_distance_xy(&robosquawker_moby->pos, &selected_target_record); - if (robosquawker_vars->w21C != -1) { - select_list_point_toward_target(robosquawker_moby, - walker_paths[robosquawker_vars->w21C], - &selected_target_record, - &vb); + if (robosquawker_vars->ground_navigation_path_index != -1) { + select_list_point_toward_target( + robosquawker_moby, + walker_paths[robosquawker_vars->ground_navigation_path_index], + &selected_target_record, + &vb); } else { qcopy(&vb, &selected_target_record); } a = fast_arc_tan(vb.f[0] - robosquawker_moby->pos.f[0], vb.f[1] - robosquawker_moby->pos.f[1]) + - robosquawker_vars->f1F4; - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.05f, 0.3f, 0.2f); + robosquawker_vars->chase_yaw_offset_radians; + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.05f, 0.3f, 0.2f); va.f[0] = fast_cos(robosquawker_moby->rot.f[2]) * 2.0f; va.f[1] = fast_sin(robosquawker_moby->rot.f[2]) * 2.0f; va.f[2] = 0.0f; - res = FUN_L00_00258b50(robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); - if (fast_dec_timer(&robosquawker_vars->w210) != 0) { - robosquawker_vars->w210 = scale_game_frames((int)random_float_between(30.0f, 90.0f)); - robosquawker_vars->f1F4 = -robosquawker_vars->f1F4; + res = move_moby_with_ground_and_collision_checks( + robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); + if (fast_dec_timer(&robosquawker_vars->chase_yaw_flip_timer_frames) != 0) { + robosquawker_vars->chase_yaw_flip_timer_frames = + scale_game_frames((int)random_float_between(30.0f, 90.0f)); + robosquawker_vars->chase_yaw_offset_radians = + -robosquawker_vars->chase_yaw_offset_radians; } - fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->v1D0); + fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->home_position); d = vector_distance_xy(&robosquawker_moby->pos, &selected_target_record); if ((d < 1.5f || (selected_target_record.moby != 0 && selected_target_record.moby->hA6 == 0x10E && @@ -1039,7 +1096,7 @@ void robosquawker_update(RsMoby *robosquawker_moby) { selected_target_record.moby->state != 0xFD && d < 2.3f)) && !(res & 2)) { robosquawker_moby->state = ROBOSQUAWKER_STATE_PECK_ATTACK; - if (robosquawker_moby->b53 != 6) { + if (robosquawker_moby->animation_index != 6) { blend_moby_animation(robosquawker_moby, 6, 0, scale_game_frames(3)); } } else { @@ -1047,11 +1104,11 @@ void robosquawker_update(RsMoby *robosquawker_moby) { robosquawker_moby->pos.f[0] = previous_position.f[0]; robosquawker_moby->pos.f[1] = previous_position.f[1]; } - if (fast_vec_length(&vc) < robosquawker_vars->f1FC + 4.0f && + if (fast_vec_length(&vc) < robosquawker_vars->target_engagement_radius + 4.0f && absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]) < 8.0f) { - if (robosquawker_moby->b21 != 0xFF) { - FUN_L01_0026e090(robosquawker_moby->b21, 1); + if (robosquawker_moby->command_recipient_list_index != 0xFF) { + FUN_L01_0026e090(robosquawker_moby->command_recipient_list_index, 1); } } else if (robosquawker_moby->bBC != 1) { robosquawker_moby->state = ROBOSQUAWKER_STATE_RETURN_HOME; @@ -1072,8 +1129,9 @@ void robosquawker_update(RsMoby *robosquawker_moby) { a = fast_arc_tan(selected_target_record.pos.f[0] - robosquawker_moby->pos.f[0], selected_target_record.pos.f[1] - robosquawker_moby->pos.f[1]); - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.05f, 0.3f, 0.2f); - same = robosquawker_moby->b52 == robosquawker_moby->b53; + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.05f, 0.3f, 0.2f); + same = robosquawker_moby->b52 == robosquawker_moby->animation_index; hh = compute_interpolated_record_value(robosquawker_moby); dz = absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]); d = vector_distance_xy(&robosquawker_moby->pos, &selected_target_record); @@ -1099,15 +1157,15 @@ void robosquawker_update(RsMoby *robosquawker_moby) { if ((robosquawker_moby->b70 & 2) && vector_distance_xy(&robosquawker_moby->pos, &selected_target_record) > 1.5f) { robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } g = probe_ground_height(&robosquawker_moby->pos, 0x120, 0.5f); - robosquawker_vars->f198 -= frame_time_sq * 9.8f; - robosquawker_moby->pos.f[2] += robosquawker_vars->f198; + robosquawker_vars->ground_vertical_step -= frame_time_sq * 9.8f; + robosquawker_moby->pos.f[2] += robosquawker_vars->ground_vertical_step; if (robosquawker_moby->pos.f[2] < g) { - robosquawker_vars->f198 = 0.0f; + robosquawker_vars->ground_vertical_step = 0.0f; robosquawker_moby->pos.f[2] = g; } update_robosquawker_ground_height((char *)robosquawker_moby, (char *)robosquawker_vars); @@ -1117,46 +1175,49 @@ void robosquawker_update(RsMoby *robosquawker_moby) { int res; float a; - if (robosquawker_vars->w21C != -1) { - select_list_point_toward_target(robosquawker_moby, - walker_paths[robosquawker_vars->w21C], - &robosquawker_vars->v1D0, - &vb); + if (robosquawker_vars->ground_navigation_path_index != -1) { + select_list_point_toward_target( + robosquawker_moby, + walker_paths[robosquawker_vars->ground_navigation_path_index], + &robosquawker_vars->home_position, + &vb); } else { - qcopy(&vb, &robosquawker_vars->v1D0); + qcopy(&vb, &robosquawker_vars->home_position); } a = fast_arc_tan(vb.f[0] - robosquawker_moby->pos.f[0], vb.f[1] - robosquawker_moby->pos.f[1]); - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.02f, 0.3f, 0.1f); + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.02f, 0.3f, 0.1f); va.f[0] = fast_cos(robosquawker_moby->rot.f[2]) * 2.0f; va.f[1] = fast_sin(robosquawker_moby->rot.f[2]) * 2.0f; va.f[2] = 0.0f; - res = FUN_L00_00258b50(robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); - if (vector_distance_xy(&robosquawker_moby->pos, &robosquawker_vars->v1D0) < 2.0f) { + res = move_moby_with_ground_and_collision_checks( + robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); + if (vector_distance_xy(&robosquawker_moby->pos, &robosquawker_vars->home_position) < 2.0f) { robosquawker_moby->state = ROBOSQUAWKER_STATE_GROUND_IDLE; - if (robosquawker_moby->b53 != 3) { + if (robosquawker_moby->animation_index != 3) { blend_moby_animation(robosquawker_moby, 3, 0, scale_game_frames(3)); } } - fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->v1D0); - if (fast_vec_length(&vc) < robosquawker_vars->f1FC) { - if (robosquawker_moby->b21 != 0xFF) { - FUN_L01_0026e090(robosquawker_moby->b21, 1); + fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->home_position); + if (fast_vec_length(&vc) < robosquawker_vars->target_engagement_radius) { + if (robosquawker_moby->command_recipient_list_index != 0xFF) { + FUN_L01_0026e090(robosquawker_moby->command_recipient_list_index, 1); } robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } else if (robosquawker_moby->bBC == 1) { robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } else if (res & 2) { robosquawker_moby->pos.f[0] = previous_position.f[0]; robosquawker_moby->pos.f[1] = previous_position.f[1]; robosquawker_moby->state = ROBOSQUAWKER_STATE_BLOCKED_RETURN_HOME; - if (robosquawker_moby->b53 != 4) { + if (robosquawker_moby->animation_index != 4) { blend_moby_animation(robosquawker_moby, 4, 0, scale_game_frames(3)); } } @@ -1168,7 +1229,7 @@ void robosquawker_update(RsMoby *robosquawker_moby) { if (step_moby_motion(robosquawker_moby, robosquawker_vars->x120) & 1) { qzero(robosquawker_vars->x120); robosquawker_moby->state = ROBOSQUAWKER_STATE_CHASE_TARGET; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } return; @@ -1182,7 +1243,7 @@ void robosquawker_update(RsMoby *robosquawker_moby) { release_robosquawker_particle((Level13VendorMoby *)robosquawker_vars); if (FUN_L00_002dc9f0(robosquawker_moby, robosquawker_vars->x120) != 0) { robosquawker_moby->state = ROBOSQUAWKER_STATE_FLIGHT_IDLE; - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, 0); } robosquawker_vars->hC8 = 0; @@ -1213,31 +1274,34 @@ void robosquawker_update(RsMoby *robosquawker_moby) { r = absolute_float(robosquawker_moby->pos.f[2] - selected_target_record.pos.f[2]); r = r / vector_distance_xy(&robosquawker_moby->pos, &selected_target_record); - if (robosquawker_vars->w21C != -1) { - select_list_point_toward_target(robosquawker_moby, - walker_paths[robosquawker_vars->w21C], - &robosquawker_vars->v1D0, - &vb); + if (robosquawker_vars->ground_navigation_path_index != -1) { + select_list_point_toward_target( + robosquawker_moby, + walker_paths[robosquawker_vars->ground_navigation_path_index], + &robosquawker_vars->home_position, + &vb); } else { - qcopy(&vb, &robosquawker_vars->v1D0); + qcopy(&vb, &robosquawker_vars->home_position); } a = fast_arc_tan(vb.f[0] - robosquawker_moby->pos.f[0], vb.f[1] - robosquawker_moby->pos.f[1]); - FUN_L00_00258278((char *)robosquawker_moby, &robosquawker_vars->f1F0, a, 0.05f, 0.3f, 0.2f); + FUN_L00_00258278( + (char *)robosquawker_moby, &robosquawker_vars->yaw_turn_step, a, 0.05f, 0.3f, 0.2f); va.f[0] = fast_cos(robosquawker_moby->rot.f[2]) * 2.0f; va.f[1] = fast_sin(robosquawker_moby->rot.f[2]) * 2.0f; va.f[2] = 0.0f; - res = FUN_L00_00258b50(robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); - fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->v1D0); + res = move_moby_with_ground_and_collision_checks( + robosquawker_moby, &robosquawker_vars->w180, &va, &vb, 1.0f); + fast_vec_sub(&vc, &selected_target_record, &robosquawker_vars->home_position); if (vector_distance_xy(&robosquawker_moby->pos, &selected_target_record) < 1.5f && r <= 1.0f) { robosquawker_moby->state = ROBOSQUAWKER_STATE_PECK_ATTACK; - if (robosquawker_moby->b53 != 6) { + if (robosquawker_moby->animation_index != 6) { blend_moby_animation(robosquawker_moby, 6, 0, scale_game_frames(3)); } } else if (r <= 1.0f && !(res & 2)) { robosquawker_moby->state = ROBOSQUAWKER_STATE_RETURN_HOME; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } else { @@ -1254,7 +1318,7 @@ void robosquawker_update(RsMoby *robosquawker_moby) { if (random_integer_below(0x63) == 0) { qzero(&robosquawker_vars->v40); robosquawker_moby->state = ROBOSQUAWKER_STATE_TAKEOFF; - if (robosquawker_moby->b53 != 0) { + if (robosquawker_moby->animation_index != 0) { blend_moby_animation(robosquawker_moby, 0, 0, scale_game_frames(3)); } } @@ -1266,11 +1330,13 @@ void robosquawker_update(RsMoby *robosquawker_moby) { RsOther *candidate_moby; float g; - if (robosquawker_moby->b52 != 5 && robosquawker_moby->b53 != 5) { + if (robosquawker_moby->b52 != 5 && robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } - va.f[0] = fast_cos(robosquawker_moby->rot.f[2]) * (robosquawker_vars->f204 * frame_time); - va.f[1] = fast_sin(robosquawker_moby->rot.f[2]) * (robosquawker_vars->f204 * frame_time); + va.f[0] = + fast_cos(robosquawker_moby->rot.f[2]) * (robosquawker_vars->walking_speed * frame_time); + va.f[1] = + fast_sin(robosquawker_moby->rot.f[2]) * (robosquawker_vars->walking_speed * frame_time); va.f[2] = 0.0f; fast_vec_add(&vb, &robosquawker_moby->pos, &va); for (candidate_moby = (RsOther *)level13_moby_list_head; candidate_moby != 0; @@ -1306,17 +1372,18 @@ void robosquawker_update(RsMoby *robosquawker_moby) { } qcopy(&robosquawker_moby->pos, &vb); g = probe_ground_height(&robosquawker_moby->pos, 0x120, 0.5f); - robosquawker_vars->f198 -= frame_time_sq * 9.8f; - robosquawker_moby->pos.f[2] += robosquawker_vars->f198; + robosquawker_vars->ground_vertical_step -= frame_time_sq * 9.8f; + robosquawker_moby->pos.f[2] += robosquawker_vars->ground_vertical_step; if (robosquawker_moby->pos.f[2] < g) { - robosquawker_vars->f198 = 0.0f; + robosquawker_vars->ground_vertical_step = 0.0f; robosquawker_moby->pos.f[2] = g; } - if (robosquawker_vars->p218 == 0 || - vector_distance_xy(&robosquawker_moby->pos, robosquawker_vars->p218 + 0x10) > - convert_integer_to_float(robosquawker_vars->h216)) { + if (robosquawker_vars->walk_range_anchor == 0 || + vector_distance_xy(&robosquawker_moby->pos, + robosquawker_vars->walk_range_anchor + 0x10) > + convert_integer_to_float(robosquawker_vars->walk_range_radius)) { robosquawker_moby->state = ROBOSQUAWKER_STATE_RETURN_HOME; - if (robosquawker_moby->b53 != 5) { + if (robosquawker_moby->animation_index != 5) { blend_moby_animation(robosquawker_moby, 5, 0, scale_game_frames(3)); } } diff --git a/src/overlays/l14/hero/hero_set_state.c b/src/overlays/l14/hero/hero_set_state.c index 5c772c011d..c2f8ffea80 100644 --- a/src/overlays/l14/hero/hero_set_state.c +++ b/src/overlays/l14/hero/hero_set_state.c @@ -73,10 +73,11 @@ int hero_set_state(int requested_state, int animation_update_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - animation_update_mode != 2)) + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L14_0015F5C4 == 2 || D_L14_0015F5C4 == 6) && animation_update_mode != 2) + if ((D_L14_0015F5C4 == 2 || D_L14_0015F5C4 == 6) && + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l14/hero/update_hero_motion_by_state.c b/src/overlays/l14/hero/update_hero_motion_by_state.c index 987e9fe9c0..ed2b8070de 100644 --- a/src/overlays/l14/hero/update_hero_motion_by_state.c +++ b/src/overlays/l14/hero/update_hero_motion_by_state.c @@ -389,7 +389,7 @@ struct PlayerJointTable { }; extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); -s32 D_L14_0015F68C = 0; +s32 l14_look_usage_event_count __asm__("D_L14_0015F68C") = 0; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); extern void build_scaled_hero_move_impulse(f32, f32) __asm__("FUN_L00_002132b8"); @@ -431,7 +431,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern void build_spherical_offset(void *, f32, f32, f32) __asm__("FUN_00214db0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); @@ -526,7 +526,7 @@ void update_hero_motion_by_state(void) __asm__("FUN_L14_00228cd0"); void update_hero_motion_by_state(void) { struct MobyView *moby = MV(hero.moby); - s32 sub = hero.state.step; + s32 state_step_before_update = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 vector_and_descriptor_scratch; @@ -580,7 +580,7 @@ void update_hero_motion_by_state(void) { D_L14_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L14_0015F68C++; + l14_look_usage_event_count++; } } } @@ -2629,7 +2629,7 @@ void update_hero_motion_by_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (state_step_before_update != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l14/mobys/blarg_heavy_interceptor.c b/src/overlays/l14/mobys/blarg_heavy_interceptor.c index 7b96578c7e..7b63ded96d 100644 --- a/src/overlays/l14/mobys/blarg_heavy_interceptor.c +++ b/src/overlays/l14/mobys/blarg_heavy_interceptor.c @@ -201,7 +201,7 @@ typedef struct BlargHeavyInterceptorVars { u8 pad_26[0x2]; u8 unk28; u8 pad_29[0x5]; - u8 unk2E; + u8 removal_status; u8 pad_2F[0x11]; f32 unk40[4]; u8 pad_50[0x8]; @@ -211,7 +211,7 @@ typedef struct BlargHeavyInterceptorVars { u8 pad_5B[0x5]; s16 anim_state; u8 pad_62[0x5]; - u8 unk67; + u8 hit_flash_target_red; u8 pad_68[0x8]; s32 turret_group; s32 spawn_path; @@ -221,8 +221,8 @@ typedef struct BlargHeavyInterceptorVars { s32 path_segment; s16 unk88; s16 rejoin_path_loop; - f32 unk8C; - f32 unk90[4]; + f32 path_point_segment_distance; + f32 cached_aim_point_position[4]; f32 unkA0[4]; f32 unkB0[4]; f32 unkC0[4]; @@ -234,11 +234,11 @@ typedef struct BlargHeavyInterceptorVars { f32 unk130[4]; f32 unk140[4]; u8 pad_150[0x10]; - f32 unk160[4]; - f32 unk170[4]; + f32 beam_rotation_blink_and_aim_path_state[4]; + f32 aim_point_position[4]; f32 unk180[4]; f32 unk190[4]; - f32 unk1A0[4]; + f32 oscillation_state[4]; f32 unk1B0[4]; f32 unk1C0[4]; f32 unk1D0[4]; @@ -249,14 +249,14 @@ typedef struct BlargHeavyInterceptorVars { f32 unk1F8; f32 yaw_drift; s16 unk200; - s16 unk202; + s16 red_light_tint_enabled; s32 patrol_path; - s16 unk208; + s16 return_path_complete; s16 group_member_count; s32 flags; - f32 unk210; - f32 unk214; - f32 unk218; + f32 initial_path_distance_fraction; + f32 aim_point_glow_quad_scale; + f32 glow_camera_pull_distance_limit; f32 unk21C; } BlargHeavyInterceptorVars; @@ -265,6 +265,9 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { enum { INTERCEPTOR_STATE_GROUP_EFFECTS_CONTROLLER = 8 }; + enum { + INTERCEPTOR_REMOVAL_STATUS_MARK_FOR_REMOVAL = 2 + }; BlargHeavyInterceptorVars *moby_vars = (BlargHeavyInterceptorVars *)moby->pvars; float vector_scratch[4]; float secondary_vector_scratch[4]; @@ -273,7 +276,7 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { int path_seg; float path_t; - if ((u8)moby_vars->unk2E == 2) { + if ((u8)moby_vars->removal_status == INTERCEPTOR_REMOVAL_STATUS_MARK_FOR_REMOVAL) { moby_vars->flags = 0; FUN_0020c828(moby); return; @@ -327,19 +330,19 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { moby_vars->max_health = 4; moby_vars->unk28 = 3; qcopy(&moby->pos, (char *)l14_paths[moby_vars->spawn_path] + 0x10); - qcopy(moby_vars->unk170, (char *)l14_paths[moby_vars->unk78] + 0x10); + qcopy(moby_vars->aim_point_position, (char *)l14_paths[moby_vars->unk78] + 0x10); initialize_blarg_heavy_interceptor_paths(moby); moby_vars->unk88 = 1; moby_vars->unk21C = -1.0f; moby_vars->unk180[0] = moby_vars->unk180[1] = moby_vars->unk180[2] = 0.0f; moby_vars->unk190[1] = moby_vars->unk190[2] = moby_vars->unk190[3] = 0.0f; - moby_vars->unk160[0] = 0.0f; + moby_vars->beam_rotation_blink_and_aim_path_state[0] = 0.0f; moby_vars->flags = 0; - moby_vars->unk160[1] = 0.0f; - moby_vars->unk1A0[0] = 0.0f; - moby_vars->unk1A0[1] = 0.0f; - moby_vars->unk1A0[2] = 0.0f; - moby_vars->unk1A0[3] = 0.0f; + moby_vars->beam_rotation_blink_and_aim_path_state[1] = 0.0f; + moby_vars->oscillation_state[0] = 0.0f; + moby_vars->oscillation_state[1] = 0.0f; + moby_vars->oscillation_state[2] = 0.0f; + moby_vars->oscillation_state[3] = 0.0f; moby_vars->unk1B0[0] = moby->rot.z; *(s16 *)&moby_vars->unk1B0[1] = 0; moby_vars->unk1B0[2] = 0.0f; @@ -364,7 +367,7 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { moby_vars->timer_1F2 = scale_game_frames(blarg_heavy_interceptor_target_tracking_duration_frames_gp); } - moby_vars->unk202 = 0; + moby_vars->red_light_tint_enabled = 0; moby_vars->unk200 = 1; found = 0; hit = update_blarg_heavy_interceptor_aim_transforms(moby, 1); @@ -372,13 +375,19 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { update_blarg_heavy_interceptor_patrol_path_position(moby); FUN_L14_002aea08_c618(moby); if (hit) { - lerp_vector(vector_scratch, moby_vars->unk90, moby_vars->unkD0, 0.5f); - qcopy(secondary_vector_scratch, moby_vars->unk90); - noop_main_callback(secondary_vector_scratch, moby_vars->unk214 * 0.8f); - noop_main_callback(vector_scratch, moby_vars->unk214 * 0.48f); - if (FUN_L00_001f2868_c618(moby_vars->unk214 * 0.48f, vector_scratch, 0, 0, 0) || - FUN_L00_001f2868_c618( - moby_vars->unk214 * 0.9f, secondary_vector_scratch, 0, 0, 0)) { + lerp_vector( + vector_scratch, moby_vars->cached_aim_point_position, moby_vars->unkD0, 0.5f); + qcopy(secondary_vector_scratch, moby_vars->cached_aim_point_position); + noop_main_callback(secondary_vector_scratch, + moby_vars->aim_point_glow_quad_scale * 0.8f); + noop_main_callback(vector_scratch, moby_vars->aim_point_glow_quad_scale * 0.48f); + if (FUN_L00_001f2868_c618( + moby_vars->aim_point_glow_quad_scale * 0.48f, vector_scratch, 0, 0, 0) || + FUN_L00_001f2868_c618(moby_vars->aim_point_glow_quad_scale * 0.9f, + secondary_vector_scratch, + 0, + 0, + 0)) { struct Moby *t = D_L14_00174540.target; if ((char *)t == D_001413D0_lui || @@ -416,7 +425,7 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { blarg_heavy_interceptor_tracking_and_group_wait_glow_red_gp; if (*(struct Moby **)(&moby_vars->unk180[3]) != 0) { moby_vars->unk200 = 1; - moby_vars->unk202 = 1; + moby_vars->red_light_tint_enabled = 1; update_blarg_heavy_interceptor_aim_transforms(moby, 1); qcopy(vector_scratch, &(*(struct Moby **)(&moby_vars->unk180[3]))->pos); vector_scratch[2] += 0.5f; @@ -427,14 +436,19 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { } else { vector_scratch[2] -= 0.5f; } - ease_c618(moby_vars->unk170, vector_scratch[0], moby_vars->unk180, 0.003f, 0.2f, 0.0f); - ease_c618(&moby_vars->unk170[1], + ease_c618(moby_vars->aim_point_position, + vector_scratch[0], + moby_vars->unk180, + 0.003f, + 0.2f, + 0.0f); + ease_c618(&moby_vars->aim_point_position[1], vector_scratch[1], &moby_vars->unk180[1], 0.003f, 0.2f, 0.0f); - ease_c618(&moby_vars->unk170[2], + ease_c618(&moby_vars->aim_point_position[2], vector_scratch[2], &moby_vars->unk180[2], 0.003f, @@ -443,15 +457,15 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { update_blarg_heavy_interceptor_patrol_path_position(moby); if ((s8)(*(struct Moby **)(&moby_vars->unk180[3]))->state < 0 || fast_dec_timer_s16(&moby_vars->timer_1F2)) { - moby_vars->unk8C = 0.0f; + moby_vars->path_point_segment_distance = 0.0f; moby_vars->path_point = 0; - moby_vars->unk208 = 0; + moby_vars->return_path_complete = 0; moby->state = INTERCEPTOR_STATE_WAIT_FOR_GROUP_READY; } } else { moby_vars->path_point = 0; - moby_vars->unk8C = 0.0f; - moby_vars->unk208 = 0; + moby_vars->path_point_segment_distance = 0.0f; + moby_vars->return_path_complete = 0; moby->state = INTERCEPTOR_STATE_WAIT_FOR_GROUP_READY; } case INTERCEPTOR_STATE_WAIT_FOR_GROUP_READY: @@ -499,8 +513,8 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { moby->state = INTERCEPTOR_STATE_FOLLOW_RETURN_PATH; moby_vars->path_point = p->count - 2; - moby_vars->unk8C = p->points[moby_vars->path_point].f[3]; - moby_vars->unk208 = 0; + moby_vars->path_point_segment_distance = p->points[moby_vars->path_point].f[3]; + moby_vars->return_path_complete = 0; update_blarg_heavy_interceptor_return_path_position(moby, 0.01f, 5.0f, -1.0f); blend_moby_animation_c618(moby, 0, 0, scale_game_frames(10)); } @@ -509,7 +523,7 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { case INTERCEPTOR_STATE_FOLLOW_RETURN_PATH: FUN_L14_002aea08_c618(moby); update_blarg_heavy_interceptor_return_path_position(moby, 0.01f, 5.0f, -1.0f); - if (moby_vars->unk208 != 0) { + if (moby_vars->return_path_complete != 0) { int *tab = ((int *)l14_paths[moby_vars->unk78]); near_seg = 0; @@ -540,7 +554,8 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { } source_path_distance += moby_vars->unk1C0[3]; tab = ((int *)l14_paths[moby_vars->spawn_path]); - t = source_path_distance / moby_vars->unk160[3] * moby_vars->unk190[0]; + t = source_path_distance / moby_vars->beam_rotation_blink_and_aim_path_state[3] * + moby_vars->unk190[0]; rejoin_path_loop_enabled = moby_vars->rejoin_path_loop; path_seg = 0; path_t = 0.0f; @@ -573,19 +588,19 @@ void blarg_heavy_interceptor_update(struct Moby *moby) { &moby_vars->unk1C0[3], moby_vars->rejoin_path_loop, 0.0f); - ease_c618(moby_vars->unk170, + ease_c618(moby_vars->aim_point_position, vector_scratch[0], moby_vars->unk180, l14_blarg_heavy_interceptor_path_easing_error_gain, l14_blarg_heavy_interceptor_path_easing_damping_coefficient, 0.0f); - ease_c618(&moby_vars->unk170[1], + ease_c618(&moby_vars->aim_point_position[1], vector_scratch[1], &moby_vars->unk180[1], l14_blarg_heavy_interceptor_path_easing_error_gain, l14_blarg_heavy_interceptor_path_easing_damping_coefficient, 0.0f); - ease_c618(&moby_vars->unk170[2], + ease_c618(&moby_vars->aim_point_position[2], vector_scratch[2], &moby_vars->unk180[2], l14_blarg_heavy_interceptor_path_easing_error_gain, @@ -831,7 +846,7 @@ void process_blarg_heavy_interceptor_hit_reactions(struct Moby *moby) { switch (hit_reaction_result) { case HIT_REACTION_ANIMATE_WITH_LOW_RED_FLASH: case HIT_REACTION_LOW_RED_FLASH_AND_HIT_ANIMATION: - blarg_heavy_interceptor_vars->unk67 = 0x64; + blarg_heavy_interceptor_vars->hit_flash_target_red = 0x64; blend_moby_animation(moby, 1, 0, 5); break; case HIT_REACTION_PLAY_HIT_ANIMATION: @@ -1105,11 +1120,11 @@ void draw_blarg_heavy_interceptor_light_ring(char *moby) { o[0] = ring_vertex_scratch[0]; o[1] = ring_vertex_scratch[1]; o[2] = ring_vertex_scratch[2]; - if (moby_vars->unk202 != 0) { + if (moby_vars->red_light_tint_enabled != 0) { cols[i] = blarg_heavy_interceptor_light_ring_vertex_colors[i] & 0xFF0000FF; } } - if (moby_vars->unk202 != 0) { + if (moby_vars->red_light_tint_enabled != 0) { FUN_L00_001fde98(blarg_heavy_interceptor_light_ring_vertex_count_gp, f.verts, cols, @@ -1136,7 +1151,7 @@ void draw_blarg_heavy_interceptor_light_ring(char *moby) { o[1] = ring_vertex_scratch[1]; o[2] = ring_vertex_scratch[2]; } - if (moby_vars->unk202 != 0) { + if (moby_vars->red_light_tint_enabled != 0) { FUN_L00_001fde98(blarg_heavy_interceptor_light_ring_vertex_count_gp, f.verts, cols, @@ -1236,10 +1251,11 @@ void draw_blarg_heavy_interceptor_spinning_beam(struct Moby *moby) { beam_placement_scratch[3][1] = beam_origin[1]; beam_placement_scratch[3][2] = beam_origin[2] + 0.125f; beam_placement_scratch[3][3] = 1.0f; - beam_placement_scratch[0][0] = fast_cos(d->unk160[0]); - beam_placement_scratch[0][1] = fast_sin(d->unk160[0]); + beam_placement_scratch[0][0] = fast_cos(d->beam_rotation_blink_and_aim_path_state[0]); + beam_placement_scratch[0][1] = fast_sin(d->beam_rotation_blink_and_aim_path_state[0]); beam_placement_scratch[0][2] = 0.0f; - d->unk160[0] = fast_add_rotations(d->unk160[0], -0.06981317f); + d->beam_rotation_blink_and_aim_path_state[0] = + fast_add_rotations(d->beam_rotation_blink_and_aim_path_state[0], -0.06981317f); pk.b = tex_b(0xB); pk.c = 0x0000FF9000000260ULL; pk.d = 0x8000000048ULL; @@ -1360,7 +1376,7 @@ void draw_blarg_heavy_interceptor_camera_facing_glow(struct Moby *m) { pk.uv[5] = 0.0f; pk.uv[6] = 0.0f; pk.uv[7] = 0.0f; - if (d->unk202 != 0) { + if (d->red_light_tint_enabled != 0) { col = 0x7F40407F; pk.col[3] = col; pk.col[2] = col; @@ -1419,7 +1435,7 @@ void draw_blarg_heavy_interceptor_camera_pulled_glow(struct Moby *m) { float glow_to_camera_distance; u32 col; int j; - qcopy(glow_quad_position, d->unk90); + qcopy(glow_quad_position, d->cached_aim_point_position); glow_quad_position[2] += 0.01f; glow_quad_position[3] = 1.0f; pk.b = get_effect_texture_alt(0xB); @@ -1431,7 +1447,7 @@ void draw_blarg_heavy_interceptor_camera_pulled_glow(struct Moby *m) { fast_vec_sub(glow_to_camera_vector, D_L14_001674C0_lui, glow_quad_position); glow_to_camera_distance = fast_vec_length(glow_to_camera_vector); if (0.0f < glow_to_camera_distance) { - float camera_pull_distance = d->unk218; + float camera_pull_distance = d->glow_camera_pull_distance_limit; float camera_distance_margin = glow_to_camera_distance - *(float *)&blarg_heavy_interceptor_glow_minimum_camera_separation_gp; @@ -1451,7 +1467,7 @@ void draw_blarg_heavy_interceptor_camera_pulled_glow(struct Moby *m) { pk.uv[5] = 0.0f; pk.uv[6] = 0.0f; pk.uv[7] = 0.0f; - if (d->unk202 != 0) { + if (d->red_light_tint_enabled != 0) { col = 0x7F40407F; pk.col[3] = col; pk.col[2] = col; @@ -1465,7 +1481,7 @@ void draw_blarg_heavy_interceptor_camera_pulled_glow(struct Moby *m) { pk.col[0] = col; } for (j = 0; j < 4; j++) { - fast_vec_scale(pk.m[j], D_L14_001D8640[j], d->unk214); + fast_vec_scale(pk.m[j], D_L14_001D8640[j], d->aim_point_glow_quad_scale); fast_vec_add(pk.m[j], pk.m[j], glow_quad_position); } draw_geometry_quad(&pk, 0, 0); @@ -1480,13 +1496,13 @@ void initialize_blarg_heavy_interceptor_paths(struct Moby *moby) { int i; float segment_length; path = ((int *)l14_paths[moby_vars->unk78]); - *(int *)&moby_vars->unk160[3] = 0; + *(int *)&moby_vars->beam_rotation_blink_and_aim_path_state[3] = 0; for (i = 0; i < path[0]; i++) { segment_length = fast_vec_dist((char *)path + (i * 16 + 0x10), (char *)path + (((i + 1) % path[0]) * 16 + 0x10)); *(float *)((char *)path + (i << 4) + 0x1C) = segment_length; if (i != path[0] - 1) { - moby_vars->unk160[3] += segment_length; + moby_vars->beam_rotation_blink_and_aim_path_state[3] += segment_length; } } path = ((int *)l14_paths[moby_vars->spawn_path]); @@ -1504,7 +1520,7 @@ void initialize_blarg_heavy_interceptor_paths(struct Moby *moby) { *(float *)((char *)path + (i << 4) + 0x1C) = fast_vec_dist( (char *)path + (i * 16 + 0x10), (char *)path + (((i + 1) % path[0]) * 16 + 0x10)); } - if (moby_vars->unk210 != 0.0f) { + if (moby_vars->initial_path_distance_fraction != 0.0f) { int *sampling_path = ((int *)l14_paths[moby_vars->unk78]); moby_vars->path_segment = 0; moby_vars->unk1C0[3] = 0.0f; @@ -1513,19 +1529,20 @@ void initialize_blarg_heavy_interceptor_paths(struct Moby *moby) { &moby_vars->path_segment, &moby_vars->unk1C0[3], moby_vars->rejoin_path_loop, - moby_vars->unk210 * moby_vars->unk160[3]); - moby_vars->unk8C = 0.0f; + moby_vars->initial_path_distance_fraction * + moby_vars->beam_rotation_blink_and_aim_path_state[3]); + moby_vars->path_point_segment_distance = 0.0f; moby_vars->path_point = 0; FUN_L00_0025d808_2af688(sampling_path, &moby->pos, &moby_vars->path_point, - &moby_vars->unk8C, + &moby_vars->path_point_segment_distance, moby_vars->rejoin_path_loop, - moby_vars->unk210 * moby_vars->unk190[0]); + moby_vars->initial_path_distance_fraction * moby_vars->unk190[0]); } else { moby_vars->path_point = 0; moby_vars->path_segment = 0; - moby_vars->unk8C = 0.0f; + moby_vars->path_point_segment_distance = 0.0f; moby_vars->unk1C0[3] = 0.0f; } } @@ -1539,25 +1556,26 @@ void update_blarg_heavy_interceptor_patrol_aim_point(struct Moby *moby) { float path_target_position[4]; float save = interceptor_instance_vars->unk1C0[3]; int save2 = interceptor_instance_vars->path_segment; - int r = FUN_L00_0025d808_2af918(((int *)l14_paths[interceptor_instance_vars->unk78]), - path_target_position, - &interceptor_instance_vars->path_segment, - &interceptor_instance_vars->unk1C0[3], - interceptor_instance_vars->rejoin_path_loop, - interceptor_instance_vars->unk160[2]); - FUN_L00_0025b8c0_c(interceptor_instance_vars->unk170, + int r = FUN_L00_0025d808_2af918( + ((int *)l14_paths[interceptor_instance_vars->unk78]), + path_target_position, + &interceptor_instance_vars->path_segment, + &interceptor_instance_vars->unk1C0[3], + interceptor_instance_vars->rejoin_path_loop, + interceptor_instance_vars->beam_rotation_blink_and_aim_path_state[2]); + FUN_L00_0025b8c0_c(interceptor_instance_vars->aim_point_position, interceptor_instance_vars->unk180, path_target_position[0], *(float *)&l14_blarg_heavy_interceptor_path_easing_error_gain, *(float *)&l14_blarg_heavy_interceptor_path_easing_damping_coefficient, 0.0f); - FUN_L00_0025b8c0_c(&interceptor_instance_vars->unk170[1], + FUN_L00_0025b8c0_c(&interceptor_instance_vars->aim_point_position[1], &interceptor_instance_vars->unk180[1], path_target_position[1], *(float *)&l14_blarg_heavy_interceptor_path_easing_error_gain, *(float *)&l14_blarg_heavy_interceptor_path_easing_damping_coefficient, 0.0f); - FUN_L00_0025b8c0_c(&interceptor_instance_vars->unk170[2], + FUN_L00_0025b8c0_c(&interceptor_instance_vars->aim_point_position[2], &interceptor_instance_vars->unk180[2], path_target_position[2], *(float *)&l14_blarg_heavy_interceptor_path_easing_error_gain, @@ -1567,7 +1585,8 @@ void update_blarg_heavy_interceptor_patrol_aim_point(struct Moby *moby) { if (r != 0) { interceptor_instance_vars->unk1C0[3] = save; interceptor_instance_vars->path_segment = save2; - interceptor_instance_vars->unk160[2] = -interceptor_instance_vars->unk160[2]; + interceptor_instance_vars->beam_rotation_blink_and_aim_path_state[2] = + -interceptor_instance_vars->beam_rotation_blink_and_aim_path_state[2]; } } } @@ -1590,7 +1609,8 @@ void update_blarg_heavy_interceptor_patrol_path_position(struct Moby *moby) { } source_path_distance += heavy_interceptor_vars->unk1C0[3]; tab = ((int *)l14_paths[heavy_interceptor_vars->spawn_path]); - destination_path_distance = source_path_distance / heavy_interceptor_vars->unk160[3] * + destination_path_distance = source_path_distance / + heavy_interceptor_vars->beam_rotation_blink_and_aim_path_state[3] * heavy_interceptor_vars->unk190[0]; destination_path_loop_enabled = heavy_interceptor_vars->rejoin_path_loop; destination_segment_index = 0; @@ -1636,17 +1656,17 @@ void update_blarg_heavy_interceptor_return_path_position(struct Moby *moby, BlargHeavyInterceptorVars *return_path_moby_vars = (BlargHeavyInterceptorVars *)moby->pvars; int *list = ((int *)l14_paths[return_path_moby_vars->patrol_path]); float target_position[4]; - if (return_path_moby_vars->unk208 != 0) { + if (return_path_moby_vars->return_path_complete != 0) { qcopy(target_position, (char *)list + list[0] * 16); } else { if (FUN_L00_0025d808_2afb40(list, target_position, &return_path_moby_vars->path_point, - &return_path_moby_vars->unk8C, + &return_path_moby_vars->path_point_segment_distance, 0, path_traversal_speed * frame_time * path_direction_multiplier) != 0) { - return_path_moby_vars->unk208 = 1; + return_path_moby_vars->return_path_complete = 1; } } FUN_L00_0025b8c0_c( @@ -1720,12 +1740,12 @@ void update_blarg_heavy_interceptor_oscillation_and_patrol_heading(struct Moby * blarg_heavy_interceptor_vertical_oscillation_amplitude_gp, blarg_heavy_interceptor_vertical_oscillation_phase_increment_gp, moby, - interceptor_private_vars->unk1A0, - &interceptor_private_vars->unk1A0[1]); + interceptor_private_vars->oscillation_state, + &interceptor_private_vars->oscillation_state[1]); update_moby_rotation_oscillation( moby, - &interceptor_private_vars->unk1A0[2], - &interceptor_private_vars->unk1A0[3], + &interceptor_private_vars->oscillation_state[2], + &interceptor_private_vars->oscillation_state[3], blarg_heavy_interceptor_rotation_oscillation_amplitude_gp, blarg_heavy_interceptor_rotation_oscillation_first_phase_increment_gp, blarg_heavy_interceptor_rotation_oscillation_second_phase_increment_gp); @@ -1778,7 +1798,7 @@ int update_blarg_heavy_interceptor_aim_transforms(struct Moby *moby, int flag) { float half_span_vector[4]; float rotation_angle; fast_vec_sub(half_span_vector, - blarg_heavy_interceptor_private_vars->unk170, + blarg_heavy_interceptor_private_vars->aim_point_position, blarg_heavy_interceptor_private_vars->unkD0); fast_vec_scale(half_span_vector, half_span_vector, 0.5f); fast_vec_add(bounding_sphere, blarg_heavy_interceptor_private_vars->unkD0, half_span_vector); @@ -1805,8 +1825,8 @@ int update_blarg_heavy_interceptor_aim_transforms(struct Moby *moby, int flag) { build_axis_rotation_quaternion( blarg_heavy_interceptor_private_vars->unk130, 1, rotation_angle); blarg_heavy_interceptor_private_vars->unk1C0[0] = rotation_angle; - qcopy(blarg_heavy_interceptor_private_vars->unk90, - blarg_heavy_interceptor_private_vars->unk170); + qcopy(blarg_heavy_interceptor_private_vars->cached_aim_point_position, + blarg_heavy_interceptor_private_vars->aim_point_position); if (flag != 0) { add_draw_callback(FUN_L14_002ae260_u, moby); blarg_heavy_interceptor_private_vars->flags |= 2; @@ -1829,11 +1849,11 @@ void update_blarg_heavy_interceptor_light_ring_alpha(struct Moby *moby) { BlargHeavyInterceptorVars *moby_private_vars = (BlargHeavyInterceptorVars *)moby->pvars; s32 step; s32 i; - f32 advanced_blink_phase = moby_private_vars->unk160[1] + 0.5f; - moby_private_vars->unk160[1] = advanced_blink_phase; + f32 advanced_blink_phase = moby_private_vars->beam_rotation_blink_and_aim_path_state[1] + 0.5f; + moby_private_vars->beam_rotation_blink_and_aim_path_state[1] = advanced_blink_phase; step = truncate_float_to_s32(advanced_blink_phase); - if (1.0f <= moby_private_vars->unk160[1]) - *(s32 *)&moby_private_vars->unk160[1] = 0; + if (1.0f <= moby_private_vars->beam_rotation_blink_and_aim_path_state[1]) + *(s32 *)&moby_private_vars->beam_rotation_blink_and_aim_path_state[1] = 0; for (i = 0; i < blarg_heavy_interceptor_light_ring_vertex_count_gp; i++) { s32 light_fade_value = blarg_heavy_interceptor_light_ring_fade_values[i]; if (light_fade_value != 0) { diff --git a/src/overlays/l14/mobys/elevator.c b/src/overlays/l14/mobys/elevator.c index 8173775862..deb03a86d5 100644 --- a/src/overlays/l14/mobys/elevator.c +++ b/src/overlays/l14/mobys/elevator.c @@ -62,18 +62,18 @@ typedef struct { f32 vel[4]; /* 0xC0 */ f32 rot[4]; /* 0xD0 */ u8 padE0[0x30]; - s32 item; /* 0x110 */ - s32 target; /* 0x114 */ - s32 clip_a; /* 0x118 */ - s32 clip_b; /* 0x11C */ - s32 clip_c; /* 0x120 */ - s16 bought; /* 0x124 */ - s16 level; /* 0x126 */ - f32 level_vel; /* 0x128 */ - s32 motor; /* 0x12C */ - s32 motor_volume; /* 0x130 */ - s32 hum_volume; /* 0x134 */ - s32 i138; /* 0x138 */ + s32 item; /* 0x110 */ + s32 target; /* 0x114 */ + s32 clip_a; /* 0x118 */ + s32 clip_b; /* 0x11C */ + s32 clip_c; /* 0x120 */ + s16 bought; /* 0x124 */ + s16 level; /* 0x126 */ + f32 level_vel; /* 0x128 */ + s32 motor; /* 0x12C */ + s32 motor_volume; /* 0x130 */ + s32 hum_volume; /* 0x134 */ + s32 idle_glow_phase; /* 0x138 */ } L14VendorVars; void elevator_update(struct Moby *m) __asm__("FUN_L14_002ee8d8"); @@ -87,6 +87,9 @@ void elevator_update(struct Moby *elevator_moby) { ELEVATOR_STATE_SETTLE_AT_ENDPOINT = 3, ELEVATOR_STATE_WAIT_FOR_RIDER_EXIT = 4 }; + enum { + ELEVATOR_IDLE_GLOW_INITIAL_PHASE = 0 + }; L14VendorVars *elevator_vars = (L14VendorVars *)elevator_moby->pvars; Vec4 previous_elevator_position; Vec4 rot; @@ -123,7 +126,7 @@ void elevator_update(struct Moby *elevator_moby) { elevator_vars->motor = -1; elevator_vars->motor_volume = -1; elevator_vars->hum_volume = -1; - elevator_vars->i138 = 0; + elevator_vars->idle_glow_phase = ELEVATOR_IDLE_GLOW_INITIAL_PHASE; break; } case ELEVATOR_STATE_WAIT_FOR_RIDER: diff --git a/src/overlays/l14/mobys/enemy_fighter.c b/src/overlays/l14/mobys/enemy_fighter.c index ae1ff5974c..db2f24af00 100644 --- a/src/overlays/l14/mobys/enemy_fighter.c +++ b/src/overlays/l14/mobys/enemy_fighter.c @@ -51,17 +51,17 @@ char D_L14_001FCE48[] = typedef struct { u8 pad0[0x60]; - s32 segment; /* 0x60 */ - s32 along; /* 0x64 */ - s32 path; /* 0x68 */ - s32 sound; /* 0x6C */ - f32 f70; /* 0x70 */ - f32 f74; /* 0x74 */ - f32 f78; /* 0x78 */ - s32 timer; /* 0x7C */ - f32 f80; /* 0x80 */ - f32 f84; /* 0x84 */ - f32 f88; /* 0x88 */ + s32 segment; /* 0x60 */ + s32 along; /* 0x64 */ + s32 path; /* 0x68 */ + s32 sound; /* 0x6C */ + f32 f70; /* 0x70 */ + f32 position_y_spring_state; /* 0x74 */ + f32 position_z_spring_state; /* 0x78 */ + s32 timer; /* 0x7C */ + f32 bank_spring_state; /* 0x80 */ + f32 pitch_spring_state; /* 0x84 */ + f32 yaw_spring_state; /* 0x88 */ } EnemyFighterVars; void enemy_fighter_update(struct Moby *moby) __asm__("FUN_L14_002fc0f0"); @@ -131,8 +131,10 @@ void enemy_fighter_update(struct Moby *moby) { qcopy(&moby->pos, path + 0x10); moby->rot.z = fast_arc_tan(*(float *)(path + 0x20) - *(float *)(path + 0x10), *(float *)(path + 0x24) - *(float *)(path + 0x14)); - enemy_fighter_vars->f80 = enemy_fighter_vars->f84 = enemy_fighter_vars->f88 = - enemy_fighter_vars->f70 = enemy_fighter_vars->f74 = enemy_fighter_vars->f78 = 0.0f; + enemy_fighter_vars->bank_spring_state = enemy_fighter_vars->pitch_spring_state = + enemy_fighter_vars->yaw_spring_state = enemy_fighter_vars->f70 = + enemy_fighter_vars->position_y_spring_state = + enemy_fighter_vars->position_z_spring_state = 0.0f; } break; } diff --git a/src/overlays/l14/mobys/flying_car.c b/src/overlays/l14/mobys/flying_car.c index 2bb0155620..98432d7eef 100644 --- a/src/overlays/l14/mobys/flying_car.c +++ b/src/overlays/l14/mobys/flying_car.c @@ -44,17 +44,17 @@ typedef struct { char pad0[0x60]; unsigned char effect[0x10]; /* 0x60 */ int f70; - int f74; + int path_sampling_state; int path; /* 0x78 */ int sound; /* 0x7C */ - float f80; - float f84; + float position_x_spring_state; + float position_y_spring_state; float f88; short timer; /* 0x8C */ char pad8E[2]; - float f90; - float f94; - float f98; + float bank_spring_state; + float pitch_spring_state; + float yaw_spring_state; char pad9C[4]; int part; /* 0xA0 */ float fA4; @@ -81,7 +81,7 @@ typedef struct { typedef struct { char pad0[0x74]; - unsigned char b74; + unsigned char voice_state; char pad75[0x13]; struct Moby *f88; } Snd_6ee0; @@ -140,7 +140,8 @@ void flying_car_update(struct Moby *flying_car_moby) { } if (flying_car_data->sound != -1) { Snd_6ee0 *voice_entry = (Snd_6ee0 *)((u8 *)&voice_pool + flying_car_data->sound * 0x70); - if (voice_entry->f88 == flying_car_moby && voice_entry->b74 != 0) { + if (voice_entry->f88 == flying_car_moby && + voice_entry->voice_state != VOICE_SLOT_FREE) { release_voice_slot(flying_car_data->sound); } } @@ -259,11 +260,13 @@ void flying_car_update(struct Moby *flying_car_moby) { flying_car_data->timer = scale_game_frames(flying_car_path_reset_delay_frames_gp); flying_car_moby->state = FLYING_CAR_FOLLOW_PATH; flying_car_data->f70 = 0; - flying_car_data->f74 = 0; + flying_car_data->path_sampling_state = 0; qcopy(&flying_car_moby->pos, &path->a); flying_car_moby->rot.z = fast_arc_tan(path->b.x - path->a.x, path->b.y - path->a.y); - flying_car_data->f80 = flying_car_data->f84 = flying_car_data->f88 = 0.0f; - flying_car_data->f90 = flying_car_data->f94 = flying_car_data->f98 = 0.0f; + flying_car_data->position_x_spring_state = flying_car_data->position_y_spring_state = + flying_car_data->f88 = 0.0f; + flying_car_data->bank_spring_state = flying_car_data->pitch_spring_state = + flying_car_data->yaw_spring_state = 0.0f; if (flying_car_data->part >= 0) { struct Moby *o = (struct Moby *)(D_L14_0015FFD8_macro + (flying_car_data->part << 8)); diff --git a/src/overlays/l14/mobys/flying_debris.c b/src/overlays/l14/mobys/flying_debris.c index 7714ce3c8a..227838764a 100644 --- a/src/overlays/l14/mobys/flying_debris.c +++ b/src/overlays/l14/mobys/flying_debris.c @@ -75,7 +75,7 @@ typedef struct FlyingDebrisVars { u8 pad_C[0x4]; u8 timer_10; u8 pad_11[0x1]; - s16 unk12; + s16 point_light_slot_index; f32 unk14; f32 unk18; f32 unk1C; @@ -206,10 +206,11 @@ void flying_debris_update(struct Moby *moby) { else qcopy(push, (char *)moby + 0xE0); fast_vec_add(at, at, push); - if (debris_vars->unk12 == -1) { - debris_vars->unk12 = allocate_colored_effect_slot(at, range, 0.0f, bright, green, blue); + if (debris_vars->point_light_slot_index == -1) { + debris_vars->point_light_slot_index = + allocate_colored_effect_slot(at, range, 0.0f, bright, green, blue); } else { - light_record = (float *)(D_L14_001809C0 + debris_vars->unk12 * 32); + light_record = (float *)(D_L14_001809C0 + debris_vars->point_light_slot_index * 32); qcopy(light_record + 4, at); light_record[7] = range; light_record[0] = bright; @@ -265,11 +266,11 @@ unsigned char *spawn_flying_debris(struct Moby *debris_source_moby, float angle, void remove_flying_debris(u8 *debris_moby) { FlyingDebrisVars *debris_vars = *(u8 **)(debris_moby + 0x78); - s16 light_index = debris_vars->unk12; + s16 light_index = debris_vars->point_light_slot_index; if (light_index != -1) { release_point_light_slot(light_index); - debris_vars->unk12 = -1; + debris_vars->point_light_slot_index = -1; } mark_moby_for_removal(debris_moby); } diff --git a/src/overlays/l14/mobys/minibomber.c b/src/overlays/l14/mobys/minibomber.c index 8702ea9e87..f3a78739a5 100644 --- a/src/overlays/l14/mobys/minibomber.c +++ b/src/overlays/l14/mobys/minibomber.c @@ -76,8 +76,8 @@ typedef struct Moby_2B5938 { char pad36[0x12]; float rot; /* 0x48 */ char pad4C[6]; - unsigned char f52; /* 0x52 */ - unsigned char f53; /* 0x53 */ + unsigned char source_animation_id; /* 0x52 */ + unsigned char target_animation_id; /* 0x53 */ char pad54[0x1C]; unsigned char f70; /* 0x70 */ char pad71[7]; @@ -85,9 +85,9 @@ typedef struct Moby_2B5938 { char pad7C[3]; unsigned char f7F; /* 0x7F */ char pad80[0x14]; - int f94; /* 0x94 */ + int active_collision; /* 0x94 */ char pad98[0x1A]; - short fB2; /* 0xB2 */ + short unique_id; /* 0xB2 */ } Moby_2B5938; typedef struct Data { @@ -287,8 +287,9 @@ void minibomber_update(Moby_2B5938 *moby) { float spd; if (moby->f70 & 2) { - if (moby->f52 == moby->f53 && moby->f52 != 0) { - if (moby->f52 == 2) { + if (moby->source_animation_id == moby->target_animation_id && + moby->source_animation_id != 0) { + if (moby->source_animation_id == 2) { blend_moby_animation(moby, 0, 0, 10); } else { set_moby_animation_c(moby, 0, 0); @@ -321,43 +322,43 @@ void minibomber_update(Moby_2B5938 *moby) { case MINIBOMBER_STATE_INITIALIZE: { PathNode *path; if (d->fD0 == -1) { - debug_print(D_L14_001FBDF0, moby->fB2); + debug_print(D_L14_001FBDF0, moby->unique_id); mark_moby_for_removal(moby); return; } path = ((PathNode *)l14_paths[d->fD0]); if (path->n == 0) { - debug_print(D_L14_001FBE18, moby->fB2); + debug_print(D_L14_001FBE18, moby->unique_id); mark_moby_for_removal(moby); return; } if (d->fD4 == -1) { - debug_print(D_L14_001FBE58, moby->fB2); + debug_print(D_L14_001FBE58, moby->unique_id); mark_moby_for_removal(moby); return; } if (((PathNode *)l14_paths[d->fD4])->n == 0) { - debug_print(D_L14_001FBE80, moby->fB2); + debug_print(D_L14_001FBE80, moby->unique_id); mark_moby_for_removal(moby); return; } if (d->fD8 == -1) { - debug_print(D_L14_001FBEC0, moby->fB2); + debug_print(D_L14_001FBEC0, moby->unique_id); mark_moby_for_removal(moby); return; } if (((PathNode *)l14_paths[d->fD8])->n == 0) { - debug_print(D_L14_001FBEE8, moby->fB2); + debug_print(D_L14_001FBEE8, moby->unique_id); mark_moby_for_removal(moby); return; } if (d->f150 == -1) { - debug_print(D_L14_001FBF20, moby->fB2); + debug_print(D_L14_001FBF20, moby->unique_id); mark_moby_for_removal(moby); return; } if (((PathNode *)l14_paths[d->f150])->n == 0) { - debug_print(minibomber_empty_exit_path_diagnostic, moby->fB2); + debug_print(minibomber_empty_exit_path_diagnostic, moby->unique_id); mark_moby_for_removal(moby); return; } @@ -383,7 +384,7 @@ void minibomber_update(Moby_2B5938 *moby) { if (d->fB4 != 2) { moby->state = MINIBOMBER_STATE_FOLLOW_INTRO_OR_EXIT_PATH; moby->f34 &= 0xFFBE; - moby->f94 = moby->cls->f10; + moby->active_collision = moby->cls->f10; FUN_L14_002b5d18_c((char *)moby); } break; @@ -487,7 +488,7 @@ void minibomber_update(Moby_2B5938 *moby) { moby->state = MINIBOMBER_STATE_RETRACE_INTRO_OR_EXIT_PATH; FUN_L14_002b5c30_c((char *)moby); } else if (fast_dec_timer_s16(&d->f102) != 0) { - if (moby->f53 != 2) { + if (moby->target_animation_id != 2) { moby->state = MINIBOMBER_STATE_AIM_AT_BOMB_POINT; d->f102 = scale_game_frames(minibomber_bomb_aim_duration_frames); d->f104 = 0.0f; @@ -549,7 +550,7 @@ void minibomber_update(Moby_2B5938 *moby) { (float)d->f102 / convert_integer_to_float(scale_game_frames(minibomber_bomb_aim_duration_frames))); build_axis_rotation_quaternion(d->f120, 2, blended_aim_angle); - if (moby->f53 == 2) { + if (moby->target_animation_id == 2) { moby->state = MINIBOMBER_STATE_HOLD_AT_PATH_END; d->f102 = scale_game_frames(minibomber_aim_return_duration_frames); } else if (fast_dec_timer_s16(&d->f102) != 0) { diff --git a/src/overlays/l14/mobys/platform.c b/src/overlays/l14/mobys/platform.c index e7276e73d4..c5de30ed35 100644 --- a/src/overlays/l14/mobys/platform.c +++ b/src/overlays/l14/mobys/platform.c @@ -46,7 +46,7 @@ typedef struct TiltingPlatformVars { u8 pad_30[0x2C]; s32 unk5C; f32 unk60; - f32 unk64; + f32 up_vector_y_velocity; f32 unk68; u8 pad_6C[0x4]; s32 timer_70; @@ -162,7 +162,7 @@ void update_platform_tilt_basis(char *moby, f32 unused_arg1, f32 unused_arg2) { 0.2f, 0.0f); vendor_spring((float *)&MOBY(moby)->rot_row2.y, - &platform_tilt_state->unk64, + &platform_tilt_state->up_vector_y_velocity, target_up_vector[1], 0.005f, 0.2f, diff --git a/src/overlays/l14/mobys/qwark_oltanis.c b/src/overlays/l14/mobys/qwark_oltanis.c index 64d4e9f20f..21c133e2c7 100644 --- a/src/overlays/l14/mobys/qwark_oltanis.c +++ b/src/overlays/l14/mobys/qwark_oltanis.c @@ -54,7 +54,10 @@ extern int D_L14_001BABD0[]; void mark_elevator_collected(Level14VendorMoby *vendor_moby) __asm__("FUN_L14_002ef5a8"); void mark_elevator_collected(Level14VendorMoby *vendor_moby) { - vendor_moby->state = 0; + enum { + ELEVATOR_STATE_COLLECTED = 0 + }; + vendor_moby->state = ELEVATOR_STATE_COLLECTED; vendor_moby->data->field124 = 0; D_0014C190_257218[current_level_index] [(short)*(unsigned short *)((char *)vendor_moby + 0xB2) >> 5] |= diff --git a/src/overlays/l14/mobys/racer_path_and_weapon.c b/src/overlays/l14/mobys/racer_path_and_weapon.c index 4d832b245e..15f2d0b6a6 100644 --- a/src/overlays/l14/mobys/racer_path_and_weapon.c +++ b/src/overlays/l14/mobys/racer_path_and_weapon.c @@ -46,22 +46,22 @@ float racer_path_lead_distance_gp __asm__("D_L14_00161A38") = 9.0f; typedef struct RacerVars { u8 pad_0[0x60]; s32 spline; - s32 unk64; + s32 current_path_segment_index; f32 unk68; s32 timer; f32 unk70[4]; u8 pad_80[0x4]; - s32 unk84; + s32 initial_position_path_index; s32 unk88; s16 nearest_segment; - s16 unk8E; + s16 lead_distance_blend_start_segment; f32 position_spring_velocity[3]; u8 pad_9C[0x4]; f32 bone_transform[16]; f32 unkE0[4]; s32 unkF0; u8 pad_F4[0x1C]; - u8 unk110; + u8 target_facing_yaw_quaternion; u8 pad_111[0x3F]; u8 unk150; u8 pad_151[0x32]; @@ -72,7 +72,7 @@ typedef struct RacerVars { f32 unk1A0[4]; f32 unk1B0[4]; s32 aim_timer; - s32 unk1C4; + s32 weapon_aim_blend_elapsed_frames; s32 timer_1C8; u8 pad_1CC[0x4]; f32 target_rotation[4]; @@ -93,7 +93,7 @@ void initialize_racer_path_tracking(struct Moby *racer_moby) { unsigned short second_point_segment; moby_data->unk70[1] = racer_path_lead_distance_gp; *(int *)&moby_data->unk68 = 0; - moby_data->unk64 = 0; + moby_data->current_path_segment_index = 0; z = moby_data->unk68; tg = (char *)l14_paths[moby_data->unk88] + 0x30; nearest_path_position.t = z; @@ -120,7 +120,7 @@ void initialize_racer_path_tracking(struct Moby *racer_moby) { 5.0f, z); second_point_segment = nearest_path_position.i; - moby_data->unk8E = second_point_segment; + moby_data->lead_distance_blend_start_segment = second_point_segment; moby_data->unk70[2] = z; for (k = (short)second_point_segment; k < moby_data->nearest_segment; k++) { moby_data->unk70[2] += *(float *)(path + k * 16 + 0x1C); @@ -140,7 +140,7 @@ int interpolate_racer_to_path_start(struct Moby *racer_moby) { remaining_frames = convert_integer_to_float(moby_data->timer); lerp_vector(&racer_moby->pos, ent + 0x10, - ((char *)l14_paths[moby_data->unk84]) + 0x10, + ((char *)l14_paths[moby_data->initial_position_path_index]) + 0x10, remaining_frames * moby_data->unk70[0]); return ok; } @@ -151,7 +151,7 @@ extern char *D_L14_0015FFD8_6570 __asm__("D_L14_0015FFD8"); typedef struct { char p[0x48]; - float f48; + float group_anchor_to_hero_heading; } M_6570; typedef struct { @@ -221,8 +221,9 @@ void reset_racer_group_to_hero_path_position(struct Moby *group_anchor_moby) { char *od = *(char **)(o + 0x78); char *path = (char *)l14_splines[*(int *)(od + 0x60)].path; o[0x20] = 6; - ((M_6570 *)o)->f48 = fast_arc_tan(hero.motion.pos.f[0] - group_anchor_moby->pos.x, - hero.motion.pos.f[1] - group_anchor_moby->pos.y); + ((M_6570 *)o)->group_anchor_to_hero_heading = + fast_arc_tan(hero.motion.pos.f[0] - group_anchor_moby->pos.x, + hero.motion.pos.f[1] - group_anchor_moby->pos.y); path_step_distance = -racer_path_lead_distance_gp; *(int *)(od + 0x64) = hero.rail_segment; *(float *)(od + 0x68) = hero.rail_seg_frac; @@ -268,7 +269,7 @@ typedef struct { int pad[3]; } Ray_67e8; -int D_L14_00161A3C = 0x8c; +int l14_racer_weapon_aim_duration_frames __asm__("D_L14_00161A3C") = 0x8c; #include "rnc/overlay/l14/mobys/racer_path_and_weapon_data/update_racer_path_and_weapon.h" @@ -306,10 +307,12 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { float blend; float target_yaw_offset; - if (moby_data->unk64 >= moby_data->unk8E) { + if (moby_data->current_path_segment_index >= moby_data->lead_distance_blend_start_segment) { float sum = 0.0f; int k; - for (k = moby_data->unk8E; k < moby_data->unk64; k++) { + for (k = moby_data->lead_distance_blend_start_segment; + k < moby_data->current_path_segment_index; + k++) { sum += *(float *)(path + k * 16 + 0x1C); } sum += moby_data->unk68; @@ -321,18 +324,30 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { racer_path_lead_distance_gp + (-3.0f - racer_path_lead_distance_gp) * sum; } *(int *)&moby_data->unk68 = 0; - moby_data->unk64 = 0; + moby_data->current_path_segment_index = 0; z = moby_data->unk68; - FUN_L00_0025df68( - path, &D_0013F3D0_67e8, &near.x, &moby_data->unk64, &moby_data->unk68, 0, 20.0f, 5.0f, z); - FUN_L00_0025d808(path, &near, &moby_data->unk64, &moby_data->unk68, 0, -moby_data->unk70[1]); + FUN_L00_0025df68(path, + &D_0013F3D0_67e8, + &near.x, + &moby_data->current_path_segment_index, + &moby_data->unk68, + 0, + 20.0f, + 5.0f, + z); + FUN_L00_0025d808(path, + &near, + &moby_data->current_path_segment_index, + &moby_data->unk68, + 0, + -moby_data->unk70[1]); vendor_spring(&racer_moby->pos.x, moby_data->position_spring_velocity, near.x, 0.01f, 0.2f, z); vendor_spring( &racer_moby->pos.y, &moby_data->position_spring_velocity[1], near.y, 0.01f, 0.2f, z); vendor_spring( &racer_moby->pos.z, &moby_data->position_spring_velocity[2], near.z, 0.01f, 0.2f, z); { - int i = moby_data->unk64; + int i = moby_data->current_path_segment_index; char *current_path_record = path + i * 16; char *lookahead_path_record = path + (i + 5) * 16; racer_moby->rot.z = fast_arc_tan( @@ -343,8 +358,8 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { racer_moby->command = 1; } if (racer_moby->command == 1) { - moby_data->aim_timer = scale_game_frames(D_L14_00161A3C); - moby_data->unk1C4 = 0; + moby_data->aim_timer = scale_game_frames(l14_racer_weapon_aim_duration_frames); + moby_data->weapon_aim_blend_elapsed_frames = 0; racer_moby->command = 2; build_moby_bone_transform(racer_moby, 4, joint_transform_and_aim_vectors); build_moby_bone_transform(racer_moby, 5, ma); @@ -364,8 +379,9 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { float k; build_moby_bone_transform(racer_moby, 0, moby_data->bone_transform); blend = 1.0f; - aim_timer_fraction = convert_integer_to_float(moby_data->aim_timer) / - convert_integer_to_float(scale_game_frames(D_L14_00161A3C)); + aim_timer_fraction = + convert_integer_to_float(moby_data->aim_timer) / + convert_integer_to_float(scale_game_frames(l14_racer_weapon_aim_duration_frames)); k = weapon_aim_final_path_step; ti = ((RacerSeg_67e8 *)moby_data)->seg; tf = ((RacerSeg_67e8 *)moby_data)->frac; @@ -387,8 +403,8 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { } else if (turn < -1.2217305f) { turn = -1.2217305f; } - (moby_data->unk1C4)++; - if (scale_game_frames(30) < moby_data->unk1C4) { + (moby_data->weapon_aim_blend_elapsed_frames)++; + if (scale_game_frames(30) < moby_data->weapon_aim_blend_elapsed_frames) { if (racer_moby->command == 4) { racer_moby->command = 0; } else { @@ -396,10 +412,10 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { register_beam_slot(racer_moby, firing_command, 1); racer_moby->command = firing_command; } - moby_data->unk1C4 = scale_game_frames(30); + moby_data->weapon_aim_blend_elapsed_frames = scale_game_frames(30); } if (racer_moby->command == 2 || racer_moby->command == 4) { - blend = convert_integer_to_float(moby_data->unk1C4) / + blend = convert_integer_to_float(moby_data->weapon_aim_blend_elapsed_frames) / convert_integer_to_float(scale_game_frames(30)); if (racer_moby->command == 4) { blend = 1.0f - blend; @@ -445,7 +461,7 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { qcopy(moby_data->unk1B0, &scl); if (fast_dec_timer(&moby_data->aim_timer) != 0) { racer_moby->command = 4; - moby_data->unk1C4 = 0; + moby_data->weapon_aim_blend_elapsed_frames = 0; } if (racer_moby->command == 3) { if (set_beam_origin_transform_and_endpoint( @@ -522,7 +538,7 @@ void update_racer_path_and_weapon(struct Moby *racer_moby) { } else if (target_yaw_offset < -1.2217305f) { target_yaw_offset = -1.2217305f; } - build_axis_rotation_quaternion(&moby_data->unk110, 2, target_yaw_offset); + build_axis_rotation_quaternion(&moby_data->target_facing_yaw_quaternion, 2, target_yaw_offset); } /* Ported from rac1-decomp (src/overlays/l14_oltanis/vendor_002ACCC0.c: func_L14_002D84A8), where it is exact; names translated to the US level program. */ @@ -534,7 +550,7 @@ void advance_moby_along_path(struct Moby *moby) { int path_index = path_tracking_state->spline; FUN_L00_0025d808((int)l14_splines[path_index].path, &moby->pos, - &path_tracking_state->unk64, + &path_tracking_state->current_path_segment_index, &path_tracking_state->unk68, 0, l14_racer_path_follow_speed * frame_time); diff --git a/src/overlays/l14/mobys/rocket.c b/src/overlays/l14/mobys/rocket.c index db882d710b..a7e2f1e8cd 100644 --- a/src/overlays/l14/mobys/rocket.c +++ b/src/overlays/l14/mobys/rocket.c @@ -162,7 +162,7 @@ extern float rocket_puff_middle_right_offset_delta_gp __asm__("D_L14_00161F9C") extern float rocket_puff_final_right_offset_gp __asm__("D_L14_00161FA0") __attribute__((sda)); -int D_L14_00161FA4 = 0x7f204080; +int l14_rocket_initial_exhaust_puff_color __asm__("D_L14_00161FA4") = 0x7f204080; void spawn_rocket_exhaust_puffs(struct Moby *source_moby) __asm__("FUN_L14_002fded0"); @@ -184,7 +184,14 @@ void spawn_rocket_exhaust_puffs(struct Moby *source_moby) { for (i = 1; i >= 0; i--) { puff_signed_amount = random_integer_below(0x10); k = random_integer_below(2) == 0 ? puff_signed_amount : -puff_signed_amount; - puff = spawn_puff(B, 0.2f, 1.0f, 0.9f, k, &D_L14_0015F580, 200000.0f, D_L14_00161FA4); + puff = spawn_puff(B, + 0.2f, + 1.0f, + 0.9f, + k, + &D_L14_0015F580, + 200000.0f, + l14_rocket_initial_exhaust_puff_color); if (puff != 0) { L14PuffTail *f = &puff->tail; diff --git a/src/overlays/l14/mobys/rocket_strike_fighter.c b/src/overlays/l14/mobys/rocket_strike_fighter.c index 71339c7035..7122e56c2e 100644 --- a/src/overlays/l14/mobys/rocket_strike_fighter.c +++ b/src/overlays/l14/mobys/rocket_strike_fighter.c @@ -69,22 +69,22 @@ int advance_rocket_strike_fighter_along_flight_path(struct Moby *m) __asm__("FUN typedef struct { u8 pad0[0x60]; - s32 segment; /* 0x60 */ - s32 along; /* 0x64 */ - s32 path; /* 0x68 */ - s32 sound; /* 0x6C */ - f32 f70; /* 0x70 */ - f32 f74; /* 0x74 */ - f32 f78; /* 0x78 */ - s32 timer; /* 0x7C */ - f32 f80; /* 0x80 */ - f32 f84; /* 0x84 */ - f32 f88; /* 0x88 */ - s32 rocket; /* 0x8C: its class 922 rocket */ - s32 flythrough; /* 0x90: the flythrough camera descriptor it starts */ - s32 stage; /* 0x94 */ - s32 mission[3]; /* 0x98: the missions that must be complete */ - s32 clip; /* 0xA4 */ + s32 segment; /* 0x60 */ + s32 along; /* 0x64 */ + s32 path; /* 0x68 */ + s32 sound; /* 0x6C */ + f32 f70; /* 0x70 */ + f32 position_y_spring_velocity; /* 0x74 */ + f32 position_z_spring_velocity; /* 0x78 */ + s32 timer; /* 0x7C */ + f32 rotation_x_spring_velocity; /* 0x80 */ + f32 rotation_y_spring_velocity; /* 0x84 */ + f32 rotation_z_spring_velocity; /* 0x88 */ + s32 rocket; /* 0x8C: its class 922 rocket */ + s32 flythrough; /* 0x90: the flythrough camera descriptor it starts */ + s32 stage; /* 0x94 */ + s32 mission[3]; /* 0x98: the missions that must be complete */ + s32 clip; /* 0xA4 */ } RocketStrikeFighterVars; void rocket_strike_fighter_update(struct Moby *moby) __asm__("FUN_L14_002fcbb0"); @@ -245,8 +245,10 @@ void rocket_strike_fighter_update(struct Moby *moby) { qcopy(&moby->pos, path + 0x10); moby->rot.z = fast_arc_tan(*(float *)(path + 0x20) - *(float *)(path + 0x10), *(float *)(path + 0x24) - *(float *)(path + 0x14)); - moby_vars->f80 = moby_vars->f84 = moby_vars->f88 = moby_vars->f70 = moby_vars->f74 = - moby_vars->f78 = 0.0f; + moby_vars->rotation_x_spring_velocity = moby_vars->rotation_y_spring_velocity = + moby_vars->rotation_z_spring_velocity = moby_vars->f70 = + moby_vars->position_y_spring_velocity = moby_vars->position_z_spring_velocity = + 0.0f; } break; } diff --git a/src/overlays/l14/mobys/unfolding_column.c b/src/overlays/l14/mobys/unfolding_column.c index fb5da5cf4f..b6fc381df8 100644 --- a/src/overlays/l14/mobys/unfolding_column.c +++ b/src/overlays/l14/mobys/unfolding_column.c @@ -18,13 +18,13 @@ typedef struct UnfoldingColumnMoby { float pos[4]; /* 0x10 */ unsigned char state; /* 0x20 */ char pad21[0x23]; - float f44; /* 0x44 */ + float rotation_angle_radians; /* 0x44 */ char pad48[0x30]; struct UnfoldingColumnVars *data; /* 0x78 */ char pad7C[0x44]; float rot[4]; /* 0xC0 */ char padD0[0x10]; - float fE0[4]; /* 0xE0 */ + float piece_offset_direction[4]; /* 0xE0 */ char padF0[0x10]; } UnfoldingColumnMoby; @@ -123,7 +123,7 @@ void unfolding_column_update(UnfoldingColumnMoby *moby) { UnfoldingColumnPieces *pieces = &data->pieces; UnfoldingColumnMoby *current_piece = pieces->m[data->cur]; fast_dec_timer_s16(&data->timer); - current_piece->f44 = + current_piece->rotation_angle_radians = interpolate_angle(1.5707964f, 0.0f, convert_integer_to_float(data->timer) * data->rate); if (data->timer == 0) { data->timer = scale_game_frames(unfolding_column_piece_unfold_frames); @@ -149,13 +149,13 @@ void unfolding_column_update(UnfoldingColumnMoby *moby) { fast_dec_timer_s16(&data->timer); pieces = data->pieces.m; remaining_timer_fraction = convert_integer_to_float(data->timer) * data->rate; - pivot->f44 = + pivot->rotation_angle_radians = interpolate_scalar_linear(unfolding_column_pivot_final_angle_degrees * 0.017453292f, 0.0f, remaining_timer_fraction); for (i = 0; i < 6; i++) { fast_vec_scale(position_offset, - pivot->fE0, + pivot->piece_offset_direction, unfolding_column_piece_spacing * (float)i + unfolding_column_first_piece_offset); fast_vec_add(pieces[i]->pos, pivot->pos, position_offset); diff --git a/src/overlays/l14/mobys/wind_control.c b/src/overlays/l14/mobys/wind_control.c index 714e76faf6..32e77ca9bb 100644 --- a/src/overlays/l14/mobys/wind_control.c +++ b/src/overlays/l14/mobys/wind_control.c @@ -182,9 +182,9 @@ typedef struct { short n320[48]; short n380[48]; short n3E0[48]; - float f440[48]; + float spark_step_distance[48]; int pad500; - int i504; + int spark_area_cuboid_index; } Spk_k; int wind_spark_speed_range_start_gp __asm__("D_L14_00161C30") = 15; @@ -210,7 +210,7 @@ void initialize_wind_spark(struct Moby *wind_control_moby, int i, void *spark_tr up[1] = 0.0f; up[3] = 0.0f; fast_vec_cross(side, fwd, up); - qcopy(spark_vars->pos[i], &l14_cuboids[spark_vars->i504].pos); + qcopy(spark_vars->pos[i], &l14_cuboids[spark_vars->spark_area_cuboid_index].pos); x = -spark_vars->f14; y = randf_sym(0.0f, spark_vars->f18); z = randf_sym(0.0f, spark_vars->f1C); @@ -223,10 +223,11 @@ void initialize_wind_spark(struct Moby *wind_control_moby, int i, void *spark_tr fast_vec_add(spark_position, spark_position, position_offset); spark_vars->pos[i][3] = random_float_between(wind_spark_size_range_start_gp, wind_spark_size_range_end_gp); - spark_vars->f440[i] = + spark_vars->spark_step_distance[i] = random_float_between(wind_spark_speed_range_start_gp, wind_spark_speed_range_end_gp) * frame_time; - lifetime_frames = scale_game_frames(ftoi_k(spark_vars->f14 * 2.0f / spark_vars->f440[i])); + lifetime_frames = + scale_game_frames(ftoi_k(spark_vars->f14 * 2.0f / spark_vars->spark_step_distance[i])); spark_vars->n320[i] = lifetime_frames; spark_vars->n380[i] = lifetime_frames; spark_vars->n3E0[i] = 0; @@ -257,7 +258,7 @@ void update_wind_sparks(struct Moby *wind_control_moby) { spark_travel_direction[2] = 0.0f; qcopy(clip, &hero.motion.pos); clip[2] += 1.0f; - in_clip = is_point_inside_clip_volume(clip, spark_vars->i504); + in_clip = is_point_inside_clip_volume(clip, spark_vars->spark_area_cuboid_index); i = 0; pos = spark_vars->pos[0]; shade = spark_vars->n3E0; @@ -289,7 +290,8 @@ void update_wind_sparks(struct Moby *wind_control_moby) { *shade = spark_alpha; } } - fast_vec_scale(spark_position_delta, spark_travel_direction, spark_vars->f440[i]); + fast_vec_scale( + spark_position_delta, spark_travel_direction, spark_vars->spark_step_distance[i]); fast_vec_add(pos, pos, spark_position_delta); if (in_clip != 0 && absolute_float(pos[0] - l14_camera.pos.f[0]) < 8.0f && absolute_float(pos[1] - l14_camera.pos.f[1]) < 8.0f && diff --git a/src/overlays/l14/path_camera.c b/src/overlays/l14/path_camera.c index 11d049505e..28b716cd23 100644 --- a/src/overlays/l14/path_camera.c +++ b/src/overlays/l14/path_camera.c @@ -17,7 +17,7 @@ typedef struct { char pad0[0xB0]; - float fB0; /* tan of half the field of view */ + float tan_half_fov; /* tan of half the field of view */ } VendorView_5290; extern VendorView_5290 l14_camera_projection_state __asm__("D_L14_0016D140"); @@ -37,8 +37,9 @@ typedef struct { void setup_path_camera(char *camera) __asm__("FUN_L14_00314f00"); void setup_path_camera(char *camera) { - u128 stand; - char *rec = *(char **)(l14_camera_preset_rows + *(short *)(camera + 0x84) * 32 + 0x1C); + u128 stand; + char *path_camera_setup_preset = + *(char **)(l14_camera_preset_rows + *(short *)(camera + 0x84) * 32 + 0x1C); char *camera_saved_state; char *fov_stops_state_base; char *path; @@ -53,7 +54,7 @@ void setup_path_camera(char *camera) { int i; int fov_stop_count; - (*&rec)[0x38] = 3; + (*&path_camera_setup_preset)[0x38] = 3; camera_saved_state = *(char **)(camera + 0x70); *(int *)(camera_saved_state + 0x40) = 0; camera_run = (int *)(camera_saved_state + 0x40); @@ -62,7 +63,8 @@ void setup_path_camera(char *camera) { camera_run[3] = 0; camera_run[4] = 0; *(short *)(camera_run + 5) = 0; - *((short *)(camera_run + 5) + 1) = scale_game_frames(*(short *)(rec + 0x3A)); + *((short *)(camera_run + 5) + 1) = + scale_game_frames(*(short *)(path_camera_setup_preset + 0x3A)); fov_stops_state_base = *(char **)(camera + 0x70); fov_stops = (Stops_4f00 *)(fov_stops_state_base + 0x58); { @@ -72,9 +74,9 @@ void setup_path_camera(char *camera) { fov_stops->seg[k] = -1; } } - fov_stops->fov_end = fast_arc_tan(1.0f, l14_camera_projection_state.fB0) * 2.0f; - if (*(int *)(rec + 0x20) >= 0) { - path = ((char *)l14_paths[*(int *)(rec + 0x20)]); + fov_stops->fov_end = fast_arc_tan(1.0f, l14_camera_projection_state.tan_half_fov) * 2.0f; + if (*(int *)(path_camera_setup_preset + 0x20) >= 0) { + path = ((char *)l14_paths[*(int *)(path_camera_setup_preset + 0x20)]); fov_stop_count = 0; for (i = 0; i < *(int *)path; i++) { char *seg = path + i * 16; @@ -90,13 +92,15 @@ void setup_path_camera(char *camera) { *(float *)(camera_run + 2) += segment_length; } } - if (*(short *)(rec + 0x3A) > 0) { - *(float *)(rec + 0x3C) = + if (*(short *)(path_camera_setup_preset + 0x3A) > 0) { + *(float *)(path_camera_setup_preset + 0x3C) = *(float *)(camera_run + 2) / - convert_integer_to_float(scale_game_frames(*(short *)(rec + 0x3A))) * 60.0f; + convert_integer_to_float( + scale_game_frames(*(short *)(path_camera_setup_preset + 0x3A))) * + 60.0f; } - if (*(int *)(rec + 0x24) >= 0) { - path = ((char *)l14_paths[*(int *)(rec + 0x24)]); + if (*(int *)(path_camera_setup_preset + 0x24) >= 0) { + path = ((char *)l14_paths[*(int *)(path_camera_setup_preset + 0x24)]); for (i = 0; i < *(int *)path; i++) { char *seg; segment_length = fast_vec_dist(path + (i * 16 + 0x10), @@ -120,7 +124,7 @@ void setup_path_camera(char *camera) { qcopy(camera, initial_camera_transform); qcopy(camera + 0x10, initial_camera_transform + 0x10); qcopy(camera + 0x20, initial_camera_transform + 0x20); - path = (char *)l14_cuboids + *(int *)(rec + 0x54) * 128 + 0x30; + path = (char *)l14_cuboids + *(int *)(path_camera_setup_preset + 0x54) * 128 + 0x30; stand = 0; ((float *)&stand)[3] = 1.0f; set_race_camera(path, &stand, 0x72, 0); @@ -167,7 +171,8 @@ void update_path_camera(struct UpdateCam *path_camera) { s32 seg2; f32 tt2; char *camera_saved_state = (char *)path_camera->saved_state; - char *rec = *(char **)(l14_camera_preset_rows + path_camera->descriptor_index * 32 + 0x1C); + char *path_camera_preset = + *(char **)(l14_camera_preset_rows + path_camera->descriptor_index * 32 + 0x1C); VendorCamRun_5290 *camera_run = (VendorCamRun_5290 *)(camera_saved_state + 0x40); VendorCamStops_5290 *fov_stops = (VendorCamStops_5290 *)(camera_saved_state + 0x58); char *path; @@ -175,14 +180,15 @@ void update_path_camera(struct UpdateCam *path_camera) { int i; if (camera_run->started == 0) { - char *pa = ((char *)l14_paths[*(int *)(rec + 0x20)]); - char *pb = ((char *)l14_paths[*(int *)(rec + 0x24)]); + char *pa = ((char *)l14_paths[*(int *)(path_camera_preset + 0x20)]); + char *pb = ((char *)l14_paths[*(int *)(path_camera_preset + 0x24)]); path_camera_active = 1; camera_run->started = 1; qcopy(&path_camera->pos, pa + 0x10); - if (*(int *)(rec + 0x28) >= 0) { - struct Moby *o = (struct Moby *)(D_L14_0015FFD8_5290 + *(int *)(rec + 0x28) * 256); - float *ofs = (float *)(rec + 0x2C); + if (*(int *)(path_camera_preset + 0x28) >= 0) { + struct Moby *o = + (struct Moby *)(D_L14_0015FFD8_5290 + *(int *)(path_camera_preset + 0x28) * 256); + float *ofs = (float *)(path_camera_preset + 0x2C); t[0] = ofs[0]; t[1] = ofs[1]; t[2] = ofs[2]; @@ -200,29 +206,30 @@ void update_path_camera(struct UpdateCam *path_camera) { fast_vec_cross(&path_camera->m2, &path_camera->m1, &path_camera->m0); return; } - path = ((char *)l14_paths[*(int *)(rec + 0x20)]); + path = ((char *)l14_paths[*(int *)(path_camera_preset + 0x20)]); qcopy(initial_look_direction_or_previous_position, &path_camera->pos); done = FUN_L00_0025d808(path, &path_camera->pos.x, &camera_run->seg, &camera_run->t, 0, - *(float *)(rec + 0x3C) * frame_time); + *(float *)(path_camera_preset + 0x3C) * frame_time); if (camera_run->timer != 0 && fast_dec_timer_s16(&camera_run->timer) != 0) done = 1; - if (*(u8 *)(rec + 0x39) != 0) + if (*(u8 *)(path_camera_preset + 0x39) != 0) done = 1; if (done) { float ang = fov_stops->fov_end * 0.5f; char *hp; char *mb; - l14_camera_projection_state.fB0 = fast_sin(ang) / fast_cos(ang); + l14_camera_projection_state.tan_half_fov = fast_sin(ang) / fast_cos(ang); update_view_context(); D_L14_001675D8 = 0.25f; path_camera->transition_state = PATH_CAMERA_TRANSITION_PATH_FINISHED; path_camera_active = 0; mb = D_L14_0015FFD8_5290; - reset_racer_group_to_hero_path_position((struct Moby *)(mb + *(int *)(rec + 0x50) * 256)); + reset_racer_group_to_hero_path_position( + (struct Moby *)(mb + *(int *)(path_camera_preset + 0x50) * 256)); hp = (char *)hero.rail_spline; seg = hero.rail_segment; tt = hero.rail_seg_frac; @@ -258,15 +265,16 @@ void update_path_camera(struct UpdateCam *path_camera) { total += *(float *)(path + (remaining_segment_index * 16 + 0x1C)); ang = cosine_interpolate(fov_stops->fov[i], fov_stops->fov[i + 1], sum / total) * 0.017453292f * 0.5f; - l14_camera_projection_state.fB0 = fast_sin(ang) / fast_cos(ang); + l14_camera_projection_state.tan_half_fov = fast_sin(ang) / fast_cos(ang); update_view_context(); } } camera_run->dist += fast_vec_dist(initial_look_direction_or_previous_position, &path_camera->pos); - if (*(int *)(rec + 0x28) >= 0) { - struct Moby *o = (struct Moby *)(D_L14_0015FFD8_5290 + *(int *)(rec + 0x28) * 256); - float *ofs = (float *)(rec + 0x2C); + if (*(int *)(path_camera_preset + 0x28) >= 0) { + struct Moby *o = + (struct Moby *)(D_L14_0015FFD8_5290 + *(int *)(path_camera_preset + 0x28) * 256); + float *ofs = (float *)(path_camera_preset + 0x2C); u[0] = ofs[0]; u[1] = ofs[1]; u[2] = ofs[2]; @@ -275,7 +283,7 @@ void update_path_camera(struct UpdateCam *path_camera) { fast_vec_add(v, &o->pos, u); fast_vec_sub(t, v, &path_camera->pos); } else { - char *look = ((char *)l14_paths[*(int *)(rec + 0x24)]); + char *look = ((char *)l14_paths[*(int *)(path_camera_preset + 0x24)]); seg2 = 0; tt2 = 0.0f; FUN_L00_0025d808( @@ -293,9 +301,10 @@ int check_path_camera_priority(char *camera, char *control_mode_gate_object) __asm__("FUN_L14_00315920"); int check_path_camera_priority(char *camera, char *control_mode_gate_object) { - char *rec = *(char **)(l14_camera_preset_rows + *(short *)(camera + 0x84) * 32 + 0x1C); - int required_control_mode, required_hero_state; - if (*(unsigned char *)(rec + 0x38) != 0) + char *path_camera_priority_preset = + *(char **)(l14_camera_preset_rows + *(short *)(camera + 0x84) * 32 + 0x1C); + int required_control_mode, required_hero_state; + if (*(unsigned char *)(path_camera_priority_preset + 0x38) != 0) return -1; if (control_mode_gate_object != 0 && *(short *)(control_mode_gate_object + 0x7E) == 0) { if (hero.state.control_mode != 15) @@ -303,10 +312,10 @@ int check_path_camera_priority(char *camera, char *control_mode_gate_object) { } if (check_descriptor_hero_trigger(camera) == 0) return 0; - required_control_mode = *(int *)(rec + 0x48); + required_control_mode = *(int *)(path_camera_priority_preset + 0x48); if (required_control_mode >= 0 && hero.state.control_mode != required_control_mode) return 0; - required_hero_state = *(int *)(rec + 0x44); + required_hero_state = *(int *)(path_camera_priority_preset + 0x44); if (required_hero_state >= HERO_STATE_IDLE && hero.state.current != required_hero_state) return 0; return 1; diff --git a/src/overlays/l14/path_key_camera.c b/src/overlays/l14/path_key_camera.c index 824aac53b4..cdadb2f2a6 100644 --- a/src/overlays/l14/path_key_camera.c +++ b/src/overlays/l14/path_key_camera.c @@ -130,12 +130,12 @@ void initialize_path_key_camera(struct UpdateCam *path_key_camera_object) { typedef struct { char pad0[0x24]; - int m24; - int m28; - int m2C; + int first_linked_moby_index; + int second_linked_moby_index; + int third_linked_moby_index; short n30; short n32; - int p34; + int side_zero_rail_spline_index; int p38; } CamRec5d48; @@ -260,7 +260,7 @@ void update_path_key_camera(char *path_key_camera) { D_L14_001624B4 = data->st.count; D_L14_001624B8 = st->idx; - if (hero.rail_spline == (s32)l14_splines_macro[rec->p34].path) { + if (hero.rail_spline == (s32)l14_splines_macro[rec->side_zero_rail_spline_index].path) { side = 0; } else if (hero.rail_spline == (s32)l14_splines_macro[rec->p38].path) { side = 1; @@ -280,9 +280,12 @@ void update_path_key_camera(char *path_key_camera) { } if (rec->n30 < 3 && path_key_camera_linked_moby_event_progress_thresholds[rec->n30][side] <= D_L14_001624C0) { - struct Moby *first_linked_moby = (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->m24 << 8)); - struct Moby *second_linked_moby = (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->m28 << 8)); - struct Moby *third_linked_moby = (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->m2C << 8)); + struct Moby *first_linked_moby = + (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->first_linked_moby_index << 8)); + struct Moby *second_linked_moby = + (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->second_linked_moby_index << 8)); + struct Moby *third_linked_moby = + (struct Moby *)(D_L14_0015FFD8_5d48 + (rec->third_linked_moby_index << 8)); if (hero.rail_spline == (s32)l14_splines_macro[MOBYDATA_5d48(first_linked_moby)->zone].path) { @@ -494,14 +497,14 @@ extern char *l14_camera_preset_rows __asm__("D_L14_0015EF50"); int check_path_key_camera_priority(char *moby, char *other) __asm__("FUN_L14_00316748"); -int check_path_key_camera_priority(char *moby, char *other) { +int check_path_key_camera_priority(char *moby, char *comparison_camera) { char *slot_record = *(char **)(l14_camera_preset_rows + *(short *)(moby + 0x84) * 32 + 0x1C); if (*(int *)(slot_record + 0x20) == 0 && *(short *)(D_L14_00167500 + 0x86) == 0x14) { *(int *)(slot_record + 0x20) = 1; } else if (*(int *)(slot_record + 0x20) == 1) { if (*(short *)(D_L14_00167500 + 0x86) != 0x14) return 1; - if (other == 0 || *(short *)(other + 0x7E) != 0) + if (comparison_camera == 0 || *(short *)(comparison_camera + 0x7E) != 0) return 1; } return 0; diff --git a/src/overlays/l15/hero/hero_set_state.c b/src/overlays/l15/hero/hero_set_state.c index 5e0da8f815..2d50fb0f00 100644 --- a/src/overlays/l15/hero/hero_set_state.c +++ b/src/overlays/l15/hero/hero_set_state.c @@ -76,10 +76,11 @@ int hero_set_state(int requested_state, int entry_animation_mode) { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || - entry_animation_mode != 2)) + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L15_0015F5C4 == 2 || D_L15_0015F5C4 == 6) && entry_animation_mode != 2) + if ((D_L15_0015F5C4 == 2 || D_L15_0015F5C4 == 6) && + entry_animation_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; diff --git a/src/overlays/l15/hero/update_hero_motion_for_current_state.c b/src/overlays/l15/hero/update_hero_motion_for_current_state.c index 066fcba351..62cad161f0 100644 --- a/src/overlays/l15/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l15/hero/update_hero_motion_for_current_state.c @@ -442,7 +442,7 @@ struct PlayerJointTable { }; extern s32 D_L15_0015F688 __attribute__((sda)); -s32 D_L15_0015F68C = 0; +s32 l15_hero_look_timer_completion_count __asm__("D_L15_0015F68C") = 0; extern u8 D_L15_001673D8[]; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); @@ -488,7 +488,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -592,7 +592,7 @@ void update_hero_motion_for_current_state(void) { }; struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 state_step_at_entry = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 spatial_or_hit_descriptor_work; @@ -645,7 +645,7 @@ void update_hero_motion_for_current_state(void) { D_L15_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L15_0015F68C++; + l15_hero_look_timer_completion_count++; } } } @@ -981,11 +981,11 @@ void update_hero_motion_for_current_state(void) { spatial_or_hit_descriptor_work.f[1] += random_float_between(0.0f, 0.03f); spatial_or_hit_descriptor_work.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -2722,7 +2722,7 @@ void update_hero_motion_for_current_state(void) { reduce_and_apply_hero_planar_velocity_addend(frame_time_sq * 12.6f); if (test_hero_animation_frame_window(4.0f) != 0) { s32 i; - f32 w = z; + f32 missile_pitch = z; z = 1.0f; for (i = 0; i < 2; i++) { moby_point_position( @@ -2732,11 +2732,11 @@ void update_hero_motion_for_current_state(void) { spawn_giant_clank_missile((struct MobyView *)hero.moby, &spatial_or_hit_descriptor_work, hero.motion.rot.f[2], - w, + missile_pitch, 0, 0.5f, hero.motion.rot.f[2], - w); + missile_pitch); } } if (hero.air_frames.s != 0) { @@ -2954,7 +2954,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (state_step_at_entry != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l15/mobys/help_hints.c b/src/overlays/l15/mobys/help_hints.c index e870de59cc..272000aafc 100644 --- a/src/overlays/l15/mobys/help_hints.c +++ b/src/overlays/l15/mobys/help_hints.c @@ -42,8 +42,8 @@ typedef struct Stats { typedef struct Items { char p0[0x6E]; - unsigned char f6E; - unsigned char f6F; + unsigned char hint_clip_volume_visited; + unsigned char giant_clank_zone_hint_suppressed; } Items; extern unsigned char D_0013D4DF_2ed398[] __asm__("D_0013D4DF"); @@ -181,11 +181,11 @@ void help_hints_update(struct Moby *moby) { } } if (hero.moby->seq == 0xC && hero.vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { - ((Items *)alternate_item_available)->f6F = 1; + ((Items *)alternate_item_available)->giant_clank_zone_hint_suppressed = 1; } if (is_point_inside_clip_volume(&hero.motion.pos, hint_dialogue_data->vol1C) != 0 && hero.vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK && - ((Items *)alternate_item_available)->f6F == 0 && + ((Items *)alternate_item_available)->giant_clank_zone_hint_suppressed == 0 && ((Help *)quartu_help_message_state)->busy == 0 && ((Help *)quartu_help_message_state)->cur == -1 && *(int *)(item_usage + 0x6EC) >= 0) { help_request(0x3A9C, 0x80); @@ -224,9 +224,9 @@ void help_hints_update(struct Moby *moby) { hint_dialogue_data->last = pick; hint_dialogue_data->hold38 = 0; } - if (((Items *)alternate_item_available)->f6E == 0 && + if (((Items *)alternate_item_available)->hint_clip_volume_visited == 0 && is_point_inside_clip_volume(&hero.motion.pos, hint_dialogue_data->vol2C) != 0) { - ((Items *)alternate_item_available)->f6E = 1; + ((Items *)alternate_item_available)->hint_clip_volume_visited = 1; } break; } diff --git a/src/overlays/l15/mobys/poison_vessel.c b/src/overlays/l15/mobys/poison_vessel.c index 8326f68a13..8a9c18ffd4 100644 --- a/src/overlays/l15/mobys/poison_vessel.c +++ b/src/overlays/l15/mobys/poison_vessel.c @@ -62,7 +62,7 @@ typedef struct Moby_2E9358 { char pad7C[0x28]; unsigned char bA4; char padA5; - short hA6; + short object_class; char padA8[0x14]; unsigned char bBC; } Moby_2E9358; @@ -159,7 +159,8 @@ void poison_vessel_update(Moby_2E9358 *moby) { } } hit_result = find_moby_hit(moby, 0x830000, 0); - if (hit_result != 0 && hit_result->owner != 0 && hit_result->owner->hA6 != moby->hA6) { + if (hit_result != 0 && hit_result->owner != 0 && + hit_result->owner->object_class != moby->object_class) { moby->bBC = 1; } moby->bA4 = 0xFF; diff --git a/src/overlays/l15/mobys/puff_emitter.c b/src/overlays/l15/mobys/puff_emitter.c index 37407f2af6..b038c56d35 100644 --- a/src/overlays/l15/mobys/puff_emitter.c +++ b/src/overlays/l15/mobys/puff_emitter.c @@ -11,7 +11,7 @@ extern void FUN_L00_0026f080(float, float, char *, float *); extern short vertical_effect_motion_scale_gp __asm__("D_L15_00162198") __attribute__((sda)); -int D_L15_0016219C = 3; +int l15_puff_emission_random_range __asm__("D_L15_0016219C") = 3; void puff_emitter_update(struct Moby *moby) __asm__("FUN_L15_002eb928"); @@ -19,7 +19,7 @@ void puff_emitter_update(struct Moby *moby) __asm__("FUN_L15_002eb928"); void puff_emitter_update(struct Moby *moby) { float vertical_motion_vector[4]; float *effect_height_setting = (float *)moby->pvars; - if (random_integer_below(D_L15_0016219C - 1) == 0) { + if (random_integer_below(l15_puff_emission_random_range - 1) == 0) { char *pos = &moby->pos; clear_u64_value(vertical_motion_vector); vertical_motion_vector[2] = random_float_between(0.75f, 1.5f) * diff --git a/src/overlays/l15/mobys/quartu_cutscene_trigger.c b/src/overlays/l15/mobys/quartu_cutscene_trigger.c index d47619aaa6..20ab0366f2 100644 --- a/src/overlays/l15/mobys/quartu_cutscene_trigger.c +++ b/src/overlays/l15/mobys/quartu_cutscene_trigger.c @@ -118,18 +118,18 @@ extern int strlen_alt(char *) __asm__("FUN_001166cc"); extern void print_text_with_texture_3(s32 x, s32 y, s32 color, s32 text, s32 len) __asm__("FUN_L00_001fb470"); -int D_L15_00162180 = 150; +int l15_quartu_cutscene_message_x __asm__("D_L15_00162180") = 150; -int D_L15_00162184 = 150; +int l15_quartu_cutscene_message_y __asm__("D_L15_00162184") = 150; -int D_L15_00162188 = 0x3800ffff; +int l15_quartu_cutscene_message_color __asm__("D_L15_00162188") = 0x3800ffff; -int D_L15_0016218C = 0x38800000; +int l15_quartu_cutscene_message_shadow_color __asm__("D_L15_0016218C") = 0x38800000; void draw_quartu_cutscene_messages(void) { char formatted_message_text[0x50]; int flag = 0; - int val = 0; + int message_reveal_count = 0; char *message_timing_state = D_L15_0016CE60; int print_character_count; char *second_message_timing_state; @@ -141,7 +141,8 @@ void draw_quartu_cutscene_messages(void) { sprintf(formatted_message_text, quartu_cutscene_message_format, get_help_message_text(0x526A)); - val = (*(int *)(message_timing_state + 0x34) - scale_game_frames(0xB5)) >> 2; + message_reveal_count = + (*(int *)(message_timing_state + 0x34) - scale_game_frames(0xB5)) >> 2; } } second_message_timing_state = D_L15_0016CE60; @@ -151,7 +152,7 @@ void draw_quartu_cutscene_messages(void) { sprintf(formatted_message_text, quartu_cutscene_message_format, get_help_message_text(0x526B)); - val = + message_reveal_count = (*(int *)(second_message_timing_state + 0x34) - scale_game_frames(0x1C2)) >> 2; } } @@ -162,7 +163,8 @@ void draw_quartu_cutscene_messages(void) { sprintf(formatted_message_text, quartu_cutscene_message_format, get_help_message_text(0x526C)); - val = (*(int *)(third_message_timing_state + 0x34) - scale_game_frames(0x2EE)) >> 2; + message_reveal_count = + (*(int *)(third_message_timing_state + 0x34) - scale_game_frames(0x2EE)) >> 2; } } } else if (*(int *)(message_timing_state + 0x30) == 4) { @@ -172,27 +174,28 @@ void draw_quartu_cutscene_messages(void) { sprintf(formatted_message_text, quartu_cutscene_message_format, get_help_message_text(0x526E)); - val = (*(int *)(message_timing_state + 0x34) - scale_game_frames(0x8FC)) >> 2; + message_reveal_count = + (*(int *)(message_timing_state + 0x34) - scale_game_frames(0x8FC)) >> 2; } } } if (flag == 0) return; print_character_count = strlen_alt(formatted_message_text); - if (val < print_character_count) { - print_character_count = val; - } else if (print_character_count < val) { - if ((print_character_count - val) & 4) + if (message_reveal_count < print_character_count) { + print_character_count = message_reveal_count; + } else if (print_character_count < message_reveal_count) { + if ((print_character_count - message_reveal_count) & 4) print_character_count = print_character_count - 1; } - print_text_with_texture_3((void *)(D_L15_00162180 + 1), - (void *)(D_L15_00162184 + 1), - (void *)D_L15_0016218C, + print_text_with_texture_3((void *)(l15_quartu_cutscene_message_x + 1), + (void *)(l15_quartu_cutscene_message_y + 1), + (void *)l15_quartu_cutscene_message_shadow_color, formatted_message_text, (void *)print_character_count); - print_text_with_texture_3((void *)D_L15_00162180, - (void *)D_L15_00162184, - (void *)D_L15_00162188, + print_text_with_texture_3((void *)l15_quartu_cutscene_message_x, + (void *)l15_quartu_cutscene_message_y, + (void *)l15_quartu_cutscene_message_color, formatted_message_text, (void *)print_character_count); } diff --git a/src/overlays/l15/mobys/ultramech_scientist.c b/src/overlays/l15/mobys/ultramech_scientist.c index 544620bf7d..db2ac35709 100644 --- a/src/overlays/l15/mobys/ultramech_scientist.c +++ b/src/overlays/l15/mobys/ultramech_scientist.c @@ -1,5 +1,6 @@ /* Level 15 ultramech scientist moby class. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/mobys/moby.h" #include "rnc/math/fast_math.h" #include "rnc/math/asm_helpers.h" @@ -76,30 +77,30 @@ typedef struct UltramechScientistVars { u8 pad_38[0x108]; s32 unk140; s32 unk144; - s32 unk148; - s32 unk14C; + s32 pre_scene_moby_group_index; + s32 scene_animation_moby_index; s32 unk150; - s32 unk154; - s32 unk158; + s32 pre_scene_camera_transform_index; + s32 moby_to_remove_index; s32 timer_15C; - u8 unk160; + u8 primary_gaze_joint_animation; u8 pad_161[0x63]; - f32 unk1C4; + f32 primary_gaze_pitch_target; f32 unk1C8; u8 pad_1CC[0x4]; f32 unk1D0; u8 pad_1D4[0xC]; u8 unk1E0; u8 pad_1E1[0x67]; - f32 unk248; + f32 secondary_gaze_yaw_target; u8 pad_24C[0x14]; - u8 unk260; + u8 idle_gaze_target_position; u8 pad_261[0x13]; s32 timer_274; s32 timer_278; s32 clip_volume_27C; - s32 unk280; - s32 unk284; + s32 dialogue_mission_id; + s32 pre_scene_persistent_mission_id; } UltramechScientistVars; /* Moby class 1446 */ @@ -118,6 +119,7 @@ void ultramech_scientist_update(struct Moby *moby) { enum { ULTRAMECH_SCIENTIST_DISABLED = 9 }; + UltramechScientistVars *ultramech_scientist_private_data; char *hero_pos; struct Moby *moby_list_cursor; @@ -125,16 +127,18 @@ void ultramech_scientist_update(struct Moby *moby) { ultramech_scientist_private_data = (UltramechScientistVars *)moby->pvars; apply_npc_big_head_cheat(moby); - if (ultramech_scientist_private_data->unk14C == -1) { + if (ultramech_scientist_private_data->scene_animation_moby_index == -1) { return; } { char *player = D_0013E533 + 0xE1D; if (*(unsigned char *)(player + 0x20A4) != 2) { int mobys = (int)l15_moby_array; - *(int *)((ultramech_scientist_private_data->unk14C << 8) + mobys + 0x94) = 0; - *(unsigned short *)((ultramech_scientist_private_data->unk14C << 8) + mobys + 0x34) |= - 0x41; + *(int *)((ultramech_scientist_private_data->scene_animation_moby_index << 8) + mobys + + 0x94) = 0; + *(unsigned short *)((ultramech_scientist_private_data->scene_animation_moby_index + << 8) + + mobys + 0x34) |= 0x41; } } if (moby->state == ULTRAMECH_SCIENTIST_DISABLED) { @@ -158,8 +162,8 @@ void ultramech_scientist_update(struct Moby *moby) { moby->update_dist = 0xFF; ultramech_scientist_private_data->unkC = 20.0f; initialize_npc_dialogue(moby, ultramech_scientist_private_data); - if (visited52[ultramech_scientist_private_data->unk280 + (current_level_index_gp << 4)] != - 0xFF) { + if (visited52[ultramech_scientist_private_data->dialogue_mission_id + + (current_level_index_gp << 4)] != 0xFF) { break; } if (level_available[16] != 0) { @@ -172,10 +176,11 @@ void ultramech_scientist_update(struct Moby *moby) { break; } { - int dead_state = 0xFE; - int gone_state = 0xFD; + int dead_state = MOBY_STATE_REMOVAL_MARKER; + int gone_state = MOBY_STATE_ALTERNATE_REMOVAL_MARKER; for (; moby_list_cursor != 0; moby_list_cursor = moby_list_cursor->next) { - if (moby_list_cursor->mission != ultramech_scientist_private_data->unk280) { + if (moby_list_cursor->mission != + ultramech_scientist_private_data->dialogue_mission_id) { continue; } if (moby_list_cursor == moby) { @@ -207,7 +212,7 @@ void ultramech_scientist_update(struct Moby *moby) { if (update_npc_dialogue(moby, ultramech_scientist_private_data) == 0) { break; } - jet_clear_persistent(ultramech_scientist_private_data->unk280); + jet_clear_persistent(ultramech_scientist_private_data->dialogue_mission_id); moby->anim_speed = 0.0f; moby->state = ULTRAMECH_SCIENTIST_RESUME_AFTER_DIALOGUE; moby_list_cursor = (struct Moby *)D_L15_0015FFE4; @@ -215,10 +220,11 @@ void ultramech_scientist_update(struct Moby *moby) { break; } { - int dead_state = 0xFE; - int gone_state = 0xFD; + int dead_state = MOBY_STATE_REMOVAL_MARKER; + int gone_state = MOBY_STATE_ALTERNATE_REMOVAL_MARKER; for (; moby_list_cursor != 0; moby_list_cursor = moby_list_cursor->next) { - if (moby_list_cursor->mission != ultramech_scientist_private_data->unk280) { + if (moby_list_cursor->mission != + ultramech_scientist_private_data->dialogue_mission_id) { continue; } if (moby_list_cursor == moby) { @@ -259,15 +265,15 @@ void ultramech_scientist_update(struct Moby *moby) { break; } } - if (ultramech_scientist_private_data->unk158 != -1) { - char *spawned = - (char *)l15_moby_array + (ultramech_scientist_private_data->unk158 << 8); + if (ultramech_scientist_private_data->moby_to_remove_index != -1) { + char *spawned = (char *)l15_moby_array + + (ultramech_scientist_private_data->moby_to_remove_index << 8); if (spawned != 0) { int state = *(unsigned char *)(spawned + 0x20); - if (state != 0xFE) { - if (state != 0xFD) { + if (state != MOBY_STATE_REMOVAL_MARKER) { + if (state != MOBY_STATE_ALTERNATE_REMOVAL_MARKER) { mark_moby_for_removal(spawned); - ultramech_scientist_private_data->unk158 = -1; + ultramech_scientist_private_data->moby_to_remove_index = -1; } } } @@ -275,7 +281,8 @@ void ultramech_scientist_update(struct Moby *moby) { if (count_active_moby_group_members(ultramech_scientist_private_data->unk144, 0x40) != 0) { break; } - if (count_active_moby_group_members(ultramech_scientist_private_data->unk148, 0x40) != 0) { + if (count_active_moby_group_members( + ultramech_scientist_private_data->pre_scene_moby_group_index, 0x40) != 0) { break; } moby->state = ULTRAMECH_SCIENTIST_WAIT_FOR_PRE_SCENE_DELAY; @@ -286,24 +293,34 @@ void ultramech_scientist_update(struct Moby *moby) { break; } restore_saved_hero_moby_and_clear_vehicle_mode(); - set_moby_animation( - (char *)l15_moby_array + (ultramech_scientist_private_data->unk14C << 8), 0, 0); + set_moby_animation((char *)l15_moby_array + + (ultramech_scientist_private_data->scene_animation_moby_index << 8), + 0, + 0); ultramech_scientist_private_data->unk140 = 1; ultramech_scientist_private_data->unk36 = 1; ultramech_scientist_private_data->unk8 = 1; unlock_planet(0x10); - jet_clear_persistent(ultramech_scientist_private_data->unk284); + jet_clear_persistent(ultramech_scientist_private_data->pre_scene_persistent_mission_id); request_music_track(0, 5); - if (ultramech_scientist_private_data->unk154 != -1) { + if (ultramech_scientist_private_data->pre_scene_camera_transform_index != -1) { char *paths = D_L15_001600EC; char *paths_again; - set_race_camera(paths + (ultramech_scientist_private_data->unk154 << 7) + 0x30, - paths + (ultramech_scientist_private_data->unk154 << 7) + 0x70, - 0, - 1); + set_race_camera( + paths + (ultramech_scientist_private_data->pre_scene_camera_transform_index << 7) + + 0x30, + paths + (ultramech_scientist_private_data->pre_scene_camera_transform_index << 7) + + 0x70, + 0, + 1); paths_again = D_L15_001600EC; - FUN_L00_00284e50(paths_again + (ultramech_scientist_private_data->unk154 << 7) + 0x30, - paths_again + (ultramech_scientist_private_data->unk154 << 7) + 0x70); + FUN_L00_00284e50( + paths_again + + (ultramech_scientist_private_data->pre_scene_camera_transform_index << 7) + + 0x30, + paths_again + + (ultramech_scientist_private_data->pre_scene_camera_transform_index << 7) + + 0x70); } moby->state = ULTRAMECH_SCIENTIST_START_FIRST_SCENE; break; @@ -370,7 +387,8 @@ void ultramech_scientist_update(struct Moby *moby) { } if (ultramech_scientist_private_data->timer_274 != 0) { ultramech_scientist_private_data->timer_274 = 0; - qcopy(&ultramech_scientist_private_data->unk260, D_0013E533 + 0xE1D + 0xD0); + qcopy(&ultramech_scientist_private_data->idle_gaze_target_position, + D_0013E533 + 0xE1D + 0xD0); } wander: if (fast_dec_timer(&ultramech_scientist_private_data->timer_278) == 0) { @@ -383,10 +401,12 @@ void ultramech_scientist_update(struct Moby *moby) { value = random_float_between(-90.0f, 90.0f); heading = fast_add_rotations(moby->rot.z, value * deg_to_rad); value = random_float_between(0.0f, 30.0f); - build_spherical_offset( - &ultramech_scientist_private_data->unk260, 6.0f, heading, value * deg_to_rad); - fast_vec_add(&ultramech_scientist_private_data->unk260, - &ultramech_scientist_private_data->unk260, + build_spherical_offset(&ultramech_scientist_private_data->idle_gaze_target_position, + 6.0f, + heading, + value * deg_to_rad); + fast_vec_add(&ultramech_scientist_private_data->idle_gaze_target_position, + &ultramech_scientist_private_data->idle_gaze_target_position, &moby->pos); aim_head: if (ultramech_scientist_private_data->timer_274 != 0) { @@ -394,7 +414,7 @@ void ultramech_scientist_update(struct Moby *moby) { ease_rate = 0.04f; ease_limit = 0.3f; } else { - qcopy(target, &ultramech_scientist_private_data->unk260); + qcopy(target, &ultramech_scientist_private_data->idle_gaze_target_position); } if (aim != 0) { qcopy(eye, &moby->pos); @@ -416,14 +436,14 @@ void ultramech_scientist_update(struct Moby *moby) { pitch = -0.5235988f; } ultramech_scientist_private_data->unk1C8 = yaw * 0.5f; - ultramech_scientist_private_data->unk1C4 = pitch * 1.25f; - ultramech_scientist_private_data->unk248 = yaw * 0.5f; + ultramech_scientist_private_data->primary_gaze_pitch_target = pitch * 1.25f; + ultramech_scientist_private_data->secondary_gaze_yaw_target = yaw * 0.5f; } if (big_head_cheat_enabled_macro[0] != 0) { ultramech_scientist_private_data->unk1D0 = 2.75f; } update_joint_animation(moby, - &ultramech_scientist_private_data->unk160, + &ultramech_scientist_private_data->primary_gaze_joint_animation, 1, ease_rate * frame_scale_sq_gp, ease_limit * frame_scale_sq_gp); diff --git a/src/overlays/l15/mobys/ultramech_unlimited.c b/src/overlays/l15/mobys/ultramech_unlimited.c index a4f1af65f6..5d9a54fb29 100644 --- a/src/overlays/l15/mobys/ultramech_unlimited.c +++ b/src/overlays/l15/mobys/ultramech_unlimited.c @@ -161,7 +161,7 @@ struct UMoby { char pad71[7]; UData *data; char pad7C[0x18]; - int w94; + int collision_geometry; char pad98[0x1A]; unsigned short id; char padB4[0xC]; @@ -184,30 +184,30 @@ struct UData { unsigned char b58; char pad59[0x17]; char hit[0x78]; - float fE8; + float ground_fall_step; char padEC[0x74]; UMoby *target; - int w164; + int target_range_status; char pad168[8]; int path; - float f174; + float activation_target_search_range; char pad178[8]; int paths[2]; - float f188; + float burst_pause_duration; char pad18C[0x14]; - Vec4 v1A0; + Vec4 previous_melee_endpoint; int side; int point; - float f1B8; + float current_target_search_range; float turnVel; int timer; int shots; - int w1C8; - int w1CC; - int w1D0; - int w1D4; - int w1D8; - int w1DC; + int damage_reaction_this_update; + int activation_wait_group_id; + int target_constraint_path_index; + int combat_path_moves_disabled; + int suppress_close_combat_and_knockback_motion; + int activation_clip_volume; int snd; char pad1E4[0x1C]; unsigned char v200[0x10]; @@ -258,7 +258,7 @@ extern short ultramech_death_effect_basis_scale_gp __asm__("D_L15_00161B38") __a extern short ultramech_death_effect_vertical_offset_gp __asm__("D_L15_00161B3C") __attribute__((sda)); -int D_L15_00161B1C = 180; +int l15_ultramech_projectile_duration_frames __asm__("D_L15_00161B1C") = 180; extern void collect_mobies_in_sphere(void *, int, void *, void *, float) __asm__("FUN_L00_001f2868"); @@ -284,6 +284,9 @@ void ultramech_unlimited_update(UMoby *m) __asm__("FUN_L15_002cf3a8"); /* Moby class 491 */ void ultramech_unlimited_update(UMoby *ultramech_moby) { + enum { + ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE = 2 + }; Vec4 vector_or_hit_descriptor; Vec4 position_or_motion_vector; Vec4 vector_arithmetic_result; @@ -304,7 +307,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { if (ultramech_moby->state != ULTRAMECH_INITIALIZE && ultramech_moby->state != ULTRAMECH_DEAD_WAIT_FOR_RESET && hero.vehicle_mode != HERO_VEHICLE_MODE_GIANT_CLANK) { - ultramech_moby->w94 = 0; + ultramech_moby->collision_geometry = 0; ultramech_moby->flags |= 0x41; idx = ultramech_vars->snd; if (idx != -1) { @@ -336,13 +339,13 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { } ultramech_vars->snd = -1; ultramech_vars->turnVel = 0.0f; - ultramech_vars->f174 = 90.0f; + ultramech_vars->activation_target_search_range = 90.0f; if (rand() & 1) ultramech_moby->flags |= 0x8000; - ultramech_moby->w94 = 0; + ultramech_moby->collision_geometry = 0; ultramech_moby->flags = (ultramech_moby->flags | 0x41) & 0xEFFF; if (ultramech_vars->paths[0] == -1 || ultramech_vars->paths[1] == -1) - ultramech_vars->w1D4 = 1; + ultramech_vars->combat_path_moves_disabled = 1; if (ultramech_vars->path != -1) ultramech_moby->pos.q = D_L15_001B0AB0[ultramech_vars->path]->points[0].q; ultramech_moby->state = ULTRAMECH_WAIT_FOR_ACTIVATION; @@ -350,25 +353,27 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { blend_moby_animation(ultramech_moby, 0, 0, 5); break; case ULTRAMECH_WAIT_FOR_ACTIVATION: - if (ultramech_vars->w1CC != -1 || - is_point_inside_clip_volume(&hero.motion.pos, ultramech_vars->w1DC)) { - if (ultramech_vars->w1CC != -1 && - count_active_moby_group_members(ultramech_vars->w1CC, 0x40)) + if (ultramech_vars->activation_wait_group_id != -1 || + is_point_inside_clip_volume(&hero.motion.pos, ultramech_vars->activation_clip_volume)) { + if (ultramech_vars->activation_wait_group_id != -1 && + count_active_moby_group_members(ultramech_vars->activation_wait_group_id, 0x40)) break; if (hero.vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { - ultramech_moby->w94 = *(int *)(ultramech_moby->cls + 0x10); + ultramech_moby->collision_geometry = *(int *)(ultramech_moby->cls + 0x10); ultramech_moby->flags = (ultramech_moby->flags & 0xFFBE) | 0x1000; } } - if (ultramech_vars->w164 != 2 && ultramech_vars->path != -1) { + if (ultramech_vars->target_range_status != ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE && + ultramech_vars->path != -1) { struct Hero *pl = &hero; if (pl->vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK && (ultramech_moby->flags & 0x1000)) { - if (ultramech_vars->w1D0 != -1 && - !point_in_path_xy(&pl->motion.pos, - D_L15_001B0AB0[ultramech_vars->w1D0]->points, - D_L15_001B0AB0[ultramech_vars->w1D0]->count)) { - ultramech_moby->w94 = 0; + if (ultramech_vars->target_constraint_path_index != -1 && + !point_in_path_xy( + &pl->motion.pos, + D_L15_001B0AB0[ultramech_vars->target_constraint_path_index]->points, + D_L15_001B0AB0[ultramech_vars->target_constraint_path_index]->count)) { + ultramech_moby->collision_geometry = 0; ultramech_moby->flags = (ultramech_moby->flags | 0x41) & 0xEFFF; } else { LevelPath *path; @@ -487,7 +492,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { case ULTRAMECH_AIM_AND_SELECT_ATTACK: if (ultramech_moby->anim != 0 && (ultramech_moby->animFlags & 2)) blend_moby_animation(ultramech_moby, 0, 0, scale_game_frames(0x14)); - if (ultramech_vars->w164 != 2) { + if (ultramech_vars->target_range_status != ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE) { approach_angle(&ultramech_moby->rot.f[2], fast_arc_tan(combat_target->pos.f[0] - ultramech_moby->pos.f[0], combat_target->pos.f[1] - ultramech_moby->pos.f[1]), @@ -496,13 +501,13 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { frame_time_sq * 8.726646f, frame_time * 12.566371f); if (fast_dec_timer(&ultramech_vars->timer)) { - if (ultramech_vars->w1D8 == 0 && + if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_approach_target_range_gp) { ultramech_moby->state = ULTRAMECH_APPROACH_TARGET; if (ultramech_moby->anim != 1) blend_moby_animation(ultramech_moby, 1, 0, scale_game_frames(0xA)); - } else if (ultramech_vars->w1D8 == 0 && + } else if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_melee_range_gp) { ultramech_moby->state = ULTRAMECH_MELEE_ATTACK; @@ -522,7 +527,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { blend_moby_animation(ultramech_moby, 7, 0, scale_game_frames(5)); ultramech_moby->animSpeed = *(float *)&ultramech_firing_animation_speed_gp; } - if (ultramech_vars->w164 != 2) { + if (ultramech_vars->target_range_status != ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE) { int fire = -1; approach_angle(&ultramech_moby->rot.f[2], fast_arc_tan(combat_target->pos.f[0] - ultramech_moby->pos.f[0], @@ -552,7 +557,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { &vector_or_hit_descriptor, (int)ultramech_moby, (int)combat_target, - scale_game_frames(D_L15_00161B1C)); + scale_game_frames(l15_ultramech_projectile_duration_frames)); normalize_vector_xyz(&position_or_motion_vector, &position_or_motion_vector, 3.0f); add_vectors(&vector_arithmetic_result, &vector_or_hit_descriptor, @@ -563,23 +568,24 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { ultramech_moby->state = ULTRAMECH_WAIT_BETWEEN_BURSTS; if (ultramech_moby->anim != 0) blend_moby_animation(ultramech_moby, 0, 0, scale_game_frames(0xA)); - ultramech_vars->timer = - truncate_float_to_s32(FUN_L04_001f1978(ultramech_vars->f188 * 60.0f)); - } else if (ultramech_vars->w1D8 == 0 && + ultramech_vars->timer = truncate_float_to_s32( + FUN_L04_001f1978(ultramech_vars->burst_pause_duration * 60.0f)); + } else if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_approach_target_range_gp) { ultramech_moby->state = ULTRAMECH_APPROACH_TARGET; if (ultramech_moby->anim != 1) blend_moby_animation(ultramech_moby, 1, 0, scale_game_frames(0xA)); - } else if (ultramech_vars->w1D8 == 0 && + } else if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_melee_range_gp) { ultramech_moby->state = ULTRAMECH_MELEE_ATTACK; if (ultramech_moby->anim != 2) blend_moby_animation(ultramech_moby, 2, 0, scale_game_frames(0xA)); - } else if (ultramech_vars->w1D8 == 0 && + } else if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) > 10.0f && - ultramech_vars->w1C8 != 0 && ultramech_vars->w1D4 == 0) { + ultramech_vars->damage_reaction_this_update != 0 && + ultramech_vars->combat_path_moves_disabled == 0) { ultramech_moby->state = ULTRAMECH_BALLISTIC_PATH_MOVE; ultramech_vars->timer = 0; ultramech_vars->side = (ultramech_vars->side + 1) & 1; @@ -609,7 +615,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { } break; case ULTRAMECH_WAIT_BETWEEN_BURSTS: - if (ultramech_vars->w164 != 2) { + if (ultramech_vars->target_range_status != ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE) { approach_angle(&ultramech_moby->rot.f[2], fast_arc_tan(combat_target->pos.f[0] - ultramech_moby->pos.f[0], combat_target->pos.f[1] - ultramech_moby->pos.f[1]), @@ -617,9 +623,9 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { frame_time_sq * 8.726646f, frame_time_sq * 8.726646f, frame_time * 12.566371f); - if (ultramech_vars->w1D8 == 0 && + if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0 && vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < 8.0f && - ultramech_vars->w1D4 == 0 && + ultramech_vars->combat_path_moves_disabled == 0 && ultramech_vars->point < D_L15_001B0AB0[((UPaths *)((char *)ultramech_vars + 0x180)) ->idx[ultramech_vars->side]] ->count - @@ -660,9 +666,11 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { case ULTRAMECH_APPROACH_TARGET: { float desired_heading = fast_arc_tan(combat_target->pos.f[0] - ultramech_moby->pos.f[0], combat_target->pos.f[1] - ultramech_moby->pos.f[1]); - if (ultramech_vars->w164 != 2) { + if (ultramech_vars->target_range_status != ULTRAMECH_TARGET_OUTSIDE_SEARCH_RANGE) { desired_heading = compute_ultramech_flocking_steering_point( - ultramech_moby, &position_or_motion_vector, ultramech_vars->f1B8); + ultramech_moby, + &position_or_motion_vector, + ultramech_vars->current_target_search_range); if (vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_melee_range_gp) { ultramech_moby->state = ULTRAMECH_MELEE_ATTACK; @@ -717,7 +725,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { if (ultramech_moby->animFlags & 2) { if (vector_distance_xy(&ultramech_moby->pos, &combat_target->pos) < *(float *)&ultramech_melee_range_gp && - ultramech_vars->w1D4 == 0 && + ultramech_vars->combat_path_moves_disabled == 0 && ultramech_vars->point < D_L15_001B0AB0[((UPaths *)((char *)ultramech_vars + 0x180)) ->idx[ultramech_vars->side]] ->count - @@ -767,24 +775,25 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { sweep_hit_segment(&attack_start, &attack_end, &attack_start, - &ultramech_vars->v1A0, + &ultramech_vars->previous_melee_endpoint, ultramech_moby, &vector_or_hit_descriptor, 5); noop_main_callback(&attack_start, &attack_end); - qcopy(&ultramech_vars->v1A0, &attack_end); + qcopy(&ultramech_vars->previous_melee_endpoint, &attack_end); } } break; case ULTRAMECH_KNOCKBACK_RECOVERY: { int r = 0; - if (ultramech_vars->w1D8 == 0) { + if (ultramech_vars->suppress_close_combat_and_knockback_motion == 0) { r = step_moby_motion(ultramech_moby, ultramech_vars->hit); } else { ultramech_moby->animSpeed = 1.0f; } - if ((r & 0x40) || (ultramech_vars->w1D8 != 0 && (ultramech_moby->animFlags & 2))) { - if (ultramech_vars->w1D4 == 0) { + if ((r & 0x40) || (ultramech_vars->suppress_close_combat_and_knockback_motion != 0 && + (ultramech_moby->animFlags & 2))) { + if (ultramech_vars->combat_path_moves_disabled == 0) { ultramech_moby->state = ULTRAMECH_BALLISTIC_PATH_MOVE; ultramech_vars->timer = 0; ultramech_vars->side = (ultramech_vars->side + 1) & 1; @@ -850,7 +859,7 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { ultramech_moby->state = ULTRAMECH_DEAD_WAIT_FOR_RESET; return; case ULTRAMECH_DEAD_WAIT_FOR_RESET: - ultramech_moby->w94 = 0; + ultramech_moby->collision_geometry = 0; ultramech_moby->flags = (ultramech_moby->flags | 0x41) & 0xEFFF; ultramech_vars->b58 = 0; D_L15_001BABD0.cleared[(short)ultramech_moby->id] = 0; @@ -912,13 +921,13 @@ void ultramech_unlimited_update(UMoby *ultramech_moby) { } else if (ultramech_moby->state > ULTRAMECH_WAIT_FOR_ACTIVATION && ultramech_moby->state != ULTRAMECH_DEAD_WAIT_FOR_RESET) { float z; - ultramech_vars->fE8 += frame_time_sq * 30.0f; - ultramech_moby->pos.f[2] -= ultramech_vars->fE8 - 2.0f; + ultramech_vars->ground_fall_step += frame_time_sq * 30.0f; + ultramech_moby->pos.f[2] -= ultramech_vars->ground_fall_step - 2.0f; z = probe_ground_height(&ultramech_moby->pos, 0, 0.5f); ultramech_moby->pos.f[2] -= 2.0f; if (ultramech_moby->pos.f[2] < z) { ultramech_moby->pos.f[2] = z; - ultramech_vars->fE8 = 0.0f; + ultramech_vars->ground_fall_step = 0.0f; } play_entity_sound( (int)ultramech_moby, 2.5f, &ultramech_moby->pos, 0x10000, 40.0f, 1.0f, 0, 1, 0); @@ -1009,7 +1018,7 @@ void process_ultramech_hits_and_update_target(void *ultramech_instance) { *(float *)((char *)ultramech_moby + 0x2C) = ultramech_pre_hit_scale_multiplier_gp * *(float *)(ultramech_moby->cls + 0x24); impact = 0.0f; - ultramech_vars->w1C8 = 0; + ultramech_vars->damage_reaction_this_update = 0; for (i = 0; i < 64; i++) { char *candidate_hit_record = D_00178700 + i * 0x40; if (*(UMoby **)(candidate_hit_record + 0x34) == ultramech_moby) { @@ -1055,7 +1064,7 @@ void process_ultramech_hits_and_update_target(void *ultramech_instance) { break; case HIT_REACTION_DAMAGE_WITHOUT_KNOCKBACK: case HIT_REACTION_DAMAGE_WITHOUT_KNOCKBACK_ALTERNATE: - ultramech_vars->w1C8 = 1; + ultramech_vars->damage_reaction_this_update = 1; *(unsigned char *)((char *)ultramech_vars + 0x67) = 0xFA; break; case HIT_REACTION_KNOCKBACK: @@ -1066,7 +1075,7 @@ void process_ultramech_hits_and_update_target(void *ultramech_instance) { case HIT_REACTION_KNOCKBACK_VARIANT_ALTERNATE: angle = ultramech_knockback_horizontal_speed_gp * D_0015ED6C; reaction_product = ultramech_knockback_vertical_speed_gp * D_0015ED6C; - ultramech_vars->w1C8 = 1; + ultramech_vars->damage_reaction_this_update = 1; *(float *)((char *)ultramech_vars + 0x88) = angle; *(float *)((char *)ultramech_vars + 0x8C) = reaction_product; trooper_set_knockback((char *)ultramech_vars + 0x70, 4.0f, 1.0f); @@ -1126,21 +1135,24 @@ void process_ultramech_hits_and_update_target(void *ultramech_instance) { trooper_anim_finish(ultramech_moby, (char *)ultramech_vars + 0x60); *(float *)((char *)ultramech_moby + 0x2C) = *(float *)(ultramech_moby->cls + 0x24) * ultramech_post_hit_scale_multiplier_gp; - ultramech_vars->w164 = 0; + ultramech_vars->target_range_status = 0; if (ultramech_moby->state != ULTRAMECH_WAIT_FOR_ACTIVATION) { - if (ultramech_vars->w1D0 != -1) + if (ultramech_vars->target_constraint_path_index != -1) goto follow_path; - ultramech_vars->f1B8 = *(float *)((char *)ultramech_vars + 0x178); + ultramech_vars->current_target_search_range = *(float *)((char *)ultramech_vars + 0x178); } else { - ultramech_vars->f1B8 = ultramech_vars->f174; + ultramech_vars->current_target_search_range = + ultramech_vars->activation_target_search_range; } - FUN_0024f560(ultramech_vars->f1B8, ultramech_moby, (char *)ultramech_vars + 0x120); + FUN_0024f560(ultramech_vars->current_target_search_range, + ultramech_moby, + (char *)ultramech_vars + 0x120); goto check_path; follow_path: { LevelPath *path; - ultramech_vars->f1B8 = *(float *)((char *)ultramech_vars + 0x178); - path = D_L15_001B0AB0[ultramech_vars->w1D0]; - activate_effect_l08(ultramech_vars->f1B8, + ultramech_vars->current_target_search_range = *(float *)((char *)ultramech_vars + 0x178); + path = D_L15_001B0AB0[ultramech_vars->target_constraint_path_index]; + activate_effect_l08(ultramech_vars->current_target_search_range, ultramech_moby, (char *)ultramech_vars + 0x120, 0, @@ -1149,8 +1161,9 @@ follow_path: { path->count); } check_path: - if (ultramech_vars->f1B8 < fast_vec_dist(&ultramech_moby->pos, (char *)ultramech_vars + 0x120)) - ultramech_vars->w164 = 2; + if (ultramech_vars->current_target_search_range < + fast_vec_dist(&ultramech_moby->pos, (char *)ultramech_vars + 0x120)) + ultramech_vars->target_range_status = 2; if (ultramech_vars->target == 0) ultramech_vars->target = (UMoby *)D_001413D0; } diff --git a/src/overlays/l16/hero/apply_hero_ground_material_effects.c b/src/overlays/l16/hero/apply_hero_ground_material_effects.c index 494a387a55..5b6926ddcf 100644 --- a/src/overlays/l16/hero/apply_hero_ground_material_effects.c +++ b/src/overlays/l16/hero/apply_hero_ground_material_effects.c @@ -36,6 +36,9 @@ extern int hero_set_state(int, int) __asm__("FUN_L16_0021e398"); void apply_hero_ground_material_effects(void) __asm__("FUN_L16_002097a0"); void apply_hero_ground_material_effects(void) { + enum { + GROUND_MATERIAL_SLIP = 0x8 + }; struct Hero *hero_data = &hero; int keep = hero_data->ground_sound_class; int saved_ground_type = hero_data->ground_type; @@ -112,7 +115,7 @@ void apply_hero_ground_material_effects(void) { struct Hero *q = &hero; q->selector_13 = 1; } - if (saved_ground_type == 0x8) { + if (saved_ground_type == GROUND_MATERIAL_SLIP) { struct Hero *q = &hero; q->on_slip_ground = 1; } diff --git a/src/overlays/l16/hero/hero_set_state.c b/src/overlays/l16/hero/hero_set_state.c index e0852737de..5156c7d308 100644 --- a/src/overlays/l16/hero/hero_set_state.c +++ b/src/overlays/l16/hero/hero_set_state.c @@ -82,7 +82,7 @@ extern int hero_set_state(int, int) __asm__("FUN_L16_0021e398"); extern char level16_hero_jump_velocity_keys[] __asm__("D_L16_0017C380"); extern char level16_hero_water_surface_jump_velocity_keys[] __asm__("D_L16_0017C3C0"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int animation_update_mode) { int saved_state_step; char *moby; int old20A7; @@ -90,10 +90,12 @@ int hero_set_state(int requested_state, int b) { { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS)) return 0; } - if ((D_L16_0015F5C4 == 2 || D_L16_0015F5C4 == 6) && b != 2) + if ((D_L16_0015F5C4 == 2 || D_L16_0015F5C4 == 6) && + animation_update_mode != HERO_ANIMATION_ENTRY_OVERRIDE_GUARDS) return 0; { struct Hero *p = &hero; @@ -165,7 +167,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (animation_update_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -181,7 +183,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (animation_update_mode) { if (get_hero_idle_animation_index(0) == 0x54) { set_hero_animation( get_hero_idle_animation_index(0), 0, (float)scale_game_frames(0x12)); @@ -207,7 +209,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -218,7 +220,7 @@ int hero_set_state(int requested_state, int b) { p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.momentum, frame_time * 3.5f); - if (b) + if (animation_update_mode) set_hero_animation(0x7C, 0, (float)scale_game_frames(0xC)); break; } @@ -234,7 +236,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->unk6A0 = 0; p->unk690 = p->motion.pos.f[2] - p->unk69C; - if (b) + if (animation_update_mode) set_hero_animation(0x74, 0, (float)scale_game_frames(0xB)); break; } @@ -256,7 +258,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->unk8E0 = 0; n = scale_game_frames(0xC); - if (b) + if (animation_update_mode) set_hero_animation(0x3B, 0, (float)n); } break; @@ -277,7 +279,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0xB); if (p->state.prev == 0x33) n = scale_game_frames(0xF); - if (b) + if (animation_update_mode) set_hero_animation(0x3D, 0, (float)n); break; } @@ -294,7 +296,7 @@ int hero_set_state(int requested_state, int b) { t = -2; if (p->state.prev != 0x35) t = n; - if (b) + if (animation_update_mode) set_hero_animation(0x3C, 0, (float)t); break; } @@ -367,7 +369,7 @@ int hero_set_state(int requested_state, int b) { s->motion.momentum.f[2] = 0.0f; FUN_L00_0025f730(&s->motion.momentum, frame_time * 5.5f); s->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x16)); } break; @@ -391,7 +393,7 @@ int hero_set_state(int requested_state, int b) { int t = scale_game_frames(0x4D); struct Hero *q = &hero; q->invulnerable_frames = t; - if (b) { + if (animation_update_mode) { if (q->state.current == 0x75) { set_hero_animation(0x70, 3, -3.0f); } else { @@ -415,7 +417,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->drown_sink_speed = 0; p->unk698 = scale_game_frames(0x2D); p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x65, 0, (float)scale_game_frames(0x11)); break; } @@ -455,7 +457,7 @@ int hero_set_state(int requested_state, int b) { v = (char *)&hero.motion.momentum; qcopy(v, v - 0x40); } - if (b) + if (animation_update_mode) set_hero_animation(0x5F, 0, (float)scale_game_frames(0xA)); break; } @@ -466,7 +468,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x80, 0, (float)scale_game_frames(0xA)); break; } @@ -477,7 +479,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; qcopy(&p->unk770, p->rot_matrix); p->board_gravity = frame_time_sq * 18.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x52, 0, (float)scale_game_frames(5)); break; } @@ -554,7 +556,7 @@ int hero_set_state(int requested_state, int b) { q->board_vertical_speed = -fast_vec_dot(&q->gravity_dir, &q->motion.displacement); } } - if (b) { + if (animation_update_mode) { struct Hero *t = &hero; if (t->race_ammo != 0) { set_hero_animation(0x7D, 0, (float)scale_game_frames(5)); @@ -570,7 +572,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 8; p->item_select_blocked = 1; p->unk870 = 0; - if (b) + if (animation_update_mode) set_hero_animation( select_hero_hoverboard_animation_variant(), 5, (float)scale_game_frames(8)); break; @@ -623,7 +625,7 @@ int hero_set_state(int requested_state, int b) { gravity_flatten((float *)w, (float *)w); FUN_L00_0025f730(w, frame_time * 9.5f); *(int *)(velocity_bytes + 0xF18) = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x11)); } break; @@ -635,7 +637,7 @@ int hero_set_state(int requested_state, int b) { release_and_clear_hero_voice_slots(); p->boost_pad_timer = 0; p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x62, 4, (float)scale_game_frames(4)); break; } @@ -647,7 +649,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L16_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = get_hero_idle_animation_index(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && animation_update_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -739,7 +741,7 @@ int hero_set_state(int requested_state, int b) { scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (animation_update_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L16_0015F6E8[v->state.step], (float)n); } @@ -751,7 +753,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 1; p->unk2284 = 0; - if (b) { + if (animation_update_mode) { if (p->state.prev == 4) { set_hero_animation(0x5E, 2, (float)scale_game_frames(5)); } else { @@ -768,7 +770,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (animation_update_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -787,7 +789,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; fill_transfer_words((char *)p + 0x9D0, 0, 0x20); qcopy(&p->motion.momentum, &p->motion.displacement); - if (b) + if (animation_update_mode) set_hero_animation(0x64, 0, (float)scale_game_frames(0xF)); break; } @@ -809,7 +811,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (animation_update_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -826,7 +828,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (animation_update_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -853,7 +855,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (animation_update_mode) { if (q->moby->seq == get_hero_idle_animation_index(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -880,7 +882,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (animation_update_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -893,7 +895,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -905,7 +907,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -961,7 +963,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (animation_update_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -977,7 +979,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -989,7 +991,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -1038,7 +1040,7 @@ int hero_set_state(int requested_state, int b) { } } } - if (b) { + if (animation_update_mode) { struct Hero *r = &hero; set_hero_animation(r->grind_anim_variant + 0x31, 0, (float)scale_game_frames(6)); } @@ -1055,7 +1057,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (animation_update_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -1070,7 +1072,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -1079,7 +1081,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -1088,7 +1090,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -1097,7 +1099,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -1121,7 +1123,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { if (q->vehicle_mode == 3) { set_hero_animation(6, 0, (float)scale_game_frames(8)); return 1; @@ -1147,7 +1149,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)animation_timing_value); } break; @@ -1162,7 +1164,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)animation_timing_arg); } break; @@ -1514,7 +1516,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (animation_update_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1615,7 +1617,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (animation_update_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1653,7 +1655,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (animation_update_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1668,7 +1670,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (animation_update_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1699,7 +1701,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (animation_update_mode) { char *m; int j = 0; int n; @@ -1730,7 +1732,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (animation_update_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1759,7 +1761,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; int e = D_L16_0017C088[q->attack_record].kind; - if (b) { + if (animation_update_mode) { char *m; int z = e == 0; int n = scale_game_frames(5); @@ -1780,7 +1782,7 @@ int hero_set_state(int requested_state, int b) { } else { p->attack_record = 0; } - if (b) { + if (animation_update_mode) { struct Hero *q = &hero; char *m; int n = scale_game_frames(4); @@ -1796,7 +1798,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (animation_update_mode) { char *m; HeroTableRow2C *e = &D_L16_0017C088[p->attack_record]; int k = e->kind; @@ -1817,7 +1819,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1839,7 +1841,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = level16_hero_animation_blend_curves[q->anim_blend_curve] [(q->anim_blend_step)++]; @@ -1851,7 +1853,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1859,7 +1861,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (animation_update_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1870,7 +1872,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1881,7 +1883,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1898,7 +1900,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (animation_update_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1908,7 +1910,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1921,7 +1923,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = level16_hero_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1942,7 +1944,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1994,7 +1996,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } @@ -2005,7 +2007,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -2029,7 +2031,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (animation_update_mode) set_hero_animation(get_hero_idle_animation_index(0), 0, -1.0f); break; } diff --git a/src/overlays/l16/hero/update_hero_motion_for_current_state.c b/src/overlays/l16/hero/update_hero_motion_for_current_state.c index e0dc43af8f..0d94dde08b 100644 --- a/src/overlays/l16/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l16/hero/update_hero_motion_for_current_state.c @@ -127,7 +127,7 @@ extern struct Hero hero_b __asm__("D_0013F350"); /* Second name for the same global: retail reloads it after the f85C clamp store. */ extern f32 D_0015ED6C_b __asm__("D_0015ED6C"); extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); -s32 D_L16_0015F68C = 0; +s32 l16_recorded_look_usage_count __asm__("D_L16_0015F68C") = 0; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); extern void build_scaled_hero_move_impulse(f32, f32) __asm__("FUN_L00_002132b8"); @@ -181,7 +181,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -274,7 +274,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L16_00214598"); void update_hero_motion_for_current_state(void) { struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 state_step_at_entry = hero.state.step; s32 anim = moby->b53; struct Hero *pl0; f32 speed; @@ -328,7 +328,7 @@ void update_hero_motion_for_current_state(void) { D_L16_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L16_0015F68C++; + l16_recorded_look_usage_count++; } } } @@ -701,11 +701,11 @@ void update_hero_motion_for_current_state(void) { primary_vector_scratch.f[1] += random_float_between(0.0f, 0.03f); primary_vector_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -3215,7 +3215,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (state_step_at_entry != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l16/mobys/chicken_relocator.c b/src/overlays/l16/mobys/chicken_relocator.c index 702464443f..0bebec367a 100644 --- a/src/overlays/l16/mobys/chicken_relocator.c +++ b/src/overlays/l16/mobys/chicken_relocator.c @@ -82,7 +82,7 @@ typedef struct ChickenRelocatorVars { s32 unk8; s32 timer_C; u8 pad_10[0x56]; - s16 unk66; + s16 reposition_timer; u8 pad_68[0x10]; f32 unk78; } ChickenRelocatorVars; @@ -136,7 +136,7 @@ void reposition_moby_with_collision_check(struct Moby *moby, void *new_position) moby->flags = (moby->flags | 0x1000) & 0xFFBE; moby->collision = moby->pclass->collision; moby->state = 4; - moby_data->unk66 = scale_game_frames(0xB4); + moby_data->reposition_timer = scale_game_frames(0xB4); } } diff --git a/src/overlays/l16/mobys/chomper.c b/src/overlays/l16/mobys/chomper.c index a18891a639..eb91936bb2 100644 --- a/src/overlays/l16/mobys/chomper.c +++ b/src/overlays/l16/mobys/chomper.c @@ -86,14 +86,14 @@ typedef struct ChomperVars { u8 pad_121[0x5F]; f32 unk180[4]; u8 pad_190[0x34]; - s32 unk1C4; + s32 pursuit_target_selection_status; u8 pad_1C8[0x8]; f32 unk1D0[4]; u8 pad_1E0[0x10]; f32 unk1F0[4]; u8 pad_200[0x4]; - f32 unk204; - f32 unk208; + f32 travel_distance_velocity; + f32 previous_height_drop; u8 pad_20C[0x14]; u8 unk220; } ChomperVars; @@ -127,7 +127,7 @@ void chomper_update(struct Moby *chomper_moby) { chomper_data->unk5A = truncate_float_to_s32(3.2f); break; case CHOMPER_WAIT_TO_APPROACH_TARGET: - if (chomper_data->unk1C4 != 2) { + if (chomper_data->pursuit_target_selection_status != 2) { chomper_moby->state = CHOMPER_APPROACH_TARGET; if (chomper_moby->prev_seq != 0) blend_moby_animation(chomper_moby, 0, 0, scale_game_frames(20)); @@ -141,7 +141,7 @@ void chomper_update(struct Moby *chomper_moby) { chomper_moby->state = CHOMPER_FACE_TARGET; if (chomper_moby->prev_seq != 1) blend_moby_animation(chomper_moby, 1, 0, scale_game_frames(20)); - } else if (chomper_data->unk1C4 == 2) + } else if (chomper_data->pursuit_target_selection_status == 2) chomper_moby->state = CHOMPER_RETURN_HOME; break; case CHOMPER_FACE_TARGET: { @@ -169,7 +169,7 @@ void chomper_update(struct Moby *chomper_moby) { chomper_moby->state = CHOMPER_WAIT_TO_APPROACH_TARGET; if (chomper_moby->prev_seq != 2) blend_moby_animation(chomper_moby, 2, 0, scale_game_frames(20)); - } else if (chomper_data->unk1C4 != 2) + } else if (chomper_data->pursuit_target_selection_status != 2) chomper_moby->state = CHOMPER_APPROACH_TARGET; break; case 7: @@ -216,13 +216,13 @@ typedef struct { unsigned char pending; /* 0x15D */ char pad15E[0xE]; float timer; /* 0x16C */ - float f170; - float f174; + float knockback_ascent_animation_target; + float knockback_descent_animation_target; char pad178[8]; float target[4]; /* 0x180 */ char pad190[0x30]; - int i1C0; - int i1C4; + int target_moby; + int target_selection_status; char pad1C8[8]; float home[4]; /* 0x1D0 */ char pad1E0[0x10]; @@ -255,6 +255,9 @@ extern void trooper_knockback_arc(void *, float *, void *, void *) __asm__("FUN extern void trooper_anim_update(void *m, short *p) __asm__("FUN_L00_0025d458"); void update_chomper_hit_reaction_and_target(void *chomper_instance) { + enum { + CHOMPER_TARGET_SELECTION_REJECTED = 2 + }; L16PursuitMoby *chomper_moby = chomper_instance; L16PursuitData *pursuit_data = chomper_moby->data; char *hit; @@ -288,8 +291,8 @@ void update_chomper_hit_reaction_and_target(void *chomper_instance) { &pursuit_data->turn_speed); trooper_start_knockback( chomper_moby, pursuit_data->knock, 5, 1, 0, knockback_vector_and_heading[4]); - pursuit_data->f170 = 8.0f; - pursuit_data->f174 = 16.0f; + pursuit_data->knockback_ascent_animation_target = 8.0f; + pursuit_data->knockback_descent_animation_target = 16.0f; chomper_moby->state = CHOMPER_KNOCKBACK; chomper_moby->i94 = 0; pursuit_data->reaction_time = 0x78; @@ -308,12 +311,12 @@ void update_chomper_hit_reaction_and_target(void *chomper_instance) { *(int *)reaction_kind_or_path_address) != 2) { if (vector_distance_xy(pursuit_data->home, pursuit_data->target) > 16.0f || absolute_float(chomper_moby->position[2] - pursuit_data->target[2]) > 3.0f) { - pursuit_data->i1C4 = 2; + pursuit_data->target_selection_status = CHOMPER_TARGET_SELECTION_REJECTED; } } - if (pursuit_data->i1C0 == 0) { + if (pursuit_data->target_moby == 0) { struct Hero *player = &hero; - pursuit_data->i1C0 = (int)player->moby; + pursuit_data->target_moby = (int)player->moby; qcopy(pursuit_data->target, &player->motion.pos); } } @@ -351,12 +354,12 @@ float move_chomper_toward_position(void *m_v, void *t_v) { frame_time_sq * 8.0f, frame_time_sq * 12.0f, frame_time * 4.0f, - &moby_data->unk204); - fast_vec_normalize(movement_delta, moby + 0xC0, moby_data->unk204); - movement_delta[2] = moby_data->unk208 - frame_time_sq * 10.0f; + &moby_data->travel_distance_velocity); + fast_vec_normalize(movement_delta, moby + 0xC0, moby_data->travel_distance_velocity); + movement_delta[2] = moby_data->previous_height_drop - frame_time_sq * 10.0f; FUN_L00_00258830(moby, movement_delta, 0.5f, 0.5f, 0.0f, 0x10); resolve_point_path_segment_xy_clearance( 0.333f, *(void **)&moby_data->unk1F0[0], moby + 0x10, moby + 0x10); - moby_data->unk208 = oldz - MOBY(moby)->pos.z; + moby_data->previous_height_drop = oldz - MOBY(moby)->pos.z; return distance_to_target; } diff --git a/src/overlays/l16/mobys/elevator.c b/src/overlays/l16/mobys/elevator.c index 5c22aa9c7a..f7c18f8b99 100644 --- a/src/overlays/l16/mobys/elevator.c +++ b/src/overlays/l16/mobys/elevator.c @@ -250,12 +250,12 @@ extern float D_L16_00161EB8_gp __asm__("D_L16_00161EB8") __attribute__((sda)); extern float elevator_ring_outer_radius_gp __asm__("D_L16_00161EC4") __attribute__((sda)); extern float elevator_ring_half_height_gp __asm__("D_L16_00161EC8") __attribute__((sda)); extern float elevator_ring_segment_angle_degrees_gp __asm__("D_L16_00161EE8") __attribute__((sda)); -int D_L16_00161ECC = 0; -int D_L16_00161ED0 = 2; -int D_L16_00161ED4 = 0; -int D_L16_00161ED8 = 1; -int D_L16_00161EDC = 0x408000; -int D_L16_00161EE0 = 0x40c08030; +int l16_elevator_ring_blend_color_a_selector __asm__("D_L16_00161ECC") = 0; +int l16_elevator_ring_blend_color_b_selector __asm__("D_L16_00161ED0") = 2; +int l16_elevator_ring_blend_alpha_selector __asm__("D_L16_00161ED4") = 0; +int l16_elevator_ring_blend_color_d_selector __asm__("D_L16_00161ED8") = 1; +int l16_elevator_ring_tint_start_color __asm__("D_L16_00161EDC") = 0x408000; +int l16_elevator_ring_tint_end_color __asm__("D_L16_00161EE0") = 0x40c08030; extern int fast_tween_color(int, int, float) __asm__("FUN_001fa6e0"); extern void draw_geometry_quad(void *, void *, int); @@ -279,8 +279,8 @@ void draw_elevator_rotating_rings(struct Moby *elevator_moby) { int i, j, sign, period; lower = lower - half; lower += translation; - color = fast_tween_color(D_L16_00161EDC, - D_L16_00161EE0, + color = fast_tween_color(l16_elevator_ring_tint_start_color, + l16_elevator_ring_tint_end_color, absolute_float((*(float *)((char *)elevator_data + 0xB0))) / (D_L16_00161EB8_gp * frame_time)); copy_matrix_rotation(&matrix, &elevator_moby->rot_row0); @@ -289,8 +289,10 @@ void draw_elevator_rotating_rings(struct Moby *elevator_moby) { matrix.position[3] = 1.0f; packet.texture = get_effect_texture(14); packet.flags = 0xFF9000000260L; - packet.mode = (long)D_L16_00161ECC | ((long)D_L16_00161ED0 << 2) | ((long)D_L16_00161ED4 << 4) | - ((long)D_L16_00161ED8 << 6) | 0x8000000000L; + packet.mode = (long)l16_elevator_ring_blend_color_a_selector | + ((long)l16_elevator_ring_blend_color_b_selector << 2) | + ((long)l16_elevator_ring_blend_alpha_selector << 4) | + ((long)l16_elevator_ring_blend_color_d_selector << 6) | 0x8000000000L; packet.zero = 0; uv = elevator_ring_quad_uvs; point = packet.position; diff --git a/src/overlays/l16/mobys/grindrail_gate.c b/src/overlays/l16/mobys/grindrail_gate.c index e74af932f2..730014a21b 100644 --- a/src/overlays/l16/mobys/grindrail_gate.c +++ b/src/overlays/l16/mobys/grindrail_gate.c @@ -15,9 +15,9 @@ extern int D_L16_0015F5CC; extern int fast_tween_color(float, int, int) __asm__("FUN_001fa6e0"); extern int func_0022ED80_6478(int, int, void *) __asm__("FUN_0022da68"); -int D_L16_00161DD8 = 600; -int D_L16_00161DDC = 0x80808080; -int D_L16_00161DE0 = 0x80202020; +int l16_grindrail_gate_command_duration_frames __asm__("D_L16_00161DD8") = 600; +int l16_grindrail_gate_glow_bright_color __asm__("D_L16_00161DDC") = 0x80808080; +int l16_grindrail_gate_glow_dim_color __asm__("D_L16_00161DE0") = 0x80202020; void grindrail_gate_update(struct Moby *gate_moby) __asm__("FUN_L16_002e5010"); /* Moby class 1439 */ @@ -37,8 +37,8 @@ void grindrail_gate_update(struct Moby *gate_moby) { convert_integer_to_float(D_L16_0015F5CC % period) / convert_integer_to_float(period); gate_moby->glow_color = fast_tween_color(fast_sin(glow_cycle_phase * 6.28318f - 3.14159f) * 0.5f + 0.5f, - D_L16_00161DDC, - D_L16_00161DE0); + l16_grindrail_gate_glow_bright_color, + l16_grindrail_gate_glow_dim_color); switch (gate_moby->state) { case GRINDRAIL_GATE_INITIALIZE: gate_moby->state = GRINDRAIL_GATE_CHECK_HERO_BOUNDS; @@ -58,7 +58,8 @@ void grindrail_gate_update(struct Moby *gate_moby) { hero_offset_from_gate[2] < grindrail_gate_local_trigger_bounds[5]) { gate_moby->command = 1; gate_moby->state = GRINDRAIL_GATE_WAIT_FOR_COMMAND_TIMEOUT; - *(int *)command_timer = scale_game_frames(D_L16_00161DD8); + *(int *)command_timer = + scale_game_frames(l16_grindrail_gate_command_duration_frames); func_0022ED80_6478(1, 0, gate_moby); } } diff --git a/src/overlays/l16/mobys/local_bounds_command_trigger.c b/src/overlays/l16/mobys/local_bounds_command_trigger.c index bafba1c051..8d9e5e5953 100644 --- a/src/overlays/l16/mobys/local_bounds_command_trigger.c +++ b/src/overlays/l16/mobys/local_bounds_command_trigger.c @@ -16,9 +16,9 @@ extern int D_L16_0015F5CC; extern int FUN_001fa6e0_q(float, int, int) __asm__("FUN_001fa6e0"); extern float D_L16_001D9768[] NOT_SDA; -int D_L16_00161DE4 = 600; -int D_L16_00161DE8 = 0x80202020; -int D_L16_00161DEC = 0x80808080; +int l16_local_bounds_trigger_command_timeout_frames __asm__("D_L16_00161DE4") = 600; +int l16_local_bounds_trigger_dim_glow_color __asm__("D_L16_00161DE8") = 0x80202020; +int l16_local_bounds_trigger_bright_glow_color __asm__("D_L16_00161DEC") = 0x80808080; extern char D_0013F3D0[] NOT_SDA; void local_bounds_command_trigger_update(struct Moby *trigger_moby) __asm__("FUN_L16_002e5258"); @@ -39,8 +39,8 @@ void local_bounds_command_trigger_update(struct Moby *trigger_moby) { convert_integer_to_float(D_L16_0015F5CC % period) / convert_integer_to_float(period); trigger_moby->glow_color = FUN_001fa6e0_q(fast_sin(glow_cycle_phase * 6.28318f - 3.14159f) * 0.5f + 0.5f, - D_L16_00161DE8, - D_L16_00161DEC); + l16_local_bounds_trigger_dim_glow_color, + l16_local_bounds_trigger_bright_glow_color); switch (trigger_moby->state) { case GRINDRAIL_TRIGGER_INITIALIZE: trigger_moby->state = GRINDRAIL_TRIGGER_CHECK_LOCAL_BOUNDS; @@ -64,7 +64,8 @@ void local_bounds_command_trigger_update(struct Moby *trigger_moby) { allocate_voice_for_target_entry(1, 0, trigger_moby); trigger_moby->command = 1; trigger_moby->state = GRINDRAIL_TRIGGER_WAIT_FOR_COMMAND_TIMEOUT; - *(int *)command_timer = scale_game_frames(D_L16_00161DE4); + *(int *)command_timer = + scale_game_frames(l16_local_bounds_trigger_command_timeout_frames); } } break; diff --git a/src/overlays/l16/mobys/path_following_rocket.c b/src/overlays/l16/mobys/path_following_rocket.c index a2fea6089c..d10a82bb96 100644 --- a/src/overlays/l16/mobys/path_following_rocket.c +++ b/src/overlays/l16/mobys/path_following_rocket.c @@ -39,7 +39,7 @@ typedef struct PathFollowingRocketVars { f32 unkC; f32 unk10; s16 voice; - s16 unk16; + s16 proximity_voice_requested; } PathFollowingRocketVars; /* Moby class 257 */ @@ -70,7 +70,7 @@ void path_following_rocket_update(struct Moby *moby) { break; if (is_point_inside_clip_volume(&player->motion.body_center, *(int *)rocket_path_data)) { moby->state = ROCKET_STATE_FOLLOW_PATH; - rocket_path_data->unk16 = 0; + rocket_path_data->proximity_voice_requested = 0; } break; } @@ -88,9 +88,9 @@ void path_following_rocket_update(struct Moby *moby) { if (!voice_is_playing(moby, rocket_path_data->voice)) { rocket_path_data->voice = allocate_voice_for_target_entry(0, 4, moby); } - if (rocket_path_data->unk16 == 0 && + if (rocket_path_data->proximity_voice_requested == 0 && vector_distance_xy(&moby->pos, (char *)(&hero.motion.pos)) < 7.0f) { - rocket_path_data->unk16 = 1; + rocket_path_data->proximity_voice_requested = 1; allocate_voice_for_target_entry_u(1, 0, moby); } break; @@ -112,7 +112,7 @@ void path_following_rocket_update(struct Moby *moby) { moby->visible = 1; moby->flags &= ~1; moby->collision = moby->pclass->collision; - rocket_path_data->unk16 = 0; + rocket_path_data->proximity_voice_requested = 0; moby->state = ROCKET_STATE_WAIT_FOR_TRIGGER; } } diff --git a/src/overlays/l16/mobys/path_walker.c b/src/overlays/l16/mobys/path_walker.c index cf0064da82..d4166affa2 100644 --- a/src/overlays/l16/mobys/path_walker.c +++ b/src/overlays/l16/mobys/path_walker.c @@ -201,7 +201,7 @@ extern char D_L16_001671C0[]; extern void func_L00_0026DD70_emit(void *, void *, int, int, float, int) __asm__("FUN_L00_0026ced0"); -int D_L16_00161E98 = 0x60d0d080; +int l16_path_walker_particle_initial_color __asm__("D_L16_00161E98") = 0x60d0d080; int D_L16_00161E9C = 0x801000; extern float path_walker_particle_movement_velocity_scale_gp __asm__("D_L16_00161EA0") __attribute__((sda)); @@ -237,8 +237,12 @@ void emit_path_walker_particle(unsigned char *source_moby, void *previous_positi fast_vec_add(velocity, velocity, movement_velocity); final_size = path_walker_particle_target_scalar_scale_gp; final_size *= 210000.0f; - func_L00_0026DD70_emit( - offset, velocity, D_L16_00161E98, D_L16_00161E9C, final_size, scale_game_frames(0x23)); + func_L00_0026DD70_emit(offset, + velocity, + l16_path_walker_particle_initial_color, + D_L16_00161E9C, + final_size, + scale_game_frames(0x23)); } /* Start of a walker group: lists the group's mobys and spaces them along the path in random order. */ diff --git a/src/overlays/l16/mobys/test_dummy.c b/src/overlays/l16/mobys/test_dummy.c index 55fead4bc3..57ba7a69d7 100644 --- a/src/overlays/l16/mobys/test_dummy.c +++ b/src/overlays/l16/mobys/test_dummy.c @@ -66,7 +66,7 @@ typedef struct { char pad26[2]; unsigned char b28; char pad29[5]; - unsigned char b2E; + unsigned char respawn_request_state; char pad2F[0x41]; float target[4]; char pad80[0x34]; @@ -87,12 +87,12 @@ typedef struct { char pad100[4]; char *child; int step; - float f10C; + float hit_reaction_heading; unsigned char next_state; char pad111[3]; int next_anim; char pad118[4]; - float f11C; + float glow_pulse_phase; char slots[0x20]; char block140[1]; } L16DummyData; @@ -163,7 +163,7 @@ void test_dummy_update(unsigned char *moby) { FUN_L00_00263ac8(2.5f, (int)moby, 2, (unsigned char *)dummy_data->block140); switch (moby[0x20]) { case TEST_DUMMY_STATE_INITIALIZE: /* set up: lives, home position, the held child for the variant */ - dummy_data->b2E = 1; + dummy_data->respawn_request_state = 1; if (dummy_data->lives > 0) { MOBY(moby)->unkB4 /= dummy_data->lives; } @@ -176,7 +176,7 @@ void test_dummy_update(unsigned char *moby) { dummy_data->b28 = 1; dummy_data->h24 = 2; dummy_data->f20 = 2.0f; - dummy_data->f11C = random_angle_radians(); + dummy_data->glow_pulse_phase = random_angle_radians(); dummy_data->route = find_nearest_test_dummy_door(dummy_data->iCC, moby + 0x10); qcopy(dummy_data->spawn, moby + 0x10); switch (dummy_data->kind) { @@ -400,7 +400,8 @@ void test_dummy_update(unsigned char *moby) { break; case TEST_DUMMY_STATE_TURN_AND_RESUME_SAVED_STATE: /* turn back to the node, then resume the saved state and animation */ position_or_delta.quad = *(u128 *)(path + dummy_data->node * 16 + 16); - move_test_dummy_toward_position_and_heading(moby, position_or_delta.f, dummy_data->f10C); + move_test_dummy_toward_position_and_heading( + moby, position_or_delta.f, dummy_data->hit_reaction_heading); if (moby[0x70] & 2) { moby[0x20] = dummy_data->next_state; if (moby[0x53] != dummy_data->next_anim) { diff --git a/src/overlays/l16/mobys/test_dummy_on_hoverboard.c b/src/overlays/l16/mobys/test_dummy_on_hoverboard.c index 8251369793..865010c886 100644 --- a/src/overlays/l16/mobys/test_dummy_on_hoverboard.c +++ b/src/overlays/l16/mobys/test_dummy_on_hoverboard.c @@ -162,30 +162,30 @@ typedef struct HoverboardDummyVars { u8 pad_1CC[0x14]; u8 manipulator3; u8 pad_1E1[0x67]; - f32 unk248; + f32 manipulator3_target_rotation_z; u8 pad_24C[0x14]; - f32 unk260[4]; + f32 movement_position[4]; f32 unk270[4]; - f32 unk280[4]; + f32 previous_render_position[4]; u8 pad_290[0x20]; s32 path; - f32 unk2B4; - f32 unk2B8; - f32 unk2BC; + f32 normal_speed_target; + f32 boost_speed_target; + f32 forward_speed; char *unk2C0; - s32 unk2C4; + s32 yaw_spring_velocity; f32 unk2C8; - s32 unk2CC; + s32 race_competitor_index; u8 pad_2D0[0xC]; s32 timer_2DC; u8 pad_2E0[0x4]; - s32 unk2E4; + s32 jump_timer; f32 unk2E8; u8 pad_2EC[0x4]; - s16 unk2F0; - s16 unk2F2; + s16 jump_landing_node_index; + s16 reactivation_timer_frames; s16 unk2F4; - u16 unk2F6; + u16 boost_timer_frames; } HoverboardDummyVars; /* Once the race has run for 180 frames, adds boost time when the dummy passes through a hoverboard_ring (0x473) @@ -220,7 +220,7 @@ void collect_hoverboard_dummy_boosts(struct Moby *moby) { float adjusted_position[4]; float m[16]; char *candidate_moby = enumerated_moby; - qcopy(adjusted_position, moby_pvars->unk260); + qcopy(adjusted_position, moby_pvars->movement_position); adjusted_position[2] += 0.8f; fast_vec_sub(displacement_vector, candidate_moby + 0x10, adjusted_position); if (!(8.0f < fast_vec_length(displacement_vector))) { @@ -230,7 +230,7 @@ void collect_hoverboard_dummy_boosts(struct Moby *moby) { if (absolute_float(displacement_vector[0]) < 0.5f && absolute_float(displacement_vector[1]) < 2.5f && absolute_float(displacement_vector[2]) < 2.5f) { - moby_pvars->unk2F6 += scale_game_frames(0x78); + moby_pvars->boost_timer_frames += scale_game_frames(0x78); moby_pvars->timer_2DC = scale_game_frames(0x3C); } } @@ -243,7 +243,9 @@ void collect_hoverboard_dummy_boosts(struct Moby *moby) { while (group_candidate_moby) { if (MOBY(group_candidate_moby)->oclass == 0x474) { float m[16]; - fast_vec_sub(displacement_vector, group_candidate_moby + 0x10, moby_pvars->unk260); + fast_vec_sub(displacement_vector, + group_candidate_moby + 0x10, + moby_pvars->movement_position); if (!(8.0f < fast_vec_length(displacement_vector))) { set_identity_matrix(m); transpose_rotation_matrix(m, group_candidate_moby + 0xC0); @@ -251,7 +253,7 @@ void collect_hoverboard_dummy_boosts(struct Moby *moby) { if (absolute_float(displacement_vector[0]) < 2.8f && absolute_float(displacement_vector[1]) < 1.4f && absolute_float(displacement_vector[2]) < 0.5f) { - moby_pvars->unk2F6 += scale_game_frames(0x78); + moby_pvars->boost_timer_frames += scale_game_frames(0x78); moby_pvars->timer_2DC = scale_game_frames(0x3C); } } @@ -278,10 +280,10 @@ void prepare_hoverboard_dummy_path_jump(struct Moby *moby) { tab = hoverboard_dummy_path_jump_data->unk2C0; path_node_byte_offset = path_node_index * 16; } - hoverboard_dummy_path_jump_data->unk2F0 = path_node_index; + hoverboard_dummy_path_jump_data->jump_landing_node_index = path_node_index; qcopy(hoverboard_dummy_path_jump_data->unk270, hoverboard_dummy_path_jump_data->unk2C0 + (short)path_node_index * 16 + 0x10); - hoverboard_dummy_path_jump_data->unk2E4 = 1; + hoverboard_dummy_path_jump_data->jump_timer = 1; } } } @@ -585,16 +587,16 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { hoverboard_dummy_data->unk2C0 = path; FUN_L16_002cf9d0_c((Level16VendorVectorMoby *)moby, 0, path_node_or_explosion_position); qcopy(moby + 0x10, path_node_or_explosion_position); - qcopy(hoverboard_dummy_data->unk260, moby + 0x10); + qcopy(hoverboard_dummy_data->movement_position, moby + 0x10); *(int *)(moby + 0x40) = 0; *(int *)(moby + 0x44) = 0; MOBY(moby)->rot.z = fast_arc_tan(*(float *)(path + 0x20) - *(float *)(path + 0x10), *(float *)(path + 0x24) - *(float *)(path + 0x14)); hoverboard_dummy_data->unk2B = 1; time = D_0015ED6C; - offset = (float)hoverboard_dummy_data->unk2CC * (time * 1.55f); - hoverboard_dummy_data->unk2B4 = time * 17.0f + offset; - hoverboard_dummy_data->unk2B8 = time * 24.0f + offset; + offset = (float)hoverboard_dummy_data->race_competitor_index * (time * 1.55f); + hoverboard_dummy_data->normal_speed_target = time * 17.0f + offset; + hoverboard_dummy_data->boost_speed_target = time * 24.0f + offset; if (D_0013D4DF == 0) { slow = (float)(D_0015EE3C_gp - 5); if (slow < 0.0f) { @@ -604,8 +606,8 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { if (slow < 0.8f) { slow = 0.8f; } - hoverboard_dummy_data->unk2B4 *= slow; - hoverboard_dummy_data->unk2B8 *= slow; + hoverboard_dummy_data->normal_speed_target *= slow; + hoverboard_dummy_data->boost_speed_target *= slow; } hoverboard_dummy_data->unk2E8 = random_angle_radians(); hoverboard_dummy_data->unk29 = 0; @@ -618,13 +620,13 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { MOBY(moby)->collision = MOBY(moby)->pclass->collision; MOBY(moby)->flags &= ~0x41; hoverboard_dummy_data->unk2F4 = 0; - *(short *)&hoverboard_dummy_data->unk2F6 = scale_game_frames(180); + *(short *)&hoverboard_dummy_data->boost_timer_frames = scale_game_frames(180); *(int *)&hoverboard_dummy_data->unk2C8 = 0; - hoverboard_dummy_data->unk2C4 = 0; - hoverboard_dummy_data->unk2E4 = 0; + hoverboard_dummy_data->yaw_spring_velocity = 0; + hoverboard_dummy_data->jump_timer = 0; hoverboard_dummy_data->timer_2DC = 0; - *(int *)&hoverboard_dummy_data->unk2BC = 0; - if (hoverboard_dummy_data->unk2CC % 2 == 1) { + *(int *)&hoverboard_dummy_data->forward_speed = 0; + if (hoverboard_dummy_data->race_competitor_index % 2 == 1) { MOBY(moby)->flags |= 0x8000; } MOBY(moby)->hit_slot = 255; @@ -635,10 +637,10 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { if (hero.state.control_mode != 22) { MOBY(moby)->state = HOVERBOARD_DUMMY_STATE_INITIALIZE; } else { - int count = *(unsigned short *)&hoverboard_dummy_data->unk2F2 + 1; + int count = *(unsigned short *)&hoverboard_dummy_data->reactivation_timer_frames + 1; short timer = count; - hoverboard_dummy_data->unk2F2 = count; + hoverboard_dummy_data->reactivation_timer_frames = count; if (scale_game_frames(240) < timer) { LevelCamera *player = &l16_camera; @@ -683,7 +685,7 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { 0); spawn_moby_break_fragments(moby, 0x655, 1, 0x656, 2, 2, 0); spawn_moby_break_fragments(moby, 0x6FA, 1, 0x6FB, 1, 1, 0); - hoverboard_dummy_data->unk2F2 = 0; + hoverboard_dummy_data->reactivation_timer_frames = 0; *(int *)(hero_base + 0x8A8) += 250; MOBY(moby)->state = HOVERBOARD_DUMMY_STATE_WAIT_FOR_REACTIVATION; MOBY(moby)->collision = 0; @@ -694,12 +696,12 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { advance_hoverboard_dummy_path_node((char *)moby); collect_hoverboard_dummy_boosts((struct Moby *)moby); prepare_hoverboard_dummy_path_jump((char *)moby); - if (hoverboard_dummy_data->unk2E4 != 0) { - (hoverboard_dummy_data->unk2E4)++; - if (hoverboard_dummy_data->unk2E4 < scale_game_frames(17)) { + if (hoverboard_dummy_data->jump_timer != 0) { + (hoverboard_dummy_data->jump_timer)++; + if (hoverboard_dummy_data->jump_timer < scale_game_frames(17)) { i = hoverboard_dummy_data->unk2F4; distance = 0.0f; - while (i < hoverboard_dummy_data->unk2F0) { + while (i < hoverboard_dummy_data->jump_landing_node_index) { char *path; next_jump_path_node_index = @@ -710,13 +712,13 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { i = next_jump_path_node_index; } { - short last = hoverboard_dummy_data->unk2F0; + short last = hoverboard_dummy_data->jump_landing_node_index; short first = hoverboard_dummy_data->unk2F4; char *path = hoverboard_dummy_data->unk2C0; float rise = *(float *)(path - (-(last * 16)) + 0x18) - *(float *)(path - (-(first * 16)) + 0x18); - duration = distance / hoverboard_dummy_data->unk2BC; + duration = distance / hoverboard_dummy_data->forward_speed; target = rise / duration + frame_time_sq * 21.0f * duration * 0.5f; } if (hoverboard_dummy_data->unk2C8 < 0.0f) { @@ -732,21 +734,24 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { angle = fast_arc_tan(path_node_or_explosion_position[0] - MOBY(moby)->pos.x, path_node_or_explosion_position[1] - MOBY(moby)->pos.y); spring_angle(moby + 0x48, - &hoverboard_dummy_data->unk2C4, + &hoverboard_dummy_data->yaw_spring_velocity, 0, angle, frame_scale_sq * 0.035f, frame_scale_sq * 0.3f, D_0015ED6C * 6.981317f); - if (hoverboard_dummy_data->unk260[2] < path_node_or_explosion_position[2] - 5.0f) { - hoverboard_dummy_data->unk260[2] = path_node_or_explosion_position[2]; + if (hoverboard_dummy_data->movement_position[2] < + path_node_or_explosion_position[2] - 5.0f) { + hoverboard_dummy_data->movement_position[2] = path_node_or_explosion_position[2]; } - delta[0] = fast_cos(MOBY(moby)->rot.z) * hoverboard_dummy_data->unk2BC; - delta[1] = fast_sin(MOBY(moby)->rot.z) * hoverboard_dummy_data->unk2BC; + delta[0] = fast_cos(MOBY(moby)->rot.z) * hoverboard_dummy_data->forward_speed; + delta[1] = fast_sin(MOBY(moby)->rot.z) * hoverboard_dummy_data->forward_speed; delta[2] = 0.0f; - fast_vec_add(hoverboard_dummy_data->unk260, hoverboard_dummy_data->unk260, delta); + fast_vec_add(hoverboard_dummy_data->movement_position, + hoverboard_dummy_data->movement_position, + delta); fast_vec_scale(ahead, delta, 3.0f); - fast_vec_add(ahead, ahead, hoverboard_dummy_data->unk260); + fast_vec_add(ahead, ahead, hoverboard_dummy_data->movement_position); ahead[2] += 0.7f; nearby_moby_count = collect_mobies_in_sphere(0.7f, ahead, 0, moby, 0); if (nearby_moby_count) { @@ -756,52 +761,52 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { spawn_nearby_effect(D_L16_00178300[i], (int)moby, mask, - hoverboard_dummy_data->unk260, + hoverboard_dummy_data->movement_position, impact, 1.0f); } } } - z = probe_ground_height(hoverboard_dummy_data->unk260, 0, 0.5f); - gap = hoverboard_dummy_data->unk260[2] - z; + z = probe_ground_height(hoverboard_dummy_data->movement_position, 0, 0.5f); + gap = hoverboard_dummy_data->movement_position[2] - z; if (gap > 0.0f || hoverboard_dummy_data->unk2C8 > 0.0f) { hoverboard_dummy_data->unk2C8 -= frame_time_sq * 21.0f; } else if (absolute_float(gap) < 0.5f) { hoverboard_dummy_data->unk2C8 = 0.0f; - hoverboard_dummy_data->unk260[2] = z; - hoverboard_dummy_data->unk2E4 = 0; + hoverboard_dummy_data->movement_position[2] = z; + hoverboard_dummy_data->jump_timer = 0; } - hoverboard_dummy_data->unk260[2] += hoverboard_dummy_data->unk2C8; - if (fast_dec_timer_s16(&hoverboard_dummy_data->unk2F6)) { - speed = hoverboard_dummy_data->unk2B4; - if (z < hoverboard_dummy_data->unk260[2]) { + hoverboard_dummy_data->movement_position[2] += hoverboard_dummy_data->unk2C8; + if (fast_dec_timer_s16(&hoverboard_dummy_data->boost_timer_frames)) { + speed = hoverboard_dummy_data->normal_speed_target; + if (z < hoverboard_dummy_data->movement_position[2]) { speed = D_0015ED6C * 19.0f; } hero_base = ((char *)&hero); if (*(int *)(hero_base + 0x894) < scale_game_frames(700)) { speed += D_0015ED6C * 3.0f; } - if (*(short *)(hero_base - (-(hoverboard_dummy_data->unk2CC * 2)) + 0x7C0) < - *(int *)(hero_base + 0x8C0)) { + if (*(short *)(hero_base - (-(hoverboard_dummy_data->race_competitor_index * 2)) + + 0x7C0) < *(int *)(hero_base + 0x8C0)) { speed -= D_0015ED6C; } else { speed += D_0015ED6C; } - if (speed < hoverboard_dummy_data->unk2BC) { - approach_value(&hoverboard_dummy_data->unk2BC, speed, frame_time_sq * 7.0f); + if (speed < hoverboard_dummy_data->forward_speed) { + approach_value(&hoverboard_dummy_data->forward_speed, speed, frame_time_sq * 7.0f); } else { - approach_value(&hoverboard_dummy_data->unk2BC, speed, frame_time_sq * 15.0f); + approach_value(&hoverboard_dummy_data->forward_speed, speed, frame_time_sq * 15.0f); } } else { - approach_value(&hoverboard_dummy_data->unk2BC, - hoverboard_dummy_data->unk2B8, + approach_value(&hoverboard_dummy_data->forward_speed, + hoverboard_dummy_data->boost_speed_target, frame_time_sq * 20.0f); } if (gap < 0.2f && hoverboard_dummy_data->unk2C8 < 0.0f) { - hoverboard_dummy_data->unk260[2] = z; - hoverboard_dummy_data->unk2E4 = 0; + hoverboard_dummy_data->movement_position[2] = z; + hoverboard_dummy_data->jump_timer = 0; } - rate = *(float *)&hoverboard_dummy_data->unk2C4; + rate = *(float *)&hoverboard_dummy_data->yaw_spring_velocity; limit = D_0015ED6C * 2.6179938f; if (limit < rate) { rate = limit; @@ -814,7 +819,7 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { { float coefficient = frame_scale_sq; - hoverboard_dummy_data->unk248 = rate * 30.0f; + hoverboard_dummy_data->manipulator3_target_rotation_z = rate * 30.0f; hoverboard_dummy_data->unkC8 = rate * 20.0f; hoverboard_dummy_data->unk1C8 = rate * 50.0f; hoverboard_dummy_data->unk144 = rate * 40.0f; @@ -839,7 +844,7 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { moby, &hoverboard_dummy_data->manipulator2, 2); - qcopy(moby + 0x10, hoverboard_dummy_data->unk260); + qcopy(moby + 0x10, hoverboard_dummy_data->movement_position); { float bob_time = D_0015ED6C; @@ -848,8 +853,8 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { fast_add_rotations(hoverboard_dummy_data->unk2E8, bob_time * 6.108652f); } MOBY(moby)->pos.z += fast_sin(hoverboard_dummy_data->unk2E8) * 0.08f; - fast_vec_sub(ahead, moby + 0x10, hoverboard_dummy_data->unk280); - qcopy(hoverboard_dummy_data->unk280, moby + 0x10); + fast_vec_sub(ahead, moby + 0x10, hoverboard_dummy_data->previous_render_position); + qcopy(hoverboard_dummy_data->previous_render_position, moby + 0x10); moby_point_position(moby, (D_L16_0015F5CC & 1) | 4, impact); angle = random_angle_radians(); scale = D_0015ED6C * 0.25f; @@ -859,7 +864,7 @@ void test_dummy_on_hoverboard_update(unsigned char *moby) { fast_vec_add(spray, spray, lateral); qcopy(spray, ahead); spray[3] = 120000.0f; - if (*(short *)&hoverboard_dummy_data->unk2F6 == 0) { + if (*(short *)&hoverboard_dummy_data->boost_timer_frames == 0) { int ticks = random_int_between(scale_game_frames(10), scale_game_frames(13)); spawn_effect(impact, diff --git a/src/overlays/l17/hero/update_hero_motion_for_current_state.c b/src/overlays/l17/hero/update_hero_motion_for_current_state.c index 16646456d1..7ead070e20 100644 --- a/src/overlays/l17/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l17/hero/update_hero_motion_for_current_state.c @@ -123,7 +123,7 @@ struct PlayerJointTable { /* second name for hero: gcc reloads the base through it (exactness) */ extern struct Hero hero_b __asm__("D_0013F350"); extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); -s32 D_L17_0015F68C = 0; +s32 l17_look_usage_event_count __asm__("D_L17_0015F68C") = 0; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); extern void build_scaled_hero_move_impulse(f32, f32) __asm__("FUN_L00_002132b8"); @@ -165,7 +165,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -261,7 +261,7 @@ void update_hero_motion_for_current_state(void) __asm__("FUN_L17_00214760"); void update_hero_motion_for_current_state(void) { struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 initial_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 scratch_vector; @@ -318,7 +318,7 @@ void update_hero_motion_for_current_state(void) { D_L17_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L17_0015F68C++; + l17_look_usage_event_count++; } } } @@ -694,11 +694,11 @@ void update_hero_motion_for_current_state(void) { scratch_vector.f[1] += random_float_between(0.0f, 0.03f); scratch_vector.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -3196,7 +3196,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (initial_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l17/mobys/camera_box_watcher.c b/src/overlays/l17/mobys/camera_box_watcher.c index 39a313fe9a..0a072f6a23 100644 --- a/src/overlays/l17/mobys/camera_box_watcher.c +++ b/src/overlays/l17/mobys/camera_box_watcher.c @@ -64,7 +64,7 @@ typedef struct CameraBoxWatcherVars { s32 unk58; s32 unk5C; s32 unk60; - s32 unk64; + s32 first_followup_clip_volume_index; s32 unk68; s32 unk6C; s32 unk70; @@ -118,7 +118,8 @@ void fleet_camera_box_watcher_update(struct Moby *moby) { if (hero_current_state == HERO_STATE_HURT_WITH_DISPLACEMENT_VELOCITY || hero_current_state == HERO_STATE_OPTIONAL_IDLE_ANIMATION) { pvars->unk6C = 0; - } else if (is_point_inside_clip_volume(&h->motion.pos, pvars->unk64) || + } else if (is_point_inside_clip_volume(&h->motion.pos, + pvars->first_followup_clip_volume_index) || is_point_inside_clip_volume(&h->motion.pos, pvars->unk68)) { if (D_0013D408[0x1C] == 0) { D_0013D408[0x1C] = 1; diff --git a/src/overlays/l17/mobys/dreks_fleet_turret.c b/src/overlays/l17/mobys/dreks_fleet_turret.c index 4aa1f34884..2f7ef06cad 100644 --- a/src/overlays/l17/mobys/dreks_fleet_turret.c +++ b/src/overlays/l17/mobys/dreks_fleet_turret.c @@ -52,9 +52,9 @@ typedef struct { int path; char pad88[8]; char a90[0x44]; - float fD4; + float current_joint_pitch; char padD8[0x1C]; - float fF4; + float target_joint_pitch; } Vars347; typedef struct { @@ -169,12 +169,12 @@ void dreks_fleet_turret_update(struct Moby *turret_moby) { ang = fast_arc_tan(targeting_vector_scratch[0], targeting_vector_scratch[1]); turn = frame_time_sq * 0.5235988f; approach_angle(yaw, &turret_vars->yawvel, ang, turn, turn, frame_time * 1.0471976f); - turret_vars->fF4 = -fast_arc_tan(vector_length_xy(targeting_vector_scratch), - targeting_vector_scratch[2]); + turret_vars->target_joint_pitch = -fast_arc_tan( + vector_length_xy(targeting_vector_scratch), targeting_vector_scratch[2]); update_joint_animation( turret_moby, turret_vars->a90, 0, frame_scale_sq * 0.02f, frame_scale_sq * 0.3f); off = fast_difference_between_rotations( - turret_vars->fD4, + turret_vars->current_joint_pitch, -fast_arc_tan(vector_length_xy(targeting_vector_scratch), targeting_vector_scratch[2])); if (D_L17_0015F5CC % scale_game_frames(0x5A) == turret_vars->timer && @@ -228,12 +228,12 @@ void dreks_fleet_turret_update(struct Moby *turret_moby) { ang = fast_arc_tan(targeting_vector_scratch[0], targeting_vector_scratch[1]); turn = frame_time_sq * 0.5235988f; approach_angle(yaw, &turret_vars->yawvel, ang, turn, turn, frame_time * 1.0471976f); - turret_vars->fF4 = -fast_arc_tan(vector_length_xy(targeting_vector_scratch), - targeting_vector_scratch[2]); + turret_vars->target_joint_pitch = -fast_arc_tan( + vector_length_xy(targeting_vector_scratch), targeting_vector_scratch[2]); update_joint_animation( turret_moby, turret_vars->a90, 0, frame_scale_sq * 0.02f, frame_scale_sq * 0.3f); off = fast_difference_between_rotations( - turret_vars->fD4, + turret_vars->current_joint_pitch, -fast_arc_tan(vector_length_xy(targeting_vector_scratch), targeting_vector_scratch[2])); if (fast_dec_timer(&turret_vars->timer) && off < 0.034906585f) { diff --git a/src/overlays/l17/mobys/dreks_fleet_turret_shot.c b/src/overlays/l17/mobys/dreks_fleet_turret_shot.c index b91db88e7c..4d0f453861 100644 --- a/src/overlays/l17/mobys/dreks_fleet_turret_shot.c +++ b/src/overlays/l17/mobys/dreks_fleet_turret_shot.c @@ -50,6 +50,9 @@ unsigned char *create_drone_flight_trail_record(char *position_source, int step) __asm__("FUN_L17_0026fdd0"); unsigned char *create_drone_flight_trail_record(char *position_source, int mode, int step) { + enum { + DRONE_FLIGHT_TRAIL_MODE_EXTENDED_STEP_RANGE = 0 + }; unsigned char *flight_trail_record; int remaining_steps; if (mode) @@ -62,7 +65,7 @@ unsigned char *create_drone_flight_trail_record(char *position_source, int mode, qcopy(flight_trail_record + 0x10, position_source); flight_trail_record[9] = truncate_float_to_s32(1.0f) + 0x70; *(int *)(flight_trail_record + 0x20) = mode; - if (mode == 0) { + if (mode == DRONE_FLIGHT_TRAIL_MODE_EXTENDED_STEP_RANGE) { int d = 0xF - step; *(int *)(flight_trail_record + 4) = 0x60FF3020; flight_trail_record[3] = 0x48; diff --git a/src/overlays/l17/mobys/fighter_jet.c b/src/overlays/l17/mobys/fighter_jet.c index 7c16fc8de5..b8a7b5946b 100644 --- a/src/overlays/l17/mobys/fighter_jet.c +++ b/src/overlays/l17/mobys/fighter_jet.c @@ -214,7 +214,7 @@ extern void emit_transformed_2d_vertex_packet( void draw_fighter_jet_radar_contact_icon( char *rot, char *from, char *moby, int icon, long color, int tex) __asm__("FUN_L17_002eaae0"); -short D_L17_00162188 = 2; +short l17_fighter_jet_offscreen_arrow_vertices __asm__("D_L17_00162188") = 2; int select_fighter_jet_target_and_draw_contacts(int ship_moby, char *ship_vars, char *radar_origin, @@ -544,7 +544,7 @@ int select_fighter_jet_target_and_draw_contacts(int ship_moby, 0.1f / (angular_error_magnitude / 3.1415927f)); *(float *)(ship_vars + 0x114) = arrow_pulse_phase; emit_transformed_2d_vertex_packet( - &D_L17_00162188, + &l17_fighter_jet_offscreen_arrow_vertices, 3, 0xFFFFF3, (truncate_float_to_s32((fast_sin(arrow_pulse_phase) + 1.4f) * 53.0f) << 24) | 0x8000, @@ -657,7 +657,7 @@ void draw_fighter_jet_lock_marker(float x, /* picks the moby to home in on, keeping or dropping the current target */ /* Ported from rac1-decomp (src/overlays/l17_fleet/vendor_002AA068.c: func_L17_002ED258), where it is exact; names translated to the US level program. */ -int D_L17_0016216C = 600; +int l17_fighter_jet_lock_timer_reload __asm__("D_L17_0016216C") = 600; extern int select_fighter_jet_target_and_draw_contacts( int, char *, char *, char *, float, float, float, char *, char *) __asm__("FUN_L17_002eace8"); #define W(p, o) (*(int *)((char *)(p) + (o))) @@ -722,7 +722,7 @@ void update_fighter_jet_target_lock(int ship_moby, char *ship_vars) { (H(P(ship_vars, 0x88), 0xA6) != 0x3EB && H(candidate_target, 0xA6) == 0x3EB)) && FLAG != 0) { P(ship_vars, 0x88) = candidate_target; - lock_timer_reload = D_L17_0016216C; + lock_timer_reload = l17_fighter_jet_lock_timer_reload; W(ship_vars, 0x128) = H(candidate_target, 0xA6); W(ship_vars, 0x8C) = lock_timer_reload; } @@ -977,7 +977,7 @@ extern unsigned char D_0013A4E0_u[] __asm__("D_0013A4E0"); extern short fighter_jet_aim_direction_base_length_gp __asm__("D_L17_0016206C") __attribute__((sda)); -int D_L17_00162070 = 4; +int l17_fighter_jet_projectile_cooldown_reload __asm__("D_L17_00162070") = 4; void update_fighter_jet_aim_and_fire_projectile(char *moby, char *ship_vars, float aim_azimuth, @@ -1004,7 +1004,7 @@ void update_fighter_jet_aim_and_fire_projectile(char *moby, moby_point_position(moby, 3 + (ship_vars[0x61] & 1), projectile_spawn_position); fast_vec_add(projectile_spawn_position, projectile_spawn_position, projectile_spawn_offset); spawn_fighter_jet_missile(moby, aim_direction, projectile_spawn_position, 200.0f, -1.0f); - *(int *)(ship_vars + 0x80) = D_L17_00162070; + *(int *)(ship_vars + 0x80) = l17_fighter_jet_projectile_cooldown_reload; ship_vars[0x61] ^= 1; } fast_vec_normalize(aim_direction, aim_direction, 23.0f); @@ -1018,7 +1018,7 @@ extern int spawn_fighter_jet_rocket(void *, void *, int, void *, float, int) __asm__("FUN_L13_002e6a58"); extern short fighter_jet_rocket_base_scale_gp __asm__("D_L17_00162074") __attribute__((sda)); -int D_L17_00162078 = 30; +int l17_fighter_jet_rocket_cooldown_reload __asm__("D_L17_00162078") = 30; void try_fire_fighter_jet_rocket(char *moby, char *ship_vars) __asm__("FUN_L17_002ec150"); void try_fire_fighter_jet_rocket(char *moby, char *ship_vars) { @@ -1046,7 +1046,7 @@ void try_fire_fighter_jet_rocket(char *moby, char *ship_vars) { scaled_frame_count)) { allocate_voice_for_target_entry(2, 0, (int)moby); hero.ship_ammo -= 1; - *(int *)(ship_vars + 0x84) = D_L17_00162078; + *(int *)(ship_vars + 0x84) = l17_fighter_jet_rocket_cooldown_reload; } } } @@ -1077,7 +1077,7 @@ typedef struct { char pad40[0x20]; unsigned char sel; unsigned char flip; - short s62; + short death_respawn_countdown; float speed; short count; short s6A; @@ -1089,10 +1089,10 @@ typedef struct { float fB0, fB4, fB8, fBC; float fC0, fC4, fC8, fCC; float fD0, fD4, fD8; - int iDC; + int collision_damage_cooldown; char padE0[0x2C]; - int i10C; - int i110; + int boost_voice_slot_index; + int flight_target_record_index; } FighterJetVars; typedef unsigned int Q_c4 __attribute__((mode(TI), aligned(16))); @@ -1118,11 +1118,11 @@ extern float vector_length_xy(void *); #include "rnc/overlay/l17/mobys/fighter_jet_data/update_fighter_jet_flight_8.h" -int D_L17_00162000 = 120; +int l17_fighter_jet_startup_speed_ramp_count_limit __asm__("D_L17_00162000") = 120; #include "rnc/overlay/l17/mobys/fighter_jet_data/update_fighter_jet_flight_7.h" -int D_L17_00162014 = 5; +int l17_fighter_jet_steering_startup_count_threshold __asm__("D_L17_00162014") = 5; #include "rnc/overlay/l17/mobys/fighter_jet_data/update_fighter_jet_flight_6.h" @@ -1159,7 +1159,7 @@ extern float D_L17_00162160 __attribute__((sda)); extern float D_L17_00162164 __attribute__((sda)); extern float D_L17_00162168 __attribute__((sda)); extern int coll_sphere(float, void *, int, void *) __asm__("FUN_L00_001f0d60"); -int D_L17_0016215C = 10; +int l17_fighter_jet_collision_damage_cooldown_reload __asm__("D_L17_0016215C") = 10; float D_L17_001621F0[2] = {512.0f, 512.0f}; unsigned short l17_fighter_jet_collision_death_respawn_delay __asm__("D_L17_0016217C") = 0x1e; @@ -1240,10 +1240,10 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v ship_moby->flags &= 0xFEFF; *(Q_c4 *)death_explosion_velocity = movement_delta.q; if (ship_moby->bc == 0) { - if (D_L17_00162000 < ship_vars->count) { + if (l17_fighter_jet_startup_speed_ramp_count_limit < ship_vars->count) { pad = &controller_state; if (pad->raw_pressed & 0x40) { - voice_slot_index = ship_vars->i10C; + voice_slot_index = ship_vars->boost_voice_slot_index; if (voice_slot_index != -1) { e = (char *)&voice_pool + voice_slot_index * 0x70; if (*(char **)(e + 0x88) == (char *)ship_moby && @@ -1251,10 +1251,11 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v release_voice_slot(voice_slot_index); } } - ship_vars->i10C = -1; - ship_vars->i10C = allocate_voice_for_target_entry(1, 4, (int)ship_moby); + ship_vars->boost_voice_slot_index = -1; + ship_vars->boost_voice_slot_index = + allocate_voice_for_target_entry(1, 4, (int)ship_moby); } else if (pad->raw_released & 0x40) { - voice_slot_index = ship_vars->i10C; + voice_slot_index = ship_vars->boost_voice_slot_index; if (voice_slot_index != -1) { e = (char *)&voice_pool + voice_slot_index * 0x70; if (*(char **)(e + 0x88) == (char *)ship_moby && @@ -1262,7 +1263,7 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v release_voice_slot(voice_slot_index); } } - ship_vars->i10C = -1; + ship_vars->boost_voice_slot_index = -1; } pad = &controller_state; if (pad->raw_held & 0x40) { @@ -1295,7 +1296,7 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v ship_vars->speed = 0.0001f; } - if (D_L17_00162014 < ship_vars->count) { + if (l17_fighter_jet_steering_startup_count_threshold < ship_vars->count) { steering_input_hero = &hero; x = steering_input_hero->stick_x; y = steering_input_hero->stick_y; @@ -1346,14 +1347,15 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v lenA = 310.0f; lenB = 500.0f; - if (ship_vars->i110 != -1) { - int target_record_byte_offset = ship_vars->i110 << 7; + if (ship_vars->flight_target_record_index != -1) { + int target_record_byte_offset = ship_vars->flight_target_record_index << 7; char *target_record_array = D_L17_001600EC; - qcopy(target, ((char(*)[128])target_record_array)[ship_vars->i110] + 0x30); + qcopy(target, + ((char(*)[128])target_record_array)[ship_vars->flight_target_record_index] + 0x30); lenA = fast_vec_length(target_record_array + target_record_byte_offset + 0x20); fast_vec_add(target_record_sum_or_camera_local_offset, - (ship_vars->i110 << 7) + D_L17_001600EC, - (ship_vars->i110 << 7) + D_L17_001600EC + 0x10); + (ship_vars->flight_target_record_index << 7) + D_L17_001600EC, + (ship_vars->flight_target_record_index << 7) + D_L17_001600EC + 0x10); lenB = fast_vec_length(target_record_sum_or_camera_local_offset); } else { qcopy(target, D_L17_001621F0); @@ -1523,7 +1525,7 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v ship_vars->speed = k; if (*(char **)(collision_result + 0x18) != 0 && *(short *)(*(char **)(collision_result + 0x18) + 0xA6) != 0x15B) { - if (ship_vars->iDC == 0) { + if (ship_vars->collision_damage_cooldown == 0) { hero.ship_hp = hero.ship_hp - fighter_jet_collision_damage_gp; if (hero.ship_hp < 0.0f) { fast_vec_sub(side, collision_result + 0x50, collision_result + 0x60); @@ -1554,7 +1556,8 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v 0); ship_moby->state = FIGHTER_JET_STATE_DEATH_RESPAWN_DELAY; } - ship_vars->iDC = D_L17_0016215C; + ship_vars->collision_damage_cooldown = + l17_fighter_jet_collision_damage_cooldown_reload; } } else { *(int *)&hero.ship_hp = 0; @@ -1576,7 +1579,7 @@ void update_fighter_jet_flight(FighterJetMoby *ship_moby, FighterJetVars *ship_v 1, -1, 0); - ship_vars->s62 = l17_fighter_jet_collision_death_respawn_delay; + ship_vars->death_respawn_countdown = l17_fighter_jet_collision_death_respawn_delay; ship_moby->state = FIGHTER_JET_STATE_DEATH_RESPAWN_DELAY; ship_moby->flags |= 0x41; } @@ -1633,7 +1636,7 @@ typedef struct { char padA5; unsigned short oclass; char padA8[8]; - unsigned char bB0; + unsigned char persistent_state_index; } ShipMoby; typedef struct { @@ -1713,7 +1716,7 @@ unsigned char l17_fighter_jet_starting_ammo_gp __asm__("D_L17_00162064") = 0xa; unsigned char l17_fighter_jet_ammo_capacity_gp __asm__("D_L17_00162068") = 0x14; extern float fighter_jet_max_hp_gp __asm__("D_L17_00162084") __attribute__((sda)); extern float D_L17_00162088 __attribute__((sda)); -int D_L17_00162178 = 180; +int l17_fighter_jet_victory_fade_delay_reload __asm__("D_L17_00162178") = 180; char *hp_bar_clut __asm__("D_L17_00162180") = 0; int hp_bar_saved __asm__("D_L17_00162184") = 0; @@ -1867,7 +1870,8 @@ void fighter_jet_update(ShipMoby *moby) { hp_bar_saved = 1; ship_vars->timerF8 = 1; ship_vars->iE8 = 1; - if (moby->bB0 != 0xFF && visited52[moby->bB0 + current_level_index * 16] == 0xFF) { + if (moby->persistent_state_index != 0xFF && + visited52[moby->persistent_state_index + current_level_index * 16] == 0xFF) { moby->state = FIGHTER_JET_STATE_FADE_THEN_REMOVE; } if (ship_vars->i11C > 0) { @@ -1967,7 +1971,7 @@ void fighter_jet_update(ShipMoby *moby) { } update_fighter_jet_flight((FighterJetMoby *)moby, (FighterJetVars *)ship_vars); if (ship_vars->iE8 <= 0) { - ship_vars->timerF8 = D_L17_00162178; + ship_vars->timerF8 = l17_fighter_jet_victory_fade_delay_reload; moby->state = FIGHTER_JET_STATE_VICTORY_EXIT; } if (ship_vars->fade != 0.0f) { @@ -2088,8 +2092,8 @@ void fighter_jet_update(ShipMoby *moby) { p = D_L17_001600EC + (ship_vars->exit_path << 7); set_race_camera(p + 0x30, p + 0x70, 0, 1); } - if (moby->bB0 != 0xFF) { - jet_clear_persistent(moby->bB0); + if (moby->persistent_state_index != 0xFF) { + jet_clear_persistent(moby->persistent_state_index); } idx = ship_vars->voice; if (idx != -1) { diff --git a/src/overlays/l17/mobys/robot_dog.c b/src/overlays/l17/mobys/robot_dog.c index 0da5e116c7..77a33fd14c 100644 --- a/src/overlays/l17/mobys/robot_dog.c +++ b/src/overlays/l17/mobys/robot_dog.c @@ -100,8 +100,8 @@ typedef struct { unsigned char mode; unsigned char b1E5; char pad1E6[2]; - int i1E8; - float f1EC; + int saved_path_index; + float approach_movement_speed; OvlQuad home; char pad200[0x230 - 0x200]; char a230[0x2B0 - 0x230]; @@ -207,7 +207,8 @@ void robot_dog_update(unsigned char *robot_dog_moby) { robot_dog_vars->s24 = 1; robot_dog_vars->f20 = 1.0f; robot_dog_vars->pD0 = &D_L17_00162200; - robot_dog_vars->f1EC = random_float_between(frame_time * 7.2f, frame_time * 8.7f); + robot_dog_vars->approach_movement_speed = + random_float_between(frame_time * 7.2f, frame_time * 8.7f); robot_dog_moby[0x20] = 1; blend_moby_animation( robot_dog_moby, @@ -215,8 +216,8 @@ void robot_dog_update(unsigned char *robot_dog_moby) { random_integer_below( *(unsigned char *)(*(char **)(MOBY(robot_dog_moby)->pclass->seqs) + 0x10)), 0); - if (robot_dog_vars->i1E8 == -1) { - robot_dog_vars->i1E8 = robot_dog_vars->path; + if (robot_dog_vars->saved_path_index == -1) { + robot_dog_vars->saved_path_index = robot_dog_vars->path; } break; case ROBOT_DOG_STATE_RECOVER_THEN_REINITIALIZE: @@ -411,7 +412,8 @@ void robot_dog_update(unsigned char *robot_dog_moby) { break; } case ROBOT_DOG_STATE_APPROACH_TARGET: - FUN_L17_002efd48_c((char *)robot_dog_moby, robot_dog_vars->v180, robot_dog_vars->f1EC); + FUN_L17_002efd48_c( + (char *)robot_dog_moby, robot_dog_vars->v180, robot_dog_vars->approach_movement_speed); MOBY(robot_dog_moby)->anim_speed = 1.8f; if (point_in_path_xy((&hero.motion.pos), ((int **)D_L17_001B0DB0)[robot_dog_vars->path] + 4, @@ -582,13 +584,13 @@ typedef struct { float pos[4]; unsigned char state; char pad21[0x27]; - float f48; + float facing_yaw; char pad4C[0x2C]; Data *data; char pad7C[0x28]; unsigned char bA4; char padA5; - short hA6; + short moby_class_id; } Moby_2F1558; typedef struct { @@ -645,7 +647,7 @@ void update_robot_dog_hit_reaction_and_target_detection(void *moby_v, int clip_v *(OvlQuad *)position_buffer = *(OvlQuad *)hit_record->pos; trooper_knockback_arc( position_buffer, &knockback_heading, &moby_vars->f138, &moby_vars->f13C); - if (hit_record != 0 && hit_record->moby != 0 && hit_record->moby->hA6 == 0x63) { + if (hit_record != 0 && hit_record->moby != 0 && hit_record->moby->moby_class_id == 0x63) { knockback_heading = fast_arc_tan(moby_vars->f1F0 - moby->pos[0], moby_vars->f1F4 - moby->pos[1]); } @@ -664,7 +666,7 @@ void update_robot_dog_hit_reaction_and_target_detection(void *moby_v, int clip_v if (fast_vec_dist(moby->pos, moby_vars->v1B0) < 64.0f) { target_heading = fast_arc_tan(moby_vars->v180[0] - moby->pos[0], moby_vars->v180[1] - moby->pos[1]); - yaw = fast_difference_between_rotations(moby->f48, target_heading); + yaw = fast_difference_between_rotations(moby->facing_yaw, target_heading); qcopy(position_buffer, moby->pos); position_buffer[2] += 1.0f; line_query_clear = diff --git a/src/overlays/l17/mobys/shuttle.c b/src/overlays/l17/mobys/shuttle.c index 3726490b18..d80c1088b0 100644 --- a/src/overlays/l17/mobys/shuttle.c +++ b/src/overlays/l17/mobys/shuttle.c @@ -77,13 +77,13 @@ typedef struct { int cam[2]; int dir; int cut; - int w88; + int travel_turn_angle; char pad8C[8]; int sel; int side; float f9C; float fA0; - int wA4; + int travel_progress; int go; int sfx; int timer; @@ -202,7 +202,7 @@ void shuttle_update(struct Moby *shuttle_moby) { blend_moby_animation(shuttle_moby, 0, 0, 0); } fade_to_black(scale_game_frames(10)); - shuttle_vars->w88 = 0; + shuttle_vars->travel_turn_angle = 0; route_index = shuttle_vars->side; qcopy(a, ((char **)D_L17_001B0DB0)[shuttle_vars->a[route_index]] + 0x10); qcopy(b, ((char **)D_L17_001B0DB0)[shuttle_vars->b[route_index]] + 0x10); @@ -248,7 +248,7 @@ void shuttle_update(struct Moby *shuttle_moby) { int ofs; int base; shuttle_moby->state = SHUTTLE_STATE_RESET_AFTER_TRAVEL; - shuttle_vars->wA4 = 0; + shuttle_vars->travel_progress = 0; ofs = shuttle_vars->cam[shuttle_vars->sel] << 7; base = (int)D_L17_001600EC; qcopy(&shuttle_moby->pos, (char *)(ofs + base + 0x30)); @@ -329,12 +329,12 @@ struct Dat_3CC0_f2180 { int c[2]; int pad1[3]; int e84; - float f88; - float f8C; + float travel_yaw_offset; + float travel_yaw_step; char pad2[0x0C]; float f9C; float fA0; - float fA4; + float travel_fraction; }; extern float approach_value(float *p, float target, float maxstep) __asm__("FUN_00213ed8"); @@ -352,18 +352,18 @@ int update_shuttle_travel_and_camera(char *moby, int route_index) { camera_aim_blend, moby_path_blend, interpolation_start_angle, turn; int i1, i2, i3; - approach_value(&shuttle_vars->fA4, 1.0f, 1.0f / (float)scale_game_frames(0x384)); - scaled_path_position = shuttle_vars->fA4 * (float)(camera_position_path->n - 1); + approach_value(&shuttle_vars->travel_fraction, 1.0f, 1.0f / (float)scale_game_frames(0x384)); + scaled_path_position = shuttle_vars->travel_fraction * (float)(camera_position_path->n - 1); i1 = truncate_float_to_s32(scaled_path_position); camera_position_index_float = (float)i1; camera_position_blend = scaled_path_position - camera_position_index_float; - camera_aim_blend = shuttle_vars->fA4 * 1.02f; + camera_aim_blend = shuttle_vars->travel_fraction * 1.02f; if (camera_aim_blend > 1.0f) camera_aim_blend = 1.0f; scaled_path_position = camera_aim_blend * (float)(camera_aim_path->n - 1); i2 = truncate_float_to_s32(scaled_path_position); camera_aim_blend = scaled_path_position - (float)i2; - scaled_path_position = shuttle_vars->fA4 * (float)(shuttle_movement_path->n - 1); + scaled_path_position = shuttle_vars->travel_fraction * (float)(shuttle_movement_path->n - 1); moby_path_blend = scaled_path_position - camera_position_index_float; i3 = truncate_float_to_s32(scaled_path_position); lerp_vector(camera_position, @@ -401,8 +401,8 @@ int update_shuttle_travel_and_camera(char *moby, int route_index) { interpolation_start_angle) * moby_path_blend, interpolation_start_angle); - MOBY(moby)->rot.y = MOBY(moby)->rot.y * fast_cos(shuttle_vars->f88); - MOBY(moby)->rot.z = fast_add_rotations(MOBY(moby)->rot.z, shuttle_vars->f88); + MOBY(moby)->rot.y = MOBY(moby)->rot.y * fast_cos(shuttle_vars->travel_yaw_offset); + MOBY(moby)->rot.z = fast_add_rotations(MOBY(moby)->rot.z, shuttle_vars->travel_yaw_offset); } else { MOBY(moby)->rot.y = -fast_arc_tan( vector_distance_xy(&shuttle_movement_path->p[0], &shuttle_movement_path->p[1]), @@ -434,16 +434,16 @@ int update_shuttle_travel_and_camera(char *moby, int route_index) { set_camera_rotation(camera_rotation); } MOBY(moby)->scale = - MOBY(moby)->pclass->scale * - (shuttle_vars->f9C - (shuttle_vars->f9C - shuttle_vars->fA0) * shuttle_vars->fA4); - if (shuttle_vars->fA4 > 0.8f) { + MOBY(moby)->pclass->scale * (shuttle_vars->f9C - (shuttle_vars->f9C - shuttle_vars->fA0) * + shuttle_vars->travel_fraction); + if (shuttle_vars->travel_fraction > 0.8f) { turn = frame_time_sq * 12.566371f; - approach_angle(&shuttle_vars->f88, - &shuttle_vars->f8C, + approach_angle(&shuttle_vars->travel_yaw_offset, + &shuttle_vars->travel_yaw_step, 3.1415927f, turn, turn, frame_time * 6.2831855f); } - return shuttle_vars->fA4 == 1.0f; + return shuttle_vars->travel_fraction == 1.0f; } diff --git a/src/overlays/l18/hero/apply_hero_ground_type_effects.c b/src/overlays/l18/hero/apply_hero_ground_type_effects.c index 0d6dc5733e..dd3a36b74a 100644 --- a/src/overlays/l18/hero/apply_hero_ground_type_effects.c +++ b/src/overlays/l18/hero/apply_hero_ground_type_effects.c @@ -26,6 +26,9 @@ void apply_hero_ground_type_effects(void) { GROUND_TYPE_MAGNETIC = 2, GROUND_TYPE_SHALLOW_WATER = 0xE }; + enum { + GROUND_TYPE_SINKING = 3 + }; struct Hero *hero_state = &hero; int keep = hero_state->ground_sound_class; int saved_ground_type = hero_state->ground_type; @@ -67,7 +70,7 @@ void apply_hero_ground_type_effects(void) { } else { collision_check_selector = current_level_index; } - if (saved_ground_type == 3) { + if (saved_ground_type == GROUND_TYPE_SINKING) { struct Hero *q = &hero; *(char *)&q->selector_3 = 1; collision_check_selector = D_0015ED84_d; diff --git a/src/overlays/l18/hero/hero_set_state.c b/src/overlays/l18/hero/hero_set_state.c index 27c60c892c..802ad9b73e 100644 --- a/src/overlays/l18/hero/hero_set_state.c +++ b/src/overlays/l18/hero/hero_set_state.c @@ -69,7 +69,7 @@ extern int hero_set_state(int, int) __asm__("FUN_L18_00227dd0"); extern char hero_trail_jump_velocity_key_profile[] __asm__("D_L18_0017C920"); extern char hero_water_surface_jump_velocity_key_profile[] __asm__("D_L18_0017C960"); -int hero_set_state(int requested_state, int b) { +int hero_set_state(int requested_state, int animation_update_mode) { int previous_state_step; char *moby; int old20A7; @@ -77,10 +77,11 @@ int hero_set_state(int requested_state, int b) { { struct Hero *p = &hero; if (p->state.control_mode == 0x14 && - (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || b != 2)) + (requested_state != HERO_STATE_IDLE_ANIMATION_WITH_DYING_OVERRIDE || + animation_update_mode != 2)) return 0; } - if ((D_L18_0015F5C4 == 2 || D_L18_0015F5C4 == 6) && b != 2) + if ((D_L18_0015F5C4 == 2 || D_L18_0015F5C4 == 6) && animation_update_mode != 2) return 0; { struct Hero *p = &hero; @@ -152,7 +153,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; q->rand_timer.range = 0x68; } - if (b) { + if (animation_update_mode) { if (get_hero_help_value(0) == 0x54) { set_hero_animation(get_hero_help_value(0), 0, (float)scale_game_frames(0x12)); } else { @@ -167,7 +168,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; clear_u64_value(&p->motion.momentum); p->rand_timer.range = 0x68; - if (b) { + if (animation_update_mode) { if (get_hero_help_value(0) == 0x54) { set_hero_animation(get_hero_help_value(0), 0, (float)scale_game_frames(0x12)); } else { @@ -192,7 +193,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x45, 0, (float)scale_game_frames(0xC)); break; } @@ -214,7 +215,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->unk8E0 = 0; n = scale_game_frames(0xC); - if (b) + if (animation_update_mode) set_hero_animation(0x3B, 0, (float)n); } break; @@ -235,7 +236,7 @@ int hero_set_state(int requested_state, int b) { n = scale_game_frames(0xB); if (p->state.prev == 0x33) n = scale_game_frames(0xF); - if (b) + if (animation_update_mode) set_hero_animation(0x3D, 0, (float)n); break; } @@ -252,7 +253,7 @@ int hero_set_state(int requested_state, int b) { t = -2; if (p->state.prev != 0x35) t = n; - if (b) + if (animation_update_mode) set_hero_animation(0x3C, 0, (float)t); break; } @@ -325,7 +326,7 @@ int hero_set_state(int requested_state, int b) { s->motion.momentum.f[2] = 0.0f; FUN_L00_0025f730(&s->motion.momentum, frame_time * 5.5f); s->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x3A, 0, (float)scale_game_frames(0x16)); } break; @@ -349,7 +350,7 @@ int hero_set_state(int requested_state, int b) { int t = scale_game_frames(0x4D); struct Hero *q = &hero; q->invulnerable_frames = t; - if (b) { + if (animation_update_mode) { if (q->state.current == 0x75) { set_hero_animation(0x70, 3, -3.0f); } else { @@ -372,7 +373,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->drown_sink_speed = 0; p->unk698 = scale_game_frames(0x2D); p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x65, 0, (float)scale_game_frames(0x11)); break; } @@ -412,7 +413,7 @@ int hero_set_state(int requested_state, int b) { v = (char *)&hero.motion.momentum; qcopy(v, v - 0x40); } - if (b) + if (animation_update_mode) set_hero_animation(0x5F, 0, (float)scale_game_frames(0xA)); break; } @@ -423,7 +424,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->health.hp = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0x80, 0, (float)scale_game_frames(0xA)); break; } @@ -431,7 +432,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x46, 0, (float)scale_game_frames(8)); break; } @@ -439,7 +440,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x47, 0, (float)scale_game_frames(8)); break; } @@ -447,7 +448,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0x13; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0x48, 0, (float)scale_game_frames(8)); break; } @@ -459,7 +460,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&D_L18_0015F688 = scale_game_frames(0x3C); if (p->unk20AA == 0) { t = get_hero_help_value(1); - if (p->moby->prev_seq != t && b) { + if (p->moby->prev_seq != t && animation_update_mode) { set_hero_animation(t, 0, (float)scale_game_frames(0x12)); } } @@ -551,7 +552,7 @@ int hero_set_state(int requested_state, int b) { scale_game_frames(5) < u->rail_land_frames) n = scale_game_frames(0xD); } - if (b) { + if (animation_update_mode) { struct Hero *v = &hero; set_hero_animation(v->state.step + 3, D_L18_0015F6D8[v->state.step], (float)n); } @@ -563,7 +564,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 1; p->unk2284 = 0; - if (b) { + if (animation_update_mode) { if (p->state.prev == 4) { set_hero_animation(0x5E, 2, (float)scale_game_frames(5)); } else { @@ -580,7 +581,7 @@ int hero_set_state(int requested_state, int b) { p->item_use_locked = 1; if (p->vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) cancel_hero_item_animation(); - if (b) { + if (animation_update_mode) { if (p->vehicle_mode == 3) { set_hero_animation(1, 0, (float)scale_game_frames(8)); } else if (p->vehicle_mode == HERO_VEHICLE_MODE_CLANK) { @@ -599,7 +600,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; fill_transfer_words((char *)p + 0x9D0, 0, 0x20); qcopy(&p->motion.momentum, &p->motion.displacement); - if (b) + if (animation_update_mode) set_hero_animation(0x64, 0, (float)scale_game_frames(0xF)); break; } @@ -620,7 +621,7 @@ int hero_set_state(int requested_state, int b) { } return 0; } - if (b) { + if (animation_update_mode) { struct Hero *q = &hero; float d = q->anim_frame; int id = 6; @@ -637,7 +638,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = gravity_length_xy((float *)v); qcopy(&p->motion.momentum, v); - if (b) { + if (animation_update_mode) { int id = 6; float d = p->anim_frame; if (return_hero_animation_id_unchanged(MOBY(moby)->seq) == 4 && 3.0f < d && d < 16.0f) @@ -664,7 +665,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&q->motion.momentum, frame_time * 7.0f); if (frame_time * 3.5f < q->motion.forward_speed) allocate_hero_voice_for_entry(0xC, 0); - if (b) { + if (animation_update_mode) { if (q->moby->seq == get_hero_help_value(0)) { set_hero_animation(0xD, 2, (float)scale_game_frames(9)); } else { @@ -691,7 +692,7 @@ int hero_set_state(int requested_state, int b) { } p->motion.move_yaw = fast_arc_tan(p->grapple_target->pos.x - p->motion.pos.f[0], p->grapple_target->pos.y - p->motion.pos.f[1]); - if (b) { + if (animation_update_mode) { set_hero_animation(0x2F, 2, (float)scale_game_frames(5)); hero_queue_sequence(0xA, 0xE); } @@ -704,7 +705,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(0xA)); break; } @@ -716,7 +717,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->grapple_pull_speed = 0; p->grapple_pull_ending = 0; p->tether_radius = fast_vec_dist(&p->motion.pos, &p->grapple_target->pos); - if (b) + if (animation_update_mode) set_hero_animation(0x30, 1, (float)scale_game_frames(5)); break; } @@ -772,7 +773,7 @@ int hero_set_state(int requested_state, int b) { } else if (q->state.prev_control_mode == 2) { q->swing_gravity = q->fall_state_gravity; } - if (b) { + if (animation_update_mode) { set_hero_animation(0x34, 0, (float)scale_game_frames(0xB)); { struct Hero *r = &hero; @@ -788,7 +789,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 7; clear_u64_value(&p->motion.rot_spring_vel); qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xF)); break; } @@ -800,7 +801,7 @@ int hero_set_state(int requested_state, int b) { *(int *)&p->past_apex = 0; p->rise_fall_land_frames = 0; p->rise_fall_gravity = frame_time_sq * 100.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x2A, 0, (float)scale_game_frames(6)); break; } @@ -855,7 +856,7 @@ int hero_set_state(int requested_state, int b) { } } } - if (b) { + if (animation_update_mode) { struct Hero *r = &hero; set_hero_animation(r->grind_anim_variant + 0x31, 0, (float)scale_game_frames(6)); } @@ -872,7 +873,7 @@ int hero_set_state(int requested_state, int b) { p->unk4F0 = p->smoothed_ground_z; } p->item_select_blocked = 1; - if (b) { + if (animation_update_mode) { if (frame_time * 3.5f < p->motion.flat_speed) { set_hero_animation(0x20, 0, (float)scale_game_frames(9)); } else { @@ -887,7 +888,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0xD; p->item_select_blocked = 1; p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x21, 0, (float)scale_game_frames(6)); break; } @@ -896,7 +897,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x24, 0, (float)scale_game_frames(6)); break; } @@ -905,7 +906,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 3; p->unk2284 = 0xD; p->item_select_blocked = 1; - if (b) + if (animation_update_mode) set_hero_animation(0x25, 0, (float)scale_game_frames(6)); break; } @@ -914,7 +915,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, (float)scale_game_frames(0xC)); break; } @@ -938,7 +939,7 @@ int hero_set_state(int requested_state, int b) { q->rand_timer.range = 0x68; q->state.step = 0; qcopy(&q->motion.velocity, &q->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { if (q->vehicle_mode == 3) { set_hero_animation(6, 0, (float)scale_game_frames(8)); return 1; @@ -964,7 +965,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)animation_transition_code); } break; @@ -979,7 +980,7 @@ int hero_set_state(int requested_state, int b) { scale_hero_motion(frame_time * 4.5f / p->motion.speed_xy); } qcopy(&p->motion.velocity, &p->motion.displacement); - if (b) { + if (animation_update_mode) { set_hero_animation(0x13, 0, (float)animation_transition_code); } break; @@ -1369,7 +1370,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (q->fall_start_distance == 0.0f) q->fall_start_distance = q->unk430 * 1.5f; - if (b) { + if (animation_update_mode) { int s = q->state.current; if (s == 7) { set_hero_animation(7, 0, (float)scale_game_frames(5)); @@ -1474,7 +1475,7 @@ int hero_set_state(int requested_state, int b) { update_hero_target_heading(8.0f, 1.0471976f, -1.0f); *(int *)&q->slam_descending = 0; q->items[0].timer = 0xA; - if (b) { + if (animation_update_mode) { char *m; int n = scale_game_frames(0xB); if (q->state.prev == 0xB && scale_game_frames(0x2A) > q->state.prev_timer) @@ -1512,7 +1513,7 @@ int hero_set_state(int requested_state, int b) { q->saved_item[0] = 0; update_hero_target_heading(14.0f, 0.5235988f, -1.0f); q->unkA7C = q->unkA7C == 0; - if (b) { + if (animation_update_mode) { int n = scale_game_frames(0xA); if (q->moby->prev_seq == 0x1A) n = scale_game_frames(3); @@ -1527,7 +1528,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *q = &hero; if (((void *)q->items[0].moby) == 0) break; - if (b) { + if (animation_update_mode) { set_hero_animation(0x67, 4, -1.0f); blend_moby_animation(((void *)q->items[0].moby), 3, 4, -1); } @@ -1558,7 +1559,7 @@ int hero_set_state(int requested_state, int b) { r->attack_record = k; } update_hero_target_heading(5.0f, 0.7853982f, 0.7853982f); - if (b) { + if (animation_update_mode) { char *m; int j = 0; int n; @@ -1589,7 +1590,7 @@ int hero_set_state(int requested_state, int b) { } case HERO_STATE_ANIMATION_RECOVERY_WITH_JUMP_CANCEL: { struct Hero *q; - if (b) + if (animation_update_mode) set_hero_animation(0x2C, 7, (float)scale_game_frames(9)); q = &hero; if (q->items[0].item_id == 0xA && ((char *)q->throw_target) != 0) { @@ -1618,7 +1619,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; int e = D_L18_0017C628[q->attack_record].kind; - if (b) { + if (animation_update_mode) { char *m; int z = e == 0; int n = scale_game_frames(5); @@ -1639,7 +1640,7 @@ int hero_set_state(int requested_state, int b) { } else { p->attack_record = 0; } - if (b) { + if (animation_update_mode) { struct Hero *q = &hero; char *m; int n = scale_game_frames(4); @@ -1655,7 +1656,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0xA; p->unk2284 = 0; p->ground_speed = frame_time * 9.0f; - if (b) { + if (animation_update_mode) { char *m; HeroTableRow2C *e = &D_L18_0017C628[p->attack_record]; int k = e->kind; @@ -1676,7 +1677,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->pushback_yaw = fast_add_rotations(p->motion.rot.f[2], 3.1415927f); p->ground_speed = frame_time * 9.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x29, 5, (float)scale_game_frames(8)); break; } @@ -1698,7 +1699,7 @@ int hero_set_state(int requested_state, int b) { { struct Hero *q = &hero; q->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(0x10, 3, -3.0f); q->moby->anim_time = hero_hurt_animation_blend_curves[q->anim_blend_curve][(q->anim_blend_step)++]; @@ -1723,7 +1724,7 @@ int hero_set_state(int requested_state, int b) { r->rand_timer.range = 0x68; r->target_speed = 0.0f; r->ground_speed = 0.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); } break; @@ -1737,7 +1738,7 @@ int hero_set_state(int requested_state, int b) { p->collision_off_frames = 0x2710; allocate_hero_voice_for_entry(9, 0); p->rand_timer.range = 0x68; - if (b) + if (animation_update_mode) set_hero_animation(0x71, 0, (float)scale_game_frames(8)); break; } @@ -1745,7 +1746,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xF)); break; } @@ -1765,7 +1766,7 @@ int hero_set_state(int requested_state, int b) { int n = scale_game_frames(7); if (r->state.prev == 0x60) n = scale_game_frames(0xD); - if (b) + if (animation_update_mode) set_hero_animation(r->attack_record + 9, 1, (float)n); } break; @@ -1774,7 +1775,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 6; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0xC, 0, (float)scale_game_frames(8)); break; } @@ -1782,7 +1783,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 6; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(8, 0, (float)scale_game_frames(8)); break; } @@ -1793,7 +1794,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) { + if (animation_update_mode) { if (2.5f < p->ground_distance) { set_hero_animation(5, 0, (float)scale_game_frames(8)); } else { @@ -1808,7 +1809,7 @@ int hero_set_state(int requested_state, int b) { p->unk2284 = 0; p->ground_speed = vector_length_xy(&p->motion.resolved_velocity); p->unk3B8 = 0; - if (b) + if (animation_update_mode) set_hero_animation(3, 0x12, (float)scale_game_frames(8)); break; } @@ -1817,7 +1818,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(7, 0, (float)scale_game_frames(0xC)); break; } @@ -1829,7 +1830,7 @@ int hero_set_state(int requested_state, int b) { qcopy(&p->motion.velocity, &p->motion.resolved_velocity); FUN_L00_0025f730(&p->motion.velocity, frame_time * 7.0f); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(6, 3, -3.0f); p->moby->anim_time = hero_hurt_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1840,7 +1841,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) + if (animation_update_mode) set_hero_animation(0, 0, (float)scale_game_frames(0xE)); break; } @@ -1848,7 +1849,7 @@ int hero_set_state(int requested_state, int b) { struct Hero *p = &hero; p->state.control_mode = 0; p->unk2284 = 0; - if (b) { + if (animation_update_mode) { set_hero_animation(4, 0, (float)scale_game_frames(7)); hero_queue_sequence(0xE, 0x22); } @@ -1859,7 +1860,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 2; p->unk2284 = 0; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(0xC)); break; } @@ -1870,7 +1871,7 @@ int hero_set_state(int requested_state, int b) { p->fall_state_gravity = frame_time_sq * 24.0f; p->stickless_decel = frame_time_sq * 7.0f; qcopy(&p->motion.velocity, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(6, 0, (float)scale_game_frames(7)); break; } @@ -1887,7 +1888,7 @@ int hero_set_state(int requested_state, int b) { if (frame_time * 1.5f < planar_speed) hero_base->ground_speed = frame_time * 1.5f; hero_base->unk3B8 = 0; - if (b) + if (animation_update_mode) set_hero_animation(1, 0, (float)scale_game_frames(8)); } break; @@ -1897,7 +1898,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x14; p->unk2284 = 0; qcopy(&p->motion.momentum, &p->motion.resolved_velocity); - if (b) + if (animation_update_mode) set_hero_animation(3, 0, (float)scale_game_frames(0xC)); break; } @@ -1910,7 +1911,7 @@ int hero_set_state(int requested_state, int b) { FUN_L00_0025f730(&p->motion.velocity, frame_time * 5.0f); hero_change_health(1); p->invulnerable_frames = scale_game_frames(0x4D); - if (b) { + if (animation_update_mode) { set_hero_animation(2, 3, -3.0f); p->moby->anim_time = hero_hurt_animation_blend_curves[p->anim_blend_curve][(p->anim_blend_step)++]; @@ -1931,7 +1932,7 @@ int hero_set_state(int requested_state, int b) { clear_u64_value(&p->motion.velocity); clear_u64_value(&p->motion.displacement); p->motion.velocity.f[2] = frame_time * 10.0f; - if (b) + if (animation_update_mode) set_hero_animation(0x10, 2, -3.0f); break; } @@ -1982,7 +1983,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->tilt_disabled = 1; p->item_use_locked = 1; - if (b) + if (animation_update_mode) set_hero_animation(get_hero_help_value(0), 0, -1.0f); break; } @@ -1993,7 +1994,7 @@ int hero_set_state(int requested_state, int b) { p->item_select_blocked = 1; p->item_use_locked = 1; clear_u64_value(&p->motion.velocity); - if (b) + if (animation_update_mode) set_hero_animation(0xB, 0, -1.0f); break; } @@ -2017,7 +2018,7 @@ int hero_set_state(int requested_state, int b) { p->state.control_mode = 0x18; p->item_use_locked = 1; cancel_hero_item_animation(); - if (b) + if (animation_update_mode) set_hero_animation(get_hero_help_value(0), 0, -1.0f); break; } diff --git a/src/overlays/l18/hero/update_hero_motion_for_current_state.c b/src/overlays/l18/hero/update_hero_motion_for_current_state.c index a7dea1b0d9..04675e7b15 100644 --- a/src/overlays/l18/hero/update_hero_motion_for_current_state.c +++ b/src/overlays/l18/hero/update_hero_motion_for_current_state.c @@ -123,7 +123,7 @@ struct PlayerJointTable { /* second name for hero: gcc reloads the base through it (exactness) */ extern struct Hero hero_b __asm__("D_0013F350"); extern f32 D_0015ED6C_a __asm__("D_0015ED6C"); -s32 D_L18_0015F68C = 0; +s32 l18_look_timer_expiration_count __asm__("D_L18_0015F68C") = 0; extern void emit_hero_periodic_surface_effect(s32, s32) __asm__("FUN_L00_00209540"); extern void build_scaled_hero_move_impulse(f32, f32) __asm__("FUN_L00_002132b8"); @@ -165,7 +165,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -265,7 +265,7 @@ void update_hero_motion_for_current_state(void) { }; struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 initial_state_step = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 general_vector_or_hit_descriptor_scratch; @@ -319,7 +319,7 @@ void update_hero_motion_for_current_state(void) { D_L18_0015F688 = -1; usage_stats.stat[18].level_mask = usage_stats.stat[18].level_mask | (1 << current_level_index) | 0x80000000; - D_L18_0015F68C++; + l18_look_timer_expiration_count++; } } } @@ -657,11 +657,11 @@ void update_hero_motion_for_current_state(void) { general_vector_or_hit_descriptor_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -3155,7 +3155,7 @@ void update_hero_motion_for_current_state(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (initial_state_step != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/l18/mobys/camera_transition.c b/src/overlays/l18/mobys/camera_transition.c index 5b640a2a81..7134c02583 100644 --- a/src/overlays/l18/mobys/camera_transition.c +++ b/src/overlays/l18/mobys/camera_transition.c @@ -60,7 +60,7 @@ typedef struct BossCameraTransitionVars { f32 unk4C; u8 pad_50[0x10]; f32 unk60; - s32 unk64; + s32 transition_progress_rate; f32 unk68; f32 unk6C; f32 unk70; @@ -116,7 +116,7 @@ void boss_camera_transition_update(struct Moby *moby) { D_L18_0017EF08 = 1; if (fast_dec_timer(&transition_private_vars->timer_74)) { advance_accelerated_scalar(&transition_private_vars->unk60, - (float *)&transition_private_vars->unk64, + (float *)&transition_private_vars->transition_progress_rate, 1.0f, transition_private_vars->unk68, transition_private_vars->unk68, @@ -163,7 +163,7 @@ void boss_camera_transition_update(struct Moby *moby) { case STATE_INTERPOLATE_TRANSITION_WITH_RAMP_UP: if (fast_dec_timer(&transition_private_vars->timer_74)) { advance_accelerated_scalar(&transition_private_vars->unk60, - (float *)&transition_private_vars->unk64, + (float *)&transition_private_vars->transition_progress_rate, 1.0f, transition_private_vars->unk68, transition_private_vars->unk68, @@ -254,7 +254,7 @@ void start_camera_transition(struct Moby *moby, BossCameraTransitionVars *position_rotation_transition_vars = (BossCameraTransitionVars *)moby->pvars; *(int *)&position_rotation_transition_vars->unk60 = 0; - position_rotation_transition_vars->unk64 = 0; + position_rotation_transition_vars->transition_progress_rate = 0; qcopy(position_rotation_transition_vars, transition_start_position); qcopy(&position_rotation_transition_vars->unk10, transition_target_position); qcopy(&position_rotation_transition_vars->unk20, transition_start_rotation); diff --git a/src/overlays/l18/mobys/child_carrier.c b/src/overlays/l18/mobys/child_carrier.c index 9e20eb8bfe..bffc54a83a 100644 --- a/src/overlays/l18/mobys/child_carrier.c +++ b/src/overlays/l18/mobys/child_carrier.c @@ -22,7 +22,7 @@ typedef struct ChildCarrierVars { u8 unk70; u8 pad_71[0xF]; s32 unk80; - char *unk84; + char *carried_child_moby; } ChildCarrierVars; /* Moby class 1584 */ @@ -47,20 +47,21 @@ void child_carrier_update(char *moby) { break; } if (MOBY(moby)->command != 0 && transform_and_child_vars->unk80 != 0 && - *(int *)&transform_and_child_vars->unk84 == 0) { + *(int *)&transform_and_child_vars->carried_child_moby == 0) { char *new_child = create_moby(0x764); - transform_and_child_vars->unk84 = new_child; + transform_and_child_vars->carried_child_moby = new_child; if (new_child != 0) { *(unsigned short *)(new_child + 0x32) = ((unsigned short)MOBY(moby)->draw_dist); - (transform_and_child_vars->unk84)[0x31] = 1; - *(long *)(transform_and_child_vars->unk84 + 0x38) = ((long)MOBY(moby)->spawn_frame); - *(float *)(transform_and_child_vars->unk84 + 0x2C) *= + (transform_and_child_vars->carried_child_moby)[0x31] = 1; + *(long *)(transform_and_child_vars->carried_child_moby + 0x38) = + ((long)MOBY(moby)->spawn_frame); + *(float *)(transform_and_child_vars->carried_child_moby + 0x2C) *= MOBY(moby)->scale / MOBY(moby)->pclass->scale; } } qcopy(transform_and_child_vars->unk60, moby + 0x10); qcopy(&transform_and_child_vars->unk70, moby + 0x40); - child = transform_and_child_vars->unk84; + child = transform_and_child_vars->carried_child_moby; if (child != 0) { qcopy(child + 0x10, moby + 0x10); qcopy(child + 0x40, moby + 0x40); diff --git a/src/overlays/l18/mobys/drek_boss_ring_projectile.c b/src/overlays/l18/mobys/drek_boss_ring_projectile.c index dd7f3c91ea..641b2330d1 100644 --- a/src/overlays/l18/mobys/drek_boss_ring_projectile.c +++ b/src/overlays/l18/mobys/drek_boss_ring_projectile.c @@ -199,7 +199,7 @@ extern void *create_moby() __asm__("FUN_0020c4f8"); typedef struct { char pad0[0x10]; char pos[0x10]; - unsigned char b20; + unsigned char projectile_state; char pad21[0xB]; float f2C; unsigned char b30; @@ -207,11 +207,11 @@ typedef struct { short s32; unsigned short h34; char pad36[0x12]; - float f48; + float movement_heading; char pad4C[0x2C]; Child *child; char pad7C[0x14]; - int f90; + int projectile_glow_color; } BallisticRingProjectileMoby; /* Allocate an object, init its fields and child record. */ @@ -229,21 +229,25 @@ void spawn_drek_boss_ring_projectile(char *pos, void spawn_drek_boss_ring_projectile( char *pos, float *initial_movement_step, int collision_filter_moby, float fa, float fb) { + enum { + STATE_BALLISTIC_FLIGHT = 0 + }; BallisticRingProjectileMoby *spawned_moby = (BallisticRingProjectileMoby *)create_moby(0x270); if (spawned_moby != 0) { Child *moby_vars; int initial_glow_color; spawned_moby->b30 = 0xFF; spawned_moby->b31 = 1; - spawned_moby->b20 = 0; + spawned_moby->projectile_state = STATE_BALLISTIC_FLIGHT; initial_glow_color = *(int *)&D_L18_00161BFC_gp; spawned_moby->f2C = spawned_moby->f2C * D_L18_00161BF8; spawned_moby->s32 = 0xFF; spawned_moby->h34 |= 0x10; - spawned_moby->f90 = initial_glow_color; + spawned_moby->projectile_glow_color = initial_glow_color; moby_vars = spawned_moby->child; qcopy(spawned_moby->pos, pos); - spawned_moby->f48 = fast_arc_tan(initial_movement_step[0], initial_movement_step[1]); + spawned_moby->movement_heading = + fast_arc_tan(initial_movement_step[0], initial_movement_step[1]); qcopy(moby_vars->v, initial_movement_step); moby_vars->f34 = collision_filter_moby; moby_vars->f28 = fa; diff --git a/src/overlays/l18/mobys/drek_fight_missile.c b/src/overlays/l18/mobys/drek_fight_missile.c index bc852819aa..81f1811b05 100644 --- a/src/overlays/l18/mobys/drek_fight_missile.c +++ b/src/overlays/l18/mobys/drek_fight_missile.c @@ -99,7 +99,7 @@ void drek_fight_missile_update(struct Moby *moby) __asm__("FUN_L18_002efb88"); typedef struct DrekFightMissileVars { u8 pad_0[0x110]; - u8 unk110; + u8 wander_destination_position; u8 pad_111[0xF]; u8 unk120; u8 pad_121[0x7]; @@ -109,16 +109,16 @@ typedef struct DrekFightMissileVars { u8 pad_140[0x4]; f32 unk144; u8 pad_148[0x4]; - s32 unk14C; + s32 dive_motion_blend_factor; f32 unk150; - f32 unk154; - f32 unk158; + f32 wander_yaw_approach_scale; + f32 wander_vertical_approach_scale; f32 unk15C; s32 timer_160; s16 unk164; u8 pad_166[0x2]; - f32 unk168; - void *unk16C; + f32 effect_color_phase; + void *activating_moby; } DrekFightMissileVars; /* Moby class 1355 */ @@ -140,16 +140,16 @@ void drek_fight_missile_update(struct Moby *moby) { case DREK_MISSILE_INITIALIZE: { float wander_acceleration_scale = frame_time_macro[1]; float initialization_frame_time = frame_time; - missile_vars->unk158 = wander_acceleration_scale * 10.0f; - missile_vars->unk154 = initialization_frame_time * 12.566371f; + missile_vars->wander_vertical_approach_scale = wander_acceleration_scale * 10.0f; + missile_vars->wander_yaw_approach_scale = initialization_frame_time * 12.566371f; missile_vars->unk150 = wander_acceleration_scale * 3.1415927f; missile_vars->unk15C = initialization_frame_time * 10.0f; - missile_vars->unk168 = random_angle_radians(); + missile_vars->effect_color_phase = random_angle_radians(); moby->draw_dist = 0xFF; qcopy(&missile_vars->unk120, &moby->pos); missile_vars->unk128 += 5.0f; missile_vars->unk128 = probe_ground_height(&missile_vars->unk120, 0, 0.5f); - select_drek_fight_missile_wander_target(moby, &missile_vars->unk110); + select_drek_fight_missile_wander_target(moby, &missile_vars->wander_destination_position); moby->state = DREK_MISSILE_WAIT_FOR_ACTIVATION; moby->flags |= 1; moby->visible = 0; @@ -157,7 +157,7 @@ void drek_fight_missile_update(struct Moby *moby) { break; } case DREK_MISSILE_WANDER: { - char *wander_target_position = &missile_vars->unk110; + char *wander_target_position = &missile_vars->wander_destination_position; if (update_drek_fight_missile_wander_movement(moby, (float *)wander_target_position)) { select_drek_fight_missile_wander_target(moby, wander_target_position); } @@ -173,7 +173,7 @@ void drek_fight_missile_update(struct Moby *moby) { fast_sin(moby->rot.z) * (*(float *)&l18_drek_missile_wander_horizontal_speed_gp * frame_time); missile_vars->unk130[2] = missile_vars->unk144; - missile_vars->unk14C = 0; + missile_vars->dive_motion_blend_factor = 0; break; } case DREK_MISSILE_DIVE: { @@ -183,11 +183,11 @@ void drek_fight_missile_update(struct Moby *moby) { fast_vec_normalize(dive_movement_step, dive_movement_step, *(float *)&l18_drek_missile_dive_speed_gp * frame_time); - approach_value((float *)&missile_vars->unk14C, 1.0f, frame_time); + approach_value((float *)&missile_vars->dive_motion_blend_factor, 1.0f, frame_time); lerp_vector(dive_movement_step, missile_vars->unk130, dive_movement_step, - *(float *)&missile_vars->unk14C); + *(float *)&missile_vars->dive_motion_blend_factor); fast_vec_add(&moby->pos, &moby->pos, dive_movement_step); moby->rot.z = fast_arc_tan(dive_movement_step[0], dive_movement_step[1]); moby->rot.y = -fast_arc_tan(vector_length_xy(dive_movement_step), dive_movement_step[2]); @@ -217,7 +217,7 @@ void drek_fight_missile_update(struct Moby *moby) { char *pos = &moby->pos; moby->state = DREK_MISSILE_WANDER; missile_vars->unk164 = 0; - spawn_explosion(missile_vars->unk16C, + spawn_explosion(missile_vars->activating_moby, D_L18_0015F580, pos, 1.0f, diff --git a/src/overlays/l18/mobys/drek_final_boss_robot.c b/src/overlays/l18/mobys/drek_final_boss_robot.c index 8ff5e7b2ac..5b5933cd57 100644 --- a/src/overlays/l18/mobys/drek_final_boss_robot.c +++ b/src/overlays/l18/mobys/drek_final_boss_robot.c @@ -176,21 +176,21 @@ typedef struct BossMoby { unsigned char f50; char p51; unsigned char f52; - unsigned char f53; + unsigned char animation_sequence_index; char p54[0x1C]; unsigned char f70; char p71[7]; - char *f78; + char *boss_private_data; char p7C[3]; unsigned char f7F; char p80[0x10]; - int f90; - int f94; + int animated_tint_color; + int collision_data; char p98[0xE]; - short fA6; + short moby_class_id; char pA8[0x18]; float fC0[4]; - float fD0[4]; + float lateral_direction_vector[4]; } BossMoby; typedef struct BossData { @@ -204,79 +204,79 @@ typedef struct BossData { char p34[0x3C]; float f70[4]; char p80[0x30]; - BossMoby *fB0; - int fB4; + BossMoby *current_aim_target_moby; + int ground_target_center_mode; char pB8[8]; char fC0[0x68]; - float f128; + float lateral_launch_aim_angle; char p12C[0x14]; - char f140[0x80]; - unsigned char f1C0[0x40]; - int f200; + char joint_19_animation_state[0x80]; + unsigned char big_head_manipulator_state[0x40]; + int class_247_group_index; int f204[3]; - int f210; - int f214; + int gadgebot_group_index; + int missile_group_index; char p218[4]; - int f21C; - int f220; + int thruster_lock_moby_index; + int paired_transition_moby_index; char p224[0xC]; int f230[4]; - int f240[4]; + int alternate_platform_activation_moby_indices[4]; int f250[4]; int f260[4]; - int f270; - int f274; + int encounter_trigger_path_index; + int encounter_trigger_clip_volume_index; char p278[8]; - int f280[3]; + int aim_candidate_node_indices[3]; char p28C[8]; - int f294; - int f298; - int f29C; - int f2A0; + int scene_camera_node_index; + int paired_transition_node_index; + int class_238_launch_group_index; + int race_camera_node_index; char p2A4[0xC]; - int f2B0; + int persistent_jet_slot_index; char p2B4[0x4C]; float f300[4]; - float f310[4]; - float f320[4]; - BossMoby *f330; - unsigned char *f334; - char *f338; - unsigned char *f33C; - int *f340; - int f344; - int f348; - int f34C; - int f350; - int f354; - int f358; - int f35C; - int f360; - int f364; - int f368; + float saved_transition_rotation[4]; + float stored_aim_target_position[4]; + BossMoby *selected_class_247_moby; + unsigned char *paired_transition_moby; + char *hero_follow_ring_effect_moby; + unsigned char *pending_electric_ball_moby; + int *active_movement_path; + int arena_center_node_index; + int path_point_index; + int encounter_phase; + int previous_action_state; + int action_event_timer_frames; + int action_frame_counter; + int secondary_action_timer_frames; + int ring_launch_cooldown_frames; + int hero_follow_action_blocked; + int health_hud_animation_handle; char p36C[4]; - float f370; - float f374; + float yaw_approach_state; + float movement_step_distance; char p378[0x14]; - float f38C; - float f390; + float boss_health; + float rail_mode_damage_accumulated; char p394[4]; - int f398; - int f39C; - void *f3A0; - char *f3A4; - int f3A8; - int f3AC; - int f3B0; - float f3B4; - int f3B8; - float f3BC; - float f3C0[4]; - float f3D0; - float f3D4; - float f3D8; - float f3DC; - float f3E0; + int platform_target_group_index; + int post_scene_resume_state; + void *boss_joint_glow_attachment_moby; + char *big_head_attachment_moby; + int selected_aim_node_index; + int ending_scene_4_delay_counter; + int hero_follow_voice_slot; + float tint_cycle_angle; + int green_biased_joint_glow_color; + float ring_launch_lateral_coefficient; + float unbobbed_boss_position[4]; + float bob_amplitude; + float bob_cycle_angle; + float bob_target_height_offset; + float bob_height_displacement; + float bob_interpolation_state; } BossData; typedef struct BossShared { @@ -437,7 +437,14 @@ void drek_final_boss_robot_update(BossMoby *moby) { DREK_BOSS_PHASE_BEFORE_MISSILE_GROUP = 4, DREK_BOSS_PHASE_AFTER_MISSILE_GROUP_START = 5 }; - BossData *boss_data = (BossData *)moby->f78; + enum { + DREK_BOSS_PHASE_WAIT_FOR_ENDING_PLATFORM = 7, + DREK_BOSS_PHASE_MOUNT_JET_AND_START_SCENE_5 = 8, + DREK_BOSS_PHASE_WAIT_TO_START_SLIDESHOW = 9, + DREK_BOSS_PHASE_WAIT_TO_QUEUE_ENDING_MOVIE = 10, + DREK_BOSS_PHASE_WAIT_FOR_ENDING_CLEANUP = 0xB + }; + BossData *boss_data = (BossData *)moby->boss_private_data; BossMoby *aim_target_moby; float position_and_displacement_scratch[4]; float position_displacement_direction_and_rotation_scratch[4]; @@ -451,16 +458,16 @@ void drek_final_boss_robot_update(BossMoby *moby) { count_drek_boss_platform_event_once((char *)moby); update_drek_boss_damage_and_phase_transitions((char *)moby); - aim_target_moby = boss_data->fB0; + aim_target_moby = boss_data->current_aim_target_moby; /* The file defines this one without parameters; retail passes the moby. */ attach_drek_boss_big_head_manipulator((char *)moby); { - char *manipulator_owner_moby = boss_data->f3A4; + char *manipulator_owner_moby = boss_data->big_head_attachment_moby; if (manipulator_owner_moby != 0 && manipulator_owner_moby[0x20] >= 0) { FUN_L00_00263ac8(*(float *)&drek_boss_big_head_manipulator_scale_gp, (int)manipulator_owner_moby, 0, - boss_data->f1C0); + boss_data->big_head_manipulator_state); } } if (moby->f31 != 0 && fast_vec_dist(moby->f10, D_L18_001677C0) < 32.0f) { @@ -471,24 +478,25 @@ void drek_final_boss_robot_update(BossMoby *moby) { case DREK_BOSS_INITIALIZE: { int i; - qcopy(boss_data->f3C0, moby->f10); + qcopy(boss_data->unbobbed_boss_position, moby->f10); moby->f20 = 1; moby->f30 = 0xFF; moby->f32 = 0x200; moby->f34 |= 0x41; - moby->f94 = 0; + moby->collision_data = 0; boss_data->f28 = 3; boss_data->f20 = 500.0f; boss_data->f30 = 4.0f; boss_data->f24 = 500; - boss_data->f340 = D_L18_001B0EB0[boss_data->f260[3]]; - boss_data->f398 = boss_data->f204[0]; - boss_data->f348 = 1; - boss_data->f368 = -1; - boss_data->f38C = 350.0f; - boss_data->f334 = D_L18_0015FFD8 + boss_data->f220 * 0x100; - boss_data->f3D0 = 0.75f; - boss_data->f374 = 0.0f; + boss_data->active_movement_path = D_L18_001B0EB0[boss_data->f260[3]]; + boss_data->platform_target_group_index = boss_data->f204[0]; + boss_data->path_point_index = 1; + boss_data->health_hud_animation_handle = -1; + boss_data->boss_health = 350.0f; + boss_data->paired_transition_moby = + D_L18_0015FFD8 + boss_data->paired_transition_moby_index * 0x100; + boss_data->bob_amplitude = 0.75f; + boss_data->movement_step_distance = 0.0f; for (i = 0; i < 3; i++) { hide_drek_boss_moby_group((int)moby, boss_data->f204[i]); } @@ -497,8 +505,8 @@ void drek_final_boss_robot_update(BossMoby *moby) { case DREK_BOSS_WAIT_FOR_SCENE: if (D_L18_0015F5C4 != 2) { moby->f34 &= 0xFFBE; - moby->f94 = moby->f24[4]; - moby->f20 = *(unsigned char *)&boss_data->f39C; + moby->collision_data = moby->f24[4]; + moby->f20 = *(unsigned char *)&boss_data->post_scene_resume_state; if (moby->f20 == 5) { D_L18_0015F3FC = 1.0f; } @@ -510,79 +518,81 @@ void drek_final_boss_robot_update(BossMoby *moby) { if (((BossShared *)&D_L18_0016D260_c)->f30 == 2) { if (scale_game_frames(0xA28) <= ((BossShared *)&D_L18_0016D260_c)->f34 && ((BossShared *)&D_L18_0016D260_c)->f34 <= scale_game_frames(0xB36)) { - moby_init_action_mode(boss_data->f330); + moby_init_action_mode(boss_data->selected_class_247_moby); } } else if (((BossShared *)&D_L18_0016D260_c)->f30 == 3) { if (scale_game_frames(0x3B6) < ((BossShared *)&D_L18_0016D260_c)->f34 && ((BossShared *)&D_L18_0016D260_c)->f34 < scale_game_frames(0x3C0)) { - set_thruster_pack_lock_green_list_fields(boss_data->f200); + set_thruster_pack_lock_green_list_fields(boss_data->class_247_group_index); } if (*(int *)&D_L18_001623A0 == 0) { - char *b = D_L18_001600EC + boss_data->f294 * 0x80; + char *b = D_L18_001600EC + boss_data->scene_camera_node_index * 0x80; jet_reset_camera(b + 0x30, b + 0x70); *(int *)&D_L18_001623A0 = 1; } } break; case DREK_BOSS_WAIT_FOR_ENCOUNTER_TRIGGER: - if (is_point_inside_clip_volume(hero.motion.pos.f, boss_data->f274) != 0 && + if (is_point_inside_clip_volume(hero.motion.pos.f, + boss_data->encounter_trigger_clip_volume_index) != 0 && hero.vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { moby->f20 = 7; moby->f34 |= 0x41; start_scene(0); - boss_data->f39C = 2; - boss_data->f358 = scale_game_frames(600); - boss_data->f344 = boss_data->f250[3]; - if (moby->f53 != 10) { + boss_data->post_scene_resume_state = DREK_BOSS_CIRCLE_AND_FIRE_AT_HERO; + boss_data->action_frame_counter = scale_game_frames(600); + boss_data->arena_center_node_index = boss_data->f250[3]; + if (moby->animation_sequence_index != 10) { blend_moby_animation(moby, 10, 0, scale_game_frames(10)); } } else { - int *encounter_trigger_path = D_L18_001B0EB0[boss_data->f270]; + int *encounter_trigger_path = D_L18_001B0EB0[boss_data->encounter_trigger_path_index]; if (point_in_path_xy( hero.motion.pos.f, encounter_trigger_path + 4, *encounter_trigger_path) != 0) { moby->f34 &= 0xFFBE; - moby->f94 = moby->f24[4]; + moby->collision_data = moby->f24[4]; moby->f20 = 10; { int *b = D_L18_001B0EB0[boss_data->f260[0]]; - boss_data->f340 = b; - qcopy(boss_data->f3C0, b + 4); + boss_data->active_movement_path = b; + qcopy(boss_data->unbobbed_boss_position, b + 4); } - moby->f40[2] = fast_arc_tan(hero.motion.pos.f[0] - boss_data->f3C0[0], - hero.motion.pos.f[1] - boss_data->f3C0[1]); + moby->f40[2] = + fast_arc_tan(hero.motion.pos.f[0] - boss_data->unbobbed_boss_position[0], + hero.motion.pos.f[1] - boss_data->unbobbed_boss_position[1]); show_drek_boss_moby_group((int)moby, boss_data->f204[0]); - boss_data->f38C = boss_data->f38C * 0.85714287f; + boss_data->boss_health = boss_data->boss_health * 0.85714287f; } else if (fast_vec_dist(hero.motion.pos.f, D_L18_001600EC + (boss_data->f250[0] << 7) + 0x30) < 50.0f) { moby->f34 &= 0xFFBE; - moby->f94 = moby->f24[4]; + moby->collision_data = moby->f24[4]; moby->f20 = 0xC; { int *p = D_L18_001B0EB0[boss_data->f260[0]]; - boss_data->f340 = p; - qcopy(boss_data->f3C0, (char *)p + *p * 16); + boss_data->active_movement_path = p; + qcopy(boss_data->unbobbed_boss_position, (char *)p + *p * 16); } - boss_data->f344 = boss_data->f250[0]; - boss_data->f38C = boss_data->f38C * 0.85714287f; + boss_data->arena_center_node_index = boss_data->f250[0]; + boss_data->boss_health = boss_data->boss_health * 0.85714287f; } else if (fast_vec_dist(hero.motion.pos.f, D_L18_001600EC + (boss_data->f250[1] << 7) + 0x30) < 50.0f) { moby->f34 &= 0xFFBE; - moby->f94 = moby->f24[4]; - boss_data->f34C = 1; - boss_data->f38C = boss_data->f38C * 0.71428573f; + moby->collision_data = moby->f24[4]; + boss_data->encounter_phase = DREK_BOSS_PHASE_SECOND_ARENA_PATH; + boss_data->boss_health = boss_data->boss_health * 0.71428573f; moby->f20 = 0xC; { int *p = D_L18_001B0EB0[boss_data->f260[1]]; - boss_data->f340 = p; - qcopy(boss_data->f3C0, (char *)p + *p * 16); + boss_data->active_movement_path = p; + qcopy(boss_data->unbobbed_boss_position, (char *)p + *p * 16); } - boss_data->f344 = boss_data->f250[1]; + boss_data->arena_center_node_index = boss_data->f250[1]; } else if (fast_vec_dist(hero.motion.pos.f, D_L18_001600EC + (boss_data->f250[2] << 7) + 0x30) < 50.0f) { if (*(int *)&D_L18_001623A0 != 0) { - set_thruster_pack_lock_green_list_fields(boss_data->f200); - if (voice_is_playing(moby, boss_data->f3B0) != 0) { - int i = boss_data->f3B0; + set_thruster_pack_lock_green_list_fields(boss_data->class_247_group_index); + if (voice_is_playing(moby, boss_data->hero_follow_voice_slot) != 0) { + int i = boss_data->hero_follow_voice_slot; if (i != -1) { char *e = ((char *)&voice_pool) + i * 0x70; if (*(BossMoby **)(e + 0x88) == moby && @@ -590,25 +600,25 @@ void drek_final_boss_robot_update(BossMoby *moby) { release_voice_slot(i); } } - boss_data->f3B0 = -1; + boss_data->hero_follow_voice_slot = -1; } moby->f20 = 0x1B; - moby->f94 = 0; + moby->collision_data = 0; moby->f34 |= 0x41; - boss_data->f34C = 7; + boss_data->encounter_phase = DREK_BOSS_PHASE_WAIT_FOR_ENDING_PLATFORM; } else { moby->f34 &= 0xFFBE; - moby->f94 = moby->f24[4]; - boss_data->f34C = 2; - boss_data->f38C = boss_data->f38C * 0.5714286f; + moby->collision_data = moby->f24[4]; + boss_data->encounter_phase = DREK_BOSS_PHASE_THIRD_ARENA_PATH; + boss_data->boss_health = boss_data->boss_health * 0.5714286f; moby->f20 = 0xC; { int *p = D_L18_001B0EB0[boss_data->f260[2]]; - boss_data->f340 = p; - qcopy(boss_data->f3C0, (char *)p + *p * 16); + boss_data->active_movement_path = p; + qcopy(boss_data->unbobbed_boss_position, (char *)p + *p * 16); } - boss_data->f344 = boss_data->f250[2]; - boss_data->f358 = scale_game_frames(0x168); + boss_data->arena_center_node_index = boss_data->f250[2]; + boss_data->action_frame_counter = scale_game_frames(0x168); } } } @@ -618,48 +628,51 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); update_drek_boss_arena_circling_movement((struct Moby *)moby); - if (boss_data->f38C <= 301.0f) { + if (boss_data->boss_health <= 301.0f) { if (hero.vehicle_mode != HERO_VEHICLE_MODE_ON_FOOT) { - ((BossMoby *)hero.moby)->f94 = 0; + ((BossMoby *)hero.moby)->collision_data = 0; ((BossMoby *)hero.moby)->f34 |= 0x41; } restore_saved_hero_moby_and_clear_vehicle_mode(); { - char *b = D_L18_001600EC + boss_data->f2A0 * 0x80; + char *b = D_L18_001600EC + boss_data->race_camera_node_index * 0x80; set_race_camera(b + 0x30, b + 0x70, 0, 1); } - jet_clear_persistent(boss_data->f2B0); + jet_clear_persistent(boss_data->persistent_jet_slot_index); jet_reset_camera(hero.motion.pos.f, hero.motion.rot.f); show_drek_boss_moby_group((int)moby, boss_data->f204[0]); start_scene(1); moby->f20 = 7; moby->f34 |= 0x41; - if (moby->f53 != 10) { + if (moby->animation_sequence_index != 10) { blend_moby_animation(moby, 10, 0, scale_game_frames(0x14)); } - boss_data->f39C = 10; - boss_data->f348 = 0; - boss_data->f374 = 0.0f; + boss_data->post_scene_resume_state = DREK_BOSS_FOLLOW_PATH_AND_FIRE_AT_MOBYS; + boss_data->path_point_index = 0; + boss_data->movement_step_distance = 0.0f; { int *b = D_L18_001B0EB0[boss_data->f260[0]]; - boss_data->f340 = b; - qcopy(boss_data->f3C0, b + 4); + boss_data->active_movement_path = b; + qcopy(boss_data->unbobbed_boss_position, b + 4); } - moby->f40[2] = fast_arc_tan(hero.motion.pos.f[0] - boss_data->f3C0[0], - hero.motion.pos.f[1] - boss_data->f3C0[1]); - boss_data->f368 = -1; + moby->f40[2] = + fast_arc_tan(hero.motion.pos.f[0] - boss_data->unbobbed_boss_position[0], + hero.motion.pos.f[1] - boss_data->unbobbed_boss_position[1]); + boss_data->health_hud_animation_handle = -1; break; } - if (moby->f53 == 10 && (is_value_within_interpolated_window((char *)moby, 1.0f) != 0 || - is_value_within_interpolated_window((char *)moby, 16.0f) != 0)) { + if (moby->animation_sequence_index == 10 && + (is_value_within_interpolated_window((char *)moby, 1.0f) != 0 || + is_value_within_interpolated_window((char *)moby, 16.0f) != 0)) { qcopy(position_and_displacement_scratch, hero.motion.near_ground_point.f); - if (absolute_float(position_and_displacement_scratch[2] - boss_data->f3C0[2]) < 5.0f) { + if (absolute_float(position_and_displacement_scratch[2] - + boss_data->unbobbed_boss_position[2]) < 5.0f) { if ((float)moby->f50 < 15.0f) { moby_point_position( moby, 2, position_displacement_direction_and_rotation_scratch); @@ -688,7 +701,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { } } } - if ((moby->f70 & 2) != 0 && moby->f53 != 10) { + if ((moby->f70 & 2) != 0 && moby->animation_sequence_index != 10) { blend_moby_animation(moby, 10, 0, scale_game_frames(0x14)); } break; @@ -700,66 +713,69 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); - qcopy(position_and_displacement_scratch, boss_data->f340 + 4); + qcopy(position_and_displacement_scratch, boss_data->active_movement_path + 4); hit = advance_drek_boss_planar_position_toward_target( (char *)moby, 20.0f, position_and_displacement_scratch); - lvl = get_camera_transition_progress(boss_data->f334); - if (moby->f53 == 7) { + lvl = get_camera_transition_progress(boss_data->paired_transition_moby); + if (moby->animation_sequence_index == 7) { if ((moby->f70 & 2) != 0) { blend_moby_animation(moby, 8, 0, scale_game_frames(10)); } } else { fast_vec_sub(position_displacement_direction_and_rotation_scratch, - boss_data->f340 + 4, - boss_data->f3C0); + boss_data->active_movement_path + 4, + boss_data->unbobbed_boss_position); fast_vec_normalize(position_displacement_direction_and_rotation_scratch, position_displacement_direction_and_rotation_scratch, frame_time * 5.0f); - fast_vec_add(boss_data->f3C0, - boss_data->f3C0, + fast_vec_add(boss_data->unbobbed_boss_position, + boss_data->unbobbed_boss_position, position_displacement_direction_and_rotation_scratch); } if (lvl > 0.5f && lvl < 0.7f) { - if (moby->f53 != 9) { + if (moby->animation_sequence_index != 9) { blend_moby_animation(moby, 9, 0, 0); } - if (boss_data->f33C == 0) { + if (boss_data->pending_electric_ball_moby == 0) { break; } moby_point_position(moby, 1, position_displacement_direction_and_rotation_scratch); qcopy(position_direction_and_rotation_scratch, - D_L18_001600EC + boss_data->f344 * 0x80 + 0x30); + D_L18_001600EC + boss_data->arena_center_node_index * 0x80 + 0x30); position_direction_and_rotation_scratch[2] = position_direction_and_rotation_scratch[2] + 10.0f; position_direction_and_rotation_scratch[2] = probe_ground_height(position_direction_and_rotation_scratch, 0, 0.5f); - refresh_moby_position_and_activate(boss_data->f33C, + refresh_moby_position_and_activate(boss_data->pending_electric_ball_moby, position_displacement_direction_and_rotation_scratch, - D_L18_001600EC + boss_data->f344 * 0x80 + 0x30, + D_L18_001600EC + + boss_data->arena_center_node_index * 0x80 + 0x30, 1, 1.0f); - boss_data->f33C = 0; + boss_data->pending_electric_ball_moby = 0; } else if (lvl >= 0.729f) { int i; - if (moby->f53 != 0) { + if (moby->animation_sequence_index != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0x14)); } if (hit != 0) { moby->f20 = 10; } for (i = 0; i < 4; i++) { - int k = boss_data->f34C == 1 ? boss_data->f230[i] : boss_data->f240[i]; + int k = boss_data->encounter_phase == DREK_BOSS_PHASE_SECOND_ARENA_PATH + ? boss_data->f230[i] + : boss_data->alternate_platform_activation_moby_indices[i]; activate_drek_boss_class_0565_moby(D_L18_0015FFD8 + k * 0x100); } } - if (boss_data->f33C != 0) { + if (boss_data->pending_electric_ball_moby != 0) { float f; moby_point_position(moby, 1, position_displacement_direction_and_rotation_scratch); @@ -767,7 +783,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { if (f > 1.0f) { f = 1.0f; } - refresh_moby_position_and_activate(boss_data->f33C, + refresh_moby_position_and_activate(boss_data->pending_electric_ball_moby, position_displacement_direction_and_rotation_scratch, D_L18_0015F580, 0, @@ -782,31 +798,36 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); - approach_value(&boss_data->f374, frame_time * 12.0f, frame_time_sq * 20.0f); - if (boss_data->f374 != 0.0f) { + approach_value( + &boss_data->movement_step_distance, frame_time * 12.0f, frame_time_sq * 20.0f); + if (boss_data->movement_step_distance != 0.0f) { fast_vec_sub(position_and_displacement_scratch, - (char *)boss_data->f340 + (boss_data->f348 * 0x10 + 0x10), - boss_data->f3C0); - if (fast_vec_length(position_and_displacement_scratch) <= boss_data->f374) { - boss_data->f348 = boss_data->f348 + 1; + (char *)boss_data->active_movement_path + + (boss_data->path_point_index * 0x10 + 0x10), + boss_data->unbobbed_boss_position); + if (fast_vec_length(position_and_displacement_scratch) <= + boss_data->movement_step_distance) { + boss_data->path_point_index = boss_data->path_point_index + 1; } else { fast_vec_normalize(position_and_displacement_scratch, position_and_displacement_scratch, - boss_data->f374); + boss_data->movement_step_distance); } - fast_vec_add(boss_data->f3C0, boss_data->f3C0, position_and_displacement_scratch); + fast_vec_add(boss_data->unbobbed_boss_position, + boss_data->unbobbed_boss_position, + position_and_displacement_scratch); } firing_target_moby = select_drek_boss_platform_firing_target((char *)moby); if (firing_target_moby != 0 && (is_value_within_interpolated_window((char *)moby, 1.0f) != 0 || is_value_within_interpolated_window((char *)moby, 16.0f) != 0)) { qcopy(position_direction_and_rotation_scratch, firing_target_moby + 0x10); - qcopy(position_and_displacement_scratch, boss_data->f3C0); + qcopy(position_and_displacement_scratch, boss_data->unbobbed_boss_position); fast_vec_add( position_and_displacement_scratch, position_and_displacement_scratch, moby->fC0); position_and_displacement_scratch[2] = position_and_displacement_scratch[2] + 6.0f; @@ -825,8 +846,8 @@ void drek_final_boss_robot_update(BossMoby *moby) { 5); } } - if (boss_data->f348 == *boss_data->f340 - 2) { - if (moby->f53 != 0) { + if (boss_data->path_point_index == *boss_data->active_movement_path - 2) { + if (moby->animation_sequence_index != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0x14)); } moby->f20 = 0xB; @@ -834,35 +855,44 @@ void drek_final_boss_robot_update(BossMoby *moby) { break; } case DREK_BOSS_FINISH_PATH_AND_WAIT_FOR_HERO: - if (boss_data->f348 != *boss_data->f340) { - approach_value(&boss_data->f374, frame_time * 10.0f, frame_time_sq * 20.0f); + if (boss_data->path_point_index != *boss_data->active_movement_path) { + approach_value( + &boss_data->movement_step_distance, frame_time * 10.0f, frame_time_sq * 20.0f); fast_vec_sub(position_and_displacement_scratch, - (char *)boss_data->f340 + (boss_data->f348 * 0x10 + 0x10), - boss_data->f3C0); - if (fast_vec_length(position_and_displacement_scratch) <= boss_data->f374) { - boss_data->f348 = boss_data->f348 + 1; + (char *)boss_data->active_movement_path + + (boss_data->path_point_index * 0x10 + 0x10), + boss_data->unbobbed_boss_position); + if (fast_vec_length(position_and_displacement_scratch) <= + boss_data->movement_step_distance) { + boss_data->path_point_index = boss_data->path_point_index + 1; } else { fast_vec_normalize(position_and_displacement_scratch, position_and_displacement_scratch, - boss_data->f374); + boss_data->movement_step_distance); } - fast_vec_add(boss_data->f3C0, boss_data->f3C0, position_and_displacement_scratch); + fast_vec_add(boss_data->unbobbed_boss_position, + boss_data->unbobbed_boss_position, + position_and_displacement_scratch); break; } if (vector_distance_xy(moby->f10, hero.motion.pos.f) < 50.0f && hero.air_frames.s == 0 && - (((BossMoby *)hero.ground_moby) == 0 || ((BossMoby *)hero.ground_moby)->fA6 != 0x24B)) { - int *p = boss_data->f340; - - boss_data->f374 = 0.0f; - qcopy(boss_data->f3C0, (char *)p + *p * 16); - boss_data->f344 = boss_data->f250[boss_data->f34C]; - if (boss_data->f34C == 2) { + (((BossMoby *)hero.ground_moby) == 0 || + ((BossMoby *)hero.ground_moby)->moby_class_id != 0x24B)) { + int *p = boss_data->active_movement_path; + + boss_data->movement_step_distance = 0.0f; + qcopy(boss_data->unbobbed_boss_position, (char *)p + *p * 16); + boss_data->arena_center_node_index = boss_data->f250[boss_data->encounter_phase]; + if (boss_data->encounter_phase == DREK_BOSS_PHASE_THIRD_ARENA_PATH) { if (*(int *)&l18_drek_boss_scene_2_started_gp == 0) { moby->f20 = 4; } else { moby->f20 = 0x15; - boss_data->f330 = find_class_247_moby_with_largest_xy_angle_in_list( - boss_data->f3C0, hero.motion.pos.f, boss_data->f200); + boss_data->selected_class_247_moby = + find_class_247_moby_with_largest_xy_angle_in_list( + boss_data->unbobbed_boss_position, + hero.motion.pos.f, + boss_data->class_247_group_index); } break; } @@ -870,15 +900,15 @@ void drek_final_boss_robot_update(BossMoby *moby) { } break; case DREK_BOSS_WAIT_FOR_GROUNDED_HERO_TO_START_SCENE: - if (hero.air_frames.s == 0 && - (((BossMoby *)hero.ground_moby) == 0 || ((BossMoby *)hero.ground_moby)->fA6 != 0x24B)) { + if (hero.air_frames.s == 0 && (((BossMoby *)hero.ground_moby) == 0 || + ((BossMoby *)hero.ground_moby)->moby_class_id != 0x24B)) { int i; *(int *)&l18_drek_boss_scene_2_started_gp = 1; moby->f20 = 7; - boss_data->f39C = 5; - boss_data->f330 = - (BossMoby *)find_nearest_class_247_moby_in_list(hero.motion.pos.f, boss_data->f200); + boss_data->post_scene_resume_state = DREK_BOSS_INITIALIZE_PAIRED_TRANSFORM_TRANSITION; + boss_data->selected_class_247_moby = (BossMoby *)find_nearest_class_247_moby_in_list( + hero.motion.pos.f, boss_data->class_247_group_index); moby->f34 |= 0x41; start_scene(2); for (i = 0; i < 3; i++) { @@ -887,7 +917,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { } break; case DREK_BOSS_INITIALIZE_PAIRED_TRANSFORM_TRANSITION: { - unsigned char *b = D_L18_0015FFD8 + boss_data->f21C * 0x100; + unsigned char *b = D_L18_0015FFD8 + boss_data->thruster_lock_moby_index * 0x100; b += 0x10; *(int *)&D_L18_00162390 = 0; @@ -913,12 +943,12 @@ void drek_final_boss_robot_update(BossMoby *moby) { { /* In locals: retail does not load them again after the copy. */ char *recs = D_L18_001600EC; - int idx = boss_data->f298; + int idx = boss_data->paired_transition_node_index; qcopy(node_position_and_yaw, recs + idx * 0x80 + 0x30); node_position_and_yaw[3] = *(float *)(recs + idx * 0x80 + 0x78); } - start_camera_transition((char *)boss_data->f334, + start_camera_transition((char *)boss_data->paired_transition_moby, position_and_displacement_scratch, position_displacement_direction_and_rotation_scratch, position_direction_and_rotation_scratch, @@ -929,42 +959,43 @@ void drek_final_boss_robot_update(BossMoby *moby) { 1); hero.pending_item[3] = 3; moby->f20 = 8; - request_thruster_pack_lock_red_wait(D_L18_0015FFD8 + boss_data->f21C * 0x100, - scale_game_frames(0x708)); + request_thruster_pack_lock_red_wait( + D_L18_0015FFD8 + boss_data->thruster_lock_moby_index * 0x100, scale_game_frames(0x708)); break; } case DREK_BOSS_WAIT_TO_RESTORE_SAVED_TRANSFORM: - if (classify_moby_state_two_or_three(boss_data->f334) == 2) { - qcopy(boss_data->f3C0, boss_data->f300); - qcopy(moby->f40, boss_data->f310); + if (classify_moby_state_two_or_three(boss_data->paired_transition_moby) == 2) { + qcopy(boss_data->unbobbed_boss_position, boss_data->f300); + qcopy(moby->f40, boss_data->saved_transition_rotation); moby->f20 = 9; - if (moby->f53 != 7) { + if (moby->animation_sequence_index != 7) { blend_moby_animation(moby, 7, 0, scale_game_frames(0x14)); } - show_drek_boss_moby_group((int)moby, boss_data->f398); - hide_drek_boss_moby_group((int)moby, boss_data->f204[boss_data->f34C - 1]); + show_drek_boss_moby_group((int)moby, boss_data->platform_target_group_index); + hide_drek_boss_moby_group((int)moby, boss_data->f204[boss_data->encounter_phase - 1]); moby_point_position(moby, 1, position_and_displacement_scratch); - boss_data->f33C = (unsigned char *)spawn_drek_boss_electric_ball( + boss_data->pending_electric_ball_moby = (unsigned char *)spawn_drek_boss_electric_ball( moby, position_and_displacement_scratch, 300); } break; case DREK_BOSS_WAIT_FOR_PAIRED_TRANSFORM_TRANSITION: moby->f34 |= 0x41; - if (get_camera_transition_progress(boss_data->f334) >= 1.0f) { + if (get_camera_transition_progress(boss_data->paired_transition_moby) >= 1.0f) { moby->f20 = 0xC; moby->f34 &= 0xFFBE; - if (moby->f53 != 0) { + if (moby->animation_sequence_index != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } } break; case DREK_BOSS_ACTIVATE_MISSILE_GROUP: - if (fast_dec_timer(&boss_data->f354) != 0) { - boss_data->f354 = scale_game_frames(0x14); - qcopy(position_and_displacement_scratch, boss_data->f3C0); + if (fast_dec_timer(&boss_data->action_event_timer_frames) != 0) { + boss_data->action_event_timer_frames = scale_game_frames(0x14); + qcopy(position_and_displacement_scratch, boss_data->unbobbed_boss_position); position_and_displacement_scratch[2] = position_and_displacement_scratch[2] + 4.0f; - if (activate_drek_fight_missiles_in_group( - (char *)moby, boss_data->f214, position_and_displacement_scratch) != 0) { + if (activate_drek_fight_missiles_in_group((char *)moby, + boss_data->missile_group_index, + position_and_displacement_scratch) != 0) { moby->f20 = 0xC; } } @@ -974,7 +1005,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(aim_target_moby->f10[0] - moby->f10[0], aim_target_moby->f10[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, @@ -986,42 +1017,44 @@ void drek_final_boss_robot_update(BossMoby *moby) { switch (select_drek_boss_next_action((char *)moby)) { case DREK_BOSS_TARGET_GROUND_POINTS: moby->f20 = 0xF; - if (moby->f53 != 10) { + if (moby->animation_sequence_index != 10) { blend_moby_animation(moby, 10, 0, scale_game_frames(0x14)); } - boss_data->f354 = 0; - boss_data->f358 = scale_game_frames(600); - boss_data->f35C = scale_game_frames(0x168); + boss_data->action_event_timer_frames = 0; + boss_data->action_frame_counter = scale_game_frames(600); + boss_data->secondary_action_timer_frames = scale_game_frames(0x168); break; case DREK_BOSS_LAUNCH_FORWARD_WITH_LATERAL_OFFSET: moby->f20 = 0xD; - if (moby->f53 != 2) { + if (moby->animation_sequence_index != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(0x14)); } - boss_data->f354 = 0; - boss_data->f358 = scale_game_frames(random_integer_below(3) * 0x5A + 0x14A); - boss_data->f35C = scale_game_frames((6 - boss_data->f34C) * 0x1E); - boss_data->f3BC = random_float_between(-0.333f, 0.333f); + boss_data->action_event_timer_frames = 0; + boss_data->action_frame_counter = + scale_game_frames(random_integer_below(3) * 0x5A + 0x14A); + boss_data->secondary_action_timer_frames = + scale_game_frames((6 - boss_data->encounter_phase) * 0x1E); + boss_data->ring_launch_lateral_coefficient = random_float_between(-0.333f, 0.333f); break; case DREK_BOSS_TARGET_SIDE_GROUND_POINTS: moby->f20 = 0x11; - if (moby->f53 != 11) { + if (moby->animation_sequence_index != 11) { blend_moby_animation(moby, 0xB, 0, scale_game_frames(0x14)); } - boss_data->f354 = scale_game_frames(10); - boss_data->f358 = scale_game_frames(600); + boss_data->action_event_timer_frames = scale_game_frames(10); + boss_data->action_frame_counter = scale_game_frames(600); break; default: moby->f20 = 0x10; - if (moby->f53 != 6) { + if (moby->animation_sequence_index != 6) { blend_moby_animation(moby, 6, 0, scale_game_frames(0x14)); } - boss_data->f354 = scale_game_frames(0xF); - boss_data->f358 = scale_game_frames(0x168); + boss_data->action_event_timer_frames = scale_game_frames(0xF); + boss_data->action_frame_counter = scale_game_frames(0x168); break; case DREK_BOSS_ACTION_REPOSITION_AND_AIM: moby->f20 = 0x12; - if (moby->f53 != 0) { + if (moby->animation_sequence_index != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0x14)); } { @@ -1032,73 +1065,79 @@ void drek_final_boss_robot_update(BossMoby *moby) { float w; qcopy(position_and_displacement_scratch, - D_L18_001600EC + boss_data->f280[i] * 0x80 + 0x30); + D_L18_001600EC + boss_data->aim_candidate_node_indices[i] * 0x80 + 0x30); w = fast_difference_between_rotations( - fast_arc_tan(boss_data->f3C0[0] - hero.motion.pos.f[0], - boss_data->f3C0[1] - hero.motion.pos.f[1]), - fast_arc_tan(boss_data->f3C0[0] - position_and_displacement_scratch[0], - boss_data->f3C0[1] - position_and_displacement_scratch[1])); + fast_arc_tan(boss_data->unbobbed_boss_position[0] - hero.motion.pos.f[0], + boss_data->unbobbed_boss_position[1] - hero.motion.pos.f[1]), + fast_arc_tan(boss_data->unbobbed_boss_position[0] - + position_and_displacement_scratch[0], + boss_data->unbobbed_boss_position[1] - + position_and_displacement_scratch[1])); if (best < w) { - boss_data->f3A8 = boss_data->f280[i]; + boss_data->selected_aim_node_index = + boss_data->aim_candidate_node_indices[i]; best = w; } } } - boss_data->f358 = scale_game_frames(900); - boss_data->f354 = scale_game_frames(0xB4); + boss_data->action_frame_counter = scale_game_frames(900); + boss_data->action_event_timer_frames = scale_game_frames(0xB4); break; case DREK_BOSS_FOLLOW_HERO: moby->f20 = 0x13; - if (moby->f53 != 1) { + if (moby->animation_sequence_index != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(0x14)); } if (vector_distance_xy(moby->f10, hero.motion.pos.f) < 16.0f) { - boss_data->f354 = scale_game_frames(0x5A); + boss_data->action_event_timer_frames = scale_game_frames(0x5A); } else { - boss_data->f354 = 0; + boss_data->action_event_timer_frames = 0; } - boss_data->f358 = scale_game_frames(600); - boss_data->f35C = scale_game_frames(600); - boss_data->f338 = create_class_274_ring_effect(moby, boss_data->f3C0, 5.8f); + boss_data->action_frame_counter = scale_game_frames(600); + boss_data->secondary_action_timer_frames = scale_game_frames(600); + boss_data->hero_follow_ring_effect_moby = + create_class_274_ring_effect(moby, boss_data->unbobbed_boss_position, 5.8f); break; } break; case DREK_BOSS_ACTION_REPOSITION_AND_AIM: aim = &moby->f40[2]; - desired_yaw = - fast_arc_tan(boss_data->f320[0] - moby->f10[0], boss_data->f320[1] - moby->f10[1]); + desired_yaw = fast_arc_tan(boss_data->stored_aim_target_position[0] - moby->f10[0], + boss_data->stored_aim_target_position[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); moby_point_position(moby, 0x13, position_and_displacement_scratch); *(BossTI *)position_displacement_direction_and_rotation_scratch = - *(BossTI *)boss_data->f320; + *(BossTI *)boss_data->stored_aim_target_position; set_drek_boss_relative_aim_yaw((char *)moby, - boss_data->f140, + boss_data->joint_19_animation_state, position_and_displacement_scratch, position_displacement_direction_and_rotation_scratch); - boss_data->f3D8 = -3.0f; - if ((moby->f70 & 2) != 0 && moby->f53 != 8) { + boss_data->bob_target_height_offset = -3.0f; + if ((moby->f70 & 2) != 0 && moby->animation_sequence_index != 8) { blend_moby_animation(moby, 8, 0, scale_game_frames(0x14)); } - if (boss_data->f354 != 0) { - if (boss_data->f33C == 0) { + if (boss_data->action_event_timer_frames != 0) { + if (boss_data->pending_electric_ball_moby == 0) { moby_point_position(moby, 1, position_displacement_direction_and_rotation_scratch); - boss_data->f33C = (unsigned char *)spawn_drek_boss_electric_ball( - moby, - position_displacement_direction_and_rotation_scratch, - scale_game_frames(*(int *)&l18_drek_boss_aimed_class_3d7_spawn_frame_count_gp)); - } else if (fast_dec_timer(&boss_data->f354) != 0) { - if (moby->f53 != 9) { + boss_data->pending_electric_ball_moby = + (unsigned char *)spawn_drek_boss_electric_ball( + moby, + position_displacement_direction_and_rotation_scratch, + scale_game_frames( + *(int *)&l18_drek_boss_aimed_class_3d7_spawn_frame_count_gp)); + } else if (fast_dec_timer(&boss_data->action_event_timer_frames) != 0) { + if (moby->animation_sequence_index != 9) { blend_moby_animation(moby, 9, 0, 0); } - boss_data->f354 = scale_game_frames(0x78); + boss_data->action_event_timer_frames = scale_game_frames(0x78); moby_point_position(moby, 1, position_displacement_direction_and_rotation_scratch); fast_vec_sub(position_direction_and_rotation_scratch, - boss_data->f320, + boss_data->stored_aim_target_position, position_displacement_direction_and_rotation_scratch); position_direction_and_rotation_scratch[2] = 2.0f; set_vector_length_xy(position_direction_and_rotation_scratch, @@ -1108,18 +1147,19 @@ void drek_final_boss_robot_update(BossMoby *moby) { position_direction_and_rotation_scratch, position_displacement_direction_and_rotation_scratch); refresh_moby_position_and_activate( - boss_data->f33C, + boss_data->pending_electric_ball_moby, position_displacement_direction_and_rotation_scratch, position_direction_and_rotation_scratch, 1, 1.0f); - boss_data->f33C = 0; - if (boss_data->f358 == 0) { - boss_data->f350 = 0xE; + boss_data->pending_electric_ball_moby = 0; + if (boss_data->action_frame_counter == 0) { + boss_data->previous_action_state = DREK_BOSS_ACTION_REPOSITION_AND_AIM; moby->f20 = 0xC; } } else { - float f = 1.0f - convert_integer_to_float(boss_data->f354) / scale_time(90.0f); + float f = 1.0f - convert_integer_to_float(boss_data->action_event_timer_frames) / + scale_time(90.0f); if (f > 1.0f) { f = 1.0f; @@ -1128,24 +1168,24 @@ void drek_final_boss_robot_update(BossMoby *moby) { } moby_point_position(moby, 1, position_displacement_direction_and_rotation_scratch); refresh_moby_position_and_activate( - boss_data->f33C, + boss_data->pending_electric_ball_moby, position_displacement_direction_and_rotation_scratch, - boss_data->f320, + boss_data->stored_aim_target_position, 0, f); - if (scale_game_frames(0xF) < boss_data->f354) { - qcopy(boss_data->f320, aim_target_moby->f10); + if (scale_game_frames(0xF) < boss_data->action_event_timer_frames) { + qcopy(boss_data->stored_aim_target_position, aim_target_moby->f10); } } } - fast_dec_timer(&boss_data->f358); + fast_dec_timer(&boss_data->action_frame_counter); break; case DREK_BOSS_TARGET_GROUND_POINTS: aim = &moby->f40[2]; desired_yaw = fast_arc_tan(aim_target_moby->f10[0] - moby->f10[0], aim_target_moby->f10[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, @@ -1153,11 +1193,11 @@ void drek_final_boss_robot_update(BossMoby *moby) { update_drek_boss_arena_circling_movement((struct Moby *)moby); if (is_value_within_interpolated_window((char *)moby, 1.0f) != 0 || is_value_within_interpolated_window((char *)moby, 16.0f) != 0) { - if (random_integer_below(5) != 0 || boss_data->fB4 == 2) { + if (random_integer_below(5) != 0 || boss_data->ground_target_center_mode == 2) { float a; float r; - if (boss_data->fB4 != 2) { + if (boss_data->ground_target_center_mode != 2) { qcopy(position_displacement_direction_and_rotation_scratch, boss_data->f70); } else { qcopy(position_displacement_direction_and_rotation_scratch, hero.motion.pos.f); @@ -1175,7 +1215,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { } if (hero.state.control_mode == 0xF) { qcopy(position_displacement_direction_and_rotation_scratch, - D_L18_001600EC + boss_data->f344 * 0x80 + 0x30); + D_L18_001600EC + boss_data->arena_center_node_index * 0x80 + 0x30); fast_vec_sub(position_and_displacement_scratch, position_and_displacement_scratch, position_displacement_direction_and_rotation_scratch); @@ -1190,7 +1230,8 @@ void drek_final_boss_robot_update(BossMoby *moby) { } position_and_displacement_scratch[2] = probe_ground_height(position_and_displacement_scratch, 0, 0.5f); - if (absolute_float(position_and_displacement_scratch[2] - boss_data->f3C0[2]) < 5.0f) { + if (absolute_float(position_and_displacement_scratch[2] - + boss_data->unbobbed_boss_position[2]) < 5.0f) { float a; float c; float e; @@ -1223,9 +1264,10 @@ void drek_final_boss_robot_update(BossMoby *moby) { (char *)moby, position_displacement_direction_and_rotation_scratch); } } - if (fast_dec_timer(&boss_data->f358) != 0 || - (boss_data->f390 > 25.0f && (float)boss_data->f34C < 4.0f)) { - boss_data->f350 = 0xF; + if (fast_dec_timer(&boss_data->action_frame_counter) != 0 || + (boss_data->rail_mode_damage_accumulated > 25.0f && + (float)boss_data->encounter_phase < 4.0f)) { + boss_data->previous_action_state = DREK_BOSS_TARGET_GROUND_POINTS; moby->f20 = 0xC; } break; @@ -1234,33 +1276,36 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(aim_target_moby->f10[0] - moby->f10[0], aim_target_moby->f10[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); update_drek_boss_arena_circling_movement((struct Moby *)moby); - if (boss_data->f354 < boss_data->f358 + boss_data->f35C) { - boss_data->f128 = fast_arc_tan(1.0f, boss_data->f3BC); + if (boss_data->action_event_timer_frames < + boss_data->action_frame_counter + boss_data->secondary_action_timer_frames) { + boss_data->lateral_launch_aim_angle = + fast_arc_tan(1.0f, boss_data->ring_launch_lateral_coefficient); } - if (moby->f53 == 2) { + if (moby->animation_sequence_index == 2) { if ((moby->f70 & 2) != 0) { blend_moby_animation(moby, 4, 0, scale_game_frames(0x14)); } - } else if (fast_dec_timer(&boss_data->f354) != 0 && boss_data->f358 != 0 && - moby->f53 != 4) { + } else if (fast_dec_timer(&boss_data->action_event_timer_frames) != 0 && + boss_data->action_frame_counter != 0 && moby->animation_sequence_index != 4) { blend_moby_animation(moby, 4, 0, scale_game_frames(0x14)); } - if (moby->f53 == 4) { + if (moby->animation_sequence_index == 4) { if (is_value_within_interpolated_window((char *)moby, 1.0f) != 0) { float f; - boss_data->f354 = scale_game_frames(0x5A); - boss_data->f360 = scale_game_frames(300); + boss_data->action_event_timer_frames = scale_game_frames(0x5A); + boss_data->ring_launch_cooldown_frames = scale_game_frames(300); moby_point_position(moby, 0, position_and_displacement_scratch); qcopy(position_displacement_direction_and_rotation_scratch, moby->fC0); - fast_vec_normalize( - position_direction_and_rotation_scratch, moby->fD0, boss_data->f3BC); + fast_vec_normalize(position_direction_and_rotation_scratch, + moby->lateral_direction_vector, + boss_data->ring_launch_lateral_coefficient); fast_vec_add(position_displacement_direction_and_rotation_scratch, position_displacement_direction_and_rotation_scratch, position_direction_and_rotation_scratch); @@ -1281,15 +1326,16 @@ void drek_final_boss_robot_update(BossMoby *moby) { 64.0f, frame_time * 18.0f); spawn_drek_boss_firing_effects((char *)moby, position_and_displacement_scratch); - boss_data->f3BC = randf_sym(0.133f, 0.333f); - } else if ((moby->f70 & 2) != 0 && moby->f53 != 3) { + boss_data->ring_launch_lateral_coefficient = randf_sym(0.133f, 0.333f); + } else if ((moby->f70 & 2) != 0 && moby->animation_sequence_index != 3) { blend_moby_animation(moby, 3, 0, scale_game_frames(0x14)); } } - if (fast_dec_timer(&boss_data->f358) != 0 && fast_dec_timer(&boss_data->f35C) != 0) { - boss_data->f350 = 0xD; + if (fast_dec_timer(&boss_data->action_frame_counter) != 0 && + fast_dec_timer(&boss_data->secondary_action_timer_frames) != 0) { + boss_data->previous_action_state = DREK_BOSS_LAUNCH_FORWARD_WITH_LATERAL_OFFSET; moby->f20 = 0xC; - if (moby->f53 != 5) { + if (moby->animation_sequence_index != 5) { blend_moby_animation(moby, 5, 0, scale_game_frames(0x14)); } } @@ -1299,18 +1345,18 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); update_drek_boss_arena_circling_movement((struct Moby *)moby); - if (fast_dec_timer(&boss_data->f354) != 0) { + if (fast_dec_timer(&boss_data->action_event_timer_frames) != 0) { float a; float r; qcopy(position_and_displacement_scratch, - D_L18_001600EC + boss_data->f344 * 0x80 + 0x30); + D_L18_001600EC + boss_data->arena_center_node_index * 0x80 + 0x30); fast_vec_normalize( position_displacement_direction_and_rotation_scratch, moby->fC0, 3.0f); fast_vec_add(position_displacement_direction_and_rotation_scratch, @@ -1330,8 +1376,8 @@ void drek_final_boss_robot_update(BossMoby *moby) { position_direction_and_rotation_scratch[2] + 5.0f; position_direction_and_rotation_scratch[2] = probe_ground_height(position_direction_and_rotation_scratch, 0, 0.5f); - if (absolute_float(position_direction_and_rotation_scratch[2] - boss_data->f3C0[2]) < - 5.0f) { + if (absolute_float(position_direction_and_rotation_scratch[2] - + boss_data->unbobbed_boss_position[2]) < 5.0f) { float speed = vector_distance_xy(position_direction_and_rotation_scratch, position_displacement_direction_and_rotation_scratch) / @@ -1340,16 +1386,16 @@ void drek_final_boss_robot_update(BossMoby *moby) { launch_class_238_moby_from_list( (int)moby, - boss_data->f29C, + boss_data->class_238_launch_group_index, position_displacement_direction_and_rotation_scratch, position_direction_and_rotation_scratch, speed, truncate_float_to_s32(scale_time(w * 60.0f))); } - boss_data->f354 = scale_game_frames(0xF); + boss_data->action_event_timer_frames = scale_game_frames(0xF); } - if (fast_dec_timer(&boss_data->f358) != 0) { - boss_data->f350 = 0x10; + if (fast_dec_timer(&boss_data->action_frame_counter) != 0) { + boss_data->previous_action_state = DREK_BOSS_TARGET_RANDOM_ARENA_POINTS; moby->f20 = 0xC; } break; @@ -1360,51 +1406,54 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); update_drek_boss_arena_circling_movement((struct Moby *)moby); - if ((moby->f70 & 2) != 0 && moby->f53 != 12) { + if ((moby->f70 & 2) != 0 && moby->animation_sequence_index != 12) { blend_moby_animation(moby, 0xC, 0, scale_game_frames(0x14)); } - if ((moby->f53 == 12 && fast_dec_timer(&boss_data->f354) != 0) || - boss_data->f354 == scale_game_frames(0x1E)) { - float f = boss_data->f354 != 0 ? 4.3f : -4.3f; + if ((moby->animation_sequence_index == 12 && + fast_dec_timer(&boss_data->action_event_timer_frames) != 0) || + boss_data->action_event_timer_frames == scale_game_frames(0x1E)) { + float f = boss_data->action_event_timer_frames != 0 ? 4.3f : -4.3f; - fast_vec_normalize(position_and_displacement_scratch, moby->fD0, f); + fast_vec_normalize( + position_and_displacement_scratch, moby->lateral_direction_vector, f); fast_vec_add(position_and_displacement_scratch, position_and_displacement_scratch, - boss_data->f3C0); + boss_data->unbobbed_boss_position); position_and_displacement_scratch[2] = probe_ground_height(position_and_displacement_scratch, 0, 0.5f); - if (absolute_float(position_and_displacement_scratch[2] - boss_data->f3C0[2]) < 1.0f) { + if (absolute_float(position_and_displacement_scratch[2] - + boss_data->unbobbed_boss_position[2]) < 1.0f) { /* v1 is not written in this state; retail passes it all the same. */ float speed = vector_distance_xy(position_and_displacement_scratch, position_displacement_direction_and_rotation_scratch) / (float)scale_game_frames(0x3C); - if (launch_first_idle_group_class_0772_moby(boss_data->f210, + if (launch_first_idle_group_class_0772_moby(boss_data->gadgebot_group_index, position_and_displacement_scratch, position_and_displacement_scratch, speed) != 0 && - boss_data->f354 == 0) { - boss_data->f354 = scale_game_frames(0x3C); + boss_data->action_event_timer_frames == 0) { + boss_data->action_event_timer_frames = scale_game_frames(0x3C); } } } - n = count_group_gadgebots_not_in_state_8(boss_data->f210); - if (n >= 11 && scale_game_frames(0x3C) > boss_data->f354) { - boss_data->f354 = scale_game_frames(1000); - } else if (n < 3 && scale_game_frames(0x3C) < boss_data->f354) { - boss_data->f358 = 0; + n = count_group_gadgebots_not_in_state_8(boss_data->gadgebot_group_index); + if (n >= 11 && scale_game_frames(0x3C) > boss_data->action_event_timer_frames) { + boss_data->action_event_timer_frames = scale_game_frames(1000); + } else if (n < 3 && scale_game_frames(0x3C) < boss_data->action_event_timer_frames) { + boss_data->action_frame_counter = 0; } - if (fast_dec_timer(&boss_data->f358) != 0) { - boss_data->f350 = 0x11; + if (fast_dec_timer(&boss_data->action_frame_counter) != 0) { + boss_data->previous_action_state = DREK_BOSS_TARGET_SIDE_GROUND_POINTS; moby->f20 = 0xC; - if (moby->f53 != 13) { + if (moby->animation_sequence_index != 13) { blend_moby_animation(moby, 0xD, 0, scale_game_frames(0x14)); } } @@ -1417,21 +1466,23 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); - if (fast_dec_timer(&boss_data->f354) != 0) { + if (fast_dec_timer(&boss_data->action_event_timer_frames) != 0) { update_drek_boss_hero_follow_movement((char *)moby); } - refresh_ring_effect(boss_data->f338, boss_data->f3C0, 5.8f); - if (voice_is_playing(moby, boss_data->f3B0) == 0) { - boss_data->f3B0 = allocate_voice_for_target_entry(0xE, 4, (int)moby); + refresh_ring_effect( + boss_data->hero_follow_ring_effect_moby, boss_data->unbobbed_boss_position, 5.8f); + if (voice_is_playing(moby, boss_data->hero_follow_voice_slot) == 0) { + boss_data->hero_follow_voice_slot = allocate_voice_for_target_entry(0xE, 4, (int)moby); } fire = 0; - if (fast_dec_timer(&boss_data->f358) != 0 && - (hero.state.control_mode != 0xF || fast_dec_timer(&boss_data->f35C) != 0)) { + if (fast_dec_timer(&boss_data->action_frame_counter) != 0 && + (hero.state.control_mode != 0xF || + fast_dec_timer(&boss_data->secondary_action_timer_frames) != 0)) { fire = 1; } if (hero.state.control_mode == 0xF) { @@ -1451,7 +1502,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { fire = 1; } if (fire) { - int i = boss_data->f3B0; + int i = boss_data->hero_follow_voice_slot; if (i != -1) { char *e = ((char *)&voice_pool) + i * 0x70; @@ -1459,12 +1510,12 @@ void drek_final_boss_robot_update(BossMoby *moby) { release_voice_slot(i); } } - boss_data->f3B0 = -1; + boss_data->hero_follow_voice_slot = -1; moby->f20 = 0xC; - if (moby->f53 != 0) { + if (moby->animation_sequence_index != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(0x14)); } - boss_data->f350 = 0x13; + boss_data->previous_action_state = DREK_BOSS_FOLLOW_HERO; } break; } @@ -1473,43 +1524,43 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(boss_data->f70[0] - moby->f10[0], boss_data->f70[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); { /* Retail scales the index before it sets up the call. */ - int aim_node_byte_offset = boss_data->f3A8 * 0x80; + int aim_node_byte_offset = boss_data->selected_aim_node_index * 0x80; if (advance_drek_boss_planar_position_toward_target( (char *)moby, frame_time * 12.0f, D_L18_001600EC + aim_node_byte_offset + 0x30) != 0) { moby->f20 = 0xE; - if (moby->f53 != 7) { + if (moby->animation_sequence_index != 7) { blend_moby_animation(moby, 7, 0, scale_game_frames(0x14)); } - qcopy(boss_data->f320, aim_target_moby->f10); + qcopy(boss_data->stored_aim_target_position, aim_target_moby->f10); } } break; case DREK_BOSS_APPROACH_SELECTED_MOBY: aim = &moby->f40[2]; - desired_yaw = fast_arc_tan(boss_data->f330->f10[0] - moby->f10[0], - boss_data->f330->f10[1] - moby->f10[1]); + desired_yaw = fast_arc_tan(boss_data->selected_class_247_moby->f10[0] - moby->f10[0], + boss_data->selected_class_247_moby->f10[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); - moby_init_action_mode(boss_data->f330); + moby_init_action_mode(boss_data->selected_class_247_moby); if (advance_drek_boss_planar_position_toward_target( - (char *)moby, frame_time * 12.0f, boss_data->f330->f10) != 0) { + (char *)moby, frame_time * 12.0f, boss_data->selected_class_247_moby->f10) != 0) { int ticks; - switch (boss_data->f34C) { + switch (boss_data->encounter_phase) { case DREK_BOSS_PHASE_FIRST_ARENA_PATH: ticks = scale_game_frames(0xE10); break; @@ -1530,16 +1581,17 @@ void drek_final_boss_robot_update(BossMoby *moby) { ticks = scale_game_frames(600); break; } - request_thruster_pack_lock_red_wait(D_L18_0015FFD8 + boss_data->f21C * 0x100, + request_thruster_pack_lock_red_wait(D_L18_0015FFD8 + + boss_data->thruster_lock_moby_index * 0x100, scale_game_frames(ticks)); - boss_data->f354 = 0; - if (boss_data->f34C == 4) { + boss_data->action_event_timer_frames = 0; + if (boss_data->encounter_phase == DREK_BOSS_PHASE_BEFORE_MISSILE_GROUP) { moby->f20 = 0x14; } else { moby->f20 = 0xC; } - boss_data->f364 = 1; - boss_data->f34C = boss_data->f34C + 1; + boss_data->hero_follow_action_blocked = 1; + boss_data->encounter_phase = boss_data->encounter_phase + 1; } if (*(int *)&D_L18_00162390 != 0) { moby->f20 = 5; @@ -1552,15 +1604,15 @@ void drek_final_boss_robot_update(BossMoby *moby) { desired_yaw = fast_arc_tan(hero.motion.pos.f[0] - moby->f10[0], hero.motion.pos.f[1] - moby->f10[1]); approach_angle(aim, - &boss_data->f370, + &boss_data->yaw_approach_state, desired_yaw, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, frame_time * 6.2831855f); update_drek_boss_arena_circling_movement((struct Moby *)moby); - boss_data->f358 = boss_data->f358 + 1; + boss_data->action_frame_counter = boss_data->action_frame_counter + 1; n = scale_game_frames(0x14); - if (boss_data->f358 % n == 0) { + if (boss_data->action_frame_counter % n == 0) { float a = fast_add_rotations(moby->f40[2], random_float_between(-30.0f, 30.0f) * DEG_TO_RAD); @@ -1570,7 +1622,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { position_and_displacement_scratch[2] = random_float_between(3.0f, 8.0f); fast_vec_add(position_and_displacement_scratch, position_and_displacement_scratch, - boss_data->f3C0); + boss_data->unbobbed_boss_position); func_L00_0025F4A8_alt(moby, D_L18_0015F580, position_and_displacement_scratch, @@ -1590,8 +1642,8 @@ void drek_final_boss_robot_update(BossMoby *moby) { -1, 0); } - if (boss_data->f358 == scale_game_frames(0x78)) { - if (moby->f53 != 14) { + if (boss_data->action_frame_counter == scale_game_frames(0x78)) { + if (moby->animation_sequence_index != 14) { blend_moby_animation(moby, 0xE, 5, 1); } position_and_displacement_scratch[0] = fast_cos(moby->f40[2]) * 3.0f; @@ -1599,7 +1651,7 @@ void drek_final_boss_robot_update(BossMoby *moby) { position_and_displacement_scratch[2] = 6.0f; fast_vec_add(position_and_displacement_scratch, position_and_displacement_scratch, - boss_data->f3C0); + boss_data->unbobbed_boss_position); func_L00_0025F4A8_alt(moby, D_L18_0015F580, position_and_displacement_scratch, @@ -1619,51 +1671,53 @@ void drek_final_boss_robot_update(BossMoby *moby) { -1, 0); } - if (moby->f52 == moby->f53 && moby->f52 == 14 && + if (moby->f52 == moby->animation_sequence_index && moby->f52 == 14 && is_value_within_interpolated_window((char *)moby, 30.0f) != 0) { moby->f20 = 0x1B; - end_thruster_pack_lock_red_wait(D_L18_0015FFD8 + boss_data->f21C * 0x100); + end_thruster_pack_lock_red_wait(D_L18_0015FFD8 + + boss_data->thruster_lock_moby_index * 0x100); } break; } case DREK_BOSS_RUN_ENDING_SEQUENCE: - moby->f94 = 0; + moby->collision_data = 0; moby->f34 |= 0x41; moby->f34 &= 0xEFFF; - if (boss_data->f34C < 7) { + if (boss_data->encounter_phase < DREK_BOSS_PHASE_WAIT_FOR_ENDING_PLATFORM) { start_scene(3); - boss_data->f34C = 7; + boss_data->encounter_phase = DREK_BOSS_PHASE_WAIT_FOR_ENDING_PLATFORM; ((BossShared *)&D_L18_0016D260_c)->f46 = 1; { /* In locals: retail does not load them again after the first copy. */ char *recs = D_L18_001600EC; - int idx = boss_data->f294; + int idx = boss_data->scene_camera_node_index; qcopy(((BossShared *)&D_L18_0016D260_c)->f10, recs + idx * 0x80 + 0x30); qcopy(((BossShared *)&D_L18_0016D260_c)->f20, recs + idx * 0x80 + 0x70); } moby->f20 = 7; - boss_data->f39C = 0x1B; - } else if (boss_data->f34C == 7) { + boss_data->post_scene_resume_state = DREK_BOSS_RUN_ENDING_SEQUENCE; + } else if (boss_data->encounter_phase == DREK_BOSS_PHASE_WAIT_FOR_ENDING_PLATFORM) { if (((BossMoby *)hero.ground_moby) != 0 && hero.air_frames.s == 0 && - ((BossMoby *)hero.ground_moby)->fA6 == 0x247 && hero.state.current == 0x22) { - if (boss_data->f3AC == 0) { - boss_data->f3AC = 1; + ((BossMoby *)hero.ground_moby)->moby_class_id == 0x247 && + hero.state.current == 0x22) { + if (boss_data->ending_scene_4_delay_counter == 0) { + boss_data->ending_scene_4_delay_counter = 1; } - } else if (boss_data->f3AC == 0) { - set_thruster_pack_lock_green_list_fields(boss_data->f200); + } else if (boss_data->ending_scene_4_delay_counter == 0) { + set_thruster_pack_lock_green_list_fields(boss_data->class_247_group_index); } - if (boss_data->f3AC != 0) { - int n = boss_data->f3AC++; + if (boss_data->ending_scene_4_delay_counter != 0) { + int n = boss_data->ending_scene_4_delay_counter++; if (scale_game_frames(0x28) < n) { start_scene(4); - boss_data->f34C = 8; + boss_data->encounter_phase = DREK_BOSS_PHASE_MOUNT_JET_AND_START_SCENE_5; moby->f20 = 7; - boss_data->f39C = 0x1B; + boss_data->post_scene_resume_state = DREK_BOSS_RUN_ENDING_SEQUENCE; } } - } else if (boss_data->f34C == 8) { + } else if (boss_data->encounter_phase == DREK_BOSS_PHASE_MOUNT_JET_AND_START_SCENE_5) { *(OvlQuad *)position_and_displacement_scratch = 0; *(OvlQuad *)position_displacement_direction_and_rotation_scratch = 0; position_and_displacement_scratch[0] = 660.6f; @@ -1677,23 +1731,24 @@ void drek_final_boss_robot_update(BossMoby *moby) { 0, 0); start_scene(5); - boss_data->f34C = 9; - } else if (boss_data->f34C == 9 && D_L18_0015F5C4 == 0) { + boss_data->encounter_phase = DREK_BOSS_PHASE_WAIT_TO_START_SLIDESHOW; + } else if (boss_data->encounter_phase == DREK_BOSS_PHASE_WAIT_TO_START_SLIDESHOW && + D_L18_0015F5C4 == 0) { start_slideshow(); - boss_data->f34C = 10; + boss_data->encounter_phase = DREK_BOSS_PHASE_WAIT_TO_QUEUE_ENDING_MOVIE; } else { - int k = boss_data->f34C; + int k = boss_data->encounter_phase; if (k == 10 && D_L18_0015F5C4 == 0) { queue_movie_with_game_language(0xB); - boss_data->f34C = 0xB; + boss_data->encounter_phase = DREK_BOSS_PHASE_WAIT_FOR_ENDING_CLEANUP; } else if (k == 0xB && D_L18_0015F5C4 == 0) { *(int *)&l18_drek_boss_scene_2_started_gp = 0; *(int *)&D_L18_001623A0 = 0; pause_all_sounds(0x21); - mark_moby_for_removal(boss_data->f3A0); - if (boss_data->f3A4 != 0) { - mark_moby_for_removal(boss_data->f3A4); + mark_moby_for_removal(boss_data->boss_joint_glow_attachment_moby); + if (boss_data->big_head_attachment_moby != 0) { + mark_moby_for_removal(boss_data->big_head_attachment_moby); } mark_moby_for_removal(moby); return; @@ -1716,35 +1771,42 @@ void drek_final_boss_robot_update(BossMoby *moby) { 600000.0f, 0.0f); } - if (boss_data->f34C > 1) { + if (boss_data->encounter_phase > DREK_BOSS_PHASE_SECOND_ARENA_PATH) { hero.grind_look_moby = (struct Moby *)moby; } - qcopy(moby->f10, boss_data->f3C0); + qcopy(moby->f10, boss_data->unbobbed_boss_position); slow = 0.3f; fast = 0.03f; - boss_data->f3D4 = fast_add_rotations(boss_data->f3D4, frame_time * 3.1415927f); - aas_c(boss_data->f3D0 * fast_sin(boss_data->f3D4) + boss_data->f3D8, + boss_data->bob_cycle_angle = + fast_add_rotations(boss_data->bob_cycle_angle, frame_time * 3.1415927f); + aas_c(boss_data->bob_amplitude * fast_sin(boss_data->bob_cycle_angle) + + boss_data->bob_target_height_offset, frame_time_sq * 4.0f, frame_time_sq * 4.0f, frame_time * 4.0f, - &boss_data->f3DC, - &boss_data->f3E0); - moby->f10[2] = moby->f10[2] + boss_data->f3DC; - boss_data->f3D8 = 0.0f; + &boss_data->bob_height_displacement, + &boss_data->bob_interpolation_state); + moby->f10[2] = moby->f10[2] + boss_data->bob_height_displacement; + boss_data->bob_target_height_offset = 0.0f; update_joint_animation( (char *)moby, boss_data->fC0, 7, frame_scale_sq * fast, frame_scale_sq * slow); - update_joint_animation( - (char *)moby, boss_data->f140, 0x13, frame_scale_sq * fast, frame_scale_sq * slow); - boss_data->f3B4 = fast_add_rotations(boss_data->f3B4, frame_time * 3.4906585f); + update_joint_animation((char *)moby, + boss_data->joint_19_animation_state, + 0x13, + frame_scale_sq * fast, + frame_scale_sq * slow); + boss_data->tint_cycle_angle = + fast_add_rotations(boss_data->tint_cycle_angle, frame_time * 3.4906585f); { - int c = fast_tween_color(0x30C8C8C8, 0x1C393939, fast_sin(boss_data->f3B4) * 0.5f + 0.5f); + int c = fast_tween_color( + 0x30C8C8C8, 0x1C393939, fast_sin(boss_data->tint_cycle_angle) * 0.5f + 0.5f); int r = c & 0xFF; int g = (c >> 8) & 0xFF; int b = (c >> 16) & 0xFF; int a = (unsigned int)c >> 24; - moby->f90 = c; - boss_data->f3B8 = (a << 24) | ((b / 3) << 16) | (g << 8) | (r / 3); + moby->animated_tint_color = c; + boss_data->green_biased_joint_glow_color = (a << 24) | ((b / 3) << 16) | (g << 8) | (r / 3); } if (moby->f31 != 0) { add_draw_callback((void (*)(void))render_drek_boss_joint_glows, moby); @@ -1781,7 +1843,7 @@ typedef struct { char pad0[0x204]; int f204[3]; char pad210[0x18]; - int f228[2]; + int phase_transition_ground_node_indices[2]; int f230[4]; char pad240[0x10]; int f250[4]; @@ -2031,11 +2093,11 @@ void update_drek_boss_damage_and_phase_transitions(char *moby) { V50[1] += fast_sin(*(float *)(boss_data + 0x318)) * health_floor_or_transition_offset; V50[2] += 3.0f; - qcopy( - V90, - ((VendorNode_5e80 *)D_L18_001600EC)[((VendorStage_5e80 *)boss_data) - ->f228[*(int *)(boss_data + 0x34C) - 1]] - .pos); + qcopy(V90, + ((VendorNode_5e80 *)D_L18_001600EC)[((VendorStage_5e80 *)boss_data) + ->phase_transition_ground_node_indices + [*(int *)(boss_data + 0x34C) - 1]] + .pos); V90[2] += health_floor_or_transition_offset; V90[2] = probe_ground_height(V90, 0, 0.5f); qcopy(V60, V90); @@ -2775,9 +2837,9 @@ extern void draw_offset_textured_effect_quad(void *, int, float, float) __asm__( typedef struct { char pad0[0x3A0]; - void *p3A0; + void *attached_joint_glow_moby; char pad3A4[0x14]; - int p3B8; + int joint_glow_color; } L18Q; extern f32 D_L18_00162450_gp __asm__("D_L18_00162450") __attribute__((sda)); @@ -2812,12 +2874,12 @@ void render_drek_boss_joint_glows(struct Moby *moby) { attached_glow_color = fast_tween_color(*(int *)&D_L18_00162458_gp, *(int *)&D_L18_0016245C_gp, attached_glow_cycle_value * 0.5f + 0.5f); - moby_point_position(boss_vars->p3A0, 1, joint_world_position); + moby_point_position(boss_vars->attached_joint_glow_moby, 1, joint_world_position); draw_offset_textured_effect_quad(joint_world_position, attached_glow_color, *(float *)&D_L18_00162450_gp, *(float *)&D_L18_00162454_gp); - moby_point_position(boss_vars->p3A0, 2, joint_world_position); + moby_point_position(boss_vars->attached_joint_glow_moby, 2, joint_world_position); draw_offset_textured_effect_quad(joint_world_position, attached_glow_color, *(float *)&D_L18_00162450_gp, @@ -2851,7 +2913,8 @@ void render_drek_boss_joint_glows(struct Moby *moby) { } for (i = 0; i < 8; i++) { moby_point_position(moby, 11 + i, joint_world_position); - draw_offset_textured_effect_quad(joint_world_position, boss_vars->p3B8, 0.7f, 0.5f); + draw_offset_textured_effect_quad( + joint_world_position, boss_vars->joint_glow_color, 0.7f, 0.5f); } } diff --git a/src/overlays/l18/mobys/falling_moby_group.c b/src/overlays/l18/mobys/falling_moby_group.c index bbce54df35..37e0492137 100644 --- a/src/overlays/l18/mobys/falling_moby_group.c +++ b/src/overlays/l18/mobys/falling_moby_group.c @@ -60,22 +60,22 @@ typedef struct { typedef struct { int pad0; - int i4; - int i8; + int target_transform_record_index; + int fall_at_progress_threshold_enabled; char padC[4]; char v10[0x10]; char v20[0x10]; char pad30[0x20]; VEnt ent[15]; char pad320[0x10]; - float f330; - float f334; + float transform_progress; + float transform_progress_step; int cnt; char pad33C[4]; - float f340; - float f344; - int f348; - int f34C; + float fall_vertical_step; + float debris_spawn_random_bound; + int hero_has_stood_on_group; + int fall_countdown_frames; int f350; } VData; @@ -133,8 +133,8 @@ void falling_moby_group_update(struct Moby *moby) { if (*t++ < 0) break; } - moby_vars->f348 = 0; - moby_vars->f34C = scale_game_frames(30); + moby_vars->hero_has_stood_on_group = 0; + moby_vars->fall_countdown_frames = scale_game_frames(30); moby_vars->cnt = j; capture_linked_moby_relative_transforms(moby, (char *)moby_vars + 0x30, j); moby->state = FALLING_MOBY_GROUP_AWAIT_ACTIVATION; @@ -145,35 +145,37 @@ void falling_moby_group_update(struct Moby *moby) { int i; unsigned char *hero_ground_moby; if (group_transform_advance_enabled_gp != 0) { - if (moby_vars->f330 < 1.5f) { + if (moby_vars->transform_progress < 1.5f) { advance_accelerated_scalar(1.5f, initial_acceleration_step, initial_braking_step, initial_maximum_speed, - &moby_vars->f330, - &moby_vars->f334); + &moby_vars->transform_progress, + &moby_vars->transform_progress_step); } else { advance_accelerated_scalar(2.0f, later_acceleration_step, later_braking_step, later_maximum_speed, - &moby_vars->f330, - &moby_vars->f334); + &moby_vars->transform_progress, + &moby_vars->transform_progress_step); } } - if (moby_vars->f330 > group_transform_debris_start_progress_threshold_gp && - moby_vars->f344 == 0.0f) { - moby_vars->f344 = *(int *)&group_transform_debris_initial_random_bound_gp; + if (moby_vars->transform_progress > + group_transform_debris_start_progress_threshold_gp && + moby_vars->debris_spawn_random_bound == 0.0f) { + moby_vars->debris_spawn_random_bound = + *(int *)&group_transform_debris_initial_random_bound_gp; } - if (moby_vars->f330 > group_transform_fall_progress_threshold_gp && - moby_vars->i8 != 0) { + if (moby_vars->transform_progress > group_transform_fall_progress_threshold_gp && + moby_vars->fall_at_progress_threshold_enabled != 0) { moby->state = MOBY_FALL_AND_REMOVE; } hero_on_group_or_class_764_moby = 0; for (i = 0; i < moby_vars->cnt; i++) { unsigned char *group_moby = D_L18_0015FFD8 + (moby_vars->ent[i].idx << 8); if (hero.ground_moby == group_moby) { - moby_vars->f348 = 1; + moby_vars->hero_has_stood_on_group = 1; hero_on_group_or_class_764_moby = 1; break; } @@ -184,17 +186,17 @@ void falling_moby_group_update(struct Moby *moby) { if (s == 0x764) hero_on_group_or_class_764_moby = 1; } - if (moby_vars->f348 != 0 && hero_on_group_or_class_764_moby == 0 && + if (moby_vars->hero_has_stood_on_group != 0 && hero_on_group_or_class_764_moby == 0 && hero.air_frames.s == 0) { - if (fast_dec_timer(&moby_vars->f34C)) + if (fast_dec_timer(&moby_vars->fall_countdown_frames)) moby->state = MOBY_FALL_AND_REMOVE; } break; } case MOBY_FALL_AND_REMOVE: { float t = frame_time_sq * 5.0f; - moby->pos.z += moby_vars->f340; - moby_vars->f340 = moby_vars->f340 - t; + moby->pos.z += moby_vars->fall_vertical_step; + moby_vars->fall_vertical_step = moby_vars->fall_vertical_step - t; if (moby->pos.z < 20.0f) { int i; for (i = 0; i < moby_vars->cnt; i++) { @@ -209,21 +211,22 @@ void falling_moby_group_update(struct Moby *moby) { if ((unsigned char)(moby->state - 1) < 2) { lerp_vector(&moby->pos, moby_vars->v10, - D_L18_001600EC + (moby_vars->i4 << 7) + 0x30, - moby_vars->f330 * 0.5f); + D_L18_001600EC + (moby_vars->target_transform_record_index << 7) + 0x30, + moby_vars->transform_progress * 0.5f); lerp_vector(&moby->rot, moby_vars->v20, - D_L18_001600EC + (moby_vars->i4 << 7) + 0x70, - moby_vars->f330 * 0.5f); + D_L18_001600EC + (moby_vars->target_transform_record_index << 7) + 0x70, + moby_vars->transform_progress * 0.5f); } apply_linked_moby_relative_transforms(moby, (char *)moby_vars + 0x30, moby_vars->cnt); - if (moby_vars->f344 != 0.0f) { + if (moby_vars->debris_spawn_random_bound != 0.0f) { if (moby->state != MOBY_FALL_AND_REMOVE) { float debris_spawn_position[4]; float s, z, debris_spawn_angle; int debris_spawn_frames; - moby_vars->f344 = moby_vars->f344 + 0.25f; - if (random_integer_below(truncate_float_to_s32(moby_vars->f344)) == 0) { + moby_vars->debris_spawn_random_bound = moby_vars->debris_spawn_random_bound + 0.25f; + if (random_integer_below( + truncate_float_to_s32(moby_vars->debris_spawn_random_bound)) == 0) { s = random_float_between(-1.0471976f, 1.0471976f); debris_spawn_angle = fast_add_rotations(s, D_L18_001677D8); z = random_float_between(0.0f, 20.0f); diff --git a/src/overlays/l18/mobys/gadgebot.c b/src/overlays/l18/mobys/gadgebot.c index 3cfba0d785..3e1779816e 100644 --- a/src/overlays/l18/mobys/gadgebot.c +++ b/src/overlays/l18/mobys/gadgebot.c @@ -266,10 +266,10 @@ typedef struct { char pad68[8]; char fall[0x10]; /* 0x70 */ float unk80; - float unk84; + float death_fall_horizontal_speed_approach_step; float unk88; - float unk8C; - int unk90; + float death_fall_initial_vertical_speed; + int death_fall_collision_radius_fixed_point; int unk94; float unk98; char pad9C[0x11]; @@ -356,20 +356,25 @@ void update_gadgebot_damage_target_and_glow(struct Moby *moby) { moby->state = GADGEBOT_EXPLODE; } else { fall_setup_value_or_path_slot_address = 0x200; - sentry_vars->unk90 = fall_setup_value_or_path_slot_address; + sentry_vars->death_fall_collision_radius_fixed_point = + fall_setup_value_or_path_slot_address; sentry_vars->unk98 = 0.5f; sentry_vars->unk80 = gadgebot_death_fall_gravity_gp * frame_time_sq; - sentry_vars->unk84 = + sentry_vars->death_fall_horizontal_speed_approach_step = gadgebot_death_fall_horizontal_speed_approach_rate_gp * frame_time_sq; sentry_vars->unk88 = gadgebot_death_fall_base_horizontal_speed_gp * frame_time; - sentry_vars->unk8C = gadgebot_death_fall_base_vertical_speed_gp * frame_time; + sentry_vars->death_fall_initial_vertical_speed = + gadgebot_death_fall_base_vertical_speed_gp * frame_time; reaction_value_or_path_address = 0x29; sentry_vars->unk94 = reaction_value_or_path_address; sentry_vars->unkAD = 0; sentry_vars->unkBC = frame_time + frame_time; moby->flags &= ~0x1000; v.q = *(u128 *)(coll + 0x10); - trooper_knockback_arc(&v, &angle, &sentry_vars->unk88, &sentry_vars->unk8C); + trooper_knockback_arc(&v, + &angle, + &sentry_vars->unk88, + &sentry_vars->death_fall_initial_vertical_speed); trooper_start_knockback(moby, sentry_vars->fall, 3, 1, 0, angle); sentry_vars->unkC0 = 7.5f; sentry_vars->unkC4 = 15.0f; diff --git a/src/overlays/l18/mobys/rocket.c b/src/overlays/l18/mobys/rocket.c index ed68e25168..dce0f0ce94 100644 --- a/src/overlays/l18/mobys/rocket.c +++ b/src/overlays/l18/mobys/rocket.c @@ -29,7 +29,7 @@ extern int collision_line(void *, void *, int, void *, void *) __asm__("FUN_001e typedef struct { char pad0[0x24]; - float f24; + float configured_movement_rotation_z; float f28; int c; int lim; @@ -79,7 +79,7 @@ void rocket_moby_update(struct Moby *moby) { euler_rotation_basis(target_heading_basis, rotation_angles); transpose_rotation_matrix(aA0, target_heading_basis); clear_u64_value(rotation_angles); - rotation_angles[2] = moby_vars->f24; + rotation_angles[2] = moby_vars->configured_movement_rotation_z; rotation_angles[1] = moby_vars->f28; euler_rotation_basis(configured_rotation_basis, rotation_angles); transform_vector_by_basis(target_movement_step, target_movement_step, aA0); diff --git a/src/overlays/l18/mobys/rocket_tank.c b/src/overlays/l18/mobys/rocket_tank.c index 7fcb94f99c..62c43a54f9 100644 --- a/src/overlays/l18/mobys/rocket_tank.c +++ b/src/overlays/l18/mobys/rocket_tank.c @@ -50,15 +50,15 @@ extern char *create_moby(int) __asm__("FUN_0020c4f8"); typedef struct { char pad0[0xC0]; char buf[0x50]; - float f110; + float firing_yaw; float pad114; - float f118; + float firing_pitch; char pad11C[4]; - int w120; + int path_target_node_index; int w124; char pad128[8]; - float f130; - float f134; + float aim_vector_length_limit; + float aim_yaw_oscillation_phase; char *c138; char *c13c; } D1454; @@ -67,7 +67,7 @@ typedef struct { char pad0[0x20]; unsigned char state; char pad21[0x32]; - unsigned char b53; + unsigned char current_animation_index; char pad54[0x24]; D1454 *data; } M1454; @@ -93,6 +93,9 @@ void rocket_tank_update(M1454 *moby) { ROCKET_TANK_PATROLLING = 1, ROCKET_TANK_FIRING = 2 }; + enum { + ROCKET_TANK_AIM_YAW_OSCILLATION_INITIAL_PHASE = 0 + }; D1454 *tank_data = moby->data; update_rocket_tank_damage_and_aim(moby); switch (moby->state) { @@ -102,7 +105,7 @@ void rocket_tank_update(M1454 *moby) { *(unsigned char *)((char *)tank_data + 0x28) = 3; *(float *)((char *)tank_data + 0x20) = 6.0f; tank_data->w124 = scale_game_frames(240); - tank_data->w120 = 0; + tank_data->path_target_node_index = 0; if (tank_data->c138 == 0) { char *c = create_moby(0x14B); tank_data->c138 = c; @@ -143,7 +146,7 @@ void rocket_tank_update(M1454 *moby) { blend_moby_animation(tank_data->c13c, 0, 0, 0); update_entity(tank_data->c13c); } - if (moby->b53 != 1) { + if (moby->current_animation_index != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } moby->state = ROCKET_TANK_PATROLLING; @@ -151,9 +154,9 @@ void rocket_tank_update(M1454 *moby) { case ROCKET_TANK_PATROLLING: func_L18_002F9AB8_v(moby); if (*(int *)((char *)tank_data + 0xB4) != 2) { - tank_data->f134 = 0; - tank_data->f130 = 10.0f; - if (moby->b53 != 2) { + tank_data->aim_yaw_oscillation_phase = ROCKET_TANK_AIM_YAW_OSCILLATION_INITIAL_PHASE; + tank_data->aim_vector_length_limit = 10.0f; + if (moby->current_animation_index != 2) { blend_moby_animation(moby, 2, 0, scale_game_frames(20)); } moby->state = ROCKET_TANK_FIRING; @@ -161,8 +164,9 @@ void rocket_tank_update(M1454 *moby) { break; case ROCKET_TANK_FIRING: func_L18_002F9AB8_v(moby); - approach_value(&tank_data->f130, 30.0f, frame_time * 6.0f); - tank_data->f134 = fast_add_rotations(tank_data->f134, frame_time * 6.2831855f); + approach_value(&tank_data->aim_vector_length_limit, 30.0f, frame_time * 6.0f); + tank_data->aim_yaw_oscillation_phase = + fast_add_rotations(tank_data->aim_yaw_oscillation_phase, frame_time * 6.2831855f); if (is_value_within_interpolated_window((char *)moby, 4.0f) || is_value_within_interpolated_window((char *)moby, 10.0f)) { float firing_vector[4]; @@ -176,12 +180,12 @@ void rocket_tank_update(M1454 *moby) { firing_vector_scale = *(float *)&D_L18_0016247C; } firing_vector_scale *= frame_time; - firing_vector[0] = - fast_cos(tank_data->f110) * (fast_cos(tank_data->f118) * firing_vector_scale); - firing_vector[1] = - fast_sin(tank_data->f110) * (fast_cos(tank_data->f118) * firing_vector_scale); + firing_vector[0] = fast_cos(tank_data->firing_yaw) * + (fast_cos(tank_data->firing_pitch) * firing_vector_scale); + firing_vector[1] = fast_sin(tank_data->firing_yaw) * + (fast_cos(tank_data->firing_pitch) * firing_vector_scale); firing_vector[2] = 0; - firing_vector[2] = -fast_sin(tank_data->f118) * firing_vector_scale; + firing_vector[2] = -fast_sin(tank_data->firing_pitch) * firing_vector_scale; allocate_voice_for_target_entry(0, 0, (int)moby); emit_radial_particle_burst(moby, projectile_spawn_position, 0); if (vector_distance_xy((char *)moby + 0x10, &hero.motion.pos) > 10.0f) { @@ -191,7 +195,7 @@ void rocket_tank_update(M1454 *moby) { } } if (*(int *)((char *)tank_data + 0xB4) == 2) { - if (moby->b53 != 1) { + if (moby->current_animation_index != 1) { blend_moby_animation(moby, 1, 0, scale_game_frames(20)); } moby->state = ROCKET_TANK_PATROLLING; @@ -417,7 +421,7 @@ typedef struct RocketTankVars { s32 unk120; u8 pad_124[0x4]; f32 unk128; - f32 unk12C; + f32 path_movement_step_length; u8 pad_130[0x8]; char *unk138; char *unk13C; @@ -443,15 +447,16 @@ void update_rocket_tank_path_movement(struct Moby *moby) { if (fast_difference_between_rotations(path_target_yaw, moby->rot.z) > 0.2617994f) { target_movement_step = frame_time; } - approach_value(&moby_vars->unk12C, target_movement_step, frame_time_sq); + approach_value(&moby_vars->path_movement_step_length, target_movement_step, frame_time_sq); z = 0.0f; - fast_vec_normalize(movement_step, &moby->rot_row0, moby_vars->unk12C); + fast_vec_normalize(movement_step, &moby->rot_row0, moby_vars->path_movement_step_length); FUN_L00_00258830((int)moby, (int)movement_step, 0.5f, 0.5f, z, 0); if (fast_vec_dist(&moby->pos, path_target_position) < 1.0f) { int k = random_integer_below(*D_L18_001B0EB0[moby_vars->unk100] - 1) + 1; moby_vars->unk120 = (moby_vars->unk120 + k) % *D_L18_001B0EB0[moby_vars->unk100]; } - sc = moby_vars->unk12C / (*(float *)&rocket_tank_attached_moby_speed_reference_gp * frame_time); + sc = moby_vars->path_movement_step_length / + (*(float *)&rocket_tank_attached_moby_speed_reference_gp * frame_time); if (sc > 2.0f) sc = 2.0f; else if (sc < z) diff --git a/src/overlays/l18/mobys/thruster_pack_lock_green.c b/src/overlays/l18/mobys/thruster_pack_lock_green.c index 284f775660..00eb36ac14 100644 --- a/src/overlays/l18/mobys/thruster_pack_lock_green.c +++ b/src/overlays/l18/mobys/thruster_pack_lock_green.c @@ -34,16 +34,16 @@ typedef struct { typedef struct { char pad0[0x10]; float f10; - char *p14; - char *p18; - char *p1C; + char *aligned_lock_component; + char *opposed_lock_component; + char *origin_lock_component; float f20; float f24; float f28; - float f2C; - int i30; + float target_reset_timer; + int target_reset_timer_disabled; float f34; - int i38; + int conditional_removal_enabled; } L18E_q; extern char *D_L18_00174858_lui __asm__("D_L18_00174858") NOT_SDA; @@ -79,7 +79,7 @@ void thruster_pack_lock_green_update(char *moby) { MOBY(moby)->pos.z = probe_ground_height(moby + 0x10, 0, 0.5f); qcopy(moby_vars, moby + 0x10); if (D_L18_00174858_lui != 0) { - moby_vars->i38 = 1; + moby_vars->conditional_removal_enabled = 1; } { char *spawned_moby = create_moby(0x6EB); @@ -92,31 +92,31 @@ void thruster_pack_lock_green_update(char *moby) { qcopy(spawned_moby + 0x10, moby_vars); qcopy(spawned_moby + 0x40, moby + 0x40); update_entity(spawned_moby); - moby_vars->p1C = spawned_moby; + moby_vars->origin_lock_component = spawned_moby; } - moby_vars->p14 = create_moby(0x6F0); - moby_vars->p14[0x30] = 0x40; - *(short *)(moby_vars->p14 + 0x32) = 0x56; - moby_vars->p14[0x31] = 1; - *(float *)(moby_vars->p14 + 0x2C) = - (*(L18Cls_q **)(moby_vars->p14 + 0x24))->f24 * D_L18_00161998; + moby_vars->aligned_lock_component = create_moby(0x6F0); + moby_vars->aligned_lock_component[0x30] = 0x40; + *(short *)(moby_vars->aligned_lock_component + 0x32) = 0x56; + moby_vars->aligned_lock_component[0x31] = 1; + *(float *)(moby_vars->aligned_lock_component + 0x2C) = + (*(L18Cls_q **)(moby_vars->aligned_lock_component + 0x24))->f24 * D_L18_00161998; { - char *q = moby_vars->p14; + char *q = moby_vars->aligned_lock_component; qcopy(q + 0x40, moby + 0x40); update_entity(q); } - moby_vars->p18 = create_moby(0x6F0); - moby_vars->p18[0x30] = 0x40; - *(short *)(moby_vars->p18 + 0x32) = 0x40; - moby_vars->p18[0x31] = 1; - *(float *)(moby_vars->p18 + 0x2C) = - (*(L18Cls_q **)(moby_vars->p18 + 0x24))->f24 * D_L18_00161998; + moby_vars->opposed_lock_component = create_moby(0x6F0); + moby_vars->opposed_lock_component[0x30] = 0x40; + *(short *)(moby_vars->opposed_lock_component + 0x32) = 0x40; + moby_vars->opposed_lock_component[0x31] = 1; + *(float *)(moby_vars->opposed_lock_component + 0x2C) = + (*(L18Cls_q **)(moby_vars->opposed_lock_component + 0x24))->f24 * D_L18_00161998; { - char *q = moby_vars->p18; + char *q = moby_vars->opposed_lock_component; qcopy(q + 0x40, moby + 0x40); - *(float *)(moby_vars->p18 + 0x48) = + *(float *)(moby_vars->opposed_lock_component + 0x48) = fast_add_rotations(*(float *)(q + 0x48), 3.1415901f); - update_entity(moby_vars->p18); + update_entity(moby_vars->opposed_lock_component); } ((unsigned char *)moby)[0x20] = 1; { @@ -131,20 +131,21 @@ void thruster_pack_lock_green_update(char *moby) { case STATE_UPDATE_LOCK_COMPONENTS: { float v[4]; if (D_L18_0015F5C4_d == 2) { - if (moby_vars->i38 != 0) { + if (moby_vars->conditional_removal_enabled != 0) { if (D_L18_0016D290_lui == 3) { - if (moby_vars->p14 != 0) - mark_moby_for_removal(moby_vars->p14); - if (moby_vars->p18 != 0) - mark_moby_for_removal(moby_vars->p18); - if (moby_vars->p1C != 0) - mark_moby_for_removal(moby_vars->p1C); + if (moby_vars->aligned_lock_component != 0) + mark_moby_for_removal(moby_vars->aligned_lock_component); + if (moby_vars->opposed_lock_component != 0) + mark_moby_for_removal(moby_vars->opposed_lock_component); + if (moby_vars->origin_lock_component != 0) + mark_moby_for_removal(moby_vars->origin_lock_component); mark_moby_for_removal(moby); } } } if (moby_vars->f24 != 0.0f) { - if ((moby_vars->i30 == 0 && fast_dec_timer((int *)&moby_vars->f2C) == 2) || + if ((moby_vars->target_reset_timer_disabled == 0 && + fast_dec_timer((int *)&moby_vars->target_reset_timer) == 2) || (D_L18_0015F5C4_d == 2 && D_L18_0016D290_lui >= 4)) { allocate_voice_for_target_entry(0, 0, (int)moby); moby_vars->f24 = 0; @@ -190,19 +191,31 @@ void thruster_pack_lock_green_update(char *moby) { frame_time_sq * 4.0f, frame_time * 4.0f); } - if (moby_vars->p14 != 0) { - FUN_001f9bf8_q(moby_vars->p14 + 0x10, moby_vars->p14 + 0xD0, -moby_vars->f20); - FUN_001f9bf8_q(v, moby_vars->p14 + 0xE0, -moby_vars->f20 * 0.2f); - fast_vec_add(moby_vars->p14 + 0x10, moby_vars->p14 + 0x10, v); - fast_vec_add(moby_vars->p14 + 0x10, moby_vars->p14 + 0x10, moby_vars); - update_entity(moby_vars->p14); + if (moby_vars->aligned_lock_component != 0) { + FUN_001f9bf8_q(moby_vars->aligned_lock_component + 0x10, + moby_vars->aligned_lock_component + 0xD0, + -moby_vars->f20); + FUN_001f9bf8_q(v, moby_vars->aligned_lock_component + 0xE0, -moby_vars->f20 * 0.2f); + fast_vec_add(moby_vars->aligned_lock_component + 0x10, + moby_vars->aligned_lock_component + 0x10, + v); + fast_vec_add(moby_vars->aligned_lock_component + 0x10, + moby_vars->aligned_lock_component + 0x10, + moby_vars); + update_entity(moby_vars->aligned_lock_component); } - if (moby_vars->p18 != 0) { - FUN_001f9bf8_q(moby_vars->p18 + 0x10, moby_vars->p18 + 0xD0, -moby_vars->f20); - FUN_001f9bf8_q(v, moby_vars->p18 + 0xE0, -moby_vars->f20 * 0.2f); - fast_vec_add(moby_vars->p18 + 0x10, moby_vars->p18 + 0x10, v); - fast_vec_add(moby_vars->p18 + 0x10, moby_vars->p18 + 0x10, moby_vars); - update_entity(moby_vars->p18); + if (moby_vars->opposed_lock_component != 0) { + FUN_001f9bf8_q(moby_vars->opposed_lock_component + 0x10, + moby_vars->opposed_lock_component + 0xD0, + -moby_vars->f20); + FUN_001f9bf8_q(v, moby_vars->opposed_lock_component + 0xE0, -moby_vars->f20 * 0.2f); + fast_vec_add(moby_vars->opposed_lock_component + 0x10, + moby_vars->opposed_lock_component + 0x10, + v); + fast_vec_add(moby_vars->opposed_lock_component + 0x10, + moby_vars->opposed_lock_component + 0x10, + moby_vars); + update_entity(moby_vars->opposed_lock_component); } MOBY(moby)->pos.z = moby_vars->f10 + moby_vars->f34; } diff --git a/src/overlays/l18/mobys/thruster_pack_lock_red.c b/src/overlays/l18/mobys/thruster_pack_lock_red.c index 280dbaa98d..5a458f4020 100644 --- a/src/overlays/l18/mobys/thruster_pack_lock_red.c +++ b/src/overlays/l18/mobys/thruster_pack_lock_red.c @@ -222,7 +222,7 @@ int timer_frame_top __asm__("D_L18_00161A2C") = -5; int timer_frame_bottom __asm__("D_L18_00161A30") = 20; int timer_frame_left __asm__("D_L18_00161A34") = -50; int timer_frame_right __asm__("D_L18_00161A38") = 52; -int D_L18_00161A3C = 96; +int l18_timer_frame_alpha __asm__("D_L18_00161A3C") = 96; extern int fast_tween_color(int, int, float) __asm__("FUN_001fa6e0"); extern void font_print_center(int a, int b, int c, int d, int e) __asm__("FUN_001f6af0"); extern void font_print_center_large(int a, int b, int c, int d, int e) __asm__("FUN_001f6c20"); @@ -240,7 +240,7 @@ void draw_pulsing_timer_hud(struct Moby *moby) { timer_frame_bottom + timer_text_y, timer_frame_left + timer_text_x, timer_frame_right + timer_text_x, - D_L18_00161A3C); + l18_timer_frame_alpha); color_blend_factor = fast_sin(convert_integer_to_float(game_frame % 60) / 60.0f * 6.28318f) * 3.0f + 0.5f; if (color_blend_factor > 1.0f) { diff --git a/src/overlays/shared/audio/emitters/distance_emitter.c b/src/overlays/shared/audio/emitters/distance_emitter.c index 51f9982980..fe862ec356 100644 --- a/src/overlays/shared/audio/emitters/distance_emitter.c +++ b/src/overlays/shared/audio/emitters/distance_emitter.c @@ -11,22 +11,22 @@ typedef struct { s32 id; - s32 w4; - s32 w8; - s32 wC; + s32 repeat_delay_lower_bound; + s32 repeat_delay_upper_bound; + s32 repeat_delay_countdown; s32 snd; } S_2ed950; typedef struct { u8 p[0x74]; - u8 b74; + u8 is_active; u8 p2[0x8C - 0x75]; void *o; } E_2ed950; typedef struct { u8 p[0x18]; - u8 b18; + u8 use_voice_flag_4; u8 p2[7]; } T_2ed950; @@ -65,24 +65,26 @@ void update_sound_emitter_playback_by_distance(u8 *sound_emitter) { E_2ed950 *e = ENT_2ed950(playback_state->snd); s32 fl = 0; s32 four = 4; - if (D_L00_0015F5F4_2ed950[playback_state->id].b18) + if (D_L00_0015F5F4_2ed950[playback_state->id].use_voice_flag_4) fl = four; - if (e->o == sound_emitter && e->b74) + if (e->o == sound_emitter && e->is_active) return; - if (!fast_dec_timer(&playback_state->wC)) + if (!fast_dec_timer(&playback_state->repeat_delay_countdown)) return; playback_state->snd = play_voice(playback_state->id, fl, sound_emitter, 0x400); - if (playback_state->w8 > 0) { - playback_state->wC = - FUN_001f96f8_2ed950(playback_state->w4 + - random_integer_below(playback_state->w8 - playback_state->w4)) * + if (playback_state->repeat_delay_upper_bound > 0) { + playback_state->repeat_delay_countdown = + FUN_001f96f8_2ed950( + playback_state->repeat_delay_lower_bound + + random_integer_below(playback_state->repeat_delay_upper_bound - + playback_state->repeat_delay_lower_bound)) * 60.0f; } } else if (playback_radius + 1.0f < reference_distance) { s32 voice_slot_index = playback_state->snd; if (voice_slot_index != -1) { E_2ed950 *e = ENT_2ed950(voice_slot_index); - if (e->o == sound_emitter && e->b74) + if (e->o == sound_emitter && e->is_active) release_voice_slot(voice_slot_index); } playback_state->snd = -1; diff --git a/src/overlays/shared/audio/voices/play_voice.c b/src/overlays/shared/audio/voices/play_voice.c index 6f2adca5ba..5a9a5349a3 100644 --- a/src/overlays/shared/audio/voices/play_voice.c +++ b/src/overlays/shared/audio/voices/play_voice.c @@ -61,9 +61,9 @@ int request_grouped_voice(int voice_group_index, voice_slot_index = allocate_voice_slot( D_L00_0015F5F4 + voice_definition_index * 32, voice_flags, voice_moby, 0, 0x400); if (voice_slot_index >= 0) { - char *rec = voice_pool + voice_slot_index * 0x70; - *(int *)(rec + 0x88) = voice_moby; - *(short *)(rec + 0x7E) = voice_definition_index; + char *allocated_voice_slot = voice_pool + voice_slot_index * 0x70; + *(int *)(allocated_voice_slot + 0x88) = voice_moby; + *(short *)(allocated_voice_slot + 0x7E) = voice_definition_index; } return voice_slot_index; } diff --git a/src/overlays/shared/camera/aim_volume_camera.c b/src/overlays/shared/camera/aim_volume_camera.c index 9ae168d050..bf6b23db39 100644 --- a/src/overlays/shared/camera/aim_volume_camera.c +++ b/src/overlays/shared/camera/aim_volume_camera.c @@ -49,12 +49,12 @@ extern u8 D_001413F4 __asm__("D_001413F4") NOT_SDA; s32 volume_camera_aim_active(struct UpdateCam *cam) __asm__("FUN_L00_002ed348"); s32 volume_camera_aim_active(struct UpdateCam *aim_camera_record) { - struct UpdateCam *rec = current_follow_cam; + struct UpdateCam *current_follow_camera_record = current_follow_cam; AimCameraParams *params = camera_descriptors[aim_camera_record->descriptor_index].params; - FollowCamState *state = FOLLOW_CAM_STATE(rec); + FollowCamState *state = FOLLOW_CAM_STATE(current_follow_camera_record); FollowCamTail *tail = &state->tail; FollowCamFlags *ctl = &state->tail.ctl; - if (rec->unk86 != 0) + if (current_follow_camera_record->unk86 != 0) return 0; if (params->only_in_mode_1 != 0 && D_001413F4 != 1) return 0; @@ -90,7 +90,7 @@ void volume_camera_aim(struct UpdateCam *aim_camera_record) { CameraVec gravity_offset; CameraVec level; AimCameraParams *params; - struct UpdateCam *rec; + struct UpdateCam *current_follow_camera_record; Vec4f *rec_pos; FollowCamState *rig; FollowCamState *state; @@ -141,9 +141,9 @@ void volume_camera_aim(struct UpdateCam *aim_camera_record) { params->offset_scale = params->height - params->distance * (fast_sin(angle) / fast_cos(angle)); } - rec = current_follow_cam; - rig = FOLLOW_CAM_STATE(rec); - rec_pos = &rec->pos; + current_follow_camera_record = current_follow_cam; + rig = FOLLOW_CAM_STATE(current_follow_camera_record); + rec_pos = ¤t_follow_camera_record->pos; follow = &rig->follow; tail = &rig->tail; snap = &rig->tail.snap; diff --git a/src/overlays/shared/camera/clip_volume_camera.c b/src/overlays/shared/camera/clip_volume_camera.c index 505c1d8c1a..999e340d97 100644 --- a/src/overlays/shared/camera/clip_volume_camera.c +++ b/src/overlays/shared/camera/clip_volume_camera.c @@ -107,7 +107,7 @@ int evaluate_clip_volume_candidate(char *candidate_object, int evaluate_clip_volume_candidate(char *candidate_object, char *comparison_object) { char *candidate_level_table_entry = (char *)(D_L03_0015EF50 + (*(short *)(candidate_object + 0x84) << 5)); - char *sub = *(char **)(candidate_level_table_entry + 0x1C); + char *candidate_clip_volume_subrecord = *(char **)(candidate_level_table_entry + 0x1C); char *global_state_base; int five; if (*(int *)(candidate_object + 0x74) != 4) @@ -116,8 +116,10 @@ int evaluate_clip_volume_candidate(char *candidate_object, char *comparison_obje !(*(unsigned char *)(candidate_object + 0x7C) > *(unsigned char *)(comparison_object + 0x7C))) return 0; - if (is_point_inside_clip_volume(D_0013E533 + 0xE9D, *(int *)(sub + 0xC)) != 0) { - if (is_point_inside_clip_volume(D_L03_00166EC0, *(int *)(sub + 0xC)) != 0) + if (is_point_inside_clip_volume(D_0013E533 + 0xE9D, + *(int *)(candidate_clip_volume_subrecord + 0xC)) != 0) { + if (is_point_inside_clip_volume(D_L03_00166EC0, + *(int *)(candidate_clip_volume_subrecord + 0xC)) != 0) return 1; global_state_base = D_L03_00166EC0 - 0x140; five = *(int *)(global_state_base + 0x180); @@ -135,9 +137,10 @@ void set_transform_state_three_when_outside_clip_volume(char *moby) __asm__("FUN void set_transform_state_three_when_outside_clip_volume(char *moby) { char *level_table_entry = (char *)(D_L03_0015EF50 + (*(short *)(moby + 0x84) << 5)); - char *sub = *(char **)(level_table_entry + 0x1C); + char *clip_volume_subrecord = *(char **)(level_table_entry + 0x1C); if (*(int *)(moby + 0x74) == 4) { - if (is_point_inside_clip_volume(D_0013E533 + 0xE9D, *(int *)(sub + 0xC)) == 0) { + if (is_point_inside_clip_volume(D_0013E533 + 0xE9D, + *(int *)(clip_volume_subrecord + 0xC)) == 0) { *(short *)(moby + 0x7E) = 3; } } diff --git a/src/overlays/shared/camera/follow_camera_set_distance.c b/src/overlays/shared/camera/follow_camera_set_distance.c index 13581822eb..8da9756ed3 100644 --- a/src/overlays/shared/camera/follow_camera_set_distance.c +++ b/src/overlays/shared/camera/follow_camera_set_distance.c @@ -28,12 +28,12 @@ typedef struct { typedef struct { char pad00[0x220]; - u32 f220; + u32 selected_volume_object; } C842e83c0; typedef struct { char pad00[0x84]; - short f84; + short camera_descriptor_index; } O842e83c0; typedef struct { @@ -87,18 +87,26 @@ int try_select_follow_camera_volume(int candidate_object, int unused) { return -1; } camera_state = (C842e83c0 *)(u32)((B2842e83c0 *)current_camera)->f70; - if (camera_state->f220 == 0) { - camera_state->f220 = candidate_object; + if (camera_state->selected_volume_object == 0) { + camera_state->selected_volume_object = candidate_object; return 1; } - if (camera_state->f220 == candidate_object) { + if (camera_state->selected_volume_object == candidate_object) { return 1; } tab = (u32)D_L00_0015EF50; - x = *(u8 *)(*(u32 *)(tab + ((O842e83c0 *)(u32)camera_state->f220)->f84 * 0x20 + 0x1C) + 0x1C); - y = *(u8 *)(*(u32 *)(tab + ((O842e83c0 *)(u32)candidate_object)->f84 * 0x20 + 0x1C) + 0x1C); + x = *(u8 *)(*(u32 *)(tab + + ((O842e83c0 *)(u32)camera_state->selected_volume_object) + ->camera_descriptor_index * + 0x20 + + 0x1C) + + 0x1C); + y = *(u8 *)(*(u32 *)(tab + + ((O842e83c0 *)(u32)candidate_object)->camera_descriptor_index * 0x20 + + 0x1C) + + 0x1C); if (x < y) { - camera_state->f220 = candidate_object; + camera_state->selected_volume_object = candidate_object; return 1; } return 0; diff --git a/src/overlays/shared/camera/follow_camera_setup.c b/src/overlays/shared/camera/follow_camera_setup.c index 1d78481a9c..a3918d09bb 100644 --- a/src/overlays/shared/camera/follow_camera_setup.c +++ b/src/overlays/shared/camera/follow_camera_setup.c @@ -49,7 +49,7 @@ typedef struct { char padB8[0x1E]; unsigned char unkD6; char padD7[3]; - short unkDA; + short target_height_override_pending; float unkDC; float unkE0; float unkE4; @@ -154,7 +154,7 @@ void follow_camera_approach(unsigned char *moby) { ((CamOrbit *)orbit)->unk40 = 0; ((CamOrbit *)orbit)->unk4C = 0; ((CamOrbit *)orbit)->unk58 = ((CamOrbit *)default_orbit)->unk2C; - ((CamTarget *)target)->unkDA = 0; + ((CamTarget *)target)->target_height_override_pending = 0; ((CamTarget *)target)->unkB4 = 0; (*(Cam_2e5e38 **)(moby + 0x70))->unk10 = 1; (*(Cam_2e5e38 **)(moby + 0x70))->unk22 = 0; @@ -197,7 +197,7 @@ typedef struct { s16 h14; s16 h16; u8 pad1[0xF0 - 0x18]; - f32 fF0; + f32 target_offset_scale; } M_2e6000; typedef struct { @@ -209,14 +209,14 @@ typedef struct { u8 pad0[0x10]; void (*fn)(void); u8 pad1[0x25C - 0x14]; - u8 *p25C; - s32 i260; + u8 *angle_blend_target; + s32 angle_blend_ramp_frames; u8 pad2[0x380 - 0x264]; } A_2e6000; typedef struct { u8 pad[0x2000]; - s32 i2000; + s32 hero_moby; } L_2e6000; #include "rnc/overlay/shared/camera/level_camera.h" @@ -278,7 +278,7 @@ void follow_camera_apply_overrides(O_2e6000 *camera_moby) { follow_camera_start_slide(); } if (hero.state.control_mode == 0x11) { - camera_moby->m->fF0 = 0.25f; + camera_moby->m->target_offset_scale = 0.25f; follow_camera_set_height(0.5f, 0.003f); } if (hero.state.control_mode == 5) { @@ -295,7 +295,7 @@ void follow_camera_apply_overrides(O_2e6000 *camera_moby) { } } if (hero.state.control_mode == 0x10) - camera_moby->m->fF0 = 0.25f; + camera_moby->m->target_offset_scale = 0.25f; if (hero.vehicle_mode == HERO_VEHICLE_MODE_CLANK) { if (camera_override_state->i0 == 0) { q = (S40 *)((u8 *)camera_moby->m + 0x40); @@ -327,27 +327,27 @@ void follow_camera_apply_overrides(O_2e6000 *camera_moby) { if (x->fn != 0) x->fn(); player_camera_state = (A_2e6000 *)&l00_camera; - if (player_camera_state->p25C != 0 && camera_override_state->i10 < 2) { - if ((s8)player_camera_state->p25C[0x20] < 0) { - player_camera_state->p25C = 0; + if (player_camera_state->angle_blend_target != 0 && camera_override_state->i10 < 2) { + if ((s8)player_camera_state->angle_blend_target[0x20] < 0) { + player_camera_state->angle_blend_target = 0; } else { if (0.3f <= absolute_float(controller_state.analog[0]) || 0.3f <= absolute_float(controller_state.analog[1])) { - player_camera_state->i260 = 0; + player_camera_state->angle_blend_ramp_frames = 0; } x = (A_2e6000 *)&l00_camera; - x->i260++; - if (scale_game_frames(400) < x->i260) - x->i260 = scale_game_frames(400); - rotation_or_blend_value = convert_integer_to_float(x->i260) / + x->angle_blend_ramp_frames++; + if (scale_game_frames(400) < x->angle_blend_ramp_frames) + x->angle_blend_ramp_frames = scale_game_frames(400); + rotation_or_blend_value = convert_integer_to_float(x->angle_blend_ramp_frames) / convert_integer_to_float(scale_game_frames(400)); set_follow_camera_angle_blend_from_position( - x->p25C + 0x10, rotation_or_blend_value * 0.20943952f, 0.0f); + x->angle_blend_target + 0x10, rotation_or_blend_value * 0.20943952f, 0.0f); } } camera_override_state->i10 = 0; nearby_moby_count = - collect_mobies_in_sphere(&D_0013F3D0_2e6000, 1, D_0013F3D0_2e6000.i2000, 0, 15.0f); + collect_mobies_in_sphere(&D_0013F3D0_2e6000, 1, D_0013F3D0_2e6000.hero_moby, 0, 15.0f); if (nearby_moby_count > 0) { lp = D_L00_00177F00; for (i = 0; i < nearby_moby_count; lp++, i++) { @@ -608,7 +608,7 @@ typedef struct CamE { typedef struct CamA { float pos[4]; /* 0x00 */ char pad10[0x40]; - float f50[4]; /* 0x50 */ + float orbit_origin_position[4]; /* 0x50 */ char pad60[0x50]; float fB0; /* 0xB0 */ int iB4; /* 0xB4 */ @@ -631,24 +631,24 @@ typedef struct CamA { } CamA; typedef struct CamB { - float v0[4]; /* 0x00 */ - float v10[4]; /* 0x10 */ - int i20; /* 0x20 */ - int i24; /* 0x24 */ - int i28; /* 0x28 */ - float f2C; /* 0x2C */ - float f30; /* 0x30 */ - int i34; /* 0x34 */ - int i38; /* 0x38 */ - short h3C; /* 0x3C */ - short h3E; /* 0x3E */ + float v0[4]; /* 0x00 */ + float v10[4]; /* 0x10 */ + int i20; /* 0x20 */ + int i24; /* 0x24 */ + int i28; /* 0x28 */ + float target_orbit_distance; /* 0x2C */ + float f30; /* 0x30 */ + int i34; /* 0x34 */ + int i38; /* 0x38 */ + short h3C; /* 0x3C */ + short h3E; /* 0x3E */ char pad40[4]; - int i44; /* 0x44 */ - float f48; /* 0x48 */ + int orbit_distance_interpolation_state; /* 0x44 */ + float f48; /* 0x48 */ char pad4C[4]; - int i50; /* 0x50 */ - float f54; /* 0x54 */ - float f58; /* 0x58 */ + int orbit_height_interpolation_state; /* 0x50 */ + float f54; /* 0x54 */ + float default_orbit_distance; /* 0x58 */ char pad5C[4]; } CamB; @@ -676,18 +676,18 @@ typedef struct Cam1A8 { typedef struct CamG { char pad0[0x10]; - float v10[4]; /* 0x10 */ - float v20[4]; /* 0x20 */ - float f30; /* 0x30 */ - short h34; /* 0x34 */ - short h36; /* 0x36 */ - short h38; /* 0x38 */ - short h3A; /* 0x3A */ - float f3C; /* 0x3C */ - float f40; /* 0x40 */ - float f44; /* 0x44 */ - int i48; /* 0x48 */ - int i4C; /* 0x4C */ + float v10[4]; /* 0x10 */ + float v20[4]; /* 0x20 */ + float f30; /* 0x30 */ + short h34; /* 0x34 */ + short h36; /* 0x36 */ + short h38; /* 0x38 */ + short h3A; /* 0x3A */ + float f3C; /* 0x3C */ + float f40; /* 0x40 */ + float f44; /* 0x44 */ + int i48; /* 0x48 */ + int consecutive_camera_obstruction_frames; /* 0x4C */ } CamG; typedef struct Cam220 { @@ -741,7 +741,7 @@ typedef struct Hero_2E8210 { char pad0[0x30C]; short h30C; /* 0x30C */ char pad30E[0x1D72]; - int i2080; /* 0x2080 */ + int followed_hero_moby; /* 0x2080 */ } Hero_2E8210; extern int D_L00_00161D90 __attribute__((sda)); @@ -781,7 +781,7 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { a = &camera_moby->cam->a; qcopy(a->pos, D_0013F4D0_2E8210); a->fB0 = 1.5f; - a->iC0 = D_0013F450_2E8210.i2080; + a->iC0 = D_0013F450_2E8210.followed_hero_moby; a->bC4 = 0; a->bD6 = 0; a->fE0 = 0.2f; @@ -796,11 +796,11 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { a->iBC = 0; b = &camera_moby->cam->b; - b->f2C = 4.64f; + b->target_orbit_distance = 4.64f; b->f48 = 0.003f; b->f54 = 0.003f; b->f30 = 2.0f; - b->f58 = 4.64f; + b->default_orbit_distance = 4.64f; b->i34 = 0; b->i38 = 0; b->i28 = 0; @@ -808,8 +808,8 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { b->i24 = 0; b->h3C = 0; b->h3E = 0; - b->i44 = 0; - b->i50 = 0; + b->orbit_distance_interpolation_state = 0; + b->orbit_height_interpolation_state = 0; camera_state = camera_moby->cam; camera_state->h10 = 1; @@ -855,7 +855,7 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { ((Cam220 *)camera_override_state)->i10 = 0; ((Cam220 *)camera_override_state)->h4 = 0; ((Cam220 *)camera_override_state)->h6 = 0; - ((Cam220 *)camera_override_state)->f8 = b->f2C; + ((Cam220 *)camera_override_state)->f8 = b->target_orbit_distance; ((Cam220 *)camera_override_state)->fC = D_L00_00161D1C_gp; camera_state_base = camera_moby->cam; @@ -865,7 +865,7 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { g->h3A = 0; g->h36 = 0; g->h38 = 0; - g->i4C = 0; + g->consecutive_camera_obstruction_frames = 0; g->h34 = r; g->f44 = l00_follow_camera_collision_probe_step_growth_factor; g->f3C = l00_follow_camera_collision_probe_scale; @@ -891,13 +891,13 @@ void follow_camera_setup(Moby_2E8210 *camera_moby) { follow_camera_reset(camera_moby); rebuild_follow_camera_pose(1); } - fast_vec_sub(b->v0, camera_moby->v30, a->f50); + fast_vec_sub(b->v0, camera_moby->v30, a->orbit_origin_position); qcopy(b->v10, b->v0); qcopy(camera_state->pos, camera_moby->v30); qcopy(g->v20, camera_moby->v30); fast_vec_scale(v0, D_0013F6E0_2E8210, fast_vec_dot(b->v0, D_0013F6E0_2E8210)); fast_vec_sub(orbit_offset_remainder, b->v0, v0); - orbit_distance_shortfall = b->f2C - fast_vec_length(orbit_offset_remainder); + orbit_distance_shortfall = b->target_orbit_distance - fast_vec_length(orbit_offset_remainder); g->f30 = orbit_distance_shortfall; if (orbit_distance_shortfall < -0.1f) { g->h3A = 1; @@ -978,7 +978,7 @@ typedef struct X002e7318 { u8 pad[0x20]; V002e7318 m; u8 pad30[8]; - s16 s38; + s16 endpoint_collision_direction_class; u8 pad3a[0xe]; s32 i48; } X002e7318; @@ -992,14 +992,14 @@ typedef struct P002e7318 { typedef struct O002e7318 { u8 pad[0x70]; - u8 *p70; + u8 *follow_camera_rig_state; } O002e7318; typedef struct G002e7318 { u8 pad[0x30]; V002e7318 v40; u8 pad50[0x84]; - s32 i114; + s32 sphere_collision_excluded_moby; } G002e7318; extern G002e7318 D_L00_00166E10_c __asm__("D_L00_00166E10"); @@ -1012,7 +1012,7 @@ s32 resolve_follow_camera_endpoint_collisions(O002e7318 *camera_moby) __asm__("F s32 resolve_follow_camera_endpoint_collisions(O002e7318 *camera_moby) { V002e7318 candidate_camera_position; V002e7318 normalized_position_delta; - u8 *b = camera_moby->p70; + u8 *b = camera_moby->follow_camera_rig_state; X002e7318 *x = (X002e7318 *)(b + 0x1D0); u8 *camera_target_state = b + 0x40; u8 *camera_orbit_state = b + 0x130; @@ -1027,8 +1027,8 @@ s32 resolve_follow_camera_endpoint_collisions(O002e7318 *camera_moby) { G002e7318 *g = &D_L00_00166E10_c; fast_vec_add(&candidate_camera_position, b + 0x90, camera_orbit_state); - x->s38 = 2; - active_camera_state = (P002e7318 *)((O002e7318 **)g)[-4]->p70; + x->endpoint_collision_direction_class = 2; + active_camera_state = (P002e7318 *)((O002e7318 **)g)[-4]->follow_camera_rig_state; sphere_collision_flags = x->i48; collision_probe_radius = follow_cam_min_distance_gp + active_camera_state->c * active_camera_state->a * @@ -1042,30 +1042,30 @@ s32 resolve_follow_camera_endpoint_collisions(O002e7318 *camera_moby) { if (!coll_sphere(&candidate_camera_position, collision_probe_radius, sphere_collision_flags, - g->i114)) + g->sphere_collision_excluded_moby)) break; hb = 1; } - if (x->s38 != 0) { + if (x->endpoint_collision_direction_class != 0) { fast_vec_sub(&normalized_position_delta, &(*(V002e7318 *)&D_L00_00173E60), &candidate_camera_position); fast_vec_normalize(&normalized_position_delta, &normalized_position_delta, 1.0f); direction_alignment = fast_vec_dot(&g->v40, &normalized_position_delta); if (direction_alignment > 0.75f) - x->s38 = 1; + x->endpoint_collision_direction_class = 1; else if (direction_alignment < -0.75f) - x->s38 = -1; + x->endpoint_collision_direction_class = -1; else - x->s38 = 0; + x->endpoint_collision_direction_class = 0; } qcopy(&candidate_camera_position, &coll_hit_position); i++; } r = update_follow_camera_orbit_after_collision(camera_moby, &candidate_camera_position, ha, hb); fast_vec_add(&x->m, camera_target_state + 0x50, camera_orbit_state); - if (x->s38 == 2) - x->s38 = 0; + if (x->endpoint_collision_direction_class == 2) + x->endpoint_collision_direction_class = 0; return r; } @@ -1368,14 +1368,14 @@ typedef struct { u8 pad0[0x18]; u8 b18; u8 b19; - u16 h1A; + u16 source_moby_type_id; u8 pad1C[0x14]; } W_2e7d20; typedef struct { u8 pad0[0x80]; u8 pad80[0x2080 - 0x80]; - u8 *p2080; + u8 *hero_moby; s32 i2084; u8 pad2088[0x20A4 - 0x2088]; u8 b20A4; @@ -1391,7 +1391,7 @@ extern f32 follow_camera_minimum_retracted_orbit_distance_gp __asm__("D_L0 typedef struct { u8 pad[0x18]; - s32 p18; + s32 collision_hit_moby; s32 p1C; u8 v20[0x10]; } E40_2e7d20_t; @@ -1451,7 +1451,7 @@ void follow_camera_avoid_mobies(u8 *camera_moby) { } lerp_vector(&probe_center, x + 0x90, camera_tracking_state - 0x50, 0.5f); nearby_moby_count = - probe_world_sphere(&probe_center, 1, D_0013F350_lui.p2080, 0, probe_diameter * 0.5f); + probe_world_sphere(&probe_center, 1, D_0013F350_lui.hero_moby, 0, probe_diameter * 0.5f); if (nearby_moby_count > 0) { i = nearby_moby_count; j = 0; @@ -1558,25 +1558,27 @@ void follow_camera_avoid_mobies(u8 *camera_moby) { if (!collision_line((x + 0x90), &moby_offset_or_camera_endpoint, camera_collision_mask, - D_0013F350_lui.p2080, + D_0013F350_lui.hero_moby, 0)) { goto clear; } if (test_follow_camera_point_in_collision_volume((*(E40_2e7d20_t *)&D_L00_00173E40_lui).v20)) { goto clear; } - if ((*(E40_2e7d20_t *)&D_L00_00173E40_lui).p18 != 0 && - is_moby_in_class_range_500_to_540((*(E40_2e7d20_t *)&D_L00_00173E40_lui).p18)) { - fast_vec_sub( - &v20, (u8 *)(*(E40_2e7d20_t *)&D_L00_00173E40_lui).p18 + 0x10, g_debug_camera_lui); + if ((*(E40_2e7d20_t *)&D_L00_00173E40_lui).collision_hit_moby != 0 && + is_moby_in_class_range_500_to_540( + (*(E40_2e7d20_t *)&D_L00_00173E40_lui).collision_hit_moby)) { + fast_vec_sub(&v20, + (u8 *)(*(E40_2e7d20_t *)&D_L00_00173E40_lui).collision_hit_moby + 0x10, + g_debug_camera_lui); v20.i[2] = 0; fast_vec_normalize(&v20, &v20, 1.0f); v20.f[3] = 5627.9248046875f; - make_hit_descriptor(&hit_descriptor, D_0013F350_lui.p2080, 0x800000, &v20, 20.0f); + make_hit_descriptor(&hit_descriptor, D_0013F350_lui.hero_moby, 0x800000, &v20, 20.0f); hit_descriptor.b18 = 3; hit_descriptor.b19 = 3; - hit_descriptor.h1A = *(u16 *)(D_0013F350_lui.p2080 + 0xA6); - record_moby_hit((*(E40_2e7d20_t *)&D_L00_00173E40_lui).p18, &hit_descriptor); + hit_descriptor.source_moby_type_id = *(u16 *)(D_0013F350_lui.hero_moby + 0xA6); + record_moby_hit((*(E40_2e7d20_t *)&D_L00_00173E40_lui).collision_hit_moby, &hit_descriptor); } BI_2e7d20(0x4C)++; if (BI_2e7d20(0x4C) >= scale_game_frames(0x1E)) { diff --git a/src/overlays/shared/camera/follow_camera_springs.c b/src/overlays/shared/camera/follow_camera_springs.c index 70daee4200..9aa2d9d5eb 100644 --- a/src/overlays/shared/camera/follow_camera_springs.c +++ b/src/overlays/shared/camera/follow_camera_springs.c @@ -830,25 +830,30 @@ void compute_follow_camera_offset_target_up_projection(void *out_target_up_proje /* camera attach mode transitions: picks the next state from the player's state and arms its timers */ /* Migrated from rac1-decomp (src/overlays/shared/vendor_002E1660.c: func_L00_002E5DE0). */ -void FUN_L00_002e4930(char *camera) { +void update_follow_camera_attach_mode(char *camera) __asm__("FUN_L00_002e4930"); + +void update_follow_camera_attach_mode(char *camera) { + enum { + CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY = 0 + }; char *camera_state = *(char **)(camera + 0x70); CamAttach *attach_state = (CamAttach *)(camera_state + 0x40); char *timer_camera_state; float inv, x, y; int camera_timer_base_frames; - if (attach_state->state == 0) { + if (attach_state->state == CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY) { struct Hero *player = &hero; if (player->state.control_mode == 2) { attach_state->prev = attach_state->state; - attach_state->state = 1; + attach_state->state = CAM_ATTACH_HERO_POSITION_BASE; attach_state->timer = l00_follow_camera_ground_focus_exit_transition_frames_gp; attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); } else { struct Hero *current_player = &hero; if (current_player->state.current == 0xF && D_L00_00166EEC == 0.0f) { attach_state->prev = attach_state->state; - attach_state->state = 3; + attach_state->state = CAM_ATTACH_BLEND_TO_PROJECT_HERO_FOCUS_VELOCITY; attach_state->moveTimer = scale_game_frames( *(int *)&follow_camera_project_hero_focus_blend_base_frames_gp); attach_state->invMove = 1.0f / convert_integer_to_float(attach_state->moveTimer); @@ -864,14 +869,14 @@ void FUN_L00_002e4930(char *camera) { struct Hero *state_check_player = &hero; if (state_check_player->state.current == 0xC && D_L00_00166EEC == 0.0f) { attach_state->prev = attach_state->state; - attach_state->state = 8; + attach_state->state = CAM_ATTACH_HOLD_FOCUS_VELOCITY; attach_state->timer = follow_camera_hold_focus_transition_frames_gp; attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); } else { struct Hero *hero_state_player = &hero; if (hero_state_player->state.current == 0xB && D_L00_00166EEC == 0.0f) { attach_state->prev = attach_state->state; - attach_state->state = 6; + attach_state->state = CAM_ATTACH_BLEND_OUT_FOCUS_VELOCITY; attach_state->moveTimer = scale_game_frames(*(int *)&D_L00_00161D40_gp); attach_state->invMove = 1.0f / convert_integer_to_float(attach_state->moveTimer); @@ -889,7 +894,8 @@ void FUN_L00_002e4930(char *camera) { state_transition_player->state.current == 0xE) && D_L00_00166EEC == 0.0f) { attach_state->prev = attach_state->state; - attach_state->state = 5; + attach_state->state = + CAM_ATTACH_BLEND_FOCUS_VELOCITY_WITH_HOLD_TRANSITION; attach_state->moveTimer = scale_game_frames( *(int *)&follow_camera_hold_focus_blend_base_frames_gp); attach_state->invMove = @@ -908,7 +914,7 @@ void FUN_L00_002e4930(char *camera) { if (control_mode_player->state.control_mode == 4 && D_L00_00166EEC == 0.0f) { attach_state->prev = attach_state->state; - attach_state->state = 2; + attach_state->state = CAM_ATTACH_GROUND_AWARE_FOCUS_VELOCITY; attach_state->timer = follow_camera_ground_aware_focus_transition_frames_gp; attach_state->invTimer = @@ -921,10 +927,11 @@ void FUN_L00_002e4930(char *camera) { } return; } - if (attach_state->state != 9 && attach_state->state != 1 && camera_secondary_mode_lui == 0x14) { + if (attach_state->state != CAM_ATTACH_BLEND_PROJECTED_HERO_FOCUS_VELOCITY && + attach_state->state != CAM_ATTACH_HERO_POSITION_BASE && camera_secondary_mode_lui == 0x14) { float r; attach_state->prev = attach_state->state; - attach_state->state = 9; + attach_state->state = CAM_ATTACH_BLEND_PROJECTED_HERO_FOCUS_VELOCITY; attach_state->moveTimer = scale_game_frames(*(int *)&D_L00_00161D6C_gp); r = 1.0f / convert_integer_to_float(attach_state->moveTimer); y = *(float *)&follow_camera_projected_focus_blend_offset_gp; @@ -938,18 +945,19 @@ void FUN_L00_002e4930(char *camera) { qcopy(attach_state->v20, attach_state->v10); return; } - if ((attach_state->state == 1 || attach_state->state == 2) && D_001413DC != 4 && - D_001413DC != 2) { + if ((attach_state->state == CAM_ATTACH_HERO_POSITION_BASE || + attach_state->state == CAM_ATTACH_GROUND_AWARE_FOCUS_VELOCITY) && + D_001413DC != 4 && D_001413DC != 2) { attach_state->timer = 0; attach_state->invTimer = 1.0f; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; return; } - if (attach_state->state == 7) { + if (attach_state->state == CAM_ATTACH_BLEND_BACK_FOCUS_VELOCITY) { struct Hero *p = &hero; if (p->past_jump_apex == 0) { attach_state->prev = attach_state->state; - attach_state->state = 6; + attach_state->state = CAM_ATTACH_BLEND_OUT_FOCUS_VELOCITY; attach_state->moveTimer = scale_game_frames(*(int *)&D_L00_00161D40_gp); attach_state->invMove = 1.0f / convert_integer_to_float(attach_state->moveTimer); attach_state->timer = follow_camera_focus_blend_transition_frames_gp; @@ -964,32 +972,33 @@ void FUN_L00_002e4930(char *camera) { } if (p->state.control_mode == 2) { attach_state->prev = attach_state->state; - attach_state->state = 1; + attach_state->state = CAM_ATTACH_HERO_POSITION_BASE; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } } - if (attach_state->state == 4 && D_001413DC != 4) { + if (attach_state->state == CAM_ATTACH_PROJECT_HERO_FOCUS_VELOCITY && D_001413DC != 4) { if (D_001413DC == 2) { attach_state->prev = 4; - attach_state->state = 1; + attach_state->state = CAM_ATTACH_HERO_POSITION_BASE; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); } else { attach_state->prev = 4; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); } return; } - if (attach_state->state == 3 && camera_secondary_mode_lui == 0xB) { + if (attach_state->state == CAM_ATTACH_BLEND_TO_PROJECT_HERO_FOCUS_VELOCITY && + camera_secondary_mode_lui == 0xB) { attach_state->prev = attach_state->state; - attach_state->state = 6; + attach_state->state = CAM_ATTACH_BLEND_OUT_FOCUS_VELOCITY; attach_state->moveTimer = scale_game_frames(*(int *)&D_L00_00161D40_gp); attach_state->invMove = 1.0f / convert_integer_to_float(attach_state->moveTimer); attach_state->timer = follow_camera_focus_blend_transition_frames_gp; @@ -1002,50 +1011,54 @@ void FUN_L00_002e4930(char *camera) { qcopy(attach_state->v20, attach_state->v10); return; } - if (attach_state->state == 5 && camera_secondary_mode_lui == 0xC) { + if (attach_state->state == CAM_ATTACH_BLEND_FOCUS_VELOCITY_WITH_HOLD_TRANSITION && + camera_secondary_mode_lui == 0xC) { attach_state->prev = attach_state->state; - attach_state->state = 8; + attach_state->state = CAM_ATTACH_HOLD_FOCUS_VELOCITY; attach_state->timer = follow_camera_hold_focus_transition_frames_gp; attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if (attach_state->state == 8 && camera_secondary_mode_lui != 0xC) { + if (attach_state->state == CAM_ATTACH_HOLD_FOCUS_VELOCITY && camera_secondary_mode_lui != 0xC) { attach_state->prev = attach_state->state; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&follow_camera_hold_focus_exit_base_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if (attach_state->state == 6 && camera_secondary_mode_lui != 0xB) { + if (attach_state->state == CAM_ATTACH_BLEND_OUT_FOCUS_VELOCITY && + camera_secondary_mode_lui != 0xB) { attach_state->prev = attach_state->state; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if ((attach_state->state == 3 || attach_state->state == 5) && D_001413DC != 4) { + if ((attach_state->state == CAM_ATTACH_BLEND_TO_PROJECT_HERO_FOCUS_VELOCITY || + attach_state->state == CAM_ATTACH_BLEND_FOCUS_VELOCITY_WITH_HOLD_TRANSITION) && + D_001413DC != 4) { attach_state->prev = attach_state->state; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if (attach_state->state == 9) { + if (attach_state->state == CAM_ATTACH_BLEND_PROJECTED_HERO_FOCUS_VELOCITY) { struct Hero *p = &hero; if (p->state.control_mode == 2 || p->frames_off_ground.s >= scale_game_frames(0x37)) { goto to_one; } } - if (attach_state->state == 0xA) { + if (attach_state->state == CAM_ATTACH_CONTINUE_BLEND_PROJECTED_HERO_FOCUS_VELOCITY) { struct Hero *p = &hero; if (p->state.control_mode == 2 || p->frames_off_ground.s >= scale_game_frames(0x37)) { float r; to_one: attach_state->prev = attach_state->state; - attach_state->state = 1; + attach_state->state = CAM_ATTACH_HERO_POSITION_BASE; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); r = 1.0f / convert_integer_to_float(attach_state->timer); @@ -1057,24 +1070,27 @@ void FUN_L00_002e4930(char *camera) { return; } } - if (attach_state->state == 9 && camera_secondary_mode_lui != 0x14) { + if (attach_state->state == CAM_ATTACH_BLEND_PROJECTED_HERO_FOCUS_VELOCITY && + camera_secondary_mode_lui != 0x14) { attach_state->prev = attach_state->state; - attach_state->state = 0xA; + attach_state->state = CAM_ATTACH_CONTINUE_BLEND_PROJECTED_HERO_FOCUS_VELOCITY; attach_state->timer = follow_camera_continue_projected_focus_transition_frames_gp; attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if (attach_state->state == 0xA && FUN_001f9770_c2(&attach_state->moveTimer)) { + if (attach_state->state == CAM_ATTACH_CONTINUE_BLEND_PROJECTED_HERO_FOCUS_VELOCITY && + FUN_001f9770_c2(&attach_state->moveTimer)) { attach_state->prev = attach_state->state; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&l00_follow_camera_post_blend_focus_transition_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); return; } - if (attach_state->state == 5 && camera_secondary_mode_lui == 0x10) { + if (attach_state->state == CAM_ATTACH_BLEND_FOCUS_VELOCITY_WITH_HOLD_TRANSITION && + camera_secondary_mode_lui == 0x10) { attach_state->prev = attach_state->state; - attach_state->state = 0; + attach_state->state = CAM_ATTACH_DEFAULT_PROJECT_HERO_FOCUS_VELOCITY; attach_state->timer = scale_game_frames(*(int *)&follow_camera_hold_focus_exit_base_frames_gp); attach_state->invTimer = 1.0f / convert_integer_to_float(attach_state->timer); @@ -1083,7 +1099,10 @@ void FUN_L00_002e4930(char *camera) { /* per-frame state machine that eases a moby's attach pose toward the camera block's vector */ /* Ported from rac1-decomp (src/overlays/shared/vendor_002E1660.c: func_L00_002E6498), where it is exact; names translated to the US level program. */ -void FUN_L00_002e4fe8(char *camera, float *out_focus_velocity) { +void compute_follow_camera_focus_velocity(char *camera, + float *out_focus_velocity) __asm__("FUN_L00_002e4fe8"); + +void compute_follow_camera_focus_velocity(char *camera, float *out_focus_velocity) { float hero_position[4]; float target_position_or_up_offset[4]; char *camera_state; diff --git a/src/overlays/shared/camera/follow_camera_turn_and_pitch.c b/src/overlays/shared/camera/follow_camera_turn_and_pitch.c index 5aff84a313..ae5b70834b 100644 --- a/src/overlays/shared/camera/follow_camera_turn_and_pitch.c +++ b/src/overlays/shared/camera/follow_camera_turn_and_pitch.c @@ -18,7 +18,7 @@ typedef struct { unsigned char pad18[4]; float f1C; unsigned char pad20[4]; - float f24; + float fallback_pitch_angle; } S_2e89b0; extern float D_0013CA40_lui[] __asm__("D_0013CA40") NOT_SDA; @@ -65,7 +65,7 @@ void follow_camera_read_stick(char *camera_object, float *turn_input_out, float } if (turn_pitch_state->flags & 2) { *pitch_input_out = 0.0f; - *pitch_input_out = turn_pitch_state->f24 / 0.6981317f; + *pitch_input_out = turn_pitch_state->fallback_pitch_angle / 0.6981317f; } else { float raw_pitch_input = D_0013CA40_lui[1]; *pitch_input_out = -raw_pitch_input; @@ -73,7 +73,7 @@ void follow_camera_read_stick(char *camera_object, float *turn_input_out, float *pitch_input_out = raw_pitch_input; } if (*pitch_input_out == 0.0f) { - *pitch_input_out = turn_pitch_state->f24 / 0.6981317f; + *pitch_input_out = turn_pitch_state->fallback_pitch_angle / 0.6981317f; } } } diff --git a/src/overlays/shared/camera/follow_camera_update.c b/src/overlays/shared/camera/follow_camera_update.c index eb001a9f19..c42bc40a5d 100644 --- a/src/overlays/shared/camera/follow_camera_update.c +++ b/src/overlays/shared/camera/follow_camera_update.c @@ -10,9 +10,9 @@ typedef struct { char p0[0x80]; - float v80[4]; + float pull_back_alignment_vector[4]; char p1[0xA4 - 0x90]; - float fA4; + float pull_back_blend_input; } C_2e9518; typedef struct { @@ -452,14 +452,15 @@ void follow_camera_pull_back(char *camera_object, float *x, float *y) { float k, pull_back_target, interpolated_pull_back_value; if (pull_back_state->h6 == 0) { - if (pull_back_state->h4 != 0 && C->fA4 == 0.0f && + if (pull_back_state->h4 != 0 && C->pull_back_blend_input == 0.0f && fast_vec_dot(D_001413D0_lui + 0xC0, camera_object) <= -0.3f) { goto on; } - if (0.0001f < absolute_float(C->fA4) && fast_vec_dot(C->v80, camera_object) <= -0.3f) { + if (0.0001f < absolute_float(C->pull_back_blend_input) && + fast_vec_dot(C->pull_back_alignment_vector, camera_object) <= -0.3f) { on: pull_back_state->h4 = scale_game_frames(0x78); - k = C->fA4 * 14.2857f; + k = C->pull_back_blend_input * 14.2857f; if (1.0f < k) k = 1.0f; pull_back_target = D_001413F4_lui == 1 ? 4.0f : pull_back_state->fC; diff --git a/src/overlays/shared/camera/grindrail_camera.c b/src/overlays/shared/camera/grindrail_camera.c index 52ad041c74..eb480e9a95 100644 --- a/src/overlays/shared/camera/grindrail_camera.c +++ b/src/overlays/shared/camera/grindrail_camera.c @@ -620,7 +620,7 @@ void update_camera_mode_from_preset(CamUser *camera_user) { return; } } - if (camera_preset->kind == 3) { + if (camera_preset->kind == CAMERA_PRESET_KIND_GRINDRAIL_PATH) { camera_user->mode = 5; } else { camera_user->mode = 3; diff --git a/src/overlays/shared/camera/hero_aligned_camera.c b/src/overlays/shared/camera/hero_aligned_camera.c index 044d019663..8bf0216795 100644 --- a/src/overlays/shared/camera/hero_aligned_camera.c +++ b/src/overlays/shared/camera/hero_aligned_camera.c @@ -40,9 +40,9 @@ typedef struct { typedef struct { u8 p0[0x20]; - s16 h20; - s16 h22; - s32 i24; + s16 transition_eligible_update_count; + s16 transition_steering_latched; + s32 transition_angle_blend_timer; } Q_2ea488; typedef struct { @@ -52,11 +52,11 @@ typedef struct { typedef struct { u8 p0[0x98]; - f32 f98; + f32 transition_heading_angle; u8 p1[0x2080 - 0x9C]; - char *p2080; + char *hero_moby; u8 p2[0x2284 - 0x2084]; - s32 i2284; + s32 camera_mode_request; } P_2ea488; typedef struct { @@ -93,7 +93,7 @@ typedef struct { typedef struct { unsigned char pad0[0x7E]; - short s7E; + short selected_camera_mode; } A_2ea810; extern void FUN_001f9bf8_002e9cc0(void *, void *, float) __asm__("FUN_001f9bf8"); @@ -435,7 +435,7 @@ int camera_transition_update(u8 *transition_camera_record, char *mode_check_obje q = D_L00_0015EF50_2ea488[*(s16 *)(transition_camera_record + 0x84)].q; g = &P; - requested_camera_mode = g->i2284; + requested_camera_mode = g->camera_mode_request; if (requested_camera_mode == *(s16 *)(transition_camera_record + 0x86) || requested_camera_mode == CAMERA_REQUEST_BYPASS_MODE_MATCH) { active_transition_camera_record = D_L00_00166E00_lui; @@ -451,29 +451,29 @@ int camera_transition_update(u8 *transition_camera_record, char *mode_check_obje r = find_camera_collision_volume_for_point(&transition_vector_scratch, 0.25f); if (r && (*(s32 *)(r + 0x18) & 1)) return 0; - q->i24 = 0; - q->h22 = 1; - q->h20++; - if (q->h20 >= FUN_001f96f8_2ea488(7)) { + q->transition_angle_blend_timer = 0; + q->transition_steering_latched = 1; + q->transition_eligible_update_count++; + if (q->transition_eligible_update_count >= FUN_001f96f8_2ea488(7)) { if (*(s16 *)(active_transition_camera_record + 0x86) == 0) transition_camera_record[0x7C] = 5; return 1; } - transition_vector_scratch.f[0] = fast_cos(P.f98); - transition_vector_scratch.f[1] = fast_sin(P.f98); + transition_vector_scratch.f[0] = fast_cos(P.transition_heading_angle); + transition_vector_scratch.f[1] = fast_sin(P.transition_heading_angle); *(s32 *)&transition_vector_scratch.f[2] = 0; set_follow_camera_angle_blend_from_direction( &transition_vector_scratch, 0.06981316953897476f, transition_vector_scratch.f[2]); goto tail; off: - q->h20 = 0; - q->h22 = 0; + q->transition_eligible_update_count = 0; + q->transition_steering_latched = 0; goto tail; } - q->h20 = 0; - if (q->h22 == 0) + q->transition_eligible_update_count = 0; + if (q->transition_steering_latched == 0) goto tail; - q->h22 = 0; + q->transition_steering_latched = 0; b = D_L00_00166E10_2ea488; transition_camera_globals = b - 0x190; alignment_comparison_axis = b + 0x30; @@ -486,9 +486,9 @@ int camera_transition_update(u8 *transition_camera_record, char *mode_check_obje &transition_vector_scratch); FUN_001f9a68_2ea488(&transition_vector_scratch, alignment_comparison_axis, - FUN_001f9ab0_2ea488(alignment_comparison_axis, g->p2080 + 0xC0)); + FUN_001f9ab0_2ea488(alignment_comparison_axis, g->hero_moby + 0xC0)); FUN_001f9a28_2ea488( - &transition_hero_vector_residual, g->p2080 + 0xC0, &transition_vector_scratch); + &transition_hero_vector_residual, g->hero_moby + 0xC0, &transition_vector_scratch); transition_residual_length_product = FUN_001f9af0_2ea488(&transition_hero_vector_residual); if (transition_residual_length_product != 0.0f) { transition_residual_length_product *= @@ -503,12 +503,12 @@ int camera_transition_update(u8 *transition_camera_record, char *mode_check_obje return 0; } } - q->i24 = FUN_001f96f8_2ea488(30); + q->transition_angle_blend_timer = FUN_001f96f8_2ea488(30); tail: - if (q->i24) { - fast_dec_timer(&q->i24); - transition_vector_scratch.f[0] = fast_cos(P.f98); - transition_vector_scratch.f[1] = fast_sin(P.f98); + if (q->transition_angle_blend_timer) { + fast_dec_timer(&q->transition_angle_blend_timer); + transition_vector_scratch.f[0] = fast_cos(P.transition_heading_angle); + transition_vector_scratch.f[1] = fast_sin(P.transition_heading_angle); *(s32 *)&transition_vector_scratch.f[2] = 0; set_follow_camera_angle_blend_from_direction( &transition_vector_scratch, 0.13962633907794952f, transition_vector_scratch.f[2]); @@ -551,7 +551,7 @@ void select_camera_mode_by_hero_vector_alignment(A_2ea810 *camera_object) { } if (Q.unk270 == 0) { Q.unk273 = 0; - camera_object->s7E = 2; + camera_object->selected_camera_mode = 2; Q.unk294 = 0.018f; Q.unk288 = 0.018f; return; @@ -572,13 +572,13 @@ void select_camera_mode_by_hero_vector_alignment(A_2ea810 *camera_object) { residual_length_product); if (1.5707964f - dot_product_or_asin_result >= 1.3962634f) { Q.unk270 = 0; - camera_object->s7E = 4; + camera_object->selected_camera_mode = 4; return; } } } Q.unk273 = 0; - camera_object->s7E = 2; + camera_object->selected_camera_mode = 2; Q.unk294 = 0.018f; Q.unk288 = 0.018f; } diff --git a/src/overlays/shared/camera/orbit_camera.c b/src/overlays/shared/camera/orbit_camera.c index bf3bceac29..1ce53fa84a 100644 --- a/src/overlays/shared/camera/orbit_camera.c +++ b/src/overlays/shared/camera/orbit_camera.c @@ -15,21 +15,21 @@ typedef struct { u8 pad[0x28]; f32 f28; - f32 f2C; + f32 orbit_pitch_spring_stiffness; f32 f30; f32 f34; - f32 f38; - f32 f3C; + f32 view_yaw_offset_spring_stiffness; + f32 orbit_yaw_spring_damping; f32 f40; - f32 f44; - f32 f48; - f32 f4C; + f32 orbit_distance_spring_damping; + f32 view_pitch_offset_spring_damping; + f32 view_yaw_offset_spring_damping; u8 pad50[0x4C]; - s32 f9C; - f32 fA0; - f32 fA4; + s32 orbit_origin_snap_enabled; + f32 orbit_origin_spring_stiffness; + f32 orbit_origin_spring_damping; s32 fA8; - s32 fAC; + s32 view_roll_offset; u8 padB0[0x40]; s32 fF0; } Moby002eb3b0; @@ -38,7 +38,7 @@ typedef struct { u8 pad[0x70]; Moby002eb3b0 *m; u8 pad78[0xA]; - s16 f7E; + s16 camera_selection_mode; } S002eb3b0; typedef struct { @@ -135,26 +135,26 @@ void initialize_orbit_camera_state(S002eb3b0 *camera_object) { Moby002eb3b0 *m; camera_object->m->fF0 = 0; m = camera_object->m; - m->f9C = 0; + m->orbit_origin_snap_enabled = 0; m->fA8 = 0; - m->fAC = 0; - m->fA0 = 0.3f; - m->fA4 = 0.3f; - m->f48 = 0.99f; - m->f3C = 0.04f; + m->view_roll_offset = 0; + m->orbit_origin_spring_stiffness = 0.3f; + m->orbit_origin_spring_damping = 0.3f; + m->view_pitch_offset_spring_damping = 0.99f; + m->orbit_yaw_spring_damping = 0.04f; m->f40 = 0.04f; - m->f44 = 0.04f; - m->f4C = 0.04f; + m->orbit_distance_spring_damping = 0.04f; + m->view_yaw_offset_spring_damping = 0.04f; m->f28 = 0.07f; - m->f2C = 1.0f; + m->orbit_pitch_spring_stiffness = 1.0f; m->f30 = 0.07f; m->f34 = 1.0f; - m->f38 = 0.07f; + m->view_yaw_offset_spring_stiffness = 0.07f; zero_five_words((u8 *)m + 0x50); zero_five_words(m); clear_twelve_bytes((u8 *)m + 0x90); initialize_orbit_camera_pose(camera_object); - camera_object->f7E = 0; + camera_object->camera_selection_mode = 0; } void update_orbit_camera_pose(char *camera_object) __asm__("FUN_L00_002eb480"); diff --git a/src/overlays/shared/camera/path_flythrough_camera.c b/src/overlays/shared/camera/path_flythrough_camera.c index 863466ac94..1544f3522e 100644 --- a/src/overlays/shared/camera/path_flythrough_camera.c +++ b/src/overlays/shared/camera/path_flythrough_camera.c @@ -93,14 +93,15 @@ extern VendorView_5f18 l10_camera_view __asm__("D_L10_0016CEC0"); void initialize_path_camera(struct UpdateCam *path_camera) __asm__("FUN_L10_002f5b58"); void initialize_path_camera(struct UpdateCam *path_camera) { - char *rec = *(char **)(l10_descriptor_table + path_camera->descriptor_index * 32 + 0x1C); + char *path_camera_descriptor = + *(char **)(l10_descriptor_table + path_camera->descriptor_index * 32 + 0x1C); VendorCamRun_5f18 *run; VendorCamStops_5f18 *stops; f32 *fov; Vec4f *m1, *m2, *pos; char *saved; - rec[0x38] = 1; + path_camera_descriptor[0x38] = 1; run = (VendorCamRun_5f18 *)((char *)path_camera->saved_state + 0x40); run->seg = 0; run->t = 0.0f; @@ -108,7 +109,7 @@ void initialize_path_camera(struct UpdateCam *path_camera) { run->look_path_length = 0.0f; run->dist = 0.0f; run->started = 0; - run->timer = scale_game_frames(*(s16 *)(rec + 0x3A)); + run->timer = scale_game_frames(*(s16 *)(path_camera_descriptor + 0x3A)); stops = (VendorCamStops_5f18 *)((char *)path_camera->saved_state + 0x58); fov = stops->fov; { @@ -122,8 +123,8 @@ void initialize_path_camera(struct UpdateCam *path_camera) { m1 = (Vec4f *)&path_camera->m1; m2 = (Vec4f *)&path_camera->m2; stops->fov_end = fast_arc_tan(1.0f, l10_camera_view.tan_half_fov) * 2.0f; - if (*(int *)(rec + 0x20) >= 0) { - char *path = ((char *)l10_paths[*(int *)(rec + 0x20)]); + if (*(int *)(path_camera_descriptor + 0x20) >= 0) { + char *path = ((char *)l10_paths[*(int *)(path_camera_descriptor + 0x20)]); int i = 0; if (i < *(int *)path) { f32 *stop_fov = fov; @@ -156,13 +157,13 @@ void initialize_path_camera(struct UpdateCam *path_camera) { } } { - s16 frames = *(s16 *)(rec + 0x3A); + s16 frames = *(s16 *)(path_camera_descriptor + 0x3A); if (frames > 0) - *(f32 *)(rec + 0x3C) = + *(f32 *)(path_camera_descriptor + 0x3C) = run->path_length / convert_integer_to_float(scale_game_frames(frames)) * 60.0f; } - if (*(int *)(rec + 0x24) >= 0) { - char *path = ((char *)l10_paths[*(int *)(rec + 0x24)]); + if (*(int *)(path_camera_descriptor + 0x24) >= 0) { + char *path = ((char *)l10_paths[*(int *)(path_camera_descriptor + 0x24)]); int i; for (i = 0; i < *(int *)path; i++) { int offset = i * 16; @@ -188,7 +189,7 @@ void initialize_path_camera(struct UpdateCam *path_camera) { qcopy(m1, source + 0x10); qcopy(m2, source + 0x20); } - if (*(int *)(rec + 0x4C) == 0) + if (*(int *)(path_camera_descriptor + 0x4C) == 0) hero_set_state(0x72, 1); } @@ -211,30 +212,32 @@ void update_path_flythrough_camera(struct UpdateCam *cam) { f32 look_t; char *saved; VendorCamRun_5f18 *run; - char *rec; + char *flythrough_descriptor_record; VendorCamStops_5f18 *stops; char *path; int done; int i; saved = (char *)cam->saved_state; - rec = *(char **)(l10_descriptor_table + cam->descriptor_index * 32 + 0x1C); + flythrough_descriptor_record = + *(char **)(l10_descriptor_table + cam->descriptor_index * 32 + 0x1C); run = (VendorCamRun_5f18 *)(saved + 0x40); stops = (VendorCamStops_5f18 *)(saved + 0x58); if (run->started == 0) { l10_path_camera_transition_amount += 0.05f; if (l10_path_camera_transition_amount >= 1.0f) { - char *start_path = ((char *)l10_paths[*(int *)(rec + 0x20)]); - char *look_path = ((char *)l10_paths[*(int *)(rec + 0x24)]); + char *start_path = ((char *)l10_paths[*(int *)(flythrough_descriptor_record + 0x20)]); + char *look_path = ((char *)l10_paths[*(int *)(flythrough_descriptor_record + 0x24)]); l10_path_camera_transition_amount = 1.0f; l10_path_flythrough_active = 1; run->started = 1; qcopy(&cam->pos, start_path + 0x10); - if (*(int *)(rec + 0x28) >= 0) { + if (*(int *)(flythrough_descriptor_record + 0x28) >= 0) { struct Moby *anchor = - (struct Moby *)(D_L10_0015FFD8_5f18 + *(int *)(rec + 0x28) * 256); - float *ofs = (float *)(rec + 0x2C); + (struct Moby *)(D_L10_0015FFD8_5f18 + + *(int *)(flythrough_descriptor_record + 0x28) * 256); + float *ofs = (float *)(flythrough_descriptor_record + 0x2C); offset[0] = ofs[0]; offset[1] = ofs[1]; offset[2] = ofs[2]; @@ -262,14 +265,14 @@ void update_path_flythrough_camera(struct UpdateCam *cam) { ang = stops->fov_end * 0.5f; l10_camera_view.tan_half_fov = fast_sin(ang) / fast_cos(ang); update_view_context(); - *(u8 *)(rec + 0x39) = 1; + *(u8 *)(flythrough_descriptor_record + 0x39) = 1; D_L10_00167358 = 0.05f; cam->transition_state = 4; l10_path_flythrough_active = 0; - if (*(int *)(rec + 0x4C) == 0) + if (*(int *)(flythrough_descriptor_record + 0x4C) == 0) hero_set_state(0, 1); } - if (*(int *)(rec + 0x40) == 0) + if (*(int *)(flythrough_descriptor_record + 0x40) == 0) return; } else if (run->started == 3) { return; @@ -278,22 +281,26 @@ void update_path_flythrough_camera(struct UpdateCam *cam) { if (l10_path_camera_transition_amount < 0.0f) l10_path_camera_transition_amount = 0.0f; } - path = ((char *)l10_paths[*(int *)(rec + 0x20)]); + path = ((char *)l10_paths[*(int *)(flythrough_descriptor_record + 0x20)]); qcopy(initial_aim_or_previous_position, &cam->pos); - done = FUN_L00_0025d808( - path, &cam->pos.x, &run->seg, &run->t, 0, *(float *)(rec + 0x3C) * frame_time); + done = FUN_L00_0025d808(path, + &cam->pos.x, + &run->seg, + &run->t, + 0, + *(float *)(flythrough_descriptor_record + 0x3C) * frame_time); if (run->timer != 0) { if (fast_dec_timer_s16(&run->timer) != 0) done = 1; - else if (*(int *)(rec + 0x40) != 0 && + else if (*(int *)(flythrough_descriptor_record + 0x40) != 0 && run->timer < scale_game_frames(truncate_float_to_s32(20.0f))) done = 1; } - if (*(u8 *)(rec + 0x39) != 0) + if (*(u8 *)(flythrough_descriptor_record + 0x39) != 0) done = 1; if (done) { run->started = 2; - if (*(int *)(rec + 0x40) == 0) + if (*(int *)(flythrough_descriptor_record + 0x40) == 0) return; } for (i = 0; i < 7 && stops->seg[i] >= 0 && stops->seg[i + 1] >= 0; i++) { @@ -317,9 +324,10 @@ void update_path_flythrough_camera(struct UpdateCam *cam) { } } run->dist += fast_vec_dist(initial_aim_or_previous_position, &cam->pos); - if (*(int *)(rec + 0x28) >= 0) { - struct Moby *anchor = (struct Moby *)(D_L10_0015FFD8_5f18 + *(int *)(rec + 0x28) * 256); - float *ofs = (float *)(rec + 0x2C); + if (*(int *)(flythrough_descriptor_record + 0x28) >= 0) { + struct Moby *anchor = (struct Moby *)(D_L10_0015FFD8_5f18 + + *(int *)(flythrough_descriptor_record + 0x28) * 256); + float *ofs = (float *)(flythrough_descriptor_record + 0x2C); point[0] = ofs[0]; point[1] = ofs[1]; point[2] = ofs[2]; @@ -328,7 +336,7 @@ void update_path_flythrough_camera(struct UpdateCam *cam) { fast_vec_add(look_point, &anchor->pos, point); fast_vec_sub(offset, look_point, &cam->pos); } else { - char *look = ((char *)l10_paths[*(int *)(rec + 0x24)]); + char *look = ((char *)l10_paths[*(int *)(flythrough_descriptor_record + 0x24)]); look_seg = 0; look_t = 0.0f; FUN_L00_0025d808(look, diff --git a/src/overlays/shared/camera/swing_volume_camera.c b/src/overlays/shared/camera/swing_volume_camera.c index 7fb4235947..363f537b39 100644 --- a/src/overlays/shared/camera/swing_volume_camera.c +++ b/src/overlays/shared/camera/swing_volume_camera.c @@ -148,7 +148,7 @@ void volume_camera_swing(struct UpdateCam *swing_camera_record) { }; CameraVec gravity_offset_or_yaw_direction; SwingCameraParams *params; - struct UpdateCam *rec; + struct UpdateCam *current_follow_camera_record; Vec4f *pos; FollowCamState *rig; FollowCamState *state; @@ -206,8 +206,8 @@ void volume_camera_swing(struct UpdateCam *swing_camera_record) { /* One word over type and timer: type 5 on its first frame snaps the camera. */ if (*(s32 *)¶ms->type == SWING_CAMERA_TYPE_SNAP_ON_ENTRY) { *(s32 *)¶ms->swing = 0; - rec = current_follow_cam; - rig = FOLLOW_CAM_STATE(rec); + current_follow_camera_record = current_follow_cam; + rig = FOLLOW_CAM_STATE(current_follow_camera_record); follow = &rig->follow; tail = &rig->tail; snap = &rig->tail.snap; @@ -220,7 +220,7 @@ void volume_camera_swing(struct UpdateCam *swing_camera_record) { follow->look_height = params->offset_scale; qcopy(state->tail.unk140, tail->unk130); fast_vec_scale(gravity_offset_or_yaw_direction, &hero.gravity_dir, -tail->distance); - pos = &rec->pos; + pos = ¤t_follow_camera_record->pos; fast_vec_add(state->follow.eye, &hero.motion.pos, gravity_offset_or_yaw_direction); fast_vec_add(pos, state->follow.eye, tail->unk130); fast_vec_scale(gravity_offset_or_yaw_direction, &hero.gravity_dir, -follow->look_height); diff --git a/src/overlays/shared/cutscenes/the_plumber.c b/src/overlays/shared/cutscenes/the_plumber.c index 36476aa44f..1d3175b451 100644 --- a/src/overlays/shared/cutscenes/the_plumber.c +++ b/src/overlays/shared/cutscenes/the_plumber.c @@ -53,7 +53,7 @@ typedef struct { char pad7C[3]; unsigned char flag7F; char pad80[0x30]; - unsigned char bB0; + unsigned char persistent_state_slot; char padB1; unsigned short hB2; } L01WatchMoby; @@ -64,11 +64,11 @@ typedef struct { short h6; unsigned char b8; char pad09[0x17]; - void *p20; + void *dialogue_data; char pad24[0x20]; int i44; char pad48[4]; - int i4C; + int camera_cuboid_index; char body[0x64]; float pitch; float yaw; @@ -119,7 +119,10 @@ float D_L08_00161FB0 = 2.1f; void attach_cutscene_big_head_manipulator(struct Moby *class_reference_moby) __asm__("FUN_L01_002ff028"); void attach_cutscene_big_head_manipulator(struct Moby *class_reference_moby) { - if (cutscene_mode == 2 && big_head_cheat_enabled != 0) { + enum { + CUTSCENE_MODE_ACTIVE = 2 + }; + if (cutscene_mode == CUTSCENE_MODE_ACTIVE && big_head_cheat_enabled != 0) { int i; for (i = 0; i < D_L01_0016CCE0_q.n; i++) { char *moby = D_L01_0016CCE0_q.m[i]; @@ -154,6 +157,9 @@ void the_plumber_update(L01WatchMoby *plumber_moby) { enum { PLUMBER_FALLBACK_DIALOGUE_INITIALIZED = 7 }; + enum { + CUTSCENE_MODE_ACTIVE = 2 + }; L01WatchScratch look_tracking_vectors; L01WatchData *plumber_vars = (L01WatchData *)plumber_moby->data; float rate; @@ -177,13 +183,13 @@ void the_plumber_update(L01WatchMoby *plumber_moby) { mark_moby_for_removal(plumber_moby); return; } - plumber_vars->p20 = (void *)plumber_level_one_dialogue_data; + plumber_vars->dialogue_data = (void *)plumber_level_one_dialogue_data; plumber_moby->state = PLUMBER_LEVEL_ONE_DIALOGUE; } else if (current_level_index == 8) { - plumber_vars->p20 = (void *)plumber_level_eight_dialogue_data; + plumber_vars->dialogue_data = (void *)plumber_level_eight_dialogue_data; plumber_moby->state = PLUMBER_LEVEL_EIGHT_DIALOGUE; } else { - plumber_vars->p20 = (void *)plumber_fallback_dialogue_data; + plumber_vars->dialogue_data = (void *)plumber_fallback_dialogue_data; plumber_moby->state = PLUMBER_FALLBACK_DIALOGUE_INITIALIZED; } initialize_npc_dialogue(plumber_moby, plumber_vars); @@ -195,12 +201,12 @@ void the_plumber_update(L01WatchMoby *plumber_moby) { } break; case PLUMBER_LEVEL_ONE_POST_DIALOGUE: - if (cutscene_mode == 2) + if (cutscene_mode == CUTSCENE_MODE_ACTIVE) break; - if (visited52[plumber_moby->bB0 + current_level_index * 16] != 0xFF) { - jet_clear_persistent(plumber_moby->bB0); - if (plumber_vars->i4C != -1) { - LevelCuboid *camera_record = &l01_cuboids[plumber_vars->i4C]; + if (visited52[plumber_moby->persistent_state_slot + current_level_index * 16] != 0xFF) { + jet_clear_persistent(plumber_moby->persistent_state_slot); + if (plumber_vars->camera_cuboid_index != -1) { + LevelCuboid *camera_record = &l01_cuboids[plumber_vars->camera_cuboid_index]; jet_reset_camera(&camera_record->pos, &camera_record->rot); } } @@ -224,7 +230,7 @@ void the_plumber_update(L01WatchMoby *plumber_moby) { } break; case PLUMBER_LEVEL_EIGHT_POST_DIALOGUE: - if (cutscene_mode == 2) + if (cutscene_mode == CUTSCENE_MODE_ACTIVE) break; if (plumber_vars->h6 == 2) { D_0013F350_w.f80 = 130.5f; diff --git a/src/overlays/shared/cutscenes/update_cutscene_playback.c b/src/overlays/shared/cutscenes/update_cutscene_playback.c index fcc4644961..568642c7c3 100644 --- a/src/overlays/shared/cutscenes/update_cutscene_playback.c +++ b/src/overlays/shared/cutscenes/update_cutscene_playback.c @@ -107,17 +107,17 @@ typedef struct { u8 pad0[8]; s32 w8; u8 padc[0x14 - 0xC]; - s32 w14; + s32 debug_camera_mode; s32 w18; u8 pad1c[0xA0 - 0x1C]; - s32 wA0; + s32 previous_step_held_buttons; u8 padA4[0xEC - 0xA4]; - s32 wEC; + s32 single_step_mode_countdown; } S_297f78; typedef struct { u8 pad0[0xA6]; - s16 hA6; + s16 moby_class_id; } A_297f78; typedef struct { @@ -194,14 +194,16 @@ void handle_pause_input(void) __asm__("FUN_L00_00297f78"); void handle_pause_input(void) { s32 lvl, area, noctl, special; - if (D_L00_0016C058.wEC) { - if (--D_L00_0016C058.wEC == 0) + if (D_L00_0016C058.single_step_mode_countdown) { + if (--D_L00_0016C058.single_step_mode_countdown == 0) D_L00_0016C058.w8 = 0x10; } if ((D_L00_0016C058.w8 & 0x10) && (controller_state.pressed & 0x200)) { - controller_state.pressed = ~D_L00_0016C058.wA0 & controller_state.held; - controller_state.released = ~controller_state.held & D_L00_0016C058.wA0; - D_L00_0016C058.wA0 = controller_state.held & ~0x200; + controller_state.pressed = + ~D_L00_0016C058.previous_step_held_buttons & controller_state.held; + controller_state.released = + ~controller_state.held & D_L00_0016C058.previous_step_held_buttons; + D_L00_0016C058.previous_step_held_buttons = controller_state.held & ~0x200; } lvl = D_L00_0015F5C0_macro[1]; if (lvl == 0 && (mode_freeze_flags & 1) && level_timer >= 8) { @@ -223,7 +225,7 @@ void handle_pause_input(void) { } special = 0; if (hero.state.control_mode == 9 && hero.state.current == 0x32 && hero.ship_moby) { - s32 k = ((A_297f78 *)hero.ship_moby)->hA6; + s32 k = ((A_297f78 *)hero.ship_moby)->moby_class_id; if (k == 0x45 || k == 0x563 || k == 0x4DA) special = 1; } @@ -249,7 +251,7 @@ void handle_pause_input(void) { if (!(D_L00_0016C058.w8 & 0x10) && level_timer >= 8 && (controller_state.pressed & 0x500) && hero.state.control_mode != 0x16 && hero.state.current != 0x72 && hero.state.current != 0x32 && hero.state.current != 0x1D && !hero.fall_fade_pending && - hero.health.hp && lvl == 0 && !special && !D_L00_0016C058.wEC) { + hero.health.hp && lvl == 0 && !special && !D_L00_0016C058.single_step_mode_countdown) { pause_all_sounds(10); return; } @@ -311,9 +313,9 @@ void handle_pause_input(void) { noop_main_callback(D_L00_00161018, 5); if (DBG(8)) { update_camera(); - } else if (D_L00_0016C058.w14) { + } else if (D_L00_0016C058.debug_camera_mode) { update_debug_camera(); - if (D_L00_0016C058.w14 == 2) + if (D_L00_0016C058.debug_camera_mode == 2) update_hero_from_debug_camera(); } noop_main_callback(D_L00_00161028, 8); @@ -562,7 +564,7 @@ void finish_cutscene(void) { typedef struct { char pad[0x38]; - int i38; + int camera_key_index; char pad2[0x54 - 0x3C]; char *p54; } H_298de8; @@ -583,13 +585,13 @@ extern void sceVu0RotMatrixZ(void *, void *, float) __asm__("FUN_001252b8 int apply_cutscene_camera_key(void) __asm__("FUN_L00_00298de8"); int apply_cutscene_camera_key(void) { - float camera_key_rotation_matrix[16] __attribute__((aligned(16))); - OvlQuad camera_offset[1]; - char *camera_key = D_L00_0016C860_298de8.p54 + D_L00_0016C860_298de8.i38 * 32; - float *camera_key_values = (float *)(camera_key + 0x10); - int camera_key_flag = *(unsigned char *)(camera_key + 0xC); - char *x = D_L00_0016CA40_lui; - char *camera_position; + float camera_key_rotation_matrix[16] __attribute__((aligned(16))); + OvlQuad camera_offset[1]; + char *camera_key = D_L00_0016C860_298de8.p54 + D_L00_0016C860_298de8.camera_key_index * 32; + float *camera_key_values = (float *)(camera_key + 0x10); + int camera_key_flag = *(unsigned char *)(camera_key + 0xC); + char *x = D_L00_0016CA40_lui; + char *camera_position; LevelCamera *camera_state; float k; float unscaled_camera_value = camera_key_values[3]; diff --git a/src/overlays/shared/cutscenes/update_npc_dialogue.c b/src/overlays/shared/cutscenes/update_npc_dialogue.c index e5ef1b549a..c3f7a07644 100644 --- a/src/overlays/shared/cutscenes/update_npc_dialogue.c +++ b/src/overlays/shared/cutscenes/update_npc_dialogue.c @@ -211,11 +211,11 @@ typedef struct { s16 f04; u8 pad6[2]; u8 f08; - u8 f09; + u8 dialogue_initialized; u8 padA[0x2C]; - s16 f36; - u32 f38; - u32 f3C; + s16 current_dialogue_entry_index; + u32 dialogue_start_frame; + u32 dialogue_entry_list_address; } Out002668a0; typedef struct { @@ -243,17 +243,20 @@ s32 initialize_npc_dialogue(void *moby, u8 *out_p) { if (l00_moby_dialogue_entry_lists[i] == 0) { return -1; } - dialogue_trigger->f09 = 1; - dialogue_trigger->f38 = D_L00_0015F5CC; + dialogue_trigger->dialogue_initialized = 1; + dialogue_trigger->dialogue_start_frame = D_L00_0015F5CC; dialogue_trigger->f04 = -1; - dialogue_trigger->f36 = 0; + dialogue_trigger->current_dialogue_entry_index = 0; dialogue_entries = l00_moby_dialogue_entry_lists[i]; - dialogue_trigger->f3C = (u32)dialogue_entries; + dialogue_trigger->dialogue_entry_list_address = (u32)dialogue_entries; if (level_object_states[i].state != 0 && dialogue_entries->f08 == 0) { - dialogue_trigger->f36 = dialogue_entries->f06; + dialogue_trigger->current_dialogue_entry_index = dialogue_entries->f06; } dialogue_trigger->f08 = - ((u8 *)dialogue_trigger->f3C)[dialogue_trigger->f36 * 0x1C + (k = 0x10)] & 1; + ((u8 *)dialogue_trigger + ->dialogue_entry_list_address)[dialogue_trigger->current_dialogue_entry_index * 0x1C + + (k = 0x10)] & + 1; return i; } diff --git a/src/overlays/shared/enemies/armed_transport.c b/src/overlays/shared/enemies/armed_transport.c index 913403455a..f21b2c7f02 100644 --- a/src/overlays/shared/enemies/armed_transport.c +++ b/src/overlays/shared/enemies/armed_transport.c @@ -37,7 +37,7 @@ typedef struct ArmedTransportVars { s8 unk28; u8 pad29[0x37]; u8 unk60[0x7]; - u8 unk67; + u8 hit_animation_secondary_red; u8 pad68[0x8]; f32 unk70[4]; u8 pad80[0x30]; @@ -52,17 +52,17 @@ typedef struct ArmedTransportVars { u8 unkE0[0x64]; f32 unk144; u8 pad148[0x18]; - s32 unk160; + s32 death_timer_frames; s32 unk164; s32 path_point; - s32 unk16C; - f32 unk170[4]; + s32 path_segment_fraction; + f32 path_and_pose_state[4]; u8 unk180[0x4]; s32 unk184; f32 unk188; - f32 unk18C; + f32 bob_phase_radians; s32 voice; - f32 unk194; + f32 base_height; } ArmedTransportVars; typedef union { @@ -191,16 +191,16 @@ void armed_transport_update(char *transport_moby) { if (transport_data->unkDC != -1) compute_armed_transport_path_headings(D_L16_001B0930[transport_data->unkDC]); speed = *(float *)&D_L16_00161D80 * frame_time; - transport_data->unk16C = 0; + transport_data->path_segment_fraction = 0; transport_data->path_point = 0; - transport_data->unk170[0] = speed; - transport_data->unk194 = MOBY(transport_moby)->pos.z; + transport_data->path_and_pose_state[0] = speed; + transport_data->base_height = MOBY(transport_moby)->pos.z; if (transport_data->path_index == -1) { MOBY(transport_moby)->state = ARMED_TRANSPORT_STATE_TRACK_TARGET; break; } path = D_L16_001B0930[transport_data->path_index]; - transport_data->unk170[1] = fast_vec_dist(path + 0x10, path + 0x20); + transport_data->path_and_pose_state[1] = fast_vec_dist(path + 0x10, path + 0x20); qcopy(&MOBY(transport_moby)->pos, path + 0x10); MOBY(transport_moby)->state = ARMED_TRANSPORT_STATE_WAIT_FOR_ACTIVATION; MOBY(transport_moby)->visible = 0; @@ -245,10 +245,10 @@ void armed_transport_update(char *transport_moby) { loaded = 1; } path = D_L16_001B0930[transport_data->path_index]; - if (loaded && - (float)(*(int *)path - transport_data->path_point) * transport_data->unk170[1] < - 16.0f) { - advance_accelerated_scalar((float *)(&transport_data->unk170[3]), + if (loaded && (float)(*(int *)path - transport_data->path_point) * + transport_data->path_and_pose_state[1] < + 16.0f) { + advance_accelerated_scalar((float *)(&transport_data->path_and_pose_state[3]), (float *)(&transport_data->unk180), 1.5707964f, frame_time_sq * 12.566371f, @@ -301,7 +301,7 @@ void armed_transport_update(char *transport_moby) { float heading = *(float *)(D_L16_001B0930[transport_data->unkDC] + 0x1C); advance_accelerated_scalar((float *)&MOBY(transport_moby)->rot.z, - (float *)(&transport_data->unk170[2]), + (float *)(&transport_data->path_and_pose_state[2]), heading, frame_time_sq * 6.2831855f, frame_time_sq * 6.2831855f, @@ -309,12 +309,12 @@ void armed_transport_update(char *transport_moby) { if (fast_difference_between_rotations(MOBY(transport_moby)->rot.z, heading) < 0.01f) { MOBY(transport_moby)->state = ARMED_TRANSPORT_STATE_FOLLOW_SECOND_PATH; transport_data->path_point = 0; - transport_data->unk16C = 0; + transport_data->path_segment_fraction = 0; } break; } case ARMED_TRANSPORT_STATE_FOLLOW_SECOND_PATH: - advance_accelerated_scalar((float *)(&transport_data->unk170[3]), + advance_accelerated_scalar((float *)(&transport_data->path_and_pose_state[3]), (float *)(&transport_data->unk180), 0.0f, frame_time_sq * 12.566371f, @@ -333,7 +333,7 @@ void armed_transport_update(char *transport_moby) { float *yaw = (float *)&MOBY(transport_moby)->rot.z; float bearing; - advance_accelerated_scalar((float *)(&transport_data->unk170[3]), + advance_accelerated_scalar((float *)(&transport_data->path_and_pose_state[3]), (float *)(&transport_data->unk180), 0.0f, frame_time_sq * 12.566371f, @@ -342,7 +342,7 @@ void armed_transport_update(char *transport_moby) { bearing = fast_arc_tan(transport_data->unk70[0] - MOBY(transport_moby)->pos.x, transport_data->unk70[1] - MOBY(transport_moby)->pos.y); advance_accelerated_scalar(yaw, - (float *)(&transport_data->unk170[2]), + (float *)(&transport_data->path_and_pose_state[2]), bearing, frame_time_sq * 3.1415927f, frame_time_sq * 3.1415927f, @@ -374,9 +374,9 @@ void armed_transport_update(char *transport_moby) { case ARMED_TRANSPORT_STATE_DYING: { float dt = frame_time; - transport_data->unk194 -= dt + dt; + transport_data->base_height -= dt + dt; MOBY(transport_moby)->rot.x += dt * 0.2617994f; - if (fast_dec_timer((int *)(&transport_data->unk160)) || + if (fast_dec_timer((int *)(&transport_data->death_timer_frames)) || hero.vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { spawn_explosion(transport_moby, D_L16_0015F580, @@ -433,12 +433,12 @@ void armed_transport_update(char *transport_moby) { break; } } - transport_data->unk18C = fast_add_rotations(transport_data->unk18C, - *(float *)&armed_transport_bob_phase_speed_degrees * - DEG_TO_RAD * frame_time); + transport_data->bob_phase_radians = fast_add_rotations( + transport_data->bob_phase_radians, + *(float *)&armed_transport_bob_phase_speed_degrees * DEG_TO_RAD * frame_time); MOBY(transport_moby)->pos.z = - transport_data->unk194 + - *(float *)&armed_transport_bob_amplitude * fast_sin(transport_data->unk18C); + transport_data->base_height + + *(float *)&armed_transport_bob_amplitude * fast_sin(transport_data->bob_phase_radians); update_armed_transport_joint_animation(transport_moby); } @@ -481,7 +481,7 @@ void update_armed_transport_damage_and_targeting(struct Moby *transport_moby) { if (response >= 3) { if (response < 9) { FUN_0022da68_i(3, 0, transport_moby); - transport_data->unk67 = 120; + transport_data->hit_animation_secondary_red = 120; transport_data->unk188 = randf_sym(30.0f, 50.0f) * DEG_TO_RAD * frame_time; } } else { @@ -498,8 +498,8 @@ void update_armed_transport_damage_and_targeting(struct Moby *transport_moby) { } while (--count >= 0); } transport_moby->state = ARMED_TRANSPORT_STATE_DYING; - transport_data->unk160 = scale_game_frames(90); - transport_data->unk67 = 120; + transport_data->death_timer_frames = scale_game_frames(90); + transport_data->hit_animation_secondary_red = 120; } } trooper_anim_update(transport_moby, &transport_data->unk60); @@ -524,18 +524,19 @@ void update_armed_transport_damage_and_targeting(struct Moby *transport_moby) { int advance_armed_transport_along_path(char *transport_moby, char *path) { ArmedTransportVars *transport_data = (ArmedTransportVars *)MOBY(transport_moby)->pvars; - float progress = (float)transport_data->path_point + *(float *)&transport_data->unk16C + - transport_data->unk170[0] / transport_data->unk170[1]; + float progress = + (float)transport_data->path_point + *(float *)&transport_data->path_segment_fraction + + transport_data->path_and_pose_state[0] / transport_data->path_and_pose_state[1]; int index = truncate_float_to_s32(progress); float speed; float distance, rate; char *position; transport_data->path_point = index; - *(float *)&transport_data->unk16C = progress - (float)index; + *(float *)&transport_data->path_segment_fraction = progress - (float)index; if (index < *(int *)path - 1) { position = &MOBY(transport_moby)->pos; func_00215CA8_path42_q(progress, path, 0, position, transport_moby + 0x40, 0); - transport_data->unk194 = MOBY(transport_moby)->pos.z; + transport_data->base_height = MOBY(transport_moby)->pos.z; speed = 0.0f; distance = fast_vec_dist(position, path + (*(int *)path << 4)); rate = armed_transport_path_acceleration_coefficient_gp * *(float *)&frame_time_sq; @@ -544,7 +545,7 @@ int advance_armed_transport_along_path(char *transport_moby, char *path) { rate, *(float *)&D_L16_00161D80_gp * frame_time, &speed, - (float *)(&transport_data->unk170)); + (float *)(&transport_data->path_and_pose_state)); return 0; } return 1; @@ -576,7 +577,7 @@ void update_armed_transport_joint_animation(char *moby) { float joint_animation_smoothing_factor = ticks * 0.03f; float joint_animation_secondary_control = ticks * 0.3f; ArmedTransportVars *transport_private_data = (ArmedTransportVars *)MOBY(moby)->pvars; - transport_private_data->unk144 = transport_private_data->unk170[3]; + transport_private_data->unk144 = transport_private_data->path_and_pose_state[3]; update_joint_animation(moby, &transport_private_data->unkE0, 2, diff --git a/src/overlays/shared/enemies/blarg_commander.c b/src/overlays/shared/enemies/blarg_commander.c index e81497e17d..3fb4796c2d 100644 --- a/src/overlays/shared/enemies/blarg_commander.c +++ b/src/overlays/shared/enemies/blarg_commander.c @@ -139,6 +139,9 @@ void blarg_commander_update(char *m) __asm__("FUN_L12_00308918"); /* Moby class 1371 */ void blarg_commander_update(char *moby) { + enum { + BLARG_COMMANDER_STATE_TUMBLING = 1 + }; int moby_state; char *moby_pvars; char *motion_state; @@ -147,7 +150,7 @@ void blarg_commander_update(char *moby) { char raised_position[16]; moby_state = MOBY(moby)->prev_seq; moby_pvars = ((char *)MOBY(moby)->pvars); - if (moby_state == 1) { + if (moby_state == BLARG_COMMANDER_STATE_TUMBLING) { motion_state = moby_pvars + 0x20; motion_result_flags = step_moby_motion(moby, motion_state); mo->vx = fast_add_rotations(mo->vx, frame_time * 4.3633232f); diff --git a/src/overlays/shared/enemies/blarg_elite_commando.c b/src/overlays/shared/enemies/blarg_elite_commando.c index 5e6337434a..137b9d86e5 100644 --- a/src/overlays/shared/enemies/blarg_elite_commando.c +++ b/src/overlays/shared/enemies/blarg_elite_commando.c @@ -80,41 +80,41 @@ typedef struct L16DamageData { s32 unk128; int path_index; u8 unk130[0x64]; - f32 unk194; - f32 unk198; + f32 joint_1_target_pitch; + f32 joint_1_target_yaw; u8 pad19C[0x14]; u8 unk1B0[0x64]; - f32 unk214; - f32 unk218; + f32 joint_2_target_pitch; + f32 joint_2_target_yaw; u8 pad21C[0x14]; u8 unk230[0x64]; f32 unk294; - f32 unk298; + f32 joint_3_target_yaw; u8 pad29C[0x14]; - f32 unk2B0; - f32 unk2B4; + f32 initial_position_x; + f32 initial_position_y; u8 pad2B8[0x4]; - f32 unk2BC; + f32 cached_position_z; f32 unk2C0; - f32 unk2C4; + f32 base_position_y; f32 unk2C8; - f32 unk2CC; + f32 parent_heading_offset; char *unk2D0; - f32 unk2D4; - u8 unk2D8[0x4]; - s16 unk2DC; - u16 unk2DE; + f32 movement_step_length; + u8 heading_angular_step[0x4]; + s16 state_countdown_ticks; + u16 rocket_fire_cycle_count; int pursuit_timer; - f32 unk2E4; + f32 bobbing_z_phase_step; f32 unk2E8; - f32 unk2EC; - f32 unk2F0; + f32 bobbing_amplitude; + f32 bobbing_x_phase_step; f32 unk2F4; f32 unk2F8; - f32 unk2FC; - s16 unk300; - s16 unk302; - s32 unk304; + f32 bobbing_y_phase; + s16 selected_path_node_index; + s16 patrol_countdown_ticks; + s32 voice_playback_handle; int reward_hits; } L16DamageData; @@ -243,19 +243,21 @@ void blarg_elite_commando_update(char *commando_moby) { manipulator_set_scale(&commando_data->unk130, 2.5f); switch (((unsigned char *)commando_moby)[0x20]) { case COMMANDO_STATE_INITIALIZE: - *(int *)&commando_data->unk2EC = 0; + *(int *)&commando_data->bobbing_amplitude = 0; commando_data->unk29 = 1; commando_data->unk24 = 3; commando_data->unk28 = 2; commando_data->unk30 = 1.5f; commando_data->health = 3.0f; commando_data->unk2F4 = random_angle_radians(); - commando_data->unk2FC = random_angle_radians(); + commando_data->bobbing_y_phase = random_angle_radians(); commando_data->unk2E8 = random_angle_radians(); - commando_data->unk2F0 = random_float_between(90.0f, 180.0f) * DEG_TO_RAD * frame_time; + commando_data->bobbing_x_phase_step = + random_float_between(90.0f, 180.0f) * DEG_TO_RAD * frame_time; commando_data->unk2F8 = random_float_between(90.0f, 180.0f) * DEG_TO_RAD * frame_time; - commando_data->unk2E4 = random_float_between(90.0f, 180.0f) * DEG_TO_RAD * frame_time; - commando_data->unk302 = + commando_data->bobbing_z_phase_step = + random_float_between(90.0f, 180.0f) * DEG_TO_RAD * frame_time; + commando_data->patrol_countdown_ticks = truncate_float_to_s32(scale_time(random_float_between(180.0f, 360.0f))); if (random_integer_below(2)) MOBY(commando_moby)->flags |= 0x8000; @@ -266,12 +268,12 @@ void blarg_elite_commando_update(char *commando_moby) { if (commando_data->unk120 >= 0) { int node = truncate_float_to_s32(random_float_between( 0.0f, (float)(*(int *)D_L16_001B0930[commando_data->unk120] - 1))); - commando_data->unk300 = node; + commando_data->selected_path_node_index = node; qcopy(position, D_L16_001B0930[commando_data->unk120] + (short)node * 16 + 0x10); } commando_data->reward_hits = 1; qcopy(&commando_data->unk2C0, position); - qcopy(&commando_data->unk2B0, position); + qcopy(&commando_data->initial_position_x, position); } if (commando_data->unk128) { MOBY(commando_moby)->state = COMMANDO_STATE_FOLLOW_PARENT_TRANSFORM; @@ -292,26 +294,28 @@ void blarg_elite_commando_update(char *commando_moby) { transform_vector_by_basis( movement, &commando_data->unk2C0, commando_data->unk2D0 + 0xC0); fast_vec_add(&MOBY(commando_moby)->pos, movement, commando_data->unk2D0 + 0x10); - MOBY(commando_moby)->rot.z = - fast_add_rotations(*(float *)(commando_data->unk2D0 + 0x48), commando_data->unk2CC); + MOBY(commando_moby)->rot.z = fast_add_rotations( + *(float *)(commando_data->unk2D0 + 0x48), commando_data->parent_heading_offset); } break; case COMMANDO_STATE_RETURN_TO_INITIAL_POSITION: - if (!fast_dec_timer_s16(&commando_data->unk2DC)) { - fast_vec_normalize(scratch_vector, commando_moby + 0xC0, commando_data->unk2DC * 0.1f); + if (!fast_dec_timer_s16(&commando_data->state_countdown_ticks)) { + fast_vec_normalize( + scratch_vector, commando_moby + 0xC0, commando_data->state_countdown_ticks * 0.1f); fast_vec_add(scratch_vector, scratch_vector, &MOBY(commando_moby)->pos); func_L16_002D5280_update(commando_moby, scratch_vector, 1); } else { heading = (float *)&MOBY(commando_moby)->rot.z; - angle = fast_arc_tan(commando_data->unk2B0 - MOBY(commando_moby)->pos.x, - commando_data->unk2B4 - MOBY(commando_moby)->pos.y); + angle = fast_arc_tan(commando_data->initial_position_x - MOBY(commando_moby)->pos.x, + commando_data->initial_position_y - MOBY(commando_moby)->pos.y); approach_angle(heading, - (float *)(&commando_data->unk2D8), + (float *)(&commando_data->heading_angular_step), angle, frame_time_sq * 12.566371f, frame_time_sq * 12.566371f, frame_time * 12.566371f); - distance = func_L16_002D5280_update(commando_moby, &commando_data->unk2B0, 1); + distance = + func_L16_002D5280_update(commando_moby, &commando_data->initial_position_x, 1); if (((unsigned char *)commando_moby)[0x53] != 0) blend_moby_animation(commando_moby, 0, 0, scale_game_frames(10)); if (distance < 1.0f) @@ -319,14 +323,15 @@ void blarg_elite_commando_update(char *commando_moby) { } break; case COMMANDO_STATE_IDLE: - fast_dec_timer_s16(&commando_data->unk2DC); + fast_dec_timer_s16(&commando_data->state_countdown_ticks); if (commando_data->pursuit_mode != COMMANDO_PURSUIT_MODE_DISABLED) { - if (commando_data->unk2DC == 0) { + if (commando_data->state_countdown_ticks == 0) { if (commando_data->unk120 >= 0) { MOBY(commando_moby)->state = COMMANDO_STATE_MOVE_TO_ATTACK_NODE; - commando_data->unk2DC = + commando_data->state_countdown_ticks = truncate_float_to_s32(scale_time(random_float_between(30.0f, 90.0f))); - commando_data->unk300 = (commando_data->unk300 + 1) % 2; + commando_data->selected_path_node_index = + (commando_data->selected_path_node_index + 1) % 2; select_blarg_elite_commando_movement_animation(commando_moby); } else if (!random_integer_below(20)) { MOBY(commando_moby)->state = COMMANDO_STATE_PREPARE_ROCKET_FIRE; @@ -335,34 +340,36 @@ void blarg_elite_commando_update(char *commando_moby) { } } } - } else if (fast_dec_timer_s16(&commando_data->unk302)) { + } else if (fast_dec_timer_s16(&commando_data->patrol_countdown_ticks)) { if (commando_data->unk120 >= 0) { - commando_data->unk300 = (commando_data->unk300 + 1) % 2; + commando_data->selected_path_node_index = + (commando_data->selected_path_node_index + 1) % 2; MOBY(commando_moby)->state = COMMANDO_STATE_MOVE_TO_PATROL_NODE; - commando_data->unk302 = scale_game_frames(180); + commando_data->patrol_countdown_ticks = scale_game_frames(180); select_blarg_elite_commando_movement_animation(commando_moby); } } break; case COMMANDO_STATE_MOVE_TO_PATROL_NODE: { - float path_distance = func_L16_002D5280_update(commando_moby, - D_L16_001B0930[commando_data->unk120] + - (commando_data->unk300 * 16 + 0x10), - 1); + float path_distance = + func_L16_002D5280_update(commando_moby, + D_L16_001B0930[commando_data->unk120] + + (commando_data->selected_path_node_index * 16 + 0x10), + 1); if (path_distance < 0.01f) { MOBY(commando_moby)->state = COMMANDO_STATE_IDLE; if (((unsigned char *)commando_moby)[0x53] != 0) blend_moby_animation(commando_moby, 0, 0, scale_game_frames(10)); - commando_data->unk302 = + commando_data->patrol_countdown_ticks = truncate_float_to_s32(scale_time(random_float_between(180.0f, 360.0f))); - } else if (fast_dec_timer_s16(&commando_data->unk302)) { + } else if (fast_dec_timer_s16(&commando_data->patrol_countdown_ticks)) { MOBY(commando_moby)->state = COMMANDO_STATE_IDLE; if (((unsigned char *)commando_moby)[0x53] != 0) blend_moby_animation(commando_moby, 0, 0, scale_game_frames(10)); - commando_data->unk302 = + commando_data->patrol_countdown_ticks = truncate_float_to_s32(scale_time(random_float_between(180.0f, 360.0f))); } - if (commando_data->unk2D4 < 2.0f * frame_time && path_distance < 0.5f) { + if (commando_data->movement_step_length < 2.0f * frame_time && path_distance < 0.5f) { if (((unsigned char *)commando_moby)[0x53] != 0) { ticks = 30; goto animate_idle; @@ -375,7 +382,7 @@ void blarg_elite_commando_update(char *commando_moby) { angle = fast_arc_tan(target[0] - MOBY(commando_moby)->pos.x, target[1] - MOBY(commando_moby)->pos.y); approach_angle(heading, - (float *)(&commando_data->unk2D8), + (float *)(&commando_data->heading_angular_step), angle, frame_time_sq * 12.566371f, frame_time_sq * 12.566371f, @@ -392,7 +399,7 @@ void blarg_elite_commando_update(char *commando_moby) { angle = fast_arc_tan(target[0] - MOBY(commando_moby)->pos.x, target[1] - MOBY(commando_moby)->pos.y); approach_angle(heading, - (float *)(&commando_data->unk2D8), + (float *)(&commando_data->heading_angular_step), angle, frame_time_sq * 12.566371f, frame_time_sq * 12.566371f, @@ -405,29 +412,30 @@ void blarg_elite_commando_update(char *commando_moby) { fast_vec_normalize(delta, delta, frame_time * 20.0f); spawn_blarg_elite_commando_rocket(commando_moby, delta, (char *)scratch_vector); } else if (is_value_within_interpolated_window(commando_moby, 10.0f)) { - int count = commando_data->unk2DE + 1; - commando_data->unk2DE = count; + int count = commando_data->rocket_fire_cycle_count + 1; + commando_data->rocket_fire_cycle_count = count; if ((short)count >= 3) { MOBY(commando_moby)->state = COMMANDO_STATE_IDLE; if (((unsigned char *)commando_moby)[0x53] != 0) blend_moby_animation(commando_moby, 0, 0, scale_game_frames(10)); - commando_data->unk2DC = scale_game_frames(60); - commando_data->unk2DE = 0; + commando_data->state_countdown_ticks = scale_game_frames(60); + commando_data->rocket_fire_cycle_count = 0; } } break; case COMMANDO_STATE_MOVE_TO_ATTACK_NODE: - distance = func_L16_002D5280_update(commando_moby, - D_L16_001B0930[commando_data->unk120] + - (commando_data->unk300 * 16 + 0x10), - 1); - fast_dec_timer_s16(&commando_data->unk2DC); - if (distance < 0.01f || commando_data->unk2DC == 0) { + distance = + func_L16_002D5280_update(commando_moby, + D_L16_001B0930[commando_data->unk120] + + (commando_data->selected_path_node_index * 16 + 0x10), + 1); + fast_dec_timer_s16(&commando_data->state_countdown_ticks); + if (distance < 0.01f || commando_data->state_countdown_ticks == 0) { MOBY(commando_moby)->state = COMMANDO_STATE_PREPARE_ROCKET_FIRE; if (((unsigned char *)commando_moby)[0x53] != 2) blend_moby_animation(commando_moby, 2, 0, scale_game_frames(30)); } - if (distance < 0.5f && commando_data->unk2D4 < 2.0f * frame_time) { + if (distance < 0.5f && commando_data->movement_step_length < 2.0f * frame_time) { if (((unsigned char *)commando_moby)[0x53] != 2) { blend_moby_animation(commando_moby, 2, 0, scale_game_frames(30)); } @@ -466,26 +474,29 @@ void blarg_elite_commando_update(char *commando_moby) { break; } if (blarg_elite_commando_bobbing_and_voice_enabled_gp) { - commando_data->unk2BC = MOBY(commando_moby)->pos.z; + commando_data->cached_position_z = MOBY(commando_moby)->pos.z; if (((unsigned char *)commando_moby)[0x20] != 0 && ((unsigned char *)commando_moby)[0x20] != 10) { - approach_value((float *)(&commando_data->unk2EC), 0.25f, frame_time * 0.25f); + approach_value((float *)(&commando_data->bobbing_amplitude), 0.25f, frame_time * 0.25f); commando_data->unk2F4 = - fast_add_rotations(commando_data->unk2F4, commando_data->unk2F0); - commando_data->unk2FC = - fast_add_rotations(commando_data->unk2FC, commando_data->unk2F8); + fast_add_rotations(commando_data->unk2F4, commando_data->bobbing_x_phase_step); + commando_data->bobbing_y_phase = + fast_add_rotations(commando_data->bobbing_y_phase, commando_data->unk2F8); commando_data->unk2E8 = - fast_add_rotations(commando_data->unk2E8, commando_data->unk2E4); + fast_add_rotations(commando_data->unk2E8, commando_data->bobbing_z_phase_step); MOBY(commando_moby)->pos.x = - commando_data->unk2C0 + commando_data->unk2EC * fast_sin(commando_data->unk2F4); + commando_data->unk2C0 + + commando_data->bobbing_amplitude * fast_sin(commando_data->unk2F4); MOBY(commando_moby)->pos.y = - commando_data->unk2C4 + commando_data->unk2EC * fast_sin(commando_data->unk2FC); + commando_data->base_position_y + + commando_data->bobbing_amplitude * fast_sin(commando_data->bobbing_y_phase); MOBY(commando_moby)->pos.z = - commando_data->unk2C8 + commando_data->unk2EC * fast_sin(commando_data->unk2E8); + commando_data->unk2C8 + + commando_data->bobbing_amplitude * fast_sin(commando_data->unk2E8); } if (fast_vec_dist(&MOBY(commando_moby)->pos, D_L16_001671C0) < 32.0f && - !voice_is_playing(commando_moby, commando_data->unk304)) - commando_data->unk304 = func_0022ED80_update(7, 4, commando_moby); + !voice_is_playing(commando_moby, commando_data->voice_playback_handle)) + commando_data->voice_playback_handle = func_0022ED80_update(7, 4, commando_moby); } if (blarg_elite_commando_joint_aim_enabled_gp) update_blarg_elite_commando_joint_aim(commando_moby); @@ -676,7 +687,7 @@ void set_blarg_elite_commando_parent_transform(char *moby, L16DamageData *commando_data = (L16DamageData *)MOBY(moby)->pvars; commando_data->unk2D0 = parent_moby; qcopy(&commando_data->unk2C0, position); - commando_data->unk2CC = *(float *)(vector + 8); + commando_data->parent_heading_offset = *(float *)(vector + 8); } /* Ported from rac1-decomp (src/overlays/shared/vendor_002A1B58.c: func_L16_002D51A8), where it is exact; names translated to the US level program. */ @@ -696,10 +707,10 @@ void start_blarg_elite_commando_return_to_initial_position(struct Moby *moby, moby->flags &= 0xFFFE; moby->collision = moby->pclass->collision; moby->flags |= 0x1000; - commando_data->unk2DC = return_countdown_ticks; - commando_data->unk2BC = moby->pos.z; + commando_data->state_countdown_ticks = return_countdown_ticks; + commando_data->cached_position_z = moby->pos.z; qcopy(&commando_data->unk2C0, &moby->pos); - commando_data->unk2D4 = frame_time * 5.0f; + commando_data->movement_step_length = frame_time * 5.0f; } } @@ -717,13 +728,13 @@ float advance_blarg_elite_commando_base_position(char *moby, float *target) { float movement_step[4]; zero[0] = 0; advance_accelerated_scalar((float *)zero, - (float *)(&commando_motion_data->unk2D4), + (float *)(&commando_motion_data->movement_step_length), distance, acceleration_braking_step, acceleration_braking_step, frame_time * 5.0f); fast_vec_sub(movement_step, target, base_position); - fast_vec_normalize(movement_step, movement_step, commando_motion_data->unk2D4); + fast_vec_normalize(movement_step, movement_step, commando_motion_data->movement_step_length); fast_vec_add(base_position, base_position, movement_step); return distance; } @@ -760,7 +771,8 @@ void randomize_blarg_elite_commando_group_pursuit_timers(void *group_source_moby /* Ported from rac1-decomp (src/overlays/shared/vendor_002A1B58.c: func_L16_002D5438), where it is exact; names translated to the US level program. */ void select_blarg_elite_commando_movement_animation(char *moby) { L16DamageData *commando_path_state = (L16DamageData *)MOBY(moby)->pvars; - char *target = D_L16_001B0930[commando_path_state->unk120] + (commando_path_state->unk300 << 4); + char *target = D_L16_001B0930[commando_path_state->unk120] + + (commando_path_state->selected_path_node_index << 4); float angle = fast_arc_tan(*(float *)(target + 0x10) - MOBY(moby)->pos.x, *(float *)(target + 0x14) - MOBY(moby)->pos.y); float delta = fast_subtract_rotations(angle, MOBY(moby)->rot.z); @@ -881,10 +893,10 @@ void update_blarg_elite_commando_joint_aim(char *commando_moby) { pitch = -0.7853982f; { float halfYaw = yaw * 0.5f, halfPitch = pitch * 0.5f; - commando_data->unk198 = halfYaw; - commando_data->unk194 = halfPitch; - commando_data->unk218 = halfYaw; - commando_data->unk214 = halfPitch; + commando_data->joint_1_target_yaw = halfYaw; + commando_data->joint_1_target_pitch = halfPitch; + commando_data->joint_2_target_yaw = halfYaw; + commando_data->joint_2_target_pitch = halfPitch; } if ((unsigned int)(MOBY(commando_moby)->state - 4) < 2) { float yaw2, pitch2, bound; @@ -905,7 +917,7 @@ void update_blarg_elite_commando_joint_aim(char *commando_moby) { else if (yaw2 < -0.34906584f) yaw2 = -0.34906584f; commando_data->unk294 = pitch2; - commando_data->unk298 = yaw2; + commando_data->joint_3_target_yaw = yaw2; } } update_joint_animation( diff --git a/src/overlays/shared/enemies/blarg_gun.c b/src/overlays/shared/enemies/blarg_gun.c index 65838efe7d..5b5942f159 100644 --- a/src/overlays/shared/enemies/blarg_gun.c +++ b/src/overlays/shared/enemies/blarg_gun.c @@ -22,6 +22,9 @@ void blarg_gun_update(char *moby) { BLARG_GUN_STATE_INITIALIZE = 0, BLARG_GUN_STATE_MOVING = 1 }; + enum { + BLARG_GUN_STATE_INACTIVE = 2 + }; char *launch_motion_vars = ((char *)MOBY(moby)->pvars); char rotation_workspace[0x70]; char *hs; @@ -32,7 +35,7 @@ void blarg_gun_update(char *moby) { case BLARG_GUN_STATE_INITIALIZE: if (((unsigned short)MOBY(moby)->draw_dist) & 1) MOBY(moby)->flags |= 0x8000; - MOBY(moby)->state = 2; + MOBY(moby)->state = BLARG_GUN_STATE_INACTIVE; break; case BLARG_GUN_STATE_MOVING: joint_index = *(int *)(launch_motion_vars + 4); diff --git a/src/overlays/shared/enemies/blarg_helicopter_spark.c b/src/overlays/shared/enemies/blarg_helicopter_spark.c index 16995b994d..1921816740 100644 --- a/src/overlays/shared/enemies/blarg_helicopter_spark.c +++ b/src/overlays/shared/enemies/blarg_helicopter_spark.c @@ -58,7 +58,7 @@ typedef struct { int flags; unsigned char b18; unsigned char b19; - unsigned short h1A; + unsigned short source_moby_class; float f1C; int i20; } Hit_2D5B88; @@ -139,7 +139,7 @@ void helicopter_spark_update(Moby *moby) { hit.dir.w = 5627.9248f; hit.b18 = state; hit.b19 = state; - hit.h1A = moby->oclass; + hit.source_moby_class = moby->oclass; qcopy(&start_pos, &moby->pos); homing_spark_pvars->vel.z = -(moby->pos.z - homing_spark_pvars->vel.w) / 10.0f; max_climb = frame_time_macro * 8.0f; diff --git a/src/overlays/shared/enemies/blarg_paratrooper.c b/src/overlays/shared/enemies/blarg_paratrooper.c index 5e0e96a37c..6c045d3823 100644 --- a/src/overlays/shared/enemies/blarg_paratrooper.c +++ b/src/overlays/shared/enemies/blarg_paratrooper.c @@ -43,7 +43,7 @@ typedef struct Paratrooper302618 { unsigned char f28; unsigned char f29; u8 pad2A[0x4]; - unsigned char f2E; + unsigned char removal_status; u8 pad2F[0x9]; s32 unk38; u8 pad3C[0x1c]; @@ -52,13 +52,13 @@ typedef struct Paratrooper302618 { unsigned char f5A; u8 pad5B[0x5]; u8 unk60[0x7]; - u8 unk67; + u8 hit_flash_red; u8 pad68[0x8]; u8 unk70[0x10]; f32 unk80; u8 pad84[0x4]; f32 unk88; - f32 unk8C; + f32 knockback_z_speed; s32 unk90; s32 unk94; f32 unk98; @@ -85,25 +85,25 @@ typedef struct Paratrooper302618 { u8 unk120[0x8]; f32 unk128; u8 pad12C[0x34]; - char *f160; - int f164; + char *target_moby; + int target_selection_status; u8 pad168[0x68]; - int f1D0; - int f1D4; - s16 unk1D8; - short f1DA; + int wake_path_index; + int jump_path_index; + s16 target_range_boost_timer; + short hop_count; f32 unk1DC; u8 pad1E0[0x4]; - f32 unk1E4; - float f1E8; - int f1EC; - int f1F0; - int f1F4; - char *f1F8; - int f1FC; + f32 base_target_range; + float projectile_pitch_divisor; + int projectile_fire_timer; + int waypoint_transition_timer; + int destination_waypoint_index; + char *bone_attachment_moby; + int patrol_path_index; u8 pad200[0xc]; - short f20C; - short f20E; + short patrol_waypoint_step; + short projectile_pattern_index; } Paratrooper302618; extern float D_0015ED6C; @@ -186,6 +186,9 @@ void blarg_paratrooper_update(char *moby) { PARATROOPER_STATE_KNOCKBACK_RECOVERY = 10, PARATROOPER_STATE_DEATH_EFFECTS_AND_REMOVE = 11 }; + enum { + PARATROOPER_TARGET_UNAVAILABLE = 2 + }; Paratrooper302618 *paratrooper_private_state = (Paratrooper302618 *)(*(char **)((char *)(moby) + 0x78)); char *path; @@ -207,9 +210,9 @@ void blarg_paratrooper_update(char *moby) { return; path = 0; update_blarg_paratrooper_damage_and_state(moby); - target = paratrooper_private_state->f160; - if (paratrooper_private_state->f1FC != -1) - path = ((char *)l08_paths[paratrooper_private_state->f1FC]); + target = paratrooper_private_state->target_moby; + if (paratrooper_private_state->patrol_path_index != -1) + path = ((char *)l08_paths[paratrooper_private_state->patrol_path_index]); hero = (Hero302618 *)(((char *)&D_0013F350)); if (hero->mode == 61 && hero->timer < scale_game_frames(30) && (*(unsigned char *)((char *)(moby) + 0x20)) != 8 && @@ -221,10 +224,11 @@ void blarg_paratrooper_update(char *moby) { blend_moby_animation(moby, 14, 0, scale_game_frames(11)); (*(unsigned char *)((char *)(moby) + 0x20)) = 8; } - if ((*(unsigned char *)((char *)(moby) + 0x20)) != 0 && paratrooper_private_state->f2E == 2) { + if ((*(unsigned char *)((char *)(moby) + 0x20)) != 0 && + paratrooper_private_state->removal_status == 2) { mark_moby_for_removal(moby); - if (paratrooper_private_state->f1F8) - mark_moby_for_removal(paratrooper_private_state->f1F8); + if (paratrooper_private_state->bone_attachment_moby) + mark_moby_for_removal(paratrooper_private_state->bone_attachment_moby); return; } switch ((*(unsigned char *)((char *)(moby) + 0x20))) { @@ -232,16 +236,16 @@ void blarg_paratrooper_update(char *moby) { float turn_rate; paratrooper_private_state->f29 = 0; paratrooper_private_state->f28 = 1; - paratrooper_private_state->f2E = 1; + paratrooper_private_state->removal_status = 1; paratrooper_private_state->health = 2.0f; paratrooper_private_state->f24 = 2; paratrooper_private_state->f58 = truncate_float_to_s32(15.0f); paratrooper_private_state->f5A = truncate_float_to_s32(12.0f); - if (paratrooper_private_state->f1D0 == -1) { + if (paratrooper_private_state->wake_path_index == -1) { debug_print(paratrooper_invalid_wake_path_format, (*(short *)((char *)(moby) + 0xB2))); goto delete_moby; } - if (paratrooper_private_state->f1D4 == -1) { + if (paratrooper_private_state->jump_path_index == -1) { debug_print(paratrooper_invalid_jump_path_format, (*(short *)((char *)(moby) + 0xB2))); goto delete_moby; } @@ -256,66 +260,76 @@ void blarg_paratrooper_update(char *moby) { paratrooper_private_state->fFC = 0.2f; if (random302618() & 1) (*(unsigned short *)((char *)(moby) + 0x34)) |= 0x8000; - qcopy(&MOBY(moby)->pos, ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10); + qcopy(&MOBY(moby)->pos, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + 0x10); if (path) { int index; short direction; - paratrooper_private_state->f20C = 2 * (random302618() & 1) - 1; + paratrooper_private_state->patrol_waypoint_step = 2 * (random302618() & 1) - 1; index = select_point_index_by_distance(&MOBY(moby)->pos, path, 0.0f) + - paratrooper_private_state->f20C; - direction = paratrooper_private_state->f20C; - paratrooper_private_state->f1F4 = index; + paratrooper_private_state->patrol_waypoint_step; + direction = paratrooper_private_state->patrol_waypoint_step; + paratrooper_private_state->destination_waypoint_index = index; if (index >= (*(int *)((char *)(path) + 0)) || index < 0) { - paratrooper_private_state->f20C = -direction; - paratrooper_private_state->f1F4 = index + 2 * paratrooper_private_state->f20C; + paratrooper_private_state->patrol_waypoint_step = -direction; + paratrooper_private_state->destination_waypoint_index = + index + 2 * paratrooper_private_state->patrol_waypoint_step; } if ((*(unsigned char *)((char *)(moby) + 0x53)) != 2) blend_moby_animation(moby, 2, 0, random302618() % 4 + 7); (*(unsigned char *)((char *)(moby) + 0x20)) = 1; } else (*(unsigned char *)((char *)(moby) + 0x20)) = 3; - paratrooper_private_state->f1DA = 0; + paratrooper_private_state->hop_count = 0; break; } case PARATROOPER_STATE_PATROL_PATH: if (vector_distance_xy(&MOBY(moby)->pos, - path + 0x10 + paratrooper_private_state->f1F4 * 16) < + path + 0x10 + + paratrooper_private_state->destination_waypoint_index * 16) < paratrooper_private_state->fE0) { - short direction = paratrooper_private_state->f20C; - int index = paratrooper_private_state->f1F4 + direction; - paratrooper_private_state->f1F4 = index; + short direction = paratrooper_private_state->patrol_waypoint_step; + int index = paratrooper_private_state->destination_waypoint_index + direction; + paratrooper_private_state->destination_waypoint_index = index; if (index >= (*(int *)((char *)(path) + 0)) || index < 0) { paratrooper_private_state->fE0 = 0.0f; - paratrooper_private_state->f20C = -direction; - paratrooper_private_state->f1F4 = index + 2 * paratrooper_private_state->f20C; + paratrooper_private_state->patrol_waypoint_step = -direction; + paratrooper_private_state->destination_waypoint_index = + index + 2 * paratrooper_private_state->patrol_waypoint_step; } } step_mover_2e3f20(moby, (char *)paratrooper_private_state + 0xD0, - path + 0x10 + paratrooper_private_state->f1F4 * 16, + path + 0x10 + paratrooper_private_state->destination_waypoint_index * 16, pos); - if (target && paratrooper_private_state->f164 != 2 && + if (target && + paratrooper_private_state->target_selection_status != PARATROOPER_TARGET_UNAVAILABLE && fast_dec_timer((char *)paratrooper_private_state + 0x1F0)) { - paratrooper_private_state->f1F4 = select_point_index_by_distance( - &MOBY(moby)->pos, ((char *)l08_paths[paratrooper_private_state->f1D4]), 0.0f); + paratrooper_private_state->destination_waypoint_index = select_point_index_by_distance( + &MOBY(moby)->pos, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]), + 0.0f); (*(unsigned char *)((char *)(moby) + 0x20)) = 2; } break; case PARATROOPER_STATE_APPROACH_WAYPOINT: { float distance; - paratrooper_private_state->f1F4 = select_point_index_by_distance( - &MOBY(moby)->pos, ((char *)l08_paths[paratrooper_private_state->f1D4]), 0.0f); - distance = vector_distance_xy(&MOBY(moby)->pos, - ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10 + - paratrooper_private_state->f1F4 * 16); + paratrooper_private_state->destination_waypoint_index = select_point_index_by_distance( + &MOBY(moby)->pos, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]), + 0.0f); + distance = vector_distance_xy( + &MOBY(moby)->pos, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + 0x10 + + paratrooper_private_state->destination_waypoint_index * 16); if (distance < 1.0f || distance < paratrooper_private_state->fE0) { paratrooper_private_state->fE0 = 0.0f; (*(unsigned char *)((char *)(moby) + 0x20)) = 3; } else { step_mover_2e3f20(moby, (char *)paratrooper_private_state + 0xD0, - ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10 + - paratrooper_private_state->f1F4 * 16, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + + 0x10 + paratrooper_private_state->destination_waypoint_index * 16, pos); if ((*(unsigned char *)((char *)(moby) + 0x53)) != 2) blend_moby_animation(moby, 2, 0, random302618() % 4 + 7); @@ -343,8 +357,8 @@ void blarg_paratrooper_update(char *moby) { blend_moby_animation(moby, newanim, 0, ticks + random302618() % 7); } } - if (hops302618 < paratrooper_private_state->f1DA) { - paratrooper_private_state->f1DA = 0; + if (hops302618 < paratrooper_private_state->hop_count) { + paratrooper_private_state->hop_count = 0; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 10) { int ticks = scale_game_frames(7); blend_moby_animation( @@ -352,14 +366,16 @@ void blarg_paratrooper_update(char *moby) { } (*(unsigned char *)((char *)(moby) + 0x20)) = 9; } else if (target) { - if (paratrooper_private_state->f164 != 2 && + if (paratrooper_private_state->target_selection_status != + PARATROOPER_TARGET_UNAVAILABLE && fast_dec_timer((char *)paratrooper_private_state + 0x1F0)) { qcopy((char *)paratrooper_private_state + 0x1C0, &MOBY(moby)->pos); - paratrooper_private_state->f1F4 = (paratrooper_private_state->f1F4 + 1) & 1; + paratrooper_private_state->destination_waypoint_index = + (paratrooper_private_state->destination_waypoint_index + 1) & 1; (*(unsigned char *)((char *)(moby) + 0x20)) = 4; fast_vec_sub(pos, - ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10 + - paratrooper_private_state->f1F4 * 16, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + + 0x10 + paratrooper_private_state->destination_waypoint_index * 16, &MOBY(moby)->pos); if (fast_vec_dot(moby + 0xD0, pos) < 0.0f) { if ((*(unsigned char *)((char *)(moby) + 0x53)) != 18) @@ -400,8 +416,8 @@ void blarg_paratrooper_update(char *moby) { progress = 0.0f; lerp_vector(pos, (char *)paratrooper_private_state + 0x1C0, - ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10 + - paratrooper_private_state->f1F4 * 16, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + 0x10 + + paratrooper_private_state->destination_waypoint_index * 16, progress); arc = 2.0f * (progress - 0.5f); pos[2] += height302618 * (1.0f - arc * arc); @@ -412,8 +428,8 @@ void blarg_paratrooper_update(char *moby) { pos[2] += 1.0f; attack_vector_or_ray_endpoint[2] += 0.75f; collision_line(pos, attack_vector_or_ray_endpoint, 0, moby, 0); - if (hops302618 < paratrooper_private_state->f1DA) { - paratrooper_private_state->f1DA = 0; + if (hops302618 < paratrooper_private_state->hop_count) { + paratrooper_private_state->hop_count = 0; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 10) { blend_moby_animation(moby, 10, 2, random302618() % 4 + 5); } @@ -424,12 +440,12 @@ void blarg_paratrooper_update(char *moby) { (*(unsigned char *)((char *)(moby) + 0x20)) = 3; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(5)); - paratrooper_private_state->f1F0 = + paratrooper_private_state->waypoint_transition_timer = truncate_float_to_s32(scale_time(random_float_between(45.0f, 90.0f))); } else { - paratrooper_private_state->f1E8 = 1.0f; + paratrooper_private_state->projectile_pitch_divisor = 1.0f; (*(unsigned char *)((char *)(moby) + 0x20)) = 5; - paratrooper_private_state->f20E = 0; + paratrooper_private_state->projectile_pattern_index = 0; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 6) blend_moby_animation(moby, 6, 0, scale_game_frames(10)); } @@ -439,46 +455,49 @@ void blarg_paratrooper_update(char *moby) { case PARATROOPER_STATE_FIRE_PROJECTILES: if (vector_distance_xy(&MOBY(moby)->pos, target + 0x10) < melee302618) { (*(unsigned char *)((char *)(moby) + 0x20)) = 7; - paratrooper_private_state->f1EC = 0; + paratrooper_private_state->projectile_fire_timer = 0; if ((*(unsigned char *)((char *)(moby) + 0x53)) == 13) break; goto animate_melee; } else if (fast_dec_timer((char *)paratrooper_private_state + 0x1EC)) { - paratrooper_private_state->f1EC = scale_game_frames( + paratrooper_private_state->projectile_fire_timer = scale_game_frames( delay302618 + truncate_float_to_s32(D_L08_0015F5D4 * 1.3f + D_L08_0015F5D0)); - paratrooper_private_state->f1E8 += accel302618; + paratrooper_private_state->projectile_pitch_divisor += accel302618; if ((D_L08_0015F5D4 < 0.8f && D_L08_0015F5D0 < 0.8f) || - !((*(unsigned short *)¶trooper_private_state->f20E) & 1)) { + !((*(unsigned short *)¶trooper_private_state->projectile_pattern_index) & 1)) { char *shot; - moby_point_position(paratrooper_private_state->f1F8, 0, pos); + moby_point_position(paratrooper_private_state->bone_attachment_moby, 0, pos); attack_vector_or_ray_endpoint[0] = fast_cos((*(float *)((char *)(moby) + 0x48))) * (speed302618 * D_0015ED6C); attack_vector_or_ray_endpoint[1] = fast_sin((*(float *)((char *)(moby) + 0x48))) * (speed302618 * D_0015ED6C); attack_vector_or_ray_endpoint[2] = 0.0f; attack_vector_or_ray_endpoint[2] = - (-1.0f / paratrooper_private_state->f1E8) * (speed302618 * D_0015ED6C); - shot = spawn_paratrooper_projectile(attack_vector_or_ray_endpoint, - pos, - moby, - target, - scale_game_frames(180), - paratrooper_private_state->f20E); + (-1.0f / paratrooper_private_state->projectile_pitch_divisor) * + (speed302618 * D_0015ED6C); + shot = spawn_paratrooper_projectile( + attack_vector_or_ray_endpoint, + pos, + moby, + target, + scale_game_frames(180), + paratrooper_private_state->projectile_pattern_index); if (shot) (*(float *)((char *)(shot) + 0x2C)) *= 1.7f; } - paratrooper_private_state->f20E = - (*(unsigned short *)¶trooper_private_state->f20E) + 1; - if (paratrooper_private_state->f20E >= 5) - paratrooper_private_state->f20E = 0; - if (paratrooper_private_state->f1E8 > 20.0f) { + paratrooper_private_state->projectile_pattern_index = + (*(unsigned short *)¶trooper_private_state->projectile_pattern_index) + 1; + if (paratrooper_private_state->projectile_pattern_index >= 5) + paratrooper_private_state->projectile_pattern_index = 0; + if (paratrooper_private_state->projectile_pitch_divisor > 20.0f) { qcopy((char *)paratrooper_private_state + 0x1C0, &MOBY(moby)->pos); - (*(unsigned short *)¶trooper_private_state->f1DA)++; - paratrooper_private_state->f1F4 = (paratrooper_private_state->f1F4 + 1) & 1; + (*(unsigned short *)¶trooper_private_state->hop_count)++; + paratrooper_private_state->destination_waypoint_index = + (paratrooper_private_state->destination_waypoint_index + 1) & 1; (*(unsigned char *)((char *)(moby) + 0x20)) = 4; fast_vec_sub(pos, - ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10 + - paratrooper_private_state->f1F4 * 16, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + + 0x10 + paratrooper_private_state->destination_waypoint_index * 16, &MOBY(moby)->pos); if (fast_vec_dot(moby + 0xD0, pos) < 0.0f) { if ((*(unsigned char *)((char *)(moby) + 0x53)) != 18) @@ -503,12 +522,13 @@ void blarg_paratrooper_update(char *moby) { D_0015ED6C * 12.566371f); frame = compute_interpolated_record_value(moby); if (frame > 12.0f && frame < 23.0f && (*(float *)((char *)(moby) + 0x54)) == 0.0f) { - fast_vec_sub( - pos, ((char *)l08_paths[paratrooper_private_state->f1D4]) + 0x10, &MOBY(moby)->pos); + fast_vec_sub(pos, + ((char *)l08_paths[paratrooper_private_state->jump_path_index]) + 0x10, + &MOBY(moby)->pos); FUN_L00_0025f730(pos, D_0015ED6C * 24.0f); FUN_L00_00258830_c(moby, pos, shove302618, shove_rate302618, 0.0f, 0); } else if ((*(unsigned char *)((char *)(moby) + 0x70)) & 2) { - paratrooper_private_state->f1F0 = + paratrooper_private_state->waypoint_transition_timer = truncate_float_to_s32(scale_time(random_float_between(45.0f, 90.0f))); (*(unsigned char *)((char *)(moby) + 0x20)) = 3; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 0) @@ -563,9 +583,9 @@ void blarg_paratrooper_update(char *moby) { blend_moby_animation(moby, 13, 0, random302618() % 4 + 8); } } else { - paratrooper_private_state->f1E8 = 1.0f; + paratrooper_private_state->projectile_pitch_divisor = 1.0f; (*(unsigned char *)((char *)(moby) + 0x20)) = 5; - paratrooper_private_state->f20E = 0; + paratrooper_private_state->projectile_pattern_index = 0; if ((*(unsigned char *)((char *)(moby) + 0x53)) != 6) { int ticks = scale_game_frames(10); blend_moby_animation( @@ -593,8 +613,8 @@ void blarg_paratrooper_update(char *moby) { FUN_L00_00263fd8_c( moby, 0x69E, &MOBY(moby)->pos, rotation, 0, 0, 0.0f, color, color, color); mark_moby_for_removal(moby); - if (paratrooper_private_state->f1F8) - mark_moby_for_removal(paratrooper_private_state->f1F8); + if (paratrooper_private_state->bone_attachment_moby) + mark_moby_for_removal(paratrooper_private_state->bone_attachment_moby); } break; } @@ -609,6 +629,17 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { PARATROOPER_HIT_REACTION_RECOVERY_KNOCKBACK = 3, PARATROOPER_HIT_REACTION_NONE = 11 }; + enum { + PARATROOPER_STATE_INITIALIZE = 0, + PARATROOPER_STATE_HOP_BETWEEN_WAYPOINTS = 4, + PARATROOPER_STATE_FIRE_PROJECTILES = 5, + PARATROOPER_STATE_MELEE_ATTACK = 7, + PARATROOPER_STATE_KNOCKBACK_RECOVERY = 10, + PARATROOPER_STATE_DEATH_EFFECTS_AND_REMOVE = 11 + }; + enum { + PARATROOPER_HIT_STATUS_NO_HIT_OR_SUPPRESSED = 1 + }; Paratrooper302618 *paratrooper_instance_state; char *target, *child, *attached, *chased; float pos[4] __attribute__((aligned(16))); @@ -618,7 +649,7 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { float angle, distance, height, dx, dy; paratrooper_instance_state = (Paratrooper302618 *)MOBY(moby)->pvars; - if (MOBY(moby)->state == 0) + if (MOBY(moby)->state == PARATROOPER_STATE_INITIALIZE) return; { float timer_scale = D_L08_001621B0 * frame_time; @@ -627,23 +658,23 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { paratrooper_instance_state->unkF4 = timer_scale; } - if (paratrooper_instance_state->f1F8 == 0) { + if (paratrooper_instance_state->bone_attachment_moby == 0) { child = create_moby(0x401); - paratrooper_instance_state->f1F8 = child; + paratrooper_instance_state->bone_attachment_moby = child; if (child != 0) { *(short *)(child + 0x32) = 0x40; - *(unsigned char *)(paratrooper_instance_state->f1F8 + 0x30) = 0x40; - *(unsigned char *)(paratrooper_instance_state->f1F8 + 0x31) = 1; - *(unsigned short *)(paratrooper_instance_state->f1F8 + 0x34) |= 0x100; + *(unsigned char *)(paratrooper_instance_state->bone_attachment_moby + 0x30) = 0x40; + *(unsigned char *)(paratrooper_instance_state->bone_attachment_moby + 0x31) = 1; + *(unsigned short *)(paratrooper_instance_state->bone_attachment_moby + 0x34) |= 0x100; moby_point_position(moby, 4, pos); - qcopy(paratrooper_instance_state->f1F8 + 0x10, pos); + qcopy(paratrooper_instance_state->bone_attachment_moby + 0x10, pos); } MOBY(moby)->flags |= 0x1000; } else { moby_point_position(moby, 4, pos); build_moby_bone_transform(moby, 4, matrix); - copy_matrix3x4(paratrooper_instance_state->f1F8 + 0xc0, matrix); - attached = paratrooper_instance_state->f1F8; + copy_matrix3x4(paratrooper_instance_state->bone_attachment_moby + 0xc0, matrix); + attached = paratrooper_instance_state->bone_attachment_moby; qcopy(attached + 0x10, pos); update_entity(attached); } @@ -652,7 +683,8 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { target = find_moby_hit(moby, 0x330000, 0); reaction = resolve_moby_hit_response( moby, target, ¶trooper_instance_state->health, 0, &hit_state, &damage, 0, 4); - if (hit_state != 1 && MOBY(moby)->state != 11) { + if (hit_state != PARATROOPER_HIT_STATUS_NO_HIT_OR_SUPPRESSED && + MOBY(moby)->state != PARATROOPER_STATE_DEATH_EFFECTS_AND_REMOVE) { { float health = paratrooper_instance_state->health - damage; paratrooper_instance_state->health = health; @@ -679,7 +711,7 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { break; case 9: case 10: - paratrooper_instance_state->unk67 = 0xfa; + paratrooper_instance_state->hit_flash_red = 0xfa; break; case PARATROOPER_HIT_REACTION_RECOVERY_KNOCKBACK: case 4: @@ -690,7 +722,7 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { float pose_scale = l08_paratrooper_recovery_knockback_xy_speed * frame_time; float timer_scale = frame_time * 3.0f; paratrooper_instance_state->unk88 = pose_scale; - paratrooper_instance_state->unk8C = timer_scale; + paratrooper_instance_state->knockback_z_speed = timer_scale; paratrooper_instance_state->unkC0 = 5.0f; paratrooper_instance_state->unkC4 = 10.0f; } @@ -705,11 +737,11 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { trooper_knockback_arc(pos, &knock_angle, (float *)(¶trooper_instance_state->unk88), - (float *)(¶trooper_instance_state->unk8C)); + (float *)(¶trooper_instance_state->knockback_z_speed)); trooper_start_knockback( moby, ¶trooper_instance_state->unk70, knock_angle, 8, 1, 0); - MOBY(moby)->state = 10; - paratrooper_instance_state->unk67 = 0x78; + MOBY(moby)->state = PARATROOPER_STATE_KNOCKBACK_RECOVERY; + paratrooper_instance_state->hit_flash_red = 0x78; break; case PARATROOPER_HIT_REACTION_LETHAL: case PARATROOPER_HIT_REACTION_DEATH_KNOCKBACK: { @@ -724,7 +756,7 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { timer_scale = timer_rate * step; angle_scale = angle_rate * step; paratrooper_instance_state->unk98 = 0.25f; - paratrooper_instance_state->unk8C = angle_scale; + paratrooper_instance_state->knockback_z_speed = angle_scale; paratrooper_instance_state->unk80 = pose_scale; paratrooper_instance_state->unk88 = timer_scale; paratrooper_instance_state->unkC0 = 11.0f; @@ -742,11 +774,11 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { trooper_knockback_arc(pos, &second_knock_angle, (float *)(¶trooper_instance_state->unk88), - (float *)(¶trooper_instance_state->unk8C)); + (float *)(¶trooper_instance_state->knockback_z_speed)); trooper_start_knockback( moby, ¶trooper_instance_state->unk70, second_knock_angle, 12, 1, 0); - MOBY(moby)->state = 11; - paratrooper_instance_state->unk67 = 0xf0; + MOBY(moby)->state = PARATROOPER_STATE_DEATH_EFFECTS_AND_REMOVE; + paratrooper_instance_state->hit_flash_red = 0xf0; spawn_randomized_bolt_drop(moby, 2, 3, 0, -1); break; default: @@ -761,18 +793,18 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { if (paratrooper_instance_state->unk38 != 0) { angle = random_float_between(180.0f, 240.0f); angle = scale_time(angle); - paratrooper_instance_state->unk1D8 = (short)truncate_float_to_s32(angle); + paratrooper_instance_state->target_range_boost_timer = (short)truncate_float_to_s32(angle); paratrooper_instance_state->unk38 = 0; } - fast_dec_timer_s16((short *)(¶trooper_instance_state->unk1D8)); - if (paratrooper_instance_state->unk1D8 != 0) - paratrooper_instance_state->unk1DC = paratrooper_instance_state->unk1E4 + 6.0f; + fast_dec_timer_s16((short *)(¶trooper_instance_state->target_range_boost_timer)); + if (paratrooper_instance_state->target_range_boost_timer != 0) + paratrooper_instance_state->unk1DC = paratrooper_instance_state->base_target_range + 6.0f; else - paratrooper_instance_state->unk1DC = paratrooper_instance_state->unk1E4; + paratrooper_instance_state->unk1DC = paratrooper_instance_state->base_target_range; if (random_integer_below(4) == 0) { { - char *path = ((char *)l08_paths[paratrooper_instance_state->f1D0]); + char *path = ((char *)l08_paths[paratrooper_instance_state->wake_path_index]); reaction = activate_effect_l08(moby, ¶trooper_instance_state->unk120, paratrooper_instance_state->unk1DC, @@ -785,23 +817,25 @@ void update_blarg_paratrooper_damage_and_state(char *moby) { distance = vector_distance_xy(&MOBY(moby)->pos, ¶trooper_instance_state->unk120); if (paratrooper_instance_state->unk1DC < distance || 3.0f < absolute_float(MOBY(moby)->pos.z - paratrooper_instance_state->unk128)) - paratrooper_instance_state->f164 = 2; + paratrooper_instance_state->target_selection_status = 2; } } else { - chased = paratrooper_instance_state->f160; + chased = paratrooper_instance_state->target_moby; if (chased != 0 && *(unsigned char *)(chased + 0x20) != 0xfe && *(unsigned char *)(chased + 0x20) != 0xfd) { qcopy(¶trooper_instance_state->unk120, chased + 0x10); } else { - paratrooper_instance_state->f160 = 0; - paratrooper_instance_state->f164 = 2; + paratrooper_instance_state->target_moby = 0; + paratrooper_instance_state->target_selection_status = 2; } } - if (*(int *)¶trooper_instance_state->f160 == 0) - paratrooper_instance_state->f160 = (char *)hero.moby; + if (*(int *)¶trooper_instance_state->target_moby == 0) + paratrooper_instance_state->target_moby = (char *)hero.moby; state = MOBY(moby)->state; - if (state == 0 || state == 5 || state == 7 || state == 4) { + if (state == PARATROOPER_STATE_INITIALIZE || state == PARATROOPER_STATE_FIRE_PROJECTILES || + state == PARATROOPER_STATE_MELEE_ATTACK || + state == PARATROOPER_STATE_HOP_BETWEEN_WAYPOINTS) { height = probe_ground_height(&MOBY(moby)->pos, 0, 0.5f); if (height < MOBY(moby)->pos.z) MOBY(moby)->pos.z = height; diff --git a/src/overlays/shared/enemies/blarg_space_commando.c b/src/overlays/shared/enemies/blarg_space_commando.c index c096d6b189..2a3b05a893 100644 --- a/src/overlays/shared/enemies/blarg_space_commando.c +++ b/src/overlays/shared/enemies/blarg_space_commando.c @@ -105,7 +105,8 @@ extern f32 D_L06_0015F580[] MACRO_ADDR; extern void moby_point_position(struct Moby *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern void FUN_L00_00258278(struct Moby *, f32, f32 *, f32, f32, f32); -extern s32 FUN_L00_00258b50(struct Moby *, MoveCtl *, void *, void *, f32); +extern s32 move_moby_with_ground_and_collision_checks( + struct Moby *, MoveCtl *, void *, void *, f32) __asm__("FUN_L00_00258b50"); extern void make_hit_descriptor(ShotInfo *, struct Moby *, s32, void *, f32) __asm__("FUN_L00_00259888"); extern void sweep_hit_segment( @@ -131,7 +132,7 @@ extern void spawn_explosion(struct Moby *, s32, s32, s32) __asm__("FUN_L00_0025e450"); -extern s32 FUN_L00_00261b48(s32, void *, void *, void *); +extern s32 path_8808(s32, void *, void *, void *) __asm__("FUN_L00_00261b48"); extern void resolve_point_path_segment_xy_clearance(s32, void *, void *, f32) __asm__("FUN_L00_00261d78"); extern void FUN_L00_00263ac8(struct Moby *, s32, void *, f32); @@ -265,11 +266,11 @@ void blarg_space_commando_update(struct Moby *moby) { movement_input_or_output_or_melee_origin.f[1] = fast_sin(moby->rot.z) * route_destination_distance; movement_input_or_output_or_melee_origin.f[2] = 0.0f; - FUN_L00_00258b50(moby, - &blarg_commando_state->ctl, - &movement_input_or_output_or_melee_origin, - &movement_output_or_hit_vector_or_path_point, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &blarg_commando_state->ctl, + &movement_input_or_output_or_melee_origin, + &movement_output_or_hit_vector_or_path_point, + 1.0f); } break; case BLARG_COMMANDO_STATE_RANGED_ATTACK_WINDUP: @@ -388,17 +389,17 @@ void blarg_space_commando_update(struct Moby *moby) { position_or_movement_vector.f[0] = 2.0f * fast_cos(moby->rot.z); position_or_movement_vector.f[1] = 2.0f * fast_sin(moby->rot.z); position_or_movement_vector.f[2] = 0.0f; - FUN_L00_00258b50(moby, - &blarg_commando_state->ctl, - &position_or_movement_vector, - &movement_input_or_output_or_melee_origin, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &blarg_commando_state->ctl, + &position_or_movement_vector, + &movement_input_or_output_or_melee_origin, + 1.0f); resolve_point_path_segment_xy_clearance( blarg_commando_state->path, &moby->pos, &moby->pos, 0.75f); - if (FUN_L00_00261b48(blarg_commando_state->path, - &moby->pos, - &target->pos, - &movement_output_or_hit_vector_or_path_point) != 0 && + if (path_8808(blarg_commando_state->path, + &moby->pos, + &target->pos, + &movement_output_or_hit_vector_or_path_point) != 0 && fast_vec_dist(&moby->pos, &movement_output_or_hit_vector_or_path_point) < 0.8f) { near = 1; } @@ -462,11 +463,11 @@ void blarg_space_commando_update(struct Moby *moby) { moby->rot.z, fast_arc_tan(blarg_commando_state->home.f[0] - moby->pos.x, blarg_commando_state->home.f[1] - moby->pos.y)) < 0.7853982f) { - FUN_L00_00258b50(moby, - &blarg_commando_state->ctl, - &position_or_movement_vector, - &movement_input_or_output_or_melee_origin, - 1.0f); + move_moby_with_ground_and_collision_checks(moby, + &blarg_commando_state->ctl, + &position_or_movement_vector, + &movement_input_or_output_or_melee_origin, + 1.0f); resolve_point_path_segment_xy_clearance( blarg_commando_state->path, &moby->pos, &moby->pos, 0.75f); } diff --git a/src/overlays/shared/enemies/bomb_spawner.c b/src/overlays/shared/enemies/bomb_spawner.c index ad69885be6..e6708a1c94 100644 --- a/src/overlays/shared/enemies/bomb_spawner.c +++ b/src/overlays/shared/enemies/bomb_spawner.c @@ -30,35 +30,35 @@ typedef struct Data_2C0330 { char pad5B[5]; short f60[3]; char b66; - unsigned char b67; + unsigned char hit_effect_blend_target; char pad68[8]; char f70[0x12]; - unsigned char b82; - unsigned char b83; - unsigned char b84; - unsigned char b85; + unsigned char spawn_trigger_mode; + unsigned char bomb_spawn_options; + unsigned char proximity_activation_mode; + unsigned char spawn_target_mode; unsigned char count; unsigned char max; short timer; - short h8A; + short spawn_interval_frames; short h8C; char pad8E[2]; - float f90; + float spawn_distance_limit; char pad94[8]; - float f9C; + float activation_distance_threshold; int pts[4]; char padB0[0x20]; - int fD0; + int spawn_trigger_volume_index; char padD4[8]; - float fDC; + float trajectory_gravity; char padE0[4]; - float fE4; + float launch_speed_distance_factor; int ids[18]; } Data_2C0330; typedef struct { char pad0[0x2C]; - float f2C; + float hit_damage; } Hit_2C0330; void mark_moby_for_removal(struct Obj *obj) __asm__("FUN_0020c828"); @@ -239,17 +239,18 @@ void bomb_spawner_update(struct Moby *moby) { } } reference_distance_xy = vector_distance_xy(&moby->pos, D_0013E533_2bef68 + 0xE9D); - near1 = reference_distance_xy < spawner_data->f9C; - near2 = reference_distance_xy < spawner_data->f90; + near1 = reference_distance_xy < spawner_data->activation_distance_threshold; + near2 = reference_distance_xy < spawner_data->spawn_distance_limit; spawn = 0; timerDone = fast_dec_timer_s16(&spawner_data->timer) != 0; inVol = 0; room = spawner_data->count < spawner_data->max; - if (spawner_data->fD0 != -1) { - inVol = is_point_inside_clip_volume(D_0013E533_2bef68 + 0xE9D, spawner_data->fD0) != 0; + if (spawner_data->spawn_trigger_volume_index != -1) { + inVol = is_point_inside_clip_volume(D_0013E533_2bef68 + 0xE9D, + spawner_data->spawn_trigger_volume_index) != 0; } cond = inVol | near2; - switch (spawner_data->b82) { + switch (spawner_data->spawn_trigger_mode) { case SPAWNER_TRIGGER_DISTANCE_ONLY: cond = near1; break; @@ -259,21 +260,21 @@ void bomb_spawner_update(struct Moby *moby) { case SPAWNER_TRIGGER_VOLUME_OR_DISTANCE: break; } - if (spawner_data->h8A == 0 && spawner_data->count != 0) { + if (spawner_data->spawn_interval_frames == 0 && spawner_data->count != 0) { room = 0; } r = (Hit_2C0330 *)find_moby_hit(moby, 0xC30000, 0); resolve_moby_hit_response(moby, r, &spawner_data->hp, 0, &damage_query_status, 0, 0, 4); if (damage_query_status >= HIT_STATUS_DAMAGE_PROCESSING_THRESHOLD) { - float remaining_health = spawner_data->hp - r->f2C; + float remaining_health = spawner_data->hp - r->hit_damage; spawner_data->hp = remaining_health; if (remaining_health > 0.0f) { - spawner_data->b67 = 0x5A; + spawner_data->hit_effect_blend_target = 0x5A; trooper_anim_update(moby, spawner_data->f60); } else { mark_moby_for_removal_cf(moby, 0, -1); moby->state = SPAWNER_DESTROY; - spawner_data->b67 = 0x78; + spawner_data->hit_effect_blend_target = 0x78; trooper_anim_update(moby, spawner_data->f60); } } @@ -301,7 +302,7 @@ void bomb_spawner_update(struct Moby *moby) { } case SPAWNER_WAIT_FOR_PROXIMITY: if (near1) { - switch (spawner_data->b84) { + switch (spawner_data->proximity_activation_mode) { case SPAWNER_ACTIVATION_ENTER_SPAWN_ENABLED: moby->state = SPAWNER_SPAWN_ENABLED; break; @@ -384,10 +385,10 @@ void bomb_spawner_update(struct Moby *moby) { if (spawn && cond && timerDone && room) { int *used_point_flags = used; memset(used_point_flags, 0, 0x10); - while (spawner_data->h8A == 0 ? spawner_data->count < spawner_data->max - : spawner_data->timer == 0) { + while (spawner_data->spawn_interval_frames == 0 ? spawner_data->count < spawner_data->max + : spawner_data->timer == 0) { moby_point_position(moby, 0, &launch_origin); - switch (spawner_data->b85) { + switch (spawner_data->spawn_target_mode) { case SPAWNER_TARGET_COUNT_ANGULAR_SPREAD: { float target_spread_angle; float rad; @@ -396,7 +397,7 @@ void bomb_spawner_update(struct Moby *moby) { convert_integer_to_float(spawner_data->max + 1) - 3.1415927f); rad = vector_distance_xy(&moby->pos, D_0013E533_2bef68 + 0xE9D) * 0.5f; - if (spawner_data->b83 & 8) { + if (spawner_data->bomb_spawn_options & 8) { rad = random_float_between(rad, 3.0f); } if (rad < 3.0f) { @@ -405,7 +406,8 @@ void bomb_spawner_update(struct Moby *moby) { launch_velocity.x = fast_cos(target_spread_angle) * rad; launch_velocity.y = fast_sin(target_spread_angle) * rad; launch_velocity.z = 0.0f; - clamp_vector_length(&launch_velocity, &launch_velocity, spawner_data->f90); + clamp_vector_length( + &launch_velocity, &launch_velocity, spawner_data->spawn_distance_limit); fast_vec_add(&target_position, &launch_origin, &launch_velocity); target_ground_height = probe_ground_height(&target_position, 0, 0.5f); if (target_ground_height != 0.0f) { @@ -419,14 +421,15 @@ void bomb_spawner_update(struct Moby *moby) { launch_velocity.z = 0.0f; fast_vec_scale(&launch_velocity, &launch_velocity, 0.5f); len = fast_vec_length(&launch_velocity); - if (spawner_data->b83 & 8) { + if (spawner_data->bomb_spawn_options & 8) { fast_vec_normalize( &launch_velocity, &launch_velocity, random_float_between(len, 3.0f)); } if (fast_vec_length(&launch_velocity) < 3.0f) { fast_vec_normalize(&launch_velocity, &launch_velocity, 3.0f); } - clamp_vector_length(&launch_velocity, &launch_velocity, spawner_data->f90); + clamp_vector_length( + &launch_velocity, &launch_velocity, spawner_data->spawn_distance_limit); fast_vec_add(&target_position, &launch_origin, &launch_velocity); target_ground_height = probe_ground_height(&target_position, 0, 0.5f); if (target_ground_height != 0.0f) { @@ -458,7 +461,7 @@ void bomb_spawner_update(struct Moby *moby) { } fast_vec_sub(&launch_velocity, &spawn_position, &launch_origin); len = fast_vec_length(&launch_velocity); - if (spawner_data->b83 & 8) { + if (spawner_data->bomb_spawn_options & 8) { fast_vec_normalize( &launch_velocity, &launch_velocity, random_float_between(len, 3.0f)); } @@ -488,7 +491,7 @@ void bomb_spawner_update(struct Moby *moby) { } fast_vec_sub(&launch_velocity, &spawn_position, &launch_origin); len = fast_vec_length(&launch_velocity); - if (spawner_data->b83 & 8) { + if (spawner_data->bomb_spawn_options & 8) { fast_vec_normalize( &launch_velocity, &launch_velocity, random_float_between(len, 3.0f)); } @@ -519,7 +522,7 @@ void bomb_spawner_update(struct Moby *moby) { } fast_vec_sub(&launch_velocity, &spawn_position, &launch_origin); len = fast_vec_length(&launch_velocity); - if (spawner_data->b83 & 8) { + if (spawner_data->bomb_spawn_options & 8) { fast_vec_normalize( &launch_velocity, &launch_velocity, random_float_between(len, 3.0f)); } @@ -532,27 +535,28 @@ void bomb_spawner_update(struct Moby *moby) { { float speed; char *spawned_moby; - speed = fast_vec_length(&launch_velocity) * (spawner_data->fE4 * frame_scale_macro); + speed = fast_vec_length(&launch_velocity) * + (spawner_data->launch_speed_distance_factor * frame_scale_macro); launch_velocity.z = 0.0f; fast_vec_normalize(&launch_velocity, &launch_velocity, speed); fast_vec_normalize(&spawn_position, &launch_velocity, 0.05f); add_random_offset_to_vector_xyz((float *)&spawn_position, 0.025f); add_vectors(&sampled_point_scratch, &spawn_position, &launch_origin); - launch_velocity.z = - FUN_L00_0025abf0_2bef68(&spawn_position, - &target_position, - 0, - speed, - -(spawner_data->fDC * frame_time_sq_macro)); + launch_velocity.z = FUN_L00_0025abf0_2bef68( + &spawn_position, + &target_position, + 0, + speed, + -(spawner_data->trajectory_gravity * frame_time_sq_macro)); spawned_moby = spawn_class_221_moby((char *)moby, (float *)&spawn_position, (float *)&launch_velocity, spawner_data->h8C, - spawner_data->b83); + spawner_data->bomb_spawn_options); if (spawned_moby != 0) { MOBY(spawned_moby)->update_dist = 0xFF; } - spawner_data->timer = scale_game_frames(spawner_data->h8A); + spawner_data->timer = scale_game_frames(spawner_data->spawn_interval_frames); spawner_data->count++; } } diff --git a/src/overlays/shared/enemies/frog.c b/src/overlays/shared/enemies/frog.c index ac30a43815..8ec9a99955 100644 --- a/src/overlays/shared/enemies/frog.c +++ b/src/overlays/shared/enemies/frog.c @@ -57,37 +57,37 @@ typedef struct FrogVars { f32 unk13C; s32 unk140; s32 unk144; - s32 unk148; + s32 motion_collision_height_offset; u8 pad14C[0x11]; s8 unk15D; u8 pad15E[0x62]; unsigned char *unk1C0; - s32 unk1C4; + s32 pursuit_target_mode; u8 pad1C8[0xc]; f32 turn_angle; f32 turn_range_degrees; u8 pad1DC[0x8]; - f32 unk1E4; - s16 unk1E8; + f32 movement_speed; + s16 blink_countdown; s16 unk1EA; s32 unk1EC; u8 pad1F0[0x8]; s32 path_index; - s32 unk1FC; + s32 wander_destination_timer; s16 unk200; - s16 unk202; + s16 initialize_in_respawn; u8 pad204[0x4]; s16 path_point; - s16 unk20A; + s16 target_selection_frame_slot; char *child; - f32 unk210[4]; + f32 home_position[4]; u8 unk220[0x10]; u8 unk230[0x10]; s16 unk240; s16 unk242; f32 unk244; - f32 unk248; - f32 unk24C; + f32 glow_animation_phase; + f32 path_activation_distance_xy; u8 unk250[0x4]; } FrogVars; @@ -143,7 +143,7 @@ extern char *find_moby_hit(void *, int, int) __asm__("FUN_L00_0025a420"); extern void mark_moby_for_removal(void *) __asm__("FUN_0020c828"); extern float FUN_L00_0025abf0(void *, void *, void *, float, float); extern int step_moby_motion(void *, void *) __asm__("FUN_L00_0025c698"); -extern int FUN_L00_00261b48(int, void *, void *, void *); +extern int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); extern int FUN_L00_002dc9f0(void *, void *); extern void FUN_L00_00257470(void *, int, int); extern void collect_mobies_in_sphere_at_moby_point( @@ -262,6 +262,9 @@ void frog_update(unsigned char *moby) __asm__("FUN_L06_002e8678"); /* Moby class 827 */ void frog_update(unsigned char *moby) { + enum { + FROG_STATE_RESPAWN = 0xF + }; float A[4] __attribute__((aligned(16))); float B[4] __attribute__((aligned(16))); float C[4] __attribute__((aligned(16))); @@ -282,7 +285,7 @@ void frog_update(unsigned char *moby) { frog_instance_vars->unk1EA = 0; MOBY(moby)->flags &= 0xFFBE; } - if (MOBY(moby)->state != 0x10) { + if (MOBY(moby)->state != FROG_STATE_SUCK_CANNON_HELD) { if (*(int *)&D_L06_0015FDF8 != 0) { if (frog_instance_vars->unk242 == 0) return; @@ -303,7 +306,7 @@ void frog_update(unsigned char *moby) { float wait; int spawn_count = l06_frog_frame_slot_assignment_count; int divisor = frog_instance_vars->unk240; - frog_instance_vars->unk20A = spawn_count % 8; + frog_instance_vars->target_selection_frame_slot = spawn_count % 8; l06_frog_frame_slot_assignment_count = spawn_count + 1; if (divisor != 0) { MOBY(moby)->unkB4 = MOBY(moby)->unkB4 / divisor; @@ -311,22 +314,22 @@ void frog_update(unsigned char *moby) { MOBY(moby)->flags |= 0x100; frog_instance_vars->unk58 = truncate_float_to_s32(8.0f); frog_instance_vars->unk5A = truncate_float_to_s32(3.2f); - qcopy(&frog_instance_vars->unk210, &MOBY(moby)->pos); + qcopy(&frog_instance_vars->home_position, &MOBY(moby)->pos); qcopy(&frog_instance_vars->unk230, &MOBY(moby)->pos); qcopy(&frog_instance_vars->unk220, moby + 0x40); frog_instance_vars->path_point = 0; wait = random_float_between(0.5f, 3.0f); frog_instance_vars->unk130 = D_0015ED70 * 20.0f; - frog_instance_vars->unk148 = 0; + frog_instance_vars->motion_collision_height_offset = 0; frog_instance_vars->unk134 = 0; frog_instance_vars->unk140 = 0x200; frog_instance_vars->unk244 = wait; - frog_instance_vars->unk248 = random_angle_radians(); + frog_instance_vars->glow_animation_phase = random_angle_radians(); frog_instance_vars->unkD0 = D_L06_00161BF0; frog_instance_vars->unk29 = 1; if (frog_instance_vars->unk200 != 0) { char *child; - MOBY(moby)->state = 1; + MOBY(moby)->state = FROG_STATE_WAIT_WITH_CHILD; child = create_moby(0x1F4); frog_instance_vars->child = child; if (child == 0) { @@ -344,16 +347,16 @@ void frog_update(unsigned char *moby) { (frog_instance_vars->child)[0x31] = 1; update_entity(frog_instance_vars->child); MOBY(moby)->flags |= 0x41; - } else if (frog_instance_vars->unk202 != 0) { - MOBY(moby)->state = 0xF; + } else if (frog_instance_vars->initialize_in_respawn != 0) { + MOBY(moby)->state = FROG_STATE_RESPAWN; MOBY(moby)->collision = 0; MOBY(moby)->flags = (MOBY(moby)->flags | 0x41) & 0xEFFF; } else if (frog_instance_vars->path_index >= 0) { - MOBY(moby)->state = 3; + MOBY(moby)->state = FROG_STATE_WAIT_TO_FOLLOW_PATH; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, 0); } else { - MOBY(moby)->state = 8; + MOBY(moby)->state = FROG_STATE_WANDER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation( moby, @@ -368,7 +371,7 @@ void frog_update(unsigned char *moby) { if (vector_distance_xy(&MOBY(moby)->pos, target + 0x10) < 4.0f) { MOBY(moby)->flags &= 0xFFBE; destroy_frog_child_moby(moby); - MOBY(moby)->state = 8; + MOBY(moby)->state = FROG_STATE_WANDER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(5)); } @@ -378,8 +381,8 @@ void frog_update(unsigned char *moby) { probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, A); if (vector_distance_xy(((char *)&D_0013F3D0), &MOBY(moby)->pos) < - frog_instance_vars->unk24C) { - MOBY(moby)->state = 4; + frog_instance_vars->path_activation_distance_xy) { + MOBY(moby)->state = FROG_STATE_FOLLOW_PATH; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(5)); } @@ -393,7 +396,7 @@ void frog_update(unsigned char *moby) { fast_vec_sub(A, B, &MOBY(moby)->pos); probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, A); - fast_vec_normalize(C, moby + 0xC0, frog_instance_vars->unk1E4 * D_0015ED6C_gp); + fast_vec_normalize(C, moby + 0xC0, frog_instance_vars->movement_speed * D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, C, 0, 0.3f, 0.3f); transform_vector_by_basis(A, A, moby + 0xC0); if (vector_length_xy(A) < 0.5f) { @@ -405,13 +408,14 @@ void frog_update(unsigned char *moby) { frog_instance_vars->path_point = frog_instance_vars->path_point + 1; return; } - qcopy(&frog_instance_vars->unk210, (char *)path + point_count * 16); - qcopy(&frog_instance_vars->unk230, &frog_instance_vars->unk210); - home_distance_xy = vector_distance_xy(&MOBY(moby)->pos, &frog_instance_vars->unk210); + qcopy(&frog_instance_vars->home_position, (char *)path + point_count * 16); + qcopy(&frog_instance_vars->unk230, &frog_instance_vars->home_position); + home_distance_xy = + vector_distance_xy(&MOBY(moby)->pos, &frog_instance_vars->home_position); return_speed = home_distance_xy / (float)scale_game_frames(30); frog_instance_vars->unk138 = return_speed; frog_instance_vars->unk13C = FUN_L00_0025abf0(&MOBY(moby)->pos, - &frog_instance_vars->unk210, + &frog_instance_vars->home_position, 0, return_speed, -frog_instance_vars->unk130); @@ -423,9 +427,9 @@ void frog_update(unsigned char *moby) { 2, 1, 0, - fast_arc_tan(frog_instance_vars->unk210[0] - MOBY(moby)->pos.x, - frog_instance_vars->unk210[1] - MOBY(moby)->pos.y)); - MOBY(moby)->state = 5; + fast_arc_tan(frog_instance_vars->home_position[0] - MOBY(moby)->pos.x, + frog_instance_vars->home_position[1] - MOBY(moby)->pos.y)); + MOBY(moby)->state = FROG_STATE_JUMP_TO_HOME; } break; } @@ -434,7 +438,7 @@ void frog_update(unsigned char *moby) { blend_frog_rotation_to_facing_frame( (char *)moby, A, (float *)(&frog_instance_vars->motion)); if (step_moby_motion(moby, &frog_instance_vars->motion) & 1) { - MOBY(moby)->state = 7; + MOBY(moby)->state = FROG_STATE_LANDING_ANIMATION; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, 1); MOBY(moby)->anim_time = 1.0f; @@ -444,7 +448,7 @@ void frog_update(unsigned char *moby) { case FROG_STATE_AIRBORNE_MOTION: { int hit = step_moby_motion(moby, &frog_instance_vars->motion); if (hit & 1) { - MOBY(moby)->state = 7; + MOBY(moby)->state = FROG_STATE_LANDING_ANIMATION; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, 1); MOBY(moby)->anim_time = 1.0f; @@ -458,7 +462,7 @@ void frog_update(unsigned char *moby) { } case FROG_STATE_LANDING_ANIMATION: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 8; + MOBY(moby)->state = FROG_STATE_WANDER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(5)); } @@ -466,36 +470,36 @@ void frog_update(unsigned char *moby) { case FROG_STATE_WANDER: if (MOBY(moby)->visible != 0) { if (fast_vec_dist(&MOBY(moby)->pos, &frog_instance_vars->unk230) < 0.05f || - fast_dec_timer((int *)(&frog_instance_vars->unk1FC)) != 0) { + fast_dec_timer((int *)(&frog_instance_vars->wander_destination_timer)) != 0) { float angle = random_angle_radians(); float radius = random_float_between(0.5f, 2.0f); A[0] = fast_cos(angle) * radius; A[1] = fast_sin(angle) * radius; A[2] = 0.0f; - fast_vec_add(&frog_instance_vars->unk230, &frog_instance_vars->unk210, A); - frog_instance_vars->unk1FC = + fast_vec_add(&frog_instance_vars->unk230, &frog_instance_vars->home_position, A); + frog_instance_vars->wander_destination_timer = scale_game_frames(truncate_float_to_s32(random_float_between(45.0f, 75.0f))); } fast_vec_sub(C, &frog_instance_vars->unk230, &MOBY(moby)->pos); probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, C); - fast_vec_normalize(B, moby + 0xC0, frog_instance_vars->unk1E4 * D_0015ED6C_gp); + fast_vec_normalize(B, moby + 0xC0, frog_instance_vars->movement_speed * D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, B, 1, 0.3f, 0.3f); } - if (frog_instance_vars->unk1C4 != 2 && random_integer_below(9) == 0) { + if (frog_instance_vars->pursuit_target_mode != 2 && random_integer_below(9) == 0) { frog_instance_vars->turn_angle = random_float_between(-frog_instance_vars->turn_range_degrees, frog_instance_vars->turn_range_degrees) * 0.017453292f; - MOBY(moby)->state = 9; + MOBY(moby)->state = FROG_STATE_APPROACH_TARGET; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, 0); - } else if (frog_instance_vars->unk1E8 != 0) { + } else if (frog_instance_vars->blink_countdown != 0) { frog_instance_vars->turn_angle = random_float_between(-frog_instance_vars->turn_range_degrees, frog_instance_vars->turn_range_degrees) * 0.017453292f; - MOBY(moby)->state = 10; + MOBY(moby)->state = FROG_STATE_BLINKING_APPROACH_TARGET; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, 0); } @@ -510,14 +514,14 @@ void frog_update(unsigned char *moby) { B[2] = 0.0f; probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, B); - fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->unk1E4 * D_0015ED6C_gp); + fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->movement_speed * D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, A, 1, 0.3f, 0.3f); if (vector_distance_xy(&MOBY(moby)->pos, target + 0x10) < 2.0f) { - MOBY(moby)->state = 0xC; + MOBY(moby)->state = FROG_STATE_ATTACK; if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 4, scale_game_frames(10)); - } else if (frog_instance_vars->unk1C4 == 2) { - MOBY(moby)->state = 0xD; + } else if (frog_instance_vars->pursuit_target_mode == 2) { + MOBY(moby)->state = FROG_STATE_RETURN_HOME; } break; } @@ -534,20 +538,20 @@ void frog_update(unsigned char *moby) { near = 0; probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, B); - fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->unk1E4 * D_0015ED6C_gp); + fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->movement_speed * D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, A, 1, 0.3f, 0.3f); - if (FUN_L00_00261b48(frog_instance_vars->unk1EC, &MOBY(moby)->pos, target + 0x10, D) != 0 && + if (path_8808(frog_instance_vars->unk1EC, &MOBY(moby)->pos, target + 0x10, D) != 0 && fast_vec_dist(&MOBY(moby)->pos, D) < frog_instance_vars->unk244) { near = 1; } - if (frog_instance_vars->unk1E8 == 0) { - MOBY(moby)->state = 0xD; + if (frog_instance_vars->blink_countdown == 0) { + MOBY(moby)->state = FROG_STATE_RETURN_HOME; } else if (near) { - MOBY(moby)->state = 0xB; + MOBY(moby)->state = FROG_STATE_APPROACH_PAUSE; if (MOBY(moby)->prev_seq != 6) blend_moby_animation(moby, 6, 0, scale_game_frames(10)); } else if (vector_distance_xy(&MOBY(moby)->pos, target + 0x10) < 2.0f) { - MOBY(moby)->state = 0xC; + MOBY(moby)->state = FROG_STATE_ATTACK; if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 0, scale_game_frames(10)); } @@ -555,7 +559,7 @@ void frog_update(unsigned char *moby) { } case FROG_STATE_APPROACH_PAUSE: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 0xA; + MOBY(moby)->state = FROG_STATE_BLINKING_APPROACH_TARGET; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(20)); } @@ -571,41 +575,42 @@ void frog_update(unsigned char *moby) { wait = compute_interpolated_record_value(moby); if (MOBY(moby)->seq == MOBY(moby)->prev_seq && wait >= 10.0f && wait <= 15.0f && *(int *)(((char *)&camera_secondary_mode)) != 0x51) { - fast_vec_normalize(A, - moby + 0xC0, - (frog_instance_vars->unk1E4 + frog_instance_vars->unk1E4) * - D_0015ED6C_gp); + fast_vec_normalize( + A, + moby + 0xC0, + (frog_instance_vars->movement_speed + frog_instance_vars->movement_speed) * + D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, A, 1, 0.3f, 0.3f); collect_mobies_in_sphere_at_moby_point(moby, 0, 1, 0.333f, 1.0f, 1.0f, 0, 1, 0); return; } if ((MOBY(moby)->anim_flags & 2) && vector_distance_xy(&MOBY(moby)->pos, target + 0x10) > 2.0f) { - MOBY(moby)->state = 9; + MOBY(moby)->state = FROG_STATE_APPROACH_TARGET; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); } break; } case FROG_STATE_RETURN_HOME: - fast_vec_sub(B, &frog_instance_vars->unk210, &MOBY(moby)->pos); + fast_vec_sub(B, &frog_instance_vars->home_position, &MOBY(moby)->pos); probe_frog_local_z_collision((char *)moby); blend_frog_rotation_to_facing_frame((char *)moby, (float *)D_L06_00174600, B); - fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->unk1E4 * D_0015ED6C_gp); + fast_vec_normalize(A, moby + 0xC0, frog_instance_vars->movement_speed * D_0015ED6C_gp); FUN_L06_002e9b60_c(moby, A, 1, 0.3f, 0.3f); - if (vector_distance_xy(&MOBY(moby)->pos, &frog_instance_vars->unk210) < 2.0f) { - MOBY(moby)->state = 8; + if (vector_distance_xy(&MOBY(moby)->pos, &frog_instance_vars->home_position) < 2.0f) { + MOBY(moby)->state = FROG_STATE_WANDER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); - } else if (frog_instance_vars->unk1C4 != 2) { - MOBY(moby)->state = 9; - } else if (frog_instance_vars->unk1E8 != 0) { - MOBY(moby)->state = 0xA; + } else if (frog_instance_vars->pursuit_target_mode != 2) { + MOBY(moby)->state = FROG_STATE_APPROACH_TARGET; + } else if (frog_instance_vars->blink_countdown != 0) { + MOBY(moby)->state = FROG_STATE_BLINKING_APPROACH_TARGET; } break; case FROG_STATE_SUCK_CANNON_HELD: if (FUN_L00_002dc9f0(moby, &frog_instance_vars->motion) != 0) { - MOBY(moby)->state = 8; + MOBY(moby)->state = FROG_STATE_WANDER; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); frog_instance_vars->unkC8 = 0; diff --git a/src/overlays/shared/enemies/gadgebot.c b/src/overlays/shared/enemies/gadgebot.c index 4c5cf7a4a4..1f660633d3 100644 --- a/src/overlays/shared/enemies/gadgebot.c +++ b/src/overlays/shared/enemies/gadgebot.c @@ -100,7 +100,7 @@ typedef struct GbMoby { } GbMoby; typedef struct { - int i00; + int collision_radius_1024ths; float unk04; float unk08; float unk0C; @@ -114,7 +114,7 @@ typedef struct { float unk2C; float unk30; float unk34; - int i38; + int movement_option_flags; float unk3C; float unk40; float unk44; @@ -138,44 +138,44 @@ typedef struct { float unkE0[4] __attribute__((aligned(16))); float unkF0[4] __attribute__((aligned(16))); unsigned char unk100; - unsigned char unk101; + unsigned char scale_manipulator_attached; char p102[0x1E]; float unk120; float unk124; float unk128; char p12C[0x44]; - GbMoby *unk170; + GbMoby *spawn_container_moby; GbMoby *target; /* nearest mine/box moby found by FUN_L06_002f2910 (0: none) */ char p178[4]; - float unk17C; + float approach_heading_offset; char p180[4]; int unk184; float unk188; - int unk18C; + int attack_target_search_frame; short unk190; char p192[2]; - int unk194; + int attack_substate_timer; short unk198; short target_searched; /* set once FUN_L06_002f2910 has run the search */ - GbMoby *unk19C; + GbMoby *collision_contact_moby; char p1A0[0x40]; GbPaths paths; char p260[0x1C]; - int unk27C; + int selected_path_slot; char p280[4]; - float unk284; + float collision_correction_speed; float unk288; - float unk28C; + float glow_pulse_angle; char p290[0x10]; - int unk2A0[8]; + int follow_gate_moby_indices[8]; int unk2C0[8]; - GbVec unk2E0; - GbVec unk2F0; - float unk300; - GbMoby *unk304; + GbVec position_history_latest; + GbVec position_history_previous; + float ground_height_change_limit; + GbMoby *absorption_owner_moby; float unk308; int target_group; /* moby group searched for targets (-1: whole level list) */ - int unk310; + int configured_path_count; } GbVars; typedef struct { @@ -255,9 +255,10 @@ extern float approach_value(float *p, float target, float maxstep) __asm__("FUN_ extern float fast_add_rotations(float, float); extern float vector_length_xy(void *); extern int coll_sphere(void *, float, int, void *) __asm__("FUN_L00_001f0d60"); -extern int FUN_L00_00258b50(void *, void *, void *, void *, float); -extern int is_moby_in_class_range_500_to_540(void *) __asm__("FUN_L00_0025e3b8"); -extern int test_path_segment_strict_crossing(int, void *, void *) __asm__("FUN_L00_00261968"); +extern int move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); +extern int is_moby_in_class_range_500_to_540(void *) __asm__("FUN_L00_0025e3b8"); +extern int test_path_segment_strict_crossing(int, void *, void *) __asm__("FUN_L00_00261968"); extern int trooper_play_sound(int i, int voice_flags, int moby, int k) __asm__("FUN_L00_0028dc90"); extern int compute_clear_path_point_mask(float, int *, int, int, void *) __asm__("FUN_L01_00276a48"); @@ -395,7 +396,7 @@ void gadgebot_update(GbMoby *moby) { } } if (GB_FLAG != 0) { - if (gadgebot_vars->unk101 == 0) { + if (gadgebot_vars->scale_manipulator_attached == 0) { attach_manipulator((char *)moby, 0, &gadgebot_vars->unk100); } if (moby->state != GADGEBOT_WAIT_FOR_SPAWN_PAD) { @@ -406,7 +407,7 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->unk120 = gadgebot_vars->unk308; gadgebot_vars->unk124 = gadgebot_vars->unk308; gadgebot_vars->unk128 = gadgebot_vars->unk308; - } else if (gadgebot_vars->unk101 != 0) { + } else if (gadgebot_vars->scale_manipulator_attached != 0) { detach_manipulator(moby, &gadgebot_vars->unk100); } switch (moby->state) { @@ -416,21 +417,23 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->unk308 = 1.0f; moby->pos[2] = probe_ground_height(moby->pos, 0, 0.5f); spawn_gadgebot_pad((char *)moby); - gadgebot_vars->unk2F0.q = gadgebot_vars->unk2E0.q = *(OvlQuad *)moby->pos; + gadgebot_vars->position_history_previous.q = gadgebot_vars->position_history_latest.q = + *(OvlQuad *)moby->pos; if (visited52[moby->unkB0 + current_level_index * 16] == 0xFF) { mark_moby_for_removal(moby); return; } - gadgebot_vars->unk170 = (GbMoby *)spawn_gadgebot_spawn_container((char *)moby); + gadgebot_vars->spawn_container_moby = + (GbMoby *)spawn_gadgebot_spawn_container((char *)moby); moby->pos[2] = probe_ground_height(moby->pos, 0, 0.5f); qcopy(gadgebot_vars->unk0, moby->pos); qcopy(gadgebot_vars->unkE0, moby->pos); gadgebot_vars->unk14 = frame_time * 2.0f; gadgebot_vars->unk18 = frame_time * 2.6179938f; - gadgebot_vars->ctl.i00 = 0x12C; + gadgebot_vars->ctl.collision_radius_1024ths = 0x12C; gadgebot_vars->ctl.unk04 = 0.51f; - gadgebot_vars->ctl.unk08 = gadgebot_vars->unk300; - gadgebot_vars->ctl.unk0C = gadgebot_vars->unk300; + gadgebot_vars->ctl.unk08 = gadgebot_vars->ground_height_change_limit; + gadgebot_vars->ctl.unk0C = gadgebot_vars->ground_height_change_limit; gadgebot_vars->ctl.unk24 = frame_time * 3.0f + frame_time * 0.1f; gadgebot_vars->ctl.unk1C = frame_scale_sq * 0.02f; gadgebot_vars->ctl.unk20 = frame_scale_sq * 0.3f; @@ -440,22 +443,24 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->ctl.unk40 = frame_scale_sq * 0.3f; gadgebot_vars->ctl.unk44 = frame_time * 3.1415927f; gadgebot_vars->ctl.i48 = scale_game_frames(4); - gadgebot_vars->ctl.i38 |= 1; + gadgebot_vars->ctl.movement_option_flags |= 1; for (i = 0; i < 16; i++) { if (gadgebot_vars->paths.id[i] >= 0) { - gadgebot_vars->unk310++; + gadgebot_vars->configured_path_count++; } } - gadgebot_vars->unk28C = random_angle_radians(); - gadgebot_vars->unk27C = -1; + gadgebot_vars->glow_pulse_angle = random_angle_radians(); + gadgebot_vars->selected_path_slot = -1; moby->state = GADGEBOT_WAIT_FOR_SPAWN_PAD; moby->unk94 = 0; break; } case GADGEBOT_WAIT_FOR_SPAWN_PAD: - if (gadgebot_vars->unk170 == 0 || gadgebot_vars->unk170->state == 0xFE || - gadgebot_vars->unk170->state == 0xFD || gadgebot_vars->unk170->state >= 2) { - if (gadgebot_vars->unk310 > 0) { + if (gadgebot_vars->spawn_container_moby == 0 || + gadgebot_vars->spawn_container_moby->state == 0xFE || + gadgebot_vars->spawn_container_moby->state == 0xFD || + gadgebot_vars->spawn_container_moby->state >= 2) { + if (gadgebot_vars->configured_path_count > 0) { int i; for (i = 0; i < 16; i++) { @@ -467,16 +472,16 @@ void gadgebot_update(GbMoby *moby) { 1, gadgebot_vars->paths.node[i], moby->pos) != 0) { - gadgebot_vars->unk27C = i; + gadgebot_vars->selected_path_slot = i; } } } } if (GB_FLAG != 0) { gadgebot_position_snapshot_z_offset_gp = 0.35f; - gadgebot_vars->ctl.i00 = 0x177; + gadgebot_vars->ctl.collision_radius_1024ths = 0x177; } else { - gadgebot_vars->ctl.i00 = 0x12C; + gadgebot_vars->ctl.collision_radius_1024ths = 0x12C; gadgebot_position_snapshot_z_offset_gp = 0.27f; } moby->flags = (moby->flags & 0xFFBE) | 0x1000; @@ -485,16 +490,17 @@ void gadgebot_update(GbMoby *moby) { } else { if (hero.vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) { moby->flags |= 0x41; - gadgebot_vars->unk170->flags |= 0x41; + gadgebot_vars->spawn_container_moby->flags |= 0x41; moby->flags &= 0xEFFF; - gadgebot_vars->unk170->flags &= 0xEFFF; - gadgebot_vars->unk170->unk94 = 0; + gadgebot_vars->spawn_container_moby->flags &= 0xEFFF; + gadgebot_vars->spawn_container_moby->unk94 = 0; } else { moby->flags &= 0xFFBE; - gadgebot_vars->unk170->flags &= 0xFFBE; + gadgebot_vars->spawn_container_moby->flags &= 0xFFBE; moby->flags |= 0x1000; - gadgebot_vars->unk170->flags |= 0x1000; - gadgebot_vars->unk170->unk94 = gadgebot_vars->unk170->cls->unk10; + gadgebot_vars->spawn_container_moby->flags |= 0x1000; + gadgebot_vars->spawn_container_moby->unk94 = + gadgebot_vars->spawn_container_moby->cls->unk10; } if (moby->unk31 != 0) { update_gadgebot_glow_effects((char *)moby); @@ -513,8 +519,8 @@ void gadgebot_update(GbMoby *moby) { qcopy(vector_and_hit_scratch, moby->pos); if (current_level_index != 6) { - gadgebot_vars->unk27C = -1; - if (gadgebot_vars->unk310 >= 2) { + gadgebot_vars->selected_path_slot = -1; + if (gadgebot_vars->configured_path_count >= 2) { int i; for (i = 0; i < 16; i++) { @@ -525,7 +531,7 @@ void gadgebot_update(GbMoby *moby) { int *q = D_L06_001B0C30[gadgebot_vars->paths.id[i]]; if (point_in_path_xy(moby->pos, q + 4, *q) != 0) { - gadgebot_vars->unk27C = i; + gadgebot_vars->selected_path_slot = i; } } } @@ -538,14 +544,14 @@ void gadgebot_update(GbMoby *moby) { int *tb; { - int *ca = &gadgebot_vars->unk2A0[j]; + int *ca = &gadgebot_vars->follow_gate_moby_indices[j]; int *cb = &gadgebot_vars->unk2C0[j]; if (*ca == -1 || *cb == -1) { break; } } - ta = &gadgebot_vars->unk2A0[j]; + ta = &gadgebot_vars->follow_gate_moby_indices[j]; tb = &gadgebot_vars->unk2C0[j]; referenced_moby = &(*(GbMoby **)&D_L06_0015FFD8)[*ta]; if (referenced_moby->cls_id == 0x3F7 && referenced_moby->state != 4 && @@ -563,7 +569,7 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->unk184 = 0; gadgebot_vars->unk190 = 0; qcopy(gadgebot_vars->unkF0, moby->pos); - gadgebot_vars->unk17C = randf_sym(0.13962634f, 0.34906584f); + gadgebot_vars->approach_heading_offset = randf_sym(0.13962634f, 0.34906584f); case GADGEBOT_FOLLOW_MOVE_TOWARD_HERO: { int hit; @@ -571,12 +577,12 @@ void gadgebot_update(GbMoby *moby) { blend_moby_animation(moby, 1, 0, scale_game_frames(7)); } *(OvlQuad *)temporary_position = *(OvlQuad *)moby->pos; - if (gadgebot_vars->unk27C >= 0) { + if (gadgebot_vars->selected_path_slot >= 0) { int *p; - if (follow_path(&gadgebot_vars->paths.id[gadgebot_vars->unk27C], + if (follow_path(&gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot], 1, - gadgebot_vars->paths.node[gadgebot_vars->unk27C], + gadgebot_vars->paths.node[gadgebot_vars->selected_path_slot], moby->pos, hero.motion.pos.f, position_and_displacement_scratch, @@ -586,10 +592,10 @@ void gadgebot_update(GbMoby *moby) { *(OvlQuad *)path_and_attack_vector = *(OvlQuad *)moby->pos; resolve_point_path_segment_xy_clearance( 0.17f, - gadgebot_vars->paths.id[gadgebot_vars->unk27C], + gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot], moby->pos, path_and_attack_vector); - p = D_L06_001B0C30[gadgebot_vars->paths.id[gadgebot_vars->unk27C]]; + p = D_L06_001B0C30[gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot]]; if (point_in_path_xy(path_and_attack_vector, p + 4, *p) != 0) { *(OvlQuad *)moby->pos = *(OvlQuad *)path_and_attack_vector; } @@ -601,7 +607,7 @@ void gadgebot_update(GbMoby *moby) { fast_add_rotations( fast_arc_tan(position_and_displacement_scratch[0] - moby->pos[0], position_and_displacement_scratch[1] - moby->pos[1]), - gadgebot_vars->unk17C), + gadgebot_vars->approach_heading_offset), &gadgebot_vars->ctl.unk14, frame_scale_sq * 0.07f, frame_scale_sq * 0.3f, @@ -620,11 +626,11 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->ctl.unk24 = frame_time * 3.0f * 1.35f; } if (hero_distance > 0.8f) { - flags = FUN_L00_00258b50(moby, - &gadgebot_vars->ctl, - hero.motion.pos.f, - movement_displacement_output, - 1.0f); + flags = move_moby_with_ground_and_collision_checks(moby, + &gadgebot_vars->ctl, + hero.motion.pos.f, + movement_displacement_output, + 1.0f); } { int ph = ((int)moby >> 8) % 8; @@ -704,7 +710,7 @@ void gadgebot_update(GbMoby *moby) { if (current_level_index != 6) { int i; - gadgebot_vars->unk27C = -1; + gadgebot_vars->selected_path_slot = -1; for (i = 0; i < 16; i++) { if (gadgebot_vars->paths.id[i] >= 0) { int *p = D_L06_001B0C30[gadgebot_vars->paths.id[i]]; @@ -713,7 +719,7 @@ void gadgebot_update(GbMoby *moby) { int *q = D_L06_001B0C30[gadgebot_vars->paths.id[i]]; if (point_in_path_xy(moby->pos, q + 4, *q) != 0) { - gadgebot_vars->unk27C = i; + gadgebot_vars->selected_path_slot = i; } } } @@ -724,12 +730,12 @@ void gadgebot_update(GbMoby *moby) { gadgebot_vars->target = 0; gadgebot_vars->unk198 = 0; gadgebot_vars->target_searched = 0; - gadgebot_vars->unk17C = randf_sym(0.13962634f, 0.34906584f); - gadgebot_vars->unk18C = level_frame_count; + gadgebot_vars->approach_heading_offset = randf_sym(0.13962634f, 0.34906584f); + gadgebot_vars->attack_target_search_frame = level_frame_count; } switch (moby->sub) { case GADGEBOT_ATTACK_SEEK_AND_APPROACH_TARGET: - if (gadgebot_vars->unk18C < level_frame_count) { + if (gadgebot_vars->attack_target_search_frame < level_frame_count) { assign_gadgebot_attack_targets(); } if (gadgebot_vars->target != 0) { @@ -738,12 +744,12 @@ void gadgebot_update(GbMoby *moby) { if (moby->anim != 5) { blend_moby_animation(moby, 5, 0, scale_game_frames(7)); } - if (gadgebot_vars->unk27C >= 0) { + if (gadgebot_vars->selected_path_slot >= 0) { int *p; - if (follow_path(&gadgebot_vars->paths.id[gadgebot_vars->unk27C], + if (follow_path(&gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot], 1, - gadgebot_vars->paths.node[gadgebot_vars->unk27C], + gadgebot_vars->paths.node[gadgebot_vars->selected_path_slot], moby->pos, gadgebot_vars->target->pos, vector_and_hit_scratch, @@ -753,10 +759,10 @@ void gadgebot_update(GbMoby *moby) { *(OvlQuad *)temporary_position = *(OvlQuad *)moby->pos; resolve_point_path_segment_xy_clearance( 0.17f, - gadgebot_vars->paths.id[gadgebot_vars->unk27C], + gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot], moby->pos, temporary_position); - p = D_L06_001B0C30[gadgebot_vars->paths.id[gadgebot_vars->unk27C]]; + p = D_L06_001B0C30[gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot]]; if (point_in_path_xy(temporary_position, p + 4, *p) != 0) { *(OvlQuad *)moby->pos = *(OvlQuad *)temporary_position; } @@ -766,20 +772,20 @@ void gadgebot_update(GbMoby *moby) { approach_heading = fast_add_rotations(fast_arc_tan(vector_and_hit_scratch[0] - moby->pos[0], vector_and_hit_scratch[1] - moby->pos[1]), - gadgebot_vars->unk17C); + gadgebot_vars->approach_heading_offset); position_and_displacement_scratch[0] = fast_cos(approach_heading) * 3.0f; position_and_displacement_scratch[1] = fast_sin(approach_heading) * 3.0f; position_and_displacement_scratch[2] = 0.0f; fast_vec_add(position_and_displacement_scratch, position_and_displacement_scratch, moby->pos); - if (gadgebot_vars->unk27C != -1 && + if (gadgebot_vars->selected_path_slot != -1 && test_path_segment_strict_crossing( - gadgebot_vars->paths.id[gadgebot_vars->unk27C], + gadgebot_vars->paths.id[gadgebot_vars->selected_path_slot], moby->pos, position_and_displacement_scratch) != 0) { step_angle_toward_target( - &gadgebot_vars->unk17C, 0, 0.0f, frame_time * 1.5707964f); + &gadgebot_vars->approach_heading_offset, 0, 0.0f, frame_time * 1.5707964f); } FUN_L00_00258278((char *)moby, approach_heading, @@ -788,11 +794,11 @@ void gadgebot_update(GbMoby *moby) { frame_scale_sq * 0.3f, frame_time * 5.2359877f); gadgebot_vars->ctl.unk24 = frame_time * 4.5f; - if (FUN_L00_00258b50(moby, - &gadgebot_vars->ctl, - gadgebot_vars->target->pos, - movement_displacement_output, - 1.0f) & + if (move_moby_with_ground_and_collision_checks(moby, + &gadgebot_vars->ctl, + gadgebot_vars->target->pos, + movement_displacement_output, + 1.0f) & 0x20) { moby->state = GADGEBOT_STAND_AND_FACE_HERO; *(OvlQuad *)moby->pos = *(OvlQuad *)save0; @@ -814,7 +820,7 @@ void gadgebot_update(GbMoby *moby) { } } else if (gadgebot_vars->target_searched != 0) { gadgebot_vars->target_searched = 0; - gadgebot_vars->unk194 = scale_game_frames(0x3C); + gadgebot_vars->attack_substate_timer = scale_game_frames(0x3C); moby->sub = 4; } break; @@ -836,7 +842,7 @@ void gadgebot_update(GbMoby *moby) { } if (moby->unk70 & 2) { gadgebot_vars->target_searched = 0; - gadgebot_vars->unk194 = scale_game_frames(0x1E); + gadgebot_vars->attack_substate_timer = scale_game_frames(0x1E); moby->sub = 3; } break; @@ -846,23 +852,23 @@ void gadgebot_update(GbMoby *moby) { } if (gadgebot_vars->target_searched != 0 && gadgebot_vars->target == 0) { gadgebot_vars->target_searched = 0; - gadgebot_vars->unk194 = scale_game_frames(0x3C); + gadgebot_vars->attack_substate_timer = scale_game_frames(0x3C); moby->sub = 4; } - if (fast_dec_timer(&gadgebot_vars->unk194) != 0) { + if (fast_dec_timer(&gadgebot_vars->attack_substate_timer) != 0) { if (gadgebot_vars->target != 0) { moby->sub = 1; } } break; case GADGEBOT_ATTACK_WAIT_FOR_TARGET: - if (gadgebot_vars->unk18C < level_frame_count) { + if (gadgebot_vars->attack_target_search_frame < level_frame_count) { assign_gadgebot_attack_targets(); } if (moby->anim != 0) { blend_moby_animation(moby, 0, 0, scale_game_frames(7)); } - if (fast_dec_timer(&gadgebot_vars->unk194) != 0 && + if (fast_dec_timer(&gadgebot_vars->attack_substate_timer) != 0 && gadgebot_vars->target_searched != 0 && gadgebot_vars->target == 0) { moby->state = GADGEBOT_FOLLOW_HERO; moby->sub = 0; @@ -901,11 +907,11 @@ void gadgebot_update(GbMoby *moby) { frame_scale_sq * 0.07f, frame_scale_sq * 0.3f, frame_time * 5.2359877f); - if (FUN_L00_00258b50(moby, - &gadgebot_vars->ctl, - vector_and_hit_scratch, - movement_displacement_output, - 1.0f) & + if (move_moby_with_ground_and_collision_checks(moby, + &gadgebot_vars->ctl, + vector_and_hit_scratch, + movement_displacement_output, + 1.0f) & 0x20) { moby->state = GADGEBOT_STAND_AND_FACE_HERO; *(OvlQuad *)moby->pos = *(OvlQuad *)save0; @@ -922,22 +928,25 @@ void gadgebot_update(GbMoby *moby) { case GADGEBOT_ABSORB_INTO_OWNER: { float rr; - owner_radial_angle = fast_arc_tan(moby->pos[0] - gadgebot_vars->unk304->pos[0], - moby->pos[1] - gadgebot_vars->unk304->pos[1]); - rr = vector_distance_xy(gadgebot_vars->unk304->pos, moby->pos); - step_angle_toward_target( - &owner_radial_angle, 0, gadgebot_vars->unk304->rot, frame_time * 6.2831855f); + owner_radial_angle = + fast_arc_tan(moby->pos[0] - gadgebot_vars->absorption_owner_moby->pos[0], + moby->pos[1] - gadgebot_vars->absorption_owner_moby->pos[1]); + rr = vector_distance_xy(gadgebot_vars->absorption_owner_moby->pos, moby->pos); + step_angle_toward_target(&owner_radial_angle, + 0, + gadgebot_vars->absorption_owner_moby->rot, + frame_time * 6.2831855f); rr -= frame_time * 4.0f; if (rr <= 0.0f) { - GbOwnerVars *ov = gadgebot_vars->unk304->vars; + GbOwnerVars *ov = gadgebot_vars->absorption_owner_moby->vars; if (ov->unk14 > 0) { ov->unk14--; } if (ov->unk14 == 0) { - trooper_play_sound(1, 0, (int)gadgebot_vars->unk304, 0x516); + trooper_play_sound(1, 0, (int)gadgebot_vars->absorption_owner_moby, 0x516); } else { - trooper_play_sound(0, 0, (int)gadgebot_vars->unk304, 0x516); + trooper_play_sound(0, 0, (int)gadgebot_vars->absorption_owner_moby, 0x516); } mark_moby_for_removal(moby); return; @@ -945,8 +954,8 @@ void gadgebot_update(GbMoby *moby) { vector_and_hit_scratch[0] = fast_cos(owner_radial_angle) * rr; vector_and_hit_scratch[1] = fast_sin(owner_radial_angle) * rr; vector_and_hit_scratch[2] = 0.0f; - moby->pos[0] = vector_and_hit_scratch[0] + gadgebot_vars->unk304->pos[0]; - moby->pos[1] = vector_and_hit_scratch[1] + gadgebot_vars->unk304->pos[1]; + moby->pos[0] = vector_and_hit_scratch[0] + gadgebot_vars->absorption_owner_moby->pos[0]; + moby->pos[1] = vector_and_hit_scratch[1] + gadgebot_vars->absorption_owner_moby->pos[1]; if (rr < 1.0f) { moby->scale = moby->cls->unk24 * rr; spawn_source_attached_fading_effect_particle( @@ -1021,7 +1030,8 @@ void gadgebot_update(GbMoby *moby) { saved_control_f24 = gadgebot_vars->ctl.unk24; gadgebot_vars->ctl.unk10 = 0.0f; gadgebot_vars->ctl.unk24 = 0.0f; - FUN_L00_00258b50(moby, &gadgebot_vars->ctl, moby->pos, movement_displacement_output, 1.0f); + move_moby_with_ground_and_collision_checks( + moby, &gadgebot_vars->ctl, moby->pos, movement_displacement_output, 1.0f); gadgebot_vars->ctl.unk10 = saved_control_f10; gadgebot_vars->ctl.unk24 = saved_control_f24; moby->pos[2] = vector_and_hit_scratch[2]; @@ -1038,23 +1048,23 @@ void gadgebot_update(GbMoby *moby) { max = frame_time * 3.0f; step = -fast_vec_length(position_and_displacement_scratch); vendor_spring(&step, - &gadgebot_vars->unk284, + &gadgebot_vars->collision_correction_speed, 0.0f, frame_scale_sq * 0.025f, frame_scale_sq * 0.3f, max); collision_displacement_length = fast_vec_length(position_and_displacement_scratch); - if (collision_displacement_length < gadgebot_vars->unk284) { - gadgebot_vars->unk284 = collision_displacement_length; + if (collision_displacement_length < gadgebot_vars->collision_correction_speed) { + gadgebot_vars->collision_correction_speed = collision_displacement_length; } - if (gadgebot_vars->unk284 < collision_displacement_length) { + if (gadgebot_vars->collision_correction_speed < collision_displacement_length) { fast_vec_normalize(position_and_displacement_scratch, position_and_displacement_scratch, - gadgebot_vars->unk284); + gadgebot_vars->collision_correction_speed); } fast_vec_add(moby->pos, moby->pos, position_and_displacement_scratch); } else { - gadgebot_vars->unk284 = 0.0f; + gadgebot_vars->collision_correction_speed = 0.0f; qcopy(moby->pos, vector_and_hit_scratch); } if (moby->state != GADGEBOT_UPDATE_KNOCKBACK) { @@ -1069,11 +1079,12 @@ void gadgebot_update(GbMoby *moby) { do { qcopy(position_and_displacement_scratch, moby->pos); position_and_displacement_scratch[2] += gadgebot_vars->ctl.unk04; - if (coll_sphere(position_and_displacement_scratch, - convert_integer_to_float(gadgebot_vars->ctl.i00) * - 0.0009765625f, - 6, - moby) == 0) { + if (coll_sphere( + position_and_displacement_scratch, + convert_integer_to_float(gadgebot_vars->ctl.collision_radius_1024ths) * + 0.0009765625f, + 6, + moby) == 0) { break; } if (fast_arc_tan(D_L06_001745C0.unk48, vector_length_xy(D_L06_001745C0.unk40)) > @@ -1087,7 +1098,7 @@ void gadgebot_update(GbMoby *moby) { if (absolute_float(save1[2] - probe_ground_height(moby->pos, 0, 0.5f)) >= gadgebot_vars->ctl.unk0C) { *(OvlQuad *)moby->pos = *(OvlQuad *)save1; - gadgebot_vars->unk284 = 0.0f; + gadgebot_vars->collision_correction_speed = 0.0f; } } movement_control->unk18 -= frame_time_sq * 7.0f; @@ -1121,9 +1132,9 @@ void gadgebot_update(GbMoby *moby) { } } if (D_L06_001745C0.unk18 != 0 && D_L06_001745C0.unk1C > 0) { - gadgebot_vars->unk19C = D_L06_001745C0.unk18; + gadgebot_vars->collision_contact_moby = D_L06_001745C0.unk18; } else { - gadgebot_vars->unk19C = 0; + gadgebot_vars->collision_contact_moby = 0; } *(OvlQuad *)vector_and_hit_scratch = *(OvlQuad *)moby->pos; vector_and_hit_scratch[2] -= 2.0f; @@ -1148,8 +1159,8 @@ void gadgebot_update(GbMoby *moby) { update_gadgebot_glow_effects((char *)moby); } } - gadgebot_vars->unk2F0.q = gadgebot_vars->unk2E0.q; - gadgebot_vars->unk2E0.q = *(OvlQuad *)moby->pos; + gadgebot_vars->position_history_previous.q = gadgebot_vars->position_history_latest.q; + gadgebot_vars->position_history_latest.q = *(OvlQuad *)moby->pos; } /* scores a target moby by distance, heading differences and flags */ diff --git a/src/overlays/shared/enemies/ground_melee_enemy.c b/src/overlays/shared/enemies/ground_melee_enemy.c index fd68ffa342..972dfe7d24 100644 --- a/src/overlays/shared/enemies/ground_melee_enemy.c +++ b/src/overlays/shared/enemies/ground_melee_enemy.c @@ -84,11 +84,11 @@ typedef struct { char pad184[4]; float f188; float f18C; - float f190; + float horizontal_movement_step; char pad194[4]; float fall; char pad19C[8]; - float f1A4; + float horizontal_step_limit; char pad1A8[0x28]; V_2E39E0 home; char pad1E0[0x10]; @@ -135,7 +135,7 @@ int select_list_point_toward_target(char *a0, void *list, char *pt, char *out) __asm__("FUN_L01_0028b5e0"); -s32 FUN_L00_00258b50(void *m, void *c, void *v, Vec4 *out, f32 f); +s32 move_moby_with_ground_and_collision_checks(void *m, void *c, void *v, Vec4 *out, f32 f) __asm__("FUN_L00_00258b50"); void FUN_L00_00258278(unsigned char *m, float *ptr, float t, float b, float c, float limit); void FUN_L00_0025a120_c(char *o) __asm__("FUN_L00_0025a120"); void FUN_L00_00263ac8_c(float x, int a, int b, unsigned char *p) __asm__("FUN_L00_00263ac8"); @@ -190,7 +190,7 @@ int run_moby_helper_and_set_state_7(struct Moby *moby) __asm__("FUN_L01_002f1dc8 int run_moby_helper_and_set_state_7(struct Moby *moby) { int helper_result = cancel_suck_cannon_suction(moby); - moby->state = 0x7; + moby->state = GROUND_ENEMY_STATE_RECOVER_TO_IDLE; return helper_result; } @@ -346,7 +346,7 @@ void ground_melee_enemy_update(Moby *moby) { steer_init_2E39E0(&ground_enemy_vars->steer); ground_enemy_vars->steer = 0x38D; ground_enemy_vars->f188 = ground_enemy_vars->f18C = 2.0f; - ground_enemy_vars->f1A4 = ground_enemy_vars->speed * frame_time; + ground_enemy_vars->horizontal_step_limit = ground_enemy_vars->speed * frame_time; if (rand_2E39E0() & 1) moby->flags |= 0x8000; ground_enemy_vars->settings = &settings_2E39E0; @@ -442,7 +442,8 @@ void ground_melee_enemy_update(Moby *moby) { moby->state = GROUND_ENEMY_STATE_MELEE_ATTACK; if (moby->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(random_int_between(10, 13))); - } else if (ground_enemy_vars->f190 < frame_time || 1.0f < steep || (flags & 2)) { + } else if (ground_enemy_vars->horizontal_movement_step < frame_time || 1.0f < steep || + (flags & 2)) { ground_enemy_vars->home_timer = scale_game_frames(50); moby->state = GROUND_ENEMY_STATE_RETURN_HOME; } else if (fast_vec_length(&away) < ground_enemy_vars->range + 4.0f && diff --git a/src/overlays/shared/enemies/horny_toad.c b/src/overlays/shared/enemies/horny_toad.c index 9a39e4bd89..bb86797769 100644 --- a/src/overlays/shared/enemies/horny_toad.c +++ b/src/overlays/shared/enemies/horny_toad.c @@ -67,22 +67,22 @@ typedef struct { u8 pad1C8[8]; ToadVec home; int unk1E0; - int unk1E4; + int wait_path_point_set_index; int path; int follow_moby; int pickup_moby; float turn_speed; float unk1F8; - float unk1FC; + float movement_yaw_offset; u8 unk200[0x40]; ToadVec unk240; float unk250; float unk254; - float unk258; - float unk25C; + float wander_turn_step; + float wander_radius; u8 pad260[0x14]; s16 path_point; - s16 unk276; + s16 move_to_point_or_face_target_timer; } ToadVars; typedef struct { @@ -224,22 +224,22 @@ void horny_toad_update(Moby *moby) { horny_toad_vars->unk140 = &D_L00_00161960; qcopy(horny_toad_vars->unk240, (*(ToadVec *)&moby->pos)); k = frame_time; - horny_toad_vars->unk25C = 1.5f; + horny_toad_vars->wander_radius = 1.5f; horny_toad_vars->unk254 = k * 2.0f; - horny_toad_vars->unk258 = k * 2.9670596f; + horny_toad_vars->wander_turn_step = k * 2.9670596f; { *(u128 *)reference_point_or_movement_endpoint = 0; reference_point_or_movement_endpoint[0] = 150.0f; reference_point_or_movement_endpoint[1] = 127.0f; if (vector_distance_xy((*(ToadVec *)&moby->pos), reference_point_or_movement_endpoint) < 5.0f) { - horny_toad_vars->unk25C = 0.75f; + horny_toad_vars->wander_radius = 0.75f; } } horny_toad_vars->unk58 = truncate_float_to_s32(12.0f); horny_toad_vars->unk5A = truncate_float_to_s32(2.0f); if (horny_toad_vars->path >= 0) { - if (horny_toad_vars->unk1E4 >= 0) { + if (horny_toad_vars->wait_path_point_set_index >= 0) { ToadPath *path = toad_paths[horny_toad_vars->path]; qcopy(horny_toad_vars->home, path->pts[path->count - 1]); qcopy((*(ToadVec *)&moby->pos), path->pts[0]); @@ -327,7 +327,8 @@ void horny_toad_update(Moby *moby) { } update_object_wander_movement((char *)moby, (char *)horny_toad_vars->unk240, 0.5f, 0.5f); if (horny_toad_vars->unk1C4 != 2) { - horny_toad_vars->unk1FC = random_float_between(-20.0f, 20.0f) * 0.017453292f; + horny_toad_vars->movement_yaw_offset = + random_float_between(-20.0f, 20.0f) * 0.017453292f; moby->state = HORNY_TOAD_APPROACH_AND_FACE_TARGET; if (moby->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); @@ -423,7 +424,7 @@ void horny_toad_update(Moby *moby) { moby->state = HORNY_TOAD_APPROACH_AND_FACE_TARGET; if (moby->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); - } else if (horny_toad_vars->unk276 == 0) { + } else if (horny_toad_vars->move_to_point_or_face_target_timer == 0) { moby->state = HORNY_TOAD_RETURN_HOME; if (moby->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(20)); @@ -475,6 +476,14 @@ void process_horny_toad_hit_reaction(unsigned char *toad_moby) { enum { HIT_RESPONSE_NO_HIT = 1 }; + enum { + HORNY_TOAD_INITIALIZE = 0, + HORNY_TOAD_WAIT_TO_FOLLOW_PATH = 3, + HORNY_TOAD_ROAM = 5, + HORNY_TOAD_RETURN_HOME = 8, + HORNY_TOAD_MOVE_TO_POINT_OR_FACE_TARGET = 10, + HORNY_TOAD_DYING = 12 + }; unsigned char *toad_vars = *(unsigned char **)(toad_moby + 0x78); unsigned char *hit; s32 hit_response_status; @@ -487,7 +496,7 @@ void process_horny_toad_hit_reaction(unsigned char *toad_moby) { s32 index; unsigned char *effect; - if (MOBY(toad_moby)->state == 0) + if (MOBY(toad_moby)->state == HORNY_TOAD_INITIALIZE) return; if (D_L00_0015F5C4_2d5160 == 2) { MOBY(toad_moby)->visible = 0; @@ -499,7 +508,7 @@ void process_horny_toad_hit_reaction(unsigned char *toad_moby) { damage = 0.0f; hit = find_moby_hit(toad_moby, 0x330000, 0); hit_reaction(toad_moby, hit, toad_vars + 0x20, 0, &hit_response_status, &damage, 0, 4); - if (hit_response_status != HIT_RESPONSE_NO_HIT && MOBY(toad_moby)->state != 12 && + if (hit_response_status != HIT_RESPONSE_NO_HIT && MOBY(toad_moby)->state != HORNY_TOAD_DYING && damage != 0.0f) { /* Fakematch: register pins give retail's choices: 41 in $t0, the frame time and later 0.75 in $f4, the squared frame time first in $f0. */ @@ -533,14 +542,14 @@ void process_horny_toad_hit_reaction(unsigned char *toad_moby) { reactionC4 = l00_horny_toad_knockback_landing_animation_frame; *(f32 *)(toad_vars + 0xC0) = reactionC0; *(f32 *)(toad_vars + 0xC4) = reactionC4; - MOBY(toad_moby)->state = 12; + MOBY(toad_moby)->state = HORNY_TOAD_DYING; toad_vars[0x67] = 0x78; trooper_anim_update(toad_moby, toad_vars + 0x60); FUN_L00_00257470_2d5160(toad_moby, 0, -1); } MOBY(toad_moby)->hit_slot = 0xFF; trooper_anim_finish(toad_moby, toad_vars + 0x60); - if (MOBY(toad_moby)->state == 3) { + if (MOBY(toad_moby)->state == HORNY_TOAD_WAIT_TO_FOLLOW_PATH) { index = *(s32 *)(toad_vars + 0x1E4); effect = toad_vars + 0x180; activate_effect_l08(64.0f, @@ -572,9 +581,10 @@ void process_horny_toad_hit_reaction(unsigned char *toad_moby) { truncate_float_to_s32(scale_time(FUN_L00_00257be8_2d5160(180.0f, 240.0f))); } *(s32 *)(toad_vars + 0x38) = 0; - if ((MOBY(toad_moby)->state == 5 || MOBY(toad_moby)->state == 8) && + if ((MOBY(toad_moby)->state == HORNY_TOAD_ROAM || + MOBY(toad_moby)->state == HORNY_TOAD_RETURN_HOME) && *(s16 *)(toad_vars + 0x276) != 0) { - MOBY(toad_moby)->state = 10; + MOBY(toad_moby)->state = HORNY_TOAD_MOVE_TO_POINT_OR_FACE_TARGET; if (MOBY(toad_moby)->prev_seq != 4) FUN_L00_00257880_2d5160(toad_moby, 4, 0, scale_game_frames(20)); } diff --git a/src/overlays/shared/enemies/large_amoeboid.c b/src/overlays/shared/enemies/large_amoeboid.c index 00ebd75d25..cef145f983 100644 --- a/src/overlays/shared/enemies/large_amoeboid.c +++ b/src/overlays/shared/enemies/large_amoeboid.c @@ -78,12 +78,12 @@ typedef struct LargeAmoeboidVars { f32 unk1C0[4]; u8 pad1D0[0x30]; char *target; - s32 unk204; + s32 target_selection_status; u8 pad208[0x8]; f32 home_pos[4]; /* 0x210: position at spawn */ u8 unk220[0x4]; - f32 unk224; - f32 unk228; + f32 base_target_search_radius; + f32 effective_target_search_radius; s32 unk22C; s32 unk230; f32 unk234; @@ -91,13 +91,13 @@ typedef struct LargeAmoeboidVars { f32 unk23C; s32 unk240; s32 unk244; - s32 unk248; - s32 unk24C; + s32 alternate_target_list_index; + s32 target_region_path_index; f32 size_scale; /* 0x250: 1, 0.7 or 0.49 by amoeboid size */ f32 unk254; - s32 unk258; + s32 removal_height_table_index; s32 unk25C; - s32 unk260; + s32 target_search_gate_moby_index; u8 pad264[0xc]; u8 unk270[0x4]; } LargeAmoeboidVars; @@ -138,14 +138,15 @@ void spawn_amoeboid_burst_sparks(unsigned char *moby, f32 *mode) __asm__( extern void spawn_amoeboid_burst_sparks(unsigned char *, float *) __asm__("FUN_L01_002ef770"); extern int follow_path(int *, int, int, float, void *, void *, void *) __asm__("FUN_L01_00276fe8"); extern void FUN_L01_0026d930(void *); -extern void FUN_L00_00258b50(void *, void *, void *, void *, float); -extern int FUN_L00_00261b48(int, void *, void *, void *); -extern int FUN_L00_002dc9f0(void *, void *); -extern int FUN_L00_00257470(void *, int, int); -extern int is_value_within_interpolated_window(float, void *) __asm__("FUN_00214cc8"); -extern int FUN_00214720(void *, int); -extern void FUN_0022da68(int, int, char *); -extern int FUN_00213260(int); +extern void move_moby_with_ground_and_collision_checks( + void *, void *, void *, void *, float) __asm__("FUN_L00_00258b50"); +extern int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); +extern int FUN_L00_002dc9f0(void *, void *); +extern int FUN_L00_00257470(void *, int, int); +extern int is_value_within_interpolated_window(float, void *) __asm__("FUN_00214cc8"); +extern int FUN_00214720(void *, int); +extern void FUN_0022da68(int, int, char *); +extern int FUN_00213260(int); extern float FUN_00213308(void); extern float frame_time_gp __asm__("D_0015ED6C") MACRO_ADDR; extern float D_0015ED70 MACRO_ADDR; @@ -244,6 +245,9 @@ void large_amoeboid_update(unsigned char *moby) { LARGE_AMOEBOID_MEDIUM_VARIANT = 0x361, LARGE_AMOEBOID_SMALL_VARIANT = 0x362 }; + enum { + LARGE_AMOEBOID_DORMANT = 12 + }; LargeAmoeboidVars *large_amoeboid_vars = (LargeAmoeboidVars *)MOBY(moby)->pvars; char *target; char *target_position; @@ -255,7 +259,7 @@ void large_amoeboid_update(unsigned char *moby) { int blocked; int result; - if (MOBY(moby)->state == 12) { + if (MOBY(moby)->state == LARGE_AMOEBOID_DORMANT) { MOBY(moby)->flags |= 1; return; } @@ -293,14 +297,14 @@ void large_amoeboid_update(unsigned char *moby) { else large_amoeboid_vars->unk130 = &D_L01_00161A40; large_amoeboid_vars->unk29 = 1; - if (large_amoeboid_vars->unk258 != 0) { + if (large_amoeboid_vars->removal_height_table_index != 0) { large_amoeboid_vars->health = 1.0f; large_amoeboid_vars->unk230 = 1; } else { large_amoeboid_vars->health = 3.0f; } - if (large_amoeboid_vars->unk224 == 0.0f) - large_amoeboid_vars->unk224 = 15.0f; + if (large_amoeboid_vars->base_target_search_radius == 0.0f) + large_amoeboid_vars->base_target_search_radius = 15.0f; FUN_L01_0026d930(&large_amoeboid_vars->unk170); large_amoeboid_vars->unk17C = 2.0f; large_amoeboid_vars->unk178 = 2.0f; @@ -309,13 +313,13 @@ void large_amoeboid_update(unsigned char *moby) { large_amoeboid_vars->unk170 = result; large_amoeboid_vars->unk194 = angle; if (large_amoeboid_vars->unk230 != 0) { - MOBY(moby)->state = 1; + MOBY(moby)->state = LARGE_AMOEBOID_TRY_ACQUIRE_TARGET_PATH; MOBY(moby)->flags |= 0x1000; } else { if (large_amoeboid_vars->unk25C == -1) - MOBY(moby)->state = 12; + MOBY(moby)->state = LARGE_AMOEBOID_DORMANT; else - MOBY(moby)->state = 13; + MOBY(moby)->state = LARGE_AMOEBOID_WAIT_FOR_ACTIVATION_VOLUME; MOBY(moby)->collision = 0; *(int *)(moby + 0x58) = 0; MOBY(moby)->visible = 0; @@ -325,7 +329,7 @@ void large_amoeboid_update(unsigned char *moby) { } break; case LARGE_AMOEBOID_TRY_ACQUIRE_TARGET_PATH: - if (large_amoeboid_vars->unk204 != 2) { + if (large_amoeboid_vars->target_selection_status != 2) { if (FUN_00213260(4) == 0) { path_hit = follow_path((int *)(&large_amoeboid_vars->unk240), 1, @@ -335,18 +339,18 @@ void large_amoeboid_update(unsigned char *moby) { target + 0x10, move); if (path_hit != 0) { - MOBY(moby)->state = 4; + MOBY(moby)->state = LARGE_AMOEBOID_FOLLOW_PATH_TO_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); clear_u64_value(&large_amoeboid_vars->unk40); large_amoeboid_vars->unk234 = random_float_between(-0.34906584f, 0.34906584f); } else { - large_amoeboid_vars->unk204 = 2; + large_amoeboid_vars->target_selection_status = 2; } } } - if (large_amoeboid_vars->unk22C != 0 && large_amoeboid_vars->unk204 == 2) { - MOBY(moby)->state = 15; + if (large_amoeboid_vars->unk22C != 0 && large_amoeboid_vars->target_selection_status == 2) { + MOBY(moby)->state = LARGE_AMOEBOID_MOVE_DIRECTLY_TOWARD_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, 5); return; @@ -354,7 +358,7 @@ void large_amoeboid_update(unsigned char *moby) { large_amoeboid_vars->unk194 = large_amoeboid_vars->unk23C * 0.5f * frame_time_gp; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, 5); - MOBY(moby)->state = 2; + MOBY(moby)->state = LARGE_AMOEBOID_MOVE_TOWARD_STORED_POSITION; break; case LARGE_AMOEBOID_MOVE_TOWARD_STORED_POSITION: angle = fast_arc_tan(large_amoeboid_vars->home_pos[0] - MOBY(moby)->pos.x, @@ -368,9 +372,9 @@ void large_amoeboid_update(unsigned char *moby) { move[0] = fast_cos(MOBY(moby)->rot.z); move[1] = fast_sin(MOBY(moby)->rot.z); move[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &large_amoeboid_vars->unk170, move, &large_amoeboid_vars->unk40, 1.0f); - result = large_amoeboid_vars->unk204; + result = large_amoeboid_vars->target_selection_status; if (result != 2 && FUN_00213260(4) == 0) { path_hit = follow_path((int *)(&large_amoeboid_vars->unk240), 1, @@ -380,7 +384,7 @@ void large_amoeboid_update(unsigned char *moby) { target + 0x10, hit); if (path_hit != 0) { - MOBY(moby)->state = 3; + MOBY(moby)->state = LARGE_AMOEBOID_WAIT_FOR_PATH_ACQUISITION_ANIMATION_END; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); clear_u64_value(&large_amoeboid_vars->unk40); @@ -389,11 +393,11 @@ void large_amoeboid_update(unsigned char *moby) { large_amoeboid_vars->unk234 = angle; large_amoeboid_vars->unk194 = distance; } else { - large_amoeboid_vars->unk204 = 2; + large_amoeboid_vars->target_selection_status = 2; } } - if (large_amoeboid_vars->unk22C != 0 && large_amoeboid_vars->unk204 == 2) { - MOBY(moby)->state = 15; + if (large_amoeboid_vars->unk22C != 0 && large_amoeboid_vars->target_selection_status == 2) { + MOBY(moby)->state = LARGE_AMOEBOID_MOVE_DIRECTLY_TOWARD_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, 5); } @@ -412,20 +416,19 @@ void large_amoeboid_update(unsigned char *moby) { move[0] = fast_cos(MOBY(moby)->rot.z); move[1] = fast_sin(MOBY(moby)->rot.z); move[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &large_amoeboid_vars->unk170, move, &large_amoeboid_vars->unk40, 1.0f); - if (FUN_L00_00261b48(large_amoeboid_vars->unk240, &MOBY(moby)->pos, target + 0x10, hit) != - 0 && + if (path_8808(large_amoeboid_vars->unk240, &MOBY(moby)->pos, target + 0x10, hit) != 0 && fast_vec_dist(&MOBY(moby)->pos, hit) < 1.5f) blocked = 1; if (large_amoeboid_vars->unk22C == 0) { - MOBY(moby)->state = 5; + MOBY(moby)->state = LARGE_AMOEBOID_RETURN_TO_STORED_POSITION; } else if (blocked) { - MOBY(moby)->state = 16; + MOBY(moby)->state = LARGE_AMOEBOID_WAIT_WHILE_BLOCKED; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } else if (vector_distance_xy(&MOBY(moby)->pos, target + 0x10) < 2.0f) { - MOBY(moby)->state = 6; + MOBY(moby)->state = LARGE_AMOEBOID_LUNGE_AT_TARGET; if (MOBY(moby)->prev_seq != 2) blend_moby_animation(moby, 2, 5, scale_game_frames(10)); return; @@ -434,7 +437,7 @@ void large_amoeboid_update(unsigned char *moby) { case LARGE_AMOEBOID_WAIT_WHILE_BLOCKED: if (!(MOBY(moby)->anim_flags & 2) || large_amoeboid_vars->unk22C != 0) return; - MOBY(moby)->state = 5; + MOBY(moby)->state = LARGE_AMOEBOID_RETURN_TO_STORED_POSITION; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(20)); return; @@ -444,7 +447,7 @@ void large_amoeboid_update(unsigned char *moby) { target_position = target + 0x10; distance = vector_distance_xy(&MOBY(moby)->pos, target_position); if (distance < large_amoeboid_path_lunge_distance_threshold_gp) { - MOBY(moby)->state = 6; + MOBY(moby)->state = LARGE_AMOEBOID_LUNGE_AT_TARGET; large_amoeboid_vars->unk194 = (large_amoeboid_vars->unk23C + large_amoeboid_vars->unk23C) * frame_time_gp; if (MOBY(moby)->prev_seq != 2) @@ -481,13 +484,13 @@ void large_amoeboid_update(unsigned char *moby) { move[1] = fast_sin(MOBY(moby)->rot.z); move[1] += move[1]; move[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &large_amoeboid_vars->unk170, move, &large_amoeboid_vars->unk40, 1.0f); } else { - large_amoeboid_vars->unk204 = 2; + large_amoeboid_vars->target_selection_status = 2; } - if (large_amoeboid_vars->unk204 == 2) - MOBY(moby)->state = 5; + if (large_amoeboid_vars->target_selection_status == 2) + MOBY(moby)->state = LARGE_AMOEBOID_RETURN_TO_STORED_POSITION; spawn_amoeboid_movement_particles(moby); return; } @@ -510,7 +513,7 @@ void large_amoeboid_update(unsigned char *moby) { move[1] = fast_sin(*rotation); move[1] += move[1]; move[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &large_amoeboid_vars->unk170, move, &large_amoeboid_vars->unk40, 1.0f); } if (is_value_within_interpolated_window(15.5f, moby) != 0 && @@ -527,7 +530,7 @@ void large_amoeboid_update(unsigned char *moby) { return; } if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 7; + MOBY(moby)->state = LARGE_AMOEBOID_WAIT_FOR_ANIMATION_BEFORE_RESUMING_PATH; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); large_amoeboid_vars->unk194 = large_amoeboid_vars->unk23C * frame_time_gp; @@ -538,7 +541,7 @@ void large_amoeboid_update(unsigned char *moby) { case LARGE_AMOEBOID_WAIT_FOR_ANIMATION_BEFORE_RESUMING_PATH: if (!(MOBY(moby)->anim_flags & 2)) return; - MOBY(moby)->state = 4; + MOBY(moby)->state = LARGE_AMOEBOID_FOLLOW_PATH_TO_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); return; @@ -548,7 +551,7 @@ void large_amoeboid_update(unsigned char *moby) { distance = vector_distance_xy(&MOBY(moby)->pos, (target_position = &large_amoeboid_vars->home_pos)); if (distance < 1.0f) { - MOBY(moby)->state = 1; + MOBY(moby)->state = LARGE_AMOEBOID_TRY_ACQUIRE_TARGET_PATH; } else { if (follow_path((int *)(&large_amoeboid_vars->unk240), 1, @@ -581,10 +584,11 @@ void large_amoeboid_update(unsigned char *moby) { move[1] = fast_sin(MOBY(moby)->rot.z); move[1] += move[1]; move[2] = 0.0f; - FUN_L00_00258b50( + move_moby_with_ground_and_collision_checks( moby, &large_amoeboid_vars->unk170, move, &large_amoeboid_vars->unk40, 1.0f); } - if (large_amoeboid_vars->unk204 != 2 && (MOBY(moby)->state = 4, MOBY(moby)->prev_seq != 1)) + if (large_amoeboid_vars->target_selection_status != 2 && + (MOBY(moby)->state = 4, MOBY(moby)->prev_seq != 1)) blend_moby_animation(moby, 1, 0, scale_game_frames(3)); spawn_amoeboid_movement_particles(moby); return; @@ -602,7 +606,7 @@ void large_amoeboid_update(unsigned char *moby) { if (path_hit != 0) { FUN_0022da68(4, 0, (char *)moby); large_amoeboid_vars->unk194 = large_amoeboid_vars->unk23C * frame_time_gp; - MOBY(moby)->state = 9; + MOBY(moby)->state = LARGE_AMOEBOID_WAIT_FOR_ANIMATION_BEFORE_RESTARTING_PATH; if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 4, scale_game_frames(10)); qcopy(&large_amoeboid_vars->home_pos, &MOBY(moby)->pos); @@ -617,7 +621,7 @@ void large_amoeboid_update(unsigned char *moby) { return; case LARGE_AMOEBOID_WAIT_FOR_ANIMATION_BEFORE_RESTARTING_PATH: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 4; + MOBY(moby)->state = LARGE_AMOEBOID_FOLLOW_PATH_TO_TARGET; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); clear_u64_value(&large_amoeboid_vars->unk40); @@ -635,7 +639,7 @@ void large_amoeboid_update(unsigned char *moby) { int result; distance = MOBY(moby)->pos.z + 20.0f; flags = MOBY(moby)->flags | 0x1000; - MOBY(moby)->state = 1; + MOBY(moby)->state = LARGE_AMOEBOID_TRY_ACQUIRE_TARGET_PATH; MOBY(moby)->flags = flags; MOBY(moby)->anim_speed = 1.0f; MOBY(moby)->pos.z = distance; @@ -647,7 +651,7 @@ void large_amoeboid_update(unsigned char *moby) { return; case LARGE_AMOEBOID_PROCESS_SUCK_CANNON_INTERACTION: if (FUN_L00_002dc9f0(moby, &large_amoeboid_vars->unk60)) { - MOBY(moby)->state = 1; + MOBY(moby)->state = LARGE_AMOEBOID_TRY_ACQUIRE_TARGET_PATH; large_amoeboid_vars->unk128 = 0; } break; @@ -799,7 +803,7 @@ void process_amoeboid_hits_and_update_targeting(char *moby) { return; } MOBY(moby)->hit_slot = 0xFF; - removal_height_entry_index = moby_vars->unk258; + removal_height_entry_index = moby_vars->removal_height_table_index; if (removal_height_entry_index != 0 && MOBY(moby)->state != LARGE_AMOEBOID_INITIALIZE && MOBY(moby)->pos.z < *(float *)(removal_height_entry_index * 0x1190 + pool_draw_tiles + 8)) { clear_u64_value(&scratch_vector); @@ -812,41 +816,41 @@ void process_amoeboid_hits_and_update_targeting(char *moby) { moby_vars->unk38 = 0; } if (fast_dec_timer(&moby_vars->unk22C) != 0) { - moby_vars->unk228 = moby_vars->unk224; + moby_vars->effective_target_search_radius = moby_vars->base_target_search_radius; } else { - moby_vars->unk228 = moby_vars->unk224 + 20.0f; + moby_vars->effective_target_search_radius = moby_vars->base_target_search_radius + 20.0f; } - path_search_gate_moby_index = moby_vars->unk260; + path_search_gate_moby_index = moby_vars->target_search_gate_moby_index; if (path_search_gate_moby_index <= 0 || *(unsigned char *)((path_search_gate_moby_index << 8) + (*(int *)&D_L01_0015FFD8) + 0xBC) != 0) { - search_path = ((char *)l01_paths[moby_vars->unk24C]); + search_path = ((char *)l01_paths[moby_vars->target_region_path_index]); path_search_position = &moby_vars->unk1C0; - if (FUN_L00_0025ff38(moby_vars->unk228, + if (FUN_L00_0025ff38(moby_vars->effective_target_search_radius, moby, path_search_position, 0, 0, search_path + 0x10, *(int *)search_path) != 2) { - if (moby_vars->unk228 < + if (moby_vars->effective_target_search_radius < vector_distance_xy(&moby_vars->home_pos, path_search_position) || 3.0f < absolute_float(MOBY(moby)->pos.z - moby_vars->unk1C0[2])) { - moby_vars->unk204 = 2; + moby_vars->target_selection_status = 2; } } } - candidate_list_index = moby_vars->unk248; + candidate_list_index = moby_vars->alternate_target_list_index; if (candidate_list_index >= 0) { cand = find_nearest_class_26f_moby_in_list(moby, candidate_list_index); if (cand != 0) { candidate_distance = vector_distance_xy(&MOBY(moby)->pos, cand + 0x10); - if (candidate_distance < moby_vars->unk228) { - if (moby_vars->unk204 == 2 || + if (candidate_distance < moby_vars->effective_target_search_radius) { + if (moby_vars->target_selection_status == 2 || candidate_distance < vector_distance_xy(&MOBY(moby)->pos, moby_vars->target + 0x10)) { moby_vars->target = cand; - moby_vars->unk204 = 1; + moby_vars->target_selection_status = 1; } } } @@ -918,7 +922,7 @@ char *activate_smaller_amoeboid(void *source_moby) { qcopy(&smaller_amoeboid->pos, &source_amoeboid->pos); qcopy(&smaller_amoeboid->rot, &source_amoeboid->rot); other_vars->health = self_vars->health; - other_vars->unk224 = self_vars->unk224; + other_vars->base_target_search_radius = self_vars->base_target_search_radius; update_entity(smaller_amoeboid); return (char *)smaller_amoeboid; } diff --git a/src/overlays/shared/enemies/plasmabot.c b/src/overlays/shared/enemies/plasmabot.c index 8ac217a5d3..626614e1e3 100644 --- a/src/overlays/shared/enemies/plasmabot.c +++ b/src/overlays/shared/enemies/plasmabot.c @@ -58,7 +58,7 @@ typedef struct PlasmabotVars { u8 pad0[0x20]; f32 health; s16 unk24; - s16 unk26; + s16 stagger_reaction_duration_frames; s8 unk28; s8 unk29; u8 pad2A[0x6]; @@ -82,37 +82,37 @@ typedef struct PlasmabotVars { u8 unkC0[0x10]; u8 unkD0[0x40]; s32 target; /* 0x110: target moby */ - s32 unk114; + s32 target_selection_status; u8 pad118[0x8]; u8 unk120[0x10]; u8 unk130[0x30]; - u8 unk160[0x10]; - u8 unk170[0x70]; + u8 manipulator_attachment_header[0x10]; + u8 aim_quaternion_storage[0x70]; u8 unk1E0[0x10]; u8 unk1F0[0x10]; u8 unk200[0x10]; - u8 unk210[0x10]; - u8 unk220[0x14]; + u8 beam_start_position_storage[0x10]; + u8 beam_end_position_storage[0x14]; f32 target_range; u8 pad238[0x4]; - s32 unk23C; + s32 heading_angular_velocity; s32 path_index; /* 0x240: into l14_paths, -1: none */ s32 target_path_index; - s16 unk248; + s16 path_traversal_delay_timer; u8 pad24A[0x2]; - s32 unk24C; - f32 unk250[4]; - s16 unk260; - s16 unk262; - s32 unk264; - f32 unk268; - s32 unk26C; + s32 path_segment_index; + f32 path_offset_and_spring_velocities[4]; + s16 beam_cooldown_timer; + s16 aim_sweep_timer; + s32 hatch_index; + f32 aim_yaw_offset; + s32 aim_yaw_angular_velocity; s32 unk270; - s32 unk274; - f32 unk278; - f32 unk27C; - s32 unk280; - s32 unk284; + s32 aim_joint_angular_velocity; + f32 aim_sweep_center_angle; + f32 path_traversal_direction; + s32 aim_pitch_angle; + s32 aim_pitch_angular_velocity; s32 unk288; } PlasmabotVars; @@ -122,6 +122,9 @@ extern int FUN_L00_0025ff38(char *, char *, float, int, int, int *, int); void update_plasmabot_target(char *moby) __asm__("FUN_L14_002b3268"); void update_plasmabot_target(char *moby) { + enum { + PLASMABOT_TARGET_STATUS_REJECTED = 2 + }; PlasmabotVars *plasmabot_private_vars = (PlasmabotVars *)MOBY(moby)->pvars; int *target_filter_record = ((int *)l14_paths[plasmabot_private_vars->target_path_index]); if (FUN_L00_0025ff38(moby, @@ -133,7 +136,7 @@ void update_plasmabot_target(char *moby) { *target_filter_record) != 2) { if (plasmabot_private_vars->target_range < vector_distance_xy(&MOBY(moby)->pos, &plasmabot_private_vars->unkD0)) { - plasmabot_private_vars->unk114 = 2; + plasmabot_private_vars->target_selection_status = PLASMABOT_TARGET_STATUS_REJECTED; } } if (plasmabot_private_vars->target == 0) { @@ -176,11 +179,14 @@ void initialize_plasmabot_path_state(char *moby) { PlasmabotVars *moby_vars = (PlasmabotVars *)MOBY(moby)->pvars; char *path; int i; - *(int *)&moby_vars->unk250 = 0; - moby_vars->unk24C = 0; - moby_vars->unk250[3] = moby_vars->unk250[0]; - moby_vars->unk250[2] = moby_vars->unk250[0]; - moby_vars->unk250[1] = moby_vars->unk250[0]; + *(int *)&moby_vars->path_offset_and_spring_velocities = 0; + moby_vars->path_segment_index = 0; + moby_vars->path_offset_and_spring_velocities[3] = + moby_vars->path_offset_and_spring_velocities[0]; + moby_vars->path_offset_and_spring_velocities[2] = + moby_vars->path_offset_and_spring_velocities[0]; + moby_vars->path_offset_and_spring_velocities[1] = + moby_vars->path_offset_and_spring_velocities[0]; if (moby_vars->path_index == -1) return; path = (char *)l14_paths[moby_vars->path_index]; @@ -201,10 +207,12 @@ void scale_and_apply_plasmabot_planar_velocity(char *moby) { float planar_velocity_scale = (plasmabot_planar_velocity_base_scale_gp - 1.0f) * frame_scale + 1.0f; PlasmabotVars *moby_vars = (PlasmabotVars *)MOBY(moby)->pvars; - moby_vars->unk250[1] = moby_vars->unk250[1] * planar_velocity_scale; - moby_vars->unk250[2] = moby_vars->unk250[2] * planar_velocity_scale; - MOBY(moby)->pos.x = MOBY(moby)->pos.x + moby_vars->unk250[1]; - MOBY(moby)->pos.y = MOBY(moby)->pos.y + moby_vars->unk250[2]; + moby_vars->path_offset_and_spring_velocities[1] = + moby_vars->path_offset_and_spring_velocities[1] * planar_velocity_scale; + moby_vars->path_offset_and_spring_velocities[2] = + moby_vars->path_offset_and_spring_velocities[2] * planar_velocity_scale; + MOBY(moby)->pos.x = MOBY(moby)->pos.x + moby_vars->path_offset_and_spring_velocities[1]; + MOBY(moby)->pos.y = MOBY(moby)->pos.y + moby_vars->path_offset_and_spring_velocities[2]; } /* steers the pitch angle of a moby toward a target and updates the joint */ /* Ported from rac1-decomp (src/overlays/shared/vendor_002B2A28.c: func_L14_002B4A00), where it is exact; names translated to the US level program. */ @@ -215,7 +223,7 @@ void update_plasmabot_aim_joint_rotation(char *moby, float x) __asm__("FUN_L14_0 void update_plasmabot_aim_joint_rotation(char *moby, float x) { PlasmabotVars *moby_vars = (PlasmabotVars *)MOBY(moby)->pvars; - float target_joint_angle = -moby_vars->unk268; + float target_joint_angle = -moby_vars->aim_yaw_offset; float heading_angle_delta = fast_subtract_rotations(x, MOBY(moby)->rot.z); target_joint_angle = fast_add_rotations(target_joint_angle, -heading_angle_delta); if (target_joint_angle > 1.2217304706573486f) @@ -225,7 +233,7 @@ void update_plasmabot_aim_joint_rotation(char *moby, float x) { { float k = frame_time_sq * 12.566370964050293f; approach_angle((float *)(&moby_vars->unk270), - (float *)(&moby_vars->unk274), + (float *)(&moby_vars->aim_joint_angular_velocity), target_joint_angle, k, k, @@ -252,7 +260,7 @@ void reset_listed_plasmabot_beam_cooldowns(int selected_moby_list_index) { ((*(unsigned short *)listed_moby_entry_cursor & 0x7FFF) << 8); PlasmabotVars *listed_moby_private_vars = (PlasmabotVars *)MOBY(moby)->pvars; if (MOBY(moby)->oclass == 0x1C) { - listed_moby_private_vars->unk260 = + listed_moby_private_vars->beam_cooldown_timer = scale_game_frames(plasmabot_beam_cooldown_frames); } } while (*listed_moby_entry_cursor++ >= 0); @@ -436,7 +444,7 @@ void plasmabot_update(char *moby) { } } if (((unsigned char *)plasmabot_update_private_vars)[0x24A] != 0 && - plasmabot_update_private_vars->unk264 < 0) { + plasmabot_update_private_vars->hatch_index < 0) { DebugPrint(plasmabot_missing_hatch_index_format, ((short)MOBY(moby)->save_id)); { call_D678(moby); @@ -458,21 +466,22 @@ void plasmabot_update(char *moby) { plasmabot_update_private_vars->unk24 = 2; plasmabot_update_private_vars->unk58 = truncate_float_to_s32(15.0f); plasmabot_update_private_vars->unk5A = truncate_float_to_s32(16.0f); - plasmabot_update_private_vars->unk27C = 1.0f; - plasmabot_update_private_vars->unk248 = 0; - plasmabot_update_private_vars->unk23C = 0; - plasmabot_update_private_vars->unk260 = 0; - *(int *)&plasmabot_update_private_vars->unk268 = 0; - plasmabot_update_private_vars->unk26C = 0; - plasmabot_update_private_vars->unk280 = 0; - plasmabot_update_private_vars->unk284 = 0; + plasmabot_update_private_vars->path_traversal_direction = 1.0f; + plasmabot_update_private_vars->path_traversal_delay_timer = 0; + plasmabot_update_private_vars->heading_angular_velocity = 0; + plasmabot_update_private_vars->beam_cooldown_timer = 0; + *(int *)&plasmabot_update_private_vars->aim_yaw_offset = 0; + plasmabot_update_private_vars->aim_yaw_angular_velocity = 0; + plasmabot_update_private_vars->aim_pitch_angle = 0; + plasmabot_update_private_vars->aim_pitch_angular_velocity = 0; plasmabot_update_private_vars->unk270 = 0; - plasmabot_update_private_vars->unk274 = 0; + plasmabot_update_private_vars->aim_joint_angular_velocity = 0; if (((unsigned char *)plasmabot_update_private_vars)[0x121] == 0) { attach_manipulator(moby, 2, &plasmabot_update_private_vars->unk120); } if (((unsigned char *)plasmabot_update_private_vars)[0x161] == 0) { - attach_manipulator(moby, 3, &plasmabot_update_private_vars->unk160); + attach_manipulator( + moby, 3, &plasmabot_update_private_vars->manipulator_attachment_header); } if (((unsigned char *)plasmabot_update_private_vars)[0x24A] != 0) { deactivate_plasmabot(moby); @@ -489,31 +498,34 @@ void plasmabot_update(char *moby) { } case PLASMABOT_WAIT_TO_START_PATH_TRAVERSAL: { float *path; - if (plasmabot_update_private_vars->unk114 == 2) + if (plasmabot_update_private_vars->target_selection_status == 2) return; - if (fast_dec_timer_s16(&plasmabot_update_private_vars->unk248) == 0) + if (fast_dec_timer_s16(&plasmabot_update_private_vars->path_traversal_delay_timer) == 0) return; - if (refresh_plasmabot_hatch_reset_delay(plasmabot_update_private_vars->unk264) == 0) + if (refresh_plasmabot_hatch_reset_delay(plasmabot_update_private_vars->hatch_index) == 0) return; if (call_4BF0(moby) == 0) return; - plasmabot_update_private_vars->unk248 = + plasmabot_update_private_vars->path_traversal_delay_timer = scale_game_frames(plasmabot_path_traversal_delay_frames); activate_plasmabot(moby); ((unsigned char *)moby)[0x20] = 2; set_moby_animation(moby, 1, 0); path = (float *)l14_paths[plasmabot_update_private_vars->path_index]; MOBY(moby)->rot.z = fast_arc_tan(path[8] - path[4], path[9] - path[5]); - *(int *)&plasmabot_update_private_vars->unk268 = 0; - plasmabot_update_private_vars->unk27C = 1.0f; - plasmabot_update_private_vars->unk26C = 0; + *(int *)&plasmabot_update_private_vars->aim_yaw_offset = 0; + plasmabot_update_private_vars->path_traversal_direction = 1.0f; + plasmabot_update_private_vars->aim_yaw_angular_velocity = 0; plasmabot_update_private_vars->unk270 = 0; - plasmabot_update_private_vars->unk274 = 0; - plasmabot_update_private_vars->unk24C = 0; - *(int *)&plasmabot_update_private_vars->unk250 = 0; - plasmabot_update_private_vars->unk250[3] = plasmabot_update_private_vars->unk268; - plasmabot_update_private_vars->unk250[2] = plasmabot_update_private_vars->unk268; - plasmabot_update_private_vars->unk250[1] = plasmabot_update_private_vars->unk268; + plasmabot_update_private_vars->aim_joint_angular_velocity = 0; + plasmabot_update_private_vars->path_segment_index = 0; + *(int *)&plasmabot_update_private_vars->path_offset_and_spring_velocities = 0; + plasmabot_update_private_vars->path_offset_and_spring_velocities[3] = + plasmabot_update_private_vars->aim_yaw_offset; + plasmabot_update_private_vars->path_offset_and_spring_velocities[2] = + plasmabot_update_private_vars->aim_yaw_offset; + plasmabot_update_private_vars->path_offset_and_spring_velocities[1] = + plasmabot_update_private_vars->aim_yaw_offset; return; } case PLASMABOT_START_PATH_TRAVERSAL: @@ -529,18 +541,20 @@ void plasmabot_update(char *moby) { break; case PLASMABOT_RETURN_TO_PATH_START: { float *path = (float *)l14_paths[plasmabot_update_private_vars->path_index]; - vendor_spring((float *)&MOBY(moby)->pos, - (float *)(&plasmabot_update_private_vars->unk250[1]), - path[4], - 0.01f, - 0.2f, - 0.0f); - vendor_spring((float *)&MOBY(moby)->pos.y, - (float *)(&plasmabot_update_private_vars->unk250[2]), - path[5], - 0.01f, - 0.2f, - 0.0f); + vendor_spring( + (float *)&MOBY(moby)->pos, + (float *)(&plasmabot_update_private_vars->path_offset_and_spring_velocities[1]), + path[4], + 0.01f, + 0.2f, + 0.0f); + vendor_spring( + (float *)&MOBY(moby)->pos.y, + (float *)(&plasmabot_update_private_vars->path_offset_and_spring_velocities[2]), + path[5], + 0.01f, + 0.2f, + 0.0f); if ((MOBY(moby)->anim_flags & 2) && ((unsigned char *)moby)[0x52] == ((unsigned char *)moby)[0x53]) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); @@ -559,23 +573,26 @@ void plasmabot_update(char *moby) { k = frame_time_sq * 12.566371f; call_CE58((float *)&MOBY(moby)->rot.z, ang, - (float *)(&plasmabot_update_private_vars->unk23C), + (float *)(&plasmabot_update_private_vars->heading_angular_velocity), k, k, frame_time * 6.2831855f); - if (plasmabot_update_private_vars->unk114 == 2) + if (plasmabot_update_private_vars->target_selection_status == 2) break; - if (fast_dec_timer_s16(&plasmabot_update_private_vars->unk248) == 0) + if (fast_dec_timer_s16(&plasmabot_update_private_vars->path_traversal_delay_timer) == 0) break; ((unsigned char *)moby)[0x20] = 3; blend_moby_animation(moby, 3, 0, scale_game_frames(10)); MOBY(moby)->anim_speed = 1.0f; - *(int *)&plasmabot_update_private_vars->unk250 = 0; - plasmabot_update_private_vars->unk27C = 1.0f; - plasmabot_update_private_vars->unk24C = 0; - plasmabot_update_private_vars->unk250[3] = plasmabot_update_private_vars->unk250[0]; - plasmabot_update_private_vars->unk250[2] = plasmabot_update_private_vars->unk250[0]; - plasmabot_update_private_vars->unk250[1] = plasmabot_update_private_vars->unk250[0]; + *(int *)&plasmabot_update_private_vars->path_offset_and_spring_velocities = 0; + plasmabot_update_private_vars->path_traversal_direction = 1.0f; + plasmabot_update_private_vars->path_segment_index = 0; + plasmabot_update_private_vars->path_offset_and_spring_velocities[3] = + plasmabot_update_private_vars->path_offset_and_spring_velocities[0]; + plasmabot_update_private_vars->path_offset_and_spring_velocities[2] = + plasmabot_update_private_vars->path_offset_and_spring_velocities[0]; + plasmabot_update_private_vars->path_offset_and_spring_velocities[1] = + plasmabot_update_private_vars->path_offset_and_spring_velocities[0]; break; } case PLASMABOT_FOLLOW_PATH_FORWARD: @@ -586,14 +603,14 @@ void plasmabot_update(char *moby) { break; case PLASMABOT_FOLLOW_PATH_BACKWARD: if (((unsigned char *)plasmabot_update_private_vars)[0x24A] != 0) { - refresh_plasmabot_hatch_reset_delay(plasmabot_update_private_vars->unk264); + refresh_plasmabot_hatch_reset_delay(plasmabot_update_private_vars->hatch_index); } if (follow_plasmabot_path(moby) != 0) { if (((unsigned char *)plasmabot_update_private_vars)[0x24A] != 0) { blend_moby_animation(moby, 2, 0, scale_game_frames(10)); ((unsigned char *)moby)[0x20] = 9; } else { - plasmabot_update_private_vars->unk248 = + plasmabot_update_private_vars->path_traversal_delay_timer = scale_game_frames(plasmabot_path_traversal_delay_frames); ((unsigned char *)moby)[0x20] = 0xD; } @@ -609,13 +626,13 @@ void plasmabot_update(char *moby) { k = frame_time_sq * 12.566371f; call_CE58((float *)&MOBY(moby)->rot.z, ang, - (float *)(&plasmabot_update_private_vars->unk23C), + (float *)(&plasmabot_update_private_vars->heading_angular_velocity), k, k, frame_time * 6.2831855f); aim = update_plasmabot_aim_quaternion(moby, 0, MOBY(moby)->rot.z); update_plasmabot_aim_joint_rotation(moby, ang); - if (plasmabot_update_private_vars->unk114 == 2) { + if (plasmabot_update_private_vars->target_selection_status == 2) { if (plasmabot_update_private_vars->path_index == -1) break; ((unsigned char *)moby)[0x20] = 8; @@ -623,19 +640,21 @@ void plasmabot_update(char *moby) { blend_moby_animation(moby, 3, 0, scale_game_frames(0x14)); } { - int index = plasmabot_update_private_vars->unk24C - 1; + int index = plasmabot_update_private_vars->path_segment_index - 1; char *path; - plasmabot_update_private_vars->unk24C = index; + plasmabot_update_private_vars->path_segment_index = index; path = (char *)l14_paths[plasmabot_update_private_vars->path_index]; - plasmabot_update_private_vars->unk250[0] = *(float *)(path + (index << 4) + 0x1C); + plasmabot_update_private_vars->path_offset_and_spring_velocities[0] = + *(float *)(path + (index << 4) + 0x1C); } - plasmabot_update_private_vars->unk27C = -1.0f; - plasmabot_update_private_vars->unk250[1] = plasmabot_update_private_vars->unk250[2] = - plasmabot_update_private_vars->unk250[3] = 0.0f; + plasmabot_update_private_vars->path_traversal_direction = -1.0f; + plasmabot_update_private_vars->path_offset_and_spring_velocities[1] = + plasmabot_update_private_vars->path_offset_and_spring_velocities[2] = + plasmabot_update_private_vars->path_offset_and_spring_velocities[3] = 0.0f; release_beam_slot_by_id(moby); break; } - if (fast_dec_timer_s16(&plasmabot_update_private_vars->unk260) == 0) + if (fast_dec_timer_s16(&plasmabot_update_private_vars->beam_cooldown_timer) == 0) break; if (count_listed_plasmabots_preparing_or_sweeping_beam(((unsigned char *)moby)[0x21]) >= 2) break; @@ -652,10 +671,10 @@ void plasmabot_update(char *moby) { &MOBY(plasmabot_aim_target_moby)->pos) != 0) break; reset_listed_plasmabot_beam_cooldowns(((unsigned char *)moby)[0x21]); - plasmabot_update_private_vars->unk278 = ang; + plasmabot_update_private_vars->aim_sweep_center_angle = ang; ((unsigned char *)moby)[0x20] = 5; blend_moby_animation(moby, 4, 0, scale_game_frames(5)); - plasmabot_update_private_vars->unk262 = + plasmabot_update_private_vars->aim_sweep_timer = scale_game_frames(l14_plasmabot_aim_sweep_duration_frames); break; } @@ -682,11 +701,11 @@ void plasmabot_update(char *moby) { flag = 0; ang = fast_arc_tan(MOBY(plasmabot_aim_target_moby)->pos.x - MOBY(moby)->pos.x, MOBY(plasmabot_aim_target_moby)->pos.y - MOBY(moby)->pos.y); - progress = convert_integer_to_float(plasmabot_update_private_vars->unk262); + progress = convert_integer_to_float(plasmabot_update_private_vars->aim_sweep_timer); progress = progress / convert_integer_to_float( scale_game_frames(l14_plasmabot_aim_sweep_duration_frames)); sweep = l14_plasmabot_aim_sweep_half_angle; - angle = fast_subtract_rotations(plasmabot_update_private_vars->unk278, + angle = fast_subtract_rotations(plasmabot_update_private_vars->aim_sweep_center_angle, -sweep + (sweep + sweep) * progress); if (((unsigned char *)plasmabot_update_private_vars)[0x24B] != 0) { if (MOBY(plasmabot_aim_target_moby)->pos.z + 0.1f - MOBY(moby)->pos.z < 0.0f) { @@ -720,7 +739,7 @@ void plasmabot_update(char *moby) { qcopy(end, D_L14_00174560); } set_beam_origin_transform_and_endpoint(moby, bone_transform_scratch, end); - if (fast_dec_timer_s16(&plasmabot_update_private_vars->unk262) != 0) { + if (fast_dec_timer_s16(&plasmabot_update_private_vars->aim_sweep_timer) != 0) { blend_moby_animation(moby, 6, 0, scale_game_frames(10)); ((unsigned char *)moby)[0x20] = 7; release_beam_slot_by_id(moby); @@ -972,9 +991,9 @@ void draw_plasmabot_effect_quads(struct Moby *moby) { fast_draw_quad_real(&pk, 0, 0); qcopy(&quad_transform[3], &plasmabot_effect_private_vars->unk200); - pp = &plasmabot_effect_private_vars->unk220; + pp = &plasmabot_effect_private_vars->beam_end_position_storage; fast_vec_sub(&quad_transform[0], ((char *)&D_L14_001674C0), &quad_transform[3]); - beam_start_position = &plasmabot_effect_private_vars->unk210; + beam_start_position = &plasmabot_effect_private_vars->beam_start_position_storage; nozzle_position = &plasmabot_effect_private_vars->unk1F0; fast_vec_normalize(&quad_transform[0], &quad_transform[0], 1.0f); fast_vec_cross(&quad_transform[1], &quad_transform[0], D_0013F5E0); @@ -1136,7 +1155,7 @@ void process_plasmabot_hit_reaction(struct Moby *moby) { frame_duration = frame_time; stagger_motion_z = plasmabot_stagger_motion_z_scale_gp * frame_duration; k = frame_duration * 8.0f; - state->unk26 = stagger_duration_frames; + state->stagger_reaction_duration_frames = stagger_duration_frames; state->unk78 = k; state->unk7C = stagger_motion_z; state->unkB0 = 11.0f; @@ -1206,23 +1225,23 @@ int follow_plasmabot_path(char *moby) { PlasmabotVars *plasmabot_private_state = (PlasmabotVars *)MOBY(moby)->pvars; int reached = FUN_L00_0025d808(((int *)l14_paths[plasmabot_private_state->path_index]), path_target_position, - &plasmabot_private_state->unk24C, - &plasmabot_private_state->unk250, + &plasmabot_private_state->path_segment_index, + &plasmabot_private_state->path_offset_and_spring_velocities, 0, plasmabot_path_traversal_speed_gp * frame_time * - plasmabot_private_state->unk27C); + plasmabot_private_state->path_traversal_direction); float path_target_heading; float k; float turn_step_limit; qcopy(pre_spring_position, &MOBY(moby)->pos); vendor_spring((float *)&MOBY(moby)->pos, - (float *)(&plasmabot_private_state->unk250[1]), + (float *)(&plasmabot_private_state->path_offset_and_spring_velocities[1]), path_target_position[0], 0.01f, 0.2f, 0.0f); vendor_spring((float *)&MOBY(moby)->pos.y, - (float *)(&plasmabot_private_state->unk250[2]), + (float *)(&plasmabot_private_state->path_offset_and_spring_velocities[2]), path_target_position[1], 0.01f, 0.2f, @@ -1233,7 +1252,7 @@ int follow_plasmabot_path(char *moby) { turn_step_limit = frame_time * 6.2831855f; func_L00_0025CE58_2B4668((float *)&MOBY(moby)->rot.z, path_target_heading, - (float *)(&plasmabot_private_state->unk23C), + (float *)(&plasmabot_private_state->heading_angular_velocity), k, k, turn_step_limit); @@ -1256,14 +1275,14 @@ float update_plasmabot_aim_quaternion(char *moby, int flag, float target_angle) turn = -1.2217304706573486f; { float yaw_easing_coefficient = frame_time_sq * 12.566370964050293f; - func_L00_0025CE58_2B4828((float *)(&state->unk268), + func_L00_0025CE58_2B4828((float *)(&state->aim_yaw_offset), turn, - (float *)(&state->unk26C), + (float *)(&state->aim_yaw_angular_velocity), yaw_easing_coefficient, yaw_easing_coefficient, frame_time * 6.2831854820251465f); } - build_axis_rotation_quaternion(&state->unk170, 2, state->unk268); + build_axis_rotation_quaternion(&state->aim_quaternion_storage, 2, state->aim_yaw_offset); if (flag) { float owner_aim_position[4]; float owner_aim_offset[4]; @@ -1280,17 +1299,17 @@ float update_plasmabot_aim_quaternion(char *moby, int flag, float target_angle) fast_vec_sub(bp, owner_aim_position, &MOBY(moby)->pos); owner_aim_offset[2] = owner_aim_offset[2] + 1.5f; target_pitch_angle = -fast_arc_tan(vector_length_xy(bp), owner_aim_offset[2]); - func_L00_0025CE58_2B4828((float *)(&state->unk280), + func_L00_0025CE58_2B4828((float *)(&state->aim_pitch_angle), target_pitch_angle, - (float *)(&state->unk284), + (float *)(&state->aim_pitch_angular_velocity), frame_time_sq * 12.566370964050293f, frame_time_sq * 12.566370964050293f, frame_time * 6.2831854820251465f); cp = pitch_quaternion; - build_axis_rotation_quaternion(cp, 1, *(float *)&state->unk280); - multiply_quaternions(&state->unk170, &state->unk170, cp); + build_axis_rotation_quaternion(cp, 1, *(float *)&state->aim_pitch_angle); + multiply_quaternions(&state->aim_quaternion_storage, &state->aim_quaternion_storage, cp); } - return fast_difference_between_rotations(turn, state->unk268); + return fast_difference_between_rotations(turn, state->aim_yaw_offset); } extern short *D_L14_001ABF40_3920[] __asm__("D_L14_001ABF40"); diff --git a/src/overlays/shared/enemies/plasmabot_death_debris.c b/src/overlays/shared/enemies/plasmabot_death_debris.c index d7de1045ce..cb2e4c5a1b 100644 --- a/src/overlays/shared/enemies/plasmabot_death_debris.c +++ b/src/overlays/shared/enemies/plasmabot_death_debris.c @@ -214,7 +214,7 @@ typedef struct { u32 color[4]; s32 unk50, unk54, unk58; f32 unk5C, unk60; - s32 unk64; + s32 corner_2_texture_t; f32 unk68, unk6C; s64 unk70, tex, unk80, unk88; } GlowQuad_bfa8; @@ -264,7 +264,7 @@ void draw_moby_offset_textured_quad(char *moby) { local.quad.unk58 = 0; local.quad.unk5C = one; local.quad.unk60 = one; - local.quad.unk64 = 0; + local.quad.corner_2_texture_t = 0; local.quad.unk68 = one; local.quad.unk6C = one; diff --git a/src/overlays/shared/enemies/sand_mouse.c b/src/overlays/shared/enemies/sand_mouse.c index 426b2459ad..e31a976df9 100644 --- a/src/overlays/shared/enemies/sand_mouse.c +++ b/src/overlays/shared/enemies/sand_mouse.c @@ -85,7 +85,7 @@ typedef struct { char pad1134[0x24]; int i1158; char pad115C[0xF24]; - void *p2080; + void *hero_moby; char pad2084[8]; int i208C; char pad2090[0x14]; @@ -612,7 +612,7 @@ void sand_mouse_update(struct Moby *moby) { vb[2] = vb[2] + 0.2f; if (is_point_inside_clip_volume(hero_2e3f20->pos, sand_mouse_vars->vol)) { if (!collision_line(va, vb, 0, moby, 0) || - D_L01_001742D8 == hero_2e3f20->p2080) { + D_L01_001742D8 == hero_2e3f20->hero_moby) { compute_sand_mouse_approach_target((int)moby, sand_mouse_vars); if (hero_2e3f20->helper != 0 && hero_2e3f20->helper->oclass == 0x1B1 && hero_2e3f20->helper->state != 0xFE && diff --git a/src/overlays/shared/enemies/scoutbot.c b/src/overlays/shared/enemies/scoutbot.c index 0e2c8b0f8f..c6767e85e6 100644 --- a/src/overlays/shared/enemies/scoutbot.c +++ b/src/overlays/shared/enemies/scoutbot.c @@ -40,24 +40,24 @@ typedef struct ScoutbotVars { u8 pad50[0x78]; s16 unkC8; u8 padCA[0xa6]; - f32 unk170[4]; + f32 tracked_target_position[4]; u8 pad180[0x30]; s32 unk1B0; - s32 unk1B4; + s32 target_selection_status; u8 pad1B8[0x8]; f32 unk1C0[4]; f32 unk1D0[4]; f32 unk1E0[4]; u8 pad1F0[0x10]; f32 unk200; - f32 unk204; - f32 unk208; - f32 unk20C; + f32 vertical_bob_phase; + f32 vertical_bob_amplitude; + f32 vertical_bob_phase_increment; u8 pad210[0x6]; - s16 unk216; - char *unk218; - s32 unk21C; - u8 unk220[0x4]; + s16 ground_hover_offset_enabled; + char *beam_target_moby; + s32 target_path_index; + u8 glow_quad_anchor_position[0x4]; } ScoutbotVars; typedef struct Moby Moby; @@ -80,22 +80,22 @@ typedef struct Data_3DF8 { float target_pos[4]; char pad180[0x30]; Moby *target; - int f1B4; + int path_target_selection_status; char pad1B8[8]; float home[4]; float glow_a[4]; float glow_b[4]; float wander_goal[4]; - float f200; - float f204; - float f208; - float f20C; + float ground_hover_height_offset; + float hover_bob_phase; + float hover_bob_amplitude; + float hover_bob_phase_increment; float yaw_speed; short voice; short near_ground; Moby *current_target; - int f21C; - char f220[0x10]; + int tracked_target_path_index; + char glow_point_position[0x10]; char sound_state[0x10]; } Data_3DF8; @@ -202,17 +202,17 @@ void scoutbot_update(Moby *moby) { qcopy(target_pos, scoutbot_instance_vars->target_pos); switch (moby->state) { case SCOUTBOT_STATE_INITIALIZE: - if (scoutbot_instance_vars->f21C == -1) { + if (scoutbot_instance_vars->tracked_target_path_index == -1) { mark_moby_for_removal(moby); return; } moby->flags |= 0x1000; moby->rot.z = random_angle_radians(); - scoutbot_instance_vars->f200 = 4.0f; - scoutbot_instance_vars->f204 = random_angle_radians(); - scoutbot_instance_vars->f208 = 0.5f; + scoutbot_instance_vars->ground_hover_height_offset = 4.0f; + scoutbot_instance_vars->hover_bob_phase = random_angle_radians(); + scoutbot_instance_vars->hover_bob_amplitude = 0.5f; clear_u64_value(scoutbot_instance_vars->vel); - scoutbot_instance_vars->f20C = frame_time * 2.0943952f; + scoutbot_instance_vars->hover_bob_phase_increment = frame_time * 2.0943952f; scoutbot_instance_vars->b58 = truncate_float_to_s32(15.0f); scoutbot_instance_vars->b5A = truncate_float_to_s32(9.6f); scoutbot_instance_vars->pD0 = &D_L08_00161888; @@ -232,9 +232,9 @@ void scoutbot_update(Moby *moby) { scoutbot_instance_vars->b29 = 0; break; case SCOUTBOT_STATE_IDLE: - if (scoutbot_instance_vars->f1B4 != 2) { - scoutbot_instance_vars->f200 = 0.0f; - scoutbot_instance_vars->f208 = 0.1f; + if (scoutbot_instance_vars->path_target_selection_status != 2) { + scoutbot_instance_vars->ground_hover_height_offset = 0.0f; + scoutbot_instance_vars->hover_bob_amplitude = 0.1f; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 6); } @@ -284,8 +284,8 @@ void scoutbot_update(Moby *moby) { moby->state = SCOUTBOT_STATE_WAIT_FOR_VOICE; } else if (vector_distance_xy(target_pos, scoutbot_instance_vars->home) > 15.0f || absolute_float(scoutbot_instance_vars->home[2] - target_pos[2]) > 4.0f) { - scoutbot_instance_vars->f200 = 4.0f; - scoutbot_instance_vars->f208 = 0.5f; + scoutbot_instance_vars->ground_hover_height_offset = 4.0f; + scoutbot_instance_vars->hover_bob_amplitude = 0.5f; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 6); } @@ -297,8 +297,8 @@ void scoutbot_update(Moby *moby) { float heading = fast_arc_tan(scoutbot_instance_vars->home[0] - moby->pos.x, scoutbot_instance_vars->home[1] - moby->pos.y); - scoutbot_instance_vars->f200 = 4.0f; - scoutbot_instance_vars->f208 = 0.5f; + scoutbot_instance_vars->ground_hover_height_offset = 4.0f; + scoutbot_instance_vars->hover_bob_amplitude = 0.5f; turn_3DF8(moby, heading, &scoutbot_instance_vars->yaw_speed, 0.01f, 0.3f, 0.05f); if (fast_difference_between_rotations(moby->rot.z, heading) < 0.7853982f) { scoutbot_instance_vars->vel[0] += fast_cos(moby->rot.z) * (frame_time_sq * 12.0f); @@ -344,8 +344,8 @@ void scoutbot_update(Moby *moby) { spawn_nearby_effect( scoutbot_instance_vars->current_target, moby, 1, shot_pos, offset, 1.0f); } - scoutbot_instance_vars->f200 = 4.0f; - scoutbot_instance_vars->f208 = 0.5f; + scoutbot_instance_vars->ground_hover_height_offset = 4.0f; + scoutbot_instance_vars->hover_bob_amplitude = 0.5f; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 3); } @@ -367,8 +367,8 @@ void scoutbot_update(Moby *moby) { } case 5: if (FUN_L00_002dc9f0(moby, scoutbot_instance_vars->react)) { - scoutbot_instance_vars->f200 = 4.0f; - scoutbot_instance_vars->f208 = 0.5f; + scoutbot_instance_vars->ground_hover_height_offset = 4.0f; + scoutbot_instance_vars->hover_bob_amplitude = 0.5f; if (moby->prev_seq != 2) { blend_moby_animation(moby, 2, 0, 3); } @@ -408,7 +408,7 @@ void scoutbot_update(Moby *moby) { col = 0x7F2828A0; } moby->glow_color = colorlerp_3DF8(moby->glow_color, col, 0.1f); - moby_point_position(moby, 3, scoutbot_instance_vars->f220); + moby_point_position(moby, 3, scoutbot_instance_vars->glow_point_position); add_draw_callback(draw_scoutbot_glow_quad, moby); } } @@ -417,6 +417,9 @@ void scoutbot_update(Moby *moby) { /* Ported from rac1-decomp (src/overlays/shared/vendor_002D3DF8.c: func_L08_002D49E8), where it is exact; names translated to the US level program. */ void update_scoutbot_health_and_target(struct Moby *moby) { + enum { + SCOUTBOT_TARGET_SELECTION_UNAVAILABLE = 2 + }; ScoutbotVars *scoutbot_pvars = (ScoutbotVars *)moby->pvars; int hit; float dmg; @@ -437,14 +440,20 @@ void update_scoutbot_health_and_target(struct Moby *moby) { } ((unsigned char *)moby)[0xA4] = 0xFF; if (((unsigned char *)moby)[0x20] != 0 && ((unsigned char *)moby)[0x20] != 4) { - char *path = ((char *)l08_paths[scoutbot_pvars->unk21C]); - if (func_L00_00260FB0_f( - moby, &scoutbot_pvars->unk170, 14.0f, 0, 0, path + 0x10, *(int *)path) != 2) { - if (14.0f < vector_distance_xy(&scoutbot_pvars->unk1C0, &scoutbot_pvars->unk170)) { - scoutbot_pvars->unk1B4 = 2; - } else if (3.0f < - absolute_float(scoutbot_pvars->unk1C0[2] - scoutbot_pvars->unk170[2])) { - scoutbot_pvars->unk1B4 = 2; + char *path = ((char *)l08_paths[scoutbot_pvars->target_path_index]); + if (func_L00_00260FB0_f(moby, + &scoutbot_pvars->tracked_target_position, + 14.0f, + 0, + 0, + path + 0x10, + *(int *)path) != 2) { + if (14.0f < vector_distance_xy(&scoutbot_pvars->unk1C0, + &scoutbot_pvars->tracked_target_position)) { + scoutbot_pvars->target_selection_status = SCOUTBOT_TARGET_SELECTION_UNAVAILABLE; + } else if (3.0f < absolute_float(scoutbot_pvars->unk1C0[2] - + scoutbot_pvars->tracked_target_position[2])) { + scoutbot_pvars->target_selection_status = SCOUTBOT_TARGET_SELECTION_UNAVAILABLE; } } } @@ -482,10 +491,10 @@ void draw_target_beam(struct Moby *moby) { pk.uv[6] = 1.0f; pk.uv[7] = 1.0f; moby_point_position(moby, 2, &beam_origin_position); - fast_vec_sub(&delta, scoutbot_private_vars->unk218 + 0x10, &beam_origin_position); + fast_vec_sub(&delta, scoutbot_private_vars->beam_target_moby + 0x10, &beam_origin_position); scale_vector_002d3878(3.0f, &delta); - delta.v[2] = - (*(float *)(scoutbot_private_vars->unk218 + 0x18) + 0.25f) - beam_origin_position.v[2]; + delta.v[2] = (*(float *)(scoutbot_private_vars->beam_target_moby + 0x18) + 0.25f) - + beam_origin_position.v[2]; delta.v[3] = 1.0f; length = fast_vec_length(&delta); clear_u64_value(&angles); @@ -606,11 +615,13 @@ void update_scoutbot_movement(struct Moby *moby) { velocity_ptr = (float *)(&scoutbot_instance_state->unk40); fast_vec_normalize(velocity_ptr, velocity_ptr, movement_length); fast_vec_add((float *)&moby->pos, (float *)&moby->pos, velocity_ptr); - scoutbot_instance_state->unk204 = - fast_add_rotations(scoutbot_instance_state->unk204, scoutbot_instance_state->unk20C); + scoutbot_instance_state->vertical_bob_phase = + fast_add_rotations(scoutbot_instance_state->vertical_bob_phase, + scoutbot_instance_state->vertical_bob_phase_increment); target_height = scoutbot_instance_state->unk1C0[2] + - scoutbot_instance_state->unk208 * fast_sin(scoutbot_instance_state->unk204); - if (scoutbot_instance_state->unk216) + scoutbot_instance_state->vertical_bob_amplitude * + fast_sin(scoutbot_instance_state->vertical_bob_phase); + if (scoutbot_instance_state->ground_hover_offset_enabled) target_height += scoutbot_instance_state->unk200; vertical_step = target_height - moby->pos.z; { @@ -650,7 +661,7 @@ void *enter_scoutbot_return_home_state(struct Moby *moby) { ScoutbotVars *scoutbot_data = (ScoutbotVars *)moby->pvars; moby->state = SCOUTBOT_STATE_RETURN_HOME; scoutbot_data->unk200 = 4.0f; - scoutbot_data->unk208 = 0.5f; + scoutbot_data->vertical_bob_amplitude = 0.5f; if ((unsigned char)((char)moby->prev_seq) != 2) { blend_moby_animation(moby, 2, 0, 3); } @@ -683,7 +694,7 @@ void draw_scoutbot_glow_quad(struct Moby *moby) { pk.uv[5] = 0.0f; pk.uv[6] = 1.0f; pk.uv[7] = 1.0f; - qcopy(M[3], (float *)(&scoutbot_private_state->unk220)); + qcopy(M[3], (float *)(&scoutbot_private_state->glow_quad_anchor_position)); fast_vec_sub(M[0], D_L08_001675C0_lui, M[3]); fast_vec_normalize(M[0], M[0], 1.0f); fast_vec_cross(M[1], M[0], up); diff --git a/src/overlays/shared/enemies/seeker.c b/src/overlays/shared/enemies/seeker.c index 2685ff7126..0c87395e99 100644 --- a/src/overlays/shared/enemies/seeker.c +++ b/src/overlays/shared/enemies/seeker.c @@ -1,5 +1,6 @@ /* Shared moby class seeker: its update and its damage and target handling. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/globals.h" #include "qzero.h" #include "rnc/mobys/moby.h" @@ -440,6 +441,7 @@ void update_seeker_damage_and_target(Moby *moby) { enum { SEEKER_TARGET_STATUS_LOST = 2 }; + char hit_pos[16]; int hit; float damage; @@ -572,7 +574,8 @@ void update_seeker_damage_and_target(Moby *moby) { } } else { Moby *target = seeker_vars->f160; - if (target != 0 && target->state != 0xFE && target->state != 0xFD) { + if (target != 0 && target->state != MOBY_STATE_REMOVAL_MARKER && + target->state != MOBY_STATE_ALTERNATE_REMOVAL_MARKER) { qcopy(seeker_vars->target, &target->pos); } else { seeker_vars->f160 = 0; diff --git a/src/overlays/shared/enemies/sentrybot.c b/src/overlays/shared/enemies/sentrybot.c index ddcc79da98..6f56e61d70 100644 --- a/src/overlays/shared/enemies/sentrybot.c +++ b/src/overlays/shared/enemies/sentrybot.c @@ -90,7 +90,7 @@ typedef struct SentrybotVars { s32 unk38; /* 0x38: set: restart target_countdown */ u8 pad3C[0x24]; u8 trooper_anim[7]; /* 0x60: trooper_anim_update / trooper_anim_finish */ - u8 unk67; + u8 first_channel_blend_target; u8 pad68[8]; SentrybotKnockback knockback; /* 0x70 */ u8 padB0[0x10]; @@ -101,30 +101,30 @@ typedef struct SentrybotVars { u8 padE0[0x20]; f32 unk100[4]; char *target; /* 0x110 */ - s32 unk114; + s32 target_mode; u8 pad118[8]; s32 path_index; /* 0x120: into D_L15_001B0AB0 */ s32 unk124; - s32 alarm_moby_index; /* 0x128: moby the alarm is set on */ - s32 unk12C; /* moby index the sight line ignores */ - f32 target_countdown; /* 0x130 */ - f32 forward_speed; /* 0x134 */ + s32 alarm_moby_index; /* 0x128: moby the alarm is set on */ + s32 sight_line_ignored_moby_index; /* moby index the sight line ignores */ + f32 target_countdown; /* 0x130 */ + f32 forward_speed; /* 0x134 */ f32 unk138[1]; s32 patrol_point; /* 0x13C */ u8 pad140[4]; s32 unk144; - s32 unk148; - s32 unk14C; + s32 patrol_pause_duration_frames; + s32 patrol_pause_timer; s32 unk150; - s16 unk154; + s16 linked_moby_deactivation_cooldown; s16 alert_timer; /* 0x156: set by alert_visible_group_sentrybots */ - s16 unk158; + s16 target_detected_without_engagement; u8 has_line_of_sight; /* 0x15A: to the hero */ - u8 unk15B; + u8 alert_engagement_suppressed; u8 unk15C; - u8 unk15D; - u8 unk15E; - u8 unk15F; + u8 pending_animation; + u8 saved_alert_engagement_suppression_plus_one; + u8 command_alert_transition_started; f32 home_pos[3]; /* 0x160: position at spawn */ f32 home_yaw; /* 0x16C */ f32 turn_start_yaw; @@ -133,12 +133,12 @@ typedef struct SentrybotVars { s32 group_index; s32 linked_moby[4]; /* 0x180: moby indexes, -1: none */ char *attention_target; /* 0x190 */ - s16 unk194; - s16 unk196; + s16 priority_attention_active; + s16 attention_scan_timer; char *attention_source; /* 0x198: set_sentrybot_attention_target */ s16 attention_timer; /* 0x19C */ - u8 unk19E; - u8 unk19F; + u8 projectile_emitted_this_animation; + u8 target_in_view; SentrybotJoint joints[2]; /* 0x1A0 */ f32 effect_quad_pos[3][4]; /* 0x2A0: draw_sentrybot_effect_quads */ s32 clip_volume[4]; /* 0x2D0: -1: none */ @@ -337,7 +337,7 @@ void sentrybot_update(unsigned char *moby) { } if (hero.state.current == 0x65) sentrybot_instance_data->alert_timer = 0; - fast_dec_timer_s16(&sentrybot_instance_data->unk154); + fast_dec_timer_s16(&sentrybot_instance_data->linked_moby_deactivation_cooldown); fast_dec_timer_s16(&sentrybot_instance_data->alert_timer); fast_dec_timer_s16(&sentrybot_instance_data->attention_timer); if (sentrybot_instance_data->alert_timer != 0 && @@ -348,7 +348,7 @@ void sentrybot_update(unsigned char *moby) { set_sentrybot_alarm_duration(linked_alarm_moby, 0xB4); } if (MOBY(moby)->command == 0) - sentrybot_instance_data->unk15F = 0; + sentrybot_instance_data->command_alert_transition_started = 0; switch (MOBY(moby)->state) { case SENTRYBOT_INITIALIZE: if (sentrybot_instance_data->path_index == -1 || @@ -362,8 +362,8 @@ void sentrybot_update(unsigned char *moby) { sentrybot_instance_data->unk29 = 0; qcopy(&sentrybot_instance_data->home_pos, &MOBY(moby)->pos); sentrybot_instance_data->home_yaw = MOBY(moby)->rot.z; - if (sentrybot_instance_data->unk148 < 5) - sentrybot_instance_data->unk148 = 5; + if (sentrybot_instance_data->patrol_pause_duration_frames < 5) + sentrybot_instance_data->patrol_pause_duration_frames = 5; sentrybot_instance_data->unk144 = 1; MOBY(moby)->state = SENTRYBOT_PATROL_IDLE; MOBY(moby)->flags |= 0x1000; @@ -391,22 +391,23 @@ void sentrybot_update(unsigned char *moby) { } case SENTRYBOT_PATROL_IDLE: case SENTRYBOT_PATROL_PAUSE: - if (sentrybot_instance_data->unk114 != 2) { + if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } } else if (sentrybot_instance_data->alert_timer != 0 && - sentrybot_instance_data->unk15B == 0) { + sentrybot_instance_data->alert_engagement_suppressed == 0) { if (sentrybot_instance_data->has_line_of_sight != 0 || sentrybot_instance_data->unk124 == -1) { begin_sentrybot_turn_toward_point((char *)moby, @@ -422,15 +423,15 @@ void sentrybot_update(unsigned char *moby) { } sentrybot_instance_data->unk144 = 0; MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_PATROL_MOVE_FAST; if (MOBY(moby)->prev_seq != 0xE) blend_moby_animation(moby, 0xE, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0xD; - sentrybot_instance_data->unk15D = 0xE; + sentrybot_instance_data->pending_animation = 0xE; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -442,10 +443,10 @@ void sentrybot_update(unsigned char *moby) { (float *)(sentrybot_instance_data->attention_source + 0x10), (void *)0xA, (void *)0xF); - } else if (fast_dec_timer_s16(&sentrybot_instance_data->unk196) != 0 && + } else if (fast_dec_timer_s16(&sentrybot_instance_data->attention_scan_timer) != 0 && (*(int *)&sentrybot_instance_data->attention_target = find_sentrybot_attention_target((char *)moby)) != 0 && - (sentrybot_instance_data->unk194 != 0 || + (sentrybot_instance_data->priority_attention_active != 0 || random_integer_below(scale_game_frames(0x96)) == 0)) { begin_sentrybot_turn_toward_point( (char *)moby, @@ -457,15 +458,17 @@ void sentrybot_update(unsigned char *moby) { if (sentrybot_instance_data->unk124 != -1) { if (sentrybot_instance_data->unk144 == 0 || can_sentrybot_advance_patrol(moby) != 0) { - sentrybot_instance_data->unk14C = - scale_game_frames(sentrybot_instance_data->unk148); + sentrybot_instance_data->patrol_pause_timer = + scale_game_frames(sentrybot_instance_data->patrol_pause_duration_frames); MOBY(moby)->state = SENTRYBOT_PATROL_PAUSE; } - } else if (sentrybot_instance_data->unk158 != 0 && hero.state.current == 0x59) { + } else if (sentrybot_instance_data->target_detected_without_engagement != 0 && + hero.state.current == 0x59) { if (sentrybot_instance_data->unk150 != -1 || - sentrybot_instance_data->unk12C != -1 || - (sentrybot_instance_data->unk154 == 0 && random_integer_below(0x78) == 0)) { - sentrybot_instance_data->unk15D = 0; + sentrybot_instance_data->sight_line_ignored_moby_index != -1 || + (sentrybot_instance_data->linked_moby_deactivation_cooldown == 0 && + random_integer_below(0x78) == 0)) { + sentrybot_instance_data->pending_animation = 0; sentrybot_instance_data->unk15C = 2; MOBY(moby)->state = SENTRYBOT_DEACTIVATE_LINKED_MOBYS_AFTER_ANIMATION; if (MOBY(moby)->prev_seq != 2) @@ -476,7 +479,7 @@ void sentrybot_update(unsigned char *moby) { moby, sentrybot_instance_data, 2, 0, sentrybot_instance_data->home_yaw); } } else if (MOBY(moby)->state == SENTRYBOT_PATROL_PAUSE) { - if (fast_dec_timer(&sentrybot_instance_data->unk14C) != 0) { + if (fast_dec_timer(&sentrybot_instance_data->patrol_pause_timer) != 0) { if (sentrybot_instance_data->unk144 != 0) { sentrybot_instance_data->patrol_point = (sentrybot_instance_data->patrol_point + 1) % @@ -494,17 +497,18 @@ void sentrybot_update(unsigned char *moby) { } break; case SENTRYBOT_WAIT_FOR_ANIMATION_THEN_PATROL_IDLE: - if (sentrybot_instance_data->unk114 != 2) { + if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -512,22 +516,23 @@ void sentrybot_update(unsigned char *moby) { MOBY(moby)->state = SENTRYBOT_PATROL_IDLE; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); - sentrybot_instance_data->unk196 = scale_game_frames(0x168); - sentrybot_instance_data->unk194 = 0; + sentrybot_instance_data->attention_scan_timer = scale_game_frames(0x168); + sentrybot_instance_data->priority_attention_active = 0; } break; case SENTRYBOT_DEACTIVATE_LINKED_MOBYS_AFTER_ANIMATION: if (MOBY(moby)->anim_flags & 2) { - sentrybot_instance_data->unk154 = scale_game_frames(0xF0); + sentrybot_instance_data->linked_moby_deactivation_cooldown = scale_game_frames(0xF0); if (sentrybot_instance_data->unk150 != -1) { mark_moby_killed_and_release_owned_voice((int)l15_moby_array + (sentrybot_instance_data->unk150 << 8)); sentrybot_instance_data->unk150 = -1; } - if (sentrybot_instance_data->unk12C != -1) { - mark_moby_killed_and_release_owned_voice((int)l15_moby_array + - (sentrybot_instance_data->unk12C << 8)); - sentrybot_instance_data->unk12C = -1; + if (sentrybot_instance_data->sight_line_ignored_moby_index != -1) { + mark_moby_killed_and_release_owned_voice( + (int)l15_moby_array + + (sentrybot_instance_data->sight_line_ignored_moby_index << 8)); + sentrybot_instance_data->sight_line_ignored_moby_index = -1; } MOBY(moby)->state = sentrybot_instance_data->unk15C; switch (MOBY(moby)->state) { @@ -545,21 +550,22 @@ void sentrybot_update(unsigned char *moby) { case SENTRYBOT_TURN_NEGATIVE_HEADING_DELTA: case SENTRYBOT_TURN_POSITIVE_HEADING_DELTA: case SENTRYBOT_TURN_AROUND: - if (sentrybot_instance_data->unk114 != 2 && + if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION && fast_difference_between_rotations( MOBY(moby)->rot.z, fast_arc_tan(sentrybot_instance_data->unkD0[0] - MOBY(moby)->pos.x, sentrybot_instance_data->unkD0[1] - MOBY(moby)->pos.y)) < 0.5235988f) { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -585,9 +591,9 @@ void sentrybot_update(unsigned char *moby) { turn_heading_offsets_degrees[k] * DEG_TO_RAD); } MOBY(moby)->state = sentrybot_instance_data->unk15C; - if (MOBY(moby)->prev_seq != sentrybot_instance_data->unk15D) + if (MOBY(moby)->prev_seq != sentrybot_instance_data->pending_animation) blend_moby_animation( - moby, sentrybot_instance_data->unk15D, 0, scale_game_frames(10)); + moby, sentrybot_instance_data->pending_animation, 0, scale_game_frames(10)); } else if (MOBY(moby)->seq == MOBY(moby)->prev_seq && turn_heading_offsets_degrees != 0) { float t = compute_interpolated_record_value(moby); @@ -612,22 +618,23 @@ void sentrybot_update(unsigned char *moby) { sentrybot_instance_data->unk144 = 1; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); - } else if (sentrybot_instance_data->unk114 != 2) { + } else if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } } else if (sentrybot_instance_data->alert_timer != 0 && - sentrybot_instance_data->unk15B == 0) { + sentrybot_instance_data->alert_engagement_suppressed == 0) { if (sentrybot_instance_data->has_line_of_sight != 0) { begin_sentrybot_turn_toward_point((char *)moby, sentrybot_instance_data, @@ -635,17 +642,17 @@ void sentrybot_update(unsigned char *moby) { (void *)0x10, (void *)3); } else { - sentrybot_instance_data->unk14C = scale_game_frames(0x3C); + sentrybot_instance_data->patrol_pause_timer = scale_game_frames(0x3C); MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_PATROL_MOVE_FAST; if (MOBY(moby)->prev_seq != 0xE) blend_moby_animation(moby, 0xE, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0xD; - sentrybot_instance_data->unk15D = 0xE; + sentrybot_instance_data->pending_animation = 0xE; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -657,19 +664,21 @@ void sentrybot_update(unsigned char *moby) { (float *)(sentrybot_instance_data->attention_source + 0x10), (void *)0xA, (void *)0xF); - } else if (sentrybot_instance_data->unk158 != 0 && hero.state.current == 0x59) { - if (sentrybot_instance_data->unk150 != -1 || sentrybot_instance_data->unk12C != -1 || - sentrybot_instance_data->unk154 == 0) { + } else if (sentrybot_instance_data->target_detected_without_engagement != 0 && + hero.state.current == 0x59) { + if (sentrybot_instance_data->unk150 != -1 || + sentrybot_instance_data->sight_line_ignored_moby_index != -1 || + sentrybot_instance_data->linked_moby_deactivation_cooldown == 0) { sentrybot_instance_data->unk15C = MOBY(moby)->state; - sentrybot_instance_data->unk15D = 0xD; + sentrybot_instance_data->pending_animation = 0xD; MOBY(moby)->state = SENTRYBOT_DEACTIVATE_LINKED_MOBYS_AFTER_ANIMATION; if (MOBY(moby)->prev_seq != 2) blend_moby_animation(moby, 2, 0, scale_game_frames(10)); } - } else if (fast_dec_timer_s16(&sentrybot_instance_data->unk196) != 0 && + } else if (fast_dec_timer_s16(&sentrybot_instance_data->attention_scan_timer) != 0 && (*(int *)&sentrybot_instance_data->attention_target = find_sentrybot_attention_target((char *)moby)) != 0 && - (sentrybot_instance_data->unk194 != 0 || + (sentrybot_instance_data->priority_attention_active != 0 || random_integer_below(scale_game_frames(0x96)) == 0)) { begin_sentrybot_turn_toward_point( (char *)moby, @@ -691,22 +700,24 @@ void sentrybot_update(unsigned char *moby) { sentrybot_instance_data->unk144 = 1; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); - } else if (sentrybot_instance_data->unk114 != 2 && sentrybot_instance_data->unk15B == 0) { + } else if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION && + sentrybot_instance_data->alert_engagement_suppressed == 0) { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } } else if (sentrybot_instance_data->alert_timer != 0) { - sentrybot_instance_data->unk14C = scale_game_frames(0x3C); + sentrybot_instance_data->patrol_pause_timer = scale_game_frames(0x3C); } else { MOBY(moby)->state = SENTRYBOT_RETURN_HOME; if (MOBY(moby)->prev_seq != 0xD) @@ -765,7 +776,7 @@ void sentrybot_update(unsigned char *moby) { fast_arc_tan(sentrybot_instance_data->unkD0[0] - MOBY(moby)->pos.x, sentrybot_instance_data->unkD0[1] - MOBY(moby)->pos.y)) > 0.7853982f && - sentrybot_instance_data->unk15B == 0) { + sentrybot_instance_data->alert_engagement_suppressed == 0) { begin_sentrybot_turn_toward_point((char *)moby, sentrybot_instance_data, (float *)(&sentrybot_instance_data->unkD0), @@ -809,10 +820,12 @@ void sentrybot_update(unsigned char *moby) { } else { if (sentrybot_instance_data->unk15C != 0xFF) MOBY(moby)->state = sentrybot_instance_data->unk15C; - if (sentrybot_instance_data->unk15D != 0xFF && - MOBY(moby)->prev_seq != sentrybot_instance_data->unk15D) - blend_moby_animation( - moby, sentrybot_instance_data->unk15D, 0, scale_game_frames(10)); + if (sentrybot_instance_data->pending_animation != 0xFF && + MOBY(moby)->prev_seq != sentrybot_instance_data->pending_animation) + blend_moby_animation(moby, + sentrybot_instance_data->pending_animation, + 0, + scale_game_frames(10)); } } } @@ -853,7 +866,7 @@ void sentrybot_update(unsigned char *moby) { break; case SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_POSITIVE_JOINT_AIM: sentrybot_instance_data->attention_timer = 0; - sentrybot_instance_data->unk194 = 0; + sentrybot_instance_data->priority_attention_active = 0; alert_visible_group_sentrybots(moby); if (MOBY(moby)->anim_flags & 2) { if (hero.state.current == 0x65) { @@ -862,7 +875,7 @@ void sentrybot_update(unsigned char *moby) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } else { MOBY(moby)->state = SENTRYBOT_EMIT_WITH_POSITIVE_JOINT_AIM; - sentrybot_instance_data->unk19E = 0; + sentrybot_instance_data->projectile_emitted_this_animation = 0; if (MOBY(moby)->prev_seq != 6) blend_moby_animation(moby, 6, 0, scale_game_frames(10)); } @@ -870,7 +883,7 @@ void sentrybot_update(unsigned char *moby) { break; case SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM: sentrybot_instance_data->attention_timer = 0; - sentrybot_instance_data->unk194 = 0; + sentrybot_instance_data->priority_attention_active = 0; alert_visible_group_sentrybots(moby); if (MOBY(moby)->anim_flags & 2) { if (hero.state.current == 0x65) { @@ -879,7 +892,7 @@ void sentrybot_update(unsigned char *moby) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } else { MOBY(moby)->state = SENTRYBOT_EMIT_WITH_NEGATIVE_JOINT_AIM; - sentrybot_instance_data->unk19E = 0; + sentrybot_instance_data->projectile_emitted_this_animation = 0; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); } @@ -887,9 +900,9 @@ void sentrybot_update(unsigned char *moby) { break; case SENTRYBOT_EMIT_WITH_POSITIVE_JOINT_AIM: sentrybot_instance_data->attention_timer = 0; - sentrybot_instance_data->unk194 = 0; + sentrybot_instance_data->priority_attention_active = 0; alert_visible_group_sentrybots(moby); - if (sentrybot_instance_data->unk19E == 0) { + if (sentrybot_instance_data->projectile_emitted_this_animation == 0) { float t = compute_interpolated_record_value(moby); if (t >= 0.85f && t < 3.0f) { j2 = 2; @@ -915,7 +928,7 @@ void sentrybot_update(unsigned char *moby) { (char *)emission_origin, (char *)(&sentrybot_instance_data->unk100)); } - sentrybot_instance_data->unk19E = 1; + sentrybot_instance_data->projectile_emitted_this_animation = 1; } } if (MOBY(moby)->anim_flags & 2) { @@ -943,7 +956,8 @@ void sentrybot_update(unsigned char *moby) { (float *)(&sentrybot_instance_data->unkD0), (void *)0x10, (void *)3); - } else if (sentrybot_instance_data->unk114 == 2) { + } else if (sentrybot_instance_data->target_mode == + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { MOBY(moby)->state = SENTRYBOT_ALERT_IDLE; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); @@ -952,14 +966,14 @@ void sentrybot_update(unsigned char *moby) { if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } - sentrybot_instance_data->unk19E = 0; + sentrybot_instance_data->projectile_emitted_this_animation = 0; } break; case SENTRYBOT_EMIT_WITH_NEGATIVE_JOINT_AIM: sentrybot_instance_data->attention_timer = 0; - sentrybot_instance_data->unk194 = 0; + sentrybot_instance_data->priority_attention_active = 0; alert_visible_group_sentrybots(moby); - if (sentrybot_instance_data->unk19E == 0) { + if (sentrybot_instance_data->projectile_emitted_this_animation == 0) { float t = compute_interpolated_record_value(moby); if (t >= 0.85f && t < 3.0f) { j3 = 3; @@ -985,7 +999,7 @@ void sentrybot_update(unsigned char *moby) { (char *)emission_origin, (char *)(&sentrybot_instance_data->unk100)); } - sentrybot_instance_data->unk19E = 1; + sentrybot_instance_data->projectile_emitted_this_animation = 1; } } if (MOBY(moby)->anim_flags & 2) { @@ -1013,7 +1027,8 @@ void sentrybot_update(unsigned char *moby) { (float *)(&sentrybot_instance_data->unkD0), (void *)0x12, (void *)5); - } else if (sentrybot_instance_data->unk114 == 2) { + } else if (sentrybot_instance_data->target_mode == + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { MOBY(moby)->state = SENTRYBOT_ALERT_IDLE; if (MOBY(moby)->prev_seq != 0) blend_moby_animation(moby, 0, 0, scale_game_frames(10)); @@ -1022,7 +1037,7 @@ void sentrybot_update(unsigned char *moby) { if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 0, scale_game_frames(10)); } - sentrybot_instance_data->unk19E = 0; + sentrybot_instance_data->projectile_emitted_this_animation = 0; } break; case SENTRYBOT_ALERT_IDLE: @@ -1038,9 +1053,9 @@ void sentrybot_update(unsigned char *moby) { set_sentrybot_alarm_duration(linked_alarm_moby, -1); } } else { - int mode = sentrybot_instance_data->unk114; + int mode = sentrybot_instance_data->target_mode; if (mode != SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION && - sentrybot_instance_data->unk15B == 0) { + sentrybot_instance_data->alert_engagement_suppressed == 0) { begin_sentrybot_turn_toward_point((char *)moby, sentrybot_instance_data, (float *)(&sentrybot_instance_data->unkD0), @@ -1059,7 +1074,7 @@ void sentrybot_update(unsigned char *moby) { } } else if (sentrybot_instance_data->has_line_of_sight != 0) { if (mode != SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION && - sentrybot_instance_data->unk15B == 0) { + sentrybot_instance_data->alert_engagement_suppressed == 0) { begin_sentrybot_turn_toward_point((char *)moby, sentrybot_instance_data, (float *)(target + 0x10), @@ -1079,17 +1094,17 @@ void sentrybot_update(unsigned char *moby) { *D_L15_001B0AB0[sentrybot_instance_data->unk124]; } sentrybot_instance_data->unk144 = 0; - sentrybot_instance_data->unk14C = scale_game_frames(0x3C); + sentrybot_instance_data->patrol_pause_timer = scale_game_frames(0x3C); MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_PATROL_MOVE_FAST; if (MOBY(moby)->prev_seq != 0xE) blend_moby_animation(moby, 0xE, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0xD; - sentrybot_instance_data->unk15D = 0xE; + sentrybot_instance_data->pending_animation = 0xE; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } @@ -1108,26 +1123,27 @@ void sentrybot_update(unsigned char *moby) { blend_moby_animation(moby, 0, 0, scale_game_frames(10)); } else { MOBY(moby)->command = 1; - if (sentrybot_instance_data->unk15F != 0) { + if (sentrybot_instance_data->command_alert_transition_started != 0) { MOBY(moby)->state = SENTRYBOT_WAIT_FOR_ANIMATION_THEN_EMIT_WITH_NEGATIVE_JOINT_AIM; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } else { - sentrybot_instance_data->unk15F = 1; + sentrybot_instance_data->command_alert_transition_started = 1; MOBY(moby)->state = SENTRYBOT_WAIT_FOR_TRANSITION_ANIMATION; sentrybot_instance_data->unk15C = 0x10; - sentrybot_instance_data->unk15D = 3; + sentrybot_instance_data->pending_animation = 3; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } } return; } - if (sentrybot_instance_data->unk12C != -1) { - mark_moby_killed_and_release_owned_voice((int)l15_moby_array + - (sentrybot_instance_data->unk12C << 8)); - sentrybot_instance_data->unk12C = -1; + if (sentrybot_instance_data->sight_line_ignored_moby_index != -1) { + mark_moby_killed_and_release_owned_voice( + (int)l15_moby_array + + (sentrybot_instance_data->sight_line_ignored_moby_index << 8)); + sentrybot_instance_data->sight_line_ignored_moby_index = -1; } if (sentrybot_instance_data->unk150 != -1) { mark_moby_killed_and_release_owned_voice((int)l15_moby_array + @@ -1147,10 +1163,11 @@ void sentrybot_update(unsigned char *moby) { } case SENTRYBOT_DEATH_KNOCKBACK: if (step_moby_motion(moby, &sentrybot_instance_data->knockback) & 0x160) { - if (sentrybot_instance_data->unk12C != -1) { - mark_moby_killed_and_release_owned_voice((int)l15_moby_array + - (sentrybot_instance_data->unk12C << 8)); - sentrybot_instance_data->unk12C = -1; + if (sentrybot_instance_data->sight_line_ignored_moby_index != -1) { + mark_moby_killed_and_release_owned_voice( + (int)l15_moby_array + + (sentrybot_instance_data->sight_line_ignored_moby_index << 8)); + sentrybot_instance_data->sight_line_ignored_moby_index = -1; } if (sentrybot_instance_data->unk150 != -1) { mark_moby_killed_and_release_owned_voice((int)l15_moby_array + @@ -1168,10 +1185,11 @@ void sentrybot_update(unsigned char *moby) { update_sentrybot_joint_aim(moby); if (sentrybot_instance_data->alert_timer != 0) { lvl = 2; - } else if (sentrybot_instance_data->unk114 != 2) { + } else if (sentrybot_instance_data->target_mode != + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { lvl = 2; } else { - lvl = sentrybot_instance_data->unk158 != 0; + lvl = sentrybot_instance_data->target_detected_without_engagement != 0; } tick = D_L15_0015F5CC; if (tick != sentrybot_alert_level_frame_stamp_gp || hero.glow_pulse_level < lvl) { @@ -1236,7 +1254,7 @@ int begin_sentrybot_turn_toward_heading( moby_data->turn_target_yaw = angle; moby_data->turn_delta = heading_delta; moby_data->unk15C = next_state; - moby_data->unk15D = next_animation; + moby_data->pending_animation = next_animation; if (heading_delta > 2.0943952f || heading_delta < -2.0943952f) { MOBY(moby)->state = SENTRYBOT_TURN_AROUND; stored_heading_delta = moby_data->turn_delta; @@ -1378,8 +1396,8 @@ int find_sentrybot_attention_target(char *moby) { MOBY(candidate_moby)->pos.y - MOBY(moby)->pos.y)); unsigned char candidate_state = ((char *)((id << 8) + (int)l15_moby_array))[0x20]; if (candidate_state == 7 || candidate_state == 0xF) - moby_data->unk194 = 1; - if (moby_data->unk194 != 0 || f < 1.2217305f) { + moby_data->priority_attention_active = 1; + if (moby_data->priority_attention_active != 0 || f < 1.2217305f) { qcopy(candidate_line_endpoint, (char *)((id << 8) + (int)l15_moby_array) + 0x10); line_start[2] += 1.0f; if (collision_line(line_start, candidate_line_endpoint, 2, 0, 0) == 0) { @@ -1393,7 +1411,7 @@ int find_sentrybot_attention_target(char *moby) { } } } while (*group_moby_entry++ >= 0); - if (moby_data->unk194 == 0) { + if (moby_data->priority_attention_active == 0) { if (bd > 8.0f) best = 0; } @@ -1461,7 +1479,7 @@ void alert_visible_group_sentrybots(void *mp) { *(SentrybotVars **)((char *)(listed_moby_byte_offset + (int)l15_moby_array) + 0x78); moby_data->alert_timer = scale_game_frames(300); - moby_data->unk15B = 0; + moby_data->alert_engagement_suppressed = 0; set_sentrybot_attention_target( (char *)source_moby, (char *)((int)l15_moby_array + listed_moby_byte_offset)); } @@ -1495,7 +1513,7 @@ void update_sentrybot_joint_aim(void *mv) { float k2 = 0.3f; float yaw, pitch; int have = 0; - if (moby_data->unk194 != 0 && moby_data->attention_target != 0) { + if (moby_data->priority_attention_active != 0 && moby_data->attention_target != 0) { qcopy(target_position, moby_data->attention_target + 0x10); have = 1; } else if (moby_data->attention_timer != 0 && moby_data->attention_source != 0) { @@ -1570,6 +1588,12 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i enum { HIT_STATUS_SKIP_REACTION = 1 }; + enum { + SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION = 2 + }; + enum { + SENTRYBOT_TARGET_MODE_SNAPSHOT_ENGAGEMENT_SUPPRESSION = 1 + }; unsigned char *moby = sentrybot_moby; SentrybotVars *sentrybot_data = (SentrybotVars *)MOBY(moby)->pvars; char *hit; @@ -1613,7 +1637,7 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i break; case SENTRYBOT_FIRST_CHANNEL_BLEND_HIT_RESPONSE: case SENTRYBOT_FIRST_CHANNEL_BLEND_TARGET_HIT_RESPONSE: - sentrybot_data->unk67 = 0xFA; + sentrybot_data->first_channel_blend_target = 0xFA; break; case NONLETHAL_KNOCKBACK_HIT_RESPONSE: case NONLETHAL_ARC_HIT_RESPONSE: @@ -1655,7 +1679,7 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i trooper_start_knockback(moby, &sentrybot_data->knockback, 7, 1, 0, angle); MOBY(moby)->state = SENTRYBOT_RECOVERABLE_KNOCKBACK; MOBY(moby)->command = 2; - sentrybot_data->unk67 = 0x78; + sentrybot_data->first_channel_blend_target = 0x78; break; case LETHAL_HIT_RESPONSE: case DEATH_KNOCKBACK_HIT_RESPONSE: { @@ -1694,7 +1718,7 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i trooper_start_knockback(moby, &sentrybot_data->knockback, 8, 1, 0, fall_angle); MOBY(moby)->state = SENTRYBOT_DEATH_KNOCKBACK; MOBY(moby)->command = 2; - sentrybot_data->unk67 = 0xF0; + sentrybot_data->first_channel_blend_target = 0xF0; break; } trooper_anim_update(moby, &sentrybot_data->trooper_anim); @@ -1716,8 +1740,8 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i group = 0; qcopy(hit_vector_or_sight_line_origin, &MOBY(moby)->pos); hit_vector_or_sight_line_origin[2] += 1.0f; - if (sentrybot_data->unk12C != -1) - group = (int)l15_moby_array + (sentrybot_data->unk12C << 8); + if (sentrybot_data->sight_line_ignored_moby_index != -1) + group = (int)l15_moby_array + (sentrybot_data->sight_line_ignored_moby_index << 8); sentrybot_data->has_line_of_sight = collision_line(hit_vector_or_sight_line_origin, D_0013F420, 2, (void *)group, 0) == 0; } else { @@ -1736,33 +1760,38 @@ void update_sentrybot_hit_response_and_target_visibility(void *sentrybot_moby, i MOBY(moby)->state == SENTRYBOT_EMIT_WITH_NEGATIVE_JOINT_AIM) { seen = sentrybot_data->has_line_of_sight; } - if (sentrybot_data->unk114 == 1) - sentrybot_data->unk15E = sentrybot_data->unk15B + 1; + if (sentrybot_data->target_mode == SENTRYBOT_TARGET_MODE_SNAPSHOT_ENGAGEMENT_SUPPRESSION) + sentrybot_data->saved_alert_engagement_suppression_plus_one = + sentrybot_data->alert_engagement_suppressed + 1; else if ((unsigned char)D_001413F4[0] != 3) - sentrybot_data->unk15E = 0; - else if (sentrybot_data->unk15E >= 2) - sentrybot_data->unk15B = 1; - sentrybot_data->unk19F = 1; + sentrybot_data->saved_alert_engagement_suppression_plus_one = 0; + else if (sentrybot_data->saved_alert_engagement_suppression_plus_one >= 2) + sentrybot_data->alert_engagement_suppressed = 1; + sentrybot_data->target_in_view = 1; if (seen == 0) { if (sentrybot_data->has_line_of_sight == 0) - sentrybot_data->unk15B = 1; - sentrybot_data->unk19F = 0; - sentrybot_data->unk114 = 2; - sentrybot_data->unk158 = 0; - } else if (((sentrybot_data->alert_timer == 0 || sentrybot_data->unk15B != 0) && + sentrybot_data->alert_engagement_suppressed = 1; + sentrybot_data->target_in_view = 0; + sentrybot_data->target_mode = SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION; + sentrybot_data->target_detected_without_engagement = 0; + } else if (((sentrybot_data->alert_timer == 0 || + sentrybot_data->alert_engagement_suppressed != 0) && (unsigned char)D_001413F4[0] == 3) || - (sentrybot_data->unk15E != 0 && sentrybot_data->unk114 != 1)) { - sentrybot_data->unk114 = 2; - sentrybot_data->unk158 = 1; - } else if ((unsigned char)D_001413F4[0] != 3 && sentrybot_data->unk114 != 2) { - sentrybot_data->unk15B = 0; + (sentrybot_data->saved_alert_engagement_suppression_plus_one != 0 && + sentrybot_data->target_mode != + SENTRYBOT_TARGET_MODE_SNAPSHOT_ENGAGEMENT_SUPPRESSION)) { + sentrybot_data->target_mode = SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION; + sentrybot_data->target_detected_without_engagement = 1; + } else if ((unsigned char)D_001413F4[0] != 3 && + sentrybot_data->target_mode != SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION) { + sentrybot_data->alert_engagement_suppressed = 0; } if (D_L15_0015F5C4 == 2) - sentrybot_data->unk114 = 2; + sentrybot_data->target_mode = SENTRYBOT_TARGET_MODE_SUPPRESS_DIRECT_EMISSION; } else { - sentrybot_data->unk19F = 0; - sentrybot_data->unk15B = 1; - sentrybot_data->unk158 = 0; + sentrybot_data->target_in_view = 0; + sentrybot_data->alert_engagement_suppressed = 1; + sentrybot_data->target_detected_without_engagement = 0; } if (*(int *)&sentrybot_data->target == 0) *(int *)&sentrybot_data->target = (*(int *)&D_001413D0_lui); diff --git a/src/overlays/shared/enemies/sentrybot_alarm.c b/src/overlays/shared/enemies/sentrybot_alarm.c index bb1b2ac95d..254535ab92 100644 --- a/src/overlays/shared/enemies/sentrybot_alarm.c +++ b/src/overlays/shared/enemies/sentrybot_alarm.c @@ -124,11 +124,11 @@ void sentrybot_alarm_update(unsigned char *moby) { D_L15_00161AB8 = 0; *(int *)&D_L15_00161ABC_gp = 0; if (mode == SENTRYBOT_ALARM_MODE_GROUP_RELEASE_ONLY) { - MOBY(moby)->state = 6; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_WAIT_FOR_GROUP_RELEASE_TRIGGER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, 0); } else { - MOBY(moby)->state = 3; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_WAIT_FOR_ALARM_TRIGGER; if (MOBY(moby)->prev_seq != 2) blend_moby_animation(moby, 2, 0, 0); } @@ -144,17 +144,17 @@ void sentrybot_alarm_update(unsigned char *moby) { goto update; if (D_L15_0015F5C4 != 2) { if (alarm_state[0] == 1) { - MOBY(moby)->state = 6; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_WAIT_FOR_GROUP_RELEASE_TRIGGER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(30)); } else { - MOBY(moby)->state = 5; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ACTIVE_PULSE; } } break; case SENTRYBOT_ALARM_STATE_STANDBY_RETURN_TRANSITION: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 3; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_WAIT_FOR_ALARM_TRIGGER; if (MOBY(moby)->prev_seq != 2) blend_moby_animation(moby, 2, 0, scale_game_frames(10)); } @@ -163,7 +163,7 @@ void sentrybot_alarm_update(unsigned char *moby) { if (alarm_state[2] == 0) goto update; if (D_L15_0015F5C4 != 2) { - MOBY(moby)->state = 4; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ALARM_START_TRANSITION; if (MOBY(moby)->prev_seq != 3) blend_moby_animation(moby, 3, 0, scale_game_frames(10)); } @@ -173,20 +173,20 @@ void sentrybot_alarm_update(unsigned char *moby) { if (alarm_state[2] == 0 || D_L15_0015F5C4 == 2) goto stop_animation; if (alarm_state[0] == 1) { - MOBY(moby)->state = 7; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_GROUP_RELEASE_START_TRANSITION; if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 0, scale_game_frames(10)); } else { if (MOBY(moby)->prev_seq != 8) blend_moby_animation(moby, 8, 0, scale_game_frames(10)); - MOBY(moby)->state = 5; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ACTIVE_PULSE; } } break; stop_animation: if (MOBY(moby)->prev_seq != 8) blend_moby_animation(moby, 8, 0, scale_game_frames(10)); - MOBY(moby)->state = 10; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ALARM_STOP_TRANSITION; break; case SENTRYBOT_ALARM_STATE_ACTIVE_PULSE: if ((MOBY(moby)->anim_flags & 2) && MOBY(moby)->prev_seq != 0) @@ -202,19 +202,19 @@ void sentrybot_alarm_update(unsigned char *moby) { alarm_state[2] = 0; if (MOBY(moby)->prev_seq != 8) blend_moby_animation(moby, 8, 0, scale_game_frames(10)); - MOBY(moby)->state = 10; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ALARM_STOP_TRANSITION; } break; case SENTRYBOT_ALARM_STATE_WAIT_FOR_GROUP_RELEASE_TRIGGER: if (alarm_state[2] == 0) goto update; - MOBY(moby)->state = 7; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_GROUP_RELEASE_START_TRANSITION; if (MOBY(moby)->prev_seq != 5) blend_moby_animation(moby, 5, 0, scale_game_frames(10)); break; case SENTRYBOT_ALARM_STATE_GROUP_RELEASE_START_TRANSITION: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 8; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_RELEASE_GROUP_MOBYS; if (MOBY(moby)->prev_seq != 6) blend_moby_animation(moby, 6, 0, scale_game_frames(10)); } @@ -233,7 +233,7 @@ void sentrybot_alarm_update(unsigned char *moby) { if (fast_dec_timer(alarm_state + 6) || D_L15_0015F5C4 == 2) { set_sentrybot_alarm_duration((char *)moby, 0); alarm_state[2] = 0; - MOBY(moby)->state = 9; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_GROUP_RELEASE_STOP_TRANSITION; if (MOBY(moby)->prev_seq != 7) blend_moby_animation(moby, 7, 0, scale_game_frames(10)); } @@ -242,11 +242,11 @@ void sentrybot_alarm_update(unsigned char *moby) { case SENTRYBOT_ALARM_STATE_GROUP_RELEASE_STOP_TRANSITION: if (MOBY(moby)->anim_flags & 2) { if (alarm_state[0] == 2) { - MOBY(moby)->state = 6; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_WAIT_FOR_GROUP_RELEASE_TRIGGER; if (MOBY(moby)->prev_seq != 4) blend_moby_animation(moby, 4, 0, scale_game_frames(10)); } else { - MOBY(moby)->state = 10; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_ALARM_STOP_TRANSITION; if (MOBY(moby)->prev_seq != 8) blend_moby_animation(moby, 8, 0, scale_game_frames(10)); } @@ -254,7 +254,7 @@ void sentrybot_alarm_update(unsigned char *moby) { break; case SENTRYBOT_ALARM_STATE_ALARM_STOP_TRANSITION: if (MOBY(moby)->anim_flags & 2) { - MOBY(moby)->state = 2; + MOBY(moby)->state = SENTRYBOT_ALARM_STATE_STANDBY_RETURN_TRANSITION; if (MOBY(moby)->prev_seq != 1) blend_moby_animation(moby, 1, 0, scale_game_frames(10)); } diff --git a/src/overlays/shared/enemies/smoke_trail_projectile.c b/src/overlays/shared/enemies/smoke_trail_projectile.c index 6e11719393..62610de8fc 100644 --- a/src/overlays/shared/enemies/smoke_trail_projectile.c +++ b/src/overlays/shared/enemies/smoke_trail_projectile.c @@ -14,12 +14,12 @@ typedef struct { float v[2]; - float f8; + float direction_z; float fC; char pad10[8]; char b18; char b19; - short s1A; + short source_moby_class; char pad1C[0x14]; } Hit_2eedd8; @@ -82,10 +82,10 @@ void smoke_trail_projectile_update(char *moby) { if (*(int *)(collision_result + 0x18) != 0) { make_hit_descriptor(&hit_descriptor, moby, 0x10001, 1.0f, moby_vars); set_vector_length_xy(&hit_descriptor, &hit_descriptor, 1.0f); - hit_descriptor.f8 = 1.0f; + hit_descriptor.direction_z = 1.0f; hit_descriptor.fC = 5627.9248f; hit_descriptor.b19 = 1; - hit_descriptor.s1A = ((unsigned short)MOBY(moby)->oclass); + hit_descriptor.source_moby_class = ((unsigned short)MOBY(moby)->oclass); hit_descriptor.b18 = 0; record_moby_hit(*(void **)(collision_result + 0x18), &hit_descriptor); } diff --git a/src/overlays/shared/enemies/spawner.c b/src/overlays/shared/enemies/spawner.c index 301333d7de..76cc6b4d74 100644 --- a/src/overlays/shared/enemies/spawner.c +++ b/src/overlays/shared/enemies/spawner.c @@ -1,6 +1,7 @@ /* Shared moby class spawner: lobs spawner_egg bubbles towards target regions. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "sda.h" #include "qcopy.h" #include "rnc/mobys/moby.h" @@ -130,7 +131,7 @@ int refresh_spawner_population_and_find_free_slot(int unused, char *spawner_vars for (i = 0, slot = (char **)(spawner_vars + 0xB0); i < 20; i++, slot++) { char *slot_moby = *slot; if (slot_moby != 0 && MOBY(slot_moby)->oclass == 0x75E && - (unsigned char)MOBY(slot_moby)->state != 0xFE && + (unsigned char)MOBY(slot_moby)->state != MOBY_STATE_REMOVAL_MARKER && (unsigned char)MOBY(slot_moby)->state != 0xFD) { spawner_vars[0x91]++; } else { @@ -190,7 +191,8 @@ void spawner_update(char *moby) { region_count); } else { char *target_moby = *(char **)((char *)spawner_vars + 0x140); - if (target_moby != 0 && (unsigned char)MOBY(target_moby)->state != 0xFE && + if (target_moby != 0 && + (unsigned char)MOBY(target_moby)->state != MOBY_STATE_REMOVAL_MARKER && (unsigned char)MOBY(target_moby)->state != 0xFD) { qcopy((char *)spawner_vars + 0x100, &MOBY(target_moby)->pos); } else { diff --git a/src/overlays/shared/enemies/spawner_egg.c b/src/overlays/shared/enemies/spawner_egg.c index 2e878685e6..830b9f19f8 100644 --- a/src/overlays/shared/enemies/spawner_egg.c +++ b/src/overlays/shared/enemies/spawner_egg.c @@ -77,6 +77,9 @@ static inline void bubble_bounce(struct Moby *moby, BubbleVars *vars) { struct Moby *respawn_spawner_child(struct Moby *owner, Vec4 *pos) __asm__("FUN_L09_0030a778"); struct Moby *respawn_spawner_child(struct Moby *parent_spawner_moby, Vec4 *pos) { + enum { + SPAWNER_CHILD_STATE_INITIAL = 0 + }; struct Moby *spawned_moby; struct Moby *child_suck_cannon_record; u8 *owner_vars; @@ -98,7 +101,7 @@ struct Moby *respawn_spawner_child(struct Moby *parent_spawner_moby, Vec4 *pos) owner_vars[0x91] = owner_vars[0x91] + 1; qcopy_nc(&spawned_moby->pos, pos_ptr); spawned_moby->pos.w = 0.0f; - spawned_moby->state = 0; + spawned_moby->state = SPAWNER_CHILD_STATE_INITIAL; spawned_moby->command = 0; spawned_moby->flags = spawned_moby->pclass->flags; spawned_moby->scale = spawned_moby->pclass->scale; diff --git a/src/overlays/shared/enemies/walker_update_gait.c b/src/overlays/shared/enemies/walker_update_gait.c index cea7984e92..13a6b6302b 100644 --- a/src/overlays/shared/enemies/walker_update_gait.c +++ b/src/overlays/shared/enemies/walker_update_gait.c @@ -106,58 +106,58 @@ typedef struct WalkMoby { char pad28[0x20]; float f48; /* 0x48 */ char pad4C[4]; - unsigned char b50; /* 0x50 */ + unsigned char animation_entry_index; /* 0x50 */ unsigned char b51; unsigned char b52; /* 0x52 */ unsigned char b53; - float f54; /* 0x54 */ - float f58; /* 0x58 */ + float animation_interpolation_fraction; /* 0x54 */ + float animation_playback_rate; /* 0x58 */ } WalkMoby; typedef struct WalkAnim { int id; /* 0x00 */ float f04; float f08; - float f0C; + float animation_position_origin; float f10; - int i14; + int initial_animation_position; char pad18[0x20]; - float f38; - float f3C; + float transition_position_span; + float alternate_transition_position_span; float f40; - float f44; + float alternate_phase_anchor_position; float f48; - float f4C; + float alternate_run_transition_position; } WalkAnim; typedef struct WalkData { char pad00[0x10]; - float m10[8]; /* 0x10 */ - float m30[8]; /* 0x30 */ + float ground_probe_anchor_record[8]; /* 0x10 */ + float alternate_ground_probe_anchor_record[8]; /* 0x30 */ char pad50[0x10]; - float v60[3]; /* 0x60 */ + float jump_target_position[3]; /* 0x60 */ float f6C; WalkAnim *anim[13]; /* 0x70 */ char padA4[0xC]; - unsigned char bB0; + unsigned char idle_animation_id; unsigned char bB1; unsigned char bB2; - unsigned char bB3; + unsigned char airborne_wait_animation_id; unsigned char bB4; unsigned char bB5; - unsigned char bB6; - unsigned char bB7; - float fB8; + unsigned char gait_phase_mask; + unsigned char gait_state; + float ground_probe_correction_angle; float fBC; - float fC0; + float gait_speed_reference; char padC4[0x14]; - float fD8; - float fDC; - float fE0; - float fE4; + float jump_vertical_velocity; + float downward_vertical_acceleration; + float terrain_transition_height_scale; + float gait_ground_height_reference; char padE8[4]; - short sEC; - unsigned short uEE; + short walk_start_counter; + unsigned short gait_status_flags; } WalkData; extern char walker_jump_distance_debug_format[] __asm__("D_L00_001611E0"); @@ -205,36 +205,37 @@ void walker_update_gait(WalkMoby *walker_moby, }; float ground_probe_position[4]; - switch (gait_data->bB7) { + switch (gait_data->gait_state) { case WALKER_GAIT_IDLE: - gait_data->fE4 = 0.0f; + gait_data->gait_ground_height_reference = 0.0f; if (run_start_input > 0.0008f && speed > gait_data->anim[0]->f08 * 1.35f) { { WalkAnim *a = gait_data->anim[7]; int f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], - (float)a->i14); + (float)a->initial_animation_position); blend_moby_animation(walker_moby, a->id, f, 10); reset_walker_gait_helpers((char *)gait_data); } - gait_data->bB7 = 0xD; - gait_data->bB6 = walker_gait_mask(gait_data->anim[7], (float)gait_data->anim[7]->i14); - gait_data->sEC = 0; + gait_data->gait_state = 0xD; + gait_data->gait_phase_mask = walker_gait_mask( + gait_data->anim[7], (float)gait_data->anim[7]->initial_animation_position); + gait_data->walk_start_counter = 0; } else if (speed > frame_time * 0.21f || fast_difference_between_rotations(walker_moby->f48, movement_heading) > 0.10471976f) { - gait_data->sEC++; - if (gait_data->sEC >= 4) { + gait_data->walk_start_counter++; + if (gait_data->walk_start_counter >= 4) { { WalkAnim *a = gait_data->anim[0]; - int f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], - (float)a->i14); + int f = find_nearest_animation_sequence_entry( + walker_moby->pClass->seqs[a->id], (float)a->initial_animation_position); blend_moby_animation(walker_moby, a->id, f, 10); reset_walker_gait_helpers((char *)gait_data); } - gait_data->bB7 = 1; - gait_data->bB6 = - walker_gait_mask(gait_data->anim[0], (float)gait_data->anim[0]->i14); - gait_data->sEC = 0; + gait_data->gait_state = 1; + gait_data->gait_phase_mask = walker_gait_mask( + gait_data->anim[0], (float)gait_data->anim[0]->initial_animation_position); + gait_data->walk_start_counter = 0; } } break; @@ -245,38 +246,43 @@ void walker_update_gait(WalkMoby *walker_moby, case WALKER_GAIT_TRANSITION_FROM_UPHILL_TO_WALK: case WALKER_GAIT_ALTERNATE_TRANSITION_FROM_UPHILL_TO_WALK: if (flags & 5) { - gait_data->uEE &= 0xFFF7; + gait_data->gait_status_flags &= 0xFFF7; } case WALKER_GAIT_TRANSITION_TO_DOWNHILL: case WALKER_GAIT_ALTERNATE_TRANSITION_TO_DOWNHILL: case WALKER_GAIT_WALK_DOWNHILL: case WALKER_GAIT_TRANSITION_FROM_DOWNHILL_TO_WALK: case WALKER_GAIT_ALTERNATE_TRANSITION_FROM_DOWNHILL_TO_WALK: { - int gait_animation_index = walker_gait_animation_index_by_state[gait_data->bB7]; - if (walker_moby->f58 < 0.25f && + int gait_animation_index = walker_gait_animation_index_by_state[gait_data->gait_state]; + if (walker_moby->animation_playback_rate < 0.25f && fast_difference_between_rotations(walker_moby->f48, movement_heading) < 0.09239978f && speed < frame_time * 0.19f) { - blend_moby_animation(walker_moby, gait_data->bB0, 0, 10); + blend_moby_animation(walker_moby, gait_data->idle_animation_id, 0, 10); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0; + gait_data->gait_state = 0; } else if (walker_moby->b52 == gait_data->anim[gait_animation_index]->id) { float t = (gait_data->anim[7]->f08 + gait_data->anim[0]->f08) * 0.375f; - if (speed > t && gait_data->fC0 > t && !(gait_data->bB6 & 0x3A)) { + if (speed > t && gait_data->gait_speed_reference > t && + !(gait_data->gait_phase_mask & 0x3A)) { float current_animation_position = compute_interpolated_record_value(walker_moby); int r1 = truncate_float_to_s32(gait_data->anim[gait_animation_index]->f48 - current_animation_position + gait_data->anim[gait_animation_index]->f10) % truncate_float_to_s32(gait_data->anim[gait_animation_index]->f10); - int r2 = truncate_float_to_s32(gait_data->anim[gait_animation_index]->f4C - - current_animation_position + - gait_data->anim[gait_animation_index]->f10) % - truncate_float_to_s32(gait_data->anim[gait_animation_index]->f10); + int r2 = + truncate_float_to_s32( + gait_data->anim[gait_animation_index]->alternate_run_transition_position - + current_animation_position + gait_data->anim[gait_animation_index]->f10) % + truncate_float_to_s32(gait_data->anim[gait_animation_index]->f10); int x; int bl; if (r1 < r2) { - x = truncate_float_to_s32(gait_data->anim[7]->f48 - gait_data->anim[7]->f0C); + x = truncate_float_to_s32(gait_data->anim[7]->f48 - + gait_data->anim[7]->animation_position_origin); } else { - x = truncate_float_to_s32(gait_data->anim[7]->f4C - gait_data->anim[7]->f0C); + x = truncate_float_to_s32( + gait_data->anim[7]->alternate_run_transition_position - + gait_data->anim[7]->animation_position_origin); } x = (x + truncate_float_to_s32(gait_data->anim[7]->f10)) % truncate_float_to_s32(gait_data->anim[7]->f10); @@ -289,37 +295,42 @@ void walker_update_gait(WalkMoby *walker_moby, blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); } - gait_data->bB7 = 0xD; + gait_data->gait_state = 0xD; } else if (flags & 5) { - if (gait_data->uEE & 1) { - gait_data->uEE = (gait_data->uEE & 0xFFFE) | 2; - gait_data->fE4 = walker_moby->pos[2]; + if (gait_data->gait_status_flags & 1) { + gait_data->gait_status_flags = (gait_data->gait_status_flags & 0xFFFE) | 2; + gait_data->gait_ground_height_reference = walker_moby->pos[2]; if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[11]->f38 * 0.25f / - (speed / gait_data->anim[11]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[11]->f40 + - gait_data->anim[11]->f38 * 0.125f - - gait_data->anim[11]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[11]->transition_position_span * + 0.25f / (speed / gait_data->anim[11]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[11]->f40 + + gait_data->anim[11]->transition_position_span * 0.125f - + gait_data->anim[11]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[11]->f10); WalkAnim *a = gait_data->anim[11]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0xF; + gait_data->gait_state = 0xF; } else { - int bl = truncate_float_to_s32(gait_data->anim[9]->f3C * 0.25f / - (speed / gait_data->anim[9]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[9]->f44 + - gait_data->anim[9]->f3C * 0.125f - - gait_data->anim[9]->f0C) % - truncate_float_to_s32(gait_data->anim[9]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[9]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[9]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[9]->alternate_phase_anchor_position + + gait_data->anim[9]->alternate_transition_position_span * 0.125f - + gait_data->anim[9]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[9]->f10); WalkAnim *a = gait_data->anim[9]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0xE; + gait_data->gait_state = 0xE; } } else { float ground_height; @@ -329,524 +340,604 @@ void walker_update_gait(WalkMoby *walker_moby, gait_data->anim[gait_animation_index]->f04 * 0.5f; ground_probe_position[2] = 0.0f; if (flags & 1) { - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m10); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->ground_probe_anchor_record); } else { - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m30); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->alternate_ground_probe_anchor_record); } ground_height = probe_ground_height(ground_probe_position, 0, 0.5f); - gait_data->fE4 = ground_height; - switch (gait_data->bB7) { + gait_data->gait_ground_height_reference = ground_height; + switch (gait_data->gait_state) { case WALKER_GAIT_WALK: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[2]->f38 * 0.25f / - (speed / gait_data->anim[2]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[2]->f40 + - gait_data->anim[2]->f38 * 0.125f - - gait_data->anim[2]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[2]->transition_position_span * 0.25f / + (speed / gait_data->anim[2]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[2]->f40 + + gait_data->anim[2]->transition_position_span * 0.125f - + gait_data->anim[2]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[2]->f10); WalkAnim *a = gait_data->anim[2]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 3; + gait_data->gait_state = 3; } else { - int bl = truncate_float_to_s32(gait_data->anim[1]->f3C * 0.25f / - (speed / gait_data->anim[1]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[1]->f44 + - gait_data->anim[1]->f3C * 0.125f - - gait_data->anim[1]->f0C) % - truncate_float_to_s32(gait_data->anim[1]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[1]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[1]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[1]->alternate_phase_anchor_position + + gait_data->anim[1]->alternate_transition_position_span * + 0.125f - + gait_data->anim[1]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[1]->f10); WalkAnim *a = gait_data->anim[1]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 2; + gait_data->gait_state = 2; } } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { - gait_data->uEE |= 8; + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_status_flags |= 8; if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[5]->f38 * 0.25f / - (speed / gait_data->anim[5]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[5]->f40 + - gait_data->anim[5]->f38 * 0.125f - - gait_data->anim[5]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[5]->transition_position_span * 0.25f / + (speed / gait_data->anim[5]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[5]->f40 + + gait_data->anim[5]->transition_position_span * 0.125f - + gait_data->anim[5]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[5]->f10); WalkAnim *a = gait_data->anim[5]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 8; + gait_data->gait_state = 8; } else { - int bl = truncate_float_to_s32(gait_data->anim[4]->f3C * 0.25f / - (speed / gait_data->anim[4]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[4]->f44 + - gait_data->anim[4]->f3C * 0.125f - - gait_data->anim[4]->f0C) % - truncate_float_to_s32(gait_data->anim[4]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[4]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[4]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[4]->alternate_phase_anchor_position + + gait_data->anim[4]->alternate_transition_position_span * + 0.125f - + gait_data->anim[4]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[4]->f10); WalkAnim *a = gait_data->anim[4]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 7; + gait_data->gait_state = 7; } } break; case WALKER_GAIT_TRANSITION_TO_UPHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { int bl; int fr; WalkAnim *a; int f; - gait_data->uEE |= 8; - bl = truncate_float_to_s32(gait_data->anim[5]->f38 * 0.25f / - (speed / gait_data->anim[5]->f08)); - fr = truncate_float_to_s32(gait_data->anim[5]->f40 + - gait_data->anim[5]->f38 * 0.125f - - gait_data->anim[5]->f0C) % + gait_data->gait_status_flags |= 8; + bl = + truncate_float_to_s32(gait_data->anim[5]->transition_position_span * + 0.25f / (speed / gait_data->anim[5]->f08)); + fr = truncate_float_to_s32( + gait_data->anim[5]->f40 + + gait_data->anim[5]->transition_position_span * 0.125f - + gait_data->anim[5]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[5]->f10); a = gait_data->anim[5]; f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 8; + gait_data->gait_state = 8; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - gait_data->fE0 * 0.75f) { - gait_data->bB7 = 5; + fast_sin(gait_data->ground_probe_correction_angle) < + gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 5; } else { - int bl = truncate_float_to_s32(gait_data->anim[3]->f38 * 0.25f / - (speed / gait_data->anim[3]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[3]->f40 + - gait_data->anim[3]->f38 * 0.125f - - gait_data->anim[3]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[3]->transition_position_span * + 0.25f / (speed / gait_data->anim[3]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[3]->f40 + + gait_data->anim[3]->transition_position_span * 0.125f - + gait_data->anim[3]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[3]->f10); WalkAnim *a = gait_data->anim[3]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 4; + gait_data->gait_state = 4; } break; case WALKER_GAIT_ALTERNATE_TRANSITION_TO_UPHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { int bl; int fr; WalkAnim *a; int f; - gait_data->uEE |= 8; - bl = truncate_float_to_s32(gait_data->anim[4]->f3C * 0.25f / - (speed / gait_data->anim[4]->f08)); - fr = truncate_float_to_s32(gait_data->anim[4]->f44 + - gait_data->anim[4]->f3C * 0.125f - - gait_data->anim[4]->f0C) % + gait_data->gait_status_flags |= 8; + bl = truncate_float_to_s32( + gait_data->anim[4]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[4]->f08)); + fr = truncate_float_to_s32( + gait_data->anim[4]->alternate_phase_anchor_position + + gait_data->anim[4]->alternate_transition_position_span * + 0.125f - + gait_data->anim[4]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[4]->f10); a = gait_data->anim[4]; f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 7; + gait_data->gait_state = 7; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - gait_data->fE0 * 0.75f) { - gait_data->bB7 = 6; + fast_sin(gait_data->ground_probe_correction_angle) < + gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 6; } else { - int bl = truncate_float_to_s32(gait_data->anim[3]->f3C * 0.25f / - (speed / gait_data->anim[3]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[3]->f44 + - gait_data->anim[3]->f3C * 0.125f - - gait_data->anim[3]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[3]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[3]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[3]->alternate_phase_anchor_position + + gait_data->anim[3]->alternate_transition_position_span * + 0.125f - + gait_data->anim[3]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[3]->f10); WalkAnim *a = gait_data->anim[3]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 4; + gait_data->gait_state = 4; } break; case WALKER_GAIT_WALK_UPHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { - gait_data->uEE |= 8; + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_status_flags |= 8; if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[5]->f38 * 0.25f / - (speed / gait_data->anim[5]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[5]->f40 + - gait_data->anim[5]->f38 * 0.125f - - gait_data->anim[5]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[5]->transition_position_span * 0.25f / + (speed / gait_data->anim[5]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[5]->f40 + + gait_data->anim[5]->transition_position_span * 0.125f - + gait_data->anim[5]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[5]->f10); WalkAnim *a = gait_data->anim[5]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 8; + gait_data->gait_state = 8; } else { - int bl = truncate_float_to_s32(gait_data->anim[4]->f3C * 0.25f / - (speed / gait_data->anim[4]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[4]->f44 + - gait_data->anim[4]->f3C * 0.125f - - gait_data->anim[4]->f0C) % - truncate_float_to_s32(gait_data->anim[4]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[4]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[4]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[4]->alternate_phase_anchor_position + + gait_data->anim[4]->alternate_transition_position_span * + 0.125f - + gait_data->anim[4]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[4]->f10); WalkAnim *a = gait_data->anim[4]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 7; + gait_data->gait_state = 7; } } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) < + gait_data->terrain_transition_height_scale * 0.75f) { if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[1]->f38 * 0.25f / - (speed / gait_data->anim[1]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[1]->f40 + - gait_data->anim[1]->f38 * 0.125f - - gait_data->anim[1]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[1]->transition_position_span * 0.25f / + (speed / gait_data->anim[1]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[1]->f40 + + gait_data->anim[1]->transition_position_span * 0.125f - + gait_data->anim[1]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[1]->f10); WalkAnim *a = gait_data->anim[1]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 5; + gait_data->gait_state = 5; } else { - int bl = truncate_float_to_s32(gait_data->anim[2]->f3C * 0.25f / - (speed / gait_data->anim[2]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[2]->f44 + - gait_data->anim[2]->f3C * 0.125f - - gait_data->anim[2]->f0C) % - truncate_float_to_s32(gait_data->anim[2]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[2]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[2]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[2]->alternate_phase_anchor_position + + gait_data->anim[2]->alternate_transition_position_span * + 0.125f - + gait_data->anim[2]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[2]->f10); WalkAnim *a = gait_data->anim[2]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 6; + gait_data->gait_state = 6; } } break; case WALKER_GAIT_TRANSITION_FROM_UPHILL_TO_WALK: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { int bl; int fr; WalkAnim *a; int f; - gait_data->uEE |= 8; - bl = truncate_float_to_s32(gait_data->anim[4]->f3C * 0.25f / - (speed / gait_data->anim[4]->f08)); - fr = truncate_float_to_s32(gait_data->anim[4]->f44 + - gait_data->anim[4]->f3C * 0.125f - - gait_data->anim[4]->f0C) % + gait_data->gait_status_flags |= 8; + bl = truncate_float_to_s32( + gait_data->anim[4]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[4]->f08)); + fr = truncate_float_to_s32( + gait_data->anim[4]->alternate_phase_anchor_position + + gait_data->anim[4]->alternate_transition_position_span * + 0.125f - + gait_data->anim[4]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[4]->f10); a = gait_data->anim[4]; f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 7; + gait_data->gait_state = 7; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - gait_data->bB7 = 2; + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 2; } else { - int bl = truncate_float_to_s32(gait_data->anim[0]->f3C * 0.25f / - (speed / gait_data->anim[0]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[0]->f44 + - gait_data->anim[0]->f3C * 0.125f - - gait_data->anim[0]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[0]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[0]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[0]->alternate_phase_anchor_position + + gait_data->anim[0]->alternate_transition_position_span * + 0.125f - + gait_data->anim[0]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[0]->f10); WalkAnim *a = gait_data->anim[0]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 1; + gait_data->gait_state = 1; } break; case WALKER_GAIT_ALTERNATE_TRANSITION_FROM_UPHILL_TO_WALK: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { int bl; int fr; WalkAnim *a; int f; - gait_data->uEE |= 8; - bl = truncate_float_to_s32(gait_data->anim[5]->f38 * 0.25f / - (speed / gait_data->anim[5]->f08)); - fr = truncate_float_to_s32(gait_data->anim[5]->f40 + - gait_data->anim[5]->f38 * 0.125f - - gait_data->anim[5]->f0C) % + gait_data->gait_status_flags |= 8; + bl = + truncate_float_to_s32(gait_data->anim[5]->transition_position_span * + 0.25f / (speed / gait_data->anim[5]->f08)); + fr = truncate_float_to_s32( + gait_data->anim[5]->f40 + + gait_data->anim[5]->transition_position_span * 0.125f - + gait_data->anim[5]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[5]->f10); a = gait_data->anim[5]; f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 8; + gait_data->gait_state = 8; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - gait_data->bB7 = 3; + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 3; } else { - int bl = truncate_float_to_s32(gait_data->anim[0]->f38 * 0.25f / - (speed / gait_data->anim[0]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[0]->f40 + - gait_data->anim[0]->f38 * 0.125f - - gait_data->anim[0]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[0]->transition_position_span * + 0.25f / (speed / gait_data->anim[0]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[0]->f40 + + gait_data->anim[0]->transition_position_span * 0.125f - + gait_data->anim[0]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[0]->f10); WalkAnim *a = gait_data->anim[0]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 1; + gait_data->gait_state = 1; } break; case WALKER_GAIT_TRANSITION_TO_DOWNHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - int bl = truncate_float_to_s32(gait_data->anim[2]->f38 * 0.25f / - (speed / gait_data->anim[2]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[2]->f40 + - gait_data->anim[2]->f38 * 0.125f - - gait_data->anim[2]->f0C) % + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + int bl = + truncate_float_to_s32(gait_data->anim[2]->transition_position_span * + 0.25f / (speed / gait_data->anim[2]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[2]->f40 + + gait_data->anim[2]->transition_position_span * 0.125f - + gait_data->anim[2]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[2]->f10); WalkAnim *a = gait_data->anim[2]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 3; + gait_data->gait_state = 3; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - -gait_data->fE0 * 0.75f) { - gait_data->bB7 = 10; + fast_sin(gait_data->ground_probe_correction_angle) > + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 10; } else { - int bl = truncate_float_to_s32(gait_data->anim[6]->f38 * 0.25f / - (speed / gait_data->anim[6]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[6]->f40 + - gait_data->anim[6]->f38 * 0.125f - - gait_data->anim[6]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[6]->transition_position_span * + 0.25f / (speed / gait_data->anim[6]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[6]->f40 + + gait_data->anim[6]->transition_position_span * 0.125f - + gait_data->anim[6]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[6]->f10); WalkAnim *a = gait_data->anim[6]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 9; + gait_data->gait_state = 9; } break; case WALKER_GAIT_ALTERNATE_TRANSITION_TO_DOWNHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - int bl = truncate_float_to_s32(gait_data->anim[1]->f3C * 0.25f / - (speed / gait_data->anim[1]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[1]->f44 + - gait_data->anim[1]->f3C * 0.125f - - gait_data->anim[1]->f0C) % + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + int bl = truncate_float_to_s32( + gait_data->anim[1]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[1]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[1]->alternate_phase_anchor_position + + gait_data->anim[1]->alternate_transition_position_span * + 0.125f - + gait_data->anim[1]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[1]->f10); WalkAnim *a = gait_data->anim[1]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 2; + gait_data->gait_state = 2; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - -gait_data->fE0 * 0.75f) { - gait_data->bB7 = 11; + fast_sin(gait_data->ground_probe_correction_angle) > + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 11; } else { - int bl = truncate_float_to_s32(gait_data->anim[6]->f3C * 0.25f / - (speed / gait_data->anim[6]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[6]->f44 + - gait_data->anim[6]->f3C * 0.125f - - gait_data->anim[6]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[6]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[6]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[6]->alternate_phase_anchor_position + + gait_data->anim[6]->alternate_transition_position_span * + 0.125f - + gait_data->anim[6]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[6]->f10); WalkAnim *a = gait_data->anim[6]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 9; + gait_data->gait_state = 9; } break; case WALKER_GAIT_WALK_DOWNHILL: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[2]->f38 * 0.25f / - (speed / gait_data->anim[2]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[2]->f40 + - gait_data->anim[2]->f38 * 0.125f - - gait_data->anim[2]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[2]->transition_position_span * 0.25f / + (speed / gait_data->anim[2]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[2]->f40 + + gait_data->anim[2]->transition_position_span * 0.125f - + gait_data->anim[2]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[2]->f10); WalkAnim *a = gait_data->anim[2]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 3; + gait_data->gait_state = 3; } else { - int bl = truncate_float_to_s32(gait_data->anim[1]->f3C * 0.25f / - (speed / gait_data->anim[1]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[1]->f44 + - gait_data->anim[1]->f3C * 0.125f - - gait_data->anim[1]->f0C) % - truncate_float_to_s32(gait_data->anim[1]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[1]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[1]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[1]->alternate_phase_anchor_position + + gait_data->anim[1]->alternate_transition_position_span * + 0.125f - + gait_data->anim[1]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[1]->f10); WalkAnim *a = gait_data->anim[1]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 2; + gait_data->gait_state = 2; } } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - -gait_data->fE0 * 0.75f) { + fast_sin(gait_data->ground_probe_correction_angle) > + -gait_data->terrain_transition_height_scale * 0.75f) { if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[4]->f38 * 0.25f / - (speed / gait_data->anim[4]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[4]->f40 + - gait_data->anim[4]->f38 * 0.125f - - gait_data->anim[4]->f0C) % + int bl = truncate_float_to_s32( + gait_data->anim[4]->transition_position_span * 0.25f / + (speed / gait_data->anim[4]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[4]->f40 + + gait_data->anim[4]->transition_position_span * 0.125f - + gait_data->anim[4]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[4]->f10); WalkAnim *a = gait_data->anim[4]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 10; + gait_data->gait_state = 10; } else { - int bl = truncate_float_to_s32(gait_data->anim[5]->f3C * 0.25f / - (speed / gait_data->anim[5]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[5]->f44 + - gait_data->anim[5]->f3C * 0.125f - - gait_data->anim[5]->f0C) % - truncate_float_to_s32(gait_data->anim[5]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[5]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[5]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[5]->alternate_phase_anchor_position + + gait_data->anim[5]->alternate_transition_position_span * + 0.125f - + gait_data->anim[5]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[5]->f10); WalkAnim *a = gait_data->anim[5]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 11; + gait_data->gait_state = 11; } } break; case WALKER_GAIT_TRANSITION_FROM_DOWNHILL_TO_WALK: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - int bl = truncate_float_to_s32(gait_data->anim[1]->f3C * 0.25f / - (speed / gait_data->anim[1]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[1]->f44 + - gait_data->anim[1]->f3C * 0.125f - - gait_data->anim[1]->f0C) % + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + int bl = truncate_float_to_s32( + gait_data->anim[1]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[1]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[1]->alternate_phase_anchor_position + + gait_data->anim[1]->alternate_transition_position_span * + 0.125f - + gait_data->anim[1]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[1]->f10); WalkAnim *a = gait_data->anim[1]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 2; + gait_data->gait_state = 2; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { - gait_data->bB7 = 7; + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 7; } else { - int bl = truncate_float_to_s32(gait_data->anim[0]->f3C / - (speed / gait_data->anim[0]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[0]->f44 + - gait_data->anim[0]->f3C * 0.5f - - gait_data->anim[0]->f0C) % - truncate_float_to_s32(gait_data->anim[0]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[0]->alternate_transition_position_span / + (speed / gait_data->anim[0]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[0]->alternate_phase_anchor_position + + gait_data->anim[0]->alternate_transition_position_span * 0.5f - + gait_data->anim[0]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[0]->f10); WalkAnim *a = gait_data->anim[0]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 1; + gait_data->gait_state = 1; } break; case WALKER_GAIT_ALTERNATE_TRANSITION_FROM_DOWNHILL_TO_WALK: if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) > - gait_data->fE0 * 0.75f) { - int bl = truncate_float_to_s32(gait_data->anim[2]->f38 * 0.25f / - (speed / gait_data->anim[2]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[2]->f40 + - gait_data->anim[2]->f38 * 0.125f - - gait_data->anim[2]->f0C) % + fast_sin(gait_data->ground_probe_correction_angle) > + gait_data->terrain_transition_height_scale * 0.75f) { + int bl = + truncate_float_to_s32(gait_data->anim[2]->transition_position_span * + 0.25f / (speed / gait_data->anim[2]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[2]->f40 + + gait_data->anim[2]->transition_position_span * 0.125f - + gait_data->anim[2]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[2]->f10); WalkAnim *a = gait_data->anim[2]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 3; + gait_data->gait_state = 3; } else if ((ground_height - ground_probe_position[2]) + gait_data->anim[gait_animation_index]->f04 * 0.5f * - fast_sin(gait_data->fB8) < - -gait_data->fE0 * 0.75f) { - gait_data->bB7 = 8; + fast_sin(gait_data->ground_probe_correction_angle) < + -gait_data->terrain_transition_height_scale * 0.75f) { + gait_data->gait_state = 8; } else { - int bl = truncate_float_to_s32(gait_data->anim[0]->f38 / - (speed / gait_data->anim[0]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[0]->f40 + - gait_data->anim[0]->f38 * 0.5f - - gait_data->anim[0]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[0]->transition_position_span / + (speed / gait_data->anim[0]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[0]->f40 + + gait_data->anim[0]->transition_position_span * 0.5f - + gait_data->anim[0]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[0]->f10); WalkAnim *a = gait_data->anim[0]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 1; + gait_data->gait_state = 1; } break; } @@ -857,16 +948,20 @@ void walker_update_gait(WalkMoby *walker_moby, } case WALKER_GAIT_RUN: { float t = (gait_data->anim[7]->f08 + gait_data->anim[0]->f08) * 0.35f; - if (walker_moby->b52 == gait_data->anim[7]->id && !(gait_data->bB6 & 0x30)) { - if (speed < t && gait_data->fC0 <= t) { + if (walker_moby->b52 == gait_data->anim[7]->id && !(gait_data->gait_phase_mask & 0x30)) { + if (speed < t && gait_data->gait_speed_reference <= t) { int fr; - if (gait_data->bB6 & 3) { - fr = truncate_float_to_s32(gait_data->anim[0]->f38 * 2.0f / 3.0f + - gait_data->anim[0]->f40 - gait_data->anim[0]->f0C) % + if (gait_data->gait_phase_mask & 3) { + fr = truncate_float_to_s32(gait_data->anim[0]->transition_position_span * 2.0f / + 3.0f + + gait_data->anim[0]->f40 - + gait_data->anim[0]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[0]->f10); } else { - fr = truncate_float_to_s32(gait_data->anim[0]->f3C * 2.0f / 3.0f + - gait_data->anim[0]->f44 - gait_data->anim[0]->f0C) % + fr = truncate_float_to_s32( + gait_data->anim[0]->alternate_transition_position_span * 2.0f / 3.0f + + gait_data->anim[0]->alternate_phase_anchor_position - + gait_data->anim[0]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[0]->f10); } { @@ -877,37 +972,42 @@ void walker_update_gait(WalkMoby *walker_moby, blend_moby_animation(walker_moby, a->id, f, 10); reset_walker_gait_helpers((char *)gait_data); } - gait_data->bB7 = 1; + gait_data->gait_state = 1; } else if (flags & 5) { - if (gait_data->uEE & 1) { - gait_data->uEE = (gait_data->uEE & 0xFFFE) | 2; - gait_data->fE4 = walker_moby->pos[2]; + if (gait_data->gait_status_flags & 1) { + gait_data->gait_status_flags = (gait_data->gait_status_flags & 0xFFFE) | 2; + gait_data->gait_ground_height_reference = walker_moby->pos[2]; if (flags & 1) { - int bl = truncate_float_to_s32(gait_data->anim[11]->f38 * 0.25f / - (speed / gait_data->anim[11]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[11]->f40 + - gait_data->anim[11]->f38 * 0.125f - - gait_data->anim[11]->f0C) % + int bl = + truncate_float_to_s32(gait_data->anim[11]->transition_position_span * + 0.25f / (speed / gait_data->anim[11]->f08)); + int fr = truncate_float_to_s32( + gait_data->anim[11]->f40 + + gait_data->anim[11]->transition_position_span * 0.125f - + gait_data->anim[11]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[11]->f10); WalkAnim *a = gait_data->anim[11]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0xF; + gait_data->gait_state = 0xF; } else { - int bl = truncate_float_to_s32(gait_data->anim[9]->f3C * 0.25f / - (speed / gait_data->anim[9]->f08)); - int fr = truncate_float_to_s32(gait_data->anim[9]->f44 + - gait_data->anim[9]->f3C * 0.125f - - gait_data->anim[9]->f0C) % - truncate_float_to_s32(gait_data->anim[9]->f10); + int bl = truncate_float_to_s32( + gait_data->anim[9]->alternate_transition_position_span * 0.25f / + (speed / gait_data->anim[9]->f08)); + int fr = + truncate_float_to_s32( + gait_data->anim[9]->alternate_phase_anchor_position + + gait_data->anim[9]->alternate_transition_position_span * 0.125f - + gait_data->anim[9]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[9]->f10); WalkAnim *a = gait_data->anim[9]; int f = find_nearest_animation_sequence_entry( walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0xE; + gait_data->gait_state = 0xE; } } else { ground_probe_position[0] = @@ -916,43 +1016,55 @@ void walker_update_gait(WalkMoby *walker_moby, fast_sin(movement_heading) * gait_data->anim[0]->f04 * 0.5f; ground_probe_position[2] = 0.0f; if (flags & 1) { - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m10); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->ground_probe_anchor_record); } else { - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m30); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->alternate_ground_probe_anchor_record); } ground_probe_position[2] += 1.0f; - gait_data->fE4 = probe_ground_height(ground_probe_position, 0, 0.5f); + gait_data->gait_ground_height_reference = + probe_ground_height(ground_probe_position, 0, 0.5f); } } } - if (gait_data->fC0 < t) { - gait_data->fC0 = t; + if (gait_data->gait_speed_reference < t) { + gait_data->gait_speed_reference = t; } break; } case WALKER_GAIT_RESET_TO_IDLE: - blend_moby_animation(walker_moby, gait_data->bB0, 0, 10); + blend_moby_animation(walker_moby, gait_data->idle_animation_id, 0, 10); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0; + gait_data->gait_state = 0; break; case WALKER_GAIT_TAKEOFF_ANIMATION: if (flags & 0x30) { - float dist = vector_distance_xy(walker_moby->pos, gait_data->v60); + float dist = vector_distance_xy(walker_moby->pos, gait_data->jump_target_position); debug_print(walker_jump_distance_debug_format, dist); - gait_data->fD8 = FUN_L00_0025abf0( - walker_moby->pos, gait_data->v60, 0, gait_data->fC0, -gait_data->fDC); - gait_data->uEE |= 4; - gait_data->f6C = fast_arc_tan(gait_data->v60[0] - walker_moby->pos[0], - gait_data->v60[1] - walker_moby->pos[1]); + gait_data->jump_vertical_velocity = + FUN_L00_0025abf0(walker_moby->pos, + gait_data->jump_target_position, + 0, + gait_data->gait_speed_reference, + -gait_data->downward_vertical_acceleration); + gait_data->gait_status_flags |= 4; + gait_data->f6C = fast_arc_tan(gait_data->jump_target_position[0] - walker_moby->pos[0], + gait_data->jump_target_position[1] - walker_moby->pos[1]); } if (compute_interpolated_record_value(walker_moby) >= - gait_data->anim[11]->f0C + gait_data->anim[11]->f10 - walker_moby->f58) { - blend_moby_animation(walker_moby, gait_data->bB3, 0, 10); + gait_data->anim[11]->animation_position_origin + gait_data->anim[11]->f10 - + walker_moby->animation_playback_rate) { + blend_moby_animation(walker_moby, gait_data->airborne_wait_animation_id, 0, 10); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0x10; - } else if ((gait_data->uEE & 4) && gait_data->fD8 < 0.0f) { + gait_data->gait_state = 0x10; + } else if ((gait_data->gait_status_flags & 4) && gait_data->jump_vertical_velocity < 0.0f) { float t = compute_walker_time_to_landing((char *)walker_moby, (char *)gait_data); - float len = (gait_data->anim[12]->f44 - gait_data->anim[12]->f0C) * 2.0f; + float len = (gait_data->anim[12]->alternate_phase_anchor_position - + gait_data->anim[12]->animation_position_origin) * + 2.0f; if (t < len + 15.0f) { int bl = truncate_float_to_s32(t - len) >> 1; WalkAnim *a; @@ -964,28 +1076,35 @@ void walker_update_gait(WalkMoby *walker_moby, f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], 0.0f); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0x12; + gait_data->gait_state = 0x12; } } break; case WALKER_GAIT_ALTERNATE_TAKEOFF_ANIMATION: if (flags & 0x30) { - float dist = fast_vec_dist(walker_moby->pos, gait_data->v60); + float dist = fast_vec_dist(walker_moby->pos, gait_data->jump_target_position); debug_print(walker_jump_distance_debug_format, dist); - gait_data->fD8 = FUN_L00_0025abf0( - walker_moby->pos, gait_data->v60, 0, gait_data->fC0, -gait_data->fDC); - gait_data->uEE |= 4; - gait_data->f6C = fast_arc_tan(gait_data->v60[0] - walker_moby->pos[0], - gait_data->v60[1] - walker_moby->pos[1]); + gait_data->jump_vertical_velocity = + FUN_L00_0025abf0(walker_moby->pos, + gait_data->jump_target_position, + 0, + gait_data->gait_speed_reference, + -gait_data->downward_vertical_acceleration); + gait_data->gait_status_flags |= 4; + gait_data->f6C = fast_arc_tan(gait_data->jump_target_position[0] - walker_moby->pos[0], + gait_data->jump_target_position[1] - walker_moby->pos[1]); } if (compute_interpolated_record_value(walker_moby) >= - gait_data->anim[9]->f0C + gait_data->anim[9]->f10 - walker_moby->f58) { - blend_moby_animation(walker_moby, gait_data->bB3, 0, 10); + gait_data->anim[9]->animation_position_origin + gait_data->anim[9]->f10 - + walker_moby->animation_playback_rate) { + blend_moby_animation(walker_moby, gait_data->airborne_wait_animation_id, 0, 10); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0x10; - } else if ((gait_data->uEE & 4) && gait_data->fD8 < 0.0f) { + gait_data->gait_state = 0x10; + } else if ((gait_data->gait_status_flags & 4) && gait_data->jump_vertical_velocity < 0.0f) { float t = compute_walker_time_to_landing((char *)walker_moby, (char *)gait_data); - float len = (gait_data->anim[10]->f44 - gait_data->anim[10]->f0C) * 2.0f; + float len = (gait_data->anim[10]->alternate_phase_anchor_position - + gait_data->anim[10]->animation_position_origin) * + 2.0f; if (t < len + 15.0f) { int bl = truncate_float_to_s32(t - len) >> 1; WalkAnim *a; @@ -997,14 +1116,16 @@ void walker_update_gait(WalkMoby *walker_moby, f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], 0.0f); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0x11; + gait_data->gait_state = 0x11; } } break; case WALKER_GAIT_WAIT_FOR_LANDING: - if (walker_moby->b52 == gait_data->bB3) { + if (walker_moby->b52 == gait_data->airborne_wait_animation_id) { float t = compute_walker_time_to_landing((char *)walker_moby, (char *)gait_data); - float len = (gait_data->anim[12]->f44 - gait_data->anim[12]->f0C) * 2.0f; + float len = (gait_data->anim[12]->alternate_phase_anchor_position - + gait_data->anim[12]->animation_position_origin) * + 2.0f; if (t < len + 15.0f) { int bl = truncate_float_to_s32(t - len) >> 1; WalkAnim *a = gait_data->anim[12]; @@ -1012,7 +1133,7 @@ void walker_update_gait(WalkMoby *walker_moby, find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], 0.0f); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->bB7 = 0x12; + gait_data->gait_state = 0x12; } } break; @@ -1020,26 +1141,30 @@ void walker_update_gait(WalkMoby *walker_moby, if (walker_moby->b52 == gait_data->anim[12]->id) { float t = compute_walker_time_to_landing((char *)walker_moby, (char *)gait_data); if (t > 1.0f) { - float base = convert_integer_to_float(walker_moby->b50) + walker_moby->f54; - t = gait_data->anim[12]->f44 + 2.0f - t * 0.5f - gait_data->anim[12]->f0C; + float base = convert_integer_to_float(walker_moby->animation_entry_index) + + walker_moby->animation_interpolation_fraction; + t = gait_data->anim[12]->alternate_phase_anchor_position + 2.0f - t * 0.5f - + gait_data->anim[12]->animation_position_origin; if (t < base + 0.1f) { t = base + 0.1f; } - walker_moby->f58 = frame_scale_inv * (t - base); + walker_moby->animation_playback_rate = frame_scale_inv * (t - base); } else { - float base = convert_integer_to_float(walker_moby->b50) + walker_moby->f54; - t = gait_data->anim[12]->f44 - gait_data->anim[12]->f0C; + float base = convert_integer_to_float(walker_moby->animation_entry_index) + + walker_moby->animation_interpolation_fraction; + t = gait_data->anim[12]->alternate_phase_anchor_position - + gait_data->anim[12]->animation_position_origin; if (t < base + 0.1f) { t = base + 0.1f; } - walker_moby->f58 = frame_scale_inv * (t - base); + walker_moby->animation_playback_rate = frame_scale_inv * (t - base); { int ns = 0x14; int fl = 4; - gait_data->bB6 = fl; - gait_data->bB7 = ns; + gait_data->gait_phase_mask = fl; + gait_data->gait_state = ns; } - gait_data->uEE &= 0xFFFB; + gait_data->gait_status_flags &= 0xFFFB; } } break; @@ -1047,77 +1172,90 @@ void walker_update_gait(WalkMoby *walker_moby, if (walker_moby->b52 == gait_data->anim[10]->id) { float t = compute_walker_time_to_landing((char *)walker_moby, (char *)gait_data); if (t > 1.0f) { - float base = convert_integer_to_float(walker_moby->b50) + walker_moby->f54; - t = gait_data->anim[10]->f44 + 2.0f - t * 0.5f - gait_data->anim[10]->f0C; + float base = convert_integer_to_float(walker_moby->animation_entry_index) + + walker_moby->animation_interpolation_fraction; + t = gait_data->anim[10]->alternate_phase_anchor_position + 2.0f - t * 0.5f - + gait_data->anim[10]->animation_position_origin; if (t < base + 0.1f) { t = base + 0.1f; } - walker_moby->f58 = frame_scale_inv * (t - base); + walker_moby->animation_playback_rate = frame_scale_inv * (t - base); } else { - float base = convert_integer_to_float(walker_moby->b50) + walker_moby->f54; - t = gait_data->anim[10]->f44 - gait_data->anim[10]->f0C; + float base = convert_integer_to_float(walker_moby->animation_entry_index) + + walker_moby->animation_interpolation_fraction; + t = gait_data->anim[10]->alternate_phase_anchor_position - + gait_data->anim[10]->animation_position_origin; if (t < base + 0.1f) { t = base + 0.1f; } - walker_moby->f58 = frame_scale_inv * (t - base); + walker_moby->animation_playback_rate = frame_scale_inv * (t - base); { int ns = 0x13; int fl = 4; - gait_data->bB6 = fl; - gait_data->bB7 = ns; + gait_data->gait_phase_mask = fl; + gait_data->gait_state = ns; } - gait_data->uEE &= 0xFFFB; + gait_data->gait_status_flags &= 0xFFFB; } } break; case WALKER_GAIT_RESUME_RUN_AFTER_LANDING: if (flags & 1) { - int bl = truncate_float_to_s32((gait_data->anim[7]->f38 * 0.25f + 2.0f) / - (speed / gait_data->anim[7]->f08)); - int fr = - truncate_float_to_s32(gait_data->anim[7]->f40 + 1.0f + - gait_data->anim[7]->f38 * 0.125f - gait_data->anim[7]->f0C) % - truncate_float_to_s32(gait_data->anim[7]->f10); + int bl = truncate_float_to_s32( + (gait_data->anim[7]->transition_position_span * 0.25f + 2.0f) / + (speed / gait_data->anim[7]->f08)); + int fr = truncate_float_to_s32(gait_data->anim[7]->f40 + 1.0f + + gait_data->anim[7]->transition_position_span * 0.125f - + gait_data->anim[7]->animation_position_origin) % + truncate_float_to_s32(gait_data->anim[7]->f10); WalkAnim *a = gait_data->anim[7]; int f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->fD8 = 0.0f; - gait_data->bB7 = 0xD; - gait_data->bB6 = 1; - gait_data->uEE &= 0xFFFD; + gait_data->jump_vertical_velocity = 0.0f; + gait_data->gait_state = 0xD; + gait_data->gait_phase_mask = 1; + gait_data->gait_status_flags &= 0xFFFD; ground_probe_position[0] = fast_cos(movement_heading) * gait_data->anim[7]->f04 * 0.5f; ground_probe_position[1] = fast_sin(movement_heading) * gait_data->anim[7]->f04 * 0.5f; ground_probe_position[2] = 0.0f; - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m10); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->ground_probe_anchor_record); ground_probe_position[2] += 1.0f; - gait_data->fE4 = probe_ground_height(ground_probe_position, 0, 0.5f); + gait_data->gait_ground_height_reference = + probe_ground_height(ground_probe_position, 0, 0.5f); } break; case WALKER_GAIT_RESUME_RUN_AFTER_ALTERNATE_LANDING: if (flags & 1) { - int bl = truncate_float_to_s32((gait_data->anim[7]->f3C * 0.25f + 2.0f) / - (speed / gait_data->anim[7]->f08)); + int bl = truncate_float_to_s32( + (gait_data->anim[7]->alternate_transition_position_span * 0.25f + 2.0f) / + (speed / gait_data->anim[7]->f08)); int fr = - truncate_float_to_s32(gait_data->anim[7]->f44 + 1.0f + - gait_data->anim[7]->f38 * 0.125f - gait_data->anim[7]->f0C) % + truncate_float_to_s32(gait_data->anim[7]->alternate_phase_anchor_position + 1.0f + + gait_data->anim[7]->transition_position_span * 0.125f - + gait_data->anim[7]->animation_position_origin) % truncate_float_to_s32(gait_data->anim[7]->f10); WalkAnim *a = gait_data->anim[7]; int f = find_nearest_animation_sequence_entry(walker_moby->pClass->seqs[a->id], (float)fr); blend_moby_animation(walker_moby, a->id, f, bl); reset_walker_gait_helpers((char *)gait_data); - gait_data->fD8 = 0.0f; - gait_data->bB7 = 0xD; - gait_data->bB6 = 1; - gait_data->uEE &= 0xFFFD; + gait_data->jump_vertical_velocity = 0.0f; + gait_data->gait_state = 0xD; + gait_data->gait_phase_mask = 1; + gait_data->gait_status_flags &= 0xFFFD; ground_probe_position[0] = fast_cos(movement_heading) * gait_data->anim[7]->f04 * 0.5f; ground_probe_position[1] = fast_sin(movement_heading) * gait_data->anim[7]->f04 * 0.5f; ground_probe_position[2] = 0.0f; - fast_vec_add(ground_probe_position, ground_probe_position, gait_data->m10); + fast_vec_add(ground_probe_position, + ground_probe_position, + gait_data->ground_probe_anchor_record); ground_probe_position[2] += 1.0f; - gait_data->fE4 = probe_ground_height(ground_probe_position, 0, 0.5f); + gait_data->gait_ground_height_reference = + probe_ground_height(ground_probe_position, 0, 0.5f); } break; } diff --git a/src/overlays/shared/game/initialize_level_transition_with_audio.c b/src/overlays/shared/game/initialize_level_transition_with_audio.c index 0465ed0b2a..8c49dd75b1 100644 --- a/src/overlays/shared/game/initialize_level_transition_with_audio.c +++ b/src/overlays/shared/game/initialize_level_transition_with_audio.c @@ -217,7 +217,7 @@ void prepare_level_transition_with_help_cleanup(void) { typedef struct { u8 p[0x20]; - s32 i20; + s32 transition_mode; s16 h24; s16 h26; } A_0028ed58; @@ -227,7 +227,7 @@ extern A_0028ed58 level_render_state_lui __asm__("D_0013E030") NOT_SDA; typedef struct { s32 i0; s32 i4; - s32 i8; + s32 default_scene_chunk_offset; } B_0028ed58; extern B_0028ed58 D_L00_00173E00_0028ed58 __asm__("D_L00_00173E00") @@ -235,9 +235,9 @@ extern B_0028ed58 D_L00_00173E00_0028ed58 __asm__("D_L00_00173E00") typedef struct { u8 p[0x34]; - s32 i34; - s32 i38; - s32 i3C; + s32 scaled_sequence_position; + s32 sequence_position_remainder; + s32 sequence_entry_index; u8 p2[0x18]; s32 i58; s32 i5C; @@ -250,6 +250,12 @@ extern s32 transition_sequence_positions[1] __asm__("D_L00_00160570") __attribut void prepare_target_level_transition(s32 target_level_index) __asm__("FUN_L00_0028ed58"); void prepare_target_level_transition(s32 target_level_index) { + enum { + TRANSITION_MODE_CHANGE_LEVEL = 3 + }; + enum { + AUDIO_SELECTION_MODE_ALWAYS_FADE = 0 + }; A_0028ed58 *shared_state_record = &level_render_state_lui; C_0028ed58 *shared_result_record; s32 shared_table_offset; @@ -257,27 +263,30 @@ void prepare_target_level_transition(s32 target_level_index) { D_L00_0015F5C4 = 6; fade_level = 1.0f; D_L00_0015F400 = 0; - shared_state_record->i20 = 0; + shared_state_record->transition_mode = AUDIO_SELECTION_MODE_ALWAYS_FADE; shared_state_record->h24 = -1; select_level_vu_chain(); shared_table_offset = D_L00_001611CC - 0x60000; shared_result_record = &D_L00_0016C860_0028ed58; shared_result_record->i58 = D_L00_00173E00_0028ed58.i4 + shared_table_offset; - shared_result_record->i5C = D_L00_00173E00_0028ed58.i8 + shared_table_offset; + shared_result_record->i5C = + D_L00_00173E00_0028ed58.default_scene_chunk_offset + shared_table_offset; D_L00_001611CC = shared_table_offset; if (current_level_index == target_level_index) { s32 divisor; initialize_level_transition_with_audio(8); divisor = pal_mode ? 0x50 : 0x60; - shared_result_record->i34 = + shared_result_record->scaled_sequence_position = scale_game_frames(transition_sequence_positions[shared_state_record->h26]); - shared_result_record->i3C = shared_result_record->i34 / divisor; - parse_space_scene_chunk(shared_result_record->i3C); - shared_result_record->i38 = shared_result_record->i34 % divisor; + shared_result_record->sequence_entry_index = + shared_result_record->scaled_sequence_position / divisor; + parse_space_scene_chunk(shared_result_record->sequence_entry_index); + shared_result_record->sequence_position_remainder = + shared_result_record->scaled_sequence_position % divisor; } else { memcard_save_data(0, target_level_index); D_L00_0015F5C0 = target_level_index; - shared_state_record->i20 = 3; + shared_state_record->transition_mode = TRANSITION_MODE_CHANGE_LEVEL; shared_state_record->h24 = -1; } } diff --git a/src/overlays/shared/game/queue_planet_unlock_message.c b/src/overlays/shared/game/queue_planet_unlock_message.c index f15f4737f1..2d812bb060 100644 --- a/src/overlays/shared/game/queue_planet_unlock_message.c +++ b/src/overlays/shared/game/queue_planet_unlock_message.c @@ -5,9 +5,9 @@ #include "rnc/overlay/shared/mobys/select_auto_aim_target_moby.h" void build_spherical_offset(void *) __asm__("FUN_00214db0"); -void FUN_L00_00262cf0(void *a, void *b); +void fast_add_rotations_cf_spherical_offset(void *a, void *b) __asm__("FUN_L00_00262cf0"); -void FUN_L00_00262cf0(void *destination, void *base_vector) { +void fast_add_rotations_cf_spherical_offset(void *destination, void *base_vector) { char spherical_offset[16]; build_spherical_offset(spherical_offset); fast_vec_add(destination, spherical_offset, base_vector); diff --git a/src/overlays/shared/game/run_level_main_loop.c b/src/overlays/shared/game/run_level_main_loop.c index d3413c8032..0eac06c95f 100644 --- a/src/overlays/shared/game/run_level_main_loop.c +++ b/src/overlays/shared/game/run_level_main_loop.c @@ -347,7 +347,7 @@ typedef struct { u8 padB0[4]; f32 unkB4[20]; s32 unk104[20]; - s32 unk154[20]; + s32 map_parameter_pair_second_values[20]; u8 pad1a4[0x80]; s32 archive_index; s32 load_state; @@ -411,7 +411,8 @@ void initialize_level_map_archive(void) { for (i = 0; i < 20; i++) { D_L00_001841F0.unk104[i] = map_parameter_pair_defaults[i * 2]; D_L00_001841F0.unkB4[i] = 0.65f; - D_L00_001841F0.unk154[i] = map_parameter_pair_defaults[i * 2 + 1]; + D_L00_001841F0.map_parameter_pair_second_values[i] = + map_parameter_pair_defaults[i * 2 + 1]; } } level = current_level_index; diff --git a/src/overlays/shared/game/unlock_planet.c b/src/overlays/shared/game/unlock_planet.c index 79e5961a97..afbff88961 100644 --- a/src/overlays/shared/game/unlock_planet.c +++ b/src/overlays/shared/game/unlock_planet.c @@ -484,7 +484,7 @@ extern s32 D_0015EEA0_macro __asm__("D_0015EEA0") MACRO_ADDR; extern int D_L00_0015F598; extern unsigned char D_L00_0015FC88_macro[] __asm__("D_L00_0015FC88") MACRO_ADDR; extern void debug_print() __asm__("FUN_001e93b0"); -extern int FUN_L00_00261b48(int, void *, void *, void *); +extern int path_8808(int, void *, void *, void *) __asm__("FUN_L00_00261b48"); extern void spawn_bolt_by_value(void *, void *, void *, int, int, int) __asm__("FUN_L00_002a7438"); void spawn_randomized_bolt_drop(struct Moby *moby, @@ -690,7 +690,7 @@ void spawn_randomized_bolt_drop( } fast_vec_scale(landing, velocity, time); fast_vec_add(landing, landing, &moby->pos); - roots = FUN_L00_00261b48(path_index, &moby->pos, landing, path_point); + roots = path_8808(path_index, &moby->pos, landing, path_point); fast_vec_sub(landing, path_point, position); landing[2] = 0.0f; fast_vec_normalize(quarter, landing, 0.25f); diff --git a/src/overlays/shared/hero/hero_frame_update.c b/src/overlays/shared/hero/hero_frame_update.c index 3202a8bcb2..5d0f58a080 100644 --- a/src/overlays/shared/hero/hero_frame_update.c +++ b/src/overlays/shared/hero/hero_frame_update.c @@ -791,7 +791,7 @@ void exit_hero_vehicle_mode_and_restore_moby(void) { reset_hero_easing_records(); hero_state_base = (struct Hero *)((char *)D_0013E533 + 0xE1D); previous_active_moby = ((char *)hero_state_base->unkA84); - hero_state_base->vehicle_mode = 0; + hero_state_base->vehicle_mode = HERO_VEHICLE_MODE_ON_FOOT; if (previous_active_moby != 0) { MOBY(previous_active_moby)->flags &= 0xFFF9; } diff --git a/src/overlays/shared/hero/hero_idle_sequence.c b/src/overlays/shared/hero/hero_idle_sequence.c index 53ba5ce23a..e8902e8a03 100644 --- a/src/overlays/shared/hero/hero_idle_sequence.c +++ b/src/overlays/shared/hero/hero_idle_sequence.c @@ -1616,26 +1616,26 @@ typedef struct { typedef struct { u8 p0[0x162C]; - f32 f162C; + f32 clank_glow_quad_scale; u8 p1[0x1D50 - 0x1630]; - V_207d40 v1D50[3]; - V_207d40 v1D80; + V_207d40 three_point_glow_positions[3]; + V_207d40 single_point_glow_position; V_207d40 v1D90[4]; - V_207d40 v1DD0[8]; - s32 i1E50[8]; - f32 f1E70[8]; - f32 f1E90[8]; - s16 h1EB0; + V_207d40 queued_glow_positions[8]; + s32 queued_glow_colors[8]; + f32 queued_glow_quad_scales[8]; + f32 queued_glow_position_offset_scales[8]; + s16 queued_glow_count; u8 p2[0x20A4 - 0x1EB2]; u8 b20A4; u8 p3[0x22D8 - 0x20A5]; - s16 h22D8; + s16 on_foot_single_glow_suppressed; u8 p4[0x22E4 - 0x22DA]; - s32 i22E4; + s32 three_point_glow_color; u8 p5[0x22FC - 0x22E8]; - s16 h22FC; + s16 clank_glow_scale_boost; u8 p6[2]; - s32 i2300; + s32 clank_glow_color; } P_207d40; extern P_207d40 D_0013F350_lui __asm__("D_0013F350") NOT_SDA; @@ -1652,15 +1652,18 @@ void draw_hero_glow_quads(void) { mode = D_L00_0015F5C4; if (mode == 2 || mode == 6) { - for (i = 0; i < P.h1EB0; i++) - draw_offset_textured_effect_quad(&P.v1DD0[i], P.i1E50[i], P.f1E70[i], P.f1E90[i]); + for (i = 0; i < P.queued_glow_count; i++) + draw_offset_textured_effect_quad(&P.queued_glow_positions[i], + P.queued_glow_colors[i], + P.queued_glow_quad_scales[i], + P.queued_glow_position_offset_scales[i]); return; } vehicle_mode = P.b20A4; if (vehicle_mode == 3) { int j; - glow_color = P.i22E4; - glow_position_cursor = P.v1D50; + glow_color = P.three_point_glow_color; + glow_position_cursor = P.three_point_glow_positions; for (j = 2; j >= 0; j--) { draw_offset_textured_effect_quad(glow_position_cursor, glow_color, 0.2f, 0.08f); glow_position_cursor++; @@ -1668,33 +1671,39 @@ void draw_hero_glow_quads(void) { return; } if (vehicle_mode == HERO_VEHICLE_MODE_ON_FOOT) { - if ((hero_slot_item_id(3) == 3 || hero_slot_item_id(3) == 2) && P.h22D8 == 0) { - P.v1D80.f[2] += 0.015f; - draw_offset_textured_effect_quad(&P.v1D80, 0x280000C0, 0.057f, 0.08f); - P.v1D80.f[2] -= 0.015f; + if ((hero_slot_item_id(3) == 3 || hero_slot_item_id(3) == 2) && + P.on_foot_single_glow_suppressed == 0) { + P.single_point_glow_position.f[2] += 0.015f; + draw_offset_textured_effect_quad( + &P.single_point_glow_position, 0x280000C0, 0.057f, 0.08f); + P.single_point_glow_position.f[2] -= 0.015f; } - for (i = 0; i < P.h1EB0; i++) - draw_offset_textured_effect_quad(&P.v1DD0[i], P.i1E50[i], P.f1E70[i], P.f1E90[i]); + for (i = 0; i < P.queued_glow_count; i++) + draw_offset_textured_effect_quad(&P.queued_glow_positions[i], + P.queued_glow_colors[i], + P.queued_glow_quad_scales[i], + P.queued_glow_position_offset_scales[i]); return; } if (vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { - P.v1D80.f[2] -= 0.07f; - draw_offset_textured_effect_quad(&P.v1D80, 0x300000C0, 0.25f, 0.08f); - P.v1D80.f[2] += 0.07f; + P.single_point_glow_position.f[2] -= 0.07f; + draw_offset_textured_effect_quad(&P.single_point_glow_position, 0x300000C0, 0.25f, 0.08f); + P.single_point_glow_position.f[2] += 0.07f; return; } if (vehicle_mode == HERO_VEHICLE_MODE_CLANK) { k = 0.07f; - if (P.h22FC) + if (P.clank_glow_scale_boost) k = 0.101500004529953f; if (*(u8 *)0x15EDB3) { - P.v1D80.f[2] -= 0.01f; + P.single_point_glow_position.f[2] -= 0.01f; k *= 1.7f; } else { - P.v1D80.f[2] -= 0.02f; + P.single_point_glow_position.f[2] -= 0.02f; } - approach_value(&P.f162C, k, frame_scale * 0.003f); - draw_offset_textured_effect_quad(&P.v1D80, P.i2300, P.f162C, 0.08f); + approach_value(&P.clank_glow_quad_scale, k, frame_scale * 0.003f); + draw_offset_textured_effect_quad( + &P.single_point_glow_position, P.clank_glow_color, P.clank_glow_quad_scale, 0.08f); } } @@ -2028,7 +2037,7 @@ typedef struct { u8 p10[0x34 - 0x10]; u16 h34; u8 p36[0x84 - 0x36]; - f32 f84; + f32 probed_height_lower_bound; f32 f88; u8 p8C[0xBD - 0x8C]; u8 bBD; @@ -2043,9 +2052,9 @@ typedef struct { u8 p2F8[0x30E - 0x2F8]; s16 h30E; u8 p310[0xD20 - 0x310]; - f32 fD20; + f32 height_probe_downward_angle_radians; u8 pD24[0x2080 - 0xD24]; - M_208b60 *m2080; + M_208b60 *height_probe_moby; s32 i2084; u8 p2088[4]; s32 i208C; @@ -2074,30 +2083,31 @@ void update_hero_moby_probed_height_bounds(void) { V_208b60 *pw, *px; s32 i; if (G.i208C == 0x12 || G.i208C == 0x15 || G.i2084 == 0x7D || G.i208C == 0x16) { - G.m2080->h34 &= 0xFBFF; + G.height_probe_moby->h34 &= 0xFBFF; return; } - G.m2080->h34 |= 0x400; - G.m2080->bBD = 1; + G.height_probe_moby->h34 |= 0x400; + G.height_probe_moby->bBD = 1; k = 0.97f; if (G.h30E != 0 || G.i208C == 4) k = 1.5f; - rotation_step = fast_subtract_rotations(k, G.fD20); + rotation_step = fast_subtract_rotations(k, G.height_probe_downward_angle_radians); if (0.052f < rotation_step) rotation_step = 0.052f; else if (rotation_step < -0.052f) rotation_step = -0.052f; - G.fD20 = fast_add_rotations(G.fD20, rotation_step); - get_moby_light_direction(G.m2080, &v); + G.height_probe_downward_angle_radians = + fast_add_rotations(G.height_probe_downward_angle_radians, rotation_step); + get_moby_light_direction(G.height_probe_moby, &v); planar_angle = fast_arc_tan(v.f[0], v.f[1]); planar_cosine = fast_cos(planar_angle); planar_sine = fast_sin(planar_angle); { - f32 direction_xy_scale = fast_cos(G.fD20); + f32 direction_xy_scale = fast_cos(G.height_probe_downward_angle_radians); v.f[0] = planar_cosine * direction_xy_scale; v.f[1] = planar_sine * direction_xy_scale; } - v.f[2] = -fast_sin(G.fD20); + v.f[2] = -fast_sin(G.height_probe_downward_angle_radians); qcopy(&l00_hero_height_probe_direction, &v); probe_reference_z = G.f2D8; if (probe_reference_z < 1.0f) { @@ -2109,8 +2119,8 @@ void update_hero_moby_probed_height_bounds(void) { if (1.0f < t) probe_reference_z = t; else { - G.m2080->f84 = 0.0f; - G.m2080->f88 = 0.0f; + G.height_probe_moby->probed_height_lower_bound = 0.0f; + G.height_probe_moby->f88 = 0.0f; return; } } @@ -2123,7 +2133,7 @@ void update_hero_moby_probed_height_bounds(void) { for (i = 3; i >= 0; i--, t++) { M_208b60 *m; U_208b60 *u = &(*(U_208b60 *)D_L00_00173E40); - m = G.m2080; + m = G.height_probe_moby; sc = m->fC * 0.0009765625f; fast_vec_scale(pw, m, 0.0009765625f); collision_probe_start.f[0] += planar_cosine * t->x * sc; @@ -2137,11 +2147,11 @@ void update_hero_moby_probed_height_bounds(void) { hi = max_float(hi, u->hit_z); } } - G.m2080->f84 = lo - 0.12f; - G.m2080->f88 = hi + 0.24f; + G.height_probe_moby->probed_height_lower_bound = lo - 0.12f; + G.height_probe_moby->f88 = hi + 0.24f; { - M_208b60 *m = G.m2080; - f32 z = m->f84 + 3.0f; + M_208b60 *m = G.height_probe_moby; + f32 z = m->probed_height_lower_bound + 3.0f; if (z < m->f88) m->f88 = z; } @@ -2561,6 +2571,10 @@ void emit_hero_randomized_motion_effects(int iteration_count, int mode) { enum { HERO_MOTION_EFFECT_RANDOMIZED_HERO_POSITION = 0 }; + enum { + HERO_MOTION_EFFECT_ALTERNATING_MOBY_POINTS_0_AND_14 = 1, + HERO_MOTION_EFFECT_ALTERNATING_MOBY_POINTS_23_AND_22 = 2 + }; float pos[4]; V_209a40 randomized_displacement; int i; @@ -2574,13 +2588,13 @@ void emit_hero_randomized_motion_effects(int iteration_count, int mode) { pos[0] = hero_state->motion.pos.f[0] + random_float_between(-0.1f, 0.1f); pos[1] = hero_state->motion.pos.f[1] + random_float_between(-0.1f, 0.1f); pos[2] = hero_state->motion.pos.f[2] + random_float_between(-0.5f, 0.1f); - } else if (mode == 1) { + } else if (mode == HERO_MOTION_EFFECT_ALTERNATING_MOBY_POINTS_0_AND_14) { if (!(i & 1)) { moby_point_position(hero_state->moby, 0, pos); } else { moby_point_position(hero_state->moby, 0xE, pos); } - } else if (mode == 2) { + } else if (mode == HERO_MOTION_EFFECT_ALTERNATING_MOBY_POINTS_23_AND_22) { if (!(i & 1)) { moby_point_position(hero_state->moby, 0x17, pos); } else { @@ -2736,7 +2750,7 @@ typedef struct V0020a240 { typedef struct G0020a240 { u8 pad[0x80]; - u8 v80[0x1b4]; + u8 hero_position_storage[0x1b4]; f32 f234; } G0020a240; @@ -2760,7 +2774,8 @@ s32 probe_hero_forward_collision(f32 *hit_distance_xy_out, transform_hero_polar_offset_to_world(&probe_end, probe_end_radius, 0.0f, probe_z_offset); if (collision_line(&probe_start, &probe_end, 2, 0, 0)) { if (hit_distance_xy_out != 0) - *hit_distance_xy_out = vector_distance_xy(hero_state->v80, D_L00_00173E60); + *hit_distance_xy_out = + vector_distance_xy(hero_state->hero_position_storage, D_L00_00173E60); return 1; } return 0; @@ -2845,25 +2860,25 @@ void clear_hero_idle_rotation_targets(void) { typedef struct { char p000[0x248]; - f32 f248; + f32 forward_collision_distance_xy; char p24c[0x258 - 0x24C]; - f32 f258; - f32 f25c; - s32 i260; + f32 forward_drop_probe_distance; + f32 forward_drop_probe_clearance_offset; + s32 forward_drop_detected; char p264[0x1004 - 0x264]; - f32 f1004; - f32 f1008; + f32 idle_pitch_target_radians; + f32 idle_yaw_target_radians; char p100c[4]; - s32 i1010; - f32 f1014; - f32 f1018; + s32 idle_rotation_target_delay_frames; + f32 idle_rotation_easing_acceleration; + f32 idle_rotation_easing_max_speed; char p101c[0x1184 - 0x101C]; - s32 i1184; + s32 slot_three_secondary_moby; char p1188[0x2080 - 0x1188]; void *p2080; s32 i2084; char p2088[0x2274 - 0x2088]; - void *p2274; + void *tracked_target_moby; } G_a540; extern G_a540 D_0013F350_a540 __asm__("D_0013F350"); @@ -2883,7 +2898,7 @@ void update_hero_pitch_and_yaw_easing_targets(void) { s32 hero_animation_sequence_index; s32 min_delay_frames; - if (D_0015EDB3 != 0 && G.i1184 != 0) { + if (D_0015EDB3 != 0 && G.slot_three_secondary_moby != 0) { hero_eases[18].scale = D_0015EE18; } hero_eases[17].scale = D_0015EE14; @@ -2892,13 +2907,16 @@ void update_hero_pitch_and_yaw_easing_targets(void) { } else { approach_value(&D_0015EE14, 0.92f, 0.05f); } - if (G.i260 != 0 && 1.4f < G.f258 && 1.0f < G.f248) { + if (G.forward_drop_detected != 0 && 1.4f < G.forward_drop_probe_distance && + 1.0f < G.forward_collision_distance_xy) { set_fourth_hero_easing_parameters(frame_scale_sq * 0.015f, frame_scale_sq * 0.3f); - pitch_target_radians = G.f258 * 1.5f * DEG_TO_RAD + 0.19198622f; + pitch_target_radians = G.forward_drop_probe_distance * 1.5f * DEG_TO_RAD + 0.19198622f; if (0.47123888f < pitch_target_radians) pitch_target_radians = 0.47123888f; - if ((1.0f - G.f25c) * 35.0f * DEG_TO_RAD < pitch_target_radians) - pitch_target_radians = (1.0f - G.f25c) * 35.0f * DEG_TO_RAD; + if ((1.0f - G.forward_drop_probe_clearance_offset) * 35.0f * DEG_TO_RAD < + pitch_target_radians) + pitch_target_radians = + (1.0f - G.forward_drop_probe_clearance_offset) * 35.0f * DEG_TO_RAD; hero_eases[3].rot_target.f[1] = pitch_target_radians; set_second_hero_easing_parameters(frame_scale_sq * 0.008f, frame_scale_sq * 0.3f); hero_eases[1].rot_target.f[1] = hero_eases[3].rot_target.f[1] * 0.7f; @@ -2909,35 +2927,41 @@ void update_hero_pitch_and_yaw_easing_targets(void) { hero_animation_sequence_index = *(u8 *)((char *)G.p2080 + 0x53); if ((u8)hero_animation_sequence_index >= 3 && (u8)hero_animation_sequence_index != 0x3A) return; - if (G.p2274 != 0) + if (G.tracked_target_moby != 0) return; if ((u32)(hero_animation_sequence_index - 1) < 2) { min_delay_frames = scale_game_frames(40); - G.i1010 = random_int_between(min_delay_frames, scale_game_frames(70)); + G.idle_rotation_target_delay_frames = + random_int_between(min_delay_frames, scale_game_frames(70)); } - if (fast_dec_timer(&G.i1010) != 0) { - G.f1004 = -random_float_between(-0.15707964f, 0.43633232f); - G.f1008 = randf_sym(0.34906584f, 0.99483764f); + if (fast_dec_timer(&G.idle_rotation_target_delay_frames) != 0) { + G.idle_pitch_target_radians = -random_float_between(-0.15707964f, 0.43633232f); + G.idle_yaw_target_radians = randf_sym(0.34906584f, 0.99483764f); random_blend_factor = random_float_between(0.0f, 1.0f); - G.f1014 = interpolate_scalar_linear(0.015f, 0.007f, random_blend_factor); - G.f1018 = interpolate_scalar_linear(0.29f, 0.3f, random_blend_factor); + G.idle_rotation_easing_acceleration = + interpolate_scalar_linear(0.015f, 0.007f, random_blend_factor); + G.idle_rotation_easing_max_speed = + interpolate_scalar_linear(0.29f, 0.3f, random_blend_factor); min_delay_frames = scale_game_frames(90); - G.i1010 = random_int_between(min_delay_frames, scale_game_frames(200)); - G.i1010 += truncate_float_to_s32((f32)scale_game_frames(80) * random_blend_factor); + G.idle_rotation_target_delay_frames = + random_int_between(min_delay_frames, scale_game_frames(200)); + G.idle_rotation_target_delay_frames += + truncate_float_to_s32((f32)scale_game_frames(80) * random_blend_factor); } if ((u32) * (u8 *)((char *)G.p2080 + 0x53) - 1 < 2) { - if (0.34906584f < G.f1008) - G.f1008 = 0.34906584f; - else if (G.f1008 < -0.34906584f) - G.f1008 = -0.34906584f; - if (0.2617994f < G.f1004) - G.f1004 = 0.2617994f; - if (G.f1004 < 0.0f) - G.f1004 = 0.0f; - } - set_fourth_hero_easing_parameters(G.f1014, G.f1018); - hero_eases[3].rot_target.f[2] = G.f1008; - hero_eases[3].rot_target.f[1] = G.f1004; + if (0.34906584f < G.idle_yaw_target_radians) + G.idle_yaw_target_radians = 0.34906584f; + else if (G.idle_yaw_target_radians < -0.34906584f) + G.idle_yaw_target_radians = -0.34906584f; + if (0.2617994f < G.idle_pitch_target_radians) + G.idle_pitch_target_radians = 0.2617994f; + if (G.idle_pitch_target_radians < 0.0f) + G.idle_pitch_target_radians = 0.0f; + } + set_fourth_hero_easing_parameters(G.idle_rotation_easing_acceleration, + G.idle_rotation_easing_max_speed); + hero_eases[3].rot_target.f[2] = G.idle_yaw_target_radians; + hero_eases[3].rot_target.f[1] = G.idle_pitch_target_radians; set_second_hero_easing_parameters(frame_scale_sq * 0.008f, frame_scale_sq * 0.3f); hero_eases[1].rot_target.f[2] = hero_eases[3].rot_target.f[2] * 0.52f; hero_eases[1].rot_target.f[1] = hero_eases[3].rot_target.f[1] * 0.55f; @@ -3144,12 +3168,12 @@ typedef struct { u8 p30A[0x418 - 0x30A]; s32 i418; u8 p41C[0x10E0 - 0x41C]; - s32 i10E0; + s32 slot_one_primary_item_moby; u8 p10E4[0x12A0 - 0x10E4]; f32 f12A0, f12A4; - s32 i12A8; - s16 h12AC; - u16 h12AE; + s32 point_effect_emission_updates_remaining; + s16 point_effect_particles_per_point; + u16 point_effect_emission_flags; u8 p12B0[0x2080 - 0x12B0]; u8 *p2080; s32 i2084; @@ -3197,37 +3221,37 @@ void update_hero_easing_targets_and_point_effects(void) { -fast_subtract_rotations(P.f2D4, -secondary_clamped_rotation_angle); } } - if (P.i10E0) { + if (P.slot_one_primary_item_moby) { hero_eases[4].scale = 0.01f; hero_eases[5].scale = 0.01f; } - if (!(P.h12AE & 0x80)) { + if (!(P.point_effect_emission_flags & 0x80)) { if (P.i2084 == 3) configure_hero_point_effect_emission(1, 2, 1, 0, 0.021f, 0.002f); if (P.i208C == 4 && P.i418 > 0 && P.i418 < scale_game_frames(12)) configure_hero_point_effect_emission(1, 2, 0, 1, 0.016f, 0.002f); - if (P.i12A8 <= 0) + if (P.point_effect_emission_updates_remaining <= 0) return; - if (P.h12AC == 0) + if (P.point_effect_particles_per_point == 0) return; optional_moby_basis = 0; - if (P.h12AE & 1) + if (P.point_effect_emission_flags & 1) optional_moby_basis = P.p2080 + 0xC0; - P.i12A8--; + P.point_effect_emission_updates_remaining--; moby_point_position(P.p2080, 0x16, emission_point_world_position); - for (i = 0; i < P.h12AC; i++) + for (i = 0; i < P.point_effect_particles_per_point; i++) spawn_jittered_effect_particle_with_optional_basis( emission_point_world_position, optional_moby_basis, P.f12A0 + random_float_between(-P.f12A4, P.f12A4)); moby_point_position(P.p2080, 0x17, emission_point_world_position); - for (i = 0; i < P.h12AC; i++) + for (i = 0; i < P.point_effect_particles_per_point; i++) spawn_jittered_effect_particle_with_optional_basis( emission_point_world_position, optional_moby_basis, P.f12A0 + random_float_between(-P.f12A4, P.f12A4)); } else - P.i12A8 = 0; + P.point_effect_emission_updates_remaining = 0; } typedef unsigned int u128_20b5b8 __attribute__((mode(TI))); @@ -3395,19 +3419,19 @@ typedef struct { u8 pad30E[0x110]; s16 h41E; u8 pad420[0xCC0]; - u8 *p10E0; + u8 *slot_one_item_moby; u8 pad10E4[0x1FC]; - s16 h12E0; + s16 pending_flag_selector; u8 b12E2; - u8 b12E3; - u8 b12E4; - u8 b12E5; - u8 b12E6; + u8 idle_exit_transition_selected; + u8 height_difference_selected; + u8 death_descent_transition_selected; + u8 jump_or_respawn_wait_transition_selected; u8 b12E7; u8 pad12E8[0x2]; u8 b12EA; - u8 b12EB; - u8 b12EC; + u8 respawn_wait_transition_selected; + u8 sink_transition_selected; u8 b12ED; u8 b12EE; u8 pad12EF[0xD95]; @@ -3417,9 +3441,9 @@ typedef struct { u8 pad2090[0x14]; u8 b20A4; u8 pad20A5[0x4]; - u8 b20A9; + u8 selected_height_difference_in_band; u8 pad20AA[0x1FA]; - f32 f22A4; + f32 selected_height_difference; s32 i22A8; } P20b960; @@ -3429,81 +3453,83 @@ int FUN_001f0b58_20b960(void) __asm__("FUN_001f0b58"); #define P D_0013F350_20b960 void apply_hero_selected_flags_and_state_transitions(void) { u8 save = P.b12ED; - s16 saved_flag_selector = P.h12E0; + s16 saved_flag_selector = P.pending_flag_selector; f32 height_difference; int target_state; - fast_mem_zero16(&P.h12E0, 0x10); + fast_mem_zero16(&P.pending_flag_selector, 0x10); P.b12ED = save; - P.h12E0 = -1; - P.b20A9 = 0; + P.pending_flag_selector = -1; + P.selected_height_difference_in_band = 0; P.h308 = 0; if (saved_flag_selector == -1) return; if (saved_flag_selector == 2) { if (P.h30C == 0 || P.f2DC < 0.3f) { P.b12E7 = 1; - if (P.b20A4 == 0 && P.p10E0 != 0 && *(s16 *)(P.p10E0 + 0xA6) == 0xAD) + if (P.b20A4 == 0 && P.slot_one_item_moby != 0 && + *(s16 *)(P.slot_one_item_moby + 0xA6) == 0xAD) P.h308 = 1; } } if (saved_flag_selector == 14) { - P.b12E4 = 1; - P.f22A4 = 0.2f; + P.height_difference_selected = 1; + P.selected_height_difference = 0.2f; P.f2F0 = P.f2D8 + 0.2f; } if (saved_flag_selector == 0) { height_difference = P.f2F0 - P.f2D8; - P.f22A4 = height_difference; + P.selected_height_difference = height_difference; if (height_difference < 0.85f && 0.25f < height_difference) - P.b20A9 = 1; - P.b12E4 = 1; + P.selected_height_difference_in_band = 1; + P.height_difference_selected = 1; } if (saved_flag_selector == 3) - P.b12E6 = 1; + P.jump_or_respawn_wait_transition_selected = 1; if (current_level_index == 13 && P.i2084 != 0x7B && coll_sphere((u8 *)&P + 0xD0, 2, 0, P.f234 + 0.03f) && FUN_001f0b58_20b960() == 11) { goto s7B; } if (saved_flag_selector == 11) - P.b12EB = 1; + P.respawn_wait_transition_selected = 1; if (saved_flag_selector == 2) P.b12E7 = 1; if (saved_flag_selector == 4) - P.b12E3 = 1; + P.idle_exit_transition_selected = 1; if (saved_flag_selector == 7) P.b12E2 = 1; if (saved_flag_selector == 13) - P.b12EC = 1; + P.sink_transition_selected = 1; if (saved_flag_selector == 1) - P.b12E5 = 1; + P.death_descent_transition_selected = 1; if (saved_flag_selector == 8) P.b12EA = 1; if (saved_flag_selector == 9) P.b12EE = 1; if (saved_flag_selector == 12) P.b12EA = 1; - if (P.b12E3 && P.i300 && P.i208C != 0x10 && P.i208C != 0x14 && P.i208C != 7) { + if (P.idle_exit_transition_selected && P.i300 && P.i208C != 0x10 && P.i208C != 0x14 && + P.i208C != 7) { target_state = HERO_STATE_VOICE_SLOT_CLEANUP_IDLE_EXIT; goto call; } - if (P.b12E5 && P.i300 && P.b20A4 == 1 && P.i2084 != 0x7D) { + if (P.death_descent_transition_selected && P.i300 && P.b20A4 == 1 && P.i2084 != 0x7D) { target_state = HERO_STATE_VEHICLE_MODE_1_DEATH_DESCENT; goto call; } - if (P.b12E5 && P.i300 && (P.i2084 != 0x3C || P.h41E != 0)) { + if (P.death_descent_transition_selected && P.i300 && (P.i2084 != 0x3C || P.h41E != 0)) { exit_hero_vehicle_mode_if_mode_three(); if (P.i22A8) goto call3c; target_state = HERO_STATE_DEATH_DESCENT; goto call; } - if (P.b12EC && P.i2084 != 0x7F && absolute_float(P.f2F0 - (P.f88 + 0.25f)) < 1.0f && - 0.0f < P.f2F0 - P.f88 && P.f108 < 0.0f) { + if (P.sink_transition_selected && P.i2084 != 0x7F && + absolute_float(P.f2F0 - (P.f88 + 0.25f)) < 1.0f && 0.0f < P.f2F0 - P.f88 && P.f108 < 0.0f) { exit_hero_vehicle_mode_if_mode_three(); target_state = HERO_STATE_SINK; goto call; } - if (P.b12E6 && P.i2084 != 0x68 && P.i2084 != 0x7B && + if (P.jump_or_respawn_wait_transition_selected && P.i2084 != 0x68 && P.i2084 != 0x7B && absolute_float(P.f2F4 - (P.f88 + 0.25f)) < 1.0f && 0.0f < P.f2F4 - P.f88 && (P.i2084 != 0x69 || P.h41E != 0) && P.f108 < 0.0f) { exit_hero_vehicle_mode_if_mode_three(); @@ -3520,8 +3546,8 @@ void apply_hero_selected_flags_and_state_transitions(void) { target_state = HERO_STATE_JUMP_WITH_HEALTH_DAMAGE; goto call; } - if (P.b12EB && P.i2084 != 0x7B && absolute_float(P.f2F4 - (P.f88 + 0.25f)) < 1.0f && - 0.0f < P.f2F4 - P.f88 && P.f108 < 0.0f) { + if (P.respawn_wait_transition_selected && P.i2084 != 0x7B && + absolute_float(P.f2F4 - (P.f88 + 0.25f)) < 1.0f && 0.0f < P.f2F4 - P.f88 && P.f108 < 0.0f) { exit_hero_vehicle_mode_if_mode_three(); hero_set_state(0x7B, 1); } @@ -3536,7 +3562,7 @@ typedef struct Hero Hero; typedef struct { char p0[0x18]; - char *m18; + char *hit_moby; char p1C[4]; float v20[4]; char p30[0x10]; @@ -3654,10 +3680,10 @@ void check_ledge_grab(void) { if (!found) return; - if (((Hit_20C568 *)((char *)D_L00_00173E40))->m18 != 0) { + if (((Hit_20C568 *)((char *)D_L00_00173E40))->hit_moby != 0) { grabbable = 0; - moby_info = get_moby_target_info(((Hit_20C568 *)((char *)D_L00_00173E40))->m18); - moby_props = FUN_L00_002603d0(((Hit_20C568 *)((char *)D_L00_00173E40))->m18); + moby_info = get_moby_target_info(((Hit_20C568 *)((char *)D_L00_00173E40))->hit_moby); + moby_props = FUN_L00_002603d0(((Hit_20C568 *)((char *)D_L00_00173E40))->hit_moby); if (moby_info != 0 && (moby_info->h1E & 1)) { grabbable = 1; } else if (moby_props != 0) { @@ -3666,7 +3692,8 @@ void check_ledge_grab(void) { if (!grabbable) return; } - ((Hero *)D_0013F450_20C568)->ledge_moby = (s32)(((Hit_20C568 *)((char *)D_L00_00173E40))->m18); + ((Hero *)D_0013F450_20C568)->ledge_moby = + (s32)(((Hit_20C568 *)((char *)D_L00_00173E40))->hit_moby); if (((Hero *)D_0013F450_20C568)->motion.pos.f[2] + up < ((Hit_20C568 *)((char *)D_L00_00173E40))->v20[2]) return; diff --git a/src/overlays/shared/hero/hero_move_state_velocity.c b/src/overlays/shared/hero/hero_move_state_velocity.c index d4d09c1ae7..8023f15877 100644 --- a/src/overlays/shared/hero/hero_move_state_velocity.c +++ b/src/overlays/shared/hero/hero_move_state_velocity.c @@ -570,19 +570,19 @@ typedef union { typedef struct { unsigned char pad0[0x80]; - V_2163f0 v80; + V_2163f0 hero_position; unsigned char pad90[0x1F8 - 0x90]; - short s1F8; + short reference_tilt_override; unsigned char pad1FA[0x270 - 0x1FA]; - V_2163f0 v270; + V_2163f0 primary_tilt_reference_vector; unsigned char pad280[0x10]; - V_2163f0 v290; + V_2163f0 alternate_tilt_reference_vector; unsigned char pad2A0[0x2DC - 0x2A0]; float f2DC; unsigned char pad2E0[0x30E - 0x2E0]; short s30E; unsigned char pad310[0x20B3 - 0x310]; - unsigned char b20B3; + unsigned char reference_tilt_mode; } P_2163f0; extern P_2163f0 D_0013F350_2163f0 __asm__("D_0013F350"); @@ -611,16 +611,16 @@ void apply_hero_reference_tilt(void) { transformed_position_offset.f[2] = 0.8f; pitch_smoothing_parameter = frame_scale_sq * 0.3f; FUN_001f9d20_2163f0(&original_position_offset, &original_position_offset, &P); - reference_vector.q = P.v270.q; - if (P.b20B3 == 2) { - FUN_001f9a68_2163f0(&reference_vector, &P.v290, -1.0f); + reference_vector.q = P.primary_tilt_reference_vector.q; + if (P.reference_tilt_mode == HERO_GRAVITY_TOWARD_REFERENCE_POINT) { + FUN_001f9a68_2163f0(&reference_vector, &P.alternate_tilt_reference_vector, -1.0f); } - if (P.b20B3 == 1) { + if (P.reference_tilt_mode == HERO_GRAVITY_OPPOSITE_GROUND_NORMAL) { if (P.s30E < FUN_001f96f8_2163f0(10) || P.f2DC < 1.0f) { - reference_vector.q = P.v270.q; + reference_vector.q = P.primary_tilt_reference_vector.q; } } - if (P.s30E != 0 && P.s1F8 != 0) { + if (P.s30E != 0 && P.reference_tilt_override != 0) { pitch_smoothing_parameter = frame_scale_sq * 0.001f; } FUN_L00_00216130_2163f0(&reference_vector, @@ -629,11 +629,11 @@ void apply_hero_reference_tilt(void) { pitch_smoothing_parameter, 0.0f, 0); - if (P.b20B3 == 1 && P.s30E != 0) { + if (P.reference_tilt_mode == HERO_GRAVITY_OPPOSITE_GROUND_NORMAL && P.s30E != 0) { FUN_001f9d20_2163f0( &transformed_position_offset, &transformed_position_offset, working_matrix); - fast_vec_sub(&P.v80, &P.v80, &transformed_position_offset); - FUN_001f9a10_2163f0(&P.v80, &P.v80, &original_position_offset); + fast_vec_sub(&P.hero_position, &P.hero_position, &transformed_position_offset); + FUN_001f9a10_2163f0(&P.hero_position, &P.hero_position, &original_position_offset); } } @@ -1224,9 +1224,9 @@ typedef struct { f32 unk60; /* 0x60: speed */ s32 unk64; u8 pad68[0xE]; - s16 unk76; + s16 near_wall_launch_flag; u8 pad78[6]; - s16 unk7E; + s16 has_aim_target_position; } ThrowPvars; #include "rnc/overlay/shared/camera/level_camera.h" @@ -1272,7 +1272,7 @@ void launch_hero_wrench(void) { has_target = 0; if (target != NULL && is_wrench_moby(target)) { tpv = (ThrowPvars *)target->pvars; - if (tpv->unk7E) { + if (tpv->has_aim_target_position) { has_target = 1; transform_hero_local_offset_to_world(aim_origin_or_euler_angles, 0.5f, 0.0f, 0.5f); fast_vec_sub(delta, tpv->unk50, aim_origin_or_euler_angles); @@ -1297,7 +1297,7 @@ void launch_hero_wrench(void) { launched_item_vars = (ThrowPvars *)equipped_wrench_moby->pvars; if (hero.wall_probe_distance < 1.2f && 0.6632251f < hero.wall_normal_pitch && !hero.wall_probe_moby_in_class_range) { - launched_item_vars->unk76 = 1; + launched_item_vars->near_wall_launch_flag = 1; } clear_u64_value(launched_item_vars->unk40); if (!aimed) { diff --git a/src/overlays/shared/hero/hero_set_state.c b/src/overlays/shared/hero/hero_set_state.c index d0175c98bb..581b3e1e7b 100644 --- a/src/overlays/shared/hero/hero_set_state.c +++ b/src/overlays/shared/hero/hero_set_state.c @@ -404,7 +404,7 @@ typedef struct { } G_221ee0; typedef struct { - s32 i0; + s32 swing_target_enabled; u8 p0[0x18]; s32 i1C; f32 f20; @@ -422,7 +422,7 @@ typedef struct M_221ee0 { u8 p4[0x78 - 0x36]; Q_221ee0 *q; u8 p5[0xA6 - 0x7C]; - s16 hA6; + s16 moby_class_id; } M_221ee0; extern G_221ee0 D_0013F350_lui __asm__("D_0013F350") NOT_SDA; @@ -449,10 +449,10 @@ void select_hero_grapple_swing_target(void) { bestd = 1e8f; for (candidate_moby = D_L00_0015FFE4_221ee0; candidate_moby != 0; candidate_moby = candidate_moby->next) { - if (candidate_moby->hA6 != 0x323) + if (candidate_moby->moby_class_id != 0x323) continue; q = candidate_moby->q; - if (q->i0 == 0) + if (q->swing_target_enabled == 0) continue; if (candidate_moby->h34 & 1) continue; @@ -3161,25 +3161,25 @@ int try_enter_hero_water_state(void) { typedef struct { u8 p0[0x88]; - f32 f88; + f32 water_adjusted_position_z; u8 p1[0x198 - 0x8C]; s32 i198; u8 p2[0x2F0 - 0x19C]; - f32 f2F0; + f32 water_surface_height_target; u8 p3[0x690 - 0x2F4]; - f32 f690; + f32 water_bob_offset; f32 f694; u8 p4[0x69C - 0x698]; - f32 f69C; - f32 f6A0; + f32 smoothed_water_height; + f32 water_height_spring_velocity; u8 p5[0x8A0 - 0x6A4]; - f32 f8A0; + f32 alternate_water_height_target; u8 p6[0x8FC - 0x8A4]; - f32 f8FC; + f32 water_bob_spring_velocity; u8 p7[0x2084 - 0x900]; s32 i2084; u8 p8[4]; - s32 i208C; + s32 water_height_control_mode; u8 p9[4]; s32 i2094; u8 pa[0x20A0 - 0x2098]; @@ -3192,35 +3192,43 @@ void approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); void update_hero_water_height_and_bobbing(void) __asm__("FUN_L00_00227d40"); void update_hero_water_height_and_bobbing(void) { - if (G.i198 > scale_game_frames(10) || G.f690 < 0.0f || G.i2094 == 0x11 || G.i20A0 == 0x11) { + enum { + WATER_HEIGHT_CONTROL_ALTERNATE_TARGET = 0x16 + }; + if (G.i198 > scale_game_frames(10) || G.water_bob_offset < 0.0f || G.i2094 == 0x11 || + G.i20A0 == 0x11) { if (G.i2084 == 0x36) { - vendor_spring(&G.f690, - &G.f8FC, + vendor_spring(&G.water_bob_offset, + &G.water_bob_spring_velocity, 0.0f, frame_scale_sq * 0.03f, frame_scale_sq * 0.3f, frame_time * 1.5f); G.f694 = 0.0f; } else { - G.f694 -= frame_scale_sq * 0.005f * G.f690 + frame_scale * 0.045f * G.f694; - if (absolute_float(G.f690) < 0.001f && G.f694 < 0.0001f) + G.f694 -= frame_scale_sq * 0.005f * G.water_bob_offset + frame_scale * 0.045f * G.f694; + if (absolute_float(G.water_bob_offset) < 0.001f && G.f694 < 0.0001f) G.f694 = 0.0f; } } - G.f690 += G.f694; - if (G.i2084 == 0x36 && 0.0f < G.f690) { + G.water_bob_offset += G.f694; + if (G.i2084 == 0x36 && 0.0f < G.water_bob_offset) { if (0.0f < G.f694) G.f694 = 0.0f; - approach_value(&G.f690, 0.0f, frame_time * 0.7f); + approach_value(&G.water_bob_offset, 0.0f, frame_time * 0.7f); } if (G.i2084 != 0x7F) { - f32 target_height = G.f2F0; - if (G.i208C == 0x16) - target_height = G.f8A0; - vendor_spring( - &G.f69C, &G.f6A0, target_height, frame_scale_sq * 0.027f, frame_scale_sq * 0.3f, 0.0f); - } - G.f88 = G.f69C + -0.12f + G.f690; + f32 target_height = G.water_surface_height_target; + if (G.water_height_control_mode == WATER_HEIGHT_CONTROL_ALTERNATE_TARGET) + target_height = G.alternate_water_height_target; + vendor_spring(&G.smoothed_water_height, + &G.water_height_spring_velocity, + target_height, + frame_scale_sq * 0.027f, + frame_scale_sq * 0.3f, + 0.0f); + } + G.water_adjusted_position_z = G.smoothed_water_height + -0.12f + G.water_bob_offset; } /* Ported from rac1-decomp (src/overlays/shared/help_00221A98.c: func_L00_00228770), where it is exact; names translated to the US level program. */ @@ -3241,9 +3249,9 @@ typedef struct { typedef struct { char p0[0x80] __attribute__((aligned(16))); char p80[0x118]; - int f198; + int current_state_elapsed_frames; char p19C[0x4A]; - short f1E6; + short grapple_entry_lockout; char p1E8[0xF4]; float f2DC; char p2E0[0x20]; @@ -3264,13 +3272,13 @@ typedef struct { char p4AE[0x14E]; int f5FC; char p600[0x368]; - int f968; + int grapple_target_valid; char p96C[0x18]; - float f984; + float grapple_target_score; char p988[0x10]; float f998; short f99C; - short f99E; + short swing_target_valid; char p9A0[0xC0]; int fA60; char pA64[0x38]; @@ -3278,23 +3286,23 @@ typedef struct { char pAA0[0x8]; float fAA8; char pAAC[0x5E4]; - Moby_227fa0 *f1090; + Moby_227fa0 *slot0_item_moby; char p1094[0xC]; - int f10A0; + int equipped_item_input_mask; char p10A4[0xC]; int f10B0; - int f10B4; - int f10B8; + int equipped_slot_state; + int equipped_slot_item_id; char p10BC[0x22E]; unsigned char f12EA; char p12EB[0xD99]; - int f2084; + int hero_current_state; int f2088; - int f208C; + int hero_control_mode; char p2090[0x14]; - unsigned char f20A4; + unsigned char equipped_item_input_locked; char p20A5[0x3]; - unsigned char f20A8; + unsigned char equipped_item_animation_active; char p20A9[0x3]; unsigned char f20AC; char p20AD[0x1EF]; @@ -3305,7 +3313,7 @@ typedef struct { short f22D8; char p22DA[0x2]; short f22DC; - short f22DE; + short mode3_toggle_delay_frames; } Hero_228770; extern Hero_228770 D_0013F450_h228770 __asm__("D_0013F350"); @@ -3336,24 +3344,24 @@ int process_hero_equipped_item_input(void) { int mask; if (D_0013F450_h228770.f20AC != 0 && - (D_0013F450_h228770.f10B8 != 8 || D_0013F450_h228770.f308 != 1)) { + (D_0013F450_h228770.equipped_slot_item_id != 8 || D_0013F450_h228770.f308 != 1)) { return 0; } - if (D_0013F450_h228770.f20A4 != 0) { + if (D_0013F450_h228770.equipped_item_input_locked != 0) { return 0; } - if (D_0013F450_h228770.f1090 == 0) { + if (D_0013F450_h228770.slot0_item_moby == 0) { return 0; } - if (D_0013F450_h228770.f10B4 != 2) { + if (D_0013F450_h228770.equipped_slot_state != 2) { return 0; } - start = D_0013F450_h228770.f198; - mask = D_0013F450_h228770.f10A0; - switch (D_0013F450_h228770.f10B8) { + start = D_0013F450_h228770.current_state_elapsed_frames; + mask = D_0013F450_h228770.equipped_item_input_mask; + switch (D_0013F450_h228770.equipped_slot_item_id) { case ITEM_WRENCH: - if (D_0013F450_h228770.f208C < 2U || - (D_0013F450_h228770.f208C == 4 && D_0013F450_h228770.f418 != 0)) { + if (D_0013F450_h228770.hero_control_mode < 2U || + (D_0013F450_h228770.hero_control_mode == 4 && D_0013F450_h228770.f418 != 0)) { Moby_227fa0 *equipped_item_moby; if (D_0013F450_h228770.f12EA != 0) { @@ -3362,7 +3370,7 @@ int process_hero_equipped_item_input(void) { if (!pad_pressed_within(mask, scale_game_frames(7), &item_press_age_frames[0])) { break; } - equipped_item_moby = D_0013F450_h228770.f1090; + equipped_item_moby = D_0013F450_h228770.slot0_item_moby; if (equipped_item_moby == 0) { break; } @@ -3373,10 +3381,12 @@ int process_hero_equipped_item_input(void) { break; } if ((controller_state.held & 0xA) || - ((D_0013F450_h228770.f2084 == 1 || D_0013F450_h228770.f2084 == 0x1E) && - D_0013F450_h228770.f198 > scale_game_frames(0x14))) { - if ((D_0013F450_h228770.f2084 == 1 || D_0013F450_h228770.f2084 == 0x1E) && - D_0013F450_h228770.f198 > scale_game_frames(0x14)) { + ((D_0013F450_h228770.hero_current_state == 1 || + D_0013F450_h228770.hero_current_state == 0x1E) && + D_0013F450_h228770.current_state_elapsed_frames > scale_game_frames(0x14))) { + if ((D_0013F450_h228770.hero_current_state == 1 || + D_0013F450_h228770.hero_current_state == 0x1E) && + D_0013F450_h228770.current_state_elapsed_frames > scale_game_frames(0x14)) { launch_hero_wrench(); break; } @@ -3390,18 +3400,22 @@ int process_hero_equipped_item_input(void) { } break; } - if (D_0013F450_h228770.f2084 == 7 || D_0013F450_h228770.f2084 == 9 || - D_0013F450_h228770.f2084 == 8 || D_0013F450_h228770.f2084 == 6 || - (D_0013F450_h228770.f2084 == 0xE && D_0013F450_h228770.fAA8 > 32.0f) || - (D_0013F450_h228770.f2084 == 0xB && D_0013F450_h228770.f450 != 3 && + if (D_0013F450_h228770.hero_current_state == 7 || + D_0013F450_h228770.hero_current_state == 9 || + D_0013F450_h228770.hero_current_state == 8 || + D_0013F450_h228770.hero_current_state == 6 || + (D_0013F450_h228770.hero_current_state == 0xE && D_0013F450_h228770.fAA8 > 32.0f) || + (D_0013F450_h228770.hero_current_state == 0xB && D_0013F450_h228770.f450 != 3 && D_0013F450_h228770.fAA8 > 18.0f) || - (D_0013F450_h228770.f2084 == 0xB && D_0013F450_h228770.f450 == 3 && + (D_0013F450_h228770.hero_current_state == 0xB && D_0013F450_h228770.f450 == 3 && D_0013F450_h228770.fAA8 > 20.0f) || - D_0013F450_h228770.f2084 == 0x2D || D_0013F450_h228770.f2084 == 0x11) { - if (D_0013F450_h228770.f198 > scale_game_frames(0xA)) { + D_0013F450_h228770.hero_current_state == 0x2D || + D_0013F450_h228770.hero_current_state == 0x11) { + if (D_0013F450_h228770.current_state_elapsed_frames > scale_game_frames(0xA)) { int t = scale_game_frames(0xA); - if (D_0013F450_h228770.f2084 == 0xB || D_0013F450_h228770.f2084 == 0xE) { + if (D_0013F450_h228770.hero_current_state == 0xB || + D_0013F450_h228770.hero_current_state == 0xE) { t = scale_game_frames(0x12); } if (!pad_pressed_within(mask, t, 0)) { @@ -3409,7 +3423,8 @@ int process_hero_equipped_item_input(void) { } if ((D_0013F450_h228770.f41E == 0 && D_0013F450_h228770.f2DC > 0.1f) || (D_0013F450_h228770.f41E != 0 && D_0013F450_h228770.f2DC > 0.57f) || - (D_0013F450_h228770.f2084 == 8 && D_0013F450_h228770.f2DC > 0.57f)) { + (D_0013F450_h228770.hero_current_state == 8 && + D_0013F450_h228770.f2DC > 0.57f)) { if (D_0013F450_h228770.f5FC != 0) { break; } @@ -3423,16 +3438,16 @@ int process_hero_equipped_item_input(void) { break; } } - if (D_0013F450_h228770.f208C == 6) { - HeroTableRow2C *rec = &attack_records[D_0013F450_h228770.fA60]; + if (D_0013F450_h228770.hero_control_mode == 6) { + HeroTableRow2C *wrench_attack_record = &attack_records[D_0013F450_h228770.fA60]; int t; - if (D_0013F450_h228770.f2084 == 0x15) { - if (D_0013F450_h228770.f198 > scale_game_frames(0x1E)) { + if (D_0013F450_h228770.hero_current_state == 0x15) { + if (D_0013F450_h228770.current_state_elapsed_frames > scale_game_frames(0x1E)) { if (D_0013F450_h228770.fA9C != 0) { break; } - if (D_0013F450_h228770.fAA8 >= (float)rec->f10 && + if (D_0013F450_h228770.fAA8 >= (float)wrench_attack_record->f10 && (controller_state.held & 0xA) && pad_pressed_within(mask, scale_game_frames(0xF), 0)) { hero_set_state(0x15, 1); @@ -3443,10 +3458,10 @@ int process_hero_equipped_item_input(void) { if (D_0013F450_h228770.fA9C != 0) { break; } - if (!(D_0013F450_h228770.fAA8 >= (float)rec->f10)) { + if (!(D_0013F450_h228770.fAA8 >= (float)wrench_attack_record->f10)) { break; } - t = (truncate_float_to_s32(D_0013F450_h228770.fAA8) - rec->fC) * 2; + t = (truncate_float_to_s32(D_0013F450_h228770.fAA8) - wrench_attack_record->fC) * 2; if (t <= 0) { t = 1; } @@ -3479,34 +3494,39 @@ int process_hero_equipped_item_input(void) { if (D_0013F450_h228770.f30E != 0) { t = scale_game_frames(8); } - if (D_0013F450_h228770.f208C < 2U || D_0013F450_h228770.f208C == 4 || - D_0013F450_h228770.f208C == 2 || D_0013F450_h228770.f208C == 0xF || - D_0013F450_h228770.f208C == 5 || D_0013F450_h228770.f2084 == 0x1E) { + if (D_0013F450_h228770.hero_control_mode < 2U || + D_0013F450_h228770.hero_control_mode == 4 || + D_0013F450_h228770.hero_control_mode == 2 || + D_0013F450_h228770.hero_control_mode == 0xF || + D_0013F450_h228770.hero_control_mode == 5 || + D_0013F450_h228770.hero_current_state == 0x1E) { if (pad_pressed_within(mask, t, 0) || ((controller_state.held & mask) && D_0013F450_h228770.f10B0 > scale_game_frames(0xF))) { - if (D_0013F450_h228770.f99E != 0) { - if (D_0013F450_h228770.f968 != 0) { - if (D_0013F450_h228770.f998 < D_0013F450_h228770.f984) { - D_0013F450_h228770.f968 = 0; + if (D_0013F450_h228770.swing_target_valid != 0) { + if (D_0013F450_h228770.grapple_target_valid != 0) { + if (D_0013F450_h228770.f998 < D_0013F450_h228770.grapple_target_score) { + D_0013F450_h228770.grapple_target_valid = 0; } else { - D_0013F450_h228770.f99E = 0; + D_0013F450_h228770.swing_target_valid = 0; } } - if (D_0013F450_h228770.f99E != 0 && D_0013F450_h228770.f1E6 == 0 && - D_0013F450_h228770.f2084 != 0x2C) { + if (D_0013F450_h228770.swing_target_valid != 0 && + D_0013F450_h228770.grapple_entry_lockout == 0 && + D_0013F450_h228770.hero_current_state != 0x2C) { hero_set_state(0x2C, 1); break; } } - if (D_0013F450_h228770.f968 != 0 && D_0013F450_h228770.f1E6 == 0) { + if (D_0013F450_h228770.grapple_target_valid != 0 && + D_0013F450_h228770.grapple_entry_lockout == 0) { hero_set_state(0x24, 1); } } } } break; case ITEM_VEHICLE_MODE_TOGGLE: - if (D_0013F450_h228770.f20A4 != 0) { + if (D_0013F450_h228770.equipped_item_input_locked != 0) { break; } if (!can_select_hero_item_31()) { @@ -3518,40 +3538,44 @@ int process_hero_equipped_item_input(void) { if (D_00141660 != 0x1F) { break; } - if (D_0013F450_h228770.f1090->oclass != 0x1E3) { + if (D_0013F450_h228770.slot0_item_moby->oclass != 0x1E3) { break; } - if (D_0013F450_h228770.f22DE != 0) { + if (D_0013F450_h228770.mode3_toggle_delay_frames != 0) { break; } allocate_hero_voice_for_entry(0x18, 0); - D_0013F450_h228770.f22DE = 0x12; + D_0013F450_h228770.mode3_toggle_delay_frames = 0x12; D_0013F450_h228770.f22DC = 1; break; case ITEM_REMOTE_VENDOR: - if (D_0013F450_h228770.f208C < 3U || D_0013F450_h228770.f208C == 4 || - D_0013F450_h228770.f208C == 5) { + if (D_0013F450_h228770.hero_control_mode < 3U || + D_0013F450_h228770.hero_control_mode == 4 || + D_0013F450_h228770.hero_control_mode == 5) { if (pad_pressed_within(mask, scale_game_frames(8), 0)) { open_vendor_menu(0); } } break; case 15: - if (D_0013F450_h228770.f208C < 2U || D_0013F450_h228770.f208C == 0xC || - D_0013F450_h228770.f208C == 2 || D_0013F450_h228770.f208C == 4 || - D_0013F450_h228770.f208C == 5 || D_0013F450_h228770.f208C == 0xF || - D_0013F450_h228770.f2084 == 0x1E) { + if (D_0013F450_h228770.hero_control_mode < 2U || + D_0013F450_h228770.hero_control_mode == 0xC || + D_0013F450_h228770.hero_control_mode == 2 || + D_0013F450_h228770.hero_control_mode == 4 || + D_0013F450_h228770.hero_control_mode == 5 || + D_0013F450_h228770.hero_control_mode == 0xF || + D_0013F450_h228770.hero_current_state == 0x1E) { PVar *equipped_item_vars; - if (D_0013F450_h228770.f1090 == 0) { + if (D_0013F450_h228770.slot0_item_moby == 0) { break; } - equipped_item_vars = *(PVar **)&D_0013F450_h228770.f1090->pvars; + equipped_item_vars = *(PVar **)&D_0013F450_h228770.slot0_item_moby->pvars; if (((controller_state.held & mask) && D_0013F450_h228770.f10B0 > scale_game_frames(5)) || (controller_state.pressed & mask)) { if (get_ammo(-1)) { - if (D_0013F450_h228770.f20A8 == 0) { + if (D_0013F450_h228770.equipped_item_animation_active == 0) { start_equipped_item_animation(); } break; @@ -3559,9 +3583,10 @@ int process_hero_equipped_item_input(void) { } if (controller_state.held & mask) { if (!get_ammo(-1)) { - if (!voice_is_playing(D_0013F450_h228770.f1090, equipped_item_vars->fC)) { - equipped_item_vars->fC = - allocate_voice_for_target_entry(0, 0, (int)D_0013F450_h228770.f1090); + if (!voice_is_playing(D_0013F450_h228770.slot0_item_moby, + equipped_item_vars->fC)) { + equipped_item_vars->fC = allocate_voice_for_target_entry( + 0, 0, (int)D_0013F450_h228770.slot0_item_moby); } } } @@ -3572,15 +3597,18 @@ int process_hero_equipped_item_input(void) { case 20: case 24: case 25: - if ((D_0013F450_h228770.f208C == 0 && D_0013F450_h228770.f2084 != 0x1E) || - D_0013F450_h228770.f208C == 1 || D_0013F450_h228770.f208C == 0xC || - D_0013F450_h228770.f208C == 5 || D_0013F450_h228770.f208C == 0xF || - (D_0013F450_h228770.f208C == 4 && D_0013F450_h228770.f4AC != 0) || - (D_0013F450_h228770.f2084 == 0x23 && D_0013F450_h228770.fAA8 > 25.0f)) { + if ((D_0013F450_h228770.hero_control_mode == 0 && + D_0013F450_h228770.hero_current_state != 0x1E) || + D_0013F450_h228770.hero_control_mode == 1 || + D_0013F450_h228770.hero_control_mode == 0xC || + D_0013F450_h228770.hero_control_mode == 5 || + D_0013F450_h228770.hero_control_mode == 0xF || + (D_0013F450_h228770.hero_control_mode == 4 && D_0013F450_h228770.f4AC != 0) || + (D_0013F450_h228770.hero_current_state == 0x23 && D_0013F450_h228770.fAA8 > 25.0f)) { int t; int n; - if (D_0013F450_h228770.f20A8 != 0) { + if (D_0013F450_h228770.equipped_item_animation_active != 0) { break; } t = scale_game_frames(7); @@ -3589,33 +3617,36 @@ int process_hero_equipped_item_input(void) { ((controller_state.held & 0x20) && n > scale_game_frames(8) && n < scale_game_frames(0x11))) { if (get_ammo(-1)) { - if (D_0013F450_h228770.f208C == 0xC || D_0013F450_h228770.f208C == 0 || - D_0013F450_h228770.f2084 == 3 || - (D_0013F450_h228770.f208C == 1 && D_0013F450_h228770.f229C < 0.7f)) { + if (D_0013F450_h228770.hero_control_mode == 0xC || + D_0013F450_h228770.hero_control_mode == 0 || + D_0013F450_h228770.hero_current_state == 3 || + (D_0013F450_h228770.hero_control_mode == 1 && + D_0013F450_h228770.f229C < 0.7f)) { hero_set_state(0x23, 1); } else { start_equipped_item_animation(); } break; } - if (D_0013F450_h228770.f1090 != 0) { - allocate_voice_for_target_entry(0, 0, (int)D_0013F450_h228770.f1090); + if (D_0013F450_h228770.slot0_item_moby != 0) { + allocate_voice_for_target_entry(0, 0, (int)D_0013F450_h228770.slot0_item_moby); } } } break; case 18: - if (D_0013F450_h228770.f208C < 2U || - (D_0013F450_h228770.f208C == 4 && D_0013F450_h228770.f418 != 0)) { - if (D_0013F450_h228770.f2084 != 1) { + if (D_0013F450_h228770.hero_control_mode < 2U || + (D_0013F450_h228770.hero_control_mode == 4 && D_0013F450_h228770.f418 != 0)) { + if (D_0013F450_h228770.hero_current_state != 1) { int t = scale_game_frames(0xA); int n = D_0013F450_h228770.f10B0; if (pad_pressed_within(mask, t <= n ? t : n, &item_press_age_frames[2])) { - if (D_0013F450_h228770.f1090 != 0) { + if (D_0013F450_h228770.slot0_item_moby != 0) { hero_set_state(0x20, 1); - if (D_0013F450_h228770.f1090 != 0) { - allocate_voice_for_target_entry(0, 0, (int)D_0013F450_h228770.f1090); + if (D_0013F450_h228770.slot0_item_moby != 0) { + allocate_voice_for_target_entry( + 0, 0, (int)D_0013F450_h228770.slot0_item_moby); } } } @@ -3623,36 +3654,40 @@ int process_hero_equipped_item_input(void) { } break; case 21: - if (D_0013F450_h228770.f1090 != 0) { + if (D_0013F450_h228770.slot0_item_moby != 0) { if (controller_state.pressed & mask) { start_equipped_item_animation(); } } break; } - if (D_0013F450_h228770.f198 == start) { - if (hero_slot_item_id(3) == 3 && D_0013F450_h228770.f2084 != 0x81 && + if (D_0013F450_h228770.current_state_elapsed_frames == start) { + if (hero_slot_item_id(3) == 3 && D_0013F450_h228770.hero_current_state != 0x81 && (D_0013F450_h228770.f308 == 0 || item_available[0x1C] == 0) && D_0013F450_h228770.f22D8 == 0) { f_fun_001f9740_227fa0(&hero_repeat_press_window_frames); if (hero_repeat_press_window_frames != 0) { - if (D_0013F450_h228770.f208C < 2U || D_0013F450_h228770.f208C == 0xC || - ((D_0013F450_h228770.f208C == 2 || D_0013F450_h228770.f208C == 4) && + if (D_0013F450_h228770.hero_control_mode < 2U || + D_0013F450_h228770.hero_control_mode == 0xC || + ((D_0013F450_h228770.hero_control_mode == 2 || + D_0013F450_h228770.hero_control_mode == 4) && D_0013F450_h228770.f300 != 0)) { if ((controller_state.held & 8) && (controller_state.pressed & 8)) { hero_set_state(0x81, 1); } } } - if ((controller_state.pressed & 8) && D_0013F450_h228770.f2084 != 0x81) { + if ((controller_state.pressed & 8) && D_0013F450_h228770.hero_current_state != 0x81) { hero_repeat_press_window_frames = scale_game_frames(0x1E); } - } else if (D_0013F450_h228770.f2084 != 0x13 && D_0013F450_h228770.f2084 != 0x81 && - D_0013F450_h228770.f2084 != 0x15 && D_0013F450_h228770.f2084 != 0x16) { + } else if (D_0013F450_h228770.hero_current_state != 0x13 && + D_0013F450_h228770.hero_current_state != 0x81 && + D_0013F450_h228770.hero_current_state != 0x15 && + D_0013F450_h228770.hero_current_state != 0x16) { D_0013F450_h228770.f22CA = 0; } } - return D_0013F450_h228770.f198 < start; + return D_0013F450_h228770.current_state_elapsed_frames < start; } /* Ported from rac1-decomp (src/overlays/shared/help_00221A98.c: func_L00_00229348), where it is exact; names translated to the US level program. */ diff --git a/src/overlays/shared/hero/hero_switch_item.c b/src/overlays/shared/hero/hero_switch_item.c index d8b15692db..06999b7f7f 100644 --- a/src/overlays/shared/hero/hero_switch_item.c +++ b/src/overlays/shared/hero/hero_switch_item.c @@ -1901,6 +1901,9 @@ s32 get_hero_target_pose_status(void) __asm__("FUN_L00_00233f38"); s32 can_select_hero_item_31(void) __asm__("FUN_L00_0020fe30"); s32 can_select_hero_item_31(void) { + enum { + HERO_CONTROL_MODE_JUMP = 4 + }; struct Hero *hero_state; u32 control_mode; if (get_hero_target_pose_status()) @@ -1911,7 +1914,7 @@ s32 can_select_hero_item_31(void) { if (hero_state->vehicle_mode) return 0; control_mode = hero_state->state.control_mode; - if (control_mode < 3 || control_mode == 4) + if (control_mode < 3 || control_mode == HERO_CONTROL_MODE_JUMP) return hero_state->base_condition == 0; return 0; } @@ -3187,7 +3190,7 @@ typedef struct { typedef struct { u8 p0[0x18]; - s32 i18; + s32 hit_moby; s32 i1C; u8 p1[0x40 - 0x20]; V_212318 v40; @@ -3263,7 +3266,7 @@ void clip_hero_velocity_against_probed_surfaces(int force) { X.i1C > 0) primary_hit_normal_angle = fast_arc_tan(X.v40.f[2], vector_length_xy(&X.v40)); if (0.8726646304130554f <= primary_hit_normal_angle || r == 8 || r == 12) { - hero.unk240 = X.i18; + hero.unk240 = X.hit_moby; *(s32 *)&X.v40.f[2] = 0; FUN_00125180_212318(&X.v40, &X.v40); inward_velocity_component = diff --git a/src/overlays/shared/hero/hero_update_movement.c b/src/overlays/shared/hero/hero_update_movement.c index dcf211db94..3e02cf2322 100644 --- a/src/overlays/shared/hero/hero_update_movement.c +++ b/src/overlays/shared/hero/hero_update_movement.c @@ -126,7 +126,7 @@ extern f32 spring_angle(f32 *, f32, f32 *, s32, f32, f32, f32) __asm__("FUN_L00 extern void moby_point_position(struct MobyView *, s32, void *) __asm__("FUN_L00_0024f7c8"); extern u8 *FUN_L00_0026f080(void *, void *, f32, f32); extern s32 random_int_between(s32, s32) __asm__("FUN_L00_00257b90"); -extern void FUN_L00_00262cf0(void *, void *, f32, f32, f32); +extern void fast_add_rotations_cf(void *, void *, f32, f32, f32) __asm__("FUN_L00_00262cf0"); extern f32 vector_length_xyz_cf(void *, s32) __asm__("FUN_L00_00209018"); extern f32 approach_value(f32 *, f32, f32) __asm__("FUN_00213ed8"); extern void set_first_hero_easing_parameters(f32, f32) __asm__("FUN_L00_0020a1e0"); @@ -232,7 +232,7 @@ void hero_update_movement(void) { }; struct MobyView *moby = (struct MobyView *)hero.moby; - s32 sub = hero.state.step; + s32 state_step_before_update = hero.state.step; s32 anim = moby->b53; f32 speed; Vec4 movement_and_hit_descriptor_scratch; @@ -676,11 +676,11 @@ void hero_update_movement(void) { movement_and_hit_descriptor_scratch.f[2] += random_float_between(0.0f, 0.03f); qcopy(&v10, &hero.motion.displacement); - FUN_L00_00262cf0(&v10, - &v10, - frame_time * -0.75f, - hero.motion.rot.f[2], - hero.motion.rot.f[1]); + fast_add_rotations_cf(&v10, + &v10, + frame_time * -0.75f, + hero.motion.rot.f[2], + hero.motion.rot.f[1]); hero.pack_particle_timer = truncate_float_to_s32((frame_time * 7.0f - hero.ground_speed) / (frame_time * 7.0f) * scale_game_frames(5)); @@ -3590,7 +3590,7 @@ void hero_update_movement(void) { clear_u64_value(&hero.motion.velocity); break; } - if (sub != hero.state.step) { + if (state_step_before_update != hero.state.step) { hero.step_frames = 0; } if (anim != moby->b53) { diff --git a/src/overlays/shared/hero/process_hero_primary_item_input.c b/src/overlays/shared/hero/process_hero_primary_item_input.c index 415e865cad..8990ebb7d5 100644 --- a/src/overlays/shared/hero/process_hero_primary_item_input.c +++ b/src/overlays/shared/hero/process_hero_primary_item_input.c @@ -793,15 +793,17 @@ int process_hero_primary_item_input(void) { } } if ((*(Hero *)((char *)&hero)).state.control_mode == 6) { - HeroTableRow2C *rec = &D_L05_0017C088[(*(Hero *)((char *)&hero)).attack_record]; - int window; + HeroTableRow2C *wrench_attack_timing_record = + &D_L05_0017C088[(*(Hero *)((char *)&hero)).attack_record]; + int window; if ((*(Hero *)((char *)&hero)).state.current == 0x15) { if ((*(Hero *)((char *)&hero)).state_timer > scale_game_frames(0x1E)) { if ((*(Hero *)((char *)&hero)).anim_changing != 0) { break; } - if ((*(Hero *)((char *)&hero)).anim_frame >= (float)rec->f10 && + if ((*(Hero *)((char *)&hero)).anim_frame >= + (float)wrench_attack_timing_record->f10 && (controller_state.held & 0xA) && pad_pressed_within(mask, scale_game_frames(0xF), 0)) { hero_set_state(0x15, 1); @@ -812,10 +814,13 @@ int process_hero_primary_item_input(void) { if ((*(Hero *)((char *)&hero)).anim_changing != 0) { break; } - if (!((*(Hero *)((char *)&hero)).anim_frame >= (float)rec->f10)) { + if (!((*(Hero *)((char *)&hero)).anim_frame >= + (float)wrench_attack_timing_record->f10)) { break; } - window = (truncate_float_to_s32((*(Hero *)((char *)&hero)).anim_frame) - rec->fC) * 2; + window = (truncate_float_to_s32((*(Hero *)((char *)&hero)).anim_frame) - + wrench_attack_timing_record->fC) * + 2; if (window <= 0) { window = 1; } diff --git a/src/overlays/shared/hero/set_hero_animation.c b/src/overlays/shared/hero/set_hero_animation.c index 78014982b8..25b7da41c1 100644 --- a/src/overlays/shared/hero/set_hero_animation.c +++ b/src/overlays/shared/hero/set_hero_animation.c @@ -164,9 +164,9 @@ void blend_hero_slot3_mapped_animation_pair(int id, int frame_index, float blend } typedef struct { - s16 h0; - u8 b2; - u8 b3; + s16 animation_key; + u8 primary_animation_id; + u8 secondary_animation_id; } E_231ff8; extern E_231ff8 D_L00_0017BBF0_00231ff8[] __asm__("D_L00_0017BBF0") @@ -193,8 +193,8 @@ int select_hero_slot3_animation_pair(int input_animation_id, } if (animation_table) { int j = 0; - while (animation_table[j].h0 != -1) { - if (animation_lookup_key == animation_table[j].h0) { + while (animation_table[j].animation_key != -1) { + if (animation_lookup_key == animation_table[j].animation_key) { matching_animation_entry_indices[match_count] = j; match_count++; } @@ -203,8 +203,8 @@ int select_hero_slot3_animation_pair(int input_animation_id, } if (match_count != 0) { int k = matching_animation_entry_indices[random_int_between(0, match_count - 1)]; - *out_primary_animation_id = animation_table[k].b2; - *out_secondary_animation_id = animation_table[k].b3; + *out_primary_animation_id = animation_table[k].primary_animation_id; + *out_secondary_animation_id = animation_table[k].secondary_animation_id; return 1; } else { *out_primary_animation_id = 1; @@ -347,9 +347,9 @@ typedef struct { char pad28[0x28]; unsigned char seq[2]; unsigned char bank[2]; - float f54; + float animation_time; float f58; - float f5C; + float animation_frame_rate; char pad60[8]; int id[2]; } AnimState; @@ -363,8 +363,8 @@ void sync_hero_mapped_moby_animation_frames(void) { if (animation_sync_target == 0) { return; } - animation_sync_target->f5C = hero_animation_sync_state->anim_frame_rate; - animation_sync_target->f54 = hero_animation_sync_state->moby->anim_time; + animation_sync_target->animation_frame_rate = hero_animation_sync_state->anim_frame_rate; + animation_sync_target->animation_time = hero_animation_sync_state->moby->anim_time; animation_sync_target->seq[0] = hero_animation_sync_state->moby->prev_frame; animation_sync_target->seq[1] = hero_animation_sync_state->moby->prev_frame; animation_sync_target->id[0] = @@ -1396,42 +1396,42 @@ typedef struct Hero_234800 { Vec_234800 pos; Vec_234800 v90; char pA0[0x5C]; - float fFC; + float attachment_yaw_delta; char p100[0x50]; - Vec_234800 v150; + Vec_234800 position_anchor_inhibit; char p160[0x24]; - float f184; + float rotation_anchor_inhibit; char p188[0x6E]; - short h1F6; + short path_clearance_position_anchor_inhibit; char p1F8[0x104]; void *p2FC; char p300[0xE]; - short h30E; - Vec_234800 v310; - Vec_234800 v320; - Vec_234800 v330; + short attachment_residual_decay_scale; + Vec_234800 primary_attachment_local_position; + Vec_234800 attachment_local_rotation; + Vec_234800 secondary_attachment_local_position; char p340[0x10]; - Vec_234800 v350; - void *p360; - int i364; + Vec_234800 saved_attachment_displacement; + void *attachment_reference_object; + int attachment_anchor_flags; char p368[0x168]; - Vec_234800 v4D0; + Vec_234800 ledge_grab_position; char p4E0[0x4]; - float f4E4; + float ledge_attachment_heading; char p4E8[0x10]; void *p4F8; char p4FC[0x1B84]; - int i2080; + int hero_moby; int i2084; char p2088[0x4]; int i208C; char p2090[0x15]; - unsigned char b20A5; + unsigned char probe_yaw_override_enabled; } Hero_234800; typedef struct { char p0[0x3C]; - int i3C; + int attachment_behavior_flags; } Plat; extern char hero_233f80[] __asm__("D_0013F350"); @@ -1467,142 +1467,159 @@ void update_hero_attachment(void) { mode = HERO_ATTACHMENT_MODE_INACTIVE; amt = 0.0f; saved_hero_yaw = ((Hero_234800 *)hero_233f80)->v90.z; - if (((Hero_234800 *)hero_233f80)->h30E == 0) { + if (((Hero_234800 *)hero_233f80)->attachment_residual_decay_scale == 0) { if (((Hero_234800 *)hero_233f80)->p2FC != 0) { mode = HERO_ATTACHMENT_MODE_PROBE; - if (((Hero_234800 *)hero_233f80)->p360 != ((Hero_234800 *)hero_233f80)->p2FC) { - ((Hero_234800 *)hero_233f80)->i364 &= ~1; + if (((Hero_234800 *)hero_233f80)->attachment_reference_object != + ((Hero_234800 *)hero_233f80)->p2FC) { + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; } - ((Hero_234800 *)hero_233f80)->p360 = ((Hero_234800 *)hero_233f80)->p2FC; + ((Hero_234800 *)hero_233f80)->attachment_reference_object = + ((Hero_234800 *)hero_233f80)->p2FC; } else { - ((Hero_234800 *)hero_233f80)->p360 = 0; - ((Hero_234800 *)hero_233f80)->i364 &= ~1; - ((Hero_234800 *)hero_233f80)->i364 &= ~2; + ((Hero_234800 *)hero_233f80)->attachment_reference_object = 0; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~2; } } else if (((Hero_234800 *)hero_233f80)->i2084 == 0x1C && ((Hero_234800 *)hero_233f80)->p4F8 != 0) { - ((Hero_234800 *)hero_233f80)->p360 = ((Hero_234800 *)hero_233f80)->p4F8; + ((Hero_234800 *)hero_233f80)->attachment_reference_object = + ((Hero_234800 *)hero_233f80)->p4F8; mode = HERO_ATTACHMENT_MODE_PROBE; } else if (((Hero_234800 *)hero_233f80)->i208C == 3 && ((Hero_234800 *)hero_233f80)->p4F8 != 0) { - ((Hero_234800 *)hero_233f80)->p360 = ((Hero_234800 *)hero_233f80)->p4F8; + ((Hero_234800 *)hero_233f80)->attachment_reference_object = + ((Hero_234800 *)hero_233f80)->p4F8; mode = HERO_ATTACHMENT_MODE_PROBE; - } else if (((Hero_234800 *)hero_233f80)->p360 != 0) { + } else if (((Hero_234800 *)hero_233f80)->attachment_reference_object != 0) { mode = HERO_ATTACHMENT_MODE_PROBE; - convert_integer_to_float(scale_game_frames(120) - ((Hero_234800 *)hero_233f80)->h30E); + convert_integer_to_float(scale_game_frames(120) - + ((Hero_234800 *)hero_233f80)->attachment_residual_decay_scale); scale_game_frames_v_233f80(120); - amt = ((Hero_234800 *)hero_233f80)->h30E; + amt = ((Hero_234800 *)hero_233f80)->attachment_residual_decay_scale; } else { - ((Hero_234800 *)hero_233f80)->p360 = 0; - ((Hero_234800 *)hero_233f80)->i364 &= ~1; - ((Hero_234800 *)hero_233f80)->i364 &= ~2; + ((Hero_234800 *)hero_233f80)->attachment_reference_object = 0; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~2; } if (!mode) { return; } - plat = f_L00_002603d0(((Hero_234800 *)hero_233f80)->p360); + plat = f_L00_002603d0(((Hero_234800 *)hero_233f80)->attachment_reference_object); if (plat == 0) { return; } if (((((Hero_234800 *)hero_233f80)->i208C == 0 || ((Hero_234800 *)hero_233f80)->i208C == 12) && - fast_vec_length(&((Hero_234800 *)hero_233f80)->v150) == 0.0f && - ((Hero_234800 *)hero_233f80)->h30E == 0 && ((Hero_234800 *)hero_233f80)->h1F6 == 0) || + fast_vec_length(&((Hero_234800 *)hero_233f80)->position_anchor_inhibit) == 0.0f && + ((Hero_234800 *)hero_233f80)->attachment_residual_decay_scale == 0 && + ((Hero_234800 *)hero_233f80)->path_clearance_position_anchor_inhibit == 0) || (unsigned int)(((Hero_234800 *)hero_233f80)->i2084 - 0x18) < 2) { - if ((((Hero_234800 *)hero_233f80)->i364 ^ 1) & 1) { + if ((((Hero_234800 *)hero_233f80)->attachment_anchor_flags ^ 1) & 1) { if ((unsigned int)(((Hero_234800 *)hero_233f80)->i2084 - 0x18) < 2) { - qcopy(&attachment_motion_scratch, &((Hero_234800 *)hero_233f80)->v4D0); + qcopy(&attachment_motion_scratch, + &((Hero_234800 *)hero_233f80)->ledge_grab_position); attachment_motion_scratch.x += - fast_cos(fast_add_rotations(((Hero_234800 *)hero_233f80)->f4E4, 3.1415925f)) * + fast_cos(fast_add_rotations( + ((Hero_234800 *)hero_233f80)->ledge_attachment_heading, 3.1415925f)) * 0.45f; attachment_motion_scratch.y += - fast_sin(fast_add_rotations(((Hero_234800 *)hero_233f80)->f4E4, 3.1415925f)) * + fast_sin(fast_add_rotations( + ((Hero_234800 *)hero_233f80)->ledge_attachment_heading, 3.1415925f)) * 0.45f; attachment_motion_scratch.z -= -1.43f; - probe_ground_height_cf(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->v4D0, + probe_ground_height_cf(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->ledge_grab_position, &((Hero_234800 *)hero_233f80)->v90, &attachment_position_motion_scratch, &probe_transform_scratch); - probe_ground_height_cf(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, + probe_ground_height_cf(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, &attachment_motion_scratch, &((Hero_234800 *)hero_233f80)->v90, &attachment_motion_scratch, &probe_transform_scratch); - convert_pose_to_reference_local(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->v4D0, - &((Hero_234800 *)hero_233f80)->v90, - &((Hero_234800 *)hero_233f80)->v310, - &probe_transform_scratch); - convert_pose_to_reference_local(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &attachment_motion_scratch, - &((Hero_234800 *)hero_233f80)->v90, - &((Hero_234800 *)hero_233f80)->v330, - &probe_transform_scratch); - } else if (plat->i3C & 4) { - convert_pose_to_reference_local(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->pos, - &((Hero_234800 *)hero_233f80)->v90, - &((Hero_234800 *)hero_233f80)->v310, - &attachment_motion_scratch); + convert_pose_to_reference_local( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->ledge_grab_position, + &((Hero_234800 *)hero_233f80)->v90, + &((Hero_234800 *)hero_233f80)->primary_attachment_local_position, + &probe_transform_scratch); + convert_pose_to_reference_local( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &attachment_motion_scratch, + &((Hero_234800 *)hero_233f80)->v90, + &((Hero_234800 *)hero_233f80)->secondary_attachment_local_position, + &probe_transform_scratch); + } else if (plat->attachment_behavior_flags & 4) { + convert_pose_to_reference_local( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->pos, + &((Hero_234800 *)hero_233f80)->v90, + &((Hero_234800 *)hero_233f80)->primary_attachment_local_position, + &attachment_motion_scratch); } else { - probe_ground_height_cf(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, + probe_ground_height_cf(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, &((Hero_234800 *)hero_233f80)->pos, &((Hero_234800 *)hero_233f80)->v90, &attachment_position_motion_scratch, &probe_transform_scratch); - convert_pose_to_reference_local(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &attachment_position_motion_scratch, - &probe_transform_scratch, - &((Hero_234800 *)hero_233f80)->v310, - &attachment_motion_scratch); + convert_pose_to_reference_local( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &attachment_position_motion_scratch, + &probe_transform_scratch, + &((Hero_234800 *)hero_233f80)->primary_attachment_local_position, + &attachment_motion_scratch); } - ((Hero_234800 *)hero_233f80)->i364 |= 1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags |= 1; } } else { - ((Hero_234800 *)hero_233f80)->i364 &= ~1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; } if ((((Hero_234800 *)hero_233f80)->i208C == 0 || ((Hero_234800 *)hero_233f80)->i208C == 12) && - ((Hero_234800 *)hero_233f80)->f184 == 0.0f && ((Hero_234800 *)hero_233f80)->h30E == 0) { - if (!(((Hero_234800 *)hero_233f80)->i364 & 2)) { - convert_pose_to_reference_local(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->pos, - &((Hero_234800 *)hero_233f80)->v90, - &attachment_motion_scratch, - &((Hero_234800 *)hero_233f80)->v320); - ((Hero_234800 *)hero_233f80)->i364 |= 2; + ((Hero_234800 *)hero_233f80)->rotation_anchor_inhibit == 0.0f && + ((Hero_234800 *)hero_233f80)->attachment_residual_decay_scale == 0) { + if (!(((Hero_234800 *)hero_233f80)->attachment_anchor_flags & 2)) { + convert_pose_to_reference_local( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->pos, + &((Hero_234800 *)hero_233f80)->v90, + &attachment_motion_scratch, + &((Hero_234800 *)hero_233f80)->attachment_local_rotation); + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags |= 2; } } else { - ((Hero_234800 *)hero_233f80)->i364 &= ~2; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~2; } - if (((Hero_234800 *)hero_233f80)->i364 & 3) { + if (((Hero_234800 *)hero_233f80)->attachment_anchor_flags & 3) { mode = HERO_ATTACHMENT_MODE_ANCHORED; } clear_u64_value(&attachment_motion_scratch); clear_u64_value(&attachment_position_motion_scratch); if (amt != 0.0f) { - sB4 = vector_length_xy(&((Hero_234800 *)hero_233f80)->v350); - sB0 = ((Hero_234800 *)hero_233f80)->v350.z; - if (!(plat->i3C & 2)) { + sB4 = vector_length_xy(&((Hero_234800 *)hero_233f80)->saved_attachment_displacement); + sB0 = ((Hero_234800 *)hero_233f80)->saved_attachment_displacement.z; + if (!(plat->attachment_behavior_flags & 2)) { approach_value(&sB0, 0.0f, frame_time_sq_macro * 25.0f * amt); approach_value(&sB4, 0.0f, (frame_time_sq_macro + frame_time_sq_macro) * amt); - set_vector_length_xy( - &attachment_motion_scratch, &((Hero_234800 *)hero_233f80)->v350, sB4); + set_vector_length_xy(&attachment_motion_scratch, + &((Hero_234800 *)hero_233f80)->saved_attachment_displacement, + sB4); attachment_motion_scratch.z = sB0; } else { - qcopy(&attachment_motion_scratch, &((Hero_234800 *)hero_233f80)->v350); + qcopy(&attachment_motion_scratch, + &((Hero_234800 *)hero_233f80)->saved_attachment_displacement); } qcopy(&attachment_position_motion_scratch, &attachment_motion_scratch); } else if (mode == HERO_ATTACHMENT_MODE_PROBE) { - probe_ground_height_cf(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, + probe_ground_height_cf(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, &((Hero_234800 *)hero_233f80)->pos, &((Hero_234800 *)hero_233f80)->v90, &probed_position, @@ -1612,45 +1629,46 @@ void update_hero_attachment(void) { &attachment_motion_scratch, &probed_position, &((Hero_234800 *)hero_233f80)->pos); qcopy((Vec_234800 *)(hero_233f80 + 0x350), &attachment_motion_scratch); } else if (mode == HERO_ATTACHMENT_MODE_ANCHORED) { - probe_ground_height_cf(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, + probe_ground_height_cf(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, &((Hero_234800 *)hero_233f80)->pos, &((Hero_234800 *)hero_233f80)->v90, &probe_transform_scratch, &anchored_probe_rotation); - transform_attachment_pose(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->v310, - &((Hero_234800 *)hero_233f80)->v320, + transform_attachment_pose(((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->primary_attachment_local_position, + &((Hero_234800 *)hero_233f80)->attachment_local_rotation, &primary_attachment_position, &primary_attachment_rotation); - transform_attachment_pose(((Hero_234800 *)hero_233f80)->i2080, - ((Hero_234800 *)hero_233f80)->p360, - &((Hero_234800 *)hero_233f80)->v330, - &((Hero_234800 *)hero_233f80)->v320, - &secondary_attachment_position, - &v90); + transform_attachment_pose( + ((Hero_234800 *)hero_233f80)->hero_moby, + ((Hero_234800 *)hero_233f80)->attachment_reference_object, + &((Hero_234800 *)hero_233f80)->secondary_attachment_local_position, + &((Hero_234800 *)hero_233f80)->attachment_local_rotation, + &secondary_attachment_position, + &v90); if ((((Hero_234800 *)hero_233f80)->i2084 == 1 || ((Hero_234800 *)hero_233f80)->i2084 == 0x1E) && - ((Hero_234800 *)hero_233f80)->b20A5 != 0) { + ((Hero_234800 *)hero_233f80)->probe_yaw_override_enabled != 0) { ((Hero_234800 *)hero_233f80)->v90.z = anchored_probe_rotation.z; - } else if (((Hero_234800 *)hero_233f80)->i364 & 2) { + } else if (((Hero_234800 *)hero_233f80)->attachment_anchor_flags & 2) { ((Hero_234800 *)hero_233f80)->v90.z = primary_attachment_rotation.z; } else { ((Hero_234800 *)hero_233f80)->v90.z = anchored_probe_rotation.z; } - if (((Hero_234800 *)hero_233f80)->i364 & 1) { + if (((Hero_234800 *)hero_233f80)->attachment_anchor_flags & 1) { if ((unsigned int)(((Hero_234800 *)hero_233f80)->i2084 - 0x18) < 2) { - vA0.x = fast_cos(((Hero_234800 *)hero_233f80)->f4E4) * 0.45f; - vA0.y = fast_sin(((Hero_234800 *)hero_233f80)->f4E4) * 0.45f; + vA0.x = fast_cos(((Hero_234800 *)hero_233f80)->ledge_attachment_heading) * 0.45f; + vA0.y = fast_sin(((Hero_234800 *)hero_233f80)->ledge_attachment_heading) * 0.45f; vA0.z = 0.0f; fast_vec_add(&vA0, &vA0, &secondary_attachment_position); vA0.z += -1.43f; fast_vec_sub(&attachment_motion_scratch, &probe_transform_scratch, &((Hero_234800 *)hero_233f80)->pos); - qcopy(&((Hero_234800 *)hero_233f80)->v4D0, &vA0); - ((Hero_234800 *)hero_233f80)->f4E4 = + qcopy(&((Hero_234800 *)hero_233f80)->ledge_grab_position, &vA0); + ((Hero_234800 *)hero_233f80)->ledge_attachment_heading = fast_arc_tan(primary_attachment_position.x - secondary_attachment_position.x, primary_attachment_position.y - secondary_attachment_position.y); } else { @@ -1665,13 +1683,13 @@ void update_hero_attachment(void) { qcopy(&((Hero_234800 *)hero_233f80)->pos, &primary_attachment_position); } else if (2.0f < attachment_distance) { clear_u64_value(&attachment_motion_scratch); - ((Hero_234800 *)hero_233f80)->i364 &= ~2; - ((Hero_234800 *)hero_233f80)->i364 &= ~1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~2; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; } fast_vec_add(hero_233f80 + 0x4D0, hero_233f80 + 0x4D0, &attachment_motion_scratch); fast_vec_sub(&vA0, &attachment_motion_scratch, hero_233f80 + 0x140); if (0.1f < fast_vec_length(&vA0)) { - ((Hero_234800 *)hero_233f80)->i364 &= ~1; + ((Hero_234800 *)hero_233f80)->attachment_anchor_flags &= ~1; } } } else { @@ -1683,7 +1701,7 @@ void update_hero_attachment(void) { qcopy((Vec_234800 *)(hero_233f80 + 0x350), &attachment_motion_scratch); } fast_vec_add(hero_233f80 + 0xF0, hero_233f80 + 0xF0, &attachment_motion_scratch); - ((Hero_234800 *)hero_233f80)->fFC = + ((Hero_234800 *)hero_233f80)->attachment_yaw_delta = fast_subtract_rotations(((Hero_234800 *)hero_233f80)->v90.z, saved_hero_yaw); } @@ -1805,10 +1823,10 @@ extern f32 D_0015EE14 __asm__("D_0015EE14"); typedef struct { u8 b0; - u8 b1; + u8 manipulator_attached; u8 p[0x1E]; f32 f20; - f32 f24; + f32 scale_component; f32 f28; } A_00234b38; @@ -1833,10 +1851,10 @@ void apply_hero_moby_scale(void *scale_owner_moby) { if (D_L00_0015F5C4_00234b38[0] == 6 && 1.33f < scale_factor) scale_factor = 1.33f; scale_state = &D_L00_0017C340_00234b38; - if (scale_state->b1 == 0) { + if (scale_state->manipulator_attached == 0) { attach_manipulator(scale_owner_moby, 0x18, scale_state); scale_state->f20 = scale_factor; - scale_state->f24 = scale_factor; + scale_state->scale_component = scale_factor; scale_state->f28 = scale_factor; } level_index = current_level_index; diff --git a/src/overlays/shared/hero/update_hero_and_vehicle_mode_effects.c b/src/overlays/shared/hero/update_hero_and_vehicle_mode_effects.c index f143527cae..df07a6f1e8 100644 --- a/src/overlays/shared/hero/update_hero_and_vehicle_mode_effects.c +++ b/src/overlays/shared/hero/update_hero_and_vehicle_mode_effects.c @@ -333,19 +333,19 @@ typedef struct { typedef struct { u8 p0[0x98]; - f32 f98; + f32 probe_heading_angle; u8 p1[0xE0 - 0x9C]; - V_20a328 vE0; + V_20a328 hero_velocity; u8 p2[0x240 - 0xF0]; s32 i240; u8 p3[0x308 - 0x244]; s16 h308; u8 p4[0x2080 - 0x30A]; - void *p2080; + void *current_hero_moby; u8 p5[0x208C - 0x2084]; s32 i208C; u8 p6[0x20A4 - 0x2090]; - u8 b20A4; + u8 hero_vehicle_mode; } P_20a328; typedef struct { @@ -379,14 +379,14 @@ void adjust_hero_planar_velocity_from_probes(int force) { if (P.h308 != 0) return; - if (gravity_length_xy(&P.vE0) < frame_time * 0.1f) + if (gravity_length_xy(&P.hero_velocity) < frame_time * 0.1f) return; position_z_offset = 0.3700000047683716f; k = 0.5f; if ((u32)(P.i208C - 0x11) < 2) { position_z_offset = 0.0f; k = 0.7f; - } else if (P.b20A4 == 2) { + } else if (P.hero_vehicle_mode == HERO_VEHICLE_MODE_GIANT_CLANK) { position_z_offset = 1.5f; k = 5.0f; } @@ -398,11 +398,11 @@ void adjust_hero_planar_velocity_from_probes(int force) { if (force || vector_length_xy(hero_position + 0x60) < 0.01f) { g = (P_20a328 *)(hero_position - 0x80); secondary_offset_scale = 1.4f; - primary_endpoint.f[0] = fast_cos(g->f98) * k; - primary_endpoint.f[1] = fast_sin(g->f98) * k; + primary_endpoint.f[0] = fast_cos(g->probe_heading_angle) * k; + primary_endpoint.f[1] = fast_sin(g->probe_heading_angle) * k; *(s32 *)&primary_endpoint.f[2] = 0; - secondary_endpoint.f[0] = fast_cos(g->f98) * k * secondary_offset_scale; - secondary_endpoint.f[1] = fast_sin(g->f98) * k * secondary_offset_scale; + secondary_endpoint.f[0] = fast_cos(g->probe_heading_angle) * k * secondary_offset_scale; + secondary_endpoint.f[1] = fast_sin(g->probe_heading_angle) * k * secondary_offset_scale; *(s32 *)&secondary_endpoint.f[2] = 0; } else { qcopy(&primary_endpoint, hero_position + 0x60); @@ -415,19 +415,20 @@ void adjust_hero_planar_velocity_from_probes(int force) { FUN_001f9a10_20a328(&primary_endpoint, &primary_endpoint, &offset_position); FUN_001f9a10_20a328(&secondary_endpoint, &secondary_endpoint, &b); r = -1; - if (collision_line(&b, &secondary_endpoint, 4, P.p2080, 0) && D_L15_0017445C > 0) + if (collision_line(&b, &secondary_endpoint, 4, P.current_hero_moby, 0) && D_L15_0017445C > 0) r = collision_hit_material(); primary_probe_result_angle = 0.0f; - if (collision_line(&offset_position, &primary_endpoint, 4, P.p2080, 0) && X.i1C > 0) + if (collision_line(&offset_position, &primary_endpoint, 4, P.current_hero_moby, 0) && X.i1C > 0) primary_probe_result_angle = fast_arc_tan(X.v40.f[2], vector_length_xy(&X.v40)); if (0.8726646304130554f <= primary_probe_result_angle || r == 8 || r == 12) { P.i240 = X.i18; *(s32 *)&X.v40.f[2] = 0; sceVu0Normalize(&X.v40, &X.v40); - negative_xy_dot_product = -P.vE0.f[0] * X.v40.f[0] - P.vE0.f[1] * X.v40.f[1]; + negative_xy_dot_product = + -P.hero_velocity.f[0] * X.v40.f[0] - P.hero_velocity.f[1] * X.v40.f[1]; if (0.0f < negative_xy_dot_product) { fast_vec_scale(&X.v40, &X.v40, negative_xy_dot_product); - FUN_001f9a10_20a328(&P.vE0, &P.vE0, &X.v40); + FUN_001f9a10_20a328(&P.hero_velocity, &P.hero_velocity, &X.v40); } } } diff --git a/src/overlays/shared/hero/update_hero_vehicle_attachments_and_effects.c b/src/overlays/shared/hero/update_hero_vehicle_attachments_and_effects.c index bb1f61f0c8..9a35d79658 100644 --- a/src/overlays/shared/hero/update_hero_vehicle_attachments_and_effects.c +++ b/src/overlays/shared/hero/update_hero_vehicle_attachments_and_effects.c @@ -417,24 +417,24 @@ typedef struct { typedef struct { u8 p0[0x98]; - f32 f98; + f32 probe_heading_angle; u8 p1[0xE0 - 0x9C]; - V_2291d0 vE0; + V_2291d0 hero_velocity; u8 p2[0x240 - 0xF0]; - s32 i240; + s32 velocity_probe_hit_moby; u8 p3[0x308 - 0x244]; s16 h308; u8 p4[0x2080 - 0x30A]; - void *p2080; + void *collision_probe_moby; u8 p5[0x208C - 0x2084]; s32 i208C; u8 p6[0x20A4 - 0x2090]; - u8 b20A4; + u8 hero_vehicle_mode; } P_2291d0; typedef struct { u8 p0[0x18]; - s32 i18; + s32 probe_collision_hit_moby; s32 i1C; u8 p1[0x40 - 0x20]; V_2291d0 v40; @@ -460,14 +460,14 @@ void adjust_hero_velocity_from_collision_probes(int force) { if (P.h308 != 0) return; - if (gravity_length_xy(&P.vE0) < frame_time * 0.1f) + if (gravity_length_xy(&P.hero_velocity) < frame_time * 0.1f) return; primary_origin_z_offset = 0.3700000047683716f; k = 0.5f; if ((u32)(P.i208C - 0x11) < 2) { primary_origin_z_offset = 0.0f; k = 0.7f; - } else if (P.b20A4 == 1) { + } else if (P.hero_vehicle_mode == HERO_VEHICLE_MODE_CLANK) { primary_origin_z_offset = 0.35f; k = 0.27000001072883606f; } @@ -479,11 +479,13 @@ void adjust_hero_velocity_from_collision_probes(int force) { if (force || vector_length_xy(vector_origin_base + 0x60) < 0.01f) { g = (P_2291d0 *)(vector_origin_base - 0x80); secondary_vector_scale = 1.4f; - primary_vector_endpoint.f[0] = fast_cos(g->f98) * k; - primary_vector_endpoint.f[1] = fast_sin(g->f98) * k; + primary_vector_endpoint.f[0] = fast_cos(g->probe_heading_angle) * k; + primary_vector_endpoint.f[1] = fast_sin(g->probe_heading_angle) * k; *(s32 *)&primary_vector_endpoint.f[2] = 0; - secondary_vector_endpoint.f[0] = fast_cos(g->f98) * k * secondary_vector_scale; - secondary_vector_endpoint.f[1] = fast_sin(g->f98) * k * secondary_vector_scale; + secondary_vector_endpoint.f[0] = + fast_cos(g->probe_heading_angle) * k * secondary_vector_scale; + secondary_vector_endpoint.f[1] = + fast_sin(g->probe_heading_angle) * k * secondary_vector_scale; *(s32 *)&secondary_vector_endpoint.f[2] = 0; } else { qcopy(&primary_vector_endpoint, vector_origin_base + 0x60); @@ -497,20 +499,23 @@ void adjust_hero_velocity_from_collision_probes(int force) { fast_vec_add(&primary_vector_endpoint, &primary_vector_endpoint, &primary_vector_origin); fast_vec_add(&secondary_vector_endpoint, &secondary_vector_endpoint, &b); r = -1; - if (collision_line(&b, &secondary_vector_endpoint, 4, P.p2080, 0) && D_L06_001745DC > 0) + if (collision_line(&b, &secondary_vector_endpoint, 4, P.collision_probe_moby, 0) && + D_L06_001745DC > 0) r = collision_hit_material(); primary_probe_result_angle = 0.0f; - if (collision_line(&primary_vector_origin, &primary_vector_endpoint, 4, P.p2080, 0) && + if (collision_line( + &primary_vector_origin, &primary_vector_endpoint, 4, P.collision_probe_moby, 0) && X.i1C > 0) primary_probe_result_angle = fast_arc_tan(X.v40.f[2], vector_length_xy(&X.v40)); if (0.8726646304130554f <= primary_probe_result_angle || r == 8 || r == 12) { - P.i240 = X.i18; + P.velocity_probe_hit_moby = X.probe_collision_hit_moby; *(s32 *)&X.v40.f[2] = 0; sceVu0Normalize(&X.v40, &X.v40); - negative_horizontal_dot = -P.vE0.f[0] * X.v40.f[0] - P.vE0.f[1] * X.v40.f[1]; + negative_horizontal_dot = + -P.hero_velocity.f[0] * X.v40.f[0] - P.hero_velocity.f[1] * X.v40.f[1]; if (0.0f < negative_horizontal_dot) { fast_vec_scale(&X.v40, &X.v40, negative_horizontal_dot); - fast_vec_add(&P.vE0, &P.vE0, &X.v40); + fast_vec_add(&P.hero_velocity, &P.hero_velocity, &X.v40); } } } diff --git a/src/overlays/shared/math/interpolation/spring_turn.c b/src/overlays/shared/math/interpolation/spring_turn.c index 69ee2c836d..678885a76a 100644 --- a/src/overlays/shared/math/interpolation/spring_turn.c +++ b/src/overlays/shared/math/interpolation/spring_turn.c @@ -468,14 +468,14 @@ extern s32 FUN_L00_002583f0_c(void *, void *, s32, f32, f32) __asm__("FUN_L00_00 extern s32 FUN_L00_00258ad0_c(void *, void *, f32, s32, f32, s32) __asm__("FUN_L00_00258ad0"); extern f32 frame_time_sq_gp __asm__("D_0015ED70") __attribute__((sda)); -s32 FUN_L00_00258b50(Obj *m, Ctl *c, void *v, Vec4 *out, f32 f); +s32 move_moby_with_ground_and_collision_checks(Obj *m, Ctl *c, void *v, Vec4 *out, f32 f) __asm__("FUN_L00_00258b50"); -s32 FUN_L00_00258b50(Obj *moby, - Ctl *movement_control, - void *target_position, - Vec4 *movement_displacement_vector_output, +s32 move_moby_with_ground_and_collision_checks(Obj *moby, + Ctl *movement_control, + void *target_position, + Vec4 *movement_displacement_vector_output, - f32 f) { + f32 f) { Vec4 save; Vec4 displacement; Vec4 probe_or_direction; diff --git a/src/overlays/shared/mobys/camera_object.c b/src/overlays/shared/mobys/camera_object.c index 7bc072a24d..715de57e6d 100644 --- a/src/overlays/shared/mobys/camera_object.c +++ b/src/overlays/shared/mobys/camera_object.c @@ -12,7 +12,7 @@ typedef struct { char p0[0x98]; - float f98; + float hero_yaw; char p1[0x164 - 0x9C]; float f164; char p2[0x2080 - 0x168]; @@ -69,7 +69,7 @@ void camera_object_update(char *camera_object) { if (absolute_float(dot_product_or_threshold) < 2.5f) { dot_product_or_threshold = 0.1f; if (fast_vec_length(difference_vector) < dot_product_or_threshold || - fast_difference_between_rotations(P->f98, C->yaw) < 2.3561945f || + fast_difference_between_rotations(P->hero_yaw, C->yaw) < 2.3561945f || P->f164 < frame_time * dot_product_or_threshold) { *(float *)(camera_object + 0x18) = 15.0f; *(float *)(camera_object + 0x14) = 15.0f; diff --git a/src/overlays/shared/mobys/find_moby_hit.c b/src/overlays/shared/mobys/find_moby_hit.c index 5cbaa33e23..23967bc20e 100644 --- a/src/overlays/shared/mobys/find_moby_hit.c +++ b/src/overlays/shared/mobys/find_moby_hit.c @@ -789,23 +789,23 @@ int generate_random_points_from_shape_entries( typedef struct { unsigned char pad0[8]; - float f8; + float descent_transition_height; unsigned char padC[4]; float f10; float f14; float f18; float f1C; unsigned char pad20[4]; - float f24; + float arc_entry_record_value_threshold; float f28; - unsigned char b2C; - unsigned char b2D; + unsigned char arc_entry_animation; + unsigned char arc_motion_animation; unsigned char b2E; unsigned char state; float f30; float f34; - float f38; - float f3C; + float turn_damping_factor; + float turn_step_limit; } S_25b440; typedef struct { @@ -843,14 +843,15 @@ int update_arc_motion(O_25b440 *moving_object, S_25b440 *arc_motion_state) { switch (arc_motion_state->state) { case CHECK_ARC_ENTRY_GATES: - if (moving_object->b52 != arc_motion_state->b2C) { + if (moving_object->b52 != arc_motion_state->arc_entry_animation) { break; } - if (compute_interpolated_record_value(moving_object) <= arc_motion_state->f24) { + if (compute_interpolated_record_value(moving_object) <= + arc_motion_state->arc_entry_record_value_threshold) { break; } if (moving_object->b70 & 2) { - blend_moby_animation(moving_object, arc_motion_state->b2D, 0, 10); + blend_moby_animation(moving_object, arc_motion_state->arc_motion_animation, 0, 10); arc_motion_state->state = INTEGRATE_ARC_MOTION; } case INTEGRATE_ARC_MOTION: @@ -858,8 +859,8 @@ int update_arc_motion(O_25b440 *moving_object, S_25b440 *arc_motion_state) { &arc_motion_state->f30, arc_motion_state->f18, arc_motion_state->f34, - arc_motion_state->f38, - arc_motion_state->f3C); + arc_motion_state->turn_damping_factor, + arc_motion_state->turn_step_limit); motion_displacement[0] = FUN_001f9dc8_25b440(arc_motion_state->f18) * arc_motion_state->f14; motion_displacement[1] = FUN_001f9de0_25b440(arc_motion_state->f18) * arc_motion_state->f14; motion_displacement[2] = arc_motion_state->f10; @@ -868,7 +869,7 @@ int update_arc_motion(O_25b440 *moving_object, S_25b440 *arc_motion_state) { if (arc_motion_state->f10 < 0.0f) { prediction_time = scale_time(arc_motion_state->f28 + arc_motion_state->f28 + 10.0f); if (moving_object->z <= - arc_motion_state->f8 - + arc_motion_state->descent_transition_height - (arc_motion_state->f10 * prediction_time - arc_motion_state->f1C * 0.5f * prediction_time * prediction_time)) { blend_moby_animation(moving_object, arc_motion_state->b2E, 0, 10); diff --git a/src/overlays/shared/mobys/initialize_moby_grounding.c b/src/overlays/shared/mobys/initialize_moby_grounding.c index ab83a81a17..0d2d5bd4cd 100644 --- a/src/overlays/shared/mobys/initialize_moby_grounding.c +++ b/src/overlays/shared/mobys/initialize_moby_grounding.c @@ -9,7 +9,7 @@ void initialize_moby_grounding(char *moby) __asm__("FUN_L02_0025c758"); void initialize_moby_grounding(char *moby) { float delta = 0.2f; - float val = MOBY(moby)->pos.z; - *(float *)(moby + 0x84) = val - delta; - *(float *)(moby + 0x88) = val + delta; + float moby_z = MOBY(moby)->pos.z; + *(float *)(moby + 0x84) = moby_z - delta; + *(float *)(moby + 0x88) = moby_z + delta; } diff --git a/src/overlays/shared/mobys/select_auto_aim_target_moby.c b/src/overlays/shared/mobys/select_auto_aim_target_moby.c index 1bb79b2e6f..034cf13fbd 100644 --- a/src/overlays/shared/mobys/select_auto_aim_target_moby.c +++ b/src/overlays/shared/mobys/select_auto_aim_target_moby.c @@ -241,7 +241,7 @@ typedef struct { s32 w24; u8 pad28[2]; u8 b2A; - u8 b2B; + u8 initial_frame_count; } EffectTail; typedef struct { @@ -298,7 +298,7 @@ void cutscene_set_camera_target(u8 *moby) { effect->hA = scale_game_frames(6); tail->w24 = w24; tail->b2A = b2A; - tail->b2B = effect->hA; + tail->initial_frame_count = effect->hA; } count--; } while (count >= 0); @@ -328,7 +328,7 @@ void cutscene_set_camera_target(u8 *moby) { effect->b8 = random_integer_below(0xff); tail->w24 = w24; tail->b2A = b2A; - tail->b2B = effect->hA; + tail->initial_frame_count = effect->hA; } count--; } while (count >= 0); diff --git a/src/overlays/shared/mobys/step_moby_motion.c b/src/overlays/shared/mobys/step_moby_motion.c index 8354e86250..bcf97d45c8 100644 --- a/src/overlays/shared/mobys/step_moby_motion.c +++ b/src/overlays/shared/mobys/step_moby_motion.c @@ -132,19 +132,19 @@ void spawn_particles_at_shape_points(void *source_object, typedef struct { f32 f0; f32 f4; - f32 f8; + f32 vertical_motion_step; f32 fC; u8 p10[8]; f32 f18; f32 f1C; u8 p20[4]; - u32 w24; + u32 motion_flags; u8 p28[4]; s16 h2C; u8 p2E[0xE]; u8 b3C; u8 p3D; - s16 h3E; + s16 motion_phase; f32 f40; int w44; } B_25c558; @@ -161,19 +161,19 @@ void trooper_start_knockback(u8 *moby, float *moby_vars_record; knockback_state->f0 = fast_cos(knockback_angle) * knockback_state->f18; knockback_state->f4 = fast_sin(knockback_angle) * knockback_state->f18; - knockback_state->f8 = knockback_state->f1C; + knockback_state->vertical_motion_step = knockback_state->f1C; knockback_state->fC = 1.0f; knockback_state->f40 = fast_add_rotations(knockback_angle, 3.1415927f); knockback_state->w44 = 0; knockback_state->h2C = scale_game_frames(300); - knockback_state->h3E = 0; + knockback_state->motion_phase = 0; knockback_state->b3C = 1; moby_vars_record = get_moby_target_info(moby); if (moby_vars_record && *moby_vars_record == 0.0f) { - knockback_state->w24 |= 0x20; + knockback_state->motion_flags |= 0x20; MOBY(moby)->collision = 0; } - if (knockback_state->w24 & 2) + if (knockback_state->motion_flags & 2) blend_moby_animation_ex( moby, animation_index, animation_frame_index, animation_timing_divisor, 1); else diff --git a/src/overlays/shared/mobys/test_path_segment_strict_crossing.c b/src/overlays/shared/mobys/test_path_segment_strict_crossing.c index 8c183fd2a2..8d6d826f2b 100644 --- a/src/overlays/shared/mobys/test_path_segment_strict_crossing.c +++ b/src/overlays/shared/mobys/test_path_segment_strict_crossing.c @@ -108,13 +108,13 @@ typedef struct { OvlVec4_261b48 points[1]; } SegmentPath_261d78_261b48; -int FUN_L00_00261b48(int idx, void *a, void *b, void *c); +int path_8808(int idx, void *a, void *b, void *c) __asm__("FUN_L00_00261b48"); -int FUN_L00_00261b48(int segment_path_index, - void *segment_start, - void *segment_end, +int path_8808(int segment_path_index, + void *segment_start, + void *segment_end, - void *adjusted_endpoint) { + void *adjusted_endpoint) { float v[4], perpendicular_xy_axis[4], z[4], previous_path_point_in_basis[4], u[4]; float best; float zero; @@ -580,12 +580,16 @@ void update_joint_animation(void *m, unsigned char *p, int c, float fa, float fb void update_joint_animation( void *moby, unsigned char *joint_animation_state, int joint_index, float fa, float fb) { + enum { + JOINT_ANIMATION_PREVIOUS_OWNER_DETACH_STATE_LIMIT = 0x7F + }; unsigned char *previous_moby = *(unsigned char **)(joint_animation_state + 0x78); float uniform_scale; if (!previous_moby) { *(void **)(joint_animation_state + 0x78) = moby; } else if (previous_moby != moby) { - if (joint_animation_state[1] && MOBY(previous_moby)->state < 0x7F) + if (joint_animation_state[1] && + MOBY(previous_moby)->state < JOINT_ANIMATION_PREVIOUS_OWNER_DETACH_STATE_LIMIT) detach_manipulator(previous_moby, joint_animation_state); joint_animation_state[1] = 0; *(void **)(joint_animation_state + 0x78) = moby; diff --git a/src/overlays/shared/mobys/update_all_mobys_profiled.c b/src/overlays/shared/mobys/update_all_mobys_profiled.c index 15f105830d..5135fcee6e 100644 --- a/src/overlays/shared/mobys/update_all_mobys_profiled.c +++ b/src/overlays/shared/mobys/update_all_mobys_profiled.c @@ -32,6 +32,9 @@ extern s32 fptodp(f32) __asm__("FUN_00120478"); void update_all_mobys_profiled(void) __asm__("FUN_L00_002648e0"); void update_all_mobys_profiled(void) { + enum { + MOBY_STATE_UPDATE_MIN = 0 + }; struct Moby *moby; MobyProfile *profile; s32 i; @@ -58,7 +61,7 @@ void update_all_mobys_profiled(void) { moby = suck_moby_list = FUN_L00_00250768(); while (moby != 0) { s32 current_ticks; - if ((s8)moby->state >= 0) { + if ((s8)moby->state >= MOBY_STATE_UPDATE_MIN) { *(volatile u32 *)0x10000000 = 0; if (!(moby->flags & 0x40)) { FUN_L00_00250480(moby); diff --git a/src/overlays/shared/pickups/bolt.c b/src/overlays/shared/pickups/bolt.c index b4ef3aa11e..1295dab330 100644 --- a/src/overlays/shared/pickups/bolt.c +++ b/src/overlays/shared/pickups/bolt.c @@ -63,11 +63,11 @@ typedef struct Bolt { u8 pad21[3]; BoltClass *pclass; /* 0x24 */ u8 pad28[4]; - f32 scale; /* 0x2C */ - u8 unk30; /* 0x30 */ - u8 unk31; /* 0x31 */ - u16 unk32; /* 0x32 */ - u16 flags; /* 0x34 */ + f32 scale; /* 0x2C */ + u8 unk30; /* 0x30 */ + u8 is_visible; /* 0x31 */ + u16 draw_distance; /* 0x32 */ + u16 flags; /* 0x34 */ u8 pad36[0x3D]; u8 unk73; /* 0x73 */ u8 pad74[4]; @@ -117,7 +117,7 @@ typedef struct { u8 pad_5C[0xC]; f32 start_z; /* 0x68 */ s16 unk6C; - s16 unk6E; /* random 0 .. 600 frames */ + s16 glint_delay_frames; /* random 0 .. 600 frames */ } BoltVars_u; extern float D_0015ED6C; @@ -204,10 +204,10 @@ void bolt_update(Bolt *bolt_moby) { u8 i; if (D_L00_0015F5C4 == 2) { - bolt_moby->unk31 = 0; + bolt_moby->is_visible = 0; bolt_moby->flags |= 1; } else { - bolt_moby->unk31 = 1; + bolt_moby->is_visible = 1; bolt_moby->flags &= 0xFFFE; } switch (bolt_moby->state) { @@ -216,7 +216,7 @@ void bolt_update(Bolt *bolt_moby) { bolt_moby->unk73 = 0x14; bolt_moby->flags |= 0x100; bolt_moby->unk30 = 0x20; - bolt_moby->unk32 = 0x20; + bolt_moby->draw_distance = 0x20; if (random_integer_below(2) == 0) { v->unk55 |= 1; } @@ -354,11 +354,11 @@ void bolt_update(Bolt *bolt_moby) { return; } if ((u8 *)bolt_moby > D_L00_0015FFDC && D_L00_0015FFBC < 200 && 48.0f < hero_distance && - bolt_moby->unk31 == 0) { + bolt_moby->is_visible == 0) { mark_moby_for_removal(bolt_moby); return; } - if (bolt_moby->unk31 != 0 || v->ground_moby != 0) { + if (bolt_moby->is_visible != 0 || v->ground_moby != 0) { FUN_L00_002a6de8_c(bolt_moby, 0, 0); if (v->hop_left != 0) { u = convert_integer_to_float(v->hop_left) / convert_integer_to_float(v->hop_frames); @@ -787,7 +787,7 @@ struct Moby *spawn_bolt_by_value( set_moby_color(spawned_bolt, color[4], color[5], color[6]); else spawned_bolt->spawn_frame = bolt_source->spawn_frame; - bolt_vars->unk6E = random_int_between(0, scale_game_frames(600)); + bolt_vars->glint_delay_frames = random_int_between(0, scale_game_frames(600)); bolt_vars->unk6C = -1; qcopy(&spawned_bolt->pos, pos); qcopy(bolt_vars->vel, vel); diff --git a/src/overlays/shared/pickups/crate.c b/src/overlays/shared/pickups/crate.c index 46302e4cd7..be3eb8a194 100644 --- a/src/overlays/shared/pickups/crate.c +++ b/src/overlays/shared/pickups/crate.c @@ -77,8 +77,8 @@ typedef struct { u8 padC0[0xC6 - 0xC0]; s16 unkC6; u8 unkC8; - u8 unkC9; - u8 unkCA; + u8 respawn_delay_timer; + u8 burst_frame; u8 padCB[0xFC - 0xCB]; s32 frameFC; } CrateVars; @@ -116,7 +116,7 @@ typedef struct M_2cfcb8 { struct Vars *vars; u8 p7c[0xA6 - 0x7C]; s16 oclass; - u16 hA8; + u16 drop_inheritance_tag; u8 pAA[0xB0 - 0xAA]; u8 mission; } M_2cfcb8; @@ -175,18 +175,18 @@ typedef struct O2d1428 { u8 p0[0x40]; V2d1428 vel; u8 p50[0x10]; - u8 v60[0x40]; + u8 pose_delta[0x40]; struct M2d1428 *next; struct M2d1428 *parent; u8 pa8[4]; s32 flags; - f32 fB0; - s32 iB4; + f32 crate_height; + s32 last_motion_update_frame; u8 pb8[0x18]; - V2d1428 vD0; - u8 vE0[0x10]; + V2d1428 attachment_position; + u8 attachment_rotation[0x10]; void *path; - f32 fF4; + f32 attachment_stack_z_offset; } O2d1428; struct M2d1428 { @@ -203,7 +203,7 @@ struct M2d1428 { u8 pa8[0x14]; u8 bBC; u8 pbd[3]; - u8 vC0[0x10]; + u8 transform_basis_x[0x10]; }; typedef struct P2d1428 { @@ -405,7 +405,7 @@ void crate_update(struct Moby *moby) { break; case CRATE_STATE_BROKEN: - if (moby->oclass == 0x1F9 && crate_vars->unkCA <= scale_game_frames(20)) { + if (moby->oclass == 0x1F9 && crate_vars->burst_frame <= scale_game_frames(20)) { f32 burst_radius_scale; burst.moby = moby; @@ -414,13 +414,14 @@ void crate_update(struct Moby *moby) { burst.unk20 = 0; fast_vec_normalize(&at, &moby->rot_row2, 0.5f); add_vector_xyz(&at, &at, &moby->pos); - burst_radius_scale = convert_integer_to_float(crate_vars->unkCA) / scale_time(20.0f); + burst_radius_scale = + convert_integer_to_float(crate_vars->burst_frame) / scale_time(20.0f); burst.unk14 = 1; collect_mobies_in_sphere( burst_radius_scale + burst_radius_scale, &at, 0x10, moby, &burst); burst.unk14 = 0x30000; collect_mobies_in_sphere(burst_radius_scale * 3.0f, &at, 0x10, D_001413D0_lui, &burst); - crate_vars->unkCA++; + crate_vars->burst_frame++; break; } if (crate_vars->unkC8 != 0) { @@ -433,9 +434,9 @@ void crate_update(struct Moby *moby) { } moby->state = CRATE_STATE_WAIT_RESPAWN; if (D_0015ED84 == 0x12) { - crate_vars->unkC9 = FUN_L00_00257b90(300, 720); + crate_vars->respawn_delay_timer = FUN_L00_00257b90(300, 720); } else { - crate_vars->unkC9 = FUN_L00_00257b90(30, 60); + crate_vars->respawn_delay_timer = FUN_L00_00257b90(30, 60); } break; } @@ -449,7 +450,7 @@ void crate_update(struct Moby *moby) { if (fast_bsphere_check(&burst.pos, moby->draw_dist) != -1) { break; } - if (!FUN_L00_001fefc8(&crate_vars->unkC9)) { + if (!FUN_L00_001fefc8(&crate_vars->respawn_delay_timer)) { break; } if (moby->group == 0xFF) { @@ -604,7 +605,7 @@ void mark_moby_for_removal_cf(u8 *, s32, s32) __asm__("FUN_L00_00257470"); s32 FUN_L00_00257218_2d0538(u8 *, s32 *) __asm__("FUN_L00_00257218"); f32 random_angle_radians(void) __asm__("FUN_00213308"); s32 solve_quadratic_equation(f32 *, f32 *, f32, f32, f32) __asm__("FUN_L00_002595a0"); -void FUN_L00_00261b48(s32, void *, void *, void *); +void path_8808(s32, void *, void *, void *) __asm__("FUN_L00_00261b48"); u8 *spawn_on_path(u8 *, s32, s32, s32) __asm__("FUN_L00_002c52a8"); void crate_drop_bolts(u8 *a) __asm__("FUN_L00_002d0538"); @@ -685,7 +686,7 @@ void ground_attached_update(M_2cfcb8 *moby) { return; } flags_before = vars->flags; - vars->hC4 = moby->hA8; + vars->hC4 = moby->drop_inheritance_tag; vars->height = 1.0f; vars->flags = flags_before | 1; ungrouped_crate_position = &moby->pos; @@ -734,7 +735,7 @@ void ground_attached_update(M_2cfcb8 *moby) { mark_moby_for_removal(moby); } else { member_flags = vars->flags; - vars->hC4 = moby->hA8; + vars->hC4 = moby->drop_inheritance_tag; vars->height = 1.0f; vars->flags = member_flags | 1; group_crate_probe_position = &moby->pos; @@ -989,10 +990,10 @@ void crate_drop_bolts(u8 *crate_moby) { trajectory_time = larger_trajectory_time_root; fast_vec_scale(&trajectory_vector, spawned_vars + 0x10, trajectory_time); fast_vec_add(&trajectory_vector, &trajectory_vector, &MOBY(crate_moby)->pos); - FUN_L00_00261b48(*(s32 *)(crate_vars + 0xC0), - &MOBY(crate_moby)->pos, - &trajectory_vector, - &adjusted_position); + path_8808(*(s32 *)(crate_vars + 0xC0), + &MOBY(crate_moby)->pos, + &trajectory_vector, + &adjusted_position); fast_vec_sub(&trajectory_vector, &adjusted_position, &MOBY(spawned_moby)->pos); trajectory_vector.f[2] = 0.0f; fast_vec_normalize(&scratch_vector, &trajectory_vector, 0.25f); @@ -1257,7 +1258,7 @@ void update_crate_stack_motion(M2d1428 *moby) { s32 hit; vars = moby->vars; - if (vars->iB4 == D_L00_0015F5CC) + if (vars->last_motion_update_frame == D_L00_0015F5CC) return; chain_cursor = moby; do { @@ -1276,11 +1277,11 @@ void update_crate_stack_motion(M2d1428 *moby) { return; if (vars->flags & 2) return; - vars->iB4 = D_L00_0015F5CC; + vars->last_motion_update_frame = D_L00_0015F5CC; if (moby->state == CRATE_STATE_INITIALIZE) continue; fast_vec_sub(&hero_local_offset, &hero.motion.pos, &moby->pos); - transform_vector_by_basis(&hero_local_offset, &hero_local_offset, moby->vC0); + transform_vector_by_basis(&hero_local_offset, &hero_local_offset, moby->transform_basis_x); if (absolute_float(hero_local_offset.x) < 0.55f && absolute_float(hero_local_offset.y) < 0.55f && hero_local_offset.z < 0.0f && -(hero.capsule_top + hero.capsule_radius) < hero_local_offset.z) { @@ -1299,37 +1300,43 @@ void update_crate_stack_motion(M2d1428 *moby) { if (vars->path) { if (vars->parent == 0) { vars->vel.w -= acceleration_scale_or_speed * 10.0f; - if (approach_value(&vars->fF4, 0.0f, absolute_float(vars->vel.w)) == 0.0f) + if (approach_value(&vars->attachment_stack_z_offset, + 0.0f, + absolute_float(vars->vel.w)) == 0.0f) vars->vel.w = 0.0f; } else { vars->vel.w -= acceleration_scale_or_speed * 10.0f; - if (approach_value(&vars->fF4, - vars->parent->vars->fF4 + 1.0f, + if (approach_value(&vars->attachment_stack_z_offset, + vars->parent->vars->attachment_stack_z_offset + 1.0f, absolute_float(vars->vel.w)) == 0.0f) *(s32 *)&vars->vel.w = 0; } - qcopy(&adjusted_link_position, &vars->vD0); - adjusted_link_position.z += vars->fF4; + qcopy(&adjusted_link_position, &vars->attachment_position); + adjusted_link_position.z += vars->attachment_stack_z_offset; if (moby) moby->h36 = 0x7F80; qcopy(&previous_position, &moby->pos); qcopy(&previous_rotation, &moby->v40); - transform_attachment_pose( - moby, vars->path, &adjusted_link_position, vars->vE0, &moby->pos, &moby->v40); + transform_attachment_pose(moby, + vars->path, + &adjusted_link_position, + vars->attachment_rotation, + &moby->pos, + &moby->v40); if (FUN_L00_002603d0(vars->path)->flags & 4) { - qcopy(&vars->vD0, &adjusted_link_position); - vars->vD0.z -= vars->fF4; + qcopy(&vars->attachment_position, &adjusted_link_position); + vars->attachment_position.z -= vars->attachment_stack_z_offset; } fast_vec_sub(&position_delta, &moby->pos, &previous_position); position_delta.w = vars->vel.w; qcopy(&vars->vel, &position_delta); - update_entity_matrix(vars->v60, &vars->vel, &previous_rotation, &moby->v40); + update_entity_matrix(vars->pose_delta, &vars->vel, &previous_rotation, &moby->v40); continue; } if (vars->parent == 0) { qcopy(&collision_start, &moby->pos); qcopy(&collision_end, &moby->pos); - collision_start.z += vars->fB0 * 0.75f; + collision_start.z += vars->crate_height * 0.75f; collision_end.z += vars->vel.z; hit = collision_line(&collision_start, &collision_end, 2, 0, 0); qcopy(&landing_position, &collision_hit_point); diff --git a/src/overlays/shared/pickups/crate_fragment.c b/src/overlays/shared/pickups/crate_fragment.c index d90f62217e..9ff3bc9187 100644 --- a/src/overlays/shared/pickups/crate_fragment.c +++ b/src/overlays/shared/pickups/crate_fragment.c @@ -22,7 +22,7 @@ typedef struct { float f4, f8; short hc, he; unsigned char p10[0x10]; - int i20; + int rotation_step_x; float f24, f28; } V_2af8b0; @@ -41,7 +41,7 @@ typedef struct { f32 pos[4] __attribute__((aligned(16))); u8 b20, b21, b22, b23; u8 pad24[8]; - f32 f2c; + f32 fragment_scale; u8 pad30[0x10]; f32 f40, f44, f48; u8 pad4c[0x2C]; @@ -168,7 +168,7 @@ unsigned char *spawn_crate_debris(unsigned char *debris_source_moby, debris_data->f4 = MOBY(debris_moby)->pos.z; { short t = FUN_001f96f8_2af8b0(0x14); - debris_data->i20 = 0; + debris_data->rotation_step_x = 0; debris_data->he = t; } debris_data->f24 = @@ -222,7 +222,7 @@ void nanotech_crate_fragment_update(M_2afa48 *fragment_moby) { } break; case NANOTECH_CRATE_FRAGMENT_FADING: - fragment_moby->f2c *= crate_fragment_shrink_factor_gp; + fragment_moby->fragment_scale *= crate_fragment_shrink_factor_gp; if (fragment_moby->b23 < crate_fragment_fade_step_gp) { mark_moby_for_removal(fragment_moby); } else { diff --git a/src/overlays/shared/pickups/gadget_pickup.c b/src/overlays/shared/pickups/gadget_pickup.c index 22c2d49e36..3c4eb9ad34 100644 --- a/src/overlays/shared/pickups/gadget_pickup.c +++ b/src/overlays/shared/pickups/gadget_pickup.c @@ -72,6 +72,9 @@ void tresspasser_update(struct Moby *moby) { GADGET_PICKUP_STATE_CAMERA_SEQUENCE = 4, GADGET_PICKUP_STATE_SAVE_AND_REMOVE = 5 }; + enum { + LEVEL_GAME_MODE_SCENE = 2 + }; char *gadget_pickup_state; int which; int frames; @@ -115,7 +118,7 @@ void tresspasser_update(struct Moby *moby) { } return; case GADGET_PICKUP_STATE_GRANT_ITEM: - if (level_game_mode == 2) + if (level_game_mode == LEVEL_GAME_MODE_SCENE) return; if (D_001413F4 != 0) { if (which == 0x16) { diff --git a/src/overlays/shared/pickups/infobot.c b/src/overlays/shared/pickups/infobot.c index 6d6d6816fd..908e5417c0 100644 --- a/src/overlays/shared/pickups/infobot.c +++ b/src/overlays/shared/pickups/infobot.c @@ -35,10 +35,10 @@ typedef union { typedef struct { u8 p0[0x60]; - float v60; - float v64; - float v68; - float v6C; + float slot_path_speed; + float rotation_x_turn_step; + float rotation_y_turn_step; + float rotation_z_turn_step; } St; typedef struct { @@ -213,20 +213,20 @@ void update_infobot_slot_path_motion(Obj *moby, Path_2d5988 *path, s32 arrival_s endpoint_distance_or_step_length = fast_vec_dist(&moby->v[0], (void *)((char *)path + path->n * 16)); speed_increment = frame_time_sq * 16.0f; - current_speed = st->v60; + current_speed = st->slot_path_speed; if (endpoint_distance_or_step_length <= (current_speed * current_speed) / (speed_increment + speed_increment)) { f32 low = current_speed - speed_increment; f32 minimum_path_speed = infobot_slot_path_minimum_speed_gp * frame_time; - st->v60 = low; + st->slot_path_speed = low; if (low < minimum_path_speed) - st->v60 = minimum_path_speed; + st->slot_path_speed = minimum_path_speed; } else { f32 high = current_speed + speed_increment; f32 maximum_path_speed = frame_time * 16.0f; - st->v60 = high; + st->slot_path_speed = high; if (maximum_path_speed < high) - st->v60 = maximum_path_speed; + st->slot_path_speed = maximum_path_speed; } path_segment_index = truncate_float_to_s32(w_ / path->a[0].f[3]); segment_offset_or_fraction = @@ -241,7 +241,7 @@ void update_infobot_slot_path_motion(Obj *moby, Path_2d5988 *path, s32 arrival_s endpoint_distance_or_step_length = vector_distance_xy((void *)((char *)path + path->n * 16), &moby->v[0]); if (endpoint_distance_or_step_length < 1.0f) { - if (st->v60 <= infobot_slot_path_minimum_speed_gp * frame_time) { + if (st->slot_path_speed <= infobot_slot_path_minimum_speed_gp * frame_time) { moby->flag = arrival_state; } } @@ -249,31 +249,39 @@ void update_infobot_slot_path_motion(Obj *moby, Path_2d5988 *path, s32 arrival_s target_yaw_or_movement_yaw_offset = fast_arc_tan(path->a[path_segment_index + 1].f[0] - moby->v[0], path->a[path_segment_index + 1].f[1] - moby->v[1]); - moby->f48 = - turn_f(&st->v6C, moby->f48, target_yaw_or_movement_yaw_offset, 0.01f, 0.3f, 0.1f); + moby->f48 = turn_f(&st->rotation_z_turn_step, + moby->f48, + target_yaw_or_movement_yaw_offset, + 0.01f, + 0.3f, + 0.1f); } else { target_yaw_or_movement_yaw_offset = fast_arc_tan(hero.motion.pos.f[0] - moby->v[0], hero.motion.pos.f[1] - moby->v[1]); - moby->f48 = - turn_f(&st->v6C, moby->f48, target_yaw_or_movement_yaw_offset, 0.01f, 0.3f, 0.1f); + moby->f48 = turn_f(&st->rotation_z_turn_step, + moby->f48, + target_yaw_or_movement_yaw_offset, + 0.01f, + 0.3f, + 0.1f); } fast_vec_sub(&v, &path_target_point, &moby->v[0]); endpoint_distance_or_step_length = FUN_001f9af0_2d5988(&v); - if (st->v60 < endpoint_distance_or_step_length) - endpoint_distance_or_step_length = st->v60; + if (st->slot_path_speed < endpoint_distance_or_step_length) + endpoint_distance_or_step_length = st->slot_path_speed; FUN_001f9bf8_2d5988(&v, &v, endpoint_distance_or_step_length); fast_vec_add(&moby->v[0], &moby->v[0], &v); target_yaw_or_movement_yaw_offset = fast_subtract_rotations(fast_arc_tan(v.f[0], v.f[1]), moby->f48); { f32 xa, xb; - xa = st->v60 * 0.34906584f * FUN_001f9dc8_2d5988(target_yaw_or_movement_yaw_offset) / - (frame_time * 16.0f); - xb = st->v60 * -0.34906584f * FUN_001f9de0_2d5988(target_yaw_or_movement_yaw_offset) / - (frame_time * 16.0f); + xa = st->slot_path_speed * 0.34906584f * + FUN_001f9dc8_2d5988(target_yaw_or_movement_yaw_offset) / (frame_time * 16.0f); + xb = st->slot_path_speed * -0.34906584f * + FUN_001f9de0_2d5988(target_yaw_or_movement_yaw_offset) / (frame_time * 16.0f); { f32 updated_rotation_y, k70; - updated_rotation_y = turn_f(&st->v68, + updated_rotation_y = turn_f(&st->rotation_y_turn_step, moby->f44, xa, frame_time_sq * 0.52359879f, @@ -281,7 +289,7 @@ void update_infobot_slot_path_motion(Obj *moby, Path_2d5988 *path, s32 arrival_s frame_time * 0.785398185f); k70 = frame_time_sq; moby->f44 = updated_rotation_y; - moby->f40 = turn_f(&st->v64, + moby->f40 = turn_f(&st->rotation_x_turn_step, moby->f40, xb, k70 * 1.04719758f, diff --git a/src/overlays/shared/pickups/nanotech_ball.c b/src/overlays/shared/pickups/nanotech_ball.c index 82f86b1d7b..2360ffd052 100644 --- a/src/overlays/shared/pickups/nanotech_ball.c +++ b/src/overlays/shared/pickups/nanotech_ball.c @@ -104,12 +104,12 @@ typedef struct { u8 p0[0x10]; V_2d8510 v10; u8 p20[0x58]; - O_2d8510 *p78; + O_2d8510 *collection_effect_state; } M_2d8510; typedef struct { u8 p0[0xF8]; - u8 *pF8; + u8 *collection_particle_byte_source; } T_2d8510; typedef union { @@ -173,12 +173,12 @@ typedef struct D_2D9EA0 { V_2D9EA0 v20; Part *slots[8]; int f50; - short h54; - short h56; + short collection_frames_remaining; + short collection_reward_processed; short h58[4]; float f60[4]; char p70[0xC]; - int f7C; + int pending_collection_count; } D_2D9EA0; /* Ported from rac1-decomp (nonmatching/shared/func_L00_002DACC0.c: func_L00_002DACC0), a near miss there; names translated to the US level program. */ @@ -1144,7 +1144,7 @@ s32 update_nanotech_ball_collection_effects(M_2d8510 *moby) { s32 i, any_effect_timer_above_threshold, c, hi, al; f32 z, color_progress_or_size_factor, unwrapped_effect_value; u8 *effect_record; - effect_data = moby->p78; + effect_data = moby->collection_effect_state; fast_vec_sub(&effect_position, &(*(V_2d8510 *)g_debug_camera), &moby->v10); any_effect_timer_above_threshold = 0; fast_vec_normalize(&effect_position, &effect_position, -0.3f); @@ -1188,7 +1188,7 @@ s32 update_nanotech_ball_collection_effects(M_2d8510 *moby) { 1, nanotech_ball_collection_particle_scale_factors[i] * color_progress_or_size_factor); if (effect_record) - effect_record[2] = *D_L00_001B2080_lui.pF8; + effect_record[2] = *D_L00_001B2080_lui.collection_particle_byte_source; effect_record = spawn_timed_hero_relative_particle( &effect_position, al | 0xFFFFFF, @@ -1200,7 +1200,7 @@ s32 update_nanotech_ball_collection_effects(M_2d8510 *moby) { nanotech_ball_collection_particle_scale_factors[i] * (color_progress_or_size_factor * 0.7f)); if (effect_record) - effect_record[2] = *D_L00_001B2080_lui.pF8; + effect_record[2] = *D_L00_001B2080_lui.collection_particle_byte_source; fast_vec_add(&effect_position, &effect_position, &effect_position_step); } return any_effect_timer_above_threshold; @@ -1276,7 +1276,7 @@ void nanotech_ball_update(Moby *moby) { nanotech_ball_state->pos.z += 0.5f; nanotech_ball_state->bob_phase = random_float_between(nanotech_ball_state->bob_offset, 3.1415927f); - nanotech_ball_state->h56 = 0; + nanotech_ball_state->collection_reward_processed = 0; nanotech_ball_state->hA = 0; for (i = 0; i < 4; i++) nanotech_ball_state->f60[i] = (float)random_integer_below(0xFF); @@ -1288,7 +1288,7 @@ void nanotech_ball_update(Moby *moby) { euler_rotation_basis(&moby->rot_row0, &moby->rot); D_L00_0015F63C = moby; moby->update_dist = 0xFF; - nanotech_ball_state->f7C = 0; + nanotech_ball_state->pending_collection_count = 0; func_L00_001FF4B0_2D9EA0(&D_L00_001E3CA0[0], &moby->rot_row0, D_L00_00161A14_gp); qcopy(&D_L00_001E4070_2D9EA0[0], &moby->rot_row2); func_L00_001FF4B0_2D9EA0(&D_L00_001E3CA0[1], &moby->rot_row1, D_L00_00161A14_gp); @@ -1353,17 +1353,18 @@ void nanotech_ball_update(Moby *moby) { max_hp = 4; if (moby->state != NANOTECH_BALL_STATE_FOLLOW_OWNER && D_L00_0015F63C != 0 && ((D_2D9EA0 *)D_L00_0015F63C->pvars) != 0 && player->health.hp != 0 && - (player->health.hp + ((D_2D9EA0 *)D_L00_0015F63C->pvars)->f7C < max_hp || + (player->health.hp + ((D_2D9EA0 *)D_L00_0015F63C->pvars)->pending_collection_count < + max_hp || (nanotech_ball_invulnerability_pickup_enabled != 0 && player->invulnerable_frames == 0)) && fast_vec_dist(&moby->pos, &player->motion.pos) < 10.0f && func_L00_002D9E30_2D9EA0(moby)) { int i; moby->state = NANOTECH_BALL_STATE_COLLECTING; - ((D_2D9EA0 *)D_L00_0015F63C->pvars)->f7C++; + ((D_2D9EA0 *)D_L00_0015F63C->pvars)->pending_collection_count++; if (nanotech_ball_invulnerability_pickup_enabled != 0) player->invulnerable_frames = func_001F9850_2D9EA0(0x258); - nanotech_ball_state->h54 = + nanotech_ball_state->collection_frames_remaining = func_001F9850_2D9EA0(nanotech_ball_collection_lifetime_frames_gp); func_001F9C30_2D9EA0(&collection_target_or_end_tangent, &player->gravity_dir, @@ -1477,7 +1478,7 @@ void nanotech_ball_update(Moby *moby) { case NANOTECH_BALL_STATE_COLLECTING: if (D_L00_0015F63C == moby) update_nanotech_ball_slot_offsets(); - if (nanotech_ball_state->h56 != 0) { + if (nanotech_ball_state->collection_reward_processed != 0) { func_001F9C30_2D9EA0( &moby->pos, D_0013F5E0, -nanotech_ball_collection_target_gravity_offset_gp); func_001F9BD8_2D9EA0(&moby->pos, D_0013F5E0 - 0x210, &moby->pos); @@ -1494,15 +1495,15 @@ void nanotech_ball_update(Moby *moby) { nanotech_ball_invulnerability_pickup_enabled != 0) { int duration = func_001F9850_2D9EA0( nanotech_ball_full_health_invulnerable_collection_min_frames_gp); - if (nanotech_ball_state->h54 < duration) { + if (nanotech_ball_state->collection_frames_remaining < duration) { int i; - nanotech_ball_state->h54 = duration; + nanotech_ball_state->collection_frames_remaining = duration; for (i = 0; i < 4; i++) nanotech_ball_state->h58[i]++; } } } - if (fast_dec_timer_s16(&nanotech_ball_state->h54)) { + if (fast_dec_timer_s16(&nanotech_ball_state->collection_frames_remaining)) { int i; for (i = 0; i < 8; i++) { if (nanotech_ball_state->slots[i] != 0) { @@ -1526,7 +1527,7 @@ void nanotech_ball_update(Moby *moby) { continue; ext = (Ext *)(part + 1); if (fast_dec_timer_s16(&ext->h1E)) { - if (nanotech_ball_state->h56 == 0) { + if (nanotech_ball_state->collection_reward_processed == 0) { Hero *player = &hero; int max_hp = hero_max_health; if (player->vehicle_mode == HERO_VEHICLE_MODE_CLANK) @@ -1537,12 +1538,12 @@ void nanotech_ball_update(Moby *moby) { } { D_2D9EA0 *leader_data = (D_2D9EA0 *)D_L00_0015F63C->pvars; - leader_data->f7C--; - if (leader_data->f7C < 0) - leader_data->f7C = 0; + leader_data->pending_collection_count--; + if (leader_data->pending_collection_count < 0) + leader_data->pending_collection_count = 0; } func_L00_0028EF68_2D9EA0(1, 0, moby, 0x1F5); - nanotech_ball_state->h56 = 1; + nanotech_ball_state->collection_reward_processed = 1; } func_L00_002688A8_2D9EA0(part); nanotech_ball_state->slots[i] = 0; diff --git a/src/overlays/shared/props/electric_beam.c b/src/overlays/shared/props/electric_beam.c index b8f8ae710d..15f0c59792 100644 --- a/src/overlays/shared/props/electric_beam.c +++ b/src/overlays/shared/props/electric_beam.c @@ -20,12 +20,12 @@ typedef struct { int w0; short s4, s6, s8, sA; - int wC; + int initial_timed_wait_frames; short s10, s12; char pad14[8]; float radius; /* 0x1C: beam half width */ char pad20[0x604]; - float f624; + float culling_sphere_radius; char pad628[8]; Vec4 end_a; /* 0x630: end of the line along +axis 1 */ Vec4 end_b; /* 0x640: end of the line along -axis 1 */ @@ -66,7 +66,7 @@ void electric_beam_update(unsigned char *moby) { int phase_duration_frames; if (MOBY(moby)->state != BEAM_STATE_INITIALIZE) { qcopy(beam_culling_sphere, &MOBY(moby)->pos); - beam_culling_sphere[3] = beam_vars->f624; + beam_culling_sphere[3] = beam_vars->culling_sphere_radius; if (fast_bsphere_check(beam_culling_sphere, 52.0f) < 0) { return; } @@ -78,9 +78,9 @@ void electric_beam_update(unsigned char *moby) { switch (beam_state) { case BEAM_STATE_INITIALIZE: start_electric_beam_pulse((char *)moby); - beam_vars->s10 = scale_game_frames(beam_vars->wC); + beam_vars->s10 = scale_game_frames(beam_vars->initial_timed_wait_frames); MOBY(moby)->state = BEAM_STATE_WAIT_FOR_TIMED_PULSE; - beam_vars->f624 = fast_vec_length(&l14_cuboids[beam_vars->w0].axes[1]); + beam_vars->culling_sphere_radius = fast_vec_length(&l14_cuboids[beam_vars->w0].axes[1]); beam_vars->s8 = 1; beam_vars->sA = 1; break; diff --git a/src/overlays/shared/props/particle_spawner_smoke_fire.c b/src/overlays/shared/props/particle_spawner_smoke_fire.c index d84d709aeb..6fae271448 100644 --- a/src/overlays/shared/props/particle_spawner_smoke_fire.c +++ b/src/overlays/shared/props/particle_spawner_smoke_fire.c @@ -48,7 +48,7 @@ typedef struct { u8 pad0[4]; int x04; u8 pad08[2]; - u8 b0A; + u8 emitted_particle_alpha; u8 b0B; } E2; @@ -131,9 +131,9 @@ extern u8 D_L00_001D2D10_lui[] __asm__("D_L00_001D2D10") NOT_SDA; V D_L00_001CB7E0[1200] = {0}; -u8 D_L00_001D2860[1200] = {0}; +u8 l00_smoke_fire_particle_facing_flip_flags[1200] __asm__("D_L00_001D2860") = {0}; -s16 D_L00_001D5740[1200] = {0}; +s16 l00_smoke_fire_particle_fade_in_timers[1200] __asm__("D_L00_001D5740") = {0}; /* Particle pool of 1200 entries, one array per field (more fields below FUN_L00_002d73e8). */ @@ -175,16 +175,16 @@ void particle_spawner_smoke_fire_update(P *spawner) { for (i = particle_start; i < particle_end_or_emission_index; i++) { r = random_integer_below(2); D_L00_001CB7E0[i].w = 1.0f; - D_L00_001D2860[i] = r; + l00_smoke_fire_particle_facing_flip_flags[i] = r; reset_smoke_fire_spawner_particle(spawner, i); - D_L00_001D5740[i] = 0; + l00_smoke_fire_particle_fade_in_timers[i] = 0; } j = particle_end_or_emission_index; particle_end_or_emission_index = particle_end_or_emission_index + q->extra; for (i = j; i < particle_end_or_emission_index; i++) { r = random_integer_below(2); D_L00_001CB7E0[i].w = 1.0f; - D_L00_001D2860[i] = r; + l00_smoke_fire_particle_facing_flip_flags[i] = r; FUN_L00_002d7d58_c(spawner, i); } D_L00_001600EC[q->idx].w = 1.0f; @@ -227,7 +227,7 @@ void particle_spawner_smoke_fire_update(P *spawner) { sub = &ent->sub; ent->h0A = FUN_001f96f8_c(random_int_between(q->x30, q->x34)); sub->x04 = 3; - sub->b0A = col >> 24; + sub->emitted_particle_alpha = col >> 24; sub->b0B = ent->h0A; if (random_integer_below(2)) ent->b03 = 0x44; @@ -291,7 +291,7 @@ void draw_smoke_fire_spawner(P *spawner) { for (i = q->start; i < end; i++) { phase = D_L00_001D31C0[i] - D_L00_001D4480[i] * frame_scale; D_L00_001D31C0[i] = phase; - transform = D_L00_001D2860[i] ? flipped : front; + transform = l00_smoke_fire_particle_facing_flip_flags[i] ? flipped : front; if (phase <= -8.0f) { D_L00_001D31C0[i] = phase + 8.0f; } @@ -322,16 +322,17 @@ void draw_smoke_fire_spawner(P *spawner) { draw_geometry_quad(&quad, 0, 0); } } else { - if (D_L00_001D5740[i]) { - fast_dec_timer_s16(&D_L00_001D5740[i]); + if (l00_smoke_fire_particle_fade_in_timers[i]) { + fast_dec_timer_s16(&l00_smoke_fire_particle_fade_in_timers[i]); alpha = truncate_float_to_s32( - (1.0f - convert_integer_to_float(D_L00_001D5740[i]) * D_L00_00161384) * + (1.0f - convert_integer_to_float(l00_smoke_fire_particle_fade_in_timers[i]) * + D_L00_00161384) * D_L00_0016199C); } else if (D_L00_001D60A0[i]) { if (fast_dec_timer_s16(&D_L00_001D60A0[i])) { reset_smoke_fire_spawner_particle(spawner, i); alpha = 0; - D_L00_001D2860[i] = random_integer_below(2); + l00_smoke_fire_particle_facing_flip_flags[i] = random_integer_below(2); } else { alpha = truncate_float_to_s32(convert_integer_to_float(D_L00_001D60A0[i]) * D_L00_0016138C * D_L00_0016199C); @@ -413,7 +414,7 @@ void reset_smoke_fire_spawner_particle(P *spawner, int i) { D_L00_001D31C0[i] = 0.0f; D_L00_001D4480[i] = random_float_between(*(float *)(spawner_vars + 0x8), *(float *)(spawner_vars + 0xC)); - D_L00_001D5740[i] = D_L00_00161380_2d7bf0; + l00_smoke_fire_particle_fade_in_timers[i] = D_L00_00161380_2d7bf0; D_L00_001D60A0[i] = 0; emitter_particle_index = i - *(s16 *)spawner_vars; D_L00_001D6A00[i] = (emitter_particle_index + 1) * D_L00_0016137C; diff --git a/src/overlays/shared/props/pterodactyl.c b/src/overlays/shared/props/pterodactyl.c index a38cada8b2..ae63aba5e6 100644 --- a/src/overlays/shared/props/pterodactyl.c +++ b/src/overlays/shared/props/pterodactyl.c @@ -14,8 +14,8 @@ typedef struct { char p0[0x60]; int path; float f64, f68, f6C; - int i70; - float f74; + int path_loop_enabled; + float path_progress_increment; } D_2e3a88; void sample_camera_path(void *, float, int, void *, void *, int) __asm__("FUN_00214e58"); @@ -51,8 +51,10 @@ void pterodactyl_update(unsigned char *moby) { { float first_segment_length = fast_vec_dist(path + 4, path + 8); float first_to_last_distance = fast_vec_dist(path + 4, path + *path * 4); - moby_data->f74 = pterodactyl_path_speed_gp * frame_time / first_segment_length; - moby_data->i70 = absolute_float(first_segment_length - first_to_last_distance) < 0.1f; + moby_data->path_progress_increment = + pterodactyl_path_speed_gp * frame_time / first_segment_length; + moby_data->path_loop_enabled = + absolute_float(first_segment_length - first_to_last_distance) < 0.1f; } moby_data->f6C = moby_data->f68 * (float)*path; MOBY(moby)->state = PTERODACTYL_FOLLOW_PATH; @@ -60,10 +62,11 @@ void pterodactyl_update(unsigned char *moby) { MOBY(moby)->update_dist = 0xFF; case PTERODACTYL_FOLLOW_PATH: y = MOBY(moby)->pos.z; - sample_camera_path(path, moby_data->f6C, moby_data->i70, &MOBY(moby)->pos, moby + 0x40, 0); + sample_camera_path( + path, moby_data->f6C, moby_data->path_loop_enabled, &MOBY(moby)->pos, moby + 0x40, 0); MOBY(moby)->rot.y *= 0.5f; MOBY(moby)->pos.z += moby_data->f64; - moby_data->f6C += moby_data->f74; + moby_data->f6C += moby_data->path_progress_increment; if ((float)*path < moby_data->f6C) moby_data->f6C -= (float)*path; if (MOBY(moby)->anim_flags & 2) { diff --git a/src/overlays/shared/props/thruster_pack_lock.c b/src/overlays/shared/props/thruster_pack_lock.c index cbc813cba9..46bdfa1ff6 100644 --- a/src/overlays/shared/props/thruster_pack_lock.c +++ b/src/overlays/shared/props/thruster_pack_lock.c @@ -73,7 +73,7 @@ typedef struct { char pad21[0x57]; char *vars; /* 0x78 */ char pad7C[0x34]; - unsigned char bB0; /* 0xB0 */ + unsigned char activation_group; /* 0xB0 */ char padB1; unsigned short uid; /* 0xB2 */ } Lock; @@ -111,7 +111,7 @@ void thruster_pack_lock_update(Lock *moby) { ((Stats *)(D_00141968_r))->count = 0; ((Stats *)(D_00141968_r))->best = 0; *(unsigned short *)(vars + 0x3E) |= 8; - if (level == 0xB && moby->bB0 != 0xFF) { + if (level == 0xB && moby->activation_group != 0xFF) { if (l11_thruster_pack_lock_restore_state.collected[(short)moby->uid] != 0 || ((*(int *)(D_0014C190_r + (((short)moby->uid >> 5) * 4 + (level << 8))) >> (moby->uid & 0x1F)) & @@ -129,11 +129,12 @@ void thruster_pack_lock_update(Lock *moby) { if (((void *)((Hero *)(D_0013F350_r))->ground_moby) == moby && item_available[3] != 0 && ((Hero *)(D_0013F350_r))->air_frames.s == 0 && ((Hero *)(D_0013F350_r))->state.current == 0x22) { - if (current_level_index == 0xB && moby->bB0 != 0xFF) { + if (current_level_index == 0xB && moby->activation_group != 0xFF) { int group; int group_index; - l11_thruster_pack_lock_activation_state.collected[(short)moby->uid] = moby->bB0 + 2; - group = moby->bB0; + l11_thruster_pack_lock_activation_state.collected[(short)moby->uid] = + moby->activation_group + 2; + group = moby->activation_group; group_index = group & 0xFF; if (group == 0xFF || (D_L11_0015FD08_3102C8[group_index] != 0xFF && @@ -145,7 +146,7 @@ void thruster_pack_lock_update(Lock *moby) { moby->z = moby->z - 1.5f; allocate_voice_for_target_entry(0, 0, moby); } - if (moby->bB0 == 0xFF) { + if (moby->activation_group == 0xFF) { return; } if (!(vector_distance_xy(moby->pos, D_0013F3D0_r) < 4.0f)) { diff --git a/src/overlays/shared/rendering/build_interpolated_dma_packet.c b/src/overlays/shared/rendering/build_interpolated_dma_packet.c index abdacb02d2..9dc3a0ca2d 100644 --- a/src/overlays/shared/rendering/build_interpolated_dma_packet.c +++ b/src/overlays/shared/rendering/build_interpolated_dma_packet.c @@ -27,16 +27,16 @@ typedef struct QuadDrawArgs { typedef struct QuadCamera { char pad0[0x190]; - float v190[4]; - float v1A0[4]; + float projection_and_fog_scale[4]; + float projection_and_fog_offset[4]; char pad1B0[0x60]; - float f210; + float fog_depth_coefficient; char pad214[4]; - float f218; - float f21C; + float fog_near_distance; + float fog_far_distance; char pad220[8]; - float f228; - float f22C; + float fog_near_intensity; + float fog_far_intensity; int c230, c234, c238; } QuadCamera; @@ -83,12 +83,12 @@ void prepare_scaled_float_table_with_target_byte(char *value_target, int val, float scale) __asm__("FUN_L02_002a4058"); -void prepare_scaled_float_table_with_target_byte(char *value_target, int val, float scale) { +void prepare_scaled_float_table_with_target_byte(char *value_target, int target_byte, float scale) { int i; float *destination; float *source; float *source_table_start; - value_target[0x3F] = val; + value_target[0x3F] = target_byte; *(s32 *)(scaled_table_output + 0x0) = scaled_table_header_leading_word_gp; *(s32 *)(scaled_table_output + 0x4) = scaled_table_header_second_word; *(s32 *)(scaled_table_output + 0x8) = scaled_table_header_third_word; @@ -139,15 +139,19 @@ void build_interpolated_dma_packet(QuadDrawArgs *draw_parameters) { long blend_mode; unsigned int alpha_limit; - textured_grid_saved_fog_near_distance = ((QuadCamera *)level02_camera_view_state)->f218; - textured_grid_saved_fog_far_distance = ((QuadCamera *)level02_camera_view_state)->f21C; - textured_grid_saved_fog_near_intensity = ((QuadCamera *)level02_camera_view_state)->f228; - textured_grid_saved_fog_far_intensity = ((QuadCamera *)level02_camera_view_state)->f22C; + textured_grid_saved_fog_near_distance = + ((QuadCamera *)level02_camera_view_state)->fog_near_distance; + textured_grid_saved_fog_far_distance = + ((QuadCamera *)level02_camera_view_state)->fog_far_distance; + textured_grid_saved_fog_near_intensity = + ((QuadCamera *)level02_camera_view_state)->fog_near_intensity; + textured_grid_saved_fog_far_intensity = + ((QuadCamera *)level02_camera_view_state)->fog_far_intensity; if (textured_grid_fog_source_mode != TEXTURED_GRID_FOG_SOURCE_CAMERA) { - ((QuadCamera *)level02_camera_view_state)->f218 = draw_parameters->f20; - ((QuadCamera *)level02_camera_view_state)->f21C = draw_parameters->f24; - ((QuadCamera *)level02_camera_view_state)->f228 = draw_parameters->f28; - ((QuadCamera *)level02_camera_view_state)->f22C = draw_parameters->f2C; + ((QuadCamera *)level02_camera_view_state)->fog_near_distance = draw_parameters->f20; + ((QuadCamera *)level02_camera_view_state)->fog_far_distance = draw_parameters->f24; + ((QuadCamera *)level02_camera_view_state)->fog_near_intensity = draw_parameters->f28; + ((QuadCamera *)level02_camera_view_state)->fog_far_intensity = draw_parameters->f2C; } update_view_context(); update_camera_view_matrices(); @@ -171,13 +175,16 @@ void build_interpolated_dma_packet(QuadDrawArgs *draw_parameters) { view_setup_dma_packet[0x28] = 0x8000; view_setup_dma_packet[0x29] = 0x303EC000; view_setup_dma_packet[0x2A] = 0x412; - *(float *)(view_setup_dma_packet + 0x2B) = ((QuadCamera *)level02_camera_view_state)->f210; + *(float *)(view_setup_dma_packet + 0x2B) = + ((QuadCamera *)level02_camera_view_state)->fog_depth_coefficient; cursor = view_setup_dma_packet + 0x2C; - qcopy(cursor, ((QuadCamera *)level02_camera_view_state)->v190); + qcopy(cursor, ((QuadCamera *)level02_camera_view_state)->projection_and_fog_scale); cursor = view_setup_dma_packet + 0x30; - qcopy(cursor, ((QuadCamera *)level02_camera_view_state)->v1A0); - *(float *)(view_setup_dma_packet + 0x34) = ((QuadCamera *)level02_camera_view_state)->f22C; - *(float *)(view_setup_dma_packet + 0x35) = ((QuadCamera *)level02_camera_view_state)->f228; + qcopy(cursor, ((QuadCamera *)level02_camera_view_state)->projection_and_fog_offset); + *(float *)(view_setup_dma_packet + 0x34) = + ((QuadCamera *)level02_camera_view_state)->fog_far_intensity; + *(float *)(view_setup_dma_packet + 0x35) = + ((QuadCamera *)level02_camera_view_state)->fog_near_intensity; view_setup_dma_packet[0x36] = 0; view_setup_dma_packet[0x37] = 0; view_setup_dma_packet[0x38] = 0x03000000; diff --git a/src/overlays/shared/rendering/effects/beam_slots.c b/src/overlays/shared/rendering/effects/beam_slots.c index fba72101cb..b66d1cd580 100644 --- a/src/overlays/shared/rendering/effects/beam_slots.c +++ b/src/overlays/shared/rendering/effects/beam_slots.c @@ -111,7 +111,7 @@ typedef struct { char pad0[0x10]; float f10; short f14; - short f16; + short beam_endpoint_tag; int f18; } PartSub; @@ -445,7 +445,7 @@ void update_slot_panes_and_effects(int unused, int beam) { sub->f10 = one / func_001FA888_2E3700(spark->fA); sub->f18 = 0x7F7F7F; if (beam_endpoint_spark_tag_mode[beam] == 1) - sub->f16 = 1; + sub->beam_endpoint_tag = 1; } } random_float_between(0.01f, 0.05f); @@ -464,7 +464,7 @@ void update_slot_panes_and_effects(int unused, int beam) { sub->f10 = 1.0f / func_001FA888_2E3700(spark->fA); sub->f18 = 0x7F7F7F; if (beam_endpoint_spark_tag_mode[beam] == 1) - sub->f16 = 2; + sub->beam_endpoint_tag = 2; } } } diff --git a/src/overlays/shared/rendering/effects/glow_particle.c b/src/overlays/shared/rendering/effects/glow_particle.c index 40cda6740b..aa6a4a0d87 100644 --- a/src/overlays/shared/rendering/effects/glow_particle.c +++ b/src/overlays/shared/rendering/effects/glow_particle.c @@ -34,9 +34,9 @@ typedef struct { typedef struct { char pad[0x23]; - u8 b23; + u8 particle_alpha; char pad2[0x2C - 0x24]; - float f2c; + float particle_scale; char pad3[0x40 - 0x30]; float r[3]; char pad4[0x78 - 0x4C]; @@ -130,7 +130,7 @@ void glow_particle_update(M_2acad8 *particle_moby) { int n; elapsed_lifetime_frames = convert_integer_to_float(v->n - v->h1c); total_lifetime_frames = convert_integer_to_float(v->n); - particle_moby->f2c = elapsed_lifetime_frames * v->f18 / total_lifetime_frames; + particle_moby->particle_scale = elapsed_lifetime_frames * v->f18 / total_lifetime_frames; particle_moby->r[0] = fast_add_rotations(particle_moby->r[0], frame_time * 3.1415927f); particle_moby->r[1] = fast_add_rotations(particle_moby->r[1], frame_time * 3.1415927f); particle_moby->r[2] = fast_add_rotations(particle_moby->r[2], frame_time * 3.1415927f); @@ -140,7 +140,7 @@ void glow_particle_update(M_2acad8 *particle_moby) { } n = v->n / 2; if (v->h1c < n) { - particle_moby->b23 = v->h1c * v->h1e / n; + particle_moby->particle_alpha = v->h1c * v->h1e / n; } } diff --git a/src/overlays/shared/rendering/effects/glow_quads_draw.c b/src/overlays/shared/rendering/effects/glow_quads_draw.c index eda4caa190..f0e4eff10f 100644 --- a/src/overlays/shared/rendering/effects/glow_quads_draw.c +++ b/src/overlays/shared/rendering/effects/glow_quads_draw.c @@ -235,7 +235,7 @@ typedef struct { } T_0023e5e0; extern T_0023e5e0 D_L00_001804C0_0023e5e0[] __asm__("D_L00_001804C0"); -u8 D_L00_00180640[8][1024] = {0}; +u8 l00_point_light_slot_buffers[8][1024] __asm__("D_L00_00180640") = {0}; u8 D_L01_00180AC0[8][1024] = {0}; @@ -299,7 +299,7 @@ int allocate_packed_color_point_light_slot(u128 *position, float radius, float b parameter_entry->unkC = b; fast_mem_zero16(slot_state, 0x30); slot_state->used = 1; - slot_state->buf = (char *)D_L00_00180640[i]; + slot_state->buf = (char *)l00_point_light_slot_buffers[i]; return i; } @@ -340,7 +340,7 @@ int allocate_colored_effect_slot(u128 *position, parameter_entry->unkC = b_0023e738; fast_mem_zero16(slot_state, 0x30); slot_state->used = 1; - slot_state->buf = (char *)D_L00_00180640[i]; + slot_state->buf = (char *)l00_point_light_slot_buffers[i]; return i; } diff --git a/src/overlays/shared/rendering/effects/parent_following_effect.c b/src/overlays/shared/rendering/effects/parent_following_effect.c index 0b93684f66..dd3acdbc30 100644 --- a/src/overlays/shared/rendering/effects/parent_following_effect.c +++ b/src/overlays/shared/rendering/effects/parent_following_effect.c @@ -7,7 +7,7 @@ #include "qcopy.h" extern int fast_tween_color(int, int, float) __asm__("FUN_001fa6e0"); -extern void FUN_L00_00262cf0(void *, void *, float, float, float); +extern void fast_add_rotations_cf(void *, void *, float, float, float) __asm__("FUN_L00_00262cf0"); void mark_moby_for_removal(struct Obj *obj) __asm__("FUN_0020c828"); /* update: follow the parent, blend its color, scale by the wind factor */ @@ -32,11 +32,11 @@ void parent_following_effect_update(char *moby) { qcopy(&MOBY(moby)->pos, *(char **)(*(char **)moby_pvars + 0x78) + 0xF0); accumulated_offset = *(float *)(moby_pvars + 0x10) + *(float *)(moby_pvars + 0x14); *(float *)(moby_pvars + 0x10) = accumulated_offset; - FUN_L00_00262cf0(&MOBY(moby)->pos, - &MOBY(moby)->pos, - -accumulated_offset, - MOBY(moby)->rot.z, - MOBY(moby)->rot.y); + fast_add_rotations_cf(&MOBY(moby)->pos, + &MOBY(moby)->pos, + -accumulated_offset, + MOBY(moby)->rot.z, + MOBY(moby)->rot.y); MOBY(moby)->rot.x = fast_add_rotations(MOBY(moby)->rot.x, frame_time * 5.235987663269043f); ratio = convert_integer_to_float(*(short *)(moby_pvars + 0xE)); ratio = ratio / convert_integer_to_float(*(short *)(moby_pvars + 0xC)); diff --git a/src/overlays/shared/rendering/effects/particles.c b/src/overlays/shared/rendering/effects/particles.c index 11a2ea06b6..3785ce9c42 100644 --- a/src/overlays/shared/rendering/effects/particles.c +++ b/src/overlays/shared/rendering/effects/particles.c @@ -539,10 +539,10 @@ void send_blast_hits(void *, float) __asm__("FUN_L00_0025a9f8"); typedef struct { - int i0; + int particle_path_reference; float unk4, unk8, fc; int i10; - void *p14; + void *blast_source_moby; } Q_272438; void update_timed_sphere_probed_particle(struct EffectParticle *) __asm__("FUN_L00_00272438"); @@ -556,8 +556,12 @@ void update_timed_sphere_probed_particle(struct EffectParticle *particle) { int sphere_probe_result; previous_particle_position = *particle_position; particle_data->unk4 += particle_data->unk8; - path_sample_at_distance( - particle_data->i0, &x, &y, particle_position, particle_data->unk4, particle_data->fc); + path_sample_at_distance(particle_data->particle_path_reference, + &x, + &y, + particle_position, + particle_data->unk4, + particle_data->fc); if (fast_dec_timer_s16(&particle->life)) { free_effect_particle(particle); return; @@ -570,10 +574,10 @@ void update_timed_sphere_probed_particle(struct EffectParticle *particle) { remaining_lifetime_frames * 0.08f / ((float)scale_game_frames(0x1E) * 0.25f)); } - sphere_probe_result = - collect_mobies_in_sphere(0.15f, particle_position, 0x10, particle_data->p14, 0); + sphere_probe_result = collect_mobies_in_sphere( + 0.15f, particle_position, 0x10, particle_data->blast_source_moby, 0); position_copy = *particle_position; - send_blast_hits(particle_data->p14, + send_blast_hits(particle_data->blast_source_moby, (void *)&position_copy, D_L00_00177F00_272438, sphere_probe_result, @@ -602,7 +606,7 @@ typedef struct { u8 b8; u8 b9; u8 padA[2]; - s32 wC; + s32 particle_size_bits; u8 v10[16]; u8 v20[12]; f32 unk2C; @@ -631,7 +635,7 @@ P_2725d8 *spawn_moby_point_attached_particle(u8 *owner_moby, if (particle) { S_2725d8 *s; particle->w4 = color; - particle->wC = initial_size_bits; + particle->particle_size_bits = initial_size_bits; particle->b9 = truncate_float_to_s32(0.4f) + 0x20; particle->b3 = 0x48; particle->b1 = 3; @@ -805,7 +809,7 @@ typedef struct { char p0[0x88]; float unk88; char p1[0x2080 - 0x8C]; - int i2080; + int hit_recipient_moby; } P_272bc0; extern char D_0013F3D0[] NOT_SDA; @@ -881,7 +885,7 @@ void update_color_tween_emitter_particle(struct EffectParticle *particle) { fast_vec_sub(particle_vector_scratch, reference_position, particle->pos.f); fast_vec_normalize(particle_vector_scratch, particle_vector_scratch, 1.0f); particle_vector_scratch[2] = 1.0f; - spawn_nearby_effect(reference_position_owner->i2080, + spawn_nearby_effect(reference_position_owner->hit_recipient_moby, *(int *)(particle_data + 0x18), 1, particle->pos.f, @@ -1041,7 +1045,7 @@ typedef struct { typedef struct { u8 p0[0x10]; f32 x, y, z; - int w1C; + int hero_relative_position_mode; } V_273298; typedef struct { @@ -1053,10 +1057,13 @@ u32 FUN_001fa6e0_273298(u32, u32, f32) __asm__("FUN_001fa6e0"); void update_moving_hero_relative_alpha_fade_particle(Part_273298 *particle) __asm__("FUN_L00_00273298"); void update_moving_hero_relative_alpha_fade_particle(Part_273298 *particle) { + enum { + MOVING_PARTICLE_POSITION_HERO_RELATIVE = 1 + }; V_273298 *particle_data = (V_273298 *)((u8 *)particle + 0x20); float remaining_frames_minus_one; u32 color_without_alpha; - if (particle_data->w1C == 1) { + if (particle_data->hero_relative_position_mode == MOVING_PARTICLE_POSITION_HERO_RELATIVE) { struct Hero *hero_reference = &hero; particle->x = hero_reference->motion.pos.f[0] + particle_data->x; particle->y = hero_reference->motion.pos.f[1] + particle_data->y; @@ -1084,7 +1091,7 @@ void update_moving_hero_relative_alpha_fade_particle(Part_273298 *particle) { typedef struct { u8 pad0[0x20]; - s8 b20; + s8 attachment_owner_status; } T_273448; typedef struct { @@ -1120,7 +1127,7 @@ void update_moby_point_attached_alpha_pulse_particle(P_273448 *particle) { return; } e = &particle->e; - if (fast_dec_timer_s16(&particle->hA) || e->m == 0 || e->m->b20 < 0) { + if (fast_dec_timer_s16(&particle->hA) || e->m == 0 || e->m->attachment_owner_status < 0) { goto kill; } e->hC = (e->hC + 1) & 0xF; @@ -1580,15 +1587,15 @@ typedef struct { u8 *iC; f32 unk10; f32 unk14; - s16 h18; - s16 h1A; - s16 h1C; + s16 position_offset_multiplier; + s16 alpha_fade_decrement; + s16 trail_particle_mode; } R_274518; typedef struct { u8 p0[4]; u8 b4[3]; - s8 b7; + s8 particle_alpha; u8 p8[2]; s16 hA; u8 pC[4]; @@ -1601,22 +1608,27 @@ u8 *FUN_L00_002743a8_274518(s32, void *, s32, f32, f32, s32, s32, void *) __asm_ void update_mode_controlled_orbiting_trail_particle(M_274518 *particle) __asm__("FUN_L00_00274518"); void update_mode_controlled_orbiting_trail_particle(M_274518 *particle) { + enum { + TRAIL_PARTICLE_MODE_ALPHA_FADE = 0, + TRAIL_PARTICLE_MODE_ORBITING_EMITTER = 1 + }; R_274518 *r = &particle->r; V_274518 position_offset_scratch, secondary_position_offset, rotation_angles; V_274518 secondary_offset_rotation_matrix[4]; u8 *spawned_particle; f32 k1, k2, z; - if (r->h1C == 0) { - if (decrement_packed_countdown(particle->b4, r->h1A)) + if (r->trail_particle_mode == TRAIL_PARTICLE_MODE_ALPHA_FADE) { + if (decrement_packed_countdown(particle->b4, r->alpha_fade_decrement)) goto kill; if (r->iC == 0) return; position_offset_scratch.x = particle->r.unk0; position_offset_scratch.y = r->unk4; position_offset_scratch.z = r->unk8; - fast_vec_scale( - &position_offset_scratch, &position_offset_scratch, convert_integer_to_float(r->h18)); + fast_vec_scale(&position_offset_scratch, + &position_offset_scratch, + convert_integer_to_float(r->position_offset_multiplier)); fast_vec_add(particle->v10, r->iC + 0x10, &position_offset_scratch); return; } @@ -1629,9 +1641,10 @@ void update_mode_controlled_orbiting_trail_particle(M_274518 *particle) { return; } } - if (r->h1C == 1) { + if (r->trail_particle_mode == TRAIL_PARTICLE_MODE_ORBITING_EMITTER) { z = 0.0f; - FUN_L00_002743a8_274518(0, particle->v10, scale_game_frames(10), z, z, 0, particle->b7, 0); + FUN_L00_002743a8_274518( + 0, particle->v10, scale_game_frames(10), z, z, 0, particle->particle_alpha, 0); } else { position_offset_scratch.x = r->unk0; position_offset_scratch.y = r->unk4; @@ -1643,12 +1656,12 @@ void update_mode_controlled_orbiting_trail_particle(M_274518 *particle) { z, z, 0, - particle->b7, + particle->particle_alpha, &position_offset_scratch); if (spawned_particle) - *(s16 *)(spawned_particle + 0x38) = r->h18; + *(s16 *)(spawned_particle + 0x38) = r->position_offset_multiplier; } - if (r->h1C != 1) + if (r->trail_particle_mode != TRAIL_PARTICLE_MODE_ORBITING_EMITTER) return; qcopy(particle->v10, r->iC + 0x10); k1 = 2.25f; @@ -1676,8 +1689,8 @@ void update_mode_controlled_orbiting_trail_particle(M_274518 *particle) { typedef struct { void *o; u8 b4; - u8 b5; - s16 h6; + u8 offset_length_jitter_percent; + s16 expected_owner_identity; float unk8; float unkC; } S_274818; @@ -1691,8 +1704,8 @@ void update_randomized_moby_point_attached_particle(struct EffectParticle *parti u128 attachment_offset; float one, randomized_primary_position_w, save, x; char *attachment_position; - if (o == 0 || *(s16 *)(o + 0xA6) != attachment_data->h6 || (u8)o[0x20] == 0xFE || - (u8)o[0x20] == 0xFD) { + if (o == 0 || *(s16 *)(o + 0xA6) != attachment_data->expected_owner_identity || + (u8)o[0x20] == 0xFE || (u8)o[0x20] == 0xFD) { free_effect_particle(particle); return; } @@ -1702,7 +1715,7 @@ void update_randomized_moby_point_attached_particle(struct EffectParticle *parti save = *(float *)(particle->data + 0xC); moby_point_position(attachment_data->o, attachment_data->b4, attachment_position); build_moby_bone_transform(attachment_data->o, attachment_data->b4, attachment_vector_scratch); - x = convert_integer_to_float(attachment_data->b5); + x = convert_integer_to_float(attachment_data->offset_length_jitter_percent); x = random_float_between(-x, x); fast_vec_normalize( &attachment_offset, attachment_vector_scratch, (x / 100.0f - one) * attachment_data->unkC); @@ -1840,18 +1853,18 @@ typedef struct { typedef struct { u8 p0[8]; - s32 i8; + s32 far_distance_color; s32 iC; s16 h10; s16 h12; - s16 h14; + s16 final_phase_duration_frames; u8 p16[2]; - f32 *p18; + f32 *motion_target_position; } R_274e48; typedef struct { u8 p0[4]; - s32 i4; + s32 packed_particle_color; u8 b8; u8 p9; s16 hA; @@ -1873,8 +1886,8 @@ void update_three_phase_motion_alpha_fade_particle(M_274e48 *particle) { if (D_L00_0015F5CC & 1) particle->b8++; distance_or_blend_factor = fast_vec_dist(&particle->v10, &(*(V_274e48 *)D_0013F420)); - if (distance_or_blend_factor < 5.0f && 0.0f < r->p18[2]) { - fast_vec_sub(&motion_vector_scratch, r->p18, &particle->v10); + if (distance_or_blend_factor < 5.0f && 0.0f < r->motion_target_position[2]) { + fast_vec_sub(&motion_vector_scratch, r->motion_target_position, &particle->v10); if (0.5f < fast_vec_length(&motion_vector_scratch)) { fast_vec_normalize( &motion_vector_scratch, &motion_vector_scratch, 0.1f / distance_or_blend_factor); @@ -1889,15 +1902,18 @@ void update_three_phase_motion_alpha_fade_particle(M_274e48 *particle) { distance_or_blend_factor = 1.0f; else if (distance_or_blend_factor < 0.0f) distance_or_blend_factor = 0.0f; - particle->i4 = FUN_001fa6e0_274e48(r->i8, r->iC, distance_or_blend_factor); + particle->packed_particle_color = + FUN_001fa6e0_274e48(r->far_distance_color, r->iC, distance_or_blend_factor); if (r->h10) { *(volatile s32 *)0x10000000 = 0; load_display_text_resource_entry(&applied_motion_delta, r); fast_vec_add(&particle->v10, &particle->v10, &applied_motion_delta); distance_or_blend_factor = convert_integer_to_float(particle->hA) / convert_integer_to_float(r->h10); - particle->i4 = FUN_001fa6e0_274e48( - particle->i4 & 0xFFFFFF, particle->i4, 1.0f - distance_or_blend_factor); + particle->packed_particle_color = + FUN_001fa6e0_274e48(particle->packed_particle_color & 0xFFFFFF, + particle->packed_particle_color, + 1.0f - distance_or_blend_factor); if (fast_dec_timer_s16(&particle->hA)) { r->h10 = 0; particle->hA = r->h12; @@ -1912,16 +1928,17 @@ void update_three_phase_motion_alpha_fade_particle(M_274e48 *particle) { fast_vec_add(&particle->v10, &particle->v10, &applied_motion_delta); if (fast_dec_timer_s16(&particle->hA)) { r->h12 = 0; - particle->hA = r->h14; + particle->hA = r->final_phase_duration_frames; } } else { load_display_text_resource_entry(&applied_motion_delta, (u8 *)r + 4); fast_vec_add(&particle->v10, &particle->v10, &applied_motion_delta); - color_without_alpha = particle->i4 & 0xFFFFFF; - particle->i4 = FUN_001fa6e0_274e48(color_without_alpha, - particle->i4, - convert_integer_to_float(particle->hA) / - convert_integer_to_float(r->h14)); + color_without_alpha = particle->packed_particle_color & 0xFFFFFF; + particle->packed_particle_color = + FUN_001fa6e0_274e48(color_without_alpha, + particle->packed_particle_color, + convert_integer_to_float(particle->hA) / + convert_integer_to_float(r->final_phase_duration_frames)); if (fast_dec_timer_s16(&particle->hA)) free_effect_particle(particle); } diff --git a/src/overlays/shared/rendering/effects/register_part_types.c b/src/overlays/shared/rendering/effects/register_part_types.c index 5299be90b1..550a340079 100644 --- a/src/overlays/shared/rendering/effects/register_part_types.c +++ b/src/overlays/shared/rendering/effects/register_part_types.c @@ -120,7 +120,7 @@ void register_part_types(void) { */ typedef struct { u8 pad_00[0xA]; - s16 unk0A; /* 2 skips the ground test (a timer in sibling kinds) */ + s16 ground_test_mode; /* 2 skips the ground test (a timer in sibling kinds) */ u8 pad_0C[4]; Vec4 pos; /* 0x10: drawn position */ Vec4 probe; /* 0x20: point tested against the ground */ @@ -139,6 +139,9 @@ extern ParticleClearance particle_clearance __asm__("D_L00_00160258"); extern f32 particle_min_ground __asm__("D_L00_00160260"); void update_falling_effect_particle(FallingParticle *particle) { + enum { + FALLING_PARTICLE_GROUND_TEST_SKIP_PROBE = 2 + }; Vec4 step; Vec4 ground_test_probe; Vec4 ground_sample_probe; @@ -156,7 +159,7 @@ void update_falling_effect_particle(FallingParticle *particle) { fast_vec_add(&step, vel, &particle_drift); fast_vec_add(&particle->probe, &particle->probe, &step); fast_vec_add(&particle->pos, &particle->pos, &step); - if (particle->unk0A != 2) { + if (particle->ground_test_mode != FALLING_PARTICLE_GROUND_TEST_SKIP_PROBE) { if (cell_x != (s32)particle->probe.f[0] || cell_y != (s32)particle->probe.f[1]) { ground_test_probe.q = particle->probe.q; if (ground_height_at(&ground_test_probe) < particle_min_ground) { diff --git a/src/overlays/shared/rendering/effects/spawn_explosion.c b/src/overlays/shared/rendering/effects/spawn_explosion.c index 7677eb0468..76c94b5c54 100644 --- a/src/overlays/shared/rendering/effects/spawn_explosion.c +++ b/src/overlays/shared/rendering/effects/spawn_explosion.c @@ -1149,7 +1149,7 @@ typedef struct { typedef struct { u8 pad[0x78]; - V25f878 *p78; + V25f878 *data_id_record; u8 pad7c[0x100 - 0x7C]; } M25f878; @@ -1161,7 +1161,7 @@ M25f878 *find_listed_moby_by_data_id(s32 id) { s32 i; for (i = 1; i <= D_L00_001B0770[0]; i++) { M25f878 *candidate_moby = (M25f878 *)(D_L00_001B0770[i] * 0x100 + (s32)moby_table); - if (candidate_moby->p78->id == id) + if (candidate_moby->data_id_record->id == id) return candidate_moby; } return 0; diff --git a/src/overlays/shared/rendering/effects/update_three_phase_effect_particle.c b/src/overlays/shared/rendering/effects/update_three_phase_effect_particle.c index 37e7edea3c..4535951ac5 100644 --- a/src/overlays/shared/rendering/effects/update_three_phase_effect_particle.c +++ b/src/overlays/shared/rendering/effects/update_three_phase_effect_particle.c @@ -16,8 +16,8 @@ typedef struct { char p0[8]; - int w8; - int wC; + int initial_phase_packed_color; + int final_phase_packed_color; short h10, h12, h14, h16, h18; } S_269290; @@ -43,8 +43,9 @@ void update_three_phase_effect_particle(struct EffectParticle *particle) { fast_vec_add(particle->pos.f, particle->pos.f, position_step); phase_remaining_ratio = convert_integer_to_float(particle->life) / convert_integer_to_float(particle_data->h10); - particle->color = fast_tween_color( - particle_data->w8 & 0xFFFFFF, particle_data->w8, 1.0f - phase_remaining_ratio); + particle->color = fast_tween_color(particle_data->initial_phase_packed_color & 0xFFFFFF, + particle_data->initial_phase_packed_color, + 1.0f - phase_remaining_ratio); particle->size = (float)(particle_data->h16 * 1000); if (fast_dec_timer_s16(&particle->life)) { particle_data->h10 = 0; @@ -60,8 +61,9 @@ void update_three_phase_effect_particle(struct EffectParticle *particle) { particle->size = ((float)(particle_data->h16 - particle_data->h18) * phase_remaining_ratio + (float)particle_data->h18) * 1000.0f; - particle->color = - fast_tween_color(particle_data->wC, particle_data->w8, phase_remaining_ratio); + particle->color = fast_tween_color(particle_data->final_phase_packed_color, + particle_data->initial_phase_packed_color, + phase_remaining_ratio); if (fast_dec_timer_s16(&particle->life)) { particle_data->h12 = 0; particle->life = particle_data->h14; @@ -70,9 +72,9 @@ void update_three_phase_effect_particle(struct EffectParticle *particle) { int packed_rgb; load_display_text_resource_entry(position_step, particle->data + 0x4); fast_vec_add(particle->pos.f, particle->pos.f, position_step); - packed_rgb = particle_data->wC & 0xFFFFFF; + packed_rgb = particle_data->final_phase_packed_color & 0xFFFFFF; particle->color = fast_tween_color(packed_rgb, - particle_data->wC, + particle_data->final_phase_packed_color, convert_integer_to_float(particle->life) / convert_integer_to_float(particle_data->h14)); particle->size = (float)(particle_data->h18 * 1000); @@ -1069,7 +1071,7 @@ typedef struct { u8 p9[3]; f32 fC; f32 f10; - u32 w14; + u32 packed_rgb_color; } Body; typedef struct { @@ -1098,14 +1100,14 @@ void update_spinning_fade_in_out_effect_particle(Part_26b910 *particle) { if (fast_dec_timer_s16(&particle->hA)) { particle_data->w4 = 1; particle->hA = FUN_001f96f8_0026b910(30); - particle->w4 = particle_data->w14 | 0x7F000000; + particle->w4 = particle_data->packed_rgb_color | 0x7F000000; } else { int fade_in_duration = FUN_001f96f8_0026b910(10); float k = 96.0f / (float)FUN_001f96f8_0026b910(10); particle->w4 = ((truncate_float_to_s32((float)(fade_in_duration - particle->hA) * k) + 0x20) << 24) | - particle_data->w14; + particle_data->packed_rgb_color; } } else { if (fast_dec_timer_s16(&particle->hA)) { @@ -1115,7 +1117,7 @@ void update_spinning_fade_in_out_effect_particle(Part_26b910 *particle) { particle->w4 = (truncate_float_to_s32((float)particle->hA * (127.0f / (float)FUN_001f96f8_0026b910(30))) << 24) | - particle_data->w14; + particle_data->packed_rgb_color; } } @@ -1569,7 +1571,7 @@ typedef struct { f32 fC; f32 f10; f32 f14; - u8 *p18; + u8 *spiral_target_moby; f32 f1C; } R_26c860; @@ -1606,7 +1608,7 @@ void update_spiraling_fade_in_out_effect_particle(M_26c860 *particle) { &transformed_position_offset, &position_offset_scratch, &position_offset_matrix); fast_vec_sub(&particle->v10, &particle->v10, &transformed_position_offset); r->f1C += frame_scale * 0.06001f; - moby_point_position(r->p18, 0, &reference_position); + moby_point_position(r->spiral_target_moby, 0, &reference_position); fast_vec_sub(&position_offset_scratch, &reference_position, &particle->v10); FUN_L00_001ff500_26c860(&position_offset_scratch, &position_offset_scratch, r->f1C); fast_vec_add(&particle->v10, &particle->v10, &position_offset_scratch); @@ -1620,7 +1622,7 @@ void update_spiraling_fade_in_out_effect_particle(M_26c860 *particle) { &transformed_position_offset, &position_offset_scratch, &position_offset_matrix); fast_vec_add(&particle->v10, &particle->v10, &transformed_position_offset); if (zero < compute_transformed_delta_component( - &reference_position, r->p18 + 0xC0, &particle->v10, 1)) { + &reference_position, r->spiral_target_moby + 0xC0, &particle->v10, 1)) { FUN_L00_00267a08_26c860(particle); return; } @@ -1914,7 +1916,7 @@ typedef struct { u8 b4; u8 b5; u8 b6; - u8 b7; + u8 source_alpha; u8 b8; u8 b9; s16 hA; @@ -1974,11 +1976,12 @@ void update_source_bound_effect_particle(Part_26d470 *particle) { particle_data->fC = 1.0f; packed_rgb = particle->w4 & 0xFFFFFF; particle->w4 = - packed_rgb | (truncate_float_to_s32((convert_integer_to_float(particle->body.e->b7) * - (particle_data->f10 * 0.00390625f) + - particle_data->fC) * - 256.0f) - << 24); + packed_rgb | + (truncate_float_to_s32((convert_integer_to_float(particle->body.e->source_alpha) * + (particle_data->f10 * 0.00390625f) + + particle_data->fC) * + 256.0f) + << 24); } extern unsigned char *FUN_L00_002678b8_26d598(int) __asm__("FUN_L00_002678b8"); @@ -2419,7 +2422,7 @@ void update_moving_fade_in_out_effect_particle(M_26e150 *particle) { typedef struct { u8 pad0[0x20]; - s8 b20; + s8 attachment_source_status; } T_26e3a8; typedef struct { @@ -2456,7 +2459,7 @@ void update_animated_source_attached_fade_in_out_effect_particle(P_26e3a8 *parti return; } e = &particle->e; - if (fast_dec_timer_s16(&particle->hA) || e->m == 0 || e->m->b20 < 0) { + if (fast_dec_timer_s16(&particle->hA) || e->m == 0 || e->m->attachment_source_status < 0) { goto kill; } e->hC = (e->hC + 1) & 0xF; @@ -2522,14 +2525,14 @@ typedef struct { O_26e670_26e670 *tgt; O_26e670_26e670 *link; u32 x18; - s16 h1C; - u16 h1E; + s16 sphere_collision_active; + u16 motion_and_fade_flags; } P_26e670_26e670; struct O_26e670_26e670 { u8 p0[4]; - u32 i04; - u8 b08; + u32 packed_rgba_color; + u8 projected_link_rotation; u8 p9[7]; V_26e670_26e670 pos; P_26e670_26e670 p; @@ -2548,7 +2551,7 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part V_26e670_26e670 next_position, position_displacement, acc, projected_next_position; P_26e670_26e670 *P = &particle->p; - if ((P->h1E ^ 1) & 1) { + if ((P->motion_and_fade_flags ^ 1) & 1) { O_26e670_26e670 *linked_particle = P->link; P_26e670_26e670 *linked_particle_data = 0; f32 k = 2.0f, linked_velocity_scale_scratch; @@ -2556,7 +2559,7 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part linked_particle_data = &linked_particle->p; clear_u64_value(&acc); linked_velocity_scale_scratch = 0.15f; - if (P->h1C == 0 && linked_particle != 0 && + if (P->sphere_collision_active == 0 && linked_particle != 0 && !(*(long long *)&linked_particle_data->x18 & 0x1FFFF00000000LL)) { f32 kk; f32 linked_displacement_strength = 0.2f, link_rank_step = 1.0f, @@ -2577,7 +2580,7 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part } while (!(*(long long *)&linked_particle_data->x18 & 0x1FFFF00000000LL)); } linked_velocity_scale_scratch = (0.15f - linked_velocity_scale_scratch) + 1.07f; - if (linked_particle_data == 0 || linked_particle_data->h1C == 0) + if (linked_particle_data == 0 || linked_particle_data->sphere_collision_active == 0) fast_vec_add(P, P, &acc); else fast_vec_scale(P, P, 0.5f); @@ -2597,13 +2600,13 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part fast_vec_add(&next_position, &acc, &P->tgt->pos); } if (FUN_L00_001f0d60_x(&next_position, 0, 0, 0.15f)) { - if (P->h1C == 0) + if (P->sphere_collision_active == 0) qcopy(&next_position, &coll_hit_position); else qcopy(&next_position, &particle->pos); - P->h1C = 1; + P->sphere_collision_active = 1; } else { - P->h1C = 0; + P->sphere_collision_active = 0; } fast_vec_sub(&acc, &P->tgt->pos, &D_L00_00166DC0_26e670); transform_vector(&acc, &acc, (u8 *)&D_L00_00166DC0_26e670 - 0x80); @@ -2616,9 +2619,9 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part &projected_next_position, 1.0f / projected_next_position.f[3]); fast_vec_sub(&acc, &acc, &projected_next_position); - particle->b08 = + particle->projected_link_rotation = truncate_float_to_s32(fast_arc_tan(acc.f[0], acc.f[1]) * 128.0f / 3.1415927f) - 0x20; - if (P->h1C) { + if (P->sphere_collision_active) { FUN_L00_001ff660_x(P, P, &coll_hit_normal); fast_vec_scale(P, P, 0.95f); } else { @@ -2631,10 +2634,11 @@ void update_linked_effect_particle_with_collision_and_fade(O_26e670_26e670 *part fast_vec_scale(P, P, 0.5f); } qcopy(&particle->pos, &next_position); - if (P->h1E & 2) { - s32 faded_alpha = (particle->i04 >> 24) - 2; + if (P->motion_and_fade_flags & 2) { + s32 faded_alpha = (particle->packed_rgba_color >> 24) - 2; if (faded_alpha > 0) { - particle->i04 = (particle->i04 & 0xFFFFFF) | (faded_alpha << 24); + particle->packed_rgba_color = + (particle->packed_rgba_color & 0xFFFFFF) | (faded_alpha << 24); } else if (P->link == 0) { if (P->tgt) P->tgt->p.link = 0; @@ -3212,7 +3216,7 @@ typedef struct { s16 h16; u8 b18; u8 pad19[3]; - s32 w1c; + s32 particle_collision_context; } E_26fd28; typedef struct { @@ -3271,7 +3275,7 @@ P_26fd28 *spawn_splitting_effect_particle_with_collision_response_and_fade(u128 particle->fC = 10000.0f; particle->hA = (s32)(8.0f / (D_0015ED60 * 0.443f)); } - e->w1c = collision_context; + e->particle_collision_context = collision_context; } return particle; } @@ -3296,13 +3300,13 @@ typedef struct PV { typedef struct Moby_26ff10 { u8 b00_26ff10; char pad01; - u8 b02; + u8 animated_texture_id; char pad03; u32 f04; u8 f08; char pad09; - s16 h0A; - f32 f0C; + s16 split_countdown; + f32 split_position_spread_scale; VV posv; PV pv; } Moby_26ff10; @@ -3344,14 +3348,14 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff f32 f, rotation_direction_sign, alpha_factor; pv = &particle->pv; - if (particle->h0A != 0 && fast_dec_timer_s16(&particle->h0A) != 0) { + if (particle->split_countdown != 0 && fast_dec_timer_s16(&particle->split_countdown) != 0) { f32 sp, lo, hi, sc, zero, nsp; pv->f18 |= 0x88; lo = 0.5f; - sp = particle->f0C / 900000.0f; + sp = particle->split_position_spread_scale / 900000.0f; hi = 0.7f; sc = 0.2f; - particle->f0C = particle->f0C * 0.8f; + particle->split_position_spread_scale = particle->split_position_spread_scale * 0.8f; zero = 0.0f; f = random_float_between(lo, hi); nsp = -sp; @@ -3364,8 +3368,8 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff v0u.f[2] = v0u.f[2] + random_float_between(-pv->z * sc, zero); spawned_particle = FUN_L00_0026fd28_26ff10(v1u.f, v0u.f, 0x88, pv->f1C); if (spawned_particle != 0) { - spawned_particle->h0A = scale_game_frames(2); - spawned_particle->f0C = particle->f0C; + spawned_particle->split_countdown = scale_game_frames(2); + spawned_particle->split_position_spread_scale = particle->split_position_spread_scale; } fast_vec_scale(pv, pv, random_float_between(lo, hi)); particle->pv.x = @@ -3377,7 +3381,8 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff particle->posv.f[2] = particle->posv.f[2] + random_float_between(nsp, sp); } tab = effect_texture_ids; - particle->b02 = tab[(particle->h0A + pv->f16 + (particle->b02 - tab[0])) & 7]; + particle->animated_texture_id = + tab[(particle->split_countdown + pv->f16 + (particle->animated_texture_id - tab[0])) & 7]; fast_vec_add(v0u.f, particle->posv.f, pv); k = pv->f14; if (scale_game_frames(3) < k) { @@ -3417,8 +3422,9 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff fast_vec_scale(pv, pv, 0.02f); fast_vec_normalize(collision_offset, coll_hit_normal.f, 0.055f); fast_vec_add(particle->posv.f, coll_hit_normal.f - 8, collision_offset); - if (particle->f0C < 200000.0f && (pv->f18 & 8) == 0) { - particle->f0C = particle->f0C + particle->f0C; + if (particle->split_position_spread_scale < 200000.0f && (pv->f18 & 8) == 0) { + particle->split_position_spread_scale = + particle->split_position_spread_scale + particle->split_position_spread_scale; } pv->f18 |= 8; } else { @@ -3429,8 +3435,9 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff f32 decayed_particle_scalar; kk2 = 8.0f / (d * 0.443f); pv->f16++; - decayed_particle_scalar = particle->f0C - 260000.0f / (f32)kk2 * d * 1.25f; - particle->f0C = decayed_particle_scalar; + decayed_particle_scalar = + particle->split_position_spread_scale - 260000.0f / (f32)kk2 * d * 1.25f; + particle->split_position_spread_scale = decayed_particle_scalar; if (decayed_particle_scalar <= 0.0f) { kill: FUN_L00_00267a08_26ff10(particle); @@ -3439,7 +3446,8 @@ void update_splitting_effect_particle_with_collision_response_and_fade(Moby_26ff } else { f32 d = frame_scale; kk2 = 8.0f / (d * 0.443f); - particle->f0C = particle->f0C + 260000.0f / (f32)kk2 * d; + particle->split_position_spread_scale = + particle->split_position_spread_scale + 260000.0f / (f32)kk2 * d; } f = convert_integer_to_float(pv->f14); { diff --git a/src/overlays/shared/ui/hud/draw_hud_item_selector_panel.c b/src/overlays/shared/ui/hud/draw_hud_item_selector_panel.c index ce43922d31..e7066835b8 100644 --- a/src/overlays/shared/ui/hud/draw_hud_item_selector_panel.c +++ b/src/overlays/shared/ui/hud/draw_hud_item_selector_panel.c @@ -429,7 +429,7 @@ extern void FUN_L00_0023b120(char *, int, int, int, int, int); int draw_hud_item_selector_panel(HudElem *rec) __asm__("FUN_L00_002382a0"); -int draw_hud_item_selector_panel(HudElem *rec) { +int draw_hud_item_selector_panel(HudElem *selector_element) { char *weapon_entry; int x, y, half_w, half_h, alpha; int marker_alpha; @@ -437,7 +437,7 @@ int draw_hud_item_selector_panel(HudElem *rec) { int color, shadow, text_y, id, item, prefix_length, text_length, j; float open, fade, angle; const char *text, *suffix; - unsigned char *counters = rec->cnt; + unsigned char *counters = selector_element->cnt; char formatted[80]; open = convert_integer_to_float(counters[0]) / @@ -464,9 +464,9 @@ int draw_hud_item_selector_panel(HudElem *rec) { angle += 0.875f; marker_alpha = truncate_float_to_s32(radius * angle); } - x = rec->unk50; - y = rec->unk54; - hud_screen_position(rec, &x, &y); + x = selector_element->unk50; + y = selector_element->unk54; + hud_screen_position(selector_element, &x, &y); half_w = D_L00_0015F718_gp / 2; half_h = D_L00_0015F71C_gp / 2; draw_hud_sprite(get_icon_frame(0xe934, 0), x, y, half_w, half_h, alpha); @@ -484,17 +484,18 @@ int draw_hud_item_selector_panel(HudElem *rec) { icon_x = x + D_L00_0015F720_gp + (int)(D_L00_0015F78C_gp * fast_cos(angle) * D_L00_0015F7C4_gp); icon_y = y + D_L00_0015F724_gp + (int)(D_L00_0015F78C_gp * fast_sin(angle)); - if (rec->unk74 == i && ((E_238C30 **)D_L00_0015FAC0)[D_L00_0015F72C_gp][i].id != 0) + if (selector_element->unk74 == i && + ((E_238C30 **)D_L00_0015FAC0)[D_L00_0015F72C_gp][i].id != 0) draw_hud_sprite( get_icon_frame(0xe99c, 0), icon_x - 0x13, icon_y - 0x13, 0x26, 0x26, marker_alpha); if (((E_238C30 **)D_L00_0015FAC0)[D_L00_0015F72C_gp][i].id != 0) { int icon_alpha; - if (i != rec->unk74) + if (i != selector_element->unk74) icon_alpha = truncate_float_to_s32((float)alpha * D_L00_0015F7C0); else icon_alpha = alpha; FUN_L00_0023b120( - (char *)rec, + (char *)selector_element, get_icon_frame(((E_238C30 **)D_L00_0015FAC0)[D_L00_0015F72C_gp][i].id, ((unsigned char *)((unsigned char *)item_text_variant)) [((E_238C30 **)D_L00_0015FAC0)[D_L00_0015F72C_gp][i].item] @@ -506,7 +507,7 @@ int draw_hud_item_selector_panel(HudElem *rec) { icon_alpha); } } - selected = rec->unk74; + selected = selector_element->unk74; if (selected >= 0 && *(int *)(((char **)D_L00_0015FAC0)[D_L00_0015F72C_gp] + selected * 0x1C) != 0) { color = fast_tween_color(l00_hud_item_selector_text_shadow_color_from, @@ -548,9 +549,9 @@ int draw_hud_item_selector_panel(HudElem *rec) { text = get_help_message_text(id); } if (text == 0) - return rec->w; + return selector_element->w; if (strlen((char *)text) == 0) - return rec->w; + return selector_element->w; text_length = strlen((char *)text); suffix = text; for (j = 0; j < text_length; j++) { @@ -600,7 +601,7 @@ int draw_hud_item_selector_panel(HudElem *rec) { font_print_center(x + D_L00_0015F720_gp, text_y, shadow, (void *)text, -1); } } - return rec->w; + return selector_element->w; } extern int D_L00_0015F72C __attribute__((sda)); @@ -1450,20 +1451,23 @@ s32 draw_hud_bolt_exclamation_panel(Hud *hud_element) { extern short D_00140986 NOT_SDA; int draw_hud_cropped_gauge_panel(char *rec) __asm__("FUN_L00_0023a640"); -int draw_hud_cropped_gauge_panel(char *rec) { +int draw_hud_cropped_gauge_panel(char *cropped_gauge_element) { int x, y; int sprite_width; - x = *(int *)(rec + 0x50); - y = *(int *)(rec + 0x54); - *(int *)(rec + 0x58) = 0x100; - *(int *)(rec + 0x5C) = 0x40; - hud_screen_position(rec, &x, &y); - apply_hud_slide_offset(rec, &x, &y, *(int *)(rec + 0x6C), 0); - sprite_width = *(int *)(rec + 0x74) * 0xDD / *(int *)(rec + 0x8) + 0x1B; + x = *(int *)(cropped_gauge_element + 0x50); + y = *(int *)(cropped_gauge_element + 0x54); + *(int *)(cropped_gauge_element + 0x58) = 0x100; + *(int *)(cropped_gauge_element + 0x5C) = 0x40; + hud_screen_position(cropped_gauge_element, &x, &y); + apply_hud_slide_offset( + cropped_gauge_element, &x, &y, *(int *)(cropped_gauge_element + 0x6C), 0); + sprite_width = + *(int *)(cropped_gauge_element + 0x74) * 0xDD / *(int *)(cropped_gauge_element + 0x8) + + 0x1B; draw_cropped_hud_sprite(get_icon_frame(0x7558, 1), x, y, sprite_width, 0x40, 0x80); draw_hud_sprite(get_icon_frame(0x7558, 0), x, y, 0x100, 0x40, 0x80); draw_hud_sprite(get_icon_frame(0x7558, 2), x, y, 0x20, 0x20, D_00140986 ? 0x80 : 0); - return *(int *)(rec + 0x58); + return *(int *)(cropped_gauge_element + 0x58); } /* func_L00_00236750 without the offsets: a 32 x 32 element with a timer of 30 + func_001F9850(120). */ diff --git a/src/overlays/shared/ui/hud/hud_keep_visible.c b/src/overlays/shared/ui/hud/hud_keep_visible.c index cb380c384e..738f9aa6e5 100644 --- a/src/overlays/shared/ui/hud/hud_keep_visible.c +++ b/src/overlays/shared/ui/hud/hud_keep_visible.c @@ -42,18 +42,18 @@ void reset_hud_animation_channels(void) { /* Offsets x/y for the element's anchor flags (centre or right/bottom alignment). */ int hud_screen_position(HudElem *rec, int *x, int *y) __asm__("FUN_L00_00235a70"); -int hud_screen_position(HudElem *rec, int *x, int *y) { - int w = rec->w; - int h = rec->h; - int flags = rec->flags; +int hud_screen_position(HudElem *hud_element, int *x, int *y) { + int w = hud_element->w; + int h = hud_element->h; + int flags = hud_element->flags; if ((flags ^ 1) & 1) { if (!(flags & 2)) { *y -= h >> 1; } } - if (!(rec->flags & 4)) { - if (rec->flags & 8) { + if (!(hud_element->flags & 4)) { + if (hud_element->flags & 8) { *x -= w; } else { *x -= w >> 1; @@ -186,7 +186,7 @@ void reset_numeric_hud_element_32x32_base(HudElem *hud_element) { s32 hud_keep_visible(s32 key, s32 val) __asm__("FUN_L00_00235e18"); -s32 hud_keep_visible(s32 key, s32 val) { +s32 hud_keep_visible(s32 key, s32 minimum_visible_frames) { s32 i; s32 r; HudElem *hud_element; @@ -197,7 +197,8 @@ s32 hud_keep_visible(s32 key, s32 val) { } if (i < 13 && hud_elements[i].unk68 == 0) { hud_element = hud_elements + i; - hud_element->unk7C = (val < hud_element->unk7C) ? hud_element->unk7C : val; + hud_element->unk7C = (minimum_visible_frames < hud_element->unk7C) ? hud_element->unk7C + : minimum_visible_frames; return 0; } return 1; diff --git a/src/overlays/shared/ui/menus/initialize_pause_menu.c b/src/overlays/shared/ui/menus/initialize_pause_menu.c index 49bb1ad501..22b8033f9b 100644 --- a/src/overlays/shared/ui/menus/initialize_pause_menu.c +++ b/src/overlays/shared/ui/menus/initialize_pause_menu.c @@ -116,7 +116,7 @@ struct Ent { typedef struct { u8 pad0[0x224]; - s32 w224; + s32 transition_target_level; u8 pad228[0x18]; s32 unk240; s32 unk244; @@ -127,7 +127,7 @@ typedef struct { u8 pad0[0xB0]; f32 tan_half_fov; u8 padB4[0x164]; - s32 unk218; + s32 fog_start_distance; f32 unk21C; u8 pad220[8]; f32 unk228; @@ -181,7 +181,7 @@ extern void queue_language_zero_movie(void *) __asm__("FUN_L00_002994f8"); extern void queue_movie_with_game_language(void *) __asm__("FUN_L00_00299560"); extern void start_slideshow(void) __asm__("FUN_L00_00299a68"); extern Own l00_pause_menu_default_page_owner __asm__("D_L00_001B2588"); -extern Own D_L00_001B3518; +extern Own l00_pause_menu_close_on_action_page_owner __asm__("D_L00_001B3518"); extern Own l00_pause_menu_level_transition_on_action_page_owner __asm__("D_L00_001B6088"); extern Own l00_pause_menu_state_preserving_entry_page_owner __asm__("D_L00_001B6B38"); extern Own D_L00_001B86C8; @@ -213,6 +213,9 @@ void initialize_pause_menu(void) { enum { PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION = 15 }; + enum { + PAUSE_MENU_STATE_CLOSE_ON_ACTION = 11 + }; struct GameState *state = &D_L00_001B9CF0; Own *page; s32 small_buffers = 0; @@ -224,8 +227,8 @@ void initialize_pause_menu(void) { state->unk124 = 0; state->unkD0 = 0; if (state_id == 10) { - D_L00_001B9CF0.state = 11; - page = &D_L00_001B3518; + D_L00_001B9CF0.state = PAUSE_MENU_STATE_CLOSE_ON_ACTION; + page = &l00_pause_menu_close_on_action_page_owner; state->owner = page; state->unk8 = page; small_buffers = 1; @@ -264,9 +267,10 @@ void initialize_pause_menu(void) { D_L00_001B9CF0.unk8 = D_L00_001B9CF0.pending_owner; pending_state = D_L00_001B9CF0.pending_state; D_L00_001B9CF0.state = pending_state; - if (pending_state == 11 || pending_state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION) { + if (pending_state == PAUSE_MENU_STATE_CLOSE_ON_ACTION || + pending_state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION) { small_buffers = 1; - D_L00_001841F0.w224 = (s32)D_L00_001B9CF0.unkE4; + D_L00_001841F0.transition_target_level = (s32)D_L00_001B9CF0.unkE4; } D_L00_001B9CF0.pending_owner = 0; D_L00_001B9CF0.pending_state = PAUSE_MENU_PENDING_STATE_CLEARED; @@ -291,7 +295,7 @@ void initialize_pause_menu(void) { ((ViewSettings *)D_L00_0016CA40)->unk21C = unk21C; ((ViewSettings *)D_L00_0016CA40)->unk228 = unk228; ((ViewSettings *)D_L00_0016CA40)->unk22C = 0; - ((ViewSettings *)D_L00_0016CA40)->unk218 = 0; + ((ViewSettings *)D_L00_0016CA40)->fog_start_distance = 0; } update_view_context(); reset_active_camera_position_and_basis(); @@ -334,12 +338,12 @@ void initialize_pause_menu(void) { D_L00_0015F578 = 0x2000; vu1_init_chain(); - if (D_L00_001B9CF0.state == 11 || + if (D_L00_001B9CF0.state == PAUSE_MENU_STATE_CLOSE_ON_ACTION || D_L00_001B9CF0.state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION) { initialize_render_archive_transfer(); } apply_group_entry_adjustment(0); - if (D_L00_001B9CF0.state == 11 || + if (D_L00_001B9CF0.state == PAUSE_MENU_STATE_CLOSE_ON_ACTION || D_L00_001B9CF0.state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION || D_L00_001B9CF0.state == 0x12) { decompress_and_relocate_selected_groups(1); @@ -349,7 +353,7 @@ void initialize_pause_menu(void) { transfer_draw_buffer_chunks(D_L00_001B9CF0.unk10, draw_buffer_address, frame_size << 11); texture_start = gs_texture_allocation_start; D_L00_001B9CF0.saved_texture_start = texture_start; - if (D_L00_001B9CF0.state == 11 || + if (D_L00_001B9CF0.state == PAUSE_MENU_STATE_CLOSE_ON_ACTION || D_L00_001B9CF0.state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ON_ACTION) { D_L00_001841F0.unk240 = texture_start; texture_region_end = texture_start + 0x40000; @@ -501,6 +505,12 @@ void close_pause_menu(void) { void update_pause_menu(void) __asm__("FUN_L00_00276bd0"); void update_pause_menu(void) { + enum { + PAUSE_MENU_STATE_CLOSE_ON_ACTION_ENTRY = 0xA + }; + enum { + PAUSE_MENU_STATE_DEFAULT_PAGE_ENTRY = 0 + }; Own *owner; Own *u8p; Mth *active_callback_object; @@ -549,8 +559,8 @@ void update_pause_menu(void) { D_L00_001B9CF0.unk104 = 0; D_L00_001B9CF0.unk10 = 0; if (D_L00_001B9CF0.unkC == 2) { - debug_print(level_transition_debug_format, D_L00_001841F0.w224); - prepare_target_level_transition(D_L00_001841F0.w224); + debug_print(level_transition_debug_format, D_L00_001841F0.transition_target_level); + prepare_target_level_transition(D_L00_001841F0.transition_target_level); } else if (D_L00_001B9CF0.unkC == 3) { previous_decode_mode = decode_mode; decode_mode = 2; @@ -597,7 +607,8 @@ void update_pause_menu(void) { return; } scene_state = D_L00_001B9CF0.state; - if (scene_state == 0 || scene_state == 0xA || + if (scene_state == PAUSE_MENU_STATE_DEFAULT_PAGE_ENTRY || + scene_state == PAUSE_MENU_STATE_CLOSE_ON_ACTION_ENTRY || scene_state == PAUSE_MENU_STATE_LEVEL_TRANSITION_ENTRY || scene_state == 0x11 || scene_state == PAUSE_MENU_STATE_EXIT_GUARDED_ENTRY || scene_state == 0x2D || scene_state == PAUSE_MENU_STATE_PRESERVE_STATE_ENTRY) { diff --git a/src/overlays/shared/vehicles/background_ship_1.c b/src/overlays/shared/vehicles/background_ship_1.c index 0ae78b7a4f..e6478bc74e 100644 --- a/src/overlays/shared/vehicles/background_ship_1.c +++ b/src/overlays/shared/vehicles/background_ship_1.c @@ -26,7 +26,7 @@ typedef struct BackgroundShip1Vars { u8 unk2C; u8 pad2D[0x33]; s32 unk60; - f32 unk64; + f32 path_progress; f32 unk68; s32 unk6C; f32 unk70; @@ -229,7 +229,7 @@ void background_ship_1_update(char *moby) { moby_data->unk6C = invalid_index; MOBY(moby)->state = BACKGROUND_SHIP_1_FOLLOW_PATH; MOBY(moby)->flags |= 0x10; - moby_data->unk64 = moby_data->unk74 * (float)*(int *)path; + moby_data->path_progress = moby_data->unk74 * (float)*(int *)path; break; } case BACKGROUND_SHIP_1_FOLLOW_PATH: @@ -238,16 +238,25 @@ void background_ship_1_update(char *moby) { moby_data->unk6C = func_0022ED80_r(1, 4, (int)moby); } path_travel_distance = *(float *)&background_ship_1_path_travel_speed_gp * frame_time; - moby_data->unk64 = moby_data->unk64 + path_travel_distance / moby_data->unk70; - if ((float)*(int *)path < moby_data->unk64) { - moby_data->unk64 = moby_data->unk64 - (float)*(int *)path; + moby_data->path_progress = + moby_data->path_progress + path_travel_distance / moby_data->unk70; + if ((float)*(int *)path < moby_data->path_progress) { + moby_data->path_progress = moby_data->path_progress - (float)*(int *)path; } if (current_level_index == 9) { - sample_camera_path( - (int *)path, 1, &MOBY(moby)->pos, (float *)&MOBY(moby)->rot, 0, moby_data->unk64); + sample_camera_path((int *)path, + 1, + &MOBY(moby)->pos, + (float *)&MOBY(moby)->rot, + 0, + moby_data->path_progress); } else { - sample_camera_path( - (int *)path, 0, &MOBY(moby)->pos, (float *)&MOBY(moby)->rot, 0, moby_data->unk64); + sample_camera_path((int *)path, + 0, + &MOBY(moby)->pos, + (float *)&MOBY(moby)->rot, + 0, + moby_data->path_progress); } if (MOBY(moby)->pos.x < 8.0f) { MOBY(moby)->collision = 0; diff --git a/src/overlays/shared/vehicles/background_ship_2.c b/src/overlays/shared/vehicles/background_ship_2.c index 2db701114b..ca28275e95 100644 --- a/src/overlays/shared/vehicles/background_ship_2.c +++ b/src/overlays/shared/vehicles/background_ship_2.c @@ -26,7 +26,7 @@ typedef struct BackgroundShip2Vars { u8 unk2C; u8 pad2D[0x33]; s32 unk60; - f32 unk64; + f32 path_progress; f32 unk68; s32 unk6C; f32 unk70; @@ -255,7 +255,7 @@ void background_ship_2_update(char *moby) { moby_data->unk6C = invalid_index; MOBY(moby)->state = BACKGROUND_SHIP_2_FOLLOW_PATH; MOBY(moby)->flags |= 0x10; - moby_data->unk64 = moby_data->unk74 * (float)*(int *)path; + moby_data->path_progress = moby_data->unk74 * (float)*(int *)path; break; } case BACKGROUND_SHIP_2_FOLLOW_PATH: @@ -271,16 +271,25 @@ void background_ship_2_update(char *moby) { if (current_level_index == 10) { path_travel_distance = path_travel_distance * 0.25f; } - moby_data->unk64 = moby_data->unk64 + path_travel_distance / moby_data->unk70; - if ((float)*(int *)path < moby_data->unk64) { - moby_data->unk64 = moby_data->unk64 - (float)*(int *)path; + moby_data->path_progress = + moby_data->path_progress + path_travel_distance / moby_data->unk70; + if ((float)*(int *)path < moby_data->path_progress) { + moby_data->path_progress = moby_data->path_progress - (float)*(int *)path; } if ((unsigned int)(current_level_index - 9) < 2) { - sample_camera_path( - (int *)path, 1, &MOBY(moby)->pos, (float *)&MOBY(moby)->rot, 0, moby_data->unk64); + sample_camera_path((int *)path, + 1, + &MOBY(moby)->pos, + (float *)&MOBY(moby)->rot, + 0, + moby_data->path_progress); } else { - sample_camera_path( - (int *)path, 0, &MOBY(moby)->pos, (float *)&MOBY(moby)->rot, 0, moby_data->unk64); + sample_camera_path((int *)path, + 0, + &MOBY(moby)->pos, + (float *)&MOBY(moby)->rot, + 0, + moby_data->path_progress); } if (MOBY(moby)->pos.x < 8.0f) { MOBY(moby)->collision = 0; diff --git a/src/overlays/shared/vehicles/giant_clank_charged_blast.c b/src/overlays/shared/vehicles/giant_clank_charged_blast.c index c2b41fc355..dc0deb8289 100644 --- a/src/overlays/shared/vehicles/giant_clank_charged_blast.c +++ b/src/overlays/shared/vehicles/giant_clank_charged_blast.c @@ -168,7 +168,7 @@ typedef struct { typedef struct { char pad0[0x98]; - float f98; + float blast_heading_angle; char pad9C[0x2008]; unsigned char f20A4; } Hero29FF90; @@ -193,7 +193,7 @@ typedef struct { typedef struct { char pad0[0xA]; - short fA; + short particle_frame_count; float fC; char pad10[0x10]; PartSub29FF90 sub; @@ -361,8 +361,10 @@ void giant_clank_charged_blast_update(Moby29FF90 *moby) { D_L15_0015F320.on = 0; D_L15_0015F330.on = 0; moby_data->f10 = 0; - moby_data->vel[0] = fast_cos(((Hero29FF90 *)&hero)->f98) * (D_0015ED6C * 40.0f); - moby_data->vel[1] = fast_sin(((Hero29FF90 *)&hero)->f98) * (D_0015ED6C * 40.0f); + moby_data->vel[0] = + fast_cos(((Hero29FF90 *)&hero)->blast_heading_angle) * (D_0015ED6C * 40.0f); + moby_data->vel[1] = + fast_sin(((Hero29FF90 *)&hero)->blast_heading_angle) * (D_0015ED6C * 40.0f); moby_data->vel[2] = 0.0f; moby->state = EXPANDING_BLAST; moby_data->f14 = 0; @@ -453,9 +455,10 @@ void giant_clank_charged_blast_update(Moby29FF90 *moby) { blast_center_particle->fC = random_float_between(80000.0f, 120000.0f); } blast_center_particle->fC = blast_center_particle->fC * r; - blast_center_particle->fA = scale_game_frames(2); + blast_center_particle->particle_frame_count = scale_game_frames(2); particle_subrecord->f10 = - 1.0f / convert_integer_to_float(blast_center_particle->fA); + 1.0f / + convert_integer_to_float(blast_center_particle->particle_frame_count); particle_subrecord->f18 = 0x7F7F7F; particle_subrecord->f16 = 3; } diff --git a/src/overlays/shared/vehicles/giant_clank_missile.c b/src/overlays/shared/vehicles/giant_clank_missile.c index 853cac0df2..37ac15645f 100644 --- a/src/overlays/shared/vehicles/giant_clank_missile.c +++ b/src/overlays/shared/vehicles/giant_clank_missile.c @@ -218,9 +218,9 @@ typedef struct { float yaw0; float pitch0; float speed_end; - int f38; - short f3C; - short f3E; + int target_leading_enabled; + short velocity_inheritance_timer; + short velocity_inheritance_duration_frames; } D_29E8A0; typedef struct M_29E8A0 { @@ -323,10 +323,12 @@ void giant_clank_missile_update(M_29E8A0 *missile_moby) { target_moby = missile_data->target; missile_data->speed = missile_data->speed + (missile_data->speed_end - missile_data->speed) / 10.0f * D_0015ED64; - fast_dec_timer_s16(&missile_data->f3C); + fast_dec_timer_s16(&missile_data->velocity_inheritance_timer); { - float velocity_inheritance_frames_remaining = convert_integer_to_float(missile_data->f3C); - float velocity_inheritance_frames_total = convert_integer_to_float(missile_data->f3E); + float velocity_inheritance_frames_remaining = + convert_integer_to_float(missile_data->velocity_inheritance_timer); + float velocity_inheritance_frames_total = + convert_integer_to_float(missile_data->velocity_inheritance_duration_frames); fast_vec_scale(up, ((char *)&D_0013F490), velocity_inheritance_frames_remaining / velocity_inheritance_frames_total); @@ -357,7 +359,7 @@ void giant_clank_missile_update(M_29E8A0 *missile_moby) { qcopy(tp, target_moby->pos); tp[2] = tp[2] + missile_data->zoff; fast_vec_sub(delta, tp, missile_moby->pos); - if (missile_data->f38 != 0) { + if (missile_data->target_leading_enabled != 0) { float intercept_quadratic_coefficient, intercept_linear_coefficient, c, intercept_time_plus_root, intercept_time_minus_root, discriminant_sqrt; fast_vec_sub(dv, tp, missile_data->v); diff --git a/src/overlays/shared/vehicles/gunship.c b/src/overlays/shared/vehicles/gunship.c index ecef6e1262..d2970fca80 100644 --- a/src/overlays/shared/vehicles/gunship.c +++ b/src/overlays/shared/vehicles/gunship.c @@ -200,6 +200,10 @@ void gunship_update(struct Moby *moby) { GUNSHIP_PATH_STATE_WAIT_FOR_PATH = 2, GUNSHIP_PATH_STATE_WAIT_FOR_RESUME_TIMER = 3 }; + enum { + PATH_CURSOR_STATE_NEEDS_POSITION_SETUP = 0, + PATH_CURSOR_STATE_POSITION_SETUP_COMPLETE = 2 + }; QVec path_displacement; QVec zero; QVec previous_rotation; @@ -307,7 +311,7 @@ void gunship_update(struct Moby *moby) { } v->unk121 = (moby - (struct Moby *)D_L01_0015FFD8) / 2 % 7; initialize_path_descriptor(path_cursor); - if (path_cursor->state == 0) { + if (path_cursor->state == PATH_CURSOR_STATE_NEEDS_POSITION_SETUP) { if (path_cursor->idx <= 0) { s32 selected_node_index = select_point_index_by_distance(&moby->pos, path_cursor->nodes, 0.0f); @@ -322,7 +326,7 @@ void gunship_update(struct Moby *moby) { path_cursor->heading = fast_arc_tan(path_cursor->nodes->node[path_cursor->idx].v.x - moby->pos.x, path_cursor->nodes->node[path_cursor->idx].v.y - moby->pos.y); - path_cursor->state = 2; + path_cursor->state = PATH_CURSOR_STATE_POSITION_SETUP_COMPLETE; path_cursor->unk8 = 0; path_cursor->unk1C = 0; } diff --git a/src/overlays/shared/vehicles/hoverboard.c b/src/overlays/shared/vehicles/hoverboard.c index da6500cd21..9d9f2d1e11 100644 --- a/src/overlays/shared/vehicles/hoverboard.c +++ b/src/overlays/shared/vehicles/hoverboard.c @@ -51,7 +51,7 @@ void hoverboard_update(unsigned char *moby) { if (*(int *)(hoverboard_vars + 0x50) == 0) { qcopy(hoverboard_vars + 0x10, &MOBY(moby)->pos); } - MOBY(moby)->state = 1; + MOBY(moby)->state = HOVERBOARD_STATE_WAIT_FOR_CONTROL_MODE_EXIT; MOBY(moby)->update_dist = 0xff; } break; @@ -68,7 +68,7 @@ void hoverboard_update(unsigned char *moby) { if (*(int *)(hoverboard_vars + 0x50) == 0) { qcopy(&MOBY(moby)->pos, hoverboard_vars + 0x10); } - MOBY(moby)->state = 0; + MOBY(moby)->state = HOVERBOARD_STATE_WAIT_FOR_PLAYER_APPROACH; } break; case 2: diff --git a/src/overlays/shared/vendor/vendor.c b/src/overlays/shared/vendor/vendor.c index 6668001293..03cc51e4e9 100644 --- a/src/overlays/shared/vendor/vendor.c +++ b/src/overlays/shared/vendor/vendor.c @@ -37,7 +37,7 @@ typedef struct { typedef struct { u8 p0[0x24]; - f32 f24; + f32 auxiliary_scale_multiplier; } N_2a57a8; typedef struct { @@ -46,7 +46,7 @@ typedef struct { u8 p1C[0x24 - 0x1C]; N_2a57a8 *p24; u8 p28[4]; - f32 f2C; + f32 auxiliary_scale; u8 p30[2]; u16 h32; u16 h34; @@ -57,22 +57,22 @@ typedef struct { typedef struct { s32 i0, i4; u8 p8[4]; - M_2a57a8 *mC; + M_2a57a8 *auxiliary_moby; u8 p10[0x90 - 0x10]; - f32 f90; + f32 effect_scale_factor; } Q_2a57a8; typedef struct { u8 p0[0x10]; f32 f10, f14, f18; u8 p1C[4]; - u8 b20; + u8 vendor_state; u8 p21[0x52 - 0x21]; u8 b52, b53; u8 p54[0x78 - 0x54]; Q_2a57a8 *q; u8 p7C[0x90 - 0x7C]; - s32 i90; + s32 pulse_color; } P_2a57a8; typedef struct { @@ -310,38 +310,38 @@ void vendor_update(P_2a57a8 *vendor_moby) { vendor_color_pulse_phase += 0.05f; if (vendor_color_pulse_phase > 3.14f) vendor_color_pulse_phase = -3.14f; - vendor_moby->i90 = + vendor_moby->pulse_color = (((s32)(fast_sin(vendor_color_pulse_phase) * 48.0f) + 0x60) * 0x10101) | 0x80000000; - switch (vendor_moby->b20) { + switch (vendor_moby->vendor_state) { case VENDOR_INITIALIZE: - vendor_moby->b20 = 1; + vendor_moby->vendor_state = VENDOR_WAIT_FOR_HERO; q->i0 = 0; q->i4 = 0; - q->mC = create_moby(0x477); - q->mC->h34 |= 2; - q->mC->h32 = 0x40; - q->mC->f10 = vendor_moby->f10; - q->mC->f14 = vendor_moby->f14; - q->mC->f18 = vendor_moby->f18 + 2.95f; - q->mC->b73 = 0x20; - q->f90 = 0.0f; + q->auxiliary_moby = create_moby(0x477); + q->auxiliary_moby->h34 |= 2; + q->auxiliary_moby->h32 = 0x40; + q->auxiliary_moby->f10 = vendor_moby->f10; + q->auxiliary_moby->f14 = vendor_moby->f14; + q->auxiliary_moby->f18 = vendor_moby->f18 + 2.95f; + q->auxiliary_moby->b73 = 0x20; + q->effect_scale_factor = 0.0f; for (i = 0; i < 2; i++) { - attach_manipulator(q->mC, i, (u8 *)q + 0x10 + i * 0x40); + attach_manipulator(q->auxiliary_moby, i, (u8 *)q + 0x10 + i * 0x40); } - update_entity(q->mC); + update_entity(q->auxiliary_moby); break; case VENDOR_WAIT_FOR_HERO: - if (q->f90 > 0.0f) - q->f90 -= 0.1f; - if (q->f90 <= 0.0f) - q->mC->h34 |= 1; + if (q->effect_scale_factor > 0.0f) + q->effect_scale_factor -= 0.1f; + if (q->effect_scale_factor <= 0.0f) + q->auxiliary_moby->h34 |= 1; if (!(D_L00_0015F5CC_2a57a8 & 7) && vector_distance_xy(&vendor_moby->f10, &hero_pos) <= 16.0f && absolute_float(vendor_moby->f18 - hero_pos.f[2]) <= 8.0f) { - vendor_moby->b20 = 2; + vendor_moby->vendor_state = VENDOR_HERO_NEARBY; if (vendor_moby->b53 != 1) blend_moby_animation(vendor_moby, 1, 0, 10); - q->mC->h34 &= 0xFFFE; + q->auxiliary_moby->h34 &= 0xFFFE; } add_draw_callback(FUN_L00_002a5040_2a57a8, vendor_moby); build_axis_rotation_quaternion((u8 *)q + 0x20, 2, vendor_manipulator_rotation_phase); @@ -351,16 +351,17 @@ void vendor_update(P_2a57a8 *vendor_moby) { fast_add_rotations(vendor_manipulator_rotation_phase, 0.01f); vendor_manipulator_counter_rotation_phase = fast_add_rotations(vendor_manipulator_counter_rotation_phase, -0.02f); - q->mC->f2C = q->f90 * q->mC->p24->f24 * 2.5f; - update_entity(q->mC); + q->auxiliary_moby->auxiliary_scale = + q->effect_scale_factor * q->auxiliary_moby->p24->auxiliary_scale_multiplier * 2.5f; + update_entity(q->auxiliary_moby); break; case VENDOR_HERO_NEARBY: - if (q->f90 < 1.0f) - q->f90 += 0.1f; + if (q->effect_scale_factor < 1.0f) + q->effect_scale_factor += 0.1f; hero_distance = vector_distance_xy(&vendor_moby->f10, &hero_pos); z = absolute_float(vendor_moby->f18 - hero_pos.f[2]); if (!(D_L00_0015F5CC_2a57a8 & 7) && (hero_distance > 18.0f || z > 10.0f)) { - vendor_moby->b20 = 1; + vendor_moby->vendor_state = VENDOR_WAIT_FOR_HERO; if (vendor_moby->b53) blend_moby_animation(vendor_moby, 0, 0, 10); break; @@ -375,8 +376,9 @@ void vendor_update(P_2a57a8 *vendor_moby) { fast_add_rotations(vendor_manipulator_rotation_phase, 0.01f); vendor_manipulator_counter_rotation_phase = fast_add_rotations(vendor_manipulator_counter_rotation_phase, -0.02f); - q->mC->f2C = q->f90 * q->mC->p24->f24 * 2.5f; - update_entity(q->mC); + q->auxiliary_moby->auxiliary_scale = + q->effect_scale_factor * q->auxiliary_moby->p24->auxiliary_scale_multiplier * 2.5f; + update_entity(q->auxiliary_moby); if (hero.state.control_mode != 0 && hero.state.current != 3 && hero.state.control_mode != 1) { interaction_allowed = 0; @@ -408,14 +410,15 @@ void vendor_update(P_2a57a8 *vendor_moby) { help_message_succeeded = try_set_help_message(1, 0x53E3) != 0; if ((pad_pressed_lui & 0x10) && interaction_allowed && help_message_succeeded) { open_vendor_menu(vendor_moby); - vendor_moby->b20 = 3; + vendor_moby->vendor_state = VENDOR_ZERO_AUXILIARY_SCALE; } break; case VENDOR_ZERO_AUXILIARY_SCALE: - if (q->mC) { - q->f90 = 0.0f; - q->mC->f2C = q->mC->p24->f24 * q->f90 * 2.5f; - update_entity(q->mC); + if (q->auxiliary_moby) { + q->effect_scale_factor = 0.0f; + q->auxiliary_moby->auxiliary_scale = + q->auxiliary_moby->p24->auxiliary_scale_multiplier * q->effect_scale_factor * 2.5f; + update_entity(q->auxiliary_moby); } break; } diff --git a/src/overlays/shared/vendor/vendor_menu.c b/src/overlays/shared/vendor/vendor_menu.c index 1c02e303bd..e91e05d1a3 100644 --- a/src/overlays/shared/vendor/vendor_menu.c +++ b/src/overlays/shared/vendor/vendor_menu.c @@ -855,7 +855,7 @@ typedef struct { typedef struct { f32 f0; f32 f4; - f32 f8; + f32 item_local_position_offset_z; char padC[4]; f32 f10; f32 f14; @@ -1353,7 +1353,8 @@ void update_vendor_menu(void) { position_contribution_scratch.f[1] = l00_vendor_item_display_transform_parameters[CUR_ITEM.item].f4; position_contribution_scratch.f[2] = - l00_vendor_item_display_transform_parameters[CUR_ITEM.item].f8; + l00_vendor_item_display_transform_parameters[CUR_ITEM.item] + .item_local_position_offset_z; euler_rotation_basis(vendor_menu.menu_mobys[3].mtx, &vendor_menu.menu_mobys[3].rot); transform_vector_by_basis(&position_contribution_scratch, &position_contribution_scratch, diff --git a/src/overlays/shared/weapons/bomb_glove.c b/src/overlays/shared/weapons/bomb_glove.c index 30045edcfd..449509769c 100644 --- a/src/overlays/shared/weapons/bomb_glove.c +++ b/src/overlays/shared/weapons/bomb_glove.c @@ -38,7 +38,7 @@ typedef struct { typedef struct { u8 pad0[0x50]; u16 deliveries; /* D_001416D0: saturates at 0xFFFF */ - u16 unkA2; + u16 max_delivery_frame_bucket; u32 levels; } DeliveryStats_2c26c8; @@ -359,8 +359,8 @@ void bomb_glove_update(struct Moby *moby) { { s32 frames = scale_game_frames(D_0015EEA4); frames /= 600; - if (((DeliveryStats_2c26c8 *)item_usage)->unkA2 < frames) - ((DeliveryStats_2c26c8 *)item_usage)->unkA2 = + if (((DeliveryStats_2c26c8 *)item_usage)->max_delivery_frame_bucket < frames) + ((DeliveryStats_2c26c8 *)item_usage)->max_delivery_frame_bucket = scale_game_frames(D_0015EEA4) / 600; } ((DeliveryStats_2c26c8 *)item_usage)->levels = diff --git a/src/overlays/shared/weapons/bomb_glove_bomb.c b/src/overlays/shared/weapons/bomb_glove_bomb.c index db446b3622..e7712f5e3f 100644 --- a/src/overlays/shared/weapons/bomb_glove_bomb.c +++ b/src/overlays/shared/weapons/bomb_glove_bomb.c @@ -33,7 +33,7 @@ typedef struct { char p0[0x80]; float pos[4]; char p90[0x2FC - 0x90]; - unsigned char *p2FC; + unsigned char *ground_support_moby; char p300[0x1090 - 0x300]; M910 *hero; char p1094[0x2080 - 0x1094]; @@ -109,11 +109,11 @@ typedef struct { Vec_2adb30 v; char pad10[0x40]; M910 *owner; - short h54; - short h56; + short fuse_timer; + short landing_prediction_disabled; char pad58[0x10]; - short h68; - short h6a; + short splash_frame_counter; + short color_animation_counter; } BombData; struct BombMoby { @@ -1104,7 +1104,11 @@ void bomb_update(BombMoby *m) __asm__("FUN_L00_002adb30"); /* Moby class 121 */ void bomb_update(BombMoby *bomb_moby) { - B910 rec = l00_bomb_camera_blast_parameters; + enum { + BOMB_STATE_THROWN = 1, + BOMB_STATE_EXPANDING_BLAST = 2 + }; + B910 camera_blast_parameters = l00_bomb_camera_blast_parameters; Vec_2adb30 delta; Vec_2adb30 bomb_pre_motion_position; Vec_2adb30 blast_velocity; @@ -1118,27 +1122,30 @@ void bomb_update(BombMoby *bomb_moby) { b.f[2] = 1.0f; d = bomb_moby->d; if ((((G910 *)&hero)->hero == 0 || ((G910 *)&hero)->hero->cls != 0xC0) && - bomb_moby->state == 0) { + bomb_moby->state == BOMB_STATE_HELD) { mark_moby_for_removal(bomb_moby); return; } - if (((G910 *)&hero)->b20A4 != 0 && bomb_moby->state == 0) { + if (((G910 *)&hero)->b20A4 != 0 && bomb_moby->state == BOMB_STATE_HELD) { mark_moby_for_removal(bomb_moby); return; } - if ((((G910 *)&hero)->b20A5 != 0 || ((G910 *)&hero)->b20AF != 0) && bomb_moby->state == 0) { + if ((((G910 *)&hero)->b20A5 != 0 || ((G910 *)&hero)->b20AF != 0) && + bomb_moby->state == BOMB_STATE_HELD) { bomb_moby->flags |= 0x41; } else { bomb_moby->flags &= ~0x41; } - if (d->owner->cls == 0xC0 && d->h56 == 0 && FUN_001f9af0_2adb30(d) > 0.0f) { - if (((G910 *)&hero)->p2FC == 0 || FUN_L00_002603d0_2adb30(((G910 *)&hero)->p2FC) == 0) { + if (d->owner->cls == 0xC0 && d->landing_prediction_disabled == 0 && + FUN_001f9af0_2adb30(d) > 0.0f) { + if (((G910 *)&hero)->ground_support_moby == 0 || + FUN_L00_002603d0_2adb30(((G910 *)&hero)->ground_support_moby) == 0) { FUN_L00_002ad410_2adb30(d, bomb_moby, 1); } else if (FUN_L00_002ad410_2adb30(d, bomb_moby, 0) == 0) { FUN_L00_002ad410_2adb30(d, bomb_moby, 2); } } - if (bomb_moby->state == 1) { + if (bomb_moby->state == BOMB_STATE_THROWN) { Vec_2adb30 c; float t; int cr; @@ -1149,13 +1156,14 @@ void bomb_update(BombMoby *bomb_moby) { c.f[1] = 128.0f; c.f[2] = 128.0f; c.f[3] = 255.0f; - fast_dec_timer_s16(&d->h6a); - t = convert_integer_to_float(d->h6a) / convert_integer_to_float(FUN_001f96f8_2adb30(0x1E)); + fast_dec_timer_s16(&d->color_animation_counter); + t = convert_integer_to_float(d->color_animation_counter) / + convert_integer_to_float(FUN_001f96f8_2adb30(0x1E)); cr = truncate_float_to_s32((c.f[0] - 255.0f) * t + 255.0f); cg = truncate_float_to_s32((c.f[1] - 64.0f) * t + 64.0f); cb = truncate_float_to_s32((c.f[2] - 64.0f) * t + 64.0f); bomb_moby->color = (cb << 16) | (0xFF << 24) | (cg << 8) | cr; - if (d->h68 == 0) { + if (d->splash_frame_counter == 0) { if ((D_L00_0015F5CC_2adb30 & 7) == 0) { int i; for (i = 0; i < *(int *)&bomb_sparks_per_emission; i++) { @@ -1218,7 +1226,7 @@ void bomb_update(BombMoby *bomb_moby) { bomb_moby->ry = fast_add_rotations(bomb_moby->ry, frame_time_macro * 7.8539815f); qcopy_nc(&bomb_pre_motion_position, &bomb_moby->pos); fast_vec_add(&bomb_moby->pos, &bomb_moby->pos, d); - if (d->h68 == 0) { + if (d->splash_frame_counter == 0) { d->v.f[2] -= frame_time_sq_macro * 11.0f; } else { d->v.f[2] -= frame_time_sq_macro * 11.0f / 10.0f; @@ -1231,7 +1239,7 @@ void bomb_update(BombMoby *bomb_moby) { } q.moby = bomb_moby; q.flags = 0x830000; - if (d->h54 < FUN_001f96f8_2adb30(0x12C) - FUN_001f96f8_2adb30(0xA)) { + if (d->fuse_timer < FUN_001f96f8_2adb30(0x12C) - FUN_001f96f8_2adb30(0xA)) { q.flags |= 1; } q.iE0 = 1; @@ -1243,12 +1251,13 @@ void bomb_update(BombMoby *bomb_moby) { q.kind = 2; q.cls = bomb_moby->cls; q.on = 1; - if (d->h68 != 0) { - d->h68++; + if (d->splash_frame_counter != 0) { + d->splash_frame_counter++; } if (collision_line( &bomb_pre_motion_position, &bomb_moby->pos, 0x10, (int)bomb_moby, (int)&q)) { - if (d->h68 == 0 && collision_hit_material() == 0 && d->v.f[2] < 0.0f) { + if (d->splash_frame_counter == 0 && collision_hit_material() == 0 && + d->v.f[2] < 0.0f) { Vec_2adb30 p; Vec_2adb30 splash_particle_velocity; char *s; @@ -1260,7 +1269,7 @@ void bomb_update(BombMoby *bomb_moby) { bomb_moby->pos.f[1], 0.5f, -0.35f); - d->h68 = 1; + d->splash_frame_counter = 1; clear_u64_value(d->v.f); d->v.f[2] = frame_time_macro * -1.5f; p.f[0] = bomb_moby->pos.f[0]; @@ -1283,10 +1292,10 @@ void bomb_update(BombMoby *bomb_moby) { spawn_debris_chunk( &p, &splash_particle_velocity, random_integer_below(2), n); } - } else if (d->h68 != 0 || collision_hit_material() != 0) { + } else if (d->splash_frame_counter != 0 || collision_hit_material() != 0) { if (coll_hit.moby != 0) { if ((coll_hit.moby != ((G910 *)&hero)->cam && coll_hit.moby != d->owner) || - d->h54 < FUN_001f96f8_2adb30(0x12C) - FUN_001f96f8_2adb30(0xA)) { + d->fuse_timer < FUN_001f96f8_2adb30(0x12C) - FUN_001f96f8_2adb30(0xA)) { if (((BombMoby *)coll_hit.moby)->f74 != D_L00_00160770 || coll_hit.moby->cls == 0x336) { H910 *h = &coll_hit; @@ -1308,7 +1317,7 @@ void bomb_update(BombMoby *bomb_moby) { FUN_001f9bf8_2adb30(&b, &h->nrm, 1.0f); } } - } else if (fast_dec_timer_s16(&d->h54)) { + } else if (fast_dec_timer_s16(&d->fuse_timer)) { bomb_moby->bBC = 1; fast_vec_add(&blast_velocity, &blast_velocity, d); } @@ -1320,7 +1329,7 @@ void bomb_update(BombMoby *bomb_moby) { FUN_001f9a68_2adb30(&blast_velocity, &blast_velocity, s); FUN_001f9a28_2adb30(&delta, &g_debug_camera, &bomb_moby->pos); camera_distance = FUN_001f9af0_2adb30(&delta); - if (d->h68 < FUN_001f96f8_2adb30(0x14)) { + if (d->splash_frame_counter < FUN_001f96f8_2adb30(0x14)) { int n; n = collect_mobies_in_sphere(&bomb_moby->pos, 0x10, bomb_moby, 0, s * 0.5f); v.q = bomb_moby->pos.q; @@ -1335,7 +1344,7 @@ void bomb_update(BombMoby *bomb_moby) { 2.0f, 1.0f, 1.0f); - bomb_moby->state = 2; + bomb_moby->state = BOMB_STATE_EXPANDING_BLAST; } { int k; @@ -1362,7 +1371,7 @@ void bomb_update(BombMoby *bomb_moby) { (unsigned char)item_text_variant[0xA]); } } - if (d->h68 < FUN_001f96f8_2adb30(0x14)) { + if (d->splash_frame_counter < FUN_001f96f8_2adb30(0x14)) { Vec_2adb30 t; float g; int r2; @@ -1510,7 +1519,7 @@ void bomb_update(BombMoby *bomb_moby) { b2, 0x20); } - if (d->h68 >= FUN_001f96f8_2adb30(0x14)) { + if (d->splash_frame_counter >= FUN_001f96f8_2adb30(0x14)) { float h; bomb_moby->pos.f[2] += 1.0f; h = resolve_camera_surface_height((float *)&bomb_moby->pos, &v); @@ -1538,14 +1547,14 @@ void bomb_update(BombMoby *bomb_moby) { } d->v.f[0] = 0.0f; bomb_moby->bBC = 0; - if (d->h68 >= FUN_001f96f8_2adb30(0x14)) { + if (d->splash_frame_counter >= FUN_001f96f8_2adb30(0x14)) { trooper_play_sound(0x16, 0, (int)bomb_moby, 0); } else if ((unsigned char)item_text_variant[0xA] != 0) { allocate_voice_for_target_entry(1, 0, (int)bomb_moby); } else { allocate_voice_for_target_entry(0, 0, (int)bomb_moby); } - if (d->h68 != 0) { + if (d->splash_frame_counter != 0) { float gz; float wz; int cr = 0x60; @@ -1635,22 +1644,23 @@ void bomb_update(BombMoby *bomb_moby) { : 0.4f - 20.0f * 0.0175f; l00_camera.shake_frames = FUN_001f96f8_2adb30(0x19); fast_vec_dist(&bomb_moby->pos, ((G910 *)&hero)->pos); - mine_camera_blast((char *)&rec, (char *)&bomb_moby->pos, 0, 0); - if (bomb_moby->state != 2) { + mine_camera_blast((char *)&camera_blast_parameters, (char *)&bomb_moby->pos, 0, 0); + if (bomb_moby->state != BOMB_STATE_EXPANDING_BLAST) { mark_moby_for_removal(bomb_moby); return; } } } - } else if (bomb_moby->state != 2) { + } else if (bomb_moby->state != BOMB_STATE_EXPANDING_BLAST) { int v; - d->h6a++; - v = truncate_float_to_s32(FUN_001f9de0_2adb30(normalize_angle((float)d->h6a * 0.068f)) * - 96.0f) + + d->color_animation_counter++; + v = truncate_float_to_s32( + FUN_001f9de0_2adb30(normalize_angle((float)d->color_animation_counter * 0.068f)) * + 96.0f) + 0x9F; bomb_moby->color = (v << 16) | (0xFF << 24) | (v << 8) | v; } - if (bomb_moby->state == 2) { + if (bomb_moby->state == BOMB_STATE_EXPANDING_BLAST) { Vec_2adb30 p; float r; int n; diff --git a/src/overlays/shared/weapons/decoy.c b/src/overlays/shared/weapons/decoy.c index b4bc9f1778..4d7b962998 100644 --- a/src/overlays/shared/weapons/decoy.c +++ b/src/overlays/shared/weapons/decoy.c @@ -53,8 +53,8 @@ typedef struct DecoyVars { s32 unk5C; u8 pad60[0xc]; s16 unk6C; - s8 unk6E; - s8 unk6F; + s8 hit_cooldown_latched; + s8 collision_voice_cooldown; } DecoyVars; typedef struct { @@ -69,15 +69,15 @@ typedef struct { u8 v10[8]; f32 f18; u8 pad2[0x78 - 0x1C]; - O_2c40a0 *p78; + O_2c40a0 *decoy_motion_vars; } S_2c40a0; typedef struct { u8 pad[0x80]; - u8 v80[8]; - f32 f88; + u8 hero_position_xy[8]; + f32 hero_position_z; u8 pad2[0x1E2 - 0x8C]; - s16 h1E2; + s16 decoy_proximity_response_gate; } P_2c40a0; typedef struct { @@ -476,21 +476,21 @@ s32 predict_thrown_moby_landing(ThrowVars *throw_vars, struct Moby *thrown_moby, void update_decoy_proximity_motion(S_2c40a0 *self) __asm__("FUN_L00_002c40a0"); void update_decoy_proximity_motion(S_2c40a0 *decoy_moby) { - O_2c40a0 *moby_vars = decoy_moby->p78; + O_2c40a0 *moby_vars = decoy_moby->decoy_motion_vars; P_2c40a0 *P = (P_2c40a0 *)&hero; - s16 proximity_response_gate = P->h1E2; + s16 proximity_response_gate = P->decoy_proximity_response_gate; f32 horizontal_displacement[4]; f32 horizontal_separation_error, horizontal_separation_distance, ground_height; if (moby_vars->i68 == 0) { if (proximity_response_gate == 0) return; - if (!(FUN_001f9b80_2c40a0(P->v80, decoy_moby->v10) < 1.0f)) + if (!(FUN_001f9b80_2c40a0(P->hero_position_xy, decoy_moby->v10) < 1.0f)) return; - if (!(FUN_001f99c0_2c40a0(P->f88 - decoy_moby->f18) < 1.3f)) + if (!(FUN_001f99c0_2c40a0(P->hero_position_z - decoy_moby->f18) < 1.3f)) return; moby_vars->i68 = 1; } - FUN_001f9a28_2c40a0(horizontal_displacement, decoy_moby->v10, P->v80); + FUN_001f9a28_2c40a0(horizontal_displacement, decoy_moby->v10, P->hero_position_xy); horizontal_displacement[2] = 0.0f; horizontal_separation_error = FUN_001f9b20_2c40a0(horizontal_displacement) - 1.4f; if (horizontal_separation_error > 0.0f) @@ -602,7 +602,7 @@ void decoy_update(char *moby) { decoy_instance_vars->unk44 = 0; MOBY(moby)->collision_disable = -1; decoy_instance_vars->unk6C = 0; - decoy_instance_vars->unk6E = 0; + decoy_instance_vars->hit_cooldown_latched = 0; break; case DECOY_HELD: { char *target; @@ -710,9 +710,9 @@ void decoy_update(char *moby) { } } destroy_decoy_on_selected_materials(moby); - if (fast_subtract_rotations_cf(&decoy_instance_vars->unk6F)) + if (fast_subtract_rotations_cf(&decoy_instance_vars->collision_voice_cooldown)) allocate_voice_for_target_entry(0, 0, moby), - decoy_instance_vars->unk6F = FUN_001fef20_2c4380(20); + decoy_instance_vars->collision_voice_cooldown = FUN_001fef20_2c4380(20); else add_random_offset_to_vector_xyz(frame_time, &decoy_instance_vars->unk10); } @@ -750,9 +750,9 @@ void decoy_update(char *moby) { ((*(u64 *)((char *)decoy_instance_vars + 0x68) & 0xffffff00000000ULL) == 0)) { decoy_instance_vars->unk6C = FUN_001fef20_2c4380(100); - decoy_instance_vars->unk6E = 1; + decoy_instance_vars->hit_cooldown_latched = 1; } else - decoy_instance_vars->unk6E = 0; + decoy_instance_vars->hit_cooldown_latched = 0; allocate_voice_for_target_entry(0, 0, moby); { float len = *(float *)(target + 0x2c); diff --git a/src/overlays/shared/weapons/doom_bot_movement.c b/src/overlays/shared/weapons/doom_bot_movement.c index acaeeb67dc..2d7af3c635 100644 --- a/src/overlays/shared/weapons/doom_bot_movement.c +++ b/src/overlays/shared/weapons/doom_bot_movement.c @@ -57,7 +57,7 @@ typedef struct { f32 f10; f32 f14; u8 pad18[0x30]; - f32 f48; + f32 current_heading; u8 pad4C[0x2C]; Ext *p78; } Mob; @@ -78,7 +78,7 @@ typedef struct Mob_2C0CF8 { char pad20[4]; Cls_2C0CF8 *p24; /* 0x24 */ char pad28[4]; - float f2C; /* 0x2C */ + float spatial_scale; /* 0x2C */ char pad30[0x8C]; unsigned char bBC; /* 0xBC */ } Mob_2C0CF8; @@ -500,8 +500,9 @@ f32 select_moby_heading_by_collision_probes(Mob *moby, (horizontal_probe_distance * 3.0f)); } } - if (2.5132742f < fast_difference_between_rotations(best, moby->f48)) { - best = fast_add_rotations(moby->f48, fast_subtract_rotations(best, moby->f48) * 0.5f); + if (2.5132742f < fast_difference_between_rotations(best, moby->current_heading)) { + best = fast_add_rotations(moby->current_heading, + fast_subtract_rotations(best, moby->current_heading) * 0.5f); } return best; } @@ -584,7 +585,7 @@ int try_start_moby_hop(Mob_2C0CF8 *moby, Blk *block, void *target, int check_lin can_halve = 1; func_001F9BF0_2C0CF8(jump, target, moby->pos); - func_L00_001FF5B0_2C0CF8(moby->f2C * 5.2f / moby->p24->unk24, jump, jump); + func_L00_001FF5B0_2C0CF8(moby->spatial_scale * 5.2f / moby->p24->unk24, jump, jump); func_001F9BD8_2C0CF8(land, moby->pos, jump); func_001F9C30_2C0CF8(half, jump, 0.5f); half_length = func_001F9CE8_2C0CF8(half); @@ -600,7 +601,7 @@ int try_start_moby_hop(Mob_2C0CF8 *moby, Blk *block, void *target, int check_lin } return 0; } - if (moby->f2C * 3.0f / moby->p24->unk24 < jump[2]) { + if (moby->spatial_scale * 3.0f / moby->p24->unk24 < jump[2]) { if (can_halve) { return try_start_moby_hop(moby, block, half, 1); } @@ -616,18 +617,18 @@ int try_start_moby_hop(Mob_2C0CF8 *moby, Blk *block, void *target, int check_lin } return 0; } - land[2] = land[2] + moby->f2C * 0.025f / moby->p24->unk24; + land[2] = land[2] + moby->spatial_scale * 0.025f / moby->p24->unk24; if (probe_moby_raised_sphere_collision(moby, 6, land)) { if (can_halve) { return try_start_moby_hop(moby, block, half, 1); } return 0; } - land[2] = land[2] - moby->f2C * 0.025f / moby->p24->unk24; + land[2] = land[2] - moby->spatial_scale * 0.025f / moby->p24->unk24; qcopy_nc(from, moby->pos); - from[2] = from[2] + moby->f2C * 0.2f / moby->p24->unk24; + from[2] = from[2] + moby->spatial_scale * 0.2f / moby->p24->unk24; qcopy_nc(to, land); - to[2] = to[2] + moby->f2C * 0.2f / moby->p24->unk24; + to[2] = to[2] + moby->spatial_scale * 0.2f / moby->p24->unk24; if (check_line) { if (func_L00_001EFFF0_2C0CF8(from, to, 6, moby, 0) == 0) { if (can_halve) { diff --git a/src/overlays/shared/weapons/drone.c b/src/overlays/shared/weapons/drone.c index 4d7128935a..042fb20e4e 100644 --- a/src/overlays/shared/weapons/drone.c +++ b/src/overlays/shared/weapons/drone.c @@ -19,21 +19,21 @@ typedef unsigned int u128_2cdcc0 __attribute__((mode(TI), aligned(16))); typedef struct { unsigned char pad0[0x80]; - float v80[4]; + float hero_position[4]; unsigned char pad90[8]; - float f98; + float drone_launch_yaw; unsigned char pad9c[0x1FF5 - 0x9C]; - unsigned char b1FF5; - unsigned char b1FF6; + unsigned char pending_drone_replenishment; + unsigned char active_drone_count; unsigned char pad1ff7[0x2080 - 0x1FF7]; - unsigned char *p2080; + unsigned char *hero_moby; } P_2cdcc0; typedef struct { unsigned char pad0[0xC0]; - unsigned short hC0; + unsigned short drone_replenishment_count; unsigned short hC2; - unsigned int wC4; + unsigned int drone_usage_level_flags; } S_2cdcc0; /* Ported from rac1-decomp (nonmatching/shared/func_L00_002CF808.c: func_L00_002CF808). */ @@ -165,26 +165,28 @@ void replenish_hero_drones(void) { float drone_spawn_position[4] __attribute__((aligned(16))); struct Moby *spawned_moby; int i; - hero_state->b1FF5 = 0; + hero_state->pending_drone_replenishment = 0; if (get_ammo(0x18)) { - initial_drone_velocity[0] = FUN_001f9dc8_2cdcc0(hero_state->f98) * 0.25f; - initial_drone_velocity[1] = FUN_001f9de0_2cdcc0(hero_state->f98) * 0.25f; + initial_drone_velocity[0] = FUN_001f9dc8_2cdcc0(hero_state->drone_launch_yaw) * 0.25f; + initial_drone_velocity[1] = FUN_001f9de0_2cdcc0(hero_state->drone_launch_yaw) * 0.25f; initial_drone_velocity[2] = 0.25f; - if (hero_state->b1FF6 < 6) { + if (hero_state->active_drone_count < 6) { FUN_L00_00233db8_2cdcc0(0x18, 1); usage_stats = (S_2cdcc0 *)item_usage; - if (usage_stats->hC0 < 0xFFFF) { - usage_stats->hC0++; + if (usage_stats->drone_replenishment_count < 0xFFFF) { + usage_stats->drone_replenishment_count++; } if (FUN_001f96f8_2cdcc0(D_0015EEA4) / 600 > usage_stats->hC2) { usage_stats->hC2 = FUN_001f96f8_2cdcc0(D_0015EEA4) / 600; } - usage_stats->wC4 = usage_stats->wC4 | (1 << current_level_index) | 0x80000000; + usage_stats->drone_usage_level_flags = + usage_stats->drone_usage_level_flags | (1 << current_level_index) | 0x80000000; - FUN_001f9a10_2cdcc0(drone_spawn_position, hero_state->v80, hero_state->p2080 + 0xE0); FUN_001f9a10_2cdcc0( - drone_spawn_position, drone_spawn_position, hero_state->p2080 + 0xC0); - for (i = hero_state->b1FF6; i < 6; i++) { + drone_spawn_position, hero_state->hero_position, hero_state->hero_moby + 0xE0); + FUN_001f9a10_2cdcc0( + drone_spawn_position, drone_spawn_position, hero_state->hero_moby + 0xC0); + for (i = hero_state->active_drone_count; i < 6; i++) { spawned_moby = FUN_L00_002ce1f0_2cdcc0(spawned_moby, drone_spawn_position); if (spawned_moby) { qcopy(((void *)spawned_moby->pvars), initial_drone_velocity); diff --git a/src/overlays/shared/weapons/glove_of_doom.c b/src/overlays/shared/weapons/glove_of_doom.c index 526c2e4ff1..3e276ab003 100644 --- a/src/overlays/shared/weapons/glove_of_doom.c +++ b/src/overlays/shared/weapons/glove_of_doom.c @@ -54,9 +54,9 @@ typedef float Mat3_2c7548[3][4] __attribute__((aligned(16))); /* Counters kept at D_00141680 for the carrier's deliveries. */ typedef struct { u8 pad0[0xA0]; - u16 deliveries; /* 0xA0: counts up to 0xFFFF */ - u16 unkA2; /* 0xA2: raised to scale_game_frames(D_0015EEA4) / 600 */ - u32 levels; /* 0xA4: bit per level index, plus 0x80000000 */ + u16 deliveries; /* 0xA0: counts up to 0xFFFF */ + u16 max_delivery_frame_bucket; /* 0xA2: raised to scale_game_frames(D_0015EEA4) / 600 */ + u32 levels; /* 0xA4: bit per level index, plus 0x80000000 */ } DeliveryStats; unsigned char *spawn_glove_of_doom_held_moby(int spawning_moby, @@ -345,8 +345,8 @@ void glove_of_doom_update(struct Moby *moby) { if (D_00141680.deliveries < 0xFFFF) { D_00141680.deliveries++; } - if (scale_game_frames(D_0015EEA4) / 600 > D_00141680.unkA2) { - D_00141680.unkA2 = scale_game_frames(D_0015EEA4) / 600; + if (scale_game_frames(D_0015EEA4) / 600 > D_00141680.max_delivery_frame_bucket) { + D_00141680.max_delivery_frame_bucket = scale_game_frames(D_0015EEA4) / 600; } D_00141680.levels = D_00141680.levels | (1 << current_level_index) | 0x80000000; release_glove_of_doom_held_moby((void *)&glove_carrier_vars->grip, diff --git a/src/overlays/shared/weapons/linked_moby_states_update.c b/src/overlays/shared/weapons/linked_moby_states_update.c index 578eb6afaf..28def6fe34 100644 --- a/src/overlays/shared/weapons/linked_moby_states_update.c +++ b/src/overlays/shared/weapons/linked_moby_states_update.c @@ -9,9 +9,9 @@ typedef struct { int w0; - int w4; - int w8; - int wC; + int linked_moby_selection_timer; + int remaining_owned_record_events; + int owned_record_cooldown_timer; int idx[4]; unsigned char *p[4]; } V_2b3458; @@ -71,8 +71,8 @@ void linked_moby_states_update(unsigned char *source_moby) { switch (MOBY(source_moby)->state) { case STATE_INITIALIZE: MOBY(source_moby)->state = STATE_ACTIVE; - moby_vars->w4 = linked_moby_selection_delay_gp; - moby_vars->w8 = 3; + moby_vars->linked_moby_selection_timer = linked_moby_selection_delay_gp; + moby_vars->remaining_owned_record_events = 3; moby_vars->p[0] = moby_table + (moby_vars->idx[0] << 8); moby_vars->p[1] = moby_table + (moby_vars->idx[1] << 8); moby_vars->p[2] = moby_table + (moby_vars->idx[2] << 8); @@ -80,11 +80,11 @@ void linked_moby_states_update(unsigned char *source_moby) { break; case STATE_ACTIVE: matching_owned_record = find_moby_hit(source_moby, 0x10000, 0); - fast_dec_timer(&moby_vars->wC); - if (matching_owned_record && moby_vars->wC == 0) { + fast_dec_timer(&moby_vars->owned_record_cooldown_timer); + if (matching_owned_record && moby_vars->owned_record_cooldown_timer == 0) { MOBY(source_moby)->hit_slot = 0xFF; - moby_vars->wC = owned_record_cooldown_gp; - if (--moby_vars->w8 <= 0) { + moby_vars->owned_record_cooldown_timer = owned_record_cooldown_gp; + if (--moby_vars->remaining_owned_record_events <= 0) { mark_moby_for_removal(source_moby); return; } @@ -101,8 +101,8 @@ void linked_moby_states_update(unsigned char *source_moby) { test: if (moby_vars->p[0][0x20] == 0x50 || moby_vars->p[1][0x20] == 0x50 || moby_vars->p[2][0x20] == 0x50 || moby_vars->p[3][0x20] == 0x50) { - if (fast_dec_timer(&moby_vars->w4)) { - moby_vars->w4 = linked_moby_selection_delay_gp; + if (fast_dec_timer(&moby_vars->linked_moby_selection_timer)) { + moby_vars->linked_moby_selection_timer = linked_moby_selection_delay_gp; for (i = 0; i < 4; i++) { if (moby_vars->p[i][0x20] == 0x50) goto found; diff --git a/src/overlays/shared/weapons/mine.c b/src/overlays/shared/weapons/mine.c index ba3374f1f9..b0dcdbf5e8 100644 --- a/src/overlays/shared/weapons/mine.c +++ b/src/overlays/shared/weapons/mine.c @@ -384,14 +384,14 @@ typedef struct { typedef struct N_2aa008 { u8 pad[0x10]; V_2aa008 v10; - u8 b20; + u8 moby_state; u8 pad2[0x28 - 0x21]; struct N_2aa008 *p28; f32 f2C; u8 pad3[0x78 - 0x30]; - void *p78; + void *moby_private_vars; u8 pad4[0xA6 - 0x7C]; - s16 hA6; + s16 moby_class; } N_2aa008; typedef struct { @@ -469,11 +469,11 @@ void initialize_moby_motion_at_position(V_2aa008 *requested_position, s32 bestv; V_2aa008 *k; vector_scratch.q = 0; - moby_vars = initialized_moby->p78; + moby_vars = initialized_moby->moby_private_vars; vector_scratch.f[0] = random_float_between(-1.0f, 1.0f); vector_scratch.f[1] = random_float_between(-1.0f, 1.0f); vector_scratch.f[2] = random_float_between(-1.0f, 1.0f); - initialized_moby->b20 = 1; + initialized_moby->moby_state = MINE_STATE_FREE_MOTION; initialized_moby->f2C = initialized_moby->f2C / 0.65f; random_offset.q = vector_scratch.q; fast_vec_normalize(&random_offset, @@ -489,19 +489,20 @@ void initialize_moby_motion_at_position(V_2aa008 *requested_position, best = 0; bestv = 0; for (scanned_moby = D_L00_0015FFE4_2aa008; scanned_moby; scanned_moby = scanned_moby->p28) { - if (scanned_moby->b20 != 0xFE) - if (scanned_moby->b20 != 0xFD) - if (scanned_moby->hA6 == initialized_moby->hA6) + if (scanned_moby->moby_state != 0xFE) + if (scanned_moby->moby_state != 0xFD) + if (scanned_moby->moby_class == initialized_moby->moby_class) if (scanned_moby != initialized_moby) { - if (best == 0 || ((D_2aa008 *)scanned_moby->p78)->i5C < bestv) { - bestv = ((D_2aa008 *)scanned_moby->p78)->i5C; + if (best == 0 || + ((D_2aa008 *)scanned_moby->moby_private_vars)->i5C < bestv) { + bestv = ((D_2aa008 *)scanned_moby->moby_private_vars)->i5C; best = scanned_moby; } count++; } } if (count >= 8) - ((D_2aa008 *)best->p78)->i5C = -1; + ((D_2aa008 *)best->moby_private_vars)->i5C = -1; qcopy(&initialized_moby->v10, requested_position); vector_scratch.q = ((Q_2aa008 *)hero.moby)->v10.q; vector_scratch.f[2] = requested_position->f[2]; diff --git a/src/overlays/shared/weapons/mine_glove.c b/src/overlays/shared/weapons/mine_glove.c index 673046b156..0a3970e7a7 100644 --- a/src/overlays/shared/weapons/mine_glove.c +++ b/src/overlays/shared/weapons/mine_glove.c @@ -30,7 +30,7 @@ typedef struct { typedef struct { u8 pad0[0x88]; u16 deliveries; - u16 unkA2; + u16 max_release_frame_bucket; u32 levels; } DeliveryStats_2c1ad0; @@ -293,8 +293,8 @@ void mine_glove_update(struct Moby *moby) { { s32 frames = scale_game_frames(D_0015EEA4_macro); frames /= 600; - if (((DeliveryStats_2c1ad0 *)item_usage)->unkA2 < frames) - ((DeliveryStats_2c1ad0 *)item_usage)->unkA2 = + if (((DeliveryStats_2c1ad0 *)item_usage)->max_release_frame_bucket < frames) + ((DeliveryStats_2c1ad0 *)item_usage)->max_release_frame_bucket = scale_game_frames(D_0015EEA4_macro) / 600; } ((DeliveryStats_2c1ad0 *)item_usage)->levels = diff --git a/src/overlays/shared/weapons/morphoray.c b/src/overlays/shared/weapons/morphoray.c index 758d178ef8..5ab307b6ab 100644 --- a/src/overlays/shared/weapons/morphoray.c +++ b/src/overlays/shared/weapons/morphoray.c @@ -131,7 +131,7 @@ typedef struct { int color[4]; int unk50, unk54, unk58; float unk5C, unk60; - int unk64; + int corner_2_texture_v; float unk68, unk6C; long unk70, tex, unk80, unk88; } Q_2be890; @@ -2362,7 +2362,7 @@ void draw_beam_origin_camera_facing_quads(void *mv) { quad.unk58 = 0; quad.unk5C = 1.0f; quad.unk60 = 1.0f; - quad.unk64 = 0; + quad.corner_2_texture_v = 0; quad.unk68 = 1.0f; quad.unk6C = 1.0f; FUN_001f9bf8_2be890(&offset_vector, moby_bytes + 0xD0, beam_origin_quad_basis_offset_length_gp); diff --git a/src/overlays/shared/weapons/morphoray_chicken.c b/src/overlays/shared/weapons/morphoray_chicken.c index d19e853076..9bdb5572ce 100644 --- a/src/overlays/shared/weapons/morphoray_chicken.c +++ b/src/overlays/shared/weapons/morphoray_chicken.c @@ -68,8 +68,8 @@ typedef struct { typedef struct { u8 pad00[4]; u8 f4; - u8 f5; - u8 f6; + u8 green; + u8 blue; } Opt; typedef struct { @@ -267,7 +267,7 @@ struct Moby *spawn_morphoray_chicken(State *source_state) { color_options = source_state->unk78->unk0C; if (color_options != NULL) { set_moby_color( - spawned_moby, color_options->f4, color_options->f5, color_options->f6); + spawned_moby, color_options->f4, color_options->green, color_options->blue); } else { spawned_moby->spawn_frame = source_state->unk38; } @@ -870,7 +870,7 @@ int cancel_suck_cannon_suction_and_set_moby_state_5(struct Moby *moby) __asm__(" int cancel_suck_cannon_suction_and_set_moby_state_5(struct Moby *moby) { int helper_result = cancel_suck_cannon_suction(moby); - moby->state = 5; + moby->state = CHICKEN_STATE_EMIT_FEATHERS; return helper_result; } diff --git a/src/overlays/shared/weapons/morphoray_target_effect.c b/src/overlays/shared/weapons/morphoray_target_effect.c index b85f56a270..67cb4497a2 100644 --- a/src/overlays/shared/weapons/morphoray_target_effect.c +++ b/src/overlays/shared/weapons/morphoray_target_effect.c @@ -10,19 +10,19 @@ typedef struct { u8 pad[0x20]; - u8 b20; + u8 moby_state; u8 pad2[0x40 - 0x21]; OvlQuad q40; u8 pad3[0x78 - 0x50]; void *p78; u8 pad4[0xA6 - 0x7C]; - s16 hA6; + s16 moby_class; } O_002d7f88; typedef struct { O_002d7f88 *o; f32 f4; - u8 v8[4]; + u8 removal_timer[4]; f32 fC; } D_002d7f88; @@ -31,7 +31,7 @@ typedef struct { u8 v10[4]; f32 f14; u8 pad2[0x23 - 0x18]; - u8 b23; + u8 fade_level; u8 pad3[0x2C - 0x24]; f32 f2C; u8 pad4[0x40 - 0x30]; @@ -69,10 +69,10 @@ void morphoray_target_effect_update(S_002d7f88 *follower_moby) { void *linked_moby_data; f32 scale_coefficient; moby_data->f4 += (D_L00_001616DC + D_L00_001616DC) * frame_time; - if (fast_dec_timer(moby_data->v8) != 0 || D_L00_001616DC * 1.1f <= moby_data->f4) + if (fast_dec_timer(moby_data->removal_timer) != 0 || D_L00_001616DC * 1.1f <= moby_data->f4) goto kill; o = moby_data->o; - if (o == 0 || o->hA6 != 0xB9 || o->b20 == 0xFE || o->b20 == 0xFD) { + if (o == 0 || o->moby_class != 0xB9 || o->moby_state == 0xFE || o->moby_state == 0xFD) { kill: mark_moby_for_removal(follower_moby); return; @@ -84,7 +84,7 @@ void morphoray_target_effect_update(S_002d7f88 *follower_moby) { fast_vec_add(follower_moby->v10, follower_moby->v10, linked_moby_data); qcopy(&follower_moby->q40, &moby_data->o->q40); if (moby_data->f4 > D_L00_001616DC) { - follower_moby->b23 = + follower_moby->fade_level = truncate_float_to_s32((1.0f - (moby_data->f4 - D_L00_001616DC) * 10.0f) * 127.0f); } scale_coefficient = moby_data->fC; diff --git a/src/overlays/shared/weapons/pyrocitor.c b/src/overlays/shared/weapons/pyrocitor.c index 6019a58bb8..977409751a 100644 --- a/src/overlays/shared/weapons/pyrocitor.c +++ b/src/overlays/shared/weapons/pyrocitor.c @@ -892,7 +892,7 @@ void update_pyrocitor_flame_effect_slots(char *moby) { /* Stores val in the first empty of 15 slots after the list head. */ void register_pyrocitor_flame_effect(ListSlots8 *list, s32 val) __asm__("FUN_L00_002b8798"); -void register_pyrocitor_flame_effect(ListSlots8 *list, s32 val) { +void register_pyrocitor_flame_effect(ListSlots8 *list, s32 flame_effect) { s32 *list_data = list->slots; s32 i = 0; s32 *first_slot; @@ -902,7 +902,7 @@ void register_pyrocitor_flame_effect(ListSlots8 *list, s32 val) { slot_byte_offset = i * 4; first_slot = (s32 *)((u8 *)list_data + 4); if (*(s32 *)((u8 *)first_slot + slot_byte_offset) == 0) { - *(s32 *)((u8 *)first_slot + slot_byte_offset) = val; + *(s32 *)((u8 *)first_slot + slot_byte_offset) = flame_effect; break; } i++; diff --git a/src/overlays/shared/weapons/ryno.c b/src/overlays/shared/weapons/ryno.c index ed9f13de08..363b32d0b9 100644 --- a/src/overlays/shared/weapons/ryno.c +++ b/src/overlays/shared/weapons/ryno.c @@ -42,7 +42,7 @@ typedef struct M_2cc360 { struct M_2cc360 *next; char p2c[5]; unsigned char b31; - short h32; + short draw_distance; unsigned short h34; } M_2cc360; @@ -146,7 +146,7 @@ M_2cc360 *select_ryno_target( int i, found; for (candidate_moby = D_L00_0015FFE4_2cc360; candidate_moby; candidate_moby = candidate_moby->next) { - if (candidate_moby->h32 == 0) + if (candidate_moby->draw_distance == 0) continue; if (excl) { found = 0; diff --git a/src/overlays/shared/weapons/suckcannon.c b/src/overlays/shared/weapons/suckcannon.c index 579a8eb411..0431964ff6 100644 --- a/src/overlays/shared/weapons/suckcannon.c +++ b/src/overlays/shared/weapons/suckcannon.c @@ -1,6 +1,7 @@ /* Shared moby class suckcannon: the suck cannon, its suction of mobys, the shots it fires and its beam. */ #include "types.h" +#include "rnc/mobys/moby_state.h" #include "rnc/audio/voice_pool.h" #include "rnc/mobys/moby.h" #include "rnc/overlay/shared/world/level_globals.h" @@ -209,9 +210,9 @@ typedef struct SuckHero { u8 pad2088[0x4]; s32 control_mode; u8 pad2090[0x17]; - u8 unk20A7; + u8 item_select_blocked; u8 pad20A8[0x4]; - u8 unk20AC; + u8 suck_cannon_use_blocked; } SuckHero; typedef struct SuckInput { @@ -339,7 +340,7 @@ typedef struct { int i84, i88; float f8C, f90; int i94; - float f98; + float suction_step_distance; short h9C, h9E; } R_2DDEA0; @@ -457,7 +458,7 @@ typedef struct { typedef struct { u8 pad[0x10]; u8 v10[0x10]; - u8 b20; + u8 pickup_moby_state; u8 pad2[3]; T_2df1e0 *p24; } O_2df1e0; @@ -1471,7 +1472,8 @@ void suckcannon_update(SuckMoby *suck_cannon_moby) { break; } if ((controller_state.held & ((SuckHero *)&hero)->fire_buttons) && cannon->cooldown == 0 && - ((SuckHero *)&hero)->unk20A7 == 0 && ((SuckHero *)&hero)->unk20AC == 0 && + ((SuckHero *)&hero)->item_select_blocked == 0 && + ((SuckHero *)&hero)->suck_cannon_use_blocked == 0 && scale_game_frames(15) < ((SuckHero *)&hero)->ready_frames && is_suck_cannon_suction_blocked_by_hero_state() == 0) { start_equipped_item_animation(); @@ -1489,8 +1491,9 @@ void suckcannon_update(SuckMoby *suck_cannon_moby) { case SUCKCANNON_STATE_SUCTION_STARTUP: if (suck_cannon_moby->anim_flags & 2) blend_moby_animation(suck_cannon_moby, 3, 0, scale_game_frames(5)); - if (is_suck_cannon_suction_blocked_by_hero_state() != 0 || ((SuckHero *)&hero)->unk20AC || - ((SuckHero *)&hero)->unk20A7) { + if (is_suck_cannon_suction_blocked_by_hero_state() != 0 || + ((SuckHero *)&hero)->suck_cannon_use_blocked || + ((SuckHero *)&hero)->item_select_blocked) { sound = cannon->sound; if (sound != -1) { SuckVoice *s = (SuckVoice *)(((char *)&voice_pool)) + sound; @@ -1525,7 +1528,8 @@ void suckcannon_update(SuckMoby *suck_cannon_moby) { (((SuckHero *)&hero)->count < (item_text_variant[9] == 0 ? 5 : 10) && is_suck_cannon_suction_blocked_by_hero_state() == 0 && ((controller_state.held & ((SuckHero *)&hero)->fire_buttons) || cannon->cooldown) && - !((SuckHero *)&hero)->unk20AC && !((SuckHero *)&hero)->unk20A7))) { + !((SuckHero *)&hero)->suck_cannon_use_blocked && + !((SuckHero *)&hero)->item_select_blocked))) { cancel_hero_item_animation(); sound = cannon->sound; if (sound != -1) { @@ -1570,7 +1574,7 @@ void suckcannon_update(SuckMoby *suck_cannon_moby) { if (((SuckHero *)&hero)->state == 1) hero_set_state(30, 1); if (((SuckHero *)&hero)->state == 30 && (((SuckHero *)&hero)->moby->flags & 1) && - !((SuckHero *)&hero)->unk20AC) { + !((SuckHero *)&hero)->suck_cannon_use_blocked) { LevelCamera *camera = &l00_camera; SuckVec *eye; SuckHit *hit; @@ -1612,7 +1616,8 @@ void suckcannon_update(SuckMoby *suck_cannon_moby) { (controller_state.held & ((SuckHero *)&hero)->fire_buttons) && ((SuckHero *)&hero)->control_mode != 7 && ((SuckHero *)&hero)->control_mode != 3 && ((SuckHero *)&hero)->control_mode != 18 && ((SuckHero *)&hero)->control_mode != 17 && - !((SuckHero *)&hero)->unk20AC && !((SuckHero *)&hero)->unk20A7 && + !((SuckHero *)&hero)->suck_cannon_use_blocked && + !((SuckHero *)&hero)->item_select_blocked && scale_game_frames(22) < ((SuckHero *)&hero)->ready_frames) { start_equipped_item_animation(); blend_moby_animation(suck_cannon_moby, 5, 0, scale_game_frames(2)); @@ -2320,10 +2325,16 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { SUCK_UPDATE_FALLING_AFTER_CANCEL = 6, SUCK_UPDATE_DEATH = 7 }; + enum { + SUCK_RECORD_STATE_RISING_FOR_SUCTION = 2, + SUCK_RECORD_STATE_STORED = 4, + SUCK_RECORD_STATE_ROLLING_PROJECTILE = 6 + }; + Frame_2DDEA0 suction_and_projectile_scratch; R_2DDEA0 *suction_and_projectile_record; - if (moby == 0 || moby->state == 0xFE || moby->state == 0xFD) + if (moby == 0 || moby->state == MOBY_STATE_REMOVAL_MARKER || moby->state == 0xFD) return 0; suction_and_projectile_record = func_L00_002DCD40_2DDEA0(moby); if (suction_and_projectile_record != 0) { @@ -2343,7 +2354,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { frame_scale * 0.3927f); if (fast_subtract_rotations(yaw, tolerance) < moby->rot.z && moby->rot.z < fast_add_rotations(yaw, tolerance)) { - suction_and_projectile_record->state = 2; + suction_and_projectile_record->state = SUCK_RECORD_STATE_RISING_FOR_SUCTION; suction_and_projectile_record->f6C = 0.0f; } clear_u64_value(&suction_and_projectile_record->vel); @@ -2401,11 +2412,11 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { ((Cls *)moby->pclass)->f24 * (distance / (suction_and_projectile_record->f64 + suction_and_projectile_record->f64) + half); - suction_and_projectile_record->f98 = - suction_and_projectile_record->f98 + frame_scale_sq_macro * 0.11f; - if (frame_scale * 0.75f < suction_and_projectile_record->f98) - suction_and_projectile_record->f98 = frame_scale * 0.75f; - if (distance < suction_and_projectile_record->f98 * 70.0f) { + suction_and_projectile_record->suction_step_distance = + suction_and_projectile_record->suction_step_distance + frame_scale_sq_macro * 0.11f; + if (frame_scale * 0.75f < suction_and_projectile_record->suction_step_distance) + suction_and_projectile_record->suction_step_distance = frame_scale * 0.75f; + if (distance < suction_and_projectile_record->suction_step_distance * 70.0f) { blend_moby_animation( suction_and_projectile_record->owner, 4, 0, func_001F9850_2DDEA0(2)); } @@ -2413,7 +2424,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { D_001404FC_2DDEA0[0] = 2; moby->collision = 0; } - if (distance < suction_and_projectile_record->f98) { + if (distance < suction_and_projectile_record->suction_step_distance) { hero.suck_cannon_incoming--; hero.sucked_moby_count++; func_L00_002DB6C8_2DDEA0(moby, &suction_and_projectile_scratch.v[0]); @@ -2470,7 +2481,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { &moby->pos); func_L00_001FF4B0_2DDEA0(&suction_and_projectile_scratch.v[1], &suction_and_projectile_scratch.v[1], - suction_and_projectile_record->f98); + suction_and_projectile_record->suction_step_distance); func_001F9BD8_2DDEA0(&moby->pos, &moby->pos, &suction_and_projectile_scratch.v[1]); func_0020EEE8_2DDEA0(moby); } @@ -2606,7 +2617,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { if (((Coll *)D_L00_00173E40_lui)->hit != 0 && ((Coll *)D_L00_00173E40_lui)->hit->oclass == 0) hit_wall = 0; - if (suction_and_projectile_record->state == 6) { + if (suction_and_projectile_record->state == SUCK_RECORD_STATE_ROLLING_PROJECTILE) { moby->flags &= 0x7FFF; moby->collision = ((Cls *)moby->pclass)->i10; moby->flags |= 4; @@ -2658,7 +2669,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { blend_moby_animation(moby, anim, 0, func_001F9850_2DDEA0(0x14)); } moby->collision_disable = suction_and_projectile_record->i88; - suction_and_projectile_record->state = 6; + suction_and_projectile_record->state = SUCK_RECORD_STATE_ROLLING_PROJECTILE; if (0.87266463f < fast_arc_tan(((Coll *)D_L00_00173E40_lui)->v40.z, vector_length_xy(&((Coll *)D_L00_00173E40_lui)->v40))) { @@ -2734,7 +2745,7 @@ int FUN_L00_002dc9f0(struct Moby *moby, char *yaw_turn_state) { } if (moby->flags & 4) func_0020EEE8_2DDEA0(moby); - if (suction_and_projectile_record->state < 4) { + if (suction_and_projectile_record->state < SUCK_RECORD_STATE_STORED) { if (suction_and_projectile_record->timer <= 0.0f) { if (((Cls *)moby->pclass)->f2C->fC != 0) ((Cls *)moby->pclass)->f2C->fC(moby); @@ -3247,9 +3258,9 @@ void scatter_moby_from_hazards(O_2df1e0 *pickup_moby) { f32 beam_segment_collection_radius; if (pickup_moby == 0) return; - if (pickup_moby->b20 == 0xFE) + if (pickup_moby->pickup_moby_state == MOBY_STATE_REMOVAL_MARKER) return; - if (pickup_moby->b20 == 0xFD) + if (pickup_moby->pickup_moby_state == 0xFD) return; if (random_integer_below(10)) return; diff --git a/src/overlays/shared/weapons/taunter.c b/src/overlays/shared/weapons/taunter.c index 3c0f101543..b21081babf 100644 --- a/src/overlays/shared/weapons/taunter.c +++ b/src/overlays/shared/weapons/taunter.c @@ -465,6 +465,12 @@ void taunter_update(Moby *taunter_moby) { enum { TAUNTER_STATE_ACTIVATION_DISABLED = 3 }; + enum { + TAUNTER_TYPE_ACTIVATION_DISABLED = 2 + }; + enum { + TAUNTER_TYPE_CONTINUOUS_EFFECT_EMISSION = 3 + }; Vars *taunter_vars; s32 taunter_state; s32 voice_slot_index; @@ -482,7 +488,7 @@ void taunter_update(Moby *taunter_moby) { return; if (taunter_vars->radius == 0.0f) taunter_vars->radius = 30.0f; - if (taunter_moby->type == 2) + if (taunter_moby->type == TAUNTER_TYPE_ACTIVATION_DISABLED) taunter_moby->state = TAUNTER_STATE_ACTIVATION_DISABLED; taunter_effect_emission_disabled = 1; if (taunter_moby->state == TAUNTER_STATE_INITIALIZE) { @@ -500,7 +506,8 @@ void taunter_update(Moby *taunter_moby) { } if ((u8)taunter_state != TAUNTER_STATE_ACTIVE) goto end; - if (taunter_moby->type == 3 && hero.item_use_locked == 0) { + if (taunter_moby->type == TAUNTER_TYPE_CONTINUOUS_EFFECT_EMISSION && + hero.item_use_locked == 0) { taunter_effect_emission_disabled = 0; taunter_vars->cnt18++; } else { @@ -523,7 +530,7 @@ void taunter_update(Moby *taunter_moby) { } D_00141680.flags |= 1 << current_level_index; D_00141680.flags |= 0x80000000; - if (taunter_moby->type != 3) + if (taunter_moby->type != TAUNTER_TYPE_CONTINUOUS_EFFECT_EMISSION) blend_moby_animation(taunter_moby, 3, 0, scale_game_frames(3)); taunter_vars->anim = allocate_voice_for_target_entry(taunter_vars->idx, 1, taunter_moby); diff --git a/src/overlays/shared/weapons/tesla_claw_beam.c b/src/overlays/shared/weapons/tesla_claw_beam.c index 5590931a28..1b7f4e247c 100644 --- a/src/overlays/shared/weapons/tesla_claw_beam.c +++ b/src/overlays/shared/weapons/tesla_claw_beam.c @@ -37,12 +37,12 @@ typedef struct { short target_timer; short second_timer; short unk44; - short unk46; + short second_target_hit_cooldown; } WalloperBeam; typedef struct { u8 pad[0x3E]; - s16 h3E; + s16 beam_point_count; } S2ba970; typedef float RW_2baae0[4] __attribute__((aligned(16))); @@ -1247,7 +1247,7 @@ void build_beam_and_arc_points(struct Moby *beam_owner_moby) { aim = (char *)get_moby_target_info(beam_state->second_target); if (aim && *(short *)(aim + 4) == 1) frames = 1; - beam_state->unk46 = scale_game_frames(frames); + beam_state->second_target_hit_cooldown = scale_game_frames(frames); } } for (i = 0; i < 4; i++) { @@ -1396,14 +1396,14 @@ void draw_beam_and_arc_effects(struct Moby *moby) { draw_beam_and_arc_two_pass_quads(D_L00_001DB5C0, primary_beam_first_pass_alpha_gp, primary_beam_second_pass_alpha_gp, - moby_vars->h3E, + moby_vars->beam_point_count, beam_and_arc_first_pass_half_width_gp, primary_beam_second_pass_half_width_gp, primary_beam_second_pass_segment_extension_factor_gp); draw_beam_and_arc_two_pass_quads(D_L00_001DB5C0 + 0x140, secondary_beam_first_pass_alpha_gp, secondary_beam_second_pass_alpha_gp, - moby_vars->h3E, + moby_vars->beam_point_count, D_L00_0016160C, secondary_beam_and_arc_second_pass_half_width_gp, secondary_beam_second_pass_segment_extension_factor_gp); diff --git a/src/overlays/shared/weapons/thruster_pack_flame.c b/src/overlays/shared/weapons/thruster_pack_flame.c index cedf69fd5d..812b32c459 100644 --- a/src/overlays/shared/weapons/thruster_pack_flame.c +++ b/src/overlays/shared/weapons/thruster_pack_flame.c @@ -324,7 +324,7 @@ typedef struct { typedef struct N { s32 f00; u8 p04[8]; - s32 f0C; + s32 has_previous_position; V4 v10; } N; @@ -343,10 +343,10 @@ typedef struct X { 0x30..0x3C are f32 rates (the case-1/3 bodies divide five constants by scale_game_frames(2) / scale_game_frames(8) and store the results there). */ typedef struct { - s32 i0; + s32 beam_transition_timer; char pad4[4]; - s32 i8; - s32 iC; + s32 thruster_pack_moby; + s32 has_previous_emission_position; char pad10[0x10]; f32 f20; f32 f24; @@ -355,7 +355,7 @@ typedef struct { f32 f30; f32 f34; f32 f38; - f32 f3C; + f32 beam_quad_scale_step; } V_4198; typedef struct { @@ -364,7 +364,7 @@ typedef struct { char pad1C[4]; u8 state; char pad21[0xF]; - u8 u30; + u8 update_distance; char pad31[3]; u16 u34; char pad36[0x42]; @@ -481,7 +481,7 @@ float D_L15_001CE370[196][4] = RIBBON_POINTS; float D_L16_001CDD70[196][4] = RIBBON_POINTS; float D_L17_001CE5F0[196][4] = RIBBON_POINTS; float D_L18_001CE2F0[196][4] = RIBBON_POINTS; -P3 D_L00_001DAA80[196] = {0}; +P3 l00_beam_ribbon_world_positions[196] __asm__("D_L00_001DAA80") = {0}; P3 D_L01_001DAF00[196] = {0}; @@ -712,17 +712,21 @@ void draw_joint_aligned_beam_effect(struct Moby *beam_moby) { for (i = 0; i < 0xC4; i++) { fast_vec_scale(&ribbon_vertex_position, D_L00_001D9470[i], beam_effect_vars->f20); transform_vector(&ribbon_vertex_position, &ribbon_vertex_position, mtx); - D_L00_001DAA80[i].x = ribbon_vertex_position.x; - D_L00_001DAA80[i].y = ribbon_vertex_position.y; - D_L00_001DAA80[i].z = ribbon_vertex_position.z; + l00_beam_ribbon_world_positions[i].x = ribbon_vertex_position.x; + l00_beam_ribbon_world_positions[i].y = ribbon_vertex_position.y; + l00_beam_ribbon_world_positions[i].z = ribbon_vertex_position.z; D_L00_001DA0B0[i].v -= 0.025f; if (D_L00_001DA0B0[i].v < -7.0f) { D_L00_001DA0B0[i].v += 7.0f; } } - func_L00_001FDE48_2b3628(0x94, D_L00_001DAA80, D_L00_001DA6D0, D_L00_001DA0B0, 1); func_L00_001FDE48_2b3628( - 0x32, &D_L00_001DAA80[0x92], &D_L00_001DA6D0[0x92], &D_L00_001DA0B0[0x92], 1); + 0x94, l00_beam_ribbon_world_positions, D_L00_001DA6D0, D_L00_001DA0B0, 1); + func_L00_001FDE48_2b3628(0x32, + &l00_beam_ribbon_world_positions[0x92], + &D_L00_001DA6D0[0x92], + &D_L00_001DA0B0[0x92], + 1); } void emit_beam_trail_particles(X *x) __asm__("FUN_L00_002b3c50"); @@ -768,7 +772,7 @@ void emit_beam_trail_particles(X *x) { 1, 10000.0f); } - if (trail_state->f0C) { + if (trail_state->has_previous_position) { trail_sample_spacing = fast_vec_dist(&trail_state->v10, &emission_position) * 0.5f; fast_vec_sub(&previous_position_delta, &trail_state->v10, &emission_position); for (i = 1; i < 2; i++) { @@ -821,7 +825,7 @@ void emit_beam_trail_particles(X *x) { col); if (spawned_effect) spawned_effect[3] = 0x44; - if (trail_state->f0C) { + if (trail_state->has_previous_position) { trail_sample_spacing = fast_vec_dist(&trail_state->v10, &emission_position) * 0.16667f; fast_vec_sub(&previous_position_delta, &trail_state->v10, &emission_position); hero_state = hero.state.current; @@ -847,7 +851,7 @@ void emit_beam_trail_particles(X *x) { } } qcopy(&trail_state->v10, &emission_position); - trail_state->f0C = 1; + trail_state->has_previous_position = 1; } /* Creates a class 0xA7 moby carrying a in its data; sets bytes 0x30/0x31, 0x32 and state 0. */ @@ -910,7 +914,7 @@ void thruster_pack_flame_update(void *moby) { case STATE_INITIALIZE: beam_moby->f18 += 0.5f; beam_moby->state = STATE_WAIT_FOR_BEAM; - beam_moby->u30 = 0xFF; + beam_moby->update_distance = 0xFF; beam_moby->u34 |= 1; break; case STATE_WAIT_FOR_BEAM: @@ -918,11 +922,11 @@ void thruster_pack_flame_update(void *moby) { mark_moby_for_removal(beam_moby); } else if (flag != 0) { beam_moby->state = STATE_BEAM_GROW; - v->i0 = scale_game_frames(2); + v->beam_transition_timer = scale_game_frames(2); v->f30 = 0.0125f / scale_game_frames(2); v->f34 = 0.2f / scale_game_frames(2); v->f38 = 0.05f / scale_game_frames(2); - v->f3C = 0.025f / scale_game_frames(2); + v->beam_quad_scale_step = 0.025f / scale_game_frames(2); v->f20 = 0.0f; v->f24 = 0.0f; v->f28 = 0.0f; @@ -933,28 +937,28 @@ void thruster_pack_flame_update(void *moby) { v->f20 += v->f30; v->f24 += v->f34; v->f28 += v->f38; - v->f2C += v->f3C; - v->i8 = ((s32)hero.items[3].moby); + v->f2C += v->beam_quad_scale_step; + v->thruster_pack_moby = ((s32)hero.items[3].moby); add_draw_callback(FUN_L00_002b3628_4198, beam_moby); if (fast_dec_timer(v) != 0) { beam_moby->state = STATE_BEAM_ACTIVE; v->f20 = 0.0125f; v->f24 = 0.2f; v->f28 = 0.05f; - v->iC = 0; + v->has_previous_emission_position = 0; v->f2C = 0.025f; } break; case STATE_BEAM_ACTIVE: - v->i8 = ((s32)hero.items[3].moby); + v->thruster_pack_moby = ((s32)hero.items[3].moby); add_draw_callback(FUN_L00_002b3628_4198, beam_moby); if (flag == 0) { beam_moby->state = STATE_BEAM_SHRINK; - v->i0 = scale_game_frames(8); + v->beam_transition_timer = scale_game_frames(8); v->f30 = 0.0125f / scale_game_frames(8); v->f34 = 0.2f / scale_game_frames(8); v->f38 = 0.05f / scale_game_frames(8); - v->f3C = 0.025f / scale_game_frames(8); + v->beam_quad_scale_step = 0.025f / scale_game_frames(8); } else { v->f20 = 0.0125f; FUN_L00_002b3c50_4198(beam_moby); @@ -967,8 +971,8 @@ void thruster_pack_flame_update(void *moby) { v->f20 -= v->f30; v->f24 -= v->f34; v->f28 -= v->f38; - v->f2C -= v->f3C; - v->i8 = ((s32)hero.items[3].moby); + v->f2C -= v->beam_quad_scale_step; + v->thruster_pack_moby = ((s32)hero.items[3].moby); add_draw_callback(FUN_L00_002b3628_4198, beam_moby); } break; diff --git a/src/overlays/shared/weapons/trailing_flame.c b/src/overlays/shared/weapons/trailing_flame.c index 097f4bc9aa..039add413e 100644 --- a/src/overlays/shared/weapons/trailing_flame.c +++ b/src/overlays/shared/weapons/trailing_flame.c @@ -32,6 +32,9 @@ extern float FUN_001fa580_2bb400(float, float) __asm__("FUN_001fa580"); u8 *spawn_linked_moby_from_basis(u8 *basis_source_moby) __asm__("FUN_L00_002bb360"); u8 *spawn_linked_moby_from_basis(u8 *basis_source_moby) { + enum { + TRAILING_FLAME_STATE_INITIAL = 0 + }; u8 *spawned_moby = create_moby(0xB3); if (spawned_moby) { u8 *spawned_moby_vars = ((u8 *)MOBY(spawned_moby)->pvars); @@ -40,7 +43,7 @@ u8 *spawn_linked_moby_from_basis(u8 *basis_source_moby) { MOBY(spawned_moby)->visible = 1; MOBY(spawned_moby)->flags = 0x204; MOBY(spawned_moby)->alpha = 0x50; - MOBY(spawned_moby)->state = 0; + MOBY(spawned_moby)->state = TRAILING_FLAME_STATE_INITIAL; *(u8 **)(spawned_moby_vars + 8) = basis_source_moby; clear_u64_value(spawned_moby + 0x40); *(OvlQuad *)&MOBY(spawned_moby)->rot_row0 = *(OvlQuad *)&MOBY(basis_source_moby)->rot_row0; diff --git a/src/overlays/shared/weapons/visibomb.c b/src/overlays/shared/weapons/visibomb.c index d3e517eefd..5b3b848ffc 100644 --- a/src/overlays/shared/weapons/visibomb.c +++ b/src/overlays/shared/weapons/visibomb.c @@ -18,7 +18,7 @@ typedef struct { u8 pad0[0x1A4]; - s32 i1A4; + s32 input_button_mask; } C_b3058; typedef struct { @@ -36,30 +36,30 @@ typedef struct { typedef struct { u8 pad0[0x68]; - u16 u68; - u16 u6A; - s32 i6C; + u16 visibomb_use_count; + u16 visibomb_max_use_time; + s32 visibomb_usage_flags; } R_b3058; typedef struct { - s32 i0; - s32 i4; + s32 launch_cooldown_frames; + s32 active_missile_moby; } V_b3058; typedef struct { u8 pad0[0x10]; f32 v10[4]; u8 pad20[0x34 - 0x20]; - u16 u34; + u16 moby_flags; u8 pad36[0x53 - 0x36]; - u8 b53; + u8 animation_index; u8 pad54[0x70 - 0x54]; u8 b70; u8 pad71[0x78 - 0x71]; V_b3058 *v; u8 pad7C[0xD0 - 0x7C]; - f32 vD0[2]; - f32 fD8; + f32 launch_direction_xy[2]; + f32 launch_direction_z; } O_b3058; extern int D_0015EEA4; @@ -86,11 +86,11 @@ void visibomb_update(O_b3058 *visibomb_moby) { fast_dec_timer(v); controller = (C_b3058 *)&controller_state; g = &hero; - if (!(controller->i1A4 & g->items[0].button_mask)) + if (!(controller->input_button_mask & g->items[0].button_mask)) goto tail; - if (v->i0 != 0) + if (v->launch_cooldown_frames != 0) goto tail; - if (v->i4 != 0) + if (v->active_missile_moby != 0) goto tail; if (g->item_use_locked != 0) goto tail; @@ -119,33 +119,35 @@ void visibomb_update(O_b3058 *visibomb_moby) { fast_vec_add(launch_position, launch_position, u); fast_vec_add(launch_position, launch_position, &camera->pos); } else if (hero.unk22C8 == 1) { - b = fast_arc_tan(vector_length_xy(visibomb_moby->vD0), visibomb_moby->fD8); + b = fast_arc_tan(vector_length_xy(visibomb_moby->launch_direction_xy), + visibomb_moby->launch_direction_z); build_spherical_offset(launch_position, 0.6f, launch_yaw, -b); fast_vec_add(launch_position, launch_position, visibomb_moby->v10); } else { build_spherical_offset(launch_position, 0.6f, launch_yaw, -b); fast_vec_add(launch_position, launch_position, visibomb_moby->v10); } - if (visibomb_moby->b53 != 3) { + if (visibomb_moby->animation_index != 3) { blend_moby_animation(visibomb_moby, 3, 0, 0); } jet_camera_mode(); - v->i4 = spawn_visibomb_missile(visibomb_moby, launch_position, launch_yaw, b); + v->active_missile_moby = + spawn_visibomb_missile(visibomb_moby, launch_position, launch_yaw, b); r = (R_b3058 *)item_usage; - if (r->u68 < 0xFFFF) { - r->u68++; + if (r->visibomb_use_count < 0xFFFF) { + r->visibomb_use_count++; } - if (scale_game_frames(D_0015EEA4) / 600 > r->u6A) { - r->u6A = scale_game_frames(D_0015EEA4) / 600; + if (scale_game_frames(D_0015EEA4) / 600 > r->visibomb_max_use_time) { + r->visibomb_max_use_time = scale_game_frames(D_0015EEA4) / 600; } - r->i6C = r->i6C | (1 << current_level_index) | 0x80000000; - v->i0 = scale_game_frames(0x3C); - } else if (controller->i1A4 & g->items[0].button_mask) { + r->visibomb_usage_flags = r->visibomb_usage_flags | (1 << current_level_index) | 0x80000000; + v->launch_cooldown_frames = scale_game_frames(0x3C); + } else if (controller->input_button_mask & g->items[0].button_mask) { allocate_voice_for_target_entry(0, 0, visibomb_moby); } tail: - if ((visibomb_moby->b70 & 2) && visibomb_moby->b53 != 1) { + if ((visibomb_moby->b70 & 2) && visibomb_moby->animation_index != 1) { blend_moby_animation(visibomb_moby, 1, 0, 0); } - visibomb_moby->u34 |= 4; + visibomb_moby->moby_flags |= 4; } diff --git a/src/overlays/shared/weapons/visibomb_missile.c b/src/overlays/shared/weapons/visibomb_missile.c index bbc3d846cf..98c0564eac 100644 --- a/src/overlays/shared/weapons/visibomb_missile.c +++ b/src/overlays/shared/weapons/visibomb_missile.c @@ -89,12 +89,12 @@ typedef struct D_2b6140 { float f18; float f1C; char p20[4]; - Part *f24; + Part *steering_manipulator; Part *f28; - int f2C; + int engine_voice_slot; char p30[0x14]; - float f44; - float f48; + float launch_ground_clearance; + float smoothed_speed_target; } D_2b6140; typedef struct Hit_2b6140 { @@ -870,20 +870,20 @@ void visibomb_missile_update(struct Moby *missile_moby) { float t = visibomb_missile_default_speed_gp * frame_time_macro; if (controller_state.held & 0x40) t = visibomb_missile_max_speed_gp * frame_time_macro; - missile_vars->f48 += - (t - missile_vars->f48) * visibomb_missile_speed_target_blend_factor_gp; - missile_vars->f4 += - (missile_vars->f48 - missile_vars->f4) * visibomb_missile_speed_blend_factor_gp; + missile_vars->smoothed_speed_target += (t - missile_vars->smoothed_speed_target) * + visibomb_missile_speed_target_blend_factor_gp; + missile_vars->f4 += (missile_vars->smoothed_speed_target - missile_vars->f4) * + visibomb_missile_speed_blend_factor_gp; if (visibomb_missile_max_speed_gp * frame_time_macro < missile_vars->f4) missile_vars->f4 = visibomb_missile_max_speed_gp * frame_time_macro; } engine_voice_set_pitch( - missile_vars->f2C, - truncate_float_to_s32( - (missile_vars->f48 - visibomb_missile_default_speed_gp * frame_time_macro / - (visibomb_missile_max_speed_gp * frame_time_macro - - visibomb_missile_default_speed_gp * frame_time_macro)) * - visibomb_missile_speed_voice_control_scale_gp)); + missile_vars->engine_voice_slot, + truncate_float_to_s32((missile_vars->smoothed_speed_target - + visibomb_missile_default_speed_gp * frame_time_macro / + (visibomb_missile_max_speed_gp * frame_time_macro - + visibomb_missile_default_speed_gp * frame_time_macro)) * + visibomb_missile_speed_voice_control_scale_gp)); if (missile_vars->f10 > 0) { if (missile_vars->f10 < scale_game_frames(0xBB8) - scale_game_frames(5)) { float steered_pitch; @@ -911,7 +911,8 @@ void visibomb_missile_update(struct Moby *missile_moby) { qcopy(&v20, &missile_moby->pos); fast_vec_add(&missile_moby->pos, &missile_moby->pos, &v50); if (scale_game_frames(0xBB8) - scale_game_frames(0x3C) < missile_vars->f10) { - float t = probe_ground_height(&missile_moby->pos, 0, 0.5f) + missile_vars->f44; + float t = probe_ground_height(&missile_moby->pos, 0, 0.5f) + + missile_vars->launch_ground_clearance; if (missile_moby->pos.z < t) { if (coll_hit_moby == 0 || (coll_hit_moby->pclass != 0 && coll_hit_moby->pclass->type == 5)) { @@ -933,7 +934,7 @@ void visibomb_missile_update(struct Moby *missile_moby) { func_L00_002B6E90_2b6140(missile_moby, missile_vars); { struct Moby *skip = missile_moby; - build_axis_rotation_quaternion(&missile_vars->f24->pos, + build_axis_rotation_quaternion(&missile_vars->steering_manipulator->pos, 1, -(missile_vars->f1C * 0.5f + absolute_float(missile_vars->f18 / 3.0f) + @@ -972,14 +973,14 @@ void visibomb_missile_update(struct Moby *missile_moby) { reflect_vector(&k30, &v50, &((Hit_2b6140 *)D_L00_00173E40_2b6140)->v40); fast_vec_normalize(&k30, &k30, frame_time_macro + frame_time_macro); fast_vec_normalize(&k40, &((Hit_2b6140 *)D_L00_00173E40_2b6140)->v40, 1.0f); - if (missile_vars->f2C != -1) { - u8 *e = (u8 *)&voice_pool + missile_vars->f2C * 0x70; + if (missile_vars->engine_voice_slot != -1) { + u8 *e = (u8 *)&voice_pool + missile_vars->engine_voice_slot * 0x70; if (*(struct Moby **)(e + 0x88) == missile_moby) { if (e[0x74] != 0) - release_voice_slot(missile_vars->f2C); + release_voice_slot(missile_vars->engine_voice_slot); } } - missile_vars->f2C = -1; + missile_vars->engine_voice_slot = -1; } else if (((Hit_2b6140 *)D_L00_00173E40_2b6140)->f1C > 0) { missile_moby->command = 1; qcopy(&missile_moby->pos, &((Hit_2b6140 *)D_L00_00173E40_2b6140)->v20); @@ -990,14 +991,14 @@ void visibomb_missile_update(struct Moby *missile_moby) { reflect_vector(&k30, &v50, &((Hit_2b6140 *)D_L00_00173E40_2b6140)->v40); fast_vec_normalize(&k30, &k30, frame_time_macro + frame_time_macro); fast_vec_normalize(&k40, &((Hit_2b6140 *)D_L00_00173E40_2b6140)->v40, 1.0f); - if (missile_vars->f2C != -1) { - u8 *e = (u8 *)&voice_pool + missile_vars->f2C * 0x70; + if (missile_vars->engine_voice_slot != -1) { + u8 *e = (u8 *)&voice_pool + missile_vars->engine_voice_slot * 0x70; if (*(struct Moby **)(e + 0x88) == missile_moby) { if (e[0x74] != 0) - release_voice_slot(missile_vars->f2C); + release_voice_slot(missile_vars->engine_voice_slot); } } - missile_vars->f2C = -1; + missile_vars->engine_voice_slot = -1; } } else if (missile_vars->f10 == 0) { func_L00_002B6E10_2b6140(missile_moby, missile_vars); @@ -1007,14 +1008,14 @@ void visibomb_missile_update(struct Moby *missile_moby) { if (missile_vars->f10 < scale_game_frames(0xBB8) - scale_game_frames(0x3C)) { if (controller_state.pressed & 0x20) { missile_moby->command = 1; - if (missile_vars->f2C != -1) { - u8 *e = (u8 *)&voice_pool + missile_vars->f2C * 0x70; + if (missile_vars->engine_voice_slot != -1) { + u8 *e = (u8 *)&voice_pool + missile_vars->engine_voice_slot * 0x70; if (*(struct Moby **)(e + 0x88) == missile_moby) { if (e[0x74] != 0) - release_voice_slot(missile_vars->f2C); + release_voice_slot(missile_vars->engine_voice_slot); } } - missile_vars->f2C = -1; + missile_vars->engine_voice_slot = -1; } } if (missile_moby->command != 0) { diff --git a/src/overlays/shared/weapons/walloper.c b/src/overlays/shared/weapons/walloper.c index 790769c148..b37ae07f80 100644 --- a/src/overlays/shared/weapons/walloper.c +++ b/src/overlays/shared/weapons/walloper.c @@ -44,7 +44,7 @@ typedef struct { unsigned int color[4]; int unk50, unk54, unk58; float unk5C, unk60; - int unk64; + int corner_2_texture_v; float unk68, unk6C; long unk70, tex, unk80, unk88; } Q_2bc1a0; @@ -104,7 +104,7 @@ extern unsigned int l00_walloper_quad_rare_base_vertex_color __asm__("D_L00_0016 __attribute__((sda)); extern V_2bc1a0 D_L00_001DBB60[] NOT_SDA; -SparkleArc D_L00_001DBBA0[10] = {0}; +SparkleArc l00_walloper_arcs[10] __asm__("D_L00_001DBBA0") = {0}; SparkleArc D_L01_001DC020[10] = {0}; @@ -142,7 +142,7 @@ SparkleArc D_L17_001D0D20[10] = {0}; SparkleArc D_L18_001D0A20[10] = {0}; -short D_L00_001DBED8[10] = {0}; +short l00_walloper_arc_base_alphas[10] __asm__("D_L00_001DBED8") = {0}; short D_L01_001DC358[10] = {0}; @@ -180,7 +180,7 @@ short D_L17_001D1058[10] = {0}; short D_L18_001D0D58[10] = {0}; -short D_L00_001DBEC0[10] = {0}; +short l00_walloper_arc_update_countdowns[10] __asm__("D_L00_001DBEC0") = {0}; short D_L01_001DC340[10] = {0}; @@ -750,7 +750,7 @@ void walloper_update(char *walloper_moby) { case WALLOPER_STATE_INITIALIZE: MOBY(walloper_moby)->state = WALLOPER_STATE_ANIMATION_DRIVEN_EFFECTS; for (arc_init_index = 0; arc_init_index < 10; arc_init_index++) { - D_L00_001DBEC0[arc_init_index] = 0; + l00_walloper_arc_update_countdowns[arc_init_index] = 0; D_L00_001DBEF0[arc_init_index] = 2; D_L00_001DBF08[arc_init_index] = 1; } @@ -792,7 +792,7 @@ void walloper_update(char *walloper_moby) { fast_vec_add(arc_origin, arc_origin, &MOBY(walloper_moby)->pos); any = 0; for (j = 0; j < 10; j++) { - if (D_L00_001DBEC0[j] != 0) { + if (l00_walloper_arc_update_countdowns[j] != 0) { any = 1; break; } @@ -800,19 +800,19 @@ void walloper_update(char *walloper_moby) { if (!flag && !any) return; for (i = 0; i < 10; i = next_arc_index) { - D_L00_001DBEC0[i]--; - if (D_L00_001DBEC0[i] < 0) - D_L00_001DBEC0[i] = 0; - if (D_L00_001DBEC0[i] == 0) { + l00_walloper_arc_update_countdowns[i]--; + if (l00_walloper_arc_update_countdowns[i] < 0) + l00_walloper_arc_update_countdowns[i] = 0; + if (l00_walloper_arc_update_countdowns[i] == 0) { if (flag) { float sign; int k; - D_L00_001DBEC0[i] = 2; - D_L00_001DBED8[i] = 0x40; + l00_walloper_arc_update_countdowns[i] = 2; + l00_walloper_arc_base_alphas[i] = 0x40; random_spherical_offset(arc_step, l00_walloper_arc_step_sample_bound, l00_walloper_arc_step_sample_bound); - qcopy(D_L00_001DBBA0[i].point[0], arc_origin); + qcopy(l00_walloper_arcs[i].point[0], arc_origin); next_arc_index = i + 1; sign = 1.0f; for (k = 1; k < 5; k++) { @@ -823,7 +823,7 @@ void walloper_update(char *walloper_moby) { bend_angle = random_float_between(0.17453292f, 0.7853982f) * sign; sign = -sign; build_look_at_matrix(arc_step, arc_step, arc_point_camera_offset, bend_angle); - fast_vec_add(D_L00_001DBBA0[i].point[k], + fast_vec_add(l00_walloper_arcs[i].point[k], l00_walloper_arc_predecessor_rows[i].point[k - 1], arc_step); } @@ -836,23 +836,23 @@ void walloper_update(char *walloper_moby) { for (k = 1; k < 5; k++) { float *point_offset = workspace[k]; fast_vec_sub(point_offset, - D_L00_001DBBA0[i].point[k], + l00_walloper_arcs[i].point[k], l00_walloper_arc_predecessor_rows[i].point[k - 1]); point_offset[0] += randf_sym(0.0f, 0.1f); point_offset[1] += randf_sym(0.0f, 0.1f); point_offset[2] += randf_sym(0.0f, 0.1f); } next_arc_index = i + 1; - qcopy(D_L00_001DBBA0[i].point[0], arc_origin); + qcopy(l00_walloper_arcs[i].point[0], arc_origin); for (k = 1; k < 5; k++) { - fast_vec_add(D_L00_001DBBA0[i].point[k], + fast_vec_add(l00_walloper_arcs[i].point[k], l00_walloper_arc_predecessor_rows[i].point[k - 1], workspace[k]); } - if (D_L00_001DBEC0[i] > 0) - D_L00_001DBED8[i] = 0x20; + if (l00_walloper_arc_update_countdowns[i] > 0) + l00_walloper_arc_base_alphas[i] = 0x20; else - D_L00_001DBED8[i] = 0; + l00_walloper_arc_base_alphas[i] = 0; } } add_draw_callback(FUN_L00_002bbb00_c, walloper_moby); @@ -864,10 +864,10 @@ void draw_walloper_arc_and_quad_effects(void *moby) { s32 i; s32 arc_alpha; for (i = 0; i < 10; i++) { - if (D_L00_001DBEC0[i] != 0) { - arc_alpha = truncate_float_to_s32(convert_integer_to_float(D_L00_001DBED8[i]) * - D_L00_00161660_f[29]); - draw_walloper_arc_two_pass_quads(&D_L00_001DBBA0[i], + if (l00_walloper_arc_update_countdowns[i] != 0) { + arc_alpha = truncate_float_to_s32( + convert_integer_to_float(l00_walloper_arc_base_alphas[i]) * D_L00_00161660_f[29]); + draw_walloper_arc_two_pass_quads(&l00_walloper_arcs[i], arc_alpha, arc_alpha, 5, @@ -1055,7 +1055,7 @@ void draw_walloper_camera_facing_quad(void *mv) { quad.unk58 = 0; quad.unk5C = 1.0f; quad.unk60 = 1.0f; - quad.unk64 = 0; + quad.corner_2_texture_v = 0; quad.unk68 = 1.0f; quad.unk6C = 1.0f; if (!random_integer_below(4)) diff --git a/src/overlays/shared/weapons/wrench.c b/src/overlays/shared/weapons/wrench.c index c7b6adabf2..cbc1c4b272 100644 --- a/src/overlays/shared/weapons/wrench.c +++ b/src/overlays/shared/weapons/wrench.c @@ -33,21 +33,21 @@ typedef int q_2a7780 __attribute__((mode(TI))); typedef struct { s16 sel[4]; u32 col[4][4]; - f32 f48; + f32 progress_per_frame; q_2a7780 *verts; s16 (*idx)[4][2]; f32 *uv; s16 n; - f32 f5C; + f32 uv_v_progress_scale; } E_2a7780; typedef struct { q_2a7780 m[3]; - q_2a7780 m30; + q_2a7780 hero_position; u8 pad[0x30]; f32 f70; u8 pad2[4]; - s16 h78; + s16 cached_swing_animation; } R_2a7780; typedef struct { @@ -314,20 +314,20 @@ void draw_wrench_swing_effect(O_2a7780 *effect_owner) { color = 0x808080; alpha = scale; if (!((u32)(P_2a7780_G.p2080[0x52] - 0x17) < 3 || P_2a7780_G.p2080[0x52] == 0x2B)) - k = r->h78; + k = r->cached_swing_animation; else k = P_2a7780_G.p2080[0x52]; if (k == 0x17) { - r->h78 = k; + r->cached_swing_animation = k; idx = 0; } else if (k == 0x18) { - r->h78 = k; + r->cached_swing_animation = k; idx = 1; } else if (k == 0x19) { - r->h78 = k; + r->cached_swing_animation = k; idx = 2; } else { - r->h78 = 0x2B; + r->cached_swing_animation = 0x2B; alpha = 0.7f; idx = 3; scale = 1.25f; @@ -352,7 +352,7 @@ void draw_wrench_swing_effect(O_2a7780 *effect_owner) { elapsed_frames = current_frame - last_frame; if (elapsed_frames <= 0) elapsed_frames = 1; - r->f70 = effect_progress + (f32)elapsed_frames * effect_config->f48; + r->f70 = effect_progress + (f32)elapsed_frames * effect_config->progress_per_frame; last_frame = current_frame; if ((f32)(effect_config->n * 2) <= r->f70) { s32 k2 = P_2a7780_G.p2080[0x52]; @@ -366,7 +366,7 @@ void draw_wrench_swing_effect(O_2a7780 *effect_owner) { quad.tag[2] = 0xFF9000000260LL; quad.tag[0] = 5; quad.tag[3] = (nv << 2) | 0x8000000040LL; - qcopy(&r->m30, P_2a7780_G.p2080 + 0x10); + qcopy(&r->hero_position, P_2a7780_G.p2080 + 0x10); for (i = 0; i < effect_config->n; i++) { for (j = 0; j < 4; j++) { s32 vi = effect_config->idx[i][j][0]; @@ -384,7 +384,7 @@ void draw_wrench_swing_effect(O_2a7780 *effect_owner) { quad.col[j] = (truncate_float_to_s32(((s32)quad.col[j] >> 24) * alpha) << 24) | color; fast_vec_scale(&quad.pos[j], &effect_config->verts[vi], scale); uv = (f32 *)(effect_config->idx[i][j][1] * 8 + (s32)effect_config->uv); - uv_v_offset = 1.0f - r->f70 * effect_config->f5C; + uv_v_offset = 1.0f - r->f70 * effect_config->uv_v_progress_scale; quad.uv[j][0] = (uv[0] - 0.5f) * uv_scale + 0.5f; quad.uv[j][1] = (uv[1] - 0.5f) * uv_scale + 0.5f + uv_v_offset; } diff --git a/src/overlays/shared/world/load_level_gameplay.c b/src/overlays/shared/world/load_level_gameplay.c index b00b56f2c6..42e06c645c 100644 --- a/src/overlays/shared/world/load_level_gameplay.c +++ b/src/overlays/shared/world/load_level_gameplay.c @@ -191,9 +191,9 @@ typedef struct { typedef struct { char pad0[0x23C]; - int f23C; - int f240; - int f244; + int background_red; + int background_green; + int background_blue; } LevelState16CB40; typedef struct { @@ -213,7 +213,7 @@ typedef struct TieMatrix { float m3[3]; float f3C; char pad40[0x100]; - char f140[0x80]; + char packed_colors[0x80]; } TieMatrix; typedef struct TieInst { @@ -230,7 +230,7 @@ typedef struct TieInst { typedef struct { char pad0[0x26]; - unsigned short f26; + unsigned short tie_instance_count; TieInst *f28; char pad2C[4]; float f30[3]; @@ -254,7 +254,7 @@ typedef struct ShrubInst { float fC; float f10; char pad14[3]; - unsigned char f17; + unsigned char class_lower_bound_base; short f18; unsigned char f1A; unsigned char f1B; @@ -266,7 +266,7 @@ typedef struct { char pad0[0xC]; float fC; char pad10[6]; - unsigned short f16; + unsigned short shrub_instance_count; ShrubInst *f18; float *f1C; float f20; @@ -307,13 +307,13 @@ typedef struct MobyInst { char pad7C[4]; int f80; char pad84[0x22]; - short fA6; + short moby_class_id; char padA8[8]; - unsigned char fB0; - unsigned char fB1; - short fB2; - short fB4; - short fB6; + unsigned char mission_index; + unsigned char bolt_source_slot; + short gameplay_uid; + short loaded_adjusted_bolt_count; + short loaded_selected_bolt_count; char padB8[0x48]; } MobyInst; @@ -357,7 +357,7 @@ typedef struct { typedef struct { char pad0[0x2080]; - MobyInst *f2080; + MobyInst *hero_moby; char pad2084[0x28C]; } HeroSpawn; @@ -553,9 +553,9 @@ char *load_level_gameplay(int skip_gameplay_read) { int *p = (int *)((char *)hdr + hdr->f0); int *ship_spawn_settings; - D_L00_0016CA40.f23C = *p++; - D_L00_0016CA40.f240 = *p++; - D_L00_0016CA40.f244 = *p++; + D_L00_0016CA40.background_red = *p++; + D_L00_0016CA40.background_green = *p++; + D_L00_0016CA40.background_blue = *p++; *(unsigned char *)&D_L00_0015F444 = *p++; *(unsigned char *)&D_L00_0015F445 = *p++; *(unsigned char *)&D_L00_0015F446 = *p++; @@ -577,7 +577,9 @@ char *load_level_gameplay(int skip_gameplay_read) { D_L00_001604A4 = 500.0f; D_L00_0015FFF0 = 500; D_L00_0016017C = 0x1F4000; - set_background_color(D_L00_0016CA40.f23C, D_L00_0016CA40.f240, D_L00_0016CA40.f244); + set_background_color(D_L00_0016CA40.background_red, + D_L00_0016CA40.background_green, + D_L00_0016CA40.background_blue); vu0_load_micro_program(D_00100AE0); fast_mem_zero16(point_lights, 0x100); fast_mem_zero16(D_L00_001804C0, 0x180); @@ -695,10 +697,10 @@ char *load_level_gameplay(int skip_gameplay_read) { inst->f1A = D_L00_001C5B00[*(int *)p]; if (inst->f1A != last) { D_L00_001C5800[inst->f1A]->f28 = inst; - D_L00_001C5800[inst->f1A]->f26 = 0; + D_L00_001C5800[inst->f1A]->tie_instance_count = 0; last = inst->f1A; } - D_L00_001C5800[inst->f1A]->f26++; + D_L00_001C5800[inst->f1A]->tie_instance_count++; inst->f10 = mtx; inst->f14 = (float)*(int *)(p + 4); inst->f1E = 0xFFFF; @@ -721,7 +723,7 @@ char *load_level_gameplay(int skip_gameplay_read) { D_L00_00160FC8[i].fC = 1.0f / fast_vec_length(&D_L00_00160FC8[i]); D_L00_00160FC8[i].f1C = 1.0f / fast_vec_length(D_L00_00160FC8[i].m1); D_L00_00160FC8[i].f2C = 1.0f / fast_vec_length(D_L00_00160FC8[i].m2); - copy_memory_aligned(mtx->f140, p, 0x80); + copy_memory_aligned(mtx->packed_colors, p, 0x80); p += 0x80; inst->f1C = *(unsigned short *)p; p += 0x10; @@ -775,9 +777,9 @@ char *load_level_gameplay(int skip_gameplay_read) { if (shrub_class_index != last) { last = shrub_class_index; D_L00_001BC030[shrub_class_index]->f18 = inst; - D_L00_001BC030[shrub_class_index]->f16 = 0; + D_L00_001BC030[shrub_class_index]->shrub_instance_count = 0; } - D_L00_001BC030[shrub_class_index]->f16++; + D_L00_001BC030[shrub_class_index]->shrub_instance_count++; inst->f18 = i; inst->f10 = *(float *)(p + 4); if (inst->f10 < 16.0f) { @@ -788,8 +790,10 @@ char *load_level_gameplay(int skip_gameplay_read) { if (D_L00_001BC030[shrub_class_index]->f1C != 0) { float shrub_class_lower_bound; - inst->f17 = truncate_float_to_s32(*D_L00_001BC030[shrub_class_index]->f1C); - shrub_class_lower_bound = convert_integer_to_float(inst->f17) + 24.0f; + inst->class_lower_bound_base = + truncate_float_to_s32(*D_L00_001BC030[shrub_class_index]->f1C); + shrub_class_lower_bound = + convert_integer_to_float(inst->class_lower_bound_base) + 24.0f; if (inst->f10 < shrub_class_lower_bound) { inst->f10 = shrub_class_lower_bound; } @@ -1023,11 +1027,11 @@ char *load_level_gameplay(int skip_gameplay_read) { m = moby_table + count; init_moby_instance(m, *(int *)p); p += 4; - m->fB1 = vis; - m->fB2 = uid; - m->fB0 = mission; - m->fB4 = adjusted_bolt_count; - m->fB6 = selected_bolt_count; + m->bolt_source_slot = vis; + m->gameplay_uid = uid; + m->mission_index = mission; + m->loaded_adjusted_bolt_count = adjusted_bolt_count; + m->loaded_selected_bolt_count = selected_bolt_count; if (m->f24 != 0) { m->f2C = m->f24->f24 * *(float *)p; } @@ -1465,7 +1469,7 @@ char *load_level_gameplay(int skip_gameplay_read) { if (D_0015ED84 == 13 && level_render_state.content_variant == 2) { if (D_L00_00160540 != 0) { for (m = moby_table; m->f20 != 0xFF; m++) { - if (m->fA6 == first_class_ids[level_render_state.content_variant]) { + if (m->moby_class_id == first_class_ids[level_render_state.content_variant]) { initialize_moby_state_record((char *)m); set_moby_animation(m, 1, 0); break; @@ -1543,7 +1547,7 @@ char *load_level_gameplay(int skip_gameplay_read) { for (m = moby_table; m->f20 != 0xFF; m++) { if (m->f36 != 0x7F80) { - int uid = m->fB2; + int uid = m->gameplay_uid; int j; k++; @@ -1653,7 +1657,8 @@ char *load_level_gameplay(int skip_gameplay_read) { D_L00_0015F5CC = 0; D_L00_0015F63C = 0; if (level_render_state.player != 0) { - *(long *)&((MobyInst *)level_render_state.player)->f38 = *(long *)&D_0013F350.f2080->f38; + *(long *)&((MobyInst *)level_render_state.player)->f38 = + *(long *)&D_0013F350.hero_moby->f38; } switch (D_0015ED84) { case 2: diff --git a/src/rendering/frame/initialize_level_render_state.c b/src/rendering/frame/initialize_level_render_state.c index 1c11581255..6eaf562224 100644 --- a/src/rendering/frame/initialize_level_render_state.c +++ b/src/rendering/frame/initialize_level_render_state.c @@ -42,7 +42,7 @@ typedef struct TieData { typedef struct ShrubData { IRow m[3]; - FRow m3; + FRow translation_and_position_scale; } ShrubData; typedef struct LevelHeader { @@ -373,9 +373,9 @@ u8 *initialize_level_render_state(LevelHeader *header) { qcopy(&shrub_data->m[0], shrub_record + 0x10); qcopy(&shrub_data->m[1], shrub_record + 0x20); qcopy(&shrub_data->m[2], shrub_record + 0x30); - qcopy(&shrub_data->m3, shrub_record + 0x40); + qcopy(&shrub_data->translation_and_position_scale, shrub_record + 0x40); shrub_record += 0x50; - shrub_data->m3.w = shrub_render_classes[shrub_class]->unk20; + shrub_data->translation_and_position_scale.w = shrub_render_classes[shrub_class]->unk20; horizontal_scale = (fast_vec_length(&shrub_data->m[0]) + fast_vec_length(&shrub_data->m[1])) * 0.5f; vertical_scale = fast_vec_length(&shrub_data->m[2]); @@ -403,8 +403,8 @@ u8 *initialize_level_render_state(LevelHeader *header) { max_axis_length = max_float(max_axis_length, fast_vec_length(&shrub_data->m[1])); max_axis_length = max_float(max_axis_length, fast_vec_length(&shrub_data->m[2])); shrub->scale = shrub_render_classes[shrub_class]->bounding_sphere[3] * max_axis_length; - scale_vector(shrub, shrub, shrub_data->m3.w); - fast_vec_add(shrub, shrub, &shrub_data->m3); + scale_vector(shrub, shrub, shrub_data->translation_and_position_scale.w); + fast_vec_add(shrub, shrub, &shrub_data->translation_and_position_scale); } shrub_list = (u16 *)0x70000000; for (shrub_light_index = 0; shrub_light_index < shrub_count; shrub_light_index++) { diff --git a/src/rendering/lights/detach_point_light.c b/src/rendering/lights/detach_point_light.c index 2d5b107f36..4a47315e42 100644 --- a/src/rendering/lights/detach_point_light.c +++ b/src/rendering/lights/detach_point_light.c @@ -12,7 +12,7 @@ struct ShrubLightLink { struct TfragLightLink { u8 pad_0[0x35]; - u8 unk35; + u8 refresh_pending; u16 packed_lights; }; @@ -115,7 +115,7 @@ void detach_point_light(s32 light_index) { } tfrag_index_cursor += 1; if (tfrag_packed_lights == 0xFFFF) { - tfrag_link->unk35 = 1; + tfrag_link->refresh_pending = 1; } tfrag_link->packed_lights = tfrag_packed_lights; } while (tfrag_index_cursor != tfrag_indices_end_address); diff --git a/src/rendering/sky/draw_sky_shells.c b/src/rendering/sky/draw_sky_shells.c index d82b8453e0..f80bd0c29a 100644 --- a/src/rendering/sky/draw_sky_shells.c +++ b/src/rendering/sky/draw_sky_shells.c @@ -43,6 +43,9 @@ void draw_sky_shells(void) { SKY_SHELL_ONE_AND_THREE_QUARTERS_SCALE = 4, SKY_SHELL_DOUBLE_SCALE = 5 }; + enum { + SKY_SHELL_RELOCATION_RESET = 0 + }; f32 rotation_angles[4]; f32 shell_scale; u8 *transform_row; @@ -50,7 +53,7 @@ void draw_sky_shells(void) { shell_index = 0; setup_sky_gif_paging(); - level_sky_effect_data->relocation_state = 0; + level_sky_effect_data->relocation_state = SKY_SHELL_RELOCATION_RESET; set_identity_matrix(&sky_matrix); clear_u64_value(rotation_angles); if (level_sky_effect_data->shell_count > 0) { diff --git a/src/rendering/view/update_view_context.c b/src/rendering/view/update_view_context.c index cedafbe352..e43865c8ce 100644 --- a/src/rendering/view/update_view_context.c +++ b/src/rendering/view/update_view_context.c @@ -20,7 +20,7 @@ struct Clip { Vec4 constants[3]; }; -Vec4 D_0018CFC0[4] = {0}; +Vec4 view_clip_constants[4] __asm__("D_0018CFC0") = {0}; extern f32 view_projection_scale_bias_constants[4] __asm__("D_00160720"); @@ -104,10 +104,10 @@ void update_view_context(void) { near_clip = view->near_clip; view->clip_distances.f[1] = near_clip; view->clip_scale.f[2] = (horizontal_clip_scale + vertical_clip_scale) * 0.5f; - qcopy(&D_0018CFC0[0], &view->fov); - qcopy(&D_0018CFC0[1], &view->aspect_scale); - qcopy(&D_0018CFC0[2], &view->clip_scale); - qcopy(&D_0018CFC0[3], &view->clip_distances); + qcopy(&view_clip_constants[0], &view->fov); + qcopy(&view_clip_constants[1], &view->aspect_scale); + qcopy(&view_clip_constants[2], &view->clip_scale); + qcopy(&view_clip_constants[3], &view->clip_distances); /* Retail lw instructions carry the fog endpoint float bits into packet fields. */ far_bits = *(s32 *)&view->fog_far_int; diff --git a/src/sdk/ipu/wait_ipu_idle64.c b/src/sdk/ipu/wait_ipu_idle64.c index b7c25d2ddd..6e20586660 100644 --- a/src/sdk/ipu/wait_ipu_idle64.c +++ b/src/sdk/ipu/wait_ipu_idle64.c @@ -2,11 +2,14 @@ #include "rnc/sdk/mpeg/api.h" s64 _waitIpuIdle64(s32 *ctx) { + enum { + IPU_CMD_IDLE_THRESHOLD = 0 + }; long new_var; s64 status; int count = 0; status = *((volatile s64 *)0x10002000); - if (status < 0) { + if (status < IPU_CMD_IDLE_THRESHOLD) { if (((*((volatile u32 *)0x10002010)) & 0x4000) == 0) { do { new_var = 0x1389; @@ -18,7 +21,8 @@ s64 _waitIpuIdle64(s32 *ctx) { count++; } status = *((volatile s64 *)0x10002000); - } while ((status < 0) && (((*((volatile u32 *)0x10002010)) & 0x4000) == 0)); + } while ((status < IPU_CMD_IDLE_THRESHOLD) && + (((*((volatile u32 *)0x10002010)) & 0x4000) == 0)); } } return status; diff --git a/src/sdk/libc/string/find_substring.c b/src/sdk/libc/string/find_substring.c index 934034ed0f..93cc029df9 100644 --- a/src/sdk/libc/string/find_substring.c +++ b/src/sdk/libc/string/find_substring.c @@ -1,18 +1,18 @@ #include "types.h" -char *FindSubstring(char *search_string, char *sub) { +char *FindSubstring(char *search_string, char *target_substring) { s32 i; if (*search_string == 0) { - return *sub == 0 ? search_string : 0; + return *target_substring == 0 ? search_string : 0; } do { i = 0; while (1) { - if (sub[i] == 0) { + if (target_substring[i] == 0) { return search_string; } - if (sub[i] != search_string[i]) { + if (target_substring[i] != search_string[i]) { break; } i++; diff --git a/src/sdk/mpeg/bitstream/_flushBuf.c b/src/sdk/mpeg/bitstream/_flushBuf.c index 06b6814a9b..1b68889276 100644 --- a/src/sdk/mpeg/bitstream/_flushBuf.c +++ b/src/sdk/mpeg/bitstream/_flushBuf.c @@ -24,10 +24,10 @@ typedef struct FlushBufContext { u8 pad_0[0x818]; - s32 unk818; + s32 ipu_command_class; u8 pad_81C[0x1C]; - s32 unk838; - s32 unk83C; + s32 bit_window; + s32 available_bit_count; u8 pad_840[0x18]; s32 unk858; } FlushBufContext; @@ -58,8 +58,8 @@ void _flushBuf(FlushBufContext *decoder_state, s32 bit_count) { *(volatile u32 *)0x10002000 = command; index = command >> 0x1C; table_value = IpuCommandTable[index]; - decoder_state->unk818 = table_value; + decoder_state->ipu_command_class = table_value; idle_result = _waitIpuIdle64(decoder_state, &IpuCommandTable[index]); - decoder_state->unk838 = (s32)idle_result; - decoder_state->unk83C = 0x20; + decoder_state->bit_window = (s32)idle_result; + decoder_state->available_bit_count = 0x20; } diff --git a/src/sdk/mpeg/bitstream/_peepBit.c b/src/sdk/mpeg/bitstream/_peepBit.c index 823c5f825c..e3e8ed2ce1 100644 --- a/src/sdk/mpeg/bitstream/_peepBit.c +++ b/src/sdk/mpeg/bitstream/_peepBit.c @@ -5,10 +5,10 @@ typedef struct PeepBitContext { u8 pad_0[0x818]; - s32 unk818; + s32 ipu_command_class; u8 pad_81C[0x1C]; - s32 unk838; - s32 unk83C; + s32 bit_window; + s32 available_bit_count; u8 pad_840[0x18]; s32 unk858; } PeepBitContext; @@ -16,7 +16,7 @@ typedef struct PeepBitContext { s32 _peepBit(PeepBitContext *ctx, s32 count) { s32 counter; - if (ctx->unk818 != 0 || ctx->unk83C < count) { + if (ctx->ipu_command_class != 0 || ctx->available_bit_count < count) { counter = 0; if ((*(volatile u32 *)0x10002010 & 0x80004000) == 0x80000000) { do { @@ -27,9 +27,9 @@ s32 _peepBit(PeepBitContext *ctx, s32 count) { } while ((*(volatile u32 *)0x10002010 & 0x80004000) == 0x80000000); } *(volatile u32 *)0x10002000 = 0x40000000; - ctx->unk818 = IpuCommandTable[4]; - ctx->unk838 = (s32)_waitIpuIdle64(ctx); - ctx->unk83C = 0x20; + ctx->ipu_command_class = IpuCommandTable[4]; + ctx->bit_window = (s32)_waitIpuIdle64(ctx); + ctx->available_bit_count = 0x20; } - return (u32)ctx->unk838 >> (0x20 - count); + return (u32)ctx->bit_window >> (0x20 - count); } diff --git a/src/sdk/mpeg/bitstream/nextbit.c b/src/sdk/mpeg/bitstream/nextbit.c index db3e49630a..447f0f637e 100644 --- a/src/sdk/mpeg/bitstream/nextbit.c +++ b/src/sdk/mpeg/bitstream/nextbit.c @@ -5,10 +5,10 @@ typedef struct NextBitContext { u8 pad_0[0x818]; - s32 unk818; + s32 ipu_command_class; u8 pad_81C[0x1C]; - s32 unk838; - s32 unk83C; + s32 cached_bit_window; + s32 available_bit_count; u8 pad_840[0x18]; s32 unk858; } NextBitContext; @@ -26,16 +26,16 @@ s32 _nextBit(NextBitContext *ctx, s32 count) { } } while ((*(volatile u32 *)0x10002010 & 0x80004000) == 0x80000000); } - if (ctx->unk818 != 0 || ctx->unk83C < count) { + if (ctx->ipu_command_class != 0 || ctx->available_bit_count < count) { *(volatile u32 *)0x10002000 = 0x40000000; - ctx->unk818 = IpuCommandTable[4]; - ctx->unk838 = (s32)(s64)_waitIpuIdle64(ctx); + ctx->ipu_command_class = IpuCommandTable[4]; + ctx->cached_bit_window = (s32)(s64)_waitIpuIdle64(ctx); } - consumed_bits = ((u32)ctx->unk838) >> (0x20 - count); - ctx->unk83C = 0x20; + consumed_bits = ((u32)ctx->cached_bit_window) >> (0x20 - count); + ctx->available_bit_count = 0x20; word = count | 0x40000000; *(volatile u32 *)0x10002000 = word; - ctx->unk818 = IpuCommandTable[word >> 28]; - ctx->unk838 = (s32)(s64)_waitIpuIdle64(ctx); + ctx->ipu_command_class = IpuCommandTable[word >> 28]; + ctx->cached_bit_window = (s32)(s64)_waitIpuIdle64(ctx); return consumed_bits; } diff --git a/src/sdk/mpeg/macroblock/cpr8.c b/src/sdk/mpeg/macroblock/cpr8.c index 94b219def2..59d53f5493 100644 --- a/src/sdk/mpeg/macroblock/cpr8.c +++ b/src/sdk/mpeg/macroblock/cpr8.c @@ -14,12 +14,15 @@ struct MpegDecoderFrame { s32 unkE0; s32 unkE4; u8 pad_E8[0x8C]; - s32 unk174; + s32 transfer_layout_mode; }; extern s32 DIntr(); void _cpr8(struct MpegDecoder *decoder, struct MpegCopyParams *copy_params) { + enum { + MPEG_TRANSFER_LAYOUT_SINGLE_PASS = 3 + }; struct MpegDecoderFrame *decoder_transfer_layout; s32 transfer_pass_count; s32 destination_pass_base; @@ -38,7 +41,7 @@ void _cpr8(struct MpegDecoder *decoder, struct MpegCopyParams *copy_params) { decoder_transfer_layout = (struct MpegDecoderFrame *)decoder; source_addr = copy_params->unk0 & 0x0FFFFFFF; destination_pass_base = decoder->unkD8 & 0x0FFFFFFF; - if (decoder_transfer_layout->unk174 == 3) { + if (decoder_transfer_layout->transfer_layout_mode == MPEG_TRANSFER_LAYOUT_SINGLE_PASS) { goto block_3; } layout_width = decoder_transfer_layout->unkE0; diff --git a/src/sdk/mpeg/ref_images/_dispRefImage.c b/src/sdk/mpeg/ref_images/_dispRefImage.c index cfe65c0120..73f6845d66 100644 --- a/src/sdk/mpeg/ref_images/_dispRefImage.c +++ b/src/sdk/mpeg/ref_images/_dispRefImage.c @@ -15,6 +15,9 @@ struct MpegDisplayState { extern u32 display_values_by_picture_flags[] __asm__("D_00132E98"); void _dispRefImage(struct MpegDecoder *decoder, struct MpegRefImage *ref_image) { + enum { + MPEG_REF_IMAGE_STATUS_DISPLAYABLE = 1 + }; u64 display_value; struct MpegDisplayState *ref_info; s32 *mpeg_words; @@ -38,7 +41,7 @@ void _dispRefImage(struct MpegDecoder *decoder, struct MpegRefImage *ref_image) decoder->unkC4 = (s32)ref_image->unk54; decoder->unkC8 = (s32)ref_image->unk58; if (_isOutSizeOK(decoder, ref_image) != 0) { - if (ref_image->status == 1) { + if (ref_image->status == MPEG_REF_IMAGE_STATUS_DISPLAYABLE) { if (decoder->unkB0 != 0) { _csc_storeRefImage(decoder, ref_image); } else { diff --git a/src/ui/hud/remove_hud_item.c b/src/ui/hud/remove_hud_item.c index da049ce7ec..1d44749656 100644 --- a/src/ui/hud/remove_hud_item.c +++ b/src/ui/hud/remove_hud_item.c @@ -2,7 +2,7 @@ struct HudSlotArray { u8 pad_0[0x64]; - s32 unk64; + s32 slot_item_id; }; extern struct HudSlotArray hud_chan_slots __asm__("D_00199B60"); @@ -21,7 +21,7 @@ s32 remove_hud_item(s32 hud_item_id) { s32 index; index = 0; - if (hud_chan_slots.unk64 != hud_item_id) { + if (hud_chan_slots.slot_item_id != hud_item_id) { cursor = (s32 *)((u8 *)&hud_chan_slots + 0x64); loop_2: index += 1; diff --git a/src/ui/menus/item_preview/update_item_preview_moby.c b/src/ui/menus/item_preview/update_item_preview_moby.c index 07305e0d1e..bc5eb8944c 100644 --- a/src/ui/menus/item_preview/update_item_preview_moby.c +++ b/src/ui/menus/item_preview/update_item_preview_moby.c @@ -20,12 +20,12 @@ int update_item_preview_moby(struct MenuScreen *menu) { struct MenuScreen *grid = menu_system.current->focus; int selected_item_id = grid->data.grid.cells[grid->data.grid.selected_cell].id; short current_preview_class; - MenuItemInfo *rec; + MenuItemInfo *selected_item_info; short want; current_preview_class = menu->data.preview.moby != 0 ? menu->data.preview.moby->oclass : -1; - rec = &menu_item_info[selected_item_id]; - want = rec->preview_class; + selected_item_info = &menu_item_info[selected_item_id]; + want = selected_item_info->preview_class; if (want != -1 && current_preview_class == -1) { struct Moby *spawned_moby = create_menu_preview_moby(want); diff --git a/src/ui/menus/missions/draw_missions_menu2.c b/src/ui/menus/missions/draw_missions_menu2.c index 79ff65de26..958fdd9fce 100644 --- a/src/ui/menus/missions/draw_missions_menu2.c +++ b/src/ui/menus/missions/draw_missions_menu2.c @@ -13,15 +13,15 @@ struct MissionsMenu { struct Rect { u16 unk00; - u16 unk02; + u16 bottom; u16 unk04; - u16 unk06; + u16 right; s16 unk08; - s16 unk0A; + s16 anchor_y; s16 unk0C; s16 unk0E; u16 unk10; - u16 unk12; + u16 flags; s16 unk14; s16 unk16; }; @@ -94,12 +94,12 @@ s32 draw_missions_menu2(struct MissionsMenu *menu) { } if (mask < 0) { memset(&text_region_settings, 0, 0x18); - text_region_settings.unk02 = menu->unk24; - text_region_settings.unk06 = menu->unk20; + text_region_settings.bottom = menu->unk24; + text_region_settings.right = menu->unk20; text_region_settings.unk08 = menu->unk24 >> 1; - text_region_settings.unk0A = mission_text_y + 8; + text_region_settings.anchor_y = mission_text_y + 8; text_region_settings.unk10 = 0x10; - text_region_settings.unk12 = 1; + text_region_settings.flags = 1; trailing_text_region = text_region_settings; font_print_window_small( &trailing_text_region, 0x8020FFFF, get_help_message_text(0x523D), -1); diff --git a/src/ui/menus/pause/build_pause_item_list.c b/src/ui/menus/pause/build_pause_item_list.c index 2b2881ba6c..c3a9b28433 100644 --- a/src/ui/menus/pause/build_pause_item_list.c +++ b/src/ui/menus/pause/build_pause_item_list.c @@ -29,15 +29,16 @@ int build_pause_item_list(void) { int id = pause_item_candidate_entries[i].id; if (item_available[id] != 0) { Item0A *pause_item_entry = &pause_item_list_entries[item_count]; - MenuItemInfo *rec = &menu_item_info[id]; + MenuItemInfo *menu_item_definition = &menu_item_info[id]; unsigned char b = item_text_variant[id]; int has_text_variant = b != 0; - pause_item_entry->a = rec->unk38; + pause_item_entry->a = menu_item_definition->unk38; pause_item_entry->b = has_text_variant << 2; pause_item_entry->c = 0; pause_item_entry->id = id; pause_item_entry->idx = i; - pause_item_variant_values[item_count] = b ? rec->unk42 : rec->unk40; + pause_item_variant_values[item_count] = + b ? menu_item_definition->unk42 : menu_item_definition->unk40; item_count++; } } diff --git a/src/ui/menus/save_data/save_card_state_checking_save.c b/src/ui/menus/save_data/save_card_state_checking_save.c index 3dcda2281d..6df3cee85f 100644 --- a/src/ui/menus/save_data/save_card_state_checking_save.c +++ b/src/ui/menus/save_data/save_card_state_checking_save.c @@ -5,6 +5,9 @@ void save_card_state_checking_save(void) __asm__("FUN_00208c00"); void save_card_state_checking_save(void) { + enum { + SAVE_CARD_STATE_INSUFFICIENT_FREE_SPACE = 0x13 + }; struct MemoryCardState *card_state = &memory_card_state; int save_index; if (card_state->card[0].sync_result < -1) { @@ -14,7 +17,7 @@ void save_card_state_checking_save(void) { save_index = card_state->card[0].save_index; if (save_index == -2) { if (card_state->card[0].free < 0x15E) { - mode_freeze_state = 0x13; + mode_freeze_state = SAVE_CARD_STATE_INSUFFICIENT_FREE_SPACE; } else { mode_freeze_state = 0xC; } diff --git a/src/ui/vendor/render_vendor_item_icon_strip_pass.c b/src/ui/vendor/render_vendor_item_icon_strip_pass.c index c9bf6fe6ca..c0d76922b4 100644 --- a/src/ui/vendor/render_vendor_item_icon_strip_pass.c +++ b/src/ui/vendor/render_vendor_item_icon_strip_pass.c @@ -9,7 +9,7 @@ struct HudMenuState { u8 pad_50[0x8]; s32 unk58; u8 pad_5C[0x1B4]; - s32 unk210; + s32 selection_entry_count; }; struct HudItemEntry { @@ -40,7 +40,7 @@ void render_vendor_item_icon_strip_pass(void) { s32 fill_color; draw_framebuffer_rect(0, 0, 0x200, 0x80, 0x200, 0x80, 0); - if (D_001E63C0.unk210 < 8) { + if (D_001E63C0.selection_entry_count < 8) { sprite_x = 0xC; item_index = 0; slot_x = D_001E63C0.unk58 * 0x38; @@ -49,7 +49,7 @@ void render_vendor_item_icon_strip_pass(void) { 0x80000000; draw_framebuffer_rect(slot_x + 8, 2, slot_x + 0x40, 0x3A, 0x200, 0x80, fill_color); draw_framebuffer_rect(slot_x + 0xA, 4, slot_x + 0x3E, 0x38, 0x200, 0x80, 0x80000000); - if (D_001E63C0.unk210 > 0) { + if (D_001E63C0.selection_entry_count > 0) { do { selection_purchase_kind_ptr = (s32 *)(void *)((u8 *)&D_001E63C0 + 0xD4 + item_index * 0x14); @@ -65,7 +65,7 @@ void render_vendor_item_icon_strip_pass(void) { draw_hud_sprite(frame_index, sprite_x, 6, 0x30, 0x30, 0x80); sprite_x += 0x38; item_index += 1; - } while (item_index < D_001E63C0.unk210); + } while (item_index < D_001E63C0.selection_entry_count); } } else { if (D_001E63C0.unk4C < 0) { @@ -89,9 +89,9 @@ void render_vendor_item_icon_strip_pass(void) { slot = -2; do { first_slot = D_001E63C0.unk58 - 3; - entry_offset = - ((s32)((D_001E63C0.unk210 * 2) + slot + first_slot) % (s32)D_001E63C0.unk210) * - 0x14; + entry_offset = ((s32)((D_001E63C0.selection_entry_count * 2) + slot + first_slot) % + (s32)D_001E63C0.selection_entry_count) * + 0x14; icon = ((struct HudItemEntry *)(void *)((u8 *)((u8 *)menu_item_info) + *(s32 *)(void *)(entry_offset + ((u8 *)&D_001E63C0 + 0xD0)) *