Affichage des résultats 1 à 5 sur 5

Discussion: [TUTORIEL] [SCRIPTS] Création d'une CutScene (Cinématique)

  1. #1
    Date d'inscription
    May 2004
    Localisation
    Angers
    Messages
    1 102

    Flèche [TUTORIEL] [SCRIPTS] Création d'une CutScene (Cinématique)

    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...

    IF
    TriggersHere()
    THEN
    RESPONSE#100
    ClearAllActions() // Voir Note #1
    StartCutSceneMode() // Voir Note #2
    StartCutScene("SCRIPT") // Voir Note #3
    END
    Notes:

    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.

    IF
    True() // Voir Note #4
    THEN
    RESPONSE#100
    CutSceneID(Object) // Voir Note #5
    ActionsHere()
    EndCutSceneMode() // Voir Note #6
    END
    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 !
    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...

    IF
    True()
    THEN
    RESPONSE#100
    CutSceneID(Player1)
    ActionOverride("TROLL",Kill(Myself)) // Voir Note #7
    EndCutSceneMode()
    END
    7. Cette action a fait à "Player1" ( celui qui contrôle la CutScene ) demander à "TROLL" de se tuer.

    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 :

    IF
    True()
    THEN
    RESPONSE#100
    CutSceneID(Player1)
    ActionOverride("TROLL",PlayDead(180)) // Voir Note #8
    MoveToObject("TROLL") // Voir Note #8
    END
    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.

    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...

    IF
    True()
    THEN
    RESPONSE#100
    CutSceneID("TROLL")
    PlayDead(180)
    EMD

    IF
    True()
    THEN
    RESPONSE#100
    CutSceneID(Player1)
    MoveToObject("TROLL")
    END
    Cette combinaison d'étas fait jouer le mort à "TROLL" pendant que Player1 s'avance vers lui au même moment.

    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.

    IF
    Trigger()
    THEN
    RESPONSE#100
    ClearAllActions()
    StartCutSceneMode()
    StartCutScene("CUTMOVE")
    END
    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 ).
    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.

    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
    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 ).
    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.
    Dernière modification par Freddy_Gwendo ; 20/03/2016 à 13h35. Motif: Modification du titre de la discussion


  2. #2
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages
    41
    Nouvelle question de ma part.

    Je suis devant une tentative de réalisation de petite cutscene. Le PJ entre dans la piece, on passe en cutscene pour faire apparaitre un NPC via un sort d'invocation, et pouf c'est tout.
    J'ai donc modifier l'Area avec ceci :

    Code:
    IF
    Global("CKlareexists","AR0710",0)
    THEN
    RESPONSE #100
    SetGlobal("CKlareexists","AR0710",1)
    ClearAllActions() 
    StartCutSceneMode() 
    StartCutScene("CKcut1")
    END
    Et ensuite creer un .baf nommé CKcut1 contenant ceci :
    Code:
    IF
       True()
    THEN
       RESPONSE #100
       CreateVisualEffect("SPSUMMON",[448.184]) 
       Wait(1)
       CreateCreature("CKlare",[448.184],1)
       CutSceneId("CKlare")
       DisplayStringWait(Myself,~1~) 
       Wait(2)
       DisplayStringWait(Myself,~2~) 
       Wait(2)
       DisplayStringWait(Myself,~3~) 
       EndCutSceneMode()
    END
    Donc je compile je lance et...
    CHARNAME rentre dans la salle, le mod cutscene se declanche.
    Et rien, il attend. Le NPC et le sort n'apparaissent meme pas, la cutscene reste active et le bug est bouclé.

    Pourtant m'semblait avoir suivi le tuto en detail...
    Dernière modification par Klare ; 16/03/2013 à 11h17.

  3. #3
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 400
    Tu n'as pas commencé ton block par CutSceneId("CKlare") et au lieu de ça tu as mis d'autres instructions avant. C'est pourtant le cas dans tous les exemples du tutorial et il est bien indiqué que c'est obligatoire. Je ne serais pas surpris que ce soit la cause du problème puisque tu as cherché à faire des actions sans avoir défini qui était l'acteur de la scène.
    Ce qui signifie également que l'acteur doit exister et ne peut pas être un créé au cours de la scène. Donc il te faudra sans doute choisir Player1 pour CutSceneId et recourir à des ActionOverride si tu veux faire agir un personnage créé dans le script.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  4. #4
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages
    41
    C'etait bien le souci

    J'avais bien suivi l'exemple, mais j'ai finalement decalé l'ID pour permettre de creer le PNJ qui devait etre l'acteur de base. sinon je n'avais pas d'acteur.

    Profiter de CHARNAME m'avait même pas effleuré l'esprit.

    Merci Isaya.

  5. #5
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages
    3 360
    Juste une demande précision.

    J'ai lancé cette cutscene via une hotkey :

    Code:
    IF
    	HotKey(D)
    THEN
    	RESPONSE #100
    		ClearAllActions()
    		SetInterrupt(FALSE)
    		SmallWait(5)
    		StartCutSceneMode()
    		CutSceneId(Player1)
    		CreateVisualEffectObject("SPPORTAL",Player1)
    		CreateVisualEffectObject("SPPORTAL",Player2)
    		CreateVisualEffectObject("SPPORTAL",Player3)
    		CreateVisualEffectObject("SPPORTAL",Player4)
    		CreateVisualEffectObject("SPPORTAL",Player5)
    		CreateVisualEffectObject("SPPORTAL",Player6)
    		Wait(2)
    		FadeToColor([30.0],0)
    		Wait(1)
    		EndCutSceneMode()
    		TextScreen("GWChap01")
    		SmallWait(1)
    		StartCutSceneMode()
    		CutSceneId(Player1)
    		LeaveAreaLUAPanicEntry("GW0000","Entry1",[0.0],4)
    		LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4)
    		ActionOverride(Player2,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
    		ActionOverride(Player3,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
    		ActionOverride(Player4,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
    		ActionOverride(Player5,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
    		ActionOverride(Player6,LeaveAreaLUAEntry("GW0000","Entry1",[0.0],4))
    		Wait(1)
    		MultiPlayerSync()
    		SetInterrupt(TRUE)
    		FadeFromColor([30.0],0)
    		Wait(1)
    		EndCutSceneMode()
    END
    Le but du jeu étant d'insérer la commande TextScreen à l'intérieur de la Cutscene.

    Problème : à la fin de la cutscene, les cercles de sélection des persos disparaissaient et tous les scripts de région de la carte GW0000 étaient désactivés (ne se lançaient pas).


    Puis, miracle, au bout d'une heure de plusieurs désinstallations-réinstallations du mod (sans aucune modif.), tout fonctionne à merveille.


    Quelqu'un aurait-il une idée de ce qui a bien pu se passer, ou de la ligne qui "poserait" problème ?
    CARPE DIEM...

    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. [TUTORIEL] Création d'Objets avec DLTCEP et Installation avec WeiDU
    Par Mathrim Cauthon dans le forum Tutoriels et Guides
    Réponses: 91
    Dernier message: 27/10/2014, 22h58
  2. [BGT] Problème de cutscene à Spellhold...
    Par paolo dans le forum Méga-mods : Big Picture, The Darkest Day, Shadow Over Soubar, Tortured Souls, Check The Bodies, Nev
    Réponses: 2
    Dernier message: 16/06/2009, 15h52
  3. Réponses: 2
    Dernier message: 14/12/2008, 21h53
  4. [TUTORIEL] Création de Magasins
    Par Mathrim Cauthon dans le forum Tutoriels et Guides
    Réponses: 22
    Dernier message: 01/03/2005, 21h56

Les tags pour cette discussion

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239