summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2017-06-16 18:01:33 -0400
committerscnorton <scnorton@biociphers.org>2017-06-16 18:01:33 -0400
commit3d9eb18add0d8a9eb5bfa77fc64cd7b1f37fea5d (patch)
tree75d0853ce38e31116d4c1ab031bdb80256133983
parent244ef10a3ffb2f9f00526cca37cee354c5cc5b3f (diff)
Decompile remaining Pokemon data into c objects
-rw-r--r--data/pokemon.s95
-rw-r--r--include/data2.h9
-rwxr-xr-xld_script.txt1
-rw-r--r--src/calculate_base_damage.c2
-rw-r--r--src/pokemon_2.c6
-rw-r--r--src/pokemon_data.c107
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] = {_("ニドラン♂"), _("ニドラン♀")};