Merge branch 'master' of https://github.com/pret/pokeemerald into constants-num-frames

This commit is contained in:
GriffinR
2023-02-01 15:59:02 -05:00
890 changed files with 40310 additions and 37715 deletions

View File

@@ -3,11 +3,11 @@
struct BardSound
{
/*0x00*/ u8 var00;
/*0x01*/ s8 var01;
/*0x02*/ u16 var02;
/*0x00*/ u8 songLengthId;
/*0x01*/ s8 songLengthOffset;
/*0x02*/ u16 unused;
/*0x04*/ s16 volume;
/*0x06*/ u16 var06;
/*0x06*/ u16 unused2;
};
struct BardPhoneme

View File

@@ -164,7 +164,7 @@ struct WishFutureKnock
u8 wishCounter[MAX_BATTLERS_COUNT];
u8 wishMonId[MAX_BATTLERS_COUNT];
u8 weatherDuration;
u8 knockedOffMons[2]; // Each battler is represented by a bit. The array entry is dependent on the battler's side.
u8 knockedOffMons[NUM_BATTLE_SIDES]; // Each battler is represented by a bit.
};
struct AI_ThinkingStruct
@@ -326,9 +326,9 @@ struct BattleTv_Mon
struct BattleTv
{
struct BattleTv_Mon mon[2][PARTY_SIZE]; // [side][partyId]
struct BattleTv_Position pos[2][2]; // [side][flank]
struct BattleTv_Side side[2]; // [side]
struct BattleTv_Mon mon[NUM_BATTLE_SIDES][PARTY_SIZE];
struct BattleTv_Position pos[NUM_BATTLE_SIDES][2]; // [side][flank]
struct BattleTv_Side side[NUM_BATTLE_SIDES];
};
struct BattleTvMovePoints
@@ -399,7 +399,7 @@ struct BattleStruct
u8 wallyWaitFrames;
u8 wallyMoveFrames;
u8 lastTakenMove[MAX_BATTLERS_COUNT * 2 * 2]; // Last move that a battler was hit with. This field seems to erroneously take 16 bytes instead of 8.
u16 hpOnSwitchout[2];
u16 hpOnSwitchout[NUM_BATTLE_SIDES];
u32 savedBattleTypeFlags;
u8 abilityPreventingSwitchout;
u8 hpScale;
@@ -670,8 +670,8 @@ extern u8 gMoveResultFlags;
extern u32 gHitMarker;
extern u8 gTakenDmgByBattler[MAX_BATTLERS_COUNT];
extern u8 gUnusedFirstBattleVar2;
extern u16 gSideStatuses[2];
extern struct SideTimer gSideTimers[2];
extern u16 gSideStatuses[NUM_BATTLE_SIDES];
extern struct SideTimer gSideTimers[NUM_BATTLE_SIDES];
extern u32 gStatuses3[MAX_BATTLERS_COUNT];
extern struct DisableStruct gDisableStructs[MAX_BATTLERS_COUNT];
extern u16 gPauseCounterBattle;

View File

@@ -36,6 +36,7 @@
#define B_SIDE_PLAYER 0
#define B_SIDE_OPPONENT 1
#define NUM_BATTLE_SIDES 2
#define B_FLANK_LEFT 0
#define B_FLANK_RIGHT 1
@@ -78,6 +79,11 @@
#define BATTLE_TYPE_RECORDED_IS_MASTER (1 << 31)
#define BATTLE_TYPE_FRONTIER (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID)
#define BATTLE_TYPE_FRONTIER_NO_PYRAMID (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_DOME | BATTLE_TYPE_PALACE | BATTLE_TYPE_ARENA | BATTLE_TYPE_FACTORY | BATTLE_TYPE_PIKE)
#define BATTLE_TYPE_RECORDED_INVALID ((BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_FIRST_BATTLE \
| BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_ROAMER | BATTLE_TYPE_EREADER_TRAINER \
| BATTLE_TYPE_KYOGRE_GROUDON | BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI \
| BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL | BATTLE_TYPE_SECRET_BASE \
| BATTLE_TYPE_GROUDON | BATTLE_TYPE_KYOGRE | BATTLE_TYPE_RAYQUAZA))
// Battle Outcome defines
#define B_OUTCOME_WON 1

View File

@@ -298,10 +298,17 @@
#define ANIM_TAG_BLUE_RING_2 (ANIM_SPRITES_START + 288)
// battlers
#define ANIM_ATTACKER 0
#define ANIM_TARGET 1
#define ANIM_ATK_PARTNER 2
#define ANIM_DEF_PARTNER 3
#define ANIM_ATTACKER 0
#define ANIM_TARGET 1
#define ANIM_ATK_PARTNER 2
#define ANIM_DEF_PARTNER 3
// Below are used by AnimTask_ShakeMon2 and AnimTask_SetGrayscaleOrOriginalPal
#define ANIM_PLAYER_LEFT (MAX_BATTLERS_COUNT + 0)
#define ANIM_PLAYER_RIGHT (MAX_BATTLERS_COUNT + 1)
#define ANIM_OPPONENT_LEFT (MAX_BATTLERS_COUNT + 2)
#define ANIM_OPPONENT_RIGHT (MAX_BATTLERS_COUNT + 3)
#define ANIM_ATTACKER_FORCE (MAX_BATTLERS_COUNT + 4)
// stereo panning constants [0-255]
//

File diff suppressed because it is too large Load Diff

View File

@@ -1,60 +1,60 @@
#ifndef GUARD_CONSTANTS_GAME_STAT_H
#define GUARD_CONSTANTS_GAME_STAT_H
#define GAME_STAT_SAVED_GAME 0
#define GAME_STAT_FIRST_HOF_PLAY_TIME 1
#define GAME_STAT_STARTED_TRENDS 2
#define GAME_STAT_PLANTED_BERRIES 3
#define GAME_STAT_TRADED_BIKES 4
#define GAME_STAT_STEPS 5
#define GAME_STAT_GOT_INTERVIEWED 6
#define GAME_STAT_TOTAL_BATTLES 7
#define GAME_STAT_WILD_BATTLES 8
#define GAME_STAT_TRAINER_BATTLES 9
#define GAME_STAT_ENTERED_HOF 10
#define GAME_STAT_POKEMON_CAPTURES 11
#define GAME_STAT_FISHING_CAPTURES 12
#define GAME_STAT_HATCHED_EGGS 13
#define GAME_STAT_EVOLVED_POKEMON 14
#define GAME_STAT_USED_POKECENTER 15
#define GAME_STAT_RESTED_AT_HOME 16
#define GAME_STAT_ENTERED_SAFARI_ZONE 17
#define GAME_STAT_USED_CUT 18
#define GAME_STAT_USED_ROCK_SMASH 19
#define GAME_STAT_MOVED_SECRET_BASE 20
#define GAME_STAT_POKEMON_TRADES 21
#define GAME_STAT_UNKNOWN_22 22
#define GAME_STAT_LINK_BATTLE_WINS 23
#define GAME_STAT_LINK_BATTLE_LOSSES 24
#define GAME_STAT_LINK_BATTLE_DRAWS 25
#define GAME_STAT_USED_SPLASH 26
#define GAME_STAT_USED_STRUGGLE 27
#define GAME_STAT_SLOT_JACKPOTS 28
#define GAME_STAT_CONSECUTIVE_ROULETTE_WINS 29
#define GAME_STAT_ENTERED_BATTLE_TOWER 30
#define GAME_STAT_UNKNOWN_31 31
#define GAME_STAT_BATTLE_TOWER_BEST_STREAK 32
#define GAME_STAT_POKEBLOCKS 33
#define GAME_STAT_POKEBLOCKS_WITH_FRIENDS 34
#define GAME_STAT_WON_LINK_CONTEST 35
#define GAME_STAT_ENTERED_CONTEST 36
#define GAME_STAT_WON_CONTEST 37
#define GAME_STAT_SHOPPED 38
#define GAME_STAT_USED_ITEMFINDER 39
#define GAME_STAT_GOT_RAINED_ON 40
#define GAME_STAT_CHECKED_POKEDEX 41
#define GAME_STAT_RECEIVED_RIBBONS 42
#define GAME_STAT_JUMPED_DOWN_LEDGES 43
#define GAME_STAT_WATCHED_TV 44
#define GAME_STAT_CHECKED_CLOCK 45
#define GAME_STAT_WON_POKEMON_LOTTERY 46
#define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
#define GAME_STAT_PLAYED_BERRY_CRUSH 51
#define GAME_STAT_SAVED_GAME 0
#define GAME_STAT_FIRST_HOF_PLAY_TIME 1
#define GAME_STAT_STARTED_TRENDS 2
#define GAME_STAT_PLANTED_BERRIES 3
#define GAME_STAT_TRADED_BIKES 4
#define GAME_STAT_STEPS 5
#define GAME_STAT_GOT_INTERVIEWED 6
#define GAME_STAT_TOTAL_BATTLES 7
#define GAME_STAT_WILD_BATTLES 8
#define GAME_STAT_TRAINER_BATTLES 9
#define GAME_STAT_ENTERED_HOF 10
#define GAME_STAT_POKEMON_CAPTURES 11
#define GAME_STAT_FISHING_CAPTURES 12
#define GAME_STAT_HATCHED_EGGS 13
#define GAME_STAT_EVOLVED_POKEMON 14
#define GAME_STAT_USED_POKECENTER 15
#define GAME_STAT_RESTED_AT_HOME 16
#define GAME_STAT_ENTERED_SAFARI_ZONE 17
#define GAME_STAT_USED_CUT 18
#define GAME_STAT_USED_ROCK_SMASH 19
#define GAME_STAT_MOVED_SECRET_BASE 20
#define GAME_STAT_POKEMON_TRADES 21
#define GAME_STAT_UNKNOWN_22 22
#define GAME_STAT_LINK_BATTLE_WINS 23
#define GAME_STAT_LINK_BATTLE_LOSSES 24
#define GAME_STAT_LINK_BATTLE_DRAWS 25
#define GAME_STAT_USED_SPLASH 26
#define GAME_STAT_USED_STRUGGLE 27
#define GAME_STAT_SLOT_JACKPOTS 28
#define GAME_STAT_CONSECUTIVE_ROULETTE_WINS 29
#define GAME_STAT_ENTERED_BATTLE_TOWER 30
#define GAME_STAT_UNKNOWN_31 31
#define GAME_STAT_BATTLE_TOWER_SINGLES_STREAK 32
#define GAME_STAT_POKEBLOCKS 33
#define GAME_STAT_POKEBLOCKS_WITH_FRIENDS 34
#define GAME_STAT_WON_LINK_CONTEST 35
#define GAME_STAT_ENTERED_CONTEST 36
#define GAME_STAT_WON_CONTEST 37
#define GAME_STAT_SHOPPED 38
#define GAME_STAT_USED_ITEMFINDER 39
#define GAME_STAT_GOT_RAINED_ON 40
#define GAME_STAT_CHECKED_POKEDEX 41
#define GAME_STAT_RECEIVED_RIBBONS 42
#define GAME_STAT_JUMPED_DOWN_LEDGES 43
#define GAME_STAT_WATCHED_TV 44
#define GAME_STAT_CHECKED_CLOCK 45
#define GAME_STAT_WON_POKEMON_LOTTERY 46
#define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
#define GAME_STAT_NUM_UNION_ROOM_BATTLES 50
#define GAME_STAT_PLAYED_BERRY_CRUSH 51
#define NUM_USED_GAME_STATS 52
#define NUM_GAME_STATS 64
#define NUM_USED_GAME_STATS 52
#define NUM_GAME_STATS 64
#endif // GUARD_CONSTANTS_GAME_STAT_H

View File

@@ -1,6 +1,7 @@
#ifndef GUARD_CONSTANTS_HEAL_LOCATIONS_H
#define GUARD_CONSTANTS_HEAL_LOCATIONS_H
#define HEAL_LOCATION_NONE 0
#define HEAL_LOCATION_LITTLEROOT_TOWN_BRENDANS_HOUSE_2F 1
#define HEAL_LOCATION_LITTLEROOT_TOWN_MAYS_HOUSE_2F 2
#define HEAL_LOCATION_PETALBURG_CITY 3

View File

@@ -3,16 +3,19 @@
#include "map_groups.h"
#define MAP_NONE (0x7F | (0x7F << 8))
// Warps using this map will instead use the warp data stored in gSaveBlock1Ptr->dynamicWarp.
// Used for warps that need to change destinations, e.g. when stepping off an elevator.
#define MAP_DYNAMIC (0x7F | (0x7F << 8))
#define MAP_UNDEFINED (0xFF | (0xFF << 8))
#define MAP_GROUP(map) (MAP_##map >> 8)
#define MAP_NUM(map) (MAP_##map & 0xFF)
// IDs for dynamic warps. Both are used in the dest_warp_id field for warp events, but they
// are never read in practice. A dest_map of MAP_NONE is used to indicate that a
// dynamic warp should be used, at which point the warp id is ignored. It can be passed to
// SetDynamicWarp/SetDynamicWarpWithCoords as the first argument, but this argument is unused.
// are never read in practice. A dest_map of MAP_DYNAMIC is used to indicate that a
// dynamic warp should be used, at which point the warp id is ignored. They can be passed
// as the argument to SetWarpDestinationToDynamicWarp, but this argument is unused.
// As only one dynamic warp is saved at a time there's no need to distinguish between them.
#define WARP_ID_SECRET_BASE 0x7E
#define WARP_ID_DYNAMIC 0x7F

View File

@@ -18,7 +18,7 @@
#define MB_MOSSDEEP_GYM_WARP 0x0E
#define MB_MT_PYRE_HOLE 0x0F
#define MB_POND_WATER 0x10
#define MB_SEMI_DEEP_WATER 0x11
#define MB_INTERIOR_DEEP_WATER 0x11 // Used by interior maps; functionally the same as MB_DEEP_WATER
#define MB_DEEP_WATER 0x12
#define MB_WATERFALL 0x13
#define MB_SOOTOPOLIS_DEEP_WATER 0x14

View File

@@ -684,8 +684,6 @@
#define METATILE_SecretBase_BigPlant_TopRight 0x2E6
#define METATILE_SecretBase_BigPlant_BaseLeft1 0x2EC
#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_BaseRight2 0x2EF
#define METATILE_SecretBase_GorgeousPlant_TopLeft 0x2F0

View File

@@ -44,4 +44,12 @@
#define WONDER_CARD_FLAG_OFFSET 1000
#define NEWS_REWARD_NONE 0
#define NEWS_REWARD_RECV_SMALL 1
#define NEWS_REWARD_RECV_BIG 2
#define NEWS_REWARD_WAITING 3
#define NEWS_REWARD_SENT_SMALL 4
#define NEWS_REWARD_SENT_BIG 5
#define NEWS_REWARD_AT_MAX 6
#endif //GUARD_CONSTANTS_MYSTERY_GIFT_H

View File

@@ -60,7 +60,7 @@
#define VAR_POISON_STEP_COUNTER 0x402B
#define VAR_RESET_RTC_ENABLE 0x402C
#define VAR_ENIGMA_BERRY_AVAILABLE 0x402D
#define VAR_WONDER_NEWS_COUNTER 0x402E
#define VAR_WONDER_NEWS_STEP_COUNTER 0x402E
#define VAR_FRONTIER_MANIAC_FACILITY 0x402F
#define VAR_FRONTIER_GAMBLER_CHALLENGE 0x4030
@@ -304,4 +304,10 @@
#define SPECIAL_VARS_END 0x8015
// If an overworld trigger uses this pseudo-variable as the trigger check,
// then the script will be run using RunScriptImmediately instead of in the
// global script context. This means it will run faster, but cannot do any
// cutscenes nor call a wait command. Used for weather effects in vanilla.
#define TRIGGER_RUN_IMMEDIATELY 0
#endif // GUARD_CONSTANTS_VARS_H

View File

@@ -11,7 +11,8 @@
#define TRAINER_PIC_HEIGHT 64
#define TRAINER_PIC_SIZE (TRAINER_PIC_WIDTH * TRAINER_PIC_HEIGHT / 2)
#define MAX_TRAINER_PIC_FRAMES 4 // ? Red and Leaf's back pics have 5 frames
// Red and Leaf's back pics have 5 frames, but this is presumably irrelevant in the places this is used.
#define MAX_TRAINER_PIC_FRAMES 4
enum {
BATTLER_AFFINE_NORMAL,

View File

@@ -3,6 +3,28 @@
#include "constants/event_object_movement.h"
// Palette slots for overworld NPCs.
// The same standard set of palettes for overworld objects are normally always loaded at the same
// time while walking around the overworld. The only exceptions are the palettes for the player and
// the "special" NPC, which can be swapped out. This also means that e.g. two "special" NPCs
// with competing palettes cannot be properly loaded at the same time.
enum {
PALSLOT_PLAYER,
PALSLOT_PLAYER_REFLECTION,
PALSLOT_NPC_1,
PALSLOT_NPC_2,
PALSLOT_NPC_3,
PALSLOT_NPC_4,
PALSLOT_NPC_1_REFLECTION,
PALSLOT_NPC_2_REFLECTION,
PALSLOT_NPC_3_REFLECTION,
PALSLOT_NPC_4_REFLECTION,
PALSLOT_NPC_SPECIAL,
PALSLOT_NPC_SPECIAL_REFLECTION,
OBJ_PALSLOT_COUNT
// the remaining sprite palette slots (12-15) are used by field effects, the interface, etc.
};
enum SpinnerRunnerFollowPatterns
{
RUNFOLLOW_ANY,

View File

@@ -19,6 +19,8 @@ enum {
PALTAG_WEATHER_2
};
#define NUM_WEATHER_COLOR_MAPS 19
struct Weather
{
union
@@ -39,12 +41,12 @@ struct Weather
struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
} s2;
} sprites;
u8 gammaShifts[19][32];
u8 altGammaShifts[19][32];
s8 gammaIndex;
s8 gammaTargetIndex;
u8 gammaStepDelay;
u8 gammaStepFrameCounter;
u8 darkenedContrastColorMaps[NUM_WEATHER_COLOR_MAPS][32];
u8 contrastColorMaps[NUM_WEATHER_COLOR_MAPS][32];
s8 colorMapIndex;
s8 targetColorMapIndex;
u8 colorMapStepDelay;
u8 colorMapStepCounter;
u16 fadeDestColor;
u8 palProcessingState;
u8 fadeScreenCounter;
@@ -59,7 +61,7 @@ struct Weather
u8 weatherGfxLoaded;
bool8 weatherChangeComplete;
u8 weatherPicSpritePalIndex;
u8 altGammaSpritePalIndex;
u8 contrastColorMapSpritePalIndex;
// Rain
u16 rainSpriteVisibleCounter;
u8 curRainSpriteIndex;
@@ -75,12 +77,12 @@ struct Weather
u8 snowflakeSpriteCount;
u8 targetSnowflakeSpriteCount;
// Thunderstorm
u16 thunderDelay;
u16 thunderCounter;
u16 thunderTimer; // general-purpose timer for state transitions
u16 thunderSETimer; // timer for thunder sound effect
bool8 thunderAllowEnd;
bool8 thunderSkipShort;
u8 thunderShortRetries;
bool8 thunderTriggered;
bool8 thunderLongBolt; // true if this cycle will end in a long lightning bolt
u8 thunderShortBolts; // the number of short bolts this cycle
bool8 thunderEnqueued;
// Horizontal fog
u16 fogHScrollPosX;
u16 fogHScrollCounter;
@@ -146,12 +148,12 @@ void StartWeather(void);
void SetNextWeather(u8 weather);
void SetCurrentAndNextWeather(u8 weather);
void SetCurrentAndNextWeatherNoDelay(u8 weather);
void ApplyWeatherGammaShiftIfIdle(s8 gammaIndex);
void ApplyWeatherGammaShiftIfIdle_Gradual(u8 gammaIndex, u8 gammaTargetIndex, u8 gammaStepDelay);
void ApplyWeatherColorMapIfIdle(s8 colorMapIndex);
void ApplyWeatherColorMapIfIdle_Gradual(u8 colorMapIndex, u8 targetColorMapIndex, u8 colorMapStepDelay);
void FadeScreen(u8 mode, s8 delay);
bool8 IsWeatherNotFadingIn(void);
void UpdateSpritePaletteWithWeather(u8 spritePaletteIndex);
void ApplyWeatherGammaShiftToPal(u8 paletteIndex);
void ApplyWeatherColorMapToPal(u8 paletteIndex);
void LoadCustomWeatherSpritePalette(const u16 *palette);
void ResetDroughtWeatherPaletteLoading(void);
bool8 LoadDroughtWeatherPalettes(void);

View File

@@ -9,6 +9,8 @@
#define NUM_PALS_TOTAL 13
#define MAX_MAP_DATA_SIZE 10240
#define NUM_TILES_PER_METATILE 8
// Map coordinates are offset by 7 when using the map
// buffer because it needs to load sufficient border
// metatiles to fill the player's view (the player has

View File

@@ -78,4 +78,10 @@
#define TOTAL_OBJ_TILE_COUNT 1024
#define PLTT_SIZEOF(n) ((n) * sizeof(u16))
#define PLTT_SIZE_4BPP PLTT_SIZEOF(16)
#define PLTT_SIZE_8BPP PLTT_SIZEOF(256)
#define PLTT_OFFSET_4BPP(n) ((n) * PLTT_SIZE_4BPP)
#endif // GUARD_GBA_DEFINES_H

View File

@@ -11,6 +11,7 @@
#ifdef NDEBUG
#define DebugPrintf(pBuf, ...)
#define DebugPrintfLevel(level, pBuf, ...)
#define MgbaOpen()
#define MgbaClose()
#define AGBPrintInit()
@@ -29,18 +30,21 @@ void AGBPrintInit(void);
#if (LOG_HANDLER == LOG_HANDLER_MGBA_PRINT)
#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, __VA_ARGS__)
#define DebugPrintf(pBuf, ...) MgbaPrintf(MGBA_LOG_INFO, pBuf, ## __VA_ARGS__)
#define DebugAssert(pFile, nLine, pExpression, nStopProgram) MgbaAssert(pFile, nLine, pExpression, nStopProgram)
#define DebugPrintfLevel(level, pBuf, ...) MgbaPrintf(level, pBuf, ## __VA_ARGS__)
#elif (LOG_HANDLER == LOG_HANDLER_NOCASH_PRINT)
#define DebugPrintf(pBuf, ...) NoCashGBAPrintf(pBuf, __VA_ARGS__)
#define DebugPrintf(pBuf, ...) NoCashGBAPrintf(pBuf, ## __VA_ARGS__)
#define DebugAssert(pFile, nLine, pExpression, nStopProgram) NoCashGBAAssert(pFile, nLine, pExpression, nStopProgram)
#define DebugPrintfLevel(level, pBuf, ...) NoCashGBAPrintf(pBuf, ## __VA_ARGS__)
#else // Default to AGBPrint
#define DebugPrintf(pBuf, ...) AGBPrintf(const char *pBuf, ...)
#define DebugPrintf(pBuf, ...) AGBPrintf(pBuf, ## __VA_ARGS__)
#define DebugAssert(pFile, nLine, pExpression, nStopProgram) AGBAssert(pFile, nLine, pExpression, nStopProgram)
#define DebugPrintfLevel(level, pBuf, ...) AGBPrintf(pBuf, ## __VA_ARGS__)
#endif
#endif

View File

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

View File

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

View File

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

View File

@@ -246,9 +246,11 @@ struct ApprenticeMon
struct Apprentice
{
u8 id:5;
u8 lvlMode:2; // + 1
u8 lvlMode:2;
//u8 padding1:1;
u8 numQuestions;
u8 number;
//u8 padding2;
struct ApprenticeMon party[MULTI_PARTY_SIZE];
u16 speechWon[EASY_CHAT_BATTLE_WORDS_COUNT];
u8 playerId[TRAINER_ID_LENGTH];
@@ -296,6 +298,7 @@ struct EmeraldBattleTowerRecord
/*0x28*/ u16 speechLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x34*/ struct BattleTowerPokemon party[MAX_FRONTIER_PARTY_SIZE];
/*0xE4*/ u8 language;
/*0xE7*/ //u8 padding[3];
/*0xE8*/ u32 checksum;
};
@@ -328,14 +331,17 @@ struct DomeMonData
u16 moves[MAX_MON_MOVES];
u8 evs[NUM_STATS];
u8 nature;
//u8 padding;
};
struct RentalMon
{
u16 monId;
//u8 padding1[2];
u32 personality;
u8 ivs;
u8 abilityNum;
//u8 padding2[2];
};
struct BattleDomeTrainer
@@ -357,8 +363,9 @@ struct BattleFrontier
/*0xBEC*/ struct BattleTowerEReaderTrainer ereaderTrainer;
/*0xCA8*/ u8 challengeStatus;
/*0xCA9*/ u8 lvlMode:2;
/*0xCA9*/ u8 challengePaused:1;
/*0xCA9*/ u8 disableRecordBattle:1;
u8 challengePaused:1;
u8 disableRecordBattle:1;
//u8 padding1:4;
/*0xCAA*/ u16 selectedPartyMons[MAX_FRONTIER_PARTY_SIZE];
/*0xCB2*/ u16 curChallengeBattleNum; // Battle number / room number (Pike) / floor number (Pyramid)
/*0xCB4*/ u16 trainerIds[20];
@@ -402,16 +409,19 @@ struct BattleFrontier
/*0xE08*/ u16 pikeRecordStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE0C*/ u16 pikeTotalStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE10*/ u8 pikeHintedRoomIndex:3;
/*0xE10*/ u8 pikeHintedRoomType:4;
/*0xE10*/ u8 pikeHealingRoomsDisabled:1;
u8 pikeHintedRoomType:4;
u8 pikeHealingRoomsDisabled:1;
/*0xE11*/ //u8 padding2;
/*0xE12*/ u16 pikeHeldItemsBackup[FRONTIER_PARTY_SIZE];
/*0xE18*/ u16 pyramidPrize;
/*0xE1A*/ u16 pyramidWinStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE1E*/ u16 pyramidRecordStreaks[FRONTIER_LVL_MODE_COUNT];
/*0xE22*/ u16 pyramidRandoms[4];
/*0xE2A*/ u8 pyramidTrainerFlags; // 1 bit for each trainer (MAX_PYRAMID_TRAINERS)
/*0xE2B*/ //u8 padding3;
/*0xE2C*/ struct PyramidBag pyramidBag;
/*0xE68*/ u8 pyramidLightRadius;
/*0xE69*/ //u8 padding4;
/*0xE6A*/ u16 verdanturfTentPrize;
/*0xE6C*/ u16 fallarborTentPrize;
/*0xE6E*/ u16 slateportTentPrize;
@@ -436,6 +446,7 @@ struct ApprenticeQuestion
u8 monId: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 padding;
u16 data; // used both as an itemId and a moveId
};
@@ -446,9 +457,11 @@ struct PlayersApprentice
/*0xB1*/ u8 questionsAnswered:4;
/*0xB1*/ u8 leadMonId:2;
/*0xB2*/ u8 party:3;
/*0xB2*/ u8 saveId:2;
u8 saveId:2;
//u8 padding1:3;
/*0xB3*/ u8 unused;
/*0xB4*/ u8 speciesIds[MULTI_PARTY_SIZE];
/*0xB7*/ //u8 padding2;
/*0xB8*/ struct ApprenticeQuestion questions[APPRENTICE_MAX_QUESTIONS];
};
@@ -458,6 +471,7 @@ struct RankingHall1P
u16 winStreak;
u8 name[PLAYER_NAME_LENGTH + 1];
u8 language;
//u8 padding;
};
struct RankingHall2P
@@ -468,6 +482,7 @@ struct RankingHall2P
u8 name1[PLAYER_NAME_LENGTH + 1];
u8 name2[PLAYER_NAME_LENGTH + 1];
u8 language;
//u8 padding;
};
struct SaveBlock2
@@ -487,6 +502,8 @@ struct SaveBlock2
u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET]
u16 optionsBattleSceneOff:1; // whether battle animations are disabled
u16 regionMapZoom:1; // whether the map is zoomed in
//u16 padding1:4;
//u16 padding2;
/*0x18*/ struct Pokedex pokedex;
/*0x90*/ u8 filler_90[0x8];
/*0x98*/ struct Time localTimeOffset;
@@ -531,6 +548,7 @@ struct SecretBase
/*0x1AAD*/ u8 unused;
/*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE];
/*0x1ABE*/ u8 decorationPositions[DECOR_MAX_SECRET_BASE];
/*0x1ACE*/ //u8 padding[2];
/*0x1AD0*/ struct SecretBaseParty party;
};
@@ -545,6 +563,7 @@ struct WarpData
s8 mapGroup;
s8 mapNum;
s8 warpId;
//u8 padding;
s16 x, y;
};
@@ -589,6 +608,7 @@ struct RamScriptData
u8 mapNum;
u8 objectId;
u8 script[995];
//u8 padding;
};
struct RamScript
@@ -603,6 +623,7 @@ struct DewfordTrend
u16 trendiness:7;
u16 maxTrendiness:7;
u16 gainingTrendiness:1;
//u16 padding:1;
u16 rand;
u16 words[2];
}; /*size = 0x8*/
@@ -615,6 +636,7 @@ struct MauvilleManCommon
struct MauvilleManBard
{
/*0x00*/ u8 id;
/*0x01*/ //u8 padding1;
/*0x02*/ u16 songLyrics[BARD_SONG_LENGTH];
/*0x0E*/ u16 temporaryLyrics[BARD_SONG_LENGTH];
/*0x1A*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
@@ -622,6 +644,7 @@ struct MauvilleManBard
/*0x25*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x29*/ bool8 hasChangedSong;
/*0x2A*/ u8 language;
/*0x2B*/ //u8 padding2;
}; /*size = 0x2C*/
struct MauvilleManStoryteller
@@ -640,9 +663,11 @@ struct MauvilleManGiddy
/*0x00*/ u8 id;
/*0x01*/ u8 taleCounter;
/*0x02*/ u8 questionNum;
/*0x03*/ //u8 padding1;
/*0x04*/ u16 randomWords[GIDDY_MAX_TALES];
/*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS];
/*0x20*/ u8 language;
/*0x21*/ //u8 padding2;
}; /*size = 0x2C*/
struct MauvilleManHipster
@@ -687,6 +712,7 @@ struct LinkBattleRecords
{
struct LinkBattleRecord entries[LINK_B_RECORDS_COUNT];
u8 languages[LINK_B_RECORDS_COUNT];
//u8 padding;
};
struct RecordMixingGiftData
@@ -712,6 +738,7 @@ struct ContestWinner
u8 monName[POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 contestRank;
//u8 padding;
};
struct Mail
@@ -744,6 +771,7 @@ struct DayCare
struct DaycareMon mons[DAYCARE_MON_COUNT];
u32 offspringPersonality;
u8 stepCounter;
//u8 padding[3];
};
struct LilycoveLadyQuiz
@@ -756,10 +784,10 @@ struct LilycoveLadyQuiz
/*0x018*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x020*/ u16 playerTrainerId[TRAINER_ID_LENGTH];
/*0x028*/ u16 prize;
/*0x02a*/ bool8 waitingForChallenger;
/*0x02b*/ u8 questionId;
/*0x02c*/ u8 prevQuestionId;
/*0x02d*/ u8 language;
/*0x02A*/ bool8 waitingForChallenger;
/*0x02B*/ u8 questionId;
/*0x02C*/ u8 prevQuestionId;
/*0x02D*/ u8 language;
};
struct LilycoveLadyFavor
@@ -769,10 +797,12 @@ struct LilycoveLadyFavor
/*0x002*/ bool8 likedItem;
/*0x003*/ u8 numItemsGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 favorId;
/*0x00e*/ u16 itemId;
/*0x00C*/ u8 favorId;
/*0x00D*/ //u8 padding1;
/*0x00E*/ u16 itemId;
/*0x010*/ u16 bestItem;
/*0x012*/ u8 language;
/*0x013*/ //u8 padding2;
};
struct LilycoveLadyContest
@@ -782,9 +812,9 @@ struct LilycoveLadyContest
/*0x002*/ u8 numGoodPokeblocksGiven;
/*0x003*/ u8 numOtherPokeblocksGiven;
/*0x004*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x00c*/ u8 maxSheen;
/*0x00d*/ u8 category;
/*0x00e*/ u8 language;
/*0x00C*/ u8 maxSheen;
/*0x00D*/ u8 category;
/*0x00E*/ u8 language;
};
typedef union // 3b58
@@ -793,7 +823,7 @@ typedef union // 3b58
struct LilycoveLadyFavor favor;
struct LilycoveLadyContest contest;
u8 id;
u8 pad[0x40];
u8 filler[0x40];
} LilycoveLady;
struct WaldaPhrase
@@ -803,6 +833,7 @@ struct WaldaPhrase
u8 iconId;
u8 patternId;
bool8 patternUnlocked;
//u8 padding;
};
struct TrainerNameRecord
@@ -818,20 +849,22 @@ struct TrainerHillSave
/*0x3D6C*/ u8 unk_3D6C;
/*0x3D6D*/ u8 unused;
/*0x3D6E*/ u16 receivedPrize:1;
/*0x3D6E*/ u16 checkedFinalTime:1;
/*0x3D6E*/ u16 spokeToOwner:1;
/*0x3D6E*/ u16 hasLost:1;
/*0x3D6E*/ u16 maybeECardScanDuringChallenge:1;
/*0x3D6E*/ u16 field_3D6E_0f:1;
/*0x3D6E*/ u16 mode:2; // HILL_MODE_*
u16 checkedFinalTime:1;
u16 spokeToOwner:1;
u16 hasLost:1;
u16 maybeECardScanDuringChallenge:1;
u16 field_3D6E_0f:1;
u16 mode:2; // HILL_MODE_*
//u16 padding:8;
};
struct WonderNewsMetadata
{
u8 newsType:2;
u8 sentCounter:3;
u8 getCounter:3;
u8 rand;
u8 sentRewardCounter:3;
u8 rewardCounter:3;
u8 berry;
//u8 padding[2];
};
struct WonderNews
@@ -857,6 +890,7 @@ struct WonderCard
u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH];
u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH];
u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH];
//u8 padding[2];
};
struct WonderCardMetadata
@@ -903,7 +937,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 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 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;
@@ -939,9 +973,11 @@ struct SaveBlock1
/*0x2E*/ u8 weather;
/*0x2F*/ u8 weatherCycleStage;
/*0x30*/ u8 flashLevel;
/*0x31*/ //u8 padding1;
/*0x32*/ u16 mapLayoutId;
/*0x34*/ u16 mapView[0x100];
/*0x234*/ u8 playerPartyCount;
/*0x235*/ //u8 padding2[3];
/*0x238*/ struct Pokemon playerParty[PARTY_SIZE];
/*0x490*/ u32 money;
/*0x494*/ u16 coins;
@@ -958,6 +994,7 @@ struct SaveBlock1
/*0x9C2*/ u8 unused_9C2[6];
/*0x9C8*/ u16 trainerRematchStepCounter;
/*0x9CA*/ u8 trainerRematches[MAX_REMATCH_ENTRIES];
/*0xA2E*/ //u8 padding3[2];
/*0xA30*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT];
/*0xC70*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT];
/*0x1270*/ u8 flags[NUM_FLAG_BYTES];
@@ -975,6 +1012,7 @@ struct SaveBlock1
/*0x278E*/ u8 decorationPosters[10];
/*0x2798*/ u8 decorationDolls[40];
/*0x27C0*/ u8 decorationCushions[10];
/*0x27CA*/ //u8 padding4[2];
/*0x27CC*/ TVShow tvShows[TV_SHOWS_COUNT];
/*0x2B50*/ PokeNews pokeNews[POKE_NEWS_COUNT];
/*0x2B90*/ u16 outbreakPokemonSpecies;
@@ -994,6 +1032,7 @@ struct SaveBlock1
/*0x2BD4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2BE0*/ struct Mail mail[MAIL_COUNT];
/*0x2E20*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES]; // bitfield for 33 additional phrases in easy chat system
/*0x2E25*/ //u8 padding5[3];
/*0x2E28*/ OldMan oldMan;
/*0x2e64*/ struct DewfordTrend dewfordTrends[SAVED_TRENDS_COUNT];
/*0x2e90*/ struct ContestWinner contestWinners[NUM_CONTEST_WINNERS]; // see CONTEST_WINNER_*

View File

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

View File

@@ -4949,9 +4949,9 @@ extern const u16 gContestResultsTitle_Tough_Tilemap[];
extern const u16 gContestResultsTitle_Tilemap[];
// Trainer Card.
extern const u16 gHoennTrainerCard0Star_Pal[];
extern const u16 gHoennTrainerCardGreen_Pal[];
extern const u32 gHoennTrainerCard_Gfx[];
extern const u16 gKantoTrainerCard0Star_Pal[];
extern const u16 gKantoTrainerCardBlue_Pal[];
extern const u32 gKantoTrainerCard_Gfx[];
extern const u32 gKantoTrainerCardBg_Tilemap[];
extern const u32 gHoennTrainerCardBack_Tilemap[];

View File

@@ -100,8 +100,8 @@
#define LINKTYPE_BERRY_BLENDER_SETUP 0x4411
#define LINKTYPE_BERRY_BLENDER 0x4422
#define LINKTYPE_MYSTERY_EVENT 0x5501
#define LINKTYPE_UNUSED_EREADER 0x5502 // Unused, inferred from gap
#define LINKTYPE_EREADER 0x5503
#define LINKTYPE_EREADER_FRLG 0x5502
#define LINKTYPE_EREADER_EM 0x5503
#define LINKTYPE_CONTEST_GMODE 0x6601
#define LINKTYPE_CONTEST_EMODE 0x6602

View File

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

View File

@@ -7,12 +7,20 @@
#define LIST_CANCEL -2
#define LIST_HEADER -3
#define LIST_NO_MULTIPLE_SCROLL 0
#define LIST_MULTIPLE_SCROLL_DPAD 1
#define LIST_MULTIPLE_SCROLL_L_R 2
enum {
LIST_NO_MULTIPLE_SCROLL,
LIST_MULTIPLE_SCROLL_DPAD,
LIST_MULTIPLE_SCROLL_L_R,
};
enum
{
enum {
CURSOR_BLACK_ARROW,
CURSOR_INVISIBLE,
CURSOR_RED_OUTLINE,
CURSOR_RED_ARROW,
};
enum {
SCROLL_ARROW_LEFT,
SCROLL_ARROW_RIGHT,
SCROLL_ARROW_UP,

View File

@@ -18,6 +18,13 @@
#define PALETTES_OBJECTS 0xFFFF0000
#define PALETTES_ALL (PALETTES_BG | PALETTES_OBJECTS)
#define PLTT_ID(n) ((n) * 16)
#define BG_PLTT_OFFSET 0x000
#define OBJ_PLTT_OFFSET 0x100
#define BG_PLTT_ID(n) (BG_PLTT_OFFSET + PLTT_ID(n))
#define OBJ_PLTT_ID(n) (OBJ_PLTT_OFFSET + PLTT_ID(n))
#define OBJ_PLTT_ID2(n) (PLTT_ID((n) + 16))
enum
{
FAST_FADE_IN_FROM_WHITE,
@@ -74,4 +81,14 @@ void TintPalette_GrayScale2(u16 *palette, u16 count);
void TintPalette_SepiaTone(u16 *palette, u16 count);
void TintPalette_CustomTone(u16 *palette, u16 count, u16 rTone, u16 gTone, u16 bTone);
static inline void SetBackdropFromColor(u16 color)
{
FillPalette(color, 0, PLTT_SIZEOF(1));
}
static inline void SetBackdropFromPalette(const u16 *palette)
{
LoadPalette(palette, 0, PLTT_SIZEOF(1));
}
#endif // GUARD_PALETTE_H

View File

@@ -287,7 +287,7 @@ struct BattlePokemon
/*0x54*/ u32 otId;
};
struct BaseStats
struct SpeciesInfo
{
/* 0x00 */ u8 baseHP;
/* 0x01 */ u8 baseAttack;
@@ -295,8 +295,7 @@ struct BaseStats
/* 0x03 */ u8 baseSpeed;
/* 0x04 */ u8 baseSpAttack;
/* 0x05 */ u8 baseSpDefense;
/* 0x06 */ u8 type1;
/* 0x07 */ u8 type2;
/* 0x06 */ u8 types[2];
/* 0x08 */ u8 catchRate;
/* 0x09 */ u8 expYield;
/* 0x0A */ u16 evYield_HP:2;
@@ -311,8 +310,7 @@ struct BaseStats
/* 0x11 */ u8 eggCycles;
/* 0x12 */ u8 friendship;
/* 0x13 */ u8 growthRate;
/* 0x14 */ u8 eggGroup1;
/* 0x15 */ u8 eggGroup2;
/* 0x14 */ u8 eggGroups[2];
/* 0x16 */ u8 abilities[2];
/* 0x18 */ u8 safariZoneFleeRate;
/* 0x19 */ u8 bodyColor : 7;
@@ -374,7 +372,7 @@ extern struct SpriteTemplate gMultiuseSpriteTemplate;
extern const struct BattleMove gBattleMoves[];
extern const u8 gFacilityClassToPicIndex[];
extern const u8 gFacilityClassToTrainerClass[];
extern const struct BaseStats gBaseStats[];
extern const struct SpeciesInfo gSpeciesInfo[];
extern const u8 *const gItemEffectTable[];
extern const u32 gExperienceTables[][MAX_LEVEL + 1];
extern const u16 *const gLevelUpLearnsets[];

View File

@@ -1,10 +1,10 @@
#ifndef GUARD_STARTER_CHOOSE_H
#define GUARD_STARTER_CHOOSE_H
extern const u16 gBirchBagGrassPal[2][16];
extern const u16 gBirchBagGrass_Pal[];
extern const u32 gBirchBagTilemap[];
extern const u32 gBirchGrassTilemap[];
extern const u32 gBirchHelpGfx[];
extern const u32 gBirchBagGrass_Gfx[];
extern const u32 gPokeballSelection_Gfx[];
u16 GetStarterPokemon(u16 chosenStarterId);

View File

@@ -6,4 +6,30 @@ void InitSecondaryTilesetAnimation(void);
void UpdateTilesetAnimations(void);
void TransferTilesetAnimsBuffer(void);
void InitTilesetAnim_General(void);
void InitTilesetAnim_Petalburg(void);
void InitTilesetAnim_Rustboro(void);
void InitTilesetAnim_Dewford(void);
void InitTilesetAnim_Slateport(void);
void InitTilesetAnim_Mauville(void);
void InitTilesetAnim_Lavaridge(void);
void InitTilesetAnim_Fallarbor(void);
void InitTilesetAnim_Fortree(void);
void InitTilesetAnim_Lilycove(void);
void InitTilesetAnim_Mossdeep(void);
void InitTilesetAnim_EverGrande(void);
void InitTilesetAnim_Pacifidlog(void);
void InitTilesetAnim_Sootopolis(void);
void InitTilesetAnim_BattleFrontierOutsideWest(void);
void InitTilesetAnim_BattleFrontierOutsideEast(void);
void InitTilesetAnim_Building(void);
void InitTilesetAnim_Cave(void);
void InitTilesetAnim_BikeShop(void);
void InitTilesetAnim_Underwater(void);
void InitTilesetAnim_SootopolisGym(void);
void InitTilesetAnim_MauvilleGym(void);
void InitTilesetAnim_EliteFour(void);
void InitTilesetAnim_BattleDome(void);
void InitTilesetAnim_BattlePyramid(void);
#endif // GUARD_TILESET_ANIMS_H

View File

@@ -1,13 +1,10 @@
#ifndef GUARD_tilesets_H
#define GUARD_tilesets_H
// Exported type declarations
extern const u32 gTilesetTiles_General[];
extern const u16 gTilesetPalettes_General[][16];
// Exported RAM declarations
// Exported ROM declarations
extern struct Tileset *gTilesetPointer_SecretBase;
extern struct Tileset *gTilesetPointer_SecretBaseRedCave;
extern const struct Tileset * const gTilesetPointer_SecretBase;
extern const struct Tileset * const gTilesetPointer_SecretBaseRedCave;
#endif //GUARD_tilesets_H

View File

@@ -8,8 +8,7 @@ enum {
WONDER_NEWS_SENT,
};
void InitSavedWonderNews(void);
void GenerateRandomWonderNews(u32 newsType);
void WonderNews_Reset(void);
void WonderNews_SetReward(u32 newsType);
#endif //GUARD_WONDER_NEWS_H