Looking for a small, open-source parser game

I’m looking for a small, straightforward parser game published under a non-restrictive license that I can port to an engine I’ve been working on, in order to test the engine’s features and performance.

Maybe something along the lines of seaside in terms of gameplay and length, but with source code available under a license that allows porting it.

By “non-restrictive license” I mean something along the lines of MIT or zlib, not a viral license like GPL, since this could have implications for distributing the engine along with the game. Of course if the author is around and wants to make an exception, that’d work too.

Any suggestions?


Lots of good suggestions so far. Current work list:

  • Cloak of Darkness – finished.
  • Escape! by Marnix – in progress.
  • Mammal by Joey – up next.
  • Colossal Cave Adventure – looking for an appropriate port, see comments.
  • Bronze by Emily Short – might take a crack at it eventually.
1 Like

I’ll assume Cloak of Darkness isn’t extensive enough for what you’re doing.

If you know the features of your engine, it almost seems that it wouldn’t be too difficult to build a custom game specifically designed to show it off, sort of like the Port Royal examples in the Inform 7 documentation. A demo game like this likely wouldn’t need to be award-worthy, just indicative of how to use the engine to accomplish tasks. In fact, shorter full examples based around specific feature sets might be better as documentary examples than a full game, similar to the I7 Recipe Book.

1 Like

Cloak of Darkness was a good first step, but I want to try something one step beyond that. I’m looking for something that makes use of standard features like containers that can be opened and closed, NPC interaction, stuff like that, but doesn’t try to go too far outside the box of a “normal” text adventure.

The problem with doing a custom game is that I’m more likely to work around missing features than implement them properly, or possibly implement things as core features that should really be game-specific extensions, so I thought porting an existing game or two would be a better idea at this stage.

I’ll have to take a look at the recipe book and see if there’s anything there I can use. If nothing else, it might be a good way to introduce I7 users to the engine when it gets closer to be being production-ready.

1 Like

Generally I recommend Emily Short’s Bronze as a good piece of IF to port to a new engine. It’s bigger than you requested, but you can just port as much or as little of it as you’d like. Its source is available under a Creative Commons license.

… but now I find that the web site for it is 404ing. Perhaps @emshort can help?

3 Likes

She helped!

2 Likes

I ported Bronze when I was developing my authoring system XVAN. It took several months, 2-3 evenings per week.

I also made a parser game that I submitted in The Spring Thing: https://www.springthing.net/2019/play.html#Escape.

I’ll be happy to send you the Escape! sources with an email stating that you can do with it whatever you want :slight_smile:

I also have a step-by step tutorial for XVAN to write a small game from scratch that you may follow but then for your own system.

1 Like

The game “All Things Devours” (written in Inform 6) has a “do what you want” license to it.

https://ifdb.tads.org/viewgame?id=5e23lnq25gon9tp3

The comment in the source code states:

1 Like

Hello Chris,

if that’s what you are distributing (say: an engine and a game), that is a “mere distribution” case, covered in the GPL FAQ and you are absolutely fine by picking a copyleft game licenced under the GPL:

The FAQ is clear and authoritative (being written by the FSF itself).

3 Likes

Man, you guys are great.

@Marnix, I tried out Escape! and played it up to the dial room. I think this is exactly the kind of thing I’m looking for. Can you send me the source in a private message, or a link to it? I’ll credit you as the author of the original version, of course. If I make any changes, they will probably be very minor (for example I noticed the bathroom doesn’t show the exit; that’s the only thing I’d add to the story so far). I’m enjoying it, will have to finish it before peeking at the code.

Anything I release will likely be under the zlib license, are you alright with the port being released under the same license?

@dfabulich, will definitely check that out, looks a bit heavy for what I have in mind but it’s on my list of games to play now. Will probably need to test this thing with a decent sized game at some point, though (when I get around to figuring out how to mitigate time complexity of lots of rules times lots of data).

@Jeff_Nyman, that looks interesting, but took a look at the source and don’t have much of a clue of what’s going on. I may attempt something like that later on (testing extensibility) but for now I want to focus more on making sure “standard” text adventure stuff is supported in a reasonably clean way.

@faf, I’m not sure about that interpretation of that part of the FAQ. The four paragraphs in that section read:

An “aggregate” consists of a number of separate programs, distributed together on the same CD-ROM or other media. The GPL permits you to create and distribute an aggregate, even when the licenses of the other software are nonfree or GPL-incompatible. The only condition is that you cannot release the aggregate under a license that prohibits users from exercising rights that each program’s individual license would grant them.

Where’s the line between two separate programs, and one program with two parts? This is a legal question, which ultimately judges will decide. We believe that a proper criterion depends both on the mechanism of communication (exec, pipes, rpc, function calls within a shared address space, etc.) and the semantics of the communication (what kinds of information are interchanged).

If the modules are included in the same executable file, they are definitely combined in one program. If modules are designed to run linked together in a shared address space, that almost surely means combining them into one program.

By contrast, pipes, sockets and command-line arguments are communication mechanisms normally used between two separate programs. So when they are used for communication, the modules normally are separate programs. But if the semantics of the communication are intimate enough, exchanging complex internal data structures, that too could be a basis to consider the two parts as combined into a larger program.

(Emphasis mine… this is essentially the timeless debate about whether dynamic linking infects.)

Since the game will not run without the interpreter, my interpretation is that they likely form a combined work, not two separate programs. There is no GPL’d interpreter that will run it, so I can’t legitimately use the usual loophole regarding that either. I’m not a lawyer, and the GPL is big and scary. I’d rather steer clear of it.

If the game is built with the engine into one executable, the whole would need to be GPL licensed. If there’s a separate interpreter and game file (like for Z-Code, Glulx, TADS, etc) then the interpreter does not need to be GPL licensed.

1 Like

Hi again @cpb ,

if I am reading you correctly, you are writing an interpreter. If so, you are fine.

I don’t want to become pushy, it’s just that this particular problem of copyleft licences – or better, the GPL – (interpreters, emulators, CAD, etc. in general handling data) is settled.
You are not providing bindings of any sort (no IF game that I know of does) and you are not bundling the data in the .exe: bingo, you are in the clear.

MIT, BSD and the like are great licences too, and I am sure with a bit of luck you will find a proper game that suits your desires!

1 Like

You’re welcome to use Mammal. I don’t know whether animals count as NPCs for your purposes but it is a short seven-room puzzle game which was well received and is somewhat more involved than Cloak of Darkness.

Inform 7 source here.

IFDB page here.

2 Likes

@Joey, just took a quick look at the source and it definitely looks like the kind of thing I have in mind. I think this and Marnix’s Escape! will keep me busy for a while. Thanks!

@faf the thing about that part of the FAQ is it’s asking whether the thing to be interpreted needs to be GPL’d if the interpreter is GPL’d, but the issue here is the other way around. The GPL is confusing. Also the actual text of the GPL is really vague about interpreted languages last I checked; it basically assumes everything is compiled. After all, one of the main points is to make sure source code is available when binaries are distributed, so it’s sorta unnecessary for things that are already distributed in source form. But I didn’t mean to start a GPL debate here, I’m just more comfortable not distributing GPL’d things or attaching that license to anything, and not worrying about it.

Just to be clear, the way I understand it, the interpreter and game, distributed together, could reasonably be considered as a combined work, and the safest thing to do would be to release the entire thing under the GPL. This wouldn’t preclude dual-licensing the interpreter with a more liberal license, but this is more licensing shenanigans than I want to deal with.

@Chris, I sent the sources in a private message.

1 Like

Dannii,

Sorry for the late reply here, had to think about this a bit.

As far as I can tell, we are forbidden from applying the GPL to software that depends on non-GPL’d software to work (with the exception of system libraries), unless a library exception is provided.

Assuming a GPL’d game were bundled with (and relied on) a non-GPL-compatible interpreter, with a library exception for that interpreter, I suppose it’s irrelevant whether the combination of game and interpreter forms a “combined work.” But then the problem is, the game is still GPL’d…

So if I port that GPL’d game, I’m not the original author, and I’m not allowed to add a library extension for my own interpreter. It seems that it likely could constitute a combined work, and that combined work would need to be GPL’d as a whole, same as if it were compiled into a single executable. But I’m not sure, because the GPL frames everything in terms of libraries and linking, or processes and pipes, and this is a bit different.

And again, licensing the whole thing under GPL and also licensing the interpreter under something more liberal is possible, as far as I can tell, so it’s not that bad. But all of this is kinda a headache, and I’d generally rather avoid thinking about it, if that makes sense.

I appreciate the freedoms the GPL gives to users; I used Debian almost exclusively for about 10 years, and I use programs like GCC, Inkscape, Gimp, and so on. But I tend to be much more cautious about relying on GPL’d libraries in my own software, or applying that license to anything.

Ultimately you are responsible for interpreting the GPL license. The FSF usually care about shared memory, so plug-ins have to be GPL licensed, but programs communicating by streams or sockets don’t. I think the MIT interpreter + GPL game is completely fine because the game is just data, as do many others here. If you’re not convinced, then don’t adapt a GPL game.

1 Like

I think the relevant part of the FAQ is here.

It sounds to me like if the game is GPL’d and does not include any GPL-incompatible extensions (such as Inform7 extensions), and the interpreter also doesn’t link to any GPL-incompatible libraries, then the game can be considered as pure data (but then, why does it have a software license?).

It sounds like they are suggesting that if the game includes something like an Inform7 extension that does not have a GPL-compatible license or if the interpreter links to something proprietary that the game makes use of, then we are getting into “linking exception” territory as I was describing earlier, and if that’s the case then, as far as I can tell, the distribution forms a “combined work.”

The problem here is that I have no idea how any extensions or interpreter libraries were licensed in this kind of a situation, without checking each one.

Another more serious issue here: my interpreter is still in development. Suppose a game contains a routine that I think would be useful as core functionality, and want to adapt something like that as a utility to be distributed with the interpreter. Now that I have intimate knowledge of that GPL’d code, I can’t write a routine like that without my software becoming tainted by GPL. At least, these are the kinds of precautions I’ve seen other teams take; for example, the Mongoose web server used to be licensed under a liberal license, and later moved to GPL. The moment it moved over to GPL, the older version was forked (as “Civetweb”), retaining the liberal license, and all maintainers of that fork went to great lengths to wall themselves off from accidentally viewing any GPL’d code, even going as far as unsubscribing themselves from the Moongoose mailing list, in case anyone posted a snippet of GPL’d code.

Again, I didn’t mean to start a GPL debate, and didn’t intend to port any GPL software (or data) in the first place. I’d rather not have to think about legalistic stuff, and just get down to writing some software instead, which is a lot more fun – and I feel like GPL always has implications for distribution that need to be carefully considered, and that gets in the way of the fun part.

Colossal Cave (Advent) is what I used for this purpose for ZILF, and it worked out pretty well. It’s complex enough to exercise a new engine’s parser and world model, familiar enough that testers know how it’s supposed to work, widely ported enough that you can compare multiple approaches other engines take, etc. It has containers, inventory limits, liquids, random events, scenes, very simple NPC interaction (the bear), ambiguously named objects, and verbless commands (fast travel, if you choose to implement it; I didn’t).

2 Likes

Thanks, good suggestion. It’s a bit larger than I have in mind for right now, but I should definitely add that to the list.

I found a version maintained by ESR here, and looked at the source for a while. Everything is implemented from scratch, of course, which doesn’t quite fit what I need right now – part of what I want to see is how games use an underlying framework, so I can decide what kind of stuff belongs in the framework.

I also found an Inform7 port of an earlier version (pre-Woods), with source code, but couldn’t find any license attached. There are a lot of ports though, so I’ll have another look later, unless someone can recommend one in the meantime.

The Inform 6 and TADS 2 versions of Colossal Cave are the usual references.

http://ifarchive.org/if-archive/games/source/tads/ccr.zip
http://ifarchive.org/if-archive/games/source/inform/Advent.inf

Advent doesn’t have a license because the original version was distributed before open-source licenses became a thing. We generally treat it as open-source and agree not to be sticklers about it.

1 Like