• Pinacolada's Projects

  • by Pinacolada

Wherein I enlighten you, dear reader, on the status of my many eclectic hopes and dreams for Commodore projects.


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

[!] 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.

  1. The old man eyes you furiously,
  2. clutching his magical artifact. "You
  3. can't have it!" he rasps, but when a
  4. leather coin pouch is dangled
  5. temptingly in front of him, his hands
  6. tremble, his eyes misting.
  8. "I... I could use that... to buy my
  9. medicine," he whispers. "I... h-how
  10. much is in there?" he croaks, looking
  11. at you.
  13. How much do you offer? %in (this would be user input of type 'number' - disallowing any alphabetic characters)
  15. %c <300 %j 12 (compare: if input is less than 300, jump 12 lines down)
  17. The old man sighs, shrinking in upon
  18. himself. "I thought so," he murmurs.
  19. "Some things... are just too good to
  20. be true..." His eyes ablaze now, he
  21. shoves the artifact into your chest!
  22. A burning sensation spreads as he
  23. intones evil-sounding words, fists
  24. clenched in hate. Staggering back,
  25. your eyes widen, collapsing as pain
  26. engulfs you.
  28. (this line could modify player stats and abort)
  30. He smiles weakly. "It's yours," he
  31. murmurs, handing you the artifact.
  33. (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.


S0RC3R0R 5/3/2011

That scripting idea is a very CLEVER and EFFECTIVE way indeed to create NPC interactions, or SCENARIOS. Very cool. ;)

- S0RC3R0R