Merge remote-tracking branch 'pret/master' into RHH/pr/sync/pretmerge_20230103

# Conflicts:
#	include/link_rfu.h
This commit is contained in:
Eduardo Quezada 2023-01-03 15:40:33 -03:00
commit e0802f13a2
15 changed files with 172 additions and 102 deletions

View File

@ -1053,7 +1053,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
for (x16 = x; x16 < (x + width); x16++) for (x16 = x; x16 < (x + width); x16++)
{ {
CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0); CopyTileMapEntry(&firstTileNum, &((u16 *)sGpuBgConfigs2[bg].tilemap)[(u16)GetTileMapIndexFromCoords(x16, y16, attribute, mode, mode2)], paletteSlot, 0, 0);
firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF);
} }
} }
break; break;
@ -1064,7 +1064,7 @@ void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 widt
for (x16 = x; x16 < (x + width); x16++) for (x16 = x; x16 < (x + width); x16++)
{ {
((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum; ((u8 *)sGpuBgConfigs2[bg].tilemap)[(y16 * mode3) + x16] = firstTileNum;
firstTileNum = (firstTileNum & (MAPGRID_COLLISION_MASK | MAPGRID_ELEVATION_MASK)) + ((firstTileNum + tileNumDelta) & MAPGRID_METATILE_ID_MASK); firstTileNum = (firstTileNum & 0xFC00) + ((firstTileNum + tileNumDelta) & 0x3FF);
} }
} }
break; break;

View File

Before

Width:  |  Height:  |  Size: 103 B

After

Width:  |  Height:  |  Size: 103 B

View File

@ -684,8 +684,6 @@
#define METATILE_SecretBase_BigPlant_TopRight 0x2E6 #define METATILE_SecretBase_BigPlant_TopRight 0x2E6
#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC #define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC
#define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED #define METATILE_SecretBase_BigPlant_BaseRight1 0x2ED
#define METATILE_SecretBase_BigPlant_TopLeftWall 0x2E5
#define METATILE_SecretBase_BigPlant_TopRightWall 0x2E6
#define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE #define METATILE_SecretBase_BigPlant_BaseLeft2 0x2EE
#define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF #define METATILE_SecretBase_BigPlant_BaseRight2 0x2EF
#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0 #define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0

View File

@ -10,7 +10,7 @@ struct MultiBootParam
{ {
u32 system_work[5]; // 00 u32 system_work[5]; // 00
u8 handshake_data; // 14 u8 handshake_data; // 14
u8 padding; // 15 //u8 padding; // 15
u16 handshake_timeout; // 16 u16 handshake_timeout; // 16
u8 probe_count; // 18 u8 probe_count; // 18
u8 client_data[MULTIBOOT_NCHILD]; // 19 u8 client_data[MULTIBOOT_NCHILD]; // 19

View File

@ -40,6 +40,7 @@ struct Berry2
u8 bitter; u8 bitter;
u8 sour; u8 sour;
u8 smoothness; u8 smoothness;
//u8 padding;
}; };
struct EnigmaBerry struct EnigmaBerry

View File

@ -41,7 +41,7 @@ struct Tileset
/*0x01*/ bool8 isSecondary; /*0x01*/ bool8 isSecondary;
/*0x04*/ const u32 *tiles; /*0x04*/ const u32 *tiles;
/*0x08*/ const u16 (*palettes)[16]; /*0x08*/ const u16 (*palettes)[16];
/*0x0c*/ const u16 *metatiles; /*0x0C*/ const u16 *metatiles;
/*0x10*/ const u16 *metatileAttributes; /*0x10*/ const u16 *metatileAttributes;
/*0x14*/ TilesetCB callback; /*0x14*/ TilesetCB callback;
}; };
@ -51,7 +51,7 @@ struct MapLayout
/*0x00*/ s32 width; /*0x00*/ s32 width;
/*0x04*/ s32 height; /*0x04*/ s32 height;
/*0x08*/ u16 *border; /*0x08*/ u16 *border;
/*0x0c*/ u16 *map; /*0x0C*/ u16 *map;
/*0x10*/ struct Tileset *primaryTileset; /*0x10*/ struct Tileset *primaryTileset;
/*0x14*/ struct Tileset *secondaryTileset; /*0x14*/ struct Tileset *secondaryTileset;
}; };
@ -68,16 +68,19 @@ struct ObjectEventTemplate
/*0x00*/ u8 localId; /*0x00*/ u8 localId;
/*0x01*/ u8 graphicsId; /*0x01*/ u8 graphicsId;
/*0x02*/ u8 inConnection; // Leftover from FRLG /*0x02*/ u8 inConnection; // Leftover from FRLG
/*0x03*/ //u8 padding1;
/*0x04*/ s16 x; /*0x04*/ s16 x;
/*0x06*/ s16 y; /*0x06*/ s16 y;
/*0x08*/ u8 elevation; /*0x08*/ u8 elevation;
/*0x09*/ u8 movementType; /*0x09*/ u8 movementType;
/*0x0A*/ u16 movementRangeX:4; /*0x0A*/ u16 movementRangeX:4;
u16 movementRangeY:4; u16 movementRangeY:4;
//u16 padding2:8;
/*0x0C*/ u16 trainerType; /*0x0C*/ u16 trainerType;
/*0x0E*/ u16 trainerRange_berryTreeId; /*0x0E*/ u16 trainerRange_berryTreeId;
/*0x10*/ const u8 *script; /*0x10*/ const u8 *script;
/*0x14*/ u16 flagId; /*0x14*/ u16 flagId;
/*0x16*/ //u8 padding3[2];
}; };
struct WarpEvent struct WarpEvent
@ -192,6 +195,7 @@ struct ObjectEvent
u32 disableJumpLandingGroundEffect:1; u32 disableJumpLandingGroundEffect:1;
u32 fixedPriority:1; u32 fixedPriority:1;
u32 hideReflection:1; u32 hideReflection:1;
//u32 padding:4;
/*0x04*/ u8 spriteId; /*0x04*/ u8 spriteId;
/*0x05*/ u8 graphicsId; /*0x05*/ u8 graphicsId;
/*0x06*/ u8 movementType; /*0x06*/ u8 movementType;
@ -217,6 +221,7 @@ struct ObjectEvent
/*0x20*/ u8 previousMovementDirection; /*0x20*/ u8 previousMovementDirection;
/*0x21*/ u8 directionSequenceIndex; /*0x21*/ u8 directionSequenceIndex;
/*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_* /*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_*
/*0x23*/ //u8 padding2;
/*size = 0x24*/ /*size = 0x24*/
}; };

View File

@ -249,9 +249,11 @@ struct ApprenticeMon
struct Apprentice struct Apprentice
{ {
u8 id:5; u8 id:5;
u8 lvlMode:2; // + 1 u8 lvlMode:2;
//u8 padding1:1;
u8 numQuestions; u8 numQuestions;
u8 number; u8 number;
//u8 padding2;
struct ApprenticeMon party[MULTI_PARTY_SIZE]; struct ApprenticeMon party[MULTI_PARTY_SIZE];
u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT]; u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT];
u8 playerId[TRAINER_ID_LENGTH]; u8 playerId[TRAINER_ID_LENGTH];
@ -299,6 +301,7 @@ struct EmeraldBattleTowerRecord
/*0x28*/ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x28*/ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x34*/ struct BattleTowerPokemon party[MAX_FRONTIER_PARTY_SIZE]; /*0x34*/ struct BattleTowerPokemon party[MAX_FRONTIER_PARTY_SIZE];
/*0xE4*/ u8 language; /*0xE4*/ u8 language;
/*0xE7*/ //u8 padding[3];
/*0xE8*/ u32 checksum; /*0xE8*/ u32 checksum;
}; };
@ -331,14 +334,17 @@ struct DomeMonData
u16 moves[MAX_MON_MOVES]; u16 moves[MAX_MON_MOVES];
u8 evs[NUM_STATS]; u8 evs[NUM_STATS];
u8 nature; u8 nature;
//u8 padding;
}; };
struct RentalMon struct RentalMon
{ {
u16 monId; u16 monId;
//u8 padding1[2];
u32 personality; u32 personality;
u8 ivs; u8 ivs;
u8 abilityNum; u8 abilityNum;
//u8 padding2[2];
}; };
struct BattleDomeTrainer struct BattleDomeTrainer
@ -360,8 +366,9 @@ struct BattleFrontier
/*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer; /*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer;
/*0xCA8*/ u8 challengeStatus; /*0xCA8*/ u8 challengeStatus;
/*0xCA9*/ u8 lvlMode:2; /*0xCA9*/ u8 lvlMode:2;
/*0xCA9*/ u8 challengePaused:1; u8 challengePaused:1;
/*0xCA9*/ u8 disableRecordBattle:1; u8 disableRecordBattle:1;
//u8 padding1:4;
/*0xCAA*/ u16 selectedPartyMons[MAX_FRONTIER_PARTY_SIZE]; /*0xCAA*/ u16 selectedPartyMons[MAX_FRONTIER_PARTY_SIZE];
/*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid) /*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid)
/*0xCB4*/ u16 trainerIds[20]; /*0xCB4*/ u16 trainerIds[20];
@ -405,16 +412,19 @@ struct BattleFrontier
/*0xE08*/ u16 pikeRecordStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE08*/ u16 pikeRecordStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE0C*/ u16 pikeTotalStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE0C*/ u16 pikeTotalStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE10*/ u8 pikeHintedRoomIndex:3; /*0xE10*/ u8 pikeHintedRoomIndex:3;
/*0xE10*/ u8 pikeHintedRoomType:4; u8 pikeHintedRoomType:4;
/*0xE10*/ u8 pikeHealingRoomsDisabled:1; u8 pikeHealingRoomsDisabled:1;
/*0xE11*/ //u8 padding2;
/*0xE12*/ u16 pikeHeldItemsBackup[FRONTIER_PARTY_SIZE]; /*0xE12*/ u16 pikeHeldItemsBackup[FRONTIER_PARTY_SIZE];
/*0xE18*/ u16 pyramidPrize; /*0xE18*/ u16 pyramidPrize;
/*0xE1A*/ u16 pyramidWinStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE1A*/ u16 pyramidWinStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE1E*/ u16 pyramidRecordStreaks[FRONTIER_LVL_MODE_COUNT]; /*0xE1E*/ u16 pyramidRecordStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE22*/ u16 pyramidRandoms[4]; /*0xE22*/ u16 pyramidRandoms[4];
/*0xE2A*/ u8 pyramidTrainerFlags; // 1 bit for each trainer (MAX_PYRAMID_TRAINERS) /*0xE2A*/ u8 pyramidTrainerFlags; // 1 bit for each trainer (MAX_PYRAMID_TRAINERS)
/*0xE2B*/ //u8 padding3;
/*0xE2C*/ struct PyramidBag pyramidBag; /*0xE2C*/ struct PyramidBag pyramidBag;
/*0xE68*/ u8 pyramidLightRadius; /*0xE68*/ u8 pyramidLightRadius;
/*0xE69*/ //u8 padding4;
/*0xE6A*/ u16 verdanturfTentPrize; /*0xE6A*/ u16 verdanturfTentPrize;
/*0xE6C*/ u16 fallarborTentPrize; /*0xE6C*/ u16 fallarborTentPrize;
/*0xE6E*/ u16 slateportTentPrize; /*0xE6E*/ u16 slateportTentPrize;
@ -439,6 +449,7 @@ struct ApprenticeQuestion
u8 monId:2; u8 monId:2;
u8 moveSlot:2; u8 moveSlot:2;
u8 suggestedChange:2; // TRUE if told to use held item or second move, FALSE if told to use no item or first move u8 suggestedChange:2; // TRUE if told to use held item or second move, FALSE if told to use no item or first move
//u8 padding;
u16 data; // used both as an itemId and a moveId u16 data; // used both as an itemId and a moveId
}; };
@ -449,9 +460,11 @@ struct PlayersApprentice
/*0xB1*/ u8 questionsAnswered:4; /*0xB1*/ u8 questionsAnswered:4;
/*0xB1*/ u8 leadMonId:2; /*0xB1*/ u8 leadMonId:2;
/*0xB2*/ u8 party:3; /*0xB2*/ u8 party:3;
/*0xB2*/ u8 saveId:2; u8 saveId:2;
//u8 padding1:3;
/*0xB3*/ u8 unused; /*0xB3*/ u8 unused;
/*0xB4*/ u8 speciesIds[MULTI_PARTY_SIZE]; /*0xB4*/ u8 speciesIds[MULTI_PARTY_SIZE];
/*0xB7*/ //u8 padding2;
/*0xB8*/ struct ApprenticeQuestion questions[APPRENTICE_MAX_QUESTIONS]; /*0xB8*/ struct ApprenticeQuestion questions[APPRENTICE_MAX_QUESTIONS];
}; };
@ -461,6 +474,7 @@ struct RankingHall1P
u16 winStreak; u16 winStreak;
u8 name[PLAYER_NAME_LENGTH + 1]; u8 name[PLAYER_NAME_LENGTH + 1];
u8 language; u8 language;
//u8 padding;
}; };
struct RankingHall2P struct RankingHall2P
@ -471,6 +485,7 @@ struct RankingHall2P
u8 name1[PLAYER_NAME_LENGTH + 1]; u8 name1[PLAYER_NAME_LENGTH + 1];
u8 name2[PLAYER_NAME_LENGTH + 1]; u8 name2[PLAYER_NAME_LENGTH + 1];
u8 language; u8 language;
//u8 padding;
}; };
struct SaveBlock2 struct SaveBlock2
@ -490,6 +505,8 @@ struct SaveBlock2
u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
u16 optionsBattleSceneOff:1; // whether battle animations are disabled u16 optionsBattleSceneOff:1; // whether battle animations are disabled
u16 regionMapZoom:1; // whether the map is zoomed in u16 regionMapZoom:1; // whether the map is zoomed in
//u16 padding1:4;
//u16 padding2;
/*0x18*/ struct Pokedex pokedex; /*0x18*/ struct Pokedex pokedex;
/*0x90*/ u8 filler_90[0x8]; /*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset; /*0x98*/ struct Time localTimeOffset;
@ -534,6 +551,7 @@ struct SecretBase
/*0x1AAD*/ u8 unused; /*0x1AAD*/ u8 unused;
/*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE]; /*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE];
/*0x1ABE*/ u8 decorationPositions[DECOR_MAX_SECRET_BASE]; /*0x1ABE*/ u8 decorationPositions[DECOR_MAX_SECRET_BASE];
/*0x1ACE*/ //u8 padding[2];
/*0x1AD0*/ struct SecretBaseParty party; /*0x1AD0*/ struct SecretBaseParty party;
}; };
@ -548,6 +566,7 @@ struct WarpData
s8 mapGroup; s8 mapGroup;
s8 mapNum; s8 mapNum;
s8 warpId; s8 warpId;
//u8 padding;
s16 x, y; s16 x, y;
}; };
@ -592,6 +611,7 @@ struct RamScriptData
u8 mapNum; u8 mapNum;
u8 objectId; u8 objectId;
u8 script[995]; u8 script[995];
//u8 padding;
}; };
struct RamScript struct RamScript
@ -606,6 +626,7 @@ struct DewfordTrend
u16 trendiness:7; u16 trendiness:7;
u16 maxTrendiness:7; u16 maxTrendiness:7;
u16 gainingTrendiness:1; u16 gainingTrendiness:1;
//u16 padding:1;
u16 rand; u16 rand;
u16 words[2]; u16 words[2];
}; /*size = 0x8*/ }; /*size = 0x8*/
@ -618,6 +639,7 @@ struct MauvilleManCommon
struct MauvilleManBard struct MauvilleManBard
{ {
/*0x00*/ u8 id; /*0x00*/ u8 id;
/*0x01*/ //u8 padding1;
/*0x02*/ u16 songLyrics[BARD_SONG_LENGTH]; /*0x02*/ u16 songLyrics[BARD_SONG_LENGTH];
/*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH]; /*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH];
/*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
@ -625,6 +647,7 @@ struct MauvilleManBard
/*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH]; /*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x29*/ bool8 hasChangedSong; /*0x29*/ bool8 hasChangedSong;
/*0x2A*/ u8 language; /*0x2A*/ u8 language;
/*0x2B*/ //u8 padding2;
}; /*size = 0x2C*/ }; /*size = 0x2C*/
struct MauvilleManStoryteller struct MauvilleManStoryteller
@ -643,9 +666,11 @@ struct MauvilleManGiddy
/*0x00*/ u8 id; /*0x00*/ u8 id;
/*0x01*/ u8 taleCounter; /*0x01*/ u8 taleCounter;
/*0x02*/ u8 questionNum; /*0x02*/ u8 questionNum;
/*0x03*/ //u8 padding1;
/*0x04*/ u16 randomWords[GIDDY_MAX_TALES]; /*0x04*/ u16 randomWords[GIDDY_MAX_TALES];
/*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS]; /*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS];
/*0x20*/ u8 language; /*0x20*/ u8 language;
/*0x21*/ //u8 padding2;
}; /*size = 0x2C*/ }; /*size = 0x2C*/
struct MauvilleManHipster struct MauvilleManHipster
@ -690,6 +715,7 @@ struct LinkBattleRecords
{ {
struct LinkBattleRecord entries[LINK_B_RECORDS_COUNT]; struct LinkBattleRecord entries[LINK_B_RECORDS_COUNT];
u8 languages[LINK_B_RECORDS_COUNT]; u8 languages[LINK_B_RECORDS_COUNT];
//u8 padding;
}; };
struct RecordMixingGiftData struct RecordMixingGiftData
@ -715,6 +741,7 @@ struct ContestWinner
u8 monName[POKEMON_NAME_LENGTH + 1]; u8 monName[POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1]; u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 contestRank; u8 contestRank;
//u8 padding;
}; };
struct Mail struct Mail
@ -747,6 +774,7 @@ struct DayCare
struct DaycareMon mons[DAYCARE_MON_COUNT]; struct DaycareMon mons[DAYCARE_MON_COUNT];
u32 offspringPersonality; u32 offspringPersonality;
u8 stepCounter; u8 stepCounter;
//u8 padding[3];
}; };
struct LilycoveLadyQuiz struct LilycoveLadyQuiz
@ -759,10 +787,10 @@ struct LilycoveLadyQuiz
/*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH]; /*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH];
/*0x028*/ u16 prize; /*0x028*/ u16 prize;
/*0x02a*/ bool8 waitingForChallenger; /*0x02A*/ bool8 waitingForChallenger;
/*0x02b*/ u8 questionId; /*0x02B*/ u8 questionId;
/*0x02c*/ u8 prevQuestionId; /*0x02C*/ u8 prevQuestionId;
/*0x02d*/ u8 language; /*0x02D*/ u8 language;
}; };
struct LilycoveLadyFavor struct LilycoveLadyFavor
@ -772,10 +800,12 @@ struct LilycoveLadyFavor
/*0x002*/ bool8 likedItem; /*0x002*/ bool8 likedItem;
/*0x003*/ u8 numItemsGiven; /*0x003*/ u8 numItemsGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 favorId; /*0x00C*/ u8 favorId;
/*0x00e*/ u16 itemId; /*0x00D*/ //u8 padding1;
/*0x00E*/ u16 itemId;
/*0x010*/ u16 bestItem; /*0x010*/ u16 bestItem;
/*0x012*/ u8 language; /*0x012*/ u8 language;
/*0x013*/ //u8 padding2;
}; };
struct LilycoveLadyContest struct LilycoveLadyContest
@ -785,9 +815,9 @@ struct LilycoveLadyContest
/*0x002*/ u8 numGoodPokeblocksGiven; /*0x002*/ u8 numGoodPokeblocksGiven;
/*0x003*/ u8 numOtherPokeblocksGiven; /*0x003*/ u8 numOtherPokeblocksGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 maxSheen; /*0x00C*/ u8 maxSheen;
/*0x00d*/ u8 category; /*0x00D*/ u8 category;
/*0x00e*/ u8 language; /*0x00E*/ u8 language;
}; };
typedef union // 3b58 typedef union // 3b58
@ -796,7 +826,7 @@ typedef union // 3b58
struct LilycoveLadyFavor favor; struct LilycoveLadyFavor favor;
struct LilycoveLadyContest contest; struct LilycoveLadyContest contest;
u8 id; u8 id;
u8 pad[0x40]; u8 filler[0x40];
} LilycoveLady; } LilycoveLady;
struct WaldaPhrase struct WaldaPhrase
@ -806,6 +836,7 @@ struct WaldaPhrase
u8 iconId; u8 iconId;
u8 patternId; u8 patternId;
bool8 patternUnlocked; bool8 patternUnlocked;
//u8 padding;
}; };
struct TrainerNameRecord struct TrainerNameRecord
@ -821,12 +852,13 @@ struct TrainerHillSave
/*0x3D6C*/ u8 unk_3D6C; /*0x3D6C*/ u8 unk_3D6C;
/*0x3D6D*/ u8 unused; /*0x3D6D*/ u8 unused;
/*0x3D6E*/ u16 receivedPrize:1; /*0x3D6E*/ u16 receivedPrize:1;
/*0x3D6E*/ u16 checkedFinalTime:1; u16 checkedFinalTime:1;
/*0x3D6E*/ u16 spokeToOwner:1; u16 spokeToOwner:1;
/*0x3D6E*/ u16 hasLost:1; u16 hasLost:1;
/*0x3D6E*/ u16 maybeECardScanDuringChallenge:1; u16 maybeECardScanDuringChallenge:1;
/*0x3D6E*/ u16 field_3D6E_0f:1; u16 field_3D6E_0f:1;
/*0x3D6E*/ u16 mode:2; // HILL_MODE_* u16 mode:2; // HILL_MODE_*
//u16 padding:8;
}; };
struct WonderNewsMetadata struct WonderNewsMetadata
@ -835,6 +867,7 @@ struct WonderNewsMetadata
u8 sentCounter:3; u8 sentCounter:3;
u8 getCounter:3; u8 getCounter:3;
u8 rand; u8 rand;
//u8 padding[2];
}; };
struct WonderNews struct WonderNews
@ -860,6 +893,7 @@ struct WonderCard
u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH]; u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH];
u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH]; u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH];
u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH]; u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH];
//u8 padding[2];
}; };
struct WonderCardMetadata struct WonderCardMetadata
@ -906,7 +940,7 @@ struct ExternalEventFlags
{ {
u8 usedBoxRS:1; // Set by Pokémon Box: Ruby & Sapphire; denotes whether this save has connected to it and triggered the free False Swipe Swablu Egg giveaway. u8 usedBoxRS:1; // Set by Pokémon Box: Ruby & Sapphire; denotes whether this save has connected to it and triggered the free False Swipe Swablu Egg giveaway.
u8 boxRSEggsUnlocked:2; // Set by Pokémon Box: Ruby & Sapphire; denotes the number of Eggs unlocked from deposits; 1 for ExtremeSpeed Zigzagoon (at 100 deposited), 2 for Pay Day Skitty (at 500 deposited), 3 for Surf Pichu (at 1499 deposited) u8 boxRSEggsUnlocked:2; // Set by Pokémon Box: Ruby & Sapphire; denotes the number of Eggs unlocked from deposits; 1 for ExtremeSpeed Zigzagoon (at 100 deposited), 2 for Pay Day Skitty (at 500 deposited), 3 for Surf Pichu (at 1499 deposited)
u8 padding:5; //u8 padding:5;
u8 unknownFlag1; u8 unknownFlag1;
u8 receivedGCNJirachi; // Both the US Colosseum Bonus Disc and PAL/AUS Pokémon Channel use this field. One cannot receive a WISHMKR Jirachi and CHANNEL Jirachi with the same savefile. u8 receivedGCNJirachi; // Both the US Colosseum Bonus Disc and PAL/AUS Pokémon Channel use this field. One cannot receive a WISHMKR Jirachi and CHANNEL Jirachi with the same savefile.
u8 unknownFlag3; u8 unknownFlag3;
@ -942,9 +976,11 @@ struct SaveBlock1
/*0x2E*/ u8 weather; /*0x2E*/ u8 weather;
/*0x2F*/ u8 weatherCycleStage; /*0x2F*/ u8 weatherCycleStage;
/*0x30*/ u8 flashLevel; /*0x30*/ u8 flashLevel;
/*0x31*/ //u8 padding1;
/*0x32*/ u16 mapLayoutId; /*0x32*/ u16 mapLayoutId;
/*0x34*/ u16 mapView[0x100]; /*0x34*/ u16 mapView[0x100];
/*0x234*/ u8 playerPartyCount; /*0x234*/ u8 playerPartyCount;
/*0x235*/ //u8 padding2[3];
/*0x238*/ struct Pokemon playerParty[PARTY_SIZE]; /*0x238*/ struct Pokemon playerParty[PARTY_SIZE];
/*0x490*/ u32 money; /*0x490*/ u32 money;
/*0x494*/ u16 coins; /*0x494*/ u16 coins;
@ -961,6 +997,7 @@ struct SaveBlock1
/*0x9C2*/ u8 unused_9C2[6]; /*0x9C2*/ u8 unused_9C2[6];
/*0x9C8*/ u16 trainerRematchStepCounter; /*0x9C8*/ u16 trainerRematchStepCounter;
/*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES]; /*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES];
/*0xA2E*/ //u8 padding3[2];
/*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT]; /*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT];
/*0xC70*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT]; /*0xC70*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT];
/*0x1270*/ u8 flags[NUM_FLAG_BYTES]; /*0x1270*/ u8 flags[NUM_FLAG_BYTES];
@ -978,6 +1015,7 @@ struct SaveBlock1
/*0x278E*/ u8 decorationPosters[10]; /*0x278E*/ u8 decorationPosters[10];
/*0x2798*/ u8 decorationDolls[40]; /*0x2798*/ u8 decorationDolls[40];
/*0x27C0*/ u8 decorationCushions[10]; /*0x27C0*/ u8 decorationCushions[10];
/*0x27CA*/ //u8 padding4[2];
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT]; /*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT]; /*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
/*0x2B90*/ u16 outbreakPokemonSpecies; /*0x2B90*/ u16 outbreakPokemonSpecies;
@ -997,6 +1035,7 @@ struct SaveBlock1
/*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT]; /*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2BE0*/ struct Mail mail[MAIL_COUNT]; /*0x2BE0*/ struct Mail mail[MAIL_COUNT];
/*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system /*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system
/*0x2E25*/ //u8 padding5[3];
/*0x2E28*/ OldMan oldMan; /*0x2E28*/ OldMan oldMan;
/*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; /*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
/*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_* /*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_*

View File

@ -36,6 +36,7 @@ typedef union // size = 0x24
/*0x04*/ u16 words[6]; /*0x04*/ u16 words[6];
/*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x18*/ u8 language; /*0x18*/ u8 language;
/*0x19*/ //u8 padding;
} fanclubLetter; } fanclubLetter;
// TVSHOW_RECENT_HAPPENINGS // TVSHOW_RECENT_HAPPENINGS
@ -46,6 +47,7 @@ typedef union // size = 0x24
/*0x04*/ u16 words[6]; /*0x04*/ u16 words[6];
/*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x10*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x18*/ u8 language; /*0x18*/ u8 language;
/*0x19*/ //u8 padding;
} recentHappenings; } recentHappenings;
// TVSHOW_PKMN_FAN_CLUB_OPINIONS // TVSHOW_PKMN_FAN_CLUB_OPINIONS
@ -54,7 +56,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u16 species; /*0x02*/ u16 species;
/*0x04*/ u8 friendshipHighNybble:4; /*0x04*/ u8 friendshipHighNybble:4;
/*0x04*/ u8 questionAsked:4; u8 questionAsked:4;
/*0x05*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x05*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x0D*/ u8 language; /*0x0D*/ u8 language;
/*0x0E*/ u8 pokemonNameLanguage; /*0x0E*/ u8 pokemonNameLanguage;
@ -70,8 +72,8 @@ typedef union // size = 0x24
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u16 words[2]; /*0x02*/ u16 words[2];
/*0x06*/ u16 species; /*0x06*/ u16 species;
/*0x08*/ u8 pad_08[3]; /*0x08*/ u8 filler_08[3];
/*0x0b*/ u8 name[12]; /*0x0B*/ u8 name[12];
/*0x17*/ u8 language; /*0x17*/ u8 language;
} dummy; } dummy;
@ -98,8 +100,9 @@ typedef union // size = 0x24
/*0x04*/ u16 words[2]; /*0x04*/ u16 words[2];
/*0x08*/ u8 pokemonNickname[POKEMON_NAME_LENGTH + 1]; /*0x08*/ u8 pokemonNickname[POKEMON_NAME_LENGTH + 1];
/*0x13*/ u8 contestCategory:3; /*0x13*/ u8 contestCategory:3;
/*0x13*/ u8 contestRank:2; u8 contestRank:2;
/*0x13*/ u8 contestResult:2; u8 contestResult:2;
//u8 padding:1;
/*0x14*/ u16 move; /*0x14*/ u16 move;
/*0x16*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x16*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1E*/ u8 language; /*0x1E*/ u8 language;
@ -121,6 +124,7 @@ typedef union // size = 0x24
/*0x1C*/ bool8 wonTheChallenge; /*0x1C*/ bool8 wonTheChallenge;
/*0x1D*/ u8 language; /*0x1D*/ u8 language;
/*0x1E*/ u8 pokemonNameLanguage; /*0x1E*/ u8 pokemonNameLanguage;
/*0x1F*/ //u8 padding;
} bravoTrainerTower; } bravoTrainerTower;
// TVSHOW_CONTEST_LIVE_UPDATES // TVSHOW_CONTEST_LIVE_UPDATES
@ -131,14 +135,15 @@ typedef union // size = 0x24
/*0x04*/ u8 losingTrainerName[PLAYER_NAME_LENGTH + 1]; /*0x04*/ u8 losingTrainerName[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 loserAppealFlag; /*0x0C*/ u8 loserAppealFlag;
/*0x0D*/ u8 round1Placing; /*0x0D*/ u8 round1Placing;
/*0x0e*/ u8 round2Placing; /*0x0E*/ u8 round2Placing;
/*0x0f*/ u8 winnerAppealFlag; /*0x0F*/ u8 winnerAppealFlag;
/*0x10*/ u16 move; /*0x10*/ u16 move;
/*0x12*/ u16 winningSpecies; /*0x12*/ u16 winningSpecies;
/*0x14*/ u8 winningTrainerName[PLAYER_NAME_LENGTH + 1]; /*0x14*/ u8 winningTrainerName[PLAYER_NAME_LENGTH + 1];
/*0x1C*/ u8 category; /*0x1C*/ u8 category;
/*0x1D*/ u8 winningTrainerLanguage; /*0x1D*/ u8 winningTrainerLanguage;
/*0x1E*/ u8 losingTrainerLanguage; /*0x1E*/ u8 losingTrainerLanguage;
/*0x1F*/ //u8 padding;
} contestLiveUpdates; } contestLiveUpdates;
// TVSHOW_3_CHEERS_FOR_POKEBLOCKS // TVSHOW_3_CHEERS_FOR_POKEBLOCKS
@ -147,7 +152,8 @@ typedef union // size = 0x24
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u8 sheen; /*0x02*/ u8 sheen;
/*0x03*/ u8 flavor:3; /*0x03*/ u8 flavor:3;
/*0x03*/ u8 color:2; u8 color:2;
//u8 padding:3;
/*0x04*/ u8 worstBlenderName[PLAYER_NAME_LENGTH + 1]; /*0x04*/ u8 worstBlenderName[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x0C*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x14*/ u8 language; /*0x14*/ u8 language;
@ -166,6 +172,7 @@ typedef union // size = 0x24
/*0x18*/ u8 battleType; /*0x18*/ u8 battleType;
/*0x19*/ u8 language; /*0x19*/ u8 language;
/*0x1A*/ u8 linkOpponentLanguage; /*0x1A*/ u8 linkOpponentLanguage;
/*0x1B*/ //u8 padding;
} battleUpdate; } battleUpdate;
// TVSHOW_FAN_CLUB_SPECIAL // TVSHOW_FAN_CLUB_SPECIAL
@ -173,13 +180,14 @@ typedef union // size = 0x24
/*0x00*/ u8 kind; /*0x00*/ u8 kind;
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x0a*/ u8 idLo; /*0x0A*/ u8 idLo;
/*0x0b*/ u8 idHi; /*0x0B*/ u8 idHi;
/*0x0c*/ u8 idolName[PLAYER_NAME_LENGTH + 1]; /*0x0C*/ u8 idolName[PLAYER_NAME_LENGTH + 1];
/*0x14*/ u16 words[1]; /*0x14*/ u16 words[1];
/*0x16*/ u8 score; /*0x16*/ u8 score;
/*0x17*/ u8 language; /*0x17*/ u8 language;
/*0x18*/ u8 idolNameLanguage; /*0x18*/ u8 idolNameLanguage;
/*0x19*/ //u8 padding;
} fanClubSpecial; } fanClubSpecial;
// TVSHOW_LILYCOVE_CONTEST_LADY // TVSHOW_LILYCOVE_CONTEST_LADY
@ -187,8 +195,8 @@ typedef union // size = 0x24
/*0x00*/ u8 kind; /*0x00*/ u8 kind;
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x0a*/ u8 contestCategory; /*0x0A*/ u8 contestCategory;
/*0x0b*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x0B*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x16*/ u8 pokeblockState; /*0x16*/ u8 pokeblockState;
/*0x17*/ u8 language; /*0x17*/ u8 language;
/*0x18*/ u8 pokemonNameLanguage; /*0x18*/ u8 pokemonNameLanguage;
@ -206,6 +214,7 @@ typedef union // size = 0x24
/*0x10*/ u16 species; /*0x10*/ u16 species;
/*0x12*/ u8 nBallsUsed; /*0x12*/ u8 nBallsUsed;
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} pokemonToday; } pokemonToday;
// TVSHOW_SMART_SHOPPER // TVSHOW_SMART_SHOPPER
@ -214,11 +223,12 @@ typedef union // size = 0x24
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u8 priceReduced; /*0x02*/ u8 priceReduced;
/*0x03*/ u8 language; /*0x03*/ u8 language;
/*0x04*/ u8 pad04[2]; /*0x04*/ u8 filler_04[2];
/*0x06*/ u16 itemIds[SMARTSHOPPER_NUM_ITEMS]; /*0x06*/ u16 itemIds[SMARTSHOPPER_NUM_ITEMS];
/*0x0C*/ u16 itemAmounts[SMARTSHOPPER_NUM_ITEMS]; /*0x0C*/ u16 itemAmounts[SMARTSHOPPER_NUM_ITEMS];
/*0x12*/ u8 shopLocation; /*0x12*/ u8 shopLocation;
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} smartshopperShow; } smartshopperShow;
// TVSHOW_POKEMON_TODAY_FAILED // TVSHOW_POKEMON_TODAY_FAILED
@ -226,13 +236,14 @@ typedef union // size = 0x24
/*0x00*/ u8 kind; /*0x00*/ u8 kind;
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u8 language; /*0x02*/ u8 language;
/*0x03*/ u8 pad03[9]; /*0x03*/ u8 filler_03[9];
/*0x0c*/ u16 species; /*0x0C*/ u16 species;
/*0x0e*/ u16 species2; /*0x0E*/ u16 species2;
/*0x10*/ u8 nBallsUsed; /*0x10*/ u8 nBallsUsed;
/*0x11*/ u8 outcome; /*0x11*/ u8 outcome;
/*0x12*/ u8 location; /*0x12*/ u8 location;
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} pokemonTodayFailed; } pokemonTodayFailed;
// TVSHOW_FISHING_ADVICE // TVSHOW_FISHING_ADVICE
@ -243,8 +254,9 @@ typedef union // size = 0x24
/*0x03*/ u8 nFails; /*0x03*/ u8 nFails;
/*0x04*/ u16 species; /*0x04*/ u16 species;
/*0x06*/ u8 language; /*0x06*/ u8 language;
/*0x07*/ u8 pad07[12]; /*0x07*/ u8 filler_07[12];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} pokemonAngler; } pokemonAngler;
// TVSHOW_WORLD_OF_MASTERS // TVSHOW_WORLD_OF_MASTERS
@ -255,10 +267,11 @@ typedef union // size = 0x24
/*0x04*/ u16 caughtPoke; /*0x04*/ u16 caughtPoke;
/*0x06*/ u16 steps; /*0x06*/ u16 steps;
/*0x08*/ u16 species; /*0x08*/ u16 species;
/*0x0a*/ u8 location; /*0x0A*/ u8 location;
/*0x0b*/ u8 language; /*0x0B*/ u8 language;
/*0x0c*/ u8 pad0c[7]; /*0x0C*/ u8 filler_0C[7];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding2;
} worldOfMasters; } worldOfMasters;
// TVSHOW_TODAYS_RIVAL_TRAINER // TVSHOW_TODAYS_RIVAL_TRAINER
@ -271,10 +284,11 @@ typedef union // size = 0x24
/*0x06*/ u8 nGoldSymbols; /*0x06*/ u8 nGoldSymbols;
/*0x07*/ u8 location; /*0x07*/ u8 location;
/*0x08*/ u16 battlePoints; /*0x08*/ u16 battlePoints;
/*0x0a*/ u16 mapLayoutId; /*0x0A*/ u16 mapLayoutId;
/*0x0c*/ u8 language; /*0x0C*/ u8 language;
/*0x0d*/ u8 filler_0d[6]; /*0x0D*/ u8 filler_0D[6];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding2;
} rivalTrainer; } rivalTrainer;
// TVSHOW_TREND_WATCHER // TVSHOW_TREND_WATCHER
@ -285,8 +299,9 @@ typedef union // size = 0x24
/*0x04*/ u16 words[2]; /*0x04*/ u16 words[2];
/*0x08*/ u8 gender; /*0x08*/ u8 gender;
/*0x09*/ u8 language; /*0x09*/ u8 language;
/*0x0a*/ u8 filler_0a[9]; /*0x0A*/ u8 filler_0a[9];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} trendWatcher; } trendWatcher;
// TVSHOW_TREASURE_INVESTIGATORS // TVSHOW_TREASURE_INVESTIGATORS
@ -299,6 +314,7 @@ typedef union // size = 0x24
/*0x06*/ u16 mapLayoutId; /*0x06*/ u16 mapLayoutId;
/*0x08*/ u8 filler_08[11]; /*0x08*/ u8 filler_08[11];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} treasureInvestigators; } treasureInvestigators;
// TVSHOW_FIND_THAT_GAMER // TVSHOW_FIND_THAT_GAMER
@ -312,6 +328,7 @@ typedef union // size = 0x24
/*0x08*/ u8 language; /*0x08*/ u8 language;
/*0x09*/ u8 filler_09[10]; /*0x09*/ u8 filler_09[10];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} findThatGamer; } findThatGamer;
// TVSHOW_BREAKING_NEWS // TVSHOW_BREAKING_NEWS
@ -323,11 +340,12 @@ typedef union // size = 0x24
/*0x05*/ u8 outcome; /*0x05*/ u8 outcome;
/*0x06*/ u16 caughtMonBall; /*0x06*/ u16 caughtMonBall;
/*0x08*/ u16 balls; /*0x08*/ u16 balls;
/*0x0a*/ u16 poke1Species; /*0x0A*/ u16 poke1Species;
/*0x0c*/ u16 lastUsedMove; /*0x0C*/ u16 lastUsedMove;
/*0x0e*/ u8 language; /*0x0E*/ u8 language;
/*0x0f*/ u8 filler_0f[4]; /*0x0F*/ u8 filler_0f[4];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} breakingNews; } breakingNews;
// TVSHOW_SECRET_BASE_VISIT // TVSHOW_SECRET_BASE_VISIT
@ -338,10 +356,11 @@ typedef union // size = 0x24
/*0x03*/ u8 numDecorations; /*0x03*/ u8 numDecorations;
/*0x04*/ u8 decorations[4]; /*0x04*/ u8 decorations[4];
/*0x08*/ u16 species; /*0x08*/ u16 species;
/*0x0a*/ u16 move; /*0x0A*/ u16 move;
/*0x0c*/ u8 language; /*0x0C*/ u8 language;
/*0x0d*/ u8 filler_0d[6]; /*0x0D*/ u8 filler_0d[6];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} secretBaseVisit; } secretBaseVisit;
// TVSHOW_LOTTO_WINNER // TVSHOW_LOTTO_WINNER
@ -353,6 +372,7 @@ typedef union // size = 0x24
/*0x05*/ u8 language; /*0x05*/ u8 language;
/*0x06*/ u8 filler_06[13]; /*0x06*/ u8 filler_06[13];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} lottoWinner; } lottoWinner;
// TVSHOW_BATTLE_SEMINAR // TVSHOW_BATTLE_SEMINAR
@ -363,11 +383,12 @@ typedef union // size = 0x24
/*0x04*/ u16 foeSpecies; /*0x04*/ u16 foeSpecies;
/*0x06*/ u16 species; /*0x06*/ u16 species;
/*0x08*/ u16 otherMoves[3]; /*0x08*/ u16 otherMoves[3];
/*0x0e*/ u16 betterMove; /*0x0E*/ u16 betterMove;
/*0x10*/ u8 nOtherMoves; /*0x10*/ u8 nOtherMoves;
/*0x11*/ u8 language; /*0x11*/ u8 language;
/*0x12*/ u8 filler_12[1]; /*0x12*/ u8 filler_12[1];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} battleSeminar; } battleSeminar;
// TVSHOW_TRAINER_FAN_CLUB // TVSHOW_TRAINER_FAN_CLUB
@ -379,6 +400,7 @@ typedef union // size = 0x24
/*0x08*/ u8 language; /*0x08*/ u8 language;
/*0x09*/ u8 filler_09[10]; /*0x09*/ u8 filler_09[10];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} trainerFanClub; } trainerFanClub;
// TVSHOW_CUTIES // TVSHOW_CUTIES
@ -388,7 +410,7 @@ typedef union // size = 0x24
/*0x02*/ u8 nRibbons; /*0x02*/ u8 nRibbons;
/*0x03*/ u8 selectedRibbon; /*0x03*/ u8 selectedRibbon;
/*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
/*0x0f*/ u8 language; /*0x0F*/ u8 language;
/*0x10*/ u8 pokemonNameLanguage; /*0x10*/ u8 pokemonNameLanguage;
/*0x11*/ u8 filler_12[2]; /*0x11*/ u8 filler_12[2];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
@ -402,11 +424,12 @@ typedef union // size = 0x24
/*0x04*/ u16 species1; /*0x04*/ u16 species1;
/*0x06*/ u16 species2; /*0x06*/ u16 species2;
/*0x08*/ u16 species3; /*0x08*/ u16 species3;
/*0x0a*/ u16 species4; /*0x0A*/ u16 species4;
/*0x0c*/ u8 language; /*0x0C*/ u8 language;
/*0x0d*/ u8 facilityAndMode; /*0x0D*/ u8 facilityAndMode;
/*0x0e*/ u8 filler_0e[5]; /*0x0E*/ u8 filler_0e[5];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} frontier; } frontier;
// TVSHOW_NUMBER_ONE // TVSHOW_NUMBER_ONE
@ -418,6 +441,7 @@ typedef union // size = 0x24
/*0x05*/ u8 language; /*0x05*/ u8 language;
/*0x06*/ u8 filler_06[13]; /*0x06*/ u8 filler_06[13];
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1B*/ //u8 padding;
} numberOne; } numberOne;
// TVSHOW_SECRET_BASE_SECRETS // TVSHOW_SECRET_BASE_SECRETS
@ -426,12 +450,13 @@ typedef union // size = 0x24
/*0x01*/ bool8 active; /*0x01*/ bool8 active;
/*0x02*/ u16 stepsInBase; /*0x02*/ u16 stepsInBase;
/*0x04*/ u8 baseOwnersName[PLAYER_NAME_LENGTH + 1]; /*0x04*/ u8 baseOwnersName[PLAYER_NAME_LENGTH + 1];
/*0x0c*/ u32 flags; /*0x0C*/ u32 flags;
/*0x10*/ u16 item; /*0x10*/ u16 item;
/*0x12*/ u8 savedState; /*0x12*/ u8 savedState;
/*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x13*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x1b*/ u8 language; /*0x1B*/ u8 language;
/*0x1c*/ u8 baseOwnersNameLanguage; /*0x1C*/ u8 baseOwnersNameLanguage;
/*0x1D*/ //u8 padding[3];
} secretBaseSecrets; } secretBaseSecrets;
// TVSHOW_SAFARI_FAN_CLUB // TVSHOW_SAFARI_FAN_CLUB
@ -463,6 +488,7 @@ typedef union // size = 0x24
/*0x15*/ u8 unused5; /*0x15*/ u8 unused5;
/*0x16*/ u16 daysLeft; /*0x16*/ u16 daysLeft;
/*0x18*/ u8 language; /*0x18*/ u8 language;
/*0x19*/ //u8 padding;
} massOutbreak; } massOutbreak;
} TVShow; } TVShow;
@ -475,23 +501,23 @@ typedef struct
struct GabbyAndTyData struct GabbyAndTyData
{ {
/*2ba4*/ u16 mon1; /*2BA4*/ u16 mon1;
/*2ba6*/ u16 mon2; /*2BA6*/ u16 mon2;
/*2ba8*/ u16 lastMove; /*2BA8*/ u16 lastMove;
/*2baa*/ u16 quote[1]; /*2BAA*/ u16 quote[1];
/*2bac*/ u8 mapnum; /*2BAC*/ u8 mapnum;
/*2bad*/ u8 battleNum; /*2BAD*/ u8 battleNum;
/*2bae*/ u8 battleTookMoreThanOneTurn:1; /*2BAE*/ u8 battleTookMoreThanOneTurn:1;
/*2bae*/ u8 playerLostAMon:1; u8 playerLostAMon:1;
/*2bae*/ u8 playerUsedHealingItem:1; u8 playerUsedHealingItem:1;
/*2bae*/ u8 playerThrewABall:1; u8 playerThrewABall:1;
/*2bae*/ u8 onAir:1; u8 onAir:1;
/*2bae*/ u8 valA_5:3; u8 valA_5:3;
/*2baf*/ u8 battleTookMoreThanOneTurn2:1; /*2BAF*/ u8 battleTookMoreThanOneTurn2:1;
/*2baf*/ u8 playerLostAMon2:1; u8 playerLostAMon2:1;
/*2baf*/ u8 playerUsedHealingItem2:1; u8 playerUsedHealingItem2:1;
/*2baf*/ u8 playerThrewABall2:1; u8 playerThrewABall2:1;
/*2baf*/ u8 valB_4:4; u8 valB_4:4;
}; };
#endif //GUARD_GLOBAL_TV_H #endif //GUARD_GLOBAL_TV_H

View File

@ -109,7 +109,7 @@ struct __attribute__((packed, aligned(2))) RfuGameData
u8 playerGender:1; u8 playerGender:1;
u8 tradeLevel:7; u8 tradeLevel:7;
u8 tradeType:6; u8 tradeType:6;
u8 padding:2; u8 filler:2;
}; };
// Constants for getting/setting information in 'partnerInfo' of RfuGameData. // Constants for getting/setting information in 'partnerInfo' of RfuGameData.

View File

@ -684,7 +684,7 @@ const u8 gHealthboxElementsGfxTable[] = INCBIN_U8("graphics/battle_interface/hpb
"graphics/battle_interface/hpbar_anim.4bpp", "graphics/battle_interface/hpbar_anim.4bpp",
"graphics/battle_interface/misc_frameend.4bpp", "graphics/battle_interface/misc_frameend.4bpp",
"graphics/battle_interface/ball_display.4bpp", "graphics/battle_interface/ball_display.4bpp",
"graphics/battle_interface/ball_display_unused_extra.4bpp", "graphics/battle_interface/ball_caught_indicator.4bpp",
"graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent pokemon "graphics/battle_interface/status2.4bpp", // these three duplicate sets of graphics are for the opponent pokemon
"graphics/battle_interface/status3.4bpp", // and are also for use in double battles. they use dynamic palettes so "graphics/battle_interface/status3.4bpp", // and are also for use in double battles. they use dynamic palettes so
"graphics/battle_interface/status4.4bpp", // coloring them is an extreme headache and wont be done for now "graphics/battle_interface/status4.4bpp", // coloring them is an extreme headache and wont be done for now

View File

@ -987,7 +987,7 @@ static void BagMenu_ItemPrintCallback(u8 windowId, u32 itemIndex, u8 y)
else else
{ {
// Print registered icon // Print registered icon
if (gSaveBlock1Ptr->registeredItem && gSaveBlock1Ptr->registeredItem == itemId) if (gSaveBlock1Ptr->registeredItem != ITEM_NONE && gSaveBlock1Ptr->registeredItem == itemId)
BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16); BlitBitmapToWindow(windowId, sRegisteredSelect_Gfx, 96, y - 1, 24, 16);
} }
} }
@ -1909,7 +1909,7 @@ static void ItemMenu_Register(u8 taskId)
u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket]; u16 *cursorPos = &gBagPosition.cursorPosition[gBagPosition.pocket];
if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId) if (gSaveBlock1Ptr->registeredItem == gSpecialVar_ItemId)
gSaveBlock1Ptr->registeredItem = 0; gSaveBlock1Ptr->registeredItem = ITEM_NONE;
else else
gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId; gSaveBlock1Ptr->registeredItem = gSpecialVar_ItemId;
DestroyListMenuTask(tListTaskId, scrollPos, cursorPos); DestroyListMenuTask(tListTaskId, scrollPos, cursorPos);

View File

@ -182,7 +182,7 @@ void NewGameInitData(void)
ResetPokemonStorageSystem(); ResetPokemonStorageSystem();
ClearRoamerData(); ClearRoamerData();
ClearRoamerLocationData(); ClearRoamerLocationData();
gSaveBlock1Ptr->registeredItem = 0; gSaveBlock1Ptr->registeredItem = ITEM_NONE;
ClearBag(); ClearBag();
NewGameInitPCItems(); NewGameInitPCItems();
ClearPokeblocks(); ClearPokeblocks();

View File

@ -907,11 +907,11 @@ u8 GetSpeciesBackAnimSet(u16 species)
// as 0xFFFFXXXX instead of the desired 0x02YYXXXX. // as 0xFFFFXXXX instead of the desired 0x02YYXXXX.
// By dumb luck, this is not an issue in vanilla. However, // By dumb luck, this is not an issue in vanilla. However,
// changing the link order revealed this bug. // changing the link order revealed this bug.
#if MODERN #if MODERN// || defined(BUGFIX)
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo))) #define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | ((u16)gTasks[taskId].tPtrLo)))
#else #else
#define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo))) #define ANIM_SPRITE(taskId) ((struct Sprite *)((gTasks[taskId].tPtrHi << 16) | (gTasks[taskId].tPtrLo)))
#endif //MODERN #endif //MODERN || BUGFIX
static void Task_HandleMonAnimation(u8 taskId) static void Task_HandleMonAnimation(u8 taskId)
{ {

View File

@ -109,6 +109,7 @@ enum {
#define PSS_DATA_WINDOW_MOVE_DESCRIPTION 2 #define PSS_DATA_WINDOW_MOVE_DESCRIPTION 2
#define MOVE_SELECTOR_SPRITES_COUNT 10 #define MOVE_SELECTOR_SPRITES_COUNT 10
#define TYPE_ICON_SPRITE_COUNT (MAX_MON_MOVES + 1)
// for the spriteIds field in PokemonSummaryScreenData // for the spriteIds field in PokemonSummaryScreenData
enum enum
{ {
@ -116,7 +117,7 @@ enum
SPRITE_ARR_ID_BALL, SPRITE_ARR_ID_BALL,
SPRITE_ARR_ID_STATUS, SPRITE_ARR_ID_STATUS,
SPRITE_ARR_ID_TYPE, // 2 for mon types, 5 for move types(4 moves and 1 to learn), used interchangeably, because mon types and move types aren't shown on the same screen SPRITE_ARR_ID_TYPE, // 2 for mon types, 5 for move types(4 moves and 1 to learn), used interchangeably, because mon types and move types aren't shown on the same screen
SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + 5, // 10 sprites that make up the selector SPRITE_ARR_ID_MOVE_SELECTOR1 = SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT, // 10 sprites that make up the selector
SPRITE_ARR_ID_MOVE_SELECTOR2 = SPRITE_ARR_ID_MOVE_SELECTOR1 + MOVE_SELECTOR_SPRITES_COUNT, SPRITE_ARR_ID_MOVE_SELECTOR2 = SPRITE_ARR_ID_MOVE_SELECTOR1 + MOVE_SELECTOR_SPRITES_COUNT,
SPRITE_ARR_ID_COUNT = SPRITE_ARR_ID_MOVE_SELECTOR2 + MOVE_SELECTOR_SPRITES_COUNT SPRITE_ARR_ID_COUNT = SPRITE_ARR_ID_MOVE_SELECTOR2 + MOVE_SELECTOR_SPRITES_COUNT
}; };
@ -3873,7 +3874,7 @@ static void CreateMoveTypeIcons(void)
{ {
u8 i; u8 i;
for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + 5; i++) for (i = SPRITE_ARR_ID_TYPE; i < SPRITE_ARR_ID_TYPE + TYPE_ICON_SPRITE_COUNT; i++)
{ {
if (sMonSummaryScreen->spriteIds[i] == SPRITE_NONE) if (sMonSummaryScreen->spriteIds[i] == SPRITE_NONE)
sMonSummaryScreen->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2); sMonSummaryScreen->spriteIds[i] = CreateSprite(&sSpriteTemplate_MoveTypes, 0, 0, 2);

View File

@ -59,23 +59,23 @@ struct PlayerRecordRS
struct RecordMixingDaycareMail daycareMail; struct RecordMixingDaycareMail daycareMail;
struct RSBattleTowerRecord battleTowerRecord; struct RSBattleTowerRecord battleTowerRecord;
u16 giftItem; u16 giftItem;
u16 padding[50]; u16 filler[50];
}; };
struct PlayerRecordEmerald struct PlayerRecordEmerald
{ {
/* 0x0000 */ struct SecretBase secretBases[SECRET_BASES_COUNT]; /* 0x0000 */ struct SecretBase secretBases[SECRET_BASES_COUNT];
/* 0x0c80 */ TVShow tvShows[TV_SHOWS_COUNT]; /* 0x0C80 */ TVShow tvShows[TV_SHOWS_COUNT];
/* 0x1004 */ PokeNews pokeNews[POKE_NEWS_COUNT]; /* 0x1004 */ PokeNews pokeNews[POKE_NEWS_COUNT];
/* 0x1044 */ OldMan oldMan; /* 0x1044 */ OldMan oldMan;
/* 0x1084 */ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT]; /* 0x1084 */ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
/* 0x10ac */ struct RecordMixingDaycareMail daycareMail; /* 0x10AC */ struct RecordMixingDaycareMail daycareMail;
/* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord; /* 0x1124 */ struct EmeraldBattleTowerRecord battleTowerRecord;
/* 0x1210 */ u16 giftItem; /* 0x1210 */ u16 giftItem;
/* 0x1214 */ LilycoveLady lilycoveLady; /* 0x1214 */ LilycoveLady lilycoveLady;
/* 0x1254 */ struct Apprentice apprentices[2]; /* 0x1254 */ struct Apprentice apprentices[2];
/* 0x12dc */ struct PlayerHallRecords hallRecords; /* 0x12DC */ struct PlayerHallRecords hallRecords;
/* 0x1434 */ u8 padding[16]; /* 0x1434 */ u8 filler_1434[16];
}; // 0x1444 }; // 0x1444
union PlayerRecord union PlayerRecord