Créer ses défis - xml

## Présentation

Nous allons décortiquer le texte traduit du dev. Vous allez pouvoir construire un défi rien qu'avec le premier fichier décrit ici.

Il y a 3 types de fichiers par défi :

1. **fichier de définition** (indispensable !).
Ce fichier est complètement détaillé ci-dessous en l'état de la version 1.2.0 ß 13.
Il y définit les conditions de départ, les objectifs et divers modificateurs. Il devra être nommé : « *challenge\_nom\_du\_defi.xml*»
2. **fichier à partir d'une sauvegarde** qui permettra de démarrer à partir d'une base déjà développée.
Il devra avoir comme nom : « *challenge\_nom\_du\_defi\_save.xml*»
3. **fichier du texte d'introduction** du défi : le nom du défi, sa description, ses objectifs, etc. et pouvant être décliné en plusieurs langue.
Il devra être nommé : « *en\_nom\_du\_defi.xml* » ou « *fr\_nom\_du\_defi.xml* » pour le français. Sinon, lors du démarrage du défi, la page de présentation sera sans texte.

Les 2e et 3e fichiers seront décrits ultérieurement.

## xml késako ?

On va faire un petit tour en hyperbref :

***Le XML (eXtensible Markup Language) est un langage qui décrit des données à l'aide de balises et de règles que l'on peut personnaliser.***

ET C'EST TOUT...

Il sera composé de 2 types de balises : balises uniques ou par paire (même libellé de balise mais pour la seconde balise, on mettra un / avant le libellé, cela désignera la fin des données). Nous n'en auront que 2 dans la section suivante, ça reste simple ! Dans ces balises par paire, il ne faut pas les faire se chevaucher.

## Premier fichier xml

Vous trouverez ici le début de chaque élément du xml dans un ordre qui, j'espère sera le plus simple, logique et « plug and play ».

Nous ne parlerons que du seul fichier de l'environnement, étant donné sa complexité.

Il faudra créer un fichier (prendre notepad++ sur Win ou TextWrangler sur Mac, par exemple).

Tout fichier xml (dont le nom ne sera qu'en *minuscule*) sera enregistré au format utf-8 et comportera systématiquement comme première ligne :

```
<xml version="1.0" encoding="utf_8"?>
```

La 2 et 3e ligne devront être :

```
<challenge>
    <challenge group_id="nom_du_groupe_de_defi" order="1" difficulty="1">
```

 *requires* | Vous pouvez spécifier qu'avant de jouer à ce défi, l'utilisateur devra remporter un autre défi, ce qui sera utile si vous voulez créer une campagne qui comprendrait plusieurs niveaux à faire dans l'ordre.

Vient ensuite un exemple extrait d'un défi sur la planète F, il débute sans fichier de sauvegarde :

```
<starting_location planet_class="F" latitude="15" longitude="-12" savegame="false"/>

```

 *savegame* | valeur vrai (*true*) ou fausse (*false*). Cela dépend s'il y a un fichier de sauvegarde présent ou non. Il sera chargé lorsque le défi commencera (il devra se nommé comme le présent fichier avec « *\_save*» à la fin).

## Structure

Maintenant que nous avons le début d'installé, voici un récapitulatif avec un résumé de ce que nous allons créer sur cette planète !

```
<?xml version="1.0" encoding="utf_8"?>
<challenge>
	<challenge group_id="nom_du_groupe_de_defi" order="1" difficulty="1">
	<starting_location planet_class="F" latitude="15" longitude="-12" savegame="false"/>

	<!--Remarque : les balises à l'intérieur ne comportent pas de "s", ce sont les balises qui définissent la planète ! Les autres (<starting_specializations>) servent à les désigner et les encadrés pour que le jeu les retrouve. -->''

	<!-- Équipage de démarrage -->
	<starting_specializations>
		<starting_specialization> [...]
	</starting_specializations>

	<!-- Ressources initiales. Remarquez que le joueur pourra obtenir en plus 15 unités de métal supplémentaire et encore 10 de bioplastique lors du recyclage du vaisseau colonial -->
	<gameplay_modifiers>
		<gameplay_modifier> [...]
	</gameplay_modifiers>

	<!-- Modifie le terrain et les liquides et créer une variation de la planète d'origine indiqué plus haut -->
	<terrain_modifiers>
		<terrain_modifier> [...]
	</terrain_modifiers>

	<!-- Modifie le l'atmosphère, l'ensoleillement, et la visibilité des planètes ou autre à l'horizon -->
	<environment_modifiers>
		<environment_modifier> [...]
	</environment_modifiers>

	<!-- Les objectifs du défi -->
	<objectives>
		<objective> [...]
	</objectives>

</challenge>
```

## L'équipage

Et voilà c'est fini, maintenant nous allons voir chacune des balises au singulier :

```
<starting_specializations>
	<starting_specialization type="yy" amount="xx" />
</starting_specializations>
```

 *amount="*5*"* | son nombre

On mettra donc un seul attribut à chaque fois : **Worker** (ouvrier), **Biologist** (biologiste), **Engineer** (ingénieur), **Medic** (médecin), **Guard** (garde), **Visitor** (visiteur), **Intruder** (intrus), **Carrier** (robot porteur), **Constructor** (robot constructeur) et enfin **Driller** (robot foreur)

Exemple d'entrée :

```
<starting_specializations>
	<starting_specialization type="Worker" amount="2" />
	<starting_specialization type="Engineer" amount="1" />
	<starting_specialization type="Biologist" amount="2" />
</starting_specializations>

```

## Les ressources

```
<starting_resources>
	<starting_resource type="yy" amount="xx" />
</starting_resources>
```

 *amount="*5*"* | sa quantité

**Vegetables** (légumes), **Vitromeat** (viande), **Meal** (repas), **AlcoholicDrink** (boisson alcoolisée, **Ore** (minerai), **Metal** (métal), **Starch** (amidon), **Bioplastic** (bioplastique), **MedicinalPlants** (plantes médicinales), **MedicalSupplies** (médicaments), **Spares** (pièces détachées), **Semiconductors** (semiconducteurs), **Gun** (arme), **Coins** (argent)

Exemple pour le début du défi :

```
<starting_resources>
	<starting_resource type="Metal" amount="200" />
	<starting_resource type="Meal" amount="35" />
	<starting_resource type="Coins" amount="250" />
</starting_resources>

```

## Le gameplay

```
<gameplay_modifiers>
	<gameplay_modifier type="un_gameplay_" param="un_truc" />
	<gameplay_modifier type="un_gameplay_" />
</gameplay_modifiers>
```

## Terraformation

Mode pâte à modeler : changeons la face du monde, en tout cas celle de votre astre.

```
<terrain_modifiers>
<terrain_modifier type="xx" param ="yy" value="245, 245, 255" />
	<terrain_modifier type="xx" value="1.0" />
	<terrain_modifier type="xx" value="0,0,0" />
</terrain_modifiers>
```

 HeightOffset
 DistantHeightOffset
 CraterDensity
 LiquidAmount
 LiquidColor
 BackdropScale
 TintTexture
param="Flat2" : idem (et pourquoi Flat2)param ="Slope" : colorie les pentes des reliefs.
 HslTransformTexture
C'est le codage couleur TSL (teinte, saturation, luminosité) ou HSL en anglais. Respectivement :
1. **Teinte**, la forme pure d'une couleur : change la couleur.
2. **Saturation** : intensité de la coloration (du gris à la couleur pure)
3. **Luminosité** (clarté, brillance).

Exemple : <terrain\_modifier type="HslTransformTexture" param ="Flat1" value="10, 0, 0"/>

## Atmosphère - rotation de l'astre

Horaires, brouillard, lumière, lumière ambiante, lueur de l'espace et de l'horizon... tout un programme, tout un spectacle, il ne manque plus que le feu d'artifice avec quelques essaims de météorites !

```
<environment_modifiers>
	<environment_modifier type="xx" value="0,0,0" />
	<environment_modifier type="xx" value="0.00125" />
</environment_modifiers>
```

## But(s) du défi

Les divers objectifs pour votre défi :

```
<objectives>
	<objective type="" param="xx" />
	<objective type="" param="xx" value="yy" />
</objectives>
```

 AccumulateResources
 ReachPopulation
 TimeLimit
 SurviveTime
 BuildStructures
 BuildComponents
 ReachPrestige
 ReachWelfare

## Le mot final…

Eh bien, quoi c'est fini ? Vous n'avez pas oublié quelque chose :

```
</challenge>
```

Voilà, sauvegardez le fichier xml et on passera à la structure des 2 autres fichiers bientôt, on a donc fait le plus gros du morceau.