Stage (#820)

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

     The Stage is wide. Up here it's easy to feel
      all eyes are on you.
     
     From here you can go down to the theater, or
      east past the wings to go backstage.
     

You see feather boa here.

EXITS:
      The curtains are closed. You can squeeze through them and descend to the theater. [ theater ] O.o.f. Theater. You slide past a curtain, down the steps and into the ruined theater.
      West from here you can go back behind ratty curtains. [ backstage ] Backstage. Parting the dusty, cruddy curtains, you come backstage.



VERB SOURCE CODE:

lights house*lights:
" Toggles the .dark property on #819, the theater, and makes appropriate announcements";
dark = #819.dark;
#823:announce_all("You hear the chunk of a relay.");
if (!dark)
    if (!#820.curtain)
        for onstage in (#820:contents())
            onstage:tell("The houselights are going down. The theater grows quiet.");
            onstage:tell("All eyes are on you.");
        endfor
    endif
    #819:announce_all("The lights are dimming.");
    suspend(3);
    #819:announce_all("As the theater darkens it gets quieter.");
    suspend(3);
else
    if (!#820.curtain)
        for onstage in (#820:contents())
            onstage:tell("The houselights are coming up.");
        endfor
    endif
    #819:announce_anyway("The house lights are coming up in the theater.");
    suspend(2);
    #819:announce_anyway("You can talk again...");
endif
#819.dark = !#819.dark;
.


cur*tains:
if (this.curtain)
    #823:announce_all("The curtains on stage sweep open.");
    this:announce_all("The curtains draw open to reveal the house.");
    for audience in (#819:contents())
        audience:tell("With a scrape and a rush the curtains open on stage.");
        audience:tell_lines(#821.description);
        audience:tell_lines(#820.stageset);
    endfor
    for onstage in (this:contents())
        onstage:tell_lines(#822.house_desc);
    endfor
    if (#819.dark)
        this:announce_all("Is there an audience out there? it's watching you.");
    else
        this:announce_all("The house lights are on.");
    endif
else
    #823:announce_all("The curtains on stage sweep closed.");
    for onstage in (this:contents())
        onstage:tell("The curtains are closing -- they close.");
    endfor
    #819:announce_anyway("With a jerk and a squeak the curtains on stage sweep closed.");
endif
this.curtain = !this.curtain;
.


announce:
pass(@args);
if (!#820.curtain)
    for audience in (#819:contents())
        audience:tell("[On Stage]: ", @args);
    endfor
endif
.


announce_all:
pass(@args);
if (!#820.curtain)
    for audience in (#819:contents())
        audience:tell("[On Stage]: ", @args);
    endfor
endif
.


announce_all_but:
pass(@args);
if (!#820.curtain)
    for audience in (#819:contents())
        audience:tell("[On Stage]: ", @args[2..length(args)]);
    endfor
endif
.


look_self:
pass(@args);
player:tell_lines(this.stageset);
.


find_script:
"looks at the stuff on the stage. The first thing with a :play_script verb is presumed 
to be playable; it's returned";
for item in (#820:contents())
    scripted = $object_utils:has_verb(item, "play_script");
    if (scripted)
        return item;
    endif
endfor
return #-1;
.


play:
if (#820.playing)
    if (player.location == #820)
        player:tell("A performance is running!  You're spoiling it!  Get off the 
stage!");
    else
        player:tell("A performance is already running...you can grab a seat in the 
back of the theater...");
    endif
else
    #820.playing = 1;
    playable = #820:find_script();
    if (valid(playable))
        #819:announce_anyway("There seems to be some action.  A show is going to 
start...");
        suspend(5);
        #819:announce_anyway("There's a distinct sense of expectation on the stage...");
        suspend(4);
        if (!#819.dark)
            #820:lights();
        endif
        if (#820.curtain)
            #820:curtains();
        endif
        suspend(5);
        playable:play_script();
        while (playable.playing)
            suspend(playable.delay);
        endwhile
        suspend(5);
        #820:curtains();
        suspend(3);
        #820:lights();
        #820.playing = 0;
    else
        player:tell("The house is quiet.  There's nothing doing.");
        #820.playing = 0;
    endif
endif
.


quiet:
" interrupts the script in mid-performance... ";
playable = #820:find_script();
if (valid(playable))
    if (playable.playing)
        kill_task(playable.runtask);
        playable.playing = 0;
        this.playing = 0;
    endif
    #819:announce_anyway("Whatever's on the stage seems to have stopped abruptly 
in the middle...");
endif
.


emote:
name = this:get_name(player);
if ((argstr != "") && (argstr[1] == ":"))
    this:announce_all(name, argstr[2..length(argstr)]);
else
    this:announce_all(name, " ", argstr);
endif
.


get_name:
who = args[1];
name = who.name;
if ($object_utils:has_property(who, "costume"))
    costume = who.costume;
    if ($object_utils:has_property(costume, "role_msg"))
        name = costume.role_msg;
    endif
endif
return name;
.


`*:
" Hacked from the stage-feature object, #112. ";
name = verb[2..length(verb)];
who = player.location:match_object(name);
if ($command_utils:object_match_failed(who, name))
    return;
endif
player.location:announce_all(this:get_name(player), " [to ", this:get_name(who), 
"]: ", argstr);
.


[*:
" hacked from #112, the Stage-talk FO. ";
player.location:announce_all((((this:get_name(player) + " ") + verb) + " ") + argstr);
.


]*:
" Hacked from #112, the Stage-talk FO. ";
player.location:announce_all("[", (((this:get_name(player) + " ") + verb[2..length(verb)]) 
+ (argstr ? " " + argstr | "")) + "]");
.


say:
player:tell("You say, \"", argstr, "\"");
this:announce(this:get_name(player), " says, \"", argstr, "\"");
.



PROPERTY DATA:
      curtain
      stageset
      playing