[TUTORIEL] [SCRIPTS] Création d'une CutScene (Cinématique)
Posté : lun. 21 févr. 2005, 00:45
Ce tutorial vient de la TeamBG, et il me semblait intéressant d'en faire une traduction, car les CutScenes rajoutent un côté plus vivant et attractif à un MOD.
Tutorial pour les scripts de CutScene
Par Max a.k.a Potencius
Traduit par Shinook
Etape 1 : Préface
Les scripts de CutScene sont ce que vous voyez, dans le jeu, lorsque vous ne pouvez plus cliquer sur l'écran. Durant ces CutScenes, les personnages et d'autres choses peuvent agir sans peur d'être interrompus par le joueur. Il s'agit juste d'une vision générale qui éclarcit certains points qui peuvent vous poser problème.
Etape 2 : Comment est construit une CutScene
La suite met en avant la forme générale que prend une CutScene. Elle inclut deux ou plus de scripts.
Le premier script aura toujours les actions suivantes, à la fin, qui introduisent la VERITABLE CutScene...
1. C'est facultatif, mais vérifiez que les actions faites par les personnages ou des créatures sont annulées avant que la coupure ne commence.
2. Cette action est ce qui empêche le joueur de cliquer sur l'écran.
3. Cette action renvoie au second script qui, en réalité, réalise les actions de la CutScene.
>> -----<<
Très bien, voyons maintenant la forme générale du second script qui réalise les actions de la CutScene.
5. Cette action ( si on peut l'appeler comme ça ) doit être écrite au début du script d'une CutScene. Elle indique qui crée les actions qui la suivent.
6. Le nom est assez révélateur. Elle permet au joueur de recliquer sur l'écran.
Etape 3 : Actions
Les actions dans les scripts d'une CutScene sont plutôt étranges ( ou logiques, quoi que vous pensiez ) dans la façon dont elles fonctionnent. J'essaierai de l'expliquer du mieux que je puisse.
D'abord, j'aborderai l'action la plus fréquemment utilisée dans les scripts de CutScene, "ActionOverride()".
ActionOverride() spécifie un acteur et dit à cet acteur de faire une action. Donc, dans une CutScene, ça doit ressembler à ça...
Maintenant, ActionOverride() peut aussi être une mauvaise chose. Par exemple, l'action "PlayDead()" est une action que vous ne voulez pas utiliser en même temps que ActionOverride(). Voici pourquoi :
Vous vous demandez donc comment régler cela ? C'est assez simple en fait. Plusieurs états du type CutSceneID() IF-THEN. Voici à quoi ça devrait ressembler...
Etape 4 : Exemple
Parfait, après en on met ça en pratique. Ici, on va faire un script de CutScene rapide qui transporte votre partie dans une zone donnée.
Ceci est ce que nous voulons comme résultat final. Nous voulons aller jusqu'à une zone, sans interruption dans le jeu. L'écran deviendra noir, et tous les joueurs seront transportés dans la zone simultanément. Si ce n'est pas simultanément, alors la CutScene ne fonctionnera pas convenablement. Une fois là, l'écran redeviendra normal.
Allez, c'est parti...
D'abord, nous avons besoin d'un état qui commencera le script de la CutScene. Il devrait être placé dans quelquechose comme un script de zone, un script de créature, ou autrechose. Tant que des bonnes conditions sont rencontrées, ça devrait marcher.
Ici, je vous autorise à prendre votre propre zone, coordonnées, et la direction dans laquelle sont tournés les personnages. Sonc trouvez une zone et prenez des coordonnées aléatoire si vous n'avez pas le temps.
10. J'expliquerai juste les paramètres de cette action.
"AREA" = Le nom du fichier de la zone jusqu'à laquelle vous voulez aller.
"" = Ca contrôle en fait quelle image s'affiche sur l'écran de chargement. Laissez-le comme ceci pour qu'elle soit aléatoire.
[x.y] = Les coordonnées X et Y du point où le personnage est envoyé dans la nouvelle carte.
FACE = C'est une valeur numérique comprise entre 0 et 15. 0 veut dire que le personnage regarde vers le sud et les autres nombres sont ordonnés dans le sens des aiguilles d'une montre.
GENERAL NOTE: Maintenant, vous remarquerez que toutes les principales actions dans sont placées dans l'état de Player1. C'est parce que Player1 est toujours dans le jeu et peu d'actions n'ont pas besoin d'être réalisées deux fois.
Tutorial pour les scripts de CutScene
Par Max a.k.a Potencius
Traduit par Shinook
Etape 1 : Préface
Les scripts de CutScene sont ce que vous voyez, dans le jeu, lorsque vous ne pouvez plus cliquer sur l'écran. Durant ces CutScenes, les personnages et d'autres choses peuvent agir sans peur d'être interrompus par le joueur. Il s'agit juste d'une vision générale qui éclarcit certains points qui peuvent vous poser problème.
Etape 2 : Comment est construit une CutScene
La suite met en avant la forme générale que prend une CutScene. Elle inclut deux ou plus de scripts.
Le premier script aura toujours les actions suivantes, à la fin, qui introduisent la VERITABLE CutScene...
Notes:IF
TriggersHere()
THEN
RESPONSE#100
ClearAllActions() // Voir Note #1
StartCutSceneMode() // Voir Note #2
StartCutScene("SCRIPT") // Voir Note #3
END
1. C'est facultatif, mais vérifiez que les actions faites par les personnages ou des créatures sont annulées avant que la coupure ne commence.
2. Cette action est ce qui empêche le joueur de cliquer sur l'écran.
3. Cette action renvoie au second script qui, en réalité, réalise les actions de la CutScene.
>> -----<<
Très bien, voyons maintenant la forme générale du second script qui réalise les actions de la CutScene.
4. Le "trigger" est toujours considéré comme "True" ( vrai en français ) dans une CutScene de toute façon, donc vous pouvez le faire simplement pour vous !IF
True() // Voir Note #4
THEN
RESPONSE#100
CutSceneID(Object) // Voir Note #5
ActionsHere()
EndCutSceneMode() // Voir Note #6
END
5. Cette action ( si on peut l'appeler comme ça ) doit être écrite au début du script d'une CutScene. Elle indique qui crée les actions qui la suivent.
6. Le nom est assez révélateur. Elle permet au joueur de recliquer sur l'écran.
Etape 3 : Actions
Les actions dans les scripts d'une CutScene sont plutôt étranges ( ou logiques, quoi que vous pensiez ) dans la façon dont elles fonctionnent. J'essaierai de l'expliquer du mieux que je puisse.
D'abord, j'aborderai l'action la plus fréquemment utilisée dans les scripts de CutScene, "ActionOverride()".
ActionOverride() spécifie un acteur et dit à cet acteur de faire une action. Donc, dans une CutScene, ça doit ressembler à ça...
7. Cette action a fait à "Player1" ( celui qui contrôle la CutScene ) demander à "TROLL" de se tuer.IF
True()
THEN
RESPONSE#100
CutSceneID(Player1)
ActionOverride("TROLL",Kill(Myself)) // Voir Note #7
EndCutSceneMode()
END
Maintenant, ActionOverride() peut aussi être une mauvaise chose. Par exemple, l'action "PlayDead()" est une action que vous ne voulez pas utiliser en même temps que ActionOverride(). Voici pourquoi :
8. Dans ce script, juste après que Player1 dise à "TROLL" de faire le mort ( PlayDead ), il devrait avancer jusqu'à "TROLL". Cependant, il ne le fait pas. Avec cetet combinaison, Player1 avancera jusqu'à "TROLL" seulement après que l'action PlayDead() soit terminée. C'est parce que Player1 doit contrôler à la fois les actions de "TROLL" et les siennes.IF
True()
THEN
RESPONSE#100
CutSceneID(Player1)
ActionOverride("TROLL",PlayDead(180)) // Voir Note #8
MoveToObject("TROLL") // Voir Note #8
END
Vous vous demandez donc comment régler cela ? C'est assez simple en fait. Plusieurs états du type CutSceneID() IF-THEN. Voici à quoi ça devrait ressembler...
Cette combinaison d'étas fait jouer le mort à "TROLL" pendant que Player1 s'avance vers lui au même moment.IF
True()
THEN
RESPONSE#100
CutSceneID("TROLL")
PlayDead(180)
EMD
IF
True()
THEN
RESPONSE#100
CutSceneID(Player1)
MoveToObject("TROLL")
END
Etape 4 : Exemple
Parfait, après en on met ça en pratique. Ici, on va faire un script de CutScene rapide qui transporte votre partie dans une zone donnée.
Ceci est ce que nous voulons comme résultat final. Nous voulons aller jusqu'à une zone, sans interruption dans le jeu. L'écran deviendra noir, et tous les joueurs seront transportés dans la zone simultanément. Si ce n'est pas simultanément, alors la CutScene ne fonctionnera pas convenablement. Une fois là, l'écran redeviendra normal.
Allez, c'est parti...
D'abord, nous avons besoin d'un état qui commencera le script de la CutScene. Il devrait être placé dans quelquechose comme un script de zone, un script de créature, ou autrechose. Tant que des bonnes conditions sont rencontrées, ça devrait marcher.
Voici le second script. Il configure le mouvement de la zone. Une fois que c'est fait, compilez-le en le nommant CUTMOVE.bcs ( pour l'exemple ).IF
Trigger()
THEN
RESPONSE#100
ClearAllActions()
StartCutSceneMode()
StartCutScene("CUTMOVE")
END
Ici, je vous autorise à prendre votre propre zone, coordonnées, et la direction dans laquelle sont tournés les personnages. Sonc trouvez une zone et prenez des coordonnées aléatoire si vous n'avez pas le temps.
9. Wait() est utilisé ici pour quelques secondes pour permettre à l'écran de devenir noir ( cette action prend environ 1 seconde, on en met donc 2, juste pour être sûr ).IF
True()
THEN
RESPONSE#100
CutSceneID(Player1)
FadeToColor([20.0],0) // L'écran devient noir
Wait(2) // Voir Note #9
LeaveAreaLUA("AREA","",[x.y],FACE) // Voir Note #10
Wait(2)
FadeFromColor([20.0],0)
Wait(2)
EndCutSceneMode()
END
IF
True()
THEN
RESPONSE#100
CutSceneID(Player2)
Wait(2)
LeaveAreaLUA("AREA","",[x.y],FACE)
END
IF
True()
THEN
RESPONSE#100
CutSceneID(Player3)
Wait(2)
LeaveAreaLUA("AREA","",[x.y],FACE)
END
IF
True()
THEN
RESPONSE#100
CutSceneID(Player4)
Wait(2)
LeaveAreaLUA("AREA","",[x.y],FACE)
END
IF
True()
THEN
RESPONSE#100
CutSceneID(Player5)
Wait(2)
LeaveAreaLUA("AREA","",[x.y],FACE)
END
IF
True()
THEN
RESPONSE#100
CutSceneID(Player6)
Wait(2)
LeaveAreaLUA("AREA","",[x.y],FACE)
END
10. J'expliquerai juste les paramètres de cette action.
"AREA" = Le nom du fichier de la zone jusqu'à laquelle vous voulez aller.
"" = Ca contrôle en fait quelle image s'affiche sur l'écran de chargement. Laissez-le comme ceci pour qu'elle soit aléatoire.
[x.y] = Les coordonnées X et Y du point où le personnage est envoyé dans la nouvelle carte.
FACE = C'est une valeur numérique comprise entre 0 et 15. 0 veut dire que le personnage regarde vers le sud et les autres nombres sont ordonnés dans le sens des aiguilles d'une montre.
GENERAL NOTE: Maintenant, vous remarquerez que toutes les principales actions dans sont placées dans l'état de Player1. C'est parce que Player1 est toujours dans le jeu et peu d'actions n'ont pas besoin d'être réalisées deux fois.