mirror of
https://github.com/Lorenzooone/Pokemon-Gen3-to-Gen-X.git
synced 2026-04-25 07:36:52 -05:00
508 lines
14 KiB
C
508 lines
14 KiB
C
#ifndef PARTY_HANDLER__
|
|
#define PARTY_HANDLER__
|
|
|
|
#include "config_settings.h"
|
|
#include "useful_qualifiers.h"
|
|
|
|
#define TOTAL_GENS 3
|
|
#define FIRST_GEN 1
|
|
|
|
#define LAST_VALID_GEN_3_MON 411
|
|
#define LAST_VALID_GEN_2_MON 251
|
|
#define LAST_VALID_GEN_1_MON 151
|
|
#define LAST_VALID_GEN_3_MOVE 354
|
|
#define LAST_VALID_GEN_2_MOVE 251
|
|
#define LAST_VALID_GEN_1_MOVE 165
|
|
#define STRUGGLE_MOVE_ID 165
|
|
#define LAST_VALID_GEN_3_ITEM 348
|
|
#define GEN2_STATS_TOTAL 6
|
|
#define GEN1_STATS_TOTAL 5
|
|
#define EVS_TOTAL_GEN3 GEN2_STATS_TOTAL
|
|
#define EVS_TOTAL_GEN12 GEN1_STATS_TOTAL
|
|
|
|
#define NO_DEX_INDEX 0xFFFF
|
|
|
|
#define GEN3_NO_ITEM 0xFFFF
|
|
#define GEN2_NO_ITEM 0xFF
|
|
#define GEN2_MAIL 0xFE
|
|
|
|
#define GEN3_NO_MAIL 0xFF
|
|
|
|
#define M_GENDER 0
|
|
#define F_GENDER 1
|
|
#define U_GENDER 2
|
|
#define M_GENDER_INDEX 1
|
|
#define F_GENDER_INDEX 6
|
|
#define U_GENDER_INDEX 7
|
|
#define NIDORAN_M_GENDER_INDEX 8
|
|
#define NIDORAN_F_GENDER_INDEX 9
|
|
#define TOTAL_GENDER_KINDS 10
|
|
|
|
#define NO_POKERUS 0
|
|
#define HAS_POKERUS 1
|
|
#define HAD_POKERUS 2
|
|
|
|
#define LAST_RIBBON_CONTEST 4
|
|
#define LAST_RIBBON 16
|
|
#define NUM_RIBBONS (LAST_RIBBON+1)
|
|
#define NO_RANK_ID 1
|
|
#define NO_RIBBON_ID 21
|
|
#define COLO_RIBBON_VALUE (1<<24)
|
|
#define CONTEST_STATS_TOTAL 6
|
|
|
|
#define COLOSSEUM_CODE 15
|
|
#define SAPPHIRE_CODE 1
|
|
#define RUBY_CODE 2
|
|
#define EMERALD_CODE 3
|
|
#define BATTLE_FACILITY 0x3A
|
|
#define HIDEOUT 0x42
|
|
#define SOUTHERN_ISLAND 0x49
|
|
#define DUKING_TRADE_LOCATION 0x74
|
|
#define DEEP_COLOSSEUM 0x7D
|
|
#define DEPT_STORE 0xC4
|
|
#define EMPTY_LOCATION 0xD5
|
|
#define BATTLE_FACILITY_ALT 0x101
|
|
#define HIDEOUT_ALT 0x100
|
|
#define DEPT_STORE_ALT 0x102
|
|
#define COLOSSEUM_ALT 0x103
|
|
#define TRADE_MET 0xFE
|
|
#define EVENT_MET 0xFF
|
|
|
|
#define BULBASAUR_SPECIES 1
|
|
#define NIDORAN_F_SPECIES 29
|
|
#define NIDORAN_M_SPECIES 32
|
|
#define KADABRA_SPECIES 64
|
|
#define ALAKAZAM_SPECIES 65
|
|
#define MR_MIME_SPECIES 122
|
|
#define EEVEE_SPECIES 133
|
|
#define ARTICUNO_SPECIES 144
|
|
#define ZAPDOS_SPECIES 145
|
|
#define MOLTRES_SPECIES 146
|
|
#define MEW_SPECIES 151
|
|
#define ESPEON_SPECIES 196
|
|
#define UMBREON_SPECIES 197
|
|
#define UNOWN_SPECIES 201
|
|
#define DUNSPARCE_SPECIES 206
|
|
#define RAIKOU_SPECIES 243
|
|
#define ENTEI_SPECIES 244
|
|
#define SUICUNE_SPECIES 245
|
|
#define LUGIA_SPECIES 249
|
|
#define HO_OH_SPECIES 250
|
|
#define CELEBI_SPECIES 251
|
|
#define SHEDINJA_SPECIES 303
|
|
#define SPINDA_SPECIES 308
|
|
#define LATIAS_SPECIES 407
|
|
#define LATIOS_SPECIES 408
|
|
#define DEOXYS_SPECIES 410
|
|
#define EGG_SPECIES 412
|
|
|
|
#define DEOXYS_FORMS_POS 442
|
|
#define MR_MIME_OLD_NAME_POS 446
|
|
#define UNOWN_REAL_NAME_POS 445
|
|
#define DEOXYS_NORMAL 0
|
|
#define DEOXYS_ATK 1
|
|
#define DEOXYS_DEF 2
|
|
#define DEOXYS_SPE 3
|
|
#define DUDUNSPARCE_EVO_DIVIDER 100
|
|
|
|
#define GEN2_DOT 0xE8
|
|
#define GEN1_DOT 0xF2
|
|
|
|
#define MAX_LEVEL 100
|
|
#define MAX_LEVEL_GEN3 100
|
|
#define MAX_LEVEL_GEN12 100
|
|
#define MIN_LEVEL 1
|
|
#define MIN_LEVEL_GEN3 2
|
|
#define MIN_LEVEL_GEN12 2
|
|
#define EGG_LEVEL_GEN3 5
|
|
#define EGG_LEVEL_GEN2 5
|
|
#define BASE_FRIENDSHIP 70
|
|
#define MIN_EGG_CYCLES_GEN2 1
|
|
#define MIN_EGG_CYCLES_GEN3 1
|
|
#define ENC_DATA_SIZE 48
|
|
#define PARTY_SIZE 6
|
|
#define MOVES_SIZE 4
|
|
|
|
#define DEX_BYTES ((LAST_VALID_GEN_3_MON & 7) == 0 ? LAST_VALID_GEN_3_MON >> 3 : (LAST_VALID_GEN_3_MON >> 3) + 1)
|
|
#define GIFT_RIBBONS 11
|
|
#define MAIL_WORDS_SIZE 9
|
|
|
|
#define MAX_EVS 510
|
|
#define MAX_USABLE_EVS ((MAX_EVS>>2)<<2)
|
|
|
|
#define HP_STAT_INDEX 0
|
|
#define ATK_STAT_INDEX 1
|
|
#define DEF_STAT_INDEX 2
|
|
#define SPE_STAT_INDEX 3
|
|
|
|
#define NUM_UNOWN_LETTERS_GEN3 28
|
|
#define NUM_UNOWN_LETTERS_GEN2 26
|
|
#define NUM_NATURES 25
|
|
|
|
#define NAME_SIZE 11
|
|
#define ITEM_NAME_SIZE 15
|
|
#define NICKNAME_GEN3_SIZE 10
|
|
#define NICKNAME_JP_GEN3_SIZE 5
|
|
#define OT_NAME_GEN3_SIZE 7
|
|
#define OT_NAME_JP_GEN3_SIZE 5
|
|
#define STRING_GEN2_INT_SIZE 11
|
|
#define STRING_GEN2_JP_SIZE 6
|
|
#define STRING_GEN2_INT_CAP (STRING_GEN2_INT_SIZE-1)
|
|
#define STRING_GEN2_JP_CAP (STRING_GEN2_JP_SIZE-1)
|
|
|
|
#define NICKNAME_GEN3_MAX_SIZE ((NICKNAME_GEN3_SIZE > NICKNAME_JP_GEN3_SIZE) ? NICKNAME_GEN3_SIZE : NICKNAME_JP_GEN3_SIZE)
|
|
#define OT_NAME_GEN3_MAX_SIZE ((OT_NAME_GEN3_SIZE > OT_NAME_JP_GEN3_SIZE) ? OT_NAME_GEN3_SIZE : OT_NAME_JP_GEN3_SIZE)
|
|
#define STRING_GEN2_MAX_SIZE ((STRING_GEN2_INT_SIZE > STRING_GEN2_JP_SIZE) ? STRING_GEN2_INT_SIZE : STRING_GEN2_JP_SIZE)
|
|
|
|
#define GEN2_EGG 253
|
|
#define GEN2_NO_MON 255
|
|
#define GEN12_MAX_MOVE_PP 40
|
|
|
|
#define CELEBI_AGATE_OT_ID 31121
|
|
|
|
#define POKEBALL_ID 4
|
|
#define FIRST_BALL_ID 1
|
|
#define LAST_BALL_ID 12
|
|
#define HIDDEN_POWER_ID 237
|
|
|
|
#define ENIGMA_BERRY_ID 0x00AF
|
|
#define EVERSTONE_ID 0x00C3
|
|
#define NO_ITEM_ID 0x0000
|
|
|
|
#define EGG_ENCOUNTER 0
|
|
#define STATIC_ENCOUNTER 1
|
|
#define ROAMER_ENCOUNTER 2
|
|
#define UNOWN_ENCOUNTER 3
|
|
|
|
#define SPECIAL_NAME_MARKS_VALUE 0xF
|
|
|
|
//#define ALLOW_KOREAN
|
|
|
|
#define NUM_LANGUAGES 8
|
|
#define NUM_POKEMON_NAME_LANGUAGES 4
|
|
#define FIRST_VALID_LANGUAGE 1
|
|
#define FIRST_INTERNATIONAL_VALID_LANGUAGE 2
|
|
#define UNKNOWN_LANGUAGE 0xFF
|
|
#define JAPANESE_LANGUAGE 1
|
|
#define ENGLISH_LANGUAGE 2
|
|
#define FRENCH_LANGUAGE 3
|
|
#define ITALIAN_LANGUAGE 4
|
|
#define GERMAN_LANGUAGE 5
|
|
#define KOREAN_LANGUAGE 6
|
|
#define SPANISH_LANGUAGE 7
|
|
#ifdef ALLOW_KOREAN
|
|
#define ALL_LANGUAGES ((1 << JAPANESE_LANGUAGE) | (1 << ENGLISH_LANGUAGE) | (1 << FRENCH_LANGUAGE) | (1 << ITALIAN_LANGUAGE) | (1 << GERMAN_LANGUAGE) | (1 << KOREAN_LANGUAGE) | (1 << SPANISH_LANGUAGE))
|
|
#else
|
|
#define ALL_LANGUAGES ((1 << JAPANESE_LANGUAGE) | (1 << ENGLISH_LANGUAGE) | (1 << FRENCH_LANGUAGE) | (1 << ITALIAN_LANGUAGE) | (1 << GERMAN_LANGUAGE) | (1 << SPANISH_LANGUAGE))
|
|
#endif
|
|
|
|
#define GET_LANGUAGE_IS_JAPANESE(x) ((x) == JAPANESE_LANGUAGE)
|
|
#define GET_LANGUAGE_NICKNAME_LIMIT(x) (GET_LANGUAGE_IS_JAPANESE(x) ? NICKNAME_JP_GEN3_SIZE : NICKNAME_GEN3_SIZE)
|
|
#define GET_LANGUAGE_OT_NAME_LIMIT(x) (GET_LANGUAGE_IS_JAPANESE(x) ? OT_NAME_JP_GEN3_SIZE : OT_NAME_GEN3_SIZE)
|
|
|
|
#define SYS_LANGUAGE get_sys_language()
|
|
#define IS_SYS_LANGUAGE_JAPANESE GET_LANGUAGE_IS_JAPANESE(SYS_LANGUAGE)
|
|
#define SYS_LANGUAGE_LIMIT GET_LANGUAGE_NICKNAME_LIMIT(SYS_LANGUAGE)
|
|
#define DEFAULT_NAME_BAD_LANGUAGE ENGLISH_LANGUAGE
|
|
|
|
typedef u32 gen3_party_total_t;
|
|
|
|
enum LEARNABLE_MOVES_RETVAL {LEARNT, SKIPPED, LEARNABLE, COMPLETED};
|
|
|
|
struct alternative_data_gen3 {
|
|
u8 met_location;
|
|
u16 origins_info;
|
|
u32 pid;
|
|
u32 ivs;
|
|
u8 ability;
|
|
u32 ot_id;
|
|
u32 ribbons : 31;
|
|
u32 obedience : 1;
|
|
};
|
|
|
|
struct mail_gen3 {
|
|
u16 words[MAIL_WORDS_SIZE];
|
|
u8 ot_name[OT_NAME_GEN3_MAX_SIZE+1];
|
|
u32 ot_id;
|
|
u16 species;
|
|
u16 item;
|
|
u16 unk;
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct special_met_data_gen2 {
|
|
u8 location;
|
|
u8 level : 7;
|
|
u8 force_crystal : 1;
|
|
} PACKED ALIGNED(1);
|
|
|
|
struct special_met_data_gen3 {
|
|
u8 origin_game : 4;
|
|
u8 obedience : 1;
|
|
u8 unused : 3;
|
|
u8 location;
|
|
u8 level : 7;
|
|
u8 unused_2 : 1;
|
|
} PACKED ALIGNED(1);
|
|
|
|
struct mon_general_met_data_gen3 {
|
|
u8 num_entries;
|
|
struct special_met_data_gen3 met_data_entries[];
|
|
} PACKED ALIGNED(1);
|
|
|
|
struct learnset_data_mon_moves {
|
|
u16 num_moves;
|
|
u16 moves[];
|
|
} PACKED ALIGNED(2);
|
|
|
|
struct exp_level {
|
|
u32 exp_kind[6];
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct stats_gen_23 {
|
|
u8 stats[GEN2_STATS_TOTAL];
|
|
} PACKED ALIGNED(1);
|
|
|
|
struct stats_gen_1 {
|
|
u8 stats[GEN1_STATS_TOTAL];
|
|
} PACKED ALIGNED(1);
|
|
|
|
struct gen3_mon_growth {
|
|
u16 species;
|
|
u16 item;
|
|
u32 exp;
|
|
u8 pp_bonuses;
|
|
u8 friendship;
|
|
u16 unk;
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct gen3_mon_attacks {
|
|
u16 moves[MOVES_SIZE];
|
|
u8 pp[MOVES_SIZE];
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct gen3_mon_evs {
|
|
u8 evs[EVS_TOTAL_GEN3];
|
|
u8 contest[CONTEST_STATS_TOTAL];
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct gen3_mon_misc {
|
|
u8 pokerus;
|
|
u8 met_location;
|
|
u16 origins_info;
|
|
u32 hp_ivs : 5;
|
|
u32 atk_ivs : 5;
|
|
u32 def_ivs : 5;
|
|
u32 spe_ivs : 5;
|
|
u32 spa_ivs : 5;
|
|
u32 spd_ivs : 5;
|
|
u32 is_egg : 1;
|
|
u32 ability : 1;
|
|
u32 ribbons : 31;
|
|
u32 obedience : 1;
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct gen3_mon_data_unenc {
|
|
struct gen3_mon* src;
|
|
struct gen3_mon_growth growth;
|
|
struct gen3_mon_attacks attacks;
|
|
struct gen3_mon_evs evs;
|
|
struct gen3_mon_misc misc;
|
|
u8 is_valid_gen3 : 1;
|
|
u8 is_valid_gen2 : 1;
|
|
u8 is_valid_gen1 : 1;
|
|
u8 is_egg : 1;
|
|
u8 deoxys_form : 2;
|
|
u8 can_roamer_fix : 1;
|
|
u8 fix_has_altered_ot : 1;
|
|
u8 successfully_decrypted : 1;
|
|
const u8* pre_evo_string;
|
|
size_t pre_evo_string_length;
|
|
const struct learnset_data_mon_moves* learnable_moves;
|
|
struct alternative_data_gen3 alter_nature;
|
|
struct alternative_data_gen3 fixed_ivs;
|
|
u32 comm_pid;
|
|
};
|
|
|
|
struct gen3_mon {
|
|
u32 pid;
|
|
u32 ot_id;
|
|
u8 nickname[NICKNAME_GEN3_MAX_SIZE];
|
|
u8 language;
|
|
u8 is_bad_egg : 1;
|
|
u8 has_species : 1;
|
|
u8 use_egg_name : 1;
|
|
u8 block_box_rs : 1;
|
|
u8 unused : 4;
|
|
u8 ot_name[OT_NAME_GEN3_MAX_SIZE];
|
|
u8 marks : 4;
|
|
u8 unused2 : 4;
|
|
u16 checksum;
|
|
u16 unused3;
|
|
u32 enc_data[ENC_DATA_SIZE>>2];
|
|
u32 status;
|
|
u8 level;
|
|
u8 mail_id;
|
|
u16 curr_hp;
|
|
u16 stats[GEN2_STATS_TOTAL];
|
|
} PACKED ALIGNED(4);
|
|
|
|
struct gen2_mon_data {
|
|
u8 species;
|
|
u8 item;
|
|
u8 moves[MOVES_SIZE];
|
|
u16 ot_id;
|
|
u8 exp[3];
|
|
u16 evs[EVS_TOTAL_GEN12];
|
|
u16 ivs;
|
|
u8 pps[MOVES_SIZE];
|
|
u8 friendship;
|
|
u8 pokerus;
|
|
u16 met_level : 6;
|
|
u16 time : 2;
|
|
u16 location : 7;
|
|
u16 ot_gender : 1;
|
|
u8 level;
|
|
u8 status;
|
|
u8 unused;
|
|
u16 curr_hp;
|
|
u16 stats[GEN2_STATS_TOTAL];
|
|
} PACKED;
|
|
|
|
struct gen2_mon {
|
|
struct gen2_mon_data data;
|
|
u8 is_egg; // Extra byte of data we keep
|
|
u8 ot_name[STRING_GEN2_INT_SIZE]; // The last byte of all of these must be set to 0x50
|
|
u8 ot_name_jp[STRING_GEN2_JP_SIZE];
|
|
u8 nickname[STRING_GEN2_INT_SIZE];
|
|
u8 nickname_jp[STRING_GEN2_JP_SIZE];
|
|
};
|
|
|
|
struct gen1_mon_data {
|
|
u8 species;
|
|
u16 curr_hp;
|
|
u8 bad_level;
|
|
u8 status;
|
|
u8 type[2];
|
|
u8 item;
|
|
u8 moves[MOVES_SIZE];
|
|
u16 ot_id;
|
|
u8 exp[3];
|
|
u16 evs[EVS_TOTAL_GEN12];
|
|
u16 ivs;
|
|
u8 pps[MOVES_SIZE];
|
|
u8 level;
|
|
u16 stats[GEN1_STATS_TOTAL];
|
|
} PACKED;
|
|
|
|
struct gen1_mon {
|
|
struct gen1_mon_data data;
|
|
u8 ot_name[STRING_GEN2_INT_SIZE]; // The last byte of all of these must be set to 0x50
|
|
u8 ot_name_jp[STRING_GEN2_JP_SIZE];
|
|
u8 nickname[STRING_GEN2_INT_SIZE];
|
|
u8 nickname_jp[STRING_GEN2_JP_SIZE];
|
|
};
|
|
|
|
struct gen3_party {
|
|
gen3_party_total_t total;
|
|
struct gen3_mon mons[PARTY_SIZE];
|
|
};
|
|
|
|
struct gen2_party {
|
|
u8 total;
|
|
struct gen2_mon mons[PARTY_SIZE];
|
|
};
|
|
|
|
struct gen1_party {
|
|
u8 total;
|
|
struct gen1_mon mons[PARTY_SIZE];
|
|
};
|
|
|
|
void init_enc_positions(void);
|
|
|
|
void process_gen3_data(struct gen3_mon*, struct gen3_mon_data_unenc*, u8, u8);
|
|
|
|
u8 get_index_key(u32);
|
|
u8 get_nature(u32);
|
|
u16 get_mon_index(int, u32, u8, u8);
|
|
u8 get_unown_letter_gen3(u32);
|
|
const u8* get_pokemon_name(int, u32, u8, u8, u8);
|
|
u8 has_mail(struct gen3_mon*, struct gen3_mon_growth*, u8);
|
|
u8 to_valid_level_gen3_pure(u8);
|
|
s32 get_proper_exp(struct gen3_mon*, struct gen3_mon_growth*, u8, u8);
|
|
s32 get_proper_exp_pure(u8, s32, u16, u8);
|
|
u16 get_possible_abilities_pokemon(int, u32, u8, u8);
|
|
u8 get_pokemon_gender_gen3(int, u32, u8, u8);
|
|
u16 calc_stats_gen3(u16, u32, u8, u8, u8, u8, u8);
|
|
void place_and_encrypt_gen3_data(struct gen3_mon_data_unenc*, struct gen3_mon*);
|
|
u8 sanitize_pokerus_gen3(u8);
|
|
|
|
u8 get_valid_language(u8);
|
|
u8 get_pp_of_move(u16, u8, u16);
|
|
u8 is_move_valid(u16, u16);
|
|
const u8* get_pokemon_name_pure(int, u8, u8);
|
|
const u8* get_pokemon_name_language(u16, u8);
|
|
const u16* get_learnset_for_species(const u16*, u16);
|
|
const u8* get_pokemon_name_raw(struct gen3_mon_data_unenc*);
|
|
size_t get_pokemon_name_raw_language_limit(struct gen3_mon_data_unenc*);
|
|
u16 get_mon_index_raw(struct gen3_mon_data_unenc*);
|
|
u8 has_item_raw(struct gen3_mon_data_unenc* data_src);
|
|
const u8* get_item_name_raw(struct gen3_mon_data_unenc*);
|
|
const u8* get_met_location_name_gen3_pure(u8, u8);
|
|
const u8* get_met_location_name_gen3_raw(struct gen3_mon_data_unenc*);
|
|
u8 get_met_level_gen3_raw(struct gen3_mon_data_unenc*);
|
|
const u8* get_pokeball_base_name_gen3_pure(u16);
|
|
const u8* get_pokeball_base_name_gen3_raw(struct gen3_mon_data_unenc*);
|
|
u8 get_trainer_gender_char_raw(struct gen3_mon_data_unenc*);
|
|
u8 is_egg_gen3_raw(struct gen3_mon_data_unenc*);
|
|
u8 has_pokerus_gen3_raw(struct gen3_mon_data_unenc*);
|
|
void load_pokemon_sprite_raw(struct gen3_mon_data_unenc*, u8, u16, u16);
|
|
u8 get_pokemon_gender_raw(struct gen3_mon_data_unenc*);
|
|
char get_pokemon_gender_char_raw(struct gen3_mon_data_unenc*);
|
|
u8 is_shiny_gen3_raw(struct gen3_mon_data_unenc*, u32);
|
|
u16 get_dex_index_raw(struct gen3_mon_data_unenc*);
|
|
u8 has_mail_raw(struct gen3_mon_data_unenc*);
|
|
u8 get_mail_id_raw(struct gen3_mon_data_unenc*);
|
|
u8 to_valid_level_gen3(struct gen3_mon*);
|
|
u16 calc_stats_gen3_raw(struct gen3_mon_data_unenc*, u8);
|
|
u16 calc_stats_gen3_raw_alternative(struct gen3_mon_data_unenc*, struct alternative_data_gen3*, u8);
|
|
u8 get_evs_gen3(struct gen3_mon_evs*, u8);
|
|
u8 get_ivs_gen3_pure(u32, u8);
|
|
u8 get_ivs_gen3(struct gen3_mon_misc*, u8);
|
|
u8 get_hidden_power_power_gen3_pure(u32);
|
|
u8 get_hidden_power_power_gen3(struct gen3_mon_misc*);
|
|
u8 get_ability_num_gen_4_5(u32);
|
|
u8 get_dudunsparce_segments(u32);
|
|
const u8* get_hidden_power_type_name_gen3_pure(u32);
|
|
const u8* get_hidden_power_type_name_gen3(struct gen3_mon_misc*);
|
|
const u8* get_nature_name(u32);
|
|
const u8* get_default_trainer_name(u8);
|
|
const u8* get_celebi_trainer_name(u8);
|
|
char get_nature_symbol(u32, u8);
|
|
const u8* get_move_name_raw(u16);
|
|
const u8* get_move_name_gen3(struct gen3_mon_attacks*, u8);
|
|
const u8* get_ability_name_raw(struct gen3_mon_data_unenc*);
|
|
const u8* get_ability_name_raw_alternative(struct gen3_mon_data_unenc*, struct alternative_data_gen3*);
|
|
const u8* get_ribbon_name(struct gen3_mon_misc*, u8);
|
|
const u8* get_ribbon_rank_name(struct gen3_mon_misc*, u8);
|
|
s32 get_proper_exp_raw(struct gen3_mon_data_unenc*);
|
|
s32 get_level_exp_mon_index(u16, u8);
|
|
u8 get_pokemon_gender_kind_gen3(int, u32, u8, u8);
|
|
u8 get_pokemon_gender_kind_gen3_raw(struct gen3_mon_data_unenc*);
|
|
void recalc_stats_gen3(struct gen3_mon_data_unenc*, struct gen3_mon*);
|
|
void clean_mail_gen3(struct mail_gen3*, struct gen3_mon* mon);
|
|
u8 trade_evolve(struct gen3_mon*, struct gen3_mon_data_unenc*, u8);
|
|
enum LEARNABLE_MOVES_RETVAL learn_if_possible(struct gen3_mon_data_unenc*, u32);
|
|
u8 forget_and_learn_move(struct gen3_mon_data_unenc*, u32, u32);
|
|
void update_pokerus_gen3(struct gen3_mon_data_unenc*, u16);
|
|
u8 give_pokerus_gen3(struct gen3_mon_data_unenc*);
|
|
u8 would_update_end_pokerus_gen3(struct gen3_mon_data_unenc*, u16);
|
|
void sanitize_ot_name(u8*, u8, u8);
|
|
void set_deoxys_form(struct gen3_mon_data_unenc*, u8, u8);
|
|
u16 can_own_menu_evolve(struct gen3_mon_data_unenc*);
|
|
u8 own_menu_evolve(struct gen3_mon_data_unenc*, u8);
|
|
u8 is_item_valid(u16);
|
|
u8 is_species_valid(u16);
|
|
u16 get_own_menu_evolution_species(struct gen3_mon_data_unenc*, u8, u8*);
|
|
|
|
#endif
|