Prog Section 2

From Immwiki
Jump to: navigation, search

Variables

"Moods are for cattle and loveplay, not for fighting!"

-- Gurney Halleck, Dune

More often than not, you will want to reference the persons, mobs, or things associated with progs. Furthermore, you will not, a priori, know the names of the persons, mobs, or items which trigger or are acted on by the progs. The solution to this is a system of variables.

Variable Syntax:

1. The $ symbol

The $ symbol prefaces every non-local variable. It is equivalent to saying "the value which is
stored in". So, let’s suppose we have a variable called n. n’s current value is 'Jolinn'
(it’s a character value). Every time the prog sees $n, the prog engine interprets that as
'the value stored in n', which means that every time the prog sees $n, it reads it as 'Jolinn'.
Additionally, it is possible to have multiple '$' characters iterated, defined recursively.
I.e., suppose we have two variables, 3 and 4.
If
$4 == 3
and
$3 == 5000
then $$4 == $(3) == $3 == 5000

2. List of variables

The following table provides a summary of the most basic variables.
a:                                    A: 
b: short desc. of obj carrier         B: his/her of obj carrier
c:                                    C: 
d: the current line of set data prog  D: 
e: he/she of actor                    E: he/she of focus 
f: name of focused on                 F: short desc. of focused on 
f0: name of focus 0.                  F0: short desc. of focus 0. 
f1: name of focus 1.                  F1: short desc. of focus 1. 
g:                                    G: 
h: Amount of damage done by a hit     H:
   (see hit prog)
i: name of mob                        I: short desc. of mob 
j: he/she of mob                      J: he/she of random 
k: him/her of mob                     K: him/her of random 
l: his/her of mob                     L: his/her of random 
m: him/her of actor                   M: him/her of focus
                                      M0: him/her of focus slot 0
                                      M1: him/her of focus slot 1 
n: name of actor                      N: short desc. of actor 
o: if on mob: name of obj             O: if on a mob: short desc. of obj 
   if on on an object: name of owner  O: if on an object: short desc. of owner 
p:                                    P: 
q:                                    Q: 
r: name of random                     R: short desc. of random 
s: his/her of actor                   S: his/her of focus slot
                                      S0: his/her of focus slot 0
                                      S1: his/her of focus slot 1 
t: name of vict                       T: short desc. of vict 
u:                                    U: 
v: loop value check:                  V:
 v1: loop value, depth 1
 v2: loop value, depth 2
 vn: loop value, depth n,
     n a positive integer >= 1
w:                                    W: 
x: text of command (if appli.)        X: $x, with the first word excluded 
y: argument lookup (punc.)            Y: argument lookup (punc. sensitive)
y1: First word of argument            Y1: First word of argument
y2: Second word of argument           Y2: Second word of argument
yn: nth word of argument              Yn: nth word of argument 
z: value from mpremember              Z: Long desc. of actor

1,2,3,4,5,6,7,8,9: Value stored in corresponding mobile integer memory value

Now, this is all a bit much to digest at once, but let’s define what some of
these terms mean:
The actor of a prog is the entity which triggers the prog.
  Ex:
  greet_prog 100
  say Hello, $n
And Jolinn enters the room, the room will see:
  The mob says, ‘Hello, Jolinn’
This is because Jolinn is the person who triggers the prog.
The mobile of the prog is the entity which has the prog, be it a mob or
object.
  Ex:
  greet_prog 100
  say This prog is on $I.
Let’s suppose this mob were on ‘a hen’. Whenever someone entered the room, they
would see:
  A hen says, ‘This prog is on a hen.’Notice that here we use the capital version
  of the variable, $I, since the name of a mob is not really what we want to say to
  the room (its name might be hen yellow feathered loud demon -- not something you 
  want to echo to the room!).
The random prog variable selects a random target in the room. The random variable,
once invoked within a given prog, remains the same for the duration of the prog. (So, if
you have two instances of $r in a prog, they will both refer to the same (random) entity.)
The random variable will also never reference the mobile or object on which the prog exists.
  Ex:
  greet_prog 100
  say $r is a random person in the room.
Suppose that this prog is on a mob in a room with Jolinn, Iandir, and Aeolis. If Arkhural
enters the room, the mob might do any one of the following.
  The mob says, ‘Jolinn is a random person in the room.’
  The mob says, ‘Iandir is a random person in the room.’
  The mob says, ‘Aeolis is a random person in the room.’
  The mob says, ‘Arkhural is a random person in the room.’
Each of these has an equal probability of occurring.
The victim variable refers to the object of the actor's action. This variable is
less frequently used, but denotes the subject of the actor's ($n) action. Since it is not
valid in every prog type, you should research whether your prog trigger even allows the
use of this variable.
The object variable refers to EITHER:
(i) The object which triggers the prog (if the prog is on a mob)
(ii) The owner of the object (if the prog is on an object)
The focus variable refers to a pc stored in a mobile focus slot. We’ll learn more about
focus slots when we cover mobile memory, but for right now, the key fact is that the
variables which are listed above are how we reference focus slots from within a prog.
The loop variable is a variable used in loops to identify what iteration, or "step" a
loop is currently on. We will discuss this variable more in the section on control structures.
The command text variable is used to reference the text of a given prog’s argument.
Essentially, whenever there is an argument to a prog_trigger which is a player input, $x,
the command text variable, can be used to reference this value.
  Ex: 
  speech_prog p 
  tell $n You just said $x. 
This prog is a prog which triggers on anything spoken, and when it does, it invokes $x.
$x, here, represents the entire line that trigged the prog. So, if this prog were on a mob,
and someone in the room were to say "I hear Jolinn has quite the taste for ethron trollops."
the prog would trigger, and you would see:
  Mob tells you, ‘You just said I hear Jolinn has quite the taste for ethron trollops.’
$x has other, more interesting uses, as we will see later. $X is identical to $x, except that
the first word is stripped. [This functionality is rarely used.]
The argument lookup variable is a variable that allows us to reference the content
of a prog’s argument. Essentially, an argument lookup variable works like this: Suppose we
have the prog trigger speech_prog, which triggers when a certain key word or phrase is said.
So, maybe we’d like the mob to respond to:
  "I want you to threaten <person>" 
with a tell to <person>, telling them, "You’d better watch yourself, <person>!"
Now, we want a speech_prog for this, so we might use:
  speech_prog p I want you to threaten 
But then we’re left with being unable to pass the information about the word after
"threaten", since it’s going to going to be something variable, and therefore not
something you can put in a speech_prog (unless you had a speech prog for every n
letter player name!).
The $y variable is what allows us to reference the arguments of a prog directly.
In general, any place where $yn (where "n" is an integer n >= 1) occurs, the prog
interprets this as "the value of the nth word in the prog argument". As an example,
suppose we had the speech_prog:
  speech_prog p I want you to threaten
  tell $y6 You’d better watch yourself, $y6!
Now, if you were to say aloud, in this room: "I want you to threaten Jolinn", the
mob would tell Jolinn: "You’d better watch yourself, Jolinn!" The reason being:
Jolinn is the sixth entry in the argument, and hence it is referenced by $y6.
By default, $y will strip any punctuation from its argument target. The capital
version, $Y will preserve punctuation (this is rarely needed). The argument lookup
variable has many more uses, as we will see in later sections.

Local Variables

Local variables, unlike the normal $0-$9 mobvalues, persist only for the duration
of the prog in which they're created. They can hold numeric or string values.
They are prefixed with a % (as opposed to $ for mobvalues) and can be given any
alphanumeric name that is not a number.
They are otherwise used just like mobvalues, and work with:
mpvalueset mpvaluerand
mpvalueup (*) mpmath
mpvaluedown (*) mpgetroomvnum
and with
if (mob/obj/room)value
NOTE! You no longer (as of June 2003) need to use "mobvalue/objvalue/roomvalue" for
any of your if checks. Just "value" should suffice.
Here is an example of the local variables in action:
mpvalueset gstr Hello, I am a local variable.
mpecho %gstr
mpvaluerand apples 1 3
mpecho I have %apples apples.
if value(apples) == 3
  mpecho Wow, that's a lot of apples!
endif
mpmath apples %apples * 2
mpecho I now have %apples apples.  That's twice as many as before!
I'm sure you can figure out what the above would do.