Proceduralism: Part Three (What is Procedural?)

Source: Ascii Dreams

[You'll probably want to read the original article series that inspired this follow up, then start with parts one and two of this series.]

Alongside the attempt to define a taxonomy of procedural content, my other main goal for the PCG wiki was to list what games featured procedural content - expanding on the inadequate wikipedia entry to create a definitive go to guide if you were looking for a procedural fix. But this building this list has stumbled for two main reasons: a lack of time and contributors - which results in the majority of articles being stubs, with more polished entries where someone else has taken an interest, and a more fundamental problem with deciding whether a game is procedural or not.

But surely it should be clear whether a game is procedural? Take Elite - the canonical example of a procedural game, with an infinitely explorable universe generated from a starting seed. Elite is clearly procedural because of this infinite sandbox. Or is it?

It turns out the universe of Elite is in fact finite enough that it was possible for the founders to check the name of every planet to ensure that there were no curse words included in the final release. And if you are willing to accept a seeded universe but constant content as a starting definition for procedural, then is Eve Online procedural? What about Star Wars: Galaxies? Darwinia? Far Cry 2? Far Cry?

Well if Elite is not a good model to follow, then how about Rogue? Infinite, accessible dungeons - which implies accessibility to newly content is a prime requisite for procedurally generated games. But strategy games like Civilisation have had random maps almost as long as the strategy genre has been played on a computer, and listing every strategy game with a random map generator as a procedural game will be an enormous and potentially futile project.

So it's not simply a matter of random map generation, then how about other content like randomly varying the loot that you find. But that makes World of Warcraft as procedural as Borderlands and Left4Dead procedural because it dynamically mixes and matches zombie bodies to ensure variety in the horde.

But Left4Dead is procedural: because of the AI director, in the same way that Far Cry 2, but not the original Far Cry, is procedural because it has dynamic fire propagation. It's the emergence of interesting properties that makes a game procedural.

But this makes any game with a half-way adequate AI procedural, which is again not a useful definition from the point of view of building a wiki listing procedural games. And does a game like Deus Ex qualify as procedural because of the emergent property of using limpet mines to climb buildings? Maybe it is but Warren Spector didn't intend it that way.

We are left with two possible definitions which seem more robust but neither of which are ultimately satisfying: did the developer intend the game to be procedural, which leads to the problems of divining authorial intent, or is it procedural because I know procedural when I see it?

(I'll return to the matter of perspective later in this article series, but it is worthwhile noting that Minecraft feels more procedural than Populous because of the perspective the player sees the game from, in the same way that a first person shooter or platformer with random maps and AI feels more procedural than a top down strategy game with the same features. It is for this reason I've added a perspective category to games on the PCG wiki).

I want to avoid an argument about definitions for the moment, and try to look at some minimal examples of what we can mean by procedural. Take the following BASIC code:

10 PRINT HELLO WORLD
20 GOTO 10

Which if you run it, results as follows:

HELLO WORLD
HELLO WORLD
HELLO WORLD
...

The output of this code results in infinite content, and the code itself clearly defines a procedure for generating this content. But you and I both would have extreme difficulty in describing this as procedural content, because it is not very interesting.

What do I mean by interesting? That is the heart of whether a piece of content can be adequately described as procedural or not. If we just consider the output of an infinite number of HELLO WORLDS, we can see the content is not very interesting, because the underlying code required to generate this content is not particularly complex, and the result completely predictable.

But at the other extreme, apparently complete randomness isn't terribly complicated an algorithm either, such as this Python implementation of a multiple with carry random number generator shows. The output of this algorithm is too random for any human to detect the underlying pattern, while the pattern itself is compressible in a sense that true random numbers, such as thermal noise, are not.

The fact that a less than one page long algorithm can generate 'random' output as far as a person is concerned implies there is a not terribly complicated threshold past which someone is incapable of distinguishing an algorithm from random noise.

What fascinates me about procedural content is my belief that there another useful boundary between trivially predictable output and effectively random output - what I've called elsewhere biased randomness - that is randomness produced by an underlying discoverable rule set. That is not to say that randomness is uninteresting - given sufficient incentives, we can become horribly addicted to random output - but I think there is more value in exploring biased randomness than coming up with better ways to package completely random content in a compelling format.

You may be thinking here of the mathematical concept of 'chaos' - but while this may be a useful analogy, don't confuse the two. There are plenty of chaotic systems which can be easily comprehended by a person (the outcome just can't be predicted), and just as there are plenty of ordered systems which are similarly incomprehensible. Even the predictable behaviour of two body planetary motion was unknown until the recent past in terms of the overall human evolution of thought.

It is also likely the case that compelling biased randomness is even more complex than the algorithm required to implement effective randomly content - just in the same way that the real world is more complex a place than an aggregation of random elements. This will also be a challenge for biased randomness: justifying the additional time and expense above strictly random content.

So my answer to the question 'what is a procedural game?' is that the game presents a biased randomness where discovering the underlying rules is a necessary part of play. That doesn't help much when it comes to deciding what games should be in the wiki, but at least I have a set of criteria which feels more objective than those I outlined at the start of this article.

Whether the biased randomness in a game is interesting is a subjective exercise: one person's discoverable rule set is another person's fiat from the gods. But I don't believe this is an unsolvable problem: there are definite strategies to discovering whether something is interesting, and ways of dealing with the most common criticisms of procedural content generation. And the question of what people find interesting isn't just an issue for game design; with procedural content, it allows us to build a more precise model of the mind.

And I'll be talking about that in part four.


Players Wiki & 4.1

Source: Rogue Survivor

PLAYERS WIKI
A group of Rogue Survivors has started a Wiki.
http://roguesurvivor.wikia.com/wiki/Main_Page
I'll add a link on the blog for great justice!

4.1
Reduced save and load time by 20-30% by:
- changing all byte and short types to int (!).
- changing some of Session class fields to Arrays instead of Dictionaries where appropriate (so it doesn't waste memory).
- customizing Map class serialization to save only primary fields and reconstruct auxiliary fields at deserialization.
Fixing bugs and glitches.
Started the Hospital.

End of post.

Mines of Elderlore source files

Here are the latest Mines of Elderlore source files, that should allow the game to be launched under Windows and GNU/Linux. You need Python 2.x and Numpy to be installed.

Have fun! The files are released under a GNU/GPL v2 licence.

Mines of Elderlore source files (160)

Mines of Elderlore, work in progress

I am still working on Mines of Elderlore, here are the new features:

  • there are achievements that the player can accomplish, like his best hit, his best weapon combo, or the least rounds before winning
  • a menu system has been added,to change player name, dungeon name, view your scores and achievements, and replay past games

Anyone wanting to beta test it is welcome!

Mines of Elderlore libtcod 1.1.20100228 (297)

Mines of Elderlore: welcome Libtcod!

I have been following Libtcod for a long time, since it is probably the most promising project related to roguelikes published on the past years. What I was missing was a good reason – and some motivation! – to dive in it and code my own Libtcod roguelike.

On the other hand, the next 7DRL is arriving; Mines of Elderlore, my 7DRL attempt some years ago, made me realize that coding under time pressure, with a common goal with some other folks, can be a really stimulating experiment and good way to produce something that simply works.

So I would really like to try to create a 7DRL roguelike under Libtcod this year. But what I need first is to improve my knowledge in this library, and, well yes, practice a little my oldy pythonic skills. And what better subject for this than my old 7DRL Mines of Elderlore?

Adding Libtcod was easier than I would have expected. The python files were already set to handle different displaying libraries (Curses and Pygame), and Libtcod is very well documented and supported by its author Jice, so only a few hours were necessary to provide this first version.

You can download the game there:

The state of the game is far from completed: it is just a work in progress, still playable from the beginning to the end (I hope…), but some features and details are lacking.

You can tweak the moe.ini file to change the screen size, set it to fullscreen, and some other more-or-less explicit parameters. F1 to F4 keys provide in-game help.

Armes de guerre offensives et défensives

Un trésor de guerre

Viollet-le-Duc a publié deux dictionnaires, un d’architecture en 10 tomes, et un sur le mobilier, en 6 tomes, dont les deux derniers traitent plus particulièrment des armes de guerre offensives et défensives.

Ces ouvrages sont depuis longtemps dans le domaine public, et leurs illustrations également, et sont disponibles en téléchargement sur archive.org. Elles constituent un véritable trésor culturel que tout le monde peut utiliser, pour peu qu’elles soient mises en ligne. Le seul droit qu’on peut leur associer est le droit moral, qui impose notamment de respecter la paternité de l’auteur sur sa création par une citation de son nom et de sa qualité.

Copier ce n’est pas voler

J’ai donc entrepris de mettre en ligne ces illustrations, en reprenant chaque page scannée des tomes 5 et 6 du dictionnaire du mobilier de Viollet-le-Duc, en extrayant chacune des illustrations et en les publiant ensuite sur Wikimedia (grâce notamment à l’outil Commonist sous licence libre qui permet de mettre en ligne plusieurs ressources en une seule passe).

Chaque fichier est au format png, en noir et blanc, sous le nom 05-xxx pour le tome 5 et 06-xxx pour le tome 6, avec xxx faisant référence au numéro de la page scannée sur archive.org.

Comment participer

Il reste encore pas mal de choses à faire sur les illustrations de Viollet-le-Duc; en vrac:

  • ajouter une description à chaque illustration que j’ai publié (j’ai seulement mis le nom du livre et le tome dont elle est issue)
  • publier les illustrations des 4 autres tomes du dictionnaire du mobilier sur Wikimedia
  • publier le texte et les illustrations du dictionnaire du mobilier sur Wikisource (le dictionnaire de l’architecture y est déjà)

Toutes les bonnes volontés sont les bienvenues!

Illustrer Elderlore

Je pense utiliser ces illustrations dans le guide du jeu, que j’ai commencé à rédiger, et aussi en illustration de certaines armes et armures d’Elderlore.

En attendant, je vous souhaite à tous un Joyeux Noël!

Les peintures d’Albert Bierstadt

Among_the_Sierra_Nevada_Mountains

A. Bierstadt

Albert Bierstadt est un peintre du 19ème siècle, dont les paysages peints, étonnament modernes, ont un je ne sais quoi qui colle assez bien avec un univers de fantasy.

Étant mort depuis plus de 70 ans, ses peintures sont tombées dans le domaine public et librement réutilisables. C’est celle représentée ici en vignette, que j’ai travaillée pour illustrer l’entête du site.

Pour être tout à fait honnête, il reste une polémique, ou au moins un sujet de débat, entre la licence de l’œuvre elle-même, le domaine public, et le droit sur la reproduction de ces images. Je vous renvoie vers l’excellent article du Framablog pour plus d’explications.

Changement du moteur de blog: bienvenue sous Wordpress!

logo wordpress

Pour blogger sur les développements à venir, il me faut une infrastructure web facile à utiliser, simple à maintenir, et quand même suffisemment puissante et modulaire pour répondre à tous mes besoins. Aujourd’hui, j’ai un wiki sous Dokuwiki, un planetlike sous MoonMoon, des blogs sous Dotclear, Drupal et Joomla, et un outil de debugging sous Flyspray. C’est le bordel!

Il faut que je regroupe tout ça sous un unique outil de communication. J’ai commencé à tester Wordpress. Les fonctionnalités qu’il doit offrir sont nombreuses:

  1. pouvoir migrer mes anciens messages dessus:
    • Les messages du Dotclear blog.elderlore.com sont migrés grâce à l’outil de migration natif de Wordpress;
    • Les messages et les commentaires du Drupal landsof.elderlore.com sont migrés, en tout cas les plus importants;
    • Les messages du Joomla portal.elderlore.com ne sont pas encore migrés;
  2. intégrer le Planet Roguelike, ou en tout cas un agrégateur de flux affichant les billets des développeurs de roguelike et renvoyant vers le site d’origine:
    • l’intégration du Planetlike MoonMoon sous Wordpress est une vraie sinécure, et en tout cas au-delà de mes maigres compétences en php et css :-(
    • l’extension Feedwordpress fonctionne plutôt bien, surtout couplée avec Sticky Wordpress Categories and Tags pour ne pas afficher les billets du planet sur la page d’accueil. C’est d’ailleurs elle qui tourne en ce moment. Il me reste encore trois problèmes à régler:
      • impossible de changer les permaliens en quelque-chose de plus sympa, car sinon les liens sur les titres des billets du Planet Roguelike ne fonctionnent plus;
      • il n’y a pas encore de Widget listant les auteurs du Planet Roguelike;
      • il manque aussi un formulaire permettant de me soumettre un nouveau flux pour le Planet;
  3. gérer plusieurs langues, c’est-à-dire dont l’interface est localisée, et qui facilite la rédaction de billets sous plusieurs langues:
  4. intégrer mon wiki sous Dokuwiki:
    • l’extension dw2wp ne fonctionne plus avec la dernière version 2.8 de Wordpress. Mais son auteur, que j’ai contacté cette semaine, m’a dit très gentiment qu’il essaierai de le rendre compatible après les fêtes.
  5. disposer d’un système de galerie d’images pour afficher des captures d’écran des jeux et illustrer mes billets:
    • la fonction native de bibliothèque Média de Wordpress est pratique, surtout avec l’extension Media Tags;

Wordpress permet donc de quasiment tout faire, nativement ou par le biais d’extensions, à l’exception peut-être de Dokuwiki. Le nouveau site avance bien, j’espère avoir fini prochainement.

Elderlore, le roguelike: plan de bataille

Bilan et perspectives

Elderlore est un roguelike ambitieux que j’ai développé pendant quelques années. Peut-être un peu trop ambitieux justement puisqu’après avoir sorti quelques versions non jouables, j’ai interrompu son développement, un peu noyé je dois dire sous les lignes de code et probablement mon manque d’expérience pour gérer un aussi gros paquet de lignes de code.

J’ai ensuite développé un 7DRL, Mines of Elderlore, beaucoup plus modeste – 10 niveaux superposés, 10 types de monstres, 4 armes différentes -, que j’ai ensuite amélioré pour affiner le gameplay et ajouter des graphismes sous Pygame.

Avec le recul, je pense que cette échelle de temps – une dizaine de jour pour faire un prototype fonctionnel, un ou deux mois ensuite pour affiner les détails et le gameplay – me convient bien pour développer un jeu: elle est suffisamment longue pour obtenir quelque chose d’intéressant, et quand même assez courte pour forcer à se concentrer uniquement sur l’essentiel, profiter du résultat et communiquer dessus (release early, release often).

Modèle de développement

Pour reprendre le développement d’Elderlore, je pourrai restreindre mes ambitions et tenter de le faire rentrer dans ce schéma. Une autre solution, qui a ma préférence, est de scinder le jeu en plusieurs modules que je développerai indépendamment. L’idée ici est de regrouper les fonctionnalités d’Elderlore de manière intelligente, de telle façon que l’avancement de chaque module impacte les autres le moins possible.

Chaque module sera développé en deux étapes:

  • une première étape destinée à répondre aux objectifs premiers, sera développé en 10 heures non consécutives (10HRL).
  • Une seconde pour développer les concepts, ajouter des graphismes 2D et corriger les bugs identifiés, avec un objectif de 100 heures de développement (100HRL).

Cela me permettra, à chaque fois que je m’attellerai au développement d’un des modules, de quantifier mon avancement et d’en faire un suivi rigoureux sur ce blog. J’espère ainsi réduire au minimum les perturbations

Les modules

Voila ci-dessous les différents modules que j’envisage de mettre en route progressivement. Chaque module incarne une ou plusieurs activités que le joueur pratiquera dans Elderlore, à savoir explorer, combattre et progresser dans les voies du commerce, de la connaissance et de la maitrise des armes.

Worlds of Elderlore

Ce module est le socle de base qui permettra de façonner le monde sur lequel le joueur évoluera. Il reprendra des bouts de code issus des premiers développements de Lands of Elderlore, comme l’altitude, les montagnes, l’écoulement des rivières ou la position des forêts.

  • Activité: Explorer
  • Création de mondes sphériques, avec un pôle nord et un pôle sud
  • Gestion de l’altitude, création des mers
  • Gestion de la température et de l’hygrométrie
  • Création des montagnes
  • Création des rivières, des lacs et des marais
  • Création des forêts, des marais et des déserts
  • Objectifs 100HRL: Affiner la carte sous Pygame + OcempGui
  • Génération des noms pour chaque formation naturelle (continents, mers, rivières, montagnes, forêts, marais, déserts)
  • Gestion des climats et des saisons (avec influence des montagnes sur le climat)
  • Ajout de tuiles graphiques avec gestion des transitions
  • Ajout d’une GUI pour jouer sur les paramètres de création du monde
  • Création d’un effet parchemin (filtre Sépia + texture de parchemin)
  • Ressources:

Realms of Elderlore

Ce module permet d’intégrer des royaumes médiévaux aux mondes générés dans le module Worlds of Elderlore.

  • Activité: Explorer
  • Objectifs 10HRL: Créer la carte d’un monde médiéval (géographie, histoire)
  • Pré-requis: Worlds of Elderlore 10HRL
  • Ajout de ressources naturelles en fonction du type de terrain
  • Placement des villes en fonction des ressources naturelles
  • Création des routes entre les villes
  • Création des royaumes
  • Évolution simple des villes et des royaumes au cours du temps
  • Objectifs 100HRL: Affiner la carte sous Pygame + OcempGui
  • Génération des noms pour chaque formation artificielle (ville, route, royaume)
  • Évolution complexe des villes (extension sur plusieurs cases avec ajout de tuiles graphiques pour les villes sur plusieurs cases)
  • Évolution complexe des royaumes (diplomatie, guerre, colons) dans le temps
  • MAJ de la GUI pour intégrer les paramètres de gestion des villes et des royaumes
  • Ressources:
  • A Magical Medieval Society: Western Europe

Blades of Elderlore

  • Activité: Combattre, Progresser
  • Objectifs 10HRL: Simuler des combats simples dans une arène façon The Doryen arena
  • Feuille de personnage simple finale
  • Pyramide des compétences
  • Gestion de l’inventaire martial simple
  • Mise en place des combats simples
  • Objectifs 100HRL: Simuler des combats complexes sous Pygame + OcempGui
  • Feuille de personnage finale
  • Background des armes et armures
  • Mise en place des combats tactiques
  • Simulation des dynasties de joueurs
  • Sauvegardes et scores en ligne
  • Tuiles graphiques
  • GUI
  • Ressources:

Trades of Elderlore

  • Activité: Commercer
  • Objectifs: Permettre l’artisanat et simuler les échanges commerciaux entre villes
  • Un système économique simple basé sur l’offre et la demande entre les villes et leurs ressources
  • Des biens dépendant des ressources locales et permettant un artisanat simple
  • Des routes terrestres et maritimes entre les villes
  • Des caravanes et des navires marchands
  • Ressources:

Cities of Elderlore

  • Activité: Explorer
  • Objectif: Créer des villes médiévales réalistes
  • Qui s’adaptent à la géographie du site (bord de mer, forêt, désert, embouchure de rivière, …)
  • Qui contiennent différents bâtiments (différents types, différentes qualités)
  • Qui sont peuplées d’habitants ayant leur vie propre
  • Qui ont des égouts et des catacombes
  • Ressources:
  • Cityscape
  • Cityworks

Lands of Elderlore

  • Activité: Explorer, commercer, combattre, progresser
  • Objectif 10DRL: Créer un modèle détaillé à partir d’une carte du monde
  • Avec une vue isométrique (et gestion du relief façon pytile?)
  • Avec des rivières à base de courbes de Bézier (Ubrarum Regnum, PlayTechs)
  • Détail des zones à base de fractals
  • Ressources:
Categories: Journal de Bord Tags:

Dev diary

Here are some news about my last developments.

Things are not progressing very fast, I would like to release version 1.0 of Mines of Elderlore before going on with Lands of Elderlore, and real life didn’t left me a lot of spare time and energy.

Anyway I’ve found a nasty bug that was roaming around from the beginning in MoE, and now keymovies are efficient at last. What are keymovies? Only records of previous play in the form of keypressed and random seeds that can be played back.

I’ve also coded some PHP and now high scores can be pushed to some website. This feature will be in the 1.0 release; I hope I’ll publish it soon! I think I should try to release soon and often, but that’s easier to say than to do.

Concerning this website, I’ve uploaded some screenshots in several image galeries; I’m still having a hard time mastering Drupal, but I progress slowly in my knowledge of this CMS.

Finally, I’ve migrated my laptop to Hardy Heron, the last Ubuntu release that was published some days ago. Most of the migration process consisted in backing up my data; once this backup done, it only took about an hour to install the new system, install the useful packages (Eclipse, pydev, pygame, numeric-ext, ocempgui, psyco), and find my usual development environment. This heron is very hardy indeed!

Categories: Journal de Bord Tags: