Generic Transparent Exit (#1053)

(an instance of Generic Post-Apocalypse Exit made by Marcus)

     This is an exit hacked off #7 (the generic exit) to tell the contents of the room it exits to (if it's not dark in there).

Go to location of this object, wooden box.


HELP MANUAL:
     The Generic Transparent Exit is a child of #959, the Generic Post-Apocalyptic Exit 
(q.v.); as such, it supports daytime and weather on its @messages.
     For ease of programming, the transparency of children of #1053 is quite simple. When 
you look at it, a @players message and a @things message will append to the exit's 
description if there are any players or things (non-player objects) in the room behind 
to be seen. Write these messages with the strings herlayers and Generic Transparent 
Exithings to be substituted with appropriate lists of names. Verb conjugations, as 
per the @sitting message on the Generic Room with Seats (#955), are also supported.



VERB SOURCE CODE:

look_self:
" To the description of the exit are appended messages @players ";
" and @things, with substitutions listing players or things in ";
" the room behind (including verb conjugations for verbs marked ";
" up as %) [cf. #955, the seated room] ";
players = {};
things = {};
if ((typeof(room = this.dest) == OBJ) && valid(room))
    for item in (room.contents)
        is_player(item) ? players = {@players, item} | (things = {@things, item});
    endfor
endif
pass(args);
if (players)
    player:tell(this:players_msg(players));
endif
if (things)
    player:tell(this:things_msg(things));
endif
.


players_msg things_msg:
" Called by :look_self, runs a string substitution on the message ";
" naming players or things in the destination, making any verb ";
" conjugation on it. (Largely hacked from Dredful's #955.) ";
msg = this.(verb);
inlist = args[1];
fverb = "";
for word in ($string_utils:words(msg))
    if ((length(word) > 1) && (word[1..2] == "%<"))
        fverb = word[3..length(word) - 1];
    endif
endfor
if (fverb)
    wverb = $gender_utils:get_conj(fverb, @(length(inlist) > 1) ? {this} | inlist);
    msg = strsub(msg, tostr("%<", fverb, ">"), wverb);
endif
return strsub(msg, tostr("%", verb[1..length(verb) - 4]), $string_utils:title_list(inlist));
.



PROPERTY DATA:
      players_msg
      things_msg
      gender
      dark
      help_msg

CHILDREN:
wood a path picnic a path out muck sprout a path bog crawl awaken sky in up step up up up pleasance measure south out in