Sync global

This commit is contained in:
GriffinR
2021-11-19 17:04:04 -05:00
parent cd4462f58c
commit b2c74cae84
40 changed files with 456 additions and 522 deletions
-33
View File
@@ -25,45 +25,12 @@ enum
#define NUM_BERRIES 44 #define NUM_BERRIES 44
extern const u8 *const gBerryTreeObjectEventGraphicsIdTablePointers[NUM_BERRIES];
extern const struct SpriteFrameImage *const gBerryTreePicTablePointers[NUM_BERRIES];
extern const u8 *const gBerryTreePaletteSlotTablePointers[NUM_BERRIES];
void ClearEnigmaBerries(void); void ClearEnigmaBerries(void);
void SetEnigmaBerry(u8 *src); void SetEnigmaBerry(u8 *src);
u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
bool32 IsEnigmaBerryValid(void); bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry); const struct Berry *GetBerryInfo(u8 berry);
struct BerryTree *GetBerryTreeInfo(u8 id);
bool32 ObjectEventInteractionWaterBerryTree(void);
bool8 IsPlayerFacingPlantedBerryTree(void);
bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void);
bool32 BerryTreeGrow(struct BerryTree *tree);
void BerryTreeTimeUpdate(s32 minutes);
void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle);
void RemoveBerryTree(u8 id);
u8 GetBerryTypeByBerryTreeId(u8 id);
u8 GetStageByBerryTreeId(u8);
u8 ItemIdToBerryType(u16 item); u8 ItemIdToBerryType(u16 item);
u16 BerryTypeToItemId(u16 berry);
void GetBerryNameByBerryType(u8 berry, u8 *string); void GetBerryNameByBerryType(u8 berry, u8 *string);
void ResetBerryTreeSparkleFlag(u8 id);
u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree);
u8 GetNumStagesWateredByBerryTreeId(u8 id);
u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water);
u8 CalcBerryYield(struct BerryTree *tree);
u8 GetBerryCountByBerryTreeId(u8 id);
u16 GetStageDurationByBerryType(u8);
void Bag_ChooseBerry(void);
void ObjectEventInteractionGetBerryTreeData(void);
void ObjectEventInteractionPlantBerryTree(void);
void ObjectEventInteractionPickBerryTree(void);
void ObjectEventInteractionRemoveBerryTree(void);
u8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void);
void ClearEnigmaBerries(void);
const struct Berry * GetBerryInfo(u8 berryIdx);
extern const struct Berry gBerries[]; extern const struct Berry gBerries[];
+1
View File
@@ -1077,6 +1077,7 @@
#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e #define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e
#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f #define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f
#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20 #define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20
#define NUM_ADDITIONAL_PHRASES 33
#define EC_POKEMON(mon) ((EC_GROUP_POKEMON << 9) | SPECIES_##mon) #define EC_POKEMON(mon) ((EC_GROUP_POKEMON << 9) | SPECIES_##mon)
#define EC_POKEMON2(mon) ((EC_GROUP_POKEMON_2 << 9) | SPECIES_##mon) #define EC_POKEMON2(mon) ((EC_GROUP_POKEMON_2 << 9) | SPECIES_##mon)
+61 -32
View File
@@ -1,36 +1,77 @@
#ifndef GUARD_CONSTANTS_GLOBAL_H #ifndef GUARD_CONSTANTS_GLOBAL_H
#define GUARD_CONSTANTS_GLOBAL_H #define GUARD_CONSTANTS_GLOBAL_H
// Invalid Versions show as "----------" in Gen 4 and Gen 5's summary screen.
// In Gens 6 and 7, invalid versions instead show "a distant land" in the summary screen.
// In Gen 4 only, migrated Pokemon with Diamond, Pearl, or Platinum's ID show as "----------".
// Gen 5 and up read Diamond, Pearl, or Platinum's ID as "Sinnoh".
// In Gen 4 and up, migrated Pokemon with HeartGold or SoulSilver's ID show the otherwise unused "Johto" string.
#define VERSION_SAPPHIRE 1
#define VERSION_RUBY 2
#define VERSION_EMERALD 3
#define VERSION_FIRE_RED 4
#define VERSION_LEAF_GREEN 5
#define VERSION_HEART_GOLD 7
#define VERSION_SOUL_SILVER 8
#define VERSION_DIAMOND 10
#define VERSION_PEARL 11
#define VERSION_PLATINUM 12
#define VERSION_GAMECUBE 15
#define ITEM_NAME_LENGTH 14 #define LANGUAGE_JAPANESE 1
#define POKEMON_NAME_LENGTH 10 #define LANGUAGE_ENGLISH 2
#define OT_NAME_LENGTH 7 #define LANGUAGE_FRENCH 3
#define MOVE_NAME_LENGTH 12 #define LANGUAGE_ITALIAN 4
#define LANGUAGE_GERMAN 5
#define VERSION_SAPPHIRE 1 #define LANGUAGE_KOREAN 6 // 6 goes unused but the theory is it was meant to be Korean
#define VERSION_RUBY 2 #define LANGUAGE_SPANISH 7
#define VERSION_EMERALD 3 #define NUM_LANGUAGES 7
#define VERSION_FIRE_RED 4
#define VERSION_LEAF_GREEN 5
#define LANGUAGE_JAPANESE 1
#define LANGUAGE_ENGLISH 2
#define LANGUAGE_FRENCH 3
#define LANGUAGE_ITALIAN 4
#define LANGUAGE_GERMAN 5
// 6 goes unused but the theory is it was meant to be Korean
#define LANGUAGE_SPANISH 7
#ifdef ENGLISH #ifdef ENGLISH
#define GAME_LANGUAGE (LANGUAGE_ENGLISH) #define GAME_LANGUAGE (LANGUAGE_ENGLISH)
#endif #endif
#define DAYCARE_MON_COUNT 2
#define PC_ITEMS_COUNT 30 #define PC_ITEMS_COUNT 30
#define BAG_ITEMS_COUNT 42 #define BAG_ITEMS_COUNT 42
#define BAG_KEYITEMS_COUNT 30 #define BAG_KEYITEMS_COUNT 30
#define BAG_POKEBALLS_COUNT 13 #define BAG_POKEBALLS_COUNT 13
#define BAG_TMHM_COUNT 58 #define BAG_TMHM_COUNT 58
#define BAG_BERRIES_COUNT 43 #define BAG_BERRIES_COUNT 43
#define OBJECT_EVENTS_COUNT 16
#define OBJECT_EVENT_TEMPLATES_COUNT 64 #define OBJECT_EVENT_TEMPLATES_COUNT 64
#define MAIL_COUNT (PARTY_SIZE + 10)
#define PC_MAIL_NUM(i) (PARTY_SIZE + (i))
#define DECOR_MAX_SECRET_BASE 16
#define MAX_REMATCH_ENTRIES 100
#define UNION_ROOM_KB_ROW_COUNT 10
#define GIFT_RIBBONS_COUNT 11
#define POCKET_ITEMS 1
#define POCKET_KEY_ITEMS 2
#define POCKET_POKE_BALLS 3
#define POCKET_TM_CASE 4
#define POCKET_BERRY_POUCH 5
#define NUM_BAG_POCKETS 5
// string lengths
#define ITEM_NAME_LENGTH 14
#define POKEMON_NAME_LENGTH 10
#define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9
#define EASY_CHAT_BATTLE_WORDS_COUNT 6
#define MOVE_NAME_LENGTH 12
#define NUM_QUESTIONNAIRE_WORDS 4
#define WONDER_CARD_TEXT_LENGTH 40
#define WONDER_NEWS_TEXT_LENGTH 40
#define WONDER_CARD_BODY_TEXT_LINES 4
#define WONDER_NEWS_BODY_TEXT_LINES 10
#define MAX_STAMP_CARD_STAMPS 7
#define TRAINER_ID_LENGTH 4
#define MAX_MON_MOVES 4
#define PARTY_SIZE 6
#define MULTI_PARTY_SIZE (PARTY_SIZE / 2)
#define QUEST_LOG_SCENE_COUNT 4 #define QUEST_LOG_SCENE_COUNT 4
@@ -43,6 +84,8 @@
#define BARD_SONG_LENGTH 6 #define BARD_SONG_LENGTH 6
#define NUM_STORYTELLER_TALES 4 #define NUM_STORYTELLER_TALES 4
#define NUM_TRADER_ITEMS 4 #define NUM_TRADER_ITEMS 4
#define GIDDY_MAX_TALES 10
#define GIDDY_MAX_QUESTIONS 8
#define OPTIONS_BUTTON_MODE_HELP 0 #define OPTIONS_BUTTON_MODE_HELP 0
#define OPTIONS_BUTTON_MODE_LR 1 #define OPTIONS_BUTTON_MODE_LR 1
@@ -58,20 +101,6 @@
#define OPTIONS_BATTLE_STYLE_SHIFT 0 #define OPTIONS_BATTLE_STYLE_SHIFT 0
#define OPTIONS_BATTLE_STYLE_SET 1 #define OPTIONS_BATTLE_STYLE_SET 1
#define POCKET_ITEMS 1
#define POCKET_KEY_ITEMS 2
#define POCKET_POKE_BALLS 3
#define POCKET_TM_CASE 4
#define POCKET_BERRY_POUCH 5
#define NUM_BAG_POCKETS 5
#define MAX_MON_MOVES 4
#define TRAINER_ID_LENGTH 4
#define PARTY_SIZE 6
#define MULTI_PARTY_SIZE (PARTY_SIZE / 2)
#define DIR_NONE 0 #define DIR_NONE 0
#define DIR_SOUTH 1 #define DIR_SOUTH 1
#define DIR_NORTH 2 #define DIR_NORTH 2
+7 -16
View File
@@ -1,8 +1,6 @@
#ifndef GUARD_GLOBAL_FIELDMAP_H #ifndef GUARD_GLOBAL_FIELDMAP_H
#define GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H
#define OBJECT_EVENTS_COUNT 16
#define METATILE_BEHAVIOR_MASK 0x00FF #define METATILE_BEHAVIOR_MASK 0x00FF
#define METATILE_COLLISION_MASK 0x0C00 #define METATILE_COLLISION_MASK 0x0C00
#define METATILE_ID_MASK 0x03FF #define METATILE_ID_MASK 0x03FF
@@ -63,7 +61,7 @@ struct Tileset
/*0x08*/ void *palettes; /*0x08*/ void *palettes;
/*0x0c*/ void *metatiles; /*0x0c*/ void *metatiles;
/*0x10*/ TilesetCB callback; /*0x10*/ TilesetCB callback;
/*0x14*/ void *metatileAttributes; /*0x14*/ u32 *metatileAttributes;
}; };
struct MapLayout struct MapLayout
@@ -134,7 +132,6 @@ struct BgEvent
u32 isUnderfoot:1; u32 isUnderfoot:1;
} hiddenItemStr; } hiddenItemStr;
u32 hiddenItem; u32 hiddenItem;
u32 secretBaseId;
} bgUnion; } bgUnion;
}; };
@@ -144,7 +141,6 @@ struct MapEvents
u8 warpCount; u8 warpCount;
u8 coordEventCount; u8 coordEventCount;
u8 bgEventCount; u8 bgEventCount;
struct ObjectEventTemplate *objectEvents; struct ObjectEventTemplate *objectEvents;
struct WarpEvent *warps; struct WarpEvent *warps;
struct CoordEvent *coordEvents; struct CoordEvent *coordEvents;
@@ -177,20 +173,15 @@ struct MapHeader
/* 0x15 */ u8 cave; /* 0x15 */ u8 cave;
/* 0x16 */ u8 weather; /* 0x16 */ u8 weather;
/* 0x17 */ u8 mapType; /* 0x17 */ u8 mapType;
// fields correspond to the arguments in the map_header_flags macro
/* 0x18 */ bool8 bikingAllowed; /* 0x18 */ bool8 bikingAllowed;
/* 0x19 */ u8 flags; /* 0x19 */ bool8 allowEscaping:1; // Escape Rope and Dig
bool8 allowRunning:1;
bool8 showMapName:6; // the last 5 bits are unused
/* 0x1A */ s8 floorNum; /* 0x1A */ s8 floorNum;
/* 0x1B */ u8 battleType; /* 0x1B */ u8 battleType;
}; };
// Flags for gMapHeader.flags, as defined in the map_header_flags macro
#define MAP_ALLOW_ESCAPE_ROPE (1 << 0)
#define MAP_ALLOW_RUN (1 << 1)
#define MAP_SHOW_MAP_NAME (1 << 2)
#define UNUSED_MAP_FLAGS (1 << 3 | 1 << 4 | 1 << 5 | 1 << 6 | 1 << 7)
#define SHOW_MAP_NAME_ENABLED ((gMapHeader.flags & (MAP_SHOW_MAP_NAME | UNUSED_MAP_FLAGS)) == MAP_SHOW_MAP_NAME)
struct ObjectEvent struct ObjectEvent
{ {
/*0x00*/ /* 0*/ u32 active:1; /*0x00*/ /* 0*/ u32 active:1;
@@ -319,7 +310,7 @@ enum
COLLISION_STOP_SURFING, COLLISION_STOP_SURFING,
COLLISION_LEDGE_JUMP, COLLISION_LEDGE_JUMP,
COLLISION_PUSHED_BOULDER, COLLISION_PUSHED_BOULDER,
COLLISION_UNKNOWN_WARP_6C_6D_6E_6F, COLLISION_ROTATING_GATE,
COLLISION_WHEELIE_HOP, COLLISION_WHEELIE_HOP,
COLLISION_ISOLATED_VERTICAL_RAIL, COLLISION_ISOLATED_VERTICAL_RAIL,
COLLISION_ISOLATED_HORIZONTAL_RAIL, COLLISION_ISOLATED_HORIZONTAL_RAIL,
@@ -344,7 +335,7 @@ enum
T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary. T_TILE_CENTER, // player is on a frame in which they are centered on a tile during which the player either stops or keeps their momentum and keeps going, changing direction if necessary.
}; };
struct PlayerAvatar /* 0x202E858 */ struct PlayerAvatar
{ {
/*0x00*/ u8 flags; /*0x00*/ u8 flags;
/*0x01*/ u8 transitionFlags; // used to be bike, but it's not that in Emerald and probably isn't here either. maybe transition flags? /*0x01*/ u8 transitionFlags; // used to be bike, but it's not that in Emerald and probably isn't here either. maybe transition flags?
+132 -178
View File
@@ -8,6 +8,7 @@
#include "constants/flags.h" #include "constants/flags.h"
#include "constants/vars.h" #include "constants/vars.h"
#include "constants/species.h" #include "constants/species.h"
#include "constants/easy_chat.h"
// Prevent cross-jump optimization. // Prevent cross-jump optimization.
#define BLOCK_CROSS_JUMP asm(""); #define BLOCK_CROSS_JUMP asm("");
@@ -30,7 +31,10 @@
#define INCBIN_S32 INCBIN #define INCBIN_S32 INCBIN
#endif // IDE support #endif // IDE support
#define NELEMS(array) (sizeof(array) / sizeof((array)[0])) #define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0]))
// Alias of ARRAY_COUNT using GameFreak's name from AgbAssert calls.
#define NELEMS(array) ARRAY_COUNT(array)
#define SWAP(a, b, temp) \ #define SWAP(a, b, temp) \
{ \ { \
@@ -80,6 +84,12 @@
#define SAFE_DIV(a, b) ((a) / (b)) #define SAFE_DIV(a, b) ((a) / (b))
#endif #endif
// Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
// Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
// There are many quirks in the source code which have overarching behavioral differences from // There are many quirks in the source code which have overarching behavioral differences from
// a number of other files. For example, diploma.c seems to declare rodata before each use while // a number of other files. For example, diploma.c seems to declare rodata before each use while
// other files declare out of order and must be at the beginning. There are also a number of // other files declare out of order and must be at the beginning. There are also a number of
@@ -100,23 +110,24 @@
// This macro is required to prevent the compiler from optimizing // This macro is required to prevent the compiler from optimizing
// a dpad up/down check in sub_812CAD8 (fame_checker.c). // a dpad up/down check in sub_812CAD8 (fame_checker.c).
// We suspect it was used globally.
// GameFreak never ceases to amaze.
// TODO: Propagate use of this macro
#define TEST_BUTTON(field, button) ({(field) & (button);}) #define TEST_BUTTON(field, button) ({(field) & (button);})
#define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button) #define JOY_NEW(button) TEST_BUTTON(gMain.newKeys, button)
#define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button) #define JOY_HELD(button) TEST_BUTTON(gMain.heldKeys, button)
#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button) #define JOY_HELD_RAW(button) TEST_BUTTON(gMain.heldKeysRaw, button)
#define JOY_REPT(button) TEST_BUTTON(gMain.newAndRepeatedKeys, button)
extern u8 gStringVar1[]; extern u8 gStringVar1[];
extern u8 gStringVar2[]; extern u8 gStringVar2[];
extern u8 gStringVar3[]; extern u8 gStringVar3[];
extern u8 gStringVar4[]; extern u8 gStringVar4[];
#define ROUND_BITS_TO_BYTES(numBits)(((numBits) / 8) + (((numBits) % 8) ? 1 : 0)) #define DIV_ROUND_UP(val, roundBy)(((val) / (roundBy)) + (((val) % (roundBy)) ? 1 : 0))
#define DEX_FLAGS_NO (ROUND_BITS_TO_BYTES(NUM_SPECIES)) #define ROUND_BITS_TO_BYTES(numBits) DIV_ROUND_UP(numBits, 8)
#define NUM_FLAG_BYTES (ROUND_BITS_TO_BYTES(FLAGS_COUNT))
#define DEX_FLAGS_NO ROUND_BITS_TO_BYTES(NUM_SPECIES)
#define NUM_FLAG_BYTES ROUND_BITS_TO_BYTES(FLAGS_COUNT)
#define NUM_ADDITIONAL_PHRASE_BYTES ROUND_BITS_TO_BYTES(NUM_ADDITIONAL_PHRASES)
struct Coords8 struct Coords8
{ {
@@ -175,13 +186,13 @@ struct Pokedex
/*0x44*/ u8 seen[DEX_FLAGS_NO]; /*0x44*/ u8 seen[DEX_FLAGS_NO];
}; };
struct PokemonJumpResults // possibly used in the game itself? struct PokemonJumpRecords
{ {
u16 jumpsInRow; u16 jumpsInRow;
u16 field2; u16 unused1; // Set to 0, never read
u16 excellentsInRow; u16 excellentsInRow;
u16 field6; u16 gamesWithMaxPlayers;
u32 field8; u32 unused2; // Set to 0, never read
u32 bestJumpScore; u32 bestJumpScore;
}; };
@@ -202,13 +213,11 @@ struct BerryPickingResults // possibly used in the game itself? Size may be wron
struct BerryCrush struct BerryCrush
{ {
u16 berryCrushResults[4]; u16 pressingSpeeds[4]; // For the record with each possible group size, 2-5 players
u32 berryPowderAmount; u32 berryPowderAmount;
u32 unk; u32 unk;
}; };
#define PLAYER_NAME_LENGTH 7
#define LINK_B_RECORDS_COUNT 5 #define LINK_B_RECORDS_COUNT 5
struct LinkBattleRecord struct LinkBattleRecord
@@ -226,6 +235,20 @@ struct LinkBattleRecords
u8 languages[LINK_B_RECORDS_COUNT]; u8 languages[LINK_B_RECORDS_COUNT];
}; };
struct RecordMixingGiftData
{
u8 unk0;
u8 quantity;
u16 itemId;
u8 filler4[8];
};
struct RecordMixingGift
{
int checksum;
struct RecordMixingGiftData data;
};
#include "constants/game_stat.h" #include "constants/game_stat.h"
#include "global.fieldmap.h" #include "global.fieldmap.h"
#include "global.berry.h" #include "global.berry.h"
@@ -236,9 +259,9 @@ struct BattleTowerRecord // record mixing
/*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100 /*0x00*/ u8 battleTowerLevelType; // 0 = level 50, 1 = level 100
/*0x01*/ u8 trainerClass; /*0x01*/ u8 trainerClass;
/*0x02*/ u16 winStreak; /*0x02*/ u16 winStreak;
/*0x04*/ u8 name[8]; /*0x04*/ u8 name[PLAYER_NAME_LENGTH + 1];
/*0x0C*/ u8 trainerId[4]; /*0x0C*/ u8 trainerId[TRAINER_ID_LENGTH];
/*0x10*/ u16 greeting[6]; /*0x10*/ u16 greeting[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x1C*/ struct BattleTowerPokemon party[3]; /*0x1C*/ struct BattleTowerPokemon party[3];
/*0xA0*/ u32 checksum; /*0xA0*/ u32 checksum;
}; };
@@ -289,7 +312,7 @@ struct SaveBlock2
/*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1]; /*0x000*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x008*/ u8 playerGender; // MALE, FEMALE /*0x008*/ u8 playerGender; // MALE, FEMALE
/*0x009*/ u8 specialSaveWarpFlags; /*0x009*/ u8 specialSaveWarpFlags;
/*0x00A*/ u8 playerTrainerId[4]; /*0x00A*/ u8 playerTrainerId[TRAINER_ID_LENGTH];
/*0x00E*/ u16 playTimeHours; /*0x00E*/ u16 playTimeHours;
/*0x010*/ u8 playTimeMinutes; /*0x010*/ u8 playTimeMinutes;
/*0x011*/ u8 playTimeSeconds; /*0x011*/ u8 playTimeSeconds;
@@ -306,13 +329,13 @@ struct SaveBlock2
/*0x098*/ struct Time localTimeOffset; /*0x098*/ struct Time localTimeOffset;
/*0x0A0*/ struct Time lastBerryTreeUpdate; /*0x0A0*/ struct Time lastBerryTreeUpdate;
/*0x0A8*/ u32 gcnLinkFlags; // Read by Pokemon Colosseum/XD /*0x0A8*/ u32 gcnLinkFlags; // Read by Pokemon Colosseum/XD
/*0x0AC*/ u8 field_AC; /*0x0AC*/ bool8 unkFlag1; // Set TRUE, never read
/*0x0AD*/ u8 field_AD; /*0x0AD*/ bool8 unkFlag2; // Set FALSE, never read
/*0x0B0*/ struct BattleTowerData battleTower; /*0x0B0*/ struct BattleTowerData battleTower;
/*0x898*/ u16 mapView[0x100]; /*0x898*/ u16 mapView[0x100];
/*0xA98*/ struct LinkBattleRecords linkBattleRecords; /*0xA98*/ struct LinkBattleRecords linkBattleRecords;
/*0xAF0*/ struct BerryCrush berryCrush; /*0xAF0*/ struct BerryCrush berryCrush;
/*0xB00*/ struct PokemonJumpResults pokeJump; /*0xB00*/ struct PokemonJumpRecords pokeJump;
/*0xB10*/ struct BerryPickingResults berryPick; /*0xB10*/ struct BerryPickingResults berryPick;
/*0xB20*/ u8 filler_B20[0x400]; /*0xB20*/ u8 filler_B20[0x400];
/*0xF20*/ u32 encryptionKey; /*0xF20*/ u32 encryptionKey;
@@ -323,28 +346,29 @@ extern struct SaveBlock2 *gSaveBlock2Ptr;
struct SecretBaseParty struct SecretBaseParty
{ {
u32 personality[PARTY_SIZE]; u32 personality[PARTY_SIZE];
u16 moves[PARTY_SIZE * 4]; u16 moves[PARTY_SIZE * MAX_MON_MOVES];
u16 species[PARTY_SIZE]; u16 species[PARTY_SIZE];
u16 heldItems[PARTY_SIZE]; u16 heldItems[PARTY_SIZE];
u8 levels[PARTY_SIZE]; u8 levels[PARTY_SIZE];
u8 EVs[PARTY_SIZE]; u8 EVs[PARTY_SIZE];
}; };
// Leftover from R/S, still referenced in the unused function CreateSecretBaseEnemyParty
struct SecretBaseRecord struct SecretBaseRecord
{ {
/*0x1A9C*/ u8 secretBaseId; /*0x1A9C*/ u8 secretBaseId;
/*0x1A9D*/ u8 sbr_field_1_0:4; /*0x1A9D*/ u8 toRegister:4;
/*0x1A9D*/ u8 gender:1; /*0x1A9D*/ u8 gender:1;
/*0x1A9D*/ u8 sbr_field_1_5:1; /*0x1A9D*/ u8 battledOwnerToday:1;
/*0x1A9D*/ u8 sbr_field_1_6:2; /*0x1A9D*/ u8 registryStatus:2;
/*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH]; /*0x1A9E*/ u8 trainerName[PLAYER_NAME_LENGTH];
/*0x1AA5*/ u8 trainerId[4]; // byte 0 is used for determining trainer class /*0x1AA5*/ u8 trainerId[TRAINER_ID_LENGTH]; // byte 0 is used for determining trainer class
/*0x1AA9*/ u8 language; /*0x1AA9*/ u8 language;
/*0x1AAA*/ u16 sbr_field_e; /*0x1AAA*/ u16 numSecretBasesReceived;
/*0x1AAC*/ u8 sbr_field_10; /*0x1AAC*/ u8 numTimesEntered;
/*0x1AAD*/ u8 sbr_field_11; /*0x1AAD*/ u8 unused;
/*0x1AAE*/ u8 decorations[16]; /*0x1AAE*/ u8 decorations[DECOR_MAX_SECRET_BASE];
/*0x1ABE*/ u8 decorationPos[16]; /*0x1ABE*/ u8 decorationPos[DECOR_MAX_SECRET_BASE];
/*0x1AD0*/ struct SecretBaseParty party; /*0x1AD0*/ struct SecretBaseParty party;
}; };
@@ -405,24 +429,16 @@ struct RamScript
struct RamScriptData data; struct RamScriptData data;
}; };
struct EasyChatPair // Leftover from R/S
struct DewfordTrend
{ {
u16 unk0_0:7; u16 trendiness:7;
u16 unk0_7:7; u16 maxTrendiness:7;
u16 unk1_6:1; u16 gainingTrendiness:1;
u16 unk2; u16 rand;
u16 words[2]; u16 words[2];
}; /*size = 0x8*/ }; /*size = 0x8*/
struct MailStruct
{
/*0x00*/ u16 words[9];
/*0x12*/ u8 playerName[8];
/*0x1A*/ u8 trainerId[4];
/*0x1E*/ u16 species;
/*0x20*/ u16 itemId;
};
struct MauvilleManCommon struct MauvilleManCommon
{ {
u8 id; u8 id;
@@ -456,8 +472,8 @@ struct MauvilleManGiddy
/*0x00*/ u8 id; /*0x00*/ u8 id;
/*0x01*/ u8 taleCounter; /*0x01*/ u8 taleCounter;
/*0x02*/ u8 questionNum; /*0x02*/ u8 questionNum;
/*0x04*/ u16 randomWords[10]; /*0x04*/ u16 randomWords[GIDDY_MAX_TALES];
/*0x18*/ u8 questionList[8]; /*0x18*/ u8 questionList[GIDDY_MAX_QUESTIONS];
/*0x20*/ u8 language; /*0x20*/ u8 language;
}; /*size = 0x2C*/ }; /*size = 0x2C*/
@@ -488,49 +504,19 @@ typedef union OldMan
u8 filler[0x40]; u8 filler[0x40];
} OldMan; } OldMan;
struct RecordMixing_UnknownStructSub struct Mail
{ {
u32 unk0; /*0x00*/ u16 words[MAIL_WORDS_COUNT];
u8 data[0x34]; /*0x12*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
//u8 data[0x38]; /*0x1A*/ u8 trainerId[TRAINER_ID_LENGTH];
}; /*0x1E*/ u16 species;
/*0x20*/ u16 itemId;
struct RecordMixing_UnknownStruct
{
struct RecordMixing_UnknownStructSub data[2];
u32 unk70;
u16 unk74[0x2];
};
struct RecordMixingGiftData
{
u8 unk0;
u8 quantity;
u16 itemId;
u8 filler4[8];
};
struct RecordMixingGift
{
int checksum;
struct RecordMixingGiftData data;
};
struct ContestWinner
{
u32 personality;
u32 trainerId;
u16 species;
u8 contestCategory;
u8 monName[11];
u8 trainerName[8];
u8 contestRank;
}; };
struct DayCareMail struct DayCareMail
{ {
struct MailStruct message; struct Mail message;
u8 OT_name[OT_NAME_LENGTH + 1]; u8 OT_name[PLAYER_NAME_LENGTH + 1];
u8 monName[POKEMON_NAME_LENGTH + 1]; u8 monName[POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4; u8 gameLanguage:4;
u8 monLanguage:4; u8 monLanguage:4;
@@ -543,8 +529,6 @@ struct DaycareMon
u32 steps; u32 steps;
}; };
#define DAYCARE_MON_COUNT 2
struct DayCare struct DayCare
{ {
struct DaycareMon mons[DAYCARE_MON_COUNT]; struct DaycareMon mons[DAYCARE_MON_COUNT];
@@ -552,6 +536,7 @@ struct DayCare
u8 stepCounter; u8 stepCounter;
}; };
// Leftover from R/S, referenced in unused function InitDaycareMailRecordMixing
struct RecordMixingDayCareMail struct RecordMixingDayCareMail
{ {
struct DayCareMail mail[DAYCARE_MON_COUNT]; struct DayCareMail mail[DAYCARE_MON_COUNT];
@@ -559,14 +544,6 @@ struct RecordMixingDayCareMail
bool16 holdsItem[DAYCARE_MON_COUNT]; bool16 holdsItem[DAYCARE_MON_COUNT];
}; };
struct MENewsJisanStruct
{
u8 unk_0_0:2;
u8 unk_0_2:3;
u8 unk_0_5:3;
u8 berry;
};
struct QuestLogNPCData struct QuestLogNPCData
{ {
u32 x:8; u32 x:8;
@@ -577,10 +554,6 @@ struct QuestLogNPCData
u32 movementType:8; u32 movementType:8;
}; };
#define BERRY_TREES_COUNT 128
#define MAIL_COUNT (PARTY_SIZE + 10)
#define PC_MAIL_NUM(i) (PARTY_SIZE + (i))
struct QuestLogObjectEvent struct QuestLogObjectEvent
{ {
/*0x00*/ u8 active:1; /*0x00*/ u8 active:1;
@@ -646,70 +619,59 @@ struct FameCheckerSaveData
u16 unk_0_E:2; u16 unk_0_E:2;
}; };
#define NUM_EASY_CHAT_EXTRA_PHRASES 33 struct WonderNewsMetadata
#define EASY_CHAT_EXTRA_PHRASES_SIZE ((NUM_EASY_CHAT_EXTRA_PHRASES >> 3) + (NUM_EASY_CHAT_EXTRA_PHRASES % 8 ? 1 : 0)) {
u8 unk_0_0:2;
u8 unk_0_2:3;
u8 unk_0_5:3;
u8 berry;
};
struct MEWonderNewsData struct WonderNews
{ {
u16 newsId; u16 newsId;
u8 shareState; u8 sendType; // SEND_TYPE_*
u8 unk_03; u8 bgType;
u8 unk_04[40]; u8 titleText[WONDER_NEWS_TEXT_LENGTH];
u8 unk_2C[10][40]; u8 bodyText[WONDER_NEWS_BODY_TEXT_LINES][WONDER_NEWS_TEXT_LENGTH];
}; };
struct MEWonderNewsStruct struct WonderCard
{ {
u32 crc; u16 flagId; // Event flag (sReceivedGiftFlags) + WONDER_CARD_FLAG_OFFSET
struct MEWonderNewsData data; u16 iconSpecies;
u32 idNumber;
u8 type:2; // CARD_TYPE_*
u8 bgType:4;
u8 sendType:2; // SEND_TYPE_*
u8 maxStamps;
u8 titleText[WONDER_CARD_TEXT_LENGTH];
u8 subtitleText[WONDER_CARD_TEXT_LENGTH];
u8 bodyText[WONDER_CARD_BODY_TEXT_LINES][WONDER_CARD_TEXT_LENGTH];
u8 footerLine1Text[WONDER_CARD_TEXT_LENGTH];
u8 footerLine2Text[WONDER_CARD_TEXT_LENGTH];
}; };
struct MEWonderCardData struct WonderCardMetadata
{ {
u16 cardId; u16 battlesWon;
u16 unk_02; u16 battlesLost;
u32 unk_04; u16 numTrades;
u8 unk_08_0:2; u16 iconSpecies;
u8 unk_08_2:4; u16 stampData[2][MAX_STAMP_CARD_STAMPS]; // First element is STAMP_SPECIES, second is STAMP_ID
u8 shareState:2;
u8 recvMonCapacity;
u8 unk_0A[40];
u8 unk_32[40];
u8 unk_5A[4][40];
u8 unk_FA[40];
u8 unk_122[40];
}; };
struct MEWonderCardStruct struct MysteryGiftSave
{ {
u32 crc; u32 newsCrc;
struct MEWonderCardData data; struct WonderNews news;
}; u32 cardCrc;
struct WonderCard card;
struct MEventBuffer_3430_Sub u32 cardMetadataCrc;
{ struct WonderCardMetadata cardMetadata;
u16 linkWins; u16 questionnaireWords[NUM_QUESTIONNAIRE_WORDS];
u16 linkLosses; struct WonderNewsMetadata newsMetadata;
u16 linkTrades; u32 trainerIds[2][5]; // Saved ids for 10 trainers, 5 each for battles and trades
u16 unk_06;
u16 distributedMons[2][7]; // [0][x] = species
// [1][x] = ???
};
struct MEventBuffer_3430
{
u32 crc;
struct MEventBuffer_3430_Sub data;
};
struct MEventBuffers
{
/*0x000 0x3120*/ struct MEWonderNewsStruct menews;
/*0x1c0 0x32e0*/ struct MEWonderCardStruct mecard;
/*0x310 0x3430*/ struct MEventBuffer_3430 buffer_310;
/*0x338 0x3458*/ u16 ec_profile_maybe[4];
/*0x340 0x3460*/ struct MENewsJisanStruct me_jisan;
/*0x344 0x3464*/ u32 unk_344[2][5];
}; // 0x36C 0x348C }; // 0x36C 0x348C
struct TrainerTower struct TrainerTower
@@ -726,12 +688,6 @@ struct TrainerTower
bool8 validated:1; bool8 validated:1;
}; };
struct TrainerRematchState
{
u16 stepCounter;
u8 rematches[100];
};
struct TrainerNameRecord struct TrainerNameRecord
{ {
u32 trainerId; u32 trainerId;
@@ -784,8 +740,6 @@ struct ExternalEventFlags
} __attribute__((packed));/*size = 0x15*/ } __attribute__((packed));/*size = 0x15*/
#define UNION_ROOM_KB_ROW_COUNT 10
struct SaveBlock1 struct SaveBlock1
{ {
/*0x0000*/ struct Coords16 pos; /*0x0000*/ struct Coords16 pos;
@@ -812,41 +766,41 @@ struct SaveBlock1
/*0x054c*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT]; /*0x054c*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT];
/*0x05F8*/ u8 seen1[DEX_FLAGS_NO]; /*0x05F8*/ u8 seen1[DEX_FLAGS_NO];
/*0x062C*/ u16 berryBlenderRecords[3]; // unused /*0x062C*/ u16 berryBlenderRecords[3]; // unused
/*0x0632*/ u8 field_632[6]; // unused? /*0x0632*/ u8 unused_632[6];
/*0x0638*/ u16 trainerRematchStepCounter; /*0x0638*/ u16 trainerRematchStepCounter;
/*0x063A*/ u8 ALIGNED(2) trainerRematches[100]; /*0x063A*/ u8 ALIGNED(2) trainerRematches[MAX_REMATCH_ENTRIES];
/*0x06A0*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT]; /*0x06A0*/ struct ObjectEvent objectEvents[OBJECT_EVENTS_COUNT];
/*0x08E0*/ struct ObjectEventTemplate objectEventTemplates[64]; /*0x08E0*/ struct ObjectEventTemplate objectEventTemplates[OBJECT_EVENT_TEMPLATES_COUNT];
/*0x0EE0*/ u8 flags[NUM_FLAG_BYTES]; /*0x0EE0*/ u8 flags[NUM_FLAG_BYTES];
/*0x1000*/ u16 vars[VARS_COUNT]; /*0x1000*/ u16 vars[VARS_COUNT];
/*0x1200*/ u32 gameStats[NUM_GAME_STATS]; /*0x1200*/ u32 gameStats[NUM_GAME_STATS];
/*0x1300*/ struct QuestLog questLog[QUEST_LOG_SCENE_COUNT]; /*0x1300*/ struct QuestLog questLog[QUEST_LOG_SCENE_COUNT];
/*0x2CA0*/ u16 easyChatProfile[6]; /*0x2CA0*/ u16 easyChatProfile[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2CAC*/ u16 easyChatBattleStart[6]; /*0x2CAC*/ u16 easyChatBattleStart[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2CB8*/ u16 easyChatBattleWon[6]; /*0x2CB8*/ u16 easyChatBattleWon[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2CC4*/ u16 easyChatBattleLost[6]; /*0x2CC4*/ u16 easyChatBattleLost[EASY_CHAT_BATTLE_WORDS_COUNT];
/*0x2CD0*/ struct MailStruct mail[MAIL_COUNT]; /*0x2CD0*/ struct Mail mail[MAIL_COUNT];
/*0x2F10*/ u8 additionalPhrases[EASY_CHAT_EXTRA_PHRASES_SIZE]; /*0x2F10*/ u8 additionalPhrases[NUM_ADDITIONAL_PHRASE_BYTES];
/*0x2F18*/ OldMan oldMan; // unused /*0x2F18*/ OldMan oldMan; // unused
/*0x2F54*/ struct EasyChatPair easyChatPairs[5]; // unused /*0x2F54*/ struct DewfordTrend dewfordTrends[5]; // unused
/*0x2F80*/ struct DayCare daycare; /*0x2F80*/ struct DayCare daycare;
/*0x309C*/ u8 giftRibbons[11]; /*0x309C*/ u8 giftRibbons[GIFT_RIBBONS_COUNT];
/*0x30A7*/ struct ExternalEventData externalEventData; /*0x30A7*/ struct ExternalEventData externalEventData;
/*0x30BB*/ struct ExternalEventFlags externalEventFlags; /*0x30BB*/ struct ExternalEventFlags externalEventFlags;
/*0x30D0*/ struct Roamer roamer; /*0x30D0*/ struct Roamer roamer;
/*0x30EC*/ struct EnigmaBerry enigmaBerry; /*0x30EC*/ struct EnigmaBerry enigmaBerry;
/*0x3120*/ struct MEventBuffers mysteryEventBuffers; /*0x3120*/ struct MysteryGiftSave mysteryGift;
/*0x348C*/ u8 filler_348C[400]; /*0x348C*/ u8 unused_348C[400];
/*0x361C*/ struct RamScript ramScript; /*0x361C*/ struct RamScript ramScript;
/*0x3A08*/ u8 filler3A08[16]; /*0x3A08*/ struct RecordMixingGift recordMixingGift; // unused
/*0x3A18*/ u8 seen2[DEX_FLAGS_NO]; /*0x3A18*/ u8 seen2[DEX_FLAGS_NO];
/*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1]; /*0x3A4C*/ u8 rivalName[PLAYER_NAME_LENGTH + 1];
/*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS]; /*0x3A54*/ struct FameCheckerSaveData fameChecker[NUM_FAMECHECKER_PERSONS];
/*0x3A94*/ u8 filler3A94[0x40]; /*0x3A94*/ u8 unused_3A94[64];
/*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21]; /*0x3AD4*/ u8 registeredTexts[UNION_ROOM_KB_ROW_COUNT][21];
/*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20]; /*0x3BA8*/ struct TrainerNameRecord trainerNameRecords[20];
/*0x3C98*/ struct DaycareMon route5DayCareMon; /*0x3C98*/ struct DaycareMon route5DayCareMon;
/*0x3D24*/ u8 filler3D24[0x10]; /*0x3D24*/ u8 unused_3D24[16];
/*0x3D34*/ u32 towerChallengeId; /*0x3D34*/ u32 towerChallengeId;
/*0x3D38*/ struct TrainerTower trainerTower[NUM_TOWER_CHALLENGE_TYPES]; /*0x3D38*/ struct TrainerTower trainerTower[NUM_TOWER_CHALLENGE_TYPES];
}; // size: 0x3D68 }; // size: 0x3D68
+1 -1
View File
@@ -22,6 +22,6 @@
#define ITEM_TO_MAIL(itemId) (itemId - FIRST_MAIL_IDX) #define ITEM_TO_MAIL(itemId) (itemId - FIRST_MAIL_IDX)
void ReadMail(struct MailStruct * mail, void (*savedCallback)(void), bool8 messageExists); void ReadMail(struct Mail * mail, void (*savedCallback)(void), bool8 messageExists);
#endif // GUARD_MAIL_H #endif // GUARD_MAIL_H
+2 -8
View File
@@ -3,19 +3,13 @@
#include "global.h" #include "global.h"
// Exported type declarations
// Exported RAM declarations
// Exported ROM declarations
void ClearMailData(void); void ClearMailData(void);
void ClearMailStruct(struct MailStruct *mail); void ClearMailStruct(struct Mail *mail);
bool8 MonHasMail(struct Pokemon *mon); bool8 MonHasMail(struct Pokemon *mon);
u8 GiveMailToMon(struct Pokemon *mon, u16 itemId); u8 GiveMailToMon(struct Pokemon *mon, u16 itemId);
u16 SpeciesToMailSpecies(u16 species, u32 personality); u16 SpeciesToMailSpecies(u16 species, u32 personality);
u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer); u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *buffer);
u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail); u8 GiveMailToMon2(struct Pokemon *mon, struct Mail *mail);
void TakeMailFromMon(struct Pokemon *mon); void TakeMailFromMon(struct Pokemon *mon);
void ClearMailItemId(u8 mailId); void ClearMailItemId(u8 mailId);
u8 TakeMailFromMon2(struct Pokemon *mon); u8 TakeMailFromMon2(struct Pokemon *mon);
+11 -11
View File
@@ -12,7 +12,7 @@ struct MEventClientHeaderStruct
u32 unk_10; u32 unk_10;
u16 id; u16 id;
u16 unk_16[4]; u16 unk_16[4];
struct MEventBuffer_3430_Sub unk_20; struct WonderCardMetadata unk_20;
u8 maxDistributionMons; u8 maxDistributionMons;
u8 playerName[7]; u8 playerName[7];
u8 playerTrainerId[4]; u8 playerTrainerId[4];
@@ -50,16 +50,16 @@ extern const u16 gCard3Pal[];
extern const u16 gCard4Pal[]; extern const u16 gCard4Pal[];
extern const u16 gCard5Pal[]; extern const u16 gCard5Pal[];
struct MEWonderNewsData * GetSavedWonderNews(void); struct WonderNews * GetSavedWonderNews(void);
struct MEWonderCardData * GetSavedWonderCard(void); struct WonderCard * GetSavedWonderCard(void);
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void); struct WonderCardMetadata * sav1_get_mevent_buffer_2(void);
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void); struct WonderNewsMetadata * GetMENewsJisanStructPtr(void);
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src); bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct WonderNews * src);
bool32 ValidateReceivedWonderNews(void); bool32 ValidateReceivedWonderNews(void);
bool32 ValidateReceivedWonderCard(void); bool32 ValidateReceivedWonderCard(void);
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src); bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src);
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data); bool32 OverwriteSavedWonderCardWithReceivedCard(const struct WonderCard * data);
void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer); void MEvent_WonderCardResetUnk08_6(struct WonderCard * buffer);
bool32 MEvent_ReceiveDistributionMon(const u16 * data); bool32 MEvent_ReceiveDistributionMon(const u16 * data);
void BuildMEventClientHeader(struct MEventClientHeaderStruct * data); void BuildMEventClientHeader(struct MEventClientHeaderStruct * data);
bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data); bool32 ValidateMEventClientHeader(const struct MEventClientHeaderStruct * data);
@@ -67,8 +67,8 @@ u32 sub_8144418(const u16 * a0, const struct MEventClientHeaderStruct * a1, void
u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused); u32 MEvent_CanPlayerReceiveDistributionMon(const u16 * a0, const struct MEventClientHeaderStruct * a1, void * unused);
bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1); bool32 sub_8144474(const struct MEventClientHeaderStruct * a0, const u16 * a1);
u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command); u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command);
bool32 InitWonderCardResources(struct MEWonderCardData * r5, struct MEventBuffer_3430_Sub * r6); bool32 InitWonderCardResources(struct WonderCard * r5, struct WonderCardMetadata * r6);
bool32 InitWonderNewsResources(const struct MEWonderNewsData * a0); bool32 InitWonderNewsResources(const struct WonderNews * a0);
s32 FadeToWonderCardMenu(void); s32 FadeToWonderCardMenu(void);
s32 FadeToWonderNewsMenu(void); s32 FadeToWonderNewsMenu(void);
void DestroyWonderCard(void); void DestroyWonderCard(void);
@@ -88,7 +88,7 @@ u16 MEvent_GetBattleCardCount(u32 command);
void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId); void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId);
u16 *GetMEventProfileECWordsMaybe(void); u16 *GetMEventProfileECWordsMaybe(void);
void ResetReceivedWonderCardFlag(void); void ResetReceivedWonderCardFlag(void);
bool32 MEventHandleReceivedWonderCard(u16 cardId); bool32 MEventHandleReceivedWonderCard(u16 flagId);
u16 GetWonderCardFlagId(void); u16 GetWonderCardFlagId(void);
#endif //GUARD_MEVENT_H #endif //GUARD_MEVENT_H
+2 -2
View File
@@ -100,8 +100,8 @@ struct mevent_srv_common
u32 cmdidx; u32 cmdidx;
const struct mevent_server_cmd * cmdBuffer; const struct mevent_server_cmd * cmdBuffer;
void * recvBuffer; void * recvBuffer;
struct MEWonderCardData * card; struct WonderCard * card;
struct MEWonderNewsData * news; struct WonderNews * news;
struct MEventClientHeaderStruct * mevent_unk1442cc; struct MEventClientHeaderStruct * mevent_unk1442cc;
void * sendBuffer1; void * sendBuffer1;
u32 sendBuffer1Size; u32 sendBuffer1Size;
-1
View File
@@ -5,7 +5,6 @@
u32 RunMysteryEventScript(u8 *); u32 RunMysteryEventScript(u8 *);
void SetMysteryEventScriptStatus(u32 val); void SetMysteryEventScriptStatus(u32 val);
u16 GetRecordMixingGift(void);
void MEventScript_InitContext(u8 *); void MEventScript_InitContext(u8 *);
bool32 MEventScript_Run(u32 *); bool32 MEventScript_Run(u32 *);
+1 -1
View File
@@ -96,7 +96,7 @@ struct BoxPokemon
u8 hasSpecies:1; u8 hasSpecies:1;
u8 isEgg:1; u8 isEgg:1;
u8 unused:5; u8 unused:5;
u8 otName[OT_NAME_LENGTH]; u8 otName[PLAYER_NAME_LENGTH];
u8 markings; u8 markings;
u16 checksum; u16 checksum;
u16 unknown; u16 unknown;
+1 -1
View File
@@ -5,7 +5,7 @@
#include "link_rfu.h" #include "link_rfu.h"
#include "constants/trade.h" #include "constants/trade.h"
extern struct MailStruct gLinkPartnerMail[6]; extern struct Mail gLinkPartnerMail[6];
extern u8 gSelectedTradeMonPositions[2]; extern u8 gSelectedTradeMonPositions[2];
extern const u8 gText_MaleSymbol4[]; extern const u8 gText_MaleSymbol4[];
-3
View File
@@ -33,9 +33,6 @@
#define TAG_HEALTHBOX_PALS_1 55049 #define TAG_HEALTHBOX_PALS_1 55049
#define TAG_HEALTHBOX_PALS_2 55050 #define TAG_HEALTHBOX_PALS_2 55050
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
#define LOHALF(n) ((n) & 0xFFFF)
// RAM // RAM
UNUSED u32 gMonShrinkDuration; UNUSED u32 gMonShrinkDuration;
UNUSED u16 gMonShrinkDelta; UNUSED u16 gMonShrinkDelta;
+5 -5
View File
@@ -303,7 +303,7 @@ static s32 IndexOfOpponentLinkBattleRecord(struct LinkBattleRecords * records, c
for (i = 0; i < LINK_B_RECORDS_COUNT; i++) for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
{ {
if (StringCompareN(records->entries[i].name, name, OT_NAME_LENGTH) == 0 && records->entries[i].trainerId == trainerId) if (StringCompareN(records->entries[i].name, name, PLAYER_NAME_LENGTH) == 0 && records->entries[i].trainerId == trainerId)
return i; return i;
} }
@@ -377,7 +377,7 @@ static void UpdateLinkBattleGameStats(s32 outcome)
static void AddOpponentLinkBattleRecord(struct LinkBattleRecords * records, const u8 * name, u16 trainerId, s32 outcome, u32 language) static void AddOpponentLinkBattleRecord(struct LinkBattleRecords * records, const u8 * name, u16 trainerId, s32 outcome, u32 language)
{ {
u8 namebuf[OT_NAME_LENGTH + 1]; u8 namebuf[PLAYER_NAME_LENGTH + 1];
s32 i; s32 i;
struct LinkBattleRecord * record; struct LinkBattleRecord * record;
@@ -397,7 +397,7 @@ static void AddOpponentLinkBattleRecord(struct LinkBattleRecords * records, cons
i = LINK_B_RECORDS_COUNT - 1; i = LINK_B_RECORDS_COUNT - 1;
record = &records->entries[LINK_B_RECORDS_COUNT - 1]; record = &records->entries[LINK_B_RECORDS_COUNT - 1];
ClearLinkBattleRecord(record); ClearLinkBattleRecord(record);
StringCopyN(record->name, namebuf, OT_NAME_LENGTH); StringCopyN(record->name, namebuf, PLAYER_NAME_LENGTH);
record->trainerId = trainerId; record->trainerId = trainerId;
} }
UpdateLinkBattleRecord(&records->entries[i], outcome); UpdateLinkBattleRecord(&records->entries[i], outcome);
@@ -515,8 +515,8 @@ static void PrintOpponentBattleRecord(struct LinkBattleRecord * record, u8 y)
if (i == 0) if (i == 0)
{ {
x = 0; x = 0;
StringFillWithTerminator(gStringVar1, OT_NAME_LENGTH + 1); StringFillWithTerminator(gStringVar1, PLAYER_NAME_LENGTH + 1);
StringCopyN(gStringVar1, record->name, OT_NAME_LENGTH); StringCopyN(gStringVar1, record->name, PLAYER_NAME_LENGTH);
} }
else if (i == 1) else if (i == 1)
{ {
+3 -1
View File
@@ -921,6 +921,8 @@ const struct BerryTree gBlankBerryTree = {};
berries[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX]; \ berries[ITEM_ENIGMA_BERRY - FIRST_BERRY_INDEX]; \
}) })
static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *);
void InitEnigmaBerry(void) void InitEnigmaBerry(void)
{ {
s32 i; s32 i;
@@ -967,7 +969,7 @@ void SetEnigmaBerry(u8 * berry)
enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry); enigmaBerry->checksum = GetEnigmaBerryChecksum(enigmaBerry);
} }
u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry) static u32 GetEnigmaBerryChecksum(struct EnigmaBerry * enigmaBerry)
{ {
const u8 * src = (const u8 *)enigmaBerry; const u8 * src = (const u8 *)enigmaBerry;
u32 result = 0; u32 result = 0;
+12 -12
View File
@@ -1061,31 +1061,31 @@ static void SaveResults(void)
switch (sGame->playerCount) switch (sGame->playerCount)
{ {
case 2: case 2:
if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.pressingSpeeds[0])
{ {
sGame->newRecord = TRUE; sGame->newRecord = TRUE;
gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = sGame->pressingSpeed; gSaveBlock2Ptr->berryCrush.pressingSpeeds[0] = sGame->pressingSpeed;
} }
break; break;
case 3: case 3:
if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.pressingSpeeds[1])
{ {
sGame->newRecord = TRUE; sGame->newRecord = TRUE;
gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = sGame->pressingSpeed; gSaveBlock2Ptr->berryCrush.pressingSpeeds[1] = sGame->pressingSpeed;
} }
break; break;
case 4: case 4:
if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.pressingSpeeds[2])
{ {
sGame->newRecord = TRUE; sGame->newRecord = TRUE;
gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = sGame->pressingSpeed; gSaveBlock2Ptr->berryCrush.pressingSpeeds[2] = sGame->pressingSpeed;
} }
break; break;
case 5: case 5:
if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) if (sGame->pressingSpeed > gSaveBlock2Ptr->berryCrush.pressingSpeeds[3])
{ {
sGame->newRecord = TRUE; sGame->newRecord = TRUE;
gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = sGame->pressingSpeed; gSaveBlock2Ptr->berryCrush.pressingSpeeds[3] = sGame->pressingSpeed;
} }
break; break;
} }
@@ -3192,10 +3192,10 @@ void ShowBerryCrushRankings(void)
ScriptContext2_Enable(); ScriptContext2_Enable();
taskId = CreateTask(Task_ShowBerryCrushRankings, 0); taskId = CreateTask(Task_ShowBerryCrushRankings, 0);
gTasks[taskId].tPressingSpeeds(0) = gSaveBlock2Ptr->berryCrush.berryCrushResults[0]; gTasks[taskId].tPressingSpeeds(0) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[0];
gTasks[taskId].tPressingSpeeds(1) = gSaveBlock2Ptr->berryCrush.berryCrushResults[1]; gTasks[taskId].tPressingSpeeds(1) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[1];
gTasks[taskId].tPressingSpeeds(2) = gSaveBlock2Ptr->berryCrush.berryCrushResults[2]; gTasks[taskId].tPressingSpeeds(2) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[2];
gTasks[taskId].tPressingSpeeds(3) = gSaveBlock2Ptr->berryCrush.berryCrushResults[3]; gTasks[taskId].tPressingSpeeds(3) = gSaveBlock2Ptr->berryCrush.pressingSpeeds[3];
} }
static void PrintTimer(struct BerryCrushGame_Gfx * gfx, u16 frames) static void PrintTimer(struct BerryCrushGame_Gfx * gfx, u16 frames)
+5 -2
View File
@@ -177,7 +177,10 @@ static void BikeTransition_MoveDirection(u8 direction)
{ {
if (collision == COLLISION_LEDGE_JUMP) if (collision == COLLISION_LEDGE_JUMP)
PlayerJumpLedge(direction); PlayerJumpLedge(direction);
else if (collision != COLLISION_STOP_SURFING && collision != COLLISION_LEDGE_JUMP && collision != COLLISION_PUSHED_BOULDER && collision != COLLISION_UNKNOWN_WARP_6C_6D_6E_6F) else if (collision != COLLISION_STOP_SURFING
&& collision != COLLISION_LEDGE_JUMP
&& collision != COLLISION_PUSHED_BOULDER
&& collision != COLLISION_ROTATING_GATE)
PlayerOnBikeCollide(direction); PlayerOnBikeCollide(direction);
} }
else else
@@ -249,7 +252,7 @@ bool8 RS_IsRunningDisallowed(u8 r0)
bool32 IsRunningDisallowed(u8 metatileBehavior) bool32 IsRunningDisallowed(u8 metatileBehavior)
{ {
if (!(gMapHeader.flags & MAP_ALLOW_RUN)) if (!gMapHeader.allowRunning)
return TRUE; return TRUE;
if (MetatileBehaviorForbidsBiking(metatileBehavior) != TRUE) if (MetatileBehaviorForbidsBiking(metatileBehavior) != TRUE)
return FALSE; return FALSE;
+5 -2
View File
@@ -491,11 +491,14 @@ static void PlayerNotOnBikeMoving(u8 direction, u16 heldKeys)
{ {
PlayerJumpLedge(direction); PlayerJumpLedge(direction);
} }
else if (collision == COLLISION_UNKNOWN_WARP_6C_6D_6E_6F) else if (collision == COLLISION_ROTATING_GATE)
{ {
PlayerFaceDirection(direction); PlayerFaceDirection(direction);
} }
else if (collision != COLLISION_STOP_SURFING && collision != COLLISION_LEDGE_JUMP && collision != COLLISION_PUSHED_BOULDER && collision != COLLISION_UNKNOWN_WARP_6C_6D_6E_6F) else if (collision != COLLISION_STOP_SURFING
&& collision != COLLISION_LEDGE_JUMP
&& collision != COLLISION_PUSHED_BOULDER
&& collision != COLLISION_ROTATING_GATE)
{ {
PlayerNotOnBikeCollide(direction); PlayerNotOnBikeCollide(direction);
} }
+2 -2
View File
@@ -243,7 +243,7 @@ void FieldUseFunc_OrangeMail(u8 taskId)
static void sub_80A1208(void) static void sub_80A1208(void)
{ {
struct MailStruct mail; struct Mail mail;
mail.itemId = gSpecialVar_ItemId; mail.itemId = gSpecialVar_ItemId;
ReadMail(&mail, CB2_BagMenuFromStartMenu, 0); ReadMail(&mail, CB2_BagMenuFromStartMenu, 0);
@@ -613,7 +613,7 @@ static void sub_80A1B48(u8 taskId)
bool8 CanUseEscapeRopeOnCurrMap(void) bool8 CanUseEscapeRopeOnCurrMap(void)
{ {
if (gMapHeader.flags & MAP_ALLOW_ESCAPE_ROPE) if (gMapHeader.allowEscaping)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
+1 -1
View File
@@ -19,7 +19,7 @@ struct LoadedSaveData
/*0x00F0*/ struct ItemSlot pokeBalls[BAG_POKEBALLS_COUNT]; /*0x00F0*/ struct ItemSlot pokeBalls[BAG_POKEBALLS_COUNT];
/*0x0130*/ struct ItemSlot TMsHMs[BAG_TMHM_COUNT]; /*0x0130*/ struct ItemSlot TMsHMs[BAG_TMHM_COUNT];
/*0x0230*/ struct ItemSlot berries[BAG_BERRIES_COUNT]; /*0x0230*/ struct ItemSlot berries[BAG_BERRIES_COUNT];
/*0x02E8*/ struct MailStruct mail[MAIL_COUNT]; /*0x02E8*/ struct Mail mail[MAIL_COUNT];
}; };
// EWRAM DATA // EWRAM DATA
+2 -2
View File
@@ -57,7 +57,7 @@ struct MailViewResources {
u8 authorNameBuffer[12]; u8 authorNameBuffer[12];
void (*savedCallback)(void); void (*savedCallback)(void);
void (*showMailCallback)(void); void (*showMailCallback)(void);
struct MailStruct * mail; struct Mail * mail;
bool8 messageExists; bool8 messageExists;
u8 nameX; u8 nameX;
u8 mailType; u8 mailType;
@@ -437,7 +437,7 @@ static const struct MailAttrStruct sMessageLayouts_5x2[] = {
}, },
}; };
void ReadMail(struct MailStruct * mail, void (*savedCallback)(void), bool8 messageExists) void ReadMail(struct Mail * mail, void (*savedCallback)(void), bool8 messageExists)
{ {
u16 sp0; u16 sp0;
u16 species; u16 species;
+3 -3
View File
@@ -13,7 +13,7 @@ void ClearMailData(void)
ClearMailStruct(&gSaveBlock1Ptr->mail[i]); ClearMailStruct(&gSaveBlock1Ptr->mail[i]);
} }
void ClearMailStruct(struct MailStruct *mail) void ClearMailStruct(struct Mail *mail)
{ {
s32 i; s32 i;
@@ -95,7 +95,7 @@ u16 MailSpeciesToSpecies(u16 mailSpecies, u16 *unownLetter)
return result; return result;
} }
u8 GiveMailToMon2(struct Pokemon *mon, struct MailStruct *mail) u8 GiveMailToMon2(struct Pokemon *mon, struct Mail *mail)
{ {
u8 heldItem[2]; u8 heldItem[2];
u16 itemId = mail->itemId; u16 itemId = mail->itemId;
@@ -152,7 +152,7 @@ u8 TakeMailFromMon2(struct Pokemon *mon)
{ {
if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE) if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
{ {
memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct MailStruct)); memcpy(&gSaveBlock1Ptr->mail[i], &gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)], sizeof(struct Mail));
gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE; gSaveBlock1Ptr->mail[GetMonData(mon, MON_DATA_MAIL)].itemId = ITEM_NONE;
SetMonData(mon, MON_DATA_MAIL, &newMailId); SetMonData(mon, MON_DATA_MAIL, &newMailId);
SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem); SetMonData(mon, MON_DATA_HELD_ITEM, newHeldItem);
+2 -2
View File
@@ -618,11 +618,11 @@ static void PrintContinueStats(void)
static void PrintPlayerName(void) static void PrintPlayerName(void)
{ {
s32 i; s32 i;
u8 name[OT_NAME_LENGTH + 1]; u8 name[PLAYER_NAME_LENGTH + 1];
u8 *ptr; u8 *ptr;
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 18, sTextColor2, -1, gText_Player); AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 2, 18, sTextColor2, -1, gText_Player);
ptr = name; ptr = name;
for (i = 0; i < OT_NAME_LENGTH; i++) for (i = 0; i < PLAYER_NAME_LENGTH; i++)
*ptr++ = gSaveBlock2Ptr->playerName[i]; *ptr++ = gSaveBlock2Ptr->playerName[i];
*ptr = EOS; *ptr = EOS;
AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 18, sTextColor2, -1, name); AddTextPrinterParameterized3(MAIN_MENU_WINDOW_CONTINUE, 2, 62, 18, sTextColor2, -1, name);
+16 -16
View File
@@ -5,15 +5,15 @@
#include "menews_jisan.h" #include "menews_jisan.h"
#include "constants/items.h" #include "constants/items.h"
static u32 GetMENewsJisanRewardItem(struct MENewsJisanStruct *); static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *);
static void MENewsJisanIncrementCounterUnk0_5(struct MENewsJisanStruct *); static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *);
static u32 GetMENewsJisanState(struct MENewsJisanStruct *); static u32 GetMENewsJisanState(struct WonderNewsMetadata *);
static void MENewsJisanIncrementCounterUnk0_2(struct MENewsJisanStruct *); static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *);
static void MENewsJisanResetCounterUnk0_2(struct MENewsJisanStruct *); static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *);
void MENewsJisan_SetRandomReward(u32 a0) void MENewsJisan_SetRandomReward(u32 a0)
{ {
struct MENewsJisanStruct *r5 = GetMENewsJisanStructPtr(); struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr();
r5->unk_0_0 = a0; r5->unk_0_0 = a0;
switch (a0) switch (a0)
@@ -32,7 +32,7 @@ void MENewsJisan_SetRandomReward(u32 a0)
void MENewsJisanReset(void) void MENewsJisanReset(void)
{ {
struct MENewsJisanStruct *r5 = GetMENewsJisanStructPtr(); struct WonderNewsMetadata *r5 = GetMENewsJisanStructPtr();
r5->unk_0_0 = 0; r5->unk_0_0 = 0;
r5->unk_0_2 = 0; r5->unk_0_2 = 0;
@@ -44,8 +44,8 @@ void MENewsJisanReset(void)
void MENewsJisanStepCounter(void) void MENewsJisanStepCounter(void)
{ {
u16 *r4 = GetVarPointer(VAR_MENEWS_JISAN_STEP_COUNTER); u16 *r4 = GetVarPointer(VAR_MENEWS_JISAN_STEP_COUNTER);
struct MENewsJisanStruct *r2 = GetMENewsJisanStructPtr(); struct WonderNewsMetadata *r2 = GetMENewsJisanStructPtr();
struct MENewsJisanStruct r0 = *r2; struct WonderNewsMetadata r0 = *r2;
if ((u8)r0.unk_0_5 > 4 && ++(*r4) >= 500) if ((u8)r0.unk_0_5 > 4 && ++(*r4) >= 500)
{ {
@@ -57,7 +57,7 @@ void MENewsJisanStepCounter(void)
u16 GetMENewsJisanItemAndState(void) u16 GetMENewsJisanItemAndState(void)
{ {
u16 *r6 = &gSpecialVar_Result; u16 *r6 = &gSpecialVar_Result;
struct MENewsJisanStruct *r4 = GetMENewsJisanStructPtr(); struct WonderNewsMetadata *r4 = GetMENewsJisanStructPtr();
u16 r5; u16 r5;
if (!IsMysteryGiftEnabled() || !ValidateReceivedWonderNews()) if (!IsMysteryGiftEnabled() || !ValidateReceivedWonderNews())
@@ -92,7 +92,7 @@ u16 GetMENewsJisanItemAndState(void)
return r5; return r5;
} }
static u32 GetMENewsJisanRewardItem(struct MENewsJisanStruct *a0) static u32 GetMENewsJisanRewardItem(struct WonderNewsMetadata *a0)
{ {
u32 r4; u32 r4;
@@ -103,28 +103,28 @@ static u32 GetMENewsJisanRewardItem(struct MENewsJisanStruct *a0)
return r4; return r4;
} }
static void MENewsJisanResetCounterUnk0_2(struct MENewsJisanStruct *a0) static void MENewsJisanResetCounterUnk0_2(struct WonderNewsMetadata *a0)
{ {
a0->unk_0_2 = 0; a0->unk_0_2 = 0;
} }
static void MENewsJisanIncrementCounterUnk0_2(struct MENewsJisanStruct *a0) static void MENewsJisanIncrementCounterUnk0_2(struct WonderNewsMetadata *a0)
{ {
a0->unk_0_2++; a0->unk_0_2++;
if ((u8)a0->unk_0_2 > 4) if ((u8)a0->unk_0_2 > 4)
a0->unk_0_2 = 4; a0->unk_0_2 = 4;
} }
static void MENewsJisanIncrementCounterUnk0_5(struct MENewsJisanStruct *a0) static void MENewsJisanIncrementCounterUnk0_5(struct WonderNewsMetadata *a0)
{ {
a0->unk_0_5++; a0->unk_0_5++;
if ((u8)a0->unk_0_5 > 5) if ((u8)a0->unk_0_5 > 5)
a0->unk_0_5 = 5; a0->unk_0_5 = 5;
} }
static u32 GetMENewsJisanState(struct MENewsJisanStruct *a0) static u32 GetMENewsJisanState(struct WonderNewsMetadata *a0)
{ {
struct MENewsJisanStruct r0; struct WonderNewsMetadata r0;
if ((u8)a0->unk_0_5 == 5) if ((u8)a0->unk_0_5 == 5)
return 6; return 6;
+100 -100
View File
@@ -36,10 +36,10 @@ struct MEventTaskData1
}; };
static void Task_EReaderComm(u8 taskId); static void Task_EReaderComm(u8 taskId);
static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * src); static bool32 IsReceivedWonderNewsHeaderValid(const struct WonderNews * src);
static void BlankWonderNews(void); static void BlankWonderNews(void);
static void BlankMENewsJisan(void); static void BlankMENewsJisan(void);
static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * src); static bool32 IsReceivedWonderCardHeaderValid(const struct WonderCard * src);
static void BlankSavedWonderCard(void); static void BlankSavedWonderCard(void);
static void BlankMEventBuffer2(void); static void BlankMEventBuffer2(void);
static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count); static void RecordIdOfWonderCardSender(u32 eventId, u32 trainerId, u32 *idsList, s32 count);
@@ -477,34 +477,34 @@ static void Task_EReaderComm(u8 taskId)
void InitMEventData(void) void InitMEventData(void)
{ {
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers, sizeof(gSaveBlock1Ptr->mysteryEventBuffers)); CpuFill32(0, &gSaveBlock1Ptr->mysteryGift, sizeof(gSaveBlock1Ptr->mysteryGift));
BlankMENewsJisan(); BlankMENewsJisan();
EC_ResetMEventProfileMaybe(); EC_ResetMEventProfileMaybe();
} }
struct MEWonderNewsData * GetSavedWonderNews(void) struct WonderNews * GetSavedWonderNews(void)
{ {
return &gSaveBlock1Ptr->mysteryEventBuffers.menews.data; return &gSaveBlock1Ptr->mysteryGift.news;
} }
struct MEWonderCardData * GetSavedWonderCard(void) struct WonderCard * GetSavedWonderCard(void)
{ {
return &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; return &gSaveBlock1Ptr->mysteryGift.card;
} }
struct MEventBuffer_3430_Sub * sav1_get_mevent_buffer_2(void) struct WonderCardMetadata * sav1_get_mevent_buffer_2(void)
{ {
return &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; return &gSaveBlock1Ptr->mysteryGift.cardMetadata;
} }
struct MENewsJisanStruct * GetMENewsJisanStructPtr(void) struct WonderNewsMetadata * GetMENewsJisanStructPtr(void)
{ {
return &gSaveBlock1Ptr->mysteryEventBuffers.me_jisan; return &gSaveBlock1Ptr->mysteryGift.newsMetadata;
} }
u16 * GetMEventProfileECWordsMaybe(void) u16 * GetMEventProfileECWordsMaybe(void)
{ {
return gSaveBlock1Ptr->mysteryEventBuffers.ec_profile_maybe; return gSaveBlock1Ptr->mysteryGift.questionnaireWords;
} }
void DestroyWonderNews(void) void DestroyWonderNews(void)
@@ -512,26 +512,26 @@ void DestroyWonderNews(void)
BlankWonderNews(); BlankWonderNews();
} }
bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct MEWonderNewsData * src) bool32 OverwriteSavedWonderNewsWithReceivedNews(const struct WonderNews * src)
{ {
if (!IsReceivedWonderNewsHeaderValid(src)) if (!IsReceivedWonderNewsHeaderValid(src))
return FALSE; return FALSE;
BlankWonderNews(); BlankWonderNews();
gSaveBlock1Ptr->mysteryEventBuffers.menews.data = *src; gSaveBlock1Ptr->mysteryGift.news = *src;
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)); gSaveBlock1Ptr->mysteryGift.newsCrc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.news, sizeof(struct WonderNews));
return TRUE; return TRUE;
} }
bool32 ValidateReceivedWonderNews(void) bool32 ValidateReceivedWonderNews(void)
{ {
if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data, sizeof(struct MEWonderNewsData)) != gSaveBlock1Ptr->mysteryEventBuffers.menews.crc) if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.news, sizeof(struct WonderNews)) != gSaveBlock1Ptr->mysteryGift.newsCrc)
return FALSE; return FALSE;
if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.menews.data)) if (!IsReceivedWonderNewsHeaderValid(&gSaveBlock1Ptr->mysteryGift.news))
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * data) static bool32 IsReceivedWonderNewsHeaderValid(const struct WonderNews * data)
{ {
if (data->newsId == 0) if (data->newsId == 0)
return FALSE; return FALSE;
@@ -540,31 +540,31 @@ static bool32 IsReceivedWonderNewsHeaderValid(const struct MEWonderNewsData * da
bool32 WonderNews_Test_Unk_02(void) bool32 WonderNews_Test_Unk_02(void)
{ {
const struct MEWonderNewsData * data = &gSaveBlock1Ptr->mysteryEventBuffers.menews.data; const struct WonderNews * data = &gSaveBlock1Ptr->mysteryGift.news;
if (data->shareState == 0) if (data->sendType == 0)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static void BlankWonderNews(void) static void BlankWonderNews(void)
{ {
CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryEventBuffers.menews.data)); CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->mysteryGift.news));
gSaveBlock1Ptr->mysteryEventBuffers.menews.crc = 0; gSaveBlock1Ptr->mysteryGift.newsCrc = 0;
} }
static void BlankMENewsJisan(void) static void BlankMENewsJisan(void)
{ {
CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct MENewsJisanStruct)); CpuFill32(0, GetMENewsJisanStructPtr(), sizeof(struct WonderNewsMetadata));
MENewsJisanReset(); MENewsJisanReset();
} }
bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src) bool32 MEvent_HaveAlreadyReceivedWonderNews(const u8 * src)
{ {
const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryEventBuffers.menews.data; const u8 * r5 = (const u8 *)&gSaveBlock1Ptr->mysteryGift.news;
u32 i; u32 i;
if (!ValidateReceivedWonderNews()) if (!ValidateReceivedWonderNews())
return FALSE; return FALSE;
for (i = 0; i < sizeof(struct MEWonderNewsData); i++) for (i = 0; i < sizeof(struct WonderNews); i++)
{ {
if (r5[i] != src[i]) if (r5[i] != src[i])
return FALSE; return FALSE;
@@ -583,79 +583,79 @@ void DestroyWonderCard(void)
ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer); ClearEReaderTrainer(&gSaveBlock2Ptr->battleTower.ereaderTrainer);
} }
bool32 OverwriteSavedWonderCardWithReceivedCard(const struct MEWonderCardData * data) bool32 OverwriteSavedWonderCardWithReceivedCard(const struct WonderCard * data)
{ {
struct MEventBuffer_3430_Sub * r2; struct WonderCardMetadata * r2;
struct MEWonderCardData * r1; struct WonderCard * r1;
if (!IsReceivedWonderCardHeaderValid(data)) if (!IsReceivedWonderCardHeaderValid(data))
return FALSE; return FALSE;
DestroyWonderCard(); DestroyWonderCard();
memcpy(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, data, sizeof(struct MEWonderCardData)); memcpy(&gSaveBlock1Ptr->mysteryGift.card, data, sizeof(struct WonderCard));
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)); gSaveBlock1Ptr->mysteryGift.cardCrc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard));
// Annoying hack to match // Annoying hack to match
r2 = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; r2 = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
r1 = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; r1 = &gSaveBlock1Ptr->mysteryGift.card;
r2->unk_06 = r1->unk_02; r2->iconSpecies = r1->iconSpecies;
return TRUE; return TRUE;
} }
bool32 ValidateReceivedWonderCard(void) bool32 ValidateReceivedWonderCard(void)
{ {
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData))) if (gSaveBlock1Ptr->mysteryGift.cardCrc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard)))
return FALSE; return FALSE;
if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryEventBuffers.mecard.data)) if (!IsReceivedWonderCardHeaderValid(&gSaveBlock1Ptr->mysteryGift.card))
return FALSE; return FALSE;
if (!ValidateRamScript()) if (!ValidateRamScript())
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static bool32 IsReceivedWonderCardHeaderValid(const struct MEWonderCardData * data) static bool32 IsReceivedWonderCardHeaderValid(const struct WonderCard * data)
{ {
if (data->cardId == 0) if (data->flagId == 0)
return FALSE; return FALSE;
if (data->unk_08_0 > 2) if (data->type > 2)
return FALSE; return FALSE;
if (!(data->shareState == 0 || data->shareState == 1 || data->shareState == 2)) if (!(data->sendType == 0 || data->sendType == 1 || data->sendType == 2))
return FALSE; return FALSE;
if (data->unk_08_2 > 7) if (data->bgType > 7)
return FALSE; return FALSE;
if (data->recvMonCapacity > 7) if (data->maxStamps > 7)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
bool32 WonderCard_Test_Unk_08_6(void) bool32 WonderCard_Test_Unk_08_6(void)
{ {
const struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; const struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->shareState == 0) if (data->sendType == 0)
return FALSE; return FALSE;
return TRUE; return TRUE;
} }
static void BlankSavedWonderCard(void) static void BlankSavedWonderCard(void)
{ {
CpuFill32(0, &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data, sizeof(struct MEWonderCardData)); CpuFill32(0, &gSaveBlock1Ptr->mysteryGift.card, sizeof(struct WonderCard));
gSaveBlock1Ptr->mysteryEventBuffers.mecard.crc = 0; gSaveBlock1Ptr->mysteryGift.cardCrc = 0;
} }
static void BlankMEventBuffer2(void) static void BlankMEventBuffer2(void)
{ {
CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16)); CpuFill32(0, sav1_get_mevent_buffer_2(), 18 * sizeof(u16));
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.crc = 0; gSaveBlock1Ptr->mysteryGift.cardMetadataCrc = 0;
} }
u16 GetWonderCardFlagId(void) u16 GetWonderCardFlagId(void)
{ {
if (ValidateReceivedWonderCard()) if (ValidateReceivedWonderCard())
return gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId; return gSaveBlock1Ptr->mysteryGift.card.flagId;
return 0; return 0;
} }
void MEvent_WonderCardResetUnk08_6(struct MEWonderCardData * buffer) void MEvent_WonderCardResetUnk08_6(struct WonderCard * buffer)
{ {
if (buffer->shareState == 1) if (buffer->sendType == 1)
buffer->shareState = 0; buffer->sendType = 0;
} }
static bool32 IsCardIdInValidRange(u16 a0) static bool32 IsCardIdInValidRange(u16 a0)
@@ -675,26 +675,26 @@ bool32 CheckReceivedGiftFromWonderCard(void)
return TRUE; return TRUE;
} }
static s32 CountReceivedDistributionMons(const struct MEventBuffer_3430_Sub * data, s32 size) static s32 CountReceivedDistributionMons(const struct WonderCardMetadata * data, s32 size)
{ {
s32 r3 = 0; s32 r3 = 0;
s32 i; s32 i;
for (i = 0; i < size; i++) for (i = 0; i < size; i++)
{ {
if (data->distributedMons[1][i] && data->distributedMons[0][i]) if (data->stampData[1][i] && data->stampData[0][i])
r3++; r3++;
} }
return r3; return r3;
} }
static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct MEventBuffer_3430_Sub * data1, const u16 * data2, s32 size) static bool32 HasPlayerAlreadyReceivedDistributedMon(const struct WonderCardMetadata * data1, const u16 * data2, s32 size)
{ {
s32 i; s32 i;
for (i = 0; i < size; i++) for (i = 0; i < size; i++)
{ {
if (data1->distributedMons[1][i] == data2[1]) if (data1->stampData[1][i] == data2[1])
return TRUE; return TRUE;
if (data1->distributedMons[0][i] == data2[0]) if (data1->stampData[0][i] == data2[0])
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
@@ -713,30 +713,30 @@ static bool32 IsWonderCardSpeciesValid(const u16 * data)
static s32 ValidateCardAndCountMonsReceived(void) static s32 ValidateCardAndCountMonsReceived(void)
{ {
struct MEWonderCardData * data; struct WonderCard * data;
if (!ValidateReceivedWonderCard()) if (!ValidateReceivedWonderCard())
return 0; return 0;
data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 != 1) if (data->type != 1)
return 0; return 0;
return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data->recvMonCapacity); return CountReceivedDistributionMons(&gSaveBlock1Ptr->mysteryGift.cardMetadata, data->maxStamps);
} }
bool32 MEvent_ReceiveDistributionMon(const u16 * data) bool32 MEvent_ReceiveDistributionMon(const u16 * data)
{ {
struct MEWonderCardData * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * buffer = &gSaveBlock1Ptr->mysteryGift.card;
s32 capacity = buffer->recvMonCapacity; s32 capacity = buffer->maxStamps;
s32 i; s32 i;
if (!IsWonderCardSpeciesValid(data)) if (!IsWonderCardSpeciesValid(data))
return FALSE; return FALSE;
if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data, data, capacity)) if (HasPlayerAlreadyReceivedDistributedMon(&gSaveBlock1Ptr->mysteryGift.cardMetadata, data, capacity))
return FALSE; return FALSE;
for (i = 0; i < capacity; i++) for (i = 0; i < capacity; i++)
{ {
if (gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] == 0 && gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] == 0) if (gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[1][i] == 0 && gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[0][i] == 0)
{ {
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[1][i] = data[1]; gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[1][i] = data[1];
gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.distributedMons[0][i] = data[0]; gSaveBlock1Ptr->mysteryGift.cardMetadata.stampData[0][i] = data[0];
return TRUE; return TRUE;
} }
} }
@@ -764,16 +764,16 @@ void BuildMEventClientHeader(struct MEventClientHeaderStruct * data)
if (ValidateReceivedWonderCard()) if (ValidateReceivedWonderCard())
{ {
// Populate fields // Populate fields
data->id = GetSavedWonderCard()->cardId; data->id = GetSavedWonderCard()->flagId;
data->unk_20 = *sav1_get_mevent_buffer_2(); data->unk_20 = *sav1_get_mevent_buffer_2();
data->maxDistributionMons = GetSavedWonderCard()->recvMonCapacity; data->maxDistributionMons = GetSavedWonderCard()->maxStamps;
} }
else else
data->id = 0; data->id = 0;
// Get something // Get something
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
data->unk_16[i] = gSaveBlock1Ptr->mysteryEventBuffers.ec_profile_maybe[i]; data->unk_16[i] = gSaveBlock1Ptr->mysteryGift.questionnaireWords[i];
// Get player ID // Get player ID
CopyTrainerId(data->playerTrainerId, gSaveBlock2Ptr->playerTrainerId); CopyTrainerId(data->playerTrainerId, gSaveBlock2Ptr->playerTrainerId);
@@ -841,11 +841,11 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
switch (command) switch (command)
{ {
case 0: case 0:
return a0->unk_20.linkWins; return a0->unk_20.battlesWon;
case 1: case 1:
return a0->unk_20.linkLosses; return a0->unk_20.battlesLost;
case 2: case 2:
return a0->unk_20.linkTrades; return a0->unk_20.numTrades;
case 3: case 3:
return GetNumReceivedDistributionMons(a0); return GetNumReceivedDistributionMons(a0);
case 4: case 4:
@@ -859,20 +859,20 @@ u16 sub_81444B0(const struct MEventClientHeaderStruct * a0, u32 command)
// Increments an interaction count in the save block // Increments an interaction count in the save block
static void IncrementBattleCardCount(u32 command) static void IncrementBattleCardCount(u32 command)
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 2) if (data->type == 2)
{ {
u16 * dest = NULL; u16 * dest = NULL;
switch (command) switch (command)
{ {
case 0: case 0:
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkWins; dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesWon;
break; break;
case 1: case 1:
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkLosses; dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.battlesLost;
break; break;
case 2: case 2:
dest = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data.linkTrades; dest = &gSaveBlock1Ptr->mysteryGift.cardMetadata.numTrades;
break; break;
case 3: case 3:
break; break;
@@ -896,46 +896,46 @@ u16 MEvent_GetBattleCardCount(u32 command)
{ {
case 0: case 0:
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 2) if (data->type == 2)
{ {
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
return buffer->linkWins; return buffer->battlesWon;
} }
break; break;
} }
case 1: case 1:
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 2) if (data->type == 2)
{ {
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
return buffer->linkLosses; return buffer->battlesLost;
} }
break; break;
} }
case 2: case 2:
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 2) if (data->type == 2)
{ {
struct MEventBuffer_3430_Sub * buffer = &gSaveBlock1Ptr->mysteryEventBuffers.buffer_310.data; struct WonderCardMetadata * buffer = &gSaveBlock1Ptr->mysteryGift.cardMetadata;
return buffer->linkTrades; return buffer->numTrades;
} }
break; break;
} }
case 3: case 3:
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 1) if (data->type == 1)
return ValidateCardAndCountMonsReceived(); return ValidateCardAndCountMonsReceived();
break; break;
} }
case 4: case 4:
{ {
struct MEWonderCardData * data = &gSaveBlock1Ptr->mysteryEventBuffers.mecard.data; struct WonderCard * data = &gSaveBlock1Ptr->mysteryGift.card;
if (data->unk_08_0 == 1) if (data->type == 1)
return data->recvMonCapacity; return data->maxStamps;
break; break;
} }
} }
@@ -948,14 +948,14 @@ void ResetReceivedWonderCardFlag(void)
sReceivedWonderCardIsValid = FALSE; sReceivedWonderCardIsValid = FALSE;
} }
bool32 MEventHandleReceivedWonderCard(u16 cardId) bool32 MEventHandleReceivedWonderCard(u16 flagId)
{ {
sReceivedWonderCardIsValid = FALSE; sReceivedWonderCardIsValid = FALSE;
if (cardId == 0) if (flagId == 0)
return FALSE; return FALSE;
if (!ValidateReceivedWonderCard()) if (!ValidateReceivedWonderCard())
return FALSE; return FALSE;
if (gSaveBlock1Ptr->mysteryEventBuffers.mecard.data.cardId != cardId) if (gSaveBlock1Ptr->mysteryGift.card.flagId != flagId)
return FALSE; return FALSE;
sReceivedWonderCardIsValid = TRUE; sReceivedWonderCardIsValid = TRUE;
return TRUE; return TRUE;
@@ -968,13 +968,13 @@ void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId)
switch (eventId) switch (eventId)
{ {
case 2: // trade case 2: // trade
RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[1], 5); RecordIdOfWonderCardSender(2, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[1], 5);
break; break;
case 0: // link win case 0: // link win
RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); RecordIdOfWonderCardSender(0, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[0], 5);
break; break;
case 1: // link loss case 1: // link loss
RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryEventBuffers.unk_344[0], 5); RecordIdOfWonderCardSender(1, trainerId, gSaveBlock1Ptr->mysteryGift.trainerIds[0], 5);
break; break;
default: default:
AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988); AGB_ASSERT_EX(0, ABSPATH("mevent.c"), 988);
@@ -984,7 +984,7 @@ void MEvent_RecordIdOfWonderCardSenderByEventType(u32 eventId, u32 trainerId)
static void BlankBuffer344(void) static void BlankBuffer344(void)
{ {
CpuFill32(0, gSaveBlock1Ptr->mysteryEventBuffers.unk_344, sizeof(gSaveBlock1Ptr->mysteryEventBuffers.unk_344)); CpuFill32(0, gSaveBlock1Ptr->mysteryGift.trainerIds, sizeof(gSaveBlock1Ptr->mysteryGift.trainerIds));
} }
// Looks up trainerId in an array idsList with count elements. // Looks up trainerId in an array idsList with count elements.
+4 -4
View File
@@ -45,8 +45,8 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void *
{ {
svr->unk_00 = 0; svr->unk_00 = 0;
svr->mainseqno = 0; svr->mainseqno = 0;
svr->card = AllocZeroed(sizeof(struct MEWonderCardData)); svr->card = AllocZeroed(sizeof(struct WonderCard));
svr->news = AllocZeroed(sizeof(struct MEWonderNewsData)); svr->news = AllocZeroed(sizeof(struct WonderNews));
svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE);
svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventClientHeaderStruct)); svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventClientHeaderStruct));
svr->cmdBuffer = cmdBuffer; svr->cmdBuffer = cmdBuffer;
@@ -188,11 +188,11 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr)
break; break;
case 14: case 14:
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432); AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 432);
mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->news), sizeof(struct MEWonderNewsData)); mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->news), sizeof(struct WonderNews));
break; break;
case 13: case 13:
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438); AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 438);
mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->card), sizeof(struct MEWonderCardData)); mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->card), sizeof(struct WonderCard));
break; break;
case 16: case 16:
AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444); AGB_ASSERT_EX(cmd->flag == FALSE, ABSPATH("mevent_server.c"), 444);
+39 -39
View File
@@ -17,8 +17,8 @@ struct MEventScreenMgr_02DC
struct MEventScreenMgr struct MEventScreenMgr
{ {
/*0000*/ struct MEWonderCardData wonderCard; /*0000*/ struct WonderCard wonderCard;
/*014c*/ struct MEventBuffer_3430_Sub buff3430Sub; /*014c*/ struct WonderCardMetadata buff3430Sub;
/*0170*/ const struct UnkStruct_8467FB8 * bgSpec; /*0170*/ const struct UnkStruct_8467FB8 * bgSpec;
/*0174*/ u8 state; /*0174*/ u8 state;
/*0175*/ u8 recordIdx; /*0175*/ u8 recordIdx;
@@ -134,7 +134,7 @@ static const struct UnkStruct_8467FB8 sCardGfxPtrs[8] = {
{1, 0, 0, 7, sCard7Gfx, sCard7Map, sCard7Pal} {1, 0, 0, 7, sCard7Gfx, sCard7Map, sCard7Pal}
}; };
bool32 InitWonderCardResources(struct MEWonderCardData * card, struct MEventBuffer_3430_Sub * b3430sub) bool32 InitWonderCardResources(struct WonderCard * card, struct WonderCardMetadata * b3430sub)
{ {
if (card == NULL || b3430sub == NULL) if (card == NULL || b3430sub == NULL)
return FALSE; return FALSE;
@@ -143,13 +143,13 @@ bool32 InitWonderCardResources(struct MEWonderCardData * card, struct MEventBuff
return FALSE; return FALSE;
sMEventScreenData->wonderCard = *card; sMEventScreenData->wonderCard = *card;
sMEventScreenData->buff3430Sub = *b3430sub; sMEventScreenData->buff3430Sub = *b3430sub;
if (sMEventScreenData->wonderCard.unk_08_2 >= NELEMS(sCardGfxPtrs)) if (sMEventScreenData->wonderCard.bgType >= NELEMS(sCardGfxPtrs))
sMEventScreenData->wonderCard.unk_08_2 = 0; sMEventScreenData->wonderCard.bgType = 0;
if (sMEventScreenData->wonderCard.unk_08_0 >= NELEMS(sTextYCoords)) if (sMEventScreenData->wonderCard.type >= NELEMS(sTextYCoords))
sMEventScreenData->wonderCard.unk_08_0 = 0; sMEventScreenData->wonderCard.type = 0;
if (sMEventScreenData->wonderCard.recvMonCapacity > NELEMS(sMEventScreenData->cardIconAndShadowSprites)) if (sMEventScreenData->wonderCard.maxStamps > NELEMS(sMEventScreenData->cardIconAndShadowSprites))
sMEventScreenData->wonderCard.recvMonCapacity = 0; sMEventScreenData->wonderCard.maxStamps = 0;
sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.unk_08_2]; sMEventScreenData->bgSpec = &sCardGfxPtrs[sMEventScreenData->wonderCard.bgType];
return TRUE; return TRUE;
} }
@@ -282,24 +282,24 @@ static void sub_8145A98(void)
u16 r6; u16 r6;
u16 sp0[3] = {0, 0, 0}; u16 sp0[3] = {0, 0, 0};
memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.unk_0A, 40); memcpy(sMEventScreenData->title, sMEventScreenData->wonderCard.titleText, 40);
sMEventScreenData->title[40] = EOS; sMEventScreenData->title[40] = EOS;
memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.unk_32, 40); memcpy(sMEventScreenData->subtitle, sMEventScreenData->wonderCard.subtitleText, 40);
sMEventScreenData->subtitle[40] = EOS; sMEventScreenData->subtitle[40] = EOS;
if (sMEventScreenData->wonderCard.unk_04 > 999999) if (sMEventScreenData->wonderCard.idNumber > 999999)
sMEventScreenData->wonderCard.unk_04 = 999999; sMEventScreenData->wonderCard.idNumber = 999999;
ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); ConvertIntToDecimalStringN(sMEventScreenData->unk_01DD, sMEventScreenData->wonderCard.idNumber, STR_CONV_MODE_LEFT_ALIGN, 6);
for (i = 0; i < 4; i++) for (i = 0; i < 4; i++)
{ {
memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.unk_5A[i], 40); memcpy(sMEventScreenData->mainMessageLines[i], sMEventScreenData->wonderCard.bodyText[i], 40);
sMEventScreenData->mainMessageLines[i][40] = EOS; sMEventScreenData->mainMessageLines[i][40] = EOS;
} }
memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.unk_FA, 40); memcpy(sMEventScreenData->instructionsLine1, sMEventScreenData->wonderCard.footerLine1Text, 40);
sMEventScreenData->instructionsLine1[40] = EOS; sMEventScreenData->instructionsLine1[40] = EOS;
switch (sMEventScreenData->wonderCard.unk_08_0) switch (sMEventScreenData->wonderCard.type)
{ {
case 0: case 0:
memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.unk_122, 40); memcpy(sMEventScreenData->instructionsLine2, sMEventScreenData->wonderCard.footerLine2Text, 40);
sMEventScreenData->instructionsLine2[40] = EOS; sMEventScreenData->instructionsLine2[40] = EOS;
break; break;
case 1: case 1:
@@ -307,9 +307,9 @@ static void sub_8145A98(void)
break; break;
case 2: case 2:
sMEventScreenData->instructionsLine2[00] = EOS; sMEventScreenData->instructionsLine2[00] = EOS;
sp0[0] = sMEventScreenData->buff3430Sub.linkWins < 999 ? sMEventScreenData->buff3430Sub.linkWins : 999; sp0[0] = sMEventScreenData->buff3430Sub.battlesWon < 999 ? sMEventScreenData->buff3430Sub.battlesWon : 999;
sp0[1] = sMEventScreenData->buff3430Sub.linkLosses < 999 ? sMEventScreenData->buff3430Sub.linkLosses : 999; sp0[1] = sMEventScreenData->buff3430Sub.battlesLost < 999 ? sMEventScreenData->buff3430Sub.battlesLost : 999;
sp0[2] = sMEventScreenData->buff3430Sub.linkTrades < 999 ? sMEventScreenData->buff3430Sub.linkTrades : 999; sp0[2] = sMEventScreenData->buff3430Sub.numTrades < 999 ? sMEventScreenData->buff3430Sub.numTrades : 999;
for (i = 0; i < 8; i++) for (i = 0; i < 8; i++)
{ {
memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4); memset(sMEventScreenData->recordStrings[i].numberTxt, EOS, 4);
@@ -317,14 +317,14 @@ static void sub_8145A98(void)
} }
for (i = 0, r6 = 0; i < 40; i++) for (i = 0, r6 = 0; i < 40; i++)
{ {
if (sMEventScreenData->wonderCard.unk_122[i] != CHAR_DYNAMIC_PLACEHOLDER) if (sMEventScreenData->wonderCard.footerLine2Text[i] != CHAR_DYNAMIC_PLACEHOLDER)
{ {
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.unk_122[i]; sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nameTxt[r6] = sMEventScreenData->wonderCard.footerLine2Text[i];
r6++; r6++;
} }
else else
{ {
u8 r3 = sMEventScreenData->wonderCard.unk_122[i + 1]; u8 r3 = sMEventScreenData->wonderCard.footerLine2Text[i + 1];
if (r3 > 2) if (r3 > 2)
{ {
i += 2; i += 2;
@@ -332,7 +332,7 @@ static void sub_8145A98(void)
else else
{ {
ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); ConvertIntToDecimalStringN(sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].numberTxt, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3);
sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.unk_122[i + 2]; sMEventScreenData->recordStrings[sMEventScreenData->recordIdx].nDigits = sMEventScreenData->wonderCard.footerLine2Text[i + 2];
sMEventScreenData->recordIdx++; sMEventScreenData->recordIdx++;
if (sMEventScreenData->recordIdx > 7) if (sMEventScreenData->recordIdx > 7)
break; break;
@@ -360,7 +360,7 @@ static void sub_8145D18(u8 whichWindow)
if (x < 0) if (x < 0)
x = 0; x = 0;
AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle); AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->subtitle);
if (sMEventScreenData->wonderCard.unk_04 != 0) if (sMEventScreenData->wonderCard.idNumber != 0)
{ {
AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD); AddTextPrinterParameterized3(windowId, 2, 166, 17, gUnknown_8467068[sMEventScreenData->bgSpec->textPal1], 0, sMEventScreenData->unk_01DD);
} }
@@ -373,15 +373,15 @@ static void sub_8145D18(u8 whichWindow)
} }
break; break;
case 2: case 2:
AddTextPrinterParameterized3(windowId, 3, 0, sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1); AddTextPrinterParameterized3(windowId, 3, 0, sTextYCoords[sMEventScreenData->wonderCard.type], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine1);
if (sMEventScreenData->wonderCard.unk_08_0 != 2) if (sMEventScreenData->wonderCard.type != 2)
{ {
AddTextPrinterParameterized3(windowId, 3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.unk_08_0], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2); AddTextPrinterParameterized3(windowId, 3, 0, 16 + sTextYCoords[sMEventScreenData->wonderCard.type], gUnknown_8467068[sMEventScreenData->bgSpec->textPal3], 0, sMEventScreenData->instructionsLine2);
} }
else else
{ {
s32 x = 0; s32 x = 0;
s32 y = sTextYCoords[sMEventScreenData->wonderCard.unk_08_0] + 16; s32 y = sTextYCoords[sMEventScreenData->wonderCard.type] + 16;
s32 spacing = GetFontAttribute(3, 2); s32 spacing = GetFontAttribute(3, 2);
for (; sp0C < sMEventScreenData->recordIdx; sp0C++) for (; sp0C < sMEventScreenData->recordIdx; sp0C++)
{ {
@@ -403,23 +403,23 @@ static void sub_8146060(void)
{ {
u8 r7 = 0; u8 r7 = 0;
sMEventScreenData->monIconId = 0xFF; sMEventScreenData->monIconId = 0xFF;
if (sMEventScreenData->buff3430Sub.unk_06 != SPECIES_NONE) if (sMEventScreenData->buff3430Sub.iconSpecies != SPECIES_NONE)
{ {
sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); sMEventScreenData->monIconId = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.iconSpecies), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE);
gSprites[sMEventScreenData->monIconId].oam.priority = 2; gSprites[sMEventScreenData->monIconId].oam.priority = 2;
} }
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1) if (sMEventScreenData->wonderCard.maxStamps != 0 && sMEventScreenData->wonderCard.type == 1)
{ {
LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet); LoadCompressedSpriteSheetUsingHeap(&sShadowSpriteSheet);
LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]); LoadSpritePalette(&sShadowSpritePalettes[sMEventScreenData->bgSpec->index]);
for (; r7 < sMEventScreenData->wonderCard.recvMonCapacity; r7++) for (; r7 < sMEventScreenData->wonderCard.maxStamps; r7++)
{ {
sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF; sMEventScreenData->cardIconAndShadowSprites[r7][0] = 0xFF;
sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF; sMEventScreenData->cardIconAndShadowSprites[r7][1] = 0xFF;
sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8); sMEventScreenData->cardIconAndShadowSprites[r7][0] = CreateSprite(&sShadowSpriteTemplate, 0xd8 - 32 * r7, 0x90, 8);
if (sMEventScreenData->buff3430Sub.distributedMons[0][r7] != 0) if (sMEventScreenData->buff3430Sub.stampData[0][r7] != 0)
{ {
sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.distributedMons[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); sMEventScreenData->cardIconAndShadowSprites[r7][1] = CreateMonIcon_HandleDeoxys(MailSpeciesToIconSpecies(sMEventScreenData->buff3430Sub.stampData[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0);
gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2; gSprites[sMEventScreenData->cardIconAndShadowSprites[r7][1]].oam.priority = 2;
} }
} }
@@ -431,9 +431,9 @@ static void sub_81461D8(void)
u8 r6 = 0; u8 r6 = 0;
if (sMEventScreenData->monIconId != 0xFF) if (sMEventScreenData->monIconId != 0xFF)
DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]); DestroyMonIcon(&gSprites[sMEventScreenData->monIconId]);
if (sMEventScreenData->wonderCard.recvMonCapacity != 0 && sMEventScreenData->wonderCard.unk_08_0 == 1) if (sMEventScreenData->wonderCard.maxStamps != 0 && sMEventScreenData->wonderCard.type == 1)
{ {
for (; r6 < sMEventScreenData->wonderCard.recvMonCapacity; r6++) for (; r6 < sMEventScreenData->wonderCard.maxStamps; r6++)
{ {
if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF) if (sMEventScreenData->cardIconAndShadowSprites[r6][0] != 0xFF)
{ {
+7 -7
View File
@@ -9,7 +9,7 @@
struct UnkStruct_203F3CC struct UnkStruct_203F3CC
{ {
/*0000*/ struct MEWonderNewsData wonderNews; /*0000*/ struct WonderNews wonderNews;
/*01bc*/ const struct UnkStruct_8467FB8 * bgSpec; /*01bc*/ const struct UnkStruct_8467FB8 * bgSpec;
/*01c0*/ u8 verticalScrollDisabled:1; /*01c0*/ u8 verticalScrollDisabled:1;
u8 state:7; u8 state:7;
@@ -72,7 +72,7 @@ static const struct UnkStruct_8467FB8 sBgSpecs[] = {
{1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal} {1, 0, 0, 0, sNews7Gfx, sNews7Map, sNews7Pal}
}; };
bool32 InitWonderNewsResources(const struct MEWonderNewsData * news) bool32 InitWonderNewsResources(const struct WonderNews * news)
{ {
if (news == NULL) if (news == NULL)
return FALSE; return FALSE;
@@ -80,9 +80,9 @@ bool32 InitWonderNewsResources(const struct MEWonderNewsData * news)
if (sWork == NULL) if (sWork == NULL)
return FALSE; return FALSE;
sWork->wonderNews = *news; sWork->wonderNews = *news;
if (sWork->wonderNews.unk_03 >= NELEMS(sBgSpecs)) if (sWork->wonderNews.bgType >= NELEMS(sBgSpecs))
sWork->wonderNews.unk_03 = 0; sWork->wonderNews.bgType = 0;
sWork->bgSpec = &sBgSpecs[sWork->wonderNews.unk_03]; sWork->bgSpec = &sBgSpecs[sWork->wonderNews.bgType];
sWork->menuIndicatorsId = 0xFF; sWork->menuIndicatorsId = 0xFF;
return TRUE; return TRUE;
} }
@@ -297,11 +297,11 @@ u32 MENews_GetInput(u16 input)
static void sub_8146980(void) static void sub_8146980(void)
{ {
u8 i = 0; u8 i = 0;
memcpy(sWork->title, sWork->wonderNews.unk_04, 40); memcpy(sWork->title, sWork->wonderNews.titleText, 40);
sWork->title[40] = EOS; sWork->title[40] = EOS;
for (; i < 10; ++i) for (; i < 10; ++i)
{ {
memcpy(sWork->messages[i], sWork->wonderNews.unk_2C[i], 40); memcpy(sWork->messages[i], sWork->wonderNews.bodyText[i], 40);
sWork->messages[i][40] = EOS; sWork->messages[i][40] = EOS;
if (i > 7 && sWork->messages[i][0] != EOS) if (i > 7 && sWork->messages[i][0] != EOS)
++sWork->numMails; ++sWork->numMails;
+2 -2
View File
@@ -233,7 +233,7 @@ bool8 MEScrCmd_setrecordmixinggift(struct ScriptContext *ctx)
bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx) bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
{ {
struct MailStruct mail; struct Mail mail;
struct Pokemon pokemon; struct Pokemon pokemon;
u16 species; u16 species;
u16 heldItem; u16 heldItem;
@@ -257,7 +257,7 @@ bool8 MEScrCmd_givepokemon(struct ScriptContext *ctx)
else else
{ {
memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon)); memcpy(&gPlayerParty[5], pokemonPtr, sizeof(struct Pokemon));
memcpy(&mail, mailPtr, sizeof(struct MailStruct)); memcpy(&mail, mailPtr, sizeof(struct Mail));
if (species != SPECIES_EGG) if (species != SPECIES_EGG)
{ {
+1 -1
View File
@@ -2003,7 +2003,7 @@ static const struct NamingScreenTemplate sMonNamingScreenTemplate = {
static const struct NamingScreenTemplate sRivalNamingScreenTemplate = { static const struct NamingScreenTemplate sRivalNamingScreenTemplate = {
.copyExistingString = FALSE, .copyExistingString = FALSE,
.maxChars = OT_NAME_LENGTH, .maxChars = PLAYER_NAME_LENGTH,
.iconFunction = 4, .iconFunction = 4,
.addGenderIcon = 0, .addGenderIcon = 0,
.initialPage = KBPAGE_LETTERS_UPPER, .initialPage = KBPAGE_LETTERS_UPPER,
+2 -2
View File
@@ -118,8 +118,8 @@ void NewGameInitData(void)
ClearMailData(); ClearMailData();
gSaveBlock2Ptr->specialSaveWarpFlags = 0; gSaveBlock2Ptr->specialSaveWarpFlags = 0;
gSaveBlock2Ptr->gcnLinkFlags = 0; gSaveBlock2Ptr->gcnLinkFlags = 0;
gSaveBlock2Ptr->field_AC = 1; gSaveBlock2Ptr->unkFlag1 = TRUE;
gSaveBlock2Ptr->field_AD = 0; gSaveBlock2Ptr->unkFlag2 = FALSE;
InitPlayerTrainerId(); InitPlayerTrainerId();
PlayTimeCounter_Reset(); PlayTimeCounter_Reset();
ClearPokedexFlags(); ClearPokedexFlags();
+2 -2
View File
@@ -1675,7 +1675,7 @@ void CB2_ReturnToFieldFromDiploma(void)
static void FieldCB_ShowMapNameOnContinue(void) static void FieldCB_ShowMapNameOnContinue(void)
{ {
if (SHOW_MAP_NAME_ENABLED) if (gMapHeader.showMapName == TRUE)
ShowMapNamePopup(FALSE); ShowMapNamePopup(FALSE);
FieldCB_WarpExitFadeFromBlack(); FieldCB_WarpExitFadeFromBlack();
} }
@@ -1909,7 +1909,7 @@ static bool32 load_map_stuff(u8 *state, bool32 a1)
MapPreview_LoadGfx(gMapHeader.regionMapSectionId); MapPreview_LoadGfx(gMapHeader.regionMapSectionId);
MapPreview_StartForestTransition(gMapHeader.regionMapSectionId); MapPreview_StartForestTransition(gMapHeader.regionMapSectionId);
} }
else if (SHOW_MAP_NAME_ENABLED) else if (gMapHeader.showMapName == TRUE)
{ {
ShowMapNamePopup(FALSE); ShowMapNamePopup(FALSE);
} }
+1 -1
View File
@@ -5662,7 +5662,7 @@ void ChooseMonToGiveMailFromMailbox(void)
static void TryGiveMailToSelectedMon(u8 taskId) static void TryGiveMailToSelectedMon(u8 taskId)
{ {
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
struct MailStruct *mail; struct Mail *mail;
gPartyMenuUseExitCallback = FALSE; gPartyMenuUseExitCallback = FALSE;
mail = &gSaveBlock1Ptr->mail[gPlayerPcMenuManager.cursorPos + 6 + gPlayerPcMenuManager.itemsAbove]; mail = &gSaveBlock1Ptr->mail[gPlayerPcMenuManager.cursorPos + 6 + gPlayerPcMenuManager.itemsAbove];
+2 -2
View File
@@ -442,7 +442,7 @@ static void PCMailCompaction(void)
{ {
if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE) if (gSaveBlock1Ptr->mail[i].itemId == ITEM_NONE)
{ {
struct MailStruct mail = gSaveBlock1Ptr->mail[i]; struct Mail mail = gSaveBlock1Ptr->mail[i];
gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j]; gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j];
gSaveBlock1Ptr->mail[j] = mail; gSaveBlock1Ptr->mail[j] = mail;
} }
@@ -629,7 +629,7 @@ static void Task_MoveToBagYesNoMenuHandleInput(u8 taskId)
static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId) static void Task_TryPutMailInBag_DestroyMsgIfSuccessful(u8 taskId)
{ {
struct MailStruct * mail = &SELECTED_MAIL; struct Mail * mail = &SELECTED_MAIL;
if (!AddBagItem(mail->itemId, 1)) if (!AddBagItem(mail->itemId, 1))
{ {
DisplayItemMessageOnField(taskId, 2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu); DisplayItemMessageOnField(taskId, 2, gText_BagIsFull, Task_PlayerPcExitMailSubmenu);
-6
View File
@@ -36,12 +36,6 @@
#include "constants/hold_effects.h" #include "constants/hold_effects.h"
#include "constants/battle_move_effects.h" #include "constants/battle_move_effects.h"
// Extracts the upper 16 bits of a 32-bit number
#define HIHALF(n) (((n) & 0xFFFF0000) >> 16)
// Extracts the lower 16 bits of a 32-bit number
#define LOHALF(n) ((n) & 0xFFFF)
#define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name #define SPECIES_TO_HOENN(name) [SPECIES_##name - 1] = HOENN_DEX_##name
#define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name #define SPECIES_TO_NATIONAL(name) [SPECIES_##name - 1] = NATIONAL_DEX_##name
#define HOENN_TO_NATIONAL(name) [HOENN_DEX_##name - 1] = NATIONAL_DEX_##name #define HOENN_TO_NATIONAL(name) [HOENN_DEX_##name - 1] = NATIONAL_DEX_##name
+10 -10
View File
@@ -10,25 +10,25 @@ static void Task_ShowPokemonJumpRecords(u8 taskId);
static void TruncateToFirstWordOnly(u8 *str); static void TruncateToFirstWordOnly(u8 *str);
static void sub_814B5C4(u16 windowId); static void sub_814B5C4(u16 windowId);
static struct PokemonJumpResults *sub_814B46C(void) static struct PokemonJumpRecords *sub_814B46C(void)
{ {
return &gSaveBlock2Ptr->pokeJump; return &gSaveBlock2Ptr->pokeJump;
} }
void ResetPokeJumpResults(void) void ResetPokeJumpResults(void)
{ {
struct PokemonJumpResults *pokeJump = sub_814B46C(); struct PokemonJumpRecords *pokeJump = sub_814B46C();
pokeJump->jumpsInRow = 0; pokeJump->jumpsInRow = 0;
pokeJump->bestJumpScore = 0; pokeJump->bestJumpScore = 0;
pokeJump->excellentsInRow = 0; pokeJump->excellentsInRow = 0;
pokeJump->field6 = 0; pokeJump->gamesWithMaxPlayers = 0;
pokeJump->field8 = 0; pokeJump->unused2 = 0;
pokeJump->field2 = 0; pokeJump->unused1 = 0;
} }
bool32 sub_814B494(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow) bool32 sub_814B494(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow)
{ {
struct PokemonJumpResults *pokeJump = sub_814B46C(); struct PokemonJumpRecords *pokeJump = sub_814B46C();
bool32 ret = FALSE; bool32 ret = FALSE;
if (pokeJump->bestJumpScore < jumpScore && jumpScore <= 99990) if (pokeJump->bestJumpScore < jumpScore && jumpScore <= 99990)
@@ -43,9 +43,9 @@ bool32 sub_814B494(u32 jumpScore, u16 jumpsInRow, u16 excellentsInRow)
void sub_814B4E8(void) void sub_814B4E8(void)
{ {
struct PokemonJumpResults *pokeJump = sub_814B46C(); struct PokemonJumpRecords *pokeJump = sub_814B46C();
if (pokeJump->field6 < 9999) if (pokeJump->gamesWithMaxPlayers < 9999)
pokeJump->field6++; pokeJump->gamesWithMaxPlayers++;
} }
void ShowPokemonJumpRecords(void) void ShowPokemonJumpRecords(void)
@@ -106,7 +106,7 @@ static void sub_814B5C4(u16 windowId)
{ {
int i, x; int i, x;
int results[3]; int results[3];
struct PokemonJumpResults *pokeJump = sub_814B46C(); struct PokemonJumpRecords *pokeJump = sub_814B46C();
u8 strbuf[8]; u8 strbuf[8];
results[0] = pokeJump->jumpsInRow; results[0] = pokeJump->jumpsInRow;
results[1] = pokeJump->bestJumpScore; results[1] = pokeJump->bestJumpScore;
+1 -1
View File
@@ -2126,7 +2126,7 @@ static void BufferMonInfo(void)
StringCopy(sMonSummaryScreen->summary.genderSymbolStrBuf, gString_Dummy); StringCopy(sMonSummaryScreen->summary.genderSymbolStrBuf, gString_Dummy);
GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OT_NAME, tempStr); GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_OT_NAME, tempStr);
StringCopyN_Multibyte(sMonSummaryScreen->summary.otNameStrBuf, tempStr, OT_NAME_LENGTH); StringCopyN_Multibyte(sMonSummaryScreen->summary.otNameStrBuf, tempStr, PLAYER_NAME_LENGTH);
ConvertInternationalString(sMonSummaryScreen->summary.otNameStrBuf, GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_LANGUAGE)); ConvertInternationalString(sMonSummaryScreen->summary.otNameStrBuf, GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_LANGUAGE));
+4 -4
View File
@@ -79,7 +79,7 @@ enum TradeStatusMsg
static EWRAM_DATA u8 *sSpriteTextTileBuffer = NULL; static EWRAM_DATA u8 *sSpriteTextTileBuffer = NULL;
static EWRAM_DATA u8 *sSpriteTextTilePtrs[14] = {}; static EWRAM_DATA u8 *sSpriteTextTilePtrs[14] = {};
EWRAM_DATA struct MailStruct gLinkPartnerMail[6] = {}; EWRAM_DATA struct Mail gLinkPartnerMail[6] = {};
EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0}; EWRAM_DATA u8 gSelectedTradeMonPositions[2] = {0};
static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL; static EWRAM_DATA struct TradeMenuResources * sTradeMenuResourcesPtr = NULL;
@@ -119,7 +119,7 @@ static const size_t sSizesAndOffsets[] = {
sizeof(struct MapLayout), sizeof(struct MapLayout),
0x530, // unk 0x530, // unk
0x34, // unk 0x34, // unk
sizeof(struct MailStruct), sizeof(struct Mail),
sizeof(struct Pokemon), sizeof(struct Pokemon),
0x528 // unk 0x528 // unk
}; };
@@ -1398,7 +1398,7 @@ static bool8 shedinja_maker_maybe(void)
} }
break; break;
case 13: case 13:
Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct MailStruct) + 4); // why the extra 4 bytes? Trade_Memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, PARTY_SIZE * sizeof(struct Mail) + 4); // why the extra 4 bytes?
sTradeMenuResourcesPtr->state++; sTradeMenuResourcesPtr->state++;
break; break;
case 15: case 15:
@@ -1411,7 +1411,7 @@ static bool8 shedinja_maker_maybe(void)
case 16: case 16:
if (GetBlockReceivedStatus() == 3) if (GetBlockReceivedStatus() == 3)
{ {
Trade_Memcpy(gLinkPartnerMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct MailStruct)); Trade_Memcpy(gLinkPartnerMail, gBlockRecvBuffer[id ^ 1], PARTY_SIZE * sizeof(struct Mail));
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
sTradeMenuResourcesPtr->state++; sTradeMenuResourcesPtr->state++;
} }
+3 -3
View File
@@ -131,7 +131,7 @@ static void SpriteCB_TradePokeball_Outbound(struct Sprite * sprite);
static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite); static void SpriteCB_TradePokeball_Outbound2(struct Sprite * sprite);
static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite); static void SpriteCB_TradePokeball_Inbound(struct Sprite * sprite);
static void BufferInGameTradeMonName(void); static void BufferInGameTradeMonName(void);
static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade); static void GetInGameTradeMail(struct Mail * mail, const struct InGameTrade * inGameTrade);
static void CB2_RunTradeAnim_LinkTrade(void); static void CB2_RunTradeAnim_LinkTrade(void);
static void CB2_WaitAndAckTradeComplete(void); static void CB2_WaitAndAckTradeComplete(void);
static void CB2_HandleTradeEnded(void); static void CB2_HandleTradeEnded(void);
@@ -2432,7 +2432,7 @@ static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx)
{ {
const struct InGameTrade * inGameTrade = &sInGameTrades[inGameTradeIdx]; const struct InGameTrade * inGameTrade = &sInGameTrades[inGameTradeIdx];
u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL); u8 level = GetMonData(&gPlayerParty[playerSlot], MON_DATA_LEVEL);
struct MailStruct mail; struct Mail mail;
u8 metLocation = METLOC_IN_GAME_TRADE; u8 metLocation = METLOC_IN_GAME_TRADE;
struct Pokemon * tradeMon = &gEnemyParty[0]; struct Pokemon * tradeMon = &gEnemyParty[0];
u8 mailNum; u8 mailNum;
@@ -2472,7 +2472,7 @@ static void CreateInGameTradePokemonInternal(u8 playerSlot, u8 inGameTradeIdx)
CalculateMonStats(&gEnemyParty[0]); CalculateMonStats(&gEnemyParty[0]);
} }
static void GetInGameTradeMail(struct MailStruct * mail, const struct InGameTrade * inGameTrade) static void GetInGameTradeMail(struct Mail * mail, const struct InGameTrade * inGameTrade)
{ {
int i; int i;
for (i = 0; i < MAIL_WORDS_COUNT; i++) for (i = 0; i < MAIL_WORDS_COUNT; i++)
+3 -3
View File
@@ -1768,14 +1768,14 @@ static void Task_StartUnionRoomTrade(u8 taskId)
} }
break; break;
case 2: case 2:
memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct MailStruct) * PARTY_SIZE + 4); memcpy(gBlockSendBuffer, gSaveBlock1Ptr->mail, sizeof(struct Mail) * PARTY_SIZE + 4);
if (SendBlock(0, gBlockSendBuffer, sizeof(struct MailStruct) * PARTY_SIZE + 4)) if (SendBlock(0, gBlockSendBuffer, sizeof(struct Mail) * PARTY_SIZE + 4))
gTasks[taskId].data[0]++; gTasks[taskId].data[0]++;
break; break;
case 3: case 3:
if (GetBlockReceivedStatus() == 3) if (GetBlockReceivedStatus() == 3)
{ {
memcpy(gLinkPartnerMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct MailStruct) * PARTY_SIZE); memcpy(gLinkPartnerMail, gBlockRecvBuffer[GetMultiplayerId() ^ 1], sizeof(struct Mail) * PARTY_SIZE);
ResetBlockReceivedFlags(); ResetBlockReceivedFlags();
gSelectedTradeMonPositions[TRADE_PLAYER] = monId; gSelectedTradeMonPositions[TRADE_PLAYER] = monId;
gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE; gSelectedTradeMonPositions[TRADE_PARTNER] = PARTY_SIZE;