Poll: What's your opinion on cheating in IF?

If you chose “Other”, I’d appreciate it if you could please elaborate on it here.

As it stands, I’m just curious as to how the IF authoring community feels about cheating. As some further discussion, would you be turned away from an IF authoring program/system/etc if it didn’t offer adequate protection against cheating (or, at the very least, avoid making it easy to cheat?)

What do you mean when you say cheating? Using hints and walkthroughs is pretty common in IF, I think.

Or if you mean something like disassembling the source code… if it’s easier/more fun to disassemble my game than to play it, that’s my fault. (And I usually post my source code, so I guess I am giving players tools to “cheat” in that sense, though in at least two of those cases the source code isn’t actually useful for finding the solution. Wait, three. And those are all the ones that are supposed to have puzzles.)

I cheat on almost all games I play by using hints and walkthroughs, and have decompiled several games. I have made all of my games easy to get through, but I don’t think hard ganes are bad.

I feel that once you release a game, you relinquish your control over how the game is played and used, subject to copyright laws. One day, 30 years will have gone by, and your game will be a piece of data that people who don’t know you will study and /or play. In that sense, I believe that art and meaning exist in the mind of the player, and not in the artist themself.

I mean things less along the lines of elaborating on puzzles (InvisiClues and other hint systems) and more along the lines of directly altering the game’s code or memory to gain some benefit. (as some examples, skipping puzzles or gaining infinite tries/health/energy/etc)

I see. So, if your IF platform of choice were to change their game-release or save formats to a format easily edited by the player, that wouldn’t bother you? I ask because, as it stands, most popular IF formats seem to compile to either bytecode for a VM (parser-based formats), or a collection of HTML/CSS/JavaScript (choice-based formats).

As an open hypothetical for any other authors as well:

Let’s say the next TADS/Inform/etc release, containing support for pure web-based output (to my knowledge, this isn’t actually going to happen, at least not yet); however the feature requires your source, in JavaScript, be completely open to any user who wishes to pick through it. What are your thoughts on such a feature? For that matter, do you (as an IF author) care if a user could do so? Perhaps it’s an unnecessary concern to have in your mind; I’m interested to hear what you think.

I see. Personally, I feel that reasonable hints are a must when it comes to IF games, as they tend towards being puzzle based; however, I don’t usually expect an author to provide a comprehensive walkthrough themselves.

I see. So you would say you don’t mind if, and in fact would encourage people to look at your source?
Would you also say, as an IF author, you feel your opinion in this regard is the popular one?

I don’t think of cheating as something that’s often useful in IF, because there are usually easier ways to get by. For the examples you gave: if you’re stumped on a puzzle, and the game doesn’t have hints, you can ask on the forum for them, or look for a Club Floyd transcript, or there’s always the possibility David Welbourn has written a walkthrough, if the game author hasn’t. And when a game has save, restore, and an undo function, infinite lives don’t seem like they’d be much of a benefit. I suppose cheating might make more sense in games with stats? I haven’t played many of those.

The VM-based formats are pretty easy to disassemble. Reading the text is easy; figuring out game logic is hard but possible. Changing stuff on the fly is also hard, but this wasn’t a design goal, it’s just the way the technology came out.

I don’t particularly care if players do this. It’s more work than asking for hints online, and just about everybody does that.

Not at all. At worst, they’re harming their own enjoyment. I have some plans for a game that will include a time travel device that would allow players to skip as much of the game as they want, figuring that if they skip the whole game, well, then they didn’t get any fun out of it. (As you might guess, the design is extremely linear and not very plot-based.)

I wouldn’t really be in favor of this, because some authors might reasonably not want to release their entire source–I don’t think the programming language should make that choice for them. But it probably wouldn’t bother me personally.

There are some systems that do basically include the code as part of the release.

As an author, I don’t mind – if someone is resorting to that because they’re stuck and can’t find hints, it’s on me for making the thing too hard. And I know also that there are people who like reading the source after they’re done playing, to see what they might have missed. I know several people who did this with Counterfeit Monkey, which has a lot of easter eggs. The only time this has been a possible concern was when the game was being used by a client for a contest, but in that case it would have taken longer to decompile and work out how the game functioned than it took to just play it straight.

Also, sometimes people use source access to do close reading or scholarship. I recommend Naomi Clark’s essay in Videogames for Humans about Horse Master as a particularly fascinating case of this — she goes through the source in order to verify what is or is not possible and reads the game in light of that information.

Just wanted to point out that if e.g. Inform would hypothetically compile directly to JavaScript instead of using I6 as an intermediate language, it wouldn’t necessarily be any easier to read the game logic from the generated JavaScript than reading it from the generated Z-Machine/Glulx machine code. The logic would most likely be just as mangled as it is now.

For “cheating” purposes (trying to find a puzzle solution) I’ve sometimes pulled all the text from story files, which you can do nowadays by uploading the file to an online extractor, and searched for relevant responses. It’s likely that the text already contains strong hints about the solution (“As you put the doohickey on the thingamabob, you hear a secret door open…”) so there’s no need for trying to decipher the solution from the actual game logic.

If a player feels driven to “cheat” in IF, then either they are really really weird or you have failed to provide adequately as far as in-game cluing, hint systems, walkthroughs, etc. (in increasing order of bandaidness).

I put “other”. Players can play my game the way they want to. I appreciate if they inform me if there’s an unintended way to cheat so I can fix it. And I actually love talking to players who are after the deep secrets and telling them stuff they missed if they are curious. If a player works hard enough to disassemble the game somehow, that probably means they are interested or frustrated, and I’d like the feedback either way!

I chose option 5 (“It isn’t up to me to decide”), although note that I wrote a debugger so I have provided abilities to cheat in this way (although it wasn’t designed for cheating), so I have kind of provided tools to do so although it isn’t a part of the game. However depending on what kind of cheating, in some cases the game may contain features to prevent from cheating although you could still try to use the debugger to bypass them if you want to, or even read the source code or solution of the game. However HanonO makes a reasonable point, if the game contains an unintended way to cheat then the author can fix it, but this would just be for the program of the game itself, and not the interpreter or the computer it runs on or external hints or whatever.

Note that when I answered the poll I got a JSON response; accessing the URL listed in the JSON response displayed the results page. I am not sure why it result JSON but nevertheless it was easy enough to work.

In a way, I’ve probably already thought about this because of Twine, but more in terms or spoiling instead of cheating. When you play a Twine game offline and there are all these helpfully-named files. It’s impossible to dig out the play file (which is probably index.html) without wading through all the files. You’ll see if there are graphics, what they’re called, if there are sounds, what they’re called. It’s a pretty imperfect way to start the game, which I don’t like, even if in real terms it makes little difference.

Certainly I’d dislike it if people had to go through something like that to start off an Inform game I made. They don’t at the moment.


Can they be stuck in a resources directory alongside index.html?

It seems that the IF community generally doesn’t mind cheating. I find that commendable; personally, when I started out making my first game, I will admit I was irrationally worried more about cheating than anything else, such as making something of any degree of quality, lol.

I see.

That’s an interesting idea for a game. If I recall correctly, Chrono Trigger actually had something similar; you could skip to the very end, but you would get completely ruined by the final boss if you were ill prepared.

My example was more along the lines of an option that would compile your game’s source and resources into a ready-to-play webapp, with all logic done in JavaScript; presumably, it wouldn’t force you to release your actual project source. JavaScript, in and of itself, isn’t very well suited to obfuscation; minifying your code can work similarly, but it’s still entirely possible to figure out which code does what.

I see. Speaking of which, I’ve recently started playing Counterfeit Monkey - I love the story so far, but my biggest gripe would be the delay between commands and responses, which reaches into multiple seconds per response.

I’m actually quite interested as to the reason it takes so long to parse a string and respond on modern hardware.

Yes, I definitely agree that fixing bugs that allow a player to cheat is within an author/coder’s rights, and I might even go so far as it say that, in this day and age, it’s their responsibility. (within reason, of course)

Also, that’s a very interesting issue on Strawpoll’s side. I haven’t encountered it myself, though.

I agree with that much; I actually have a pet peeve when software of any kind is simply left in a big mess, with the primary application in the root directory with all kinds of files and folders. Presumably, such a feature would be integrated with a ‘play.html’ file and a resources folder, as vlaviano recently commented.

Counterfeit Monkey is now available on github for people to update to 6M62 and bugfix. Perhaps we’ll see some profiling and performance improvements as well. I haven’t investigated, but this post makes reference to a lot of upfront computation when the game begins (responsible for the undo issues with some terps). When I read that, I wondered how much of that computation could be done at compile time.

Then you can do what Infocom did; only put numbers for the name of the sound files (and they have said this is the reason why they did this).

There are several things it’s doing that involve searches across a large number of objects within the world.

– at start of play, caching information about every available game object and its name; then searching through that information during play whenever you try to construct a new object. The caching makes this faster, but not instant.
– routefinding across the map for any behavior where the player is moving multiple steps
– certain automatic behavior for NPCs to do with starting up conversation, and determining which of the implemented conversation is eligible. This affects everything from whether NPCs accost you when you first walk into a room to how a conversation command like ASK ABOUT CAKE is interpreted. (In the latter case, the game has to figure out a certain amount of world state — who is in the room that you might be talking to? What conversation content do they currently have available, out of all the dialogue implemented in the world? — before it can decide what your command is referring to.)

There are also some interpreters that are or were weirdly slow about graphics resizing. I know this was an issue behind slowdowns in a previous game, Alabaster, though I think that should be less of an issue for the map sidebar in CM because a) I believe the most problematic terp has been upgraded in this regard and b) CM has individual images for every single map state rather than attempting to overlay multiple partly transparent PNGs. (This is an obviously less good solution in other respects, such as maintenance and total file size, but was chosen for performance reasons.)

Even with those various factors, though, “multiple seconds” is a delay level I wouldn’t expect to see except on a mobile or browser interpreter, so I do find that somewhat surprising. If the source release of CM leads to performance optimizations, that would be excellent.