Object MetalCulvert "Metal Culvert" with initial [; give self general; ], description [; if (self has general) { give self ~general; print "You find yourself standing in"; } else { print "You are in"; } " a dark culvert of some kind. The curving walls are polished metal, antique with tarnish. To the south, the channel ends in a circular glass barrier; to the north, it opens out into light."; ], n_to [ ix; print "The light grows brighter as you walk up the culvert....^"; ix = child(easel); switch (ix) { palette: return ArtPalette; mountainpainting: return ArtMountain; desertpainting: return ArtDesert; nothing: if (artshadow in ArtEmpty) remove artshadow; return ArtEmpty; default: if (artshadow notin ArtEmpty) move artshadow to ArtEmpty; artshadow.number = ix; return ArtEmpty; } ], s_to "The glass circle fills the culvert completely to the south. You cannot pass.", cant_go "The culvert runs from south to north.", coredir "very, very far away", has ~general; WallObject -> culvertwall with name 'floor' 'ceiling' 'curved' 'metal' 'tarnish' 'patina', short_name "curved metal wall", description "The floor, walls, and ceiling of this channel are a single cylindrical metal surface. You cannot tell of what metal it is made, but it has a dark, aged patina.", before [; Touch, Rub: "The metal shines softly where you touch it."; ]; SceneryObject -> culvertroom with name 'channel' 'culvert'; Object -> culvertlens "glass barrier" with name 'lens' 'circle' 'circular' 'glass' 'barrier', description "To the south, a glass barrier completely blocks the channel. You cannot see well beyond it; there are only distorted smears of color.", before [; Search: "You try to peer through the glass barrier, but it distorts your view. You see only indistinct smears of color."; Touch: "The glass barrier feels slightly curved."; Rub: "It is already perfectly clean."; Push, Pull, Take, Turn: "The glass barrier is immovable."; Enter: <>; ], has scenery; ! ---- Class ArtRoom with before [; Go: if (noun == n_obj or s_obj or e_obj or w_obj or ne_obj or se_obj or nw_obj or sw_obj) { print "The world seems to smear out of shape as you move. After a few steps, you see nothing but running colors....^"; TransportEffect(); PlayerTo(Atelier); rtrue; } ], coredir "very, very far away"; ! ---- ArtRoom ArtEmpty "Platform in the Void" with description "You stand on a narrow wooden platform, which is suspended somehow in a vast, incomprehensible space. The platform stretches to the east and west. The space beyond is not dark, nor is it light... you are unable to focus upon it.", d_to [; <>; ], before [; Jump: <>; ]; FloorObject -> artemptyfloor with short_name "platform", name 'wood' 'wooden' 'platform', description "The platform is hardly wider than you are tall. Curiously, you feel no fear of falling from it. To fall would require space, distance...."; CeilingObject -> artemptyvoid with name 'void' 'space' 'vast' 'incomprehensible', short_name "void", description "You are suspended in a void which lacks perceptible qualities.", before [; Examine: rfalse; Search: "You sense... no. That's absurd."; Enter: "You do not have the nerve to cast yourself into the void."; default: "The void is impalpable."; ], has scenery; Object artshadow "shadow" with name 'shadow' 'shape' 'indistinct' 'outline', short_name [; print "shadow of ", (a) self.number; rtrue; ], parse_name [ wd num obj extra; extra = 0; obj = self.number; if (~~obj) obj = self; if (obj ofclass MaskClass) extra = obj.name_wd; wd = NextWord(); while (WordInProperty(wd, self, name) || WordInProperty(wd, obj, name) || (extra ~= 0 && wd == extra)) { num++; wd = NextWord(); } return num; ], initial [; print "Somewhere beyond, huge and tenebrous, you see"; if (self.number ofclass MaskClass) " the outline of an indistinct ", (string) self.number.name_str, " face."; " an indistinct shape. It might be ", (a) self.number, "."; ], number 0, before [; Examine: rfalse; default: "The shadow is lost in the void."; ], has static; ! ---- ArtRoom ArtPalette with initial [; self.number = 1; self.count = 0; ], short_name [; print "Sea of "; CapColorString(self.number); rtrue; ], number 0, count 0, description [; print "You are in the midst of a choppy, heaving sea. Impossibly, you stand balanced upon the "; self.roomtext(); " waves. You can see no land in any direction."; ], d_to [; <>; ], before [; Swim: <>; ], after [; Drop: print_ret (The) noun, " now rests on the surface of the sea."; ], roomtext [; switch (self.number) { 1: print "milk-white"; 2: print "deep-gold"; 3: print "blood-red"; 4: print "turbid-brown"; 5: print "icy-green"; 6: print "twilight-blue"; 7: print "ink-black"; } ], each_turn [ ix; if (self.number >= 7) return; self.count = self.count+1; switch (self.count) { 0, 1, 2: ix = 0; 3: ix = 20; 4: ix = 50; 5: ix = 70; default: ix = 90; } if (random(101) < ix) { self.count = 2; self.number = self.number+1; print "^With a "; print (string) random("heave", "crash", "sigh", "splash", "roar"); print ", the sea turns "; self.roomtext(); print ".^"; } ], hinto HintoArtifactArea; FloorObject -> artpalettefloor with name 'sea' 'wave' 'waves' 'ocean' 'water', short_name [; ColorString(ArtPalette.number); print " sea"; rtrue; ], parse_name [ wd num ix; ix = ArtPalette.number; wd = NextWord(); while (WordInProperty(wd, self, name) || (MatchColorWord(ix, wd))) { num++; wd = NextWord(); } return num; ], description [; print "The "; ArtPalette.roomtext(); " waves appear to roll on for ever."; ], before [; Search: "You cannot see beneath the waves."; Touch, Push: "The waves resist the pressure of your fingers."; Enter: "You'd actually rather remain on top of the waves."; Taste, Drink: "You can't even break the surface, much less get any to your mouth."; Receive: switch (noun) { warmberries: <>; coolberries: <>; quill: "The liquid is unwilling to wet your pen's nib."; } rfalse; BerryBurn: print "A puff of "; ArtPalette.roomtext(); " steam roils up."; BerryFreeze: print "A patch of liquid turns to "; ArtPalette.roomtext(); " ice and (oddly) sinks out of sight."; ]; Artifact -> knottedstring "knotted string" with name 'string' 'tangle' 'small' 'twine' 'knotted' 'knot' 'knots', initial "A small tangle of string floats on the surface nearby.", description [; if (self notin player) "It looks like a small tangle of knotted twine."; print "You draw the string out in your hands. It's less than a foot of crude, hairy twine, and it's wracked with knots"; if (self hasnt general) { give self general; print ".^^But strange -- each knot seems to have a different shape. If they are letters, as they might be... you laboriously spell out the word PORTRAIT, knotted over and over down the string"; } else { print ". The knots spell out the word PORTRAIT, knotted over and over down the string"; } "."; ], before [; Pull: "The knots are as tight as they're going to get."; Touch: "The twine is a thick, frayed length."; Untie: "You work at the knots for a few moments, but they're tight as carved wood."; Tie: "The twine isn't going to get any more tied than it is."; ], scaleweight 11, has ~general; ! ---- ArtRoom ArtMountain "Mountain Pool" with initial [; WitnessMask(distantscopemask.number); if (distantscopemask in mountainpainting) { remove distantscopemask; } if (artmtnice in self) { remove artmtnice; move artmtnpool to self; } ], description [; print "Jagged mountains tear the skies in every direction. They are unreal, impossible peaks -- knife-like spires of rock"; if (artmtnpool in self) { ". But in this sheltered nook, life flourishes. A small mossy pool, cool and shadowed with tiny fish, has gathered below a rock-spring."; } else { ". In this sheltered nook, soft moss surrounds a frozen pool."; } ], before [; Swim: if (artmtnpool in self) <>; ]; Object -> artmtnmountains "mountains" with name 'jagged' 'mountain' 'mountains' 'peak' 'peaks' 'spire' 'spires' 'tall' 'rock', description "The mountains are impossibly tall, twisted spires of rock.", before [; Examine: rfalse; default: "The mountains are high above you."; ] has scenery; Object -> artmtnpool "pool" with name 'spring' 'rock-spring' 'small' 'mossy' 'pool' 'water', description "At your feet is a mossy pool, basin for a small spring. The shapes of tiny fish move within the water.", before [; Search: "You peer into the pool, but see only a few shadowy fish."; Touch: "The water is icy cool."; Taste, Drink: "The water tastes clean as fresh-born stone."; Enter: "The pool isn't even deep enough for a satisfying wade."; Take: "You have nothing in which to carry water."; Receive: if (noun == quill) "You want your name writ in water? It won't be readable, sadly."; if (noun == torch && torch has light) { give torch ~light; "The torch hisses, instantly extinguished."; } "You can't think of a reason to get ", (thatorthose) noun, " wet."; BerryBurn: "You toss an orange berry into the pool. Then you jump back, for a huge cloud of steam boils up into your face.^^ The steam dissipates in a few moments. Fortunately for the fish, the pool is not much depleted."; BerryFreeze: remove self; move artmtnice to ArtMountain; "You toss a white berry into the pool.^^ With a crackle and hiss and a scream of tortured ice, the pool freezes over."; ], has scenery transparent; Object -> -> artmtnfish "tiny fish" with name 'tiny' 'fish' 'shape' 'shapes' 'shadow' 'shadowy' 'shadows', description "Tiny fish move in the shadows of the pool.", before [; Examine: rfalse; Take, Touch, Rub, Push, Pull, Turn, Taste: "The fish flit away from your touch."; BerryBurn, BerryFreeze: <<(action) artmtnpool>>; ], has pluralname scenery; Object -> artmtnmoss "moss" with name 'soft' 'green' 'moss' 'tuft' 'tufts', description "Around the pool, tufts of soft moss glint with moisture.", before [; Touch: "Soft and chill."; Take: "The moss clings to the rock."; ], has scenery; MaskClass -> brownmask with name_wd 'brown', name_str "brown", count 4, initial [; if (location == ArtMountain) print "On the shore of the pool is"; else print "Resting on the sand is"; " a ", (string) self.name_str, " paper mask."; ], description [; self.MaskClass::description(); "^The face shows steely regret."; ]; Object artmtnice "frozen pool" with name 'frozen' 'pool' 'ice' 'small' 'spring', description "The pool is covered with ice -- you cannot tell how deeply. Even the spring seems to be frozen.", before [; Search: "You cannot see into the ice."; Touch, Rub: "It is achingly cold."; Enter: "You certainly can't enter the pool now."; BerryBurn: remove self; move artmtnpool to ArtMountain; "You throw an orange berry down onto the ice. When the violent steam dissipates and the sound of shattering ice has faded, the pool is once again free and fluid."; ], has scenery; ! ---- ArtRoom ArtDesert "Red Desert" with initial [; if (distantscopemask in desertpainting) { remove distantscopemask; } ], description "A stark desert is spread in every direction. The harsh grit beneath your feet is littered with dusty stones, small and large. The sun is a red glare on the horizon, turning the world to strokes of scarlet, rust, and shadow.", hinto HintoArtifactArea; FloorObject -> artdesertfloor with name 'sand' 'grit' 'harsh' 'dust', short_name "sand", description "The sand is dry and abrasive.", before [; Take, Touch, Rub: "You trail some of the grit between your fingers. It's not pleasant."; Dig: "Although the surface is loose, the sand is packed hard beneath. Digging would be difficult."; ]; Object -> artdesertsun "sun" with name 'red' 'sun' 'glare' 'horizon', description "The rising sun is a hard red glare.", before [; Examine: rfalse; default: "The sun is very far away."; ], has scenery; Object -> artdesertstones "stones" with name 'stone' 'stones' 'rock' 'rocks' 'small' 'large' 'dusty', description "The dusty stones are unremarkable.", before [; Push, Pull: "You kick a few stones about."; Touch: "The stones are rough and jagged."; Take: if (parent(desertrock)) "One souvenir ought to be enough."; PronounNotice(desertrock); move desertrock to player; "You stoop and pick up a stone."; ], has scenery pluralname; Object -> whiteletter with name 'crumpled' 'white' 'wad' 'letter' 'credit' 'of', short_name [; print "crumpled white"; if (self hasnt moved) print " wad"; else print " letter"; rtrue; ], description [; if (self hasnt moved) "You'll have to pick it up to see what it is."; "~Letter in hand... sum of 5000... in reparation, military action of the month of... fields, property, six barrels of wine, one cow...~"; ], initial [; print "A crumpled white wad is lying here, half-buried in the"; if (location == ArtDesert) print " sand"; else print " moss"; "."; ], after [; Take: if (self hasnt moved) { give self moved; "You scoop up the crumpled wad, and try to smooth it out. It proves to be a letter of credit, or something similar."; } ]; Object desertrock "stone" with name 'small' 'rusty' 'brown' 'rusty-brown' 'rock' 'stone', description "It's a small rusty-brown rock -- utterly ordinary.", before [; Touch: "The stone's surface is rough, unweathered."; Taste: "You give the stone a contemplative lick. It has an alchemical tang, a sourness to it."; ], after [; if (self in ArtDesert) { remove self; "You toss the stone away."; } ], scaleweight 36, has expendable;