"Mystery Island", l'Île du Mystère:
le making of

Une extension pour Dink Smallwood créé par Seth A. Robinson et Greg Smith. (V1.00)

(l'article suivant peut être considéré comme un 'spoiler' (gâcheur) - le lire peut rendre le jeu moins amusant, car vous saurez ce qui va se passer)

PRÉFACE

Ce fichier est un didacticiel - destiné à ceux qui sont intéressés par la création de leurs propres add-ons pour Dink Smallwood.

Il détaille les techniques d'écriture de script et de création de carte, mais il contient aussi des informations générales sur la création de jeu comme l'élaboration d'un scenario et l'utilisation de 3dsmax pour créer les graphiques.

Ce fichier à été créé 'sur le tas' - nous l'avons écrit par-ci par-là, donc excusez s'il vous plaît toutes les fautes et l'utilisation des temps présent et passé un peu partout.

- Seth A. Robinson

www.rtsoft.com

PHASE 1: DESIGN

Bon - nous savions que nous voulions créer un superbe nouvel add-on. À la place de nous précipiter et élaborer les écrans à la file, nous avons décidé de COMPLÈTEMENT définir le jeu avant même d'y TOUCHER.

Nous avons acheté des biscuits et des chips et autres trucs et avons fait une 'scéance réflexion' - c'est une des parties sympa de la création de jeu.

Shawn Teal (il est à hawii quand j'écris ces lignes) était également là pour cette réunion.

Nous nous sommes mis d'accord pour que ceci soit l'ébauche de base:

* L'histoire est vaguement située dans le futur, après que Dink a sauvé tout le monde dans l'histoire d'origine.

* La première moitié du jeu se déroulera sur un bateau, la seconde moitié sur 'l'île du mystère' .

* La zone du bateau utilisera plusieurs vues du bateau pour représenter les différentes sections, qui consisteront en 3 ou 4 séquences arcades que vous devrez finir correctement pour faire progresser votre 'voyage'. Les rendus 3dsmax de Still seront utilisés avant et après ces séquences arcades de même que des sons numérisés.

* Quand vous atteindrez un certain point de votre 'voyage' vous serez projeté par-dessus bord dans un énorme orage. C'est alors que vous vous échouerez seul sur l'Île, et devrez finir les quêtes de l'île, ce qui vous mènera à la fin du jeu avec vous et un robot partant dans un dirigeable. (J'expliquerai plus tard..)

Les trois séquences arcades sur le bateau seront:

* Les membres de l'équipage ont le mal de mer, vous devez nettoyer derrière eux.

* Le bateau entre dans la 'grotte du cauchemar', vous devez aider un membre de l'équipage à penser à des choses 'non-violentes' ou elles deviendront une réalité.

* Vous devez diriger une petite image de votre bateau entre des requins qui infestent les eaux.

Ce qui arrive dans la partie sur l'île:

* Dink trouve une petite ville qui est pleine de corps morts/pourrissants. Qui a fait ça?

* Il est ensuite en sûreté avec une étrangère - c'est une fille astucieuse qui aide Dink dans son parcours.

* Elle lui raconte le secret des 'yeux' de l'Île et il doit tous les détruire en 10 minutes. (la poulette est en mesure de les désactiver pendant cette durée).

* Si il échoue, on verra une animation où un dragon arrive et le mange. Vous ne pouvez pas sauvegarder votre partie pendant qu'un événement en temps limité est en cours.

* Il s'avère que le dragon est un robot. Greg le fera avec3dsmax. (il mérite que nous le remercions de ce qu'il a bien fait..)

* Après ces événements, la prochaine étape de Dink est d'ouvrir une porte spéciale qui comporte des lumières clignotantes. Trois globes vont jouer avec lui à un jeu de mémoire de type 'Simon', et après, et seulement après, il pourra entrer. (c'est ça, un puzzle)

* Pour atteindre la cachette intérieure de la grotte il devra combattre un tas de choses dans une sorte de labyrynthe et trouver des améliorations techniques en chemin pour que ce soit possible.

* Il y aura deux fins.. comment y arriver sera secret.

* Il va rôder dans la cachette de la grotte et rencontrer quelque sorte de robots amicaux (petit et mignon?) de même que des autres plus gros et 'pas aussi amicaux'. Finalement il trouvera le scientifique/bricoleur et découvrira que c'était une expérience qui a mal tourné.. le bon robot avait essayé de se faire un copain et ça avait fini par la mort du 'maître' et tutti quanti.

* Le robot les aidera à faire partir le dirigeable dans les airs, la poulette apparaîtra comme par magie et the end. ha ha, sympa.

* Dans la seconde fin vous serez sauvé par vos compagnons de route. Ouais.

Bon, à présent que nous avons le scenario et la première ébauche, nous nous devons de commencer à créer le monde!

 

PHASE 2: CRÉER LE MONDE - 3-5-98

Voici ce que j'ai fait pour démarrer avec un monde neuf:

J'ai créé un dossier nommé ISLAND dans mon dossier principal de dink. J'y ai copié le fichier hard.dat depuis dink/dink. (de cette manière je commencerais avec les montagnes et d'autres modèles de graphismes déjà correctement configuré au niveau de leur paramètre 'hardness' [ndT: cad les parties où dink est bloqué, comme un mur]). Je peux les y ajouter, du moment que j'ai inclus le hard.dat avec l'add-on, ce qu'il me semble avoir fait.

J'ai installé The Search For Milli Vanilli et y ai piqué quelques trucs pour l'utiliser comme base. (ils sont plus simples que ceux de Dink.. donc c'est plus simple à modifier)

J'ai pris:

dink.ini (où les graphismes sont chargés en mémoire)

story\start.c (requis, est exécuté quand le jeu démarre)

story\main.c (requis, est exécuté quand le jeu démarre, y sont habituellement initialisées les variables globales)

story\start-1.c (start.c l'exécute quand on clique sur start)

story\start-2.c (start.c l'exécute quand on clique sur continue)

story\start-2.c (start.c l'exécute quand on clique sur quit)

C'était plutôt facile - maintenant je vais l'exécuter par acquis de conscience.

J'ai eu une erreur de protection de windows...je ne pensais pas que cela ferait ça mais bon.. c'était sans doute une mauvaise idée pour plusieurs raisons. Un, le monde n'existe pas encore, deux, les fichiers .ini et .C font référence à des choses qui n'existent pas graphiquement.

Continuons et mettons tout le bazar en place. Tout d'abord, je vais aller dans le fichier dink.ini et enlever tous les graphismes spécifiques de Milli. Ok, j'ai réalisé que ce fichier dink.ini ne contient pas tout un tas d'objets que j'ai utilisés - (Milli a été élaboré pour fonctionner avec la version demo, et donc de nombreux objets et créatures n'étaient pas inclus)

Je prends le fichier Dink.ini du dossier dink/dink et je l'utilise comme base à la place. J'y ai jeté un coup d'œil, je n'ai vraiment pas besoin du tout de le modifier.

Maitenant je lance "dinkedit.exe -game island" depuis un fenêtre dos. (vous l'avez copié dans votre dossier dink depuis le dossier DEVELOP du CD, ok?!) [ndT: ou automatiquement installé avec la version freeware à télécharger sur Internet]

Ceci crée le fichier map.dat. J'y ai ajouté deux écrans.

Ensuite j'ai édité les fichiers .C que j'avais piqué du monde de Milli. J'ai enlevé

make_global_int("&ot_stage", 0);
make_global_int("&ot_girl", 0);
make_global_int("&mill_follow", 0);
make_global_int("&dinklogo", 0);
make_global_int("&mill_rob", 0);
make_global_int("&mill_fab", 0);
make_global_int("&mill_girl", 0);
make_global_int("&mill_party", 0);
make_global_int("&mill_won", 0);
make_global_int("&manager", 0);

dans le fichier main.c et changé

debug("Dink started. Time to save Milli Vanilli.");
[Dink a démarré. Il est temps de sauver Millli Vanilli]

en

debug("Dink started. Time to check out Mystery Island.");
[Dink a démarré. Il est temps d'enquêter sur l'Île du Mystère]

Cette ligne sera affichée dans le fichier debug.txt seulement si le programme est lancé avec le paramètre -d.

Ensuite j'ai modifié start.c.

J'ai retiré les chargements de sons spécifiques à Milli:

load_sound("LOOP.WAV", 35);
load_sound("SONG1.WAV", 36);
load_sound("SONG2.WAV", 37);
load_sound("TRUE.WAV", 38);

Playsound(38,22050,0,0,0);

J'ajouterai mes propres sons plus tard, quand je serai prêt à les y mettre.

L'écran titre de Milli a besoin d'être enlevé - j'ai changé:

&dinklogo = create_sprite(250,220, 0, 453, 1);
sp_que(&dinklogo, 800);
sp_noclip(&dinklogo, 1);

en

//&dinklogo = create_sprite(250,220, 0, 453, 1);
//sp_que(&dinklogo, 800);
//sp_noclip(&dinklogo, 1);

En le changeant en commentaire, il sera facile d'ajouter le logo de Dink quand je serai prêt.

J'ai enlevé

wait(1000);
playmidi("dance.mid");

vers la fin du fichier. Cela faisait attendre une seconde, puis jouait un fichier son midi dans Milli.

Ouah! C'était beaucoup de choses à changer.. mais je n'ai pas encore fini.

Allons dans le fichier start-1.c.

Regardez la procédure 'click' - elle est exécutée quand ils cliquent sur le bouton start.

void click ( void )
{

//lets start a new game
//[commençons un nouveau jeu]
//Say_xy("`%Creating game...", 0, 390);
//[Say_xy("`%Création d'un nouveau jeu...", 0, 390);]
wait(1);
&player_map = 401;
sp_x(1, 327);
sp_y(1, 257);
sp_base_walk(1, 70);
sp_base_attack(1, 100);
set_mode(2); //turn game on [active le jeu]
sp_dir(1, 4);
sp_brain(1, 1);
sp_que(1, 0);
sp_noclip(1, 0);
//lets give him fists to start out with
//[donnons-lui les poings pour qu'il débute le jeu avec]
add_item("item-fst",438, 1);
&cur_weapon = 1;
//arm them for him too
//[activons aussi l'arme poings pour lui]
arm_weapon();
//need this too
//[il y a aussi besoin de faire ça]
&update_status = 1;
draw_status();
spawn("begin");
kill_this_task();
}

Les changements sont plutôt simples. L'écran que j'ai crée (et où je veux que Dink commence) est le n° 67, donc nous devons changer 401 en 67.

Nous avons aussi supprimé spawn("begin"); pour l'instant, bien que nous allons probablement ajouter plus tard un truc dans le genre pour la scène d'introduction.

À présent lançons le jeu avec "dink -game island" depuis une fenêtre dos et voyons ce qui se passe!

Bon, rien ne s'est passé - un écran vide disant V1.03 en bas. Quoi!?!?!

J'ai ensuite recommencé avec le CD inséré, et ça a marché. Note pour plus tard, vérifier la présence des .bmp du CD inséré dans le dossier approprié dans la Version 1.04 et les y prendre de façon à ce que ça fonctionne avec les mondes supplémentaires (add-ons). (V1.04 sera disponible bientôt.. avant que cet add-on ne le soit)

Je pouvais marcher et tutti quanti, génial! Nous sommes maintenant prêts à commencer la création de cette aventure avec sérieux.

CRÉATION DES ÉCRANS INITIAUX 3-5-98

Le bateau - Greg a modelé un bateau de style pirate plutôt simple dans 3DSMAX2. Nous générerons tous les graphismes du bateau avec.

Il a généré un fichier .bmp du bateau avec une palette 8 bit (256 couleurs). Photoshop avait des quelques problèmes à le charger, donc il l'a généré en .jpg et nous l'avons converti à la palette de Dink à partir de là.

 

 

 

Le bateau avait l'air à chier après cette conversion de palette. J'ai envisagé d'ajouter un support 16 bit (65536 couleurs) (J'avais déjà réécris la plupart des routines pour le support 8 et 16 bit pour de nouveaux projets), mais cela n'avait aucun sens pour Dink, vu que tous les autres graphiques n'en bénéficieraient pas et que le nombre d'images par secondes en prendrait un sacré coup.

 

 

 

 

 

 

 

 

Pour enlever les bandes de la voile, vous pouvez activer 'dithering' (tramage) dans Photoshop lors de la conversion vers la palette 256 couleurs de Dink. (Vous pouvez obtenir la palette en chargeant une des images .BMP contenues dans le dossier tiles.. en fait n'importe quelle image du jeu)

Vous devriez aussi réduire la taille de l'image en restant le plus proche possible de l'image d'origine, les .bmp de Dink sont enregistrées non-compressées, donc elles prennent ÉNORMÉMENT de place même pour une image faite de rien plus que du blanc pur.

 

 

 

 

Nous avons utilisé un fond blanc et désactivé le tramage (lors du rendu dans Max.. pas durant la conversion), le blanc est la couleur transparente par défaut quand Dink charge les graphismes, donc ça ferait un bon effet sur l'eau.

Greg a modelé des bateaux en 'taille moyenne' vers huit directions, ils seront utilisés dans la séquence arcade 'évite les requins'.

Une minuscule version du bateau sera utilisée pour marquer votre progrès sur la 'carte principale'. Nous dessinerions la carte, elle n'est en fait basée sur aucun endroit réel dans le jeu, c'est juste un moyen de repérer le progrès.

Greg a suggéré que nous la générions dans max et le rendions 'coloré et réaliste' à la place d'utiliser une carte de style parchemin. Ça me paraît bien.

 

COMPRESSION DES GRAPHIQUES 5-24-98

Ok - donc j'ai fais une petite pause. :)

Nous avons décidé de conserver TOUS les sprites dans un fichier, pour en rendre l'accès plus rapide.

Faites un dossier quelque part. Nous l'avons appellé graphics.

Mettez tous les .bmp dedans.

Copiez-y FFCREATE.EXE. Assurez-vous que vous utilisez la nouvelle version incluse dans le patch V1.04.

Lancez FFCREATE.EXE.

Un fichier nommé DIR.FF sera créé.

Copiez-le dans le dossier dink\addonname\graphics, ce devra y être le SEUL fichier.

Votre dink.ini appellera les graphiques de la même manière. Par exemple, voici la partie que nous avons ajoutée:

//now for MYSTERY ISLAND specific graphics:
//[maintenant pour les graphismes spécifiques à l'ÎLE DU MYSTÈRE]

load_sequence graphics\misc- 8 BLACK
load_sequence graphics\boat- 9 NOTANIM
load_sequence graphics\dbod- 844 NOTANIM
load_sequence graphics\ball- 845 NOTANIM
load_sequence graphics\door- 846

NOTE: Changer les graphiques requiert maintenant une étape supplémentaire. Après avoir changé les .BMP, vous avez besoin de lancer ffcreate.exe à nouveau et de déplacer le nouveau fichier dir.ff dans le dossier dink/addonname/graphics.

Problèmes de chronométrage.

Greg a remarqué que lors de la sauvegarde le jeu indique que l'utilisateur a joué 10 millions d'heures.


Nous l'avons résolu en ajoutant cette ligne

reset_timer();

au fichier start-1.c. (nous utilisions le DMOD Milli comme une squelette, qui n'avait pas cette fonction, les fonctions de temps ayant été ajoutées dans une version ultérieure de Dink)

Une nouvelle commande en dinkc ajoutée.

Nous avions besoin que l'image géante .BMP du bateau parte de l'écran à un moment de l'add-on. Le problème - parce que c'était une SEQ avec d'autres graphiques divers, ça JOUERAIT la séquence entière quand il bouge.

J'ai ajouté une NOUVELLE commande de script qui fait qu'une SEQ ne joue PAS n'importe quel animation, et donc je n'aurais pas à lui donner sa propre SEQ à un graphique particulier chaque fois que je voudrais le déplacer.

sp_picfreeze(&ship, 1);

 

VO sur www.rtsoft.com/dink/tut/2/tut2.htm
Traduction par Beuc - sylvain.beucler@libertysurf.fr
Dink Traduction: www.dinkfr.ovh.org

C'est ici que s'arrête ce didacticiel inachevé :(
Qui le finira?...