World Train Royale is Free! (as in beer and speech)
By J.Raza On June 26th, 2011Hello everyone, just coming here to announce that World Train Royale is now free! You can download the game + source here.
Enjoy!
Hello everyone, just coming here to announce that World Train Royale is now free! You can download the game + source here.
Enjoy!
Every now and then I remember playing the games I used to play as a child. One of those games was Super Mario World for the SNES. The reason why I bring this up is because of this very cool trick you could pull off in the Forest of Illusion level. With it, a semi-skilled player could go from 0 to 99,999,990 points in a few minutes.
Here’s the video displaying you how to do it, it’s pretty neat:
Now as you watch it, you can see Mario jumping from Wiggler to wiggler, and while he does that he gets points and extra lives. Here’s the screen shots of his points:
And as continues to bounce, the lives he gets:
However on the 7th wiggler jump he gets this symbol:
And then this one:
And so on and so on:
When I was 9 years old and saw those symbols for the first time, I had no idea what they were. The manual where I read this secret trick from said they were “secret super symbols that show how awesome you are!” But after reviewing this video a few times, I think I have a different opinion on what it might be: an offset pointer in video memory going haywire.
To understand what I mean by that, let’s have a quick discussion. In classic consoles programming, for an image (normally known as sprite) to be drawn into the screen, it’s done in the following sequence:

Given that condition, here’s one of the most basic animation algorithms for sprite based rendering. You’d load a sprite such as this:
Into memory and you’d use the sprite render pointer offset to interpolate between the frames. So you’d start with coordinates (0,0), then after a few fractions of a second you’d switch to (1,0), then (2,0) and so on. Via this method you’d get an animation such as:
Given that technical description and the above Super Mario World glitch, here’s my assumption of what went wrong:
So say the player jumped on a wiggler. The jump_counter would increase to 1 and render 1000 points. If the player jumped on another wiggler, the jump_counter would go to 2, and render 2000. As the player continued to “bounce” around, this process would continue.
So my assumption is that the algorithm was basically:
if( player_jumped_on_bouncy_object() )
{
Jump_counter++ ;
Points_variable += power_of_two( jump_counter ) * 1000;
player_lives += ( jump_counter > 4 ) ? jump_counter : 0 ;
ImageHandle Image_to_render = memory_offset_via_jump_counter(jump_counter);
Render_image( get_player_bounced_pos(), image_to_render ) ;
}
Now let’s explain the above pseudo-code:
Simple, isn’t it? However there’s a bug in the above pseudo-code. We can only retrieve valid image handles when the jump_counter’s range is from [1,7]. What if we make a request when jump counters is equal to 8 and above?
And that’s the catch! We get an invalid pointer offset to somewhere else in memory! Since that memory area is used for what’s to be displayed on the screen, we get bits and pieces from other sprites.
Obviously this is all an assumption of what went wrong. I could be incredibly incorrect in my analysis, but at least it’s worth a shot. What are your thoughts on this one?
We’ll it took a while, but I managed to finally finish reading Michael Abrash’s Graphics Programming Black Book:
In some ways I feel ashamed to say that I ‘read’ it because it’s a behemoth of knowledge spanning over 1200 pages. Of course I learned a lot from it but it’s the sort of book I’ll read again and again and again until I can finally grok it. It’s a collection of over 10 years of Abrash’s papers and I doubt one can absorve it in a matter of months.
You see to learn programming concepts in a self taught manner I think it’s crucial to not only read the code in the book, but also write it down, play around with it, to truly understand what is being taught in its finer details. With my current project I intend to do just that, since it’s a FPS and the last chapters on the book concern directly with Quakes development at id Software, where Abrash worked.
What’s more interesting is that the author doesn’t focus only in the development aspect of programming, but in the general mentality of it. Not as one solves a problem, but the mind that solves it. As you become better in development I think you ask yourself less “how to solve this problem” but more of “what is the best way to solve this problem”. Abrash shows us several ways to solve a problem in the book, be it linked lists, spatial visibility or making a faster game of life, each one consistently faster than the other with either assembly optmizations, algorithm optmizations or rethinking the whole approach to the problem. The idea is to not expect that there is only one way to handle an issue. In his own words : “Assume nothing”.
The book is also quite pleasant to read, since the author narrates the development cycle more as a journal than a tech book. It’s quite interesting to read the last chapters where he focus on making a faster rendering back-to-front polygon rendering approach to Quake. Almost goes like this:
March 14, 1941. We begin our approach to the BSP tree, were still having heavy losses on how to figure out a way to make the spatial visibility problem faster. The worlds we want with Quake feature at least 5000 polygons and in the worse case scenario we redraw each pixel 5 times. It’s too slow, we must take a better approach.
May 22, 1941. We sucessfully managed to create a potentially visible set (pvs) that managed to break into enemy lines. We will now proceed to use it to flank their defeneses.

June 10, 1941. We have now conquered the enemy’s battlefield. I’ve reduced the inner loop of the rasterizer to 2.5 cycles per texel. We decided to use z-buffering for drawing the enemy meshes, since it’s faster and not that big of a problem as we expected. Victory is eminent.
And so on. Overall the book can be divided into 3 parts:
I recommend it to anyone that’s interested in taking game development or programming in a seriously yet elegant manner. I learned a lot from it, and still intend to learn more.
Few days ago I got fan mail from a game I developed, Solis.
The e-mail I got basically complemented the game, saying he liked the style but thought it had too much text hahah. Always good to get feedback from my projects.
Solis is sort of a special project to me. It was the first BIG project that I developed and every now and then I check how many downloads it managed to get (5000+ and counting). It`s not a big project and it ain`t no RPG Maker killer but it was a fun game to make.
With this game I learned 3 very important things:
And I guess that`s it. There was one interesting side effect of developing this game though… and hasn’t faded yet:
I never managed to play a JRPG again. Ever. I finished Solis and could not stand looking at JRPG…. Pretty weird heh.