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 :
- 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 » - 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 » - 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">
Attribut | Description |
---|---|
group_id | Il détermine le numéro associé aux groupes de défis (en fait son nom de campagne). Vous pouvez regrouper plusieurs défis liés et ils apparaîtra à côté des autres dans l'interface utilisateur qui affiche tous les défis. |
order | Ordre dans lequel ce défi apparaîtra dans l'interface utilisateur par rapport aux autres défis du même ensemble (de 0 à x). |
difficulty | Doit être compris entre 1 et 4, et donnera au joueur une idée de la difficulté que sera ce défi (1 : accessible, 2 : difficle, 3 : impossible, 4 : suicide). |
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"/>
Attribut | Description |
---|---|
planet_class | Cela spécifie le type planète qui sera utilisé comme base pour ce défi (D : désertique, F, glaciale, M : lune, S : orageuse). Toutes les caractéristiques de terrain, de gameplay et d'environnement sont empruntées de cette planète à moins que vous ne les remplaciez dans le XML (nous expliquerons comment dans les sections suivantes). |
latitude | latitude de départ. Les défis utilisent toujours le même emplacement d'atterrissage. Un nombre positif indiquera le Nord et négatif le Sud. |
longitude | longitude de départ. Les défis utiliser toujours le même emplacement d'atterrissage. Un nombre positif indiquera l'Est et négatif l'Ouest. |
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>
Attribut | Description |
---|---|
type="specialité_du_gars" | spécialisation d'une personne/robot |
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>
Attribut | Description |
---|---|
type="la_ressource" | Une des 14 ressources existantes |
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>
Attribut (type="xx") | Description |
---|---|
IntruderMinPrestige |
spécifie le prestige minimal avant l'arrivée d'intrus. Pour les planètes builtin cela varie entre 150 et 100. Par défaut pour les planètes de classe :
|
ExtraIntruders |
ajoute un nombre spécifique d'intrus supplémentaires par attaque. Pour les planètes builtin c'est compris entre 0 et 1. Par défaut pour les planètes de classe :
|
DisableColonistShips | Désactive l'arrivée des colons en vaisseaux. |
DisableVisitorShips | Désactive l'arrivée des visiteurs en vaisseaux. |
DisableTradingShips | Désactive l'arrivée de vaisseaux marchands. |
DisableIntruders | Désactive l'arrivée d'intrus. |
DisableTraderTechs | Empêche les marchands de vendre des brevets |
DisableStructure |
param="" (Bar, LandingPad, Starport, Signpost, Lab, RadioAntenna, Pyramid, Monolith, SickBay, ProcessingPlant ou ControlCenter) Désactive une structure qui ne relève pas du défi. |
DisableComponent | Désactive un contenu de structure. |
DisableStructureRequirements | Donne l'accès au joueur à une structure autrement inaccessible. |
DisableVisitorRequirements | Désactive l'accès aux visiteurs qui devrait se faire par la construction d'un Port spatial. |
DisableNoMedicalSuppliesWarning | Désactive la fenêtre et son signale sonore lorsqu'il n'y a plus de médicaments. |
RestrictedTradingShips | (ex. : param="Electronics,Industrial"), Valeurs possibles : Electronics, RawMaterial, Medical, Count, Food, Industrial. |
InfiniteTraderBots | Autorise les marchands de toujours vendre les robots. Mais ils n'en fourniront plus lorsqu'il y a plus de robot que de colons. |
ShipFrequency | (param="2.0") Permet aux vaisseaux marchands d'arriver plus rapidement. |
DisasterFrequency | (param="1.0") Détermine la fréquence des cataclysmes (très fréquent : param="10.0"). |
UnlockTech | (param="DrillerBot") Débloque l'accès aux brevets : GoliathTurbine, ColossalPanel, MassiveStorage, FarmDome, MegaCollector, SuperExtractor, ConstructorBot, DrillerBot, GmTomatoes, GmOnions. |
SandstormRisk | Fournit la fréquence du cataclysme pour la tempête de sable (param="High") ou None, Low ou Variable. |
MeteorRisk | Fournit la fréquence du cataclysme pour les chutes de météorites (param="High") ou None, Low ou Variable. |
SolarFlareRisk | Fournit la fréquence du cataclysme pour les éruptions solaires (param="High") ou None, Low ou Variable. |
BlizzardRisk | Fournit la fréquence du cataclysme pour les tempêtes de neige (param="High") ou None, Low ou Variable. |
AtmosphereDensity | Critère de densité de l'atmosphère (param="High") ou None, Low ou Variable. |
LightAmount | Quantité lumineuse reçu par la planète (param="High") ou None, Low ou Variable. |
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>
Attribut | Description |
---|---|
HeightMultiplier | Forme les montagnes. |
HeightOffset | Enfonce le terrain globalement. |
DistantHeightOffset | Faire un relief loin du centre de la carte. |
CraterDensity | Ajoute des cratères, généralement la planète de type D n'en a pas. |
LiquidAmount | Place le niveau des eaux. |
LiquidColor | Couleur (valeurs en RVB) des eaux. Prendre value="0,0,0" pour que l'eau translucide reflète le ciel. |
BackdropScale | Make backdrops smaller on the Y axis (intraduisible pour l'instant). |
TintTexture |
param="Flat1" : colorie le sol avec : value="xx, yy, zz" |
HslTransformTexture |
Fait une sorte de luminescence (non document mais cela peu éblouir avec comme valeur : value="251, 201, 228". Un post sur Steam à lire pour cette instruction. C'est le codage couleur TSL (teinte, saturation, luminosité) ou HSL en anglais. Respectivement :
|
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>
Attribut | Description |
---|---|
RemoveSatellites | Supprime les astres célestes à proximité de la planète. |
DayHours | Détermine la durée du jour. Chaque heure de jeu est de 30 secondes de temps réel à la vitesse de 1x. Toutes les planètes dans le jeu ont par défaut 12 heures. |
NightHours | Idem pour la nuit. La durée varie de 8 à 12 heures par défaut pour les planètes de base. |
FogIntensityDay | Intensité de la brume, le jour. |
FogIntensityNight | Intensité de la brume, la nuit. |
FogIntensityTwilight | Intensité de la brume, au crépuscule et à l'aube. |
LightColorDay | Couleur lumineuse le jour |
LightColorNight | Couleur lumineuse la nuit |
LightColorTwilight | Couleur lumineuse au crépuscule et à l'aube |
AmbientColorDay | Lumière d'ambiance le jour |
AmbientColorNight | Lumière d'ambiance la nuit |
AmbientColorTwilight | Lumière d'ambiance au crépuscule et à l'aube |
HorizonColorDay | Couleur de l'horizon le jour |
HorizonColorNight | Couleur de l'horizon la nuit |
HorizonColorTwilight | Couleur de l'horizon au crépuscule et à l'aube |
SkyColorDay | Couleur du ciel le jour |
SkyColorNight | Couleur du ciel la nuit |
SkyColorTwilight | Couleur du ciel au crépuscule et à l'aube |
But(s) du défi[]
Les divers objectifs pour votre défi :
<objectives> <objective type="" param="xx" /> <objective type="" param="xx" value="yy" /> </objectives>
Attribut | Description |
---|---|
KeepCharacterAlive | Permet de mettre en échec un défi si la cible de la valeur spécifiée dans "param" meure (un colon en l'occurrence, son nom devra être dactylographié parfaitement), comme ceci : <objective type="KeepCharacterAlive" param="John Smith"/> |
AccumulateResources | Entreposage de ressources. Ex. : param="Coins" value="1000", nécessite de faire 1000 en argent. |
ReachPopulation | Nombre de colons, ex. : value="100". |
TimeLimit | Limité dans le temps |
SurviveTime | Survivre sans se faire tuer. |
BuildStructures | Nécessite des construction de structures. Ex. : param="RadioAntenna" value="3"). Pour 3 antennes radions. |
BuildComponents | Nécessite des construction de contenus de structures. Ex. : param="Radioconsole" value="3", pour 3 terminaux radio. |
ReachPrestige | Atteindre un seuil de prestige. Ex. : value="100", pour 100 en prestige. |
ReachWelfare | Atteindre un certain niveau de bien-être, valeurs entre 0 et 1. |
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.