Merge pull request #638 from GriffinRichards/doc-ql
Document some quest log
This commit is contained in:
@@ -1 +1 @@
|
|||||||
gInputToStoreInQuestLogMaybe
|
gFieldInputRecord
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
gQuestLogPlaybackState
|
gQuestLogPlaybackState
|
||||||
sNumEventsInLogEntry
|
sMaxActionsInScene
|
||||||
gQuestLogFieldInput
|
gQuestLogFieldInput
|
||||||
sCurQuestLogEntry
|
sCurSceneActions
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include "constants/easy_chat.h"
|
#include "constants/easy_chat.h"
|
||||||
#include "constants/trainer_card.h"
|
#include "constants/trainer_card.h"
|
||||||
#include "constants/help_system.h"
|
#include "constants/help_system.h"
|
||||||
|
#include "constants/trainer_fan_club.h"
|
||||||
#include "constants/mystery_gift.h"
|
#include "constants/mystery_gift.h"
|
||||||
.include "asm/macros.inc"
|
.include "asm/macros.inc"
|
||||||
.include "asm/macros/event.inc"
|
.include "asm/macros/event.inc"
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 142 B |
@@ -1 +0,0 @@
|
|||||||
换换烫烫��������������������������������������������������������������������������������烫烫换换
|
|
||||||
+1
-1
@@ -449,7 +449,7 @@ struct BattleStruct
|
|||||||
u16 castformPalette[MAX_BATTLERS_COUNT][16];
|
u16 castformPalette[MAX_BATTLERS_COUNT][16];
|
||||||
u8 wishPerishSongState;
|
u8 wishPerishSongState;
|
||||||
u8 wishPerishSongBattlerId;
|
u8 wishPerishSongBattlerId;
|
||||||
u8 field_182;
|
u8 lastAttackerToFaintOpponent;
|
||||||
// align 4
|
// align 4
|
||||||
union {
|
union {
|
||||||
struct LinkBattlerHeader linkBattlerHeader;
|
struct LinkBattlerHeader linkBattlerHeader;
|
||||||
|
|||||||
@@ -5,6 +5,12 @@
|
|||||||
#define QL_STATE_PLAYBACK 2
|
#define QL_STATE_PLAYBACK 2
|
||||||
#define QL_STATE_PLAYBACK_LAST 3
|
#define QL_STATE_PLAYBACK_LAST 3
|
||||||
|
|
||||||
|
#define QL_PLAYBACK_STATE_STOPPED 0
|
||||||
|
#define QL_PLAYBACK_STATE_RUNNING 1
|
||||||
|
#define QL_PLAYBACK_STATE_RECORDING 2
|
||||||
|
#define QL_PLAYBACK_STATE_ACTION_END 3
|
||||||
|
#define QL_PLAYBACK_STATE_RECORDING_NO_DELAY 4
|
||||||
|
|
||||||
#define QL_START_NORMAL 1
|
#define QL_START_NORMAL 1
|
||||||
#define QL_START_WARP 2
|
#define QL_START_WARP 2
|
||||||
|
|
||||||
@@ -16,9 +22,9 @@
|
|||||||
|
|
||||||
#define QL_IS_PLAYBACK_STATE (gQuestLogState == QL_STATE_PLAYBACK || gQuestLogState == QL_STATE_PLAYBACK_LAST)
|
#define QL_IS_PLAYBACK_STATE (gQuestLogState == QL_STATE_PLAYBACK || gQuestLogState == QL_STATE_PLAYBACK_LAST)
|
||||||
|
|
||||||
#define QL_EVENT_0 0 // Null
|
#define QL_EVENT_INPUT 0 // Null
|
||||||
#define QL_EVENT_1 1 // Null
|
#define QL_EVENT_GFX_CHANGE 1 // Null
|
||||||
#define QL_EVENT_2 2 // Null
|
#define QL_EVENT_MOVEMENT 2 // Null
|
||||||
#define QL_EVENT_SWITCHED_PARTY_ORDER 3
|
#define QL_EVENT_SWITCHED_PARTY_ORDER 3
|
||||||
#define QL_EVENT_USED_ITEM 4
|
#define QL_EVENT_USED_ITEM 4
|
||||||
#define QL_EVENT_GAVE_HELD_ITEM 5
|
#define QL_EVENT_GAVE_HELD_ITEM 5
|
||||||
@@ -55,12 +61,12 @@
|
|||||||
#define QL_EVENT_USED_FIELD_MOVE 36
|
#define QL_EVENT_USED_FIELD_MOVE 36
|
||||||
#define QL_EVENT_BOUGHT_ITEM 37
|
#define QL_EVENT_BOUGHT_ITEM 37
|
||||||
#define QL_EVENT_SOLD_ITEM 38
|
#define QL_EVENT_SOLD_ITEM 38
|
||||||
#define QL_EVENT_39 39 // Null
|
#define QL_EVENT_SCENE_END 39 // Null
|
||||||
#define QL_EVENT_OBTAINED_ITEM 40
|
#define QL_EVENT_OBTAINED_STORY_ITEM 40
|
||||||
#define QL_EVENT_41 41 // Null
|
#define QL_EVENT_WAIT 41 // Null
|
||||||
#define QL_EVENT_ARRIVED 42
|
#define QL_EVENT_ARRIVED 42
|
||||||
|
|
||||||
#define QL_EVENT_USED_POKEMART QL_EVENT_BOUGHT_ITEM - 1 // Used as a start pos for QL_EVENT_BOUGHT_ITEM / QL_EVENT_SOLD_ITEM
|
#define QL_EVENT_USED_POKEMART (QL_EVENT_BOUGHT_ITEM - 1) // Used as a start pos for QL_EVENT_BOUGHT_ITEM / QL_EVENT_SOLD_ITEM
|
||||||
|
|
||||||
#define IS_LINK_QL_EVENT(event)((event) >= QL_EVENT_LINK_TRADED && (event) <= QL_EVENT_LINK_BATTLED_UNION)
|
#define IS_LINK_QL_EVENT(event)((event) >= QL_EVENT_LINK_TRADED && (event) <= QL_EVENT_LINK_BATTLED_UNION)
|
||||||
#define IS_VALID_QL_EVENT(event)((event) >= QL_EVENT_SWITCHED_PARTY_ORDER && (event) <= QL_EVENT_ARRIVED)
|
#define IS_VALID_QL_EVENT(event)((event) >= QL_EVENT_SWITCHED_PARTY_ORDER && (event) <= QL_EVENT_ARRIVED)
|
||||||
@@ -140,16 +146,11 @@
|
|||||||
#define QL_INPUT_A 9
|
#define QL_INPUT_A 9
|
||||||
#define QL_INPUT_B 10
|
#define QL_INPUT_B 10
|
||||||
|
|
||||||
|
#define QL_ACTION_MOVEMENT 0
|
||||||
#define FANCLUB_MEMBER1 0
|
#define QL_ACTION_GFX_CHANGE 1
|
||||||
#define FANCLUB_MEMBER2 1
|
#define QL_ACTION_INPUT 2
|
||||||
#define FANCLUB_MEMBER3 2
|
#define QL_ACTION_EMPTY 3
|
||||||
#define FANCLUB_MEMBER4 3
|
#define QL_ACTION_WAIT 254
|
||||||
#define FANCLUB_MEMBER5 4
|
#define QL_ACTION_SCENE_END 255
|
||||||
#define FANCLUB_MEMBER6 5
|
|
||||||
#define FANCLUB_MEMBER7 6
|
|
||||||
#define FANCLUB_MEMBER8 7
|
|
||||||
|
|
||||||
#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
|
|
||||||
|
|
||||||
#endif //GUARD_CONSTANTS_QUEST_LOG_H
|
#endif //GUARD_CONSTANTS_QUEST_LOG_H
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#ifndef GUARD_CONSTANTS_TRAINER_FAN_CLUB_H
|
||||||
|
#define GUARD_CONSTANTS_TRAINER_FAN_CLUB_H
|
||||||
|
|
||||||
|
#define FANCLUB_MEMBER1 0
|
||||||
|
#define FANCLUB_MEMBER2 1
|
||||||
|
#define FANCLUB_MEMBER3 2
|
||||||
|
#define FANCLUB_MEMBER4 3
|
||||||
|
#define FANCLUB_MEMBER5 4
|
||||||
|
#define FANCLUB_MEMBER6 5
|
||||||
|
#define FANCLUB_MEMBER7 6
|
||||||
|
#define FANCLUB_MEMBER8 7
|
||||||
|
|
||||||
|
#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
|
||||||
|
|
||||||
|
#endif //GUARD_CONSTANTS_TRAINER_FAN_CLUB_H
|
||||||
@@ -126,7 +126,7 @@ void MoveCoords(u8, s16 *, s16 *);
|
|||||||
bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *);
|
bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *);
|
||||||
u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *);
|
u8 ObjectEventClearHeldMovementIfFinished(struct ObjectEvent *);
|
||||||
u8 GetObjectEventIdByPosition(u16 x, u16 y, u8 elevation);
|
u8 GetObjectEventIdByPosition(u16 x, u16 y, u8 elevation);
|
||||||
void UpdateQuestLogObjectEventCurrentMovement(struct ObjectEvent *, struct Sprite *);
|
void QL_UpdateObjectEventCurrentMovement(struct ObjectEvent *, struct Sprite *);
|
||||||
bool8 ObjectEventSetHeldMovement(struct ObjectEvent *, u8);
|
bool8 ObjectEventSetHeldMovement(struct ObjectEvent *, u8);
|
||||||
void ShiftStillObjectEventCoords(struct ObjectEvent *);
|
void ShiftStillObjectEventCoords(struct ObjectEvent *);
|
||||||
void OverrideMovementTypeForObjectEvent(const struct ObjectEvent *, u8);
|
void OverrideMovementTypeForObjectEvent(const struct ObjectEvent *, u8);
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ struct FieldInput
|
|||||||
u8 dpadDirection;
|
u8 dpadDirection;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct FieldInput gInputToStoreInQuestLogMaybe;
|
extern struct FieldInput gFieldInputRecord;
|
||||||
|
|
||||||
void RestartWildEncounterImmunitySteps(void);
|
void RestartWildEncounterImmunitySteps(void);
|
||||||
void ClearPoisonStepCounter(void);
|
void ClearPoisonStepCounter(void);
|
||||||
|
|||||||
+13
-14
@@ -550,7 +550,7 @@ struct RecordMixingDayCareMail
|
|||||||
bool16 holdsItem[DAYCARE_MON_COUNT];
|
bool16 holdsItem[DAYCARE_MON_COUNT];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct QuestLogNPCData
|
struct QuestLogObjectEventTemplate
|
||||||
{
|
{
|
||||||
u32 x:8;
|
u32 x:8;
|
||||||
u32 negx:1;
|
u32 negx:1;
|
||||||
@@ -579,12 +579,12 @@ struct QuestLogObjectEvent
|
|||||||
/*0x01*/ u8 spriteAffineAnimPausedBackup:1;
|
/*0x01*/ u8 spriteAffineAnimPausedBackup:1;
|
||||||
/*0x01*/ u8 disableJumpLandingGroundEffect:1;
|
/*0x01*/ u8 disableJumpLandingGroundEffect:1;
|
||||||
/*0x02*/ u8 fixedPriority:1;
|
/*0x02*/ u8 fixedPriority:1;
|
||||||
/*0x02*/ u8 mapobj_unk_18:4;
|
/*0x02*/ u8 facingDirection:4;
|
||||||
/*0x02*/ u8 unused_02_5:3;
|
/*0x02*/ u8 unused:3;
|
||||||
/*0x03*/ u8 mapobj_unk_0B_0:4;
|
/*0x03*/ u8 currentElevation:4;
|
||||||
/*0x03*/ u8 elevation:4;
|
/*0x03*/ u8 previousElevation:4;
|
||||||
/*0x04*/ u8 graphicsId;
|
/*0x04*/ u8 graphicsId;
|
||||||
/*0x05*/ u8 animPattern;
|
/*0x05*/ u8 movementType;
|
||||||
/*0x06*/ u8 trainerType;
|
/*0x06*/ u8 trainerType;
|
||||||
/*0x07*/ u8 localId;
|
/*0x07*/ u8 localId;
|
||||||
/*0x08*/ u8 mapNum;
|
/*0x08*/ u8 mapNum;
|
||||||
@@ -597,21 +597,20 @@ struct QuestLogObjectEvent
|
|||||||
/*0x11*/ u8 animId;
|
/*0x11*/ u8 animId;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct QuestLog
|
// This represents all the data needed to display a single scene for the "Quest Log" when the player resumes playing.
|
||||||
|
//
|
||||||
|
struct QuestLogScene
|
||||||
{
|
{
|
||||||
/*0x0000*/ u8 startType;
|
/*0x0000*/ u8 startType; // QL_START_NORMAL / QL_START_WARP
|
||||||
/*0x0001*/ u8 mapGroup;
|
/*0x0001*/ u8 mapGroup;
|
||||||
/*0x0002*/ u8 mapNum;
|
/*0x0002*/ u8 mapNum;
|
||||||
/*0x0003*/ u8 warpId;
|
/*0x0003*/ u8 warpId;
|
||||||
/*0x0004*/ s16 x;
|
/*0x0004*/ s16 x;
|
||||||
/*0x0006*/ s16 y;
|
/*0x0006*/ s16 y;
|
||||||
/*0x0008*/ struct QuestLogObjectEvent unk_008[OBJECT_EVENTS_COUNT];
|
/*0x0008*/ struct QuestLogObjectEvent objectEvents[OBJECT_EVENTS_COUNT];
|
||||||
|
|
||||||
// These arrays hold the game state for
|
|
||||||
// playing back the quest log
|
|
||||||
/*0x0148*/ u8 flags[NUM_FLAG_BYTES];
|
/*0x0148*/ u8 flags[NUM_FLAG_BYTES];
|
||||||
/*0x02c8*/ u16 vars[VARS_COUNT];
|
/*0x02c8*/ u16 vars[VARS_COUNT];
|
||||||
/*0x0468*/ struct QuestLogNPCData npcData[64];
|
/*0x0468*/ struct QuestLogObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT];
|
||||||
/*0x0568*/ u16 script[128];
|
/*0x0568*/ u16 script[128];
|
||||||
/*0x0668*/ u16 end[0];
|
/*0x0668*/ u16 end[0];
|
||||||
};
|
};
|
||||||
@@ -780,7 +779,7 @@ struct SaveBlock1
|
|||||||
/*0x0EE0*/ u8 flags[NUM_FLAG_BYTES];
|
/*0x0EE0*/ u8 flags[NUM_FLAG_BYTES];
|
||||||
/*0x1000*/ u16 vars[VARS_COUNT];
|
/*0x1000*/ u16 vars[VARS_COUNT];
|
||||||
/*0x1200*/ u32 gameStats[NUM_GAME_STATS];
|
/*0x1200*/ u32 gameStats[NUM_GAME_STATS];
|
||||||
/*0x1300*/ struct QuestLog questLog[QUEST_LOG_SCENE_COUNT];
|
/*0x1300*/ struct QuestLogScene questLog[QUEST_LOG_SCENE_COUNT];
|
||||||
/*0x2CA0*/ u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
|
/*0x2CA0*/ u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||||
/*0x2CAC*/ u16 easyChatBattleStart[EASY_CHAT_BATTLE_WORDS_COUNT];
|
/*0x2CAC*/ u16 easyChatBattleStart[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||||
/*0x2CB8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT];
|
/*0x2CB8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT];
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
#include "pokemon_storage_system.h"
|
#include "pokemon_storage_system.h"
|
||||||
#include "mon_markings.h"
|
#include "mon_markings.h"
|
||||||
|
#include "quest_log.h"
|
||||||
|
|
||||||
// The maximum number of Pokémon icons that can appear on-screen.
|
// The maximum number of Pokémon icons that can appear on-screen.
|
||||||
// By default the limit is 40 (though in practice only 37 can be).
|
// By default the limit is 40 (though in practice only 37 can be).
|
||||||
@@ -273,14 +274,6 @@ struct PokeStorageItemIcon
|
|||||||
u8 active;
|
u8 active;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PokeStorageQuestLogData
|
|
||||||
{
|
|
||||||
u16 species1;
|
|
||||||
u16 species2;
|
|
||||||
u8 box1;
|
|
||||||
u8 box2;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PokemonStorageSystemData
|
struct PokemonStorageSystemData
|
||||||
{
|
{
|
||||||
u8 state;
|
u8 state;
|
||||||
@@ -426,7 +419,7 @@ struct PokemonStorageSystemData
|
|||||||
struct PokeStorageItemIcon itemIcons[MAX_ITEM_ICONS];
|
struct PokeStorageItemIcon itemIcons[MAX_ITEM_ICONS];
|
||||||
u16 movingItemId;
|
u16 movingItemId;
|
||||||
u16 itemInfoWindowOffset;
|
u16 itemInfoWindowOffset;
|
||||||
struct PokeStorageQuestLogData pokeStorageQuestLogData;
|
struct QuestLogEvent_MovedBoxMon questLogData;
|
||||||
u16 unusedField2;
|
u16 unusedField2;
|
||||||
u16 displayMonPalOffset;
|
u16 displayMonPalOffset;
|
||||||
u16 *displayMonTilePtr;
|
u16 *displayMonTilePtr;
|
||||||
|
|||||||
+188
-49
@@ -3,63 +3,202 @@
|
|||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "quest_log_battle.h"
|
#include "quest_log_battle.h"
|
||||||
#include "constants/quest_log.h"
|
|
||||||
#include "field_control_avatar.h"
|
#include "field_control_avatar.h"
|
||||||
|
#include "constants/quest_log.h"
|
||||||
|
#include "constants/battle.h"
|
||||||
|
|
||||||
|
// Layout of Quest Log script commands
|
||||||
|
#define QL_CMD_EVENT_MASK 0x0FFF
|
||||||
|
#define QL_CMD_COUNT_SHIFT 12
|
||||||
|
#define QL_CMD_COUNT_MASK (0xF << QL_CMD_COUNT_SHIFT)
|
||||||
|
|
||||||
// Parameter to QuestLog_OnEscalatorWarp
|
// Parameter to QuestLog_OnEscalatorWarp
|
||||||
#define QL_ESCALATOR_OUT 1
|
#define QL_ESCALATOR_OUT 1
|
||||||
#define QL_ESCALATOR_IN 2
|
#define QL_ESCALATOR_IN 2
|
||||||
|
|
||||||
struct QuestLogEntry
|
struct QuestLogAction
|
||||||
{
|
{
|
||||||
// When command == 2, these fields have different meanings
|
union {
|
||||||
u8 localId; // cmd == 2: Pressed A/B, checked wild, held direction, took step
|
struct {
|
||||||
u8 mapNum; // cmd == 2: Always set to 0
|
u8 localId;
|
||||||
u8 mapGroup; // cmd == 2: Dpad direction
|
u8 mapNum;
|
||||||
u8 animId; // cmd == 2: Always set to 0
|
u8 mapGroup;
|
||||||
|
u8 movementActionId;
|
||||||
|
} a; // Data when type == 0
|
||||||
|
struct {
|
||||||
|
u8 localId;
|
||||||
|
u8 mapNum;
|
||||||
|
u8 mapGroup;
|
||||||
|
u8 gfxState;
|
||||||
|
} b; // Data when type == 1
|
||||||
|
u8 fieldInput[4]; // Data when type == 2
|
||||||
|
u8 raw[4];
|
||||||
|
} data;
|
||||||
u16 duration;
|
u16 duration;
|
||||||
u8 command;
|
u8 type;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct UnkStruct_203B044
|
struct QuestLogRepeatEventTracker
|
||||||
{
|
{
|
||||||
u8 id;
|
u8 id;
|
||||||
u8 unk_1;
|
u8 numRepeats;
|
||||||
u16 unk_2;
|
u16 counter;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Event data structs
|
||||||
|
|
||||||
|
// QL_EVENT_SWITCHED_PARTY_ORDER
|
||||||
|
struct QuestLogEvent_SwitchedPartyOrder
|
||||||
|
{
|
||||||
|
u16 species1;
|
||||||
|
u16 species2;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_USED_ITEM
|
||||||
|
// QL_EVENT_GAVE_HELD_ITEM
|
||||||
|
// QL_EVENT_GAVE_HELD_ITEM_BAG
|
||||||
|
// QL_EVENT_GAVE_HELD_ITEM_PC
|
||||||
|
// QL_EVENT_TOOK_HELD_ITEM
|
||||||
|
// QL_EVENT_DEPOSITED_ITEM_PC
|
||||||
|
// QL_EVENT_WITHDREW_ITEM_PC
|
||||||
|
struct QuestLogEvent_Item
|
||||||
|
{
|
||||||
|
u16 itemId;
|
||||||
|
u16 unused;
|
||||||
|
u16 species;
|
||||||
|
u16 itemParam;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_SWAPPED_HELD_ITEM
|
||||||
|
// QL_EVENT_SWAPPED_HELD_ITEM_PC
|
||||||
|
struct QuestLogEvent_SwappedHeldItem
|
||||||
|
{
|
||||||
|
u16 takenItemId;
|
||||||
|
u16 givenItemId;
|
||||||
|
u16 species;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_LINK_TRADED
|
||||||
|
// QL_EVENT_LINK_TRADED_UNION
|
||||||
|
struct QuestLogEvent_Traded
|
||||||
|
{
|
||||||
|
u16 speciesSent;
|
||||||
|
u16 speciesReceived;
|
||||||
|
u8 partnerName[PLAYER_NAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_LINK_BATTLED_SINGLE
|
||||||
|
// QL_EVENT_LINK_BATTLED_DOUBLE
|
||||||
|
// QL_EVENT_LINK_BATTLED_MULTI
|
||||||
|
// QL_EVENT_LINK_BATTLED_UNION
|
||||||
|
struct QuestLogEvent_LinkBattle
|
||||||
|
{
|
||||||
|
u8 outcome;
|
||||||
|
u8 playerNames[MAX_BATTLERS_COUNT - 1][PLAYER_NAME_LENGTH];
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_SWITCHED_MONS_BETWEEN_BOXES
|
||||||
|
// QL_EVENT_SWITCHED_MONS_WITHIN_BOX
|
||||||
|
// QL_EVENT_SWITCHED_PARTY_MON_FOR_PC_MON
|
||||||
|
// QL_EVENT_MOVED_MON_BETWEEN_BOXES
|
||||||
|
// QL_EVENT_MOVED_MON_WITHIN_BOX
|
||||||
|
// QL_EVENT_WITHDREW_MON_PC
|
||||||
|
// QL_EVENT_DEPOSITED_MON_PC
|
||||||
|
// QL_EVENT_SWITCHED_MULTIPLE_MONS
|
||||||
|
struct QuestLogEvent_MovedBoxMon
|
||||||
|
{
|
||||||
|
u16 species1;
|
||||||
|
u16 species2;
|
||||||
|
u8 box1;
|
||||||
|
u8 box2;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_DEFEATED_TRAINER
|
||||||
|
// QL_EVENT_DEFEATED_GYM_LEADER
|
||||||
|
// QL_EVENT_DEFEATED_E4_MEMBER
|
||||||
|
// QL_EVENT_DEFEATED_CHAMPION
|
||||||
|
struct QuestLogEvent_TrainerBattle
|
||||||
|
{
|
||||||
|
u16 trainerId;
|
||||||
|
u16 speciesOpponent;
|
||||||
|
u16 speciesPlayer;
|
||||||
|
u8 hpFractionId;
|
||||||
|
u8 mapSec;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_DEFEATED_WILD_MON
|
||||||
|
struct QuestLogEvent_WildBattle
|
||||||
|
{
|
||||||
|
u16 defeatedSpecies;
|
||||||
|
u16 caughtSpecies;
|
||||||
|
u8 mapSec;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_DEPARTED
|
||||||
|
struct QuestLogEvent_Departed
|
||||||
|
{
|
||||||
|
u8 mapSec;
|
||||||
|
u8 locationId;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_USED_FIELD_MOVE
|
||||||
|
struct QuestLogEvent_FieldMove
|
||||||
|
{
|
||||||
|
u16 species;
|
||||||
|
u8 fieldMove;
|
||||||
|
u8 mapSec;
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_BOUGHT_ITEM
|
||||||
|
// QL_EVENT_SOLD_ITEM
|
||||||
|
struct QuestLogEvent_Shop
|
||||||
|
{
|
||||||
|
u32 totalMoney; // Total amount of money spent buying or earned selling
|
||||||
|
u16 lastItemId;
|
||||||
|
u16 itemQuantity; // Total number of items bought or sold
|
||||||
|
u8 mapSec;
|
||||||
|
bool8 hasMultipleTransactions;
|
||||||
|
u8 logEventId; // Either 0 (empty), 1 (bought) or 2 (sold)
|
||||||
|
};
|
||||||
|
|
||||||
|
// QL_EVENT_OBTAINED_STORY_ITEM
|
||||||
|
struct QuestLogEvent_StoryItem
|
||||||
|
{
|
||||||
|
u16 itemId;
|
||||||
|
u8 mapSec;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern u8 gQuestLogState;
|
extern u8 gQuestLogState;
|
||||||
extern u8 gQuestLogPlaybackState;
|
extern u8 gQuestLogPlaybackState;
|
||||||
extern struct FieldInput gQuestLogFieldInput;
|
extern struct FieldInput gQuestLogFieldInput;
|
||||||
extern struct UnkStruct_203B044 gUnknown_203B044;
|
extern struct QuestLogRepeatEventTracker gQuestLogRepeatEventTracker;
|
||||||
extern u16 *gUnknown_203AE04;
|
extern u16 *gQuestLogDefeatedWildMonRecord;
|
||||||
extern u16 *sEventRecordingPointer;
|
extern u16 *gQuestLogRecordingPointer;
|
||||||
extern u16 sQuestLogCursor;
|
extern u16 gQuestLogCurActionIdx;
|
||||||
|
|
||||||
void QuestLogRecordPlayerAvatarGfxTransition(u8);
|
void QuestLogRecordPlayerAvatarGfxTransition(u8);
|
||||||
void SetQuestLogEvent(u16, const u16 *);
|
void SetQuestLogEvent(u16, const u16 *);
|
||||||
void SetQLPlayedTheSlots(void);
|
void SetQLPlayedTheSlots(void);
|
||||||
void QuestLog_RecordEnteredMap(u16);
|
void QuestLog_RecordEnteredMap(u16);
|
||||||
u8 sub_8112CAC(void);
|
u8 QL_GetPlaybackState(void);
|
||||||
bool8 QuestLog_SchedulePlaybackCB(void (*func)(void));
|
bool8 QL_AvoidDisplay(void (*func)(void));
|
||||||
void QuestLog_BackUpPalette(u16 offset, u16 size);
|
void QuestLog_BackUpPalette(u16 offset, u16 size);
|
||||||
void CommitQuestLogWindow1(void);
|
void CommitQuestLogWindow1(void);
|
||||||
void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void);
|
void QuestLog_DrawPreviouslyOnQuestHeaderIfInPlaybackMode(void);
|
||||||
void ResetQuestLog(void);
|
void ResetQuestLog(void);
|
||||||
void ResetTrainerFanClub(void);
|
void ResetTrainerFanClub(void);
|
||||||
void TrySetUpQuestLogScenes_ElseContinueFromSave(u8 taskId);
|
void TryStartQuestLogPlayback(u8 taskId);
|
||||||
void SaveQuestLogData(void);
|
void SaveQuestLogData(void);
|
||||||
void QuestLog_CutRecording(void);
|
void QuestLog_CutRecording(void);
|
||||||
u8 sub_8112CAC(void);
|
|
||||||
void ResetDeferredLinkEvent(void);
|
void ResetDeferredLinkEvent(void);
|
||||||
void FinishRecordingQuestLogScene(void);
|
void QL_FinishRecordingScene(void);
|
||||||
void QuestLogEvents_HandleEndTrainerBattle(void);
|
void QuestLogEvents_HandleEndTrainerBattle(void);
|
||||||
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
|
void *QuestLogGetFlagOrVarPtr(bool8 isFlag, u16 idx);
|
||||||
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
|
void QuestLogSetFlagOrVar(bool8 isFlag, u16 idx, u16 value);
|
||||||
void SetQuestLogRecordAndPlaybackPointers(void *oldSave);
|
void QL_AddASLROffset(void *oldSaveBlockPtr);
|
||||||
void sub_811246C(struct Sprite *sprite);
|
void QL_UpdateObject(struct Sprite *sprite);
|
||||||
void QuestLogRecordNPCStep(u8 a0, u8 a1, u8 a2, u8 a3);
|
void QuestLogRecordNPCStep(u8 a0, u8 a1, u8 a2, u8 a3);
|
||||||
bool8 sub_8111C2C(void);
|
bool8 QL_IsTrainerSightDisabled(void);
|
||||||
void QuestLog_OnEscalatorWarp(u8 direction);
|
void QuestLog_OnEscalatorWarp(u8 direction);
|
||||||
void QuestLogRecordPlayerAvatarGfxTransitionWithDuration(u8 movementActionId, u8 duration);
|
void QuestLogRecordPlayerAvatarGfxTransitionWithDuration(u8 movementActionId, u8 duration);
|
||||||
void Special_UpdateTrainerFansAfterLinkBattle(void);
|
void Special_UpdateTrainerFansAfterLinkBattle(void);
|
||||||
@@ -67,39 +206,39 @@ void QuestLogRecordPlayerStep(u8 movementActionId);
|
|||||||
void QuestLogRecordPlayerStepWithDuration(u8 movementActionId, u8 duration);
|
void QuestLogRecordPlayerStepWithDuration(u8 movementActionId, u8 duration);
|
||||||
void QuestLogRecordNPCStepWithDuration(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration);
|
void QuestLogRecordNPCStepWithDuration(u8 localId, u8 mapNum, u8 mapGroup, u8 movementActionId, u8 duration);
|
||||||
void QL_AfterRecordFishActionSuccessful(void);
|
void QL_AfterRecordFishActionSuccessful(void);
|
||||||
void sub_8110920(void);
|
void QL_ResetDefeatedWildMonRecord(void);
|
||||||
void sub_8111708(void);
|
void QL_RestoreMapLayoutId(void);
|
||||||
void sub_81127F8(struct FieldInput * a0);
|
void QL_RecordFieldInput(struct FieldInput * fieldInput);
|
||||||
void sub_8112B3C(void);
|
void QL_TryRunActions(void);
|
||||||
void RunQuestLogCB(void);
|
void RunQuestLogCB(void);
|
||||||
void sub_8111C68(void);
|
void QL_HandleInput(void);
|
||||||
bool8 QuestLogScenePlaybackIsEnding(void);
|
bool8 QuestLogScenePlaybackIsEnding(void);
|
||||||
void sub_8115798(void);
|
void SetQuestLogEvent_Arrived(void);
|
||||||
bool8 QuestLog_ShouldEndSceneOnMapChange(void);
|
bool8 QuestLog_ShouldEndSceneOnMapChange(void);
|
||||||
void QuestLog_AdvancePlayhead_(void);
|
void QuestLog_AdvancePlayhead_(void);
|
||||||
void QuestLog_InitPalettesBackup(void);
|
void QuestLog_InitPalettesBackup(void);
|
||||||
void sub_8110FCC(void);
|
void QL_InitSceneObjectsAndActions(void);
|
||||||
u8 GetQuestLogStartType(void);
|
u8 GetQuestLogStartType(void);
|
||||||
void sub_81113E4(void);
|
void QL_CopySaveState(void);
|
||||||
void sub_8111438(void);
|
void QL_ResetPartyAndPC(void);
|
||||||
void StartRecordingQuestLogEntry(u16 eventId);
|
void QL_StartRecordingAction(u16 eventId);
|
||||||
bool8 WillCommandOfSizeFitInSav1Record(u16 *cursor, size_t size);
|
bool8 QL_IsRoomToSaveAction(const void *cursor, size_t size);
|
||||||
bool8 sub_8110944(const void *a0, size_t cmdSize);
|
bool8 QL_IsRoomToSaveEvent(const void *cursor, size_t size);
|
||||||
|
|
||||||
void sub_8113BD8(void);
|
void QL_ResetEventStates(void);
|
||||||
void ResetUnk203B044(void);
|
void QL_ResetRepeatEventTracker(void);
|
||||||
u16 *TryRecordEvent39_NoParams(u16 *);
|
u16 *QL_RecordAction_SceneEnd(u16 *);
|
||||||
u16 *sub_8113C8C(u16 *, struct QuestLogEntry *);
|
u16 *QL_LoadAction_Wait(u16 *, struct QuestLogAction *);
|
||||||
u16 *sub_8113CC8(u16 *, struct QuestLogEntry *);
|
u16 *QL_RecordAction_Input(u16 *, struct QuestLogAction *);
|
||||||
u16 *sub_8113D08(u16 *, struct QuestLogEntry *);
|
u16 *QL_LoadAction_Input(u16 *, struct QuestLogAction *);
|
||||||
u16 *sub_8113D48(u16 *, struct QuestLogEntry *);
|
u16 *QL_RecordAction_MovementOrGfxChange(u16 *, struct QuestLogAction *);
|
||||||
u16 *sub_8113D94(u16 *, struct QuestLogEntry *);
|
u16 *QL_LoadAction_MovementOrGfxChange(u16 *, struct QuestLogAction *);
|
||||||
void QL_EnableRecordingSteps(void);
|
void QL_EnableRecordingSteps(void);
|
||||||
u16 *QuestLog_SkipCommand(u16 *, u16 **);
|
u16 *QL_SkipCommand(u16 *, u16 **);
|
||||||
void sub_8113ABC(const u16 *);
|
void QL_UpdateLastDepartedLocation(const u16 *);
|
||||||
u16 *sub_8113C20(u16 *, struct QuestLogEntry *);
|
u16 *QL_LoadAction_SceneEnd(u16 *, struct QuestLogAction *);
|
||||||
bool8 sub_8113AE8(const u16 *);
|
bool8 QL_LoadEvent(const u16 *);
|
||||||
bool8 sub_8113B44(const u16 *);
|
bool8 QL_TryRepeatEvent(const u16 *);
|
||||||
void TryRecordEvent41_IncCursor(u16);
|
void QL_RecordWait(u16);
|
||||||
|
|
||||||
#endif //GUARD_QUEST_LOG_H
|
#endif //GUARD_QUEST_LOG_H
|
||||||
|
|||||||
@@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
void SetQuestLogObjectEventsData(struct QuestLog *);
|
void QL_RecordObjects(struct QuestLogScene *);
|
||||||
void SetSav1ObjectEventsFromQuestLog(struct QuestLog *, struct ObjectEventTemplate *);
|
void QL_LoadObjects(struct QuestLogScene *, struct ObjectEventTemplate *);
|
||||||
void sub_815A540(void);
|
void QL_TryStopSurfing(void);
|
||||||
|
|
||||||
#endif //GUARD_QUEST_LOG_OBJECTS_H
|
#endif //GUARD_QUEST_LOG_OBJECTS_H
|
||||||
|
|||||||
@@ -3,15 +3,19 @@
|
|||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
#define QL_PLAYER_GFX_NORMAL 0
|
enum {
|
||||||
#define QL_PLAYER_GFX_BIKE 1
|
QL_PLAYER_GFX_NORMAL,
|
||||||
#define QL_PLAYER_GFX_FISH 2
|
QL_PLAYER_GFX_BIKE,
|
||||||
#define QL_PLAYER_GFX_SURF 3
|
QL_PLAYER_GFX_FISH,
|
||||||
#define QL_PLAYER_GFX_STOP_SURF_S 4
|
QL_PLAYER_GFX_SURF,
|
||||||
#define QL_PLAYER_GFX_STOP_SURF_N 5
|
QL_PLAYER_GFX_STOP_SURF_S,
|
||||||
#define QL_PLAYER_GFX_STOP_SURF_W 6
|
QL_PLAYER_GFX_STOP_SURF_N,
|
||||||
#define QL_PLAYER_GFX_STOP_SURF_E 7
|
QL_PLAYER_GFX_STOP_SURF_W,
|
||||||
#define QL_PLAYER_GFX_VSSEEKER 8
|
QL_PLAYER_GFX_STOP_SURF_E,
|
||||||
|
QL_PLAYER_GFX_VSSEEKER,
|
||||||
|
QL_PLAYER_GFX_NONE = 0xFF
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
void QuestLogUpdatePlayerSprite(u8 state);
|
void QuestLogUpdatePlayerSprite(u8 state);
|
||||||
bool32 QuestLogTryRecordPlayerAvatarGfxTransition(u8 state);
|
bool32 QuestLogTryRecordPlayerAvatarGfxTransition(u8 state);
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ bool8 CreatePCMenu(void);
|
|||||||
void ScriptMenu_DisplayPCStartupPrompt(void);
|
void ScriptMenu_DisplayPCStartupPrompt(void);
|
||||||
|
|
||||||
bool8 (*ScriptMenu_HidePokemonPic(void))(void);
|
bool8 (*ScriptMenu_HidePokemonPic(void))(void);
|
||||||
void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void);
|
void QL_DestroyAbortedDisplay(void);
|
||||||
void PicboxCancel(void);
|
void PicboxCancel(void);
|
||||||
|
|
||||||
#endif //GUARD_SCRIPT_MENU_H
|
#endif //GUARD_SCRIPT_MENU_H
|
||||||
|
|||||||
+1
-1
@@ -10,7 +10,7 @@ void CreatePokemartMenu(const u16 *itemsForSale);
|
|||||||
void CreateDecorationShop1Menu(const u16 *);
|
void CreateDecorationShop1Menu(const u16 *);
|
||||||
void CreateDecorationShop2Menu(const u16 *);
|
void CreateDecorationShop2Menu(const u16 *);
|
||||||
u8 GetMartFontId(void);
|
u8 GetMartFontId(void);
|
||||||
void RecordItemPurchase(u16 a0, u16 a1, u8 a2);
|
void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId);
|
||||||
|
|
||||||
// buy_menu_helper
|
// buy_menu_helper
|
||||||
void BuyMenuInitWindows(bool32 isSellingTM);
|
void BuyMenuInitWindows(bool32 isSellingTM);
|
||||||
|
|||||||
@@ -2882,7 +2882,7 @@ static void Cmd_tryfaintmon(void)
|
|||||||
if (gBattleResults.opponentFaintCounter < 255)
|
if (gBattleResults.opponentFaintCounter < 255)
|
||||||
gBattleResults.opponentFaintCounter++;
|
gBattleResults.opponentFaintCounter++;
|
||||||
gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
|
gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES);
|
||||||
*(u8 *)(&gBattleStruct->field_182) = gBattlerAttacker;
|
*(u8 *)(&gBattleStruct->lastAttackerToFaintOpponent) = gBattlerAttacker;
|
||||||
}
|
}
|
||||||
if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0)
|
if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0)
|
||||||
{
|
{
|
||||||
|
|||||||
+2
-2
@@ -807,13 +807,13 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
|
|||||||
SetMapVarsToTrainer();
|
SetMapVarsToTrainer();
|
||||||
return EventScript_TryDoDoubleTrainerBattle;
|
return EventScript_TryDoDoubleTrainerBattle;
|
||||||
case TRAINER_BATTLE_REMATCH_DOUBLE:
|
case TRAINER_BATTLE_REMATCH_DOUBLE:
|
||||||
FinishRecordingQuestLogScene();
|
QL_FinishRecordingScene();
|
||||||
TrainerBattleLoadArgs(sDoubleBattleParams, data);
|
TrainerBattleLoadArgs(sDoubleBattleParams, data);
|
||||||
SetMapVarsToTrainer();
|
SetMapVarsToTrainer();
|
||||||
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
||||||
return EventScript_TryDoDoubleRematchBattle;
|
return EventScript_TryDoDoubleRematchBattle;
|
||||||
case TRAINER_BATTLE_REMATCH:
|
case TRAINER_BATTLE_REMATCH:
|
||||||
FinishRecordingQuestLogScene();
|
QL_FinishRecordingScene();
|
||||||
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
|
TrainerBattleLoadArgs(sOrdinaryBattleParams, data);
|
||||||
SetMapVarsToTrainer();
|
SetMapVarsToTrainer();
|
||||||
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
gTrainerBattleOpponent_A = GetRematchTrainerId(gTrainerBattleOpponent_A);
|
||||||
|
|||||||
+2
-1
@@ -29,6 +29,7 @@
|
|||||||
#include "pokemon_storage_system.h"
|
#include "pokemon_storage_system.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
#include "constants/songs.h"
|
#include "constants/songs.h"
|
||||||
|
#include "constants/quest_log.h"
|
||||||
|
|
||||||
struct BerryPouchStruct_203F36C
|
struct BerryPouchStruct_203F36C
|
||||||
{
|
{
|
||||||
@@ -1384,7 +1385,7 @@ static void Task_SellBerries_PlaySfxAndRemoveBerries(u8 taskId)
|
|||||||
PlaySE(SE_SHOP);
|
PlaySE(SE_SHOP);
|
||||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||||
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
||||||
RecordItemPurchase(gSpecialVar_ItemId, data[8], 2);
|
RecordItemTransaction(gSpecialVar_ItemId, data[8], QL_EVENT_SOLD_ITEM - QL_EVENT_USED_POKEMART);
|
||||||
DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
|
DestroyListMenuTask(data[0], &sStaticCnt.listMenuScrollOffset, &sStaticCnt.listMenuSelectedRow);
|
||||||
SortAndCountBerries();
|
SortAndCountBerries();
|
||||||
SanitizeListMenuSelectionParams();
|
SanitizeListMenuSelectionParams();
|
||||||
|
|||||||
+3
-3
@@ -114,15 +114,15 @@ void DisplayBerryPowderVendorMenu(void)
|
|||||||
{
|
{
|
||||||
struct WindowTemplate template;
|
struct WindowTemplate template;
|
||||||
|
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
{
|
return;
|
||||||
|
|
||||||
template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32);
|
template = SetWindowTemplateFields(0, 1, 1, 8, 3, 15, 32);
|
||||||
sBerryPowderVendorWindowId = AddWindow(&template);
|
sBerryPowderVendorWindowId = AddWindow(&template);
|
||||||
FillWindowPixelBuffer(sBerryPowderVendorWindowId, 0);
|
FillWindowPixelBuffer(sBerryPowderVendorWindowId, 0);
|
||||||
PutWindowTilemap(sBerryPowderVendorWindowId);
|
PutWindowTilemap(sBerryPowderVendorWindowId);
|
||||||
LoadStdWindowGfx(sBerryPowderVendorWindowId, 0x21D, BG_PLTT_ID(13));
|
LoadStdWindowGfx(sBerryPowderVendorWindowId, 0x21D, BG_PLTT_ID(13));
|
||||||
DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 13, GetBerryPowder());
|
DrawPlayerPowderAmount(sBerryPowderVendorWindowId, 0x21D, 13, GetBerryPowder());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveBerryPowderVendorMenu(void)
|
void RemoveBerryPowderVendorMenu(void)
|
||||||
|
|||||||
+7
-7
@@ -192,15 +192,15 @@ u16 *GetVarPointer(u16 idx)
|
|||||||
{
|
{
|
||||||
switch (gQuestLogPlaybackState)
|
switch (gQuestLogPlaybackState)
|
||||||
{
|
{
|
||||||
case 0:
|
case QL_PLAYBACK_STATE_STOPPED:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case QL_PLAYBACK_STATE_RUNNING:
|
||||||
ptr = QuestLogGetFlagOrVarPtr(FALSE, idx);
|
ptr = QuestLogGetFlagOrVarPtr(FALSE, idx);
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
gSaveBlock1Ptr->vars[idx - VARS_START] = *ptr;
|
gSaveBlock1Ptr->vars[idx - VARS_START] = *ptr;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case QL_PLAYBACK_STATE_RECORDING:
|
||||||
if (IsFlagOrVarStoredInQuestLog(idx - VARS_START, TRUE) == TRUE)
|
if (IsFlagOrVarStoredInQuestLog(idx - VARS_START, TRUE) == TRUE)
|
||||||
{
|
{
|
||||||
gLastQuestLogStoredFlagOrVarIdx = idx - VARS_START;
|
gLastQuestLogStoredFlagOrVarIdx = idx - VARS_START;
|
||||||
@@ -263,15 +263,15 @@ u8 *GetFlagAddr(u16 idx)
|
|||||||
{
|
{
|
||||||
switch (gQuestLogPlaybackState)
|
switch (gQuestLogPlaybackState)
|
||||||
{
|
{
|
||||||
case 0:
|
case QL_PLAYBACK_STATE_STOPPED:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
case 1:
|
case QL_PLAYBACK_STATE_RUNNING:
|
||||||
ptr = QuestLogGetFlagOrVarPtr(TRUE, idx);
|
ptr = QuestLogGetFlagOrVarPtr(TRUE, idx);
|
||||||
if (ptr != NULL)
|
if (ptr != NULL)
|
||||||
gSaveBlock1Ptr->flags[idx >> 3] = *ptr;
|
gSaveBlock1Ptr->flags[idx / 8] = *ptr;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case QL_PLAYBACK_STATE_RECORDING:
|
||||||
if (IsFlagOrVarStoredInQuestLog(idx, FALSE) == TRUE)
|
if (IsFlagOrVarStoredInQuestLog(idx, FALSE) == TRUE)
|
||||||
{
|
{
|
||||||
gLastQuestLogStoredFlagOrVarIdx = idx;
|
gLastQuestLogStoredFlagOrVarIdx = idx;
|
||||||
|
|||||||
@@ -1677,8 +1677,8 @@ void CopyObjectGraphicsInfoToSpriteTemplate(u16 graphicsId, void (*callback)(str
|
|||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (ScriptContext_IsEnabled() != TRUE && sub_8112CAC() == 1)
|
if (ScriptContext_IsEnabled() != TRUE && QL_GetPlaybackState() == QL_PLAYBACK_STATE_RUNNING)
|
||||||
spriteTemplate->callback = sub_811246C;
|
spriteTemplate->callback = QL_UpdateObject;
|
||||||
else
|
else
|
||||||
spriteTemplate->callback = callback;
|
spriteTemplate->callback = callback;
|
||||||
} while (0);
|
} while (0);
|
||||||
@@ -5046,7 +5046,7 @@ bool8 ObjectEventIsHeldMovementActive(struct ObjectEvent *objectEvent)
|
|||||||
|
|
||||||
bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementActionId)
|
bool8 ObjectEventSetHeldMovement(struct ObjectEvent *objectEvent, u8 movementActionId)
|
||||||
{
|
{
|
||||||
if(sub_8112CAC() == TRUE)
|
if (QL_GetPlaybackState() == QL_PLAYBACK_STATE_RUNNING)
|
||||||
ObjectEventClearHeldMovementIfActive(objectEvent);
|
ObjectEventClearHeldMovementIfActive(objectEvent);
|
||||||
else if (ObjectEventIsMovementOverridden(objectEvent))
|
else if (ObjectEventIsMovementOverridden(objectEvent))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -5122,7 +5122,7 @@ void UpdateObjectEventCurrentMovement(struct ObjectEvent *objectEvent, struct Sp
|
|||||||
ObjectEventUpdateSubpriority(objectEvent, sprite);
|
ObjectEventUpdateSubpriority(objectEvent, sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UpdateQuestLogObjectEventCurrentMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
void QL_UpdateObjectEventCurrentMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
DoGroundEffects_OnSpawn(objectEvent, sprite);
|
DoGroundEffects_OnSpawn(objectEvent, sprite);
|
||||||
TryEnableObjectEventAnim(objectEvent, sprite);
|
TryEnableObjectEventAnim(objectEvent, sprite);
|
||||||
@@ -5262,15 +5262,13 @@ static bool8 ObjectEventExecSingleMovementAction(struct ObjectEvent *objectEvent
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 animId)
|
static void ObjectEventSetSingleMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 movementActionId)
|
||||||
{
|
{
|
||||||
objectEvent->movementActionId = animId;
|
objectEvent->movementActionId = movementActionId;
|
||||||
sprite->data[2] = 0;
|
sprite->data[2] = 0;
|
||||||
|
|
||||||
if (gQuestLogPlaybackState == 2)
|
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_RECORDING)
|
||||||
{
|
QuestLogRecordNPCStep(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, movementActionId);
|
||||||
QuestLogRecordNPCStep(objectEvent->localId, objectEvent->mapNum, objectEvent->mapGroup, animId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction)
|
static void FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction)
|
||||||
|
|||||||
+12
-12
@@ -71,7 +71,7 @@ static bool8 TryDoorWarp(struct MapPosition * position, u16 metatileBehavior, u8
|
|||||||
static s8 GetWarpEventAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
|
static s8 GetWarpEventAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
|
||||||
static const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
|
static const u8 *GetCoordEventScriptAtPosition(struct MapHeader * mapHeader, u16 x, u16 y, u8 z);
|
||||||
|
|
||||||
struct FieldInput gInputToStoreInQuestLogMaybe;
|
struct FieldInput gFieldInputRecord;
|
||||||
|
|
||||||
void FieldClearPlayerInput(struct FieldInput *input)
|
void FieldClearPlayerInput(struct FieldInput *input)
|
||||||
{
|
{
|
||||||
@@ -203,8 +203,8 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
metatileAttributes = MapGridGetMetatileAttributeAt(position.x, position.y, METATILE_ATTRIBUTES_ALL);
|
metatileAttributes = MapGridGetMetatileAttributeAt(position.x, position.y, METATILE_ATTRIBUTES_ALL);
|
||||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||||
|
|
||||||
FieldClearPlayerInput(&gInputToStoreInQuestLogMaybe);
|
FieldClearPlayerInput(&gFieldInputRecord);
|
||||||
gInputToStoreInQuestLogMaybe.dpadDirection = input->dpadDirection;
|
gFieldInputRecord.dpadDirection = input->dpadDirection;
|
||||||
|
|
||||||
if (CheckForTrainersWantingBattle() == TRUE)
|
if (CheckForTrainersWantingBattle() == TRUE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -222,7 +222,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
IncrementBirthIslandRockStepCount();
|
IncrementBirthIslandRockStepCount();
|
||||||
if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE)
|
if (TryStartStepBasedScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.tookStep = TRUE;
|
gFieldInputRecord.tookStep = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -234,7 +234,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
metatileBehavior = MapGridGetMetatileBehaviorAt(position.x, position.y);
|
||||||
if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)
|
if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.checkStandardWildEncounter = TRUE;
|
gFieldInputRecord.checkStandardWildEncounter = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
GetPlayerPosition(&position);
|
GetPlayerPosition(&position);
|
||||||
@@ -243,14 +243,14 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
}
|
}
|
||||||
if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileAttributes) == TRUE)
|
if (input->checkStandardWildEncounter && CheckStandardWildEncounter(metatileAttributes) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.checkStandardWildEncounter = TRUE;
|
gFieldInputRecord.checkStandardWildEncounter = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
if (input->heldDirection && input->dpadDirection == playerDirection)
|
if (input->heldDirection && input->dpadDirection == playerDirection)
|
||||||
{
|
{
|
||||||
if (TryArrowWarp(&position, metatileBehavior, playerDirection) == TRUE)
|
if (TryArrowWarp(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.heldDirection = TRUE;
|
gFieldInputRecord.heldDirection = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -261,14 +261,14 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
{
|
{
|
||||||
if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)
|
if (TrySetUpWalkIntoSignpostScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.heldDirection = TRUE;
|
gFieldInputRecord.heldDirection = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE)
|
if (input->pressedAButton && TryStartInteractionScript(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.pressedAButton = TRUE;
|
gFieldInputRecord.pressedAButton = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,14 +276,14 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
{
|
{
|
||||||
if (TryDoorWarp(&position, metatileBehavior, playerDirection) == TRUE)
|
if (TryDoorWarp(&position, metatileBehavior, playerDirection) == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.heldDirection2 = TRUE;
|
gFieldInputRecord.heldDirection2 = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input->pressedStartButton)
|
if (input->pressedStartButton)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.pressedStartButton = TRUE;
|
gFieldInputRecord.pressedStartButton = TRUE;
|
||||||
FlagSet(FLAG_OPENED_START_MENU);
|
FlagSet(FLAG_OPENED_START_MENU);
|
||||||
PlaySE(SE_WIN_OPEN);
|
PlaySE(SE_WIN_OPEN);
|
||||||
ShowStartMenu();
|
ShowStartMenu();
|
||||||
@@ -291,7 +291,7 @@ int ProcessPlayerFieldInput(struct FieldInput *input)
|
|||||||
}
|
}
|
||||||
if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE)
|
if (input->pressedSelectButton && UseRegisteredKeyItemOnField() == TRUE)
|
||||||
{
|
{
|
||||||
gInputToStoreInQuestLogMaybe.pressedSelectButton = TRUE;
|
gFieldInputRecord.pressedSelectButton = TRUE;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1602,11 +1602,11 @@ void CreateStopSurfingTask_NoMusicChange(u8 direction)
|
|||||||
|
|
||||||
void SeafoamIslandsB4F_CurrentDumpsPlayerOnLand(void)
|
void SeafoamIslandsB4F_CurrentDumpsPlayerOnLand(void)
|
||||||
{
|
{
|
||||||
if (gQuestLogPlaybackState != 1 && gQuestLogPlaybackState != 3)
|
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_RUNNING || gQuestLogPlaybackState == QL_PLAYBACK_STATE_ACTION_END)
|
||||||
{
|
return;
|
||||||
|
|
||||||
QuestLogRecordPlayerAvatarGfxTransitionWithDuration(sQuestLogSurfDismountActionIds[DIR_NORTH], 16);
|
QuestLogRecordPlayerAvatarGfxTransitionWithDuration(sQuestLogSurfDismountActionIds[DIR_NORTH], 16);
|
||||||
CreateStopSurfingTask(DIR_NORTH);
|
CreateStopSurfingTask(DIR_NORTH);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void Task_StopSurfingInit(u8 taskId)
|
static void Task_StopSurfingInit(u8 taskId)
|
||||||
|
|||||||
+39
-37
@@ -1095,8 +1095,10 @@ void DrawElevatorCurrentFloorWindow(void)
|
|||||||
{
|
{
|
||||||
const u8 *floorname;
|
const u8 *floorname;
|
||||||
u32 strwidth;
|
u32 strwidth;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
|
||||||
{
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate);
|
sElevatorCurrentFloorWindowId = AddWindow(&sElevatorCurrentFloorWindowTemplate);
|
||||||
LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, BG_PLTT_ID(13));
|
LoadStdWindowGfx(sElevatorCurrentFloorWindowId, 0x21D, BG_PLTT_ID(13));
|
||||||
DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 13);
|
DrawStdFrameWithCustomTileAndPalette(sElevatorCurrentFloorWindowId, FALSE, 0x21D, 13);
|
||||||
@@ -1106,7 +1108,6 @@ void DrawElevatorCurrentFloorWindow(void)
|
|||||||
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL);
|
AddTextPrinterParameterized(sElevatorCurrentFloorWindowId, FONT_NORMAL, floorname, 56 - strwidth, 16, 0xFF, NULL);
|
||||||
PutWindowTilemap(sElevatorCurrentFloorWindowId);
|
PutWindowTilemap(sElevatorCurrentFloorWindowId);
|
||||||
CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL);
|
CopyWindowToVram(sElevatorCurrentFloorWindowId, COPYWIN_FULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CloseElevatorCurrentFloorWindow(void)
|
void CloseElevatorCurrentFloorWindow(void)
|
||||||
@@ -1164,8 +1165,10 @@ void ListMenu(void)
|
|||||||
{
|
{
|
||||||
u8 taskId;
|
u8 taskId;
|
||||||
struct Task *task;
|
struct Task *task;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
|
||||||
{
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
taskId = CreateTask(Task_CreateScriptListMenu, 8);
|
taskId = CreateTask(Task_CreateScriptListMenu, 8);
|
||||||
task = &gTasks[taskId];
|
task = &gTasks[taskId];
|
||||||
switch (gSpecialVar_0x8004)
|
switch (gSpecialVar_0x8004)
|
||||||
@@ -1249,7 +1252,6 @@ void ListMenu(void)
|
|||||||
DestroyTask(taskId);
|
DestroyTask(taskId);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const u8 *const sListMenuLabels[][12] = {
|
static const u8 *const sListMenuLabels[][12] = {
|
||||||
@@ -1810,7 +1812,7 @@ static const struct {
|
|||||||
u16 inside_num;
|
u16 inside_num;
|
||||||
u16 outside_grp;
|
u16 outside_grp;
|
||||||
u16 outside_num;
|
u16 outside_num;
|
||||||
} sInsideOutsidePairs[51] = {
|
} sInsideOutsidePairs[] = {
|
||||||
[QL_LOCATION_HOME] = {MAP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP(PALLET_TOWN)},
|
[QL_LOCATION_HOME] = {MAP(PALLET_TOWN_PLAYERS_HOUSE_1F), MAP(PALLET_TOWN)},
|
||||||
[QL_LOCATION_OAKS_LAB] = {MAP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP(PALLET_TOWN)},
|
[QL_LOCATION_OAKS_LAB] = {MAP(PALLET_TOWN_PROFESSOR_OAKS_LAB), MAP(PALLET_TOWN)},
|
||||||
[QL_LOCATION_VIRIDIAN_GYM] = {MAP(VIRIDIAN_CITY_GYM), MAP(VIRIDIAN_CITY)},
|
[QL_LOCATION_VIRIDIAN_GYM] = {MAP(VIRIDIAN_CITY_GYM), MAP(VIRIDIAN_CITY)},
|
||||||
@@ -1881,67 +1883,67 @@ void QuestLog_CheckDepartingIndoorsMap(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct QuestLogDepartedData {
|
|
||||||
u8 map_section_id;
|
|
||||||
u8 entrance_id;
|
|
||||||
};
|
|
||||||
|
|
||||||
void QuestLog_TryRecordDepartedLocation(void)
|
void QuestLog_TryRecordDepartedLocation(void)
|
||||||
{
|
{
|
||||||
s16 x, y;
|
s16 x, y;
|
||||||
struct QuestLogDepartedData event_buffer;
|
struct QuestLogEvent_Departed data;
|
||||||
u16 ql_entrance_id = VarGet(VAR_QL_ENTRANCE);
|
u16 locationId = VarGet(VAR_QL_ENTRANCE);
|
||||||
event_buffer.map_section_id = 0;
|
data.mapSec = 0;
|
||||||
event_buffer.entrance_id = 0;
|
data.locationId = 0;
|
||||||
if (FlagGet(FLAG_SYS_QL_DEPARTED))
|
if (FlagGet(FLAG_SYS_QL_DEPARTED))
|
||||||
{
|
{
|
||||||
if (ql_entrance_id == QL_LOCATION_VIRIDIAN_FOREST_1)
|
if (locationId == QL_LOCATION_VIRIDIAN_FOREST_1)
|
||||||
{
|
{
|
||||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)))
|
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)
|
||||||
|
&& (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE)
|
||||||
|
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_NORTH_ENTRANCE)))
|
||||||
{
|
{
|
||||||
event_buffer.map_section_id = MAPSEC_ROUTE_2;
|
data.mapSec = MAPSEC_ROUTE_2;
|
||||||
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE))
|
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE2_VIRIDIAN_FOREST_SOUTH_ENTRANCE))
|
||||||
event_buffer.entrance_id = ql_entrance_id;
|
data.locationId = locationId;
|
||||||
else
|
else
|
||||||
event_buffer.entrance_id = ql_entrance_id + 1;
|
data.locationId = locationId + 1;
|
||||||
SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
|
SetQuestLogEvent(QL_EVENT_DEPARTED, (const u16 *)&data);
|
||||||
FlagClear(FLAG_SYS_QL_DEPARTED);
|
FlagClear(FLAG_SYS_QL_DEPARTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (ql_entrance_id == QL_LOCATION_LEAGUE_GATE_1)
|
else if (locationId == QL_LOCATION_LEAGUE_GATE_1)
|
||||||
{
|
{
|
||||||
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) && (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22) || gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
|
if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE22) &&
|
||||||
|
(gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22)
|
||||||
|
|| gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE23)))
|
||||||
{
|
{
|
||||||
event_buffer.map_section_id = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[ql_entrance_id].inside_grp, sInsideOutsidePairs[ql_entrance_id].inside_num)->regionMapSectionId;
|
data.mapSec = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[locationId].inside_grp, sInsideOutsidePairs[locationId].inside_num)->regionMapSectionId;
|
||||||
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22))
|
if (gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE22))
|
||||||
event_buffer.entrance_id = ql_entrance_id;
|
data.locationId = locationId;
|
||||||
else
|
else
|
||||||
event_buffer.entrance_id = ql_entrance_id + 1;
|
data.locationId = locationId + 1;
|
||||||
SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
|
SetQuestLogEvent(QL_EVENT_DEPARTED, (const u16 *)&data);
|
||||||
FlagClear(FLAG_SYS_QL_DEPARTED);
|
FlagClear(FLAG_SYS_QL_DEPARTED);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[ql_entrance_id].outside_grp && gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[ql_entrance_id].outside_num)
|
if (gSaveBlock1Ptr->location.mapGroup == sInsideOutsidePairs[locationId].outside_grp
|
||||||
|
&& gSaveBlock1Ptr->location.mapNum == sInsideOutsidePairs[locationId].outside_num)
|
||||||
{
|
{
|
||||||
event_buffer.map_section_id = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[ql_entrance_id].inside_grp, sInsideOutsidePairs[ql_entrance_id].inside_num)->regionMapSectionId;
|
data.mapSec = Overworld_GetMapHeaderByGroupAndId(sInsideOutsidePairs[locationId].inside_grp, sInsideOutsidePairs[locationId].inside_num)->regionMapSectionId;
|
||||||
event_buffer.entrance_id = ql_entrance_id;
|
data.locationId = locationId;
|
||||||
if (ql_entrance_id == QL_LOCATION_ROCK_TUNNEL_1)
|
if (locationId == QL_LOCATION_ROCK_TUNNEL_1)
|
||||||
{
|
{
|
||||||
PlayerGetDestCoords(&x, &y);
|
PlayerGetDestCoords(&x, &y);
|
||||||
if (x != 15 || y != 26)
|
if (x != 15 || y != 26)
|
||||||
event_buffer.entrance_id++;
|
data.locationId++;
|
||||||
}
|
}
|
||||||
else if (ql_entrance_id == QL_LOCATION_SEAFOAM_ISLANDS_1)
|
else if (locationId == QL_LOCATION_SEAFOAM_ISLANDS_1)
|
||||||
{
|
{
|
||||||
PlayerGetDestCoords(&x, &y);
|
PlayerGetDestCoords(&x, &y);
|
||||||
if (x != 67 || y != 15)
|
if (x != 67 || y != 15)
|
||||||
event_buffer.entrance_id++;
|
data.locationId++;
|
||||||
}
|
}
|
||||||
SetQuestLogEvent(QL_EVENT_DEPARTED, (void *)&event_buffer);
|
SetQuestLogEvent(QL_EVENT_DEPARTED, (const u16 *)&data);
|
||||||
FlagClear(FLAG_SYS_QL_DEPARTED);
|
FlagClear(FLAG_SYS_QL_DEPARTED);
|
||||||
if (ql_entrance_id == QL_LOCATION_ROCKET_HIDEOUT)
|
if (locationId == QL_LOCATION_ROCKET_HIDEOUT)
|
||||||
{
|
{
|
||||||
VarSet(VAR_QL_ENTRANCE, QL_LOCATION_GAME_CORNER);
|
VarSet(VAR_QL_ENTRANCE, QL_LOCATION_GAME_CORNER);
|
||||||
FlagSet(FLAG_SYS_QL_DEPARTED);
|
FlagSet(FLAG_SYS_QL_DEPARTED);
|
||||||
|
|||||||
+7
-16
@@ -567,16 +567,8 @@ u16 BagGetQuantityByItemId(u16 itemId)
|
|||||||
|
|
||||||
void TrySetObtainedItemQuestLogEvent(u16 itemId)
|
void TrySetObtainedItemQuestLogEvent(u16 itemId)
|
||||||
{
|
{
|
||||||
struct QuestLogStruct_809A824
|
|
||||||
{
|
|
||||||
u16 itemId;
|
|
||||||
u8 mapSectionId;
|
|
||||||
} * ptr;
|
|
||||||
|
|
||||||
// Only some key items trigger this event
|
// Only some key items trigger this event
|
||||||
if
|
if (itemId == ITEM_OAKS_PARCEL
|
||||||
(
|
|
||||||
itemId == ITEM_OAKS_PARCEL
|
|
||||||
|| itemId == ITEM_POKE_FLUTE
|
|| itemId == ITEM_POKE_FLUTE
|
||||||
|| itemId == ITEM_SECRET_KEY
|
|| itemId == ITEM_SECRET_KEY
|
||||||
|| itemId == ITEM_BIKE_VOUCHER
|
|| itemId == ITEM_BIKE_VOUCHER
|
||||||
@@ -595,16 +587,15 @@ void TrySetObtainedItemQuestLogEvent(u16 itemId)
|
|||||||
|| itemId == ITEM_TEA
|
|| itemId == ITEM_TEA
|
||||||
|| itemId == ITEM_POWDER_JAR
|
|| itemId == ITEM_POWDER_JAR
|
||||||
|| itemId == ITEM_RUBY
|
|| itemId == ITEM_RUBY
|
||||||
|| itemId == ITEM_SAPPHIRE
|
|| itemId == ITEM_SAPPHIRE)
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (itemId != ITEM_TOWN_MAP || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_RIVALS_HOUSE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_RIVALS_HOUSE)))
|
if (itemId != ITEM_TOWN_MAP || (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(PALLET_TOWN_RIVALS_HOUSE) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(PALLET_TOWN_RIVALS_HOUSE)))
|
||||||
{
|
{
|
||||||
ptr = malloc(sizeof(*ptr));
|
struct QuestLogEvent_StoryItem * data = malloc(sizeof(*data));
|
||||||
ptr->itemId = itemId;
|
data->itemId = itemId;
|
||||||
ptr->mapSectionId = gMapHeader.regionMapSectionId;
|
data->mapSec = gMapHeader.regionMapSectionId;
|
||||||
SetQuestLogEvent(QL_EVENT_OBTAINED_ITEM, (void *)ptr);
|
SetQuestLogEvent(QL_EVENT_OBTAINED_STORY_ITEM, (const u16 *)data);
|
||||||
free(ptr);
|
free(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-2
@@ -33,6 +33,7 @@
|
|||||||
#include "tm_case.h"
|
#include "tm_case.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
#include "constants/songs.h"
|
#include "constants/songs.h"
|
||||||
|
#include "constants/quest_log.h"
|
||||||
|
|
||||||
#define FREE_IF_SET(ptr) ({ if (ptr) Free(ptr); })
|
#define FREE_IF_SET(ptr) ({ if (ptr) Free(ptr); })
|
||||||
|
|
||||||
@@ -1930,7 +1931,7 @@ static void Task_FinalizeSaleToShop(u8 taskId)
|
|||||||
PlaySE(SE_SHOP);
|
PlaySE(SE_SHOP);
|
||||||
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
RemoveBagItem(gSpecialVar_ItemId, data[8]);
|
||||||
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * data[8]);
|
||||||
RecordItemPurchase(gSpecialVar_ItemId, data[8], 2);
|
RecordItemTransaction(gSpecialVar_ItemId, data[8], QL_EVENT_SOLD_ITEM - QL_EVENT_USED_POKEMART);
|
||||||
DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]);
|
DestroyListMenuTask(data[0], &gBagMenuState.cursorPos[gBagMenuState.pocket], &gBagMenuState.itemsAbove[gBagMenuState.pocket]);
|
||||||
Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket);
|
Pocket_CalculateNItemsAndMaxShowed(gBagMenuState.pocket);
|
||||||
PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket);
|
PocketCalculateInitialCursorPosAndItemsAbove(gBagMenuState.pocket);
|
||||||
@@ -2005,7 +2006,7 @@ static void Task_TryDoItemDeposit(u8 taskId)
|
|||||||
s16 *data = gTasks[taskId].data;
|
s16 *data = gTasks[taskId].data;
|
||||||
if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE)
|
if (AddPCItem(gSpecialVar_ItemId, data[8]) == TRUE)
|
||||||
{
|
{
|
||||||
ItemUse_SetQuestLogEvent(28, 0, gSpecialVar_ItemId, 0xFFFF);
|
ItemUse_SetQuestLogEvent(QL_EVENT_DEPOSITED_ITEM_PC, 0, gSpecialVar_ItemId, 0xFFFF);
|
||||||
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
CopyItemName(gSpecialVar_ItemId, gStringVar1);
|
||||||
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 3);
|
||||||
StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s);
|
StringExpandPlaceholders(gStringVar4, gText_DepositedStrVar2StrVar1s);
|
||||||
|
|||||||
+7
-13
@@ -912,20 +912,14 @@ void FieldUseFunc_OakStopsYou(u8 taskId)
|
|||||||
|
|
||||||
void ItemUse_SetQuestLogEvent(u8 eventId, struct Pokemon *pokemon, u16 itemId, u16 param)
|
void ItemUse_SetQuestLogEvent(u8 eventId, struct Pokemon *pokemon, u16 itemId, u16 param)
|
||||||
{
|
{
|
||||||
struct UnkStruct_ItemUseQuestLog
|
struct QuestLogEvent_Item *data = Alloc(sizeof(*data));
|
||||||
{
|
|
||||||
u16 itemId;
|
|
||||||
u16 unk2;
|
|
||||||
u16 species;
|
|
||||||
u16 param;
|
|
||||||
} *questLog = Alloc(sizeof(*questLog));
|
|
||||||
|
|
||||||
questLog->itemId = itemId;
|
data->itemId = itemId;
|
||||||
questLog->param = param;
|
data->itemParam = param;
|
||||||
if (pokemon != NULL)
|
if (pokemon != NULL)
|
||||||
questLog->species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG);
|
data->species = GetMonData(pokemon, MON_DATA_SPECIES_OR_EGG);
|
||||||
else
|
else
|
||||||
questLog->species = 0xFFFF;
|
data->species = 0xFFFF;
|
||||||
SetQuestLogEvent(eventId, (void *)questLog);
|
SetQuestLogEvent(eventId, (void *)data);
|
||||||
Free(questLog);
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -78,7 +78,7 @@ void SetSaveBlocksPointers(void)
|
|||||||
gPokemonStoragePtr = (void *)(&gPokemonStorage) + offset;
|
gPokemonStoragePtr = (void *)(&gPokemonStorage) + offset;
|
||||||
|
|
||||||
SetBagPocketsPointers();
|
SetBagPocketsPointers();
|
||||||
SetQuestLogRecordAndPlaybackPointers(oldSave);
|
QL_AddASLROffset(oldSave);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MoveSaveBlocks_ResetHeap(void)
|
void MoveSaveBlocks_ResetHeap(void)
|
||||||
|
|||||||
+1
-1
@@ -213,7 +213,7 @@ static void InitMainCallbacks(void)
|
|||||||
gSaveBlock2Ptr = &gSaveBlock2;
|
gSaveBlock2Ptr = &gSaveBlock2;
|
||||||
gSaveBlock1Ptr = &gSaveBlock1;
|
gSaveBlock1Ptr = &gSaveBlock1;
|
||||||
gSaveBlock2.encryptionKey = 0;
|
gSaveBlock2.encryptionKey = 0;
|
||||||
gQuestLogPlaybackState = 0;
|
gQuestLogPlaybackState = QL_PLAYBACK_STATE_STOPPED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void CallCallbacks(void)
|
static void CallCallbacks(void)
|
||||||
|
|||||||
+1
-1
@@ -478,7 +478,7 @@ static void Task_ExecuteMainMenuSelection(u8 taskId)
|
|||||||
gPlttBufferFaded[0] = RGB_BLACK;
|
gPlttBufferFaded[0] = RGB_BLACK;
|
||||||
gExitStairsMovementDisabled = FALSE;
|
gExitStairsMovementDisabled = FALSE;
|
||||||
FreeAllWindowBuffers();
|
FreeAllWindowBuffers();
|
||||||
TrySetUpQuestLogScenes_ElseContinueFromSave(taskId);
|
TryStartQuestLogPlayback(taskId);
|
||||||
break;
|
break;
|
||||||
case MAIN_MENU_MYSTERYGIFT:
|
case MAIN_MENU_MYSTERYGIFT:
|
||||||
SetMainCallback2(CB2_InitMysteryGift);
|
SetMainCallback2(CB2_InitMysteryGift);
|
||||||
|
|||||||
+15
-15
@@ -772,7 +772,7 @@ void LoadMapFromCameraTransition(u8 mapGroup, u8 mapNum)
|
|||||||
InitSecondaryTilesetAnimation();
|
InitSecondaryTilesetAnimation();
|
||||||
UpdateLocationHistoryForRoamer();
|
UpdateLocationHistoryForRoamer();
|
||||||
RoamerMove();
|
RoamerMove();
|
||||||
sub_8110920();
|
QL_ResetDefeatedWildMonRecord();
|
||||||
DoCurrentWeather();
|
DoCurrentWeather();
|
||||||
ResetFieldTasksArgs();
|
ResetFieldTasksArgs();
|
||||||
RunOnResumeMapScript();
|
RunOnResumeMapScript();
|
||||||
@@ -803,7 +803,7 @@ static void LoadMapFromWarp(bool32 unused)
|
|||||||
TryRegenerateRenewableHiddenItems();
|
TryRegenerateRenewableHiddenItems();
|
||||||
UpdateLocationHistoryForRoamer();
|
UpdateLocationHistoryForRoamer();
|
||||||
RoamerMoveToOtherLocationSet();
|
RoamerMoveToOtherLocationSet();
|
||||||
sub_8110920();
|
QL_ResetDefeatedWildMonRecord();
|
||||||
InitMap();
|
InitMap();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -818,8 +818,8 @@ static void QL_LoadMapNormal(void)
|
|||||||
SetSavedWeatherFromCurrMapHeader();
|
SetSavedWeatherFromCurrMapHeader();
|
||||||
ChooseAmbientCrySpecies();
|
ChooseAmbientCrySpecies();
|
||||||
SetDefaultFlashLevel();
|
SetDefaultFlashLevel();
|
||||||
sub_8110920();
|
QL_ResetDefeatedWildMonRecord();
|
||||||
sub_8111708();
|
QL_RestoreMapLayoutId();
|
||||||
LoadSaveblockMapHeader();
|
LoadSaveblockMapHeader();
|
||||||
InitMap();
|
InitMap();
|
||||||
}
|
}
|
||||||
@@ -1390,7 +1390,7 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
|||||||
{
|
{
|
||||||
struct FieldInput fieldInput;
|
struct FieldInput fieldInput;
|
||||||
|
|
||||||
sub_8112B3C();
|
QL_TryRunActions();
|
||||||
UpdatePlayerAvatarTransitionState();
|
UpdatePlayerAvatarTransitionState();
|
||||||
FieldClearPlayerInput(&fieldInput);
|
FieldClearPlayerInput(&fieldInput);
|
||||||
FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
|
FieldGetPlayerInput(&fieldInput, newKeys, heldKeys);
|
||||||
@@ -1399,8 +1399,8 @@ static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
|
|||||||
{
|
{
|
||||||
if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
|
if (ProcessPlayerFieldInput(&fieldInput) == TRUE)
|
||||||
{
|
{
|
||||||
if (gQuestLogPlaybackState == 2)
|
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_RECORDING)
|
||||||
sub_81127F8(&gInputToStoreInQuestLogMaybe);
|
QL_RecordFieldInput(&gFieldInputRecord);
|
||||||
LockPlayerFieldControls();
|
LockPlayerFieldControls();
|
||||||
DismissMapNamePopup();
|
DismissMapNamePopup();
|
||||||
}
|
}
|
||||||
@@ -1416,9 +1416,9 @@ static void DoCB1_Overworld_QuestLogPlayback(void)
|
|||||||
{
|
{
|
||||||
struct FieldInput fieldInput;
|
struct FieldInput fieldInput;
|
||||||
|
|
||||||
sub_8112B3C();
|
QL_TryRunActions();
|
||||||
UpdatePlayerAvatarTransitionState();
|
UpdatePlayerAvatarTransitionState();
|
||||||
sub_8111C68();
|
QL_HandleInput();
|
||||||
FieldClearPlayerInput(&fieldInput);
|
FieldClearPlayerInput(&fieldInput);
|
||||||
fieldInput = gQuestLogFieldInput;
|
fieldInput = gQuestLogFieldInput;
|
||||||
FieldInput_HandleCancelSignpost(&fieldInput);
|
FieldInput_HandleCancelSignpost(&fieldInput);
|
||||||
@@ -1445,7 +1445,7 @@ void CB1_Overworld(void)
|
|||||||
{
|
{
|
||||||
if (gMain.callback2 == CB2_Overworld)
|
if (gMain.callback2 == CB2_Overworld)
|
||||||
{
|
{
|
||||||
if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK)
|
if (QL_GetPlaybackState() == QL_PLAYBACK_STATE_RUNNING || gQuestLogState == QL_STATE_PLAYBACK)
|
||||||
DoCB1_Overworld_QuestLogPlayback();
|
DoCB1_Overworld_QuestLogPlayback();
|
||||||
else
|
else
|
||||||
DoCB1_Overworld(gMain.newKeys, gMain.heldKeys);
|
DoCB1_Overworld(gMain.newKeys, gMain.heldKeys);
|
||||||
@@ -1458,7 +1458,7 @@ static void OverworldBasic(void)
|
|||||||
RunTasks();
|
RunTasks();
|
||||||
AnimateSprites();
|
AnimateSprites();
|
||||||
CameraUpdate();
|
CameraUpdate();
|
||||||
sub_8115798();
|
SetQuestLogEvent_Arrived();
|
||||||
UpdateCameraPanning();
|
UpdateCameraPanning();
|
||||||
BuildOamBuffer();
|
BuildOamBuffer();
|
||||||
UpdatePaletteFade();
|
UpdatePaletteFade();
|
||||||
@@ -2239,8 +2239,8 @@ static bool32 LoadMap_QLPlayback(u8 *state)
|
|||||||
InitOverworldBgs();
|
InitOverworldBgs();
|
||||||
FieldClearVBlankHBlankCallbacks();
|
FieldClearVBlankHBlankCallbacks();
|
||||||
QuestLog_InitPalettesBackup();
|
QuestLog_InitPalettesBackup();
|
||||||
sub_81113E4();
|
QL_CopySaveState();
|
||||||
sub_8111438();
|
QL_ResetPartyAndPC();
|
||||||
if (GetQuestLogStartType() == QL_START_WARP)
|
if (GetQuestLogStartType() == QL_START_WARP)
|
||||||
{
|
{
|
||||||
gExitStairsMovementDisabled = FALSE;
|
gExitStairsMovementDisabled = FALSE;
|
||||||
@@ -2254,7 +2254,7 @@ static bool32 LoadMap_QLPlayback(u8 *state)
|
|||||||
(*state)++;
|
(*state)++;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
sub_8110FCC();
|
QL_InitSceneObjectsAndActions();
|
||||||
(*state)++;
|
(*state)++;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
@@ -2296,7 +2296,7 @@ static bool32 LoadMap_QLPlayback(u8 *state)
|
|||||||
break;
|
break;
|
||||||
case 10:
|
case 10:
|
||||||
InitTilesetAnimations();
|
InitTilesetAnimations();
|
||||||
sub_815A540();
|
QL_TryStopSurfing();
|
||||||
(*state)++;
|
(*state)++;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
+37
-43
@@ -3355,12 +3355,12 @@ static void SwitchPartyMon(void)
|
|||||||
|
|
||||||
static void SetSwitchedPartyOrderQuestLogEvent(void)
|
static void SetSwitchedPartyOrderQuestLogEvent(void)
|
||||||
{
|
{
|
||||||
u16 *buffer = Alloc(2 * sizeof(u16));
|
struct QuestLogEvent_SwitchedPartyOrder * data = Alloc(sizeof(*data));
|
||||||
|
|
||||||
buffer[0] = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG);
|
data->species1 = GetMonData(&gPlayerParty[gPartyMenu.slotId], MON_DATA_SPECIES_OR_EGG);
|
||||||
buffer[1] = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES_OR_EGG);
|
data->species2 = GetMonData(&gPlayerParty[gPartyMenu.slotId2], MON_DATA_SPECIES_OR_EGG);
|
||||||
SetQuestLogEvent(QL_EVENT_SWITCHED_PARTY_ORDER, buffer);
|
SetQuestLogEvent(QL_EVENT_SWITCHED_PARTY_ORDER, (const u16 *)data);
|
||||||
Free(buffer);
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finish switching mons or using Softboiled
|
// Finish switching mons or using Softboiled
|
||||||
@@ -4131,67 +4131,61 @@ static bool8 SetUpFieldMove_Waterfall(void)
|
|||||||
|
|
||||||
static void SetSwappedHeldItemQuestLogEvent(struct Pokemon *mon, u16 item, u16 item2)
|
static void SetSwappedHeldItemQuestLogEvent(struct Pokemon *mon, u16 item, u16 item2)
|
||||||
{
|
{
|
||||||
u16 *ptr = Alloc(4 * sizeof(u16));
|
struct QuestLogEvent_SwappedHeldItem *data = Alloc(sizeof(*data));
|
||||||
|
|
||||||
ptr[2] = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
data->species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||||
ptr[0] = item;
|
data->takenItemId = item;
|
||||||
ptr[1] = item2;
|
data->givenItemId = item2;
|
||||||
if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM)
|
if (gPartyMenu.action == PARTY_ACTION_GIVE_PC_ITEM)
|
||||||
SetQuestLogEvent(QL_EVENT_SWAPPED_HELD_ITEM_PC, ptr);
|
SetQuestLogEvent(QL_EVENT_SWAPPED_HELD_ITEM_PC, (void *)data);
|
||||||
else
|
else
|
||||||
SetQuestLogEvent(QL_EVENT_SWAPPED_HELD_ITEM, ptr);
|
SetQuestLogEvent(QL_EVENT_SWAPPED_HELD_ITEM, (void *)data);
|
||||||
Free(ptr);
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct FieldMoveWarpParams
|
|
||||||
{
|
|
||||||
u16 species;
|
|
||||||
u8 fieldMove;
|
|
||||||
u8 regionMapSectionId;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove)
|
static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove)
|
||||||
{
|
{
|
||||||
struct FieldMoveWarpParams *ptr = Alloc(sizeof(*ptr));
|
struct QuestLogEvent_FieldMove *data = Alloc(sizeof(*data));
|
||||||
|
|
||||||
ptr->species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
data->species = GetMonData(mon, MON_DATA_SPECIES_OR_EGG);
|
||||||
ptr->fieldMove = fieldMove;
|
data->fieldMove = fieldMove;
|
||||||
switch (ptr->fieldMove)
|
switch (data->fieldMove)
|
||||||
{
|
{
|
||||||
case FIELD_MOVE_TELEPORT:
|
case FIELD_MOVE_TELEPORT:
|
||||||
ptr->regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum)->regionMapSectionId;
|
data->mapSec = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->lastHealLocation.mapGroup, gSaveBlock1Ptr->lastHealLocation.mapNum)->regionMapSectionId;
|
||||||
break;
|
break;
|
||||||
case FIELD_MOVE_DIG:
|
case FIELD_MOVE_DIG:
|
||||||
ptr->regionMapSectionId = gMapHeader.regionMapSectionId;
|
data->mapSec = gMapHeader.regionMapSectionId;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
ptr->regionMapSectionId = 0xFF;
|
data->mapSec = 0xFF;
|
||||||
}
|
}
|
||||||
SetQuestLogEvent(QL_EVENT_USED_FIELD_MOVE, (u16 *)ptr);
|
SetQuestLogEvent(QL_EVENT_USED_FIELD_MOVE, (const u16 *)data);
|
||||||
Free(ptr);
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetUsedFlyQuestLogEvent(const u8 *healLocCtrlData)
|
void SetUsedFlyQuestLogEvent(const u8 *healLocCtrlData)
|
||||||
{
|
{
|
||||||
const struct MapHeader *mapHeader;
|
const struct MapHeader *mapHeader;
|
||||||
struct FieldMoveWarpParams *ptr2;
|
struct QuestLogEvent_FieldMove *data;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
s8 mapGroup;
|
s8 group;
|
||||||
s8 mapNum;
|
s8 num;
|
||||||
u32 unk_4;
|
u32 unused;
|
||||||
} *ptr = Alloc(sizeof(*ptr));
|
} *map = Alloc(sizeof(*map));
|
||||||
|
|
||||||
ptr->mapGroup = healLocCtrlData[0];
|
map->group = healLocCtrlData[0];
|
||||||
ptr->mapNum = healLocCtrlData[1];
|
map->num = healLocCtrlData[1];
|
||||||
mapHeader = Overworld_GetMapHeaderByGroupAndId(ptr->mapGroup, ptr->mapNum);
|
mapHeader = Overworld_GetMapHeaderByGroupAndId(map->group, map->num);
|
||||||
Free(ptr);
|
Free(map);
|
||||||
ptr2 = Alloc(4);
|
|
||||||
ptr2->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES_OR_EGG);
|
data = Alloc(sizeof(*data));
|
||||||
ptr2->fieldMove = FIELD_MOVE_FLY;
|
data->species = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_SPECIES_OR_EGG);
|
||||||
ptr2->regionMapSectionId = mapHeader->regionMapSectionId;
|
data->fieldMove = FIELD_MOVE_FLY;
|
||||||
SetQuestLogEvent(QL_EVENT_USED_FIELD_MOVE, (u16 *)ptr2);
|
data->mapSec = mapHeader->regionMapSectionId;
|
||||||
Free(ptr2);
|
SetQuestLogEvent(QL_EVENT_USED_FIELD_MOVE, (const u16 *)data);
|
||||||
|
Free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CB2_ShowPartyMenuForItemUse(void)
|
void CB2_ShowPartyMenuForItemUse(void)
|
||||||
|
|||||||
@@ -2672,7 +2672,7 @@ static void InitCursorItemIcon(void)
|
|||||||
static void SetPokeStorageQuestLogEvent(u8 action)
|
static void SetPokeStorageQuestLogEvent(u8 action)
|
||||||
{
|
{
|
||||||
u16 event;
|
u16 event;
|
||||||
struct PokeStorageQuestLogData *questLogData;
|
struct QuestLogEvent_MovedBoxMon *questLogData;
|
||||||
u8 box1 = GetMovingMonOriginalBoxId();
|
u8 box1 = GetMovingMonOriginalBoxId();
|
||||||
u16 species1 = gStorage->displayMonSpecies;
|
u16 species1 = gStorage->displayMonSpecies;
|
||||||
u16 species2;
|
u16 species2;
|
||||||
@@ -2687,7 +2687,7 @@ static void SetPokeStorageQuestLogEvent(u8 action)
|
|||||||
box2 = StorageGetCurrentBox();
|
box2 = StorageGetCurrentBox();
|
||||||
species2 = GetCurrentBoxMonData(GetBoxCursorPosition(), MON_DATA_SPECIES_OR_EGG);
|
species2 = GetCurrentBoxMonData(GetBoxCursorPosition(), MON_DATA_SPECIES_OR_EGG);
|
||||||
}
|
}
|
||||||
questLogData = &gStorage->pokeStorageQuestLogData;
|
questLogData = &gStorage->questLogData;
|
||||||
|
|
||||||
switch (action)
|
switch (action)
|
||||||
{
|
{
|
||||||
|
|||||||
+650
-583
File diff suppressed because it is too large
Load Diff
+55
-71
@@ -7,30 +7,15 @@
|
|||||||
#include "quest_log.h"
|
#include "quest_log.h"
|
||||||
#include "constants/trainers.h"
|
#include "constants/trainers.h"
|
||||||
|
|
||||||
struct QuestLogStruct_TrainerBattleRecord
|
static void GetLinkMultiBattlePlayerIndexes(s32 *, s32 *);
|
||||||
{
|
|
||||||
u16 v0;
|
|
||||||
u16 v2;
|
|
||||||
u16 v4;
|
|
||||||
u8 v6;
|
|
||||||
u8 v7;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct QuestLogStruct_WildBattleRecord
|
|
||||||
{
|
|
||||||
u16 defeatedSpecies;
|
|
||||||
u16 caughtSpecies;
|
|
||||||
u8 mapSec;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void sub_812C334(s32 *, s32 *);
|
|
||||||
|
|
||||||
void TrySetQuestLogBattleEvent(void)
|
void TrySetQuestLogBattleEvent(void)
|
||||||
{
|
{
|
||||||
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_OLD_MAN_TUTORIAL | BATTLE_TYPE_POKEDUDE)) && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
|
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_OLD_MAN_TUTORIAL | BATTLE_TYPE_POKEDUDE)) && (gBattleOutcome == B_OUTCOME_WON || gBattleOutcome == B_OUTCOME_CAUGHT))
|
||||||
{
|
{
|
||||||
struct QuestLogStruct_TrainerBattleRecord * questLogTrainerBattleRecord = Alloc(sizeof(struct QuestLogStruct_TrainerBattleRecord));
|
// Why allocate both of these? Only one will ever be used at a time
|
||||||
struct QuestLogStruct_WildBattleRecord * questLogWildBattleRecord = Alloc(sizeof(struct QuestLogStruct_WildBattleRecord));
|
struct QuestLogEvent_TrainerBattle * trainerData = Alloc(sizeof(*trainerData));
|
||||||
|
struct QuestLogEvent_WildBattle * wildData = Alloc(sizeof(*wildData));
|
||||||
u16 eventId;
|
u16 eventId;
|
||||||
u16 playerEndingHP;
|
u16 playerEndingHP;
|
||||||
u16 playerMaxHP;
|
u16 playerMaxHP;
|
||||||
@@ -52,81 +37,81 @@ void TrySetQuestLogBattleEvent(void)
|
|||||||
eventId = QL_EVENT_DEFEATED_TRAINER;
|
eventId = QL_EVENT_DEFEATED_TRAINER;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
questLogTrainerBattleRecord->v0 = gTrainerBattleOpponent_A;
|
trainerData->trainerId = gTrainerBattleOpponent_A;
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
|
||||||
{
|
{
|
||||||
questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies;
|
trainerData->speciesOpponent = gBattleResults.lastOpponentSpecies;
|
||||||
if (GetBattlerSide(gBattleStruct->field_182) == B_SIDE_PLAYER)
|
|
||||||
questLogTrainerBattleRecord->v4 = gBattleMons[gBattleStruct->field_182].species;
|
// Decide which of the pokemon on the player's side to mention as the victor
|
||||||
|
if (GetBattlerSide(gBattleStruct->lastAttackerToFaintOpponent) == B_SIDE_PLAYER)
|
||||||
|
trainerData->speciesPlayer = gBattleMons[gBattleStruct->lastAttackerToFaintOpponent].species;
|
||||||
else if (gBattleMons[GetBattlerAtPosition(0)].hp != 0)
|
else if (gBattleMons[GetBattlerAtPosition(0)].hp != 0)
|
||||||
questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species;
|
trainerData->speciesPlayer = gBattleMons[GetBattlerAtPosition(0)].species;
|
||||||
else
|
else
|
||||||
questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(2)].species;
|
trainerData->speciesPlayer = gBattleMons[GetBattlerAtPosition(2)].species;
|
||||||
|
|
||||||
playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp + gBattleMons[GetBattlerAtPosition(2)].hp;
|
playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp + gBattleMons[GetBattlerAtPosition(2)].hp;
|
||||||
playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP + gBattleMons[GetBattlerAtPosition(2)].maxHP;
|
playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP + gBattleMons[GetBattlerAtPosition(2)].maxHP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
questLogTrainerBattleRecord->v2 = gBattleResults.lastOpponentSpecies;
|
trainerData->speciesOpponent = gBattleResults.lastOpponentSpecies;
|
||||||
questLogTrainerBattleRecord->v4 = gBattleMons[GetBattlerAtPosition(0)].species;
|
trainerData->speciesPlayer = gBattleMons[GetBattlerAtPosition(0)].species;
|
||||||
playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp;
|
playerEndingHP = gBattleMons[GetBattlerAtPosition(0)].hp;
|
||||||
playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP;
|
playerMaxHP = gBattleMons[GetBattlerAtPosition(0)].maxHP;
|
||||||
}
|
}
|
||||||
questLogTrainerBattleRecord->v7 = GetCurrentRegionMapSectionId();
|
trainerData->mapSec = GetCurrentRegionMapSectionId();
|
||||||
questLogTrainerBattleRecord->v6 = 0;
|
|
||||||
|
// Calculate fractional HP loss (determines flavor text, e.g. "handily" vs "somehow" defeated trainer)
|
||||||
|
trainerData->hpFractionId = 0;
|
||||||
if (playerEndingHP < playerMaxHP / 3 * 2)
|
if (playerEndingHP < playerMaxHP / 3 * 2)
|
||||||
questLogTrainerBattleRecord->v6 = 1;
|
trainerData->hpFractionId++;
|
||||||
if (playerEndingHP < playerMaxHP / 3)
|
if (playerEndingHP < playerMaxHP / 3)
|
||||||
questLogTrainerBattleRecord->v6++;
|
trainerData->hpFractionId++;
|
||||||
SetQuestLogEvent(eventId, (const u16 *)questLogTrainerBattleRecord);
|
|
||||||
|
SetQuestLogEvent(eventId, (const u16 *)trainerData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gBattleOutcome == B_OUTCOME_WON)
|
if (gBattleOutcome == B_OUTCOME_WON)
|
||||||
{
|
{
|
||||||
questLogWildBattleRecord->defeatedSpecies = GetMonData(gEnemyParty, MON_DATA_SPECIES);
|
wildData->defeatedSpecies = GetMonData(gEnemyParty, MON_DATA_SPECIES);
|
||||||
questLogWildBattleRecord->caughtSpecies = SPECIES_NONE;
|
wildData->caughtSpecies = SPECIES_NONE;
|
||||||
}
|
}
|
||||||
else // gBattleOutcome == B_OUTCOME_CAUGHT
|
else // gBattleOutcome == B_OUTCOME_CAUGHT
|
||||||
{
|
{
|
||||||
questLogWildBattleRecord->defeatedSpecies = SPECIES_NONE;
|
wildData->defeatedSpecies = SPECIES_NONE;
|
||||||
questLogWildBattleRecord->caughtSpecies = GetMonData(gEnemyParty, MON_DATA_SPECIES);
|
wildData->caughtSpecies = GetMonData(gEnemyParty, MON_DATA_SPECIES);
|
||||||
}
|
}
|
||||||
questLogWildBattleRecord->mapSec = GetCurrentRegionMapSectionId();
|
wildData->mapSec = GetCurrentRegionMapSectionId();
|
||||||
SetQuestLogEvent(QL_EVENT_DEFEATED_WILD_MON, (const u16 *)questLogWildBattleRecord);
|
SetQuestLogEvent(QL_EVENT_DEFEATED_WILD_MON, (const u16 *)wildData);
|
||||||
}
|
}
|
||||||
Free(questLogTrainerBattleRecord);
|
Free(trainerData);
|
||||||
Free(questLogWildBattleRecord);
|
Free(wildData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
struct QuestLogStruct_LinkBattleRecord
|
|
||||||
{
|
|
||||||
u8 v0;
|
|
||||||
u8 v1[3][7];
|
|
||||||
};
|
|
||||||
|
|
||||||
void TrySetQuestLogLinkBattleEvent(void)
|
void TrySetQuestLogLinkBattleEvent(void)
|
||||||
{
|
{
|
||||||
s32 sp0;
|
s32 partnerIdx;
|
||||||
s32 sp4[2];
|
s32 opponentIdxs[2];
|
||||||
u16 eventId;
|
u16 eventId;
|
||||||
s32 r3;
|
s32 i;
|
||||||
bool32 inUnionRoom;
|
bool32 inUnionRoom;
|
||||||
|
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||||
{
|
{
|
||||||
struct QuestLogStruct_LinkBattleRecord * r5 = Alloc(sizeof(struct QuestLogStruct_LinkBattleRecord));
|
struct QuestLogEvent_LinkBattle * data = Alloc(sizeof(*data));
|
||||||
r5->v0 = gBattleOutcome - 1; // 0 = won, 1 = lost, 2 = drew
|
data->outcome = gBattleOutcome - 1; // 0 = won, 1 = lost, 2 = drew
|
||||||
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
|
||||||
{
|
{
|
||||||
eventId = QL_EVENT_LINK_BATTLED_MULTI;
|
eventId = QL_EVENT_LINK_BATTLED_MULTI;
|
||||||
sub_812C334(&sp0, sp4);
|
GetLinkMultiBattlePlayerIndexes(&partnerIdx, opponentIdxs);
|
||||||
for (r3 = 0; r3 < 7; r3++)
|
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||||
{
|
{
|
||||||
r5->v1[0][r3] = gLinkPlayers[sp0].name[r3];
|
data->playerNames[0][i] = gLinkPlayers[partnerIdx].name[i];
|
||||||
r5->v1[1][r3] = gLinkPlayers[sp4[0]].name[r3];
|
data->playerNames[1][i] = gLinkPlayers[opponentIdxs[0]].name[i];
|
||||||
r5->v1[2][r3] = gLinkPlayers[sp4[1]].name[r3];
|
data->playerNames[2][i] = gLinkPlayers[opponentIdxs[1]].name[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -141,26 +126,25 @@ void TrySetQuestLogLinkBattleEvent(void)
|
|||||||
if (inUnionRoom == TRUE)
|
if (inUnionRoom == TRUE)
|
||||||
eventId = QL_EVENT_LINK_BATTLED_UNION;
|
eventId = QL_EVENT_LINK_BATTLED_UNION;
|
||||||
}
|
}
|
||||||
for (r3 = 0; r3 < 7; r3++)
|
|
||||||
{
|
for (i = 0; i < PLAYER_NAME_LENGTH; i++)
|
||||||
r5->v1[0][r3] = gLinkPlayers[gBattleStruct->multiplayerId ^ 1].name[r3];
|
data->playerNames[0][i] = gLinkPlayers[gBattleStruct->multiplayerId ^ 1].name[i];
|
||||||
}
|
}
|
||||||
}
|
SetQuestLogEvent(eventId, (const u16 *)data);
|
||||||
SetQuestLogEvent(eventId, (const u16 *)r5);
|
Free(data);
|
||||||
Free(r5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sub_812C334(s32 * a0, s32 * a1)
|
static void GetLinkMultiBattlePlayerIndexes(s32 * partnerIdx, s32 * opponentIdxs)
|
||||||
{
|
{
|
||||||
s32 r5;
|
s32 i;
|
||||||
s32 _optimized_out = 0;
|
s32 numOpponentsFound = 0;
|
||||||
u8 r2 = gLinkPlayers[gBattleStruct->multiplayerId].id ^ 2;
|
u8 partnerId = gLinkPlayers[gBattleStruct->multiplayerId].id ^ 2;
|
||||||
for (r5 = 0; r5 < 4; r5++)
|
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
|
||||||
{
|
{
|
||||||
if (r2 == gLinkPlayers[r5].id)
|
if (partnerId == gLinkPlayers[i].id)
|
||||||
a0[0] = r5;
|
*partnerIdx = i;
|
||||||
else if (r5 != gBattleStruct->multiplayerId)
|
else if (i != gBattleStruct->multiplayerId)
|
||||||
a1[_optimized_out++] = r5;
|
opponentIdxs[numOpponentsFound++] = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1105
-1009
File diff suppressed because it is too large
Load Diff
+43
-43
@@ -4,51 +4,51 @@
|
|||||||
#include "field_player_avatar.h"
|
#include "field_player_avatar.h"
|
||||||
#include "metatile_behavior.h"
|
#include "metatile_behavior.h"
|
||||||
|
|
||||||
void SetQuestLogObjectEventsData(struct QuestLog * questLog)
|
void QL_RecordObjects(struct QuestLogScene * questLog)
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
|
|
||||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||||
{
|
{
|
||||||
questLog->unk_008[i].active = gObjectEvents[i].active;
|
questLog->objectEvents[i].active = gObjectEvents[i].active;
|
||||||
questLog->unk_008[i].triggerGroundEffectsOnStop = gObjectEvents[i].triggerGroundEffectsOnStop;
|
questLog->objectEvents[i].triggerGroundEffectsOnStop = gObjectEvents[i].triggerGroundEffectsOnStop;
|
||||||
questLog->unk_008[i].disableCoveringGroundEffects = gObjectEvents[i].disableCoveringGroundEffects;
|
questLog->objectEvents[i].disableCoveringGroundEffects = gObjectEvents[i].disableCoveringGroundEffects;
|
||||||
questLog->unk_008[i].landingJump = gObjectEvents[i].landingJump;
|
questLog->objectEvents[i].landingJump = gObjectEvents[i].landingJump;
|
||||||
questLog->unk_008[i].frozen = gObjectEvents[i].frozen;
|
questLog->objectEvents[i].frozen = gObjectEvents[i].frozen;
|
||||||
questLog->unk_008[i].facingDirectionLocked = gObjectEvents[i].facingDirectionLocked;
|
questLog->objectEvents[i].facingDirectionLocked = gObjectEvents[i].facingDirectionLocked;
|
||||||
questLog->unk_008[i].disableAnim = gObjectEvents[i].disableAnim;
|
questLog->objectEvents[i].disableAnim = gObjectEvents[i].disableAnim;
|
||||||
questLog->unk_008[i].enableAnim = gObjectEvents[i].enableAnim;
|
questLog->objectEvents[i].enableAnim = gObjectEvents[i].enableAnim;
|
||||||
questLog->unk_008[i].inanimate = gObjectEvents[i].inanimate;
|
questLog->objectEvents[i].inanimate = gObjectEvents[i].inanimate;
|
||||||
questLog->unk_008[i].invisible = gObjectEvents[i].invisible;
|
questLog->objectEvents[i].invisible = gObjectEvents[i].invisible;
|
||||||
questLog->unk_008[i].offScreen = gObjectEvents[i].offScreen;
|
questLog->objectEvents[i].offScreen = gObjectEvents[i].offScreen;
|
||||||
questLog->unk_008[i].trackedByCamera = gObjectEvents[i].trackedByCamera;
|
questLog->objectEvents[i].trackedByCamera = gObjectEvents[i].trackedByCamera;
|
||||||
questLog->unk_008[i].isPlayer = gObjectEvents[i].isPlayer;
|
questLog->objectEvents[i].isPlayer = gObjectEvents[i].isPlayer;
|
||||||
questLog->unk_008[i].spriteAnimPausedBackup = gObjectEvents[i].spriteAnimPausedBackup;
|
questLog->objectEvents[i].spriteAnimPausedBackup = gObjectEvents[i].spriteAnimPausedBackup;
|
||||||
questLog->unk_008[i].spriteAffineAnimPausedBackup = gObjectEvents[i].spriteAffineAnimPausedBackup;
|
questLog->objectEvents[i].spriteAffineAnimPausedBackup = gObjectEvents[i].spriteAffineAnimPausedBackup;
|
||||||
questLog->unk_008[i].disableJumpLandingGroundEffect = gObjectEvents[i].disableJumpLandingGroundEffect;
|
questLog->objectEvents[i].disableJumpLandingGroundEffect = gObjectEvents[i].disableJumpLandingGroundEffect;
|
||||||
questLog->unk_008[i].fixedPriority = gObjectEvents[i].fixedPriority;
|
questLog->objectEvents[i].fixedPriority = gObjectEvents[i].fixedPriority;
|
||||||
questLog->unk_008[i].mapobj_unk_18 = gObjectEvents[i].facingDirection;
|
questLog->objectEvents[i].facingDirection = gObjectEvents[i].facingDirection;
|
||||||
questLog->unk_008[i].mapobj_unk_0B_0 = gObjectEvents[i].currentElevation;
|
questLog->objectEvents[i].currentElevation = gObjectEvents[i].currentElevation;
|
||||||
questLog->unk_008[i].elevation = gObjectEvents[i].previousElevation;
|
questLog->objectEvents[i].previousElevation = gObjectEvents[i].previousElevation;
|
||||||
questLog->unk_008[i].graphicsId = gObjectEvents[i].graphicsId;
|
questLog->objectEvents[i].graphicsId = gObjectEvents[i].graphicsId;
|
||||||
questLog->unk_008[i].animPattern = gObjectEvents[i].movementType;
|
questLog->objectEvents[i].movementType = gObjectEvents[i].movementType;
|
||||||
questLog->unk_008[i].trainerType = gObjectEvents[i].trainerType;
|
questLog->objectEvents[i].trainerType = gObjectEvents[i].trainerType;
|
||||||
questLog->unk_008[i].localId = gObjectEvents[i].localId;
|
questLog->objectEvents[i].localId = gObjectEvents[i].localId;
|
||||||
questLog->unk_008[i].mapNum = gObjectEvents[i].mapNum;
|
questLog->objectEvents[i].mapNum = gObjectEvents[i].mapNum;
|
||||||
questLog->unk_008[i].mapGroup = gObjectEvents[i].mapGroup;
|
questLog->objectEvents[i].mapGroup = gObjectEvents[i].mapGroup;
|
||||||
questLog->unk_008[i].x = gObjectEvents[i].currentCoords.x;
|
questLog->objectEvents[i].x = gObjectEvents[i].currentCoords.x;
|
||||||
questLog->unk_008[i].y = gObjectEvents[i].currentCoords.y;
|
questLog->objectEvents[i].y = gObjectEvents[i].currentCoords.y;
|
||||||
questLog->unk_008[i].trainerRange_berryTreeId = gObjectEvents[i].trainerRange_berryTreeId;
|
questLog->objectEvents[i].trainerRange_berryTreeId = gObjectEvents[i].trainerRange_berryTreeId;
|
||||||
questLog->unk_008[i].previousMetatileBehavior = gObjectEvents[i].previousMetatileBehavior;
|
questLog->objectEvents[i].previousMetatileBehavior = gObjectEvents[i].previousMetatileBehavior;
|
||||||
questLog->unk_008[i].directionSequenceIndex = gObjectEvents[i].directionSequenceIndex;
|
questLog->objectEvents[i].directionSequenceIndex = gObjectEvents[i].directionSequenceIndex;
|
||||||
questLog->unk_008[i].animId = gObjectEvents[i].playerCopyableMovement;
|
questLog->objectEvents[i].animId = gObjectEvents[i].playerCopyableMovement;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const struct ObjectEventTemplate * templates)
|
void QL_LoadObjects(const struct QuestLogScene * questLog, const struct ObjectEventTemplate * templates)
|
||||||
{
|
{
|
||||||
u32 i, j;
|
u32 i, j;
|
||||||
const struct QuestLogObjectEvent * questLogObjectEvents = questLog->unk_008;
|
const struct QuestLogObjectEvent * questLogObjectEvents = questLog->objectEvents;
|
||||||
|
|
||||||
CpuFill16(0, gObjectEvents, sizeof(gObjectEvents));
|
CpuFill16(0, gObjectEvents, sizeof(gObjectEvents));
|
||||||
|
|
||||||
@@ -71,11 +71,11 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str
|
|||||||
gObjectEvents[i].spriteAffineAnimPausedBackup = questLogObjectEvents[i].spriteAffineAnimPausedBackup;
|
gObjectEvents[i].spriteAffineAnimPausedBackup = questLogObjectEvents[i].spriteAffineAnimPausedBackup;
|
||||||
gObjectEvents[i].disableJumpLandingGroundEffect = questLogObjectEvents[i].disableJumpLandingGroundEffect;
|
gObjectEvents[i].disableJumpLandingGroundEffect = questLogObjectEvents[i].disableJumpLandingGroundEffect;
|
||||||
gObjectEvents[i].fixedPriority = questLogObjectEvents[i].fixedPriority;
|
gObjectEvents[i].fixedPriority = questLogObjectEvents[i].fixedPriority;
|
||||||
gObjectEvents[i].facingDirection = questLogObjectEvents[i].mapobj_unk_18;
|
gObjectEvents[i].facingDirection = questLogObjectEvents[i].facingDirection;
|
||||||
gObjectEvents[i].currentElevation = questLogObjectEvents[i].mapobj_unk_0B_0;
|
gObjectEvents[i].currentElevation = questLogObjectEvents[i].currentElevation;
|
||||||
gObjectEvents[i].previousElevation = questLogObjectEvents[i].elevation;
|
gObjectEvents[i].previousElevation = questLogObjectEvents[i].previousElevation;
|
||||||
gObjectEvents[i].graphicsId = questLogObjectEvents[i].graphicsId;
|
gObjectEvents[i].graphicsId = questLogObjectEvents[i].graphicsId;
|
||||||
gObjectEvents[i].movementType = questLogObjectEvents[i].animPattern;
|
gObjectEvents[i].movementType = questLogObjectEvents[i].movementType;
|
||||||
gObjectEvents[i].trainerType = questLogObjectEvents[i].trainerType;
|
gObjectEvents[i].trainerType = questLogObjectEvents[i].trainerType;
|
||||||
gObjectEvents[i].localId = questLogObjectEvents[i].localId;
|
gObjectEvents[i].localId = questLogObjectEvents[i].localId;
|
||||||
gObjectEvents[i].mapNum = questLogObjectEvents[i].mapNum;
|
gObjectEvents[i].mapNum = questLogObjectEvents[i].mapNum;
|
||||||
@@ -87,12 +87,12 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str
|
|||||||
gObjectEvents[i].directionSequenceIndex = questLogObjectEvents[i].directionSequenceIndex;
|
gObjectEvents[i].directionSequenceIndex = questLogObjectEvents[i].directionSequenceIndex;
|
||||||
gObjectEvents[i].playerCopyableMovement = questLogObjectEvents[i].animId;
|
gObjectEvents[i].playerCopyableMovement = questLogObjectEvents[i].animId;
|
||||||
|
|
||||||
for (j = 0; j < 0x40; j++)
|
for (j = 0; j < OBJECT_EVENT_TEMPLATES_COUNT; j++)
|
||||||
{
|
{
|
||||||
if (gObjectEvents[i].localId == templates[j].localId)
|
if (gObjectEvents[i].localId == templates[j].localId)
|
||||||
{
|
{
|
||||||
gObjectEvents[i].initialCoords.x = templates[j].x + 7;
|
gObjectEvents[i].initialCoords.x = templates[j].x + MAP_OFFSET;
|
||||||
gObjectEvents[i].initialCoords.y = templates[j].y + 7;
|
gObjectEvents[i].initialCoords.y = templates[j].y + MAP_OFFSET;
|
||||||
gObjectEvents[i].rangeX = templates[j].objUnion.normal.movementRangeX;
|
gObjectEvents[i].rangeX = templates[j].objUnion.normal.movementRangeX;
|
||||||
gObjectEvents[i].rangeY = templates[j].objUnion.normal.movementRangeY;
|
gObjectEvents[i].rangeY = templates[j].objUnion.normal.movementRangeY;
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ void SetSav1ObjectEventsFromQuestLog(const struct QuestLog * questLog, const str
|
|||||||
CpuCopy16(gObjectEvents, gSaveBlock1Ptr->objectEvents, sizeof(gObjectEvents));
|
CpuCopy16(gObjectEvents, gSaveBlock1Ptr->objectEvents, sizeof(gObjectEvents));
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_815A540(void)
|
void QL_TryStopSurfing(void)
|
||||||
{
|
{
|
||||||
if (gQuestLogState == QL_STATE_PLAYBACK)
|
if (gQuestLogState == QL_STATE_PLAYBACK)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ void QuestLogUpdatePlayerSprite(u8 state)
|
|||||||
|
|
||||||
bool32 QuestLogTryRecordPlayerAvatarGfxTransition(u8 state)
|
bool32 QuestLogTryRecordPlayerAvatarGfxTransition(u8 state)
|
||||||
{
|
{
|
||||||
if (gQuestLogPlaybackState == 2)
|
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_RECORDING)
|
||||||
{
|
{
|
||||||
QuestLogRecordPlayerAvatarGfxTransition(state);
|
QuestLogRecordPlayerAvatarGfxTransition(state);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -77,7 +77,7 @@ static void QL_GfxTransition_Fish(void)
|
|||||||
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
|
||||||
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
|
struct Sprite *sprite = &gSprites[objectEvent->spriteId];
|
||||||
|
|
||||||
if (gQuestLogPlaybackState == 1 || gQuestLogPlaybackState == 3)
|
if (gQuestLogPlaybackState == QL_PLAYBACK_STATE_RUNNING || gQuestLogPlaybackState == QL_PLAYBACK_STATE_ACTION_END)
|
||||||
{
|
{
|
||||||
u8 taskId;
|
u8 taskId;
|
||||||
LockPlayerFieldControls();
|
LockPlayerFieldControls();
|
||||||
|
|||||||
+4
-4
@@ -1336,7 +1336,7 @@ static bool8 WaitForAorBPress(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK)
|
if (QL_GetPlaybackState() == QL_PLAYBACK_STATE_RUNNING || gQuestLogState == QL_STATE_PLAYBACK)
|
||||||
{
|
{
|
||||||
if (sQuestLogWaitButtonPressTimer == 120)
|
if (sQuestLogWaitButtonPressTimer == 120)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -1401,7 +1401,7 @@ bool8 ScrCmd_waitbuttonpress(struct ScriptContext * ctx)
|
|||||||
{
|
{
|
||||||
sQuestLogScriptContextPtr = ctx;
|
sQuestLogScriptContextPtr = ctx;
|
||||||
|
|
||||||
if (sub_8112CAC() == 1 || gQuestLogState == QL_STATE_PLAYBACK)
|
if (QL_GetPlaybackState() == QL_PLAYBACK_STATE_RUNNING || gQuestLogState == QL_STATE_PLAYBACK)
|
||||||
sQuestLogWaitButtonPressTimer = 0;
|
sQuestLogWaitButtonPressTimer = 0;
|
||||||
SetupNativeScript(ctx, WaitForAorBPress);
|
SetupNativeScript(ctx, WaitForAorBPress);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -1818,7 +1818,7 @@ bool8 ScrCmd_showmoneybox(struct ScriptContext * ctx)
|
|||||||
u8 y = ScriptReadByte(ctx);
|
u8 y = ScriptReadByte(ctx);
|
||||||
u8 ignore = ScriptReadByte(ctx);
|
u8 ignore = ScriptReadByte(ctx);
|
||||||
|
|
||||||
if (!ignore && QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
if (!ignore && QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE)
|
||||||
DrawMoneyBox(GetMoney(&gSaveBlock1Ptr->money), x, y);
|
DrawMoneyBox(GetMoney(&gSaveBlock1Ptr->money), x, y);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@@ -1848,7 +1848,7 @@ bool8 ScrCmd_showcoinsbox(struct ScriptContext * ctx)
|
|||||||
u8 x = ScriptReadByte(ctx);
|
u8 x = ScriptReadByte(ctx);
|
||||||
u8 y = ScriptReadByte(ctx);
|
u8 y = ScriptReadByte(ctx);
|
||||||
|
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE)
|
||||||
ShowCoinsWindow(GetCoins(), x, y);
|
ShowCoinsWindow(GetCoins(), x, y);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-13
@@ -715,7 +715,7 @@ static void DrawVerticalMultichoiceMenu(u8 left, u8 top, u8 mcId, u8 ignoreBpres
|
|||||||
u8 windowId;
|
u8 windowId;
|
||||||
const struct MenuAction * list;
|
const struct MenuAction * list;
|
||||||
|
|
||||||
if ((ignoreBpress & 2) || QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
if ((ignoreBpress & 2) || QL_AvoidDisplay(QL_DestroyAbortedDisplay) != TRUE)
|
||||||
{
|
{
|
||||||
ignoreBpress &= 1;
|
ignoreBpress &= 1;
|
||||||
count = sMultichoiceLists[mcId].count;
|
count = sMultichoiceLists[mcId].count;
|
||||||
@@ -860,11 +860,12 @@ bool8 ScriptMenu_YesNo(u8 unused, u8 stuff)
|
|||||||
if (FuncIsActiveTask(Task_YesNoMenu_HandleInput) == TRUE)
|
if (FuncIsActiveTask(Task_YesNoMenu_HandleInput) == TRUE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
gSpecialVar_Result = SCR_MENU_UNSET;
|
gSpecialVar_Result = SCR_MENU_UNSET;
|
||||||
if (!QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites))
|
|
||||||
{
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
DisplayYesNoMenuDefaultYes();
|
DisplayYesNoMenuDefaultYes();
|
||||||
CreateTask(Task_YesNoMenu_HandleInput, 80);
|
CreateTask(Task_YesNoMenu_HandleInput, 80);
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -915,8 +916,10 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore
|
|||||||
if (FuncIsActiveTask(Hask_MultichoiceGridMenu_HandleInput) == TRUE)
|
if (FuncIsActiveTask(Hask_MultichoiceGridMenu_HandleInput) == TRUE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
gSpecialVar_Result = SCR_MENU_UNSET;
|
gSpecialVar_Result = SCR_MENU_UNSET;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
|
||||||
{
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
list = sMultichoiceLists[multichoiceId].list;
|
list = sMultichoiceLists[multichoiceId].list;
|
||||||
count = sMultichoiceLists[multichoiceId].count;
|
count = sMultichoiceLists[multichoiceId].count;
|
||||||
width = GetMenuWidthFromList(list, count) + 1;
|
width = GetMenuWidthFromList(list, count) + 1;
|
||||||
@@ -928,7 +931,7 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, bool8 ignore
|
|||||||
MultichoiceGrid_PrintItems(gTasks[taskId].tWindowId, FONT_NORMAL_COPY_1, width * 8, 16, columnCount, rowCount, list);
|
MultichoiceGrid_PrintItems(gTasks[taskId].tWindowId, FONT_NORMAL_COPY_1, width * 8, 16, columnCount, rowCount, list);
|
||||||
MultichoiceGrid_InitCursor(gTasks[taskId].tWindowId, FONT_NORMAL_COPY_1, 0, 1, width * 8, columnCount, rowCount, 0);
|
MultichoiceGrid_InitCursor(gTasks[taskId].tWindowId, FONT_NORMAL_COPY_1, 0, 1, width * 8, columnCount, rowCount, 0);
|
||||||
ScheduleBgCopyTilemapToVram(0);
|
ScheduleBgCopyTilemapToVram(0);
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1057,7 +1060,7 @@ bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
|
|||||||
{
|
{
|
||||||
u8 spriteId;
|
u8 spriteId;
|
||||||
u8 taskId;
|
u8 taskId;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) == TRUE)
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (FindTaskIdByFunc(Task_ScriptShowMonPic) != TASK_NONE)
|
if (FindTaskIdByFunc(Task_ScriptShowMonPic) != TASK_NONE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1143,7 +1146,7 @@ bool8 OpenMuseumFossilPic(void)
|
|||||||
{
|
{
|
||||||
u8 spriteId;
|
u8 spriteId;
|
||||||
u8 taskId;
|
u8 taskId;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) == TRUE)
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (FindTaskIdByFunc(Task_WaitMuseumFossilPic) != TASK_NONE)
|
if (FindTaskIdByFunc(Task_WaitMuseumFossilPic) != TASK_NONE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1196,7 +1199,7 @@ static void DestroyScriptMenuWindow(u8 windowId)
|
|||||||
RemoveWindow(windowId);
|
RemoveWindow(windowId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QLPlaybackCB_DestroyScriptMenuMonPicSprites(void)
|
void QL_DestroyAbortedDisplay(void)
|
||||||
{
|
{
|
||||||
u8 taskId;
|
u8 taskId;
|
||||||
s16 *data;
|
s16 *data;
|
||||||
@@ -1234,8 +1237,10 @@ void DrawSeagallopDestinationMenu(void)
|
|||||||
u8 windowId;
|
u8 windowId;
|
||||||
u8 i;
|
u8 i;
|
||||||
gSpecialVar_Result = SCR_MENU_UNSET;
|
gSpecialVar_Result = SCR_MENU_UNSET;
|
||||||
if (QuestLog_SchedulePlaybackCB(QLPlaybackCB_DestroyScriptMenuMonPicSprites) != TRUE)
|
|
||||||
{
|
if (QL_AvoidDisplay(QL_DestroyAbortedDisplay) == TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
if (gSpecialVar_0x8005 == 1)
|
if (gSpecialVar_0x8005 == 1)
|
||||||
{
|
{
|
||||||
if (gSpecialVar_0x8004 < SEAGALLOP_FIVE_ISLAND)
|
if (gSpecialVar_0x8004 < SEAGALLOP_FIVE_ISLAND)
|
||||||
@@ -1275,7 +1280,6 @@ void DrawSeagallopDestinationMenu(void)
|
|||||||
Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, numItems, 0);
|
Menu_InitCursor(windowId, FONT_NORMAL, 0, 2, 16, numItems, 0);
|
||||||
CreateMCMenuInputHandlerTask(FALSE, numItems, windowId, MULTICHOICE_NONE);
|
CreateMCMenuInputHandlerTask(FALSE, numItems, windowId, MULTICHOICE_NONE);
|
||||||
ScheduleBgCopyTilemapToVram(0);
|
ScheduleBgCopyTilemapToVram(0);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
u16 GetSelectedSeagallopDestination(void)
|
u16 GetSelectedSeagallopDestination(void)
|
||||||
|
|||||||
+48
-51
@@ -69,17 +69,6 @@ struct ShopData
|
|||||||
/*0x18*/ u16 unk18;
|
/*0x18*/ u16 unk18;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MartHistory
|
|
||||||
{
|
|
||||||
/*0x00*/ u32 unk0;
|
|
||||||
/*0x04*/ u16 unk4;
|
|
||||||
/*0x06*/ u16 unk6;
|
|
||||||
/*0x08*/ u8 unk8;
|
|
||||||
/*0x09*/ u8 unk9;
|
|
||||||
/*0x0A*/ u8 unkA;
|
|
||||||
/*0x0B*/ u8 unkB;
|
|
||||||
}; /* size = 12 */
|
|
||||||
|
|
||||||
static EWRAM_DATA s16 sViewportObjectEvents[OBJECT_EVENTS_COUNT][4] = {0};
|
static EWRAM_DATA s16 sViewportObjectEvents[OBJECT_EVENTS_COUNT][4] = {0};
|
||||||
EWRAM_DATA struct ShopData gShopData = {0};
|
EWRAM_DATA struct ShopData gShopData = {0};
|
||||||
static EWRAM_DATA u8 sShopMenuWindowId = 0;
|
static EWRAM_DATA u8 sShopMenuWindowId = 0;
|
||||||
@@ -89,7 +78,7 @@ EWRAM_DATA u16 (*gShopTilemapBuffer3)[0x400] = {0};
|
|||||||
EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0};
|
EWRAM_DATA u16 (*gShopTilemapBuffer4)[0x400] = {0};
|
||||||
EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0};
|
EWRAM_DATA struct ListMenuItem *sShopMenuListMenu = {0};
|
||||||
static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0};
|
static EWRAM_DATA u8 (*sShopMenuItemStrings)[13] = {0};
|
||||||
EWRAM_DATA struct MartHistory gShopMenuHistory[2] = {0};
|
EWRAM_DATA struct QuestLogEvent_Shop sHistory[2] = {0};
|
||||||
|
|
||||||
//Function Declarations
|
//Function Declarations
|
||||||
static u8 CreateShopMenu(u8 a0);
|
static u8 CreateShopMenu(u8 a0);
|
||||||
@@ -146,7 +135,7 @@ static void ExitBuyMenu(u8 taskId);
|
|||||||
static void Task_ExitBuyMenu(u8 taskId);
|
static void Task_ExitBuyMenu(u8 taskId);
|
||||||
static void DebugFunc_PrintPurchaseDetails(u8 taskId);
|
static void DebugFunc_PrintPurchaseDetails(u8 taskId);
|
||||||
static void DebugFunc_PrintShopMenuHistoryBeforeClearMaybe(void);
|
static void DebugFunc_PrintShopMenuHistoryBeforeClearMaybe(void);
|
||||||
static void RecordQuestLogItemPurchase(void);
|
static void RecordTransactionForQuestLog(void);
|
||||||
|
|
||||||
static const struct MenuAction sShopMenuActions_BuySellQuit[] =
|
static const struct MenuAction sShopMenuActions_BuySellQuit[] =
|
||||||
{
|
{
|
||||||
@@ -305,7 +294,7 @@ static void CB2_GoToSellMenu(void)
|
|||||||
static void Task_HandleShopMenuQuit(u8 taskId)
|
static void Task_HandleShopMenuQuit(u8 taskId)
|
||||||
{
|
{
|
||||||
ClearShopMenuWindow();
|
ClearShopMenuWindow();
|
||||||
RecordQuestLogItemPurchase();
|
RecordTransactionForQuestLog();
|
||||||
DestroyTask(taskId);
|
DestroyTask(taskId);
|
||||||
if (gShopData.callback != NULL)
|
if (gShopData.callback != NULL)
|
||||||
gShopData.callback();
|
gShopData.callback();
|
||||||
@@ -995,7 +984,7 @@ static void BuyMenuTryMakePurchase(u8 taskId)
|
|||||||
{
|
{
|
||||||
BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney);
|
BuyMenuDisplayMessage(taskId, gText_HereYouGoThankYou, BuyMenuSubtractMoney);
|
||||||
DebugFunc_PrintPurchaseDetails(taskId);
|
DebugFunc_PrintPurchaseDetails(taskId);
|
||||||
RecordItemPurchase(tItemId, tItemCount, 1);
|
RecordItemTransaction(tItemId, tItemCount, QL_EVENT_BOUGHT_ITEM - QL_EVENT_USED_POKEMART);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -1066,59 +1055,67 @@ static void DebugFunc_PrintShopMenuHistoryBeforeClearMaybe(void)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecordItemPurchase(u16 item, u16 quantity, u8 a2)
|
// Records a transaction during a single shopping session.
|
||||||
|
// This is for the Quest Log to save information about the player's purchases/sales when they finish.
|
||||||
|
void RecordItemTransaction(u16 itemId, u16 quantity, u8 logEventId)
|
||||||
{
|
{
|
||||||
struct MartHistory *history;
|
struct QuestLogEvent_Shop *history;
|
||||||
|
|
||||||
if (gShopMenuHistory[0].unkA == a2)
|
// There should only be a single entry for buying/selling respectively,
|
||||||
|
// so if one has already been created then get it first.
|
||||||
|
if (sHistory[0].logEventId == logEventId)
|
||||||
{
|
{
|
||||||
history = &gShopMenuHistory[0];
|
history = &sHistory[0];
|
||||||
}
|
}
|
||||||
else if (gShopMenuHistory[1].unkA == a2)
|
else if (sHistory[1].logEventId == logEventId)
|
||||||
{
|
{
|
||||||
history = &gShopMenuHistory[1];
|
history = &sHistory[1];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (gShopMenuHistory[0].unkA == 0)
|
// First transaction of this type, save it in an empty slot
|
||||||
history = &gShopMenuHistory[0];
|
if (sHistory[0].logEventId == 0)
|
||||||
|
history = &sHistory[0];
|
||||||
else
|
else
|
||||||
history = &gShopMenuHistory[1];
|
history = &sHistory[1];
|
||||||
history->unkA = a2;
|
history->logEventId = logEventId;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (history->unk4 != 0)
|
// Set flag if this isn't the first time we've bought/sold in this session
|
||||||
|
if (history->lastItemId != ITEM_NONE)
|
||||||
|
history->hasMultipleTransactions = TRUE;
|
||||||
|
|
||||||
|
history->lastItemId = itemId;
|
||||||
|
|
||||||
|
// Add to number of items bought/sold
|
||||||
|
if (history->itemQuantity < 999)
|
||||||
{
|
{
|
||||||
history->unk9 = 1;
|
history->itemQuantity += quantity;
|
||||||
|
if (history->itemQuantity > 999)
|
||||||
|
history->itemQuantity = 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
history->unk4 = item;
|
// Add to amount of money spent buying or earned selling
|
||||||
if (history->unk6 < 999)
|
if (history->totalMoney < 999999)
|
||||||
{
|
{
|
||||||
history->unk6 += quantity;
|
// logEventId will either be 1 (bought) or 2 (sold)
|
||||||
if (history->unk6 > 999)
|
// so for buying it will add the full price and selling will add half price
|
||||||
history->unk6 = 999;
|
history->totalMoney += (ItemId_GetPrice(itemId) >> (logEventId - 1)) * quantity;
|
||||||
}
|
if (history->totalMoney > 999999)
|
||||||
|
history->totalMoney = 999999;
|
||||||
if (history->unk0 < 999999)
|
|
||||||
{
|
|
||||||
history->unk0 += (ItemId_GetPrice(item) >> (a2 - 1)) * quantity;
|
|
||||||
if (history->unk0 > 999999)
|
|
||||||
history->unk0 = 999999;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void RecordQuestLogItemPurchase(void)
|
// Will record QL_EVENT_BOUGHT_ITEM and/or QL_EVENT_SOLD_ITEM, or nothing.
|
||||||
|
static void RecordTransactionForQuestLog(void)
|
||||||
{
|
{
|
||||||
u16 v;
|
u16 eventId = sHistory[0].logEventId;
|
||||||
|
if (eventId != 0)
|
||||||
|
SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[0]);
|
||||||
|
|
||||||
v = gShopMenuHistory[0].unkA;
|
eventId = sHistory[1].logEventId;
|
||||||
if (v != 0)
|
if (eventId != 0)
|
||||||
SetQuestLogEvent(v + QL_EVENT_USED_POKEMART, (const u16 *)&gShopMenuHistory[0]);
|
SetQuestLogEvent(eventId + QL_EVENT_USED_POKEMART, (const u16 *)&sHistory[1]);
|
||||||
|
|
||||||
v = gShopMenuHistory[1].unkA;
|
|
||||||
if (v != 0)
|
|
||||||
SetQuestLogEvent(v + QL_EVENT_USED_POKEMART, (const u16 *)&gShopMenuHistory[1]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreatePokemartMenu(const u16 *itemsForSale)
|
void CreatePokemartMenu(const u16 *itemsForSale)
|
||||||
@@ -1127,9 +1124,9 @@ void CreatePokemartMenu(const u16 *itemsForSale)
|
|||||||
CreateShopMenu(MART_TYPE_REGULAR);
|
CreateShopMenu(MART_TYPE_REGULAR);
|
||||||
SetShopMenuCallback(ScriptContext_Enable);
|
SetShopMenuCallback(ScriptContext_Enable);
|
||||||
DebugFunc_PrintShopMenuHistoryBeforeClearMaybe();
|
DebugFunc_PrintShopMenuHistoryBeforeClearMaybe();
|
||||||
memset(&gShopMenuHistory, 0, sizeof(gShopMenuHistory));
|
memset(&sHistory, 0, sizeof(sHistory));
|
||||||
gShopMenuHistory[0].unk8 = gMapHeader.regionMapSectionId;
|
sHistory[0].mapSec = gMapHeader.regionMapSectionId;
|
||||||
gShopMenuHistory[1].unk8 = gMapHeader.regionMapSectionId;
|
sHistory[1].mapSec = gMapHeader.regionMapSectionId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateDecorationShop1Menu(const u16 *itemsForSale)
|
void CreateDecorationShop1Menu(const u16 *itemsForSale)
|
||||||
|
|||||||
+2
-1
@@ -23,6 +23,7 @@
|
|||||||
#include "menu_indicators.h"
|
#include "menu_indicators.h"
|
||||||
#include "constants/items.h"
|
#include "constants/items.h"
|
||||||
#include "constants/songs.h"
|
#include "constants/songs.h"
|
||||||
|
#include "constants/quest_log.h"
|
||||||
|
|
||||||
// Any item in the TM Case with nonzero importance is considered an HM
|
// Any item in the TM Case with nonzero importance is considered an HM
|
||||||
#define IS_HM(itemId) (ItemId_GetImportance(itemId) != 0)
|
#define IS_HM(itemId) (ItemId_GetImportance(itemId) != 0)
|
||||||
@@ -1292,7 +1293,7 @@ static void Task_DoSaleOfTMs(u8 taskId)
|
|||||||
PlaySE(SE_SHOP);
|
PlaySE(SE_SHOP);
|
||||||
RemoveBagItem(gSpecialVar_ItemId, tQuantitySelected);
|
RemoveBagItem(gSpecialVar_ItemId, tQuantitySelected);
|
||||||
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * tQuantitySelected);
|
AddMoney(&gSaveBlock1Ptr->money, ItemId_GetPrice(gSpecialVar_ItemId) / 2 * tQuantitySelected);
|
||||||
RecordItemPurchase(gSpecialVar_ItemId, tQuantitySelected, 2);
|
RecordItemTransaction(gSpecialVar_ItemId, tQuantitySelected, QL_EVENT_SOLD_ITEM - QL_EVENT_USED_POKEMART);
|
||||||
DestroyListMenuTask(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
|
DestroyListMenuTask(tListTaskId, &sTMCaseStaticResources.scrollOffset, &sTMCaseStaticResources.selectedRow);
|
||||||
TMCaseSetup_GetTMCount();
|
TMCaseSetup_GetTMCount();
|
||||||
TMCaseSetup_InitListMenuPositions();
|
TMCaseSetup_InitListMenuPositions();
|
||||||
|
|||||||
+6
-8
@@ -107,9 +107,7 @@ struct {
|
|||||||
/*0xF0*/ u16 monSpecies[2];
|
/*0xF0*/ u16 monSpecies[2];
|
||||||
/*0xF4*/ u16 cachedMapMusic;
|
/*0xF4*/ u16 cachedMapMusic;
|
||||||
/*0xF6*/ u8 unk_F6;
|
/*0xF6*/ u8 unk_F6;
|
||||||
/*0xF8*/ u16 questLogSpecies[2];
|
/*0xF8*/ struct QuestLogEvent_Traded questLogData;
|
||||||
/*0xFC*/ u8 linkPartnerName[7];
|
|
||||||
/*0x103*/ u8 filler_103[1];
|
|
||||||
/*0x104*/ u8 textColor[3];
|
/*0x104*/ u8 textColor[3];
|
||||||
/*0x107*/ u8 filler_107[1];
|
/*0x107*/ u8 filler_107[1];
|
||||||
/*0x108*/ bool8 isCableTrade;
|
/*0x108*/ bool8 isCableTrade;
|
||||||
@@ -883,9 +881,9 @@ void CB2_LinkTrade(void)
|
|||||||
case 10:
|
case 10:
|
||||||
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
BeginNormalPaletteFade(PALETTES_ALL, 0, 16, 0, RGB_BLACK);
|
||||||
ShowBg(0);
|
ShowBg(0);
|
||||||
sTradeAnim->questLogSpecies[TRADE_PLAYER] = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_SPECIES_OR_EGG);
|
sTradeAnim->questLogData.speciesSent = GetMonData(&gPlayerParty[gSelectedTradeMonPositions[TRADE_PLAYER]], MON_DATA_SPECIES_OR_EGG);
|
||||||
sTradeAnim->questLogSpecies[TRADE_PARTNER] = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_SPECIES_OR_EGG);
|
sTradeAnim->questLogData.speciesReceived = GetMonData(&gEnemyParty[gSelectedTradeMonPositions[TRADE_PARTNER] % PARTY_SIZE], MON_DATA_SPECIES_OR_EGG);
|
||||||
memcpy(sTradeAnim->linkPartnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, PLAYER_NAME_LENGTH);
|
memcpy(sTradeAnim->questLogData.partnerName, gLinkPlayers[GetMultiplayerId() ^ 1].name, PLAYER_NAME_LENGTH);
|
||||||
gMain.state++;
|
gMain.state++;
|
||||||
break;
|
break;
|
||||||
case 11:
|
case 11:
|
||||||
@@ -2599,11 +2597,11 @@ static void CB2_SaveAndEndTrade(void)
|
|||||||
case 50:
|
case 50:
|
||||||
if (InUnionRoom())
|
if (InUnionRoom())
|
||||||
{
|
{
|
||||||
SetQuestLogEvent(QL_EVENT_LINK_TRADED_UNION, sTradeAnim->questLogSpecies);
|
SetQuestLogEvent(QL_EVENT_LINK_TRADED_UNION, (void *)&sTradeAnim->questLogData);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SetQuestLogEvent(QL_EVENT_LINK_TRADED, sTradeAnim->questLogSpecies);
|
SetQuestLogEvent(QL_EVENT_LINK_TRADED, (void *)&sTradeAnim->questLogData);
|
||||||
IncrementGameStat(GAME_STAT_POKEMON_TRADES);
|
IncrementGameStat(GAME_STAT_POKEMON_TRADES);
|
||||||
}
|
}
|
||||||
if (gWirelessCommType)
|
if (gWirelessCommType)
|
||||||
|
|||||||
+1
-11
@@ -4,6 +4,7 @@
|
|||||||
#include "event_data.h"
|
#include "event_data.h"
|
||||||
#include "event_scripts.h"
|
#include "event_scripts.h"
|
||||||
#include "random.h"
|
#include "random.h"
|
||||||
|
#include "constants/trainer_fan_club.h"
|
||||||
|
|
||||||
struct TrainerFanClub
|
struct TrainerFanClub
|
||||||
{
|
{
|
||||||
@@ -18,17 +19,6 @@ struct TrainerFanClub
|
|||||||
#define SET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags |= 1 << (flag))
|
#define SET_TRAINER_FAN_CLUB_FLAG(flag) (fanClub->fanFlags |= 1 << (flag))
|
||||||
#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(fanClub->fanFlags ^= 1 << (flag))
|
#define FLIP_TRAINER_FAN_CLUB_FLAG(flag)(fanClub->fanFlags ^= 1 << (flag))
|
||||||
|
|
||||||
#define FANCLUB_MEMBER1 0
|
|
||||||
#define FANCLUB_MEMBER2 1
|
|
||||||
#define FANCLUB_MEMBER3 2
|
|
||||||
#define FANCLUB_MEMBER4 3
|
|
||||||
#define FANCLUB_MEMBER5 4
|
|
||||||
#define FANCLUB_MEMBER6 5
|
|
||||||
#define FANCLUB_MEMBER7 6
|
|
||||||
#define FANCLUB_MEMBER8 7
|
|
||||||
|
|
||||||
#define NUM_TRAINER_FAN_CLUB_MEMBERS 8
|
|
||||||
|
|
||||||
static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *);
|
static void TryLoseFansFromPlayTimeAfterLinkBattle(struct TrainerFanClub *);
|
||||||
static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *);
|
static void UpdateTrainerFanClubGameClear(struct TrainerFanClub *);
|
||||||
static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *);
|
static u8 PlayerGainRandomTrainerFan(struct TrainerFanClub *);
|
||||||
|
|||||||
+1
-1
@@ -88,7 +88,7 @@ static const TrainerSeeFunc sTrainerSeeFuncList2[] = {
|
|||||||
bool8 CheckForTrainersWantingBattle(void)
|
bool8 CheckForTrainersWantingBattle(void)
|
||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
if (sub_8111C2C() == TRUE)
|
if (QL_IsTrainerSightDisabled() == TRUE)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
|
||||||
|
|||||||
+353
-350
@@ -26,6 +26,13 @@
|
|||||||
#include "constants/quest_log.h"
|
#include "constants/quest_log.h"
|
||||||
#include "constants/trainer_types.h"
|
#include "constants/trainer_types.h"
|
||||||
|
|
||||||
|
// Each trainer can have up to 6 parties, including their original party.
|
||||||
|
// Each rematch is unavailable until the player has progressed to a certain point in the story (see TryGetRematchTrainerIdGivenGameState).
|
||||||
|
// A list of the trainer ids for each party is in sRematches. If a party doesn't update for a progression point it will have SKIP instead,
|
||||||
|
// and that trainer id will be ignored.
|
||||||
|
#define MAX_REMATCH_PARTIES 6
|
||||||
|
#define SKIP 0xFFFF
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
VSSEEKER_NOT_CHARGED,
|
VSSEEKER_NOT_CHARGED,
|
||||||
@@ -47,13 +54,12 @@ typedef enum
|
|||||||
VSSEEKER_RESPONSE_FOUND_REMATCHES
|
VSSEEKER_RESPONSE_FOUND_REMATCHES
|
||||||
} VsSeekerResponseCode;
|
} VsSeekerResponseCode;
|
||||||
|
|
||||||
// static types
|
struct RematchData
|
||||||
typedef struct VsSeekerData
|
|
||||||
{
|
{
|
||||||
u16 trainerIdxs[6];
|
u16 trainerIdxs[MAX_REMATCH_PARTIES];
|
||||||
u16 mapGroup; // unused
|
u16 mapGroup; // unused
|
||||||
u16 mapNum; // unused
|
u16 mapNum; // unused
|
||||||
} VsSeekerData;
|
};
|
||||||
|
|
||||||
struct VsSeekerTrainerInfo
|
struct VsSeekerTrainerInfo
|
||||||
{
|
{
|
||||||
@@ -91,19 +97,19 @@ static void Task_VsSeeker_2(u8 taskId);
|
|||||||
static void GatherNearbyTrainerInfo(void);
|
static void GatherNearbyTrainerInfo(void);
|
||||||
static void Task_VsSeeker_3(u8 taskId);
|
static void Task_VsSeeker_3(u8 taskId);
|
||||||
static bool8 CanUseVsSeeker(void);
|
static bool8 CanUseVsSeeker(void);
|
||||||
static u8 GetVsSeekerResponseInArea(const VsSeekerData * vsSeekerData);
|
static u8 GetVsSeekerResponseInArea(const struct RematchData * vsSeekerData);
|
||||||
static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchIdx);
|
static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchIdx);
|
||||||
static u8 ShouldTryRematchBattleInternal(const VsSeekerData * vsSeekerData, u16 trainerBattleOpponent);
|
static u8 ShouldTryRematchBattleInternal(const struct RematchData * vsSeekerData, u16 trainerBattleOpponent);
|
||||||
static u8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData * vsSeekerData, u16 trainerBattleOpponent);
|
static u8 HasRematchTrainerAlreadyBeenFought(const struct RematchData * vsSeekerData, u16 trainerBattleOpponent);
|
||||||
static int LookupVsSeekerOpponentInArray(const VsSeekerData * array, u16 trainerId);
|
static int LookupVsSeekerOpponentInArray(const struct RematchData * array, u16 trainerId);
|
||||||
static bool8 IsTrainerReadyForRematchInternal(const VsSeekerData * array, u16 trainerIdx);
|
static bool8 IsTrainerReadyForRematchInternal(const struct RematchData * array, u16 trainerIdx);
|
||||||
static u8 GetRunningBehaviorFromGraphicsId(u8 graphicsId);
|
static u8 GetRunningBehaviorFromGraphicsId(u8 graphicsId);
|
||||||
static u16 GetTrainerFlagFromScript(const u8 * script);
|
static u16 GetTrainerFlagFromScript(const u8 * script);
|
||||||
static int GetRematchIdx(const VsSeekerData * vsSeekerData, u16 trainerFlagIdx);
|
static int GetRematchIdx(const struct RematchData * vsSeekerData, u16 trainerFlagIdx);
|
||||||
static bool32 IsThisTrainerRematchable(u32 localId);
|
static bool32 IsThisTrainerRematchable(u32 localId);
|
||||||
static void ClearAllTrainerRematchStates(void);
|
static void ClearAllTrainerRematchStates(void);
|
||||||
static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo);
|
static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo);
|
||||||
static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr);
|
static u8 GetNextAvailableRematchTrainer(const struct RematchData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr);
|
||||||
static u8 GetRematchableTrainerLocalId(void);
|
static u8 GetRematchableTrainerLocalId(void);
|
||||||
static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script);
|
static void StartTrainerObjectMovementScript(struct VsSeekerTrainerInfo * trainerInfo, const u8 * script);
|
||||||
static u8 GetCurVsSeekerResponse(s32 vsSeekerIdx, u16 trainerIdx);
|
static u8 GetCurVsSeekerResponse(s32 vsSeekerIdx, u16 trainerIdx);
|
||||||
@@ -111,450 +117,447 @@ static void StartAllRespondantIdleMovements(void);
|
|||||||
static bool8 ObjectEventIdIsSane(u8 objectEventId);
|
static bool8 ObjectEventIdIsSane(u8 objectEventId);
|
||||||
static u8 GetRandomFaceDirectionMovementType();
|
static u8 GetRandomFaceDirectionMovementType();
|
||||||
|
|
||||||
// rodata
|
static const struct RematchData sRematches[] = {
|
||||||
static const VsSeekerData sVsSeekerData[] = {
|
{ {TRAINER_YOUNGSTER_BEN, TRAINER_YOUNGSTER_BEN_2, SKIP, TRAINER_YOUNGSTER_BEN_3, TRAINER_YOUNGSTER_BEN_4}, MAP(ROUTE3) },
|
||||||
{ {TRAINER_YOUNGSTER_BEN, TRAINER_YOUNGSTER_BEN_2, 0xFFFF, TRAINER_YOUNGSTER_BEN_3, TRAINER_YOUNGSTER_BEN_4},
|
{ {TRAINER_YOUNGSTER_CALVIN, TRAINER_YOUNGSTER_CALVIN}, MAP(ROUTE3) },
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
{ {TRAINER_BUG_CATCHER_COLTON, TRAINER_BUG_CATCHER_COLTON_2, SKIP, TRAINER_BUG_CATCHER_COLTON_3, SKIP, TRAINER_BUG_CATCHER_COLTON_4},
|
||||||
{ {TRAINER_YOUNGSTER_CALVIN, TRAINER_YOUNGSTER_CALVIN},
|
MAP(ROUTE3) },
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
|
||||||
{ {TRAINER_BUG_CATCHER_COLTON, TRAINER_BUG_CATCHER_COLTON_2, 0xFFFF, TRAINER_BUG_CATCHER_COLTON_3, 0xFFFF, TRAINER_BUG_CATCHER_COLTON_4},
|
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
|
||||||
{ {TRAINER_BUG_CATCHER_GREG, TRAINER_BUG_CATCHER_GREG},
|
{ {TRAINER_BUG_CATCHER_GREG, TRAINER_BUG_CATCHER_GREG},
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
MAP(ROUTE3) },
|
||||||
{ {TRAINER_BUG_CATCHER_JAMES, TRAINER_BUG_CATCHER_JAMES},
|
{ {TRAINER_BUG_CATCHER_JAMES, TRAINER_BUG_CATCHER_JAMES},
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
MAP(ROUTE3) },
|
||||||
{ {TRAINER_LASS_JANICE, TRAINER_LASS_JANICE_2, 0xFFFF, TRAINER_LASS_JANICE_3},
|
{ {TRAINER_LASS_JANICE, TRAINER_LASS_JANICE_2, SKIP, TRAINER_LASS_JANICE_3},
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
MAP(ROUTE3) },
|
||||||
{ {TRAINER_LASS_SALLY, TRAINER_LASS_SALLY},
|
{ {TRAINER_LASS_SALLY, TRAINER_LASS_SALLY},
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
MAP(ROUTE3) },
|
||||||
{ {TRAINER_LASS_ROBIN, TRAINER_LASS_ROBIN},
|
{ {TRAINER_LASS_ROBIN, TRAINER_LASS_ROBIN},
|
||||||
MAP_GROUP(ROUTE3), MAP_NUM(ROUTE3) },
|
MAP(ROUTE3) },
|
||||||
{ {TRAINER_LASS_CRISSY, TRAINER_LASS_CRISSY},
|
{ {TRAINER_LASS_CRISSY, TRAINER_LASS_CRISSY},
|
||||||
MAP_GROUP(ROUTE4), MAP_NUM(ROUTE4) },
|
MAP(ROUTE4) },
|
||||||
{ {TRAINER_YOUNGSTER_TIMMY, TRAINER_YOUNGSTER_TIMMY_2, 0xFFFF, TRAINER_YOUNGSTER_TIMMY_3, 0xFFFF, TRAINER_YOUNGSTER_TIMMY_4},
|
{ {TRAINER_YOUNGSTER_TIMMY, TRAINER_YOUNGSTER_TIMMY_2, SKIP, TRAINER_YOUNGSTER_TIMMY_3, SKIP, TRAINER_YOUNGSTER_TIMMY_4},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_BUG_CATCHER_CALE, TRAINER_BUG_CATCHER_CALE},
|
{ {TRAINER_BUG_CATCHER_CALE, TRAINER_BUG_CATCHER_CALE},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_LASS_RELI, TRAINER_LASS_RELI_2, 0xFFFF, TRAINER_LASS_RELI_3},
|
{ {TRAINER_LASS_RELI, TRAINER_LASS_RELI_2, SKIP, TRAINER_LASS_RELI_3},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_LASS_ALI, TRAINER_LASS_ALI},
|
{ {TRAINER_LASS_ALI, TRAINER_LASS_ALI},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_CAMPER_SHANE, TRAINER_CAMPER_SHANE},
|
{ {TRAINER_CAMPER_SHANE, TRAINER_CAMPER_SHANE},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_CAMPER_ETHAN, TRAINER_CAMPER_ETHAN},
|
{ {TRAINER_CAMPER_ETHAN, TRAINER_CAMPER_ETHAN},
|
||||||
MAP_GROUP(ROUTE24), MAP_NUM(ROUTE24) },
|
MAP(ROUTE24) },
|
||||||
{ {TRAINER_YOUNGSTER_JOEY, TRAINER_YOUNGSTER_JOEY},
|
{ {TRAINER_YOUNGSTER_JOEY, TRAINER_YOUNGSTER_JOEY},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_YOUNGSTER_DAN, TRAINER_YOUNGSTER_DAN},
|
{ {TRAINER_YOUNGSTER_DAN, TRAINER_YOUNGSTER_DAN},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_YOUNGSTER_CHAD, TRAINER_YOUNGSTER_CHAD_2, 0xFFFF, TRAINER_YOUNGSTER_CHAD_3, TRAINER_YOUNGSTER_CHAD_4},
|
{ {TRAINER_YOUNGSTER_CHAD, TRAINER_YOUNGSTER_CHAD_2, SKIP, TRAINER_YOUNGSTER_CHAD_3, TRAINER_YOUNGSTER_CHAD_4},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_PICNICKER_KELSEY, TRAINER_PICNICKER_KELSEY_2, 0xFFFF, TRAINER_PICNICKER_KELSEY_3, TRAINER_PICNICKER_KELSEY_4},
|
{ {TRAINER_PICNICKER_KELSEY, TRAINER_PICNICKER_KELSEY_2, SKIP, TRAINER_PICNICKER_KELSEY_3, TRAINER_PICNICKER_KELSEY_4},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_LASS_HALEY, TRAINER_LASS_HALEY},
|
{ {TRAINER_LASS_HALEY, TRAINER_LASS_HALEY},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_HIKER_FRANKLIN, 0xFFFF, TRAINER_HIKER_FRANKLIN_2},
|
{ {TRAINER_HIKER_FRANKLIN, SKIP, TRAINER_HIKER_FRANKLIN_2},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_HIKER_NOB, TRAINER_HIKER_NOB},
|
{ {TRAINER_HIKER_NOB, TRAINER_HIKER_NOB},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_HIKER_WAYNE, TRAINER_HIKER_WAYNE},
|
{ {TRAINER_HIKER_WAYNE, TRAINER_HIKER_WAYNE},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_CAMPER_FLINT, TRAINER_CAMPER_FLINT},
|
{ {TRAINER_CAMPER_FLINT, TRAINER_CAMPER_FLINT},
|
||||||
MAP_GROUP(ROUTE25), MAP_NUM(ROUTE25) },
|
MAP(ROUTE25) },
|
||||||
{ {TRAINER_BUG_CATCHER_KEIGO, TRAINER_BUG_CATCHER_KEIGO},
|
{ {TRAINER_BUG_CATCHER_KEIGO, TRAINER_BUG_CATCHER_KEIGO},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_BUG_CATCHER_ELIJAH, TRAINER_BUG_CATCHER_ELIJAH},
|
{ {TRAINER_BUG_CATCHER_ELIJAH, TRAINER_BUG_CATCHER_ELIJAH},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_CAMPER_RICKY, TRAINER_CAMPER_RICKY_2, 0xFFFF, TRAINER_CAMPER_RICKY_3, 0xFFFF, TRAINER_CAMPER_RICKY_4},
|
{ {TRAINER_CAMPER_RICKY, TRAINER_CAMPER_RICKY_2, SKIP, TRAINER_CAMPER_RICKY_3, SKIP, TRAINER_CAMPER_RICKY_4},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_CAMPER_JEFF, TRAINER_CAMPER_JEFF_2, 0xFFFF, TRAINER_CAMPER_JEFF_3, 0xFFFF, TRAINER_CAMPER_JEFF_4},
|
{ {TRAINER_CAMPER_JEFF, TRAINER_CAMPER_JEFF_2, SKIP, TRAINER_CAMPER_JEFF_3, SKIP, TRAINER_CAMPER_JEFF_4},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_PICNICKER_NANCY, TRAINER_PICNICKER_NANCY},
|
{ {TRAINER_PICNICKER_NANCY, TRAINER_PICNICKER_NANCY},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_PICNICKER_ISABELLE, TRAINER_PICNICKER_ISABELLE_2, 0xFFFF, TRAINER_PICNICKER_ISABELLE_3, TRAINER_PICNICKER_ISABELLE_4},
|
{ {TRAINER_PICNICKER_ISABELLE, TRAINER_PICNICKER_ISABELLE_2, SKIP, TRAINER_PICNICKER_ISABELLE_3, TRAINER_PICNICKER_ISABELLE_4},
|
||||||
MAP_GROUP(ROUTE6), MAP_NUM(ROUTE6) },
|
MAP(ROUTE6) },
|
||||||
{ {TRAINER_YOUNGSTER_EDDIE, TRAINER_YOUNGSTER_EDDIE},
|
{ {TRAINER_YOUNGSTER_EDDIE, TRAINER_YOUNGSTER_EDDIE},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_YOUNGSTER_DILLON, TRAINER_YOUNGSTER_DILLON},
|
{ {TRAINER_YOUNGSTER_DILLON, TRAINER_YOUNGSTER_DILLON},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_YOUNGSTER_YASU, 0xFFFF, TRAINER_YOUNGSTER_YASU_2, 0xFFFF, TRAINER_YOUNGSTER_YASU_3},
|
{ {TRAINER_YOUNGSTER_YASU, SKIP, TRAINER_YOUNGSTER_YASU_2, SKIP, TRAINER_YOUNGSTER_YASU_3},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_YOUNGSTER_DAVE, TRAINER_YOUNGSTER_DAVE},
|
{ {TRAINER_YOUNGSTER_DAVE, TRAINER_YOUNGSTER_DAVE},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_ENGINEER_BRAXTON, TRAINER_ENGINEER_BRAXTON},
|
{ {TRAINER_ENGINEER_BRAXTON, TRAINER_ENGINEER_BRAXTON},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_ENGINEER_BERNIE, 0xFFFF, 0xFFFF, TRAINER_ENGINEER_BERNIE_2},
|
{ {TRAINER_ENGINEER_BERNIE, SKIP, SKIP, TRAINER_ENGINEER_BERNIE_2},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_GAMER_HUGO, TRAINER_GAMER_HUGO},
|
{ {TRAINER_GAMER_HUGO, TRAINER_GAMER_HUGO},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_GAMER_JASPER, TRAINER_GAMER_JASPER},
|
{ {TRAINER_GAMER_JASPER, TRAINER_GAMER_JASPER},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_GAMER_DIRK, TRAINER_GAMER_DIRK},
|
{ {TRAINER_GAMER_DIRK, TRAINER_GAMER_DIRK},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_GAMER_DARIAN, 0xFFFF, 0xFFFF, TRAINER_GAMER_DARIAN_2},
|
{ {TRAINER_GAMER_DARIAN, SKIP, SKIP, TRAINER_GAMER_DARIAN_2},
|
||||||
MAP_GROUP(ROUTE11), MAP_NUM(ROUTE11) },
|
MAP(ROUTE11) },
|
||||||
{ {TRAINER_BUG_CATCHER_BRENT, TRAINER_BUG_CATCHER_BRENT},
|
{ {TRAINER_BUG_CATCHER_BRENT, TRAINER_BUG_CATCHER_BRENT},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_BUG_CATCHER_CONNER, TRAINER_BUG_CATCHER_CONNER},
|
{ {TRAINER_BUG_CATCHER_CONNER, TRAINER_BUG_CATCHER_CONNER},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_CAMPER_CHRIS, 0xFFFF, TRAINER_CAMPER_CHRIS_2, TRAINER_CAMPER_CHRIS_3, 0xFFFF, TRAINER_CAMPER_CHRIS_4},
|
{ {TRAINER_CAMPER_CHRIS, SKIP, TRAINER_CAMPER_CHRIS_2, TRAINER_CAMPER_CHRIS_3, SKIP, TRAINER_CAMPER_CHRIS_4},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_CAMPER_DREW, TRAINER_CAMPER_DREW},
|
{ {TRAINER_CAMPER_DREW, TRAINER_CAMPER_DREW},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_PICNICKER_ALICIA, 0xFFFF, TRAINER_PICNICKER_ALICIA_2, TRAINER_PICNICKER_ALICIA_3, 0xFFFF, TRAINER_PICNICKER_ALICIA_4},
|
{ {TRAINER_PICNICKER_ALICIA, SKIP, TRAINER_PICNICKER_ALICIA_2, TRAINER_PICNICKER_ALICIA_3, SKIP, TRAINER_PICNICKER_ALICIA_4},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_PICNICKER_CAITLIN, TRAINER_PICNICKER_CAITLIN},
|
{ {TRAINER_PICNICKER_CAITLIN, TRAINER_PICNICKER_CAITLIN},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_HIKER_ALAN, TRAINER_HIKER_ALAN},
|
{ {TRAINER_HIKER_ALAN, TRAINER_HIKER_ALAN},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_HIKER_BRICE, TRAINER_HIKER_BRICE},
|
{ {TRAINER_HIKER_BRICE, TRAINER_HIKER_BRICE},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_HIKER_JEREMY, 0xFFFF, 0xFFFF, TRAINER_HIKER_JEREMY_2},
|
{ {TRAINER_HIKER_JEREMY, SKIP, SKIP, TRAINER_HIKER_JEREMY_2},
|
||||||
MAP_GROUP(ROUTE9), MAP_NUM(ROUTE9) },
|
MAP(ROUTE9) },
|
||||||
{ {TRAINER_PICNICKER_HEIDI, TRAINER_PICNICKER_HEIDI},
|
{ {TRAINER_PICNICKER_HEIDI, TRAINER_PICNICKER_HEIDI},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_PICNICKER_CAROL, TRAINER_PICNICKER_CAROL},
|
{ {TRAINER_PICNICKER_CAROL, TRAINER_PICNICKER_CAROL},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_POKEMANIAC_MARK, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_MARK_2, 0xFFFF, TRAINER_POKEMANIAC_MARK_3},
|
{ {TRAINER_POKEMANIAC_MARK, SKIP, SKIP, TRAINER_POKEMANIAC_MARK_2, SKIP, TRAINER_POKEMANIAC_MARK_3},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_POKEMANIAC_HERMAN, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_HERMAN_2, 0xFFFF, TRAINER_POKEMANIAC_HERMAN_3},
|
{ {TRAINER_POKEMANIAC_HERMAN, SKIP, SKIP, TRAINER_POKEMANIAC_HERMAN_2, SKIP, TRAINER_POKEMANIAC_HERMAN_3},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_HIKER_CLARK, TRAINER_HIKER_CLARK},
|
{ {TRAINER_HIKER_CLARK, TRAINER_HIKER_CLARK},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_HIKER_TRENT, 0xFFFF, 0xFFFF, TRAINER_HIKER_TRENT_2},
|
{ {TRAINER_HIKER_TRENT, SKIP, SKIP, TRAINER_HIKER_TRENT_2},
|
||||||
MAP_GROUP(ROUTE10), MAP_NUM(ROUTE10) },
|
MAP(ROUTE10) },
|
||||||
{ {TRAINER_LASS_PAIGE, TRAINER_LASS_PAIGE},
|
{ {TRAINER_LASS_PAIGE, TRAINER_LASS_PAIGE},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_LASS_ANDREA, TRAINER_LASS_ANDREA},
|
{ {TRAINER_LASS_ANDREA, TRAINER_LASS_ANDREA},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_LASS_MEGAN, 0xFFFF, TRAINER_LASS_MEGAN_2, 0xFFFF, TRAINER_LASS_MEGAN_3},
|
{ {TRAINER_LASS_MEGAN, SKIP, TRAINER_LASS_MEGAN_2, SKIP, TRAINER_LASS_MEGAN_3},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_LASS_JULIA, TRAINER_LASS_JULIA},
|
{ {TRAINER_LASS_JULIA, TRAINER_LASS_JULIA},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_SUPER_NERD_AIDAN, TRAINER_SUPER_NERD_AIDAN},
|
{ {TRAINER_SUPER_NERD_AIDAN, TRAINER_SUPER_NERD_AIDAN},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_SUPER_NERD_GLENN, 0xFFFF, 0xFFFF, TRAINER_SUPER_NERD_GLENN_2},
|
{ {TRAINER_SUPER_NERD_GLENN, SKIP, SKIP, TRAINER_SUPER_NERD_GLENN_2},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_SUPER_NERD_LESLIE, TRAINER_SUPER_NERD_LESLIE},
|
{ {TRAINER_SUPER_NERD_LESLIE, TRAINER_SUPER_NERD_LESLIE},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_GAMER_STAN, TRAINER_GAMER_STAN},
|
{ {TRAINER_GAMER_STAN, TRAINER_GAMER_STAN},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_GAMER_RICH, 0xFFFF, 0xFFFF, TRAINER_GAMER_RICH_2},
|
{ {TRAINER_GAMER_RICH, SKIP, SKIP, TRAINER_GAMER_RICH_2},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_TWINS_ELI_ANNE, 0xFFFF, 0xFFFF, TRAINER_TWINS_ELI_ANNE_2},
|
{ {TRAINER_TWINS_ELI_ANNE, SKIP, SKIP, TRAINER_TWINS_ELI_ANNE_2},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_BIKER_RICARDO, TRAINER_BIKER_RICARDO},
|
{ {TRAINER_BIKER_RICARDO, TRAINER_BIKER_RICARDO},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_BIKER_JAREN, 0xFFFF, 0xFFFF, TRAINER_BIKER_JAREN_2},
|
{ {TRAINER_BIKER_JAREN, SKIP, SKIP, TRAINER_BIKER_JAREN_2},
|
||||||
MAP_GROUP(ROUTE8), MAP_NUM(ROUTE8) },
|
MAP(ROUTE8) },
|
||||||
{ {TRAINER_FISHERMAN_NED, TRAINER_FISHERMAN_NED},
|
{ {TRAINER_FISHERMAN_NED, TRAINER_FISHERMAN_NED},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_FISHERMAN_CHIP, TRAINER_FISHERMAN_CHIP},
|
{ {TRAINER_FISHERMAN_CHIP, TRAINER_FISHERMAN_CHIP},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_FISHERMAN_HANK, TRAINER_FISHERMAN_HANK},
|
{ {TRAINER_FISHERMAN_HANK, TRAINER_FISHERMAN_HANK},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_FISHERMAN_ELLIOT, 0xFFFF, 0xFFFF, TRAINER_FISHERMAN_ELLIOT_2},
|
{ {TRAINER_FISHERMAN_ELLIOT, SKIP, SKIP, TRAINER_FISHERMAN_ELLIOT_2},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_FISHERMAN_ANDREW, TRAINER_FISHERMAN_ANDREW},
|
{ {TRAINER_FISHERMAN_ANDREW, TRAINER_FISHERMAN_ANDREW},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_ROCKER_LUCA, 0xFFFF, 0xFFFF, TRAINER_ROCKER_LUCA_2},
|
{ {TRAINER_ROCKER_LUCA, SKIP, SKIP, TRAINER_ROCKER_LUCA_2},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_CAMPER_JUSTIN, TRAINER_CAMPER_JUSTIN},
|
{ {TRAINER_CAMPER_JUSTIN, TRAINER_CAMPER_JUSTIN},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_YOUNG_COUPLE_GIA_JES, 0xFFFF, 0xFFFF, TRAINER_YOUNG_COUPLE_GIA_JES_2, 0xFFFF, TRAINER_YOUNG_COUPLE_GIA_JES_3},
|
{ {TRAINER_YOUNG_COUPLE_GIA_JES, SKIP, SKIP, TRAINER_YOUNG_COUPLE_GIA_JES_2, SKIP, TRAINER_YOUNG_COUPLE_GIA_JES_3},
|
||||||
MAP_GROUP(ROUTE12), MAP_NUM(ROUTE12) },
|
MAP(ROUTE12) },
|
||||||
{ {TRAINER_BIKER_JARED, TRAINER_BIKER_JARED},
|
{ {TRAINER_BIKER_JARED, TRAINER_BIKER_JARED},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BEAUTY_LOLA, TRAINER_BEAUTY_LOLA},
|
{ {TRAINER_BEAUTY_LOLA, TRAINER_BEAUTY_LOLA},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BEAUTY_SHEILA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BEAUTY_SHEILA_2},
|
{ {TRAINER_BEAUTY_SHEILA, SKIP, SKIP, SKIP, TRAINER_BEAUTY_SHEILA_2},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BIRD_KEEPER_SEBASTIAN, TRAINER_BIRD_KEEPER_SEBASTIAN},
|
{ {TRAINER_BIRD_KEEPER_SEBASTIAN, TRAINER_BIRD_KEEPER_SEBASTIAN},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BIRD_KEEPER_PERRY, TRAINER_BIRD_KEEPER_PERRY},
|
{ {TRAINER_BIRD_KEEPER_PERRY, TRAINER_BIRD_KEEPER_PERRY},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BIRD_KEEPER_ROBERT, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_ROBERT_2, TRAINER_BIRD_KEEPER_ROBERT_3},
|
{ {TRAINER_BIRD_KEEPER_ROBERT, SKIP, SKIP, TRAINER_BIRD_KEEPER_ROBERT_2, TRAINER_BIRD_KEEPER_ROBERT_3},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_PICNICKER_ALMA, TRAINER_PICNICKER_ALMA},
|
{ {TRAINER_PICNICKER_ALMA, TRAINER_PICNICKER_ALMA},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_PICNICKER_SUSIE, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_SUSIE_2, TRAINER_PICNICKER_SUSIE_3, TRAINER_PICNICKER_SUSIE_4},
|
{ {TRAINER_PICNICKER_SUSIE, SKIP, SKIP, TRAINER_PICNICKER_SUSIE_2, TRAINER_PICNICKER_SUSIE_3, TRAINER_PICNICKER_SUSIE_4},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_PICNICKER_VALERIE, TRAINER_PICNICKER_VALERIE},
|
{ {TRAINER_PICNICKER_VALERIE, TRAINER_PICNICKER_VALERIE},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_PICNICKER_GWEN, TRAINER_PICNICKER_GWEN},
|
{ {TRAINER_PICNICKER_GWEN, TRAINER_PICNICKER_GWEN},
|
||||||
MAP_GROUP(ROUTE13), MAP_NUM(ROUTE13) },
|
MAP(ROUTE13) },
|
||||||
{ {TRAINER_BIKER_MALIK, TRAINER_BIKER_MALIK},
|
{ {TRAINER_BIKER_MALIK, TRAINER_BIKER_MALIK},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIKER_LUKAS, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_LUKAS_2},
|
{ {TRAINER_BIKER_LUKAS, SKIP, SKIP, SKIP, TRAINER_BIKER_LUKAS_2},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIKER_ISAAC, TRAINER_BIKER_ISAAC},
|
{ {TRAINER_BIKER_ISAAC, TRAINER_BIKER_ISAAC},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIKER_GERALD, TRAINER_BIKER_GERALD},
|
{ {TRAINER_BIKER_GERALD, TRAINER_BIKER_GERALD},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_DONALD, TRAINER_BIRD_KEEPER_DONALD},
|
{ {TRAINER_BIRD_KEEPER_DONALD, TRAINER_BIRD_KEEPER_DONALD},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_BENNY, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_BENNY_2, TRAINER_BIRD_KEEPER_BENNY_3},
|
{ {TRAINER_BIRD_KEEPER_BENNY, SKIP, SKIP, TRAINER_BIRD_KEEPER_BENNY_2, TRAINER_BIRD_KEEPER_BENNY_3},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_CARTER, TRAINER_BIRD_KEEPER_CARTER},
|
{ {TRAINER_BIRD_KEEPER_CARTER, TRAINER_BIRD_KEEPER_CARTER},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_MITCH, TRAINER_BIRD_KEEPER_MITCH},
|
{ {TRAINER_BIRD_KEEPER_MITCH, TRAINER_BIRD_KEEPER_MITCH},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_BECK, TRAINER_BIRD_KEEPER_BECK},
|
{ {TRAINER_BIRD_KEEPER_BECK, TRAINER_BIRD_KEEPER_BECK},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIRD_KEEPER_MARLON, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_MARLON_2, TRAINER_BIRD_KEEPER_MARLON_3},
|
{ {TRAINER_BIRD_KEEPER_MARLON, SKIP, SKIP, TRAINER_BIRD_KEEPER_MARLON_2, TRAINER_BIRD_KEEPER_MARLON_3},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_TWINS_KIRI_JAN, TRAINER_TWINS_KIRI_JAN},
|
{ {TRAINER_TWINS_KIRI_JAN, TRAINER_TWINS_KIRI_JAN},
|
||||||
MAP_GROUP(ROUTE14), MAP_NUM(ROUTE14) },
|
MAP(ROUTE14) },
|
||||||
{ {TRAINER_BIKER_ERNEST, TRAINER_BIKER_ERNEST},
|
{ {TRAINER_BIKER_ERNEST, TRAINER_BIKER_ERNEST},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BIKER_ALEX, TRAINER_BIKER_ALEX},
|
{ {TRAINER_BIKER_ALEX, TRAINER_BIKER_ALEX},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BEAUTY_GRACE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BEAUTY_GRACE_2},
|
{ {TRAINER_BEAUTY_GRACE, SKIP, SKIP, SKIP, TRAINER_BEAUTY_GRACE_2},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BEAUTY_OLIVIA, TRAINER_BEAUTY_OLIVIA},
|
{ {TRAINER_BEAUTY_OLIVIA, TRAINER_BEAUTY_OLIVIA},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BIRD_KEEPER_EDWIN, TRAINER_BIRD_KEEPER_EDWIN},
|
{ {TRAINER_BIRD_KEEPER_EDWIN, TRAINER_BIRD_KEEPER_EDWIN},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BIRD_KEEPER_CHESTER, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_CHESTER_2, TRAINER_BIRD_KEEPER_CHESTER_3},
|
{ {TRAINER_BIRD_KEEPER_CHESTER, SKIP, SKIP, TRAINER_BIRD_KEEPER_CHESTER_2, TRAINER_BIRD_KEEPER_CHESTER_3},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_PICNICKER_YAZMIN, TRAINER_PICNICKER_YAZMIN},
|
{ {TRAINER_PICNICKER_YAZMIN, TRAINER_PICNICKER_YAZMIN},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_PICNICKER_KINDRA, TRAINER_PICNICKER_KINDRA},
|
{ {TRAINER_PICNICKER_KINDRA, TRAINER_PICNICKER_KINDRA},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_PICNICKER_BECKY, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_BECKY_2, TRAINER_PICNICKER_BECKY_3, TRAINER_PICNICKER_BECKY_4},
|
{ {TRAINER_PICNICKER_BECKY, SKIP, SKIP, TRAINER_PICNICKER_BECKY_2, TRAINER_PICNICKER_BECKY_3, TRAINER_PICNICKER_BECKY_4},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_PICNICKER_CELIA, TRAINER_PICNICKER_CELIA},
|
{ {TRAINER_PICNICKER_CELIA, TRAINER_PICNICKER_CELIA},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_CRUSH_KIN_RON_MYA, 0xFFFF, 0xFFFF, TRAINER_CRUSH_KIN_RON_MYA_2, TRAINER_CRUSH_KIN_RON_MYA_3, TRAINER_CRUSH_KIN_RON_MYA_4},
|
{ {TRAINER_CRUSH_KIN_RON_MYA, SKIP, SKIP, TRAINER_CRUSH_KIN_RON_MYA_2, TRAINER_CRUSH_KIN_RON_MYA_3, TRAINER_CRUSH_KIN_RON_MYA_4},
|
||||||
MAP_GROUP(ROUTE15), MAP_NUM(ROUTE15) },
|
MAP(ROUTE15) },
|
||||||
{ {TRAINER_BIKER_LAO, TRAINER_BIKER_LAO},
|
{ {TRAINER_BIKER_LAO, TRAINER_BIKER_LAO},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_BIKER_HIDEO, TRAINER_BIKER_HIDEO},
|
{ {TRAINER_BIKER_HIDEO, TRAINER_BIKER_HIDEO},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_BIKER_RUBEN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_RUBEN_2},
|
{ {TRAINER_BIKER_RUBEN, SKIP, SKIP, SKIP, TRAINER_BIKER_RUBEN_2},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_CUE_BALL_KOJI, TRAINER_CUE_BALL_KOJI},
|
{ {TRAINER_CUE_BALL_KOJI, TRAINER_CUE_BALL_KOJI},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_CUE_BALL_LUKE, TRAINER_CUE_BALL_LUKE},
|
{ {TRAINER_CUE_BALL_LUKE, TRAINER_CUE_BALL_LUKE},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_CUE_BALL_CAMRON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_CAMRON_2},
|
{ {TRAINER_CUE_BALL_CAMRON, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_CAMRON_2},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_YOUNG_COUPLE_LEA_JED, TRAINER_YOUNG_COUPLE_LEA_JED},
|
{ {TRAINER_YOUNG_COUPLE_LEA_JED, TRAINER_YOUNG_COUPLE_LEA_JED},
|
||||||
MAP_GROUP(ROUTE16), MAP_NUM(ROUTE16) },
|
MAP(ROUTE16) },
|
||||||
{ {TRAINER_BIKER_BILLY, TRAINER_BIKER_BILLY},
|
{ {TRAINER_BIKER_BILLY, TRAINER_BIKER_BILLY},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_BIKER_NIKOLAS, TRAINER_BIKER_NIKOLAS},
|
{ {TRAINER_BIKER_NIKOLAS, TRAINER_BIKER_NIKOLAS},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_BIKER_JAXON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIKER_JAXON_2},
|
{ {TRAINER_BIKER_JAXON, SKIP, SKIP, SKIP, TRAINER_BIKER_JAXON_2},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_BIKER_WILLIAM, TRAINER_BIKER_WILLIAM},
|
{ {TRAINER_BIKER_WILLIAM, TRAINER_BIKER_WILLIAM},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_CUE_BALL_RAUL, TRAINER_CUE_BALL_RAUL},
|
{ {TRAINER_CUE_BALL_RAUL, TRAINER_CUE_BALL_RAUL},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_CUE_BALL_ISAIAH, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_ISAIAH_2},
|
{ {TRAINER_CUE_BALL_ISAIAH, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_ISAIAH_2},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_CUE_BALL_ZEEK, TRAINER_CUE_BALL_ZEEK},
|
{ {TRAINER_CUE_BALL_ZEEK, TRAINER_CUE_BALL_ZEEK},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_CUE_BALL_JAMAL, TRAINER_CUE_BALL_JAMAL},
|
{ {TRAINER_CUE_BALL_JAMAL, TRAINER_CUE_BALL_JAMAL},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_CUE_BALL_COREY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CUE_BALL_COREY_2},
|
{ {TRAINER_CUE_BALL_COREY, SKIP, SKIP, SKIP, TRAINER_CUE_BALL_COREY_2},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_BIKER_VIRGIL, TRAINER_BIKER_VIRGIL},
|
{ {TRAINER_BIKER_VIRGIL, TRAINER_BIKER_VIRGIL},
|
||||||
MAP_GROUP(ROUTE17), MAP_NUM(ROUTE17) },
|
MAP(ROUTE17) },
|
||||||
{ {TRAINER_BIRD_KEEPER_WILTON, TRAINER_BIRD_KEEPER_WILTON},
|
{ {TRAINER_BIRD_KEEPER_WILTON, TRAINER_BIRD_KEEPER_WILTON},
|
||||||
MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) },
|
MAP(ROUTE18) },
|
||||||
{ {TRAINER_BIRD_KEEPER_RAMIRO, TRAINER_BIRD_KEEPER_RAMIRO},
|
{ {TRAINER_BIRD_KEEPER_RAMIRO, TRAINER_BIRD_KEEPER_RAMIRO},
|
||||||
MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) },
|
MAP(ROUTE18) },
|
||||||
{ {TRAINER_BIRD_KEEPER_JACOB, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_JACOB_2, TRAINER_BIRD_KEEPER_JACOB_3},
|
{ {TRAINER_BIRD_KEEPER_JACOB, SKIP, SKIP, TRAINER_BIRD_KEEPER_JACOB_2, TRAINER_BIRD_KEEPER_JACOB_3},
|
||||||
MAP_GROUP(ROUTE18), MAP_NUM(ROUTE18) },
|
MAP(ROUTE18) },
|
||||||
{ {TRAINER_SWIMMER_MALE_RICHARD, TRAINER_SWIMMER_MALE_RICHARD},
|
{ {TRAINER_SWIMMER_MALE_RICHARD, TRAINER_SWIMMER_MALE_RICHARD},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_REECE, TRAINER_SWIMMER_MALE_REECE},
|
{ {TRAINER_SWIMMER_MALE_REECE, TRAINER_SWIMMER_MALE_REECE},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_MATTHEW, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_MATTHEW_2},
|
{ {TRAINER_SWIMMER_MALE_MATTHEW, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_MATTHEW_2},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_DOUGLAS, TRAINER_SWIMMER_MALE_DOUGLAS},
|
{ {TRAINER_SWIMMER_MALE_DOUGLAS, TRAINER_SWIMMER_MALE_DOUGLAS},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_DAVID, TRAINER_SWIMMER_MALE_DAVID},
|
{ {TRAINER_SWIMMER_MALE_DAVID, TRAINER_SWIMMER_MALE_DAVID},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_TONY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_TONY_2},
|
{ {TRAINER_SWIMMER_MALE_TONY, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_TONY_2},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_AXLE, TRAINER_SWIMMER_MALE_AXLE},
|
{ {TRAINER_SWIMMER_MALE_AXLE, TRAINER_SWIMMER_MALE_AXLE},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_ANYA, TRAINER_SWIMMER_FEMALE_ANYA},
|
{ {TRAINER_SWIMMER_FEMALE_ANYA, TRAINER_SWIMMER_FEMALE_ANYA},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_ALICE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_ALICE_2},
|
{ {TRAINER_SWIMMER_FEMALE_ALICE, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_ALICE_2},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_CONNIE, TRAINER_SWIMMER_FEMALE_CONNIE},
|
{ {TRAINER_SWIMMER_FEMALE_CONNIE, TRAINER_SWIMMER_FEMALE_CONNIE},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SIS_AND_BRO_LIA_LUC, TRAINER_SIS_AND_BRO_LIA_LUC},
|
{ {TRAINER_SIS_AND_BRO_LIA_LUC, TRAINER_SIS_AND_BRO_LIA_LUC},
|
||||||
MAP_GROUP(ROUTE19), MAP_NUM(ROUTE19) },
|
MAP(ROUTE19) },
|
||||||
{ {TRAINER_SWIMMER_MALE_BARRY, TRAINER_SWIMMER_MALE_BARRY},
|
{ {TRAINER_SWIMMER_MALE_BARRY, TRAINER_SWIMMER_MALE_BARRY},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_MALE_DEAN, TRAINER_SWIMMER_MALE_DEAN},
|
{ {TRAINER_SWIMMER_MALE_DEAN, TRAINER_SWIMMER_MALE_DEAN},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_MALE_DARRIN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_DARRIN_2},
|
{ {TRAINER_SWIMMER_MALE_DARRIN, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_DARRIN_2},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_TIFFANY, TRAINER_SWIMMER_FEMALE_TIFFANY},
|
{ {TRAINER_SWIMMER_FEMALE_TIFFANY, TRAINER_SWIMMER_FEMALE_TIFFANY},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_NORA, TRAINER_SWIMMER_FEMALE_NORA},
|
{ {TRAINER_SWIMMER_FEMALE_NORA, TRAINER_SWIMMER_FEMALE_NORA},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_MELISSA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_MELISSA_2},
|
{ {TRAINER_SWIMMER_FEMALE_MELISSA, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_MELISSA_2},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_SHIRLEY, TRAINER_SWIMMER_FEMALE_SHIRLEY},
|
{ {TRAINER_SWIMMER_FEMALE_SHIRLEY, TRAINER_SWIMMER_FEMALE_SHIRLEY},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_BIRD_KEEPER_ROGER, TRAINER_BIRD_KEEPER_ROGER},
|
{ {TRAINER_BIRD_KEEPER_ROGER, TRAINER_BIRD_KEEPER_ROGER},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_PICNICKER_MISSY, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PICNICKER_MISSY_2, TRAINER_PICNICKER_MISSY_3},
|
{ {TRAINER_PICNICKER_MISSY, SKIP, SKIP, SKIP, TRAINER_PICNICKER_MISSY_2, TRAINER_PICNICKER_MISSY_3},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_PICNICKER_IRENE, TRAINER_PICNICKER_IRENE},
|
{ {TRAINER_PICNICKER_IRENE, TRAINER_PICNICKER_IRENE},
|
||||||
MAP_GROUP(ROUTE20), MAP_NUM(ROUTE20) },
|
MAP(ROUTE20) },
|
||||||
{ {TRAINER_FISHERMAN_RONALD, TRAINER_FISHERMAN_RONALD},
|
{ {TRAINER_FISHERMAN_RONALD, TRAINER_FISHERMAN_RONALD},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_FISHERMAN_CLAUDE, TRAINER_FISHERMAN_CLAUDE},
|
{ {TRAINER_FISHERMAN_CLAUDE, TRAINER_FISHERMAN_CLAUDE},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_FISHERMAN_WADE, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_FISHERMAN_WADE_2},
|
{ {TRAINER_FISHERMAN_WADE, SKIP, SKIP, SKIP, TRAINER_FISHERMAN_WADE_2},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_FISHERMAN_NOLAN, TRAINER_FISHERMAN_NOLAN},
|
{ {TRAINER_FISHERMAN_NOLAN, TRAINER_FISHERMAN_NOLAN},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SWIMMER_MALE_SPENCER, TRAINER_SWIMMER_MALE_SPENCER},
|
{ {TRAINER_SWIMMER_MALE_SPENCER, TRAINER_SWIMMER_MALE_SPENCER},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SWIMMER_MALE_JACK, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_JACK_2},
|
{ {TRAINER_SWIMMER_MALE_JACK, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_JACK_2},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SWIMMER_MALE_JEROME, TRAINER_SWIMMER_MALE_JEROME},
|
{ {TRAINER_SWIMMER_MALE_JEROME, TRAINER_SWIMMER_MALE_JEROME},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SWIMMER_MALE_ROLAND, TRAINER_SWIMMER_MALE_ROLAND},
|
{ {TRAINER_SWIMMER_MALE_ROLAND, TRAINER_SWIMMER_MALE_ROLAND},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SIS_AND_BRO_LIL_IAN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SIS_AND_BRO_LIL_IAN_2, TRAINER_SIS_AND_BRO_LIL_IAN_3},
|
{ {TRAINER_SIS_AND_BRO_LIL_IAN, SKIP, SKIP, SKIP, TRAINER_SIS_AND_BRO_LIL_IAN_2, TRAINER_SIS_AND_BRO_LIL_IAN_3},
|
||||||
MAP_GROUP(ROUTE21_NORTH), MAP_NUM(ROUTE21_NORTH) },
|
MAP(ROUTE21_NORTH) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_MARIA, TRAINER_SWIMMER_FEMALE_MARIA},
|
{ {TRAINER_SWIMMER_FEMALE_MARIA, TRAINER_SWIMMER_FEMALE_MARIA},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_ABIGAIL, TRAINER_SWIMMER_FEMALE_ABIGAIL},
|
{ {TRAINER_SWIMMER_FEMALE_ABIGAIL, TRAINER_SWIMMER_FEMALE_ABIGAIL},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_SWIMMER_MALE_FINN, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_FINN_2},
|
{ {TRAINER_SWIMMER_MALE_FINN, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_FINN_2},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_SWIMMER_MALE_GARRETT, TRAINER_SWIMMER_MALE_GARRETT},
|
{ {TRAINER_SWIMMER_MALE_GARRETT, TRAINER_SWIMMER_MALE_GARRETT},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_FISHERMAN_TOMMY, TRAINER_FISHERMAN_TOMMY},
|
{ {TRAINER_FISHERMAN_TOMMY, TRAINER_FISHERMAN_TOMMY},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_CRUSH_GIRL_SHARON, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_SHARON_2, TRAINER_CRUSH_GIRL_SHARON_3},
|
{ {TRAINER_CRUSH_GIRL_SHARON, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_SHARON_2, TRAINER_CRUSH_GIRL_SHARON_3},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_CRUSH_GIRL_TANYA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_TANYA_2, TRAINER_CRUSH_GIRL_TANYA_3},
|
{ {TRAINER_CRUSH_GIRL_TANYA, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_TANYA_2, TRAINER_CRUSH_GIRL_TANYA_3},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_BLACK_BELT_SHEA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BLACK_BELT_SHEA_2, TRAINER_BLACK_BELT_SHEA_3},
|
{ {TRAINER_BLACK_BELT_SHEA, SKIP, SKIP, SKIP, TRAINER_BLACK_BELT_SHEA_2, TRAINER_BLACK_BELT_SHEA_3},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_BLACK_BELT_HUGH, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BLACK_BELT_HUGH_2, TRAINER_BLACK_BELT_HUGH_3},
|
{ {TRAINER_BLACK_BELT_HUGH, SKIP, SKIP, SKIP, TRAINER_BLACK_BELT_HUGH_2, TRAINER_BLACK_BELT_HUGH_3},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_CAMPER_BRYCE, TRAINER_CAMPER_BRYCE},
|
{ {TRAINER_CAMPER_BRYCE, TRAINER_CAMPER_BRYCE},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_PICNICKER_CLAIRE, TRAINER_PICNICKER_CLAIRE},
|
{ {TRAINER_PICNICKER_CLAIRE, TRAINER_PICNICKER_CLAIRE},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_CRUSH_KIN_MIK_KIA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_KIN_MIK_KIA_2, TRAINER_CRUSH_KIN_MIK_KIA_3},
|
{ {TRAINER_CRUSH_KIN_MIK_KIA, SKIP, SKIP, SKIP, TRAINER_CRUSH_KIN_MIK_KIA_2, TRAINER_CRUSH_KIN_MIK_KIA_3},
|
||||||
MAP_GROUP(ONE_ISLAND_KINDLE_ROAD), MAP_NUM(ONE_ISLAND_KINDLE_ROAD) },
|
MAP(ONE_ISLAND_KINDLE_ROAD) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_AMARA, TRAINER_SWIMMER_FEMALE_AMARA},
|
{ {TRAINER_SWIMMER_FEMALE_AMARA, TRAINER_SWIMMER_FEMALE_AMARA},
|
||||||
MAP_GROUP(ONE_ISLAND_TREASURE_BEACH), MAP_NUM(ONE_ISLAND_TREASURE_BEACH) },
|
MAP(ONE_ISLAND_TREASURE_BEACH) },
|
||||||
{ {TRAINER_AROMA_LADY_NIKKI, TRAINER_AROMA_LADY_NIKKI},
|
{ {TRAINER_AROMA_LADY_NIKKI, TRAINER_AROMA_LADY_NIKKI},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_AROMA_LADY_VIOLET, TRAINER_AROMA_LADY_VIOLET},
|
{ {TRAINER_AROMA_LADY_VIOLET, TRAINER_AROMA_LADY_VIOLET},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_TUBER_AMIRA, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TUBER_AMIRA_2},
|
{ {TRAINER_TUBER_AMIRA, SKIP, SKIP, SKIP, TRAINER_TUBER_AMIRA_2},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_TUBER_ALEXIS, TRAINER_TUBER_ALEXIS},
|
{ {TRAINER_TUBER_ALEXIS, TRAINER_TUBER_ALEXIS},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_TISHA, TRAINER_SWIMMER_FEMALE_TISHA},
|
{ {TRAINER_SWIMMER_FEMALE_TISHA, TRAINER_SWIMMER_FEMALE_TISHA},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_TWINS_JOY_MEG, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TWINS_JOY_MEG_2},
|
{ {TRAINER_TWINS_JOY_MEG, SKIP, SKIP, SKIP, TRAINER_TWINS_JOY_MEG_2},
|
||||||
MAP_GROUP(THREE_ISLAND_BOND_BRIDGE), MAP_NUM(THREE_ISLAND_BOND_BRIDGE) },
|
MAP(THREE_ISLAND_BOND_BRIDGE) },
|
||||||
{ {TRAINER_PAINTER_DAISY, TRAINER_PAINTER_DAISY},
|
{ {TRAINER_PAINTER_DAISY, TRAINER_PAINTER_DAISY},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_PAINTER_CELINA, TRAINER_PAINTER_CELINA},
|
{ {TRAINER_PAINTER_CELINA, TRAINER_PAINTER_CELINA},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_PAINTER_RAYNA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PAINTER_RAYNA_2},
|
{ {TRAINER_PAINTER_RAYNA, SKIP, SKIP, SKIP, SKIP, TRAINER_PAINTER_RAYNA_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_LADY_JACKI, TRAINER_LADY_JACKI},
|
{ {TRAINER_LADY_JACKI, TRAINER_LADY_JACKI},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_LADY_GILLIAN, TRAINER_LADY_GILLIAN},
|
{ {TRAINER_LADY_GILLIAN, TRAINER_LADY_GILLIAN},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_YOUNGSTER_DESTIN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_YOUNGSTER_DESTIN_2},
|
{ {TRAINER_YOUNGSTER_DESTIN, SKIP, SKIP, SKIP, SKIP, TRAINER_YOUNGSTER_DESTIN_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_SWIMMER_MALE_TOBY, TRAINER_SWIMMER_MALE_TOBY},
|
{ {TRAINER_SWIMMER_MALE_TOBY, TRAINER_SWIMMER_MALE_TOBY},
|
||||||
MAP_GROUP(FIVE_ISLAND_RESORT_GORGEOUS), MAP_NUM(FIVE_ISLAND_RESORT_GORGEOUS) },
|
MAP(FIVE_ISLAND_RESORT_GORGEOUS) },
|
||||||
{ {TRAINER_PKMN_BREEDER_ALIZE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_BREEDER_ALIZE_2},
|
{ {TRAINER_PKMN_BREEDER_ALIZE, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_BREEDER_ALIZE_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_WATER_LABYRINTH), MAP_NUM(FIVE_ISLAND_WATER_LABYRINTH) },
|
MAP(FIVE_ISLAND_WATER_LABYRINTH) },
|
||||||
{ {TRAINER_BIRD_KEEPER_MILO, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_MILO_2},
|
{ {TRAINER_BIRD_KEEPER_MILO, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_MILO_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
MAP(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
||||||
{ {TRAINER_BIRD_KEEPER_CHAZ, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_CHAZ_2},
|
{ {TRAINER_BIRD_KEEPER_CHAZ, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_CHAZ_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
MAP(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
||||||
{ {TRAINER_BIRD_KEEPER_HAROLD, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_BIRD_KEEPER_HAROLD_2},
|
{ {TRAINER_BIRD_KEEPER_HAROLD, SKIP, SKIP, SKIP, SKIP, TRAINER_BIRD_KEEPER_HAROLD_2},
|
||||||
MAP_GROUP(FIVE_ISLAND_MEMORIAL_PILLAR), MAP_NUM(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
MAP(FIVE_ISLAND_MEMORIAL_PILLAR) },
|
||||||
{ {TRAINER_FISHERMAN_TYLOR, TRAINER_FISHERMAN_TYLOR},
|
{ {TRAINER_FISHERMAN_TYLOR, TRAINER_FISHERMAN_TYLOR},
|
||||||
MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) },
|
MAP(SIX_ISLAND_OUTCAST_ISLAND) },
|
||||||
{ {TRAINER_SWIMMER_MALE_MYMO, TRAINER_SWIMMER_MALE_MYMO},
|
{ {TRAINER_SWIMMER_MALE_MYMO, TRAINER_SWIMMER_MALE_MYMO},
|
||||||
MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) },
|
MAP(SIX_ISLAND_OUTCAST_ISLAND) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_NICOLE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_FEMALE_NICOLE_2},
|
{ {TRAINER_SWIMMER_FEMALE_NICOLE, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_FEMALE_NICOLE_2},
|
||||||
MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) },
|
MAP(SIX_ISLAND_OUTCAST_ISLAND) },
|
||||||
{ {TRAINER_SIS_AND_BRO_AVA_GEB, TRAINER_SIS_AND_BRO_AVA_GEB},
|
{ {TRAINER_SIS_AND_BRO_AVA_GEB, TRAINER_SIS_AND_BRO_AVA_GEB},
|
||||||
MAP_GROUP(SIX_ISLAND_OUTCAST_ISLAND), MAP_NUM(SIX_ISLAND_OUTCAST_ISLAND) },
|
MAP(SIX_ISLAND_OUTCAST_ISLAND) },
|
||||||
{ {TRAINER_PSYCHIC_JACLYN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_JACLYN_2},
|
{ {TRAINER_PSYCHIC_JACLYN, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_JACLYN_2},
|
||||||
MAP_GROUP(SIX_ISLAND_GREEN_PATH), MAP_NUM(SIX_ISLAND_GREEN_PATH) },
|
MAP(SIX_ISLAND_GREEN_PATH) },
|
||||||
{ {TRAINER_AROMA_LADY_ROSE, TRAINER_AROMA_LADY_ROSE},
|
{ {TRAINER_AROMA_LADY_ROSE, TRAINER_AROMA_LADY_ROSE},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_JUGGLER_EDWARD, TRAINER_JUGGLER_EDWARD},
|
{ {TRAINER_JUGGLER_EDWARD, TRAINER_JUGGLER_EDWARD},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_SWIMMER_MALE_SAMIR, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_SWIMMER_MALE_SAMIR_2},
|
{ {TRAINER_SWIMMER_MALE_SAMIR, SKIP, SKIP, SKIP, SKIP, TRAINER_SWIMMER_MALE_SAMIR_2},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_SWIMMER_FEMALE_DENISE, TRAINER_SWIMMER_FEMALE_DENISE},
|
{ {TRAINER_SWIMMER_FEMALE_DENISE, TRAINER_SWIMMER_FEMALE_DENISE},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_TWINS_MIU_MIA, TRAINER_TWINS_MIU_MIA},
|
{ {TRAINER_TWINS_MIU_MIA, TRAINER_TWINS_MIU_MIA},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_HIKER_EARL, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_HIKER_EARL_2},
|
{ {TRAINER_HIKER_EARL, SKIP, SKIP, SKIP, SKIP, TRAINER_HIKER_EARL_2},
|
||||||
MAP_GROUP(SIX_ISLAND_WATER_PATH), MAP_NUM(SIX_ISLAND_WATER_PATH) },
|
MAP(SIX_ISLAND_WATER_PATH) },
|
||||||
{ {TRAINER_RUIN_MANIAC_STANLY, TRAINER_RUIN_MANIAC_STANLY},
|
{ {TRAINER_RUIN_MANIAC_STANLY, TRAINER_RUIN_MANIAC_STANLY},
|
||||||
MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) },
|
MAP(SIX_ISLAND_RUIN_VALLEY) },
|
||||||
{ {TRAINER_RUIN_MANIAC_FOSTER, TRAINER_RUIN_MANIAC_FOSTER},
|
{ {TRAINER_RUIN_MANIAC_FOSTER, TRAINER_RUIN_MANIAC_FOSTER},
|
||||||
MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) },
|
MAP(SIX_ISLAND_RUIN_VALLEY) },
|
||||||
{ {TRAINER_RUIN_MANIAC_LARRY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_RUIN_MANIAC_LARRY_2},
|
{ {TRAINER_RUIN_MANIAC_LARRY, SKIP, SKIP, SKIP, SKIP, TRAINER_RUIN_MANIAC_LARRY_2},
|
||||||
MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) },
|
MAP(SIX_ISLAND_RUIN_VALLEY) },
|
||||||
{ {TRAINER_HIKER_DARYL, TRAINER_HIKER_DARYL},
|
{ {TRAINER_HIKER_DARYL, TRAINER_HIKER_DARYL},
|
||||||
MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) },
|
MAP(SIX_ISLAND_RUIN_VALLEY) },
|
||||||
{ {TRAINER_POKEMANIAC_HECTOR, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_POKEMANIAC_HECTOR_2},
|
{ {TRAINER_POKEMANIAC_HECTOR, SKIP, SKIP, SKIP, SKIP, TRAINER_POKEMANIAC_HECTOR_2},
|
||||||
MAP_GROUP(SIX_ISLAND_RUIN_VALLEY), MAP_NUM(SIX_ISLAND_RUIN_VALLEY) },
|
MAP(SIX_ISLAND_RUIN_VALLEY) },
|
||||||
{ {TRAINER_PSYCHIC_DARIO, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_DARIO_2},
|
{ {TRAINER_PSYCHIC_DARIO, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_DARIO_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER) },
|
MAP(SEVEN_ISLAND_TRAINER_TOWER) },
|
||||||
{ {TRAINER_PSYCHIC_RODETTE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PSYCHIC_RODETTE_2},
|
{ {TRAINER_PSYCHIC_RODETTE, SKIP, SKIP, SKIP, SKIP, TRAINER_PSYCHIC_RODETTE_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TRAINER_TOWER), MAP_NUM(SEVEN_ISLAND_TRAINER_TOWER) },
|
MAP(SEVEN_ISLAND_TRAINER_TOWER) },
|
||||||
{ {TRAINER_AROMA_LADY_MIAH, TRAINER_AROMA_LADY_MIAH},
|
{ {TRAINER_AROMA_LADY_MIAH, TRAINER_AROMA_LADY_MIAH},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
||||||
{ {TRAINER_YOUNG_COUPLE_EVE_JON, TRAINER_YOUNG_COUPLE_EVE_JON},
|
{ {TRAINER_YOUNG_COUPLE_EVE_JON, TRAINER_YOUNG_COUPLE_EVE_JON},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
||||||
{ {TRAINER_JUGGLER_MASON, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_JUGGLER_MASON_2},
|
{ {TRAINER_JUGGLER_MASON, SKIP, SKIP, SKIP, SKIP, TRAINER_JUGGLER_MASON_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
||||||
{ {TRAINER_PKMN_RANGER_NICOLAS, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_NICOLAS_2},
|
{ {TRAINER_PKMN_RANGER_NICOLAS, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_NICOLAS_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
||||||
{ {TRAINER_PKMN_RANGER_MADELINE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_MADELINE_2},
|
{ {TRAINER_PKMN_RANGER_MADELINE, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_MADELINE_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON_ENTRANCE) },
|
||||||
{ {TRAINER_CRUSH_GIRL_CYNDY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_CRUSH_GIRL_CYNDY_2},
|
{ {TRAINER_CRUSH_GIRL_CYNDY, SKIP, SKIP, SKIP, SKIP, TRAINER_CRUSH_GIRL_CYNDY_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_TAMER_EVAN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_TAMER_EVAN_2},
|
{ {TRAINER_TAMER_EVAN, SKIP, SKIP, SKIP, SKIP, TRAINER_TAMER_EVAN_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_PKMN_RANGER_JACKSON, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_JACKSON_2},
|
{ {TRAINER_PKMN_RANGER_JACKSON, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_JACKSON_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_PKMN_RANGER_KATELYN, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_PKMN_RANGER_KATELYN_2},
|
{ {TRAINER_PKMN_RANGER_KATELYN, SKIP, SKIP, SKIP, SKIP, TRAINER_PKMN_RANGER_KATELYN_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_COOLTRAINER_LEROY, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOLTRAINER_LEROY_2},
|
{ {TRAINER_COOLTRAINER_LEROY, SKIP, SKIP, SKIP, SKIP, TRAINER_COOLTRAINER_LEROY_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_COOLTRAINER_MICHELLE, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOLTRAINER_MICHELLE_2},
|
{ {TRAINER_COOLTRAINER_MICHELLE, SKIP, SKIP, SKIP, SKIP, TRAINER_COOLTRAINER_MICHELLE_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_COOL_COUPLE_LEX_NYA, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, TRAINER_COOL_COUPLE_LEX_NYA_2},
|
{ {TRAINER_COOL_COUPLE_LEX_NYA, SKIP, SKIP, SKIP, SKIP, TRAINER_COOL_COUPLE_LEX_NYA_2},
|
||||||
MAP_GROUP(SEVEN_ISLAND_SEVAULT_CANYON), MAP_NUM(SEVEN_ISLAND_SEVAULT_CANYON) },
|
MAP(SEVEN_ISLAND_SEVAULT_CANYON) },
|
||||||
{ {TRAINER_RUIN_MANIAC_BRANDON, TRAINER_RUIN_MANIAC_BRANDON},
|
{ {TRAINER_RUIN_MANIAC_BRANDON, TRAINER_RUIN_MANIAC_BRANDON},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) },
|
MAP(SEVEN_ISLAND_TANOBY_RUINS) },
|
||||||
{ {TRAINER_RUIN_MANIAC_BENJAMIN, TRAINER_RUIN_MANIAC_BENJAMIN},
|
{ {TRAINER_RUIN_MANIAC_BENJAMIN, TRAINER_RUIN_MANIAC_BENJAMIN},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) },
|
MAP(SEVEN_ISLAND_TANOBY_RUINS) },
|
||||||
{ {TRAINER_PAINTER_EDNA, TRAINER_PAINTER_EDNA},
|
{ {TRAINER_PAINTER_EDNA, TRAINER_PAINTER_EDNA},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) },
|
MAP(SEVEN_ISLAND_TANOBY_RUINS) },
|
||||||
{ {TRAINER_GENTLEMAN_CLIFFORD, TRAINER_GENTLEMAN_CLIFFORD},
|
{ {TRAINER_GENTLEMAN_CLIFFORD, TRAINER_GENTLEMAN_CLIFFORD},
|
||||||
MAP_GROUP(SEVEN_ISLAND_TANOBY_RUINS), MAP_NUM(SEVEN_ISLAND_TANOBY_RUINS) },
|
MAP(SEVEN_ISLAND_TANOBY_RUINS) },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const u8 sMovementScript_Wait48[] = {
|
static const u8 sMovementScript_Wait48[] = {
|
||||||
@@ -760,7 +763,7 @@ void Task_VsSeeker_0(u8 taskId)
|
|||||||
}
|
}
|
||||||
else if (respval == VSSEEKER_CAN_USE)
|
else if (respval == VSSEEKER_CAN_USE)
|
||||||
{
|
{
|
||||||
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xffff);
|
ItemUse_SetQuestLogEvent(QL_EVENT_USED_ITEM, 0, gSpecialVar_ItemId, 0xFFFF);
|
||||||
FieldEffectStart(FLDEFF_USE_VS_SEEKER);
|
FieldEffectStart(FLDEFF_USE_VS_SEEKER);
|
||||||
gTasks[taskId].func = Task_VsSeeker_1;
|
gTasks[taskId].func = Task_VsSeeker_1;
|
||||||
gTasks[taskId].data[0] = 15;
|
gTasks[taskId].data[0] = 15;
|
||||||
@@ -792,7 +795,7 @@ static void Task_VsSeeker_2(u8 taskId)
|
|||||||
data[1] = 0;
|
data[1] = 0;
|
||||||
data[2] = 0;
|
data[2] = 0;
|
||||||
VsSeekerResetInBagStepCounter();
|
VsSeekerResetInBagStepCounter();
|
||||||
sVsSeeker->responseCode = GetVsSeekerResponseInArea(sVsSeekerData);
|
sVsSeeker->responseCode = GetVsSeekerResponseInArea(sRematches);
|
||||||
ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, sMovementScript_Wait48);
|
ScriptMovement_StartObjectMovementScript(0xFF, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, sMovementScript_Wait48);
|
||||||
gTasks[taskId].func = Task_VsSeeker_3;
|
gTasks[taskId].func = Task_VsSeeker_3;
|
||||||
}
|
}
|
||||||
@@ -861,7 +864,7 @@ static u8 CanUseVsSeeker(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 GetVsSeekerResponseInArea(const VsSeekerData * vsSeekerData)
|
static u8 GetVsSeekerResponseInArea(const struct RematchData * vsSeekerData)
|
||||||
{
|
{
|
||||||
u16 trainerIdx = 0;
|
u16 trainerIdx = 0;
|
||||||
u16 rval = 0;
|
u16 rval = 0;
|
||||||
@@ -933,7 +936,7 @@ void ClearRematchStateByTrainerId(void)
|
|||||||
{
|
{
|
||||||
u8 objEventId = 0;
|
u8 objEventId = 0;
|
||||||
struct ObjectEventTemplate *objectEventTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
struct ObjectEventTemplate *objectEventTemplates = gSaveBlock1Ptr->objectEventTemplates;
|
||||||
int vsSeekerDataIdx = LookupVsSeekerOpponentInArray(sVsSeekerData, gTrainerBattleOpponent_A);
|
int vsSeekerDataIdx = LookupVsSeekerOpponentInArray(sRematches, gTrainerBattleOpponent_A);
|
||||||
|
|
||||||
if (vsSeekerDataIdx != -1)
|
if (vsSeekerDataIdx != -1)
|
||||||
{
|
{
|
||||||
@@ -943,7 +946,7 @@ void ClearRematchStateByTrainerId(void)
|
|||||||
{
|
{
|
||||||
if ((objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL
|
if ((objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_NORMAL
|
||||||
|| objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_BURIED)
|
|| objectEventTemplates[i].objUnion.normal.trainerType == TRAINER_TYPE_BURIED)
|
||||||
&& vsSeekerDataIdx == LookupVsSeekerOpponentInArray(sVsSeekerData, GetTrainerFlagFromScript(objectEventTemplates[i].script)))
|
&& vsSeekerDataIdx == LookupVsSeekerOpponentInArray(sRematches, GetTrainerFlagFromScript(objectEventTemplates[i].script)))
|
||||||
{
|
{
|
||||||
struct ObjectEvent *objectEvent;
|
struct ObjectEvent *objectEvent;
|
||||||
|
|
||||||
@@ -995,7 +998,7 @@ static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchId
|
|||||||
while (--rematchIdx != 0)
|
while (--rematchIdx != 0)
|
||||||
{
|
{
|
||||||
const u16 *rematch_p = trainerIdxs + rematchIdx;
|
const u16 *rematch_p = trainerIdxs + rematchIdx;
|
||||||
if (*rematch_p != 0xFFFF)
|
if (*rematch_p != SKIP)
|
||||||
return rematchIdx;
|
return rematchIdx;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1003,20 +1006,20 @@ static u8 GetRematchTrainerIdGivenGameState(const u16 *trainerIdxs, u8 rematchId
|
|||||||
|
|
||||||
bool8 ShouldTryRematchBattle(void)
|
bool8 ShouldTryRematchBattle(void)
|
||||||
{
|
{
|
||||||
if (ShouldTryRematchBattleInternal(sVsSeekerData, gTrainerBattleOpponent_A))
|
if (ShouldTryRematchBattleInternal(sRematches, gTrainerBattleOpponent_A))
|
||||||
{
|
{
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
return HasRematchTrainerAlreadyBeenFought(sVsSeekerData, gTrainerBattleOpponent_A);
|
return HasRematchTrainerAlreadyBeenFought(sRematches, gTrainerBattleOpponent_A);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool8 ShouldTryRematchBattleInternal(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent)
|
static bool8 ShouldTryRematchBattleInternal(const struct RematchData *vsSeekerData, u16 trainerBattleOpponent)
|
||||||
{
|
{
|
||||||
s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
|
s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
|
||||||
|
|
||||||
if (rematchIdx == -1)
|
if (rematchIdx == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (rematchIdx >= 0 && rematchIdx < NELEMS(sVsSeekerData))
|
if (rematchIdx >= 0 && rematchIdx < NELEMS(sRematches))
|
||||||
{
|
{
|
||||||
if (IsThisTrainerRematchable(gSpecialVar_LastTalked))
|
if (IsThisTrainerRematchable(gSpecialVar_LastTalked))
|
||||||
return TRUE;
|
return TRUE;
|
||||||
@@ -1024,7 +1027,7 @@ static bool8 ShouldTryRematchBattleInternal(const VsSeekerData *vsSeekerData, u1
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool8 HasRematchTrainerAlreadyBeenFought(const VsSeekerData *vsSeekerData, u16 trainerBattleOpponent)
|
static bool8 HasRematchTrainerAlreadyBeenFought(const struct RematchData *vsSeekerData, u16 trainerBattleOpponent)
|
||||||
{
|
{
|
||||||
s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
|
s32 rematchIdx = GetRematchIdx(vsSeekerData, trainerBattleOpponent);
|
||||||
|
|
||||||
@@ -1041,19 +1044,19 @@ void ClearRematchStateOfLastTalked(void)
|
|||||||
SetBattledTrainerFlag();
|
SetBattledTrainerFlag();
|
||||||
}
|
}
|
||||||
|
|
||||||
static int LookupVsSeekerOpponentInArray(const VsSeekerData * array, u16 trainerId)
|
static int LookupVsSeekerOpponentInArray(const struct RematchData * array, u16 trainerId)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
for (i = 0; i < NELEMS(sVsSeekerData); i++)
|
for (i = 0; i < NELEMS(sRematches); i++)
|
||||||
{
|
{
|
||||||
for (j = 0; j < 6; j++)
|
for (j = 0; j < MAX_REMATCH_PARTIES; j++)
|
||||||
{
|
{
|
||||||
u16 testTrainerId;
|
u16 testTrainerId;
|
||||||
if (array[i].trainerIdxs[j] == 0)
|
if (array[i].trainerIdxs[j] == 0)
|
||||||
break;
|
break;
|
||||||
testTrainerId = array[i].trainerIdxs[j];
|
testTrainerId = array[i].trainerIdxs[j];
|
||||||
if (testTrainerId == 0xFFFF)
|
if (testTrainerId == SKIP)
|
||||||
continue;
|
continue;
|
||||||
if (testTrainerId == trainerId)
|
if (testTrainerId == trainerId)
|
||||||
return i;
|
return i;
|
||||||
@@ -1067,25 +1070,25 @@ int GetRematchTrainerId(u16 trainerId)
|
|||||||
{
|
{
|
||||||
u8 i;
|
u8 i;
|
||||||
u8 j;
|
u8 j;
|
||||||
j = GetNextAvailableRematchTrainer(sVsSeekerData, trainerId, &i);
|
j = GetNextAvailableRematchTrainer(sRematches, trainerId, &i);
|
||||||
if (!j)
|
if (!j)
|
||||||
return 0;
|
return 0;
|
||||||
TryGetRematchTrainerIdGivenGameState(sVsSeekerData[i].trainerIdxs, &j);
|
TryGetRematchTrainerIdGivenGameState(sRematches[i].trainerIdxs, &j);
|
||||||
return sVsSeekerData[i].trainerIdxs[j];
|
return sRematches[i].trainerIdxs[j];
|
||||||
}
|
}
|
||||||
|
|
||||||
u8 IsTrainerReadyForRematch(void)
|
u8 IsTrainerReadyForRematch(void)
|
||||||
{
|
{
|
||||||
return IsTrainerReadyForRematchInternal(sVsSeekerData, gTrainerBattleOpponent_A);
|
return IsTrainerReadyForRematchInternal(sRematches, gTrainerBattleOpponent_A);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool8 IsTrainerReadyForRematchInternal(const VsSeekerData * array, u16 trainerId)
|
static bool8 IsTrainerReadyForRematchInternal(const struct RematchData * array, u16 trainerId)
|
||||||
{
|
{
|
||||||
int rematchTrainerIdx = LookupVsSeekerOpponentInArray(array, trainerId);
|
int rematchTrainerIdx = LookupVsSeekerOpponentInArray(array, trainerId);
|
||||||
|
|
||||||
if (rematchTrainerIdx == -1)
|
if (rematchTrainerIdx == -1)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (rematchTrainerIdx >= NELEMS(sVsSeekerData))
|
if (rematchTrainerIdx >= NELEMS(sRematches))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (!IsThisTrainerRematchable(gSpecialVar_LastTalked))
|
if (!IsThisTrainerRematchable(gSpecialVar_LastTalked))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@@ -1177,11 +1180,11 @@ static u16 GetTrainerFlagFromScript(const u8 *script)
|
|||||||
return trainerFlag;
|
return trainerFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int GetRematchIdx(const VsSeekerData * vsSeekerData, u16 trainerFlagIdx)
|
static int GetRematchIdx(const struct RematchData * vsSeekerData, u16 trainerFlagIdx)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < NELEMS(sVsSeekerData); i++)
|
for (i = 0; i < NELEMS(sRematches); i++)
|
||||||
{
|
{
|
||||||
if (vsSeekerData[i].trainerIdxs[0] == trainerFlagIdx)
|
if (vsSeekerData[i].trainerIdxs[0] == trainerFlagIdx)
|
||||||
return i;
|
return i;
|
||||||
@@ -1223,20 +1226,20 @@ static bool8 IsTrainerVisibleOnScreen(struct VsSeekerTrainerInfo * trainerInfo)
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static u8 GetNextAvailableRematchTrainer(const VsSeekerData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr)
|
static u8 GetNextAvailableRematchTrainer(const struct RematchData * vsSeekerData, u16 trainerFlagNo, u8 * idxPtr)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
for (i = 0; i < NELEMS(sVsSeekerData); i++)
|
for (i = 0; i < NELEMS(sRematches); i++)
|
||||||
{
|
{
|
||||||
if (vsSeekerData[i].trainerIdxs[0] == trainerFlagNo)
|
if (vsSeekerData[i].trainerIdxs[0] == trainerFlagNo)
|
||||||
{
|
{
|
||||||
*idxPtr = i;
|
*idxPtr = i;
|
||||||
for (j = 1; j < 6; j++)
|
for (j = 1; j < MAX_REMATCH_PARTIES; j++)
|
||||||
{
|
{
|
||||||
if (vsSeekerData[i].trainerIdxs[j] == 0)
|
if (vsSeekerData[i].trainerIdxs[j] == TRAINER_NONE)
|
||||||
return j - 1;
|
return j - 1;
|
||||||
if (vsSeekerData[i].trainerIdxs[j] == 0xffff)
|
if (vsSeekerData[i].trainerIdxs[j] == SKIP)
|
||||||
continue;
|
continue;
|
||||||
if (HasTrainerBeenFought(vsSeekerData[i].trainerIdxs[j]))
|
if (HasTrainerBeenFought(vsSeekerData[i].trainerIdxs[j]))
|
||||||
continue;
|
continue;
|
||||||
@@ -1259,7 +1262,7 @@ static u8 GetRematchableTrainerLocalId(void)
|
|||||||
{
|
{
|
||||||
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1)
|
if (IsTrainerVisibleOnScreen(&sVsSeeker->trainerInfo[i]) == 1)
|
||||||
{
|
{
|
||||||
if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[i].trainerIdx, &idx))
|
if (HasTrainerBeenFought(sVsSeeker->trainerInfo[i].trainerIdx) != 1 || GetNextAvailableRematchTrainer(sRematches, sVsSeeker->trainerInfo[i].trainerIdx, &idx))
|
||||||
return sVsSeeker->trainerInfo[i].localId;
|
return sVsSeeker->trainerInfo[i].localId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1310,7 +1313,7 @@ static void StartAllRespondantIdleMovements(void)
|
|||||||
if (ObjectEventIdIsSane(sVsSeeker->trainerInfo[j].objectEventId) == 1)
|
if (ObjectEventIdIsSane(sVsSeeker->trainerInfo[j].objectEventId) == 1)
|
||||||
SetTrainerMovementType(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]);
|
SetTrainerMovementType(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]);
|
||||||
OverrideMovementTypeForObjectEvent(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]);
|
OverrideMovementTypeForObjectEvent(objectEvent, sVsSeeker->runningBehaviourEtcArray[i]);
|
||||||
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sVsSeekerData, sVsSeeker->trainerInfo[j].trainerIdx, &dummy);
|
gSaveBlock1Ptr->trainerRematches[sVsSeeker->trainerInfo[j].localId] = GetNextAvailableRematchTrainer(sRematches, sVsSeeker->trainerInfo[j].trainerIdx, &dummy);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user