Author Archive for Craig Timpany


Pinballesque v0.05

I’ve put up a new version of pinballesque.

ml2_thumbNew stuff:

  • The game now has ramps, as I mentioned in the last post. Still have a few sorting issues with the visuals.
  • I’ve redone the multi-level table, which is the one to play if you want to try out the ramps. It’s lit and rendered now, and this time in a glowy, emissive style rather than shiny look I used in table 1.
  • I’ve made some colours inherently more valuable than others (Later in the rainbow is higher). This means the top half should be much higher scoring than the lower half. It also gives me the capability to give higher rewards for harder shots. Unfortunately it adds another multiplier to explain and at present the UI isn’t doing a good job of explaining how it arrives at the score. I’ve also made some internal preparations for the goal system.
  • I’m prompting to user to hit a go button before launching the ball. My hope is that it gives people a chance to familiarise themselves with the flipper controls before being under pressure to keep the ball in play.
  • I’ve tweaked the trajectory hint visuals so it’s clearer that you’re seeing an angle range available at that flipper position, and also the angle you’ll get if you flip right now.

Adventures in Dwarf Fortress Adventure Mode v0.40

The last time I played Dwarf Fortress was in 2006, and I was playing fortress mode, so this is a learning experience for me. Some selected highlights:

Rolling a character

Should I put points into ‘Misc. Object User’? Sounds pretty useful.

I decided instead to put all my skill points into ‘Biting’ instead. My character is a level 14 Biter, or a ‘Professional Biter.’ Hopefully this means I’ll get paid to bite.

Starting out

My character description says I have very short ears, which is weird, because I opted to be an elf.

Reviewing the keybindings:

[o] – Show strongest odor.

[I] – Interact with an object in an advanced way.

[W] – Weather. (Note: unspecified if this is a noun or a verb)

I notice that the Get Item command gives you the option to start a fire. Useful!

The adventure mode quickstart guide:

If you are in a private house, you must first ask the owner for permission before you can sleep. If a commoner is blocking you from entering his home, use the [s] key to crawl under his legs, and then the same key to stand back up.


In the starting location there’s another character. I say hello to them. Crash to desktop. This is v0.40.01, the first release after 2 years of feature development, and no QA.

This time I skip the greeting and get this menu:

  • Bring up a specific incident or rumor
    • Spread rumor of Sunkenbear the Misty Root’s presence in Glacialpelts the Sea of Panting.
    • Spread rumor of Migrur Tundrabeach the Tufted Dunes’s presence in Dunesclods.
  • Inquire about any troubles
  • Ask for directions
  • Ask about the local ruler
  • Trade
  • Exchange, give or take personal items
  • Ask favor, place request, make demand or issue order
  • Ask listener to join you
  • Claim this site for yourself
  • Ask about this site’s neighbours and trade partners
  • Ask about the surrounding area
  • Comment on weather
  • Comment on natural surroundings
  • Accuse listener of being a night creature
  • Inquire about listener’s profession
  • Ask about listener’s family
  • Brag about your past violent acts
  • Say goodbye

I have no idea what the procedural rumours relate to. Did I walk past these people?

Me: (Ask about the surrounding area)

Her: “Ask me when I’ve returned to my home!”

Me: (Tell me about the local ruler)

Her: “The Firey Poet rules Lordbear. I am chieftainess. We are in the right in all matters.”

Me: “Are there patrols or guards?”

Her: “You sound like a troublemaker.”

I try the trade option but apparently that’s only for shopkeepers. Exchange brings up a bartering interface. I successfully trade loincloths with the chieftainess.

Me: (Claim this site for myself) “I’m in charge of Lordbear now.”

Her: “This must be stopped by any means at our disposal.”

Her: “Just now, (player character) claimed Lordbear in the name of (player character)”

I get a menu allowing me to react to this startling news:

  • Ask for the whereabouts of (player character)
  • Ask for directions to Lordbear
  • State opinion that it must be stopped with violent force
  • State opinion that it is not your problem
  • State opinion that it was inevitable
  • State opinion that it is terrifying
  • State opinion that you don’t know anything about it
  • State that it is for the best
  • State that you don’t care
  • State opinion that it is sad but not unexpected
  • State opinion that it is terrible
  • State opinion that it is terrific
  • Change the subject

I ask for more information about myself, in the hope that maybe it’ll lead to a self-assassination quest. It doesn’t have any effect. Nor does asking her to join me on my adventures or accept me as her lord. I accuse her of being a night creature but she just tells me to calm down. At no point does she turn hostile.


Having exhausted the charms of the conversation system, I set off into the wilderness. I meet a flock of peacocks that are mingling with a herd of stray cats. Lots of messages appear in the console. The stray cats affectionately head-bump the peacocks. The peacocks eat bugs. I am informed of this bug by bug.

I decide that I need some food and find the attack command. I attack a peacock and get a menu where I choose the target body part, the attack method and the manner of attack (fast, precise, multi-attack…). I bite the peacock in the belly. “You latch on firmly.” I attack again, and this time have an extra option: “Wrestle using upper front teeth.” “You bit the stray blue peacock in the guts from the side, tearing it. The stray blue peacock looks sick!” I bite the peacock some more, and manage to get multiple simultaneous wrestling holds using my upper front teeth, my lower front teeth and my upper right front teeth.

Before I can press my molars into action, the peacock dies of blood loss. I pick up the corpse and check my inventory. Sure enough the peacock corpse is there, along with quantities of peacock blood contained inside each item of clothing I’m wearing. The peacock guts are still in my clenched teeth. I try to interact with them in an advanced way.


Progress Update

What I’ve been up to lately:

  • I’ve been pitching a concept for a tree-top city builder game, that’s too large for me to self fund.
  • I shifted house.
  • I added ramps to Pinballesque. This turned out to be circuitous. I figured that moving from a 2D to a 3D physics engine would be the simplest way to achieve it, and might get me more realism.
  • After the reimplementation I wasn’t very impressed with PhysX. It had trouble with really fast rotation which I ended hacking by making the ball slide instead of roll (And yes, I did crank the max angular velocity). The continuous collision detection in the version I was using wasn’t reliable, which is bad news for something as fast as a pinball. Initially I tried to implement habitrails as extruded tubes of collision, but a mess of thin collision geo seemed like a far worse solution that just hacking it with a spline.
  • After I wrote my custom physics for rolling along a spline, I went back to Box2D. Now I have a 2D table surface with 3D ramps and rails, and rail visuals courtesy of Curvy. It works well.

I’ll have a new build up after I’ve built a table that does a decent job of showing off ramps.


Pinballesque v0.04

More Pinballesque!

  • A new table: a proof of concept for multi-level tables. It’s a rough cut to try out two sets of flippers. The idea is that there’s a high risk/high reward upper table with really wide set flippers, and if you lose the ball, you can still recover it on the easier, narrower table.
  • In an attempt to shorten the aiming learning curve, I’m displaying a prediction line when the ball is resting on a flipper. I also show the full range of angles that can result from the flipper position.
  • Simplified gamepad controls to moving flippers in sync with each other, instead of each stick moving a flipper independently. It didn’t add much and made it much harder to learn. You can use both thumbsticks in unison to move the flippers faster.
  • The gap between the flippers is now constant. I used to keep one flipper near the centre to make juggling from flipper to flipper easier, but it’s kind of redundant now that the ball has more friction force from flipper movement.

I changed the GUI from ImGUI to NGUI in preparation to do the bulk of the UI screens. (I’m thinking Jetpack Joyride-style minigoals). NGUI is frustrating the hell out of me. Anchored objects work fine for a little while, then freak out and go walkies later on, and I still haven’t been able to identify why. The featureset of NGUI sounds awesome, but I wonder how much of it is riddled with bugs?


Pinballesque v0.03

A new Pinballesque build is up:


  • I’ve redone the flipper physics so that they no longer glide frictionlessly under the ball. (Setting a Box2D rigidbody’s velocity directly is more respectable than teleporting its position. Using forces was simply too laggy)
  • The flipper bases now have nubbins on the end opposite the flipper to stop the ball from rolling off.
  • Added gamepad controls. I’ve only tested them on a 360 controller so far. Gamepads give you the ability to move the two flippers independently.
  • Flippers can now cross the center-line by a smidge, to help out when you lunge with the wrong flipper.
  • Mouse sensitivity is now consistent between different resolutions.


  • The combo blocks now have symbols associated with them to make it easier for colour blind folks.
  • I animated the combo blocks entering the combo stack. I use a depth mask above and below the stack and suspect it may cause compatibility problems. Let me know if you see blocks poking out the end.
  • Added light effects when you collect a combo block.

Render tests for Pinballesque

I’ve been experimenting with different art styles for Pinballesque. Here are some of the test renderings I’ve made with Zen Photon Garden, a 2D raytracer (the high quality batch version, not the web based one).

Zen Photon Garden is unusual because instead of the output being based on lit surfaces, it’s a map of photon density across a 2D area. This gives an interesting smoky look where every shaft of light stands out in stark relief.

Film noir styles! If only my game weren't about colour combos...

Film noir styles! If only my game weren’t about colour combos…

Woah. Too disco.

Woah. Too disco.

I said 'too disco'!

I said ‘too disco’!

After manual compositing in the GIMP

After manual compositing in the GIMP

Some promising results, but for consistencies’ sake I’d have to do lush shading on all the rest of the art too, which is daunting. The dark lines extending from the ends of the walls are an artefact I’d like to get rid of. I think I can fudge it in my Unity -> ZPG exporter by rounding the corners of the boxes.


List of Olympic events to be discontinued

In the wake of Sochi, the IOC have opted to discontinue certain events due to adverse outcomes:

  • Men’s Deep Jump
  • Super heavyweight pole vault
  • Clean and Jerk and Throw
  • Shouting (Men’s Lorem Ipsum)
  • “Turkish” Running (Women’s, 7m)
  • Equestrian Half Pipe

Moving targets a non-starter

I spent a big chunk of this week trying out moving targets in Pinballesque. They’re tempting because they’d let me build a game out of spawn patterns and movement behaviour rather than table geometry, which would be less work. It turns out they suck pretty hard in this game:

  • The combo system is all about making patterns, so inadvertent hits are really punishing. This rules out spawning a big jumble of objects. In Breakout it’s a good thing if the ball makes it through the outer layer and starts bouncing out of control in the interior layers, but that’s death with this combo system. I wound up restricting them to a single layer and tried to make sure the return angles were fairly straight.
  • I needed to move the objects very slowly, so the player has time to wait for the ball to roll to the right part of the flipper. To change the configuration of objects at more than a glacial pace, I rhythmically pulsed the movement.
  • I needed to make the objects fairly large as well.

Add it all together and the experience isn’t really that much different from a series of ramps that periodically cycle through colours.


Pinballesque, prototype 1

Here’s the pinball redesign I’ve been working on for the last couple of weeks:

Play Pinballesque

  • As I mentioned in the previous post, I want the goals in pinball to have more internal consistency underlying them. I’ve made a combo system where you get points if you collect colours in some kind of pattern (consecutive repeats, rainbows etc.). Sorry colour-blind folks, I really ought to add symbols too but I haven’t gotten to that yet.
  • You can move the flippers from side to side. They rotate as they move to allow a range of shot angles, so I can tighten the flippers’ flick angle down, which reduces the precision of the timing that a player needs to hit a target.
  • They’re also gigantic flippers with a very gentle slope. All to get a larger timing window.
  • I’m still playing around with different schemes for moving the flippers. I ought to play around with different input -> response curves.
  • Always keeping the pair of flippers adjacent to each other felt too Breakout-ish. Making one flipper mirror the other made transferring the ball from flipper to flipper really hard, as did moving them in synchronisation on their own halves of the track. I haven’t tried mapping them to thumbsticks yet, but it’s promising.
  • It’s hard to evaluate how successful I’ve been with the crappy table design. I feel like there’s a ton of room to improve on that, but table design is tricky and it really is a time sink.
  • For fun I put in some tinkly marimba notes with pitches driven by the sequence of colours.

First impressions of Unity’s 2D support

  • The sprite renderer looks handy. I dig the new editor handles and the atlasing support.
  • The 2D physics engine is way less configurable than PhysX, and I regret that I didn’t just use 3D physics with one dimension and 2 rotation axes locked. It’s missing some really obvious stuff: moving/rotating objects without teleporting to the final position, a ConfigurableJoint equivalent, configurable bounce/penetration thresholds and so on.
  • That said, being able to edit the polygon of the PolygonCollider from inside the editor is really, really convenient. (Shift and Ctrl click on the collider outline)

Sound in Unity

This is my first time using sound in Unity. The built-in support is monomaniacally focused on sound in 3D environments without any of the other stuff a game typically needs (control over polyphony, priority/duplicate handling, ducking, loop boundaries and loop mode, variant sounds). I previously thought GUIs were the most unloved part of Unity (and the most likely to be summarily replaced with an Asset Store hack), but sound’s definitely a contender.

(I love that it has tracker module support out of the box, although  – characteristically – there’s no control over the playback. No channel volumes, no tempo control, no seeking to patterns)

The dumbest thing is that FMod is built into Unity, you just can’t see any of it from the script layer. My former co-workers, the Curry Brothers, have managed to do an end run around this by writing C# bindings for an FMod DLL that they include along with the exe. Surprisingly you don’t need Unity Pro for this. It won’t work for web player builds, of course, but it’s an interesting possibility for a full game.


My newest victim: Pinball

My non-Mostly Tigerproof work is coming to a close, and I’m back to prototyping weird ideas again. This time the theme is pinball.

I’ve always loved pinball. During the 50-ish years between the advent of flippers and coin-op pinball’s commercial collapse, it has become a well-tuned and richly elaborated class of games, so it might not be obvious why I’d choose it as something to try to improve upon. In spite of how much refinement it’s seen, I believe the game still has glaring problems.

I play vastly more video pinball than real pinball. I grew up on video pinball, as did nearly everyone younger than me. In some ways pinball is poorly adapted to what is now an overwhelmingly software-based existence:outlane

  • It’s fundamentally portrait in a landscape world. I’m looking for ways to make better use of wide screens.
  • There’s no consensus on what the role of nudging should be. Is it cheating? Is it essential, because you have no other defence against the outlanes?
  • Nudging is usually poorly implemented in video pinball, due to its partial legitimacy. If nudging is part of the game, it needs better feedback: on-screen counters of how many nudges I have left before a tilt, hints about how far the ball will be nudged, maybe even a nudge training table. If nudging isn’t part of the game, the game needs redesigned so it won’t be missed.
  • And speaking of outlanes, they’re shitty design. They prevent good players from playing indefinitely (a particular worry in coin-op), but they do it through random instant death. There have been a couple of attempts to replace them with timers (Goin’ Nuts, Safecracker), but hitting a time limit almost feels even cheaper than getting an unlucky bounce. Luckily there’s no shortage of ways to make a game hard.
  • Pinball tables don’t do a good job of communicating goals during play, and the goals are arbitrary without much internal logic to them. Flashing lights and voice prompts are very helpful, but personally there’s so much unexplained stuff I wind up reading the manual. Reading the manual is a chore though. It’s a chore that recurs on every table, which might be unnecessary. Could there be a system of goals shared between a family of tables?

I think pinball’s most fundamental drawback is its uneven learning curve combined with its heritage as a game of chance. The challenge in pinball is directing the ball to where you want it to go. Catching the ball in the crook of the flipper is easily learned, but it takes precise timing to shoot at the angle you intend. A pinball will roll off a flipper in a second. During that second, the resulting angle of the shot varies by 60 degrees or more. What’s worse is that most of that variation is compressed towards the tip end. Each frame matters.

It’s wonderful that pinball rewards such high levels of finesse, but it’s hateful that even after hours of practice, beginners find their performance is dominated by random chance. Even when they do achieve things, it’s hard to take pride in it with the knowledge that flukes outnumber intentional shots. I think pinball should do a much better job of reflecting the player’s intent, even if their timing isn’t dead on. I’d love to bring the experience of being good at pinball to a wider audience, while giving old hands even greater challenges.

Those are my high-falutin’ design goals. More on my specific approach in the next post.


Get every new post delivered to your Inbox.

Join 59 other followers