mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-11-17 12:07:38 +01:00
2381 lines
68 KiB
C
2381 lines
68 KiB
C
#include "global.h"
|
|
#include "apprentice.h"
|
|
#include "battle_tower.h"
|
|
#include "data2.h"
|
|
#include "event_data.h"
|
|
#include "event_object_movement.h"
|
|
#include "field_player_avatar.h"
|
|
#include "international_string_util.h"
|
|
#include "item.h"
|
|
#include "item_menu.h"
|
|
#include "main.h"
|
|
#include "malloc.h"
|
|
#include "menu.h"
|
|
#include "new_game.h"
|
|
#include "party_menu.h"
|
|
#include "random.h"
|
|
#include "script.h"
|
|
#include "script_menu.h"
|
|
#include "sound.h"
|
|
#include "string_util.h"
|
|
#include "strings.h"
|
|
#include "task.h"
|
|
#include "text.h"
|
|
#include "constants/apprentice.h"
|
|
#include "constants/items.h"
|
|
#include "constants/songs.h"
|
|
#include "constants/species.h"
|
|
#include "constants/moves.h"
|
|
|
|
#define PLAYER_APPRENTICE gSaveBlock2Ptr->playerApprentice
|
|
|
|
struct Unk030062ECStruct
|
|
{
|
|
u8 unk0;
|
|
u16 unk2[3][5];
|
|
u8 unk20[3][5];
|
|
};
|
|
|
|
struct Unk030062F0Struct
|
|
{
|
|
u16 unk0;
|
|
u16 unk2;
|
|
u16 unk4;
|
|
u16 unk6;
|
|
};
|
|
|
|
// data/scripts/apprentice.inc
|
|
extern const u8 gText_082B7229[];
|
|
extern const u8 gText_082B731C[];
|
|
extern const u8 gText_082B735B[];
|
|
extern const u8 gText_082B7423[];
|
|
extern const u8 gText_082B74C1[];
|
|
extern const u8 gText_082B756F[];
|
|
extern const u8 gText_082B75B2[];
|
|
extern const u8 gText_082B763F[];
|
|
extern const u8 gText_082B76AC[];
|
|
extern const u8 gText_082B7772[];
|
|
extern const u8 gText_082B77CE[];
|
|
extern const u8 gText_082B7871[];
|
|
extern const u8 gText_082B78D4[];
|
|
extern const u8 gText_082B7B1A[];
|
|
extern const u8 gText_082B7C13[];
|
|
extern const u8 gText_082B7D18[];
|
|
extern const u8 gText_082B7DD4[];
|
|
extern const u8 gText_082B7EE5[];
|
|
extern const u8 gText_082B7F35[];
|
|
extern const u8 gText_082B7FE8[];
|
|
extern const u8 gText_082B8087[];
|
|
extern const u8 gText_082B822B[];
|
|
extern const u8 gText_082B8286[];
|
|
extern const u8 gText_082B8356[];
|
|
extern const u8 gText_082B83CE[];
|
|
extern const u8 gText_082B84FC[];
|
|
extern const u8 gText_082B8559[];
|
|
extern const u8 gText_082B8656[];
|
|
extern const u8 gText_082B86EA[];
|
|
extern const u8 gText_082B87DA[];
|
|
extern const u8 gText_082B887C[];
|
|
extern const u8 gText_082B8957[];
|
|
extern const u8 gText_082B89C6[];
|
|
extern const u8 gText_082B8ACF[];
|
|
extern const u8 gText_082B8B66[];
|
|
extern const u8 gText_082B8C20[];
|
|
extern const u8 gText_082B8CAA[];
|
|
extern const u8 gText_082B8DD3[];
|
|
extern const u8 gText_082B8E24[];
|
|
extern const u8 gText_082B8ED5[];
|
|
extern const u8 gText_082B8F45[];
|
|
extern const u8 gText_082B905F[];
|
|
extern const u8 gText_082B910E[];
|
|
extern const u8 gText_082B9204[];
|
|
extern const u8 gText_082B929C[];
|
|
extern const u8 gText_082B9438[];
|
|
extern const u8 gText_082B9488[];
|
|
extern const u8 gText_082B9564[];
|
|
extern const u8 gText_082B95D8[];
|
|
extern const u8 gText_082B9763[];
|
|
extern const u8 gText_082B97E5[];
|
|
extern const u8 gText_082B989A[];
|
|
extern const u8 gText_082B992D[];
|
|
extern const u8 gText_082B9A84[];
|
|
extern const u8 gText_082B9AB9[];
|
|
extern const u8 gText_082B9B76[];
|
|
extern const u8 gText_082B9BF2[];
|
|
extern const u8 gText_082B9D83[];
|
|
extern const u8 gText_082B9DF9[];
|
|
extern const u8 gText_082B9EAA[];
|
|
extern const u8 gText_082B9F55[];
|
|
extern const u8 gText_082BA084[];
|
|
extern const u8 gText_082BA11D[];
|
|
extern const u8 gText_082BA1F3[];
|
|
|
|
extern const u8 gText_082BE50D[];
|
|
extern const u8 gText_082BE5F5[];
|
|
extern const u8 gText_082BE679[];
|
|
extern const u8 gText_082BE71E[];
|
|
extern const u8 gText_082BE762[];
|
|
extern const u8 gText_082BE7F8[];
|
|
extern const u8 gText_082BE850[];
|
|
extern const u8 gText_082BE99C[];
|
|
extern const u8 gText_082BEA1B[];
|
|
extern const u8 gText_082BEAE9[];
|
|
extern const u8 gText_082BEB72[];
|
|
extern const u8 gText_082BEC8E[];
|
|
extern const u8 gText_082BED16[];
|
|
extern const u8 gText_082BEE29[];
|
|
extern const u8 gText_082BEEB4[];
|
|
extern const u8 gText_082BEFE2[];
|
|
extern const u8 gText_082BF04E[];
|
|
extern const u8 gText_082BF11D[];
|
|
extern const u8 gText_082BF1A8[];
|
|
extern const u8 gText_082BF268[];
|
|
extern const u8 gText_082BF2D1[];
|
|
extern const u8 gText_082BF3CF[];
|
|
extern const u8 gText_082BF46A[];
|
|
extern const u8 gText_082BF551[];
|
|
extern const u8 gText_082BF5C3[];
|
|
extern const u8 gText_082BF6E5[];
|
|
extern const u8 gText_082BF773[];
|
|
extern const u8 gText_082BF869[];
|
|
extern const u8 gText_082BF8DD[];
|
|
extern const u8 gText_082BF9BA[];
|
|
extern const u8 gText_082BFA5A[];
|
|
extern const u8 gText_082BFB4E[];
|
|
|
|
extern const u8 gText_082BA2A3[];
|
|
extern const u8 gText_082BA34E[];
|
|
extern const u8 gText_082BA380[];
|
|
extern const u8 gText_082BA3D2[];
|
|
extern const u8 gText_082BA448[];
|
|
extern const u8 gText_082BA4D3[];
|
|
extern const u8 gText_082BA58C[];
|
|
extern const u8 gText_082BA5BF[];
|
|
extern const u8 gText_082BA5F3[];
|
|
extern const u8 gText_082BA635[];
|
|
extern const u8 gText_082BA6E6[];
|
|
extern const u8 gText_082BA742[];
|
|
extern const u8 gText_082BA770[];
|
|
extern const u8 gText_082BA78F[];
|
|
extern const u8 gText_082BA7D8[];
|
|
extern const u8 gText_082BA867[];
|
|
extern const u8 gText_082BA96B[];
|
|
extern const u8 gText_082BA9B7[];
|
|
extern const u8 gText_082BAA1B[];
|
|
extern const u8 gText_082BAA81[];
|
|
extern const u8 gText_082BAB22[];
|
|
extern const u8 gText_082BAC43[];
|
|
extern const u8 gText_082BAC78[];
|
|
extern const u8 gText_082BAD17[];
|
|
extern const u8 gText_082BADB6[];
|
|
extern const u8 gText_082BAE36[];
|
|
extern const u8 gText_082BAF4E[];
|
|
extern const u8 gText_082BAF8F[];
|
|
extern const u8 gText_082BAFDB[];
|
|
extern const u8 gText_082BB05F[];
|
|
extern const u8 gText_082BB0D4[];
|
|
extern const u8 gText_082BB18C[];
|
|
extern const u8 gText_082BB1CE[];
|
|
extern const u8 gText_082BB242[];
|
|
extern const u8 gText_082BB2D9[];
|
|
extern const u8 gText_082BB370[];
|
|
extern const u8 gText_082BB4C3[];
|
|
extern const u8 gText_082BB4FB[];
|
|
extern const u8 gText_082BB575[];
|
|
extern const u8 gText_082BB5E1[];
|
|
extern const u8 gText_082BB656[];
|
|
extern const u8 gText_082BB6E5[];
|
|
extern const u8 gText_082BB72C[];
|
|
extern const u8 gText_082BB7A2[];
|
|
extern const u8 gText_082BB84A[];
|
|
extern const u8 gText_082BB8CD[];
|
|
extern const u8 gText_082BB970[];
|
|
extern const u8 gText_082BB9AE[];
|
|
extern const u8 gText_082BBA05[];
|
|
extern const u8 gText_082BBA6C[];
|
|
extern const u8 gText_082BBB01[];
|
|
extern const u8 gText_082BBC1C[];
|
|
extern const u8 gText_082BBC4B[];
|
|
extern const u8 gText_082BBCF6[];
|
|
extern const u8 gText_082BBD90[];
|
|
extern const u8 gText_082BBE0B[];
|
|
extern const u8 gText_082BBEE5[];
|
|
extern const u8 gText_082BBF25[];
|
|
extern const u8 gText_082BBFA4[];
|
|
extern const u8 gText_082BC024[];
|
|
extern const u8 gText_082BC0C8[];
|
|
extern const u8 gText_082BC213[];
|
|
extern const u8 gText_082BC247[];
|
|
extern const u8 gText_082BC2DD[];
|
|
extern const u8 gText_082BC373[];
|
|
extern const u8 gText_082BC40E[];
|
|
extern const u8 gText_082BC514[];
|
|
extern const u8 gText_082BC555[];
|
|
extern const u8 gText_082BC5CE[];
|
|
extern const u8 gText_082BC666[];
|
|
extern const u8 gText_082BC714[];
|
|
extern const u8 gText_082BC808[];
|
|
extern const u8 gText_082BC84D[];
|
|
extern const u8 gText_082BC8EA[];
|
|
extern const u8 gText_082BC984[];
|
|
extern const u8 gText_082BCA4D[];
|
|
extern const u8 gText_082BCB75[];
|
|
extern const u8 gText_082BCBA6[];
|
|
extern const u8 gText_082BCBFC[];
|
|
extern const u8 gText_082BCCA4[];
|
|
|
|
extern const u8 gText_082BFBF2[];
|
|
extern const u8 gText_082BFCAE[];
|
|
extern const u8 gText_082BFD26[];
|
|
extern const u8 gText_082BFDB1[];
|
|
extern const u8 gText_082BFE24[];
|
|
extern const u8 gText_082BFEAD[];
|
|
extern const u8 gText_082BFF0A[];
|
|
extern const u8 gText_082C0032[];
|
|
extern const u8 gText_082C0090[];
|
|
extern const u8 gText_082C016E[];
|
|
extern const u8 gText_082C01F7[];
|
|
extern const u8 gText_082C034C[];
|
|
extern const u8 gText_082C03CA[];
|
|
extern const u8 gText_082C046E[];
|
|
extern const u8 gText_082C04F9[];
|
|
extern const u8 gText_082C0598[];
|
|
extern const u8 gText_082C0602[];
|
|
extern const u8 gText_082C06D8[];
|
|
extern const u8 gText_082C074A[];
|
|
extern const u8 gText_082C0809[];
|
|
extern const u8 gText_082C086E[];
|
|
extern const u8 gText_082C0982[];
|
|
extern const u8 gText_082C0A1D[];
|
|
extern const u8 gText_082C0AFD[];
|
|
extern const u8 gText_082C0B6F[];
|
|
extern const u8 gText_082C0C7D[];
|
|
extern const u8 gText_082C0D0B[];
|
|
extern const u8 gText_082C0DFE[];
|
|
extern const u8 gText_082C0E71[];
|
|
extern const u8 gText_082C0F6D[];
|
|
extern const u8 gText_082C1003[];
|
|
extern const u8 gText_082C1122[];
|
|
|
|
extern const u8 gText_082BCD68[];
|
|
extern const u8 gText_082BCE64[];
|
|
extern const u8 gText_082BCEF2[];
|
|
extern const u8 gText_082BCF61[];
|
|
extern const u8 gText_082BCFA1[];
|
|
extern const u8 gText_082BD03C[];
|
|
extern const u8 gText_082BD06D[];
|
|
extern const u8 gText_082BD18A[];
|
|
extern const u8 gText_082BD222[];
|
|
extern const u8 gText_082BD325[];
|
|
extern const u8 gText_082BD3B1[];
|
|
extern const u8 gText_082BD493[];
|
|
extern const u8 gText_082BD51C[];
|
|
extern const u8 gText_082BD609[];
|
|
extern const u8 gText_082BD697[];
|
|
extern const u8 gText_082BD797[];
|
|
extern const u8 gText_082BD806[];
|
|
extern const u8 gText_082BD8F5[];
|
|
extern const u8 gText_082BD9BE[];
|
|
extern const u8 gText_082BDAE1[];
|
|
extern const u8 gText_082BDB4E[];
|
|
extern const u8 gText_082BDC6B[];
|
|
extern const u8 gText_082BDD0D[];
|
|
extern const u8 gText_082BDDEC[];
|
|
extern const u8 gText_082BDE68[];
|
|
extern const u8 gText_082BDF4D[];
|
|
extern const u8 gText_082BDFD8[];
|
|
extern const u8 gText_082BE0FD[];
|
|
extern const u8 gText_082BE189[];
|
|
extern const u8 gText_082BE2A5[];
|
|
extern const u8 gText_082BE33E[];
|
|
extern const u8 gText_082BE46C[];
|
|
|
|
extern const u8 gText_082C11D1[];
|
|
extern const u8 gText_082C12D5[];
|
|
extern const u8 gText_082C13AB[];
|
|
extern const u8 gText_082C1444[];
|
|
extern const u8 gText_082C1501[];
|
|
extern const u8 gText_082C15B6[];
|
|
extern const u8 gText_082C165E[];
|
|
extern const u8 gText_082C174F[];
|
|
extern const u8 gText_082C1862[];
|
|
extern const u8 gText_082C19A0[];
|
|
extern const u8 gText_082C1A76[];
|
|
extern const u8 gText_082C1C16[];
|
|
extern const u8 gText_082C1CF5[];
|
|
extern const u8 gText_082C1DC1[];
|
|
extern const u8 gText_082C1EDC[];
|
|
extern const u8 gText_082C1FEC[];
|
|
extern const u8 gText_082C20D1[];
|
|
extern const u8 gText_082C21FF[];
|
|
extern const u8 gText_082C231C[];
|
|
extern const u8 gText_082C2407[];
|
|
extern const u8 gText_082C24B5[];
|
|
extern const u8 gText_082C25B1[];
|
|
extern const u8 gText_082C2707[];
|
|
extern const u8 gText_082C27D4[];
|
|
extern const u8 gText_082C28D6[];
|
|
extern const u8 gText_082C2A0B[];
|
|
extern const u8 gText_082C2B50[];
|
|
extern const u8 gText_082C2C77[];
|
|
extern const u8 gText_082C2D67[];
|
|
extern const u8 gText_082C2E41[];
|
|
extern const u8 gText_082C2EF5[];
|
|
extern const u8 gText_082C3023[];
|
|
|
|
extern const u8 gText_082B6EA5[];
|
|
extern const u8 gText_082B6EEC[];
|
|
extern const u8 gText_082B6F16[];
|
|
extern const u8 gText_082B6F4C[];
|
|
extern const u8 gText_082B6F92[];
|
|
extern const u8 gText_082B6FC9[];
|
|
extern const u8 gText_082B700C[];
|
|
extern const u8 gText_082B703A[];
|
|
extern const u8 gText_082B706A[];
|
|
extern const u8 gText_082B709C[];
|
|
extern const u8 gText_082B70CC[];
|
|
extern const u8 gText_082B710A[];
|
|
extern const u8 gText_082B714D[];
|
|
extern const u8 gText_082B7185[];
|
|
extern const u8 gText_082B71C1[];
|
|
extern const u8 gText_082B71F9[];
|
|
|
|
extern struct Unk030062ECStruct *gUnknown_030062EC;
|
|
extern struct Unk030062F0Struct *gUnknown_030062F0;
|
|
extern void (*gUnknown_030062F4)(void);
|
|
|
|
extern void sub_8165AE8(struct Apprentice *);
|
|
|
|
extern const u8 gUnknown_085DCEDC[];
|
|
extern const u8 gUnknown_085DCF0E[];
|
|
extern const u8 gUnknown_085DCEFA[];
|
|
extern const u8 gUnknown_085DCF2C[];
|
|
|
|
// This file's functions.
|
|
static u16 sub_819FF98(u8 arg0);
|
|
static bool8 sub_81A0194(u8 arg0, u16 moveId);
|
|
static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId);
|
|
static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height);
|
|
static void RemoveAndHideWindow(u8 windowId);
|
|
static void ExecuteFuncAfterButtonPress(void (*func)(void));
|
|
|
|
static void Script_IsPlayersApprenticeActive(void);
|
|
static void Script_SetPlayersApprenticeLvlMode(void);
|
|
static void sub_81A0978(void);
|
|
static void sub_819FC60(void);
|
|
static void sub_81A0984(void);
|
|
static void sub_81A0990(void);
|
|
static void sub_81A09D0(void);
|
|
static void Script_CreateApprenticeMenu(void);
|
|
static void Script_PrintMessage(void);
|
|
static void Script_ResetPlayerApprentice(void);
|
|
static void sub_81A1638(void);
|
|
static void sub_81A0CC0(void);
|
|
static void sub_81A09B4(void);
|
|
static void sub_81A0D40(void);
|
|
static void sub_81A0DD4(void);
|
|
static void sub_81A0FE4(void);
|
|
static void sub_81A0FFC(void);
|
|
static void sub_81A0D80(void);
|
|
static void sub_81A11F8(void);
|
|
static void sub_81A1218(void);
|
|
static void sub_81A1224(void);
|
|
static void sub_81A1438(void);
|
|
static void sub_81A150C(void);
|
|
static void sub_81A15A4(void);
|
|
static void sub_81A1644(void);
|
|
static void sub_81A1370(void);
|
|
|
|
// rodata
|
|
|
|
const struct ApprenticeTrainer gApprentices[] =
|
|
{
|
|
{
|
|
.name = {_("サダヒロ"), _("ALANN"), _("ALAIN"), _("ADELFO"), _("CLAUS"), _("TEO")},
|
|
.otId = 0xBDC9,
|
|
.facilityClass = 0x43,
|
|
.species = {SPECIES_BEAUTIFLY, SPECIES_DUSTOX, SPECIES_ILLUMISE, SPECIES_SHIFTRY, SPECIES_BRELOOM, SPECIES_NINJASK, SPECIES_SHEDINJA, SPECIES_PINSIR, SPECIES_HERACROSS, SPECIES_VOLBEAT},
|
|
.rest = {0, 0, 0x1D, 8, 0x3e, 20, 0, 12, 1, 10, 0x30, 6, 0x44, 20},
|
|
},
|
|
{
|
|
.name = {_("ヒロオ"), _("LIONEL"), _("LIONEL"), _("CAIO"), _("LUDWIG"), _("LEO")},
|
|
.otId = 0xCF09,
|
|
.facilityClass = 0x2B,
|
|
.species = {SPECIES_SWELLOW, SPECIES_SWALOT, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_TORKOAL, SPECIES_HARIYAMA, SPECIES_MIGHTYENA, SPECIES_LUDICOLO, SPECIES_CRAWDAUNT, SPECIES_WHISCASH},
|
|
.rest = {1, 0, 0x38, 12, 1, 10, 0x30, 6, 6, 10, 0x20, 0x10, 0x13, 0x22},
|
|
},
|
|
{
|
|
.name = {_("ケイジ"), _("SONNY"), _("HERVE"), _("FEDRO"), _("WENZEL"), _("SANTI")},
|
|
.otId = 0x2E34,
|
|
.facilityClass = 0x26,
|
|
.species = {SPECIES_LINOONE, SPECIES_MIGHTYENA, SPECIES_WHISCASH, SPECIES_ZANGOOSE, SPECIES_SEVIPER, SPECIES_NINETALES, SPECIES_KECLEON, SPECIES_SHUCKLE, SPECIES_MANECTRIC, SPECIES_MACHAMP},
|
|
.rest = {2, 0, 1, 10, 10, 0x16, 0x15, 14, 0x30, 6, 0x3b, 12, 0x4, 12},
|
|
},
|
|
{
|
|
.name = {_("ユラ"), _("LAYLA"), _("LAYLA"), _("ASTRID"), _("SONJA"), _("LOLA")},
|
|
.otId = 0x84EF,
|
|
.facilityClass = 0x47,
|
|
.species = {SPECIES_SWALOT, SPECIES_XATU, SPECIES_ALTARIA, SPECIES_GOLDUCK, SPECIES_FLYGON, SPECIES_ALAKAZAM, SPECIES_GARDEVOIR, SPECIES_WAILORD, SPECIES_GRUMPIG, SPECIES_MIGHTYENA},
|
|
.rest = {3, 0, 11, 16, 15, 0x1e, 0x39, 16, 0x21, 0x14, 0x3, 12, 0xff, 0xff},
|
|
},
|
|
{
|
|
.name = {_("ヨウカ"), _("MACY"), _("AMELIE"), _("CLEO"), _("MARIA"), _("ELISA")},
|
|
.otId = 0x1E43,
|
|
.facilityClass = 0x27,
|
|
.species = {SPECIES_WIGGLYTUFF, SPECIES_LINOONE, SPECIES_KINGDRA, SPECIES_DELCATTY, SPECIES_RAICHU, SPECIES_FEAROW, SPECIES_STARMIE, SPECIES_MEDICHAM, SPECIES_SHIFTRY, SPECIES_BEAUTIFLY},
|
|
.rest = {4, 0, 15, 0x1e, 0x14, 16, 6, 16, 15, 0x28, 0x1c, 0x1c, 0x13, 0x1c},
|
|
},
|
|
{
|
|
.name = {_("ヤスシ"), _("DONTE"), _("BRAHIM"), _("GLAUCO"), _("JOSEF"), _("ROQUE")},
|
|
.otId = 0x379F,
|
|
.facilityClass = 0x30,
|
|
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_AGGRON, SPECIES_MAGNETON, SPECIES_MACHAMP, SPECIES_ARMALDO, SPECIES_HERACROSS, SPECIES_NOSEPASS, SPECIES_EXPLOUD, SPECIES_MIGHTYENA},
|
|
.rest = {5, 0, 0x29, 0x0A, 0x08, 0x14, 0x2F, 0x10, 0x38, 0x16, 0x20, 0x08, 0x00, 0x0C},
|
|
},
|
|
{
|
|
.name = {_("ミサオ"), _("AMIRA"), _("LAURE"), _("DAFNE"), _("AMELIE"), _("LARA")},
|
|
.otId = 0xF555,
|
|
.facilityClass = 0x31,
|
|
.species = {SPECIES_STARMIE, SPECIES_DODRIO, SPECIES_MAGNETON, SPECIES_MEDICHAM, SPECIES_MIGHTYENA, SPECIES_GLALIE, SPECIES_GOLEM, SPECIES_ELECTRODE, SPECIES_PELIPPER, SPECIES_SHARPEDO},
|
|
.rest = {6, 0, 0x0B, 0x0C, 0x3E, 0x12, 0x00, 0x0C, 0x31, 0x0A, 0x30, 0x14, 0x00, 0x0C},
|
|
},
|
|
{
|
|
.name = {_("カズサ"), _("KALI"), _("JODIE"), _("ILENIA"), _("KARO"), _("ELSA")},
|
|
.otId = 0x8D26,
|
|
.facilityClass = 0x14,
|
|
.species = {SPECIES_NINETALES, SPECIES_ALAKAZAM, SPECIES_SCEPTILE, SPECIES_SALAMENCE, SPECIES_GOLDUCK, SPECIES_MAWILE, SPECIES_WEEZING, SPECIES_LANTURN, SPECIES_GARDEVOIR, SPECIES_MILOTIC},
|
|
.rest = {7, 0, 0x06, 0x0A, 0x20, 0x06, 0x1F, 0x0A, 0x02, 0x0A, 0x03, 0x0C, 0xFF, 0xFF},
|
|
},
|
|
{
|
|
.name = {_("スミレ"), _("ANNIE"), _("ANNIE"), _("IMELDA"), _("INES"), _("ROSA")},
|
|
.otId = 0x800C,
|
|
.facilityClass = 0xD,
|
|
.species = {SPECIES_SCEPTILE, SPECIES_VILEPLUME, SPECIES_BELLOSSOM, SPECIES_ROSELIA, SPECIES_CORSOLA, SPECIES_FLYGON, SPECIES_BRELOOM, SPECIES_MILOTIC, SPECIES_ALTARIA, SPECIES_CRADILY},
|
|
.rest = {8, 0, 0x22, 0x1E, 0x33, 0x04, 0x0E, 0x02, 0x02, 0x0A, 0x1E, 0x10, 0x00, 0x0C},
|
|
},
|
|
{
|
|
.name = {_("アキノリ"), _("DILLEN"), _("RENE"), _("INDRO"), _("DETLEF"), _("PEDRO")},
|
|
.otId = 0x469f,
|
|
.facilityClass = 0,
|
|
.species = {SPECIES_SKARMORY, SPECIES_GOLEM, SPECIES_BLAZIKEN, SPECIES_CAMERUPT, SPECIES_DONPHAN, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_TROPIUS, SPECIES_SOLROCK, SPECIES_RHYDON},
|
|
.rest = {9, 0, 0x3D, 0x0A, 0x11, 0x10, 0x1E, 0x0E, 0x1C, 0x20, 0x04, 0x0C, 0xFF, 0xFF},
|
|
},
|
|
{
|
|
.name = {_("トウゾウ"), _("DALLAS"), _("BRUNO"), _("LEARCO"), _("ANSGAR"), _("MANOLO")},
|
|
.otId = 0x71FC,
|
|
.facilityClass = 0x2D,
|
|
.species = {SPECIES_SEAKING, SPECIES_STARMIE, SPECIES_GOLDUCK, SPECIES_TENTACRUEL, SPECIES_OCTILLERY, SPECIES_GOREBYSS, SPECIES_GLALIE, SPECIES_WAILORD, SPECIES_SHARPEDO, SPECIES_KINGDRA},
|
|
.rest = {10, 0, 0x05, 0x0A, 0x06, 0x06, 0x0E, 0x16, 0x14, 0x0A, 0x00, 0x0C, 0xFF, 0xFF},
|
|
},
|
|
{
|
|
.name = {_("セイヤ"), _("FRANK"), _("FRANK"), _("OLINDO"), _("FRANK"), _("MAURO")},
|
|
.otId = 0xA39E,
|
|
.facilityClass = 0x3A,
|
|
.species = {SPECIES_QUAGSIRE, SPECIES_STARMIE, SPECIES_PELIPPER, SPECIES_CRAWDAUNT, SPECIES_WAILORD, SPECIES_GYARADOS, SPECIES_SWAMPERT, SPECIES_LANTURN, SPECIES_WHISCASH, SPECIES_SHUCKLE},
|
|
.rest = {11, 0, 0x0E, 0x28, 0x3D, 0x10, 0x0F, 0x24, 0x14, 0x0A, 0x23, 0x1E, 0x24, 0x10},
|
|
},
|
|
{
|
|
.name = {_("リュウジ"), _("LAMONT"), _("XAV"), _("ORFEO"), _("JÜRGEN"), _("JORGE")},
|
|
.otId = 0xE590,
|
|
.facilityClass = 0x19,
|
|
.species = {SPECIES_ABSOL, SPECIES_CROBAT, SPECIES_EXPLOUD, SPECIES_MAGNETON, SPECIES_SHARPEDO, SPECIES_MANECTRIC, SPECIES_METAGROSS, SPECIES_ELECTRODE, SPECIES_NOSEPASS, SPECIES_WEEZING},
|
|
.rest = {12, 0, 0x20, 0x10, 0x2E, 0x06, 0x0B, 0x10, 0x22, 0x1E, 0x0F, 0x1E, 0x0B, 0x10},
|
|
},
|
|
{
|
|
.name = {_("カツアキ"), _("TYRESE"), _("ANDY"), _("PARIDE"), _("DAVID"), _("CHICHO")},
|
|
.otId = 0xD018,
|
|
.facilityClass = 10,
|
|
.species = {SPECIES_BLAZIKEN, SPECIES_GOLEM, SPECIES_MACHAMP, SPECIES_RHYDON, SPECIES_HARIYAMA, SPECIES_AGGRON, SPECIES_MEDICHAM, SPECIES_ZANGOOSE, SPECIES_VIGOROTH, SPECIES_SLAKING},
|
|
.rest = {13, 0, 0x29, 0x0A, 0x3A, 0x06, 0x15, 0x0E, 0x35, 0x14, 0x34, 0x10, 0x1E, 0x06},
|
|
},
|
|
{
|
|
.name = {_("トシミツ"), _("DANTE"), _("DANTE"), _("RAOUL"), _("LOTHAR"), _("PABLO")},
|
|
.otId = 0xBC75,
|
|
.facilityClass = 14,
|
|
.species = {SPECIES_SCEPTILE, SPECIES_SANDSLASH, SPECIES_FLYGON, SPECIES_CLAYDOL, SPECIES_ARMALDO, SPECIES_CROBAT, SPECIES_CRADILY, SPECIES_SOLROCK, SPECIES_LUNATONE, SPECIES_GOLEM},
|
|
.rest = {14, 0, 0x01, 0x0A, 0x17, 0x10, 0x43, 0x12, 0x22, 0x1E, 0x0B, 0x10, 0x0F, 0x28},
|
|
},
|
|
{
|
|
.name = {_("ローウェン"), _("ARTURO"), _("ARTURO"), _("ROMOLO"), _("BRIAN"), _("ARTURO")},
|
|
.otId = 0xFA02,
|
|
.facilityClass = 0x20,
|
|
.species = {SPECIES_ABSOL, SPECIES_MIGHTYENA, SPECIES_ALAKAZAM, SPECIES_BANETTE, SPECIES_NINETALES, SPECIES_CLAYDOL, SPECIES_MUK, SPECIES_SALAMENCE, SPECIES_WALREIN, SPECIES_DUSCLOPS},
|
|
.rest = {15, 0, 0x0F, 0x1E, 0x04, 0x14, 0x2F, 0x10, 0x06, 0x10, 0x20, 0x10, 0x03, 0x0E},
|
|
},
|
|
};
|
|
|
|
static const u8 *const gUnknown_08610EF0[][4] =
|
|
{
|
|
{gText_082B7229, gText_082B731C, gText_082B735B, gText_082B7423},
|
|
{gText_082B74C1, gText_082B756F, gText_082B75B2, gText_082B763F},
|
|
{gText_082B76AC, gText_082B7772, gText_082B77CE, gText_082B7871},
|
|
{gText_082B78D4, gText_082B7B1A, gText_082B7C13, gText_082B7D18},
|
|
{gText_082B7DD4, gText_082B7EE5, gText_082B7F35, gText_082B7FE8},
|
|
{gText_082B8087, gText_082B822B, gText_082B8286, gText_082B8356},
|
|
{gText_082B83CE, gText_082B84FC, gText_082B8559, gText_082B8656},
|
|
{gText_082B86EA, gText_082B87DA, gText_082B887C, gText_082B8957},
|
|
{gText_082B89C6, gText_082B8ACF, gText_082B8B66, gText_082B8C20},
|
|
{gText_082B8CAA, gText_082B8DD3, gText_082B8E24, gText_082B8ED5},
|
|
{gText_082B8F45, gText_082B905F, gText_082B910E, gText_082B9204},
|
|
{gText_082B929C, gText_082B9438, gText_082B9488, gText_082B9564},
|
|
{gText_082B95D8, gText_082B9763, gText_082B97E5, gText_082B989A},
|
|
{gText_082B992D, gText_082B9A84, gText_082B9AB9, gText_082B9B76},
|
|
{gText_082B9BF2, gText_082B9D83, gText_082B9DF9, gText_082B9EAA},
|
|
{gText_082B9F55, gText_082BA084, gText_082BA11D, gText_082BA1F3},
|
|
};
|
|
|
|
static const u8 *const gUnknown_08610FF0[][2] =
|
|
{
|
|
{gText_082BE50D, gText_082BE5F5},
|
|
{gText_082BE679, gText_082BE71E},
|
|
{gText_082BE762, gText_082BE7F8},
|
|
{gText_082BE850, gText_082BE99C},
|
|
{gText_082BEA1B, gText_082BEAE9},
|
|
{gText_082BEB72, gText_082BEC8E},
|
|
{gText_082BED16, gText_082BEE29},
|
|
{gText_082BEEB4, gText_082BEFE2},
|
|
{gText_082BF04E, gText_082BF11D},
|
|
{gText_082BF1A8, gText_082BF268},
|
|
{gText_082BF2D1, gText_082BF3CF},
|
|
{gText_082BF46A, gText_082BF551},
|
|
{gText_082BF5C3, gText_082BF6E5},
|
|
{gText_082BF773, gText_082BF869},
|
|
{gText_082BF8DD, gText_082BF9BA},
|
|
{gText_082BFA5A, gText_082BFB4E},
|
|
};
|
|
|
|
static const u8 *const gUnknown_08611070[][5] =
|
|
{
|
|
{gText_082BA2A3, gText_082BA34E, gText_082BA380, gText_082BA3D2, gText_082BA448},
|
|
{gText_082BA4D3, gText_082BA58C, gText_082BA5BF, gText_082BA5F3, gText_082BA635},
|
|
{gText_082BA6E6, gText_082BA742, gText_082BA770, gText_082BA78F, gText_082BA7D8},
|
|
{gText_082BA867, gText_082BA96B, gText_082BA9B7, gText_082BAA1B, gText_082BAA81},
|
|
{gText_082BAB22, gText_082BAC43, gText_082BAC78, gText_082BAD17, gText_082BADB6},
|
|
{gText_082BAE36, gText_082BAF4E, gText_082BAF8F, gText_082BAFDB, gText_082BB05F},
|
|
{gText_082BB0D4, gText_082BB18C, gText_082BB1CE, gText_082BB242, gText_082BB2D9},
|
|
{gText_082BB370, gText_082BB4C3, gText_082BB4FB, gText_082BB575, gText_082BB5E1},
|
|
{gText_082BB656, gText_082BB6E5, gText_082BB72C, gText_082BB7A2, gText_082BB84A},
|
|
{gText_082BB8CD, gText_082BB970, gText_082BB9AE, gText_082BBA05, gText_082BBA6C},
|
|
{gText_082BBB01, gText_082BBC1C, gText_082BBC4B, gText_082BBCF6, gText_082BBD90},
|
|
{gText_082BBE0B, gText_082BBEE5, gText_082BBF25, gText_082BBFA4, gText_082BC024},
|
|
{gText_082BC0C8, gText_082BC213, gText_082BC247, gText_082BC2DD, gText_082BC373},
|
|
{gText_082BC40E, gText_082BC514, gText_082BC555, gText_082BC5CE, gText_082BC666},
|
|
{gText_082BC714, gText_082BC808, gText_082BC84D, gText_082BC8EA, gText_082BC984},
|
|
{gText_082BCA4D, gText_082BCB75, gText_082BCBA6, gText_082BCBFC, gText_082BCCA4},
|
|
};
|
|
|
|
static const u8 *const gUnknown_086111B0[][2] =
|
|
{
|
|
{gText_082BFBF2, gText_082BFCAE},
|
|
{gText_082BFD26, gText_082BFDB1},
|
|
{gText_082BFE24, gText_082BFEAD},
|
|
{gText_082BFF0A, gText_082C0032},
|
|
{gText_082C0090, gText_082C016E},
|
|
{gText_082C01F7, gText_082C034C},
|
|
{gText_082C03CA, gText_082C046E},
|
|
{gText_082C04F9, gText_082C0598},
|
|
{gText_082C0602, gText_082C06D8},
|
|
{gText_082C074A, gText_082C0809},
|
|
{gText_082C086E, gText_082C0982},
|
|
{gText_082C0A1D, gText_082C0AFD},
|
|
{gText_082C0B6F, gText_082C0C7D},
|
|
{gText_082C0D0B, gText_082C0DFE},
|
|
{gText_082C0E71, gText_082C0F6D},
|
|
{gText_082C1003, gText_082C1122},
|
|
};
|
|
|
|
static const u8 *const gUnknown_08611230[][2] =
|
|
{
|
|
{gText_082BCD68, gText_082BCE64},
|
|
{gText_082BCEF2, gText_082BCF61},
|
|
{gText_082BCFA1, gText_082BD03C},
|
|
{gText_082BD06D, gText_082BD18A},
|
|
{gText_082BD222, gText_082BD325},
|
|
{gText_082BD3B1, gText_082BD493},
|
|
{gText_082BD51C, gText_082BD609},
|
|
{gText_082BD697, gText_082BD797},
|
|
{gText_082BD806, gText_082BD8F5},
|
|
{gText_082BD9BE, gText_082BDAE1},
|
|
{gText_082BDB4E, gText_082BDC6B},
|
|
{gText_082BDD0D, gText_082BDDEC},
|
|
{gText_082BDE68, gText_082BDF4D},
|
|
{gText_082BDFD8, gText_082BE0FD},
|
|
{gText_082BE189, gText_082BE2A5},
|
|
{gText_082BE33E, gText_082BE46C},
|
|
};
|
|
|
|
static const u8 *const gUnknown_086112B0[][2] =
|
|
{
|
|
{gText_082C11D1, gText_082C12D5},
|
|
{gText_082C13AB, gText_082C1444},
|
|
{gText_082C1501, gText_082C15B6},
|
|
{gText_082C165E, gText_082C174F},
|
|
{gText_082C1862, gText_082C19A0},
|
|
{gText_082C1A76, gText_082C1C16},
|
|
{gText_082C1CF5, gText_082C1DC1},
|
|
{gText_082C1EDC, gText_082C1FEC},
|
|
{gText_082C20D1, gText_082C21FF},
|
|
{gText_082C231C, gText_082C2407},
|
|
{gText_082C24B5, gText_082C25B1},
|
|
{gText_082C2707, gText_082C27D4},
|
|
{gText_082C28D6, gText_082C2A0B},
|
|
{gText_082C2B50, gText_082C2C77},
|
|
{gText_082C2D67, gText_082C2E41},
|
|
{gText_082C2EF5, gText_082C3023},
|
|
};
|
|
|
|
static const u8 *const gUnknown_08611330[] =
|
|
{
|
|
gText_082B6EA5,
|
|
gText_082B6EEC,
|
|
gText_082B6F16,
|
|
gText_082B6F4C,
|
|
gText_082B6F92,
|
|
gText_082B6FC9,
|
|
gText_082B700C,
|
|
gText_082B703A,
|
|
gText_082B706A,
|
|
gText_082B709C,
|
|
gText_082B70CC,
|
|
gText_082B710A,
|
|
gText_082B714D,
|
|
gText_082B7185,
|
|
gText_082B71C1,
|
|
gText_082B71F9,
|
|
};
|
|
|
|
static const bool8 gUnknown_08611370[MOVES_COUNT] =
|
|
{
|
|
[MOVE_NONE] = FALSE,
|
|
[MOVE_POUND] = FALSE,
|
|
[MOVE_KARATE_CHOP] = TRUE,
|
|
[MOVE_DOUBLE_SLAP] = TRUE,
|
|
[MOVE_COMET_PUNCH] = FALSE,
|
|
[MOVE_MEGA_PUNCH] = TRUE,
|
|
[MOVE_PAY_DAY] = FALSE,
|
|
[MOVE_FIRE_PUNCH] = TRUE,
|
|
[MOVE_ICE_PUNCH] = TRUE,
|
|
[MOVE_THUNDER_PUNCH] = TRUE,
|
|
[MOVE_SCRATCH] = FALSE,
|
|
[MOVE_VICE_GRIP] = FALSE,
|
|
[MOVE_GUILLOTINE] = TRUE,
|
|
[MOVE_RAZOR_WIND] = FALSE,
|
|
[MOVE_SWORDS_DANCE] = TRUE,
|
|
[MOVE_CUT] = FALSE,
|
|
[MOVE_GUST] = FALSE,
|
|
[MOVE_WING_ATTACK] = FALSE,
|
|
[MOVE_WHIRLWIND] = TRUE,
|
|
[MOVE_FLY] = TRUE,
|
|
[MOVE_BIND] = TRUE,
|
|
[MOVE_SLAM] = TRUE,
|
|
[MOVE_VINE_WHIP] = FALSE,
|
|
[MOVE_STOMP] = TRUE,
|
|
[MOVE_DOUBLE_KICK] = TRUE,
|
|
[MOVE_MEGA_KICK] = TRUE,
|
|
[MOVE_JUMP_KICK] = TRUE,
|
|
[MOVE_ROLLING_KICK] = TRUE,
|
|
[MOVE_SAND_ATTACK] = TRUE,
|
|
[MOVE_HEADBUTT] = TRUE,
|
|
[MOVE_HORN_ATTACK] = FALSE,
|
|
[MOVE_FURY_ATTACK] = FALSE,
|
|
[MOVE_HORN_DRILL] = TRUE,
|
|
[MOVE_TACKLE] = FALSE,
|
|
[MOVE_BODY_SLAM] = TRUE,
|
|
[MOVE_WRAP] = TRUE,
|
|
[MOVE_TAKE_DOWN] = TRUE,
|
|
[MOVE_THRASH] = TRUE,
|
|
[MOVE_DOUBLE_EDGE] = TRUE,
|
|
[MOVE_TAIL_WHIP] = FALSE,
|
|
[MOVE_POISON_STING] = FALSE,
|
|
[MOVE_TWINEEDLE] = TRUE,
|
|
[MOVE_PIN_MISSILE] = FALSE,
|
|
[MOVE_LEER] = FALSE,
|
|
[MOVE_BITE] = TRUE,
|
|
[MOVE_GROWL] = FALSE,
|
|
[MOVE_ROAR] = TRUE,
|
|
[MOVE_SING] = TRUE,
|
|
[MOVE_SUPERSONIC] = TRUE,
|
|
[MOVE_SONIC_BOOM] = TRUE,
|
|
[MOVE_DISABLE] = TRUE,
|
|
[MOVE_ACID] = FALSE,
|
|
[MOVE_EMBER] = FALSE,
|
|
[MOVE_FLAMETHROWER] = TRUE,
|
|
[MOVE_MIST] = TRUE,
|
|
[MOVE_WATER_GUN] = FALSE,
|
|
[MOVE_HYDRO_PUMP] = TRUE,
|
|
[MOVE_SURF] = TRUE,
|
|
[MOVE_ICE_BEAM] = TRUE,
|
|
[MOVE_BLIZZARD] = TRUE,
|
|
[MOVE_PSYBEAM] = TRUE,
|
|
[MOVE_BUBBLE_BEAM] = FALSE,
|
|
[MOVE_AURORA_BEAM] = FALSE,
|
|
[MOVE_HYPER_BEAM] = TRUE,
|
|
[MOVE_PECK] = FALSE,
|
|
[MOVE_DRILL_PECK] = TRUE,
|
|
[MOVE_SUBMISSION] = TRUE,
|
|
[MOVE_LOW_KICK] = TRUE,
|
|
[MOVE_COUNTER] = TRUE,
|
|
[MOVE_SEISMIC_TOSS] = TRUE,
|
|
[MOVE_STRENGTH] = TRUE,
|
|
[MOVE_ABSORB] = FALSE,
|
|
[MOVE_MEGA_DRAIN] = FALSE,
|
|
[MOVE_LEECH_SEED] = TRUE,
|
|
[MOVE_GROWTH] = TRUE,
|
|
[MOVE_RAZOR_LEAF] = TRUE,
|
|
[MOVE_SOLAR_BEAM] = TRUE,
|
|
[MOVE_POISON_POWDER] = TRUE,
|
|
[MOVE_STUN_SPORE] = TRUE,
|
|
[MOVE_SLEEP_POWDER] = TRUE,
|
|
[MOVE_PETAL_DANCE] = TRUE,
|
|
[MOVE_STRING_SHOT] = FALSE,
|
|
[MOVE_DRAGON_RAGE] = TRUE,
|
|
[MOVE_FIRE_SPIN] = TRUE,
|
|
[MOVE_THUNDER_SHOCK] = FALSE,
|
|
[MOVE_THUNDERBOLT] = TRUE,
|
|
[MOVE_THUNDER_WAVE] = TRUE,
|
|
[MOVE_THUNDER] = TRUE,
|
|
[MOVE_ROCK_THROW] = FALSE,
|
|
[MOVE_EARTHQUAKE] = TRUE,
|
|
[MOVE_FISSURE] = TRUE,
|
|
[MOVE_DIG] = TRUE,
|
|
[MOVE_TOXIC] = TRUE,
|
|
[MOVE_CONFUSION] = FALSE,
|
|
[MOVE_PSYCHIC] = TRUE,
|
|
[MOVE_HYPNOSIS] = TRUE,
|
|
[MOVE_MEDITATE] = TRUE,
|
|
[MOVE_AGILITY] = TRUE,
|
|
[MOVE_QUICK_ATTACK] = TRUE,
|
|
[MOVE_RAGE] = FALSE,
|
|
[MOVE_TELEPORT] = FALSE,
|
|
[MOVE_NIGHT_SHADE] = TRUE,
|
|
[MOVE_MIMIC] = TRUE,
|
|
[MOVE_SCREECH] = TRUE,
|
|
[MOVE_DOUBLE_TEAM] = TRUE,
|
|
[MOVE_RECOVER] = TRUE,
|
|
[MOVE_HARDEN] = TRUE,
|
|
[MOVE_MINIMIZE] = TRUE,
|
|
[MOVE_SMOKESCREEN] = TRUE,
|
|
[MOVE_CONFUSE_RAY] = TRUE,
|
|
[MOVE_WITHDRAW] = TRUE,
|
|
[MOVE_DEFENSE_CURL] = TRUE,
|
|
[MOVE_BARRIER] = TRUE,
|
|
[MOVE_LIGHT_SCREEN] = TRUE,
|
|
[MOVE_HAZE] = TRUE,
|
|
[MOVE_REFLECT] = TRUE,
|
|
[MOVE_FOCUS_ENERGY] = TRUE,
|
|
[MOVE_BIDE] = FALSE,
|
|
[MOVE_METRONOME] = TRUE,
|
|
[MOVE_MIRROR_MOVE] = TRUE,
|
|
[MOVE_SELF_DESTRUCT] = TRUE,
|
|
[MOVE_EGG_BOMB] = TRUE,
|
|
[MOVE_LICK] = TRUE,
|
|
[MOVE_SMOG] = FALSE,
|
|
[MOVE_SLUDGE] = FALSE,
|
|
[MOVE_BONE_CLUB] = FALSE,
|
|
[MOVE_FIRE_BLAST] = TRUE,
|
|
[MOVE_WATERFALL] = TRUE,
|
|
[MOVE_CLAMP] = TRUE,
|
|
[MOVE_SWIFT] = TRUE,
|
|
[MOVE_SKULL_BASH] = TRUE,
|
|
[MOVE_SPIKE_CANNON] = FALSE,
|
|
[MOVE_CONSTRICT] = FALSE,
|
|
[MOVE_AMNESIA] = TRUE,
|
|
[MOVE_KINESIS] = TRUE,
|
|
[MOVE_SOFT_BOILED] = TRUE,
|
|
[MOVE_HI_JUMP_KICK] = TRUE,
|
|
[MOVE_GLARE] = TRUE,
|
|
[MOVE_DREAM_EATER] = TRUE,
|
|
[MOVE_POISON_GAS] = FALSE,
|
|
[MOVE_BARRAGE] = FALSE,
|
|
[MOVE_LEECH_LIFE] = FALSE,
|
|
[MOVE_LOVELY_KISS] = TRUE,
|
|
[MOVE_SKY_ATTACK] = TRUE,
|
|
[MOVE_TRANSFORM] = TRUE,
|
|
[MOVE_BUBBLE] = FALSE,
|
|
[MOVE_DIZZY_PUNCH] = TRUE,
|
|
[MOVE_SPORE] = TRUE,
|
|
[MOVE_FLASH] = TRUE,
|
|
[MOVE_PSYWAVE] = TRUE,
|
|
[MOVE_SPLASH] = FALSE,
|
|
[MOVE_ACID_ARMOR] = TRUE,
|
|
[MOVE_CRABHAMMER] = TRUE,
|
|
[MOVE_EXPLOSION] = TRUE,
|
|
[MOVE_FURY_SWIPES] = FALSE,
|
|
[MOVE_BONEMERANG] = TRUE,
|
|
[MOVE_REST] = TRUE,
|
|
[MOVE_ROCK_SLIDE] = TRUE,
|
|
[MOVE_HYPER_FANG] = TRUE,
|
|
[MOVE_SHARPEN] = TRUE,
|
|
[MOVE_CONVERSION] = TRUE,
|
|
[MOVE_TRI_ATTACK] = TRUE,
|
|
[MOVE_SUPER_FANG] = TRUE,
|
|
[MOVE_SLASH] = TRUE,
|
|
[MOVE_SUBSTITUTE] = TRUE,
|
|
[MOVE_STRUGGLE] = TRUE,
|
|
[MOVE_SKETCH] = TRUE,
|
|
[MOVE_TRIPLE_KICK] = TRUE,
|
|
[MOVE_THIEF] = TRUE,
|
|
[MOVE_SPIDER_WEB] = TRUE,
|
|
[MOVE_MIND_READER] = TRUE,
|
|
[MOVE_NIGHTMARE] = TRUE,
|
|
[MOVE_FLAME_WHEEL] = FALSE,
|
|
[MOVE_SNORE] = TRUE,
|
|
[MOVE_CURSE] = TRUE,
|
|
[MOVE_FLAIL] = TRUE,
|
|
[MOVE_CONVERSION_2] = TRUE,
|
|
[MOVE_AEROBLAST] = TRUE,
|
|
[MOVE_COTTON_SPORE] = TRUE,
|
|
[MOVE_REVERSAL] = TRUE,
|
|
[MOVE_SPITE] = TRUE,
|
|
[MOVE_POWDER_SNOW] = FALSE,
|
|
[MOVE_PROTECT] = TRUE,
|
|
[MOVE_MACH_PUNCH] = TRUE,
|
|
[MOVE_SCARY_FACE] = TRUE,
|
|
[MOVE_FAINT_ATTACK] = TRUE,
|
|
[MOVE_SWEET_KISS] = TRUE,
|
|
[MOVE_BELLY_DRUM] = TRUE,
|
|
[MOVE_SLUDGE_BOMB] = TRUE,
|
|
[MOVE_MUD_SLAP] = TRUE,
|
|
[MOVE_OCTAZOOKA] = TRUE,
|
|
[MOVE_SPIKES] = TRUE,
|
|
[MOVE_ZAP_CANNON] = TRUE,
|
|
[MOVE_FORESIGHT] = TRUE,
|
|
[MOVE_DESTINY_BOND] = TRUE,
|
|
[MOVE_PERISH_SONG] = TRUE,
|
|
[MOVE_ICY_WIND] = TRUE,
|
|
[MOVE_DETECT] = TRUE,
|
|
[MOVE_BONE_RUSH] = FALSE,
|
|
[MOVE_LOCK_ON] = TRUE,
|
|
[MOVE_OUTRAGE] = TRUE,
|
|
[MOVE_SANDSTORM] = TRUE,
|
|
[MOVE_GIGA_DRAIN] = TRUE,
|
|
[MOVE_ENDURE] = TRUE,
|
|
[MOVE_CHARM] = TRUE,
|
|
[MOVE_ROLLOUT] = TRUE,
|
|
[MOVE_FALSE_SWIPE] = TRUE,
|
|
[MOVE_SWAGGER] = TRUE,
|
|
[MOVE_MILK_DRINK] = TRUE,
|
|
[MOVE_SPARK] = FALSE,
|
|
[MOVE_FURY_CUTTER] = TRUE,
|
|
[MOVE_STEEL_WING] = TRUE,
|
|
[MOVE_MEAN_LOOK] = TRUE,
|
|
[MOVE_ATTRACT] = TRUE,
|
|
[MOVE_SLEEP_TALK] = TRUE,
|
|
[MOVE_HEAL_BELL] = TRUE,
|
|
[MOVE_RETURN] = TRUE,
|
|
[MOVE_PRESENT] = TRUE,
|
|
[MOVE_FRUSTRATION] = TRUE,
|
|
[MOVE_SAFEGUARD] = TRUE,
|
|
[MOVE_PAIN_SPLIT] = TRUE,
|
|
[MOVE_SACRED_FIRE] = TRUE,
|
|
[MOVE_MAGNITUDE] = FALSE,
|
|
[MOVE_DYNAMIC_PUNCH] = TRUE,
|
|
[MOVE_MEGAHORN] = TRUE,
|
|
[MOVE_DRAGON_BREATH] = TRUE,
|
|
[MOVE_BATON_PASS] = TRUE,
|
|
[MOVE_ENCORE] = TRUE,
|
|
[MOVE_PURSUIT] = TRUE,
|
|
[MOVE_RAPID_SPIN] = TRUE,
|
|
[MOVE_SWEET_SCENT] = TRUE,
|
|
[MOVE_IRON_TAIL] = TRUE,
|
|
[MOVE_METAL_CLAW] = TRUE,
|
|
[MOVE_VITAL_THROW] = TRUE,
|
|
[MOVE_MORNING_SUN] = TRUE,
|
|
[MOVE_SYNTHESIS] = TRUE,
|
|
[MOVE_MOONLIGHT] = TRUE,
|
|
[MOVE_HIDDEN_POWER] = TRUE,
|
|
[MOVE_CROSS_CHOP] = TRUE,
|
|
[MOVE_TWISTER] = FALSE,
|
|
[MOVE_RAIN_DANCE] = TRUE,
|
|
[MOVE_SUNNY_DAY] = TRUE,
|
|
[MOVE_CRUNCH] = TRUE,
|
|
[MOVE_MIRROR_COAT] = TRUE,
|
|
[MOVE_PSYCH_UP] = TRUE,
|
|
[MOVE_EXTREME_SPEED] = TRUE,
|
|
[MOVE_ANCIENT_POWER] = TRUE,
|
|
[MOVE_SHADOW_BALL] = TRUE,
|
|
[MOVE_FUTURE_SIGHT] = TRUE,
|
|
[MOVE_ROCK_SMASH] = TRUE,
|
|
[MOVE_WHIRLPOOL] = TRUE,
|
|
[MOVE_BEAT_UP] = TRUE,
|
|
[MOVE_FAKE_OUT] = TRUE,
|
|
[MOVE_UPROAR] = TRUE,
|
|
[MOVE_STOCKPILE] = TRUE,
|
|
[MOVE_SPIT_UP] = TRUE,
|
|
[MOVE_SWALLOW] = TRUE,
|
|
[MOVE_HEAT_WAVE] = TRUE,
|
|
[MOVE_HAIL] = TRUE,
|
|
[MOVE_TORMENT] = TRUE,
|
|
[MOVE_FLATTER] = TRUE,
|
|
[MOVE_WILL_O_WISP] = TRUE,
|
|
[MOVE_MEMENTO] = TRUE,
|
|
[MOVE_FACADE] = TRUE,
|
|
[MOVE_FOCUS_PUNCH] = TRUE,
|
|
[MOVE_SMELLING_SALT] = TRUE,
|
|
[MOVE_FOLLOW_ME] = TRUE,
|
|
[MOVE_NATURE_POWER] = TRUE,
|
|
[MOVE_CHARGE] = TRUE,
|
|
[MOVE_TAUNT] = TRUE,
|
|
[MOVE_HELPING_HAND] = TRUE,
|
|
[MOVE_TRICK] = TRUE,
|
|
[MOVE_ROLE_PLAY] = TRUE,
|
|
[MOVE_WISH] = TRUE,
|
|
[MOVE_ASSIST] = TRUE,
|
|
[MOVE_INGRAIN] = TRUE,
|
|
[MOVE_SUPERPOWER] = TRUE,
|
|
[MOVE_MAGIC_COAT] = TRUE,
|
|
[MOVE_RECYCLE] = TRUE,
|
|
[MOVE_REVENGE] = TRUE,
|
|
[MOVE_BRICK_BREAK] = TRUE,
|
|
[MOVE_YAWN] = TRUE,
|
|
[MOVE_KNOCK_OFF] = TRUE,
|
|
[MOVE_ENDEAVOR] = TRUE,
|
|
[MOVE_ERUPTION] = TRUE,
|
|
[MOVE_SKILL_SWAP] = TRUE,
|
|
[MOVE_IMPRISON] = TRUE,
|
|
[MOVE_REFRESH] = TRUE,
|
|
[MOVE_GRUDGE] = TRUE,
|
|
[MOVE_SNATCH] = TRUE,
|
|
[MOVE_SECRET_POWER] = TRUE,
|
|
[MOVE_DIVE] = TRUE,
|
|
[MOVE_ARM_THRUST] = FALSE,
|
|
[MOVE_CAMOUFLAGE] = TRUE,
|
|
[MOVE_TAIL_GLOW] = TRUE,
|
|
[MOVE_LUSTER_PURGE] = TRUE,
|
|
[MOVE_MIST_BALL] = TRUE,
|
|
[MOVE_FEATHER_DANCE] = TRUE,
|
|
[MOVE_TEETER_DANCE] = TRUE,
|
|
[MOVE_BLAZE_KICK] = TRUE,
|
|
[MOVE_MUD_SPORT] = TRUE,
|
|
[MOVE_ICE_BALL] = FALSE,
|
|
[MOVE_NEEDLE_ARM] = TRUE,
|
|
[MOVE_SLACK_OFF] = TRUE,
|
|
[MOVE_HYPER_VOICE] = TRUE,
|
|
[MOVE_POISON_FANG] = FALSE,
|
|
[MOVE_CRUSH_CLAW] = TRUE,
|
|
[MOVE_BLAST_BURN] = TRUE,
|
|
[MOVE_HYDRO_CANNON] = TRUE,
|
|
[MOVE_METEOR_MASH] = TRUE,
|
|
[MOVE_ASTONISH] = TRUE,
|
|
[MOVE_WEATHER_BALL] = TRUE,
|
|
[MOVE_AROMATHERAPY] = TRUE,
|
|
[MOVE_FAKE_TEARS] = TRUE,
|
|
[MOVE_AIR_CUTTER] = TRUE,
|
|
[MOVE_OVERHEAT] = TRUE,
|
|
[MOVE_ODOR_SLEUTH] = TRUE,
|
|
[MOVE_ROCK_TOMB] = TRUE,
|
|
[MOVE_SILVER_WIND] = TRUE,
|
|
[MOVE_METAL_SOUND] = TRUE,
|
|
[MOVE_GRASS_WHISTLE] = TRUE,
|
|
[MOVE_TICKLE] = TRUE,
|
|
[MOVE_COSMIC_POWER] = TRUE,
|
|
[MOVE_WATER_SPOUT] = TRUE,
|
|
[MOVE_SIGNAL_BEAM] = TRUE,
|
|
[MOVE_SHADOW_PUNCH] = TRUE,
|
|
[MOVE_EXTRASENSORY] = TRUE,
|
|
[MOVE_SKY_UPPERCUT] = TRUE,
|
|
[MOVE_SAND_TOMB] = TRUE,
|
|
[MOVE_SHEER_COLD] = TRUE,
|
|
[MOVE_MUDDY_WATER] = TRUE,
|
|
[MOVE_BULLET_SEED] = FALSE,
|
|
[MOVE_AERIAL_ACE] = TRUE,
|
|
[MOVE_ICICLE_SPEAR] = FALSE,
|
|
[MOVE_IRON_DEFENSE] = TRUE,
|
|
[MOVE_BLOCK] = TRUE,
|
|
[MOVE_HOWL] = TRUE,
|
|
[MOVE_DRAGON_CLAW] = TRUE,
|
|
[MOVE_FRENZY_PLANT] = TRUE,
|
|
[MOVE_BULK_UP] = TRUE,
|
|
[MOVE_BOUNCE] = TRUE,
|
|
[MOVE_MUD_SHOT] = FALSE,
|
|
[MOVE_POISON_TAIL] = TRUE,
|
|
[MOVE_COVET] = TRUE,
|
|
[MOVE_VOLT_TACKLE] = TRUE,
|
|
[MOVE_MAGICAL_LEAF] = TRUE,
|
|
[MOVE_WATER_SPORT] = TRUE,
|
|
[MOVE_CALM_MIND] = TRUE,
|
|
[MOVE_LEAF_BLADE] = TRUE,
|
|
[MOVE_DRAGON_DANCE] = TRUE,
|
|
[MOVE_ROCK_BLAST] = FALSE,
|
|
[MOVE_SHOCK_WAVE] = TRUE,
|
|
[MOVE_WATER_PULSE] = TRUE,
|
|
[MOVE_DOOM_DESIRE] = TRUE,
|
|
[MOVE_PSYCHO_BOOST] = TRUE,
|
|
};
|
|
|
|
static const u8 gUnknown_086114D3[] = {0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00};
|
|
|
|
static void (* const sApprenticeFunctions[])(void) =
|
|
{
|
|
Script_IsPlayersApprenticeActive,
|
|
Script_SetPlayersApprenticeLvlMode,
|
|
sub_81A0978,
|
|
sub_819FC60,
|
|
sub_81A0984,
|
|
sub_81A0990,
|
|
sub_81A09D0,
|
|
Script_CreateApprenticeMenu,
|
|
Script_PrintMessage,
|
|
Script_ResetPlayerApprentice,
|
|
sub_81A1638,
|
|
sub_81A0CC0,
|
|
sub_81A09B4,
|
|
sub_81A0D40,
|
|
sub_81A0DD4,
|
|
sub_81A0FE4,
|
|
sub_81A0FFC,
|
|
sub_81A0D80,
|
|
sub_81A11F8,
|
|
sub_81A1218,
|
|
sub_81A1224,
|
|
sub_81A1438,
|
|
sub_81A150C,
|
|
sub_81A15A4,
|
|
sub_81A1644,
|
|
sub_81A1370,
|
|
};
|
|
|
|
static const u8 gUnknown_08611548[8] = {0x00, 0x01, 0x02, 0x03, 0x06, 0x07, 0x08, 0x09};
|
|
|
|
// text
|
|
extern const u8 gText_Give[];
|
|
extern const u8 gText_NoNeed[];
|
|
extern const u8 gText_Yes[];
|
|
extern const u8 gText_No[];
|
|
|
|
void CopyFriendsApprenticeChallengeText(u8 saveblockApprenticeId)
|
|
{
|
|
u8 i, var;
|
|
const u8 *str;
|
|
|
|
var = gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number;
|
|
for (i = 0; var != 0 && i < 4; var /= 10, i++)
|
|
;
|
|
|
|
StringCopy7(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].playerName);
|
|
ConvertInternationalString(gStringVar1, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].language);
|
|
ConvertIntToDecimalStringN(gStringVar2, gSaveBlock2Ptr->apprentices[saveblockApprenticeId].number, STR_CONV_MODE_RIGHT_ALIGN, i);
|
|
str = gUnknown_08611330[gSaveBlock2Ptr->apprentices[saveblockApprenticeId].id];
|
|
StringExpandPlaceholders(gStringVar4, str);
|
|
}
|
|
|
|
void Apprentice_EnableBothScriptContexts(void)
|
|
{
|
|
EnableBothScriptContexts();
|
|
}
|
|
|
|
void ResetApprenticeStruct(struct Apprentice *apprentice)
|
|
{
|
|
u8 i;
|
|
|
|
for (i = 0; i < 6; i++)
|
|
apprentice->easyChatWords[i] |= 0xFFFF;
|
|
|
|
apprentice->playerName[0] = EOS;
|
|
apprentice->id = 16;
|
|
}
|
|
|
|
void ResetAllApprenticeData(void)
|
|
{
|
|
u8 i, j;
|
|
|
|
PLAYER_APPRENTICE.field_B2_1 = 0;
|
|
for (i = 0; i < 4; i++)
|
|
{
|
|
for (j = 0; j < 6; j++)
|
|
gSaveBlock2Ptr->apprentices[i].easyChatWords[j] |= 0xFFFF;
|
|
gSaveBlock2Ptr->apprentices[i].id = 16;
|
|
gSaveBlock2Ptr->apprentices[i].playerName[0] = EOS;
|
|
gSaveBlock2Ptr->apprentices[i].lvlMode = 0;
|
|
gSaveBlock2Ptr->apprentices[i].number = 0;
|
|
gSaveBlock2Ptr->apprentices[i].field_1 = 0;
|
|
for (j = 0; j < 4; j++)
|
|
gSaveBlock2Ptr->apprentices[i].playerId[j] = 0;
|
|
gSaveBlock2Ptr->apprentices[i].language = gGameLanguage;
|
|
gSaveBlock2Ptr->apprentices[i].unk40 = 0;
|
|
}
|
|
|
|
Script_ResetPlayerApprentice();
|
|
}
|
|
|
|
static bool8 IsPlayersApprenticeActive(void)
|
|
{
|
|
return (PLAYER_APPRENTICE.activeLvlMode != 0);
|
|
}
|
|
|
|
static void sub_819FBC8(void)
|
|
{
|
|
if (gSaveBlock2Ptr->apprentices[0].number == 0)
|
|
{
|
|
do
|
|
{
|
|
PLAYER_APPRENTICE.id = gUnknown_08611548[Random() % ARRAY_COUNT(gUnknown_08611548)];
|
|
} while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id);
|
|
}
|
|
else
|
|
{
|
|
do
|
|
{
|
|
PLAYER_APPRENTICE.id = Random() % 16;
|
|
} while (PLAYER_APPRENTICE.id == gSaveBlock2Ptr->apprentices[0].id);
|
|
}
|
|
}
|
|
|
|
static void SetPlayersApprenticeLvlMode(u8 mode)
|
|
{
|
|
PLAYER_APPRENTICE.activeLvlMode = mode;
|
|
}
|
|
|
|
static void sub_819FC60(void)
|
|
{
|
|
u8 array[APPRENTICE_SPECIES_COUNT];
|
|
u8 i;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(array); i++)
|
|
array[i] = i;
|
|
|
|
for (i = 0; i < 50; i++)
|
|
{
|
|
u8 temp;
|
|
u8 var1 = Random() % ARRAY_COUNT(array);
|
|
u8 var2 = Random() % ARRAY_COUNT(array);
|
|
SWAP(array[var1], array[var2], temp);
|
|
}
|
|
|
|
for (i = 0; i < 3; i++)
|
|
PLAYER_APPRENTICE.monIds[i] = ((array[i * 2] & 0xF) << 4) | ((array[i * 2 + 1]) & 0xF);
|
|
}
|
|
|
|
static u8 sub_819FCF8(u8 val, u8 *arg1, u8 *arg2)
|
|
{
|
|
u8 i, count;
|
|
u8 ret = 0;
|
|
|
|
if (val == 2)
|
|
{
|
|
do
|
|
{
|
|
ret = Random() % 3;
|
|
for (count = 0, i = 0; i < 5; i++)
|
|
{
|
|
if (gUnknown_030062EC->unk2[ret][i] != 0)
|
|
count++;
|
|
}
|
|
} while (count > 3);
|
|
}
|
|
else if (val == 1)
|
|
{
|
|
ret = arg1[*arg2];
|
|
(*arg2)++;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static void sub_819FD64(void)
|
|
{
|
|
u8 sp_0[10];
|
|
u8 sp_C[3];
|
|
u8 sp_10;
|
|
u8 i, j;
|
|
u8 rand1, rand2;
|
|
u8 id;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
sp_C[i] = i;
|
|
for (i = 0; i < 10; i++)
|
|
{
|
|
u8 temp;
|
|
rand1 = Random() % ARRAY_COUNT(sp_C);
|
|
rand2 = Random() % ARRAY_COUNT(sp_C);
|
|
SWAP(sp_C[rand1], sp_C[rand2], temp);
|
|
}
|
|
|
|
for (i = 0; i < 10; i++)
|
|
sp_0[i] = gUnknown_086114D3[i];
|
|
for (i = 0; i < 50; i++)
|
|
{
|
|
u8 temp;
|
|
rand1 = Random() % ARRAY_COUNT(sp_0);
|
|
rand2 = Random() % ARRAY_COUNT(sp_0);
|
|
SWAP(sp_0[rand1], sp_0[rand2], temp);
|
|
}
|
|
|
|
gUnknown_030062EC = AllocZeroed(sizeof(*gUnknown_030062EC));
|
|
gUnknown_030062EC->unk0 = 0;
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
for (j = 0; j < 3; j++)
|
|
gUnknown_030062EC->unk20[j][i] = 4;
|
|
}
|
|
|
|
sp_10 = 0;
|
|
for (i = 0; i < 9; i++)
|
|
{
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_0 = sp_0[i];
|
|
if (sp_0[i] != 3)
|
|
{
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_1 = sub_819FCF8(sp_0[i], sp_C, &sp_10);
|
|
id = PLAYER_APPRENTICE.field_B8[i].unk0_1;
|
|
if (sp_0[i] == 2)
|
|
{
|
|
do
|
|
{
|
|
rand1 = Random() % 4;
|
|
for (j = 0; j < gUnknown_030062EC->unk0 + 1; j++)
|
|
{
|
|
if (gUnknown_030062EC->unk20[id][j] == rand1)
|
|
break;
|
|
}
|
|
} while (j != gUnknown_030062EC->unk0 + 1);
|
|
|
|
gUnknown_030062EC->unk20[id][gUnknown_030062EC->unk0] = rand1;
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_2 = rand1;
|
|
PLAYER_APPRENTICE.field_B8[i].unk2 = sub_819FF98(PLAYER_APPRENTICE.field_B8[i].unk0_1);
|
|
}
|
|
}
|
|
}
|
|
|
|
FREE_AND_SET_NULL(gUnknown_030062EC);
|
|
}
|
|
|
|
// No idea why a do-while loop is needed, but it will not match without it.
|
|
|
|
#define APPRENTICE_SPECIES_ID(speciesArrId, monId) speciesArrId = (PLAYER_APPRENTICE.monIds[monId] >> \
|
|
(((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1) << 2)) & 0xF; \
|
|
do {} while (0)
|
|
|
|
// Why the need to have two macros do the exact thing differently?
|
|
#define APPRENTICE_SPECIES_ID_2(speciesArrId, monId) { u8 a0 = ((PLAYER_APPRENTICE.field_B2_0 >> monId) & 1);\
|
|
speciesArrId = PLAYER_APPRENTICE.monIds[monId]; \
|
|
speciesArrId = ((speciesArrId) >> (a0 << 2)) & 0xF; \
|
|
}
|
|
|
|
static u16 sub_819FF98(u8 arg0)
|
|
{
|
|
u8 i, j;
|
|
u8 id;
|
|
u8 knownMovesCount;
|
|
u16 species;
|
|
const u16 *learnset;
|
|
bool32 var_24 = FALSE;
|
|
u16 moveId = 0;
|
|
bool32 valid;
|
|
u8 level;
|
|
|
|
if (arg0 < 3)
|
|
{
|
|
APPRENTICE_SPECIES_ID(id, arg0);
|
|
}
|
|
else
|
|
{
|
|
id = 0;
|
|
}
|
|
|
|
species = gApprentices[PLAYER_APPRENTICE.id].species[id];
|
|
learnset = gLevelUpLearnsets[species];
|
|
j = 0;
|
|
if (PLAYER_APPRENTICE.activeLvlMode == 1)
|
|
level = 50;
|
|
else
|
|
level = 60;
|
|
|
|
for (j = 0; learnset[j] != 0xFFFF; j++)
|
|
{
|
|
if ((learnset[j] & 0xFE00) > (level << 9))
|
|
break;
|
|
}
|
|
|
|
knownMovesCount = j;
|
|
i = 0;
|
|
while (i < 5)
|
|
{
|
|
if (Random() % 2 == 0 || var_24 == TRUE)
|
|
{
|
|
do
|
|
{
|
|
do
|
|
{
|
|
id = Random() % (NUM_TECHNICAL_MACHINES + NUM_HIDDEN_MACHINES);
|
|
valid = CanSpeciesLearnTMHM(species, id);
|
|
}
|
|
while (!valid);
|
|
|
|
moveId = ItemIdToBattleMoveId(ITEM_TM01 + id);
|
|
valid = TRUE;
|
|
|
|
if (knownMovesCount < 5)
|
|
j = 0;
|
|
else
|
|
j = knownMovesCount - 4;
|
|
|
|
for (; j < knownMovesCount; j++)
|
|
{
|
|
if ((learnset[j] & 0x1FF) == moveId)
|
|
{
|
|
valid = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
} while (valid != TRUE);
|
|
}
|
|
else
|
|
{
|
|
if (knownMovesCount < 5)
|
|
{
|
|
var_24 = TRUE;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
do
|
|
{
|
|
u8 learnsetId = Random() % (knownMovesCount - 4);
|
|
moveId = learnset[learnsetId] & 0x1FF;
|
|
valid = TRUE;
|
|
for (j = knownMovesCount - 4; j < knownMovesCount; j++)
|
|
{
|
|
if ((learnset[j] & 0x1FF) == moveId)
|
|
{
|
|
valid = FALSE;
|
|
break;
|
|
}
|
|
}
|
|
} while (valid != TRUE);
|
|
}
|
|
}
|
|
|
|
if (sub_81A0194(arg0, moveId))
|
|
{
|
|
if (gUnknown_08611370[moveId])
|
|
break;
|
|
i++;
|
|
}
|
|
}
|
|
|
|
gUnknown_030062EC->unk0++;
|
|
return moveId;
|
|
}
|
|
|
|
static bool8 sub_81A0194(u8 arg0, u16 moveId)
|
|
{
|
|
u8 i;
|
|
|
|
for (i = 0; i < 5; i++)
|
|
{
|
|
if (gUnknown_030062EC->unk2[arg0][i] == moveId)
|
|
return FALSE;
|
|
}
|
|
|
|
gUnknown_030062EC->unk2[arg0][gUnknown_030062EC->unk0] = moveId;
|
|
return TRUE;
|
|
}
|
|
|
|
static void GetLatestLearnedMoves(u16 species, u16 *moves)
|
|
{
|
|
u8 i, j;
|
|
u8 level, knownMovesCount;
|
|
const u16 *learnset;
|
|
|
|
if (PLAYER_APPRENTICE.activeLvlMode == 1)
|
|
level = 50;
|
|
else
|
|
level = 60;
|
|
|
|
learnset = gLevelUpLearnsets[species];
|
|
for (i = 0; learnset[i] != 0xFFFF; i++)
|
|
{
|
|
if ((learnset[i] & 0xFE00) > (level << 9))
|
|
break;
|
|
}
|
|
|
|
knownMovesCount = i;
|
|
if (knownMovesCount > 4)
|
|
knownMovesCount = 4;
|
|
|
|
for (j = 0; j < knownMovesCount; j++)
|
|
moves[j] = learnset[(i - 1) - j] & 0x1FF;
|
|
}
|
|
|
|
static u16 sub_81A0284(u8 arg0, u8 speciesTableId, u8 arg2)
|
|
{
|
|
u16 moves[4];
|
|
u8 i, count;
|
|
|
|
if (PLAYER_APPRENTICE.field_B1_1 < 3)
|
|
return 0;
|
|
|
|
count = 0;
|
|
for (i = 0; i < 9; i++)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 0)
|
|
break;
|
|
count++;
|
|
}
|
|
|
|
GetLatestLearnedMoves(gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId], moves);
|
|
for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 2
|
|
&& PLAYER_APPRENTICE.field_B8[i].unk0_1 == arg0
|
|
&& PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
|
|
{
|
|
moves[PLAYER_APPRENTICE.field_B8[i].unk0_2] = PLAYER_APPRENTICE.field_B8[i].unk2;
|
|
}
|
|
}
|
|
|
|
return moves[arg2];
|
|
}
|
|
|
|
static void sub_81A0390(u8 arg0)
|
|
{
|
|
struct ApprenticeMon *apprenticeMons[3];
|
|
u8 i, j;
|
|
u32 speciesTableId;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
gSaveBlock2Ptr->apprentices[0].monData[i].species = 0;
|
|
gSaveBlock2Ptr->apprentices[0].monData[i].item = 0;
|
|
for (j = 0; j < 4; j++)
|
|
gSaveBlock2Ptr->apprentices[0].monData[i].moves[j] = 0;
|
|
}
|
|
|
|
j = PLAYER_APPRENTICE.field_B1_2;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
apprenticeMons[j] = &gSaveBlock2Ptr->apprentices[0].monData[i];
|
|
j = (j + 1) % 3;
|
|
}
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
APPRENTICE_SPECIES_ID(speciesTableId, i);
|
|
apprenticeMons[i]->species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
|
|
GetLatestLearnedMoves(apprenticeMons[i]->species, apprenticeMons[i]->moves);
|
|
}
|
|
|
|
for (i = 0; i < arg0; i++)
|
|
{
|
|
u8 var1 = PLAYER_APPRENTICE.field_B8[i].unk0_0;
|
|
u8 monId = PLAYER_APPRENTICE.field_B8[i].unk0_1;
|
|
if (var1 == 1)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
|
|
apprenticeMons[monId]->item = PLAYER_APPRENTICE.field_B8[i].unk2;
|
|
}
|
|
else if (var1 == 2)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B8[i].unk0_3 != 0)
|
|
{
|
|
u32 moveSlot = PLAYER_APPRENTICE.field_B8[i].unk0_2;
|
|
apprenticeMons[monId]->moves[moveSlot] = PLAYER_APPRENTICE.field_B8[i].unk2;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
static void CreateMenuWithAnswers(u8 arg0)
|
|
{
|
|
u8 i;
|
|
u8 windowId;
|
|
const u8 *strings[3];
|
|
u8 count = 2;
|
|
u8 width;
|
|
u8 left;
|
|
u8 top;
|
|
s32 pixelWidth;
|
|
|
|
switch (arg0)
|
|
{
|
|
case APPRENTICE_ASK_WHICH_LEVEL:
|
|
left = 0x12;
|
|
top = 8;
|
|
strings[0] = gText_Lv50;
|
|
strings[1] = gText_OpenLevel;
|
|
break;
|
|
case APPRENTICE_ASK_3SPECIES:
|
|
count = 3;
|
|
left = 0x12;
|
|
top = 6;
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
u16 species;
|
|
u32 speciesTableId;
|
|
|
|
APPRENTICE_SPECIES_ID(speciesTableId, i);
|
|
species = gApprentices[PLAYER_APPRENTICE.id].species[speciesTableId];
|
|
strings[i] = gSpeciesNames[species];
|
|
}
|
|
break;
|
|
case APPRENTICE_ASK_2SPECIES:
|
|
left = 0x12;
|
|
top = 8;
|
|
if (PLAYER_APPRENTICE.field_B1_1 > 2)
|
|
return;
|
|
strings[1] = gSpeciesNames[gUnknown_030062F0->unk2];
|
|
strings[0] = gSpeciesNames[gUnknown_030062F0->unk0];
|
|
break;
|
|
case APPRENTICE_ASK_MOVES:
|
|
left = 0x11;
|
|
top = 8;
|
|
strings[0] = gMoveNames[gUnknown_030062F0->unk4];
|
|
strings[1] = gMoveNames[gUnknown_030062F0->unk6];
|
|
break;
|
|
case APPRENTICE_ASK_GIVE:
|
|
left = 0x12;
|
|
top = 8;
|
|
strings[0] = gText_Give;
|
|
strings[1] = gText_NoNeed;
|
|
break;
|
|
case APPRENTICE_ASK_YES_NO:
|
|
left = 0x14;
|
|
top = 8;
|
|
strings[0] = gText_Yes;
|
|
strings[1] = gText_No;
|
|
break;
|
|
default:
|
|
left = 0;
|
|
top = 0;
|
|
break;
|
|
}
|
|
|
|
pixelWidth = 0;
|
|
for (i = 0; i < count; i++)
|
|
{
|
|
s32 width = GetStringWidth(1, strings[i], 0);
|
|
if (width > pixelWidth)
|
|
pixelWidth = width;
|
|
}
|
|
|
|
width = convert_pixel_width_to_tile_width(pixelWidth);
|
|
left = sub_80E2D5C(left, width);
|
|
windowId = CreateAndShowWindow(left, top, width, count * 2);
|
|
SetStandardWindowBorderStyle(windowId, 0);
|
|
|
|
for (i = 0; i < count; i++)
|
|
AddTextPrinterParameterized(windowId, 1, strings[i], 8, (i * 16) + 1, TEXT_SPEED_FF, NULL);
|
|
|
|
InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, count, 0);
|
|
CreateChooseAnswerTask(TRUE, count, windowId);
|
|
}
|
|
|
|
#define tNoBButton data[4]
|
|
#define tWrapAround data[5]
|
|
#define tWindowId data[6]
|
|
|
|
static void Task_ChooseAnswer(u8 taskId)
|
|
{
|
|
s8 input;
|
|
s16 *data = gTasks[taskId].data;
|
|
|
|
if (!tWrapAround)
|
|
input = Menu_ProcessInputNoWrapAround();
|
|
else
|
|
input = ProcessMenuInput();
|
|
|
|
switch (input)
|
|
{
|
|
case MENU_NOTHING_CHOSEN:
|
|
return;
|
|
case MENU_B_PRESSED:
|
|
if (tNoBButton)
|
|
return;
|
|
|
|
PlaySE(SE_SELECT);
|
|
gSpecialVar_Result = 0x7F;
|
|
break;
|
|
default:
|
|
gSpecialVar_Result = input;
|
|
break;
|
|
}
|
|
|
|
RemoveAndHideWindow(tWindowId);
|
|
DestroyTask(taskId);
|
|
EnableBothScriptContexts();
|
|
}
|
|
|
|
static u8 CreateAndShowWindow(u8 left, u8 top, u8 width, u8 height)
|
|
{
|
|
u8 windowId;
|
|
struct WindowTemplate winTemplate = CreateWindowTemplate(0, left + 1, top + 1, width, height, 15, 100);
|
|
|
|
windowId = AddWindow(&winTemplate);
|
|
PutWindowTilemap(windowId);
|
|
CopyWindowToVram(windowId, 3);
|
|
return windowId;
|
|
}
|
|
|
|
static void RemoveAndHideWindow(u8 windowId)
|
|
{
|
|
sub_8198070(windowId, TRUE);
|
|
RemoveWindow(windowId);
|
|
}
|
|
|
|
static void CreateChooseAnswerTask(bool8 noBButton, u8 itemsCount, u8 windowId)
|
|
{
|
|
u8 taskId = CreateTask(Task_ChooseAnswer, 80);
|
|
gTasks[taskId].tNoBButton = noBButton;
|
|
|
|
if (itemsCount > 3)
|
|
gTasks[taskId].tWrapAround = TRUE;
|
|
else
|
|
gTasks[taskId].tWrapAround = FALSE;
|
|
|
|
gTasks[taskId].tWindowId = windowId;
|
|
}
|
|
|
|
#undef tNoBButton
|
|
#undef tWrapAround
|
|
#undef tWindowId
|
|
|
|
void CallApprenticeFunction(void)
|
|
{
|
|
sApprenticeFunctions[gSpecialVar_0x8004]();
|
|
}
|
|
|
|
static void Script_ResetPlayerApprentice(void)
|
|
{
|
|
u8 i;
|
|
|
|
sub_819FBC8();
|
|
PLAYER_APPRENTICE.activeLvlMode = 0;
|
|
PLAYER_APPRENTICE.field_B1_1 = 0;
|
|
PLAYER_APPRENTICE.field_B1_2 = 0;
|
|
PLAYER_APPRENTICE.field_B2_0 = 0;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
PLAYER_APPRENTICE.monIds[i] = 0;
|
|
|
|
for (i = 0; i < 9; i++)
|
|
{
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_0 = 0;
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_1 = 0;
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_2 = 0;
|
|
PLAYER_APPRENTICE.field_B8[i].unk0_3 = 0;
|
|
PLAYER_APPRENTICE.field_B8[i].unk2 = 0;
|
|
}
|
|
}
|
|
|
|
static void Script_IsPlayersApprenticeActive(void)
|
|
{
|
|
if (!IsPlayersApprenticeActive())
|
|
gSpecialVar_Result = FALSE;
|
|
else
|
|
gSpecialVar_Result = TRUE;
|
|
}
|
|
|
|
static void Script_SetPlayersApprenticeLvlMode(void)
|
|
{
|
|
SetPlayersApprenticeLvlMode(gSpecialVar_0x8005);
|
|
}
|
|
|
|
static void sub_81A0978(void)
|
|
{
|
|
sub_819FBC8();
|
|
}
|
|
|
|
static void sub_81A0984(void)
|
|
{
|
|
sub_819FD64();
|
|
}
|
|
|
|
static void sub_81A0990(void)
|
|
{
|
|
PLAYER_APPRENTICE.field_B1_1++;
|
|
}
|
|
|
|
static void sub_81A09B4(void)
|
|
{
|
|
gSpecialVar_Result = PLAYER_APPRENTICE.field_B1_1;
|
|
}
|
|
|
|
static void sub_81A09D0(void)
|
|
{
|
|
s32 var = PLAYER_APPRENTICE.field_B1_1 - 3;
|
|
if (var < 0)
|
|
{
|
|
gSpecialVar_Result = FALSE;
|
|
}
|
|
else
|
|
{
|
|
if (var > 8)
|
|
gSpecialVar_Result = TRUE;
|
|
|
|
if (!PLAYER_APPRENTICE.field_B8[var].unk0_0)
|
|
gSpecialVar_Result = TRUE;
|
|
else
|
|
gSpecialVar_Result = FALSE;
|
|
}
|
|
}
|
|
|
|
static void Script_CreateApprenticeMenu(void)
|
|
{
|
|
CreateMenuWithAnswers(gSpecialVar_0x8005);
|
|
}
|
|
|
|
static void Task_WaitForPrintingMessage(u8 taskId)
|
|
{
|
|
if (!RunTextPrintersAndIsPrinter0Active())
|
|
{
|
|
DestroyTask(taskId);
|
|
if (gSpecialVar_0x8005)
|
|
ExecuteFuncAfterButtonPress(EnableBothScriptContexts);
|
|
else
|
|
EnableBothScriptContexts();
|
|
}
|
|
}
|
|
|
|
static void PrintMessage(void)
|
|
{
|
|
const u8 *string;
|
|
|
|
if (gSpecialVar_0x8006 == 6)
|
|
{
|
|
string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 7)
|
|
{
|
|
string = gUnknown_08610FF0[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 8)
|
|
{
|
|
string = gUnknown_086111B0[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 9)
|
|
{
|
|
string = gUnknown_086111B0[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 4)
|
|
{
|
|
string = gUnknown_08611230[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 5)
|
|
{
|
|
string = gUnknown_08611230[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 10)
|
|
{
|
|
string = gUnknown_08611070[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 11)
|
|
{
|
|
string = gUnknown_086112B0[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 12)
|
|
{
|
|
string = gUnknown_08611070[PLAYER_APPRENTICE.id][3];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 13)
|
|
{
|
|
string = gUnknown_08611070[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 16)
|
|
{
|
|
string = gUnknown_08611070[PLAYER_APPRENTICE.id][4];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 14)
|
|
{
|
|
string = gUnknown_08611070[PLAYER_APPRENTICE.id][2];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 15)
|
|
{
|
|
string = gUnknown_086112B0[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 0)
|
|
{
|
|
string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][0];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 1)
|
|
{
|
|
string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][1];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 2)
|
|
{
|
|
string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][2];
|
|
}
|
|
else if (gSpecialVar_0x8006 == 3)
|
|
{
|
|
string = gUnknown_08610EF0[PLAYER_APPRENTICE.id][3];
|
|
}
|
|
else
|
|
{
|
|
EnableBothScriptContexts();
|
|
return;
|
|
}
|
|
|
|
StringExpandPlaceholders(gStringVar4, string);
|
|
AddTextPrinterForMessage(TRUE);
|
|
CreateTask(Task_WaitForPrintingMessage, 1);
|
|
}
|
|
|
|
static void Script_PrintMessage(void)
|
|
{
|
|
ScriptContext2_Enable();
|
|
FreezeEventObjects();
|
|
sub_808B864();
|
|
sub_808BCF4();
|
|
NewMenuHelpers_DrawDialogueFrame(0, 1);
|
|
PrintMessage();
|
|
}
|
|
|
|
static void sub_81A0CC0(void)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B1_1 < 3)
|
|
{
|
|
gSpecialVar_Result = 2;
|
|
}
|
|
else if (PLAYER_APPRENTICE.field_B1_1 > 11)
|
|
{
|
|
gSpecialVar_Result = 5;
|
|
}
|
|
else
|
|
{
|
|
s32 id = PLAYER_APPRENTICE.field_B1_1 - 3;
|
|
switch (PLAYER_APPRENTICE.field_B8[id].unk0_0)
|
|
{
|
|
case 1:
|
|
gSpecialVar_Result = 4;
|
|
break;
|
|
case 2:
|
|
gSpecialVar_Result = 3;
|
|
break;
|
|
case 3:
|
|
gSpecialVar_Result = 1;
|
|
break;
|
|
default:
|
|
gSpecialVar_Result = 5;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_81A0D40(void)
|
|
{
|
|
if (gSpecialVar_0x8005)
|
|
{
|
|
u8 bitNo = gSpecialVar_0x8006;
|
|
PLAYER_APPRENTICE.field_B2_0 |= 1 << bitNo;
|
|
}
|
|
}
|
|
|
|
static void sub_81A0D80(void)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B1_1 >= 3)
|
|
{
|
|
u8 id = PLAYER_APPRENTICE.field_B1_1 - 3;
|
|
if (gSpecialVar_0x8005)
|
|
PLAYER_APPRENTICE.field_B8[id].unk0_3 = 1;
|
|
else
|
|
PLAYER_APPRENTICE.field_B8[id].unk0_3 = 0;
|
|
}
|
|
}
|
|
|
|
static void sub_81A0DD4(void)
|
|
{
|
|
u8 i;
|
|
u8 count = 0;
|
|
u8 id1, id2;
|
|
|
|
for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; count++, i++)
|
|
;
|
|
|
|
gUnknown_030062F0 = AllocZeroed(sizeof(*gUnknown_030062F0));
|
|
if (gSpecialVar_0x8005 == 2)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B1_1 < 3)
|
|
{
|
|
id1 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] >> 4;
|
|
gUnknown_030062F0->unk2 = gApprentices[PLAYER_APPRENTICE.id].species[id1];
|
|
|
|
id2 = PLAYER_APPRENTICE.monIds[PLAYER_APPRENTICE.field_B1_1] & 0xF;
|
|
gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2];
|
|
}
|
|
}
|
|
else if (gSpecialVar_0x8005 == 3)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B1_1 >= 3
|
|
&& PLAYER_APPRENTICE.field_B1_1 < count + 3
|
|
&& PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 2)
|
|
{
|
|
count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1;
|
|
APPRENTICE_SPECIES_ID_2(id1, count);
|
|
gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id1];
|
|
gUnknown_030062F0->unk4 = sub_81A0284(count, id1, PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_2);
|
|
gUnknown_030062F0->unk6 = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2;
|
|
}
|
|
}
|
|
else if (gSpecialVar_0x8005 == 4)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B1_1 >= 3
|
|
&& PLAYER_APPRENTICE.field_B1_1 < count + 3
|
|
&& PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_0 == 1)
|
|
{
|
|
count = PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_1;
|
|
APPRENTICE_SPECIES_ID_2(id2, count);
|
|
gUnknown_030062F0->unk0 = gApprentices[PLAYER_APPRENTICE.id].species[id2];
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_81A0FE4(void)
|
|
{
|
|
FREE_AND_SET_NULL(gUnknown_030062F0);
|
|
}
|
|
|
|
static void sub_81A0FFC(void)
|
|
{
|
|
u8 *stringDst;
|
|
u8 text[16];
|
|
u32 speciesArrayId;
|
|
|
|
switch (gSpecialVar_0x8005)
|
|
{
|
|
case 0:
|
|
stringDst = gStringVar1;
|
|
break;
|
|
case 1:
|
|
stringDst = gStringVar2;
|
|
break;
|
|
case 2:
|
|
stringDst = gStringVar3;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
switch (gSpecialVar_0x8006)
|
|
{
|
|
case APPRENTICE_BUFF_SPECIES1:
|
|
StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]);
|
|
break;
|
|
case APPRENTICE_BUFF_SPECIES2:
|
|
StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk2]);
|
|
break;
|
|
case APPRENTICE_BUFF_SPECIES3:
|
|
StringCopy(stringDst, gSpeciesNames[gUnknown_030062F0->unk0]);
|
|
break;
|
|
case APPRENTICE_BUFF_MOVE1:
|
|
StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk4]);
|
|
break;
|
|
case APPRENTICE_BUFF_MOVE2:
|
|
StringCopy(stringDst, gMoveNames[gUnknown_030062F0->unk6]);
|
|
break;
|
|
case APPRENTICE_BUFF_ITEM:
|
|
StringCopy(stringDst, ItemId_GetName(PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2));
|
|
break;
|
|
case APPRENTICE_BUFF_NAME:
|
|
TVShowConvertInternationalString(text, GetApprenticeNameInLanguage(PLAYER_APPRENTICE.id, LANGUAGE_ENGLISH), LANGUAGE_ENGLISH);
|
|
StringCopy(stringDst, text);
|
|
break;
|
|
case APPRENTICE_BUFF_LEVEL:
|
|
if (PLAYER_APPRENTICE.activeLvlMode == 1)
|
|
StringCopy(stringDst, gText_Lv50);
|
|
else
|
|
StringCopy(stringDst, gText_OpenLevel);
|
|
break;
|
|
case APPRENTICE_BUFF_EASY_CHAT:
|
|
ConvertBattleFrontierTrainerSpeechToString(gSaveBlock2Ptr->apprentices[0].easyChatWords);
|
|
StringCopy(stringDst, gStringVar4);
|
|
break;
|
|
case APPRENTICE_BUFF_SPECIES4:
|
|
if (PLAYER_APPRENTICE.field_B1_2 < 3)
|
|
{
|
|
APPRENTICE_SPECIES_ID(speciesArrayId, PLAYER_APPRENTICE.field_B1_2);
|
|
}
|
|
else
|
|
{
|
|
speciesArrayId = 0;
|
|
}
|
|
StringCopy(stringDst, gSpeciesNames[gApprentices[PLAYER_APPRENTICE.id].species[speciesArrayId]]);
|
|
break;
|
|
}
|
|
}
|
|
|
|
static void sub_81A11F8(void)
|
|
{
|
|
PLAYER_APPRENTICE.field_B1_2 = gSpecialVar_0x8005;
|
|
}
|
|
|
|
static void sub_81A1218(void)
|
|
{
|
|
sub_81AAC28();
|
|
}
|
|
|
|
#ifdef NONMATCHING
|
|
static void sub_81A1224(void)
|
|
{
|
|
u8 count;
|
|
u8 i, j;
|
|
|
|
if (PLAYER_APPRENTICE.field_B1_1 < 3)
|
|
return;
|
|
|
|
count = 0;
|
|
for (j = 0; j < 9 && PLAYER_APPRENTICE.field_B8[j].unk0_0; count++, j++)
|
|
;
|
|
|
|
for (i = 0; i < count && i < PLAYER_APPRENTICE.field_B1_1 - 3; i++)
|
|
{
|
|
if (PLAYER_APPRENTICE.field_B8[i].unk0_0 == 1
|
|
&& PLAYER_APPRENTICE.field_B8[i].unk0_3
|
|
&& PLAYER_APPRENTICE.field_B8[i].unk2 == gSpecialVar_0x8005)
|
|
{
|
|
PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 0;
|
|
PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005;
|
|
gSpecialVar_Result = i;
|
|
return;
|
|
}
|
|
}
|
|
|
|
PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk0_3 = 1;
|
|
PLAYER_APPRENTICE.field_B8[PLAYER_APPRENTICE.field_B1_1 - 3].unk2 = gSpecialVar_0x8005;
|
|
gSpecialVar_Result = 1;
|
|
}
|
|
#else
|
|
NAKED
|
|
static void sub_81A1224(void)
|
|
{
|
|
asm_unified("\n\
|
|
push {r4-r7,lr}\n\
|
|
mov r7, r9\n\
|
|
mov r6, r8\n\
|
|
push {r6,r7}\n\
|
|
ldr r1, =gSaveBlock2Ptr\n\
|
|
ldr r3, [r1]\n\
|
|
adds r0, r3, 0\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
adds r7, r1, 0\n\
|
|
cmp r0, 0x2\n\
|
|
bhi _081A1242\n\
|
|
b _081A1362\n\
|
|
_081A1242:\n\
|
|
movs r5, 0\n\
|
|
movs r2, 0\n\
|
|
adds r0, r3, 0\n\
|
|
adds r0, 0xB8\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 30\n\
|
|
ldr r1, =gSpecialVar_0x8005\n\
|
|
mov r12, r1\n\
|
|
ldr r1, =gSpecialVar_Result\n\
|
|
mov r8, r1\n\
|
|
cmp r0, 0\n\
|
|
beq _081A127C\n\
|
|
adds r3, r7, 0\n\
|
|
_081A125C:\n\
|
|
adds r0, r5, 0x1\n\
|
|
lsls r0, 24\n\
|
|
lsrs r5, r0, 24\n\
|
|
adds r0, r2, 0x1\n\
|
|
lsls r0, 24\n\
|
|
lsrs r2, r0, 24\n\
|
|
cmp r2, 0x8\n\
|
|
bhi _081A127C\n\
|
|
ldr r0, [r3]\n\
|
|
lsls r1, r2, 2\n\
|
|
adds r0, r1\n\
|
|
adds r0, 0xB8\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 30\n\
|
|
cmp r0, 0\n\
|
|
bne _081A125C\n\
|
|
_081A127C:\n\
|
|
movs r4, 0\n\
|
|
cmp r4, r5\n\
|
|
bcs _081A1322\n\
|
|
ldr r0, [r7]\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
cmp r4, r0\n\
|
|
bge _081A1322\n\
|
|
adds r6, r7, 0\n\
|
|
mov r9, r4\n\
|
|
_081A1296:\n\
|
|
ldr r3, [r6]\n\
|
|
lsls r0, r4, 2\n\
|
|
adds r2, r3, r0\n\
|
|
adds r0, r2, 0\n\
|
|
adds r0, 0xB8\n\
|
|
ldrb r1, [r0]\n\
|
|
lsls r0, r1, 30\n\
|
|
lsrs r0, 30\n\
|
|
cmp r0, 0x1\n\
|
|
bne _081A1308\n\
|
|
lsrs r0, r1, 6\n\
|
|
cmp r0, 0\n\
|
|
beq _081A1308\n\
|
|
adds r0, r2, 0\n\
|
|
adds r0, 0xBA\n\
|
|
ldrh r0, [r0]\n\
|
|
mov r2, r12\n\
|
|
ldrh r2, [r2]\n\
|
|
cmp r0, r2\n\
|
|
bne _081A1308\n\
|
|
adds r0, r3, 0\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
lsls r0, 2\n\
|
|
adds r0, r3, r0\n\
|
|
adds r0, 0xB8\n\
|
|
ldrb r2, [r0]\n\
|
|
movs r1, 0x3F\n\
|
|
ands r1, r2\n\
|
|
strb r1, [r0]\n\
|
|
ldr r1, [r6]\n\
|
|
adds r0, r1, 0\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
lsls r0, 2\n\
|
|
adds r1, r0\n\
|
|
mov r2, r12\n\
|
|
ldrh r0, [r2]\n\
|
|
adds r1, 0xBA\n\
|
|
strh r0, [r1]\n\
|
|
mov r1, r9\n\
|
|
mov r0, r8\n\
|
|
strh r1, [r0]\n\
|
|
b _081A1362\n\
|
|
.pool\n\
|
|
_081A1308:\n\
|
|
adds r0, r4, 0x1\n\
|
|
lsls r0, 24\n\
|
|
lsrs r4, r0, 24\n\
|
|
cmp r4, r5\n\
|
|
bcs _081A1322\n\
|
|
ldr r0, [r6]\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
cmp r4, r0\n\
|
|
blt _081A1296\n\
|
|
_081A1322:\n\
|
|
ldr r2, [r7]\n\
|
|
adds r0, r2, 0\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
lsls r0, 2\n\
|
|
adds r2, r0\n\
|
|
adds r2, 0xB8\n\
|
|
ldrb r1, [r2]\n\
|
|
movs r0, 0x3F\n\
|
|
ands r0, r1\n\
|
|
movs r1, 0x40\n\
|
|
orrs r0, r1\n\
|
|
strb r0, [r2]\n\
|
|
ldr r1, [r7]\n\
|
|
adds r0, r1, 0\n\
|
|
adds r0, 0xB1\n\
|
|
ldrb r0, [r0]\n\
|
|
lsls r0, 26\n\
|
|
lsrs r0, 28\n\
|
|
subs r0, 0x3\n\
|
|
lsls r0, 2\n\
|
|
adds r1, r0\n\
|
|
mov r2, r12\n\
|
|
ldrh r0, [r2]\n\
|
|
adds r1, 0xBA\n\
|
|
strh r0, [r1]\n\
|
|
movs r0, 0x1\n\
|
|
mov r1, r8\n\
|
|
strh r0, [r1]\n\
|
|
_081A1362:\n\
|
|
pop {r3,r4}\n\
|
|
mov r8, r3\n\
|
|
mov r9, r4\n\
|
|
pop {r4-r7}\n\
|
|
pop {r0}\n\
|
|
bx r0\n\
|
|
");
|
|
}
|
|
#endif // NONMATCHING
|
|
|
|
static void sub_81A1370(void)
|
|
{
|
|
s32 i;
|
|
s32 r10;
|
|
s32 r9;
|
|
|
|
if (gSaveBlock2Ptr->apprentices[0].playerName[0] == EOS)
|
|
return;
|
|
|
|
for (i = 0; i < 3; i++)
|
|
{
|
|
if (gSaveBlock2Ptr->apprentices[i + 1].playerName[0] == EOS)
|
|
{
|
|
gSaveBlock2Ptr->apprentices[i + 1] = gSaveBlock2Ptr->apprentices[0];
|
|
return;
|
|
}
|
|
}
|
|
|
|
r10 = 0xFFFF;
|
|
r9 = -1;
|
|
for (i = 1; i < 4; i++)
|
|
{
|
|
if (ReadUnalignedWord(gSaveBlock2Ptr->apprentices[i].playerId) == ReadUnalignedWord(gSaveBlock2Ptr->playerTrainerId)
|
|
&& gSaveBlock2Ptr->apprentices[i].number < r10)
|
|
{
|
|
r10 = gSaveBlock2Ptr->apprentices[i].number;
|
|
r9 = i;
|
|
}
|
|
}
|
|
|
|
if (r9 > 0)
|
|
gSaveBlock2Ptr->apprentices[r9] = gSaveBlock2Ptr->apprentices[0];
|
|
}
|
|
|
|
static void sub_81A1438(void)
|
|
{
|
|
u8 i;
|
|
|
|
gSaveBlock2Ptr->apprentices[0].id = PLAYER_APPRENTICE.id;
|
|
gSaveBlock2Ptr->apprentices[0].lvlMode = PLAYER_APPRENTICE.activeLvlMode;
|
|
|
|
for (i = 0; i < 9 && PLAYER_APPRENTICE.field_B8[i].unk0_0; i++)
|
|
;
|
|
|
|
gSaveBlock2Ptr->apprentices[0].field_1 = i;
|
|
if (gSaveBlock2Ptr->apprentices[0].number < 255)
|
|
gSaveBlock2Ptr->apprentices[0].number++;
|
|
|
|
sub_81A0390(gSaveBlock2Ptr->apprentices[0].field_1);
|
|
for (i = 0; i < 4; i++)
|
|
gSaveBlock2Ptr->apprentices[0].playerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
|
|
|
|
StringCopy(gSaveBlock2Ptr->apprentices[0].playerName, gSaveBlock2Ptr->playerName);
|
|
gSaveBlock2Ptr->apprentices[0].language = gGameLanguage;
|
|
sub_8165AE8(&gSaveBlock2Ptr->apprentices[0]);
|
|
}
|
|
|
|
static void sub_81A150C(void)
|
|
{
|
|
u8 i;
|
|
u8 mapObjectGfxId;
|
|
u8 class = gApprentices[gSaveBlock2Ptr->apprentices[0].id].facilityClass;
|
|
|
|
for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++)
|
|
;
|
|
|
|
if (i != 30)
|
|
{
|
|
mapObjectGfxId = gUnknown_085DCF0E[i];
|
|
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++)
|
|
;
|
|
|
|
if (i != 20)
|
|
{
|
|
mapObjectGfxId = gUnknown_085DCF2C[i];
|
|
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_81A15A4(void)
|
|
{
|
|
u8 i;
|
|
u8 mapObjectGfxId;
|
|
u8 class = gApprentices[PLAYER_APPRENTICE.id].facilityClass;
|
|
|
|
for (i = 0; i < 30 && gUnknown_085DCEDC[i] != class; i++)
|
|
;
|
|
|
|
if (i != 30)
|
|
{
|
|
mapObjectGfxId = gUnknown_085DCF0E[i];
|
|
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
|
}
|
|
else
|
|
{
|
|
for (i = 0; i < 20 && gUnknown_085DCEFA[i] != class; i++)
|
|
;
|
|
|
|
if (i != 20)
|
|
{
|
|
mapObjectGfxId = gUnknown_085DCF2C[i];
|
|
VarSet(VAR_OBJ_GFX_ID_0, mapObjectGfxId);
|
|
}
|
|
}
|
|
}
|
|
|
|
static void sub_81A1638(void)
|
|
{
|
|
gSpecialVar_0x8004 = 1;
|
|
}
|
|
|
|
static void sub_81A1644(void)
|
|
{
|
|
gSpecialVar_0x8004 = 1;
|
|
}
|
|
|
|
const u8 *GetApprenticeNameInLanguage(u32 apprenticeId, s32 language)
|
|
{
|
|
const struct ApprenticeTrainer *apprentice = &gApprentices[apprenticeId];
|
|
|
|
switch (language)
|
|
{
|
|
case LANGUAGE_JAPANESE:
|
|
return apprentice->name[0];
|
|
case LANGUAGE_ENGLISH:
|
|
return apprentice->name[1];
|
|
case LANGUAGE_FRENCH:
|
|
return apprentice->name[2];
|
|
case LANGUAGE_ITALIAN:
|
|
return apprentice->name[3];
|
|
case LANGUAGE_GERMAN:
|
|
return apprentice->name[4];
|
|
case LANGUAGE_SPANISH:
|
|
default:
|
|
return apprentice->name[5];
|
|
}
|
|
}
|
|
|
|
static void sub_81A16B4(u8 taskId)
|
|
{
|
|
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
|
|
SwitchTaskToFollowupFunc(taskId);
|
|
}
|
|
|
|
static void Task_ExecuteFuncAfterButtonPress(u8 taskId)
|
|
{
|
|
if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
|
|
{
|
|
gUnknown_030062F4 = (void*)(u32)(((u16)gTasks[taskId].data[0] | (gTasks[taskId].data[1] << 0x10)));
|
|
gUnknown_030062F4();
|
|
DestroyTask(taskId);
|
|
}
|
|
}
|
|
|
|
static void ExecuteFuncAfterButtonPress(void (*func)(void))
|
|
{
|
|
u8 taskId = CreateTask(Task_ExecuteFuncAfterButtonPress, 1);
|
|
gTasks[taskId].data[0] = (u32)(func);
|
|
gTasks[taskId].data[1] = (u32)(func) >> 16;
|
|
}
|
|
|
|
static void sub_81A175C(TaskFunc taskFunc)
|
|
{
|
|
u8 taskId = CreateTask(sub_81A16B4, 1);
|
|
SetTaskFuncWithFollowupFunc(taskId, sub_81A16B4, taskFunc);
|
|
}
|