[game-data-packager] 01/01: add genre: metadata as groundwork for GUI/TUI

Alexandre Detiste detiste-guest at moszumanska.debian.org
Mon Mar 9 20:53:27 UTC 2015


This is an automated email from the git hooks/post-receive script.

detiste-guest pushed a commit to branch master
in repository game-data-packager.

commit d9ed3a24b65ecf3f3bc97fd412171677ff3b9cdf
Author: Alexandre Detiste <alexandre.detiste at gmail.com>
Date:   Mon Mar 9 21:52:20 2015 +0100

    add genre: metadata as groundwork for GUI/TUI
    
    + stats.py non-documented tool
---
 data/descent1.yaml                            |  1 +
 data/descent2.yaml                            |  1 +
 data/doom3.yaml                               |  1 +
 data/hexen2.yaml                              |  1 +
 data/ja.yaml                                  |  1 +
 data/jk2.yaml                                 |  1 +
 data/lgeneral.yaml                            |  1 +
 data/quake.yaml                               |  1 +
 data/quake2.yaml                              |  1 +
 data/quake3.yaml                              |  2 ++
 data/rott.yaml                                |  1 +
 data/rtcw.yaml                                |  1 +
 data/spear-of-destiny.yaml                    |  1 +
 data/strife.yaml                              |  1 +
 data/syndicate.yaml                           |  1 +
 data/theme-hospital.yaml                      |  1 +
 data/tyrian.yaml                              |  1 +
 data/wolf3d.yaml                              |  1 +
 doc/adding_a_game.mdwn                        | 11 +++++---
 game_data_packager/__init__.py                |  9 ++++++-
 game_data_packager/games/doom_common.py       |  2 ++
 game_data_packager/games/residualvm_common.py |  2 ++
 game_data_packager/games/scummvm_common.py    |  2 ++
 game_data_packager/stats.py                   | 39 +++++++++++++++++++++++++++
 24 files changed, 79 insertions(+), 5 deletions(-)

diff --git a/data/descent1.yaml b/data/descent1.yaml
index 88873b8..8183bcd 100644
--- a/data/descent1.yaml
+++ b/data/descent1.yaml
@@ -3,6 +3,7 @@
 longname: "Descent: First Strike"
 copyright: © 1994 Parallax Software Corporation
 engine: d1x-rebirth
+genre: Flight simulator
 
 packages:
   descent1-demo-data:
diff --git a/data/descent2.yaml b/data/descent2.yaml
index 31c50c6..7c758e0 100644
--- a/data/descent2.yaml
+++ b/data/descent2.yaml
@@ -3,6 +3,7 @@
 longname: Descent II
 copyright: © 1995 Parallax Software Corporation
 engine: d2x-rebirth
+genre: Flight simulator
 
 packages:
   descent2-demo-data:
diff --git a/data/doom3.yaml b/data/doom3.yaml
index 8dc11a4..2b9054f 100644
--- a/data/doom3.yaml
+++ b/data/doom3.yaml
@@ -4,6 +4,7 @@ compress-deb: false
 longname: 'Doom 3 (original or BFG Edition)'
 try_repack_from: [/usr/local/share/dhewm3]
 engine: dhewm3-doom3
+genre: First-person shooter
 
 packages:
   doom3-data:
diff --git a/data/hexen2.yaml b/data/hexen2.yaml
index 8c5f971..f47d30c 100644
--- a/data/hexen2.yaml
+++ b/data/hexen2.yaml
@@ -4,6 +4,7 @@ shortname: hexen2
 longname: Hexen II
 copyright: © 1997 Raven Software
 engine: "uhexen2 | hexen2-engine"
+genre: First-person shooter
 
 help_text: |
   For hexen2-data, you must provide the version 1.11 patched versions
diff --git a/data/ja.yaml b/data/ja.yaml
index c4e6253..ce57707 100644
--- a/data/ja.yaml
+++ b/data/ja.yaml
@@ -9,6 +9,7 @@ copyright: © 2003 Activision, Inc. / LucasArts, a division of Lucasfilm Enterta
 # but that's less than 2% of the total size and takes 10 times as long.
 compress_deb: false
 engine: openjk-academy | openjk-academy-server
+genre: Action
 
 steam:
   id: 6020
diff --git a/data/jk2.yaml b/data/jk2.yaml
index 2193508..60c614c 100644
--- a/data/jk2.yaml
+++ b/data/jk2.yaml
@@ -4,6 +4,7 @@ shortname: jk2
 longname: "Star Wars Jedi Knight II: Jedi Outcast"
 copyright: © 2003 Activision, Inc. / LucasArts, a division of Lucasfilm Entertainment Company Ltd.
 engine: openjk-outcast
+genre: Action
 
 # Like Jedi Academy, there isn't much point in compressing this .deb.
 compress_deb: false
diff --git a/data/lgeneral.yaml b/data/lgeneral.yaml
index 9708c7d..cc615df 100644
--- a/data/lgeneral.yaml
+++ b/data/lgeneral.yaml
@@ -4,6 +4,7 @@ shortname: lgeneral
 longname: LGeneral
 copyright: © 1994 SSI Inc.
 engine: lgeneral
+genre: Strategy
 
 help_text: |
   Data from Panzer General can be downloaded automatically.
diff --git a/data/quake.yaml b/data/quake.yaml
index cc0646e..1c7da31 100644
--- a/data/quake.yaml
+++ b/data/quake.yaml
@@ -3,6 +3,7 @@
 longname: Quake
 copyright: © 1996 id Software
 engine: quake | quake-server
+genre: First-person shooter
 
 help_text: |
   For quake-registered, you must provide id1/pak1.pak or a directory
diff --git a/data/quake2.yaml b/data/quake2.yaml
index 5e534dc..0c7f0bc 100644
--- a/data/quake2.yaml
+++ b/data/quake2.yaml
@@ -4,6 +4,7 @@ longname: Quake II
 copyright: © 1997 id Software
 aliases: [q2rogue, q2xatrix]
 engine: quake2 | quake2-server
+genre: First-person shooter
 
 help_text: |
   For quake2-full-data, you must provide baseq2/pak0.pak and the baseq2/video
diff --git a/data/quake3.yaml b/data/quake3.yaml
index 10bdf7d..0080e09 100644
--- a/data/quake3.yaml
+++ b/data/quake3.yaml
@@ -4,6 +4,8 @@ shortname: quake3
 longname: Quake III Arena
 copyright: © 1999 id Software
 engine: quake3 | quake3-server
+genre: First-person shooter
+
 compress_deb: false
 try_repack_from:
 # Older versions of g-d-p used this directory
diff --git a/data/rott.yaml b/data/rott.yaml
index b2728db..ae5eb90 100644
--- a/data/rott.yaml
+++ b/data/rott.yaml
@@ -4,6 +4,7 @@ shortname: rott
 longname: Rise of the Triad
 copyright: © 1995 Apogee Software
 engine: rott
+genre: First-person shooter
 
 steam:
   id: 238050
diff --git a/data/rtcw.yaml b/data/rtcw.yaml
index a590ead..c333a67 100644
--- a/data/rtcw.yaml
+++ b/data/rtcw.yaml
@@ -4,6 +4,7 @@ shortname: rtcw
 longname: Return to Castle Wolfenstein
 copyright: © 2001 id Software, Inc. and Activision Publishing, Inc.
 engine: rtcw
+genre: First-person shooter
 
 # Like Jedi Academy, there isn't much point in compressing this .deb.
 compress_deb: false
diff --git a/data/spear-of-destiny.yaml b/data/spear-of-destiny.yaml
index aa4d382..e7c15e8 100644
--- a/data/spear-of-destiny.yaml
+++ b/data/spear-of-destiny.yaml
@@ -5,6 +5,7 @@ aliases: [spear]
 longname: "Spear of Destiny (Wolfenstein 3D prequel)"
 copyright: © 1992 id Software
 engine: wolf4sdl
+genre: First-person shooter
 
 steam:
   id: 9000
diff --git a/data/strife.yaml b/data/strife.yaml
index 948582b..a77dedf 100644
--- a/data/strife.yaml
+++ b/data/strife.yaml
@@ -8,6 +8,7 @@
 longname: Strife
 copyright: © 1996 Rogue Entertainment
 plugin: doom_common
+genre: Role-playing
 
 help_text: |
   Please provide the STRIFE1.WAD and VOICES.WAD from
diff --git a/data/syndicate.yaml b/data/syndicate.yaml
index 1f8cafd..2416101 100644
--- a/data/syndicate.yaml
+++ b/data/syndicate.yaml
@@ -5,6 +5,7 @@ try_repack_from: [/usr/share/games/freesynd/data]
 
 copyright: © 1993 Bullfrog Productions
 engine: freesynd
+genre: Tactical
 
 packages:
   syndicate-data:
diff --git a/data/theme-hospital.yaml b/data/theme-hospital.yaml
index 3dd8644..30808f1 100644
--- a/data/theme-hospital.yaml
+++ b/data/theme-hospital.yaml
@@ -3,6 +3,7 @@
 longname: Theme Hospital
 copyright: © 1997 Bullfrog Productions
 engine: corsix-th
+genre: Simulation
 
 help_text: |
   For the full version, provide a Theme Hospital installation,
diff --git a/data/tyrian.yaml b/data/tyrian.yaml
index 040bec0..82b10e7 100644
--- a/data/tyrian.yaml
+++ b/data/tyrian.yaml
@@ -3,6 +3,7 @@
 shortname: tyrian
 copyright: © 1995 Epic MegaGames
 engine: opentyrian
+genre: "Shoot 'em up"
 
 help_text: |
   The full version of Tyrian can be downloaded at no cost.
diff --git a/data/wolf3d.yaml b/data/wolf3d.yaml
index 8239dd1..292aeac 100644
--- a/data/wolf3d.yaml
+++ b/data/wolf3d.yaml
@@ -3,6 +3,7 @@
 longname: Wolfenstein 3D
 copyright: © 1992 Apogee
 engine: wolf4sdl
+genre: First-person shooter
 
 packages:
   wolf3d-demo-data:
diff --git a/doc/adding_a_game.mdwn b/doc/adding_a_game.mdwn
index 1faa714..3852c55 100644
--- a/doc/adding_a_game.mdwn
+++ b/doc/adding_a_game.mdwn
@@ -18,6 +18,7 @@ which should get you easily started.
 * `copyright`: string: © <year_of_first_release> <developper/publisher>
   This should match the title screen of the game, if any.
 * `engine`: string: package name that contain the program needed to run the game.
+* `genre`: the game genre
 * `compress_deb`: boolean, default true: If false, the `.deb` will never be
   compressed. Use this if it contains non-compressible files (e.g. `*.pk3`
   which are zip files) for which `xz` will waste a lot of time and
@@ -140,14 +141,16 @@ all the field required by policy are present:
  * Any required dependencies.  For game data packages, we use
    `Recommends` to recommend a corresponding engine package, where
    appropriate. To document an engine, you should add
-   a `debian: engine:` key in the YAML file; the other
-   depedencies `debian: depends:/recommends:/suggests:` are also
-   supported.  
+   a `engine:` key in the YAML file.
    If your game is split in several packages, the package with
    the full game should `Suggests` all the avaible expansions;
    to avoid that those are recognised as useless
    and then removed by aptitude or deborphan. This is done
-   automatically if you set the correct `expansion_for:`.
+   automatically if you set the correct `expansion_for:`.  
+   An expansion will also automatically `Depends` on
+   the matching full game.  
+   If ever needed; the standard Debian dependencies are also supported
+   using the `debian: depends:/recommends:/suggests:/replaces:/...` keys.
 
 `game-data-packager` also automatically adds:
 
diff --git a/game_data_packager/__init__.py b/game_data_packager/__init__.py
index 5044908..dcb3634 100644
--- a/game_data_packager/__init__.py
+++ b/game_data_packager/__init__.py
@@ -456,6 +456,10 @@ class GameData(object):
         # The game engine used to run the game (package name)
         self.engine = None
 
+        # The game genre
+        # http://en.wikipedia.org/wiki/List_of_video_game_genres
+        self.genre = None
+
         # A temporary directory.
         self.workdir = workdir
 
@@ -488,7 +492,7 @@ class GameData(object):
         self.argument_parser = None
 
         for k in ('longname', 'copyright', 'compress_deb', 'help_text',
-                 'steam','engine'):
+                 'steam','engine', 'genre'):
             if k in self.yaml:
                 setattr(self, k, self.yaml[k])
 
@@ -1860,6 +1864,9 @@ class GameData(object):
             long_desc += ' proprietary game data and must not be redistributed.\n'
             long_desc += ' .\n'
 
+            if self.genre:
+                long_desc += ' Genre: ' + self.genre + '\n'
+
             if package.expansion_for:
                 game_name = self.packages[package.expansion_for].longname or self.longname
                 long_desc += ' Game: ' + game_name + '\n'
diff --git a/game_data_packager/games/doom_common.py b/game_data_packager/games/doom_common.py
index 3d6b2e1..6a3cac8 100644
--- a/game_data_packager/games/doom_common.py
+++ b/game_data_packager/games/doom_common.py
@@ -76,6 +76,8 @@ class DoomGameData(GameData):
                 workdir=workdir)
         if self.engine is None:
             self.engine = "chocolate-doom | doom-engine"
+        if self.genre is None:
+            self.genre = 'First-person shooter'
 
         package_map = {
                 'doom-engine': 'doom',
diff --git a/game_data_packager/games/residualvm_common.py b/game_data_packager/games/residualvm_common.py
index 0aee4e3..cded213 100644
--- a/game_data_packager/games/residualvm_common.py
+++ b/game_data_packager/games/residualvm_common.py
@@ -34,6 +34,8 @@ class ResidualvmGameData(GameData):
 
         if self.engine is None:
             self.engine = 'residualvm'
+        if self.genre is None:
+            self.genre = 'Adventure'
 
     def fill_extra_files(self, package, destdir):
         super(ResidualvmGameData, self).fill_extra_files(package, destdir)
diff --git a/game_data_packager/games/scummvm_common.py b/game_data_packager/games/scummvm_common.py
index af59e5f..88282d5 100644
--- a/game_data_packager/games/scummvm_common.py
+++ b/game_data_packager/games/scummvm_common.py
@@ -34,6 +34,8 @@ class ScummvmGameData(GameData):
 
         if self.engine is None:
             self.engine = 'scummvm'
+        if self.genre is None:
+            self.genre = 'Adventure'
 
     def fill_extra_files(self, package, destdir):
         super(ScummvmGameData, self).fill_extra_files(package, destdir)
diff --git a/game_data_packager/stats.py b/game_data_packager/stats.py
new file mode 100644
index 0000000..aa5eab6
--- /dev/null
+++ b/game_data_packager/stats.py
@@ -0,0 +1,39 @@
+#!/usr/bin/python3
+# encoding=utf-8
+#
+# Copyright © 2015 Alexandre Detiste <alexandre at detiste.be>
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# You can find the GPL license text on a Debian system under
+# /usr/share/common-licenses/GPL-2.
+
+import os
+import yaml
+
+from . import load_yaml_games
+
+games = []
+for name, game in load_yaml_games().items():
+    game_struct = {
+             'genre': game.genre or 'Unknown',
+             'shortname': name,
+             'longname': game.longname,
+             }
+    games.append(game_struct)
+
+games = sorted(games, key=lambda k: (k['genre'], k['shortname'], k['longname']))
+
+last_genre = None
+for game in games:
+   if last_genre is None or game['genre'] != last_genre:
+       print('[%s]' % game['genre'])
+   print('%20s - %s' % (game['shortname'], game['longname']))
+   last_genre = game['genre']

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/game-data-packager.git



More information about the Pkg-games-commits mailing list