Gaming Zone Communautes Battlefield PiTrust Communautes Mods
SommairemapstutorielsforumtétéchargementsdiversLes liensLivre d'Or
Créer un écran d'introduction. (CODUO et COD)


Tutorial Adding an Intro Screen to Your SP Map by Bodger 2
Traduit et adapté par Tropheus

Au cours de ce Tutorial vous allez apprendre comment créer un merveilleux écran d'introduction pour CODUO, afin de plonger votre jouer directement dans l'action.

Voici ce que allez obtenir.

L'action se déroule en 2 parties, une première dans votre fichier .gsc et la suivnate dansun fichier .str nous allons créer.

La map de base se nomme ecran_bis.

1/ Au niveau du fichier gsc. (ecran_bis.gsc)

Voici le script que vous allez mettre dans le gsc principal au nom de votre map.

main()
{
maps\_load::main();
precacheshader("black");
level.player takeallweapons();
level.player giveWeapon("m1carbine");

thread intro_screen();
}

intro_screen()
{
precacheString(&"ECRAN_BIS_PLACE");
precacheString(&"ECRAN_BIS_DATE");
precacheString(&"ECRAN_BIS_TIME");
maps\_introscreen_gmi::introscreen(&"ECRAN_BIS_PLACE", &"ECRAN_BIS_DATE", &"ECRAN_BIS_TIME");
return;
}

Bon je vais tenter des explications.

main()
{
maps\_load::main();// Comme d'habitude charge la partie main du fichier _load.
precacheshader("black");//ici on precache le shader de la texture "black".
level.player takeallweapons();
level.player giveWeapon("m1carbine");

thread intro_screen(); //on envoie le jeu exécuter le thread intro_screen.
}

intro_screen()// voici le dit thread intro screen.
{
precacheString(&"ECRAN_BIS_PLACE");//on précahe le texte ayant comme référence PLACE dans le fichier ECRAN_BIS
precacheString(&"ECRAN_BIS_DATE");// idem pour DATE
precacheString(&"ECRAN_BIS_TIME");// idem pour TIME
maps\_introscreen_gmi::introscreen(&"ECRAN_BIS_PLACE", &"ECRAN_BIS_DATE", &"ECRAN_BIS_TIME");//ici on active le thread "introscreen" du fichier" _introscreen_gmi" qui se trouve dans le dossier "maps". Le tout avec les références précachées juste au-dessus.
return;
}

Attention
Bodger2 utilise une ligne supplémentaire dans la partie main.
level waittill ("finished intro screen");
juste après
thread intro_screen;

Ce qui donne ceci.
thread intro_screen;
level waittill ("finished intro screen");
}

Personnellement je ne vois pas l'intérêt de cette ligne car ça marche très bien sans elle. A vous de voir si vous voulez l'utiliser ou pas.

Attention Variante pour COD.
maps\_introscreen::introscreen(&"ECRAN_BIS_PLACE", &"ECRAN_BIS_DATE", &"ECRAN_BIS_TIME");

Vous allez remplacer _introscreen_gmi par le fichier qui gère la chose dans COD c'est à dire _introscreen.

2/ Le fichier str. (ecran_bis.str)

Le fichier str n'est ni plus ni moins qu'un fichier texte avec l'extension .str.
Donc ouvrez votre éditeur de texte notepad ou textpad et tapez ceci.
Je ne sais pas si les 3 premières lignes sont nécessaires mais elles sont présentes sur les fichiers du jeu alors je vous les ai remises ici.
La ligne ENDMARKER est quant-à elle absolument nécessaire sous peine d'erreur.

VERSION "1"
CONFIG "C:\cod\source_data\string_resources\StringEd.cfg"
FILENOTES ""

REFERENCE           PLACE
LANG_FRENCH       "Chez moi."

REFERENCE           DATE
LANG_FRENCH        "24 avril 2005"

REFERENCE          TIME
LANG_FRENCH      "1 h 02"

ENDMARKER

Enregistrez votre fichier avec le nom de votre map mais avec l'extension .str.

Mettez le dans le dossier : localizedstrings/french.

Vous avez donc dans votre pk3 ceci.
un dossier maps avec les fichiers .bsp et .gsc.
un dossier localizedstrings avec un dossier french dans lequel se trouve votre fichier .str.

Voila c'est tout.

3/ variante.

Comme nous utilisons le fichier _introscreen_gmi pour CODUO ou _introscreen pour COD nous n'avons que 3 lignes de texte disponibles. (PLACE, DATE, TIME).

Si l'on veut en ajouter une quatrième ou n'en avoir qu'une seule, voici comment faire.


a) Explications du fichier _introscreen_gmi.
Vous allez trouver le fichier _introscreen_gmi et n'en prendre que la partie introscreen je vais tenter de vous l'expliquer pour pouvoir ensuite la modifier.

introscreen(string1, string2, string3)//nom du thread
{
//affichage de l'écran noir.

level.introblack = newHudElem();
level.introblack.x = 0;//coordonnée X
level.introblack.y = 0;//coordonnée Y
level.introblack setShader("black", 640, 480);

if(!(level.script == "redsquare"))// si la maps n'est pas "redsquare"
level.player freezeControls(true);//on bloque les commandes du joueur.

wait 0.1;

//Affichage de la première ligne de texte. (PLACE)
level.introstring1 = newHudElem();
level.introstring1.x = 320;//coordonnée X du texte.
level.introstring1.y = 260;//coordonnée Y du texte.
level.introstring1.alignX = "center";//alignement du texte sur X
level.introstring1.alignY = "middle";//alignement du texte sur Y
level.introstring1.sort = 1; // force to draw after the background//on oblige le texte à s'afficher
level.introstring1.fontScale = 1.75;//taille de la police
level.introstring1 setText(string1);//affichage de la ligne.
level.introstring1.alpha = 0;
level.introstring1 fadeOverTime(1.2);
level.introstring1.alpha = 1;

//Affichage de la seconde ligne de texte. (DATE)
level.introstring2 = newHudElem();
level.introstring2.x = 320;
level.introstring2.y = 290;
level.introstring2.alignX = "center";
level.introstring2.alignY = "middle";
level.introstring2.sort = 1; // force to draw after the background
level.introstring2.fontScale = 1.75;
level.introstring2 setText(string2);
level.introstring2.alpha = 0;
level.introstring2 fadeOverTime(1.2);
level.introstring2.alpha = 1;

//Affichage de la première ligne de texte. (TIME)
level.introstring3 = newHudElem();
level.introstring3.x = 320;
level.introstring3.y = 320;
level.introstring3.alignX = "center";
level.introstring3.alignY = "middle";
level.introstring3.sort = 1; // force to draw after the background
level.introstring3.fontScale = 1.75;
level.introstring3 setText(string3);
level.introstring3.alpha = 0;
level.introstring3 fadeOverTime(1.2);
level.introstring3.alpha = 1;

wait 1.2;

if(level.script == "stalingrad")
wait (2.0);

level notify ("finished final intro screen fadein");

wait 1;
// Fade out black//disparition de l'écran noir.
level.introblack fadeOverTime(1.5);
level.introblack.alpha = 0;

level notify ("starting final intro screen fadeout");

// Restore player controls part way through the fade in
wait 0.5;
level.player freezeControls(false);//le joueur retrouve ses commandes.
level notify ("finished intro screen"); // Do final notify when player controls have been restored

// Fade out text//disparition du texte
level.introstring1 fadeOverTime(1.5);
level.introstring1.alpha = 0;
level.introstring2 fadeOverTime(1.5);
level.introstring2.alpha = 0;
level.introstring3 fadeOverTime(1.5);
level.introstring3.alpha = 0;

wait 1.5;
//destruction de l'écran noir et des lignes de texte. (Je ne sais pas pourquoi il faut les détruire.)

level.introblack destroy();
level.introstring1 destroy();
level.introstring2 destroy();
level.introstring3 destroy();
}

J'imagine déjà vos yeux ébahis se demandant : "mais qu'est ce qui lui ??????" Aller on va rajouter une ligne à votre écran.

b) Ajout d'une ligne au-dessus. (map appelée ecran_plus1)

Vous allez copier le thread ci-dessus, et le mettre dans un nouveau fichier gsc qu'on va appeler intro_modif.gsc.
Vous allez mettre ce fichier gsc avec le fichier bsp et le gsc de la map.

Je mets en bleu les modifications apportées aux différents fichiers.

Fichier intro_modif.gsc

introscreen(string1, string2, string3, string4)
{
level.introblack = newHudElem();
level.introblack.x = 0;
level.introblack.y = 0;
level.introblack setShader("black", 640, 480);

if(!(level.script == "redsquare"))
level.player freezeControls(true);

wait 0.1;

level.introstring1 = newHudElem();
level.introstring1.x = 320;
level.introstring1.y = 260;
level.introstring1.alignX = "center";
level.introstring1.alignY = "middle";
level.introstring1.sort = 1; // force to draw after the background
level.introstring1.fontScale = 1.75;
level.introstring1 setText(string1);
level.introstring1.alpha = 0;
level.introstring1 fadeOverTime(1.2);
level.introstring1.alpha = 1;

level.introstring2 = newHudElem();
level.introstring2.x = 320;
level.introstring2.y = 290;
level.introstring2.alignX = "center";
level.introstring2.alignY = "middle";
level.introstring2.sort = 1; // force to draw after the background
level.introstring2.fontScale = 1.75;
level.introstring2 setText(string2);
level.introstring2.alpha = 0;
level.introstring2 fadeOverTime(1.2);
level.introstring2.alpha = 1;

level.introstring3 = newHudElem();
level.introstring3.x = 320;
level.introstring3.y = 320;
level.introstring3.alignX = "center";
level.introstring3.alignY = "middle";
level.introstring3.sort = 1; // force to draw after the background
level.introstring3.fontScale = 1.75;
level.introstring3 setText(string3);
level.introstring3.alpha = 0;
level.introstring3 fadeOverTime(1.2);
level.introstring3.alpha = 1;

level.introstring4 = newHudElem();
level.introstring4.x = 320;
level.introstring4.y = 350;//mettre ici une nouvelle coordonnée
level.introstring4.alignX = "center";
level.introstring4.alignY = "middle";
level.introstring4.sort = 1; // force to draw after the background
level.introstring4.fontScale = 1.75;
level.introstring4 setText(string4);
level.introstring4.alpha = 0;
level.introstring4 fadeOverTime(1.2);
level.introstring4.alpha = 1;

wait 1.2;

if(level.script == "stalingrad")
wait (2.0);

level notify ("finished final intro screen fadein");

wait 1;
// Fade out black
level.introblack fadeOverTime(1.5);
level.introblack.alpha = 0;

level notify ("starting final intro screen fadeout");

// Restore player controls part way through the fade in
wait 0.5;
level.player freezeControls(false);
level notify ("finished intro screen"); // Do final notify when player controls have been restored

// Fade out text
level.introstring1 fadeOverTime(1.5);
level.introstring1.alpha = 0;
level.introstring2 fadeOverTime(1.5);
level.introstring2.alpha = 0;
level.introstring3 fadeOverTime(1.5);
level.introstring3.alpha = 0;
level.introstring4 fadeOverTime(1.5);
level.introstring4.alpha = 0;

wait 1.5;
level.introblack destroy();
level.introstring1 destroy();
level.introstring2 destroy();
level.introstring3 destroy();
level.introstring4 destroy();
}

Fichier ecran_plus1.gsc

main()
{
maps\_load::main();
precacheshader("black");
level.player takeallweapons();
level.player giveWeapon("m1carbine");

thread intro_screen();
}

intro_screen()
{
precacheString(&"ECRAN_PLUS1_AUTEUR");
precacheString(&"ECRAN_PLUS1_PLACE");
precacheString(&"ECRAN_PLUS1_DATE");
precacheString(&"ECRAN_PLUS1_TIME");
maps\intro_modif::introscreen(&"ECRAN_PLUS1_AUTEUR", &"ECRAN_PLUS1_PLACE", &"ECRAN_PLUS1_DATE", &"ECRAN_PLUS1_TIME");//l'ordre semble jouer un rôle important.
return;
}

Fichier ecran_plus1.str


VERSION "1"
CONFIG "C:\cod\source_data\string_resources\StringEd.cfg"
FILENOTES ""

REFERENCE           AUTEUR
LANG_FRENCH       "TROPHEUS"

REFERENCE           PLACE
LANG_FRENCH       "Chez moi."

REFERENCE           DATE
LANG_FRENCH        "24 avril 2005"

REFERENCE          TIME
LANG_FRENCH      "1 h 02"

ENDMARKER

Voila pour l'ajout d'une ligne. Passons maintenant au retrait de ligne.

c) Retrait de ligne (map appelée ecran_que1)

De la même manière que précedemment il faut créer un nouveau fichier introscreen. Ici il est appelé intro_que1.gsc.

Fichier intro_que1.gsc

introscreen(string1)
{
level.introblack = newHudElem();
level.introblack.x = 0;
level.introblack.y = 0;
level.introblack setShader("black", 640, 480);

if(!(level.script == "redsquare"))
level.player freezeControls(true);

wait 0.1;

level.introstring1 = newHudElem();
level.introstring1.x = 320;
level.introstring1.y = 260;
level.introstring1.alignX = "center";
level.introstring1.alignY = "middle";
level.introstring1.sort = 1; // force to draw after the background
level.introstring1.fontScale = 1.75;
level.introstring1 setText(string1);
level.introstring1.alpha = 0;
level.introstring1 fadeOverTime(1.2);
level.introstring1.alpha = 1;


wait 1.2;

if(level.script == "stalingrad")
wait (2.0);

level notify ("finished final intro screen fadein");

wait 1;
// Fade out black
level.introblack fadeOverTime(1.5);
level.introblack.alpha = 0;

level notify ("starting final intro screen fadeout");

// Restore player controls part way through the fade in
wait 0.5;
level.player freezeControls(false);
level notify ("finished intro screen"); // Do final notify when player controls have been restored

// Fade out text
level.introstring1 fadeOverTime(1.5);
level.introstring1.alpha = 0;

wait 1.5;
level.introblack destroy();
level.introstring1 destroy();
}

Fichier ecran_que1.gsc

main()
{
maps\_load::main();
precacheshader("black");
level.player takeallweapons();
level.player giveWeapon("m1carbine");

thread intro_screen();

}

intro_screen()
{
precacheString(&"ECRAN_QUE1_AUTEUR");
maps\intro_que1::introscreen(&"ECRAN_QUE1_AUTEUR");
return;
}

Fichier ecran_que1.str

VERSION "1"
CONFIG "C:\cod\source_data\string_resources\StringEd.cfg"
FILENOTES ""

REFERENCE           AUTEUR
LANG_FRENCH       "TROPHEUS pour vous servir!"

ENDMARKER

Voila qui est fait il ne vous reste plus qu'à vous entrainer.

Bon mapping et bon script.

Télécharger l'exemple.

Descriptif de l'archive.
POUR CODUO SEULEMENT
Un fichier pk3 à mettre dans le dossier uo
3 fichiers .bat à mettre dans le répertoire Call of Duty.

Double-cliquez sur 1 fichier .bat pour lancer la map désirée.

Par Tropheus - 2005 Copyright © by CaskAmi Prod. Tout droit réservé.

 

Page générée en

Design / concept Amigos3D - Copyright ©2006 CaskAmi Prod. Tous droits réservés.
Caskami.com est hébergé; par Eliott-Ness.