diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-16 18:01:33 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-16 18:01:33 -0400 |
commit | 3d9eb18add0d8a9eb5bfa77fc64cd7b1f37fea5d (patch) | |
tree | 75d0853ce38e31116d4c1ab031bdb80256133983 | |
parent | 244ef10a3ffb2f9f00526cca37cee354c5cc5b3f (diff) |
Decompile remaining Pokemon data into c objects
-rw-r--r-- | data/pokemon.s | 95 | ||||
-rw-r--r-- | include/data2.h | 9 | ||||
-rwxr-xr-x | ld_script.txt | 1 | ||||
-rw-r--r-- | src/calculate_base_damage.c | 2 | ||||
-rw-r--r-- | src/pokemon_2.c | 6 | ||||
-rw-r--r-- | src/pokemon_data.c | 107 |
6 files changed, 120 insertions, 100 deletions
diff --git a/data/pokemon.s b/data/pokemon.s deleted file mode 100644 index 2e09e5a13..000000000 --- a/data/pokemon.s +++ /dev/null @@ -1,95 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - -gUnknown_08208238:: @ 8208238 - .byte 0x03, 0x0C, 0x30, 0xC0 - -gUnknown_0820823C:: @ 820823C - .byte 0xFC, 0xF3, 0xCF, 0x3F - -gUnknown_08208240:: @ 8208240 - .byte 0x01, 0x04, 0x10, 0x40 - -gStatStageRatios:: @ 8208244 - .byte 10, 40 @ -6 - .byte 10, 35 @ -5 - .byte 10, 30 @ -4 - .byte 10, 25 @ -3 - .byte 10, 20 @ -2 - .byte 10, 15 @ -1 - .byte 10, 10 @ 0 - .byte 15, 10 @ +1 - .byte 20, 10 @ +2 - .byte 25, 10 @ +3 - .byte 30, 10 @ +4 - .byte 35, 10 @ +5 - .byte 40, 10 @ +6 - -@ abbreviation of Game Freak - .string "ゲーフリ$" - -gHoldEffectToType:: @ 8208263 - .byte HOLD_EFFECT_BUG_POWER, TYPE_BUG - .byte HOLD_EFFECT_STEEL_POWER, TYPE_STEEL - .byte HOLD_EFFECT_GROUND_POWER, TYPE_GROUND - .byte HOLD_EFFECT_ROCK_POWER, TYPE_ROCK - .byte HOLD_EFFECT_GRASS_POWER, TYPE_GRASS - .byte HOLD_EFFECT_DARK_POWER, TYPE_DARK - .byte HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING - .byte HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC - .byte HOLD_EFFECT_WATER_POWER, TYPE_WATER - .byte HOLD_EFFECT_FLYING_POWER, TYPE_FLYING - .byte HOLD_EFFECT_POISON_POWER, TYPE_POISON - .byte HOLD_EFFECT_ICE_POWER, TYPE_ICE - .byte HOLD_EFFECT_GHOST_POWER, TYPE_GHOST - .byte HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC - .byte HOLD_EFFECT_FIRE_POWER, TYPE_FIRE - .byte HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON - .byte HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL - .byte 0, 0 - - .align 2 -gSpriteTemplate_8208288:: @ 8208288 - spr_template 0xFFFF, 0, gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0 - spr_template 0xFFFF, 0, gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent - spr_template 0xFFFF, 0, gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0 - spr_template 0xFFFF, 0, gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent - -gSecretBaseTrainerClasses:: @ 82082E8 - .byte TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M - .byte TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F - -gUnknown_082082F2:: @ 82082F2 - .byte 0x1A, 0x1B, 0x1C, 0x1D, 0x1F, 0x1E - -gUnknown_082082F8:: @ 82082F8 - .byte 1, 1, 3, 2, 4, 6 - -gUnknown_082082FE:: @ 82082FE - .byte 5, 3, 2 - .byte 5, 3, 2 - .byte 1, 1, 0 - .byte 3, 2, 1 - .byte 1, 1, 0 - .byte 1, 1, 1 - .byte -1, -1, -1 - .byte -5, -5, -10 - .byte -5, -5, -10 - - .align 1 -gHMMoves:: @ 820831A - .2byte MOVE_CUT - .2byte MOVE_FLY - .2byte MOVE_SURF - .2byte MOVE_STRENGTH - .2byte MOVE_FLASH - .2byte MOVE_ROCK_SMASH - .2byte MOVE_WATERFALL - .2byte MOVE_DIVE - .2byte 0xFFFF - -gJapaneseNidoranNames:: @ 820832C - .string "ニドラン♂$", 11 - .string "ニドラン♀$", 11 diff --git a/include/data2.h b/include/data2.h index 759efe3d3..98c9405a0 100644 --- a/include/data2.h +++ b/include/data2.h @@ -17,6 +17,15 @@ struct MonCoords u8 y_offset; }; +extern const struct OamData gOamData_81F96F0; +extern const struct OamData gOamData_81F96E8; +extern const struct SpriteFrameImage gSpriteImageTable_81E7A10[]; +extern const struct SpriteFrameImage gSpriteImageTable_81E7A30[]; +extern const struct SpriteFrameImage gSpriteImageTable_81E7A50[]; +extern const struct SpriteFrameImage gSpriteImageTable_81E7A70[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7B70[]; +extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7BEC[]; + extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E7C18; extern const union AnimCmd *const gSpriteAnimTable_81E7C64[]; extern struct MonCoords gMonFrontPicCoords[]; diff --git a/ld_script.txt b/ld_script.txt index 516fa143d..7617236f8 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -333,7 +333,6 @@ SECTIONS { data/main_menu.o(.rodata); data/data2.o(.rodata); src/pokemon_data.o(.rodata); - data/pokemon.o(.rodata); . = ALIGN(4); data/trig.o(.rodata); data/util.o(.rodata); diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c index 7868a2c67..1b4cd92c0 100644 --- a/src/calculate_base_damage.c +++ b/src/calculate_base_damage.c @@ -41,7 +41,7 @@ extern struct BaseStats gBaseStats[]; extern struct SpriteTemplate gSpriteTemplate_8208288[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; -extern u8 gSecretBaseTrainerClasses[]; +// extern u8 gSecretBaseTrainerClasses[]; extern u8 gUnknown_08208238[]; extern u8 gUnknown_0820823C[]; extern u8 gStatStageRatios[]; diff --git a/src/pokemon_2.c b/src/pokemon_2.c index 7fbfc1271..8301ca39f 100644 --- a/src/pokemon_2.c +++ b/src/pokemon_2.c @@ -42,7 +42,7 @@ extern const struct SpriteTemplate gSpriteTemplate_8208288[]; //array of pointers to arrays of pointers to union AnimCmd (We probably need to typedef this.) extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; -extern u8 gSecretBaseTrainerClasses[]; +extern u8 gSecretBaseTrainerClasses[][5]; extern u8 gUnknown_08208238[]; extern u8 gUnknown_0820823C[]; extern u8 gStatStageRatios[][2]; @@ -1191,13 +1191,13 @@ void CreateSecretBaseEnemyParty(struct SecretBaseRecord *secretBaseRecord) u8 GetSecretBaseTrainerPicIndex(void) { - u8 trainerClass = gSecretBaseTrainerClasses[(gSecretBaseRecord.trainerId[0] % 5) + (5 * gSecretBaseRecord.gender)]; + u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; return gTrainerClassToPicIndex[trainerClass]; } u8 GetSecretBaseTrainerNameIndex(void) { - u8 trainerClass = gSecretBaseTrainerClasses[(gSecretBaseRecord.trainerId[0] % 5) + (5 * gSecretBaseRecord.gender)]; + u8 trainerClass = gSecretBaseTrainerClasses[gSecretBaseRecord.gender][gSecretBaseRecord.trainerId[0] % 5]; return gTrainerClassToNameIndex[trainerClass]; } diff --git a/src/pokemon_data.c b/src/pokemon_data.c index 75790b0c3..bd2f4513f 100644 --- a/src/pokemon_data.c +++ b/src/pokemon_data.c @@ -4,7 +4,10 @@ #include "trainer.h" #include "abilities.h" #include "moves.h" +#include "hold_effects.h" #include "items.h" +#include "sprite.h" +#include "data2.h" #define LEVEL_UP_MOVE(lvl, move) ((lvl << 9) | move) @@ -16921,3 +16924,107 @@ const u16 *const gLevelUpLearnsets[] = { gChimechoLevelUpLearnset }; +const u8 gUnknown_08208238[] = { // Masks for getting PP Up count, also PP Max values + 0x03, 0x0c, 0x30, 0xc0 +}; + +const u8 gUnknown_0820823C[] = { // Masks for setting PP Up count + 0xFC, 0xF3, 0xCF, 0x3F +}; + +const u8 gUnknown_08208240[] = { // Values added to PP Up count + 0x01, 0x04, 0x10, 0x40 +}; + +const u8 gStatStageRatios[][2] = { + {10, 40}, // -6 + {10, 35}, // -5 + {10, 30}, // -4 + {10, 25}, // -3 + {10, 20}, // -2 + {10, 15}, // -1 + {10, 10}, // 0 + {15, 10}, // 1 + {20, 10}, // 2 + {25, 10}, // 3 + {30, 10}, // 4 + {35, 10}, // 5 + {40, 10} // 6 +}; + +const u8 unknownGameFreakAbbrev_820825E[] = _("ゲーフリ"); + +const u8 gHoldEffectToType[][2] = { + {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, + {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, + {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, + {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, + {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, + {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, + {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, + {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, + {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, + {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, + {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, + {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, + {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, + {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, + {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, + {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, + {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL} +}; + +extern void sub_80105A0(struct Sprite *); +extern void oac_poke_opponent(struct Sprite *); + +const struct SpriteTemplate gSpriteTemplate_8208288[] = { + {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A10, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A30, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, + {0xFFFF, 0, &gOamData_81F96F0, NULL, gSpriteImageTable_81E7A50, gSpriteAffineAnimTable_81E7B70, sub_80105A0}, + {0xFFFF, 0, &gOamData_81F96E8, NULL, gSpriteImageTable_81E7A70, gSpriteAffineAnimTable_81E7BEC, oac_poke_opponent}, +}; + +const u8 gSecretBaseTrainerClasses[][5] = { + // male + {TRAINER_CLASS_YOUNGSTER, TRAINER_CLASS_BUG_CATCHER, TRAINER_CLASS_RICH_BOY, TRAINER_CLASS_CAMPER, TRAINER_CLASS_COOL_TRAINER_M}, + // female + {TRAINER_CLASS_LASS, TRAINER_CLASS_SCHOOL_KID_F, TRAINER_CLASS_LADY, TRAINER_CLASS_PICNICKER, TRAINER_CLASS_COOL_TRAINER_F} +}; + +const u8 gUnknown_082082F2[] = { + MON_DATA_HP_EV, + MON_DATA_ATK_EV, + MON_DATA_DEF_EV, + MON_DATA_SPD_EV, + MON_DATA_SPDEF_EV, + MON_DATA_SPATK_EV +}; + +const u8 gUnknown_082082F8[] = {1, 1, 3, 2, 4, 6}; + +const s8 gUnknown_082082FE[][3] = { + // Happiness deltas + { 5, 3, 2}, + { 5, 3, 2}, + { 1, 1, 0}, + { 3, 2, 1}, + { 1, 1, 0}, + { 1, 1, 1}, + {-1, -1, -1}, + {-5, -5, -10}, + {-5, -5, -10} +}; + +const u16 gHMMoves[] = { + MOVE_CUT, + MOVE_FLY, + MOVE_SURF, + MOVE_STRENGTH, + MOVE_FLASH, + MOVE_ROCK_SMASH, + MOVE_WATERFALL, + MOVE_DIVE, + 0xffff +}; + +const u8 gJapaneseNidoranNames[][11] = {_("ニドラン♂"), _("ニドラン♀")}; |