+ @property
+ def appears_underground(self):
+ u"""True if the item appears underground, as specified by the appropriate flag
+ """
+ return any(flag.identifier == u'underground' for flag in self.flags)
+
+create_translation_table('item_names', Item, 'names',
+ relation_lazy='joined',
+ name = Column(Unicode(20), nullable=False, index=True,
+ info=dict(description="The name", format='plaintext', official=True, ripped=True)),
+)
+create_translation_table('item_prose', Item, 'prose',
+ short_effect = Column(markdown.MarkdownColumn(256), nullable=True,
+ info=dict(description="A short summary of the effect", format='markdown')),
+ effect = Column(markdown.MarkdownColumn(5120), nullable=True,
+ info=dict(description=u"Detailed description of the item's effect.", format='markdown')),
+)
+create_translation_table('item_flavor_summaries', Item, 'flavor_summaries',
+ flavor_summary = Column(Unicode(512), nullable=True,
+ info=dict(description=u"Text containing facts from all flavor texts, for languages without official game translations", official=False, format='plaintext', ripped=True)),
+)
+
+class ItemCategory(TableBase):
+ u"""An item category
+ """
+ # XXX: This is fanon, right?
+ __tablename__ = 'item_categories'
+ __singlename__ = 'item_category'
+ id = Column(Integer, primary_key=True, nullable=False,
+ info=dict(description="A numeric ID"))
+ pocket_id = Column(Integer, ForeignKey('item_pockets.id'), nullable=False,
+ info=dict(description="ID of the pocket these items go to"))
+ identifier = Column(Unicode(16), nullable=False,
+ info=dict(description="An identifier", format='identifier'))
+
+create_translation_table('item_category_prose', ItemCategory, 'prose',
+ relation_lazy='joined',
+ name = Column(Unicode(16), nullable=False, index=True,
+ info=dict(description="The name", format='plaintext', official=False)),
+)
+
+class ItemFlag(TableBase):
+ u"""An item attribute such as "consumable" or "holdable".
+ """
+ __tablename__ = 'item_flags'
+ __singlename__ = 'item_flag'
+ id = Column(Integer, primary_key=True, nullable=False,
+ info=dict(description="A numeric ID"))
+ identifier = Column(Unicode(24), nullable=False,
+ info=dict(description="Identifier of the flag", format='identifier'))
+
+create_translation_table('item_flag_prose', ItemFlag, 'prose',
+ name = Column(Unicode(24), nullable=True, index=True,
+ info=dict(description="The name", format='plaintext', official=False)),
+ description = Column(Unicode(64), nullable=True,
+ info=dict(description="Short description of the flag", format='plaintext')),
+)
+
+class ItemFlagMap(TableBase):
+ u"""Maps an item flag to its item.
+ """
+ __tablename__ = 'item_flag_map'
+ item_id = Column(Integer, ForeignKey('items.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="The ID of the item"))
+ item_flag_id = Column(Integer, ForeignKey('item_flags.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="The ID of the item flag"))
+
+class ItemFlavorText(TableBase):
+ u"""An in-game description of an item
+ """
+ __tablename__ = 'item_flavor_text'
+ __singlename__ = 'item_flavor_text'
+ summary_column = Item.flavor_summaries_table, 'flavor_summary'
+ item_id = Column(Integer, ForeignKey('items.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="The ID of the item"))
+ version_group_id = Column(Integer, ForeignKey('version_groups.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="ID of the version group that sports this text"))
+ language_id = Column(Integer, ForeignKey('languages.id'), primary_key=True, nullable=False,
+ info=dict(description="The language"))
+ flavor_text = Column(Unicode(255), nullable=False,
+ info=dict(description="The flavor text itself", official=True, format='gametext'))
+
+class ItemFlingEffect(TableBase):
+ u"""An effect of the move Fling when used with a specific item
+ """
+ __tablename__ = 'item_fling_effects'
+ __singlename__ = 'item_fling_effect'
+ id = Column(Integer, primary_key=True, nullable=False,
+ info=dict(description="A numeric ID"))
+
+create_translation_table('item_fling_effect_prose', ItemFlingEffect, 'prose',
+ effect = Column(Unicode(255), nullable=False,
+ info=dict(description="Description of the effect", format='plaintext')),
+)
+
+class ItemGameIndex(TableBase):
+ u"""The internal ID number a game uses for an item
+ """
+ __tablename__ = 'item_game_indices'
+ item_id = Column(Integer, ForeignKey('items.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="The database ID of the item"))
+ generation_id = Column(Integer, ForeignKey('generations.id'), primary_key=True, autoincrement=False, nullable=False,
+ info=dict(description="ID of the generation of games"))
+ game_index = Column(Integer, nullable=False,
+ info=dict(description="Internal ID of the item in the generation"))
+
+class ItemPocket(TableBase):
+ u"""A pocket that categorizes items
+ """
+ __tablename__ = 'item_pockets'
+ __singlename__ = 'item_pocket'
+ id = Column(Integer, primary_key=True, nullable=False,
+ info=dict(description="A numeric ID"))
+ identifier = Column(Unicode(16), nullable=False,
+ info=dict(description="An identifier of this pocket", format='identifier'))
+
+create_translation_table('item_pocket_names', ItemPocket, 'names',
+ relation_lazy='joined',
+ name = Column(Unicode(16), nullable=False, index=True,
+ info=dict(description="The name", format='plaintext', official=True)),
+)