TADA Background Information - Part III
I continue my series of design documents with discussion of menu evolution, with a side-trip into the beginnings of a possible scripting language for NPC interaction.
III. Menu Evolution
One man's constant is another man's variable.
—Alan J. Perlis
And so, the original The Land of Spur menu (complete with a few typos, but which also cleverly adapted to 40 or 80 columns):
[-------------------------------------] [-------------------------------------]
( The LAND of SPUR Game Menu ) ( Ye may employ these commands )
(=====================================) (=====================================)
( DROP - an item READY - a weapon ) ( UNREADY-weapon REST - a while.. )
( GET - an item ATTACK - a monster ) ( CAST - a spell LOOK - at a room )
( EAT - food DRINK - water/wine ) ( USE - item WEAR - armor )
( READ - a book DUEL - a player ) ( HELP - help QUIT - Quit game )
( EXAMINE OBECT (X-examines all) ) ( QUOTE - Write your chars quote )
( FLEE - random exit ) ( STATS - Your Current Status )
( DIE - Terminate this player ) ( INV - Display Inventory )
( V - Room description ON/OFF ) ( AD - Auto duel ON/OFF )
( ORDER - Tactical order of allys ) ( GIVE - Give item to ally to carry)
( TAKE - Take item from ally ) ( LURK - Lurk behind ally in combat)
( LOOT - unconcious adventurers! ) ( PRAY - When all else is gloom.. )
( DIG - Dig up or bury items ) ( )
======================================= =======================================
[ Ye may travel: ] [ Guild Special Commands: ]
[ [N]ORTH [S]OUTH ] [ FOLLOW ME-Ask guild member to follow]
[ [E]AST [W]EST ] [ FL-Allow your character to follow ]
[ [D]OWN [U]P ] [ STAY- Leave followers behind ]
======================================= =======================================
Here's a fairly recent version, in 40 columns. You can see I've been working on this game off and on (mostly off) for a few years now.
- The brackets around text are due to me writing a routine (partially working with one pair of brackets per line using the existing instring SYS call, but it'd be optimal if done fully in assembly) to highlight the text inside brackets in user-configurable different colors - I've implemented the ability to change colors internally, it's just that the player can't change or disable them yet.
- Double brackets will eventually escape themselves, displaying just a single bracket.
- I've made an 80-column ANSI-compatible version (why not? maybe PC folks would want to get in on the action!) similar to this menu, but it needs some updating, and is not color-configurable.
[CONTROL-S] or [HOME] pauses, any other
key resumes. [/] or [SPACE] quits.
If you see a [[MORE/Q]] prompt: Q quits
reading, any other key continues.
You may wish to capture this text for
future reference.
["Totally Awesome Dungeon Adventure"]
Rev. 1: ??/??/1994 Rev. 5: 07/25/2004
Rev. 2: 09/29/1995 Rev. 6: 07/19/2006
Rev. 3: 10/25/1995 Rev. 7: 07/29/2007
Rev. 4: 05/03/2003
--- [Command Summary: Dungeon Area] ---
What the symbols to the left of some
commands mean:
[*] Typing the command by itself lists
objects (whether in the current room
or your inventory) to perform the
desired action on. Typing the
command, a space, plus an object
name will perform the action on the
specified object. For more detailed
information, type [HELP PARAMETERS].
[+] This command is a Guild command and
can only be used by Guild members.
For more detailed information, type
[HELP GUILDS].
[!] This command requires your character
to learn a certain skill, either
Architecture (building) or Oration
(conversation). For more detailed
information, type [HELP CREATE]
[HELP RECYCLE]
[HELP EDIT]
or [HELP SAYEDIT].
-------- [One Letter Commands] -------
[G]et all objects in room [N]orth
[H]elp menu (also [?]) [E]ast
[I]nventory [S]outh
[L]ook at room [W]est
[Q]uit the game [U]p
[R]oom descriptions on/off [D]own
[T]ime (hourglass) on/off
e[X]amine all objects in room
[#] Ranger/Palintar mapping
-------- [Two Letter Commands] --------
[! DB]...List rooms and objects
you've created
[+ FL]...Toggle follow mode on/off
[XM]...Toggle expert mode on/off
(Architects may create other room
exits that use additional one- and
two-letter commands.)
-------- [Full Word Commands] --------
Only capital letters in full word
commands must be typed to distinguish
them from one another.
With [Expert Mode] off, you may type
commands as seen here and they will
automatically be spelled out for you.
For more information, read [HELP XM].
[* ATTack]..a monster, engage in combat
[+ AUTo]....toggle autoduel on/off
[* BASh]....a monster senseless w/shield
[* CASt]....a magic spell that you have
[CHArge]..your steed into battle
[! CREate]..something (a room, food, etc)
[DESc]....edit your char's description
[DIE].....kill your character
[DIG].....dig up or bury items
[* DRInk]...water or wine
[* DROp]....an item in your inventory
[+ DUEl]....an opposing guild member
[* EAT].....food
[! EDIt]....an object/room you created
[* EXAmine].an object or character
[+ FOLlow]..let Guild members follow you
[FLEe]....in a random direction
[* GET].....an item from the room
[GIVe]....an item to an ally to carry
[HEAl]....a character who is wounded
[* HELp]....with the game (see below)
[HIDe]....or reveal objects in room
[INV].....list what you're carrying
[* LOOK]....at the room or an object
[+ LOOT]....unconscious adventurers
[LURk]....behind an ally in combat
[MORe]....toggle [[MORE/Q]] page pausing
[MOUnt]...your trusty steed
[ORDer]...position allies in combat
[PAGe]....a character with a message
[PRAy]....when all else is gloom
[QUIt]....the game in progress
[QUOte]...edit your character's quote
[* READ]....a book or scroll
[* READY]...a weapon
[! RECycle].an object or room you created
[ROOm]....toggle descriptions on/off
[SAY].....something to puppet character
[! SAYEdit].edit char trigger/event file
[SCHool]..read character stat files
[SEArch]..area for hidden objects
[STATs]...current character/ally stats
[+ STAY]....leave following players here
[TAKe]....an item from an ally
[TRAck]...players in the dungeon
[* UNMount].your trusty steed
[UNReady].a weapon
[* USE].....an item in your inventory
[* WEAr]....clothing or armor
[WHO].....list of players
+--- [Getting more detailed help:] ---+
| |
| Type... to list... |
| [HELP INDEX] all available topics |
| [HELP ALPHA] alphabetical order |
| [HELP GROUPS] topics by category |
| |
+-------------------------------------+
The initial capital letters for indicating how much of each command must be typed to disambiguate is a good idea, I think.
After some thought, I realized I could improve on things:
1) Move the revision info to the end. Players don't need any extra scrolling through useless info to get to the commands they need.
2) Change the + * and ! symbols to something more mnemonic: (G)uild, (P)arameter and (S)kill are much more easily remembered.
Speaking from a purely command design perspective:
1) I'm pondering whether TRACK will be used on non-square maps, since computing distance and direction is made harder. It could be very possible to walk through the map manually, which would take some time. TLOS uses a bit-mapped memory area in some fashion to speed this up, although I need to read up on how it is done.
2) I'm considering dropping UNREADY and UNMOUNT commands, or at the very least aliasing them to READY and MOUNT. There's no reason not to make them toggles like (R)oom Descriptions, (T)ime, e(X)pert (M)ode and such, performing the necessary UNREADY/UNMOUNT actions themselves.
3) A small quibble: The highlighting should just be for the commands, not including the type of command they are.
4) I can tighten up the wording on the explanations of the (G), (P), and (S) flags to save space, I think.
I considered putting the explanations after the commands, but an idea just popped into my head. C-Net and Image BBSes had a feature of the text message editor called the Message Command Interpreter. A few commands dealt with simple comparisons which could be done with system variables to skip lines in messages, print specific messages, or even stop reading the message if a user's access level was equal or unequal to the access level given for comparison.
Why bring this up? It might be useful to skip the explanation of the (G), (P) and (S) flags if the user's eXpert Mode is enabled.
If I implemented commands such as %G, %I and %J (for Get, Input and Jump respectively)—maybe the command trigger character should be different, but I digress—the game could get a lot more interesting.
I envision something like the following, which is subject to change. Numbers are for reference only, spaces within % substitutions are for clarity.
The old man eyes you furiously,
clutching his magical artifact. "You
can't have it!" he rasps, but when a
leather coin pouch is dangled
temptingly in front of him, his hands
tremble, his eyes misting.
"I... I could use that... to buy my
medicine," he whispers. "I... h-how
much is in there?" he croaks, looking
at you.
How much do you offer? %in (this would be user input of type 'number' - disallowing any alphabetic characters)
%c <300 %j 12 (compare: if input is less than 300, jump 12 lines down)
The old man sighs, shrinking in upon
himself. "I thought so," he murmurs.
"Some things... are just too good to
be true..." His eyes ablaze now, he
shoves the artifact into your chest!
A burning sensation spreads as he
intones evil-sounding words, fists
clenched in hate. Staggering back,
your eyes widen, collapsing as pain
engulfs you.
(this line could modify player stats and abort)
He smiles weakly. "It's yours," he
murmurs, handing you the artifact.
(this line would subtract gold and add the item to the player's inventory)
These features should only be for user-created content using external SEQ or REL files on levels 9 and above, after the main game is completed. Otherwise, it would mean a complete rewrite of the existing code, and while that would make it easier to modify, I really don't feel like rewriting stuff yet again.
Leave a Comment
You must be signed-in to post comments.Responses
S0RC3R0R 5/3/2011
That scripting idea is a very CLEVER and EFFECTIVE way indeed to create NPC interactions, or SCENARIOS. Very cool. ;)
- S0RC3R0R