Manufactoid is probably one of my favorite games that I’ve made; in it, you must build a factory to assemble blocks into different products, with each product being a separate puzzle. It’s most definitely a game for engineers, as it requires a you to both think like an engineer and write Lua code to control your factory. If you’re okay with a little programming, though, you shouldn’t have any problem getting past the learning curve and might even enjoy the game.

There’s a good chance that it’ll be confusing at first, which is why I went through the effort of writing documentation, which can be found in your start menu after installing. It’s relatively terse, yet explains the basic game mechanics and acts as a reference for both Lua and the factory components.

Download Manufactoid

Assembling Mountain Dew 6-packs in the Manufactoid factory!

55 Comments to Manufactoid

  1. Matthew's Gravatar Matthew
    August 26, 2008 at 9:18 am | Permalink

    How do you advance through the levels? I finished the first level (transporting from left to right, with blue and green switched), and it says “Congratulations, you shipped the product,” but I am then left at the factory screen. Any suggestion on how to get to the next level?

  2. Titus's Gravatar Titus
    August 26, 2008 at 9:50 am | Permalink

    To continue on, you close the window. That brings you back to the main menu. It took me a while to figure that out, too.

  3. Rackne's Gravatar Rackne
    August 26, 2008 at 12:38 pm | Permalink

    Awesome game !!! However copy/paste in code editor would be very helpful.

  4. yonsje's Gravatar yonsje
    August 31, 2008 at 6:57 am | Permalink

    hi, i can’t seem to beat level 2 :S any help?

  5. Zach's Gravatar Zach
    August 31, 2008 at 12:13 pm | Permalink

    Use glue!

  6. Scary's Gravatar Scary
    October 4, 2008 at 8:19 pm | Permalink

    I, like many others, found your site via Hackaday. While I enjoyed the Ruckingenur games a lot, Manufactoid takes the cake! Are there any plans to expand this game? Allowing for easier script editing (copy/paste as mentioned before) or allowing the use of an external editor would be lovely. This game has given me much enjoyment, and I would love to see it continued and improved.

  7. DrRickDaglessMD's Gravatar DrRickDaglessMD
    October 20, 2008 at 4:10 pm | Permalink

    Hey, I’ve been playing and enjoying the first 4 or so levels of Manufactoid, but I’ve got a question about the behaviour of the game (possibly a bug!).
    In the documentation an example is given where “count = count + 1 — count now is 1” (from the Variables section). If I were to do this in say an IF loop dependant on a == true, on a 1x speed conveyor a single block would trigger the IF statement so many times in the time it takes to clear the sensors range that ‘count’ equals about 10 (initialised at 0). Is this normal behaviour, and should I just go back and think about it and stop being such a newbie?
    It’s a bit of a problem really as I’m stuck trying out a solution to mission 5 involving a grabber (probably way more elaborate than needs be!) but the multiple triggering of IF statements which depend on’s is making it very difficult!

  8. Zach's Gravatar Zach
    October 20, 2008 at 11:23 pm | Permalink

    DrRickDaglessMD: This is normal behavior; it is simply taking more than one “cycle” for the sensor to be cleared. You can turn this into a single count per object that passes by using a boolean variable in conjunction with the sensor.
    if and not lock then
    lock = true
    count = count + 1
    if not and lock then
    lock = false
    This will only increase every time a new block passes by (assuming there is a big enough gap between blocks to trigger the second condition!).

  9. DrRickDaglessMD's Gravatar DrRickDaglessMD
    October 21, 2008 at 9:39 am | Permalink

    Hey, Thanks Zach! And thanks for all these games, they’re the first I’ve really gotten into for a long time.

  10. Jens's Gravatar Jens
    December 14, 2008 at 6:16 am | Permalink

    This game is really a great fun, thanks Zach 🙂
    But the last level (Death Star) does not “accept” my construction for delivery. But it looks like it should. The Death Star simply stays withing the box for delivery, blocking it for the next ship.
    An error? Or did you think none could solve it and so the check routine is not implemented? 😉

  11. Zach's Gravatar Zach
    December 14, 2008 at 3:50 pm | Permalink

    I have a solution file to the Death Star level that works with the currently available installer, so I would double-check your solution. If you haven’t glued every piece to at least one other piece in the product, it won’t be properly recognized. Feel free to send your solution to, regardless of if you manage to fix it; I only know of one other person who has solved this level, and I would love to see your solution!

  12. lassombra's Gravatar lassombra
    December 15, 2008 at 12:16 pm | Permalink

    Honestly, the death star level wasn’t that complicated if you stopped to think about it first.
    I solved it the way I solved most of the higher levels, with a count of blocks for several subassemblies.
    I discovered a cool way to count blocks off an incoming conveyor early on, you set up a line of pushers, one for each block you want, and trigger them off a sensor at the end. Since the sensor points toward the conveyor, not only does it successfully count when you’ve got enough, it keeps the factory floor “clean” so you have room to work, preventing more boxes from arriving before you are ready for them.
    My deathstar solution uses this method, and a sub-assembly mindset to build the 5 “rows” of the death star and then put them together. Two of the “rows” are built right on the delivery zone, the other three are built separately and attached one at a time.

  13. dqd's Gravatar dqd
    January 5, 2009 at 10:30 am | Permalink

    Hello! Could anybody tell me how can i make a grabber shorter than 17 units? I’ve already tried the whole keyboard and mouse but nothing does it. And the same for rotating it.

  14. aliendrone's Gravatar aliendrone
    January 5, 2009 at 1:03 pm | Permalink

    dpd –> To my knowladge, there is no way to adjust the game properties of the different parts, you can only program them. The only way to change them would be to go into the game code and change them there.

  15. dqd's Gravatar dqd
    January 5, 2009 at 1:42 pm | Permalink

    I looked into the savegames and it looks that it really cannot be rotated (otherwise the direction would be written in the save file, but it isn’t), but its length is saved, and for me that means it can be changed during gameplay. I can’t get it. The height of a map is 22 units and you say that all grabbers must be 18 units long? (not 17, sorry) If it’s true, than it will make things a bit harder…
    Thx anyway.

  16. aliendrone's Gravatar aliendrone
    January 5, 2009 at 6:03 pm | Permalink

    dqd –> Like I said, to my knowladge, there is no way to adjust the size of parts in the game (I may be mistaken). The game is programmed to move the arm between 0 and 18 on command. So making it bigger would require a code tweek (Zach, please correct me if I’m wrong). But that is a good idea for something like the grabber. This all reminds me of Roblox, which uses Lua.

  17. Ozsy's Gravatar Ozsy
    January 8, 2009 at 6:55 am | Permalink

    Hello everybody!
    At fist I’d like to thank you Zach, for making these games, I like them very much. I’ve always wanted to make a game like these, but I don’t have the patience and knowledge (but I’m learning). And congratulations for the prize!
    So what I wanted to say that I made a level editor for this game. Okay, it’s just a console application, but it’s fairly easy to use (it creates a level from a saved game). You can’t make everything with it (you can only use red, white, green and blue blocks, and no converter yet), but they can be implemented in like no time.
    If anyone interested, I can send you the program, and tell you how to use it.

  18. Mercon's Gravatar Mercon
    January 20, 2009 at 3:18 pm | Permalink

    Great Game, quite fun to play. Just sad there weren’t more levels.
    One thing that bugged me was the fact that the grabbers were so long… made it impractical to use them for me. So I finished all the levels never using one…. except on an earlier level as a novelty.
    The DeathStar level was quite fun to do as well, but very doable.

  19. Mitchell Robinson's Gravatar Mitchell Robinson
    January 26, 2009 at 11:37 pm | Permalink

    How do i use glue for level 2? It doesnt have it in the thing on the right!

  20. Lediur's Gravatar Lediur
    February 8, 2009 at 1:09 pm | Permalink

    It would be helpful if there was a sleep(ms) function available so delays could be added.

  21. February 12, 2009 at 8:27 pm | Permalink

    yeah I finish the death star… with 14 sprayer, 13 pusher, and 5 sensor 28 function ^^.
    Good game, more lvl please :D.
    file :

  22. tp1212's Gravatar tp1212
    February 17, 2009 at 2:43 pm | Permalink

    got a game crashing bug… involving different speeds, and unglued blocks inside eachother… you can mail me for the save.

  23. cyberjacob's Gravatar cyberjacob
    April 23, 2009 at 9:17 am | Permalink

    for some reason I can’t get my grabber to work for lvl3
    here is my code:
    if then
    number = 1

  24. GauHelldragon's Gravatar GauHelldragon
    May 13, 2009 at 2:51 am | Permalink

    Wooo beat deathstar~
    14 pushers, 10 sprayer, 3 sensors

  25. krux's Gravatar krux
    June 16, 2009 at 5:00 pm | Permalink

    wow you game is so great, please release an update or the sourcecode or andything, because there are bugs.
    please make the “hide code” and “view code” button at the same position, so that i do not have to move the mouse so far for a quick view.
    The internal text editor sucks, please let me use my own editor. I found out that i can edit the savegames directly, but i have to count my lines.
    I want programmable conveyers (on/off)
    I want short Grabbers
    The grabber should not loose its boxes, when it is transporting them over conveyers
    I want diagonal sensors, so that i can directy use the signal from the sensor for the pusher.
    You Game is great. Recently I found your Page on the Internet, and all games I tried from here are Great.

  26. David's Gravatar David
    June 24, 2009 at 5:07 am | Permalink

    Could I get a direction here from anyone please… Thanks…
    So in the first level, is there a way to solve it without making the blue or green blocks go aroung the other’s catcher?
    here’s what I mean:
    [start level code]
    b, 2, 4, 0, 8, 1, 5
    b, 10, 4, 0, 8, 1, 5
    b, 18, 4, 0, 4, 1, 5
    b, 2, 10, 0, 8, 1, 5
    b, 2, 16, 0, 8, 1, 5
    b, 10, 10, 0, 8, 1, 5
    b, 10, 16, 0, 8, 1, 5
    b, 18, 16, 0, 4, 2, 5
    b, 18, 20, 0, 4, 1, 5
    b, 22, 20, 0, 2, 1, 5
    b, 24, 20, 0, 1, 1, 5
    b, 25, 13, 0, 8, 0, 5
    b, 25, 11, 0, 2, 0, 5
    b, 24, 10, 0, 2, 3, 5
    b, 18, 10, 0, 4, 2, 5
    b, 18, 14, 0, 4, 1, 5
    b, 22, 14, 0, 4, 2, 5
    — Initialization Code Goes Here
    — Every-cycle Code Goes Here
    [end level code]
    * In other words, is there a way to use a sensor and detect which color the block is, and then use a pusher?

  27. Blueation's Gravatar Blueation
    June 25, 2009 at 5:24 pm | Permalink

    just put all blocks on the same belt with a sort of hole at each “catcher”:
    (90 degrees twisted)
    # = belt, @ = catcher, < = here the blocks come from @@@ @@@ @@@ @@### @### @### < @@@ @@@ @@@ the blocks come into the holes, if it's the right color it will be gone, if not it will be pushed further by the next block. Believe me, it works, if you understand it.

  28. Blueation's Gravatar Blueation
    June 25, 2009 at 5:25 pm | Permalink

    that “1.” has to be a #

  29. David's Gravatar David
    June 30, 2009 at 5:27 pm | Permalink

    If anyone wants to check out my level here it is:

  30. David's Gravatar David
    June 30, 2009 at 5:28 pm | Permalink
  31. Wymizer's Gravatar Wymizer
    August 18, 2009 at 2:23 pm | Permalink

    Hey zach I’m a real noob but I love this game. my friend got me started and gave me the basics (ive never done any sort of programing before) im hooked man its so fun. i beat the game last night. I didnt use the grabber on the deathstar I only used 5 pushers and 8 sprayers. I beat the tank level only with sprayers! its so fun. will there be any more level’s soon?

  32. Zach's Gravatar Zach
    August 20, 2009 at 12:53 am | Permalink

    I have no plans to make new Manufactoid levels, but maybe I will run a contest soon…
    Stay tuned; you’ll see it on the front page if it happens.

  33. wstorm88's Gravatar wstorm88
    August 21, 2009 at 1:39 am | Permalink

    “while 1 do end ”
    stopped program and crashed all my work :((
    how to write binary counter simply?

  34. Josh's Gravatar Josh
    September 25, 2009 at 2:40 pm | Permalink

    So I figured out that you can edit one of the saved level files to create your own levels. However, the game loads them correctly and plays them correctly, but I can’t exit the level. Does any one no why this is? Is there just an error in the program because I added more then the original levels?
    Also if any one else has made levels I would love to see them! Post them or email them to me plz 🙂

  35. Josh's Gravatar Josh
    September 29, 2009 at 3:26 am | Permalink

    If any one is interested, I have created 12 extra levels for this game. Shoot a text up or send me an email at
    Ill send them too you for free 😛

  36. October 25, 2009 at 12:38 pm | Permalink

    wstorm88:”While 1 do end”? Are you TRYING to crash your computer?
    Binary counter: Zach explained that already, near the top of this page, on 20/10/08. It’s actually an integer counter, but surely you can fix that?
    David: There is an “elegant” solution to level 1; just set up conveyor belts so that the blue widget goes around the green target (to the right) and then back to its own target. No intersection; you win.
    cyberjacob: That won’t work because the grabber takes a short while to transport the blocks from one point to another. You have to use read() to check whether it has arrived or not. Personally I think grabbers are more trouble than they’re worth and I stick to pushers, especially since I’ve discovered that allowing parts to fall off the end of the conveyor belt and putting a sensor 2 (or 3 or more) spaces further and pushers at the right locations allows you to split a stream of parts in half (or thirds or more), without the need for diagonal sensors.
    Josh: Patch me in. I wanna see those levels.

  37. October 25, 2009 at 12:48 pm | Permalink

    PS: David, your mediafire level is gone. Mediafire musta deleted it because it wasn’t used enough.

  38. Jonathon Duerig's Gravatar Jonathon Duerig
    December 4, 2009 at 1:36 pm | Permalink

    Josh sent me a copy of his extra levels and I’ve put them up for hosting here:
    Just extract that into your manufactoid directory and it will add the levels to the game. When you next play, they’ll be listed alongside the normal levels. They increase in difficulty as the normal levels do and are often a more complicated variation on one of the original levels. I’ve managed to beat all but the last of the new levels, and they are awesome!

  39. 1nsane's Gravatar 1nsane
    December 8, 2009 at 11:21 am | Permalink

    Wow, those levels are amazing, I also got stuck on the AT-AT and AT-ST levels. I wish more people would make more levels for this or prehaps its time for a new and improved version of the game?

  40. Anton's Gravatar Anton
    December 9, 2009 at 4:48 pm | Permalink

    I just wanted to thank you for this wonderful game. It’s been a long time since I had this much fun programming. 🙂

  41. Wyatt Lenhart's Gravatar Wyatt Lenhart
    February 8, 2010 at 6:16 pm | Permalink

    Hey im running windows 7 and everything works except when you try to load something. nothing pop’s up. you cant even click the button nothing happens

  42. Cactus Cooler's Gravatar Cactus Cooler
    February 13, 2010 at 11:45 pm | Permalink

    Yeah i get the same thing for windows 7. Nothing loads 🙁

  43. Cactus Cooler's Gravatar Cactus Cooler
    February 15, 2010 at 9:03 pm | Permalink

    All right, so I got bored last weekend and started to think of games I wanted to play and well this one struck my head again. As before I have created some levels, which some people liked. Well I am back and will be creating more for you.
    Some things to expect are:
    House hold objects,
    Factory gone wrong,
    intense multi assembly projects,
    some random stuff,
    and much more…

    I am working on one set now and should have it done in a week or so. I will keep you all posted. Hopefully some one can upload them like last time 🙂
    Until then, keep those minds a thinking 😛

  44. Cactus Cooler's Gravatar Cactus Cooler
    February 16, 2010 at 2:15 pm | Permalink

    ok, their not completed yet, but i do have a lot of levels to look at. If any one is interested let me know and ill you send you the files.

    Around the house and Factory
    Levels are mostly completed.

  45. Farrone's Gravatar Farrone
    April 2, 2010 at 4:50 pm | Permalink

    umm, i found no documentation in the start menu, and yes i looked in the correct folder.

  46. Elfaron's Gravatar Elfaron
    May 23, 2010 at 11:14 pm | Permalink

    “Load” button doesn’t work for me too on Windows 7.

  47. Databug's Gravatar Databug
    June 16, 2010 at 3:11 pm | Permalink

    Okay, yes I’m stuck on level 2, because I can’t get my sprayer to just always spray. I put the spray function in the initialization code section but when I run my factory it just sprays for one cycle. The parts list said you could get a sprayer to alwats spray with just one line in that section, but I really don’t understand how and I really want to.

  48. Jonathon Duerig's Gravatar Jonathon Duerig
    June 17, 2010 at 4:08 pm | Permalink

    Databug, the spray function doesn’t turn on the sprayer permanently. If you want it to always be spraying, put the spray function inside the every cycle section.

    More generally, as a fan of Manufactoid and the other Games for Engineers, I’ve been working on a spiritual successor which is nearly done. If any other fans want to do some level design or playtesting or art, please let me know.

    My email address username is tyrecius. It is at the gmail domain.

  49. DiEvAl's Gravatar DiEvAl
    July 25, 2010 at 4:48 am | Permalink

    I have made a library for Manufactoid that allows you to display 3-digit integers. It uses indicators 0..45.

    To use it in your program, put
    dofile "15seg.lua"
    in Initialization Code and
    in Every-cycle Code, where n is what you want to display. It must be integer between 0 and 999, otherwise the error may occur.

    Library (15seg.lua) and example (15seg.sav):

    NOTE: 15seg.lua must be placed in …/Zachtronics Industries/Manufactoid/

  50. DiEvAl's Gravatar DiEvAl
    July 25, 2010 at 9:28 am | Permalink

    Forgot to post screenshot:

  51. PewCHew's Gravatar PewCHew
    July 30, 2010 at 8:50 am | Permalink

    Hey dudes got anyoen a solution for my problem.

    Like DrRickDaglessMD I got the problem that my if functions run more then once cycl like:

    if x = = 1 then
    y = y+1

    i get there y = 41

    anyone got a clue how to make the if function just work one times?

  52. compsciguy's Gravatar compsciguy
    July 30, 2010 at 10:09 pm | Permalink

    Try this:

    done = false
    if not done
    if x == 1
    y = y + 1
    done = true

    Note that I’m not up on Lua syntax, but you should get the right idea from this.

  53. Anonymus's Gravatar Anonymus
    September 10, 2010 at 12:56 pm | Permalink

    I cant find the Lua Doumentation! Stuck on level 2!

  54. Elitelf's Gravatar Elitelf
    September 26, 2010 at 2:21 am | Permalink

    I had to look for the documentation in the game folder (win7) I uploaded a video to promote this awesome game. It’s not amazing or anything but it looks cool 😀

  55. Elitelf's Gravatar Elitelf
    September 28, 2010 at 12:23 am | Permalink

    Ok well like most people said, load button won’t do anything for me either on Win7 (I’m on x64) I tried various compatibility options but never could have it work. I tried modifying the level file so it can make my save pop when I start the level but it didn’t work either. Well at least I could retrieve my code.