calliope (#844)(an instance of generic thing made by polyhymnia)     A large pipe organ, steam driven and started with a lever, stands in the center of the merry-go-round. You could reach it from one of the animals. Go to location of this object, The Whirligig. VERB SOURCE CODE: riding_msg: " args[1] is the number of the seat in this.location.seats = steed in lists of riding msgs [this.riding]; args[2] is the list of people in it"; steed = args[1]; riders = args[2]; msg = this.riding[steed]; 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(riders) > 1) ? {this} | riders); msg = strsub(msg, tostr("%<", fverb, ">"), wverb); endif msg = strsub(msg, "%rider", $string_utils:title_list(riders)); return $string_utils:pronoun_sub(msg); . riders: " Lists the players sitting (to consider them riders)."; riders = {}; for seat in (this.location.sitting) for rider in (seat) riders = setadd(riders, rider); endfor endfor return riders; . go_round: carousel = this.location; steed = 0; sound = random(length(this.music)); while (this.going && (riders = this:riders())) (steed < length(carousel.seats)) ? steed = steed + 1 | (steed = 1); if (wholist = carousel.sitting[steed]) ridingmsg = this:riding_msg(steed, wholist); " this:riding_msg returns the proper line of this.riding with wholist substituted in..."; else ridingmsg = this.unridden[steed]; endif carousel:announce_all_but(riders, ridingmsg); suspend(this.interval); if (!(steed % 4)) (sound < length(this.music)) ? sound = sound + 1 | (sound = 1); carousel:announce_all(this.music[sound]); suspend(this.interval); endif endwhile " this.slowing is a property with a list of messages to be played to the room as the carousel slows down."; for line in [1..length(this.slowing)] suspend(this.interval + line); this.location:announce_all(this.slowing[line]); endfor this.going = 0; . start play: if (!$object_utils:has_property(this.location, "seats")) player:tell("Sorry, the calliope only plays in a room where there's someplace to sit down."); elseif (!(length(this.location.seats) == length(this.riding))) player:tell("Oops...the calliope isn't set up for this room. Tell the owner to check calliope.passing against the seats defined here."); elseif (player in this:riders()) if (!this.going) player:tell($string_utils:pronoun_sub(this.starting_msg)); this.location:announce($string_utils:pronoun_sub(this.ostarting_msg)); this.going = 1; fork (0) this:go_round(); endfork else player:tell("The calliope's running..."); endif else player:tell("You can't reach the controls. You've got to be on the ride. Sit on an animal!"); endif . stop halt: if (!(player in this:riders())) player:tell("You have to be on the merry-go-round to stop it."); else player:tell($string_utils:pronoun_sub(this.stopping_msg)); this.location:announce($string_utils:pronoun_sub(this.ostopping_msg)); this.going = 0; endif . PROPERTY DATA:       riding       unridden       music       slowing       starting_msg       ostarting_msg       stopping_msg       ostopping_msg       going       interval |