Fractal Block World
Fun Facts
Back
Here are some fun facts about the game
and the making of it.
Only One Block Texture
Originally, there was only one block texture
(the grey concrete one) and I thought it would be
cool to keep it that way.
However, blocks where shaded depending on what level
they were on.
As you went deeper, blocks would gradually change
to green, and then to yellow,
then to orange, then to red, then to purple etc.
Then they would go back to grey
and the colors would repeat again.
I ended up adding more block textures because I realized
I had no clue where I was when I played the game.
Copyrighted Sounds
There was lots of copyrighted media I wanted to use, but did not.
Here is a partial list.
When starting a new game (classic, not genesis)
on the Torture Mode difficulty, the following audio clip would play:
the part of Dredd (2012) where Dredd is asking his gun for ammo,
but he only has a high ex round, and then he shoots a bad
guy in the head with it.
When starting a new game (classic, not genesis)
on the Pain Addiction difficulty, the following audio clip would play:
the part of Total Recall (1990) when he guy says "don't do it...
the dome will crack".
When starting a new game (classic, not genesis)
on the Caustic Eutopia difficulty, the whole clip of Filthy Frank
saying it is time to stop would play.
The credits song after the Inner Core
("Final Boss") was "Rainbow Blood" by Sadsic.
The credits song after the Omega Core
("Final Final Boss") was
"The Sea" By DJ Contacreast.
When entering the Hell Flower (in classic, not genesis),
in the big battle before the final boss,
the music would be "Causic Disco" by VAC,
the mindless faith remix.
Other songs that I thought fit the atmosphere
of the Fractal Block World:
- Genesis by Grimes
- Heavyweight by Infected Mushroom
- Clockwork by Deadmau5
- Plague by Crystal Castles (not a perfect fit)
C++ and "Fun" With Memory and Pointers
The console (which you can open by pressing ~) was
written from scratch, along with the command system.
Commands are Lisp style S-expressions.
I wrote most of this for Block Arena.
That is one of the many reasons that project was never finished.
This program was written in C++
(and scripts are in Lua).
Pointer bugs resulting in memory corruption are scary.
To help avoid these memory issues, in some places I use my own pointer class.
I am not sure what is the official name for my type of pointer.
I have not had luck finding it on the internet.
Let us call these pointers "John Wick" pointers.
Many John Wick pointers can point to the same object.
From any John Wick pointer, you can delete the object,
which will result in all the John Wick pointers to the object
being set to null.
Also, if the last non-null John Wick pointer to an object is
destructed, the program exists outputting the error that
there is a leak.
John Wick always releases memory when he is done with it.
If not, he dies.
One downside to these pointers is that the throwing
of exceptions does not work so well.
A second downside is that these pointers are not thread safe
(at least not in the way they are implemented).
A third downside is they take too long to be copied.
For these reasons, sometimes we use C++ shared pointers instead.
Games That Influenced This One
Other games that influenced this one:
- The Infinifrag/Infiniminer series (around 2007) (and I had the honor of workong on Infinifrag 2)
- Descent (1995)
- Diablo 2 (2000)
- Ken's Labyrinth (1993)
I think it would be difficult but very rewarding
to make a game that combines aspects of
Infiniminer, Fractal Block World, and Diablo 2.
Overpowered Ammo Boxes
In an earlier version of the game (classic, not genesis),
ammo boxes would refill your ammo a certain percentage.
For example, there was a 20% rocket ammo box,
which would give you N rockets, where N is 25% of
the maximum number of rockets you can have.
I removed this because I thought it made the game too easy.
Note that health boxes work this way.
There were also special ammo boxes that give you ammo beyond
your 100% limit.
One Way Walls
One-way walls were added late in development.
Before this, there was a gadget that was a tube
with green rings, then a plug, then red rings
which would allow you to go through an anti-plug.
Projectiles Spawning Projectiles Spawning Projectiles
I wanted monsters to launch a rocket at the user.
And then the user might shrink, but the enemy rocket
would spawn a smaller rocket which would home in on the user.
Then that smaller rocket may launch an even smaller rocket, etc.
This never really worked out, but it was one of the reasons
for having time move slower on coarser levels.
Having levels have time travel at different speeds turned out
to be a headache for development.
Battle Before Final Boss Was Too Hard
I wanted the battle just outside the Inner Core final boss
to be very epic.
However, it took many many hours to get powerful enough
to get through it.
I ended up making the final battle significantly easier
that way the game can be beaten in a few hours.
While making the world, I wanted it to be difficult
for someone to figure out how to route
a good speedrun.
My goal was for there to be several very different strategies
for how to speedrun the game.
Where The Idea Came From
If you are curious, here is where the idea for Fratal Block World came from:
At RPI Zach Barth and I were walking around the "86 Field" talking about Infinifrag 2
and he asked if that game should have a level of detail system.
I said that I thought it didn't make sense to have that in a block based game.
But his comment stuck in my mind.
Years later I was thinking about how in a world where most blocks are of a certain type,
you only need to store the blocks that are not of that type.
But how do we have efficient memory storage in a world where certain regions have
their own default block type, but these types change from region to region?
The idea for this game was a reasonable way to try to kill these two birds with one stone.
Chunks from a distance are rendered as blocks, and chunks only store the blocks
of non-default type (each chunk has a default child block type).
Also, either in 2012 or slightly before I had this trippy dream
which was basically like flying through the "Burlington" area in this game,
shrinking and shrinking.
When I woke up, I thought "let's do this thing",
and I committed to coding it up.
Close to this was when I had the a-ha moment that the system in this game was the
most practical way to get both level-of-detail
and efficeint storage of non-default type blocks.
The a-ha moment caused me to stay up almost all night,
which was the night before going to Cedar Park with some friends!