Place Balance_Room "Balance Room" with description "This seems to be the inside of a featureless white cube, forty feet on a side. The air is stale and there is no exit."; Object -> balance_meter "image of the scales" with name "image" "scales" "of" "pair", article "the", initial "The image of a pair of scales hangs high in the air. One pan is much lower than the other.", before [; "It's only an image."; ], has static; Object -> dusty_podium "dusty podium" with name "podium" "dusty" "cobwebs" "cobwebbed", initial "Far below the scales, in the centre of the ~floor~, is a predictably-shaped podium, but it is so dusty and cobwebbed that you can't see what it once was.", before [; Cast: if (the_spell_was == caskly_spell) "Nice try, but it is protected from enchantment."; "However dusty it is, the podium is still protected from casual enchantment."; Rub: remove self; move balance_key to Balance_Room; itobj = balance_key; "No substitute for old-fashioned hard work, sometimes, and after much patient (sneezy) scrubbing, the podium appears in its true white glory. Set into it are four sockets, arranged in a two by two square."; ], has static; Object balance_key "podium" with name "podium" "pedestal" "platform" "cubical", description "As predicted, it is cubical.", initial "Far below the scales, in the centre of the ~floor~, is a predictably-shaped podium. Set into it are four sockets, arranged in a two by two square.", has static supporter; Object -> sockets "two by two square" with name "square" "two" "by" "two", before [ i; if (action~=##Examine || number_filled==0) "You'll have to say which socket you mean. (Let's call them ~top left~, ~bottom right~ and so on.)"; objectloop (i in self) { print (The) i; if (child(i)==0) print " is empty.^"; else { print " contains ", (a) child(i), ".^"; } } rtrue; ], has static; Class Socket with name "socket", article "the", before [; Cast: "The sockets are proof against magic."; Examine: print (The) self, ", cubical and slightly more than four inches on a side, is decorated with ", (string) self.description; if (child(self) == nothing) "."; print_ret ", and contains ", (a) child(self), "."; Receive: if (~~(noun ofclass FeaturelessCube)) "The socket rejects that."; if (child(self) ~= nothing) "There is already a cube in that socket."; ], after [; LetGo: number_filled--; "With much struggle, you manage to pull the cube away."; Receive: number_filled++; if (number_filled==4) { if (snakes_cube in bl_socket && barker_cube in ul_socket && cave_cube in br_socket && eye_cube in ur_socket) { deadflag=2; score=score+5; "As you place the final cube into the sockets, you feel imbued with celestial wisdom (more so than usually). You find yourself growing to the height of the cube, so that you pull the balances back level by hand, and then you grow still further, out of the temple until it is but a cube in your hand, and you are a giant towering over the land. ^^Then, of course, you wake up, glumly realising it's time to go to your job at the new Borphee Laboratories and all those Wheatstone bridge experiments. But at least you can dream about the old days."; } "The sockets are all full now, but that doesn't mean anything's happened."; } "The cube is a predictably perfect fit in the socket."; ], has static container open; Socket -> bl_socket "bottom left socket" with name "bottom" "left" "serpent", description "a serpent"; Socket -> ul_socket "top left socket" with name "top" "left" "bazaar", description "a scene in a bazaar"; Socket -> br_socket "bottom right socket" with name "bottom" "right" "cave", description "an engraving of a rocky cave"; Socket -> ur_socket "top right socket" with name "top" "right" "eye", description "an eye";