Merge branch 'master' of https://github.com/pret/pmd-red into code_big

This commit is contained in:
DizzyEggg 2024-07-21 22:07:35 +02:00
commit afc77f701f
152 changed files with 5248 additions and 6275 deletions

View File

@ -135,7 +135,7 @@ QuickSave:
movs r0, 0
bl xxx_update_some_bg_tiles
bl sub_8014144
bl sub_80097B0
bl InitFontPalette
movs r0, 0x2
bl sub_800CDA8
movs r0, 0
@ -316,7 +316,7 @@ sub_80008C0:
movs r0, 0
bl xxx_update_some_bg_tiles
bl sub_8014144
bl sub_80097B0
bl InitFontPalette
movs r0, 0x2
bl sub_800CDA8
movs r0, 0

View File

@ -193,7 +193,7 @@ _0800FB1C:
ands r0, r1
cmp r0, 0
beq _0800FB2E
bl sub_80117D0
bl PlayAcceptSoundEffect
movs r5, 0x2
_0800FB2E:
ldrh r1, [r4, 0x2]
@ -201,7 +201,7 @@ _0800FB2E:
ands r0, r1
cmp r0, 0
beq _0800FB3E
bl sub_80117E4
bl PlayCancelSoundEffect
movs r5, 0x3
_0800FB3E:
cmp r5, 0
@ -247,7 +247,7 @@ _0800FB7E:
beq _0800FBA2
adds r0, r4, 0
bl MoveMenuCursorDown
bl sub_80117F8
bl PlayCursorUpDownSoundEffect
_0800FBA2:
ldrh r1, [r6, 0x4]
movs r0, 0x40
@ -256,7 +256,7 @@ _0800FBA2:
beq _0800FBB6
adds r0, r4, 0
bl MoveMenuCursorUp
bl sub_80117F8
bl PlayCursorUpDownSoundEffect
_0800FBB6:
ldrh r1, [r6, 0x2]
movs r0, 0x1
@ -269,7 +269,7 @@ _0800FBB6:
cmp r0, 0
beq _0800FC00
_0800FBCA:
bl sub_80117D0
bl PlayAcceptSoundEffect
ldr r1, [r7]
movs r3, 0x18
ldrsh r2, [r4, r3]
@ -301,7 +301,7 @@ _0800FC00:
cmp r0, 0
beq _0800FB7E
_0800FC12:
bl sub_80117E4
bl PlayCancelSoundEffect
_0800FC16:
mov r0, r8
pop {r3}
@ -966,7 +966,7 @@ sub_80100C0:
adds r0, r2
ldr r0, [r0, 0x4]
str r0, [sp, 0x10]
bl sub_80117F8
bl PlayCursorUpDownSoundEffect
movs r7, 0
cmp r7, r8
bge _0801018A
@ -2450,7 +2450,7 @@ _08010D18:
beq _08010D36
add r0, sp, 0x4
bl MoveMenuCursorDown
bl sub_80117F8
bl PlayCursorUpDownSoundEffect
_08010D36:
ldrh r1, [r4, 0x4]
movs r0, 0x40
@ -2459,7 +2459,7 @@ _08010D36:
beq _08010D4A
add r0, sp, 0x4
bl MoveMenuCursorUp
bl sub_80117F8
bl PlayCursorUpDownSoundEffect
_08010D4A:
ldrh r1, [r4, 0x2]
movs r0, 0x1
@ -2472,7 +2472,7 @@ _08010D4A:
cmp r0, 0
beq _08010D18
_08010D5E:
bl sub_80117D0
bl PlayAcceptSoundEffect
add r0, sp, 0x4
movs r1, 0x18
ldrsh r0, [r0, r1]

View File

@ -5,140 +5,6 @@
.text
thumb_func_start sub_803D110
sub_803D110:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x6C
adds r6, r0, 0
mov r9, r1
adds r5, r2, 0
add r7, sp, 0x48
adds r2, r7, 0
movs r1, 0
mov r0, sp
adds r0, 0x69
_0803D12A:
strb r1, [r0]
subs r0, 0x1
cmp r0, r2
bge _0803D12A
movs r4, 0
cmp r4, r5
bge _0803D158
_0803D138:
ldrb r0, [r6]
bl sub_803D0F0
add r1, sp, 0x10
adds r1, r4
strb r0, [r1]
lsls r0, 24
lsrs r0, 24
cmp r0, 0xFF
bne _0803D150
movs r0, 0
b _0803D19A
_0803D150:
adds r6, 0x1
adds r4, 0x1
cmp r4, r5
blt _0803D138
_0803D158:
lsls r0, r5, 2
adds r0, r5
adds r2, r0, 0x5
cmp r2, 0
bge _0803D164
adds r2, 0x7
_0803D164:
asrs r2, 3
mov r8, r2
mov r0, sp
adds r1, r7, 0
bl xxx_init_struct_8094924_save_809486C
movs r4, 0
cmp r4, r5
bge _0803D188
add r6, sp, 0x10
_0803D178:
adds r1, r6, r4
mov r0, sp
movs r2, 0x5
bl SaveIntegerBits
adds r4, 0x1
cmp r4, r5
blt _0803D178
_0803D188:
mov r0, sp
bl nullsub_102
mov r0, r9
adds r1, r7, 0
mov r2, r8
bl MemoryCopy8
movs r0, 0x1
_0803D19A:
add sp, 0x6C
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_803D110
thumb_func_start sub_803D1A8
sub_803D1A8:
push {r4-r7,lr}
sub sp, 0x48
adds r7, r0, 0
adds r5, r2, 0
lsls r0, r5, 2
adds r0, r5
adds r2, r0, 0x5
cmp r2, 0
bge _0803D1BC
adds r2, 0x7
_0803D1BC:
asrs r2, 3
mov r0, sp
bl xxx_init_struct_8094924_restore_809485C
movs r4, 0
cmp r4, r5
bge _0803D1DC
add r6, sp, 0x10
_0803D1CC:
adds r1, r6, r4
mov r0, sp
movs r2, 0x5
bl RestoreIntegerBits
adds r4, 0x1
cmp r4, r5
blt _0803D1CC
_0803D1DC:
mov r0, sp
bl nullsub_102
movs r4, 0
cmp r4, r5
bge _0803D1FC
add r6, sp, 0x10
_0803D1EA:
adds r0, r6, r4
ldrb r0, [r0]
bl sub_803D100
strb r0, [r7]
adds r7, 0x1
adds r4, 0x1
cmp r4, r5
blt _0803D1EA
_0803D1FC:
add sp, 0x48
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_803D1A8
thumb_func_start sub_803D204
sub_803D204:
push {r4-r7,lr}
@ -2514,6 +2380,7 @@ _0803E464: .4byte gUnknown_202EDC8
_0803E468: .4byte gUnknown_202D058
thumb_func_end sub_803E250
@ https://decomp.me/scratch/5arGc (kermalis 100%) `void sub_803E46C(u32)`
thumb_func_start sub_803E46C
sub_803E46C:
push {lr}
@ -2725,6 +2592,7 @@ _0803E660: .4byte 0x00018213
_0803E664: .4byte gUnknown_202EDD4
thumb_func_end sub_803E490
@ https://decomp.me/scratch/biQXr (kermalis 100%) `void sub_803E668(u32)`
thumb_func_start sub_803E668
sub_803E668:
push {r4,lr}
@ -2785,6 +2653,7 @@ _0803E700: .4byte gDungeon
_0803E704: .4byte 0x00018213
thumb_func_end sub_803E668
@ https://decomp.me/scratch/bDSdY (kermalis 100%) `void sub_803E708(s32, u32)`
thumb_func_start sub_803E708
sub_803E708:
push {r4,r5,lr}
@ -3455,7 +3324,7 @@ _0803EC34:
_0803EC46:
movs r0, 0x2
adds r1, r5, 0
bl sub_801602C
bl CreateConfirmNameMenu
b _0803EC84
.align 2, 0
_0803EC50: .4byte gUnknown_203B40C

View File

@ -4532,7 +4532,7 @@ _08054BD8:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_80594E0
bl SandstormMoveAction
bl _080554BA
_08054BE8:
adds r0, r7, 0
@ -5250,7 +5250,7 @@ _08055190:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805785C
bl RainDanceMoveAction
b _080554BA
_0805519E:
adds r0, r7, 0
@ -5313,7 +5313,7 @@ _0805520E:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_805A394
bl SunnyDayMoveAction
b _080554BA
_0805521C:
adds r0, r7, 0
@ -5397,7 +5397,7 @@ _080552B6:
adds r1, r5, 0
mov r2, r8
mov r3, r9
bl sub_80578A4
bl HailMoveAction
b _080554BA
_080552C4:
adds r0, r7, 0

View File

@ -1495,7 +1495,7 @@ _0805FBF4:
adds r4, r0, 0
cmp r4, 0
beq _0805FBF4
bl sub_80160D8
bl CleanConfirmNameMenu
movs r0, 0xE
bl sub_803E46C
movs r0, 0

View File

@ -2120,658 +2120,4 @@ _0806E0F0:
bx r1
thumb_func_end sub_806D528
thumb_func_start sub_806E100
sub_806E100:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x28
adds r6, r0, 0
mov r8, r1
str r2, [sp, 0x18]
lsls r3, 24
lsrs r7, r3, 24
movs r0, 0
mov r9, r0
movs r1, 0
str r1, [sp, 0x20]
mov r2, r8
ldr r2, [r2, 0x70]
str r2, [sp, 0x24]
ldr r3, [sp, 0x18]
ldr r3, [r3, 0x70]
mov r10, r3
adds r0, r6, 0
movs r1, 0x1
bl sub_800A020
mov r0, r9
ldr r4, [sp, 0x48]
strb r0, [r4, 0xD]
strb r0, [r4, 0xE]
movs r1, 0
str r1, [sp, 0x1C]
ldr r0, [sp, 0x18]
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _0806E14E
movs r0, 0x1
b _0806E61A
_0806E14E:
cmp r7, 0x1
beq _0806E156
cmp r7, 0x7
bne _0806E15A
_0806E156:
movs r2, 0x1
str r2, [sp, 0x20]
_0806E15A:
ldr r0, [sp, 0x18]
movs r1, 0x35
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E170
cmp r7, 0
beq _0806E170
movs r3, 0x1
str r3, [sp, 0x1C]
_0806E170:
movs r0, 0x2
ldr r4, [sp, 0x48]
str r0, [r4, 0x8]
movs r5, 0
add r0, sp, 0x10
mov r9, r0
b _0806E1F2
_0806E17E:
mov r1, r10
adds r1, 0x5C
ldr r2, [sp, 0x20]
cmp r2, 0
beq _0806E1B4
adds r0, r1, r5
ldrb r0, [r0]
cmp r0, 0xE
bne _0806E1B4
mov r0, r10
adds r0, 0xF5
ldrb r0, [r0]
cmp r0, 0
bne _0806E1B4
movs r4, 0
ldr r0, _0806E1AC
ldr r0, [r0]
ldr r3, _0806E1B0
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
b _0806E1CA
.align 2, 0
_0806E1AC: .4byte gDungeon
_0806E1B0: .4byte 0x00000179
_0806E1B4:
ldr r2, _0806E4E4
adds r0, r1, r5
ldrb r1, [r0]
lsls r1, 1
lsls r0, r7, 3
adds r0, r7
lsls r0, 2
adds r1, r0
adds r1, r2
movs r0, 0
ldrsh r4, [r1, r0]
_0806E1CA:
cmp r4, 0x2
beq _0806E1DC
lsls r0, r4, 2
add r0, sp
ldr r2, [r0]
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E1DC:
lsls r0, r5, 2
add r0, r9
str r4, [r0]
ldr r0, _0806E4E8
ldr r0, [r0]
movs r1, 0x9E
lsls r1, 1
adds r0, r1
adds r0, r5
strb r4, [r0]
adds r5, 0x1
_0806E1F2:
cmp r5, 0x1
bgt _0806E20E
mov r1, sp
ldr r0, _0806E4EC
ldm r0!, {r2-r4}
stm r1!, {r2-r4}
ldr r0, [r0]
str r0, [r1]
adds r0, r6, 0
bl sub_800A2A0
lsls r0, 24
cmp r0, 0
beq _0806E17E
_0806E20E:
ldr r2, _0806E4F0
mov r1, r9
ldr r0, [r1, 0x4]
lsls r0, 2
ldr r1, [sp, 0x10]
lsls r1, 4
adds r0, r1
adds r0, r2
ldr r0, [r0]
ldr r2, [sp, 0x48]
str r0, [r2, 0x8]
movs r3, 0x1
mov r9, r3
cmp r0, 0x3
beq _0806E240
movs r4, 0
mov r9, r4
ldr r0, [sp, 0x1C]
cmp r0, 0
beq _0806E240
ldr r0, _0806E4F4
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [r6]
str r1, [r6, 0x4]
_0806E240:
cmp r7, 0x2
beq _0806E248
cmp r7, 0x6
bne _0806E26C
_0806E248:
ldr r0, [sp, 0x18]
movs r1, 0x2
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E26C
ldr r0, _0806E4E8
ldr r0, [r0]
ldr r2, _0806E4F8
adds r1, r0, r2
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E4FC
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E26C:
cmp r7, 0x2
bne _0806E2A0
ldr r0, [sp, 0x18]
bl GetFlashFireStatus
lsls r0, 24
cmp r0, 0
beq _0806E2A0
ldr r0, _0806E4E8
ldr r0, [r0]
movs r3, 0xB7
lsls r3, 1
adds r0, r3
movs r4, 0
movs r5, 0x1
strb r5, [r0]
adds r0, r6, 0
movs r1, 0
bl sub_800A020
ldr r0, [sp, 0x48]
str r4, [r0, 0x8]
strb r4, [r0, 0xD]
strb r5, [r0, 0xE]
movs r1, 0
mov r9, r1
_0806E2A0:
cmp r7, 0x9
bne _0806E2D2
ldr r0, [sp, 0x18]
movs r1, 0x37
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E2D2
ldr r0, _0806E4E8
ldr r0, [r0]
ldr r2, _0806E500
adds r0, r2
movs r4, 0
movs r5, 0x1
strb r5, [r0]
adds r0, r6, 0
movs r1, 0
bl sub_800A020
ldr r3, [sp, 0x48]
str r4, [r3, 0x8]
strb r4, [r3, 0xD]
strb r5, [r3, 0xE]
mov r9, r4
_0806E2D2:
cmp r7, 0x3
bne _0806E340
mov r0, r8
movs r1, 0x10
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E340
movs r4, 0
ldr r0, [sp, 0x24]
movs r2, 0x10
ldrsh r1, [r0, r2]
cmp r1, 0
bge _0806E2F2
adds r1, 0x3
_0806E2F2:
asrs r1, 2
ldr r3, [sp, 0x24]
movs r2, 0xE
ldrsh r0, [r3, r2]
cmp r1, r0
blt _0806E300
movs r4, 0x1
_0806E300:
ldr r0, [sp, 0x24]
movs r1, 0x80
adds r2, r4, 0
bl SetVisualFlags
lsls r0, 24
lsrs r5, r0, 24
cmp r4, 0
beq _0806E32A
ldr r0, _0806E4E8
ldr r0, [r0]
movs r3, 0xB8
lsls r3, 1
adds r0, r3
movs r1, 0x1
strb r1, [r0]
ldr r2, _0806E504
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E32A:
cmp r5, 0
beq _0806E340
mov r0, r8
bl sub_80428EC
ldr r0, _0806E508
ldr r2, [r0]
mov r0, r8
ldr r1, [sp, 0x18]
bl sub_80522F4
_0806E340:
cmp r7, 0x4
bne _0806E3AC
mov r0, r8
movs r1, 0x1A
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E3AC
movs r4, 0
ldr r0, [sp, 0x24]
movs r2, 0x10
ldrsh r1, [r0, r2]
cmp r1, 0
bge _0806E360
adds r1, 0x3
_0806E360:
asrs r1, 2
ldr r3, [sp, 0x24]
movs r2, 0xE
ldrsh r0, [r3, r2]
cmp r1, r0
blt _0806E36E
movs r4, 0x1
_0806E36E:
ldr r0, [sp, 0x24]
movs r1, 0x2
adds r2, r4, 0
bl SetVisualFlags
lsls r0, 24
lsrs r5, r0, 24
cmp r4, 0
beq _0806E396
ldr r0, _0806E4E8
ldr r0, [r0]
ldr r3, _0806E50C
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E504
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E396:
cmp r5, 0
beq _0806E3AC
mov r0, r8
bl sub_80428D8
ldr r0, _0806E510
ldr r2, [r0]
mov r0, r8
ldr r1, [sp, 0x18]
bl sub_80522F4
_0806E3AC:
cmp r7, 0xC
bne _0806E41A
mov r0, r8
movs r1, 0x43
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E41A
movs r4, 0
ldr r0, [sp, 0x24]
movs r2, 0x10
ldrsh r1, [r0, r2]
cmp r1, 0
bge _0806E3CC
adds r1, 0x3
_0806E3CC:
asrs r1, 2
ldr r3, [sp, 0x24]
movs r2, 0xE
ldrsh r0, [r3, r2]
cmp r1, r0
blt _0806E3DA
movs r4, 0x1
_0806E3DA:
ldr r0, [sp, 0x24]
movs r1, 0x10
adds r2, r4, 0
bl SetVisualFlags
lsls r0, 24
lsrs r5, r0, 24
cmp r4, 0
beq _0806E404
ldr r0, _0806E4E8
ldr r0, [r0]
movs r3, 0xB9
lsls r3, 1
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E504
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E404:
cmp r5, 0
beq _0806E41A
mov r0, r8
bl sub_8042978
ldr r0, _0806E514
ldr r2, [r0]
mov r0, r8
ldr r1, [sp, 0x18]
bl sub_80522F4
_0806E41A:
cmp r7, 0x2
bne _0806E486
mov r0, r8
movs r1, 0x46
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0806E486
movs r4, 0
ldr r0, [sp, 0x24]
movs r2, 0x10
ldrsh r1, [r0, r2]
cmp r1, 0
bge _0806E43A
adds r1, 0x3
_0806E43A:
asrs r1, 2
ldr r3, [sp, 0x24]
movs r2, 0xE
ldrsh r0, [r3, r2]
cmp r1, r0
blt _0806E448
movs r4, 0x1
_0806E448:
ldr r0, [sp, 0x24]
movs r1, 0x20
adds r2, r4, 0
bl SetVisualFlags
lsls r0, 24
lsrs r5, r0, 24
cmp r4, 0
beq _0806E470
ldr r0, _0806E4E8
ldr r0, [r0]
ldr r3, _0806E518
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E504
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E470:
cmp r5, 0
beq _0806E486
mov r0, r8
bl sub_804298C
ldr r0, _0806E51C
ldr r2, [r0]
mov r0, r8
ldr r1, [sp, 0x18]
bl sub_80522F4
_0806E486:
adds r0, r6, 0
bl sub_800A2A0
lsls r0, 24
cmp r0, 0
bne _0806E4B8
mov r0, r8
adds r1, r7, 0
bl MonsterIsType
lsls r0, 24
cmp r0, 0
beq _0806E4B8
ldr r0, _0806E4E8
ldr r0, [r0]
movs r4, 0xBA
lsls r4, 1
adds r0, r4
movs r1, 0x1
strb r1, [r0]
ldr r2, _0806E520
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E4B8:
mov r0, r8
bl GetApparentWeather
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0x1
bne _0806E53E
cmp r7, 0x2
bne _0806E524
ldr r0, _0806E4E8
ldr r0, [r0]
movs r1, 0xB6
lsls r1, 1
adds r0, r1
strb r4, [r0]
ldr r2, _0806E520
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
b _0806E53E
.align 2, 0
_0806E4E4: .4byte gTypeEffectivenessChart
_0806E4E8: .4byte gDungeon
_0806E4EC: .4byte gUnknown_8106F54
_0806E4F0: .4byte gUnknown_80F54B4
_0806E4F4: .4byte gUnknown_8106EFC
_0806E4F8: .4byte 0x0000016d
_0806E4FC: .4byte gUnknown_8106F1C
_0806E500: .4byte 0x0000016f
_0806E504: .4byte gUnknown_8106F0C
_0806E508: .4byte gUnknown_80FEDA8
_0806E50C: .4byte 0x00000171
_0806E510: .4byte gUnknown_80FED88
_0806E514: .4byte gUnknown_80FEDC8
_0806E518: .4byte 0x00000173
_0806E51C: .4byte gUnknown_80FEDE8
_0806E520: .4byte gUnknown_8106F14
_0806E524:
cmp r7, 0x3
bne _0806E53E
ldr r0, _0806E560
ldr r0, [r0]
movs r2, 0xB6
lsls r2, 1
adds r0, r2
strb r4, [r0]
ldr r2, _0806E564
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E53E:
cmp r4, 0x4
bne _0806E586
cmp r7, 0x2
bne _0806E56C
ldr r0, _0806E560
ldr r0, [r0]
ldr r3, _0806E568
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E564
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
b _0806E586
.align 2, 0
_0806E560: .4byte gDungeon
_0806E564: .4byte gUnknown_8106F1C
_0806E568: .4byte 0x0000016b
_0806E56C:
cmp r7, 0x3
bne _0806E586
ldr r0, _0806E62C
ldr r0, [r0]
ldr r2, _0806E630
adds r1, r0, r2
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E634
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E586:
cmp r4, 0x3
bne _0806E5A6
cmp r7, 0x1
beq _0806E5A6
ldr r2, _0806E638
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
ldr r0, _0806E62C
ldr r0, [r0]
movs r3, 0xB5
lsls r3, 1
adds r1, r0, r3
movs r0, 0x1
strb r0, [r1]
_0806E5A6:
ldr r0, _0806E62C
ldr r1, [r0]
ldr r2, _0806E63C
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _0806E5B8
cmp r4, 0x6
bne _0806E5CE
_0806E5B8:
cmp r7, 0x5
bne _0806E5CE
ldr r3, _0806E640
adds r1, r3
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E644
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E5CE:
ldr r0, _0806E62C
ldr r1, [r0]
ldr r4, _0806E648
adds r0, r1, r4
ldrb r0, [r0]
cmp r0, 0
beq _0806E5F4
cmp r7, 0x2
bne _0806E5F4
movs r0, 0xBB
lsls r0, 1
adds r1, r0
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E644
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E5F4:
cmp r7, 0x5
bne _0806E618
ldr r0, [sp, 0x24]
adds r0, 0xC0
ldrb r0, [r0]
cmp r0, 0xB
bne _0806E618
ldr r0, _0806E62C
ldr r0, [r0]
ldr r2, _0806E64C
adds r1, r0, r2
movs r0, 0x1
strb r0, [r1]
ldr r2, _0806E650
adds r0, r6, 0
adds r1, r6, 0
bl sub_800A34C
_0806E618:
mov r0, r9
_0806E61A:
add sp, 0x28
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0806E62C: .4byte gDungeon
_0806E630: .4byte 0x0000016b
_0806E634: .4byte gUnknown_8106F14
_0806E638: .4byte gUnknown_8106F64
_0806E63C: .4byte 0x0000e277
_0806E640: .4byte 0x00000175
_0806E644: .4byte gUnknown_8106F1C
_0806E648: .4byte 0x0000e278
_0806E64C: .4byte 0x00000177
_0806E650: .4byte gUnknown_8106F0C
thumb_func_end sub_806E100
.align 2, 0

View File

@ -5,152 +5,6 @@
.text
thumb_func_start sub_8081AD4
sub_8081AD4:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrb r1, [r4]
bl sub_8083060
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
adds r1, r4, 0x2
adds r0, r5, 0
movs r2, 0x2
bl sub_8082FA8
ldrb r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083060
ldrb r1, [r4, 0x5]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081AD4
thumb_func_start sub_8081B08
sub_8081B08:
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
adds r4, r7, 0
movs r5, 0x3
_08081B12:
adds r0, r6, 0
adds r1, r4, 0
bl sub_8081AD4
adds r4, 0x8
subs r5, 0x1
cmp r5, 0
bge _08081B12
adds r0, r7, 0
adds r0, 0x20
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8083060
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8081B08
thumb_func_start sub_8081B34
sub_8081B34:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r0, 0
ldrsh r1, [r4, r0]
adds r0, r5, 0
bl sub_8083048
movs r0, 0x2
ldrsh r1, [r4, r0]
adds r0, r5, 0
bl sub_8083048
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081B34
thumb_func_start sub_8081B54
sub_8081B54:
push {lr}
movs r2, 0x3
bl sub_8082FA8
pop {r0}
bx r0
thumb_func_end sub_8081B54
thumb_func_start sub_8081B60
sub_8081B60:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrh r1, [r4]
bl sub_8083030
ldrh r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083030
adds r1, r4, 0
adds r1, 0x9
adds r0, r5, 0
movs r2, 0x1
bl sub_8082FA8
adds r4, 0xE
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x1
bl sub_8082FA8
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081B60
thumb_func_start sub_8081B94
sub_8081B94:
push {r4-r6,lr}
adds r6, r0, 0
adds r5, r1, 0
movs r2, 0x1
bl sub_8082FA8
adds r1, r5, 0x1
adds r0, r6, 0
movs r2, 0x1
bl sub_8082FA8
movs r4, 0
_08081BAC:
adds r0, r5, 0x3
adds r0, r4
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8083060
adds r0, r5, 0
adds r0, 0xB
adds r0, r4
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8083060
adds r4, 0x1
cmp r4, 0x7
ble _08081BAC
ldrb r1, [r5, 0x2]
adds r0, r6, 0
bl sub_8083060
ldrb r1, [r5, 0x13]
adds r0, r6, 0
bl sub_8083060
ldrb r1, [r5, 0x14]
adds r0, r6, 0
bl sub_8083060
ldrb r1, [r5, 0x15]
adds r0, r6, 0
bl sub_80830B4
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_8081B94
thumb_func_start sub_8081BF4
sub_8081BF4:
push {lr}

View File

@ -693,6 +693,7 @@ _08084768:
_08084774: .4byte gUnknown_80FA3B8
thumb_func_end sub_80845E0
@ https://decomp.me/scratch/vELLj (kermalis 100%) `void sub_8084778(void)`
thumb_func_start sub_8084778
sub_8084778:
push {r4,lr}

View File

@ -5,6 +5,7 @@
.text
@ https://decomp.me/scratch/GE070 (kermalis 100%) `void sub_8085B4C(struct_8085B80 *, s16 **, Entity **, s32)` idk the structs
thumb_func_start sub_8085B4C
sub_8085B4C:
push {r4-r6,lr}
@ -37,6 +38,7 @@ _08085B76:
_08085B7C: .4byte gUnknown_202F3D8
thumb_func_end sub_8085B4C
@ https://decomp.me/scratch/lb4jF (kermalis 87.53%) `bool8 sub_8085B80(struct_8085B80 *)`
thumb_func_start sub_8085B80
sub_8085B80:
push {r4-r7,lr}
@ -450,6 +452,7 @@ _08085E90: .4byte gUnknown_202ECA4
_08085E94: .4byte 0x000181e4
thumb_func_end SetDungeonBGColorRGB
@ gDungeon->field_0x18215 = 0;
thumb_func_start sub_8085E98
sub_8085E98:
ldr r0, _08085EA8
@ -789,6 +792,7 @@ _080861A0: .4byte gUnknown_81066F0
_080861A4: .4byte gUnknown_810671C
thumb_func_end sub_8086130
@ `sub_806CDD4(a0, 0, 8);`
thumb_func_start sub_80861A8
sub_80861A8:
push {lr}

View File

@ -5,45 +5,6 @@
.text
thumb_func_start sub_8094D28
sub_8094D28:
push {r4-r7,lr}
ldr r2, _08094D64
str r0, [r2]
ldr r1, _08094D68
movs r0, 0x1
str r0, [r1]
ldr r7, _08094D6C
adds r5, r2, 0
adds r4, r1, 0
ldr r6, _08094D70
_08094D3C:
ldr r2, [r4]
lsls r3, r2, 2
adds r3, r5
subs r0, r2, 0x1
lsls r0, 2
adds r0, r5
ldr r0, [r0]
lsrs r1, r0, 30
eors r0, r1
muls r0, r6
adds r0, r2
str r0, [r3]
adds r2, 0x1
str r2, [r4]
cmp r2, r7
ble _08094D3C
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08094D64: .4byte gUnknown_3001198
_08094D68: .4byte gUnknown_203B470
_08094D6C: .4byte 0x0000026f
_08094D70: .4byte 0x6c078965
thumb_func_end sub_8094D28
thumb_func_start sub_8094D74
sub_8094D74:
push {r4-r7,lr}

View File

@ -1,229 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start GenerateMailJobInfo
GenerateMailJobInfo:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
ldr r4, _08095B44
add sp, r4
adds r4, r0, 0
bl GenerateMailJobDungeonInfo
lsls r0, 24
cmp r0, 0
bne _08095B48
movs r0, 0
b _08095CCC
.align 2, 0
_08095B44: .4byte 0xfffffcb0
_08095B48:
movs r0, 0x5
strb r0, [r4]
movs r0, 0x8
bl RandInt
ldr r1, _08095BC8
adds r0, r1
ldrb r0, [r0]
strb r0, [r4, 0x1]
cmp r0, 0x2
bne _08095B6C
bl GetRescueTeamRank
lsls r0, 24
lsrs r0, 24
cmp r0, 0
bne _08095B6C
strb r0, [r4, 0x1]
_08095B6C:
movs r0, 0
strb r0, [r4, 0x2]
bl Rand32Bit
ldr r1, _08095BCC
ands r1, r0
str r1, [r4, 0x8]
movs r7, 0
movs r5, 0x1
adds r0, r4, 0x4
mov r8, r0
movs r1, 0x12
adds r1, r4
mov r9, r1
mov r6, sp
_08095B8A:
lsls r0, r5, 16
asrs r0, 16
bl sub_803C110
lsls r0, 24
cmp r0, 0
beq _08095B9E
strh r5, [r6]
adds r6, 0x2
adds r7, 0x1
_08095B9E:
adds r5, 0x1
ldr r0, _08095BD0
cmp r5, r0
ble _08095B8A
cmp r7, 0
beq _08095BD4
adds r0, r7, 0
bl RandInt
lsls r0, 1
add r0, sp
ldrh r0, [r0]
strh r0, [r4, 0xC]
adds r0, r7, 0
bl RandInt
lsls r0, 1
add r0, sp
ldrh r0, [r0]
b _08095BDC
.align 2, 0
_08095BC8: .4byte gUnknown_8109984
_08095BCC: .4byte 0x00ffffff
_08095BD0: .4byte 0x000001a7
_08095BD4:
movs r0, 0x10
strh r0, [r4, 0xC]
movs r0, 0x91
lsls r0, 1
_08095BDC:
strh r0, [r4, 0xE]
ldrb r0, [r4, 0x1]
subs r0, 0x1
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
bls _08095BEE
ldrh r0, [r4, 0xC]
strh r0, [r4, 0xE]
_08095BEE:
ldrb r0, [r4, 0x4]
bl sub_8095F28
strb r0, [r4, 0x10]
lsls r0, 24
lsrs r0, 24
cmp r0, 0
bne _08095C10
strb r0, [r4, 0x1]
ldrh r0, [r4, 0xC]
strh r0, [r4, 0xE]
adds r2, r4, 0
adds r2, 0x10
mov r0, r8
movs r1, 0
bl sub_803C37C
_08095C10:
ldrb r0, [r4, 0x4]
bl GetMaxItemsAllowed
adds r1, r0, 0
cmp r1, 0
bne _08095C28
ldrb r0, [r4, 0x1]
cmp r0, 0x4
bne _08095C28
strb r1, [r4, 0x1]
ldrh r0, [r4, 0xC]
strh r0, [r4, 0xE]
_08095C28:
ldrb r1, [r4, 0x1]
mov r0, r8
mov r2, r9
bl sub_803C37C
ldrb r0, [r4, 0x10]
ldrb r1, [r4, 0x12]
cmp r0, r1
beq _08095C28
movs r0, 0
strb r0, [r4, 0x13]
ldrb r0, [r4, 0x1]
cmp r0, 0x2
beq _08095C90
cmp r0, 0x2
bgt _08095C4E
cmp r0, 0x1
beq _08095C6C
b _08095CCA
_08095C4E:
cmp r0, 0x4
bgt _08095CCA
bl Rand32Bit
adds r1, r0, 0
movs r0, 0xE0
lsls r0, 3
ands r1, r0
movs r0, 0xC0
lsls r0, 2
cmp r1, r0
beq _08095CC4
cmp r1, r0
bgt _08095CB4
b _08095CAA
_08095C6C:
bl Rand32Bit
adds r1, r0, 0
movs r0, 0x70
ands r1, r0
cmp r1, 0x10
beq _08095C80
cmp r1, 0x30
beq _08095C88
b _08095CCA
_08095C80:
adds r0, r4, 0
bl sub_803C3E0
b _08095CCA
_08095C88:
adds r0, r4, 0
bl sub_803C45C
b _08095CCA
_08095C90:
bl Rand32Bit
movs r1, 0xC0
lsls r1, 6
ands r1, r0
movs r0, 0x80
lsls r0, 5
cmp r1, r0
bne _08095CCA
adds r0, r4, 0
bl sub_803C4F0
b _08095CCA
_08095CAA:
movs r0, 0x80
lsls r0, 1
cmp r1, r0
beq _08095CBC
b _08095CCA
_08095CB4:
movs r0, 0xC0
lsls r0, 3
cmp r1, r0
bne _08095CCA
_08095CBC:
adds r0, r4, 0
bl sub_803C580
b _08095CCA
_08095CC4:
adds r0, r4, 0
bl sub_803C610
_08095CCA:
movs r0, 0x1
_08095CCC:
movs r3, 0xD4
lsls r3, 2
add sp, r3
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end GenerateMailJobInfo
.align 2,0

View File

@ -1,96 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8096078
sub_8096078:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
movs r2, 0
movs r3, 0
ldr r0, _08096090
mov r12, r0
mov r8, r3
movs r4, 0
mov r9, r4
b _080960B6
.align 2, 0
_08096090: .4byte gUnknown_203B490
_08096094:
cmp r2, r3
ble _080960AA
mov r1, r12
ldr r0, [r1]
mov r5, r8
adds r1, r0, r5
adds r0, r4
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r6,r7}
stm r1!, {r6,r7}
_080960AA:
adds r4, 0x14
movs r0, 0x14
add r9, r0
adds r2, 0x1
add r8, r0
adds r3, 0x1
_080960B6:
cmp r2, 0x3
bgt _080960E2
mov r1, r12
ldr r0, [r1]
adds r0, r4
ldrb r0, [r0]
cmp r0, 0
bne _080960E2
ldr r6, _08096110
mov r1, r9
_080960CA:
adds r1, 0x14
adds r4, 0x14
movs r5, 0x14
add r9, r5
adds r2, 0x1
cmp r2, 0x3
bgt _080960E2
ldr r0, [r6]
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
beq _080960CA
_080960E2:
cmp r2, 0x4
bne _08096094
cmp r3, 0x3
bgt _08096102
ldr r4, _08096110
movs r2, 0
lsls r0, r3, 2
adds r0, r3
lsls r1, r0, 2
_080960F4:
ldr r0, [r4]
adds r0, r1
strb r2, [r0]
adds r1, 0x14
adds r3, 0x1
cmp r3, 0x3
ble _080960F4
_08096102:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08096110: .4byte gUnknown_203B490
thumb_func_end sub_8096078
.align 2,0

View File

@ -1,101 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8096C80
sub_8096C80:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
movs r2, 0
movs r3, 0
ldr r0, _08096C98
mov r12, r0
mov r8, r3
movs r4, 0
mov r9, r4
b _08096CC2
.align 2, 0
_08096C98: .4byte gUnknown_203B490
_08096C9C:
cmp r2, r3
ble _08096CB6
mov r1, r12
ldr r0, [r1]
mov r5, r8
adds r1, r0, r5
adds r0, r4
adds r1, 0xF0
adds r0, 0xF0
ldm r0!, {r5-r7}
stm r1!, {r5-r7}
ldm r0!, {r6,r7}
stm r1!, {r6,r7}
_08096CB6:
adds r4, 0x14
movs r0, 0x14
add r9, r0
adds r2, 0x1
add r8, r0
adds r3, 0x1
_08096CC2:
cmp r2, 0x7
bgt _08096CF2
mov r1, r12
ldr r0, [r1]
adds r0, r4
adds r0, 0xF0
ldrb r0, [r0]
cmp r0, 0
bne _08096CF2
ldr r6, _08096D20
mov r1, r9
_08096CD8:
adds r1, 0x14
adds r4, 0x14
movs r5, 0x14
add r9, r5
adds r2, 0x1
cmp r2, 0x7
bgt _08096CF2
ldr r0, [r6]
adds r0, r1
adds r0, 0xF0
ldrb r0, [r0]
cmp r0, 0
beq _08096CD8
_08096CF2:
cmp r2, 0x8
bne _08096C9C
cmp r3, 0x7
bgt _08096D14
ldr r4, _08096D20
movs r2, 0
lsls r0, r3, 2
adds r0, r3
lsls r1, r0, 2
_08096D04:
ldr r0, [r4]
adds r0, r1
adds r0, 0xF0
strb r2, [r0]
adds r1, 0x14
adds r3, 0x1
cmp r3, 0x7
ble _08096D04
_08096D14:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08096D20: .4byte gUnknown_203B490
thumb_func_end sub_8096C80
.align 2,0

View File

@ -1,386 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8097944
sub_8097944:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x8
movs r0, 0x1
str r0, [sp]
movs r1, 0x1
str r1, [sp, 0x4]
movs r0, 0xD
bl sub_8097710
lsls r0, 24
cmp r0, 0
bne _08097974
bl HasAllFriendAreas
lsls r0, 24
cmp r0, 0
beq _08097974
movs r0, 0xD
bl sub_80976F8
_08097974:
movs r4, 0
ldr r0, _08097B5C
mov r10, r0
mov r8, r4
_0809797C:
ldr r1, _08097B60
ldr r0, [r1]
mov r1, r8
adds r2, r1, r0
ldrb r1, [r2]
movs r0, 0x1
ands r0, r1
cmp r0, 0
beq _080979F6
movs r0, 0x8
ldrsh r3, [r2, r0]
mov r1, r10
ldr r2, [r1]
adds r0, r3, 0
cmp r3, 0
bge _0809799E
adds r0, 0x1F
_0809799E:
asrs r0, 5
lsls r1, r0, 2
adds r2, 0x1C
adds r2, r1
lsls r0, 5
subs r0, r3, r0
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
orrs r0, r1
str r0, [r2]
ldr r0, _08097B60
mov r9, r0
mov r12, r8
movs r7, 0x1
movs r6, 0x2C
movs r5, 0x3
_080979C0:
mov r1, r9
ldr r0, [r1]
add r0, r12
adds r3, r0, r6
ldrb r1, [r3]
adds r0, r7, 0
ands r0, r1
cmp r0, 0
beq _080979EE
mov r0, r10
ldr r2, [r0]
ldrh r3, [r3, 0x2]
lsrs r0, r3, 5
lsls r0, 2
adds r2, 0x8C
adds r2, r0
movs r0, 0x1F
ands r3, r0
adds r1, r7, 0
lsls r1, r3
ldr r0, [r2]
orrs r0, r1
str r0, [r2]
_080979EE:
adds r6, 0x8
subs r5, 0x1
cmp r5, 0
bge _080979C0
_080979F6:
movs r1, 0x58
add r8, r1
adds r4, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
ble _0809797C
movs r4, 0
ldr r1, _08097B64
_08097A08:
cmp r4, 0
bne _08097A0E
b _08097B80
_08097A0E:
ldr r0, _08097B68
cmp r4, r0
bne _08097A16
b _08097B80
_08097A16:
adds r0, 0x1
cmp r4, r0
bne _08097A1E
b _08097B80
_08097A1E:
adds r0, 0x1
cmp r4, r0
bne _08097A26
b _08097B80
_08097A26:
adds r0, 0x26
cmp r4, r0
bne _08097A2E
b _08097B80
_08097A2E:
adds r0, 0x1
cmp r4, r0
bne _08097A36
b _08097B80
_08097A36:
adds r0, 0x1
cmp r4, r0
bne _08097A3E
b _08097B80
_08097A3E:
adds r0, 0x1
cmp r4, r0
bne _08097A46
b _08097B80
_08097A46:
adds r0, 0x1
cmp r4, r0
bne _08097A4E
b _08097B80
_08097A4E:
adds r0, 0x1
cmp r4, r0
bne _08097A56
b _08097B80
_08097A56:
cmp r4, r1
bne _08097A5C
b _08097B80
_08097A5C:
ldr r0, _08097B5C
ldr r5, [r0]
adds r0, r4, 0
cmp r4, 0
bge _08097A68
adds r0, 0x1F
_08097A68:
asrs r0, 5
lsls r3, r0, 2
adds r1, r5, 0
adds r1, 0x54
adds r1, r3
lsls r0, 5
subs r0, r4, r0
movs r2, 0x1
lsls r2, r0
ldr r0, [r1]
ands r0, r2
cmp r0, 0
bne _08097A86
movs r0, 0
str r0, [sp, 0x4]
_08097A86:
adds r0, r5, 0
adds r0, 0x1C
adds r0, r3
ldr r0, [r0]
ands r0, r2
cmp r0, 0
beq _08097B7C
cmp r4, 0x92
bne _08097A9E
movs r0, 0x10
bl sub_80976F8
_08097A9E:
cmp r4, 0x91
bne _08097AA8
movs r0, 0x11
bl sub_80976F8
_08097AA8:
cmp r4, 0x90
bne _08097AB2
movs r0, 0x12
bl sub_80976F8
_08097AB2:
movs r0, 0xCF
lsls r0, 1
cmp r4, r0
bne _08097AC0
movs r0, 0x13
bl sub_80976F8
_08097AC0:
ldr r0, _08097B6C
cmp r4, r0
bne _08097ACC
movs r0, 0x14
bl sub_80976F8
_08097ACC:
movs r0, 0x86
lsls r0, 1
cmp r4, r0
bne _08097ADA
movs r0, 0x15
bl sub_80976F8
_08097ADA:
movs r0, 0x87
lsls r0, 1
cmp r4, r0
bne _08097AE8
movs r0, 0x16
bl sub_80976F8
_08097AE8:
ldr r0, _08097B70
cmp r4, r0
bne _08097AF4
movs r0, 0x17
bl sub_80976F8
_08097AF4:
movs r0, 0xCD
lsls r0, 1
cmp r4, r0
bne _08097B02
movs r0, 0x18
bl sub_80976F8
_08097B02:
ldr r0, _08097B74
cmp r4, r0
bne _08097B0E
movs r0, 0x19
bl sub_80976F8
_08097B0E:
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
bne _08097B1C
movs r0, 0x1A
bl sub_80976F8
_08097B1C:
movs r0, 0x89
lsls r0, 1
cmp r4, r0
bne _08097B2A
movs r0, 0x1B
bl sub_80976F8
_08097B2A:
movs r0, 0x8A
lsls r0, 1
cmp r4, r0
bne _08097B38
movs r0, 0x1C
bl sub_80976F8
_08097B38:
cmp r4, 0x97
bne _08097B42
movs r0, 0x1D
bl sub_80976F8
_08097B42:
cmp r4, 0x96
bne _08097B4C
movs r0, 0x1E
bl sub_80976F8
_08097B4C:
ldr r0, _08097B78
cmp r4, r0
bne _08097B80
movs r0, 0x1F
bl sub_80976F8
b _08097B80
.align 2, 0
_08097B5C: .4byte gUnknown_203B494
_08097B60: .4byte gRecruitedPokemonRef
_08097B64: .4byte 0x000001a7
_08097B68: .4byte 0x00000179
_08097B6C: .4byte 0x0000010d
_08097B70: .4byte 0x00000113
_08097B74: .4byte 0x0000019b
_08097B78: .4byte 0x0000019d
_08097B7C:
movs r1, 0
str r1, [sp]
_08097B80:
adds r4, 0x1
ldr r1, _08097C0C
cmp r4, r1
bgt _08097B8A
b _08097A08
_08097B8A:
ldr r0, [sp]
cmp r0, 0
beq _08097B96
movs r0, 0xF
bl sub_80976F8
_08097B96:
ldr r1, [sp, 0x4]
cmp r1, 0
beq _08097BA2
movs r0, 0xE
bl sub_80976F8
_08097BA2:
movs r3, 0
movs r4, 0
_08097BA6:
cmp r4, 0
beq _08097BE2
ldr r0, _08097C10
cmp r4, r0
beq _08097BE2
adds r0, 0x1
cmp r4, r0
beq _08097BE2
adds r0, 0x1
cmp r4, r0
beq _08097BE2
ldr r0, _08097C14
ldr r2, [r0]
adds r0, r4, 0
cmp r4, 0
bge _08097BC8
adds r0, 0x1F
_08097BC8:
asrs r0, 5
lsls r1, r0, 2
adds r2, 0x8C
adds r2, r1
lsls r0, 5
subs r0, r4, r0
movs r1, 0x1
lsls r1, r0
ldr r0, [r2]
ands r0, r1
cmp r0, 0
beq _08097BE2
adds r3, 0x1
_08097BE2:
adds r4, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
ble _08097BA6
cmp r3, 0
beq _08097BFC
ldr r0, _08097C14
ldr r0, [r0]
strh r3, [r0, 0x18]
movs r0, 0x7
bl sub_80976F8
_08097BFC:
add sp, 0x8
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08097C0C: .4byte 0x000001a7
_08097C10: .4byte 0x00000163
_08097C14: .4byte gUnknown_203B494
thumb_func_end sub_8097944
.align 2,0

View File

@ -1938,7 +1938,7 @@ _0809B7AC:
adds r0, r1, r3
ldr r1, [r0]
movs r0, 0
bl sub_801602C
bl CreateConfirmNameMenu
b _0809B784
.align 2, 0
_0809B7D8: .4byte 0x00000424
@ -1948,7 +1948,7 @@ _0809B7E0:
adds r0, r1, r2
ldr r1, [r0]
movs r0, 0x2
bl sub_801602C
bl CreateConfirmNameMenu
b _0809B784
.align 2, 0
_0809B7F0: .4byte 0x0000042c
@ -1956,7 +1956,7 @@ _0809B7F4:
bl sub_8016080
cmp r0, 0x3
bne _0809B80C
bl sub_80160D8
bl CleanConfirmNameMenu
ldr r0, [r6]
movs r3, 0x86
lsls r3, 3
@ -1971,7 +1971,7 @@ _0809B80C:
ldr r0, [r0]
cmp r0, 0
beq _0809B784
bl sub_80160D8
bl CleanConfirmNameMenu
ldr r0, [r6]
movs r2, 0x86
lsls r2, 3
@ -1996,7 +1996,7 @@ _0809B834:
adds r0, r1
ldr r1, [r0]
movs r0, 0x1
bl sub_801602C
bl CreateConfirmNameMenu
b _0809B784
.align 2, 0
_0809B858: .4byte 0x0000042c
@ -2004,7 +2004,7 @@ _0809B85C:
bl sub_8016080
cmp r0, 0x3
bne _0809B874
bl sub_80160D8
bl CleanConfirmNameMenu
ldr r0, [r6]
movs r2, 0x86
lsls r2, 3
@ -2023,7 +2023,7 @@ _0809B87A:
bne _0809B888
b _0809B784
_0809B888:
bl sub_80160D8
bl CleanConfirmNameMenu
ldr r0, [r6]
movs r1, 0x86
lsls r1, 3
@ -2938,7 +2938,7 @@ _0809C032:
ldr r0, [r6]
b _0809B972
_0809C036:
bl sub_802FE58
bl HandleMakuhitaDojoState
cmp r0, 0x2
beq _0809C05E
cmp r0, 0x3
@ -3128,7 +3128,7 @@ _0809C1C2:
b _0809C392
_0809C1C8:
movs r0, 0x2
bl sub_80252F0
bl CreateFriendListMenu
lsls r0, 24
cmp r0, 0
beq _0809C1EC
@ -3349,286 +3349,4 @@ _0809C394:
bx r1
thumb_func_end sub_809B648
thumb_func_start sub_809C39C
sub_809C39C:
push {lr}
bl sub_801D178
ldr r1, _0809C3D4
ldr r1, [r1]
movs r2, 0x86
lsls r2, 3
adds r1, r2
str r0, [r1]
cmp r0, 0x3
bne _0809C3CC
bl sub_801D1D4
lsls r0, 24
lsrs r0, 24
bl sub_8002694
lsls r0, 16
asrs r0, 16
movs r2, 0x1
negs r2, r2
movs r1, 0
bl GroundMainGroundRequest
_0809C3CC:
bl sub_801D1E0
pop {r0}
bx r0
.align 2, 0
_0809C3D4: .4byte gUnknown_3001B64
thumb_func_end sub_809C39C
thumb_func_start sub_809C3D8
sub_809C3D8:
push {lr}
bl sub_801D178
ldr r1, _0809C410
ldr r1, [r1]
movs r2, 0x86
lsls r2, 3
adds r1, r2
str r0, [r1]
cmp r0, 0x3
bne _0809C408
bl sub_801D1D4
lsls r0, 24
lsrs r0, 24
bl sub_8002694
lsls r0, 16
asrs r0, 16
movs r2, 0x1
negs r2, r2
movs r1, 0
bl GroundMainGroundRequest
_0809C408:
bl sub_801D1E0
pop {r0}
bx r0
.align 2, 0
_0809C410: .4byte gUnknown_3001B64
thumb_func_end sub_809C3D8
thumb_func_start sub_809C414
sub_809C414:
push {lr}
bl sub_802540C
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
beq _0809C448
ldr r0, _0809C444
ldr r0, [r0]
movs r2, 0x86
lsls r2, 3
adds r0, r2
str r1, [r0]
adds r0, r1, 0
bl sub_8002694
lsls r0, 16
asrs r0, 16
movs r2, 0x1
negs r2, r2
movs r1, 0
bl GroundMainGroundRequest
b _0809C458
.align 2, 0
_0809C444: .4byte gUnknown_3001B64
_0809C448:
ldr r0, _0809C460
ldr r0, [r0]
movs r1, 0x86
lsls r1, 3
adds r0, r1
movs r1, 0x1
negs r1, r1
str r1, [r0]
_0809C458:
bl sub_8025418
pop {r0}
bx r0
.align 2, 0
_0809C460: .4byte gUnknown_3001B64
thumb_func_end sub_809C414
thumb_func_start sub_809C464
sub_809C464:
push {lr}
bl DeleteTestTracker
bl sub_8001064
bl sub_809965C
pop {r0}
bx r0
thumb_func_end sub_809C464
thumb_func_start sub_809C478
sub_809C478:
push {lr}
sub sp, 0x8
bl sub_80356A0
cmp r0, 0x3
bne _0809C492
ldr r0, _0809C4AC
bl PlaySound
bl InitFlash
bl ClearFlashData
_0809C492:
bl sub_8035758
add r2, sp, 0x4
movs r0, 0x3
mov r1, sp
bl sub_8001B88
movs r0, 0
bl sub_80993C0
add sp, 0x8
pop {r0}
bx r0
.align 2, 0
_0809C4AC: .4byte 0x00000313
thumb_func_end sub_809C478
thumb_func_start sub_809C4B0
sub_809C4B0:
push {r4,r5,lr}
movs r4, 0x1
negs r4, r4
ldr r5, _0809C4FC
ldr r0, [r5]
movs r2, 0x86
lsls r2, 3
adds r1, r0, r2
ldr r0, [r1]
cmp r0, 0
bne _0809C4DE
bl sub_803B168
lsls r0, 16
ldr r1, [r5]
ldr r3, _0809C500
adds r2, r1, r3
asrs r4, r0, 16
lsrs r0, 16
strh r0, [r2]
movs r0, 0x86
lsls r0, 3
adds r1, r0
_0809C4DE:
str r4, [r1]
bl sub_803B1BC
movs r0, 0x1
negs r0, r0
cmp r4, r0
beq _0809C4F4
adds r0, r4, 0
movs r1, 0
bl GroundMap_ExecuteEvent
_0809C4F4:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0809C4FC: .4byte gUnknown_3001B64
_0809C500: .4byte 0x000005a4
thumb_func_end sub_809C4B0
thumb_func_start sub_809C504
sub_809C504:
push {r4,lr}
sub sp, 0x4
mov r0, sp
bl sub_80282DC
adds r4, r0, 0
cmp r4, 0x1
bne _0809C530
mov r0, sp
ldrb r0, [r0]
bl sub_809927C
ldr r0, _0809C52C
ldr r0, [r0]
movs r1, 0x86
lsls r1, 3
adds r0, r1
str r4, [r0]
b _0809C540
.align 2, 0
_0809C52C: .4byte gUnknown_3001B64
_0809C530:
ldr r0, _0809C54C
ldr r0, [r0]
movs r1, 0x86
lsls r1, 3
adds r0, r1
movs r1, 0x1
negs r1, r1
str r1, [r0]
_0809C540:
bl sub_80282FC
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0809C54C: .4byte gUnknown_3001B64
thumb_func_end sub_809C504
thumb_func_start sub_809C550
sub_809C550:
push {r4,r5,lr}
bl sub_802E90C
adds r4, r0, 0
movs r5, 0
bl sub_802E918
cmp r4, 0x2
beq _0809C586
cmp r4, 0x2
bhi _0809C56C
cmp r4, 0x1
beq _0809C572
b _0809C5AC
_0809C56C:
cmp r4, 0x3
beq _0809C59A
b _0809C5AC
_0809C572:
movs r0, 0x4
movs r1, 0x1D
movs r2, 0x3
bl sub_8001CC4
lsls r0, 24
cmp r0, 0
beq _0809C5AC
movs r5, 0x1
b _0809C5AC
_0809C586:
movs r0, 0x4
movs r1, 0x1F
movs r2, 0x2
bl sub_8001CC4
lsls r0, 24
cmp r0, 0
beq _0809C5AC
movs r5, 0x2
b _0809C5AC
_0809C59A:
movs r0, 0xB
movs r1, 0x33
movs r2, 0x8
bl sub_8001CC4
lsls r0, 24
cmp r0, 0
beq _0809C5AC
movs r5, 0x3
_0809C5AC:
ldr r0, _0809C5C0
ldr r0, [r0]
movs r1, 0x86
lsls r1, 3
adds r0, r1
str r5, [r0]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0809C5C0: .4byte gUnknown_3001B64
thumb_func_end sub_809C550
.align 2,0

View File

@ -5,285 +5,6 @@
.text
thumb_func_start u24_8_div
u24_8_div:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
cmp r1, 0
bne _08009EB8
ldr r0, _08009EB4
b _08009F58
.align 2, 0
_08009EB4: .4byte 0x7fffffff
_08009EB8:
cmp r0, 0
bne _08009EC0
movs r0, 0
b _08009F58
_08009EC0:
lsrs r7, r0, 24
lsls r6, r0, 8
mov r10, r1
movs r0, 0
mov r9, r0
movs r5, 0
movs r4, 0
movs r1, 0x1
mov r8, r1
movs r2, 0x3F
str r2, [sp]
_08009ED6:
lsls r5, 1
adds r0, r4, 0
movs r1, 0x80
lsls r1, 24
ands r0, r1
cmp r0, 0
beq _08009EE8
mov r2, r8
orrs r5, r2
_08009EE8:
movs r1, 0x2
negs r1, r1
lsls r4, 1
adds r0, r7, 0
movs r2, 0x80
lsls r2, 24
ands r0, r2
cmp r0, 0
beq _08009EFE
mov r0, r8
orrs r4, r0
_08009EFE:
lsls r7, 1
adds r0, r6, 0
movs r2, 0x80
lsls r2, 24
ands r0, r2
cmp r0, 0
beq _08009F10
mov r0, r8
orrs r7, r0
_08009F10:
lsls r6, 1
ands r6, r1
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0
mov r3, r10
bl u32_pair_less_than
lsls r0, 24
cmp r0, 0
bne _08009F3A
adds r0, r4, 0
movs r1, 0x1
mov r2, r10
subs r4, r2
movs r2, 0
subs r5, r2
cmp r0, r4
bcs _08009F3C
subs r5, 0x1
b _08009F3C
_08009F3A:
movs r1, 0
_08009F3C:
mov r0, r9
lsls r0, 1
mov r9, r0
cmp r1, 0
beq _08009F4C
mov r1, r8
orrs r0, r1
mov r9, r0
_08009F4C:
ldr r2, [sp]
subs r2, 0x1
str r2, [sp]
cmp r2, 0
bge _08009ED6
mov r0, r9
_08009F58:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end u24_8_div
thumb_func_start sub_8009F68
sub_8009F68:
push {r4-r7,lr}
adds r5, r0, 0
adds r6, r1, 0
adds r4, r6, 0
cmp r6, 0
bge _08009F76
negs r4, r6
_08009F76:
movs r7, 0x80
lsls r7, 1
cmp r4, 0
beq _08009FA0
_08009F7E:
movs r0, 0x1
ands r0, r4
cmp r0, 0
beq _08009F90
adds r0, r7, 0
adds r1, r5, 0
bl s24_8_mul
adds r7, r0, 0
_08009F90:
adds r0, r5, 0
adds r1, r5, 0
bl s24_8_mul
adds r5, r0, 0
asrs r4, 1
cmp r4, 0
bne _08009F7E
_08009FA0:
cmp r6, 0
bge _08009FB0
movs r0, 0x80
lsls r0, 1
adds r1, r7, 0
bl s24_8_div
b _08009FB2
_08009FB0:
adds r0, r7, 0
_08009FB2:
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_8009F68
thumb_func_start sub_8009FB8
sub_8009FB8:
push {r4-r7,lr}
adds r5, r0, 0
adds r6, r1, 0
cmp r5, 0
bge _08009FC4
negs r5, r5
_08009FC4:
cmp r6, 0
bge _08009FCA
negs r6, r6
_08009FCA:
cmp r5, r6
bge _08009FD4
adds r4, r5, 0
adds r5, r6, 0
adds r6, r4, 0
_08009FD4:
cmp r6, 0
beq _0800A016
movs r7, 0x2
_08009FDA:
adds r0, r6, 0
adds r1, r5, 0
bl s24_8_div
adds r4, r0, 0
adds r1, r4, 0
bl s24_8_mul
adds r4, r0, 0
movs r0, 0x80
lsls r0, 3
adds r1, r4, r0
adds r0, r4, 0
bl s24_8_div
adds r4, r0, 0
adds r0, r5, 0
adds r1, r4, 0
bl s24_8_mul
lsls r0, 1
adds r5, r0
adds r0, r6, 0
adds r1, r4, 0
bl s24_8_mul
adds r6, r0, 0
subs r7, 0x1
cmp r7, 0
bge _08009FDA
_0800A016:
adds r0, r5, 0
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_8009FB8
thumb_func_start sub_800A020
sub_800A020:
push {r4,lr}
adds r3, r0, 0
ldr r4, _0800A044
lsrs r2, r1, 16
str r2, [r3]
lsls r0, r1, 16
str r0, [r3, 0x4]
movs r0, 0x80
lsls r0, 8
ands r0, r1
cmp r0, 0
beq _0800A03C
orrs r2, r4
str r2, [r3]
_0800A03C:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0800A044: .4byte 0xffff0000
thumb_func_end sub_800A020
thumb_func_start sub_800A048
sub_800A048:
push {lr}
ldrh r1, [r0]
lsls r2, r1, 16
ldr r0, [r0, 0x4]
lsrs r1, r0, 16
orrs r2, r1
movs r1, 0x80
lsls r1, 8
ands r0, r1
cmp r0, 0
beq _0800A060
adds r2, 0x1
_0800A060:
adds r0, r2, 0
pop {r1}
bx r1
thumb_func_end sub_800A048
thumb_func_start sub_800A068
sub_800A068:
push {lr}
ldrb r1, [r0]
lsls r2, r1, 24
ldr r0, [r0, 0x4]
lsrs r1, r0, 8
orrs r2, r1
movs r1, 0x80
lsls r1, 8
ands r0, r1
cmp r0, 0
beq _0800A080
adds r2, 0x1
_0800A080:
adds r0, r2, 0
pop {r1}
bx r1
thumb_func_end sub_800A068
thumb_func_start sub_800A088
sub_800A088:
push {lr}

View File

@ -3555,7 +3555,7 @@ _08009714:
bl CpuCopy
adds r0, r6, 0
bl CloseFile
bl sub_80097B0
bl InitFontPalette
ldr r0, _080097AC
adds r1, r4, 0
bl OpenFileAndGetFileDataPtr

View File

@ -2,7 +2,10 @@
.global gUnknown_80F54B4
gUnknown_80F54B4: @ 80F54B4
.incbin "baserom.gba", 0xF54B4, 0x40
.4byte 0, 0, 0, 1
.4byte 0, 1, 1, 2
.4byte 0, 1, 2, 3
.4byte 1, 2, 3, 3
.global gUnknown_80F54F4
gUnknown_80F54F4: @ 80F54F4

View File

@ -357,57 +357,4 @@ gUnknown_8106EC8: @ 8106EC8
.byte 0x07, 0x07, 0x05, 0x06, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x05
.byte 0x06, 0x07, 0x07, 0x07, 0x07, 0x0b, 0x07
.global gUnknown_8106EEF
gUnknown_8106EEF: @ 8106EEF
.byte 0x03, 0x04, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00
.global gUnknown_8106EFC
gUnknown_8106EFC: @ 8106EFC
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00
.global gUnknown_8106F04
gUnknown_8106F04: @ 8106F04
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x01, 0x00
.global gUnknown_8106F0C
gUnknown_8106F0C: @ 8106F0C
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x00, 0x02, 0x00
.global gUnknown_8106F14
gUnknown_8106F14: @ 8106F14
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x80, 0x01, 0x00
.global gUnknown_8106F1C
gUnknown_8106F1C: @ 8106F1C
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0x80, 0x00, 0x00
.global gUnknown_8106F24
gUnknown_8106F24: @ 8106F24
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00
.byte 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x01, 0x00
.global gUnknown_8106F3C
gUnknown_8106F3C:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00
.global gUnknown_8106F44
gUnknown_8106F44:
.byte 0x00, 0x00, 0x00, 0x00, 0x66, 0xe6, 0x00, 0x00
.global gUnknown_8106F4C
gUnknown_8106F4C:
.byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00
.global gUnknown_8106F54
gUnknown_8106F54: @ 8106F54
.4byte gUnknown_8106F3C
.4byte gUnknown_8106F44
.4byte gUnknown_8106F04
.4byte gUnknown_8106F4C
.global gUnknown_8106F64
gUnknown_8106F64: @ 8106F64
.byte 0x00, 0x00, 0x00, 0x00
.byte 0x00, 0xC0, 0x00, 0x00

View File

@ -165,7 +165,7 @@ gUnknown_8116208: @ 8116208
gUnknown_8116218: @ 8116218
.4byte 1
.4byte 0
.4byte sub_8021D1C
.4byte CleanWigglytuffShop
.4byte sub_8021C5C
.global gUnknown_8116228
@ -222,21 +222,21 @@ gUnknown_8116298: @ 8116298
.4byte 1
.4byte 0
.4byte MakuhitaDojo_Delete
.4byte sub_802FE58
.4byte HandleMakuhitaDojoState
.global gUnknown_81162A8
gUnknown_81162A8: @ 81162A8
.4byte 1
.4byte 0
.4byte MakuhitaDojo_Delete
.4byte sub_802FE58
.4byte HandleMakuhitaDojoState
.global gUnknown_81162B8
gUnknown_81162B8: @ 81162B8
.4byte 1
.4byte 0
.4byte MakuhitaDojo_Delete
.4byte sub_802FE58
.4byte HandleMakuhitaDojoState
.global gUnknown_81162C8
gUnknown_81162C8: @ 81162C8

View File

@ -17,7 +17,7 @@ struct unkStruct_202D038
void vram_related_8009804(void);
void sub_80097B0(void);
void InitFontPalette(void);
void sub_80098A0(void);
void sub_80098BC(u32 *, u32 *, u32);
void sub_80098F8(u32);
@ -25,4 +25,4 @@ void sub_8009908(void);
void sub_80099C0(void);
void sub_80099F0(u32);
#endif // GUARD_CODE_8009804_H
#endif // GUARD_CODE_8009804_H

View File

@ -10,12 +10,20 @@ struct unkStruct_203B200
u32 unk4;
/* 0x8 */ u8 *pokeName;
/* 0xC */ s32 state;
/* 0x10 */ MenuItem menus[3];
u8 fill[0x50 - 0x28];
/* 0x10 */ MenuItem menus[8];
};
u32 sub_801602C(u32 mode, u8 *name);
u32 CreateConfirmNameMenu(u32 mode, u8 *name);
u32 sub_8016080(void);
void sub_80160D8(void);
void CleanConfirmNameMenu(void);
#endif // GUARD_CODE_801602C_H
enum ConfirmNameMenuStates
{
CONFIRM_NAME_MENU_INIT,
CONFIRM_NAME_MENU_PROMPT,
CONFIRM_NAME_MENU_TOO_LONG,
CONFIRM_NAME_MENU_EMPTY,
CONFIRM_NAME_MENU_EXIT = 4
};
#endif // GUARD_CODE_801602C_H

View File

@ -1,29 +0,0 @@
#ifndef GUARD_CODE_801BEEC_H
#define GUARD_CODE_801BEEC_H
#include "constants/iq_skill.h"
#include "structs/menu.h"
#include "pokemon.h"
#include "structs/str_text.h"
// size: 0x124
struct unkStruct_203B238
{
/* 0x0 */ u32 state;
/* 0x4 */ s16 species;
/* 0x8 */ PokemonStruct1 *pokeStruct;
/* 0xC */ u8 iqSkills[NUM_IQ_SKILLS];
u32 unk24;
/* 0x28 */ u8 iqSkillIndex;
/* 0x2C */ u32 numIQSkills;
/* 0x30 */ s32 menuAction;
MenuItem unk34[8];
MenuStruct unk74;
UnkTextStruct2 unkC4[4];
};
bool8 sub_801BEEC(s16 species);
u32 sub_801BF48(void);
void sub_801BF98(void);
#endif // GUARD_CODE_801BEEC_H

View File

@ -4,5 +4,7 @@
u8 sub_803D0D8(void);
u8 sub_803D0F0(u8);
u8 sub_803D100(u8);
u8 sub_803D110(u8 *param_1, u8 *param_2, s32 size);
void sub_803D1A8(u8 *param_1, u8 *param_2, s32 size);
#endif // GUARD_CODE_803D0D8_H
#endif // GUARD_CODE_803D0D8_H

View File

@ -48,5 +48,6 @@ void sub_807A96C(Entity *pokemon, Entity *target);
void WakeUpPokemon(Entity * pokemon);
void SendThawedMessage(Entity *pokemon, Entity *target);
void sub_807AA30(void);
void sub_8079E34(Entity * pokemon, Entity * target, bool8 param_3);
#endif // !GUARD_CODE_8077274_1_H

View File

@ -2,7 +2,7 @@
#define GUARD_CODE_8094D28_H
// code_8094D28.s
extern void sub_8094D28(s32);
void sub_8094D28(s32 r0);
extern s32 sub_8094E4C(void);
#endif // GUARD_CODE_8094D28_H
#endif // GUARD_CODE_8094D28_H

View File

@ -11,6 +11,15 @@ typedef struct subStruct_203B490
/* 0x8 */ s32 checksum; // really dumb checksum that just adds all the fields of WonderMail struct
} subStruct_203B490;
// size: 0x8
struct unkStruct_8096AF8
{
bool8 unk0;
/* 0x2 */ u16 clientSpecies;
/* 0x4 */ u16 targetSpecies;
};
// size: 0x32C?
typedef struct unkStruct_203B490
{
@ -31,5 +40,32 @@ unkStruct_203B490 *GetMailInfo(void);
void InitializeMailJobsNews(void);
bool8 IsValidWonderMail(WonderMail *WonderMailData);
bool8 ValidateWonderMail(WonderMail *data);
s32 CountFilledMailboxSlots(void);
WonderMail *GetMailboxSlotInfo(u8 index);
bool8 IsMailSlotEmpty(u8 index);
void ResetMailboxSlot(u8 index);
void ShiftMailboxSlotsDown(void);
bool8 AcceptJob(WonderMail *mail);
s32 CountJobsinDungeon(u8 dungeon);
WonderMail *GetJobSlotInfo(u8 index);
s32 GetNumAcceptedJobs(void);
bool8 IsJobSlotEmpty(u8 index);
bool8 IsMailinJobSlot(WonderMail *mail);
void ResetJobSlot(u8 index);
bool8 sub_809693C(WonderMail *mail);
void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon);
bool8 sub_8096C08(u8 *jobIndex);
WonderMail *GetPelipperBoardSlotInfo(u8);
bool8 IsPelipperBoardSlotEmpty(u8);
void ResetPelipperBoardSlot(u8);
void ShiftPelipperJobsDown(void);
void ShiftJobSlotsDown(void);
void ReceivePKMNNews(u8 index);
bool8 CheckPKMNNewsSlot(u8 index);
void SortJobSlots(void);
u8 *sub_8096DD8(void);
u8 *sub_8096DE8(void);
u8 sub_8096E2C(void);
void sub_8096EEC(WonderMail *mail);
#endif // GUARD_CODE_80958E8_H

View File

@ -1,30 +0,0 @@
#ifndef GUARD_CODE_80958E8_1_H
#define GUARD_CODE_80958E8_1_H
#include "structs/str_wonder_mail.h"
// size: 0x8
struct unkStruct_8096AF8
{
bool8 unk0;
/* 0x2 */ u16 clientSpecies;
/* 0x4 */ u16 targetSpecies;
};
bool8 AcceptJob(WonderMail *mail);
s32 CountJobsinDungeon(u8 dungeon);
WonderMail *GetJobSlotInfo(u8 index);
s32 GetNumAcceptedJobs(void);
bool8 IsJobSlotEmpty(u8 index);
bool8 IsMailinJobSlot(WonderMail *mail);
void ResetJobSlot(u8 index);
bool8 sub_809693C(WonderMail *mail);
void sub_8096AF8(struct unkStruct_8096AF8 *, u8 slotIndex, u8 dungeon);
bool8 sub_8096C08(u8 *jobIndex);
// code_80958E8_1.s
extern WonderMail *GetPelipperBoardSlotInfo(u8);
extern bool8 IsPelipperBoardSlotEmpty(u8);
#endif // GUARD_CODE_80958E8_1_H

View File

@ -1,15 +0,0 @@
#ifndef GUARD_CODE_8096AF8_H
#define GUARD_CODE_8096AF8_H
#include "structs/str_wonder_mail.h"
extern void sub_8096C80(void);
void ReceivePKMNNews(u8 index);
bool8 CheckPKMNNewsSlot(u8 index);
void SortJobSlots(void);
u8 *sub_8096DD8(void);
u8 *sub_8096DE8(void);
u8 sub_8096E2C(void);
void sub_8096EEC(WonderMail *mail);
#endif // GUARD_CODE_8096AF8_H

View File

@ -41,5 +41,8 @@ void sub_8097848(void);
s16 sub_8097870(void);
s16 sub_8097880(void);
s16 sub_80978B8(void);
void sub_8097944(void);
u32 sub_8097D60(u8 *r0, u32 size);
u32 sub_8097D98(u8 *r0, u32 size);
#endif // GUARD_CODE_8097670_H
#endif // GUARD_CODE_8097670_H

View File

@ -34,8 +34,8 @@ enum WonderMailTypes
{
WONDER_MAIL_TYPE_NONE = 0,
WONDER_MAIL_TYPE_SOS,
//WONDER_MAIL_TYPE_SOS = 2, // SOS MAIL is 1 and 2?
// 2 - 3
WONDER_MAIL_TYPE_SOS_1,
// 3
WONDER_MAIL_TYPE_AOK = 4,
WONDER_MAIL_TYPE_THANK_YOU = 5,
WONDER_MAIL_TYPE_WONDER = 5,
@ -82,4 +82,4 @@ enum WonderMailMissionTypes
#define MAX_ITEM_REWARDS 3
#endif //GUARD_CONSTANTS_WONDER_MAIL_H
#endif //GUARD_CONSTANTS_WONDER_MAIL_H

View File

@ -4,5 +4,7 @@
#include "structs/dungeon_entity.h"
bool8 HasHeldItem(Entity *pokemon, u8 id);
void sub_8046CE4(Item *item, s32 param_2);
void sub_8046D20(void);
#endif

View File

@ -10,5 +10,6 @@ typedef struct unkStruct_202F190
Tile *GetTile(s32 x, s32 y);
Tile *GetTileSafe(s32 x, s32 y);
void sub_804AC20(Position *pos);
#endif

View File

@ -4,6 +4,8 @@
#include "structs/dungeon_entity.h"
#include "structs/map.h"
extern u8 gWalkableTileToCrossableTerrain[8];
u8 GetCrossableTerrain(s16 species);
u8 sub_807034C(s16 id, struct Tile *tile);
u8 sub_80703A0(Entity *pokemon, Position *pos);

View File

@ -16,5 +16,8 @@ Trap* GetTrapData_1(Entity *entity);
Item *GetItemData(Entity *entity);
struct Tile *GetTileAtEntitySafe(Entity *entity);
Item *GetItemData_1(Entity *entity);
void sub_804535C(Entity *entity, Position32 *pos);
void SetEntityPixelPos(Entity *entity, s32 x, s32 y);
void IncreaseEntityPixelPos(Entity *entity, s32 x, s32 y);
#endif

View File

@ -3,9 +3,13 @@
#include "structs/dungeon_entity.h"
typedef void (*DungeonCallback)(Entity *);
Entity *xxx_call_GetLeader(void);
Entity *GetPartnerEntity(void);
void sub_80854D4(void);
void sub_80855E4(DungeonCallback func);
void sub_808563C(DungeonCallback func);
Entity *GetEntityFromClientType(u8 entityType);
void sub_80856C8(Entity * pokemon, s32 x, s32 y);
void sub_80856E0(Entity * pokemon, s32 direction);

View File

@ -1,9 +1,73 @@
#ifndef INCLUDE_FRIEND_LIST_MENU_H
#define INCLUDE_FRIEND_LIST_MENU_H
bool8 sub_80252F0(s32 param_1);
// there might be more overlap with unkStruct_203B2BC
// I was working on the moves and put the data that seemed to correspond to that
// into a separate struct
typedef struct unkStruct_203B2B4
{
// size: 0x178
s32 unk0;
s32 state;
u32 fallbackState;
u8 unkC; // friend Area
u8 unkD; // friend Area
s16 species;
u32 itemIndex;
BulkItem item1;
BulkItem item2;
/* 0x1C */ PokemonStruct1 *pokeStruct;
u32 moveIndex; // some sort of move index
u16 moveID;
Move moves[8];
u16 moveIDs[4]; // some list of move IDs
u32 menuAction1;
s32 menuAction2;
MenuStruct unk78;
MenuItem unkC8[8];
u16 unk108[8];
UnkTextStruct2 unk118[4];
} unkStruct_203B2B4;
bool8 CreateFriendListMenu(s32 param_1);
u32 sub_8025354(void);
u8 sub_802540C(void);
void sub_8025418(void);
void CleanFriendListMenu(void);
enum FriendListMenuStates {
// 0
// 1
// 2
// 3
FRIEND_LIST_MENU_STATE_SUMMARY = 4,
FRIEND_LIST_MENU_STATE_CHECK_IQ = 5,
FRIEND_LIST_MENU_STATE_STANDBY = 7,
FRIEND_LIST_MENU_STATE_ITEM_GIVEN = 8,
FRIEND_LIST_MENU_STATE_ITEM_EXCHANGE = 9,
FRIEND_LIST_MENU_STATE_TAKE = 0xA,
FRIEND_LIST_MENU_STATE_GIVE = 0xB,
// 0xC
// 0xD
FRIEND_LIST_MENU_STATE_INFO = 0xE,
FRIEND_LIST_MENU_STATE_MOVES = 0xF,
// 0x10
// 0x11
// 0x12
FRIEND_LIST_MENU_STATE_EXIT = 0x13
};
enum FriendListMenuActions {
FRIEND_LIST_MENU_NULL = 1,
FRIEND_LIST_MENU_INFO = 4,
FRIEND_LIST_MENU_SUMMARY = 4,
FRIEND_LIST_MENU_CHECK_IQ = 5,
FRIEND_LIST_MENU_MOVES,
FRIEND_LIST_MENU_VISIT,
// 8
FRIEND_LIST_MENU_STANDBY = 9,
FRIEND_LIST_MENU_GIVE = 0xA,
FRIEND_LIST_MENU_TAKE,
};
#endif

View File

@ -13,5 +13,6 @@ typedef struct unkStruct_811BAF4
bool8 sub_8098F88(void);
const char *sub_8098FB4(void);
bool8 GroundMainGroundRequest(s16 r0, u32 r1, s32 r2);
#endif // GUARD_GROUND_MAIN_H
#endif // GUARD_GROUND_MAIN_H

View File

@ -1,12 +1,12 @@
#ifndef GUARD_CODE_801C620_H
#define GUARD_CODE_801C620_H
#ifndef GUARD_IQ_SKILL_INFO_MENU_H
#define GUARD_IQ_SKILL_INFO_MENU_H
#include "structs/menu.h"
#include "structs/subStruct_203B240.h"
#include "structs/str_text.h"
// size: 0x94
struct unkStruct_203B240
struct IQSkillInfoMenu
{
/* 0x0 */ s32 state;
/* 0x4 */ u8 chosenIQSkill;
@ -20,8 +20,8 @@ struct unkStruct_203B240
MenuInputStructSub unk88;
};
bool8 sub_801C620(u8 iqSkill);
u32 sub_801C674(void);
void sub_801C6B4(void);
bool8 CreateIQSkillInfoMenu(u8 iqSkill);
u32 HandleIQSkillInfoMenuState(void);
void CleanIQSkillInfoMenu(void);
#endif // GUARD_CODE_801C620_H
#endif // GUARD_IQ_SKILL_INFO_MENU_H

View File

@ -8,7 +8,7 @@
#include "structs/struct_sub80095e4.h"
// size: 0xC4
struct unkStruct_203B23C
struct IQSkillListMenu
{
/* 0x0 */ s16 species;
/* 0x4 */ PokemonStruct1 *pokeStruct;
@ -19,11 +19,11 @@ struct unkStruct_203B23C
bool8 HasNoAvailIQSkills(s16 species);
bool8 sub_801C244(s16 species, u32 index, u32);
u32 sub_801C308(bool8);
s32 sub_801C390(void);
void sub_801C3B0(bool8);
void sub_801C3F8(void);
void sub_801C4C8(void);
bool8 CreateIQSkillListMenu(s16 species, u32 index, u32);
u32 HandleIQSkillListMenuInput(bool8);
s32 GetIQSkillSelection(void);
void RedrawIQSkillListMenu(bool8);
void CleanIQSkillListMenu(void);
void BuildIQSkillList(void);
#endif // GUARD_CODE_801C244_H

44
include/iq_skill_menu.h Normal file
View File

@ -0,0 +1,44 @@
#ifndef GUARD_CODE_IQ_SKILL_MENU_H
#define GUARD_CODE_IQ_SKILL_MENU_H
#include "constants/iq_skill.h"
#include "structs/menu.h"
#include "pokemon.h"
#include "structs/str_text.h"
// size: 0x124
struct IQSkillMenu
{
/* 0x0 */ u32 state;
/* 0x4 */ s16 species;
/* 0x8 */ PokemonStruct1 *pokeStruct;
/* 0xC */ u8 iqSkills[NUM_IQ_SKILLS];
/* 0x24 */ u32 menuIndex;
/* 0x28 */ u8 iqSkillIndex;
/* 0x2C */ u32 numIQSkills;
/* 0x30 */ s32 menuAction;
MenuItem unk34[8];
MenuStruct unk74;
UnkTextStruct2 unkC4[4];
};
bool8 CreateIQSkillMenu(s16 species);
u32 sub_801BF48(void);
void CleanIQSkillMenu(void);
enum IQSkillMenuStates
{
IQ_SKILL_MENU_STATE_INIT,
IQ_SKILL_MENU_STATE_MAIN,
IQ_SKILL_MENU_STATE_INFO = 3,
IQ_SKILL_MENU_STATE_EXIT
};
enum IQSkillMenuActions
{
IQ_SKILL_MENU_NULL = 1,
IQ_SKILL_MENU_SWITCH,
IQ_SKILL_MENU_INFO,
};
#endif // GUARD_CODE_IQ_SKILL_MENU_H

View File

@ -14,7 +14,8 @@ enum KecleonStoreStates
KECLEON_STORE_EXIT = 4,
KECLEON_STORE_NO_STORE_ITEMS,
KECLEON_STORE_NO_MONEY,
// 7 - 8
KECLEON_STORE_TOO_MUCH_MONEY,
// 8
KECLEON_STORE_NO_ITEMS_TO_SELL = 9,
KECLEON_STORE_TOO_MANY_ITEMS,
// 11
@ -59,4 +60,4 @@ bool8 CreateKecleonBros(u32 mode);
void DeleteKecleonBros(void);
u32 KecleonBrosCallback(void);
#endif // GUARD_KECLEON_BROS1_H
#endif // GUARD_KECLEON_BROS1_H

View File

@ -1,11 +0,0 @@
#ifndef GUARD_MAILBOX_8095F8C_H
#define GUARD_MAILBOX_8095F8C_H
#include "structs/str_wonder_mail.h"
s32 CountFilledMailboxSlots(void);
WonderMail *GetMailboxSlotInfo(u8 index);
bool8 IsMailSlotEmpty(u8 index);
void ResetMailboxSlot(u8 index);
#endif // GUARD_MAILBOX_8095F8C_H

View File

@ -43,7 +43,7 @@ typedef struct MakuhitaDojoWork1
void MakuhitaDojo_Delete(void);
bool8 MakuhitaDojo_New(u32 mode);
u32 sub_802FE58(void);
u32 HandleMakuhitaDojoState(void);
s16 sub_802FED0(void);
#endif // GUARD_MAKUHITA_DOJO1_H
#endif // GUARD_MAKUHITA_DOJO1_H

View File

@ -99,4 +99,15 @@ s32 s24_8_div(s32 r0, s32 r1);
*/
u24_8 u24_8_mul(u24_8 x, u24_8 y);
/**
* This function divides two unsigned 24.8 fixed-point numbers.
*
* @param[in] x The first factor.
* @param[in] y The second factor.
*
* @return The quotient `x/y` as an unsigned 24.8 fixed-point number.
*/
u24_8 u24_8_div(u24_8 x, u24_8 y);
#endif // GUARD_MATH_H

View File

@ -35,9 +35,58 @@ typedef struct unkStruct_203B2B8
UnkTextStruct2 unk220[4];
} unkStruct_203B2B8;
bool8 sub_8025EF4(PokemonStruct1 *pokeStruct);
bool8 CreatePartyListMenu(PokemonStruct1 *pokeStruct);
u32 sub_8025F68(void);
bool8 sub_802604C(void);
void sub_8026058(void);
void CleanPartyListMenu(void);
#endif // GUARD_PARTY_LIST_MENU_H
enum PartyListMenuStates
{
PARTY_LIST_STATE_INIT,
PARTY_LIST_STATE_MAIN_MENU,
PARTY_LIST_STATE_MAIN_MENU_1,
PARTY_LIST_STATE_SUMMARY = 3,
PARTY_LIST_STATE_CHECK_IQ = 4,
PARTY_LIST_STATE_JOIN_TEAM = 5,
PARTY_LIST_STATE_STANDBY = 6,
PARTY_LIST_STATE_MAKE_LEADER = 7,
PARTY_LIST_STATE_POKEMON_FAREWELL = 8,
// 9
// 0xA
// 0xB
PARTY_LIST_STATE_SAY_FAREWELL = 0xC,
PARTY_LIST_STATE_CONFIRM_SAY_FAREWELL = 0xD,
PARTY_LIST_STATE_GIVE_GUMMI = 0xe,
PARTY_LIST_STATE_GIVEN_ITEM = 0xF,
PARTY_LIST_STATE_GIVEN_ITEM_HELD_ITEM = 0x10,
PARTY_LIST_STATE_TAKE_ITEM = 0x11,
PARTY_LIST_STATE_GIVE_ITEM = 0x12,
PARTY_LIST_STATE_GIVE_ITEM_1 = 0x13,
// 0x14
// 0x15
PARTY_LIST_STATE_MOVES = 0x16,
// 0x17
// 0x18
PARTY_LIST_STATE_EXIT = 0x19,
};
enum PartyListMenuActions
{
PARTY_LIST_MENU_NULL = 1,
PARTY_LIST_MENU_YES,
PARTY_LIST_MENU_NO,
PARTY_LIST_MENU_INFO = 4,
PARTY_LIST_MENU_SUMMARY = 4,
PARTY_LIST_MENU_CHECK_IQ,
PARTY_LIST_MENU_JOIN_TEAM,
PARTY_LIST_MENU_STANDBY,
PARTY_LIST_MENU_MAKE_LEADER,
PARTY_LIST_MENU_SAY_FAREWELL,
PARTY_LIST_MENU_GIVE_GUMMI,
PARTY_LIST_MENU_GIVE_ITEM,
PARTY_LIST_MENU_TAKE_ITEM,
PARTY_LIST_MENU_MOVES,
};
#endif // GUARD_PARTY_LIST_MENU_H

View File

@ -28,3 +28,11 @@ enum PelipperBoardStates
PELIPPER_JOB_LIST_MENU,
};
enum PelipperBoardActions
{
PELIPPER_BOARD_NULL = 1,
PELIPPER_BOARD_BULLETIN_BOARD,
PELIPPER_BOARD_JOB_LIST,
PELIPPER_BOARD_ACCEPT,
PELIPPER_BOARD_INFO,
};

View File

@ -0,0 +1,48 @@
#ifndef GUARD_STR_3001B64_H
#define GUARD_STR_3001B64_H
#include "file_system.h"
struct unkStruct_3001B64_sub
{
// size: 0x24
u16 unk0;
/* 0x2 */ s16 speciesID;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u32 unk8;
u32 unkC;
u32 unk10;
/* 0x14 */ u8 *faceData;
u32 fill18;
u8 unk1C;
u8 fill1D[0x20 - 0x1D];
/* 0x20 */ OpenedFile *faceFile;
};
struct unkStruct_3001B64
{
// size: 0x5A8
u32 unk0;
u32 unk4;
u32 unk8;
u32 unkC;
u8 fill10[0x414 - 0x10];
u32 unk414;
u32 unk418;
u32 unk41C;
u32 unk420;
u32 unk424;
u32 unk428;
u32 unk42C;
u32 unk430;
u32 unk434;
u32 fill438;
struct unkStruct_3001B64_sub unk43C[10];
u16 unk5A4;
};
#endif // GUARD_STR_3001B61_H

View File

@ -24,6 +24,7 @@ typedef struct DungeonLocation
} DungeonLocation;
// size: 0x4
// This might be "RGB"... see `SetDungeonBGColorRGB()`
typedef struct Dungeon_sub
{
u8 unk0;
@ -31,6 +32,19 @@ typedef struct Dungeon_sub
u8 unk2;
} Dungeon_sub;
typedef struct Weather
{
/* 0xE264 */ u8 weather; // Uses the weather constants in weather.h.
u8 unkE265; // Uses the weather constants in weather.h
/* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically.
/* 0xE267 */ u8 unkE267[8];
/* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather.
/* 0xE277 */ u8 mudSportTurns;
/* 0xE278 */ u8 waterSportTurns;
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
} Weather;
// size: 0x30
typedef struct unkDungeonGlobal_unk1CE98_sub
{
@ -123,7 +137,12 @@ typedef struct Dungeon
u8 fill14[0xB8 - 0x14];
Entity *unkB8;
Entity *unkBC;
u8 fillC0[0x16D - 0xC0];
u8 fillC0[0x13C - 0xC0];
u8 unk13C[2];
u8 fill13E[0x16A - 0x13E];
u8 unk16A;
u8 unk16B;
u8 unk16C;
u8 unk16D;
u8 fill16E[0x179 - 0x16E];
/* 0x179 */ bool8 pokemonExposed; // True if a Pokémon on the floor has the Exposed status.
@ -208,20 +227,7 @@ typedef struct Dungeon
u32 unkE250;
u8 fillE254[0xE260 - 0xE254];
u32 unkE260;
/* 0xE264 */ u8 weather; // Uses the weather constants in weather.h.
u8 unkE265; // Uses the weather constants in weather.h
/* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically.
/* 0xE267 */ u8 unkE267[0xE269 - 0xE267];
u8 unkE269;
u8 fillE26A;
u8 unkE26B;
u8 weatherTurns;
u8 fillE26D[0xE26F - 0xE26D];
/* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather.
/* 0xE277 */ u8 mudSportTurns;
/* 0xE278 */ u8 waterSportTurns;
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
u8 fillE27A[0xE27C - 0xE27A];
/* 0xE264 */ Weather weather; // Uses the weather constants in weather.h.
/* 0xE27C */ Tile unkE27C[8][8];
/* 0xE87C */ u8 unkE87C[8][8];
u32 fillE8BC;

View File

@ -1,10 +1,39 @@
#ifndef GUARD_TRAP_H
#define GUARD_TRAP_H
#include "structs/dungeon_entity.h"
#include "structs/map.h"
#include "structs/str_position.h"
bool8 CanLayTrap(Position *pos);
bool8 LayTrap(Position *pos, u8 trapID, u8 param_3);
bool8 sub_807FD84(Entity *entity);
bool8 sub_807FE04(Position *pos, char param_2);
bool8 sub_807FE44(Position *pos, char param_2);
void GetTrapName(u8 *buffer, u8 trapIndex);
void sub_807FE9C(Entity *pokemon, Position *pos, int param_3, char param_4);
void HandleMudTrap(Entity *pokemon, Entity *target);
void HandleStickyTrap(Entity *pokemon, Entity *target);
void HandleGrimyTrap(Entity *pokemon, Entity *target);
void HandleSummonTrap(Entity *pokemon, Position *pos);
void HandlePitfallTrap(Entity *pokemon,Entity *target,Tile *tile);
void HandleWarpTrap(Entity *pokemon, Entity *target);
void HandleSpinTrap(Entity *pokemon, Entity *target);
void HandleSlumberTrap(Entity *pokemon, Entity *target);
void HandleSlowTrap(Entity *pokemon, Entity *target);
void HandlePoisonTrap(Entity *pokemon, Entity *target);
void HandleSelfdestructTrap(Entity *pokemon, Entity *target);
void HandleExplosionTrap(Entity *pokemon, Entity *target);
void HandlePPZeroTrap(Entity *pokemon, Entity *target);
void HandleWonderTile(Entity *pokemon, Entity *target);
// code_807FCD4.s
extern void HandleSealTrap(Entity *pokemon, Entity *target);
extern void HandleWhirlwindTrap(Entity *entity, Entity *target);
extern void HandlePokemonTrap(Entity *pokemon, Position *pos);
// trap_1.c
void HandleTripTrap(Entity *pokemon, Entity *target);
void SetTrap(Tile *tile, u8 id);
#endif

View File

@ -9,8 +9,8 @@ typedef struct WigglytuffShop2Work
MenuInputStructSub unk0;
/* 0xC */ u8 friendArea;
bool8 unkD;
s16 unkE[0x10];
u32 unk30[0x10];
s16 friendAreaSpecies[0x10];
u32 pokemonStatus[0x10];
/* 0x70 */ s32 numPokemoninFriendArea;
s32 unk74;
UnkTextStruct2 *unk78;
@ -18,8 +18,15 @@ typedef struct WigglytuffShop2Work
u8 unkDC[4];
} WigglytuffShop2Work;
bool8 sub_8021774(u8 friendArea, bool8, s32);
u32 sub_80217EC(void);
void sub_8021830(void);
bool8 CreateWigglytuffShopFriendAreaMenu(u8 friendArea, bool8, s32);
u32 HandleWigglytuffShopFriendAreaMenuInput(void);
void CleanWigglytuffShopFriendAreaInfoMenu(void);
#endif // GUARD_WIGGLYTUFF_SHOP2_H
enum WigglytuffShop2FriendAreaPokemonStatus
{
POKEMON_UNKNOWN,
POKEMON_SEEN,
POKEMON_RECRUITED,
};
#endif // GUARD_WIGGLYTUFF_SHOP2_H

View File

@ -68,6 +68,6 @@ typedef struct WigglytuffShop3Work
bool8 CreateWigglytuffShop(u32 mode);
u32 sub_8021C5C(void);
void sub_8021D1C(void);
void CleanWigglytuffShop(void);
#endif // GUARD_WIGGLYTUFF_SHOP3_H
#endif // GUARD_WIGGLYTUFF_SHOP3_H

View File

@ -115,9 +115,9 @@ SECTIONS {
src/code_801AFA4.o(.text);
src/code_801B3C0.o(.text);
src/code_801B60C.o(.text);
src/code_801BEEC.o(.text);
src/code_801C244.o(.text);
src/code_801C620.o(.text);
src/iq_skill_menu.o(.text);
src/iq_skill_list_menu.o(.text);
src/iq_skill_info_menu.o(.text);
src/code_801C8C4.o(.text);
src/code_801D014.o(.text);
src/code_801D9E4.o(.text);
@ -160,6 +160,8 @@ SECTIONS {
src/mailbox.o(.text);
src/pelipper_board.o(.text);
src/wonder_mail_3_mid.o(.text);
src/mission_reward.o(.text);
src/code_8072F3C.o(.text);
asm/wonder_mail_3_mid.o(.text);
src/wonder_mail_3_1.o(.text);
src/makuhita_dojo1.o(.text);
@ -221,7 +223,7 @@ SECTIONS {
src/code_8048480.o(.text);
src/dungeon_ai_item_weight.o(.text);
src/dungeon_map_access.o(.text);
asm/code_80495E4.o(.text);
asm/dungeon_map_access.o(.text);
src/dungeon_map_access_1.o(.text);
src/tile_types.o(.text);
asm/code_804AFAC.o(.text);
@ -276,7 +278,6 @@ SECTIONS {
src/code_807CD9C.o(.text);
src/weather.o(.text);
asm/code_807E5AC.o(.text);
src/code_807E5AC.o(.text);
src/trap.o(.text);
asm/code_807FCD4.o(.text);
src/trap_1.o(.text);
@ -318,20 +319,14 @@ SECTIONS {
src/code_809447C.o(.text);
src/code_8092334.o(.text);
src/game_options.o(.text);
src/code_8094D28.o(.text);
asm/code_8094D28.o(.text);
src/play_time.o(.text);
src/code_8094F88.o(.text);
src/code_80958E8.o(.text);
asm/code_80958E8.o(.text);
src/code_80958E8_mid.o(.text);
src/mailbox_8095F8C.o(.text);
asm/code_80958E8_1.o(.text);
src/code_80958E8_1.o(.text);
asm/code_8096AF8.o(.text);
src/code_80972F4.o(.text);
src/code_8097504.o(.text);
src/code_8097670.o(.text);
asm/code_8097670.o(.text);
src/code_8097DD0.o(.text);
asm/code_8097DD0.o(.text);
src/code_8097F40.o(.text);
@ -342,6 +337,7 @@ SECTIONS {
asm/code_8098BDC.o(.text);
src/code_809A560.o(.text);
asm/code_809A560.o(.text);
src/code_809A560_1.o(.text);
src/code_809C5C4.o(.text);
asm/code_809C5C4.o(.text);
src/code_809D148.o(.text);
@ -458,9 +454,9 @@ SECTIONS {
src/code_801AFA4.o(.rodata);
src/code_801B3C0.o(.rodata);
src/code_801B60C.o(.rodata);
src/code_801BEEC.o(.rodata);
src/code_801C244.o(.rodata);
src/code_801C620.o(.rodata);
src/iq_skill_menu.o(.rodata);
src/iq_skill_list_menu.o(.rodata);
src/iq_skill_info_menu.o(.rodata);
src/code_801C8C4.o(.rodata);
src/code_801D014.o(.rodata);
src/code_801D9E4.o(.rodata);
@ -500,6 +496,8 @@ SECTIONS {
src/mailbox.o(.rodata);
src/pelipper_board.o(.rodata);
src/wonder_mail_3_mid.o(.rodata);
src/mission_reward.o(.rodata);
src/code_8072F3C.o(.rodata);
src/makuhita_dojo1.o(.rodata);
src/makuhita_dojo2.o(.rodata);
src/wonder_mail_4.o(.rodata);
@ -549,6 +547,7 @@ SECTIONS {
data/data_80F59C8.o(.rodata);
src/charge_move.o(.rodata);
data/data_8106A4C.o(.rodata);
src/code_806CD90.o(.rodata);
src/type_effectiveness.o(.data);
data/data_8106F7C.o(.rodata);
src/dungeon_capabilities.o(.rodata);

View File

@ -111,4 +111,4 @@ void sub_800CD64(s32 r0, bool8 r1)
void SetBGOBJEnableFlags(u32 mask)
{
REG_DISPCNT = (REG_DISPCNT & 0xE0FF) | (~(mask << 8) & (DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON));
}
}

View File

@ -99,7 +99,7 @@ void GameLoop(void)
sub_800A8F8(2);
ResetSprites(TRUE);
xxx_update_some_bg_tiles(0);
sub_80097B0();
InitFontPalette();
sub_800CDA8(2);
sub_800641C(NULL, TRUE, TRUE);
gUnknown_2026E4E = 0x1000;

View File

@ -16,7 +16,7 @@ extern struct unkStruct_202D240 gUnknown_202D240[8];
// code_8009804.s
extern void sub_8009A1C(u32);
void sub_80097B0(void)
void InitFontPalette(void)
{
OpenedFile *fontpalFile;
s32 i;
@ -137,4 +137,4 @@ void sub_80099F0(u32 a0)
UNUSED static void sub_8009A10(u32 *a0)
{
sub_8009A1C(a0[1]);
}
}

View File

@ -3,8 +3,8 @@
#include "random.h"
#include "reg_control.h"
extern u32 gUnknown_203B0B8;
extern u16 gRawKeyInput;
EWRAM_DATA_2 u32 gUnknown_203B0B8 = {0};
EWRAM_DATA_2 u16 gRawKeyInput = {0};
void sub_800CB20(void)
{

View File

@ -32,10 +32,11 @@ extern struct UnkBgStruct *gUnknown_203B0E4;
extern const u16 gUnknown_80D4144[8];
EWRAM_DATA u32 gUnknown_202DE1C;
EWRAM_DATA s16 gUnknown_202DE20;
EWRAM_DATA s16 gUnknown_202DE22;
EWRAM_DATA s16 gUnknown_202DE24;
EWRAM_DATA u32 gUnknown_202DE1C = {0};
EWRAM_DATA s16 gUnknown_202DE20 = {0};
EWRAM_DATA s16 gUnknown_202DE22 = {0};
EWRAM_DATA s16 gUnknown_202DE24 = {0};
void nullsub_8(u32);
extern void xxx_call_update_bg_vram(void);
@ -92,20 +93,20 @@ void sub_80117C4(void)
FadeOutBGM(30);
}
// Some sound effect
void sub_80117D0(void)
// When you press A on a menu
void PlayAcceptSoundEffect(void)
{
PlayFanfareSE(302, MAX_VOLUME);
}
// Some sound effect
void sub_80117E4(void)
// When you press B on a menu
void PlayCancelSoundEffect(void)
{
PlayFanfareSE(303, MAX_VOLUME);
}
// Some sound effect
void sub_80117F8(void)
// When you go up or down
void PlayCursorUpDownSoundEffect(void)
{
PlayFanfareSE(301, MAX_VOLUME);
}
@ -238,4 +239,4 @@ void sub_8011A04(void)
UNUSED static void sub_8011A2C(u32 a0)
{
gUnknown_202DE1C = a0;
}
}

View File

@ -15,18 +15,18 @@ static EWRAM_DATA_2 struct unkStruct_203B200 *sUnknown_203B200 = {0};
#include "data/code_801602C.h"
static void CreateConfirmNameMenu(void);
static void BuildConfirmNameMenu(void);
static void HandleConfirmNameMenu(void);
static bool8 IsNameEmpty(void);
static void nullsub_36(void);
static void sub_80160F4(u32 newState);
static void SetConfirmNameMenuState(u32 newState);
static void sub_8016110(void);
static void sub_80161F8(void);
static void sub_8016280(void);
static void sub_801629C(void);
u32 sub_801602C(u32 mode, u8 *name)
u32 CreateConfirmNameMenu(u32 mode, u8 *name)
{
ResetUnusedInputStruct();
sub_800641C(NULL, TRUE, TRUE);
@ -52,32 +52,32 @@ u32 sub_801602C(u32 mode, u8 *name)
break;
}
sub_80160F4(0);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT);
return 1;
}
u32 sub_8016080(void)
{
switch (sUnknown_203B200->state) {
case 0:
case CONFIRM_NAME_MENU_INIT:
sub_80161F8();
break;
case 1:
case CONFIRM_NAME_MENU_PROMPT:
HandleConfirmNameMenu();
break;
case 2:
case CONFIRM_NAME_MENU_TOO_LONG:
sub_8016280();
break;
case 3:
case CONFIRM_NAME_MENU_EMPTY:
sub_801629C();
break;
case 4:
case CONFIRM_NAME_MENU_EXIT:
return 3;
}
return 0;
}
void sub_80160D8(void)
void CleanConfirmNameMenu(void)
{
if (sUnknown_203B200 != NULL) {
MemoryFree(sUnknown_203B200);
@ -85,7 +85,7 @@ void sub_80160D8(void)
}
}
static void sub_80160F4(u32 newState)
static void SetConfirmNameMenuState(u32 newState)
{
sUnknown_203B200->state = newState;
nullsub_36();
@ -99,11 +99,11 @@ static void nullsub_36(void)
static void sub_8016110(void)
{
switch (sUnknown_203B200->state) {
case 0:
case CONFIRM_NAME_MENU_INIT:
sub_80151C0(sUnknown_203B200->unk4, sUnknown_203B200->pokeName);
break;
case 1:
CreateConfirmNameMenu();
case CONFIRM_NAME_MENU_PROMPT:
BuildConfirmNameMenu();
if (sUnknown_203B200->unk4 == 1)
sub_80922B4(gAvailablePokemonNames, sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH);
else
@ -112,10 +112,10 @@ static void sub_8016110(void)
sub_8014248(sIsNameOKPrompt, 0, 3, sUnknown_203B200->menus, 0, 4, 0, NULL, 32);
break;
case 2:
case CONFIRM_NAME_MENU_TOO_LONG:
sub_80141B4(sNameTooLong, 0, 0, 0x121);
break;
case 3:
case CONFIRM_NAME_MENU_EMPTY:
sub_80141B4(sEnterAName, 0, 0, 0x121);
break;
default:
@ -123,7 +123,7 @@ static void sub_8016110(void)
}
}
static void CreateConfirmNameMenu(void)
static void BuildConfirmNameMenu(void)
{
sUnknown_203B200->menus[0].text = gCommonYes[0];
sUnknown_203B200->menus[0].menuAction = MENU_ACTION_YES;
@ -146,15 +146,15 @@ static void sub_80161F8(void)
sub_80155F0();
if (IsNameEmpty()) {
sub_80160F4(3);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_EMPTY);
}
else {
length = sub_8015FEC(sUnknown_203B200->pokeName, POKEMON_NAME_LENGTH);
maxLength = sub_8016028(); // returns 60
if (length > maxLength)
sub_80160F4(2);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_TOO_LONG);
else
sub_80160F4(1);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_PROMPT);
}
}
@ -167,11 +167,11 @@ static void HandleConfirmNameMenu(void)
switch (temp) {
case MENU_ACTION_YES:
sub_80160F4(4);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_EXIT);
break;
case MENU_ACTION_NO:
case MENU_ACTION_DEFAULT:
sub_80160F4(0);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT);
break;
default:
break;
@ -183,7 +183,7 @@ static void sub_8016280(void)
s32 temp;
if (sub_80144A4(&temp) == 0)
sub_80160F4(0);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT);
}
static void sub_801629C(void)
@ -191,7 +191,7 @@ static void sub_801629C(void)
s32 temp;
if (sub_80144A4(&temp) == 0)
sub_80160F4(0);
SetConfirmNameMenuState(CONFIRM_NAME_MENU_INIT);
}
static bool8 IsNameEmpty(void)
@ -214,4 +214,4 @@ static bool8 IsNameEmpty(void)
} while (index < max);
return TRUE;
}
}

View File

@ -1,209 +0,0 @@
#include "global.h"
#include "globaldata.h"
#include "code_80118A4.h"
#include "code_801BEEC.h"
#include "code_801C244.h"
#include "code_801C620.h"
#include "common_strings.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "pokemon_3.h"
#include "text1.h"
#include "text2.h"
static EWRAM_DATA_2 struct unkStruct_203B238 *sUnknown_203B238 = {0};
#include "data/code_801BEEC.h"
static void sub_801BFB4(s32 newState);
static void sub_801BFCC(void);
static void sub_801C03C(void);
static void sub_801C0C8(void);
static void sub_801C118(void);
static void sub_801C1A0(void);
static void sub_801C228(void);
bool8 sub_801BEEC(s16 species)
{
s32 species_s32 = species;
if (HasNoAvailIQSkills(species_s32))
return FALSE;
sUnknown_203B238 = MemoryAlloc(sizeof(struct unkStruct_203B238), 8);
sUnknown_203B238->menuAction = 0;
sUnknown_203B238->species = species_s32;
sUnknown_203B238->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
sUnknown_203B238->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B238->iqSkills, sUnknown_203B238->pokeStruct->IQ);
sub_801BFB4(0);
return TRUE;
}
u32 sub_801BF48(void)
{
switch (sUnknown_203B238->state) {
case 4:
return 3;
case 0:
case 1:
sub_801C118();
break;
case 2:
sub_801C1A0();
break;
case 3:
sub_801C228();
break;
}
return 0;
}
void sub_801BF98(void)
{
if (sUnknown_203B238 != NULL) {
MemoryFree(sUnknown_203B238);
sUnknown_203B238 = NULL;
}
}
static void sub_801BFB4(s32 newState)
{
sUnknown_203B238->state = newState;
sub_801BFCC();
sub_801C03C();
}
static void sub_801BFCC(void)
{
s32 i;
sub_8006518(sUnknown_203B238->unkC4);
if (sUnknown_203B238->state == 2)
sUnknown_203B238->unkC4[2] = sUnknown_80DBDB0;
else {
for (i = 0; i < 4; i++)
sUnknown_203B238->unkC4[i] = sUnknown_80DBD98;
}
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B238->unkC4, TRUE, TRUE);
}
static void sub_801C03C(void)
{
switch (sUnknown_203B238->state) {
case 0:
sub_801C244(sUnknown_203B238->species, 0, 8);
break;
case 1:
sub_801C3B0(TRUE);
break;
case 2:
sub_801C4C8();
sub_801C0C8();
sub_8012D60(&sUnknown_203B238->unk74, sUnknown_203B238->unk34, 0, 0, sUnknown_203B238->menuAction, 2);
break;
case 3:
sub_801C620(sUnknown_203B238->iqSkillIndex);
break;
case 4:
break;
}
}
static void sub_801C0C8(void)
{
struct unkStruct_203B238 *puVar1;
s32 i;
u8 *nullText;
u32 menuAction;
s32 max;
puVar1 = sUnknown_203B238;
nullText = NULL;
sUnknown_203B238->unk34[0].text = sSwitch;
puVar1->unk34[0].menuAction = 2;
menuAction = 1;
puVar1->unk34[1].text = gCommonInfo[0];
puVar1->unk34[1].menuAction = 3;
max = 2;
puVar1->unk34[2].text = nullText;
puVar1->unk34[2].menuAction = menuAction;
for (i = 0; i < max; i++) {
if (sUnknown_203B238->unk34[i].menuAction == sUnknown_203B238->menuAction)
return;
}
sUnknown_203B238->menuAction = 2;
}
static void sub_801C118(void)
{
switch (sub_801C308(TRUE)) {
case 3:
sUnknown_203B238->unk24 = sub_801C390();
sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24];
sub_801BFB4(2);
break;
case 4:
sUnknown_203B238->unk24 = sub_801C390();
sUnknown_203B238->iqSkillIndex = sUnknown_203B238->iqSkills[sUnknown_203B238->unk24];
sub_801BFB4(3);
break;
case 2:
sub_801C3F8();
sub_801BFB4(4);
break;
case 0:
case 1:
break;
}
}
static void sub_801C1A0(void)
{
s32 menuAction;
menuAction = 0;
sub_801C308(FALSE);
if (!sub_8012FD8(&sUnknown_203B238->unk74)) {
sub_8013114(&sUnknown_203B238->unk74, &menuAction);
if (menuAction != 1)
sUnknown_203B238->menuAction = menuAction;
}
switch (menuAction) {
case 2:
PlaySound(307);
ToggleIQSkill((u8 *)&sUnknown_203B238->pokeStruct->IQSkills, sUnknown_203B238->iqSkillIndex);
sub_801BFB4(1);
break;
case 3:
sub_801BFB4(3);
break;
case 1:
sub_801BFB4(1);
break;
}
}
static void sub_801C228(void)
{
switch (sub_801C674()) {
case 2:
case 3:
sub_801C6B4();
sub_801BFB4(1);
case 0:
case 1:
break;
}
}

View File

@ -1,171 +0,0 @@
#include "global.h"
#include "globaldata.h"
#include "code_80118A4.h"
#include "code_80130A8.h"
#include "code_801C244.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "pokemon_3.h"
#include "text1.h"
#include "text2.h"
extern u8 gUnknown_202DEA8[];
static EWRAM_DATA_2 struct unkStruct_203B23C *sUnknown_203B23C = {0};
#include "data/code_801C244.h"
static void sub_801C440(void);
bool8 sub_801C244(s16 species, u32 index, u32 a2)
{
#ifndef NONMATCHING
register s32 species_s32 asm("r4");
#else
s32 species_s32;
#endif
species_s32 = species;
if (HasNoAvailIQSkills(species))
return FALSE;
if (sUnknown_203B23C == NULL)
sUnknown_203B23C = MemoryAlloc(sizeof(struct unkStruct_203B23C), 8);
sUnknown_203B23C->species = species_s32;
sUnknown_203B23C->pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
sUnknown_203B23C->numIQSkills = GetNumAvailableIQSkills(sUnknown_203B23C->iqSkills, sUnknown_203B23C->pokeStruct->IQ);
sUnknown_203B23C->s24.s0.unk34 = index;
sUnknown_203B23C->s24.s0.unk38 = &sUnknown_203B23C->s24.s0.unk3C[index];
sub_8006518(sUnknown_203B23C->s24.s0.unk3C);
sUnknown_203B23C->s24.s0.unk3C[sUnknown_203B23C->s24.s0.unk34] = sUnknown_80DBDF0;
sUnknown_203B23C->s24.s0.unk38->unk14 = sUnknown_203B23C->s24.unk9C;
sub_8012D08(sUnknown_203B23C->s24.s0.unk38, a2);
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE);
sub_8013818(&sUnknown_203B23C->s24.s0.input, sUnknown_203B23C->numIQSkills, a2, index);
sub_801C440();
sub_801C4C8();
return TRUE;
}
u32 sub_801C308(bool8 a0)
{
if (!a0) {
sub_8013660(&sUnknown_203B23C->s24.s0.input);
return 0;
}
switch (GetKeyPress(&sUnknown_203B23C->s24.s0.input)) {
case 2:
PlayMenuSoundEffect(1);
return 2;
case 1:
PlayMenuSoundEffect(0);
return 3;
case 4:
PlayMenuSoundEffect(4);
return 4;
default:
if (sub_80138B8(&sUnknown_203B23C->s24.s0.input, 1) != 0) {
sub_801C440();
sub_801C4C8();
return 1;
}
return 0;
}
}
s32 sub_801C390(void)
{
return (sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + sUnknown_203B23C->s24.s0.input.menuIndex;
}
void sub_801C3B0(bool8 r0)
{
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B23C->s24.s0.unk3C, FALSE, FALSE);
sUnknown_203B23C->s24.s0.input.unk22 = sUnknown_203B23C->numIQSkills;
sub_8013984(&sUnknown_203B23C->s24.s0.input);
sub_801C440();
sub_801C4C8();
if (r0)
AddMenuCursorSprite(&sUnknown_203B23C->s24.s0.input);
}
void sub_801C3F8(void)
{
if (sUnknown_203B23C != NULL) {
sUnknown_203B23C->s24.s0.unk3C[sUnknown_203B23C->s24.s0.unk34] = sUnknown_80DBDD8;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE);
MemoryFree(sUnknown_203B23C);
sUnknown_203B23C = NULL;
}
}
static void sub_801C440(void)
{
sUnknown_203B23C->s24.unk9C[0] = sUnknown_203B23C->s24.s0.input.unk20;
sUnknown_203B23C->s24.unk9C[1] = sUnknown_203B23C->s24.s0.input.unk1E;
sUnknown_203B23C->s24.unk9C[2] = 10;
sUnknown_203B23C->s24.unk9C[3] = 0;
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B23C->s24.s0.unk3C, TRUE, TRUE);
SUB_80095E4_CALL_2(sUnknown_203B23C->s24.s0);
}
void sub_801C4C8(void)
{
u32 y;
s32 x;
s32 x2;
u32 skillIndex;
s32 counter;
sub_8008C54(sUnknown_203B23C->s24.s0.unk34);
sub_80073B8(sUnknown_203B23C->s24.s0.unk34);
x = sUnknown_203B23C->s24.s0.input.unk1E * 8;
x2 = x;
x2 += 10;
xxx_call_draw_string(x2, 0, sIQSkills, sUnknown_203B23C->s24.s0.unk34, 0);
x += 4;
x2 = x + sUnknown_203B23C->s24.unk9C[2] * 8;
sub_8012BC4(x2, 0, sUnknown_203B23C->s24.s0.input.unk1E + 1, 1, 7, sUnknown_203B23C->s24.s0.unk34);
for (counter = 0; counter < sUnknown_203B23C->s24.s0.input.unk1A; counter++) {
skillIndex = sUnknown_203B23C->iqSkills[(sUnknown_203B23C->s24.s0.input.unk1E * sUnknown_203B23C->s24.s0.input.unk1C) + counter];
y = sub_8013800(&sUnknown_203B23C->s24.s0.input, counter);
strncpy(gUnknown_202DEA8, GetIQSkillName(skillIndex), 80);
if (IsIQSkillSet((u8 *)&sUnknown_203B23C->pokeStruct->IQSkills, 1 << skillIndex))
strcpy(gUnknown_202DEA8 - 80, sStarBullet);
else
strcpy(gUnknown_202DEA8 - 80, sUnknown_80DBE18);
xxx_format_and_draw(12, y, sFmt01, sUnknown_203B23C->s24.s0.unk34, 0);
}
sub_80073E0(sUnknown_203B23C->s24.s0.unk34);
}
bool8 HasNoAvailIQSkills(s16 species)
{
s32 species_s32;
u8 iqSkillBuffer[NUM_IQ_SKILLS];
PokemonStruct1 *pokeStruct;
species_s32 = species;
pokeStruct = &gRecruitedPokemonRef->pokemon[species_s32];
if (GetNumAvailableIQSkills(iqSkillBuffer, pokeStruct->IQ) == 0)
return TRUE;
return FALSE;
}

View File

@ -1,157 +0,0 @@
#include "global.h"
#include "globaldata.h"
#include "code_80118A4.h"
#include "code_80130A8.h"
#include "code_801C620.h"
#include "code_8097DD0.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "pokemon_3.h"
#include "sprite.h"
#include "text1.h"
#include "text2.h"
extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[]; // 202DF98
static EWRAM_DATA_2 struct unkStruct_203B240 *sUnknown_203B240 = {0};
#include "data/code_801C620.h"
static void sub_801C6D0(s32 newState);
static void sub_801C6E4(void);
static void sub_801C7D4(void);
static void sub_801C848(void);
bool8 sub_801C620(u8 iqSkill)
{
ResetSprites(TRUE);
sUnknown_203B240 = MemoryAlloc(sizeof(struct unkStruct_203B240), 8);
sUnknown_203B240->chosenIQSkill = iqSkill;
sub_801317C(&sUnknown_203B240->unk88);
sUnknown_203B240->unk24 = 0;
sub_80140B4(sUnknown_203B240->unk28);
ResetUnusedInputStruct();
sub_800641C(sUnknown_203B240->unk28, TRUE, TRUE);
sub_801C6D0(0);
return TRUE;
}
u32 sub_801C674(void)
{
switch (sUnknown_203B240->state) {
case 0:
sub_801C7D4();
break;
case 1:
sub_801C848();
break;
case 3:
return 3;
case 2:
default:
return 2;
}
return 0;
}
void sub_801C6B4(void)
{
if (sUnknown_203B240 != NULL) {
MemoryFree(sUnknown_203B240);
sUnknown_203B240 = NULL;
}
}
static void sub_801C6D0(s32 newState)
{
sUnknown_203B240->state = newState;
sub_801C6E4();
}
static void sub_801C6E4(void)
{
u8 *skillName;
struct subStruct_203B240 *preload;
switch (sUnknown_203B240->state) {
case 0:
sub_8008C54(sUnknown_203B240->unk24);
sub_80073B8(sUnknown_203B240->unk24);
skillName = GetIQSkillName(sUnknown_203B240->chosenIQSkill);
strcpy(gUnknown_202DE58, skillName);
xxx_format_and_draw(16, 0, sFmtMoveItem0, 0, 0); // {ARG_MOVE_ITEM_0}
xxx_call_draw_string(8, 16, GetIQSkillDescription(sUnknown_203B240->chosenIQSkill), sUnknown_203B240->unk24, 0);
sub_80073E0(sUnknown_203B240->unk24);
sUnknown_203B240->unkC = sub_8097DF0(GetIQSkillDescription(sUnknown_203B240->chosenIQSkill), sUnknown_203B240->unk10);
sUnknown_203B240->unk20 = 0;
break;
case 1:
sub_8008C54(sUnknown_203B240->unk24);
sub_80073B8(sUnknown_203B240->unk24);
preload = sUnknown_203B240->unk10[sUnknown_203B240->unk8];
strcpy(gAvailablePokemonNames, preload->pokeName);
xxx_format_and_draw(16, 0, sFmtPkmn0, sUnknown_203B240->unk24, 0); // {ARG_POKEMON_0}
xxx_format_and_draw(4, 16, sUnknown_203B240->unk10[sUnknown_203B240->unk8]->unk4, sUnknown_203B240->unk24, 0);
sub_80073E0(sUnknown_203B240->unk24);
break;
case 2:
case 3:
break;
}
}
static void sub_801C7D4(void)
{
if (sUnknown_203B240->unkC != 0) {
if (sUnknown_203B240->unk20 & 8)
sub_8013F84();
sUnknown_203B240->unk20++;
}
switch (sub_8012A64(&sUnknown_203B240->unk88, sUnknown_203B240->unk24)) {
case 1:
PlayMenuSoundEffect(0);
if (sUnknown_203B240->unkC != 0) {
sUnknown_203B240->unk8 = 0;
sub_801C6D0(1);
}
else
sub_801C6D0(3);
break;
case 2:
PlayMenuSoundEffect(1);
sub_801C6D0(2);
break;
}
}
static void sub_801C848(void)
{
if (sUnknown_203B240->unk8 < sUnknown_203B240->unkC - 1) {
if (sUnknown_203B240->unk20 & 8)
sub_8013F84();
sUnknown_203B240->unk20++;
}
switch (sub_8012A64(&sUnknown_203B240->unk88, sUnknown_203B240->unk24)) {
case 1:
PlayMenuSoundEffect(0);
sUnknown_203B240->unk8++;
if (sUnknown_203B240->unk8 < sUnknown_203B240->unkC)
sub_801C6D0(1);
else
sub_801C6D0(0);
break;
case 2:
PlayMenuSoundEffect(1);
sub_801C6D0(2);
break;
}
}

View File

@ -218,7 +218,7 @@ void sub_801CCD8(void)
{
u32 y;
u32 y2;
u32 uVar3;
u32 itemID;
s32 index;
u8 buffer[80];
@ -228,14 +228,14 @@ void sub_801CCD8(void)
sub_8012BC4(sUnknown_203B244->unk550[2] * 8 + 4, 0, sUnknown_203B244->input.unk1E + 1, 2, 7, sUnknown_203B244->unk4E8);
for(index = 0; index < sUnknown_203B244->input.unk1A; index++) {
uVar3 = sUnknown_203B244->itemIDs[(sUnknown_203B244->input.unk1E * sUnknown_203B244->input.unk1C) + index];
BufferItemName(buffer, uVar3, NULL);
itemID = sUnknown_203B244->itemIDs[(sUnknown_203B244->input.unk1E * sUnknown_203B244->input.unk1C) + index];
BufferItemName(buffer, itemID, NULL);
y = sub_8013800(&sUnknown_203B244->input, index);
xxx_call_draw_string(8, y, buffer, sUnknown_203B244->unk4E8, 0);
y2 = sub_8013800(&sUnknown_203B244->input, index);
sub_8012BC4((sUnknown_203B244->unk4EC->unkC * 8) - 2, y2, gTeamInventoryRef->teamStorage[uVar3], 3, 5, sUnknown_203B244->unk4E8);
sub_8012BC4((sUnknown_203B244->unk4EC->unkC * 8) - 2, y2, gTeamInventoryRef->teamStorage[itemID], 3, 5, sUnknown_203B244->unk4E8);
if (sub_801CFE0(uVar3) & 1)
if (sub_801CFE0(itemID) & 1)
sub_8007B7C(sUnknown_203B244->unk4E8, 8, sub_8013800(&sUnknown_203B244->input, index), (sUnknown_203B244->unk4EC->unkC - 1) * '\b', 10); // TODO: Ghidra being crazy
}
@ -340,4 +340,4 @@ UNUSED static void sub_801CFF4(u8 index, u32 value)
struct unkStruct_203B244 *sub_801D008(void)
{
return sUnknown_203B244;
}
}

View File

@ -3,12 +3,12 @@
#include "bg_palette_buffer.h"
#include "code_800D090.h"
#include "code_80130A8.h"
#include "code_801BEEC.h"
#include "iq_skill_menu.h"
#include "code_801D014.h"
#include "code_80227B8.h"
#include "code_8023868.h"
#include "code_8024458.h"
#include "code_8096AF8.h"
#include "code_80958E8.h"
#include "common_strings.h"
#include "constants/friend_area.h"
#include "event_flag.h"
@ -264,22 +264,22 @@ static void sub_801D3A8(void)
sub_8027074();
break;
case 5:
sub_8025EF4(sUnknown_203B250->pokeStruct);
CreatePartyListMenu(sUnknown_203B250->pokeStruct);
break;
case 6:
sub_80252F0(0);
CreateFriendListMenu(0);
break;
case 7:
sub_80252F0(1);
CreateFriendListMenu(1);
break;
case 8:
sub_8024458(sUnknown_203B250->index, 2);
break;
case 9:
sub_801BEEC(sUnknown_203B250->index);
CreateIQSkillMenu(sUnknown_203B250->index);
break;
case 10:
sub_8021774(sUnknown_203B250->currFriendAreaLocation, TRUE, 2);
CreateWigglytuffShopFriendAreaMenu(sUnknown_203B250->currFriendAreaLocation, TRUE, 2);
break;
case 11:
InitializeJobListMenu(0);
@ -462,7 +462,7 @@ static void sub_801D798(void)
if (sub_802604C())
sUnknown_203B250->unk7 = sUnknown_203B250->currFriendAreaLocation;
sub_8026058();
CleanPartyListMenu();
sub_801D208(2);
break;
}
@ -478,7 +478,7 @@ static void sub_801D7CC(void)
case 2:
case 3:
sUnknown_203B250->unk7 = sub_802540C();
sub_8025418();
CleanFriendListMenu();
if (sUnknown_203B250->unk7 != 0)
sub_801D208(2);
@ -512,7 +512,7 @@ static void sub_801D824(void)
break;
case 2:
case 3:
sub_801BF98();
CleanIQSkillMenu();
sub_801D208(1);
break;
}
@ -520,14 +520,14 @@ static void sub_801D824(void)
static void sub_801D840(void)
{
switch (sub_80217EC()) {
switch (HandleWigglytuffShopFriendAreaMenuInput()) {
case 0:
case 1:
default:
break;
case 2:
case 3:
sub_8021830();
CleanWigglytuffShopFriendAreaInfoMenu();
sub_801D208(1);
break;
}
@ -623,4 +623,4 @@ static void LoadTeamRankBadge(u32 a0, u32 a1, u32 a2)
teamBadgePic = &teamBadgePic[rank * 128];
sub_8007E20(a0, a1, a2, 16, 16, teamBadgePic, 14);
CloseFile(teamBadgeFile);
}
}

View File

@ -16,10 +16,9 @@ extern u8 gAvailablePokemonNames[];
struct unkStruct_203B278
{
s32 state;
u16 *moveIDs;
u16 unk8;
u16 fillA;
/* 0x0 */ s32 state;
/* 0x4 */ u16 *moveIDs;
/* 0x8 */ u16 selectedMoveID;
s32 unkC;
s32 unk10;
struct subStruct_203B240 *unk14[4];
@ -141,8 +140,8 @@ void sub_801F9A4(void)
switch (gUnknown_203B278->state) {
case 0:
sub_8008C54(gUnknown_203B278->unk5C);
gUnknown_203B278->unk8 = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E];
gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->unk8,gUnknown_203B278->unk5C,gUnknown_203B278->unk14);
gUnknown_203B278->selectedMoveID = gUnknown_203B278->moveIDs[gUnknown_203B278->unk28.unk1E];
gUnknown_203B278->unk10 = unk_MoveIDPrintMoveDescription(gUnknown_203B278->unk28.unk1E,gUnknown_203B278->selectedMoveID,gUnknown_203B278->unk5C,gUnknown_203B278->unk14);
gUnknown_203B278->unk24 = 0;
break;
case 1:

View File

@ -4,8 +4,7 @@
#include "code_802DB28.h"
#include "code_802F204.h"
#include "code_803C1D0.h"
#include "code_80958E8_1.h"
#include "code_8096AF8.h"
#include "code_80958E8.h"
#include "exclusive_pokemon.h"
#include "input.h"
#include "items.h"

View File

@ -1,6 +1,8 @@
#include "global.h"
#include "globaldata.h"
#include "code_803D0D8.h"
#include "code_8092334.h"
#include "memory.h"
static EWRAM_DATA_2 u8 sUnknown_203B408 = {0};
@ -26,4 +28,71 @@ u8 sub_803D100(u8 r0)
return sUnknown_80F42D0[r0];
}
// Probably continues in code_803D110.s
u8 sub_803D110(u8 *param_1, u8 *param_2, s32 size)
{
s32 index1;
s32 newSize;
s32 save;
unkStruct_8094924 auStack_88;
u8 local_78 [56];
u8 auStack_40 [36];
for(index1 = 0; index1 < 34; index1++)
{
auStack_40[index1] = 0;
}
for (index1 = 0; index1 < size; index1++)
{
local_78[index1] = sub_803D0F0(*param_1);
if (local_78[index1] == 0xff) {
return 0;
}
param_1++;
}
newSize = size * 5 + 5;
if (newSize < 0) {
newSize = size * 5 + 0xc;
}
newSize >>= 3;
save = newSize;
xxx_init_struct_8094924_save_809486C(&auStack_88,auStack_40, save);
for(index1 = 0; index1 < size; index1++)
{
SaveIntegerBits(&auStack_88, &local_78[index1], 5);
}
nullsub_102(&auStack_88);
MemoryCopy8(param_2, auStack_40, save);
return 1;
}
void sub_803D1A8(u8 *param_1, u8 *param_2, s32 size)
{
s32 index;
s32 newSize;
unkStruct_8094924 auStack_5c;
u8 local_4c [56];
newSize = size * 5 + 5;
if (newSize < 0) {
newSize = size * 5 + 0xc;
}
newSize >>= 3;
xxx_init_struct_8094924_restore_809485C(&auStack_5c, param_2, newSize);
for(index = 0; index < size; index++)
{
RestoreIntegerBits(&auStack_5c, &local_4c[index], 5);
}
nullsub_102(&auStack_5c);
for(index = 0; index < size; index++)
{
*param_1++ = sub_803D100(local_4c[index]);
}
}
// Probably continues in code_803D110.s

View File

@ -1,6 +1,7 @@
#include "global.h"
#include "code_8045A00.h"
#include "constants/item.h"
#include "dungeon_items.h"
#include "dungeon_map_access.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
@ -15,9 +16,7 @@ extern struct unkStruct_8090F58 gUnknown_80F699C;
extern struct unkStruct_8090F58 gUnknown_80F69A8;
extern struct unkStruct_8090F58 gUnknown_80F6990;
extern bool8 IsNotSpecialItem(u8 id);
void sub_8045BF8(u8 *, Item *);
void sub_8046CE4(void *param_1,u32 param_2);
extern u32 sub_803D73C(u32);
void sub_80460F8(Position *, Item *, u32);

View File

@ -6,6 +6,7 @@
#include "constants/direction.h"
#include "constants/friend_area.h"
#include "constants/weather.h"
#include "dungeon_items.h"
#include "dungeon_leader.h"
#include "dungeon_map_access.h"
#include "dungeon_music.h"
@ -18,8 +19,8 @@
#include "pokemon_3.h"
#include "pokemon.h"
#include "position_util.h"
#include "structs/dungeon_entity.h"
#include "structs/str_dungeon.h"
#include "exclusive_pokemon.h"
#include "trap.h"
extern u32 gUnknown_202EDC8;
extern u8 gUnknown_202E038[0x50];
@ -317,14 +318,10 @@ extern bool8 sub_800E9A8(s32);
extern void sub_800DC14(u32);
extern void sub_8086A3C(Entity *r0);
extern void sub_80854D4(void);
extern void sub_80855E4(void *);
extern void sub_8068FE0(Entity *, u32, u32);
extern void sub_803E708(u32, u32);
extern void sub_8086448(void);
extern void PlaySoundEffect(u32);
extern void IncreaseEntityPixelPos(Entity *, u32, u32);
extern void sub_8042B0C(Entity *);
extern void sub_803E708(u32, u32);
extern u8 sub_806FD18(Entity *);
@ -338,13 +335,12 @@ extern void SetupBossFightHP(Entity *, u32, u32);
extern void sub_803E9D0(void);
extern void DeoxysScreenFlash(void);
extern void sub_8085EB0();
extern void sub_808563C(void *);
void SetupDeoxysFightHP(Entity *r0);
void sub_808C550(void);
void sub_808C590(Entity *r0);
void SetupDeoxysFacingDirection(Entity *r0);
void sub_808C9B0();
void sub_808C9B0(Entity *);
void sub_808C8E0(Entity *param_1);
void sub_808C360(void);
void KyogreScreenFlash();
@ -352,7 +348,6 @@ void KyogreScreenFlash();
void sub_808C0CC();
void LugiaScreenFlash();
void LugiaScreenFlash2();
extern void sub_80861B8(Entity *, u32, u32);
void nullsub_99();
@ -364,10 +359,7 @@ extern void sub_8086A54(Entity *);
extern void sub_806BFC0(EntityInfo *, u32);
extern Entity *xxx_call_GetLeader(void);
extern void sub_808BBA8(Entity * );
extern void sub_80855E4(void *);
extern void sub_8041888(u32);
extern void sub_80861B8(Entity *, u32, u32);
extern void sub_803E708(u32, u32);
@ -387,7 +379,6 @@ extern u8 sub_80860A8(u32);
extern void sub_8049ED4();
extern void sub_8052D44(s16 *, Entity *, Entity *);
extern void sub_80421C0(Entity *, u32);
extern void sub_8046D20();
extern void sub_808B1CC(u8);
extern void sub_80464C8(Entity *, u32 *, Item *);
extern void SetDungeonBGColorRGB(u32, u32, u32, u32, u32);
@ -421,13 +412,11 @@ void sub_80891F0(void);
void sub_8089294(void);
void GroudonScreenFlash2(void);
extern u8 sub_8086AE4(u32);
extern u8 sub_8086AE4(s16);
extern void sub_8072008(Entity *, Entity *, s16, u32, u32);
extern void sub_8085374();
extern void sub_80856C8(Entity *, s32, s32);
extern void sub_8086A54(Entity *);
extern void sub_803F878(u32,s32);
@ -449,7 +438,7 @@ void ZapdosDropInEffect(Entity *param_1);
void ZapdosScreenFlash(int param_1);
extern s32 sub_8052C68(u32, const u8 *, const u8 *, u32);
extern void sub_80861A8(void);
extern void sub_80861A8(Entity *);
extern void sub_8045C28(Item *, u8 , u8 *);
extern void EnableJirachiWishWarpTile(void);
extern void sub_808BB3C(Position *);
@ -457,7 +446,6 @@ extern void sub_8046860(Entity *, Position *, Item *, u32);
extern u32 sub_803D73C(u32);
extern void sub_80460F8(Position *, Item *, u8);
extern void sub_807FE04(Position *, u8);
void ZapdosReFightDialogue(void)
{
@ -1084,7 +1072,7 @@ void ArticunoPreFightDialogue(void)
DisplayDungeonDialogue(gArticunoPreFightDialogue_7);
sub_803E708(10,0x46);
PlaySoundEffect(0); // snow flurry
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
PlaySoundEffect(0x1ee); // flash effect?
sub_8088574();
@ -1119,7 +1107,7 @@ void ArticunoReFightDialogue(void)
LeaderEntity = xxx_call_GetLeader();
ArticunoEntity = GetEntityFromClientType(0xd);
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
sub_803E708(10,0x46);
DisplayDungeonDialogue(gArticunoReFightDialogue_1);
@ -1146,7 +1134,7 @@ void ArticunoPostStoryPreFightDialogue(void)
sub_80866C4(gUnknown_8102A9C);
}
else {
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
ArticunoScreenFlash();
sub_8086738();
@ -2506,7 +2494,7 @@ void RaikouPreFightDialogue(void)
DisplayDungeonDialogue(gRaikouPreFightDialogue_1);
RaikouScreenFlash();
DisplayDungeonDialogue(gRaikouPreFightDialogue_2);
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
sub_803E708(10,70);
DisplayDungeonDialogue(gRaikouPreFightDialogue_3);
@ -2528,7 +2516,7 @@ void RaikouReFightDialogue(void)
LeaderEntity = xxx_call_GetLeader();
RaikouEntity = GetEntityFromClientType(0x13);
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
RaikouScreenFlash();
DisplayDungeonDialogue(gRaikouReFightDialogue_1);
@ -2552,7 +2540,7 @@ void RaikouPostStoryPreFightDialogue(void)
sub_80866C4(gRaikouPostStoryPreFightDialogue_4);
}
else {
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
DisplayDungeonDialogue(gRaikouPostStoryPreFightDialogue_1);
RaikouScreenFlash();

View File

@ -5,6 +5,7 @@
#include "constants/status.h"
#include "constants/type.h"
#include "constants/weather.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
@ -41,7 +42,6 @@ extern bool8 sub_8045888(Entity *);
extern void sub_806A2BC(Entity *, u8);
extern void sub_804178C(u32);
extern void sub_803F508(Entity *);
extern void sub_804AC20(Position *);
extern void sub_803E46C(u32);
extern void sub_803E708(u32 r0, u32 r1);
@ -71,23 +71,23 @@ void TriggerWeatherAbilities(void)
if (gDungeon->unkC != 0) {
gDungeon->unkC = 0;
gDungeon->nullifyWeather = FALSE;
gDungeon->weather.nullifyWeather = FALSE;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeon->allPokemon[index];
if (EntityExists(entity)) {
if (HasAbility(entity, ABILITY_DRIZZLE)) {
gDungeon->naturalWeather[WEATHER_RAIN] = 1;
gDungeon->weather.naturalWeather[WEATHER_RAIN] = 1;
}
else if (HasAbility(entity, ABILITY_SAND_STREAM)) {
gDungeon->naturalWeather[WEATHER_SANDSTORM] = 1;
gDungeon->weather.naturalWeather[WEATHER_SANDSTORM] = 1;
}
else if (HasAbility(entity, ABILITY_DROUGHT)) {
gDungeon->naturalWeather[WEATHER_SUNNY] = 1;
gDungeon->weather.naturalWeather[WEATHER_SUNNY] = 1;
}
if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) {
gDungeon->nullifyWeather = TRUE;
gDungeon->weather.nullifyWeather = TRUE;
}
}
}

View File

@ -11,8 +11,7 @@
#include "sprite.h"
#include "tile_types.h"
// data_8106A4C.s
extern const u8 gUnknown_8106EEF[];
const u8 gUnknown_8106EEF[] = {0x03, 0x04, 0x05, 0x00, 0x00, 0x70, 0x6b, 0x73, 0x64, 0x69, 0x72, 0x30, 0x00 };
// code_803D110.s
extern void sub_803E46C(u32);
@ -32,7 +31,7 @@ void sub_806CC10(void)
if (entityInfo->unk166 != 0) {
entityInfo->unk166--;
if ((entityInfo->unk166 & 1) == 0) // If value is even:
sub_806CDD4(entity, 0, (entityInfo->action.direction - 1) & 7);
sub_806CDD4(entity, 0, (entityInfo->action.direction - 1) & DIRECTION_MASK);
}
}
}
@ -208,25 +207,25 @@ void sub_806CF60(void)
u32 sub_806CF98(Entity *entity)
{
struct Tile *mapTile;
u32 uVar3;
u32 shadowSize;
u16 terrainType;
EntityInfo *entityInfo;
mapTile = GetTileAtEntitySafe(entity);
terrainType = mapTile->terrainType & (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY);
entityInfo = entity->info;
uVar3 = GetShadowSize(entityInfo->apparentID);
shadowSize = GetShadowSize(entityInfo->apparentID);
if (terrainType == (TERRAIN_TYPE_NORMAL | TERRAIN_TYPE_SECONDARY))
return 6;
if (terrainType == TERRAIN_TYPE_NORMAL) {
if (IsWaterTileset())
uVar3 = gUnknown_8106EEF[uVar3];
shadowSize = gUnknown_8106EEF[shadowSize];
}
else if (terrainType == TERRAIN_TYPE_SECONDARY && gDungeonWaterType[gDungeon->tileset] != DUNGEON_WATER_TYPE_LAVA)
uVar3 = gUnknown_8106EEF[uVar3];
shadowSize = gUnknown_8106EEF[shadowSize];
entityInfo->unk204 = uVar3;
return uVar3;
entityInfo->unk204 = shadowSize;
return shadowSize;
}

225
src/code_8072F3C.c Normal file
View File

@ -0,0 +1,225 @@
#include "global.h"
#include "globaldata.h"
#include "constants/input.h"
#include "code_80118A4.h"
#include "input.h"
#include "memory.h"
#include "menu_input.h"
#include "text1.h"
#include "text2.h"
#include "structs/struct_sub80095e4.h"
struct unkStruct_203B314
{
// size: 0x15C
s16 unk0[2];
u8 fill4[0x5C - 0x4];
u8 unk5C[2];
u8 fill5E[0x8A - 0x5E];
u8 unk8A[2];
u8 unk8C[0xB8 - 0x8C];
u8 unkB8;
u8 unkB9;
u8 unkBA;
u8 unkBB;
struct struct_Sub80095E4_2 sBC;
};
EWRAM_DATA_2 struct unkStruct_203B314 *gUnknown_203B314 = {0};
const UnkTextStruct2 gUnknown_80E06FC = {
0x00, 0x00, 0x00, 0x00,
0x03,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
const UnkTextStruct2 gUnknown_80E0714 = {
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x02,
0x0E, 0x0E,
0x0E, 0x00,
NULL
};
const UnkTextStruct2 gUnknown_80E072C = {
0x00, 0x00, 0x00, 0x00,
0x06,
0x02, 0x02,
0x10, 0x10,
0x10, 0x00,
NULL
};
ALIGNED(4) const u8 gUnknown_80E0744[] = "Dungeons";
ALIGNED(4) const u8 gUnknown_80E0750[] = {0x83, 0xC2};
ALIGNED(4) const u8 gUnknown_80E0754[] = {0x83, 0xC0};
void sub_802F9C0(void);
void sub_802FA50(void);
const u8 *sub_80974A0(s16 index);
extern bool8 sub_802FCF0(u32);
extern s32 sub_802FBF4(void);
u32 sub_802F73C(u32 r0, UnkTextStruct2_sub *r1, u32 r2, u8 r3)
{
if (sub_802FCF0(r0))
return 0;
if (gUnknown_203B314 == NULL)
gUnknown_203B314 = MemoryAlloc(sizeof(struct unkStruct_203B314), 8);
gUnknown_203B314->unkB8 = r3;
gUnknown_203B314->sBC.s0.unk34 = r0;
gUnknown_203B314->sBC.s0.unk38 = &gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34];
sub_8006518(gUnknown_203B314->sBC.s0.unk3C);
if (r3 != 0)
gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E072C;
else
gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E0714;
gUnknown_203B314->sBC.s0.unk38->unk14 = gUnknown_203B314->sBC.unk9C;
if (r1 != 0)
gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34].unk8 = *r1;
sub_8012D08(gUnknown_203B314->sBC.s0.unk38, r2);
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE);
sub_8013818(&gUnknown_203B314->sBC.s0.input, sub_802FBF4(), r2, r0);
sub_802F9C0();
sub_802FA50();
return 1;
}
u32 sub_802F848(s16 param_1)
{
int index;
s32 param_1_32;
param_1_32 = param_1; // cast needed
for( index = 0; index < gUnknown_203B314->sBC.s0.input.unk22; index++ ) {
if (gUnknown_203B314->unk0[index] == param_1_32) {
sub_8013878(&gUnknown_203B314->sBC.s0.input,index);
sub_802F9C0();
sub_802FA50();
return 1;
}
}
sub_8013878(&gUnknown_203B314->sBC.s0.input,0);
return 0;
}
u32 sub_802F8A0(u8 r0)
{
if(r0 == 0)
{
sub_8013660(&gUnknown_203B314->sBC.s0.input);
return 0;
}
else
{
switch(GetKeyPress(&gUnknown_203B314->sBC.s0.input))
{
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_80138B8(&gUnknown_203B314->sBC.s0.input, 1) != 0)
{
sub_802F9C0();
sub_802FA50();
return 1;
}
else
{
return 0;
}
}
}
}
s16 sub_802F90C(void)
{
return gUnknown_203B314->unk0[(gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C) + gUnknown_203B314->sBC.s0.input.menuIndex];
}
void sub_802F938(u8 r0)
{
gUnknown_203B314->sBC.s0.input.unk22 = sub_802FBF4();
sub_8013984(&gUnknown_203B314->sBC.s0.input);
sub_802F9C0();
sub_802FA50();
if(r0 != 0)
AddMenuCursorSprite(&gUnknown_203B314->sBC.s0.input);
}
void sub_802F974(void)
{
if(gUnknown_203B314 != NULL)
{
gUnknown_203B314->sBC.s0.unk3C[gUnknown_203B314->sBC.s0.unk34] = gUnknown_80E06FC;
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B314->sBC.s0.unk3C, TRUE, TRUE);
MemoryFree(gUnknown_203B314);
gUnknown_203B314 = NULL;
}
}
void sub_802F9C0(void)
{
gUnknown_203B314->sBC.unk9C[0] = 1;
gUnknown_203B314->sBC.unk9C[1] = 0;
gUnknown_203B314->sBC.unk9C[2] = 8;
gUnknown_203B314->sBC.unk9C[3] = 0;
SUB_80095E4_CALL(gUnknown_203B314->sBC.s0);
}
void sub_802FA50(void)
{
s32 sVar1;
const u8 *text;
u32 y;
u32 y2;
int index;
int counter;
sub_8008C54(gUnknown_203B314->sBC.s0.unk34);
sub_80073B8(gUnknown_203B314->sBC.s0.unk34);
xxx_call_draw_string(10,0,gUnknown_80E0744,gUnknown_203B314->sBC.s0.unk34,0);
sub_8012BC4(gUnknown_203B314->sBC.unk9C[2] * 8 + 4,0,gUnknown_203B314->sBC.s0.input.unk1E + 1,2,7,gUnknown_203B314->sBC.s0.unk34);
if (gUnknown_203B314->unkB8 != 0) {
for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++)
{
y = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter);
index = gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter;
sVar1 = gUnknown_203B314->unk0[index];
if (gUnknown_203B314->unk5C[index] != 0) {
xxx_call_draw_string(10,y,gUnknown_80E0750,gUnknown_203B314->sBC.s0.unk34,0);
}
else if (gUnknown_203B314->unk8A[index] != 0) {
xxx_call_draw_string(10,y,gUnknown_80E0754,gUnknown_203B314->sBC.s0.unk34,0);
}
xxx_call_draw_string(0x18,y,sub_80974A0(sVar1),gUnknown_203B314->sBC.s0.unk34,0);
}
}
else {
for(counter = 0; counter < gUnknown_203B314->sBC.s0.input.unk1A; counter++)
{
y2 = sub_8013800(&gUnknown_203B314->sBC.s0.input,counter);
text = sub_80974A0(gUnknown_203B314->unk0[gUnknown_203B314->sBC.s0.input.unk1E * gUnknown_203B314->sBC.s0.input.unk1C + counter]);
xxx_call_draw_string(8,y2,text,gUnknown_203B314->sBC.s0.unk34,0);
}
}
sub_80073E0(gUnknown_203B314->sBC.s0.unk34);
}

View File

@ -15,10 +15,10 @@
#include "structs/str_dungeon.h"
#include "tile_types.h"
#include "position_util.h"
#include "trap.h"
extern void sub_8049ED4(void);
extern void sub_8073D14(Entity *);
extern void sub_807FE9C(Entity *, Position *, u32, u32);
void sub_8075680(void)
{

View File

@ -6,6 +6,7 @@
#include "constants/type.h"
#include "dungeon_ai.h"
#include "dungeon_leader.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "move_util.h"
@ -20,10 +21,8 @@ extern void sub_80426C8(u32, u32);
extern void sub_8068FE0(Entity *, u32, Entity *r2);
extern void nullsub_93(Position *);
extern void sub_80522F4(Entity *, Entity *, u8 *);
extern void sub_806F370(Entity *r0, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void sub_806F370(Entity *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32);
extern void sub_80694C0(Entity *, s32, s32, u32);
extern void sub_804535C(Entity *, u32);
extern void sub_804AC20(Position *);
extern void sub_807EC28(bool8);
extern void sub_806A5B8(Entity *);
@ -35,7 +34,7 @@ extern u8 *gUnknown_80F9CBC[];
extern u8 gAvailablePokemonNames[];
extern u8 *gUnknown_80FCAC0[];
void sub_807E1A0(Entity *pokemon,Entity *target,u8 param_3,s16 param_4,s32 param_5)
void sub_807E1A0(Entity *pokemon,Entity *target,u8 moveType,s16 param_4,s32 param_5)
{
EntityInfo *targetInfo;
u8 flag;
@ -65,7 +64,7 @@ void sub_807E1A0(Entity *pokemon,Entity *target,u8 param_3,s16 param_4,s32 param
newHP /= 2;
}
}
sub_806F370(pokemon,target,newHP,0,&flag,param_3,param_4_s32,0,0,0);
sub_806F370(pokemon,target,newHP,0,&flag,moveType,param_4_s32,0,0,0);
}
}
}
@ -95,8 +94,8 @@ void sub_807E254(Entity *pokemon,Entity *target)
nullsub_93(&targetPos);
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
sub_804535C(pokemon,0x0);
sub_804535C(target,0x0);
sub_804535C(pokemon,NULL);
sub_804535C(target,NULL);
if (EntityExists(pokemon)) {
if (pokemon->info->isTeamLeader) {

View File

@ -1,11 +0,0 @@
#include "global.h"
#include "structs/str_dungeon.h"
void sub_807FC3C(Position *pos, u32 trapID, u32 param_3)
{
gDungeon->trapPos.x = pos->x;
gDungeon->trapPos.y = pos->y;
gDungeon->trapID = trapID;
gDungeon->unk13579 = param_3;
gDungeon->unk13570 = 1;
}

View File

@ -1,19 +1,19 @@
#include "global.h"
#include "code_8092334.h"
#include "structs/str_position.h"
extern void sub_8082FE0(u32, void *, u32);
extern void sub_8082FA8(void *, void *, u32);
extern void sub_8082FE0(unkStruct_8094924 *, void *, u32 size);
extern void sub_8082FA8(unkStruct_8094924 *, void *, u32);
void nullsub_98()
void nullsub_98(unkStruct_8094924 *param_1)
{}
void sub_808300C(u32 *param_1, u32 *param_2)
void sub_808300C(unkStruct_8094924 *param_1, u8 *param_2)
{
sub_8082FA8(param_1, param_2, 8);
}
void sub_8083018(u32 param_1)
void sub_8083018(unkStruct_8094924 *param_1)
{
u8 auStack_10 [12];
@ -21,7 +21,7 @@ void sub_8083018(u32 param_1)
auStack_10[8] = 0;
}
void sub_8083030(u32 *param_1, u32 param_2)
void sub_8083030(unkStruct_8094924 *param_1, u16 param_2)
{
u16 uStack_8;
@ -29,7 +29,7 @@ void sub_8083030(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,2);
}
void sub_8083048(u32 *param_1, u32 param_2)
void sub_8083048(unkStruct_8094924 *param_1, u32 param_2)
{
u16 uStack_8;
@ -37,7 +37,7 @@ void sub_8083048(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,2);
}
void sub_8083060(u32 *param_1, u32 param_2)
void sub_8083060(unkStruct_8094924 *param_1, u32 param_2)
{
u8 uStack_8;
@ -45,7 +45,7 @@ void sub_8083060(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,1);
}
void sub_8083078(u32 *param_1, u32 param_2)
void sub_8083078(unkStruct_8094924 *param_1, u32 param_2)
{
u32 uStack_8;
@ -53,7 +53,7 @@ void sub_8083078(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,4);
}
void sub_808308C(u32 *param_1, u32 param_2)
void sub_808308C(unkStruct_8094924 *param_1, u32 param_2)
{
u32 uStack_8;
@ -61,7 +61,7 @@ void sub_808308C(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,4);
}
void sub_80830A0(u32 *param_1, u32 param_2)
void sub_80830A0(unkStruct_8094924 *param_1, u32 param_2)
{
u32 uStack_8;
@ -69,7 +69,7 @@ void sub_80830A0(u32 *param_1, u32 param_2)
sub_8082FA8(param_1,&uStack_8,4);
}
void sub_80830B4(u32 *param_1, u8 param_2)
void sub_80830B4(unkStruct_8094924 *param_1, u8 param_2)
{
u8 local_8;
@ -77,13 +77,13 @@ void sub_80830B4(u32 *param_1, u8 param_2)
sub_8082FA8(param_1,&local_8,1);
}
void SavePosition(u32 *param_1, Position *param_2)
void SavePosition(unkStruct_8094924 *param_1, Position *param_2)
{
sub_8082FA8(param_1, &param_2->x, 1);
sub_8082FA8(param_1, &param_2->y, 1);
}
void sub_80830F8(u32 *param_1, u32 *param_2)
void sub_80830F8(unkStruct_8094924 *param_1, u32 *param_2)
{
sub_8082FA8(param_1, &param_2[0], 1);
sub_8082FA8(param_1, &param_2[1], 1);
@ -91,18 +91,18 @@ void sub_80830F8(u32 *param_1, u32 *param_2)
sub_8082FA8(param_1, &param_2[3], 1);
}
void sub_808312C(u32 *param_1, u16 *param_2)
void sub_808312C(unkStruct_8094924 *param_1, u16 *param_2)
{
sub_8082FA8(param_1, &param_2[0], 1);
sub_8082FA8(param_1, &param_2[1], 1);
}
void SaveSpeedCounters(u32 *param_1, u32 *speedCounters, u32 numCounters)
void SaveSpeedCounters(unkStruct_8094924 *param_1, u32 *speedCounters, u32 numCounters)
{
sub_8082FA8(param_1, speedCounters, numCounters);
}
u16 sub_8083158(u32 param_1)
u16 sub_8083158(unkStruct_8094924 *param_1)
{
u16 local_8;
@ -110,7 +110,7 @@ u16 sub_8083158(u32 param_1)
return local_8;
}
s16 sub_8083170(u32 param_1)
s16 sub_8083170(unkStruct_8094924 *param_1)
{
s16 local_8;
@ -118,7 +118,7 @@ s16 sub_8083170(u32 param_1)
return local_8;
}
u8 sub_8083188(u32 param_1)
u8 sub_8083188(unkStruct_8094924 *param_1)
{
u8 local_8;
@ -126,7 +126,7 @@ u8 sub_8083188(u32 param_1)
return local_8;
}
u32 sub_80831A0(u32 param_1)
u32 sub_80831A0(unkStruct_8094924 *param_1)
{
u32 local_8;
@ -134,7 +134,7 @@ u32 sub_80831A0(u32 param_1)
return local_8;
}
u32 sub_80831B4(u32 param_1)
u32 sub_80831B4(unkStruct_8094924 *param_1)
{
u32 local_8;
@ -142,7 +142,7 @@ u32 sub_80831B4(u32 param_1)
return local_8;
}
u32 sub_80831C8(u32 param_1)
u32 sub_80831C8(unkStruct_8094924 *param_1)
{
u32 local_8;
@ -150,7 +150,7 @@ u32 sub_80831C8(u32 param_1)
return local_8;
}
bool8 sub_80831DC(u32 param_1)
bool8 sub_80831DC(unkStruct_8094924 *param_1)
{
u8 local_8;
@ -158,7 +158,7 @@ bool8 sub_80831DC(u32 param_1)
return local_8 != 0;
}
void sub_80831F8(u32 param_1,u16 *param_2)
void sub_80831F8(unkStruct_8094924 *param_1,u16 *param_2)
{
param_2[0] = 0;
param_2[1] = 0;
@ -167,7 +167,7 @@ void sub_80831F8(u32 param_1,u16 *param_2)
}
void sub_8083220(u32 param_1,u32 *param_2)
void sub_8083220(unkStruct_8094924 *param_1,u32 *param_2)
{
param_2[0] = 0;
param_2[1] = 0;
@ -179,7 +179,7 @@ void sub_8083220(u32 param_1,u32 *param_2)
sub_8082FE0(param_1,&param_2[3],1);
}
void sub_8083260(u32 param_1,u16 *param_2)
void sub_8083260(unkStruct_8094924 *param_1,u16 *param_2)
{
param_2[0] = 0;
param_2[1] = 0;
@ -187,8 +187,8 @@ void sub_8083260(u32 param_1,u16 *param_2)
sub_8082FE0(param_1,&param_2[1],1);
}
void sub_8083288(u32 r0, u16 *r1, u32 r2)
void sub_8083288(unkStruct_8094924 *r0, u16 *r1, u32 size)
{
sub_8082FE0(r0, r1, r2);
sub_8082FE0(r0, r1, size);
}

View File

@ -3,6 +3,7 @@
#include "code_80869E4.h"
#include "constants/direction.h"
#include "structs/str_dungeon.h"
#include "dungeon_util.h"
#include "dungeon_util_1.h"
#include "random.h"
@ -27,12 +28,9 @@ extern void DisplayDungeonDialogue(const u8 *);
extern void sub_8085EB0(void);
extern void sub_803E748(void);
extern void sub_80855E4(void *);
extern s32 GetCameraXPos(void);
extern s32 GetCameraYPos(void);
extern void sub_803F878(u32, u32);
extern void IncreaseEntityPixelPos(Entity *, u32, u32);
extern void sub_804535C(Entity *, Position32 *);
extern void sub_8086A54(Entity *);
extern void sub_8086A3C(Entity *);
extern void PlaySoundEffect(u32);

View File

@ -17,14 +17,12 @@
extern u8 sub_8044B28(void);
extern u8 gUnknown_202E038[];
extern void sub_8085374();
extern void sub_80855E4(void *);
extern void sub_8068FE0(Entity *, u32, u32);
extern void DisplayDungeonDialogue(const u8 *);
extern void sub_803E708(u32, u32);
extern void sub_8086448(void);
extern void SkarmoryEntry(Entity *);
extern void sub_8086A54(Entity *);
extern void sub_808563C(void *);
extern void sub_8087144();
extern void sub_8072008(Entity *pokemon, Entity *r1, u32 r2, u8 r3, u32);
extern bool8 sub_8085B80(u8 *);

18
src/code_8094D28.c Normal file
View File

@ -0,0 +1,18 @@
#include "global.h"
IWRAM_DATA u32 gUnknown_3001198[0x270] = {0};
EWRAM_DATA_2 s32 gUnknown_203B470 = {0};
EWRAM_DATA_2 s32 gUnknown_203B474 = {0};
void sub_8094D28(s32 r0) {
gUnknown_3001198[0] = r0;
gUnknown_203B470 = 1;
for(; gUnknown_203B470 < 0x270; gUnknown_203B470++)
{
gUnknown_3001198[gUnknown_203B470] =
(gUnknown_3001198[gUnknown_203B470 - 1] ^
(gUnknown_3001198[gUnknown_203B470 - 1] >> 0x1e)) * 0x6c078965 + gUnknown_203B470;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,735 +0,0 @@
#include "constants/mailbox.h"
#include "global.h"
#include "constants/friend_area.h"
#include "constants/dungeon.h"
#include "constants/monster.h"
#include "constants/wonder_mail.h"
#include "items.h"
#include "code_80958E8.h"
#include "code_80958E8_1.h"
#include "random.h"
#include "pokemon.h"
#include "code_8096AF8.h"
#include "mailbox_8095F8C.h"
#include "event_flag.h"
#include "rescue_team_info.h"
extern u8 sub_8095E38(WonderMail *, u8, u8, bool8);
extern void sub_80965F4();
u8 sub_8097318(s16 param_1);
extern bool8 GenerateMailJobInfo(WonderMail *);
bool8 sub_803C1D0(DungeonLocation *, u8);
u8 sub_8095F28(u8);
void sub_803C37C(DungeonLocation *, u8, u8 *);
bool8 sub_8096E80(u8);
u8 sub_8095E78(void);
void sub_8096078(void);
bool8 sub_80963B4(void);
static void SortMailboxSlots(void)
{
s32 r1;
s32 r6;
WonderMail job;
for(r1 = 0; r1 < NUM_MAILBOX_SLOTS - 1; r1++)
{
for(r6 = r1 + 1; r6 < NUM_MAILBOX_SLOTS; r6++)
{
if(gUnknown_203B490->mailboxSlots[r6].mailType != 0)
{
if((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) ||
((gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.id == gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.id) &&
(gUnknown_203B490->mailboxSlots[r1].unk4.dungeon.floor > gUnknown_203B490->mailboxSlots[r6].unk4.dungeon.floor)))
{
job = gUnknown_203B490->mailboxSlots[r1];
gUnknown_203B490->mailboxSlots[r1] = gUnknown_203B490->mailboxSlots[r6];
gUnknown_203B490->mailboxSlots[r6] = job;
}
}
}
}
}
void sub_80961B4(void)
{
if (sub_8096E2C() != 0) {
gUnknown_203B490->unk328 = TRUE;
}
}
bool8 sub_80961D8(void)
{
s32 num;
s32 index;
u32 floor;
s32 friendAreaReward;
WonderMail *slot;
bool8 flag = FALSE;
num = CountFilledMailboxSlots();
index = RandRange(num, NUM_MAILBOX_SLOTS);
if(num >= NUM_MAILBOX_SLOTS) return 0;
if(!gUnknown_203B490->unk328)
return 0;
else
{
gUnknown_203B490->unk328 = flag;
}
floor = 0x38;
if(sub_8001D08(0xA, 0x31, 0x1))
{
if(!gUnknown_203B490->PKMNNewsReceived[0x35])
if(!sub_8096E80(0x35)) floor = 0x35;
}
if(sub_80023E4(0xF))
{
if(!gUnknown_203B490->PKMNNewsReceived[0x34])
if(!sub_8096E80(0x34)) floor = 0x34;
if(!gUnknown_203B490->PKMNNewsReceived[0x33])
if(!sub_8096E80(0x33)) floor = 0x33;
if(!gUnknown_203B490->PKMNNewsReceived[0x32])
if(!sub_8096E80(0x32)) floor = 0x32;
}
if(GetRescueTeamRank() == LUCARIO_RANK)
{
if(!gUnknown_203B490->PKMNNewsReceived[0x36])
if(!sub_8096E80(0x36)) floor = 0x36;
}
if(sub_80023E4(6))
{
if(!gUnknown_203B490->PKMNNewsReceived[0x37])
if(!sub_8096E80(0x37)) floor = 0x37;
}
if(floor != 0x38) goto _slot;
if(num > index) goto _08096392;
floor = sub_8096E2C();
if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E;
if (floor > 0x31) goto _0809638E;
_slot:
slot = GetMailboxSlotInfo(num);
slot->mailType = 1;
slot->unk4.dungeon.id = NUM_DUNGEONS;
slot->unk4.dungeon.floor = floor;
goto _flag;
_0809638E:
for(; num <= index; num++)
{
slot = GetMailboxSlotInfo(num);
if(GenerateMailJobInfo(slot))
{
friendAreaReward = sub_8095E78();
if(!sub_803C1D0(&slot->unk4.dungeon, slot->missionType)) friendAreaReward = FRIEND_AREA_NONE;
slot->rewardType = RandRange(MONEY1, END_REWARDS);
if(slot->rewardType == FRIEND_AREA)
{
if(friendAreaReward == FRIEND_AREA_NONE)
{
slot->rewardType = MONEY1;
flag = TRUE;
}
else
{
slot->friendAreaReward = friendAreaReward;
flag = TRUE;
}
}
else
{
_flag:
flag = TRUE;
}
} else break;
}
_08096392:
if(sub_80963B4())
flag = TRUE;
sub_8096078();
SortMailboxSlots();
return flag;
}
bool8 sub_80963B4(void)
{
u8 floor;
s32 num;
WonderMail *slot;
bool8 flag = FALSE;
floor = sub_8096E2C();
num = CountFilledMailboxSlots();
if(num >= NUM_MAILBOX_SLOTS) return FALSE;
if(sub_80023E4(0xE))
{
if(floor < 0x32)
{
slot = GetMailboxSlotInfo(num);
slot->mailType = 1;
slot->unk4.dungeon.id = NUM_DUNGEONS;
slot->unk4.dungeon.floor = floor;
flag = TRUE;
}
}
return flag;
}
void sub_80963FC(void)
{
s32 index;
WonderMail *slot;
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
{
slot = GetMailboxSlotInfo(index);
if(slot->mailType != 1)
{
ResetMailboxSlot(index);
}
}
sub_8096078();
slot = GetMailboxSlotInfo(CountFilledMailboxSlots());
slot->mailType = 5;
slot->missionType = 0;
slot->unk2 = 0;
slot->unk4.dungeon.id = DUNGEON_MT_STEEL;
slot->unk4.dungeon.floor = 3;
slot->unk4.seed = 0x00ffffff & Rand32Bit();
slot->clientSpecies = MONSTER_PIDGEY;
slot->targetSpecies = MONSTER_PIDGEY;
slot->targetItem = sub_8095F28(slot->unk4.dungeon.id);
slot->rewardType = MONEY1;
do
{
sub_803C37C(&slot->unk4.dungeon, slot->missionType, &slot->itemReward);
} while (slot->targetItem == slot->itemReward);
slot->friendAreaReward = FRIEND_AREA_NONE;
sub_8096078();
SortMailboxSlots();
}
void sub_8096488(void)
{
WonderMail *mail;
s32 index;
for(index = 0; index < NUM_MAILBOX_SLOTS; index++){
ResetMailboxSlot(index);
}
mail = GetMailboxSlotInfo(0);
mail->mailType = 1;
mail->unk4.dungeon.id = NUM_DUNGEONS;
mail->unk4.dungeon.floor = 0;
}
bool8 sub_80964B4(void)
{
if ((!gUnknown_203B490->PKMNNewsReceived[0x35]) && (sub_8096E80(0x35) == 0)) {
return FALSE;
}
else {
return TRUE;
}
}
bool8 sub_80964E4(void)
{
if ((!gUnknown_203B490->PKMNNewsReceived[0x36]) && (sub_8096E80(0x36) == 0)) {
return FALSE;
}
else {
return TRUE;
}
}
s32 CountFilledPelipperBoardSlots(void)
{
s32 index;
s32 slots;
slots = 0;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++) {
if (!IsPelipperBoardSlotEmpty(index)) {
slots++;
}
}
return slots;
}
UNUSED bool8 sub_8096538(WonderMail *mail)
{
s32 index;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
if(gUnknown_203B490->pelipperBoardJobs[index].mailType == 0)
{
gUnknown_203B490->pelipperBoardJobs[index] = *mail;
return FALSE;
}
}
return TRUE;
}
WonderMail *GetPelipperBoardSlotInfo(u8 index)
{
return &gUnknown_203B490->pelipperBoardJobs[index];
}
bool8 IsPelipperBoardSlotEmpty(u8 index)
{
if (gUnknown_203B490->pelipperBoardJobs[index].mailType == 0)
return TRUE;
else
return FALSE;
}
void ResetPelipperBoardSlot(u8 index)
{
gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE;
gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.id = 99;
gUnknown_203B490->pelipperBoardJobs[index].unk4.dungeon.floor = 0;
gUnknown_203B490->pelipperBoardJobs[index].rewardType = 0;
}
NAKED
void sub_80965F4(void)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
"\tmov r6, r8\n"
"\tpush {r6,r7}\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0\n"
"\tldr r0, _0809660C\n"
"\tmov r12, r0\n"
"\tmov r8, r3\n"
"\tmovs r4, 0\n"
"\tmov r9, r4\n"
"\tb _08096636\n"
"\t.align 2, 0\n"
"_0809660C: .4byte gUnknown_203B490\n"
"_08096610:\n"
"\tcmp r2, r3\n"
"\tble _0809662A\n"
"\tmov r1, r12\n"
"\tldr r0, [r1]\n"
"\tmov r5, r8\n"
"\tadds r1, r0, r5\n"
"\tadds r0, r4\n"
"\tadds r1, 0x50\n"
"\tadds r0, 0x50\n"
"\tldm r0!, {r5-r7}\n"
"\tstm r1!, {r5-r7}\n"
"\tldm r0!, {r6,r7}\n"
"\tstm r1!, {r6,r7}\n"
"_0809662A:\n"
"\tadds r4, 0x14\n"
"\tmovs r0, 0x14\n"
"\tadd r9, r0\n"
"\tadds r2, 0x1\n"
"\tadd r8, r0\n"
"\tadds r3, 0x1\n"
"_08096636:\n"
"\tcmp r2, 0x7\n"
"\tbgt _08096666\n"
"\tmov r1, r12\n"
"\tldr r0, [r1]\n"
"\tadds r0, r4\n"
"\tadds r0, 0x50\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbne _08096666\n"
"\tldr r6, _08096694\n"
"\tmov r1, r9\n"
"_0809664C:\n"
"\tadds r1, 0x14\n"
"\tadds r4, 0x14\n"
"\tmovs r5, 0x14\n"
"\tadd r9, r5\n"
"\tadds r2, 0x1\n"
"\tcmp r2, 0x7\n"
"\tbgt _08096666\n"
"\tldr r0, [r6]\n"
"\tadds r0, r1\n"
"\tadds r0, 0x50\n"
"\tldrb r0, [r0]\n"
"\tcmp r0, 0\n"
"\tbeq _0809664C\n"
"_08096666:\n"
"\tcmp r2, 0x8\n"
"\tbne _08096610\n"
"\tcmp r3, 0x7\n"
"\tbgt _08096688\n"
"\tldr r4, _08096694\n"
"\tmovs r2, 0\n"
"\tlsls r0, r3, 2\n"
"\tadds r0, r3\n"
"\tlsls r1, r0, 2\n"
"_08096678:\n"
"\tldr r0, [r4]\n"
"\tadds r0, r1\n"
"\tadds r0, 0x50\n"
"\tstrb r2, [r0]\n"
"\tadds r1, 0x14\n"
"\tadds r3, 0x1\n"
"\tcmp r3, 0x7\n"
"\tble _08096678\n"
"_08096688:\n"
"\tpop {r3,r4}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tpop {r4-r7}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_08096694: .4byte gUnknown_203B490");
}
void SortPelipperJobs(void)
{
s32 index1;
s32 index2;
WonderMail mail;
for(index1 = 0; index1 < MAX_ACCEPTED_JOBS - 1; index1++)
{
for(index2 = index1 + 1; index2 < MAX_ACCEPTED_JOBS; index2++)
{
if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE)
{
if((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) ||
((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.floor)))
{
mail = gUnknown_203B490->pelipperBoardJobs[index1];
gUnknown_203B490->pelipperBoardJobs[index1] = gUnknown_203B490->pelipperBoardJobs[index2];
gUnknown_203B490->pelipperBoardJobs[index2] = mail;
}
}
}
}
}
void GeneratePelipperJobs(void)
{
s32 range;
WonderMail *mail;
s32 index;
range = RandRange(4,8);
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
gUnknown_203B490->pelipperBoardJobs[index].mailType = MAIL_TYPE_NONE;
}
index = 0;
if (sub_8097318(0xe) != 0) {
mail = GetPelipperBoardSlotInfo(0);
mail->mailType = MAIL_TYPE_UNK2;
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
mail->unk2 = 1;
mail->unk4.dungeon.id = DUNGEON_UPROAR_FOREST;
mail->unk4.dungeon.floor = 10;
mail->unk4.seed = Rand32Bit() & 0xffffff;
mail->clientSpecies = MONSTER_WYNAUT;
mail->targetSpecies = MONSTER_MANKEY;
mail->targetItem = 0;
mail->rewardType = ITEM;
mail->itemReward = ITEM_REVIVER_SEED;
mail->friendAreaReward = 0;
index = 1;
}
if (sub_8097318(0xf) != 0) {
mail = GetPelipperBoardSlotInfo(index);
mail->mailType = MAIL_TYPE_UNK3;
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
mail->unk2 = 2;
mail->unk4.dungeon.id = DUNGEON_HOWLING_FOREST;
mail->unk4.dungeon.floor = 15;
mail->unk4.seed = Rand32Bit() & 0xffffff;
mail->clientSpecies = MONSTER_SMEARGLE;
mail->targetSpecies = MONSTER_SMEARGLE;
mail->targetItem = 0;
mail->rewardType = ITEM;
mail->itemReward = ITEM_REVIVER_SEED;
mail->friendAreaReward = 0;
index++;
}
if (sub_8097318(0x1c) != 0) {
mail = GetPelipperBoardSlotInfo(index);
mail->mailType = MAIL_TYPE_UNK4;
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
mail->unk2 = 3;
mail->unk4.dungeon.id = DUNGEON_WISH_CAVE;
mail->unk4.dungeon.floor = 20;
mail->unk4.seed = Rand32Bit() & 0xffffff;
mail->clientSpecies = MONSTER_MEDICHAM;
mail->targetSpecies = MONSTER_MEDICHAM;
mail->targetItem = 0;
mail->rewardType = ITEM;
mail->itemReward = ITEM_REVIVER_SEED;
mail->friendAreaReward = 0;
index++;
}
for (; index <= range; index++) {
if (!GenerateMailJobInfo(&gUnknown_203B490->pelipperBoardJobs[index])) break;
gUnknown_203B490->pelipperBoardJobs[index].rewardType = RandRange(MONEY, BLANK_4);
}
sub_80965F4();
SortPelipperJobs();
}
bool8 IsMailinJobSlot(WonderMail *mail)
{
WonderMail *jobSlot;
s32 index;
for(index = 0, jobSlot = &gUnknown_203B490->jobSlots[0]; index < MAX_ACCEPTED_JOBS; jobSlot++, index++)
{
if(jobSlot->mailType != MAIL_TYPE_NONE)
if(mail->missionType == jobSlot->missionType)
if(mail->unk2 == jobSlot->unk2)
if(mail->unk4.dungeon.id == jobSlot->unk4.dungeon.id)
if(mail->unk4.dungeon.floor == jobSlot->unk4.dungeon.floor)
if(mail->unk4.seed == jobSlot->unk4.seed)
if(mail->clientSpecies == jobSlot->clientSpecies)
if(mail->targetSpecies == jobSlot->targetSpecies)
if(mail->targetItem == jobSlot->targetItem)
if(mail->rewardType == jobSlot->rewardType)
if(mail->itemReward == jobSlot->itemReward)
if(mail->friendAreaReward == jobSlot->friendAreaReward)
return TRUE;
}
return FALSE;
}
bool8 sub_809693C(WonderMail *mail)
{
u8 dungeonIndex;
u8 floor;
bool8 escortMission;
s32 index;
dungeonIndex = mail->unk4.dungeon.id;
floor = mail->unk4.dungeon.floor;
escortMission = FALSE;
if (!IsValidWonderMail(mail)) {
return FALSE;
}
else
{
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
escortMission = TRUE;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
if ((gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_TAKEN_JOB) &&
(sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeonIndex,floor,escortMission) != 0))
{
return TRUE;
}
}
}
return FALSE;
}
s32 GetNumAcceptedJobs(void)
{
s32 index;
s32 count;
count = 0;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
if (!IsJobSlotEmpty(index)) {
count++;
}
}
return count;
}
s32 CountJobsinDungeon(u8 dungeon)
{
WonderMail *mail;
s32 index;
s32 count;
count = 0;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
mail = GetJobSlotInfo(index);
if ((mail->unk4.dungeon.id == dungeon) &&
(((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) {
count++;
}
}
return count;
}
bool8 sub_8096A08(u8 dungeon, PokemonStruct1 *pokemon)
{
WonderMail *mail;
s32 index;
u32 local_14;
s32 temp;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
mail = GetJobSlotInfo(index);
if(mail->unk4.dungeon.id == dungeon)
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
{
temp = 0xffffff00;
local_14 &= temp;
temp = 0x4A;
local_14 |= temp;
temp = 0xffff00ff;
local_14 &= temp;
temp = 0x100;
local_14 |= temp;
sub_808CFD0(pokemon,mail->clientSpecies,NULL,0,(DungeonLocation *) &local_14,NULL);
return TRUE;
}
}
return FALSE;
}
bool8 AcceptJob(WonderMail *mail)
{
s32 index;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE)
{
gUnknown_203B490->jobSlots[index] = *mail;
return FALSE;
}
}
return TRUE;
}
WonderMail *GetJobSlotInfo(u8 index)
{
return &gUnknown_203B490->jobSlots[index];
}
bool8 IsJobSlotEmpty(u8 index)
{
if(gUnknown_203B490->jobSlots[index].mailType == MAIL_TYPE_NONE)
return TRUE;
else
return FALSE;
}
void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon)
{
WonderMail *jobSlot;
Item *item;
s32 index;
jobSlot = GetJobSlotInfo(slotIndex);
param_1->unk0 = FALSE;
param_1->clientSpecies = jobSlot->clientSpecies;
param_1->targetSpecies = MONSTER_NONE;
if (jobSlot->unk4.dungeon.id == dungeon) {
switch(jobSlot->missionType) {
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) {
for(index = 0; index < INVENTORY_SIZE; index++)
{
item = &gTeamInventoryRef->teamItems[index];
if (((item->flags & ITEM_FLAG_EXISTS)) && (item->id == jobSlot->targetItem)) {
param_1->unk0 = TRUE;
}
}
}
break;
case WONDER_MAIL_MISSION_TYPE_RESCUE_CLIENT:
case WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM:
if (jobSlot->mailType == MAIL_TYPE_UNK9) {
param_1->unk0 = TRUE;
}
break;
case WONDER_MAIL_MISSION_TYPE_RESCUE_TARGET:
case WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT:
if (jobSlot->mailType == MAIL_TYPE_UNK9) {
param_1->unk0 = TRUE;
param_1->targetSpecies = jobSlot->targetSpecies;
}
break;
}
}
}
// Unused
s16 sub_8096B98(u8 dungeon)
{
WonderMail *mail;
s32 index;
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
mail = GetJobSlotInfo(index);
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
if(mail->unk4.dungeon.id == dungeon)
return mail->targetSpecies;
}
return 0;
}
void sub_8096BD0(void)
{
s32 index;
WonderMail *mail;
for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++)
{
switch(mail->mailType)
{
case MAIL_TYPE_UNK7:
case MAIL_TYPE_UNK8:
case MAIL_TYPE_UNK9:
ResetJobSlot(index);
break;
}
}
sub_8096C80();
SortJobSlots();
}
bool8 sub_8096C08(u8 *jobIndex)
{
s32 index;
WonderMail *mail;
for(mail = &gUnknown_203B490->jobSlots[0], index = 0; index < MAX_ACCEPTED_JOBS; mail++, index++)
{
if(mail->mailType > 4 && mail->unk2 == 4)
{
*jobIndex = index;
return TRUE;
}
}
return FALSE;
}
void ResetJobSlot(u8 index)
{
gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE;
gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99;
gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0;
gUnknown_203B490->jobSlots[index].rewardType = MONEY1;
}

View File

@ -1,177 +0,0 @@
#include "global.h"
#include "constants/dungeon.h"
#include "constants/friend_area.h"
#include "constants/wonder_mail.h"
#include "items.h"
#include "random.h"
#include "friend_area.h"
#include "code_80958E8.h"
#include "code_80A26CC.h"
bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4);
extern s32 GetDungeonFloorCount(u8);
extern bool8 sub_809017C(DungeonLocation *);
bool8 GenerateMailJobDungeonInfo(WonderMail *mail)
{
s32 counter;
s32 floor;
s32 index;
u8 dungeon;
bool8 flag;
u8 dungeonStack [64];
s32 counter_1;
s32 cap;
s32 floor_1;
s32 halfFloorCount;
s32 floorCount;
DungeonLocation dungeonLoc;
cap = sub_80A29B0(dungeonStack);
if (cap == 0) {
dungeonStack[0] = DUNGEON_TINY_WOODS;
dungeonStack[1] = DUNGEON_THUNDERWAVE_CAVE;
cap = 2;
}
counter = RandInt(cap);
counter_1 = counter;
do {
dungeon = dungeonStack[counter];
floorCount = GetDungeonFloorCount(dungeon);
halfFloorCount = floorCount / 2;
floor = RandRange(halfFloorCount, floorCount);
floor_1 = floor;
do {
flag = TRUE;
dungeonLoc.id = dungeon;
dungeonLoc.floor = floor;
if(sub_809017C(&dungeonLoc))
flag = FALSE;
for(index = 0; index < 4; index++)
{
if (sub_8095E38(&gUnknown_203B490->mailboxSlots[index],dungeon,floor,1)) {
flag = FALSE;
}
}
for(index = 0; index < 8; index++)
{
if (sub_8095E38(&gUnknown_203B490->pelipperBoardJobs[index],dungeon,floor,1)) {
flag = FALSE;
}
}
for(index = 0; index < 8; index++)
{
if (sub_8095E38(&gUnknown_203B490->jobSlots[index],dungeon,floor,1)) {
flag = FALSE;
}
}
if (flag) {
mail->unk4.dungeon.id = dungeon;
mail->unk4.dungeon.floor = floor;
return TRUE;
}
floor++;
if (floor >= floorCount) {
floor = halfFloorCount;
}
} while (floor != floor_1);
counter++;
if (counter == cap) {
counter = 0;
}
if (counter == counter_1) {
return FALSE;
}
} while( TRUE );
}
bool8 sub_8095E38(WonderMail *mail, u8 dungeon, u32 floor, u8 param_4)
{
if (mail->mailType != MAIL_TYPE_NONE) {
if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) {
if (mail->unk4.dungeon.id == dungeon) {
return TRUE;
}
}
else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) {
return TRUE;
}
}
return FALSE;
}
u8 sub_8095E78(void)
{
bool8 flag;
s32 index;
s32 friendAreaIndex;
s32 counter;
u8 friendAreaStack[NUM_FRIEND_AREAS];
counter = 0;
for(friendAreaIndex = BOUNTIFUL_SEA; friendAreaIndex < NUM_FRIEND_AREAS; friendAreaIndex++)
{
if ((!gFriendAreas[friendAreaIndex]) &&
(GetFriendAreaUnlockCondition(friendAreaIndex) == UNLOCK_WONDER_MAIL)) {
flag = FALSE;
for(index = 0; index < 4; index++)
{
if((gUnknown_203B490->mailboxSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->mailboxSlots[index].rewardType == FRIEND_AREA))
flag = TRUE;
}
for(index = 0; index < 8; index++)
{
if((gUnknown_203B490->jobSlots[index].mailType != MAIL_TYPE_NONE) && (gUnknown_203B490->jobSlots[index].rewardType == FRIEND_AREA))
flag = TRUE;
}
if (!flag) {
friendAreaStack[counter] = friendAreaIndex;
counter++;
}
}
}
if (counter != 0) {
return friendAreaStack[RandInt(counter)];
}
else {
return FRIEND_AREA_NONE;
}
}
u8 sub_8095F28(u8 param_1)
{
s32 itemID;
s32 counter;
u8 itemStack [NUMBER_OF_ITEM_IDS];
counter = 0;
for(itemID = ITEM_STICK; itemID < NUMBER_OF_ITEM_IDS; itemID++)
{
if ((param_1 == 0x63) ||
(xxx_bit_lut_lookup_8091E50(param_1, itemID) != 0)) {
if ((!IsThrowableItem(itemID)) && (IsNotMoneyOrUsedTMItem(itemID))) {
itemStack[counter] = itemID;
counter++;
}
}
}
if (counter == 0) {
return ITEM_NOTHING;
}
else {
return itemStack[RandInt(counter)];
}
}

View File

@ -1,7 +1,4 @@
#include "global.h"
#include "constants/dungeon.h"
#include "pokemon.h"
#include "code_80958E8.h"
#include "dungeon.h"
#include "exclusive_pokemon.h"
#include "event_flag.h"
@ -14,273 +11,10 @@ ALIGNED(4) const u8 gDummyScenarioText[] = _("{COLOR_1 YELLOW_3}Scenario try dum
ALIGNED(4) const u8 gBlankMission[] = _("{COLOR_1 RED_2}???{END_COLOR_TEXT_1}");
extern void sub_800199C(u8, u8, u16, s32);
extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
extern u32 sub_8001784(u32, u32, u16);
extern void GeneratePelipperJobs(void);
extern void sub_80018D8(u8, u8, u32);
void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b);
s32 CalculateMailChecksum(WonderMail *mail);
void SortJobSlots(void)
{
s32 r1;
s32 r6;
WonderMail job;
for(r1 = 0; r1 < MAX_ACCEPTED_JOBS - 1; r1++)
{
for(r6 = r1 + 1; r6 < MAX_ACCEPTED_JOBS; r6++)
{
if(gUnknown_203B490->jobSlots[r6].mailType != 0)
{
if((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id > gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) ||
((gUnknown_203B490->jobSlots[r1].unk4.dungeon.id == gUnknown_203B490->jobSlots[r6].unk4.dungeon.id) &&
(gUnknown_203B490->jobSlots[r1].unk4.dungeon.floor > gUnknown_203B490->jobSlots[r6].unk4.dungeon.floor)))
{
job = gUnknown_203B490->jobSlots[r1];
gUnknown_203B490->jobSlots[r1] = gUnknown_203B490->jobSlots[r6];
gUnknown_203B490->jobSlots[r6] = job;
}
}
}
}
}
u8 *sub_8096DD8(void)
{
return gUnknown_203B490->unk190;
}
u8 *sub_8096DE8(void)
{
return gUnknown_203B490->unk1B8;
}
void ReceivePKMNNews(u8 index)
{
gUnknown_203B490->PKMNNewsReceived[index] = TRUE;
}
bool8 CheckPKMNNewsSlot(u8 index)
{
return gUnknown_203B490->PKMNNewsReceived[index];
}
u8 sub_8096E2C(void)
{
s32 index;
s32 floor = 0;
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
{
if(gUnknown_203B490->mailboxSlots[index].mailType == 1)
{
if(floor <= gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor)
if( gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor < 0x32)
floor = gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor + 1;
}
}
for(index = floor; index < 0x32; index++)
{
if(!gUnknown_203B490->PKMNNewsReceived[index]) return index;
}
return 0x38;
}
bool8 sub_8096E80(u8 floor)
{
s32 index;
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
{
if(gUnknown_203B490->mailboxSlots[index].mailType == 1)
{
if(floor == gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor)
return TRUE;
}
}
return FALSE;
}
s32 CalculateMailChecksum(WonderMail *mail)
{
s32 sum;
sum = (mail->unk2 + mail->missionType);
sum += mail->unk4.dungeon.id;
sum += mail->unk4.dungeon.floor;
sum += mail->unk4.seed << 0x8;
sum += mail->clientSpecies << 0xC;
sum += mail->targetSpecies << 0x10;
sum += mail->targetItem << 0x18;
sum += mail->rewardType;
sum += mail->itemReward;
sum += mail->friendAreaReward;
return sum;
}
void sub_8096EEC(WonderMail *mail)
{
s32 index;
for(index = 15; index > 0; index--)
{
gUnknown_203B490->unk230[index] = gUnknown_203B490->unk230[index - 1];
}
gUnknown_203B490->unk230[0].sub = mail->unk4;
gUnknown_203B490->unk230[0].checksum = CalculateMailChecksum(mail);
}
bool8 sub_8096F50(WonderMail *mail)
{
s32 index;
s32 checksum;
subStruct_203B490 *temp;
checksum = CalculateMailChecksum(mail);
for (index = 0; index < 0x10; index++) {
temp = &gUnknown_203B490->unk230[index];
if (temp->sub.dungeon.id == mail->unk4.dungeon.id)
if (temp->sub.dungeon.floor == mail->unk4.dungeon.floor)
if (temp->sub.seed == mail->unk4.seed)
if (temp->checksum == checksum)
return TRUE;
}
return FALSE;
}
u32 RestoreMailInfo(u8 *r0, u32 size)
{
s32 index;
struct unkStruct_8094924 backup;
u32 temp;
xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
{
RestoreWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]);
}
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
RestoreWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]);
}
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
RestoreWonderMail(&backup, &gUnknown_203B490->jobSlots[index]);
}
for(index = 0; index < 0x38; index++)
{
RestoreIntegerBits(&backup, &temp, 1);
if(temp & 1)
gUnknown_203B490->PKMNNewsReceived[index] = TRUE;
else
gUnknown_203B490->PKMNNewsReceived[index] = FALSE;
}
RestoreIntegerBits(&backup, &temp, 1);
if(temp & 1)
gUnknown_203B490->unk328 = TRUE;
else
gUnknown_203B490->unk328 = FALSE;
RestoreIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
RestoreIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
for(index = 0; index < 0x10; index++)
{
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20);
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18);
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon);
}
nullsub_102(&backup);
return backup.unk8;
}
u32 SaveMailInfo(u8 *r0, u32 size)
{
s32 index;
struct unkStruct_8094924 backup;
u32 temp;
xxx_init_struct_8094924_save_809486C(&backup, r0, size);
for(index = 0; index < NUM_MAILBOX_SLOTS; index++)
{
SaveWonderMail(&backup, &gUnknown_203B490->mailboxSlots[index]);
}
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
SaveWonderMail(&backup, &gUnknown_203B490->pelipperBoardJobs[index]);
}
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
{
SaveWonderMail(&backup, &gUnknown_203B490->jobSlots[index]);
}
for(index = 0; index < 0x38; index++)
{
if(gUnknown_203B490->PKMNNewsReceived[index])
temp = -1;
else
temp = 0;
SaveIntegerBits(&backup, &temp, 1);
}
if(gUnknown_203B490->unk328)
temp = -1;
else
temp = 0;
SaveIntegerBits(&backup, &temp, 1);
SaveIntegerBits(&backup, gUnknown_203B490->unk190, 0x140);
SaveIntegerBits(&backup, gUnknown_203B490->unk1B8, 0x3C0);
for(index = 0; index < 0x10; index++)
{
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].checksum, 0x20);
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].sub.seed, 0x18);
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].sub.dungeon);
}
nullsub_102(&backup);
return backup.unk8;
}
void RestoreWonderMail(struct unkStruct_8094924 *a, WonderMail *b)
{
RestoreIntegerBits(a, &b->mailType, 4);
RestoreIntegerBits(a, &b->missionType, 3);
RestoreIntegerBits(a, &b->unk2, 4);
RestoreIntegerBits(a, &b->clientSpecies, 9);
RestoreIntegerBits(a, &b->targetSpecies, 9);
RestoreIntegerBits(a, &b->targetItem, 8);
RestoreIntegerBits(a, &b->rewardType, 4);
RestoreIntegerBits(a, &b->itemReward, 8);
RestoreIntegerBits(a, &b->friendAreaReward, 6);
RestoreIntegerBits(a, &b->unk4.seed, 0x18);
RestoreDungeonLocation(a, &b->unk4.dungeon);
}
void SaveWonderMail(struct unkStruct_8094924 *a, WonderMail *b)
{
SaveIntegerBits(a, &b->mailType, 4);
SaveIntegerBits(a, &b->missionType, 3);
SaveIntegerBits(a, &b->unk2, 4);
SaveIntegerBits(a, &b->clientSpecies, 9);
SaveIntegerBits(a, &b->targetSpecies, 9);
SaveIntegerBits(a, &b->targetItem, 8);
SaveIntegerBits(a, &b->rewardType, 4);
SaveIntegerBits(a, &b->itemReward, 8);
SaveIntegerBits(a, &b->friendAreaReward, 6);
SaveIntegerBits(a, &b->unk4.seed, 0x18);
SaveDungeonLocation(a, &b->unk4.dungeon);
}
void sub_80972F4(void)
{
sub_80015C0(0, 0x2B);

View File

@ -13,7 +13,6 @@ extern void sub_800199C(u8, u8, u16, s32);
extern u32 sub_8001784(u32, u32, u16);
extern void sub_80018D8(u8, u8, u32);
bool8 sub_8097504(s16 mazeIndex)
{
s32 mazeIndex_s32;

View File

@ -1,7 +1,9 @@
#include "global.h"
#include "code_8097670.h"
#include "exclusive_pokemon.h"
#include "pokemon.h"
#include "pokemon_3.h"
#include "friend_area.h"
static EWRAM_DATA struct unkStruct_203B494 sUnknown_2039778 = {0};
@ -10,6 +12,13 @@ EWRAM_DATA_2 struct unkStruct_203B494 *gUnknown_203B494 = {0};
// data_810AE24.s
extern const u8 *gAdventureLogText[];
extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
void ReadGameOptions(struct unkStruct_8094924 *param_1);
void ReadPlayTime(struct unkStruct_8094924 *r0);
void WriteGameOptions(struct unkStruct_8094924 *param_1);
void WritePlayTime(struct unkStruct_8094924 *r0);
void sub_8097670(void)
{
gUnknown_203B494 = &sUnknown_2039778;
@ -201,4 +210,202 @@ bool8 sub_8097900(s16 pokeIndex)
if (preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20)))
return TRUE;
return FALSE;
}
}
void sub_8097944(void)
{
bool8 bVar2;
bool8 bVar3;
int index;
s32 counter;
Move *move;
PokemonStruct1 *pokeStruct;
s32 index1;
s32 temp;
bVar2 = 1;
bVar3 = 1;
if (!sub_8097710(0xd) && (HasAllFriendAreas())) {
sub_80976F8(0xd);
}
for(index = 0; index < NUM_MONSTERS; index++)
{
#ifdef NONMATCHING
pokeStruct = &index[gRecruitedPokemonRef->pokemon];
#else
register size_t offset asm("r1") = offsetof(unkStruct_203B45C, pokemon[index]);
PokemonStruct1* p = gRecruitedPokemonRef->pokemon;
size_t addr = offset + (size_t)p;
pokeStruct = (PokemonStruct1*)addr;
#endif
if (((u8)(pokeStruct->unk0) & 1)) {
temp = pokeStruct->speciesNum;
gUnknown_203B494->unk1C[temp / 32] |= 1 << temp % 32;
for(index1 = 0; index1 < MAX_MON_MOVES; index1++)
{
move = &gRecruitedPokemonRef->pokemon[index].moves[index1];
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
gUnknown_203B494->unk8C[move->id / 32] |= 1 << move->id % 32;
}
}
}
}
for(index = 0; index < MONSTER_MAX; index++)
{
if (index == MONSTER_NONE) continue;
if (index == MONSTER_CASTFORM_SNOWY) continue;
if (index == MONSTER_CASTFORM_SUNNY) continue;
if (index == MONSTER_CASTFORM_RAINY) continue;
if (index == MONSTER_DEOXYS_ATTACK) continue;
if (index == MONSTER_DEOXYS_DEFENSE) continue;
if (index == MONSTER_DEOXYS_SPEED) continue;
if (index == MONSTER_MUNCHLAX) continue;
if (index == MONSTER_DECOY) continue;
if (index == MONSTER_STATUE) continue;
if (index == MONSTER_RAYQUAZA_CUTSCENE) continue;
if ((gUnknown_203B494->unk54[index / 32] & 1 << index % 32) == 0)
{
bVar3 = 0;
}
if ((gUnknown_203B494->unk1C[index / 32] & 1 << index % 32) != 0)
{
if (index == MONSTER_MOLTRES) {
sub_80976F8(0x10);
}
if (index == MONSTER_ZAPDOS) {
sub_80976F8(0x11);
}
if (index == MONSTER_ARTICUNO) {
sub_80976F8(0x12);
}
if (index == MONSTER_DEOXYS_NORMAL) {
sub_80976F8(0x13);
}
if (index == MONSTER_ENTEI) {
sub_80976F8(0x14);
}
if (index == MONSTER_RAIKOU) {
sub_80976F8(0x15);
}
if (index == MONSTER_SUICUNE) {
sub_80976F8(0x16);
}
if (index == MONSTER_HO_OH) {
sub_80976F8(0x17);
}
if (index == MONSTER_KYOGRE) {
sub_80976F8(0x18);
}
if (index == MONSTER_GROUDON) {
sub_80976F8(0x19);
}
if (index == MONSTER_RAYQUAZA) {
sub_80976F8(0x1a);
}
if (index == MONSTER_LUGIA) {
sub_80976F8(0x1b);
}
if (index == MONSTER_CELEBI) {
sub_80976F8(0x1c);
}
if (index == MONSTER_MEW) {
sub_80976F8(0x1d);
}
if (index == MONSTER_MEWTWO) {
sub_80976F8(0x1e);
}
if (index == MONSTER_JIRACHI) {
sub_80976F8(0x1f);
}
}
else
{
bVar2 = 0;
}
}
if (bVar2) {
sub_80976F8(0xf);
}
if (bVar3) {
sub_80976F8(0xe);
}
counter = 0;
for(index = 0; index < NUM_MONSTERS; index++)
{
if (index == MONSTER_NONE || index == MONSTER_FLYGON || index == MONSTER_CACNEA || index == MONSTER_CACTURNE) continue;
if (gUnknown_203B494->unk8C[index / 32] & 1 << index % 32) {
counter++;
}
}
if (counter != 0) {
gUnknown_203B494->unk18 = counter;
sub_80976F8(7);
}
}
void sub_8097C18(struct unkStruct_8094924 *r0)
{
sub_8097944();
SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}
void sub_8097CC0(struct unkStruct_8094924 *r0)
{
RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}
// Save something...
u32 sub_8097D60(u8 *r0, u32 size)
{
struct unkStruct_8094924 backup;
xxx_init_struct_8094924_save_809486C(&backup, r0, size);
WriteGameOptions(&backup);
WritePlayTime(&backup);
sub_8097C18(&backup);
WriteExclusivePokemon(&backup);
nullsub_102(&backup);
return backup.unk8;
}
// Read something...
u32 sub_8097D98(u8 *r0, u32 size)
{
struct unkStruct_8094924 backup;
xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
ReadGameOptions(&backup);
ReadPlayTime(&backup);
sub_8097CC0(&backup);
ReadExclusivePokemon(&backup);
nullsub_102(&backup);
return backup.unk8;
}

View File

@ -1,74 +1,4 @@
#include "global.h"
#include "code_8092334.h"
#include "code_8097670.h"
#include "pokemon.h"
#include "exclusive_pokemon.h"
extern void SaveDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
void ReadGameOptions(struct unkStruct_8094924 *param_1);
void ReadPlayTime(struct unkStruct_8094924 *r0);
void WriteGameOptions(struct unkStruct_8094924 *param_1);
void WritePlayTime(struct unkStruct_8094924 *r0);
extern void sub_8097944(void);
void sub_8097C18(struct unkStruct_8094924 *r0)
{
sub_8097944();
SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}
void sub_8097CC0(struct unkStruct_8094924 *r0)
{
RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}
u32 sub_8097D60(u8 *r0, u32 size)
{
struct unkStruct_8094924 backup;
xxx_init_struct_8094924_save_809486C(&backup, r0, size);
WriteGameOptions(&backup);
WritePlayTime(&backup);
sub_8097C18(&backup);
WriteExclusivePokemon(&backup);
nullsub_102(&backup);
return backup.unk8;
}
u32 sub_8097D98(u8 *r0, u32 size)
{
struct unkStruct_8094924 backup;
xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
ReadGameOptions(&backup);
ReadPlayTime(&backup);
sub_8097CC0(&backup);
ReadExclusivePokemon(&backup);
nullsub_102(&backup);
return backup.unk8;
}
bool8 sub_8097DD0(s32 *param_1, s32 *param_2)
{

View File

@ -1,50 +1,9 @@
#include "global.h"
#include "text1.h"
#include "memory.h"
#include "file_system.h"
#include "structs/str_3001B64.h"
struct unkStruct_3001B64_sub
{
// size: 0x24
u16 unk0;
/* 0x2 */ s16 speciesID;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u32 unk8;
u32 unkC;
u32 unk10;
/* 0x14 */ u8 *faceData;
u32 fill18;
u8 unk1C;
u8 fill1D[0x20 - 0x1D];
/* 0x20 */ OpenedFile *faceFile;
};
struct unkStruct_3001B64
{
// size: 0x5A8
u32 unk0;
u32 unk4;
u32 unk8;
u32 unkC;
u8 fill10[0x414 - 0x10];
u32 unk414;
u32 unk418;
u32 unk41C;
u32 unk420;
u32 unk424;
u32 unk428;
u32 unk42C;
u32 unk430;
u32 unk434;
u32 fill438;
struct unkStruct_3001B64_sub unk43C[10];
u16 unk5A4;
};
extern struct unkStruct_3001B64 *gUnknown_3001B64;
IWRAM_DATA struct unkStruct_3001B64 *gUnknown_3001B64 = {0};
extern u16 gUnknown_20399DC;
extern u16 gUnknown_20399DE;

170
src/code_809A560_1.c Normal file
View File

@ -0,0 +1,170 @@
#include "global.h"
#include "structs/str_3001B64.h"
#include "code_80118A4.h"
#include "code_801D014.h"
#include "credits2.h"
#include "event_flag.h"
#include "flash.h"
#include "friend_list_menu.h"
#include "ground_main.h"
#include "personality_test1.h"
extern struct unkStruct_3001B64 *gUnknown_3001B64;
u32 sub_802E90C();
void sub_802E918();
u32 sub_80282DC(u8 *r0);
void sub_809927C(u8);
void sub_80282FC(void);
void sub_80993C0(u32);
void sub_8001064(void);
void sub_809965C(void);
void sub_809C39C(void) {
gUnknown_3001B64->unk430 = sub_801D178();
if(gUnknown_3001B64->unk430 == 3)
GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1);
sub_801D1E0();
}
void sub_809C3D8(void)
{
gUnknown_3001B64->unk430 = sub_801D178();
if(gUnknown_3001B64->unk430 == 3)
GroundMainGroundRequest(sub_8002694(sub_801D1D4()), 0, -1);
sub_801D1E0();
}
void sub_809C414(void)
{
u8 val;
val = sub_802540C();
if(val != 0)
{
gUnknown_3001B64->unk430 = val;
GroundMainGroundRequest(sub_8002694(val), 0, -1);
}
else
{
gUnknown_3001B64->unk430 = -1;
}
CleanFriendListMenu();
}
void sub_809C464(void)
{
DeleteTestTracker();
sub_8001064();
sub_809965C();
}
void sub_809C478(void)
{
s32 temp;
s32 temp1;
if(sub_80356A0() == 0x3)
{
PlaySound(0x313);
InitFlash();
ClearFlashData();
}
sub_8035758();
sub_8001B88(3, &temp, &temp1);
sub_80993C0(0);
}
// https://decomp.me/scratch/WyHAL - (84.32% matching - Seth)
NAKED
void sub_809C4B0(void)
{
asm_unified(
"\tpush {r4,r5,lr}\n"
"\tmovs r4, 0x1\n"
"\tnegs r4, r4\n"
"\tldr r5, _0809C4FC\n"
"\tldr r0, [r5]\n"
"\tmovs r2, 0x86\n"
"\tlsls r2, 3\n"
"\tadds r1, r0, r2\n"
"\tldr r0, [r1]\n"
"\tcmp r0, 0\n"
"\tbne _0809C4DE\n"
"\tbl sub_803B168\n"
"\tlsls r0, 16\n"
"\tldr r1, [r5]\n"
"\tldr r3, _0809C500\n"
"\tadds r2, r1, r3\n"
"\tasrs r4, r0, 16\n"
"\tlsrs r0, 16\n"
"\tstrh r0, [r2]\n"
"\tmovs r0, 0x86\n"
"\tlsls r0, 3\n"
"\tadds r1, r0\n"
"_0809C4DE:\n"
"\tstr r4, [r1]\n"
"\tbl sub_803B1BC\n"
"\tmovs r0, 0x1\n"
"\tnegs r0, r0\n"
"\tcmp r4, r0\n"
"\tbeq _0809C4F4\n"
"\tadds r0, r4, 0\n"
"\tmovs r1, 0\n"
"\tbl GroundMap_ExecuteEvent\n"
"_0809C4F4:\n"
"\tpop {r4,r5}\n"
"\tpop {r0}\n"
"\tbx r0\n"
"\t.align 2, 0\n"
"_0809C4FC: .4byte gUnknown_3001B64\n"
"_0809C500: .4byte 0x000005a4");
}
void sub_809C504(void)
{
u8 temp;
if(sub_80282DC(&temp) == 1)
{
sub_809927C(temp);
gUnknown_3001B64->unk430 = 1;
}
else
{
gUnknown_3001B64->unk430 = -1;
}
sub_80282FC();
}
void sub_809C550(void)
{
u32 ret;
s32 val;
ret = sub_802E90C();
val = 0;
sub_802E918();
switch(ret)
{
case 1:
if(sub_8001CC4(4, 0x1D, 0x3))
val = 1;
break;
case 2:
if(sub_8001CC4(4, 0x1F, 0x2))
val = 2;
break;
case 3:
if(sub_8001CC4(0xB, 0x33, 0x8))
val = 3;
break;
}
gUnknown_3001B64->unk430 = val;
}

View File

@ -23,7 +23,7 @@ struct unkStruct_3001B68
u8 unk20;
};
extern struct unkStruct_3001B68 *gUnknown_3001B68;
IWRAM_DATA struct unkStruct_3001B68 *gUnknown_3001B68 = {0};
struct unkStruct_20399E0

View File

@ -2,7 +2,7 @@
#include "bg_control.h"
#include "cpu.h"
extern u32 gUnknown_202D800;
EWRAM_DATA u32 gUnknown_202D800 = {0};
extern u16 gUnknown_203B0BE[];
extern u16 *gUnknown_2026E3C;
extern u8 gUnknown_2026E38;

View File

@ -15,6 +15,12 @@ static EWRAM_DATA_2 unkStruct_203B3F0 *sUnknown_203B3F0 = {0};
#include "data/debug_menu2.h"
enum menuActions {
CANCEL_ACTION = 1,
NUMBER_ACTION,
INFO_ACTION
};
static void sub_803A504(u32 newState);
static void sub_803A51C(void);
static void sub_803A5A0(void);
@ -147,20 +153,20 @@ static void sub_803A6F0(void)
s32 loopMax = 0;
sUnknown_203B3F0->menuItems[loopMax].text = sNumberPrompt;
sUnknown_203B3F0->menuItems[loopMax].menuAction = 2;
sUnknown_203B3F0->menuAction = 2;
sUnknown_203B3F0->menuItems[loopMax].menuAction = NUMBER_ACTION;
sUnknown_203B3F0->menuAction = NUMBER_ACTION;
if (!IsNotMoneyOrUsedTMItem(sUnknown_203B3F0->id)) {
sUnknown_203B3F0->menuItems[loopMax].menuAction = -1;
sUnknown_203B3F0->menuAction = 3;
sUnknown_203B3F0->menuAction = INFO_ACTION;
}
loopMax++;
sUnknown_203B3F0->menuItems[loopMax].text = gCommonInfo[0];
sUnknown_203B3F0->menuItems[loopMax].menuAction = 3;
sUnknown_203B3F0->menuItems[loopMax].menuAction = INFO_ACTION;
loopMax++;
sUnknown_203B3F0->menuItems[loopMax].text = NULL;
sUnknown_203B3F0->menuItems[loopMax].menuAction = 1;
sUnknown_203B3F0->menuItems[loopMax].menuAction = CANCEL_ACTION;
}
static void sub_803A740(void)
@ -196,13 +202,13 @@ static void sub_803A7B0(void)
sub_8013114(&sUnknown_203B3F0->unk4C, &menuAction);
switch (menuAction) {
case 2:
case NUMBER_ACTION:
sub_803A504(3);
break;
case 3:
case INFO_ACTION:
sub_803A504(4);
break;
case 1:
case CANCEL_ACTION:
sub_803A504(1);
break;
}
@ -238,4 +244,4 @@ static void sub_803A86C(void)
sub_803A504(1);
break;
}
}
}

View File

@ -17,6 +17,13 @@ static EWRAM_DATA_2 unkStruct_203B3F4 *sUnknown_203B3F4 = {0};
#include "data/debug_menu3.h"
enum menuActions {
CANCEL_ACTION = 1,
OPEN_ACTION,
CLOSE_ACTION,
INFO_ACTION
};
static void sub_803A924(u32 newState);
static void sub_803A93C(void);
static void sub_803A9AC(void);
@ -101,7 +108,7 @@ static void sub_803A9AC(void)
sub_8012D60(&sUnknown_203B3F4->unk4C, sUnknown_203B3F4->menuItems, 0, 0, sUnknown_203B3F4->menuAction, 2);
break;
case 3:
sub_8021774(sUnknown_203B3F4->friendArea, 1, 0);
CreateWigglytuffShopFriendAreaMenu(sUnknown_203B3F4->friendArea, TRUE, 0);
break;
case 4:
break;
@ -121,22 +128,22 @@ static void sub_803AA34(void)
sUnknown_203B3F4->menuItems[0].text = sClose;
if (sub_803ABC8())
sUnknown_203B3F4->menuItems[0].menuAction = 3;
sUnknown_203B3F4->menuItems[0].menuAction = CLOSE_ACTION;
else
sUnknown_203B3F4->menuItems[0].menuAction = -1;
}
else {
sUnknown_203B3F4->menuItems[0].text = sOpen;
sUnknown_203B3F4->menuItems[0].menuAction = 2;
sUnknown_203B3F4->menuItems[0].menuAction = OPEN_ACTION;
}
index++;
sUnknown_203B3F4->menuItems[index].text = gCommonInfo[0];
sUnknown_203B3F4->menuItems[index].menuAction = 4;
sUnknown_203B3F4->menuItems[index].menuAction = INFO_ACTION;
index++;
sUnknown_203B3F4->menuItems[index].text = NULL;
sUnknown_203B3F4->menuItems[index].menuAction = 1;
sUnknown_203B3F4->menuItems[index].menuAction = CANCEL_ACTION;
sUnknown_203B3F4->menuAction = sUnknown_203B3F4->menuItems[0].menuAction;
}
@ -174,18 +181,18 @@ static void sub_803AB34(void)
sub_8013114(&sUnknown_203B3F4->unk4C, &menuAction);
switch (menuAction) {
case 2:
case OPEN_ACTION:
UnlockFriendArea(sUnknown_203B3F4->friendArea);
sub_803A924(1);
break;
case 3:
case CLOSE_ACTION:
sub_809249C(sUnknown_203B3F4->friendArea, 1);
sub_803A924(1);
break;
case 4:
case INFO_ACTION:
sub_803A924(3);
break;
case 1:
case CANCEL_ACTION:
sub_803A924(1);
break;
}
@ -193,10 +200,10 @@ static void sub_803AB34(void)
static void sub_803ABAC(void)
{
switch (sub_80217EC()) {
switch (HandleWigglytuffShopFriendAreaMenuInput()) {
case 2:
case 3:
sub_8021830();
CleanWigglytuffShopFriendAreaInfoMenu();
sub_803A924(1);
break;
case 0:
@ -226,4 +233,4 @@ static bool8 sub_803ABC8(void)
}
return TRUE;
}
}

View File

@ -14,6 +14,12 @@ static EWRAM_DATA_2 unkStruct_203B3F8 *sUnknown_203B3F8 = {0};
#include "data/debug_menu4.h"
enum menuActions {
CANCEL_ACTION = 1,
LEVEL_ACTION = 4,
NAME_ACTION
};
static void sub_803ACD0(u32 newState);
static void sub_803ACE8(void);
static void sub_803AD88(void);
@ -124,7 +130,7 @@ static void sub_803AD88(void)
sub_803AE58();
break;
case 6:
sub_801602C(2, sUnknown_203B3F8->pokemon->name);
CreateConfirmNameMenu(2, sUnknown_203B3F8->pokemon->name);
case 0:
case 4:
case 7:
@ -154,15 +160,15 @@ static void sub_803AEB0(void)
loopMax = 0;
sUnknown_203B3F8->unk90[loopMax].text = sLevel;
sUnknown_203B3F8->unk90[loopMax].menuAction = 4;
sUnknown_203B3F8->unk90[loopMax].menuAction = LEVEL_ACTION;
loopMax++;
sUnknown_203B3F8->unk90[loopMax].text = sName;
sUnknown_203B3F8->unk90[loopMax].menuAction = 5;
sUnknown_203B3F8->unk90[loopMax].menuAction = NAME_ACTION;
loopMax++;
sUnknown_203B3F8->unk90[loopMax].text = NULL;
sUnknown_203B3F8->unk90[loopMax].menuAction = 1;
sUnknown_203B3F8->unk90[loopMax].menuAction = CANCEL_ACTION;
for (i = 0; i < loopMax; i++) {
if (sUnknown_203B3F8->unkD0[i] == 0) {
@ -202,13 +208,13 @@ static void sub_803AF88(void)
sub_8013114(&sUnknown_203B3F8->unk10, &menuAction);
switch (menuAction) {
case 4:
case LEVEL_ACTION:
sub_803ACD0(5);
break;
case 5:
case NAME_ACTION:
sub_803ACD0(6);
break;
case 1:
case CANCEL_ACTION:
sub_803ACD0(2);
break;
default:
@ -241,8 +247,8 @@ static void sub_803B034(void)
switch (sub_8016080()) {
case 2:
case 3:
sub_80160D8();
CleanConfirmNameMenu();
sub_803ACD0(2);
break;
}
}
}

View File

@ -48,10 +48,10 @@ extern const u8 *const gUnknown_80FC718[];
extern u8 gUnknown_202DE58[];
extern u8 gAvailablePokemonNames[];
extern bool8 gCanAttackInDirection[NUM_DIRECTIONS];
extern s32 gPotentialAttackTargetWeights[NUM_DIRECTIONS];
extern u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS];
extern Entity *gPotentialTargets[NUM_DIRECTIONS];
EWRAM_DATA bool8 gCanAttackInDirection[NUM_DIRECTIONS] = {0};
EWRAM_DATA u8 gPotentialAttackTargetDirections[NUM_DIRECTIONS] = {0};
EWRAM_DATA s32 gPotentialAttackTargetWeights[NUM_DIRECTIONS] = {0};
EWRAM_DATA Entity *gPotentialTargets[NUM_DIRECTIONS] = {0};
extern void sub_8055A00(Entity *, u8, u32, u32, u32);
extern void sub_806A9B4(Entity *, u8);

View File

@ -34,10 +34,12 @@ enum ItemTargetFlag
ITEM_TARGET_ALLY = 1 << 1
};
extern s32 gNumPotentialTargets;
extern u32 gPotentialItemTargetWeights[NUM_DIRECTIONS];
extern u32 gPotentialItemTargetDirections[NUM_DIRECTIONS];
extern bool8 gTargetAhead[NUM_DIRECTIONS];
EWRAM_DATA_2 s32 gNumPotentialTargets = {0};
EWRAM_DATA u32 gPotentialItemTargetDirections[NUM_DIRECTIONS] = {0};
EWRAM_DATA bool8 gTargetAhead[NUM_DIRECTIONS] = {0};
EWRAM_DATA u32 gPotentialItemTargetWeights[NUM_DIRECTIONS] = {0};
extern TeamInventory *gTeamInventoryRef;
void sub_807360C(void)

View File

@ -23,6 +23,8 @@
#include "dungeon_visibility.h"
#include "pokemon_3.h"
#include "pokemon.h"
#include "code_8077274_1.h"
#include "trap.h"
extern u8 gUnknown_202F221;
extern u8 gUnknown_202F222;
@ -55,7 +57,6 @@ void HandlePickUpPlayerAction(Entity *);
void sub_8066E14(Entity * );
void sub_807348C(void);
void sub_80732F0(void);
void sub_807FD84(Entity *);
void sub_8066BD4(Entity*);
void HandleTalkFieldAction(Entity *);
void HandleUseMovePlayerAction(Entity *);
@ -67,7 +68,6 @@ void HandleUseItemAction(Entity *);
void sub_8066FA4(Entity *);
void HandleSetItemAction(Entity *,bool8);
void HandleUnsetItemAction(Entity *,bool8);
void sub_807FE9C(Entity *,Position *,u32,u32);
extern u8 sub_8044B28(void);
extern u8 UseAttack(Entity *);
void sub_8052740(u32);
@ -79,7 +79,6 @@ void HandlePickUpAIAction(Entity *pokemon);
void HandleThrowItemAIAction(Entity *pokemon);
void HandleEatAIAction(Entity *pokemon);
bool8 sub_8044B84(void);
void sub_8046D20(void);
extern void sub_8074094(Entity *);
extern void sub_8071DA4(Entity *);
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);

Some files were not shown because too many files have changed in this diff Show More