April 01, 2008

Adverbial Commands

Here's a sneak peak at something we're doing for Arm 2:

Currently commands are implemented to perform a specific action or skill in the game. Sometimes other uses or additional complexity that would provide more functionality need to be added to the commands. New commands are created, or command line switches added to access the added complexity. This pollutes the name space with single-use commands, or adds difficult to remember syntax, when the added behavior could be abstracted out to work in multiple other commands using a more natural approach.

Adverbial commands are commands that alter the functionality of existing commands. Most of the existing commands are 'verbs', directing user's characters what to do. Adverbial commands work like adverbial phrases in English, allowing the user to describe how they are doing an action, and providing coded benefits for doing so.

A collection of adverbs would be put together based on multiple criterion: How many commands they make sense with, the amount of complexity reduction they will provide, and the clarity and ease of use they hold for the player base. Each individual command would define what adverbs it supports. Using the adverbs provide coded modifiers or affects to the execution or results of the command for that single execution. Further commands which set the person into a 'mode' of behaving could still be done.

The intention of this is not to remove one-word commands that make sense (such as whisper and sneak), but rather allow a greater flexibility in describing your actions, as well as providing coded benefits to a wider variety of commands without having to come up with a command name that exactly fits the intention of the command.

Example Adverbial Commands

Some examples of adverbial commands and how some commands might respond to them follows.

quietly -- Used in speech related commands, lowering the volume of the speech. Lowering the volume of speech affects how well it could be heard in loud areas, listening skill checks, and if it carries to other rooms. Existing commands such as 'whisper' can be set up as an alias to 'quietly tell'. This could also be used in movement, such as "quietly go east (moving through the shadows)", allowing for a one room sneak. Other possibilities: Opening a door, picking up an item, starting an attack or drawing a weapon.

loudly -- Inverse of quietly, raises the volume of speech related commands. One might need to use this to be heard over others, or in a loud bar. Someone might catch only part of your say, or just an emote that your speaking but it's too loud unless you use this. This could be optionally used as a way to shout rather then the shout command. Other possibilities: Loudly moving to make your presense known, loudly attacking perhaps drawing attention (or other combat effects), or loudly chanting at a critical point in a ritual.

repeatedly -- Keep trying to do something until you succeed (or you determine it's impossible for your skill). It increases the delay proportionately and gives you a highest possible random result on your skill check. This wouldn't be used on skills where failure can result in a bad outcome. Possible uses include: Picking a lock, and searching a room.

in <language> -- Shortcut to allow you to change your language for one speech command. Example: in pig-latin say hello. This might be used in casting, or other communications such as psionics, or writing.

quickly -- Decreases the delay for the skill, but reduces your chance of success. Normally a master in a skill can ignore menial tasks involving the skill. If time is of the essence, they can try and do it quickly, and it increases the difficulty of the task. Possibilities include: drawing a weapon, attacking, shooting, kicking, disarming, getting an object, stealing, casting a spell, climbing, moving instead of run, mounting, or foraging.

slowly -- Increases the delay for the skill, but increases your chance of success. This should only be possible in a non-stressful situation, but the idea is you take your time doing it to reduce the difficulty of the task. Pretty much the inverse of quickly, this can be applied to many of the same commands. Possibilites include: moving, poisoning, casting a spell, stealing, climbing, crafting, picking a lock, stealing an item, foraging or shooting.

ineptly, poorly, adeptly, expertly -- Purposefully degrade your ability in a skill for one performance of it. Removes any chance of skill gain from failure, but can be used as a role play tool. Depending on your actual ability in the skill, you may not be able to use higher levels. You can't use this to increase your skill beyond your current ability. Other possibilities include: Taking a payoff to ineptly guard your boss one time, to downplay one's combat skills, or basically charade. Should give viewers an opposed check to see if they notice the deception.

exclusively -- Specify that you are looking for a specific result, like with forage. Example: exclusively forage for a golden skull.

Syntax

The general syntax for adverbial commands is:

Syntax: <adverb> <command> (pre-how emote) [post-how emote] <body>

Some Adverbial Commands might take arguments themselves (for instance 'in' takes the language to speak in), and would require slightly altered syntaxes.

Output

Each command will decide if it makes sense to show the adverbs used in the output for the command. For instance, 'quietly say' might echo 'You quietly say...' Alternatively, some might not be shown unless some condition is met, such as noticing someone trying to fake poor skill. Others may never show in the output for the command.

Implementation

An 'AdverbialCommand' will be created which will take the name of the adverb to set on the command. Commands that want to intercept an adverb will add a public boolean instance property (getter/setter) for it. When an AdveribialCommand is told to run, it will re-interpret the remaining arguments as a new command. Assuming it gets a new command back, it will use introspection to set the adverb as being used. It will then schedule the new command to run and exit. The new command will have to decide what the result is of the adverb on the command.

If the command does not have a public property for the adverb, the default behavior will be to give an error message 'You may not , try using command-emotes (see help command emotes)'.

So, if a Command wants to handle the 'slowly' adverb, it will add a 'private boolean slowly;' and an appropriate getter and setter for it. The slowly adverbial command will check to see if the command has a boolean setter for the 'slowly' property, and set it to true. When the command is run, it will determine what 'slowly' means for it.

Strict/Permissive Error Handling

There should be a user setting which allows the user to not get told if the command doesn't support a specific adverb, give a warning, but go ahead and do the command anyways.

Multiple Adverbial Commands

Multiple adverbial commands could be combined (for instance, 'in pig-latin quietly say hello'), depending on how this is implemented. If so the system would need to watch for opposing adverbs (quietly vs. loudly, quickly vs. slowly). One solution to this is to have each adverb maintain a list of 'unacceptable' other adverbs that it'll turn off if found.

Posted by Morgenes at April 1, 2008 07:24 AM
Comments

A brilliant development. Thank you.

Posted by: Sunburned at April 1, 2008 11:18 AM

I don't believe you due to the posting date...but what a lovely idea.

Posted by: brytta.leofa at April 1, 2008 11:20 AM

Very neat stuff. I've always wanted to be able to 'take 20' in Armageddon, so to speak.

Posted by: jstorrie at April 1, 2008 11:35 AM

Wow, this seems great.

One question though: will you be able to combine multiple adverbs, so long as they make sense? (i.e. you wouldn't be able to combine quietly and loudly, but maybe you could do "slowly repeatedly pick door").

Posted by: Cutthroat at April 2, 2008 04:08 AM

This, however, is NOT an April Fool's thing. It is the real deal.

Posted by: Nyr at April 2, 2008 08:42 AM

Nice, I actually suggested something like this for sneak at one point so that you instead of having a bunch of commands like palm and sneak and plant and whatnot you could just sneak get or sneak fill waterskin and whatnot.

Posted by: DaeDroug at April 2, 2008 02:44 PM
Post a comment









Remember personal info?