Merge master into sync-script

This commit is contained in:
GriffinR
2020-01-12 15:39:21 -05:00
84 changed files with 16393 additions and 35195 deletions
File diff suppressed because it is too large Load Diff
+51 -48
View File
@@ -1,4 +1,6 @@
.include "constants/gba_constants.inc"
.include "constants/misc_constants.inc"
.include "constants/version.inc"
.syntax unified
@@ -8,8 +10,8 @@
.arm
Start: @ 8000000
b Init
_start: @ 8000000
b start_vector
.include "asm/rom_header.inc"
@@ -32,33 +34,33 @@ GPIOPortReadEnable: @ 80000C8
@ 80000D0
@ TODO: figure out what this data is
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
.4byte 0xFFFFFFFF
@ 8000100
.global CartIdent
CartIdent:
.4byte GAME_VERSION
.4byte GAME_LANGUAGE
.game_name:
.ifdef FIRERED
.4byte 4
.4byte 2
.ascii "pokemon red version"
.space 13
.else
.ifdef LEAFGREEN
.4byte 5
.4byte 2
.ascii "pokemon green version"
.space 11
.endif
.endif
.space .game_name+0x20-.
.4byte gMonFrontPicTable
.4byte gMonBackPicTable
.4byte gMonPaletteTable
@@ -118,32 +120,32 @@ GPIOPortReadEnable: @ 80000C8
.arm
.align 2, 0
.global Init
Init:
.global start_vector
start_vector:
mov r0, PSR_IRQ_MODE
msr cpsr_cf, r0
ldr sp, sp_irq
mov r0, PSR_SYS_MODE
msr cpsr_cf, r0
ldr sp, sp_sys
ldr sp, sp_usr
ldr r1, =INTR_VECTOR
adr r0, IntrMain
adr r0, intr_main
str r0, [r1]
ldr r1, =AgbMain
mov lr, pc
bx r1
b Init
b start_vector
.align 2, 0
sp_sys: .word IWRAM_END - 0x1C0
sp_usr: .word IWRAM_END - 0x1C0
sp_irq: .word IWRAM_END - 0x60
.pool
.arm
.align 2, 0
.global IntrMain
IntrMain:
.global intr_main
intr_main:
mov r3, REG_BASE
add r3, r3, 0x200
ldr r2, [r3, OFFSET_REG_IE - 0x200]
@@ -155,56 +157,57 @@ IntrMain:
and r1, r2, r2, lsr 16
mov r12, 0
ands r0, r1, INTR_FLAG_VCOUNT
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
mov r0, 0x1
strh r0, [r3, OFFSET_REG_IME - 0x200]
ands r0, r1, INTR_FLAG_SERIAL
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_TIMER3
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_HBLANK
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_VBLANK
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_TIMER0
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_TIMER1
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_TIMER2
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_DMA0
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_DMA1
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_DMA2
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_DMA3
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_KEYPAD
bne IntrMain_FoundIntr
bne jump_intr
add r12, r12, 0x4
ands r0, r1, INTR_FLAG_GAMEPAK
strbne r0, [r3, OFFSET_REG_SOUNDCNT_X - 0x200]
bne . @ spin
IntrMain_FoundIntr:
loop:
bne loop @ spin
jump_intr:
strh r0, [r3, OFFSET_REG_IF - 0x200]
bic r2, r2, r0
ldr r0, =gRfuState
ldr r0, =gSTWIStatus
ldr r0, [r0]
ldrb r0, [r0, 0xA]
mov r1, 0x8
mov r1, INTR_FLAG_TIMER0
mov r0, r1, lsl r0
orr r0, r0, INTR_FLAG_GAMEPAK
orr r1, r0, INTR_FLAG_SERIAL | INTR_FLAG_TIMER3 | INTR_FLAG_VCOUNT | INTR_FLAG_HBLANK
@@ -218,9 +221,9 @@ IntrMain_FoundIntr:
add r1, r1, r12
ldr r0, [r1]
stmdb sp!, {lr}
adr lr, IntrMain_RetAddr
adr lr, intr_return
bx r0
IntrMain_RetAddr:
intr_return:
ldmia sp!, {lr}
mrs r3, cpsr
bic r3, r3, PSR_I_BIT | PSR_F_BIT | PSR_MODE_MASK
-6697
View File
File diff suppressed because it is too large Load Diff
+27 -27
View File
@@ -9,7 +9,7 @@
IntrSIO32: @ 81DFC50
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
ldr r3, _081DFCB0 @ =gRfuState
ldr r3, _081DFCB0 @ =gSTWIStatus
ldr r0, [r3]
ldr r2, [r0]
sub r11, r12, 0x4
@@ -19,7 +19,7 @@ IntrSIO32: @ 81DFC50
cmp r0, 0
ldmdbeq r11, {r11,sp,lr}
bxeq lr
bl sub_81E05AC
bl Callback_Dummy_ID
ldmdb r11, {r11,sp,lr}
bx lr
_081DFC8C:
@@ -34,7 +34,7 @@ _081DFCA4:
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
_081DFCB0: .4byte gRfuState
_081DFCB0: .4byte gSTWIStatus
arm_func_end IntrSIO32
arm_func_start sio32intr_clock_master
@@ -45,7 +45,7 @@ sio32intr_clock_master: @ 81DFCB4
sub r11, r12, 0x4
bl STWI_set_timer_in_RAM
mov r4, 0x120
ldr r2, _081DFF28 @ =gRfuState
ldr r2, _081DFF28 @ =gSTWIStatus
add r4, r4, 0x4000000
ldr lr, [r4]
ldr r12, [r2]
@@ -205,10 +205,10 @@ _081DFEFC:
beq _081DFF3C
ldrh r1, [r0, 0x12]
ldrb r0, [r0, 0x6]
bl sub_81E05A4
bl Callback_Dummy_M
b _081DFF3C
.align 2, 0
_081DFF28: .4byte gRfuState
_081DFF28: .4byte gSTWIStatus
_081DFF2C:
add r3, r5, 0x3
strh r3, [r4]
@@ -223,7 +223,7 @@ _081DFF3C:
sio32intr_clock_slave: @ 81DFF44
mov r12, sp
stmdb sp!, {r4-r6,r11,r12,lr,pc}
ldr r4, _081E02F0 @ =gRfuState
ldr r4, _081E02F0 @ =gSTWIStatus
mov r0, 0x64
ldr r3, [r4]
mov r6, 0
@@ -424,7 +424,7 @@ _081E01D0:
beq _081E0348
mov r0, 0x1EC
add r0, r0, 0x2
bl sub_81E05A8
bl Callback_Dummy_S
b _081E0348
_081E0244:
mov r3, 0x120
@@ -446,7 +446,7 @@ _081E0244:
ldrb r0, [r0, 0x6]
mov r1, r2
orr r0, r0, r3, lsl 8
bl sub_81E05A8
bl Callback_Dummy_S
b _081E0348
_081E0298:
mov r3, 0x208
@@ -473,7 +473,7 @@ _081E02E0:
bhi _081E02E0
b _081E031C
.align 2, 0
_081E02F0: .4byte gRfuState
_081E02F0: .4byte gSTWIStatus
_081E02F4: .4byte 0x996601ee
_081E02F8:
mov r2, 0xFF00
@@ -510,7 +510,7 @@ handshake_wait: @ 81E0350
mov r1, 0x128
add r1, r1, 0x4000000
mov r0, r0, lsl 16
ldr r2, _081E03B4 @ =gRfuState
ldr r2, _081E03B4 @ =gSTWIStatus
sub r11, r12, 0x4
mov lr, r0, lsr 14
ldr r12, [r2]
@@ -533,7 +533,7 @@ _081E03A0:
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
_081E03B4: .4byte gRfuState
_081E03B4: .4byte gSTWIStatus
arm_func_end handshake_wait
arm_func_start STWI_set_timer_in_RAM
@@ -544,7 +544,7 @@ STWI_set_timer_in_RAM: @ 81E03B8
add r1, r1, 0x4000000
mov r3, 0
sub r11, r12, 0x4
ldr r12, _081E0470 @ =gRfuState
ldr r12, _081E0470 @ =gSTWIStatus
and lr, r0, 0xFF
ldr r2, [r12]
cmp lr, 0x50
@@ -589,7 +589,7 @@ _081E0458:
mov r3, 0x3
b _081E0488
.align 2, 0
_081E0470: .4byte gRfuState
_081E0470: .4byte gSTWIStatus
_081E0474:
mvn r3, 0x850
sub r3, r3, 0x2
@@ -621,7 +621,7 @@ STWI_stop_timer_in_RAM: @ 81E04C8
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
mov r1, 0x100
ldr lr, _081E0514 @ =gRfuState
ldr lr, _081E0514 @ =gSTWIStatus
add r0, r1, 0x4000000
ldr r2, [lr]
sub r11, r12, 0x4
@@ -638,14 +638,14 @@ STWI_stop_timer_in_RAM: @ 81E04C8
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
_081E0514: .4byte gRfuState
_081E0514: .4byte gSTWIStatus
arm_func_end STWI_stop_timer_in_RAM
arm_func_start STWI_init_slave
STWI_init_slave: @ 81E0518
mov r12, sp
stmdb sp!, {r11,r12,lr,pc}
ldr r0, _081E05A0 @ =gRfuState
ldr r0, _081E05A0 @ =gSTWIStatus
ldr r2, [r0]
mov r3, 0x5
str r3, [r2]
@@ -678,20 +678,20 @@ STWI_init_slave: @ 81E0518
ldmdb r11, {r11,sp,lr}
bx lr
.align 2, 0
_081E05A0: .4byte gRfuState
_081E05A0: .4byte gSTWIStatus
arm_func_end STWI_init_slave
arm_func_start sub_81E05A4
sub_81E05A4: @ 81E05A4
arm_func_start Callback_Dummy_M
Callback_Dummy_M: @ 81E05A4
bx r2
arm_func_end sub_81E05A4
arm_func_end Callback_Dummy_M
arm_func_start sub_81E05A8
sub_81E05A8: @ 81E05A8
arm_func_start Callback_Dummy_S
Callback_Dummy_S: @ 81E05A8
bx r1
arm_func_end sub_81E05A8
arm_func_end Callback_Dummy_S
arm_func_start sub_81E05AC
sub_81E05AC: @ 81E05AC
arm_func_start Callback_Dummy_ID
Callback_Dummy_ID: @ 81E05AC
bx r0
arm_func_end sub_81E05AC
arm_func_end Callback_Dummy_ID
-1560
View File
File diff suppressed because it is too large Load Diff
+67 -67
View File
@@ -50,7 +50,7 @@ rfu_REQ_sendData_wrapper: @ 80FD3F0
push {lr}
lsls r0, 24
lsrs r2, r0, 24
ldr r0, _080FD410 @ =gUnknown_3007460
ldr r0, _080FD410 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0
@@ -63,7 +63,7 @@ rfu_REQ_sendData_wrapper: @ 80FD3F0
movs r2, 0x1
b _080FD420
.align 2, 0
_080FD410: .4byte gUnknown_3007460
_080FD410: .4byte gRfuLinkStatus
_080FD414: .4byte gUnknown_3005E10
_080FD418:
ldr r0, _080FD42C @ =gUnknown_3005E10
@@ -383,7 +383,7 @@ _080FD648:
_080FD664: .4byte gUnknown_3005E10
_080FD668:
movs r2, 0
ldr r0, _080FD6B4 @ =gUnknown_3007460
ldr r0, _080FD6B4 @ =gRfuLinkStatus
ldr r1, [r0]
ldrb r3, [r1, 0x8]
ldr r5, _080FD6B8 @ =gUnknown_3005E10
@@ -422,7 +422,7 @@ _080FD6A2:
movs r0, 0x3
b _080FD6E8
.align 2, 0
_080FD6B4: .4byte gUnknown_3007460
_080FD6B4: .4byte gRfuLinkStatus
_080FD6B8: .4byte gUnknown_3005E10
_080FD6BC:
ldrb r0, [r5, 0x4]
@@ -476,7 +476,7 @@ sub_80FD6F4: @ 80FD6F4
bics r0, r1
strb r0, [r3]
movs r4, 0
ldr r7, _080FD75C @ =gUnknown_3007460
ldr r7, _080FD75C @ =gRfuLinkStatus
movs r5, 0x1
adds r3, 0x4
movs r2, 0
@@ -514,7 +514,7 @@ _080FD750:
bx r0
.align 2, 0
_080FD758: .4byte gUnknown_3005E10
_080FD75C: .4byte gUnknown_3007460
_080FD75C: .4byte gRfuLinkStatus
thumb_func_end sub_80FD6F4
thumb_func_start sub_80FD760
@@ -601,7 +601,7 @@ _080FD80A:
strb r0, [r5, 0x4]
ldrb r0, [r5, 0x12]
strb r0, [r5, 0x5]
ldr r4, _080FD82C @ =gUnknown_3007460
ldr r4, _080FD82C @ =gRfuLinkStatus
ldr r0, [r4]
ldrb r0, [r0, 0x3]
bl sub_80FE818
@@ -613,7 +613,7 @@ _080FD80A:
bl sub_80FE7F0
b _080FD84A
.align 2, 0
_080FD82C: .4byte gUnknown_3007460
_080FD82C: .4byte gRfuLinkStatus
_080FD830:
movs r0, 0x12
strb r0, [r5, 0x4]
@@ -653,7 +653,7 @@ sub_80FD850: @ 80FD850
mov r1, sp
adds r2, r5, 0
adds r3, r4, 0
bl sub_81E13F0
bl rfu_REQBN_watchLink
mov r0, sp
ldrb r0, [r0]
adds r7, r4, 0
@@ -743,7 +743,7 @@ _080FD90A:
_080FD91E:
bl sub_80FEAF4
_080FD922:
ldr r0, _080FDA0C @ =gUnknown_3007460
ldr r0, _080FDA0C @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -866,7 +866,7 @@ _080FD9FC:
pop {r1}
bx r1
.align 2, 0
_080FDA0C: .4byte gUnknown_3007460
_080FDA0C: .4byte gRfuLinkStatus
_080FDA10: .4byte gUnknown_3005E10
thumb_func_end sub_80FD850
@@ -1025,7 +1025,7 @@ _080FDB5C:
.align 2, 0
_080FDB70: .4byte gUnknown_3005E10
_080FDB74:
bl sub_81E0CAC
bl rfu_REQ_startSearchChild
b _080FDBDA
_080FDB7A:
bl rfu_REQ_pollSearchChild
@@ -1056,13 +1056,13 @@ _080FDBAE:
bl rfu_REQ_endConnectParent
b _080FDBDA
_080FDBB4:
ldr r0, _080FDBC0 @ =gUnknown_3007460
ldr r0, _080FDBC0 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x3]
bl rfu_REQ_CHILD_startConnectRecovery
b _080FDBDA
.align 2, 0
_080FDBC0: .4byte gUnknown_3007460
_080FDBC0: .4byte gRfuLinkStatus
_080FDBC4:
bl rfu_REQ_CHILD_pollConnectRecovery
b _080FDBDA
@@ -1089,7 +1089,7 @@ _080FDBE4:
bhi _080FDBF4
b _080FDA5A
_080FDBF4:
ldr r0, _080FDC24 @ =gUnknown_3007460
ldr r0, _080FDC24 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -1110,7 +1110,7 @@ _080FDC1A:
bx r0
.align 2, 0
_080FDC20: .4byte gUnknown_3005E10
_080FDC24: .4byte gUnknown_3007460
_080FDC24: .4byte gRfuLinkStatus
thumb_func_end sub_80FDA30
thumb_func_start sub_80FDC28
@@ -1387,7 +1387,7 @@ _080FDE64:
ldrh r0, [r4, 0x1A]
cmp r0, 0x1
beq _080FDE8A
ldr r0, _080FDEB0 @ =gUnknown_3007460
ldr r0, _080FDEB0 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x8]
cmp r0, 0x4
@@ -1419,7 +1419,7 @@ _080FDEA0:
b _080FE16E
.align 2, 0
_080FDEAC: .4byte gUnknown_3005E10
_080FDEB0: .4byte gUnknown_3007460
_080FDEB0: .4byte gRfuLinkStatus
_080FDEB4:
cmp r6, 0
beq _080FDEBA
@@ -1563,7 +1563,7 @@ _080FDFB4:
beq _080FDFBA
b _080FE16E
_080FDFBA:
ldr r2, _080FDFFC @ =gUnknown_3007460
ldr r2, _080FDFFC @ =gRfuLinkStatus
ldr r3, [r2]
ldrb r0, [r3, 0x3]
movs r1, 0
@@ -1600,7 +1600,7 @@ _080FDFEC:
beq _080FDFDC
b _080FE16E
.align 2, 0
_080FDFFC: .4byte gUnknown_3007460
_080FDFFC: .4byte gRfuLinkStatus
_080FE000:
cmp r6, 0
bne _080FE01E
@@ -1670,7 +1670,7 @@ _080FE078:
ldr r4, _080FE0B4 @ =gUnknown_3005E10
strb r6, [r4, 0x5]
strb r6, [r4, 0x4]
ldr r0, _080FE0B8 @ =gUnknown_3007460
ldr r0, _080FE0B8 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x3]
bl sub_80FE818
@@ -1697,7 +1697,7 @@ _080FE08C:
b _080FE16E
.align 2, 0
_080FE0B4: .4byte gUnknown_3005E10
_080FE0B8: .4byte gUnknown_3007460
_080FE0B8: .4byte gRfuLinkStatus
_080FE0BC:
cmp r6, 0
bne _080FE16E
@@ -1758,7 +1758,7 @@ _080FE0E8:
strb r7, [r5, 0x5]
strb r7, [r5, 0x4]
bl sub_80FEAF4
ldr r0, _080FE158 @ =gUnknown_3007460
ldr r0, _080FE158 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -1772,7 +1772,7 @@ _080FE0E8:
bl sub_80FE7F0
b _080FE16E
.align 2, 0
_080FE158: .4byte gUnknown_3007460
_080FE158: .4byte gRfuLinkStatus
_080FE15C:
cmp r6, 0
bne _080FE16E
@@ -1811,7 +1811,7 @@ _080FE194:
ldrb r0, [r0]
cmp r0, 0
bne _080FE1CA
ldr r4, _080FE1E0 @ =gUnknown_3007460
ldr r4, _080FE1E0 @ =gRfuLinkStatus
ldr r0, [r4]
ldrb r0, [r0]
cmp r0, 0
@@ -1839,7 +1839,7 @@ _080FE1D2:
_080FE1DC:
b _080FE322
.align 2, 0
_080FE1E0: .4byte gUnknown_3007460
_080FE1E0: .4byte gRfuLinkStatus
_080FE1E4:
mov r0, r8
cmp r0, 0x30
@@ -1906,7 +1906,7 @@ _080FE24E:
strb r0, [r3]
movs r3, 0
adds r7, r1, 0
ldr r2, _080FE2AC @ =gUnknown_3007460
ldr r2, _080FE2AC @ =gRfuLinkStatus
mov r1, sp
movs r5, 0x1
adds r4, r7, 0
@@ -1947,7 +1947,7 @@ _080FE27A:
b _080FE2C2
.align 2, 0
_080FE2A8: .4byte gUnknown_3005E10
_080FE2AC: .4byte gUnknown_3007460
_080FE2AC: .4byte gRfuLinkStatus
_080FE2B0:
ldrb r0, [r7, 0x4]
subs r0, 0x6
@@ -1980,7 +1980,7 @@ _080FE2D6:
b _080FE322
_080FE2E6:
bl sub_80FE6F0
ldr r0, _080FE300 @ =gUnknown_3007460
ldr r0, _080FE300 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0xFF
@@ -1990,7 +1990,7 @@ _080FE2E6:
bl sub_80FE7F0
b _080FE322
.align 2, 0
_080FE300: .4byte gUnknown_3007460
_080FE300: .4byte gRfuLinkStatus
_080FE304:
cmp r6, 0
bne _080FE326
@@ -2018,7 +2018,7 @@ _080FE326:
ldrb r0, [r7, 0x7]
cmp r0, 0x4
bne _080FE358
ldr r2, _080FE354 @ =gUnknown_3007460
ldr r2, _080FE354 @ =gRfuLinkStatus
ldr r1, [r2]
movs r0, 0x1
strb r0, [r1]
@@ -2030,7 +2030,7 @@ _080FE326:
b _080FE388
.align 2, 0
_080FE350: .4byte gUnknown_3005E10
_080FE354: .4byte gUnknown_3007460
_080FE354: .4byte gRfuLinkStatus
_080FE358:
movs r1, 0
mov r3, r8
@@ -2075,7 +2075,7 @@ sub_80FE394: @ 80FE394
strb r0, [r4, 0xE]
movs r0, 0x1
strb r0, [r4, 0xF]
ldr r0, _080FE3CC @ =gUnknown_3007460
ldr r0, _080FE3CC @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r5, [r0]
cmp r5, 0
@@ -2091,7 +2091,7 @@ sub_80FE394: @ 80FE394
b _080FE40C
.align 2, 0
_080FE3C8: .4byte gUnknown_3005E10
_080FE3CC: .4byte gUnknown_3007460
_080FE3CC: .4byte gRfuLinkStatus
_080FE3D0:
mov r0, sp
bl rfu_UNI_PARENT_getDRAC_ACK
@@ -2148,7 +2148,7 @@ sub_80FE418: @ 80FE418
bls _080FE436
b _080FE62A
_080FE436:
ldr r0, _080FE4A0 @ =gUnknown_3007460
ldr r0, _080FE4A0 @ =gRfuLinkStatus
ldr r2, [r0]
ldrb r1, [r2, 0x2]
ldrb r0, [r3, 0xC]
@@ -2201,7 +2201,7 @@ _080FE46C:
b _080FE574
.align 2, 0
_080FE49C: .4byte gUnknown_3005E10
_080FE4A0: .4byte gUnknown_3007460
_080FE4A0: .4byte gRfuLinkStatus
_080FE4A4:
ldrb r1, [r7]
adds r0, r4, 0
@@ -2224,7 +2224,7 @@ _080FE4BE:
mov r10, r2
cmp r0, 0
beq _080FE574
ldr r0, _080FE518 @ =gUnknown_3007450
ldr r0, _080FE518 @ =gRfuSlotStatusNI
lsls r1, r6, 2
adds r1, r0
ldr r1, [r1]
@@ -2242,7 +2242,7 @@ _080FE4BE:
ldr r0, _080FE51C @ =0x0000ffff
cmp r2, r0
beq _080FE508
ldr r0, _080FE520 @ =gUnknown_3007460
ldr r0, _080FE520 @ =gRfuLinkStatus
ldr r0, [r0]
lsls r1, r6, 5
adds r0, r1
@@ -2264,9 +2264,9 @@ _080FE508:
orrs r5, r0
b _080FE53C
.align 2, 0
_080FE518: .4byte gUnknown_3007450
_080FE518: .4byte gRfuSlotStatusNI
_080FE51C: .4byte 0x0000ffff
_080FE520: .4byte gUnknown_3007460
_080FE520: .4byte gRfuLinkStatus
_080FE524:
lsls r1, r6, 1
adds r0, r3, 0
@@ -2331,7 +2331,7 @@ _080FE592:
cmp r0, 0
beq _080FE5CE
movs r5, 0x1
ldr r0, _080FE600 @ =gUnknown_3007460
ldr r0, _080FE600 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x6]
cmp r0, 0
@@ -2378,7 +2378,7 @@ _080FE5CE:
.align 2, 0
_080FE5F8: .4byte 0x0000ffff
_080FE5FC: .4byte gUnknown_3005E10
_080FE600: .4byte gUnknown_3007460
_080FE600: .4byte gRfuLinkStatus
_080FE604:
cmp r0, 0x2
bne _080FE610
@@ -2435,7 +2435,7 @@ sub_80FE63C: @ 80FE63C
lsls r0, 16
cmp r0, 0
beq _080FE676
ldr r1, _080FE6E8 @ =gUnknown_3007450
ldr r1, _080FE6E8 @ =gRfuSlotStatusNI
ldrb r0, [r4, 0x10]
lsls r0, 2
adds r0, r1
@@ -2481,7 +2481,7 @@ _080FE6B6:
bne _080FE6DA
strb r4, [r5, 0x5]
strb r4, [r5, 0x4]
ldr r0, _080FE6EC @ =gUnknown_3007460
ldr r0, _080FE6EC @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -2498,8 +2498,8 @@ _080FE6DA:
.align 2, 0
_080FE6E0: .4byte 0x04000208
_080FE6E4: .4byte gUnknown_3005E10
_080FE6E8: .4byte gUnknown_3007450
_080FE6EC: .4byte gUnknown_3007460
_080FE6E8: .4byte gRfuSlotStatusNI
_080FE6EC: .4byte gRfuLinkStatus
thumb_func_end sub_80FE63C
thumb_func_start sub_80FE6F0
@@ -2509,7 +2509,7 @@ sub_80FE6F0: @ 80FE6F0
ldrb r0, [r5, 0x4]
cmp r0, 0xF
bne _080FE73C
ldr r1, _080FE748 @ =gUnknown_3007450
ldr r1, _080FE748 @ =gRfuSlotStatusNI
ldrb r2, [r5, 0x10]
lsls r0, r2, 2
adds r0, r1
@@ -2546,7 +2546,7 @@ _080FE73C:
bx r0
.align 2, 0
_080FE744: .4byte gUnknown_3005E10
_080FE748: .4byte gUnknown_3007450
_080FE748: .4byte gRfuSlotStatusNI
thumb_func_end sub_80FE6F0
thumb_func_start sub_80FE74C
@@ -2585,7 +2585,7 @@ sub_80FE778: @ 80FE778
push {r5-r7}
movs r6, 0
movs r5, 0
ldr r1, _080FE7E4 @ =gUnknown_3007460
ldr r1, _080FE7E4 @ =gRfuLinkStatus
ldr r0, [r1]
ldrb r0, [r0, 0x8]
cmp r6, r0
@@ -2638,7 +2638,7 @@ _080FE7D4:
pop {r1}
bx r1
.align 2, 0
_080FE7E4: .4byte gUnknown_3007460
_080FE7E4: .4byte gRfuLinkStatus
_080FE7E8: .4byte gUnknown_3005E10
_080FE7EC: .4byte 0x0000ffff
thumb_func_end sub_80FE778
@@ -2690,14 +2690,14 @@ sub_80FE83C: @ 80FE83C
push {r4-r7,lr}
lsls r0, 24
lsrs r5, r0, 24
ldr r0, _080FE908 @ =gUnknown_3007460
ldr r0, _080FE908 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x4]
cmp r0, 0
beq _080FE884
movs r4, 0
_080FE84E:
ldr r1, _080FE90C @ =gUnknown_3007450
ldr r1, _080FE90C @ =gRfuSlotStatusNI
lsls r0, r4, 2
adds r0, r1
ldr r2, [r0]
@@ -2725,14 +2725,14 @@ _080FE87A:
cmp r4, 0x3
bls _080FE84E
_080FE884:
ldr r0, _080FE908 @ =gUnknown_3007460
ldr r0, _080FE908 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x5]
cmp r0, 0
beq _080FE8C2
movs r4, 0
_080FE890:
ldr r1, _080FE90C @ =gUnknown_3007450
ldr r1, _080FE90C @ =gRfuSlotStatusNI
lsls r0, r4, 2
adds r0, r1
ldr r2, [r0]
@@ -2758,7 +2758,7 @@ _080FE8B8:
cmp r4, 0x3
bls _080FE890
_080FE8C2:
ldr r0, _080FE908 @ =gUnknown_3007460
ldr r0, _080FE908 @ =gRfuLinkStatus
ldr r3, [r0]
ldrb r2, [r3, 0x6]
cmp r2, 0
@@ -2768,7 +2768,7 @@ _080FE8C2:
ands r0, r2
strb r0, [r3, 0x6]
movs r4, 0
ldr r7, _080FE910 @ =gUnknown_3007440
ldr r7, _080FE910 @ =gRfuSlotStatusUNI
ldr r6, _080FE914 @ =0x00008024
_080FE8DA:
lsls r0, r4, 2
@@ -2796,9 +2796,9 @@ _080FE900:
pop {r0}
bx r0
.align 2, 0
_080FE908: .4byte gUnknown_3007460
_080FE90C: .4byte gUnknown_3007450
_080FE910: .4byte gUnknown_3007440
_080FE908: .4byte gRfuLinkStatus
_080FE90C: .4byte gRfuSlotStatusNI
_080FE910: .4byte gRfuSlotStatusUNI
_080FE914: .4byte 0x00008024
thumb_func_end sub_80FE83C
@@ -2814,14 +2814,14 @@ sub_80FE918: @ 80FE918
ldrh r0, [r0, 0x18]
cmp r0, 0
beq _080FE9F4
ldr r0, _080FEA08 @ =gUnknown_3007460
ldr r0, _080FEA08 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x4]
cmp r0, 0
beq _080FE9B8
movs r6, 0
_080FE938:
ldr r3, _080FEA0C @ =gUnknown_3007450
ldr r3, _080FEA0C @ =gRfuSlotStatusNI
lsls r2, r6, 2
adds r0, r2, r3
ldr r0, [r0]
@@ -2889,14 +2889,14 @@ _080FE9AE:
cmp r6, 0x3
bls _080FE938
_080FE9B8:
ldr r0, _080FEA08 @ =gUnknown_3007460
ldr r0, _080FEA08 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x5]
cmp r0, 0
beq _080FE9F4
movs r6, 0
_080FE9C4:
ldr r1, _080FEA0C @ =gUnknown_3007450
ldr r1, _080FEA0C @ =gRfuSlotStatusNI
lsls r0, r6, 2
adds r0, r1
ldr r2, [r0]
@@ -2931,8 +2931,8 @@ _080FE9F4:
bx r0
.align 2, 0
_080FEA04: .4byte gUnknown_3005E10
_080FEA08: .4byte gUnknown_3007460
_080FEA0C: .4byte gUnknown_3007450
_080FEA08: .4byte gRfuLinkStatus
_080FEA0C: .4byte gRfuSlotStatusNI
thumb_func_end sub_80FE918
thumb_func_start sub_80FEA10
@@ -3002,7 +3002,7 @@ sub_80FEA78: @ 80FEA78
push {lr}
lsls r0, 16
lsrs r2, r0, 16
ldr r0, _080FEA94 @ =gUnknown_3007460
ldr r0, _080FEA94 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r0, 0x4]
ldrb r0, [r0, 0x5]
@@ -3014,7 +3014,7 @@ sub_80FEA78: @ 80FEA78
movs r0, 0
b _080FEAAC
.align 2, 0
_080FEA94: .4byte gUnknown_3007460
_080FEA94: .4byte gRfuLinkStatus
_080FEA98: .4byte gUnknown_3005E10
_080FEA9C:
ldr r1, _080FEAB0 @ =gUnknown_3005E10
+66 -66
View File
@@ -132,12 +132,12 @@ _080F86F0: .4byte 0x04000208
thumb_func_start sub_80F86F4
sub_80F86F4: @ 80F86F4
push {r4,lr}
ldr r0, _080F8728 @ =gUnknown_3001190
ldr r0, _080F8728 @ =gRfuAPIBuffer
ldr r1, _080F872C @ =0x00000e64
ldr r4, _080F8730 @ =gIntrTable + 0x4
adds r2, r4, 0
movs r3, 0x1
bl sub_81E05B0
bl rfu_initializeAPI
lsls r0, 16
lsrs r1, r0, 16
cmp r1, 0
@@ -155,7 +155,7 @@ _080F8722:
pop {r0}
bx r0
.align 2, 0
_080F8728: .4byte gUnknown_3001190
_080F8728: .4byte gRfuAPIBuffer
_080F872C: .4byte 0x00000e64
_080F8730: .4byte gIntrTable + 0x4
_080F8734: .4byte gLinkType
@@ -871,7 +871,7 @@ _080F8D2A:
bge _080F8D2A
bl rfu_REQ_recvData
bl rfu_waitREQComplete
ldr r1, _080F8D94 @ =gUnknown_3007440
ldr r1, _080F8D94 @ =gRfuSlotStatusUNI
ldr r3, _080F8D90 @ =gUnknown_3005450
ldr r0, _080F8D98 @ =0x000008f6
adds r4, r3, r0
@@ -911,7 +911,7 @@ _080F8D84:
bx r0
.align 2, 0
_080F8D90: .4byte gUnknown_3005450
_080F8D94: .4byte gUnknown_3007440
_080F8D94: .4byte gRfuSlotStatusUNI
_080F8D98: .4byte 0x000008f6
_080F8D9C: .4byte 0x00000988
_080F8DA0: .4byte 0x000008f7
@@ -1074,7 +1074,7 @@ sub_80F8ECC: @ 80F8ECC
ldrh r0, [r4, 0x4]
cmp r0, 0x7
bne _080F8F08
ldr r0, _080F8F00 @ =gUnknown_3007460
ldr r0, _080F8F00 @ =gRfuLinkStatus
ldr r1, [r0]
ldr r2, _080F8F04 @ =0x000008f5
adds r0, r4, r2
@@ -1093,7 +1093,7 @@ sub_80F8ECC: @ 80F8ECC
b _080F8F0A
.align 2, 0
_080F8EFC: .4byte gUnknown_3005450
_080F8F00: .4byte gUnknown_3007460
_080F8F00: .4byte gRfuLinkStatus
_080F8F04: .4byte 0x000008f5
_080F8F08:
movs r0, 0
@@ -1363,7 +1363,7 @@ _080F90D8: .4byte 0x000008f2
thumb_func_start IsRfuRecvQueueEmpty
IsRfuRecvQueueEmpty: @ 80F90DC
push {r4,lr}
ldr r0, _080F90EC @ =gUnknown_3007460
ldr r0, _080F90EC @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x6]
cmp r0, 0
@@ -1372,7 +1372,7 @@ _080F90E8:
movs r0, 0
b _080F9110
.align 2, 0
_080F90EC: .4byte gUnknown_3007460
_080F90EC: .4byte gRfuLinkStatus
_080F90F0:
movs r3, 0
ldr r4, _080F9118 @ =gRecvCmds
@@ -1422,7 +1422,7 @@ _080F913C:
strb r0, [r1]
ldr r0, _080F919C @ =0x0000099a
adds r1, r6, r0
ldr r0, _080F91A0 @ =gUnknown_3007460
ldr r0, _080F91A0 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r1]
ldrb r0, [r0, 0x2]
@@ -1460,7 +1460,7 @@ _080F913C:
.align 2, 0
_080F9198: .4byte 0x00000993
_080F919C: .4byte 0x0000099a
_080F91A0: .4byte gUnknown_3007460
_080F91A0: .4byte gRfuLinkStatus
_080F91A4: .4byte 0x00000994
_080F91A8: .4byte 0x0000099b
_080F91AC: .4byte 0x0000099c
@@ -1815,7 +1815,7 @@ _080F947E:
adds r0, r6, r1
ldrb r0, [r0]
adds r1, r0, 0
ldr r0, _080F94A0 @ =gUnknown_3007460
ldr r0, _080F94A0 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x6]
cmp r0, 0
@@ -1826,7 +1826,7 @@ _080F947E:
.align 2, 0
_080F9498: .4byte 0x00000994
_080F949C: .4byte gUnknown_3005450
_080F94A0: .4byte gUnknown_3007460
_080F94A0: .4byte gRfuLinkStatus
_080F94A4:
movs r0, 0
b _080F94AA
@@ -1950,7 +1950,7 @@ _080F9538:
ldrb r0, [r0]
cmp r0, 0
beq _080F95E4
ldr r0, _080F964C @ =gUnknown_3007460
ldr r0, _080F964C @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -2042,7 +2042,7 @@ _080F963C: .4byte gRecvCmds
_080F9640: .4byte gUnknown_3005E10
_080F9644: .4byte gUnknown_3005450
_080F9648: .4byte 0x0000099c
_080F964C: .4byte gUnknown_3007460
_080F964C: .4byte gRfuLinkStatus
_080F9650: .4byte gReceivedRemoteLinkPlayers
_080F9654: .4byte 0x00000988
_080F9658: .4byte gSendCmd
@@ -2435,7 +2435,7 @@ _080F9902:
beq _080F9914
b _080F9C40
_080F9914:
ldr r0, _080F9944 @ =gUnknown_3007460
ldr r0, _080F9944 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
mov r6, r8
@@ -2458,7 +2458,7 @@ _080F9924:
.align 2, 0
_080F993C: .4byte gUnknown_3005450
_080F9940: .4byte gReceivedRemoteLinkPlayers
_080F9944: .4byte gUnknown_3007460
_080F9944: .4byte gRfuLinkStatus
_080F9948: .4byte gRecvCmds + 2
_080F994C: .4byte gRecvCmds + 4
_080F9950: .4byte gUnknown_3005DD6
@@ -2688,7 +2688,7 @@ _080F9B00:
ldr r0, _080F9B54 @ =gRecvCmds + 2
adds r4, r5, r0
ldrh r1, [r4]
ldr r0, _080F9B58 @ =gUnknown_3007460
ldr r0, _080F9B58 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0, 0x2]
ands r1, r0
@@ -2715,7 +2715,7 @@ _080F9B38:
_080F9B4C: .4byte gUnknown_3005450
_080F9B50: .4byte gReceivedRemoteLinkPlayers
_080F9B54: .4byte gRecvCmds + 2
_080F9B58: .4byte gUnknown_3007460
_080F9B58: .4byte gRfuLinkStatus
_080F9B5C: .4byte gRecvCmds + 4
_080F9B60: .4byte 0x0000099c
_080F9B64: .4byte gRecvCmds
@@ -3502,7 +3502,7 @@ _080FA13C: .4byte gUnknown_3005450
thumb_func_start sub_80FA140
sub_80FA140: @ 80FA140
push {lr}
ldr r0, _080FA15C @ =gUnknown_3007460
ldr r0, _080FA15C @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r1, [r0, 0x2]
ldrb r0, [r0, 0x3]
@@ -3513,7 +3513,7 @@ sub_80FA140: @ 80FA140
pop {r0}
bx r0
.align 2, 0
_080FA15C: .4byte gUnknown_3007460
_080FA15C: .4byte gRfuLinkStatus
thumb_func_end sub_80FA140
thumb_func_start sub_80FA160
@@ -3552,7 +3552,7 @@ sub_80FA190: @ 80FA190
adds r1, r2, r0
movs r0, 0x1
strb r0, [r1]
ldr r0, _080FA1BC @ =gUnknown_3007460
ldr r0, _080FA1BC @ =gRfuLinkStatus
ldr r1, [r0]
ldrb r0, [r1, 0x2]
ldrb r1, [r1, 0x3]
@@ -3565,7 +3565,7 @@ sub_80FA190: @ 80FA190
.align 2, 0
_080FA1B4: .4byte gUnknown_3005450
_080FA1B8: .4byte 0x0000099c
_080FA1BC: .4byte gUnknown_3007460
_080FA1BC: .4byte gRfuLinkStatus
_080FA1C0: .4byte 0x0000099b
thumb_func_end sub_80FA190
@@ -4065,7 +4065,7 @@ _080FA53A:
lsrs r0, 24
cmp r0, 0x1
bls _080FA5C2
ldr r1, _080FA5A0 @ =gUnknown_3007450
ldr r1, _080FA5A0 @ =gRfuSlotStatusNI
lsls r0, r5, 2
adds r0, r1
ldr r0, [r0]
@@ -4103,7 +4103,7 @@ _080FA55E:
_080FA594: .4byte gUnknown_3005450
_080FA598: .4byte 0x000008f6
_080FA59C: .4byte 0x00000989
_080FA5A0: .4byte gUnknown_3007450
_080FA5A0: .4byte gRfuSlotStatusNI
_080FA5A4: .4byte 0x0000098d
_080FA5A8:
mov r2, r8
@@ -4300,7 +4300,7 @@ sub_80FA6FC: @ 80FA6FC
movs r0, 0x2
b _080FA732
_080FA718:
ldr r1, _080FA72C @ =gUnknown_3007450
ldr r1, _080FA72C @ =gRfuSlotStatusNI
lsls r0, 2
adds r0, r1
ldr r0, [r0]
@@ -4310,7 +4310,7 @@ _080FA718:
movs r0, 0
b _080FA732
.align 2, 0
_080FA72C: .4byte gUnknown_3007450
_080FA72C: .4byte gRfuSlotStatusNI
_080FA730:
movs r0, 0x1
_080FA732:
@@ -4327,7 +4327,7 @@ sub_80FA738: @ 80FA738
ldr r1, _080FA780 @ =0x0000098d
adds r5, r0, r1
_080FA746:
ldr r1, _080FA784 @ =gUnknown_3007450
ldr r1, _080FA784 @ =gRfuSlotStatusNI
lsls r0, r4, 2
adds r0, r1
ldr r0, [r0]
@@ -4358,7 +4358,7 @@ _080FA770:
.align 2, 0
_080FA77C: .4byte gUnknown_3005450
_080FA780: .4byte 0x0000098d
_080FA784: .4byte gUnknown_3007450
_080FA784: .4byte gRfuSlotStatusNI
thumb_func_end sub_80FA738
thumb_func_start sub_80FA788
@@ -4371,7 +4371,7 @@ sub_80FA788: @ 80FA788
ldrb r0, [r0]
cmp r0, 0x8
bne _080FA7C2
ldr r2, _080FA808 @ =gUnknown_3007450
ldr r2, _080FA808 @ =gRfuSlotStatusNI
ldr r0, _080FA80C @ =0x000008f6
adds r1, r0
ldrb r0, [r1]
@@ -4393,7 +4393,7 @@ _080FA7BA:
movs r0, 0x4
bl rfu_clearSlot
_080FA7C2:
ldr r2, _080FA808 @ =gUnknown_3007450
ldr r2, _080FA808 @ =gRfuSlotStatusNI
ldr r5, _080FA800 @ =gUnknown_3005450
ldr r0, _080FA80C @ =0x000008f6
adds r1, r5, r0
@@ -4425,7 +4425,7 @@ _080FA7E6:
.align 2, 0
_080FA800: .4byte gUnknown_3005450
_080FA804: .4byte 0x0000093d
_080FA808: .4byte gUnknown_3007450
_080FA808: .4byte gRfuSlotStatusNI
_080FA80C: .4byte 0x000008f6
_080FA810: .4byte 0x0000093e
_080FA814:
@@ -5772,7 +5772,7 @@ _080FB21E:
ands r0, r1
cmp r0, 0
beq _080FB286
ldr r0, _080FB274 @ =gUnknown_3007460
ldr r0, _080FB274 @ =gRfuLinkStatus
lsls r1, r5, 5
adds r1, 0x14
ldr r0, [r0]
@@ -5803,7 +5803,7 @@ _080FB21E:
_080FB268: .4byte gUnknown_3005E10
_080FB26C: .4byte gUnknown_3005450
_080FB270: .4byte 0x0000098d
_080FB274: .4byte gUnknown_3007460
_080FB274: .4byte gRfuLinkStatus
_080FB278: .4byte 0x00000989
_080FB27C:
mov r0, r8
@@ -6216,7 +6216,7 @@ sub_80FB5A0: @ 80FB5A0
movs r3, 0
movs r2, 0
movs r4, 0x1
ldr r6, _080FB5E8 @ =gUnknown_3007460
ldr r6, _080FB5E8 @ =gRfuLinkStatus
movs r7, 0x7F
_080FB5AE:
adds r0, r5, 0
@@ -6249,7 +6249,7 @@ _080FB5D4:
pop {r1}
bx r1
.align 2, 0
_080FB5E8: .4byte gUnknown_3007460
_080FB5E8: .4byte gRfuLinkStatus
thumb_func_end sub_80FB5A0
thumb_func_start sub_80FB5EC
@@ -6601,7 +6601,7 @@ _080FB894:
adds r1, 0xF0
movs r0, 0x3
strb r0, [r1]
ldr r0, _080FB8B8 @ =gUnknown_3007460
ldr r0, _080FB8B8 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0
@@ -6615,7 +6615,7 @@ _080FB8AA:
b _080FB9C0
.align 2, 0
_080FB8B4: .4byte gUnknown_3005450
_080FB8B8: .4byte gUnknown_3007460
_080FB8B8: .4byte gRfuLinkStatus
_080FB8BC: .4byte 0x000008f4
_080FB8C0:
ldr r0, _080FB900 @ =gUnknown_3005450
@@ -6674,7 +6674,7 @@ _080FB916:
movs r0, 0
bl sub_80FD760
_080FB934:
ldr r0, _080FB96C @ =gUnknown_3007460
ldr r0, _080FB96C @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0xFF
@@ -6700,7 +6700,7 @@ _080FB95A:
.align 2, 0
_080FB964: .4byte 0x0000099c
_080FB968: .4byte gReceivedRemoteLinkPlayers
_080FB96C: .4byte gUnknown_3007460
_080FB96C: .4byte gRfuLinkStatus
_080FB970: .4byte gUnknown_3005E10
_080FB974: .4byte sub_80F8B34
_080FB978: .4byte gUnknown_3005450
@@ -7108,7 +7108,7 @@ sub_80FBC70: @ 80FBC70
movs r0, 0xFF
mov r9, r0
movs r7, 0
ldr r1, _080FBCF4 @ =gUnknown_3007460
ldr r1, _080FBCF4 @ =gRfuLinkStatus
mov r8, r1
_080FBC8E:
lsls r4, r7, 5
@@ -7162,7 +7162,7 @@ _080FBCE2:
pop {r1}
bx r1
.align 2, 0
_080FBCF4: .4byte gUnknown_3007460
_080FBCF4: .4byte gRfuLinkStatus
thumb_func_end sub_80FBC70
thumb_func_start sub_80FBCF8
@@ -7391,7 +7391,7 @@ sub_80FBE80: @ 80FBE80
lsrs r2, r0, 24
cmp r2, 0xFF
beq _080FBF18
ldr r0, _080FBEDC @ =gUnknown_3007460
ldr r0, _080FBEDC @ =gRfuLinkStatus
ldr r0, [r0]
lsls r1, r2, 5
adds r0, r1
@@ -7408,7 +7408,7 @@ sub_80FBE80: @ 80FBE80
b _080FBF10
.align 2, 0
_080FBED8: .4byte gTasks+0x8
_080FBEDC: .4byte gUnknown_3007460
_080FBEDC: .4byte gRfuLinkStatus
_080FBEE0: .4byte gUnknown_3005450
_080FBEE4: .4byte 0x000008f5
_080FBEE8:
@@ -7638,7 +7638,7 @@ _080FC070:
beq _080FC108
movs r1, 0xA
ldrsh r0, [r4, r1]
ldr r7, _080FC0F4 @ =gUnknown_3007460
ldr r7, _080FC0F4 @ =gRfuLinkStatus
lsls r4, r2, 5
adds r2, r4, 0
adds r2, 0x14
@@ -7670,7 +7670,7 @@ _080FC0E4: .4byte gTasks
_080FC0E8: .4byte 0x00000985
_080FC0EC: .4byte gUnknown_3005E10
_080FC0F0: .4byte 0x00000119
_080FC0F4: .4byte gUnknown_3007460
_080FC0F4: .4byte gRfuLinkStatus
_080FC0F8:
movs r1, 0xE0
lsls r1, 7
@@ -7845,7 +7845,7 @@ sub_80FC228: @ 80FC228
movs r2, 0x13
movs r3, 0x2
bl nullsub_88
ldr r4, _080FC2F8 @ =gUnknown_3007460
ldr r4, _080FC2F8 @ =gRfuLinkStatus
ldr r0, [r4]
ldrb r0, [r0, 0x2]
movs r1, 0x14
@@ -7934,7 +7934,7 @@ _080FC2CE:
bl nullsub_87
b _080FC436
.align 2, 0
_080FC2F8: .4byte gUnknown_3007460
_080FC2F8: .4byte gRfuLinkStatus
_080FC2FC: .4byte gUnknown_3005450
_080FC300: .4byte gUnknown_843EE64
_080FC304:
@@ -7969,7 +7969,7 @@ _080FC318:
adds r6, 0x1
cmp r6, 0x3
ble _080FC318
ldr r5, _080FC394 @ =gUnknown_3007460
ldr r5, _080FC394 @ =gRfuLinkStatus
ldr r1, [r5]
ldr r4, _080FC398 @ =gUnknown_3005450
ldr r0, _080FC39C @ =0x000008f6
@@ -8004,12 +8004,12 @@ _080FC318:
.align 2, 0
_080FC38C: .4byte gUnknown_843EE47
_080FC390: .4byte gUnknown_843EE57
_080FC394: .4byte gUnknown_3007460
_080FC394: .4byte gRfuLinkStatus
_080FC398: .4byte gUnknown_3005450
_080FC39C: .4byte 0x000008f6
_080FC3A0:
movs r6, 0
ldr r1, _080FC440 @ =gUnknown_3007460
ldr r1, _080FC440 @ =gRfuLinkStatus
ldr r0, [r1]
ldrb r0, [r0, 0x8]
cmp r6, r0
@@ -8088,7 +8088,7 @@ _080FC436:
pop {r0}
bx r0
.align 2, 0
_080FC440: .4byte gUnknown_3007460
_080FC440: .4byte gRfuLinkStatus
_080FC444: .4byte gUnknown_843EE47
_080FC448: .4byte gUnknown_843EE57
thumb_func_end sub_80FC228
@@ -9032,7 +9032,7 @@ sub_80FCADC: @ 80FCADC
lsls r0, 24
lsrs r5, r0, 24
movs r6, 0
ldr r0, _080FCB04 @ =gUnknown_3007460
ldr r0, _080FCB04 @ =gRfuLinkStatus
ldr r4, [r0]
ldrb r2, [r4, 0x2]
ldrb r1, [r4]
@@ -9048,7 +9048,7 @@ sub_80FCADC: @ 80FCADC
ldrb r0, [r4, 0xA]
b _080FCB4C
.align 2, 0
_080FCB04: .4byte gUnknown_3007460
_080FCB04: .4byte gRfuLinkStatus
_080FCB08:
adds r0, r6, 0x1
lsls r0, 24
@@ -9234,7 +9234,7 @@ sub_80FCC3C: @ 80FCC3C
bne _080FCC98
movs r0, 0x1
mov r9, r0
ldr r6, _080FCC94 @ =gUnknown_3007460
ldr r6, _080FCC94 @ =gRfuLinkStatus
ldr r0, [r6]
lsls r4, r5, 5
adds r0, r4
@@ -9261,11 +9261,11 @@ _080FCC78:
b _080FCCE4
.align 2, 0
_080FCC90: .4byte gUnknown_3005E10
_080FCC94: .4byte gUnknown_3007460
_080FCC94: .4byte gRfuLinkStatus
_080FCC98:
movs r0, 0
mov r9, r0
ldr r6, _080FCCCC @ =gUnknown_3007460
ldr r6, _080FCCCC @ =gRfuLinkStatus
ldr r0, [r6]
lsls r4, r5, 5
adds r0, r4
@@ -9288,7 +9288,7 @@ _080FCCB0:
bl memcpy
b _080FCCE4
.align 2, 0
_080FCCCC: .4byte gUnknown_3007460
_080FCCCC: .4byte gRfuLinkStatus
_080FCCD0:
adds r0, r7, 0
movs r1, 0
@@ -9315,7 +9315,7 @@ sub_80FCCF4: @ 80FCCF4
adds r5, r1, 0
lsls r2, 24
movs r7, 0
ldr r6, _080FCD2C @ =gUnknown_3007460
ldr r6, _080FCD2C @ =gRfuLinkStatus
ldr r0, [r6]
lsrs r4, r2, 19
adds r2, r0, r4
@@ -9337,7 +9337,7 @@ sub_80FCCF4: @ 80FCCF4
movs r7, 0x1
b _080FCD48
.align 2, 0
_080FCD2C: .4byte gUnknown_3007460
_080FCD2C: .4byte gRfuLinkStatus
_080FCD30: .4byte 0x00007f7d
_080FCD34:
adds r0, r3, 0
@@ -9388,7 +9388,7 @@ CreateWirelessStatusIndicatorSprite: @ 80FCD74
movs r3, 0xE7
movs r2, 0x8
_080FCD8A:
ldr r0, _080FCDCC @ =gUnknown_3007460
ldr r0, _080FCDCC @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -9420,7 +9420,7 @@ _080FCD8A:
strb r5, [r0]
b _080FCE2A
.align 2, 0
_080FCDCC: .4byte gUnknown_3007460
_080FCDCC: .4byte gRfuLinkStatus
_080FCDD0: .4byte gUnknown_843F284
_080FCDD4: .4byte gSprites
_080FCDD8: .4byte 0x00001234
@@ -9551,7 +9551,7 @@ _080FCEE0: .4byte gUnknown_203ACE4
thumb_func_start sub_80FCEE4
sub_80FCEE4: @ 80FCEE4
push {r4,lr}
ldr r1, _080FCF04 @ =gUnknown_3007460
ldr r1, _080FCF04 @ =gRfuLinkStatus
ldr r0, [r1]
ldrb r2, [r0, 0x2]
movs r3, 0
@@ -9567,7 +9567,7 @@ _080FCEF0:
ldrb r0, [r0]
b _080FCF16
.align 2, 0
_080FCF04: .4byte gUnknown_3007460
_080FCF04: .4byte gRfuLinkStatus
_080FCF08:
lsrs r2, 1
adds r0, r3, 0x1
@@ -9626,7 +9626,7 @@ _080FCF5C:
adds r6, r2, 0
movs r5, 0xFF
movs r4, 0
ldr r0, _080FCF84 @ =gUnknown_3007460
ldr r0, _080FCF84 @ =gRfuLinkStatus
ldr r0, [r0]
ldrb r0, [r0]
cmp r0, 0x1
@@ -9641,7 +9641,7 @@ _080FCF5C:
_080FCF78: .4byte gUnknown_203ACE4
_080FCF7C: .4byte gSprites
_080FCF80: .4byte 0x00001234
_080FCF84: .4byte gUnknown_3007460
_080FCF84: .4byte gRfuLinkStatus
_080FCF88:
adds r0, r4, 0x1
lsls r0, 24
+2 -2
View File
@@ -10493,7 +10493,7 @@ _0811AFF8:
_0811AFFA:
cmp r4, 0x3
bgt _0811B030
ldr r0, _0811B044 @ =gUnknown_3007460
ldr r0, _0811B044 @ =gRfuLinkStatus
ldr r0, [r0]
lsls r1, r4, 5
adds r0, r1
@@ -10526,7 +10526,7 @@ _0811B030:
bl StringCopy
b _0811B080
.align 2, 0
_0811B044: .4byte gUnknown_3007460
_0811B044: .4byte gRfuLinkStatus
_0811B048: .4byte gSpeciesNames
_0811B04C: .4byte gUnknown_8457DB8
_0811B050:
-477
View File
@@ -1,477 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start sub_80A0A48
sub_80A0A48: @ 80A0A48
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r3, r2, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
lsls r3, 24
lsrs r3, 24
ldr r0, _080A0A6C @ =sub_80A0B0C
adds r1, r4, 0
adds r2, r5, 0
bl sub_80A0AC0
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080A0A6C: .4byte sub_80A0B0C
thumb_func_end sub_80A0A48
thumb_func_start sub_80A0A70
sub_80A0A70: @ 80A0A70
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r3, r2, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 16
lsrs r5, 16
lsls r3, 24
lsrs r3, 24
ldr r0, _080A0A94 @ =sub_80A0C78
adds r1, r4, 0
adds r2, r5, 0
bl sub_80A0AC0
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080A0A94: .4byte sub_80A0C78
thumb_func_end sub_80A0A70
thumb_func_start sub_80A0A98
sub_80A0A98: @ 80A0A98
push {lr}
ldr r0, _080A0AA8 @ =sub_80A0B0C
bl FuncIsActiveTask
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_080A0AA8: .4byte sub_80A0B0C
thumb_func_end sub_80A0A98
thumb_func_start sub_80A0AAC
sub_80A0AAC: @ 80A0AAC
push {lr}
ldr r0, _080A0ABC @ =sub_80A0C78
bl FuncIsActiveTask
lsls r0, 24
lsrs r0, 24
pop {r1}
bx r1
.align 2, 0
_080A0ABC: .4byte sub_80A0C78
thumb_func_end sub_80A0AAC
thumb_func_start sub_80A0AC0
sub_80A0AC0: @ 80A0AC0
push {r4,r5,lr}
lsls r1, 16
lsrs r4, r1, 16
adds r5, r4, 0
lsls r3, 24
lsrs r3, 24
adds r1, r3, 0
bl CreateTask
lsls r0, 24
lsrs r0, 24
adds r2, r0, 0
ldr r1, _080A0B08 @ =gTasks
lsls r0, r2, 2
adds r0, r2
lsls r0, 3
adds r1, r0, r1
movs r0, 0
strh r0, [r1, 0x8]
movs r0, 0x10
cmp r4, 0
beq _080A0AEE
adds r0, r4, 0
_080A0AEE:
strh r0, [r1, 0xA]
movs r0, 0x14
cmp r5, 0
beq _080A0AF8
adds r0, r5, 0
_080A0AF8:
strh r0, [r1, 0xC]
ldr r1, [r1]
adds r0, r2, 0
bl _call_via_r1
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080A0B08: .4byte gTasks
thumb_func_end sub_80A0AC0
thumb_func_start sub_80A0B0C
sub_80A0B0C: @ 80A0B0C
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
ldr r1, _080A0B30 @ =gTasks
adds r4, r0, r1
movs r1, 0x8
ldrsh r0, [r4, r1]
cmp r0, 0x1
beq _080A0B8C
cmp r0, 0x1
bgt _080A0B34
cmp r0, 0
beq _080A0B3E
b _080A0C5A
.align 2, 0
_080A0B30: .4byte gTasks
_080A0B34:
cmp r0, 0x2
beq _080A0BAE
cmp r0, 0x3
beq _080A0C10
b _080A0C5A
_080A0B3E:
movs r0, 0x78
strh r0, [r4, 0xE]
strh r0, [r4, 0x10]
movs r0, 0x50
strh r0, [r4, 0x12]
movs r0, 0x51
strh r0, [r4, 0x14]
movs r1, 0x80
lsls r1, 6
movs r0, 0
bl SetGpuRegBits
ldrh r1, [r4, 0xE]
lsls r1, 8
ldrh r0, [r4, 0x10]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x40
bl SetGpuReg
ldrh r1, [r4, 0x12]
lsls r1, 8
ldrh r0, [r4, 0x14]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x44
bl SetGpuReg
movs r0, 0x48
movs r1, 0x3F
bl SetGpuReg
movs r0, 0x4A
movs r1, 0
bl SetGpuReg
b _080A0C6A
_080A0B8C:
movs r0, 0x50
bl GetGpuReg
strh r0, [r4, 0x16]
movs r0, 0x54
bl GetGpuReg
strh r0, [r4, 0x18]
movs r0, 0x50
movs r1, 0xBF
bl SetGpuReg
movs r0, 0x54
movs r1, 0x10
bl SetGpuReg
b _080A0C6A
_080A0BAE:
ldrh r0, [r4, 0xE]
ldrh r1, [r4, 0xA]
subs r0, r1
movs r5, 0
strh r0, [r4, 0xE]
ldrh r2, [r4, 0x10]
adds r1, r2
strh r1, [r4, 0x10]
lsls r0, 16
cmp r0, 0
ble _080A0BCC
lsls r0, r1, 16
asrs r0, 16
cmp r0, 0xEF
ble _080A0BF2
_080A0BCC:
strh r5, [r4, 0xE]
movs r0, 0xF0
strh r0, [r4, 0x10]
movs r0, 0x54
movs r1, 0
bl SetGpuReg
ldrh r1, [r4, 0x16]
movs r0, 0x50
bl SetGpuReg
movs r0, 0x1
negs r0, r0
movs r1, 0
movs r2, 0
bl BlendPalettes
ldr r0, _080A0C0C @ =gPlttBufferFaded
strh r5, [r0]
_080A0BF2:
ldrh r1, [r4, 0xE]
lsls r1, 8
ldrh r0, [r4, 0x10]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x40
bl SetGpuReg
movs r1, 0xE
ldrsh r0, [r4, r1]
b _080A0C54
.align 2, 0
_080A0C0C: .4byte gPlttBufferFaded
_080A0C10:
ldrh r0, [r4, 0x12]
ldrh r1, [r4, 0xC]
subs r0, r1
strh r0, [r4, 0x12]
ldrh r2, [r4, 0x14]
adds r1, r2
strh r1, [r4, 0x14]
lsls r0, 16
cmp r0, 0
ble _080A0C2C
lsls r0, r1, 16
asrs r0, 16
cmp r0, 0x9F
ble _080A0C3E
_080A0C2C:
movs r0, 0
strh r0, [r4, 0x12]
movs r0, 0xA0
strh r0, [r4, 0x14]
movs r1, 0x80
lsls r1, 6
movs r0, 0
bl ClearGpuRegBits
_080A0C3E:
ldrh r1, [r4, 0x12]
lsls r1, 8
ldrh r0, [r4, 0x14]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x44
bl SetGpuReg
movs r1, 0x12
ldrsh r0, [r4, r1]
_080A0C54:
cmp r0, 0
bne _080A0C70
b _080A0C6A
_080A0C5A:
ldrh r1, [r4, 0x16]
movs r0, 0x50
bl SetGpuReg
adds r0, r5, 0
bl DestroyTask
b _080A0C70
_080A0C6A:
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_080A0C70:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80A0B0C
thumb_func_start sub_80A0C78
sub_80A0C78: @ 80A0C78
push {r4,r5,lr}
lsls r0, 24
lsrs r5, r0, 24
lsls r0, r5, 2
adds r0, r5
lsls r0, 3
ldr r1, _080A0C9C @ =gTasks
adds r4, r0, r1
movs r0, 0x8
ldrsh r1, [r4, r0]
cmp r1, 0x1
beq _080A0CB4
cmp r1, 0x1
bgt _080A0CA0
cmp r1, 0
beq _080A0CAA
b _080A0DA8
.align 2, 0
_080A0C9C: .4byte gTasks
_080A0CA0:
cmp r1, 0x2
beq _080A0D02
cmp r1, 0x3
beq _080A0D54
b _080A0DA8
_080A0CAA:
ldr r0, _080A0CB0 @ =gPlttBufferFaded
strh r1, [r0]
b _080A0DCA
.align 2, 0
_080A0CB0: .4byte gPlttBufferFaded
_080A0CB4:
movs r1, 0
strh r1, [r4, 0xE]
movs r0, 0xF0
strh r0, [r4, 0x10]
strh r1, [r4, 0x12]
movs r0, 0xA0
strh r0, [r4, 0x14]
movs r1, 0x80
lsls r1, 6
movs r0, 0
bl SetGpuRegBits
ldrh r1, [r4, 0xE]
lsls r1, 8
ldrh r0, [r4, 0x10]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x40
bl SetGpuReg
ldrh r1, [r4, 0x12]
lsls r1, 8
ldrh r0, [r4, 0x14]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x44
bl SetGpuReg
movs r0, 0x48
movs r1, 0x3F
bl SetGpuReg
movs r0, 0x4A
movs r1, 0
bl SetGpuReg
b _080A0DCA
_080A0D02:
ldrh r0, [r4, 0xC]
ldrh r2, [r4, 0x12]
adds r1, r0, r2
strh r1, [r4, 0x12]
ldrh r2, [r4, 0x14]
subs r0, r2, r0
strh r0, [r4, 0x14]
lsls r1, 16
asrs r1, 16
cmp r1, 0x4F
bgt _080A0D20
lsls r0, 16
asrs r0, 16
cmp r0, 0x51
bgt _080A0D38
_080A0D20:
movs r0, 0x50
strh r0, [r4, 0x12]
movs r0, 0x51
strh r0, [r4, 0x14]
movs r0, 0x50
movs r1, 0xBF
bl SetGpuReg
movs r0, 0x54
movs r1, 0x10
bl SetGpuReg
_080A0D38:
ldrh r1, [r4, 0x12]
lsls r1, 8
ldrh r0, [r4, 0x14]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x44
bl SetGpuReg
movs r1, 0x12
ldrsh r0, [r4, r1]
cmp r0, 0x50
bne _080A0DD0
b _080A0DCA
_080A0D54:
ldrh r0, [r4, 0xA]
ldrh r2, [r4, 0xE]
adds r1, r0, r2
strh r1, [r4, 0xE]
ldrh r2, [r4, 0x10]
subs r0, r2, r0
strh r0, [r4, 0x10]
lsls r1, 16
asrs r1, 16
cmp r1, 0x77
bgt _080A0D72
lsls r0, 16
asrs r0, 16
cmp r0, 0x78
bgt _080A0D88
_080A0D72:
movs r0, 0x78
strh r0, [r4, 0xE]
strh r0, [r4, 0x10]
subs r0, 0x79
movs r1, 0x10
movs r2, 0
bl BlendPalettes
ldr r1, _080A0DA4 @ =gPlttBufferFaded
movs r0, 0
strh r0, [r1]
_080A0D88:
ldrh r1, [r4, 0xE]
lsls r1, 8
ldrh r0, [r4, 0x10]
orrs r1, r0
lsls r1, 16
lsrs r1, 16
movs r0, 0x40
bl SetGpuReg
movs r1, 0xE
ldrsh r0, [r4, r1]
cmp r0, 0x78
bne _080A0DD0
b _080A0DCA
.align 2, 0
_080A0DA4: .4byte gPlttBufferFaded
_080A0DA8:
movs r1, 0x80
lsls r1, 6
movs r0, 0
bl ClearGpuRegBits
movs r0, 0x54
movs r1, 0
bl SetGpuReg
movs r0, 0x50
movs r1, 0
bl SetGpuReg
adds r0, r5, 0
bl DestroyTask
b _080A0DD0
_080A0DCA:
ldrh r0, [r4, 0x8]
adds r0, 0x1
strh r0, [r4, 0x8]
_080A0DD0:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80A0C78
.align 2, 0 @ Don't pad with nop.
+4 -4
View File
@@ -5755,7 +5755,7 @@ sub_8137578: @ 8137578
bl GetNature
lsls r0, 24
lsrs r6, r0, 24
ldr r1, _081375F0 @ =gNatureNames
ldr r1, _081375F0 @ =gNatureNamePointers
lsls r0, r6, 2
adds r0, r1
ldr r1, [r0]
@@ -5796,7 +5796,7 @@ _081375B2:
.align 2, 0
_081375E8: .4byte gUnknown_203B140
_081375EC: .4byte 0x00003290
_081375F0: .4byte gNatureNames
_081375F0: .4byte gNatureNamePointers
_081375F4:
ldr r0, [r7]
ldr r1, _08137614 @ =0x00003024
@@ -5952,7 +5952,7 @@ sub_8137724: @ 8137724
bl GetNature
lsls r0, 24
lsrs r6, r0, 24
ldr r1, _081377A8 @ =gNatureNames
ldr r1, _081377A8 @ =gNatureNamePointers
lsls r0, r6, 2
adds r0, r1
ldr r1, [r0]
@@ -5997,7 +5997,7 @@ _08137790:
.align 2, 0
_081377A0: .4byte gUnknown_203B140
_081377A4: .4byte 0x00003290
_081377A8: .4byte gNatureNames
_081377A8: .4byte gNatureNamePointers
_081377AC:
cmp r5, 0xFF
bne _081377D0
-13825
View File
File diff suppressed because it is too large Load Diff
-535
View File
@@ -1,535 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start HealPlayerParty
HealPlayerParty: @ 80A0058
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
movs r0, 0
mov r8, r0
ldr r0, _080A0114 @ =gPlayerPartyCount
ldrb r0, [r0]
cmp r8, r0
bcs _080A0104
ldr r1, _080A0118 @ =gPlayerParty
mov r10, r1
mov r6, sp
_080A0076:
movs r0, 0x64
mov r4, r8
muls r4, r0
add r4, r10
adds r0, r4, 0
movs r1, 0x3A
bl GetMonData
lsls r1, r0, 16
strb r0, [r6]
lsrs r1, 24
strb r1, [r6, 0x1]
adds r0, r4, 0
movs r1, 0x39
mov r2, sp
bl SetMonData
adds r0, r4, 0
movs r1, 0x15
bl GetMonData
lsls r0, 24
lsrs r7, r0, 24
movs r5, 0
movs r1, 0x1
add r1, r8
mov r9, r1
_080A00AC:
adds r1, r5, 0
adds r1, 0xD
adds r0, r4, 0
bl GetMonData
lsls r0, 16
lsrs r0, 16
adds r1, r7, 0
adds r2, r5, 0
bl CalculatePPWithBonus
strb r0, [r6]
adds r1, r5, 0
adds r1, 0x11
adds r0, r4, 0
mov r2, sp
bl SetMonData
adds r0, r5, 0x1
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0x3
bls _080A00AC
movs r0, 0
strb r0, [r6]
strb r0, [r6, 0x1]
strb r0, [r6, 0x2]
strb r0, [r6, 0x3]
movs r1, 0x64
mov r0, r8
muls r0, r1
add r0, r10
movs r1, 0x37
mov r2, sp
bl SetMonData
mov r1, r9
lsls r0, r1, 24
lsrs r0, 24
mov r8, r0
ldr r0, _080A0114 @ =gPlayerPartyCount
ldrb r0, [r0]
cmp r8, r0
bcc _080A0076
_080A0104:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A0114: .4byte gPlayerPartyCount
_080A0118: .4byte gPlayerParty
thumb_func_end HealPlayerParty
thumb_func_start ScriptGiveMon
ScriptGiveMon: @ 80A011C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r6, r0, 0
adds r4, r1, 0
adds r5, r2, 0
lsls r6, 16
lsrs r6, 16
lsls r4, 24
lsrs r4, 24
lsls r5, 16
lsrs r0, r5, 16
mov r8, r0
movs r0, 0x64
bl AllocZeroed
adds r7, r0, 0
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
str r0, [sp, 0x8]
str r0, [sp, 0xC]
adds r0, r7, 0
adds r1, r6, 0
adds r2, r4, 0
movs r3, 0x20
bl CreateMon
add r0, sp, 0x10
mov r1, r8
strb r1, [r0]
lsrs r5, 24
strb r5, [r0, 0x1]
adds r0, r7, 0
movs r1, 0xC
add r2, sp, 0x10
bl SetMonData
adds r0, r7, 0
bl GiveMonToPlayer
lsls r0, 24
lsrs r4, r0, 24
adds r0, r6, 0
bl SpeciesToNationalPokedexNum
lsls r0, 16
lsrs r5, r0, 16
cmp r4, 0x1
bgt _080A0196
cmp r4, 0
blt _080A0196
adds r0, r5, 0
movs r1, 0x2
bl GetSetPokedexFlag
adds r0, r5, 0
movs r1, 0x3
bl GetSetPokedexFlag
_080A0196:
adds r0, r7, 0
bl Free
adds r0, r4, 0
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end ScriptGiveMon
thumb_func_start ScriptGiveEgg
ScriptGiveEgg: @ 80A01AC
push {r4,r5,lr}
sub sp, 0x4
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
movs r0, 0x64
bl AllocZeroed
adds r5, r0, 0
adds r1, r4, 0
movs r2, 0x1
bl CreateEgg
movs r1, 0x1
mov r0, sp
strb r1, [r0]
adds r0, r5, 0
movs r1, 0x2D
mov r2, sp
bl SetMonData
adds r0, r5, 0
bl GiveMonToPlayer
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
adds r0, r5, 0
bl Free
adds r0, r4, 0
add sp, 0x4
pop {r4,r5}
pop {r1}
bx r1
thumb_func_end ScriptGiveEgg
thumb_func_start HasEnoughMonsForDoubleBattle
HasEnoughMonsForDoubleBattle: @ 80A01F4
push {lr}
bl GetMonsStateToDoubles
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0x1
beq _080A0210
cmp r1, 0x1
bgt _080A020C
cmp r1, 0
beq _080A0210
b _080A0214
_080A020C:
cmp r1, 0x2
bne _080A0214
_080A0210:
ldr r0, _080A0218 @ =gSpecialVar_Result
strh r1, [r0]
_080A0214:
pop {r0}
bx r0
.align 2, 0
_080A0218: .4byte gSpecialVar_Result
thumb_func_end HasEnoughMonsForDoubleBattle
thumb_func_start CheckPartyMonHasHeldItem
CheckPartyMonHasHeldItem: @ 80A021C
push {r4-r7,lr}
lsls r0, 16
lsrs r6, r0, 16
movs r5, 0
movs r7, 0xCE
lsls r7, 1
_080A0228:
movs r0, 0x64
adds r1, r5, 0
muls r1, r0
ldr r0, _080A0258 @ =gPlayerParty
adds r4, r1, r0
adds r0, r4, 0
movs r1, 0x41
bl GetMonData
lsls r0, 16
lsrs r0, 16
cmp r0, 0
beq _080A025C
cmp r0, r7
beq _080A025C
adds r0, r4, 0
movs r1, 0xC
bl GetMonData
cmp r0, r6
bne _080A025C
movs r0, 0x1
b _080A0264
.align 2, 0
_080A0258: .4byte gPlayerParty
_080A025C:
adds r5, 0x1
cmp r5, 0x5
ble _080A0228
movs r0, 0
_080A0264:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end CheckPartyMonHasHeldItem
thumb_func_start GetNameOfEnigmaBerryInPlayerParty
GetNameOfEnigmaBerryInPlayerParty: @ 80A026C
push {r4,lr}
movs r0, 0xAF
bl CheckPartyMonHasHeldItem
lsls r0, 24
lsrs r0, 24
adds r4, r0, 0
cmp r4, 0x1
bne _080A028E
movs r0, 0xAF
bl ItemIdToBerryType
lsls r0, 24
lsrs r0, 24
ldr r1, _080A0298 @ =gStringVar1
bl GetBerryNameByBerryType
_080A028E:
adds r0, r4, 0
pop {r4}
pop {r1}
bx r1
.align 2, 0
_080A0298: .4byte gStringVar1
thumb_func_end GetNameOfEnigmaBerryInPlayerParty
thumb_func_start CreateScriptedWildMon
CreateScriptedWildMon: @ 80A029C
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r4, r0, 0
adds r5, r1, 0
lsls r4, 16
lsrs r4, 16
lsls r5, 24
lsrs r5, 24
lsls r7, r2, 16
lsrs r6, r7, 16
bl ZeroEnemyPartyMons
ldr r0, _080A02F8 @ =gEnemyParty
mov r8, r0
movs r0, 0
str r0, [sp]
str r0, [sp, 0x4]
str r0, [sp, 0x8]
str r0, [sp, 0xC]
mov r0, r8
adds r1, r4, 0
adds r2, r5, 0
movs r3, 0x20
bl CreateMon
cmp r6, 0
beq _080A02EA
add r0, sp, 0x10
strb r6, [r0]
adds r1, r0, 0
lsrs r0, r7, 24
strb r0, [r1, 0x1]
mov r0, r8
movs r1, 0xC
add r2, sp, 0x10
bl SetMonData
_080A02EA:
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A02F8: .4byte gEnemyParty
thumb_func_end CreateScriptedWildMon
thumb_func_start ScriptSetMonMoveSlot
ScriptSetMonMoveSlot: @ 80A02FC
push {r4,lr}
lsls r0, 24
lsrs r3, r0, 24
lsls r1, 16
lsrs r4, r1, 16
lsls r2, 24
lsrs r2, 24
cmp r3, 0x6
bls _080A0318
ldr r0, _080A032C @ =gPlayerPartyCount
ldrb r0, [r0]
subs r0, 0x1
lsls r0, 24
lsrs r3, r0, 24
_080A0318:
movs r0, 0x64
muls r0, r3
ldr r1, _080A0330 @ =gPlayerParty
adds r0, r1
adds r1, r4, 0
bl SetMonMoveSlot
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A032C: .4byte gPlayerPartyCount
_080A0330: .4byte gPlayerParty
thumb_func_end ScriptSetMonMoveSlot
thumb_func_start ChooseHalfPartyForBattle
ChooseHalfPartyForBattle: @ 80A0334
push {lr}
ldr r1, _080A0348 @ =gMain
ldr r0, _080A034C @ =sub_80A0350
str r0, [r1, 0x8]
movs r0, 0
bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
_080A0348: .4byte gMain
_080A034C: .4byte sub_80A0350
thumb_func_end ChooseHalfPartyForBattle
thumb_func_start sub_80A0350
sub_80A0350: @ 80A0350
push {lr}
ldr r0, _080A0360 @ =gSelectedOrderFromParty
ldrb r1, [r0]
cmp r1, 0
bne _080A0368
ldr r0, _080A0364 @ =gSpecialVar_Result
strh r1, [r0]
b _080A036E
.align 2, 0
_080A0360: .4byte gSelectedOrderFromParty
_080A0364: .4byte gSpecialVar_Result
_080A0368:
ldr r1, _080A0378 @ =gSpecialVar_Result
movs r0, 0x1
strh r0, [r1]
_080A036E:
ldr r0, _080A037C @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
bl SetMainCallback2
pop {r0}
bx r0
.align 2, 0
_080A0378: .4byte gSpecialVar_Result
_080A037C: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
thumb_func_end sub_80A0350
thumb_func_start ChooseBattleTowerPlayerParty
ChooseBattleTowerPlayerParty: @ 80A0380
push {lr}
ldr r1, _080A0394 @ =gMain
ldr r0, _080A0398 @ =sub_80A039C
str r0, [r1, 0x8]
movs r0, 0x1
bl InitChooseHalfPartyForBattle
pop {r0}
bx r0
.align 2, 0
_080A0394: .4byte gMain
_080A0398: .4byte sub_80A039C
thumb_func_end ChooseBattleTowerPlayerParty
thumb_func_start sub_80A039C
sub_80A039C: @ 80A039C
push {r4,lr}
ldr r0, _080A03B0 @ =gSelectedOrderFromParty
ldrb r4, [r0]
cmp r4, 0
bne _080A03B8
bl LoadPlayerParty
ldr r0, _080A03B4 @ =gSpecialVar_Result
strh r4, [r0]
b _080A03C2
.align 2, 0
_080A03B0: .4byte gSelectedOrderFromParty
_080A03B4: .4byte gSpecialVar_Result
_080A03B8:
bl ReducePlayerPartyToThree
ldr r1, _080A03D0 @ =gSpecialVar_Result
movs r0, 0x1
strh r0, [r1]
_080A03C2:
ldr r0, _080A03D4 @ =CB2_ReturnToFieldContinueScriptPlayMapMusic
bl SetMainCallback2
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080A03D0: .4byte gSpecialVar_Result
_080A03D4: .4byte CB2_ReturnToFieldContinueScriptPlayMapMusic
thumb_func_end sub_80A039C
thumb_func_start ReducePlayerPartyToThree
ReducePlayerPartyToThree: @ 80A03D8
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
movs r0, 0x96
lsls r0, 1
bl AllocZeroed
adds r7, r0, 0
movs r5, 0
movs r0, 0x64
mov r8, r0
ldr r6, _080A0454 @ =gPlayerParty
adds r4, r7, 0
_080A03F4:
ldr r0, _080A0458 @ =gSelectedOrderFromParty
adds r1, r5, r0
ldrb r0, [r1]
cmp r0, 0
beq _080A040E
subs r0, 0x1
mov r1, r8
muls r1, r0
adds r1, r6
adds r0, r4, 0
movs r2, 0x64
bl memcpy
_080A040E:
adds r4, 0x64
adds r5, 0x1
cmp r5, 0x2
ble _080A03F4
movs r0, 0
str r0, [sp]
ldr r4, _080A0454 @ =gPlayerParty
ldr r2, _080A045C @ =0x05000096
mov r0, sp
adds r1, r4, 0
bl CpuSet
adds r5, r7, 0
adds r6, r7, 0
adds r6, 0xC8
_080A042C:
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x64
bl memcpy
adds r5, 0x64
adds r4, 0x64
cmp r5, r6
ble _080A042C
bl CalculatePlayerPartyCount
adds r0, r7, 0
bl Free
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080A0454: .4byte gPlayerParty
_080A0458: .4byte gSelectedOrderFromParty
_080A045C: .4byte 0x05000096
thumb_func_end ReducePlayerPartyToThree
.align 2, 0 @ Don't pad with nop.
-422
View File
@@ -1,422 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start Special_ChooseMonFromParty
Special_ChooseMonFromParty: @ 80BF8FC
push {lr}
sub sp, 0x4
bl ScriptContext2_Enable
ldr r0, _080BF934 @ =sub_80BF97C
movs r1, 0xA
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080BF938 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
movs r2, 0
movs r0, 0x3
strh r0, [r1, 0x8]
subs r0, 0x4
str r2, [sp]
movs r1, 0
movs r3, 0x10
bl BeginNormalPaletteFade
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_080BF934: .4byte sub_80BF97C
_080BF938: .4byte gTasks
thumb_func_end Special_ChooseMonFromParty
thumb_func_start SelectMoveTutorMon
SelectMoveTutorMon: @ 80BF93C
push {lr}
sub sp, 0x4
bl ScriptContext2_Enable
ldr r0, _080BF974 @ =sub_80BF97C
movs r1, 0xA
bl CreateTask
lsls r0, 24
lsrs r0, 24
ldr r2, _080BF978 @ =gTasks
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
adds r1, r2
movs r2, 0
movs r0, 0x7
strh r0, [r1, 0x8]
subs r0, 0x8
str r2, [sp]
movs r1, 0
movs r3, 0x10
bl BeginNormalPaletteFade
add sp, 0x4
pop {r0}
bx r0
.align 2, 0
_080BF974: .4byte sub_80BF97C
_080BF978: .4byte gTasks
thumb_func_end SelectMoveTutorMon
thumb_func_start sub_80BF97C
sub_80BF97C: @ 80BF97C
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
ldr r2, _080BF9B4 @ =gPaletteFade
ldrb r1, [r2, 0x7]
movs r0, 0x80
ands r0, r1
cmp r0, 0
bne _080BF9AC
ldrb r0, [r2, 0x8]
movs r1, 0x80
orrs r0, r1
strb r0, [r2, 0x8]
ldr r1, _080BF9B8 @ =gTasks
lsls r0, r4, 2
adds r0, r4
lsls r0, 3
adds r0, r1
ldrb r0, [r0, 0x8]
bl ChoosePartyMonByMenuType
adds r0, r4, 0
bl DestroyTask
_080BF9AC:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080BF9B4: .4byte gPaletteFade
_080BF9B8: .4byte gTasks
thumb_func_end sub_80BF97C
thumb_func_start SelectMove
SelectMove: @ 80BF9BC
push {r4,lr}
sub sp, 0x4
ldr r0, _080BF9F0 @ =gPlayerParty
ldr r1, _080BF9F4 @ =gSpecialVar_0x8004
ldrb r1, [r1]
ldr r2, _080BF9F8 @ =gPlayerPartyCount
ldrb r2, [r2]
subs r2, 0x1
lsls r2, 24
lsrs r2, 24
ldr r3, _080BF9FC @ =CB2_ReturnToField
movs r4, 0
str r4, [sp]
bl ShowSelectMovePokemonSummaryScreen
movs r0, 0x3
bl sub_8138B38
ldr r1, _080BFA00 @ =gFieldCallback
ldr r0, _080BFA04 @ =FieldCallback_ReturnToEventScript2
str r0, [r1]
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080BF9F0: .4byte gPlayerParty
_080BF9F4: .4byte gSpecialVar_0x8004
_080BF9F8: .4byte gPlayerPartyCount
_080BF9FC: .4byte CB2_ReturnToField
_080BFA00: .4byte gFieldCallback
_080BFA04: .4byte FieldCallback_ReturnToEventScript2
thumb_func_end SelectMove
thumb_func_start ScrSpecial_CountPokemonMoves
ScrSpecial_CountPokemonMoves: @ 80BFA08
push {r4,r5,lr}
ldr r1, _080BFA44 @ =gSpecialVar_Result
movs r0, 0
strh r0, [r1]
movs r4, 0
adds r5, r1, 0
_080BFA14:
ldr r0, _080BFA48 @ =gSpecialVar_0x8004
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080BFA4C @ =gPlayerParty
adds r0, r1
adds r1, r4, 0
adds r1, 0xD
bl GetMonData
cmp r0, 0
beq _080BFA32
ldrh r0, [r5]
adds r0, 0x1
strh r0, [r5]
_080BFA32:
adds r0, r4, 0x1
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x3
bls _080BFA14
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080BFA44: .4byte gSpecialVar_Result
_080BFA48: .4byte gSpecialVar_0x8004
_080BFA4C: .4byte gPlayerParty
thumb_func_end ScrSpecial_CountPokemonMoves
thumb_func_start ScrSpecial_GetPokemonNicknameAndMoveName
ScrSpecial_GetPokemonNicknameAndMoveName: @ 80BFA50
push {r4,r5,lr}
ldr r0, _080BFA90 @ =gSpecialVar_0x8004
ldrh r1, [r0]
movs r0, 0x64
adds r5, r1, 0
muls r5, r0
ldr r0, _080BFA94 @ =gPlayerParty
adds r5, r0
ldr r0, _080BFA98 @ =gSpecialVar_0x8005
ldrh r1, [r0]
adds r1, 0xD
adds r0, r5, 0
bl GetMonData
adds r4, r0, 0
lsls r4, 16
lsrs r4, 16
ldr r1, _080BFA9C @ =gStringVar1
adds r0, r5, 0
bl GetMonNickname
ldr r0, _080BFAA0 @ =gStringVar2
movs r1, 0xD
muls r1, r4
ldr r2, _080BFAA4 @ =gMoveNames
adds r1, r2
bl StringCopy
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_080BFA90: .4byte gSpecialVar_0x8004
_080BFA94: .4byte gPlayerParty
_080BFA98: .4byte gSpecialVar_0x8005
_080BFA9C: .4byte gStringVar1
_080BFAA0: .4byte gStringVar2
_080BFAA4: .4byte gMoveNames
thumb_func_end ScrSpecial_GetPokemonNicknameAndMoveName
thumb_func_start sub_80BFAA8
sub_80BFAA8: @ 80BFAA8
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x20
mov r8, r0
adds r5, r1, 0
adds r4, r2, 0
lsls r5, 24
lsrs r5, 24
lsls r4, 24
lsrs r4, 24
adds r0, r5, 0
adds r0, 0xD
str r0, [sp, 0x8]
mov r0, r8
ldr r1, [sp, 0x8]
bl GetMonData
mov r1, sp
adds r1, 0x2
str r1, [sp, 0x14]
strh r0, [r1]
adds r3, r4, 0
adds r3, 0xD
str r3, [sp, 0xC]
mov r0, r8
adds r1, r3, 0
bl GetMonData
mov r1, sp
strh r0, [r1]
adds r7, r5, 0
adds r7, 0x11
str r7, [sp, 0x10]
mov r0, r8
adds r1, r7, 0
bl GetMonData
mov r1, sp
adds r1, 0x5
str r1, [sp, 0x18]
strb r0, [r1]
adds r3, r4, 0
adds r3, 0x11
str r3, [sp, 0x1C]
mov r0, r8
adds r1, r3, 0
bl GetMonData
add r7, sp, 0x4
mov r10, r7
strb r0, [r7]
mov r0, r8
movs r1, 0x15
bl GetMonData
mov r6, sp
adds r6, 0x6
strb r0, [r6]
ldr r1, _080BFBA4 @ =gPPUpGetMask
adds r0, r5, r1
ldrb r0, [r0]
mov r9, r0
ldrb r0, [r6]
adds r2, r0, 0
mov r3, r9
ands r2, r3
lsls r5, 1
asrs r2, r5
lsls r2, 24
lsrs r2, 24
adds r1, r4, r1
ldrb r3, [r1]
adds r1, r0, 0
ands r1, r3
lsls r4, 1
asrs r1, r4
lsls r1, 24
lsrs r1, 24
mov r7, r9
bics r0, r7
strb r0, [r6]
ldrb r0, [r6]
bics r0, r3
strb r0, [r6]
lsls r2, r4
lsls r1, r5
adds r2, r1
ldrb r0, [r6]
orrs r0, r2
strb r0, [r6]
mov r0, r8
ldr r1, [sp, 0x8]
mov r2, sp
bl SetMonData
mov r0, r8
ldr r1, [sp, 0xC]
ldr r2, [sp, 0x14]
bl SetMonData
mov r0, r8
ldr r1, [sp, 0x10]
mov r2, r10
bl SetMonData
mov r0, r8
ldr r1, [sp, 0x1C]
ldr r2, [sp, 0x18]
bl SetMonData
mov r0, r8
movs r1, 0x15
adds r2, r6, 0
bl SetMonData
add sp, 0x20
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_080BFBA4: .4byte gPPUpGetMask
thumb_func_end sub_80BFAA8
thumb_func_start DeleteMonMove
DeleteMonMove: @ 80BFBA8
push {r4-r6,lr}
mov r6, r8
push {r6}
ldr r0, _080BFC08 @ =gSpecialVar_0x8004
mov r8, r0
ldrh r0, [r0]
movs r6, 0x64
muls r0, r6
ldr r5, _080BFC0C @ =gPlayerParty
adds r0, r5
ldr r4, _080BFC10 @ =gSpecialVar_0x8005
ldrb r2, [r4]
movs r1, 0
bl SetMonMoveSlot
mov r1, r8
ldrh r0, [r1]
muls r0, r6
adds r0, r5
ldrb r1, [r4]
bl RemoveMonPPBonus
ldrh r4, [r4]
cmp r4, 0x2
bhi _080BFBFC
_080BFBDA:
ldr r0, _080BFC08 @ =gSpecialVar_0x8004
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080BFC0C @ =gPlayerParty
adds r0, r1
lsls r1, r4, 24
lsrs r1, 24
adds r4, 0x1
lsls r2, r4, 24
lsrs r2, 24
bl sub_80BFAA8
lsls r4, 16
lsrs r4, 16
cmp r4, 0x2
bls _080BFBDA
_080BFBFC:
pop {r3}
mov r8, r3
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_080BFC08: .4byte gSpecialVar_0x8004
_080BFC0C: .4byte gPlayerParty
_080BFC10: .4byte gSpecialVar_0x8005
thumb_func_end DeleteMonMove
thumb_func_start IsSelectedMonEgg
IsSelectedMonEgg: @ 80BFC14
push {lr}
ldr r0, _080BFC38 @ =gSpecialVar_0x8004
ldrh r1, [r0]
movs r0, 0x64
muls r0, r1
ldr r1, _080BFC3C @ =gPlayerParty
adds r0, r1
movs r1, 0x2D
bl GetMonData
adds r1, r0, 0
cmp r1, 0
beq _080BFC44
ldr r1, _080BFC40 @ =gSpecialVar_Result
movs r0, 0x1
strh r0, [r1]
b _080BFC48
.align 2, 0
_080BFC38: .4byte gSpecialVar_0x8004
_080BFC3C: .4byte gPlayerParty
_080BFC40: .4byte gSpecialVar_Result
_080BFC44:
ldr r0, _080BFC4C @ =gSpecialVar_Result
strh r1, [r0]
_080BFC48:
pop {r0}
bx r0
.align 2, 0
_080BFC4C: .4byte gSpecialVar_Result
thumb_func_end IsSelectedMonEgg
.align 2, 0 @ Don't pad with nop.
+4 -4
View File
@@ -16,7 +16,7 @@ Init:
msr cpsr_cf, r0
ldr sp, sp_sys
ldr r1, =INTR_VECTOR
ldr r0, =IntrMain
ldr r0, =intr_main
str r0, [r1]
ldr r1, =AgbMain + 1
mov lr, pc
@@ -32,8 +32,8 @@ sp_irq: .word IWRAM_END - 0x60
.arm
.align 2, 0
.global IntrMain
IntrMain: @ 0x2010048
.global intr_main
intr_main: @ 0x2010048
mov ip, REG_BASE
add r3, ip, OFFSET_REG_IE
ldr r2, [r3]
@@ -79,4 +79,4 @@ _020100DC:
ldr r0, [r1]
bx r0
.pool
.size IntrMain, .-IntrMain
.size intr_main, .-intr_main
+2 -2
View File
@@ -17,7 +17,7 @@ u32 gGameVersion;
EWRAM_DATA u8 gSharedMem[0x8000] = {};
void IntrMain(void);
void intr_main(void);
void ReadKeys(void);
void dummy_intr_0(void);
void dummy_intr_1(void);
@@ -62,7 +62,7 @@ void AgbMain(void)
{
RegisterRamReset(0x1E);
DmaCopy32(3, gIntrFuncPointers, gIntrTable, sizeof gIntrFuncPointers);
DmaCopy32(3, IntrMain, gIntrVector, sizeof(gIntrVector));
DmaCopy32(3, intr_main, gIntrVector, sizeof(gIntrVector));
INTR_VECTOR = gIntrVector;
REG_IE = INTR_FLAG_VBLANK;
if (*RomHeaderMagic == 0x96 && *(u32 *)RomHeaderGameCode == *(u32 *)gBerryFixGameCode)
+10
View File
@@ -0,0 +1,10 @@
gCanvasColumnStart
gCanvasPixels
gCanvasRowEnd
gCanvasHeight
gCanvasColumnEnd
gCanvasRowStart
gCanvasMonPersonality
gCanvasWidth
gCanvasPalette
gCanvasPaletteStart
+5
View File
@@ -0,0 +1,5 @@
gRfuSlotStatusUNI
gRfuSlotStatusNI
gRfuLinkStatus
gRfuStatic
gRfuFixed
+1
View File
@@ -0,0 +1 @@
gRfuSIO32Id
+1
View File
@@ -0,0 +1 @@
gSTWIStatus
+3 -89
View File
@@ -1,91 +1,5 @@
.ifdef SAPPHIRE
.equiv GAME_VERSION, 1
.ifdef FIRERED
.equiv GAME_VERSION, 4
.else
.equiv GAME_VERSION, 2
.endif
.ifdef SAPPHIRE
.set BGM_EVIL_TEAM, BGM_AQA_0
.set BGM_GOOD_TEAM, BGM_MGM0
.else
.set BGM_EVIL_TEAM, BGM_MGM0
.set BGM_GOOD_TEAM, BGM_AQA_0
.endc
.ifdef SAPPHIRE
.set ITEM_RED_OR_BLUE_ORB, ITEM_BLUE_ORB
.else
.set ITEM_RED_OR_BLUE_ORB, ITEM_RED_ORB
.endif
.ifdef SAPPHIRE
.set SPECIES_GROUDON_OR_KYOGRE, SPECIES_KYOGRE
.else
.set SPECIES_GROUDON_OR_KYOGRE, SPECIES_GROUDON
.endif
.ifdef SAPPHIRE
.set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIOS
.else
.set SPECIES_LATIAS_OR_LATIOS, SPECIES_LATIAS
.endif
.ifdef SAPPHIRE
.set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_9
.set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_15
.set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_19
.set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_20
.set OPPONENT_514, OPPONENT_HECTOR_1
.set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_MATT_2
.set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_13
.set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_1
.set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_2
.set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_3
.set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_26
.set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_MATT_1
.set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_4
.set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_27
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_5
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_6
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_SHELLY_2
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_7
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_ARCHIE_2
.set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_ARCHIE_3
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_22
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_23
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_24
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_16
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_25
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_17
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_18
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_SHELLY_1
.else
.set OPPONENT_PETALBURG_WOODS_GRUNT, OPPONENT_GRUNT_36
.set OPPONENT_RUSTURF_TUNNEL_GRUNT, OPPONENT_GRUNT_42
.set OPPONENT_MUSEUM_2F_GRUNT_1, OPPONENT_GRUNT_46
.set OPPONENT_MUSEUM_2F_GRUNT_2, OPPONENT_GRUNT_47
.set OPPONENT_514, OPPONENT_HECTOR_2
.set OPPONENT_MT_CHIMNEY_GRUNT_1, OPPONENT_TABITHA_2
.set OPPONENT_MT_CHIMNEY_GRUNT_2, OPPONENT_GRUNT_40
.set OPPONENT_HIDEOUT_1F_GRUNT, OPPONENT_GRUNT_28
.set OPPONENT_HIDEOUT_B1F_GRUNT_1, OPPONENT_GRUNT_29
.set OPPONENT_HIDEOUT_B1F_GRUNT_2, OPPONENT_GRUNT_30
.set OPPONENT_HIDEOUT_B1F_GRUNT_3, OPPONENT_GRUNT_53
.set OPPONENT_HIDEOUT_B2F_GRUNT_1, OPPONENT_TABITHA_1
.set OPPONENT_HIDEOUT_B2F_GRUNT_2, OPPONENT_GRUNT_31
.set OPPONENT_HIDEOUT_B2F_GRUNT_3, OPPONENT_GRUNT_54
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_1, OPPONENT_GRUNT_32
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_2, OPPONENT_GRUNT_33
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_3, OPPONENT_COURTNEY_2
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_4, OPPONENT_GRUNT_34
.set OPPONENT_SEAFLOOR_CAVERN_GRUNT_5, OPPONENT_MAXIE_2
.set OPPONENT_MT_CHIMNEY_GRUNT_3, OPPONENT_MAXIE_3
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_1, OPPONENT_GRUNT_49
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_2, OPPONENT_GRUNT_50
.set OPPONENT_MT_PYRE_SUMMIT_GRUNT_3, OPPONENT_GRUNT_51
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_1, OPPONENT_GRUNT_43
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_2, OPPONENT_GRUNT_52
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_3, OPPONENT_GRUNT_44
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_4, OPPONENT_GRUNT_45
.set OPPONENT_WEATHER_INSTITUTE_GRUNT_5, OPPONENT_COURTNEY_1
.equiv GAME_VERSION, 5
.endif
-164
View File
@@ -1,164 +0,0 @@
#include "constants/region_map.h"
#include "constants/trainer_classes.h"
#include "constants/songs.h"
#include "constants/flags.h"
#include "constants/region_map.h"
#include "constants/maps.h"
#define RGB(r, g, b) ((r) | ((g) << 5) | ((b) << 10))
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2, 0
gUnknown_8260270:: @ 8260270
.4byte 0xc0004000, 0x00000400
gUnknown_8260278:: @ 8260278
spr_template 55039, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55040, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602A8:: @ 82602A8
spr_template 55041, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
spr_template 55042, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602D8:: @ 82602D8
spr_template 55051, 55039, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
gUnknown_82602F0::
.4byte 0x40004000, 0x00000400
gUnknown_82602F8:: @ 82602F8
spr_template 55044, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55045, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55046, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
spr_template 55047, 55044, gUnknown_82602F0, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80480B8
gUnknown_8260358::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
subsprite 240, 32, 1, 0x0030, 32x8
subsprite 16, 32, 1, 0x0034, 32x8
subsprite 48, 32, 1, 0x0038, 32x8
gUnknown_826036C::
subsprite 240, 0, 1, 0x0040, 64x32
subsprite 48, 0, 1, 0x0060, 32x32
subsprite 240, 32, 1, 0x0070, 32x8
subsprite 16, 32, 1, 0x0074, 32x8
subsprite 48, 32, 1, 0x0078, 32x8
gUnknown_8260380::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
gUnknown_8260388::
subsprite 240, 0, 1, 0x0000, 64x32
subsprite 48, 0, 1, 0x0020, 32x32
gUnknown_8260390::
subsprite 240, 0, 1, 0x0000, 32x8
subsprite 16, 0, 1, 0x0004, 32x8
gUnknown_8260398::
subsprite 240, 0, 1, 0x0000, 32x8
subsprite 16, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 8x8
gUnknown_82603A4::
.4byte 5, gUnknown_8260358
.4byte 2, gUnknown_8260380
.4byte 5, gUnknown_826036C
.4byte 2, gUnknown_8260388
gUnknown_82603C4:: @ 82603C4
.4byte 2, gUnknown_8260390
.4byte 3, gUnknown_8260398
gUnknown_82603D4::
subsprite 160, 0, 1, 0x0000, 32x8
subsprite 192, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 32x8
subsprite 0, 0, 1, 0x000c, 32x8
gUnknown_82603E4::
subsprite 160, 0, 1, 0x0000, 32x8
subsprite 192, 0, 1, 0x0004, 32x8
subsprite 224, 0, 1, 0x0008, 32x8
subsprite 0, 0, 1, 0x0008, 32x8
subsprite 32, 0, 1, 0x0008, 32x8
subsprite 64, 0, 1, 0x000c, 32x8
gUnknown_82603FC:: @ 82603FC
.4byte 4, gUnknown_82603D4
gUnknown_8260404:: @ 8260404
.4byte 6, gUnknown_82603E4
gUnknown_26040C::
.incbin "graphics/battle_interface/unk_826404C.4bpp"
gUnknown_826046C:: @ 826046C
obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55052
obj_tiles gFile_graphics_battle_interface_ball_status_bar_sheet, 0x0200, 55053
gUnknown_826047C:: @ 826047C
obj_pal gBattleInterface_BallStatusBarPal, 55056
obj_pal gBattleInterface_BallStatusBarPal, 55057
gUnknown_826048C:: @ 826048C
obj_pal gBattleInterface_BallDisplayPal, 55058
obj_pal gBattleInterface_BallDisplayPal, 55059
gUnknown_826049C:: @ 826049C
obj_tiles gUnknown_8D12404, 0x0080, 55060
obj_tiles gUnknown_8D12404, 0x0080, 55061
gUnknown_82604AC::
.4byte 0xc0004000, 0x00000400
gUnknown_82604B4::
.4byte 0x00000000, 0x00000400
gUnknown_82604BC:: @ 82604BC
spr_template 55052, 55056, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar
spr_template 55053, 55057, gUnknown_8260270, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBar
gUnknown_82604EC:: @ 82604EC
spr_template 55060, 55058, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart
spr_template 55061, 55059, gUnknown_82604B4, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCB_StatusSummaryBallsOnBattleStart
gUnknown_826051C:: @ 826051C
.string "{LV_2}$", 16
gUnknown_826052C:: @ 826052C
.string "{COLOR 01}{HIGHLIGHT 02}", 20
gUnknown_8260540:: @ 8260540
.string "/$"
gUnknown_8260542:: @ 8260542
.string "{COLOR 01}{HIGHLIGHT 00}", 20
gUnknown_8260556:: @ 8260556
.string "{HIGHLIGHT 02}$"
gUnknown_826055A:: @ 826055A
.2byte RGB(24, 12, 24)
.2byte RGB(23, 23, 3)
.2byte RGB(20, 20, 17)
.2byte RGB(17, 22, 28)
.2byte RGB(28, 14, 10)
gUnknown_8260564:: @ 8260564
.byte 0, 0, 0, 8, 2, 0
.2byte 0x0000
@ {
@ .bg = 0,
@ .tilemapLeft = 0,
@ .tilemapTop = 0,
@ .width = 8,
@ .height = 2,
@ .paletteNum = 0,
@ .baseBlock = 0x0000
@ }
-28
View File
@@ -1,28 +0,0 @@
.section .rodata
.set VERSION_MAJOR, 1
.set VERSION_MINOR, 0
.set VERSION_REVISION, 24
.align 2
_Str_RfuHeader::
.byte 2, 14, 0, 10, 9, 5, 7, 2
.byte 0, 15, 1, 3, 3, 0, 31, 0
.byte 3, 22, 18, 14, 13, 9, 11, 3
.byte 15, 15, 1, 3, 3, 0, 0x7f, 0
.ascii "RFU_V"
.byte VERSION_MAJOR + 0x30
.byte VERSION_MINOR + 0x30
.byte (VERSION_REVISION / 10) + 0x30
.byte (VERSION_REVISION % 10) + 0x30
.byte 0
.align 2
_Str_RFU_MBOOT::
.asciz "RFU-MBOOT"
.align 2
_Str_Sio32ID::
.asciz "NINTENDOSio32ID_030820"
+6 -6
View File
@@ -16,19 +16,19 @@ EventScript_16D8B0:: @ 816D8B0
waitstate
compare VAR_0x8004, 6
goto_if_ge EventScript_16D941
special IsSelectedMonEgg
special Special_IsSelectedMonEgg
compare VAR_RESULT, 1
goto_if_eq EventScript_16D937
special ScrSpecial_CountPokemonMoves
special Special_GetNumMovesSelectedMonHas
compare VAR_RESULT, 1
goto_if_eq EventScript_16D92A
msgbox gUnknown_8199445
fadescreen FADE_TO_BLACK
special SelectMove
special Special_SelectMove
fadescreen FADE_FROM_BLACK
compare VAR_0x8005, 4
goto_if_eq EventScript_16D8B0
special ScrSpecial_GetPokemonNicknameAndMoveName
special Special_BufferMoveDeleterNicknameAndMove
msgbox gUnknown_8199485, MSGBOX_YESNO
compare VAR_RESULT, YES
goto_if_eq EventScript_16D919
@@ -36,7 +36,7 @@ EventScript_16D8B0:: @ 816D8B0
end
EventScript_16D919:: @ 816D919
special DeleteMonMove
special Special_MoveDeleterForgetMove
playfanfare MUS_ME_WASURE
waitfanfare
msgbox gUnknown_81994B1
@@ -44,7 +44,7 @@ EventScript_16D919:: @ 816D919
end
EventScript_16D92A:: @ 816D92A
special ScrSpecial_GetPokemonNicknameAndMoveName
special Special_BufferMoveDeleterNicknameAndMove
msgbox gUnknown_8199465
release
end
+2 -2
View File
@@ -48,11 +48,11 @@ EventScript_1716A5:: @ 81716A5
EventScript_1716BE:: @ 81716BE
msgbox gUnknown_81A2CC3
special SelectMoveTutorMon
special Special_SelectMoveTutorMon
waitstate
compare VAR_0x8004, 6
goto_if_ge EventScript_17179E
special IsSelectedMonEgg
special Special_IsSelectedMonEgg
compare VAR_RESULT, 1
goto_if_eq EventScript_171790
compare VAR_0x8005, 0
+1 -1
View File
@@ -266,7 +266,7 @@ gUnknown_8463E57:: @ 8463E57
.string "QUIRKY$"
.align 2
gNatureNames:: @ 8463E60 dataptr
gNatureNamePointers:: @ 8463E60 dataptr
.4byte gUnknown_8463DBC
.4byte gUnknown_8463DC2
.4byte gUnknown_8463DC9
-4370
View File
File diff suppressed because it is too large Load Diff
+6 -6
View File
@@ -227,11 +227,11 @@ gSpecials:: @ 815FD60
def_special Special_GetElevatorFloor
def_special nullsub_75
def_special nullsub_75
def_special SelectMoveTutorMon
def_special SelectMove
def_special DeleteMonMove
def_special ScrSpecial_GetPokemonNicknameAndMoveName
def_special ScrSpecial_CountPokemonMoves
def_special Special_SelectMoveTutorMon
def_special Special_SelectMove
def_special Special_MoveDeleterForgetMove
def_special Special_BufferMoveDeleterNicknameAndMove
def_special Special_GetNumMovesSelectedMonHas
def_special DisplayMoveTutorMenu
def_special nullsub_75
def_special nullsub_75
@@ -336,7 +336,7 @@ gSpecials:: @ 815FD60
def_special nullsub_75
def_special nullsub_75
def_special Special_GetSpeciesOfPartySlot_x8004
def_special IsSelectedMonEgg
def_special Special_IsSelectedMonEgg
def_special nullsub_75
def_special nullsub_75
def_special LoadPlayerBag
+28 -47
View File
@@ -2524,161 +2524,142 @@ gUnknown_8418E77:: @ 8418E77
gUnknown_8418E8A:: @ 8418E8A
.string "$"
gUnknown_8418E8B:: @ 8418E8B
gText_RegionMap_Space:: @ 8418E8B
.string " $"
gUnknown_8418E8D:: @ 8418E8D
gText_RegionMap_AButtonGuide:: @ 8418E8D
.string "{A_BUTTON}GUIDE$"
gUnknown_8418E95:: @ 8418E95
gText_RegionMap_AButtonCancel:: @ 8418E95
.string "{A_BUTTON}CANCEL$"
gUnknown_8418E9E:: @ 8418E9E
gText_RegionMap_AButtonCancel2:: @ 8418E9E
.string "{A_BUTTON}CANCEL$"
gUnknown_8418EA7:: @ 8418EA7
gText_RegionMap_AButtonSwitch:: @ 8418EA7
.string "{A_BUTTON}SWITCH$"
gUnknown_8418EB0:: @ 8418EB0
gText_RegionMap_AButtonOK:: @ 8418EB0
.string "{A_BUTTON}OK$"
gUnknown_8418EB5:: @ 8418EB5
gText_RegionMap_DPadMove:: @ 8418EB5
.string "{DPAD_ANY}MOVE$"
gUnknown_8418EBC:: @ 8418EBC
gText_RegionMap_UpDownPick:: @ 8418EBC
.string "{DPAD_UPDOWN}PICK$"
gUnknown_8418EC3:: @ 8418EC3
gText_RegionMap_NoData:: @ 8418EC3
.string "No data$"
gUnknown_8418ECB:: @ 8418ECB
@ Viridian Forest
gText_RegionMap_AreaDesc_ViridianForest::
.string "A deep and sprawling forest that\n"
.string "extends around VIRIDIAN CITY.\n"
.string "A natural maze, many people\n"
.string "become lost inside.$"
gUnknown_8418F3A:: @ 8418F3A
@ Mt. Moon
gText_RegionMap_AreaDesc_MtMoon::
.string "A mystical mountain that is known\n"
.string "for its frequent meteor falls.\n"
.string "The shards of stars that fall\n"
.string "here are known as MOON STONES.$"
gUnknown_8418FB8:: @ 8418FB8
@ Diglett's Cave
gText_RegionMap_AreaDesc_DiglettsCave::
.string "A seemingly plain tunnel that was\n"
.string "dug by wild DIGLETT.\n"
.string "It is famous for connecting\n"
.string "ROUTES 2 and 11.$"
gUnknown_841901C:: @ 841901C
@ Victory Road
gText_RegionMap_AreaDesc_VictoryRoad::
.string "A tunnel situated on ROUTE 23.\n"
.string "It earned its name because it\n"
.string "must be traveled by all TRAINERS\n"
.string "aiming for the top.$"
gUnknown_841908E:: @ 841908E
@ Pokémon Mansion
gText_RegionMap_AreaDesc_PokemonMansion::
.string "A decrepit, burned-down mansion\n"
.string "on CINNABAR ISLAND.\n"
.string "It got its name because a famous\n"
.string "POKéMON researcher lived there.$"
gUnknown_8419103:: @ 8419103
@ Safari Zone
gText_RegionMap_AreaDesc_SafariZone::
.string "An amusement park outside FUCHSIA\n"
.string "CITY where many rare POKéMON can\n"
.string "be observed in the wild.\n"
.string "Catch them in a popular game!$"
gUnknown_841917D:: @ 841917D
@ Rock Tunnel
gText_RegionMap_AreaDesc_RockTunnel::
.string "A naturally formed underground\n"
.string "tunnel. Because it has not been\n"
.string "developed, it is inky dark inside.\n"
.string "A light is needed to get through.$"
gUnknown_8419201:: @ 8419201
@ Seafoam Islands
gText_RegionMap_AreaDesc_SeafoamIslands::
.string "A pair of islands that is situated\n"
.string "on ROUTE 20.\n"
.string "The two islands are shaped the\n"
.string "same, as if they were twins.$"
gUnknown_841926D:: @ 841926D
@ Pokémon Tower
gText_RegionMap_AreaDesc_PokemonTower::
.string "A tower that houses the graves of\n"
.string "countless POKéMON.\n"
.string "Many people visit it daily to pay\n"
.string "their respects to the fallen.$"
gUnknown_84192E2:: @ 84192E2
@ Cerulean Cave
gText_RegionMap_AreaDesc_CeruleanCave::
.string "A mysterious cave that is filled\n"
.string "with terribly tough POKéMON.\n"
.string "It is so dangerous, the POKéMON\n"
.string "LEAGUE is in charge of it.$"
gUnknown_841935B:: @ 841935B
@ Power Plant
gText_RegionMap_AreaDesc_PowerPlant::
.string "A power plant that was abandoned\n"
.string "years ago, though some of the\n"
.string "machines still work. It is infested\n"
.string "with electric POKéMON.$"
gUnknown_84193D5:: @ 84193D5
@ Mt. Ember
gText_RegionMap_AreaDesc_MtEmber::
.string "Supposedly an inactive volcano.\n"
.string "However, there are persistent\n"
.string "reports that the peak blazes\n"
.string "with fire at night.$"
gUnknown_8419444:: @ 8419444
@ Berry Forest
gText_RegionMap_AreaDesc_BerryForest::
.string "A forest on a small islet off the\n"
.string "coast of THREE ISLAND. BERRIES\n"
.string "grow wildly in profusion, quickly\n"
.string "replenishing those that fall off.$"
gUnknown_84194C9:: @ 84194C9
@ Icefall Cave
gText_RegionMap_AreaDesc_IcefallCave::
.string "A cave which is covered by water\n"
.string "and ice on FOUR ISLAND.\n"
.string "It seems like the end of the cave\n"
.string "is connected to the ocean.$"
gUnknown_841953F:: @ 841953F
@ Lost Cave
gText_RegionMap_AreaDesc_LostCave::
.string "A bewildering cave off the coast\n"
.string "of RESORT GORGEOUS.\n"
.string "Some curious thrill seekers have\n"
.string "never emerged from it.$"
gUnknown_84195AC:: @ 84195AC
@ Tanoby Ruins
gText_RegionMap_AreaDesc_TanobyRuins::
.string "An ancient ruin that is rumored to\n"
.string "be home to a peculiar POKéMON.\n"
.string "However, so far, the POKéMON\n"
.string "remains an unconfirmed rumor.$"
gUnknown_8419629:: @ 8419629
@ Altering Cave
gText_RegionMap_AreaDesc_AlteringCave::
.string "This island has been known by this\n"
.string "name since the distant past.\n"
.string "No one today knows where it got\n"
.string "this name, however.$"
gUnknown_841969D:: @ 841969D
@ Pattern Bush
gText_RegionMap_AreaDesc_PatternBush::
.string "A lush and bush-like area. \n"
.string "In it are patterns where no grass\n"
.string "grows. Some study it in the belief\n"
.string "that a secret is concealed.$"
gUnknown_841971A:: @ 841971A
@ Dotted Hole
gText_RegionMap_AreaDesc_DottedHole::
.string "A mysterious, just-discovered\n"
.string "ruin from an ancient time.\n"
.string "It got its name from the six dots\n"
-327
View File
@@ -1,327 +0,0 @@
gMapSecName_PalletTown::
.string "PALLET TOWN$"
gMapSecName_ViridianCity::
.string "VIRIDIAN CITY$"
gMapSecName_PewterCity::
.string "PEWTER CITY$"
gMapSecName_CeruleanCity::
.string "CERULEAN CITY$"
gMapSecName_LavenderTown::
.string "LAVENDER TOWN$"
gMapSecName_VermilionCity::
.string "VERMILION CITY$"
gMapSecName_CeladonCity::
.string "CELADON CITY$"
gMapSecName_FuchsiaCity::
.string "FUCHSIA CITY$"
gMapSecName_CinnabarIsland::
.string "CINNABAR ISLAND$"
gMapSecName_IndigoPlateau::
.string "INDIGO PLATEAU$"
gMapSecName_SaffronCity::
.string "SAFFRON CITY$"
gMapSecName_Route4::
.string "ROUTE 4$"
gMapSecName_Route10::
.string "ROUTE 10$"
gMapSecName_Route1::
.string "ROUTE 1$"
gMapSecName_Route2::
.string "ROUTE 2$"
gMapSecName_Route3::
.string "ROUTE 3$"
gMapSecName_Route4_2::
.string "ROUTE 4$"
gMapSecName_Route5::
.string "ROUTE 5$"
gMapSecName_Route6::
.string "ROUTE 6$"
gMapSecName_Route7::
.string "ROUTE 7$"
gMapSecName_Route8::
.string "ROUTE 8$"
gMapSecName_Route9::
.string "ROUTE 9$"
gMapSecName_Route10_2::
.string "ROUTE 10$"
gMapSecName_Route11::
.string "ROUTE 11$"
gMapSecName_Route12::
.string "ROUTE 12$"
gMapSecName_Route13::
.string "ROUTE 13$"
gMapSecName_Route14::
.string "ROUTE 14$"
gMapSecName_Route15::
.string "ROUTE 15$"
gMapSecName_Route16::
.string "ROUTE 16$"
gMapSecName_Route17::
.string "ROUTE 17$"
gMapSecName_Route18::
.string "ROUTE 18$"
gMapSecName_Route19::
.string "ROUTE 19$"
gMapSecName_Route20::
.string "ROUTE 20$"
gMapSecName_Route21::
.string "ROUTE 21$"
gMapSecName_Route22::
.string "ROUTE 22$"
gMapSecName_Route23::
.string "ROUTE 23$"
gMapSecName_Route24::
.string "ROUTE 24$"
gMapSecName_Route25::
.string "ROUTE 25$"
gMapSecName_ViridianForest::
.string "VIRIDIAN FOREST$"
gMapSecName_MtMoon::
.string "MT. MOON$"
gMapSecName_SSAnne::
.string "S.S. ANNE$"
gMapSecName_UndergroundPath::
.string "UNDERGROUND PATH$"
gMapSecName_UndergroundPath_2::
.string "UNDERGROUND PATH$"
gMapSecName_DiglettsCave::
.string "DIGLETT'S CAVE$"
gMapSecName_VictoryRoad::
.string "VICTORY ROAD$"
gMapSecName_RocketHideout::
.string "ROCKET HIDEOUT$"
gMapSecName_SilphCo::
.string "SILPH CO.$"
gMapSecName_PokemonMansion::
.string "POKéMON MANSION$"
gMapSecName_SafariZone::
.string "SAFARI ZONE$"
gMapSecName_PokemonLeague::
.string "POKéMON LEAGUE$"
gMapSecName_RockTunnel::
.string "ROCK TUNNEL$"
gMapSecName_SeafoamIslands::
.string "SEAFOAM ISLANDS$"
gMapSecName_PokemonTower::
.string "POKéMON TOWER$"
gMapSecName_CeruleanCave::
.string "CERULEAN CAVE$"
gMapSecName_PowerPlant::
.string "POWER PLANT$"
gMapSecName_OneIsland::
.string "ONE ISLAND$"
gMapSecName_TwoIsland::
.string "TWO ISLAND$"
gMapSecName_ThreeIsland::
.string "THREE ISLAND$"
gMapSecName_FourIsland::
.string "FOUR ISLAND$"
gMapSecName_FiveIsland::
.string "FIVE ISLAND$"
gMapSecName_SevenIsland::
.string "SEVEN ISLAND$"
gMapSecName_SixIsland::
.string "SIX ISLAND$"
gMapSecName_KindleRoad::
.string "KINDLE ROAD$"
gMapSecName_TreasureBeach::
.string "TREASURE BEACH$"
gMapSecName_CapeBrink::
.string "CAPE BRINK$"
gMapSecName_BondBridge::
.string "BOND BRIDGE$"
gMapSecName_ThreeIslePort::
.string "THREE ISLE PORT$"
gMapSecName_SeviiIsle6::
.string "SEVII ISLE 6$"
gMapSecName_SeviiIsle7::
.string "SEVII ISLE 7$"
gMapSecName_SeviiIsle8::
.string "SEVII ISLE 8$"
gMapSecName_SeviiIsle9::
.string "SEVII ISLE 9$"
gMapSecName_ResortGorgeous::
.string "RESORT GORGEOUS$"
gMapSecName_WaterLabyrinth::
.string "WATER LABYRINTH$"
gMapSecName_FiveIsleMeadow::
.string "FIVE ISLE MEADOW$"
gMapSecName_MemorialPillar::
.string "MEMORIAL PILLAR$"
gMapSecName_OutcastIsland::
.string "OUTCAST ISLAND$"
gMapSecName_GreenPath::
.string "GREEN PATH$"
gMapSecName_WaterPath::
.string "WATER PATH$"
gMapSecName_RuinValley::
.string "RUIN VALLEY$"
gMapSecName_TrainerTower::
.string "TRAINER TOWER$"
gMapSecName_CanyonEntrance::
.string "CANYON ENTRANCE$"
gMapSecName_SevaultCanyon::
.string "SEVAULT CANYON$"
gMapSecName_TanobyRuins::
.string "TANOBY RUINS$"
gMapSecName_SeviiIsle22::
.string "SEVII ISLE 22$"
gMapSecName_SeviiIsle23::
.string "SEVII ISLE 23$"
gMapSecName_SeviiIsle24::
.string "SEVII ISLE 24$"
gMapSecName_NavelRock::
.string "NAVEL ROCK$"
gMapSecName_MtEmber::
.string "MT. EMBER$"
gMapSecName_BerryForest::
.string "BERRY FOREST$"
gMapSecName_IcefallCave::
.string "ICEFALL CAVE$"
gMapSecName_RocketWarehouse::
.string "ROCKET WAREHOUSE$"
gMapSecName_TrainerTower_2::
.string "TRAINER TOWER$"
gMapSecName_DottedHole::
.string "DOTTED HOLE$"
gMapSecName_LostCave::
.string "LOST CAVE$"
gMapSecName_PatternBush::
.string "PATTERN BUSH$"
gMapSecName_AlteringCave::
.string "ALTERING CAVE$"
gMapSecName_TanobyChambers::
.string "TANOBY CHAMBERS$"
gMapSecName_ThreeIslePath::
.string "THREE ISLE PATH$"
gMapSecName_TanobyKey::
.string "TANOBY KEY$"
gMapSecName_BirthIsland::
.string "BIRTH ISLAND$"
gMapSecName_MoneanChamber::
.string "MONEAN CHAMBER$"
gMapSecName_LiptooChamber::
.string "LIPTOO CHAMBER$"
gMapSecName_WeepthChamber::
.string "WEEPTH CHAMBER$"
gMapSecName_DilfordChamber::
.string "DILFORD CHAMBER$"
gMapSecName_ScufibChamber::
.string "SCUFIB CHAMBER$"
gMapSecName_RixyChamber::
.string "RIXY CHAMBER$"
gMapSecName_ViapoisChamber::
.string "VIAPOIS CHAMBER$"
gMapSecName_EmberSpa::
.string "EMBER SPA$"
gMapSecName_CeladonDept::
.string "CELADON DEPT.$"
+2 -2
View File
@@ -79,8 +79,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
void sub_80496C0(u8 spriteId, struct Pokemon *mon);
void sub_804981C(u8 spriteId, u8);
void UpdateNickInHealthbox(u8 spriteId, struct Pokemon *mon);
void TryAddPokeballIconToHealthbox(u8 spriteId, u8);
s32 MoveBattleBar(u8 battler, u8 healthboxSpriteId, u8 whichBar, u8 arg3);
#endif // GUARD_BATTLE_INTERFACE_H
+3
View File
@@ -248,4 +248,7 @@ extern const u8 gUnknown_83FE85C[];
extern const u8 gUnknown_83FE860[];
extern const u8 gUnknown_83FE864[];
extern const u8 gText_SafariBalls[];
extern const u8 gText_HighlightRed_Left[];
#endif // GUARD_BATTLE_MESSAGE_H
+6
View File
@@ -89,6 +89,9 @@
#define MAPSEC_SKY_PILLAR 0x55
#define MAPSEC_SECRET_BASE 0x56
#define MAPSEC_DYNAMIC 0x57
#define MAPSECS_KANTO 0x58
#define MAPSEC_PALLET_TOWN 0x58
#define MAPSEC_VIRIDIAN_CITY 0x59
#define MAPSEC_PEWTER_CITY 0x5A
@@ -144,6 +147,9 @@
#define MAPSEC_POKEMON_TOWER 0x8C
#define MAPSEC_CERULEAN_CAVE 0x8D
#define MAPSEC_POWER_PLANT 0x8E
#define MAPSECS_SEVII_123 0x8F
#define MAPSEC_ONE_ISLAND 0x8F
#define MAPSEC_TWO_ISLAND 0x90
#define MAPSEC_THREE_ISLAND 0x91
+2 -2
View File
@@ -1,4 +1,4 @@
#ifndef GUARD_CONSTANTS_TRADE_H
#ifndef GUARD_CONSTANTS_TRADE_H
#define GUARD_CONSTANTS_TRADE_H
// TODO: document trade.c and trade_scene.c with corresponding macros
@@ -115,4 +115,4 @@
#define CANT_REGISTER_MON 1
#define CANT_REGISTER_EGG 2
#endif //GUARD_CONSTANTS_TRADE_H
#endif // GUARD_CONSTANTS_TRADE_H
+1
View File
@@ -23,5 +23,6 @@ void sub_80853CC(u8 a0);
void sub_8083598(u8 a0);
void sub_8083A5C(struct Sprite * sprite, u8 spriteId);
u8 sub_8083970(u16 species, s16 x, s16 y, bool8 unused);
void sub_80842C8(void);
#endif //GUARD_FIELD_EFFECTS_H
+7 -1
View File
@@ -137,6 +137,8 @@
#define REG_OFFSET_DMA3CNT_H 0xde
#define REG_OFFSET_TMCNT 0x100
#define REG_OFFSET_TMCNT_L 0x100
#define REG_OFFSET_TMCNT_H 0x102
#define REG_OFFSET_TM0CNT 0x100
#define REG_OFFSET_TM0CNT_L 0x100
#define REG_OFFSET_TM0CNT_H 0x102
@@ -298,6 +300,8 @@
#define REG_ADDR_DMA3CNT_H (REG_BASE + REG_OFFSET_DMA3CNT_H)
#define REG_ADDR_TMCNT (REG_BASE + REG_OFFSET_TMCNT)
#define REG_ADDR_TMCNT_L (REG_BASE + REG_OFFSET_TMCNT_L)
#define REG_ADDR_TMCNT_H (REG_BASE + REG_OFFSET_TMCNT_H)
#define REG_ADDR_TM0CNT (REG_BASE + REG_OFFSET_TM0CNT)
#define REG_ADDR_TM0CNT_L (REG_BASE + REG_OFFSET_TM0CNT_L)
#define REG_ADDR_TM0CNT_H (REG_BASE + REG_OFFSET_TM0CNT_H)
@@ -457,7 +461,9 @@
#define REG_DMA3CNT_L (*(vu16 *)REG_ADDR_DMA3CNT_L)
#define REG_DMA3CNT_H (*(vu16 *)REG_ADDR_DMA3CNT_H)
#define REG_TMCNT(n) (*(vu16 *)(REG_ADDR_TMCNT + ((n) * 4)))
#define REG_TMCNT(n) (*(vu32 *)(REG_ADDR_TMCNT + ((n) * 4)))
#define REG_TMCNT_L(n) (*(vu16 *)(REG_ADDR_TMCNT_L + ((n) * 4)))
#define REG_TMCNT_H(n) (*(vu16 *)(REG_ADDR_TMCNT_H + ((n) * 4)))
#define REG_TM0CNT (*(vu32 *)REG_ADDR_TM0CNT)
#define REG_TM0CNT_L (*(vu16 *)REG_ADDR_TM0CNT_L)
#define REG_TM0CNT_H (*(vu16 *)REG_ADDR_TM0CNT_H)
+11 -1
View File
@@ -105,7 +105,7 @@
} \
}
#define DmaClearLarge(dmaNum, dest, size, block, bit) \
#define DmaClearLarge(dmaNum, dest, size, block, bit) \
{ \
u32 _size = size; \
while (1) \
@@ -170,4 +170,14 @@
#define DmaFill16Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 16)
#define DmaFill32Defvars(dmaNum, value, dest, size) DmaFillDefvars(dmaNum, value, dest, size, 32)
#define IntrEnable(flags) \
{ \
u16 imeTemp; \
\
imeTemp = REG_IME; \
REG_IME = 0; \
REG_IE |= flags; \
REG_IME = imeTemp; \
}
#endif // GUARD_GBA_MACRO_H
+2
View File
@@ -45,4 +45,6 @@ void RLUnCompVram(const void *src, void *dest);
int MultiBoot(struct MultiBootParam *mp);
s32 Div(s32 num, s32 denom);
#endif // GUARD_GBA_SYSCALL_H
+7
View File
@@ -4854,4 +4854,11 @@ extern const u32 gFireRedTrainerCard_Gfx[];
extern const u16 gEmeraldTrainerCard_Pal[];
extern const u32 gEmeraldTrainerCard_Gfx[];
// battle_interface
extern const u32 gFile_graphics_battle_interface_ball_status_bar_sheet[];
extern const u8 gHealthboxElementsGfxTable[][32];
extern const u16 gBattleInterface_BallStatusBarPal[];
extern const u16 gBattleInterface_BallDisplayPal[];
extern const u16 gUnknown_8D12404[];
#endif //GUARD_GRAPHICS_H
+53
View File
@@ -0,0 +1,53 @@
#ifndef GUARD_IMAGE_PROCESSING_EFFECTS_H
#define GUARD_IMAGE_PROCESSING_EFFECTS_H
enum
{
IMAGE_EFFECT_POINTILLISM = 2,
IMAGE_EFFECT_GRAYSCALE_LIGHT = 6,
IMAGE_EFFECT_BLUR = 8,
IMAGE_EFFECT_OUTLINE_COLORED = 9,
IMAGE_EFFECT_INVERT_BLACK_WHITE = 10,
IMAGE_EFFECT_THICK_BLACK_WHITE = 11,
IMAGE_EFFECT_SHIMMER = 13,
IMAGE_EFFECT_OUTLINE = 30,
IMAGE_EFFECT_INVERT = 31,
IMAGE_EFFECT_BLUR_RIGHT = 32,
IMAGE_EFFECT_BLUR_DOWN = 33,
IMAGE_EFFECT_CHARCOAL = 36,
};
enum
{
QUANTIZE_EFFECT_STANDARD,
QUANTIZE_EFFECT_STANDARD_LIMITED_COLORS,
QUANTIZE_EFFECT_PRIMARY_COLORS,
QUANTIZE_EFFECT_GRAYSCALE,
QUANTIZE_EFFECT_GRAYSCALE_SMALL,
QUANTIZE_EFFECT_BLACK_WHITE,
};
struct ImageProcessingContext
{
u8 effect;
void *canvasPixels;
u16 *canvasPalette;
u8 fillerC[0x4];
void *dest;
u16 quantizeEffect;
u16 var_16;
u8 paletteStart;
u8 columnStart;
u8 rowStart;
u8 columnEnd;
u8 rowEnd;
u8 canvasWidth;
u8 canvasHeight;
u8 personality;
};
void ApplyImageProcessingEffects(struct ImageProcessingContext *);
void ApplyImageProcessingQuantization(struct ImageProcessingContext *);
void ConvertImageProcessingToGBA(struct ImageProcessingContext *);
#endif
+1
View File
@@ -2,5 +2,6 @@
#define GUARD_INTRO_H
void sub_80EC864(void);
void c2_copyright_1(void);
#endif //GUARD_INTRO_H
+603 -187
View File
@@ -1,58 +1,309 @@
#ifndef GUARD_LIBRFU_H
#define GUARD_LIBRFU_H
#include "global.h"
#include "main.h"
enum
/* TODOs:
* - split files
* - documentation
* - decompile librfu_intr.s once arm support is back again
(for internal structs not documented in SDK)
* - check if any field needs to be volatile
* - check if field names make sense
*/
// --------------------------------------------------------------------------
//
// Restrictions When Using RFU
//
// --------------------------------------------------------------------------
/*
The following restrictions apply when using RFU.
<Restrictions for Direct Sound>
(a) The timer for Sound DMA uses only 0
(b) The prescaler for the timer count for the Sound DMA uses 59.5 ns.
(c) The sound sampling rate is Max36.314KHz.
<Restrictions for H-DMA or DMA started with V-Blank>
These types of DMA can be operated on a maximum CPU cycle of 42 cycles.
Calculate the number of the transferable DMA count based on this 42 cycles and the access cycles of the destination and source.
For example, if both the CPU internal RAM --> VRAM have a one cycle access, then a 21 count DMA can occur.
If RFU is used outside of these restrictions, problems, such as the loss of data caused by the failure of the AGB, as a clock slave,
to notify that data has been received from the RFU, will occur.
When this problem occurs, the REQ callback will send a REQ_commandID=ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ notification.
(When using Link Manager, the LMAN call back will send a LMAN_msg=LMAN_MSG_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA notification.)
*/
// REQ-COMMAND (STWI) ID CODE LIST
// REQ Command ID returned by the REQ callback
#define ID_RESET_REQ 0x0010
#define ID_LINK_STATUS_REQ 0x0011
#define ID_VERSION_STATUS_REQ 0x0012 // not defined in SDK header
#define ID_SYSTEM_STATUS_REQ 0x0013
#define ID_SLOT_STATUS_REQ 0x0014 // not defined in SDK header
#define ID_CONFIG_STATUS_REQ 0x0015 // not defined in SDK header
#define ID_GAME_CONFIG_REQ 0x0016
#define ID_SYSTEM_CONFIG_REQ 0x0017
#define ID_SC_START_REQ 0x0019
#define ID_SC_POLL_REQ 0x001a
#define ID_SC_END_REQ 0x001b
#define ID_SP_START_REQ 0x001c
#define ID_SP_POLL_REQ 0x001d
#define ID_SP_END_REQ 0x001e
#define ID_CP_START_REQ 0x001f
#define ID_CP_POLL_REQ 0x0020
#define ID_CP_END_REQ 0x0021
#define ID_DATA_TX_REQ 0x0024
#define ID_DATA_TX_AND_CHANGE_REQ 0x0025
#define ID_DATA_RX_REQ 0x0026
#define ID_MS_CHANGE_REQ 0x0027 // When returned by the REQ callback, this ID indicates that execution of rfu_REQ_changeMasterSlave has finished.
// This ID is returned by both the REQ callback and the MSC callback.
// When returned by the MSC callback, this is notification that after the AGB has been made into the clock slave, the MC_Timer expired and the RFU returned the AGB to be the clock master.
#define ID_DISCONNECT_REQ 0x0030
#define ID_TEST_MODE_REQ 0x0031 // not defined in SDK header
#define ID_CPR_START_REQ 0x0032
#define ID_CPR_POLL_REQ 0x0033
#define ID_CPR_END_REQ 0x0034
#define ID_UNK35_REQ 0x0035 // not defined in SDK header
#define ID_RESUME_RETRANSMIT_AND_CHANGE_REQ 0x0037
#define ID_STOP_MODE_REQ 0x003d
#define ID_CLOCK_SLAVE_MS_CHANGE_ERROR_BY_DMA_REQ 0x00ff // When the AGB is the clock slave, the RFU generates an informational notice, and an automatically started DMA, such as HDMA, is generated at the instant the AGB is being returned as the clock master. This ID is notified by a REQ callback when the exchange of this information (REQ command) fails.
// REQ Command ID returned by the MSC callback
#define ID_DISCONNECTED_AND_CHANGE_REQ 0x0029
#define ID_DATA_READY_AND_CHANGE_REQ 0x0028
#define ID_DRAC_REQ_WITH_ACK_FLAG 0x0128
// --------------------------------------------------------------------------
//
// Data Definitions
//
// --------------------------------------------------------------------------
#define RFU_ID 0x00008001 // ID number of AGB-RFU device: ID returned by execution of rfu_REQBN_softReset_and_checkID.
#define RFU_MBOOT_DOWNLOADER_SERIAL_NO 0x0000 // The game serial number of the multi-boot downloader (programs that boot without a Game Pak)
#define RFU_API_BUFF_SIZE_RAM 0x0e8c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in RAM)
#define RFU_API_BUFF_SIZE_ROM 0x052c // Necessary size for buffer specified by rfu_initializeAPI (fast communication version that operates the library SIO interrupt routines in ROM)
#define RFU_CHILD_MAX 4 // Maximum number of slaves that can be connected to one parent device
#define RFU_GAME_NAME_LENGTH 13 // Possible length of game name set by rfu_REQB_configGameData
#define RFU_USER_NAME_LENGTH 8 // Possible length of user name set by rfu_REQB_configGameData
#define RFU_H_DMA_MAX_CPU_CYCLE 42 // Maximum number of CPU cycles for H-DMA or DMA that starts with V-Blank that can operate when using RFU
// Value to determine the level of the icon that displays the link strength of the wireless status (value of rfuLinkStatus->strength[0-3])
#define RFU_LINK_ICON_LEVEL4_MAX 255 // 90% -100% (If the value is betwen 229 and 255, the icon level is 4)
#define RFU_LINK_ICON_LEVEL4_MIN 229
#define RFU_LINK_ICON_LEVEL3_MAX 228 // 50% - 89% (If the value is betwen 127 and 228, the icon level is 3)
#define RFU_LINK_ICON_LEVEL3_MIN 127
#define RFU_LINK_ICON_LEVEL2_MAX 126 // 10% - 49% (If the value is betwen 25 and 126, the icon level is 2)
#define RFU_LINK_ICON_LEVEL2_MIN 25
#define RFU_LINK_ICON_LEVEL1_MAX 24 // 0% - 9% (If the value is betwen 0 and 24, the icon level is 1)
#define RFU_LINK_ICON_LEVEL1_MIN 0
// *******************************************************
// Definition Data for Arguments Used in Library Functions
// *******************************************************
// Specified by u16 mbootFlag in rfu_REQ_configGameData
#define RFU_MBOOT_FLAG 0x01 // Enabling this flag, allows connection to a multi-boot program.
// AvailSlot (number of slots available for connection) used in u16 availSlotFlag in rfu_REQ_configSystem
#define AVAIL_SLOT4 0x0000
#define AVAIL_SLOT3 0x0001
#define AVAIL_SLOT2 0x0002
#define AVAIL_SLOT1 0x0003
// u8 connTypeFlag specified by rfu_setRecvBuffer
#define TYPE_UNI 0x10 // UNI-type
#define TYPE_NI 0x20 // NI-type
// u8 connTypeFlag specified by rfu_clearSlot
#define TYPE_UNI_SEND 0x01 // UNI-type send
#define TYPE_UNI_RECV 0x02 // UNI-type receive
#define TYPE_NI_SEND 0x04 // NI-type send
#define TYPE_NI_RECV 0x08 // NI-type receive
// *******************************************************
// Definition Data Returned by Return Values for Library Functions
// *******************************************************
// The function doesn't have return value.
// Value of u8 *status for rfu_REQ_pollConnectParent (Connection Trial Status)
// #define CP_STATUS_DONE 0x00 // Connection successful
// #define CP_STATUS_IN_PROCESS 0x01 // Connecting
// #define CP_STATUS_SLOT_CLOSED 0x02 // Parent device is not in connection mode with child device
// #define CP_STATUS_DISCONNECTED 0x03 // Disconnected by parent device while connecting
// #define CP_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
// The function doesn't exist.
// Value of u8 *status argument for rfu_REQ_pollRecoveryConnect (Link Restore Status)
// #define RC_STATUS_DONE 0x00 // Connection restore successful
// #define RC_STATUS_FAILED 0x01 // Connection restore failure (meaningless to try anymore)
// #define RC_STATUS_SEARCHING_PARENT 0x02 // Searching for parent device
// #define RC_STATUS_UNKNOWN 0xff // Cannot read status due to REQ-API execution error
// Value of u8 *linkLossReason argument for rfu_REQBN_watchLink (Reason for Link Loss)
#define REASON_DISCONNECTED 0x00 // State of complete disconnection with rfuLL_disconnect and no possibility of restoring the link (can detect only child device)
#define REASON_LINK_LOSS 0x01 // State of link loss that allows for the possibility for the link to be restored
// *******************************************************
// Definition Data Returned with Return Values for Library Functions
// *******************************************************
// Value returned by rfu_getMasterSlave
#define AGB_CLK_SLAVE 0 // AGB clock slave
#define AGB_CLK_MASTER 1 // AGB clock master
// *******************************************************
// Error Code Group for Library Functions
// *******************************************************
// Error codes returned by u16 REQ_result with a REQ callback when a REQ-API function is executed
#define ERR_REQ_CMD 0x0000
#define ERR_REQ_CMD_CLOCK_DRIFT (ERR_REQ_CMD | 0x0001) // Clock drift occurs when a REQ command is sent
#define ERR_REQ_CMD_SENDING (ERR_REQ_CMD | 0x0002) // The next command cannot be issued because a REQ command is being sent
#define ERR_REQ_CMD_ACK_REJECTION (ERR_REQ_CMD | 0x0003) // The REQ command was refused when issued
#define ERR_REQ_CMD_CLOCK_SLAVE (ERR_REQ_CMD | 0x0004) // Issuing the REQ command was attempted but failed because the AGB is the clock slave
#define ERR_REQ_CMD_IME_DISABLE (ERR_REQ_CMD | 0x0006) // Issuing the REQ command was attempted but failed because the IME register is 0
#define ERR_PID_NOT_FOUND 0x0100 // The specified PID does not exist in the gRfuLinkStatus->partner[0-3].id list
// Error code returned by the return value of rfu_initializeAPI
#define ERR_RFU_API_BUFF_SIZE 0x0001
#define ERR_RFU_API_BUFF_ADR 0x0002
// Error codes returned by return values for rfu_REQBN_softReset_and_checkID
#define ERR_ID_CHECK_IME_DISABLE 0xffffffff // ID check could not be executed because REG_IME=0 when executing rfu_REQBN_softReset_and_checkID
// Error codes returned by rfu_getConnectParentStatus and rfu_CHILD_getConnectRecoveryStatus
#define ERR_REQ_CMD_ID (ERR_REQ_CMD | 0x0010) // A required REQ command was not executed within this function execution
// Error codes returned by rfu_NI_setSendData, rfu_UNI_setSendData, and rfu_NI_CHILD_setSendGameName
#define ERR_MODE 0x0300
#define ERR_MODE_NOT_PARENT (ERR_MODE | 0x0000) // not in SDK
#define ERR_MODE_NOT_CONNECTED (ERR_MODE | 0x0001) // RFU is not in connection mode (parent or child)
#define ERR_SLOT 0x0400
#define ERR_SLOT_NO (ERR_SLOT | 0x0000) // The specified slot number is not right
#define ERR_SLOT_NOT_CONNECTED (ERR_SLOT | 0x0001) // The specified slot is not connected
#define ERR_SLOT_BUSY (ERR_SLOT | 0x0002) // The specified slot is already communicating
#define ERR_SLOT_NOT_SENDING (ERR_SLOT | 0x0003) // The specified slot is not currently sending (Note: This is returned by rfu_UNI_re_setSendData)
#define ERR_SLOT_TARGET (ERR_SLOT | 0x0004) // The specified target slot is not right
#define ERR_SUBFRAME_SIZE 0x0500 // The specified subframe size is either larger than the remaining communication frame size or smaller than the link layer subframe header size
// Error code returned by rfu_clearSlot, rfu_setRecvBuffer, and rfu_changeSendTarget
#define ERR_COMM_TYPE 0x0600 // The specified communication format is not right
// Error code returned by rfu_REQ_recvData (when receiving NI-type or UNI-type data)
#define ERR_DATA_RECV 0x0700 // Error notification is issued in the following format.
// "ERR_DATA_RECV | (slot number issuing error with 0x0010<<UNI) | (slot number issuing error with 0x0001<<NI)"
// The actual error code is stored in gRfuSlotStatusNI or gRfuSlotStatusUNI[x]->recv.errorCode.
// Error code during NI-type communication (code entered into gRfuSlotStatusNI[x]->recv.errorCode)
#define ERR_RECV_BUFF_OVER (ERR_DATA_RECV | 0x0001) // The receive data size is larger than the receive buffer (Note: This error is used for both NI and UNI)
#define ERR_RECV_REPLY_SUBFRAME_SIZE (ERR_DATA_RECV | 0x0002) // All frames are already in use by other communications, and a subframe for reception response could not be secured
// Error code during UNI-type communication (code entered into gRfuSlotStatusUNI[x]->recv.errorCode)
#define ERR_RECV_DATA_OVERWRITED (ERR_DATA_RECV | 0x0008) // Received new data when gRfuSlotStatusUNI[x]->recv.newDataFlag=1
// not in SDK header
#define ERR_RECV_UNK (ERR_DATA_RECV | 0x0001 | 0x0008)
// *******************************************************
// Definition Data Used by Global Variables in the Library
// *******************************************************
// gRfuLinkStatus-------------------------------------------
// Connection status (refer to gRfuLinkStatus->parentChild)
#define MODE_NEUTRAL 0xff // Initialization
#define MODE_CHILD 0x00 // Child
#define MODE_PARENT 0x01 // Parent
// gRfuSlotStatusNI,UNI-----------------------------------
// Definition data for NI-(Numbered Information) and UNI-(Un-Numbered Information) type communication
// Definition data common to NI- and UNI-type communication
#define LLF_P_SIZE 87 // Maximum link layer communication frame size for the Parent (Maximum number of bytes per transmission)
#define LLF_C_SIZE 16 // " " for the Child
#define LLSF_P_HEADER_SIZE 3 // Header size used by one link layer subframe (NI or UNI frame) for the Parent
#define LLSF_C_HEADER_SIZE 2 // " " for the Child
// Link Layer Communication Code
#define LCOM_NULL 0x0000
#define LCOM_NI_START 0x0001
#define LCOM_NI 0x0002
#define LCOM_NI_END 0x0003
#define LCOM_UNI 0x0004
// Flag for Slot Status Data
#define SLOT_BUSY_FLAG 0x8000 // Slot in use
#define SLOT_SEND_FLAG 0x0020 // Send
#define SLOT_RECV_FLAG 0x0040 // Receive
// NI- and UNI-type shared slot stand-by data (same state as gRfuSlotStatusNI[x]->send or ->recv.state or gRfuSlotStatusUNI)
#define SLOT_STATE_READY 0x0000 // Slot initialization
// Status data for NI-type communication (gRfuSlotStatusNI[x]->send or ->recv.state)
#define SLOT_STATE_SEND_START (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_START) // Start transmission
#define SLOT_STATE_SENDING (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI) // Transmitting
#define SLOT_STATE_SEND_LAST (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NI_END) // Verify transmission end
#define SLOT_STATE_SEND_NULL (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_NULL) // Send NULL subframe to notify end of transmission
#define SLOT_STATE_SEND_SUCCESS ( SLOT_SEND_FLAG | 0x006) // Transmission successful
#define SLOT_STATE_SEND_FAILED ( SLOT_SEND_FLAG | 0x007) // Transmission failed
// Distinction of slot where transmission succeeded/failed compares gRfuSlotStatusNI[x]->send.bmSlot and same bmSlot_org
#define SLOT_STATE_RECV_START (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_START) // Start reception
#define SLOT_STATE_RECEIVING (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI) // Receiving
#define SLOT_STATE_RECV_LAST (SLOT_BUSY_FLAG | SLOT_RECV_FLAG | LCOM_NI_END) // Verify reception end
#define SLOT_STATE_RECV_SUCCESS ( SLOT_RECV_FLAG | 0x006) // Reception successful
#define SLOT_STATE_RECV_FAILED ( SLOT_RECV_FLAG | 0x007) // Reception failed
#define SLOT_STATE_RECV_SUCCESS_AND_SENDSIDE_UNKNOWN (SLOT_RECV_FLAG | 0x008) // The data was received successful, but because the end of the communication was incomplete, whether the transmission side status is successful or failed is unknown
#define SLOT_STATE_RECV_IGNORE ( SLOT_RECV_FLAG | 0x009) // Ignore reception (refer to gRfuSlotStatusNI[x]->recv.errorCode for reason for ignoring)
// Status data for UNI-type communication (refer to gRfuSlotStatusUNI[x]->send.state)
#define SLOT_STATE_SEND_UNI (SLOT_BUSY_FLAG | SLOT_SEND_FLAG | LCOM_UNI) // Transmitting
// TODO: move the 2 structs to some other header as they're declared by GF
struct UnkLinkRfuStruct_02022B14Substruct
{
RFU_RESET = 0x10,
RFU_LINK_STATUS,
RFU_VERSION_STATUS,
RFU_SYSTEM_STATUS,
RFU_SLOT_STATUS,
RFU_CONFIG_STATUS,
RFU_GAME_CONFIG,
RFU_SYSTEM_CONFIG,
RFU_UNK18,
RFU_SC_START,
RFU_SC_POLLING,
RFU_SC_END,
RFU_SP_START,
RFU_SP_POLLING,
RFU_SP_END,
RFU_CP_START,
RFU_CP_POLLING,
RFU_CP_END,
RFU_UNK22,
RFU_UNK23,
RFU_DATA_TX,
RFU_DATA_TX_AND_CHANGE,
RFU_DATA_RX,
RFU_MS_CHANGE,
RFU_DATA_READY_AND_CHANGE,
RFU_DISCONNECTED_AND_CHANGE,
RFU_UNK2A,
RFU_UNK2B,
RFU_UNK2C,
RFU_UNK2D,
RFU_UNK2E,
RFU_UNK2F,
RFU_DISCONNECT,
RFU_TEST_MODE,
RFU_CPR_START,
RFU_CPR_POLLING,
RFU_CPR_END,
RFU_UNK35,
RFU_UNK36,
RFU_RESUME_RETRANSMIT_AND_CHANGE,
RFU_UNK38,
RFU_UNK39,
RFU_UNK3A,
RFU_UNK3B,
RFU_UNK3C,
RFU_STOP_MODE, //3D
u16 unk_00_0:4;
u16 unk_00_4:1;
u16 unk_00_5:1;
u16 unk_00_6:1;
u16 isChampion:1;
u16 hasNationalDex:1;
u16 gameClear:1;
u16 unk_01_2:4;
u16 unk_01_6:2;
u8 playerTrainerId[2];
};
struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14
{
struct UnkLinkRfuStruct_02022B14Substruct unk_00;
u8 unk_04[4];
u16 species:10;
u16 type:6;
u8 unk_0a_0:7;
u8 unk_0a_7:1;
u8 playerGender:1;
u8 level:7;
u8 unk_0c;
};
// the following structs are not documented in SDK
struct RfuPacket8
{
u8 data[0x74];
@@ -70,199 +321,364 @@ union RfuPacket
struct RfuPacket8 rfuPacket8;
};
struct UnkLinkRfuStruct_02022B14Substruct
struct STWIStatus
{
u16 unk_00_0:4;
u16 unk_00_4:1;
u16 unk_00_5:1;
u16 unk_00_6:1;
u16 unk_00_7:1;
u16 unk_01_0:1;
u16 unk_01_1:1;
u16 unk_01_2:4;
u16 unk_01_6:2;
u8 playerTrainerId[2];
};
struct __attribute__((packed, aligned(2))) UnkLinkRfuStruct_02022B14
{
struct UnkLinkRfuStruct_02022B14Substruct unk_00;
u8 unk_04[4];
u16 species:10;
u16 type:6;
u8 unk_0a_0:7;
u8 unk_0a_7:1;
u8 playerGender:1;
u8 unk_0b_1:7;
u8 unk_0c;
};
struct RfuStruct
{
vs32 unk_0;
u8 txParams;
u8 unk_5;
u8 activeCommand;
u8 unk_7;
u8 unk_8;
u8 unk_9;
vs32 state;
u8 reqLength;
u8 reqNext;
u8 reqActiveCommand;
u8 ackLength;
u8 ackNext;
u8 ackActiveCommand;
u8 timerSelect;
u8 unk_b;
int timerState;
u32 timerState; // this field is s32 in emerald
vu8 timerActive;
u8 unk_11;
vu16 unk_12;
vu16 error;
vu8 msMode;
u8 unk_15;
u8 recoveryCount;
u8 unk_16;
u8 unk_17;
void (*callbackM)();
void (*callbackS)();
u32 callbackID;
union RfuPacket * txPacket;
union RfuPacket * rxPacket;
void (*callbackS)(u16);
void (*unk_20)(void);
union RfuPacket *txPacket;
union RfuPacket *rxPacket;
vu8 unk_2c;
u8 padding[3];
};
// This struct is used as u8 array in SDK.
struct RfuIntrStruct
{
u8 rxPacketAlloc[0x74];
u8 txPacketAlloc[0x74];
u8 block1[0x960];
u8 block2[0x30];
union RfuPacket rxPacketAlloc;
union RfuPacket txPacketAlloc;
u8 block1[0x960]; // size of librfu_intr.s binary
struct STWIStatus block2;
};
struct RfuUnk1
// Data Structure for Transmitting UNI-Type Data
struct UNISend
{
u16 unk_0;
u8 unk_2;
u8 unk_3;
u8 fill_4[14];
u8 unk_12;
u32 unk_14;
u32 unk_18;
struct RfuIntrStruct unk_1c;
u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_SEND_UNI)
u8 dataReadyFlag; // Flag indicating transmission data is prepared (0: data sent; 1: transmission data ready)
// Set with rfu_UNI_re_setSendData or rfu_UNI_readySendData, cleared when data is sent with rfu_REQ_sendData.
u8 bmSlot; // Expresses transmission destination slot as bits
u16 payloadSize; // Payload size of 1 transmission. "size" specified by rfu_UNI_setSendData or rfu_UNI_re_setSendData is used.
const void *src; // Beginning address of transmission data
};
struct RfuUnk2
// Data Structure for Receiving UNI Data
struct UNIRecv
{
u16 unk_0;
u16 unk_2;
u8 fill_4[0x16];
u8 unk_1a;
u8 fill_1b[0x19];
u16 unk_34;
u16 unk_36;
u8 fill_38[0x16];
u8 unk_4e;
u8 fill_4f[0x12];
u8 unk_61;
u8 fill_62[6];
void *unk_68;
void *unk_6c;
u8 unk_70[0x70];
u16 state; // Slot communication state (SLOT_STATE_READY, SLOT_STATE_RECEIVING, SLOT_STATE_RECV_IGNORE)
u16 errorCode; // Error code during reception
u16 dataSize; // Size of receive data
u8 newDataFlag; // Flag indicating whether receive data has newly arrived (0: no newly arrived data; 1: newly arrived data)
// The flag is cleared with rfu_UNI_clearRecvNewDataFlag; it is set when data is received with rfu_REQ_recvData.
u8 dataBlockFlag; // Flag for unreferenced receive data overwrite block (default is 0 Note: not used)
};
struct RfuUnk3
// Slot Status Data Structure for UNI-Type Communication
struct RfuSlotStatusUNI
{
u32 unk_0;
u32 unk_4;
u8 unk_8[0xD4];
u32 unk_dc;
struct UNISend send; // Transmission Status
struct UNIRecv recv; // Reception Status
void *recvBuffer; // Reception Buffer Address
u32 recvBufferSize; // Reception Buffer Size
};
struct RfuUnk5Sub
#define WINDOW_COUNT 4
struct NIComm
{
u16 unk_00;
u8 unk_02;
u16 unk_04;
struct UnkLinkRfuStruct_02022B14 unk_06;
u8 fill_13[1];
u8 playerName[PLAYER_NAME_LENGTH + 1];
u16 state; // Communication state of slot
u16 failCounter; // Count of failed transmissions/receptions (Count is increased when transmission/reception of data does not succeed within 1PF=16.7 ms)
const u8 *now_p[WINDOW_COUNT]; // Address of current send/receive (The data is divided into WINDOW_COUNT blocks and sent in payloadSize units.)
// remainSize is u32 in SDK. This is a hack to match ASM
s32 remainSize; // Size of remaining communication data
u16 errorCode; // Error code
u8 bmSlot; // Expresses the current communication slot in bits
// (When sending from the Master, because multiple slaves can be specified with bmSlot, communications are terminated based on the failCounter for each child device)
// Parameters used inside the Library
u8 recvAckFlag[WINDOW_COUNT];
u8 ack;
u8 phase;
u8 n[WINDOW_COUNT];
// Parameters indicating the current communication content
const void *src; // Start address transmission data (valid only for transmitting device)
u8 bmSlotOrg; // Expresses the communication source slot at the beginning of the transmission in bits (valid only for transmitting device)
u8 dataType; // Transmission/reception data type (0: User data; 1: Game identification information)
u16 payloadSize; // Payload size for one transmission
u32 dataSize; // Size of transmission/reception data
// Calculated by subtracting link layer header size from subFrameSize specified by the rfu_NI_setSendData function
};
struct RfuUnk5
struct RfuSlotStatusNI
{
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
u8 unk_08;
u8 filler_09[1];
u8 unk_0a[4];
u8 filler_0e[6];
struct RfuUnk5Sub unk_14[4];
struct NIComm send; // Transmission Status
struct NIComm recv; // Reception Status
void *recvBuffer; // Reception Buffer Address
u32 recvBufferSize; // Reception Buffer Size
};
extern struct RfuStruct * gRfuState;
// Game Identification Information Data Structure
struct RfuTgtData
{
u16 id; // ID of parent candidate ID of connection partner
u8 slot; // Slot number where parent candidate can enter Connection slot number
u8 mbootFlag; // Flag to indicate whether or not the parent candidate Flag to indicate whether or not the connection partner
// is multiboot program for download is multiboot program for download
u16 serialNo; // Game serial number of parent candidate Game serial number of connection partner
u8 gname[RFU_GAME_NAME_LENGTH + 2]; // Game name of parent candidate Game name of connection partner
u8 uname[RFU_USER_NAME_LENGTH + 1]; // User name for parent candidate User name for connection partner
};
extern struct RfuUnk5 * gUnknown_3007460;
extern u32 *gUnknown_3007464;
extern struct RfuUnk3 * gUnknown_3007468;
extern struct RfuUnk2 * gUnknown_3007450[4];
extern struct RfuUnk1 * gUnknown_3007440[4];
extern struct {
struct RfuLinkStatus
{
u8 parentChild; // Connection status (0x01:MODE_PARENT 0x00:MODE_CHILD 0xff:MODE_NEUTRAL)
u8 connCount; // Number of connections
u8 connSlotFlag; // Flag to indicate in bits the connection slot (0x01<<Connection slot number)
u8 linkLossSlotFlag; // Flag to indicate in bits the slot where the link loss was generated (")
u8 sendSlotNIFlag; // Flag to indicate in bits the slot where NI-type send is occurring (")
u8 recvSlotNIFlag; // Flag to indicate in bits the slot where NI-type receive is occurring (")
u8 sendSlotUNIFlag; // Flag to indicate in bits the slot where UNI-type send is occurring (")
u8 getNameFlag; // Parent: Flag to indicate whether or not game identification information was obtained from the child connected to this slot (")
// Child: Flag to indicate whether or not game identification information was sent to the parent connected to this slot (")
u8 findParentCount; // Number of parent candidates discovered with rfu_REQ_xxxSearchParent, valid only with a child device
u8 watchInterval; // Link monitor execution interval (16.7 ms unit AGB picture frame)
u8 strength[RFU_CHILD_MAX]; // Link strength value (0x00 - 0xff; 0x00 is link loss. Updates with rfu_REQBN_watchLink)
vu8 LLFReadyFlag; // Indicates whether the link layer frame to send next has be constructed (Flag is on when calling rfu_constructLLFrame, flag is cleared when sending by rfu_REQ_sendData.)
u8 remainLLFrameSizeParent; // Remaining size of the link layer communication frame for the parent device
u8 remainLLFrameSizeChild[RFU_CHILD_MAX]; // Remaining size of the link layer communication frame for each slot for child device
struct RfuTgtData partner[RFU_CHILD_MAX]; // Parent, Child: When there is a connection, the matrix element corresponding to the number of the connected slot
// stores the game identification information for the connection partner.
// Child: Stores the game identification information for the parent candidate discovered when executing rfu_REQ_xxxxSearchParent.
struct RfuTgtData my; // The device's own game identification information (unrelated to the element slot value)
};
// the following structs are not documented in SDK
struct RfuFixed
{
void (*reqCallback)(u16, u16);
void (*fastCopyPtr)(const u8 **, u8 **, s32);
u16 fastCopyBuffer[24];
u32 fastCopyBuffer2[12];
u32 LLFBuffer[29];
struct RfuIntrStruct *STWIBuffer;
};
struct RfuStatic
{
u8 flags;
u8 NIEndRecvFlag;
u8 recvRenewalFlag;
u8 commExistFlag;
u8 recvErrorFlag;
u8 recoveryBmSlot;
u8 nowWatchInterval;
u8 nullFrameCount;
u8 emberCount;
u8 SCStartFlag;
u8 linkEmergencyFlag[4];
u8 lsFixedCount[4];
u16 cidBak[4];
u16 unk_1a;
u16 reqResult;
u16 tryPid;
u16 watchdogTimer;
u32 totalPacketSize;
};
struct RfuSIO32Id
{
u8 unk0;
u8 unk1;
u16 unk2;
u16 unk4;
u8 fill6[4];
u16 unk6;
u16 unk8; // unused
u16 unkA;
} gUnknown_3007470;
};
extern void rfu_STC_clearAPIVariables(void);
struct RfuAPIBuffer
{
struct RfuLinkStatus linkStatus;
struct RfuStatic static_;
struct RfuFixed fixed;
struct RfuSlotStatusNI NI[RFU_CHILD_MAX];
struct RfuSlotStatusUNI UNI[RFU_CHILD_MAX];
struct RfuIntrStruct intr;
};
void STWI_init_all(struct RfuIntrStruct * interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam);
void rfu_REQ_stopMode(void);
void rfu_waitREQComplete(void);
extern struct STWIStatus *gSTWIStatus;
extern struct RfuLinkStatus *gRfuLinkStatus;
extern struct RfuStatic *gRfuStatic;
extern struct RfuFixed *gRfuFixed;
extern struct RfuSlotStatusNI *gRfuSlotStatusNI[RFU_CHILD_MAX];
extern struct RfuSlotStatusUNI *gRfuSlotStatusUNI[RFU_CHILD_MAX];
extern struct RfuSIO32Id gRfuSIO32Id;
// librfu_s32id
s32 AgbRFU_checkID(u8);
// Arguments with "bm..." specify slots of the form (0x01 << slot number) that are the object of a function operation.
// librfu_rfu
// API Initialization and Initial Settings
// API Initialization
u16 rfu_initializeAPI(struct RfuAPIBuffer *APIBuffer, u16 buffByteSize, IntrFunc *sioIntrTable_p, bool8 copyInterruptToRam);
// Set Timer Interrupt
void rfu_setTimerInterrupt(u8 timerNo, IntrFunc *timerIntrTable_p);
// Resident Function called from within a V-Blank Interrupt
u16 rfu_syncVBlank(void);
// Specify REQ Callback function
void rfu_setREQCallback(void (*callback)(u16 reqCommandId, u16 reqResult));
// REQ-API Execution Completion Wait
u16 rfu_waitREQComplete(void);
// RFU Initialization and Initial Settings
// RFU Startup and ID Check (Forced RFU reset occurs simultaneously)
u32 rfu_REQBN_softReset_and_checkID(void);
void rfu_REQ_sendData(u8);
void rfu_setMSCCallback(void (*func)(u16));
void rfu_setREQCallback(void (*func)(u16, u16));
bool8 rfu_getMasterSlave(void);
void rfu_REQBN_watchLink(u16 a0, u8 *a1, u8 *a2, u8 *a3);
bool16 rfu_syncVBlank(void);
// RFU Reset
void rfu_REQ_reset(void);
void rfu_REQ_configSystem(u16, u8, u8);
void rfu_REQ_configGameData(u8, u16, struct UnkLinkRfuStruct_02022B14 *, u8 *);
// Set RFU to Stop Mode (Power Down)
void rfu_REQ_stopMode(void);
// RFU Hardware Settings
void rfu_REQ_configSystem(u16 availSlotFlag, u8 maxMFrame, u8 mcTimer);
// Game Identification Information Configuration
void rfu_REQ_configGameData(u8 mbootFlag, u16 serialNo, const u8 *gname, const u8 *uname);
// RFU Connection Process
// Operate as parent device; search for and connect to child device
void rfu_REQ_startSearchChild(void);
void rfu_REQ_pollSearchChild(void);
void rfu_REQ_endSearchChild(void);
// Operate as child device; search for parent device
void rfu_REQ_startSearchParent(void);
void rfu_REQ_pollSearchParent(void);
void rfu_REQ_endSearchParent(void);
void rfu_REQ_startConnectParent(u16);
// Operate as child device; connect to specified parent device
void rfu_REQ_startConnectParent(u16 pid);
void rfu_REQ_pollConnectParent(void);
void rfu_REQ_endConnectParent(void);
void rfu_REQ_CHILD_startConnectRecovery(u8);
u16 rfu_getConnectParentStatus(u8 *status,u8 *connectSlotNo);
// Restore link from child device
void rfu_REQ_CHILD_startConnectRecovery(u8 bmRecoverySlot);
void rfu_REQ_CHILD_pollConnectRecovery(void);
void rfu_REQ_CHILD_endConnectRecovery(void);
u16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
// RFU Link Management
// Link Monitoring
u16 rfu_REQBN_watchLink(u16 reqCommandId, u8 *bmLinkLossSlot, u8 *linkLossReason, u8 *parentBmLinkRecoverySlot);
// Link Disconnect
void rfu_REQ_disconnect(u8 bmDisconnectSlot);
// Relation of clock between AGB and RFU
// Switch to AGB clock slave
void rfu_REQ_changeMasterSlave(void);
void rfu_REQ_RFUStatus(void);
void rfu_getRFUStatus(u8 *status);
u8 *rfu_getSTWIRecvBuffer(void);
u8 rfu_NI_CHILD_setSendGameName(u8 a0, u8 a1);
void rfu_clearSlot(u8 a0, u8 a1);
// Acquire either the master or slave clock from the current AGB-RFU
bool8 rfu_getMasterSlave(void);
// Communication Configuration
// MSC Callback Configuration
void rfu_setMSCCallback(void (*callback)(u16 reqCommandId));
// Shared by NI- and UNI-type communications
// Clear Communication Status
void rfu_clearAllSlot(void);
bool16 rfu_CHILD_getConnectRecoveryStatus(u8 *status);
bool16 rfu_getConnectParentStatus(u8 *status, u8 *a1);
bool16 rfu_UNI_PARENT_getDRAC_ACK(u8 *a0);
void rfu_REQ_disconnect(u8 who);
void rfu_changeSendTarget(u8 a0, u8 who, u8 a2);
void rfu_NI_stopReceivingData(u8 who);
u16 rfu_initializeAPI(u32 *unk0, u16 unk1, IntrFunc *interrupt, bool8 copyInterruptToRam);
void rfu_setTimerInterrupt(u8 which, IntrFunc *intr);
void rfu_setRecvBuffer(u8 a0, u8 a1, void *a2, size_t a3);
bool16 rfu_UNI_setSendData(u8 flag, void *ptr, u8 size);
void rfu_REQ_recvData(void);
void rfu_UNI_readySendData(u8 a0);
void rfu_UNI_clearRecvNewDataFlag(u8 a0);
u16 rfu_clearSlot(u8 connTypeFlag, u8 slotStatusIndex);
// Set Receive Buffer
u16 rfu_setRecvBuffer(u8 connType, u8 slotNo, void *buffer, u32 buffSize);
// Receive/Send Data
// UNI-type communication
// Set transmission data
u16 rfu_UNI_setSendData(u8 bmSendSlot, const void *src, u8 size);
// Enable transmission data
void rfu_UNI_readySendData(u8 slotStatusIndex);
// Change address or size of transmission data and enable transmission data
u16 rfu_UNI_changeAndReadySendData(u8 slotStatusIndex, const void *src, u8 size);
// Used only by parent device. At the beginning of a MSC Callback that received notification that the data transmission completed, an ACK flag is obtained.
u16 rfu_UNI_PARENT_getDRAC_ACK(u8 *ackFlag);
// Clear the flag that indicates newly arrived reception data
void rfu_UNI_clearRecvNewDataFlag(u8 slotStatusIndex);
// NI-type Communication
// Set transmission data
u16 rfu_NI_setSendData(u8 bmSendSlot, u8 subFrameSize, const void *src, u32 size);
// Used only by child device. After establishing connection at the RFU level, configure transmission of child device game identification information in order to authenticate connection
u16 rfu_NI_CHILD_setSendGameName(u8 slotNo, u8 subFrameSize);
// Stop the NI data currently being received
u16 rfu_NI_stopReceivingData(u8 slotStatusIndex);
// Shared by NI- and UNI-type communications
// Narrow transmission targets for transmission data.
u16 rfu_changeSendTarget(u8 connType, u8 slotStatusIndex, u8 bmNewTgtSlot);
// Functions for sending/receiving data to RFU
// Data transmission
void rfu_REQ_sendData(u8 clockChangeFlag);
// Used only by parent device. Resend previous sent data (packet)
void rfu_REQ_PARENT_resumeRetransmitAndChange(void);
void rfu_NI_setSendData(u8, u8, const void *, u32);
// Read receive data
void rfu_REQ_recvData(void);
// For Multi-boot
// Inherits the information about the link established by the downloader just after the program downloaded with multiboot starts up.
u16 rfu_MBOOT_CHILD_inheritanceLinkStatus(void);
// For Debug
// Obtain address of the SWTI-layer receive buffer
struct RfuIntrStruct *rfu_getSTWIRecvBuffer(void);
// Obtain RFU state
void rfu_REQ_RFUStatus(void);
u16 rfu_getRFUStatus(u8 *rfuState);
// Using RFU, generate noise (jamming radio waves) for other RFUs
void rfu_REQ_noise(void);
// librfu_intr
void IntrSIO32(void);
// librfu_stwi
void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam);
void STWI_set_MS_mode(u8 mode);
void STWI_init_Callback_M(void);
void STWI_init_Callback_S(void);
void STWI_set_Callback_M(void *callbackM);
void STWI_set_Callback_S(void (*callbackS)(u16));
void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect);
void AgbRFU_SoftReset(void);
void STWI_set_Callback_ID(void (*func)(void));
u16 STWI_read_status(u8 index);
u16 STWI_poll_CommandEnd(void);
void STWI_send_DataRxREQ(void);
void STWI_send_MS_ChangeREQ(void);
void STWI_send_StopModeREQ(void);
void STWI_send_SystemStatusREQ(void);
void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data);
void STWI_send_ResetREQ(void);
void STWI_send_LinkStatusREQ(void);
void STWI_send_VersionStatusREQ(void);
void STWI_send_SlotStatusREQ(void);
void STWI_send_ConfigStatusREQ(void);
void STWI_send_ResumeRetransmitAndChangeREQ(void);
void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3);
void STWI_send_SC_StartREQ(void);
void STWI_send_SC_PollingREQ(void);
void STWI_send_SC_EndREQ(void);
void STWI_send_SP_StartREQ(void);
void STWI_send_SP_PollingREQ(void);
void STWI_send_SP_EndREQ(void);
void STWI_send_CP_StartREQ(u16 unk1);
void STWI_send_CP_PollingREQ(void);
void STWI_send_CP_EndREQ(void);
void STWI_send_DataTxREQ(const void *in, u8 size);
void STWI_send_DataTxAndChangeREQ(const void *in, u8 size);
void STWI_send_DataReadyAndChangeREQ(u8 unk);
void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1);
void STWI_send_DisconnectREQ(u8 unk);
void STWI_send_TestModeREQ(u8 unk0, u8 unk1);
void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2);
void STWI_send_CPR_PollingREQ(void);
void STWI_send_CPR_EndREQ(void);
#endif // GUARD_LIBRFU_H
+2
View File
@@ -259,5 +259,7 @@ void sub_80FA42C(void);
void sub_800B284(struct LinkPlayer * linkPlayer);
bool8 IsWirelessAdapterConnected(void);
bool8 sub_800A474(u8 a0);
void LinkVSync(void);
bool8 HandleLinkConnection(void);
#endif // GUARD_LINK_H
+2
View File
@@ -46,6 +46,8 @@ void sub_80FBB20(void);
bool8 sub_80FA484(bool32 a0);
void var_800D_set_xB(void);
struct UnkLinkRfuStruct_02022B14 *sub_80F9800(void);
void sub_80FCF34(void);
void InitRFU(void);
#include "mevent_server.h"
extern const struct mevent_server_cmd gMEventSrvScript_OtherTrainerCanceled[];
+2
View File
@@ -4,6 +4,8 @@
#include "global.h"
extern bool32 gFlashMemoryPresent;
extern struct SaveBlock1 gSaveBlock1;
extern struct SaveBlock2 gSaveBlock2;
void ClearSav2(void);
void ClearSav1(void);
+1
View File
@@ -9,6 +9,7 @@ extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_SE3;
extern struct SoundInfo gSoundInfo;
void m4aSoundVSync(void);
void m4aSoundVSyncOn(void);
+1
View File
@@ -49,5 +49,6 @@ void sub_80F85BC(u16 a0);
u16 sub_80F856C(u8 id);
bool8 sub_80F8110(u8 mapsec, bool8 forceFirstTime);
bool32 sub_80F83B0(void);
const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec);
#endif //GUARD_MAP_PREVIEW_SCREEN_H
+3
View File
@@ -149,5 +149,8 @@ void sub_8055778(int);
void sub_8055738(u8 loc);
void sub_8056078(void *, void *);
void sub_805546C(u8 a0);
bool32 sub_80582E0(void);
bool32 sub_8058274(void);
#endif //GUARD_OVERWORLD_H
+1
View File
@@ -509,6 +509,7 @@ extern const u16 *const gLevelUpLearnsets[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct SpriteTemplate gUnknown_825DEF0[];
extern const u8 gPPUpGetMask[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
void ZeroMonData(struct Pokemon *mon);
+1
View File
@@ -34,5 +34,6 @@ enum PokemonSummaryScreenPage
s32 GetLastViewedMonIndex(void);
void ShowPokemonSummaryScreen(struct Pokemon * party, u8 cursorPos, u8 lastIdx, void (*callback)(void), u8 a4);
void sub_8138B38(u8);
#endif // GUARD_POKEMON_SUMMARY_SCREEN_H
+15 -67
View File
@@ -24,77 +24,25 @@ enum {
MAPSECTYPE_CITY_CANTFLY,
};
struct RegionMap {
/*0x000*/ u16 mapSecId;
/*0x002*/ u8 iconDrawType;
/*0x003*/ u8 posWithinMapSec;
/*0x004*/ u8 mapSecName[0x14];
/*0x018*/ u8 (*inputCallback)(void);
/*0x01c*/ struct Sprite *cursorSprite;
/*0x020*/ struct Sprite *playerIconSprite;
/*0x024*/ s32 bg2x;
/*0x028*/ s32 bg2y;
/*0x02c*/ u32 bg2pa;
/*0x034*/ u32 bg2pc;
/*0x030*/ u32 bg2pb;
/*0x038*/ u32 bg2pd;
/*0x03c*/ s32 unk_03c;
/*0x040*/ s32 unk_040;
/*0x044*/ s32 unk_044;
/*0x048*/ s32 unk_048;
/*0x04c*/ s32 unk_04c;
/*0x050*/ s32 unk_050;
/*0x054*/ u16 cursorPosX;
/*0x056*/ u16 cursorPosY;
/*0x058*/ u16 cursorTileTag;
/*0x05a*/ u16 cursorPaletteTag;
/*0x05c*/ s16 scrollX;
/*0x05e*/ s16 scrollY;
/*0x060*/ s16 unk_060;
/*0x062*/ s16 unk_062;
/*0x064*/ u16 zoomedCursorPosX;
/*0x066*/ u16 zoomedCursorPosY;
/*0x068*/ s16 zoomedCursorDeltaY;
/*0x06a*/ s16 zoomedCursorDeltaX;
/*0x06c*/ u16 zoomedCursorMovementFrameCounter;
/*0x06e*/ u16 unk_06e;
/*0x070*/ u16 playerIconTileTag;
/*0x072*/ u16 playerIconPaletteTag;
/*0x074*/ u16 playerIconSpritePosX;
/*0x076*/ u16 playerIconSpritePosY;
/*0x078*/ bool8 zoomed;
/*0x079*/ u8 initStep;
/*0x07a*/ s8 cursorMovementFrameCounter;
/*0x07b*/ s8 cursorDeltaX;
/*0x07c*/ s8 cursorDeltaY;
/*0x07d*/ bool8 needUpdateVideoRegs;
/*0x07e*/ bool8 blinkPlayerIcon;
/*0x07f*/ bool8 playerIsInCave;
/*0x080*/ u8 bgNum;
/*0x081*/ u8 charBaseIdx;
/*0x082*/ u8 mapBaseIdx;
/*0x083*/ bool8 bgManaged;
/*0x084*/ u8 filler_084[0x100];
/*0x184*/ u8 cursorSmallImage[0x100];
/*0x284*/ u8 cursorLargeImage[0x600];
}; // size = 0x884
enum {
MAPPERM_0,
MAPPERM_1,
MAPPERM_2,
MAPPERM_3
};
enum {
REGIONMAP_KANTO,
REGIONMAP_SEVII123,
REGIONMAP_SEVII45,
REGIONMAP_SEVII67
};
// Exported RAM declarations
// Exported ROM declarations
void sub_8122CF8(struct RegionMap *regionMap, struct BgTemplate *template, bool8 zoomed);
bool8 sub_8122DB0(void);
void UpdateRegionMapVideoRegs(void);
void InitRegionMap(struct RegionMap *regionMap, u8 argument);
u8 sub_81230AC(void);
bool8 sub_8123514(void);
void FreeRegionMapIconResources(void);
u16 GetRegionMapSectionIdAt(u16 x, u16 y);
void CreateRegionMapPlayerIcon(u16 x, u16 y);
void CreateRegionMapCursor(u16 tileTag, u16 paletteTag);
u8 *GetMapName(u8 *, u16, u16);
bool32 sub_8124668(u8 mapSecId);
void GetMapNameGeneric(u8 *, u8);
u8 *GetMapName(u8 *dest, u16 mapsec, u16 fill);
u8 *GetMapNameGeneric(u8 *dest, u16 mapsec);
void sub_80BFF50(u8 a0, void (*a1)(void));
void MCB2_FlyMap(void);
+2
View File
@@ -2,5 +2,7 @@
#define GUARD_SAVE_FAILED_SCREEN_H
extern void DoSaveFailedScreen(u8 saveType); // save_failed_screen
void sub_80F50F4(void);
bool32 sub_80F5118(void);
#endif //GUARD_SAVE_FAILED_SCREEN_H
-12
View File
@@ -1,12 +0,0 @@
#ifndef GUARD_SCRIPTPOKE80F8_H
#define GUARD_SCRIPTPOKE80F8_H
#include "global.h"
void ShowContestWinner(void);
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
u8 ScriptGiveEgg(u16);
void CreateScriptedWildMon(u16, u8, u16);
void ScriptSetMonMoveSlot(u8, u16, u8);
#endif
-8
View File
@@ -1,8 +0,0 @@
#ifndef GUARD_SCRIPTPOKE81B9_H
#define GUARD_SCRIPTPOKE81B9_H
#include "global.h"
void sub_81B9404(void);
#endif
@@ -1,10 +1,11 @@
#ifndef GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#define GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#ifndef GUARD_SCRIPT_POKEMON_UTIL_H
#define GUARD_SCRIPT_POKEMON_UTIL_H
bool8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unk1, u32 unk2, u8 unk3);
bool8 ScriptGiveEgg(u16 species);
void ScriptSetMonMoveSlot(u8 partyIdx, u16 move, u8 slot);
void HealPlayerParty(void);
void ReducePlayerPartyToThree(void);
void CreateScriptedWildMon(u16 species, u8 level, u16 item);
#endif //GUARD_SCRIPT_POKEMON_UTIL_80A0058_H
#endif //GUARD_SCRIPT_POKEMON_UTIL_H
+30
View File
@@ -1003,4 +1003,34 @@ extern const u8 gText_UnionRoomTradesBattles[];
extern const u8 gText_LinkBattles[];
extern const u8 gText_LinkCableBattles[];
// region_map
extern const u8 gText_RegionMap_DPadMove[];
extern const u8 gText_RegionMap_Space[];
extern const u8 gText_RegionMap_AButtonGuide[];
extern const u8 gText_RegionMap_AButtonCancel[];
extern const u8 gText_RegionMap_AButtonCancel2[];
extern const u8 gText_RegionMap_AButtonSwitch[];
extern const u8 gText_RegionMap_AButtonOK[];
extern const u8 gText_RegionMap_UpDownPick[];
extern const u8 gText_RegionMap_NoData[];
extern const u8 gText_RegionMap_AreaDesc_ViridianForest[];
extern const u8 gText_RegionMap_AreaDesc_MtMoon[];
extern const u8 gText_RegionMap_AreaDesc_DiglettsCave[];
extern const u8 gText_RegionMap_AreaDesc_VictoryRoad[];
extern const u8 gText_RegionMap_AreaDesc_PokemonMansion[];
extern const u8 gText_RegionMap_AreaDesc_SafariZone[];
extern const u8 gText_RegionMap_AreaDesc_RockTunnel[];
extern const u8 gText_RegionMap_AreaDesc_SeafoamIslands[];
extern const u8 gText_RegionMap_AreaDesc_PokemonTower[];
extern const u8 gText_RegionMap_AreaDesc_CeruleanCave[];
extern const u8 gText_RegionMap_AreaDesc_PowerPlant[];
extern const u8 gText_RegionMap_AreaDesc_MtEmber[];
extern const u8 gText_RegionMap_AreaDesc_BerryForest[];
extern const u8 gText_RegionMap_AreaDesc_IcefallCave[];
extern const u8 gText_RegionMap_AreaDesc_LostCave[];
extern const u8 gText_RegionMap_AreaDesc_TanobyRuins[];
extern const u8 gText_RegionMap_AreaDesc_AlteringCave[];
extern const u8 gText_RegionMap_AreaDesc_PatternBush[];
extern const u8 gText_RegionMap_AreaDesc_DottedHole[];
#endif //GUARD_STRINGS_H
+1 -2
View File
@@ -250,12 +250,11 @@ u16 RenderText(struct TextPrinter *textPrinter);
s32 GetStringWidthFixedWidthFont(const u8 *str, u8 fontId, u8 letterSpacing);
s32 (*GetFontWidthFunc(u8 glyphId))(u16, bool32);
s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str);
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7);
u8 DrawKeypadIcon(u8 windowId, u8 keypadIconId, u16 x, u16 y);
u8 GetKeypadIconTileOffset(u8 keypadIconId);
u8 GetKeypadIconWidth(u8 keypadIconId);
u8 GetKeypadIconHeight(u8 keypadIconId);
void SetDefaultFontsPointer(void);
u8 GetFontAttribute(u8 fontId, u8 attributeId);
u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension);
void DecompressGlyphFont0(u16 glyphId, bool32 isJapanese);
+14 -12
View File
@@ -1,5 +1,3 @@
ENTRY(Start)
gNumMusicPlayers = 4;
gMaxLines = 0;
@@ -81,7 +79,7 @@ SECTIONS {
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
asm/battle_interface.o(.text);
src/battle_interface.o(.text);
asm/smokescreen.o(.text);
src/pokeball.o(.text);
src/load_save.o(.text);
@@ -147,10 +145,10 @@ SECTIONS {
src/script_menu.o(.text);
asm/naming_screen.o(.text);
src/money.o(.text);
asm/script_pokemon_util_80A0058.o(.text);
src/script_pokemon_util.o(.text);
src/field_poison.o(.text);
src/pokemon_size_record.o(.text);
asm/pc_screen_effect.o(.text);
src/pc_screen_effect.o(.text);
src/fldeff_poison.o(.text);
src/fldeff_berrytree.o(.text);
src/field_special_scene.o(.text);
@@ -180,9 +178,10 @@ SECTIONS {
src/mon_markings.o(.text);
src/mail.o(.text);
src/menu_helpers.o(.text);
asm/script_pokemon_util_80BF8FC.o(.text);
src/party_menu_specials.o(.text);
src/heal_location.o(.text);
asm/region_map.o(.text);
src/region_map.o(.text);
src/image_processing_effects.o(.text);
src/battle_ai_script_commands.o(.text);
src/fldeff_rocksmash.o(.text);
src/fldeff_dig.o(.text);
@@ -318,9 +317,10 @@ SECTIONS {
src/agb_flash_1m.o(.text);
src/agb_flash_mx.o(.text);
src/agb_flash_le.o(.text);
asm/librfu_stwi.o(.text);
src/librfu_stwi.o(.text);
asm/librfu_intr.o(.text);
asm/librfu.o(.text);
src/librfu_rfu.o(.text);
src/librfu_sio32id.o(.text);
src/isagbprn.o(.text);
asm/libagbsyscall.o(.text);
*libgcc.a:_call_via_rX.o(.text);
@@ -405,7 +405,7 @@ SECTIONS {
src/util.o(.rodata);
src/daycare.o(.rodata);
src/battle_gfx_sfx_util.o(.rodata);
data/battle_interface.o(.rodata);
src/battle_interface.o(.rodata);
src/pokeball.o(.rodata);
src/trade.o(.rodata);
src/trade_scene.o(.rodata);
@@ -479,7 +479,8 @@ SECTIONS {
src/mon_markings.o(.rodata);
src/mail.o(.rodata);
src/heal_location.o(.rodata);
data/region_map.o(.rodata);
src/region_map.o(.rodata);
src/image_processing_effects.o(.rodata);
src/battle_ai_script_commands.o(.rodata);
data/fldeff_flash.o(.rodata);
src/field_specials.o(.rodata);
@@ -939,7 +940,8 @@ SECTIONS {
src/agb_flash_1m.o(.rodata);
src/agb_flash_mx.o(.rodata);
src/agb_flash_le.o(.rodata);
data/librfu_rodata.o(.rodata);
src/librfu_rfu.o(.rodata);
src/librfu_sio32id.o(.rodata);
src/isagbprn.o(.rodata);
*libgcc.a:_divdi3.o(.rodata);
*libgcc.a:_udivdi3.o(.rodata);
+1 -1
View File
@@ -74,7 +74,7 @@ u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void))
return 1;
sTimerNum = timerNum;
sTimerReg = &REG_TMCNT(sTimerNum);
sTimerReg = &REG_TMCNT_L(sTimerNum);
*intrFunc = FlashTimerIntr;
return 0;
}
+2 -2
View File
@@ -687,8 +687,8 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, u8 notTransform)
gSprites[gBattlerSpriteIds[battlerAtk]].pos1.y = GetBattlerSpriteDefault_Y(battlerAtk);
StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerAtk]], gBattleMonForms[battlerAtk]);
SetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerAtk]], MON_DATA_NICKNAME, gSpeciesNames[targetSpecies]);
sub_80496C0(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
sub_804981C(gHealthboxSpriteIds[battlerAtk], 1);
UpdateNickInHealthbox(gHealthboxSpriteIds[battlerAtk], &gEnemyParty[gBattlerPartyIndexes[battlerAtk]]);
TryAddPokeballIconToHealthbox(gHealthboxSpriteIds[battlerAtk], 1);
}
else if (notTransform)
{
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1254,7 +1254,7 @@ const u8 *const gUnknown_83FE7F4[] = {
sText_Speed
};
const u8 gUnknown_83FE80C[] = _("{HIGHLIGHT 2}SAFARI BALLS"); //
const u8 gText_SafariBalls[] = _("{HIGHLIGHT 2}SAFARI BALLS"); //
const u8 gText_HighlightRed_Left[] = _("{HIGHLIGHT 2}Left: ");
const u8 gText_HighlightRed[] = _("{HIGHLIGHT 2}");
const u8 gText_Sleep[] = _("sleep");
+1 -1
View File
@@ -9,7 +9,7 @@
#include "safari_zone.h"
#include "quest_log.h"
#include "script.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "strings.h"
#include "string_util.h"
#include "event_data.h"
+1 -1
View File
@@ -18,7 +18,7 @@
#include "new_game.h"
#include "save.h"
#include "item.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "constants/species.h"
#include "constants/items.h"
#include "constants/moves.h"
+109
View File
@@ -0,0 +1,109 @@
const u8 gMapSecName_PalletTown[] = _("PALLET TOWN");
const u8 gMapSecName_ViridianCity[] = _("VIRIDIAN CITY");
const u8 gMapSecName_PewterCity[] = _("PEWTER CITY");
const u8 gMapSecName_CeruleanCity[] = _("CERULEAN CITY");
const u8 gMapSecName_LavenderTown[] = _("LAVENDER TOWN");
const u8 gMapSecName_VermilionCity[] = _("VERMILION CITY");
const u8 gMapSecName_CeladonCity[] = _("CELADON CITY");
const u8 gMapSecName_FuchsiaCity[] = _("FUCHSIA CITY");
const u8 gMapSecName_CinnabarIsland[] = _("CINNABAR ISLAND");
const u8 gMapSecName_IndigoPlateau[] = _("INDIGO PLATEAU");
const u8 gMapSecName_SaffronCity[] = _("SAFFRON CITY");
const u8 gMapSecName_Route4[] = _("ROUTE 4");
const u8 gMapSecName_Route10[] = _("ROUTE 10");
const u8 gMapSecName_Route1[] = _("ROUTE 1");
const u8 gMapSecName_Route2[] = _("ROUTE 2");
const u8 gMapSecName_Route3[] = _("ROUTE 3");
const u8 gMapSecName_Route4_2[] = _("ROUTE 4");
const u8 gMapSecName_Route5[] = _("ROUTE 5");
const u8 gMapSecName_Route6[] = _("ROUTE 6");
const u8 gMapSecName_Route7[] = _("ROUTE 7");
const u8 gMapSecName_Route8[] = _("ROUTE 8");
const u8 gMapSecName_Route9[] = _("ROUTE 9");
const u8 gMapSecName_Route10_2[] = _("ROUTE 10");
const u8 gMapSecName_Route11[] = _("ROUTE 11");
const u8 gMapSecName_Route12[] = _("ROUTE 12");
const u8 gMapSecName_Route13[] = _("ROUTE 13");
const u8 gMapSecName_Route14[] = _("ROUTE 14");
const u8 gMapSecName_Route15[] = _("ROUTE 15");
const u8 gMapSecName_Route16[] = _("ROUTE 16");
const u8 gMapSecName_Route17[] = _("ROUTE 17");
const u8 gMapSecName_Route18[] = _("ROUTE 18");
const u8 gMapSecName_Route19[] = _("ROUTE 19");
const u8 gMapSecName_Route20[] = _("ROUTE 20");
const u8 gMapSecName_Route21[] = _("ROUTE 21");
const u8 gMapSecName_Route22[] = _("ROUTE 22");
const u8 gMapSecName_Route23[] = _("ROUTE 23");
const u8 gMapSecName_Route24[] = _("ROUTE 24");
const u8 gMapSecName_Route25[] = _("ROUTE 25");
const u8 gMapSecName_ViridianForest[] = _("VIRIDIAN FOREST");
const u8 gMapSecName_MtMoon[] = _("MT. MOON");
const u8 gMapSecName_SSAnne[] = _("S.S. ANNE");
const u8 gMapSecName_UndergroundPath[] = _("UNDERGROUND PATH");
const u8 gMapSecName_UndergroundPath_2[] = _("UNDERGROUND PATH");
const u8 gMapSecName_DiglettsCave[] = _("DIGLETT'S CAVE");
const u8 gMapSecName_VictoryRoad[] = _("VICTORY ROAD");
const u8 gMapSecName_RocketHideout[] = _("ROCKET HIDEOUT");
const u8 gMapSecName_SilphCo[] = _("SILPH CO.");
const u8 gMapSecName_PokemonMansion[] = _("POKéMON MANSION");
const u8 gMapSecName_SafariZone[] = _("SAFARI ZONE");
const u8 gMapSecName_PokemonLeague[] = _("POKéMON LEAGUE");
const u8 gMapSecName_RockTunnel[] = _("ROCK TUNNEL");
const u8 gMapSecName_SeafoamIslands[] = _("SEAFOAM ISLANDS");
const u8 gMapSecName_PokemonTower[] = _("POKéMON TOWER");
const u8 gMapSecName_CeruleanCave[] = _("CERULEAN CAVE");
const u8 gMapSecName_PowerPlant[] = _("POWER PLANT");
const u8 gMapSecName_OneIsland[] = _("ONE ISLAND");
const u8 gMapSecName_TwoIsland[] = _("TWO ISLAND");
const u8 gMapSecName_ThreeIsland[] = _("THREE ISLAND");
const u8 gMapSecName_FourIsland[] = _("FOUR ISLAND");
const u8 gMapSecName_FiveIsland[] = _("FIVE ISLAND");
const u8 gMapSecName_SevenIsland[] = _("SEVEN ISLAND");
const u8 gMapSecName_SixIsland[] = _("SIX ISLAND");
const u8 gMapSecName_KindleRoad[] = _("KINDLE ROAD");
const u8 gMapSecName_TreasureBeach[] = _("TREASURE BEACH");
const u8 gMapSecName_CapeBrink[] = _("CAPE BRINK");
const u8 gMapSecName_BondBridge[] = _("BOND BRIDGE");
const u8 gMapSecName_ThreeIslePort[] = _("THREE ISLE PORT");
const u8 gMapSecName_SeviiIsle6[] = _("SEVII ISLE 6");
const u8 gMapSecName_SeviiIsle7[] = _("SEVII ISLE 7");
const u8 gMapSecName_SeviiIsle8[] = _("SEVII ISLE 8");
const u8 gMapSecName_SeviiIsle9[] = _("SEVII ISLE 9");
const u8 gMapSecName_ResortGorgeous[] = _("RESORT GORGEOUS");
const u8 gMapSecName_WaterLabyrinth[] = _("WATER LABYRINTH");
const u8 gMapSecName_FiveIsleMeadow[] = _("FIVE ISLE MEADOW");
const u8 gMapSecName_MemorialPillar[] = _("MEMORIAL PILLAR");
const u8 gMapSecName_OutcastIsland[] = _("OUTCAST ISLAND");
const u8 gMapSecName_GreenPath[] = _("GREEN PATH");
const u8 gMapSecName_WaterPath[] = _("WATER PATH");
const u8 gMapSecName_RuinValley[] = _("RUIN VALLEY");
const u8 gMapSecName_TrainerTower[] = _("TRAINER TOWER");
const u8 gMapSecName_CanyonEntrance[] = _("CANYON ENTRANCE");
const u8 gMapSecName_SevaultCanyon[] = _("SEVAULT CANYON");
const u8 gMapSecName_TanobyRuins[] = _("TANOBY RUINS");
const u8 gMapSecName_SeviiIsle22[] = _("SEVII ISLE 22");
const u8 gMapSecName_SeviiIsle23[] = _("SEVII ISLE 23");
const u8 gMapSecName_SeviiIsle24[] = _("SEVII ISLE 24");
const u8 gMapSecName_NavelRock[] = _("NAVEL ROCK");
const u8 gMapSecName_MtEmber[] = _("MT. EMBER");
const u8 gMapSecName_BerryForest[] = _("BERRY FOREST");
const u8 gMapSecName_IcefallCave[] = _("ICEFALL CAVE");
const u8 gMapSecName_RocketWarehouse[] = _("ROCKET WAREHOUSE");
const u8 gMapSecName_TrainerTower_2[] = _("TRAINER TOWER");
const u8 gMapSecName_DottedHole[] = _("DOTTED HOLE");
const u8 gMapSecName_LostCave[] = _("LOST CAVE");
const u8 gMapSecName_PatternBush[] = _("PATTERN BUSH");
const u8 gMapSecName_AlteringCave[] = _("ALTERING CAVE");
const u8 gMapSecName_TanobyChambers[] = _("TANOBY CHAMBERS");
const u8 gMapSecName_ThreeIslePath[] = _("THREE ISLE PATH");
const u8 gMapSecName_TanobyKey[] = _("TANOBY KEY");
const u8 gMapSecName_BirthIsland[] = _("BIRTH ISLAND");
const u8 gMapSecName_MoneanChamber[] = _("MONEAN CHAMBER");
const u8 gMapSecName_LiptooChamber[] = _("LIPTOO CHAMBER");
const u8 gMapSecName_WeepthChamber[] = _("WEEPTH CHAMBER");
const u8 gMapSecName_DilfordChamber[] = _("DILFORD CHAMBER");
const u8 gMapSecName_ScufibChamber[] = _("SCUFIB CHAMBER");
const u8 gMapSecName_RixyChamber[] = _("RIXY CHAMBER");
const u8 gMapSecName_ViapoisChamber[] = _("VIAPOIS CHAMBER");
const u8 gMapSecName_EmberSpa[] = _("EMBER SPA");
const u8 gMapSecName_CeladonDept[] = _("CELADON DEPT.");
File diff suppressed because it is too large Load Diff
+2222
View File
File diff suppressed because it is too large Load Diff
+164
View File
@@ -0,0 +1,164 @@
#include "librfu.h"
static void Sio32IDIntr(void);
static void Sio32IDInit(void);
static s32 Sio32IDMain(void);
struct RfuSIO32Id gRfuSIO32Id;
static const u16 Sio32ConnectionData[] = { 0x494e, 0x544e, 0x4e45, 0x4f44 }; // NINTENDO
static const char Sio32IDLib_Var[] = "Sio32ID_030820";
s32 AgbRFU_checkID(u8 r5)
{
u16 r8;
vu16 *r4;
s32 r6;
if (REG_IME == 0)
return -1;
r8 = REG_IE;
gSTWIStatus->state = 10;
STWI_set_Callback_ID(Sio32IDIntr);
Sio32IDInit();
r4 = &REG_TMCNT_L(gSTWIStatus->timerSelect);
r5 *= 8;
while (--r5 != 0xFF)
{
r6 = Sio32IDMain();
if (r6 != 0)
break;
r4[1] = 0;
r4[0] = 0;
r4[1] = TIMER_1024CLK | TIMER_ENABLE;
while (r4[0] < 32)
;
r4[1] = 0;
r4[0] = 0;
}
REG_IME = 0;
REG_IE = r8;
REG_IME = 1;
gSTWIStatus->state = 0;
STWI_set_Callback_ID(NULL);
return r6;
}
static void Sio32IDInit(void)
{
REG_IME = 0;
REG_IE &= ~((8 << gSTWIStatus->timerSelect) | INTR_FLAG_SERIAL);
REG_IME = 1;
REG_RCNT = 0;
REG_SIOCNT = SIO_32BIT_MODE;
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
CpuFill32(0, &gRfuSIO32Id, sizeof(struct RfuSIO32Id));
REG_IF = INTR_FLAG_SERIAL;
}
static s32 Sio32IDMain(void)
{
u8 r12;
switch (r12 = gRfuSIO32Id.unk1)
{
case 0:
gRfuSIO32Id.unk0 = 1;
REG_SIOCNT |= SIO_38400_BPS;
REG_IME = r12;
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = 1;
gRfuSIO32Id.unk1 = 1;
*(vu8 *)&REG_SIOCNT |= SIO_ENABLE;
break;
case 1:
if (gRfuSIO32Id.unkA == 0)
{
if (gRfuSIO32Id.unk0 == 1)
{
if (gRfuSIO32Id.unk2 == 0)
{
REG_IME = gRfuSIO32Id.unk2;
REG_SIOCNT |= SIO_ENABLE;
REG_IME = r12;
}
}
else if (gRfuSIO32Id.unk4 != 0x8001 && !gRfuSIO32Id.unk2)
{
REG_IME = gRfuSIO32Id.unk2;
REG_IE &= ~INTR_FLAG_SERIAL;
REG_IME = r12;
REG_SIOCNT = gRfuSIO32Id.unk2;
REG_SIOCNT = SIO_32BIT_MODE;
REG_IF = INTR_FLAG_SERIAL;
REG_SIOCNT |= SIO_INTR_ENABLE | SIO_ENABLE;
REG_IME = gRfuSIO32Id.unk2;
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = r12;
}
break;
}
else
{
gRfuSIO32Id.unk1 = 2;
// fallthrough
}
default:
return gRfuSIO32Id.unkA;
}
return 0;
}
static void Sio32IDIntr(void)
{
u32 r5;
u16 r0;
#ifndef NONMATCHING
register u32 r1 asm("r1");
register u16 r0_ asm("r0");
#else
u32 r1;
u16 r0_;
#endif
r5 = REG_SIODATA32;
if (gRfuSIO32Id.unk0 != 1)
REG_SIOCNT |= SIO_ENABLE;
r1 = 16 * gRfuSIO32Id.unk0; // to handle side effect of inline asm
r1 = (r5 << r1) >> 16;
r5 = (r5 << 16 * (1 - gRfuSIO32Id.unk0)) >> 16;
if (gRfuSIO32Id.unkA == 0)
{
if (r1 == gRfuSIO32Id.unk6)
{
if (gRfuSIO32Id.unk2 > 3)
{
gRfuSIO32Id.unkA = r5;
}
else if (r1 == (u16)~gRfuSIO32Id.unk4)
{
r0_ = ~gRfuSIO32Id.unk6;
if (r5 == r0_)
++gRfuSIO32Id.unk2;
}
}
else
{
gRfuSIO32Id.unk2 = gRfuSIO32Id.unkA;
}
}
if (gRfuSIO32Id.unk2 < 4)
gRfuSIO32Id.unk4 = *(gRfuSIO32Id.unk2 + Sio32ConnectionData);
else
gRfuSIO32Id.unk4 = 0x8001;
gRfuSIO32Id.unk6 = ~r5;
REG_SIODATA32 = (gRfuSIO32Id.unk4 << 16 * (1 - gRfuSIO32Id.unk0))
+ (gRfuSIO32Id.unk6 << 16 * gRfuSIO32Id.unk0);
if (gRfuSIO32Id.unk0 == 1 && (gRfuSIO32Id.unk2 || r5 == 0x494E))
{
for (r0 = 0; r0 < 600; ++r0)
;
if (gRfuSIO32Id.unkA == 0)
REG_SIOCNT |= SIO_ENABLE;
}
}
+647
View File
@@ -0,0 +1,647 @@
#include "librfu.h"
static void STWI_intr_timer(void);
static u16 STWI_init(u8 request);
static s32 STWI_start_Command(void);
static void STWI_set_timer(u8 unk);
static void STWI_stop_timer(void);
static s32 STWI_restart_Command(void);
static s32 STWI_reset_ClockCounter(void);
struct STWIStatus *gSTWIStatus;
void STWI_init_all(struct RfuIntrStruct *interruptStruct, IntrFunc *interrupt, bool8 copyInterruptToRam)
{
// If we're copying our interrupt into RAM, DMA it to block1 and use
// block2 for our STWIStatus, otherwise block1 holds the STWIStatus.
// interrupt usually is a pointer to gIntrTable[1]
if (copyInterruptToRam == TRUE)
{
*interrupt = (IntrFunc)interruptStruct->block1;
DmaCopy16(3, &IntrSIO32, interruptStruct->block1, sizeof(interruptStruct->block1));
gSTWIStatus = &interruptStruct->block2;
}
else
{
*interrupt = IntrSIO32;
gSTWIStatus = (struct STWIStatus *)interruptStruct->block1;
}
gSTWIStatus->rxPacket = &interruptStruct->rxPacketAlloc;
gSTWIStatus->txPacket = &interruptStruct->txPacketAlloc;
gSTWIStatus->msMode = 1;
gSTWIStatus->state = 0;
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
gSTWIStatus->ackNext = 0;
gSTWIStatus->ackActiveCommand = 0;
gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
gSTWIStatus->recoveryCount = 0;
gSTWIStatus->unk_2c = 0;
REG_RCNT = 0x100; // TODO: mystery bit?
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
STWI_init_Callback_M();
STWI_init_Callback_S();
IntrEnable(INTR_FLAG_SERIAL);
}
void STWI_init_timer(IntrFunc *interrupt, s32 timerSelect)
{
*interrupt = STWI_intr_timer;
gSTWIStatus->timerSelect = timerSelect;
IntrEnable(INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect);
}
void AgbRFU_SoftReset(void)
{
vu16 *timerL;
vu16 *timerH;
REG_RCNT = 0x8000;
REG_RCNT = 0x80A0; // all these bits are undocumented
timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
*timerH = 0;
*timerL = 0;
*timerH = TIMER_ENABLE | TIMER_1024CLK;
while (*timerL <= 0x11)
REG_RCNT = 0x80A2;
*timerH = 3;
REG_RCNT = 0x80A0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
gSTWIStatus->state = 0;
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->reqActiveCommand = 0;
gSTWIStatus->ackLength = 0;
gSTWIStatus->ackNext = 0;
gSTWIStatus->ackActiveCommand = 0;
gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
gSTWIStatus->msMode = 1;
gSTWIStatus->recoveryCount = 0;
gSTWIStatus->unk_2c = 0;
}
void STWI_set_MS_mode(u8 mode)
{
gSTWIStatus->msMode = mode;
}
u16 STWI_read_status(u8 index)
{
switch (index)
{
case 0:
return gSTWIStatus->error;
case 1:
return gSTWIStatus->msMode;
case 2:
return gSTWIStatus->state;
case 3:
return gSTWIStatus->reqActiveCommand;
default:
return 0xFFFF;
}
}
void STWI_init_Callback_M(void)
{
STWI_set_Callback_M(NULL);
}
void STWI_init_Callback_S(void)
{
STWI_set_Callback_S(NULL);
}
// The callback can take 2 or 3 arguments.
void STWI_set_Callback_M(void *callbackM)
{
gSTWIStatus->callbackM = callbackM;
}
void STWI_set_Callback_S(void (*callbackS)(u16))
{
gSTWIStatus->callbackS = callbackS;
}
void STWI_set_Callback_ID(void (*func)(void)) // name in SDK, but is actually setting a function pointer
{
gSTWIStatus->unk_20 = func;
}
u16 STWI_poll_CommandEnd(void)
{
while (gSTWIStatus->unk_2c == TRUE)
;
return gSTWIStatus->error;
}
void STWI_send_ResetREQ(void)
{
if (!STWI_init(ID_RESET_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_LinkStatusREQ(void)
{
if (!STWI_init(ID_LINK_STATUS_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_VersionStatusREQ(void)
{
if (!STWI_init(ID_VERSION_STATUS_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SystemStatusREQ(void)
{
if (!STWI_init(ID_SYSTEM_STATUS_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SlotStatusREQ(void)
{
if (!STWI_init(ID_SLOT_STATUS_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_ConfigStatusREQ(void)
{
if (!STWI_init(ID_CONFIG_STATUS_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_GameConfigREQ(const u8 *unk1, const u8 *data)
{
u8 *packetBytes;
s32 i;
if (!STWI_init(ID_GAME_CONFIG_REQ))
{
gSTWIStatus->reqLength = 6;
// TODO: what is unk1
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*(u16 *)packetBytes = *(u16 *)unk1;
packetBytes += sizeof(u16);
unk1 += sizeof(u16);
for (i = 0; i < 14; ++i)
{
*packetBytes = *unk1;
++packetBytes;
++unk1;
}
for (i = 0; i < 8; ++i)
{
*packetBytes = *data;
++packetBytes;
++data;
}
STWI_start_Command();
}
}
void STWI_send_SystemConfigREQ(u16 unk1, u8 unk2, u8 unk3)
{
if (!STWI_init(ID_SYSTEM_CONFIG_REQ))
{
u8 *packetBytes;
gSTWIStatus->reqLength = 1;
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk3;
*packetBytes++ = unk2;
*(u16*)packetBytes = unk1;
STWI_start_Command();
}
}
void STWI_send_SC_StartREQ(void)
{
if (!STWI_init(ID_SC_START_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SC_PollingREQ(void)
{
if (!STWI_init(ID_SC_POLL_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SC_EndREQ(void)
{
if (!STWI_init(ID_SC_END_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SP_StartREQ(void)
{
if (!STWI_init(ID_SP_START_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SP_PollingREQ(void)
{
if (!STWI_init(ID_SP_POLL_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_SP_EndREQ(void)
{
if (!STWI_init(ID_SP_END_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_CP_StartREQ(u16 unk1)
{
if (!STWI_init(ID_CP_START_REQ))
{
gSTWIStatus->reqLength = 1;
gSTWIStatus->txPacket->rfuPacket32.data[0] = unk1;
STWI_start_Command();
}
}
void STWI_send_CP_PollingREQ(void)
{
if (!STWI_init(ID_CP_POLL_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_CP_EndREQ(void)
{
if (!STWI_init(ID_CP_END_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_DataTxREQ(const void *in, u8 size)
{
if (!STWI_init(ID_DATA_TX_REQ))
{
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
reqLength += 1;
gSTWIStatus->reqLength = reqLength;
CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32));
STWI_start_Command();
}
}
void STWI_send_DataTxAndChangeREQ(const void *in, u8 size)
{
if (!STWI_init(ID_DATA_TX_AND_CHANGE_REQ))
{
u8 reqLength = (size / sizeof(u32));
if (size & (sizeof(u32) - 1))
reqLength += 1;
gSTWIStatus->reqLength = reqLength;
CpuCopy32(in, gSTWIStatus->txPacket->rfuPacket32.data, gSTWIStatus->reqLength * sizeof(u32));
STWI_start_Command();
}
}
void STWI_send_DataRxREQ(void)
{
if (!STWI_init(ID_DATA_RX_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_MS_ChangeREQ(void)
{
if (!STWI_init(ID_MS_CHANGE_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_DataReadyAndChangeREQ(u8 unk)
{
if (!STWI_init(ID_DATA_READY_AND_CHANGE_REQ))
{
if (!unk)
{
gSTWIStatus->reqLength = 0;
}
else
{
u8 *packetBytes;
gSTWIStatus->reqLength = 1;
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk;
*packetBytes++ = 0;
*packetBytes++ = 0;
*packetBytes = 0;
}
STWI_start_Command();
}
}
void STWI_send_DisconnectedAndChangeREQ(u8 unk0, u8 unk1)
{
if (!STWI_init(ID_DISCONNECTED_AND_CHANGE_REQ))
{
u8 *packetBytes;
gSTWIStatus->reqLength = 1;
packetBytes = gSTWIStatus->txPacket->rfuPacket8.data;
packetBytes += sizeof(u32);
*packetBytes++ = unk0;
*packetBytes++ = unk1;
*packetBytes++ = 0;
*packetBytes = 0;
STWI_start_Command();
}
}
void STWI_send_ResumeRetransmitAndChangeREQ(void)
{
if (!STWI_init(ID_RESUME_RETRANSMIT_AND_CHANGE_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_DisconnectREQ(u8 unk)
{
if (!STWI_init(ID_DISCONNECT_REQ))
{
gSTWIStatus->reqLength = 1;
gSTWIStatus->txPacket->rfuPacket32.data[0] = unk;
STWI_start_Command();
}
}
void STWI_send_TestModeREQ(u8 unk0, u8 unk1)
{
if (!STWI_init(ID_TEST_MODE_REQ))
{
gSTWIStatus->reqLength = 1;
gSTWIStatus->txPacket->rfuPacket32.data[0] = unk0 | (unk1 << 8);
STWI_start_Command();
}
}
void STWI_send_CPR_StartREQ(u16 unk0, u16 unk1, u8 unk2)
{
u32 *packetData;
u32 arg1;
if (!STWI_init(ID_CPR_START_REQ))
{
gSTWIStatus->reqLength = 2;
arg1 = unk1 | (unk0 << 16);
packetData = gSTWIStatus->txPacket->rfuPacket32.data;
packetData[0] = arg1;
packetData[1] = unk2;
STWI_start_Command();
}
}
void STWI_send_CPR_PollingREQ(void)
{
if (!STWI_init(ID_CPR_POLL_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_CPR_EndREQ(void)
{
if (!STWI_init(ID_CPR_END_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
void STWI_send_StopModeREQ(void)
{
if (!STWI_init(ID_STOP_MODE_REQ))
{
gSTWIStatus->reqLength = 0;
STWI_start_Command();
}
}
static void STWI_intr_timer(void)
{
switch (gSTWIStatus->timerState)
{
// TODO: Make an enum for these
case 2:
gSTWIStatus->timerActive = 1;
STWI_set_timer(50);
break;
case 1:
case 4:
STWI_stop_timer();
STWI_restart_Command();
break;
case 3:
gSTWIStatus->timerActive = 1;
STWI_stop_timer();
STWI_reset_ClockCounter();
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(255, 0);
break;
}
}
static void STWI_set_timer(u8 unk)
{
vu16 *timerL;
vu16 *timerH;
timerL = &REG_TMCNT_L(gSTWIStatus->timerSelect);
timerH = &REG_TMCNT_H(gSTWIStatus->timerSelect);
REG_IME = 0;
switch (unk)
{
case 50:
*timerL = 0xFCCB;
gSTWIStatus->timerState = 1;
break;
case 80:
*timerL = 0xFAE0;
gSTWIStatus->timerState = 2;
break;
case 100:
*timerL = 0xF996;
gSTWIStatus->timerState = 3;
break;
case 130:
*timerL = 0xF7AD;
gSTWIStatus->timerState = 4;
break;
}
*timerH = TIMER_ENABLE | TIMER_INTR_ENABLE | TIMER_1024CLK;
REG_IF = INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect;
REG_IME = 1;
}
static void STWI_stop_timer(void)
{
gSTWIStatus->timerState = 0;
REG_TMCNT_L(gSTWIStatus->timerSelect) = 0;
REG_TMCNT_H(gSTWIStatus->timerSelect) = 0;
}
static u16 STWI_init(u8 request)
{
if (!REG_IME)
{
gSTWIStatus->error = ERR_REQ_CMD_IME_DISABLE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
else if (gSTWIStatus->unk_2c == TRUE)
{
gSTWIStatus->error = ERR_REQ_CMD_SENDING;
gSTWIStatus->unk_2c = FALSE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error);
return TRUE;
}
else if(!gSTWIStatus->msMode)
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_SLAVE;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(request, gSTWIStatus->error, gSTWIStatus);
return TRUE;
}
else
{
gSTWIStatus->unk_2c = TRUE;
gSTWIStatus->reqActiveCommand = request;
gSTWIStatus->state = 0;
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
gSTWIStatus->ackLength = 0;
gSTWIStatus->ackNext = 0;
gSTWIStatus->ackActiveCommand = 0;
gSTWIStatus->timerState = 0;
gSTWIStatus->timerActive = 0;
gSTWIStatus->error = 0;
gSTWIStatus->recoveryCount = 0;
REG_RCNT = 0x100;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
return FALSE;
}
}
static s32 STWI_start_Command(void)
{
u16 imeTemp;
// equivalent to gSTWIStatus->txPacket->rfuPacket32.command,
// but the cast here is required to avoid register issue
*(u32 *)gSTWIStatus->txPacket->rfuPacket8.data = 0x99660000 | (gSTWIStatus->reqLength << 8) | gSTWIStatus->reqActiveCommand;
REG_SIODATA32 = gSTWIStatus->txPacket->rfuPacket32.command;
gSTWIStatus->state = 0;
gSTWIStatus->reqNext = 1;
imeTemp = REG_IME;
REG_IME = 0;
REG_IE |= (INTR_FLAG_TIMER0 << gSTWIStatus->timerSelect);
REG_IE |= INTR_FLAG_SERIAL;
REG_IME = imeTemp;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_MULTI_BUSY | SIO_115200_BPS;
return 0;
}
static s32 STWI_restart_Command(void)
{
if (gSTWIStatus->recoveryCount <= 1)
{
++gSTWIStatus->recoveryCount;
STWI_start_Command();
}
else
{
if (gSTWIStatus->reqActiveCommand == ID_MS_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_DATA_TX_AND_CHANGE_REQ || gSTWIStatus->reqActiveCommand == ID_UNK35_REQ || gSTWIStatus->reqActiveCommand == ID_RESUME_RETRANSMIT_AND_CHANGE_REQ)
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
gSTWIStatus->unk_2c = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
}
else
{
gSTWIStatus->error = ERR_REQ_CMD_CLOCK_DRIFT;
gSTWIStatus->unk_2c = 0;
if (gSTWIStatus->callbackM != NULL)
gSTWIStatus->callbackM(gSTWIStatus->reqActiveCommand, gSTWIStatus->error);
gSTWIStatus->state = 4; // TODO: what's 4
}
}
return 0;
}
static s32 STWI_reset_ClockCounter(void)
{
gSTWIStatus->state = 5; // TODO: what is 5
gSTWIStatus->reqLength = 0;
gSTWIStatus->reqNext = 0;
REG_SIODATA32 = (1 << 31);
REG_SIOCNT = 0;
REG_SIOCNT = SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS;
REG_SIOCNT = (SIO_INTR_ENABLE | SIO_32BIT_MODE | SIO_115200_BPS) + 0x7F;
return 0;
}
+19 -42
View File
@@ -1,4 +1,9 @@
#include "global.h"
#include "bg.h"
#include "gpu_regs.h"
#include "link.h"
#include "link_rfu.h"
#include "load_save.h"
#include "main.h"
#include "m4a.h"
#include "random.h"
@@ -6,48 +11,20 @@
#include "gba/flash_internal.h"
#include "battle.h"
#include "help_system.h"
#include "sound.h"
#include "new_menu_helpers.h"
#include "malloc.h"
#include "overworld.h"
#include "sprite.h"
#include "play_time.h"
#include "pokemon.h"
#include "intro.h"
#include "battle_controllers.h"
#include "scanline_effect.h"
#include "save_failed_screen.h"
#include "battle.h"
extern u16 GetGpuReg(u8);
extern void SetGpuReg(u8, u16);
extern void RFUVSync(void);
extern void LinkVSync(void);
extern void sub_80FCF34(void);
extern void LinkVSync(void);
extern void InitGpuRegManager(void);
extern void InitRFU(void);
extern void CheckForFlashMemory(void);
extern void InitMapMusic(void);
extern void ResetBgs(void);
extern void SetDefaultFontsPointer(void);
extern void InitHeap(void *heapStart, u32 heapSize); // malloc.h
extern void rfu_REQ_stopMode(void);
extern void rfu_waitREQComplete(void);
extern bool32 sub_80582E0(void);
extern bool32 sub_8058274(void);
extern void ClearSpriteCopyRequests(void);
extern void PlayTimeCounter_Update(void);
extern void MapMusicMain(void);
extern void EnableInterrupts(u16);
extern void sub_800DD28(void);
extern u16 SetFlashTimerIntr(u8 timerNum, void (**intrFunc)(void));
extern void ScanlineEffect_Stop(void);
extern void sub_80F50F4(void);
extern bool32 sub_80F5118(void);
extern struct SoundInfo gSoundInfo;
extern u32 gFlashMemoryPresent;
extern u32 IntrMain[];
extern u8 gHeap[];
extern struct SaveBlock1 gSaveBlock1;
extern struct SaveBlock2 gSaveBlock2;
extern struct PokemonStorage gPokemonStorage;
extern u32 gBattleTypeFlags;
extern u8 gUnknown_03002748;
extern u32 *gUnknown_0203CF5C;
void Timer3Intr(void);
bool8 HandleLinkConnection(void);
void c2_copyright_1(void);
extern u32 intr_main[];
static void VBlankIntr(void);
static void HBlankIntr(void);
@@ -313,7 +290,7 @@ void InitIntrHandlers(void)
for (i = 0; i < INTR_COUNT; i++)
gIntrTable[i] = gIntrTableTemplate[i];
DmaCopy32(3, IntrMain, IntrMain_Buffer, sizeof(IntrMain_Buffer));
DmaCopy32(3, intr_main, IntrMain_Buffer, sizeof(IntrMain_Buffer));
INTR_VECTOR = IntrMain_Buffer;
+1 -1
View File
@@ -552,7 +552,7 @@ static void sub_80F83D0(u8 taskId)
}
}
const struct MapPreviewScreen * sub_80F8544(u8 mapsec)
const struct MapPreviewScreen * GetDungeonMapPreviewScreenInfo(u8 mapsec)
{
u8 idx;
+1 -1
View File
@@ -4201,7 +4201,7 @@ static void sub_8124BB0(struct Pokemon *mon, u8 fieldMove)
Free(ptr);
}
void sub_8124C1C(const u8 *healLocCtrlData) // TODO: confirm the type of data chunk at 0x83F2EE0
void sub_8124C1C(const u8 *healLocCtrlData)
{
const struct MapHeader *mapHeader;
struct FieldMoveWarpParams *ptr2;
+111
View File
@@ -0,0 +1,111 @@
#include "global.h"
#include "data.h"
#include "script.h"
#include "overworld.h"
#include "battle.h"
#include "palette.h"
#include "pokemon.h"
#include "party_menu.h"
#include "field_fadetransition.h"
#include "pokemon_summary_screen.h"
#include "event_data.h"
#include "string_util.h"
#include "constants/moves.h"
static void sub_80BF97C(u8 taskId);
void Special_ChooseMonFromParty(void)
{
u8 taskId;
ScriptContext2_Enable();
taskId = CreateTask(sub_80BF97C, 10);
gTasks[taskId].data[0] = PARTY_MENU_TYPE_CHOOSE_MON;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
}
void Special_SelectMoveTutorMon(void)
{
u8 taskId;
ScriptContext2_Enable();
taskId = CreateTask(sub_80BF97C, 10);
gTasks[taskId].data[0] = PARTY_MENU_TYPE_MOVE_RELEARNER;
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
}
static void sub_80BF97C(u8 taskId)
{
if (!gPaletteFade.active)
{
gPaletteFade.bufferTransferDisabled = TRUE;
ChoosePartyMonByMenuType((u8)gTasks[taskId].data[0]);
DestroyTask(taskId);
}
}
void Special_SelectMove(void)
{
ShowSelectMovePokemonSummaryScreen(gPlayerParty, gSpecialVar_0x8004, gPlayerPartyCount - 1, CB2_ReturnToField, 0);
sub_8138B38(3);
gFieldCallback = FieldCallback_ReturnToEventScript2;
}
void Special_GetNumMovesSelectedMonHas(void)
{
u8 i;
gSpecialVar_Result = 0;
for (i = 0; i < MAX_MON_MOVES; ++i)
if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i) != MOVE_NONE)
++gSpecialVar_Result;
}
void Special_BufferMoveDeleterNicknameAndMove(void)
{
struct Pokemon *mon = &gPlayerParty[gSpecialVar_0x8004];
u16 move = GetMonData(mon, MON_DATA_MOVE1 + gSpecialVar_0x8005);
GetMonNickname(mon, gStringVar1);
StringCopy(gStringVar2, gMoveNames[move]);
}
static void ShiftMoveSlot(struct Pokemon *mon, u8 slotTo, u8 slotFrom)
{
u16 move1 = GetMonData(mon, MON_DATA_MOVE1 + slotTo);
u16 move0 = GetMonData(mon, MON_DATA_MOVE1 + slotFrom);
u8 pp1 = GetMonData(mon, MON_DATA_PP1 + slotTo);
u8 pp0 = GetMonData(mon, MON_DATA_PP1 + slotFrom);
u8 ppBonuses = GetMonData(mon, MON_DATA_PP_BONUSES);
u8 ppBonusMask1 = gPPUpGetMask[slotTo];
u8 ppBonusMove1 = (ppBonuses & ppBonusMask1) >> (slotTo * 2);
u8 ppBonusMask2 = gPPUpGetMask[slotFrom];
u8 ppBonusMove2 = (ppBonuses & ppBonusMask2) >> (slotFrom * 2);
ppBonuses &= ~ppBonusMask1;
ppBonuses &= ~ppBonusMask2;
ppBonuses |= (ppBonusMove1 << (slotFrom * 2)) + (ppBonusMove2 << (slotTo * 2));
SetMonData(mon, MON_DATA_MOVE1 + slotTo, &move0);
SetMonData(mon, MON_DATA_MOVE1 + slotFrom, &move1);
SetMonData(mon, MON_DATA_PP1 + slotTo, &pp0);
SetMonData(mon, MON_DATA_PP1 + slotFrom, &pp1);
SetMonData(mon, MON_DATA_PP_BONUSES, &ppBonuses);
}
void Special_MoveDeleterForgetMove(void)
{
u16 i;
SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], MOVE_NONE, gSpecialVar_0x8005);
RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005);
for (i = gSpecialVar_0x8005; i < MAX_MON_MOVES - 1; ++i)
ShiftMoveSlot(&gPlayerParty[gSpecialVar_0x8004], i, i + 1);
}
void Special_IsSelectedMonEgg(void)
{
if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_IS_EGG))
gSpecialVar_Result = TRUE;
else
gSpecialVar_Result = FALSE;
}
+156
View File
@@ -0,0 +1,156 @@
#include "global.h"
#include "task.h"
#include "gpu_regs.h"
#include "palette.h"
static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority);
static void sub_80A0B0C(u8 taskId);
static void sub_80A0C78(u8 taskId);
void sub_80A0A48(u16 a1, u16 a2, u8 a3)
{
sub_80A0AC0(sub_80A0B0C, a1, a2, a3);
}
void sub_80A0A70(u16 a1, u16 a2, u8 a3)
{
sub_80A0AC0(sub_80A0C78, a1, a2, a3);
}
bool8 sub_80A0A98(void)
{
return FuncIsActiveTask(sub_80A0B0C);
}
bool8 sub_80A0AAC(void)
{
return FuncIsActiveTask(sub_80A0C78);
}
static void sub_80A0AC0(TaskFunc func, u16 a2, UNUSED u16 a3, u8 priority)
{
u8 taskId = CreateTask(func, priority);
gTasks[taskId].data[0] = 0;
gTasks[taskId].data[1] = a2 == 0 ? 16 : a2;
gTasks[taskId].data[2] = a2 == 0 ? 20 : a2;
gTasks[taskId].func(taskId);
}
static void sub_80A0B0C(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
task->data[3] = 120;
task->data[4] = 120;
task->data[5] = 80;
task->data[6] = 81;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 1:
task->data[7] = GetGpuReg(REG_OFFSET_BLDCNT);
task->data[8] = GetGpuReg(REG_OFFSET_BLDY);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 16);
break;
case 2:
task->data[3] -= task->data[1];
task->data[4] += task->data[1];
if (task->data[3] <= 0 || task->data[4] >= DISPLAY_WIDTH)
{
task->data[3] = 0;
task->data[4] = DISPLAY_WIDTH;
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
BlendPalettes(0xFFFFFFFF, 0, RGB_BLACK);
gPlttBufferFaded[0] = 0;
}
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
if (task->data[3])
return;
break;
case 3:
task->data[5] -= task->data[2];
task->data[6] += task->data[2];
if (task->data[5] <= 0 || task->data[6] >= DISPLAY_HEIGHT)
{
task->data[5] = 0;
task->data[6] = DISPLAY_HEIGHT;
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
}
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
if (task->data[5])
return;
break;
default:
SetGpuReg(REG_OFFSET_BLDCNT, task->data[7]);
DestroyTask(taskId);
return;
}
++task->data[0];
}
static void sub_80A0C78(u8 taskId)
{
struct Task *task = &gTasks[taskId];
switch (task->data[0])
{
case 0:
gPlttBufferFaded[0] = 0;
break;
case 1:
task->data[3] = 0;
task->data[4] = DISPLAY_WIDTH;
task->data[5] = 0;
task->data[6] = DISPLAY_HEIGHT;
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR);
SetGpuReg(REG_OFFSET_WINOUT, 0);
break;
case 2:
task->data[5] += task->data[2];
task->data[6] -= task->data[2];
if (task->data[5] >= 80 || task->data[6] <= 81)
{
task->data[5] = 80;
task->data[6] = 81;
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ | BLDCNT_TGT1_BD | BLDCNT_EFFECT_LIGHTEN);
SetGpuReg(REG_OFFSET_BLDY, 16);
}
SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(task->data[5], task->data[6]));
if (task->data[5] != 80)
return;
break;
case 3:
task->data[3] += task->data[1];
task->data[4] -= task->data[1];
if (task->data[3] >= 120 || task->data[4] <= 120)
{
task->data[3] = 120;
task->data[4] = 120;
BlendPalettes(0xFFFFFFFF, 0x10, RGB_BLACK);
gPlttBufferFaded[0] = 0;
}
SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(task->data[3], task->data[4]));
if (task->data[3] != 120)
return;
break;
default:
ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON);
SetGpuReg(REG_OFFSET_BLDY, 0);
SetGpuReg(REG_OFFSET_BLDCNT, 0);
DestroyTask(taskId);
return;
}
++task->data[0];
}
+1 -1
View File
@@ -1,5 +1,5 @@
#include "global.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "event_data.h"
#include "credits.h"
#include "overworld.h"
+2 -2
View File
@@ -3119,7 +3119,7 @@ static const u16 *sub_8113FBC(const u16 *a0)
StringCopy(gStringVar1, ItemId_GetName(r5[0]));
if (r5[0] == ITEM_ESCAPE_ROPE)
{
GetMapNameGeneric(gStringVar2, r5[2]);
GetMapNameGeneric(gStringVar2, (u8)r5[2]);
StringExpandPlaceholders(gStringVar4, gUnknown_841AFA6);
}
else if (r5[1] != 0xFFFF)
@@ -4373,7 +4373,7 @@ static u16 *sub_81157DC(u16 *a0, const u16 *a1)
static const u16 *sub_8115800(const u16 *a0)
{
const u16 *r4 = sub_8113E88(42, a0);
GetMapNameGeneric(gStringVar1, r4[0]);
GetMapNameGeneric(gStringVar1, (u8)r4[0]);
StringExpandPlaceholders(gStringVar4, gUnknown_841B064);
return r4 + 1;
}
+4399
View File
File diff suppressed because it is too large Load Diff
+1 -2
View File
@@ -27,14 +27,13 @@
#include "data.h"
#include "field_specials.h"
#include "constants/items.h"
#include "script_pokemon_util_80A0058.h"
#include "script_pokemon_util.h"
#include "pokemon_storage_system.h"
#include "party_menu.h"
#include "money.h"
#include "coins.h"
#include "battle_setup.h"
#include "shop.h"
#include "script_pokemon_80F8.h"
#include "slot_machine.h"
#include "field_effect.h"
#include "fieldmap.h"
+218
View File
@@ -0,0 +1,218 @@
#include "global.h"
#include "battle.h"
#include "berry.h"
#include "daycare.h"
#include "event_data.h"
#include "event_object_movement.h"
#include "load_save.h"
#include "malloc.h"
#include "overworld.h"
#include "party_menu.h"
#include "pokedex.h"
#include "script_pokemon_util.h"
#include "constants/items.h"
#include "constants/species.h"
#include "constants/pokemon.h"
static void CB2_ReturnFromChooseHalfParty(void);
static void CB2_ReturnFromChooseBattleTowerParty(void);
void HealPlayerParty(void)
{
u8 i, j;
u8 ppBonuses;
u8 arg[4];
// restore HP.
for(i = 0; i < gPlayerPartyCount; i++)
{
u16 maxHP = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP);
arg[0] = maxHP;
arg[1] = maxHP >> 8;
SetMonData(&gPlayerParty[i], MON_DATA_HP, arg);
ppBonuses = GetMonData(&gPlayerParty[i], MON_DATA_PP_BONUSES);
// restore PP.
for(j = 0; j < MAX_MON_MOVES; j++)
{
arg[0] = CalculatePPWithBonus(GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + j), ppBonuses, j);
SetMonData(&gPlayerParty[i], MON_DATA_PP1 + j, arg);
}
// since status is u32, the four 0 assignments here are probably for safety to prevent undefined data from reaching SetMonData.
arg[0] = 0;
arg[1] = 0;
arg[2] = 0;
arg[3] = 0;
SetMonData(&gPlayerParty[i], MON_DATA_STATUS, arg);
}
}
u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
{
u16 nationalDexNum;
int sentToPc;
u8 heldItem[2];
struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon));
CreateMon(mon, species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
heldItem[0] = item;
heldItem[1] = item >> 8;
SetMonData(mon, MON_DATA_HELD_ITEM, heldItem);
sentToPc = GiveMonToPlayer(mon);
nationalDexNum = SpeciesToNationalPokedexNum(species);
switch(sentToPc)
{
case MON_GIVEN_TO_PARTY:
case MON_GIVEN_TO_PC:
GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
break;
}
Free(mon);
return sentToPc;
}
u8 ScriptGiveEgg(u16 species)
{
struct Pokemon *mon = AllocZeroed(sizeof(struct Pokemon));
bool8 isEgg;
bool8 sentToPc;
CreateEgg(mon, species, TRUE);
isEgg = TRUE;
SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
sentToPc = GiveMonToPlayer(mon);
Free(mon);
return sentToPc;
}
void HasEnoughMonsForDoubleBattle(void)
{
switch (GetMonsStateToDoubles())
{
case PLAYER_HAS_TWO_USABLE_MONS:
gSpecialVar_Result = PLAYER_HAS_TWO_USABLE_MONS;
break;
case PLAYER_HAS_ONE_MON:
gSpecialVar_Result = PLAYER_HAS_ONE_MON;
break;
case PLAYER_HAS_ONE_USABLE_MON:
gSpecialVar_Result = PLAYER_HAS_ONE_USABLE_MON;
break;
}
}
static bool8 CheckPartyMonHasHeldItem(u16 item)
{
int i;
for(i = 0; i < PARTY_SIZE; i++)
{
u16 species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
if (species != SPECIES_NONE && species != SPECIES_EGG && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) == item)
return TRUE;
}
return FALSE;
}
bool8 GetNameOfEnigmaBerryInPlayerParty(void)
{
bool8 hasItem = CheckPartyMonHasHeldItem(ITEM_ENIGMA_BERRY);
if (hasItem == TRUE)
GetBerryNameByBerryType(ItemIdToBerryType(ITEM_ENIGMA_BERRY), gStringVar1);
return hasItem;
}
void CreateScriptedWildMon(u16 species, u8 level, u16 item)
{
u8 heldItem[2];
ZeroEnemyPartyMons();
CreateMon(&gEnemyParty[0], species, level, 32, 0, 0, OT_ID_PLAYER_ID, 0);
if (item)
{
heldItem[0] = item;
heldItem[1] = item >> 8;
SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
}
}
void ScriptSetMonMoveSlot(u8 monIndex, u16 move, u8 slot)
{
if (monIndex > PARTY_SIZE)
monIndex = gPlayerPartyCount - 1;
SetMonMoveSlot(&gPlayerParty[monIndex], move, slot);
}
// Note: When control returns to the event script, gSpecialVar_Result will be
// TRUE if the party selection was successful.
void ChooseHalfPartyForBattle(void)
{
gMain.savedCallback = CB2_ReturnFromChooseHalfParty;
// VarSet(VAR_FRONTIER_FACILITY, FACILITY_MULTI_OR_EREADER);
InitChooseHalfPartyForBattle(0);
}
static void CB2_ReturnFromChooseHalfParty(void)
{
switch (gSelectedOrderFromParty[0])
{
case 0:
gSpecialVar_Result = FALSE;
break;
default:
gSpecialVar_Result = TRUE;
break;
}
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
void ChooseBattleTowerPlayerParty(void)
{
gMain.savedCallback = CB2_ReturnFromChooseBattleTowerParty;
InitChooseHalfPartyForBattle(1);
}
static void CB2_ReturnFromChooseBattleTowerParty(void)
{
switch (gSelectedOrderFromParty[0])
{
case 0:
LoadPlayerParty();
gSpecialVar_Result = FALSE;
break;
default:
ReducePlayerPartyToThree();
gSpecialVar_Result = TRUE;
break;
}
SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic);
}
void ReducePlayerPartyToThree(void)
{
struct Pokemon * party = AllocZeroed(3 * sizeof(struct Pokemon));
int i;
// copy the selected pokemon according to the order.
for (i = 0; i < 3; i++)
if (gSelectedOrderFromParty[i]) // as long as the order keeps going (did the player select 1 mon? 2? 3?), do not stop
party[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; // index is 0 based, not literal
CpuFill32(0, gPlayerParty, sizeof gPlayerParty);
// overwrite the first 3 with the order copied to.
for (i = 0; i < 3; i++)
gPlayerParty[i] = party[i];
CalculatePlayerPartyCount();
Free(party);
}
+1 -1
View File
@@ -1180,7 +1180,7 @@ s32 GetStringWidth(u8 fontId, const u8 *str, s16 letterSpacing)
return width;
}
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str)
u8 RenderTextFont9(u8 *pixels, u8 fontId, u8 *str, int a3, int a4, int a5, int a6, int a7)
{
u8 shadowColor;
u8 *strLocal;
+5 -5
View File
@@ -2765,10 +2765,10 @@ static bool32 IsDeoxysOrMewUntradable(u16 species, bool8 isObedientBitSet)
int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, struct UnkLinkRfuStruct_02022B14Substruct a1, u16 species1, u16 species2, u8 type, u16 species3, u8 isObedientBitSet)
{
u8 r9 = a0.unk_01_0;
u8 r4 = a0.unk_00_7;
u8 r10 = a1.unk_01_0;
u8 r0 = a1.unk_00_7;
u8 r9 = a0.hasNationalDex;
u8 r4 = a0.isChampion;
u8 r10 = a1.hasNationalDex;
u8 r0 = a1.isChampion;
u8 r1 = a1.unk_01_2;
u8 r2;
@@ -2845,7 +2845,7 @@ int GetUnionRoomTradeMessageId(struct UnkLinkRfuStruct_02022B14Substruct a0, str
int CanRegisterMonForTradingBoard(struct UnkLinkRfuStruct_02022B14Substruct a0, u16 species, u16 a2, u8 a3)
{
u8 canTradeEggAndNational = a0.unk_01_0;
u8 canTradeEggAndNational = a0.hasNationalDex;
if (IsDeoxysOrMewUntradable(a2, a3))
{
+31 -321
View File
@@ -637,7 +637,6 @@ void sub_810C444(void)
}
}
#ifdef NONMATCHING
bool8 sub_810C4EC(void)
{
if (CheckBagHasItem(ITEM_VS_SEEKER, 1) == TRUE)
@@ -648,18 +647,18 @@ bool8 sub_810C4EC(void)
if (FlagGet(FLAG_SYS_VS_SEEKER_CHARGING) == TRUE)
{
u16 x;
do {
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
} while (0);
u8 x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
u32 r4 = 0xFF;
if (x < 100)
{
x++;
gSaveBlock1Ptr->trainerRematchStepCounter = ((u16)(x << 8)) | (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF);
#ifndef NONMATCHING // fool the compiler that r4 has been changed
asm("":"=r"(r4));
#endif
gSaveBlock1Ptr->trainerRematchStepCounter = (gSaveBlock1Ptr->trainerRematchStepCounter & 0xFF) | (x << 8);
}
do {
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & 0xFF;
} while (0);
x = (gSaveBlock1Ptr->trainerRematchStepCounter >> 8) & r4;
if (x == 100)
{
FlagClear(FLAG_SYS_VS_SEEKER_CHARGING);
@@ -671,80 +670,6 @@ bool8 sub_810C4EC(void)
return FALSE;
}
#else
NAKED
bool8 sub_810C4EC(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmovs r0, 0xB5\n"
"\tlsls r0, 1\n"
"\tmovs r1, 0x1\n"
"\tbl CheckBagHasItem\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x1\n"
"\tbne _0810C516\n"
"\tldr r0, _0810C568 @ =gSaveBlock1Ptr\n"
"\tldr r0, [r0]\n"
"\tmovs r2, 0xC7\n"
"\tlsls r2, 3\n"
"\tadds r1, r0, r2\n"
"\tldrh r2, [r1]\n"
"\tldrb r0, [r1]\n"
"\tcmp r0, 0x63\n"
"\tbhi _0810C516\n"
"\tadds r0, r2, 0x1\n"
"\tstrh r0, [r1]\n"
"_0810C516:\n"
"\tldr r7, _0810C56C @ =0x00000801\n"
"\tadds r0, r7, 0\n"
"\tbl FlagGet\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x1\n"
"\tbne _0810C570\n"
"\tldr r6, _0810C568 @ =gSaveBlock1Ptr\n"
"\tldr r0, [r6]\n"
"\tmovs r5, 0xC7\n"
"\tlsls r5, 3\n"
"\tadds r3, r0, r5\n"
"\tldrh r2, [r3]\n"
"\tlsrs r1, r2, 8\n"
"\tmovs r4, 0xFF\n"
"\tcmp r1, 0x63\n"
"\tbhi _0810C548\n"
"\tadds r1, 0x1\n"
"\tlsls r1, 24\n"
"\tmovs r0, 0xFF\n"
"\tands r0, r2\n"
"\tlsrs r1, 16\n"
"\torrs r0, r1\n"
"\tstrh r0, [r3]\n"
"_0810C548:\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldrh r0, [r0]\n"
"\tlsrs r0, 8\n"
"\tands r0, r4\n"
"\tcmp r0, 0x64\n"
"\tbne _0810C570\n"
"\tadds r0, r7, 0\n"
"\tbl FlagClear\n"
"\tbl sub_810C640\n"
"\tbl sub_810D0D0\n"
"\tmovs r0, 0x1\n"
"\tb _0810C572\n"
"\t.align 2, 0\n"
"_0810C568: .4byte gSaveBlock1Ptr\n"
"_0810C56C: .4byte 0x00000801\n"
"_0810C570:\n"
"\tmovs r0, 0\n"
"_0810C572:\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1");
}
#endif
void sub_810C578(void)
{
@@ -920,13 +845,17 @@ u8 CanUseVsSeeker(void)
}
}
// Nonmatching due to register roulette
#ifdef NONMATCHING
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
{
u16 r8 = 0;
u8 sp0 = 0;
s32 vsSeekerIdx;
u8 *r2;
#ifndef NONMATCHING
register u32 r3 asm("r3");
register s32 r0_ asm("r0");
asm("":::"r10", "r8", "r6", "r4");
#endif
for (vsSeekerIdx = 0; sVsSeeker->trainerInfo[vsSeekerIdx].localId != 0xFF; vsSeekerIdx++)
{
@@ -936,6 +865,7 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
if (!HasTrainerBeenFought(r8))
{
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], gUnknown_8453F60);
sVsSeeker->trainerInfo[vsSeekerIdx].trainerIdx += 0;
sVsSeeker->trainerHasNotYetBeenFought = 1;
}
else
@@ -944,7 +874,15 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
if (r7 == 0)
{
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
#ifdef NONMATCHING
sVsSeeker->trainerDoesNotWantRematch = 1;
#else
r2 = (u8 *)sVsSeeker;
r3 = 0x431;
asm("":::"r1");
r2 = &r2[r3];
*(r2) |= 2;
#endif
}
else
{
@@ -957,7 +895,15 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
if (rval < 30)
{
StartTrainerObjectMovementScript(&sVsSeeker->trainerInfo[vsSeekerIdx], sMovementScript_TrainerNoRematch);
#ifdef NONMATCHING
sVsSeeker->trainerDoesNotWantRematch = 1;
#else
r2 = (u8 *)sVsSeeker;
r0_ = 0x431;
asm("":::"r1");
r2 = &r2[r0_];
*(r2) |= 2;
#endif
}
else
{
@@ -985,242 +931,6 @@ static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
return 1;
return 0;
}
#else
NAKED
static u8 GetVsSeekerResponseInArea(const VsSeekerData * a0)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r10\n"
"\tmov r6, r9\n"
"\tmov r5, r8\n"
"\tpush {r5-r7}\n"
"\tsub sp, 0x8\n"
"\tstr r0, [sp, 0x4]\n"
"\tmovs r0, 0\n"
"\tmov r8, r0\n"
"\tmov r0, sp\n"
"\tmov r1, r8\n"
"\tstrb r1, [r0]\n"
"\tmovs r2, 0\n"
"\tmov r9, r2\n"
"\tldr r4, _0810CA14 @ =sVsSeeker\n"
"\tldr r0, [r4]\n"
"\tldrb r0, [r0, 0x6]\n"
"\tcmp r0, 0xFF\n"
"\tbne _0810C9D0\n"
"\tb _0810CB2C\n"
"_0810C9D0:\n"
"\tadds r6, r4, 0\n"
"\tmovs r3, 0x86\n"
"\tlsls r3, 3\n"
"\tmov r10, r3\n"
"\tmovs r5, 0\n"
"_0810C9DA:\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tbl IsTrainerVisibleOnScreen\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x1\n"
"\tbeq _0810C9EC\n"
"\tb _0810CB18\n"
"_0810C9EC:\n"
"\tldr r0, [r4]\n"
"\tadds r0, r5\n"
"\tldrh r0, [r0, 0x4]\n"
"\tmov r8, r0\n"
"\tbl HasTrainerBeenFought\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbne _0810CA20\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldr r1, _0810CA18 @ =gUnknown_8453F60\n"
"\tbl StartTrainerObjectMovementScript\n"
"\tldr r2, [r6]\n"
"\tldr r0, _0810CA1C @ =0x00000431\n"
"\tadds r2, r0\n"
"\tldrb r0, [r2]\n"
"\tmovs r1, 0x1\n"
"\tb _0810CB14\n"
"\t.align 2, 0\n"
"_0810CA14: .4byte sVsSeeker\n"
"_0810CA18: .4byte gUnknown_8453F60\n"
"_0810CA1C: .4byte 0x00000431\n"
"_0810CA20:\n"
"\tldr r0, [sp, 0x4]\n"
"\tmov r1, r8\n"
"\tmov r2, sp\n"
"\tbl GetNextAvailableRematchTrainer\n"
"\tlsls r0, 24\n"
"\tlsrs r7, r0, 24\n"
"\tcmp r7, 0\n"
"\tbne _0810CA50\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldr r1, _0810CA48 @ =sMovementScript_TrainerNoRematch\n"
"\tbl StartTrainerObjectMovementScript\n"
"\tldr r2, [r6]\n"
"\tldr r3, _0810CA4C @ =0x00000431\n"
"\tadds r2, r3\n"
"\tldrb r0, [r2]\n"
"\tmovs r1, 0x2\n"
"\tb _0810CB14\n"
"\t.align 2, 0\n"
"_0810CA48: .4byte sMovementScript_TrainerNoRematch\n"
"_0810CA4C: .4byte 0x00000431\n"
"_0810CA50:\n"
"\tbl Random\n"
"\tlsls r0, 16\n"
"\tlsrs r0, 16\n"
"\tmovs r1, 0x64\n"
"\tbl __umodsi3\n"
"\tlsls r0, 16\n"
"\tlsrs r4, r0, 16\n"
"\tmov r0, r9\n"
"\tmov r1, r8\n"
"\tbl GetCurVsSeekerResponse\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tcmp r0, 0x2\n"
"\tbne _0810CA76\n"
"\tmovs r4, 0x64\n"
"\tb _0810CA7C\n"
"_0810CA76:\n"
"\tcmp r0, 0x1\n"
"\tbne _0810CA7C\n"
"\tmovs r4, 0\n"
"_0810CA7C:\n"
"\tcmp r4, 0x1D\n"
"\tbhi _0810CAA0\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldr r1, _0810CA98 @ =sMovementScript_TrainerNoRematch\n"
"\tbl StartTrainerObjectMovementScript\n"
"\tldr r2, [r6]\n"
"\tldr r0, _0810CA9C @ =0x00000431\n"
"\tadds r2, r0\n"
"\tldrb r0, [r2]\n"
"\tmovs r1, 0x2\n"
"\tb _0810CB14\n"
"\t.align 2, 0\n"
"_0810CA98: .4byte sMovementScript_TrainerNoRematch\n"
"_0810CA9C: .4byte 0x00000431\n"
"_0810CAA0:\n"
"\tldr r0, _0810CB54 @ =gSaveBlock1Ptr\n"
"\tldr r1, [r0]\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldr r2, _0810CB58 @ =0x0000063a\n"
"\tadds r1, r2\n"
"\tldrb r0, [r0, 0x6]\n"
"\tadds r1, r0\n"
"\tstrb r7, [r1]\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldrb r1, [r0, 0x7]\n"
"\tlsls r0, r1, 3\n"
"\tadds r0, r1\n"
"\tlsls r0, 2\n"
"\tldr r1, _0810CB5C @ =gObjectEvents\n"
"\tadds r0, r1\n"
"\tbl npc_coords_shift_still\n"
"\tldr r0, [r6]\n"
"\tadds r0, r5\n"
"\tldr r1, _0810CB60 @ =sMovementScript_TrainerRematch\n"
"\tbl StartTrainerObjectMovementScript\n"
"\tldr r2, [r6]\n"
"\tmov r3, r10\n"
"\tadds r0, r2, r3\n"
"\tldrb r1, [r0]\n"
"\tlsls r1, 1\n"
"\tmovs r3, 0x80\n"
"\tlsls r3, 3\n"
"\tadds r0, r2, r3\n"
"\tadds r0, r1\n"
"\tmov r1, r8\n"
"\tstrh r1, [r0]\n"
"\tadds r2, r5\n"
"\tldrb r0, [r2, 0xC]\n"
"\tbl GetRunningBehaviorFromGraphicsId\n"
"\tldr r1, [r6]\n"
"\tmov r3, r10\n"
"\tadds r2, r1, r3\n"
"\tmovs r3, 0x84\n"
"\tlsls r3, 3\n"
"\tadds r1, r3\n"
"\tldrb r2, [r2]\n"
"\tadds r1, r2\n"
"\tstrb r0, [r1]\n"
"\tldr r1, [r6]\n"
"\tadd r1, r10\n"
"\tldrb r0, [r1]\n"
"\tadds r0, 0x1\n"
"\tstrb r0, [r1]\n"
"\tldr r2, [r6]\n"
"\tldr r0, _0810CB64 @ =0x00000431\n"
"\tadds r2, r0\n"
"\tldrb r0, [r2]\n"
"\tmovs r1, 0x4\n"
"_0810CB14:\n"
"\torrs r0, r1\n"
"\tstrb r0, [r2]\n"
"_0810CB18:\n"
"\tadds r5, 0x10\n"
"\tmovs r1, 0x1\n"
"\tadd r9, r1\n"
"\tldr r4, _0810CB68 @ =sVsSeeker\n"
"\tldr r0, [r4]\n"
"\tadds r0, r5\n"
"\tldrb r0, [r0, 0x6]\n"
"\tcmp r0, 0xFF\n"
"\tbeq _0810CB2C\n"
"\tb _0810C9DA\n"
"_0810CB2C:\n"
"\tldr r2, _0810CB68 @ =sVsSeeker\n"
"\tldr r0, [r2]\n"
"\tldr r3, _0810CB64 @ =0x00000431\n"
"\tadds r0, r3\n"
"\tldrb r1, [r0]\n"
"\tmovs r0, 0x4\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbeq _0810CB70\n"
"\tmovs r0, 0x15\n"
"\tbl PlaySE\n"
"\tldr r0, _0810CB6C @ =0x00000801\n"
"\tbl FlagSet\n"
"\tbl sub_810C640\n"
"\tmovs r0, 0x2\n"
"\tb _0810CB7E\n"
"\t.align 2, 0\n"
"_0810CB54: .4byte gSaveBlock1Ptr\n"
"_0810CB58: .4byte 0x0000063a\n"
"_0810CB5C: .4byte gObjectEvents\n"
"_0810CB60: .4byte sMovementScript_TrainerRematch\n"
"_0810CB64: .4byte 0x00000431\n"
"_0810CB68: .4byte sVsSeeker\n"
"_0810CB6C: .4byte 0x00000801\n"
"_0810CB70:\n"
"\tmovs r0, 0x1\n"
"\tands r0, r1\n"
"\tcmp r0, 0\n"
"\tbne _0810CB7C\n"
"\tmovs r0, 0\n"
"\tb _0810CB7E\n"
"_0810CB7C:\n"
"\tmovs r0, 0x1\n"
"_0810CB7E:\n"
"\tadd sp, 0x8\n"
"\tpop {r3-r5}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tmov r10, r5\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1");
}
#endif
void sub_810CB90(void)
{
+1 -1
View File
@@ -74,7 +74,7 @@ gUnknown_3000FE8: @ 3000FE8
gUnknown_3001188: @ 3001188
.space 0x8
gUnknown_3001190: @ 3001190
gRfuAPIBuffer: @ 3001190
.space 0xE68
gUnknown_3001FF8: @ 3001FF8
+8 -52
View File
@@ -61,37 +61,8 @@ gUnknown_3005078: @ 3005078
@ what is this?
.space 0x20
gUnknown_3005330: @ 3005330
.space 0x4
gUnknown_3005334: @ 3005334
.space 0x4
gUnknown_3005338: @ 3005338
.space 0x4
gUnknown_300533C: @ 300533C
.space 0x4
gUnknown_3005340: @ 3005340
.space 0x4
gUnknown_3005344: @ 3005344
.space 0x4
gUnknown_3005348: @ 3005348
.space 0x4
gUnknown_300534C: @ 300534C
.space 0x4
gUnknown_3005350: @ 3005350
.space 0x4
gUnknown_3005354: @ 3005354
.space 0xC
.align 2
.include "image_processing_effects.o"
.align 2
.include "field_specials.o"
.align 2
@@ -188,24 +159,9 @@ gUnknown_3005E94: @ 3005E94
.include "berry_fix_program.o"
.include "m4a.o"
.include "agb_flash.o"
gRfuState: @ 3007438
.space 0x8
gUnknown_3007440: @ 3007440
.space 0x10
gUnknown_3007450: @ 3007450
.space 0x10
gUnknown_3007460: @ 3007460
.space 0x4
gUnknown_3007464: @ 3007464
.space 0x4
gUnknown_3007468: @ 3007468
.space 0x8
gUnknown_3007470: @ 3007470
.space 0xC
.align 2
.include "librfu_stwi.o"
.align 4
.include "librfu_rfu.o"
.align 4
.include "librfu_sio32id.o"
+2 -27
View File
@@ -267,35 +267,10 @@ gUnknown_203998C: @ 203998C
.include "src/mail.o"
.align 2
.include "src/menu_helpers.o"
.align 2
.include "src/region_map.o"
.align 2
gUnknown_20399D4: @ 20399D4
.space 0x4
gUnknown_20399D8: @ 20399D8
.space 0x4
gUnknown_20399DC: @ 20399DC
.space 0x4
gUnknown_20399E0: @ 20399E0
.space 0x4
gUnknown_20399E4: @ 20399E4
.space 0x4
gUnknown_20399E8: @ 20399E8
.space 0x4
gUnknown_20399EC: @ 20399EC
.space 0x4
gUnknown_20399F0: @ 20399F0
.space 0xC
gUnknown_20399FC: @ 20399FC
.space 0x4
gAIScriptPtr: @ 2039A00
.space 0x4