Un mod qui vous permet de créer une timeline sur votre carte, lui permettant d'évoluer au fil du temps... tuto en UK le temps d'une traduction ...
Postée par
steveb Bonjour tout le monde,Je suis Steveb ou stevebone sur les forums de paradox. J'ai commencé mon blog de modding par un tutoriel pour déverouiller la fonctionnalité qui permet d'avoir des villes qui évoluent au fil du temps.
Pendant quelques temps j'ai cherché dans les fichiers du jeu comment elle s'organise et où elle était. Mais quelle est cette fonctionnalité au juste ? En fait, la timeline de CiM tourne de 1920 à 2020. Au fur et à mesure que le temps passe, de nouveaux bâtiments et props apparaissent. Vous pouvez voir des maisons en construction mais aussi des routes.
En fait, cette fonctionnalité a été retirée de la version finale de l'éditeur de maps, ce qui fait que toutes les maps créées dans l'éditeur de maps sont statiques et n'évoluent pas avec le temps. Avec ce mod, ça devrait changer. Pour cela, il faudra faire des modifications au niveau de ces deux fichiers :
Code: |
metro/scripts/editor.script metro/ui/timebar/timebar.script
|
Le code de l'éditeur (editor.script) gère les menus qui apparaissent dans l'éditeur et quelques autres petites choses, tandis que le code de la barre de temps (timebar.script) est l'interface en elle-même qui vous permet de changer d'année, de mois et de jour.
Tout d'abord nous devons activer la timebar. Regardons dans le fichier timebar.script, où nous avons ces lignes de code :
Code: |
$viewport = MAIN.$viewport; $desktop = MAIN.$desktop; $grid = MAIN.$grid; $player = MAIN.$player; $strings = MAIN.$strings;
MAIN.$timebar = this; $enabled = MAIN.$settings.$debug : false;
|
D'après la dernière ligne, la timebar est désactivée par défaut. Donc, nous devons changer cette ligne en mettant :
* Notes :
Vous pouvez faire des changements à chaque année, mois ou jour mais ce n'est pas recommandé (je vous expliquerai plus bas). Il vaut mieux choisir simplement quelques années, comme 1920-1940-60-80 etc. ou tout autre rythme similaire. Mais attention, si vous placez un bâtiment en 1920... il restera ainsi pour toujours, à moins de l'enlever plus tard, à une
autre année, pour le remplacer par autre chose (ou rien). Par exemple : pour l'aéroport, admettons que je décide de placer un petit terminal en 1920. Puis, en 1965, je décide de retirer ce petit terminal pour en mettre un plus grand. Je suppose que vous voyez ce qui va se passer.
Autre exemple : je choisis un espace pour un grand immeuble de bureaux. En 1920 je vais juste placer quelques arbres pour que ce soit un petit parc ou de l'espace inutilisé, puis en 1960 je construis le fameux immeuble de bureaux. Quand on jouera, cet espace sera un parc entre 1920 et 1959, puis sera un immeuble de bureaux en 1960.Voilà. Passons maintenant à editor.script. Nous pouvons tout d'abord activer une fonctionnalité optionnelle mais intéressante. Il n'est pas nécessaire de l'activer pour que la timeline marche mais il vaut mieux l'avoir. Normalement, quand on a une timeline ou timebar, le jeu doit également prendre des captures de la minimap pour qu'elle s'accorde à ce qu'il y a réellement dans la ville, comme dans les maps officielles.
Par exemple : berlin-timeline.dds. Mais cette fonctionnalité est désactivée également.
Donc cherchons le code suivant dans le fichier :
Code: |
if (MAIN.$settings.$debug : false) { event MAIN.$player.keyDown::["F3"]() { $date = MAIN.$mainClock.date; $bitmap = colormap(1024, 1024); for ($i = 0; $i < 16; $i) { MAIN.$mainClock.date = mkdate(1, 1, 1920 $i * 100 / 15); skip_frame; MAIN.$minimap.update(); MAIN.$minimap.$texture.saveToColormap($bitmap, ($i & 3) * 256, 768 - ($i >> 2) * 256, true); } $bitmap.save("userdata/timeline.bmp"); delete $bitmap; MAIN.$mainClock.date = $date; }
$hudVisible = true; event MAIN.$player.keyDown::["Tab"]() { $hudVisible = !$hudVisible; MAIN.$hud.visible = $hudVisible; } }
|
Tout ce qu'on a à faire est de changer la première ligne, en mettant à la place :
Code: |
if (MAIN.$timebar.$enabled) {
|
Maintenant, quand on va appuyer sur
F3 dans l'éditeur de maps, l'éditeur va prendre des captures des différentes minimaps qui vont s'afficher au fil des années avec les changements en fonction du temps, et les sauvegarder dans un fichier timeline.bmp, que vous pourrez convertir en dds pour votre map. Ce code permet également de masquer l'interface lorsqu'on appuie sur la touche
Tabulation.
*Notes : Le fichier
timeline.bmp, qui gère en fait les différents aperçus qui apparaissent lors du choix de la map, de la date de départ etc., enregistre 16 minimaps, alors qu'il y a un peu plus de dates de départ. Du coup, la même image peut être gardée pour 2 dates de départ alors que plein de choses ont changé entre ces deux dates. Cela peut même créer des décalages (l'aperçu de 1925 peut s'afficher en 1930, celui de 1930 en 1935...).
C'est pourquoi il n'est pas recommandé d'avoir autant de dates d'évolution différentes. Exemple à ne pas suivre : janvier 1920, juin 1920, 1921, etc.
Il y a encore une petite chose que nous pouvons ajouter au menu de construction, en haut.
Toujours dans le fichier editor.script, cherchons ce code :
Code: |
if (MAIN.$settings.$debug : false) { $modifyMenu = load "/metro/ui/toolbar/submenu.script"; $modifyMenu.addTypeButton("name"); $modifyMenu.addTypeButton("variation");
$modifyMenu.addButton("name", "rename", macro :: $toolbar.selectTool(GRIDMODE_RENAME)); $modifyMenu.addButton("variation", "var0", macro :: $toolbar.selectTool(GRIDMODE_SET_VARIATION, 0)); $modifyMenu.addButton("variation", "var1", macro :: $toolbar.selectTool(GRIDMODE_SET_VARIATION, 1)); $modifyMenu.addButton("variation", "var2", macro :: $toolbar.selectTool(GRIDMODE_SET_VARIATION, 2)); $modifyMenu.addButton("variation", "var3", macro :: $toolbar.selectTool(GRIDMODE_SET_VARIATION, 3)); $modifyMenu.addButton("variation", "var4", macro :: $toolbar.selectTool(GRIDMODE_SET_VARIATION, 4)); } else { $modifyMenu = null; }
|
Ce code vous permet de changer la texture d'un élément. Mais par défaut, cette fonction est aussi désactivée. Pour l'activer, remplaçons la première ligne par :
Code: |
if (MAIN.$timebar.$enabled) {
|
Un exemple serait la piste d'atterrissage d'un aéroport qui peut avoir le vieux look qu'on peut voir à Berlin en 1920 ou le look moderne proposé par l'éditeur. Mais il n'y a pas beaucoup d'objets qui ont plusieurs textures. D'après ce que j'ai pu observer, les routes et les allées ont cette fonction, ce qui évite d'avoir à les reconstruire pour simplement changer leur texture.