Table of contents
Bamboozle Machinae II v1.03 (homepage) for Windows

Insert a standard disclaimer here. You know the drill. I'm not responsible for any damage, physical or mental. I do not accept responsibility for any effects, adverse or otherwise, that this code may have on you, your computer, your sanity, your dog, and anything else that you can think of. Use this at your own risk. It should of course be noted that it is unlikely that anything bad will happen. :)

Coding, graphics, music, pretty much everything : Juha-Pekka Yli-Rahnasto (Inphernic)
Sound effects : Public domain (found from www.flashkit.com)
Font : Fundamental Rush by Ben McGehee (free for use in non-commercial applications)
Beta testing : Krzysztof Kluczek, ReyBrujo

Additional suggestions and bug reports : Carl Olsson, ReyBrujo, Rob Fletcher, X-G, Zaphos

A big "thank you" goes to the programmer(s) of the following free libraries (which are used in this game):

Allegro - http://alleg.sf.net
AllegroGL - http://allegrogl.sf.net
AllegroMP3 - http://nekros.freeshell.org/delirium/almp3.php
Features and details that were not part of the original game plan and were implemented later are listed as ADDED. Features that were fixed, not matter whether they were new or old, are listed as FIXED.
Version 1.03
  • ADDED: Added block modding possibility (more in "Tips" section)
  • FIXED: Added difficulty
  • FIXED: Revised scoring (overkill bonus reduced, combo bonus increased)
Version 1.02
  • ADDED: Added difficulty levels
  • ADDED: If you switch out of BM2 while it's running, the "Aggressive task" setting will be reduced to 0 until you switch back in (in order to play even nicer with multitasking)
  • FIXED: Fixed a crash issue related to starting a new game
  • FIXED: Fixed an issue that occasionally caused the ending to be skipped if the game was completed at least once during the same session
  • FIXED: Fixed an issue that occasionally denied you from the game completion bonus
Version 1.01
  • ADDED: If you complete a level, the background on 'Aftermath' will be blue instead of red
  • ADDED: Made line detection more efficient, giving a more 'real-time' feel
  • ADDED: The piece you have currently picked up does no longer count as a part of a line
  • ADDED: Selection visuals in 'Options' were made less vague
  • FIXED: Balanced scoring based on user feedback
  • FIXED: Bugfixes to line detection (it missed some cases)
Version 1.0
  • Initial release
Bamboozle Machinae II is a sequel to the game Bamboozle Machine (duh), which was originally created in three days for the Allegro Speedhack '03 competition. I didn't want to leave the concept to gather dust in a corner, so here is a "slightly" improved version of the original concept.

Estimated requirements:

- 400MHz CPU
- 16MB of free RAM (64-128MB of actual RAM depending on your computer)
- DirectX 6
- OpenGL-compatible video card
These parameters are completely optional, and can be used to force some settings (for example when creating a shortcut to the game). Every one of these options can be changed from the configuration file as well. If you encounter any problems when starting the game for the first time, try to force some of these settings!
-width=X

..where X is the desired screen width, for example 320 or 640. By default, BMII will try to set a resolution half the size of your desktop, and fall back to 640x480 if it can't.
-height=X

..where X is the desired screen height, for example 240 or 480. By default, BMII will try to set a resolution half the size of your desktop, and fall back to 640x480 if it can't.
-depth=X

..where X is the desired screen bitdepth, for example 16 or 32. By default, BMII will try to match your desktop colour depth, and fall back to 16 if it can't.
-fullscreen=X

..where X is either 0 or 1 (0 = windowed, 1 = fullscreen). By default, it will try to go fullscreen.
Ever played a game where you are supposed to make lines of blocks? That's what BM II is mostly about. You'll have to line up at least three blocks in a column/row to destroy them and get points. If you line up more than three blocks, you get a combo and bonus multiplier. See the scoring section for more information on how these multipliers behave.

So now, you form lines of at least three blocks by either picking up one block and placing it somewhere else, or rotating a whole plane at once. The playfield is like a Rubik's Cube - a 3D cube with coloured blocks. You can take a peek on the left and right side of the cube as well, to check if you should rotate a plane or not. You can pick up blocks, and drop them anywhere on the field. When you drop a block somewhere, the block you are 'carrying' will switch places with the block in the specified location. You will also be fighting against time. The level will end when the level time reaches zero. If you have reached the target number of destroyed blocks, you have completed the level. If not, you have failed. You have three continues, so you can replay the level you have failed. The points you gathered from that level will be ignored if you decide to restart the level. When you run out of continues, that's it - Game over!

This will all make more sense in the actual game. :)
HUD reference:



1 - Score display
This will display your current score.
2 - Block and level display
The two block images help you to remember what colour the block you have picked up is. The number in the middle is the current level.
3 - Level target
The value on the left tells you how many blocks you have destroyed in this level. The value on the right tells you how many blocks you have to destroy to complete the level. When you have reached the value (completed the level), these numbers will turn yellowish.
4 - Block pickup and block pointer
When you pick up a block, it will shift closer to you - in this case, the black block has been picked. The white/red circle is the block pointer under your control.
5 - Time
This shows your current time left. You must destroy enough blocks to reach the level target before time drops to zero!
6 - Combo multiplier
This displays your current combo multiplier.
7 - Bonus multiplier
This displays your current bonus multiplier.
AN IMPORTANT NOTE ABOUT SCORING: Scoring also depends on the difficulty level you play on! You will get the least points from playing on "Easy", and the most from playing on "Hard". The following scores will be in the format x/y/z, where x is the amount of points you'd receive on "Easy", y on "Normal", and z on "Hard".
Block destruction - 50/80/120

You will receive this for every block you destroy.

You will also receive some extra points for every block. The amount of these points increases by level and level size (high level + small cube = lots of extra)!


Overkill bonus - 15/24/36

You will receive this bonus for every block that you destroy after reaching the level target. If you play on "Normal", destroy 30 blocks and the level target is 20, you'll get an overkill of 10 (meaning 10*40 = 400 points extra).
Level complete - 5000/8000/12000

This is a bonus you will receive when you manage to complete one level.
Game complete - 50000/80000/120000

This is a one-time bonus, and you'll receive it when you have completed all of the levels in the game.
Bonus multiplier

You can receive extra points every time you get points! This is because of the bonus multiplier. To activate the bonus multiplier, you first have to make a combo of four blocks. This will add to your bonus multiplier (blocks destroyed minus 3), and then it will be easier to collect more. Effect increases with level!

One plane rotation will halve your bonus multiplier!
Combo multiplier

To activate the combo multiplier, you first have to make a combo of four blocks. This will add to your combo multiplier (blocks destroyed minus 3), and then it will be easier to collect more. Your combo multiplier will drop to zero after a second of idle time. If you manage to destroy more blocks when your multiplier is active, they will be directly added to the multiplier (instead of having to destroy over three blocks this time). After the combo multiplier times out, you will receive some extra points. Effect increases with level!

One plane rotation will halve your combo multiplier!
These are the default controls:

(UP/DOWN/LEFT/RIGHT) ARROWS - move up/down/left/right (menu and in-game)
(CANCEL) ESC - cancel (menu) + pause (in-game)
(OK) SPACE - select (menu) + pick a block (in-game) + drop the carried block (in-game)
(ROT.CCW) Q - rotate a plane CCW (in-game)
(ROT.CW) E - rotate a plane CW (in-game)
(P.RIGHT) A - peek on the left side of the cube (in-game)
(P.RIGHT) D - peek on the right side of the cube (in-game)
If the game runs too slow or stutters, try:
  • matching the colour depth to the desktop depth if you are playing windowed (for ex. set 16 if your desktop colour depth is 16, and so on - can be changed only from user/machinae.cfg)
  • disabling "Resource flushing" by setting it to 0 - this will use slightly more memory (can be changed only from user/machinae.cfg)
  • reducing the screen resolution / bit depth (can be changed only from user/machinae.cfg)
  • playing in fullscreen
  • increasing the "Aggressive task" setting to 1 or 2
  • setting the "Eyecandy" setting to 0
  • disabling music (set volume to 0)
The "Eyecandy" setting controls the level of detail in some parts of the game. Possible settings are 0 (lower detail) and 1 (higher detail). The game must be restarted for the change to take full effect (some textures etc are generated on the fly based on this setting).
If the game doesn't like to play nice with multitasking, try:
  • decreasing the "Aggressive task" setting to 0 or 1
The "Aggressive Task" setting controls the timing policy of the game. Possible settings are 0 (use only cycles that are necessary), 1 and 2 (hog all the cycles available).
Note that time doesn't count if:
  • a plane of the cube is rotating
  • the blocks are falling to occupy empty spaces
Use this for your benefit!
If you would like to change the default blocks, that it possible - you can texture the blocks with almost anything you want! Make eight images and save them under the data-directory as Targa image files (extension .TGA) with filenames like this:
  • block1.tga (corresponds to the default white block)
  • block2.tga (corresponds to the default pink block)
  • block3.tga (corresponds to the default cyan block)
  • block4.tga (corresponds to the default yellow block)
  • block5.tga (corresponds to the default blue block)
  • block6.tga (corresponds to the default green block)
  • block7.tga (corresponds to the default red block)
  • block8.tga (corresponds to the default grey block)
Some pre-made block skins will also be provided at the Bamboozle Machinae II homepage, so check them out!
There are some settings available in user/machinae.cfg which can't be changed from the game:

  • [Video] / Depth - Controls the colour bit depth (available also as a command-line switch)
  • [Video] / Width - Controls the screen width (available also as a command-line switch)
  • [Video] / Height - Controls the screen height (available also as a command-line switch)
  • [System] / ResourceFlushing - Frees some resources when they are not in use anymore
  • [System] / Statistics - Displays the triangle count, dropped triangle count and drop efficiency