Foxaroo project #1: TARDIS Adrift

In that case, you should still be able to use my suggestion; you’ll just want to make sure that every time an action opens/closes/locks/unlocks the container or the door, it also sets the other one to the same state (so you don’t end up with the door being open on the inside and closed on the outside, etc.).

Ah, I hadn’t realized you needed two sets of doors. The same principles apply, but instead of moving the player directly to/from the Console Room, you’d probably want a new TARDIS Entryway room that’s separated from the Console Room by a normal door.

I’m not sure I understand this… since you can’t move rooms around during play, you would have to fake it by remapping all the possible entrances/exits using instead rules or something… and if the door is between the null room and the TARDIS, it’s still not going to be accessible from the outside.

If you’re going to be doing a lot of that kind of stuff, I recommend against trying to use the actual “door” kind, since it’s required to be permanently physically located between two rooms. Since you need the doors to be connected in physically impossible ways, you’re going to have to write your own rules for going through the door anyway, so there’s not really any advantage to its being a door. All you really need is an openable, lockable (if desired), enterable object, and containers and vehicles have all those properties built in.

Another possibility is that, if you don’t have any puzzles involving getting back into the TARDIS, you could not bother implementing the door on the outside side; just allow the player to enter the TARDIS without messing about with doors. The players may not notice that they don’t have to open a door to get in, and if they do notice they may not mind. (No one likes seeing “The TARDIS door is in the way” when the TARDIS door is openable.)

Well, it isn’t strictly true that you need two rooms – in my example there’s a room on one side of the door and not on the other, and you intercept all attempts to go through the door. But this point is a good one, that the door kind might not be the most suitable for what you want to do.

Hi All,

Glad to hear. :slight_smile: I always try to avoid playing favourites, but yes I did find shammack’s suggestion easy to implement. More on that further down. I did however study your suggestion in great detail to ensure that I learned from it. Your code about inserting objects into the TARDIS from outside was valuable. Some of the terms are unfamiliar to me though. I recall reading about Inform7 things that are “privately-named” but I’m yet to comprehend the concept. The same goes for “the topic understood” used in the code.

I’m learning… slowly… slowly…

Um… now this is going to get confusing. The internal doors in the abovementioned puzzle are going to be the kitchen door and the aft door, with the player needing to use the entire console room itself as a temporary airlock.

However what you’ve said about needing two sets of doors is still correct.

In the current series of Dr Who they’ve taken the lazy way out and had just the one set of doors serving both the inside and outside. These being the iconic police box’s rather unremarkable hinged doors opened by hand power. However in the classic series, of which my Inform game is based, there were separate internal and external doors on either side of the deus ex machina threshold. The external doors were the aforementioned unremarkable doors of the police box, and again hand powered. The internal doors however were much larger, made of the same material as the walls of the console room, swinging wide open like a pair of gates. They were power driven, operated by one of the switches on the TARDIS console. As best my memory serves, “Death to the Daleks” was the only occasion that they were opened manually, although it can be assumed that they automatically opened and closed in synch with the external doors. It is also important to note that the lock for the TARDIS key was fitted to the external doors. (For sake of clarity I also need to mention that in Season 14, from “The Masque of Mandragora” to “Robots of Death” there was an alternative console room in use which did not appear to have internal doors).

The room wont need to move, I’ll just be remapping the directions. There are a couple of advantages. One being that I can use your enterable container as the external doors, and also have the internal doors functioning as a normal openable doorway. I’ve coded it below. Another being that I can equip the player with a homing device (as featured in the Dr Who stories “Full Circle” and “Mawdryn Undead”) that always points to the null room, effectively pointing to the TARDIS. IF I can get the remapping to work. I seem to be running into a syntax error there.

[code]Fore is a direction. The opposite of Fore is Aft. Understand “f” as fore when the location is nautical.
Aft is a direction. The opposite of Aft is Fore. Understand “af” as aft when the location is nautical.
Port is a direction. The opposite of Port is Starboard. Understand “p” as port when the location is nautical.
Starboard is a direction. The opposite of Starboard is Port. Understand “sb” as starboard when the location is nautical.

Index map with fore mapped as north. Index map with aft mapped as south. Index map with port mapped as west. Index map with starboard mapped as east.

A room can be nautical or groundbased. A room is usually not nautical.

A direction can be nautical, groundbased. A direction is usually not nautical. Starboard, port, fore and aft are nautical.

Before going a nautical direction when the location is not nautical, say “Nautical directions can only be used on board ship.” instead.

Before going an groundbased direction when the location is nautical, say “Compass directions make no sense on board ship, but you can use [list of nautical directions] instead.” instead.

A door is usually scenery.

The player carries the TARDIS key, and the homing device. The description of the homing device is “A small gadget that beeps when aimed in the direction of [best route from the location to The TARDIS Threshold].”

The Console Room is a room. The description of the Console Room is “You are in what serves as the control deck of your time machine, or rather what remains of one. Surrounding you are smooth white walls with a honeycomb of recessed opaque circles. In the centre of the room is a fire-damaged piece of apparatus; a pentagonal arrangement of five inclined consoles, each with an array of different controls and instruments, all inactive, some still smouldering.
The main doors of the TARDIS lie fore of the console and are currently [if the main TARDIS doors are open]open[else]closed[end if], while the kitchen is starboard through a wide pair of restaurant-style swinging doors and the TARDIS Broadway lies south through a regular door. A free-standing storage locker sits against the portside wall opposite a coat rack on the starboard wall.” Fore of the console room and aft of The TARDIS Threshold is the main TARDIS doors. The main TARDIS doors are a door.

The big dial is in the Console Room. The big dial has a room called the destination. The destination of the big dial is usually The Rocky Outcrop. The initial appearance of the big dial is “A big dial with a pointer is in the middle of the room.” The description of the big dial is “It can be set to The Rocky Outcrop, The Eden Nightmare, The Empress Broadway, or Nerva Beacon Control Centre. It is currently set to [destination of the big dial].”

Instead of setting the big dial to:
if the topic understood matches “The Rocky Outcrop”:
now the destination of the big dial is The Rocky Outcrop;
move the TARDIS exterior to the destination of the big dial;
[ now The Rocky Outcrop is mapped outside of the TARDIS exterior;][Produces a syntax error]
say “You set the dial to The Rocky Outcrop.”;
otherwise if the topic understood matches “The Eden Nightmare”:
now the destination of the big dial is The Eden Nightmare;
move the TARDIS exterior to the destination of the big dial;
[ now The Eden Nightmare is mapped outside of the TARDIS exterior;][Produces a syntax error]
say “You set the dial to The Eden Nightmare.”;
otherwise if the topic understood matches “The Empress Broadway”:
now the destination of the big dial is The Empress Broadway;
move the TARDIS exterior to the destination of the big dial;
[ now The Empress Broadway is mapped outside of the TARDIS exterior;][Produces a syntax error]
say “You set the dial to The Empress Broadway.”;
otherwise if the topic understood matches “Nerva Beacon Control Centre”:
now the destination of the big dial is Nerva Beacon Control Centre;
move the TARDIS exterior to the destination of the big dial;
[ now Nerva Beacon Control Centre is mapped outside of the TARDIS exterior;][Produces a syntax error]
say “You set the dial to Nerva Beacon Control Centre.”;
otherwise:
say “You have to set it to The Rocky Outcrop, The Eden Nightmare, The Empress Broadway, or Nerva Beacon Control Centre.”

The TARDIS Threshold is a room. [This is a transient or null room and does not require a description as the player never actually stands in this room]. Outside of The TARDIS Threshold is The Rocky Outcrop [Initial setting, and will be changed as the game progresses].

Starboard of the Console Room is TARDIS Kitchen.
Aft of the Console Room is Fore end of TARDIS Broadway.

The Console Room, TARDIS Kitchen and Fore end of TARDIS Broadway are nautical.

The Rocky Outcrop is a room. The description of The Rocky Outcrop is “You are standing on a wind-swept rock formation, gazing across what looks to be an endless desert of shifting sands. The outcrop is not alone; there are many here, some the size of small mountains, but spread out randomly across the somewhat garsih landscape of red and yellow colours. Sand envelops the rock immediately in front of you.”

The Eden Nightmare is a room. The description is “You are surrounded by dense jungle, which includes tangled undergrowth, low-hanging vines, a high canopy that completely obscures the sun, and a few man-eating plants”.

The Empress Broadway is a room. The description is “A long, polished corridor aboard the luxury spaceliner. In the forward direction you can see the unstable matter interface where the two ships were joined during the rematerialisation collsion”.

Nerva Beacon Control Centre is a room. The description is “The forward control room of the Nerva Beacon space station, set up to guide and service space craft navigating their way past Jupiter’s moons”.

The TARDIS exterior is a lockable container in the rocky outcrop. Understand “TARDIS” as TARDIS exterior. The matching key of the TARDIS exterior is the TARDIS key. The TARDIS exterior is enterable. Rule for writing a paragraph about The TARDIS exterior:
say “The TARDIS stands solemnly nearby.”

Instead of inserting something into TARDIS exterior:
say “You bestow [the noun] to the safety of the TARDIS.”;
move the noun to the console room.

Instead of going outside from the Console Room:
try going fore.
Instead of exiting from the Console Room:
try going fore.

Instead of going to the TARDIS Threshold from the Console Room:
if the main TARDIS doors are closed:
say “The TARDIS doors are still closed.”;
stop the action;
otherwise:
say “(You exit the TARDIS).”; [This is just for testing purposes]
now the player is in the location of the TARDIS exterior.

Instead of going to the TARDIS Threshold from The Rocky Outcrop: [Is there a way to make this generic?]
try entering the TARDIS exterior.

Instead of going to the TARDIS Threshold from The Eden Nightmare: [Is there a way to make this generic?]
try entering the TARDIS exterior.

Instead of going to the TARDIS Threshold from The Empress Broadway: [Is there a way to make this generic?]
try entering the TARDIS exterior.

Instead of going to the TARDIS Threshold from Nerva Beacon Control Centre: [Is there a way to make this generic?]
try entering the TARDIS exterior.

Instead of entering the TARDIS exterior when the TARDIS exterior is open:
say “(You enter the TARDIS)”; [This is just for testing purposes]
now the player is in The Console Room.[/code]

I’ve run into the following problems:

#1 : Those syntax errors when I try to re-map the null room to the locaiton of the TARDIS exterior. As far as I can tell those ought to work fine.

#2 : In, out, up and down are not recognised when the location is nautical. Result: “Compass directions make no sense on board ship, but you can use Fore, Aft, Port and Starboard instead.” Seems that the player can “exit” the TARDIS just fine, but not go “outside.” Is there a way to make In, out, up and down recognisable in both types of locations?

#3 : When outside, typing in the commands to open, close, lock, unlock or enter the “TARDIS” causes Inform to try doing these things to the TARDIS key and not to the TARDIS exterior. This happens even though I’ve coded “Understand “TARDIS” as TARDIS exterior”.

#4 : The homing device isn’t functioning within the TARDIS.

The phrase “can be nautical or ground-based” makes “ground-based” the negation of “nautical”. So any room or direction that’s not nautical is ground-based. You can however easily define those properties separately:

[code]A room can be nautical. A room is usually not nautical.

A direction can be nautical. A direction can be groundbased. Starboard, port, fore and aft are nautical.
North, northeast, northwest, south, southeast, southwest, east and west are groundbased.

Before going a nautical direction when the location is not nautical, say “Nautical directions can only be used on board ship.” instead.

Before going an groundbased direction when the location is nautical, say “Compass directions make no sense on board ship, but you can use [list of nautical directions] instead.” instead.
[/code]

One way to make the parser not choose the key is to add a “Does the player mean rule”.

Does the player mean opening, closing, locking, unlocking or entering the TARDIS key: it is very unlikely.

(or simply “it is unlikely”). You may want to extend the list of actions that shouldn’t be understood to apply to the key.

Another, more radical way, would be:

The TARDIS key is privately-named. Understand "key" and "TARDIS key" as the TARDIS key.

Making it privately-named, ensures that the game will not understand either “TARDIS”, “key” or “TARDIS key” as the TARDIS key (that’s what the privately-named property’s for). From there you tell the game (afresh as it were) to understand “key” and “TARDIS key” as the TARDIS key; but it still won’t ever understand the mere word “TARDIS” as the TARDIS key.

Also, you may want to do something like this:

The printed name of the TARDIS exterior is "TARDIS".

to prevent exhanges like “> CLOSE TARDIS You close the TARDIS exterior”, when you’re in the same location with the TARDIS exterior.

Just to repeat what Felix said, when we declare that something is “privately-named,” it means that the parser won’t interpret the name that object has in the code as referring to it. Ordinarily when you call an object something like “the TARDIS key,” Inform automatically interprets “Tardis” and “key” and “tardis key” as possibly referring to that object. If you declare “The TARDIS key is privately-named,” then Inform won’t have that automatic understanding.

In my code, if I hadn’t said “The Tardis-door-prop is privately-named,” then player would’ve been able to say “Enter tardis-door-prop” and it would’ve worked. (Which wouldn’t actually have been a big deal, because no one would ever use that command.)

This comes up because the “setting it to” action that lets you enter free-form text; the player can say “set the dial to Og” even though Og isn’t an object in scope, and even “set the dial to frabjous” would be accepted as a command. In a case like this, “the topic understood” is the free-form text that the player has entered. It’s basically analogous to “the second noun,” except it’s a string of text (technically a snippet, I think) instead of an object.

See section 16.5 of the documentation; the grammar for setting it to that’s built in to the standard rules is “set [something] to [text]”, so that text token gives us a value for the topic understood.

Ah, I see. I’m less familiar with the classic series, unfortunately.

I’ve not tested it, but you should be able to do this:

Instead of going to the TARDIS Threshold from the Console Room: if the main TARDIS doors are closed: say "The TARDIS doors are still closed."; stop the action; otherwise: if the location is the Console Room: say "(You exit the TARDIS)."; [This is just for testing purposes] now the player is in the location of the TARDIS exterior; otherwise: try entering the TARDIS exterior.

I’m confused about this too… that appears to work for other directions, just not inside/outside. Hopefully someone else knows why.

The required syntax, I believe, is now The Rocky Outcrop is mapped outside the TARDIS exterior without the “of”—similarly for all the non-compass compass directions: above, below, inside and outside.

Well, what do you know… that works. It’s a bit confusing that that’s the opposite of the syntax you have to use when defining the rooms in the first place.

Hi Guys,

I’ve had to put the project on hold while I sort out some problems at work.

I know which I’d much rather be spending my time on. I’ll get back to this soon as I can.

FYI - I certainly haven’t forgotten this project; I dearly want to get back to it but I’m still sorting out RL matters.

Life happens. I’d certainly be interested in seeing this one completed.

On a tangential note, I wish someone could actually finish making a “Doctor Who” game in AGS…

I think everybody understands! Just keep moving forward, that’s all you gotta do…

thanks.

This is my project to get past the learning curve, and therefore the game design will be somewhat rudimentary. Hopefully I can make up for it with some half decent prose.

By the way, I’m not sure if anyone’s mentioned this syntax, but you can say Change the [X] exit of [Y] to [Z] (assuming X is a direction and Y and Z are rooms). Unlike the “Now [Z] is mapped [X] of [Y]” syntax, this can also be used when the X is a variable, and is quite capable of mapping a direction to “nowhere”. See here. I think you need to do some other housekeeping yourself, if that’s what you want, but I’m not sure… (that is, you need to also say “change the [opposite of X] exit of [Z] to [Y]” and possibly “change the [opposite of X] exit of [W] to nothing” if W used to be X of Y – unless of course you don’t want your exits to make sense, which is par for the course in the Whoniverse).

In particular, if you use the “mapped [X] of” syntax, you need to drop the “of” for up and down (and, in fact, you need to say “mapped above/below”, you cannot say “mapped up/down of”), which is rather annoying IMHO. It’s much cleaner to use the “change” syntax.

Other than this piece of syntax (along with a few others such as “change the text of the player’s command”), however, “change” is mostly deprecated; you should usually use “now” instead. This particular case is a bit of an oddity in that it’s the other way around.

Finally, as the manual suggests, there may be an even cleaner way to do this which leaves the map alone… Maybe try this example? It uses a door, so you’d need to change it to use a container and a prop door (or two containers), as others have suggested above. Keep this in mind: if the model world looks a certain way to the player, it doesn’t ultimately matter how it’s actually laid out. Your number one concern is how things look to the player. The precision available via the model world is a tool, to help you achieve your desired behavior, not a goal in and of itself. In short: if you can get away with it, go ahead and do it.

HI NYKevin,

(Sorry it’s taken so long for me to respond - that’s RL again)

That’s very useful to know, thanks! I can already think of some situations where that would enable some entertaining puzzles to be created. One of the classic Dr Who episodes (The Horns of Nimon) had a maze where the walls periodically changed and objects left behind would vanish (the Doctor tried putting adhesive markers on the walls). Only the villains and K9 were able to navigate the maze.

Looking quickly through the manual, it appears that in order to achieve such a maze puzzle I’d need to learn how to use tables. Looking forward to that. :slight_smile:

(To everyone: See why I chose the Dr Who series to help me with the learning curve? :wink: )

Quick update: I’m back onto this now. Things at work generally grow busier and busier from August to the end of December, however this year I’ve had the busiest January ever.

I’ve been off Inform for so long now that I’m having to re-learn everything, hence it’s taking me a while. Along the way I’ve succombed to the temptation of spinning off little curiosity projects (you know how it is) which are helping in my learning of Inform though they haven’t advanced the main project (TARDIS Adrift) in any way.

A few of curiosity questions if anyone has time:
1) How do I display a block of introductory text after the game’s title and release number display but before the description of the initial room? Eg: I don’t like seeing “Picking yourself up off the floor you cough the acrid smode from your lungs…[etc]” followed by “TARDIS adrift. An Interactive Fiction by The Foxaroo. Release 1 / Serial number 120218 / Inform 7 build 6G60 (I6/v6.32 lib 6/12N) SD.” Followed by “Console Room. You are in what serves as the control deck of your time machine, or rather what remains of one…[etc]”. It just doesn’t look right in that order; the game title and serial number should be at the top and not separating the intro and room description. I’ve tried setting up the introduction paragraph as an Inform scene sequence, but I haven’t figured out the way to make it start between the game title and the room description.

2) (For an unrelated project) If I have several different characters, how do I establish elaborate descriptions of them that can be controlled by a single rule. Eg:

[code]In the construction site is a man called Tom. The printed name of Tom is “Tommy”. The description of Tom is “Muscle man Tommy”.
In the construction site is a man called Dick. The printed name of Dick is “Richard”. The description of Tom is “Tricky Dicky”.
In the construction site is a woman called Gerty. The printed name of Gerty is “Gertrude”. The description of Gerty is “Gerty the welder”.

To say Tom’s rundown: say “(Long complex code to describe Tom’s state and current activity).”
To say Dick’s rundown: say “(Long complex code to describe Dick’s state and current activity).”
To say Gerty’s rundown: say “(Long complex code to describe Gerty’s state and current activity).”[/code]

Now here’s the problem: I haven’t been able to get this part to work:

Rule for writing a paragraph about a person (called X): say "[X] is here, [X's rundown]."

  1. (Also for an unrelated project) How do I set up a rule for “it is unlikely” when performing actions on body parts. Eg: Player needs to Examine wrist of a murder victim without having to say “Examine murder victim’s wrist” (I try to avoid making my players do unnecessary typing). I’ve tried saying Does the player mean doing something with the player's wrist: it is very unlikely. or Does the player mean doing something with the Detective's wrist: it is very unlikely. but that produced a very unhelpful error message: “You wrote ‘Does the player mean doing something with the player’s wrist’ , which seems to introduce a rule taking effect only if the action is ‘doing something with the player’s wrist’. But that did not make sense as a description of an action. I am unable to place this rule into any rulebook.

[size=85]I’m also trying to determine how to conceal body parts (Eg: "You cannot see the phantom’s face while he is wearing the mask) but I may be able to figure that one out on my own.[/size]

On the rundown issue, you can do this:

To say rundown for (somebody - Tom):

This will correctly invoke the phrase if you pass a variable that evaluates to Tom. However, I’m not positive that you could write it as you have, with an apostrophe-s and no space.

Does the player mean rules can be seriously maddening. Without trying it out, I can’t guess what the problem is, but I sometimes avoid the “doing something with X” phrasing. It’s not always what you mean because it only applies when X is the noun, not when X is the second noun. To cover that, you need “the current action involves X.” Consequently, a LOT of my DPMRs start out with “Does the player mean doing something when…” Theoretically you could even say “Does the player mean when…”

1: Try “after printing the banner text” or “before looking for the first time.”

Wow! :open_mouth: It took me about 2 hours from when I first tried to view the thread before I could actually get into here. I couldn’t even get to intfiction.org. Last night took a few tries as well. Have there been any known problems with the site’s server?

Instant success! Thanks Matt W! :slight_smile:

I’m sorry, I don’t comprehend (it probably doesn’t help that I made a typo above, “The description of Tom” twice when the 2nd line should have been “The description of Dick”). Could you elaborate on how your recommendation would then be integrated into a rule for printing? That’s the piece of code where I was getting an error message.

I’ve tried copying the code as it’s written in the manual’s “Chapter 16.19. Does the player mean…” This is the example in that chapter:Does the player mean doing something with the cursed dagger of Thog: it is very unlikely. Does the player mean doing something with the cursed dagger of Thog when the player is hypnotized: it is likely.
The only difference I can discern between the manual’s example and how I’ve integrated it into my code is that mine involves a body part rather than a loose object, although I have no idea if that is even relevant. I find Inform7’s error messages to be very lacking in content needed to pinpoint a problem.

One issue is that I think you need to say “The rundown of Tom” or “The rundown for Tom” rather than “Tom’s rundown,” and “The wrist of the player” rather than “the player’s wrist.” Inform won’t understand “the player’s wrist.”

The other question is, when do you want these to print? On examining, in room descriptions, or where?