Fixed the hell out of all remaining form problems.

Every flavor page should work with no missing sprites.  Save perhaps for
Unown, because I honestly don't have them.

Every sprite exists as ###-form.png.  There is also still a ###.png,
containing a reasonable default form, so people who don't give a crap
about this mess can just use the numbered sprites.  Beta forms should
now all be ###-beta.png.

Form groups now have a notion of "in-battle", which is used to hide
overworld sprites when appropriate.

Form sprites have a first-class sense of being a default or not, too.

Deoxys is...  well, let's not talk about Deoxys.  Deoxys is fixed.
This commit is contained in:
Eevee 2010-03-10 00:19:05 -08:00
parent 430fbd9c0f
commit 6e611d7a54
4 changed files with 104 additions and 96 deletions

View file

@ -384,7 +384,7 @@ id,name,forme_name,forme_base_pokemon_id,generation_id,evolution_chain_id,evolut
383,Groudon,,,3,199,,,,35,9500,Continent,8,6,6,-1,5,218,0,0,0,0 383,Groudon,,,3,199,,,,35,9500,Continent,8,6,6,-1,5,218,0,0,0,0
384,Rayquaza,,,3,200,,,,70,2065,Sky High,5,2,5,-1,3,220,0,0,0,0 384,Rayquaza,,,3,200,,,,70,2065,Sky High,5,2,5,-1,3,220,0,0,0,0
385,Jirachi,,,3,201,,,,3,11,Wish,10,12,4,-1,3,215,100,0,0,0 385,Jirachi,,,3,201,,,,3,11,Wish,10,12,4,-1,3,215,100,0,0,0
386,Deoxys,,,3,202,,,,17,608,DNA,8,12,5,-1,3,215,0,0,0,0 386,Deoxys,normal,,3,202,,,,17,608,DNA,8,12,5,-1,3,215,0,0,0,0
387,Turtwig,,,4,203,,,,4,102,Tiny Leaf,5,8,,1,45,64,70,0,0,0 387,Turtwig,,,4,203,,,,4,102,Tiny Leaf,5,8,,1,45,64,70,0,0,0
388,Grotle,,,4,203,387,1,18,11,970,Grove,5,8,,1,45,141,70,0,0,0 388,Grotle,,,4,203,387,1,18,11,970,Grove,5,8,,1,45,141,70,0,0,0
389,Torterra,,,4,203,388,1,32,22,3100,Continent,5,8,,1,45,208,70,0,0,0 389,Torterra,,,4,203,388,1,32,22,3100,Continent,5,8,,1,45,208,70,0,0,0
@ -477,7 +477,7 @@ id,name,forme_name,forme_base_pokemon_id,generation_id,evolution_chain_id,evolut
476,Probopass,,,4,147,299,4,Mt. Coronet,14,3400,Compass,4,11,,4,60,198,70,0,0,0 476,Probopass,,,4,147,299,4,Mt. Coronet,14,3400,Compass,4,11,,4,60,198,70,0,0,0
477,Dusknoir,,,4,182,356,5,Reaper Cloth,22,1066,Gripper,1,4,,4,45,210,35,0,0,0 477,Dusknoir,,,4,182,356,5,Reaper Cloth,22,1066,Gripper,1,4,,4,45,210,35,0,0,0
478,Froslass,,,4,186,361,8,Dawn Stone,13,266,Snow Land,9,4,,8,75,187,70,0,0,0 478,Froslass,,,4,186,361,8,Dawn Stone,13,266,Snow Land,9,4,,8,75,187,70,0,0,0
479,Rotom,,,4,240,,,,3,3,Plasma,8,1,,-1,45,132,70,0,0,0 479,Rotom,normal,,4,240,,,,3,3,Plasma,8,1,,-1,45,132,70,0,0,0
480,Uxie,,,4,241,,,,3,3,Knowledge,10,6,,-1,3,210,140,0,0,0 480,Uxie,,,4,241,,,,3,3,Knowledge,10,6,,-1,3,210,140,0,0,0
481,Mesprit,,,4,242,,,,3,3,Emotion,6,6,,-1,3,210,140,0,0,0 481,Mesprit,,,4,242,,,,3,3,Emotion,6,6,,-1,3,210,140,0,0,0
482,Azelf,,,4,243,,,,3,3,Willpower,2,6,,-1,3,210,140,0,0,0 482,Azelf,,,4,243,,,,3,3,Willpower,2,6,,-1,3,210,140,0,0,0

1 id name forme_name forme_base_pokemon_id generation_id evolution_chain_id evolution_parent_pokemon_id evolution_method_id evolution_parameter height weight species color_id pokemon_shape_id habitat_id gender_rate capture_rate base_experience base_happiness is_baby has_gen4_fem_sprite has_gen4_fem_back_sprite
384 383 Groudon 3 199 35 9500 Continent 8 6 6 -1 5 218 0 0 0 0
385 384 Rayquaza 3 200 70 2065 Sky High 5 2 5 -1 3 220 0 0 0 0
386 385 Jirachi 3 201 3 11 Wish 10 12 4 -1 3 215 100 0 0 0
387 386 Deoxys normal 3 202 17 608 DNA 8 12 5 -1 3 215 0 0 0 0
388 387 Turtwig 4 203 4 102 Tiny Leaf 5 8 1 45 64 70 0 0 0
389 388 Grotle 4 203 387 1 18 11 970 Grove 5 8 1 45 141 70 0 0 0
390 389 Torterra 4 203 388 1 32 22 3100 Continent 5 8 1 45 208 70 0 0 0
477 476 Probopass 4 147 299 4 Mt. Coronet 14 3400 Compass 4 11 4 60 198 70 0 0 0
478 477 Dusknoir 4 182 356 5 Reaper Cloth 22 1066 Gripper 1 4 4 45 210 35 0 0 0
479 478 Froslass 4 186 361 8 Dawn Stone 13 266 Snow Land 9 4 8 75 187 70 0 0 0
480 479 Rotom normal 4 240 3 3 Plasma 8 1 -1 45 132 70 0 0 0
481 480 Uxie 4 241 3 3 Knowledge 10 6 -1 3 210 140 0 0 0
482 481 Mesprit 4 242 3 3 Emotion 6 6 -1 3 210 140 0 0 0
483 482 Azelf 4 243 3 3 Willpower 2 6 -1 3 210 140 0 0 0

View file

@ -1,14 +1,14 @@
pokemon_id,description pokemon_id,is_battle_only,description
172,Forms only affect appearance. All wild Pichu are normal Pichu and cannot be converted into spiky-eared Pichu. Spiky-eared Pichu can only be encountered by taking the shiny Pichu from an official promotion to Celebi's shrine in Ilex Forest. Spiky-eared Pichu cannot evolve or be taken into Pokémon Center trade area. 172,0,Forms only affect appearance. All wild Pichu are normal Pichu and cannot be converted into spiky-eared Pichu. Spiky-eared Pichu can only be encountered by taking the shiny Pichu from an official promotion to Celebi's shrine in Ilex Forest. Spiky-eared Pichu cannot evolve or be taken into Pokémon Center trade area.
201,Forms only affect appearance. A form is selected at random before a wild encounter and cannot be changed. 201,0,Forms only affect appearance. A form is selected at random before a wild encounter and cannot be changed.
351,Form changes to match the current weather. 351,1,Form changes to match the current weather.
386,"Forms have different stats and movepools. Form changes depending on the game: normal form in Ruby/Sapphire, Attack form in Fire Red, Defense form in Leaf Green, and Speed form in Emerald. Every form exists in Diamond/Pearl/Platinum, and form is preserved when transferring from an older game. Meteorites in the south end of Veilstone City can be used to switch between forms." 386,0,"Forms have different stats and movepools. Form changes depending on the game: normal form in Ruby/Sapphire, Attack form in Fire Red, Defense form in Leaf Green, and Speed form in Emerald. Every form exists in Diamond/Pearl/Platinum, and form is preserved when transferring from an older game. Meteorites in the south end of Veilstone City can be used to switch between forms."
412,"Cloaks only affect appearance, although they become permanent upon evolution. Cloak changes to match the current terrain after a battle (or when an egg hatches), if possible: Plant Cloak for grassy areas, Sandy Cloak for beaches and caves, or Trash Cloak for buildings." 412,0,"Cloaks only affect appearance, although they become permanent upon evolution. Cloak changes to match the current terrain after a battle (or when an egg hatches), if possible: Plant Cloak for grassy areas, Sandy Cloak for beaches and caves, or Trash Cloak for buildings."
413,"Forms have different stats and movepools. During evolution, the current cloak becomes the new form, and can no longer be changed." 413,0,"Forms have different stats and movepools. During evolution, the current cloak becomes the new form, and can no longer be changed."
421,"Sunshine form is active only during Sunny Day, due to Flower Gift." 421,1,"Sunshine form is active only during Sunny Day, due to Flower Gift."
422,Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed. 422,0,Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed.
423,Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed. 423,0,Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed.
479,"Forms have different signature moves. When switching forms, the old signature move is removed and the new one, if any, is learned immediately. In a secret room in the Galactic Eterna Building, accessible only with a Secret Key, there are appliances that can be used to switch between forms." 479,0,"Forms have different signature moves. When switching forms, the old signature move is removed and the new one, if any, is learned immediately. In a secret room in the Galactic Eterna Building, accessible only with a Secret Key, there are appliances that can be used to switch between forms."
487,"Forms have different stats. Giratina becomes Origin form in Distortion World or while holding a Griseous Orb. Otherwise, or during a link battle, Giratina will be in Altered form." 487,0,"Forms have different stats. Giratina becomes Origin form in Distortion World or while holding a Griseous Orb. Otherwise, or during a link battle, Giratina will be in Altered form."
492,"Forms have different stats and movepools. After using a Gracidea, Shaymin will transform into Sky form during the daytime. If a Gracidea is not used, it is currently nighttime, during a link battle, or Sky form is Frozen, Shaymin will be in Land form. Gracidea only works on an official event Shaymin." 492,0,"Forms have different stats and movepools. After using a Gracidea, Shaymin will transform into Sky form during the daytime. If a Gracidea is not used, it is currently nighttime, during a link battle, or Sky form is Frozen, Shaymin will be in Land form. Gracidea only works on an official event Shaymin."
493,"Form always reflects type, which may be changed by attaching a Plate and activating Multitype." 493,0,"Form always reflects type, which may be changed by attaching a Plate and activating Multitype."

1 pokemon_id is_battle_only description
2 172 0 Forms only affect appearance. All wild Pichu are normal Pichu and cannot be converted into spiky-eared Pichu. Spiky-eared Pichu can only be encountered by taking the shiny Pichu from an official promotion to Celebi's shrine in Ilex Forest. Spiky-eared Pichu cannot evolve or be taken into Pokémon Center trade area.
3 201 0 Forms only affect appearance. A form is selected at random before a wild encounter and cannot be changed.
4 351 1 Form changes to match the current weather.
5 386 0 Forms have different stats and movepools. Form changes depending on the game: normal form in Ruby/Sapphire, Attack form in Fire Red, Defense form in Leaf Green, and Speed form in Emerald. Every form exists in Diamond/Pearl/Platinum, and form is preserved when transferring from an older game. Meteorites in the south end of Veilstone City can be used to switch between forms.
6 412 0 Cloaks only affect appearance, although they become permanent upon evolution. Cloak changes to match the current terrain after a battle (or when an egg hatches), if possible: Plant Cloak for grassy areas, Sandy Cloak for beaches and caves, or Trash Cloak for buildings.
7 413 0 Forms have different stats and movepools. During evolution, the current cloak becomes the new form, and can no longer be changed.
8 421 1 Sunshine form is active only during Sunny Day, due to Flower Gift.
9 422 0 Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed.
10 423 0 Forms only affect appearance. A form is selected before a wild encounter based on whether the battle is in Western or Eastern Sinnoh and cannot be changed.
11 479 0 Forms have different signature moves. When switching forms, the old signature move is removed and the new one, if any, is learned immediately. In a secret room in the Galactic Eterna Building, accessible only with a Secret Key, there are appliances that can be used to switch between forms.
12 487 0 Forms have different stats. Giratina becomes Origin form in Distortion World or while holding a Griseous Orb. Otherwise, or during a link battle, Giratina will be in Altered form.
13 492 0 Forms have different stats and movepools. After using a Gracidea, Shaymin will transform into Sky form during the daytime. If a Gracidea is not used, it is currently nighttime, during a link battle, or Sky form is Frozen, Shaymin will be in Land form. Gracidea only works on an official event Shaymin.
14 493 0 Form always reflects type, which may be changed by attaching a Plate and activating Multitype.

View file

@ -1,79 +1,79 @@
id,pokemon_id,introduced_in_version_group_id,name id,pokemon_id,introduced_in_version_group_id,name,is_default
1,201,3,a 1,201,3,a,0
2,201,3,b 2,201,3,b,0
3,201,3,c 3,201,3,c,0
4,201,3,d 4,201,3,d,0
5,201,3,e 5,201,3,e,0
6,201,3,f 6,201,3,f,0
7,201,3,g 7,201,3,g,0
8,201,3,h 8,201,3,h,0
9,201,3,i 9,201,3,i,0
10,201,3,j 10,201,3,j,1
11,201,3,k 11,201,3,k,0
12,201,3,l 12,201,3,l,0
13,201,3,m 13,201,3,m,0
14,201,3,n 14,201,3,n,0
15,201,3,o 15,201,3,o,0
16,201,3,p 16,201,3,p,0
17,201,3,q 17,201,3,q,0
18,201,3,r 18,201,3,r,0
19,201,3,s 19,201,3,s,0
20,201,3,t 20,201,3,t,0
21,201,3,u 21,201,3,u,0
22,201,3,v 22,201,3,v,0
23,201,3,w 23,201,3,w,0
24,201,3,x 24,201,3,x,0
25,201,3,y 25,201,3,y,0
26,201,3,z 26,201,3,z,0
27,201,5,? 27,201,5,?,0
28,201,5,! 28,201,5,!,0
29,351,5, 29,351,5,,1
30,351,5,sunny 30,351,5,sunny,0
31,351,5,rain 31,351,5,rain,0
32,351,5,snow-cloud 32,351,5,snow-cloud,0
33,386,5, 33,386,5,normal,1
34,386,7,attack 34,386,7,attack,0
35,386,7,defense 35,386,7,defense,0
36,386,6,speed 36,386,6,speed,0
37,412,8,plant 37,412,8,plant,1
38,412,8,sandy 38,412,8,sandy,0
39,412,8,trash 39,412,8,trash,0
40,413,8,plant 40,413,8,plant,1
41,413,8,sandy 41,413,8,sandy,0
42,413,8,trash 42,413,8,trash,0
43,421,8,overcast 43,421,8,overcast,1
44,421,8,sunshine 44,421,8,sunshine,0
45,422,8,east 45,422,8,east,0
46,422,8,west 46,422,8,west,1
47,423,8,east 47,423,8,east,0
48,423,8,west 48,423,8,west,1
49,479,8, 49,479,8,normal,1
50,479,9,fan 50,479,9,fan,0
51,479,9,frost 51,479,9,frost,0
52,479,9,heat 52,479,9,heat,0
53,479,9,mow 53,479,9,mow,0
54,479,9,wash 54,479,9,wash,0
55,487,8, 55,487,8,another,1
56,487,9,origin 56,487,9,origin,0
57,492,8, 57,492,8,land,1
58,492,9,sky 58,492,9,sky,0
59,493,8,bug 59,493,8,bug,0
60,493,8,dark 60,493,8,dark,0
61,493,8,dragon 61,493,8,dragon,0
62,493,8,electric 62,493,8,electric,0
63,493,8,fighting 63,493,8,fighting,0
64,493,8,fire 64,493,8,fire,0
65,493,8,flying 65,493,8,flying,0
66,493,8,ghost 66,493,8,ghost,0
67,493,8,grass 67,493,8,grass,0
68,493,8,ground 68,493,8,ground,0
69,493,8,ice 69,493,8,ice,0
70,493,8,normal 70,493,8,normal,1
71,493,8,??? 71,493,8,???,0
72,493,8,poison 72,493,8,poison,0
73,493,8,psychic 73,493,8,psychic,0
74,493,8,rock 74,493,8,rock,0
75,493,8,steel 75,493,8,steel,0
76,493,8,water 76,493,8,water,0
77,172,3, 77,172,3,,1
78,172,10,spiky-eared 78,172,10,spiky-eared,0

1 id pokemon_id introduced_in_version_group_id name is_default
2 1 201 3 a 0
3 2 201 3 b 0
4 3 201 3 c 0
5 4 201 3 d 0
6 5 201 3 e 0
7 6 201 3 f 0
8 7 201 3 g 0
9 8 201 3 h 0
10 9 201 3 i 0
11 10 201 3 j 1
12 11 201 3 k 0
13 12 201 3 l 0
14 13 201 3 m 0
15 14 201 3 n 0
16 15 201 3 o 0
17 16 201 3 p 0
18 17 201 3 q 0
19 18 201 3 r 0
20 19 201 3 s 0
21 20 201 3 t 0
22 21 201 3 u 0
23 22 201 3 v 0
24 23 201 3 w 0
25 24 201 3 x 0
26 25 201 3 y 0
27 26 201 3 z 0
28 27 201 5 ? 0
29 28 201 5 ! 0
30 29 351 5 1
31 30 351 5 sunny 0
32 31 351 5 rain 0
33 32 351 5 snow-cloud 0
34 33 386 5 normal 1
35 34 386 7 attack 0
36 35 386 7 defense 0
37 36 386 6 speed 0
38 37 412 8 plant 1
39 38 412 8 sandy 0
40 39 412 8 trash 0
41 40 413 8 plant 1
42 41 413 8 sandy 0
43 42 413 8 trash 0
44 43 421 8 overcast 1
45 44 421 8 sunshine 0
46 45 422 8 east 0
47 46 422 8 west 1
48 47 423 8 east 0
49 48 423 8 west 1
50 49 479 8 normal 1
51 50 479 9 fan 0
52 51 479 9 frost 0
53 52 479 9 heat 0
54 53 479 9 mow 0
55 54 479 9 wash 0
56 55 487 8 another 1
57 56 487 9 origin 0
58 57 492 8 land 1
59 58 492 9 sky 0
60 59 493 8 bug 0
61 60 493 8 dark 0
62 61 493 8 dragon 0
63 62 493 8 electric 0
64 63 493 8 fighting 0
65 64 493 8 fire 0
66 65 493 8 flying 0
67 66 493 8 ghost 0
68 67 493 8 grass 0
69 68 493 8 ground 0
70 69 493 8 ice 0
71 70 493 8 normal 1
72 71 493 8 ??? 0
73 72 493 8 poison 0
74 73 493 8 psychic 0
75 74 493 8 rock 0
76 75 493 8 steel 0
77 76 493 8 water 0
78 77 172 3 1
79 78 172 10 spiky-eared 0

View file

@ -326,7 +326,7 @@ class Pokemon(TableBase):
"""Returns the name of this Pokémon, including its Forme, if any.""" """Returns the name of this Pokémon, including its Forme, if any."""
if self.forme_name: if self.forme_name:
return "%s %s" % (self.forme_name.capitalize(), self.name) return "%s %s" % (self.forme_name.title(), self.name)
return self.name return self.name
@property @property
@ -371,6 +371,7 @@ class PokemonFlavorText(TableBase):
class PokemonFormGroup(TableBase): class PokemonFormGroup(TableBase):
__tablename__ = 'pokemon_form_groups' __tablename__ = 'pokemon_form_groups'
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
is_battle_only = Column(Boolean, nullable=False)
description = Column(Unicode(512), nullable=False) description = Column(Unicode(512), nullable=False)
class PokemonFormSprite(TableBase): class PokemonFormSprite(TableBase):
@ -379,6 +380,7 @@ class PokemonFormSprite(TableBase):
pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False) pokemon_id = Column(Integer, ForeignKey('pokemon.id'), primary_key=True, nullable=False, autoincrement=False)
introduced_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False) introduced_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False, autoincrement=False)
name = Column(Unicode(16), nullable=True) name = Column(Unicode(16), nullable=True)
is_default = Column(Boolean, nullable=True)
class PokemonHabitat(TableBase): class PokemonHabitat(TableBase):
__tablename__ = 'pokemon_habitats' __tablename__ = 'pokemon_habitats'
@ -564,6 +566,12 @@ Pokemon.formes = relation(Pokemon, primaryjoin=Pokemon.id==Pokemon.forme_base_po
Pokemon.pokemon_color = relation(PokemonColor, backref='pokemon') Pokemon.pokemon_color = relation(PokemonColor, backref='pokemon')
Pokemon.color = association_proxy('pokemon_color', 'name') Pokemon.color = association_proxy('pokemon_color', 'name')
Pokemon.dex_numbers = relation(PokemonDexNumber, backref='pokemon') Pokemon.dex_numbers = relation(PokemonDexNumber, backref='pokemon')
Pokemon.default_form_sprite = relation(PokemonFormSprite,
primaryjoin=and_(
Pokemon.id==PokemonFormSprite.pokemon_id,
PokemonFormSprite.is_default==True,
),
uselist=False)
Pokemon.egg_groups = relation(EggGroup, secondary=PokemonEggGroup.__table__, Pokemon.egg_groups = relation(EggGroup, secondary=PokemonEggGroup.__table__,
order_by=PokemonEggGroup.egg_group_id, order_by=PokemonEggGroup.egg_group_id,
backref='pokemon') backref='pokemon')