!% -SD Constant Story "Eric The Power-Mad Dungeon Master"; Constant Headline "^^9:38pm on a Saturday in 1981. D&D night at Eric's^^"; Constant MAX_CARRIED 6; Constant MAX_SCORE 1000; global playerHealth=15; global playerMaxDmg=1; global playerAC=2; global playerEquipped="bare hands"; global bradEquipped="bare hands"; global joshEquipped="bare hands"; global roll; global joshHealth=13; global joshAC=2; global joshMaxDmg=1; global inConoe=0; global dealerChips=0; global playerChips=1; global bradHealth=13; global bradAC=2; global bradMaxDmg=1; global quadTurns=0; global dmg; Serial "000001"; Release 1; Include "Parser"; Object LibraryMessages ! Include between Parser and VerbLib with before [; Prompt: print "^> "; rtrue; ]; Include "VerbLib"; !Include "istring.h"; !========================================================================== ! GAME OBJECTS !========================================================================== ! classes !========================================================================== class NPC with life[; !Ask, Answer, Order, Tell: !print_ret "Just use T[ALK] [TO " , (the) self, "]."; ], has animate; class merch with sold 0, price 1, before[; take: if (self.sold==0){ print "Hey, Lightfingers McGee. Shoplifting is not okay."; return true; } buy: if (self.sold==0){ if (playerChips>=self.price){ playerChips=playerChips-self.price; self.sold=1; move self to player; print "You purchase the item."; print "^You now have ", playerChips, " chip"; if (playerChips>1){ print "s"; } print " left"; } else { print "^~Not enough cash? Visit my brother.~"; } return true; } ], after [; look: print "^The price tag says '", self.price, "' chips."; ], has ; !========================================================================== ! locations !========================================================================== Object loc1a "A clearing" with description "Large and ancient trees surround you in this perfectly circular clearing.^^Looking at the smudge on the map, I'm pretty sure you can head North or Southwest from here.^", n_to loc1b, sw_to loc1a2, has light; Object loc1a2 "Another, remarkably similar clearing" with description "^Okay, there's pretty much nothing here. It's another clearing just like the other one. Nothing interesting at all. Honestly, I'm not even sure why this is on the map. Sorry guys.", ne_to loc1a, has light; Object notamap "map" loc1a2 with description [; style fixed; print "^___________________________________"; print "^| %%%% ( mountain |"; print "^| | ( O<- caves |"; print "^| ( ( _______-----------|"; print "^| | ------ |"; print "^| | |"; print "^| r | |"; print "^| i ( Stuff |"; print "^| v | forrest & |"; print "^| e | whatnot |"; print "^| r ( |"; print "^| | x <-you're here|"; print "^|______|__________________________|"; style underline; print "^^Josh: Seriously, this is the most unusable map I've ever seen."; style roman; print "^What do you want so early in the game? There might be a better one later on."; style underline; print "^Josh: Is there?"; style roman; print "^Probably not."; ], name 'map', has ; Object loc1b "Grand Central Forrest" with initText 0, description [; print "From the trampled grass here, you can tell this is a heavy traffic area. This is no wonder since paths lead off in most directions from the spot where you now stand. Off to the West, you hear a subtle gurgling sound. To the East you can see the gates of a small town.^"; if (self.initText<1){ style underline; print "^Brad: Let's not go to Camelot. It is a silly place.^"; style roman; self.initText=1; } ], s_to loc1a, n_to loc1d, w_to loc1c, e_to loc1e, has light; Object loc1c "Big Dead Tree" with description "The trunk of a recently downed tree lies across this East/West path, stretching off into the misty tree tops North of your current position. There is a moderately loud swishing sound coming from the West.^", n_to loc1f, u_to loc1f, w_to loc1g, e_to loc1b, before[; Go: if ((noun==w_obj) || (noun==n_obj) || (noun==u_obj)){ if (monster1 in loc1c){ print "^I think the enormous monster standing in your way would have a problem with that.^"; return true; } } ], has light; Object loc1d "Another patch of grass and trees" with description "Um, this part of the map probably shouldn't be here. I was drawing over another map and I think I forgot to close up the other room. The path leads to the South.", s_to loc1b, has light; object oblig "obligatory object" loc1d with name 'object', description "In all of these sorts of games, you want to have an item in every playing space, right? I'm really good at this sort of thing.", has; Object loc1e "City Gates" with warningFlag 0, guardFlag 0, description [; style roman; print "^The sign on the gate reads: welcome to Ericton, a fine village."; style underline; print "^Josh: Ericton?"; style underline; print "^Brad: I think you misspelled it. Add an 'e' and move the 'i' to after the 'c'."; style roman; print "^The city itself lies to the East, the forest primeval to the West. A large and well-armed guard stands by, though you cannot be sure whether he's here to keep people out or in.^^"; ], w_to loc1b, e_to loc1h, before [; Go: if ((noun==w_obj) && (self.guardFlag==0) ){ print "The guard lays his enormous scimitar across your path. I don't think he wants you to go just yet."; return true; } Attack: if (self.warningFlag==0){ print "^Do not do that. He's, like, a fourth level Paladin or something. He's not killable. Believe me."; self.warningFlag=1; } else { print "^I warned you. I tried to stop you, but you never listen.^"; BannerPause(); print "^Wrath of the gods, blah blah blah. Lightning shooting down from the sky, yadda yadda. You get the idea.^"; deadFlag=1; } give: if ((hallpass in player) && (noun==hallpass)){ if (second==guard){ print "^The guard takes the pass and steps aside to allow safe passage."; self.guardFlag=1; remove hallpass; return true; } } show: if (( hallpass in player) && (noun==hallpass)){ if (second==guard){ print "^The guard takes the pass and steps aside to allow safe passage."; self.guardFlag=1; remove hallpass; return true; } } ], has light; NPC guard "big nasty guard" loc1e with description "He is big, burly, and looks like someone not to be messed with.", name 'guard' 'paladin', before[; Take: print "^While he appears to appreciate the bear hug, the gesture does not get you past the guard."; return true; ] has ; Object loc1h "West Side of Town" with description "Small shops and hut-like homes line the street to your North and South. To the west you can see a town square and a larger building just beyond.", w_to loc1e, e_to loc1i, n_to loc1h2, s_to loc1n, has light; object loc1h2 "Ruined House" with description "From the looks of it, the roof of this tiny home has been smashed in by a dozen small, unmovable, boulders that lie around it.^Given the weight of the stones, it would seem that they came from the sky or from the trees above you.", s_to loc1h, has light; object loc1n "Bert's House of Junk" with description "Bert's brother Ray stands behind the counter waiting for your order. Behind him are all sorts of great items for sale.", n_to loc1h, has light; merch lightStone "lightstone" loc1n with name 'lightstone' 'stone', price 4, description "This luminous rock brings light to dark areas, like a torch but without all the mess. Plus, it gives off a cool green glow. Price: 4 chips.", has light; merch kissposter "kiss poster" loc1n with name 'poster' 'kiss', price 1, description "The Demon, the Star Child, Space Ace, and the Cat all grace this circular design created to support the Rock And Roll All Over tour. Price: 4 chip.", has; merch feather "+2 feather of annoyance" loc1n with name 'feather', price 5, description "You may not be able to maim or kill with this item, but you're sure to annoy the snot out of them. A must have. Price: 5 chips", has; merch jarofair "jar of air" loc1n with description "Something you always need. Air, don't leave Ericton without it. Price: 2 chips.", name 'air' 'jar', price 2, has; merch flpy "floppy disk" loc1n with description "There's no telling what might be on this baby. 512 kilobytes of mystery. Is it formatted Apple or TRS-80? Who knows? You will once you purchase this fine item. Price: 10 chips", price 10, name 'floppy' 'disk', has; npc ray "Ray" loc1n with description "Ray looks exactly like you think someone named Ray should, in every way imaginable.", name 'ray' 'clerk', before[; ask: switch(random(4)){ 1: print "^Ray: ~You gonna buy somethin' or what?~"; 2: print "^Ray: ~I dunno. Ask my brother.~"; 3: print "^Ray: ~Hey, that sounds wonderful. I'm real happy for you over here.~"; 4: print "^Ray: ~Yeah, I've had an ingrown toenail for almost eight years.~"; } return true; attack: print "Unless he comes out from behind there, you won't be able to do that."; return true; ], has scenery; object loc1m "Ray's Classy Casino" with description "The rooms four walls are draped in sumptuous red velvet and oil lamps light up the room with a glitzy glow.^^Ray's brother Bert stands behind the only active gambling table, a primitive roulette wheel. There are four colors, purple, green, orange and white. You can try your luck by saying, for example, 'bet on orange.'", s_to loc1i, before[; Go: return false; Bet: print "^spinning ..."; bannerPause(); switch(random(4)){ 1: roll=purple; print "purple."; 2: roll=green; print "green."; 3: roll=orange; print "orange."; 4: roll=white; print "white."; } if (noun==roll){ if (dealerChips>=5){ print"^~Hey! This game is supposed to be rigged. You've gotta be cheating! Get out!~^^A great flash of light envelopes you and you end up outside."; MovePlayer(loc1i); } else { print "^You won a blue chip. Care to bet again?"; dealerChips=dealerChips+1; playerChips=playerChips+1; score=score+10; } } else{ if (playerChips>0){ print "^You lost a blue chip. Care to win it back?"; playerChips=playerChips-1; dealerChips=dealerChips-1; score=score-10; } else { print "~No deadbeats allowed in my place. We're a classy establishment.~^^A flash of light appears, tossing you out on the street. You have been injured."; playerHealth=playerHealth-1; if (playerHealth>0){ print "^Your health is now ", playerHealth; } else { deadFlag=1; } lookmode=0; MovePlayer(s_obj); lookmode=2; } } return true; ], has light; npc bert "Bert" loc1m with description "Bert's squat statue and plump face fly in the face of the Bert stereotype. He's the sort of guy with whom you feel comfortable losing money.", name 'bert' 'clerk', before[; ask: switch(random(4)){ 1: print "^Bert: ~You gonna bet or what?~"; 2: print "^Bert: ~I dunno. Ask my brother.~"; 3: print "^Bert: ~I am error, too.~"; 4: print "^Bert: ~If you want to move a mountain, bring a noisemaker.~"; } return true; attack: print "^Unless he comes out from behind there, you won't be able to do that."; return true; ], has ; object orange "orange" loc1m with name 'orange', has scenery; object green "green" loc1m with name 'green', has scenery; object purple "purple" loc1m with name 'purple', has scenery; object white "white" loc1m with name 'white', has scenery; object loc1l "La Trine" with description "With all the accomplishments of this advanced culture, indoor plumbing was not one of them. The path winds around to the Southwest.", sw_to loc1i, has; object yodeler "odd machine" loc1l with description "The label on the side of this odd contraption reads 'Yodeler 6000.' The on/off switch seems to be the only control.", isOn 0, boulderfalling 0, name 'machine' 'yodeler', before[; switchOn: if (self.isOn==0){ print "The hills are alive with the sound of high-pitched singing. The volume level is much higher than expected."; self.isOn=1; if (bigboulder in loc1u){ print "^The enormous boulder above you has begun to roll down the mountainside.^^You might want to get out of the way."; score=score+10; } } return true; switchOff: print "The Yodeler is already off."; return true; ], each_turn[; if (self.boulderfalling==1) { if (location==loc1s) { print "The boulder continues its quickening descent..."; bannerPause(); print "... and crushes you all."; bannerPause(); style underline; print "^Josh: That's stupid. We were supposed to get that boulder down."; style roman; print "^Well, I said you should probably move. You stared at it like a bunch of deer, what was I supposed to do?"; style underline; print "^Josh: You suck, Eric."; deadflag=1; } self.boulderfalling=0; move bigboulder to loc1s; } if (self.isOn==1){ self.isOn=0; print "^Just as suddenly as it began, the Yodeler fades out and switches itself off."; self.boulderfalling=1; } ], has switchable; Object loc1i "City Square" with description "You stop to admire the granite statue in the center of town and notice that the hut to your South is looks abandoned and desolate. To your North you hear strange pinging noises, like a group of wind-up toys are having a party.^^To the East you can see a large public service building in the distance and a path running behind it to the Southeast.", w_to loc1h, e_to loc1j, n_to loc1m, s_to loc1i2, se_to loc1l, has light; object statue "statue" loc1i with description [; style roman; print "Beneath the handsome visage of a young knight on horseback reads the following inscription:"; style underline; print "^^In honor of Tronin The Helpful who so loved Ericton that he gave his own life to appease the bloodthirsty dragon and thereby save the town for all times- or at least until another group of hapless morons happens upon the borders of our fair city."; style roman; ], name 'statue' 'monument', has scenery; Object loc1i2 "Leper's cabin" with initFlag, description [; style roman; print "The walls of this tiny cabin are covered in dried body fluids and the bare walls and floors indicate that this may be a hut for quarantining infectious people.^^Pray do not linger for there may be diseases in the air- or whatever. The only object of interest is a rickety bed in the center of the room."; if (self.initFlag==0){ self.initFlag=1; style underline; print "^Josh: was there such a thing as leprosy in middle earth? I don't think there was."; style underline; print "^Brad: This smells like another part of the map Eric added because he felt he had to."; style roman; print "^Another sass like that and everybody loses a hit point. I am not screwing around here, people.^"; } ], n_to loc1i, has light; object chamberPot "chamber pot" loc1i2 with name 'pot' 'chamberpot' 'bed pan' 'pan', description "After years of disuse, the chamber pot looks as good as it smells.", has ; object lepperbed "bed" loc1i2 with name 'bed', description [; print "The bed clothes are stained with sweat and far less pleasant bodily fluids."; if (pwnote in lepperbed) { print "^^As you lift the moth-eaten mattress, something falls to the floor."; move pwnote to loc1i2; } ], has scenery; object gridmap "crumpled wad of paper" loc1i2 with name 'paper' 'wad' 'crumpled', description "It appears to be an early outline for this module, covering plot outline and ideas for traps and ways to trick players into instant death. This would be helpful information, but since my handwriting is all but illegible you can read none of it.", has ; object pwnote "note" lepperbed with name 'note', description "~We're all sick of the tree-dwellers and their pranks,~ reads the note. ~So, tonight we make our move. To override the security, stand by the rope ladder and utter the ancient and magical password incantation: hellosexyrobot. Good luck.~", has ; object loc1j "City government building- lobby" with description "Soft lute music plays from an unseen source as you stand in the tranquil waiting room for Ericton's esteemed mayor. The door to his office lies to the North.", w_to loc1i, n_to loc1k, has light; npc secretary "secretary" loc1j with description "Reading a copy of Damsel Quarterly, the receptionist doesn't seem to notice your presence.", name 'secretary' 'receptionist' 'assistant', before[; ask: if (second=='dragon'){ print "^Secretary: ~Yes, it's wonderful to see young people stepping up to volunteer to stave off the dragon for a while. The town is eternally grateful- especially now that we're starting to run out of young people.~"; return true; } else { switch (random(3)){ 1: print "~Shhh~ she says without even looking at you."; 2: print "Secretary: ~The mayor is not taking any appointments today, but you can wait as long as you like.~"; 3: print "Secretary: ~Um, you're still here?.~"; } return true; } ], each_turn[; if (random(2)==1){ switch (random(3)){ 1: print "^Secretary: ~The mayor is far too busy to see you, but I bet you'll just barge in there like everyone else.~"; 2: print "^Secretary: ~I am error.~"; 3: print "^Secretary: ~Want to get out of town? Don't we all.~"; } } ], has ; object loc1k "Mayor's Office" with initFlag 0, description [; style roman; print "This finely appointed office belongs to Lord Bilarsen- vensen or something, Ericton's head man."; style underline; print "^Josh: Head man of Ericton, you say. He must be a busy guy."; style roman; if (self.initFlag==0){ print "^The mayor says: ~My people request your assistance. So, I send you on a quest. We just need you guys to head up to the cave of Kolhar and into the dungeon of something-or-other and retrieve the Stone of Enlightenment. It's really no big deal, guys. To agree to the quest, simply say 'yes' and you'll be on your way.~^^"; } ], s_to loc1j, before [; answer: if ((noun=='yes') || (noun=='\"yes\"')){ if (mayor in loc1k) { print "^Chuckling to himself, the mayor disappears in a flash or green light. As he does this, a slip of parchment falls to the floor."; remove mayor; move hallpass to loc1k; return true; } } else { print "^Try doing that again without quotes."; return true; } ], has light; NPC mayor "mayor" loc1k with description "This plump, well-dressed man appears to be happy to see you.", name 'mayor' 'bilar', before [; ask: if (second=='dragon'){ print "~^Um, I don't know what you're talking about. Dragon's aren't real. It's just a silly rouse to frighten the citizens and keep them in line.~"; return true; } else { if (second=='quest'){ print "~Oh, what are you worried about? With three of you, it will be a piece of cake.~"; return; } } attack: print "^Wow. That was really, really stupid.^^As you move to strike, Lord Bilar disappears in a flash of orange light. A slip of parchment with the words 'hall pass' scribed upon it also disintegrates. I'm guessing you're going to need that somewhere."; remove mayor; ], each_turn[; if (random(2)==1){ switch (random(4)){ 1: print "^Mayor: ~What are you waiting for? Just say 'yes' and the quest is yours.~"; 2: print "^Mayor: ~What is it going to take to get you in this quest today? I'll throw in clearcoat for free!~"; 3: print "^Mayor: ~If you're here to loot the place, you won't find much left. The economy hasn't been great since people started getting eaten by the- um, I mean they want a hero like you to save them.~"; 4: print "^Mayor: ~[burp] Have you been to Burt's House of Junk?~"; } } ], has ; object hallpass "official-looking bit of parchment" with description "On the yellowing scroll, carefully scribed in the tongue of the ancient ones is the following message: 'hall pass.'", name 'pass' 'hallpass' 'parchment' 'paper', has; object toy_horse "toy horse" loc1k with description "This miniature Shetland pony stands only one foot tall, but its beauty far outpaces its stature.", name 'horse' 'toy horse', has ; object toy_knight "toy knight" loc1k with description "This medieval action figure features movable legs as well as Hacking Action and Excalibur Grip.", name 'knight' 'toy knight' 'action figure' 'figure', has ; Object loc1f "Treetop Fortress- Rear Entry" with description [; style roman; print "^When that tree fell, it must have ripped open a wall of this elaborate treetop fortress."; style underline; print "^Brad: Like a tree house? You put a tree house in a D&D module?"; style roman; print "^Um, no. It's a treetop fortress like I said. If you'd just let me finish."; style underline; print "^Brad: By all means. Go ahead."; style roman; print "^From here you can walk back down the fallen tree to the South or venture through the cool suspended bridge to the Northeast.^^The place has a name, too. The sign on the West wall reads: Fort Awesome."; ], s_to loc1c, ne_to loc1o, has light; object loc1o "Brotherhood Room" with description "On the walls you see faces of the men who once lived here (and perhaps still do). A row of couches lines up around a fireplace where the brothers would spend hours drinking mead and watching the fire. Exits are to the Southwest and East.", sw_to loc1f, e_to loc1p, has light; object robe "toga robe" loc1o with name 'robe' 'toga', description "It would seem that someone has gone off on a streaking quest and left their hard-partying uniform behind. It isn't of much use, though. The fabric is very flimsy and cannot be repurposed.", has clothing; npc brotherSquid "Brother Squid" loc1o with name 'squid' 'brother', description "Brother Squid is slumped in a corner, sleeping off the previous night's festivities. The ladies of Chastity Tower never showed up for the grain alcohol informal and so the evening turned out to be a true festival of sausage.", before[; ask: print "[burp!]"; return true; ], each_turn[; if (random(2)){ switch(random(4)){ 1: print "^~Whooo! Gordo!~ shouts Brother Squid. ~Streak like the wind, Gordo! I love you, man!~"; 2: print "^Brother Squid says, ~So I says to the guy, I says... [hrmph!] zzzz~"; 3: print "^Brother Squid: ~NERDS!~"; 4: print "^Brother Squid: ~San Dimas High School football rules!~"; } } ] has ; object loc1p "Entry Hall" with treelock 1, description [; print "This finely decorated foyer is all that most visitors ever see of Fort Awesome during tours since it's the only part that isn't littered in mead bottles. From here the foyer leads to the West and Southeast. A sign on the wall appears to contains some instructions."; if (self.treelock==1){ print "A rolled-up ladder, which you presume would allow you to get to ground level, is disabled. This was intended to keep brothers from leaving parties too early or wandering through the woods."; } else { print "There is also a ladder leading to the ground."; } ], w_to loc1o, se_to loc1q, d_to loc1r, before [; go: if ((noun==d_obj) && (self.treelock==1)){ print "^The ladder is locked for security reasons. You'll have to find a way to unlock it first."; return true; } jump: print "^You all jump through the hole to your deaths. Very smart."; deadflag=1; answer: if (noun=='hellosexyrobot'){ if (self.treelock==1){ print "[rumbling]"; bannerPause(); print "^The ladder happily rolls down to the forrest floor below you."; score=score+10; self.treelock=0; return true; } else { print "^Saying it again won't lock the ladder or summon an attractive automaton. Sorry, no dice."; return true; } } ], has light; object laddersign "sign" loc1p with name 'sign' 'instructions', with description "^~ATTENTION, BROTHERS: DUDES HAVE BEEN FORGETTING THE PASSWORD, MAKING UP NEW ONES AND THEN FORGETTING THEM. THAT HAS TO STOP.^^TO GET UP OR DOWN, JUST SAY THE PASSWORD OUT LOUD (WITHOUT QUOTES). DON'T ASK SQUID, HE CAN NEVER REMEMBER IT.^^WHATEVER HAPPENS, WE CANNOT LET THE PASSWORD GET INTO THE HANDS OF THE TOWNIES BECAUSE THEY WILL TOTALLY BUST US FOR THE HOUSE-CRUSHING INCIDENT.~", has scenery; object loc1q "Lookout Tower" with description "From your vantage point one hundred feet in the air, you can see a small village below to the South. If you want to go there, I would recommend getting down first since just walking that way would break your neck. Just below you is a ruined house, apparently crushed by the rocks and boulders tossed from this ledge. It seems that the brothers of Fort Awesome liked to have their fun.", nw_to loc1p, s_to [; print "Didn't I just say ~Going South leads to death~ or something like that?"; deadFlag=1; ], has light; object boulder1 "boulder" loc1q with name 'boulder' 'rock', description "The heavy, river-worn stone is as large as an ox, so you naturally assume that the brothers are quite strong.", before[; take: print "^It's far too heavy to move. Were you intending to drop another rock on the demolished house? That's terrible."; return true; ], has; Object loc1g "Southern Stream Inlet" with description [; if (player in canoe){ print "To the east is a small inlet that leads off into the forrest beyond. The river flows on to the Northwest and Southeast."; } else { print "^The gurgling sound you hear is coming from the swiftly moving stream running just to your West. The water is too deep to cross unaided."; } ], e_to loc1c, nw_to loc1bbBoat, se_to loc1ddBoat, before[; go: if ((noun==n_obj) ||(noun==se_obj)){ print "You'll have to get in the canoe to do that."; return true; } enter: if (canoe in loc1g){ move canoe to loc1gBoat; playerTo(loc1gBoat,2); return true; } ], has light; Object loc1gBoat "Southern Stream Inlet (in Canoe)" with description "To the east is a small inlet that leads off into the forrest beyond. The river flows on to the Northwest and Southeast.", nw_to loc1bbBoat, se_to loc1ddBoat, before[; go: if (noun==e_obj){ print "You'll have to get out of the canoe first."; return true; } if ((noun==nw_obj) || (noun==se_obj)){ move canoe to noun; } exit: move canoe to loc1g; playerTo(loc1g,2); return true; ], has light; object loc1ddBoat "Southern Canyon" with description "A 50-foot-tall waterfall marks the southern end of the river. High cliff walls make passage on foot impossible from here. This is the end of the line. It sure is pretty, though.", nw_to loc1gBoat, has light; object waterfall "waterfall" loc1ddBoat with initflag 0, name 'waterfall' 'falls' 'water', before[; go: if (noun==nw_obj){ move canoe to loc1gBoat; } ], description [; print "Inside the spray of the majestic waterfall is a shiny helmet. You will need to wear it for its protective effects to be felt."; if (self.initflag==0){ self.initFlag=1; move helmet to loc1ddBoat; } ], has scenery; object helmet "helmet" with name 'helmet' 'hat', description "The bronze headgear would certainly keep you safe- or at least cut down on the head injuries.", before[; wear: print "You feel safer already."; playerAC=playerAC+2; print "Your armor rating is now ", playerAC, "^"; disrobe: print "You feel naked without your helmet."; playerAC=playerAC-2; print "Your armor rating is now ", playerAC, "^"; ], has clothing; object loc1r "Forrest floor" with description "Blah blah blah. I'm sick of describing the forrest surrounding you. It's green, okay.^^Nearby, a ladder leads up into a grand tree fort. To the North you can see a talus slope at the foot of a great mountain. Another path leads off to the West.", u_to loc1p, n_to loc1s, w_to loc1t, has light; object loc1s "Foot of the mountain" with description [; print "High above you, you can see the entrance to the cave of Whatchamacallit . However, the soft, granulated slope of the mountain makes it impossible to climb from here."; if (bigboulder in loc1u){ print " Perched on a thin ledge above, you see an enormous boulder."; } ], s_to loc1r, has light; object pileofbones "pile of bones" loc1s with name 'bones' 'pile', description "After hundreds of years, this spot has become the premiere spot for adventurers and mountaineers to fall down the mountain and lose their lives. Perhaps frustrated by something blocking their path, they leap to their deaths and land in this neatly-arranged pile of decayed human remains.", before[; take: print "Disturbing the bones would be a sacrilege and none of you are chaotic evil."; return true; ], has ; object loc1t "other spot" with description "The path you are on runs East/West. High above you to the North, running parallel, is a trail leading up the mountainside.", e_to loc1r, w_to loc1v, has light; object loc1vBoat "Mountain Pass beach-head (in Canoe)" with description "You can North or south on the river or get out and explore the area on the shore.", n_to loc1aaBoat, s_to loc1bbBoat, before[; go: if (noun==n_obj){ move canoe to loc1aaBoat; } if (noun==s_obj){ move canoe to loc1bbBoat; } exit: move canoe to loc1v; !move player to loc1v; playerTo(loc1v,2); return true; ], has light; object loc1v "Mountain pass beach-head" with description "You are standing at the foot of a path that leads up the mountain to the Northeast. To the East is the path back into the forrest.^^To the West is a small river, too deep to cross without a boat of some kind. You hear a loud roaring sound coming from up the river to the North.", e_to loc1t, ne_to loc1w, before[; go: if ((noun==n_obj) || (noun==s_obj)){ print "^You'll have to get in the canoe first."; return true; } enter: if (canoe in loc1v){ move canoe to loc1vBoat; playerTo(loc1vBoat,2); print "^You are now in the canoe."; inConoe=1; return true; } ], has light; object canoe "canoe" loc1v with description "It's a hearty little canoe, ready for adventure on the open water.", name 'canoe' 'boat' 'raft', before[; take: print "It's too heavy for that. Why not get in it?"; return false; enter: print "^You are now in the canoe."; inConoe=1; rtrue; exit: print "^You are no longer in the canoe."; inConoe=0; rtrue; ], has ; object loc1aa "North beach" with description [; print "^The sound of rushing water is very loud here."; if (player in canoe){ print "You can head North or South on the River"; } else { print "You stand on a tiny beach on the Northern end of the river."; } ], s_to loc1v, before[; go: if (player in canoe){ if (noun==n_obj){ print "The rushing sound is getting louder..."; bannerPause(); print "and louder..."; bannerPause(); print "You muse about how the falls are a beautiful place to spend a lazy afternoon- just seconds before your canoe is tossed over the edge into the rapids below, drowning everyone."; deadflag=1; } } else { if (noun==s_obj){ print "^You'll have to get in the canoe to do that."; } } enter: if (canoe in loc1aa){ move canoe to loc1aaBoat; playerTo(loc1aaBoat,2); return true; } ], has light; object loc1aaBoat "North beach (in Canoe)" with description "The sound of rushing water is very loud here. You can head North or South on the River", s_to loc1vBoat, before[; go: if (noun==n_obj){ print "The rushing sound is getting louder..."; bannerPause(); print "and louder..."; bannerPause(); print "You muse about how the falls are a beautiful place to spend a lazy afternoon- just seconds before your canoe is tossed over the edge into the rapids below, drowning everyone."; deadflag=1; } if (noun==s_obj){ move canoe to loc1vBoat; } exit: move canoe to loc1aa; playerTo(loc1aa,2); return true; ], has light; object loc1bbBoat "River Bend (in Canoe)" with description "This is the place where the river bends. ^^A mysterious chanting sound is coming from the inland path to the West.", n_to loc1vBoat, se_to loc1gBoat, before[; go: if (noun==w_obj){ print "You're going to have to get out of the canoe to do that."; return true; } if (noun==se_obj) { move canoe to loc1gBoat; } if (noun==n_obj){ move canoe to loc1vBoat; } exit: if (noun==canoe){ move canoe to loc1bb; playerTo(loc1bb,2); return true; } ], has light; object loc1bb "River Bend" with description "This is the place where the river bends.^^A mysterious chanting sound is coming from the inland path to the West.", w_to loc1cc, before[; go: if ((noun==n_obj) || (noun==se_obj)){ print "You're going to have to get in the canoe first."; return true; } enter: if (canoe in loc1bb){ move canoe to loc1bbBoat; playerTo(loc1bbBoat,2); return true; } ], has light; object loc1cc "Holy Place" with description [; print "This palace of stone was erected to worship the local god whose name I never bothered to write down. The worshipers look pretty serious in their white robes. "; if (robe has worn){ } else { print "It looks like you don't belong here."; } ], e_to loc1bb, has; object loc1u "Mountain Pass" with description "From here you can see the entire valley below, sunshine on the treetops and all that stuff. The path to the Southwest leads back down the mountain. To your east is the mouth of the Cave of Whatchamajiggy. The sound of squawking birds can be heard some distance away.", sw_to loc1w, e_to loc1x, n_to loc2a, before [; go: if ((noun==e_obj) && (bigboulder in loc1u)){ print "The enormous boulder is blocking your way. You'll have to move it somehow."; return true; } ], has light; object bigboulder "enormous boulder" loc1u with name 'boulder' 'rock', description [; if (bigboulder in loc1u){ print "This house-sized rock stands in your path, making it impossible to pass to the East. Don't even think about picking it up."; } else { print "The chunk of granite has already had its little adventure and is now fixed in position. Trying to move it would be futile."; } ], before [; take: print "^Hahaha. That's really funny. Even someone who wasn't a total weakling like yourself would never be able to budge this puppy."; return true; jump: print "If you want to end your life like the others, who am I to stand in your way?"; deadflag=1; ], has; object loc1w "Rocky Ledge" with description "Up the stairs to the north is an odd-looking cabin. The narrow path runs Northeast and Southwest from here.", sw_to loc1v, ne_to loc1u, n_to loc1y, u_to loc1y, before [; jump: print "If you want to end your life like the others, who am I to stand in your way?"; deadflag=1; ], has light; object loc1y "Chateau de Hermit" with description "This sparse abode is the home of the region's one and only hermit. A path leads down the hill to the mountain pass. In spite of his shyness, you might be able to ask some questions.", s_to loc1w, d_to loc1w, has light; npc hermit "hermit" loc1y with name 'hermit' 'guy' 'man', description "Bearded and covered in rags, this gentleman is a textbook old-school recluse.", before[; ask: if (second=='cave'){ print "^Hermit: ~The cave of- whatevertheycallit is a dark and mysterious place. I used to live there but I got sick of the dry rot and moved into this place. It's nice and all, but the fresh air and sunshine can get to you after a while.~"; return true; } if (second=='dragon'){ print "^Hermit: ~Hahaha. Yeah, I was sent up here to kill a dragon. You haven't seen one have you?~"; if (sword in player){ print "^Hermit: ~That sword you have will come in handy if you're going dragon hunting.~"; } else { print "^Hermit: ~If you're up here looking for dragons, you might find this useful. Remember to equip it.~^[Hermit hands you a beautiful sword]"; move sword to player; } return true; } if ((second=='ericton') || (second=='town') || (second=='mayor') ){ print "^Hermit: ~Remember the statue in the town square? That's me. They think I died saving them, but I can't bear to tell them the truth. So, I live on my own.~"; style underline; print "^Brad: Backstory++!"; style roman; print "^It's all about character development, boys. I'm the master of dungeoncraft."; style underline; print "^Josh: Now if we could only get to the friggin' dungeon..."; style roman; return true; } ], has ; object loc1x "Mouth of the cave of Thingamawhatsits" with description "Misty chambers of the Cave of the Whatsamacallthis lies to the North. You can go back down the mountain to the West. You could also travel up to the Northeast, but that appears to be where the loud squawking noise is coming from, so I'd advise against it.", w_to loc1u, ne_to loc1z, n_to loc2a, d_to[; print "Um, there are no stairs here."; return true; ], before [; jump: print "If you want to end your life like the others, who am I to stand in your way?"; deadflag=1; ], has light; object loc1z "Stone nest" with description "You stand in a bowl of rocks and tree branches, a nest for a family of stone condors who happen to be flying overhead right now. There is no telling what they might do to defend their nest.", sw_to loc1x, before[; attack: print "The birds are too high to hit with your weapons."; return true; ], each_turn[; if (random(3)==1){ print "Ouch! A large stone egg has fallen from the sky and wounded you."; playerHealth=playerHealth-2; if (playerHealth<=0){ deadFlag=1; } else{ print "^You now have ", playerHealth, " health points left."; } } else { print "A large stone egg falls from the sky, barely missing you."; } ], has light; object healthPotion1 "potion" loc1z with description "The green bottle has a picture of a heart on it to signify that it is a potion to restore health. No fooling, guys. It's not a trick or anything.", name 'potion' 'bottle', before[; drink: print "You drink, and somehow you all feel healthier."; playerHealth=playerHealth+4; print "^You now have ", playerHealth, " health points."; if (bradHealth>0){ bradHealth=bradHealth+4; print "^Brad now has ", bradHealth, " health points."; } if (joshHealth>0){ joshHealth=joshHealth+4; print "^Josh now has ", joshHealth, " health points."; } return true; ], has; object healthPotion2 "potion" loc1cc with description "The green bottle has a picture of a heart on it to signify that it is a potion to restore health. No fooling, guys. It's not a trick or anything.", name 'potion' 'bottle', before[; drink: print "You drink, and somehow you all feel healthier."; playerHealth=playerHealth+4; print "^You now have ", playerHealth, " health points."; if (bradHealth>0){ bradHealth=bradHealth+4; print "^Brad now has ", bradHealth, " health points."; } if (joshHealth>0){ joshHealth=joshHealth+4; print "^Josh now has ", joshHealth, " health points."; } return true; ], has; !========================================================================== object loc2a "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", s_to loc1x, n_to loc2b, e_to loc2c, w_to loc2d, has ; object loc2b "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", s_to loc2a, sw_to loc2e, n_to loc2f, has ; object loc2c "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", w_to loc2a, ne_to loc2g, has ; object loc2d "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", e_to loc2a, nw_to loc2e, has ; object loc2e "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", se_to loc2d, ne_to loc2b, n_to loc2h, has ; object loc2f "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", s_to loc2b, se_to loc2i, has ; object loc2g "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", sw_to loc2c, n_to loc2j has ; object loc2h "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions. A ladder leads down.", s_to loc2e, d_to loc2k, has ; object loc2i "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions.", nw_to loc2f, has ; object loc2k "Caves of Whatsama-whatever" with description "Each chamber looks like the rest. Exits exist in most directions. A ladder leads up. A door lies open to the South.", canpass 0, u_to loc2h, s_to loc3a, before[; go: if ( (self.canpass==0) && (noun==s_obj)){ print "The giant won't allow that."; } ], has ; npc giant "disheveled giant" loc2k, with name 'giant', health 18, description "This big bad ugly is covered in candy wrappers. His fist looks deadly, though. I wouldn't get too close if I were you.", before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed the giant."; remove giant; loc2k.canpass=1; score=score+18; } return true; ], each_turn[; if (loc2k.canpass==0){ enemyAttack(10,"stoney fists"); } ], has; object loc2j "Molasses Swamp" with initFlag 0, description [; if (self.initFlag==0){ print "Through the twisting passages you go...^^"; self.initFlag=1; } print "Oh, crap. You went too far off the map and you're now in my little brother's Candy Land map. Sorry, guys. I think the way back is to the South. The walls are pure white, so it's difficult to say which direction is they way out."; ], nw_to loc2g, has light; object lollipop "Lollipop" loc2j with name 'lollipop' 'pop' 'lolly' 'lollie', description "It's sticky and sweet, good to eat!", before[; give: if ((second==giant) && (location==loc2k)){ print "The sweet-toothed giant wanders off into the caverns with its new treat, allowing you to pass."; loc2k.canpass=1; remove lollipop; remove giant; return true; } eat: print "Mmmm. Well, that was a waste of time. You might have been able to use that."; remove lollipop; return true; ], has; object loc3a "The lair of K'ThirPuPu" with description "You really shouldn't waste time reading about the glittering surroundings in this underground lair. There's an enormous dragon to kill. The exits sealed as soon as you entered. The only way out is through that dragon.", has light; npc streaker "Gordo the Streaker" loc1r with description "Gordo the Streaker is stark raving naked.", name 'streaker' 'gordo', oldLoc loc1v, each_turn[; switch(random(7)){ 1: print "^Gordo: I'm gonna barf! Yeah!!~"; 2: print "^Gordo: Cheat codes! Come and get your cheat codes!~"; 3: print "^Gordo: try typing 'idquad'~!"; 4: print "^Gordo: try typing 'dnkroz'~!"; 5: print "^Gordo: I'm headed for an empty life of alcohol and broken dreams! Booyah!~"; 6: print "^Gordo: ~Listen to me, man. I'm not rambling. Follow me around.~"; 7: print "^Gordo: ~People say I'm just random, but I've got something to say. Follow me!~"; } if (random(2)){ print "^Gordo runs off in a random direction..."; switch(random(4)){ 1: move streaker to loc1r; 2: move streaker to loc1s; 3: move streaker to loc1t; 4: move streaker to loc1v; } } ], has; !========================================================================== ! monsters !========================================================================== object succubus "succubus" loc2b with name 'succubus' 'demon', health 10, description [; style roman; print "This comely creature of the night has more on her mind that just killing you. As it turns out, she's a very needy woman. Sure, throw some attention her way because, hey, nothing's more attractive than someone who likes you, right? But before long she'll be bugging you constantly, suffocating you with her affections."; style underline; print "^Brad: I'm sure you know exactly what that's like, Eric."; style roman; print "Have your laugh. Just don't get too close to this little lady because you'll be begging me to smite you before long."; ], before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed the succubus."; remove succubus; score=score+10; } return true; ], each_turn[; if (random(3)){ ! declothe player... print "Succubus attacks with unsable love... hit"; if ((robe hasnt worn) && (helmet hasnt worn)){ playerHealth=playerHealth-2; if (playerHealth<=0){ print "You and the rest of your party have been loved to death. Smoke em if ya got em."; deadFlag=1; } } else { if (robe has worn) { move robe to loc2a; print "^Your robe has flown off to the South."; } if (helmet has worn){ move helmet to loc2a; print "^Your spiffy helmet has flown off your head and tumbled down the causeway to the South."; } print "^You are now naked."; } } else { print "The succubus lunges forward, barely missing you.^^Succubus: ~Where are you going, baby? I just want to get to know you.~"; } ], has ; object monster1 "Horny monster" loc1c with initText 0, description "This horrible green monster has a rather large and dangerous looking horn on its head.", pauseflag 0, equipped 'horn', maxDmg 3, name 'monster', health 6, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed the horrible horny monster. He appears to have dropped something as he fell.^ Also, Brad and Josh have found some home-made weapons."; bradEquipped="large wooden spoon"; bradMaxDmg=4; joshEquipped="sharpened bed pan"; joshMaxDmg=4; move axe to loc1c; move monster1_chip1 to loc1c; move monster1_chip2 to loc1c; remove monster1; score=score+10; } return true; ], each_turn[; if (self.pauseflag>0) { enemyAttack(3,"horn"); } else { style underline; print "^Josh: Wait. There's no such thing as a 'horny monster' in the Creature Guide."; style roman; print "^I've got all the books."; style underline; print "^Josh: Yeah, but did you read them?"; style roman; print "^Um, yeah. Anyway, shut up before I have to smite you for the sake of the game.^"; self.pauseflag=1; } ], has ; object siggy "Sigmund the not-so-nice sea monster" loc1bbBoat with initText 0, description "On TV he seemed like the nicest sea monster that ever was, but now that he's trying to take a chunk out of you, the wild-eyed, many-tentacled beast no longer seems so nice.", equipped 'tentacle', maxDmg 6, name 'sigmond' 'sigmund' 'beast' 'monster', health 12, before[; attack: self.health=playerAttack(self.health, 3); if (self.health<=0){ print "^^You have killed Sigmund."; remove siggy; score=score+12; } return true; ], each_turn[; enemyAttack(6,"tentacle"); ], has ; object holyguard "temple guard" loc1cc with initText 0, description [; print "The temple guard is meaty, beefy, big and bouncy, but don't tell him that. The look on his face and the warhammer in his hands indicate that he is not one to be trifled with."; if (robe has worn){ print "Thank God you're wearing that robe. You fit right in!"; } ], equipped 'hammer', maxDmg 15, name 'guard' 'monster', health 50, before[; attack: self.health=playerAttack(self.health, 4); if (self.health<=0){ print "^^You have killed the guard."; remove holyguard; score=score+50; } return true; ], each_turn[; if (robe has worn){ } else { enemyAttack(15,"hammer"); } ], has ; object bear1 "Vengeance Bear" loc1t with initText 0, description "Vengence Bear is the most hateful of all the characters in the venerated and heavily copyrighted cartoon and merchandizing franchise. He wears a lightning bolt on his belly.", equipped 'spell of unpleasant odors', maxDmg 3, name 'monster' 'bear' 'vengeance', health 8, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed Vengeance Bear. He appears to have dropped something as he fell."; move bear1_chip1 to loc1c; remove bear1; score=score+8; } return true; ], each_turn[; enemyAttack(4,"spell of unpleasant odors"); ], has ; object bear2 "Wrathful Bear" loc1t with initText 0, description "Vengence Bear is the most hateful of all the characters in the venerated and heavily copyrighted cartoon and merchandizing franchise. He wears a lightning bolt on his belly.", equipped 'spell of unpleasant odors', maxDmg 3, name 'monster' 'wrath' 'bear' 'wrathful', health 8, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed Wrathful Bear."; remove bear2; score=score+8; } return true; ], each_turn[; enemyAttack(4,"bear-hug"); ], has ; object dragon "Big bad dragon" loc3a with initText 0, name 'dragon' 'baddie' 'enemy', description "Big as a four-story office building and twice as tedious, the dragon looms over you with its horrible breath. It smells terrible.", equipped 'spell of unpleasant odors', maxDmg 3, health 25, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ style roman; print "You have killed the evil dragon. You were supposed to just die like the others to keep it busy for a while, but this will do just fine.^^When you return to Ericton the citizens, who had been hiding from you from a sense of fear and in an effort to make the game programming simpler, gather around you and cheer your name.^^~Player! Player! Three cheers for Player!~^^"; remove dragon; score=score+50; deadflag=2; } return true; ], each_turn[; enemyAttack(8,"fire breath"); ], has ; object bat1 "bat" loc2c with initText 0, description "Flying rats with poisonous teeth. Nasty stuff. Did I ever tell you about when I had one land on the back of my head? Yowsa.", equipped 'teeth', maxDmg 3, name 'bat', health 2, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed a bat."; remove bat1; score=score+2; } return true; ], each_turn[; enemyAttack(2,"teeth"); ], has ; object bat2 "bat" loc2c with initText 0, description "Flying rats with poisonous teeth. Nasty stuff. Did I ever tell you about when I had one land on the back of my head? Yowsa.", equipped 'teeth', maxDmg 3, name 'bat', health 2, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed a bat."; remove bat2; score=score+2; } return true; ], each_turn[; enemyAttack(2,"teeth"); ], has ; object bat3 "bat" loc2e with initText 0, description "Flying rats with poisonous teeth. Nasty stuff. Did I ever tell you about when I had one land on the back of my head? Yowsa.", equipped 'teeth', maxDmg 3, name 'bat', health 2, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed a bat."; remove bat3; score=score+2; } return true; ], each_turn[; enemyAttack(2,"teeth"); ], has ; object bat4 "bat" loc2d with initText 0, description "Flying rats with poisonous teeth. Nasty stuff. Did I ever tell you about when I had one land on the back of my head? Yowsa.", equipped 'teeth', maxDmg 3, name 'bat', health 2, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed a bat."; remove bat4; score=score+2; } return true; ], each_turn[; enemyAttack(2,"teeth"); ], has ; object bat5 "bat" loc2f with initText 0, description "Flying rats with poisonous teeth. Nasty stuff. Did I ever tell you about when I had one land on the back of my head? Yowsa.", equipped 'teeth', maxDmg 3, name 'bat', health 2, before[; attack: self.health=playerAttack(self.health, 2); if (self.health<=0){ print "^^You have killed a bat."; remove bat5; score=score+2; } return true; ], each_turn[; enemyAttack(2,"teeth"); ], has ; !========================================================================== ! treasure !========================================================================== object healthPotion4 "potion" loc3a with description "The green bottle has a picture of a heart on it to signify that it is a potion to restore health. No fooling, guys. It's not a trick or anything.", name 'potion' 'bottle', before[; drink: print "You drink, and somehow you all feel healthier."; playerHealth=playerHealth+4; print "^You now have ", playerHealth, " health points."; if (bradHealth>0){ bradHealth=bradHealth+4; print "^Brad now has ", bradHealth, " health points."; } if (joshHealth>0){ joshHealth=joshHealth+4; print "^Josh now has ", joshHealth, " health points."; } return true; ], has; object healthPotion3 "potion" loc2i with description "The green bottle has a picture of a heart on it to signify that it is a potion to restore health. No fooling, guys. It's not a trick or anything.", name 'potion' 'bottle', before[; drink: print "You drink, and somehow you all feel healthier."; playerHealth=playerHealth+4; print "^You now have ", playerHealth, " health points."; if (bradHealth>0){ bradHealth=bradHealth+4; print "^Brad now has ", bradHealth, " health points."; } if (joshHealth>0){ joshHealth=joshHealth+4; print "^Josh now has ", joshHealth, " health points."; } return true; ], has; object healthPotion5 "potion" loc1cc with description "The green bottle has a picture of a heart on it to signify that it is a potion to restore health. No fooling, guys. It's not a trick or anything.", name 'potion' 'bottle', before[; drink: print "You drink, and somehow you all feel healthier."; playerHealth=playerHealth+4; print "^You now have ", playerHealth, " health points."; if (bradHealth>0){ bradHealth=bradHealth+4; print "^Brad now has ", bradHealth, " health points."; } if (joshHealth>0){ joshHealth=joshHealth+4; print "^Josh now has ", joshHealth, " health points."; } return true; ], has; object moneysack "money sack" with description [; print "You have ", playerChips, " chip"; if ((playerChips>1) || (playerChips==0)) { print "s"; } ], name 'sack' 'money', before[; drop: print "^Nah. That's a bad idea."; return true; ], has ; object chipsSenery "chips" moneysack with name 'chips', description "I didn't have time to spraypaint quarters, but I found these sweet poker chips in my dad's secret stash.", has scenery; Attribute is_chip; Class Chip with name 'chip', description "I didn't have time to spraypaint quarters, but I found these sweet poker chips in my dad's secret stash.", parse_name [ i j w; if (parser_action==##TheSame) { if ((parser_one.&name)-->0 == (parser_two.&name)-->0) return -1; return -2; } w=(self.&name)-->0; for (::i++) { j=NextWord(); if (j=='chips') parser_action=##PluralFound; else if (j~='chip' or w) return i; } ], has is_chip; !Class YellowChip ! class Chip, ! with name "yellow", ! short_name "gold chip", ! plural "yellow chips"; Class BlueChip class Chip, with name "blue", short_name "blue chip", plural "blue chips", after[; take: playerChips=playerChips+1; score=score+10; remove self; drop: print "^Why you throw chip? Or 'drop' or whatever. Light as a feather and quite valuable, there's absolutely no reason to drop them."; return true; !playerChips=playerChips-1; !score=score-10; ]; !Class RedChip ! class Chip, ! with name "red", ! short_name "bronze chip", ! plural "red chips"; BlueChip monster1_chip1; BlueChip monster1_chip2; BlueChip bear1_chip1; BlueChip dealerChip; BlueChip northbeach_chip1 loc1aa; BlueChip northbeach_chip2 loc1aa; BlueChip northbeach_chip3 loc1aa; BlueChip temple_chip1 loc1cc; BlueChip temple_chip2 loc1cc; BlueChip temple_chip3 loc1cc; BlueChip temple_chip4 loc1cc; BlueChip temple_chip5 loc1cc; BlueChip temple_chip6 loc1cc; BlueChip maze_chip1 loc2i; BlueChip maze_chip2 loc2d; BlueChip maze_chip3 loc2h; BlueChip test_chip loc1a; !========================================================================== ! weapons !========================================================================== Object axe "rusty axe" with description "The blade isn't very sharp, but I expect that it could to some serious damage at short range.", name 'axe' 'rusty axe', before[; take: print "^You need to equip the item before using it in combat.^"; move self to player; return true; ], has ; Object sword "+2 sword of humming" with description "This fine work of Dwarven craftsmanship has a nicely balanced hilt and a razor sharp blade, a quality item. I can't remember why it hums like that, but I wouldn't worry about it.", name 'humming sword' 'sword', before[; take: print "^You need to equip the item before using it in combat.^"; move self to player; return true; ], has ; !========================================================================== [ Initialise; lookmode=2; setTime(600,10); move moneysack to player; location = loc1a; !move lollipop to player; !move lightstone to player; print "Eric The Power-Mad Dungeon Master^by Mark Arenz^(c) 2004"; print "^^[9:38pm on a Saturday in 1981. D&D night at Eric's]^^"; style roman; print "^Long ago ... in the time of Arbaldu, lord of the short forest- or something like that-"; style underline; print "^Josh: Can we just get on with this?"; style roman; print "^Everybody shut the hell up! This is how things go every time I DM, and I'm sick of it. You guys seem to think you can back-sass the Dungeon Master and get away with it. Well, just remember that I have the power to smite you all at will."; style underline; print "^Brad: You keep saying that, Eric, but I'm not convinced that you know what it means."; style roman; print "^My finger is on the smiting button right now. Don't test me.^"; BannerPause(); style roman; print "^Oh, a little bad news first. Some Yoohoo may or may not have been spilled on the new map."; style underline; print "^Josh: You've got to be kidding."; style roman; print "^Mistakes were made, alright? Get over it. The good news is that I memorized the whole thing when we were making it last week, so everything will be fine like cherry wine. Let's get started.^^"; BannerPause(); return (2); ]; !========================================================================== Include "Grammar"; [ BannerPause i; ! "ClearScreen" routine minus "erase window" command. style roman; ! (Doesn't "wipe" upper and lower windows.) print "^[MORE]"; do { @read_char 1 0 0 i; } until (i==32 or 10 or 13); print "^"; ]; [enemyAttack enemymaxDmg enemyWeapon enemyTarget enemyTargetLabel tmpAC tmpHealth; !choose a target based on who is still alive... ! 1 player, 2 brad, 3 josh if ((bradHealth>0) && (joshHealth>0)){ enemyTarget=random(3); } else { if (bradHealth>0){ enemyTarget=random(2); } else { if (joshHealth>0){ enemyTarget=random(2); if (enemyTarget==2){enemyTarget=3;} } else { ! no choosing, player is all that's left enemyTarget=1; } } } if (enemyTarget==1){ enemyTargetLabel="Player"; tmpAC=playerAC; tmpHealth=playerHealth; } else { if (enemyTarget==2){ enemyTargetLabel="Brad"; tmpAC=bradAC; tmpHealth=bradHealth; } else { enemyTargetLabel="Josh"; tmpAC=joshAC; tmpHealth=joshHealth; } } print "^enemy attacks "; enemyTargetLabel.print(); print " with "; enemyWeapon.print(); print " ..."; if (random(tmpAC)==1){ dmg=random(enemyMaxDmg); print " hit for ", dmg , " point"; if (dmg>1) {print "s";} print ". "; tmpHealth=tmpHealth-dmg; if (tmpHealth<=0){ if (enemyTarget==1){deadflag=1;} else { enemyTargetLabel.print(); print " has died...^"; if (enemyTarget==2){ print "^Brad: You suck, Eric. You really, really do. Good night, guys. I'm going home.^"; } else { style underline; print "^Josh: What about a savings throw, you jackass?"; style roman; print "^Not with that attitude, buster."; style underline; print "^Josh: Seriously, have you ever read the D&D books you got for Christmas?"; style roman; print "^Better than you did apparently because you don't qualify for a savings throw in this situation."; style underline; print "^Josh: Why?"; style roman; print "^Because. You're dead."; style underline; print "^Josh: Eric, you're a horrible human being. Have fun, killing off who's left."; style roman; } } } else { enemyTargetLabel.print(); print " has "; print tmpHealth; print " health remaining."; if (enemyTarget==1){ playerHealth=tmpHealth; } else { if (enemyTarget==2){ bradHealth=tmpHealth; } else { joshHealth=tmpHealth; } } } } else { print " miss..."; } ]; [thisAttack maxDmg ac eHealth; if (random(ac)==1){ if (quadTurns>0){ quadTurns=quadTurns-1; dmg=random(maxDmg*4); if (quadTurns==0){ print "^Your glowing eyes begin to fade... quad mode waning."; } } else { dmg=random(maxDmg); } eHealth=eHealth-dmg; print " hit for ", dmg , " point"; if (dmg>1) {print "s";} print "."; if (eHealth>0){ print " Enemy has "; print eHealth; print " health remaining."; } } else { print " miss..."; } return eHealth; ]; [playerAttack enemyHealth enemyAC; print "^Player attacks with "; playerEquipped.print(); print " ..."; enemyHealth=thisAttack(playerMaxDmg,enemyAc,enemyHealth); BannerPause(); if (enemyHealth>0){ if (joshHealth>0){ print "^Josh attacks with "; playerEquipped.print(); print " ..."; enemyHealth=thisAttack(joshMaxDmg,enemyAc,enemyHealth); BannerPause(); } if (enemyHealth>0){ if (bradHealth>0){ print "^Brad attacks with "; playerEquipped.print(); print " ..."; enemyHealth=thisAttack(bradMaxDmg,enemyAc,enemyHealth); BannerPause(); } } } return enemyHealth; ]; [equipSub; ! equip noun if (noun in player){ switch (noun){ sword: playerMaxDmg=10; playerEquipped="sword"; print "^Item equipped. Your maximum damage is now ", playerMaxDmg , " and your armor grade is ", playerAC, "."; axe: playerMaxDmg=5; playerEquipped="axe"; print "^Item equipped. Your maximum damage is now ", playerMaxDmg , " and your armor grade is ", playerAC, "."; } if ((noun~=sword) && (noun~=axe)) { print "^That item is not equippable."; } } else { print "You don't appear to be carrying that."; } ]; [betSub; ]; [quadSub; if (quadTurns>0){ print "^[Quad mode off...]"; } else { quadTurns=4; print "^Your eyes begin to glow as though your attacks are now four times more powerful..."; } ]; [krozSub; print "^Hail to the king, baby!"; if (playerHealth<12){ playerHealth=playerHealth+2; } ]; Verb 'equip' * held -> Equip; Verb 'bet' 'wager' * 'on' noun -> Bet; verb 'idquad' * ->Quad; verb 'dnkroz' * ->Kroz; !==========================================================================