Factorio plays Darude in this ridiculous video player build

I’ve had a go at Factorio [official site], and even managed to automate resource mining and production. I thought I had a good grip on the game until I saw what DaveMcW was able to create. Using just the components available in the base game, he managed to build what is essentially a video stream decoder and display program.

DaveMcW built a massive complex, composed of a display, memory, and decoder sections, then replicated it via Blueprint 10 times to make a 178×100 pixel display with a total of 34MB of memory. These might not seem like impressive numbers until you factor in that Factorio doesn’t have a ton of built-in code interpretation, so the whole thing was mainly coded in Assembly.

All of this hard work went into playing the music video for Darude’s “Sandstorm,” but it seems like any video could be played on the massive array of small display modules. “Sandstorm” just happens to be one of the best choices that could have been used here. If you’re looking to use DaveMcW’s design, or build something similar, he goes in-depth on how he created the video player on the Factorio forums.

From this site

29 Comments

  1. Chillicothe says:

    Someone will have programmed this to play Pokemon Red and Blue before long.

  2. Darloth says:

    Not even assembly, which has useful instructions like mov or jmp or nowadays great stuff like jne or jgz or what have you. Factorio is closer to actual circuits themselves, you have to physically construct the not gate or the and gate. About the only things Factorio will do for you is basic arithmetic operations – I mean you have to build the clock that runs the thing, to start with!

    • KDR_11k says:

      How fast does it run? Minecraft computers will often kill the framerate with simple addition, is the video actually realtime?

      • brucethemoose says:

        “It has a 178×100 display, and 34MB of memory. In theory it could run at 60 FPS, in practice it runs at 1 FPS in Factorio 0.14.”

        Still, even 1 FPS is impressive.

      • brucethemoose says:

        Also, the devs are apparently using this as a performance test, and claim it runs 20x faster in 0.15.

      • FriendlyFire says:

        Factorio is coded in C++ as far as I know, which is already a big performance boost, and on top of that the devs seem extremely focused on performance considerations (unlike Minecraft), so there really is no comparison to be made.

        Oh also, an isometric 2D game is a lot easier to process, update and render than a 3D voxel game like Minecraft.

        • KDR_11k says:

          I think the implementation matters much more than the language used, Java may have issues with gaming but it’s not THAT much slower than C++. It’s probably the way Minecraft computes the logic system rather than the underlying language (Factorio’s logic is more of an equation, right? I’d expect MC’s to be more about updating blocks and stuff. I’ve never used logic in Factorio as “number of items in logistics network” tends to be enough for controlling my production rates).

          • Xerophyte says:

            I write high-performance C++ for a living and in general I’d agree that the language doesn’t matter much, but for something like Factorio the difference certainly can be quite pronounced. The core engineering problem they’ve had to solve is scaling their update logic to run on a few hundred thousand simple entities several times per second. Being able to control your data layout and (relatively) easily vectorize your traversal of said entities is a big deal at that level of raw churn; admittedly I haven’t touched Java in a number of years but it at least used to be that you couldn’t do either of those things.

            Minecraft is likely a lot less focused on that because raw CPU performance is a lot less important to making the game run well. It doesn’t have to do pathfinding for a hundred bugs, move a thousand pieces of copper ore along their belts and all the other fiddly bits that Factorio is entirely built around. Performance issues for Minecraft are probably more typically related to just rendering the world: doing occlusion culling with deformable geometry, simplifying distant voxels, that sort of thing.

  3. plsgodontvisitheforums says:

    What’s the song though? I gotta know the song!!

  4. Shazbut says:

    I still don’t really understand what a computer is or does, so for me this is indistinguishable from magic

    • shde2e says:

      You are not alone.

      I mean, techinically i know it’s possible, and i have an idea how to do it. But you would have to be positively insane (or really enthousiastic) to actually do it.

    • gunny1993 says:

      Go look at the YouTube channel “computerphile” it will still seem like magic, but it’s a good channel.

  5. TheAngriestHobo says:

    Okay, so explain this to me, fellow nerdlings.

    Where is the input coming from? Is the video programmed into the in-game device itself, or is it being read from another location on this guy’s hard drive?

    • sunreef says:

      It’s stored inside in-game objects.

      He actually wrote a script to take a video on your hard drive and load it inside the game so that it can be played.

    • Xerophyte says:

      Not sure if you’ve played Factorio or bothered with the circuits if you did. The circuit logic used for this is basically a network of wires along which you can send signals, where a signal is an identifier and an integer value. For instance, a box of 1000 iron will output a signal of “ID: iron, value: 1000” (along with a bunch of 0s for all the stuff it doesn’t have). You can then use this to make your factory do smart-ish things, like only smelt more iron if the current supply is getting low. It’s quite optional and most players don’t bother.

      One component used for this is the “constant combinator” which you can plop down on the map to output an arbitrary constant signal, typically used for things like the 2 in “I want to make fnords until I have twice as many fnords as foos.” The author has a script that will take a video (using ffmpeg) and turn it into banks of constant combinators.

      The script is generating a dedicated memory bank of constant combinators for each 10 pixel column, containing all the colors those pixels will have. The author has then designed some wiring logic that will look up the current color for each pixel and frame in that bank. Repeat 1780 times and you have a video.

  6. Uberwolfe says:

    This blows my feeble little mind.

  7. Eikenberry says:

    I was trying very hard to not hopscotch over to another game in my steam library, but, well, this makes me want to sink another 40 hours into Factorio.

    • Nosada says:

      “another 40 hours into Factorio”

      I used to think this was an insane amount of time to dunk into a single game. Now I just thought: “Why would you stop at 40 hours? you’ve barely started on your mega-base-building-base at that time!”, and then I realized I still need to redesign those 3-way rail crossing to handle my faster 2-6-2 trains.

      Now I wanna play Factorio :-/

Comment on this story

XHTML: Allowed code: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>