Advertisement
Squeetz

IV Breeding

Oct 16th, 2018
806
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 2.85 KB | None | 0 0
  1. .thumb
  2.  
  3. .global BreedingIVs
  4.  
  5. .equ rand, 0x44EC8
  6. .equ mod, 0x1E4684
  7. .equ getattr, 0x3FD44
  8. .equ setattr, 0x4037C
  9.  
  10. .equ Destiny_Knot, 0x5A
  11.  
  12. /*
  13. Note: This routine is shorter than the one in the base game and can be pasted over the original.
  14.  
  15. r4 = current parent (0/1)
  16. r5 = counter
  17. r6 = IV NOT to copy #1
  18. r7 = IV NOT to copy #2
  19. r8 = parent ptr (+0x8C for father)
  20. r9 = child ptr
  21. sp = for r2 setattr
  22. sp+4 = IV NOT to copy #3
  23. */
  24.  
  25. .org 0x45AC0
  26.     push {r4-r7, lr}
  27.     mov r7, r9
  28.     mov r6, r8
  29.     push {r6,r7}
  30.     sub sp, sp, #0x8
  31.     mov r9, r0
  32.     mov r8, r1
  33.    
  34.     mov r4, #0x0
  35.     mov r5, r4
  36.     mov r7, r5
  37.     str r7, [sp, #0x4]
  38.    
  39. randomizeAll:
  40.     bl rand
  41.     mov r1, #0x20
  42.     bl mod
  43.     str r0, [sp]
  44.     mov r0, r9
  45.     mov r1, #0x27           @HP IV
  46.     add r1, r1, r4
  47.     mov r2, sp
  48.     bl setattr
  49.     add r4, r4, #0x1
  50.     cmp r4, #0x6
  51.     bne randomizeAll
  52.    
  53.     mov r4, #0x0
  54. checkdestinyknot:
  55.     mov r0, #0x8C
  56.     mul r0, r4
  57.     add r0, r8
  58.     mov r1, #0xC
  59.     bl getattr
  60.     cmp r0, #Destiny_Knot
  61.     beq destinyknot
  62.     add r4, #0x1
  63.     cmp r4, #0x2
  64.     bne checkdestinyknot
  65. nodestinyknot:
  66.     mov r4, #0x0
  67.    
  68. IVLoop:
  69.     bl rand
  70.     mov r1, #0x6
  71.     bl mod
  72.     add r0, r0, #0x1
  73. dupecheck:
  74.     cmp r0, r6              @if same as IV backup 1
  75.     beq IVLoop
  76.     cmp r0, r7              @if same as IV backup 2
  77.     beq IVLoop
  78.     ldr r1, [sp, #0x4]
  79.     cmp r0, r1              @if same as IV backup 3
  80.     beq IVLoop
  81. storecheck:
  82.     cmp r6, #0x0
  83.     bne storecheck_2
  84.     mov r6, r0
  85.     b IVLoop
  86.    
  87. storecheck_2:
  88.     cmp r7, #0x0
  89.     bne storecheck_3
  90.     mov r7, r0
  91.     b IVLoop
  92.    
  93. storecheck_3:
  94.     ldr r1, [sp, #0x4]
  95.     cmp r1, #0x0
  96.     bne NormalLoop
  97.     str r0, [sp, #0x4]
  98.     b IVLoop
  99.    
  100. NormalLoop:
  101.     str r0, [sp]
  102.     mov r0, #0x8C
  103.     mul r0, r4
  104.     add r0, r8
  105.     mov r1, #0x26
  106.     ldr r2, [sp]
  107.     add r1, r1, r2
  108.     bl getattr
  109.    
  110.     ldr r2, [sp]
  111.     str r0, [sp]
  112.     mov r0, r9
  113.     mov r1, #0x26
  114.     add r1, r1, r2
  115.     mov r2, sp
  116.     bl setattr
  117.    
  118.     cmp r4, #0x1
  119.     beq Normal_Next_3
  120.     ldr r0, [sp, #0x4]
  121.     cmp r0, #0x0
  122.     beq Normal_Next_2
  123.     mov r1, #0x0
  124.     str r1, [sp, #0x4]
  125.     b NormalLoop
  126.    
  127. Normal_Next_2:
  128.     mov r4, #0x1
  129.     mov r0, r7
  130.     mov r7, #0x0
  131.     b NormalLoop
  132.    
  133. Normal_Next_3:
  134.     cmp r6, #0x0
  135.     beq end
  136.     mov r0, r6
  137.     mov r6, #0x0
  138.     b NormalLoop
  139.  
  140. destinyknot:
  141.     bl rand
  142.     mov r1, #6
  143.     bl mod
  144.     add r0, r0, #0x1        @1-index
  145.     mov r7, r0              @r7 = IV NOT to inherit
  146. destinyloop:
  147.     add r5, r5, #0x1
  148.     cmp r5, r7
  149.     beq skipdestinyIV
  150.     mov r0, #0x8C
  151.     mul r0, r4
  152.     add r0, r8
  153.     mov r1, #0x26           @HP IV (-1)
  154.     add r1, r1, r5
  155.     bl getattr
  156.     str r0, [sp]
  157.     mov r0, r9
  158.     mov r1, #0x26
  159.     add r1, r1, r5
  160.     mov r2, sp
  161.     bl setattr
  162. skipdestinyIV:
  163.     cmp r5, #0x6
  164.     bne destinyloop
  165. destinynext:
  166.     mov r0, #0x1
  167.     eor r4, r0
  168.     mov r0, #0x8C
  169.     mul r0, r4
  170.     add r0, r8
  171.     mov r1, #0x26
  172.     add r1, r1, r7
  173.     bl getattr
  174.     str r0, [sp]
  175.     mov r0, r9
  176.     mov r1, #0x26
  177.     add r1, r1, r7
  178.     mov r2, sp
  179.     bl setattr
  180. end:
  181.     add sp, sp, #0x8
  182.     pop {r3,r4}
  183.     mov r8, r3
  184.     mov r9, r4
  185.     pop {r4-r7}
  186.     pop {r0}
  187.     bx r0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement