rngaddress EQU 0200F440h
;Flashman Chips
flashmanchipcount EQU 4h
flashmanchipreturnaddr EQU 0xb672ah
teamfamily EQU 26h
areafamily EQU 0h
stagefamily EQU 4h
trumpyfamily EQU 3Fh
input equ whitevanilla.gba ; Put the name of your ROM here
fspace equ 0x10 ; Put the ROM free space offset here
.gba
.open input,output.gba,8000000h
.org fspace+8000000h
.align 2
rngRoutine:
ldr r0, [rngaddress]
blt return
loadRandomChip:
push {r14}
bl rngRoutine ;GET RNG result AND PUT INTO r0
pop {r15}
mov r1, flashmanchipcount ;number of chips in selection list
swi 6; Divide
ldr r0,=@@chipLookupTable ;Load address of chip lookup table (defined below)
mov r2,0x03 ; Load r2 with 3
mul r1,r2 ;Multiple the modulo result by the size of the structs (3 bytes) - this will provide an offset into the chip lookup table
add r0,r0,r1 ;calculate the address using the offset, store in r0
ldrb r3, [r0,0x02] ;load byte from *r0 (offset 2 forward) into r3 (dmg)
ldrb r1, [r0,0x01] ;load byte from *r0 (offset 1 forward) into r1 (sublevel)
ldrb r0, [r0,0x00] ;load byte from *r0 (direct addr) into r0 (family)
ldrb r2,[r5,16h] ; ...this is actually the object's alliance enemy/allied
b flashmanchipreturnaddr ;return to chip usage code (flashman)
.pool
@@chipLookupTable:
.byte teamfamily, 0h, 0h
.byte areafamily, 0h, 10h
.byte stagefamily, 4h, 0h
.byte trumpyfamily, 1h, 0h
.close
; eof
Comments