This game has unused code.
This game has a prerelease article
Crazy Machines is a puzzle game of Rube Goldberg contraptions, and revolutionized the genre of "games you randomly find on a school PC".
Where's my screwdriver?
- 1 Sub-Page
- 2 Versions
- 3 Debug Features
- 4 Unused Assets
- 5 Revisional Differences
The game had four main releases, with the latter three introducing new elements, puzzles, and bugs:
- Crazy Machines: Inventor's Workshop (2004)
- Crazy Machines: New Challenges (September 27, 2004)
- Crazy Machines: New From The Lab (October 15, 2005)
- Crazy Machines: Inventor's Training Camp (October, 2006, co-released with Oetinger Entertainment)
By unique elements and features, New Challenges is a superset of Inventor's Workshop, while both New From The Lab and Inventor's Training Camp are supersets of New Challenges (internally, Inventor's Training Camp is based on the New From The Lab-era engine with features cut). New From The Lab and Inventor's Training Camp have their own mutually-exclusive features.
Quirks of all versions are described on the same page, as the internal differences between them are minor.
Present in all versions. It cannot be enabled legitimately and instead is controlled by two values in memory (one for FPS display and another for debug screen). If the latter is active, the following values are shown:
- Main: time elapsed since start
- Game: time since last game mode change
- nMode: current active dialog window
- Number of objects present (not necessarily rendered)
- Conn: number of power/belt/rope connections, counted by endpoints. Equals 2 when two elements are connected with one cord
- Elements: number of elements (objects placed by level creator or player) on the field
- MOFuze: possibly the pointer to the object of a fuze being edited right now
- Sel: number of elements being in selection, posrel indicates whether they are being dragged around.
- Belts: number of power/belt/rope connections, counted by cords. Equals 1 when two elements are connected with one cord
- PSs: particle systems. Examples include flames, windmills, bombs, etc.
- FMs: unknown
- ZoneBorder: corner. Not present in Inventor's Workshop, as zones were not a feature yet.
- InGoal: number of elements with hit goals
- Drawn: number of objects drawn to the screen.
- SVB: unknown, possibly related to shadow volume recalculation.
Physic Model Display
This is definitely present in New Challenges and New From The Lab. Its presence and functionality in Inventor's Workshop is to be confirmed.
For every model, the game uses a collider composed of spheres and boxes. Much like with the debug screen, there is an option to render these hitboxes but it is buried in the code.
Some 3D UI elements (editor tabs, buttons, etc.) also use hitboxes despite not being processed by the physical engine. In this case, hitboxes are used to determine a hit when the player's inputs are raycasted.
Since the first release an unimplemented element is mentioned in a translation file (
This oddity is carried into localized versions ("Centrifugal belt" in English, "ИЗМЕРИТЕЛЬ ЦЕНТРОБЕЖНОЙ СИЛЫ" [Centrifugal force meter] in Russian). Its design and purpose is unknown.
All versions include a "golf ball" model (
data/models/ball_golf.ucm). There is no texture, shader, or other references to it outside of model loading script. It was most likely replaced by the tennis ball because of similar size, easier recognition, and the naturally-complicated texture of a golf ball.
Inventor's Workshop and Inventor's Training Camp (they have a similar title screen, but the latter lacks the start screen lamp) include an unused model named (
data/models/startscreen_lamp_chainlink.ucm). This may indicate the start screen lamp in Inventor's Workshop was originally meant to be hanging on a chain, as opposed to a blue power cord.
Unused Gravity-Related Texture
The textures directory contains a file named
power_gravity_disc.ucm (not used anywhere). It is notable this is the first finished texture for New Challenges (official demos preserve modification datetime of files), indicating it was used for an early version of the gravity machine.
elements.fsc code for the zeppelin refers to
to_wind_zeppelin_rotor (spinning yellow propeller). However, there is an identical section of code describing
to_wind_zeppelin_motor which refers to a nonexisting motor model. This may indicate the zeppelin used to look differently. It might also be just a simple name change, though.
New Challenges and later games have items for a continuous series of IDs (1 to 79 at least) except for 57. It is unknown if this ID was used for a removed element or it was just an accidental number skip.
New From The Lab
An unfinished bell element with a model (
data/models/bell_clapper.ucm), ringing sound (
data/sounds/fx/bell.wav), and element description:
bell clapper is also movable, element
objective has been attained when the bell
rings, ropes can be attached to the lugs
...and a definition in
scripts/elements/elements.fsc. However, it lacks a shader and a texture. It is not assigned an ID and is not accessible from within the game.
elements.fsc files for New From The Lab and Inventor's Training Camp contain a definition for
rope_pulley element, commented out. The element is not referenced anywhere outside this file. The reason for removal is most likely the restrictive nature of rope physics in the game.
Picot wheel and ID 85
New From The Lab uses ID 83 for its
bucket_wheel element. However, its code also treats ID 85 as a functionally identical (or at least very similar) element. The game also contains an unused model named
belt_picot_wheel.ucm, not referenced in any .fsc or .vsc file. It has no corresponding texture, and its UV map is incorrect (most probably autogenerated and never fixed). This model has four hooks for attaching ropes along with a standard-sized wheel for drive belts (no other element contains both). Most probably, ID 85 was used for this element before its partial removal.
Starting with New Challenges, it is possible to place elements in invalid positions (out of bounds or overlapping) by causing the context menu to pop up, press-holding any yellow button, and dragging the element by it.