Mr Speaker


Warning: count(): Parameter must be an array or an object that implements Countable in /home/mrspeak/public_html/wp-content/themes/stuartspeaker/functions.php on line 24

Warning: count(): Parameter must be an array or an object that implements Countable in /home/mrspeak/public_html/wp-content/themes/stuartspeaker/functions.php on line 27

Warning: count(): Parameter must be an array or an object that implements Countable in /home/mrspeak/public_html/wp-content/themes/stuartspeaker/functions.php on line 29

Java on film: the livestream videos

Since having a chat about what I learned from watchin' live coding, I've received buckets of emails 'n' tweets asking for links to the videos... After an epic google search of 5 minutes I've collected them all and aggregated them in this one happy place.

Someone coded Prelude of the Chambered for the Lundum Dare #21 game competition over 48 hours of August 19th-22nd 2011. I think most of it is here - and I've started annotating some of the good bits. Started. I'll fill out this post as I go...

It's well worth a study if you've got a couple of days to spare!

Part 1: The setup (3h 15m)

And so the game begins - on Saturday the 20th of August, some time in the afternoon...

Part 1 direct link (on YouTube - text in fullscreen is readable, but only just!)

  • Sketches out some possible ideas in notepad
  • Sets up Eclipse and his paint program
  • Creates blank Java project and Swing component
  • Creates display frame and boiler plate stuff
  • (0:27) Sets up main loop "tick" and game screen
  • Draws some random pixels with clipping
  • Pixels with perspective
  • (1:14) Maps a roof and floor texture
  • Adds up-down camera movement
  • Adds a wall-as-some-pixels
  • Spends ages getting wall to work properly
  • Conquers the wall maths!
  • (2:19) Adds wall texture
  • Adds spinning camera
  • Tweets progress...
  • Adds input handler
  • Creates player and binds camera to the keys
  • Adds "z" movement
  • Make random cube generation for testing
  • (3:09)Adds player/wall collision detection
  • Fix rendering direction: "Let's flip the Y. Y not?"
  • Realises the video stream for 3 hours costs $4000. Changes vendors.

Part 2: Adding engine features (2h 00m)

Part 2 direct link

  • Re-sets up video streaming crap
  • Adds sprite class
  • Sprite drawing and clipping
  • Renders sprite textures
  • (0:28) Adds dynamic colouring (greys coloured at render time)
  • Dynamic colouring for floor and sprites
  • Switches to 16x16 sprites (double res!)
  • Messes around with walls and floors designs
  • Tests screen sizes and scaling
  • (1:00) Tests performance and lots-of-sprites
  • Tweaks the shading a bit
  • Added dithering
  • Added a "post-process" step for rendering tweaks
  • Added per-block colouring
  • Added per-level floor and roof colouring
  • (1:35) Drew a custom font
  • Created a font renderer

Part 2b: "Getting so tired now" (2h 00)

Part 2b direct link

  • Snack time!
  • Created a "level" png file
  • Added level loader from png
  • Added cache for loaded levels
  • Started crashing everything with texture bug
  • (0:24) Spawn a player from a colour on png
  • Fixed rendering directions (things were rendered mirrored)
  • Tested adding sprites via pixels on png
  • Started adding game design elements (iron bars)
  • (0:44) Made blocking sprites: first room!
  • Interactable blocks: push-button wall
  • Fixed artwork manager
  • Created "switch" block class
  • Added particle-like smashing to block
  • (1:20) Minecraft-esque smash-a-thon
  • Bit of level design
  • Add popup message system
  • "Freedom is temporary and unsatisfying"
  • Add "Click to focus" when screen unfocused

Part 2c: The end of day one (0h 40m)

Part 2c direct link

  • Refactored/cleaned up "blocks with entities" handling
  • Added boulder entity
  • Added entity collision detection
  • Added rolling boulders
  • Added floor holes
  • Off to bed

Part 3: Early the next day (1h 13m)

After a smashing first day of fierce programming, we now rejoin the action on Sunday morning, 8am.
Part 3a direct link

  • Good morning!
  • Added chest block
  • Draw some pick up items
  • Made game panel GUI (life and pickups)
  • Rendered currently held item
  • Added water texture
  • (1:04) Added head bobbing when moving

{Footage missing: adding using pickup items}

Part 3b (0h 37m)

Part 3b direct link

Part 4: A plan comes together (2h 00m)

14 hours: 8 parts.
Part 4a direct link

  • Adds a torch entity
  • Creating a dynamic lighting system
  • Bails on lighting system and removes added code

Part 4: The rest...

Part 4h: I will go to sleep now (0h 43m)

The final part... Part 4h direct link

The End

Well well well... what a rollercoaster ride that was... highs, lows, chicken, dub step: we had it all, and at the end of the day the game was the real winner. That's all from us here at Lundum Dare #21, until next time - happy coding.


Warning: count(): Parameter must be an array or an object that implements Countable in /home/mrspeak/public_html/wp-content/themes/stuartspeaker/functions.php on line 33

4 Comments

  1. the first part is no longer available on youtube. does anyone have a link? would really like to watch it from the very beginning

    Wednesday, December 21, 2011 at 11:28 am | Permalink
  2. Oh bummer, part 1 was taken down. Is there a mirror somewhere?

    Wednesday, December 21, 2011 at 6:36 pm | Permalink
  3. Not sure about the first part of the stream – but this was for his Ludum Dare #21 entry (Prelude of the Chambered) – if you’re looking for his Ludum Dare #22 entry (Minicraft – the 2D retro minecraft) then it’s all up here (first part) and here (day two) and here (the final sprint).

    Wednesday, December 21, 2011 at 7:32 pm | Permalink
  4. Thanks for this! Notch’s Twitch page has defaulted to hiding/deleting his videos… but this still works! (I assume you embedded them in this page.)

    Thanks again and great post you wrote about “coding like Notch” about the stream. Very interesting and inspiring. :)

    Monday, September 2, 2013 at 10:16 am | Permalink
Captcha! Please type 'radical' here: *
How did you find this thingo? *