diff --git a/include/scratchpad.h b/include/scratchpad.h index 836a5fd2..e9c9e786 100644 --- a/include/scratchpad.h +++ b/include/scratchpad.h @@ -65,7 +65,10 @@ extern u8* pc_archive_slots[22]; #define SP_OT_CURSOR mmx4_sp_ordering_cursor #define SP_AUX_CURSOR mmx4_sp_auxiliary_cursor #define SP_AUX_POLY_F4_CURSOR ((POLY_F4*)mmx4_sp_auxiliary_cursor) +#define SP_BG_BLOCK_WIDTH (*MMX4_SP_PTR(0x10C, u32)) +#define SP_BG_BLOCK_HEIGHT (*MMX4_SP_PTR(0x110, u32)) #define SP_CUR_BG_INDEX (*MMX4_SP_PTR(0x114, s32)) +#define SP_BG_BLOCK (*MMX4_SP_PTR(0x118, u8)) #define SP_BG_SPRITE_COUNT (*MMX4_SP_PTR(0x11C, s32)) #define SP_SPRITE_COUNT (*MMX4_SP_PTR(0x124, s32)) #define SP_ARCHIVE_ENTRY(archive, index) \ @@ -113,7 +116,10 @@ extern u8* scratchpad_base; #define SP_OT_CURSOR (*(void**)SP(0x10C)) #define SP_AUX_CURSOR (*(void**)SP(0x110)) #define SP_AUX_POLY_F4_CURSOR (*(POLY_F4**)SP(0x110)) +#define SP_BG_BLOCK_WIDTH (*(u32*)SP(0x10C)) +#define SP_BG_BLOCK_HEIGHT (*(u32*)SP(0x110)) #define SP_CUR_BG_INDEX (*(s32*)SP(0x114)) +#define SP_BG_BLOCK (*(u8*)SP(0x118)) #define SP_BG_SPRITE_COUNT (*(s32*)SP(0x11C)) #define SP_SPRITE_COUNT (*(s32*)SP(0x124)) #define SP_ARCHIVE_ENTRY(archive, index) \ diff --git a/src/main/165A0.c b/src/main/165A0.c index e25e4bc6..b94b291d 100644 --- a/src/main/165A0.c +++ b/src/main/165A0.c @@ -4,6 +4,7 @@ void func_800264D0(s32 layer, s32 x, s32 y); void func_80026720(void); void func_800267D4(s32 input); void func_8002728C(void); +void func_800270F8(s32 x, s32 y, s32 tile_x, s32 tile_y); #ifdef MMX4_PC #include @@ -447,7 +448,91 @@ INCLUDE_ASM("main/nonmatchings/165A0", func_80026894); INCLUDE_ASM("main/nonmatchings/165A0", func_80026AA0); -INCLUDE_ASM("main/nonmatchings/165A0", func_80026CEC); +void func_80026CEC(s32 arg0) +{ + s32 x_hi; + s32 x_lo; + s32 y_lo; + s32 y_hi; + u32 width_a; + u32 width_c; + s32 height_a; + s32 height_b; + s32 x_b; + s32 x_c; + s32 y; + s32 x; + s32 y_pos, x_pos; + u32 width_b; + + x_pos = background_objects[arg0].x_pos.i.hi; + y_pos = background_objects[arg0].y_pos.i.hi; + + x_lo = (x_pos >> 8) & 0x1F; + x_hi = (x_pos >> 4) & 0xF; + + y_lo = (y_pos >> 8) & 0x1F; + y_hi = (y_pos >> 4) & 0xF; + + width_a = 0x10 - x_hi; + width_b = 0x15 - width_a; + + height_a = 0x10 - y_hi; + height_b = 0x10 - height_a; + + width_c = 0; + if (width_b > 0x10) { + width_c = width_b - 0x10; + width_b = 0x10; + } + + x = -(x_pos & 0xF); + y = -(y_pos & 0xF); + x_b = x + (width_a * 0x10); + x_c = x_b + (width_b * 0x10); + + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 0]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_a; + SP_BG_BLOCK_HEIGHT = height_a; + func_800270F8(x, y, x_hi, y_hi); + } + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 1]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_b; + func_800270F8(x_b, y, 0, y_hi); + } + if (width_c != 0) { + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 2]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_c; + func_800270F8(x_c, y, 0, y_hi); + } + } + + if (height_b != 0) { + y_lo++; + y += height_a * 0x10; + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 0]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_a; + SP_BG_BLOCK_HEIGHT = height_b; + func_800270F8(x, y, x_hi, 0); + } + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 1]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_b; + func_800270F8(x_b, y, 0, 0); + } + if (width_c != 0) { + SP_BG_BLOCK = (SP_BG_TILEMAP + arg0 * layout_size + layout_width * y_lo)[x_lo + 2]; + if (SP_BG_BLOCK != 0) { + SP_BG_BLOCK_WIDTH = width_c; + func_800270F8(x_c, y, 0, 0); + } + } + } +} INCLUDE_ASM("main/nonmatchings/165A0", func_800270F8); void func_8002728C(void) diff --git a/src/main/1EC20.c b/src/main/1EC20.c index 9e04b38e..e64f211f 100644 --- a/src/main/1EC20.c +++ b/src/main/1EC20.c @@ -223,7 +223,151 @@ void func_8002E8D4(struct EngineObj* arg0) } // engine_state_3_update_funcs state 4 (mission selection) -INCLUDE_ASM("main/nonmatchings/1EC20", func_8002E994); +void func_8002E994(struct EngineObj* arg0) +{ + u8 var_a0; + u8 var_v1; + + switch (controller_input.held & 0xF000) { + case PADLup: + if (!((controller_input.held ^ controller_input.pressed) & PADLup)) { + break; + } + + if (arg0->unk8 == 0) { + if (arg0->unkA++ < 3) { + arg0->unk8 = 0x1E; + } else { + arg0->unk8 = 0xA; + } + if (arg0->unk5F >= 5) { + if (arg0->unk3 == 8) { + arg0->unk3 = 0; + func_8001540C(5, 0, 0); + } else if (arg0->unk3 >= 4) { + arg0->unk3 = 8; + func_8001540C(5, 0, 0); + } + } else { + if (arg0->unk3 >= 4) { + arg0->unk3 -= 4; + func_8001540C(5, 0, 0); + } + } + } else { + arg0->unk8--; + } + break; + case PADLdown: + if (!((controller_input.held ^ controller_input.pressed) & PADLdown)) { + break; + } + + if (arg0->unk8 == 0) { + if (arg0->unkA++ < 3) { + arg0->unk8 = 0x1E; + } else { + arg0->unk8 = 0xA; + } + if (arg0->unk5F >= 5) { + if (arg0->unk3 == 8) { + arg0->unk3 = 4; + func_8001540C(5, 0, 0); + } else if (arg0->unk3 < 4) { + arg0->unk3 = 8; + func_8001540C(5, 0, 0); + } + } else { + if (arg0->unk3 < 4) { + arg0->unk3 += 4; + func_8001540C(5, 0, 0); + } + } + } else { + arg0->unk8--; + } + break; + case PADLright: + if (!((controller_input.held ^ controller_input.pressed) & PADLright)) { + break; + } + + if (arg0->unk8 == 0) { + if (arg0->unkA++ < 3) { + arg0->unk8 = 0x1E; + } else { + arg0->unk8 = 0xA; + } + if (arg0->unk3 != 8) { + if ((arg0->unk3 & 3) != 3) { + arg0->unk3++; + func_8001540C(5, 0, 0); + } + } + } else { + arg0->unk8--; + } + break; + case PADLleft: + if (!((controller_input.held ^ controller_input.pressed) & PADLleft)) { + break; + } + + if (arg0->unk8 != 0) { + arg0->unk8--; + break; + } + + if (arg0->unkA++ < 3) { + arg0->unk8 = 0x1E; + } else { + arg0->unk8 = 0xA; + } + if (arg0->unk3 != 8) { + if (arg0->unk3 & 3) { + arg0->unk3--; + func_8001540C(5, 0, 0); + } + } + break; + default: + arg0->unk8 = 0; + arg0->unkA = 0; + break; + } + + if (controller_input.pressed & (PADstart | PAD_CONFIRM)) { + if (arg0->unk3 == 8) { + var_a0 = 0x11; + if (arg0->unk5F < 7U) { + arg0->stage = 0xA; + if (arg0->cur_character == 0) { + var_a0 = 0x31; + } + arg0->unk40 = var_a0; + } else { + if (arg0->unk5F >= 0xAU) { + arg0->stage = 0xC; + } else { + arg0->stage = 0xB; + } + arg0->unk40 = 0x11; + } + D_8013B814 = 0; + } else { + var_v1 = 0x11; + if (arg0->cur_character == 0) { + var_v1 = 0x31; + } + arg0->unk40 = var_v1; + arg0->stage = mission_stage_order[arg0->unk3]; + arg0->substage = D_8013B814; + } + func_8001540C(5, 1, 0); + arg0->unk2 = 0; + arg0->unk1++; + } +} // engine_state_3_update_funcs state 5 void func_8002ED80(struct EngineObj* arg0) diff --git a/src/main/pause_menu.c b/src/main/pause_menu.c index 691a5c06..48558173 100644 --- a/src/main/pause_menu.c +++ b/src/main/pause_menu.c @@ -60,7 +60,129 @@ void func_80030128(struct BarObj* arg0) } } -INCLUDE_ASM("main/nonmatchings/pause_menu", func_800301BC); +void func_800301BC(struct BarObj* arg0) +{ + s16 var_a1; + u16 var_a1_2; + s8 var_a2; + s8 initial_unk14; + + var_a1 = 0; + initial_unk14 = arg0->unk14; + switch (controller_input.pressed) { + case PADstart: + arg0->state = 2; + arg0->unk5 = 0; + break; + case PAD_CONFIRM: + if (arg0->unk14 < 0xAU) { + if (arg0->unk14 < 2) { + g_Player.weapon = 0; + } else { + g_Player.weapon = arg0->unk14 - 1; + } + } + func_8001540C(0, 0x22, 0); + break; + case PADLup: + var_a2 = arg0->unk14; + do { + var_a2 -= 2; + if (var_a2 < 0) { + var_a2 = arg0->unk14; + } + if (arg0->unk14 == var_a2) { + break; + } + if (var_a2 == 0) { + break; + } + } while (arg0->unk16[var_a2] == 0); + arg0->unk14 = var_a2; + break; + case PADLdown: + var_a2 = initial_unk14; + do { + var_a2 += 2; + if (var_a2 < 0xA) { + continue; + } + var_a2 = 9; + for (var_a1_2 = 0; var_a1_2 < 5; var_a1_2++) { + var_a2++; + if (arg0->unk16[var_a2] != 0) { + if (var_a2 >= 0xD) { + arg0->unk5 = 2; + } else { + arg0->unk5 = 1; + } + break; + } + } + break; + } while (arg0->unk14 != var_a2 && arg0->unk16[var_a2] == 0); + arg0->unk14 = var_a2; + break; + case PADLright: + var_a2 = initial_unk14 + 1; + if (!(var_a2 & 1)) { + break; + } + initial_unk14 = var_a2; + if (arg0->unk16[var_a2] == 0) { + do { + if (var_a1 == 0) { + var_a2 += 2; + if (var_a2 >= 0xB) { + var_a2 -= 2; + var_a1 = 1; + } + } else { + var_a2 -= 2; + } + if (var_a2 == initial_unk14) { + var_a2 = initial_unk14 = arg0->unk14; + break; + } + } while (arg0->unk16[var_a2] == 0); + } else { + initial_unk14 = initial_unk14 - 1; + } + arg0->unk14 = var_a2; + break; + case PADLleft: + var_a2 = initial_unk14 - 1; + if (var_a2 & 1) { + break; + } + initial_unk14 = var_a2; + if (arg0->unk16[var_a2] == 0) { + do { + if (var_a1 == 0) { + var_a2 -= 2; + if (var_a2 < 0) { + var_a2 += 2; + var_a1 = 1; + } + } else { + var_a2 += 2; + } + if (var_a2 == initial_unk14) { + var_a2 = initial_unk14 = arg0->unk14; + break; + } + } while (arg0->unk16[var_a2] == 0); + } else { + initial_unk14++; + } + arg0->unk14 = var_a2; + break; + } + + if (arg0->unk14 != initial_unk14) { + func_8001540C(0, 0xC, 0); + } +} INCLUDE_ASM("main/nonmatchings/pause_menu", func_800304E4); diff --git a/src/main/visuals/visual_06_eregion_part.c b/src/main/visuals/visual_06_eregion_part.c index 18af4f12..966010fa 100644 --- a/src/main/visuals/visual_06_eregion_part.c +++ b/src/main/visuals/visual_06_eregion_part.c @@ -194,7 +194,67 @@ void (*eregion_part_funcs[])(struct VisualObj*) = { }; // eregion_part_update -INCLUDE_ASM("main/nonmatchings/visuals/visual_06_eregion_part", func_800AFF78); +void func_800AFF78(struct VisualObj* arg0) +{ + arg0->x_pos.val = arg0->unk50->x_pos.val; + arg0->y_pos.val = arg0->unk50->y_pos.val; + arg0->unk15 = arg0->unk50->unk15; + arg0->on_screen = 0; + switch (arg0->unk2) { + case 0: + if (arg0->unk50->unk15 == 0) { + arg0->x_pos.i.hi += (u8)eregion_part_offsets_center[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } else { + arg0->x_pos.i.hi -= (u8)eregion_part_offsets_center[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } + arg0->y_pos.i.hi -= eregion_part_offsets_center[(u8)arg0->unk50->animation_step.fields.frame_index][1]; + arg0->unk42 = arg0->unk50->unk42; + eregion_part_funcs[arg0->state](arg0); + return; + case 1: + if (arg0->unk50->unk15 == 0) { + arg0->x_pos.val -= FIXED(75); + } else { + arg0->x_pos.val += FIXED(75); + } + arg0->unk42 = arg0->unk50->unk42; + arg0->y_pos.val += FIXED(2); + break; + case 3: + if (arg0->unk50->unk15 == 0) { + arg0->x_pos.i.hi += eregion_part_offsets_left[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } else { + arg0->x_pos.i.hi -= eregion_part_offsets_left[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } + arg0->y_pos.i.hi += eregion_part_offsets_left[(u8)arg0->unk50->animation_step.fields.frame_index][1]; + arg0->unk42 &= ~0x8000; + arg0->unk42 |= arg0->unk50->unk42 & 0x8000; + eregion_part_funcs[arg0->state](arg0); + return; + case 4: + if (arg0->unk50->unk15 == 0) { + arg0->x_pos.i.hi += eregion_part_offsets_right[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } else { + arg0->x_pos.i.hi -= eregion_part_offsets_right[(u8)arg0->unk50->animation_step.fields.frame_index][0]; + } + arg0->y_pos.i.hi = arg0->y_pos.i.hi + eregion_part_offsets_right[(u8)arg0->unk50->animation_step.fields.frame_index][1]; + arg0->unk42 &= ~0x8000; + arg0->unk42 |= arg0->unk50->unk42 & 0x8000; + eregion_part_funcs[arg0->state](arg0); + return; + case 5: + arg0->unk42 &= ~0x8000; + arg0->unk42 |= arg0->unk50->unk42 & 0x8000; + eregion_part_funcs[arg0->state](arg0); + return; + } + + if (arg0->unk50->state == 1) { + eregion_part_funcs[arg0->state](arg0); + return; + } + ZeroObjectState(OBJECT_HEADER(arg0)); +} // eregion_part_init INCLUDE_ASM("main/nonmatchings/visuals/visual_06_eregion_part", func_800B0320); diff --git a/src/pc/placeholder.c b/src/pc/placeholder.c index c063656f..2a6e3c2b 100644 --- a/src/pc/placeholder.c +++ b/src/pc/placeholder.c @@ -603,79 +603,6 @@ void func_80016124(void) addPrim(&cur_draw_info->ordering_table.ui, draw_mode); } -void func_8002E994(struct EngineObj* arg0) -{ - u16 direction = controller_input.held & 0xF000; - s8 selection = arg0->unk3; - s8 next = selection; - int moved = 0; - - if (direction == PADLup || direction == PADLright || direction == PADLdown || direction == PADLleft) { - if ((controller_input.held ^ controller_input.pressed) & direction) { - if (arg0->unk8 != 0) { - arg0->unk8--; - } else { - s16 repeats = arg0->unkA++; - arg0->unk8 = repeats < 3 ? 0x1E : 0xA; - if (direction == PADLup) { - if ((u8)arg0->unk5F >= 5) { - if (selection == 8) - next = 0; - else if (selection >= 4) - next = 8; - } else if (selection >= 4) { - next = selection - 4; - } - } else if (direction == PADLdown) { - if ((u8)arg0->unk5F >= 5) { - if (selection == 8) - next = 4; - else if (selection < 4) - next = 8; - } else if (selection < 4) { - next = selection + 4; - } - } else if (direction == PADLright) { - if (selection != 8 && (selection & 3) != 3) - next = selection + 1; - } else { - if (selection != 8 && (selection & 3) != 0) - next = selection - 1; - } - moved = next != selection; - } - } - } else { - arg0->unk8 = 0; - arg0->unkA = 0; - } - - if (moved) { - arg0->unk3 = next; - func_8001540C(5, 0, 0); - } - - if (controller_input.pressed & (PADstart | PAD_CONFIRM)) { - if (arg0->unk3 == 8) { - if ((u8)arg0->unk5F < 7) { - arg0->stage = 0xA; - arg0->unk40 = arg0->cur_character == 0 ? 0x31 : 0x11; - } else { - arg0->stage = (u8)arg0->unk5F < 0xA ? 0xB : 0xC; - arg0->unk40 = 0x11; - } - D_8013B814 = 0; - } else { - arg0->unk40 = arg0->cur_character == 0 ? 0x31 : 0x11; - arg0->stage = mission_stage_order[(u8)arg0->unk3]; - arg0->substage = D_8013B814; - } - func_8001540C(5, 1, 0); - arg0->unk2 = 0; - arg0->unk1++; - } -} - extern const u16* D_800F19E0; extern const u16* D_800F19E4; extern const u16* D_800F19E8; @@ -7778,74 +7705,6 @@ void func_80033108(struct PlayerObj* arg0) player_script_walk_to_mark(arg0); } -void func_800AFF78(struct VisualObj* arg0) -{ - struct PlayerObj* owner = arg0->unk50; - u8 frame; - s8 x_offset; - s8 y_offset; - - arg0->x_pos.val = owner->x_pos.val; - arg0->y_pos.val = owner->y_pos.val; - arg0->on_screen = 0; - arg0->unk15 = owner->unk15; - - switch (arg0->unk2) { - case 0: - frame = owner->animation_step.fields.frame_index; - if (owner->unk15 == 0) - arg0->x_pos.i.hi += (u8)eregion_part_offsets_center[frame][0]; - else - arg0->x_pos.i.hi -= (u8)eregion_part_offsets_center[frame][0]; - arg0->y_pos.i.hi -= eregion_part_offsets_center[frame][1]; - arg0->unk42 = owner->unk42; - eregion_part_funcs[arg0->state](arg0); - return; - - case 1: - arg0->x_pos.val += owner->unk15 == 0 ? -FIXED(75) : FIXED(75); - arg0->y_pos.val += FIXED(2); - arg0->unk42 = owner->unk42; - break; - - case 3: - frame = owner->animation_step.fields.frame_index; - x_offset = eregion_part_offsets_left[frame][0]; - y_offset = eregion_part_offsets_left[frame][1]; - if (owner->unk15 == 0) - arg0->x_pos.i.hi += x_offset; - else - arg0->x_pos.i.hi -= x_offset; - arg0->y_pos.i.hi += y_offset; - arg0->unk42 = (arg0->unk42 & 0x7FFF) | (owner->unk42 & 0x8000); - eregion_part_funcs[arg0->state](arg0); - return; - - case 4: - frame = owner->animation_step.fields.frame_index; - x_offset = eregion_part_offsets_right[frame][0]; - y_offset = eregion_part_offsets_right[frame][1]; - if (owner->unk15 == 0) - arg0->x_pos.i.hi += x_offset; - else - arg0->x_pos.i.hi -= x_offset; - arg0->y_pos.i.hi += y_offset; - arg0->unk42 = (arg0->unk42 & 0x7FFF) | (owner->unk42 & 0x8000); - eregion_part_funcs[arg0->state](arg0); - return; - - case 5: - arg0->unk42 = (arg0->unk42 & 0x7FFF) | (owner->unk42 & 0x8000); - eregion_part_funcs[arg0->state](arg0); - return; - } - - if (owner->state == 1) - eregion_part_funcs[arg0->state](arg0); - else - ZeroObjectState(OBJECT_HEADER(arg0)); -} - void func_800B0320(struct VisualObj* arg0) { struct PlayerObj* owner = arg0->unk50; @@ -13883,123 +13742,6 @@ void func_8002FD70(struct BarObj* arg0) D_8013B818[0] = g_Player.weapon; } -void func_800301BC(struct BarObj* arg0) -{ - u8* bytes = BAR_BYTES(arg0); - s32 original = (u8)arg0->unk14; - s32 wrapped = 0; - s32 target; - s32 cursor; - s32 count; - - switch (controller_input.pressed) { - case PAD_CONFIRM: - if ((u8)original < 10) { - if ((s8)original < 2) - g_Player.weapon = 0; - else - g_Player.weapon = original - 1; - } - func_8001540C(0, 0x22, 0); - goto done; - case 0x800: - arg0->state = 2; - arg0->unk5 = 0; - goto done; - case 0x1000: - cursor = original; - for (;;) { - cursor -= 2; - if ((s8)cursor < 0) - cursor = (u8)arg0->unk14; - if (arg0->unk14 == (s8)cursor || (s8)cursor == 0) - goto store; - if (bytes[0x16 + (s8)cursor] != 0) - goto store; - } - case 0x4000: - cursor = original; - for (;;) { - cursor += 2; - if ((s8)cursor >= 10) { - cursor = 9; - for (count = 0; count < 5; count++) { - cursor++; - if (bytes[0x16 + (s8)cursor] != 0) { - arg0->unk5 = (s8)cursor < 0xD ? 1 : 2; - goto store; - } - } - goto store; - } - if (arg0->unk14 == (s8)cursor) - goto store; - if (bytes[0x16 + (s8)cursor] != 0) - goto store; - } - case 0x2000: - target = original + 1; - cursor = target; - if ((target & 1) == 0) - goto done; - original = target; - if (bytes[0x16 + (s8)target] != 0) { - original = target - 1; - goto store; - } - for (;;) { - if (wrapped == 0) { - cursor += 2; - if ((s8)cursor >= 0xB) { - cursor -= 2; - wrapped = 1; - } - } else { - cursor -= 2; - } - if ((s8)cursor == (s8)target) - goto unchanged; - if (bytes[0x16 + (s8)cursor] != 0) - goto store; - } - case 0x8000: - target = original - 1; - cursor = target; - if (target & 1) - goto done; - original = target; - if (bytes[0x16 + (s8)target] != 0) { - original = target + 1; - goto store; - } - for (;;) { - if (wrapped == 0) { - cursor -= 2; - if ((s8)cursor < 0) { - cursor += 2; - wrapped = 1; - } - } else { - cursor += 2; - } - if ((s8)cursor == (s8)target) - goto unchanged; - if (bytes[0x16 + (s8)cursor] != 0) - goto store; - } - default: - goto done; - } -unchanged: - original = (u8)arg0->unk14; - cursor = original; -store: - arg0->unk14 = cursor; -done: - if (arg0->unk14 != (s8)original) - func_8001540C(0, 0xC, 0); -} - void func_800304E4(struct BarObj* arg0) { u8* bytes = BAR_BYTES(arg0);