Playing Michael's 'Roll Play' RPG

Playing Michael's 'Roll Play' RPG

2022-Jun-06 09:15 AEST

For the 12th Kajam, Mike K submitted RPRPG, the Roll Play Role Playing Game System, 'a roleplaying system that uses bowling to resolve actions'. I'm using this system to play a single-player campaign with the goal of getting a character based on myself from Brisbane Australia to Michigan USA to slap Mike for making such a punny game.

Lacking a bowling alley, I will be using MSDOS bowling game 'KING PIN' to cover the bowling minigame.

Phase 1: Character Creation

RPRPG characters have three stats, Physique, Intellect, Nimbleness ('PIN', another slappable pun), and their values are determined by bowling a frame for each. A quick websearch tells me that a frame is 'two bowls', unless you hit all the pins over on the first bowl.

  • First stat is PHYSIQUE. I bowl a frame and knock over 6 out of a possible 10.
  • Next is INTELLECT. I manage an 8.
  • Finally we roll for NIMBLENESS, the result is a reasonable 7.

Phase 2: Coming to America

My character begins in Brisbane, Australia. To reach the target in a reasonable timeframe, he needs to get to the airport and catch a flight. I grab my passport and decide to take a taxi to the airport. Reaching the destination, the driver wants $100 for the ride. I try to escape without paying, using my NIMBLENESS to dash away from the driver and escape into the busy airport. This is about a 6 in difficulty. I roll:

With a result of 5 I have failed in my attempt and am grabbed by the driver. He smacks me and takes my wallet, leaving me at the airport without any money.

Undeterred, I make my way to the ticket desk and attempt to blag a free ticket to the USA. This is going to take considerable smarts, so I determine it is an Intellect test of difficulty 9. RPRPG lets me spend points from my stat pool before rolling, so I decide to blow my entire Intellect budget of 8 points. This means I only need to knock down a single pin!

I manage a 9, for a total of 17. I dazzle the ticket salesdesk with a sparkling tale of misadventure, barely exaggerating . They are so enthralled that they offer me a free first class ticket on the next flight to Michigan.

The majority of the flight passes uneventfully. I luxuriate in the ample leg room that I imagine first class provides and restore my stat pool. But then, disaster! As we begin our approach to Michigan, bad weather has caused a diversion to some other state that someone with a more thorough knowledge of the Midwestern United States could easily identify. I resolve to wrench open the aeroplane door and throw myself out into the void, but a trio of Nuns misinterpret this as a suicide attempt and attempt to stop me with physical force. The Nuns, though learned and wise are somewhat old and frail and individually represent a difficulty level of 2, but combined they form a phalanx of difficulty 6, which at this point I'm not confident I can bowl, so I allocate 2 points from my Phyisque pool, leaving 4 in reserve.

Rolling a 9, I smash through the three Nuns like a bowling ball through so many pins, and operate the emergency exit. The pressure difference immediately evacuates me into the frigid high altitude air, and the aeroplane flies safely on to it's new destination.

As hinted at previously, my geographical knowledge of Michigan is extremely limited, but I am confident that it is at least 90% lake. I carefully aim myself at a deep body of water and attempt to execute a dive to survive my fall. As the water rushes up to meet me, I determine this is a difficulty 10 Nimbleness test, and allocate 5 of my points to the attempt.

With the stat allocation, I manage an 11, pulling off an olympic-qualifying flip into the pool that generates only the smallest splash. An easy swim to the shore and I know it is only a matter of minutes before I will confront my nemesis. Increasingly confident in my bowling abilities, I decide not to seek out an opportunity to rest and walk, dripping wet, to a nearby gas station.

Entering the station, I look for a map to guide me on my way. The clerk informs me that no-one uses physical maps in the age of GPS and smartphones. Instead I ask if they know where I might find Michael, but they are hesitant to reveal what they know. I attempt to deceive them with an Intellect test difficulty 8 and roll..

an 8, narrowly managing to convince the clerk that I am Michael's long lost Australian cousin, here to congratulate him on the release of his recent TTRPG system. They produce a pamphlet showing local theme park locations, and dominating the map is a large 'Michael K Estate and Funland'. I hail a cab and am quickly delivered to the edge of a spawling park of vast, opulent gardens set around a large manor house. Before I can leave the cab, the driver grabs my wrist and says "Hashtag Taxi on social media has been reporting a new trend where passengers just to run off without paying. You'll be paying me before going anywhere, my friend!". I ignore the driver and attempt to exit the vehicle with him attached to my wrist. A challenge of the Physique, difficulty 8.

I roll a 9 and drag the driver out of the taxi and along the path to the estate, like a petulant child refusing to walk another step being dragged along by an uninterested parent. I turn to ask him how long he plans to hold on, when suddenly his eyes widen in fear at the sight of something behind me, and he scampers back to the car and drives away at high speed.

Phase 3: The Final Showdown

"I'm impressed that you made it this far",

a low voice growls behind me. I spin to come face to face with Michael himself.

"But your inconsistent frame scores show that the bowling game is essentially a random number generator for you. You don't even know how to reliably apply spin!".

This stings, but is too true to argue with. He continues:

"I suppose you're here to physically assault me? Not a very imaginative scenario!".

I consider explaining that I've been up since 2AM and am too tired to be more creative, but before I can respond, Michael proposes a final challenge:

"Finish your final frame with a 10 or be forever banned from future DOS GAME JAMS!"

Too stunned to speak, I simply bowl.

And fail. Michael turns away from me in mild revulsion. I delete KING PIN bowling from my computer and never speak of this shame again. To this day, his cheek remains unslapped.

New blog

New blog

2022-Apr-20 02:28 AEST

It is traditional when (re)creating your blog to make a post commemerating the event.

After losing the source files to my previous blog's generator I have switched to a new backend and have migrated the previous blog's contents.

Gamedev update

Lots of new partially completed projects - a first person stealth thievery game with ratrogue of ratking games, a game boy platformer, some dreamcast games... all just waiting for me to spend enough time on them to reach a releasable state.

I also have a few gamejam entries that might warrant a write-up sometime

Ranting

I have been working in Windows lately, which is uncomfortable, feels uncool, frequently annoys me - but I almost never have compatibility issues or struggle to find or build some particular tool or library. This is my most frequent problem with various unixes and BSDs. Driver support is also a non trivial bonus, and with the collaborative Unity project I've been participating in, the benefits are considerable. But setting up toolchains, cross compiling, customising my environments to not be slow and mouse-dependent is a real pain with Windows. The new-ish Windows Subsystem Linux thing alleviates some of these problems moderately, but everything is still a workaround. Possibly the 'right' solution is to return to a well supported linux distribution for everything other than Unity work, but even my favourite linuxes come with systemd, which somehow always manages to cause problems for me. For now I'll stick to Windows for compatibility reasons and manage my frustrations with periodic complaining.

Escape from Flooded Cave (NES)

Escape from Flooded Cave (NES)

2021-Apr-26 12:00 AEST

Flooded Cave can be downloaded for free from itch.io

February saw the 11th Alakajam 48 hour game jam, with the theme ANCIENT RUINS. My interpretation was to make a game for ANCIENT hardware, the orignal Nintendo Entertainment System 'NES'.

This was my first NES game, and squeezing it into 48 hours wasn't trivial. I used the very accessible and fun 8bitworkshop, a companion site to a 'how to make games for various obsolete platforms' book series. This is an 'online development environment' theoretically allowing for the entire game to be created in the browser. While the code can be written in this environment, and graphics can be edited with the crude but functional image tool, it's really not suited for working with media such as graphics or audio. I had some trouble setting up my own local NES development toolchain though, and this online environment is completely preconfigured and ready to go, which is very useful for game jams.

As for the game itself, the gameplay is quite basic, guide the player character around a partially flooded cave / ruins, toggling switches to open doors. The art is extremely minimal due to time constraints and much of the game world is quite empty and boring as a result. I'd planned on adding ambient critters who live in the world and pose no threat to the player, and more varied tilesets for the various areas of the ruins. In particular I wanted to give the ruins an 'ancient temple' feel with various shrines and symbology throughout.

I did manage to implement the main hazard of the game, patrolling water-snakes. The flooded areas often contain a snake to prevent the player from passing. Short distances of water can be crossed, but anything more than a few steps and the snake will catch the player. An in-game item allows the player to move faster than the snakes and access the protected parts of the map.

Flooded cave can be downloaded for free from itch.io

Rayka

Rayka

2021-Apr-25 12:00 AEST

Rayka can be downloaded for free from itch.io

Back in January the Alakajam gamejam community hosted a RAYCASTING themed jam. I recycled the engine from my previous jam game A Final Delivery and added guns and violence.

RAYKA is inspired by classic shooters such as Wolfenstein 3D, BLOOD and Rise of the Triad. Your interaction with the world is entirely limited to shooting anything that moves and collecting occasional pickups.

The primary pickup of interest is extra guns. Many shooters have collectible weapons placed throughout the maps for the player to discover, usually each is suited for a particular scenario, such as a shotgun for dealing with weaker enemies at closer range, or a rocket launcher for taking down tougher opponents. RAYKA takes a different approach, in that every collectible weapon is identical to the player's default pistol - but the player can wield many of these at once. Eventually the player has so many pistols that they essentially become a walking minigun.

Conclusion

The game generated some small gaming press interest which is always a nice surprise, especially for a game jam entry. Player feedback was largely positive, most enjoyed the ridiculous number of guns onscreen at once, but others were so offended at my inclusion of enemy dogs that they refused to progress beyond the start of the game.

A Final Delivery

A Final Delivery

2020-Nov-02 12:00 AEST

October saw the return of Dos Game Jam, a long and open jam for making games inspired by MSDOS. I looked to Wolfenstein3D, Blood and Elvira for inspiration, and made a short no-combat delivery game set in a cemetary.

I had a raycaster engine in progress before the jam started, built with allegro4 for DOS, but it has a lot of extra functionality beyond a basic raycaster, such as multilevel floors, ceilings and wall sprites. It's not very performant, being written only in C with none of the high performance assembly that raycasters of the DOS era relied on for speed, and probably isn't even well optimised for C.

Although the raycaster 'runs fine' in DOSBOX with the virtual clock speed set to some unrealistically high number, I thought I'd write a simple raycaster specifically for modern operating systems instead.

CrystalCast

I called the new project 'CrystalCast' after the first object I spotted in my office, and made use of the coincidentally named 'raylib' library as my basis. Raylib does not actually offer much in the way of helpful features for a raycaster beyond pixel level drawing routines, but it's quite compact, easy to understand and is under active development.

More effort was probably spent on making an editor than the actualy raycaster, the goal was to be able to quickly iterate on a game once the editor was in place.

The editor allows me to quickly modify the map, place walls, floors, 'edges' (2D walls like fences and grass), sprites and triggers for activating events. Due to time constraints more of the game functionality ended up being hardcoded than I'd like, but the editor is still fairly flexible and I hope to use it for some future game jam entries.

A Final Delivery

The game itself is a no-combat 'walking simulator' where the player is tasked with delivery a package to a disused cemetary. If they choose to follow the instructions, they can leave the package in a burnt-out office, and then leave on their delivery bicycle. But my hope was to have players avoid the obvious conclusion to the game and explore a little further.

Spoiler warning!

The cemetary is littered with tombstones, one of which contains an oddly worded clue about the deceased being 'packaged' below it, and how they were the 'key' to progress. It's not very subtle. Once the package is delivered, this tombstone opens way to a small hidden area where a key can be found, which in turn opens a prominent lock that the player was unlikely to have missed on their way into the cemetary. Opening the lock grants access to a tomb area that can be entered to start the 'hidden' section of the game.

Originally I'd planned to have traditional FPS combat in this hidden section, but I ran out of time during the jam and instead went with some light puzzle mechanics. In the end, I'm glad I avoided combat because the game is more atmospheric and interesting (for a single playthrough) this way.

Overall I was pleased with my progress, I've made very few games without combat or traditional gameplay in the past. Had I more time I might have 'ruined' the game with normal FPS blasting and ended up with something less interesting. But I'm most pleased that I have a largely complete homemade game engine and editor to use in future projects, which if I can avoid excessive scope creep will largely have the technical hurdles already solved, allowing me to concentrate on the more creative aspects of game development.

You can download A Final Delivery for free from itch.io

SlipSpeed (MS-DOS)

SlipSpeed (MS-DOS)

2020-Apr-25 03:31 AEST

In November 2019 I took a break from my ongoing Game Boy project to try prototyping a racing game.. for MS-DOS. It's now April 2020 and the prototype is a released game available from itch.io. Whoops.

SlipSpeed started as a quick experiment to answer the following questions:

Can I build for MS-DOS from modern Linux/Windows/OSX?

Yes! This was the easiest problem to solve. DJ Delorie still maintains the very good and free DJGPP compiler suite, which is pretty much a complete solution for compiling DOS executables and is available even now for contemporary operating systems. After some configuration, I had a makefile that could cross compile to DOS and launch the game in the free DOSBOX DOS emulator in a single handy command.

Are there MS-DOS game development libraries?

Allegro kept MS-DOS support all the way up to version 4.2, which was maintained as recently as 2007! It has everything a developer could want in a game programming library: blitting, audio, image loading etc. I'd used Allegro a couple of times previously, most recently for DATA-RUNNERS, another MS-DOS prototype for the alakajam gamejam.

Would it fit on a floppy disk?

Including Allegro in an executable does bulk it up somewhat, but macros are included for excluding unwanted drivers and further optimisations are probably possible with some conditional compilation of the library. Totally reasonable filesizes. Unfortunately, out of the box Allegro doesn't support compressed image formats - so if my game was going to use much in the way of graphics I'd need to add support for compressed formats. Music was another concern, but I'm fortunate enough to be friends with talented musician and all round handsome dutchman Martijn Frazer, who explains here how he made the music and why it's so small. The shareware release version fits uncompressed onto a single 1.4MB floppy, the full game can also fit - but only when compressed.

Who would even want to play an MS-DOS game in 2020?

I'm a member of Dos Game Club, a community of nerds that pick an old DOS game each month and play it - something like a book club but for really old videogames. So, I figured I knew at least a few people that might be interested in a new game for their favourite operating system. Beyond that? Who knows - but it would be unrealistic to expect there to be a commercially viable market for a small independent DOS game in 2020.

So after some work I ended up with a development environment on a modern linux machine that could output DOS executables - and as my machine has a built in floppy drive, I could *almost* automate deployment to my real DOS laptop. I still had to manually eject the disk from the dev machine and insert it into the laptop, however :(.

For designing and building the tracks, I used the excellent Tiled map editor. It would have been fun to create my own track editor, perhaps running inside the game itself, but Tiled really accelerated the development process and helped me iterate faster on tracks.

If you're interested in seeing more of how the game developed, I kept an occasionally updated twitter thread populated with videos and screenshots.

Dashy No Witch (Game Boy)

Dashy No Witch (Game Boy)

2019-Oct-30 12:20 AEST

Download the game for free from here: Dashy No Witch on itch.io.

Some point in the distant past I put together a gamejam entry for #gbjam, a week long jam where entries draw inspiration from the limitations of the Game Boy console. I decided to stick most strictly to the limitations by making a game for the Game Boy itself. This was slow going and I ended up with a nice looking parallax scrolling demo with extremely minimal gameplay.

For Halloween 2019 I decided to flesh out the demo into more of a game and thought I'd just add a simple intro and a boss battle, something I'd made a start on previously but never completed.

I quickly ran into issues with the intro. My first attempts at drawing the cutscene graphics required more video memory than is available on the console, and to save memory I had to progressively edit the images to use more common 8 by 8 pixel tiles that could be repeated. A great excuse for my bad art.

For example, the hills visible from the window are made of just a few reused tiles, and the broomstick handle and the bedpost also share.

The RGBDS assembler includes some great command line tools for converting properly prepared images to Game Boy friendly formats, and will optionally even remove duplicate tiles, making it easier to fit everything into memory.

A video demo of the game on twitter

Tower of Bird

Tower of Bird

2019-Oct-01 10:00 AEST

Download the game for free from here: Tower of Bird on itch.io and view the associated alakajam page here.

The 20th to 22nd of September 2019 was the 7th Alakajam 48 gamejam. Theme suggestions are submitted by the community, and through a mysterious but possibly democratic process, a single theme is chosen and used by all participants to create a game from scratch. After my theme suggestions were rudely eliminated in an early voting round, I pinned my hopes on 'Bird' being selected. That didn't happen, and instead the mob voted for 'Tower'.

I try and be indifferent to the selection of themes in gamejams - I really don't believe there is such a thing as a 'bad theme', but I do have my preferences. This is especially true when it comes to playing the games other participants have made - certain themes tend to result in a lot of very similar games, and nobody wants to spend the post jam voting period playing 50 'platformer where you can invert gravity' games. I felt like 'Bird' would have resulted in a much wider variety of entries.

Anyway! My initial idea was some kind of assassination simulator where you would perform politically motivated state sponsored murders of persons in a skyscraper (that's the tenuous theme link to 'Tower'), but my partner didn't much like the sound of that and so instead I decided to make something our four year old child could play.

I decided almost immediately to try a Tricky-Towers inspired physics stacking game, and so picked Godot for its combination of apparently mature 2D engine and integrated physics engine, instead of trying to slap box2D into a custom engine or even worse - write my own physics engine during the jam.

I'm glad I took this route - normally in game jams I 'roll my own' as much as possible, which leaves very little (if any) time for nice media assets or polish. Working with 2D in Godot proved very straightforward, and even the physics engine was fairly simple to bend to my will.

The screenshot above shows the POOP mechanic - a hidden meter fills as the player builds their tower, eventually allowing them to glue a cluster of birds together with 'bird poop', causing them to function as a single rigid physics body. This helps solidify the tower, but more importantly it simplifies the physics simulation which would otherwise quickly become chaotic when large numbers of birds are moving and colliding simultaneously.

Having more time for things beyond implementing an engine and the basic mechanics was a lot of fun, and I even had time to spend on music, almost always relegated to lowest priority in past jams. The soundtrack is fairly short and repetitive, but I'm pleased with it and my son hums it to himself, which is high praise indeed. You can hear it in this quick trailer I threw together to promote the game on twitter.

Hopefully I'll allow myself to sometimes work on simple game ideas in future jams, and produce more polished entries - but perhaps with less poop.

Game Boy roguelike project

Game Boy roguelike project

2019-Aug-06 11:47 AEST

My current project is writing a new game compatible with Nintendo's original Game Boy console, but with support and optimisations for the later Game Boy Color.

I'm aiming to have the game be played on real, physical consoles. So while emulation will of course be an option, the design is informed by the limitations and differences of using a handheld with an unlit screen:

  • Gameplay sessions will ideally take between five and ten minutes to complete to limit having to look at the unlit screen for long periods, or having to worry that your battery is running low at a critical time.
  • Roguelike 'start over each time you play' style gameplay to avoid having to include expensive save-game support in physical cartridges.
  • Instead of tracking progress with saves, completing goals in the game gives the player secret information that will allow additional gameplay options on the next playthrough. More on this in a later post.
  • Turn based gameplay to allow the player to safely look away from the screen without instantly being murdered by monsters. Important if you're playing on a handheld outside or in a busy area.

The game is currently a barebones prototype with (very) placeholder graphics, so hasn't been very exciting to look at. When I reach the initial art pass in the coming weeks, there will be lots of sprites to look at, and doubtless some hints about the setting and combat implementation for roguelike purists to be angry about.