— Joseph Catrambone (@JCatrambone) July 17, 2017
Recorded a dev session.
I revived a prototype platformer I started in college called Terminus. For me, it was mostly an excuse to fiddle with chatbots as a method of driving the plot forward, but I found an extra interesting twist: an in-game assembly language that allows the user to solve programming problems.
Here's a general overview of the CPU:
- 256 bytes of memory.
- 1 byte instructions with up to three operators.
- No registers, but every instruction allows dereferencing and writing to an arbitrary memory output.
Here's some sample code which puts calculates if a value on _BUS0 is prime or not, writing 1 for primes, 2 for composites, and 0 for not yet finished.
;; Prime directive. ;; Assorted one-byte primes are coming in on BUS0. ;; Write 1 to BUS1 if they're prime numbers or 2 if they're composite. ;; Keep at 0 while processing. ;; 0 and 1 are not prime. JMP _START ; Set aside some protected memory at the start of the program. BUS0: 0x00 BUS1: 0x00 TARGET: 0x00 DIVISOR: 0x00 TEMP: 0x00 ;; Begin. START: ; Save the values from _BUS0 just in case it changes. ; Init. MOV *BUS0 TARGET MOV 2 DIVISOR MOV 0 BUS1 ; Main loop. LOOP: MOD *TARGET *DIVISOR TEMP JE *TEMP 0 DIVISOR_FOUND ; Otherwise this doesn't divide evenly ADD 1 *DIVISOR DIVISOR ; Increase our number by 1. JE *DIVISOR *TARGET NO_DIVISOR_FOUND ; If we're at the target, no divisor. JE 0 0 LOOP DIVISOR_FOUND: MOV 1 BUS1 JE 0 0 START NO_DIVISOR_FOUND: MOV 2 BUS1 JE 0 0 START
It's a nice change of pace from ML work to do some CPU design. The choice to leave off a register actually turned out to simplify the code, too. Here are some screenshots:
Had some time to myself this morning after a few days without internet access. Got TMX maps loading and drawing, and fixed a bug with collision. For the curious, setOrigin(float, float) does NOT accept a value from [0, 1] which determines the centerpoint. It takes a value IN PIXELS. Also, getX() and getY() do not subtract out the origin, so you've got to do that yourself when calling draw().
Game Jam Time!
libGDX is doing a game jam from December 18 to January 18th. (http://itch.io/jam/libgdxjam)
Nearly a year ago I prototyped a game called Metal Sky Arena wherein players would float around and use gravity guns to launch each other into spikes. After a few minutes of play, the entertainment value disappeared. Given the time I've spent playing Super Smash Brothers and Towerfall, this came as a bit of a surprise. Perhaps gravity only is too feeble a mechanic. That's why I'm going to dust off the idea and begin with Metal Sky Arena II, similar in mechanics, but instead of gravity guns, we'll give everyone shotguns! Let's do it!
Game Design Document!
The theme is Life In Space. A regular part of life in space is probably the eradication of hoards upon hoards of carnivorous extra-terrestrials. Is there a more appropriate weapon than the trusty shotgun? I think not. Our bold crew of Russian and American astronauts must keep their vessel safe for as long as possible while they careen towards a celestial body of unknown origin!
Ivan Robotovich: The Russian Robot.
Neal "Flint" Swaggerty: Playboy Captain.
Levels are square, minimally dynamic. Designed to look like the interior of a futuristic space ship. Hazards like floating explosive barrels may drift through some.
Smash TV meets Duck Game meets Super Smash Brothers in zero-gee. Enter a room. A wave of aliens or some hazard enters. When cleared, move to the next area. When you've cleared the ship, you win! Single-player pits a person versus waves of enemies. Coop and competitive if time allows.
Aiming for 960x540 devices with 16x16 characters. Need to experiment with how close the camera should be to a player.
Sound and Music
Keep it simple. Short jam.
User Interface, Game Controls
Touch to fire in a given direction. Tap on player to curl up, release to spring out. If touching a wall, this allows the person to spring quickly, slightly gaining speed, otherwise the player slightly loses speed on wall-bounce.
20 - Project built on my machines + running on phone. Design doc done. 21 - Travel day. 22 - Character on screen + shooting. 23 - Enemies on screen + moving towards player. 24 - Holiday 25 - Holiday 26 - Level loading + display. No interaction. 27 - Travel day. 28 - Travel day. 29 - Travel day. 30 - Interaction with level (collisions + environmental) 00 (31) - Holiday. 01 - Holiday. 02 - Player damage + destroyable entities. 03 - Start game screens + game over screen. 04 - Advance to next area. 05 - Victory condition. 06 - Replace placeholder art and sound with better sounds. 07 - More placeholder replacement. 08 - Test public beta. 09 - Bugfixes. 10 - Bugfixes. 11 - Soft launch deadline. 12 - Buffer 13 - Buffer 14 - Buffer 15 - Buffer 16 - Buffer 17 - Hard deadline. 18 - Buffer