posterous of Matthijs Groen

game development rantings

Quick Ruby install

Install packages:

sudo apt-get install build-essential ruby rubygems git curl libncurses5-dev

Install RVM:

bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )

The first timeyou install RVM, you must put the following line into
your ~/.bash_profile at the very end, after all path loads etc:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.

Setup RVM packages:

rvm package install readline
rvm package install zlib
rvm package install openssl
rvm install 1.8.7 --with-openssl-dir=$rvm_path/usr --with-readline-dir=$rvm_path/usr --with-zlib-dir=$rvm_path/usr
rvm --default use 1.8.7
rvm use 1.8.7
cd ~/.rvm/src/ruby-1.8.7-p302/ext/readline/
ruby extconf.rb -- --with-readline-dir="$HOME/.rvm/usr"make install

Why RVM doesn't install the packages automatically is beyond me,
because I hoped RVM would make my life easier...

Filed under  //   installation   ruby   ubuntu  

Postgres and PostGIS setup for Rails 3

In ubuntu, add as source: ppa:ubuntugis/ubuntugis-unstable 

In terminal:

~$ sudo apt-get install postgresql-8.4-postgis
~$ sudo su postgres
postgres@your-desktop:/home/username$ createuser username (your linux username)
Shall the new role be a superuser? (y/n) y
postgres@your-desktop:/home/username$ exit 

Now it is time to create the databases make sure your database.yaml file looks like this:

development:
  adapter:
    postgresql database: project_development
    username: username

(etc for test and production)

In the Gemfile, you should have the following gems enabled:

gem "pg"
gem "nofxx-georuby"
gem "spatial_adapter"

after bundle install, you should be able to run rake db:create

Now we need to add the PostGIS stuff to the database

sudo su postgres createlang plpgsql project_development
psql -d project_development -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql
psql -d project_development -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql
psql -d project_development -f /usr/share/postgresql/8.4/contrib/postgis_comments.sql

And now we can use spatial columns in our database and migrations!

add_column :assets, :location, :point, :srid => -1
add_column :assets, :ground_space, :line_string, :srid => -1

add_index :assets, :location, :spatial => true
add_index :assets, :ground_space, :spatial => true

Enjoy!

Filed under  //   Guide   PostGis   Rails 3  

Game weer tot leven wekken

Ik ben weer eens begonnen met de code van het spel tot leven aan het wekken. De code te porten naar Rails 3, en vooral de hele Postgres database opnieuw op te bouwen (om een of andere reden kan er niet meer geconnect worden)

Kortom flinke klussen, en als dat gebeurt is weer eens een status check doen hoe de broncode erbij ligt en dan kijken hoe we meer functionaliteit toe gaan voegen. Wordt nl tijd om weer eens richting een grafische client te gaan...

Filed under  //   game  

Weer een succesvolle proximity test

Ik had al tests gemaakt waarin een trigger actief werd als er iemand in de buurt kwam (de 3 vs 1 marine case). Echter was er nog geen mechanisme met berichtgeving wanneer iemand weer buiten bereik kwam. Hier is nu ook een mooi testje voor gemaakt. Ik heb een stationaire gun op het speelveld gezet, met een flinke actie radius.
Vervolgens laat ik 1 marinier vanaf grote afstand langslopen (maar wel de straal van de gun doorkruisen) en 1 marinier laat ik vlak langs de gun lopen. Degene die vlak langs loopt is het langst in bereik van de gun en zou dus de meeste schade op moeten lopen.

En dat was ook zo :-)
Degene op afstand liep 50% schade ongeveer op (had 73 van de 150 punten over)
en degene die dicht bij liep stierf.

Weer een test geslaagd!

Filed under  //   combat   cucumber   game  

Wapen selectie

Screenshot-run

De eerste case van wapen selectie is een feit!

Units kunnen nu meerdere typen wapens gebruiken, en kiezen zelf per target het juiste wapen. 
Zo heb ik ook een case gemaakt met een Luchtschip vs. grondtroepen, waarbij de grondtroepen niet tegen luchtschepen konden schieten. En de grond troepen werden rustig een voor een weggetikt, terwijl het luchtschip geen schade opliep.

Volgende stap is wapen ranges.. Nu kan iedereen zover knallen als hij kan zien, en dat moet dus anders, dat als ze een vijand zien wellicht nog een stukje afstand af moeten leggen voordat ze kunnen vechten. Ook moet er nog getest worden met vijanden die weer 'out-of-range' gaan dat het schieten dus weer stopt. Test-case hiervoor is een Turret die stationair op een passerend vijandelijke unit gaat schieten totdat hij weer buiten bereik is.

Nog veel stappen te gaan voor combat alleen, maar we komen echt steeds dichterbij!

Filed under  //   combat   cucumber   game  

Combat usecase werkt

Nou na een dagje goed prutsen werkt de proximity detection.

Als 1 marinier nu naar 3 vijandelijke wordt gestuurd dan word nu die ene fatsoenlijk overhoop geschoten omdat de 3 hem nu 'aan zien komen'. Eerst werden de 3 gewoon een voor een neergemaaid. Alle openstaande scenario's werken nu dus naar behoren (alle cucumber tests slagen). Nu wordt het dus tijd om nieuwe scenario's te verzinnen die niet werken. 

Bijvoorbeeld:
- Gebouwen upgrades die nieuwe abilities geven
- Air voertuigen die wel op grond targets kunnen schieten maar niet vise-versa
- Stealth units

Dit zijn natuurlijk gewoon engine reken zaken, en ondertussen worden de dingen al dermate complex dat het al nodig begint te worden dat je kan 'zien' wat er nu daadwerkelijk gebeurt.
Kortom: het wordt nu ook wel tijd om een client te gaan maken om de spelwereld weer visueel te maken. Mijn plan voor nu is experimenteren met een Javascript client, en de graphics via SVG te doen. 
SVG heeft als voordelen:
- Kleine bestanden
- Source is XML, zo zijn teamkleuren makkelijk in graphics te verwerken
- Wellicht kan blender zelfs SVG fatsoenlijk exporteren? (thanks Frans!)
- Misschien gebruik kunnen maken van het animatie framework van SVG
- Vector based, dus map zooming zou ook zomaar eens kunnen

Uiteraard gaat SVG ook beperkingen meebrengen zoals browser ondersteuning, en het feit dat de graphics vector based worden. Bij Bitmaps kan je echt voor foto realistische gebouwtjes gaan, bij vector wil je het denk ik toch meer cartoony houden. Nu heb ik daar nog geen voorkeur voor.. eerst de speelbaarheid op orde hebben :-) Performance in browser tussen SVG en PNG gaat dus zeker wel meewegen, maar dat moet eerst door tests ondervonden worden.

Anyway.. er is voortgang, en hopelijk binnenkort ook weer wat grafischere dingen om te tonen :-)

Filed under  //   blender   combat   cucumber   game   svg  

Proximity detection onderweg.

Na een flinke avond prutsen, komt er eindelijk een begin aan proximity detection. De PostGis functies worden al flink uitgenut, en ook met Ruby kan ik al mooie conversie slagen doen tussen de data in de DB en de code. Met een beetje geluk kunnen we binnenkort testjes maken met stationaire turrets en langsrijdende tanks die, wanneer in zicht en bereik, onder vuur genomen worden.

In het kort, er begint weer een beetje voortgang in te komen.

Filed under  //   game   postgis  

Ja het is een beetje stil...

Combat is een lastig onderdeel, zeker met als je rekening moet houden met afstanden tot units in het speelveld. Ik heb hier allerlei theorien voor bedacht en uitgewerkt (op papier).. echter kan ik deze nu ff niet vinden.. Ook heb ik niet zoveel tijd gehad de laatste tijd, maar hopelijk vind ik mijn aantekeningen snel terug en kan ik weer een update geven over de voortgang (hopelijk met many vs many combat!)

De release van de iPad en het vooruitzicht van Chrome OS voelen goed aan omdat mijn game volledig webbased zal worden zonder plugins. De voortgang in SVG graphics en html5 zaken voor video en audio zorgen dat ik straks nog behoorlijke mogelijkheden zal hebben voor de grafische javascript client!

Filed under  //   game  

Eerste combat use-case werkt!

First-combat-scenario

 

Nou ik heb mijn eerste combat scenario werkend gekregen. Er waren redelijk wat stappen te doorlopen tot het eindresultaat, maar de eerste stap is altijd het meeste werk. Hoewel de volgende stappen vele malen complexer zullen worden.

Het scenario:
Partij rood laat een marinier naar een lokatie vlakbij een gebouw van partij blauw lopen.
In een nieuw mechanisme wordt bij marine de 'after_ability' engage_nearby_hostiles aangeroepen, dus na elke vaardigheid die hij uitvoert (lopen bijv.)
wordt nu aan het eind van die opdracht gecontroleerd of er vijanden in de buurt zijn en dan valt hij deze aan.

Nieuwe mechismes toegevoegd:
- After ability, een callback die wordt uitgevoerd na uitvoeren van een opdracht
- weapons. Per asset kunnen nu verschillende wapens worden gedefinieert met targets, ranges en damages
- Damage pools. elke asset heeft er nu standaard 1 en deze pools managen alle damages van verschillende sources (meerdere units kunnen op 1 unit schieten)

Dit scenario is eenvoudig in de zin van een gebouw verplaatst zich niet en schiet niet terug.

Volgende scenario's zullen 1 vs 1 en 1 vs meerdere in gaan houden, en situaties dat niet elke target elkaar kan raken (zoals air vs ground).
Ook interessant is natuurlijk als een unit aangevallen wordt en niet terug kan schieten maar zich wel kan verplaatsen, dat hij probeert uit de reikwijdte te komen van de vijand.

Filed under  //   game  

Update Spacing out

Screenshot--home-matthijs-work

Nou na best wat werk werken de geo functies behoorlijk netjes. Het neerzetten van een gebouw neemt nu daadwerkelijk ruimte in op het landschap, en er wordt rekening gehouden dat een gebouw alleen op vrije ruimte geplaatst kan worden.

Filed under  //   cucumber   game   postgis