Nel Microlivello su cui si basa questo tutorial ho sistemato il Personal PDA del giocatore direttamente dentro all' info_player_start. In questo modo non comparirà quella fastidiosa finestra che ci informa dell'importanza del PDA quando lo si raccoglie da terra.
Le prime due Keys (inv_item e inv_objective) saranno settate a 1 di default. Il name può rimanere item_objective_1 oppure essere cambiato: l'importante è che sia distinto dai nomi degli obiettivi secondo e terzo.
Nella comunicazione di Obiettivo completato, oltre alle immagine potrebbe mancare anche la descrizione dell'obiettivo.
Il tutorial potrebbe finire qui, perché le operazioni per gli obiettivi 2° e 3° saranno più o meno le stesse.
Da questo punto in avanti ci divertiamo un po' con qualche esperimento; tutto qui ;)
Nb. Il messaggio che ho preparato per il PDA e che puoi scaricare dal link in fondo funzionerà solo se si trova nella sua cartella newpdas collocata dentro alla base o nel tuo fs_game folder se lavori su quel path. Inoltre, il messaggio non sarà visibile fino al prossimo riavvio del gioco.
Nb. L'uso del nome della cartella nel percorso al file del prossimo livello dipende ancora dal dove stai lavorando, se in base o in fs_game. Nel Microlivello ho inserito come livello successivo *test* (tutti quanti abbiamo una test.map da qualche parte :)
Obiettivi in Doom 3 SP
Come indicare gli obiettivi e il loro completamento nei SP levels by m4rcvs
0. Introduzione
In questo tutorial ti mostrerò come fare, nei Livelli Single Player, per notificare al giocatore qual è il prossimo obiettivo della sua missione e quando tale obietivo è stato completato. In livelli complessi, fra un obiettivo e l'altro potrebbe essere necessario dare al giocatore informazioni aggiuntive, cosa che faremo usando anche un'altra entità utile per far apparire info in sovrimpressione su schermo. Infine, poiché al completamento degli obiettivi prefissati segue il passaggio ad prossimo livello, vedremo anche come eseguire tale passaggio. Incominciamo col costruire un piccolo livello, diciamo anzi un microlivello.
1. Microlivello
Ecco il mio microlivello a forma di numero 2, con qualche luce, l'info_player_start a una estremità e un modello di ascensore sull'altra, il cui raggiungimento rappresenta il completamento della missione e anche il passaggio al livello successivo. Per risparmiare tempo puoi scaricare il mio PREFAB (solo layout: in fondo al tutorial potrai scaricare anche il file .map completo assieme agli altri files necessari).
Lavoreremo con una sequenza di tre obiettivi da completare nel contesto di una singola missione. Gli obiettivi consisteranno in: 1°) eliminazione di uno o più mostri; 2°) ritrovamento di un ferito e 3°) lo si vedrà più avanti - il nostro obiettivo primario rimane comunque raggiungere l'uscita e passare al livello successivo. La prima cosa da fare è dunque assegnare al giocatore una missione nel Livello attuale.
2. Missione principale
Assumiamo che entrando nel livello attuale il giocatore provenga dal livello precedente, avendo compiuto gli obiettivi richiesti e completato la relativa missione. Tuttavia, anche se tutti gli obiettivi sono stati completati e il giocatore ha superato il livello, nel suo PDA personale sarà ancora attiva la missione ovvero l'obiettivo primario del livello di provenienza. Se non aggiorniamo l'obiettivo principale, i vari obiettivi che andrà a compiere nel livello attuale saranno elencati sotto il titolo dell'obiettivo primario del livello precdente.
Bisognerà dunque assegnargli un nuovo obiettivo primario, vale a dire aggiornare la missione, cosa che dovrà essere fatta nel momento stesso in cui entra nel livello e che faremo infatti caricando l'antità target_primaryobjective e collegandola all'info_player_start:
- Click col destro e target > target_primaryobjective
Va su Entity e aggiungi i seguenti key/Vals:
Key: text
val: TROVA L'USCITA
Deselezionalo, seleziona l'info_player_start, poi il target_primaryobjective e collegali premendo Ctrl + K.
NB.: il Testo appena inserito non sarà visibile a schermo. La sua funzione è di aggiornare il PDA personale del Giocatore [v. il tutorial PDAs (Personal Data Assistant)]. Ok, Assegnato l'obiettivo primario o missione principale, passiamo ai tre obiettivi da compiere.
3.
Primo obiettivo
Il nostro primo obiettivo consisterà nel fare le pulizie di casa :D In altre parole, dovremo far fuori qualche ragno che si frappone tra noi e il nostro prossimo obiettivo. Nel preparare la scena, oltre al piazzamento dei nemici bisognerà anche collocare nel livello qualche arma da usare contro questi; inoltre, nel predisporre le scritte in sovraimpressione, se vogliamo anche un'immagine della scena dell'obiettivo (come negli Stock levels) dovremo aggiungere una telecamera; infine, bisognerà informare il giocatore quando l'obiettivo è stato completato. Faremo tuttto ciò in 4 semplici operazioni.
3.1
Piazzamento dei nemici
Carica una Trite (o qualunque altro nemico) e sistemala dietro al primo angolo. Con il mostrociattolo selezionato va su Entity e aggiungi la seguente coppia di Key/Vals:
Key: ambush
val: 1
Questo farà in modo che la Trite non attacchi finché non 'vede' il giocatore. Clonala per averne altre due o tre e l'ultima sistemala un po' più indietro rispetto al gruppo (vedremo sotto il perché).
3.2
Arma e assegnazione dell'obiettivo
Ora forniremo un'arma al giocatore e faremo sì che nel momento in cui la solleva da terra compaia in sovraimpressione su schermo il prossimo obiettivo: carica un'arma (io ho scelto una bella motosega: weapons > Chainsaw) e un item_objective: click col destro > item > item_objective. Con quest'iltimo selezionato va su Entity e inserisci i key/Vals come nella figura:
- Key/Vals:
- Objectivetext: il testo che assegna l'obiettivo e che comparirà in sovraimpressione accanto all'immagine del sito in cui si trova l'obiettivo. Ovviamente puoi scrivere quel che vuoi, ma sii sintetico.
- Objectivetitle: Titolo, denominazione o nome dell'obiettivo (nel mio caso "Trite");
- CamShot: nome dell'entità func_cameraview che scatterà lo screenshot dell'obiettivo. Nb: vedremo come piazzare la telecamera al punto seguente, ma in previsione di ciò assegnamo sin da ora questo Key/val (qui ho chiamato la 'func_cameraview' semplicemente camera1);
- Screenshot: nome dello screenshot che scatterà la telecamera: qui obj1 (il programma creerà automaticamente una cartella in base/maps - o nella tua cartella fs_game se stai lavorando su quel path - con lo stesso nome del tuo livello, dove archivierà l'immagine
con il valore assegnato a questa Key, vale a dire appunto il nome obj1);
3.3
Immagine dell'obiettivo
Piazziamo una telecamera sull'obiettivo, abbastamza vicina se non addosso ai nostri ragnetti per ottenere una buona inquadratura:
- click col destro: func > func_cameraview
Come detto sopra, la telecamera dovrà avere lo stesso nome assegnato al valore per CamShot nelle proprietà dell'item_objective; quindi con la func_cameraview selezionata va su 'Entity' e su Key scrivi camera1.
Adesso carica un target_null (click col destro: target > target_null) e piazzalo proprio addosso ai ragni. Infine deseleziona tutto, seleziona la telecamera, poi il target e collegali con Ctrl + K.
Muovi il target_null per aggiustare l'inquadratura come meglio credi: una volta in-game, quando il player solleverà l'arma si vedrà comparire in sovraimpressione sullo schermo questa immagine con accanto il messaggio relativo al'obiettivo:
3.4
Obiettivo completato
Ultima cosa da fare: predisporre un messaggio da visualizare a Obiettivo completato.
- Click col destro: item > item_objective_complete
Piazzalo nell'area dell'obietivo e con l'item sempre selezionato seleziona anche il ragnetto rimasto indietro, staccato dal gruppo, poi collega le due entità usando il solito Ctrl + K.
Infine va su Entity e aggiungi gli stessi key/vals dell'item_objective, a esclusione di quelli relativi alla telecamera (questa entità non supporta immagini).
4.
Secondo obiettivo
Stritolate le Trites, il secondo obiettivo consiste nel ritrovare un ferito e ricavare informazioni da ciò che avrà da dirci e dal suo PDA.
Le operazioni sono le stesse del primo obiettivo, con l'unica differenza che questa volta la notificazione dell'obiettivo da compiere non viene attivata dopo aver raccolto un arma da terra ma da un semplice trigger piazzato vicino al luogo dove giace il ferito. Ecco come ho fatto; partiamo dall'immagine:
Fuori campo, subito dopo il tratto di corrodoio dov'erano le Trites, c'è l'item_objective_2 e il trigger_once_1 che lo attiva. Nell'immagine vediamo invece la scena completa del sito del ritrovamento: dall'alto in basso l'item_objective_complete_2 collegato al trigger_once_3 piazzato nell'angolo del corridoio svoltando il quale il ferito diventa visibile; sotto, oltre alla telecamera e al suo target, abbiamo un'altro trigger_once (il n° 2), collegato al ferito: questo trigger attiverà l'animazione del carattere e anche i files audio .ogg che riprodurranno in sequenza, sincronizzate con le animazioni, le varie parti del suo racconto.
Si tratta del Consigliere Elliot Swann di Delta5, ormai messo maluccio. Per caricarlo:
click col destro > Delta5 > delta5_wounded_swann
Per farlo parlare non devi sparargli né torturarlo, basta aggiungere il Key/val: talk: 1 e una volta collegato al trigger spiffererà tutto :D
Se ricordi bene, ti dirà di prendere il suo PDA: e infatti ho preparato il suo PDA, modificato per l'occasione; cercalo e raccoglilo: ti assegnerà il terzo e ultimo obiettivo!
Infine, siccome il PDA di Swann è un po' nascosto, diamo un piccolo aiuto al player, usando un Tip, vale a dire un 'Consiglio' in sovraimpressione:
click col destro: target > target_tip
Ora aggiungi la coppia di key/vals:
Key: text_tip
val: [il tuo consiglio] Il mio è: "Il PDA di Swann è proprio dietro all'angolo ;)"
Per finire edita un trigger_once e collega il text_tip al trigger con Ctrl + K:
5.
Trezo Obiettivo
Trezo e ultimo obiettivo: darcela a gambe o assistere il povero Swann? Beh, potremmo anche sparargli... bel dilemma :p
L'ultimo nostro obiettivo è infatti ambiguo. L'item_objective è collegato al PDA di Swann, di modo che mentre quest'ultimo viene caricato, compaia in sovrimpressione l'assegnazione di un nuovo obiettivo, che però, se lanci il mio microlivello, vedrai che si trova in contrasto con quanto c'è scritto nel PDA - insomma, uno spunto di riflessione sui vari modi di mettere il giocatore di fronte a decisioni di grande spessore morale 8-) Prova a sparare a Swann e vedrai cosa succede!
Comunque sia, prima o poi dovremo uscire dal livello, per cui andiamo avanti con la costruzione dell'ascensore, che in realtà è un fake elevator. Infatti, ci serve solo per inscenare il passaggio al prossimo livello mediante un semplice click sul gui dell'ascensore.
Se non sai come costruire un'ascensore guardati il tutorial Ascensore a due fermate. Ai fini di questo tutorial, però, carica il modello su un semplice func_static anziché un func_elevator: l'ascensore non su muoverà du un millimetro. Costruisci le porte con i soliti func_doors (qui, per semplificare, non ho aggiunto la Key no_touch) e nel gui interno carica:
guis/doors/exit_outer.gui
Poi carica un target_endlevel e inserisci la coppia di key/val:
nextMap: (cartella)/Nome_del_prossimo_livello
Infine deseleziona tutto, seleziona l'ascensore, poi il target_endlevel e collegali con il solito Ctrl + K.
Ok, siamo a capolinea. Il microlivello è completo, con i suoi tre obiettivi e l'ascensore immobile pronta a traghettarci nel prossimo livello. Per vedere da vicino come sono state fatte le cose, compila e lancia il mio objectives.map, che puoi scaricare in fondo al tutorial.
6.
Files Download
Scarica il pak zippato contenente:
  - Il file objectives.map (32.5 Kb)
  - Il prefab del layout objectives.pfb (23.4 Kb)
  - La cartella newpads contenente:
  - il file cons_swann.pda (774 bytes)
  - il readme.txt
Nel Readme.txt contenuto nel pak troverai istruzioni dettagliata sulla collocazione dei vari files per far funzionare correttamente il microlivello.
Ok questo è quanto. Se qualcosa non ti è chiaro, non esitare a postare le tue domande nel nostro Forum.
Obiettivi in Doom 3 SP Tutorial by m4rcVs for HG&LD
- 29 Giugno 2007 -