Alternatives to NSEW

I’m working on my first real project (using Inform) and have found that the standard north south east west system doesn’t quite fit the feeling I’m going for, I can’t really think of any alternatives so I figured I’d ask here and see what ideas pop up.

I’ve seen a few alternatives; one was in Rover’s Day Out, where the ‘dog’ would literally follow its nose - I believe the command was “follow home smell” or some such. The other I’ve seen is simply using “go” - “go through red door”, “go towards house” or “go to house”, that sort of thing. If you really wanted to be fancy, you could implement a left/right/forward/back system, though you’d have to keep track of which direction the PC was facing, and change the directions accordingly - something like this:

[code]You face the house; to your left is the garden, and to your right is the shed.

left
The garden is overgrown - looks like there is no way out be to go back.
back
You are facing the shed; to your left is the house, and to the right is the road. The shed is in front of you.[/code]
The hard part would be getting the descriptions to line up, though it’s really not all that hard. Hmm… I may have to write something up like that, just for fun.
Note: I only have experience in TADS, so I have no idea if that would actually work in Inform. It should, though.

Things I’ve seen:

  • Relative directions: FORWARD/BACK, LEFT/RIGHT. This can be make navigation quite confusing, even in a fairly small map – see the science-facility part of Rogue of the Multiverse for an example.
  • Port/starboard, fore/aft and similar shipboard directions. In a ring space station, hubward/rimward and clockwise/anticlockwise (or turnwise/widdershins, if you want to get all Pratchetty). This is really just NESW with a little bit of extra gloss; if you use it, it’s probably kind to retain NESW commands and make north = hubward / fore.
  • The aforementioned GO TO, or (better, because terse is good for commands you use a lot) just the room name. This works best in games where navigation is not hugely important, and it’s okay to just teleport to any room you know about.
  • Linear FORWARD/BACK, with no spur trails (or, if so, spurs handled with a ROOMNAME system, or something.) Useful for highly linear maps.

As you can see, most of these are only useful in fairly specific circumstances. Jokes about your magical internal compass aside, NESW is a general-purpose system with a lot of advantages, and I think that for most players it’s invisible in terms of flavour and tone.

Looks like I’m probably going to be stuck with nesw then, oh well, there are worse fates in life :unamused:

If travel between contiguous locations isn’t important in your game, consider doing away with it through an in game travel menu (like in Patanoir), scene changes and unique commands (like sleeping in Andromeda Dreaming) or through allowing the player to focus on different parts of essentially the same location (like in Shade).

I’m focusing more on character and choice but moving around will be quiet important, atm I’m mostly working on getting the basic features to work.

If it’s any consolation, there’s a thread exactly like this (here or elsewhere) every 10 months or so :slight_smile:

oddly enough it is.

It depends on what you want to achieve… you can play Blue Lacuna for an example of toggleable compass-movement and landmark-based movement. Blue Lacuna was keyword-based, i.e., you could do many things in the game just by typing the object’s name - but you COULD do something similar in regular IF.

You are at the front of the house. You could go around the back, or deeper into the forest. You see a mailbox.

MAILBOX
I don’t understand that command.
OPEN MAILBOX
You see nothing inside. Someone else has taken that crucial leaflet. Damn.
S
You forgot your compass, oh dearie me.
AROUND THE BACK
You are at the back of the house. Someone’s left a window wide open. If you ask me, I think someone’s already in there.

The “mailbox” command I put in to show that even if you have keyword-based movement, the rest of the game doesn’t necessarily have to be keyword-based. Also, Reed’s keyword extension makes it easy (as I recall) to, on the fly, switch between keyword-movement and compass-movement, for those fiddly players who just prefer to have compasses.

any advice on bow to accomplish that in inform? it seems to be heavily dependent on directions

Check out Reed’s “keyword” extension. The way it works is, you map it out like a regular game, then in the room description you tag a certain word (like “around the back” in my example) as representing a direction (hilighting it and making it available for single-word use). I disremember the exact details, but the main thing is, you build the world according to regular compass rules, but what the player will see is highlighted exits (they don’t have to be hilghlighted, but I think that’d make it pretty user-unfriendly) that are very descriptive.

If you wanted to disallow compass movement, you’d have to go the extra mile. For a project of mine, I did a simple check: if the player typed “n/north/s/south” or “go n/north/s/south” and so on, then I’d cut him off with an error message. Like every piece of code I ever wrote, it’s cumbersome and inelegant and probably the long way around, and it works.

If you want “go to [room name]” to work in Inform, you can do this (adapted from code from Emily Short’s Bronze):

[code]Going by name is an action applying to one thing.

Understand “go to [any room]” as going by name. Understand “go [any room]” as going by name. Understand “[any room]” as going by name. Understand “[door]” as entering.

Check going by name:
if the noun is the location, say “You’re already in [the location].” instead.

Carry out going by name:
while the player is not in the noun:
let heading be the best route from the location to the noun, using even locked doors;
if heading is not a direction, say “You can’t think how to get there from here.” instead;
let destination be the room heading from the location;
say “(heading [heading])[command clarification break]”;
try going heading;
if the player is not in the destination, rule fails.
[/code]

Note that this will only work (from a gameplay perspective) if the player already knows all of the names of the rooms, or at least there are distinctive names for the doors. “You’re standing in the kitchen; doors lead to the entry hall and dining room. There’s also a small wooden door next to the refrigerator” works fine, but “You’re in a vast marble hall with unknown corridors in every direction” is going to need NSEW as well.

A quick and dirty replacement of directional movement with room-keywords:

[code]Book 1 - World

Front of House is a room. “You are at the front of the house. You could go [around the back], or deeper into the [forest].” The accessible rooms are {Around the Back, Forest}.

A mailbox is a fixed in place, openable, closed container, here. “You see a mailbox.”

After opening the mailbox for the first time, say “You see nothing inside. Someone else has taken that crucial leaflet. Damn.”

Around the Back is a room. “You are at the back of the house. Someone’s left a window wide open. If you ask me, I think someone’s already in there.” The accessible rooms are {Front}.

Forest is a room. The accessible rooms are {Front}.

Book 2 - Name-going to

Understand the command “go” as something new. Understand “[a direction]” and “go [a direction]” as a mistake (“You forgot your compass, oh dearie me.”)

Every room has a list of rooms called the accessible rooms.

Before printing the name of a room, say bold type.
After printing the name of a room, say roman type.

Definition: a room is accessible rather than inaccessible if it is listed in the accessible rooms of the location.

Name-going to is an action applying to one thing. Understand “[any room]” and “go [any room]” and “go to [any room]” as name-going to.

Check name-going to an inaccessible room:
issue miscellaneous library message number 27 instead.

Check name-going to the location:
say “You’re already there!” instead.

Carry out name-going to:
move the player to the noun.[/code]

My Cover Stories entry (Home Sweetie-Bot Home) promulgates its own intentionally ridiculous movement commands (AMBULATE and ROTATE), for “feel” reasons.

The game itself understands left/right/forward, clockwise/counterclockwise, north/south/east/west, and a few variations on “go to [room]” and “go to [item]”, either by themselves or in combination with AMBULATE or ROTATE, which behave in subtly different ways – for instance if you’re in the living room facing north with the kitchen off to the east and a closed door to the west, ROTATE EAST and AMBULATE EAST do different things but ROTATE WEST and AMBULATE WEST do the same thing. Because, you know, intentional silliness. It isn’t written in Inform, but it uses compass directions at the lowest level, with relative directions implemented in terms of those, and a pathfinder on top of that.

However, the game never mentions any compass direction in its output – I think it only ever suggests AMBULATE, ROTATE (which defaults to clockwise/right), ROTATE LEFT, and ROTATE/AMBULATE TO [room/item].

After the initial release, I showed the game to someone unfamiliar with IF convention, and at some point I was trying to justify why “e” was an abbreviation for EAST instead of ENUMERATE, despite the fact that the game itself mentions the latter but never the former, and I brought up the fact that it’s sort of a standard convention in IF that all navigation happens through compass directions. The reaction to that statement was extremely amusing! At least to me. Along the lines of, “zOMG WTF, you can’t possibly be serious.”

While this does work, it would probably be better to keep directional mapping in the source code but block directional commands so the the player isn’t aware of the directions otherwise the index map becomes almost useless and “best route from (object) to (object)” won’t work at all.

Carry out name-going to: move the player to the noun.

This gets the spacing wrong for going.

Understand the command "go" as something new.

This isn’t enough to remove the grammar for the going action. For that, you need to do this.

[code]Understand the commands “go”, “walk” and “run” as something new.

Include (- -) instead of “Parser Letter B” in “Parser.i6t”.[/code]

However, it’s a lot simpler to do add a check going rule that blocks directional movement. Try this.

[code]“Test”

Going by name to is an action applying to one thing. Understand “Go to [any adjacent room]”, “Enter [any adjacent room]” and “[any adjacent room]” as going by name to.

Carry out going by name to (this is the standard carry out going by name to rule):
move the player to the noun, without printing a room description.

Report going by name to (this is the standard report going by name to rule):
produce a room description with going spacing conventions.

A first check going rule (this is the reject directional travel rule):
say “You forgot your compass, oh dearie me.” instead.

The Front of the House is A Room. The description of the front of the house is “You are at the front of the house. You could go [around the back], or deeper into the [forest].”.

A mailbox is fixed in place, openable, closed and a container in the front of the house. The initial appearance of the mailbox is “You see a mailbox.”.

After opening the mailbox for the first time, say “You see nothing inside. Someone else has taken that crucial leaflet. Damn.”.

The Around the Back is south of The Front of the House. The description of the around the back is “You are at the back of the house. Someone’s left a window wide open. If you ask me, I think someone’s already in there.”.

The Forest is north of The Front of the House. The description of the forest is “Here you have a very foresty forest.”.

Test me with “mailbox / open mailbox / s / around the back / n / front of the house / n / forest”.[/code]

Here the player will have no idea what direction to go in and will have to use the room name. A slight variation on this would be to allow compass movement when the player picks up their compass. Try this.

[code]“Test”

Going by name to is an action applying to one thing. Understand “Go to [any adjacent room]”, “Enter [any adjacent room]” and “[any adjacent room]” as going by name to.

Carry out going by name to (this is the standard carry out going by name to rule):
move the player to the noun, without printing a room description.

Report going by name to (this is the standard report going by name to rule):
produce a room description with going spacing conventions.

A first check going rule (this is the reject directional travel when not carrying the compass rule):
if the player is not holding the compass, say “You forgot your compass, oh dearie me.” instead.

The Front of the House is A Room. The description of the front of the house is “You are at the front of the house. You could go [around the back], or deeper into the [forest].”.

A mailbox is fixed in place, openable, closed and a container in the front of the house. The initial appearance of the mailbox is “You see a mailbox.”.

After opening the mailbox for the first time, say “You see nothing inside. Someone else has taken that crucial leaflet. Damn.”.

The Around the Back is south of The Front of the House. The description of the around the back is “You are at the back of the house. Someone’s left a window wide open. If you ask me, I think someone’s already in there.”.

The Forest is north of The Front of the House. The description of the forest is “Here you have a very foresty forest.”.

The compass is in the forest. The description of the compass is “Bog standard, very useful.”.

Test me with “mailbox / open mailbox / s / around the back / n / front of the house / n / forest / take compass / s / s”.[/code]

Here the player can only use directional movement when holding the compass.

Hope this helps.

Thanks for all the great replies! I’m using the keyword extension now as well as taking some of your guys other advice (such as disabling compass movement, I was confused about how to accomlish that), I think it’s working out quiet well. I was originally hesitant to use keyword because I just equate the style to Blue Lacuna and I was worried it would come a bit rip off-ish, but with a list type conversation system and a unique story I dont think that’ll be much of a problem.