Merge pull request #211 from SethBarberee/aug_sept_2024
Some checks are pending
GithubCI / build (push) Waiting to run

Aug sept 2024
This commit is contained in:
AnonymousRandomPerson
2024-10-06 15:36:13 -04:00
committed by GitHub
69 changed files with 3241 additions and 4893 deletions

View File

@@ -3479,7 +3479,7 @@ _0806BDA6:
bl SetDefaultIQSkills
adds r0, r6, 0
adds r0, 0x3C
bl sub_808E6F4
bl GenerateHiddenPower
strh r4, [r6, 0x10]
strh r4, [r6, 0xE]
mov r0, sp

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,267 +0,0 @@
#include "asm/constants/gba_constants.inc"
#include "asm/macros.inc"
.syntax unified
.text
thumb_func_start sub_8078B5C
sub_8078B5C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x28
mov r9, r0
adds r6, r1, 0
mov r10, r2
str r3, [sp, 0x1C]
ldr r0, [sp, 0x48]
lsls r0, 24
lsrs r0, 24
mov r8, r0
adds r0, r6, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
bne _08078B86
b _08078D78
_08078B86:
ldr r7, [r6, 0x70]
ldrb r0, [r7, 0x7]
cmp r0, 0
bne _08078BB8
adds r0, r6, 0
movs r1, 0x1B
bl HasHeldItem
lsls r0, 24
cmp r0, 0
beq _08078BB8
mov r0, r8
cmp r0, 0
bne _08078BA4
b _08078D78
_08078BA4:
ldr r0, _08078BB4
ldr r2, [r0]
mov r0, r9
adds r1, r6, 0
bl sub_80522F4
b _08078D78
.align 2, 0
_08078BB4: .4byte gUnknown_80FBEA0
_08078BB8:
movs r5, 0
ldr r1, [sp, 0x1C]
cmp r1, 0
beq _08078BE8
movs r1, 0x9E
lsls r1, 1
adds r0, r7, r1
ldr r0, [r0]
bl FixedPointToInt
adds r4, r0, 0
movs r1, 0xA0
lsls r1, 1
adds r0, r7, r1
ldr r0, [r0]
bl FixedPointToInt
cmp r4, r0
blt _08078BE0
movs r5, 0x1
_08078BE0:
ldr r0, _08078C8C
cmp r10, r0
bne _08078BE8
movs r5, 0x1
_08078BE8:
cmp r5, 0
beq _08078CC0
movs r0, 0xA0
lsls r0, 1
adds r5, r7, r0
ldr r1, [r5]
str r1, [sp, 0x20]
subs r0, 0x4
adds r0, r7
mov r10, r0
ldr r0, [r0]
bl FixedPointToInt
adds r4, r0, 0
ldr r0, [r5]
bl FixedPointToInt
movs r1, 0
str r1, [sp, 0x24]
cmp r4, r0
bne _08078C16
movs r0, 0x1
str r0, [sp, 0x24]
_08078C16:
mov r0, sp
ldr r1, [sp, 0x1C]
bl IntToFixedPoint
ldr r2, [sp]
ldr r1, [r5]
add r0, sp, 0x4
bl FixedPoint_Add
ldr r4, [sp, 0x4]
str r4, [r5]
add r0, sp, 0x8
movs r1, 0xC8
bl IntToFixedPoint
ldr r2, [sp, 0x8]
add r0, sp, 0xC
adds r1, r4, 0
bl FixedPoint_Min
ldr r0, [sp, 0xC]
str r0, [r5]
mov r1, r10
str r0, [r1]
ldr r0, [sp, 0x24]
cmp r0, 0
bne _08078C5E
mov r1, r8
cmp r1, 0
beq _08078C5E
ldr r0, _08078C90
ldr r2, [r0]
mov r0, r9
adds r1, r6, 0
bl sub_80522F4
_08078C5E:
ldr r0, [sp, 0x20]
bl FixedPointToInt
adds r4, r0, 0
movs r1, 0xA0
lsls r1, 1
adds r0, r7, r1
ldr r0, [r0]
bl FixedPointToInt
cmp r4, r0
bne _08078C9C
ldr r0, _08078C94
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
mov r0, r8
cmp r0, 0
beq _08078D72
ldr r0, _08078C98
b _08078D4E
.align 2, 0
_08078C8C: .4byte 0x000003e7
_08078C90: .4byte gUnknown_80FBE64
_08078C94: .4byte gAvailablePokemonNames
_08078C98: .4byte gUnknown_80FBDF0
_08078C9C:
adds r0, r6, 0
bl sub_8041DB0
ldr r0, _08078CB8
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
mov r1, r8
cmp r1, 0
beq _08078D72
ldr r0, _08078CBC
b _08078D4E
.align 2, 0
_08078CB8: .4byte gAvailablePokemonNames
_08078CBC: .4byte gUnknown_80FBDC4
_08078CC0:
movs r0, 0x9E
lsls r0, 1
adds r5, r7, r0
ldr r4, [r5]
add r0, sp, 0x10
mov r1, r10
bl IntToFixedPoint
ldr r2, [sp, 0x10]
ldr r1, [r5]
add r0, sp, 0x14
bl FixedPoint_Add
ldr r1, [sp, 0x14]
str r1, [r5]
movs r0, 0xA0
lsls r0, 1
adds r7, r0
ldr r2, [r7]
add r0, sp, 0x18
bl FixedPoint_Min
ldr r0, [sp, 0x18]
str r0, [r5]
ldr r0, _08078D28
cmp r10, r0
bne _08078CFA
ldr r0, [r7]
str r0, [r5]
_08078CFA:
adds r0, r6, 0
bl nullsub_85
ldr r0, _08078D2C
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
adds r0, r4, 0
bl FixedPointToInt
adds r4, r0, 0
ldr r0, [r5]
bl FixedPointToInt
cmp r4, r0
bne _08078D34
mov r1, r8
cmp r1, 0
beq _08078D72
ldr r0, _08078D30
b _08078D4E
.align 2, 0
_08078D28: .4byte 0x000003e7
_08078D2C: .4byte gAvailablePokemonNames
_08078D30: .4byte gUnknown_80FBE14
_08078D34:
ldr r0, [r5]
bl FixedPointToInt
adds r4, r0, 0
ldr r0, [r7]
bl FixedPointToInt
cmp r4, r0
blt _08078D60
mov r0, r8
cmp r0, 0
beq _08078D72
ldr r0, _08078D5C
_08078D4E:
ldr r2, [r0]
mov r0, r9
adds r1, r6, 0
bl sub_80522F4
b _08078D72
.align 2, 0
_08078D5C: .4byte gUnknown_80FBE64
_08078D60:
mov r1, r8
cmp r1, 0
beq _08078D72
ldr r0, _08078D88
ldr r2, [r0]
mov r0, r9
adds r1, r6, 0
bl sub_80522F4
_08078D72:
adds r0, r6, 0
bl EntityUpdateStatusSprites
_08078D78:
add sp, 0x28
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08078D88: .4byte gUnknown_80FBE84
thumb_func_end sub_8078B5C
.align 2,0

View File

@@ -5,927 +5,6 @@
.text
thumb_func_start sub_807CD9C
sub_807CD9C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x34
mov r9, r0
adds r6, r1, 0
adds r4, r2, 0
movs r0, 0xA
str r0, [sp, 0x24]
bl IsCurrentFixedRoomBossFight
lsls r0, 24
cmp r0, 0
beq _0807CDC4
ldr r0, _0807CDC0
b _0807CDFE
.align 2, 0
_0807CDC0: .4byte gUnknown_80FC9E8
_0807CDC4:
cmp r9, r6
bne _0807CDE4
ldr r0, _0807CDDC
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
ldr r0, _0807CDE0
ldr r2, [r0]
adds r0, r6, 0
b _0807CE02
.align 2, 0
_0807CDDC: .4byte gAvailablePokemonNames
_0807CDE0: .4byte gUnknown_80FCA10
_0807CDE4:
ldr r0, _0807CE0C
adds r1, r6, 0
movs r2, 0
bl SetMessageArgument
adds r0, r6, 0
movs r1, 0xE
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0807CE28
ldr r0, _0807CE10
_0807CDFE:
ldr r2, [r0]
mov r0, r9
_0807CE02:
adds r1, r6, 0
bl sub_80522F4
b _0807D02A
.align 2, 0
_0807CE0C: .4byte gAvailablePokemonNames
_0807CE10: .4byte gUnknown_80FCBCC
_0807CE14:
str r0, [sp, 0x28]
b _0807CF26
_0807CE18:
ldrh r0, [r5]
movs r1, 0x3
ands r1, r0
negs r0, r1
orrs r0, r1
lsrs r0, 31
mov r10, r0
b _0807CF20
_0807CE28:
ldr r1, [r6, 0x70]
adds r2, r4, 0x4
movs r3, 0x7
adds r0, r2, 0
ands r0, r3
adds r1, 0x46
strb r0, [r1]
movs r0, 0x7
ands r2, r0
adds r0, r6, 0
movs r1, 0x6
bl sub_806CDD4
ldr r1, _0807D03C
adds r0, r6, 0
bl sub_80421C0
ldr r0, _0807D040
ldr r2, [r0]
mov r0, r9
adds r1, r6, 0
bl sub_80522F4
movs r1, 0x1
mov r10, r1
movs r2, 0
str r2, [sp, 0x28]
lsls r1, r4, 2
ldr r0, _0807D044
adds r1, r0
mov r8, r1
add r7, sp, 0x18
_0807CE68:
ldr r2, [r6, 0x4]
str r2, [sp, 0x18]
ldrh r0, [r7]
mov r3, r8
ldrh r3, [r3]
adds r0, r3
lsls r0, 16
lsrs r0, 16
ldr r1, _0807D048
ands r1, r2
orrs r1, r0
str r1, [sp, 0x18]
asrs r0, r1, 16
mov r2, r8
ldrh r2, [r2, 0x2]
adds r0, r2
lsls r0, 16
ldr r2, _0807D04C
ands r2, r1
orrs r2, r0
str r2, [sp, 0x18]
movs r3, 0
ldrsh r0, [r7, r3]
cmp r0, 0
blt _0807CF20
asrs r1, r2, 16
cmp r1, 0
blt _0807CF20
cmp r0, 0x37
bgt _0807CF20
cmp r1, 0x1F
bgt _0807CF20
mov r1, r8
movs r2, 0
ldrsh r0, [r1, r2]
lsls r0, 10
str r0, [sp, 0x2C]
movs r3, 0x2
ldrsh r0, [r1, r3]
lsls r0, 10
str r0, [sp, 0x30]
movs r4, 0x5
_0807CEBC:
adds r0, r6, 0
ldr r1, [sp, 0x2C]
ldr r2, [sp, 0x30]
bl IncreaseEntityPixelPos
adds r0, r6, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _0807CED8
movs r0, 0x19
bl sub_803E46C
_0807CED8:
subs r4, 0x1
cmp r4, 0
bge _0807CEBC
movs r1, 0
ldrsh r0, [r7, r1]
ldr r1, [sp, 0x18]
asrs r1, 16
bl GetTile
adds r5, r0, 0
ldr r0, [r5, 0x10]
cmp r0, 0
bne _0807CE14
add r4, sp, 0x18
adds r0, r6, 0
adds r1, r4, 0
bl sub_80705F0
lsls r0, 24
cmp r0, 0
bne _0807CE18
movs r2, 0
ldrsh r1, [r7, r2]
movs r3, 0x2
ldrsh r2, [r4, r3]
adds r0, r6, 0
movs r3, 0x1
bl sub_80694C0
ldr r0, [sp, 0x24]
subs r0, 0x1
str r0, [sp, 0x24]
cmp r0, 0
bgt _0807CE68
movs r1, 0x1
mov r10, r1
_0807CF20:
mov r2, r10
cmp r2, 0
bne _0807CF4E
_0807CF26:
adds r1, r6, 0x4
adds r0, r6, 0
bl sub_807D068
ldr r0, _0807D050
movs r3, 0
ldrsh r2, [r0, r3]
movs r1, 0
str r1, [sp]
str r1, [sp, 0x4]
ldr r0, _0807D054
str r0, [sp, 0x8]
str r1, [sp, 0xC]
str r1, [sp, 0x10]
str r1, [sp, 0x14]
mov r0, r9
adds r1, r6, 0
movs r3, 0
bl sub_806F370
_0807CF4E:
bl sub_8044B28
lsls r0, 24
cmp r0, 0
bne _0807D02A
ldr r0, [sp, 0x28]
cmp r0, 0
beq _0807CF9E
add r4, sp, 0x1C
ldr r1, _0807D058
adds r0, r4, 0
bl InitPokemonMove
ldr r0, [sp, 0x28]
adds r1, r4, 0
bl sub_80571F0
lsls r0, 24
lsrs r4, r0, 24
cmp r4, 0
bne _0807CF9E
mov r0, r9
ldr r1, [sp, 0x28]
bl TrySendImmobilizeSleepEndMsg
ldr r0, _0807D050
movs r1, 0
ldrsh r2, [r0, r1]
str r4, [sp]
str r4, [sp, 0x4]
ldr r0, _0807D05C
str r0, [sp, 0x8]
str r4, [sp, 0xC]
str r4, [sp, 0x10]
str r4, [sp, 0x14]
mov r0, r9
ldr r1, [sp, 0x28]
movs r3, 0
bl sub_806F370
_0807CF9E:
bl sub_8044B28
lsls r0, 24
lsrs r5, r0, 24
cmp r5, 0
bne _0807D02A
adds r0, r6, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0807D02A
adds r0, r6, 0
bl sub_806A5B8
adds r4, r6, 0x4
adds r0, r6, 0
adds r1, r4, 0
bl sub_80706A4
lsls r0, 24
cmp r0, 0
beq _0807CFD8
adds r0, r6, 0
adds r1, r6, 0
movs r2, 0
movs r3, 0
bl sub_807D148
_0807CFD8:
adds r0, r6, 0
bl EntityExists
lsls r0, 24
cmp r0, 0
beq _0807D02A
adds r0, r6, 0
movs r1, 0x8
bl sub_806CE68
ldr r0, [r6, 0x70]
ldrb r0, [r0, 0x7]
cmp r0, 0
beq _0807D014
ldr r1, _0807D060
ldr r0, [r1]
strb r5, [r0, 0x1]
ldr r0, [r1]
movs r2, 0xB8
lsls r2, 3
adds r0, r2
movs r1, 0x1
negs r1, r1
str r1, [r0]
adds r0, r4, 0
bl sub_804AC20
movs r0, 0
bl sub_807EC28
_0807D014:
adds r0, r6, 0
bl sub_806A5B8
ldr r0, _0807D060
ldr r0, [r0]
ldr r3, _0807D064
adds r0, r3
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8075900
_0807D02A:
add sp, 0x34
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807D03C: .4byte 0x000001a3
_0807D040: .4byte gUnknown_80F8A0C
_0807D044: .4byte gAdjacentTileOffsets
_0807D048: .4byte 0xffff0000
_0807D04C: .4byte 0x0000ffff
_0807D050: .4byte gUnknown_80F4F90
_0807D054: .4byte 0x00000219
_0807D058: .4byte 0x00000163
_0807D05C: .4byte 0x0000021a
_0807D060: .4byte gDungeon
_0807D064: .4byte 0x00003a08
thumb_func_end sub_807CD9C
thumb_func_start sub_807D068
sub_807D068:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x14
adds r6, r0, 0
movs r0, 0
ldrsh r2, [r1, r0]
lsls r0, r2, 1
adds r0, r2
lsls r0, 11
movs r2, 0xC0
lsls r2, 4
adds r2, r0
mov r10, r2
movs r0, 0x2
ldrsh r1, [r1, r0]
lsls r0, r1, 1
adds r0, r1
lsls r0, 11
movs r1, 0x80
lsls r1, 5
adds r1, r0
mov r9, r1
ldr r0, [r6, 0xC]
subs r0, r2
cmp r0, 0
bge _0807D0A4
negs r0, r0
_0807D0A4:
ldr r1, [r6, 0x10]
cmp r0, 0xB
bgt _0807D0B8
mov r2, r9
subs r0, r1, r2
cmp r0, 0
bge _0807D0B4
negs r0, r0
_0807D0B4:
cmp r0, 0xB
ble _0807D11E
_0807D0B8:
movs r0, 0
mov r8, r0
ldr r5, [r6, 0xC]
adds r4, r1, 0
mov r1, r10
subs r0, r1, r5
movs r1, 0xC
bl __divsi3
str r0, [sp, 0x8]
mov r2, r9
subs r0, r2, r4
movs r1, 0xC
bl __divsi3
str r0, [sp, 0xC]
mov r0, sp
str r0, [sp, 0x10]
movs r7, 0xB
_0807D0DE:
ldr r1, [sp, 0x8]
adds r5, r1
ldr r2, [sp, 0xC]
adds r4, r2
str r5, [sp]
ldr r0, [sp, 0x10]
str r4, [r0, 0x4]
mov r0, r8
bl sin_abs_4096
lsls r1, r0, 1
adds r1, r0
lsls r1, 2
str r1, [r6, 0x1C]
adds r0, r6, 0
mov r1, sp
bl sub_804535C
adds r0, r6, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _0807D114
movs r0, 0x1A
bl sub_803E46C
_0807D114:
movs r1, 0xAA
add r8, r1
subs r7, 0x1
cmp r7, 0
bge _0807D0DE
_0807D11E:
mov r2, r10
str r2, [sp]
mov r0, r9
str r0, [sp, 0x4]
movs r0, 0
str r0, [r6, 0x1C]
adds r0, r6, 0
mov r1, sp
bl sub_804535C
movs r0, 0x1A
bl sub_803E46C
add sp, 0x14
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_807D068
thumb_func_start sub_807D148
sub_807D148:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0xC
mov r8, r0
adds r5, r1, 0
mov r9, r2
str r3, [sp, 0x4]
ldr r0, [r5, 0x70]
mov r10, r0
movs r1, 0
str r1, [sp, 0x8]
ldr r0, _0807D180
adds r1, r5, 0
movs r2, 0
bl SetMessageArgument
adds r0, r5, 0
movs r1, 0xE
bl HasAbility
lsls r0, 24
cmp r0, 0
beq _0807D188
ldr r0, _0807D184
b _0807D194
.align 2, 0
_0807D180: .4byte gAvailablePokemonNames
_0807D184: .4byte gUnknown_80FCAE8
_0807D188:
bl IsCurrentFixedRoomBossFight
lsls r0, 24
cmp r0, 0
beq _0807D1A4
ldr r0, _0807D1A0
_0807D194:
ldr r2, [r0]
mov r0, r8
adds r1, r5, 0
bl sub_80522F4
b _0807D3A8
.align 2, 0
_0807D1A0: .4byte gUnknown_80FC97C
_0807D1A4:
mov r2, r9
cmp r2, 0x1
bne _0807D1DC
ldr r0, _0807D1D0
ldr r0, [r0]
ldr r3, _0807D1D4
adds r0, r3
ldr r1, [r0]
ldr r0, [r5, 0x4]
cmp r1, r0
bne _0807D1DC
ldr r0, _0807D1D8
ldr r2, [r0]
mov r0, r8
adds r1, r5, 0
bl sub_80522F4
mov r0, r8
adds r1, r5, 0
bl PetrifiedStatusTarget
b _0807D3A8
.align 2, 0
_0807D1D0: .4byte gDungeon
_0807D1D4: .4byte 0x0000e21c
_0807D1D8: .4byte gUnknown_80FC9A0
_0807D1DC:
ldr r0, _0807D27C
ldr r2, [r0]
mov r0, r8
adds r1, r5, 0
bl sub_80522F4
adds r0, r5, 0
adds r1, r5, 0
bl TrySendImmobilizeSleepEndMsg
mov r0, r8
adds r1, r5, 0
bl sub_80421AC
adds r0, r5, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _0807D252
mov r0, r10
adds r0, 0x46
ldrb r4, [r0]
ldr r1, [r5, 0x1C]
movs r2, 0x80
lsls r2, 4
adds r1, r2
str r1, [r5, 0x1C]
ldr r2, _0807D280
adds r6, r0, 0
cmp r1, r2
bgt _0807D252
movs r7, 0x7
_0807D21E:
ldr r0, _0807D284
ldr r0, [r0]
movs r1, 0x3
ands r0, r1
cmp r0, 0
bne _0807D23C
adds r4, 0x1
ands r4, r7
adds r0, r4, 0
ands r0, r7
strb r0, [r6]
adds r0, r5, 0
adds r1, r4, 0
bl sub_806CE68
_0807D23C:
movs r0, 0x22
bl sub_803E46C
ldr r1, [r5, 0x1C]
movs r3, 0x80
lsls r3, 4
adds r1, r3
str r1, [r5, 0x1C]
ldr r0, _0807D280
cmp r1, r0
ble _0807D21E
_0807D252:
mov r0, r9
cmp r0, 0x1
beq _0807D288
cmp r0, 0x1
bcc _0807D264
cmp r0, 0x2
beq _0807D2B0
cmp r0, 0x3
beq _0807D2C8
_0807D264:
mov r0, sp
bl sub_8083660
lsls r0, 24
cmp r0, 0
bne _0807D2CE
ldr r0, [r5, 0x4]
str r0, [sp]
movs r1, 0x1
str r1, [sp, 0x8]
b _0807D2CE
.align 2, 0
_0807D27C: .4byte gUnknown_80FC584
_0807D280: .4byte 0x00009fff
_0807D284: .4byte gUnknown_202EDCC
_0807D288:
ldr r0, _0807D2A8
ldr r1, [r0]
ldr r2, _0807D2AC
adds r1, r2
mov r0, sp
bl sub_808384C
lsls r0, 24
cmp r0, 0
bne _0807D2CE
ldr r0, [r5, 0x4]
str r0, [sp]
movs r3, 0x1
str r3, [sp, 0x8]
b _0807D2CE
.align 2, 0
_0807D2A8: .4byte gDungeon
_0807D2AC: .4byte 0x0000e21c
_0807D2B0:
mov r0, sp
ldr r1, [sp, 0x4]
bl sub_808384C
lsls r0, 24
cmp r0, 0
bne _0807D2CE
ldr r0, [r5, 0x4]
str r0, [sp]
movs r0, 0x1
str r0, [sp, 0x8]
b _0807D2CE
_0807D2C8:
ldr r1, [sp, 0x4]
ldr r0, [r1]
str r0, [sp]
_0807D2CE:
mov r0, sp
movs r2, 0
ldrsh r1, [r0, r2]
movs r3, 0x2
ldrsh r2, [r0, r3]
adds r0, r5, 0
movs r3, 0x1
bl sub_80694C0
adds r0, r5, 0
movs r1, 0
bl sub_804535C
adds r0, r5, 0
bl sub_807BB78
movs r0, 0x1
bl sub_803F580
adds r0, r5, 0
bl sub_8045888
lsls r0, 24
cmp r0, 0
beq _0807D340
mov r1, r10
adds r1, 0x46
ldrb r4, [r1]
movs r0, 0x9C
lsls r0, 8
str r0, [r5, 0x1C]
adds r6, r1, 0
movs r7, 0x7
_0807D310:
ldr r0, _0807D3B8
ldr r0, [r0]
movs r1, 0x3
ands r0, r1
cmp r0, 0
bne _0807D32E
adds r4, 0x1
ands r4, r7
adds r0, r4, 0
ands r0, r7
strb r0, [r6]
adds r0, r5, 0
adds r1, r4, 0
bl sub_806CE68
_0807D32E:
movs r0, 0x22
bl sub_803E46C
ldr r0, [r5, 0x1C]
ldr r1, _0807D3BC
adds r0, r1
str r0, [r5, 0x1C]
cmp r0, 0
bgt _0807D310
_0807D340:
movs r4, 0
str r4, [r5, 0x1C]
movs r0, 0x22
bl sub_803E46C
ldr r2, [sp, 0x8]
cmp r2, 0
beq _0807D35C
ldr r0, _0807D3C0
ldr r2, [r0]
mov r0, r8
adds r1, r5, 0
bl sub_80522F4
_0807D35C:
mov r3, r9
cmp r3, 0x1
bne _0807D36A
mov r0, r8
adds r1, r5, 0
bl PetrifiedStatusTarget
_0807D36A:
mov r1, r10
ldrb r0, [r1, 0x7]
cmp r0, 0
beq _0807D392
adds r0, r5, 0x4
bl sub_804AC20
ldr r1, _0807D3C4
ldr r0, [r1]
strb r4, [r0, 0x1]
ldr r0, [r1]
movs r2, 0xB8
lsls r2, 3
adds r0, r2
movs r1, 0x1
negs r1, r1
str r1, [r0]
movs r0, 0
bl sub_807EC28
_0807D392:
adds r0, r5, 0
bl sub_806A5B8
ldr r0, _0807D3C4
ldr r0, [r0]
ldr r3, _0807D3C8
adds r0, r3
ldrb r1, [r0]
adds r0, r5, 0
bl sub_8075900
_0807D3A8:
add sp, 0xC
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807D3B8: .4byte gUnknown_202EDCC
_0807D3BC: .4byte 0xfffffc00
_0807D3C0: .4byte gUnknown_80FCB14
_0807D3C4: .4byte gDungeon
_0807D3C8: .4byte 0x00003a08
thumb_func_end sub_807D148
thumb_func_start sub_807D3CC
sub_807D3CC:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x4
mov r8, r0
movs r2, 0
ldr r4, _0807D448
ldr r0, [r4]
ldr r1, _0807D44C
adds r0, r1
ldrb r6, [r0]
cmp r6, 0
bne _0807D3E8
movs r6, 0x2
_0807D3E8:
mov r0, r8
str r2, [sp]
bl GetEntityRoom
lsls r0, 24
lsrs r1, r0, 24
ldr r2, [sp]
cmp r1, 0xFF
bne _0807D450
mov r3, r8
movs r1, 0x6
ldrsh r0, [r3, r1]
subs r5, r0, r6
adds r0, r6
cmp r5, r0
bgt _0807D4A8
_0807D408:
mov r3, r8
movs r1, 0x4
ldrsh r0, [r3, r1]
subs r4, r0, r6
adds r0, r6
adds r7, r5, 0x1
cmp r4, r0
bgt _0807D438
_0807D418:
adds r0, r4, 0
adds r1, r5, 0
str r2, [sp]
bl sub_807D4E0
ldr r2, [sp]
orrs r2, r0
lsls r0, r2, 24
lsrs r2, r0, 24
adds r4, 0x1
mov r3, r8
movs r1, 0x4
ldrsh r0, [r3, r1]
adds r0, r6
cmp r4, r0
ble _0807D418
_0807D438:
adds r5, r7, 0
mov r3, r8
movs r1, 0x6
ldrsh r0, [r3, r1]
adds r0, r6
cmp r5, r0
ble _0807D408
b _0807D4A8
.align 2, 0
_0807D448: .4byte gDungeon
_0807D44C: .4byte 0x00018209
_0807D450:
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
ldr r3, _0807D468
adds r0, r3
ldr r1, [r4]
adds r6, r1, r0
movs r1, 0x4
ldrsh r0, [r6, r1]
subs r5, r0, 0x1
b _0807D49E
.align 2, 0
_0807D468: .4byte 0x000104c4
_0807D46C:
movs r1, 0x2
ldrsh r0, [r6, r1]
subs r4, r0, 0x1
movs r3, 0x6
ldrsh r0, [r6, r3]
adds r0, 0x1
adds r7, r5, 0x1
cmp r4, r0
bgt _0807D49C
_0807D47E:
adds r0, r4, 0
adds r1, r5, 0
str r2, [sp]
bl sub_807D4E0
ldr r2, [sp]
orrs r2, r0
lsls r0, r2, 24
lsrs r2, r0, 24
adds r4, 0x1
movs r1, 0x6
ldrsh r0, [r6, r1]
adds r0, 0x1
cmp r4, r0
ble _0807D47E
_0807D49C:
adds r5, r7, 0
_0807D49E:
movs r3, 0x8
ldrsh r0, [r6, r3]
adds r0, 0x1
cmp r5, r0
ble _0807D46C
_0807D4A8:
cmp r2, 0
beq _0807D4C4
ldr r0, _0807D4C0
ldr r1, [r0]
mov r0, r8
bl SendMessage
bl sub_8040A84
bl sub_8049ED4
b _0807D4CE
.align 2, 0
_0807D4C0: .4byte gUnknown_80FD2F8
_0807D4C4:
ldr r0, _0807D4DC
ldr r1, [r0]
mov r0, r8
bl SendMessage
_0807D4CE:
add sp, 0x4
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0807D4DC: .4byte gUnknown_80FD320
thumb_func_end sub_807D3CC
thumb_func_start sub_807D4E0
sub_807D4E0:
push {r4,lr}
bl GetTile
ldr r4, [r0, 0x14]
cmp r4, 0
beq _0807D506
adds r0, r4, 0
bl GetEntityType
cmp r0, 0x2
bne _0807D506
adds r1, r4, 0
adds r1, 0x20
ldrb r0, [r1]
cmp r0, 0
bne _0807D506
movs r0, 0x1
strb r0, [r1]
b _0807D508
_0807D506:
movs r0, 0
_0807D508:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_807D4E0
thumb_func_start sub_807D510
sub_807D510:
push {r4-r7,lr}

View File

@@ -5,125 +5,6 @@
.text
thumb_func_start HandleSealTrap
HandleSealTrap:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
sub sp, 0x10
mov r8, r0
adds r7, r1, 0
movs r0, 0
mov r9, r0
cmp r7, 0
beq _08080870
mov r0, r8
movs r2, 0x1
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08080870
ldr r0, [r7, 0x70]
movs r5, 0
movs r6, 0x1
movs r1, 0x8C
lsls r1, 1
adds r2, r0, r1
adds r3, r2, 0
mov r12, sp
movs r4, 0x3
_080807F6:
ldrb r1, [r2]
adds r0, r6, 0
ands r0, r1
cmp r0, 0
beq _08080816
ldrb r1, [r2, 0x1]
adds r0, r6, 0
ands r0, r1
cmp r0, 0
bne _08080816
mov r0, r12
adds r0, 0x4
mov r12, r0
subs r0, 0x4
stm r0!, {r3}
adds r5, 0x1
_08080816:
adds r2, 0x8
adds r3, 0x8
subs r4, 0x1
cmp r4, 0
bge _080807F6
cmp r5, 0
beq _08080848
adds r0, r5, 0
bl DungeonRandInt
lsls r0, 2
mov r1, sp
adds r3, r1, r0
ldr r2, [r3]
ldrb r1, [r2, 0x1]
movs r0, 0x1
orrs r0, r1
strb r0, [r2, 0x1]
ldr r0, _0808085C
ldr r1, [r3]
movs r2, 0
bl sub_80928C0
movs r0, 0x1
mov r9, r0
_08080848:
mov r1, r9
cmp r1, 0
beq _08080864
ldr r0, _08080860
ldr r2, [r0]
mov r0, r8
adds r1, r7, 0
bl sub_80522F4
b _08080870
.align 2, 0
_0808085C: .4byte gFormatItems
_08080860: .4byte gUnknown_80FDB04
_08080864:
ldr r0, _08080880
ldr r2, [r0]
mov r0, r8
adds r1, r7, 0
bl sub_80522F4
_08080870:
add sp, 0x10
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08080880: .4byte gUnknown_80FDB2C
thumb_func_end HandleSealTrap
thumb_func_start HandleWhirlwindTrap
HandleWhirlwindTrap:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
cmp r4, 0
beq _0808089E
movs r0, 0x8
bl DungeonRandInt
adds r2, r0, 0
adds r0, r5, 0
adds r1, r4, 0
bl sub_807CD9C
_0808089E:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end HandleWhirlwindTrap
thumb_func_start HandlePokemonTrap
HandlePokemonTrap:
push {r4-r7,lr}

View File

@@ -3,22 +3,26 @@
#include "structs/dungeon_entity.h"
// NOTE: basically Offense struct but packed to match
struct unkStruct_8069D4C_sub
{
u8 att[2]; // Atk, SpAtk
u8 def[2]; // Def, SpDef
} __attribute__((packed));
struct unkStruct_8069D4C
{
s16 id;
Position pos;
s16 HP;
u8 atk;
u8 spAtk;
u8 def;
u8 spDef;
struct unkStruct_8069D4C_sub offense;
u16 level;
u32 exp;
FixedPoint belly;
FixedPoint maxBelly;
Item heldItem;
Move moves[MAX_MON_MOVES];
u32 unk40; // strugglemoveFlags?
Moves moves;
HiddenPower hiddenPower;
};

8
include/code_807CD9C.h Normal file
View File

@@ -0,0 +1,8 @@
#ifndef CODE_807CD9C_H
#define CODE_807CD9C_H
void sub_807CD9C(Entity *pokemon, Entity *target, u32 direction);
void sub_807D148(Entity *pokemon, Entity *target, u32 param_3, Position *pos);
void sub_807D3CC(Entity *param_1);
#endif /* ifndef CODE_807CD9C_H */

View File

@@ -41,6 +41,7 @@ enum WonderMailTypes
WONDER_MAIL_TYPE_WONDER = 5,
WONDER_MAIL_TYPE_COMPLETED,
WONDER_MAIL_TYPE_OKD,
MAX_WONDER_MAIL_TYPES
};
// Used in CreateRescueTitle and CreateRescueDescription

View File

@@ -49,5 +49,6 @@ void PrintDungeonLocationtoBuffer(u8 *buffer, DungeonLocation *dungeonLocation);
u32 sub_80908D8(DungeonLocation *dungeon);
u8 sub_8090910(DungeonLocation *dungeon, u32 param_2);
bool8 IsNotValidDungeon(u8 dungeon);
u8 IsRecruitingEnabled(u8 dungeon);
#endif // GUARD_DUNGEON_H

View File

@@ -4,6 +4,7 @@
#include "structs/dungeon_entity.h"
bool8 HasSafeguardStatus(Entity * param_1, Entity * param_2, bool8 displayMessage);
bool8 sub_8071728(Entity * pokemon, Entity * target, bool8 displayMessage);
bool8 sub_80717A4(Entity *pokemon, u16 moveID);
bool8 HasAbility(Entity *pokemon, u8 ability);
bool8 MonsterIsType(Entity *pokemon, u8 type);

View File

@@ -18,6 +18,17 @@ enum KangaskhanStorageStates
KANGASKHAN_STORAGE_IS_MONEY_USED_TM = 9,
};
enum KangaskhanStorageMenuActions
{
MENU_CANCEL = 1,
MENU_STORE = 2,
MENU_TAKE = 3,
MENU_YES = 4,
MENU_NO = 5,
MENU_INFO = 6,
};
// size: 0x14C
struct KangaskhanStorageWork
{
@@ -49,4 +60,4 @@ bool8 CreateKangaskhanStorage(u32 mode);
void DeleteKangaskhanStorage(void);
u32 KangaskhanStorageCallback(void);
#endif // GUARD_KANGASKHAN_STORAGE1_H
#endif // GUARD_KANGASKHAN_STORAGE1_H

View File

@@ -5,6 +5,13 @@
#include "structs/menu.h"
#include "structs/str_text.h"
enum KangaskhanStorage2States
{
KANGASKHAN_STORAGE_2_INIT = 0,
KANGASKHAN_STORAGE_2_MAIN = 1,
KANGASKHAN_STORAGE_2_EXIT = 3
};
// size: 0x150
typedef struct unkStruct_203B20C
{
@@ -27,4 +34,4 @@ bool8 sub_8017E1C(void);
u32 sub_8017E54(void);
void sub_8017EF4(void);
#endif // GUARD_KANGASKHAN_STORAGE2_H
#endif // GUARD_KANGASKHAN_STORAGE2_H

View File

@@ -10,17 +10,37 @@ enum KecleonStoreStates
{
KECLEON_STORE_INIT = 0,
KECLEON_STORE_MAIN_MENU,
// 2 - 3
KECLEON_STORE_EXIT = 4,
KECLEON_STORE_INFO,
KECLEON_STORE_UNK3,
KECLEON_STORE_EXIT,
KECLEON_STORE_NO_STORE_ITEMS,
KECLEON_STORE_NO_MONEY,
KECLEON_STORE_TOO_MUCH_MONEY,
// 8
KECLEON_STORE_NO_ITEMS_TO_SELL = 9,
KECLEON_STORE_NO_ITEMS_TO_SELL,
KECLEON_STORE_NO_ITEMS,
KECLEON_STORE_TOO_MANY_ITEMS,
// 11
KECLEON_STORE_NOT_ENOUGH_MONEY = 12,
KECLEON_STORE_UNK11,
KECLEON_STORE_NOT_ENOUGH_MONEY,
KECLEON_STORE_CANT_SELL_ITEM,
KECLEON_STORE_SELL_ITEM_TOO_MUCH_MONEY,
KECLEON_STORE_UNK15,
KECLEON_STORE_BUY_ITEM_MENU,
KECLEON_STORE_BUY_ITEM_RECEIPT,
KECLEON_STORE_UNK18,
KECLEON_STORE_UNK19,
KECLEON_STORE_UNK20,
KECLEON_STORE_BUY_ITEM_INFO,
KECLEON_STORE_BUY_ITEM,
KECLEON_STORE_UNK23,
KECLEON_STORE_SELL_ITEM_MENU,
KECLEON_STORE_SELL_ITEM_RECEIPT,
KECLEON_STORE_UNK26,
KECLEON_STORE_UNK27,
KECLEON_STORE_UNK28,
KECLEON_STORE_SELL_ITEM_INFO,
KECLEON_STORE_SELL_ITEM,
KECLEON_STORE_SELL_ALL_ITEMS,
KECLEON_STORE_SELL_ALL_ITEMS_RECEIPT,
};
// size: 0x148

View File

@@ -86,7 +86,7 @@ bool8 sub_8093318(s32, Move *moves);
bool8 sub_809333C(s32, Move *moves);
s32 sub_80935B8(Move *moves, s32 index);
void sub_8094060(Move *srcMoves, Move *destMoves);
void sub_8094184(struct unkStruct_8094924 *, struct unkStruct_8094184 *);
void sub_80941FC(struct unkStruct_8094924 *, struct unkStruct_8094184 *);
void sub_8094184(struct unkStruct_8094924 *, struct Moves *);
void sub_80941FC(struct unkStruct_8094924 *, struct Moves *);
#endif // GUARD_MOVES_H
#endif // GUARD_MOVES_H

View File

@@ -25,7 +25,7 @@ typedef struct unkStruct_808E218_arg
typedef struct unkStruct_808E218
{
// leveldata? (same size)
unkStruct_808E6F4 unk0[3];
HiddenPower unk0[3];
} unkStruct_808E218;
extern unkStruct_203B45C *gRecruitedPokemonRef;
@@ -80,7 +80,7 @@ bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 r1);
OpenedFile *OpenPokemonDialogueSpriteFile(s16 index);
OpenedFile *GetDialogueSpriteDataPtr(s16 index);
s32 GetUnownIndex(s16 index);
void sub_808E6F4(unkStruct_808E6F4 *);
void GenerateHiddenPower(HiddenPower *);
s32 GetEvolutionSequence(PokemonStruct1 *pokemon, EvolveStage *);
void xxx_pokemonstruct_to_pokemon2_808DE50(PokemonStruct2 *, PokemonStruct1 *, s32);
void SavePokemonStruct(unkStruct_8094924 *, PokemonStruct1 *pokemon);

View File

@@ -36,5 +36,6 @@ void HandleStockpile(Entity * pokemon, Entity * target);
void InvisibleStatusTarget(Entity * pokemon, Entity * target);
void PerishSongTarget(Entity * pokemon, Entity * target);
void EncoreStatusTarget(Entity * pokemon, Entity * target);
void sub_8078A58(struct Entity *pokemon, struct Entity *target, s32 param_3, s32 param_4);
#endif

View File

@@ -168,6 +168,12 @@ typedef struct Unk_Entity_x184
/* 0x19e - 0x1a */ u8 unk1A;
} Unk_Entity_x184 ;
typedef struct Moves
{
/* 0x118 */ Move moves[MAX_MON_MOVES];
/* 0x138 */ u8 struggleMoveFlags;
} Moves;
// size: 0x208
typedef struct EntityInfo
{
@@ -272,8 +278,7 @@ typedef struct EntityInfo
// When non-zero, an AI Pokémon will move in a random direction every turn when it is a room.
// There is a chance of this flag being set when a wild Pokémon spawns. The chance depends on the dungeon's randomMovementChance.
/* 0x114 */ u32 moveRandomly;
/* 0x118 */ Move moves[MAX_MON_MOVES];
/* 0x138 */ u8 struggleMoveFlags;
/* 0x118 */ Moves moves;
/* 0x13C */ FixedPoint belly;
/* 0x140 */ FixedPoint maxBelly;
/* 0x144 */ bool8 aiNextToTarget; // True if an AI Pokémon is following another Pokémon and is already adjacent to them.

View File

@@ -160,6 +160,36 @@ typedef struct UnkDungeonGlobal_unk1CD98
s16 unk2[2];
} UnkDungeonGlobal_unk1CD98;
struct unkStruct_Dungeon134_sub
{
u8 unk134;
u32 unk138;
u8 unk13C[2];
u8 unk13E[2];
u16 unk140[7];
u32 unk150;
u32 unk154;
u32 unk158;
u32 unk15C;
u8 unk160;
u8 unk161;
u8 unk162;
u8 unk163;
u8 unk164;
u8 unk165;
u8 unk166;
u8 unk167;
u8 unk168;
u8 unk169;
u8 unk16A;
u8 unk16B;
u8 unk16C;
u8 unk16D;
u8 fill16E[0x179 - 0x16E];
bool8 pokemonExposed;
u8 unk17A;
};
// size: 0x1CEDC
typedef struct Dungeon
{
@@ -183,16 +213,8 @@ typedef struct Dungeon
u8 fill14[0xB8 - 0x16];
Entity *unkB8;
Entity *unkBC;
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.
u8 fill17A[0x17C - 0x17A];
u8 fillC0[0x134 - 0xC0];
struct unkStruct_Dungeon134_sub unk134;
Dungeon_sub unk17C[0x100];
/* 0x57C */ u8 fill57C[0x5C0 - 0x57c];
/* 0x5C0 */ s32 unk5C0;
@@ -274,7 +296,7 @@ typedef struct Dungeon
/* 0x3A16 */ s16 unk3A16;
/* 0x3A18 */ Tile tiles[DUNGEON_MAX_SIZE_Y][DUNGEON_MAX_SIZE_X];
Position unkE218;
Position unkE21C;
Position unkE21C; // stair location?
Position unkE220[8];
u32 unkE240;
u8 fillE244[0xE250 - 0xE244];

View File

@@ -40,13 +40,6 @@ typedef struct PokemonStruct1
/* 0x4C */ u8 name[POKEMON_NAME_LENGTH];
} PokemonStruct1;
// size: 0x4
typedef struct unkStruct_808E6F4
{
s16 unk0;
u8 unk2;
} unkStruct_808E6F4;
// size: 0x4
typedef struct EvolveStage
{
@@ -76,13 +69,13 @@ typedef struct PokemonStruct2
u16 unk12; // pokeHP
/* 0x14 */ Offense offense; // offense (other offset)
/* 0x18 */ u32 currExp;
/* 0x1C */ unkStruct_8094184 moves;
/* 0x1C */ Moves moves;
/* 0x40 */ Item itemSlot; // heldItem
/* 0x44 */ FixedPoint unk44;
/* 0x48 */ FixedPoint unk48;
FixedPoint belly; // some struct
FixedPoint maxBelly; // some struct (same type as 44)
/* 0x4C */ u32 IQSkills; // unk20
/* 0x50 */ u8 tacticIndex;
unkStruct_808E6F4 unk54;
/* 0x54 */ HiddenPower hiddenPower;
/* 0x58 */ u8 name[POKEMON_NAME_LENGTH]; // name (other offset)
} PokemonStruct2;
@@ -155,8 +148,7 @@ typedef struct MonsterDataEntry
typedef struct LevelData
{
/* 0x0 */ s32 expRequired;
/* 0x4 */ u8 gainHP;
/* 0x5 */ u8 gainUnused;
/* 0x4 */ u16 gainHP;
/* 0x6 */ u8 gainAtt;
/* 0x7 */ u8 gainSPAtt;
/* 0x8 */ u8 gainDef;

15
include/wonder_mail_4.h Normal file
View File

@@ -0,0 +1,15 @@
#ifndef WONDER_MAIL_4_H
#define WONDER_MAIL_4_H
#include "structs/str_text.h"
u32 sub_80306A8(u32 wonderMailType, u32 r1, UnkTextStruct2_sub *r2, u32 r3);
u32 sub_8030768(u8 r0);
u8 sub_80307EC(void);
void sub_8030810(u8 r0);
void sub_803084C(void);
u8 *sub_8030894(void);
void sub_803092C(void);
bool8 HasNoWonderMailType(u32 wonderMailType);
#endif /* ifndef WONDER_MAIL_4_H */

9
include/wonder_mail_5.h Normal file
View File

@@ -0,0 +1,9 @@
#ifndef WONDER_MAIL_5_H
#define WONDER_MAIL_5_H
bool8 sub_8030D40(u8 mailIndex, s32 windowID);
u32 sub_8030DA0(void);
void sub_8030DE4(void);
#endif /* ifndef WONDER_MAIL_5_H */

View File

@@ -255,6 +255,7 @@ SECTIONS {
src/type_effectiveness.o(.text);
src/code_806E8B0.o(.text);
asm/code_806E8B0.o(.text);
src/code_806FDF4.o(.text);
src/status_checks.o(.text);
src/dungeon_movement.o(.text);
src/status_checks_1.o(.text);
@@ -272,14 +273,14 @@ SECTIONS {
src/dungeon_ai.o(.text);
src/move_effects_target.o(.text);
src/status.o(.text);
asm/code_8077274.o(.text);
src/code_8077274_1.o(.text);
asm/code_8077274_1.o(.text);
src/dungeon_ai_movement.o(.text);
src/dungeon_ai_attack.o(.text);
src/targeting_flags.o(.text);
asm/code_807CD9C.o(.text);
src/code_807CD9C.o(.text);
asm/code_807CD9C.o(.text);
src/code_807E1A0.o(.text);
src/weather.o(.text);
asm/code_807E5AC.o(.text);
src/trap.o(.text);

View File

@@ -822,7 +822,7 @@ void sub_80420E8(Entity *pokemon, struct DamageStruct *dmgStruct)
u32 typeEffectiveness;
u32 arg;
typeEffectiveness = dmgStruct->typeEffectiveness;
if(gDungeon->unk16D != 0)
if(gDungeon->unk134.unk16D != 0)
typeEffectiveness = sub_806F62C(dmgStruct->typeEffectiveness);
switch(typeEffectiveness)
{

View File

@@ -3,6 +3,7 @@
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "code_8077274_1.h"
#include "code_807CD9C.h"
#include "code_808417C.h"
#include "constants/dungeon_action.h"
#include "constants/dungeon.h"
@@ -107,12 +108,10 @@ extern void PrintFieldMessage(u32, u8 *, u32);
extern void sub_8044E24(Entity *, u32, u32);
extern void sub_804245C(Entity *, Item *);
extern u8 sub_8072938(Entity *, u16);
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
extern void sub_8072008(Entity *pokemon, Entity *r1, u32 r2, u8 r3, u32);
extern void LevelDownTarget(Entity *pokemon, Entity *r1, u32 r2);
extern void sub_80522F4(Entity *pokemon, Entity *r1, const u8[]);
extern void sub_806F370(Entity *pokemon, Entity *r1, u32, u32, u8 *, u8, s32, u32, u32, u32);
extern void sub_8078A58(Entity *, Entity *, s32, u32);
extern s32 sub_8042520(Entity *);
Entity *sub_80696FC(Entity *);
extern void sub_806A7E8(EntityInfo *, s32);
@@ -653,7 +652,7 @@ void GinsengItemAction(Entity *pokemon, Entity * target)
if (DungeonRandInt(100) < gUnknown_80F4F46)
moveBoost = 3;
if (entityInfo->isTeamLeader) {
for(moveIndex = 0, movePtr1 = &entityInfo->moves[0], movePtr2 = movePtr1; moveIndex < MAX_MON_MOVES; movePtr1++, movePtr2++, moveIndex++)
for(moveIndex = 0, movePtr1 = &entityInfo->moves.moves[0], movePtr2 = movePtr1; moveIndex < MAX_MON_MOVES; movePtr1++, movePtr2++, moveIndex++)
{
if((movePtr1->moveFlags & MOVE_FLAG_EXISTS) && (movePtr1->moveFlags & MOVE_FLAG_SET))
{

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "code_807CD9C.h"
#include "dungeon_map_access.h"
#include "dungeon_movement.h"
#include "dungeon_music.h"
@@ -34,7 +35,6 @@ void sub_8045BF8(u8 *, Item *);
u8 sub_80460F8(Position *, Item *, u32);
extern void sub_807AB38(Entity *, u32);
extern Entity * sub_8044DA4(Entity *param_1,int param_2);
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
extern void sub_806A6E8(Entity *);
extern void sub_8044DF0(Entity *, u32, u32);
extern void sub_8045DB4(Position *, u32);

View File

@@ -31,15 +31,14 @@ void sub_8069D4C(struct unkStruct_8069D4C *r0, Entity *target)
r0->level = info->level;
GetPokemonLevelData(&leveldata, info->id, info->level);
r0->exp = leveldata.expRequired;
r0->atk = info->atk;
r0->spAtk = info->spAtk;
r0->def = info->def;
r0->spDef = info->spDef;
r0->offense.att[0] = info->atk;
r0->offense.att[1] = info->spAtk;
r0->offense.def[0] = info->def;
r0->offense.def[1] = info->spDef;
r0->heldItem = info->heldItem;
memcpy(r0->moves, info->moves, sizeof(r0->moves) + sizeof(r0->unk40));
memcpy(r0->moves.moves, info->moves.moves, sizeof(r0->moves));
r0->belly = info->belly;
r0->maxBelly = info->maxBelly;
r0->hiddenPower = info->hiddenPower;

1092
src/code_806FDF4.c Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,11 +1,17 @@
#include "global.h"
#include "constants/tactic.h"
#include "dungeon_capabilities.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_leader.h"
#include "code_8045A00.h"
#include "code_8077274_1.h"
#include "constants/dungeon.h"
#include "dungeon_map_access.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
#include "dungeon.h"
#include "structs/str_dungeon.h"
#include "pokemon_3.h"
#include "status_checks_1.h"
struct unkStruct_806B7F8
{
@@ -18,13 +24,47 @@ struct unkStruct_806B7F8
u8 unk10;
};
EWRAM_DATA s32 gUnknown_202F31C[2] = {0, 0};
EWRAM_DATA s32 gUnknown_202F324[2] = {0, 0};
extern s32 gFormatData_202DE30[5];
extern u8 gAvailablePokemonNames[];
extern u8 gFormatItems[];
extern s16 gUnknown_80F4DA6;
extern s16 gUnknown_80F4DA8;
extern s16 gUnknown_80F4DAA;
extern s16 gUnknown_80F4DAC;
extern u8 *gUnknown_80FED68[];
extern u8 *gUnknown_80F9ACC[];
extern u8 *gUnknown_80F9AEC[];
extern u8 *gUnknown_80F9B10[];
extern u8 *gUnknown_80F9B34[];
extern u8 *gUnknown_80F9B58[];
extern u8 *gUnknown_80F9B74[];
extern u8 *gUnknown_80F9B94[];
extern u8 *gUnknown_80F9E64[];
extern u8 *gUnknown_80F9E80[];
extern u8 *gUnknown_80F9EC8[];
extern u8 *gUnknown_80F9EEC[];
extern u8 *gUnknown_80FCF18[];
extern u8 *gUnknown_80FED68[];
extern u8 *gUnknown_80FF730[];
extern u8 gUnknown_8107010[8];
extern u8 *gUnknown_8107018[3];
extern void sub_80421C0(Entity *pokemon, u16 r1);
void sub_80528F4(Entity *, u8 *);
void sub_8083D58(void);
void sub_8072778(Entity *, Entity *, u8, u8);
bool8 sub_80725A4(Entity *, Entity *);
void GetAvailTacticsforLvl_Bool(u8 *tacticsBuffer, s32 pokeLevel);
bool8 sub_80723D0(Entity *, Entity *, u8, u8);
void sub_807218C(Entity *);
void sub_806A2BC(Entity *, u32);
void sub_806A3D4(u8 *, s32, s32, s32);
extern void PrintFieldMessage(u32, u8 *, u32);
extern Entity* sub_806B7F8(struct unkStruct_806B7F8 *, bool8);
extern void sub_805239C(struct Entity *r0, const char r1[]);
extern void sub_8042920(struct Entity *r0);
@@ -32,6 +72,8 @@ extern s16 sub_803D970(u32);
extern s32 sub_803DA20(s32 param_1);
extern bool8 sub_806AA0C(s32, u32);
extern bool8 sub_8083660(struct Position *param_1);
extern void sub_80522F4(Entity *pokemon, Entity *r1, const u8[]);
void GetPokemonLevelData(LevelData* a1, s32 _id, s32 level); // TODO: change to s32
void sub_8071B48(void)
{
@@ -151,3 +193,692 @@ void sub_8071D4C(Entity *pokemon, Entity *target, s32 exp)
}
}
}
// https://decomp.me/scratch/Wcmvb - (98.45% matching - Seth)
NAKED
void sub_8071DA4(Entity *entity)
{
asm_unified(
" push {r4-r7,lr}\n"
" mov r7, r10\n"
" mov r6, r9\n"
" mov r5, r8\n"
" push {r5-r7}\n"
" sub sp, 0xD4\n"
" str r0, [sp, 0xB4]\n"
" ldr r2, _08071E44\n"
" ldr r1, [r2]\n"
" ldrb r0, [r1, 0xD]\n"
" cmp r0, 0\n"
" bne _08071DBE\n"
" b _08071FE2\n"
"_08071DBE:\n"
" movs r0, 0\n"
" strb r0, [r1, 0xD]\n"
" ldr r0, [r2]\n"
" ldrb r0, [r0, 0x10]\n"
" cmp r0, 0\n"
" beq _08071DCC\n"
" b _08071FE2\n"
"_08071DCC:\n"
" ldr r0, [sp, 0xB4]\n"
" bl EntityExists\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" bne _08071DE2\n"
" mov r0, sp\n"
" bl sub_80457DC\n"
" mov r0, sp\n"
" str r0, [sp, 0xB4]\n"
"_08071DE2:\n"
" movs r4, 0\n"
"_08071DE4:\n"
" movs r5, 0\n"
" ldr r0, _08071E44\n"
" ldr r0, [r0]\n"
" lsls r1, r4, 2\n"
" ldr r2, _08071E48\n"
" adds r0, r2\n"
" adds r0, r1\n"
" ldr r0, [r0]\n"
" mov r8, r0\n"
" movs r0, 0\n"
" str r0, [sp, 0xB8]\n"
" movs r1, 0\n"
" movs r2, 0\n"
" str r1, [sp, 0xBC]\n"
" str r2, [sp, 0xC0]\n"
" movs r0, 0\n"
" movs r1, 0\n"
" str r0, [sp, 0xC4]\n"
" str r1, [sp, 0xC8]\n"
" adds r1, r4, 0x1\n"
" str r1, [sp, 0xCC]\n"
" mov r2, r8\n"
" cmp r2, 0\n"
" bne _08071E16\n"
" b _08071FDA\n"
"_08071E16:\n"
" mov r0, r8\n"
" bl EntityExists\n"
" lsls r0, 24\n"
" cmp r0, 0\n"
" bne _08071E24\n"
" b _08071FDA\n"
"_08071E24:\n"
" mov r0, r8\n"
" ldr r6, [r0, 0x70]\n"
" movs r1, 0xE\n"
" ldrsh r0, [r6, r1]\n"
" cmp r0, 0\n"
" bne _08071E32\n"
" b _08071FDA\n"
"_08071E32:\n"
" adds r1, r6, 0\n"
" adds r1, 0xF9\n"
" ldrb r0, [r1]\n"
" cmp r0, 0\n"
" beq _08071E4C\n"
" add r2, sp, 0xB8\n"
" ldrb r2, [r2]\n"
" strb r2, [r1]\n"
" b _08071FCA\n"
" .align 2, 0\n"
"_08071E44: .4byte gDungeon\n"
"_08071E48: .4byte 0x000135cc\n"
"_08071E4C:\n"
" movs r1, 254\n"
" lsls r1, 1\n"
" adds r0, r6, r1\n"
" ldr r0, [r0]\n"
" mov r10, r0\n"
" cmp r0, 0\n"
" beq _08071EB6\n"
" ldrb r0, [r6, 0x7]\n"
" cmp r0, 0\n"
" beq _08071E68\n"
" ldrb r1, [r6, 0x9]\n"
" add r0, sp, 0x74\n"
" bl GetAvailTacticsforLvl_Bool\n"
"_08071E68:\n"
" movs r0, 0x10\n"
" ldrsh r2, [r6, r0]\n"
" str r2, [sp, 0xB8]\n"
" ldrb r1, [r6, 0x14]\n"
" str r1, [sp, 0xBC]\n"
" ldrb r2, [r6, 0x15]\n"
" str r2, [sp, 0xC0]\n"
" ldrb r0, [r6, 0x16]\n"
" str r0, [sp, 0xC4]\n"
" ldrb r1, [r6, 0x17]\n"
" str r1, [sp, 0xC8]\n"
" ldrb r0, [r6, 0x9]\n"
" cmp r0, 0x64\n"
" beq _08071EB6\n"
" ldr r0, [r6, 0x18]\n"
" add r0, r10\n"
" str r0, [r6, 0x18]\n"
" mov r2, r10\n"
" ldr r0, _08071EE8\n"
" str r2, [r0]\n"
" ldr r0, _08071EEC\n"
" adds r1, r6, 0\n"
" movs r2, 0\n"
" bl SetMessageArgument_2\n"
" ldr r0, _08071EF0\n"
" ldr r2, [r0]\n"
" ldr r0, [sp, 0xB4]\n"
" mov r1, r8\n"
" bl sub_80522F4\n"
" ldr r0, [sp, 0xB4]\n"
" mov r1, r8\n"
" movs r2, 0x1\n"
" movs r3, 0x1\n"
" bl sub_80723D0\n"
" lsls r0, 24\n"
" lsrs r5, r0, 24\n"
"_08071EB6:\n"
" ldr r1, _08071EF4\n"
" adds r0, r6, r1\n"
" ldrb r0, [r0]\n"
" adds r4, 0x1\n"
" str r4, [sp, 0xCC]\n"
" cmp r0, 0\n"
" beq _08071F3A\n"
" movs r2, 0x2\n"
" ldrsh r0, [r6, r2]\n"
" add r1, sp, 0x8C\n"
" movs r2, 0\n"
" movs r3, 0\n"
" bl sub_808E400\n"
" adds r7, r0, 0\n"
" add r0, sp, 0x8C\n"
" mov r9, r0\n"
" cmp r7, 0\n"
" beq _08071F38\n"
" adds r0, r7, 0\n"
" bl DungeonRandInt\n"
" adds r4, r0, 0\n"
" movs r1, 0\n"
" b _08071F02\n"
" .align 2, 0\n"
"_08071EE8: .4byte gFormatData_202DE30\n"
"_08071EEC: .4byte gAvailablePokemonNames\n"
"_08071EF0: .4byte gUnknown_80F9E64\n"
"_08071EF4: .4byte 0x00000149\n"
"_08071EF8:\n"
" adds r4, 0x1\n"
" cmp r4, r7\n"
" blt _08071F00\n"
" movs r4, 0\n"
"_08071F00:\n"
" adds r1, 0x1\n"
"_08071F02:\n"
" cmp r1, r7\n"
" bge _08071F38\n"
" lsls r0, r4, 1\n"
" mov r2, r9\n"
" adds r5, r2, r0\n"
" movs r2, 0\n"
" ldrsh r0, [r5, r2]\n"
" str r1, [sp, 0xD0]\n"
" bl sub_803D930\n"
" lsls r0, 24\n"
" ldr r1, [sp, 0xD0]\n"
" cmp r0, 0\n"
" beq _08071EF8\n"
" movs r2, 0\n"
" ldrsh r0, [r5, r2]\n"
" bl GetSpriteData\n"
" ldr r1, [sp, 0xD0]\n"
" cmp r0, 0\n"
" beq _08071EF8\n"
" movs r0, 0\n"
" ldrsh r2, [r5, r0]\n"
" ldr r0, [sp, 0xB4]\n"
" mov r1, r8\n"
" bl sub_8072B78\n"
"_08071F38:\n"
" movs r5, 0\n"
"_08071F3A:\n"
" cmp r5, 0\n"
" beq _08071F7A\n"
" ldrb r0, [r6, 0x6]\n"
" cmp r0, 0\n"
" bne _08071F7A\n"
" movs r1, 0x10\n"
" ldrsh r0, [r6, r1]\n"
" ldr r2, [sp, 0xB8]\n"
" subs r0, r2\n"
" ldr r1, _08071FF4\n"
" str r0, [r1]\n"
" ldrb r0, [r6, 0x14]\n"
" ldr r2, [sp, 0xBC]\n"
" subs r0, r2\n"
" str r0, [r1, 0x4]\n"
" ldrb r0, [r6, 0x16]\n"
" ldr r1, [sp, 0xC4]\n"
" subs r0, r1\n"
" ldr r2, _08071FF4\n"
" str r0, [r2, 0x8]\n"
" ldrb r0, [r6, 0x15]\n"
" ldr r1, [sp, 0xC0]\n"
" subs r0, r1\n"
" str r0, [r2, 0xC]\n"
" ldrb r0, [r6, 0x17]\n"
" ldr r2, [sp, 0xC8]\n"
" subs r0, r2\n"
" ldr r1, _08071FF4\n"
" str r0, [r1, 0x10]\n"
" mov r0, r8\n"
" bl sub_807218C\n"
"_08071F7A:\n"
" mov r2, r10\n"
" cmp r2, 0\n"
" beq _08071FCA\n"
" ldrb r0, [r6, 0x7]\n"
" cmp r0, 0\n"
" beq _08071FCA\n"
" ldrb r1, [r6, 0x9]\n"
" add r0, sp, 0x80\n"
" bl GetAvailTacticsforLvl_Bool\n"
" movs r4, 0\n"
" add r7, sp, 0x74\n"
" add r5, sp, 0x80\n"
"_08071F94:\n"
" adds r0, r7, r4\n"
" ldrb r0, [r0]\n"
" cmp r0, 0\n"
" bne _08071FC4\n"
" adds r0, r5, r4\n"
" ldrb r0, [r0]\n"
" cmp r0, 0x1\n"
" bne _08071FC4\n"
" ldr r0, _08071FF8\n"
" mov r1, r8\n"
" movs r2, 0\n"
" bl SetMessageArgument\n"
" lsls r1, r4, 24\n"
" lsrs r1, 24\n"
" ldr r0, _08071FFC\n"
" bl CopyTacticsNameToBuffer\n"
" ldr r0, _08072000\n"
" ldr r2, [r0]\n"
" ldr r0, [sp, 0xB4]\n"
" mov r1, r8\n"
" bl sub_80522F4\n"
"_08071FC4:\n"
" adds r4, 0x1\n"
" cmp r4, 0xB\n"
" ble _08071F94\n"
"_08071FCA:\n"
" movs r1, 254\n"
" lsls r1, 1\n"
" adds r0, r6, r1\n"
" movs r1, 0\n"
" str r1, [r0]\n"
" ldr r2, _08072004\n"
" adds r0, r6, r2\n"
" strb r1, [r0]\n"
"_08071FDA:\n"
" ldr r4, [sp, 0xCC]\n"
" cmp r4, 0x13\n"
" bgt _08071FE2\n"
" b _08071DE4\n"
"_08071FE2:\n"
" add sp, 0xD4\n"
" pop {r3-r5}\n"
" mov r8, r3\n"
" mov r9, r4\n"
" mov r10, r5\n"
" pop {r4-r7}\n"
" pop {r0}\n"
" bx r0\n"
" .align 2, 0\n"
"_08071FF4: .4byte gFormatData_202DE30\n"
"_08071FF8: .4byte gAvailablePokemonNames\n"
"_08071FFC: .4byte gFormatItems\n"
"_08072000: .4byte gUnknown_80FF730\n"
"_08072004: .4byte 0x00000149");
}
void sub_8072008(Entity *pokemon, Entity *target, s32 level, u8 param_4, u8 param_5)
{
bool8 flag;
s32 newLevel;
EntityInfo *info;
s32 tacticIndex;
LevelData leveldata;
u8 tacticsBuffer1 [NUM_TACTICS];
u8 tacticsBuffer2 [NUM_TACTICS];
s32 maxHP;
u32 atk[2];
u32 def[2];
if (EntityExists(target)) {
flag = 0;
info = target->info;
if (info->isTeamLeader) {
GetAvailTacticsforLvl_Bool(tacticsBuffer1,info->level);
}
maxHP = info->maxHPStat;
atk[0] = info->atk;
atk[1] = info->spAtk;
def[0] = info->def;
def[1] = info->spDef;
if (!IsClientOrTeamBase(info->joinedAt.joinedAt)) {
newLevel = info->level + level;
if (99 < newLevel) {
newLevel = 100;
}
if (newLevel != info->level) {
GetPokemonLevelData(&leveldata,info->id,newLevel);
info->exp = leveldata.expRequired;
flag |= (sub_80723D0(pokemon,target,param_4,param_5));
if ((flag != 0) && (!info->isNotTeamMember)) {
gFormatData_202DE30[0] = info->maxHPStat - maxHP;
gFormatData_202DE30[1] = info->atk - atk[0];
gFormatData_202DE30[2] = info->def - def[0];
gFormatData_202DE30[3] = info->spAtk - atk[1];
gFormatData_202DE30[4] = info->spDef - def[1];
if (param_4 != 0) {
sub_807218C(target);
}
}
}
}
if (info->isTeamLeader) {
GetAvailTacticsforLvl_Bool(tacticsBuffer2,info->level);
for(tacticIndex = 0; tacticIndex < NUM_TACTICS; tacticIndex++)
{
if ((tacticsBuffer1[tacticIndex] == 0) && (tacticsBuffer2[tacticIndex] == 1)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
CopyTacticsNameToBuffer(gFormatItems,tacticIndex);
sub_80522F4(pokemon,target,*gUnknown_80FF730);
}
}
}
info->expGainedInTurn = 0;
info->unk149 = 0;
if ((flag == 0) && (param_4 != 0)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80F9B74);
}
}
}
void sub_807218C(Entity *pokemon)
{
EntityInfo *info;
u8 buffer [400];
s32 r1;
s32 r6;
s32 r3;
r6 = 0;
info = pokemon->info;
sub_806A2BC(pokemon, 0);
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
if(sub_8070BC0(pokemon))
{
r3 = 0;
r1 = info->id;
if(info->joinedAt.joinedAt == DUNGEON_JOIN_LOCATION_CLIENT_POKEMON)
{
r1 = 0x1A4;
}
else if(info->joinedAt.joinedAt == DUNGEON_RESCUE_TEAM_BASE)
{
r1 = 0x1A5;
}
else if(info->joinedAt.joinedAt == DUNGEON_JOIN_LOCATION_PARTNER)
{
if(gDungeon->unk65C == 0)
r3 = 1;
}
sub_806A3D4(buffer, r1, 3, r3);
}
else
{
strcpy(buffer, *gUnknown_80FCF18);
}
PrintFieldMessage(0, buffer, 1);
buffer[0] = 0;
if(gFormatData_202DE30[0]> 0)
{
strcat(buffer, *gUnknown_80F9ACC);
r6++;
}
if(gFormatData_202DE30[1]> 0)
{
if(gUnknown_8107010[r6] != 0)
strcat(buffer, gUnknown_8107018[gUnknown_8107010[r6]]);
strcat(buffer, *gUnknown_80F9AEC);
r6++;
}
if(gFormatData_202DE30[2]> 0)
{
if(gUnknown_8107010[r6] != 0)
strcat(buffer, gUnknown_8107018[gUnknown_8107010[r6]]);
strcat(buffer, *gUnknown_80F9B10);
r6++;
}
if(gFormatData_202DE30[3]> 0)
{
if(gUnknown_8107010[r6] != 0)
strcat(buffer, gUnknown_8107018[gUnknown_8107010[r6]]);
strcat(buffer, *gUnknown_80F9B34);
r6++;
}
if(gFormatData_202DE30[4]> 0)
{
if(gUnknown_8107010[r6] != 0)
strcat(buffer, gUnknown_8107018[gUnknown_8107010[r6]]);
strcat(buffer, *gUnknown_80F9B58);
}
if(buffer[0])
PrintFieldMessage(0, buffer, 1);
sub_806A2BC(GetLeader(), 0);
}
void LevelDownTarget(Entity *pokemon, Entity *target, u32 level)
{
EntityInfo *info;
u8 flag;
s32 newLevel;
LevelData leveldata;
if(EntityExists(target))
{
flag = FALSE;
info = target->info;
if(!IsClientOrTeamBase(info->joinedAt.joinedAt))
{
newLevel = info->level - level;
if(newLevel <= 0)
newLevel = 1;
if(newLevel != info->level)
{
GetPokemonLevelData(&leveldata, info->id, newLevel);
info->exp = leveldata.expRequired;
flag |= sub_80725A4(pokemon, target);
}
}
info->expGainedInTurn = 0;
info->unk149 = 0;
if(!flag)
{
SetMessageArgument(gAvailablePokemonNames, target, 0);
sub_80522F4(pokemon, target, *gUnknown_80F9B94);
}
}
}
bool8 sub_80723D0(Entity *pokemon, Entity *target, u8 param_3, u8 param_4)
{
EntityInfo *info;
LevelData leveldata;
bool8 flag = FALSE;
s32 id;
s32 level;
s32 exp;
if(!EntityExists(target)) return FALSE;
info = target->info;
id = info->id;
exp = info->exp;
if(IsClientOrTeamBase(info->joinedAt.joinedAt))
return FALSE;
for(level = info->level + 1; level <= 100; level++)
{
GetPokemonLevelData(&leveldata, id, level);
if(leveldata.expRequired > exp) break;
info->level = level;
info->exp = exp;
if(param_3)
{
if(!info->isNotTeamMember)
{
sub_806A2BC(target, 0);
if(!flag)
sub_8083D58();
gFormatData_202DE30[0] = level;
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
sub_80528F4(target, *gUnknown_80F9E80);
}
else
{
if(!flag)
sub_8083D58();
gFormatData_202DE30[0] = level;
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
sub_805239C(target, *gUnknown_80F9E80);
}
}
flag = TRUE;
info->maxHPStat += leveldata.gainHP;
info->HP += leveldata.gainHP;
if(info->maxHPStat > 998)
info->maxHPStat = 999;
if(info->HP >= info->maxHPStat)
{
info->HP = info->maxHPStat;
}
gUnknown_202F31C[0] = info->atk;
gUnknown_202F31C[1] = info->spAtk;
gUnknown_202F324[0] = info->def;
gUnknown_202F324[1] = info->spDef;
gUnknown_202F31C[0] += leveldata.gainAtt;
gUnknown_202F31C[1] += leveldata.gainSPAtt;
gUnknown_202F324[0] += leveldata.gainDef;
gUnknown_202F324[1] += leveldata.gainSPDef;
if(gUnknown_202F31C[0] > 254)
gUnknown_202F31C[0] = 255;
if(gUnknown_202F31C[1] > 254)
gUnknown_202F31C[1] = 255;
if(gUnknown_202F324[0] > 254)
gUnknown_202F324[0] = 255;
if(gUnknown_202F324[1] > 254)
gUnknown_202F324[1] = 255;
LoadIQSkills(target);
sub_8079764(target);
info->atk = gUnknown_202F31C[0];
info->spAtk = gUnknown_202F31C[1];
info->def = gUnknown_202F324[0];
info->spDef = gUnknown_202F324[1];
sub_8072778(pokemon, target, param_3, param_4);
}
return flag;
}
bool8 sub_80725A4(Entity *pokemon, Entity *target)
{
EntityInfo *info;
LevelData leveldata;
s32 level;
s32 levelMax;
s32 id;
s32 exp;
s32 oldLevel;
if(!EntityExists(target)) return FALSE;
info = target->info;
id = info->id;
exp = info->exp;
oldLevel = info->level;
if(IsClientOrTeamBase(info->joinedAt.joinedAt)) return FALSE;
for(level = 1; level < info->level; level++)
{
GetPokemonLevelData(&leveldata, id, level);
if(leveldata.expRequired >= exp) break;
}
levelMax = level - 1;
for(level = info->level; level > levelMax; level--)
{
if(level < 100)
{
GetPokemonLevelData(&leveldata, id, level + 1);
info->exp = leveldata.expRequired - 1;
}
else
{
info->exp = exp;
}
if(oldLevel > level)
{
GetPokemonLevelData(&leveldata, id, level + 1);
info->level = level;
info->maxHPStat -= leveldata.gainHP;
info->HP -= leveldata.gainHP;
if(info->HP <= 1)
info->HP = 1;
if(info->maxHPStat <= 1)
info->maxHPStat = 1;
if(info->HP >= info->maxHPStat)
{
info->HP = info->maxHPStat;
}
gUnknown_202F31C[0] = info->atk;
gUnknown_202F31C[1] = info->spAtk;
gUnknown_202F324[0] = info->def;
gUnknown_202F324[1] = info->spDef;
gUnknown_202F31C[0] -= leveldata.gainAtt;
gUnknown_202F31C[1] -= leveldata.gainSPAtt;
gUnknown_202F324[0] -= leveldata.gainDef;
gUnknown_202F324[1] -= leveldata.gainSPDef;
if(gUnknown_202F31C[0] <= 1)
gUnknown_202F31C[0] = 1;
if(gUnknown_202F31C[1] <= 1)
gUnknown_202F31C[1] = 1;
if(gUnknown_202F324[0] <= 1)
gUnknown_202F324[0] = 1;
if(gUnknown_202F324[1] <= 1)
gUnknown_202F324[1] = 1;
LoadIQSkills(target);
sub_8079764(target);
info->atk = gUnknown_202F31C[0];
info->spAtk = gUnknown_202F31C[1];
info->def = gUnknown_202F324[0];
info->spDef = gUnknown_202F324[1];
}
}
SetMessageArgument_2(gAvailablePokemonNames, info, 0);
if(info->level != oldLevel)
{
gFormatData_202DE30[0] = info->level;
sub_80421C0(target, 0xD3 << 1);
sub_80522F4(pokemon, target, *gUnknown_80F9EC8); // $m0 dropped to Level $d0!
return TRUE;
}
else
{
sub_80522F4(pokemon, target, *gUnknown_80F9EEC); // $m0's level didn't drop!
return FALSE;
}
}

View File

@@ -476,7 +476,7 @@ void RestorePPTarget(Entity * pokemon,Entity * target, s32 param_3)
for(index = 0; index < MAX_MON_MOVES; index++)
{
movePtr = &entityInfo->moves[index];
movePtr = &entityInfo->moves.moves[index];
movePtr1 = movePtr;
if ((movePtr->moveFlags & MOVE_FLAG_EXISTS)) {
PP = movePtr->PP;
@@ -689,7 +689,7 @@ void SetChargeStatusTarget(Entity *pokemon, Entity *target, u8 newStatus, Move *
for(index = 0; index < MAX_MON_MOVES; index++)
{
movePtr = &entityInfo->moves[index];
movePtr = &entityInfo->moves.moves[index];
if(movePtr == move)
{
entityInfo->charging.chargingStatusMoveIndex = index;
@@ -1118,7 +1118,7 @@ void sub_8079F20(Entity * pokemon, Entity * target, u8 param_3, u8 param_4)
for(index = 0; index < MAX_MON_MOVES; index++)
{
move = &entityInfo->moves[index];
move = &entityInfo->moves.moves[index];
if ((move->moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags2 & MOVE_FLAG_EXISTS)) {
bVar8 = TRUE;
moveUnsealed = TRUE;
@@ -1155,7 +1155,7 @@ void sub_807A0CC(Entity * pokemon, Entity * target)
for(index = 0; index < MAX_MON_MOVES; index++)
{
move = &entityInfo->moves[index];
move = &entityInfo->moves.moves[index];
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
move->moveFlags2 &= ~(MOVE_FLAG_EXISTS);
}

View File

@@ -1,182 +1,386 @@
#include "global.h"
#include "code_804267C.h"
#include "constants/ability.h"
#include "code_803E46C.h"
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "constants/ability.h"
#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"
#include "moves.h"
#include "code_806CD90.h"
#include "code_807CD9C.h"
#include "structs/str_dungeon.h"
#include "code_8077274_1.h"
#include "dungeon_ai.h"
#include "dungeon_engine.h"
#include "dungeon_movement.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_map_access.h"
#include "dungeon_util.h"
#include "math.h"
#include "move_effects_target.h"
#include "moves.h"
#include "move_util.h"
extern u8 UseAttack(Entity *);
extern void sub_805E804(void);
void sub_806A2BC(Entity *pokemon, u8 param_2);
extern u8 sub_8044B28(void);
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 *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32);
extern void sub_80694C0(Entity *, s32, s32, u32);
extern void sub_807EC28(bool8);
extern void sub_806A5B8(Entity *);
extern u32 gUnknown_80F5FAC[];
extern u8 *gUnknown_80F9C4C[];
extern u8 *gUnknown_80F9C70[];
extern u8 *gUnknown_80F9C8C[];
extern u8 *gUnknown_80F9CBC[];
extern u32 gUnknown_202EDCC;
extern u8 gAvailablePokemonNames[];
extern u8 *gUnknown_80FCAC0[];
void sub_807E1A0(Entity *pokemon,Entity *target,u8 moveType,s16 param_4,s32 param_5)
extern s16 gUnknown_80F4F90;
extern u8 *gUnknown_80FCA10[];
extern u8 *gUnknown_80F8A0C[];
extern u8 *gUnknown_80FCBCC[];
extern u8 *gUnknown_80FC9E8[];
extern u8 *gUnknown_80FCB14[];
extern u8 *gUnknown_80FCAE8[];
extern u8 *gUnknown_80FC97C[];
extern u8 *gUnknown_80FC9A0[];
extern u8 *gUnknown_80FC584[];
extern u8 *gUnknown_80FD320[];
extern u8 *gUnknown_80FD2F8[];
bool8 ExposeTrap(s32 x, s32 y);
void sub_8040A84();
void sub_8049ED4();
void sub_806A5B8(Entity *);
void sub_80522F4(Entity *, Entity *, u8 *);
void sub_80421C0(Entity *, u32);
u8 sub_8045888(Entity *);
void sub_807EC28(u32);
void sub_80694C0(Entity *, s32, s32, s32);
void sub_807D068(Entity *, Position *);
u8 sub_8044B28(void);
extern void sub_806F370(Entity *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32);
void sub_80421AC(Entity * pokemon, Entity * target);
void sub_807BB78(Entity *pokemon);
extern void sub_803F580(u32);
bool8 sub_808384C(Position *, Position *);
u8 sub_8083660(Position *);
void sub_807CD9C(Entity *pokemon, Entity *target, u32 direction)
{
EntityInfo *targetInfo;
u8 flag;
Move move;
s32 newHP;
s32 param_4_s32;
Tile *tile;
int iVar8;
bool8 flag;
Position sp_0x18;
Move move;
int sp_0x24;
Entity *sp_0x28;
Position32 sp_0x2C;
param_4_s32 = param_4;
if (EntityExists(target)) {
targetInfo = target->info;
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
if (!sub_80571F0(target,&move)) {
if (!targetInfo->isNotTeamMember) {
newHP = targetInfo->HP;
newHP /= 2;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
if (newHP < 1) {
newHP = 1;
}
}
else {
newHP = param_5;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
}
sub_806F370(pokemon,target,newHP,0,&flag,moveType,param_4_s32,0,0,0);
sp_0x24 = 10;
if (IsCurrentFixedRoomBossFight()) {
sub_80522F4(pokemon,target,*gUnknown_80FC9E8); // It couldn't be knocked flying!
return;
}
else
{
if (pokemon == target) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCA10); // {ARG_POKEMON_0} couldn't be knocked flying!
return;
}
SetMessageArgument(gAvailablePokemonNames,target,0);
if (HasAbility(target,ABILITY_SUCTION_CUPS)) {
sub_80522F4(pokemon,target,*gUnknown_80FCBCC); // {ARG_POKEMON_0} is anchored! It can't be knocked flying!
return;
}
else
{
(target->info->action).direction = (direction + 4) & DIRECTION_MASK;
sub_806CDD4(target, 6, (direction + 4) & DIRECTION_MASK);
sub_80421C0(target,0x1a3);
sub_80522F4(pokemon,target,*gUnknown_80F8A0C); // {ARG_POKEMON_0} was blown away!
flag = TRUE;
sp_0x28 = NULL;
for(; sp_0x24 > 0; sp_0x24--)
{
sp_0x18 = target->pos;
sp_0x18.x += gAdjacentTileOffsets[direction].x;
sp_0x18.y += gAdjacentTileOffsets[direction].y;
if ((((sp_0x18.x < 0) || (sp_0x18.y < 0)) || (DUNGEON_MAX_SIZE_X <= sp_0x18.x)) ||
(DUNGEON_MAX_SIZE_Y <= sp_0x18.y)) goto _0807CF20;
sp_0x2C.x = gAdjacentTileOffsets[direction].x << 0xA;
sp_0x2C.y = gAdjacentTileOffsets[direction].y << 0xA;
for(iVar8 = 0; iVar8 < 6; iVar8++)
{
IncreaseEntityPixelPos(target,sp_0x2C.x,sp_0x2C.y);
if (sub_8045888(target) != 0) {
sub_803E46C(0x19);
}
}
tile = GetTile(sp_0x18.x, sp_0x18.y);
if (tile->monster != NULL) {
sp_0x28 = tile->monster;
goto _0807CF26;
}
if (sub_80705F0(target,&sp_0x18)){
flag = (tile->terrainType & 3) == 0 ? FALSE : TRUE;
goto _0807CF20;
}
sub_80694C0(target,sp_0x18.x,sp_0x18.y,1);
}
flag = TRUE;
_0807CF20:
if (!flag) {
_0807CF26:
sub_807D068(target,&target->pos);
sub_806F370(pokemon,target,gUnknown_80F4F90,0,0,0,0x219,0,0,0);
}
if (sub_8044B28()) {
return;
}
if (sp_0x28 != NULL) {
InitPokemonMove(&move,0x163);
if (!sub_80571F0(sp_0x28,&move)) {
TrySendImmobilizeSleepEndMsg(pokemon,sp_0x28);
sub_806F370(pokemon,sp_0x28,gUnknown_80F4F90,0,0,0,0x21a,0,0,0);
}
}
if (sub_8044B28()) {
return;
}
if (!EntityExists(target)) {
return;
}
sub_806A5B8(target);
if (sub_80706A4(target,&target->pos)) {
sub_807D148(target,target,0,0);
}
if (!EntityExists(target)) {
return;
}
sub_806CE68(target,8);
if (target->info->isTeamLeader) {
gDungeon->unk1 = 0;
gDungeon->unk5C0 = -1;
sub_804AC20(&target->pos);
sub_807EC28(FALSE);
}
sub_806A5B8(target);
sub_8075900(target,gDungeon->unk3A08);
}
}
}
}
void sub_807E254(Entity *pokemon,Entity *target)
void sub_807D068(Entity *pokemon, Position *pos)
{
Position pokemonPos;
Position targetPos;
int pixelX;
int posY;
int pixelY;
int posX;
int counter;
int iVar8;
s32 diff;
Position32 local_34;
int incrementX;
int incrementY;
posX = pos->x * 0x1800 + 0xc00;
posY = pos->y * 0x1800 + 0x1000;
diff = (pokemon->pixelPos).x - posX;
if (diff < 0) {
diff = -diff;
}
if (diff < 0xc) {
diff = (pokemon->pixelPos).y - posY;
if (diff < 0) {
diff = -diff;
}
if (diff < 0xc) goto _0807D11E;
}
iVar8 = 0;
pixelX = (pokemon->pixelPos).x;
pixelY = (pokemon->pixelPos).y;
incrementX = (posX - pixelX) / 0xc;
incrementY = (posY - pixelY) / 0xc;
for(counter = 0; counter < 0xC; counter++)
{
pixelX += incrementX;
pixelY += incrementY;
local_34.x = pixelX;
local_34.y = pixelY;
pokemon->unk1C = sin_abs_4096(iVar8) * 0xc;
sub_804535C(pokemon, &local_34);
if (sub_8045888(pokemon)) {
sub_803E46C(0x1a);
}
iVar8 = iVar8 + 0xaa;
}
_0807D11E:
local_34.x = posX;
local_34.y = posY;
pokemon->unk1C = 0;
sub_804535C(pokemon,&local_34);
sub_803E46C(0x1a);
}
void sub_807D148(Entity *pokemon, Entity *target, u32 param_3, Position *pos)
{
EntityInfo *info;
u32 direction;
Position local_2c;
Position pos2;
bool8 flag;
info = target->info;
flag = FALSE;
if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) {
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else if(HasAbility(target, ABILITY_SUCTION_CUPS))
{
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else
{
pokemonPos.x = pokemon->pos.x;
pokemonPos.y = pokemon->pos.y;
targetPos.x = target->pos.x;
targetPos.y = target->pos.y;
nullsub_93(&pokemonPos);
nullsub_93(&targetPos);
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
sub_804535C(pokemon,NULL);
sub_804535C(target,NULL);
if (EntityExists(pokemon)) {
if (pokemon->info->isTeamLeader) {
sub_804AC20(&pokemon->pos);
sub_807EC28(FALSE);
}
sub_806A5B8(pokemon);
sub_8075900(pokemon,gDungeon->unk3A08);
if (HasAbility(target,ABILITY_SUCTION_CUPS)) {
sub_80522F4(pokemon,target,*gUnknown_80FCAE8);
return;
}
if (IsCurrentFixedRoomBossFight()) {
sub_80522F4(pokemon,target,*gUnknown_80FC97C);
return;
}
if (param_3 == 1)
{
pos2 = gDungeon->unkE21C;
if(pos2.x == target->pos.x && pos2.y == target->pos.y) {
sub_80522F4(pokemon,target,*gUnknown_80FC9A0); // It's already on the stairs!
PetrifiedStatusTarget(pokemon,target);
return;
}
}
if (EntityExists(target)) {
if (target->info->isTeamLeader) {
sub_80522F4(pokemon,target,*gUnknown_80FC584); // $m0 warped!
TrySendImmobilizeSleepEndMsg(target,target);
sub_80421AC(pokemon,target);
if (sub_8045888(target)) {
direction = (info->action).direction;
target->unk1C += + 0x800;
while ( target->unk1C < 0xa000) {
if ((gUnknown_202EDCC & 3) == 0) {
direction = (direction + 1) & DIRECTION_MASK;
info->action.direction = direction & DIRECTION_MASK;
sub_806CE68(target,direction);
}
sub_803E46C(0x22);
target->unk1C += 0x800;
}
}
switch(param_3)
{
default:
case 0:
if (!sub_8083660(&local_2c)) {
local_2c = target->pos;
flag = TRUE;
}
break;
case 1:
if (!sub_808384C(&local_2c,&gDungeon->unkE21C)) {
local_2c = target->pos;
flag = TRUE;
}
break;
case 2:
if (!sub_808384C(&local_2c,pos)) {
local_2c = target->pos;
flag = TRUE;
}
break;
case 3:
local_2c = *pos;
break;
}
sub_80694C0(target,local_2c.x,local_2c.y,1);
sub_804535C(target,0);
sub_807BB78(target);
sub_803F580(1);
if (sub_8045888(target)) {
direction = (info->action).direction;
target->unk1C = 0x9c00;
do {
if ((gUnknown_202EDCC & 3) == 0) {
direction = (direction + 1) & DIRECTION_MASK;
info->action.direction = direction & DIRECTION_MASK;
sub_806CE68(target,direction);
}
sub_803E46C(0x22);
target->unk1C -= 0x400;
} while (0 < target->unk1C);
}
target->unk1C = 0;
sub_803E46C(0x22);
if (flag) {
sub_80522F4(pokemon,target,*gUnknown_80FCB14); // But it dropped back at the same spot!
}
if (param_3 == 1) {
PetrifiedStatusTarget(pokemon,target);
}
if (info->isTeamLeader) {
sub_804AC20(&target->pos);
sub_807EC28(FALSE);
}
sub_806A5B8(target);
sub_8075900(target,gDungeon->unk3A08);
gDungeon->unk1 = 0;
gDungeon->unk5C0 = -1;
sub_807EC28(0);
}
}
sub_806A5B8(target);
sub_8075900(target,gDungeon->unk3A08);
}
void sub_807E378(void)
void sub_807D3CC(Entity *param_1)
{
u16 uVar2;
Entity *leader;
u32 room;
u8 flag;
int x;
int y;
s32 range;
RoomData *roomData;
leader = GetLeader();
if (EntityExists(leader)) {
flag = FALSE;
range = gDungeon->unk181e8.visibilityRange;
if (range == 0) {
range = 2;
}
room = GetEntityRoom(param_1);
uVar2 = gDungeon->windTurns;
if ((gDungeon->windTurns < 1) ||
(gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) {
gDungeon->unk67A = 3;
}
if (gDungeon->unk67A == 0) {
if (gDungeon->windTurns < 0xfa) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C4C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0);
gDungeon->unk67A = 1;
if (room == CORRIDOR_ROOM) {
for (y = (param_1->pos).y - range; y <= ((param_1->pos).y + range); y++)
{
for (x = (param_1->pos).x - range; x <= ((param_1->pos).x + range); x++) {
flag |= ExposeTrap(x,y);
}
}
}
}
else if (gDungeon->unk67A == 1) {
if (gDungeon->windTurns < 0x96) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C70);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1);
gDungeon->unk67A = 2;
else {
roomData = &gDungeon->roomData[room];
for (y = roomData->bottomRightCornerY + -1; y <= roomData->topLeftCornerY + 1; y++) {
for (x = roomData->bottomRightCornerX + -1; x <= roomData->topLeftCornerX + 1; x++) {
flag |= ExposeTrap(x,y);
}
}
}
}
else if (gDungeon->unk67A == 2) {
if (gDungeon->windTurns < 0x32) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C8C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2);
gDungeon->unk67A = 3;
}
}
if (flag) {
SendMessage(param_1,*gUnknown_80FD2F8); // All traps were exposed
sub_8040A84();
sub_8049ED4();
}
else if (gDungeon->windTurns < 1) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9CBC);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3);
gDungeon->unk67A = 4;
sub_8068FE0(leader,0x21e,leader);
}
else {
SendMessage(param_1,*gUnknown_80FD320); // There appears to be no hidden traps.
}
}
bool8 ExposeTrap(s32 x,s32 y)
{
Tile *tile;
Entity *trap;
tile = GetTile(x,y);
trap = tile->object;
if (((trap != NULL) && (GetEntityType(trap) == ENTITY_TRAP)) && (!trap->isVisible)) {
trap->isVisible = TRUE;
return TRUE;
}
else {
return FALSE;
}
}
}

182
src/code_807E1A0.c Normal file
View File

@@ -0,0 +1,182 @@
#include "global.h"
#include "code_804267C.h"
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "constants/ability.h"
#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"
#include "moves.h"
#include "structs/str_dungeon.h"
extern u8 UseAttack(Entity *);
extern void sub_805E804(void);
void sub_806A2BC(Entity *pokemon, u8 param_2);
extern u8 sub_8044B28(void);
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 *pokemon, Entity *target, u32, u32, u8 *, u8 moveType, s32, u32, u32, u32);
extern void sub_80694C0(Entity *, s32, s32, u32);
extern void sub_807EC28(bool8);
extern void sub_806A5B8(Entity *);
extern u32 gUnknown_80F5FAC[];
extern u8 *gUnknown_80F9C4C[];
extern u8 *gUnknown_80F9C70[];
extern u8 *gUnknown_80F9C8C[];
extern u8 *gUnknown_80F9CBC[];
extern u8 gAvailablePokemonNames[];
extern u8 *gUnknown_80FCAC0[];
void sub_807E1A0(Entity *pokemon,Entity *target,u8 moveType,s16 param_4,s32 param_5)
{
EntityInfo *targetInfo;
u8 flag;
Move move;
s32 newHP;
s32 param_4_s32;
param_4_s32 = param_4;
if (EntityExists(target)) {
targetInfo = target->info;
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
if (!sub_80571F0(target,&move)) {
if (!targetInfo->isNotTeamMember) {
newHP = targetInfo->HP;
newHP /= 2;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
if (newHP < 1) {
newHP = 1;
}
}
else {
newHP = param_5;
if (MonsterIsType(target, TYPE_FIRE)) {
newHP /= 2;
}
}
sub_806F370(pokemon,target,newHP,0,&flag,moveType,param_4_s32,0,0,0);
}
}
}
void sub_807E254(Entity *pokemon,Entity *target)
{
Position pokemonPos;
Position targetPos;
if (HasAbility(pokemon, ABILITY_SUCTION_CUPS)) {
SetMessageArgument(gAvailablePokemonNames,pokemon,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else if(HasAbility(target, ABILITY_SUCTION_CUPS))
{
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCAC0); // $m0 is anchored! It won't switch places
}
else
{
pokemonPos.x = pokemon->pos.x;
pokemonPos.y = pokemon->pos.y;
targetPos.x = target->pos.x;
targetPos.y = target->pos.y;
nullsub_93(&pokemonPos);
nullsub_93(&targetPos);
sub_80694C0(pokemon,targetPos.x,targetPos.y,1);
sub_80694C0(target,pokemonPos.x,pokemonPos.y,1);
sub_804535C(pokemon,NULL);
sub_804535C(target,NULL);
if (EntityExists(pokemon)) {
if (pokemon->info->isTeamLeader) {
sub_804AC20(&pokemon->pos);
sub_807EC28(FALSE);
}
sub_806A5B8(pokemon);
sub_8075900(pokemon,gDungeon->unk3A08);
}
if (EntityExists(target)) {
if (target->info->isTeamLeader) {
sub_804AC20(&target->pos);
sub_807EC28(FALSE);
}
sub_806A5B8(target);
sub_8075900(target,gDungeon->unk3A08);
}
}
}
void sub_807E378(void)
{
u16 uVar2;
Entity *leader;
leader = GetLeader();
if (EntityExists(leader)) {
uVar2 = gDungeon->windTurns;
if ((gDungeon->windTurns < 1) ||
(gDungeon->windTurns--, ((uVar2 - 1) << 0x10) < 1)) {
gDungeon->unk67A = 3;
}
if (gDungeon->unk67A == 0) {
if (gDungeon->windTurns < 0xfa) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C4C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],0);
gDungeon->unk67A = 1;
}
}
}
else if (gDungeon->unk67A == 1) {
if (gDungeon->windTurns < 0x96) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C70);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],1);
gDungeon->unk67A = 2;
}
}
}
else if (gDungeon->unk67A == 2) {
if (gDungeon->windTurns < 0x32) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9C8C);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],2);
gDungeon->unk67A = 3;
}
}
}
else if (gDungeon->windTurns < 1) {
sub_805E804();
sub_806A2BC(leader,1);
UseAttack(leader);
if (sub_8044B28() == 0) {
SendMessage(leader,*gUnknown_80F9CBC);
sub_80426C8(gUnknown_80F5FAC[gDungeon->tileset],3);
gDungeon->unk67A = 4;
sub_8068FE0(leader,0x21e,leader);
}
}
}
}

View File

@@ -95,18 +95,18 @@ void DecideAttack(Entity *pokemon)
{
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (pokemonInfo->moves[i].moveFlags & MOVE_FLAG_EXISTS &&
MoveMatchesChargingStatus(pokemon, &pokemonInfo->moves[i]) &&
if (pokemonInfo->moves.moves[i].moveFlags & MOVE_FLAG_EXISTS &&
MoveMatchesChargingStatus(pokemon, &pokemonInfo->moves.moves[i]) &&
pokemonInfo->charging.chargingStatusMoveIndex == i)
{
s32 chosenMoveIndex;
SetMonsterActionFields(&pokemonInfo->action, ACTION_USE_MOVE_AI);
chosenMoveIndex = i;
if (i > 0 && pokemonInfo->moves[i].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)
if (i > 0 && pokemonInfo->moves.moves[i].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)
{
while (--chosenMoveIndex > 0)
{
if (!(pokemonInfo->moves[chosenMoveIndex].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
if (!(pokemonInfo->moves.moves[chosenMoveIndex].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
{
break;
}
@@ -122,10 +122,10 @@ void DecideAttack(Entity *pokemon)
numUsableMoves = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
Move *move = &pokemonInfo->moves[i];
if (pokemonInfo->moves[i].moveFlags & MOVE_FLAG_EXISTS)
Move *move = &pokemonInfo->moves.moves[i];
if (pokemonInfo->moves.moves[i].moveFlags & MOVE_FLAG_EXISTS)
{
if (pokemonInfo->moves[i].moveFlags & MOVE_FLAG_ENABLED_FOR_AI)
if (pokemonInfo->moves.moves[i].moveFlags & MOVE_FLAG_ENABLED_FOR_AI)
{
numUsableMoves++;
}
@@ -161,7 +161,7 @@ void DecideAttack(Entity *pokemon)
// This requires a separate check from the 0-PP check used for unlinked moves.
for (i = 0; i < MAX_MON_MOVES; i++)
{
Move *move = &pokemonInfo->moves[i];
Move *move = &pokemonInfo->moves.moves[i];
if (!(move->moveFlags & MOVE_FLAG_EXISTS))
{
break;
@@ -202,7 +202,7 @@ void DecideAttack(Entity *pokemon)
{
Move *move;
aiPossibleMove[i].canBeUsed = FALSE;
move = &pokemonInfo->moves[i];
move = &pokemonInfo->moves.moves[i];
if (move->moveFlags & MOVE_FLAG_EXISTS &&
willNotUnlinkMove[i] &&
CanAIUseMove(pokemon, i, hasPPChecker) &&
@@ -319,17 +319,17 @@ void DecideAttack(Entity *pokemon)
}
else
{
AIConsiderMove(&aiPossibleMove[i], pokemon, &pokemonInfo->moves[i]);
AIConsiderMove(&aiPossibleMove[i], pokemon, &pokemonInfo->moves.moves[i]);
if (aiPossibleMove[i].canBeUsed)
{
s32 chosenMoveIndex;
SetMonsterActionFields(&pokemonInfo->action, ACTION_USE_MOVE_AI);
chosenMoveIndex = i;
if (i > 0 && pokemonInfo->moves[i].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)
if (i > 0 && pokemonInfo->moves.moves[i].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN)
{
while (--chosenMoveIndex > 0)
{
if (!(pokemonInfo->moves[chosenMoveIndex].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
if (!(pokemonInfo->moves.moves[chosenMoveIndex].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
{
break;
}
@@ -1012,7 +1012,7 @@ void HandleUseOrbAction(Entity *pokemon)
if (!entityInfo->isTeamLeader) {
sp28.canBeUsed = r8;
sp28.weight = 10;
AIConsiderMove(&sp28, pokemon, entityInfo->moves);
AIConsiderMove(&sp28, pokemon, entityInfo->moves.moves);
if (sp28.canBeUsed) {
entityInfo->action.direction = sp28.direction & 7;

View File

@@ -79,7 +79,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla
break;
case ITEM_MAX_ELIXIR:
itemWeight = 0;
move = pokemonInfo->moves;
move = pokemonInfo->moves.moves;
move2 = move;
for (i = 0; i < MAX_MON_MOVES; move++, move2++, i++)
{
@@ -427,7 +427,7 @@ u32 GetAIUseItemProbability(Entity *targetPokemon, Item *item, u32 itemTargetFla
itemWeight = 30;
break;
case ITEM_ROLLCALL_ORB:
move = pokemonInfo->moves; // Fixes a regswap.
move = pokemonInfo->moves.moves; // Fixes a regswap.
if (targetOther)
{
itemWeight = 0;

View File

@@ -7,6 +7,7 @@
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "code_8077274_1.h"
#include "code_807CD9C.h"
#include "constants/dungeon_action.h"
#include "constants/dungeon.h"
#include "constants/iq_skill.h"
@@ -24,7 +25,6 @@
#include "dungeon_visibility.h"
#include "pokemon_3.h"
#include "pokemon.h"
#include "code_8077274_1.h"
#include "trap.h"
extern u8 gUnknown_202F221;
@@ -81,7 +81,6 @@ void HandleEatAIAction(Entity *pokemon);
bool8 sub_8044B84(void);
extern void sub_8074094(Entity *);
extern void sub_8071DA4(Entity *);
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
u32 sub_8075818(Entity *entity);
bool8 TargetLeader(Entity *pokemon)
@@ -140,7 +139,7 @@ bool8 sub_8072CF4(Entity *entity)
for(index = 0; index < MAX_MON_MOVES; index++)
{
move = &info->moves[index];
move = &info->moves.moves[index];
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
move->moveFlags2 &= ~(MOVE_FLAG2_UNK4);
}
@@ -335,8 +334,8 @@ bool8 sub_8072CF4(Entity *entity)
for(index = 0; index < MAX_MON_MOVES; index++)
{
move = &info->moves[index];
if ((info->moves[index].moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags & MOVE_FLAG_LAST_USED)) {
move = &info->moves.moves[index];
if ((info->moves.moves[index].moveFlags & MOVE_FLAG_EXISTS) && (move->moveFlags & MOVE_FLAG_LAST_USED)) {
move->PP = 0;
bVar4 = TRUE;
}

View File

@@ -79,7 +79,7 @@ bool8 sub_80717A4(Entity *pokemon, u16 moveID)
Move *pokeMove2; // some reason uses another pointer to same struct
for(index = 0, pokeMove = entityInfo->moves, pokeMove2 = pokeMove; index < MAX_MON_MOVES; pokeMove++, pokeMove2++, index++)
for(index = 0, pokeMove = entityInfo->moves.moves, pokeMove2 = pokeMove; index < MAX_MON_MOVES; pokeMove++, pokeMove2++, index++)
{
if (((pokeMove->moveFlags & MOVE_FLAG_EXISTS)) && (entityInfo->isTeamLeader || ((pokeMove->moveFlags & MOVE_FLAG_ENABLED_FOR_AI))))
if((sub_805744C(pokemon, pokeMove2, TRUE) != 0) && (pokeMove->PP != 0))

View File

@@ -27,7 +27,7 @@ static void UpdateFelicityBankDialogue(void);
static void UpdateFelicityBankState(u32 newState);
static void sub_801645C(void);
static void sub_80169BC(void);
static void HandleFelicityBankShopMenu(void);
static void sub_8016B00(void);
static void sub_8016B24(void);
static void sub_8016B48(u8 action);
@@ -39,6 +39,18 @@ enum MenuActions {
INFO_ACTION
};
enum FelicityBankStates {
FELICITY_BANK_INIT,
FELICITY_BANK_INFO = 3,
FELICITY_BANK_EXIT = 6,
FELICITY_BANK_STORE,
FELICITY_BANK_STORE_HOW_MUCH,
FELICITY_BANK_STORE_RECEIPT,
FELICITY_BANK_TAKE,
FELICITY_BANK_TAKE_HOW_MUCH,
FELICITY_BANK_TAKE_DEPOSIT,
};
bool8 CreateFelicityBank(s32 mode)
{
u8 *monName;
@@ -67,7 +79,7 @@ bool8 CreateFelicityBank(s32 mode)
sFelicityBankWork->unkA2 = 0;
sFelicityBankWork->unk9C = 2;
sFelicityBankWork->unk9E = 8;
UpdateFelicityBankState(0);
UpdateFelicityBankState(FELICITY_BANK_INIT);
return TRUE;
}
@@ -78,24 +90,24 @@ u32 FelicityBankCallback(void)
sub_8016B24();
break;
case 2:
sub_80169BC();
HandleFelicityBankShopMenu();
break;
case 8:
case FELICITY_BANK_STORE_HOW_MUCH:
Felicity_DepositMoney();
break;
case 11:
case FELICITY_BANK_TAKE_HOW_MUCH:
Felicity_WithdrawMoney();
break;
case 6:
case FELICITY_BANK_EXIT:
return 3;
case 0:
case 3:
case FELICITY_BANK_INIT:
case FELICITY_BANK_INFO:
case 4:
case 5:
case 7:
case 9:
case 10:
case 12:
case FELICITY_BANK_STORE:
case FELICITY_BANK_STORE_RECEIPT:
case FELICITY_BANK_TAKE:
case FELICITY_BANK_TAKE_DEPOSIT:
default:
sub_8016B00();
break;
@@ -134,8 +146,8 @@ static void sub_801645C(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(sFelicityBankWork->unkA8, TRUE, FALSE);
break;
case 8:
case 11:
case FELICITY_BANK_STORE_HOW_MUCH:
case FELICITY_BANK_TAKE_HOW_MUCH:
sFelicityBankWork->unkA8[0].unk0 = 0x80;
sFelicityBankWork->unkA8[1].unk0 = 0x80;
sFelicityBankWork->unkA8[3] = sUnknown_80DB6F4;
@@ -156,7 +168,7 @@ static void sub_801645C(void)
static void UpdateFelicityBankDialogue(void)
{
switch (sFelicityBankWork->currState) {
case 0:
case FELICITY_BANK_INIT:
sFelicityBankWork->fallbackState = 1;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_WELCOME], 0, sFelicityBankWork->unkA4, 0x10D);
break;
@@ -172,12 +184,12 @@ static void UpdateFelicityBankDialogue(void)
sFelicityBankWork->unk14, sFelicityBankWork->unk54, 4, 0, sFelicityBankWork->unkA4, 0xC);
}
break;
case 3:
case FELICITY_BANK_INFO:
sFelicityBankWork->fallbackState = 1;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_HOW_IT_WORKS], 0, sFelicityBankWork->unkA4, 0x10D);
break;
case 4:
sFelicityBankWork->fallbackState = 6;
sFelicityBankWork->fallbackState = FELICITY_BANK_EXIT;
if (gTeamInventoryRef->teamSavings == 0)
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_BYE__NO_MONEY], 0, sFelicityBankWork->unkA4, 0x10D);
else {
@@ -189,7 +201,7 @@ static void UpdateFelicityBankDialogue(void)
sFelicityBankWork->fallbackState = 1;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_VERY_WELL], 0, sFelicityBankWork->unkA4, 0x10D);
break;
case 7:
case FELICITY_BANK_STORE:
if (gTeamInventoryRef->teamMoney == 0) {
sFelicityBankWork->fallbackState = 1;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_DEPOSIT__NO_MONEY], 0, sFelicityBankWork->unkA4, 0x10D);
@@ -199,11 +211,11 @@ static void UpdateFelicityBankDialogue(void)
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_DEPOSIT__BANK_FULL], 0, sFelicityBankWork->unkA4, 0x10D);
}
else {
sFelicityBankWork->fallbackState = 8;
sFelicityBankWork->fallbackState = FELICITY_BANK_STORE_HOW_MUCH;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_DEPOSIT__HOW_MUCH], 0, sFelicityBankWork->unkA4, 0x10D);
}
break;
case 8:
case FELICITY_BANK_STORE_HOW_MUCH:
sFelicityBankWork->unk64.unkC = MAX_TEAM_SAVINGS - gTeamInventoryRef->teamSavings;
if (sFelicityBankWork->unk64.unkC > gTeamInventoryRef->teamMoney)
sFelicityBankWork->unk64.unkC = gTeamInventoryRef->teamMoney;
@@ -218,12 +230,12 @@ static void UpdateFelicityBankDialogue(void)
sub_8016B48(FELICITY_BANK_ACTION_DEPOSIT);
CreateFelicityMoneySavingsHeader(3);
break;
case 9:
case FELICITY_BANK_STORE_RECEIPT:
sFelicityBankWork->fallbackState = 1;
gFormatData_202DE30 = sFelicityBankWork->chosenAmount;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_DEPOSIT__RECEIPT], 0, sFelicityBankWork->unkA4, 0x10D);
break;
case 10:
case FELICITY_BANK_TAKE:
if (gTeamInventoryRef->teamMoney >= MAX_TEAM_MONEY) {
sFelicityBankWork->fallbackState = 1;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_WITHDRAW__WALLET_FULL], 0, sFelicityBankWork->unkA4, 0x10D);
@@ -233,12 +245,12 @@ static void UpdateFelicityBankDialogue(void)
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_WITHDRAW__NO_MONEY], 0, sFelicityBankWork->unkA4, 0x10D);
}
else {
sFelicityBankWork->fallbackState = 11;
sFelicityBankWork->fallbackState = FELICITY_BANK_TAKE_HOW_MUCH;
gFormatData_202DE30 = gTeamInventoryRef->teamSavings;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_WITHDRAW__HOW_MUCH], 0, sFelicityBankWork->unkA4, 0x10D);
}
break;
case 11:
case FELICITY_BANK_TAKE_HOW_MUCH:
sFelicityBankWork->unk64.unkC = MAX_TEAM_MONEY - gTeamInventoryRef->teamMoney;
if (sFelicityBankWork->unk64.unkC > gTeamInventoryRef->teamSavings)
sFelicityBankWork->unk64.unkC = gTeamInventoryRef->teamSavings;
@@ -256,7 +268,7 @@ static void UpdateFelicityBankDialogue(void)
case 2:
CreateFelicityMoneySavingsHeader(3);
break;
case 12:
case FELICITY_BANK_TAKE_DEPOSIT:
sFelicityBankWork->fallbackState = 1;
gFormatData_202DE30 = sFelicityBankWork->chosenAmount;
xxx_info_box_80141B4(gCommonFelicity[sFelicityBankWork->mode][FEL_DLG_WITHDRAW__RECEIPT], 0, sFelicityBankWork->unkA4, 0x10D);
@@ -304,7 +316,7 @@ static void CreateFelicityBankShopMenu(void)
}
}
static void sub_80169BC(void)
static void HandleFelicityBankShopMenu(void)
{
s32 menuAction;
@@ -314,13 +326,13 @@ static void sub_80169BC(void)
sFelicityBankWork->menuAction = menuAction;
switch (menuAction) {
case STORE_ACTION:
UpdateFelicityBankState(7);
UpdateFelicityBankState(FELICITY_BANK_STORE);
break;
case TAKE_ACTION:
UpdateFelicityBankState(10);
UpdateFelicityBankState(FELICITY_BANK_TAKE);
break;
case INFO_ACTION:
UpdateFelicityBankState(3);
UpdateFelicityBankState(FELICITY_BANK_INFO);
break;
case CANCEL_ACTION:
UpdateFelicityBankState(4);
@@ -339,7 +351,7 @@ static void Felicity_DepositMoney(void)
gTeamInventoryRef->teamSavings += sFelicityBankWork->chosenAmount;
gTeamInventoryRef->teamMoney -= sFelicityBankWork->chosenAmount;
PlaySound(332);
UpdateFelicityBankState(9);
UpdateFelicityBankState(FELICITY_BANK_STORE_RECEIPT);
break;
case 2:
UpdateFelicityBankState(5);
@@ -360,7 +372,7 @@ static void Felicity_WithdrawMoney(void)
gTeamInventoryRef->teamMoney += sFelicityBankWork->chosenAmount;
gTeamInventoryRef->teamSavings -= sFelicityBankWork->chosenAmount;
PlaySound(332);
UpdateFelicityBankState(12);
UpdateFelicityBankState(FELICITY_BANK_TAKE_DEPOSIT);
break;
case 2:
UpdateFelicityBankState(5);

View File

@@ -25,6 +25,8 @@
#include "text_util.h"
#include "text1.h"
#include "text2.h"
#include "wonder_mail_4.h"
#include "wonder_mail_5.h"
extern void SetFriendRescueMenuState(u32);
@@ -298,14 +300,6 @@ void sub_80353BC(void);
void sub_8035424(void);
void sub_8035430(void);
extern u32 sub_8030DA0(void);
extern void sub_8030DE4(void);
extern void sub_803092C(void);
extern u32 sub_8030768(u32);
extern void sub_803084C(void);
extern void sub_8030D40(u8, u32);
extern void sub_8030810(u32);
extern u8 sub_80307EC(void);
extern u32 sub_8031DCC(void);
extern void sub_8031E00(void);
extern u32 sub_8039068(u32, u8 *passwordBuffer, unkStruct_203B480 *r0);
@@ -313,9 +307,6 @@ extern u32 sub_8039068(u32, u8 *passwordBuffer, unkStruct_203B480 *r0);
extern void sub_8031E10(void);
extern u8 sub_800D588(void);
extern u32 sub_8023CE8(void);
extern u32 sub_80306A8(u32 wonderMailType, u32, UnkTextStruct2_sub *, u32);
extern u32 sub_8030894(void);
extern void sub_803092C(void);
extern bool8 sub_8031D70(u32 mailIndex, s32);
extern s32 sub_8037B28(u32);
@@ -834,7 +825,7 @@ void sub_8032828(void)
if (sub_8030894() == 0) {
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sub_80306A8(1, 0, NULL, 6);
sub_80306A8(WONDER_MAIL_TYPE_SOS, 0, NULL, 6);
}
break;
case 0x35:
@@ -931,7 +922,7 @@ void sub_8032828(void)
if (sub_8030894() == 0) {
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sub_80306A8(4, 0, NULL, 6);
sub_80306A8(WONDER_MAIL_TYPE_AOK, 0, NULL, 6);
}
break;
case 0x20:
@@ -1038,7 +1029,7 @@ void sub_8032828(void)
break;
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
sub_80306A8(1, 0, NULL, 6);
sub_80306A8(WONDER_MAIL_TYPE_SOS, 0, NULL, 6);
break;
case 0x15:
sub_8014248(&gUnknown_80E2F78[0], 0, 6, gUnknown_80E2290, NULL, 4, 0, NULL, 0x101);

View File

@@ -28,11 +28,11 @@ static void UpdateKangaskhanStorageState(u32);
static void sub_8016E80(void);
static void sub_8016FF8(void);
static void sub_8017598(void);
static void sub_80175FC(void);
static void BuildKangaskhanMainMenu(void);
static void sub_80176B8(void);
static void sub_8017758(void);
static void sub_80177F8(void);
static void sub_8017828(void);
static void HandleKangaskhanMainMenu(void);
static void sub_80178D0(void);
static void sub_8017928(void);
static void sub_80179A8(void);
@@ -84,7 +84,7 @@ u32 KangaskhanStorageCallback(void)
switch (gKangaskhanStorageWork->currState) {
case KANGASKHAN_STORAGE_INIT:
case KANGASKHAN_STORAGE_MAIN_MENU:
sub_8017828();
HandleKangaskhanMainMenu();
break;
case 13:
case 14:
@@ -188,13 +188,13 @@ static void sub_8016FF8(void)
{
switch (gKangaskhanStorageWork->currState) {
case KANGASKHAN_STORAGE_INIT:
sub_80175FC();
BuildKangaskhanMainMenu();
gKangaskhanStorageWork->unkE4 = TRUE;
sub_8014248(gCommonKangStorage[gKangaskhanStorageWork->mode][KANG_DLG_WELCOME], 0, gKangaskhanStorageWork->menuAction1, gKangaskhanStorageWork->unk24,
gKangaskhanStorageWork->unk4C, 4, 0, gKangaskhanStorageWork->unkE8, 12);
break;
case KANGASKHAN_STORAGE_MAIN_MENU:
sub_80175FC();
BuildKangaskhanMainMenu();
gKangaskhanStorageWork->unkE4 = FALSE;
sub_8014248(gCommonKangStorage[gKangaskhanStorageWork->mode][KANG_DLG_ANYTHING_ELSE], 0, gKangaskhanStorageWork->menuAction1, gKangaskhanStorageWork->unk24,
gKangaskhanStorageWork->unk4C, 4, 0, gKangaskhanStorageWork->unkE8, 12);
@@ -369,7 +369,7 @@ static void sub_8017598(void)
sub_8012EA4(&gKangaskhanStorageWork->unk58, 0);
}
static void sub_80175FC(void)
static void BuildKangaskhanMainMenu(void)
{
s32 index;
s32 loopMax;
@@ -377,23 +377,23 @@ static void sub_80175FC(void)
MemoryFill16(gKangaskhanStorageWork->unk4C,0, sizeof(gKangaskhanStorageWork->unk4C));
loopMax = 0;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonStore[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 2;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_STORE;
loopMax += 1;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonTake[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 3;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_TAKE;
loopMax += 1;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonInfo[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 6;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_INFO;
loopMax += 1;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonCancel[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 1;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_CANCEL;
loopMax += 1;
gKangaskhanStorageWork->unk24[loopMax].text = NULL;
gKangaskhanStorageWork->unk24[loopMax].menuAction = 1;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_CANCEL;
for (index = 0; index < loopMax; index++) {
if (gKangaskhanStorageWork->unk4C[index] == 0) {
@@ -418,15 +418,15 @@ static void sub_80176B8(void)
MemoryFill16(gKangaskhanStorageWork->unk4C, 0, sizeof(gKangaskhanStorageWork->unk4C));
loopMax = 0;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonStore[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 2;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_STORE;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonInfo[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 6;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_INFO;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = NULL;
gKangaskhanStorageWork->unk24[loopMax].menuAction = 1;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_CANCEL;
for (index = 0; index < loopMax; index++) {
if (gKangaskhanStorageWork->unk4C[index] == 0) {
@@ -451,15 +451,15 @@ static void sub_8017758(void)
MemoryFill16(gKangaskhanStorageWork->unk4C, 0, sizeof(gKangaskhanStorageWork->unk4C));
loopMax = 0;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonTake[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 3;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_TAKE;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonInfo[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 6;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_INFO;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = NULL;
gKangaskhanStorageWork->unk24[loopMax].menuAction = 1;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_CANCEL;
for (index = 0; index < loopMax; index++) {
if (gKangaskhanStorageWork->unk4C[index] == 0) {
@@ -482,29 +482,29 @@ static void sub_80177F8(void)
loopMax = 0;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonYes[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 4;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_YES;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = gCommonNo[0];
gKangaskhanStorageWork->unk24[loopMax].menuAction = 5;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_NO;
loopMax++;
gKangaskhanStorageWork->unk24[loopMax].text = NULL;
gKangaskhanStorageWork->unk24[loopMax].menuAction = 1;
gKangaskhanStorageWork->unk24[loopMax].menuAction = MENU_CANCEL;
}
static void sub_8017828(void)
static void HandleKangaskhanMainMenu(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction))
return;
if (menuAction != 1)
if (menuAction != MENU_CANCEL)
gKangaskhanStorageWork->menuAction1 = menuAction;
switch (menuAction) {
case 2:
case MENU_STORE:
if (GetNumberOfFilledInventorySlots() == 0)
UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_NO_INV_ITEMS);
else if (sub_801CF50(0))
@@ -512,7 +512,7 @@ static void sub_8017828(void)
else
UpdateKangaskhanStorageState(11);
break;
case 3:
case MENU_TAKE:
if (sub_801CF14(1))
UpdateKangaskhanStorageState(7);
else if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
@@ -520,10 +520,10 @@ static void sub_8017828(void)
else
UpdateKangaskhanStorageState(20);
break;
case 6:
case MENU_INFO:
UpdateKangaskhanStorageState(2);
break;
case 1:
case MENU_CANCEL:
UpdateKangaskhanStorageState(3);
break;
}
@@ -537,14 +537,14 @@ static void sub_80178D0(void)
return;
switch (menuAction) {
case 4:
case MENU_YES:
MoveToStorage(&gKangaskhanStorageWork->storedItem);
ShiftItemsDownFrom(gKangaskhanStorageWork->itemIndex);
FillInventoryGaps();
UpdateKangaskhanStorageState(19);
break;
case 1:
case 5:
case MENU_CANCEL:
case MENU_NO:
UpdateKangaskhanStorageState(14);
break;
}
@@ -559,15 +559,15 @@ static void sub_8017928(void)
return;
switch (menuAction) {
case 4:
case MENU_YES:
gTeamInventoryRef->teamStorage[gKangaskhanStorageWork->storedItem.id] -= gKangaskhanStorageWork->storedItem.quantity;
item.id = gKangaskhanStorageWork->storedItem.id;
item.quantity = gKangaskhanStorageWork->storedItem.quantity;
AddHeldItemToInventory(&item);
UpdateKangaskhanStorageState(29);
break;
case 1:
case 5:
case MENU_CANCEL:
case MENU_NO:
UpdateKangaskhanStorageState(23);
break;
}
@@ -582,7 +582,7 @@ static void sub_80179A8(void)
return;
switch (menuAction) {
case 4:
case MENU_YES:
for (index = 0; index < INVENTORY_SIZE; index++) {
if (sub_801AED0(index)) {
MoveToStorage(&gTeamInventoryRef->teamItems[index]);
@@ -595,8 +595,8 @@ static void sub_80179A8(void)
sub_801AE84();
UpdateKangaskhanStorageState(19);
break;
case 1:
case 5:
case MENU_CANCEL:
case MENU_NO:
UpdateKangaskhanStorageState(14);
break;
}
@@ -612,7 +612,7 @@ static void sub_8017A1C(void)
return;
switch (menuAction) {
case 4:
case MENU_YES:
for (itemID = 0; itemID < NUMBER_OF_ITEM_IDS; itemID++) {
if (sub_801CFE0(itemID)) {
item.id = itemID;
@@ -633,8 +633,8 @@ static void sub_8017A1C(void)
sub_801CF94();
UpdateKangaskhanStorageState(29);
break;
case 1:
case 5:
case MENU_CANCEL:
case MENU_NO:
UpdateKangaskhanStorageState(23);
break;
}
@@ -725,12 +725,12 @@ static void sub_8017C7C(void)
sub_801A6E8(FALSE);
if (sub_8012FD8(&gKangaskhanStorageWork->unk58) == 0) {
sub_8013114(&gKangaskhanStorageWork->unk58, &menuAction);
if (menuAction != 1)
if (menuAction != MENU_CANCEL)
gKangaskhanStorageWork->menuAction2 = menuAction;
}
switch (menuAction) {
case 2:
case MENU_STORE:
sub_8099690(0);
if (!IsNotMoneyOrUsedTMItem(gKangaskhanStorageWork->storedItem.id))
UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_IS_MONEY_USED_TM);
@@ -739,11 +739,11 @@ static void sub_8017C7C(void)
else
UpdateKangaskhanStorageState(17);
break;
case 6:
case MENU_INFO:
sub_8099690(0);
UpdateKangaskhanStorageState(16);
break;
case 1:
case MENU_CANCEL:
UpdateKangaskhanStorageState(14);
break;
}
@@ -757,12 +757,12 @@ static void sub_8017D24(void)
sub_801CA08(FALSE);
if (sub_8012FD8(&gKangaskhanStorageWork->unk58) == 0) {
sub_8013114(&gKangaskhanStorageWork->unk58, &menuAction);
if (menuAction != 1)
if (menuAction != MENU_CANCEL)
gKangaskhanStorageWork->menuAction3 = menuAction;
}
switch (menuAction) {
case 3:
case MENU_TAKE:
if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) {
sub_801CBB8();
UpdateKangaskhanStorageState(KANGASKHAN_STORAGE_TOO_MANY_ITEMS);
@@ -772,10 +772,10 @@ static void sub_8017D24(void)
else
UpdateKangaskhanStorageState(27);
break;
case 6:
case MENU_INFO:
UpdateKangaskhanStorageState(26);
break;
case 1:
case MENU_CANCEL:
UpdateKangaskhanStorageState(23);
break;
}
@@ -817,4 +817,4 @@ static void AdvanceToKangaskhanStorageFallbackState(void)
if (!sub_80144A4(&temp))
UpdateKangaskhanStorageState(gKangaskhanStorageWork->fallbackState);
}
}

View File

@@ -17,19 +17,19 @@ static EWRAM_DATA_2 unkStruct_203B20C *sUnknown_203B20C = {0};
#include "data/kangaskhan_storage2.h"
static void sub_8017F10(u32);
static void UpdateKangaskhanStorage2State(u32);
static void sub_8017F28(void);
static void sub_8018100(void);
static void sub_8018280(void);
static void sub_80182E4(void);
static void sub_801841C(void);
static void sub_80184D4(void);
static void sub_8018588(void);
static void BuildKangaskhanStorage2MainMenu(void);
static void BuildKangaskhanStorage2StoreMenu(void);
static void BuildKangaskhanStorage2TakeMenu(void);
static void HandleKangaskhanStorage2MainMenu(void);
static void sub_8018620(void);
static void sub_80186F8(void);
static void sub_8018854(void);
static void sub_8018904(void);
static void sub_80189C8(void);
static void HandleKangaskhanStorage2StoreMenu(void);
static void HandleKangaskhanStorage2TakeMenu(void);
static void sub_8018AC8(void);
static void sub_8018AE4(void);
@@ -48,25 +48,25 @@ bool8 sub_8017E1C(void)
sUnknown_203B20C->menuAction1 = 0;
sUnknown_203B20C->menuAction2 = 0;
sUnknown_203B20C->menuAction3 = 0;
sub_8017F10(0);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_INIT);
return TRUE;
}
u32 sub_8017E54(void)
{
switch (sUnknown_203B20C->state) {
case 0:
sub_8017F10(1);
case KANGASKHAN_STORAGE_2_INIT:
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
break;
case 1:
sub_8018588();
case KANGASKHAN_STORAGE_2_MAIN:
HandleKangaskhanStorage2MainMenu();
break;
case 4:
case 5:
sub_8018620();
break;
case 6:
sub_8018904();
HandleKangaskhanStorage2StoreMenu();
break;
case 7:
sub_8018AC8();
@@ -79,12 +79,12 @@ u32 sub_8017E54(void)
sub_8018854();
break;
case 13:
sub_80189C8();
HandleKangaskhanStorage2TakeMenu();
break;
case 14:
sub_8018AE4();
break;
case 3:
case KANGASKHAN_STORAGE_2_EXIT:
return 3;
}
return 0;
@@ -98,7 +98,7 @@ void sub_8017EF4(void)
}
}
static void sub_8017F10(u32 newState)
static void UpdateKangaskhanStorage2State(u32 newState)
{
sUnknown_203B20C->state = newState;
sub_8017F28();
@@ -112,11 +112,11 @@ static void sub_8017F28(void)
RestoreUnkTextStruct_8006518(sUnknown_203B20C->unkF0);
switch (sUnknown_203B20C->state) {
case 1:
case KANGASKHAN_STORAGE_2_MAIN:
sUnknown_203B20C->unkF0[0] = sUnknown_80DB7B8;
sUnknown_203B20C->unkF0[1] = sUnknown_80DB7B8;
sUnknown_203B20C->unkF0[0] = sUnknown_80DB7B8;
sub_80182E4();
BuildKangaskhanStorage2MainMenu();
sUnknown_203B20C->unkF0[2] = sUnknown_80DB7D0;
sub_8012CAC(&sUnknown_203B20C->unkF0[2], sUnknown_203B20C->unk20);
break;
@@ -142,7 +142,7 @@ static void sub_8017F28(void)
sUnknown_203B20C->unkF0[2] = sUnknown_80DB7E8;
break;
default:
case 0:
case KANGASKHAN_STORAGE_2_INIT:
for (index = 0; index < 4; index++)
sUnknown_203B20C->unkF0[index] = sUnknown_80DB7B8;
break;
@@ -154,7 +154,7 @@ static void sub_8017F28(void)
static void sub_8018100(void)
{
switch (sUnknown_203B20C->state) {
case 1:
case KANGASKHAN_STORAGE_2_MAIN:
sub_8012D60(&sUnknown_203B20C->unk70, sUnknown_203B20C->unk20, 0, sUnknown_203B20C->unk60, sUnknown_203B20C->menuAction1, 2);
break;
case 4:
@@ -165,7 +165,7 @@ static void sub_8018100(void)
break;
case 6:
sub_801A9E0();
sub_801841C();
BuildKangaskhanStorage2StoreMenu();
sub_8012D60(&sUnknown_203B20C->unk70, sUnknown_203B20C->unk20, 0, sUnknown_203B20C->unk60, sUnknown_203B20C->menuAction2, 2);
break;
case 7:
@@ -199,13 +199,13 @@ static void sub_8018100(void)
case 13:
sub_801CCD8();
sub_801AD34(0);
sub_80184D4();
BuildKangaskhanStorage2TakeMenu();
sub_8012D60(&sUnknown_203B20C->unk70, sUnknown_203B20C->unk20, 0, sUnknown_203B20C->unk60, sUnknown_203B20C->menuAction3, 2);
break;
case 14:
sub_801B3C0(&sUnknown_203B20C->item);
break;
case 0:
case KANGASKHAN_STORAGE_2_INIT:
default:
break;
}
@@ -223,7 +223,7 @@ static void sub_8018280(void)
sub_8012EA4(&sUnknown_203B20C->unk70, 0);
}
static void sub_80182E4(void)
static void BuildKangaskhanStorage2MainMenu(void)
{
int index;
s32 loopMax;
@@ -266,7 +266,7 @@ static void sub_80182E4(void)
}
}
static void sub_801841C(void)
static void BuildKangaskhanStorage2StoreMenu(void)
{
s32 index;
s32 loopMax;
@@ -301,7 +301,7 @@ static void sub_801841C(void)
}
}
static void sub_80184D4(void)
static void BuildKangaskhanStorage2TakeMenu(void)
{
s32 index;
s32 loopMax;
@@ -337,7 +337,7 @@ static void sub_80184D4(void)
}
}
static void sub_8018588(void)
static void HandleKangaskhanStorage2MainMenu(void)
{
s32 menuAction;
menuAction = 0;
@@ -351,7 +351,7 @@ static void sub_8018588(void)
switch (menuAction) {
case STORE_ACTION:
if (GetNumberOfFilledInventorySlots() != 0 && !sub_801CF50(0))
sub_8017F10(4);
UpdateKangaskhanStorage2State(4);
else
sub_8012EA4(&sUnknown_203B20C->unk70, 1);
break;
@@ -359,10 +359,10 @@ static void sub_8018588(void)
if (sub_801CF14(1))
sub_8012EA4(&sUnknown_203B20C->unk70, 1);
else
sub_8017F10(10);
UpdateKangaskhanStorage2State(10);
break;
case CANCEL_ACTION:
sub_8017F10(3);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_EXIT);
break;
}
}
@@ -387,25 +387,25 @@ static void sub_8018620(void)
if (GetNumberOfFilledInventorySlots() == 0) {
sub_801A928();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
}
else
sub_8017F10(5);
UpdateKangaskhanStorage2State(5);
}
else {
sUnknown_203B20C->itemIndex = sub_801A8AC();
sUnknown_203B20C->item = gTeamInventoryRef->teamItems[sUnknown_203B20C->itemIndex];
sub_8017F10(6);
UpdateKangaskhanStorage2State(6);
}
break;
case 4:
sUnknown_203B20C->itemIndex = sub_801A8AC();
sUnknown_203B20C->item = gTeamInventoryRef->teamItems[sUnknown_203B20C->itemIndex];
sub_8017F10(7);
UpdateKangaskhanStorage2State(7);
break;
case 2:
sub_801A928();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
break;
}
}
@@ -440,28 +440,28 @@ static void sub_80186F8(void)
sub_801CF94();
if (!sub_801CF14(1) && GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
else {
sub_801CBB8();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
}
}
else {
sUnknown_203B20C->id = sub_801CB24();
xxx_init_itemslot_8090A8C(&sUnknown_203B20C->item, sUnknown_203B20C->id, 0);
sUnknown_203B20C->item.quantity = 1;
sub_8017F10(13);
UpdateKangaskhanStorage2State(13);
}
break;
case 4:
sUnknown_203B20C->id = sub_801CB24();
xxx_init_itemslot_8090A8C(&sUnknown_203B20C->item, sUnknown_203B20C->id, 0);
sUnknown_203B20C->item.quantity = 1;
sub_8017F10(14);
UpdateKangaskhanStorage2State(14);
break;
case 2:
sub_801CBB8();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
break;
case 1:
sub_801AD34(0);
@@ -488,16 +488,16 @@ static void sub_8018854(void)
if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE) {
error:
sub_801CBB8();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
}
else
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
}
else
goto error;
break;
case 2:
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
break;
case 1:
sub_8018280();
@@ -507,7 +507,7 @@ static void sub_8018854(void)
}
}
static void sub_8018904(void)
static void HandleKangaskhanStorage2StoreMenu(void)
{
s32 menuAction;
@@ -534,10 +534,10 @@ static void sub_8018904(void)
if (GetNumberOfFilledInventorySlots() == 0) {
sub_801A928();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
}
else
sub_8017F10(5);
UpdateKangaskhanStorage2State(5);
}
}
else
@@ -545,15 +545,15 @@ static void sub_8018904(void)
break;
case INFO_ACTION:
sub_8099690(0);
sub_8017F10(7);
UpdateKangaskhanStorage2State(7);
break;
case CANCEL_ACTION:
sub_8017F10(5);
UpdateKangaskhanStorage2State(5);
break;
}
}
static void sub_80189C8(void)
static void HandleKangaskhanStorage2TakeMenu(void)
{
BulkItem item;
s32 menuAction;
@@ -572,7 +572,7 @@ static void sub_80189C8(void)
if (GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE)
sub_8012EA4(&sUnknown_203B20C->unk70, 1);
else if (IsThrowableItem(sUnknown_203B20C->item.id))
sub_8017F10(12);
UpdateKangaskhanStorage2State(12);
else {
gTeamInventoryRef->teamStorage[sUnknown_203B20C->item.id] -= sUnknown_203B20C->item.quantity;
item.id = sUnknown_203B20C->item.id;
@@ -584,20 +584,20 @@ static void sub_80189C8(void)
{
error:
sub_801CBB8();
sub_8017F10(1);
UpdateKangaskhanStorage2State(KANGASKHAN_STORAGE_2_MAIN);
}
else
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
}
else
goto error;
}
break;
case INFO_ACTION:
sub_8017F10(14);
UpdateKangaskhanStorage2State(14);
break;
case CANCEL_ACTION:
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
break;
}
}
@@ -608,7 +608,7 @@ static void sub_8018AC8(void)
case 2:
case 3:
sub_801B450();
sub_8017F10(5);
UpdateKangaskhanStorage2State(5);
break;
case 0:
case 1:
@@ -623,7 +623,7 @@ static void sub_8018AE4(void)
case 2:
case 3:
sub_801B450();
sub_8017F10(11);
UpdateKangaskhanStorage2State(11);
break;
case 0:
case 1:

View File

@@ -32,22 +32,22 @@ static void SetKecleonBrosState(u32);
static void UpdateKecleonStoreDialogue(void);
static void sub_8018D30(void);
static void sub_80194F8(void);
static void sub_80195C0(void);
static void sub_8019660(void);
static void sub_8019700(void);
static void sub_8019730(void);
static void sub_8019850(void);
static void sub_80198E8(void);
static void sub_8019944(void);
static void BuildKecleonBrosMainMenu(void);
static void BuildKecleonBrosBuyItemMenu(void);
static void BuildKecleonBrosSellItemMenu(void);
static void BuildKecleonBrosYesNoMenu(void);
static void HandleKecleonBrosMainMenu(void);
static void HandleKecleonBrosBuyItemYesNoMenu(void);
static void HandleKecleonBrosSellItemYesNoMenu(void);
static void HandleKecleonBrosSellAllItemsMenu(void);
static void sub_80199CC(void);
static void sub_8019B08(void);
static void sub_8019BBC(void);
static void sub_8019C78(void);
static void HandleKecleonBrosBuyItemMenu(void);
static void HandleKecleonBrosSellItemMenu(void);
static void sub_8019D30(void);
static void sub_8019D4C(void);
static void sub_8019D68(void);
static void sub_8019DAC(void);
static void ProceedToKecleonBros1FallbackState(void);
static void KecleonCalcSellPriceForAllItems(void);
static void sub_8019E04(bool32);
enum MenuActions {
@@ -125,41 +125,41 @@ u32 KecleonBrosCallback(void)
switch (sKecleonBrosWork1->currState) {
case KECLEON_STORE_INIT:
case KECLEON_STORE_MAIN_MENU:
sub_8019730();
HandleKecleonBrosMainMenu();
break;
case 0x12:
case 0x13:
case 18:
case 19:
sub_80199CC();
break;
case 0x1a:
case 0x1b:
case 26:
case 27:
sub_8019B08();
break;
case 0x14:
sub_8019BBC();
case 20:
HandleKecleonBrosBuyItemMenu();
break;
case 0x1c:
sub_8019C78();
case 28:
HandleKecleonBrosSellItemMenu();
break;
case 0x16:
sub_8019850();
case KECLEON_STORE_BUY_ITEM:
HandleKecleonBrosBuyItemYesNoMenu();
break;
case 0x1e:
sub_80198E8();
case KECLEON_STORE_SELL_ITEM:
HandleKecleonBrosSellItemYesNoMenu();
break;
case 0x1f:
sub_8019944();
case KECLEON_STORE_SELL_ALL_ITEMS:
HandleKecleonBrosSellAllItemsMenu();
break;
case 0x15:
case KECLEON_STORE_BUY_ITEM_INFO:
sub_8019D30();
break;
case 0x1d:
case KECLEON_STORE_SELL_ITEM_INFO:
sub_8019D4C();
break;
case KECLEON_STORE_EXIT:
return 3;
default:
sub_8019D68();
ProceedToKecleonBros1FallbackState();
break;
}
return 0;
@@ -207,11 +207,11 @@ static void sub_8018D30(void)
sKecleonBrosWork1->unkE8[2] = sUnknown_80DB858;
break;
default:
case 21:
case 22:
case KECLEON_STORE_BUY_ITEM_INFO:
case KECLEON_STORE_BUY_ITEM:
case 23:
case 24:
case 25:
case KECLEON_STORE_SELL_ITEM_MENU:
case KECLEON_STORE_SELL_ITEM_RECEIPT:
for (i = 0; i < 4; i++)
sKecleonBrosWork1->unkE8[i] = sUnknown_80DB840;
break;
@@ -225,26 +225,26 @@ static void UpdateKecleonStoreDialogue(void)
{
switch (sKecleonBrosWork1->currState) {
case KECLEON_STORE_INIT:
sub_8019DAC();
sub_80194F8();
KecleonCalcSellPriceForAllItems();
BuildKecleonBrosMainMenu();
sub_8019E04(FALSE);
sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_00], 0, sKecleonBrosWork1->menuAction1,
sKecleonBrosWork1->menuItems, sKecleonBrosWork1->unk74, 4, 0, sKecleonBrosWork1->unkE4, 12);
break;
case KECLEON_STORE_MAIN_MENU:
sub_8019DAC();
sub_80194F8();
KecleonCalcSellPriceForAllItems();
BuildKecleonBrosMainMenu();
sub_8019E04(FALSE);
sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_01], 0, sKecleonBrosWork1->menuAction1,
sKecleonBrosWork1->menuItems, sKecleonBrosWork1->unk74, 4, 0, sKecleonBrosWork1->unkE4, 12);
break;
case 2:
case KECLEON_STORE_INFO:
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_22], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 3:
sKecleonBrosWork1->fallbackState = 4;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_EXIT;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_02], 0, sKecleonBrosWork1->unkE4, 0x30D);
break;
@@ -254,7 +254,7 @@ static void UpdateKecleonStoreDialogue(void)
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_12], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case KECLEON_STORE_NO_MONEY:
sKecleonBrosWork1->fallbackState = 16;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_BUY_ITEM_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_13], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
@@ -263,12 +263,12 @@ static void UpdateKecleonStoreDialogue(void)
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_14], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 8:
case KECLEON_STORE_NO_ITEMS_TO_SELL:
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_15], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case KECLEON_STORE_NO_ITEMS_TO_SELL:
case KECLEON_STORE_NO_ITEMS:
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_16], 0, sKecleonBrosWork1->unkE4, 0x10D);
@@ -284,18 +284,18 @@ static void UpdateKecleonStoreDialogue(void)
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_18], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case KECLEON_STORE_NOT_ENOUGH_MONEY:
sKecleonBrosWork1->fallbackState = 16;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_BUY_ITEM_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_19], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case KECLEON_STORE_CANT_SELL_ITEM:
sub_8090E14(gFormatItems, &sKecleonBrosWork1->soldItem, NULL);
sKecleonBrosWork1->fallbackState = 24;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_SELL_ITEM_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_20], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 14:
sKecleonBrosWork1->fallbackState = 24;
case KECLEON_STORE_SELL_ITEM_TOO_MUCH_MONEY:
sKecleonBrosWork1->fallbackState = KECLEON_STORE_SELL_ITEM_MENU;
sub_8019E04(TRUE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_21], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
@@ -304,7 +304,7 @@ static void UpdateKecleonStoreDialogue(void)
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_03], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 16:
case KECLEON_STORE_BUY_ITEM_MENU:
sKecleonBrosWork1->fallbackState = 19;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_04], 0, sKecleonBrosWork1->unkE4, 0x10D);
@@ -335,17 +335,17 @@ static void UpdateKecleonStoreDialogue(void)
sub_801AD34(0);
DrawTeamMoneyBox(1);
sub_80195C0();
BuildKecleonBrosBuyItemMenu();
sub_8012D60(&sKecleonBrosWork1->menu, sKecleonBrosWork1->menuItems, 0, sKecleonBrosWork1->unk74, sKecleonBrosWork1->menuAction3, 2);
break;
case 22:
sub_8019700();
case KECLEON_STORE_BUY_ITEM:
BuildKecleonBrosYesNoMenu();
sub_8090E14(gFormatItems, &sKecleonBrosWork1->soldItem, 0);
gFormatData_202DE30 = sKecleonBrosWork1->itemSellPrice;
sub_8019E04(FALSE);
sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_05], 0, 5,sKecleonBrosWork1->menuItems, NULL, 4, 0, sKecleonBrosWork1->unkE4, 12);
break;
case 17:
case KECLEON_STORE_BUY_ITEM_RECEIPT:
if (CountKecleonItems() == 0) {
if (sKecleonBrosWork1->isKecleonItemShop != FALSE)
sub_801A010();
@@ -362,7 +362,7 @@ static void UpdateKecleonStoreDialogue(void)
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
}
else
sKecleonBrosWork1->fallbackState = 16;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_BUY_ITEM_MENU;
}
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_06], 0, sKecleonBrosWork1->unkE4, 0x10D);
@@ -372,7 +372,7 @@ static void UpdateKecleonStoreDialogue(void)
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_07], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 24:
case KECLEON_STORE_SELL_ITEM_MENU:
sKecleonBrosWork1->fallbackState = 27;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_08], 0, sKecleonBrosWork1->unkE4, 0x10D);
@@ -388,38 +388,38 @@ static void UpdateKecleonStoreDialogue(void)
case 28:
sub_801A9E0();
DrawTeamMoneyBox(1);
sub_8019660();
BuildKecleonBrosSellItemMenu();
sub_8012D60(&sKecleonBrosWork1->menu, sKecleonBrosWork1->menuItems, 0, sKecleonBrosWork1->unk74, sKecleonBrosWork1->menuAction2, 2);
break;
case 30:
sub_8019700();
case KECLEON_STORE_SELL_ITEM:
BuildKecleonBrosYesNoMenu();
sub_8090E14(gFormatItems, &sKecleonBrosWork1->soldItem, NULL);
gFormatData_202DE30 = sKecleonBrosWork1->itemSellPrice;
sub_8019E04(FALSE);
sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_09], 0, 5, sKecleonBrosWork1->menuItems, NULL, 4, 0, sKecleonBrosWork1->unkE4, 12);
break;
case 21:
case 29:
case KECLEON_STORE_BUY_ITEM_INFO:
case KECLEON_STORE_SELL_ITEM_INFO:
sub_801B3C0(&sKecleonBrosWork1->soldItem);
break;
case 25:
case KECLEON_STORE_SELL_ITEM_RECEIPT:
if (GetNumberOfFilledInventorySlots() == 0 || gTeamInventoryRef->teamMoney >= MAX_TEAM_MONEY) {
sub_801A928();
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
}
else
sKecleonBrosWork1->fallbackState = 24;
sKecleonBrosWork1->fallbackState = KECLEON_STORE_SELL_ITEM_MENU;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_11], 0, sKecleonBrosWork1->unkE4, 0x10D);
break;
case 31:
sub_8019700();
case KECLEON_STORE_SELL_ALL_ITEMS:
BuildKecleonBrosYesNoMenu();
gFormatData_202DE30 = sKecleonBrosWork1->inventoryItemSellPrice;
sub_8019E04(FALSE);
sub_8014248(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_10], 0, 5, sKecleonBrosWork1->menuItems, NULL, 4, 0, sKecleonBrosWork1->unkE4, 12);
break;
case 32:
case KECLEON_STORE_SELL_ALL_ITEMS_RECEIPT:
sKecleonBrosWork1->fallbackState = KECLEON_STORE_MAIN_MENU;
sub_8019E04(FALSE);
xxx_info_box_80141B4(gCommonKecleonBros[sKecleonBrosWork1->mode][KECLEON_DLG_11], 0, sKecleonBrosWork1->unkE4, 0x10D);
@@ -427,7 +427,7 @@ static void UpdateKecleonStoreDialogue(void)
}
}
static void sub_80194F8(void)
static void BuildKecleonBrosMainMenu(void)
{
s32 i;
s32 loopMax;
@@ -473,7 +473,7 @@ static void sub_80194F8(void)
}
}
static void sub_80195C0(void)
static void BuildKecleonBrosBuyItemMenu(void)
{
s32 i;
s32 loopMax;
@@ -507,7 +507,7 @@ static void sub_80195C0(void)
}
}
static void sub_8019660(void)
static void BuildKecleonBrosSellItemMenu(void)
{
s32 i;
s32 loopMax;
@@ -541,7 +541,7 @@ static void sub_8019660(void)
}
}
static void sub_8019700(void)
static void BuildKecleonBrosYesNoMenu(void)
{
s32 loopMax = 0;
sKecleonBrosWork1->menuItems[loopMax].text = gCommonYes[0];
@@ -556,14 +556,14 @@ static void sub_8019700(void)
sKecleonBrosWork1->menuItems[loopMax].menuAction = CANCEL_ACTION;
}
static void sub_8019730(void)
static void HandleKecleonBrosMainMenu(void)
{
s32 menuAction;
if (sub_80144A4(&menuAction) != 0)
return;
if (menuAction != 1)
if (menuAction != CANCEL_ACTION)
sKecleonBrosWork1->menuAction1 = menuAction;
switch (menuAction) {
@@ -577,9 +577,9 @@ static void sub_8019730(void)
break;
case SELL_ACTION:
if (GetNumberOfFilledInventorySlots() == 0)
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL);
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS);
else if (sKecleonBrosWork1->numInventoryItemToSell == 0)
SetKecleonBrosState(8);
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL);
else if (gTeamInventoryRef->teamMoney < MAX_TEAM_MONEY)
SetKecleonBrosState(23);
else
@@ -587,16 +587,16 @@ static void sub_8019730(void)
break;
case SELL_ALL_ACTION:
if (GetNumberOfFilledInventorySlots() == 0)
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL);
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS);
else if (sKecleonBrosWork1->numInventoryItemToSell == 0)
SetKecleonBrosState(8);
SetKecleonBrosState(KECLEON_STORE_NO_ITEMS_TO_SELL);
else if (sKecleonBrosWork1->inventoryItemSellPrice + gTeamInventoryRef->teamMoney > MAX_TEAM_MONEY)
SetKecleonBrosState(KECLEON_STORE_TOO_MUCH_MONEY);
else
SetKecleonBrosState(31);
SetKecleonBrosState(KECLEON_STORE_SELL_ALL_ITEMS);
break;
case INFO_ACTION:
SetKecleonBrosState(2);
SetKecleonBrosState(KECLEON_STORE_INFO);
break;
case CANCEL_ACTION:
SetKecleonBrosState(3);
@@ -604,7 +604,7 @@ static void sub_8019730(void)
}
}
static void sub_8019850(void)
static void HandleKecleonBrosBuyItemYesNoMenu(void)
{
s32 menuAction;
@@ -625,17 +625,17 @@ static void sub_8019850(void)
}
PlaySound(332);
SetKecleonBrosState(17);
SetKecleonBrosState(KECLEON_STORE_BUY_ITEM_RECEIPT);
break;
case NO_ACTION:
case CANCEL_ACTION:
SetKecleonBrosState(16);
SetKecleonBrosState(KECLEON_STORE_BUY_ITEM_MENU);
break;
}
}
}
static void sub_80198E8(void)
static void HandleKecleonBrosSellItemYesNoMenu(void)
{
s32 menuAction;
@@ -645,17 +645,17 @@ static void sub_80198E8(void)
AddToTeamMoney(sKecleonBrosWork1->itemSellPrice);
ShiftItemsDownFrom(sKecleonBrosWork1->soldItemInventoryIndex);
PlaySound(332);
SetKecleonBrosState(25);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM_RECEIPT);
break;
case NO_ACTION:
case CANCEL_ACTION:
SetKecleonBrosState(24);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM_MENU);
break;
}
}
}
static void sub_8019944(void)
static void HandleKecleonBrosSellAllItemsMenu(void)
{
s32 slotIndex;
s32 menuAction;
@@ -674,7 +674,7 @@ static void sub_8019944(void)
FillInventoryGaps();
AddToTeamMoney(sKecleonBrosWork1->inventoryItemSellPrice);
PlaySound(0x14c);
SetKecleonBrosState(32);
SetKecleonBrosState(KECLEON_STORE_SELL_ALL_ITEMS_RECEIPT);
break;
case CANCEL_ACTION:
case NO_ACTION:
@@ -695,7 +695,7 @@ static void sub_80199CC(void)
menuAction = sub_801A2A8(TRUE);
switch (menuAction) {
case SELL_ACTION:
case 3:
if (sKecleonBrosWork1->isKecleonItemShop) {
sKecleonBrosWork1->itemShopItemIndex = sub_8019FB0();
item = GetKecleonShopItem(sKecleonBrosWork1->itemShopItemIndex);
@@ -710,7 +710,7 @@ static void sub_80199CC(void)
sKecleonBrosWork1->itemSellPrice = GetStackBuyPrice(&sKecleonBrosWork1->soldItem);
SetKecleonBrosState(20);
break;
case SELL_ALL_ACTION:
case 4:
if (sKecleonBrosWork1->isKecleonItemShop) {
sKecleonBrosWork1->itemShopItemIndex = sub_8019FB0();
item = GetKecleonShopItem(sKecleonBrosWork1->itemShopItemIndex);
@@ -723,9 +723,9 @@ static void sub_80199CC(void)
xxx_init_itemslot_8090A8C(&sKecleonBrosWork1->soldItem, item->id, 0);
sKecleonBrosWork1->soldItem.quantity = item->quantity;
sKecleonBrosWork1->itemSellPrice = GetStackBuyPrice(&sKecleonBrosWork1->soldItem);
SetKecleonBrosState(21);
SetKecleonBrosState(KECLEON_STORE_BUY_ITEM_INFO);
break;
case BUY_ACTION:
case 2:
if (sKecleonBrosWork1->isKecleonItemShop)
sub_801A010();
else
@@ -733,7 +733,7 @@ static void sub_80199CC(void)
SetKecleonBrosState(KECLEON_STORE_MAIN_MENU);
break;
case CANCEL_ACTION:
case 1:
sub_801AD34(0);
DrawTeamMoneyBox(1);
break;
@@ -756,7 +756,7 @@ static void sub_8019B08(void)
sKecleonBrosWork1->soldItem = gTeamInventoryRef->teamItems[sKecleonBrosWork1->soldItemInventoryIndex];
sKecleonBrosWork1->itemSellPrice = GetStackSellPrice(&sKecleonBrosWork1->soldItem);
sub_8099690(0);
SetKecleonBrosState(29);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM_INFO);
break;
case 2:
sub_801A928();
@@ -769,7 +769,7 @@ static void sub_8019B08(void)
}
}
static void sub_8019BBC(void)
static void HandleKecleonBrosBuyItemMenu(void)
{
s32 menuAction;
@@ -780,7 +780,7 @@ static void sub_8019BBC(void)
else
sub_801A2A8(FALSE);
if (sub_8012FD8(&sKecleonBrosWork1->menu) == 0 && (sub_8013114(&sKecleonBrosWork1->menu, &menuAction), menuAction != 1))
if (sub_8012FD8(&sKecleonBrosWork1->menu) == 0 && (sub_8013114(&sKecleonBrosWork1->menu, &menuAction), menuAction != CANCEL_ACTION))
sKecleonBrosWork1->menuAction3 = menuAction;
switch (menuAction) {
@@ -790,10 +790,10 @@ static void sub_8019BBC(void)
else if (sKecleonBrosWork1->itemSellPrice > gTeamInventoryRef->teamMoney)
SetKecleonBrosState(KECLEON_STORE_NOT_ENOUGH_MONEY);
else
SetKecleonBrosState(22);
SetKecleonBrosState(KECLEON_STORE_BUY_ITEM);
break;
case INFO_ACTION:
SetKecleonBrosState(21);
SetKecleonBrosState(KECLEON_STORE_BUY_ITEM_INFO);
break;
case CANCEL_ACTION:
SetKecleonBrosState(19);
@@ -801,7 +801,7 @@ static void sub_8019BBC(void)
}
}
static void sub_8019C78(void)
static void HandleKecleonBrosSellItemMenu(void)
{
s32 menuAction;
@@ -818,13 +818,13 @@ static void sub_8019C78(void)
if (!CanSellItem(sKecleonBrosWork1->soldItem.id))
SetKecleonBrosState(KECLEON_STORE_CANT_SELL_ITEM);
else if (sKecleonBrosWork1->itemSellPrice + gTeamInventoryRef->teamMoney > MAX_TEAM_MONEY)
SetKecleonBrosState(14);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM_TOO_MUCH_MONEY);
else
SetKecleonBrosState(30);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM);
break;
case INFO_ACTION:
sub_8099690(0);
SetKecleonBrosState(29);
SetKecleonBrosState(KECLEON_STORE_SELL_ITEM_INFO);
break;
case CANCEL_ACTION:
SetKecleonBrosState(27);
@@ -860,7 +860,7 @@ static void sub_8019D4C(void)
}
}
static void sub_8019D68(void)
static void ProceedToKecleonBros1FallbackState(void)
{
s32 temp;
@@ -876,7 +876,7 @@ static u32 CountKecleonItems(void)
return CountKecleonWareItems();
}
static void sub_8019DAC(void)
static void KecleonCalcSellPriceForAllItems(void)
{
s32 sellPrice;
Item *item;

View File

@@ -4,6 +4,7 @@
#include "code_8045A00.h"
#include "code_806CD90.h"
#include "code_8077274_1.h"
#include "code_807CD9C.h"
#include "code_808417C.h"
#include "constants/ability.h"
#include "constants/status.h"
@@ -200,7 +201,6 @@ extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32);
extern void sub_8045C28(Item *, u8 , u8);
extern void sub_805A7D4(Entity *, Entity *, Item *, Position *);
extern void MudWaterSportEffect(u32);
extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3);
extern void sub_806EAF4(Entity *, Entity *, u8, u32, u32, s32 *, u32, u16, u32);
extern void sub_806A6E8(Entity *);
@@ -308,7 +308,7 @@ void sub_8057588(Entity * pokemon, u8 param_2)
entityInfo = pokemon->info;
for(index = 0; index < MAX_MON_MOVES; index++)
{
move = &entityInfo->moves[index];
move = &entityInfo->moves.moves[index];
if ((move->moveFlags & MOVE_FLAG_EXISTS)) {
PPtoRemove = 1;
if ((move->moveFlags2 & MOVE_FLAG_LAST_USED)) {
@@ -556,7 +556,7 @@ bool8 TormentMoveAction(Entity *pokemon, Entity *target, Move *move, s32 param_4
for(iVar4 = 0; iVar4 < MAX_MON_MOVES; iVar4++)
{
movePtr = &entityInfo->moves[iVar4];
movePtr = &entityInfo->moves.moves[iVar4];
if ((movePtr->moveFlags & MOVE_FLAG_EXISTS) != 0) {
if ((movePtr->moveFlags & MOVE_FLAG_DISABLED) == 0) {
if ((movePtr->moveFlags & MOVE_FLAG_LAST_USED) != 0) {
@@ -573,18 +573,18 @@ bool8 TormentMoveAction(Entity *pokemon, Entity *target, Move *move, s32 param_4
}
};
if ((entityInfo->struggleMoveFlags & MOVE_FLAG_DISABLED) == 0) {
if ((entityInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED) != 0) {
if ((entityInfo->moves.struggleMoveFlags & MOVE_FLAG_DISABLED) == 0) {
if ((entityInfo->moves.struggleMoveFlags & MOVE_FLAG_LAST_USED) != 0) {
InitPokemonMove(&struggleMove, MOVE_STRUGGLE);
entityInfo->struggleMoveFlags |= MOVE_FLAG_DISABLED;
entityInfo->moves.struggleMoveFlags |= MOVE_FLAG_DISABLED;
isTormented = TRUE;
sub_80928C0(gFormatItems,&struggleMove,0);
// $i0 was tormented
sub_80522F4(pokemon,target,*gUnknown_80FCFBC);
}
}
else if ((entityInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0) {
entityInfo->struggleMoveFlags &= ~(MOVE_FLAG_DISABLED);
else if ((entityInfo->moves.struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0) {
entityInfo->moves.struggleMoveFlags &= ~(MOVE_FLAG_DISABLED);
}
if (isTormented)
{
@@ -2321,7 +2321,7 @@ bool8 ConversionMoveAction(Entity * pokemon,Entity * target,Move * move,u32 para
{
for(index = 0; index < MAX_MON_MOVES; index++)
{
movePtr = &info->moves[index];
movePtr = &info->moves.moves[index];
if (((movePtr->moveFlags & MOVE_FLAG_EXISTS)) && (GetMoveTypeForMonster(target,movePtr) != TYPE_NONE)) {
moveStack[counter] = movePtr;
counter++;

View File

@@ -596,7 +596,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
{
return FALSE;
}
if (!HasLastUsedMove(targetData->moves))
if (!HasLastUsedMove(targetData->moves.moves))
{
return FALSE;
}
@@ -614,7 +614,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
}
break;
case MOVE_TORMENT:
if (HasDisabledMove(targetData->moves) || !HasLastUsedMove(targetData->moves))
if (HasDisabledMove(targetData->moves.moves) || !HasLastUsedMove(targetData->moves.moves))
{
return FALSE;
}
@@ -640,7 +640,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
}
break;
case MOVE_SPITE:
if (LastUsedMoveOutOfPP(targetData->moves))
if (LastUsedMoveOutOfPP(targetData->moves.moves))
{
return FALSE;
}
@@ -850,7 +850,7 @@ bool8 CanUseOnTargetWithStatusChecker(Entity *user, Entity *target, Move *move)
break;
case MOVE_MIMIC:
case MOVE_SKETCH:
if (!HasLastUsedMove(targetData->moves))
if (!HasLastUsedMove(targetData->moves.moves))
{
return FALSE;
}

View File

@@ -126,7 +126,6 @@ extern u8 *gUnknown_80FC270[];
extern u8 *gUnknown_80FC138[];
extern u8 *gUnknown_80FC21C[];
extern bool8 sub_8071728(Entity * pokemon, Entity * target, bool8 displayMessage);
extern void sub_8041F28(Entity *, s32);
extern void sub_8041F4C(Entity *, s32);
extern void sub_8041F70(Entity *, s32);

View File

@@ -35,7 +35,7 @@ u32 sub_8057144(Entity * pokemon)
{
Entity *dungeonMon = gDungeon->allPokemon[i];
if (EntityExists(dungeonMon)) {
Move *moves = dungeonMon->info->moves;
Move *moves = dungeonMon->info->moves.moves;
for (j = 0; j < MAX_MON_MOVES; j++)
{
if (moves[j].moveFlags & MOVE_FLAG_EXISTS
@@ -141,7 +141,7 @@ bool8 sub_8057308(Entity *pokemon, s32 chance)
bool8 CanAIUseMove(Entity *pokemon, s32 moveIndex, bool8 hasPPChecker)
{
EntityInfo *pokemonInfo = pokemon->info;
Move *move = &pokemonInfo->moves[moveIndex];
Move *move = &pokemonInfo->moves.moves[moveIndex];
s32 i;
if (!(move->moveFlags & MOVE_FLAG_EXISTS))
{
@@ -174,7 +174,7 @@ bool8 CanAIUseMove(Entity *pokemon, s32 moveIndex, bool8 hasPPChecker)
goto returnTrue;
}
move++;
if ((u32) move >= (u32) &pokemonInfo->struggleMoveFlags || !(move->moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
if ((u32) move >= (u32) &pokemonInfo->moves.struggleMoveFlags || !(move->moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
{
return FALSE;
}
@@ -206,7 +206,7 @@ bool8 CanMonsterUseMove(Entity *pokemon, Move *move, bool8 hasPPChecker)
{
if (move->id == MOVE_STRUGGLE)
{
if (!(pokemonInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED))
if (!(pokemonInfo->moves.struggleMoveFlags & MOVE_FLAG_LAST_USED))
{
return FALSE;
}
@@ -233,7 +233,7 @@ bool8 sub_805744C(Entity * pokemon, Move *move, bool8 param_3)
if ((entityInfo->volatileStatus.volatileStatus == STATUS_TAUNTED) && (!MoveIgnoresTaunted(move))) return FALSE;
if (entityInfo->volatileStatus.volatileStatus == STATUS_ENCORE) {
if (move->id == MOVE_STRUGGLE) {
if((entityInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0) return FALSE;
if((entityInfo->moves.struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0) return FALSE;
}
else {
if((move->moveFlags & MOVE_FLAG_LAST_USED) == 0) return FALSE;

View File

@@ -1595,14 +1595,14 @@ static void sub_8094148(struct unkStruct_8094924 *r0, Move *move)
SaveIntegerBits(r0, &move->ginseng, 7);
}
void sub_8094184(struct unkStruct_8094924 *r0, struct unkStruct_8094184 *r1)
void sub_8094184(struct unkStruct_8094924 *r0, struct Moves *r1)
{
s32 i;
for (i = 0; i < MAX_MON_MOVES; i++)
sub_8094148(r0, &r1->moves[i]);
SaveIntegerBits(r0, &r1->unk20, 8);
SaveIntegerBits(r0, &r1->struggleMoveFlags, 8);
}
static void sub_80941B0(struct unkStruct_8094924 *r0, Move *move)
@@ -1615,15 +1615,15 @@ static void sub_80941B0(struct unkStruct_8094924 *r0, Move *move)
RestoreIntegerBits(r0, &move->ginseng, 7);
}
void sub_80941FC(struct unkStruct_8094924 *r0, struct unkStruct_8094184 *r1)
void sub_80941FC(struct unkStruct_8094924 *r0, struct Moves*r1)
{
s32 i;
for (i = 0; i < MAX_MON_MOVES; i++)
sub_80941B0(r0, &r1->moves[i]);
r1->unk20 = 0;
RestoreIntegerBits(r0, &r1->unk20, 8);
r1->struggleMoveFlags= 0;
RestoreIntegerBits(r0, &r1->struggleMoveFlags, 8);
}
bool8 DoesMoveCharge(u16 move)
@@ -1639,4 +1639,4 @@ bool8 DoesMoveCharge(u16 move)
if (move == MOVE_DIG) return TRUE;
return FALSE;
}
}

View File

@@ -66,20 +66,18 @@ const u8 gPelipperBoard_JobList[] = "Job List";
const u8 gPelipperBoard_Accepted[] = "Accepted";
const u8 gPelipperStatusSlash[] = "/";
extern void sub_802ECB4(void);
extern void nullsub_134(void);
extern void sub_802ED4C(void);
extern void sub_802EDBC(void);
extern void sub_802EEA0(void);
extern void sub_802EEBC(void);
extern void sub_802E94C(void);
extern void sub_802EA58(void);
extern void CreatePelipperBoardMenu(void);
extern void sub_802EC10(void);
extern void CreatePelipperAcceptedStatusBox(u32);
void SetPelipperBoardState(u32);
static void sub_802ECB4(void);
static void nullsub_134(void);
static void sub_802ED4C(void);
static void sub_802EDBC(void);
static void sub_802EEA0(void);
static void sub_802EEBC(void);
static void sub_802E94C(void);
static void sub_802EA58(void);
static void CreatePelipperBoardMenu(void);
static void sub_802EC10(void);
static void CreatePelipperAcceptedStatusBox(u32);
static void SetPelipperBoardState(u32);
u32 sub_802E864(void)
{

View File

@@ -7,6 +7,7 @@
#include "constants/evolution_status.h"
#include "constants/iq_skill.h"
#include "constants/tactic.h"
#include "constants/type.h"
#include "sprite.h"
#include "text_util.h"
#include "friend_area.h"
@@ -51,9 +52,9 @@ void RestoreDungeonLocation(struct unkStruct_8094924*, DungeonLocation*);
void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
extern void sub_809449C(struct unkStruct_8094924*, void*);
extern void sub_808F448(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
extern void SavePokemonHiddenPower(struct unkStruct_8094924*, HiddenPower*);
extern void sub_809447C(struct unkStruct_8094924*, void*);
extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
extern void RestorePokemonHiddenPower(struct unkStruct_8094924*, HiddenPower*);
s16 GetPokemonEvolveConditions(s16 index, unkEvolve *r1);
u32 sub_808F798(PokemonStruct1 *, s16);
@@ -85,18 +86,18 @@ bool8 AddShadowSprite(s16 species, s16* a2, s16* a3)
}
void sub_808E6F4(struct unkStruct_808E6F4* a1)
void GenerateHiddenPower(HiddenPower* a1)
{
s32 i;
a1->unk0 = gUnknown_810AC90[RandInt(10)];
a1->hiddenPowerBasePower = gUnknown_810AC90[RandInt(10)];
for (i = 0; i < 100; i++) {
a1->unk2 = RandInt(18);
if ( a1->unk2 )
a1->hiddenPowerType = RandInt(NUM_TYPES);
if ( a1->hiddenPowerType )
break;
}
if ( i == 100 )
a1->unk2 = 2;
a1->hiddenPowerType = TYPE_FIRE;
}
bool8 HasRecruitedMon(s16 species) {
@@ -824,11 +825,11 @@ s32 SavePokemonStruct2(u8* a1, s32 size)
SaveIntegerBits(&backup, &pokemon2->currExp, 24);
sub_8094184(&backup, &pokemon2->moves);
SaveItemSlot(&backup, &pokemon2->itemSlot);
sub_809449C(&backup, &pokemon2->unk44);
sub_809449C(&backup, &pokemon2->unk48);
sub_809449C(&backup, &pokemon2->belly);
sub_809449C(&backup, &pokemon2->maxBelly);
SaveIntegerBits(&backup, &pokemon2->IQSkills, 24);
SaveIntegerBits(&backup, &pokemon2->tacticIndex, 4);
sub_808F448(&backup, &pokemon2->unk54);
SavePokemonHiddenPower(&backup, &pokemon2->hiddenPower);
SaveIntegerBits(&backup, &pokemon2->name, 80);
}
nullsub_102(&backup);
@@ -872,11 +873,11 @@ s32 RestorePokemonStruct2(u8* a1, s32 size)
RestoreIntegerBits(&backup, &pokemon2->currExp, 24);
sub_80941FC(&backup, &pokemon2->moves);
RestoreItemSlot(&backup, &pokemon2->itemSlot);
sub_809447C(&backup, &pokemon2->unk44);
sub_809447C(&backup, &pokemon2->unk48);
sub_809447C(&backup, &pokemon2->belly);
sub_809447C(&backup, &pokemon2->maxBelly);
RestoreIntegerBits(&backup, &pokemon2->IQSkills, 24);
RestoreIntegerBits(&backup, &pokemon2->tacticIndex, 4);
sub_808F428(&backup, &pokemon2->unk54);
RestorePokemonHiddenPower(&backup, &pokemon2->hiddenPower);
RestoreIntegerBits(&backup, &pokemon2->name, 80);
}
nullsub_102(&backup);
@@ -893,16 +894,16 @@ void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSub
SaveIntegerBits(a1, &unkC->level, 7);
}
void sub_808F428(unkStruct_8094924* a1, unkStruct_808E6F4* a2)
void RestorePokemonHiddenPower(unkStruct_8094924* a1, HiddenPower* a2)
{
RestoreIntegerBits(a1, &a2->unk0, 10);
RestoreIntegerBits(a1, &a2->unk2, 5);
RestoreIntegerBits(a1, &a2->hiddenPowerBasePower, 10);
RestoreIntegerBits(a1, &a2->hiddenPowerType, 5);
}
void sub_808F448(unkStruct_8094924* a1, unkStruct_808E6F4* a2)
void SavePokemonHiddenPower(unkStruct_8094924* a1, HiddenPower* a2)
{
SaveIntegerBits(a1, &a2->unk0, 10);
SaveIntegerBits(a1, &a2->unk2, 5);
SaveIntegerBits(a1, &a2->hiddenPowerBasePower, 10);
SaveIntegerBits(a1, &a2->hiddenPowerType, 5);
}
void sub_808F468(PokemonStruct1 *param_1, EvolveStatus *evolveStatus, u8 param_3)

View File

@@ -622,7 +622,7 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(PokemonStruct2 * a1, PokemonStruct1 *
a1->level = pokemon->level;
a1->IQ = pokemon->IQ;
a1->IQSkills = pokemon->IQSkills;
sub_808E6F4(&a1->unk54);
GenerateHiddenPower(&a1->hiddenPower);
a1->dungeonLocation = pokemon->dungeonLocation;
a1->isTeamLeader = pokemon->isTeamLeader;
a1->unkA = a3;
@@ -655,8 +655,8 @@ void xxx_pokemonstruct_to_pokemon2_808DE50(PokemonStruct2 * a1, PokemonStruct1 *
slot->flags = 0;
}
a1->unk44 = IntToFixedPoint(100);
a1->unk48 = IntToFixedPoint(100);
a1->belly = IntToFixedPoint(100);
a1->maxBelly = IntToFixedPoint(100);
}
void xxx_pokemon2_to_pokemonstruct_index_808DF2C(s32 a1, PokemonStruct2* a2)

View File

@@ -44,7 +44,6 @@ extern u32 SaveRecruitedPokemon(u8 *, u32);
extern u32 RestoreRecruitedPokemon(void* a, s32 b);
extern u32 SavePokemonStruct2(u8 *, u32);
extern u32 RestorePokemonStruct2(void* a, s32 b);
extern u32 sub_80921C4(u8 *, u32);
extern u32 sub_80954CC(void* a, s32 b);
extern u32 sub_8095624(u8 *, u32);
extern u32 RestoreMailInfo(void* a, s32 b);

View File

@@ -114,10 +114,11 @@ ALIGNED(4) const u8 gUnknown_80E7178[] = _("{CENTER_ALIGN}The data could not be
"{CENTER_ALIGN}Please turn off the power and remove\n"
"{CENTER_ALIGN}and reinsert the DS Card.");
extern void sub_8038440();
extern void sub_80384D0();
extern void sub_8038830();
extern void sub_80388C4(void);
static void sub_8038830(void);
static void sub_80388C4(void);
extern void sub_8038440(void);
extern void sub_80384D0(void);
extern void sub_80140F8(void);
void CreateSaveMenu(s32 currMenu)

View File

@@ -17,6 +17,7 @@
#include "dungeon_pokemon_attributes.h"
#include "dungeon_util.h"
#include "math.h"
#include "move_effects_target.h"
#include "number_util.h"
#include "status_checks_1.h"
#include "structs/map.h"
@@ -128,14 +129,18 @@ extern u8 *gUnknown_80FBBD4[];
extern u8 *gUnknown_80FBBB8[];
extern u8 *gUnknown_80FBB94[];
extern s16 gUnknown_80F4EF4[];
extern u8 *gUnknown_80FBE84[];
extern u8 *gUnknown_80FBEA0[];
extern u8 *gUnknown_80FBE64[];
extern u8 *gUnknown_80FBDF0[];
extern u8 *gUnknown_80FBDC4[];
extern u8 *gUnknown_80FBE14[];
extern s32 gFormatData_202DE30[10];
extern void sub_8041D84(Entity *);
extern void sub_804178C(u32);
extern void sub_8041D5C(Entity *);
extern void RaiseAttackStageTarget(Entity *, Entity *, u32, u32);
extern void RaiseDefenseStageTarget(Entity *, Entity *, u32, u32);
extern void sub_8041D48(Entity *);
extern void sub_8041D38(Entity * pokemon);
extern u8 sub_8043D10(void);
@@ -153,11 +158,12 @@ extern void nullsub_81(Entity *);
extern void nullsub_82(Entity *);
extern void nullsub_83(Entity *);
extern void nullsub_84(Entity *);
extern void sub_8041D9C(Entity *);
extern void nullsub_85(Entity *);
extern void sub_803F580(u32);
extern void sub_8040A84(void);
extern void sub_8041D9C(Entity *);
extern void sub_8041DB0(Entity *pokemon);
extern void sub_8041CA8(Entity *);
extern void sub_8041C94(Entity *);
extern bool8 sub_8045888(Entity *r0);
@@ -168,7 +174,6 @@ extern void sub_8041CCC(Entity *);
extern void sub_8041CB8(Entity *r0);
extern void sub_8041C1C(Entity *r0);
extern void sub_8042060(Entity *, s32);
extern bool8 sub_8071728(Entity * param_1, Entity * param_2, u8 param_3);
extern void sub_8041FB4(Entity *r0, u32 r1);
extern void sub_8041FD8(Entity *r0, u32 r1);
extern void sub_80522F4(Entity *r1, Entity *r2, u8 *);
@@ -1213,10 +1218,10 @@ void EncoreStatusTarget(Entity *pokemon,Entity *target)
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,TRUE))) {
for(index = 0; index < MAX_MON_MOVES; index++)
{
movePtr = &EntityInfo->moves[index];
if ((EntityInfo->moves[index].moveFlags & MOVE_FLAG_EXISTS) && (movePtr->moveFlags & MOVE_FLAG_LAST_USED)) break;
movePtr = &EntityInfo->moves.moves[index];
if ((EntityInfo->moves.moves[index].moveFlags & MOVE_FLAG_EXISTS) && (movePtr->moveFlags & MOVE_FLAG_LAST_USED)) break;
}
if ((index == MAX_MON_MOVES) && ((EntityInfo->struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0)) {
if ((index == MAX_MON_MOVES) && ((EntityInfo->moves.struggleMoveFlags & MOVE_FLAG_LAST_USED) == 0)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FBBD4);
}
@@ -1277,3 +1282,91 @@ void sub_8078A58(struct Entity *pokemon, struct Entity *target, s32 param_3, s32
EntityUpdateStatusSprites(target);
}
void sub_8078B5C(Entity *pokemon, Entity *target, u32 bellyIncrement, s32 maxBellyIncrement, bool8 displayMessage)
{
bool8 bellySizeIncreased;
FixedPoint oldBelly;
FixedPoint *bellyPtr;
EntityInfo *targetInfo;
FixedPoint *puVar8;
FixedPoint sp_0x0;
FixedPoint sp_0x4;
FixedPoint sp_0x8;
FixedPoint sp_0x10;
FixedPoint sp_0x14;
FixedPoint sp_0x18;
FixedPoint sp_0x20;
bool32 bellySame;
if (!EntityExists(target)) {
return;
}
targetInfo = target->info;
if ((!targetInfo->isTeamLeader) && (HasHeldItem(target,0x1b))) {
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBEA0);
return;
}
bellySizeIncreased = FALSE;
if (maxBellyIncrement != 0) {
if(FixedPointToInt(targetInfo->belly) >= FixedPointToInt(targetInfo->maxBelly))
{
bellySizeIncreased = TRUE;
}
if (bellyIncrement == 999)
{
bellySizeIncreased = TRUE;
}
}
if (bellySizeIncreased) {
bellyPtr = &targetInfo->maxBelly;
sp_0x20 = *bellyPtr;
bellySame = (FixedPointToInt(targetInfo->belly) == FixedPointToInt(*bellyPtr));
sp_0x0 = IntToFixedPoint(maxBellyIncrement);
sp_0x4 = FixedPoint_Add(*bellyPtr,sp_0x0);
*bellyPtr = sp_0x4;
sp_0x8 = IntToFixedPoint(200);
*bellyPtr = FixedPoint_Min(sp_0x4,sp_0x8);
targetInfo->belly = *bellyPtr;
if ((!bellySame) && (displayMessage)) {
sub_80522F4(pokemon,target,*gUnknown_80FBE64); // $m0's belly filled up full!
}
if (FixedPointToInt(sp_0x20) == FixedPointToInt(targetInfo->maxBelly)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBDF0); // $m0's belly won't get any bigger!
}
else {
sub_8041DB0(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBDC4); // m0's max belly size increased!
}
}
else {
bellyPtr = &targetInfo->belly;
oldBelly = *bellyPtr;
sp_0x10 = IntToFixedPoint(bellyIncrement);
sp_0x14 = FixedPoint_Add(*bellyPtr,sp_0x10);
*bellyPtr = sp_0x14;
puVar8 = &targetInfo->maxBelly;
sp_0x18 = FixedPoint_Min(sp_0x14,*puVar8);
*bellyPtr = sp_0x18;
if (bellyIncrement == 999) {
*bellyPtr = *puVar8;
}
nullsub_85(target);
SetMessageArgument(gAvailablePokemonNames,target,0);
if (FixedPointToInt(oldBelly) == FixedPointToInt(*bellyPtr)) {
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBE14); // $m0's belly didn't change!
}
else {
if (FixedPointToInt(*bellyPtr) >= FixedPointToInt(*puVar8)) {
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBE64); // $m0's belly filled up full!
}
else
{
if (displayMessage) sub_80522F4(pokemon,target,*gUnknown_80FBE84); // $m0's belly was filled!
}
}
}
EntityUpdateStatusSprites(target);
}

View File

@@ -6,6 +6,7 @@
#include "code_80521D0.h"
#include "code_806CD90.h"
#include "code_8077274_1.h"
#include "code_807CD9C.h"
#include "code_808417C.h"
#include "constants/ability.h"
#include "constants/move_id.h"
@@ -35,7 +36,6 @@
extern void sub_807F43C(Entity *, Entity *);
extern void sub_807DC68(Entity *, Entity *);
extern void sub_8078A58(Entity *, Entity *, s32, u32);
extern u32 sub_803D73C(u32);
extern void sub_8045C28(Item *, u8 , u8);
extern void sub_80464C8(Entity *, Position *, Item *);
@@ -51,7 +51,6 @@ extern void sub_8042A54(Position *);
extern void sub_8049BB0(s32, s32);
extern s16 sub_8057600(Move*, u32);
extern u32 sub_8055864(Entity *pokemon, Entity *target, Move *param_3, s32 param_4, s32 param_5);
extern void sub_807D148(Entity *pokemon, Entity *r1, u32 r2, Position *r3);
extern void sub_807DB74(Entity *);
extern void HandleLuminousOrbAction(Entity *pokemon);
extern void sub_807D510(Entity *, Entity *);
@@ -62,7 +61,6 @@ extern void sub_806BB6C(Entity *, s32);
extern void sub_807E254(Entity *, Entity *, u32);
extern u32 sub_8055640(Entity *, Entity *, Move *, u32, u32);
extern void sub_806A6E8(Entity *);
extern void sub_807D3CC(Entity *, Entity *);
extern u8 sub_8069D18(Position *);
extern u8 sub_804AD34(Position *);
@@ -83,7 +81,6 @@ extern void sub_8075C58(Entity *, Entity *, s32, s32);
extern void DealDamageToEntity(Entity *, s32, u32, u32);
extern bool8 sub_805755C(Entity* pokemon,u16 moveID);
extern void sub_80783C4(Entity *, Entity *, u32);
extern void sub_807CD9C(Entity *, Entity *, u32 direction);
// NOTE: Override pokemon.c types for these two funcs
@@ -461,7 +458,7 @@ bool8 MimicMoveAction(Entity * pokemon, Entity * target, Move *move, s32 param_4
for(moveIndex = 0; moveIndex < MAX_MON_MOVES; moveIndex++)
{
movePtr = &targetEntityInfo->moves[moveIndex];
movePtr = &targetEntityInfo->moves.moves[moveIndex];
if (((movePtr->moveFlags & MOVE_FLAG_EXISTS)) && !sub_805755C(pokemon,movePtr->id)) {
if ((movePtr->id != MOVE_MIMIC) && (movePtr->id != MOVE_ASSIST) && (movePtr->id != MOVE_SKETCH) && (movePtr->id != MOVE_MIRROR_MOVE) &&
(movePtr->id != MOVE_ENCORE) && ((movePtr->moveFlags & MOVE_FLAG_LAST_USED))) {
@@ -727,7 +724,7 @@ bool8 RockSmashMoveAction(Entity * pokemon, Entity * target, Move *move, s32 par
bool8 sub_805BA44(Entity * pokemon, Entity * target, Move *move, s32 param_4)
{
sub_807D3CC(pokemon, target);
sub_807D3CC(pokemon);
return TRUE;
}

View File

@@ -168,7 +168,7 @@ bool8 sub_80701A4(Entity *pokemon)
SendMessage(pokemon,*gPtrMoveInterruptedMessage);
}
else {
for(index = 0, move = pokemonInfo->moves; index < MAX_MON_MOVES; move++, index++) {
for(index = 0, move = pokemonInfo->moves.moves; index < MAX_MON_MOVES; move++, index++) {
if ((move->moveFlags & MOVE_FLAG_EXISTS) &&
(MoveMatchesChargingStatus(pokemon,move)) &&
(pokemonInfo->charging.chargingStatusMoveIndex == index)) {
@@ -178,10 +178,10 @@ bool8 sub_80701A4(Entity *pokemon)
if((index > 0) && (move->moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
{
do {
move2 = &pokemonInfo->moves[index_1 + 1];
move2 = &pokemonInfo->moves.moves[index_1 + 1];
move2--, index_1--;
if(index_1 <= 0) break;
if(!(pokemonInfo->moves[index_1].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
if(!(pokemonInfo->moves.moves[index_1].moveFlags & MOVE_FLAG_SUBSEQUENT_IN_LINK_CHAIN))
{
break;
}

View File

@@ -150,7 +150,7 @@ bool8 HasNegativeStatus(Entity *pokemon)
}
for (i = 0; i < MAX_MON_MOVES; i++)
{
Move *moves = pokemonInfo->moves;
Move *moves = pokemonInfo->moves.moves;
if (moves[i].moveFlags & MOVE_FLAG_EXISTS && moves[i].moveFlags2 & MOVE_FLAG_SEALED)
{
return TRUE;

View File

@@ -23,6 +23,8 @@
#include "text1.h"
#include "text2.h"
#include "thank_you_wonder_mail.h"
#include "wonder_mail_4.h"
#include "wonder_mail_5.h"
static EWRAM_DATA_2 WonderMailStruct_203B2C4 *sUnknown_203B2C4 = {0};
@@ -54,9 +56,24 @@ static EWRAM_DATA_2 WonderMailStruct_203B2C4 *sUnknown_203B2C4 = {0};
#define PROCESS_THANK_YOU_PASSWORD 0x27
#define THANK_YOU_PASSWORD_WRONG 0x28
enum menuActions {
CANCEL_ACTION,
SEND_THANK_YOU_MAIL_ACTION,
GET_THANK_YOU_MAIL_ACTION,
GAME_LINK_ACTION,
// 4 - ???
PASSWORD_ACTION = 5,
YES_ACTION = 0x7,
NO_ACTION,
SEND_ITEM_ACTION,
NO_SEND_ITEM_ACTION,
CONFIRM_ACTION,
INFO_ACTION,
};
const Item gUnknown_80DED44 =
{
1, 0, 0
ITEM_FLAG_EXISTS, 0, ITEM_NOTHING
};
extern char gUnknown_202E5D8[0x50];
@@ -86,11 +103,11 @@ const UnkTextStruct2 gUnknown_80DED60 =
extern const u8 SendItem_Text[];
extern const u8 DontSendItem_Text[];
const MenuItem gUnknown_80DED78[3] =
const MenuItem gUnknown_80DED78[] =
{
{"Confirm", 0xB},
{"Info", 0xC},
{NULL, 0x0},
{"Confirm", CONFIRM_ACTION},
{"Info", INFO_ACTION},
{},
};
// Unused
@@ -105,72 +122,67 @@ const UnkTextStruct2 gUnknown_80DEDA0 =
};
const MenuItem gThankYouMailMainMenuItems[4] =
const MenuItem gThankYouMailMainMenuItems[] =
{
{"Send Thank-You Mail", 0x1},
{"Get Thank-You Mail", 0x2},
{"Cancel", 0x0},
{NULL, 0x0},
{"Send Thank-You Mail", SEND_THANK_YOU_MAIL_ACTION},
{"Get Thank-You Mail", GET_THANK_YOU_MAIL_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
const MenuItem gUnknown_80DEE08[4] =
const MenuItem gUnknown_80DEE08[] =
{
{"Game Link cable", WONDER_MAIL_GAME_LINK},
{"Password", WONDER_MAIL_PASSWORD},
{"Cancel", 0x0},
{NULL, 0x0},
{"Game Link cable", GAME_LINK_ACTION},
{"Password", PASSWORD_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
const MenuItem gUnknown_80DEE44[3] =
const MenuItem gUnknown_80DEE44[] =
{
{"Yes", 0x7},
{"Cancel", 0x0},
{NULL, 0x0},
{"Yes", YES_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
const MenuItem gUnknown_80DEE60[3] =
const MenuItem gUnknown_80DEE60[] =
{
{"Yes", 0x7},
{"No", 0x8},
{NULL, 0x0},
{"Yes", YES_ACTION},
{"No", NO_ACTION},
{},
};
const MenuItem gUnknown_80DEE7C[4] =
const MenuItem gUnknown_80DEE7C[] =
{
{SendItem_Text, 0x9},
{DontSendItem_Text, 0xA},
{"Cancel", 0x0},
{NULL, 0x0},
{SendItem_Text, SEND_ITEM_ACTION},
{DontSendItem_Text, NO_SEND_ITEM_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
ALIGNED(4) static const u8 DontSendItem_Text[] = _("Don{APOSTROPHE}t Send Item");
ALIGNED(4) static const u8 SendItem_Text[] = "Send Item";
const MenuItem gUnknown_80DEEBC[3] =
const MenuItem gUnknown_80DEEBC[] =
{
{"Send w/o Item", 0xA},
{"Cancel", 0x0},
{NULL, 0x0},
{"Send w/o Item", NO_SEND_ITEM_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
const MenuItem gUnknown_80DEEE4[4] =
const MenuItem gUnknown_80DEEE4[] =
{
{"Yes", 0x7},
{"No", 0x8},
{"Cancel", 0x0},
{NULL, 0x0},
{"Yes", YES_ACTION},
{"No", NO_ACTION},
{"Cancel", CANCEL_ACTION},
{},
};
#include "data/thank_you_wonder_mail.h"
extern void sub_8030810(u32);
extern u32 sub_8031DCC(void);
extern void sub_8031E00(void);
extern u32 sub_8030768(u32);
extern s8 sub_80307EC(void);
extern void sub_8030D40(u8, u32);
extern u32 sub_8030DA0();
extern void HandleThankYouMailPelipperMainMenu();
extern void sub_802AAC8();
extern void ReturnToThankYouMailMainMenu();
@@ -211,19 +223,13 @@ extern void HandleThankYouMailPasswordMenu();
extern void sub_802A9FC();
extern void sub_802A828();
extern void sub_802A850();
extern void sub_8030DE4();
extern void sub_803084C();
extern void sub_8031E10();
extern void SetThankYouMailMenuState(u32);
extern void sub_803092C(void);
extern s32 sub_8037B28(u32);
extern u32 sub_8030894(void);
extern void sub_80306A8(u32, u32, u32, u32);
extern u8 sub_800D588(void);
extern u32 GetDungeonTeamRankPts(DungeonLocation *, u32);
extern void sub_8031D70(u8, u32);
extern void sub_803092C(void);
extern void sub_8011C28(u32);
extern u32 sub_8039068(u32, u8 *r1, unkStruct_203B480 *r0);
@@ -543,11 +549,11 @@ void sub_802A090(void)
{
switch(menuAction)
{
case 7:
case YES_ACTION:
SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS);
break;
case 8:
case 0:
case NO_ACTION:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
default:
@@ -601,11 +607,11 @@ void sub_802A174(void)
switch(menuAction)
{
case 0xB:
case CONFIRM_ACTION:
sub_803084C();
SetThankYouMailMenuState(0xe);
break;
case 0xC:
case INFO_ACTION:
sUnknown_203B2C4->fallbackState = 0x2b;
RestoreUnkTextStruct_8006518(sUnknown_203B2C4->unk3BC);
ResetUnusedInputStruct();
@@ -613,7 +619,7 @@ void sub_802A174(void)
sub_8030D40(sUnknown_203B2C4->mailIndex,0);
SetThankYouMailMenuState(0x12);
break;
case 0:
case CANCEL_ACTION:
case 0xD:
sub_8035CC0(sUnknown_203B2C4->unk35C,2);
sub_8030810(1);
@@ -711,11 +717,11 @@ void sub_802A39C(void)
switch(menuAction)
{
case 0xB:
case CONFIRM_ACTION:
sub_801CBB8();
SetThankYouMailMenuState(CONFIRM_ITEM_TO_SEND);
break;
case 0xC:
case INFO_ACTION:
sUnknown_203B2C4->fallbackState = 0x2b;
RestoreUnkTextStruct_8006518(sUnknown_203B2C4->unk3BC);
ResetUnusedInputStruct();
@@ -723,7 +729,7 @@ void sub_802A39C(void)
sub_801B3C0(&sUnknown_203B2C4->unk41C);
SetThankYouMailMenuState(SHOW_ITEM_TO_SEND_INFO);
break;
case 0:
case CANCEL_ACTION:
case 0xD:
sub_8035CC0(sUnknown_203B2C4->unk35C, 3);
sub_801CCD8();
@@ -907,14 +913,14 @@ void sub_802A75C(void)
{
switch(menuAction)
{
case 7:
case YES_ACTION:
// NOTE: if statement is needed to match
if(sUnknown_203B2C4->wonderMailMode)
SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL);
else
SetThankYouMailMenuState(COMMUNICATING_THANK_YOU_MAIL);
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -929,7 +935,7 @@ void HandleConfirmItemtoSendMenu(void)
{
switch(menuAction)
{
case 7:
case YES_ACTION:
mail = GetMailatIndex(sUnknown_203B2C4->mailIndex);
if(sUnknown_203B2C4->unk41C.id != ITEM_NOTHING)
{
@@ -938,10 +944,10 @@ void HandleConfirmItemtoSendMenu(void)
gTeamInventoryRef->teamStorage[sUnknown_203B2C4->unk41C.id]--;
SetThankYouMailMenuState(0x29);
break;
case 8:
case NO_ACTION:
SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND);
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -997,7 +1003,7 @@ void sub_802A8BC(void)
{
switch(menuAction)
{
case 0xA:
case NO_SEND_ITEM_ACTION:
switch(sUnknown_203B2C4->wonderMailMethod)
{
case WONDER_MAIL_GAME_LINK:
@@ -1009,7 +1015,7 @@ void sub_802A8BC(void)
break;
}
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -1023,7 +1029,7 @@ void sub_802A910(void)
{
switch(menuAction)
{
case 9:
case SEND_ITEM_ACTION:
if(sub_801CF14(0))
{
SetThankYouMailMenuState(THANK_YOU_MAIL_STORAGE_EMPTY);
@@ -1033,7 +1039,7 @@ void sub_802A910(void)
SetThankYouMailMenuState(PROMPT_ITEM_TO_SEND);
}
break;
case 0xA:
case NO_SEND_ITEM_ACTION:
switch(sUnknown_203B2C4->wonderMailMethod)
{
case WONDER_MAIL_GAME_LINK:
@@ -1045,7 +1051,7 @@ void sub_802A910(void)
break;
}
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -1068,7 +1074,7 @@ void sub_802A9A8(void)
{
switch(menuAction)
{
case 0x7:
case YES_ACTION:
switch(sUnknown_203B2C4->wonderMailMethod)
{
case WONDER_MAIL_GAME_LINK:
@@ -1080,7 +1086,7 @@ void sub_802A9A8(void)
break;
}
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -1094,10 +1100,10 @@ void sub_802A9FC(void)
{
switch(menuAction)
{
case 0x7:
case YES_ACTION:
SetThankYouMailMenuState(PROMPT_THANK_YOU_PASSWORD);
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -1141,7 +1147,7 @@ void HandleMailCommunicationMenu(void)
break;
}
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(ANYTHING_ELSE_THANK_YOU_MAIN_MENU);
break;
}
@@ -1173,7 +1179,7 @@ void HandleThankYouMailPelipperMainMenu(void)
{
switch(menuAction)
{
case 1:
case SEND_THANK_YOU_MAIL_ACTION:
sUnknown_203B2C4->unk40 = 6;
sUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_SEND;
if(CountMailType(5) == 0)
@@ -1185,12 +1191,12 @@ void HandleThankYouMailPelipperMainMenu(void)
SetThankYouMailMenuState(PROMPT_THANK_YOU_TO_SEND);
}
break;
case 2:
case GET_THANK_YOU_MAIL_ACTION:
sUnknown_203B2C4->unk40 = 7;
sUnknown_203B2C4->wonderMailMode = WONDER_MAIL_MODE_RECEIVE;
SetThankYouMailMenuState(SELECT_THANK_YOU_MAIL_COMMS);
break;
case 0:
case CANCEL_ACTION:
SetThankYouMailMenuState(2);
break;
}

View File

@@ -5,12 +5,14 @@
#include "code_8045A00.h"
#include "code_80521D0.h"
#include "code_8077274_1.h"
#include "code_807CD9C.h"
#include "code_808417C.h"
#include "constants/trap.h"
#include "constants/type.h"
#include "dungeon_engine.h"
#include "dungeon_items.h"
#include "dungeon_map_access.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_random.h"
#include "dungeon_util.h"
#include "items.h"
@@ -44,6 +46,9 @@ extern u8 *gUnknown_80FED04[];
extern u8 *gUnknown_80FED0C[];
extern u8 *gUnknown_80FDAA0[];
extern u8 *gUnknown_80FDA80[];
extern u8 *gUnknown_80FDB04[];
extern u8 *gUnknown_80FDB2C[];
extern s16 gUnknown_80F4E0E;
extern s16 gUnknown_80F4F84;
@@ -88,7 +93,6 @@ void sub_8049ED4(void);
void sub_80522F4(Entity *pokemon, Entity *target, const char r2[]);
u8 sub_803D6FC(void);
Entity *sub_8045684(u8, Position *, u8);
extern void sub_807D148(Entity *pokemon, Entity *target, u32 r2, Position *r3);
extern void sub_807DF38(Entity *pokemon, Entity *target, Position *pos, u32, u8 moveType, s16);
void sub_807FC3C(Position *pos, u32 trapID, u32 param_3)
@@ -651,7 +655,7 @@ void HandlePPZeroTrap(Entity *param_1,Entity *param_2)
counter = 0;
for(i = 0; i < MAX_MON_MOVES; move++, i++)
{
move = &info->moves[i];
move = &info->moves.moves[i];
if (((move->moveFlags & MOVE_FLAG_EXISTS) != 0) && (move->PP != 0)) {
moveStack[counter] = move;
indexStack[counter] = i;
@@ -676,3 +680,46 @@ void HandleWonderTile(Entity *pokemon, Entity *target)
{
sub_8079E34(pokemon, target, FALSE);
}
void HandleSealTrap(Entity *param_1,Entity *param_2)
{
Move *move;
s32 moveIndex;
s32 i;
s32 counter;
EntityInfo *info;
Move *moveStack [MAX_MON_MOVES];
bool8 flag = FALSE;
if (param_2 != NULL && !HasSafeguardStatus(param_1, param_2, TRUE)) {
info = param_2->info;
counter = 0;
for(i = 0; i < MAX_MON_MOVES;i++)
{
move = &info->moves.moves[i];
if ((move->moveFlags & MOVE_FLAG_EXISTS) && !(move->moveFlags2 & MOVE_FLAG_SEALED)) {
moveStack[counter] = move;
counter++;
}
}
if (counter != 0) {
moveIndex = DungeonRandInt(counter);
moveStack[moveIndex]->moveFlags2 |= MOVE_FLAG_SEALED;
sub_80928C0(gFormatItems,moveStack[moveIndex], NULL);
flag = TRUE;
}
if(flag)
sub_80522F4(param_1,param_2,*gUnknown_80FDB04);
else
sub_80522F4(param_1,param_2,*gUnknown_80FDB2C);
}
}
void HandleWhirlwindTrap(Entity *pokemon, Entity *target)
{
if(target)
{
sub_807CD9C(pokemon, target, DungeonRandInt(NUM_DIRECTIONS));
}
}

View File

@@ -44,7 +44,7 @@ void sub_8083048(unkStruct_8094924 *param_1, u32);
void sub_80818C8(unkStruct_8094924 *param_1, JoinedAt *param_2);
void SaveActionContainer(unkStruct_8094924 *param_1, ActionContainer *param_2);
void sub_8081B34(unkStruct_8094924 *r0, s16 *r1);
void SaveEntityMoves(unkStruct_8094924 *r0, Move *move);
void SaveEntityMoves(unkStruct_8094924 *r0, Moves *move);
void sub_8081824(unkStruct_8094924 *param_1, u32 param_2);
void sub_80817B0(unkStruct_8094924 *param_1, u32 param_2);
void SavePosition(void*, Position *);
@@ -64,7 +64,7 @@ void SaveImmobilizeStatus(unkStruct_8094924 *param_1, Immobilize *param_2);
void SaveNonVolatileStatus(unkStruct_8094924 *param_1, NonVolatile *param_2);
void SaveEntitySleep(unkStruct_8094924 *param_1, Sleep* param_2);
void SaveTactic(unkStruct_8094924 *param_1, u8 param_2);
void SaveHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2);
void SaveDungeonHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2);
void SaveChargingStatus(unkStruct_8094924 *param_1, Charging *param_2);
void SaveProtectionStatus(unkStruct_8094924 *param_1, Protection *param_2);
void SaveWaitingStatus(unkStruct_8094924 *param_1, Waiting *param_2);
@@ -404,7 +404,7 @@ void SaveEntity(unkStruct_8094924 *param_1, Entity *param_2)
SaveIQFlags(param_1,temp2);
SaveIQFlags(param_1,temp1);
SaveTactic(param_1,*puStack_a0);
SaveHiddenPower(param_1,psStack_a4);
SaveDungeonHiddenPower(param_1,psStack_a4);
sub_8083078(param_1,*puStack_9c);
sub_8083078(param_1,*puStack_98);
sub_8083078(param_1,*puStack_94);
@@ -442,7 +442,7 @@ void SaveEntity(unkStruct_8094924 *param_1, Entity *param_2)
sub_8083060(param_1,info->stockpileStage);
sub_8083060(param_1,info->unk113);
sub_8083060(param_1,(u8)info->moveRandomly);
SaveEntityMoves(param_1,info->moves);
SaveEntityMoves(param_1,&info->moves);
sub_8081B34(param_1,(s16 *)&info->belly);
sub_8081B34(param_1,(s16 *)&info->maxBelly);
sub_80830B4(param_1,info->aiNextToTarget);
@@ -619,7 +619,7 @@ void SaveTactic(unkStruct_8094924 *param_1, u8 param_2)
sub_8082FA8(param_1, &param_2, 1);
}
void SaveHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2)
void SaveDungeonHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2)
{
sub_8083048(param_1, param_2->hiddenPowerBasePower);
sub_808180C(param_1, param_2->hiddenPowerType);
@@ -743,14 +743,14 @@ void SaveEntityMove(unkStruct_8094924 *r0, Move *r1)
sub_8083060(r0, r1->ginseng);
}
void SaveEntityMoves(unkStruct_8094924 *r0, Move *move)
void SaveEntityMoves(unkStruct_8094924 *r0, Moves *move)
{
s32 index;
for(index = 0; index < MAX_MON_MOVES; index++)
{
SaveEntityMove(r0, &move[index]);
SaveEntityMove(r0, &move->moves[index]);
}
sub_8083060(r0, *(u8 *)(move + 0x4)); // Struggle Move flags?
sub_8083060(r0, move->struggleMoveFlags); // Struggle Move flags?
}
void sub_8081B34(unkStruct_8094924 *r0, s16 *r1)

View File

@@ -114,7 +114,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
if (sub_800A2A0(param_1)) break;
if (((normalOrFightingType) && (targetInfo->types[index] == TYPE_GHOST)) && (targetInfo->exposed == FALSE)) {
effectiveness = EFFECTIVENESS_IMMUNE;
gDungeon->pokemonExposed = TRUE;
gDungeon->unk134.pokemonExposed = TRUE;
}
else {
effectiveness = gTypeEffectivenessChart[type][targetInfo->types[index]];
@@ -123,7 +123,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
sub_800A34C(param_1,param_1,local_48.unk0[effectiveness]);
}
local_38[index] = effectiveness;
gDungeon->unk13C[index] = effectiveness;
gDungeon->unk134.unk13C[index] = effectiveness;
}
param_5->effectiveness = gUnknown_80F54B4[local_38[0]][local_38[1]];
@@ -135,11 +135,11 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
}
if (((type == TYPE_FIRE) || (type == TYPE_ICE)) && (HasAbility(target,ABILITY_THICK_FAT))) {
gDungeon->unk16D = TRUE;
gDungeon->unk134.unk16D = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
if ((type == TYPE_FIRE) && (GetFlashFireStatus(target) != FLASH_FIRE_STATUS_NONE)) {
gDungeon->fill16E[0] = TRUE;
gDungeon->unk134.fill16E[0] = TRUE;
sub_800A020(param_1,0);
param_5->effectiveness = EFFECTIVENESS_IMMUNE;
param_5->unkD = 0;
@@ -147,7 +147,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
bVar4 = FALSE;
}
if ((type == TYPE_GROUND) && (HasAbility(target, ABILITY_LEVITATE))) {
gDungeon->fill16E[1] = TRUE;
gDungeon->unk134.fill16E[1] = TRUE;
sub_800A020(param_1,0);
param_5->effectiveness = EFFECTIVENESS_IMMUNE;
param_5->unkD = 0;
@@ -158,7 +158,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
torrentFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
torrentVisualFlag = SetVisualFlags(pokemonInfo,0x80,torrentFlag);
if (torrentFlag) {
gDungeon->fill16E[2] = TRUE;
gDungeon->unk134.fill16E[2] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F0C);
}
if (torrentVisualFlag) {
@@ -170,7 +170,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
overgrowFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
overgrowVisualFlag = SetVisualFlags(pokemonInfo,2,overgrowFlag);
if (overgrowFlag) {
gDungeon->fill16E[3] = TRUE;
gDungeon->unk134.fill16E[3] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F0C);
}
if (overgrowVisualFlag) {
@@ -182,7 +182,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
swarmFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
swarmVisualFlag = SetVisualFlags(pokemonInfo,0x10,swarmFlag);
if (swarmFlag) {
gDungeon->fill16E[4] = TRUE;
gDungeon->unk134.fill16E[4] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F0C);
}
if (swarmVisualFlag) {
@@ -194,7 +194,7 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
blazeFlag = pokemonInfo->maxHPStat / 4 >= pokemonInfo->HP;
blazeVisualFlag = SetVisualFlags(pokemonInfo,0x20,blazeFlag);
if (blazeFlag) {
gDungeon->fill16E[5] = TRUE;
gDungeon->unk134.fill16E[5] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F0C);
}
if (blazeVisualFlag) {
@@ -203,44 +203,44 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
}
}
if (!(sub_800A2A0(param_1)) && (MonsterIsType(pokemon, type))) {
gDungeon->fill16E[6] = TRUE;
gDungeon->unk134.fill16E[6] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F14);
}
weather = GetApparentWeather(pokemon);
if (weather == WEATHER_SUNNY) {
if (type == TYPE_FIRE) {
gDungeon->unk16C = TRUE;
gDungeon->unk134.unk16C = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F14);
}
else if (type == TYPE_WATER) {
gDungeon->unk16C = TRUE;
gDungeon->unk134.unk16C = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
}
if (weather == WEATHER_RAIN) {
if (type == TYPE_FIRE) {
gDungeon->unk16B = TRUE;
gDungeon->unk134.unk16B = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
else if (type == TYPE_WATER) {
gDungeon->unk16B = TRUE;
gDungeon->unk134.unk16B = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F14);
}
}
if ((weather == WEATHER_CLOUDY) && (type != TYPE_NORMAL)) {
sub_800A34C(param_1,param_1, gUnknown_8106F64);
gDungeon->unk16A = TRUE;
gDungeon->unk134.unk16A = TRUE;
}
if (((gDungeon->weather.mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) {
gDungeon->fill16E[7] = TRUE;
gDungeon->unk134.fill16E[7] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
if ((gDungeon->weather.waterSportTurns != 0) && (type == TYPE_FIRE)) {
gDungeon->fill16E[8] = TRUE;
gDungeon->unk134.fill16E[8] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
if ((type == TYPE_ELECTRIC) && (pokemonInfo->charging.chargingStatus == STATUS_CHARGING)) {
gDungeon->fill16E[9] = TRUE;
gDungeon->unk134.fill16E[9] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F0C);
}
}
@@ -293,7 +293,7 @@ s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType)
if (checkExposed && *targetType == TYPE_GHOST && !targetData->exposed)
{
effectiveness = 0;
gDungeon->pokemonExposed = TRUE;
gDungeon->unk134.pokemonExposed = TRUE;
}
else
{

View File

@@ -11,7 +11,6 @@
extern void TriggerWeatherAbilities(void);
extern void sub_807EAA0(u32, u32);
void sub_807E5E4(u8);
u8 GetApparentWeather(Entity *pokemon)
{

View File

@@ -22,7 +22,7 @@ static void sub_8021820(void);
static void sub_8021878(void);
static void PopulateWigglytuffShopFriendAreaInfoScreen(void);
static void sub_8021A60(void);
static s32 sub_8021B58(s16 species);
static s32 CheckSpeciesinWigglytuffFriendArea(s16 species);
bool8 CreateWigglytuffShopFriendAreaMenu(u8 friendArea, bool8 a1, s32 a2)
{
@@ -132,7 +132,7 @@ static void PopulateWigglytuffShopFriendAreaInfoScreen(void)
static void sub_8021A60(void)
{
s32 sVar4;
s32 areaIndex;
s32 iVar6;
s32 index;
PokemonStruct1 *pokeStruct;
@@ -158,9 +158,9 @@ static void sub_8021A60(void)
if (!sub_8098134(index))
continue;
sVar4 = sub_8021B58(index);
if (sVar4 != -1)
sWigglytuffShop2Work->pokemonStatus[sVar4] = POKEMON_SEEN;
areaIndex = CheckSpeciesinWigglytuffFriendArea(index);
if (areaIndex != -1)
sWigglytuffShop2Work->pokemonStatus[areaIndex] = POKEMON_SEEN;
}
for (index = 0; index < NUM_MONSTERS; index++) {
@@ -168,13 +168,14 @@ static void sub_8021A60(void)
if (!((u8)pokeStruct->unk0 & 1))
continue;
sVar4 = sub_8021B58(pokeStruct->speciesNum);
if (sVar4 != -1)
sWigglytuffShop2Work->pokemonStatus[sVar4] = POKEMON_RECRUITED;
areaIndex = CheckSpeciesinWigglytuffFriendArea(pokeStruct->speciesNum);
if (areaIndex != -1)
sWigglytuffShop2Work->pokemonStatus[areaIndex] = POKEMON_RECRUITED;
}
}
static s32 sub_8021B58(s16 species)
/* Return index of pokemon if in the friend area, else return -1 */
static s32 CheckSpeciesinWigglytuffFriendArea(s16 species)
{
s32 baseSpecies;
s32 i;

View File

@@ -43,9 +43,9 @@ static void SetWigglytuffState(s32 newState);
static void UpdateWigglytuffDialogue(void);
static void sub_8021D5C(void);
static void sub_80222C8(void);
static void BuildWigglytuffMainMenu(void);
static void sub_8022380(void);
static void sub_8022460(void);
static void HandleWigglytuffMainMenu(void);
static void sub_8022538(void);
static void sub_80225C8(void);
static void sub_8022668(void);
@@ -93,7 +93,7 @@ u32 sub_8021C5C(void)
switch (sWigglytuffShop3Work->state) {
case WIGGLYTUFF_INIT:
case WIGGLYTUFF_MAIN_MENU:
sub_8022460();
HandleWigglytuffMainMenu();
break;
case WIGGLYTUFF_UNK9:
case WIGGLYTUFF_UNKA:
@@ -176,11 +176,11 @@ static void UpdateWigglytuffDialogue(void)
switch (sWigglytuffShop3Work->state) {
case WIGGLYTUFF_INIT:
sub_80222C8();
BuildWigglytuffMainMenu();
sub_8014248(gCommonWigglytuff[sWigglytuffShop3Work->mode][WIGGLY_DLG_00], 0, sWigglytuffShop3Work->menuAction1, sWigglytuffShop3Work->unk1C, sWigglytuffShop3Work->unk5C, 4, 0, sWigglytuffShop3Work->unkCC, 12);
break;
case WIGGLYTUFF_MAIN_MENU:
sub_80222C8();
BuildWigglytuffMainMenu();
sub_8014248(gCommonWigglytuff[sWigglytuffShop3Work->mode][WIGGLY_DLG_01], 0, sWigglytuffShop3Work->menuAction1, sWigglytuffShop3Work->unk1C, sWigglytuffShop3Work->unk5C, 4, 0, sWigglytuffShop3Work->unkCC, 12);
break;
case FRIEND_AREA_SELECT_BUY:
@@ -328,7 +328,7 @@ static void UpdateWigglytuffDialogue(void)
}
}
static void sub_80222C8(void)
static void BuildWigglytuffMainMenu(void)
{
s32 i;
s32 index = 0;
@@ -416,7 +416,7 @@ static void CreateWigglytuffConfirmFriendAreaMenu(void)
sWigglytuffShop3Work->unk1C[index].menuAction = CANCEL_ACTION;
}
static void sub_8022460(void)
static void HandleWigglytuffMainMenu(void)
{
s32 menuAction;

View File

@@ -21,13 +21,14 @@
#include "text1.h"
#include "text2.h"
#include "wonder_mail.h"
#include "wonder_mail_4.h"
#include "wonder_mail_5.h"
static EWRAM_DATA_2 WonderMailStruct_203B2C0 *sUnknown_203B2C0 = {0};
extern void sub_8011C28(u32);
extern void sub_809927C(u8);
extern bool8 HasNoWonderMailType(u32);
extern u32 sub_8031050();
extern void sub_80310B4();
@@ -36,28 +37,15 @@ extern char gAvailablePokemonNames[0x50];
extern void nullsub_130(void);
extern void sub_8028348(void);
extern void sub_803084C();
extern u32 sub_8030768(u32);
extern s8 sub_80307EC();
extern void sub_8030D40(u8, u32);
extern void sub_8030810(u32);
extern u32 sub_8030DA0(void);
extern void sub_8030DE4(void);
extern void sub_803092C(void);
extern u32 sub_8039068(u32, u8 *r1, unkStruct_203B480 *r0);
extern void sub_8095274(u32);
extern u32 sub_8031DCC();
extern void sub_8031E10();
extern void sub_8031E00();
extern void sub_8031E10(void);
extern void sub_803084C(void);
extern void sub_8030DE4();
extern void sub_80306A8(u32, u32, u32, u32);
extern s32 sub_8037B28(u32);
extern void sub_8031D70(u8, u32);
extern u32 sub_8023CE8(void);
extern u32 sub_8030894(void);
extern void sub_8030F58(u32);
extern void sub_8029B34(void);
extern void sub_8029AD8(void);
@@ -111,9 +99,7 @@ extern void sub_8029044(void);
extern void sub_8028CFC(void);
extern void sub_8028D4C(void);
extern void sub_8031E10(void);
extern void sub_803084C(void);
extern void sub_80310B4(void);
extern void sub_8030DE4(void);
extern const u8 DontSendPokemon_80DDB80[];
extern const u8 SendPokemon_80DDB98[];
@@ -632,7 +618,7 @@ void sub_8028348(void)
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(NULL, TRUE, TRUE);
// SOS Mail
sub_80306A8(2, 0, 0, 6);
sub_80306A8(WONDER_MAIL_TYPE_SOS_1, 0, 0, 6);
}
break;
case 0x20:
@@ -1356,7 +1342,7 @@ void sub_802939C(void)
}
else
{
SetFriendRescueCounterState(0x2);
SetFriendRescueCounterState(FRIEND_RESCUE_EXIT_PRE);
}
}
}
@@ -1400,7 +1386,7 @@ void sub_80293F4(void)
mail.mailType = 2;
sub_80951BC(&mail);
xxx_info_box_80141B4(gWonderMailAOKMailReceivedText, 0, &sUnknown_203B2C0->faceFile, 0x101);
SetFriendRescueCounterState(0x23);
SetFriendRescueCounterState(RECEIVED_FRIEND_SOS_MAIL);
break;
case 23:
case 24:

View File

@@ -37,6 +37,11 @@ struct unkStruct_203B2C8
u32 fill13C;
};
enum States {
INIT_STATE,
EXIT_STATE = 5
};
static EWRAM_DATA_2 struct unkStruct_203B2C8 *sUnknown_203B2C8 = {0};
extern void sub_80920D8(u8 *buffer);
@@ -78,9 +83,8 @@ ALIGNED(4) const char gUnknown_80DFB14[] = _(
" Please give me a shout if\n"
"you would like to send {COLOR_1 LIGHT_BLUE}A-OK Mail{END_COLOR_TEXT_1}.");
u32 sub_802B2D4(void)
s32 sub_802B2D4(void)
{
s32 iVar1;
OpenedFile *faceFile;
ResetUnusedInputStruct();
@@ -97,19 +101,20 @@ u32 sub_802B2D4(void)
sUnknown_203B2C8->unk12 = 0;
sUnknown_203B2C8->unkC = 2;
sUnknown_203B2C8->unkE = 8;
if (sub_8099394(&sUnknown_203B2C8->unk1) == 1) {
sub_802B548(0);
iVar1 = 1;
if (sub_8099394(&sUnknown_203B2C8->unk1) != 1) {
return 0;
}
else
iVar1 = 0;
return iVar1;
{
sub_802B548(INIT_STATE);
return 1;
}
}
u32 sub_802B358(void)
{
switch(sUnknown_203B2C8->currState) {
case 0:
case INIT_STATE:
sub_802B560();
break;
case 1:
@@ -124,7 +129,7 @@ u32 sub_802B358(void)
case 4:
sub_802B624();
break;
case 5:
case EXIT_STATE:
return 3;
}
return 0;
@@ -151,7 +156,7 @@ void sub_802B3E0(void)
char teamNameBuffer[40];
switch(sUnknown_203B2C8->currState) {
case 0:
case INIT_STATE:
if (sub_80023E4(0)) {
// Copy Team Name to buffer
sub_80920D8(teamNameBuffer);
@@ -179,7 +184,7 @@ void sub_802B3E0(void)
sUnknown_203B2C8->unk114.itemRewards[2] = ITEM_NOTHING;
sUnknown_203B2C8->unk114.quantity = 10;
sUnknown_203B2C8->unk114.friendAreaReward = 0;
sub_802F204(&sUnknown_203B2C8->unk114, 0);
sub_802F204(&sUnknown_203B2C8->unk114, FALSE);
break;
case 2:
// I hope you will keep on rescuing your friends
@@ -260,6 +265,6 @@ void sub_802B624(void)
s32 temp;
if (sub_80144A4(&temp) == 0) {
sub_802B548(5);
sub_802B548(EXIT_STATE);
}
}

View File

@@ -14,6 +14,7 @@
#include "text1.h"
#include "text2.h"
#include "structs/struct_sub80095e4.h"
#include "wonder_mail_4.h"
struct unkStruct_203B320
{
@@ -53,7 +54,7 @@ extern const u8 ThanksList[];
extern const u8 CompletedJobs[];
extern const u8 OkdRescue[];
const u8 * const gUnknown_80E086C[] =
const u8 * const gUnknown_80E086C[MAX_WONDER_MAIL_TYPES] =
{
SOSList,
RequestList,
@@ -74,10 +75,8 @@ ALIGNED(4) const u8 SOSMail[] = "SOS Mail";
ALIGNED(4) const u8 RequestList[] = "Request List";
ALIGNED(4) const u8 SOSList[] = "SOS List";
extern bool8 HasNoWonderMailType(u32);
extern s32 sub_8030A74(void);
extern void sub_80308A0(void);
extern void sub_803092C(void);
s32 sub_8030A74(void);
void sub_80308A0(void);
u32 sub_80306A8(u32 wonderMailType, u32 r1, UnkTextStruct2_sub *r2, u32 r3)
{
@@ -125,7 +124,7 @@ u32 sub_8030768(u8 r0)
PlayMenuSoundEffect(0);
return 3;
default:
if(sub_80138B8(&gUnknown_203B320->s28.s0.input, 1) != 0)
if(sub_80138B8(&gUnknown_203B320->s28.s0.input, TRUE) != 0)
{
sub_80308A0();
sub_803092C();
@@ -152,7 +151,7 @@ void sub_8030810(u8 r0)
AddMenuCursorSprite(&gUnknown_203B320->s28.s0.input);
}
void sub_803084C()
void sub_803084C(void)
{
if(gUnknown_203B320 != NULL)
{
@@ -164,7 +163,7 @@ void sub_803084C()
}
}
u8 *sub_8030894()
u8 *sub_8030894(void)
{
return gUnknown_203B320->unk0;
}

View File

@@ -1,3 +1,4 @@
#include "constants/input.h"
#include "global.h"
#include "globaldata.h"
#include "code_800D090.h"
@@ -19,7 +20,7 @@ struct unkStruct_203B324
// size: 0x78
MenuInputStructSub unk0;
u8 mailIndex;
u32 unk10;
u32 windowID;
UnkTextStruct2 *unk14;
UnkTextStruct2 unk18[4];
};
@@ -57,27 +58,27 @@ extern void sub_8030DD4(void);
void sub_8030E2C(void);
void sub_8030E48(void);
bool8 sub_8030D40(u8 mailIndex, s32 param_2)
bool8 sub_8030D40(u8 mailIndex, s32 windowID)
{
gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8);
gUnknown_203B324->mailIndex = mailIndex;
sub_801317C(&gUnknown_203B324->unk0);
gUnknown_203B324->unk10 = param_2;
gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[param_2];
gUnknown_203B324->windowID = windowID;
gUnknown_203B324->unk14 = &gUnknown_203B324->unk18[windowID];
RestoreUnkTextStruct_8006518(gUnknown_203B324->unk18);
gUnknown_203B324->unk18[gUnknown_203B324->unk10] = gUnknown_80E091C;
gUnknown_203B324->unk18[gUnknown_203B324->windowID] = gUnknown_80E091C;
sub_8030DD4();
return TRUE;
}
u8 sub_8030DA0(void)
u32 sub_8030DA0(void)
{
switch(sub_8012A64(&gUnknown_203B324->unk0, gUnknown_203B324->unk10))
switch(sub_8012A64(&gUnknown_203B324->unk0, gUnknown_203B324->windowID))
{
case 2:
case INPUT_B_BUTTON:
PlayMenuSoundEffect(1);
return 2;
case 1:
case INPUT_A_BUTTON:
PlayMenuSoundEffect(0);
return 3;
default:
@@ -95,7 +96,7 @@ void sub_8030DE4(void)
{
if(gUnknown_203B324 != NULL)
{
gUnknown_203B324->unk18[gUnknown_203B324->unk10] = gUnknown_80E0900;
gUnknown_203B324->unk18[gUnknown_203B324->windowID] = gUnknown_80E0900;
ResetUnusedInputStruct();
xxx_call_save_unk_text_struct_800641C(gUnknown_203B324->unk18, TRUE, TRUE);
MemoryFree(gUnknown_203B324);
@@ -117,8 +118,8 @@ void sub_8030E48(void)
u8 buffer [256];
mail = &gUnknown_203B480[gUnknown_203B324->mailIndex];
sub_80073B8(gUnknown_203B324->unk10);
stack.unk0[0] = gUnknown_203B324->unk10;
sub_80073B8(gUnknown_203B324->windowID);
stack.unk0[0] = gUnknown_203B324->windowID;
stack.mailTitleType = 7;
stack.mailMissionType = MISSION_TYPE_FRIEND_RESCUE;
stack.mailStatus = MAIL_STATUS_SUSPENDED;
@@ -150,8 +151,8 @@ void sub_8030E48(void)
}
CreateRescueDescription(&stack);
uVar2 = mail->unk10.unk10_u16 % 10000;
PrintStringOnWindow(10,0x68,gUnknown_80E0934,gUnknown_203B324->unk10,0); // ID:
PrintStringOnWindow(10,0x68,gUnknown_80E0934,gUnknown_203B324->windowID,0); // ID:
sprintfStatic(buffer,gUnknown_80E0938,uVar2); // %-4d
PrintStringOnWindow(0x44,0x68,buffer,gUnknown_203B324->unk10,0);
sub_80073E0(gUnknown_203B324->unk10);
PrintStringOnWindow(0x44,0x68,buffer,gUnknown_203B324->windowID,0);
sub_80073E0(gUnknown_203B324->windowID);
}

View File

@@ -8,8 +8,8 @@
#include "code_8094F88.h"
#include "menu_input.h"
#include "code_80130A8.h"
extern bool8 HasNoWonderMailType(u32);
#include "wonder_mail_4.h"
#include "wonder_mail_5.h"
struct unkStruct_203B328
{
@@ -32,18 +32,27 @@ static EWRAM_DATA_2 struct unkStruct_203B328 *gUnknown_203B328 = {0};
extern unkStruct_203B480 *gUnknown_203B480;
enum MenuActions {
CANCEL_ACTION = 1,
YES_ACTION,
NO_ACTION,
DELETE_ACTION,
INFO_ACTION,
DELETE_ALL_MAIL_ACTION, // Unused
};
const MenuItem gUnknown_80E0948[] =
{
{"Yes", 0x2},
{"No", 0x3},
{NULL, 0x1}
{"Yes", YES_ACTION},
{"No", NO_ACTION},
{NULL, CANCEL_ACTION}
};
const MenuItem gUnknown_80E0968[] =
{
{"Delete", 0x4},
{"Info", 0x5},
{NULL, 0x1}
{"Delete", DELETE_ACTION},
{"Info", INFO_ACTION},
{NULL, CANCEL_ACTION}
};
const UnkTextStruct2 gUnknown_80E0990 = {
@@ -79,35 +88,19 @@ ALIGNED(4) const u8 gUnknown_80E0A0C[] = _(
" ...Uh{COMMA} no?\n"
"You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE}A-OK Mail{END_COLOR_TEXT_1}.");
extern void sub_80306A8(s32, u32, u32, u32);
extern void sub_8031300(void);
extern void sub_803136C(void);
extern void sub_80313D8(u32);
extern void sub_8031498(void);
extern void sub_803084C(void);
extern void sub_80310FC();
extern void sub_8031258();
extern u32 sub_8030768(u32);
extern u8 sub_80307EC(void);
extern u32 sub_8030DA0(void);
extern void sub_8030DE4();
extern void sub_8030810(u32);
extern void sub_803092C(void);
extern void sub_8030D40(u8, u32);
static void sub_8031300(void);
static void HandleWonderMail6MainMenu(void);
static void HandleWonderMail6DeleteMailMenu(u32);
static void sub_8031498(void);
static void sub_80310FC();
static void sub_8031258();
enum States {
INIT_STATE = 0,
DELETE_SINGLE_MAIL_STATE = 2,
DELETE_ALL_MAIL_STATE = 3,
};
enum MenuActions {
CANCEL_ACTION = 1,
YES_ACTION,
NO_ACTION,
DELETE_ACTION,
INFO_ACTION
INIT_STATE,
MAIN_MENU,
DELETE_SINGLE_MAIL_STATE,
DELETE_ALL_MAIL_STATE,
INFO_STATE,
};
bool8 sub_8030F58(u32 wonderMailType)
@@ -158,14 +151,14 @@ s32 sub_8031050(void)
case INIT_STATE:
sub_8031300();
break;
case 1:
sub_803136C();
case MAIN_MENU:
HandleWonderMail6MainMenu();
break;
case DELETE_SINGLE_MAIL_STATE:
case DELETE_ALL_MAIL_STATE:
sub_80313D8(gUnknown_203B328->state);
HandleWonderMail6DeleteMailMenu(gUnknown_203B328->state);
break;
case 4:
case INFO_STATE:
sub_8031498();
break;
case 5:
@@ -192,7 +185,7 @@ void sub_80310E4(u32 newState)
sub_8031258();
}
void sub_80310FC(void)
static void sub_80310FC(void)
{
RestoreUnkTextStruct_8006518(gUnknown_203B328->unkA8);
switch(gUnknown_203B328->state)
@@ -202,7 +195,7 @@ void sub_80310FC(void)
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
gUnknown_203B328->unkA8[3] = gUnknown_80E0990;
break;
case 1:
case MAIN_MENU:
gUnknown_203B328->unkA8[1] = gUnknown_80E09A8;
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
gUnknown_203B328->unkA8[3] = gUnknown_80E0990;
@@ -213,7 +206,7 @@ void sub_80310FC(void)
gUnknown_203B328->unkA8[2] = gUnknown_80E09C0;
sub_8012CAC(&gUnknown_203B328->unkA8[2], gUnknown_80E0948);
break;
case 4:
case INFO_STATE:
gUnknown_203B328->unkA8[0] = gUnknown_80E0990;
gUnknown_203B328->unkA8[1] = gUnknown_80E0990;
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
@@ -230,24 +223,24 @@ void sub_80310FC(void)
xxx_call_save_unk_text_struct_800641C(gUnknown_203B328->unkA8, TRUE, TRUE);
}
void sub_8031258(void)
static void sub_8031258(void)
{
switch(gUnknown_203B328->state)
{
case INIT_STATE:
sub_8030810(1);
break;
case 1:
case MAIN_MENU:
sub_803092C();
sub_8012D60(&gUnknown_203B328->unk8, gUnknown_80E0968, 0, 0, 4, 1);
sub_8012D60(&gUnknown_203B328->unk8, gUnknown_80E0968, NULL, NULL, DELETE_ACTION, 1);
break;
case DELETE_SINGLE_MAIL_STATE:
case DELETE_ALL_MAIL_STATE:
sub_803092C();
sub_8012EA4(&gUnknown_203B328->unk8, 0);
sub_8012D60(&gUnknown_203B328->unk58, gUnknown_80E0948, 0, 0, 3, 2);
sub_8012D60(&gUnknown_203B328->unk58, gUnknown_80E0948, NULL, NULL, NO_ACTION, 2);
break;
case 4:
case INFO_STATE:
sub_8030D40(gUnknown_203B328->mailIndex, 3);
break;
case 5:
@@ -257,17 +250,17 @@ void sub_8031258(void)
}
}
void sub_8031300(void)
static void sub_8031300(void)
{
switch(sub_8030768(1))
{
case 3:
gUnknown_203B328->mailIndex = sub_80307EC();
sub_80310E4(1);
sub_80310E4(MAIN_MENU);
break;
case 4:
gUnknown_203B328->mailIndex = sub_80307EC();
sub_80310E4(4);
sub_80310E4(INFO_STATE);
break;
case 2:
sub_80310E4(6);
@@ -278,35 +271,35 @@ void sub_8031300(void)
}
}
void sub_803136C(void)
static void HandleWonderMail6MainMenu(void)
{
s32 menuAction;
menuAction = 0;
sub_8030768(0);
if (sub_8012FD8(&gUnknown_203B328->unk8) == '\0') {
if (!sub_8012FD8(&gUnknown_203B328->unk8)) {
sub_8013114(&gUnknown_203B328->unk8,&menuAction);
}
switch(menuAction)
{
case CANCEL_ACTION:
sub_80310E4(0);
sub_80310E4(INIT_STATE);
break;
case 6:
sub_80310E4(3);
case DELETE_ALL_MAIL_ACTION:
sub_80310E4(DELETE_ALL_MAIL_STATE);
break;
case DELETE_ACTION:
sub_80310E4(2);
sub_80310E4(DELETE_SINGLE_MAIL_STATE);
break;
case INFO_ACTION:
sub_80310E4(4);
sub_80310E4(INFO_STATE);
break;
}
}
void sub_80313D8(u32 state)
static void HandleWonderMail6DeleteMailMenu(u32 state)
{
s32 index;
s32 menuAction;
@@ -315,7 +308,7 @@ void sub_80313D8(u32 state)
menuAction = 0;
sub_8030768(0);
sub_8012FD8(&gUnknown_203B328->unk8);
if (sub_8012FD8(&gUnknown_203B328->unk58) == 0) {
if (!sub_8012FD8(&gUnknown_203B328->unk58)) {
sub_8013114(&gUnknown_203B328->unk58,&menuAction);
}
@@ -323,7 +316,7 @@ void sub_80313D8(u32 state)
{
case CANCEL_ACTION:
case NO_ACTION:
sub_80310E4(0);
sub_80310E4(INIT_STATE);
break;
case YES_ACTION:
switch(state)
@@ -346,14 +339,14 @@ void sub_80313D8(u32 state)
sub_80310E4(5);
}
else {
sub_80310E4(0);
sub_80310E4(INIT_STATE);
}
}
break;
}
}
void sub_8031498(void)
static void sub_8031498(void)
{
switch(sub_8030DA0())
{
@@ -363,7 +356,7 @@ void sub_8031498(void)
case 2:
case 3:
sub_8030DE4();
sub_80310E4(0);
sub_80310E4(INIT_STATE);
break;
}
}

View File

@@ -19,6 +19,8 @@
#include "text2.h"
#include "wonder_mail_802D098.h"
#include "wonder_mail_main_menu.h"
#include "wonder_mail_4.h"
#include "wonder_mail_5.h"
#define SELECT_WONDER_MAIL_MODE_MAIN_SCREEN 0
#define SEND_WONDER_MAIL_MAIN_SCREEN 1
@@ -69,17 +71,11 @@ EWRAM_DATA_2 struct unkStruct_203B3E8 *gUnknown_203B3E8 = {0};
#include "data/wonder_mail_main_menu.h"
extern void SetWonderMailMainMenuState(u8);
extern void sub_8030DE4(void);
extern void sub_803084C(void);
extern void sub_8031E10(void);
extern u8 sub_800D588(void);
extern void sub_802EF48(void);
extern s32 sub_8037B28(u32);
extern bool8 IsValidWonderMail(WonderMail *WonderMailData);
void PrintWonderMailMainMenuError(u32);
void HandleWonderMailMainScreen(void);
void HandleGameLinkCableMenu(void);

View File

@@ -488,11 +488,7 @@ gUnknown_202F310: /* 202F310 (sub_8067A80 - sub_8068310) */
.space 0x4
.include "src/dungeon_movement.o"
gUnknown_202F31C: /* 202F31C (sub_80723D0 - sub_80725A4) */
.space 0x8
gUnknown_202F324: /* 202F324 (sub_80723D0 - sub_80725A4) */
.space 0x8
.include "src/code_80718D8.o"
gUnknown_202F32C: /* 202F32C (xxx_dungeon_8042F6C - sub_8072CF4) */
.space 0x1