Odyc.js

🌍 Les Templates et la Map

Les templates permettent de définir tous les objets de votre jeu : obstacles, items, personnages, etc.
Chaque template est associé à un caractère unique (ex. "X", "$", "e", "#").
Vous pouvez ensuite attribuer un ensemble de propriétés à chaque template, puis les utiliser dans la map.


⚙️ Propriétés des templates

Chaque template accepte les propriétés suivantes:

PropriétéValeur par défautDescription
solidfalseDéfinit si le joueur peut passer au travers de l’élément.
visibletrueDéfinit si la sprite est affichée ou non.
spriteAucunDéfinit l’apparence de l’objet (voir sprites)
soundAucunSon joué à l’interaction (voir sons)
dialogAucunMessage affiché dans la boîte de dialogue quand le joueur interagit avec l’objet (voir dialogues)
endAucunDéclenche la fin du jeu avec un message personnalisé (voir titre & fin de jeu)
onCollideAucunFonction appelée lorsque le joueur entre en collision avec l’élément (voir événements)
onEnterAucunFonction appelée lorsque le joueur entre sur la case contenant l’élément (voir événements)
onLeaveAucunFonction appelée lorsque le joueur quitte la case contenant l’élément (voir événements)
createGame({
	templates: {
		r: {
			sprite: 6,
			sound: ['HIT', 999],
			visible: false,
			end: 'Perdu'
		},
		g: {
			sprite: 7,
			dialog: "Je suis de l'herbe.",
			solid: false
		}
	}
})

🗺️ La Map

La map définit la disposition spatiale des éléments du jeu en utilisant une grille ASCII. Chaque caractère correspond à un template.

💡 Créer une map, c’est un peu comme dessiner une sprite !

  • Chaque caractère déclaré dans templates est interprété.
  • Les espaces, tabulations et lignes vides sont ignorés.
  • Tout caractère non défini est traité comme une case vide.
createGame({
	templates: {
		x: { sprite: 0 },
		g: { sprite: 7 },
		r: { sprite: 4 }
	},
	map: `
    xxxxxxxxxxxxxxxx
    x..............x
    x...........g..x
    x..............x
    x..............x
    x....r.........x
    x..............x
    xxxxxxxxxxxxxxxx
  `
})

☄️ Templates dynamiques

Un template ne doit pas forcément être un objet fixe. Vous pouvez aussi le définir comme une fonction qui retourne un objet. C’est utile si vous souhaitez créer des éléments légèrement différents à chaque apparition.

Par exemple, pour créer un mur dont chaque instance a une couleur différente :

createGame({
	templates: {
		x: () => ({
			sprite: Math.floor(Math.random() * 9)
		})
	}
	//...
})

La fonction est appelée chaque fois qu’un élément x est placé sur la carte.