home *** CD-ROM | disk | FTP | other *** search
/ hobbes.nmsu.edu 2008 / 2008-06-02_hobbes.nmsu.edu.zip / new / scummc-0.2.0-os2.zip / ScummC / examples / openquest / officeroom.scc < prev    next >
Encoding:
Text File  |  2008-04-06  |  23.0 KB  |  666 lines

  1. /* ScummC
  2.  * Copyright (C) 2007  Alban Bedel, Gerrit Karius
  3.  *
  4.  * This program is free software; you can redistribute it and/or
  5.  * modify it under the terms of the GNU General Public License
  6.  * as published by the Free Software Foundation; either version 2
  7.  * of the License, or (at your option) any later version.
  8.  
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
  17.  *
  18.  */
  19.  
  20. #include <scummVars6.s>
  21. #include "common.sch"
  22. #include "officeroom.sch"
  23. #include "secretroom.sch"
  24. #include "inventoryitems.sch"
  25. #include "dialog.sch"
  26. #include "verbs.sch"
  27. #include "actors.sch"
  28.  
  29. #include "zob_anim.sch"
  30. #include "zif_anim.sch"
  31. #include "carol_anim.sch"
  32.  
  33.  
  34. room OfficeRoom {
  35.  
  36.     image = "graphics/rooms/back01_merged.bmp";
  37.  
  38.     zplane = {
  39.         "graphics/rooms/back01_mask1.bmp",
  40.         "graphics/rooms/back01_mask2.bmp",
  41.         "graphics/rooms/back01_mask2.bmp"
  42.     };
  43.  
  44.     boxd = "graphics/rooms/back01.box";
  45.     trans = 0;
  46.  
  47.     voice beamedSnd = { "sounds/beamed.voc" };
  48.     voice phoneSnd = { "sounds/phone.voc" };
  49.     voice openCabinetSnd = { "sounds/open_cabinet.voc"  };
  50.     voice closeCabinetSnd = { "sounds/close_cabinet.voc" };
  51.     voice switchSnd = { "sounds/switch.voc" };
  52.     voice movePlantSnd = { "sounds/move_plant.voc" };
  53.     voice openDoorSnd = { "sounds/open_door.voc" };
  54.     voice openedDoorSnd = { "sounds/opened_door.voc" };
  55.  
  56.     // for the bullets behind the plant
  57.     bit hasSeenBullets, hasTriedToMovePlant, hasTalkedAboutPlant;
  58.     bit knowsCarol, askedPassageway;
  59.     bit initedGame;
  60.  
  61.     object bullets;
  62.     object plant;
  63.     object lightSwitch;
  64.     
  65.  
  66.     local script entry() {
  67.         int firstInit, quickInit;
  68.  
  69.         firstInit = !initedGame;
  70.         quickInit = firstInit && didOfficeIntro;
  71.  
  72.         unless(initedGame) {
  73.             initedGame = 1;
  74.             Verbs::setupVerbs();
  75.             Actors::setupActors();
  76.         } else {
  77.             putActorAt(VAR_EGO,296,110,OfficeRoom);
  78.             walkActorTo(VAR_EGO,250,110);
  79.             if( getObjectState( lightSwitch ) == 1 )
  80.                 setRoomRGBIntensity(143,123,119,0,255);
  81.             return;
  82.         }
  83.  
  84.         unless(didOfficeIntro) cutscene(2) {
  85.             didOfficeIntro = 1;
  86.             try {
  87.                 delay(150);
  88.                 putActorAt(ensignZob,170,110,OfficeRoom);
  89.                 putActorAt(commanderZif,200,120,OfficeRoom);
  90.                 dbgPrint("%V{beamedSnd}");
  91.                 animateActor( commanderZif, zif_anim_beam );
  92.                 animateActor( ensignZob, zob_anim_beam );
  93.                 delay(150);
  94.                 setCurrentActor(ensignZob);
  95.                 setActorStanding();
  96.                 actorSay(commanderZif, "Hmmm...");
  97.                 waitForMessage();
  98.                 Actors::setZifOnThePhone();
  99.                 dbgPrint("%V{phoneSnd}");
  100.                 animateActor( commanderZif, zif_anim_lookAround );
  101.                 delay(30);
  102.                 actorSay(commanderZif, "Commander's log, star date 432.1");
  103.                 waitForMessage();
  104.                 actorSay(commanderZif, "Arrival complete on the planet of mostly water.");
  105.                 waitForMessage();
  106.  
  107.                 setCurrentActor(carol);
  108.                 putActorAt(carol,76,98,OfficeRoom);
  109.                 delay(120);
  110.                 setActorStanding();
  111.                 actorSay(carol, "Are you done in here?");
  112.                 waitForMessage();
  113.                 
  114.                 actorFace(commanderZif, carol);
  115.                 actorFace(ensignZob, carol);
  116.                 delay(50);
  117.                 actorSay(commanderZif, "An indigenous lifeform...");
  118.                 waitForMessage();
  119.                 walkActorTo(ensignZob, 105, 105);
  120.                 waitForActor( ensignZob );
  121.                 actorSay(commanderZif, "Ensign Zob and I shall proceed to locate the artifact.");
  122.                 waitForMessage();
  123.                 actorSay(commanderZif, "We shall eliminate any resistance we encounter.");
  124.                 waitForMessage();
  125.                 walkActorTo(commanderZif, 160, 120);
  126.                 waitForActor( commanderZif );
  127.                 actorSay(commanderZif, "This appears to be a crude society.");
  128.                 waitForMessage();
  129.                 actorSay(commanderZif, "The defenses of the compound were negligible.");
  130.                 waitForMessage();
  131.                 actorSay(commanderZif, "I expect the relic to be in our possession shortly.");
  132.                 waitForMessage();
  133.                 Actors::setZifOffThePhone();
  134.                 actorSay(ensignZob, "What of this lifeform, Sir?");
  135.                 waitForMessage();
  136.                 actorSay(commanderZif, "Proceed with caution.");
  137.                 waitForMessage();
  138.                 actorSay(commanderZif, "That may be some kind of weapon.");
  139.                 waitForMessage();
  140.                 walkActorTo(ensignZob, 115, 120);
  141.                 waitForActor( ensignZob );
  142.                 actorSay(ensignZob, "I'll begin my search.");
  143.                 waitForMessage();
  144.                 actorSay(commanderZif, "Keep me updated, ensign.");
  145.                 waitForMessage();
  146.  
  147.             }
  148.             override {
  149.                 if(VAR_OVERRIDE) {
  150.                     actorSay(0xFF, ""); //stopTalking();
  151.                     putActorAt(carol,76,98,OfficeRoom);
  152.                     putActorAt(commanderZif,160,120,OfficeRoom);
  153.                     putActorAt(ensignZob,115,120,OfficeRoom);
  154.                     setActorStanding();
  155.                     animateActor( carol, carol_anim_stand );
  156.                     Actors::setZifOffThePhone();
  157.                 }
  158.             }
  159.         }
  160.         if(quickInit) {
  161.             putActorAt(carol,76,98,OfficeRoom);
  162.             putActorAt(commanderZif,160,120,OfficeRoom);
  163.             putActorAt(ensignZob,115,120,OfficeRoom);
  164.             animateActor( carol, carol_anim_stand );
  165.         }
  166.         if(firstInit) {
  167.             Verbs::showVerbs(1);
  168.             delay(getRandomNumberRange(20,60));
  169.             Actors::startRoaming(commanderZif,20,260,105,130);
  170.         }
  171.     }
  172.  
  173.     local script zobTalkToCarol() {
  174.             char* sentence;
  175.  
  176.             cutscene(1) {
  177.                 if( ! knowsCarol ) {
  178.                     egoSay("Speak, lifeform!");
  179.                     waitForMessage();
  180.                     egoSay("Is this translation matrix working?");
  181.                     waitForMessage();
  182.                     actorSay(carol, "You're that guy from accounts, right?");
  183.                     waitForMessage();
  184.                 }
  185.                 else {
  186.                     egoSay("Greetings, Carol.");
  187.                     waitForMessage();
  188.                     actorSay(carol, "You again?");
  189.                     waitForMessage();
  190.                 }
  191.             }
  192.             dialogLoop: while(1) {
  193.                 sentence = 0;
  194.                 unless(knowsCarol)
  195.                     sentence[0] = "What is your designation?";
  196.                 Dialog::dialogAdd(sentence);
  197.                 sentence = 0;
  198.                 unless(askedPassageway)
  199.                     sentence[0] = "What is located through that passageway?";
  200.                 Dialog::dialogAdd(sentence);
  201.                 sentence = 0;
  202.                 sentence[0] = "Stand aside, I need to pass!";
  203.                 Dialog::dialogAdd(sentence);
  204.                 sentence = 0;
  205.                 sentence[0] = "Look out behind you, a three-headed monkey!";
  206.                 Dialog::dialogAdd(sentence);
  207.                 sentence = 0;
  208.                 if( hasTriedToMovePlant && ! hasTalkedAboutPlant )
  209.                     sentence[0] = "May I move this plant?";
  210.                 Dialog::dialogAdd(sentence);
  211.                 sentence = 0;
  212.                 sentence[0] = "As you were.";
  213.                 Dialog::dialogAdd(sentence);
  214.                 sentence = 0;
  215.  
  216.                 Dialog::dialogStart(ZOB_DIM_COLOR,ZOB_COLOR);
  217.                 do breakScript() while(selectedSentence < 0);
  218.                 Dialog::dialogHide();
  219.                 cutscene() {
  220.                     sentence = dialogList[selectedSentence];
  221.                     egoSay("%s{sentence}");
  222.                     waitForMessage();
  223.                     switch(selectedSentence) {
  224.                     case 0:
  225.                         actorSay(carol,"What you on about?");
  226.                         waitForMessage();
  227.                         egoSay("How are you addressed by a superior officer?");
  228.                         waitForMessage();
  229.                         actorSay(carol,"Carol.");
  230.                         waitForMessage();
  231.                         egoSay("Greetings, Carol.");
  232.                         waitForMessage();
  233.                         setObjectName(actorObject[carol],"Carol");
  234.                         knowsCarol = 1;
  235.                         setCurrentActor(VAR_EGO);
  236.                         break;
  237.                     case 1:
  238.                         actorSay(carol,"Err, reception, canteen...");
  239.                         waitForMessage();
  240.                         egoSay("Any stolen relics within those realms?");
  241.                         waitForMessage();
  242.                         actorSay(carol,"Do you mean that new tea maker they installed?");
  243.                         waitForMessage();
  244.                         egoSay("No.");
  245.                         waitForMessage();
  246.                         actorSay(carol,"Dunno then.");
  247.                         waitForMessage();
  248.                         askedPassageway = 1;
  249.                         break;
  250.                     case 2:
  251.                         actorSay(carol,"I just cleaned down there, you'll get the floor dirty.");
  252.                         waitForMessage();
  253.                         egoSay("In which case I shall remain here.");
  254.                         waitForMessage();
  255.                         break;
  256.                     case 3:
  257.                         actorSay(carol,"Yeah, that's Terry.");
  258.                         waitForMessage();
  259.                         actorSay(carol,"He works in HR.");
  260.                         waitForMessage();
  261.                         break;
  262.                     case 5:
  263.                         break;
  264.                     case 4:
  265.                         actorSay(carol,"I haven't cleaned down there yet.");
  266.                         waitForMessage();
  267.                         egoSay("Then by moving the plant I am providing assistance.");
  268.                         waitForMessage();
  269.                         actorSay(carol,"Oh yeah, go on then.");
  270.                         waitForMessage();
  271.                         hasTalkedAboutPlant = 1;
  272.                         break;
  273.                     }
  274.                     waitForMessage();
  275.                 }
  276.                 Dialog::dialogClear(1);
  277.                 if(selectedSentence == 5) break dialogLoop;
  278.             }
  279.             Dialog::dialogEnd();
  280.  
  281.     }
  282.  
  283.  
  284.     object cabinetDrawer {
  285.         x = 128;
  286.         y = 72;
  287.         dir = NORTH;
  288.         name = "cabinet";
  289.         class = { Openable };
  290.         states = { 
  291.             { 30, 16, "graphics/background_items/drawer_open.bmp", { "", "" } }
  292.         };
  293.         state = 0;
  294.  
  295.         verb(int vrb,int objA, int objB) {
  296.  
  297.         case LookAt:
  298.             unless(getObjectState(cabinetDrawer)) {
  299.                 egoSay("Some kind of containing vessel for multiple instances of parchment.");
  300.                 return;
  301.             }
  302.             // Fallback on pick up when the drawer is open
  303.         case PickUp:
  304.             unless(getObjectState(cabinetDrawer)) {
  305.                 ResRoom::defaultAction(vrb,objA,objB);
  306.                 return;
  307.             }
  308.             if(getObjectOwner(InventoryItems::gun) == 0xF) {
  309.                 cutscene(0) {
  310.                     egoSay("I'll look in here I think.");
  311.                     waitForMessage();
  312.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  313.                     delay(20);
  314.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  315.                     delay(20);
  316.                     egoSay("There appears to be a small sidearm in this container.");
  317.                     pickupObject( InventoryItems::gun, InventoryItems );
  318.                     waitForMessage();
  319.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  320.                     delay(20);
  321.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  322.                     delay(20);
  323.                     egoSay("And a plastic card containing some kind of circuitry.");
  324.                     pickupObject( InventoryItems::card, InventoryItems );
  325.                 }
  326.             }
  327.             else
  328.                 egoSay("Nothing else in here.");
  329.             return;
  330.         case Open:
  331.             unless(getObjectState(cabinetDrawer))
  332.                 dbgPrint("%V{openCabinetSnd}");
  333.             else
  334.                 dbgPrint("%V{closeCabinetSnd}");
  335.             ResRoom::defaultAction(vrb,objA,objB);
  336.             return;
  337.         }
  338.     }
  339.  
  340.  
  341.     script setTalkedAboutPlant() {
  342.         hasTalkedAboutPlant = 1;
  343.     }
  344.  
  345.     // The bullets must be BEFORE the plant to be displayed above it.
  346.     object bullets {
  347.         x = 112;
  348.         y = 80;
  349.         dir = EAST;
  350.         name = "ammunition";
  351.         class = { Pickable };
  352.         states = {
  353.             { -8, 16, "graphics/background_items/bullets.bmp", { "", "" } }
  354.         };
  355.         state = 1;
  356.         trans = 0;
  357.         // This is object is inexistant as long as the plant object
  358.         // is not in state 2.
  359.         parent = plant;
  360.         parent_state = 2;
  361.  
  362.         verb(int vrb,int objA, int objB) {
  363.         case LookAt:
  364.             egoSay("A small box of projectiles.");
  365.             return;
  366.         case Preposition:
  367.             if(vrb == Give)
  368.                 sntcPrepo[0] = "to";
  369.             else
  370.                 sntcPrepo[0] = "with";
  371.             return;
  372.         case InventoryObject:
  373.             return InventoryItems::bullets;
  374.         }
  375.     }
  376.  
  377.     
  378.     object plant {
  379.         x = 104;
  380.         y = 48;
  381.         dir = EAST;
  382.         name = "plant";
  383.         states = { 
  384.             { 0, 48, "graphics/background_items/plant_unmoved.bmp",
  385.               { "", "graphics/background_items/plant_mask2.bmp",
  386.                 "graphics/background_items/plant_unmoved_mask3.bmp"} },
  387.             { 0, 48, "graphics/background_items/plant_moved.bmp",
  388.               { "", "graphics/background_items/plant_mask2.bmp",
  389.                 "graphics/background_items/plant_moved_mask3.bmp"} }
  390.         };
  391.         state = 1;
  392.  
  393.         verb(int vrb,int objA, int objB) {
  394.  
  395.         case LookAt:
  396.             if( ! hasSeenBullets ) {
  397.                 hasSeenBullets = 1;
  398.                 egoSay( "There is a small object behind this plant beyond reach." );
  399.             }
  400.             else
  401.                 egoSay( "This plant appears to be undergoing photosynthesis." );
  402.             return;
  403.         case Move:
  404.             if( ! hasSeenBullets ) {
  405.                 egoSay( "Moving this would accomplish nothing." );
  406.                 return;
  407.             }
  408.             if( ! hasTalkedAboutPlant ) {
  409.                 cutscene(0) {
  410.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  411.                     delay(20);
  412.                     actorSay( carol, "Hey, I haven't cleaned there yet." );
  413.                     hasTriedToMovePlant = 1;
  414.                     waitForMessage();
  415.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  416.                     delay(30);
  417.                 }
  418.                 return;
  419.             }
  420.             if( getObjectState( plant ) == 1 ) {
  421.                 cutscene(0) {
  422.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  423.                     dbgPrint("%V{movePlantSnd}");
  424.                     delay(20);
  425.                     setObjectState( plant, 2 );
  426.                     delay(30);
  427.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  428.                     delay(30);
  429.                 }
  430.                 egoSay( "There is a small box down here." );
  431.             }
  432.             else
  433.                 egoSay("It's fine over there.");
  434.             return;
  435.         }
  436.     }
  437.  
  438.     object carolObj {
  439.         name = "Indigenous lifeform";
  440.         verb(int vrb,int objA,int objB) {
  441.         case TalkTo:
  442.             zobTalkToCarol();
  443.             return;
  444.         case LookAt:
  445.             if( ! knowsCarol ) {
  446.                 egoSay("A large carbon based mammal, it seems.");
  447.                 waitForMessage();
  448.             }
  449.             else {
  450.                 egoSay("It is Carol, one of the local lifeforms.");
  451.                 waitForMessage();
  452.             }
  453.             return;
  454.         case Smell:
  455.             egoSay("This creature has an overwhelming pungent smell.");
  456.             return;
  457.         case Move:
  458.             egoSay("The lifeform is surprisingly sturdy, I don't believe I can use force.");
  459.             return;
  460.         }
  461.  
  462.     }
  463.  
  464.     script setTalkedAboutPlate() {
  465.         hasTalkedAboutPlate = 1;
  466.     }
  467.  
  468.  
  469.     object plate {
  470.         x = 248;
  471.         y = 64;
  472.         w = 8;
  473.         h = 16;
  474.         hs_x = -14;
  475.         hs_y = 30;
  476.         name = "plate";
  477.         dir = EAST;
  478.  
  479.         verb(int vrb, int objA, int objB) {
  480.         int i;
  481.         case LookAt:
  482.             egoSay("It appears to be connected to the door mechanism.");
  483.             return;
  484.         case Smell:
  485.             hasSmelledPlate = 1;
  486.             egoSay("I can smell the residue left by the indigenous lifeforms.");
  487.             waitForMessage();
  488.             egoSay("It must be some kind of pressure plate.");
  489.             return;
  490.         case Move:
  491.         case Use:
  492.             if( getObjectState( exitToSecretRoom ) == 7 ) {
  493.                 egoSay("The door is already open.");
  494.                 return;
  495.             }
  496.             if( hasTalkedAboutPlate ) {
  497.                 Actors::pauseRoaming(commanderZif);
  498.                 cutscene(2) {
  499.                     try {
  500.                         walkActorTo(commanderZif, 267, 116);
  501.                         waitForActor( commanderZif );
  502.                         actorSay(commanderZif, "I'll operate the one over here.");
  503.                         waitForMessage();
  504.                         delay( 20 );
  505.                         animateActor(VAR_EGO, zob_anim_raiseArm);
  506.                         animateActor(commanderZif, zif_anim_raiseArm);
  507.                         delay(30);
  508.                         dbgPrint("%V{openDoorSnd}");
  509.                         for(i = 2 ; i < 8 ; i++) {
  510.                             delay( 10 );
  511.                             setObjectState( exitToSecretRoom, i );
  512.                         }
  513.                         dbgPrint("%V{openedDoorSnd}");
  514.                         animateActor(VAR_EGO, zob_anim_lowerArm);
  515.                         animateActor(commanderZif, zif_anim_lowerArm);
  516.                         delay(30);
  517.                         actorSay(commanderZif, "Continue your investigation.");
  518.                         waitForMessage();
  519.                         walkActorTo(commanderZif, 200, 120);
  520.                     }
  521.                     override {
  522.                         if(VAR_OVERRIDE) {
  523.                             actorSay(0xFF, ""); //stopTalking();
  524.                             putActorAt(commanderZif, 200, 120, OfficeRoom);
  525.                             setObjectState( exitToSecretRoom, 7 );
  526.                         }
  527.                     }
  528.                 }
  529.                 Actors::resumeRoaming(commanderZif);
  530.                 return;
  531.             }
  532.             if( hasSmelledPlate ) {
  533.                 cutscene(2) {
  534.                     hasPressedPlate = 1;
  535.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  536.                     delay(30);
  537.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  538.                     delay(30);
  539.                 }
  540.                 egoSay("Nothing happened.");
  541.                 waitForMessage();
  542.                 egoSay("The two plates appear to be connected.");
  543.                 return;
  544.             }
  545.             egoSay("I don't know how to use that device.");
  546.             return;
  547.         }
  548.  
  549.     }
  550.  
  551.  
  552.     object exitToSecretRoom {
  553.         x = 248;
  554.         y = 32;
  555.         name = "secret room";
  556.         dir = EAST;
  557.         states = {
  558.             { 8, 78, "graphics/door/door_closed.bmp" },
  559.             { 8, 78, "graphics/door/door_opening_01.bmp" },
  560.             { 8, 78, "graphics/door/door_opening_02.bmp" },
  561.             { 8, 78, "graphics/door/door_opening_03.bmp" },
  562.             { 8, 78, "graphics/door/door_opening_04.bmp" },
  563.             { 8, 78, "graphics/door/door_opening_05.bmp" },
  564.             { 8, 78, "graphics/door/door_open.bmp" }
  565.         };
  566.         state = 1;
  567.  
  568.         verb(int vrb, int objA, int objB) {
  569.         case WalkTo:
  570.             if( getObjectState( exitToSecretRoom ) == 1 ) {
  571.                 egoSay( "It's closed." );
  572.                 return;
  573.             }
  574.             walkActorTo(VAR_EGO,290,110);
  575.             waitForActor(VAR_EGO);
  576.             screenEffect(0x0083);
  577.             startRoom(SecretRoom);
  578.             return;
  579.         }
  580.  
  581.     }
  582.  
  583.  
  584.     object lightSwitch {
  585.         x    = 34;
  586.         y    = 71;
  587.         w    = 7;
  588.         h    = 9;
  589.         name = "light switch";
  590.         dir  = WEST;
  591.         hs_x = 20;
  592.         hs_y = 40;
  593.         verb(int vrb, int objA, int objB) {
  594.         case LookAt:
  595.             egoSay("Some kind of power distribution grid.");
  596.             return;
  597.         case Use:
  598.         case Move:
  599.             unless(getObjectState(lightSwitch)) {
  600.                 cutscene(0) {
  601.                     egoSay("I'll turn this off.");
  602.                     waitForMessage();
  603.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  604.                     delay(20);
  605.                     dbgPrint("%V{switchSnd}");
  606.                     setRoomRGBIntensity(143,123,119,0,255);
  607.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  608.                     delay(20);
  609.                     setObjectState(lightSwitch,1);
  610.                 }
  611.             } else {
  612.                 cutscene(0) {
  613.                     egoSay("I'll turn this back on.");
  614.                     waitForMessage();
  615.                     animateActor(VAR_EGO, zob_anim_raiseArm);
  616.                     delay(20);
  617.                     dbgPrint("%V{switchSnd}");
  618.                     setRoomPalette(0);
  619.                     animateActor(VAR_EGO, zob_anim_lowerArm);
  620.                     delay(20);
  621.                     setObjectState(lightSwitch,0);
  622.                 }
  623.             }
  624.             return;
  625.         }
  626.     }
  627.  
  628.     object powerSocket {
  629.         x    = 220;
  630.         y    = 84;
  631.         w    = 11;
  632.         h    = 6;
  633.         name = "power socket";
  634.         dir  = NORTH;
  635.         hs_x = 5;
  636.         hs_y = 20;
  637.         verb(int vrb, int objA, int objB) {
  638.         case LookAt:
  639.             egoSay("Some kind of power distribution grid.");
  640.             return;
  641.         }
  642.     }
  643.  
  644.     object bulletinBoard {
  645.         x    = 65;
  646.         y    = 39;
  647.         w    = 14;
  648.         h    = 24;
  649.         name = "bulletin board";
  650.         dir  = WEST;
  651.         hs_x = 20;
  652.         hs_y = 46;
  653.         verb(int vrb, int objA, int objB) {
  654.         case LookAt:
  655.             egoSay("This parchment appears to contain some kind of glyphs.\w"
  656.                    "Most are directed to an individual called Memorandum.");
  657.             return;
  658.         case Smell:
  659.             egoSay("The substance fused to this parchment possesses "
  660.                    "an interesting aroma.");
  661.             return;
  662.         }
  663.     }
  664.  
  665. }
  666.