Piero V.

A journey into GameCube music

One evening, a pair of weeks ago, I was pretty bored, and I did not want to do anything too demanding. Somehow I reminded Burnout’s soundtrack, and I wondered: is it possible to extract it from the original disk instead of relying on YouTube, or something similar, to listen to it?

Loading GCMs on Linux

I dumped my Burnout disk with some Wii homebrew 8 years ago or so. That time, I named it with the .iso extension, but GC disks are not ISO 9660 standard. They have a proprietary format that the community dubbed GCM.

Even the file utility can detect that them:

$ file burnout.iso
burnout.iso: Nintendo GameCube disc image: "Burnout" (GBOP51, Rev.00)

So, I downloaded a tool called simply gcm-tool. Man, many years have passed since the last time I download something from Google Code!

And I love that people provided an executable and its source code, in plain portable C or C++, without any GUI or additional dependencies. So a gcc *.c gets the work done, and using the wanted tool is immediately possible. … [Leggi il resto]

A dynamic character controller for Bullet?

Or, how I tried to create a dynamic character controller for Bullet, but eventually (almost?) gave up.


I like spending some time using the Bullet physics library, I already wrote some articles about my experiments with it. This time, I wanted to create a custom character controller.

Bullet alread provides a (kinematic) character controller, but in general it is not regarded as a good one. I also tried to study a bit its code, but, in my opinion, it adds many complications without reason, and even something like managing in the correct way the velocity is a big problem with it. Indeed, Erwin Coumans himself (the main Bullet developer) said that btKinematicCharacterController is not supported anymore.

Therefore I decided to write my own one.

There are two kinds of character controller: kinematic ones and dynamic ones.

The former use the Physics engine, if any, just for collisions, and compute all the movements by themselves. This was the only way at the beginning of the video games, since there was not any Physics engine at all, but only some code for specific purposes. … [Leggi il resto]

LibGDX e formati personalizzati di modelli


Di tanto in tanto mi diletto con motori di rendering 3D e game engine. Questa volta è satato il turno di LibGDX.

LibGDX è un framework per lo sviluppo di videogiochi 2D e 3D scritto in Java.

Il suo scopo è quello di rendere disponibili delle API Crossplatform (Windows, Linux, Android, OS X, iOS etc…) per il rendering 2D e 3D (OpenGL ES), la matematica associata, l’audio (OpenAL, Ogg ed MP3) e la fisica (Box2D e Bullet). Inoltre, dove possibile, usa metodi nativi scritti in C per aumentare le prestazioni, ma essendo scritto principalmente in Java, permette l’uso qualsiasi classe dell’enorme libreria standard o qualunque libreria scritta nello stesso linguaggio.

Un altro punto di forza di questo progetto è la grande community che vi è attorno, constatabile anche nel numero di stelle su GitHub.

Forse è merito anche della licenza, molto permissiva: la Apache License 2.0.

Formati di modelli personalizzati

Uno dei miei obiettivi, che prima o poi potrebbe diventare realtà, è fare un gioco, magari anche piccolo, ma compatibile con le mappe dei vecchi Call of Duty 1 e 2, con cui ho giocato molto in LAN con i miei amici. … [Leggi il resto]

A note about Call Of Duty 1/UO BSP maps

Call Of Duty 1 and its expansion, United Offensive, are based on the Quake III engine, therefore they share some of its features, like a Binary Space Partitioning to describe maps, even though the format isn’t compatible.

An article copyrighted 2000 describes very well the BSP format of Quake 3. It’s interesting, because it’s the very base to understand CoD, too, at least its devision in lumps and some of them.

An article on “Mappers United Wiki” depicts the lumps of CoD 1 maps and the size of single lump, but they aren’t explained. Luckily in the same site there’s an article on CoD 2, and most of the structs are equal.

So I’ve tried to render them, but I’ve only managed to build the geometry of maps. … [Leggi il resto]

Bullet e pendii

Se avete avuto a che fare con la libreria per la simulazione della fisica Bullet e dei pendii (colline, rampe), sarete sicuramente impazziti cercando di risolvere il problema per cui il corpo non sta fermo nel pendio.

È capitato anche a me, così dopo ore perse dietro, cambiando appena una parola chiave su google ho trovato la soluzione: come riportato qui, dovete fare così:

World->getDispatchInfo().m_allowedCcdPenetration = 0.0001f;

dove world è il vostro Bullet World.

Se usate Panda3D per ottenerlo dovete fare world->get_world().

Spero sia di aiuto a qualcuno!