en fr

es pl

sv de
direct download download direct download

howto/en/create a skin

From Wormux


Warning

This article is a stub.

This page is being translated into English at the moment.

Contents

Wormux skin creation

(svn revision: 899)

Since version 0.7.9, Wormux breaks up skins into several layers allowing a greater flexibility regarding their interactions with the game, and also an easier way to improve and add different animations.

Each skin is now broken up according to the limbs that the body is made of, the clothes it can wear, and the motions it can do. Those 3 characteristics are described in a XML file specific to each character, which is described below. You'll find those XML files as well as images in folder /usr/share/game/wormux/body for Linux (may be without game/ depending on your distribution), or in folder C:\Program Files\Wormux\data for Windows. All examples are taken from Workrave skin.

Limbs definitions and characters skeletion build.

As seen previously, each skin is broken up according to the body's limbs. An unlimited number of limbs can be made to describe a character. However, the more limbs there are, the more complex describing the animations will be. Therefore, you'd better find a good balance between animation and simplicity.

XML description for a limb:

<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>
  • name field: limb name
  • type field: limb type. The value of the type is arbitrary, you can select any you want. However, you must select the same type to describe an identical part of a body. For instance, Workrave has 2 different bodies: one if alive (body-normal) and the other (body-dead); din each case, type is "body".
  • image field: filename for the image corresponding to the limb (see §5 on how to use animations instead of single images).
  • anchor field: defines adé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.
  • attached field: describes skin skeleton by indicating the various limb types (member_type) that can be connected to the limb being described. frame is used for animated limbs (see §5). dx and dy coordinates indicate the anchor point position for the connected limb (see the drawing below).

For instance, Workrave simplified body with only one arm would be:

<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>
Image:Workrave-member.png
  • Member weapon: one must connect to each body a limb of type weapon, indicating which limb holds the weapon


Clothing definitions.

Clothing define which limbs to display and in which order, allowing to hide some behind others depending on their position.

XML description for a limb:

<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>
  • name field: defines cloth name. Wormux may display a particular cloth if it's available in the XML file (for instance, "helmet" cloth is displayed when anti-gravity weapon is being used (see §6 to discover the list of clothes).
  • member field: (waiting for French page to be updated)
Image:Workrave-clothe.png
  • 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. Wormux 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:

<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 Wormux 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 Wormux, 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).
Image:Workrave-testrect.png
  • 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 soie calculé pa Wormux (les mouvements calculés sont ajoutés à l'angles et déplacement définis pour la frame) :

    • follow_speed permet au membre de suivre la trajectoire :
Image:Workrave-jump.png
    • 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 Wormux:

<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