Edició 101 : Música, línies de diàleg, converses... i coses semblants

Copess

Ja en porto tres-cents
Membre del personal
Personal Arma
8 Maig 2017
321
39
28
#1
Bones! Tornem a la següent classe de'n Copess de "Com tunejar una missió perquè sembli millor del que realment és"! Avui apendrem com posar música que soni per tots, música que soni des d'un punt (aka ràdio/persona) i com fer diàlegs.

Feina previa
Abans de posar-nos a gravar la nostra preciosa, preciosa veu, haurem de modificar un xic el nostre "description.ext". En concret haurem d'afegir aquesta línia de codi

Codi:
class CfgSounds
{
  sounds[] = {};

  class sound1
  {
    name = "In music";
    sound[] = {"sounds\in.ogg", db+15, 1.0};
    titles[] = {};
  };

class sound5
  {
    name = "Conversa4";
    sound[] = {"sounds\conv4.ogg", db+5, 1.0};
    titles[] = {};
  };
};

Que coi vol dir això? Fàcil! Estem dient que, l'arxiu dins la carpeta "sounds" (que està dins la carpeta de la missió) amb el nom "in.ogg" i "conv4.ogg" són arxius de veu que l'arma ha d'entendre i poder reproduïr dins del joc (potser ben bé no és això, però així ens entenem).

Apunt obvi, hem de crear una carpeta que es digui "sounds" (o el nom que més ràbia us fagi).

Música 3d des d'un punt/persona parlant
Comencem per un exemple fàcil, fem que una radio "emeti so", per exemple, una cançó. Primer baixarem una canço de youtube (via aquesta web) o la graveu amb l'audacity. Aquest programa serà necessari per poder convertir arxius de .mp3 a .ogg, segur que hi ha altres opcions, però m'agrada el programa perquè és open source/gratuït i a més et permet editar el so, fade in, fade out..., retallar, control+c control+v, separar... i altres efectes útils.

Un cop tenim l'arxiu de so en .ogg i dins de la carpeta sounds, ja tenim la feina casi feta. Que cal fer ara? Doncs dins de la ràdio (o un telèfon, o una tablet, l'objecte que més ràbia us fagi) hi poseu això dins de l'init

"from say3D sound" --> Com funciona? Fàcil! Si volem que una radio, sense nom (variable name) soni la canço que hem anomenat "in.ogg" caldrà posar-hi el següent
this say3D "sound1" --> El "this" significa el propi objecte, i el sound1 veiem que és el nom que posa aqui al codi d'adalt, on posa class sound1. Si modifiqueu el codi, o afegiu línies de codi per posar més música/veu, caldrà que aneu anomenant els diferents "class" amb noms fàcils que pogueu posar a l'init de la radio.

Altre cas, voleu que un soldat, quan hi passeu per davant, us digui algo amb veu + us escrigui el que diu en el xat global (per si no ho pots escoltar bé). Doncs molt fàcil. Primer posem un soldat de la IA, o una radio, o qualsevol cosa que vulguis que emeti so (suposo que, a no ser que sigui una missió surrealista, un microones no pot parlar). Doncs al soldat li posem com a "variable name", per exemple, pollastre. Després posem un trigger (que s'activi per radio alpha, o per presencia "Any player", o el que us vingui de gust) i dins de l'init hi posem això.

pollastre say3D "sound5";
pollastre globalChat "Hola, em dic Copasso";

Que passarà? Doncs que el pollastre reproduïrà en 3d (si t'allunyes no es sent tant fort, inclús hi ha efecte Doppler). I a més de dir la frase que tu li hagis assignat (en l'exemple sound5), també dirà per el xat global "Hola, em dic Copasso".

Pd. que sortirà al xat? sortirà la seva facció seguit del text. Hi ha maneres de que surti un nom inventat, amb coloraines... però no he mirat com es fa, i ja seria massa potser.

Diàleg
Això més que un apartat diferent, és una ampliació de l'anterior. Que és? Fàcil! Un pollastre/IA, farem que li apareixi un "addaction"/interacció que posi, per exemple "Preguntar que sap dels furries" i aquest ens contestarà, frase per frase, fent pauses, i ens anirà "transcrivint" tot el que diu al xat, per si algú no ho sent.

this addAction["Preguntar que és un furri", {_this select 0 globalChat 'Els furries són criatures maravelloses''; this say3D "sound2"; sleep 5; _this select 0 globalChat 'son suaus i carinyosos'; this say3D "sound6"; }];

Que posa aqui, i que coi vol dir cada cosa? Easy. El "addAction" significa que afegim una interacció que farà que passi quelcom, i que ens surti el text "Preguntar que és un furri". Quan el jugador activi el addAction, el pollastre ens dirà per el xat (globalChat) la frase, juntament amb la línia de veu que hem anomenat "sound2". Aqui hi ha una part important, el "sleep 5" significa que s'esperarà 5 segons a que seguir amb la línia de codi seguent, que és la seguent frase. Que s'ha de fer? Doncs calcular més o menys que dura la línia de veu, aka. si la frase en veu dura 8 segons, posarem "sleep 8". Així cada cop que la frase s'acaba de dir/de sonar, segueix la seguent, donant un efecte de conversa fluida i real.

Diàleg però que tothom l'escolta
Petit apunt, si volem que, després d'atravessar un trigger, ens vinguin enemics (mitjançant la funció skip waypoint del propi trigger) i que un equip de recon ens adverteixi per radio, podem posar això a "on activation"

playSound "sound9";
recon globalChat "Aqui Strovorosky. S'estan aproximant enemics des del nord *beu d'una ampolla*, buf, el vodka aquest no val per res";

I encara us diré més, aquesta última línia de codi es podria afegir a l'anterior post d'edició perquè, quan cridem l'artilleria, soni la veu que ens interessa. Si fos aquest el cas, caldria afegir un "Sleep 20;" (sense cometes) entre el codi d'adalt i el codi del script de l'artilleria a mansalva.

Conclusions
Que hem aconseguit amb tot això? Doncs fer d'una missió freda i gens immersiva, a tenir una missió on un soldat de base ens explica el briefing, o un civil que ens dona informació, o inclús un missatge de radio d'un equip de reconeixement que ens avisa als aliats a terra que s'aproxima un convoy enemic! Potser pensareu que porta molta feina, però un cop ho fas per primera vegada, tot es torna molt modular, i només de canviar l'arxiu de veu ja pots fer altre cop mil converses.

Bona sort, i bona edició!