mirror of
https://github.com/pret/pmd-red.git
synced 2026-08-24 01:35:07 -05:00
Merge pull request #211 from SethBarberee/aug_sept_2024
Some checks are pending
GithubCI / build (push) Waiting to run
Some checks are pending
GithubCI / build (push) Waiting to run
Aug sept 2024
This commit is contained in:
@@ -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
|
||||
|
||||
1511
asm/code_806E8B0.s
1511
asm/code_806E8B0.s
File diff suppressed because it is too large
Load Diff
1260
asm/code_80718D8.s
1260
asm/code_80718D8.s
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
@@ -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}
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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
8
include/code_807CD9C.h
Normal 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 */
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
15
include/wonder_mail_4.h
Normal 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
9
include/wonder_mail_5.h
Normal 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 */
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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))
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
1092
src/code_806FDF4.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
182
src/code_807E1A0.c
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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++;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
12
src/moves.c
12
src/moves.c
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
109
src/status.c
109
src/status.c
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
51
src/trap.c
51
src/trap.c
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
16
src/trap_1.c
16
src/trap_1.c
@@ -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, ¶m_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)
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -11,7 +11,6 @@
|
||||
|
||||
extern void TriggerWeatherAbilities(void);
|
||||
extern void sub_807EAA0(u32, u32);
|
||||
void sub_807E5E4(u8);
|
||||
|
||||
u8 GetApparentWeather(Entity *pokemon)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user