Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .thumb
- @ --- Change these:
- .equ start_address, 0x7487A0 @ Word-aligned address in your ROM with 0xC38 bytes of free space
- .equ behaviour_0, 0xB0 @ First of six contiguous, free behaviour bytes
- @ ---
- .equ behaviour_1, (behaviour_0 + 1)
- .equ behaviour_2, (behaviour_1 + 1)
- .equ behaviour_3, (behaviour_2 + 1)
- .equ behaviour_4, (behaviour_3 + 1)
- .equ behaviour_5, (behaviour_4 + 1)
- .equ npc_states, 0x02036E38
- .equ walkrun_state, 0x02037078
- .equ rom, 0x08000000
- .equ change_movement_return, 0x0805BB66|1
- .equ walk_return, 0x0805C10E|1
- .equ run_return, 0x0805C156|1
- .equ bike_return, 0x0805C186|1
- .equ npc_set_direction, 0x0805FBDC|1
- .equ numbers_move_direction, 0x08063A20|1
- .equ sub_8063F84, 0x08063F84|1
- .equ sub_8064008, 0x08064008|1
- .equ sub_806408C, 0x0806408C|1
- .equ npc_apply_direction_return, 0x080646AC|1
- .equ an_run_any_return, 0x08064728|1
- .equ npc_obj_ministep_stop_on_arrival_return, 0x08064794|1
- .equ sub_80649C8_return, 0x080649D0|1
- .equ npc_08064C04_and_modify_priv1_return, 0x08064C10|1
- .equ an_pulse_dn_2_return, 0x08064D64|1
- .equ sub_8065EF0_return, 0x08065F18|1
- .equ sub_8065F60_return, 0x08065F6E|1
- .equ sub_8065F8C_return, 0x08065F98|1
- .equ sub_8065FE4_return, 0x08065FEE|1
- .equ an_stop, 0x08067934|1
- .equ little_step, 0x08068A8C|1
- .equ obj_npc_ministep_return, 0x08068B8C|1
- .equ sub_8068C18_return_0, 0x08068C30|1
- .equ sub_8068C18_return_1, 0x08068C3E|1
- .equ sub_8068CB4_return_0, 0x08068CDE|1
- .equ sub_8068CB4_return_1, 0x08068CE8|1
- .equ change_movement_2_return, 0x080BD3D0|1
- .equ memcpy, 0x081E5E78|1
- .equ off_83A6884, 0x083A6884
- .equ stepspeeds, 0x083A719C
- .equ stepspeed_seq_length, 0x083A71B0
- .equ npc_tile_to, 0x1E
- .equ walkrun_npcid, 0x05
- .equ left, 0x03
- .equ right, 0x04
- .equ down_and_left, 0x05
- .equ down_and_right, 0x06
- .equ up_and_left, 0x07
- .equ up_and_right, 0x08
- .org 0x5BB5C, 0xFF
- ldr r0, =(rom + change_movement + 1)
- bx r0
- .pool
- .org 0x5C104, 0xFF
- ldr r1, =(rom + walk + 1)
- bx r1
- .pool
- .org 0x5C14C, 0xFF
- ldr r1, =(rom + bike + 1)
- bx r1
- .pool
- .org 0x5C17C, 0xFF
- ldr r1, =(rom + run + 1)
- bx r1
- .pool
- .org 0x64540, 0xFF
- .word (rom + an_table)
- .pool
- .org 0x64584, 0xFF
- .word (rom + an_table)
- .pool
- .org 0x645B4, 0xFF
- .word (rom + an_table)
- .pool
- .org 0xBD3C8, 0xFF
- ldr r0, =(rom + change_movement_2 + 1)
- bx r0
- .pool
- .org start_address, 0xFF
- .align 2
- change_movement:
- mov r0, r5
- bl change_movement_main
- add r1, sp, #4
- mov r2, r4
- ldr r3, =(numbers_move_direction)
- bl call_via_r3
- ldr r3, =(change_movement_return)
- call_via_r3:
- bx r3
- .align 2
- change_movement_2:
- mov r0, r4
- bl change_movement_main
- add r1, sp, #4
- mov r2, r5
- ldr r3, =(numbers_move_direction)
- bl call_via_r3
- ldr r3, =(change_movement_2_return)
- bx r3
- .align 2
- change_movement_main:
- push {lr}
- ldrb r0, [r0, #npc_tile_to]
- branch_from_behaviour_byte:
- cmp r0, #behaviour_0
- beq behaviour_0_check
- cmp r0, #behaviour_1
- beq behaviour_1_check
- cmp r0, #behaviour_2
- beq behaviour_2_check
- cmp r0, #behaviour_3
- beq behaviour_3_check
- cmp r0, #behaviour_4
- beq behaviour_4_check
- cmp r0, #behaviour_5
- beq behaviour_5_check
- b normal_tile_behaviour
- behaviour_0_check:
- cmp r6, #left
- beq move_up_and_left
- cmp r6, #right
- beq move_down_and_right
- b normal_tile_behaviour
- behaviour_1_check:
- cmp r6, #left
- beq move_up_and_left
- b normal_tile_behaviour
- behaviour_2_check:
- cmp r6, #right
- beq move_down_and_right
- b normal_tile_behaviour
- behaviour_3_check:
- cmp r6, #left
- beq move_down_and_left
- cmp r6, #right
- beq move_up_and_right
- b normal_tile_behaviour
- behaviour_4_check:
- cmp r6, #right
- beq move_up_and_right
- b normal_tile_behaviour
- behaviour_5_check:
- cmp r6, #left
- beq move_down_and_left
- b normal_tile_behaviour
- move_down_and_left:
- mov r0, #down_and_left
- b set_player_movement
- move_down_and_right:
- mov r0, #down_and_right
- b set_player_movement
- move_up_and_left:
- mov r0, #up_and_left
- b set_player_movement
- move_up_and_right:
- mov r0, #up_and_right
- b set_player_movement
- normal_tile_behaviour:
- mov r0, r6
- set_player_movement:
- pop {r3}
- bx r3
- .align 2
- .pool
- walk:
- push {lr}
- push {r0}
- ldr r0, =(walkrun_state)
- ldrb r1, [r0, #walkrun_npcid]
- lsl r0, r1, #3
- add r0, r0, r1
- lsl r0, r0, #2
- ldr r1, =(npc_states)
- add r0, r0, r1
- ldrb r1, [r0, #npc_tile_to]
- pop {r0}
- lsl r0, r0, #24
- lsr r0, r0, #24
- cmp r1, #behaviour_0
- blt not_walking_on_stair
- cmp r1, #behaviour_5
- bgt not_walking_on_stair
- mov r2, #0
- ldr r3, =(rom + use_table + 1)
- bl call_via_r3
- b walk_end
- not_walking_on_stair:
- ldr r3, =(sub_8063F84)
- bl call_via_r3
- walk_end:
- ldr r3, =(walk_return)
- bx r3
- .align 2
- bike:
- push {lr}
- push {r0}
- ldr r0, =(walkrun_state)
- ldrb r1, [r0, #walkrun_npcid]
- lsl r0, r1, #3
- add r0, r0, r1
- lsl r0, r0, #2
- ldr r1, =(npc_states)
- add r0, r0, r1
- ldrb r1, [r0, #npc_tile_to]
- pop {r0}
- lsl r0, r0, #24
- lsr r0, r0, #24
- cmp r1, #behaviour_0
- blt not_biking_on_stair
- cmp r1, #behaviour_5
- bgt not_biking_on_stair
- mov r2, #1
- ldr r3, =(rom + use_table + 1)
- bl call_via_r3
- b bike_end
- not_biking_on_stair:
- ldr r3, =(sub_8064008)
- bl call_via_r3
- bike_end:
- ldr r3, =(bike_return)
- bx r3
- .align 2
- run:
- push {lr}
- push {r0}
- ldr r0, =(walkrun_state)
- ldrb r1, [r0, #walkrun_npcid]
- lsl r0, r1, #3
- add r0, r0, r1
- lsl r0, r0, #2
- ldr r1, =(npc_states)
- add r0, r0, r1
- ldrb r1, [r0, #npc_tile_to]
- pop {r0}
- lsl r0, r0, #24
- lsr r0, r0, #24
- cmp r1, #behaviour_0
- blt not_running_on_stair
- cmp r1, #behaviour_5
- bgt not_running_on_stair
- mov r2, #2
- ldr r3, =(rom + use_table + 1)
- bl call_via_r3
- b run_end
- not_running_on_stair:
- ldr r3, =(sub_806408C)
- bl call_via_r3
- run_end:
- ldr r3, =(run_return)
- bx r3
- .align 2
- use_table:
- push {r4, lr}
- sub sp, #8
- lsl r0, r0, #24
- lsr r4, r0, #24
- get_table_from_r2:
- ldr r0, =(rom + table_of_tables)
- lsl r2, r2, #2
- add r2, r2, r0
- get_entry_from_behaviour_byte:
- sub r1, #behaviour_0
- lsl r1, r1, #2
- ldr r2, [r2]
- add r1, r1, r2
- ldr r1, [r1]
- call_memcpy_with_entry:
- mov r0, sp
- mov r2, #5
- ldr r3, =(memcpy)
- bl call_via_r3
- cmp r4, #4
- bls use_table_end
- mov r4, #0
- use_table_end:
- mov r1, sp
- add r0, r1, r4
- ldrb r0, [r0]
- add sp, #8
- pop {r4, pc}
- walk_entry_0: .byte 0x10, 0x10, 0x11, 0xAC, 0xAB
- walk_entry_1: .byte 0x10, 0x10, 0x11, 0xAC, 0x13
- walk_entry_2: .byte 0x10, 0x10, 0x11, 0x12, 0xAB
- walk_entry_3: .byte 0x10, 0x10, 0x11, 0xAA, 0xAD
- walk_entry_4: .byte 0x10, 0x10, 0x11, 0x12, 0xAD
- walk_entry_5: .byte 0x10, 0x10, 0x11, 0xAA, 0x13
- bike_entry_0: .byte 0x31, 0x31, 0x32, 0xB4, 0xB3
- bike_entry_1: .byte 0x31, 0x31, 0x32, 0xB4, 0x34
- bike_entry_2: .byte 0x31, 0x31, 0x32, 0x33, 0xB3
- bike_entry_3: .byte 0x31, 0x31, 0x32, 0xB2, 0xB5
- bike_entry_4: .byte 0x31, 0x31, 0x32, 0x33, 0xB5
- bike_entry_5: .byte 0x31, 0x31, 0x32, 0xB2, 0x34
- run_entry_0: .byte 0x3D, 0x3D, 0x3E, 0xB1, 0xAF
- run_entry_1: .byte 0x3D, 0x3D, 0x3E, 0xB1, 0x40
- run_entry_2: .byte 0x3D, 0x3D, 0x3E, 0x3F, 0xAF
- run_entry_3: .byte 0x3D, 0x3D, 0x3E, 0xAE, 0xB0
- run_entry_4: .byte 0x3D, 0x3D, 0x3E, 0x3F, 0xB0
- run_entry_5: .byte 0x3D, 0x3D, 0x3E, 0xAE, 0x40
- .align 2
- walk_table: .word (rom + walk_entry_0), (rom + walk_entry_1), (rom + walk_entry_2), (rom + walk_entry_3), (rom + walk_entry_4), (rom + walk_entry_5)
- bike_table: .word (rom + bike_entry_0), (rom + bike_entry_1), (rom + bike_entry_2), (rom + bike_entry_3), (rom + bike_entry_4), (rom + bike_entry_5)
- run_table: .word (rom + run_entry_0), (rom + run_entry_1), (rom + run_entry_2), (rom + run_entry_3), (rom + run_entry_4), (rom + run_entry_5)
- table_of_tables: .word (rom + walk_table), (rom + bike_table), (rom + run_table)
- .pool
- an_table:
- .word 0x083A6864, 0x083A686C, 0x083A6874, 0x083A687C, 0x083A6A30, 0x083A6A38, 0x083A6A40, 0x083A6A48, 0x083A68C8, 0x083A68D4, 0x083A68E0, 0x083A68EC, 0x083A6904, 0x083A68F8, 0x083A6910, 0x083A691C, 0x083A6928, 0x083A6934, 0x083A6940, 0x083A694C, 0x083A6964, 0x083A6970, 0x083A697C, 0x083A6988, 0x083A6994, 0x083A69A0, 0x083A69AC, 0x083A69B8, 0x083A69C4, 0x083A69D0, 0x083A69DC, 0x083A69E8, 0x083A69F4, 0x083A6A50, 0x083A6A5C, 0x083A6A68, 0x083A6A74, 0x083A6A80, 0x083A6A8C, 0x083A6A98, 0x083A6AA4, 0x083A6AB0, 0x083A6ABC, 0x083A6AC8, 0x083A6AD4, 0x083A6AE0, 0x083A6AEC, 0x083A6AF8, 0x083A6B04, 0x083A6B10, 0x083A6B1C, 0x083A6B28, 0x083A6B34, 0x083A6B40, 0x083A6B4C, 0x083A6B58, 0x083A6B64, 0x083A6B70, 0x083A6B7C, 0x083A6B88, 0x083A6B94, 0x083A6BA0, 0x083A6BAC, 0x083A6BB8, 0x083A6BC4, 0x083A6BD0, 0x083A6BDC, 0x083A6BE8, 0x083A6BF4, 0x083A6C00, 0x083A6C0C, 0x083A6C18, 0x083A6C24, 0x083A6C30, 0x083A6C6C, 0x083A6C74, 0x083A6C7C, 0x083A6C84, 0x083A6C8C, 0x083A6C98, 0x083A6CA4, 0x083A6CB0, 0x083A6CBC, 0x083A6CC8, 0x083A6CD4, 0x083A6CE0, 0x083A6CEC, 0x083A6CF8, 0x083A6D04, 0x083A6D10, 0x083A6D1C, 0x083A6D24, 0x083A6D30, 0x083A6D38, 0x083A6D40, 0x083A6D48, 0x083A6D50, 0x083A6D58, 0x083A6D60, 0x083A6D68, 0x083A6D70, 0x083A6D78, 0x083A6D80, 0x083A6D88, 0x083A6D94, 0x083A6DA4, 0x083A6DB4, 0x083A6DBC, 0x083A6DC4, 0x083A6DCC, 0x083A6DD4, 0x083A6DE0, 0x083A6DEC, 0x083A6DF4, 0x083A6DFC, 0x083A6E04, 0x083A6E0C, 0x083A6E18, 0x083A6E24, 0x083A6E30, 0x083A6E3C, 0x083A6E48, 0x083A6E54, 0x083A6E60, 0x083A6E9C, 0x083A6EA8, 0x083A6EB4, 0x083A6EC0, 0x083A6ECC, 0x083A6ED8, 0x083A6EE4, 0x083A6EF0, 0x083A6EFC, 0x083A6F08, 0x083A6F14, 0x083A6F20, 0x083A6F2C, 0x083A6F38, 0x083A6F44, 0x083A6F50, 0x083A6F5C, 0x083A6F68, 0x083A6F74, 0x083A6F80, 0x083A6F8C, 0x083A6F98, 0x083A6FA4, 0x083A6FB0, 0x083A6FBC, 0x083A6FC8, 0x083A6FD4, 0x083A6FE0, 0x083A6FEC, 0x083A6FF4, 0x083A6FFC, 0x083A6898, 0x083A68A4, 0x083A68B0, 0x083A68BC, 0x083A7004, 0x083A6A00, 0x083A6A0C, 0x083A6A18, 0x083A6A24, 0x083A700C, 0x083A7018, 0x083A6C3C, 0x083A6C48, 0x083A6C54, 0x083A6C60, (rom + entry_0), (rom + entry_1), (rom + entry_2), (rom + entry_3), (rom + entry_4), (rom + entry_5), (rom + entry_6), (rom + entry_7), (rom + entry_8), (rom + entry_9), (rom + entry_10), (rom + entry_11)
- entry_0: .word (rom + routine_0 + 1), (rom + routine_1 + 1), an_stop
- entry_1: .word (rom + routine_2 + 1), (rom + routine_1 + 1), an_stop
- entry_2: .word (rom + routine_3 + 1), (rom + routine_4 + 1), an_stop
- entry_3: .word (rom + routine_5 + 1), (rom + routine_4 + 1), an_stop
- entry_4: .word (rom + routine_6 + 1), (rom + routine_7 + 1), an_stop
- entry_5: .word (rom + routine_8 + 1), (rom + routine_7 + 1), an_stop
- entry_6: .word (rom + routine_9 + 1), (rom + routine_10 + 1), an_stop
- entry_7: .word (rom + routine_11 + 1), (rom + routine_10 + 1), an_stop
- entry_8: .word (rom + routine_12 + 1), (rom + routine_13 + 1), an_stop
- entry_9: .word (rom + routine_14 + 1), (rom + routine_13 + 1), an_stop
- entry_10: .word (rom + routine_15 + 1), (rom + routine_16 + 1), an_stop
- entry_11: .word (rom + routine_17 + 1), (rom + routine_16 + 1), an_stop
- routine_0:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #0
- bl subroutine_0
- mov r0, r4
- mov r1, r5
- bl routine_1
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_2:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #0
- bl subroutine_0
- mov r0, r4
- mov r1, r5
- bl routine_1
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- subroutine_0:
- push {r4-r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #0x14
- mov r5, r0
- mov r8, r1
- mov r4, r3
- lsl r2, r2, #24
- lsr r2, r2, #24
- lsl r4, r4, #24
- lsr r4, r4, #24
- mov r1, sp
- ldr r0, =(off_83A6884)
- ldmia r0!, {r3, r6, r7}
- stmia r1!, {r3, r6, r7}
- ldmia r0!, {r3, r6}
- stmia r1!, {r3, r6}
- mov r0, r5
- mov r1, r8
- mov r3, r4
- bl subroutine_1
- ldr r7, =(an_run_any_return)
- bx r7
- subroutine_1:
- push {r4-r6, lr}
- mov r6, r9
- mov r5, r8
- push {r5, r6}
- sub sp, #4
- mov r8, r0
- mov r9, r1
- mov r4, r2
- mov r6, r3
- lsl r4, r4, #24
- lsr r4, r4, #24
- lsl r6, r6, #24
- lsr r6, r6, #24
- ldrh r1, [r0, #0x10]
- mov r0, sp
- strh r1, [r0]
- mov r1, r8
- ldrh r0, [r1, #0x12]
- mov r5, sp
- add r5, #2
- strh r0, [r5]
- mov r0, r8
- mov r1, r4
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- sub r2, r4, #1
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(npc_apply_direction_return)
- bx r1
- routine_1:
- push {r4, lr}
- mov r4, r1
- bl subroutine_2
- ldr r1, =(sub_80649C8_return)
- bx r1
- subroutine_2:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_3
- ldr r1, =(npc_08064C04_and_modify_priv1_return)
- bx r1
- subroutine_3:
- push {r4, lr}
- mov r4, r0
- ldrh r0, [r4, #0x36]
- add r0, #1
- strh r0, [r4, #0x36]
- lsl r0, r0, #16
- asr r0, r0, #16
- cmp r0, #2
- bgt subroutine_3_r0_gt_2
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- sub r1, #1
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r0, =(sub_8068C18_return_0)
- bx r0
- subroutine_3_r0_gt_2:
- ldr r1, =(sub_8068C18_return_1)
- bx r1
- .align 2
- .pool
- routine_3:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #0
- bl subroutine_4
- mov r0, r4
- mov r1, r5
- bl routine_4
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_5:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #0
- bl subroutine_4
- mov r0, r4
- mov r1, r5
- bl routine_4
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- subroutine_4:
- push {r4-r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #0x14
- mov r5, r0
- mov r8, r1
- mov r4, r3
- lsl r2, r2, #24
- lsr r2, r2, #24
- lsl r4, r4, #24
- lsr r4, r4, #24
- mov r1, sp
- ldr r0, =(off_83A6884)
- ldmia r0!, {r3, r6, r7}
- stmia r1!, {r3, r6, r7}
- ldmia r0!, {r3, r6}
- stmia r1!, {r3, r6}
- mov r0, r5
- mov r1, r8
- mov r3, r4
- bl subroutine_5
- ldr r7, =(an_run_any_return)
- bx r7
- subroutine_5:
- push {r4-r6, lr}
- mov r6, r9
- mov r5, r8
- push {r5, r6}
- sub sp, #4
- mov r8, r0
- mov r9, r1
- mov r4, r2
- mov r6, r3
- lsl r4, r4, #24
- lsr r4, r4, #24
- lsl r6, r6, #24
- lsr r6, r6, #24
- ldrh r1, [r0, #0x10]
- mov r0, sp
- strh r1, [r0]
- mov r1, r8
- ldrh r0, [r1, #0x12]
- mov r5, sp
- add r5, #2
- strh r0, [r5]
- mov r0, r8
- mov r1, r4
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- add r2, r4, #3
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(npc_apply_direction_return)
- bx r1
- routine_4:
- push {r4, lr}
- mov r4, r1
- bl subroutine_6
- ldr r1, =(sub_80649C8_return)
- bx r1
- subroutine_6:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_7
- ldr r1, =(npc_08064C04_and_modify_priv1_return)
- bx r1
- subroutine_7:
- push {r4, lr}
- mov r4, r0
- ldrh r0, [r4, #0x36]
- add r0, #1
- strh r0, [r4, #0x36]
- lsl r0, r0, #16
- asr r0, r0, #16
- cmp r0, #2
- bgt subroutine_7_r0_gt_2
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- add r1, #3
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r0, =(sub_8068C18_return_0)
- bx r0
- subroutine_7_r0_gt_2:
- ldr r1, =(sub_8068C18_return_1)
- bx r1
- .align 2
- .pool
- routine_6:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #0
- bl subroutine_23
- mov r0, r4
- mov r1, r5
- bl routine_7
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_8:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #0
- bl subroutine_23
- mov r0, r4
- mov r1, r5
- bl routine_7
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- subroutine_23:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- lsl r2, r2, #24
- lsr r2, r2, #24
- bl subroutine_8
- ldr r1, =(sub_8065F60_return)
- bx r1
- subroutine_8:
- push {r4-r6, lr}
- mov r6, r8
- push {r6}
- sub sp, #4
- mov r6, r0
- mov r8, r1
- lsl r5, r2, #24
- lsr r5, r5, #24
- ldrh r1, [r6, #0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r6, #0x12]
- mov r4, sp
- add r4, #2
- strh r0, [r4]
- mov r0, r6
- mov r1, r5
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- sub r2, r5, #1
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(sub_8065EF0_return)
- bx r1
- routine_7:
- push {r4, lr}
- mov r4, r1
- bl subroutine_9
- ldr r1, =(sub_8065FE4_return)
- bx r1
- subroutine_9:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_10
- ldr r1, =(sub_8065F8C_return)
- bx r1
- subroutine_10:
- push {r4, lr}
- mov r4, r0
- ldrh r0, [r4, #0x36]
- add r0, #1
- strh r0, [r4, #0x36]
- mov r1, #1
- and r0, r1
- cmp r0, #0
- beq subroutine_10_r0_eq_0
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- sub r1, #1
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- mov r0, r4
- ldr r3, =(little_step)
- bl call_via_r3
- ldrh r0, [r4, #0x38]
- add r0, #1
- ldr r3, =(sub_8068CB4_return_1)
- bx r3
- subroutine_10_r0_eq_0:
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- ldr r0, =(rom + byte_list)
- sub r1, #1
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r3, =(sub_8068CB4_return_0)
- bx r3
- .align 2
- .pool
- routine_9:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #0
- bl subroutine_11
- mov r0, r4
- mov r1, r5
- bl routine_10
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_11:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #0
- bl subroutine_11
- mov r0, r4
- mov r1, r5
- bl routine_10
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_10:
- push {r4, lr}
- mov r4, r1
- bl subroutine_13
- ldr r1, =(sub_8065FE4_return)
- bx r1
- subroutine_11:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- lsl r2, r2, #24
- lsr r2, r2, #24
- bl subroutine_12
- ldr r1, =(sub_8065F60_return)
- bx r1
- subroutine_12:
- push {r4-r6, lr}
- mov r6, r8
- push {r6}
- sub sp, #4
- mov r6, r0
- mov r8, r1
- lsl r5, r2, #24
- lsr r5, r5, #24
- ldrh r1, [r6, #0x10]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r6, #0x12]
- mov r4, sp
- add r4, #2
- strh r0, [r4]
- mov r0, r6
- mov r1, r5
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- add r2, r5, #3
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(sub_8065EF0_return)
- bx r1
- subroutine_13:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_14
- ldr r1, =(sub_8065F8C_return)
- bx r1
- subroutine_14:
- push {r4, lr}
- mov r4, r0
- ldrh r0, [r4, #0x36]
- add r0, #1
- strh r0, [r4, #0x36]
- mov r1, #1
- and r0, r1
- cmp r0, #0
- beq subroutine_14_r0_eq_0
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- add r1, #3
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- mov r0, r4
- ldr r3, =(little_step)
- bl call_via_r3
- ldrh r0, [r4, #0x38]
- add r0, #1
- ldr r3, =(sub_8068CB4_return_1)
- bx r3
- subroutine_14_r0_eq_0:
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #0x18
- lsr r1, r1, #0x18
- ldr r0, =(rom + byte_list)
- add r1, #3
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r3, =(sub_8068CB4_return_0)
- bx r3
- .align 2
- .pool
- routine_12:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #1
- bl subroutine_15
- mov r0, r4
- mov r1, r5
- bl routine_13
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_14:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #1
- bl subroutine_15
- mov r0, r4
- mov r1, r5
- bl routine_13
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- subroutine_15:
- push {r4-r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #0x14
- mov r5, r0
- mov r8, r1
- mov r4, r3
- lsl r2, r2, #24
- lsr r2, r2, #24
- lsl r4, r4, #24
- lsr r4, r4, #24
- mov r1, sp
- ldr r0, =(off_83A6884)
- ldmia r0!, {r3, r6, r7}
- stmia r1!, {r3, r6, r7}
- ldmia r0!, {r3, r6}
- stmia r1!, {r3, r6}
- mov r0, r5
- mov r1, r8
- mov r3, r4
- bl subroutine_16
- ldr r7, =(an_run_any_return)
- bx r7
- subroutine_16:
- push {r4-r6, lr}
- mov r6, r8
- mov r5, r9
- push {r5, r6}
- sub sp, #4
- mov r8, r0
- mov r9, r1
- mov r4, r2
- mov r6, r3
- lsl r4, r4, #24
- lsr r4, r4, #24
- lsl r6, r6, #24
- lsr r6, r6, #24
- ldrh r1, [r0, #0x10]
- mov r0, sp
- strh r1, [r0]
- mov r1, r8
- ldrh r0, [r1, #0x12]
- mov r5, sp
- add r5, #2
- strh r0, [r5]
- mov r0, r8
- mov r1, r4
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- sub r2, r4, #1
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(npc_apply_direction_return)
- bx r1
- routine_13:
- push {r4, lr}
- mov r4, r1
- bl subroutine_17
- ldr r1, =(an_pulse_dn_2_return)
- bx r1
- subroutine_17:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_18
- ldr r1, =(npc_obj_ministep_stop_on_arrival_return)
- bx r1
- subroutine_18:
- push {r4, r5, lr}
- mov r4, r0
- ldr r5, =(stepspeed_seq_length)
- ldrh r2, [r4, #0x36]
- lsl r0, r2, #1
- add r0, r0, r5
- ldrh r1, [r4, #0x38]
- ldrh r0, [r0]
- cmp r1, r0
- bge subroutine_18_r1_ge_r0
- ldr r1, =(stepspeeds)
- lsl r0, r2, #2
- add r0, r0, r1
- ldrh r2, [r4, #0x38]
- ldr r0, [r0]
- lsl r2, r2, #2
- add r2, r2, r0
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- sub r1, #1
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r3, [r2]
- mov r0, r4
- bl call_via_r3
- ldr r0, =(obj_npc_ministep_return)
- bx r0
- subroutine_18_r1_ge_r0:
- mov r0, #0
- pop {r4, r5, pc}
- .align 2
- .pool
- routine_15:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #3
- mov r3, #1
- bl subroutine_19
- mov r0, r4
- mov r1, r5
- bl routine_16
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_17:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r2, #4
- mov r3, #1
- bl subroutine_19
- mov r0, r4
- mov r1, r5
- bl routine_16
- lsl r0, r0, #24
- lsr r0, r0, #24
- pop {r4, r5, pc}
- routine_16:
- push {r4, lr}
- mov r4, r1
- bl subroutine_20
- ldr r1, =(an_pulse_dn_2_return)
- bx r1
- subroutine_20:
- push {r4, r5, lr}
- mov r4, r0
- mov r5, r1
- mov r0, r5
- bl subroutine_21
- ldr r1, =(npc_obj_ministep_stop_on_arrival_return)
- bx r1
- subroutine_21:
- push {r4, r5, lr}
- mov r4, r0
- ldr r5, =(stepspeed_seq_length)
- ldrh r2, [r4, #0x36]
- lsl r0, r2, #1
- add r0, r0, r5
- ldrh r1, [r4, #0x38]
- ldrh r0, [r0]
- cmp r1, r0
- bge subroutine_21_r1_ge_r0
- ldr r1, =(stepspeeds)
- lsl r0, r2, #2
- add r0, r0, r1
- ldrh r2, [r4, #0x38]
- ldr r0, [r0]
- lsl r2, r2, #2
- add r2, r2, r0
- ldrh r1, [r4, #0x34]
- lsl r1, r1, #24
- lsr r1, r1, #24
- ldr r0, =(rom + byte_list)
- add r1, #3
- lsl r1, r1, #1
- ldsh r1, [r0, r1]
- ldr r3, [r2]
- mov r0, r4
- bl call_via_r3
- ldr r0, =(obj_npc_ministep_return)
- bx r0
- subroutine_21_r1_ge_r0:
- mov r0, #0
- pop {r4, r5, pc}
- subroutine_19:
- push {r4-r7, lr}
- mov r7, r8
- push {r7}
- sub sp, #0x14
- mov r5, r0
- mov r8, r1
- mov r4, r3
- lsl r2, r2, #24
- lsr r2, r2, #24
- lsl r4, r4, #24
- lsr r4, r4, #24
- mov r1, sp
- ldr r0, =(off_83A6884)
- ldmia r0!, {r3, r6, r7}
- stmia r1!, {r3, r6, r7}
- ldmia r0!, {r3, r6}
- stmia r1!, {r3, r6}
- mov r0, r5
- mov r1, r8
- mov r3, r4
- bl subroutine_22
- ldr r7, =(an_run_any_return)
- bx r7
- subroutine_22:
- push {r4-r6, lr}
- mov r6, r8
- mov r5, r9
- push {r5, r6}
- sub sp, #4
- mov r8, r0
- mov r9, r1
- mov r4, r2
- mov r6, r3
- lsl r4, r4, #24
- lsr r4, r4, #24
- lsl r6, r6, #24
- lsr r6, r6, #24
- ldrh r1, [r0, #0x10]
- mov r0, sp
- strh r1, [r0]
- mov r1, r8
- ldrh r0, [r1, #0x12]
- mov r5, sp
- add r5, #2
- strh r0, [r5]
- mov r0, r8
- mov r1, r4
- ldr r3, =(npc_set_direction)
- bl call_via_r3
- ldr r1, =(rom + byte_list)
- add r2, r4, #3
- lsl r2, r2, #1
- ldsh r0, [r1, r2]
- ldr r1, =(npc_apply_direction_return)
- bx r1
- .align 2
- byte_list:
- .short 5, 7, 5, 6, 6, 8, 7, 8
- .pool
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement