No Time To Play

Posts by Felix

(A programmer and Web developer by trade, Felix has grown up with the Sinclair Spectrum and has played (and coded!) games on several generations of PCs starting with the XT, and lately on J2ME-enabled cellphones. He's fond of turn-based strategies, interactive fiction and MUDs, but has been playing and making mostly casual games as of late.)

Encounter-based game design

by on Jun.15, 2017, under Case study, Gamedev

Perhaps the most infamous feature of roleplaying games, computer and tabletop alike, is the random encounter. Dreaded by players, panned by reviewers, it’s nevertheless been a constant presence in the genre, ever since its original appearance in Dungeons & Dragons. It made sense in the latter, which was always at least partly a resource management game, but few modern RPGs preserve that aspect (except for roguelikes). And in a game that tries to tell a story, random encounters are just an annoyance, regularly getting in the way for no good reason.

Which is a shame, because encounters have been the basic unit of storytelling since ancient times. What else is a fairy tale than a string of encounters the protagonist runs into along a linear road?

(And the protagonist’s journey in a fairy tale is linear. Plotted on a map, it may well meander all over, but it must still be followed strictly from end to end. Straying from the path always leads into trouble, and turning back is the worst sort of failure.)

Having recognized this basic truth, about a year ago (as of June 2017) I started thinking how to take advantage of it in game design, because unless open-ended exploration is part of a game’s appeal, the map can turn into a dead weight. Players can easily tell when they’re being presented with false choice. Making good maps is hard; can you afford to waste time and effort only to have the results rejected for being pointless?

(continue reading…)

1 Comment :, , more...

Weekly Links #174: public announcement edition

by on Jun.11, 2017, under Gamedev, News

Hello, dear readers. Despite the doubts I was expressing last time, not only I got another entry into the soon-to-end game jam, but also made a game design breakthrough on the same occasion, as detailed on Tumblr. Exciting times ahead!

Speaking of last time, I forgot to announce that for two months, June and July, the book of the blog is half-off to mark its second anniversary. In a similar vein, RogueBot is now free — I should probably mirror the desktop edition here — and another price cut is coming.

I’ll conclude early today with a couple of retrograming news. While Jimmy Maher just posted the first article in a new series on Soviet computing, I very belatedly discovered a modern magazine dedicated to the ZX Spectrum, that’s both free and high-quality. Issue #17 just came out, so don’t let the backlog grow too long!

For now, however, I have a couple of older projects to revive, and a new one to massively expand. See you around.

Leave a Comment :, more...

A glance at the Nim programming language

by on Jun.08, 2017, under Off-topic

I love learning new things. That’s helped me stay on top of this ever-changing business we call IT. And part of the fun is how random it can be. Take the past two days: I was reading about the new zipapp module in Python; from that I moved to the setuptools suite, which in turn mentioned the reStructuredText file format. Curious to know what other tools support it, the next day I looked over a suitable list… which in turn mentioned the Nim programming language.

That made for a really busy evening.

Nim belongs to the new crop of application programming languages, like Go and Swift, that embrace garbage collection, type inference and high-level data structures to ease the burden of overworked software developers, while still providing the performance and simplified distribution that come with native code compilation. Unlike the others, however, Nim doesn’t have a powerful corporation behind it, instead being a community project.

First impression: for Unix-like platforms, Nim comes in a source package with few dependencies apart from a C compiler. It builds without a hitch, in a little more time than Python 3 (not that I measured), and runs out of the box without being installed. Setting up cross-compilation for Windows was as easy as installing MingW and adding a couple of lines to a configuration file; for other operating systems I’d need a virtual machine, but oh well. The generated executables aren’t too large despite the static linking, either.

(continue reading…)

Leave a Comment : more...

Weekly Links #173

by on Jun.04, 2017, under Gamedev, News

Hello, everyone! The ZX Spectrum BASIC game jam that I announced three weeks ago started on itch.io on Thursday. As my own entry was ready much earlier than expected (and there’s a blog post already lined up), getting another one in is very tempting. But deciding what to make that would work well in slow, line-number Basic yet still be compelling isn’t so easy. Stay tuned.

In unrelated news, open source strategy game FreeCiv has had a HTML5 client for a while. But now they’ve been working on a WebGL-based version (via the Dragonfly BSD Digest). And you know what? Never mind all the problems they’ve been running into, that simply wouldn’t exist in 2D. Never mind that they’re doing everything with shaders — presumably because “it’s easier” — so a lot of players stuck with on-board graphics adapters won’t be able to play it. Notice how this new, “improved” version is a muddled mess compared to the cartoony, pixelated art of the past. Like modern 3D almost always is.

If this is progress, I want a Nintendo 64.

Moving on to the game design department, from the IGN we learn why the world needs more trash games, while itch.io points out what every developer can learn from short games. More specific is Bruno Dias’ search for an ideal quality-based narrative system, that complements Emily Short’s from last week. I’ve been forming my own ideas about it, but that’s a story for another time.

Until next week, embrace imperfection.

3 Comments :, , more...

A brief guide to Pygame

by on Jun.01, 2017, under Gamedev

For a web developer moving into games, HTML5 was a natural first choice. Doubly so for a Linux user who wanted his games to run on other operating systems without much fuss. But browser compatibility wasn’t so great either (it still isn’t even in 2017), and many people don’t like playing games in their browser, for all the convenience it brings.

Having just discovered the joys of Python, and happening to like a game made with it — called Monsterz — the Pygame library was an obvious choice. It’s ported to all the major platforms, well-documented, and very easy to use while still powerful. I remember seeing complaints about the Pygame community online, but my experience has been good.

One downside is that up until the recent revival Pygame only worked with Python 2.7, but then it’s what Mac users get by default; I’ll try to keep my code forward-compatible in case you have version 1.9.2 or newer. I was also surprised to see just how many Pygame functions I use in practice: over seventy! And that’s still only part of the API.

If you happen to be on Linux or Mac, you already have Python installed, but Windows users need to get a suitable runtime from python.org; either way, you also need to install the library, either through a package manager or directly from pygame.org. Make sure you get compatible versions for both.

(continue reading…)

2 Comments :, , more...

Weekly Links #172

by on May.28, 2017, under News

Coincidences are often funny. Just a week ago, I was musing over on Tumblr about the importance of geography in games, and here come Jimmy Maher and Emily Short pointing it out in their articles about game adaptations of Tolkien and high-agency narrative systems, respectively. The latter, by the way, is about interactive fiction structured in ways that are neither the room-and-compass model of parser-based text adventures, nor the node-and-choice model of gamebooks or Twines. Something to keep in mind.

In retrogaming news, according to Le Monde the videogame conservation movement has reached France (article in French), while across the pond The Atlantic notices the Internet Archive’s collection of emulated MacIntosh software. And still in the way of nostalgia, Polygon writes about more famous game designers who started out with BASIC, either on a school’s mainframe or else (like I did) on an 8-bit home computer.

(Not so retro is Engadget‘s article about writing for Fallen London. which meshes well with Emily Short’s own.)

Less fun was learning that the modern mobile ports of cult classic Lords of Midnight will soon be in limbo for lack of a licensed engine. And sadly it’s something I wrote about before, including a story very much like this one (scroll down for the link). Dear game developers: either buy a perpetual license to your engine, including source code (otherwise it’s useless), or else stick to open source. Failing that, roll your own. The initial convenience of off-the-shelf code is illusory anyway.

Last but not least, I just learned that game designer Tanya X. Short has launched a pledge against crunch that’s all the more important as influential voices in the industry are actually defending this abominable practice. Well, I signed, along with over 500 others so far, and hopefully it will make a difference down the road.

Until next time, take good care of yourselves.

3 Comments :, , , more...

Game loops, input and sound in HTML5

by on May.25, 2017, under Miscellaneous

When I first started making games in what wasn’t yet known as HTML5 — not widely, anyway — about the easiest way to make a realtime game was to call a function every, say, 50 milliseconds with setInterval() and hope that would be enough time to process a frame: Javascript engines weren’t all that fast yet either. Worse, native support for video and audio was just being added to browsers, as for input, I didn’t trust myself to handle keyboard events so they would work consistently across browsers, so the mouse it was.

Needless to say, we’ve come a long way. Rhyme not intended.

In the first part of this guide, you’ve seen how to do graphics using the 2D canvas, which provides benefits of expressive power, speed, low memory and simplicity compared to the DOM. But graphics are just one aspect of games, and while other programming interfaces deal with everything in one place, HTML5 is broken up into multiple APIs you can use independently. This time, let me show you what I use to set up a game loop, accept input from the player and play sound. We’re going to focus on realtime games, because they’re conceptually simpler, but also more interesting.

(continue reading…)

2 Comments :, , more...

Weekly Links #171

by on May.21, 2017, under News

If I had a dollar from everyone who assured me that this time virtual reality will really take off, unlike the previous several occasions, because “now the technology is better”, I’d… probably have a few more games in my library, to be honest. Not the VR kind, though. According to Le Monde (article in French), all those tech companies that jumped enthusiastically on the bandwagon just a year or two ago are now quietly pulling out, despite decent hardware sales. Turns out, adoption isn’t use, as the stats from Steam seem to indicate. And while the article tries to shift the blame onto the nausea many people experience from those goggles, I still say the real reason is being a solution in search of a problem. Wish reality had proven me wrong; friends who play e.g. Elite: Dangerous in VR certainly seem to love it.

In other news, we have an article on RuneScape’s enduring appeal, another on how fighting games have evolved with the market (via Gamasutra), and also from Gamasutra a write-up on the Japanese approach to story in games. Note how much it talks about theme: it’s the same advice I give aspiring writers: figure out what your story is all about. This is so important it can’t be stressed enough. I disagree about building the world first, but then games have somewhat different requirements.

On a different note, it was enlightening to read about the challenges of running an abuse-free server for children with autism, and that it’s getting easier to make games for blind people. For a different kinds of accessibility, Mark Johnson writes about the basics of game literacy. And you know… while games can be obscure (Nightwrath just bought me a copy of Eador: Genesis and I can’t make heads or tails of it), I must give this one to the commenter who pointed out that gauges have been everywhere in the real world ever since the thermometer. The issue isn’t teaching new players to recognize a gauge for what it is, but to notice it in the first place. Situational awareness is a learned skill, and people who haven’t played games before, or at least driven a car, generally aren’t trained to direct their attention all around.

Last but not least, from a roguelike developer we have some thoughts on slow application development. I’ve written before about games that took over a decade to make, some hobbyist, others more professional, not to mention the still ongoing Ultima Ratio Regum (since I just mentioned Mark Johnson). My readers can probably think of more mainstream examples.

But for now, see you next week. Have fun in the mean time.

Leave a Comment :, , more...

Brief guide to the 2D canvas in HTML5

by on May.18, 2017, under Gamedev

I started making web games using the 2D canvas API in 2009, early enough that people still went “I can’t believe it’s not Flash”. A year or two later, everybody and their dog was making canvas-based games, so mine weren’t special for long, but oh well. On the plus side, my skills are still entirely relevant eight years down the road — a lucky break in this world where we all have to run as fast as we can just to stay in place.

The canvas API isn’t exactly huge or obscure, and the Mozilla Developer Network covers it well. It can still be daunting to learn from scratch, especially if you don’t yet know what you’re going to need in actual game development.

As it turns out, I only ever use about two dozen fields and methods of the canvas element’s 2D context; you may be able to make do with even fewer. Of course, that’s just for the graphics — setting up a game loop and accepting input is another story.

(continue reading…)

1 Comment :, , more...

Weekly Links #170

by on May.14, 2017, under Gamedev, News

Hello, everyone. I have good news and bad news. The good news is, I’ve been working on a game based on my recently revived 2.5D engine. The bad news is, I’m running out of steam and might switch tracks for a while. So for now, have some screenshots:

Yeah, yeah, I went right back to first-person after explaining how it doesn’t really work, but the visible pathways should help. As for the limited draw distance, I already had to redo the backgrounds once as it is, and anything further away looks bad in the first place. The theme just requires first person here, it can’t be helped. As for the map generator, you might recognize the one from RogueBot, somewhat refined. It feels kind of cramped in a game with tile-by-tile motion, but enemies and limited moves should fix that. Whenever I get to it, that is.

On the plus side, hey, I got to practice my Inkscape some more, and people seem to like the look. Also, refactoring code can be very fun, not to mention good practice. So yay.

In the way of news, we have an interview with Sid Meyer, then a history of hit points, that turns out to be quite complex and unexpected. And while Konstantinos Dimopoulos kicks offa series on medieval urbanism that’s equally useful to fantasy writers and game developers, Bruno Dias shares some thoughts about replacing the interactive fiction parser, that complement my own from a while ago. Clearly these ideas — which have been floating around for a while — are coalescing into something solid. It was about time, too.

Last but not least, via Vintage Is the New Old comes the news that next month there will be a Sinclair Basic game jam, which is especially tempting to someone like me. I even know what game I’d like to try and make. But whether I’ll actually take part is another story entirely.

Until next week, stay motivated.

1 Comment :, , , , more...

Posts by date

August 2017
M T W T F S S
« Jul    
 123456
78910111213
14151617181920
21222324252627
28293031  

Posts by month