The Game Boy of Isaac

Occurrences : 

2020

Nombre d'étudiants minimum: 

5

Nombre d'étudiants maximum: 

6

Nombre d'instances : 

2

Domaines: 

Résumé

Dans ce projet, nous nous proposons de programmer un jeu vidéo sur une Game Boy. Dans un premier temps, nous nous familiariserons avec l’architecture matérielle, et ses spécificités. Puis, nous apprendrons comment coder sur cette plateforme en assembleur. Enfin, nous réaliserons un jeu qui sera un rogue-like, dans le style de « The Binding of Isaac ».

Description Complète

La Game Boy a dominé pendant plus d’une décennie le marché des consoles de jeu et est aujourd’hui la troisième console la plus vendue de tous les temps (source : https://en.wikipedia.org/wiki/List_of_best-selling_game_consoles). Bien qu’elle fût dépassée par la Nintendo DS pour ce qui est des jeux portables, une communauté de gens nostalgiques et adeptes du rétro-gaming a continué à l’examiner et à y développer des jeux. Ainsi, après de nombreux efforts, il a été possible rétro-concevoir toute l’architecture matérielle et de nombreux émulateurs sont apparus, simulant le comportement d’une vraie console.

Dans ce projet, nous allons développer un jeu tournant sur une Game Boy. Pour cela, il va être primordial de comprendre le fonctionnement interne de cette machine, et en particulier l’organisation de la mémoire. Les étudiants découvriront ou approfondiront des notions sur les systèmes embarqués qui leur seront utiles dans la suite de leur parcours. Ils comprendront durant cette étape les défis qui les attendent et qui vont grandement différer de ce qu’ils ont appris durant le cours de Java par exemple.

En parallèle, nous apprendrons les notions de base de l’assembleur avec les commandes spécifiques à la Game Boy. Comme nous allons le voir, il s’agit d’un mélange de commandes venant de l’Intel 8080, du Zilog Z80 et de commandes personnalisées. Pour l’apprentissage, nous nous baserons sur de nombreux tutoriels en ligne, regroupés pour la plupart sur la page https://gbdev.io/list.html#asm .

Le jeu sera testé et développé sur un émulateur et débuggeur du nom de BGB (http://bgb.bircd.org/). Ce programme donne de nombreuses informations sur le déroulement du code et le fonctionnement de la Game Boy.

Quand les étudiants auront réussi à comprendre les notions essentielles pour développer sur Game Boy et qu’ils sauront exécuter des actions telles qu’afficher des images, jouer du son, ou lire une entrée, nous commencerons le développement du jeu. Nous allons pour cela créer un rogue-like, qui est une catégorie de jeux où les niveaux sont créés procéduralement, c’est-à-dire qu’ils sont généré aléatoirement à chaque partie. Cette catégorie de jeu était très populaire à l’époque des machines avec une faible mémoire car elle requière de stocker moins d’information que la majorité des jeux. Par exemple, le jeu 3D .kkrieger tient sur 97.280 bytes (https://en.wikipedia.org/wiki/.kkrieger). Comme jeux plus connus, nous retrouvons Minecraft, Terraria, Rogue (qui a lancé le genre), Dwarf Fortress ou encore The Binging of Isaac (https://en.wikipedia.org/wiki/The_Binding_of_Isaac_(video_game)). C’est de ce dernier jeu que nous allons nous inspirer.

 

A la fin de ce projet, les élèves devront rendre un jeu démontrant la gestion d’un menu et la génération d’au moins un niveau, avec des ennemis, des animations, du son et une manière de finir ce niveau. Ils devront aussi être capables de décrire quelles sont les particularités de la Game Boy. En parallèle, ils tiendront un journal quotidien démontrant des avancés du projet. Le code devra être mis à jour sur Git régulièrement.

Ce projet est difficile et les élèves seront amenés à faire preuve d’autonomie et de rigueur. Une maitrise de l’anglais et souhaitée car la majorité des ressources seront dans cette langue. Beaucoup de notions nouvelles vont être abordées. L’assembleur n’est pas un langage compliqué en soit mais l’organisation du code peut être compliquée. En particulier, ce projet doit se faire en équipe et nous insisterons sur une distribution intelligente des tâches.

Sources Utiles