Merge branch '_pret/master' into _pret/pr/doc1

This commit is contained in:
Eduardo Quezada 2025-11-29 10:35:48 -03:00
commit 5c29595a07
571 changed files with 15653 additions and 14254 deletions

View File

@ -4,10 +4,10 @@
#include "structs/rgb.h"
void InitBGPaletteBuffer(void);
void nullsub_4(s32 index, const RGB *color, s32 brightness, const RGB *ramp);
void nullsub_5(s32 index, const RGB *color);
void SetBGPaletteBufferColorArray(s32 index, const RGB *color);
void SetBGPaletteBufferColorRGB(s32 index, const RGB *color, s32 brightness, const RGB *ramp);
void nullsub_4(s32 index, const RGB_Struct *color, s32 brightness, const RGB_Struct *ramp);
void nullsub_5(s32 index, const RGB_Struct *color);
void SetBGPaletteBufferColorArray(s32 index, const RGB_Struct *color);
void SetBGPaletteBufferColorRGB(s32 index, const RGB_Struct *color, s32 brightness, const RGB_Struct *ramp);
void SetBGPaletteBufferColor(s32 index, u16 *color);
void TransferBGPaletteBuffer(void);

View File

@ -12,12 +12,12 @@ typedef struct unkDataFor8004AA4
{
/* 0x0 */ s16 colorCount;
s16 unk2;
/* 0x4 */ RGB colors[0];
/* 0x4 */ RGB_Struct colors[0];
} unkDataFor8004AA4;
void nullsub_6(void);
void sub_8004AA4(unkStruct_202EE8C *, OpenedFile *, s32);
bool8 sub_8004AF0(bool8, unkStruct_202EE8C *, s32, s32, s32, const RGB *);
bool8 sub_8004AF0(bool8, unkStruct_202EE8C *, s32, s32, s32, const RGB_Struct *);
bool8 sub_8004D14(unkStruct_202EE8C *, s32);
bool8 sub_8004D40(unkStruct_202EE8C *, s32);

View File

@ -24,13 +24,6 @@ struct unk_203B250
WindowTemplates windows;
};
// size: 0x8
struct TeamBadgeData
{
/* 0x0 */ u8 *pics; // probably a pointer to an arrays of pixels?
/* 0x4 */ RGB *palette; // Pics share common palette
};
bool8 sub_801D014(Pokemon *);
u32 sub_801D0DC(void);
u32 sub_801D178(void);

View File

@ -1,24 +1,27 @@
#ifndef GUARD_CODE_80A26CC_H
#define GUARD_CODE_80A26CC_H
#include "constants/ground_map.h"
#include "constants/script_dungeon_id.h"
#include "constants/script_id.h"
// size: 0x14
typedef struct DungeonInfo
{
/* 0x0 */ s16 unk0;
/* 0x2 */ s16 unk2;
/* 0x4 */ s16 unk4;
/* 0x6 */ s16 unk6;
/* 0x8 */ s16 unk8;
/* 0xA */ s16 unkA;
/* 0xC */ u8 dungeonIndex;
/* 0xD */ u8 unkD;
/* 0xE */ s16 unkE;
/* 0x10 */ u8 unk10;
/* 0x11 */ u8 unk11;
/* 0x0 */ s16 mapID1; // See enum "GroundMapID". -1 if nothing
/* 0x2 */ s16 mapID2; // See enum "GroundMapID". -1 if nothing
/* 0x4 */ s16 mapID3; // See enum "GroundMapID". -1 if nothing
/* 0x6 */ s16 scriptID1; // See enum "ScriptID". -1 if nothing
/* 0x8 */ s16 scriptID2; // See enum "ScriptID". -1 if nothing
/* 0xA */ s16 scriptID3; // See enum "ScriptID"
/* 0xC */ u8 dungeonID; // See enum "DungeonID"
/* 0xE */ s16 rescueDungeonID; // See enum "RescueDungeonId"
/* 0x10 */ u8 unk10; // Always 1
/* 0x11 */ bool8 unk11;
} DungeonInfo;
const DungeonInfo *GetDungeonInfo_80A2608(s32 index);
s16 sub_80A2654(s16 index);
const DungeonInfo *GetScriptDungeonInfo(s32 scriptDungeon_);
s16 ScriptDungeonIDToRescueDungeonID(s16 scriptDungeonID);
s16 sub_80A2668(s16);
s16 sub_80A2688(u8);
s16 RescueDungeonToScriptDungeonId(s16);
@ -26,10 +29,10 @@ s16 sub_80A26CC(s16);
u8 RescueDungeonToDungeonId(s16 index);
u8 sub_80A2728(s16 index);
u8 ScriptDungeonIdToDungeonId(s16 index);
s16 sub_80A2750(s16);
s16 sub_80A2750(s16 scriptDungeon);
bool8 IsRescueDungeonAvailable(s16 _rescueDungeonId);
bool8 sub_80A2824(u8 index);
bool8 sub_80A28F0(u8 index);
bool8 sub_80A2824(u8 dungeonID);
bool8 sub_80A28F0(u8 dungeonID);
s32 sub_80A29B0(u8 *);
#endif // GUARD_CODE_80A26CC_H

View File

@ -50,7 +50,8 @@ enum MusicID
MUS_TIME_OF_REUNION,
MUS_OPENING_TITLE,
// 47 - 50 are blank/empty slots for BG Music
MUS_DUNGEON_FAIL = 51,
MUS_BLANK_50 = 50,
MUS_DUNGEON_FAIL,
MUS_DUNGEON_COMPLETE,
// 53 - 99 are blank/empty slots for BG Music
MUS_FRIEND_AREA_UNUSED_1 = 100,

View File

@ -0,0 +1,123 @@
#ifndef GUARD_CONSTANTS_CUTSCENES_H
#define GUARD_CONSTANTS_CUTSCENES_H
enum CutsceneKind
{
CUTSCENE_NONE,
CUTSCENE_MT_STEEL_ATTEMPT1,
CUTSCENE_MT_STEEL_ATTEMPT2,
CUTSCENE_MT_STEEL_POSTSTORY,
CUTSCENE_SINISTER_WOODS_ATTEMPT1,
CUTSCENE_SINISTER_WOODS_ATTEMPT2,
CUTSCENE_SINISTER_WOODS_POSTSTORY,
CUTSCENE_MT_THUNDER_PEAK_ATTEMPT1,
CUTSCENE_MT_THUNDER_PEAK_ATTEMPT2,
CUTSCENE_MT_THUNDER_PEAK_POSTSTORY,
CUTSCENE_MT_BLAZE_PEAK_ATTEMPT1,
CUTSCENE_MT_BLAZE_PEAK_ATTEMPT2,
CUTSCENE_MT_BLAZE_PEAK_POSTSTORY,
CUTSCENE_FROSTY_GROTTO_ATTEMPT1,
CUTSCENE_FROSTY_GROTTO_ATTEMPT2,
CUTSCENE_FROSTY_GROTTO_POSTSTORY,
CUTSCENE_MT_FREEZE_PEAK,
CUTSCENE_MT_FREEZE_PEAK_POSTSTORY,
CUTSCENE_MAGMA_CAVERN_PIT_ATTEMPT1,
CUTSCENE_MAGMA_CAVERN_PIT_ATTEMPT2,
CUTSCENE_MAGMA_CAVERN_PIT_POSTSTORY,
CUTSCENE_MAGMA_CAVERN_MID,
CUTSCENE_MAGMA_CAVERN_MID_POSTSTORY,
CUTSCENE_SKY_TOWER_SUMMIT_ATTEMPT1,
CUTSCENE_SKY_TOWER_SUMMIT_ATTEMPT2,
CUTSCENE_SKY_TOWER_SUMMIT_POSTSTORY,
CUTSCENE_UPROAR_FOREST_ATTEMPT1,
CUTSCENE_UPROAR_FOREST_ATTEMPT2,
CUTSCENE_UPROAR_FOREST_POSTSTORY,
CUTSCENE_WESTERN_CAVE_ATTEMPT1,
CUTSCENE_WESTERN_CAVE_ATTEMPT2,
CUTSCENE_WESTERN_CAVE_POSTSTORY,
CUTSCENE_FIERY_FIELD_ATTEMPT1,
CUTSCENE_FIERY_FIELD_ATTEMPT2,
CUTSCENE_FIERY_FIELD_POSTSTORY,
CUTSCENE_LIGHTNING_FIELD_ATTEMPT1,
CUTSCENE_LIGHTNING_FIELD_ATTEMPT2,
CUTSCENE_LIGHTNING_FIELD_POSTSTORY,
CUTSCENE_NORTHWIND_FIELD_ATTEMPT1,
CUTSCENE_NORTHWIND_FIELD_ATTEMPT2,
CUTSCENE_NORTHWIND_FIELD_POSTSTORY,
CUTSCENE_MT_FARAWAY,
CUTSCENE_MT_FARAWAY_POSTSTORY,
CUTSCENE_NORTHERN_RANGE_ATTEMPT1,
CUTSCENE_NORTHERN_RANGE_ATTEMPT2,
CUTSCENE_NORTHERN_RANGE_POSTSTORY,
CUTSCENE_REGIROCK,
CUTSCENE_REGICE,
CUTSCENE_REGISTEEL,
CUTSCENE_JIRACHI,
CUTSCENE_JIRACHI_POSTSTORY,
CUTSCENE_SILVER_TRENCH,
CUTSCENE_STORMY_SEA,
CUTSCENE_METEOR_CAVE,
CUTSCENE_PURITY_FOREST,
CUTSCENE_MAZE_BOSS,
CUTSCENE_MEDICHAM,
CUTSCENE_MEDICHAM_POSTSTORY,
CUTSCENE_HOWLING_FOREST,
CUTSCENE_HOWLING_FOREST_POSTSTORY,
NUM_CUTSCENES
};
enum CutsceneFlagID
{
CUTSCENE_FLAG_MT_STEEL_REACHED,
CUTSCENE_FLAG_MT_STEEL_COMPLETE,
CUTSCENE_FLAG_SINISTER_WOODS_REACHED,
CUTSCENE_FLAG_SINISTER_WOODS_COMPLETE,
CUTSCENE_FLAG_MT_THUNDER_PEAK_REACHED,
CUTSCENE_FLAG_MT_THUNDER_PEAK_COMPLETE,
CUTSCENE_FLAG_MT_BLAZE_PEAK_REACHED,
CUTSCENE_FLAG_MT_BLAZE_PEAK_COMPLETE,
CUTSCENE_FLAG_FROSTY_GROTTO_REACHED,
CUTSCENE_FLAG_FROSTY_GROTTO_COMPLETE,
CUTSCENE_FLAG_MT_FREEZE_PEAK_COMPLETE,
CUTSCENE_FLAG_MAGMA_CAVERN_PIT_REACHED,
CUTSCENE_FLAG_MAGMA_CAVERN_PIT_COMPLETE,
CUTSCENE_FLAG_MAGMA_CAVERN_MID_REACHED,
CUTSCENE_FLAG_SKY_TOWER_SUMMIT_REACHED,
CUTSCENE_FLAG_SKY_TOWER_SUMMIT_COMPLETE,
CUTSCENE_FLAG_UPROAR_FOREST_REACHED,
CUTSCENE_FLAG_UPROAR_FOREST_COMPLETE,
CUTSCENE_FLAG_WESTERN_CAVE_REACHED,
CUTSCENE_FLAG_WESTERN_CAVE_COMPLETE,
CUTSCENE_FLAG_FIERY_FIELD_REACHED,
CUTSCENE_FLAG_FIERY_FIELD_COMPLETE,
CUTSCENE_FLAG_LIGHTNING_FIELD_REACHED,
CUTSCENE_FLAG_LIGHTNING_FIELD_COMPLETE,
CUTSCENE_FLAG_NORTHWIND_FIELD_REACHED,
CUTSCENE_FLAG_NORTHWIND_FIELD_COMPLETE,
CUTSCENE_FLAG_MT_FARAWAY_COMPLETE,
CUTSCENE_FLAG_NORTHERN_RANGE_REACHED,
CUTSCENE_FLAG_NORTHERN_RANGE_COMPLETE,
// Written to when entering a Regi room:
// If the Regi was recruited before, this is set to TRUE.
// If the Regi "Part" or Music Box is in the inventory or held, this is set to TRUE.
// Otherwise, this is set to FALSE.
// If this is TRUE and the Regi is present, the Regi can be recruited.
CUTSCENE_FLAG_REGI_ITEM_OBTAINED,
CUTSCENE_FLAG_JIRACHI_COMPLETE,
CUTSCENE_FLAG_FROSTY_FOREST_INTRUDED,
CUTSCENE_FLAG_MEDICHAM_COMPLETE,
CUTSCENE_FLAG_HOWLING_FOREST_COMPLETE,
// Written to when entering a Regi room.
// If the Regi was recruited before, this is set to TRUE.
// Otherwise, this is set to FALSE.
CUTSCENE_FLAG_REGI_RECRUITED,
NUM_CUTSCENE_FLAGS = 64,
CUTSCENE_FLAG_INVALID = 0xFF,
};
#define CUTSCENE_FLAGS_U32STORAGE 3 // No idea why this is larger than necessary
#endif // GUARD_CONSTANTS_CUTSCENES_H

View File

@ -14,7 +14,24 @@ enum Direction
DIRECTION_NORTHWEST,
DIRECTION_WEST,
DIRECTION_SOUTHWEST,
NUM_DIRECTIONS
};
#endif
enum DirectionTransformation
{
DIR_TRANS_NONE,
DIR_TRANS_SPINRIGHT1, // Spin right 1 (example: South -> SouthWest)
DIR_TRANS_SPINLEFT1, // Spin left 1 (example: South -> SouthEast)
DIR_TRANS_SPINRIGHT2, // Spin right 2 (example: South -> West)
DIR_TRANS_SPINLEFT2, // Spin left 2 (example: South -> East)
DIR_TRANS_FLIP, // Flip (example: South -> North)
DIR_TRANS_RAND_OFFSET_SOFT_CARDINAL, // Like DIR_TRANS_RAND_OFFSET_SOFT but only results in cardinal directions
DIR_TRANS_RAND_OFFSET_SOFT, // SpinLeft1 or Nothing or SpinRight1
DIR_TRANS_RAND_CARDINAL, // Random non-diagonal
DIR_TRANS_RAND, // Fully random
DIR_TRANS_10,
DIR_TRANS_11,
};
#endif // GUARD_CONSTANTS_DIRECTION_H

View File

@ -1,6 +1,8 @@
#ifndef GUARD_CONSTANTS_DUNGEON_H
#define GUARD_CONSTANTS_DUNGEON_H
#include "constants/cutscenes.h"
enum DungeonID
{
DUNGEON_TINY_WOODS = 0,
@ -66,6 +68,7 @@ enum DungeonID
DUNGEON_MT_FARAWAY = 60,
DUNGEON_D61 = 61,
DUNGEON_PURITY_FOREST = 62,
DUNGEON_OUT_ON_RESCUE = 63,
DUNGEON_JOIN_LOCATION_LEADER = 64, // Displays as "???".
DUNGEON_JOIN_LOCATION_PARTNER = 65, // Displays as "Tiny Woods".

View File

@ -1,7 +1,68 @@
#ifndef GUARD_CONSTANTS_EVENT_FLAG_H
#define GUARD_CONSTANTS_EVENT_FLAG_H
enum FlagCalcOperation {
enum MainQuest
{
// SCENARIO_MAIN:
QUEST_SET_TEAM_NAME,
QUEST_UNK1, // Rescue dungeon related. For some reason it scans all rescue dungeons.
QUEST_CAN_ACCESS_JOBS,
QUEST_CAN_RECRUIT,
QUEST_SQUARE_ASLEEP,
QUEST_UNK5, // Run away related? It disallows "friend rescue" features.
QUEST_REACHED_POSTGAME,
QUEST_UNLOCKED_EVOLUTIONS,
QUEST_CAN_CHANGE_LEADER,
QUEST_CAN_DEPOSIT_PARTNER,
QUEST_UNK10, // Dojo-related
QUEST_UNK11,
QUEST_UNK12, // Music-related
QUEST_IN_WORLD_CALAMITY,
QUEST_MAZE_14,
QUEST_MAZE_15,
QUEST_LEGEND_ZAPDOS,
QUEST_LEGEND_MOLTRES,
QUEST_LEGEND_ARTICUNO,
QUEST_LEGEND_GROUDON,
QUEST_LEGEND_RAYQUAZA,
// SCENARIO_SUB2:
QUEST_LEGEND_KYOGRE,
QUEST_LEGEND_LUGIA,
// SCENARIO_SUB3:
QUEST_LEGEND_DEOXYS,
// SCENARIO_SUB4:
QUEST_LEGEND_HO_OH,
// SCENARIO_SUB5:
QUEST_LEGEND_MEWTWO,
// SCENARIO_SUB7:
QUEST_LEGEND_MEW,
// RESCUE_SCENARIO_CONQUEST_LIST:
QUEST_LEGEND_CELEBI,
// Special check:
QUEST_LUCARIO_RANK,
// TRAINING_CONQUEST_LIST:
QUEST_COMPLETED_ALL_MAZES,
};
enum FlagCalcOperation
{
CALC_SET,
CALC_SUB,
CALC_ADD,
@ -16,7 +77,8 @@ enum FlagCalcOperation {
CALC_RANDOM,
};
enum FlagJudgeOperation {
enum FlagJudgeOperation
{
JUDGE_TRUE,
JUDGE_FALSE,
JUDGE_EQ,
@ -30,7 +92,245 @@ enum FlagJudgeOperation {
JUDGE_BIT_SET,
};
enum ScriptVarId {
enum StartModeVal
{
STARTMODE_NEW_GAME,
STARTMODE_CONTINUE_GAME,
STARTMODE_GROUND, // Overworld
STARTMODE_3,
STARTMODE_FRIEND_AREAS,
STARTMODE_DUNGEON_FROM_WORLD_MAP,
STARTMODE_6,
STARTMODE_CONTINUE_QUICKSAVE,
STARTMODE_8,
STARTMODE_DUNGEON_WON,
STARTMODE_10,
STARTMODE_11,
STARTMODE_DUNGEON_LOST,
};
// SCENARIO_MAIN:
// 0, 0 = New game
// 1, 0 = ???
// 2, 0 = ???
// 2, 1 = ???
// 2, 2 = ??? Set upon exiting Tiny Woods.
// 3, 0 = Chose team name. See QUEST_SET_TEAM_NAME. Set in EVENT_M01E01A_L003
// 3, 1 = ???
// 3, 2 = ???
// 3, 3 = ??? Bed tutorial related.
// 3, 4 = ??? See QUEST_UNK1 also
// 3, 5 = ???
// 3, 6 = ??? Thunderwave cave related
// 4, 0 = ??? Set upon exiting Thunderwave Cave.
// 4, 1 = ???
// 4, 2 = ???
// 4, 3 = ???
// 4, 4 = ??? See QUEST_CAN_ACCESS_JOBS also
// 4, 5 = ??? Mt Steel related
// 4, 6 = ???
// 4, 7 = ???
// 4, 8 = ???
// 5, 0 = ???
// 5, 1 = ??? See QUEST_CAN_RECRUIT also
// 5, 2 = ???
// 5, 3 = ???
// 5, 4 = ???
// 5, 5 = ??? See QUEST_UNK10 and QUEST_UNK11 also
// 5, 6 = ???
// 5, 7 = ??? See QUEST_MAZE_14 also
// 5, 8 = ???
// 5, 9 = ??? Sinister Woods related
// 5, 10 = ???
// 5, 11 = ???
// 6, 0 = ???
// 6, 1 = ???
// 6, 2 = ???
// 6, 3 = ??? Silent Chasm related
// 7, 0 = ???
// 7, 1 = ???
// 7, 2 = ???
// 7, 3 = ??? Mt Thunder related
// 7, 4 = ???
// 7, 5 = ???
// 8, 0 = ??? See QUEST_LEGEND_ZAPDOS also
// 8, 1 = ???
// 8, 2 = ???
// 8, 3 = ??? Great Canyon related
// 8, 4 = ???
// 9, 0 = ???
// 9, 1 = ???
// 9, 2 = ???
// 9, 3 = ???
// 9, 4 = ???
// 9, 5 = ???
// 10, 0 = ???
// 10, 1 = ???
// 10, 2 = ???
// 10, 3 = ???
// 11, 0 = Fugitive story begins. See QUEST_SQUARE_ASLEEP also
// 11, 1 = ???
// 11, 2 = ??? See QUEST_UNK12 also
// 11, 3 = ??? See QUEST_UNK12 also
// 11, 4 = ??? See QUEST_UNK5 also
// 11, 5 = ???
// 12, 0 = Lapis Cave completed? Mt Blaze story begins?
// 12, 1 = ???
// 12, 2 = ???
// 12, 3 = ???
// 12, 4 = ???
// 13, 0 = Mt Blaze completed. Frosty Grotto story begins. See QUEST_SQUARE_ASLEEP and QUEST_LEGEND_MOLTRES also
// 13, 1 = ???
// 13, 2 = ???
// 13, 3 = ???
// 13, 4 = ???
// 14, 0 = Frosty Grotto completed. Mt Freeze story begins? See QUEST_LEGEND_ARTICUNO also
// 14, 1 = ???
// 14, 2 = ???
// 14, 3 = ???
// 15, 0 = Mt Freeze completed? See QUEST_UNK5 and QUEST_MAZE_14 also
// 15, 1 = ???
// 15, 2 = ???
// 15, 3 = ???
// 15, 4 = ???
// 15, 5 = ??? Uproar Forest related
// 15, 6 = ???
// 15, 7 = ???
// 15, 8 = ???
// 15, 9 = ???
// 15, 10 = ??? Magma Cavern related
// 15, 11 = ??? Magma Cavern related
// 15, 12 = ???
// 16, 0 = Magma Cavern completed. Sky Tower story begins. See QUEST_LEGEND_GROUDON also
// 16, 1 = ???
// 16, 2 = World calamity music is forced. Partner awaits in Pokémon Square for you to confirm you're ready for Sky Tower. You begin dreaming with Gardevoir and Gengar is there. See QUEST_IN_WORLD_CALAMITY
// 16, 3 = ???
// 16, 4 = ??? Sky Tower related
// 16, 5 = ???
// 16, 6 = ???
// 17, 0 = Sky Tower completed. See QUEST_LEGEND_RAYQUAZA also
// 17, 1 = ???
// 18, 0 = ??? See QUEST_REACHED_POSTGAME also
// 18, 1 = ???
// 18, 2 = ??? See QUEST_UNLOCKED_EVOLUTIONS also
// 18, 3 = ??? See QUEST_CAN_CHANGE_LEADER also
// 18, 4 = ???
// 19, 0 = ??? See QUEST_CAN_DEPOSIT_PARTNER also
// 19, 1 = ???
// 19, 2 = ???
// 20, 1 = ???
// 20, 2 = ???
// 21, 1 = ???
// 21, 2 = ???
// 22, 1 = ???
// 22, 2 = ???
// 23, 1 = ???
// 23, 2 = ???
// 24, 1 = ???
// 24, 2 = ???
// 25, 1 = ???
// 25, 2 = ???
// 26, 1 = ???
// 26, 2 = ???
// 27, 1 = ??? Set from EVENT_DIVIDE_AFTER
// 27, 2 = ???
// 58, 1 = ???
// SCENARIO_SUB1:
// 29, 1 = Mankey Quest activated.
// 29, 2 = ??? Uproar Forest related
// 29, 3 = ??? Uproar Forest related
// 30, 0 = Mankey gang brought to base?
// 30, 2 = Enough chestnuts collected to complete team base renovation.
// 31, 0 = ??? Uproar Forest related
// 31, 1 = ??? Howling Forest related
// 31, 2 = ??? Howling Forest related
// 31, 3 = ???
// 32, 0 = ??? Howling Forest related
// 32, 2 = Smeargle cannot join because its friend area is full.
// 32, 3 = Smeargle joined.
// SCENARIO_SUB2:
// 33, 1 = Stormy Sea story activated.
// 33, 2 = Heard Lombre's story about the Stormy Sea.
// 33, 3 = Ready to speak to Whiscash about Stormy Sea.
// 33, 4 = Stormy Sea unlocked from Whiscash.
// 33, 5 = ???
// 34, 0 = Stormy Sea completed. See QUEST_LEGEND_KYOGRE
// 34, 1 = ???
// 34, 2 = ??? Legendary Island friend area related
// 34, 3 = ??? Silver Trench related
// 34, 5 = ???
// 35, 0 = Silver Trench completed. See QUEST_LEGEND_LUGIA
// SCENARIO_SUB3:
// 36, 1 = Meteor Cave story activated.
// 36, 2 = ??? Meteor Cave related
// 36, 3 = ???
// 37, 0 = Meteor Cave completed. See QUEST_LEGEND_DEOXYS
// SCENARIO_SUB4:
// 38, 1 = Ho-Oh story activated.
// 38, 2 = Xatu awaits for Ho-Oh story.
// 39, 0 = Xatu met for Ho-Oh story. Fiery Field opens.
// 39, 3 = ???
// 40, 0 = Fiery Field completed. Lightning Field opens.
// 40, 3 = ???
// 41, 0 = Lightning Field completed. Northwind Field opens.
// 41, 3 = ???
// 42, 0 = Northwind Field completed. Mt Faraway opens.
// 42, 3 = ???
// 43, 0 = Mt Faraway completed. See QUEST_LEGEND_HO_OH
// 43, 2 = ??? RESCUE_DUNGEON_GREAT_CANYON_2 and Fields/MtFaraway related
// SCENARIO_SUB5:
// 44, 1 = Western Cave story activated.
// 44, 2 = Western Cave opens.
// 44, 3 = ???
// 45, 0 = Western Cave completed. See QUEST_LEGEND_MEWTWO
// SCENARIO_SUB6:
// 46, 1 = Latios/Latias story activated.
// 46, 2 = Northern Range opens.
// 46, 3 = ???
// 47, 2 = Pitfall Valley opens.
// 47, 3 = ???
// 48, 0 = Latios/Latias story completed.
// SCENARIO_SUB7:
// 49, 1 = Buried Relic story activated.
// 49, 2 = Read Buried Relic news
// 49, 3 = Buried Relic opens.
// 49, 4 = ???
// 50, 0 = Buried Relic completed. See QUEST_LEGEND_MEW
// SCENARIO_SUB8:
// 51, 1 = Wish Cave story activated.
// 51, 2 = ???
// 51, 3 = ???
// 51, 4 = ???
// 51, 5 = ???
// 51, 6 = ???
// 51, 7 = ??? Wish Cave related
// 51, 8 = ??? Wish Cave related
// 51, 9 = ??? Set upon exiting Wish Cave.
// 52, 0 = Wish Cave completed.
// SCENARIO_SUB9:
// 53, 1 = Curse lifting story activated.
// 53, 2 = ???
// 53, 3 = ???
// 53, 4 = ??? Genger Mt Freeze related
// 53, 5 = ???
// 53, 6 = ??? RESCUE_DUNGEON_MT_FREEZE_2 related
// 54, 0 = ??? RESCUE_DUNGEON_MT_FREEZE_2 related
// 54, 2 = ??? Murky Cave related (EVENT_S09E01B_L001)
// 54, 4 = ??? Set upon exiting Murky Cave.
// 55, 2 = ??? RESCUE_DUNGEON_MT_FREEZE_2 and Murky Cave related
// 55, 3 = Gardevoir recruited
enum ScriptVarId
{
/* 0x00 */ VERSION,
/* 0x01 */ CONDITION,
/* 0x02 */ SCENARIO_SELECT,
@ -55,7 +355,7 @@ enum ScriptVarId {
/* 0x15 */ DUNGEON_ENTER_FREQUENCY,
/* 0x16 */ DUNGEON_RESULT,
/* 0x17 */ SCRIPT_MODE,
/* 0x18 */ START_MODE,
/* 0x18 */ START_MODE, // See enum "StartModeVal"
/* 0x19 */ CLEAR_COUNT,
/* 0x1a */ CONDITION_KIND,
/* 0x1b */ WEATHER_KIND,

View File

@ -3,8 +3,10 @@
enum FixedRoomID
{
// floorwide fixed rooms
FIXED_ROOM_MT_STEEL_SKARMORY = 1,
// Floorwide fixed rooms
FIXED_ROOM_NONE,
FIXED_ROOM_MT_STEEL_SKARMORY,
FIXED_ROOM_SINISTER_WOODS_TEAM_MEANIES,
FIXED_ROOM_MT_THUNDER_PEAK_ZAPDOS,
FIXED_ROOM_MT_BLAZE_PEAK_MOLTRES,
@ -30,6 +32,9 @@ enum FixedRoomID
FIXED_ROOM_HOWLING_FOREST_SMEARGLE,
FIXED_ROOM_PURITY_FOREST_CELEBI,
FIXED_ROOM_WISH_CAVE_MEDICHAM,
// Mazes
FIXED_ROOM_NORMAL_MAZE_BOSS,
FIXED_ROOM_FIRE_MAZE_BOSS,
FIXED_ROOM_WATER_MAZE_BOSS,
@ -53,7 +58,9 @@ enum FixedRoomID
FIXED_ROOM_TEAM_RUMBLEROCK_BOSS,
FIXED_ROOM_RESCUE_TEAM_2_BOSS,
FIXED_ROOM_RESCUE_TEAM_MAZE_BOSS,
// non-floorwide fixed rooms
// Non-floorwide fixed rooms
FIXED_ROOM_WYVERN_HILL_HM_FLY,
FIXED_ROOM_SOLAR_CAVE_HM_DIVE,
FIXED_ROOM_SOLAR_CAVE_HM_WATERFALL,
@ -75,8 +82,7 @@ enum FixedRoomID
#define FIRST_DOJO_MAZE_BOSS_ROOM FIXED_ROOM_NORMAL_MAZE_BOSS
#define LAST_DOJO_MAZE_BOSS_ROOM FIXED_ROOM_RESCUE_TEAM_MAZE_BOSS
#define NUM_MAZE_BOSS_ROOMS LAST_DOJO_MAZE_BOSS_ROOM - FIRST_DOJO_MAZE_BOSS_ROOM
#define LAST_FLOORWIDE_FIXED_ROOM FIXED_ROOM_RESCUE_TEAM_MAZE_BOSS
#define FIRST_NON_FLOORWIDE_FIXED_ROOM LAST_FLOORWIDE_FIXED_ROOM + 1
#endif
#endif // GUARD_CONSTANTS_FIXED_ROOMS_H

View File

@ -1,7 +1,8 @@
#ifndef GUARD_CONSTANTS_GROUND_MAP_H
#define GUARD_CONSTANTS_GROUND_MAP_H
enum {
enum GroundMapID
{
MAP_SQUARE,
MAP_POKEMON_SQUARE,
MAP_WHISCASH_POND,

View File

@ -430,6 +430,8 @@
#define NUM_MONSTERS MONSTER_JIRACHI
#define MONSTER_MAX (MONSTER_RAYQUAZA_CUTSCENE + 1)
#define MONSTER_FLAGS_U32STORAGE 14
#define IS_CASTFORM_FORM_MONSTER(id)((id == MONSTER_CASTFORM_SNOWY || id == MONSTER_CASTFORM_SUNNY || id == MONSTER_CASTFORM_RAINY))
#define IS_DEOXYS_FORM_MONSTER(id)((id == MONSTER_DEOXYS_ATTACK || id == MONSTER_DEOXYS_DEFENSE || id == MONSTER_DEOXYS_SPEED))

View File

@ -3,6 +3,8 @@
enum RescueDungeonId
{
RESCUE_DUNGEON_INVALID = -1,
RESCUE_DUNGEON_TINY_WOODS,
RESCUE_DUNGEON_THUNDERWAVE_CAVE,
RESCUE_DUNGEON_MT_STEEL,
@ -34,6 +36,9 @@ enum RescueDungeonId
RESCUE_DUNGEON_WISH_CAVE,
RESCUE_DUNGEON_MT_FREEZE_2,
RESCUE_DUNGEON_MURKY_CAVE,
// Non-story rescues:
RESCUE_DUNGEON_DESERT_REGION,
RESCUE_DUNGEON_SOUTHERN_CAVERN,
RESCUE_DUNGEON_WYVERN_HILL,
@ -49,7 +54,11 @@ enum RescueDungeonId
RESCUE_DUNGEON_REMAINS_ISLAND,
RESCUE_DUNGEON_MARVELOUS_SEA,
RESCUE_DUNGEON_FANTASY_STRAIT,
RESCUE_DUNGEON_COUNT,
};
#define MAX_STORY_MISSION RESCUE_DUNGEON_MURKY_CAVE
#define NUM_STORY_MISSIONS (MAX_STORY_MISSION + 1)
#endif // GUARD_CONSTANTS_RESCUE_DUNGEON_ID_H

View File

@ -0,0 +1,306 @@
#ifndef GUARD_CONSTANTS_SCRIPT_CMD_H
#define GUARD_CONSTANTS_SCRIPT_CMD_H
enum ScriptOpID
{
CMD_BYTE_00, // Corresponds to "None"
CMD_BYTE_01,
CMD_BYTE_02,
CMD_BYTE_03,
CMD_BYTE_04,
CMD_BYTE_05,
CMD_BYTE_06,
CMD_BYTE_07,
CMD_BYTE_08,
CMD_BYTE_09,
CMD_BYTE_0A,
CMD_BYTE_0B,
CMD_BYTE_0C,
CMD_BYTE_0D,
CMD_BYTE_0E,
CMD_BYTE_0F,
CMD_BYTE_10,
CMD_BYTE_11,
CMD_BYTE_12,
CMD_BYTE_13,
CMD_BYTE_14,
CMD_BYTE_15,
CMD_BYTE_16,
CMD_BYTE_17,
CMD_BYTE_18,
CMD_BYTE_19,
CMD_BYTE_1A,
CMD_BYTE_1B,
CMD_BYTE_1C,
CMD_BYTE_1D,
CMD_BYTE_1E,
CMD_BYTE_1F,
CMD_BYTE_20,
CMD_BYTE_21,
CMD_BYTE_22,
CMD_BYTE_23,
CMD_BYTE_24,
CMD_BYTE_25,
CMD_BYTE_26,
CMD_BYTE_27,
CMD_BYTE_28,
CMD_BYTE_29,
CMD_BYTE_2A,
CMD_BYTE_2B,
CMD_BYTE_2C,
CMD_BYTE_2D,
CMD_BYTE_2E,
CMD_BYTE_2F,
CMD_BYTE_30,
CMD_BYTE_31,
CMD_BYTE_32,
CMD_BYTE_33,
CMD_BYTE_34,
CMD_BYTE_35,
CMD_BYTE_36,
CMD_BYTE_37,
CMD_BYTE_38,
CMD_BYTE_39,
CMD_BYTE_3A,
CMD_BYTE_3B,
CMD_BYTE_3C,
CMD_BYTE_3D,
CMD_BYTE_3E,
CMD_BYTE_3F,
CMD_BYTE_40,
CMD_BYTE_41,
CMD_BYTE_42,
CMD_BYTE_43,
CMD_BYTE_44,
CMD_BYTE_45,
CMD_BYTE_46,
CMD_BYTE_47,
CMD_BYTE_48,
CMD_BYTE_49,
CMD_BYTE_4A,
CMD_BYTE_4B,
CMD_BYTE_4C,
CMD_BYTE_4D,
CMD_BYTE_4E,
CMD_BYTE_4F,
CMD_BYTE_50,
CMD_BYTE_51,
CMD_BYTE_52,
CMD_BYTE_53,
CMD_BYTE_54,
CMD_BYTE_55,
CMD_BYTE_56,
CMD_BYTE_57,
CMD_BYTE_58,
CMD_BYTE_59,
CMD_BYTE_5A,
CMD_BYTE_5B,
CMD_BYTE_5C,
CMD_BYTE_5D,
CMD_BYTE_5E,
CMD_BYTE_5F,
CMD_BYTE_60,
CMD_BYTE_61,
CMD_BYTE_62,
CMD_BYTE_63,
CMD_BYTE_64,
CMD_BYTE_65,
CMD_BYTE_66,
CMD_BYTE_67,
CMD_BYTE_68,
CMD_BYTE_69,
CMD_BYTE_6A,
CMD_BYTE_6B,
CMD_BYTE_6C,
CMD_BYTE_6D,
CMD_BYTE_6E,
CMD_BYTE_6F,
CMD_BYTE_70,
CMD_BYTE_71,
CMD_BYTE_72,
CMD_BYTE_73,
CMD_BYTE_74,
CMD_BYTE_75,
CMD_BYTE_76,
CMD_BYTE_77,
CMD_BYTE_78,
CMD_BYTE_79,
CMD_BYTE_7A,
CMD_BYTE_7B,
CMD_BYTE_7C,
CMD_BYTE_7D,
CMD_BYTE_7E,
CMD_BYTE_7F,
CMD_BYTE_80,
CMD_BYTE_81,
CMD_BYTE_82,
CMD_BYTE_83,
CMD_BYTE_84,
CMD_BYTE_85,
CMD_BYTE_86,
CMD_BYTE_87,
CMD_BYTE_88,
CMD_BYTE_89,
CMD_BYTE_8A,
CMD_BYTE_8B,
CMD_BYTE_8C,
CMD_BYTE_8D,
CMD_BYTE_8E,
CMD_BYTE_8F,
CMD_BYTE_90,
CMD_BYTE_91,
CMD_BYTE_92,
CMD_BYTE_93,
CMD_BYTE_94,
CMD_BYTE_95,
CMD_BYTE_96,
CMD_BYTE_97,
CMD_BYTE_98,
CMD_BYTE_99,
CMD_BYTE_9A,
CMD_BYTE_9B,
CMD_BYTE_9C,
CMD_BYTE_9D,
CMD_BYTE_9E,
CMD_BYTE_9F,
CMD_BYTE_A0,
CMD_BYTE_A1,
CMD_BYTE_A2,
CMD_BYTE_A3,
CMD_BYTE_A4,
CMD_BYTE_A5,
CMD_BYTE_A6,
CMD_BYTE_A7,
CMD_BYTE_A8,
CMD_BYTE_A9,
CMD_BYTE_AA,
CMD_BYTE_AB,
CMD_BYTE_AC,
CMD_BYTE_AD,
CMD_BYTE_AE,
CMD_BYTE_AF,
CMD_BYTE_B0,
CMD_BYTE_B1,
CMD_BYTE_B2,
CMD_BYTE_B3,
CMD_BYTE_B4,
CMD_BYTE_B5,
CMD_BYTE_B6,
CMD_BYTE_B7,
CMD_BYTE_B8,
CMD_BYTE_B9,
CMD_BYTE_BA,
CMD_BYTE_BB,
CMD_BYTE_BC,
CMD_BYTE_BD,
CMD_BYTE_BE,
CMD_BYTE_BF,
CMD_BYTE_C0,
CMD_BYTE_C1,
CMD_BYTE_C2,
CMD_BYTE_C3,
CMD_BYTE_C4,
CMD_BYTE_C5,
CMD_BYTE_C6,
CMD_BYTE_C7,
CMD_BYTE_C8,
CMD_BYTE_C9,
CMD_BYTE_CA,
CMD_BYTE_CB,
CMD_BYTE_CC,
CMD_BYTE_CD,
CMD_BYTE_CE,
CMD_BYTE_CF,
CMD_BYTE_D0,
CMD_BYTE_D1,
CMD_BYTE_D2,
CMD_BYTE_D3,
CMD_BYTE_D4,
CMD_BYTE_D5,
CMD_BYTE_D6,
CMD_BYTE_D7,
CMD_BYTE_D8,
CMD_BYTE_D9,
CMD_BYTE_DA,
CMD_BYTE_DB,
CMD_BYTE_DC,
CMD_BYTE_DD,
CMD_BYTE_DE,
CMD_BYTE_DF,
CMD_BYTE_E0,
CMD_BYTE_E1,
CMD_BYTE_E2,
CMD_BYTE_E3,
CMD_BYTE_E4,
CMD_BYTE_E5,
CMD_BYTE_E6,
CMD_BYTE_E7,
CMD_BYTE_E8,
CMD_BYTE_E9,
CMD_BYTE_EA,
CMD_BYTE_EB,
CMD_BYTE_EC,
CMD_BYTE_ED,
CMD_BYTE_EE,
CMD_BYTE_EF,
CMD_BYTE_F0,
CMD_BYTE_F1,
CMD_BYTE_F2,
CMD_BYTE_F3,
CMD_BYTE_F4,
CMD_BYTE_F5,
CMD_BYTE_F6,
};
enum SpecialTextKind
{
SPECIAL_TEXT_UNK_0,
SPECIAL_TEXT_UNK_1,
SPECIAL_TEXT_WAITING,
SPECIAL_TEXT_UNK_3,
SPECIAL_TEXT_PLAYER_NAME_INPUT,
SPECIAL_TEXT_TEAM_NAME_INPUT,
SPECIAL_TEXT_PASSWORD_INPUT,
SPECIAL_TEXT_FRIEND_MENU,
SPECIAL_TEXT_MENU,
SPECIAL_TEXT_YES_NO_WITH_LARGE_BOX,
SPECIAL_TEXT_LARGE_TEXT_BOX,
SPECIAL_TEXT_BUY_FRIEND_AREAS,
SPECIAL_TEXT_DUNGEON_LIST,
SPECIAL_TEXT_DOJO_LIST,
SPECIAL_TEXT_SAVE_1,
SPECIAL_TEXT_SAVE_2,
SPECIAL_TEXT_STORAGE_WITH_DIALOG,
SPECIAL_TEXT_STORAGE,
SPECIAL_TEXT_UNK_12,
SPECIAL_TEXT_BANK,
SPECIAL_TEXT_UNK_14,
SPECIAL_TEXT_UNK_15,
SPECIAL_TEXT_FRIEND_AREA_SELECT,
SPECIAL_TEXT_GREEN_KECLEON_SHOP,
SPECIAL_TEXT_PURPLE_KECLEON_SHOP,
SPECIAL_TEXT_LINK_SHOP,
SPECIAL_TEXT_LUMINOUS_CAVE,
SPECIAL_TEXT_FRIEND_SHOP,
SPECIAL_TEXT_FRIEND_RESCUE,
SPECIAL_TEXT_UNK_1D,
SPECIAL_TEXT_THANK_YOU_MAIL,
SPECIAL_TEXT_PPO_HELP_COUNTER,
SPECIAL_TEXT_BULLETIN_BOARD_JOBS,
SPECIAL_TEXT_BULLETIN_BOARD,
SPECIAL_TEXT_UNK_22,
SPECIAL_TEXT_UNK_23,
SPECIAL_TEXT_DOJO_ENTER,
SPECIAL_TEXT_DOJO_SUCCESS,
SPECIAL_TEXT_DOJO_FAILURE,
SPECIAL_TEXT_DOJO_ALL_CLEARED,
SPECIAL_TEXT_PERSONALITY_QUIZ,
SPECIAL_TEXT_UNK_29,
SPECIAL_TEXT_SCRIPTING_MENU,
SPECIAL_TEXT_ITEM_REWARD,
SPECIAL_TEXT_UNK_2C,
SPECIAL_TEXT_TOOL_BOX,
SPECIAL_TEXT_CREDITS_NAME,
};
#endif // GUARD_CONSTANTS_SCRIPT_CMD_H

View File

@ -24,7 +24,7 @@ enum ScriptDungeonId
SCRIPT_DUNGEON_MAGMA_CAVERN_PIT,
SCRIPT_DUNGEON_SKY_TOWER,
SCRIPT_DUNGEON_SKY_TOWER_SUMMIT,
SCRIPT_DUNGEON_21,
SCRIPT_DUNGEON_DUMMY,
SCRIPT_DUNGEON_UPROAR_FOREST,
SCRIPT_DUNGEON_HOWLING_FOREST,
SCRIPT_DUNGEON_STORMY_SEA,
@ -43,6 +43,7 @@ enum ScriptDungeonId
SCRIPT_DUNGEON_MT_FREEZE_2,
SCRIPT_DUNGEON_MT_FREEZE_PEAK_2,
SCRIPT_DUNGEON_MURKY_CAVE,
SCRIPT_DUNGEON_DESERT_REGION,
SCRIPT_DUNGEON_SOUTHERN_CAVERN,
SCRIPT_DUNGEON_WYVERN_HILL,
@ -58,6 +59,7 @@ enum ScriptDungeonId
SCRIPT_DUNGEON_REMAINS_ISLAND,
SCRIPT_DUNGEON_MARVELOUS_SEA,
SCRIPT_DUNGEON_FANTASY_STRAIT,
SCRIPT_DUNGEON_NORMAL_MAZE_2,
SCRIPT_DUNGEON_FIRE_MAZE,
SCRIPT_DUNGEON_WATER_MAZE,
@ -83,6 +85,9 @@ enum ScriptDungeonId
SCRIPT_DUNGEON_RESCUE_TEAM_MAZE,
SCRIPT_DUNGEON_ROCK_PATH,
SCRIPT_DUNGEON_SNOW_PATH,
// OutOnRescue dungeons
SCRIPT_DUNGEON_80,
SCRIPT_DUNGEON_81,
SCRIPT_DUNGEON_82,

View File

@ -0,0 +1,484 @@
#ifndef GUARD_CONSTANTS_SCRIPT_ID_H
#define GUARD_CONSTANTS_SCRIPT_ID_H
enum ScriptID
{
END_TALK,
WAIT_END_TALK_FUNC,
WAIT_END_EVENT_FUNC,
WAIT_START_FUNC,
INCOMPLETE_TALK,
NORMAL_WAIT_END_TALK,
LIVES_REPLY_NORMAL,
LIVES_REPLY,
OBJECT_REPLY_NORMAL,
EXAMINE_MISS,
ENTER_WAIT_FUNC,
UNIT_TALK,
HABITAT_TALK,
HABITAT_TALK_S01E02A,
HABITAT_MOVE1,
HABITAT_MOVE2,
HABITAT_MOVE_PAUSE,
HABITAT_MOVE_STAY_FIX,
HABITAT_MOVE_STAY_TURN,
LIVES_MOVE_NORMAL,
LIVES_MOVE_CHANGE,
OBJECT_MOVE_NORMAL,
OBJECT_MOVE_CHANGE,
EFFECT_MOVE_NORMAL,
EFFECT_MOVE_CHANGE,
MOVE_INIT,
MOVE_PAUSE,
MOVE_STAY,
MOVE_SLEEP,
MOVE_RANDOM,
MOVE_BOY,
MOVE_GIRL,
WAKEUP_FUNC,
LOOK_AROUND_FUNC,
LOOK_AROUND_DOWN_FUNC,
LOOK_AROUND_RIGHT_FUNC,
LOOK_AROUND_LEFT_FUNC,
JUMP_HAPPY_FUNC,
JUMP_SURPRISE_FUNC,
JUMP_ANGRY_FUNC,
NOTICE_FUNC,
QUESTION_FUNC,
SWEAT_FUNC,
SHOCK_FUNC,
SPREE_START_FUNC,
SPREE_END_FUNC,
SMILE_START_FUNC,
SMILE_END_FUNC,
ANGRY_START_FUNC,
ANGRY_END_FUNC,
MOVE_PLAZA_SLEEP,
INIT_PLAZA_SLEEP_STAY_FUNC,
INIT_PLAZA_SLEEP_TALK_FUNC,
INIT_SLEEP_FUNC,
INIT_BASE_FUNC,
INIT_DEBUG_HABITAT,
NORMAL_MESSAGE,
NORMAL_EVENT,
NORMAL_CAMERA,
// Disperses team members to their friend areas and alerts the player.
DISMISSAL_SALLY_MEMBER_FUNC,
// Seems identical to DISMISSAL_SALLY_MEMBER_FUNC
DISMISSAL_SALLY_MEMBER2_FUNC,
// Seems identical to DISMISSAL_SALLY_MEMBER_FUNC
DISMISSAL_SALLY_MEMBER3_FUNC,
// Seems identical to DISMISSAL_SALLY_MEMBER_FUNC
DISMISSAL_SALLY_MEMBER4_FUNC,
// Save prompt followed by SPECIAL_TEXT_SAVE_1
NEXT_SAVE_FUNC,
// Save prompt followed by SPECIAL_TEXT_SAVE_2
NEXT_SAVE2_FUNC,
SAVE_POINT,
WAREHOUSE_POINT,
// Save and storage statue before fugitive dungeons.
SAVE_AND_WAREHOUSE_POINT,
WORLD_MAP_POINT,
FORMATION_HERO,
EVOLUTION_HERO,
WARP_LIVES_START,
WARP_LIVES_START2,
WARP_LIVES_START3,
WARP_LIVES_ARRIVE,
WARP_LIVES_ARRIVE2,
WARP_LIVES_ARRIVE3,
LIVES_WARP_START_FUNC,
LIVES_WARP_START2_FUNC,
LIVES_WARP_START3_FUNC,
LIVES_WARP_START_SUB,
LIVES_WARP_ARRIVE_FUNC,
LIVES_WARP_ARRIVE2_FUNC,
LIVES_WARP_ARRIVE3_FUNC,
LIVES_WARP_ARRIVE_SUB,
GET_ITEM_FUNC,
GET_ITEM_WAIT_FUNC,
GET_ITEM2_FUNC,
GET_ITEM2_WAIT_FUNC,
JOIN_FUNC,
LODGE_START_FUNC,
LODGE_WAIT_FUNC,
LODGE_END_FUNC,
LODGE_SOUND_FUNC,
SAVE_START_FUNC,
SAVE_WAIT_FUNC,
SAVE_END_FUNC,
SAVE_SOUND_FUNC,
EFFECT_TEST1,
EFFECT_TEST2,
EFFECT_MOVE_DIVE,
EFFECT_MOVE_WAVE,
// Some general purpose script helper.
EVENT_DIVIDE,
EVENT_DIVIDE_NEXT,
EVENT_DIVIDE_INIT_FUNC,
EVENT_DIVIDE_NEXT_DAY_FUNC,
EVENT_DIVIDE_NEXT_DAY2_FUNC,
EVENT_DIVIDE_FIRST,
EVENT_DIVIDE_SECOND,
EVENT_DIVIDE_AFTER,
EVENT_DIVIDE_WARP_LOCK_FUNC,
EVENT_RESCUE_ENTER_CHECK,
EVENT_RESCUE,
DEBUG_SCRIPT,
DEMO_CANCEL,
DEMO_01,
DEMO_02,
DEMO_03,
DEMO_04,
EVENT_M00E01A_L001,
EVENT_M01E01A_L001,
EVENT_M01E01A_L002,
EVENT_M01E01A_L003,
EVENT_M01E02A_L001,
EVENT_M01E02A_L001B,
EVENT_M01E02A_L001C,
EVENT_M01E02A_L002,
EVENT_M01E02A_L003,
EVENT_M01E02A_L004,
EVENT_M01E02A_L005,
// Completes the Thunderwave Cave Magnemite story.
EVENT_M01E02A_L006,
EVENT_M01E02B_L001,
EVENT_M01E02B_L002,
EVENT_M01E02B_L003,
EVENT_M01E02B_L004,
EVENT_M01E02B_L004B,
EVENT_M01E02B_L005,
EVENT_M01E02B_L006,
EVENT_M01E02B_L007,
EVENT_M01E02B_L008,
EVENT_M01E03A_L000,
EVENT_M01E03A_L001,
EVENT_M01E03A_L002,
EVENT_M01E03A_L003,
EVENT_M01E03A_L004,
EVENT_M01E03A_L005,
EVENT_M01E03A_L006,
EVENT_M01E03A_L007,
EVENT_M01E03A_L008,
EVENT_M01E03A_L009,
EVENT_M01E03A_L010,
EVENT_M01E03A_L011,
EVENT_M01E04A_L000,
EVENT_M01E04A_L001,
EVENT_M01E04A_L002,
EVENT_M01E04A_L003,
EVENT_M01E04A_L004,
EVENT_M01E04A_L005,
EVENT_M01E04A_L006,
EVENT_M01E04B_L000,
EVENT_M01E04B_L001,
EVENT_M01E04B_L002,
EVENT_M01E04B_L003,
EVENT_M01E04B_L004,
EVENT_M01E04B_L005,
EVENT_M01E04B_L006,
EVENT_M01E04B_L007,
EVENT_M01E05A_L000,
EVENT_M01E05A_L001,
EVENT_M01E05A_L002,
EVENT_M01E05A_L003,
EVENT_M01E05A_L004,
EVENT_M01E05A_L005,
EVENT_M01E05A_L006,
EVENT_M01E05B_L000,
EVENT_M01E05B_L001,
EVENT_M01E05B_L002,
EVENT_M01E05B_L003,
EVENT_M01E05B_L004,
EVENT_M01E05B_L005,
EVENT_M01E06A_L001,
EVENT_M01E06A_L002,
EVENT_M01E06A_L003,
EVENT_M01E07A_L001,
EVENT_M01E07A_L002,
EVENT_M01E07A_L003,
EVENT_M01E07A_L004,
EVENT_M01E07A_L005,
EVENT_M01E07A_T001,
EVENT_M01E07A_T002,
EVENT_M01E07B_L001,
EVENT_M01E07B_L002,
EVENT_M01E07B_L003,
EVENT_M01E07B_L004,
EVENT_M01E07B_L005,
EVENT_M01E07B_T001,
EVENT_M01E07B_T002,
EVENT_M01E08A_L001,
EVENT_M01E08A_L002,
EVENT_M01E08A_L003,
EVENT_M01E08A_L004,
EVENT_M01E08A_L005,
EVENT_M01E08A_T001,
EVENT_M01E08A_T002,
EVENT_M01E08B_L001,
EVENT_M01E08B_L002,
EVENT_M01E08B_L003,
EVENT_M01E08B_L004,
EVENT_M01E08B_L005,
EVENT_M01E08B_L006,
EVENT_M01E08B_T001,
EVENT_M01E08B_T002,
EVENT_M01E09A_L001,
EVENT_M01E09A_L002,
EVENT_M01E09A_L003,
EVENT_M01E09A_L004,
EVENT_M01E09A_L005,
EVENT_M01E09A_L006,
EVENT_M01E09A_L007,
EVENT_M01E09A_L008,
EVENT_M01E09A_L009,
EVENT_M01E09A_L010,
EVENT_M01E09A_L011,
EVENT_M01E09A_L012,
EVENT_M01E09A_L013,
EVENT_M01E09A_L014,
EVENT_M01E09A_L015,
EVENT_M01E10A_L001,
EVENT_M01E10A_L002,
EVENT_M01E10A_L003,
EVENT_M01E10A_L004,
EVENT_M01E10A_L005,
EVENT_M01E10A_L006,
EVENT_M01E10A_L007,
EVENT_M01E10A_L008,
EVENT_M01END_L001,
EVENT_M01END_L002,
EVENT_M02E01A_L001,
EVENT_M02E01A_L002,
EVENT_M02E01A_L003,
EVENT_M02E02A_L001,
EVENT_M02E02B_L001,
EVENT_M02E02C_L001,
EVENT_M02E02D_L001,
EVENT_M02E02E_L001,
EVENT_M02E02F_L001,
EVENT_M02E02G_L001,
EVENT_M02E02H_L001,
EVENT_M02END_L001,
EVENT_S00E01A_L001,
EVENT_S00E01A_L002,
EVENT_S00E01A_L003,
EVENT_S00E01A_L004,
EVENT_S01E01A_START,
EVENT_S01E01A_CONTINUE,
EVENT_S01E01A_END,
EVENT_S01E01A_L001,
EVENT_S01E01A_L002,
EVENT_S01E01A_L003,
EVENT_S01E01B_L001,
EVENT_S01E01B_L001L,
EVENT_S01E01C_L001,
EVENT_S01E02A_START,
EVENT_S01E02A_END,
EVENT_S01E02A_L001,
EVENT_S01E02A_L002,
EVENT_S01E02A_L002L,
EVENT_S01E02B_L001,
EVENT_S01E02B_L002,
EVENT_S02E01A_START,
EVENT_S02E01A_END,
EVENT_S02E01A_L001,
EVENT_S02E01A_L002,
EVENT_S02E01A_L003,
EVENT_S02E01A_L004,
EVENT_S02E01A_L004L,
EVENT_S02E02A_START,
EVENT_S02E02A_END,
EVENT_S02E02A_L001,
EVENT_S02E02A_L002,
EVENT_S02E02A_L003,
EVENT_S02E02A_L003L,
EVENT_S03E01A_START,
EVENT_S03E01A_CONTINUE,
EVENT_S03E01A_END,
EVENT_S03E01A_L001,
EVENT_S03E01A_L002,
EVENT_S03E01A_L002L,
EVENT_S04E01A_START,
EVENT_S04E01A_LAST,
EVENT_S04E01A_END,
EVENT_S04E01A_L001,
EVENT_S04E01A_L002,
EVENT_S04E01A_L002L,
EVENT_S04E01B_L001,
EVENT_S04E01B_L001L,
EVENT_S04E01C_L001,
EVENT_S04E01C_L001L,
EVENT_S04E01D_L001,
EVENT_S04E01D_L001L,
EVENT_S04E01E_L001,
EVENT_S04E01E_L001L,
EVENT_S04E01F_L001,
EVENT_S05E01A_START,
EVENT_S05E01A_CONTINUE,
EVENT_S05E01A_END,
EVENT_S05E01A_L001,
EVENT_S05E01A_L002,
EVENT_S05E01A_L002L,
EVENT_S06E01A_START,
EVENT_S06E01A_CONTINUE,
EVENT_S06E01A_END,
EVENT_S06E01A_L001,
EVENT_S06E01A_L002,
EVENT_S06E01A_L002L,
EVENT_S06E01B_L001,
EVENT_S06E01B_L002,
EVENT_S06E01B_L002L,
// Activates the Buried Relic story.
EVENT_S07E01A_START,
// Jumped from EVENT_DIVIDE_AFTER. Completes the Buried Relic story.
EVENT_S07E01A_END,
// Debug script. Advances the Buried Relic story as if we learned the news.
EVENT_S07E01A_L001,
// Debug script. Opens the Buried Relic as if we talked to Lombre.
EVENT_S07E01A_L002,
// Debug script. Completes the Buried Relic story and prompts a save at home.
EVENT_S07E01A_L003,
// Jumped from EVENT_DIVIDE. Buried Relic related, next day?
EVENT_S07E01A_L003L,
EVENT_S08E01A_START,
EVENT_S08E01A_END,
EVENT_S08E01A_L001,
EVENT_S08E01A_L002,
EVENT_S08E01A_L003,
EVENT_S08E01A_L004,
EVENT_S08E01A_L005,
EVENT_S08E01A_L005B,
EVENT_S08E01A_L006,
EVENT_S08E01A_L006L,
EVENT_S08E01A_L007,
EVENT_S08E01A_L008,
EVENT_S08E01A_L008L,
EVENT_S08E01A_L008A,
EVENT_S08E01A_L008B,
EVENT_S08E01A_L008C,
EVENT_S09E01A_START,
EVENT_S09E01A_END,
EVENT_S09E01A_L001,
EVENT_S09E01A_L002,
EVENT_S09E01A_L003,
EVENT_S09E01A_L004,
EVENT_S09E01A_L004B,
EVENT_S09E01A_L005,
EVENT_S09E01A_L005L,
// Sets the "GO" icon for Murky Cave.
EVENT_S09E01B_L001,
// Sets up the Murky Cave dungeon.
EVENT_S09E01B_L001B,
EVENT_S09E01B_L002,
EVENT_S09E01B_L002L,
EVENT_S09E01C_L001,
EVENT_R00E01A_L001,
// Helper script
COMMON_ENTER,
DEBUG_ENTER,
// Exit script, not sure how it works though.
GETOUT_NORMAL,
// Exit script for friend areas.
GETOUT_HABITAT,
// Exit script for Tiny Woods.
GETOUT_M01E01A,
// Exit script for Thunderwave Cave.
GETOUT_M01E02A,
// Exit script for Mt Steel and Dungeon 3.
GETOUT_M01E02B,
// Exit script for Sinister Woods and Dungeon 5.
GETOUT_M01E03A,
// Exit script for Silent Chasm.
GETOUT_M01E04A,
// Exit script for Mt Thunder and Mt Thunder Peak.
GETOUT_M01E04B,
// Exit script for Great Canyon.
GETOUT_M01E05A,
// Exit script for Lapis Cave.
GETOUT_M01E07A,
// Exit script for Mt Blaze and Mt Blaze Peak.
GETOUT_M01E07B,
// Exit script for Frosty Forest and Frosty Grotto.
GETOUT_M01E08A,
// Exit script for Mt Freeze and Mt Freeze Peak.
GETOUT_M01E08B,
// Exit script for Magma Cavern and Magma Cavern Pit.
GETOUT_M01E09A,
// Exit script for Sky Tower and Sky Tower Summit.
GETOUT_M01E10A,
// Exit script for the Dummy dungeon.
GETOUT_S00E01A,
// Exit script for Uproar Forest.
GETOUT_S01E01A,
// Exit script for Howling Forest.
GETOUT_S01E02A,
// Exit script for Stormy Sea.
GETOUT_S02E01A,
// Exit script for Silver Trench.
GETOUT_S02E02A,
// Exit script for Meteor Cave.
GETOUT_S03E01A,
// Exit script for Great Canyon 2.
GETOUT_S04E01A,
// Exit script for Fiery Field.
GETOUT_S04E01B,
// Exit script for Lightning Field.
GETOUT_S04E01C,
// Exit script for Northwind Field.
GETOUT_S04E01D,
// Exit script for Mt Faraway.
GETOUT_S04E01E,
// Exit script for Western Cave.
GETOUT_S05E01A,
// Exit script for Northern Range.
GETOUT_S06E01A,
// Exit script for Pitfall Valley.
GETOUT_S06E01B,
// Exit script for Buried Relic.
GETOUT_S07E01A,
// Exit script for Wish Cave.
GETOUT_S08E01A,
// Exit script for Mt Freeze 2 and Mt Freeze Peak 2.
GETOUT_S09E01A,
// Exit script for Murky Cave.
GETOUT_S09E01B,
// Exit script for Purity Forest.
GETOUT_D62E01A,
// Exit script for Oddity Cave.
GETOUT_D43E01A,
// Exit script for Remains Island.
GETOUT_D44E01A,
// Exit script for Marvelous Sea.
GETOUT_D45E01A,
// Exit script for Fantasy Strait.
GETOUT_D46E01A,
// Exit script for Dungeon 80.
GETOUT_U00E01A,
// Some kind of general exit script helper.
GETOUT_R00E01A,
// Exit script for the maze dungeons and Dungeon 82.
GETOUT_T00E01A,
// Exit script for Rock Path.
GETOUT_M01E07T,
// Exit script for Snow Path.
GETOUT_M01E08T,
EVENT_CONTROL,
EVENT_WAKEUP,
EVENT_STATION,
STATION_CONTROL,
ENTER_CONTROL,
SETUP_DEBUG_CAMERA,
MOVE_DEBUG_CAMERA,
NUM_SCRIPT_IDS
};
#endif // GUARD_CONSTANTS_SCRIPT_ID_H

View File

@ -0,0 +1,28 @@
#ifndef GUARD_CONSTANTS_TUTORIAL_ID_H
#define GUARD_CONSTANTS_TUTORIAL_ID_H
enum TutorialFlagID
{
TUTORIAL_FLAG_STAIRS_AND_SURVIVE,
TUTORIAL_FLAG_OPEN_MENU,
TUTORIAL_FLAG_REGAIN_HP,
TUTORIAL_FLAG_MANAGE_BELLY1,
TUTORIAL_FLAG_ORAN_BERRY,
TUTORIAL_FLAG_CHERI_BERRY,
TUTORIAL_FLAG_BLAST_SEED,
TUTORIAL_FLAG_GRAVELEROCK,
TUTORIAL_FLAG_UNK8,
TUTORIAL_FLAG_PECHA_BERRY,
TUTORIAL_FLAG_SLEEP_SEED,
TUTORIAL_FLAG_MONEY,
TUTORIAL_FLAG_MOVES,
TUTORIAL_FLAG_TEAM_MANAGEMENT,
TUTORIAL_FLAG_MOVEMENT,
TUTORIAL_FLAG_MANAGE_BELLY2,
NUM_TUTORIAL_FLAGS = 31
};
#define TUTORIAL_FLAGS_U32STORAGE 1
#endif // GUARD_CONSTANTS_TUTORIAL_ID_H

File diff suppressed because it is too large Load Diff

View File

@ -1,10 +1,12 @@
#ifndef GUARD_DIRECTION_UTIL_H
#define GUARD_DIRECTION_UTIL_H
#include "constants/direction.h"
#include "structs/str_position.h"
s32 sub_8002984(s32 _direction1, u32 caseID);
s32 sub_8002A70(s32 _direction1, s32 _direction2, s32 _caseId);
// See enum "DirectionTransformation"
s32 TransformDirection1(s32 _direction1, u32 caseID);
s32 TransformDirection2(s32 _direction1, s32 _direction2, s32 _caseId);
s32 sub_8002B04(s32 _direction1, s32 _direction2);
PixelPos SetVecFromDirectionSpeed(s32 _dir, u32 speed);
s32 VecDirection8Radial(PixelPos *pixelPos);

View File

@ -6,7 +6,7 @@
#include "structs/str_stat_index.h"
s32 sub_80416E0(PixelPos *pos, u32 param_2, bool8 param_3);
void sub_804178C(u8 param_1);
void sub_804178C_Async(u8 param_1);
u32 EntityGetStatusSprites(Entity *entity);
void sub_8041888(u8 param_1);
void UpdateStatusIconFlags(Entity *entity);

View File

@ -6,6 +6,6 @@
extern u8 gUnknown_202F32C;
extern u8 gUnknown_202F32D;
bool8 ExecuteEntityDungeonAction(Entity *entity);
bool8 ExecuteEntityDungeonAction_Async(Entity *entity);
#endif

View File

@ -3,14 +3,14 @@
#include "structs/dungeon_entity.h"
void HandlePickUpPlayerAction(Entity *entity);
void HandleSetItemAction(Entity *param_1, bool8 param_2);
void HandleUnsetItemAction(Entity *entity, bool8 enableMessage);
void HandleGiveItemAction(Entity *param_1);
void HandleTakeItemAction(Entity *param_1);
void sub_8066BD4(Entity *param_1);
void HandlePickUpPlayerAction_Async(Entity *entity);
void HandleSetItemAction_Async(Entity *param_1, bool8 param_2);
void HandleUnsetItemAction_Async(Entity *entity, bool8 enableMessage);
void HandleGiveItemAction_Async(Entity *param_1);
void HandleTakeItemAction_Async(Entity *param_1);
void sub_8066BD4_Async(Entity *param_1);
void HandleUseItemAction(Entity *param_1);
void HandlePlaceItemAction(Entity *entity);
void HandlePlaceItemAction_Async(Entity *entity);
void sub_8066E14(Entity *entity);
void sub_8066FA4(Entity *entity);
void sub_8067110(Entity *entity);

View File

@ -17,7 +17,7 @@ void ChooseAIMove(Entity *pokemon);
s32 AIConsiderMove(struct AIPossibleMove *aiPossibleMove, Entity *pokemon, Move *move);
bool8 IsTargetInRange(Entity *pokemon, Entity *targetPokemon, s32 direction, s32 maxRange);
void HandleUseMoveAIAction(Entity *target);
void HandleUseOrbAction(Entity *pokemon);
void HandleUseOrbAction_Async(Entity *pokemon);
s16 GetMoveTargetAndRangeForPokemon(Entity *pokemon, Move *move, bool32 isAI);
#endif

View File

@ -1,6 +1,6 @@
#ifndef GUARD_CLEARED_WINDOW_H
#define GUARD_CLEARED_WINDOW_H
void ShowDungeonClearedWindow(void);
void ShowDungeonClearedWindow_Async(void);
#endif // GUARD_CLEARED_WINDOW_H

View File

@ -17,9 +17,9 @@ void sub_80847D4(void);
bool8 ShouldShowDungeonBanner(void);
void sub_80848F0(void);
void DisplayPreFightDialogue(void);
void sub_8084E00(Entity *entity, u8 param_2, bool8 param_3);
void sub_8085140(void);
bool8 sub_808529C(s32 speciesId_);
void HandleBossFaint_Async(Entity *entity, u8 monsterBehavior, bool8 transformedIntoFriend);
void sub_8085140_Async(void);
bool8 MonCutsceneCompleted(s32 speciesId_);
void sub_8085374(void);
Entity *CutsceneGetLeader(void);
Entity *CutsceneGetPartner(void);
@ -42,8 +42,8 @@ void sub_8085EB0(void);
u32 sub_8085EC8(s16 param_1,u32 param_2,u32 param_3,DungeonPos *param_4, bool32 param_5);
void sub_8085F44(s32 param_1);
void sub_8085F78(void);
bool8 sub_80860A8(u8 id);
void sub_8086130(void);
bool8 ItemInInventoryOrHeld(u8 id);
void FrostyForestIntrusionCutscene_Async(void);
void sub_80861A8(Entity *a0);
void sub_80861B8(Entity *a0, u8 r1, s32 direction);
void sub_80861D4(Entity *a0, u8 r1, s32 direction);
@ -69,12 +69,12 @@ void sub_8086854(void);
void sub_80868F4(Entity *entity);
void sub_8086910(Entity *entity);
void sub_808692C(void);
void SpriteLookAroundEffect(Entity *entity);
void sub_80869E4(struct Entity *entity, s32 a1, u8 a2, s32 _someDirection);
void CutsceneLookAroundEffect_Async(Entity *entity);
void CutsceneLookDir_Async(struct Entity *entity, s32 numFrames, u8 dirTrans, s32 _someDirection);
void sub_8086A3C(Entity *pokemon);
void sub_8086A54(Entity *pokemon);
void SetupBossFightHP(Entity *pokemon, s32 newHP, u16 songIndex);
void sub_8086AC0(void);
u8 sub_8086AE4(s16 _index);
bool8 sub_8086AE4(s16 _index);
#endif
#endif // GUARD_DUNGEON_CUTSCENE_H

View File

@ -52,25 +52,25 @@ void TeamMeaniesReFightDialogue(void);
void ZapdosPostStoryPreFightDialogue(void);
void ZapdosPreFightDialogue(void);
void ZapdosReFightDialogue(void);
void nullsub_100(u8, u8, u8);
void HandleCelebiBossFaint(u8, u8, u8);
void sub_8086B14(void);
void sub_8086B94(void);
void sub_8086BDC(u8, u8);
void HandleSkarmoryBossFaint(u8, u8);
void sub_8086E40(void);
void sub_8086E9C(void);
void sub_8086F00(void);
void sub_8086F54(u8, u8);
void HandleMeaniesBossFaint(u8, u8);
void sub_8087130(void);
void sub_8087230(void);
void sub_808729C(void);
void sub_8087334(u8, u8);
void HandleZapdosBossFaint(u8, u8);
void sub_80877E8(void);
void sub_8087848(void);
void sub_80878F4(u8, u8);
void HandleMoltresBossFaint(u8, u8);
void sub_8087F54(void);
void sub_8087FB4(void);
void sub_8087FF8(void);
void sub_8088088(u8, u8);
void HandleArticunoBossFaint(u8, u8);
void sub_80885A0(void);
void sub_80885C4(void);
void sub_8088608(void);
@ -78,62 +78,62 @@ void sub_8088618(void);
void sub_808862C(void);
void sub_80886C4(void);
void sub_808875C(void);
void sub_8088818(u8, u8);
void HandleGroudonBossFaint(u8, u8);
void sub_8088DC0(void);
void sub_8088E5C(void);
void sub_8089168(void);
void sub_80892C8(void);
void sub_8089328(void);
void sub_80893B4(u8, u8);
void HandleRayquazaBossFaint(u8, u8);
void sub_808970C(void);
void sub_808974C(void);
void sub_8089788(Entity *entity, u8, u8);
void HandleMankeyBossFaint(Entity *entity, u8, u8);
void sub_80897F0(void);
void sub_8089878(void);
void sub_80898E4(void);
void sub_8089914(void);
void sub_8089978(void);
void sub_8089A00(u8, u8);
void HandleMewtwoBossFaint(u8, u8);
void sub_8089C44(void);
void sub_8089C90(void);
void sub_8089CFC(u8, u8);
void HandleEnteiBossFaint(u8, u8);
void sub_8089EFC(void);
void sub_8089F44(void);
void sub_8089F8C(void);
void sub_8089FF0(u8, u8);
void HandleRaikouBossFaint(u8, u8);
void sub_808A264(void);
void sub_808A2C0(void);
void sub_808A308(void);
void sub_808A36C(u8, u8);
void HandleSuicuneBossFaint(u8, u8);
void sub_808A608(void);
void sub_808A668(void);
void sub_808A6E8(u8, u8);
void HandleHoOhBossFaint(u8, u8);
void sub_808A9E4(void);
void sub_808AA3C(void);
void sub_808AA94(void);
void sub_808AAF0(u8, u8);
void HandleLatiosBossFaint(u8, u8);
void sub_808AC3C(void);
void sub_808ACC0(void);
void sub_808AD48(void);
void sub_808ADCC(void);
void sub_808AE54(u8, u8, DungeonPos *pos);
void sub_808AEC8(u8, u8, DungeonPos *pos);
void sub_808AF3C(u8, u8, DungeonPos *pos);
void sub_808AFB0(u8);
void sub_808B030(u8);
void sub_808B0B0(u8);
void HandleRegirockBossFaint_Async(u8, u8, DungeonPos *pos);
void HandleRegiceBossFaint_Async(u8, u8, DungeonPos *pos);
void HandleRegisteelBossFaint_Async(u8, u8, DungeonPos *pos);
void sub_808AFB0_Async(u8);
void sub_808B030_Async(u8);
void sub_808B0B0_Async(u8);
void sub_808B2F4(void);
void sub_808B35C(void);
void sub_808B3E4(u8, u8, u8);
void HandleJirachiBossFaint_Async(u8 monsterBehavior, u8 cutscene, bool8 transformedIntoFriend);
void sub_808BDEC(void);
void sub_808BE70(u8, u8, u8);
void HandleLugiaBossFaint(u8 monsterBehavior, u8 cutscene, bool8 transformedIntoFriend);
void sub_808C10C(void);
void sub_808C1A4(u8, u8, u8);
void HandleKyogreBossFaint(u8, u8, u8);
void sub_808C3A0(void);
void sub_808C414(u8, u8, u8);
void HandleDeoxysNormalBossFaint(u8, u8, u8);
void sub_808C5C0(void);
void sub_808C938(void);
void sub_808C948(Entity *entity, u8);
void HandleMazeBossFaint(Entity *entity, u8);
void sub_808C998(void);
void sub_808C9C4(void);
void sub_808CB5C(void);

View File

@ -4,12 +4,12 @@
#include "structs/dungeon_entity.h"
#include "structs/str_damage.h"
void HandleDealingDamage(Entity *attacker, Entity *target, struct DamageStruct *dmgStruct, bool32 isFalseSwipe, bool32 giveExp, s16 dungeonExitReason, bool32 arg8, s32 argC);
void HandleDealingDamage_Async(Entity *attacker, Entity *target, struct DamageStruct *dmgStruct, bool32 isFalseSwipe, bool32 giveExp, s16 dungeonExitReason, bool32 arg8, s32 argC);
s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType);
void CalcDamage(Entity *attacker, Entity *target, u8 moveType, s32 movePower, s32 critChance, struct DamageStruct *dmgStruct, s24_8 arg8, u16 moveId, bool8 arg_10);
void sub_806F2BC(Entity *attacker, Entity *target, u8 moveType, s32 a2, struct DamageStruct *dmgStruct);
void DealDamageToEntity(Entity *entity, s32 dmg, s32 residualDmgType, s32 dungeonExitReason);
void sub_806F370(Entity *pokemon, Entity *target, s32 dmg, s32 giveExp, bool8 *tookNoDamage, u8 moveType, s16 dungeonExitReason, s32 residualDmgType, s32 arg_10, s32 arg_14);
void DealDamageToEntity_Async(Entity *entity, s32 dmg, s32 residualDmgType, s32 dungeonExitReason);
void sub_806F370_Async(Entity *pokemon, Entity *target, s32 dmg, s32 giveExp, bool8 *tookNoDamage, u8 moveType, s16 dungeonExitReason, s32 residualDmgType, s32 arg_10, s32 arg_14);
void SetShopkeeperAggression(Entity *pokemon, Entity *target);
void sub_806F480(Entity *pokemon, bool8 attackEnemies);
u8 sub_806F4A4(Entity *pokemon, u8 type);

View File

@ -7,8 +7,8 @@
extern const s16 gSpeedTurns[NUM_SPEED_COUNTERS][25];
void RunFractionalTurn(bool8 param_1);
void sub_80444F4(Entity *pokemon);
void RunFractionalTurn_Async(bool8 param_1);
void sub_80444F4_Async(Entity *pokemon);
bool8 IsFloorOver(void);
bool8 sub_8044B84(void);

View File

@ -5,9 +5,9 @@
#include "structs/str_position.h"
void sub_8074FB0(Entity *entity, s32 a1, DungeonPos *pos);
bool8 DisplayActions(Entity *a0);
bool8 DisplayActions_Async(Entity *a0);
void sub_8075680(bool8 unused);
bool8 CheckEntityTileForInteraction(Entity *entity);
void TryTriggerMonsterHouseWithMsg(Entity *pokemon, bool8 forcedMonsterHouse);
void TryTriggerMonsterHouseWithMsg_Async(Entity *pokemon, bool8 forcedMonsterHouse);
#endif

View File

@ -6,6 +6,6 @@
void SetUpDungeonExitData(s16 dungeonExitReason, Entity *target, Entity *entity);
bool8 IsUnsuccessfulDungeonExit(void);
bool8 sub_8083C50(void);
bool8 sub_8083C88(u8 param_1);
bool8 sub_8083C88(u8 dungeonMissionKind);
#endif // GUARD_DUNGEON_EXIT_H

View File

@ -13,7 +13,7 @@ void sub_8045C18(u8 *buffer, Item *item);
#define FORCE_STICKY_NEVER 2
void CreateItemWithStickyChance(Item *item, u8 itemID, u32 forceSticky);
void CreateFloorItems(void);
void TryLeaderItemPickUp(struct DungeonPos *pos, bool8 printMsg);
void TryLeaderItemPickUp_Async(struct DungeonPos *pos, bool8 printMsg);
bool8 SpawnItem(DungeonPos *pos, Item *item, bool8 a2);
bool8 RemoveGroundItem(DungeonPos *pos, bool8 a2);
bool8 sub_80462AC(Entity * entity, u8 hallucinating, u8 a2, u8 a3, u8 a4);
@ -23,7 +23,7 @@ void SpawnDroppedItem(Entity *entity1, Entity *entity2, Item *item, bool8 a3, Du
void sub_8046860(Entity *entity, DungeonPos *pos, Item *item, s32 a4);
void sub_804687C(Entity *entity, DungeonPos *pos1, DungeonPos *pos2, Item *item, s32 count);
bool8 HasHeldItem(Entity *pokemon, u8 id);
void sub_8046D20(void);
void PotentiallyCreateMusicBox_Async(void);
bool8 sub_8046F00(Item *item);
void ClearAllItemsWithFlag(s32 itemFlag);
void AllItemsToPlainSeed(void);

View File

@ -34,25 +34,24 @@ void sub_8052210(bool8 a0);
void sub_805229C(void);
// These functions display the string if certain conditions are met. The conditions differ depending on the function. The string is then saved to the message log.
void LogMessageByIdWithPopupCheckUser(Entity *pokemon, const u8 *str);
void TryDisplayDungeonLoggableMessage2(Entity *pokemon, const u8 *str);
void TryDisplayDungeonLoggableMessage3(Entity *attacker, Entity *target, const u8 *str);
void TryDisplayDungeonLoggableMessage4(Entity *attacker, Entity *target, const u8 *str);
void LogMessageByIdWithPopupCheckUserUnknown(Entity *pokemon, DungeonPos *pos, const u8 *str);
void LogMessageByIdWithPopupCheckUser_Async(Entity *pokemon, const u8 *str);
void TryDisplayDungeonLoggableMessage3_Async(Entity *attacker, Entity *target, const u8 *str);
void TryDisplayDungeonLoggableMessage4_Async(Entity *attacker, Entity *target, const u8 *str);
void LogMessageByIdWithPopupCheckUserUnknown_Async(Entity *pokemon, DungeonPos *pos, const u8 *str);
// As opposed to the above - these always display the string and save it in the message log. False/True stand for an unknown argument. Not sure what the practical difference is between these.
void DisplayDungeonLoggableMessage(Entity *pokemon, const u8 *str);
void DisplayDungeonLoggableMessageFalse(Entity *pokemon, const u8 *str);
void DisplayDungeonLoggableMessageTrue(Entity *pokemon, const u8 *str);
void DisplayDungeonLoggableMessageFalse_Async(Entity *pokemon, const u8 *str);
void DisplayDungeonLoggableMessageTrue_Async(Entity *pokemon, const u8 *str);
void xxx_draw_string_80524F0(void);
void sub_80526D0(s32 r0);
void sub_8052740(s32 a0);
void DisplayDungeonMessage(struct MonDialogueSpriteInfo *monSpriteInfo, const u8 *str, bool8 a2);
void DisplayDungeonDialogue(const struct DungeonDialogueStruct *dialogueInfo);
bool32 DisplayDungeonYesNoMessage(struct MonDialogueSpriteInfo *monSpriteInfo, const u8 *str, bool32 defaultYes);
void DisplayDungeonMessage_Async(struct MonDialogueSpriteInfo *monSpriteInfo, const u8 *str, bool8 a2);
void DisplayDungeonDialogue_Async(const struct DungeonDialogueStruct *dialogueInfo);
bool32 DisplayDungeonYesNoMessage_Async(struct MonDialogueSpriteInfo *monSpriteInfo, const u8 *str, bool32 defaultYes);
s32 DisplayDungeonMenuMessage(struct MonDialogueSpriteInfo *monSpriteInfo, const u8 *str, const MenuItem *menuItems, u16 unkArg);
void sub_8052D44(s16 *ids, Entity *leader, Entity *partner);
void BufferCutsceneProtagonists(s16 destIDs[2], Entity *leader, Entity *partner);
void TryDisplayGeneralTutorialMessage(void);
void DisplayItemTip(u8 itemId);
void DisplayYouReachedDestFloorStr(void);

View File

@ -35,7 +35,7 @@ void sub_8068A84(Pokemon *pokemon);
void sub_8068BDC(bool8 a0);
void sub_8068F28(void);
void sub_8068F80(void);
void HandleFaint(Entity *entity, s32 dungeonExitReason, Entity *param_3);
void HandleFaint_Async(Entity *entity, s32 dungeonExitReason, Entity *param_3);
void sub_80694C0(Entity *target,s32 x,s32 y,u8 param_4);
void sub_80695EC(Entity *param_1,int x,int y);
Entity * sub_8069660(Entity *target);

View File

@ -6,7 +6,7 @@
bool8 TryRecruitMonster(Entity *attacker, Entity *target);
bool8 IsMonsterRecruitable(s32 species);
bool8 HandleMonsterJoinSequence(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *param_3);
bool8 MonsterJoinSequence_Async(Entity *entity1, Entity *entity2, struct unkStruct_8069D4C *param_3);
// These two functions are only used for Celebi's scene for some reason.
bool8 CanEntityBeRecruited(Entity *param_1);
bool8 HandleSpecialEntityJoinSequence(Entity *entity1,Entity *entity2,Entity **entityPtr);

View File

@ -4,6 +4,6 @@
#include "structs/dungeon_entity.h"
void TryWakeSleepingWildPokemon(void);
void TriggerMonsterHouse(Entity *entity, bool8 forcedMonsterHouse);
void TriggerMonsterHouse_Async(Entity *entity, bool8 forcedMonsterHouse);
#endif // GUARD_DUNGEON_MONSTER_HOUSE_H

View File

@ -25,7 +25,7 @@ void UseMoveAgainstTargets(Entity **targetsArray, Entity *attacker, Move *move,
bool8 HandleRegularDamagingMove(Entity *attacker, Entity *target, Move *move, s32 itemId);
s32 HandleDamagingMove(Entity *attacker, Entity *target, Move *move, s24_8 modifier, s32 itemId);
s32 sub_80556BC(Entity *attacker, Entity *target, u8 moveType, Move *move, s24_8 modifier, s32 itemId);
s32 sub_8055864(Entity *attacker, Entity *target, Move *move, s32 param_4, s32 itemId);
s32 sub_8055864_Async(Entity *attacker, Entity *target, Move *move, s32 param_4, s32 itemId);
bool8 sub_8055988(Entity *r2, Entity *r4);
void sub_80559DC(Entity *entity1, Entity *entity2);

View File

@ -4,6 +4,7 @@
#include "structs/str_item_text.h"
#include "constants/residual_damage.h"
#include "constants/trap.h"
#include "constants/tutorial_id.h"
#include "constants/weather.h"
struct Struct_80F7C50
@ -12,11 +13,11 @@ struct Struct_80F7C50
s32 val;
};
struct TutorialFlagMsg
typedef struct TutorialFlagMsg
{
s32 flagId;
s32 flagId; // See enum "TutorialFlagID"
const u8 *str;
};
} TutorialFlagMsg;
extern const ItemText gActions[];
extern const struct Struct_80F7C50 gUnknown_80F7C50[];
@ -778,21 +779,21 @@ extern const u8 *const gUnknown_80FEF98;
extern const u8 *const gUnknown_80FEFD0;
extern const u8 *const gUnknown_80FEFF4;
extern const u8 *const gUnknown_80FF01C;
extern const struct TutorialFlagMsg gUnknown_80FF020;
extern const struct TutorialFlagMsg gUnknown_80FF080;
extern const struct TutorialFlagMsg gUnknown_80FF0D8;
extern const struct TutorialFlagMsg gUnknown_80FF13C;
extern const struct TutorialFlagMsg gUnknown_80FF1B4;
extern const struct TutorialFlagMsg gMovementTutorial;
extern const struct TutorialFlagMsg gHungerTutorial;
extern const struct TutorialFlagMsg gFoodTutorial;
extern const struct TutorialFlagMsg gOranTutorial;
extern const struct TutorialFlagMsg gCheriTutorial;
extern const struct TutorialFlagMsg gBlastSeedTutorial;
extern const struct TutorialFlagMsg gUnknown_80FF4A0;
extern const struct TutorialFlagMsg gPechaTutorial;
extern const struct TutorialFlagMsg gSleepSeedTutorial;
extern const struct TutorialFlagMsg gMoneyTutorial;
extern const TutorialFlagMsg gUnknown_80FF020;
extern const TutorialFlagMsg gUnknown_80FF080;
extern const TutorialFlagMsg gUnknown_80FF0D8;
extern const TutorialFlagMsg gUnknown_80FF13C;
extern const TutorialFlagMsg gUnknown_80FF1B4;
extern const TutorialFlagMsg gMovementTutorial;
extern const TutorialFlagMsg gHungerTutorial;
extern const TutorialFlagMsg gFoodTutorial;
extern const TutorialFlagMsg gOranTutorial;
extern const TutorialFlagMsg gCheriTutorial;
extern const TutorialFlagMsg gBlastSeedTutorial;
extern const TutorialFlagMsg gUnknown_80FF4A0;
extern const TutorialFlagMsg gPechaTutorial;
extern const TutorialFlagMsg gSleepSeedTutorial;
extern const TutorialFlagMsg gMoneyTutorial;
extern const u8 *const gUnknown_80FF674;
extern const u8 *const gUnknown_80FF678;
extern const u8 *const gUnknown_80FF6A4;

View File

@ -3,7 +3,7 @@
#include "structs/dungeon_entity.h"
void ApplyEndOfTurnEffects(Entity *entity);
void DoEndOfTurnEffects_Async(Entity *entity);
void TickStatusAndHealthRegen(Entity *entity);
#endif

View File

@ -1,6 +1,7 @@
#ifndef GUARD_DUNGEON_UTIL_H
#define GUARD_DUNGEON_UTIL_H
#include "constants/colors.h"
#include "constants/direction.h"
#include "structs/dungeon_entity.h"
#include "structs/str_position.h"
@ -38,7 +39,7 @@ bool8 CanTargetEntity(Entity *entity, Entity *targetEntity);
bool8 sub_8045A70(Entity *entity, Entity *targetEntity);
bool8 sub_8045AAC(Entity *entity, DungeonPos *pos);
bool8 CanTargetPosition(Entity *entity, DungeonPos *pos);
void SubstitutePlaceholderStringTags(u8 *buffer, Entity *entity, u32 param_3);
void SubstitutePlaceholderStringTags(u8 *buffer, Entity *entity, u32 monsterColorNum);
void sub_8045ACC(void);
s32 GetTeamMemberEntityIndex(Entity *pokemon);

View File

@ -9,7 +9,7 @@
void sub_803E250(void);
void DungeonRunFrameActions(u32 a0);
void sub_803E668(u32 unused);
void sub_803E708(s32 numFrames, u32 a1);
void DungeonWaitFrames_Async(s32 numFrames, u32 a1);
void sub_803E724(s32 r0);
void sub_803E748(void);
void sub_803E7C8(void);

View File

@ -20,7 +20,7 @@ s32 GetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx);
void SetScriptVarValue(u8 *localVarBuf, s32 varId, s32 val);
void SetScriptVarArrayValue(u8 *localVarBuf, s32 varId, s32 idx, s32 val);
s32 GetScriptVarArraySum(u8 *localVarBuf, s16 varId);
void GetScriptVarScenario(s32 varId,u32 *outMain,u32 *outSub);
void GetScriptVarScenario(s32 varID, u32 *outMain, u32 *outSub);
void ScenarioCalc(s16 varId, s32 main, s32 sub);
bool8 ScriptVarScenarioBefore(s16 varId, u32 main, s32 sub);
bool8 ScriptVarScenarioEqual(s16 varId, u32 main, s32 sub);
@ -34,11 +34,12 @@ void UpdateScriptVarWithVar(u8 *localVarBuf, s16 dstVarId, s16 srcVarId, enum Fl
bool8 FlagJudge(s32 r0, s32 r1, enum FlagJudgeOperation operation);
bool8 JudgeVarWithImmediate(u8 *localVarBuf, s16 varId, s32 val, enum FlagJudgeOperation operation);
bool8 JudgeVarWithVar(u8 *localVarBuf, s16 varId1, s16 varId2, enum FlagJudgeOperation operation);
bool8 sub_80023E4(u32 param_1); // some kind of helper for predefined scenario checks
// See enum "MainQuest"
bool8 CheckQuest(s32 questID);
u8 MapIdToFriendAreaId(s16 mapId_); // map -> friend area lookup
s16 FriendAreaIdToMapId(u8 friendAreaId); // friend area -> map lookup
bool8 sub_80026CC(s16 r0);
void sub_80026E8(s16 r0, bool8 r1);
void ScriptUnlockFriendArea(s16 r0, bool8 r1);
bool8 SaveGlobalScriptVars(void *dest);
bool8 RestoreGlobalScriptVars(u8 *src);

View File

@ -1,29 +1,29 @@
#ifndef GUARD_EXCLUSIVE_POKEMON_H
#define GUARD_EXCLUSIVE_POKEMON_H
#include "constants/cutscenes.h"
#include "constants/tutorial_id.h"
#include "data_serializer.h"
#define NUM_EXCLUSIVE_POKEMON 12
// Size: 0x4
struct ExclusivePokemon
{
s16 poke_id;
bool8 in_rrt; // red rescue team
bool8 in_brt; // blue rescue team
/* 0x0 */ s16 poke_id;
/* 0x2 */ bool8 in_rrt; // red rescue team
/* 0x3 */ bool8 in_brt; // blue rescue team
};
struct ExclusivePokemonData
typedef struct ExclusivePokemonData
{
u8 unk0;
u32 unk4[1];
u8 fill8[0x3C - 8];
u32 unk3C[1];
u8 fill40[8];
u32 unk48[3];
u32 unk54[1];
/* 0x58 */ bool8 Exclusives[NUM_EXCLUSIVE_POKEMON];
};
/* 0x00 */ bool8 unk0; // Initialized?
/* 0x04 */ u32 monSeenFlags[MONSTER_FLAGS_U32STORAGE];
/* 0x3C */ u32 cutsceneFlags[CUTSCENE_FLAGS_U32STORAGE];
/* 0x48 */ u32 tempCutsceneFlags[CUTSCENE_FLAGS_U32STORAGE];
/* 0x54 */ u32 tutorialFlags[TUTORIAL_FLAGS_U32STORAGE];
/* 0x58 */ bool8 exclusives[NUM_EXCLUSIVE_POKEMON];
} ExclusivePokemonData;
#define RED_EXCLUSIVE(species) \
{ \
@ -39,22 +39,22 @@ struct ExclusivePokemonData
.in_brt = TRUE, \
}
extern struct ExclusivePokemonData *gUnknown_203B498;
extern ExclusivePokemonData *gExclusiveMonPtr;
void LoadExclusivePokemon(void);
struct ExclusivePokemonData *GetExclusivePokemon(void);
ExclusivePokemonData *GetExclusivePokemon(void);
void InitializeExclusivePokemon(void);
void sub_8097FA8(u8 param_1);
void sub_8097FD0(u8 param_1);
void sub_8097FF8(void);
void sub_8098044(u8 param_1);
void sub_8098080(void);
u8 sub_80980A4(void);
void sub_80980B4(s16 pokeID);
bool8 sub_8098100(u8 param_1);
bool8 sub_8098134(s16 pokeID);
void SetTutorialFlag(s32 param_1);
bool32 GetTutorialFlag(s32 param_1);
void SetTempCutsceneFlag(u8 flag);
void SetCutsceneFlag(u8 flag);
void FlushTempCutsceneFlags(void);
void UnsetCutsceneFlag(u8 flag);
void ClearTempCutsceneFlags(void);
bool8 sub_80980A4(void);
void SetMonSeenFlag(s16 monID);
bool8 GetCutsceneFlag(u8 flag);
bool8 GetMonSeenFlag(s16 monID);
void SetTutorialFlag(s32 flag);
bool8 GetTutorialFlag(s32 flag);
bool8 IsExclusivePokemonUnlocked(s32 pokeID);
void UnlockExclusivePokemon(s16 pokeID);
void WriteExclusivePokemon(DataSerializer *r0);

View File

@ -3,7 +3,7 @@
#include "structs/axdata.h"
extern RGB gFontPalette[128];
extern RGB_Struct gFontPalette[128];
struct unkStruct_8009A1C_ptr
{
@ -19,7 +19,7 @@ void ScheduleMemCopy(u32 *, const u32 *, u32);
void ScheduleBgTilemapCopy(u32);
void DoScheduledMemCopies(void);
void CopyBgTilemaps0And1(void);
void SetFontsBaseColor(RGB);
void SetFontsBaseColor(RGB_Struct);
bool8 sub_8009A7C(struct EfbFileData *a0, s32 a1, s32 a2, s32 a3, bool8 a4, s32 *a5, s16 *a6);
#endif // GUARD_GRAPHICS_MEMORY_H

View File

@ -10,7 +10,7 @@
void AllocGroundLives(void);
void DeleteGroundLives(void);
void FreeGroundLives(void);
void GroundLives_Select(s32 scriptID, s32 group, s32 sector);
void GroundLives_Select(s32 mapID, s32 group, s32 sector);
void GroundLives_Cancel(s32 scriptID, s32 sector);
void GroundLives_CancelBlank_1(void);
void GroundLives_CancelBlank_2(void);

View File

@ -1,6 +1,7 @@
#ifndef GUARD_GROUND_MAIN_H
#define GUARD_GROUND_MAIN_H
#include "constants/rescue_dungeon_id.h"
#include "structs/str_dungeon_setup.h"
u32 xxx_script_related_8098468(s32 param_1);
@ -19,7 +20,8 @@ u8 sub_80990EC(struct DungeonSetupInfo *param_1, s32 param_2);
u8 sub_80991E0(struct DungeonSetupInfo *param_1, s16 *param_2);
void sub_8099220(struct DungeonSetupInfo *param_1, s32 param_2);
void sub_809927C(u8 param_1);
bool8 sub_80992E0(s16 *param_1, s16 *param_2);
// See enum "RescueDungeonId"
bool8 sub_80992E0(s16 *param_1, s16 *rescueDungeonId);
bool8 sub_8099328(u8 *dungeonId);
bool8 sub_8099360(u8 *dungeonId);
bool8 sub_8099394(u8 *param);

View File

@ -1,6 +1,7 @@
#ifndef GUARD_GROUND_MAP_H
#define GUARD_GROUND_MAP_H
#include "constants/script_id.h"
#include "structs/str_position.h"
#include "structs/str_ground_script.h"
#include "structs/str_dungeon_location.h"
@ -11,7 +12,8 @@ void GroundMap_Reset(void);
void sub_80A4B38(void);
void sub_80A4B54(void);
void GroundMap_GetStationScript(ScriptInfoSmall *r0, s32 _groundScriptId, s32 _groupId, s32 _sectorId);
void GroundMap_ExecuteEvent(s16 scriptIndex, u32 param_2);
// See enum "ScriptID"
void GroundMap_ExecuteEvent(s16 scriptIndex, bool32 param_2);
void GroundMap_ExecuteStation(s32 _map, s32 _group, s32 _sector, bool32 _setScriptState);
void GroundMap_ExecuteEnter(s16 param_1);
bool8 GroundMapNotifyAll(s16 param_1);

View File

@ -34,7 +34,7 @@ bool8 sub_809D678(Action *action);
bool8 sub_809D684(Action *action, ScriptInfoSmall *scriptInfo);
void SetPredefinedScript(Action *param_1, s16 index, const ScriptCommand *param_3);
bool8 GetPredefinedScript(Action *param_1, ScriptInfoSmall *script, s32 _index);
void GetFunctionScript(Action *param_1, ScriptInfoSmall *script, s16 index);
void GetFunctionScript(Action *param_1, ScriptInfoSmall *script, s16 scriptID);
bool8 ActionResetScriptData(Action *param_1, const DebugLocation *unused);
bool8 GroundScript_ExecutePP(Action *action, ActionUnkIds *param_2, ScriptInfoSmall *param_3, const DebugLocation *unused);
bool8 ExecutePredefinedScript(Action *param_1, ActionUnkIds *param_2, s16 index, const DebugLocation *debug);

View File

@ -3,7 +3,7 @@
#include "personality_test1.h"
void GameLoop(void);
void GameLoop_Async(void);
void nullsub_3(s32 yPos, s32 a1);
s32 sub_8000728(void);
void ReadTeamBasicInfo(TeamBasicInfo *dst);

View File

@ -6,80 +6,80 @@
#include "structs/sprite_oam.h"
#include "structs/rgb.h"
extern const RGB gFlag00Pal[];
extern const RGB_Struct gFlag00Pal[];
extern const SiroArchive gAxFlag00;
extern const RGB gFlag01Pal[];
extern const RGB_Struct gFlag01Pal[];
extern const SiroArchive gAxFlag01;
extern const RGB gFlag02Pal[];
extern const RGB_Struct gFlag02Pal[];
extern const SiroArchive gAxFlag02;
extern const RGB gFlag03Pal[];
extern const RGB_Struct gFlag03Pal[];
extern const SiroArchive gAxFlag03;
extern const RGB gFlag04Pal[];
extern const RGB_Struct gFlag04Pal[];
extern const SiroArchive gAxFlag04;
extern const RGB gFlag05Pal[];
extern const RGB_Struct gFlag05Pal[];
extern const SiroArchive gAxFlag05;
extern const RGB gFlag06Pal[];
extern const RGB_Struct gFlag06Pal[];
extern const SiroArchive gAxFlag06;
extern const RGB gFlag07Pal[];
extern const RGB_Struct gFlag07Pal[];
extern const SiroArchive gAxFlag07;
extern const RGB gFlag08Pal[];
extern const RGB_Struct gFlag08Pal[];
extern const SiroArchive gAxFlag08;
extern const RGB gFlag09Pal[];
extern const RGB_Struct gFlag09Pal[];
extern const SiroArchive gAxFlag09;
extern const RGB gFlag100Pal[];
extern const RGB_Struct gFlag100Pal[];
extern const SiroArchive gAxFlag100;
extern const RGB gFlag101Pal[];
extern const RGB_Struct gFlag101Pal[];
extern const SiroArchive gAxFlag101;
extern const RGB gFlag102Pal[];
extern const RGB_Struct gFlag102Pal[];
extern const SiroArchive gAxFlag102;
extern const RGB gFlag103Pal[];
extern const RGB_Struct gFlag103Pal[];
extern const SiroArchive gAxFlag103;
extern const RGB gFlag104Pal[];
extern const RGB_Struct gFlag104Pal[];
extern const SiroArchive gAxFlag104;
extern const RGB gFlag105Pal[];
extern const RGB_Struct gFlag105Pal[];
extern const SiroArchive gAxFlag105;
extern const RGB gFlag106Pal[];
extern const RGB_Struct gFlag106Pal[];
extern const SiroArchive gAxFlag106;
extern const RGB gFlag107Pal[];
extern const RGB_Struct gFlag107Pal[];
extern const SiroArchive gAxFlag107;
extern const RGB gFlag108Pal[];
extern const RGB_Struct gFlag108Pal[];
extern const SiroArchive gAxFlag108;
extern const RGB gFlag109Pal[];
extern const RGB_Struct gFlag109Pal[];
extern const SiroArchive gAxFlag109;
extern const RGB gFlag10Pal[];
extern const RGB_Struct gFlag10Pal[];
extern const SiroArchive gAxFlag10;
extern const RGB gFlag110Pal[];
extern const RGB_Struct gFlag110Pal[];
extern const SiroArchive gAxFlag110;
extern const RGB gFlag111Pal[];
extern const RGB_Struct gFlag111Pal[];
extern const SiroArchive gAxFlag111;
extern const RGB gFlag112Pal[];
extern const RGB_Struct gFlag112Pal[];
extern const SiroArchive gAxFlag112;
extern const RGB gFlag113Pal[];
extern const RGB_Struct gFlag113Pal[];
extern const SiroArchive gAxFlag113;
extern const RGB gFlag114Pal[];
extern const RGB_Struct gFlag114Pal[];
extern const SiroArchive gAxFlag114;
extern const RGB gFlag11Pal[];
extern const RGB_Struct gFlag11Pal[];
extern const SiroArchive gAxFlag11;
extern const RGB gFlag12Pal[];
extern const RGB_Struct gFlag12Pal[];
extern const SiroArchive gAxFlag12;
extern const RGB gFlag13Pal[];
extern const RGB_Struct gFlag13Pal[];
extern const SiroArchive gAxFlag13;
extern const RGB gFlag14Pal[];
extern const RGB_Struct gFlag14Pal[];
extern const SiroArchive gAxFlag14;
extern const RGB gFlag15Pal[];
extern const RGB_Struct gFlag15Pal[];
extern const SiroArchive gAxFlag15;
extern const RGB gFlag16Pal[];
extern const RGB_Struct gFlag16Pal[];
extern const SiroArchive gAxFlag16;
extern const SiroArchive gAxItem01;
extern const SiroArchive gAxNpc01;
extern const SiroArchive gAxNpc02;
extern const SiroArchive gAxNpc03;
extern const SiroArchive gAxNpc04;
extern const RGB gStoneimPal[];
extern const RGB_Struct gStoneimPal[];
extern const SiroArchive gAxTitlebg1;
extern const RGB gTitlebgPal[];
extern const RGB_Struct gTitlebgPal[];
extern const SiroArchive gAxTitleop1;
extern const SiroArchive gAxTitleop2;
extern const RGB gTitleopPal[];
extern const RGB_Struct gTitleopPal[];
#endif

View File

@ -1,7 +1,7 @@
#ifndef GUARD_OTHER_RANDOM_H
#define GUARD_OTHER_RANDOM_H
s32 OtherRandInt(s32 cap);
s32 OtherRandInt(s32 exclusiveMax);
s32 OtherRandRange(s32 a, s32 b);
#endif // GUARD_OTHER_RANDOM_H

View File

@ -45,10 +45,10 @@ Pokemon *TryAddPokemonToRecruited(Pokemon*);
Pokemon *sub_808D278(s32 species);
Pokemon *TryAddLevel1PokemonToRecruited(s32 species, u8 *name, u32 _itemID, const DungeonLocation *location, u16 *moveID);
void TryResetPokemonFlags(Pokemon *pokemon);
Pokemon *GetPlayerPokemonStruct(void);
Pokemon *GetPartnerPokemonStruct(void);
Pokemon *sub_808D3BC(void);
Pokemon *sub_808D3F8(void);
Pokemon *GetLeaderMon1(void);
Pokemon *GetPartnerMon(void);
Pokemon *GetLeaderMon2(void);
Pokemon *GetPartnerMon2(void);
Pokemon *GetRecruitedMonBySpecies(s16 species_, s32 sameSpeciesCounter);
s32 GetFriendSum_808D480(void);
bool8 sub_808D4B0(void);

View File

@ -14,6 +14,8 @@ enum
SUB_WINDOW_INFO,
};
#define MON_SUMMARY_UNK58_COUNT 12
struct MonSummaryInfo
{
// size: 0x64
@ -45,7 +47,7 @@ struct MonSummaryInfo
u8 tactic;
u8 fill55[1];
s16 unk56;
u8 unk58[12];
u8 unk58[MON_SUMMARY_UNK58_COUNT];
};
struct UnkInfoTabStruct
@ -55,6 +57,6 @@ struct UnkInfoTabStruct
};
void ShowPokemonSummaryWindow(s32 which, s32 currSubWindowId, struct MonSummaryInfo *monInfo, struct UnkInfoTabStruct *param_4, u32 windowId);
void SetMonSummaryInfo(struct MonSummaryInfo *dst, struct Pokemon *pokemon, bool8 param_3);
void SetMonSummaryInfo(struct MonSummaryInfo *dst, struct Pokemon *pokemon, bool8 unlockedEvolutions);
#endif // GUARD_POKEMON_SUMMARY_WINDOW_H

View File

@ -8,14 +8,14 @@
typedef struct unkStruct_203B330
{
/* 0x0 */ TouchScreenMenuInput input;
u8 unkC;
u8 dungeonMissionKind; // See enum "DungeonMissionKind"
/* 0xD */ u8 dungeonIndex;
u32 unk10;
WindowTemplate *unk14;
WindowTemplates unk18;
} unkStruct_203B330;
bool8 sub_80319A4(u8, u8 dungeon, s32);
bool8 sub_80319A4(u8 dungeonMissionKind, u8 dungeon, s32);
u32 sub_80319F8(void);
void sub_8031A3C(void);

View File

@ -1,17 +1,20 @@
#ifndef GUARD_RESCUE_SCENARIO_H
#define GUARD_RESCUE_SCENARIO_H
#include "constants/rescue_dungeon_id.h"
#include "structs/str_wonder_mail.h"
void sub_80972F4(void);
void nullsub_128(void);
bool8 sub_8097318(s16 param_1);
void sub_809733C(s16 param_1, u32 param_2);
bool8 sub_8097384(s32 param_1);
void sub_80973A8(s32 param_1, u32 param_2);
bool8 RescueScenarioConquered(s32 param_1);
void sub_8097418(s32 index, bool32);
void sub_809733C(s32 _rescueDungId, bool32 param_2);
bool8 sub_8097384(s32 rescueDungeon);
void sub_80973A8(s32 _rescueDungId, bool32 param_2);
bool8 RescueScenarioConquered(s32 rescueDungeonID_);
// See enum "RescueDungeonId"
void SetRescueScenarioConquered(s32 rescueDungeonID_, bool32 conquered);
const u8 *GetRescueDungeonName(s16 rescueDungeonId);
const u8 *GetCurrentMissionText(s16 index);
// See enum "RescueDungeonId"
const u8 *GetCurrentMissionText(s16 rescueDungeonId);
#endif // GUARD_RESCUE_SCENARIO_H

View File

@ -17,12 +17,12 @@ struct UnkStruct_203B414
extern struct UnkStruct_203B414 *gUnknown_203B414;
extern Dungeon *gDungeon;
void RunDungeon_Async(DungeonSetupStruct *r8);
void RunDungeon_Async(DungeonSetupStruct *setupPtr);
bool8 sub_8043CE4(s32 dungeonId);
u8 GetFloorType(void);
void sub_8043D50(s32 *a0, s32 *a1);
void sub_8043D60(void);
bool8 TryForcedLoss(bool8 a0);
bool8 TryForcedLoss_Async(bool8 a0);
void EnforceMaxItemsAndMoney(void);
bool8 IsFloorwideFixedRoom(void);
bool8 IsCurrentFixedRoomBossFight(void);

View File

@ -50,7 +50,7 @@ struct UnkStruct_sub_8011DAC
// size: 0x5C
// This is most likely a debug savestate
struct UnkStruct_203B184
typedef struct UnkStruct_203B184
{
/* 0x0 */ TeamInventory *MoneyItems;
/* 0x4 */ RecruitedMon *recruitedPokemon;
@ -61,7 +61,7 @@ struct UnkStruct_203B184
/* 0x18 */ unkStruct_203B490 *mailInfo;
/* 0x1C */ struct RescueTeamData *RescueTeamInfo;
/* 0x20 */ struct unkStruct_203B494 *unk20;
/* 0x24 */ struct ExclusivePokemonData *ExclusivePokemon;
/* 0x24 */ ExclusivePokemonData *exclusivePokemon;
/* 0x28 */ bool8 *BoughtFriendAreas;
/* 0x2C */ GameOptions *gameOptions;
/* 0x30 */ struct PlayTimeStruct *playTime;
@ -75,7 +75,7 @@ struct UnkStruct_203B184
u32 unk050;
u32 unk054;
u32 RngState;
};
} UnkStruct_203B184;
void nullsub_33(void);
u32 sub_8011C1C(void);

View File

@ -51,11 +51,11 @@ void SetSavingIconCoords(DungeonPos *pos);
void sub_8004E8C(unkStruct_2039DB0 *);
void sub_8005180(void);
void sub_8005304(void);
void sub_8005610(OpenedFile *, s32 vramIdx, s32 brightness, const RGB *ramp);
const RGB *sub_8005674(const EfoFileData *, s32 vramIdx);
void sub_8005610(OpenedFile *, s32 vramIdx, s32 brightness, const RGB_Struct *ramp);
const RGB_Struct *sub_8005674(const EfoFileData *, s32 vramIdx);
void sub_800569C(DungeonPos *, axdata *, u8);
void sub_8005700(DungeonPos *dstPos, axdata *axData);
void sub_8005770(s32, const RGB *color, s32 brightness, const RGB *ramp);
void sub_8005770(s32, const RGB_Struct *color, s32 brightness, const RGB_Struct *ramp);
static inline bool8 AxFlag8000(axdata *ax)
{

View File

@ -25,7 +25,7 @@ void CreateYesNoDialogueBoxAndPortrait_DefaultNo(const u8 *text, MonPortraitMsg
void CreateMenuDialogueBoxAndPortrait(const u8 *text, void *a1, u32 r9, const MenuItem *menuItems, void *arg_0, u32 a5, u32 unknownUnused, MonPortraitMsg *monPortraitPtr, u16 flags);
void sub_8014490(void);
s32 sub_80144A4(s32 *a0);
void DrawDialogueBoxString(void);
void DrawDialogueBoxString_Async(void);
const u8 *FormatString(const u8 *str, u8 *dst, u8 *dstMax, u16 flags);
void PrintFormattedStringOnWindow(s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr);
void PrintFormattedStringOnWindow2(s32 x, s32 y, const u8 *str, u32 windowId, u32 terminatingChr, s32 lineSpacing);
@ -39,5 +39,6 @@ void PrintFormattedStringOnWindow2(s32 x, s32 y, const u8 *str, u32 windowId, u3
#define STR_FORMAT_FLAG_INSTANT_TEXT_ON_AB_PRESS 0x40
#define STR_FORMAT_FLAG_NEW_LINE_TERMINATES 0x80
#define STR_FORMAT_FLAG_WAIT_FOR_BUTTON_PRESS 0x100
#define STR_FORMAT_FLAG_x200 0x200
#endif // GUARD_STRING_FORMAT_H

View File

@ -128,7 +128,7 @@ typedef struct axObject
typedef struct Palette256
{
RGB pal[256];
RGB_Struct pal[256];
} Palette256;
// size: 0x20
@ -140,7 +140,7 @@ typedef struct EfoFileData
/* 0xC */ void *spriteData; // ?
/* 0x10 */ Palette256 *unk10; // ?
/* 0x14 */ const u32 *tiles;
/* 0x18 */ const RGB *pal;
/* 0x18 */ const RGB_Struct *pal;
/* 0x1C */ s32 tileCount;
} EfoFileData;
@ -150,7 +150,7 @@ typedef struct EfbFileData
const u16 *const *frames;
s32 tileCount;
const u32 *tiles;
const RGB *pal;
const RGB_Struct *pal;
} EfbFileData;
#endif // GUARD_AXDATA_H

View File

@ -438,7 +438,7 @@ enum MonsterBehavior
BEHAVIOR_JIRACHI,
BEHAVIOR_LUGIA,
BEHAVIOR_KYOGRE,
BEHAVIOR_29,
BEHAVIOR_DEOXYS_NORMAL,
BEHAVIOR_CELEBI,
BEHAVIOR_SMEARGLE,
BEHAVIOR_32,

View File

@ -5,7 +5,7 @@
#include "structs/str_text.h"
#include "structs/str_position.h"
// size: R=0xC | NDS=0xA?
// size: R=0xC | NDS=0xA
typedef struct TouchScreenMenuInput
{
/* R=0x0 | B=0x0 */ u8 unk0;
@ -20,24 +20,24 @@ typedef struct TouchScreenMenuInput
#define DEFAULT_MENU_ENTRY_HEIGHT 12
#define TWO_LINES_MENU_ENTRY_HEIGHT 24
// size: R=0x34 | NDS=0x32?
// size: R=0x34 | B=0x30
typedef struct MenuInputStruct
{
/* 0x0 */ s32 windowId;
/* 0x4 */ u16 unk4;
/* 0x6 */ s16 firstEntryY;
/* 0x8 */ DungeonPos cursorArrowPos;
/* 0xC */ DungeonPos leftRightArrowsPos;
/* 0x10 */ s32 entryHeight; // Either 12, or 24 when each entry has text on two lines.
/* 0x14 */ DungeonPos unk14;
/* 0x18 */ s16 menuIndex;
/* 0x1A */ s16 currPageEntries;
/* 0x1C */ s16 entriesPerPage;
/* 0x1E */ s16 currPage;
/* 0x20 */ s16 pagesCount;
/* 0x22 */ s16 totalEntriesCount;
/* 0x24 */ u16 unk24;
/* 0x28 */ TouchScreenMenuInput touchScreen; // For obvious reason unused on GBA
/* 0x00 | B=0x00 */ s32 windowId;
/* 0x04 | B=0x04 */ u16 unk4;
/* 0x06 | B=0x06 */ s16 firstEntryY;
/* 0x08 | B=0x08 */ DungeonPos cursorArrowPos;
/* 0x0C | B=0x0C */ DungeonPos leftRightArrowsPos;
/* 0x10 | B=0x10 */ s32 entryHeight; // Either 12, or 24 when each entry has text on two lines.
/* 0x14 | B=0x14 */ DungeonPos unk14;
/* 0x18 | B=0x18 */ s16 menuIndex;
/* 0x1A | B=0x1A */ s16 currPageEntries;
/* 0x1C | B=0x1C */ s16 entriesPerPage;
/* 0x1E | B=0x1E */ s16 currPage;
/* 0x20 | B=0x20 */ s16 pagesCount;
/* 0x22 | B=0x22 */ s16 totalEntriesCount;
/* 0x24 | B=0x24 */ u16 unk24;
/* 0x28 | B=0x26 */ TouchScreenMenuInput touchScreen; // For obvious reason unused on GBA
} MenuInputStruct;
// size: 0x8
@ -81,66 +81,67 @@ typedef struct unkStructFor8013AA0
} unkStructFor8013AA0;
// Used for creating windows with an input menu.
// size: R=0x9C | B=?
// size: R=0x9C | B=0x98
typedef struct MenuWindow
{
/* 0x0 */ MenuInputStruct input;
/* 0x34 */ u32 menuWinId;
/* 0x38 */ WindowTemplate *menuWindow;
/* 0x3C */ WindowTemplates windows;
/* R=0x00 | B=0x00 */ MenuInputStruct input;
/* R=0x34 | B=0x30 */ u32 menuWinId;
/* R=0x38 | B=0x34 */ WindowTemplate *menuWindow;
/* R=0x3C | B=0x38 */ WindowTemplates windows;
} MenuWindow;
// Same as above, but has one additional WindowHeader field.
// size: R=0xA0 | B=0x9C?
// Same as MenuWindow, but has one additional WindowHeader field.
// size: R=0xA0 | B=0x9C
typedef struct MenuHeaderWindow
{
/* 0x0 */ MenuWindow m; // short name so it's easier to write. 'm' standing for 'menu' or 'menuWindow'
/* 0x9C */ WindowHeader header;
/* R=0x00 | B=0x00 */ MenuWindow m; // short name so it's easier to write. 'm' standing for 'menu' or 'menuWindow'
/* R=0x9C | B=0x98 */ WindowHeader header;
} MenuHeaderWindow;
// I think the `+ 2`s below are actually `+ WINDOW_HEADER_HEIGHT`...
// These macros are used for updating menu windows, as the last page can have less entries than other pages, so the window's height needs to reflect that.
// Note: In order to get matching ASM, this macro had to be created.
// It's probable the code below is not exactly how it was originally written, but it generates the same asm.
#define UPDATE_MENU_WINDOW_HEIGHT_INTERNAL(ptr, _newHeight) \
{ \
UNUSED s32 new10; \
s16 newHeight; \
s16 newHeightVal = (_newHeight); \
UNUSED s32 dummyMatch = newHeightVal; \
UNUSED s16 oldHeight = (ptr).windows.id[(ptr).menuWinId].height; \
dummyMatch = 0; \
new10 = newHeightVal + 2; \
newHeight = newHeightVal; \
\
(ptr).windows.id[(ptr).menuWinId].height = newHeight; \
(ptr).windows.id[(ptr).menuWinId].unk10 = newHeightVal + 2; \
\
ResetUnusedInputStruct(); \
ShowWindows(&(ptr).windows, TRUE, TRUE); \
#define UPDATE_MENU_WINDOW_HEIGHT_INTERNAL(ptr, _newHeight) \
{ \
UNUSED s32 newtotalHeight; \
s16 newHeight; \
s16 newHeightVal = (_newHeight); \
UNUSED s32 dummyMatch = newHeightVal; \
UNUSED s16 oldHeight = (ptr).windows.id[(ptr).menuWinId].height; \
dummyMatch = 0; \
newtotalHeight = newHeightVal + 2; \
newHeight = newHeightVal; \
\
(ptr).windows.id[(ptr).menuWinId].height = newHeight; \
(ptr).windows.id[(ptr).menuWinId].totalHeight = newHeightVal + 2; \
\
ResetUnusedInputStruct(); \
ShowWindows(&(ptr).windows, TRUE, TRUE); \
}
#define UPDATE_MENU_WINDOW_HEIGHT(ptr) \
{ \
#define UPDATE_MENU_WINDOW_HEIGHT(ptr) \
{ \
UPDATE_MENU_WINDOW_HEIGHT_INTERNAL(ptr, CalcEntriesTotalHeight((ptr).input.currPageEntries, DEFAULT_MENU_ENTRY_HEIGHT) + 2) \
}
// For Windows where height is the same as unk10.
#define UPDATE_MENU_WINDOW_HEIGHT_2(ptr) \
{ \
s32 newHeightVal = CalcEntriesTotalHeight((ptr).input.currPageEntries, DEFAULT_MENU_ENTRY_HEIGHT) + 2; \
UNUSED s16 oldHeight = (ptr).windows.id[(ptr).menuWinId].height; \
s16 newHeight = newHeightVal; \
\
(ptr).windows.id[(ptr).menuWinId].height = newHeight; \
(ptr).windows.id[(ptr).menuWinId].unk10 = newHeight; \
\
ResetUnusedInputStruct(); \
ShowWindows(&(ptr).windows, TRUE, TRUE); \
#define UPDATE_MENU_WINDOW_HEIGHT_2(ptr) \
{ \
s32 newHeightVal = CalcEntriesTotalHeight((ptr).input.currPageEntries, DEFAULT_MENU_ENTRY_HEIGHT) + 2; \
UNUSED s16 oldHeight = (ptr).windows.id[(ptr).menuWinId].height; \
s16 newHeight = newHeightVal; \
\
(ptr).windows.id[(ptr).menuWinId].height = newHeight; \
(ptr).windows.id[(ptr).menuWinId].totalHeight = newHeight; \
\
ResetUnusedInputStruct(); \
ShowWindows(&(ptr).windows, TRUE, TRUE); \
}
// For menu windows with two lines entries(for example job mail)
#define UPDATE_TWO_LINES_MENU_WINDOW_HEIGHT(ptr) \
{ \
#define UPDATE_TWO_LINES_MENU_WINDOW_HEIGHT(ptr) \
{ \
UPDATE_MENU_WINDOW_HEIGHT_INTERNAL(ptr, CalcTwoLinesEntriesTotalHeight((ptr).input.currPageEntries, TWO_LINES_MENU_ENTRY_HEIGHT) + 2) \
}

View File

@ -1,13 +1,14 @@
#ifndef GUARD_RGB_H
#define GUARD_RGB_H
typedef struct RGB
// Size: 0x4
typedef struct RGB_Struct
{
u8 r;
u8 g;
u8 b;
u8 unk4; // Never read, always 0x80. Unused transparency/alpha flag?
} RGB;
} RGB_Struct;
#define RGB_R 0
#define RGB_G 1
@ -15,17 +16,25 @@ typedef struct RGB
#define RGB_UNK 3
#define RGB_FIELDS_COUNT 4
// Size: 0x4
typedef struct RGB_Array
{
u8 c[RGB_FIELDS_COUNT];
} RGB_Array;
// Size: 0x4
typedef union RGB_Union
{
RGB_Array asArr;
RGB separate;
RGB_Struct separate;
} RGB_Union;
// Size: 0x40
typedef struct RGB_Palette
{
/* 0x0 */ RGB_Struct colors[16];
} RGB_Palette;
#define RGB_TO_GBA(r, g, b) RGB2(((u32)(r) & 0xF8) >> 3, ((g) & 0xF8) >> 3, ((b) & 0xF8) >> 3)
// Needed to match, functionally equivalent to the above.
#define RGB_TO_GBA2(r, g, b)(((u32)((b) & 0xF8) >> 2 << 9) | (((u32)(g) & 0xF8) >> 3 << 5) | (((u32)(r) & 0xF8) >> 3))

View File

@ -9,10 +9,10 @@ typedef struct unkStruct_202EE8C
u32 unk0;
u16 unk4;
s16 unk6;
RGB *unk8;
RGB *unkC;
RGB *unk10;
RGB unk14;
RGB_Struct *unk8;
RGB_Struct *unkC;
RGB_Struct *unk10;
RGB_Struct unk14;
} unkStruct_202EE8C;
#endif // GUARD_STR_202EE8C_H

View File

@ -238,6 +238,14 @@ struct MinMaxPosition
s32 maxY;
};
enum DungeonMissionKind
{
DUNGEON_MISSION_UNK0,
DUNGEON_MISSION_OUTONRESCUE,
DUNGEON_MISSION_ACCEPTEDJOB_RELATED,
DUNGEON_MISSION_UNK3,
};
// size: 0x58
typedef struct unkDungeon644
{
@ -247,10 +255,10 @@ typedef struct unkDungeon644
/* 0x10 */ u8 unk10;
/* 0x11 */ u8 fill11[3];
/* 0x14 */ bool8 canRecruit;
/* 0x15 */ u8 unk15;
/* 0x16 */ u8 unk16;
/* 0x15 */ bool8 canRecruitRescueTeamMazeBosses;
/* 0x16 */ bool8 unlockedEvolutions;
/* 0x17 */ bool8 hasInventory;
/* 0x18 */ u8 unk18;
/* 0x18 */ bool8 canChangeLeader;
/* 0x19 */ u8 unk19;
/* 0x1A */ u8 fill1A[2];
/* 0x1C */ s16 fractionalTurn; // Handles turn order when Pokémon have different movement speeds.
@ -271,7 +279,7 @@ typedef struct unkDungeon644
/* 0x31 */ u8 unk31;
/* 0x32 */ bool8 itemHoldersIdentified;
/* 0x33 */ u8 unk33;
/* 0x34 */ u8 unk34;
/* 0x34 */ u8 missionKind; // See enum "DungeonMissionKind"
/* 0x35 */ u8 emptyBellyAlert; // which alert message to show when belly gets empty.
/* 0x36 */ u8 windPhase;
/* 0x37 */ s8 unk37;
@ -360,18 +368,25 @@ struct DungeonMap
#define MONSTER_SPAWNS_ARR_COUNT 32
enum DungeonUnk2Kind
{
DUNGEON_UNK2_0,
DUNGEON_UNK2_1,
DUNGEON_UNK2_PITFALL_TRAP,
};
// size: 0x1CEDC
typedef struct Dungeon
{
u8 unk0;
u8 unk1;
u8 unk2;
u8 unk2; // Cutscene-related. See enum "DungeonUnk2Kind"
u8 unk3;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
bool8 unk8; // Related to a yes/no prompt for the Music Box creation
u8 unk9;
u8 unkA;
u8 unkB;
@ -379,7 +394,7 @@ typedef struct Dungeon
u8 unkD;
u8 unkE;
/* 0xF */ bool8 noActionInProgress; // Whether the game is currently accepting input. Set to false while action animations play.
u8 unk10;
u8 unk10; // Forced-loss reason? 0 = partner felled ... 1 = failed to protect client ... 2 = failed to protect client
u8 unk11;
s16 unk12;
s16 startFloorId; // It's always 0 by default(see sDungeonStartingFloor table). If changed, it would be possible for the first entered floor to be displayed as not B1, but the specified number.
@ -389,7 +404,7 @@ typedef struct Dungeon
Entity *unkBC;
Entity unkC0;
struct unkStruct_Dungeon134_sub unk134;
/* 0x17C */ RGB colorRamp[COLOR_RAMP_COUNT];
/* 0x17C */ RGB_Struct colorRamp[COLOR_RAMP_COUNT];
/* 0x57C */ unkDungeon57C unk57C;
/* 0x5C0 */ s32 unk5C0;
/* 0x5C4 */ struct unkStruct_Dungeon5C4_sub unk5C4[3];
@ -422,7 +437,7 @@ typedef struct Dungeon
/* 0x3A0A */ bool8 unk3A0A;
/* 0x3A0B */ bool8 unk3A0B;
/* 0x3A0C */ u8 monsterHouseRoom; // room index of monster house
/* 0x3A0D */ u8 unk3A0D;
/* 0x3A0D */ u8 cutscene; // See enum "CutsceneKind"
/* 0x3A0E */ s16 tileset;
/* 0x3A10 */ s16 unk3A10;
/* 0x3A12 */ s16 unk3A12;
@ -449,7 +464,7 @@ typedef struct Dungeon
u8 ALIGNED(4) unk12C24[0x930];
u16 unk13554[10];
OpenedFile *unk13568;
u8 unk1356C;
bool8 unk1356C; // Cutscene-related
u8 fill1356D[0x13570 - 0x1356D];
/* 0x13570 */ u8 unk13570;
/* 0x13574 */ DungeonPos trapPos;

View File

@ -12,13 +12,13 @@ typedef struct DungeonSetupSubstruct
{
DungeonLocation unk0;
u8 unk4;
u8 unk5;
u8 unk6;
u8 unk7;
u8 unk8;
u8 unk9;
/* 0x5 */ bool8 canChangeLeader;
/* 0x6 */ bool8 canRecruit;
/* 0x7 */ bool8 canRecruitRescueTeamMazeBosses;
/* 0x8 */ bool8 unlockedEvolutions;
/* 0x9 */ bool8 hasInventory;
u8 unkA;
u8 unkB;
/* 0xB */ u8 missionKind; // See enum "DungeonMissionKind"
u8 unkC;
u8 unkD;
} DungeonSetupSubstruct;
@ -30,7 +30,7 @@ typedef struct DungeonSetupInfo
Pokemon mon;
u8 *unk74;
Dungeon *dungeon;
s16 unk7C; // Set to 5 if the dungeon was skipped (quicksave read failed)
s16 unk7C; // 4 = OutOnRescue related ... 5 = dungeon was skipped (quicksave read failed)
u8 unk7E;
DungeonLocation unk80;
DungeonMailSeed unk84;

View File

@ -1,12 +1,14 @@
#ifndef GUARD_STR_GROUND_SCRIPT_H
#define GUARD_STR_GROUND_SCRIPT_H
#include "constants/script_id.h"
#include "constants/script_cmd.h"
#include "structs/str_position.h"
// size: 0x10
typedef struct ScriptCommand
{
/* 0x0 */ u8 op;
/* 0x0 */ u8 op; // See enum "ScriptOpID"
/* 0x1 */ u8 argByte;
/* 0x2 */ s16 argShort;
/* 0x4 */ s32 arg1;
@ -46,13 +48,13 @@ typedef struct ScriptData
/* 0x04 */ ScriptInfo script;
/* 0x10 */ ScriptInfo savedScript;
/* 0x1C */ const ScriptCommand *curPtr;
/* 0x20 */ u8 curScriptOp;
/* 0x20 */ u8 curScriptOp; // See enum "ScriptOpID"
/* 0x22 */ s16 unk22;
/* 0x24 */ u16 unk24;
/* 0x26 */ s8 unk26;
/* 0x26 */ s8 storedDir; // Can be -1.
/* 0x28 */ s16 branchDiscriminant;
/* 0x2A */ s16 unk2A;
/* 0x2C */ s16 unk2C;
/* 0x2A */ s16 unk2A; // Seems to be a frame counter for async script commands
/* 0x2C */ s16 unk2C; // Another counter for async script commands
/* 0x30 */ s32 unk30;
/* 0x34 */ PixelPos pos1;
/* 0x3C */ PixelPos pos2;
@ -127,15 +129,16 @@ typedef struct GroundMapAction
u32 unk10C;
} GroundMapAction;
// Size: 0xC
typedef struct ScriptRef
{
s16 id;
s16 type;
u8 *name;
const ScriptCommand *script;
/* 0x0 */ s16 id; // See enum "ScriptID"
/* 0x2 */ s16 type;
/* 0x4 */ const u8 *name;
/* 0x8 */ const ScriptCommand *script;
} ScriptRef;
extern const ScriptRef gFunctionScriptTable[];
extern const ScriptRef gFunctionScriptTable[NUM_SCRIPT_IDS];
struct GroundLink {
CompactPos pos;
@ -193,10 +196,10 @@ struct GroundScriptGroup {
u32 nSectors;
const struct GroundScriptSector *sectors;
};
struct GroundScriptHeader {
typedef struct GroundScriptHeader {
u32 nGroups;
const struct GroundScriptGroup *groups;
const struct GroundLink *links;
};
} GroundScriptHeader;
#endif // GUARD_STR_GROUND_SCRIPT_H

View File

@ -8,7 +8,7 @@
// size: 0x8
typedef struct PortraitGfxSub
{
/* 0x0 */ const RGB *pal;
/* 0x0 */ const RGB_Struct *pal;
/* 0x4 */ const u8 *gfx;
} PortraitGfxSub;

View File

@ -113,7 +113,7 @@ typedef struct MonsterDataEntry
/* 0x9 */ u8 bodySize;
/* 0xC */ s32 movementSpeed;
/* 0x10 */ u16 dialogueSprites; // Bitwise flags for whether a dialogue sprite/portrait is available for each emotion.
bool8 unk12;
bool8 unk12; // Appears to control whether the "has friend area" check is skipped
/* 0x13 */ u8 types[2];
/* 0x15 */ u8 movementType;
/* 0x16 */ u8 friendArea;

View File

@ -3,6 +3,16 @@
#include "structs/str_position.h"
#define WINDOW_HEADER_HEIGHT 2
enum WinTemplateFlag
{
WINTEMPLATE_FLAG_NONE = 0,
WINTEMPLATE_FLAG_x20 = (1 << 5),
WINTEMPLATE_FLAG_x40 = (1 << 6),
WINTEMPLATE_FLAG_x80 = (1 << 7), // Appears to skip the border and preparation in `AddWindow()`
};
// size: 0xC
typedef struct unkChar
{
@ -21,25 +31,25 @@ typedef struct Window
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
/* 0x4 */ s16 width;
/* 0x6 */ s16 height;
/* 0x8 */ s16 unk8;
/* 0x6 */ s16 height; // Inner height
/* 0x8 */ s16 totalHeight; // Including header
/* 0xC */ s32 type;
/* 0x10 */ u32 unk10;
/* 0x14 */ u32 unk14;
/* 0x18 */ u32 *unk18;
/* 0x1C */ u32 *unk1C;
/* 0x20 */ s32 unk20;
/* 0x24 */ s32 unk24;
/* 0x10 */ u32 unk10; // winGFX start tile?
/* 0x14 */ u32 unk14; // unk1C start tile?
/* 0x18 */ u32 *winGFX; // 8 packed pixels. Each pixel is 4 bits wide.
/* 0x1C */ u32 *unk1C; // Similar to winGFX
/* 0x20 */ s32 unk20; // Some width relation to winGFX (stride?)
/* 0x24 */ s32 unk24; // Set from winTemplate unk12
/* 0x28 */ u32 *unk28; // Somewhere in VRAM
/* 0x2C */ s32 unk2C;
/* 0x30 */ u32 *unk30; // Somewhere in VRAM?
/* 0x34 */ u32 *unk34;
/* 0x38 */ s32 unk38;
/* 0x3C */ u32 *unk3C;
/* 0x40 */ u32 *unk40;
/* 0x44 */ u8 unk44;
/* 0x45 */ bool8 unk45;
/* 0x46 */ u8 unk46;
/* 0x2C */ s32 unk2C; // Related to unk38
/* 0x30 */ u32 *unk30; // Somewhere in VRAM
/* 0x34 */ u32 *unk34; // Related to unk1C and unk3C
/* 0x38 */ s32 unk38; // Related to unk2C and unk44
/* 0x3C */ u32 *unk3C; // Somewhere in winGFX or unk1C
/* 0x40 */ u32 *unk40; // Somewhere in winGFX or unk1C
/* 0x44 */ bool8 unk44; // Related to unk38 not being 0
/* 0x45 */ bool8 isWinType0;
/* 0x46 */ bool8 unk46;
} Window;
// size: 0x4
@ -54,14 +64,14 @@ typedef struct WindowHeader
// size: 0x18
typedef struct WindowTemplate
{
u8 unk0;
/* 0x4 */ s32 type;
/* 0x8 */ DungeonPos pos;
/* 0xC */ s16 width;
/* 0xE */ s16 height;
s16 unk10; // In most cases it's the same as height. If it's smaller than height, the window may look glitchy. Maybe something with tile allocation/how the window is filled?
s16 unk12;
const WindowHeader *header;
/* 0x00 */ u8 flags; // See enum "WinTemplateFlag"
/* 0x04 */ s32 type;
/* 0x08 */ DungeonPos pos;
/* 0x0C */ s16 width;
/* 0x0E */ s16 height; // Inner height
/* 0x10 */ s16 totalHeight; // Including header
/* 0x12 */ s16 unk12; // Related to startTileNum and width
/* 0x14 */ const WindowHeader *header;
} WindowTemplate;
#define WINDOW_TYPE_0 0
@ -76,7 +86,7 @@ typedef struct WindowTemplate
#define MAX_WINDOWS 4
// All fields are zeroed out except for type which is set to WINDOW_TYPE_NORMAL.
#define WIN_TEMPLATE_DUMMY (WindowTemplate) { .unk0 = 0, .type = WINDOW_TYPE_NORMAL, .pos = { .x = 0, .y = 0 }, .width = 0, .height = 0, .unk10 = 0, .unk12 = 0, .header = NULL }
#define WIN_TEMPLATE_DUMMY (WindowTemplate) { .flags = WINTEMPLATE_FLAG_NONE, .type = WINDOW_TYPE_NORMAL, .pos = { .x = 0, .y = 0 }, .width = 0, .height = 0, .totalHeight = 0, .unk12 = 0, .header = NULL }
// size: 0x60
typedef struct WindowTemplates

View File

@ -6,14 +6,15 @@
void AddDoubleUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color);
void AddUnderScoreHighlight(u32 windowId, s32 x, s32 y, s32 width, u32 color);
void CallPrepareTextbox_8008C54(u32 windowId);
void DisplayMonPortraitSprite(s32 a0, const u8 *compressedData, s32 a2);
void DisplayMonPortraitSpriteFlipped(s32 a0, const u8 *compressedData, s32 a1);
void DisplayMonPortraitSprite(s32 winID, const u8 *compressedData, s32 palNum);
void DisplayMonPortraitSpriteFlipped(s32 winID, const u8 *compressedData, s32 palNum);
const unkChar *GetCharacter(s32 chr);
void PrepareTextbox_8008C6C(Window *windows, u32 windowId);
void ResetWindowBgData(void);
void sub_8007A78(u32 a0, s32 x, s32 y, s32 a3, u32 color);
void sub_8007B7C(u32 a0, s32 x, s32 y, s32 a3, u32 color);
void sub_8007E20(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6);
// srcGFX: Each u32 is 8 packed pixels, 4 bits per pixel.
void WriteGFXToBG0Window(u32 winID, u32 x, u32 y, u32 w, u32 h, u32 *srcGFX, u32 palNum);
void sub_80087EC(s32 a0, s32 a1, s32 a2, s32 a3, s32 a4);
void sub_80089AC(const WindowTemplate *r4, DungeonPos *r5_Str);
u32 DrawCharOnWindow(s32 x, s32 y, u32 chr, u32 color, u32 windowId);

View File

@ -1,18 +1,33 @@
#ifndef GUARD_TEXTBOX_H
#define GUARD_TEXTBOX_H
#include "structs/str_pokemon.h"
#include "structs/str_position.h"
#include "structs/menu.h"
enum
{
SCRIPT_TEXT_TYPE_INSTANT, // 0x32 Used for narration and signposts
SCRIPT_TEXT_TYPE_PLAYER, // 0x33 Used for player's thoughts, player's dialogue and Murky Cave's judge of darkness
SCRIPT_TEXT_TYPE_QUIET, // 0x33 Used for player's thoughts, player's dialogue and Murky Cave's judge of darkness
SCRIPT_TEXT_TYPE_NPC, // 0x34 Used for all NPCs, has the speaker's name and dialogue sound
SCRIPT_TEXT_TYPE_LETTER, // 0x35 Used for Mails/Letters. Has a dialogue sound when priting text, similarly to SCRIPT_TEXT_TYPE_NPC
SCRIPT_TEXT_TYPE_4, // 0x36 Used for sound-like texts such as "Flap-flap" or roars "Gyaaaaaaaah". It doesn't wait for button press, so the message just closes after printing unless WAIT command is used afterwards.
SCRIPT_TEXT_TYPE_OVERHEARD, // 0x36 Used for sound-like texts such as "Flap-flap" or roars "Gyaaaaaaaah". It doesn't wait for button press, so the message just closes after printing unless WAIT command is used afterwards.
};
typedef union MonOrStringPtr
{
u8 *str;
Pokemon *mon;
} MonOrStringPtr;
typedef void* MonOrStrPtr_Arg;
#define NULL_MONORSTRPTR ((MonOrStrPtr_Arg)NULL)
#define MON_TO_MONORSTRPTR(m) ((MonOrStrPtr_Arg)m)
#define STR_TO_MONORSTRPTR(s) ((MonOrStrPtr_Arg)s)
#define SET_MONORSTRPTR(d, m) (d).str = (m)
void TextboxInit(void);
void TextboxFree(void);
void TextboxResetAll(void);
@ -30,17 +45,19 @@ bool8 sub_809ABB4(s32 id_, s32 a1_);
bool8 sub_809AC18(s32 a0_, s32 a1_);
bool8 ScriptSetPortraitInfo(s32 portraitId_, s32 spriteId_, s32 placementId_);
bool8 ScriptSetPortraitPosDelta(s32 portraitId_, PixelPos *newPosDelta);
bool8 ScriptPrintText(s32 scriptMsgType, s32 speakerId_, const char *text);
bool8 ScriptPrintTextOnBg(const char *text);
bool8 ScriptPrintTextOnBg2(const char *text);
bool8 ScriptPrintTextOnBgAuto(s32 unused, const char *text);
bool8 ScriptPrintText(s32 scriptMsgType, s32 speakerId_, const u8 *text);
bool8 ScriptPrintTextOnBg(const u8 *text);
bool8 ScriptPrintTextOnBg2(const u8 *text);
bool8 ScriptPrintTextOnBgAuto(s32 unused, const u8 *text);
bool8 sub_809AFAC(void);
void sub_809AFC8(s32 a0_, s32 a1, s32 a2_, const char *text);
void sub_809AFC8(s32 a0_, s32 a1, s32 a2_, const u8 *text);
bool8 sub_809AFFC(u8 *a0);
void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const char *text);
void sub_809B028(const MenuItem * menuItems, s32 a1_, s32 a2, s32 a3, s32 a4_, const u8 *text);
bool8 sub_809B18C(s32 *sp);
bool8 sub_809B1C0(s32 a0, u32 kind, void *a2);
bool8 sub_809B1D4(s32 a0, u32 kind, s32 a2, void *a3);
// kind: See enum "SpecialTextKind"
bool8 ScriptSpecialTextHandler2(s32 kind, u32 a1, MonOrStrPtr_Arg monOrStr);
// kind: See enum "SpecialTextKind"
bool8 ScriptSpecialTextHandler(s32 kind, u32 a1, s32 a2, MonOrStrPtr_Arg monOrStr);
bool8 sub_809B260(s32 *a0);
void sub_809B474(void);
void sub_809B57C(void);

View File

@ -40,10 +40,10 @@ struct WorldMap
struct WorldMapInfo
{
DungeonLocation startLocation;
/* 0x0 */ DungeonLocation startLocation;
DungeonSetupSubstruct unk4;
Pokemon mon;
u8 unk6C;
/* 0x14 */ Pokemon mon;
/* 0x6C */ bool8 canChangeLeader;
u8 unk6D[WORLD_MAP_UNK_6D_COUNT];
};

View File

@ -23,7 +23,7 @@ void InitBGPaletteBuffer(void)
}
// arm9.bin::020011A0
void SetBGPaletteBufferColorRGB(s32 index, const RGB *color, s32 brightnessRaw, const RGB *ramp)
void SetBGPaletteBufferColorRGB(s32 index, const RGB_Struct *color, s32 brightnessRaw, const RGB_Struct *ramp)
{
s32 brightness = brightnessRaw;
@ -47,7 +47,7 @@ void SetBGPaletteBufferColorRGB(s32 index, const RGB *color, s32 brightnessRaw,
}
// arm9.bin::02001130
void SetBGPaletteBufferColorArray(s32 index, const RGB *color32)
void SetBGPaletteBufferColorArray(s32 index, const RGB_Struct *color32)
{
sBGPaletteRowDirty[index / BG_PALETTE_ROW_SIZE] = TRUE;
sBGPaletteBuffer[index] = RGB2(color32->r >> 3, color32->g >> 3, color32->b >> 3);
@ -61,12 +61,12 @@ void SetBGPaletteBufferColor(s32 index, u16 *color)
}
// arm9.bin::02000FC8
void nullsub_4(s32 index, const RGB *colorArray, s32 brightness, const RGB *ramp)
void nullsub_4(s32 index, const RGB_Struct *colorArray, s32 brightness, const RGB_Struct *ramp)
{
}
// arm9.bin::02000F58
void nullsub_5(s32 index, const RGB *colorArray)
void nullsub_5(s32 index, const RGB_Struct *colorArray)
{
}

View File

@ -42,25 +42,25 @@ void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction)
counter = 10;
if (IsCurrentFixedRoomBossFight()) {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FC9E8); // It couldn't be knocked flying!
TryDisplayDungeonLoggableMessage3_Async(pokemon,target,gUnknown_80FC9E8); // It couldn't be knocked flying!
return;
}
if (pokemon == target) {
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCA10); // {POKEMON_0} couldn't be knocked flying!
TryDisplayDungeonLoggableMessage3_Async(pokemon,target,gUnknown_80FCA10); // {POKEMON_0} couldn't be knocked flying!
return;
}
SubstitutePlaceholderStringTags(gFormatBuffer_Monsters[0],target,0);
if (AbilityIsActive(target,ABILITY_SUCTION_CUPS)) {
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80FCBCC); // {POKEMON_0} is anchored! It can't be knocked flying!
TryDisplayDungeonLoggableMessage3_Async(pokemon,target,gUnknown_80FCBCC); // {POKEMON_0} is anchored! It can't be knocked flying!
return;
}
GetEntInfo(target)->action.direction = (direction + 4) & DIRECTION_MASK;
sub_806CDD4(target, 6, (direction + 4) & DIRECTION_MASK);
sub_80421C0(target,0x1a3);
TryDisplayDungeonLoggableMessage3(pokemon,target,gUnknown_80F8A0C); // {POKEMON_0} was blown away!
TryDisplayDungeonLoggableMessage3_Async(pokemon,target,gUnknown_80F8A0C); // {POKEMON_0} was blown away!
flag = TRUE;
entity = NULL;
@ -104,7 +104,7 @@ void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction)
if (!flag) {
sub_807D068(target,&target->pos);
sub_806F370(pokemon,target,gBlowAwayDmgValue,0,0,0,DUNGEON_EXIT_FAINTED_FROM_BEING_KNOCKED,RESIDUAL_DAMAGE_REGULAR,0,0);
sub_806F370_Async(pokemon,target,gBlowAwayDmgValue,0,0,0,DUNGEON_EXIT_FAINTED_FROM_BEING_KNOCKED,RESIDUAL_DAMAGE_REGULAR,0,0);
}
if (IsFloorOver()) {
return;
@ -115,7 +115,7 @@ void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction)
InitPokemonMove(&move, MOVE_REGULAR_ATTACK);
if (!sub_80571F0(entity,&move)) {
TrySendImmobilizeSleepEndMsg(pokemon,entity);
sub_806F370(pokemon,entity,gBlowAwayDmgValue,0,0,0,DUNGEON_EXIT_FELLED_BY_POKEMON_FLYING,RESIDUAL_DAMAGE_REGULAR,0,0);
sub_806F370_Async(pokemon,entity,gBlowAwayDmgValue,0,0,0,DUNGEON_EXIT_FELLED_BY_POKEMON_FLYING,RESIDUAL_DAMAGE_REGULAR,0,0);
}
}
if (IsFloorOver())
@ -138,7 +138,7 @@ void BlowAwayTarget(Entity *pokemon, Entity *target, u32 direction)
sub_807EC28(FALSE);
}
sub_806A5B8(target);
TryTriggerMonsterHouseWithMsg(target,gDungeon->forceMonsterHouse);
TryTriggerMonsterHouseWithMsg_Async(target,gDungeon->forceMonsterHouse);
}
void sub_807D068(Entity *pokemon, DungeonPos *pos)

View File

@ -33,7 +33,7 @@ void sub_8004AA4(unkStruct_202EE8C *a0, OpenedFile *a1, s32 a2)
}
}
bool8 sub_8004AF0(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3, s32 a4, const RGB *a5)
bool8 sub_8004AF0(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3, s32 a4, const RGB_Struct *a5)
{
bool8 bVar3;
bool8 ret;
@ -65,7 +65,7 @@ bool8 sub_8004AF0(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3, s32 a4, const
return ret;
}
UNUSED static bool8 sub_8004B78(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3, s32 a4, const RGB *a5)
UNUSED static bool8 sub_8004B78(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3, s32 a4, const RGB_Struct *a5)
{
bool8 bVar3;
bool8 ret;
@ -97,14 +97,14 @@ UNUSED static bool8 sub_8004B78(bool8 a0, unkStruct_202EE8C *a1, s32 a2, s32 a3,
return ret;
}
bool8 sub_8004C00(unkStruct_202EE8C *a0, s32 a1, s32 a2, s32 brightness, const RGB *ramp, s16 *a5)
bool8 sub_8004C00(unkStruct_202EE8C *a0, s32 a1, s32 a2, s32 brightness, const RGB_Struct *ramp, s16 *a5)
{
bool8 ret;
s32 i;
s32 r;
s32 g;
s32 b;
RGB color;
RGB_Struct color;
ret = FALSE;

View File

@ -5,7 +5,7 @@
void Hang(void)
{
while(1)
while (TRUE)
{
asm("swi 0x2");
}

View File

@ -54,7 +54,7 @@ bool8 sub_801B60C(u32 r0, u8 id, u8 quantity)
sUnknown_203B234->unk14.unk0 = 0;
sUnknown_203B234->unk14.unk4 = 0;
sUnknown_203B234->unk14.unk8 = 1;
PrintColoredPokeNameToBuffer(gFormatBuffer_Monsters[0], GetPlayerPokemonStruct(), COLOR_YELLOW);
PrintColoredPokeNameToBuffer(gFormatBuffer_Monsters[0], GetLeaderMon1(), COLOR_YELLOW);
sub_8090E14(gFormatBuffer_Items[0], &sUnknown_203B234->unk10, &sUnknown_203B234->unk14);
sub_801B748(0);
return TRUE;

View File

@ -32,12 +32,23 @@
#include "wonder_mail_802C4C8.h"
#include "wonder_mail_802C860.h"
#define RANK_ICON_W 16
#define RANK_ICON_H 16
#define RANK_ICON_4BPP_LEN (RANK_ICON_W * RANK_ICON_H / 8)
// size: 0x8
struct TeamBadgeData
{
/* 0x0 */ u32 *gfx; // Array of (MAX_TEAM_RANKS * RANK_ICON_4BPP_LEN)
/* 0x4 */ RGB_Struct *palette; // Array of 16
};
static EWRAM_INIT struct unk_203B250 *sUnknown_203B250 = {NULL};
static EWRAM_INIT u32 sUnknown_203B254 = {0};
#include "data/code_801D014.h"
static void LoadTeamRankBadge(u32, u32, u32);
static void LoadTeamRankBadge(u32 winID, u32 x, u32 y);
static void sub_801D208(u32 newState);
static void sub_801D220(void);
@ -85,7 +96,7 @@ bool8 sub_801D014(Pokemon *a0)
sUnknown_203B250->currFriendAreaLocation = MapIdToFriendAreaId(GetGroundMapID());
sUnknown_203B250->unk8 = 0;
sUnknown_203B250->unk9 = 0;
sUnknown_203B250->unkC = GetPlayerPokemonStruct();
sUnknown_203B250->unkC = GetLeaderMon1();
sUnknown_203B250->unk7 = 0;
if (sUnknown_203B250->pokeStruct != NULL)
@ -148,13 +159,13 @@ u32 sub_801D178(void)
if (sUnknown_203B250->unk8 != 0)
return 1;
if (sUnknown_203B250->unkC != GetPlayerPokemonStruct())
if (sUnknown_203B250->unkC != GetLeaderMon1())
return 4;
if ((s16) sub_80A7AE8(7) < 0)
return 0;
if (PokemonIsOnTeam(sub_808D3F8()))
if (PokemonIsOnTeam(GetPartnerMon2()))
return 0;
return 4;
@ -304,7 +315,7 @@ static void sub_801D4C0(void)
sUnknown_203B250->unk68[loopMax].menuAction = 4;
loopMax++;
if (sub_80023E4(2)) {
if (CheckQuest(QUEST_CAN_ACCESS_JOBS)) {
sUnknown_203B250->unk68[loopMax].text = sJobList;
sUnknown_203B250->unk68[loopMax].menuAction = 9;
if (HasNoAcceptedJobs())
@ -588,25 +599,27 @@ static void sub_801D894(void)
sub_80073E0(2);
}
static void LoadTeamRankBadge(u32 a0, u32 a1, u32 a2)
static void LoadTeamRankBadge(u32 winID, u32 x, u32 y)
{
OpenedFile *teamBadgeFile;
s32 paletteIndex;
u8 rank;
RGB *colorArray;
u8 *teamBadgePic;
u32 *gfx;
RGB_Struct *pal;
s32 i;
teamBadgeFile = OpenFileAndGetFileDataPtr(sTeamRankBadgeFileName, &gTitleMenuFileArchive);
teamBadgePic = ((struct TeamBadgeData *)(teamBadgeFile->data))->pics;
colorArray = ((struct TeamBadgeData *)(teamBadgeFile->data))->palette;
#define TMRKPAT_DATA ((struct TeamBadgeData *)teamBadgeFile->data)
for (paletteIndex = 0; paletteIndex < 16; paletteIndex++) {
SetBGPaletteBufferColorArray(paletteIndex + 224, colorArray);
colorArray++;
gfx = TMRKPAT_DATA->gfx;
pal = TMRKPAT_DATA->palette;
for (i = 0; i < 16; i++) {
SetBGPaletteBufferColorArray(i + 0xE0, pal);
pal++;
}
rank = GetRescueTeamRank();
teamBadgePic = &teamBadgePic[rank * 128];
sub_8007E20(a0, a1, a2, 16, 16, (void *) teamBadgePic, 14);
gfx = &gfx[GetRescueTeamRank() * RANK_ICON_4BPP_LEN];
WriteGFXToBG0Window(winID, x, y, RANK_ICON_W, RANK_ICON_H, gfx, 14);
#undef TMRKPAT_DATA
CloseFile(teamBadgeFile);
}

View File

@ -201,7 +201,7 @@ static u32 sub_80236A4(void)
gUnknown_3001B5C->unk8 = 0;
for (index = 0; index < MONSTER_MAX; index++) {
if (sub_8098134(index) && (s16)index == GetBaseSpeciesNoUnown(index))
if (GetMonSeenFlag(index) && (s16)index == GetBaseSpeciesNoUnown(index))
gUnknown_3001B5C->unkC[gUnknown_3001B5C->unk8++] = index;
}
@ -211,10 +211,10 @@ static u32 sub_80236A4(void)
static bool8 sub_8023704(u8 unused)
{
s32 index;
s32 i;
for (index = 0; index < MONSTER_MAX; index++) {
if (sub_8098134(index))
for (i = 0; i < MONSTER_MAX; i++) {
if (GetMonSeenFlag(i))
return FALSE;
}

View File

@ -98,5 +98,5 @@ static void sub_8024604(void)
CreateMenuOnWindow(&sUnknown_203B2AC->input, 3, 1, sUnknown_203B2AC->unkE0);
iVar3 = &sUnknown_203B2AC->unk4C;
pokeStruct = &gRecruitedPokemonRef->pokemon[sUnknown_203B2AC->speciesNum];
SetMonSummaryInfo(iVar3, pokeStruct, sub_80023E4(7));
SetMonSummaryInfo(iVar3, pokeStruct, CheckQuest(QUEST_UNLOCKED_EVOLUTIONS));
}

View File

@ -9,124 +9,152 @@
#include "text_2.h"
#include "text_3.h"
struct unkStruct_203B3FC
// Size: R=0x3D0 | B=0x3CC
typedef struct unkStruct_203B3FC
{
// size: 0x3D0
MenuHeaderWindow mh;
s16 unkA0[10];
};
EWRAM_INIT struct unkStruct_203B3FC *gUnknown_203B3FC = NULL;
/* R=0x00 | B=0x00 */ MenuHeaderWindow mh;
/* R=0xA0 | B=0x9C */ s16 scriptIDs[NUM_SCRIPT_IDS + 1]; // See enum "ScriptID"
} unkStruct_203B3FC;
const WindowTemplate gUnknown_80E7F3C =
{
0,
0x03,
0x00, 0x00,
0x00, 0x00,
0x00, 0x00,
NULL
};
EWRAM_INIT unkStruct_203B3FC *gUnknown_203B3FC = NULL; // arm9.bin::020EAF84
const WindowTemplate gUnknown_80E7F54 =
{
0,
0x06,
0x02, 0x02,
0x18, 0x11,
0x11, 0x00,
NULL
const WindowTemplate gUnknown_80E7F3C = WIN_TEMPLATE_DUMMY;
const WindowTemplate gUnknown_80E7F54 = {
.flags = WINTEMPLATE_FLAG_NONE,
.type = WINDOW_TYPE_WITH_HEADER,
.pos = { 2, 2 },
.width = 24,
.height = 17,
.totalHeight = 17,
.unk12 = 0,
.header = NULL
};
static void sub_803B204(void);
static void sub_803B284(void);
// https://decomp.me/scratch/xx1GB - 91.35% matched (Seth)
// https://decomp.me/scratch/Gyv2d - Red 90+%
// https://decomp.me/scratch/kQeVC - Blue 100%
#ifndef NONMATCHING
NAKED
bool8 sub_803B050(void)
{
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tldr r4, _0803B0F4\n"
"\tmovs r0, 0xF4\n"
"\tlsls r0, 2\n"
"\tmovs r1, 0x8\n"
"\tbl MemoryAlloc\n"
"\tstr r0, [r4]\n"
"\tmovs r1, 0x3\n"
"\tstr r1, [r0, 0x34]\n"
"\tadds r1, r0, 0\n"
"\tadds r1, 0x84\n"
"\tstr r1, [r0, 0x38]\n"
"\tadds r0, 0x3C\n"
"\tbl RestoreSavedWindows\n"
"\tldr r1, [r4]\n"
"\tldr r2, [r1, 0x34]\n"
"\tlsls r0, r2, 1\n"
"\tadds r0, r2\n"
"\tlsls r0, 3\n"
"\tadds r1, r0\n"
"\tadds r1, 0x3C\n"
"\tldr r0, _0803B0F8\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldr r0, [r4]\n"
"\tldr r1, [r0, 0x38]\n"
"\tadds r0, 0x9C\n"
"\tstr r0, [r1, 0x14]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl ShowWindows\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0\n"
"\tmovs r7, 0xCB\n"
"\tlsls r7, 1\n"
"\tmovs r6, 0x80\n"
"\tlsls r6, 9\n"
"\tmovs r5, 0\n"
"\tpush {r4-r7,lr}\n"
"\tldr r4, _0803B0F4\n"
"\tmovs r0, 0xF4\n"
"\tlsls r0, 2\n"
"\tmovs r1, 0x8\n"
"\tbl MemoryAlloc\n"
"\tstr r0, [r4]\n"
"\tmovs r1, 0x3\n"
"\tstr r1, [r0, 0x34]\n"
"\tadds r1, r0, 0\n"
"\tadds r1, 0x84\n"
"\tstr r1, [r0, 0x38]\n"
"\tadds r0, 0x3C\n"
"\tbl RestoreSavedWindows\n"
"\tldr r1, [r4]\n"
"\tldr r2, [r1, 0x34]\n"
"\tlsls r0, r2, 1\n"
"\tadds r0, r2\n"
"\tlsls r0, 3\n"
"\tadds r1, r0\n"
"\tadds r1, 0x3C\n"
"\tldr r0, _0803B0F8\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldm r0!, {r2,r3,r5}\n"
"\tstm r1!, {r2,r3,r5}\n"
"\tldr r0, [r4]\n"
"\tldr r1, [r0, 0x38]\n"
"\tadds r0, 0x9C\n"
"\tstr r0, [r1, 0x14]\n"
"\tbl ResetUnusedInputStruct\n"
"\tldr r0, [r4]\n"
"\tadds r0, 0x3C\n"
"\tmovs r1, 0x1\n"
"\tmovs r2, 0x1\n"
"\tbl ShowWindows\n"
"\tmovs r2, 0\n"
"\tmovs r3, 0\n"
"\tmovs r7, 0xCB\n"
"\tlsls r7, 1\n"
"\tmovs r6, 0x80\n"
"\tlsls r6, 9\n"
"\tmovs r5, 0\n"
"_0803B0AE:\n"
"\tldr r0, _0803B0FC\n"
"\tadds r0, r5, r0\n"
"\tmovs r1, 0x2\n"
"\tldrsh r0, [r0, r1]\n"
"\tldr r4, _0803B0F4\n"
"\tcmp r0, 0xA\n"
"\tbne _0803B0C8\n"
"\tldr r0, [r4]\n"
"\tlsls r1, r2, 1\n"
"\tadds r0, 0xA0\n"
"\tadds r0, r1\n"
"\tstrh r3, [r0]\n"
"\tadds r2, 0x1\n"
"\tldr r0, _0803B0FC\n"
"\tadds r0, r5, r0\n"
"\tmovs r1, 0x2\n"
"\tldrsh r0, [r0, r1]\n"
"\tldr r4, _0803B0F4\n"
"\tcmp r0, 0xA\n"
"\tbne _0803B0C8\n"
"\tldr r0, [r4]\n"
"\tlsls r1, r2, 1\n"
"\tadds r0, 0xA0\n"
"\tadds r0, r1\n"
"\tstrh r3, [r0]\n"
"\tadds r2, 0x1\n"
"_0803B0C8:\n"
"\tadds r0, r6, 0\n"
"\tmovs r3, 0x80\n"
"\tlsls r3, 9\n"
"\tadds r6, r3\n"
"\tadds r5, 0xC\n"
"\tasrs r3, r0, 16\n"
"\tcmp r3, r7\n"
"\tble _0803B0AE\n"
"\tldr r0, [r4]\n"
"\tldr r3, [r0, 0x34]\n"
"\tadds r1, r2, 0\n"
"\tmovs r2, 0xA\n"
"\tbl CreateMenuOnWindow\n"
"\tbl sub_803B204\n"
"\tbl sub_803B284\n"
"\tmovs r0, 0x1\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1\n"
"\t.align 2, 0\n"
"\tadds r0, r6, 0\n"
"\tmovs r3, 0x80\n"
"\tlsls r3, 9\n"
"\tadds r6, r3\n"
"\tadds r5, 0xC\n"
"\tasrs r3, r0, 16\n"
"\tcmp r3, r7\n"
"\tble _0803B0AE\n"
"\tldr r0, [r4]\n"
"\tldr r3, [r0, 0x34]\n"
"\tadds r1, r2, 0\n"
"\tmovs r2, 0xA\n"
"\tbl CreateMenuOnWindow\n"
"\tbl sub_803B204\n"
"\tbl sub_803B284\n"
"\tmovs r0, 0x1\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1\n"
"\t.align 2, 0\n"
"_0803B0F4: .4byte gUnknown_203B3FC\n"
"_0803B0F8: .4byte gUnknown_80E7F54\n"
"_0803B0FC: .4byte gFunctionScriptTable");
}
#else // NONMATCHING
// arm9.bin::020566EC
bool8 sub_803B050(void)
{
s32 i;
s32 count;
s32 max;
gUnknown_203B3FC = MemoryAlloc(sizeof(unkStruct_203B3FC), 8);
gUnknown_203B3FC->mh.m.menuWinId = 3;
gUnknown_203B3FC->mh.m.menuWindow = &gUnknown_203B3FC->mh.m.windows.id[gUnknown_203B3FC->mh.m.menuWinId];
RestoreSavedWindows(&gUnknown_203B3FC->mh.m.windows);
gUnknown_203B3FC->mh.m.windows.id[gUnknown_203B3FC->mh.m.menuWinId] = gUnknown_80E7F54;
gUnknown_203B3FC->mh.m.menuWindow->header = &gUnknown_203B3FC->mh.header;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B3FC->mh.m.windows, TRUE, TRUE);
count = 0;
for (i = 0, max = NUM_SCRIPT_IDS - 1; i <= max; i = (s16)(i + 1)) {
const ScriptRef *info = &gFunctionScriptTable[i];
if (info->type == 10) {
gUnknown_203B3FC->scriptIDs[count++] = i;
}
}
CreateMenuOnWindow(&gUnknown_203B3FC->mh.m.input, count, 10, gUnknown_203B3FC->mh.m.menuWinId);
sub_803B204();
sub_803B284();
return TRUE;
}
#endif
void sub_803B100(s32 _id)
{
@ -139,8 +167,7 @@ void sub_803B100(s32 _id)
u32 sub_803B120(void)
{
switch(GetKeyPress(&gUnknown_203B3FC->mh.m.input))
{
switch (GetKeyPress(&gUnknown_203B3FC->mh.m.input)) {
case 2:
PlayMenuSoundEffect(1);
return 2;
@ -149,36 +176,35 @@ u32 sub_803B120(void)
default:
break;
}
if((MenuCursorUpdate(&gUnknown_203B3FC->mh.m.input, TRUE) != FALSE))
{
if (MenuCursorUpdate(&gUnknown_203B3FC->mh.m.input, TRUE)) {
sub_803B204();
sub_803B284();
return 1;
}
else
return 0;
return 0;
}
s16 sub_803B168(void)
{
return gUnknown_203B3FC->unkA0[GET_CURRENT_MENU_ENTRY(gUnknown_203B3FC->mh.m.input)];
return gUnknown_203B3FC->scriptIDs[GET_CURRENT_MENU_ENTRY(gUnknown_203B3FC->mh.m.input)];
}
UNUSED static void sub_803B18C(u8 r0)
UNUSED static void sub_803B18C(bool8 addSprite)
{
gUnknown_203B3FC->mh.m.input.totalEntriesCount = 0xE5;
gUnknown_203B3FC->mh.m.input.totalEntriesCount = 229;
MenuUpdatePagesData(&gUnknown_203B3FC->mh.m.input);
sub_803B204();
sub_803B284();
if(r0)
if (addSprite)
AddMenuCursorSprite(&gUnknown_203B3FC->mh.m.input);
}
void sub_803B1BC(void)
{
if(gUnknown_203B3FC)
{
if (gUnknown_203B3FC != NULL) {
gUnknown_203B3FC->mh.m.windows.id[gUnknown_203B3FC->mh.m.menuWinId] = gUnknown_80E7F3C;
ResetUnusedInputStruct();
ShowWindows(&gUnknown_203B3FC->mh.m.windows, TRUE, TRUE);
@ -187,7 +213,7 @@ void sub_803B1BC(void)
}
}
static void sub_803B204(void)
static void sub_803B204(void)
{
gUnknown_203B3FC->mh.header.count = 1;
gUnknown_203B3FC->mh.header.currId = 0;
@ -198,28 +224,27 @@ static void sub_803B204(void)
UPDATE_MENU_WINDOW_HEIGHT(gUnknown_203B3FC->mh.m);
}
static void sub_803B284(void)
static void sub_803B284(void)
{
s32 x, y, i;
s32 pageNum;
const ScriptRef *ptr;
CallPrepareTextbox_8008C54(gUnknown_203B3FC->mh.m.menuWinId);
sub_80073B8(gUnknown_203B3FC->mh.m.menuWinId);
PrintStringOnWindow(0xA, 0, "Script", gUnknown_203B3FC->mh.m.menuWinId, 0);
PrintStringOnWindow(10, 0, "Script", gUnknown_203B3FC->mh.m.menuWinId, 0);
x = (gUnknown_203B3FC->mh.header.width * 8) - 2;
pageNum = gUnknown_203B3FC->mh.m.input.currPage + 1;
PrintNumOnWindow(x, 0, pageNum, 2, 7, gUnknown_203B3FC->mh.m.menuWinId);
// This line has no real effect. It's a magic 'fakematch' to fool agb into generating the same asm. It can be removed if you don't care about matching.
if (x) { i = 0; }
for (i = 0; i < gUnknown_203B3FC->mh.m.input.currPageEntries; i++) {
ptr = &gFunctionScriptTable[gUnknown_203B3FC->unkA0[(gUnknown_203B3FC->mh.m.input.currPage * gUnknown_203B3FC->mh.m.input.entriesPerPage) + i]];
const ScriptRef *info = &gFunctionScriptTable[gUnknown_203B3FC->scriptIDs[(gUnknown_203B3FC->mh.m.input.currPage * gUnknown_203B3FC->mh.m.input.entriesPerPage) + i]];
y = GetMenuEntryYCoord(&gUnknown_203B3FC->mh.m.input, i);
PrintStringOnWindow(8, y, ptr->name, gUnknown_203B3FC->mh.m.menuWinId, 0);
PrintStringOnWindow(8, y, info->name, gUnknown_203B3FC->mh.m.menuWinId, 0);
}
sub_80073E0(gUnknown_203B3FC->mh.m.menuWinId);
}

View File

@ -244,7 +244,7 @@ bool8 sub_803C580(WonderMail *param_1)
counter = 0;
ptr = gUnknown_80E8180;
if (!sub_80023E4(6))
if (!CheckQuest(QUEST_REACHED_POSTGAME))
return FALSE;
for (id = 0; id < ARRAY_COUNT_INT(gUnknown_80E8180); ptr++, id++) {

View File

@ -20,7 +20,7 @@ EWRAM_DATA OpenedFile *gUnknown_202EC94 = NULL;
EWRAM_DATA OpenedFile *gUnknown_202EC98 = NULL;
EWRAM_DATA OpenedFile *gUnknown_202EC9C = NULL;
EWRAM_DATA OpenedFile *gUnknown_202ECA0 = NULL;
EWRAM_DATA RGB gUnknown_202ECA4[33] = {0};
EWRAM_DATA RGB_Struct gUnknown_202ECA4[33] = {0};
struct FileStruct2
{
@ -121,7 +121,7 @@ void sub_803E02C(void)
void sub_803E13C(void)
{
s32 i;
RGB *pal;
RGB_Struct *pal;
SetWindowBGColor();
if (gGameOptionsRef->playerGender != 0)

View File

@ -95,7 +95,7 @@ static void sub_8040C4C(Entity *entity, Move *move, bool32 hasSpecialEffect)
r4 = sub_800EA84(&sp);
sub_8042DD4(r4, entity, 5);
savedUnkVar = gUnknown_203B40D;
while (1) {
while (TRUE) {
if (!sub_800E9A8(r4))
break;
if (!r8)
@ -157,7 +157,7 @@ void sub_8040DA0(Entity *entity, Move *move)
gUnknown_202F224 = DungeonRandInt(7);
gDungeon->unk181e8.unk18204 = gDungeon->unk181e8.unk18200 = gUnknown_8106A8C[gUnknown_202F224];
gFormatArgs[0] = gUnknown_202F224 + 4;
LogMessageByIdWithPopupCheckUser(anotherEntity, gPtrMagnitudeMessage);
LogMessageByIdWithPopupCheckUser_Async(anotherEntity, gPtrMagnitudeMessage);
sub_80421C0(anotherEntity, 0x1A4);
}
else if (move->id == MOVE_EARTHQUAKE) {
@ -178,7 +178,7 @@ void sub_8040DA0(Entity *entity, Move *move)
direction--;
direction &= DIRECTION_MASK;
sub_806CDD4(entity, 0, direction);
sub_803E708(2, 0x15);
DungeonWaitFrames_Async(2, 0x15);
}
}
}
@ -189,7 +189,7 @@ void sub_8040DA0(Entity *entity, Move *move)
for (i = 0; i < NUM_DIRECTIONS + 1; i++) {
direction &= DIRECTION_MASK;
sub_806CDD4(entity, 0, direction);
sub_803E708(2, 0x15);
DungeonWaitFrames_Async(2, 0x15);
direction++;
}
}
@ -323,7 +323,7 @@ void sub_8041168(Entity *entity, Entity *entity2, Move *move, DungeonPos *pos)
var3 = sub_800EBC8(&sp);
DungeonRunFrameActions(0x5B);
sub_8042DD4(var3, entity2, 6);
while (1) {
while (TRUE) {
if (!sub_800E9A8(var3))
break;
DungeonRunFrameActions(0x28);

View File

@ -275,8 +275,8 @@ void sub_809542C(DungeonMailSeed *param_1)
gUnknown_203B480->dungeonSeed = *param_1;
MersenneTwister_InitializeState(Rand32Bit());
gUnknown_203B480->unk10.unk10 = Random32MersenneTwister();
gUnknown_203B480->clientSpecies = GetPlayerPokemonStruct()->speciesNum;
PrintPokeNameToBuffer(buffer, GetPlayerPokemonStruct());
gUnknown_203B480->clientSpecies = GetLeaderMon1()->speciesNum;
PrintPokeNameToBuffer(buffer, GetLeaderMon1());
CopyStringtoBuffer(gUnknown_203B480->playerName, buffer);
gUnknown_203B480->unk24 = sub_8011C34();
gUnknown_203B480->rescuesAllowed = GetRescuesAllowed(gUnknown_203B480->dungeonSeed.location.id);

View File

@ -574,7 +574,7 @@ bool8 sub_80961D8(void)
if(!gUnknown_203B490->PKMNNewsReceived[0x35])
if(!sub_8096E80(0x35)) floor = 0x35;
}
if(sub_80023E4(0xF))
if(CheckQuest(QUEST_MAZE_15))
{
if(!gUnknown_203B490->PKMNNewsReceived[0x34])
if(!sub_8096E80(0x34)) floor = 0x34;
@ -589,7 +589,7 @@ bool8 sub_80961D8(void)
if(!gUnknown_203B490->PKMNNewsReceived[0x36])
if(!sub_8096E80(0x36)) floor = 0x36;
}
if(sub_80023E4(6))
if(CheckQuest(QUEST_REACHED_POSTGAME))
{
if(!gUnknown_203B490->PKMNNewsReceived[0x37])
if(!sub_8096E80(0x37)) floor = 0x37;
@ -598,7 +598,7 @@ bool8 sub_80961D8(void)
if(floor != 0x38) goto _slot;
if(num > index) goto _08096392;
floor = sub_8096E2C();
if(!sub_80023E4(0xE) && (floor > 2)) goto _0809638E;
if(!CheckQuest(QUEST_MAZE_14) && (floor > 2)) goto _0809638E;
if (floor > 0x31) goto _0809638E;
_slot:
slot = GetMailboxSlotInfo(num);
@ -653,7 +653,7 @@ bool8 sub_80963B4(void)
floor = sub_8096E2C();
num = CountFilledMailboxSlots();
if(num >= NUM_MAILBOX_SLOTS) return FALSE;
if(sub_80023E4(0xE))
if(CheckQuest(QUEST_MAZE_14))
{
if(floor < 0x32)
{

View File

@ -32,38 +32,40 @@ void sub_809965C(void)
void sub_8099690(u32 param_1)
{
OpenedFile *temp;
RGB *pal;
RGB *var2;
OpenedFile *file;
RGB_Struct *pal;
RGB_Struct *var2;
u8 gender;
s32 index;
temp = OpenFileAndGetFileDataPtr("fontpal", &gSystemFileArchive);
file = OpenFileAndGetFileDataPtr("fontpal", &gSystemFileArchive);
switch(param_1)
{
default:
switch (param_1) {
default: {
gender = gGameOptionsRef->playerGender;
pal = &gFontPalette[0x10];
if(gender != 0)
pal = &gFontPalette[0x10];
if (gender != MALE)
pal += 0x40;
break;
case 1:
}
case 1: {
pal = &gFontPalette[0x60];
break;
case 2:
}
case 2: {
pal = &gFontPalette[0x70];
break;
}
}
sub_800388C(0xF0, (const RGB_Union *)pal, 0x10);
var2 = pal;
for(index = 0; index < 0x10; index++)
{
for (index = 0; index < 0x10; index++) {
nullsub_5(index + 0xF0, var2++);
}
CloseFile(temp);
CloseFile(file);
}
UNUSED static void sub_8099708(u16 a0, RGB_Array a1)

File diff suppressed because it is too large Load Diff

View File

@ -12,12 +12,12 @@ EWRAM_INIT static Credits1Work *sCredits1Work = {NULL};
static const WindowTemplate sDummyWinTemplate = WIN_TEMPLATE_DUMMY;
static const WindowTemplate gUnknown_80E4A28 = {
.unk0 = 0,
.flags = WINTEMPLATE_FLAG_NONE,
.type = WINDOW_TYPE_ONLY_TEXT,
.pos = {2, 2},
.pos = { 2, 2 },
.width = 26,
.height = 16,
.unk10 = 16,
.totalHeight = 16,
.unk12 = 0,
.header = NULL,
};

View File

@ -85,7 +85,7 @@ const u16 *const gUnknown_9747A00[] = {
gUnknown_9746BEC,
gUnknown_97472F6,
};
const RGB gUnknown_9747A40[] = INCBIN_U8("data/effects/efbg000.pmdpal");
const RGB_Struct gUnknown_9747A40[] = INCBIN_U8("data/effects/efbg000.pmdpal");
const u32 gUnknown_9747E40[] = INCBIN_U32("data/effects/efbg000.4bpp");
const struct EfbFileData gUnknown_974BE40 = {
ARRAY_COUNT(gUnknown_9747A00), // 16

View File

@ -85,7 +85,7 @@ const u16 *const gUnknown_9752F04[] = {
gUnknown_97520F0,
gUnknown_97527FA,
};
const RGB gUnknown_9752F44[] = INCBIN_U8("data/effects/efbg001.pmdpal");
const RGB_Struct gUnknown_9752F44[] = INCBIN_U8("data/effects/efbg001.pmdpal");
const u32 gUnknown_9753344[] = INCBIN_U32("data/effects/efbg001.4bpp");
const struct EfbFileData gUnknown_97547C4 = {
ARRAY_COUNT(gUnknown_9752F04), // 16

View File

@ -350,7 +350,7 @@ const u16 *const gUnknown_9755E2C[] = {
gUnknown_9755DE0,
gUnknown_9755E06,
};
const RGB gUnknown_9755F40[] = INCBIN_U8("data/effects/efbg002.pmdpal");
const RGB_Struct gUnknown_9755F40[] = INCBIN_U8("data/effects/efbg002.pmdpal");
const u32 gUnknown_9756340[] = INCBIN_U32("data/effects/efbg002.4bpp");
const struct EfbFileData gUnknown_9756660 = {
ARRAY_COUNT(gUnknown_9755E2C), // 69

View File

@ -165,7 +165,7 @@ const u16 *const gUnknown_97647C4[] = {
gUnknown_97639B0,
gUnknown_97640BA,
};
const RGB gUnknown_9764844[] = INCBIN_U8("data/effects/efbg003.pmdpal");
const RGB_Struct gUnknown_9764844[] = INCBIN_U8("data/effects/efbg003.pmdpal");
const u32 gUnknown_9764C44[] = INCBIN_U32("data/effects/efbg003.4bpp");
const struct EfbFileData gUnknown_9766A64 = {
ARRAY_COUNT(gUnknown_97647C4), // 32

View File

@ -320,7 +320,7 @@ const u16 *const gUnknown_97688F8[] = {
gUnknown_97688CC,
gUnknown_97688E2,
};
const RGB gUnknown_97689F4[] = INCBIN_U8("data/effects/efbg004.pmdpal");
const RGB_Struct gUnknown_97689F4[] = INCBIN_U8("data/effects/efbg004.pmdpal");
const u32 gUnknown_9768DF4[] = INCBIN_U32("data/effects/efbg004.4bpp");
const struct EfbFileData gUnknown_9769074 = {
ARRAY_COUNT(gUnknown_97688F8), // 63

View File

@ -115,7 +115,7 @@ const u16 *const gUnknown_9772B74[] = {
gUnknown_9771D60,
gUnknown_977246A,
};
const RGB gUnknown_9772BCC[] = INCBIN_U8("data/effects/efbg005.pmdpal");
const RGB_Struct gUnknown_9772BCC[] = INCBIN_U8("data/effects/efbg005.pmdpal");
const u32 gUnknown_9772FCC[] = INCBIN_U32("data/effects/efbg005.4bpp");
const struct EfbFileData gUnknown_9773AEC = {
ARRAY_COUNT(gUnknown_9772B74), // 22

View File

@ -165,7 +165,7 @@ const u16 *const gUnknown_9781C50[] = {
gUnknown_9780E3C,
gUnknown_9781546,
};
const RGB gUnknown_9781CD0[] = INCBIN_U8("data/effects/efbg006.pmdpal");
const RGB_Struct gUnknown_9781CD0[] = INCBIN_U8("data/effects/efbg006.pmdpal");
const u32 gUnknown_97820D0[] = INCBIN_U32("data/effects/efbg006.4bpp");
const struct EfbFileData gUnknown_9783EF0 = {
ARRAY_COUNT(gUnknown_9781C50), // 32

View File

@ -165,7 +165,7 @@ const u16 *const gUnknown_978BC8C[] = {
gUnknown_978B2F4,
gUnknown_978B830,
};
const RGB gUnknown_978BD0C[] = INCBIN_U8("data/effects/efbg007.pmdpal");
const RGB_Struct gUnknown_978BD0C[] = INCBIN_U8("data/effects/efbg007.pmdpal");
const u32 gUnknown_978C10C[] = INCBIN_U32("data/effects/efbg007.4bpp");
const struct EfbFileData gUnknown_978C7AC = {
ARRAY_COUNT(gUnknown_978BC8C), // 32

View File

@ -6193,7 +6193,7 @@ const ax_anim gUnknown_9798AD8[] = {
{ 0, 0, 0, { 0, 0 }, { 0, 0 } },
};
const u32 gUnknown_9798B44[] = INCBIN_U32("data/effects/efob000.4bpp");
const RGB gUnknown_979A6A4[] = INCBIN_U8("data/effects/efob000.pmdpal");
const RGB_Struct gUnknown_979A6A4[] = INCBIN_U8("data/effects/efob000.pmdpal");
const ax_pose *const gUnknown_979A6E4[] = {
gUnknown_978C7D0,
gUnknown_978C802,

View File

@ -332,7 +332,7 @@ const ax_anim gUnknown_979C054[] = {
{ 0, 0, 0, { 0, 0 }, { 0, 0 } },
};
const u32 gUnknown_979C084[] = INCBIN_U32("data/effects/efob001.4bpp");
const RGB gUnknown_979DA44[] = INCBIN_U8("data/effects/efob001.pmdpal");
const RGB_Struct gUnknown_979DA44[] = INCBIN_U8("data/effects/efob001.pmdpal");
const ax_pose *const gUnknown_979DA84[] = {
gUnknown_979B740,
gUnknown_979B754,

View File

@ -76,7 +76,7 @@ const ax_anim gUnknown_979DEA4[] = {
{ 0, 0, 0, { 0, 0 }, { 0, 0 } },
};
const u32 gUnknown_979DF1C[] = INCBIN_U32("data/effects/efob002.4bpp");
const RGB gUnknown_979EC1C[] = INCBIN_U8("data/effects/efob002.pmdpal");
const RGB_Struct gUnknown_979EC1C[] = INCBIN_U8("data/effects/efob002.pmdpal");
const ax_pose *const gUnknown_979EC5C[] = {
gUnknown_979DD04,
gUnknown_979DD22,

Some files were not shown because too many files have changed in this diff Show More