diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/abilities.h | 81 | ||||
-rw-r--r-- | include/battle.h | 24 | ||||
-rw-r--r-- | include/gba/gba.h | 1 | ||||
-rw-r--r-- | include/gba/io_reg.h | 3 | ||||
-rw-r--r-- | include/gba/macro.h | 2 | ||||
-rw-r--r-- | include/gba/multiboot.h | 55 | ||||
-rw-r--r-- | include/gba/syscall.h | 16 | ||||
-rw-r--r-- | include/gba/types.h | 21 | ||||
-rw-r--r-- | include/global.h | 93 | ||||
-rw-r--r-- | include/main.h | 63 | ||||
-rw-r--r-- | include/multiboot.h | 21 | ||||
-rw-r--r-- | include/pokemon.h | 311 | ||||
-rw-r--r-- | include/rng.h | 18 | ||||
-rw-r--r-- | include/siirtc.h | 54 | ||||
-rw-r--r-- | include/species.h | 445 | ||||
-rw-r--r-- | include/string_util.h | 42 | ||||
-rw-r--r-- | include/text.h | 14 |
17 files changed, 1264 insertions, 0 deletions
diff --git a/include/abilities.h b/include/abilities.h new file mode 100644 index 000000000..4c47025f8 --- /dev/null +++ b/include/abilities.h @@ -0,0 +1,81 @@ +enum +{ + ABILITY_NONE, + ABILITY_STENCH, + ABILITY_DRIZZLE, + ABILITY_SPEED_BOOST, + ABILITY_BATTLE_ARMOR, + ABILITY_STURDY, + ABILITY_DAMP, + ABILITY_LIMBER, + ABILITY_SAND_VEIL, + ABILITY_STATIC, + ABILITY_VOLT_ABSORB, + ABILITY_WATER_ABSORB, + ABILITY_OBLIVIOUS, + ABILITY_CLOUD_NINE, + ABILITY_COMPOUND_EYES, + ABILITY_INSOMNIA, + ABILITY_COLOR_CHANGE, + ABILITY_IMMUNITY, + ABILITY_FLASH_FIRE, + ABILITY_SHIELD_DUST, + ABILITY_OWN_TEMPO, + ABILITY_SUCTION_CUPS, + ABILITY_INTIMIDATE, + ABILITY_SHADOW_TAG, + ABILITY_ROUGH_SKIN, + ABILITY_WONDER_GUARD, + ABILITY_LEVITATE, + ABILITY_EFFECT_SPORE, + ABILITY_SYNCHRONIZE, + ABILITY_CLEAR_BODY, + ABILITY_NATURAL_CURE, + ABILITY_LIGHTNING_ROD, + ABILITY_SERENE_GRACE, + ABILITY_SWIFT_SWIM, + ABILITY_CHLOROPHYLL, + ABILITY_ILLUMINATE, + ABILITY_TRACE, + ABILITY_HUGE_POWER, + ABILITY_POISON_POINT, + ABILITY_INNER_FOCUS, + ABILITY_MAGMA_ARMOR, + ABILITY_WATER_VEIL, + ABILITY_MAGNET_PULL, + ABILITY_SOUNDPROOF, + ABILITY_RAIN_DISH, + ABILITY_SAND_STREAM, + ABILITY_PRESSURE, + ABILITY_THICK_FAT, + ABILITY_EARLY_BIRD, + ABILITY_FLAME_BODY, + ABILITY_RUN_AWAY, + ABILITY_KEEN_EYE, + ABILITY_HYPER_CUTTER, + ABILITY_PICKUP, + ABILITY_TRUANT, + ABILITY_HUSTLE, + ABILITY_CUTE_CHARM, + ABILITY_PLUS, + ABILITY_MINUS, + ABILITY_FORECAST, + ABILITY_STICKY_HOLD, + ABILITY_SHED_SKIN, + ABILITY_GUTS, + ABILITY_MARVEL_SCALE, + ABILITY_LIQUID_OOZE, + ABILITY_OVERGROW, + ABILITY_BLAZE, + ABILITY_TORRENT, + ABILITY_SWARM, + ABILITY_ROCK_HEAD, + ABILITY_DROUGHT, + ABILITY_ARENA_TRAP, + ABILITY_VITAL_SPIRIT, + ABILITY_WHITE_SMOKE, + ABILITY_PURE_POWER, + ABILITY_SHELL_ARMOR, + ABILITY_CACOPHONY, + ABILITY_AIR_LOCK +};
\ No newline at end of file diff --git a/include/battle.h b/include/battle.h new file mode 100644 index 000000000..fa42a7b53 --- /dev/null +++ b/include/battle.h @@ -0,0 +1,24 @@ +#define BATTLE_TYPE_DOUBLE 0x0001 +#define BATTLE_TYPE_LINK 0x0002 +#define BATTLE_TYPE_WILD 0x0004 +#define BATTLE_TYPE_TRAINER 0x0008 +#define BATTLE_TYPE_FIRST_BATTLE 0x0010 +#define BATTLE_TYPE_20 0x0020 +#define BATTLE_TYPE_40 0x0040 +#define BATTLE_TYPE_SAFARI 0x0080 +#define BATTLE_TYPE_BATTLE_TOWER 0x0100 +#define BATTLE_TYPE_WALLY_TUTORIAL 0x0200 +#define BATTLE_TYPE_ROAMER 0x0400 +#define BATTLE_TYPE_EREADER_TRAINER 0x0800 +#define BATTLE_TYPE_KYOGRE_GROUDON 0x1000 +#define BATTLE_TYPE_LEGENDARY 0x2000 +#define BATTLE_TYPE_REGI 0x4000 + +#define AI_ACTION_UNK1 0x0001 +#define AI_ACTION_UNK2 0x0002 +#define AI_ACTION_UNK3 0x0004 +#define AI_ACTION_UNK4 0x0008 +#define AI_ACTION_UNK5 0x0010 +#define AI_ACTION_UNK6 0x0020 +#define AI_ACTION_UNK7 0x0040 +#define AI_ACTION_UNK8 0x0080
\ No newline at end of file diff --git a/include/gba/gba.h b/include/gba/gba.h index 26342cf88..42ae3cdde 100644 --- a/include/gba/gba.h +++ b/include/gba/gba.h @@ -4,6 +4,7 @@ #include "gba/defines.h" #include "gba/io_reg.h" #include "gba/types.h" +#include "gba/multiboot.h" #include "gba/syscall.h" #include "gba/macro.h" diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h index 0be92fa60..5234e5b6c 100644 --- a/include/gba/io_reg.h +++ b/include/gba/io_reg.h @@ -577,6 +577,8 @@ #define TIMER_ENABLE 0x80 // serial +#define SIO_ID 0x0030 // Communication ID + #define SIO_8BIT_MODE 0x0000 // Normal 8-bit communication mode #define SIO_32BIT_MODE 0x1000 // Normal 32-bit communication mode #define SIO_MULTI_MODE 0x2000 // Multi-player communication mode @@ -589,6 +591,7 @@ #define SIO_MULTI_SI 0x0004 // Multi-player communication SI terminal #define SIO_MULTI_SD 0x0008 // SD terminal +#define SIO_MULTI_BUSY 0x0080 #define SIO_ERROR 0x0040 // Detect error #define SIO_START 0x0080 // Start transfer diff --git a/include/gba/macro.h b/include/gba/macro.h index 62d3e73fa..230fb4383 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -25,6 +25,8 @@ CPU_FAST_SET_SRC_FIXED | ((size)/(32/8) & 0x1FFFFF)); \ } +#define CpuFastFill16(value, dest, size) CpuFastFill(((value) << 16) | (value), (dest), (size)) + #define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF)) #define DmaSet(dmaNum, src, dest, control) \ diff --git a/include/gba/multiboot.h b/include/gba/multiboot.h new file mode 100644 index 000000000..e88b43a19 --- /dev/null +++ b/include/gba/multiboot.h @@ -0,0 +1,55 @@ +#ifndef GUARD_GBA_MULTIBOOT_H +#define GUARD_GBA_MULTIBOOT_H + +#define MULTIBOOT_NCHILD 3 // Maximum number of slaves +#define MULTIBOOT_HEADER_SIZE 0xc0 // Header size +#define MULTIBOOT_SEND_SIZE_MIN 0x100 // Minimum transmission size +#define MULTIBOOT_SEND_SIZE_MAX 0x40000 // Maximum transmission size + +struct MultiBootParam +{ + u32 system_work[5]; + u8 handshake_data; + u8 padding; + u16 handshake_timeout; + u8 probe_count; + u8 client_data[MULTIBOOT_NCHILD]; + u8 palette_data; + u8 response_bit; + u8 client_bit; + u8 reserved1; + u8 *boot_srcp; + u8 *boot_endp; + u8 *masterp; + u8 *reserved2[MULTIBOOT_NCHILD]; + u32 system_work2[4]; + u8 sendflag; + u8 probe_target_bit; + u8 check_wait; + u8 server_type; +}; + +#define MULTIBOOT_ERROR_04 0x04 +#define MULTIBOOT_ERROR_08 0x08 +#define MULTIBOOT_ERROR_0c 0x0c +#define MULTIBOOT_ERROR_40 0x40 +#define MULTIBOOT_ERROR_44 0x44 +#define MULTIBOOT_ERROR_48 0x48 +#define MULTIBOOT_ERROR_4c 0x4c +#define MULTIBOOT_ERROR_80 0x80 +#define MULTIBOOT_ERROR_84 0x84 +#define MULTIBOOT_ERROR_88 0x88 +#define MULTIBOOT_ERROR_8c 0x8c +#define MULTIBOOT_ERROR_NO_PROBE_TARGET 0x50 +#define MULTIBOOT_ERROR_NO_DLREADY 0x60 +#define MULTIBOOT_ERROR_BOOT_FAILURE 0x70 +#define MULTIBOOT_ERROR_HANDSHAKE_FAILURE 0x71 + +#define MULTIBOOT_CONNECTION_CHECK_WAIT 15 + +#define MULTIBOOT_SERVER_TYPE_NORMAL 0 +#define MULTIBOOT_SERVER_TYPE_QUICK 1 + +#define MULTIBOOT_HANDSHAKE_TIMEOUT 400 + +#endif // GUARD_GBA_MULTIBOOT_H diff --git a/include/gba/syscall.h b/include/gba/syscall.h index 3f41abba1..deddec5ba 100644 --- a/include/gba/syscall.h +++ b/include/gba/syscall.h @@ -17,6 +17,10 @@ void RegisterRamReset(u32 resetFlags); void VBlankIntrWait(void); +u16 Sqrt(u32 num); + +u16 ArcTan2(s16 x, s16 y); + #define CPU_SET_SRC_FIXED 0x01000000 #define CPU_SET_16BIT 0x00000000 #define CPU_SET_32BIT 0x04000000 @@ -27,6 +31,18 @@ void CpuSet(const void *src, void *dest, u32 control); void CpuFastSet(const void *src, void *dest, u32 control); +void BgAffineSet(struct BgAffineSrcData *src, struct BgAffineDstData *dest, s32 count); + void ObjAffineSet(struct ObjAffineSrcData *src, void *dest, s32 count, s32 offset); +void LZ77UnCompWram(const void *src, void *dest); + +void LZ77UnCompVram(const void *src, void *dest); + +void RLUnCompWram(const void *src, void *dest); + +void RLUnCompVram(const void *src, void *dest); + +int MultiBoot(struct MultiBootParam *mp); + #endif // GUARD_GBA_SYSCALL_H diff --git a/include/gba/types.h b/include/gba/types.h index be7390d5a..fd8a20a4c 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -74,6 +74,27 @@ struct OamData #define ST_OAM_H_RECTANGLE 1 #define ST_OAM_V_RECTANGLE 2 +struct BgAffineSrcData +{ + s32 texX; + s32 texY; + s16 scrX; + s16 scrY; + s16 sx; + s16 sy; + u16 alpha; +}; + +struct BgAffineDstData +{ + s16 pa; + s16 pb; + s16 pc; + s16 pd; + s32 dx; + s32 dy; +}; + struct ObjAffineSrcData { s16 xScale; diff --git a/include/global.h b/include/global.h index 0047fcbdb..b7038025b 100644 --- a/include/global.h +++ b/include/global.h @@ -3,4 +3,97 @@ #include "gba/gba.h" +// Prevent cross-jump optimization. +#define BLOCK_CROSS_JUMP asm(""); + +// to help in decompiling +#define asm_comment(x) asm volatile("@ -- " x " -- ") + +#define ARRAY_COUNT(array) (sizeof(array) / sizeof((array)[0])) + +#define POKEMON_NAME_LENGTH 10 +#define OT_NAME_LENGTH 7 + +extern u8 gStringVar1[]; +extern u8 gStringVar2[]; +extern u8 gStringVar3[]; +extern u8 gStringVar4[]; + +enum +{ + VERSION_SAPPHIRE = 1, + VERSION_RUBY = 2, + VERSION_EMERALD = 3, +}; + +enum LanguageId { + LANGUAGE_JAPANESE = 1, + LANGUAGE_ENGLISH = 2, + LANGUAGE_GERMAN = 5, +}; + +#define GAME_LANGUAGE (LANGUAGE_ENGLISH) + +enum +{ + MALE, + FEMALE +}; + +enum +{ + OPTIONS_BUTTON_MODE_NORMAL, + OPTIONS_BUTTON_MODE_LR, + OPTIONS_BUTTON_MODE_L_EQUALS_A +}; + +enum +{ + OPTIONS_TEXT_SPEED_SLOW, + OPTIONS_TEXT_SPEED_MID, + OPTIONS_TEXT_SPEED_FAST +}; + +enum +{ + OPTIONS_SOUND_MONO, + OPTIONS_SOUND_STEREO +}; + +enum +{ + OPTIONS_BATTLE_STYLE_SHIFT, + OPTIONS_BATTLE_STYLE_SET +}; + +enum +{ + BAG_ITEMS = 1, + BAG_POKEBALLS, + BAG_TMsHMs, + BAG_BERRIES, + BAG_KEYITEMS +}; + +struct SaveBlock2 +{ + /*0x00*/ u8 playerName[8]; + /*0x08*/ u8 playerGender; // MALE, FEMALE + /*0x09*/ u8 specialSaveWarp; + /*0x0A*/ u8 playerTrainerId[4]; + /*0x0E*/ u16 playTimeHours; + /*0x10*/ u8 playTimeMinutes; + /*0x11*/ u8 playTimeSeconds; + /*0x12*/ u8 playTimeVBlanks; + /*0x13*/ u8 optionsButtonMode; // OPTIONS_BUTTON_MODE_[NORMAL/LR/L_EQUALS_A] + /*0x14*/ u16 optionsTextSpeed:3; // OPTIONS_TEXT_SPEED_[SLOW/MID/FAST] + u16 optionsWindowFrameType:5; // Specifies one of the 20 decorative borders for text boxes + u16 optionsSound:1; // OPTIONS_SOUND_[MONO/STEREO] + u16 optionsBattleStyle:1; // OPTIONS_BATTLE_STYLE_[SHIFT/SET] + u16 optionsBattleSceneOff:1; // whether battle animations are disabled + u16 regionMapZoom:1; // whether the map is zoomed in +}; + +extern struct SaveBlock2 *gSaveBlock2Ptr; + #endif // GUARD_GLOBAL_H diff --git a/include/main.h b/include/main.h new file mode 100644 index 000000000..e5460b3bf --- /dev/null +++ b/include/main.h @@ -0,0 +1,63 @@ +#ifndef GUARD_MAIN_H +#define GUARD_MAIN_H + +#include "global.h" + +typedef void (*MainCallback)(void); +typedef void (*IntrCallback)(void); +typedef void (*IntrFunc)(void); + +struct Main +{ + /*0x000*/ MainCallback callback1; + /*0x004*/ MainCallback callback2; + + /*0x008*/ MainCallback savedCallback; + + /*0x00C*/ IntrCallback vblankCallback; + /*0x010*/ IntrCallback hblankCallback; + /*0x014*/ IntrCallback vcountCallback; + /*0x018*/ IntrCallback serialCallback; + + /*0x01C*/ vu16 intrCheck; + + /*0x020*/ u32 vblankCounter1; + /*0x024*/ u32 vblankCounter2; + + /*0x028*/ u16 heldKeysRaw; // held keys without L=A remapping + /*0x02A*/ u16 newKeysRaw; // newly pressed keys without L=A remapping + /*0x02C*/ u16 heldKeys; // held keys with L=A remapping + /*0x02E*/ u16 newKeys; // newly pressed keys with L=A remapping + /*0x030*/ u16 newAndRepeatedKeys; // newly pressed keys plus key repeat + /*0x032*/ u16 keyRepeatCounter; // counts down to 0, triggering key repeat + /*0x034*/ bool16 watchedKeysPressed; // whether one of the watched keys was pressed + /*0x036*/ u16 watchedKeysMask; // bit mask for watched keys + + /*0x038*/ struct OamData oamBuffer[128]; + + /*0x438*/ u8 state; + + /*0x439*/ u8 oamLoadDisabled:1; + /*0x439*/ u8 inBattle:1; +}; + +extern u8 gUnknown_3001764; +extern struct Main gMain; +extern bool8 gSoftResetDisabled; +extern bool8 gLinkVSyncDisabled; + +extern const u8 gGameVersion; +extern const u8 gGameLanguage; + +void AgbMain(void); +void SetMainCallback2(MainCallback callback); +void InitKeys(void); +void SetVBlankCallback(IntrCallback callback); +void SetHBlankCallback(IntrCallback callback); +void SetVCountCallback(IntrCallback callback); +void SetSerialCallback(IntrCallback callback); +void InitFlashTimer(void); +void DoSoftReset(void); +void ClearPokemonCrySongs(void); + +#endif // GUARD_MAIN_H diff --git a/include/multiboot.h b/include/multiboot.h new file mode 100644 index 000000000..950c853d0 --- /dev/null +++ b/include/multiboot.h @@ -0,0 +1,21 @@ +#ifndef GUARD_MULTIBOOT_H +#define GUARD_MULTIBOOT_H + +#define MULTIBOOT_MASTER_INFO 0x62 +#define MULTIBOOT_CLIENT_INFO 0x72 +#define MULTIBOOT_MASTER_START_PROBE 0x61 +#define MULTIBOOT_MASTER_REQUEST_DLREADY 0x63 +#define MULTIBOOT_CLIENT_DLREADY 0x73 +#define MULTIBOOT_MASTER_START_DL 0x64 +#define MULTIBOOT_MASTER_REQUEST_CRC 0x65 +#define MULTIBOOT_CLIENT_CALC_CRC 0x74 +#define MULTIBOOT_CLIENT_CRCREADY 0x75 +#define MULTIBOOT_MASTER_VERIFY_CRC 0x66 + +void MultiBootInit(struct MultiBootParam *mp); +int MultiBootMain(struct MultiBootParam *mp); +void MultiBootStartProbe(struct MultiBootParam *mp); +void MultiBootStartMaster(struct MultiBootParam *mp, u8 *srcp, int length, u8 palette_color, s8 palette_speed); +int MultiBootCheckComplete(struct MultiBootParam *mp); + +#endif // GUARD_MULTIBOOT_H diff --git a/include/pokemon.h b/include/pokemon.h new file mode 100644 index 000000000..b3381a4b0 --- /dev/null +++ b/include/pokemon.h @@ -0,0 +1,311 @@ +#define MON_DATA_PERSONALITY 0 +#define MON_DATA_OT_ID 1 +#define MON_DATA_NICKNAME 2 +#define MON_DATA_LANGUAGE 3 +#define MON_DATA_SANITY_BIT1 4 +#define MON_DATA_SANITY_BIT2 5 +#define MON_DATA_SANITY_BIT3 6 +#define MON_DATA_OT_NAME 7 +#define MON_DATA_MARKINGS 8 +#define MON_DATA_CHECKSUM 9 +#define MON_DATA_10 10 +#define MON_DATA_SPECIES 11 +#define MON_DATA_HELD_ITEM 12 +#define MON_DATA_MOVE1 13 +#define MON_DATA_MOVE2 14 +#define MON_DATA_MOVE3 15 +#define MON_DATA_MOVE4 16 +#define MON_DATA_PP1 17 +#define MON_DATA_PP2 18 +#define MON_DATA_PP3 19 +#define MON_DATA_PP4 20 +#define MON_DATA_PP_BONUSES 21 +#define MON_DATA_COOL 22 +#define MON_DATA_BEAUTY 23 +#define MON_DATA_CUTE 24 +#define MON_DATA_EXP 25 +#define MON_DATA_HP_EV 26 +#define MON_DATA_ATK_EV 27 +#define MON_DATA_DEF_EV 28 +#define MON_DATA_SPD_EV 29 +#define MON_DATA_SPATK_EV 30 +#define MON_DATA_SPDEF_EV 31 +#define MON_DATA_FRIENDSHIP 32 +#define MON_DATA_SMART 33 +#define MON_DATA_POKERUS 34 +#define MON_DATA_MET_LOCATION 35 +#define MON_DATA_MET_LEVEL 36 +#define MON_DATA_MET_GAME 37 +#define MON_DATA_POKEBALL 38 +#define MON_DATA_HP_IV 39 +#define MON_DATA_ATK_IV 40 +#define MON_DATA_DEF_IV 41 +#define MON_DATA_SPD_IV 42 +#define MON_DATA_SPATK_IV 43 +#define MON_DATA_SPDEF_IV 44 +#define MON_DATA_IS_EGG 45 +#define MON_DATA_ALT_ABILITY 46 +#define MON_DATA_TOUGH 47 +#define MON_DATA_SHEEN 48 +#define MON_DATA_OT_GENDER 49 +#define MON_DATA_COOL_RIBBON 50 +#define MON_DATA_BEAUTY_RIBBON 51 +#define MON_DATA_CUTE_RIBBON 52 +#define MON_DATA_SMART_RIBBON 53 +#define MON_DATA_TOUGH_RIBBON 54 +#define MON_DATA_STATUS 55 +#define MON_DATA_LEVEL 56 +#define MON_DATA_HP 57 +#define MON_DATA_MAX_HP 58 +#define MON_DATA_ATK 59 +#define MON_DATA_DEF 60 +#define MON_DATA_SPD 61 +#define MON_DATA_SPATK 62 +#define MON_DATA_SPDEF 63 +#define MON_DATA_64 64 +#define MON_DATA_SPECIES2 65 +#define MON_DATA_IVS 66 +#define MON_DATA_CHAMPION_RIBBON 67 +#define MON_DATA_WINNING_RIBBON 68 +#define MON_DATA_VICTORY_RIBBON 69 +#define MON_DATA_ARTIST_RIBBON 70 +#define MON_DATA_EFFORT_RIBBON 71 +#define MON_DATA_GIFT_RIBBON_1 72 +#define MON_DATA_GIFT_RIBBON_2 73 +#define MON_DATA_GIFT_RIBBON_3 74 +#define MON_DATA_GIFT_RIBBON_4 75 +#define MON_DATA_GIFT_RIBBON_5 76 +#define MON_DATA_GIFT_RIBBON_6 77 +#define MON_DATA_GIFT_RIBBON_7 78 +#define MON_DATA_FATEFUL_ENCOUNTER 79 +#define MON_DATA_KNOWN_MOVES 80 +#define MON_DATA_RIBBON_COUNT 81 +#define MON_DATA_RIBBONS 82 +#define MON_DATA_83 83 +#define MON_DATA_ATK2 84 +#define MON_DATA_DEF2 85 +#define MON_DATA_SPD2 86 +#define MON_DATA_SPATK2 87 +#define MON_DATA_SPDEF2 88 + +#define MON_MALE 0x00 +#define MON_FEMALE 0xFE +#define MON_GENDERLESS 0xFF + +#define TYPE_NORMAL 0x00 +#define TYPE_FIGHTING 0x01 +#define TYPE_FLYING 0x02 +#define TYPE_POISON 0x03 +#define TYPE_GROUND 0x04 +#define TYPE_ROCK 0x05 +#define TYPE_BUG 0x06 +#define TYPE_GHOST 0x07 +#define TYPE_STEEL 0x08 +#define TYPE_MYSTERY 0x09 +#define TYPE_FIRE 0x0a +#define TYPE_WATER 0x0b +#define TYPE_GRASS 0x0c +#define TYPE_ELECTRIC 0x0d +#define TYPE_PSYCHIC 0x0e +#define TYPE_ICE 0x0f +#define TYPE_DRAGON 0x10 +#define TYPE_DARK 0x11 + +enum { + NATURE_HARDY, + NATURE_LONELY, + NATURE_BRAVE, + NATURE_ADAMANT, + NATURE_NAUGHTY, + NATURE_BOLD, + NATURE_DOCILE, + NATURE_RELAXED, + NATURE_IMPISH, + NATURE_LAX, + NATURE_TIMID, + NATURE_HASTY, + NATURE_SERIOUS, + NATURE_JOLLY, + NATURE_NAIVE, + NATURE_MODEST, + NATURE_MILD, + NATURE_QUIET, + NATURE_BASHFUL, + NATURE_RASH, + NATURE_CALM, + NATURE_GENTLE, + NATURE_SASSY, + NATURE_CAREFUL, + NATURE_QUIRKY, +}; + +struct PokemonSubstruct0 +{ + u16 species; + u16 heldItem; + u32 experience; + u8 ppBonuses; + u8 friendship; +}; + +struct PokemonSubstruct1 +{ + u16 moves[4]; + u8 pp[4]; +}; + +struct PokemonSubstruct2 +{ + u8 hpEV; + u8 attackEV; + u8 defenseEV; + u8 speedEV; + u8 spAttackEV; + u8 spDefenseEV; + u8 cool; + u8 beauty; + u8 cute; + u8 smart; + u8 tough; + u8 sheen; +}; + +struct PokemonSubstruct3 +{ + /* 0x00 */ u8 pokerus; + /* 0x01 */ u8 metLocation; + + /* 0x02 */ u16 metLevel:7; + /* 0x02 */ u16 metGame:4; + /* 0x03 */ u16 pokeball:4; + /* 0x03 */ u16 otGender:1; + + /* 0x04 */ u32 hpIV:5; + /* 0x04 */ u32 attackIV:5; + /* 0x05 */ u32 defenseIV:5; + /* 0x05 */ u32 speedIV:5; + /* 0x05 */ u32 spAttackIV:5; + /* 0x06 */ u32 spDefenseIV:5; + /* 0x07 */ u32 isEgg:1; + /* 0x07 */ u32 altAbility:1; + + /* 0x08 */ u32 coolRibbon:3; + /* 0x08 */ u32 beautyRibbon:3; + /* 0x08 */ u32 cuteRibbon:3; + /* 0x09 */ u32 smartRibbon:3; + /* 0x09 */ u32 toughRibbon:3; + /* 0x09 */ u32 championRibbon:1; + /* 0x0A */ u32 winningRibbon:1; + /* 0x0A */ u32 victoryRibbon:1; + /* 0x0A */ u32 artistRibbon:1; + /* 0x0A */ u32 effortRibbon:1; + /* 0x0A */ u32 giftRibbon1:1; + /* 0x0A */ u32 giftRibbon2:1; + /* 0x0A */ u32 giftRibbon3:1; + /* 0x0A */ u32 giftRibbon4:1; + /* 0x0B */ u32 giftRibbon5:1; + /* 0x0B */ u32 giftRibbon6:1; + /* 0x0B */ u32 giftRibbon7:1; + /* 0x0B */ u32 fatefulEncounter:5; // unused in Ruby/Sapphire, but the high bit must be set for Mew/Deoxys to obey in FR/LG/Emerald +}; + +union PokemonSubstruct +{ + struct PokemonSubstruct0 type0; + struct PokemonSubstruct1 type1; + struct PokemonSubstruct2 type2; + struct PokemonSubstruct3 type3; + u16 raw[6]; +}; + +struct BoxPokemon +{ + u32 personality; + u32 otId; + u8 nickname[POKEMON_NAME_LENGTH]; + u8 language; + u8 isBadEgg:1; + u8 hasSpecies:1; + u8 isEgg:1; + u8 unused:5; + u8 otName[OT_NAME_LENGTH]; + u8 markings; + u16 checksum; + u16 unknown; + + union + { + u32 raw[12]; + union PokemonSubstruct substructs[4]; + } secure; +}; + +struct Pokemon +{ + struct BoxPokemon box; + u32 status; + u8 level; + u8 pokerus; + u16 hp; + u16 maxHP; + u16 attack; + u16 defense; + u16 speed; + u16 spAttack; + u16 spDefense; +}; + +extern struct Pokemon gPlayerParty[6]; +extern struct Pokemon gEnemyParty[6]; + +struct BaseStats +{ + /* 0x00 */ u8 baseHP; + /* 0x01 */ u8 baseAttack; + /* 0x02 */ u8 baseDefense; + /* 0x03 */ u8 baseSpeed; + /* 0x04 */ u8 baseSpAttack; + /* 0x05 */ u8 baseSpDefense; + /* 0x06 */ u8 type1; + /* 0x07 */ u8 type2; + /* 0x08 */ u8 catchRate; + /* 0x09 */ u8 expYield; + /* 0x0A */ u16 evYield_HP:2; + /* 0x0A */ u16 evYield_Attack:2; + /* 0x0A */ u16 evYield_Defense:2; + /* 0x0A */ u16 evYield_Speed:2; + /* 0x0B */ u16 evYield_SpAttack:2; + /* 0x0B */ u16 evYield_SpDefense:2; + /* 0x0C */ u16 item1; + /* 0x0E */ u16 item2; + /* 0x10 */ u8 genderRatio; + /* 0x11 */ u8 eggCycles; + /* 0x12 */ u8 friendship; + /* 0x13 */ u8 growthRate; + /* 0x14 */ u8 eggGroup1; + /* 0x15 */ u8 eggGroup2; + /* 0x16 */ u8 ability1; + /* 0x17 */ u8 ability2; + /* 0x18 */ u8 safariZoneFleeRate; + /* 0x19 */ u8 bodyColor; +}; + +struct BattleMove +{ + u8 effect; + u8 power; + u8 type; + u8 accuracy; + u8 pp; + u8 secondaryEffectChance; + u8 target; + u8 priority; + u32 flags; +}; + +// These are full type signatures for GetMonData() and GetBoxMonData(), +// but they are not used since some code erroneously omits the third arg. +// u32 GetMonData(struct Pokemon *mon, s32 field, u8 *data); +u32 GetMonData(); + +u8 pokemon_species_get_gender_info(u16 species, u32 personality);
\ No newline at end of file diff --git a/include/rng.h b/include/rng.h new file mode 100644 index 000000000..ae98e575f --- /dev/null +++ b/include/rng.h @@ -0,0 +1,18 @@ +#ifndef GUARD_RNG_H +#define GUARD_RNG_H + +extern u32 gRngValue; +extern u32 gRng2Value; + +//Returns a 16-bit pseudorandom number +u16 Random(void); +u16 Random2(void); + +//Returns a 32-bit pseudorandom number +#define Random32() (Random() | (Random() << 16)) + +//Sets the initial seed value of the pseudorandom number generator +void SeedRng(u16 seed); +void SeedRng2(u16 seed); + +#endif // GUARD_RNG_H diff --git a/include/siirtc.h b/include/siirtc.h new file mode 100644 index 000000000..5864f95b8 --- /dev/null +++ b/include/siirtc.h @@ -0,0 +1,54 @@ +#ifndef GUARD_RTC_H +#define GUARD_RTC_H + +#include "gba/gba.h" + +#define SIIRTCINFO_INTFE 0x01 // frequency interrupt enable +#define SIIRTCINFO_INTME 0x02 // per-minute interrupt enable +#define SIIRTCINFO_INTAE 0x04 // alarm interrupt enable +#define SIIRTCINFO_24HOUR 0x40 // 0: 12-hour mode, 1: 24-hour mode +#define SIIRTCINFO_POWER 0x80 // power on or power failure occurred + +enum +{ + MONTH_JAN = 1, + MONTH_FEB, + MONTH_MAR, + MONTH_APR, + MONTH_MAY, + MONTH_JUN, + MONTH_JUL, + MONTH_AUG, + MONTH_SEP, + MONTH_OCT, + MONTH_NOV, + MONTH_DEC +}; + +struct SiiRtcInfo +{ + u8 year; + u8 month; + u8 day; + u8 dayOfWeek; + u8 hour; + u8 minute; + u8 second; + u8 status; + u8 alarmHour; + u8 alarmMinute; +}; + +void SiiRtcUnprotect(); +void SiiRtcProtect(); +u8 SiiRtcProbe(); +bool8 SiiRtcReset(); +bool8 SiiRtcGetStatus(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetStatus(struct SiiRtcInfo *rtc); +bool8 SiiRtcGetDateTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetDateTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcGetTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetTime(struct SiiRtcInfo *rtc); +bool8 SiiRtcSetAlarm(struct SiiRtcInfo *rtc); + +#endif // GUARD_RTC_H diff --git a/include/species.h b/include/species.h new file mode 100644 index 000000000..5cce48ad6 --- /dev/null +++ b/include/species.h @@ -0,0 +1,445 @@ +enum { + SPECIES_NONE, // 0x000 + SPECIES_BULBASAUR, // 0x001 + SPECIES_IVYSAUR, // 0x002 + SPECIES_VENUSAUR, // 0x003 + SPECIES_CHARMANDER, // 0x004 + SPECIES_CHARMELEON, // 0x005 + SPECIES_CHARIZARD, // 0x006 + SPECIES_SQUIRTLE, // 0x007 + SPECIES_WARTORTLE, // 0x008 + SPECIES_BLASTOISE, // 0x009 + SPECIES_CATERPIE, // 0x00a + SPECIES_METAPOD, // 0x00b + SPECIES_BUTTERFREE, // 0x00c + SPECIES_WEEDLE, // 0x00d + SPECIES_KAKUNA, // 0x00e + SPECIES_BEEDRILL, // 0x00f + SPECIES_PIDGEY, // 0x010 + SPECIES_PIDGEOTTO, // 0x011 + SPECIES_PIDGEOT, // 0x012 + SPECIES_RATTATA, // 0x013 + SPECIES_RATICATE, // 0x014 + SPECIES_SPEAROW, // 0x015 + SPECIES_FEAROW, // 0x016 + SPECIES_EKANS, // 0x017 + SPECIES_ARBOK, // 0x018 + SPECIES_PIKACHU, // 0x019 + SPECIES_RAICHU, // 0x01a + SPECIES_SANDSHREW, // 0x01b + SPECIES_SANDSLASH, // 0x01c + SPECIES_NIDORAN_F, // 0x01d + SPECIES_NIDORINA, // 0x01e + SPECIES_NIDOQUEEN, // 0x01f + SPECIES_NIDORAN_M, // 0x020 + SPECIES_NIDORINO, // 0x021 + SPECIES_NIDOKING, // 0x022 + SPECIES_CLEFAIRY, // 0x023 + SPECIES_CLEFABLE, // 0x024 + SPECIES_VULPIX, // 0x025 + SPECIES_NINETALES, // 0x026 + SPECIES_JIGGLYPUFF, // 0x027 + SPECIES_WIGGLYTUFF, // 0x028 + SPECIES_ZUBAT, // 0x029 + SPECIES_GOLBAT, // 0x02a + SPECIES_ODDISH, // 0x02b + SPECIES_GLOOM, // 0x02c + SPECIES_VILEPLUME, // 0x02d + SPECIES_PARAS, // 0x02e + SPECIES_PARASECT, // 0x02f + SPECIES_VENONAT, // 0x030 + SPECIES_VENOMOTH, // 0x031 + SPECIES_DIGLETT, // 0x032 + SPECIES_DUGTRIO, // 0x033 + SPECIES_MEOWTH, // 0x034 + SPECIES_PERSIAN, // 0x035 + SPECIES_PSYDUCK, // 0x036 + SPECIES_GOLDUCK, // 0x037 + SPECIES_MANKEY, // 0x038 + SPECIES_PRIMEAPE, // 0x039 + SPECIES_GROWLITHE, // 0x03a + SPECIES_ARCANINE, // 0x03b + SPECIES_POLIWAG, // 0x03c + SPECIES_POLIWHIRL, // 0x03d + SPECIES_POLIWRATH, // 0x03e + SPECIES_ABRA, // 0x03f + SPECIES_KADABRA, // 0x040 + SPECIES_ALAKAZAM, // 0x041 + SPECIES_MACHOP, // 0x042 + SPECIES_MACHOKE, // 0x043 + SPECIES_MACHAMP, // 0x044 + SPECIES_BELLSPROUT, // 0x045 + SPECIES_WEEPINBELL, // 0x046 + SPECIES_VICTREEBEL, // 0x047 + SPECIES_TENTACOOL, // 0x048 + SPECIES_TENTACRUEL, // 0x049 + SPECIES_GEODUDE, // 0x04a + SPECIES_GRAVELER, // 0x04b + SPECIES_GOLEM, // 0x04c + SPECIES_PONYTA, // 0x04d + SPECIES_RAPIDASH, // 0x04e + SPECIES_SLOWPOKE, // 0x04f + SPECIES_SLOWBRO, // 0x050 + SPECIES_MAGNEMITE, // 0x051 + SPECIES_MAGNETON, // 0x052 + SPECIES_FARFETCHD, // 0x053 + SPECIES_DODUO, // 0x054 + SPECIES_DODRIO, // 0x055 + SPECIES_SEEL, // 0x056 + SPECIES_DEWGONG, // 0x057 + SPECIES_GRIMER, // 0x058 + SPECIES_MUK, // 0x059 + SPECIES_SHELLDER, // 0x05a + SPECIES_CLOYSTER, // 0x05b + SPECIES_GASTLY, // 0x05c + SPECIES_HAUNTER, // 0x05d + SPECIES_GENGAR, // 0x05e + SPECIES_ONIX, // 0x05f + SPECIES_DROWZEE, // 0x060 + SPECIES_HYPNO, // 0x061 + SPECIES_KRABBY, // 0x062 + SPECIES_KINGLER, // 0x063 + SPECIES_VOLTORB, // 0x064 + SPECIES_ELECTRODE, // 0x065 + SPECIES_EXEGGCUTE, // 0x066 + SPECIES_EXEGGUTOR, // 0x067 + SPECIES_CUBONE, // 0x068 + SPECIES_MAROWAK, // 0x069 + SPECIES_HITMONLEE, // 0x06a + SPECIES_HITMONCHAN, // 0x06b + SPECIES_LICKITUNG, // 0x06c + SPECIES_KOFFING, // 0x06d + SPECIES_WEEZING, // 0x06e + SPECIES_RHYHORN, // 0x06f + SPECIES_RHYDON, // 0x070 + SPECIES_CHANSEY, // 0x071 + SPECIES_TANGELA, // 0x072 + SPECIES_KANGASKHAN, // 0x073 + SPECIES_HORSEA, // 0x074 + SPECIES_SEADRA, // 0x075 + SPECIES_GOLDEEN, // 0x076 + SPECIES_SEAKING, // 0x077 + SPECIES_STARYU, // 0x078 + SPECIES_STARMIE, // 0x079 + SPECIES_MR_MIME, // 0x07a + SPECIES_SCYTHER, // 0x07b + SPECIES_JYNX, // 0x07c + SPECIES_ELECTABUZZ, // 0x07d + SPECIES_MAGMAR, // 0x07e + SPECIES_PINSIR, // 0x07f + SPECIES_TAUROS, // 0x080 + SPECIES_MAGIKARP, // 0x081 + SPECIES_GYARADOS, // 0x082 + SPECIES_LAPRAS, // 0x083 + SPECIES_DITTO, // 0x084 + SPECIES_EEVEE, // 0x085 + SPECIES_VAPOREON, // 0x086 + SPECIES_JOLTEON, // 0x087 + SPECIES_FLAREON, // 0x088 + SPECIES_PORYGON, // 0x089 + SPECIES_OMANYTE, // 0x08a + SPECIES_OMASTAR, // 0x08b + SPECIES_KABUTO, // 0x08c + SPECIES_KABUTOPS, // 0x08d + SPECIES_AERODACTYL, // 0x08e + SPECIES_SNORLAX, // 0x08f + SPECIES_ARTICUNO, // 0x090 + SPECIES_ZAPDOS, // 0x091 + SPECIES_MOLTRES, // 0x092 + SPECIES_DRATINI, // 0x093 + SPECIES_DRAGONAIR, // 0x094 + SPECIES_DRAGONITE, // 0x095 + SPECIES_MEWTWO, // 0x096 + SPECIES_MEW, // 0x097 + SPECIES_CHIKORITA, // 0x098 + SPECIES_BAYLEEF, // 0x099 + SPECIES_MEGANIUM, // 0x09a + SPECIES_CYNDAQUIL, // 0x09b + SPECIES_QUILAVA, // 0x09c + SPECIES_TYPHLOSION, // 0x09d + SPECIES_TOTODILE, // 0x09e + SPECIES_CROCONAW, // 0x09f + SPECIES_FERALIGATR, // 0x0a0 + SPECIES_SENTRET, // 0x0a1 + SPECIES_FURRET, // 0x0a2 + SPECIES_HOOTHOOT, // 0x0a3 + SPECIES_NOCTOWL, // 0x0a4 + SPECIES_LEDYBA, // 0x0a5 + SPECIES_LEDIAN, // 0x0a6 + SPECIES_SPINARAK, // 0x0a7 + SPECIES_ARIADOS, // 0x0a8 + SPECIES_CROBAT, // 0x0a9 + SPECIES_CHINCHOU, // 0x0aa + SPECIES_LANTURN, // 0x0ab + SPECIES_PICHU, // 0x0ac + SPECIES_CLEFFA, // 0x0ad + SPECIES_IGGLYBUFF, // 0x0ae + SPECIES_TOGEPI, // 0x0af + SPECIES_TOGETIC, // 0x0b0 + SPECIES_NATU, // 0x0b1 + SPECIES_XATU, // 0x0b2 + SPECIES_MAREEP, // 0x0b3 + SPECIES_FLAAFFY, // 0x0b4 + SPECIES_AMPHAROS, // 0x0b5 + SPECIES_BELLOSSOM, // 0x0b6 + SPECIES_MARILL, // 0x0b7 + SPECIES_AZUMARILL, // 0x0b8 + SPECIES_SUDOWOODO, // 0x0b9 + SPECIES_POLITOED, // 0x0ba + SPECIES_HOPPIP, // 0x0bb + SPECIES_SKIPLOOM, // 0x0bc + SPECIES_JUMPLUFF, // 0x0bd + SPECIES_AIPOM, // 0x0be + SPECIES_SUNKERN, // 0x0bf + SPECIES_SUNFLORA, // 0x0c0 + SPECIES_YANMA, // 0x0c1 + SPECIES_WOOPER, // 0x0c2 + SPECIES_QUAGSIRE, // 0x0c3 + SPECIES_ESPEON, // 0x0c4 + SPECIES_UMBREON, // 0x0c5 + SPECIES_MURKROW, // 0x0c6 + SPECIES_SLOWKING, // 0x0c7 + SPECIES_MISDREAVUS, // 0x0c8 + SPECIES_UNOWN, // 0x0c9 + SPECIES_WOBBUFFET, // 0x0ca + SPECIES_GIRAFARIG, // 0x0cb + SPECIES_PINECO, // 0x0cc + SPECIES_FORRETRESS, // 0x0cd + SPECIES_DUNSPARCE, // 0x0ce + SPECIES_GLIGAR, // 0x0cf + SPECIES_STEELIX, // 0x0d0 + SPECIES_SNUBBULL, // 0x0d1 + SPECIES_GRANBULL, // 0x0d2 + SPECIES_QWILFISH, // 0x0d3 + SPECIES_SCIZOR, // 0x0d4 + SPECIES_SHUCKLE, // 0x0d5 + SPECIES_HERACROSS, // 0x0d6 + SPECIES_SNEASEL, // 0x0d7 + SPECIES_TEDDIURSA, // 0x0d8 + SPECIES_URSARING, // 0x0d9 + SPECIES_SLUGMA, // 0x0da + SPECIES_MAGCARGO, // 0x0db + SPECIES_SWINUB, // 0x0dc + SPECIES_PILOSWINE, // 0x0dd + SPECIES_CORSOLA, // 0x0de + SPECIES_REMORAID, // 0x0df + SPECIES_OCTILLERY, // 0x0e0 + SPECIES_DELIBIRD, // 0x0e1 + SPECIES_MANTINE, // 0x0e2 + SPECIES_SKARMORY, // 0x0e3 + SPECIES_HOUNDOUR, // 0x0e4 + SPECIES_HOUNDOOM, // 0x0e5 + SPECIES_KINGDRA, // 0x0e6 + SPECIES_PHANPY, // 0x0e7 + SPECIES_DONPHAN, // 0x0e8 + SPECIES_PORYGON2, // 0x0e9 + SPECIES_STANTLER, // 0x0ea + SPECIES_SMEARGLE, // 0x0eb + SPECIES_TYROGUE, // 0x0ec + SPECIES_HITMONTOP, // 0x0ed + SPECIES_SMOOCHUM, // 0x0ee + SPECIES_ELEKID, // 0x0ef + SPECIES_MAGBY, // 0x0f0 + SPECIES_MILTANK, // 0x0f1 + SPECIES_BLISSEY, // 0x0f2 + SPECIES_RAIKOU, // 0x0f3 + SPECIES_ENTEI, // 0x0f4 + SPECIES_SUICUNE, // 0x0f5 + SPECIES_LARVITAR, // 0x0f6 + SPECIES_PUPITAR, // 0x0f7 + SPECIES_TYRANITAR, // 0x0f8 + SPECIES_LUGIA, // 0x0f9 + SPECIES_HO_OH, // 0x0fa + SPECIES_CELEBI, // 0x0fb + + SPECIES_OLD_UNOWN_B, + SPECIES_OLD_UNOWN_C, + SPECIES_OLD_UNOWN_D, + SPECIES_OLD_UNOWN_E, + SPECIES_OLD_UNOWN_F, + SPECIES_OLD_UNOWN_G, + SPECIES_OLD_UNOWN_H, + SPECIES_OLD_UNOWN_I, + SPECIES_OLD_UNOWN_J, + SPECIES_OLD_UNOWN_K, + SPECIES_OLD_UNOWN_L, + SPECIES_OLD_UNOWN_M, + SPECIES_OLD_UNOWN_N, + SPECIES_OLD_UNOWN_O, + SPECIES_OLD_UNOWN_P, + SPECIES_OLD_UNOWN_Q, + SPECIES_OLD_UNOWN_R, + SPECIES_OLD_UNOWN_S, + SPECIES_OLD_UNOWN_T, + SPECIES_OLD_UNOWN_U, + SPECIES_OLD_UNOWN_V, + SPECIES_OLD_UNOWN_W, + SPECIES_OLD_UNOWN_X, + SPECIES_OLD_UNOWN_Y, + SPECIES_OLD_UNOWN_Z, + + SPECIES_TREECKO, // 0x115 + SPECIES_GROVYLE, // 0x116 + SPECIES_SCEPTILE, // 0x117 + SPECIES_TORCHIC, // 0x118 + SPECIES_COMBUSKEN, // 0x119 + SPECIES_BLAZIKEN, // 0x11a + SPECIES_MUDKIP, // 0x11b + SPECIES_MARSHTOMP, // 0x11c + SPECIES_SWAMPERT, // 0x11d + SPECIES_POOCHYENA, // 0x11e + SPECIES_MIGHTYENA, // 0x11f + SPECIES_ZIGZAGOON, // 0x120 + SPECIES_LINOONE, // 0x121 + SPECIES_WURMPLE, // 0x122 + SPECIES_SILCOON, // 0x123 + SPECIES_BEAUTIFLY, // 0x124 + SPECIES_CASCOON, // 0x125 + SPECIES_DUSTOX, // 0x126 + SPECIES_LOTAD, // 0x127 + SPECIES_LOMBRE, // 0x128 + SPECIES_LUDICOLO, // 0x129 + SPECIES_SEEDOT, // 0x12a + SPECIES_NUZLEAF, // 0x12b + SPECIES_SHIFTRY, // 0x12c + SPECIES_NINCADA, // 0x12d + SPECIES_NINJASK, // 0x12e + SPECIES_SHEDINJA, // 0x12f + SPECIES_TAILLOW, // 0x130 + SPECIES_SWELLOW, // 0x131 + SPECIES_SHROOMISH, // 0x132 + SPECIES_BRELOOM, // 0x133 + SPECIES_SPINDA, // 0x134 + SPECIES_WINGULL, // 0x135 + SPECIES_PELIPPER, // 0x136 + SPECIES_SURSKIT, // 0x137 + SPECIES_MASQUERAIN, // 0x138 + SPECIES_WAILMER, // 0x139 + SPECIES_WAILORD, // 0x13a + SPECIES_SKITTY, // 0x13b + SPECIES_DELCATTY, // 0x13c + SPECIES_KECLEON, // 0x13d + SPECIES_BALTOY, // 0x13e + SPECIES_CLAYDOL, // 0x13f + SPECIES_NOSEPASS, // 0x140 + SPECIES_TORKOAL, // 0x141 + SPECIES_SABLEYE, // 0x142 + SPECIES_BARBOACH, // 0x143 + SPECIES_WHISCASH, // 0x144 + SPECIES_LUVDISC, // 0x145 + SPECIES_CORPHISH, // 0x146 + SPECIES_CRAWDAUNT, // 0x147 + SPECIES_FEEBAS, // 0x148 + SPECIES_MILOTIC, // 0x149 + SPECIES_CARVANHA, // 0x14a + SPECIES_SHARPEDO, // 0x14b + SPECIES_TRAPINCH, // 0x14c + SPECIES_VIBRAVA, // 0x14d + SPECIES_FLYGON, // 0x14e + SPECIES_MAKUHITA, // 0x14f + SPECIES_HARIYAMA, // 0x150 + SPECIES_ELECTRIKE, // 0x151 + SPECIES_MANECTRIC, // 0x152 + SPECIES_NUMEL, // 0x153 + SPECIES_CAMERUPT, // 0x154 + SPECIES_SPHEAL, // 0x155 + SPECIES_SEALEO, // 0x156 + SPECIES_WALREIN, // 0x157 + SPECIES_CACNEA, // 0x158 + SPECIES_CACTURNE, // 0x159 + SPECIES_SNORUNT, // 0x15a + SPECIES_GLALIE, // 0x15b + SPECIES_LUNATONE, // 0x15c + SPECIES_SOLROCK, // 0x15d + SPECIES_AZURILL, // 0x15e + SPECIES_SPOINK, // 0x15f + SPECIES_GRUMPIG, // 0x160 + SPECIES_PLUSLE, // 0x161 + SPECIES_MINUN, // 0x162 + SPECIES_MAWILE, // 0x163 + SPECIES_MEDITITE, // 0x164 + SPECIES_MEDICHAM, // 0x165 + SPECIES_SWABLU, // 0x166 + SPECIES_ALTARIA, // 0x167 + SPECIES_WYNAUT, // 0x168 + SPECIES_DUSKULL, // 0x169 + SPECIES_DUSCLOPS, // 0x16a + SPECIES_ROSELIA, // 0x16b + SPECIES_SLAKOTH, // 0x16c + SPECIES_VIGOROTH, // 0x16d + SPECIES_SLAKING, // 0x16e + SPECIES_GULPIN, // 0x16f + SPECIES_SWALOT, // 0x170 + SPECIES_TROPIUS, // 0x171 + SPECIES_WHISMUR, // 0x172 + SPECIES_LOUDRED, // 0x173 + SPECIES_EXPLOUD, // 0x174 + SPECIES_CLAMPERL, // 0x175 + SPECIES_HUNTAIL, // 0x176 + SPECIES_GOREBYSS, // 0x177 + SPECIES_ABSOL, // 0x178 + SPECIES_SHUPPET, // 0x179 + SPECIES_BANETTE, // 0x17a + SPECIES_SEVIPER, // 0x17b + SPECIES_ZANGOOSE, // 0x17c + SPECIES_RELICANTH, // 0x17d + SPECIES_ARON, // 0x17e + SPECIES_LAIRON, // 0x17f + SPECIES_AGGRON, // 0x180 + SPECIES_CASTFORM, // 0x181 + SPECIES_VOLBEAT, // 0x182 + SPECIES_ILLUMISE, // 0x183 + SPECIES_LILEEP, // 0x184 + SPECIES_CRADILY, // 0x185 + SPECIES_ANORITH, // 0x186 + SPECIES_ARMALDO, // 0x187 + SPECIES_RALTS, // 0x188 + SPECIES_KIRLIA, // 0x189 + SPECIES_GARDEVOIR, // 0x18a + SPECIES_BAGON, // 0x18b + SPECIES_SHELGON, // 0x18c + SPECIES_SALAMENCE, // 0x18d + SPECIES_BELDUM, // 0x18e + SPECIES_METANG, // 0x18f + SPECIES_METAGROSS, // 0x190 + SPECIES_REGIROCK, // 0x191 + SPECIES_REGICE, // 0x192 + SPECIES_REGISTEEL, // 0x193 + SPECIES_KYOGRE, // 0x194 + SPECIES_GROUDON, // 0x195 + SPECIES_RAYQUAZA, // 0x196 + SPECIES_LATIAS, // 0x197 + SPECIES_LATIOS, // 0x198 + SPECIES_JIRACHI, // 0x199 + SPECIES_DEOXYS, // 0x19a + SPECIES_CHIMECHO, // 0x19b + SPECIES_EGG, // 0x19c + + SPECIES_UNOWN_B, + SPECIES_UNOWN_C, + SPECIES_UNOWN_D, + SPECIES_UNOWN_E, + SPECIES_UNOWN_F, + SPECIES_UNOWN_G, + SPECIES_UNOWN_H, + SPECIES_UNOWN_I, + SPECIES_UNOWN_J, + SPECIES_UNOWN_K, + SPECIES_UNOWN_L, + SPECIES_UNOWN_M, + SPECIES_UNOWN_N, + SPECIES_UNOWN_O, + SPECIES_UNOWN_P, + SPECIES_UNOWN_Q, + SPECIES_UNOWN_R, + SPECIES_UNOWN_S, + SPECIES_UNOWN_T, + SPECIES_UNOWN_U, + SPECIES_UNOWN_V, + SPECIES_UNOWN_W, + SPECIES_UNOWN_X, + SPECIES_UNOWN_Y, + SPECIES_UNOWN_Z, + SPECIES_UNOWN_EMARK, + SPECIES_UNOWN_QMARK, +};
\ No newline at end of file diff --git a/include/string_util.h b/include/string_util.h new file mode 100644 index 000000000..382f52251 --- /dev/null +++ b/include/string_util.h @@ -0,0 +1,42 @@ +#ifndef GUARD_STRING_UTIL_H +#define GUARD_STRING_UTIL_H + +enum StringConvertMode +{ + STR_CONV_MODE_LEFT_ALIGN, + STR_CONV_MODE_RIGHT_ALIGN, + STR_CONV_MODE_LEADING_ZEROS +}; + +u8 *StringCopy10(u8 *dest, const u8 *src); +u8 *StringGetEnd10(u8 *str); +u8 *StringCopy7(u8 *dest, const u8 *src); +u8 *StringCopy(u8 *dest, const u8 *src); +u8 *StringAppend(u8 *dest, const u8 *src); +u8 *StringCopyN(u8 *dest, const u8 *src, u8 n); +u8 *StringAppendN(u8 *dest, const u8 *src, u8 n); +u16 StringLength(const u8 *str); +s32 StringCompare(const u8 *str1, const u8 *str2); +s32 StringCompareN(const u8 *str1, const u8 *str2, u32 n); +bool8 IsStringLengthAtLeast(const u8 *str, s32 n); +u8 *ConvertIntToDecimalStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n); +u8 *ConvertUIntToDecimalStringN(u8 *dest, u32 value, enum StringConvertMode mode, u8 n); +u8 *ConvertIntToHexStringN(u8 *dest, s32 value, enum StringConvertMode mode, u8 n); +u8 *StringExpandPlaceholders(u8 *dest, const u8 *src); +u8 *StringBraille(u8 *dest, const u8 *src); +u8 *GetExpandedPlaceholder(u32 id); +u8 *StringFill(u8 *dest, u8 c, u16 n); +u8 *StringCopyPadded(u8 *dest, const u8 *src, u8 c, u16 n); +u8 *StringFillWithTerminator(u8 *dest, u16 n); +u8 *StringCopyN_Multibyte(u8 *dest, u8 *src, u32 n); +u32 StringLength_Multibyte(u8 *str); +u8 *WriteColorChangeControlCode(u8 *dest, u32 colorType, u8 color); +bool32 sub_8009228(u8 *str); +bool32 sub_800924C(u8 *str, s32 n); +u8 GetExtCtrlCodeLength(u8 code); +static const u8 *SkipExtCtrlCode(const u8 *s); +s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2); +void ConvertInternationalString(u8 *s, u8 language); +void StripExtCtrlCodes(u8 *str); + +#endif // GUARD_STRING_UTIL_H diff --git a/include/text.h b/include/text.h new file mode 100644 index 000000000..98d8406b5 --- /dev/null +++ b/include/text.h @@ -0,0 +1,14 @@ +#ifndef GUARD_TEXT_H +#define GUARD_TEXT_H + +#define CHAR_SPACE 0x00 +#define CHAR_QUESTION_MARK 0xAC +#define CHAR_HYPHEN 0xAE +#define CHAR_CURRENCY 0xB7 +#define CHAR_COLON 0xF0 +#define EXT_CTRL_CODE_BEGIN 0xFC // extended control code +#define PLACEHOLDER_BEGIN 0xFD // string placeholder +#define CHAR_NEWLINE 0xFE +#define EOS 0xFF // end of string + +#endif // GUARD_TEXT_H |