Constant Story "INSERT TITLE HERE^"; Constant Headline "INSERT DESCRIPTION/COPYRIGHT HERE^"; Include "First"; Include "Middle"; ! Optional components: Include "footnote"; ! Include "scenery"; ! Include "nameable"; ! MAIN CODE GOES HERE Rooms Laboratory "Laboratory" has light, with name 'laboratory' 'lab', description "This room is remarkable for its non-descriptness. There is a single exit to the south.", dirs sdir Closet, startup [; move player to self; ]; Object -> workbench "workbench" has supporter hider static, with name 'workbench' 'bench' 'table', description "A sturdy table.", inside_description [; if (actor has under) "It's dusty down here."; ], allow_entry [; rtrue; ], respond [; LookOn: if (IndirectlyContains(self, actor) == under) "You'll have to get out from under the workbench first."; ], meddle [; if (noun == 0 || IndirectlyContains(self, actor) ~= under) rfalse; if (IndirectlyContains(self, noun) == upon || (second && IndirectlyContains(self, second) == upon)) "You'll have to get out from under the workbench first."; ]; Object -> -> beaker "beaker" has container transparent open upon, with name 'beaker' 'bottle', adjective 'glass', description "A glass bottle with a wide mouth.", points 5, respond_late_indirect [; Insert: if (noun == broom) Achieved(silly); ]; Object silly "finding a silly bug" with points 10; Footnotes broomnote "Like a broom, in other words."; Rooms Closet "Broom Closet" has light, with name 'closet', adjective 'broom', description "This is just a small, plain closet.", dirs [ d; if (d == ndir or outdir) return Laboratory; ], points 2; Object -> broom "broom" with short_name [; give self activedaemon; ], parse_name [ wd c fl; while ((wd = NextWord()) ~= 0) { if (wd == 'broom') { c++; fl = 1; } else if (wd == 'alien' && fl) { c++; give self general; } else break; } return c; ], description [; "It's broom-like.",(note) broomnote; ], meddle_early [; if (self has general) { Transmogrify(broom, broom_alien); give self ~activedaemon; give broom_alien activedaemon; print "(Lucky guess.)^"; } ], daemon [; if (TestScope(self) == 0) { Transmogrify(broom, broom_alien); give self ~activedaemon; give broom_alien activedaemon; } ]; Actors broom_alien "broom alien" has neuter, with name 'broom' 'alien', description "Weird.", allow_take [; rtrue; ], daemon [; if (self has general) { give self ~general; return; } give self general; if (self in workbench) self.perform(##Exit); if (self.location == player.location) return; if (FindPath(self.location, player.location, self)) self.perform(##Go, self.&path_moves-->0); ], messages [; ExitFromUpon: "^#A# hops off #o#."; ExitFromUnder: if (lm_o has transparent || IndirectlyContains(lm_o, player) == under) "^#A# skitters out from under #o#."; "^#A# appears from under #o#."; Go: if (lm_n == 5002) "^#A# hops into the room."; ]; Actors scientist "scientist" has activedaemon female, with location Laboratory, name 'scientist' 'woman', description "She looks like an ordinary scientist.", daemon [; if (random(2) == 1) { switch(random(2)) { 1: if (self in Laboratory) self.perform(##Go, sdir); else self.perform(##Go, ndir); 2: if (beaker in self) { if (self in Laboratory) self.perform(##PutOn, beaker, workbench); } else if (TestScope(scientist, beaker)) { if (IndirectlyContains(workbench, beaker) ~= under) { if (beaker in player) { MoveTo(beaker, scientist); "~What are you doing with that?~ the scientist exclaims, taking the beaker away."; } else self.perform(##Take, beaker); } else if (TestScope(scientist)) "The scientist looks around, scratching her head."; } } rtrue; } if (TestScope(self) == 0) rfalse; switch(random(5)) { 1: "^The scientist says, ~Hmmm.~"; 3: "^The scientist says, ~Aha!~"; } ]; Object -> coat "white coat" has clothing worn, with name 'coat', adjective 'white' 'lab', description "Very official."; Include "Last"; ! NEW GRAMMAR GOES HERE