Ei kuvausta

on_step.S 1.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <config.h>
  2. .text
  3. .align 2
  4. .thumb
  5. .global on_step
  6. on_step:
  7. push {r5}
  8. bl safari_step
  9. lsl r0, #0x18
  10. lsr r0, #0x18
  11. cmp r0, #1
  12. beq return_true
  13. ldrh r0, =FLAG_WALK_SCRIPT
  14. bl read_flag
  15. cmp r0, #0
  16. beq check_walking_script
  17. sub SP, #4
  18. mov r0, sp
  19. mov r1, sp
  20. add r1, #2
  21. bl get_player_to
  22. mov r0, sp
  23. mov r1, sp
  24. add r1, #2
  25. ldrh r0, [r0]
  26. ldrh r1, [r1]
  27. add sp, #4
  28. lsl r0, #0x10
  29. asr r4, r0, #0x10
  30. lsl r1, #0x10
  31. asr r5, r1, #0x10
  32. mov r0, r4
  33. mov r1, r5
  34. bl check_block_role
  35. lsl r0, #0x18
  36. lsr r0, #0x18
  37. ldr r1, =behavior_walk_table
  38. lsl r0, #2
  39. add r0, r1
  40. ldr r0, [r0]
  41. mov r2, #0
  42. cmp r0, r2
  43. beq check_walking_script
  44. bl execute_script
  45. b return_false
  46. check_walking_script:
  47. ldrh r0, =WALK_SCRIPT_VAR
  48. bl read_var
  49. ldrh r0, [r0]
  50. cmp r0, #0
  51. beq return_false
  52. sub r0, #1
  53. ldr r1, =script_walk_table
  54. lsl r0, #2
  55. add r0, r1
  56. ldr r0, [r0]
  57. mov r2, #0
  58. sub r2, #1
  59. cmp r0, r2
  60. beq return_false
  61. @@@EXECUTE WALKING SCRIPT HERE
  62. bl execute_script
  63. return_false:
  64. mov r0, #0
  65. b end
  66. return_true:
  67. mov r0, #1
  68. end:
  69. pop {r5}
  70. pop {r4}
  71. pop {r1}
  72. bx r1
  73. safari_step:
  74. ldr r3, =0x080A0F0C|1
  75. bx r3
  76. get_player_to:
  77. ldr r3, =0x0805C538|1
  78. bx r3
  79. check_block_role:
  80. ldr r3, =0x08058F78|1
  81. bx r3
  82. read_var:
  83. ldr r3, =var_access
  84. bx r3
  85. read_flag:
  86. ldr r3, =flag_decrypt_func
  87. bx r3
  88. execute_script:
  89. ldr r3, =0x08069AE4|1
  90. bx r3