Files
2026-05-11 21:33:35 -07:00

108 lines
2.6 KiB
ArmAsm

.meta name="Player flags"
.meta description=""
.versions 3OE1
entry_ptr:
reloc0:
.offsetof start
start:
.include WriteCodeBlocks
.label check_controller_button, 0x801A6C68 # [std](ControllerState* st, uint32_t flags) -> bool
.label TFogCtrl_change_fog, 0x800FB10C # [std](TFogCtrl* this, uint32_t fog_num, uint32_t instant_transition) -> void
.label render_debug_printf, 0x803D4E3C # [std](uint32_t coords, const char* fmt, ...) -> void
.label set_debug_text_color, 0x803D4990 # [](uint32_t color_argb) -> void
.label hook_call, 0x80228A38
.label hook_loc, 0x8000A000
# Disable D-pad up + down chat shortcuts
.data 0x80246314
.data 4
li r4, 0
.data 0x80246330
.data 4
li r4, 0
.data hook_call
.data 4
.address hook_call
b hook_loc
.data hook_loc
.deltaof hook_start, hook_end
.address hook_loc
hook_start:
mflr r0
stwu [r1 - 0x20], r1
stw [r1 + 0x24], r0
stw [r1 + 0x08], r30
stw [r1 + 0x0C], r31
lis r30, 0x804F
ori r30, r30, 0xC7A8
lwz r4, [r13 - 0x5280] # local_client_id
rlwinm r4, r4, 2, 0, 29
lwzx r30, [r30 + r4] # r30 = TFogCtrl_for_client_id[local_client_id]
cmpwi r30, 0
beq hook_skip_all
lwz r31, [r30 + 0x0184] # Active slot number
rlwinm r31, r31, 2, 0, 29
addi r31, r31, 0x174
lwzx r31, [r30 + r31] # Active slot pointer
lwz r31, [r31 + 0x40] # Active fog number
# Check for button presses to change fog
lis r3, 0x8050
ori r3, r3, 0x9848
li r4, 0x0010 # D-pad up
bl check_controller_button
cmplwi r3, 0
beq hook_skip_incr_fog
mr r3, r30
addi r4, r31, 1
andi. r4, r4, 0x007F
li r5, 1
bl TFogCtrl_change_fog
hook_skip_incr_fog:
lis r3, 0x8050
ori r3, r3, 0x9848
li r4, 0x0020 # D-pad down
bl check_controller_button
cmplwi r3, 0
beq hook_skip_decr_fog
mr r3, r30
subi r4, r31, 1
andi. r4, r4, 0x007F
li r5, 1
bl TFogCtrl_change_fog
hook_skip_decr_fog:
# Show the current fog number
lis r3, 0xFFFF
ori r3, r3, 0x00FF
bl set_debug_text_color
lis r3, 0x0002
ori r3, r3, 0x000B
bl hook_get_fmt_string
.binary "Fog: %02X"000000
hook_get_fmt_string:
mflr r4
mr r5, r31
bl render_debug_printf
hook_skip_all:
lwz r31, [r1 + 0x0C]
lwz r30, [r1 + 0x08]
lwz r0, [r1 + 0x24]
addi r1, r1, 0x20
mtlr r0
blr
hook_end:
.data 0
.data 0