Wrecking Ball Boy

by Damian Yerrick

How do you like to go up in a swing,
Up in the air so blue?
Oh, I do not think it the pleasantest thing
Ever a child can do!

Robert Louis Stevenson, "The Swing",
A Child's Garden of Verses (1885)

This is a prototype of a puzzle platformer that I plan to port to the NES once it's done. It stars a character who compensates for his lack of lower limbs by carrying a grappling hook and using it to swing from whatever object is above him.

Installation

First install Python 2.7 and Pygame. Windows users should download and run Python 2.7 (Win32) and Pygame (for Python 2.7 Win32). Linux users should usually install Pygame through the distribution's package manager (for example, on Ubuntu, sudo apt-get install python-pygame).

Then run the file wbb.py. UNIX users may have to make it executable first (chmod +x wbb.py).

Controls

Key bindings

Controls in this situation:
Up
Up Arrow
Down
Down Arrow
Left
Left
Right
Right
A
X
B
Not yet used

When you start the program, it scans the USB ports for Xbox 360 Controllers or other game controllers. If a new controller has been plugged in, it asks you to press the button for each function and saves the bindings for next time in wbb.kyb. Otherwise, it defaults to keyboard controls. Or you can change this by pressing Tab on the screen that lists the controls.

On ground

Controls in this situation:
Up
Climb
Down
Back up
Left
Scoot
Right
Scoot
A
Push crate
Fire rope
Down+Left/Right
Scoot backward instead of turning
Down+A
Pull a crate
Direction+A
Fire rope at an angle

On ladder

Controls in this situation:
Up
Ascend
Down
Descend
Left
Leave
Right
Leave
A
Fire rope

To enter a ladder from the top, scoot backward. To leave a ladder, anchor a rope and press away, or reach the top or bottom.

After shooting rope

Controls in this situation:
Up
Climb rope
Down
Pull crate
Left
Scoot
Right
Scoot
A
Let go

You won't be able to scoot more than twice your height away from where the rope is anchored.

While swinging

Controls in this situation:
Up
Ascend
Down
Descend
Left
Pump
Right
Pump
A
Let go
Up at top of rope
Climb onto wall, enter ladder, or hang from lamp fixture
Down on land
Drop in front of certain floors

There are two ways to pump while swinging: as a driven oscillator or as a parametric oscillator. The "driven oscillator" is most like the common way of swinging on a swing: press Right or Left to lift your body while swinging forward, then let go while swinging backward. The "parametric oscillator" is a bit trickier, but it can help you whip yourself across large gaps: press Down for a little boost just before the highest point of the swing, and Up at other times. To kick a crate forward, descend just before you hit it.

Level editor

Showing entire objects. (Click to hide)
Showing only top tiles. (Click to show)

You can make your own levels now by running leveleditor.py.

Arrows, Page Up, Page Down, Home, End, Mouse wheel, Click arrows under Screen
Scroll view
Click tile number
Open tile picker dialog
M, Click Fill
Toggle showing tops of objects vs. whole objects
Left click
Place tiles on map
Right click
Choose tile under cursor
Space
Choose empty tile
Insert
Choose column insertion
Backspace, Delete
Choose column deletion (or insertion)
Esc
Close editor, save level, and begin play-testing

The levels are stored as column-wise Markov chains, where each tile is predicted from the tile above it. For example, it places solid dirt below a grass tile, the bottom half of a door below its top half, and post sections below a street lamp. This makes it easier to build a house, as you only need to define the roof. It also means you can't just have a floating platform; you need some other tile to hold it up.

If you want to suggest more tile types, meet me on IRC. I hang out in #nesdev on EFnet under the nick "tepples".