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.