/////////////////////////////////////////////////////////////////////// /// /// /// Cloak of Darkness /// /// /// /// © Richard Bos, 2014 /// /// /// /// This code may be freely distributed, providing no changes are /// /// made to it and no money or other recompensation is charged. /// /// /// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// / INITIAL PART !State Cloak 1 !Prop Foyer Light !Prop Cloakroom Light !Prop Hook NoTake !Prop Message NoTake !Var ObjMax 8 !Possessions Foyer Player !Possessions Player Cloak !Possessions Cloakroom Hook !Possessions Bar Message !End /////////////////////////////////////////////////////////////////////// / STATIC PART /////////////////////////////////// / Preliminary section / !PreCommand PreProg !PostCommand PostProg !Welcome WelcProg !Direction B /Back. For Back command; best not to use in !Exits. !Direction N !Direction NE !Direction E !Direction SE !Direction S !Direction SW !Direction W !Direction NW !Direction U !Direction D !Direction IN !Direction OUT ////////////////// / Variables. !Variable Var0 !Variable Var1 !Variable Var2 !Variable Var3 !Variable ObjHeld !Variable ObjMax !Variable Score !Variable Turns !Variable TerseMode /0=normal, 1=brief, 2=verbose. ////////////////// / Special meanings. !Special AllSpec !Special InvSpec !Special MetaSpec !Special HandSpec /For waving etc. !Special MagicSpec /Magic words; for SayCmd etc. !Special OnOffSpec /To shunt Lamp On to On. !Special ReadSpec /Readable matter, objects as well as inscriptions !Special NorthSpec /To safely exit dark bar ////////////////// / Properties. ///////// / For objects !Property Invis 1 !Property Hiding 2 !Property NoTake 3 ///////// / For rooms !Property ShortDesc 1 !Property Disorient 2 ///////// / For both !Property Light 0 /////////////////////////////////// / Objects section / / First object must be the player. Why "Holding"? See InvCmd. !Object Player Holding Holding Holding !Object Hook MNull MNull MNull !Object Cloak CloakR CloakH CloakHook !Object Message MNull MNull MNull /////////////////////////////////// / Rooms section / !Room Foyer FoyerL FoyerS !Room Cloakroom ClkRmL ClkRmS !Room Bar BarL BarS /////////////////////////////////// / Exits section / !Exit Foyer N Foyer LeaveExit W Cloakroom S Bar DarkExit !Exit Cloakroom E Foyer !Exit Bar N Foyer !Instructions /////////////////////////////////// / Instructions section ////////////////// / Default routines WelcProg: printret WelcMess PreProg: skip unless M w1sp MetaSpec return skip unless M light return skip3 if M w1di add S Message I 1 print DarkAction return nextcomm skip unless M w1sp NorthSpec return add S Message I 2 print DarkMove return nextcomm PostProg: skip unless M w1sp MetaSpec return PostEnd: skip unless V TerseMode eq 1 /Terse: never long room descriptions. set ShortDesc (Player)R skip unless V TerseMode eq 2 /Verbose: always long descriptions. unset ShortDesc (Player)R add V Turns I 1 return //////////////// / Exit routines LeaveExit: printret LeaveMess DarkExit: skip2 if H (Cloak)O Player set Light Bar return unset Light Bar return ////////////////// / Command routines BlowCmd: ///////// Blow, Play skip2 unless M w2ob skip if H ()O Player printret NotHeld printret NothHappen ClimbCmd: ///////// Climb, either in a direction (default up) or an object. skip2 if M w2ex move player with dir U return skip unless M w2di return retry ignore request dir / So "Climb Down" becomes "Down" - and "Climb East" is "East"! printret ClimbCant CloseCmd: ///////// Close doors or objects. Can often share duties of Lock. skip if M w2ob return retry none cant skip if R ()R eq (Player)R printret NotHere printret OpenCant DropCmd: ///////// Drop object, all, or first (no object) skip if M w2ex /If no object given, take the first available. go DropFirst skip unless M w2sp AllSpec go DropAll skip if M w2ob /If trying to drop something not an object, printret NotHeld /they're certainly not carrying it. resolve Var0 ()O gosub DropSub skip unless V Var1 eq 3 printret NotHeld skip unless V Var1 eq 1 print OK /If Var1 eq 2, DropSub should say why to the player, so we print nothing. return DropFirst: resolve Var0 (Player)D /Find first carried object. skip unless V Var0 eq 0 /If nothing, bail out. printret DropNothing DropF1: gosub DropSub skip unless V Var1 eq 1 printret OK /If Var1 eq 2 (it can't be 3, of course), DropSub should report the /reason to the player, so we print nothing and skip to the next. If /all fail, we don't print anything more; just the "Can't Drop That" /message(s) should be enough. add V Var0 I 1536 resolve Var0 (Var0)O skip if V Var0 eq 0 go DropF1 return DropAll: ///////// Drop all possible objects. load V Var3 I 0 /Count of objects dropped. resolve Var0 (Player)D /Find first carried object. resolve Var0 (Var0)O DropA1: load V Var2 V Var0 /Next object from the current. We need this for add V Var2 I 1536 /the loop: a successful take modifies the tree. resolve Var2 (Var2)O gosub dropsub skip unless V Var1 eq 1 /If dropped, add to count. add V Var3 I 1 load V Var0 V Var2 /Try original next object, if there was one... skip if V Var0 eq 0 go DropA1 printret DropMult Var3 /...else report how many taken, and stop. ///////// Try to drop an object. / In: Var0 is the object to be dropped. / ObjHeld is the current nr. of objects carried. / Out: Var1 is 1 if dropped, 2 if not droppable, 3 if not carried. / Special rules for dropping objects should go here, so they trigger / even if trying to DROP ALL or just DROP. DropSub: skip2 if H (Var0)O Player load V Var1 I 3 return skip if R (Var0)O eq Cloak go DropNoCloak skip2 if S (Var0)O eq 0 load V Var1 I 2 printret DropWorn skip2 if R (Player)R eq Cloakroom load V Var1 I 2 printret DropCloakNo gosub ScoreCloak DropNoCloak: move (Var0)O with to (Player)R /Can drop, so do so. sub V ObjHeld I 1 load V Var1 I 1 return EatCmd: skip if M w2ob printret EatCant skip if H ()O Player printret NotHeld printret EatCant ExamCmd: skip if M light printret PitchDark skip unless M w2sp ReadSpec go ReadCmd skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere skip3 unless R ()O eq Hook skip unless H (Cloak)O Hook printret ExamHkCloak printret ExamHook skip unless R ()O eq Cloak printret ExamCloak printret ExamNo FeedCmd: skip if R ()R eq (Player)R printret NotHere printret NotAlive GiveCmd: skip if H ()O Player printret NotHeld printret GiveNoWant HangCmd: skip if H ()O Player printret NotHeld skip if R (Player)R eq Cloakroom printret HangNo move Cloak with to Hook sub V ObjHeld I 1 print HangCloak ScoreCloak: skip2 if S Cloakroom eq 1 load S Cloakroom I 1 add V Score I 1 /Also give full desc of the bar, because we might have been there /in the dark before, which would have set its ShortDesc. unset ShortDesc Bar return InsertCmd: skip if H ()O Player printret NotHeld printret InsertCant InvCmd: ///////// Inventory. load V Var0 I 0 skip2 if P Light Player /Ensure that there is always light to see load V Var0 I 1 /the player's own inventory by... set Light Player describe with Player skip unless V Var0 eq 1 /...and restore the status quo, if needed. unset Light Player skip if E (Player)D print NothMess return JumpCmd: ///////// Jump on the spot, in a direction, or over an object. skip if M w2ex /Else jump on the spot. printret JumpFun skip unless M w2di /Turn "Jump Up" into "Up" - and "Jump West" into "West"! return retry ignore request dir /From now on, we're jumping over something. If "something" is not an /object, presume it's some large bit of scenery, and say we can't. skip if M w2ob printret JumpCant /Of course, we can't jump over something that's in our hands, so... skip unless H ()O Player printret IsHeld skip if R ()R eq (Player)R printret NotHere printret JumpFun KnockCmd: ///////// Knock, on objects, or doors (=no object) skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere printret NothHappen LockCmd: ///////// Currently only doors. See also CloseCmd. skip if M w2ob return retry none cant skip if R ()R eq (Player)R printret NotHere printret LockNoLock LookCmd: ///////// Look, always long description. unset ShortDesc (Player)R return look NormalCmd: load V TerseMode I 0 printret NormalMess OpenCmd: ///////// Open doors or objects. Can often share duties of Unlock. skip if M w2ob return retry none cant skip if R ()R eq (Player)R printret NotHere printret OpenCant PullCmd: ///////// For doors, levers/switches, objects. skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere printret NothHappen PushCmd: ///////// For doors, levers/switches, objects. skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere printret NothHappen QuitCmd: skip if Q QuitAsk /So if no, bail out. printret OK QuitEnd: ///////// Also for involuntary end of game. load V Var0 I 0 gosub ScoreSub load V Var1 V Turns print ScoreDid skip unless Q QuitAgain return retry restart may any print QuitBye return retry finish may any ReadCmd: skip if M light printret PitchDark skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere skip if M w2sp ReadSpec printret ReadCant /The only readable thing in the game is the message, so... skip2 if S Message lt 2 print ReadBad go QuitEnd print ReadGood add V Score I 1 go QuitEnd RemoveCmd: skip if H ()O Player printret NotHeld skip4 unless R ()O eq Cloak skip if S Cloak eq 1 printret RemoveNW load S Cloak I 0 printret OK printret RemoveCant RubCmd: skip unless M w2sp HandSpec printret RubHands skip if M w2ob printret NothHappen skip if R ()R eq (Player)R printret NotHere printret NothHappen SavendCmd: skip if Q SavendAsk /So if no, bail out. printret OK return retry savend cant SayCmd: ///////// Say; Shout, Sing (for magic words) print SayOK skip if M w2sp MagicSpec return return retry ignore may any /If magic word, execute upon uttering. ScoreCmd: load V Var0 I 0 gosub ScoreSub load V Var1 V Turns printret ScoreWould ///////// Compute the player's total score. / We use this so that we can use both a variable Score (for things that / cannot be undone, such as killing the dragon) and context-dependent / extra points (for things that can, such as setting the temple switches / to the sacred total). / In: Var0 is the current bonus (for not dying, mainly). / Out: Var0 is the total score plus bonus. ScoreSub: add V Var0 V Score return ShoutCmd: ///////// Shout, with or without word /We'd prefer to be able to distinguish between "Shout" and "Shout booh", /but the system won't let us see the difference between "no word" and /"word I don't know". Using w2ex instead of w2sp would thus let the player /find out the entire vocabulary using "Shout " alone, which /is not good. Therefore, treat only magic words as special. skip if M w2sp MagicSpec printret ShoutOther /Without magic word, just give a noncommittal message. go SayCmd /With magic word, treat as (loud) utterance. SingCmd: skip unless M w2sp MagicSpec go SayCmd /For magic words, treat as (musical) utterance. printret SingMess /For anything else (including no word), flavour text. TakeCmd: ///////// Take object, all, inventory, or first (no object). skip if M w2ex /If no object given, take the first available. go TakeFirst skip unless M w2sp AllSpec go TakeAll skip unless M w2sp InvSpec /For "Take inventory", do "Inv". go InvCmd skip if M w2ob /If trying to take something not an object, printret TakeCant /Try taking this object skip if R (Player)R eq ()R printret NotHere skip unless R Player eq ()U /I.e., object is held by player printret TakeHeld resolve Var0 ()O gosub TakeSub skip unless V Var1 eq 2 printret TakeCant skip unless V Var1 eq 3 printret TakeFull printret OK TakeFirst: ///////// Take first available object. resolve Var0 (Player)R /Find first object in player's room. resolve Var0 (Var0)O TakeF1: skip unless V Var0 eq 0 printret TakeNothing gosub TakeSub skip unless V Var1 eq 1 printret OK skip unless V Var1 eq 3 printret TakeFull /Var0 was an actual object, but not takeable, so try next. add V Var0 I 1536 resolve Var0 (Var0)O go TakeF1 TakeAll: ///////// Take all possible objects. load V Var3 I 0 /Count of objects taken. resolve Var0 (Player)R /Find first object in player's room. resolve Var0 (Var0)O TakeA1: load V Var2 V Var0 /Next object from the current. We need this for add V Var2 I 1536 /the loop: a successful take modifies the tree. resolve Var2 (Var2)O gosub takesub skip2 unless V Var1 eq 3 /If hands full, stop here. print TakeMulF Var3 printret TakeFull skip unless V Var1 eq 1 /If taken, add to count. add V Var3 I 1 load V Var0 V Var2 /Try original next object, if there was one... skip if V Var0 eq 0 go TakeA1 printret TakeMult Var3 /...else report how many taken, and stop. ///////// Try to take an object. / In: Var0 is the object to be taken. / ObjHeld and ObjMax are the current and max nr. of objects carried. / Out: Var1 is 1 if taken, 2 if not takeable, 3 if hands full. / Special rules for taking objects should go here, so they trigger / even if trying to TAKE ALL or just TAKE. TakeSub: skip if R (Var0)O eq Player /Can't take yourself regardless of props. skip2 unless P NoTake (Var0)O /Can't take objects with NoTake prop. load V Var1 I 2 return load V Var1 V ObjMax sub V Var1 V ObjHeld skip2 if V Var1 gt 0 /If already max nr of objects held, can't take. load V Var1 I 3 return move (Var0)O with to Player /Can take, so do so. add V ObjHeld I 1 load V Var1 I 1 return TerseCmd: load V TerseMode I 1 printret TerseMess UnlockCmd: ///////// Currently only doors. See also OpenCmd. skip if M w2ob return retry none cant skip if R ()R eq (Player)R printret NotHere printret LockNoLock VerboseCmd: load V TerseMode I 2 printret VerboseMess WakeCmd: skip unless M w2ex skip unless M w2di /Recognise "Wake Up"; assume nobody tries "Wake East". printret WakeSelf skip if R ()R eq (Player)R printret NotHere printret NotAlive WashCmd: skip unless M w2ex skip unless M w2sp HandSpec printret WashHNoNeed skip2 unless M w2ob skip if R ()R eq (Player)R printret NotHere printret WashNoNeed WaveCmd: ///////// Wave object, or hands (= no object) skip unless M w2ex skip unless M w2sp HandSpec printret NothHappen skip if M w2ob /Certainly can't wave non-objects. return retry none cant skip if H ()O Player /Can't wave something we don't have. printret NotHeld printret NothHappen //////// In most games, wearable items are rare enough that we don't need //////// a "wearable" property, but can special-case them all. See also //////// RemoveCmd (of course) and DropSub (can't drop worn items). WearCmd: skip if H ()O Player printret NotHeld skip4 unless R ()O eq Cloak skip if S Cloak eq 0 printret WearAlready load S Cloak I 1 printret OK printret WearCant /////////////////////////////////// / Words section / !Words all none cant AllSpec arms none cant HandSpec 3 attack print KillNo may rec back return cant B 1 blow obey BlowCmd request rec brass object cant Hook break print BreakNo may rec brief obey TerseCmd cant MetaSpec burn print BreakNo may rec call obey SayCmd request any clean obey WashCmd may rec climb obey ClimbCmd may rec cloak object cant Cloak close obey CloseCmd request rec cry obey ShoutCmd may any cut print BreakNo may rec destroy print BreakNo may rec dig print DigNo cant doff obey RemoveCmd request obj don obey WearCmd request obj down move cant D 1 drink print DrinkNone may rec drop obey DropCmd may rec east move cant E 1 eat obey EatCmd request rec everything none cant AllSpec examine obey ExamCmd request rec 4 feed obey FeedCmd request obj fight print KillNo may rec flip print NothHappen may rec floor object cant Message ReadSpec frotz print FrotzMess may rec MagicSpec get obey TakeCmd may rec give obey GiveCmd request obj go ignore request dir hands none cant HandSpec 4 hang obey HangCmd request obj help print Help cant MetaSpec hit print KillNo may rec hook object cant Hook i obey InvCmd cant InvSpec insert obey InsertCmd request obj inventory obey InvCmd cant InvSpec 3 jump obey JumpCmd may rec kill print KillNo may rec kiss print KissObject may rec knock obey KnockCmd may rec lie print SitNo may dir light print FrotzMess may rec lock obey LockCmd request rec look obey LookCmd cant 1 me object cant Player message object cant Message ReadSpec move ignore request dir myself object cant Player ne move cant NE normal obey NormalCmd cant MetaSpec north move cant N NorthSpec 1 nw move cant NW off print NothHappen may rec OnOffSpec offer obey GiveCmd request obj on print NothHappen may rec OnOffSpec open obey OpenCmd request rec play obey BlowCmd request rec plugh print XyzzyMess cant MagicSpec pull obey PullCmd request rec push obey PushCmd request rec put obey DropCmd may rec quit obey QuitCmd cant MetaSpec read obey ReadCmd request rec remove obey RemoveCmd request obj rub obey RubCmd request rec save save cant MetaSpec savend obey SavendCmd cant MetaSpec sawdust object cant Message ReadSpec say obey SayCmd request any score obey ScoreCmd cant MetaSpec scream obey ShoutCmd may any se move cant SE search obey ExamCmd request rec shout obey ShoutCmd may any sing obey SingCmd may any sit print SitNo may dir smash print BreakNo may rec south move cant S 1 standard obey NormalCmd cant MetaSpec story print Story cant MetaSpec sw move cant SW swim print SwimDry may dir take obey TakeCmd may rec terse obey TerseCmd cant MetaSpec throw obey DropCmd request obj turn print NothHappen may rec unlock obey UnlockCmd request rec up move cant U 1 velvet object cant Cloak verbose obey VerboseCmd cant MetaSpec wait print OK cant wake obey WakeCmd may rec wash obey WashCmd may rec wave obey WaveCmd may rec wear obey WearCmd request obj west move cant W 1 yell obey ShoutCmd may any xyzzy print XyzzyMess cant MagicSpec zooge print XyzzyMess cant MagicSpec !MESSAGE MDummy0 /////////////////////////////////// / Messages section / / For some reason, the translator expects directives within the !MESSAGE / section, and only here, to be all-caps. Oh well. / ////////////////// Empty message, useful for switching. !MESSAGE MNull !MESSAGE MDummy1 ////////////////// "Standard" messages for general use. !MESSAGE WelcMess Welcome to Cloak of Darkness! This game is (c) Richard Bos 2014. Version 1.0. To get some help on how to play this game, enter HELP. To read the story of how and why you got here, enter STORY. !MESSAGE Help I shall be your eyes and ears: direct me with commands of one or two words. To move, give directions. e.g. N, NE, ..., W, NW, U, D, B(ack), although the latter may not work everywhere. Switches, lamps and the like can be controlled using only ON and OFF. Other useful words include TAKE, DROP, LOOK, INV, SCORE, SAVE and QUIT, plus BRIEF/TERSE, STANDARD/NORMAL and VERBOSE for room descriptions. There are also a few that you should discover for yourself. !MESSAGE Story Hurrying through the rainswept November night, you're glad to see the bright lights of the Opera House. It's surprising that there aren't more people about but, hey, what do you expect in a cheap demo game...? !MESSAGE Holding You are holding: !MESSAGE NothMess Nothing. !MESSAGE IsHeld But you're holding the @x33! !MESSAGE NotAlive You can't do that to something which isn't alive. !MESSAGE NotHeld You aren't holding that. !MESSAGE NotHere I can't see that around here. !MESSAGE NothHappen Nothing useful happens. !MESSAGE OK OK. !MESSAGE PitchDark You cannot see - it is pitch dark. !MESSAGE MDummy2 ////////////////// Messages for exits, pre- and pro-routines, etc. !MESSAGE DarkMove Blundering around in the dark isn't a good idea! !MESSAGE DarkAction In the dark? You could easily disturb something! !MESSAGE LeaveMess You've only just arrived, and besides, the weather outside seems to be getting worse. !MESSAGE MDummy3 ////////////////// Messages for specific commands !MESSAGE BreakNo Senseless vandalism is frowned upon in this game. !MESSAGE ClimbCant You can't climb that. !MESSAGE DigNo The ground here is too hard to dig into. !MESSAGE DrinkNone You have nothing to drink. !MESSAGE DropMult !SWITCH DropNothing DropMul1 DropMulN !MESSAGE DropMul1 You dropped one object. !MESSAGE DropMulN You dropped @x37 objects. !MESSAGE DropNothing You have nothing you can drop. !MESSAGE DropWorn You're still wearing the @x33! !MESSAGE DropCloakNo This isn't the best place to leave a smart cloak lying around. !MESSAGE EatCant You can't eat that. !MESSAGE ExamHook It's just a small brass hook, screwed to the wall. !MESSAGE ExamHkCloak It's just a small brass hook, with a cloak hanging on it. !MESSAGE ExamCloak A handsome cloak, of velvet trimmed with satin, and slightly spattered with raindrops. Its blackness is so deep that it almost seems to suck light from the room. !MESSAGE ExamNo I've already told you everything I can about that. !MESSAGE FrotzMess If only it were that easy... !MESSAGE GiveNoWant There is nobody around here who wants the @x33. !MESSAGE HangCloak You hang your cloak neatly on the brass hook. !MESSAGE HangNo There is nothing here you can conveniently hang that from. !MESSAGE InsertCant You can't insert the @x33 into anything around here to any good purpose. !MESSAGE JumpCant You can't jump over that! !MESSAGE JumpFun Are you having fun jumping about? !MESSAGE KillNo Senseless violence is frowned upon in this game. !MESSAGE KissObject What weird fetishes you have. !MESSAGE LockNoLock That doesn't even have a lock! !MESSAGE NormalMess OK - long room descriptions only on first visit from now on. !MESSAGE OpenCant That doesn't open or close. !MESSAGE QuitAsk Are you certain you want to quit? !MESSAGE QuitAgain Do you want to play again? !MESSAGE QuitBye Goodbye. !MESSAGE ReadCant There is nothing legible on that. !MESSAGE ReadBad The message has been carelessly trampled, making it difficult to read. You can just distinguish the words... You Have Lost! !MESSAGE ReadGood The message, neatly marked in the sawdust, reads... You Have Won! !MESSAGE RemoveCant You can't even wear that, let alone remove it! !MESSAGE RemoveNW You aren't wearing that! !MESSAGE RubHands Quite the pantomime villain, aren't you? !MESSAGE SavendAsk Are you certain you want to save and quit? !MESSAGE SayOK OK: "@x33!" !MESSAGE ScoreWould If you quit now you will have scored @x34 points out of 2, using @x35 turns. !MESSAGE ScoreDid You scored @x34 points out of 2 in @x35 turns. !MESSAGE ShoutOther You shout loudly, but the only result is a sore throat. !MESSAGE SingMess Your singing is atrocious. !MESSAGE SitNo This is no time to be off your feet! !MESSAGE SwimDry There is no water here to swim in. !MESSAGE TakeCant You can't take that. !MESSAGE TakeFull You can't carry anything more. !MESSAGE TakeHeld You're already holding that. !MESSAGE TakeMult !SWITCH TakeNothing TakeMul1 TakeMulN !MESSAGE TakeMulF !SWITCH MNull TakeMul1 TakeMulN !MESSAGE TakeMul1 You took one object. !MESSAGE TakeMulN You took @x37 objects. !MESSAGE TakeNothing There's nothing here you can easily take. !MESSAGE TerseMess OK - short room descriptions only from now on. !MESSAGE VerboseMess OK - long room descriptions only from now on. !MESSAGE WakeSelf I despair of you ever being more awake than you are right now. !MESSAGE WashHNoNeed You are as clean as you are likely to be during this game. !MESSAGE WashNoNeed That doesn't seem to need cleaning. !MESSAGE WearAlready You're already wearing that! !MESSAGE WearCant You can't wear that. !MESSAGE XyzzyMess I'm sorry, but that magic word has been retired due to overuse. !MESSAGE MDummy4 ////////////////// Room descriptions !MESSAGE FoyerL You are standing in a spacious hall, splendidly decorated in red and gold, with glittering chandeliers overhead. The entrance from the street is to the north, and there are doorways south and west. !MESSAGE FoyerS You are in the foyer of the Opera House. !MESSAGE ClkRmL The walls of this small room were clearly once lined with hooks, though now only one remains. The exit is a door to the east. !MESSAGE ClkRmS You are in the cloakroom. !MESSAGE BarL The bar, much rougher than you'd have guessed after the opulence of the foyer to the north, is completely empty. There seems to be some sort of message scrawled in the sawdust on the floor. !MESSAGE BarS You are in the foyer bar. !MESSAGE MDummy5 ////////////////// Object descriptions !MESSAGE CloakR A velvet cloak has been carelessly dumped on the floor here. !MESSAGE CloakH !SWITCH CloakCarried CloakWorn !MESSAGE CloakCarried A velvet cloak. !MESSAGE CloakWorn A velvet cloak (which you are wearing). !MESSAGE CloakHook A velvet cloak is hanging neatly from the hook. !END / Final section ///////////////////////////////////