Un IDE per Enemy Territory


Nell’articolo “Un IDE per avventure testuali in Linux” avevo mostrato la procedura per abilitare Inform7 in Eclipse. Oggi presento un metodo simile per fare modifiche al codice sorgente di Wolfenstein: Enemy Territory che Id Software mise online con la licenza GPL v3 un paio di anni fa. Sorvolo sui vari progetti che sono stati iniziati in Rete con il codice di W:E.T. perché sono davvero tanti, magari tornerò su questo argomento in futuro, alcuni sono molto interessanti. L’articolo si conclude con un esempio pratico, tratto da una serie di tutorial dedicati alla programmazione di Quake 3: chi è già ben informato sulla struttura interna dell’Id Tech 3, troverà delle similitudini fra i codici dei due giochi. La modifica è elementare, consiste nel ridurre la velocità del missile sparato con il panzerfaust di modo che si possa superarlo a piedi e vederlo viaggiare nell’aria.

Ho scelto Eclipse per due ragioni: il codice sorgente originale del gioco è stato configurato con SCons, uno strumento di sviluppo che automatizza l’assemblaggio dei programmi; esiste un plugin che si interfaccia fra Eclipse e SCons.

Installazione di Sconsolidator per Eclipse

Installazione di Sconsolidator per Eclipse

In questo esercizio è fondamentale un sistema Linux configurato come ambiente di sviluppo, quindi avrete bisogno del compilatore gcc e delle librerie di supporto. In Ubuntu questo ambiente viene messo a punto con un comando del tipo apt-get build-essential scons. Non cambia molto con le altre distribuzioni, dovrete consultare la guida di riferimento. Al mio primo tentativo sono inciampato in una difficoltà: siccome lo standard FHS non prescrive una posizione per Xorg all’interno della gerarchia del file system, può capitare che l’assembler non trovi le librerie, come è successo a me. Una volta era prassi installare X Window System in /usr/X11R6, ma con l’adozione di Xorg questa directory ha perso importanza. Per esempio a Sun si continua a installare Xorg in /usr/X11; nella distribuzione Ubuntu lo si trova invece in /usr/lib; a Id Software usavano /usr/X11R6. Nella mia distribuzione Xorg non si trova in /usr/X11R6, ho dovuto porvi rimedio correggendo il contenuto di un file del codice sorgente di W:ET, altrimenti la compilazione sarebbe terminata con errori. Al momento opportuno spiegherò anche come fare questa correzione.

Installazione scons con Synaptic

Installazione scons con Synaptic

L’elenco degli strumenti indispensabili è il seguente:

  • Il codice sorgente di Enemy Territory. In Rete si trovano diversi pacchetti, ma la procedura descritta qui è basata sulla versione distribuita da Splash Damage che è già predisposta per SCons.

  • SCons: sostituisce make e l’infrastruttura GNU autoconf. È il nocciolo del nostro sistema di compilazione di W:ET.

  • Strumenti di sviluppo: gcc, nasm e librerie. Le distribuzioni hanno il “pregio” di separare i file di libreria da quelli d’intestazione (header) del C, ma entrambi sono necessari per la compilazione! Quindi un pacchetto che fa parte di Xorg potrebbe risultare installato ma senza gli header. W:ET è un gioco per ambiente grafico e fa uso di numerose librerie di Xorg. L’unico modo per scoprire cosa manca è procedere con la compilazione per tentativi e procurarvi ciò che è indispensabile con il gestore dei pacchetti.

  • Eclipse è uno dei migliori IDE disponibili in Linux. Supporta diversi linguaggi: Java, C/C++, UML, Javascript, ecc. e altri se ne possono aggiungere con i plugin. Il mio consiglio è scaricare il pacchetto di Eclipse per sviluppatori C/C++ e mantenerlo separato dal resto dell’infrastruttura (Java, ecc.), per esempio nella directory /opt/eclipse-cc. Installate Eclipse con il comando install -v -m755 -d /opt/eclipse-cc && tar xvfz eclipse-cpp-kepler-SR1-linux-gtk.tar.gz. In alternativa, potete cercare l’IDE con il gestore dei pacchetti della vostra distribuzione Linux.

  • Sconsolidator è il plugin per Eclipse che interpone fra SCons e l’IDE una interfaccia utente e un wizard per gestire i progetti C/C++. Senza questo strumento, dovremmo svolgere un lavoro dispendioso.

  • Java: Eclipse è basato su Java e il plugin Sconsolidator è distribuito con archivi jar. Dovrete installare un JDK, per esempio Oracle Java 7; gli utenti di Ubuntu o di altre distro “debian like” daranno per esempio il comando sudo apt-get install oracle-java7-installer ( vd. Java 7 o 6 in Ubuntu 13.04 – 12.10 – 12.04).

Sconsolidator: importazione di un progetto

Sconsolidator: importazione di un progetto

L’installazione di Sconsolidator in Eclipse è una procedura quasi automatica, è sufficiente selezionare “Install new software” presente nel menu Help; poi nella finestra di dialogo cliccare il pulsante “Add” e specificare nel campo “location” l’indirizzo web del plugin (http://www.sconsolidator.com/update). Se la ricerca va a buon fine, Eclipse troverà due componenti: selezionatele entrambe e confermate l’installazione. Al termine dell’operazione dovrete riavviare Eclipse. Controllate nel menu delle preferenze di Eclipse, alla voce SCons, il percorso completo dell’eseguibile di SCons. Potete verificare la posizione con il comando which scons.

A questo punto scaricate il sorgente di ET dal sito di Splash Damage, è un archivio zip, decomprimetelo nella directory Workspace di Eclipse, quella che avete scelto all’avvio dell’IDE, per esempio con il comando unzip ET-GPL.zip.  Bisogna importare il codice di W:ET in Eclipse selezionando la voce “Import” del menu File, cliccare su “New SCons project…”: poi occorre specificare la posizione del codice sorgente del gioco, è la directory src creata con unzip. Immettete un nome a piacere per il vostro progetto, se non vi viene nulla in mente usate pure MY-et-gpl.

La modifica al file SConscript.core

La modifica al file SConscript.core

Tutto il codice deve essere rianalizzato da SCons: cliccate con il tasto destro del mouse (oppure premete ALT+ENTER) sul nome del progetto nel Project Manager di Eclipse, e scegliete l’opzione “Build All” nel menu “Build Configurations”. Poi procedete con la compilazione. Questo è il momento per scoprire quale software manca nel sistema Linux. Io per esempio ho dovuto installare il pacchetto libxxf86dga-dev. Ciò non è comunque bastato, infatti al secondo tentativo la compilazione è terminata con il seguente messaggio di errore:

scons: *** [build/debug/core/et] Source `/usr/X11R6/lib/libXxf86dga.a' not found,
 needed by target `build/debug/core/et'.

libXxf86dga-dev è una libreria statica che normalmente in un sistema Ubuntu si trova in /usr/lib/i386-gnu-linux, ma SCons la cerca da un’altra parte. Ho dovuto correggere questa incongruenza aprendo nell’editor di Eclipse il file SConscript.core (vd. immagine precedente): la stringa staticx11_libs conteneva /usr/X11R6/lib che non andava bene.

Modifica al file g_missile.c

Modifica al file g_missile.c

La modifica del gioco è molto semplice e interessa il file g_missile.c nella directory game. La funzione fire_rocket è predisposta per creare il proiettile del panzerfaust, ne imposta anche le caratteristiche. Cercatela all’interno del file con la funzione “find” di Eclipse. Nel suo blocco di codice c’è una chiamata a un’altra funzione, la VectorScale, dovete cambiare il valore del suo secondo argomento da 2500 a 100. Più si è bassi di valore e più il proiettile rallenta. Potete verificare cosa succede con 0.

VectorScale( dir,100,bolt->s.pos.trDelta );  /* from 2500 to 100 */

Per testare i cambiamenti al codice di W:ET vi occorre non solo un’installazione completa del gioco, ma anche risorse per eseguire in locale un server. C’è un ottimo tutorial scritto in inglese che ho seguito per mettere a punto il sistema client/server sul mio computer, si intitola “Setting Up etded on Linux”.

Wolfenstein: Enemy Territory è stato per una decade un gioco seguito da un discreto numero di fan, venivano organizzati campionati europei e internazionali, i clan erano competitivi e c’erano ottimi “shooter”. Ma a poco è servito mettere il codice sorgente online, lo sviluppo di molte mod è stato interrotto e i giocatori hanno lasciato le arene per altri lidi. Tutto questo prima o poi doveva accadere. L’engine però è open source, a disposizione di chi volesse realizzare una modifica divertente e originale.

Il missile del panzerfaust che ho sparato dalla baracca

Il missile del panzerfaust che ho sparato dalla baracca

Fonti:

  1. Tutorial2
  2. How to install Oracle Java 7
  3. Sconsolidator
  4. A short introduction to the current status quo of this Wolfenstein: Enemy Territory thing

Lascia un commento

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...