All credis to Human Head & 3D Realms PREY Wiki
Traduzione di Vision83
DOWNLOAD Files [ S O O N ]
Gravity Volumes
Come costruire Volumi a gravità variabile
0. Introduzione
[Questo tutorial è la traduzione in lingua italiana fatta da Vision83 del Gravity Volumes
in lingua inglese che puoi trovare alla PREY Wiki,
ottima risorsa per Level designers e Modders non solo per PREY ma anche per molti altri giochi
(v. la nostra area Tutorials), ai cui autori va tutta la nostra riconoscenza e soprattutto i credits per i contenuti
messi a disposizione della comunità (per controllare eventuali aggiornamenti v. la pagina Related changes della Wiki).]
1. Configurare un semplice gravity volume
[N.d.T] Se avete giocato Prey anche solo per 5 minuti, vi sarete accorti subito del fattore Gravità Alterata che caratterizza
questo gioco. Creare situazioni simili nell’editor sembra un lavoro complicatissimo, ma come vedremo tra poco, è invece
decisamente semplice.]
1.1 Il Volume Create un Brush che definisca l’estensione del vostro volume:
- tasto destro sul brush appena creato e selezionate
volume_gravity dal menù a popup, come mostrato nella figura a destra (Scaricate la mappa grav1.map per i vostri test.)*
(*) Al momento della traduzione di questo tutorial i links
alle Test Maps non erano attivi, per cui non è stato possibile linkarli per il download. In sostituzione stiamo
preparando noi stessi dei files analoghi, che potrai scaricare in fondo al tutorial, caricare nell'editor e compilarli per
osservare da vicino come sono stati costruiti i diversi tipi di Gravity volumes - N.d.Admin]
Selezionate l'entità volume_gravity appena creata ed immettete un valore per gravity in modo da definire la direzione del campo
gravitazionale all’interno del volume. Questa è una chiave vettoriale e definirà la forza di gravità all’interno delle
coordinate X, Y e Z. La gravità standard del gioco è 0, 0, -1066. Come potete osservare, alla voce “Z” è stato assegnato
un valore negativo, ad indicare che in quel punto la forza deve “attirare”, mentre assegnando un valore positivo,
la forza di gravità andrà a “respingere”.
Fig.2: gravity_volume standard con gravità invertita
1.2 Cambiare lo status di un gravity volume
Lo status di un gravity volume può essere alterato in due modi. Gli attributi target_enable e target_disable
possono essere utilizzati per attivare o disattivare gli effetti di un volume. Controlli più puntuali sono disponibili all’interno degli script del livello.
Nell’esempio proposto, utilizzeremo un console_projection_eye per poter di alterare l'orientamento della gravità all'interno del volume, ma qualunque
altro sistema di interruttori standard otterrà lo steso risultato (Scaricate il file grav2.map per i vostri test). [v. sopra (N.d.Admin)]
Fig.3: usate la console per abilitare/disabilitare un gravity volume
Nota: esiste una chiave non documentata disponibile per il gravity_volume. La chiave “enabled” può infatti
essere settata su “0” per evitare che il volume sia attivo al caricamento della mappa. Controlli avanzati sono disponibili nel campo di chiamata dello di script:
$entityname.setGravity( vector );
1.3 Shoot switches Usare gli Shoot Switches [gli interruttori a
cui sparare per modificare la gravità N.d.T], gestiti dall'entità trigger_gravityswitch, è davvero semplice.
Posizionate un trigger_gravityswitch con un orientamento che rifletta la direzione della gravità che vorrete una
volta attivato. Ponete come target il vostro gravity_volume, e dei dettagli se ne occuperà l’editor.
Nella mappa d’esempio grav3.map [v. sopra - N.d.Admin] quattro switch sono posizionate in 4
lati del gravity_volume.
Tutto ciò che il mapper deve fare è assicurarsi che tutti gli switch abbiano come target
il gravity_volume.
Fig.4: Shoot switches con un gravity volume come target
C’è anche la possibilità di modificare manualmente questo comportamento, assegnando una chiave vector allo switch.
2. Radial gravity [Gravità radiale]
Per i planetoidi useremo una entità diversa, chiamata volume_gravityinward. L’illustrazione sotto
(presa dal file grav4.map) mostra un planetoide semplice, che usa un volume_gravityinward con i settaggi di default.
Non occorre nessuna chiave ulteriore, a parte quelle già viste precedentemente, ma è possibile regolare nel dettaglio il comportamento dell'entità
servendosi delle chiavi descritte nell'appendice in fondo al tutorial.
Fig.5: Vista laterale di un semplice radial gravity volume che permette al giocatore
di camminare attorno ad una sfera (pianeta)
3. Outward gravity
Anche se nel gioco questo tipo di gravità non viene mai utilizzata, è possibile usare un valore negativo in un radial
gravity volume. Nella mappa d’esempio grav5.map [v. sopra], le chiavi della figura a destra sono
utilizzate per consentire al giocatore di camminare all’interno di uno spazio sferico concavo.
Fig.6: usando un fattore negativo [qui -0.5], il giocatore può camminare all'interno di una sfera
Fig.6: Veduta dall'alto di un outward gravity volume
4. Considerazioni sulle performances
Quando si creano vaste aree con gravità modificata, è bene tenere a mente un paio di cose.
Ogni gravity_volume in più posizionato su un livello aggiunge calcoli che vanno a gravare sul sistema.
Evitate dunque di usare troppi gravity
volumes piccoli e, se possibile, coprite vaste aree con un singolo gravity_volume.
La chiave isSimpleBox è una chiave importante. Di default è attivata perché un gravity_volume dalla forma
complessa aggiunge pesanti calcoli al sistema quando questo deve elaborare i comportamenti richiesti.
Con ogni probabilità avrete bisogno di disattivare questa chiave in qualche occasione, ma cercate per quanto possibile
di utilizzare box semplici al fine di alleggerire la vostra mappa.
Non sottovalutate l’utilizzo di fumo e di specchi. [Il carico computazionale che questi effetti hanno sul sistema è
elevatissimo, e se combinato con l’alterazione di gravità è ancora più massiccio - N.d.T.].
L’uso intelligente di passerelle magnetiche a muro e portali può dare l’impressione di essere in aree a gravità alterata.
È decisamente più economico (in termini di risorse) invertire la geometria del livello conservando la gravità standard
piuttosto che usare un gravity_volume.
L’AI delle creature risponde meglio in aree a gravità standard, quindi pensate a soluzioni semplici in caso di
combattimenti in aree a gravità alterata.
Appendice
volume_gravity
Variabili all’interno di zone gravitazionali. Cambiano la gravità di tutti gli oggetti fisici a cui vengono assegnate.
gravity
vector
Nuovo vettore di gravità (x y z). Default (0 0 -1066)
interpTime
float
Tempo (in secondi) per interpolare i cambiamenti gravitazionali. Default (1.0)
reorient
boolean
Reorienta il giocatore nella direzione della gravità. Default (1)
showVector
boolean
Disegna le linee di debug nel gioco. Default (0)
killmonsters
boolean
Uccide i mostri che sono affetti da una determinate gravità. Default (1)
zeroGravOnChange
boolean
isSimpleBox
boolean
Simple boxes sono più economici in termini di prestazioni. Default (1)
snd_gravity_loop
string
Effetto sonoro quando la gravità è non-standard.
trigger_gravityswitch Puntano all’entità volume_gravity. Usate “angle” per specificare la direzone della gravità.
strength
float
Fattore Gravità. Default (1.0)
vector
vector
Fattore Gravità Forzato. Sovrascrive “strenght” ed “angle”.
Enabled
boolean
Inizialmente abilitato. Default (1)
volume_gravityinward Variabili all’interno di zone gravitazionali. Attira gravitazionalmente tutti gli oggetti fisici che entrano in un dato gravity_volume verso il suo punto di origine. Per fare in modo che la forza respinga, usate un valore negativo.
factor
float
Magnitudo percentuale della gravità normale. Default (0.5)
interpTime
float
Tempo (in secondi) per interpolare i cambiamenti gravitazionali. Default (1.0)
override_origin
vector
Assegna l'origine a un modello diverso da quello di default, sovrascrivendolo.
monster_trace_gravity
boolean
I mostri cercano la gravità normale invece di utilizzare il vettore interno. Default (0)
reorient
boolean
Reorienta il giocatore nella direzione della gravità. Default (1)
showVector
boolean
Disegna le linee di debug nel gioco. Default (0)
killmonsters
boolean
Uccide I mostri che sono affetti da una determinate gravità. Default (1)
isSimpleBox
boolean
Simple boxes sono più economici in termini di prestazioni. Default (1)
volume_gravitysink Variabili all’interno di zone gravitazionali inverse. Attira gravitazionalmente tutti gli oggetti fisici che entrano in un dato gravity_volume verso il suo punto di origine, con una forza pari all’inverso del quadrato della distanza.
factor
float
Gravity factor. Default (60000)
interpTime
float
Tempo (in secondi) per interpolare i cambiamenti gravitazionali. Default (1.0)
showVector
boolean
Disegna le linee di debug nel gioco. Default (0)
killmonsters
boolean
Uccide I mostri che sono affetti da una determinate gravità. Default (1)
isSimpleBox
boolean
Simple boxes sono più economici in termini di prestazioni. Default (1)
Ok questo è quanto. Se qualcosa non ti è chiaro, non esitare a postare le tue domande nel nostro Forum.
[PREY] Gravity Volumes (Wiki Tutorial) Tradotto da Vision83 for HG&LD
- 30 Novembre 2006 -