Leadwerks per Linux: lo sviluppo continua


Leadwerks Linux va visto come una serie di componenti che lavorano insieme per animare un oggetto altrimenti statico, e un gioco statico è poco divertente oggidì. C’è l’engine che fornisce al programmatore le funzioni per controllare i dispositivi audio, quelli d’input/output, la scheda video, la IA e la fisica; queste funzioni sono inserite nelle librerie di sviluppo. Leadwerks Linux ha un editor di codice sorgente (Code::Blocks) e uno per gli script, c’è il modeller e l’editor per le mappe. Tutti questi strumenti, collegati fra loro, formano un’applicazione RAD che accellera lo sviluppo dei video game multi-piattaforma.

Lo sviluppo di Leadwerks 3 per Linux continua e sulla pagina di Kickstarter vengono di volta in volta pubblicati alcuni rapporti che descrivono i punti di forza e di debolezza dell’intero processo di adattamento dell’engine al sistema operativo Linux. È venuto a galla per esempio questo problema della libreria fisica di Leadwerks che blocca il programma editor quando viene usato un comando SSE. Le Streaming SIMD Extensions, cioè SSE, sono istruzioni della CPU specializzate per fare i calcoli in virgola mobile più velocemente e quindi sono perfette per implementare la fisica nel gioco. Disabilitando questo comando – con l’editor di Leadwerks è possibile passare da una modalità SSE a una non-SSE – il blocco sparisce.

Leadwerks editor

Leadwerks editor

Un ambiente di sviluppo così complesso deve integrarsi bene nel sistema operativo. L’obiettivo attuale è la predisposizione dell’interfaccia dell’utente con un set di icone più consono per Linux (quelle di Windows sono state sostituite per il momento con il set monocromatico di Ubuntu); il simbolo di Code::Blocks ha rimpiazzato quello di Visual Studio. Inoltre, l’uso del toolkit GTK dà complessivamente un look & feel molto più familiare. Ma l’imprevisto è da mettere sempre in conto, specialmente quando si portano centinaia di righe di codice da una piattaforma a un’altra: vedere alla fine del lavoro una barra laterale senza icone, deprime un po’ (vd. immagine sopra)!

Altre situazioni problematiche riguardano il riquadro del rendering (si ferma al primo riuso), il pannello delle opzioni (non compare) e l’editor dei modelli (si blocca completamente), i menu della finestra (non sono contestuali). Malgrado tutto ciò, funziona l’editor degli script ed è possibile produrre alcuni giochi dimostrativi. Leadwerks Linux sarà consegnato a dicembre alle persone che fecero una donazione di cinquanta e cento dollari. Visto a che punto è lo sviluppo, il rilascio su Steam, penso, non avverrà prima del 2014.

Fonte

Annunci

Dal blog di Leadwerks Linux


Se volessimo realizzare un gioco per Linux, ci troveremmo in difficoltà perché in questo campo mancano le risorse. Chiunque ha un po’ di esperienza di amministrazione Linux sa che Blender ha tutte le funzioni per creare un video game: il modeller, l’editor di scenari, l’editor per l’animazione e l’editor per la IA. Yo Frankie “A furry vendetta” è un gioco basato su Blender che può servire come riferimento per questo modello di sviluppo.

Blender e Yo Frankie

Blender e Yo Frankie

È forse Blender l’unico programma per fare giochi in Linux? Certamente no, altrimenti lo useremmo tutti e non avremmo altri tipi di engine (il motore che fa girare ogni cosa nel gioco). Quelli con una licenza open source sono di ottima qualità, non c’è dubbio, mi riferisco a Ogre 3D, Panda 3D, Crystal Space, i vari fork di Id Tech3, ecc. ma mancano le interfacce grafiche, i cosiddetti RAD (Rapid Application Development) che rendono più funzionale il processo produttivo di un videogioco con questi motori. Faccio un esempio, Ogre 3D è un engine ben noto e ha una licenza libera (MIT), ma fornisce solo il codice sorgente, e il programmatore per realizzare un video game deve installare alcuni programmi accessori e configurarseli da solo: l’IDE, c’è un’ampia scelta da Eclipse a Code::Blocks; il modeller, può essere Blender o AC3D, ecc.; l’editor di scena (Gose); un editor per la fisica del gioco; il programma di disegno (Gimp, Inkscape, ecc.). Ciò è frustrante per un indie game developer che lavora per conto proprio.

In Windows le software house hanno realizzato RAD avanzatissimi che si interfacciano all’engine e fanno risparmiare molte ore di programmazione. Inoltre, questi software hanno un supporto online dove è possibile richiedere informazioni, scaricare la documentazione e persino comprare oggetti/beni (detti assets) creati da altri utenti. Unity 3D engine ha l’Asset store disponibile all’interno dell’editor. Questo negozio virtuale è una collezione di oggetti di vario tipo: modelli 3D, texture, effetti sonori, musiche, script, ecc. Unity 3D è un ambiente produttivo ottimale per un indie game developer.

Sono convinto che questo “gap tecnologico” fra Windows e Linux sarà eliminato nel breve periodo da Leadwerks engine: è un moderno motore di gioco, multi-piattaforma, con l’asset store (chiamato in questo caso Werkspace), fornito di supporto per la console OUYA e per le cuffie Oculus VR . Con i fondi raccolti tramite Kickstarter, Leadwerks sarà portato su Linux entro la fine dell’anno e potrà essere acquistato e installato anche dal negozio Steam.

Leadwerks Linux usa GTK

Leadwerks Linux usa GTK

Il processo di sviluppo di Leadwerks Linux procede bene. È stato fatto con successo il debug di un’applicazione costruita sulla base di una libreria statica di Leadwerks. L’analisi del programma ha però evidenziato alcuni limiti dell’integrazione di GDB in Code:Blocks, l’editor del codice sorgente. Leadwerks per Linux usa il toolkit GTK per creare la finestra di lavoro, i menu e i pulsanti ed ha un aspetto famigliare, l’applicazione si inserisce molto bene nell’ambiente desktop del sistema operativo.

Fonte

Per Leadwerks engine inizia la caccia ai bug


Leadwerks è una software house “indie” che sta realizzando un ambiente di sviluppo RAD per videogiochi. A luglio avevano raccolto i fondi in Rete, tramite Kickstarter, con l’obiettivo di portare Leadwerks 3 su Linux. Questo programma dà agli sviluppatori un assortimento di strumenti per creare giochi 3D con il sistema operativo open source. È un prodotto che si può confrontare con Unity 3D di Windows, tuttavia Leadwerks stesso è multi-piattaforma e non occorrono altri programmi all’infuori di un’applicazione per i modelli 3D.

Beta di Leadwerks 3 engine su Linux

Beta di Leadwerks 3 engine su Linux

Le persone che donarono almeno cinquecento dollari hanno avuto accesso in questi giorni alla versione sperimentale di Leadwerks 3 per Linux. Per il momento c’è  soltanto l’IDE, basato su Code::Blocks con un’interfaccia di tipo wxWindows; però è degno di nota il fatto che esista una Leadwerks API che controlla ogni aspetto del videogioco: grafica, fisica, IA e input/output, cioè i moduli principali della struttura interna di un game engine. Allo stato attuale manca solo l’editor di livello. In questo caso gli sviluppatori intendono costruire l’interfaccia del programma con il toolkit GTK. Non ci sono stati problemi nell’adattamento di un software di Windows a Linux, l’unico intoppo è attinente alla manipolazione dei nomi di file e directory che è incompatibile fra i due sistemi operativi. Ma da un punto di vista pratico, i benefici che derivano da un programma ben integrato in Linux sono superiori ai sacrifici sostenuti, asseriscono i programmatori di Leadwearks.

Leadwearks 3 per linux sarà in vendita a partire da dicembre; si potrà scaricare da Internet e installare con Steam. Ho sempre sognato un ambiente di sviluppo per videogiochi che fosse completo di editor di livelli e codice sorgente, similmente a quanto è possibile avere in Windows, per esempio con Unity 3D.  Leadwerks mette anche a disposizione uno store dove gli artisti e i programmatori possono scambiare gli asset (modelli 3D, suoni, moduli, ecc.), in questo modo l’indie game developer ha ogni cosa necessaria per dare forma a un’idea tenuta finora nel cassetto.

Fonti:

  1. Leadwerks 3.1 Enters Beta; Heading to Steam Dev Days
  2. http://steamcommunity.com/sharedfiles/filedetails/?id=145716110

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

Quale driver scegliere per Painkiller HD


Painkiller HD è tra i video game di prestigio per Linux che sono stati aggiunti alla libreria di Steam. Il port era stato annunciato a giugno di quest’anno, mentre la procedura di beta testing è cominciata la settimana scorsa, diretta dallo sviluppatore Leszek Godlewski, dipendente della software house Farm 51. Le comunicazioni fra i programmatori e gli utenti che partecipano alla beta avvengono nel forum del gioco ospitato sul sito della comunità di Steam. Mi è parso interessante il messaggio di Godlewski scritto ieri a proposito delle schede video: la sua opinione è che il driver open source è il più adatto per giocare ai giochi creati con Unreal Ungine 3, a meno di avere una scheda Nvidia, in questo caso suggerisce il driver del fabbricante.

Nvidia o AMD?

Nvidia o AMD?

Nel mondo di Linux ci sono  due attori coinvolti nel processo di sviluppo di un driver per le tre principali marche di schede video: il fabbricante e il FOSS. Il programma di controllo della scheda grafica è fornito in formato binario oppure a “sorgente aperto”. L’utente di Linux con una scheda video AMD può optare fra il fglrx, distribuito come parte del pacchetto Catalyst dal fabbricante, e il radeon che è mantenuto dalla comunità open source (FOSS). Michael Larabel ha dimostrato con delle prove comparative che le prestazioni nei giochi dei due driver sono quasi simili. Senza la documentazione tecnica che AMD mise a disposizione della comunità del free software, il radeon non avrebbe mai raggiunto i livelli di oggi; in certi contesti ha potuto dimostrarsi persino superiore al fglrx. Non mi sorprende l’opinione di Godlewski, egli ha visto “schiantarsi” il driver proprietario durante le prove di PKHD.

Per quanto riguarda le schede GeForce, duole osservare che Nvidia non partecipa più attivamente allo svilluppo del driver open source nv per i modelli di schede video Fermi e Kepler, né ha mai collaborato al potenziamento di nouveau, che è l’equivalente FOSS realizzato con il reverse engineering del driver nvidia a codice binario. Il gap fra questi due software si manifesta nel campo delle applicazioni 3D, qui il Nouveau ha prestazioni insoddisfacenti ed è pertanto da scartare, sia che si tratti di giocare a Painkiller sia a Guns of Icarus con una GeForce Kepler. L’ultimo attore è Intel: sebbene le schede video di questa marca abbiano scarso valore per il giocatore, il driver viene fornito con il codice sorgente e fa il proprio dovere.

Il mio consiglio non è molto diverso da quello di Godlewski, usate il driver fornito da Nvidia se avete naturalmente una Geforce, prendete la versione open source per controllare la vostra AMD Radeon. Se avete una Intel ma potete permettervi l’acquisto di una scheda video di ultima generazione, be’ puntate sul modello GeForce. Nvidia è sempre stato ritenuto il driver per eccellenza in Linux, tanto nelle applicazioni grafiche 2D quanto in quelle 3D. La superiorità del radeon sul fglrx presagisce la fine del Catalyst o piuttosto la convergenza fra i due progetti?

Fonti:

  1. Free and open-source graphics device driver
  2. PKHD Linux Beta Released