EnvyMud Release 2.2
Friday, 14th February 1997

Kahn		envy@envy.com


The central output functions are 'send_to_char', 'send_to_all_char', and 'act'.
Of the four, 'send_to_char' is much simpler, faster, and less powerful.



=== The function 'send_to_char'

The interface for send_to_char is:

    void send_to_char( const char *txt, CHAR_DATA *ch )

The string 'txt' is sent to the character 'ch'.  That's all there is to it.



=== The function 'send_to_all_char'

The function 'send_to_all_char' does away with multiple blocks of code in
sending to all active descriptors.  This is useful for functions like
system warnings and echos.

The interface for send_to_all_char is:

    void send_to_all_char( const char *text )

The string 'text' is sent to all characters with active descriptors.



=== The function 'act'

The function 'act' is much hairier.  The following section is a
precise reference guide.  If you don't already have some notion of
what 'act' format strings look like, then you should read some code
which uses 'act' (such as some of the spell functions in magic.c) to
get a concrete introduction to this function.

    void act( const char *format, CHAR_DATA *ch, const void *arg1,
	     const void *arg2, int type )

    const char *format;

	This is a format string, with formatting specifications introduced
	by '$' (just as 'printf' introduces its formatting sequences with '%').
	Typically this is a complete sentence with a subject and an object.
	This format string does not need to be terminated with '\n\r'.

    CHAR_DATA *ch;

	This is the subject of the sentence.  It MUST be included.

    const void *arg1;

	This is usually the object of the sentence, though its meaning will
	depend on what you want to print out.  This may be an object or
	possibly a text string.

    const void *arg2;

	This is the target of the sentence, as well as possibly the object of
	the sentence.  This may be either a victim, an object, or possibly a
	text string.

    int type;

	This is the 'to' type of the sentence.  For 'act', values are:

	    TO_CHAR	Send only to 'ch'.
	    TO_VICT	Send only to 'arg2' interpreted as a character
	                    (and then only if arg2 != ch).
	    TO_ROOM	Send to all chars in room except 'ch'.
	    TO_NOTVICT	Send to all chars in room except 'ch' and 'arg2'.

	In 'act', only characters in the same room as 'ch' are considered.

Each awake character in the same room (or game) as 'ch' is considered for
output.  (Thus 'ch' must always be a legitimate character whose location is
not NOWHERE).  If the target character meets the 'type' requirements, then
the formatting string 'format' is used to construct an output string, with
'$' sequences substituted using values from 'ch', 'arg1', and 'arg2'.

In the substitution of '$' sequences, attention is paid to visibility by
calling 'can_see' and 'can_see_obj' as needed.

The first character of the output string is always capitalized.




=== The '$' sequences

Here are all the '$' sequences supported by 'act':

    $t
	Result is simply the 'arg1' argument interpreted as a string.

    $T
	Result is simply the 'arg2' argument interpreted as a string.

    $a
	Result is 'a' or 'an' depending on the first letter of 'arg1'
	(interpreted as a string).  If you can't use $t, you can't use $a.

    $A
	Result is 'a' or 'an' depending on the first letter of 'arg2'
	(interpreted as a string).  If you can't use $T, you can't use $A.

    $n
	Result is the name of 'ch'.  If 'ch' is not visible to the target
	character, result is the string 'someone'.

    $N
	Result is the name of 'arg2' (considered as a victim).  If 'arg2' is
	not visible to the target character, result is the string 'someone'.

    $e
	Result is 'he', 'she', or 'it', depending on the sex of 'ch'.

    $E
	Result is 'he', 'she', or 'it', depending on the sex of 'arg2'
	(considered as a victim).

    $m
	Result is 'him', 'her', or 'it', depending on the sex of 'ch'.

    $M
	Result is 'him', 'her', or 'it', depending on the sex of 'arg2'
	(considered as a victim).

    $s
	Result is 'his', 'her', or 'its', depending on the sex of 'ch'.

    $S
	Result is 'his', 'her', or 'its', depending on the sex of 'arg2'
	(considered as a victim).

    $r
	Result is 'sir', 'madam', or 'buddy', depending on the sex of 'ch'.

    $R
	Result is 'sir', 'madam', or 'buddy', depending on the sex of 'arg2'
	(considered as a victim).

    $p
	Result is the short description of 'arg1', considered as an object.
	If 'arg1' is invisible to the target character, result is the string
	'something'.

    $P
	Result is the short description of 'arg2', considered as an object.
	If 'arg2' is invisible to the target character, result is the string
	'something'.

    $d
	Result is the first word in 'arg2', considered as a string.  If 'vo'
	is NULL, result is the string 'door'.  This is meant for extracting
	the name from a door's keyword list, but may be used in general for
	other keyword lists.
