define PLAYERTYPE : 2 exit south #6973 from #1173 to cheeseshop { name : "south;s;cheeseshop;enter cheeseshop"; exitto : "to Cheeseshop"; description : "It's an Edwardian-style shop with large sign above it reading 'Ye Olde Cheese Emporium'. Another sign below the first reads Henry Wensleydale, Purveyor of Fine Cheese to the Gentry and the Poverty Stricken Too', and a sign below that reads 'Licensed for Public Dancing'."; reset : .tmp = 0; contentsloop x in .action { if (%x == PLAYERTYPE) .tmp = 1; } if (.tmp == 0) { wensley.name = wensley.name_0; wensley.ishere = 0; wensley.phase = 1; wensley.isalive = 1; wensley.isnamed = 0; singers.isloud = 1; singers.isannoying = 0; singers.tmp = 0; wensley.camemflag = 0; wensley.ch0flag = 0; fieldloop wensley by chname_* { wesley.asked_* = 0; } } success : call(.reset); say("Feeling somewhat peckish, you decide to sally forth and infiltrate this place of purveyance to negotiate the vending of cheesy comestibles."); osuccess : "sallies forth south, into the cheeseshop."; odrop : "enters the cheeseshop, in search of cheese."; } room cheeseshop #6972 { name : "=== Ye Olde Cheese Emporium ==="; smell : "The shop smells remarkably clean. You don't smell any cheese, certainly."; osmell : "sniffs the air."; description : call(singers.dance); say(" The cheeseshop is large and redolent of the charm and languidity of a bygone age.", { if (singers.isloud) " In the corner, two men are Greek dancing to the music of a bouzouki."; } ); if (!wensley.ishere) say(" On the counter is a small handbell."); else if (!wensley.isalive && !wensley.isnamed) say(" The shopkeeper's dead body has fallen behind the counter."); else if (!wensley.isalive) say(" Mr. Wensleydale's dead body has fallen behind the counter."); else if (!wensley.isnamed) say(" The shopkeeper stands behind the counter."); else say(" Mr. Wensleydale stands behind the counter."); } exit north #6974 from cheeseshop to #1099 { name : "north;n;door;front door"; exitto : "to Village"; description : call(singers.dance); say(" You double check the front door to make sure you have in fact entered a cheeseshop, and not, say, a Proust Eurovision Song competition."); success : call(singers.dance); say(" You stride off north, taking your business elsewhere."); osuccess : "strides off north, taking %p business elsewhere."; odrop : "arrives from the cheeseshop, cheeseless."; } object counter #11427 { name : "counter;countertop;handbell;bell;small bell small handbell"; @flags : dark expert; @lock : #-1; push : call(ring.success); search : call(singers.dance); say(" You don't find any cheese on the counter. Only a small handbell."); smell : "You smell nothing untowards on the counter."; osmell : "discreetly smells the counter. No doubt %s wants to be sure that this shop meets %p exacting standards of cleanliness, just in case the Queen drops by and asks %o to pick up some cheese."; description : call(singers.dance); if (!wensley.ishere) say(" You see a small handbell on the counter. It looks quite ringable."); else if (!wensley.isalive) say(" Mr. Wensleydale's dead body has fallen behind the counter, on which there is an almost forgotten small handbell."); else if (!wensley.isnamed) say(" The shopkeeper is standing behind the counter, ready to negotiate your purchase of cheesy comestibles."); else say(" Mr. Wensleydale is standing behind the counter, which you are beginning to suspect has no cheese behind it at all."); fail : call(singers.dance); say(" You can't take the counter, nor the small handbell. You could try ringing the bell, though."); } action ring #11428 on counter { name : "ring;ring bell;ring handbell;ring small bell;ring small handbell; summon proprietor"; @flags : dark; ringfail_0 : "the dead shopkeeper ignores it."; ringfail_1 : "Mr. Wensleydale fails to come back to life."; ringfail_2 : "the shop doesn't magically fill with cheese."; ringfail_3 : "the sketch fails to continue past this point."; success : call(singers.dance); if (!wensley.ishere) { say(" You ring the handbell, and immediately, the shopkeeper pops up from behind the counter."); osay(" %n rings the handbell, and immediately, the shopkeeper pops up from behind the counter."); wensley.name = wensley.name_0; wensley.ishere = 1; rsay(" \"Good ", call(wensley.morning), ", ", call(wensley.sir), ",\" the man says."); say(" You say to him, \"Good ", call(wensley.morning), ". I'd like to buy some cheese, please.\""); osay(" %n says to him, \"Good ", call(wensley.morning), ". I'd like to buy some cheese, please.\""); rsay(" \"Yes, certainly, ", call(wensley.sir), ". What would you like?\""); } else if (!wensley.isalive) { .tmp = rand(4); say(" You ring the handbell, but ", .ringfail_[.tmp]); osay(" %n rings the handbell, but ", .ringfail_[.tmp]); } else if (!wensley.isnamed) say(" No need. The shopkeeper is already here."); else say(" Why bother? Mr. Wensleydale is already here."); } object singers #11429 { name : "dancers;Greek dancers;men;dancing;corner;two men;musician"; @flags : dark expert; @lock : #-1; isloud : 1; isannoying : 0; smell : "Come, come. Gentlepersons such as yourself do not go about smelling other people."; osmell : "pauses to think."; talk : if (.isloud) { call(.dance); say(" The Greek dancers ignore you and continue dancing."); } else say (" The Greek dancers have left."); description : if (.isloud) { call(.dance); say(" Two men in casual city wear are dancing a Greek folk dance while a third provides musical accompaniment with his bouzouki."); } else say (" The Greek dancers have left."); fail : if (.isloud) { call(.dance); rsay(" A BBC news reporter and camera crew suddenly pop in from nowhere! The reporter shouts into his microphone, \"%n tries to pick up strange Greek men in a cheeseshop! Film at eleven!\" Then he and his film crew race out the door to file their story."); } else say (" The Greek dancers have left."); tmp : 0; tra_0 : "doo da doo da doo dah doo da"; tra_1 : "pa-plink! da doo da pa-plink! da doo da"; tra_2 : "padaplink da doo da pa-plink da doo da"; tra_3 : "puh-plunk da doo da padaplunk da doo da"; tra_4 : "pa-plunk dah doo padadaplunk dah doo dah"; tra_5 : "dadadadadadang doo da doo da doo da ..."; tra_6 : "ta-ting! da doo da, ta-ting! da doo da"; tra_7 : "tata-ting! da doo da, ta-ting! da doo da"; tra_8 : "ta-tang! da doo da, tata-tang! da doo da"; tra_9 : "ta-tang da doo tadadatang da doo ta"; tra_10 : "tadadadatang da doo da doo da doo da ..."; tra_11 : "dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga"; tra_12 : "dinga-dinga-dinga-dinga-dinga-dinga-dinga-dahding"; tra_13 : "dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga"; tra_14 : "dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga"; tra_15 : "zinga-zinga-zinga-zinga-zinga-zinga-zinga-zahzing"; tra_16 : "zinga-zinga-zinga-zinga-zinga-zinga-zinga-zinga"; tra_17 : "zonga-zinga-zinga-zinga-zinga-zinga-zinga-zahzing"; tra_18 : "zinga-zinga-zinga-zinga-zinga-zinga-zinga-zahzonga"; tra_19 : "zonga-zonga-zonga-zonga-zonga-zonga-zonga-zonga ..."; tra_20 : "ZahZing!bingabingabingabingabingabinga!"; tra_21 : "ZahZing!bingabingabingabingabingabinga!"; tra_22 : "ZuhZung!bingabingabingabingabingabinga!"; tra_23 : "ZatuhZung!bingabingabingabingabingabinga!"; tra_24 : "ZahZung!bingabingabingabingabingabinga!"; tra_25 : "ZatazataZung!bingabingabingabingabingabinga! ..."; tra_26 : "ZahZing!taOompahOompahOompah ZahZing!taOompahOompahOompah"; tra_27 : "paTAhZing!taOompahOompahOompah ZahZing!taOompahOompahOompah"; tra_28 : "ZahZung!taOompahOompahOompah paTAhZung!taOompahOompahOompah"; tra_29 : "ZahZung!taOompahOompahOompah paDaDaDaZung!taOompahOompahOompah"; tra_30 : "paDaDaZung! PATABADALADAZING! PATABADALADAZING! PATABADALADAZING!"; tra_31 : "PATABADALADAZING! PATABADALADAZING! PATABADALADAZING!"; tra_32 : "PATABADALADAZING! PATABADALADAZING! PATABADALADAZING!"; tra_33 : "PATABADALADAZING! PA-tA-BAHTA!-PATATA!-PATABADALADAZING!!"; tra_34 : "PA-tA-BAHTA!-PATATA!-PATABADALADAZING! PINGA!PINGADABINGADAPINGADAPINGADADING!!"; tra_35 : "BINGABINGBINGBINGAGAPINGABINGBING!! PINGA!PINGADABINGADAPINGADAPINGADADING!!"; // The music plays until the dancers are told to shut up. // You can't shut up the dancers until after line 10 (isannoying := 1). // The last line repeats ad infinitum. dance : if (.isloud) { rsay("([music]: ", .tra_[.tmp] ); if (.tmp < 35) .tmp++; if (.tmp > 10) .isannoying = 1; } } action shut_up #11430 on singers { name : "SHUT UP!;shut up;silence;quiet;yell at dancers;shout at dancers; tell dancers to shut up;stop music;stop dancing"; @flags : dark; smell : "What an odd notion."; osmell : "glances towards the shop's corner."; success : call(singers.dance); if (!singers.isloud) say(" The dancers have already shut up and left."); else if (!singers.isannoying) say(" Let the dancers be. They're not that annoying. Not *yet*, anyway."); else { say(" You suddenly turn to the dancers, and shout, \"WILL YOU SHUT BLOODY DANCING UP!\""); osay(" %n suddenly turns to the dancers, and shouts, \"WILL YOU SHUT BLOODY DANCING UP!\""); rsay("(the music stops)%c The shopkeeper tells the dancers, \"Told you so,\" as they sneak out the door."); singers.isloud = 0; } } object bouzouki #11431 { name : "bouzouki;instruments"; @lock : #-1; @flags : dark; smell : "What an odd notion."; osmell : "glances towards the shop's corner."; description : call(singers.dance); say(" Ah, the bouzouki. You know, of course, that it's practically the signature sound of both rebetiko and Greek folk music."); fail : call(singers.dance); say(" The bouzouki isn't yours to take."); } object music #11432 { name : "music;song;tune;melody;melos;noise"; @lock : #-1; @flags : dark; smell : "What an odd notion."; osmell : "glances towards the shop's corner."; description : call(singers.dance); if (singers.isloud) { say(" Unless you're badly mistaken, it's probably the title instrumental theme from 'Zorba the Greek'.", { if (singers.isannoying) " But frankly, it's getting on your nerves. If only they would just shut up so a body could think."; } ); } else say(" That bloody annoying music has finally ceased and replaced with blessed silence."); fail : call(singers.dance); say(" Trying to pick up the melody, eh?"); } object cheese #11452 { name : "cheese"; @flags : dark; @lock : #-1; smell : "You smell in vain for a whiff of cheese."; osmell : "smells in vain for a whiff of cheese."; description : call(singers.dance); say(" You don't actually see any cheese. But surely there's some behind the counter or in a back room."); call(think.think); fail : call(singers.dance); say(" Take what cheese?"); } object wensley #11433 { name : "Wensleydale"; @lock : #-1; @flags : dark; isalive : 1; ishere : 0; isnamed : 0; smell : "Come, come. Gentlepersons such as yourself do not go about smelling other people."; osmell : "pauses to think."; name_0 : "shopkeeper;Mr. Wensleydale;Wensleydale;man;owner;proprietor;seller"; name_1 : "Mr. Wensleydale;Wensleydale;man;owner;proprietor;seller;shopkeeper"; name_2 : "Mr. Wensleydale's dead body;Mr. Wensleydale;Wensleydale;man;owner;proprietor;seller;shopkeeper;body;dead body;corpse"; name_3 : "shopkeeper's dead body;Mr. Wensleydale;Wensleydale;man;owner;proprietor;seller;shopkeeper;body;dead body;corpse"; description : call(singers.dance); if (!.ishere) say(" Hmm. You don't see the proprietor, but there must be some way to summon him."); else if (!.isalive) say(" The shopkeeper lies dead behind the counter. He was defeated by the following victorious customers, may they enjoy cheese elsewhere: ", { fieldloop wensley by win_* { shortname("%v"), ". " } } ); else if (!.isnamed) { say(" The shopkeeper waits patiently for you to select a cheese from his shop."); call(think.think); } else { say(" Mr. Wensleydale, the proprietor of this so-called cheeseshop, waits patiently for you to make yet another cheese selection."); call(think.think); } fail : call(singers.dance); if (!.ishere) say(" You don't see him here."); else if (!.isalive) say(" Yes, it would be jolly to pick up the dead Mr. Wensleydale, take him on holiday overseas and frighten the children, but unfortunately, you have other things to do."); else if (!.isnamed) say(" Picking up the shopkeeper isn't going to get you any cheese."); else say(" Picking up Mr. Wensleydale isn't going to get you any cheese."); search : call(singers.dance); if (!.ishere) say(" You don't see him here."); else if (!.isalive) say(" Oh, leave him be. He obviously doesn't have any cheese secreted on his person."); else say(" The shopkeeper isn't likely to let you do that."); sir : if (player.@flags.male) { if (player.@flags.female) "your grace"; else "sir"; } else { if (player.@flags.female) "ma'am"; else "guv'ner"; } morning : switch time("hour") { case 5,6,7,8,9,10,11: "morning"; case 12,13,14,15,16,17: "afternoon"; default: "evening"; } monday : switch mod(time("wday")+3,7) { case 0: "Sunday"; case 1: "Monday"; case 2: "Tuesday"; case 3: "Wednesday"; case 4: "Thursday"; case 5: "Friday"; case 6: "Saturday" } mgr : if (!.isnamed) "the shopkeeper"; else "Wensleydale"; cmgr : if (!.isnamed) "The shopkeeper"; else "Wensleydale"; talk : call(singers.dance) if (!.ishere) say(" I don't see who you want to talk to."); else if (!.isalive) say(" It's a bit late to talk to the ol' beggar now. He's passed on. Mr. Wensleydale is no more. He has ceased to be. He's expired and gone to meet his maker. He's a stiff. Bereft of life, he rests in peace. He's rung down the curtain and joined the choir invisible. This is an ex-shopkeeper."); else { .topic = %5; .x0 = ""; strloop x in %1 { switch %x { case " ": .x0 = .x0 & "_"; default: .x0 = .x0 & %x; } } if (substr(..x0,0,3) == "lu_") .x0 = ..x0; if (substr(.x0,0,2) == "a_") .x0 = substr(.x0,2); if (substr(.x0,0,3) == "an_") .x0 = substr(.x0,3); if (substr(.x0,0,4) == "the_") .x0 = substr(.x0,4); .x0 = .lu_[.x0]; if (substr(..x0,0,3) == "lu_") .x0 = ..x0; if (..x0 == "") call(.talk_default); else call(..x0); talk_default : say(" You ask ", call(.mgr), " about ", .topic, ". \"Is that a kind of cheese?\" he asks. You pause to think of some cheese types."); osay(" %n asks ", call(.mgr), " about ", .topic, ". \"Is that a kind of cheese?\" he asks."); call(think.think); // Do this the 1st time player simply asks about "cheese". // Note 1: the player might see this at any time or not at all. // Note 2: this bit is abbreviated when the dancers are gone. do_cheese_0 : say(" You tell ", call(.mgr), ", \"I was walking by your shop when suddenly I came over all peckish for a little fermented curd.\""); osay(" %n tells ", call(.mgr), ", \"I was walking by your shop when suddenly I came over all peckish for a little fermented curd.\""); rsay(" \"Peckish?\", he asks, puzzled."); say(" \"Esurient,\" you say."); osay(" \"Esurient,\" %n says."); rsay(" \"Eh?\""); say(" \"Eee I were all hungry, like,\" you say, in a broad Yorkshire accent."); osay(" \"Eee I were all hungry, like,\" %n says, in a broad Yorkshire accent."); if (singers.isloud) { rsay(" \"Oh, hungry,\" agrees ", call(.mgr), ". \"I thought you were complaining about the music.\""); say(" \"Heaven forbid,\" you say. \"I am one who delights in all manifestations of the terpsichorean muse.\""); osay(" \"Heaven forbid,\" says %n. \"I am one who delights in all manifestations of the terpsichorean muse.\""); rsay(" \"Sorry?\""); say(" \"I like a nice dance. You're forced to.\" you say."); osay(" \"I like a nice dance. You're forced to.\" %n says."); } else { rsay(" \"Oh, hungry,\" says ", call(.mgr), "."); rsay("[Quick cut to a Viking] %c \"Anyway...\" says the Viking.%c[Cut back to the shop] %c Startled, ", call(.mgr), " looks about. \"Who said that?\""); } .ch0flag = 1;