Hi everyone!
I thought I’d feel out for some reaction here. I’m wholly on board with the mindset of never leaving a player in an unwinnable state without letting them know. However, I’m also trying to avoid two other things, namely, limiting the player’s freedom and being too immediately obvious about what actions/objects are essential to the game.
How would you as a player feel about this scenario: you’re free to wreck almost anything you want, but if you lose something essential, the game will notify you with a generic message some 15-30 turns later that you have done/not done something that has rendered the game unwinnable?
I suppose a player might not know how far back in their saved points they should go, but on the other hand, I feel that it will usually end up being obvious to them which of their recent actions might have had these consequences. They’ll probably remember cavalierly smashing a priceless heirloom or chucking it off a cliff. Which leads to another factor, that this mechanism could end up being a giveaway for what objects are critical to the game… but perhaps, if you’re going to go the other route and disallow the player destroying the object in the first place, they’re getting the same clue in that case too.
The mechanism is pretty simple, and this is TADS 3 code, but the concept is:
modify Thing
/* a property defining a condition which, if true when this object is permanently
destroyed, renders the game unwinnable. For instance, a key object might define:
zapCond = (door.isLocked && !roomBehindLockedDoor.seen) */
zapCond = nil
/* Game code calls this method instead of moveInto(nil) to destroy a gameworld
object. zap() will move the object into nil, but also call the stuck() function,
and "zap" all of this object's portable contents */
zap() { foreach(local cur in contents) if(cur.isPortable) cur.zap();
moveInto(nil);
stuck(zapCond); }
;
function stuck(cond) { if(cond)
/* make a new Fuse that prints unwinnable message
at a random # (within a given range) of turns later* / ; }