Archive

Game

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().

libGDX Jam - Collisions with Map

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!

Story

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!

Characters

Ivan Robotovich: The Russian Robot.

Neal "Flint" Swaggerty: Playboy Captain.

Level/environment design

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.

Gameplay

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.

Art

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.

Roadmap

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

Work is still kicking my butt, but at least I've got snipers now. They're not raycasting correctly quite yet, but my goal is to have them finished by the end of the week. If I'm lucky, that will leave only the missile spawner.

Sniper Sweep

Ken Silverman's BUILD engine has to have one of my all-time favorite map editors.

ReBUILD Screenshot

As far as we've come with graphics and modeling software, I've not found anything (not even Sketchup), which is quite as satisfying to use. I started writing a piece of software called ReBUILD, which is nothing more than a top-down map editor which exports Obj files that can be imported into Unity. I have, at long last, something worth showing. It's a far ways away from a release, but at least at this point it's visually interesting. I've got my fingers crossed this won't fall to the wayside.