La guida è in continuo aggiornamento, non appena sarà finita verrà inserita anche sul sito.
Introduzione
Il WeaponInfo.xml, presente all'interno della cartella C:\Programmi\Rockstar Games\Grand Theft Auto IV\common\data, descrive le caratteristiche e contiene i dati di tutte le armi del gioco.
N.B. Prima di modificare qualsiasi file nel modding, è necessario creare un backup, ossia una copia di sicurezza da ripristinare nel caso in cui la modifica abbia generato errori o sviste irreversibili.
Per poter modificare il file WeaponInfo.xml avrete bisogno solamente del Blocco Note.
Se nell'aprire il file troverete qualche difficoltà (ad esempio il vostro computer vi chiederà di selezionare un programma per aprirlo), cliccate col tasto destro sul file, selezionate "Apri con", quindi "Programma", nell'elenco cercate il Blocco Note, spuntate la voce "Usa sempre il programma selezionato per aprire questo tipo di file", quindi date l'ok e potrete aprire comodamente il file con il vostro editor.
Le informazioni contenute nel WeaponInfo.xml, sono racchiuse all'interno dei tag
Le armi sono state suddivise inoltre in "categorie", identificabili secondo il modello seguente:
<!-- --> <!-- MELEE WEAPONS --> <!-- -->
Le quali sono:
MELEE: Armi bianche, tra cui coltello e mazza da baseball.
GUN: Armi da fuoco, dalla pistola al lanciarazzi.
PROJECTILE: Armi da lancio, tra cui granate e molotov.
All'interno del file, un'arma può essere identificata tramite un "blocco" di codice indicante il nome, all'interno del quale vi saranno i dati relativi all'arma stessa.
<weapon type="NOME ARMA"> //qui il resto del codice contenente le informazioni dell'arma stessa </weapon>
Di seguito analizzarò un "blocco" di codice, con un esempio chiaro utilizzando il blocco relativo alla pistola, la prima arma della categoria GUN WEAPONS e facilmente reperibile nel gioco.
Ecco blocco di codice originale.
<weapon type="PISTOL"> <data slot="HANDGUN" firetype="INSTANT_HIT" damagetype="BULLET" group="PISTOL_SMALL" targetrange="45.0" weaponrange="50.0" clipsize="17" ammomax="1500" timebetweenshots="333"> <damage base="25" networkplayermod="3.0" networkpedmod="1.0"/> <physics force="50.0"/> <reload time="2000" fasttime="2000" crouchtime="2000"/> <aiming accuracy="0.5"> <offset x="0.15" y="1.0" z="0.55"/> <crouchedoffset x="0.2" y="1.0" z="0.05"/> <reticule standing="0.65" ducked="0.55" scale="0.3"/> </aiming> <pickup regentime="120000" ammoonstreet="30"/> <controller> <rumble duration="110" intensity="0.02"/> </controller> <flags> <flag>GUN</flag> <flag>CAN_AIM</flag> <flag>CAN_FREE_AIM</flag> <flag>ANIM_RELOAD</flag> <flag>ANIM_CROUCH_FIRE</flag> </flags> </data> <assets model="w_glock"> <anim group="gun@handgun" meleegroup1="firearm_core"/> <effects> <muzzle fx="muz_pistol_small"/> <shell fx="weap_ejected_pistol"/> </effects> </assets> </weapon>
Come noterete, le informazioni sono ordinate secondo una specifica identazione (una sorta di scaletta con i tag di inizio e fine alla stessa distanza dal margine sinistro, per intenderci).
Come detto in precedenza, il blocco weapon indica identifica il codice relativo al nome dell'arma specificata ad inizio blocco. In questo caso "PISTOL", ossia pistola:
<weapon type="PISTOL"> // codice </weapon>
All'interno del blocco stesso, saranno presenti due mini-blocchi, data e assets
Data:
<data slot="HANDGUN" firetype="INSTANT_HIT" damagetype="BULLET" group="PISTOL_SMALL" targetrange="45.0" weaponrange="50.0" clipsize="17" ammomax="1500" timebetweenshots="333"> <damage base="25" networkplayermod="3.0" networkpedmod="1.0"/> <physics force="50.0"/> <reload time="2000" fasttime="2000" crouchtime="2000"/> <aiming accuracy="0.5"> <offset x="0.15" y="1.0" z="0.55"/> <crouchedoffset x="0.2" y="1.0" z="0.05"/> <reticule standing="0.65" ducked="0.55" scale="0.3"/> </aiming> <pickup regentime="120000" ammoonstreet="30"/> <controller> <rumble duration="110" intensity="0.02"/> </controller> <flags> <flag>GUN</flag> <flag>CAN_AIM</flag> <flag>CAN_FREE_AIM</flag> <flag>ANIM_RELOAD</flag> <flag>ANIM_CROUCH_FIRE</flag> </flags> </data>
Assets:
<assets model="w_glock"> <anim group="gun@handgun" meleegroup1="firearm_core"/> <effects> <muzzle fx="muz_pistol_small"/> <shell fx="weap_ejected_pistol"/> </effects> </assets>
Analizziamo prima il blocco data.
<data slot="HANDGUN" firetype="INSTANT_HIT" damagetype="BULLET" group="PISTOL_SMALL" targetrange="45.0" weaponrange="50.0" clipsize="17" ammomax="1500" timebetweenshots="333">
slot="NOME SLOT": indica il nome dello slot dell'arma (e più in generale, anche la categoria). Può avere i seguenti valori:
- UNARMED (Disarmato)
- MELEE (Arma bianca)
- HANDGUN (Arma ad una mano) (è il nostro caso!)
- SHOTGUN (Fucile)
- SMG (Mitraglietta)
- RIFLE (Fucile d'assalto)
- SNIPER (Fucile da cecchino)
- HEAVY (Arma pesante)
- THROWN (Da lancio)
- SPECIAL (Speciale)
- MELEE (Colpo da arma bianca, es. coltello)
- INSTANT_HIT (Colpo istantaneo, es. pistole) (è il nostro caso!)
- DELAYED_HIT (Colpo ritardato, es. fucili da cecchino)
- PROJECTILE (Colpo mobile, es. razzo del lanciarazzi)
- MELEE (Danno da arma bianca, debole)
- BULLET (Danno da proiettile, da debole a forte) (è il nostro caso!)
- EXPLOSIVE (Danno da esplosione)
- FIRE (Danno da fiamme)
- COLLISION (Danno da collisione)
- PUNCH_KICK (Pugni e calci)
- MELEE_WOOD (Arma in legno, es. mazza da baseball)
- MELEE_SHARP (Arma in metallo, es. coltello)
- PISTOL_SMALL (Pistola piccola) (è il nostro caso!)
- PISTOL_LARGE (Pistola potente)
- SHOTGUN (Fucile)
- SMG (Mitraglietta)
- RIFLE_ASSAULT (Fucile d'assalto)
- RIFLE_SNIPER (Fucile da cecchino)
- ROCKET (Lanciarazzi)
- GRENADE (Granate)
- MOLOTOV (Molotov)
- MELEE_GENERIC (Generico)
Considerate che il valore di default della pistola è 45.0 mentre quello dell'M4 (fucile d'assalto) è 65.0.
weaponrange="VALORE": indica il valore della distanza massima raggiungibile dai colpi dell'arma.
Considerate che il valore di default della pistola è 50.0 mentre quello del fucile da cecchino è 1500.0.
clipsize="VALORE": indica il valore del numero di proiettili del caricatore (terminato il quale, si dovrà ricaricare l'arma e inizierà quindi l'animazione della ricarica).
Considerate che il valore massimo è 9999.
ammomax="VALORE": indica il valore del numero totale di proiettili massimo dell'arma (ad esempio quando la si raccoglie).
Considerate che il valore massimo è 9999.
timebetweenshots="VALORE": indica il valore del rateo di fuoco dell'arma.
<damage base="25" networkplayermod="3.0" networkpedmod="1.0"/> <physics force="50.0"/> <reload time="2000" fasttime="2000" crouchtime="2000"/>
La prima stringa damage indica dati e valori relativi ai danni che può infliggere l'arma.
- base: indica il valore generale della potenza dell'arma.
- networkplayermod: moltiplicatore dei danni inflitti da un altro giocatore nel multiplayer (credo quasi sicuramente solo in LAN).
- networkpedmod: moltiplicatore dei danni inflitti da un pedone nel multiplayer. (credo quasi sicuramente solo in LAN).
- force: indica il valore della forza d'impatto del proiettile. Impostate un valore elevatissimo (es. 5000) per avere effetti devastanti sul bersaglio colpito.
- time: valore del tempo impiegato per ricaricare, in millisecondi. Ad esempio, il valore 1000 indicherà 1 secondo. (1000ms/1000=1 sec). Impostate un valore bassissimo (es. 1) per una ricarica rapidissima.
- fasttime: indica il valore della velocità nel ricaricare.
- crouchtime: indica il valore del tempo impiegato per accovacciarsi, in millisecondi.
<aiming accuracy="0.5"> <offset x="0.15" y="1.0" z="0.55"/> <crouchedoffset x="0.2" y="1.0" z="0.05"/> <reticule standing="0.65" ducked="0.55" scale="0.3"/> </aiming>
Parte di codice relativa all'accuratezza/precisione dell'arma.
- accuracy: valore dell'accuratezza/precisione generale dell'arma.
- offset: coordinate di deviazione del proiettile lungo la sua traiettoria (collegato anche al rinculo dell'arma ad ogni proiettile sparato).
- crouchedoffset: coordinate di deviazione del proiettile lungo la sua traiettoria, sparando da accovacciati.
- reticule: valori da testare.
<pickup regentime="120000" ammoonstreet="30"/>
Parte di codice relativa ai "pickup" ossia le armi che è possibile raccogliere per la strada.
- regentime: valore del tempo di rigenerazione dell'arma in quel punto.
- ammoonstreet: numero di proiettili disponibili nell'arma una volta raccolta.
<controller> <rumble duration="110" intensity="0.02"/> </controller>
Parte di codice relativa alle funzioni sul controller.
Rumble è la vibrazione:
- duration: valore della durata della vibrazione del joypad.
- intensity: valore dell'intensità della vibrazione del joypad.
<flags> <flag>GUN</flag> <flag>CAN_AIM</flag> <flag>CAN_FREE_AIM</flag> <flag>ANIM_RELOAD</flag> <flag>ANIM_CROUCH_FIRE</flag> </flags>
Sono i FLAGS, ossia animazioni e dati correlati a quell'arma. Una sorta di "inclusione" di caratteristiche (es. CAN_AIM, mira abilitata per quell'arma)
<assets model="w_glock"> <anim group="gun@handgun" meleegroup1="firearm_core"/> <effects> <muzzle fx="muz_pistol_small"/> <shell fx="weap_ejected_pistol"/> </effects> </assets>
- model: nome del modello della texture dell'arma. Sarà il modello che visualizzarete estraendo l'arma.
Es. Per sostituire la texture della pistola con quella del lanciarazzi, basterà sostituirecon . - anim: tipi di animazioni del personaggio e dell'arma.
- group: gruppo a cui appartiene l'animazione del personaggio per quell'arma.
- meleegroup1: gruppo a cui appartiene il tipo di colpo per quell'arma.
- group: gruppo a cui appartiene l'animazione del personaggio per quell'arma.
- effects: dati e valori relativi ai suoni dell'arma.
Il tutorial è quasi completo, mancano solamente alcune funzioni da aggiungere relative alle altre armi e non solo alla pistola presa in considerazione.