Créer un skin
Table of contents
[English] [Français]
Introduction
Depuis sa version 0.7.9, WarMUX utilise un système de décomposition des personnages (skins) en différentes couches (layers) permettant une plus grande flexibilité dans leurs interactions avec le jeu, et une plus grande facilité de développement de leur mouvements.
Chaque skin est désormais décomposé selon les membres qui composent son corps, les différents "habits" qu'il peut porter, et les mouvements qu'il peut effectuer. Ces trois caractéristiques sont décrites dans un fichier XML spécifique à chaque personnage, dont l'écriture est présentée ci-dessous. Vous trouverez ces fichiers xml ainsi que les images composants les corps des skins dans le dossier /usr/share/game/warmux/body sous Linux(ou sans le game/ selon votre distribution), ou dans le dossier C:\Program Files\Warmux\data sous Windows. Tout les exemples utilisés sont tirés du skin Workrave.
Définitions des membres et fabrication du squelette des personnages.
Comme vu précédemment, chaque skin est décomposé selon les membres qui vont constituer son corps. Un nombre illimité de membres peuvent être utilisés pour décrire un personnage. Cependant, plus le personnage aura de membres, plus la description de ses mouvements sera compliquée à écrire. Il faut donc trouver un compromis permettant une bonne animation du personnage, tout en essayant de conserver une certaine simplicité.
Description XML d'un membre :
Code XML :
<sprite name="body-normal" type="body" > <image file="body.png"/> <anchor dx="12" dy="15"/> <attached member_type="head" frame="*" dx="10" dy="1"/> <attached member_type="arm-right" frame="*" dx="5" dy="9"/> <attached member_type="arm-left" frame="*" dx="11" dy="8"/> <attached member_type="foot-right" frame="*" dx="9" dy="28"/> <attached member_type="foot-left" frame="*" dx="18" dy="26"/> <attached member_type="jetpack" frame="*" dx="3" dy="13"/> <attached member_type="jetpack-belt" frame="*" dx="0" dy="20" /> </sprite>
- Champs name : nom du membre
- Champs type : indique le type de membre. La valeur donnée au champs type est arbitraire, on peut lui donner n'importe quelle valeur. Il faut cependant veiller à donner le même type à deux membres décrivant la même partie du corps du personnage. (par exemple: Workrave possède deux corps différents: un s'il est vivant (body-normal) et l'autre s'il est mort (body-dead), dans chaque cas le type est fixé à "body").
- Champs image : nom de fichier de l'image associée au membre (voir §5 pour l'utilisation d'animations au lieu d'images fixes).
- Champs anchor : définit les coordonnées du point d'encrage sur l'image. Ce point sert de centre de rotation à ce membre (voir schéma ci-dessous), et de point d 'attache au membre supérieur.
- Champs attached : décrit le squelette du skin en indiquant quel type de membre (member_type) peut être rattaché au membre étant décrit. frame est utilisé pour des membres animés (voir §5). Les coordonnées dx et dy indiquent la position du point d'ancrage du membre attaché (voir schéma ci-dessous).
Par exemple, le corps simplifé de Workrave, avec seulement un bras donnerait :
Code XML :<sprite name="body-normal" type="body" > <image file="body.png"/> <anchor dx="12" dy="15"/> <attached member_type="arm-right" frame="*" dx="5" dy="9"/> </sprite> <sprite name="arm-right-normal" type="arm-right" > <image file="arm.png"/> <anchor dx="2" dy="0"/> </sprite>

- Membre weapon : il faut attacher à chaque corps un membre de type "weapon", indiquant quel membre tient l'arme.
Définitions des vêtements.
Les vêtements définissent quels membres afficher et dans quel ordre, permettant ainsi de cacher les membres les uns par rapport aux autres selon leur position.
Description XML d'un membre:
Code XML :
<clothe name="normal"> <member name="arm-left-normal"/> <member name="foot-left-normal"/> <member name="body-normal"/> <member name="head-normal"/> <member name="foot-right-normal"/> <member name="arm-right-normal"/> <member name="weapon"/> </clothe>
- Champs name : défini le nom du vêtement. Selon les circonstances WarMUX affiche un certain vêtement s'il est disponible dans le fichier XML (par exemple le vêtement "helmet" est affiché, lorsque l'arme anti-gravité est utilisée (voir §6 pour la liste des différents vêtements).
- Champs member : name est le nom du membre à afficher, et layer indique dans quel ordre afficher les membres, les différentes couches étant placé dans l'ordre.

- Membre body : chaque vêtement doit contenir un membre de type "body" car il sert de base à l'affichage du skin.
- Membre weapon : si le vêtement décrit peut être utilisé lorsque le skin utilise une arme, il faut inclure un membre "weapon" dans le vêtement. L'arme est toujours affichée au premier plan et donc son numéro de layer n'a pas d'importance (pour l'instant en tout cas
Définitions des mouvements.
La définition des membres selon un squelette permet d'animer simplement le personnage en indiquant seulement le mouvement effectué par chaque membre pour chaque image du mouvement. WarMUX s'occupe ensuite de répercuter le mouvement d'un membre à tous les membre qui lui sont rattachés. (par exemple la rotation du membre "body" fera tourner le corps du skin ainsi que ses bras, ses jambes et sa tête)
Description XML d'un mouvement:
Code XML :
<movement name="jump" speed="100"> <collision_rect left="5" right="5" top="10" bottom="2" /> <frame number="0"> <member type="head" follow_crosshair="true"/> <member type="arm-left" angle="90" follow_speed="true"/> <member type="arm-right" angle="90" follow_speed="true"/> <member type="foot-left" angle="0" follow_speed="true"/> <member type="foot-right" angle="0" follow_speed="true"/> </frame> </movement>
- Champs name : déifni le nom du mouvement. Selon les circonstances WarMUX applique un certain mouvement au joueur s'il est disponible dans le fichier XML(par exemple le mouvement "jump" lorsque le joueur saute. Voir §6 pour la liste des mouvements gérés)
- Champs speed : défini la durée en millisecondes de chaque image de l'animation
- Champs collision_rect : au niveau du calcul des déplacements des objets dans WarMUX, chaque objet est considéré comme étant un rectangle. Lorsque les rectangles représentant deux objets se touchent, on considère qu'il y a une collision. Afin que le rectangle de test de collision correspondent le mieux possible au skin le champ collision_rect défini les bords à supprimer du rectangle initial associé au personnage (rectangle de 30x45 pixels).

- Champs frame number : numéro de frame
- Champs member : type indique le type de membre à déplacer. angle indique l'angle de rotation par rapport à sa position initial (et non pas par rapport à la frame précédente). L'angle est en degrés et les membres tournent dans le sens des aiguilles d'une montre.
dx et dy indiquent des déplacements en pixels. Certaines options spéciales peuvent être utilisées pour que le mouvement soit calculé par WarMUX (les mouvements calculés sont ajoutés à l'angle et déplacement définis pour la frame) : - follow_speed permet au membre de suivre la trajectoire :

- follow_crosshair permet au membre de suivre le viseur de l'arme. (aucune modification si l'arme n'utilise pas le viseur)
- follow_direction fait tourner le membre de 180° quand le personnage est tourné vers la gauche. Ce paramètre sert essentiellement avec le mouvement "ninja-rope" pour pas que le skin se retrouve la tête en bas lorsqu'on le déplace vers la gauche.
Définition de membres à partir de sprites animés.
Un membre peut être constitué à partir d'une image animée en utilisant la syntaxe normale pour la définition des sprites de WarMUX:
Code XML :
<sprite name="yoyo" type="yoyo"> <image file="yoyo.png"> <grid pos="0,0" size="32,42" array="36,1" /> </image> <anchor dx="29" dy="25"/> <animation speed="150" /> </sprite>
- Champs grid:
- Champs pos: inutilisé
- Champs size: taille d'une image constituant l'animation
- Champs array: disposition des images de l'animation dans le fichier file (ici yoyo.png est constitué de 36 images de 32x42 pixels disposées sur 1 ligne de 36 images).
- Champs animation: l'option speed du champs animation donne la durée de chaque frame de l'animation en millisecondes.
Les points d'attaches des membres sur l'animation peuvent être définis pour l'ensemble des frames en utilisant l'option frame="*" , ou bien frame par frame en indiquant le numéro de la frame correspondante dans le champ frame (non testé en frame par frame).
Liste des vêtements et mouvements gérés
| Action | Vêtement sélectionné | Mouvement sélectionné |
| Par défaut | normal | walk |
| Mort du personnage | dead | x |
| Saut du personnage | x | jump |
| Explosion touchant le personnage | x | fly |
| Noyade du personnage | x | drowned |
| Atterrissage du personnage (même après un saut) | x | soft-land |
| Atterrissage avec dégats | x | hard-land |
| Activation de l'arme parachute | x | parachute |
| Activation de l'arme ninja-rope | x | ninja-rope |
| Activation de l'arme anti-gravité | x | helmet |
| Activation du jetpack | jetpack | x |
| Utilisation de carburant du jetpack | x | jetpack-fire (vêtement jetpack déja sélectionné) |
| Utilisation du jetpack sans utiliser de carburant | x | jetpack-nofire (vêtement jetpack déja sélectionné) |
| Sélection du marteau piqueur | weapon-airhamer | x |
| Sélection de la dynamite | weapon-dynamite | x |
| Sélection de l'arme SuperTux | weapon-tux | x |
| Sélection de l'arme Gnu | weapon-gnulauncher | x |
| Sélection du bazooka | weapon-bazooka | x |
| Sélection du bazooka automatique | weapon-automatic_bazooke | x |
| Sélection de la Riot bomb | weapon-riot_bomb | x |
| Sélection de la balle rebondissante | weapon-bounce_ball | x |
| Sélection de la grenade | weapon-grenade | x |
| Sélection de la grenade sainte | weapon-holly_grenade (holly avec 2 'l') | x |
| Sélection de la grenade à fragmentation | weapon-cluster_bomb | x |
| Sélection du pistolet | weapon-gun | x |
| Sélection du M-16 | weapon-uzi | x |
| Sélection de la batte de baseball | weapon-baseball | x |
| Sélection de l'arme téletransportation | weapon-teleportation | x |
| Sélection du jetpack | weapon-jetpack | x |
| Sélection de l'arme suicide | weapon-suicide | x |
| Sélection de l'attaque aérienne | weapon-air_attack | x |
| Sélection de l'arme mine | weapon-minelauncher | x |
| Sélection de l'arme "passer son tour" | weapon-skipturn | x |
| Sélection de l'arme anti-gravité | weapon-lowgrav | x |
| Sélection de la corde ninja | weapon-ninjarope | x |
| Sélection de l'arme parachute | weapon-parachute | x |
| Animation quand le personnage ne joue pas | animation* (où * est un nombre) | animation* (où * est un nombre) |
À développer
- Toutes les skins utilisent les mêmes yeux (2 fichiers : fond et pupille)
- Ou placer les fichiers ?
- Quels sont les fichiers ?
- Combien de lignes environ le fichier de configuration
- Le dossier team : son fichier de config, son drapeau
This page has been seen 53914 times
Tools
Contribute