This is still a work in progress but when I think I've got it in a little better shape I'll zip the tables up for all to share. These are just mods of the tables the game comes with. There is a table editor called Pinedit created by the games' author but it is outdated and won't compile with newer Ubuntu. It's a shame because it looks pretty good and I'd make lot's of different tables.
Now to mod:
The game data installs by default to: /usr/share/games/pinball
There you will find two files named "Tux" and "Professor". These files have a config file, sounds, and graphics, that's all you need to change the tables to whatever you want. The config files are named "pinball.pbl". They are plain text files but "Tux" has 17,780 lines of code with no comments -Uggh. The program is written in C++, I'm not C coder but I learned some things schlepping around through the source code nicely hosted at Sourceforge.
First off when you open pinball.pbl in an editor you will see:
version { 0 3 0 }
object walls {
0 0 0
0 0 0
1 1 1
shape {
vts { 404 }
pls { 192 }
bhi { }
vtx {
-4 1 37.3
0.2 0.2 0.2 1
0 0
}
To figure all this out I put my Vulcan ears on and, this being a 3D game, looked for co-ordinate points X,Y,Z and started tinkering. Sure enough after many tweaks, saves and reloading tables I deduced:
object {
- Location
- Rotation
- Size
...
}The object "walls" in the former are the walls around the table perimeter, other walls are within their respective objects like "bumper" and the "arm". Here the first two sets of values are empty because "walls" is a container object, the walls of the table are actually described below in an array of vertices in the "shape" object. If you change the third values in from 1 1 1 to 2 2 2 the walls around the table will grow taller. -Kooky stuff. Version 0 3 0 must remain at the top or your mod won't work.
Next is the "shape" sub-object which is declairing 404 vertices and 192 polygons (-don't know what a bhi is yet but sometimes you see hid for hidden objects, like event handlers) and goes on describing the shapes in source order of the vertices and are structured like so:
vtx {
- location: x y z
- color: r g b a (a is for alpha, never seen it set to 0)
- image position
One important thing to note that threw me off for a while is the coordinates x y z are looking down on the table. I thought at first it was x z y. To unwarp my mind I repeat to myself "y can poke you in the eye" when adjusting objects around the table. -Yeah, I'm a geometry whiz...
There will be 404 vtx{} to follow (see last line of this paragraph).I have been unable to figure out at this point how the game reads co-ordinate points for images, it's painful too, tweaking these values does weird things to images but "image position" shows all surfaces can be skinned with images. *raises eyebrow* Interesting... I really wish the author would update Pinedit.
Update: After more schlepping around through the source code I gleaned that part of one of the trade off's of making the config files for the tables plain text, polygons are converted into triangles. This makes editing these tables by hand almost impossible without the table editor -unless you're really good at holding lot's of numbers in your head, -hence massive confusion with figuring out coordinate points for images.
Also, polygon points are all children of the parent array and there can be only one image per array. Bummer.
All together now:
version { 0 3 0 }
object walls {
0 0 0 /*Object location: x y z*/
0 0 0 /*Object rotation: x y z*/
1 1 1 /*Object size*/
shape {
vts { 404 } /*Number of vertices in this object*/
pls { 192 } /*Number of polygons*/
bhi { } /*?*/
vtx { /*Beginning of vertex array*/
-4 1 37.3 /*Vertice location x y z*/
0.2 0.2 0.2 1 /*Vertice color r g b a*/
0 0 /*Vertice image overlay position*/
}
The Professor table is a good table to start modding. It has less code and doesn't have as many features as Tux, plus it hurts the eyes, let's do something about it.
Copy the Professor file and rename it to -say Icetux, for example, and it will come up as a table option to load when starting Emilia.
The easiest and most effective mod is to change out the table floor graphic. Edit pinball.pbl and go to line number 4582:
shape {
vts { 225 }
pls { 196 }
bhi { }
tex {
professor.png
}
Change "professor.png" to whatever graphic you want -heh family photo's, whatever. The default table floor graphics are 256px by 256px. Make your graphic 256 by 512 to minimize distortion from the game stretching the image into a rectangle. The larger the graphic, the less distortion from the 3D tilt of the board too. I just dropped in the Tux icon from the Crystal icon set from KDE and did some quick gradients and airbrushed in some snow with the GIMP in the example on the right and named it "icetux.png" and saved it into the Icetux folder.
shape {
vts { 225 }
pls { 196 }
bhi { }
tex {
icetux.png
}
So now we have a decent looking table but with every improvement you make, you see something that needs to be improved. That's how these things get you. The barreness is one thing and the wonkyness of the "under construction" wheel are glaring now. Fear not, we'll spice this puppy up.
You might want to switch off the game music while modding. Use your editor to find "table_start" and mod the following code:
state_item {
table_start null -1 -1 -1
no_move
no_light
no_sound
music introp.ogg /* Change to: no_music */
no_user_property
no_shape_property
no_texcoord
no_shape
}
state_item {
game_start null -1 -1 -1
no_move
no_light
no_sound
music professor.ogg /* Change to: no_music */
no_user_property
no_shape_property
no_texcoord
no_shape
}
This requires a game restart to take affect.
Now that the music is off we can notice that plunger makes no noise when it whacks the ball. Easy to fix. Use "find" in your editor and look for "plunger":
plunger_behavior {
no_sound /* Change to: sound shoot.wav */
}
Then copy "shoot.wav" into the Icetux directory from the Tux directory. You again need to restart the game for this to take effect.
You may notice the table looks dark and grungy. I've done a hack to raise the table floor closer to the main light source.
object floor {
0 0 0
0 0 0
1 1 1 /* change to 1 2 1 */
shape {
vts { 225 }
pls { 196 }
bhi { 100 }
tex {
icetux.png
}
Much better. I may live to regret this though because other objects will remain dark and grungy (notice the ramp) and they may not be hackable in this manner. There may be a better way to deal with lighting overall.
In my persuit of this hack, however, I think I stumbled on a way to make a background for the game. -We'll save that for later.
Now for that "under construction" thing. Search through the code for an object named "wheel".
Copy the image I Gimp'd up to the right and save into Icetux directory:

object wheel {
-8.93333 0 -30
0 0 0
1 1 1 /* change to 1 1.5 1 */
shape {
vts { 44 }
pls { 35 }
tex {
rail.png /* change to berg.png */
}
Cute, an iceberg. I'm sure Tux is pleased. 
You can have some fun going down the list of vertices changing the shape of the berg but it's too much code to display here. I zipped this early mod up and posted it here.
It's really hard to give up on this after so much work and being so close to beta where I can actually have fun tweaking the look and feel of this table and experiment with trying to hack in a background. I'm thinking of asking for help and am contemplating putting up an Email reply to here that I can ditch when the spam bots swarm. The things keeping this from beta, priority from high to low:
- Ball counter skips
- Extra ball trigger not active when t u x targets hit
- That's pretty much it, it is what it is
I've got a niggly suspicion these two are related. They both could conceivably be dependant on one object function in the Tux table. I tried porting all bonus ball objects over but made a nasty mess of Icetux.
I decided to give this little project up shortly after I realized there are inter-object dependency issues in the features of this game (I hate dependency issues). There's some serious wonk with this Professor table, -like the ball can fly off the table almost at random. The ball counter skips even numbers (which is weird b'cuz the game is built to be modular, only the config files are supposed to change between tables, in theory). I wish I was all into this 6 years ago when the whole thing was fresh.
Anyway, I'll zip up all my work and post it here for download just for fun.
