mirror of
https://github.com/pret/pmd-red.git
synced 2026-04-25 15:46:18 -05:00
Match CreateRescueTitle and CreateRescueDescription thanks to @jiang
This commit is contained in:
parent
c374c094d9
commit
9bf38c7e47
1225
asm/code_803B050.s
1225
asm/code_803B050.s
File diff suppressed because it is too large
Load Diff
|
|
@ -1,301 +0,0 @@
|
|||
#include "asm/constants/gba_constants.inc"
|
||||
#include "asm/macros.inc"
|
||||
|
||||
.syntax unified
|
||||
|
||||
.text
|
||||
|
||||
@ Menu that gets created when you talk to friend
|
||||
thumb_func_start CreateFriendActionMenu
|
||||
CreateFriendActionMenu:
|
||||
push {r4-r7,lr}
|
||||
ldr r3, _080274E4
|
||||
ldr r4, _080274E8
|
||||
ldr r0, [r4]
|
||||
movs r1, 0x8
|
||||
ldrsh r2, [r0, r1]
|
||||
movs r1, 0x58
|
||||
muls r2, r1
|
||||
ldr r1, [r3]
|
||||
adds r5, r1, r2
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
movs r1, 0
|
||||
movs r2, 0x14
|
||||
bl MemoryFill16
|
||||
ldrh r0, [r5]
|
||||
lsrs r0, 1
|
||||
movs r6, 0x1
|
||||
ands r0, r6
|
||||
cmp r0, 0
|
||||
beq _080274F4
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _080274EC
|
||||
str r0, [r1]
|
||||
movs r0, 0x90
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x7
|
||||
str r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_8027D9C
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _080274B6
|
||||
ldr r0, [r4]
|
||||
movs r1, 0xB6
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r6, [r0]
|
||||
_080274B6:
|
||||
movs r7, 0x1
|
||||
movs r0, 0x8
|
||||
bl sub_80023E4
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
beq _08027552
|
||||
ldrb r0, [r5, 0x2]
|
||||
cmp r0, 0
|
||||
bne _08027552
|
||||
ldr r3, [r4]
|
||||
movs r2, 0x8
|
||||
movs r4, 0x92
|
||||
lsls r4, 1
|
||||
adds r1, r3, r4
|
||||
ldr r0, _080274F0
|
||||
str r0, [r1]
|
||||
movs r1, 0x94
|
||||
lsls r1, 1
|
||||
adds r0, r3, r1
|
||||
str r2, [r0]
|
||||
b _08027550
|
||||
.align 2, 0
|
||||
_080274E4: .4byte gRecruitedPokemonRef
|
||||
_080274E8: .4byte gUnknown_203B2BC
|
||||
_080274EC: .4byte gFriendActionStandby
|
||||
_080274F0: .4byte gFriendActionMakeLeader
|
||||
_080274F4:
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x8E
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _08027658
|
||||
str r0, [r1]
|
||||
movs r0, 0x90
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x6
|
||||
str r0, [r1]
|
||||
movs r1, 0x8
|
||||
ldrsh r0, [r2, r1]
|
||||
bl sub_808D750
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08027522
|
||||
ldr r0, [r4]
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
strh r6, [r0]
|
||||
_08027522:
|
||||
movs r7, 0x1
|
||||
ldr r2, [r4]
|
||||
movs r3, 0x92
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
ldr r0, _0802765C
|
||||
str r0, [r1]
|
||||
movs r0, 0x94
|
||||
lsls r0, 1
|
||||
adds r1, r2, r0
|
||||
movs r0, 0x9
|
||||
str r0, [r1]
|
||||
adds r0, r5, 0
|
||||
bl sub_8027DCC
|
||||
lsls r0, 24
|
||||
cmp r0, 0
|
||||
bne _08027550
|
||||
ldr r0, [r4]
|
||||
movs r1, 0xB7
|
||||
lsls r1, 1
|
||||
adds r0, r1
|
||||
strh r7, [r0]
|
||||
_08027550:
|
||||
movs r7, 0x2
|
||||
_08027552:
|
||||
ldr r4, _08027660
|
||||
ldr r2, [r4]
|
||||
lsls r3, r7, 3
|
||||
movs r6, 0x8E
|
||||
lsls r6, 1
|
||||
adds r0, r2, r6
|
||||
adds r0, r3
|
||||
ldr r1, _08027664
|
||||
str r1, [r0]
|
||||
movs r5, 0x90
|
||||
lsls r5, 1
|
||||
adds r2, r5
|
||||
adds r2, r3
|
||||
movs r0, 0xA
|
||||
str r0, [r2]
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0
|
||||
bne _08027588
|
||||
ldr r0, [r4]
|
||||
lsls r1, r7, 1
|
||||
movs r2, 0xB6
|
||||
lsls r2, 1
|
||||
adds r0, r2
|
||||
adds r0, r1
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_08027588:
|
||||
adds r7, 0x1
|
||||
ldr r2, [r4]
|
||||
lsls r3, r7, 3
|
||||
adds r0, r2, r6
|
||||
adds r0, r3
|
||||
ldr r1, _08027668
|
||||
str r1, [r0]
|
||||
adds r2, r5
|
||||
adds r2, r3
|
||||
movs r0, 0xB
|
||||
str r0, [r2]
|
||||
bl GetNumberOfFilledInventorySlots
|
||||
cmp r0, 0x13
|
||||
bgt _080275AE
|
||||
ldr r0, [r4]
|
||||
ldrb r0, [r0, 0x14]
|
||||
cmp r0, 0
|
||||
bne _080275BE
|
||||
_080275AE:
|
||||
ldr r0, [r4]
|
||||
lsls r1, r7, 1
|
||||
movs r3, 0xB6
|
||||
lsls r3, 1
|
||||
adds r0, r3
|
||||
adds r0, r1
|
||||
movs r1, 0x1
|
||||
strh r1, [r0]
|
||||
_080275BE:
|
||||
adds r7, 0x1
|
||||
ldr r4, _08027660
|
||||
ldr r5, [r4]
|
||||
lsls r1, r7, 3
|
||||
movs r0, 0x8E
|
||||
lsls r0, 1
|
||||
adds r3, r5, r0
|
||||
adds r2, r3, r1
|
||||
ldr r0, _0802766C
|
||||
str r0, [r2]
|
||||
movs r2, 0x90
|
||||
lsls r2, 1
|
||||
adds r6, r5, r2
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x4
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r2, r3, r1
|
||||
ldr r0, _08027670
|
||||
str r0, [r2]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0xC
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r2, r3, r1
|
||||
ldr r0, _08027674
|
||||
str r0, [r2]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x5
|
||||
str r0, [r1]
|
||||
adds r7, 0x1
|
||||
lsls r1, r7, 3
|
||||
adds r3, r1
|
||||
movs r0, 0
|
||||
str r0, [r3]
|
||||
adds r1, r6, r1
|
||||
movs r0, 0x1
|
||||
str r0, [r1]
|
||||
movs r3, 0
|
||||
mov r12, r4
|
||||
cmp r3, r7
|
||||
bge _08027636
|
||||
adds r4, r6, 0
|
||||
movs r0, 0xB6
|
||||
lsls r0, 1
|
||||
adds r2, r5, r0
|
||||
_0802761E:
|
||||
ldrh r0, [r2]
|
||||
cmp r0, 0
|
||||
bne _0802762C
|
||||
ldr r1, [r4]
|
||||
ldr r0, [r5, 0x70]
|
||||
cmp r1, r0
|
||||
beq _080276A0
|
||||
_0802762C:
|
||||
adds r4, 0x8
|
||||
adds r2, 0x2
|
||||
adds r3, 0x1
|
||||
cmp r3, r7
|
||||
blt _0802761E
|
||||
_08027636:
|
||||
movs r3, 0
|
||||
cmp r3, r7
|
||||
bge _080276A0
|
||||
mov r2, r12
|
||||
ldr r1, [r2]
|
||||
movs r4, 0xB6
|
||||
lsls r4, 1
|
||||
adds r0, r1, r4
|
||||
ldrh r0, [r0]
|
||||
cmp r0, 0
|
||||
bne _08027678
|
||||
movs r2, 0x90
|
||||
lsls r2, 1
|
||||
adds r0, r1, r2
|
||||
ldr r0, [r0]
|
||||
str r0, [r1, 0x70]
|
||||
b _080276A0
|
||||
.align 2, 0
|
||||
_08027658: .4byte gFriendActionJoinTeam
|
||||
_0802765C: .4byte gFriendActionSayFarewell
|
||||
_08027660: .4byte gUnknown_203B2BC
|
||||
_08027664: .4byte gFriendActionGive
|
||||
_08027668: .4byte gFriendActionTake
|
||||
_0802766C: .4byte gFriendActionSummary
|
||||
_08027670: .4byte gFriendActionMoves
|
||||
_08027674: .4byte gFriendActionCheckIQ
|
||||
_08027678:
|
||||
adds r3, 0x1
|
||||
cmp r3, r7
|
||||
bge _080276A0
|
||||
mov r4, r12
|
||||
ldr r2, [r4]
|
||||
lsls r0, r3, 1
|
||||
movs r4, 0xB6
|
||||
lsls r4, 1
|
||||
adds r1, r2, r4
|
||||
adds r1, r0
|
||||
ldrh r0, [r1]
|
||||
cmp r0, 0
|
||||
bne _08027678
|
||||
lsls r0, r3, 3
|
||||
movs r3, 0x90
|
||||
lsls r3, 1
|
||||
adds r1, r2, r3
|
||||
adds r1, r0
|
||||
ldr r0, [r1]
|
||||
str r0, [r2, 0x70]
|
||||
_080276A0:
|
||||
pop {r4-r7}
|
||||
pop {r0}
|
||||
bx r0
|
||||
thumb_func_end CreateFriendActionMenu
|
||||
|
||||
.align 2,0
|
||||
|
|
@ -1,24 +1,22 @@
|
|||
struct unkStruct_802C39C
|
||||
{
|
||||
/* 0x0 */ u32 unk0[2];
|
||||
/* 0x8 */ struct DungeonLocation *dungeon;
|
||||
/* 0x8 */ struct WonderMailSub *unk8;
|
||||
/* 0xC */ u8 *playerName;
|
||||
/* 0x10 */ s16 clientSpecies;
|
||||
/* 0x12 */ s16 targetSpecies;
|
||||
/* 0x14 */ u8 targetItem;
|
||||
/* 0x15 */ u8 fill15[0x2E - 0x15];
|
||||
u8 unk2E;
|
||||
u8 fill2F[0x34 - 0x2F];
|
||||
u8 unk34;
|
||||
/* 0x2E */ u8 rewardType;
|
||||
u8 *unk30;
|
||||
/* 0x34 */ u8 rewardItem;
|
||||
u8 fill35[0x38 - 0x35];
|
||||
/* 0x38 */ u8 unk38[0x40 - 0x38];
|
||||
u8 unk40;
|
||||
u8 unk41;
|
||||
u8 unk42;
|
||||
u8 mailTitleType;
|
||||
u8 mailDescriptionType;
|
||||
u8 mailMissionType;
|
||||
u8 unk43;
|
||||
u8 unk44;
|
||||
u8 unk45;
|
||||
u8 fill46[0x48 - 0x46];
|
||||
u8 mailStatus; // mail status (suspend / take job / done)
|
||||
/* 0x48 */ u32 y;
|
||||
/* 0x4C */ u8 *unk4C;
|
||||
/* 0x50 */ u8 *unk50[2];
|
||||
|
|
|
|||
|
|
@ -3,13 +3,18 @@
|
|||
|
||||
#include "item.h"
|
||||
|
||||
struct WonderMailSub
|
||||
{
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
u32 seed;
|
||||
};
|
||||
|
||||
// size: 0x30
|
||||
struct unkStruct_203B480
|
||||
{
|
||||
/* 0x0 */ u8 mailType;
|
||||
/* 0x1 */ u8 missionType;
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
/* 0x8 */ u32 unk8;
|
||||
struct WonderMailSub unk4;
|
||||
/* 0xC */ s16 clientSpecies;
|
||||
/* 0xE */ s16 targetSpecies;
|
||||
union unk10_temp
|
||||
|
|
@ -67,4 +72,4 @@ s32 GetFirstIndexofMailType(u8 mailType);
|
|||
void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
|
||||
void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ struct subStruct_203B490
|
|||
{
|
||||
// size: 0xC
|
||||
struct DungeonLocation dungeon;
|
||||
u32 unk4;
|
||||
u32 seed;
|
||||
u32 unk8;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -47,9 +47,23 @@ enum WonderMailMissionTypes
|
|||
WONDER_MAIL_MISSION_TYPE_UNK6 = 6,
|
||||
};
|
||||
|
||||
enum MissionTypes
|
||||
{
|
||||
MISSION_TYPE_FRIEND_RESCUE,
|
||||
MISSION_TYPE_FIND_ITEM,
|
||||
MISSION_TYPE_DELIVER_ITEM,
|
||||
MISSION_TYPE_RESCUE_CLIENT,
|
||||
MISSION_TYPE_RESCUE_TARGET,
|
||||
MISSION_TYPE_ESCORT_CLIENT,
|
||||
MISSION_TYPE_SPECIAL_MISSION
|
||||
};
|
||||
|
||||
#define MAIL_STATUS_SUSPENDED 0
|
||||
|
||||
|
||||
#define NUM_POKEMON_NEWS 56 // 50 normal + 6 special issues
|
||||
#define PASSWORD_BUFFER_SIZE 54
|
||||
#define MAX_ITEM_REWARDS 3
|
||||
|
||||
|
||||
#endif //GUARD_CONSTANTS_WONDER_MAIL_H
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ struct unkStruct_203B2BC
|
|||
u32 moveIndex; // some sort of move index
|
||||
u16 moveID;
|
||||
struct Move moves[8];
|
||||
u16 moveIDs[4]; // some list of move IDs
|
||||
u16 moveIDs[MAX_MON_MOVES]; // some list of move IDs
|
||||
u32 menuAction1;
|
||||
u32 menuAction2;
|
||||
u32 menuAction3;
|
||||
|
|
@ -33,7 +33,29 @@ struct unkStruct_203B2BC
|
|||
|
||||
enum FriendAreaActionMenuStates {
|
||||
FRIEND_AREA_ACTION_MENU_INIT,
|
||||
FRIEND_AREA_ACTION_MENU_MAIN,
|
||||
FRIEND_AREA_ACTION_MENU_MAIN_2,
|
||||
FRIEND_AREA_ACTION_MENU_SUMMARY = 4,
|
||||
FRIEND_AREA_ACTION_MENU_CHECK_IQ = 5,
|
||||
FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT = 8,
|
||||
FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM,
|
||||
FRIEND_AREA_ACTION_MENU_EXIT = 0x11,
|
||||
};
|
||||
|
||||
enum FriendAreaActionMenuActions {
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_NONE = 1,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_YES,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_NO,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_INFO = 4,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY = 4,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_STANDBY,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_GIVE,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_TAKE,
|
||||
FRIEND_AREA_ACTION_MENU_ACTION_MOVES,
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ struct unkPokeSubStruct_C
|
|||
u8 fill1[3];
|
||||
};
|
||||
|
||||
enum PokemonUnk0Flags {
|
||||
FLAG_ON_TEAM = 2,
|
||||
};
|
||||
|
||||
// size: 0x58
|
||||
struct PokemonStruct
|
||||
{
|
||||
|
|
|
|||
|
|
@ -25,14 +25,13 @@ struct unkStruct_802F204
|
|||
};
|
||||
|
||||
// size: 0x14
|
||||
|
||||
struct WonderMail
|
||||
{
|
||||
/* 0x0 */ u8 mailType; // mail type
|
||||
/* 0x1 */ u8 missionType; // mission type
|
||||
u8 unk2;
|
||||
u8 unk3;
|
||||
/* 0x4 */ struct DungeonLocation dungeon;
|
||||
u32 unk8;
|
||||
/* 0x4 */ struct WonderMailSub unk4;
|
||||
/* 0xC */ s16 clientSpecies; // client pokemon
|
||||
/* 0xE */ s16 targetSpecies; // target
|
||||
/* 0x10 */ u8 targetItem; // item to find/deliver
|
||||
|
|
|
|||
|
|
@ -117,7 +117,6 @@ SECTIONS {
|
|||
src/friend_list_menu.o(.text);
|
||||
src/party_list_menu.o(.text);
|
||||
src/friend_area_action_menu.o(.text);
|
||||
asm/friend_area_action_menu.o(.text);
|
||||
src/friend_area_action_menu_1.o(.text);
|
||||
src/wonder_mail.o(.text);
|
||||
src/thank_you_wonder_mail.o(.text);
|
||||
|
|
|
|||
|
|
@ -1,15 +1,470 @@
|
|||
#include "global.h"
|
||||
#include "constants/wonder_mail.h"
|
||||
#include "pokemon.h"
|
||||
#include "pokemon_3.h"
|
||||
#include "event_flag.h"
|
||||
#include "exclusive_pokemon.h"
|
||||
#include "code_8094F88.h"
|
||||
#include "code_802C39C.h"
|
||||
#include "text_util.h"
|
||||
#include "text2.h"
|
||||
#include "code_800D090.h"
|
||||
#include "menu_input.h"
|
||||
|
||||
struct unkStruct_80E9920
|
||||
{
|
||||
s16 unkA;
|
||||
s16 unkB;
|
||||
u8 *text;
|
||||
};
|
||||
|
||||
struct unkStruct_80E9F8C
|
||||
{
|
||||
s16 unkA;
|
||||
s16 unkB;
|
||||
u8 *text1;
|
||||
u8 *text2;
|
||||
};
|
||||
|
||||
extern s16 gUnknown_80E80E0[];
|
||||
extern s16 gUnknown_80E8126[];
|
||||
extern u8 gUnknown_80E888C[];
|
||||
extern u8 *gUnknown_80E8BCC[];
|
||||
extern u8 gMankeyMissionDescription[];
|
||||
extern u8 gSmeargleMissionDescription[];
|
||||
extern u8 gMedichamMissionDescription[];
|
||||
extern u8 gUnknown_202DE58[];
|
||||
extern u8 gUnknown_80E8968[];
|
||||
extern u8 gUnknown_80E89B0[];
|
||||
extern u8 gAvailablePokemonNames[];
|
||||
extern u8 gDifficultyText[];
|
||||
extern u8 gPlaceText[];
|
||||
extern u8 gUnknown_80E8AD0[];
|
||||
extern u8 gUnknown_80E8AE0[];
|
||||
extern u8 gUnknown_80E8AEC[];
|
||||
extern u8 gUnknown_80E8B10[];
|
||||
extern u8 gUnknown_80E8AFC[];
|
||||
extern u8 gUnknown_80E8B20[];
|
||||
extern u8 gUnknown_80E8B40[];
|
||||
extern u8 gUnknown_80E8B2C[];
|
||||
extern u8 *gUnknown_80EB220[];
|
||||
extern u8 gRewardText[];
|
||||
extern u8 *gMissionRewardText[];
|
||||
extern u8 gUnknown_80E8B7C[];
|
||||
extern u8 *gUnknown_80EB2F0[];
|
||||
extern u8 gUnknown_80E89FC[];
|
||||
extern u8 gUnknown_80E8A40[];
|
||||
extern u8 gUnknown_80E8A7C[];
|
||||
extern u8 *gUnknown_80E8DE4[];
|
||||
extern u8 *gUnknown_80E8FB0[];
|
||||
extern u8 *gUnknown_80E91D4[];
|
||||
extern u8 *gUnknown_80E9820[10];
|
||||
extern u8 *gUnknown_80EAEB8[];
|
||||
extern u8 gSpecialMissionText[];
|
||||
extern u8 *gUnknown_80EB198[];
|
||||
extern u8 *gUnknown_80EB3F8[];
|
||||
extern u8 *gUnknown_80EB72C[22];
|
||||
extern u8 gUnknown_80E8AC8[];
|
||||
extern u8 gUnknown_80E8884[];
|
||||
extern u8 gMankeyMission[];
|
||||
extern u8 gSmeargleMission[];
|
||||
extern u8 gMedichamMission[];
|
||||
extern u8 gUnknown_80E8830[];
|
||||
extern u8 gUnknown_80E8848[];
|
||||
extern u8 gUnknown_80E885C[];
|
||||
extern u8 gUnknown_80E8AC8[];
|
||||
extern u8 *gUnknown_80E910C[];
|
||||
extern u8 *gUnknown_80E8C98[];
|
||||
extern u8 gUnknown_80E886C[];
|
||||
extern u8 *gUnknown_80EAE5C[];
|
||||
extern struct unkStruct_80E9F8C gUnknown_80E9F8C[10];
|
||||
extern struct unkStruct_80E9920 gUnknown_80E9920[10];
|
||||
extern u8 *gUnknown_80E8B94[];
|
||||
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern struct PokemonStruct *sub_808D378(void);
|
||||
|
||||
extern bool8 sub_803C0DC(s16);
|
||||
s32 sub_8016028(void);
|
||||
extern void PrintDungeonLocationtoBuffer(u8 *, void *);
|
||||
extern void PrintYellowDungeonNametoBuffer(u8 *, void *);
|
||||
extern u8 sub_803C1D0(struct WonderMailSub *, u8);
|
||||
extern u8 *sub_803C1F0(u8);
|
||||
void sub_803D414(u8 *, u8 *);
|
||||
|
||||
void sub_803B6B0(s32 x, s32 y, u8 index, u32 param_4)
|
||||
{
|
||||
xxx_call_draw_string(x,y,gUnknown_80E8B94[index],param_4,0);
|
||||
}
|
||||
|
||||
void CreateRescueTitle(struct unkStruct_802C39C *param_1)
|
||||
{
|
||||
char buf_1 [200];
|
||||
char buf_2 [20];
|
||||
char buf_3 [100];
|
||||
u8 *monName;
|
||||
u8 uVar1;
|
||||
|
||||
sub_803B6B0(10,param_1->y,param_1->unk43,param_1->unk0[0]);
|
||||
switch(param_1->mailTitleType) {
|
||||
case 3:
|
||||
xxx_call_draw_string(0x15,param_1->y,param_1->unk4C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 0:
|
||||
xxx_call_draw_string(0x15,param_1->y,gMankeyMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
xxx_call_draw_string(0x15,param_1->y,gSmeargleMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2:
|
||||
xxx_call_draw_string(0x15,param_1->y,gMedichamMission,param_1->unk0[0],0);
|
||||
break;
|
||||
case 7:
|
||||
PrintYellowDungeonNametoBuffer(buf_1, param_1->unk8);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 12:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8830,gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 11:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8848,gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E885C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 5:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E9F8C[param_1->unk0[1]].text1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 6:
|
||||
xxx_call_draw_string(0x15,param_1->y,gUnknown_80E886C,param_1->unk0[0],0);
|
||||
break;
|
||||
case 10: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EAE5C[(bVar2 & 3)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
case 9: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E910C[(bVar2 % 0xA)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8C98[(bVar2 % 0xf)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,param_1->y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (param_1->mailTitleType == 7) {
|
||||
if (param_1->playerName == NULL) {
|
||||
xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0);
|
||||
}
|
||||
else {
|
||||
sub_80922B4(buf_2,param_1->playerName,POKEMON_NAME_LENGTH);
|
||||
xxx_call_draw_string(0xb2 - sub_8016028(),param_1->y,buf_2,param_1->unk0[0],0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_3, param_1->unk8);
|
||||
sprintfStatic(buf_1,gUnknown_80E8884,buf_3); // Near %s
|
||||
}
|
||||
else {
|
||||
PrintDungeonLocationtoBuffer(buf_1, param_1->unk8);
|
||||
}
|
||||
xxx_call_draw_string(0x1d,param_1->y + 0xc,buf_1,param_1->unk0[0],0);
|
||||
}
|
||||
if (param_1->mailTitleType == 7) {
|
||||
uVar1 = sub_803C1D0(param_1->unk8,0);
|
||||
}
|
||||
else {
|
||||
uVar1 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]);
|
||||
}
|
||||
xxx_call_draw_string(0xb4,param_1->y,sub_803C1F0(uVar1),param_1->unk0[0],0);
|
||||
}
|
||||
|
||||
void CreateRescueDescription(struct unkStruct_802C39C *param_1)
|
||||
{
|
||||
u8 uVar3;
|
||||
int x;
|
||||
int counter;
|
||||
u32 color;
|
||||
s32 y;
|
||||
char buf_1 [300];
|
||||
char buf_2 [40];
|
||||
char buf_3 [20];
|
||||
char buf_4 [20];
|
||||
char buf_5 [100];
|
||||
u8 local_34 [24];
|
||||
u8 *monName;
|
||||
|
||||
y = 0;
|
||||
|
||||
xxx_call_draw_string(10,y,gUnknown_80E888C,param_1->unk0[0],0);
|
||||
xxx_call_draw_string(0x6c,y,gUnknown_80E8BCC[param_1->mailStatus],param_1->unk0[0],0);
|
||||
y += 0x10;
|
||||
switch(param_1->mailDescriptionType) {
|
||||
case 3:
|
||||
xxx_call_draw_string(10,y,param_1->unk50[0],param_1->unk0[0],0);
|
||||
break;
|
||||
case 0:
|
||||
xxx_call_draw_string(10,y,gMankeyMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
xxx_call_draw_string(10,y,gSmeargleMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2:
|
||||
xxx_call_draw_string(10,y,gMedichamMissionDescription,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8968,gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 5:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E89B0,gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 6:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E9920[param_1->unk0[1]].text,param_1->unk0[0],0);
|
||||
break;
|
||||
case 7:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E9F8C[param_1->unk0[1]].text2,gAvailablePokemonNames,gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 9:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E89FC,param_1->unk0[0],0); // This is a rescue through communication. Get a friend to help you!
|
||||
break;
|
||||
case 10:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8A40,param_1->unk0[0],0); // This is a rescue through communication. Rescue a friend!
|
||||
break;
|
||||
case 11:
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8A7C,param_1->unk0[0],0); // This is a rescue through communication. Send your thanks to a friend!
|
||||
break;
|
||||
case 15:
|
||||
case 16: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80EB3F8[(bVar2 % 0x16)],gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80EB72C[(bVar3 % 0x16)],gUnknown_202DE58);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 14: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EAEB8[(bVar2 % 0x14)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,(gUnknown_80EB198)[(bVar3 & 3)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 8: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80EB220[(bVar2 % 6)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80EB2F0[(bVar3 % 0x6)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
case 13: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E91D4[(bVar2 % 0x2d)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80E9820[(bVar3 % 10)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
u8 bVar2 = param_1->unk8->seed + param_1->unk8->dungeon.id;
|
||||
u8 bVar3 = param_1->unk8->seed + param_1->unk8->dungeon.floor;
|
||||
monName = GetMonSpecies(param_1->clientSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8DE4[(bVar2 % 0xd)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
sprintfStatic(buf_1,gUnknown_80E8FB0[(bVar3 % 0xd)],gAvailablePokemonNames);
|
||||
xxx_call_draw_string(10,y,buf_1,param_1->unk0[0],0);
|
||||
y -= 0xC;
|
||||
break;
|
||||
}
|
||||
}
|
||||
y += 0x1C;
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8AC8,param_1->unk0[0],0);
|
||||
if (param_1->playerName == NULL) {
|
||||
xxx_call_draw_string(0x44,y,GetMonSpecies(param_1->clientSpecies),param_1->unk0[0],0);
|
||||
}
|
||||
else {
|
||||
sub_80922B4(buf_3,param_1->playerName,POKEMON_NAME_LENGTH);
|
||||
sub_808D930(buf_4,param_1->clientSpecies);
|
||||
sprintfStatic(buf_2,gUnknown_80E8AD0,buf_3,buf_4);
|
||||
xxx_call_draw_string(0x44,y,buf_2,param_1->unk0[0],0);
|
||||
}
|
||||
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8AE0,param_1->unk0[0],0);
|
||||
switch(param_1->mailMissionType) {
|
||||
case MISSION_TYPE_FRIEND_RESCUE:
|
||||
xxx_call_draw_string(0x44,y,gUnknown_80E8AEC,param_1->unk0[0],0); // Friend Rescue
|
||||
break;
|
||||
case MISSION_TYPE_DELIVER_ITEM:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8AFC,gUnknown_202DE58); // Deliver #C4%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_FIND_ITEM:
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->targetItem,0);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B10,gUnknown_202DE58); // Find #C4%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_RESCUE_CLIENT:
|
||||
xxx_call_draw_string(0x44,y,gUnknown_80E8B20,param_1->unk0[0],0); // Help me.
|
||||
break;
|
||||
case MISSION_TYPE_ESCORT_CLIENT:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B2C,gAvailablePokemonNames); // Escort to #C6%s#R.
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_RESCUE_TARGET:
|
||||
monName = GetMonSpecies(param_1->targetSpecies);
|
||||
strcpy(gAvailablePokemonNames,monName);
|
||||
sprintfStatic(buf_1,gUnknown_80E8B40,gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case MISSION_TYPE_SPECIAL_MISSION:
|
||||
default:
|
||||
xxx_call_draw_string(0x44,y,gSpecialMissionText,param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gPlaceText,param_1->unk0[0],0);
|
||||
|
||||
// NOTE: check with TRUE is needed to match
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FIND_ITEM) {
|
||||
PrintDungeonLocationtoBuffer(buf_5,param_1->unk8);
|
||||
sprintfStatic(buf_1,gUnknown_80E8884,buf_5); // Near %s
|
||||
}
|
||||
else {
|
||||
PrintDungeonLocationtoBuffer(buf_1,param_1->unk8);
|
||||
}
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
if (param_1->mailMissionType == MISSION_TYPE_FRIEND_RESCUE) {
|
||||
uVar3 = sub_803C1D0(param_1->unk8, 0);
|
||||
}
|
||||
else {
|
||||
uVar3 = sub_803C1D0(param_1->unk8,param_1->unk50[1][1]);
|
||||
}
|
||||
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gDifficultyText,param_1->unk0[0],0);
|
||||
xxx_call_draw_string(0x44,y,sub_803C1F0(uVar3),param_1->unk0[0],0);
|
||||
y += 0xC;
|
||||
xxx_call_draw_string(10,y,gRewardText,param_1->unk0[0],0);
|
||||
|
||||
switch(param_1->rewardType) {
|
||||
case 0:
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 1:
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],param_1->unk30);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 2: // Item
|
||||
case 3: // Item + ?
|
||||
sub_8090DC4(gUnknown_202DE58,param_1->rewardItem,0);
|
||||
sprintfStatic(buf_1,gMissionRewardText[param_1->rewardType],gUnknown_202DE58);
|
||||
xxx_call_draw_string(0x44,y,buf_1,param_1->unk0[0],0);
|
||||
break;
|
||||
case 4: // Friend Area
|
||||
xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0);
|
||||
break;
|
||||
default:
|
||||
xxx_call_draw_string(0x44,y,gMissionRewardText[param_1->rewardType],param_1->unk0[0],0);
|
||||
break;
|
||||
}
|
||||
|
||||
// Draw the Password
|
||||
y += 0xC;
|
||||
if (((2 < (u8)(param_1->mailDescriptionType - 9)) && (param_1->mailDescriptionType != 3)) && (*param_1->unk50[1] == 5))
|
||||
{
|
||||
xxx_call_draw_string(10,y,gUnknown_80E8B7C,param_1->unk0[0],0); // Wonder Mail:
|
||||
sub_803D414(local_34,param_1->unk50[1]);
|
||||
for(counter = 0; counter < 24; counter++)
|
||||
{
|
||||
if (counter == 12) {
|
||||
y += 12;
|
||||
}
|
||||
color = 7;
|
||||
if (((3 < counter) && (color = 6, 7 < counter)) && ((color = 7)))
|
||||
{
|
||||
if(counter > 15)
|
||||
{
|
||||
if(counter < 20)
|
||||
{
|
||||
color = 6;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
x = counter % 12;
|
||||
sub_8012C60(x * 10 + 0x54,y,local_34[counter],color,param_1->unk0[0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool8 sub_803C0DC(s16 species)
|
||||
{
|
||||
s32 baseSpecies;
|
||||
s32 index;
|
||||
|
||||
baseSpecies = GetBaseSpecies(species);
|
||||
index = 0;
|
||||
if (gUnknown_80E80E0[index] != MONSTER_NONE)
|
||||
{
|
||||
while(gUnknown_80E80E0[index] != MONSTER_NONE) {
|
||||
if (gUnknown_80E80E0[index] == baseSpecies) {
|
||||
return FALSE;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_803C110(s16 index)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -296,15 +296,15 @@ void sub_809542C(struct unkStruct_809542C *param_1)
|
|||
gUnknown_203B480->mailType = 1;
|
||||
preload = gUnknown_203B480;
|
||||
uVar4 = param_1->unk4;
|
||||
preload->dungeon = param_1->unk0;
|
||||
preload->unk8 = uVar4;
|
||||
preload->unk4.dungeon = param_1->unk0;
|
||||
preload->unk4.seed = uVar4;
|
||||
sub_8094D28(Rand32Bit());
|
||||
gUnknown_203B480->unk10.unk10 = sub_8094E4C();
|
||||
gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum;
|
||||
PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct());
|
||||
CopyStringtoBuffer(gUnknown_203B480->playerName, buffer);
|
||||
gUnknown_203B480->unk24 = sub_8011C34();
|
||||
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeon.id);
|
||||
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->unk4.dungeon.id);
|
||||
}
|
||||
|
||||
void sub_8095494(struct unkStruct_809542C *param_1, u8 index)
|
||||
|
|
@ -316,8 +316,8 @@ void sub_8095494(struct unkStruct_809542C *param_1, u8 index)
|
|||
mail = gUnknown_203B480;
|
||||
mail += index;
|
||||
|
||||
temp = mail->dungeon;
|
||||
uVar1 = mail->unk8;
|
||||
temp = mail->unk4.dungeon;
|
||||
uVar1 = mail->unk4.seed;
|
||||
param_1->unk0 = temp;
|
||||
param_1->unk4 = uVar1;
|
||||
}
|
||||
|
|
@ -420,8 +420,8 @@ void sub_8095774(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
|
|||
u8 temp;
|
||||
|
||||
RestoreIntegerBits(a, &b->mailType, 4);
|
||||
RestoreDungeonLocation(a, &b->dungeon);
|
||||
RestoreIntegerBits(a, &b->unk8, 0x18);
|
||||
RestoreDungeonLocation(a, &b->unk4.dungeon);
|
||||
RestoreIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
RestoreIntegerBits(a, &b->clientSpecies, 0x9);
|
||||
RestoreIntegerBits(a, &b->unk10.unk10, 0x20);
|
||||
RestoreIntegerBits(a, &b->playerName, 0x50);
|
||||
|
|
@ -445,8 +445,8 @@ void sub_8095824(struct unkStruct_8094924 * a, struct unkStruct_203B480 *b)
|
|||
zero = 0;
|
||||
|
||||
SaveIntegerBits(a, &b->mailType, 4);
|
||||
SaveDungeonLocation(a, &b->dungeon);
|
||||
SaveIntegerBits(a, &b->unk8, 0x18);
|
||||
SaveDungeonLocation(a, &b->unk4.dungeon);
|
||||
SaveIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
SaveIntegerBits(a, &b->clientSpecies, 0x9);
|
||||
SaveIntegerBits(a, &b->unk10.unk10, 0x20);
|
||||
SaveIntegerBits(a, &b->playerName, 0x50);
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ void InitializeMailJobsNews(void)
|
|||
{
|
||||
gUnknown_203B490->unk230[index].dungeon.id = 99;
|
||||
gUnknown_203B490->unk230[index].dungeon.floor = 1;
|
||||
gUnknown_203B490->unk230[index].unk4 = 0;
|
||||
gUnknown_203B490->unk230[index].seed = 0;
|
||||
gUnknown_203B490->unk230[index].unk8 = 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -85,17 +85,17 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->dungeon.id) == 0)
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_DELIVER_ITEM && GetMaxItemsAllowed(data->unk4.dungeon.id) == 0)
|
||||
return FALSE;
|
||||
|
||||
if(data->unk2 > 9)
|
||||
return FALSE;
|
||||
|
||||
if(sub_809095C(data->dungeon.id))
|
||||
if(sub_809095C(data->unk4.dungeon.id))
|
||||
return FALSE;
|
||||
if(data->dungeon.floor >= GetDungeonFloorCount(data->dungeon.id))
|
||||
if(data->unk4.dungeon.floor >= GetDungeonFloorCount(data->unk4.dungeon.id))
|
||||
return FALSE;
|
||||
if(sub_809017C(&data->dungeon))
|
||||
if(sub_809017C(&data->unk4.dungeon))
|
||||
return FALSE;
|
||||
|
||||
if(data->clientSpecies == MONSTER_NONE)
|
||||
|
|
@ -127,7 +127,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
return FALSE;
|
||||
|
||||
// Item finding
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->dungeon.id, data->targetItem) == 0)
|
||||
if(data->missionType == WONDER_MAIL_MISSION_TYPE_FIND_ITEM && xxx_bit_lut_lookup_8091E50(data->unk4.dungeon.id, data->targetItem) == 0)
|
||||
return FALSE;
|
||||
|
||||
if(data->rewardType == BLANK_4 || data->rewardType == END_REWARDS || data->rewardType > END_REWARDS)
|
||||
|
|
@ -144,7 +144,7 @@ bool8 ValidateWonderMail(struct WonderMail *data)
|
|||
{
|
||||
if(GetFriendAreaUnlockCondition(data->friendAreaReward) != UNLOCK_WONDER_MAIL)
|
||||
return FALSE;
|
||||
if(sub_803C1D0(&data->dungeon, data->missionType) == 0)
|
||||
if(sub_803C1D0(&data->unk4.dungeon, data->missionType) == 0)
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
|
|
|
|||
|
|
@ -42,8 +42,8 @@ void SortPelipperJobs(void)
|
|||
{
|
||||
if(gUnknown_203B490->pelipperBoardJobs[index2].mailType != MAIL_TYPE_NONE)
|
||||
{
|
||||
if((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) ||
|
||||
((gUnknown_203B490->pelipperBoardJobs[index1].dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].dungeon.floor)))
|
||||
if((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) ||
|
||||
((gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.id == gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.id) && (gUnknown_203B490->pelipperBoardJobs[index1].unk4.dungeon.floor > gUnknown_203B490->pelipperBoardJobs[index2].unk4.dungeon.floor)))
|
||||
{
|
||||
mail = gUnknown_203B490->pelipperBoardJobs[index1];
|
||||
gUnknown_203B490->pelipperBoardJobs[index1] = gUnknown_203B490->pelipperBoardJobs[index2];
|
||||
|
|
@ -72,9 +72,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK2;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 1;
|
||||
mail->dungeon.id = DUNGEON_UPROAR_FOREST;
|
||||
mail->dungeon.floor = 10;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_UPROAR_FOREST;
|
||||
mail->unk4.dungeon.floor = 10;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_WYNAUT;
|
||||
mail->targetSpecies = MONSTER_MANKEY;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -90,9 +90,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK3;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 2;
|
||||
mail->dungeon.id = DUNGEON_HOWLING_FOREST;
|
||||
mail->dungeon.floor = 15;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_HOWLING_FOREST;
|
||||
mail->unk4.dungeon.floor = 15;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_SMEARGLE;
|
||||
mail->targetSpecies = MONSTER_SMEARGLE;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -107,9 +107,9 @@ void GeneratePelipperJobs(void)
|
|||
mail->mailType = MAIL_TYPE_UNK4;
|
||||
mail->missionType = WONDER_MAIL_MISSION_TYPE_UNK6;
|
||||
mail->unk2 = 3;
|
||||
mail->dungeon.id = DUNGEON_WISH_CAVE;
|
||||
mail->dungeon.floor = 20;
|
||||
mail->unk8 = Rand32Bit() & 0xffffff;
|
||||
mail->unk4.dungeon.id = DUNGEON_WISH_CAVE;
|
||||
mail->unk4.dungeon.floor = 20;
|
||||
mail->unk4.seed = Rand32Bit() & 0xffffff;
|
||||
mail->clientSpecies = MONSTER_MEDICHAM;
|
||||
mail->targetSpecies = MONSTER_MEDICHAM;
|
||||
mail->targetItem = 0;
|
||||
|
|
@ -136,9 +136,9 @@ bool8 IsMailinJobSlot(struct WonderMail *mail)
|
|||
if(jobSlot->mailType != MAIL_TYPE_NONE)
|
||||
if(mail->missionType == jobSlot->missionType)
|
||||
if(mail->unk2 == jobSlot->unk2)
|
||||
if(mail->dungeon.id == jobSlot->dungeon.id)
|
||||
if(mail->dungeon.floor == jobSlot->dungeon.floor)
|
||||
if(mail->unk8 == jobSlot->unk8)
|
||||
if(mail->unk4.dungeon.id == jobSlot->unk4.dungeon.id)
|
||||
if(mail->unk4.dungeon.floor == jobSlot->unk4.dungeon.floor)
|
||||
if(mail->unk4.seed == jobSlot->unk4.seed)
|
||||
if(mail->clientSpecies == jobSlot->clientSpecies)
|
||||
if(mail->targetSpecies == jobSlot->targetSpecies)
|
||||
if(mail->targetItem == jobSlot->targetItem)
|
||||
|
|
@ -157,8 +157,8 @@ bool8 sub_809693C(struct WonderMail *mail)
|
|||
bool8 escortMission;
|
||||
s32 index;
|
||||
|
||||
dungeonIndex = mail->dungeon.id;
|
||||
floor = mail->dungeon.floor;
|
||||
dungeonIndex = mail->unk4.dungeon.id;
|
||||
floor = mail->unk4.dungeon.floor;
|
||||
escortMission = FALSE;
|
||||
if (!IsValidWonderMail(mail)) {
|
||||
return FALSE;
|
||||
|
|
@ -204,7 +204,7 @@ s32 CountJobsinDungeon(u8 dungeon)
|
|||
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
|
||||
{
|
||||
mail = GetJobSlotInfo(index);
|
||||
if ((mail->dungeon.id == dungeon) &&
|
||||
if ((mail->unk4.dungeon.id == dungeon) &&
|
||||
(((mail->mailType == MAIL_TYPE_TAKEN_JOB || (mail->mailType == MAIL_TYPE_UNK8)) || (mail->mailType == MAIL_TYPE_UNK9)))) {
|
||||
count++;
|
||||
}
|
||||
|
|
@ -222,7 +222,7 @@ bool8 sub_8096A08(u8 dungeon, u8 *param_2)
|
|||
for(index = 0; index < MAX_ACCEPTED_JOBS; index++)
|
||||
{
|
||||
mail = GetJobSlotInfo(index);
|
||||
if(mail->dungeon.id == dungeon)
|
||||
if(mail->unk4.dungeon.id == dungeon)
|
||||
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
|
||||
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
|
||||
{
|
||||
|
|
@ -281,7 +281,7 @@ void sub_8096AF8(struct unkStruct_8096AF8 *param_1, u8 slotIndex,u8 dungeon)
|
|||
param_1->unk0 = FALSE;
|
||||
param_1->clientSpecies = jobSlot->clientSpecies;
|
||||
param_1->targetSpecies = MONSTER_NONE;
|
||||
if (jobSlot->dungeon.id == dungeon) {
|
||||
if (jobSlot->unk4.dungeon.id == dungeon) {
|
||||
switch(jobSlot->missionType) {
|
||||
case WONDER_MAIL_MISSION_TYPE_FIND_ITEM:
|
||||
if (jobSlot->mailType == MAIL_TYPE_TAKEN_JOB) {
|
||||
|
|
@ -322,7 +322,7 @@ s16 sub_8096B98(u8 dungeon)
|
|||
mail = GetJobSlotInfo(index);
|
||||
if(mail->mailType == MAIL_TYPE_TAKEN_JOB)
|
||||
if(mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT)
|
||||
if(mail->dungeon.id == dungeon)
|
||||
if(mail->unk4.dungeon.id == dungeon)
|
||||
return mail->targetSpecies;
|
||||
}
|
||||
return 0;
|
||||
|
|
@ -368,7 +368,7 @@ bool8 sub_8096C08(u8 *jobIndex)
|
|||
void ResetJobSlot(u8 index)
|
||||
{
|
||||
gUnknown_203B490->jobSlots[index].mailType = MAIL_TYPE_NONE;
|
||||
gUnknown_203B490->jobSlots[index].dungeon.id = 99;
|
||||
gUnknown_203B490->jobSlots[index].dungeon.floor = 0;
|
||||
gUnknown_203B490->jobSlots[index].unk4.dungeon.id = 99;
|
||||
gUnknown_203B490->jobSlots[index].unk4.dungeon.floor = 0;
|
||||
gUnknown_203B490->jobSlots[index].rewardType = MONEY1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,8 +72,8 @@ bool8 GenerateMailJobDungeonInfo(struct WonderMail *mail)
|
|||
}
|
||||
|
||||
if (flag) {
|
||||
mail->dungeon.id = dungeon;
|
||||
mail->dungeon.floor = floor;
|
||||
mail->unk4.dungeon.id = dungeon;
|
||||
mail->unk4.dungeon.floor = floor;
|
||||
return TRUE;
|
||||
}
|
||||
floor++;
|
||||
|
|
@ -96,11 +96,11 @@ bool8 sub_8095E38(struct WonderMail *mail, u8 dungeon, u32 floor, u8 param_4)
|
|||
{
|
||||
if (mail->mailType != MAIL_TYPE_NONE) {
|
||||
if ((mail->missionType == WONDER_MAIL_MISSION_TYPE_ESCORT_CLIENT) && (param_4 == 1)) {
|
||||
if (mail->dungeon.id == dungeon) {
|
||||
if (mail->unk4.dungeon.id == dungeon) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
else if ((mail->dungeon.id == dungeon) && (mail->dungeon.floor == floor)) {
|
||||
else if ((mail->unk4.dungeon.id == dungeon) && (mail->unk4.dungeon.floor == floor)) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ bool8 sub_8096F50(struct WonderMail *mail)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
temp = &gUnknown_203B490->unk230[index];
|
||||
if(temp->dungeon.id == mail->dungeon.id)
|
||||
if(temp->dungeon.floor == mail->dungeon.floor)
|
||||
if(temp->unk4 == mail->unk8)
|
||||
if(temp->dungeon.id == mail->unk4.dungeon.id)
|
||||
if(temp->dungeon.floor == mail->unk4.dungeon.floor)
|
||||
if(temp->seed == mail->unk4.seed)
|
||||
if(temp->unk8 == temp2)
|
||||
return TRUE;
|
||||
}
|
||||
|
|
@ -96,7 +96,7 @@ u32 RestoreMailInfo(u8 *r0, u32 size)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
|
||||
RestoreIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
RestoreDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
|
|
@ -140,7 +140,7 @@ u32 SaveMailInfo(u8 *r0, u32 size)
|
|||
for(index = 0; index < 0x10; index++)
|
||||
{
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk8, 0x20);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].unk4, 0x18);
|
||||
SaveIntegerBits(&backup, &gUnknown_203B490->unk230[index].seed, 0x18);
|
||||
SaveDungeonLocation(&backup, &gUnknown_203B490->unk230[index].dungeon);
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
|
|
@ -158,8 +158,8 @@ void RestoreWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
|||
RestoreIntegerBits(a, &b->rewardType, 4);
|
||||
RestoreIntegerBits(a, &b->itemReward, 8);
|
||||
RestoreIntegerBits(a, &b->friendAreaReward, 6);
|
||||
RestoreIntegerBits(a, &b->unk8, 0x18);
|
||||
RestoreDungeonLocation(a, &b->dungeon);
|
||||
RestoreIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
RestoreDungeonLocation(a, &b->unk4.dungeon);
|
||||
}
|
||||
|
||||
void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
||||
|
|
@ -173,8 +173,8 @@ void SaveWonderMail(struct unkStruct_8094924 *a, struct WonderMail *b)
|
|||
SaveIntegerBits(a, &b->rewardType, 4);
|
||||
SaveIntegerBits(a, &b->itemReward, 8);
|
||||
SaveIntegerBits(a, &b->friendAreaReward, 6);
|
||||
SaveIntegerBits(a, &b->unk8, 0x18);
|
||||
SaveDungeonLocation(a, &b->dungeon);
|
||||
SaveIntegerBits(a, &b->unk4.seed, 0x18);
|
||||
SaveDungeonLocation(a, &b->unk4.dungeon);
|
||||
}
|
||||
|
||||
void sub_80972F4(void)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
#include "global.h"
|
||||
#include "constants/dungeon.h"
|
||||
#include "memory.h"
|
||||
#include "text1.h"
|
||||
#include "text2.h"
|
||||
|
|
@ -12,6 +13,7 @@
|
|||
#include "code_80130A8.h"
|
||||
#include "code_801EE10_1.h"
|
||||
#include "code_801B3C0.h"
|
||||
#include "event_flag.h"
|
||||
|
||||
extern struct unkStruct_203B2BC *gUnknown_203B2BC;
|
||||
|
||||
|
|
@ -42,6 +44,33 @@ extern void sub_8027CA0();
|
|||
extern void sub_8027D00();
|
||||
extern void CreateFriendActionMenu();
|
||||
extern void sub_80276A8();
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct);
|
||||
extern u8 sub_8027DCC(struct PokemonStruct *);
|
||||
extern u32 sub_801EF38(u8 r0);
|
||||
extern void sub_801F214();
|
||||
|
||||
extern void PlaySound(u32);
|
||||
extern void nullsub_104();
|
||||
extern void sub_8099690(u32);
|
||||
|
||||
extern void sub_808D31C(struct PokemonStruct *);
|
||||
extern struct PokemonStruct *sub_808D3F8(void);
|
||||
extern struct PokemonStruct *sub_808D3BC(void);
|
||||
extern u32 sub_801F890(void);
|
||||
extern void sub_801F8D0(void);
|
||||
extern u8 gUnknown_202DE58[];
|
||||
extern u32 sub_801F194(void);
|
||||
extern u32 sub_801BF48(void);
|
||||
extern void sub_801BF98(void);
|
||||
extern u32 sub_80244E4(void);
|
||||
extern void sub_802453C(void);
|
||||
extern bool8 sub_808D750(s16 index_);
|
||||
extern struct PokemonStruct *GetPlayerPokemonStruct(void);
|
||||
extern void sub_808ED00(void);
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *);
|
||||
u8 sub_8027E4C(struct PokemonStruct *r0);
|
||||
void sub_8027EB8(void);
|
||||
|
||||
const struct UnkTextStruct2 gUnknown_80DD6EC =
|
||||
{
|
||||
|
|
@ -132,25 +161,25 @@ u32 sub_80270A4(void)
|
|||
{
|
||||
switch(gUnknown_203B2BC->state) {
|
||||
case FRIEND_AREA_ACTION_MENU_INIT:
|
||||
SetFriendAreaActionMenuState(1);
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN);
|
||||
break;
|
||||
case 1:
|
||||
case 2:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN_2:
|
||||
sub_80277FC();
|
||||
break;
|
||||
case 3:
|
||||
sub_80278B4();
|
||||
break;
|
||||
case 4:
|
||||
case FRIEND_AREA_ACTION_MENU_SUMMARY:
|
||||
sub_8027A40();
|
||||
break;
|
||||
case 5:
|
||||
case FRIEND_AREA_ACTION_MENU_CHECK_IQ:
|
||||
sub_8027A5C();
|
||||
break;
|
||||
case 8:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT:
|
||||
sub_8027A78();
|
||||
break;
|
||||
case 9:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM:
|
||||
sub_8027AE4();
|
||||
break;
|
||||
case 10:
|
||||
|
|
@ -232,10 +261,10 @@ void sub_8027274(void)
|
|||
case FRIEND_AREA_ACTION_MENU_INIT:
|
||||
case FRIEND_AREA_ACTION_MENU_EXIT:
|
||||
break;
|
||||
case 1:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN:
|
||||
sub_8023868(1,0,0,7);
|
||||
break;
|
||||
case 2:
|
||||
case FRIEND_AREA_ACTION_MENU_MAIN_2:
|
||||
sub_8023B7C(1);
|
||||
break;
|
||||
case 3:
|
||||
|
|
@ -243,10 +272,10 @@ void sub_8027274(void)
|
|||
sub_8023DA4();
|
||||
sub_8012D60(&gUnknown_203B2BC->unk7C,gUnknown_203B2BC->menuItems,0,gUnknown_203B2BC->unk16C,gUnknown_203B2BC->menuAction1,2);
|
||||
break;
|
||||
case 4:
|
||||
case FRIEND_AREA_ACTION_MENU_SUMMARY:
|
||||
sub_8024458(gUnknown_203B2BC->targetPoke,2);
|
||||
break;
|
||||
case 5:
|
||||
case FRIEND_AREA_ACTION_MENU_CHECK_IQ:
|
||||
sub_801BEEC(gUnknown_203B2BC->targetPoke);
|
||||
break;
|
||||
case 10:
|
||||
|
|
@ -270,11 +299,11 @@ void sub_8027274(void)
|
|||
case 0xf:
|
||||
sub_801F1B0(1,0);
|
||||
break;
|
||||
case 8:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT:
|
||||
sub_8027794();
|
||||
sub_8014248(gFriendAreaActionSayFarewellPrompt,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
|
||||
break;
|
||||
case 9:
|
||||
case FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM:
|
||||
sub_8027794();
|
||||
sub_8014248(gFriendAreaActionSayFarewellConfirm,0,3,gUnknown_203B2BC->menuItems,0,4,0,0,0x101);
|
||||
break;
|
||||
|
|
@ -283,16 +312,609 @@ void sub_8027274(void)
|
|||
sub_801F808(gUnknown_203B2BC->moveIDs);
|
||||
break;
|
||||
case 6:
|
||||
gUnknown_203B2BC->fallbackState = 2;
|
||||
gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2;
|
||||
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
|
||||
// returned to the Toolbox
|
||||
sub_80141B4(gUnknown_80DD8A0,0,0,0x101);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2BC->fallbackState = 2;
|
||||
gUnknown_203B2BC->fallbackState = FRIEND_AREA_ACTION_MENU_MAIN_2;
|
||||
// The {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} was
|
||||
// returned to storage
|
||||
sub_80141B4(gUnknown_80DD8D0,0,0,0x101);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
extern u8 gFriendActionStandby[];
|
||||
extern u8 gFriendActionMakeLeader[];
|
||||
extern u8 gFriendActionJoinTeam[];
|
||||
extern u8 gFriendActionSayFarewell[];
|
||||
extern u8 gFriendActionGive[];
|
||||
extern u8 gFriendActionTake[];
|
||||
extern u8 gFriendActionSummary[];
|
||||
extern u8 gFriendActionMoves[];
|
||||
extern u8 gFriendActionCheckIQ[];
|
||||
extern u8 *gUnknown_80D4920[];
|
||||
extern u8 *gUnknown_80D4928[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
extern u8 gUnknown_80DD958[];
|
||||
|
||||
|
||||
void CreateFriendActionMenu(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
loopMax = 0;
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
|
||||
if((pokeStruct->unk0 >> 1) % 2)
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionStandby;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_STANDBY;
|
||||
if(!sub_8027D9C(pokeStruct))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
if(sub_80023E4(8) && !pokeStruct->isTeamLeader)
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMakeLeader;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER;
|
||||
loopMax += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionJoinTeam;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM;
|
||||
if(!sub_808D750(gUnknown_203B2BC->targetPoke))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSayFarewell;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL;
|
||||
if(!sub_8027DCC(pokeStruct))
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
}
|
||||
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE;
|
||||
if(GetNumberOfFilledInventorySlots() == 0)
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionTake;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_TAKE;
|
||||
if(GetNumberOfFilledInventorySlots() >= INVENTORY_SIZE || gUnknown_203B2BC->item2.id == ITEM_NOTHING)
|
||||
{
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionSummary;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionMoves;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_MOVES;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionCheckIQ;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction1)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction1 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80276A8(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_GIVE;
|
||||
if (GetNumberOfFilledInventorySlots() == 0) {
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_INFO;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027794(void)
|
||||
{
|
||||
s32 loopMax = 0;
|
||||
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_YES;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NO;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = FRIEND_AREA_ACTION_MENU_ACTION_NONE;
|
||||
}
|
||||
|
||||
void sub_80277FC(void)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
switch(sub_8023A94(TRUE)) {
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(3);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 2:
|
||||
sub_8023C60();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80278B4(void)
|
||||
{
|
||||
struct PokemonStruct *playerStruct;
|
||||
struct PokemonStruct *pokeStruct1;
|
||||
struct PokemonStruct *pokeStruct2;
|
||||
u32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_8023A94(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) {
|
||||
gUnknown_203B2BC->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction) {
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_JOIN_TEAM:
|
||||
if (sub_808D750(gUnknown_203B2BC->targetPoke)) {
|
||||
#ifdef NONMATCHING
|
||||
pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
#else
|
||||
register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]);
|
||||
struct PokemonStruct* p = gRecruitedPokemonRef->pokemon;
|
||||
size_t addr = offset + (size_t)p;
|
||||
pokeStruct1 = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
pokeStruct1->unk0 |= FLAG_ON_TEAM;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_STANDBY:
|
||||
gUnknown_203B2BC->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_MAKE_LEADER:
|
||||
pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
playerStruct = GetPlayerPokemonStruct();
|
||||
if (!pokeStruct2->isTeamLeader) {
|
||||
playerStruct->isTeamLeader = FALSE;
|
||||
pokeStruct2->isTeamLeader = TRUE;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_SAY_FAREWELL:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_PROMPT);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_MOVES:
|
||||
SetFriendAreaActionMenuState(0xe);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_GIVE:
|
||||
SetFriendAreaActionMenuState(10);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_TAKE:
|
||||
PlaySound(0x14d);
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_SUMMARY:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SUMMARY);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_CHECK_IQ:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_CHECK_IQ);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A40(void)
|
||||
{
|
||||
switch(sub_80244E4())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802453C();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A5C(void)
|
||||
{
|
||||
switch(sub_801BF48())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801BF98();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool8 sub_8027A78_sub(void) {
|
||||
if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8027A78(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
if(sub_80144A4(&menuAction) == 0)
|
||||
{
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NO:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_YES:
|
||||
if (sub_8027A78_sub())
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_SAY_FAREWELL_CONFIRM);
|
||||
else
|
||||
{
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027AE4(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
if (sub_80144A4(&menuAction) == 0) {
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NO:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_YES:
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027B28(void)
|
||||
{
|
||||
switch(sub_801A6E8(TRUE))
|
||||
{
|
||||
case 3:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
SetFriendAreaActionMenuState(0xc);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 2:
|
||||
sub_801A928();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027BD8(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_801A6E8(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != FRIEND_AREA_ACTION_MENU_ACTION_NONE)) {
|
||||
gUnknown_203B2BC->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_GIVE:
|
||||
PlaySound(0x14d);
|
||||
ShiftItemsDownFrom(gUnknown_203B2BC->id);
|
||||
FillInventoryGaps();
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
|
||||
sub_801A928();
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_INFO:
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case FRIEND_AREA_ACTION_MENU_ACTION_NONE:
|
||||
SetFriendAreaActionMenuState(0xb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027C84()
|
||||
{
|
||||
switch(sub_801B410())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801B450();
|
||||
SetFriendAreaActionMenuState(0xB);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027CA0(void)
|
||||
{
|
||||
switch(sub_801EF38(1))
|
||||
{
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B2BC->moveIndex = sub_801F194();
|
||||
gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id;
|
||||
SetFriendAreaActionMenuState(0x10);
|
||||
break;
|
||||
case 2:
|
||||
sub_801F214();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D00(void)
|
||||
{
|
||||
switch(sub_801F890())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801F8D0();
|
||||
SetFriendAreaActionMenuState(0xF);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FriendAreaActionMenu_GotoFallbackState(void)
|
||||
{
|
||||
s32 temp;
|
||||
if(sub_80144A4(&temp) == 0)
|
||||
{
|
||||
SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D40(u32 r0, struct BulkItem *heldItem)
|
||||
{
|
||||
|
||||
struct Item slot;
|
||||
struct unkStruct_8090F58 a3;
|
||||
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
HeldItemToSlot(&slot, heldItem);
|
||||
a3.unk0 = 0;
|
||||
a3.unk4 = 0;
|
||||
a3.unk8 = 1;
|
||||
slot.flags = ITEM_FLAG_EXISTS;
|
||||
sub_8090E14(gUnknown_202DE58, &slot, &a3);
|
||||
xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(!sub_80023E4(8))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8027DCC(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(sub_808D3BC() != pokeStruct)
|
||||
if(sub_808D3F8() != pokeStruct)
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(sub_80023E4(8))
|
||||
goto check;
|
||||
}
|
||||
else
|
||||
{
|
||||
check:
|
||||
if(sub_8027E18(pokeStruct) != 3)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(pokeStruct->heldItem.id == ITEM_NOTHING)
|
||||
return 0;
|
||||
else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
|
||||
return 1;
|
||||
else if(sub_8027E4C(pokeStruct))
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool8 sub_8027E4C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id))
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(IsThrowableItem(pokeStruct->heldItem.id))
|
||||
{
|
||||
if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7)
|
||||
return FALSE;
|
||||
}
|
||||
else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8027EB8(void)
|
||||
{
|
||||
switch(sub_8027E18(gUnknown_203B2BC->pokeStruct))
|
||||
{
|
||||
case 1:
|
||||
PlaySound(0x14d);
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(6);
|
||||
break;
|
||||
case 2:
|
||||
PlaySound(0x14d);
|
||||
if(IsThrowableItem(gUnknown_203B2BC->item2.id))
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity;
|
||||
else
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1;
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(7);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_MAIN_2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,495 +57,3 @@ ALIGNED(4) const u8 gFriendActionCheckIQ[] = "Check IQ";
|
|||
|
||||
ALIGNED(4) const u8 gUnknown_80DD958[] = _("Item: {COLOR_1 GREEN}{ARG_MOVE_ITEM_0}{END_COLOR_TEXT_1} ");
|
||||
static const u8 filler[] = "pksdir0";
|
||||
|
||||
|
||||
extern u8 *gUnknown_80D4920[];
|
||||
extern u8 *gUnknown_80D4928[];
|
||||
extern u8 *gUnknown_80D4970[];
|
||||
|
||||
void sub_80276A8(void)
|
||||
{
|
||||
int index;
|
||||
s32 loopMax;
|
||||
|
||||
loopMax = 0;
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = gFriendActionGive;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 10;
|
||||
if (GetNumberOfFilledInventorySlots() == 0) {
|
||||
gUnknown_203B2BC->unk16C[loopMax] = 1;
|
||||
}
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4970;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 4;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = 0;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 1;
|
||||
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
if(gUnknown_203B2BC->menuItems[index].menuAction == gUnknown_203B2BC->menuAction2)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
for(index = 0; index < loopMax; index++)
|
||||
{
|
||||
if(gUnknown_203B2BC->unk16C[index] == 0)
|
||||
{
|
||||
gUnknown_203B2BC->menuAction2 = gUnknown_203B2BC->menuItems[index].menuAction;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027794(void)
|
||||
{
|
||||
s32 loopMax = 0;
|
||||
|
||||
MemoryFill16(gUnknown_203B2BC->unk16C,0,sizeof(gUnknown_203B2BC->unk16C));
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4920;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 0x2;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = *gUnknown_80D4928;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 3;
|
||||
loopMax += 1;
|
||||
gUnknown_203B2BC->menuItems[loopMax].text = NULL;
|
||||
gUnknown_203B2BC->menuItems[loopMax].menuAction = 1;
|
||||
}
|
||||
|
||||
void sub_80277FC(void)
|
||||
{
|
||||
struct PokemonStruct *pokeStruct;
|
||||
|
||||
switch(sub_8023A94(TRUE)) {
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
case 3:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(3);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->targetPoke = sub_8023B44();
|
||||
pokeStruct = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
gUnknown_203B2BC->pokeStruct = pokeStruct;
|
||||
gUnknown_203B2BC->isTeamLeader = pokeStruct->isTeamLeader;
|
||||
PeekPokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 2:
|
||||
sub_8023C60();
|
||||
SetFriendAreaActionMenuState(FRIEND_AREA_ACTION_MENU_EXIT);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_80278B4(void)
|
||||
{
|
||||
struct PokemonStruct *playerStruct;
|
||||
struct PokemonStruct *pokeStruct1;
|
||||
struct PokemonStruct *pokeStruct2;
|
||||
u32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_8023A94(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) {
|
||||
gUnknown_203B2BC->menuAction1 = menuAction;
|
||||
}
|
||||
switch(menuAction) {
|
||||
case 6:
|
||||
if (sub_808D750(gUnknown_203B2BC->targetPoke)) {
|
||||
#ifdef NONMATCHING
|
||||
pokeStruct1 = &gRecruiedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
#else
|
||||
register size_t offset asm("r1") = offsetof(struct unkStruct_203B45C, pokemon[gUnknown_203B2BC->targetPoke]);
|
||||
struct PokemonStruct* p = gRecruitedPokemonRef->pokemon;
|
||||
size_t addr = offset + (size_t)p;
|
||||
pokeStruct1 = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
pokeStruct1->unk0 |= 2;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2BC->pokeStruct->unk0 &= 0xfffd;
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 8:
|
||||
pokeStruct2 = &gRecruitedPokemonRef->pokemon[gUnknown_203B2BC->targetPoke];
|
||||
playerStruct = GetPlayerPokemonStruct();
|
||||
if (!pokeStruct2->isTeamLeader) {
|
||||
playerStruct->isTeamLeader = FALSE;
|
||||
pokeStruct2->isTeamLeader = TRUE;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 9:
|
||||
SetFriendAreaActionMenuState(8);
|
||||
break;
|
||||
case 0xc:
|
||||
SetFriendAreaActionMenuState(0xe);
|
||||
break;
|
||||
case 10:
|
||||
SetFriendAreaActionMenuState(10);
|
||||
break;
|
||||
case 0xb:
|
||||
PlaySound(0x14d);
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->item2);
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 4:
|
||||
SetFriendAreaActionMenuState(4);
|
||||
break;
|
||||
case 5:
|
||||
SetFriendAreaActionMenuState(5);
|
||||
break;
|
||||
case 1:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A40(void)
|
||||
{
|
||||
switch(sub_80244E4())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_802453C();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027A5C(void)
|
||||
{
|
||||
switch(sub_801BF48())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801BF98();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline bool8 sub_8027A78_sub(void) {
|
||||
if (gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_HOWLING_FOREST_2 || gUnknown_203B2BC->pokeStruct->dungeonLocation.id == DUNGEON_POKEMON_SQUARE)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void sub_8027A78(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
if(sub_80144A4(&menuAction) == 0)
|
||||
{
|
||||
switch(menuAction)
|
||||
{
|
||||
case 1:
|
||||
case 3:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 2:
|
||||
if (sub_8027A78_sub())
|
||||
SetFriendAreaActionMenuState(9);
|
||||
else
|
||||
{
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027AE4(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
if (sub_80144A4(&menuAction) == 0) {
|
||||
switch(menuAction)
|
||||
{
|
||||
case 1:
|
||||
case 3:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 2:
|
||||
sub_8027EB8();
|
||||
sub_808D31C(gUnknown_203B2BC->pokeStruct);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027B28(void)
|
||||
{
|
||||
switch(sub_801A6E8(TRUE))
|
||||
{
|
||||
case 3:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
SetFriendAreaActionMenuState(0xc);
|
||||
break;
|
||||
case 4:
|
||||
gUnknown_203B2BC->id = sub_801A8AC();
|
||||
gUnknown_203B2BC->itemToGive.id = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].id;
|
||||
gUnknown_203B2BC->itemToGive.quantity = gTeamInventoryRef->teamItems[gUnknown_203B2BC->id].quantity;
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 2:
|
||||
sub_801A928();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027BD8(void)
|
||||
{
|
||||
s32 menuAction;
|
||||
|
||||
menuAction = 0;
|
||||
sub_801A6E8(FALSE);
|
||||
if ((sub_8012FD8(&gUnknown_203B2BC->unk7C) == 0) && (sub_8013114(&gUnknown_203B2BC->unk7C,&menuAction), menuAction != 1)) {
|
||||
gUnknown_203B2BC->menuAction2 = menuAction;
|
||||
}
|
||||
switch(menuAction)
|
||||
{
|
||||
case 10:
|
||||
PlaySound(0x14d);
|
||||
ShiftItemsDownFrom(gUnknown_203B2BC->id);
|
||||
FillInventoryGaps();
|
||||
if (gUnknown_203B2BC->item2.id != ITEM_NOTHING) {
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
}
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke,&gUnknown_203B2BC->itemToGive);
|
||||
sub_801A928();
|
||||
nullsub_104();
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
case 4:
|
||||
sub_8099690(0);
|
||||
SetFriendAreaActionMenuState(0xd);
|
||||
break;
|
||||
case 1:
|
||||
SetFriendAreaActionMenuState(0xb);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027C84()
|
||||
{
|
||||
switch(sub_801B410())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801B450();
|
||||
SetFriendAreaActionMenuState(0xB);
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027CA0(void)
|
||||
{
|
||||
switch(sub_801EF38(1))
|
||||
{
|
||||
case 3:
|
||||
case 4:
|
||||
gUnknown_203B2BC->moveIndex = sub_801F194();
|
||||
gUnknown_203B2BC->moveID = gUnknown_203B2BC->moves[gUnknown_203B2BC->moveIndex].id;
|
||||
SetFriendAreaActionMenuState(0x10);
|
||||
break;
|
||||
case 2:
|
||||
sub_801F214();
|
||||
SetFriendAreaActionMenuState(0x2);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D00(void)
|
||||
{
|
||||
switch(sub_801F890())
|
||||
{
|
||||
case 2:
|
||||
case 3:
|
||||
sub_801F8D0();
|
||||
SetFriendAreaActionMenuState(0xF);
|
||||
break;
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void FriendAreaActionMenu_GotoFallbackState(void)
|
||||
{
|
||||
s32 temp;
|
||||
if(sub_80144A4(&temp) == 0)
|
||||
{
|
||||
SetFriendAreaActionMenuState(gUnknown_203B2BC->fallbackState);
|
||||
}
|
||||
}
|
||||
|
||||
void sub_8027D40(u32 r0, struct BulkItem *heldItem)
|
||||
{
|
||||
|
||||
struct Item slot;
|
||||
struct unkStruct_8090F58 a3;
|
||||
|
||||
sub_8008C54(r0);
|
||||
sub_80073B8(r0);
|
||||
HeldItemToSlot(&slot, heldItem);
|
||||
a3.unk0 = 0;
|
||||
a3.unk4 = 0;
|
||||
a3.unk8 = 1;
|
||||
slot.flags = ITEM_FLAG_EXISTS;
|
||||
sub_8090E14(gUnknown_202DE58, &slot, &a3);
|
||||
xxx_format_and_draw(4, 3, gUnknown_80DD958, r0, 0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
|
||||
bool8 sub_8027D9C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(!sub_80023E4(8))
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool8 sub_8027DCC(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
u32 var1;
|
||||
if(sub_808D3BC() != pokeStruct)
|
||||
if(sub_808D3F8() != pokeStruct)
|
||||
if(!pokeStruct->isTeamLeader)
|
||||
{
|
||||
var1 = 0;
|
||||
if(pokeStruct->dungeonLocation.id == DUNGEON_JOIN_LOCATION_PARTNER)
|
||||
var1 = 1;
|
||||
if(var1 != 0)
|
||||
{
|
||||
if(sub_80023E4(8))
|
||||
goto check;
|
||||
}
|
||||
else
|
||||
{
|
||||
check:
|
||||
if(sub_8027E18(pokeStruct) != 3)
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
u32 sub_8027E18(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(pokeStruct->heldItem.id == ITEM_NOTHING)
|
||||
return 0;
|
||||
else if(GetNumberOfFilledInventorySlots() < INVENTORY_SIZE)
|
||||
return 1;
|
||||
else if(sub_8027E4C(pokeStruct))
|
||||
return 2;
|
||||
else
|
||||
return 3;
|
||||
}
|
||||
|
||||
bool8 sub_8027E4C(struct PokemonStruct *pokeStruct)
|
||||
{
|
||||
if(!IsNotMoneyOrUsedTMItem(pokeStruct->heldItem.id))
|
||||
return FALSE;
|
||||
else
|
||||
{
|
||||
if(IsThrowableItem(pokeStruct->heldItem.id))
|
||||
{
|
||||
if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] + pokeStruct->heldItem.quantity > 0x3e7)
|
||||
return FALSE;
|
||||
}
|
||||
else if(gTeamInventoryRef->teamStorage[pokeStruct->heldItem.id] > 0x3e6)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void sub_8027EB8(void)
|
||||
{
|
||||
switch(sub_8027E18(gUnknown_203B2BC->pokeStruct))
|
||||
{
|
||||
case 1:
|
||||
PlaySound(0x14d);
|
||||
AddHeldItemToInventory(&gUnknown_203B2BC->item2);
|
||||
FillInventoryGaps();
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(6);
|
||||
break;
|
||||
case 2:
|
||||
PlaySound(0x14d);
|
||||
if(IsThrowableItem(gUnknown_203B2BC->item2.id))
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += gUnknown_203B2BC->item2.quantity;
|
||||
else
|
||||
gTeamInventoryRef->teamStorage[gUnknown_203B2BC->item2.id] += 1;
|
||||
gUnknown_203B2BC->item2.id = ITEM_NOTHING;
|
||||
gUnknown_203B2BC->item2.quantity = 0;
|
||||
GivePokemonItem(gUnknown_203B2BC->targetPoke, &gUnknown_203B2BC->item2);
|
||||
SetFriendAreaActionMenuState(7);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
SetFriendAreaActionMenuState(2);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -536,7 +536,7 @@ void sub_8025A84(void)
|
|||
sub_8025434(0xA);
|
||||
break;
|
||||
case 9:
|
||||
gUnknown_203B2B4->pokeStruct->unk0 &= 0xfffd;
|
||||
gUnknown_203B2B4->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
sub_8023C60();
|
||||
|
|
|
|||
|
|
@ -1165,7 +1165,7 @@ void sub_8032828(void)
|
|||
else
|
||||
gUnknown_203B33C->unk53C.itemRewards[0] = ITEM_NOTHING;
|
||||
gUnknown_203B33C->unk53C.quantity = 1;
|
||||
gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0);
|
||||
gUnknown_203B33C->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0);
|
||||
gUnknown_203B33C->unk53C.itemRewards[1] = 0;
|
||||
gUnknown_203B33C->unk53C.itemRewards[2] = 0;
|
||||
gUnknown_203B33C->unk53C.friendAreaReward = 0;
|
||||
|
|
|
|||
|
|
@ -231,7 +231,7 @@ void sub_802E1AC(void)
|
|||
case MAIL_INFO:
|
||||
sub_803B35C(GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex), &gUnknown_203B304->unkC);
|
||||
gUnknown_203B304->unkC.unk0[0] = 3;
|
||||
gUnknown_203B304->unkC.unk44 = 0;
|
||||
gUnknown_203B304->unkC.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
sub_802DE84(&gUnknown_203B304->unkC);
|
||||
break;
|
||||
case JOB_LIST_MENU:
|
||||
|
|
@ -404,7 +404,7 @@ void sub_802E578(void)
|
|||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
if(mail->mailType == 1)
|
||||
{
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
}
|
||||
|
|
@ -466,7 +466,7 @@ void HandleMailActionMenu(void)
|
|||
case 6:
|
||||
PlaySound(0x133);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
ReceivePKMNNews(mail->dungeon.floor);
|
||||
ReceivePKMNNews(mail->unk4.dungeon.floor);
|
||||
ResetMailboxSlot(gUnknown_203B304->mailboxIndex);
|
||||
sub_8096078();
|
||||
if(HasNoMailinMailbox())
|
||||
|
|
@ -482,7 +482,7 @@ void HandleMailActionMenu(void)
|
|||
case 7:
|
||||
PlayMenuSoundEffect(0);
|
||||
mail = GetMailboxSlotInfo(gUnknown_203B304->mailboxIndex);
|
||||
gUnknown_203B304->mailIndex = mail->dungeon.floor;
|
||||
gUnknown_203B304->mailIndex = mail->unk4.dungeon.floor;
|
||||
gUnknown_203B304->fallbackState = MAIL_MENU_1;
|
||||
SetMailboxState(DISPLAY_SEL_PKMN_NEWS);
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ void ResetMailbox(void)
|
|||
void ResetMailboxSlot(u8 index)
|
||||
{
|
||||
gUnknown_203B490->mailboxSlots[index].mailType = MAIL_TYPE_NONE;
|
||||
gUnknown_203B490->mailboxSlots[index].dungeon.id = 99;
|
||||
gUnknown_203B490->mailboxSlots[index].dungeon.floor = 0;
|
||||
gUnknown_203B490->mailboxSlots[index].unk4.dungeon.id = 99;
|
||||
gUnknown_203B490->mailboxSlots[index].unk4.dungeon.floor = 0;
|
||||
gUnknown_203B490->mailboxSlots[index].rewardType = MONEY1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -638,14 +638,14 @@ void sub_80268CC(void)
|
|||
pokeStruct = (struct PokemonStruct*)addr;
|
||||
#endif
|
||||
|
||||
pokeStruct->unk0 |= 2;
|
||||
pokeStruct->unk0 |= FLAG_ON_TEAM;
|
||||
nullsub_104();
|
||||
}
|
||||
sub_808ED00();
|
||||
sub_8026074(5);
|
||||
break;
|
||||
case 7:
|
||||
gUnknown_203B2B8->pokeStruct->unk0 &= 0xfffd;
|
||||
gUnknown_203B2B8->pokeStruct->unk0 &= ~(FLAG_ON_TEAM);
|
||||
nullsub_104();
|
||||
sub_808ED00();
|
||||
sub_8026074(6);
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ void sub_802EA58(void)
|
|||
case PELIPPER_JOB_INFO:
|
||||
sub_803B35C(GetPelipperBoardSlotInfo(gPelipperBoard->jobIndex), &gPelipperBoard->unkC);
|
||||
gPelipperBoard->unkC.unk0[0] = 3;
|
||||
gPelipperBoard->unkC.unk44 = 0;
|
||||
gPelipperBoard->unkC.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
sub_802DE84(&gPelipperBoard->unkC);
|
||||
break;
|
||||
case PELIPPER_JOB_LIST_MENU:
|
||||
|
|
@ -467,4 +467,4 @@ void CreatePelipperAcceptedStatusBox(u32 r0)
|
|||
xxx_call_draw_string(0x16, 0xD, gPelipperStatusSlash, r0, 0); // "/"
|
||||
sub_8012BC4(0x23, 0xD, MAX_ACCEPTED_JOBS, 2, 7, r0);
|
||||
sub_80073E0(r0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -682,7 +682,7 @@ s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
|
|||
pokemon = &gRecruitedPokemonRef->pokemon[i];
|
||||
|
||||
if (pokemon->unk0 & 1) {
|
||||
if (pokemon->unk0 & 2) {
|
||||
if (pokemon->unk0 & FLAG_ON_TEAM) {
|
||||
buffer[count++] = i;
|
||||
}
|
||||
if (pokemon->isTeamLeader) {
|
||||
|
|
@ -730,7 +730,7 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
|
|||
RestoreIntegerBits(&backup, &data_u8, 1);
|
||||
RestorePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
|
||||
if (data_u8 & 1) {
|
||||
gRecruitedPokemonRef->team[i].unk0 = 3;
|
||||
gRecruitedPokemonRef->team[i].unk0 = 3; // FLAG_ON_TEAM (2) + ??? (1)
|
||||
}
|
||||
else {
|
||||
gRecruitedPokemonRef->team[i].unk0 = 0;
|
||||
|
|
@ -740,12 +740,12 @@ s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
|
|||
for (i = 0; i < 6; i++) {
|
||||
RestoreIntegerBits(&backup, &data_s16, 16);
|
||||
if ((u16)data_s16 < NUM_MONSTERS) {
|
||||
gRecruitedPokemonRef->pokemon[data_s16].unk0 |= 2;
|
||||
gRecruitedPokemonRef->pokemon[data_s16].unk0 |= FLAG_ON_TEAM;
|
||||
}
|
||||
}
|
||||
RestoreIntegerBits(&backup, &data_s16, 16);
|
||||
if ((u16)data_s16 < NUM_MONSTERS) {
|
||||
gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = 1;
|
||||
gRecruitedPokemonRef->pokemon[data_s16].isTeamLeader = TRUE;
|
||||
}
|
||||
nullsub_102(&backup);
|
||||
return backup.unk8;
|
||||
|
|
|
|||
|
|
@ -605,7 +605,7 @@ void DisplayMissionObjectives(void)
|
|||
mail = GetMailatIndex(local_94);
|
||||
sub_803B6B0(10,16,3,gUnknown_203B330->unk10);
|
||||
// %dF
|
||||
sprintfStatic(buffer,gUnknown_80E1F3C,mail->dungeon.floor);
|
||||
sprintfStatic(buffer,gUnknown_80E1F3C,mail->unk4.dungeon.floor);
|
||||
xxx_call_draw_string(0x15,16,buffer,gUnknown_203B330->unk10,0);
|
||||
// Rescue #C6%s#R
|
||||
sprintfStatic(buffer,gUnknown_80E1F40,GetMonSpecies(mail->clientSpecies));
|
||||
|
|
@ -624,11 +624,11 @@ void DisplayMissionObjectives(void)
|
|||
for(jobSlotIdx = 0; jobSlotIdx < MAX_ACCEPTED_JOBS; jobSlotIdx++)
|
||||
{
|
||||
jobInfo = GetJobSlotInfo(jobSlotIdx);
|
||||
if ((((jobInfo->dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
|
||||
if ((((jobInfo->unk4.dungeon.id == gUnknown_203B330->dungeonIndex) && (jobInfo->mailType != 0)
|
||||
) && (jobInfo->mailType != MAIL_TYPE_SUSPENDED_JOB)) && (jobInfo->mailType != MAIL_TYPE_UNK7)) {
|
||||
sub_803B6B0(10,yCoord,3,gUnknown_203B330->unk10);
|
||||
if (jobInfo->missionType != WONDER_MAIL_MISSION_TYPE_FIND_ITEM) {
|
||||
sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->dungeon.floor);
|
||||
sprintfStatic(buffer1,gUnknown_80E1F3C,jobInfo->unk4.dungeon.floor);
|
||||
xxx_call_draw_string(21,yCoord,buffer1,gUnknown_203B330->unk10,0);
|
||||
}
|
||||
switch(jobInfo->missionType)
|
||||
|
|
|
|||
|
|
@ -635,8 +635,8 @@ u32 ConvertMenutoRescuePasswordState(u32 unused)
|
|||
u32 sub_8039068(u32 mailMode, u8 *passwordBuffer, struct unkStruct_203B480 *param_3)
|
||||
{
|
||||
if ( (!sub_803D204(passwordBuffer, param_3)) || (WONDER_MAIL_TYPE_OKD < param_3->mailType) ||
|
||||
(param_3->dungeon.floor >= GetDungeonFloorCount(param_3->dungeon.id)) ||
|
||||
(param_3->clientSpecies == MONSTER_NONE) || (MONSTER_MAX < param_3->clientSpecies) ||
|
||||
(param_3->unk4.dungeon.floor >= GetDungeonFloorCount(param_3->unk4.dungeon.id)) ||
|
||||
(param_3->clientSpecies == MONSTER_NONE) || (MONSTER_RAYQUAZA_CUTSCENE < param_3->clientSpecies) ||
|
||||
(IsInvalidItemReward(param_3->item.id))) {
|
||||
return PASSWORD_ENTRY_INCORRECT_PASSWORD;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1396,7 +1396,7 @@ void UpdateThankYouMailText(void)
|
|||
else
|
||||
gUnknown_203B2C4->unk53C.itemRewards[0] = ITEM_NOTHING; // unk558
|
||||
gUnknown_203B2C4->unk53C.quantity = 1; // unk55B
|
||||
gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0); // unk560
|
||||
gUnknown_203B2C4->unk53C.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0); // unk560
|
||||
gUnknown_203B2C4->unk53C.itemRewards[1] = 0; // unk559
|
||||
gUnknown_203B2C4->unk53C.itemRewards[2] = 0; // unk55A
|
||||
gUnknown_203B2C4->unk53C.friendAreaReward = 0; // unk55C
|
||||
|
|
|
|||
|
|
@ -1162,7 +1162,7 @@ void sub_8028FDC(void)
|
|||
{
|
||||
case 8:
|
||||
mail = GetMailatIndex(gUnknown_203B2C0->mailIndex);
|
||||
if(!sub_80A2824(mail->dungeon.id))
|
||||
if(!sub_80A2824(mail->unk4.dungeon.id))
|
||||
{
|
||||
SetFriendRescueCounterState(CANT_GO_TO_DUNGEON);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -175,8 +175,8 @@ void sub_802B3E0(void)
|
|||
gUnknown_203B2C8->unk114.moneyReward = 0;
|
||||
sub_8097790();
|
||||
mail = GetMailatIndex(gUnknown_203B2C8->unk1);
|
||||
sub_803C37C(&mail->dungeon, 0, gUnknown_203B2C8->unk114.itemRewards);
|
||||
gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->dungeon, 0);
|
||||
sub_803C37C(&mail->unk4.dungeon, 0, gUnknown_203B2C8->unk114.itemRewards);
|
||||
gUnknown_203B2C8->unk114.teamRankPtsReward = GetDungeonTeamRankPts(&mail->unk4.dungeon, 0);
|
||||
gUnknown_203B2C8->unk114.itemRewards[1] = ITEM_NOTHING;
|
||||
gUnknown_203B2C8->unk114.itemRewards[2] = ITEM_NOTHING;
|
||||
gUnknown_203B2C8->unk114.quantity = 10;
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ void CreateMailMenu(void)
|
|||
y = sub_8013800(&gUnknown_203B2D8->input, index);
|
||||
sub_803B6B0(10,y,6,gUnknown_203B2D8->unk38);
|
||||
PrintPokeNameToBuffer(gAvailablePokemonNames, GetPlayerPokemonStruct());
|
||||
sprintfStatic(buffer, GetPokemonMailHeadline(mail->dungeon.floor), gAvailablePokemonNames);
|
||||
sprintfStatic(buffer, GetPokemonMailHeadline(mail->unk4.dungeon.floor), gAvailablePokemonNames);
|
||||
xxx_call_draw_string(0x15,y,buffer,gUnknown_203B2D8->unk38,0);
|
||||
}
|
||||
else {
|
||||
|
|
|
|||
|
|
@ -189,7 +189,7 @@ void sub_802CAA4(void) {
|
|||
{
|
||||
case 5:
|
||||
gUnknown_203B2F0->unk10C[loopMax].text = gUnknown_80DFD70; // Take Job
|
||||
if(sub_809693C(mail) || !sub_80A2824(mail->dungeon.id))
|
||||
if(sub_809693C(mail) || !sub_80A2824(mail->unk4.dungeon.id))
|
||||
{
|
||||
gUnknown_203B2F0->unk10C[loopMax].menuAction = -1;
|
||||
}
|
||||
|
|
@ -679,7 +679,7 @@ void sub_802D2A8(void)
|
|||
MemoryCopy8(sub_8096DD8(),gUnknown_203B2F8->mail->unk14,0x28);
|
||||
MemoryCopy8(sub_8096DE8(),gUnknown_203B2F8->mail->unk18,0x78);
|
||||
}
|
||||
switch(gUnknown_203B2F8->mail->wonderMail.dungeon.id)
|
||||
switch(gUnknown_203B2F8->mail->wonderMail.unk4.dungeon.id)
|
||||
{
|
||||
// NOTE: subtract 1 from each of the case as the input??
|
||||
case DUNGEON_ODDITY_CAVE: // 0x2B
|
||||
|
|
@ -730,7 +730,7 @@ void sub_802D2A8(void)
|
|||
case 0x10:
|
||||
sub_803B35C(&gUnknown_203B2F8->mail->wonderMail,&gUnknown_203B2F8->unk14);
|
||||
gUnknown_203B2F8->unk14.unk0[0] = 3;
|
||||
gUnknown_203B2F8->unk14.unk44 = 0;
|
||||
gUnknown_203B2F8->unk14.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
gUnknown_203B2F8->unk14.unk50[0] = gUnknown_203B2F8->mail->unk18;
|
||||
sub_802DE84(&gUnknown_203B2F8->unk14);
|
||||
break;
|
||||
|
|
@ -928,7 +928,7 @@ void sub_802D940(void)
|
|||
{
|
||||
// Delete
|
||||
case 2:
|
||||
if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)))
|
||||
if ((gUnknown_203B2F8->unk9) && (((mail = &gUnknown_203B490->jobSlots[gUnknown_203B2F8->jobSlotIndex]), mail->mailType > MAIL_TYPE_SUSPENDED_JOB) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id)))
|
||||
{
|
||||
sub_802D1A0(7);
|
||||
}
|
||||
|
|
@ -1008,7 +1008,7 @@ bool8 sub_802DAA8(void)
|
|||
return TRUE;
|
||||
}
|
||||
else {
|
||||
if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->dungeon.id)) return FALSE;
|
||||
if ( (mail->mailType != WONDER_MAIL_TYPE_THANK_YOU) && (gUnknown_203B2F8->dungeonID == mail->unk4.dungeon.id)) return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
|
@ -1028,7 +1028,7 @@ _0802DAE8:
|
|||
{
|
||||
mailType = mail->mailType;
|
||||
if (((mailType == 0) || (mailType == WONDER_MAIL_TYPE_THANK_YOU)) ||
|
||||
((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->dungeon.id)))) goto _0802DAE8;
|
||||
((WONDER_MAIL_TYPE_THANK_YOU < mailType && (gUnknown_203B2F8->dungeonID != mail->unk4.dungeon.id)))) goto _0802DAE8;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -347,7 +347,7 @@ void sub_802F088(void)
|
|||
temp = sub_803B344(gUnknown_203B30C->unk4);
|
||||
sub_803B35C(&temp->mail, &gUnknown_203B30C->unk8);
|
||||
gUnknown_203B30C->unk8.unk0[0] = 3;
|
||||
gUnknown_203B30C->unk8.unk44 = 0;
|
||||
gUnknown_203B30C->unk8.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
gUnknown_203B30C->unk8.unk50[0] = temp->unk18;
|
||||
sub_802DE84(&gUnknown_203B30C->unk8);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -265,17 +265,17 @@ void sub_803092C(void)
|
|||
mail = GetMailatIndex(gUnknown_203B320->unk0[(gUnknown_203B320->input.unk1E * gUnknown_203B320->input.unk1C) + index]);
|
||||
local.unk0[0] = gUnknown_203B320->unk58;
|
||||
local.y = sub_8013800(&gUnknown_203B320->input,index);
|
||||
local.unk40 = 7;
|
||||
local.unk42 = 0;
|
||||
local.unk44 = 0;
|
||||
local.mailTitleType = 7;
|
||||
local.mailMissionType = MISSION_TYPE_FRIEND_RESCUE;
|
||||
local.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
|
||||
local.dungeon = &mail->dungeon;
|
||||
local.unk8 = &mail->unk4;
|
||||
local.playerName = mail->playerName;
|
||||
|
||||
local.clientSpecies = mail->clientSpecies;
|
||||
local.targetSpecies = mail->clientSpecies;
|
||||
local.targetItem = ITEM_NOTHING;
|
||||
local.unk2E = 5;
|
||||
local.rewardType = 5;
|
||||
|
||||
switch(mail->mailType)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -117,33 +117,33 @@ void sub_8030E48(void)
|
|||
mail = &gUnknown_203B480[gUnknown_203B324->mailIndex];
|
||||
sub_80073B8(gUnknown_203B324->unk10);
|
||||
stack.unk0[0] = gUnknown_203B324->unk10;
|
||||
stack.unk40 = 7;
|
||||
stack.unk42 = 0;
|
||||
stack.unk44 = 0;
|
||||
stack.dungeon = &mail->dungeon;
|
||||
stack.mailTitleType = 7;
|
||||
stack.mailMissionType = MISSION_TYPE_FRIEND_RESCUE;
|
||||
stack.mailStatus = MAIL_STATUS_SUSPENDED;
|
||||
stack.unk8 = &mail->unk4;
|
||||
stack.playerName = mail->playerName;
|
||||
stack.clientSpecies = mail->clientSpecies;
|
||||
stack.targetSpecies = mail->clientSpecies;
|
||||
stack.targetItem = ITEM_NOTHING;
|
||||
if (mail->item.id == ITEM_NOTHING) {
|
||||
stack.unk2E = 5;
|
||||
stack.rewardType = 5;
|
||||
}
|
||||
else {
|
||||
stack.unk2E = 2;
|
||||
stack.unk34 = mail->item.id;
|
||||
stack.rewardType = 2;
|
||||
stack.rewardItem = mail->item.id;
|
||||
}
|
||||
switch(mail->mailType)
|
||||
{
|
||||
case 2:
|
||||
case WONDER_MAIL_TYPE_AOK:
|
||||
stack.unk41 = 10;
|
||||
stack.mailDescriptionType = 10;
|
||||
break;
|
||||
case 5:
|
||||
stack.unk41 = 11;
|
||||
stack.mailDescriptionType = 11;
|
||||
break;
|
||||
case WONDER_MAIL_TYPE_NONE:
|
||||
default:
|
||||
stack.unk41 = 9;
|
||||
stack.mailDescriptionType = 9;
|
||||
break;
|
||||
}
|
||||
CreateRescueDescription(&stack);
|
||||
|
|
|
|||
|
|
@ -14,11 +14,7 @@ struct unkStruct_203B2FC
|
|||
// size: 0xA8
|
||||
/* 0x0 */ u32 state;
|
||||
/* 0x4 */ u32 fallbackState;
|
||||
u32 unk8;
|
||||
s16 unkC;
|
||||
s16 unkE;
|
||||
u8 unk10;
|
||||
u8 fill11[0x30 - 0x11];
|
||||
struct unkStruct_802F204 unk8;
|
||||
u8 jobSlotIndex;
|
||||
struct WonderMail *jobInfo;
|
||||
struct OpenedFile *faceFile;
|
||||
|
|
@ -38,7 +34,7 @@ struct unkStruct_203B300
|
|||
{
|
||||
// size: 0x7C
|
||||
struct MenuInputStructSub unk0;
|
||||
struct unkStruct_802C39C *unkC;
|
||||
struct unkStruct_802C39C *mail;
|
||||
u32 unk10;
|
||||
struct UnkTextStruct2 *unk14;
|
||||
struct UnkTextStruct2 unk18[4];
|
||||
|
|
@ -109,13 +105,13 @@ extern void sub_802DC28(u32);
|
|||
extern void sub_802F2C0(void);
|
||||
extern void sub_802DC28(u32);
|
||||
extern u32 sub_802F298(void);
|
||||
extern void sub_802F204(u32 *, u32);
|
||||
extern void sub_802F204(struct unkStruct_802F204*, u32);
|
||||
extern void sub_802DC40(void);
|
||||
extern void sub_802DC9C(void);
|
||||
struct WonderMail *GetJobSlotInfo(u8);
|
||||
extern void sub_8096AF8(u8 *, u32, u32);
|
||||
extern void sub_8096EEC(void);
|
||||
extern void sub_803C21C(struct WonderMail *, u32 *);
|
||||
extern void sub_803C21C(struct WonderMail *, struct unkStruct_802F204*);
|
||||
extern u32 sub_802C598(s32);
|
||||
extern void sub_802C688(void);
|
||||
extern void sub_8096C80(void);
|
||||
|
|
@ -306,12 +302,12 @@ void sub_802DE60(void)
|
|||
}
|
||||
}
|
||||
|
||||
u32 sub_802DE84(struct unkStruct_802C39C *r0)
|
||||
u32 sub_802DE84(struct unkStruct_802C39C *mail)
|
||||
{
|
||||
gUnknown_203B300 = MemoryAlloc(sizeof(struct unkStruct_203B300), 8);
|
||||
gUnknown_203B300->unkC = r0;
|
||||
gUnknown_203B300->mail = mail;
|
||||
sub_801317C(&gUnknown_203B300->unk0);
|
||||
gUnknown_203B300->unk10 = gUnknown_203B300->unkC->unk0[0];
|
||||
gUnknown_203B300->unk10 = gUnknown_203B300->mail->unk0[0];
|
||||
gUnknown_203B300->unk14 = &gUnknown_203B300->unk18[gUnknown_203B300->unk10];
|
||||
sub_8006518(gUnknown_203B300->unk18);
|
||||
gUnknown_203B300->unk18[gUnknown_203B300->unk10] = gUnknown_80E0264;
|
||||
|
|
@ -361,6 +357,6 @@ void sub_802DF6C(void)
|
|||
void sub_802DF88(void)
|
||||
{
|
||||
sub_80073B8(gUnknown_203B300->unk10);
|
||||
CreateRescueDescription(gUnknown_203B300->unkC);
|
||||
CreateRescueDescription(gUnknown_203B300->mail);
|
||||
sub_80073E0(gUnknown_203B300->unk10);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user