About the Game
You can build a car with rack and pinion steering and a working drive-train with a differential gear. Or you could make a run-and-jump parkour course with motorised bouncy platforms, or an unstoppable walking mechanical elephant. The only limit is your imagination...and physics.
Create
Build or repair your creations anywhere on the map. Snap parts together, resize them, change their materials, paint them, and link their behaviours together. Choose from over 200 parts, including functional mechanical elements such as motors, gears, pulleys, joints, springs, actuators, and much more.Interact
Turn, grab and shove your machines and watch the parts physically interact. Jump into the driver's seat and put your vehicles through their paces. Crash and smash your constructions to smithereens.Improve
Learn how to build with the in-game tutorial scenario. Explore the example constructions to see how they’re put together. Test your builds in the included challenge scenarios.Customise
Make rag-dolls from body parts and use them as your custom player character. Mod the game with Lua scripting to create your own custom tools, scenarios, challenges and mini-games.Share
Share your creations with the community, try out what others have made, and maybe learn a new building trick or two along the way!Screenshots
17 images
Version Information
Steam Patch Notes
Official update history
Those of you who have recently started playing the game, may have gotten stuck in the "Welcome Tutorial". Unfortunately the previous game update broke it somewhat. Stages that expect the player to bind keys to control a part behaviour wouldn't advance, rendering them impossible to complete. Sorry about that!
This is fixed now as of this update. If you have tried the tutorial recently and had problems with it, I'd recommend trying it again now.
Build Tool Manipulator Shortcut Keys
I've had feedback from some of you that the default key bindings used to select the builder tool manipulators is confusing.
Previously they were:
- R - Translation manipulator.
- T - Rotation manipulator.
- Y - Scaling manipulator.
I chose these keys simply due to their physical order on the keyboard, to match the order of the manipulators. However, the common sense assumption would be that R matches (R)otation and so on.
So I've swapped the manipulator order and default key bindings to:
- R - Rotation manipulator.
- T - Translation manipulator.
- Y - Scaling manipulator.
Hopefully that makes more sense now!
NOTE: If you've already modified any key bindings in the CONTROLS settings, these bindings won't be changed. You can either keep them as they were, or change them to match the new defaults.
Light Type Option
The previous game update changed the lights to behave more like incandescent bulbs, where they would "fade" on and off.
Now, lights have a new Type option that lets you choose between incandescent or LED. The LED option is like the original behaviour (i.e. on / off instantly) but it also uses fewer watts.
Bugs
A few other bugs are also addressed in this update, including:-
- Part behaviours not responding to overridden tweakables.
- Electric motor energy charging and discharging problems.
- Part behaviour (such as PID) update issues while frozen.
Thanks as always for reporting bugs here on Steam or in the Discord server!
Native vs. Proton Performance
I've been doing some performance testing, and I'm noticing a useful improvement from a native build over the Windows 64-bit build running under Proton.
Mileage will vary depending on machine specs, scene complexity etc. (possibly OS and driver support too). However I'm hopeful the native build will improve performance for most Linux users.
Specs of my old machine that I used for testing:
- Ubuntu 20.04.6 LTS.
- i7-4790K.
- GTX 1060 3GB.
- 1280x720, v-sync off.
Test results
I used some more complex scenes that are a bit heavier on the CPU (including some awesome player creations from the workshop!)
FPS (frames per second) are approximate with some variability.
Test
Native FPS
Proton FPS
Tutorial Scenario
68
60
Industrial Robot Scene
125
85
Marble Run 1
69
49
CAT Excavator
35
26
Great ball contraption v2
28
21
Tahsis Lumber Co. Railway *
17
17
* This was with one locomotive unfrozen. This was the most complex scene and I didn't see any performance improvement here unfortunately.
I haven't done any more in-depth profiling yet, but just comparing FPS is still quite telling. With the exception of the last scene, these results are showing a performance improvement between 13 and nearly 50%!
Known Bugs
As far as I can tell the native Linux build is functioning properly, except for a couple of rendering bugs.
Tree leaves:
{STEAM_CLAN_IMAGE}/37970304/60484f9c8ac16200627823270f0297a6c53e7fdd.jpg
Text decal z-fighting (to be fair this happens on the Windows build too, but not as bad):
{STEAM_CLAN_IMAGE}/37970304/be04f5559ee8a2a8b9235aafb9c7a3e6f62e5d37.jpg
I will look at fixing these soon hopefully.
Switching Back to Proton
The native Linux build will now be used by default on Linux OS platforms. However, if you prefer to switch back to the Windows build with Proton (e.g. to avoid the aforementioned bugs), you can:-
- Right-click GearBlocks in Steam and select Properties....
- Select the Compatibility tab.
- Enable "Force the use of a specific Steam Play compatibility tool".
- Switch to Proton in the dropdown.
{STEAM_CLAN_IMAGE}/37970304/baa9b78cd591aec0fffd8665ddfbcbfd591861ab.jpg
Let me know how you get on with the Linux build, I'm curious if anyone else sees the same kind of performance gains, thanks!
Bugs fixed:-
- Broken toggle options in "selection" right-click menu.
- Held modifier keys filtering out keys bound to part behaviour control.
- Ctrl + V / C shortcuts not working for part behaviour UI copy / paste buttons.
- Frame rate dropping while using resize manipulator.
- Bad outputs from distance sensors causing NaN in logic modules.
- Servo, stepper, and linear actuator not generating torque / force unless key bound.
Release notes:-
- Added settings to distance and proximity sensors for adjusting their maximum detection range.
- Made distance sensor settings be overridable by linked data channels.
- Tweaked "timed lap" scenarios to allow script mods.
- Bug fixes.
- Upgraded to Unity 2022.3.62f2.
New Flat Map
There's now a new "Concrete Pad" map:
{STEAM_CLAN_IMAGE}/37970304/1dbe9f783c6bb24a98aaade70000d4c5a1e0f3ab.jpg
It's just another boring flat map, but hopefully a bit easier on the eye for long building sessions than the "Flat Plane" map, plus it has no environmental audio.
Part Selection Duplication
You can now duplicate your current part selection.
Select some parts:
{STEAM_CLAN_IMAGE}/37970304/14779633ccfe55691908144c2ed14c52377b7cdb.jpg
Then open the SELECTION menu and click Duplicate Selected (or just press Left Ctrl + D):
{STEAM_CLAN_IMAGE}/37970304/2b957857ebfd0507f413a027d8f845174dfca632.jpg
This will duplicate the parts into new construction(s), with attachments, links, etc. intact:
{STEAM_CLAN_IMAGE}/37970304/e8a3ed5d8539389c923cf098a56df5f1a22551e1.jpg
NOTE: To implement this, I had to change the save format slightly. Any "part intersections" (the red crosses you get after deleting attachments between intersecting parts) from existing saves will be lost.
Deprecated Parts
The engine "front crank" parts are now deprecated, as the "crank nose" part makes them redundant. I can't remove them without possibly breaking existing creations, so they're still in the game, just hidden in the part spawner UI.
NOTE: If you need to get access to these deprecated parts in the spawner UI again, type ShowDeprecatedParts true in the debug console.
Lua Scripting
There's now some additional physics functionality available from Lua scripting, you can now do stuff like:
function FixedUpdate()
if Physics.RayCast( Vector3.__new( 0, 10, 0 ), Vector3.Forward, 1000 ) then
local distance, position, normal, colliderInstanceID = Physics.QueryCastHit( 0 )
local part = PartColliderRegistry.GetPart( colliderInstanceID )
if part then
print( 'Part: ' .. part.FullDisplayName )
end
end
endSee the API documentation for more details: Physics Proxy
Also, typing "LogKeyNames" or "LogAxisNames" in the debug console now lists all available input key and axis names respectively. This allows you to more easily find out what key names can be used in Input.GetKey() etc.
Release notes:-
- NOTE: Changed save format, any "part intersections" from existing saves will be lost.
- Implemented part selection duplication. To duplicate the currently selected parts, click Duplicate Selected in the SELECTION menu, or press Left Ctrl + D.
- Torsion springs now have an option to turn off angle clamping.
- Engine "front crank" parts are now deprecated and hidden in the spawner UI (given that the "crank nose" part makes them redundant).
- Modified the EngineTool script mod to allow choice between showing engine head's timing angle or current crank angle.
- Lua scripting:-
- Added Physics module with methods for raycasts, spherecasts, etc.
- Added PartColliderRegistry, with a method for retrieving a part from the ID of one of its colliders.
- Added an overload of CreateAttachment() in IAttachmentOperations that takes a separate search position and normal for the owner and connected parts.
- Typing "LogKeyNames" or "LogAxisNames" in the debug console now lists all available input key and axis names respectively (to be used in Input.GetKey() etc. for Lua scripting).
- Added Physics module with methods for raycasts, spherecasts, etc.
- Added "Concrete Pad" map.
- Bug fixes.
Weld tool
This is a new script mod tool that allows parts to be attached to one another, without them needing to be properly aligned together.
https://i.imgur.com/MUIANv4.gif
They can even be unfrozen.
https://i.imgur.com/oYoi6wI.gif
Jointed attachments can be created, including rotary, slider, or any other type.
https://i.imgur.com/1qftk2R.gif
Note that the attachment locations are still derived from the part's alignment grids, so an attachment can't be created at an arbitrary position or orientation. This doesn't make much difference for fixed attachments, but it does limit the possible locations of jointed attachments.
Also note that some part behaviours may be expecting only one attachment of a certain type, and creating extra attachments with the weld tool may result in unexpected behaviour.
This tool is really intended for advanced builders who want to circumvent the usual grid based limitations, it's not intended to replace the standard building system.
Lua scripting
For the modders out there, there are some additions to the Lua scripting API. From a Lua script it's now possible to get and modify part behaviour tweakables, create and delete part attachments, and even apply physics forces to parts. I look forward to seeing what you can come up with using this stuff!
There are a few other improvements and additions too, as always, check out the release notes for details.
Thanks to you all for your support this year, for playing the game, and for sharing your amazing creations!
Release notes:-
- Lua scripting changes and new features:-
- Added new ITweakables interface implemented by part behaviour to provide access to its tweakables.
- Added methods to IAttachmentOperations to create, replace, and delete part attachments.
- Added FixedUpdate entry function, called on Lua scripts once per simulation time step.
- Exposed fixed delta time value.
- Added new IPhysical interface implemented by part descriptor, with a method for applying a force to a part.
- Added TargetedPosition property to ITargeter interface.
- Added new ITweakables interface implemented by part behaviour to provide access to its tweakables.
- New script mods:-
- ServoTool - Sets a servo / stepper motor's trim angle from its current angle.
- WeldTool - For attaching one part to any other, without them needing to be aligned together, or even frozen!
- PhysicsExample - A simple demonstration of applying a force to a part.
- ServoTool - Sets a servo / stepper motor's trim angle from its current angle.
- New 2.5x9 truck wheel (rim designed by Nate).
- Implemented joint force / torque debug visualisation, and added options to ConstructionDebug script mod to enable it.
- Added dropdown menu to part behaviour UIs, as an alternative way to choose a joystick axis to bind.
- Added toggle to video options for disabling chromatic aberration, independent of vignette.
- Bug fixes.
Angled beams and connectors
In the previous update I introduced the "V" and "W" angled beams, primarily to allow for building V configuration engines. If you've been using these parts, you may have noticed some bugs with the building system (e.g. sometimes your construction might freeze at a weird angle).
I'll come back and address these problems in the future, but seeing as those angled parts are now out in the wild, I figured I might as well release the others I've made. So you'll now find more angled beams, and connectors too!
{STEAM_CLAN_IMAGE}/37970304/e03628f1000147f9c13be624231ee0ceb99f5523.jpg
Engine crank nose
I've added a "crank nose" part, which can attach to the existing crank parts. This is particularly useful if you want axles coming out of both ends of a single driven crank.
{STEAM_CLAN_IMAGE}/37970304/e88588a852f0d7f4385473f8c3d359509ac79488.jpg
This makes the "front crank" parts kind of redundant actually, but I'll have to keep them so as to not break existing builds.
More wheels
We also have some more wheels thanks to community member Alex!
{STEAM_CLAN_IMAGE}/37970304/d2ed90217b91ef464673c039bbd80f8c37b6972c.jpg
There are one or two other tweaks and improvements too, here are the full release notes:-
- New parts:-
- Engine "crank nose" with resizable axle.
- Angled connectors.
- Angled beams.
- Car wheels designed by Alex (6.5 and 7 units diameter, various widths).
- Engine "crank nose" with resizable axle.
- Added "double audio pitch" toggle to engine head part behaviour settings.
- Added separate volume slider in audio settings for environment sounds.
- Added "Ctrl + F" freeze / unfreeze shortcut to material, painter, and grabber tools.
- Lua scripting changes and new features:-
- New "button image" UI element (use IElementFactory.CreateImageButton() to create from Lua).
- Added IsTargetable property to IElement (disable to prevent a UI element from blocking the mouse pointer).
- Added GetDims() method to IBoundary.
- New "button image" UI element (use IElementFactory.CreateImageButton() to create from Lua).
- In PlayerHUD script mod, pressing Tab now toggles between metric and imperial units.
- Bug fixes.
- Upgraded to Unity 2021.3.43.
Combustion Engines - Not Ready Just Yet
By this point, I was hoping to have combustion engines done. I tried a purely physics based approach, using separate cylinder, piston, con-rod, & crank rigidbodies, and applying a force to the piston based on the current angle of the crank. This worked reasonably well, but had problems with "phantom forces" whereby the engine got torque applied to it, sometimes flipping over the vehicle it's in. Also, using physics for all the parts like this has RPM limitations, and doesn't scale that well for sim performance.
So I've decided to change tack slightly, I still want to keep the appearance of the moving parts (i.e. pistons and con-rods), but my plan is now to procedurally animate these in code. There's not really any need to use physics as these parts can't collide with anything when inside an engine. To apply torque to the crankshaft, I'm working on something similar to the electric motors, but with a different torque curve.
Hopefully I'll be able to get this done soon, but in the meantime I thought it would be good to get a small update out. Here's what's in it...
Parts
There are now some slider versions of the 1-Hole and 2-Hole connectors, some new "angle axle" connectors, and a larger centrifugal clutch.
Also, the rounded beams can now be resized one unit smaller than before.
Part Behaviours
I've improved how the invert option works for parts with a single key bind (e.g. brakes), adding a separate invert option for the joystick axis.
You can now type in values for any part behaviour slider, by right clicking it. Even values beyond the normal slider range can be entered (but no guarantees the physics won't blow up with higher RPMs or torques!)
No Collide Tool
For those who want to bypass part collisions in their builds, I've added a new "PartCollision" script mod tool that can be used to disable part collisions. Parts with their collision disabled will still collide with the ground, but nothing else.
Here are the full release notes:-
- New parts:-
- "1-Hole Slider" and "2-Hole Slider" connectors.
- Angle axle 90, 180, 3 x 90, & 4 x 90 connectors.
- Centrifugal clutch x3.
- "1-Hole Slider" and "2-Hole Slider" connectors.
- Rounded and half rounded beams can now be resized one unit shorter.
- Added "invert axis" option to part behaviour joystick axis settings.
- In brake, clutch, and differential part behaviours, replaced "invert direction" option with "invert control", which properly inverts their control behaviour.
- By right clicking a slider in the part behaviour settings, it's value can now be edited by typing in a number.
- Shortcuts (Ctrl+C and Ctrl+V) for copy and paste in part behaviour settings.
- A construction can now be unfrozen (via the construction UI) while the player is seated in it.
- Lowered minimum mouse sensitivity values.
- Added methods to IConstructionOperations to set whether parts are collidable (and added IsCollidable property to IPart interface).
- Added new PartCollision script mod.
- Bug fixes.
- Upgraded to Unity 2021.3.34.
As a bit of a bonus, this update also includes another clutch with ring gear (x3 in size), as well as a new centrifugal clutch part, for all your go-kart and moped needs! :)
{STEAM_CLAN_IMAGE}/37970304/cd7b69d66bef714340678050559ccdc51f2178a5.jpg
Enjoy!
Release notes:-
- Many optimisations to UI, overlays, and indicators. Improves performance especially with a large number of parts / constructions.
- Minor tweaks to builder tool:-
- Click and drag "threshold" now only applies to move manipulator.
- Prevented dragging the part selection's pivot point below ground.
- Increased targeting distance.
- Removed "Prevent Interpenetration When Attaching Parts" toggle from "advanced options" (still available in the demo by setting "PartPenetrationTestEnabled" to false in the debug console).
- Added toggle to "advanced options" to disable the centre of mass indicator.
- Click and drag "threshold" now only applies to move manipulator.
- Modified control wheel part behaviour to check for player distance and facing direction.
- Added option to light part behaviour settings for disabling shadow casting.
- Implemented copy paste for part behaviour settings.
- Improved part resizing indicator to show numbered unit dimensions.
- Gear engagement indicators now shown for all gears in part selection when aligning.
- Added settings to controls options to invert horizontal and / or vertical mouse rotation of the part selection.
- Updated help UI screen.
- Bug fixes.
- Upgraded to Unity 2021.3.26.
Hi all, over the holiday period I decided to take some time out to try an experiment: attempt to add undo functionality to the game. Specifically, implement a command history, to which a command would be added for each tool action (e.g. select, move, or attach parts, apply material or paint, etc.) and then allow the player to undo or redo the commands in that history.
The game's tools were not originally built with this in mind, but the code is reasonably well structured so I thought it might be possible. The initial prototype turned out to be promising, and showed the potential improvement to usability this would bring.
Well, I couldn't resist seeing this through to completion, and so that's what I've been working on for the past few weeks. It required substantial refactoring of some of the tool code, and took a while, but the results are well worth it I think.
Here it is in action, I've exposed the command history to Lua scripting, and made a script mod that shows the current list of commands:-
https://www.youtube.com/watch?v=XN7h2X90YPw
Implementation details
Rather than store an absolute snapshot every time something changes, the commands in the history store relative deltas. A command keeps a record of the change that was made by a tool action. This means implementation was kind of an "all or nothing" prospect: all tool actions must be accounted for the command history (in the right order!) for everything to work properly.
Here are the commands I ended up with, these are added to history when...
- Select tool: ...a tool is selected (some actions are only valid when the correct tool is active, so this must go in the history).
- Select parts: ...any frozen parts are selected or deselected.
- Select pivot: ...a pivot point is selected, which detaches all the selected part(s).
- Move / resize selection: ...the selected part(s) are translated, rotated, or resized via manipulators.
- Replace attachment: ...an attachment's type is changed.
- Lock attachment: ...an attachment is locked or unlocked.
- Delete attachments: ...attachments are deleted (whether directly, due to the selection being detached, or due to a part being destroyed).
- Spawn / destroy construction: ...a part / construction is spawned or destroyed.
- Freeze construction: ...a construction is frozen or unfrozen.
- Swap material: ...a material is applied to a part.
- Add / remove links: ...link(s) between link nodes are added or removed.
- Apply paint: ...paint colour is applied to a part.
The command history has a buffer containing references to the added commands, in the order they were added. This allows for the commands to be undone in reverse order, and redone in forward order.
The history maintains an index of the last undone command, and if a new command is added, it will go into the buffer at this point. Any commands that came after the one most recently undone will be lost.
The buffer is a finite size (currently 256), if a command is added to history and it's full, the oldest command is removed.
New demo
So, the game now has full undo / redo capability (using Ctrl + Z / Ctrl + Y). This is a feature that this genre of game really should have, and I think it was worth making the effort to get it done.
There are still a couple of issues left to deal with, but it's now in a usable state, so I've just updated the demo to include it. A lot of code had to change, hopefully I haven't introduced any glaring bugs, it seems stable so far. Give it a try and let me know how you get on with it!
Release notes:-
- Implemented “attachment locking”, a way to prevent attachments from being modified or deleted.
- Added a compass UI overlay.
- Added “how to” pages to the help UI screen.
- Various other UI tweaks and improvements.
- First pass of localisation support.
- Bug fixes.
- Upgraded to Unity 2020.3.38.
{STEAM_CLAN_IMAGE}/37970304/72807e88a7cc68558f3178b52d17a8a5472fe987.jpg
Release notes:-
- Minor usability improvements:-
- Builder tool actions (unfreeze, duplicate part, and delete part) now work even when targeting a manipulator handle.
- Unfrozen (individual) parts can now be directly deleted, without having to freeze them first.
- Move manipulator part resizing now works even when "transform" and "resize" actions are bound to the same keys.
- When no tool is active, the targeted part is only highlighted if it has an activatable or tweakable behaviour.
- Builder tool actions (unfreeze, duplicate part, and delete part) now work even when targeting a manipulator handle.
- Improvements to the "desert proving ground" map:-
- Implemented height based texture blending in the terrain shaders.
- Replaced terrain textures.
- Added grass and trees.
- Implemented a rudimentary "weather" system that adjusts the sky between clear and cloudy.
- Improved atmospheric scattering to better visually blend between the terrain, distant terrain, and sky.
- Implemented height based texture blending in the terrain shaders.
- Improvements to the "flat plane" map:-
- Expanded its size to 8x8km.
- Replaced floor texture.
- Replaced sky with an environment cube map.
- Expanded its size to 8x8km.
- Raised boundary height to 2 km in all maps.
- Bug fixes.
- Upgraded to Unity 2019.4.38.
Current Release
12644959
Uploaded Dec 29, 2023
Update already requested
Uploaders have been notified
A newer version is available but not yet uploaded
Help keep this updated
Login Required
You need to be logged in to request game updates. Would you like to go to the login page?
Request Update
Request an update for GearBlocks? This will notify uploaders that this game has an available update.
Request Submitted
Your update request has been submitted successfully! Uploaders will be notified.
Request Failed
Failed to submit update request:
System Requirements
How to Install
GearBlocks.exe to play
Troubleshooting tips
• Run Redist/_CommonRedist installers if game won't start
• Add folder to Windows Defender exclusions
• Run as administrator
Download
Direct link available
510 MB
12644959
You May Also Like
View AllDownload GearBlocks for PC with a direct link or via torrent. Get the full version of GearBlocks for free. GearBlocks is a Indie released by SmashHammer Games.