OK, here’s a look at the hobby project I was actually working on when I got made redundant and decided to go Indie – Maps and Legends. The name once again was very much placeholder (and REM fans may recognise it as the title of a nice track from the album “Fables of the Reconstruction”). Maps and Legends (MandL as I tend to call it) got shelved immediately since there wasn’t a chance it would be completed before I ran out of money, and I’m not entirely sure how easy it would be to make money from it. Here’s a screenshot:
A quick disclaimer on the graphics – I really don’t like how it looks. The whole game is really rough tbh, but specifically the island graphics are rubbish. The thing is it’s largely unimportant – the game could be in lushly textured 3D, plain old sprites in 2D or even ASCII – it’s just a map at the end of the day – the gameplay is all in the text.
Another disclaimer – having said that the text was all first draft too. The examples I’m posting could all do with work.
Also, once again there’s no playable version. As it stands it’s awful – largely unfinished, with most of the existing content actually disabled, and what’s left in there happening all the time. When making a game built almost entirely of random events you soon learn that you want the ones you’re currently working on to happen all the time, and everything else to GTFO.
So first a quick overview. MandL got a quick mention in my first WIP – the game was born as an entry for a coding competition back at Blitz Games with the theme being procedural generation. I decided to procedurally generate an island populated with tribes and NPCs that the player could explore with the intent of creating a game a bit like Strange Adventures in Infinite Space or The Wager. There would be no combat – the game would be all about decisions and consequences. It soon became clear that this was far too large for the monthly competition, so I split that away and made Super Critter Kill for the competition, and kept MandL as my main project at home.
As a brief overview of the game, the player takes the role of a Victorian explorer and would start having made landfall on a mysterious island shrouded in darkness. The choice of Victorian explorer gave me a very clear voice to write with and lots of character, but also led to me adding a faithful manservant who would accompany you, which opened up lots of opportunities for humour.
The player explores by moving one square at a time, and when they enter a new square they might encounter a tribe or an NPC who they could talk to, or they might get a random event, which could be based on their location or the time of day, or any number of other triggers. These events could be chances to gain cash, useful items, extra resources etc. but could also be much more complex, or just be for fun. Below is one example where the player can lick a frog to see if it has any special effects (they can also get their trusty manservant “Branston” to do it instead).
This event could lead to one of a variety of “drugged” status effects which would have all manner of repercussions (some good, some less so), or could do nothing at all, as below (where your manservant is now called Duckworth-Lewis – note to self: random generation makes coherent screenshotting very tricky indeed.)
The original idea was to create a game that could be played in a lunchtime, but would stand up to countless replays with the player always getting new adventures (hopefully). So there had to be loads of these events, and to keep them fresh they needed to vary each time you received them – hence numerous “drugged” effects coming from one event. However to go further I then decided to try and generate the description of the event itself – so that even if you happened to get the same event, chances are you wouldn’t have read the same words before. This would involve all sorts of techniques – random phrase selection, changing events based on the player character’s gender, what they were wearing and so on. So if you met an NPC whilst wearing a remarkable hat you might get different text than if you weren’t. Obviously this makes generating the events far more tricky and time-consuming, and in truth I’d barely scraped the surface on this aspect.
And the plan was even larger still – those “drugged” effects I mentioned earlier included “paranoid” which would stick with the player for the rest of the game and would affect a huge number of events – meetings with NPCs, dealing with tribe leaders, and probably most mentions of the player’s manservant. (If theres enough mileage in it I could also include the option of a paranoid manservant if you chose to get him to lick the frog instead.)
Another good example of the scope of the game (and the feature creep involved) was an event that would occur on the coast – finding a message in a bottle. This could turn out to be many different things – treasure maps, useful information, coded messages and loads of other things I haven’t even thought of yet. It could also simply be Victorian spam (note that this example is tailored to the player being female – with the player’s manservant (now called “Ives” – thanks again random number generator) being judged as satisfactory (the typo in “satisfying” has now been corrected, fyi):
But then I came up with the idea of it being an order for pizza. This led to me spending a fair while writing code to randomly generate pizza orders in a variety of styles – a basic list, a Victorian gentleman, a pirate etc. This involved creating daft names for pizza establishments and a full menu of pizzas, side-orders and beverages so that every order would be different. The text in the following example needs a ruddy good editing, but it’ll do as an example:
So when playing the game if you move into a beach tile there’s a smallish chance you’ll get an event. There’s a small chance that this event will be a message in the bottle, and then there’s a small chance that it will be a pizza order. This all adds up to the chances of you getting the pizza order event in any given game being basically very low indeed. Regardless, I spent lots of time making sure that if you happen to get it again in a different game chances are it will read entirely differently. That was my intended approach to many of the events in the game and there would have been hundreds and hundreds of them.
Furthermore, with the pizza example I figured if someone’s ordering pizza then somewhere there must be a pizzeria – so why not this island? So I added a chance of the island having a pizzeria. Now when the player gets the pizza order event they can choose to throw it back in the sea, take the money that’s included with the order, or take the bottle – each of which then allows the interaction with the pizzeria to change if they happen across it whilst exploring. The original low-odds pizza order event has birthed an entirely new set of events that now need to be written.
This is feature creep writ large – something that conventional game-dev wisdom is largely against – but here I’d argue it is critical to the game I was making. It’s something that one person on their own can afford to do, and in many cases should do – providing they can see that it’s actually benefitting the game.
An additional example of this is the pack animals. Along with your manservant, you’re also given a pack-animal at the start of the game. This is chosen at random (horse, donkey, ox etc.). It would then pop up from time to time in events with different outcomes for each (if a bear attacks it might scare off a pony, kill an ox, or be scared off by a horse as it lashes out with its hooves, for example). Also each type would generate its own events from time to time. Basically each pack animal was a significant amount of work, but only a small part of the game. So adding a new one should require a lot of justification – right? Nope! It needed me to think up just one pun about a goat.
To add the goat (an unusual choice of pack animal admittedly) I wrote a new intro that involved your intended pack animal being washed overboard from your boat on the voyage to the island, leaving you with a goat that was meant to be used for milk/food. This can’t happen often (not only would it get old fast, but also it would be a handicap for the player because the goat – crucially – can’t carry as much weight as the other critters), so you’ll be much more likely to get one of the other animals. At some point I’d then need to write all these goaty events and alternatives as they occurred (much of this isn’t yet implemented). Finally I then needed to add a very low-odds event where you stumble across a large stash of very heavy treasure.
All of this extra work is so that if you happened to get the slim chance treasure adventure whilst having the rare goat pack animal you’d find that the goat couldn’t carry all the heavy treasure. I was prepared to do all this extra work for the chance to use this line:
“We’re going to need a bigger goat.”
I love puns, and think they’re worth celebrating, and will go to great lengths to do so. And whilst there will be a lot of extra work to get this one pun in, its all a bunch of opportunites to make even more good stuff that will benefit the game. And beyond that if anyone playing the game finds that as amusing as I do, chances are they’ll tell their friends about it, and that is worth an awful lot.
That there is one of the reasons I love this game so much, and also the reason I immediately put it on the backburner when I went indie. The scope of it allows me to indulge all my silly ideas, whilst writing about pirates and dragons and fairies and elves and anything else that I can think of, but it also means that as a job of work it’s an unkown size, certainly already very large, and would continue to grow if I worked on it.
A huge issue with it as it stands though is that it’s really inefficient to work on the way I currently have it. Every event is custom written, because every event is generated differently, and I never sought to mitigate this at all. Actually creating content for it is cheap and easy – it’s just text – but the way it’s currently implemented means getting it actually in-game, suitably randomised and generating the right number of player responses based on circumstances (if you’ve lost your manservant for example (snigger) then you can’t get them to lick the frog, obviously…) is much trickier than it needs to be.
However, I am currently looking at getting this back up and running in Unity as a side project. The main plan for it is to look at solving the issues with implementation to make it as easy as possible to add content, because if I can get that sorted, it’s an ideal project to have pootling along in the background. It just needs shedloads of text throwing at it, and that can be written anywhere and anytime. As mentioned at the top, the graphics are immaterial, so if I can build up the essential content to a point where it looks like a viable project I can start worrying about getting it to look the part so that people will be prepared to pay for it.
Interesting stuff. And the scale of project that would terrify me 🙂
Making it so text heavy would make it an incredibly difficult task. Procedural generation for graphics or maps can get away with a lot more than anything language based because it’s pretty easy to spot something not written by a human. Even the best AI struggles with that. The only way to reduce that is to write more text yourself and quickly I could see that becoming unrealistic.
Perhaps designing a system that relies more on graphics would help? A lot of information could be portrayed in graphics meaning you don’t need text for it and can still have shorter passages of generated text to produce the unique stories you are after?
I hope you can resurrect the idea somehow though. You clearly enjoy the writing side of it 🙂
Pingback: I | Bearcat Blog