Bond697 icon

r/s inheritance

Bond697 | PRO | 08/24/12 10:38:22 PM UTC | 0 ⭐ | 10794 👁️ | Never ⏰ | []
ARM |

13.04 KB

|

None

|

0 👍

/

0 👎

ROM:080419A8 ; =============== S U B R O U T I N E =======================================
ROM:080419A8
ROM:080419A8 ; Attributes: bp-based frame
ROM:080419A8
ROM:080419A8 ; void __fastcall inheritance(void *magicNums, void *pEggBase)
ROM:080419A8 inheritance                             ; CODE XREF: sub_8041FC4+28p
ROM:080419A8
ROM:080419A8 var_8           = -8
ROM:080419A8 var_s4          =  4
ROM:080419A8
ROM:080419A8                 PUSH    {R4-R7,LR}
ROM:080419AA                 MOV     R7, R9
ROM:080419AC                 MOV     R6, R8
ROM:080419AE                 PUSH    {R6,R7}
ROM:080419B0                 SUB     SP, SP, #0x14
ROM:080419B2                 MOV     R9, R0
ROM:080419B4                 MOV     R8, R1          ; r8 = eggBase
ROM:080419B6                 MOVS    R5, #0          ; int i = 0
ROM:080419B8                 ADD     R1, SP, #4      ; make pointer/local array for iv set (u8* (malloc(IV_SET))) ivArray
ROM:080419BA                 ADD     R7, SP, #0xC    ; make pointer/local array for parents to inherit (u8* (malloc(IV_INHERIT)) parentArray
ROM:080419BC                 ADDS    R2, R1, #0      ; move current array pointer to r2(iv set array)
ROM:080419BE
ROM:080419BE fillIVArray                             ; CODE XREF: inheritance+22j
ROM:080419BE                 ADDS    R0, R2, R5      ; iv_array_pos = &ivArray + i, seek to desired pos
ROM:080419C0                 STRB    R5, [R0]        ; ivArray[i] = i
ROM:080419C2                 ADDS    R0, R5, #1      ; for(i = 0; i < 6; ++i), increment here
ROM:080419C4                 LSLS    R0, R0, #0x18   ; dumb typecasting
ROM:080419C6                 LSRS    R5, R0, #0x18   ; dumb typecasting
ROM:080419C8                 CMP     R5, #5          ; i < 6
ROM:080419CA                 BLS     fillIVArray     ; this past for loop fills the local declared ivArray with u8 ivArray = {00, 01, 02, 03, 04, 05}
ROM:080419CC                 MOVS    R5, #0          ; i = 0
ROM:080419CE                 ADDS    R6, R1, #0      ; move current array pointer to r2(iv set array)
ROM:080419D0
ROM:080419D0 pickIVInherit                           ; CODE XREF: inheritance+52j
ROM:080419D0                 BL      rand
ROM:080419D4                 MOV     R1, SP          ; save array base
ROM:080419D6                 ADDS    R4, R1, R5      ; save the current position of the array
ROM:080419D8                 LSLS    R0, R0, #0x10   ; dumb typecasting
ROM:080419DA                 LSRS    R0, R0, #0x10   ; dumb typecasting
ROM:080419DC                 MOVS    R1, #6          ; IV_SET
ROM:080419DE                 SUBS    R1, R1, R5      ; IV_SET - i
ROM:080419E0                 BL      mod             ; rand() % (IV_SET - i)
ROM:080419E4                 ADDS    R0, R6, R0      ; &temp_iv_array + (rand() % (IV_SET - i)), seek to specific pos in u8 array
ROM:080419E6                 LDRB    R0, [R0]        ; grab that byte from the array pos
ROM:080419E8                 STRB    R0, [R4]        ; store that byte to the new array, in order(3 runs, r4 = r1 + r5, new_array = array_base + i)
ROM:080419EA                 LDRB    R1, [R4]        ; set byte from current array pos as a2, basically pass the byte number of the inherited iv.(0-5)
ROM:080419EC                 MOVS    R0, R6          ; pointer to array base as a1
ROM:080419EE                 BL      doInheritanceCheck
ROM:080419F2                 ADDS    R0, R5, #1      ; ++i
ROM:080419F4                 LSLS    R0, R0, #0x18   ; i is apparently a u8? wtf gamefreak?
ROM:080419F6                 LSRS    R5, R0, #0x18   ; gamefreak might actually be retarded
ROM:080419F8                 CMP     R5, #2          ; i < 3
ROM:080419FA                 BLS     pickIVInherit
ROM:080419FC                 MOVS    R5, #0          ; i = 0
ROM:080419FE                 MOVS    R4, #1
ROM:08041A00
ROM:08041A00 pickParentInherit                       ; CODE XREF: inheritance+6Ej
ROM:08041A00                 BL      rand
ROM:08041A04                 ADDS    R1, R7, R5      ; parentArray[i]
ROM:08041A06                 LSLS    R0, R0, #0x10   ; dumb typecasting
ROM:08041A08                 LSRS    R0, R0, #0x10   ; dumb typecasting
ROM:08041A0A                 ANDS    R0, R4          ; rand() & 1
ROM:08041A0C                 STRB    R0, [R1]        ; store 0/1(to represent parent to pull iv from) to current array pos
ROM:08041A0E                 ADDS    R0, R5, #1      ; ++i
ROM:08041A10                 LSLS    R0, R0, #0x18   ; i is apparently a u8.  wtf.
ROM:08041A12                 LSRS    R5, R0, #0x18
ROM:08041A14                 CMP     R5, #2          ; i < 3
ROM:08041A16                 BLS     pickParentInherit
ROM:08041A18                 MOVS    R5, #0          ; i = 0
ROM:08041A1A
ROM:08041A1A writeBackInheritance                    ; CODE XREF: inheritance+162j
ROM:08041A1A                 MOV     R1, SP          ; base of array with ivs to inherit
ROM:08041A1C                 ADDS    R0, R1, R5      ; ivArray[i]
ROM:08041A1E                 LDRB    R0, [R0]        ; *ivArray[i]
ROM:08041A20                 CMP     R0, #5          ; if i is 0-5, do iv write.  if greater, there's an error.  return.
ROM:08041A22                 BHI     return          ; jumptable 08041A2C default case
ROM:08041A24                 LSLS    R0, R0, #2      ; align for switch based on iv number
ROM:08041A26                 LDR     R1, =jpt_8041A2C
ROM:08041A28                 ADDS    R0, R0, R1
ROM:08041A2A                 LDR     R0, [R0]        ; get pc to jump to
ROM:08041A2C                 MOV     PC, R0          ; switch 6 cases
ROM:08041A2C ; ---------------------------------------------------------------------------
ROM:08041A2E                 DCW 0
ROM:08041A30 off_8041A30     DCD jpt_8041A2C         ; DATA XREF: inheritance+7Er
ROM:08041A34 jpt_8041A2C     DCD HP_IV               ; DATA XREF: inheritance+7Eo
ROM:08041A34                                         ; inheritance:off_8041A30o
ROM:08041A34                 DCD ATK_IV              ; jump table for switch statement
ROM:08041A34                 DCD DEF_IV
ROM:08041A34                 DCD SPA_IV
ROM:08041A34                 DCD SPD_IV
ROM:08041A34                 DCD SPE_IV
ROM:08041A4C ; ---------------------------------------------------------------------------
ROM:08041A4C
ROM:08041A4C HP_IV                                   ; CODE XREF: inheritance+84j
ROM:08041A4C                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041A4C                 ADDS    R0, R7, R5      ; jumptable 08041A2C case 0
ROM:08041A4E                 LDRB    R1, [R0]
ROM:08041A50                 LSLS    R0, R1, #2
ROM:08041A52                 ADDS    R0, R0, R1
ROM:08041A54                 LSLS    R0, R0, #4
ROM:08041A56                 ADD     R0, R8
ROM:08041A58                 MOVS    R1, #0x27
ROM:08041A5A                 BL      getPKMStat
ROM:08041A5E                 ADD     R2, SP, #0x10
ROM:08041A60                 STRB    R0, [R2]
ROM:08041A62                 MOV     R0, R9
ROM:08041A64                 MOVS    R1, #0x27
ROM:08041A66                 BL      writeIVToEgg
ROM:08041A6A                 B       return          ; jumptable 08041A2C default case
ROM:08041A6C ; ---------------------------------------------------------------------------
ROM:08041A6C
ROM:08041A6C ATK_IV                                  ; CODE XREF: inheritance+84j
ROM:08041A6C                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041A6C                 ADD     R4, SP, #0x10
ROM:08041A6E                 ADDS    R0, R7, R5
ROM:08041A70                 LDRB    R1, [R0]
ROM:08041A72                 LSLS    R0, R1, #2
ROM:08041A74                 ADDS    R0, R0, R1
ROM:08041A76                 LSLS    R0, R0, #4
ROM:08041A78                 ADD     R0, R8
ROM:08041A7A                 MOVS    R1, #0x28
ROM:08041A7C                 BL      getPKMStat
ROM:08041A80                 STRB    R0, [R4]
ROM:08041A82                 MOV     R0, R9
ROM:08041A84                 MOVS    R1, #0x28
ROM:08041A86                 B       IV_WRITE
ROM:08041A88 ; ---------------------------------------------------------------------------
ROM:08041A88
ROM:08041A88 DEF_IV                                  ; CODE XREF: inheritance+84j
ROM:08041A88                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041A88                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 2
ROM:08041A8A                 ADDS    R0, R7, R5      ; parentArray[i]
ROM:08041A8C                 LDRB    R1, [R0]        ; *parentArray[i]
ROM:08041A8E                 LSLS    R0, R1, #2      ; 0 * 4 or 1 * 4 depending on which parent
ROM:08041A90                 ADDS    R0, R0, R1      ; 4 or 5
ROM:08041A92                 LSLS    R0, R0, #4
ROM:08041A94                 ADD     R0, R8          ; eggBase + parentIV
ROM:08041A96                 MOVS    R1, #0x29       ; pkm field to write
ROM:08041A98                 BL      getPKMStat
ROM:08041A9C                 STRB    R0, [R4]
ROM:08041A9E                 MOV     R0, R9
ROM:08041AA0                 MOVS    R1, #0x29
ROM:08041AA2                 B       IV_WRITE
ROM:08041AA4 ; ---------------------------------------------------------------------------
ROM:08041AA4
ROM:08041AA4 SPA_IV                                  ; CODE XREF: inheritance+84j
ROM:08041AA4                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041AA4                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 3
ROM:08041AA6                 ADDS    R0, R7, R5
ROM:08041AA8                 LDRB    R1, [R0]
ROM:08041AAA                 LSLS    R0, R1, #2
ROM:08041AAC                 ADDS    R0, R0, R1
ROM:08041AAE                 LSLS    R0, R0, #4
ROM:08041AB0                 ADD     R0, R8
ROM:08041AB2                 MOVS    R1, #0x2A
ROM:08041AB4                 BL      getPKMStat
ROM:08041AB8                 STRB    R0, [R4]
ROM:08041ABA                 MOV     R0, R9
ROM:08041ABC                 MOVS    R1, #0x2A
ROM:08041ABE                 B       IV_WRITE
ROM:08041AC0 ; ---------------------------------------------------------------------------
ROM:08041AC0
ROM:08041AC0 SPD_IV                                  ; CODE XREF: inheritance+84j
ROM:08041AC0                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041AC0                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 4
ROM:08041AC2                 ADDS    R0, R7, R5
ROM:08041AC4                 LDRB    R1, [R0]
ROM:08041AC6                 LSLS    R0, R1, #2
ROM:08041AC8                 ADDS    R0, R0, R1
ROM:08041ACA                 LSLS    R0, R0, #4
ROM:08041ACC                 ADD     R0, R8
ROM:08041ACE                 MOVS    R1, #0x2B
ROM:08041AD0                 BL      getPKMStat
ROM:08041AD4                 STRB    R0, [R4]
ROM:08041AD6                 MOV     R0, R9
ROM:08041AD8                 MOVS    R1, #0x2B
ROM:08041ADA
ROM:08041ADA IV_WRITE                                ; CODE XREF: inheritance+DEj
ROM:08041ADA                                         ; inheritance+FAj ...
ROM:08041ADA                 MOVS    R2, R4
ROM:08041ADC                 BL      writeIVToEgg
ROM:08041AE0                 B       return          ; jumptable 08041A2C default case
ROM:08041AE2 ; ---------------------------------------------------------------------------
ROM:08041AE2
ROM:08041AE2 SPE_IV                                  ; CODE XREF: inheritance+84j
ROM:08041AE2                                         ; DATA XREF: inheritance:jpt_8041A2Co
ROM:08041AE2                 ADD     R4, SP, #0x10   ; jumptable 08041A2C case 5
ROM:08041AE4                 ADDS    R0, R7, R5
ROM:08041AE6                 LDRB    R1, [R0]
ROM:08041AE8                 LSLS    R0, R1, #2
ROM:08041AEA                 ADDS    R0, R0, R1
ROM:08041AEC                 LSLS    R0, R0, #4
ROM:08041AEE                 ADD     R0, R8
ROM:08041AF0                 MOVS    R1, #0x2C
ROM:08041AF2                 BL      getPKMStat
ROM:08041AF6                 STRB    R0, [R4]
ROM:08041AF8                 MOV     R0, R9
ROM:08041AFA                 MOVS    R1, #0x2C
ROM:08041AFC                 MOVS    R2, R4
ROM:08041AFE                 BL      writeIVToEgg
ROM:08041B02
ROM:08041B02 return                                  ; CODE XREF: inheritance+7Aj
ROM:08041B02                                         ; inheritance+C2j ...
ROM:08041B02                 ADDS    R0, R5, #1      ; ++i
ROM:08041B04                 LSLS    R0, R0, #0x18
ROM:08041B06                 LSRS    R5, R0, #0x18
ROM:08041B08                 CMP     R5, #2          ; i < 3
ROM:08041B0A                 BLS     writeBackInheritance
ROM:08041B0C                 ADD     SP, SP, #0x14
ROM:08041B0E                 POP     {R3,R4}
ROM:08041B10                 MOV     R8, R3
ROM:08041B12                 MOV     R9, R4
ROM:08041B14                 POP     {R4-R7}
ROM:08041B16                 POP     {R0}
ROM:08041B18                 BX      R0
ROM:08041B18 ; End of function inheritance

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎