Merge remote-tracking branch 'refs/remotes/pret/master'

This commit is contained in:
Diegoisawesome
2017-03-04 23:32:12 -06:00
213 changed files with 57369 additions and 61524 deletions

81
include/abilities.h Normal file
View File

@@ -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
};

24
include/battle.h Normal file
View File

@@ -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

View File

@@ -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"

View File

@@ -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

View File

@@ -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) \

55
include/gba/multiboot.h Normal file
View File

@@ -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

View File

@@ -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

View File

@@ -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;

View File

@@ -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

63
include/main.h Normal file
View File

@@ -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

21
include/multiboot.h Normal file
View File

@@ -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

311
include/pokemon.h Normal file
View File

@@ -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);

18
include/rng.h Normal file
View File

@@ -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

54
include/siirtc.h Normal file
View File

@@ -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

445
include/species.h Normal file
View File

@@ -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,
};

42
include/string_util.h Normal file
View File

@@ -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

14
include/text.h Normal file
View File

@@ -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