From 9301062ce54d1d1406077b169473e99c2bdd3662 Mon Sep 17 00:00:00 2001 From: Prof-Holon Date: Sat, 4 Apr 2026 16:37:03 +0100 Subject: [PATCH 1/3] Changes to fundamentals (1) in progress --- graphics/summary_screen/bg.png | Bin 17264 -> 4376 bytes src/data/pokemon/species_info.h | 194 ++++++++++++++++---------------- src/pokemon.c | 20 ++-- src/pokemon_summary_screen.c | 138 ++++++++++++++++++----- 4 files changed, 221 insertions(+), 131 deletions(-) diff --git a/graphics/summary_screen/bg.png b/graphics/summary_screen/bg.png index c7285d2bda7f03df4d4e4c36c047ebfb3ba066a6..7160ee34238919e8a8921fa7b04b9174b8287e9e 100644 GIT binary patch literal 4376 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 JU3P{T^FK_;pi%$; literal 17264 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 XvJ&bO^0eOD00000NkvXXu0mjf!g62d diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 74522ea55..4492aa4cd 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -128,7 +128,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 52, .baseDefense = 43, .baseSpeed = 65, - .baseSpAttack = 60, + .baseSpAttack = 50, .baseSpDefense = 50, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, @@ -157,7 +157,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 64, .baseDefense = 58, .baseSpeed = 80, - .baseSpAttack = 80, + .baseSpAttack = 65, .baseSpDefense = 65, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, @@ -186,7 +186,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 84, .baseDefense = 78, .baseSpeed = 100, - .baseSpAttack = 109, + .baseSpAttack = 85, .baseSpDefense = 85, .types = {TYPE_FIRE, TYPE_FLYING}, .catchRate = 45, @@ -216,7 +216,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 43, .baseSpAttack = 50, - .baseSpDefense = 64, + .baseSpDefense = 50, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 66, @@ -245,7 +245,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 58, .baseSpAttack = 65, - .baseSpDefense = 80, + .baseSpDefense = 65, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 143, @@ -274,7 +274,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 100, .baseSpeed = 78, .baseSpAttack = 85, - .baseSpDefense = 105, + .baseSpDefense = 85, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 210, @@ -448,7 +448,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 40, .baseSpeed = 75, .baseSpAttack = 45, - .baseSpDefense = 80, + .baseSpDefense = 45, .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 45, .expYield = 159, @@ -564,7 +564,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 35, .baseSpeed = 72, .baseSpAttack = 25, - .baseSpDefense = 35, + .baseSpDefense = 25, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 255, .expYield = 57, @@ -593,7 +593,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 97, .baseSpAttack = 50, - .baseSpDefense = 70, + .baseSpDefense = 50, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 127, .expYield = 116, @@ -680,7 +680,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 44, .baseSpeed = 55, .baseSpAttack = 40, - .baseSpDefense = 54, + .baseSpDefense = 40, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 255, .expYield = 62, @@ -709,7 +709,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 69, .baseSpeed = 80, .baseSpAttack = 65, - .baseSpDefense = 79, + .baseSpDefense = 65, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 90, .expYield = 147, @@ -738,7 +738,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 30, .baseSpeed = 90, .baseSpAttack = 50, - .baseSpDefense = 40, + .baseSpDefense = 50, .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 190, .expYield = 82, @@ -767,7 +767,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 55, .baseSpeed = 100, .baseSpAttack = 90, - .baseSpDefense = 80, + .baseSpDefense = 90, .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 75, .expYield = 122, @@ -795,7 +795,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 75, .baseDefense = 85, .baseSpeed = 40, - .baseSpAttack = 20, + .baseSpAttack = 30, .baseSpDefense = 30, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, @@ -824,7 +824,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 100, .baseDefense = 110, .baseSpeed = 65, - .baseSpAttack = 45, + .baseSpAttack = 55, .baseSpDefense = 55, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 90, @@ -912,7 +912,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 87, .baseSpeed = 76, .baseSpAttack = 75, - .baseSpDefense = 85, + .baseSpDefense = 75, .types = {TYPE_POISON, TYPE_GROUND}, .catchRate = 45, .expYield = 194, @@ -998,7 +998,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 92, .baseDefense = 77, .baseSpeed = 85, - .baseSpAttack = 85, + .baseSpAttack = 75, .baseSpDefense = 75, .types = {TYPE_POISON, TYPE_GROUND}, .catchRate = 45, @@ -1028,7 +1028,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 48, .baseSpeed = 35, .baseSpAttack = 60, - .baseSpDefense = 65, + .baseSpDefense = 60, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 150, .expYield = 68, @@ -1057,7 +1057,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 73, .baseSpeed = 60, .baseSpAttack = 85, - .baseSpDefense = 90, + .baseSpDefense = 85, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 25, .expYield = 129, @@ -1085,7 +1085,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 41, .baseDefense = 40, .baseSpeed = 65, - .baseSpAttack = 50, + .baseSpAttack = 65, .baseSpDefense = 65, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, @@ -1114,7 +1114,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 76, .baseDefense = 75, .baseSpeed = 100, - .baseSpAttack = 81, + .baseSpAttack = 100, .baseSpDefense = 100, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 75, @@ -1143,7 +1143,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 45, .baseDefense = 20, .baseSpeed = 20, - .baseSpAttack = 45, + .baseSpAttack = 25, .baseSpDefense = 25, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 170, @@ -1172,7 +1172,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 45, .baseSpeed = 45, - .baseSpAttack = 75, + .baseSpAttack = 50, .baseSpDefense = 50, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 50, @@ -1201,7 +1201,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 45, .baseDefense = 35, .baseSpeed = 55, - .baseSpAttack = 30, + .baseSpAttack = 40, .baseSpDefense = 40, .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 255, @@ -1230,7 +1230,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 70, .baseSpeed = 90, - .baseSpAttack = 65, + .baseSpAttack = 75, .baseSpDefense = 75, .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 90, @@ -1260,7 +1260,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 55, .baseSpeed = 30, .baseSpAttack = 75, - .baseSpDefense = 65, + .baseSpDefense = 75, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 255, .expYield = 78, @@ -1289,7 +1289,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 40, .baseSpAttack = 85, - .baseSpDefense = 75, + .baseSpDefense = 85, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 120, .expYield = 132, @@ -1318,7 +1318,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 85, .baseSpeed = 50, .baseSpAttack = 100, - .baseSpDefense = 90, + .baseSpDefense = 100, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 184, @@ -1346,7 +1346,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 55, .baseSpeed = 25, - .baseSpAttack = 45, + .baseSpAttack = 55, .baseSpDefense = 55, .types = {TYPE_BUG, TYPE_GRASS}, .catchRate = 190, @@ -1375,7 +1375,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 95, .baseDefense = 80, .baseSpeed = 30, - .baseSpAttack = 60, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_BUG, TYPE_GRASS}, .catchRate = 75, @@ -1405,7 +1405,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 50, .baseSpeed = 45, .baseSpAttack = 40, - .baseSpDefense = 55, + .baseSpDefense = 40, .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 190, .expYield = 75, @@ -1434,7 +1434,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 90, .baseSpAttack = 90, - .baseSpDefense = 75, + .baseSpDefense = 90, .types = {TYPE_BUG, TYPE_POISON}, .catchRate = 75, .expYield = 138, @@ -1462,7 +1462,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 55, .baseDefense = 25, .baseSpeed = 95, - .baseSpAttack = 35, + .baseSpAttack = 45, .baseSpDefense = 45, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 255, @@ -1491,7 +1491,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 50, .baseSpeed = 120, - .baseSpAttack = 50, + .baseSpAttack = 70, .baseSpDefense = 70, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 50, @@ -1578,7 +1578,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 52, .baseDefense = 48, .baseSpeed = 55, - .baseSpAttack = 65, + .baseSpAttack = 50, .baseSpDefense = 50, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, @@ -1607,7 +1607,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 82, .baseDefense = 78, .baseSpeed = 85, - .baseSpAttack = 95, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, @@ -1637,7 +1637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 35, .baseSpeed = 70, .baseSpAttack = 35, - .baseSpDefense = 45, + .baseSpDefense = 35, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 190, .expYield = 74, @@ -1666,7 +1666,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 95, .baseSpAttack = 60, - .baseSpDefense = 70, + .baseSpDefense = 60, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 75, .expYield = 149, @@ -1694,7 +1694,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 45, .baseSpeed = 60, - .baseSpAttack = 70, + .baseSpAttack = 50, .baseSpDefense = 50, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 190, @@ -1723,7 +1723,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 110, .baseDefense = 80, .baseSpeed = 95, - .baseSpAttack = 100, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 75, @@ -1811,7 +1811,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 70, - .baseSpDefense = 90, + .baseSpDefense = 70, .types = {TYPE_WATER, TYPE_FIGHTING}, .catchRate = 45, .expYield = 185, @@ -1840,7 +1840,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 15, .baseSpeed = 90, .baseSpAttack = 105, - .baseSpDefense = 55, + .baseSpDefense = 105, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 200, .expYield = 73, @@ -1869,7 +1869,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 30, .baseSpeed = 105, .baseSpAttack = 120, - .baseSpDefense = 70, + .baseSpDefense = 120, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 100, .expYield = 145, @@ -1898,7 +1898,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 45, .baseSpeed = 120, .baseSpAttack = 135, - .baseSpDefense = 85, + .baseSpDefense = 135, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 50, .expYield = 186, @@ -1956,7 +1956,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 45, .baseSpAttack = 50, - .baseSpDefense = 60, + .baseSpDefense = 50, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 90, .expYield = 146, @@ -1985,7 +1985,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 55, .baseSpAttack = 65, - .baseSpDefense = 85, + .baseSpDefense = 65, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 193, @@ -2014,7 +2014,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 35, .baseSpeed = 40, .baseSpAttack = 70, - .baseSpDefense = 30, + .baseSpDefense = 70, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 255, .expYield = 84, @@ -2043,7 +2043,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 50, .baseSpeed = 55, .baseSpAttack = 85, - .baseSpDefense = 45, + .baseSpDefense = 85, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 120, .expYield = 151, @@ -2072,7 +2072,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 70, .baseSpAttack = 100, - .baseSpDefense = 60, + .baseSpDefense = 100, .types = {TYPE_GRASS, TYPE_POISON}, .catchRate = 45, .expYield = 191, @@ -2100,7 +2100,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 40, .baseDefense = 35, .baseSpeed = 70, - .baseSpAttack = 50, + .baseSpAttack = 100, .baseSpDefense = 100, .types = {TYPE_WATER, TYPE_POISON}, .catchRate = 190, @@ -2129,7 +2129,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 65, .baseSpeed = 100, - .baseSpAttack = 80, + .baseSpAttack = 120, .baseSpDefense = 120, .types = {TYPE_WATER, TYPE_POISON}, .catchRate = 60, @@ -2217,7 +2217,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 130, .baseSpeed = 45, .baseSpAttack = 55, - .baseSpDefense = 65, + .baseSpDefense = 55, .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 177, @@ -2332,7 +2332,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 75, .baseDefense = 110, .baseSpeed = 30, - .baseSpAttack = 100, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 75, @@ -2362,7 +2362,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 45, .baseSpAttack = 95, - .baseSpDefense = 55, + .baseSpDefense = 95, .types = {TYPE_ELECTRIC, TYPE_ROCK}, .catchRate = 190, .expYield = 89, @@ -2391,7 +2391,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 120, - .baseSpDefense = 70, + .baseSpDefense = 120, .types = {TYPE_ELECTRIC, TYPE_ROCK}, .catchRate = 60, .expYield = 161, @@ -2420,7 +2420,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 55, .baseSpeed = 60, .baseSpAttack = 58, - .baseSpDefense = 62, + .baseSpDefense = 58, .types = {TYPE_NORMAL, TYPE_FLYING}, .catchRate = 45, .expYield = 94, @@ -2506,7 +2506,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 45, .baseDefense = 55, .baseSpeed = 45, - .baseSpAttack = 45, + .baseSpAttack = 70, .baseSpDefense = 70, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, @@ -2535,7 +2535,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 70, .baseDefense = 80, .baseSpeed = 70, - .baseSpAttack = 70, + .baseSpAttack = 95, .baseSpDefense = 95, .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 75, @@ -2565,7 +2565,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 50, .baseSpeed = 25, .baseSpAttack = 40, - .baseSpDefense = 50, + .baseSpDefense = 40, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 190, .expYield = 90, @@ -2594,7 +2594,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 75, .baseSpeed = 50, .baseSpAttack = 65, - .baseSpDefense = 100, + .baseSpDefense = 65, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 75, .expYield = 157, @@ -2623,7 +2623,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 100, .baseSpeed = 40, .baseSpAttack = 45, - .baseSpDefense = 25, + .baseSpDefense = 45, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 190, .expYield = 97, @@ -2652,7 +2652,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 180, .baseSpeed = 70, .baseSpAttack = 85, - .baseSpDefense = 45, + .baseSpDefense = 85, .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 60, .expYield = 203, @@ -2681,7 +2681,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 30, .baseSpeed = 80, .baseSpAttack = 100, - .baseSpDefense = 35, + .baseSpDefense = 100, .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 190, .expYield = 95, @@ -2710,7 +2710,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 45, .baseSpeed = 95, .baseSpAttack = 115, - .baseSpDefense = 55, + .baseSpDefense = 115, .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 90, .expYield = 126, @@ -2739,7 +2739,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 130, - .baseSpDefense = 75, + .baseSpDefense = 130, .types = {TYPE_GHOST, TYPE_POISON}, .catchRate = 45, .expYield = 190, @@ -2768,7 +2768,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 160, .baseSpeed = 70, .baseSpAttack = 30, - .baseSpDefense = 45, + .baseSpDefense = 30, .types = {TYPE_ROCK, TYPE_GROUND}, .catchRate = 45, .expYield = 108, @@ -2796,7 +2796,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 48, .baseDefense = 45, .baseSpeed = 42, - .baseSpAttack = 43, + .baseSpAttack = 90, .baseSpDefense = 90, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 190, @@ -2825,7 +2825,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 73, .baseDefense = 70, .baseSpeed = 67, - .baseSpAttack = 73, + .baseSpAttack = 115, .baseSpDefense = 115, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 75, @@ -2971,7 +2971,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 40, .baseSpAttack = 60, - .baseSpDefense = 45, + .baseSpDefense = 60, .types = {TYPE_GRASS, TYPE_PSYCHIC}, .catchRate = 90, .expYield = 98, @@ -3000,7 +3000,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 85, .baseSpeed = 55, .baseSpAttack = 125, - .baseSpDefense = 65, + .baseSpDefense = 125, .types = {TYPE_GRASS, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 212, @@ -3029,7 +3029,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 35, .baseSpAttack = 40, - .baseSpDefense = 50, + .baseSpDefense = 40, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 190, .expYield = 87, @@ -3058,7 +3058,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 110, .baseSpeed = 45, .baseSpAttack = 50, - .baseSpDefense = 80, + .baseSpDefense = 50, .types = {TYPE_GROUND, TYPE_GROUND}, .catchRate = 75, .expYield = 124, @@ -3087,7 +3087,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 53, .baseSpeed = 87, .baseSpAttack = 35, - .baseSpDefense = 110, + .baseSpDefense = 35, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 139, @@ -3116,7 +3116,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 79, .baseSpeed = 76, .baseSpAttack = 35, - .baseSpDefense = 110, + .baseSpDefense = 35, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 140, @@ -3145,7 +3145,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 75, .baseSpeed = 30, .baseSpAttack = 60, - .baseSpDefense = 75, + .baseSpDefense = 60, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 127, @@ -3174,7 +3174,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 35, .baseSpAttack = 60, - .baseSpDefense = 45, + .baseSpDefense = 60, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 190, .expYield = 114, @@ -3203,7 +3203,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 120, .baseSpeed = 60, .baseSpAttack = 85, - .baseSpDefense = 70, + .baseSpDefense = 85, .types = {TYPE_POISON, TYPE_POISON}, .catchRate = 60, .expYield = 173, @@ -3289,7 +3289,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 5, .baseDefense = 5, .baseSpeed = 50, - .baseSpAttack = 35, + .baseSpAttack = 105, .baseSpDefense = 105, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, @@ -3319,7 +3319,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 115, .baseSpeed = 60, .baseSpAttack = 100, - .baseSpDefense = 40, + .baseSpDefense = 100, .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, .expYield = 166, @@ -3348,7 +3348,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 90, .baseSpAttack = 40, - .baseSpDefense = 80, + .baseSpDefense = 40, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, .expYield = 175, @@ -3377,7 +3377,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 70, .baseSpeed = 60, .baseSpAttack = 70, - .baseSpDefense = 25, + .baseSpDefense = 70, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 83, @@ -3406,7 +3406,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 85, .baseSpAttack = 95, - .baseSpDefense = 45, + .baseSpDefense = 95, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 75, .expYield = 155, @@ -3434,7 +3434,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 67, .baseDefense = 60, .baseSpeed = 63, - .baseSpAttack = 35, + .baseSpAttack = 50, .baseSpDefense = 50, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, @@ -3463,7 +3463,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 92, .baseDefense = 65, .baseSpeed = 68, - .baseSpAttack = 65, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 60, @@ -3493,7 +3493,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 55, .baseSpeed = 85, .baseSpAttack = 70, - .baseSpDefense = 55, + .baseSpDefense = 70, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 225, .expYield = 106, @@ -3522,7 +3522,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 85, .baseSpeed = 115, .baseSpAttack = 100, - .baseSpDefense = 85, + .baseSpDefense = 100, .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 60, .expYield = 207, @@ -3551,7 +3551,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 90, .baseSpAttack = 100, - .baseSpDefense = 120, + .baseSpDefense = 100, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 136, @@ -3580,7 +3580,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 80, .baseSpeed = 105, .baseSpAttack = 55, - .baseSpDefense = 80, + .baseSpDefense = 55, .types = {TYPE_BUG, TYPE_FLYING}, .catchRate = 45, .expYield = 187, @@ -3608,7 +3608,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 50, .baseDefense = 35, .baseSpeed = 95, - .baseSpAttack = 115, + .baseSpAttack = 95, .baseSpDefense = 95, .types = {TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, @@ -3637,7 +3637,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 83, .baseDefense = 57, .baseSpeed = 105, - .baseSpAttack = 95, + .baseSpAttack = 85, .baseSpDefense = 85, .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, @@ -3666,7 +3666,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 95, .baseDefense = 57, .baseSpeed = 93, - .baseSpAttack = 100, + .baseSpAttack = 85, .baseSpDefense = 85, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, @@ -3696,7 +3696,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 100, .baseSpeed = 85, .baseSpAttack = 55, - .baseSpDefense = 70, + .baseSpDefense = 55, .types = {TYPE_BUG, TYPE_BUG}, .catchRate = 45, .expYield = 200, @@ -3724,7 +3724,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 100, .baseDefense = 95, .baseSpeed = 110, - .baseSpAttack = 40, + .baseSpAttack = 70, .baseSpDefense = 70, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, @@ -3753,7 +3753,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 10, .baseDefense = 55, .baseSpeed = 80, - .baseSpAttack = 15, + .baseSpAttack = 20, .baseSpDefense = 20, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 255, @@ -3782,7 +3782,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 125, .baseDefense = 79, .baseSpeed = 81, - .baseSpAttack = 60, + .baseSpAttack = 100, .baseSpDefense = 100, .types = {TYPE_WATER, TYPE_FLYING}, .catchRate = 45, @@ -3811,7 +3811,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 85, .baseDefense = 80, .baseSpeed = 60, - .baseSpAttack = 85, + .baseSpAttack = 95, .baseSpDefense = 95, .types = {TYPE_WATER, TYPE_ICE}, .catchRate = 45, @@ -3869,7 +3869,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 55, .baseDefense = 50, .baseSpeed = 55, - .baseSpAttack = 45, + .baseSpAttack = 65, .baseSpDefense = 65, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, diff --git a/src/pokemon.c b/src/pokemon.c index 66a5c3d23..59ff98753 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2140,8 +2140,14 @@ void CalculateMonStats(struct Pokemon *mon) CALC_STAT(baseAttack, attackIV, attackEV, STAT_ATK, MON_DATA_ATK) CALC_STAT(baseDefense, defenseIV, defenseEV, STAT_DEF, MON_DATA_DEF) CALC_STAT(baseSpeed, speedIV, speedEV, STAT_SPEED, MON_DATA_SPEED) - CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, STAT_SPATK, MON_DATA_SPATK) - CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, STAT_SPDEF, MON_DATA_SPDEF) + { + u8 baseStat = gSpeciesInfo[species].baseSpAttack; // same value as baseSpDefense after Step 1 + s32 n = (((2 * baseStat + spAttackIV + spAttackEV / 4) * level) / 100) + 5; + u8 nature = GetNature(mon); + n = ModifyStatByNature(nature, n, STAT_SPATK); // use SpAtk column only + SetMonData(mon, MON_DATA_SPATK, &n); + SetMonData(mon, MON_DATA_SPDEF, &n); // mirror + } if (species == SPECIES_SHEDINJA) { @@ -2408,7 +2414,7 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de attack = attacker->attack; defense = defender->defense; spAttack = attacker->spAttack; - spDefense = defender->spDefense; + spDefense = defender->spAttack; //updated to merge // Get attacker hold item info if (attacker->item == ITEM_ENIGMA_BERRY) @@ -2580,13 +2586,13 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de if (gCritMultiplier == 2) { // Critical hit, if defender has gained sp. defense stat stages then ignore stat increase - if (defender->statStages[STAT_SPDEF] < DEFAULT_STAT_STAGE) - APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) + if (defender->statStages[STAT_SPATK] < DEFAULT_STAT_STAGE) + APPLY_STAT_MOD(damageHelper, defender, spAttack, STAT_SPATK) else - damageHelper = spDefense; + damageHelper = spAttack; } else - APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_SPDEF) + APPLY_STAT_MOD(damageHelper, defender, spAttack, STAT_SPATK) damage = (damage / damageHelper); damage /= 50; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index b3e3c7763..fd60c310f 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -174,6 +174,8 @@ struct PokemonSummaryScreenData u8 ALIGNED(4) levelStrBuf[7]; u8 ALIGNED(4) curHpStrBuf[9]; u8 ALIGNED(4) statValueStrBufs[5][5]; + u8 ALIGNED(4) ivStrBufs[5][4]; // add Ivs + u8 ALIGNED(4) evStrBufs[5][5]; // add Evs u8 ALIGNED(4) moveCurPpStrBufs[5][11]; u8 ALIGNED(4) moveMaxPpStrBufs[5][11]; @@ -2171,28 +2173,8 @@ static void BufferMonSkills(void) if (sMonSummaryScreen->savedCallback == CB2_ReturnToTradeMenuFromSummary && sMonSummaryScreen->isEnemyParty == TRUE) { - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + // SpAtk + SpDef block and add IV/EV reads: - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); - - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); - - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPDEF2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spDStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); - - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED2); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); - } - else - { statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK); ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); @@ -2201,17 +2183,95 @@ static void BufferMonSkills(void) ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); + // CHANGED: read SpAtk only, write to SPA slot, discard SpDef entirely statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK); ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); - - statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPDEF); - ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); - sMonSkillsPrinterXpos->spDStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); + // PSS_STAT_SPD slot and spDStr are no longer populated statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED); ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + + // ADD: IV reads + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[0], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[1], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[2], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[3], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_HP_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[4], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + // ADD: EV reads + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[0], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[1], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[2], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[3], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_HP_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[4], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + } + else + { + // SpAtk + SpDef block and add IV/EV reads: + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + sMonSkillsPrinterXpos->atkStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + sMonSkillsPrinterXpos->defStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); + + // CHANGED: read SpAtk only, write to SPA slot, discard SpDef entirely + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + sMonSkillsPrinterXpos->spAStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); + // PSS_STAT_SPD slot and spDStr are no longer populated + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + sMonSkillsPrinterXpos->speStr = GetNumberRightAlign27(sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + + // ADD: IV reads + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[0], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[1], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[2], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED_IV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.ivStrBufs[3], statValue, STR_CONV_MODE_LEFT_ALIGN, 2); + + // ADD: EV reads + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_ATK_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[0], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_DEF_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[1], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPATK_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[2], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); + + statValue = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_SPEED_EV); + ConvertIntToDecimalStringN(sMonSummaryScreen->summary.evStrBufs[3], statValue, STR_CONV_MODE_LEFT_ALIGN, 3); } exp = GetMonData(&sMonSummaryScreen->currentMon, MON_DATA_EXP); @@ -2498,13 +2558,37 @@ static void PrintInfoPage(void) static void PrintSkillsPage(void) { + // HP — unchanged AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 14 + sMonSkillsPrinterXpos->curHpStr, 4, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.curHpStrBuf); + + // ADD: HP IV and EV on the same row + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 56, 4, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.ivStrBufs[4]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 70, 4, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.evStrBufs[4]); + + // ATK — y=22, stat value left column, IV and EV right columns AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->atkStr, 22, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_ATK]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 56, 22, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.ivStrBufs[0]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 70, 22, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.evStrBufs[0]); + + // DEF — y=35 AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->defStr, 35, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_DEF]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spAStr, 48, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); - AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spDStr, 61, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPD]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 56, 35, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.ivStrBufs[1]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 70, 35, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.evStrBufs[1]); + + // SPECIAL — y=54 (centred between old y=48 and y=61, SpDef row removed) + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->spAStr, 54, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPA]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 56, 54, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.ivStrBufs[2]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 70, 54, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.evStrBufs[2]); + + // SPEED — not shifted AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 50 + sMonSkillsPrinterXpos->speStr, 74, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.statValueStrBufs[PSS_STAT_SPE]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 56, 74, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.ivStrBufs[3]); + AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_SMALL, 70, 74, sLevelNickTextColors[1], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.evStrBufs[3]); + + // EXP — not shifted AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->expStr, 87, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expPointsStrBuf); + + // To Next — not shifted AddTextPrinterParameterized3(sMonSummaryScreen->windowIds[POKESUM_WIN_RIGHT_PANE], FONT_NORMAL, 15 + sMonSkillsPrinterXpos->toNextLevel, 100, sLevelNickTextColors[0], TEXT_SKIP_DRAW, sMonSummaryScreen->summary.expToNextLevelStrBuf); } From a4f3c4ad3ffcea0fce518259c4a5f25a601f790d Mon Sep 17 00:00:00 2001 From: Prof-Holon Date: Sat, 4 Apr 2026 21:22:19 +0100 Subject: [PATCH 2/3] Update species_info.h --- src/data/pokemon/species_info.h | 60 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 4492aa4cd..6cc7107da 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -3899,7 +3899,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 65, .baseSpAttack = 110, - .baseSpDefense = 95, + .baseSpDefense = 110, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, .expYield = 196, @@ -3928,7 +3928,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 130, .baseSpAttack = 110, - .baseSpDefense = 95, + .baseSpDefense = 110, .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, .expYield = 197, @@ -3956,7 +3956,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 130, .baseDefense = 60, .baseSpeed = 65, - .baseSpAttack = 95, + .baseSpAttack = 110, .baseSpDefense = 110, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, @@ -3985,7 +3985,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 60, .baseDefense = 70, .baseSpeed = 40, - .baseSpAttack = 85, + .baseSpAttack = 75, .baseSpDefense = 75, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, @@ -4015,7 +4015,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 100, .baseSpeed = 35, .baseSpAttack = 90, - .baseSpDefense = 55, + .baseSpDefense = 90, .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 120, @@ -4044,7 +4044,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 125, .baseSpeed = 55, .baseSpAttack = 115, - .baseSpDefense = 70, + .baseSpDefense = 115, .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, .expYield = 199, @@ -4072,7 +4072,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 90, .baseSpeed = 55, - .baseSpAttack = 55, + .baseSpAttack = 45, .baseSpDefense = 45, .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, @@ -4101,7 +4101,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 115, .baseDefense = 105, .baseSpeed = 80, - .baseSpAttack = 65, + .baseSpAttack = 70, .baseSpDefense = 70, .types = {TYPE_ROCK, TYPE_WATER}, .catchRate = 45, @@ -4131,7 +4131,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 130, .baseSpAttack = 60, - .baseSpDefense = 75, + .baseSpDefense = 60, .types = {TYPE_ROCK, TYPE_FLYING}, .catchRate = 45, .expYield = 202, @@ -4160,7 +4160,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 65, .baseSpeed = 30, .baseSpAttack = 65, - .baseSpDefense = 110, + .baseSpDefense = 65, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 25, .expYield = 154, @@ -4188,7 +4188,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 85, .baseDefense = 100, .baseSpeed = 85, - .baseSpAttack = 95, + .baseSpAttack = 125, .baseSpDefense = 125, .types = {TYPE_ICE, TYPE_FLYING}, .catchRate = 3, @@ -4218,7 +4218,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 85, .baseSpeed = 100, .baseSpAttack = 125, - .baseSpDefense = 90, + .baseSpDefense = 125, .types = {TYPE_ELECTRIC, TYPE_FLYING}, .catchRate = 3, .expYield = 216, @@ -4247,7 +4247,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 90, .baseSpeed = 90, .baseSpAttack = 125, - .baseSpDefense = 85, + .baseSpDefense = 125, .types = {TYPE_FIRE, TYPE_FLYING}, .catchRate = 3, .expYield = 217, @@ -4363,7 +4363,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 90, .baseSpeed = 130, .baseSpAttack = 154, - .baseSpDefense = 90, + .baseSpDefense = 154, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 3, .expYield = 220, @@ -4913,7 +4913,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 90, .baseDefense = 80, .baseSpeed = 130, - .baseSpAttack = 70, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_POISON, TYPE_FLYING}, .catchRate = 90, @@ -5029,7 +5029,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 25, .baseDefense = 28, .baseSpeed = 15, - .baseSpAttack = 45, + .baseSpAttack = 55, .baseSpDefense = 55, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 150, @@ -5059,7 +5059,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 15, .baseSpeed = 15, .baseSpAttack = 40, - .baseSpDefense = 20, + .baseSpDefense = 40, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 170, .expYield = 39, @@ -5290,7 +5290,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 85, .baseSpeed = 50, - .baseSpAttack = 90, + .baseSpAttack = 100, .baseSpDefense = 100, .types = {TYPE_GRASS, TYPE_GRASS}, .catchRate = 45, @@ -5406,7 +5406,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 75, .baseDefense = 75, .baseSpeed = 70, - .baseSpAttack = 90, + .baseSpAttack = 100, .baseSpDefense = 100, .types = {TYPE_WATER, TYPE_WATER}, .catchRate = 45, @@ -5697,7 +5697,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 60, .baseSpeed = 110, .baseSpAttack = 130, - .baseSpDefense = 95, + .baseSpDefense = 130, .types = {TYPE_PSYCHIC, TYPE_PSYCHIC}, .catchRate = 45, .expYield = 197, @@ -5725,7 +5725,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 65, .baseDefense = 110, .baseSpeed = 65, - .baseSpAttack = 60, + .baseSpAttack = 130, .baseSpDefense = 130, .types = {TYPE_GHOST, TYPE_GHOST}, .catchRate = 45, @@ -5783,7 +5783,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 75, .baseDefense = 80, .baseSpeed = 30, - .baseSpAttack = 100, + .baseSpAttack = 110, .baseSpDefense = 110, .types = {TYPE_WATER, TYPE_PSYCHIC}, .catchRate = 70, @@ -6044,7 +6044,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 85, .baseDefense = 200, .baseSpeed = 30, - .baseSpAttack = 55, + .baseSpAttack = 65, .baseSpDefense = 65, .types = {TYPE_ROCK, TYPE_ROCK}, .catchRate = 25, @@ -6160,7 +6160,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 130, .baseDefense = 100, .baseSpeed = 65, - .baseSpAttack = 55, + .baseSpAttack = 80, .baseSpDefense = 80, .types = {TYPE_BUG, TYPE_ROCK}, .catchRate = 25, @@ -6769,7 +6769,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 80, .baseDefense = 90, .baseSpeed = 60, - .baseSpAttack = 105, + .baseSpAttack = 95, .baseSpDefense = 95, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 45, @@ -6886,7 +6886,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseDefense = 95, .baseSpeed = 70, .baseSpAttack = 35, - .baseSpDefense = 110, + .baseSpDefense = 35, .types = {TYPE_FIGHTING, TYPE_FIGHTING}, .catchRate = 45, .expYield = 138, @@ -6914,7 +6914,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 30, .baseDefense = 15, .baseSpeed = 65, - .baseSpAttack = 85, + .baseSpAttack = 65, .baseSpDefense = 65, .types = {TYPE_ICE, TYPE_PSYCHIC}, .catchRate = 45, @@ -6943,7 +6943,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 63, .baseDefense = 37, .baseSpeed = 95, - .baseSpAttack = 65, + .baseSpAttack = 55, .baseSpDefense = 55, .types = {TYPE_ELECTRIC, TYPE_ELECTRIC}, .catchRate = 45, @@ -6972,7 +6972,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 75, .baseDefense = 37, .baseSpeed = 83, - .baseSpAttack = 70, + .baseSpAttack = 55, .baseSpDefense = 55, .types = {TYPE_FIRE, TYPE_FIRE}, .catchRate = 45, @@ -7030,7 +7030,7 @@ const struct SpeciesInfo gSpeciesInfo[] = .baseAttack = 10, .baseDefense = 10, .baseSpeed = 55, - .baseSpAttack = 75, + .baseSpAttack = 135, .baseSpDefense = 135, .types = {TYPE_NORMAL, TYPE_NORMAL}, .catchRate = 30, From 9757e7e749b7016844fffad7194bdca14d1f50a6 Mon Sep 17 00:00:00 2001 From: Prof-Holon Date: Sat, 4 Apr 2026 21:43:36 +0100 Subject: [PATCH 3/3] UPDATE MOVES --- src/battle_script_commands.c | 15 ++++++- src/data/battle_moves.h | 10 ++--- src/data/pokemon/species_info.h | 70 ++++++++++++++++----------------- 3 files changed, 54 insertions(+), 41 deletions(-) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 9a75651cf..985a53544 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6881,7 +6881,14 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) gBattleMons[gActiveBattler].statStages[statId] = MIN_STAT_STAGE; if (gBattleMons[gActiveBattler].statStages[statId] > MAX_STAT_STAGE) gBattleMons[gActiveBattler].statStages[statId] = MAX_STAT_STAGE; - + // ADD: mirror SpAtk and SpDef stages — merged Special stat + if (statId == STAT_SPATK) + gBattleMons[gActiveBattler].statStages[STAT_SPDEF] = + gBattleMons[gActiveBattler].statStages[STAT_SPATK]; + if (statId == STAT_SPDEF) + gBattleMons[gActiveBattler].statStages[STAT_SPATK] = + gBattleMons[gActiveBattler].statStages[STAT_SPDEF]; + // END ADD if (gBattleCommunication[MULTISTRING_CHOOSER] == B_MSG_STAT_WONT_INCREASE && flags & STAT_CHANGE_ALLOW_PTR) gMoveResultFlags |= MOVE_RESULT_MISSED; @@ -6896,6 +6903,12 @@ static void Cmd_statbuffchange(void) const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2); if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED) gBattlescriptCurrInstr += 6; + if (statId == STAT_SPATK) + gBattleMons[gBattlerTarget].statStages[STAT_SPDEF] = + gBattleMons[gBattlerTarget].statStages[STAT_SPATK]; + if (statId == STAT_SPDEF) + gBattleMons[gBattlerTarget].statStages[STAT_SPATK] = + gBattleMons[gBattlerTarget].statStages[STAT_SPDEF]; } // Haze diff --git a/src/data/battle_moves.h b/src/data/battle_moves.h index 5ed98e5df..4911d7e68 100644 --- a/src/data/battle_moves.h +++ b/src/data/battle_moves.h @@ -1224,7 +1224,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_PSYCHIC] = { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, .power = 90, .type = TYPE_PSYCHIC, .accuracy = 100, @@ -1731,7 +1731,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_AMNESIA] = { - .effect = EFFECT_SPECIAL_DEFENSE_UP_2, + .effect = EFFECT_SPECIAL_ATTACK_UP_2, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 0, @@ -3213,7 +3213,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_SHADOW_BALL] = { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT, + .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT, .power = 80, .type = TYPE_GHOST, .accuracy = 100, @@ -4071,7 +4071,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_FAKE_TEARS] = { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2, + .effect = EFFECT_SPECIAL_ATTACK_DOWN_2, .power = 0, .type = TYPE_PSYCHIC, .accuracy = 100, @@ -4149,7 +4149,7 @@ const struct BattleMove gBattleMoves[MOVES_COUNT] = [MOVE_METAL_SOUND] = { - .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2, + .effect = EFFECT_SPECIAL_ATTACK_DOWN_2, .power = 0, .type = TYPE_ELECTRIC, .accuracy = 85, diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h index 6cc7107da..4797a4072 100644 --- a/src/data/pokemon/species_info.h +++ b/src/data/pokemon/species_info.h @@ -79,8 +79,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 1, - .evYield_SpDefense = 1, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), @@ -108,8 +108,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, + .evYield_SpAttack = 3, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), @@ -253,8 +253,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 1, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), @@ -280,10 +280,10 @@ const struct SpeciesInfo gSpeciesInfo[] = .expYield = 210, .evYield_HP = 0, .evYield_Attack = 0, - .evYield_Defense = 0, + .evYield_Defense = 1, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 3, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), @@ -369,8 +369,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 2, - .evYield_SpDefense = 1, + .evYield_SpAttack = 3, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_SILVER_POWDER, .genderRatio = PERCENT_FEMALE(50), @@ -456,8 +456,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 2, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_POISON_BARB, .genderRatio = PERCENT_FEMALE(50), @@ -1123,8 +1123,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 1, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_RAWST_BERRY, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(75), @@ -1413,8 +1413,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -2109,8 +2109,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -2138,8 +2138,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 2, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -2515,8 +2515,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_ASPEAR_BERRY, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -2544,8 +2544,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 2, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_ASPEAR_BERRY, .itemRare = ITEM_NEVER_MELT_ICE, .genderRatio = PERCENT_FEMALE(50), @@ -2805,8 +2805,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -2834,8 +2834,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 2, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(50), @@ -3878,8 +3878,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_NONE, .genderRatio = PERCENT_FEMALE(12.5), @@ -5038,8 +5038,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 0, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 0, - .evYield_SpDefense = 1, + .evYield_SpAttack = 1, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_MOON_STONE, .genderRatio = PERCENT_FEMALE(75), @@ -6691,8 +6691,8 @@ const struct SpeciesInfo gSpeciesInfo[] = .evYield_Attack = 1, .evYield_Defense = 0, .evYield_Speed = 0, - .evYield_SpAttack = 1, - .evYield_SpDefense = 1, + .evYield_SpAttack = 2, + .evYield_SpDefense = 0, .itemCommon = ITEM_NONE, .itemRare = ITEM_DRAGON_SCALE, .genderRatio = PERCENT_FEMALE(50),