Bond697

r/s inheritance

Aug 24th, 2012
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 13.04 KB | None | 0 0
  1. ROM:080419A8 ; =============== S U B R O U T I N E =======================================
  2. ROM:080419A8
  3. ROM:080419A8 ; Attributes: bp-based frame
  4. ROM:080419A8
  5. ROM:080419A8 ; void __fastcall inheritance(void *magicNums, void *pEggBase)
  6. ROM:080419A8 inheritance                             ; CODE XREF: sub_8041FC4+28p
  7. ROM:080419A8
  8. ROM:080419A8 var_8           = -8
  9. ROM:080419A8 var_s4          =  4
  10. ROM:080419A8
  11. ROM:080419A8                 PUSH    {R4-R7,LR}
  12. ROM:080419AA                 MOV     R7, R9
  13. ROM:080419AC                 MOV     R6, R8
  14. ROM:080419AE                 PUSH    {R6,R7}
  15. ROM:080419B0                 SUB     SP, SP, #0x14
  16. ROM:080419B2                 MOV     R9, R0
  17. ROM:080419B4                 MOV     R8, R1          ; r8 = eggBase
  18. ROM:080419B6                 MOVS    R5, #0          ; int i = 0
  19. ROM:080419B8                 ADD     R1, SP, #4      ; make pointer/local array for iv set (u8* (malloc(IV_SET))) ivArray
  20. ROM:080419BA                 ADD     R7, SP, #0xC    ; make pointer/local array for parents to inherit (u8* (malloc(IV_INHERIT)) parentArray
  21. ROM:080419BC                 ADDS    R2, R1, #0      ; move current array pointer to r2(iv set array)
  22. ROM:080419BE
  23. ROM:080419BE fillIVArray                             ; CODE XREF: inheritance+22j
  24. ROM:080419BE                 ADDS    R0, R2, R5      ; iv_array_pos = &ivArray + i, seek to desired pos
  25. ROM:080419C0                 STRB    R5, [R0]        ; ivArray[i] = i
  26. ROM:080419C2                 ADDS    R0, R5, #1      ; for(i = 0; i < 6; ++i), increment here
  27. ROM:080419C4                 LSLS    R0, R0, #0x18   ; dumb typecasting
  28. ROM:080419C6                 LSRS    R5, R0, #0x18   ; dumb typecasting
  29. ROM:080419C8                 CMP     R5, #5          ; i < 6
  30. ROM:080419CA                 BLS     fillIVArray     ; this past for loop fills the local declared ivArray with u8 ivArray = {00, 01, 02, 03, 04, 05}
  31. ROM:080419CC                 MOVS    R5, #0          ; i = 0
  32. ROM:080419CE                 ADDS    R6, R1, #0      ; move current array pointer to r2(iv set array)
  33. ROM:080419D0
  34. ROM:080419D0 pickIVInherit                           ; CODE XREF: inheritance+52j
  35. ROM:080419D0                 BL      rand
  36. ROM:080419D4                 MOV     R1, SP          ; save array base
  37. ROM:080419D6                 ADDS    R4, R1, R5      ; save the current position of the array
  38. ROM:080419D8                 LSLS    R0, R0, #0x10   ; dumb typecasting
  39. ROM:080419DA                 LSRS    R0, R0, #0x10   ; dumb typecasting
  40. ROM:080419DC                 MOVS    R1, #6          ; IV_SET
  41. ROM:080419DE                 SUBS    R1, R1, R5      ; IV_SET - i
  42. ROM:080419E0                 BL      mod             ; rand() % (IV_SET - i)
  43. ROM:080419E4                 ADDS    R0, R6, R0      ; &temp_iv_array + (rand() % (IV_SET - i)), seek to specific pos in u8 array
  44. ROM:080419E6                 LDRB    R0, [R0]        ; grab that byte from the array pos
  45. ROM:080419E8                 STRB    R0, [R4]        ; store that byte to the new array, in order(3 runs, r4 = r1 + r5, new_array = array_base + i)
  46. ROM:080419EA                 LDRB    R1, [R4]        ; set byte from current array pos as a2, basically pass the byte number of the inherited iv.(0-5)
  47. ROM:080419EC                 MOVS    R0, R6          ; pointer to array base as a1
  48. ROM:080419EE                 BL      doInheritanceCheck
  49. ROM:080419F2                 ADDS    R0, R5, #1      ; ++i
  50. ROM:080419F4                 LSLS    R0, R0, #0x18   ; i is apparently a u8? wtf gamefreak?
  51. ROM:080419F6                 LSRS    R5, R0, #0x18   ; gamefreak might actually be retarded
  52. ROM:080419F8                 CMP     R5, #2          ; i < 3
  53. ROM:080419FA                 BLS     pickIVInherit
  54. ROM:080419FC                 MOVS    R5, #0          ; i = 0
  55. ROM:080419FE                 MOVS    R4, #1
  56. ROM:08041A00
  57. ROM:08041A00 pickParentInherit                       ; CODE XREF: inheritance+6Ej
  58. ROM:08041A00                 BL      rand
  59. ROM:08041A04                 ADDS    R1, R7, R5      ; parentArray[i]
  60. ROM:08041A06                 LSLS    R0, R0, #0x10   ; dumb typecasting
  61. ROM:08041A08                 LSRS    R0, R0, #0x10   ; dumb typecasting
  62. ROM:08041A0A                 ANDS    R0, R4          ; rand() & 1
  63. ROM:08041A0C                 STRB    R0, [R1]        ; store 0/1(to represent parent to pull iv from) to current array pos
  64. ROM:08041A0E                 ADDS    R0, R5, #1      ; ++i
  65. ROM:08041A10                 LSLS    R0, R0, #0x18   ; i is apparently a u8.  wtf.
  66. ROM:08041A12                 LSRS    R5, R0, #0x18
  67. ROM:08041A14                 CMP     R5, #2          ; i < 3
  68. ROM:08041A16                 BLS     pickParentInherit
  69. ROM:08041A18                 MOVS    R5, #0          ; i = 0
  70. ROM:08041A1A
  71. ROM:08041A1A writeBackInheritance                    ; CODE XREF: inheritance+162j
  72. ROM:08041A1A                 MOV     R1, SP          ; base of array with ivs to inherit
  73. ROM:08041A1C                 ADDS    R0, R1, R5      ; ivArray[i]
  74. ROM:08041A1E                 LDRB    R0, [R0]        ; *ivArray[i]
  75. ROM:08041A20                 CMP     R0, #5          ; if i is 0-5, do iv write.  if greater, there's an error.  return.
  76. ROM:08041A22                 BHI     return          ; jumptable 08041A2C default case
  77. ROM:08041A24                 LSLS    R0, R0, #2      ; align for switch based on iv number
  78. ROM:08041A26                 LDR     R1, =jpt_8041A2C
  79. ROM:08041A28                 ADDS    R0, R0, R1
  80. ROM:08041A2A                 LDR     R0, [R0]        ; get pc to jump to
  81. ROM:08041A2C                 MOV     PC, R0          ; switch 6 cases
  82. ROM:08041A2C ; ---------------------------------------------------------------------------
  83. ROM:08041A2E                 DCW 0
  84. ROM:08041A30 off_8041A30     DCD jpt_8041A2C         ; DATA XREF: inheritance+7Er
  85. ROM:08041A34 jpt_8041A2C     DCD HP_IV               ; DATA XREF: inheritance+7Eo
  86. ROM:08041A34                                         ; inheritance:off_8041A30o
  87. ROM:08041A34                 DCD ATK_IV              ; jump table for switch statement
  88. ROM:08041A34                 DCD DEF_IV
  89. ROM:08041A34                 DCD SPA_IV
  90. ROM:08041A34                 DCD SPD_IV
  91. ROM:08041A34                 DCD SPE_IV
  92. ROM:08041A4C ; ---------------------------------------------------------------------------
  93. ROM:08041A4C
  94. ROM:08041A4C HP_IV                                   ; CODE XREF: inheritance+84j
  95. ROM:08041A4C                                         ; DATA XREF: inheritance:jpt_8041A2Co
  96. ROM:08041A4C                 ADDS    R0, R7, R5      ; jumptable 08041A2C case 0
  97. ROM:08041A4E                 LDRB    R1, [R0]
  98. ROM:08041A50                 LSLS    R0, R1, #2
  99. ROM:08041A52                 ADDS    R0, R0, R1
  100. ROM:08041A54                 LSLS    R0, R0, #4
  101. ROM:08041A56                 ADD     R0, R8
  102. ROM:08041A58                 MOVS    R1, #0x27
  103. ROM:08041A5A                 BL      getPKMStat
  104. ROM:08041A5E                 ADD     R2, SP, #0x10
  105. ROM:08041A60                 STRB    R0, [R2]
  106. ROM:08041A62                 MOV     R0, R9
  107. ROM:08041A64                 MOVS    R1, #0x27
  108. ROM:08041A66                 BL      writeIVToEgg
  109. ROM:08041A6A                 B       return          ; jumptable 08041A2C default case
  110. ROM:08041A6C ; ---------------------------------------------------------------------------
  111. ROM:08041A6C
  112. ROM:08041A6C ATK_IV                                  ; CODE XREF: inheritance+84j
  113. ROM:08041A6C                                         ; DATA XREF: inheritance:jpt_8041A2Co
  114. ROM:08041A6C                 ADD     R4, SP, #0x10
  115. ROM:08041A6E                 ADDS    R0, R7, R5
  116. ROM:08041A70                 LDRB    R1, [R0]
  117. ROM:08041A72                 LSLS    R0, R1, #2
  118. ROM:08041A74                 ADDS    R0, R0, R1
  119. ROM:08041A76                 LSLS    R0, R0, #4
  120. ROM:08041A78                 ADD     R0, R8
  121. ROM:08041A7A                 MOVS    R1, #0x28
  122. ROM:08041A7C                 BL      getPKMStat
  123. ROM:08041A80                 STRB    R0, [R4]
  124. ROM:08041A82                 MOV     R0, R9
  125. ROM:08041A84                 MOVS    R1, #0x28
  126. ROM:08041A86                 B       IV_WRITE
  127. ROM:08041A88 ; ---------------------------------------------------------------------------
  128. ROM:08041A88
  129. ROM:08041A88 DEF_IV                                  ; CODE XREF: inheritance+84j
  130. ROM:08041A88                                         ; DATA XREF: inheritance:jpt_8041A2Co
  131. ROM:08041A88                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 2
  132. ROM:08041A8A                 ADDS    R0, R7, R5      ; parentArray[i]
  133. ROM:08041A8C                 LDRB    R1, [R0]        ; *parentArray[i]
  134. ROM:08041A8E                 LSLS    R0, R1, #2      ; 0 * 4 or 1 * 4 depending on which parent
  135. ROM:08041A90                 ADDS    R0, R0, R1      ; 4 or 5
  136. ROM:08041A92                 LSLS    R0, R0, #4
  137. ROM:08041A94                 ADD     R0, R8          ; eggBase + parentIV
  138. ROM:08041A96                 MOVS    R1, #0x29       ; pkm field to write
  139. ROM:08041A98                 BL      getPKMStat
  140. ROM:08041A9C                 STRB    R0, [R4]
  141. ROM:08041A9E                 MOV     R0, R9
  142. ROM:08041AA0                 MOVS    R1, #0x29
  143. ROM:08041AA2                 B       IV_WRITE
  144. ROM:08041AA4 ; ---------------------------------------------------------------------------
  145. ROM:08041AA4
  146. ROM:08041AA4 SPA_IV                                  ; CODE XREF: inheritance+84j
  147. ROM:08041AA4                                         ; DATA XREF: inheritance:jpt_8041A2Co
  148. ROM:08041AA4                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 3
  149. ROM:08041AA6                 ADDS    R0, R7, R5
  150. ROM:08041AA8                 LDRB    R1, [R0]
  151. ROM:08041AAA                 LSLS    R0, R1, #2
  152. ROM:08041AAC                 ADDS    R0, R0, R1
  153. ROM:08041AAE                 LSLS    R0, R0, #4
  154. ROM:08041AB0                 ADD     R0, R8
  155. ROM:08041AB2                 MOVS    R1, #0x2A
  156. ROM:08041AB4                 BL      getPKMStat
  157. ROM:08041AB8                 STRB    R0, [R4]
  158. ROM:08041ABA                 MOV     R0, R9
  159. ROM:08041ABC                 MOVS    R1, #0x2A
  160. ROM:08041ABE                 B       IV_WRITE
  161. ROM:08041AC0 ; ---------------------------------------------------------------------------
  162. ROM:08041AC0
  163. ROM:08041AC0 SPD_IV                                  ; CODE XREF: inheritance+84j
  164. ROM:08041AC0                                         ; DATA XREF: inheritance:jpt_8041A2Co
  165. ROM:08041AC0                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 4
  166. ROM:08041AC2                 ADDS    R0, R7, R5
  167. ROM:08041AC4                 LDRB    R1, [R0]
  168. ROM:08041AC6                 LSLS    R0, R1, #2
  169. ROM:08041AC8                 ADDS    R0, R0, R1
  170. ROM:08041ACA                 LSLS    R0, R0, #4
  171. ROM:08041ACC                 ADD     R0, R8
  172. ROM:08041ACE                 MOVS    R1, #0x2B
  173. ROM:08041AD0                 BL      getPKMStat
  174. ROM:08041AD4                 STRB    R0, [R4]
  175. ROM:08041AD6                 MOV     R0, R9
  176. ROM:08041AD8                 MOVS    R1, #0x2B
  177. ROM:08041ADA
  178. ROM:08041ADA IV_WRITE                                ; CODE XREF: inheritance+DEj
  179. ROM:08041ADA                                         ; inheritance+FAj ...
  180. ROM:08041ADA                 MOVS    R2, R4
  181. ROM:08041ADC                 BL      writeIVToEgg
  182. ROM:08041AE0                 B       return          ; jumptable 08041A2C default case
  183. ROM:08041AE2 ; ---------------------------------------------------------------------------
  184. ROM:08041AE2
  185. ROM:08041AE2 SPE_IV                                  ; CODE XREF: inheritance+84j
  186. ROM:08041AE2                                         ; DATA XREF: inheritance:jpt_8041A2Co
  187. ROM:08041AE2                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 5
  188. ROM:08041AE4                 ADDS    R0, R7, R5
  189. ROM:08041AE6                 LDRB    R1, [R0]
  190. ROM:08041AE8                 LSLS    R0, R1, #2
  191. ROM:08041AEA                 ADDS    R0, R0, R1
  192. ROM:08041AEC                 LSLS    R0, R0, #4
  193. ROM:08041AEE                 ADD     R0, R8
  194. ROM:08041AF0                 MOVS    R1, #0x2C
  195. ROM:08041AF2                 BL      getPKMStat
  196. ROM:08041AF6                 STRB    R0, [R4]
  197. ROM:08041AF8                 MOV     R0, R9
  198. ROM:08041AFA                 MOVS    R1, #0x2C
  199. ROM:08041AFC                 MOVS    R2, R4
  200. ROM:08041AFE                 BL      writeIVToEgg
  201. ROM:08041B02
  202. ROM:08041B02 return                                  ; CODE XREF: inheritance+7Aj
  203. ROM:08041B02                                         ; inheritance+C2j ...
  204. ROM:08041B02                 ADDS    R0, R5, #1      ; ++i
  205. ROM:08041B04                 LSLS    R0, R0, #0x18
  206. ROM:08041B06                 LSRS    R5, R0, #0x18
  207. ROM:08041B08                 CMP     R5, #2          ; i < 3
  208. ROM:08041B0A                 BLS     writeBackInheritance
  209. ROM:08041B0C                 ADD     SP, SP, #0x14
  210. ROM:08041B0E                 POP     {R3,R4}
  211. ROM:08041B10                 MOV     R8, R3
  212. ROM:08041B12                 MOV     R9, R4
  213. ROM:08041B14                 POP     {R4-R7}
  214. ROM:08041B16                 POP     {R0}
  215. ROM:08041B18                 BX      R0
  216. ROM:08041B18 ; End of function inheritance
Advertisement