more decomping

This commit is contained in:
Seth Barberee
2022-07-07 15:46:58 -07:00
parent 310d022b26
commit 3239fb776e
15 changed files with 1012 additions and 1940 deletions

View File

@@ -167,7 +167,7 @@ sub_8075CFC:
adds r0, r6, 0
adds r1, r4, 0
adds r2, r5, 0
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08075DAA
@@ -633,7 +633,7 @@ sub_8076090:
adds r0, r6, 0
adds r1, r4, 0
mov r2, r9
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _0807613A
@@ -715,7 +715,7 @@ sub_807614C:
adds r0, r6, 0
adds r1, r4, 0
adds r2, r7, 0
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08076206
@@ -814,7 +814,7 @@ _08076238:
adds r0, r7, 0
adds r1, r5, 0
mov r2, r10
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
beq _0807624A
@@ -1045,7 +1045,7 @@ _0807641A:
adds r0, r7, 0
adds r1, r5, 0
mov r2, r10
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
beq _0807642C
@@ -1279,7 +1279,7 @@ _08076602:
adds r0, r7, 0
adds r1, r5, 0
mov r2, r10
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
beq _08076614
@@ -1510,7 +1510,7 @@ _080767CE:
mov r0, r8
adds r1, r5, 0
adds r2, r4, 0
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _080768C8
@@ -1641,7 +1641,7 @@ sub_80768DC:
adds r0, r7, 0
adds r1, r5, 0
adds r2, r4, 0
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _080769BE
@@ -1748,7 +1748,7 @@ sub_80769CC:
adds r0, r7, 0
adds r1, r5, 0
movs r2, 0x1
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08076A9A
@@ -1933,7 +1933,7 @@ _08076B60:
adds r0, r6, 0
adds r1, r4, 0
movs r2, 0x1
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
lsrs r7, r0, 24
cmp r7, 0
@@ -2150,7 +2150,7 @@ sub_8076D10:
adds r0, r7, 0
adds r1, r6, 0
movs r2, 0x1
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08076E0E

File diff suppressed because it is too large Load Diff

View File

@@ -1425,7 +1425,7 @@ sub_80807C0:
beq _08080870
mov r0, r8
movs r2, 0x1
bl sub_80716E8
bl HasSafeguardStatus
lsls r0, 24
cmp r0, 0
bne _08080870

View File

@@ -139,661 +139,4 @@ _08030F50: .4byte gUnknown_203B324
_08030F54: .4byte gUnknown_80E0938
thumb_func_end sub_8030E48
thumb_func_start sub_8030F58
sub_8030F58:
push {r4-r6,lr}
adds r6, r0, 0
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
ldr r5, _08030FF4
ldr r0, [r5]
cmp r0, 0
bne _08030F88
movs r4, 0x8E
lsls r4, 1
adds r0, r4, 0
movs r1, 0x8
bl MemoryAlloc
str r0, [r5]
movs r1, 0
adds r2, r4, 0
bl MemoryFill8
_08030F88:
ldr r0, [r5]
movs r1, 0x8C
lsls r1, 1
adds r0, r1
str r6, [r0]
movs r0, 0x98
lsls r0, 1
bl GetDialogueSpriteDataPtr
ldr r2, [r5]
movs r4, 0x84
lsls r4, 1
adds r1, r2, r4
str r0, [r1]
movs r3, 0x86
lsls r3, 1
adds r1, r2, r3
ldr r0, [r0, 0x4]
str r0, [r1]
movs r0, 0x8A
lsls r0, 1
adds r2, r0
movs r1, 0
strb r1, [r2]
ldr r0, [r5]
ldr r2, _08030FF8
adds r0, r2
strb r1, [r0]
ldr r0, [r5]
adds r3, 0xA
adds r0, r3
strb r1, [r0]
ldr r2, [r5]
movs r0, 0x88
lsls r0, 1
adds r1, r2, r0
movs r0, 0x2
strh r0, [r1]
subs r3, 0x4
adds r1, r2, r3
movs r0, 0x8
strh r0, [r1]
adds r0, r6, 0
bl sub_8030C20
lsls r0, 24
lsrs r1, r0, 24
cmp r1, 0
beq _08031038
cmp r6, 0x2
beq _08030FFC
cmp r6, 0x4
beq _08031014
b _08031022
.align 2, 0
_08030FF4: .4byte gUnknown_203B328
_08030FF8: .4byte 0x00000115
_08030FFC:
ldr r0, _0803100C
ldr r2, [r5]
adds r2, r4
ldr r3, _08031010
movs r1, 0
bl sub_80141B4
b _08031022
.align 2, 0
_0803100C: .4byte gUnknown_80E09D8
_08031010: .4byte 0x00000101
_08031014:
ldr r0, _0803102C
ldr r2, [r5]
adds r2, r4
ldr r3, _08031030
movs r1, 0
bl sub_80141B4
_08031022:
ldr r0, _08031034
ldr r1, [r0]
movs r0, 0x5
str r0, [r1]
b _08031048
.align 2, 0
_0803102C: .4byte gUnknown_80E0A0C
_08031030: .4byte 0x00000101
_08031034: .4byte gUnknown_203B328
_08031038:
ldr r0, [r5]
str r1, [r0]
adds r0, r6, 0
movs r1, 0
movs r2, 0
movs r3, 0x8
bl sub_80306A8
_08031048:
movs r0, 0x1
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_8030F58
thumb_func_start sub_8031050
sub_8031050:
push {lr}
ldr r1, _08031068
ldr r0, [r1]
ldr r0, [r0]
adds r2, r1, 0
cmp r0, 0x6
bhi _080310AC
lsls r0, 2
ldr r1, _0803106C
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08031068: .4byte gUnknown_203B328
_0803106C: .4byte _08031070
.align 2, 0
_08031070:
.4byte _0803108C
.4byte _08031092
.4byte _08031098
.4byte _08031098
.4byte _080310A2
.4byte _080310A8
.4byte _080310A8
_0803108C:
bl sub_8031300
b _080310AC
_08031092:
bl sub_803136C
b _080310AC
_08031098:
ldr r0, [r2]
ldr r0, [r0]
bl sub_80313D8
b _080310AC
_080310A2:
bl sub_8031498
b _080310AC
_080310A8:
movs r0, 0x3
b _080310AE
_080310AC:
movs r0, 0
_080310AE:
pop {r1}
bx r1
thumb_func_end sub_8031050
thumb_func_start sub_80310B4
sub_80310B4:
push {r4,lr}
bl sub_803084C
ldr r4, _080310E0
ldr r0, [r4]
cmp r0, 0
beq _080310D8
movs r1, 0x84
lsls r1, 1
adds r0, r1
ldr r0, [r0]
bl CloseFile
ldr r0, [r4]
bl MemoryFree
movs r0, 0
str r0, [r4]
_080310D8:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_080310E0: .4byte gUnknown_203B328
thumb_func_end sub_80310B4
thumb_func_start sub_80310E4
sub_80310E4:
push {lr}
ldr r1, _080310F8
ldr r1, [r1]
str r0, [r1]
bl sub_80310FC
bl sub_8031258
pop {r0}
bx r0
.align 2, 0
_080310F8: .4byte gUnknown_203B328
thumb_func_end sub_80310E4
thumb_func_start sub_80310FC
sub_80310FC:
push {r4-r6,lr}
ldr r4, _0803111C
ldr r0, [r4]
adds r0, 0xA8
bl sub_8006518
ldr r0, [r4]
ldr r0, [r0]
cmp r0, 0x6
bls _08031112
b _0803122C
_08031112:
lsls r0, 2
ldr r1, _08031120
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0803111C: .4byte gUnknown_203B328
_08031120: .4byte _08031124
.align 2, 0
_08031124:
.4byte _08031140
.4byte _08031178
.4byte _080311C0
.4byte _080311C0
.4byte _080311E8
.4byte _0803122C
.4byte _0803122C
_08031140:
ldr r3, _08031170
ldr r1, [r3]
ldr r2, _08031174
adds r1, 0xC0
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r1, [r3]
adds r1, 0xD8
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r0, [r3]
adds r0, 0xF0
ldm r2!, {r1,r3,r4}
stm r0!, {r1,r3,r4}
ldm r2!, {r1,r5,r6}
stm r0!, {r1,r5,r6}
b _0803123A
.align 2, 0
_08031170: .4byte gUnknown_203B328
_08031174: .4byte gUnknown_80E0990
_08031178:
ldr r3, _080311B0
ldr r1, [r3]
adds r1, 0xC0
ldr r0, _080311B4
ldm r0!, {r2,r4,r5}
stm r1!, {r2,r4,r5}
ldm r0!, {r2,r4,r6}
stm r1!, {r2,r4,r6}
ldr r1, [r3]
ldr r2, _080311B8
adds r1, 0xD8
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r0, [r3]
adds r0, 0xF0
ldm r2!, {r1,r5,r6}
stm r0!, {r1,r5,r6}
ldm r2!, {r4-r6}
stm r0!, {r4-r6}
ldr r0, [r3]
adds r0, 0xC0
ldr r1, _080311BC
bl sub_8012CAC
b _0803123A
.align 2, 0
_080311B0: .4byte gUnknown_203B328
_080311B4: .4byte gUnknown_80E09A8
_080311B8: .4byte gUnknown_80E0990
_080311BC: .4byte gUnknown_80E0968
_080311C0:
ldr r2, _080311DC
ldr r1, [r2]
adds r1, 0xD8
ldr r0, _080311E0
ldm r0!, {r3-r5}
stm r1!, {r3-r5}
ldm r0!, {r3,r4,r6}
stm r1!, {r3,r4,r6}
ldr r0, [r2]
adds r0, 0xD8
ldr r1, _080311E4
bl sub_8012CAC
b _0803123A
.align 2, 0
_080311DC: .4byte gUnknown_203B328
_080311E0: .4byte gUnknown_80E09C0
_080311E4: .4byte gUnknown_80E0948
_080311E8:
ldr r3, _08031224
ldr r1, [r3]
ldr r2, _08031228
adds r1, 0xA8
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r1, [r3]
adds r1, 0xC0
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r1, [r3]
adds r1, 0xD8
adds r0, r2, 0
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldm r0!, {r4-r6}
stm r1!, {r4-r6}
ldr r0, [r3]
adds r0, 0xF0
ldm r2!, {r1,r5,r6}
stm r0!, {r1,r5,r6}
ldm r2!, {r3-r5}
stm r0!, {r3-r5}
b _0803123A
.align 2, 0
_08031224: .4byte gUnknown_203B328
_08031228: .4byte gUnknown_80E0990
_0803122C:
bl ResetUnusedInputStruct
movs r0, 0
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
_0803123A:
bl ResetUnusedInputStruct
ldr r0, _08031254
ldr r0, [r0]
adds r0, 0xA8
movs r1, 0x1
movs r2, 0x1
bl sub_800641C
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08031254: .4byte gUnknown_203B328
thumb_func_end sub_80310FC
thumb_func_start sub_8031258
sub_8031258:
push {r4,lr}
sub sp, 0x8
ldr r1, _08031274
ldr r0, [r1]
ldr r0, [r0]
adds r2, r1, 0
cmp r0, 0x6
bhi _080312F6
lsls r0, 2
ldr r1, _08031278
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08031274: .4byte gUnknown_203B328
_08031278: .4byte _0803127C
.align 2, 0
_0803127C:
.4byte _08031298
.4byte _080312A0
.4byte _080312BC
.4byte _080312BC
.4byte _080312EC
.4byte _080312F6
.4byte _080312F6
_08031298:
movs r0, 0x1
bl sub_8030810
b _080312F6
_080312A0:
bl sub_803092C
ldr r0, _080312B4
ldr r0, [r0]
adds r0, 0x8
ldr r1, _080312B8
movs r2, 0x4
str r2, [sp]
movs r2, 0x1
b _080312D8
.align 2, 0
_080312B4: .4byte gUnknown_203B328
_080312B8: .4byte gUnknown_80E0968
_080312BC:
bl sub_803092C
ldr r4, _080312E4
ldr r0, [r4]
adds r0, 0x8
movs r1, 0
bl sub_8012EA4
ldr r0, [r4]
adds r0, 0x58
ldr r1, _080312E8
movs r2, 0x3
str r2, [sp]
movs r2, 0x2
_080312D8:
str r2, [sp, 0x4]
movs r2, 0
movs r3, 0
bl sub_8012D60
b _080312F6
.align 2, 0
_080312E4: .4byte gUnknown_203B328
_080312E8: .4byte gUnknown_80E0948
_080312EC:
ldr r0, [r2]
ldrb r0, [r0, 0x4]
movs r1, 0x3
bl sub_8030D40
_080312F6:
add sp, 0x8
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_8031258
thumb_func_start sub_8031300
sub_8031300:
push {lr}
movs r0, 0x1
bl sub_8030768
cmp r0, 0x4
bhi _08031366
lsls r0, 2
ldr r1, _08031318
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_08031318: .4byte _0803131C
.align 2, 0
_0803131C:
.4byte _08031366
.4byte _08031366
.4byte _08031360
.4byte _08031330
.4byte _08031348
_08031330:
bl sub_80307EC
ldr r1, _08031344
ldr r1, [r1]
strb r0, [r1, 0x4]
movs r0, 0x1
bl sub_80310E4
b _08031366
.align 2, 0
_08031344: .4byte gUnknown_203B328
_08031348:
bl sub_80307EC
ldr r1, _0803135C
ldr r1, [r1]
strb r0, [r1, 0x4]
movs r0, 0x4
bl sub_80310E4
b _08031366
.align 2, 0
_0803135C: .4byte gUnknown_203B328
_08031360:
movs r0, 0x6
bl sub_80310E4
_08031366:
pop {r0}
bx r0
thumb_func_end sub_8031300
thumb_func_start sub_803136C
sub_803136C:
push {r4,lr}
sub sp, 0x4
movs r0, 0
str r0, [sp]
bl sub_8030768
ldr r4, _080313A4
ldr r0, [r4]
adds r0, 0x8
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _08031392
ldr r0, [r4]
adds r0, 0x8
mov r1, sp
bl sub_8013114
_08031392:
ldr r0, [sp]
cmp r0, 0x4
beq _080313C2
cmp r0, 0x4
bgt _080313A8
cmp r0, 0x1
beq _080313B2
b _080313D0
.align 2, 0
_080313A4: .4byte gUnknown_203B328
_080313A8:
cmp r0, 0x5
beq _080313CA
cmp r0, 0x6
beq _080313BA
b _080313D0
_080313B2:
movs r0, 0
bl sub_80310E4
b _080313D0
_080313BA:
movs r0, 0x3
bl sub_80310E4
b _080313D0
_080313C2:
movs r0, 0x2
bl sub_80310E4
b _080313D0
_080313CA:
movs r0, 0x4
bl sub_80310E4
_080313D0:
add sp, 0x4
pop {r4}
pop {r0}
bx r0
thumb_func_end sub_803136C
thumb_func_start sub_80313D8
sub_80313D8:
push {r4,r5,lr}
sub sp, 0x4
adds r5, r0, 0
movs r0, 0
str r0, [sp]
bl sub_8030768
ldr r4, _08031418
ldr r0, [r4]
adds r0, 0x8
bl sub_8012FD8
ldr r0, [r4]
adds r0, 0x58
bl sub_8012FD8
lsls r0, 24
cmp r0, 0
bne _08031408
ldr r0, [r4]
adds r0, 0x58
mov r1, sp
bl sub_8013114
_08031408:
ldr r0, [sp]
cmp r0, 0x2
beq _08031428
cmp r0, 0x2
bgt _0803141C
cmp r0, 0x1
beq _08031420
b _0803148E
.align 2, 0
_08031418: .4byte gUnknown_203B328
_0803141C:
cmp r0, 0x3
bne _0803148E
_08031420:
movs r0, 0
bl sub_80310E4
b _0803148E
_08031428:
cmp r5, 0x2
beq _08031432
cmp r5, 0x3
beq _0803143C
b _0803145A
_08031432:
ldr r0, [r4]
ldrb r0, [r0, 0x4]
bl sub_8095240
b _0803145A
_0803143C:
ldr r4, _08031480
movs r3, 0
movs r1, 0
movs r2, 0x1F
_08031444:
ldr r0, [r4]
adds r0, r1
strb r3, [r0]
ldr r0, [r4]
adds r0, r1
adds r0, 0x22
strb r3, [r0]
adds r1, 0x30
subs r2, 0x1
cmp r2, 0
bge _08031444
_0803145A:
ldr r0, _08031484
ldr r0, [r0]
movs r1, 0x8C
lsls r1, 1
adds r0, r1
ldr r0, [r0]
cmp r0, 0x2
beq _0803146E
cmp r0, 0x4
bne _0803148E
_0803146E:
bl sub_8030C20
lsls r0, 24
cmp r0, 0
beq _08031488
movs r0, 0x5
bl sub_80310E4
b _0803148E
.align 2, 0
_08031480: .4byte gUnknown_203B480
_08031484: .4byte gUnknown_203B328
_08031488:
movs r0, 0
bl sub_80310E4
_0803148E:
add sp, 0x4
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80313D8
.align 2,0

6
include/code_808417C.h Normal file
View File

@@ -0,0 +1,6 @@
#ifndef GUARD_808417C_H
#define GUARD_808417C_H
s32 CalculateStatusTurns(struct DungeonEntity *target, s16 *turnRange, bool8 factorCurerSkills);
#endif // GUARD_808417C_H

View File

@@ -162,7 +162,8 @@ struct DungeonEntityData
/* 0xF5 */ bool8 exposedStatus;
/* 0xF6 */ bool8 isColorChanged;
/* 0xF7 */ bool8 isBoss;
u8 fillF8[0xFA - 0xF8];
/* 0xF8 */ u8 unkF8;
/* 0xF8 */ u8 unkF9;
/* 0xFA */ u8 terrifiedTurnsLeft; // Doubles as a bool for whether the Pokémon is terrified.
u8 unkFB;
// Set to true if the player makes a teammate use their held item.

View File

@@ -3,6 +3,8 @@
#include "dungeon_entity.h"
bool8 HasSafeguardStatus(struct DungeonEntity * param_1, struct DungeonEntity * param_2, bool8 displayMessage);
bool8 sub_80717A4(struct DungeonEntity *pokemon, u16 moveID);
bool8 HasAbility(struct DungeonEntity *pokemon, u8 ability);
bool8 HasType(struct DungeonEntity *pokemon, u8 type);
bool8 CanSeeInvisible(struct DungeonEntity *pokemon);

View File

@@ -142,7 +142,7 @@ SECTIONS {
asm/wonder_mail_4.o(.text);
src/wonder_mail_5.o(.text);
asm/wonder_mail_5.o(.text);
src/wonder_mail_4_1.o(.text);
src/wonder_mail_6.o(.text);
src/post_office_guide.o(.text);
asm/code_8031D70.o(.text);
src/adventure_log.o(.text);

View File

@@ -34,7 +34,7 @@ enum ItemTargetFlag
ITEM_TARGET_ALLY = 1 << 1
};
extern void sub_8077274(struct DungeonEntity *, struct DungeonEntity *);
extern void UpdateFlashFireBoost(struct DungeonEntity *, struct DungeonEntity *);
extern s32 gNumPotentialTargets;
extern u32 gPotentialItemTargetWeights[NUM_DIRECTIONS];
@@ -55,7 +55,7 @@ void sub_807360C(struct DungeonEntity *pokemon)
if(entity->entityData->unk152 != 0)
{
entity->entityData->unk152 = 0;
sub_8077274(entity, entity);
UpdateFlashFireBoost(entity, entity);
}
}
}

View File

@@ -26,32 +26,32 @@ extern bool8 sub_805744C(struct DungeonEntity *, struct PokemonMove *, u32);
extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u32);
bool8 sub_80716E8(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3)
bool8 HasSafeguardStatus(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
if (param_2->entityData->protectionStatus == PROTECTION_STATUS_SAFEGUARD) {
if (param_3 != '\0') {
SetMessageArgument(gAvailablePokemonNames,param_2,0);
sub_80522F4(param_1,param_2,gUnknown_80FC2FC);
if (target->entityData->protectionStatus == PROTECTION_STATUS_SAFEGUARD) {
if (displayMessage) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,gUnknown_80FC2FC);
}
return TRUE;
}
return FALSE;
}
bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3)
bool8 sub_8071728(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
if (param_2->entityData->protectionStatus == PROTECTION_STATUS_MIST) {
if (param_3 != '\0') {
SetMessageArgument(gAvailablePokemonNames, param_2, 0);
sub_80522F4(param_1, param_2, gUnknown_80FC31C);
if (target->entityData->protectionStatus == PROTECTION_STATUS_MIST) {
if (displayMessage) {
SetMessageArgument(gAvailablePokemonNames, target, 0);
sub_80522F4(pokemon, target, gUnknown_80FC31C);
}
return TRUE;
}
else {
if (HasAbility(param_2, ABILITY_CLEAR_BODY) || HasAbility(param_2, ABILITY_WHITE_SMOKE)) {
if (param_3 != '\0') {
SetMessageArgument(gAvailablePokemonNames, param_2, 0);
sub_80522F4(param_1, param_2, gUnknown_80FCEFC);
if (HasAbility(target, ABILITY_CLEAR_BODY) || HasAbility(target, ABILITY_WHITE_SMOKE)) {
if (displayMessage) {
SetMessageArgument(gAvailablePokemonNames, target, 0);
sub_80522F4(pokemon, target, gUnknown_80FCEFC);
}
return TRUE;
}
@@ -59,12 +59,12 @@ bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2
return FALSE;
}
bool8 sub_80717A4(struct DungeonEntity *param_1, u16 moveID)
bool8 sub_80717A4(struct DungeonEntity *pokemon, u16 moveID)
{
struct DungeonEntityData * entityData;
s32 iVar3;
entityData = param_1->entityData;
entityData = pokemon->entityData;
if ((entityData->sleepStatus != SLEEP_STATUS_SLEEP) && (entityData->sleepStatus != SLEEP_STATUS_NAPPING) && (entityData->sleepStatus != SLEEP_STATUS_NIGHTMARE)) {
return FALSE;
}
@@ -78,7 +78,7 @@ bool8 sub_80717A4(struct DungeonEntity *param_1, u16 moveID)
for(iVar3 = 0, pokeMove = entityData->moves, pokeMove2 = pokeMove; iVar3 < MAX_MON_MOVES; pokeMove++, pokeMove2++, iVar3++)
{
if (((pokeMove->moveFlags & MOVE_FLAG_EXISTS) != 0) && (entityData->isLeader || ((pokeMove->moveFlags & MOVE_FLAG_ENABLED) != 0)))
if((sub_805744C(param_1, pokeMove2, 1) != '\0') && (pokeMove->PP != 0))
if((sub_805744C(pokemon, pokeMove2, 1) != '\0') && (pokeMove->PP != 0))
if(pokeMove->moveID == moveID)
return TRUE;
}

View File

@@ -1,9 +1,85 @@
#include "global.h"
#include "status.h"
#include "constants/status.h"
#include "constants/ability.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_ai_targeting.h"
#include "dungeon_map_access.h"
#include "dungeon_util.h"
#include "dungeon_items.h"
#include "code_808417C.h"
#include "map.h"
extern u8 gAvailablePokemonNames[];
extern u8 gUnknown_202DE58[];
extern u8 *gUnknown_80FC084[];
extern u8 *gUnknown_80FC090[];
extern u8 *gUnknown_80FC1C4[];
extern u8 *gUnknown_80FC218[];
extern u8 *gUnknown_80FD550[];
extern u8 *gUnknown_80FCA60[];
extern u8 *gUnknown_80FC184[];
extern u8 *gUnknown_80FC0B8[];
extern u8 *gUnknown_80FC0C8[];
extern u8 *gUnknown_80FC118[];
extern u8 *gUnknown_80FC11C[];
extern u8 *gUnknown_80FC114[];
extern u8 *gUnknown_80FC180[];
extern u8 *gUnknown_80FC0FC[];
extern u8 *gUnknown_80FC0AC[];
extern u8 *gUnknown_80FC09C[];
extern u8 *gUnknown_80FC1F0[];
extern u8 *gUnknown_80FC1A4[];
extern u8 *gUnknown_80FCA64[];
extern s16 gUnknown_80F4E3C[];
extern u8 *gUnknown_80FCC18[];
extern u8 *gUnknown_80FB2E0[];
extern u8 *gUnknown_80FB300[];
extern s16 gUnknown_80F4E50[];
extern u8 *gUnknown_80FB2CC[];
extern u8 *gUnknown_80FB2AC[];
extern u8 *gUnknown_80FF01C[];
extern u8 *gUnknown_80FCBF8[];
extern s16 gUnknown_80F4E40[];
extern u8 *gUnknown_80FA124[];
extern u8 *gUnknown_80FC2B8[];
extern u8 *gUnknown_80FC298[];
extern u8 *gUnknown_80FC2D8[];
extern u8 *gUnknown_80FC298[];
extern s16 gUnknown_80F4E48[];
extern s16 gUnknown_80F4E4C[];
extern u8 *gUnknown_80FB27C[];
extern u8 *gUnknown_80FB25C[];
extern u8 *gUnknown_80FCDB4[];
extern u8 *gUnknown_80FD500[];
extern s16 gUnknown_80F4ECC[];
extern u8 *gUnknown_80FB960[];
extern u8 *gUnknown_80FB940[];
extern void sub_8041BF8(struct DungeonEntity *);
extern void sub_8041BE8(struct DungeonEntity *);
extern void sub_8041CCC(struct DungeonEntity *);
extern void sub_8041CB8(struct DungeonEntity *r0);
extern void sub_8041C1C(struct DungeonEntity *r0);
extern s32 GetMovementSpeed(struct DungeonEntity *);
extern void sub_8042060(struct DungeonEntity *, s32);
extern bool8 sub_8071728(struct DungeonEntity * param_1, struct DungeonEntity * param_2, u8 param_3);
extern void sub_8041FB4(struct DungeonEntity *r0, u32 r1);
extern void sub_8041FD8(struct DungeonEntity *r0, u32 r1);
extern void sub_80522F4(struct DungeonEntity *r1, struct DungeonEntity *r2, u8 *);
extern s32 sub_8009DA4(s32, s32);
extern void sub_804201C(struct DungeonEntity *r0, u32 r1);
extern void sub_8041FFC(struct DungeonEntity *r0, u32 r1);
extern void SetMessageArgument(char[], struct DungeonEntity*, u32);
extern void SetMessageArgument_2(char[], struct DungeonEntityData*, u32);
extern void sub_8041C58(struct DungeonEntity *r0);
extern void DungeonEntityUpdateStatusSprites(struct DungeonEntity *);
extern void sub_8042040(struct DungeonEntity *, s32);
extern void sub_80420A0(struct DungeonEntity *);
u8 GetFlashFireStatus(struct DungeonEntity *pokemon)
{
@@ -17,3 +93,450 @@ u8 GetFlashFireStatus(struct DungeonEntity *pokemon)
}
return FLASH_FIRE_STATUS_NOT_MAXED;
}
static inline s32 UpdateFlashFireBoost_sub(struct DungeonEntityData * entityData)
{
s32 flashFireBoost;
flashFireBoost = entityData->flashFireBoost;
flashFireBoost++;
if (FLASH_FIRE_STATUS_MAXED < flashFireBoost) {
flashFireBoost = FLASH_FIRE_STATUS_NOT_MAXED;
}
return flashFireBoost;
}
void UpdateFlashFireBoost(struct DungeonEntity * pokemon, struct DungeonEntity *target)
{
struct DungeonEntityData * entityData;
struct DungeonEntityData * entityData_1;
s32 flashFireBoost;
if (EntityExists(target)) {
entityData = target->entityData;
entityData_1 = entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
flashFireBoost = UpdateFlashFireBoost_sub(entityData);
if (entityData_1->flashFireBoost != flashFireBoost) {
entityData_1->flashFireBoost = flashFireBoost;
sub_8041C58(target);
}
DungeonEntityUpdateStatusSprites(target);
}
}
void sub_80772C0(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
s32 oldMulti;
if (!EntityExists(target)) {
return;
}
if (statStage != STAT_STAGE_ATTACK) {
strcpy(gUnknown_202DE58,*gUnknown_80FC0C8);
}
else {
strcpy(gUnknown_202DE58,*gUnknown_80FC0B8);
}
if ((param_4 < 0x100) && sub_8071728(pokemon,target,displayMessage)) {
return;
}
if ((HasItem(target,ITEM_ID_TWIST_BAND)) && (param_4 < 0x100)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FD550);
return;
}
if (HasAbility(target, ABILITY_HYPER_CUTTER) && (statStage == STAT_STAGE_ATTACK) && (param_4 < 0x100)) {
if (displayMessage) {
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCA60);
}
return;
}
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
oldMulti = entityData->attackMultipliers[statStage];
if (param_4 < 0x100) {
sub_8041FD8(target,statStage);
}
else {
sub_8041FB4(target,statStage);
}
entityData->attackMultipliers[statStage] = sub_8009DA4(entityData->attackMultipliers[statStage],param_4);
if (entityData->attackMultipliers[statStage] < 2) {
entityData->attackMultipliers[statStage] = 2;
}
if (0x63fd < entityData->attackMultipliers[statStage]) {
entityData->attackMultipliers[statStage] = 0x63fd; // 25597
}
if (oldMulti > entityData->attackMultipliers[statStage]) {
sub_80522F4(pokemon,target,*gUnknown_80FC11C);
}
else if (oldMulti < entityData->attackMultipliers[statStage]) {
sub_80522F4(pokemon,target,*gUnknown_80FC118);
}
else
{
sub_80522F4(pokemon,target,*gUnknown_80FC184);
}
DungeonEntityUpdateStatusSprites(target);
}
void sub_8077434(struct DungeonEntity *pokemon, struct DungeonEntity *target, u32 statStage, s32 param_4, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
s32 oldMulti;
if (!EntityExists(target)) {
return;
}
if (statStage != STAT_STAGE_DEFENSE) {
strcpy(gUnknown_202DE58,*gUnknown_80FC0AC);
}
else {
strcpy(gUnknown_202DE58,*gUnknown_80FC09C);
}
if ((param_4 < 0x100) && sub_8071728(pokemon,target,displayMessage)) {
return;
}
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
oldMulti = entityData->defenseMultipliers[statStage];
if (param_4 < 0x100) {
sub_804201C(target,statStage);
}
else {
sub_8041FFC(target,statStage);
}
entityData->defenseMultipliers[statStage] = sub_8009DA4(entityData->defenseMultipliers[statStage],param_4);
if (entityData->defenseMultipliers[statStage] < 2) {
entityData->defenseMultipliers[statStage] = 2;
}
if (0x63fd < entityData->defenseMultipliers[statStage]) {
entityData->defenseMultipliers[statStage] = 0x63fd; // 25597
}
if (oldMulti > entityData->defenseMultipliers[statStage]) {
sub_80522F4(pokemon,target,*gUnknown_80FC114);
}
else if (oldMulti < entityData->defenseMultipliers[statStage]) {
sub_80522F4(pokemon,target,*gUnknown_80FC0FC);
}
else
{
sub_80522F4(pokemon,target,*gUnknown_80FC180);
}
DungeonEntityUpdateStatusSprites(target);
}
void sub_8077540(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage)
{
struct DungeonEntityData *entityData;
if (EntityExists(target)) {
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_8042040(target,statStage);
if (statStage != STAT_STAGE_ACCURACY) {
strcpy(gUnknown_202DE58,*gUnknown_80FC090);
}
else {
strcpy(gUnknown_202DE58,*gUnknown_80FC084);
}
if (entityData->accuracyStages[statStage] < MAX_STAT_STAGE) {
entityData->accuracyStages[statStage]++;
sub_80522F4(pokemon,target,*gUnknown_80FC1C4);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FC218);
}
DungeonEntityUpdateStatusSprites(target);
}
}
void sub_80775DC(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 statStage, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
if (EntityExists(target)) {
if (statStage != STAT_STAGE_ACCURACY) {
strcpy(gUnknown_202DE58,*gUnknown_80FC090);
}
else {
strcpy(gUnknown_202DE58,*gUnknown_80FC084);
}
if (!sub_8071728(pokemon,target,displayMessage)) {
if (HasAbility(target, ABILITY_KEEN_EYE) && (statStage == STAT_STAGE_ACCURACY)){
if(displayMessage)
{
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_80522F4(pokemon,target,*gUnknown_80FCA64);
}
}
else {
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
sub_8042060(target,statStage);
if (entityData->accuracyStages[statStage] != 0) {
entityData->accuracyStages[statStage]--;
sub_80522F4(pokemon,target,*gUnknown_80FC1A4);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FC1F0);
}
DungeonEntityUpdateStatusSprites(target);
}
}
}
}
void sub_80776C0(struct DungeonEntity * pokemon,struct DungeonEntity * target, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
if (EntityExists(target)) {
if (!HasSafeguardStatus(pokemon, target, displayMessage)) {
if (HasAbility(target, ABILITY_INNER_FOCUS)){
SetMessageArgument(gAvailablePokemonNames,target,0);
if(displayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FCC18);
}
else {
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
if(entityData->volatileStatus != VOLATILE_STATUS_CRINGING)
{
entityData->volatileStatus = VOLATILE_STATUS_CRINGING;
entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target, gUnknown_80F4E3C, TRUE) + 1;
sub_80420A0(target);
sub_80522F4(pokemon,target,*gUnknown_80FB2E0);
}
else
{
sub_80522F4(pokemon,target,*gUnknown_80FB300);
}
DungeonEntityUpdateStatusSprites(target);
}
}
}
}
void sub_8077780(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
struct MapTile *mapTile;
register struct DungeonEntityData *entityData;
struct DungeonEntity *mapPokemonEntity;
int index;
bool8 bVar6;
bool8 bVar7;
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) {
if (HasAbility(target, ABILITY_LIMBER)) {
SetMessageArgument(gAvailablePokemonNames,target,0);
if (displayMessage) {
sub_80522F4(pokemon,target,*gUnknown_80FCBF8);
}
}
else
{
bVar6 = TRUE;
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (entityData->nonVolatileStatus != NON_VOLATILE_STATUS_PARALYZED) {
entityData->nonVolatileStatus = NON_VOLATILE_STATUS_PARALYZED;
entityData->nonVolatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E50,1) + 1;
entityData->nonVolatileStatusDamageTimer = 0;
entityData->fillAF = 0;
bVar6 = FALSE;
sub_80522F4(pokemon,target,*gUnknown_80FB2AC);
sub_8041C1C(target);
GetMovementSpeed(target);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FB2CC);
}
if ((HasAbility(target, ABILITY_SYNCHRONIZE)) && (!bVar6)) {
bVar7 = FALSE;
for(index = 0; index < NUM_DIRECTIONS; index++)
{
mapTile = GetMapTile_1(target->posWorld.x + gAdjacentTileOffsets[index].x,target->posWorld.y + gAdjacentTileOffsets[index].y);
mapPokemonEntity = mapTile->pokemon;
if ((EntityExists(mapPokemonEntity)) && (GetEntityType(mapPokemonEntity) == ENTITY_POKEMON)) {
if (!bVar7) {
bVar7 = TRUE;
SetMessageArgument_2(gAvailablePokemonNames,entityData,0);
sub_80522F4(pokemon,target,*gUnknown_80FF01C);
}
if (sub_807167C(target,mapPokemonEntity) == 1) {
sub_8077780(pokemon, mapPokemonEntity, displayMessage);
}
}
}
}
DungeonEntityUpdateStatusSprites(target);
}
}
}
void sub_8077910(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 turns, bool8 diplayMessage)
{
s32 movSpeed;
s32 index;
s32 movSpeed_1;
struct DungeonEntityData *entityData;
if (!EntityExists(target)) {
return;
}
if (turns == 0) {
turns = CalculateStatusTurns(target,gUnknown_80F4E40,0) + 1;
}
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
movSpeed = GetMovementSpeed(target);
if (movSpeed == 4) {
if (diplayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FC2B8);
}
else {
for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++)
{
if(entityData->speedUpTurnsLeft[index] == 0)
{
entityData->speedUpTurnsLeft[index] = turns;
break;
}
}
movSpeed_1 = GetMovementSpeed(target);
if (movSpeed == movSpeed_1) {
sub_80522F4(pokemon,target,*gUnknown_80FC298);
}
else
{
sub_8041CB8(target);
sub_80522F4(pokemon,target,gUnknown_80FA124[movSpeed_1]);
entityData->unkF8 = 1;
entityData->attacking = FALSE;
}
}
DungeonEntityUpdateStatusSprites(target);
}
void sub_80779F0(struct DungeonEntity * pokemon, struct DungeonEntity * target, s32 param_3, bool8 displayMessage)
{
s32 movSpeed;
s32 iVar4;
s32 index;
s32 movSpeed_1;
struct DungeonEntityData *entityData;
if (!EntityExists(target)) {
return;
}
if (HasSafeguardStatus(pokemon,target,displayMessage)) {
return;
}
entityData = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
movSpeed = GetMovementSpeed(target);
if (movSpeed == 0) {
if (displayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FC2D8);
}
else {
for(iVar4 = 0; iVar4 < param_3; iVar4++)
{
for(index = 0; index < NUM_SPEED_TURN_COUNTERS; index++)
{
if (entityData->slowTurnsLeft[index]== 0) {
entityData->slowTurnsLeft[index] = CalculateStatusTurns(target,gUnknown_80F4E48,1) + 1;
break;
}
}
}
movSpeed_1 = GetMovementSpeed(target);
if (movSpeed == movSpeed_1) {
if (displayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FC298);
}
else
{
sub_8041CCC(target);
sub_80522F4(pokemon,target,gUnknown_80FA124[movSpeed_1]);
}
}
DungeonEntityUpdateStatusSprites(target);
}
void sub_8077AE4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
struct DungeonEntityData *entityData;
if (!EntityExists(target)) {
return;
}
if (HasSafeguardStatus(pokemon,target,displayMessage)) {
return;
}
SetMessageArgument(gAvailablePokemonNames,target,0);
if (HasItem(target,ITEM_ID_PERSIM_BAND)) {
if (displayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FD500);
}
else
{
if (HasAbility(target, ABILITY_OWN_TEMPO)) {
if (displayMessage)
sub_80522F4(pokemon,target,*gUnknown_80FCDB4);
}
else
{
sub_8041BE8(target);
entityData = target->entityData;
if (entityData->volatileStatus != VOLATILE_STATUS_CONFUSED) {
entityData->volatileStatus = VOLATILE_STATUS_CONFUSED;
entityData->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4E4C,1) + 1;
sub_80522F4(pokemon,target,*gUnknown_80FB25C);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FB27C);
}
DungeonEntityUpdateStatusSprites(target);
}
}
}
void sub_8077BB4(struct DungeonEntity * pokemon, struct DungeonEntity * target, bool8 displayMessage)
{
struct DungeonEntityData *iVar3;
if ((EntityExists(target)) && (!HasSafeguardStatus(pokemon,target,displayMessage))) {
iVar3 = target->entityData;
SetMessageArgument(gAvailablePokemonNames,target,0);
if (iVar3->volatileStatus != 4) {
iVar3->volatileStatus = 4;
iVar3->volatileStatusTurnsLeft = CalculateStatusTurns(target,gUnknown_80F4ECC,1) + 1;
sub_8041BF8(target);
sub_80522F4(pokemon,target,*gUnknown_80FB940);
}
else {
sub_80522F4(pokemon,target,*gUnknown_80FB960);
}
DungeonEntityUpdateStatusSprites(target);
}
}

View File

@@ -10,7 +10,7 @@ struct unkStruct_203B320
// size: 0xC4
u8 unk0[4];
u8 fill4[0x20 - 4];
u32 unk20;
u32 wonderMailMode;
u32 unk24;
u8 fill28[0x3C - 0x28];
s16 unk3C;
@@ -67,12 +67,12 @@ extern void sub_80073B8(u32);
extern void sub_80073E0(u32);
extern void CreateRescueTitle(void *);
u32 sub_80306A8(u32 r0, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3)
u32 sub_80306A8(u32 wonderMailMode, u32 r1, struct UnkTextStruct2_sub *r2, u32 r3)
{
if(sub_8030C20(r0))
if(sub_8030C20(wonderMailMode))
return 0;
gUnknown_203B320 = MemoryAlloc(sizeof(struct unkStruct_203B320), 0x8);
gUnknown_203B320->unk20 = r0;
gUnknown_203B320->wonderMailMode = wonderMailMode;
gUnknown_203B320->unk58 = r1;
gUnknown_203B320->unk5C = &gUnknown_203B320->unk60[gUnknown_203B320->unk58];
@@ -246,7 +246,7 @@ void sub_803092C(void)
r4 = gUnknown_203B320->unk42 * 8;
r5 = r4;
r5 += 10;
xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->unk20],gUnknown_203B320->unk58,0);
xxx_call_draw_string(r5,0,gUnknown_80E086C[gUnknown_203B320->wonderMailMode],gUnknown_203B320->unk58,0);
r4 += 4;
r5 = r4 + gUnknown_203B320->unkC0[2] * 8;
sub_8012BC4(r5,0,gUnknown_203B320->unk42 + 1,1,7,gUnknown_203B320->unk58);

View File

@@ -1,21 +0,0 @@
#include "global.h"
extern u32 sub_8030DA0(void);
extern void sub_8030DE4();
extern void sub_80310E4(u32);
void sub_8031498(void)
{
switch(sub_8030DA0())
{
case 0:
case 1:
break;
case 2:
case 3:
sub_8030DE4();
sub_80310E4(0);
break;
}
}

View File

@@ -5,6 +5,7 @@
struct unkStruct_203B324
{
// size: 0x78
u8 fill0[0xC];
u8 unkC;
u32 unk10;
@@ -26,7 +27,7 @@ void sub_8030E48(void);
bool8 sub_8030D40(u8 param_1, s32 param_2)
{
gUnknown_203B324 = MemoryAlloc(0x78,8);
gUnknown_203B324 = MemoryAlloc(sizeof(struct unkStruct_203B324), 8);
gUnknown_203B324->unkC = param_1;
sub_801317C(gUnknown_203B324);
gUnknown_203B324->unk10 = param_2;

427
src/wonder_mail_6.c Normal file
View File

@@ -0,0 +1,427 @@
#include "global.h"
#include "memory.h"
#include "input.h"
#include "file_system.h"
#include "text.h"
#include "pokemon.h"
#include "menu.h"
#include "code_8094F88.h"
extern bool8 sub_8030C20(u32);
struct unkStruct_203B328
{
// size: 0x11C
u32 state;
u8 unk4;
u32 unk8;
u8 fillC[0x58 - 0xC];
u32 unk58;
u8 fill5C[0xA8 - 0x5C];
struct UnkTextStruct2 unkA8[4];
/* 0x108 */ struct OpenedFile *faceFile;
/* 0x10C */ u8 *faceData;
u16 unk110;
u16 unk112;
/* 0x114 */ u8 unk114;
/* 0x115 */ u8 unk115;
/* 0x116 */ u8 unk116;
u32 wonderMailMode;
};
extern struct unkStruct_203B328 *gUnknown_203B328;
extern struct unkStruct_203B480 *gUnknown_203B480;
extern u8 gUnknown_80E0A0C[];
extern u8 gUnknown_80E09D8[];
extern struct UnkTextStruct2 gUnknown_80E0990;
extern struct UnkTextStruct2 gUnknown_80E09A8;
extern struct MenuItem gUnknown_80E0968;
extern struct UnkTextStruct2 gUnknown_80E09C0;
extern struct MenuItem gUnknown_80E0948;
extern void sub_8012CAC(struct UnkTextStruct2 *, struct MenuItem *);
extern void sub_80306A8(s32, u32, u32, u32);
extern void sub_80141B4(char *r0, u32, struct OpenedFile **r1, 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);
extern void sub_8012EA4(u32 *, u32);
extern void sub_8012D60(u32 *, struct MenuItem *, u32, u32, u32, u32);
extern u8 sub_8012FD8(u32 *);
extern void sub_8013114(u32 *, s32 *);
extern void sub_8095240(u8);
bool8 sub_8030F58(u32 wonderMailMode)
{
struct OpenedFile *iVar3;
ResetUnusedInputStruct();
sub_800641C(0,1,1);
if (gUnknown_203B328 == NULL) {
gUnknown_203B328 = MemoryAlloc(sizeof(struct unkStruct_203B328),8);
MemoryFill8((u8 *)gUnknown_203B328,0,sizeof(struct unkStruct_203B328));
}
gUnknown_203B328->wonderMailMode = wonderMailMode;
iVar3 = GetDialogueSpriteDataPtr(0x130);
gUnknown_203B328->faceFile = iVar3;
gUnknown_203B328->faceData = iVar3->data;
gUnknown_203B328->unk114 = 0;
gUnknown_203B328->unk115 = 0;
gUnknown_203B328->unk116 = 0;
gUnknown_203B328->unk110 = 2;
gUnknown_203B328->unk112 = 8;
if (sub_8030C20(wonderMailMode)) {
switch(wonderMailMode)
{
case 2:
// "You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE_2}SOS Mail{END_COLOR_TEXT_1}.\0"
sub_80141B4(gUnknown_80E09D8,0,&gUnknown_203B328->faceFile,0x101);
break;
case 4:
// "You don{APOSTROPHE}t have any {COLOR_1 LIGHT_BLUE_2}A-OK Mail{END_COLOR_TEXT_1}.\0"
sub_80141B4(gUnknown_80E0A0C,0,&gUnknown_203B328->faceFile,0x101);
break;
}
gUnknown_203B328->state = 5;
}
else {
gUnknown_203B328->state = 0;
sub_80306A8(wonderMailMode,0,0,8);
}
return 1;
}
s32 sub_8031050(void)
{
switch(gUnknown_203B328->state)
{
case 0:
sub_8031300();
break;
case 1:
sub_803136C();
break;
case 2:
case 3:
sub_80313D8(gUnknown_203B328->state);
break;
case 4:
sub_8031498();
break;
case 5:
case 6:
return 3;
}
return 0;
}
void sub_80310B4(void)
{
sub_803084C();
if (gUnknown_203B328 != NULL) {
CloseFile(gUnknown_203B328->faceFile);
MemoryFree(gUnknown_203B328);
gUnknown_203B328 = NULL;
}
}
void sub_80310E4(u32 newState)
{
gUnknown_203B328->state = newState;
sub_80310FC();
sub_8031258();
}
void sub_80310FC(void)
{
sub_8006518(gUnknown_203B328->unkA8);
switch(gUnknown_203B328->state)
{
case 0:
gUnknown_203B328->unkA8[1] = gUnknown_80E0990;
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
gUnknown_203B328->unkA8[3] = gUnknown_80E0990;
break;
case 1:
gUnknown_203B328->unkA8[1] = gUnknown_80E09A8;
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
gUnknown_203B328->unkA8[3] = gUnknown_80E0990;
sub_8012CAC(&gUnknown_203B328->unkA8[1], &gUnknown_80E0968);
break;
case 2:
case 3:
gUnknown_203B328->unkA8[2] = gUnknown_80E09C0;
sub_8012CAC(&gUnknown_203B328->unkA8[2], &gUnknown_80E0948);
break;
case 4:
gUnknown_203B328->unkA8[0] = gUnknown_80E0990;
gUnknown_203B328->unkA8[1] = gUnknown_80E0990;
gUnknown_203B328->unkA8[2] = gUnknown_80E0990;
gUnknown_203B328->unkA8[3] = gUnknown_80E0990;
break;
case 5:
case 6:
default:
ResetUnusedInputStruct();
sub_800641C(0, 1, 1);
break;
}
ResetUnusedInputStruct();
sub_800641C(gUnknown_203B328->unkA8, 1, 1);
}
void sub_8031258(void)
{
switch(gUnknown_203B328->state)
{
case 0:
sub_8030810(1);
break;
case 1:
sub_803092C();
sub_8012D60(&gUnknown_203B328->unk8, &gUnknown_80E0968, 0, 0, 4, 1);
break;
case 2:
case 3:
sub_803092C();
sub_8012EA4(&gUnknown_203B328->unk8, 0);
sub_8012D60(&gUnknown_203B328->unk58, &gUnknown_80E0948, 0, 0, 3, 2);
break;
case 4:
sub_8030D40(gUnknown_203B328->unk4, 3);
break;
case 5:
case 6:
default:
break;
}
}
void sub_8031300(void)
{
switch(sub_8030768(1))
{
case 3:
gUnknown_203B328->unk4 = sub_80307EC();
sub_80310E4(1);
break;
case 4:
gUnknown_203B328->unk4 = sub_80307EC();
sub_80310E4(4);
break;
case 2:
sub_80310E4(6);
break;
case 0:
case 1:
break;
}
}
void sub_803136C(void)
{
s32 local_c;
local_c = 0;
sub_8030768(0);
if (sub_8012FD8(&gUnknown_203B328->unk8) == '\0') {
sub_8013114(&gUnknown_203B328->unk8,&local_c);
}
switch(local_c)
{
case 1:
sub_80310E4(0);
break;
case 6:
sub_80310E4(3);
break;
case 4:
sub_80310E4(2);
break;
case 5:
sub_80310E4(4);
break;
}
}
#ifdef NONMATCHING
void sub_80313D8(u32 param_1)
{
s32 iVar2;
s32 local_10;
local_10 = 0;
sub_8030768(0);
sub_8012FD8(&gUnknown_203B328->unk8);
if (sub_8012FD8(&gUnknown_203B328->unk58) == '\0') {
sub_8013114(&gUnknown_203B328->unk58,&local_10);
}
switch(local_10)
{
case 1:
case 3:
sub_80310E4(0);
break;
case 2:
switch(param_1)
{
case 2:
sub_8095240(gUnknown_203B328->unk4);
break;
case 3:
for(iVar2 = 0; iVar2 < 0x20; iVar2++)
{
gUnknown_203B480[iVar2].unk0 = 0;
gUnknown_203B480[iVar2].unk22 = 0;
}
break;
}
if ((gUnknown_203B328->wonderMailMode == 2) || (gUnknown_203B328->wonderMailMode == 4)) {
if (sub_8030C20(gUnknown_203B328->wonderMailMode) != '\0') {
sub_80310E4(5);
}
else {
sub_80310E4(0);
}
}
break;
}
}
#else
NAKED
void sub_80313D8(u32 param_1)
{
asm_unified(
"\tpush {r4,r5,lr}\n"
"\tsub sp, 0x4\n"
"\tadds r5, r0, 0\n"
"\tmovs r0, 0\n"
"\tstr r0, [sp]\n"
"\tbl sub_8030768\n"
"\tldr r4, _08031418\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x8\n"
"\tbl sub_8012FD8\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x58\n"
"\tbl sub_8012FD8\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbne _08031408\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x58\n"
"\tmov r1, sp\n"
"\tbl sub_8013114\n"
"_08031408:\n"
"\tldr r0, [sp]\n"
"\tcmp r0, 0x2\n"
"\tbeq _08031428\n"
"\tcmp r0, 0x2\n"
"\tbgt _0803141C\n"
"\tcmp r0, 0x1\n"
"\tbeq _08031420\n"
"\tb _0803148E\n"
"\t.align 2, 0\n"
"_08031418: .4byte gUnknown_203B328\n"
"_0803141C:\n"
"\tcmp r0, 0x3\n"
"\tbne _0803148E\n"
"_08031420:\n"
"\tmovs r0, 0\n"
"\tbl sub_80310E4\n"
"\tb _0803148E\n"
"_08031428:\n"
"\tcmp r5, 0x2\n"
"\tbeq _08031432\n"
"\tcmp r5, 0x3\n"
"\tbeq _0803143C\n"
"\tb _0803145A\n"
"_08031432:\n"
"\tldr r0, [r4]\n"
"\tldrb r0, [r0, 0x4]\n"
"\tbl sub_8095240\n"
"\tb _0803145A\n"
"_0803143C:\n"
"\tldr r4, _08031480\n"
"\tmovs r3, 0\n"
"\tmovs r1, 0\n"
"\tmovs r2, 0x1F\n"
"_08031444:\n"
"\tldr r0, [r4]\n"
"\tadds r0, r1\n"
"\tstrb r3, [r0]\n"
"\tldr r0, [r4]\n"
"\tadds r0, r1\n"
"\tadds r0, 0x22\n"
"\tstrb r3, [r0]\n"
"\tadds r1, 0x30\n"
"\tsubs r2, 0x1\n"
"\tcmp r2, 0\n"
"\tbge _08031444\n"
"_0803145A:\n"
"\tldr r0, _08031484\n"
"\tldr r0, [r0]\n"
"\tmovs r1, 0x8C\n"
"\tlsls r1, 1\n"
"\tadds r0, r1\n"
"\tldr r0, [r0]\n"
"\tcmp r0, 0x2\n"
"\tbeq _0803146E\n"
"\tcmp r0, 0x4\n"
"\tbne _0803148E\n"
"_0803146E:\n"
"\tbl sub_8030C20\n"
"\tlsls r0, 24\n"
"\tcmp r0, 0\n"
"\tbeq _08031488\n"
"\tmovs r0, 0x5\n"
"\tbl sub_80310E4\n"
"\tb _0803148E\n"
"\t.align 2, 0\n"
"_08031480: .4byte gUnknown_203B480\n"
"_08031484: .4byte gUnknown_203B328\n"
"_08031488:\n"
"\tmovs r0, 0\n"
"\tbl sub_80310E4\n"
"_0803148E:\n"
"\tadd sp, 0x4\n"
"\tpop {r4,r5}\n"
"\tpop {r0}\n"
"\tbx r0"
);
}
#endif
void sub_8031498(void)
{
switch(sub_8030DA0())
{
case 0:
case 1:
break;
case 2:
case 3:
sub_8030DE4();
sub_80310E4(0);
break;
}
}