short_effect = Column(markdown.MarkdownColumn(255), nullable=False,
info=dict(description="Short summary of this ability's effect", format='markdown'))
+class AbilityChangelog(TableBase):
+ """History of changes to abilities across main game versions."""
+ __tablename__ = 'ability_changelog'
+ ability_id = Column(Integer, ForeignKey('abilities.id'), primary_key=True, nullable=False,
+ info=dict(description="The ID of the ability that changed"))
+ changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
+ info=dict(description="The ID of the version group in which the ability changed"))
+ effect = Column(markdown.MarkdownColumn(255), nullable=False,
+ info=dict(description="A description of the old behavior", format='markdown'))
+
class AbilityFlavorText(TableBase):
u"""In-game flavor text of an ability
"""
__tablename__ = 'move_damage_classes'
id = Column(Integer, primary_key=True, nullable=False,
info=dict(description="A numeric ID"))
- name = Column(Unicode(8), nullable=False,
+ name = Column(Unicode(16), nullable=False,
info=dict(description="An English name of the class", format='plaintext'))
description = Column(Unicode(64), nullable=False,
info=dict(description="An English description of the class", format='plaintext'))
effect = Column(Unicode(5120), nullable=False,
info=dict(description="A detailed description of the effect", format='plaintext'))
+class MoveEffectChangelog(TableBase):
+ """History of changes to move effects across main game versions."""
+ __tablename__ = 'move_effect_changelog'
+ effect_id = Column(Integer, ForeignKey('move_effects.id'), primary_key=True, nullable=False,
+ info=dict(description="The ID of the effect that changed"))
+ changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
+ info=dict(description="The ID of the version group in which the effect changed"))
+ effect = Column(markdown.MarkdownColumn(255), nullable=False,
+ info=dict(description="A description of the old behavior", format='markdown'))
+
class MoveFlag(TableBase):
u"""Maps a move flag to a move
"""
info=dict(description="ID of the damage class (physical/special) of the move"))
effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=False,
info=dict(description="ID of the move's effect"))
- effect_chance = Column(Integer,
+ effect_chance = Column(Integer, nullable=True,
info=dict(description="The chance for a secondary effect. What this is a chance of is specified by the move's effect."))
contest_type_id = Column(Integer, ForeignKey('contest_types.id'), nullable=True,
info=dict(description="ID of the move's Contest type (e.g. cool or smart)"))
info=dict(description="ID of the move that changed"))
changed_in_version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, nullable=False,
info=dict(description="ID of the version group in which the move changed"))
+ type_id = Column(Integer, ForeignKey('types.id'), nullable=True,
+ info=dict(description="Prior type of the move, or NULL if unchanged"))
power = Column(SmallInteger, nullable=True,
info=dict(description="Prior base power of the move, or NULL if unchanged"))
pp = Column(SmallInteger, nullable=True,
info=dict(description="Prior base PP of the move, or NULL if unchanged"))
accuracy = Column(SmallInteger, nullable=True,
info=dict(description="Prior accuracy of the move, or NULL if unchanged"))
+ effect_id = Column(Integer, ForeignKey('move_effects.id'), nullable=True,
+ info=dict(description="Prior ID of the effect, or NULL if unchanged"))
+ effect_chance = Column(Integer, nullable=True,
+ info=dict(description="Prior effect chance, or NULL if unchanged"))
class Nature(TableBase):
u"""A nature a pokémon can have, such as Calm or Brave
info=dict(description=u"ID of the region"))
class Version(TableBase):
- u"""A version of a mainline pokémon game
+ u"""An individual main-series Pokémon game
"""
__tablename__ = 'versions'
id = Column(Integer, primary_key=True, nullable=False,
- info=dict(description=u"A numeric ID"))
+ info=dict(description=u"A unique ID for this version"))
version_group_id = Column(Integer, ForeignKey('version_groups.id'), nullable=False,
- info=dict(description=u"ID of the version group this game belongs to"))
+ info=dict(description=u"The ID of the version group this game belongs to"))
name = Column(Unicode(32), nullable=False,
info=dict(description=u'The English name of the game, without the "Pokémon" prefix', official=True, format='plaintext'))
### Relations down here, to avoid ordering problems
+Ability.changelog = relation(AbilityChangelog,
+ order_by=AbilityChangelog.changed_in_version_group_id.desc(),
+ backref='ability',
+)
Ability.flavor_text = relation(AbilityFlavorText, order_by=AbilityFlavorText.version_group_id, backref='ability')
Ability.foreign_names = relation(AbilityName, backref='ability')
Ability.generation = relation(Generation, backref='abilities')
secondary=PokemonAbility.__table__,
)
+AbilityChangelog.changed_in = relation(VersionGroup, backref='ability_changelog')
+
AbilityFlavorText.version_group = relation(VersionGroup)
AbilityName.language = relation(Language)
Machine.version_group = relation(VersionGroup)
Move.changelog = relation(MoveChangelog,
- order_by=MoveChangelog.changed_in_version_group_id.asc(),
+ order_by=MoveChangelog.changed_in_version_group_id.desc(),
backref='move',
)
Move.contest_effect = relation(ContestEffect, backref='moves')
TypeName.language = relation(Language)
-Version.version_group = relation(VersionGroup, backref='versions')
+Version.version_group = relation(VersionGroup, back_populates='versions')
Version.generation = association_proxy('version_group', 'generation')
+VersionGroup.versions = relation(Version, order_by=Version.id, back_populates='version_group')
VersionGroup.generation = relation(Generation, backref='version_groups')
VersionGroup.version_group_regions = relation(VersionGroupRegion, backref='version_group')
VersionGroup.regions = association_proxy('version_group_regions', 'region')