Cheeseshop


General note: This is, of course, an recreation of the famous Cheeseshop sketch by Monty Python's Flying Circus, the main text of which I took from Monty Python's Flying Circus: Just the Words Volume Two. Because it's on the ifMud, this is an interactive representation. The player (or players) in the shop get to play the role of Mousebender (John Cleese), who attempts to buy cheese from Wensleydale (Michael Palin). On the whole, I'm very pleased how it turned out.


Lycanthros Village

The village is owned by another player on the ifMud, Esrom. Esrom had a couple open locations reserved for new shops, so I thought putting the cheeseshop there would be perfect. I actually built the cheeseshop elsewhere, then after I got permission from Esrom, I moved it into the vacant store. Thanks, Esrom!

To visit the village from Edifice Towers, go east twice, then south, then southeast. To visit the village from the Adventurer's Lounge, go east then north to Mud Road, then northwest twice. The cheeseshop is on the south side of the village, opposite Esrom's Comic Shop.

south (dbref #6973)

Entering the cheeseshop resets everything, as long as there aren't any players already in the shop. The new @contentsloop function makes this an easier test than it would have been without it.

@open south;s;cheeseshop;enter cheeseshop = #6972
@field #6973 = exitto : to Cheeseshop
@desc #6973 = 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'.
@field #6973 = reset :
 @s("tmp",0);
 @contentsloop(@g("action"),"x",@switch(@type("%x"),2,@s("tmp",1)));
 @switch(@g("tmp"),0,@print(
 @setfield(11433,"name",@getfield(11433,"name_0")),
 @setfield(11433,"ishere",0), @setfield(11433,"phase",1),
 @setfield(11433,"isalive",1), @setfield(11433,"isnamed",0),
 @setfield(11429,"isloud",1), @setfield(11429,"isannoying",0),
 @setfield(11429,"tmp",0), @setfield(11433,"camemflag",0),
 @setfield(11433,"ch0flag",0),
 @fieldloop(11433,"chname_",
  @setfield(11433,@print("asked_",@substr("%f",7)),0))
 ));
@succ #6973 = 
 @call(6973,"reset"); @tell("%#","Feeling somewhat peckish,
 you decide to sally forth and infiltrate this place of purveyance to
 negotiate the vending of cheesy comestibles.");
@osucc #6973 = sallies forth south, into the cheeseshop.
@odrop #6973 = enters the cheeseshop, in search of cheese.

Starbase Junkyard

The alternate cheeseshop door was created for use in the Adventurer's Lounge, so people can easily visit. It was never intended to be a permanent fixture of the Lounge, so it has ended up here in the Junkyard.

alternate cheeseshop door (dbref #11364)

@name #11364 = alternate cheeseshop door;acd;cheeseshop door;door
@lock #11364 = me
@fail #11364 = Doors aren't usually portable, and the cheeseshop door
 is no exception.
@set #11364 = expert
@desc #11364 = 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'.

northwest (dbref #11365)

@action northwest;nw;cheeseshop;enter cheeseshop = acd : #6972
@field #11365 = exitto : to Cheeseshop
@desc #11365 = @getfield(6973,"description")
@succ #11365 = 
 @setfield(6974,"dest_%#",@location("%#"));
 @call(6973,"reset"); @tell("%#","Feeling somewhat peckish,
 you decide to sally forth and infiltrate this place of purveyance to
 negotiate the vending of cheesy comestibles.");
@osucc #11365 = sallies forth northwest, into the cheeseshop.
@odrop #11365 = enters the cheeseshop, in search of cheese.

Ye Olde Cheese Emporium (dbref #6972)

The room description takes full responsibility for telling the player what's of interest. All the items in the room are set dark.

@dig === Ye Olde Cheese Emporium ===
@field #6972 = smell : The shop smells remarkably clean. You don't smell
 any cheese, certainly.
@field #6972 = osmell : sniffs the air.
@desc #6972 = @call(11429,"dance");
 @tell("%#",@print("   The cheeseshop is large and redolent of
 the charm and languidity of a bygone age.",
 @switch(@getfield(11429,"isloud"),1,
 " In the corner, two men are Greek dancing to the music of a bouzouki.")));
 @tell("%#",@switch(0,
  @getfield(11433,"ishere"),
   "   On the counter is a small handbell.",
  @or(@getfield(11433,"isalive"),@getfield(11433,"isnamed")),
   "   The shopkeeper's dead body has fallen behind the counter.",
  @getfield(11433,"isalive"),
   "   Mr. Wensleydale's dead body has fallen behind the counter.",
  @getfield(11433,"isnamed"),
  "   The shopkeeper stands behind the counter.",
  "   Mr. Wensleydale stands behind the counter."
 ));

north (dbref #6974)

I left out the bit about putting on a cowboy hat when you leave, after shooting Wensleydale. I felt it was an unnecessary detail that would confuse the player.

@open north;n;door;front door = #1099
@field #6974 = exitto : to Village
@desc #6974 = @call(11429,"dance"); @tell("%#","   You double check the
 front door to make sure you have in fact entered a cheeseshop, and not,
 say, a Proust Eurovision Song competition.");
// @setdest(6974,@getfield(6974,"dest_%#"));
@succ #6974 = @call(11429,"dance");
 @tell("%#","   You stride off north, taking your business elsewhere.");
@osucc #6974 = strides off north, taking %p business elsewhere.
@odrop #6974 = arrives from the cheeseshop, cheeseless.

southeast (dbref #11590)

@open southeast;se;side door = #10332
@field #11590 = exitto : to Starbase Junkyard
@desc #11590 = @call(11429,"dance"); @tell("%#","   You double check the
 side door to make sure you have in fact entered a cheeseshop, and not,
 say, a Proust Eurovision Song competition.");
@succ #11590 = @call(11429,"dance"); 
// @setdest(11590,@getfield(6974,"dest_%#"));
 @tell("%#","   You stride off to the southeast, taking your business elsewhere.");
@osucc #11590 = strides off to the southeast, taking %p business elsewhere.
@odrop #11590 = arrives from the cheeseshop, cheeseless.

counter (dbref #11427)

The counter and bell were combined into one item early in coding as an experiment. A pointless bit of economy, really, all things considered. But I liked the idea of making the bell's presence disappear after ringing it, and then pointing it out again after Wensleydale was dead. Of course, once ended up setting everything dark, it hardly mattered anymore if it was one object or two, but there you go.

@create counter;countertop;handbell;bell;small bell small handbell
@set #11427 = dark
@lock #11427 = #-1
@set #11427 = expert
@field #11427 = push : @call(11428,"success")
@field #11427 = search : @call(11429,"dance"); @tell("%#","   You don't
 find any cheese on the counter. Only a small handbell.");
@field #11427 = smell : You smell nothing untowards on the counter.
@field #11427 = 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.
@desc #11427 = @call(11429,"dance"); @tell("%#",@switch(0,
 @getfield(11433,"ishere"),"   You see a small handbell on the counter.
  It looks quite ringable.",
 @getfield(11433,"isalive"),
 "   Mr. Wensleydale's dead body has fallen behind the counter, on which
 there is an almost forgotten small handbell.",
 @getfield(11433,"isnamed"),
 "   The shopkeeper is standing behind the
  counter, ready to negotiate your purchase of cheesy comestibles.",
 "   Mr. Wensleydale is standing behind the counter, which you are
 beginning to suspect has no cheese behind it at all."
 )); 
@fail #11427 = @call(11429,"dance");
 @tell("%#","   You can't take the counter, nor the small
 handbell. You could try ringing the bell, though.");

ring (dbref #11428)

The player is expected to ring the bell soon after entering. Ringing the bell summons the shopkeeper and begins the conversation. The original sketch has a more protracted opening dialogue than this, but most of it can still be seen if the player asks for cheese (that is, without specifing a specific type).

@action ring;ring bell;ring handbell;ring small bell;ring small handbell;
 summon proprietor = handbell : nowhere
@set #11428 = dark
@field #11428 = ringfail_0 : the dead shopkeeper ignores it.
@field #11428 = ringfail_1 : Mr. Wensleydale fails to come back to life.
@field #11428 = ringfail_2 : the shop doesn't magically fill with cheese.
@field #11428 = ringfail_3 : the sketch fails to continue past this point.
@succ #11428 = @call(11429,"dance"); @switch(0,
 @getfield(11433,"ishere"),@print(
  @tell("%#","   You ring the handbell, and immediately, the shopkeeper pops
   up from behind the counter."),
  @tellroom(@location("%#"),"%#","   %n rings the handbell, and immediately,
   the shopkeeper pops up from behind the counter."),
  @setfield(11433,"name",@getfield(11433,"name_0")),
  @setfield(11433,"ishere",1),
  @tellroom(@location("%#"),"",@print("   \"Good ",
   @call(11433,"morning"), ", ", @call(11433,"sir"), ",\" the man says.")),
  @tell("%#",@print("   You say to him, \"Good ",
   @call(11433,"morning"), ". I'd like to buy some cheese, please.\"")),
  @tellroom(@location("%#"),"%#",@print("   %n says to him, \"Good ",
   @call(11433,"morning"), ". I'd like to buy some cheese, please.\"")),
  @tellroom(@location("%#"),"",@print("   \"Yes, certainly, ",
   @call(11433,"sir"), ". What would you like?\""))
 ),@getfield(11433,"isalive"),@print(
  @s("tmp",@rand(4)),
  @tell("%#",@print("   You ring the handbell, but ",
   @g(@print("ringfail_",@g("tmp"))) )),
  @tellroom(@location("%#"),"%#",@print("   %n rings the handbell, but ",
   @g(@print("ringfail_",@g("tmp"))) ))
 ),@getfield(11433,"isnamed"),
   @tell("%#","   No need. The shopkeeper is already here."),
 @tell("%#","   Why bother? Mr. Wensleydale is already here."));

dancers (dbref #11429)

I made the decision early on to have the dancers either both noisy and present or both quiet and absent. The dancers are only meant to be a distraction, but not to the extent by permitting discussions with the men after they've stopped dancing.

The music is played, one line at a time, simply by calling the dancers' dance function at beginning of every conceivable action. To get the music lines, I borrowed a Greek music CD with the "Zorba the Greek" theme from the library and spent a day trying to transcribe the rhythm of the music using nonsense syllables, singing them out loud to the music. Unfortunately, I kept losing track of the bingas and zingas by line 15, so I fudged the lines after that point. Like, is anyone really gonna notice?

@name #11429 = dancers;Greek dancers;men;dancing;corner;two men;musician
@create dancers;Greek dancers;men;dancing;corner;two men;musician
@set #11429 = dark
@set #11429 = expert
@lock #11429 = #-1
@field #11429 = isloud : 1
@field #11429 = isannoying : 0
@field #11429 = smell : Come, come. Gentlepersons such as yourself do not
 go about smelling other people.
@field #11429 = osmell : pauses to think.
@field #11429 = talk : @switch(@g("isloud"),1,@print(
 @call(11429,"dance"),
 @tell("%#","   The Greek dancers ignore you and continue dancing.")),
 @tell("%#","   The Greek dancers have left."));
@desc #11429 = @switch(@g("isloud"),1,@print(
 @call(11429,"dance"),
 @tell("%#","   Two men in casual city wear are dancing a Greek folk dance
 while a third provides musical accompaniment with his bouzouki.")),
 @tell("%#","   The Greek dancers have left."));
@fail #11429 = @switch(@g("isloud"),1,@print(
 @call(11429,"dance"),
 @tellroom(@location("%#"),"","   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.")),
 @tell("%#","   The Greek dancers have left."));

@field #11429 = tmp : 0
@field #11429 = tra_0 : doo  da  doo  da  doo  dah  doo  da
@field #11429 = tra_1 : pa-plink! da doo da pa-plink! da doo da
@field #11429 = tra_2 : padaplink da doo da pa-plink da doo da
@field #11429 = tra_3 : puh-plunk da doo da padaplunk da doo da
@field #11429 = tra_4 : pa-plunk dah doo padadaplunk dah doo dah
@field #11429 = tra_5 : dadadadadadang doo da doo da doo da ...
@field #11429 = tra_6 : ta-ting! da doo da, ta-ting! da doo da
@field #11429 = tra_7 : tata-ting! da doo da, ta-ting! da doo da
@field #11429 = tra_8 : ta-tang! da doo da, tata-tang! da doo da
@field #11429 = tra_9 : ta-tang da doo tadadatang da doo ta
@field #11429 = tra_10 : tadadadatang da doo da doo da doo da ...
@field #11429 = tra_11 : dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga
@field #11429 = tra_12 : dinga-dinga-dinga-dinga-dinga-dinga-dinga-dahding
@field #11429 = tra_13 : dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga
@field #11429 = tra_14 : dinga-dinga-dinga-dinga-dinga-dinga-dinga-dinga
@field #11429 = tra_15 : zinga-zinga-zinga-zinga-zinga-zinga-zinga-zahzing
@field #11429 = tra_16 : zinga-zinga-zinga-zinga-zinga-zinga-zinga-zinga
@field #11429 = tra_17 : zonga-zinga-zinga-zinga-zinga-zinga-zinga-zahzing
@field #11429 = tra_18 : zinga-zinga-zinga-zinga-zinga-zinga-zinga-zahzonga
@field #11429 = tra_19 : zonga-zonga-zonga-zonga-zonga-zonga-zonga-zonga ...
@field #11429 = tra_20 : ZahZing!bingabingabingabingabingabinga!
@field #11429 = tra_21 : ZahZing!bingabingabingabingabingabinga!
@field #11429 = tra_22 : ZuhZung!bingabingabingabingabingabinga!
@field #11429 = tra_23 : ZatuhZung!bingabingabingabingabingabinga!
@field #11429 = tra_24 : ZahZung!bingabingabingabingabingabinga!
@field #11429 = tra_25 : ZatazataZung!bingabingabingabingabingabinga! ...
@field #11429 = tra_26 : ZahZing!taOompahOompahOompah
 ZahZing!taOompahOompahOompah
@field #11429 = tra_27 : paTAhZing!taOompahOompahOompah
 ZahZing!taOompahOompahOompah
@field #11429 = tra_28 : ZahZung!taOompahOompahOompah
 paTAhZung!taOompahOompahOompah
@field #11429 = tra_29 : ZahZung!taOompahOompahOompah
 paDaDaDaZung!taOompahOompahOompah
@field #11429 = tra_30 : paDaDaZung! PATABADALADAZING! PATABADALADAZING!
 PATABADALADAZING!
@field #11429 = tra_31 : PATABADALADAZING! PATABADALADAZING!
 PATABADALADAZING!
@field #11429 = tra_32 : PATABADALADAZING! PATABADALADAZING!
 PATABADALADAZING!
@field #11429 = tra_33 : PATABADALADAZING!
 PA-tA-BAHTA!-PATATA!-PATABADALADAZING!!
@field #11429 = tra_34 : PA-tA-BAHTA!-PATATA!-PATABADALADAZING!
 PINGA!PINGADABINGADAPINGADAPINGADADING!!
@field #11429 = 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.
@field #11429 = dance :
 @switch(@g("isloud"),1,@print(
  @tellroom(@location("%#"),"",@print(
   "([music]: ",@g(@print("tra_",@g("tmp"))),")")),
  @switch(@lt(@g("tmp"),35),1,@s("tmp",@add(@g("tmp"),1))),
  @switch(@gt(@g("tmp"),10),1,@s("isannoying",1))
 ));

SHUT UP! (dbref #11430)

I admit, it's a bit mean to make this action dark, but I really do want players to figure it out themselves. If they want to listen to the music all the way through, then that's their own lookout.

@action SHUT UP!;shut up;silence;quiet;yell at dancers;shout at dancers;
 tell dancers to shut up;stop music;stop dancing = dancers : nowhere
@set #11430 = dark
@field #11430 = smell : What an odd notion.
@field #11430 = osmell : glances towards the shop's corner.
@succ #11430 = @call(11429,"dance"); @switch(0,
 @getfield(11429,"isloud"), @tell("%#","   The dancers have already shut
 up and left."),
 @getfield(11429,"isannoying"), @tell("%#","   Let the dancers be. They're
 not that annoying. Not *yet*, anyway."),
 @print(
 @tell("%#","   You suddenly turn to the dancers,
 and shout, \"WILL YOU SHUT BLOODY DANCING UP!\""),
 @tellroom(@location("%#"),"%#","   %n suddenly turns to the dancers,
 and shouts, \"WILL YOU SHUT BLOODY DANCING UP!\""),
 @tellroom(@location("%#"),"","(the music stops)%c   The shopkeeper tells
 the dancers, \"Told you so,\" as they sneak out the door."),
 @setfield(11429,"isloud",0)
 ));

bouzouki (dbref #11431)

Possibly the dullest item in the shop, but then a) I don't want players wasting their time with the bouzouki, and b) I don't really know what a bouzouki is. It's a stringed instrument, like a guitar or a banjo, but that's all I can tell you. The bouzouki, music, and cheese items were added only for completeness' sake.

@create bouzouki;instruments
@lock #11431 = #-1
@set #11431 = dark
@field #11431 = smell : What an odd notion.
@field #11431 = osmell : glances towards the shop's corner.
@desc #11431 = @call(11429,"dance");
 @tell("%#","   Ah, the bouzouki. You know, of course,
 that it's practically the signature sound of both rebetiko and Greek
 folk music.");
@fail #11431 = @call(11429,"dance");
 @tell("%#","   The bouzouki isn't yours to take.");

music (dbref #11432)

@create music;song;tune;melody;melos;noise
@lock #11432 = #-1
@set #11432 = dark
@field #11432 = smell : What an odd notion.
@field #11432 = osmell : glances towards the shop's corner.
@desc #11432 = @call(11429,"dance");
 @switch(@getfield(11429,"isloud"),1,
  @tell("%#",@print(
   "   Unless you're badly mistaken, it's probably
   the title instrumental theme from 'Zorba the Greek'.",
   @switch(@getfield(11429,"isannoying"),1,
   " But frankly, it's getting on your nerves. If only they
   would just shut up so a body could think.")
  )),
 @tell("%#","   That bloody annoying music has finally ceased
 and replaced with blessed silence."));
@fail #11432 = @call(11429,"dance");
 @tell("%#","   Trying to pick up the melody, eh?");

cheese (dbref #11452)

I'll leave it for philosophers to decide whether the existence of this item called "cheese" means that there really is cheese in the cheeseshop, even though it exists only to proclaim its absence.

@create cheese
@set #11452 = dark
@lock #11452 = -1
@field #11452 = smell : You smell in vain for a whiff of cheese.
@field #11452 = osmell : smells in vain for a whiff of cheese.
@desc #11452 = @call(11429,"dance"); @tell("%#","   You don't actually
 see any cheese. But surely there's some behind the counter or in
 a back room."); @call(11449,"think");
@fail #11452 = @call(11429,"dance"); @tell("%#","   Take what cheese?");

Wensleydale (dbref #11433)

Most of the cheeseshop's code is in the Wensleydale object, and most of that has to do with the dialogue. The dialogue is customized in various ways, eg: Wensleydale calls the player "sir" (if male), or "ma'am" (if female), or "your grace" (if hermaphrodite), or "guv'ner" (if neuter). Also, much of the dialogue is coded twice for both second person and third person.

The dialogue was split into chunks, kept in their original order, and numbered. Several fields were needed to keep track of what had already been asked or said, primarily the asked_* fields and phase field respectively. Wensleydale can be asked about almost 120 different cheeses (none of which he has, of course).

Players who successfully navigate thru the entire scene will have their names automatically added to the list of victorious customers seen when you examine Wensleydale's dead body.

@create Wensleydale
@lock #11433 = #-1
@set #11433 = dark
@field #11433 = isalive : 1
@field #11433 = ishere : 0
@field #11433 = isnamed : 0
@field #11433 = smell : Come, come. Gentlepersons such as yourself do not
 go about smelling other people.
@field #11433 = osmell : pauses to think.
@field #11433 = name_0 : shopkeeper;Mr. Wensleydale;Wensleydale;man;owner;
 proprietor;seller
@field #11433 = name_1 : Mr. Wensleydale;Wensleydale;man;owner;proprietor;
 seller;shopkeeper
@field #11433 = name_2 : Mr. Wensleydale's dead body;Mr. Wensleydale;
 Wensleydale;man;owner;proprietor;seller;shopkeeper;body;dead body;corpse
@field #11433 = name_3 : shopkeeper's dead body;Mr. Wensleydale;
 Wensleydale;man;owner;proprietor;seller;shopkeeper;body;dead body;corpse
@desc #11433 = @call(11429,"dance"); @switch(0,
 @g("ishere"),@tell("%#","   Hmm. You don't see the proprietor, but there
 must be some way to summon him."),
 @g("isalive"),@tell("%#",@print("   The shopkeeper lies dead behind the
 counter. He was defeated by the following victorious customers, may they
 enjoy cheese elsewhere: ",
 @fieldloop(11433,"win_",@print(@shortname("%v"),". "))
 )),
 @g("isnamed"),@print(@tell("%#","   The shopkeeper waits patiently for you
 to select a cheese from his shop."),@call(11449,"think")),
 @print(@tell("%#","   Mr. Wensleydale, the proprietor of this so-called
 cheeseshop, waits patiently for you to make yet another cheese
 selection."),@call(11449,"think")));
@fail #11433 = @call(11429,"dance"); @tell("%#",@switch(0,
 @g("ishere"),"   You don't see him here.",
 @g("isalive"),"   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.",
 @g("isnamed"),"   Picking up the shopkeeper isn't going to get you any cheese.",
 "   Picking up Mr. Wensleydale isn't going to get you any cheese."));
@field #11433 = search : @call(11429,"dance"); @tell("%#",@switch(0,
 @g("ishere"),"   You don't see him here.",
 @g("isalive"),"   Oh, leave him be. He obviously doesn't have any
 cheese secreted on his person.",
 "   The shopkeeper isn't likely to let you do that."));

@field #11433 = sir :
 @switch(@testflag("%#","male"),1,
  @switch(@testflag("%#","female"),1,"your grace","sir"),
  @switch(@testflag("%#","female"),1,"ma'am","guv'ner"));
@field #11433 = morning :
 @switch(@time("hour"),{5,6,7,8,9,10,11},"morning",
  {12,13,14,15,16,17},"afternoon","evening");
@field #11433 = monday :
 @switch(@mod(@add(@time("wday"),3),6), 0,"Sunday", 1,"Monday",
 2,"Tuesday", 3,"Wednesday", 4,"Thursday", 5,"Friday", 6,"Saturday");
@field #11433 = mgr :
 @switch(@g("isnamed"),0,"the shopkeeper","Wensleydale");
@field #11433 = cmgr :
 @switch(@g("isnamed"),0,"The shopkeeper","Wensleydale");
@field #11433 = talk :
 @call(11429,"dance"); @switch(0,
 @g("ishere"),@tell("%#","   I don't see who you want to talk to."),
 @g("isalive"),@tell("%#","   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."),
 @print(
 @s("topic","%5"),
 @s("x0",""), @strloop("%1","x",@switch("%x"," ",
 @s("x0",@print(@g("x0"),"_")),@s("x0",@print(@g("x0"),"%x")) )),
 @switch(@substr(@g(@g("x0")),0,3), "lu_", @s("x0",@g(@g("x0")))),
 @switch(@substr(@g("x0"),0,2),"a_",@s("x0",@substr(@g("x0"),2))),
 @switch(@substr(@g("x0"),0,3),"an_",@s("x0",@substr(@g("x0"),3))),
 @switch(@substr(@g("x0"),0,4),"the_",@s("x0",@substr(@g("x0"),4))),
 @s("x0",@print("lu_",@g("x0"))),
 @switch(@substr(@g(@g("x0")),0,3), "lu_", @s("x0",@g(@g("x0")))),
 @switch(@g(@g("x0")),"",@call(11433,"talk_default"),@call(11433,@g("x0")))
 ));
@field #11433 = talk_default :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about ", @g("topic"), ". \"Is that a kind of cheese?\" he asks.
 You pause to think of some cheese types."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about ", @g("topic"), ". \"Is that a kind of cheese?\" he asks."));
 @call(11449,"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.
@field #11433 = do_cheese_0 :
 @tell("%#",@print("   You tell ", @call(11433,"mgr"),
 ", \"I was walking by your shop when suddenly I came over all peckish for
 a little fermented curd.\""));
 @tellroom(@location("%#"),"%#",@print("   %n tells ", @call(11433,"mgr"),
 ", \"I was walking by your shop when suddenly I came over all peckish for
 a little fermented curd.\""));
 @tellroom(@location("%#"),"","   \"Peckish?\", he asks, puzzled.");
 @tell("%#","   \"Esurient,\" you say.");
 @tellroom(@location("%#"),"%#","   \"Esurient,\" %n says.");
 @tellroom(@location("%#"),"","   \"Eh?\"");
 @tell("%#","   \"Eee I were all hungry, like,\" you say, in a broad
 Yorkshire accent.");
 @tellroom(@location("%#"),"%#","   \"Eee I were all hungry, like,\"
 %n says, in a broad Yorkshire accent.");
 @switch(@getfield(11429,"isloud"),1,@print(
 @tellroom(@location("%#"),"",@print("   \"Oh, hungry,\" agrees ",
 @call(11433,"mgr"), ". \"I thought you were complaining about the
 music.\"")),
 @tell("%#","   \"Heaven forbid,\" you say. \"I am one who delights in all
 manifestations of the terpsichorean muse.\""),
 @tellroom(@location("%#"),"%#","   \"Heaven forbid,\" says %n. \"I am one
 who delights in all manifestations of the terpsichorean muse.\""),
 @tellroom(@location("%#"),"","   \"Sorry?\""),
 @tell("%#","   \"I like a nice dance. You're forced to.\" you say."),
 @tellroom(@location("%#"),"%#","   \"I like a nice dance. You're forced
 to.\" %n says.")
 ), @tellroom(@location("%#"),"",@print("   \"Oh, hungry,\" says ",
 @call(11433,"mgr"), ".")));
 @tellroom(@location("%#"),"",@print("[Quick cut to a Viking]
 %c   \"Anyway...\" says the Viking.%c[Cut back to the shop]
 %c   Startled, ", @call(11433,"mgr"), " looks about. \"Who said that?\""));
 @s("ch0flag",1);

@field #11433 = do_cheese_1 :
 @tell("%#",@print("   \"Well, how about a little ",
 @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print("   \"Well, how about a little ",
 @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"",@print(
 "   \"I'm afraid we're fresh out of ", @g("the_cheese"),
 ", ", @call(11433,"sir"), ".\""));
 @tell("%#","   \"Oh never mind,\" you say, unconcerned.");
 @tellroom(@location("%#"),"%#","   \"Oh never mind,\" %n says,
 unconcerned.");
 @s("phase",2); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_2 :
 @tell("%#",@print(
  "   \"How are you on ", @g("the_cheese"), "?\", you ask."));
 @tellroom(@location("%#"),"%#",@print(
  "   \"How are you on ", @g("the_cheese"), "?\", %n asks."));
 @tellroom(@location("%#"),"",@print(
 "   \"Never at this part of the week, ", @call(11433,"sir"),
 ". Always get it fresh first thing on ", @call(11433,"monday"),
 ".\"%c   \"Tish, tish. No matter.\""));
 @s("phase",3); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_3 :
 @tell("%#",@print(
 "   You say, \"Well, four ounces of ", @g("the_cheese"),
 ", then, if you please, stout yeoman.\""));
 @tellroom(@location("%#"),"%#",@print(
 "   %n says, \"Well, four ounces of ", @g("the_cheese"),
 ", then, if you please, stout yeoman.\""));
 @tellroom(@location("%#"),"",@print(
 "   \"Ah, well, it's been on order for two weeks, ", @call(11433,"sir"),
 ",\" ", @call(11433,"mgr"), " replies. \"I was expecting it this ",
 @call(11433,"morning"), ".\""));
 @tell("%#",
 "   \"Yes, it's not my day is it,\" you say ruefully.");
 @tellroom(@location("%#"),"%#",
 "   \"Yes, it's not my day is it,\" %n says ruefully.");
 @s("phase",4); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_4 :
 @tell("%#",@print(
 "   \"Er, ", @g("the_cheese"), "?\" you try.%c   \"Sorry.\""));
 @tellroom(@location("%#"),"%#",@print(
 "   \"Er, ", @g("the_cheese"), "?\" %n tries.%c   \"Sorry.\""));
 @s("phase",5); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_5 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"",@print(
 "   \"Normally ", @call(11433,"sir"),
 ", yes, but today the van broke down.\""));
 @s("phase",6); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_6 :
 @tell("%#",@print(
 "   \"Ah. ", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"Ah. ", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"","   \"Sorry.\"");
 @s("phase",7); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_7 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"","   \"No.\"");
 @s("phase",@add(1,@g("phase"))); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_8 :
 @tell("%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" you try."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" %n tries."));
 @tellroom(@location("%#"),"","   \"No.\"");
 @s("phase",@add(1,@g("phase"))); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_9 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_10 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_11 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_12 : @call(11433,"do_cheese_7");

@field #11433 = do_cheese_13 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"","   \"....No.\"");
 @s("phase",14); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_14 : @call(11433,"do_cheese_7");

@field #11433 = do_cheese_15 : 
 @tell("%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" you try."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" %n tries."));
 @tellroom(@location("%#"),"","   \"No.\"");
 @s("phase",@switch(@g("camemflag"),0,16,19));
 @s(@print("asked_",@g("ch")),1);

// Handling the first phase of Camembert cheese is tricky.
// First, don't let the player ask for Camembert too early;
// force him to choose another cheese if in phases 1, 2, or 3.
// Second, we need to skip over phases 16 to 18 if we've asked
// for Camembert earlier (ie: in phases 4..15).
// Third, force the asking of Camembert in phase 16 if we haven't
// asked for it yet.
@field #11433 = do_cheese_16 :
 @call(11433,"calc_camembert_list");
 @tell("%#",@print(
 "   You recite, \"", @g("camembert_list"), "?\""));
 @tellroom(@location("%#"),"%#",@print(
 "   %n recites, \"", @g("camembert_list"), "?\""));
 @tellroom(@location("%#"),"",@print(
 "   The shopkeeper brightens. \"Ah! We do have some Camembert, ",
 @call(11433,"sir"), ".\""));
 @tell("%#","   \"You do. Excellent,\" you say.");
 @tellroom(@location("%#"),"%#","   \"You do. Excellent,\" %s says.");
 @tellroom(@location("%#"),"",@print(
 "   The shopkeeper hesitates. \"It's a bit runny, ",
 @call(11433,"sir"), ".\""));
 @switch(@g("phase"),16,@s("phase",19)); @s("camemflag",1);

@field #11433 = do_cheese_17 :
 @tell("%#",
 "   \"Oh, I like it runny,\" you say with considerable relish.");
 @tellroom(@location("%#"),"%#",
 "   \"Oh, I like it runny,\" %n says with considerable relish.");
 @tellroom(@location("%#"),"",@print(
 "   \"Well, as a matter of fact, it's very runny, ",
 @call(11433,"sir"), ",\" ", @call(11433,"mgr"), " cautions."));
 @tell("%#",
 "   \"No matter, no matter,\" you reply. \"Hand over the fromage de
 la Belle France qui s'appelle Camembert, s'il vous plait.\"");
 @tellroom(@location("%#"),"%#",
 "   \"No matter, no matter,\" %n replies. \"Hand over the fromage de
 la Belle France qui s'appelle Camembert, s'il vous plait.\"");
 @tellroom(@location("%#"),"",@print(
 "   \"I think it's runnier than you like it, ", @call(11433,"sir"),
 ",\" ", @call(11433,"mgr"), " warns.\""));
 @s("camemflag",2);

@field #11433 = do_cheese_18 :
 @tell("%#","   \"I don't care how fucking runny it is. Hand it over
 with all speed,\" you demand.");
 @tellroom(@location("%#"),"%#","   \"I don't care how fucking runny it is.
 Hand it over with all speed,\" %n demands.");
 @tellroom(@location("%#"),"",@print(
 "   \"Yes, ", @call(11433,"sir"),
 ".\"%c   The shopkeeper bends down below the counter and reappears.
 \"Oh...,\" he says.",
 "%c   \"What?\" \"The cat's eaten it.\" \"Has he?\" \"She, ",
 @call(11433,"sir"), ".\""));
 @s("camemflag",3); @s("asked_camembert",1);

@field #11433 = do_cheese_19 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_20 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_21 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_22 : @call(11433,"do_cheese_7");

@field #11433 = do_cheese_23 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"",@print("   \"No, ",
 @call(11433,"sir"), ".\""));
 @s(@print("asked_",@g("ch")),1); @s("phase",24);

@field #11433 = do_cheese_24 :
 @tell("%#",
 "   \"You do have some cheese, do you?\" you inquire.");
 @tellroom(@location("%#"),"%#",
 "   \"You do have some cheese, do you?\" %n inquires.");
 @tellroom(@location("%#"),"",@print(
 "   \"Certainly, ", @call(11433,"sir"), ". It's a cheese shop, ",
 @call(11433,"sir"), ". We've got...\"",
 "%c   \"No, no, no, don't tell me. I'm keen to guess.\"",
 "%c   \"Fair enough.\"")); @s("phase",26); @call(11433,"do_cheese_26");

@field #11433 = do_cheese_25 :
 @tell("%#","   \"Wensleydale?\" you ask.");
 @tellroom(@location("%#"),"%#","   \"Wensleydale?\" %n asks.");
 @tellroom(@location("%#"),"",@print(
 "   \"Yes, ", @call(11433,"sir"), "?\""));
 @tell("%#",
 "   You smile. \"Splendid. Well, I'll have some of that then, please.\"");
 @tellroom(@location("%#"),"%#",
 "   %n smiles. \"Splendid. Well, I'll have some of that then, please.\"");
 @tellroom(@location("%#"),"",@print(
 "   \"Oh, I'm sorry, ", @call(11433,"sir"),
 ". I thought you were referring to me, Mr. Wensleydale.\""));
 @tell("%#","   You stop smiling.");
 @tellroom(@location("%#"),"%#","   %n stops smiling.");
 @s("isnamed",1); @s("asked_wensleydale",1);

@field #11433 = do_cheese_26 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_27 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_28 : @call(11433,"do_cheese_7");
@field #11433 = do_cheese_29 : @call(11433,"do_cheese_7");

@field #11433 = do_cheese_30 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"",@print("   \"Not today ",
 @call(11433,"sir"), ", no.\""));
 @s("phase",31); @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_31 :
 @tell("%#","   You decide to cut to the chase.
 \"Well, let's keep it simple. How about Cheddar?\"");
 @tellroom(@location("%#"),"%#","   %n cuts to the chase.
 \"Well, let's keep it simple. How about Cheddar?\"");
 @tellroom(@location("%#"),"","   \"Well, I'm afraid we don't get much
 call for it around these parts.\"");
 @tell("%#","   You're flabbergasted. \"No call for it?
 It's the single most popular cheese in the world!\"");
 @tellroom(@location("%#"),"%#","   %n's flabbergasted. \"No call for it?
 It's the single most popular cheese in the world!\"");
 @tellroom(@location("%#"),"",@print(
 "   \"Not round these parts, ", @call(11433,"sir"),
 ",\" says ", @call(11433,"mgr"), " with a straight face."));
 @s("phase",32); @s("asked_cheddar",1);

// Try to get the player to ask for "most popular cheese"
// He'll be stuck here until he does.
@field #11433 = do_cheese_32 :
 @tell("%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" you ask."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"Any ", @g("the_cheese"), "?\" %n asks."));
 @tellroom(@location("%#"),"",@print(
 "   \"No.\" Then ", @call(11433,"mgr"),
 " prompts, \"Don't you want to ask me what the most popular cheese is?\""));
 @s(@print("asked_",@g("ch")),1);

@field #11433 = do_cheese_32b :
 @call(11433,"calc_ilchester");
 @tellroom(@location("%#"),"",@print(
 "   \"And pray, what is the most popular cheese round these parts?\"",
 "%c   \"", @g(@print("chname_",@g("ilchester"))), ", ", @call(11433,"sir"),
 ",\" says ", @call(11433,"mgr"), " proudly."));
 @tell("%#","   \"I see,\" you say evenly.");
 @tellroom(@location("%#"),"%#","   \"I see,\" %n says evenly.");
 @tellroom(@location("%#"),"",@print(
 "   \"Yes, ", @call(11433,"sir"),
 ". It's quite staggeringly popular in the manor.\"",
 "%c   \"Is it?\"%c   \"Yes ", @call(11433,"sir"),
 ",\" repeats ", @call(11433,"mgr"), ". \"It's our number-one seller.\""));
 @tell("%#","   \"Is it?\" you ask again.");
 @tellroom(@location("%#"),"%#","   \"Is it?\" %n asks again.");
 @tellroom(@location("%#"),"",@print(
 "   \"Yes, ", @call(11433,"sir"), ".\""));
 @tell("%#",@print("   \"", @g(@print("chname_",@g("ilchester"))),
 ", eh?\" you ask, just to be quite sure."));
 @tellroom(@location("%#"),"%#",@print("   \"",
 @g(@print("chname_",@g("ilchester"))),
 ", eh?\" %n asks, just to be quite sure."));
 @tellroom(@location("%#"),"",@print("   \"Right,\" ", @call(11433,"mgr"),
 " confirms."));
 @s("phase",33); @s("asked_popular",1);

// Player tried a cheese other than "Ilchester"!! Prompt him!!
@field #11433 = do_cheese_33 :
 @switch(@g("ch"),@g("ilchester"),@call(11433,"do_cheese_33b"),
 @tell("%#",@print("   Good god! Stop the insanity! Buy ",
 @g(@print("chname_",@g("ilchester"))), "!")));

// Player asked for "ilchester", yay!
@field #11433 = do_cheese_33b :
 @tellroom(@location("%#"),"",@print(
 "   \"OK, I'm game. Have you got any ", @g("the_cheese"),
 ", %s asked, expecting the answer 'no'?\"",
 "%c   \"I'll have a look, ", @call(11433,"sir"), " ... nnnnnnooooooooo.\""));
 @s("phase",34); @s(@print("asked_",@g("ch")),1);
 @tell("%#",
 "   \"It's not much of a cheese shop really, is it?\" you observe.");
 @tellroom(@location("%#"),"%#",
 "   \"It's not much of a cheese shop really, is it?\" %n observes.");
 @tellroom(@location("%#"),"",@print(
 "   \"Finest in the district, ", @call(11433,"sir"),
 ",\" ", @call(11433,"mgr"), " claims."));
 @call(11429,"dance");
 @tell("%#",
 "   \"And what leads you to that conclusion?\" you ask.");
 @tellroom(@location("%#"),"%#",
 "   \"And what leads you to that conclusion?\" %n asks.");
 @tellroom(@location("%#"),"",@print(
 "   \"Well,\" ", @call(11433,"mgr"), " sputters, \"it's so clean.\""));
 @tell("%#",
 "   \"Well,\" you say, \"it's certainly uncontaminated by cheese.\"");
 @tellroom(@location("%#"),"%#",
 "   \"Well,\" %n says, \"it's certainly uncontaminated by cheese.\"");

@field #11433 = do_cheese_34 :
 @tell("%#",@print(
 "   \"", @g("the_cheese"), "?\", you ask, without any real hope."));
 @tellroom(@location("%#"),"%#",@print(
 "   \"", @g("the_cheese"), "?\", %n asks, without any real hope."));
 @s(@print("asked_",@g("ch")),1);
 @call(11433,"calc_limburger");
 @tellroom(@location("%#"),"",@print(
 "   \"Sorry,\" says ", @call(11433,"mgr"),
 ". Then he points out, \"You haven't asked me about ",
 @g(@print("chname_",@g("limburger"))), ", ", @call(11433,"sir"), ".\""));
 @tell("%#","   You hesitate. \"Is it worth it?\"");
 @tellroom(@location("%#"),"%#","   %n looks doubtful. \"Is it worth it?\"");
 @tellroom(@location("%#"),"","   \"Could be,\" he says temptingly.");
 @s("phase",35); 

// Player tried a cheese other than "Limburger"!! Prompt him!!
@field #11433 = do_cheese_35 :
 @switch(@g("ch"),@g("limburger"),@call(11433,"do_cheese_35b"),
 @tell("%#",@print("   But the shopkeeper might have ",
 @g(@print("chname_",@g("limburger"))), "! Don't drag this out any longer!")));

// Player asked for "Limburger"! Yay!
@field #11433 = do_cheese_35b :
 @tell("%#",@print(
 "   You ask, \"Have you got any ", @g("the_cheese"), "?\""));
 @tellroom(@location("%#"),"%#",@print(
 "   %n asks, \"Have you got any ", @g("the_cheese"), "?\""));
 @tellroom(@location("%#"),"",@print("   \"No.\"
 %c   \"No, that figures. It was pretty predictable really. It was an act of
 pure optimism to pose the question in the first place. Tell me something,
 do you have any cheese at all?\"
 %c   \"Yes, ", @call(11433,"sir"), ",\" says ", @call(11433,"mgr"), "."));
 @s("phase",36); @s(@print("asked_",@g("ch")),1);

// Prompt the player to ASK FOR ANY CHEESE
@field #11433 = do_cheese_36 :
 @switch(@g("ch"),@g("any_cheese"),@call(11433,"do_cheese_36b"),
 @tell("%#",@print("   After all you've been through, do you *really*
 believe there's any cheese at all here? Ask ", @call(11433,"mgr"),
 " for 'any cheese'.")));

@field #11433 = do_cheese_36b :
 @tell("%#",@print("   You calmly tell ", @call(11433,"mgr"),
 ", \"Now I'm going to ask you that question once more, and if you say 'no'
 I'm going to shoot you through the head. Now, do you have any cheese
 at all?\"%c   \"No.\"
 %c   You draw a gun, and shoot the pathetic creature:%c      *** BANG! ***"));
 @tellroom(@location("%#"),"%#",@print(
 "   %n calmly tells ", @call(11433,"mgr"),
 ", \"Now I'm going to ask you that question once more, and if you say 'no'
 I'm going to shoot you through the head. Now, do you have any cheese
 at all?\"%c   \"No.\"
 %c   %n draws a gun, and shoots the pathetic creature:%c      *** BANG! ***"));
 @switch(@getfield(11429,"isloud"),1,@tellroom(@location("%#"),"",
 "   (the music stops)"));
 @tell("%#",@print("   The body falls to the floor. You shake your head.
 \"What a senseless waste of human life.\"",
 @switch(@getfield(11429,"isloud"),1,
 " The dancers beat a hasty retreat out the door.")));
 @tellroom(@location("%#"),"%#",@print(
 "   The body falls to the floor. %n shakes %p head.
 \"What a senseless waste of human life.\"",
 @switch(@getfield(11429,"isloud"),1,
 " The dancers beat a hasty retreat out the door.")));
 @setfield(11429,"isloud",0);
 @s("isalive",0);
 @switch(@g("isnamed"),1,@s("name",@g("name_2")),@s("name",@g("name_3")));
 @s("win_%#","%#");

Wensleydale's non-cheese topics

@field #11433 = lu_handbell : lu_bell
@field #11433 = lu_hand_bell : lu_bell
@field #11433 = lu_bell :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the handbell. \"C'est Michelle, my bell,\" he says proudly."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the handbell. \"C'est Michelle, my bell,\" he says proudly."));

// This is an in-joke. Don't worry if you don't get it.
@field #11433 = lu_her_breasts : lu_breasts
@field #11433 = lu_breast : lu_breasts
@field #11433 = lu_breasts :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about her breasts. \"It wasn't me, ", @call(11433,"sir"),
 ". I never even knew she had breasts,\" he says."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about her breasts. \"It wasn't me, ", @call(11433,"sir"),
 ". I never even knew she had breasts,\" he says."));

@field #11433 = lu_her : lu_cat
@field #11433 = lu_cat :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the cat. \"I got her from a cat detector van.\""));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the cat. \"I got her from a cat detector van.\""));

@field #11433 = lu_place : lu_cheeseshop
@field #11433 = lu_shop : lu_cheeseshop
@field #11433 = lu_cheeseshop :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the cheeseshop. \"Finest in the district,\" he claims."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the cheeseshop. \"Finest in the district,\" he claims."));

@field #11433 = lu_counter :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the counter. \"Have you noticed how clean it is?\""));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the counter. \"Have you noticed how clean it is?\""));

@field #11433 = lu_dancing : lu_dancers
@field #11433 = lu_men : lu_dancers
@field #11433 = lu_dancers :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the dancers. \"They seem to be here all the time,
 ever since we got licensed for public dancing. Adds a bit of local
 colour to the place, wouldn't you say?\" he says."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the dancers. \"They seem to be here all the time,
 ever since we got licensed for public dancing. Adds a bit of local
 colour to the place, wouldn't you say?\" he says."));

@field #11433 = lu_davidw :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about DavidW. \"He's one of our best customers,\" he claims."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about DavidW. \"He's one of our best customers,\" he claims."));

@field #11433 = lu_mud : lu_district
@field #11433 = lu_ifmud : lu_district
@field #11433 = lu_general_area : lu_district
@field #11433 = lu_village : lu_district
@field #11433 = lu_area : lu_district
@field #11433 = lu_these_parts : lu_district
@field #11433 = lu_district :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the area. \"Blimey, you ask a lot of questions. I didn't
 expect the Spanish Inquisition,\" he says."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the area. \"Blimey, you ask a lot of questions. I didn't
 expect the Spanish Inquisition,\" he says."));
 @tellroom(@location("%#"),"","   Suddenly, four men in black robes leap
 into the shop! \"Nobody expects the Spanish Inquisition! Our chief weapons
 are... are... dammit, we're in the wrong sketch again.\"
 They turn around and march out.");

@field #11433 = lu_fudges : lu_fudge
@field #11433 = lu_fudge :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the fudges. \"I'm sorry, ", @call(11433,"sir"),
 ", but this is a cheeseshop. We don't have any fudges here,\" he says, miffed."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the fudges. \"I'm sorry, ", @call(11433,"sir"),
 ", but this is a cheeseshop. We don't have any fudges here,\" he says, miffed."));

@field #11433 = lu_owner : lu_himself
@field #11433 = lu_shopkeeper : lu_himself
@field #11433 = lu_man : lu_himself
@field #11433 = lu_himself :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about himself. \"Someday... I'd like to be... a lumberjack!\"
 he exclaims."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about himself. \"Someday... I'd like to be... a lumberjack!\"
 he exclaims."));

@field #11433 = lu_lounge :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the lounge. \"The Adventurer's Lounge, ", @call(11433,"sir"),
 "? Easiest place on the mud to get to. You can hardly push a button,
 rub a mirror, or swim in a pool in this place without falling into the lounge.\""));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the lounge. \"The Adventurer's Lounge, ", @call(11433,"sir"),
 "? Easiest place on the mud to get to. You can hardly push a button,
 rub a mirror, or swim in a pool in this place without falling into the lounge.\""));

@field #11433 = lu_lumberjack :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about being a lumberjack. \"I didn't want to work in a cheeseshop.
 I wanted to be a lumberjack. Leaping from tree to tree as they
 float down the mighty rivers of British Columbia...\""));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about being a lumberjack. \"I didn't want to work in a cheeseshop.
 I wanted to be a lumberjack. Leaping from tree to tree as they
 float down the mighty rivers of British Columbia...\""));
 @tellroom(@location("%#"),"","   His voice trails off as he
 realizes that no one's going to oblige him with the appropriate sound cue.");

@field #11433 = lu_myself : lu_me
@field #11433 = lu_me :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about yourself. He just smiles back at you."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about %r. The shopkeeper just smiles back at %o."));

@field #11433 = lu_python : lu_monty_python
@field #11433 = lu_monty_python :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about Monty Python. \"Who?\" he asks, all innocence."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about Monty Python. \"Who?\" he asks, all innocence."));

@field #11433 = lu_bouzouki : lu_music
@field #11433 = lu_music :
 @switch(@getfield(11429,"isloud"),1,@print(
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the music. \"I rather enjoy it. But I expect some music hater
 will tell them to shut up, sooner or later,\" he says.")),
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the music. \"I rather enjoy it. But I expect some music hater
 will tell them to shut up, sooner or later,\" he says."))
 ),@tell("%#","   You're no longer interested in the music,
 now that it's stopped."));

@field #11433 = lu_spanish : lu_spanish_inquisition
@field #11433 = lu_inquisition : lu_spanish_inquisition
@field #11433 = lu_spanish_inquisition :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the Spanish Inquistion. Before he can reply, a voice calls out:
 \"Bugger off. We're not doing that again.\""));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the Spanish Inquistion. Before he can reply, a voice calls out:
 \"Bugger off. We're not doing that again.\""));

@field #11433 = lu_viking :
 @tell("%#",@print("   You ask ", @call(11433,"mgr"),
 " about the Viking. \"Er, viking, ", @call(11433,"sir"),
 "?\" he says, solicitously."));
 @tellroom(@location("%#"),"%#",@print("   %n asks ", @call(11433,"mgr"),
 " about the Viking. \"Er, viking, ", @call(11433,"sir"),
 "?\" he says, solicitously."));

Phase helper functions

// Player chose a common cheese by name
// If this cheese has already been chosen, say so.
// Else use this cheese as if it was the randomly chosen cheese.
@field #11433 = chosen :
 @switch(@g(@print("asked_",@g("ch"))),
 0, @call(11433,"donext"),
 1, @print(
  @tell("%#",@print("   You've already tried ",
   @g(@print("chname_",@g("ch"))), ". Think of another cheese.")),
  @call(11449,"think")
 ));

// if Camembert, and the phase is less than 4
// -- then complain that it's too soon.
// else if Camembert, and successfully asked exactly once before
// -- then do phase 17
// else if Camembert, and successfully asked exactly twice before
// -- then do phase 18
// else if Camembert and the phase is less than 16
// -- then do phase 16
// else if Wensleydale
// -- then do phase 25
// else if Cheddar and the phase is less than 20
// -- then complain that it's too soon.
// else if Cheddar
// -- then do phase 31
// else if popular and the phase isn't 32
// -- then complain that you've never heard of it
// else if popular
// -- then do phase 32b
// else if any_cheese and the phase isn't 36
// -- then complain it's not the right time
// else if any_cheese
// -- then do phase 36b
// else do the current phase (as normal)
@field #11433 = donext :
 @s("the_cheese",@g(@print("chname_",@g("ch"))));
 @switch(@g("ch"),"camembert",@switch(1,
  @lt(@g("phase"),4), @call(11433,"too_early_camembert"),
  @eq(@g("camemflag"),1), @call(11433,"do_cheese_17"),
  @eq(@g("camemflag"),2), @call(11433,"do_cheese_18"),
  @lt(@g("phase"),16), @call(11433,"do_cheese_16"),
  @call(11433,@print("do_cheese_",@g("phase")))
  ),"wensleydale", @call(11433,"do_cheese_25"),
  "cheddar",@switch(1,
  @lt(@g("phase"),20), @call(11433,"too_early_cheddar"),
  @call(11433,"do_cheese_31")
  ),"popular",@switch(1,
  @eq(@g("phase"),32), @call(11433,"do_cheese_32b"),
  @call(11433,"too_early_popular")
  ),"any_cheese",@switch(1,
  @eq(@g("phase"),36), @call(11433,"do_cheese_36b"),
  @call(11433,"too_early_any_cheese")
  ), @call(11433,@print("do_cheese_",@g("phase")))
 );

// do this if the player specifically asks for camembert before phase 4
@field #11433 = too_early_camembert :
 @tell("%#","   You're about to ask for camembert, but then reconsider.
 You've hardly asked for any cheeses at all.
 Might there not be more exotic cheeses? You can always ask about
 camembert later, if the shop doesn't have your first few choices.");
 @call(11449,"think");

// do this if the player specifically asks for cheddar before phase 20
@field #11433 = too_early_cheddar :
 @tell("%#","   Asking for cheddar this early would be an admission
 of defeat. Surely a cheeseshop has more than just cheddar!
 Consider all the cheeses that a cheeseshop might have!");
 @call(11449,"think");

// do this if the player specifically asks for popular before prompted
@field #11433 = too_early_popular :
 @tell("%#","   Popular cheese? What gave you that notion?
 The shopkeeper hasn't mentioned anything like that yet.");
 @call(11449,"think");

// do this if the player specifically asks for any_cheese before prompted
@field #11433 = too_early_any_cheese :
 @tell("%#","   As a cheese connoisseur, it is beneath you to ask
 directly for \"any cheese at all\". It is for you to decide what
 cheese you want, not the shopkeeper's. Only in the most extreme
 circumstances, such as a cheeseshop with no cheese at all, would
 you consider asking such an audacious question.");
 @call(11449,"think");

// This list will start with the player's choice, unless he chose
// Camembert. Then nine other cheeses, followed by Camembert at the end.
@field #11433 = calc_camembert_list :
 @switch(@g("ch"),"camembert",@s("camembert_list",""),
  @print(@s("camembert_list",@print(@g(@print("chname_",@g("ch"))),", ")),
  @s("asked_ch",1)));
 @s("tmp",0);
 @fieldloop(11433,"asked_",@let("k",@substr("%f",6),@switch(1,
  @and(
   @lt(@g("tmp"),10), @eq(@g("asked_%k"),0),
   @not(@eq("%k","wensleydale")), @not(@eq("%k","popular")),
   @not(@eq("%k","cheddar")), @not(@eq("%k","camembert")),
   @not(@eq("%k","any_cheese"))
  ),@print(
   @s("camembert_list",@print(@g("camembert_list"),
    @g("chname_%k"), ", ")),
   @s("asked_%k",1),
   @s("tmp",@add(@g("tmp"),1))
  )
 )));
 @s("camembert_list",@print(@g("camembert_list"),"Camembert"));

// This will either be ilchester, or the ch of some other cheese
// if Ilchester was chosen earlier.
@field #11433 = calc_ilchester :
 @switch(@g("asked_ilchester"),0,@s("ilchester","ilchester"),@print(
 @s("tmp",0),
 @fieldloop(11433,"asked_",@let("k",@substr("%f",6),@switch(1,
  @and(
   @eq(@g("tmp"),0),@eq(@g("asked_%k"),0),
   @not(@eq("%k","wensleydale")), @not(@eq("%k","popular")),
   @not(@eq("%k","cheddar")), @not(@eq("%k","camembert")),
   @not(@eq("%k","any_cheese"))
  ),@print(@s("ilchester","%k"),@s("tmp",1))
 )))
 ));

// This will either be limburger, or the ch of some other cheese
// if Limburger was chosen earlier.
@field #11433 = calc_limburger :
 @switch(@g("asked_limburger"),0,@s("limburger","limburger"),@print(
 @s("tmp",0),
 @fieldloop(11433,"asked_",@let("k",@substr("%f",6),@switch(1,
  @and(
   @eq(@g("tmp"),0),@eq(@g("asked_%k"),0),
   @not(@eq("%k","wensleydale")), @not(@eq("%k","popular")),
   @not(@eq("%k","cheddar")), @not(@eq("%k","camembert")),
   @not(@eq("%k","any_cheese"))
  ),@print(@s("limburger","%k"),@s("tmp",1))
 )))
 ));

// Player has chosen a vague cheese, eg: goat cheese.
@field #11433 = fn_vague :
 @tell("%#",@print("   \"Any ", @g(@print("vchname_",@g("ch"))),
 "?\" you say."));
 @tellroom(@location("%#"),"%#",@print("   \"Any ",
 @g(@print("vchname_",@g("ch"))), "?\" %n says."));
 @tellroom(@location("%#"),"",@print(
 "   The owner almost looks apologetic. \"Er, could you be more specific, ",
 @call(11433,"sir"), "?\" he asks, unhelpfully."));

Wensleydale's cheese topics

@field #11433 = chname_appenzeller : Appenzeller
@field #11433 = lu_appenzeller : @s("ch","appenzeller");
 @call(11433,"chosen");

@field #11433 = chname_baylough : Baylough
@field #11433 = lu_baylough : @s("ch","baylough"); @call(11433,"chosen");

@field #11433 = chname_bel_paese : Bel Paese
@field #11433 = lu_bel : lu_bel_paese
@field #11433 = lu_bel-paese : lu_bel_paese
@field #11433 = lu_bel-pease : lu_bel_paese
@field #11433 = lu_bel_pease : lu_bel_paese
@field #11433 = lu_bel_paese : @s("ch","bel_paese"); @call(11433,"chosen");

@field #11433 = chname_bishop : Bishop Kennedy
@field #11433 = lu_bishop_kennedy : lu_bishop
@field #11433 = lu_kennedy : lu_bishop
@field #11433 = lu_bishop-kennedy : lu_bishop
@field #11433 = lu_bishop : @s("ch","bishop"); @call(11433,"chosen");

@field #11433 = chname_bleu : Bleu
@field #11433 = lu_bleu_cheese : lu_bleu
@field #11433 = lu_blue : lu_bleu
@field #11433 = lu_bleu : @s("ch","bleu"); @call(11433,"chosen");

@field #11433 = chname_blue_castello : Blue Castello
@field #11433 = lu_castello : lu_blue_castello
@field #11433 = lu_blue_castello : @s("ch","blue_castello");
 @call(11433,"chosen");

@field #11433 = chname_bonchester : Bonchester
@field #11433 = lu_bonchester : @s("ch","bonchester"); @call(11433,"chosen");

@field #11433 = chname_bonnet : Bonnet
@field #11433 = lu_bonnet : @s("ch","bonnet"); @call(11433,"chosen");

@field #11433 = chname_boursin : Boursin
@field #11433 = lu_boursin : @s("ch","boursin"); @call(11433,"chosen");

@field #11433 = chname_bresse-bleue : Bresse-Bleue
@field #11433 = lu_bresse : lu_bresse-bleue
@field #11433 = lu_bleue : lu_bresse-bleue
@field #11433 = lu_bresse_bleue : lu_bresse-bleue
@field #11433 = lu_bresse-bleue : @s("ch","bresse-bleue");
 @call(11433,"chosen");

@field #11433 = chname_brie : Brie
@field #11433 = lu_brie : @s("ch","brie"); @call(11433,"chosen");

@field #11433 = chname_brodick : Brodick
@field #11433 = lu_brodick : @s("ch","brodick"); @call(11433,"chosen");

@field #11433 = chname_brodick_blue : Brodick Blue
@field #11433 = lu_brodick_blue : @s("ch","brodick_blue");
 @call(11433,"chosen");

@field #11433 = chname_cabrales : Cabrales
@field #11433 = lu_cabrales : @s("ch","cabrales"); @call(11433,"chosen");

@field #11433 = chname_caerphilly : Caerphilly
@field #11433 = lu_caerphilly : @s("ch","caerphilly"); @call(11433,"chosen");

@field #11433 = chname_caithness : Caithness
@field #11433 = lu_caithness : @s("ch","caithness"); @call(11433,"chosen");

@field #11433 = chname_camembert : Camembert
@field #11433 = lu_camenbert : lu_camembert
@field #11433 = lu_cam : lu_camembert
@field #11433 = lu_camembert : @s("ch","camembert"); @call(11433,"chosen");

@field #11433 = chname_caboc : Caboc
@field #11433 = lu_caboc : @s("ch","caboc"); @call(11433,"chosen");

@field #11433 = chname_carre : Carre-de-L'Est
@field #11433 = lu_carre-de-l'est : lu_carre
@field #11433 = lu_carre_de_l'est : lu_carre
@field #11433 = lu_de-l'est : lu_carre
@field #11433 = lu_de_l'est : lu_carre
@field #11433 = lu_carre : @s("ch","carre"); @call(11433,"chosen");

@field #11433 = chname_cheddar : Cheddar
@field #11433 = lu_chedder : lu_cheddar
@field #11433 = lu_american : lu_cheddar
@field #11433 = lu_american_cheddar : lu_cheddar
@field #11433 = lu_canadian : lu_cheddar
@field #11433 = lu_canadian_cheddar : lu_cheddar
@field #11433 = lu_cheddar : @s("ch","cheddar"); @call(11433,"chosen");

@field #11433 = chname_cheshire : Cheshire
@field #11433 = lu_cheshire : @s("ch","cheshire"); @call(11433,"chosen");

@field #11433 = chname_colby : Colby
@field #11433 = lu_colby : @s("ch","colby"); @call(11433,"chosen");

@field #11433 = chname_comte : Comte
@field #11433 = lu_comte : @s("ch","comte"); @call(11433,"chosen");

@field #11433 = chname_coolea : Coolea
@field #11433 = lu_coolea : @s("ch","coolea"); @call(11433,"chosen");

@field #11433 = chname_coulommiers : Coulommiers
@field #11433 = lu_coulommier : lu_coulommiers
@field #11433 = lu_coulommiers : @s("ch","coulommiers");
 @call(11433,"chosen");

@field #11433 = chname_crowdie : Crowdie
@field #11433 = lu_crowdie : @s("ch","crowdie"); @call(11433,"chosen");

@field #11433 = chname_czech : Czechoslovakian Sheep's Milk Cheese
@field #11433 = lu_czechoslov : lu_czech
@field #11433 = lu_czechoslovakian : lu_czech
@field #11433 = lu_czechoslovakian_sheep's_milk : lu_czech
@field #11433 = lu_czechoslovakian_sheep's_milk_cheese : lu_czech
@field #11433 = lu_csmc : lu_czech
@field #11433 = lu_czech : @s("ch","czech"); @call(11433,"chosen");

@field #11433 = chname_danish_blue : Danish Blue
@field #11433 = lu_danish : lu_danish_blue
@field #11433 = lu_danish_blue : @s("ch","danish_blue");
 @call(11433,"chosen");

@field #11433 = chname_danish_fimboe : Danish Fimboe
@field #11433 = lu_fimboe : lu_danish_fimboe
@field #11433 = lu_danish_fimboe : @s("ch","danish_fimboe");
 @call(11433,"chosen");

@field #11433 = chname_devon : Devon Cream
@field #11433 = lu_devon_cream : lu_devon
@field #11433 = lu_devon : @s("ch","devon"); @call(11433,"chosen");

@field #11433 = chname_dorset : Dorset Blue Vinney
@field #11433 = lu_dorset_blue_vinney : lu_dorset
@field #11433 = lu_blue_vinney : lu_dorset
@field #11433 = lu_dorset_blue : lu_dorset
@field #11433 = lu_dbv : lu_dorset
@field #11433 = lu_dorset : @s("ch","dorset"); @call(11433,"chosen");

@field #11433 = chname_dgloucester : Double Gloucester
@field #11433 = lu_dg : lu_dgloucester
@field #11433 = lu_double_gloucester : lu_dgloucester
@field #11433 = lu_double : lu_dgloucester
@field #11433 = lu_gloucester : lu_dgloucester
@field #11433 = lu_dgloucester : @s("ch","dgloucester");
 @call(11433,"chosen");

@field #11433 = chname_dunburra : Dunburra
@field #11433 = lu_dunburra : @s("ch","dunburra"); @call(11433,"chosen");

@field #11433 = chname_dunlop : Dunlop
@field #11433 = lu_dunlop : @s("ch","dunlop"); @call(11433,"chosen");

@field #11433 = chname_dunsyre : Dunsyre Blue
@field #11433 = lu_dunsyre_blue : lu_dunsyre
@field #11433 = lu_dunsyre : @s("ch","dunsyre"); @call(11433,"chosen");

@field #11433 = chname_edam : Edam
@field #11433 = lu_dutch_edam : lu_edam
@field #11433 = lu_edam : @s("ch","edam"); @call(11433,"chosen");

@field #11433 = chname_emmental : Emmental
@field #11433 = lu_swiss_emmental : lu_emmental
@field #11433 = lu_emmenthal : lu_emmental
@field #11433 = lu_emmental : @s("ch","emmental"); @call(11433,"chosen");

@field #11433 = chname_swiss : Swiss
@field #11433 = lu_swiss_cheese : lu_swiss
@field #11433 = lu_swiss : @s("ch","swiss"); @call(11433,"chosen");

@field #11433 = chname_feta : Feta
@field #11433 = lu_feta_cheese : lu_feta
@field #11433 = lu_feta : @s("ch","feta"); @call(11433,"chosen");

@field #11433 = chname_finlandia : Finlandia Swiss
@field #11433 = lu_finlandia_swiss : lu_finlandia
@field #11433 = lu_finlandia : @s("ch","finlandia"); @call(11433,"chosen");

@field #11433 = chname_fontal : Fontal
@field #11433 = lu_fontal : @s("ch","fontal"); @call(11433,"chosen");

@field #11433 = chname_fontina : Fontina
@field #11433 = lu_fontina : @s("ch","fontina"); @call(11433,"chosen");

@field #11433 = chname_fontina_val : Fontina Val d'Aosta
@field #11433 = lu_fontina_val_d'aosta : lu_fontina_val
@field #11433 = lu_fontina_val : @s("ch","fontina_val");
 @call(11433,"chosen");

@field #11433 = chname_gjetost : Gjetost
@field #11433 = lu_gjetost : @s("ch","gjetost"); @call(11433,"chosen");

@field #11433 = chname_gorgonzola : Gorgonzola
@field #11433 = lu_gorgonzola : @s("ch","gorgonzola"); @call(11433,"chosen");

@field #11433 = chname_gouda : Gouda
@field #11433 = lu_dutch_gouda : lu_gouda
@field #11433 = lu_gouda : @s("ch","gouda"); @call(11433,"chosen");

@field #11433 = chname_grana : Grana
@field #11433 = lu_grana : @s("ch","grana"); @call(11433,"chosen");

@field #11433 = chname_gruyere : Gruyere
@field #11433 = lu_guyere : lu_gruyere
@field #11433 = lu_gruyere : @s("ch","gruyere"); @call(11433,"chosen");

@field #11433 = chname_gubbeen : Gubbeen
@field #11433 = lu_gubbeen : @s("ch","gubbeen"); @call(11433,"chosen");

@field #11433 = chname_halloumi : Halloumi
@field #11433 = lu_halloumi : @s("ch","halloumi"); @call(11433,"chosen");

@field #11433 = chname_havarti : Havarti
@field #11433 = lu_cream_havarti : lu_havarti
@field #11433 = lu_havarti : @s("ch","havarti"); @call(11433,"chosen");

@field #11433 = chname_howgate : Howgate
@field #11433 = lu_howgate : @s("ch","howgate"); @call(11433,"chosen");

@field #11433 = chname_ilchester : Ilchester
@field #11433 = lu_ilchester : @s("ch","ilchester"); @call(11433,"chosen");

@field #11433 = chname_isle : Isle of Mull
@field #11433 = lu_isle_of_mull : lu_isle
@field #11433 = lu_mull : lu_isle
@field #11433 = lu_isle : @s("ch","isle"); @call(11433,"chosen");

@field #11433 = chname_iverlock : Iverlock
@field #11433 = lu_iverlock : @s("ch","iverlock"); @call(11433,"chosen");

@field #11433 = chname_jermi : Jermi Torte
@field #11433 = lu_jermi_torte : lu_jermi
@field #11433 = lu_jermi : @s("ch","jermi"); @call(11433,"chosen");

@field #11433 = chname_kasseri : Kasseri
@field #11433 = lu_kasseri : @s("ch","kasseri"); @call(11433,"chosen");

// DEL 
@field #11433 = chname_kefalotyri : Kefalotyri
@field #11433 = lu_kefalotyri : @s("ch","kefalotyri"); @call(11433,"chosen");

@field #11433 = chname_kelsae : Kelsae
@field #11433 = lu_kelsea : lu_kelsae
@field #11433 = lu_kelsae : @s("ch","kelsae"); @call(11433,"chosen");

@field #11433 = chname_knockalara : Knockalara
@field #11433 = lu_knockalara : @s("ch","knockalara"); @call(11433,"chosen");

@field #11433 = chname_lanark_blue : Lanark Blue
@field #11433 = lu_lanark : lu_lanark_blue
@field #11433 = lu_lanark_blue : @s("ch","lanark_blue");
 @call(11433,"chosen");

@field #11433 = chname_lancashire : Lancashire
@field #11433 = lu_lancashire : @s("ch","lancashire");
 @call(11433,"chosen");

@field #11433 = chname_lappi : Lappi
@field #11433 = lu_lappi : @s("ch","lappi"); @call(11433,"chosen");

@field #11433 = chname_leyden : Leyden
@field #11433 = lu_leyden : @s("ch","leyden"); @call(11433,"chosen");

@field #11433 = chname_limburger : Limburger
@field #11433 = lu_limberger : lu_limburger
@field #11433 = lu_limburger : @s("ch","limburger"); @call(11433,"chosen");

@field #11433 = chname_liptauer : Liptauer
@field #11433 = lu_liptauer : @s("ch","liptauer"); @call(11433,"chosen");

@field #11433 = chname_loch_arthur : Loch Arthur
@field #11433 = lu_loch : lu_loch_arthur
@field #11433 = lu_arthur : lu_loch_arthur
@field #11433 = lu_loch_arthur : @s("ch","loch_arthur");
 @call(11433,"chosen");

@field #11433 = chname_maasdam : Maasdam
@field #11433 = lu_maasdam : @s("ch","maasdam"); @call(11433,"chosen");

@field #11433 = chname_mascarpone : Mascarpone
@field #11433 = lu_mascarpone : @s("ch","mascarpone"); @call(11433,"chosen");

@field #11433 = chname_mimolette : Mimolette
@field #11433 = lu_mimolette : @s("ch","mimolette"); @call(11433,"chosen");

@field #11433 = chname_mizithra : Mizithra
@field #11433 = lu_mizithra : @s("ch","mizithra"); @call(11433,"chosen");

@field #11433 = chname_monterey_jack : Monterey Jack
@field #11433 = lu_pepper_jack : lu_monterey_jack
@field #11433 = lu_monteray_jack : lu_monterey_jack
@field #11433 = lu_monteray : lu_monterey_jack
@field #11433 = lu_monterey : lu_monterey_jack
@field #11433 = lu_jack : lu_monterey_jack
@field #11433 = lu_monterey_jack : @s("ch","monterey_jack");
 @call(11433,"chosen");

@field #11433 = chname_morbier : Morbier
@field #11433 = lu_morbier : @s("ch","morbier"); @call(11433,"chosen");

@field #11433 = chname_mozzarella : Mozzarella
@field #11433 = lu_mozza : lu_mozzarella
@field #11433 = lu_mozzarella : @s("ch","mozzarella"); @call(11433,"chosen");

@field #11433 = chname_munster : Munster
@field #11433 = lu_muenster : lu_munster
@field #11433 = lu_munster : @s("ch","munster"); @call(11433,"chosen");

@field #11433 = chname_njarls : Norwegian Jarlsberger
@field #11433 = lu_norwegian : lu_njarls
@field #11433 = lu_norwegian_jarlsberger : lu_njarls
@field #11433 = lu_norwegian_jarlsberg : lu_njarls
@field #11433 = lu_jarlsberger : lu_njarls
@field #11433 = lu_jarlsberg : lu_njarls
@field #11433 = lu_njarls : @s("ch","njarls"); @call(11433,"chosen");

@field #11433 = chname_orla : Orla
@field #11433 = lu_orla : @s("ch","orla"); @call(11433,"chosen");

@field #11433 = chname_parmesan : Parmesan
@field #11433 = lu_parmasan : lu_parmesan
@field #11433 = lu_parmesan : @s("ch","parmesan"); @call(11433,"chosen");

@field #11433 = chname_pecorino : Pecorino Romano
@field #11433 = lu_pecorino_romano : lu_pecorino
@field #11433 = lu_pecorino : @s("ch","pecorino"); @call(11433,"chosen");

@field #11433 = chname_pentland : Pentland
@field #11433 = lu_pentland : @s("ch","pentland"); @call(11433,"chosen");

@field #11433 = chname_reggiano : Parmigiano Reggiano
@field #11433 = lu_parmigiano_reggiano : lu_reggiano
@field #11433 = lu_parmigiano : lu_reggiano
@field #11433 = lu_reggiano : @s("ch","reggiano"); @call(11433,"chosen");

@field #11433 = chname_perle : Perle de Champagne
@field #11433 = lu_perle_de_champagne : lu_perle
@field #11433 = lu_champagne : lu_perle
@field #11433 = lu_perle : @s("ch","perle"); @call(11433,"chosen");

@field #11433 = chname_pippo : Pippo Creme
@field #11433 = lu_pippo_creme : lu_pippo
@field #11433 = lu_pippo : @s("ch","pippo"); @call(11433,"chosen");

@field #11433 = chname_pont-leveque : Pont-l'Eveque
@field #11433 = lu_pont-l'eveque : lu_pont-leveque
@field #11433 = lu_pont_l'eveque : lu_pont-leveque
@field #11433 = lu_port-l'eveque : lu_pont-leveque
@field #11433 = lu_port_l'eveque : lu_pont-leveque
@field #11433 = lu_pont : lu_pont-leveque
@field #11433 = lu_l'eveque : lu_pont-leveque
@field #11433 = lu_eveque : lu_pont-leveque
@field #11433 = lu_pont-leveque : @s("ch","pont-leveque");
 @call(11433,"chosen");

@field #11433 = chname_port-salut : Port Salut
@field #11433 = lu_port_salut : lu_port-salut
@field #11433 = lu_port : lu_port-salut
@field #11433 = lu_salut : lu_port-salut
@field #11433 = lu_port-salut : @s("ch","port-salut"); @call(11433,"chosen");

@field #11433 = chname_pouligny : Pouligny-Saint-Pierre
@field #11433 = lu_pouligny-saint-pierre : lu_pouligny
@field #11433 = lu_pouligny_saint_pierre : lu_pouligny
@field #11433 = lu_pouligny_saint-pierre : lu_pouligny
@field #11433 = lu_pouligny-st-pierre : lu_pouligny
@field #11433 = lu_pouligny_st_pierre : lu_pouligny
@field #11433 = lu_pouligny_st-pierre : lu_pouligny
@field #11433 = lu_saint-pierre : lu_pouligny
@field #11433 = lu_saint_pierre : lu_pouligny
@field #11433 = lu_st-pierre : lu_pouligny
@field #11433 = lu_st_pierre : lu_pouligny
@field #11433 = lu_pierre : lu_pouligny
@field #11433 = lu_pouligny : @s("ch","pouligny"); @call(11433,"chosen");

@field #11433 = chname_provolone : Provolone
@field #11433 = lu_provolone : @s("ch","provolone"); @call(11433,"chosen");

@field #11433 = chname_raclette : Raclette
@field #11433 = lu_raclette : @s("ch","raclette"); @call(11433,"chosen");

@field #11433 = chname_reblochon : Reblochon
@field #11433 = lu_reblochon : @s("ch","reblochon"); @call(11433,"chosen");

@field #11433 = chname_red_leicester : Red Leicester
@field #11433 = lu_leicester : lu_red_leicester
@field #11433 = lu_red_leicester : @s("ch","red_leicester");
 @call(11433,"chosen");

@field #11433 = chname_red_windsor : Red Windsor
@field #11433 = lu_windsor : lu_red_windsor
@field #11433 = lu_red_windsor : @s("ch","red_windsor");
 @call(11433,"chosen");

@field #11433 = chname_reggianito : Reggianito
@field #11433 = lu_reggianito : @s("ch","reggianito"); @call(11433,"chosen");

@field #11433 = chname_ricotta : Ricotta
@field #11433 = lu_ricotta : @s("ch","ricotta"); @call(11433,"chosen");

@field #11433 = chname_ricotta_salata : Ricotta Salata
@field #11433 = lu_salata : lu_ricotta_salata
@field #11433 = lu_ricotta_salata : @s("ch","ricotta_salata");
 @call(11433,"chosen");

@field #11433 = chname_rocquefort : Rocquefort
@field #11433 = lu_rocquefort : @s("ch","rocquefort"); @call(11433,"chosen");

@field #11433 = chname_romano : Romano
@field #11433 = lu_romano : @s("ch","romano"); @call(11433,"chosen");

@field #11433 = chname_saga : Saga
@field #11433 = lu_saga : @s("ch","saga"); @call(11433,"chosen");

@field #11433 = chname_sage_derby : Sage Derby
@field #11433 = lu_sage : lu_sage_derby
@field #11433 = lu_derby : lu_sage_derby
@field #11433 = lu_sage_derby : @s("ch","sage_derby"); @call(11433,"chosen");

@field #11433 = chname_sardo : Sardo
@field #11433 = lu_sardo : @s("ch","sardo"); @call(11433,"chosen");

@field #11433 = chname_savoyard : Savoyard
@field #11433 = lu_savoyard : @s("ch","savoyard"); @call(11433,"chosen");

@field #11433 = chname_smoked_austrian : Smoked Austrian
@field #11433 = lu_austrian : lu_smoked_austrian
@field #11433 = lu_smoked_austrian : @s("ch","smoked_austrian");
 @call(11433,"chosen");

@field #11433 = chname_st-andre : Saint-Andre
@field #11433 = lu_saint-andre : lu_st-andre
@field #11433 = lu_saint_andre : lu_st-andre
@field #11433 = lu_st_andre : lu_st-andre
@field #11433 = lu_andre : lu_st-andre
@field #11433 = lu_st-andre : @s("ch","st-andre"); @call(11433,"chosen");

@field #11433 = chname_st-andrews : Saint-Andrews
@field #11433 = lu_saint-andrews : lu_st-andrews
@field #11433 = lu_saint_andrews : lu_st-andrews
@field #11433 = lu_st_andrews : lu_st-andrews
@field #11433 = lu_andrews : lu_st-andrews
@field #11433 = lu_st-andrews : @s("ch","st-andrews"); @call(11433,"chosen");

@field #11433 = chname_st-marcellin : Saint-Marcellin
@field #11433 = lu_saint-marcellin : lu_st-marcellin
@field #11433 = lu_saint_marcellin : lu_st-marcellin
@field #11433 = lu_st_marcellin : lu_st-marcellin
@field #11433 = lu_marcellin : lu_st-marcellin
@field #11433 = lu_st-marcellin : @s("ch","st-marcellin");
 @call(11433,"chosen");

@field #11433 = chname_st-nectaire : Saint-Nectaire
@field #11433 = lu_saint-nectaire : lu_st-nectaire
@field #11433 = lu_saint_nectaire : lu_st-nectaire
@field #11433 = lu_st_nectaire : lu_st-nectaire
@field #11433 = lu_nectaire : lu_st-nectaire
@field #11433 = lu_st-nectaire : @s("ch","st-nectaire");
 @call(11433,"chosen");

@field #11433 = chname_st-paulin : Saint-Paulin
@field #11433 = lu_saint-paulin : lu_st-paulin
@field #11433 = lu_saint_paulin : lu_st-paulin
@field #11433 = lu_st_paulin : lu_st-paulin
@field #11433 = lu_paulin : lu_st-paulin
@field #11433 = lu_st-paulin : @s("ch","st-paulin"); @call(11433,"chosen");

@field #11433 = chname_stichill : Stichill
@field #11433 = lu_stichill : @s("ch","stichill"); @call(11433,"chosen");

@field #11433 = chname_stilton : Stilton
@field #11433 = lu_stilton : @s("ch","stilton"); @call(11433,"chosen");

@field #11433 = chname_strath : Strathkinness
@field #11433 = lu_strathkinness : lu_strath
@field #11433 = lu_strath : @s("ch","strath"); @call(11433,"chosen");

@field #11433 = chname_swinzie : Swinzie
@field #11433 = lu_swinzie : @s("ch","swinzie"); @call(11433,"chosen");

@field #11433 = chname_taleggio : Taleggio
@field #11433 = lu_taleggio : @s("ch","taleggio"); @call(11433,"chosen");

@field #11433 = chname_teviotdale : Teviotdale
@field #11433 = lu_teviotdale : @s("ch","teviotdale"); @call(11433,"chosen");

@field #11433 = chname_tilsit : Tilsit
@field #11433 = lu_tilsit : @s("ch","tilsit"); @call(11433,"chosen");

@field #11433 = chname_tomme : Tomme de Savoie
@field #11433 = lu_tomme_de_savoie : lu_tomme
@field #11433 = lu_de_savoie : lu_tomme
@field #11433 = lu_savoie : lu_tomme
@field #11433 = lu_tomme : @s("ch","tomme"); @call(11433,"chosen");

@field #11433 = chname_turunmaa : Turunmaa
@field #11433 = lu_turunmaa : @s("ch","turunmaa"); @call(11433,"chosen");

@field #11433 = chname_venez : Venezuelan Beaver Cheese
@field #11433 = lu_vbc : lu_venez
@field #11433 = lu_venezuelan : lu_venez
@field #11433 = lu_venezuelan_beaver : lu_venez
@field #11433 = lu_venezuelan_beaver_cheese : lu_venez
@field #11433 = lu_beaver : lu_venez
@field #11433 = lu_venez : @s("ch","venez"); @call(11433,"chosen");

@field #11433 = chname_wensleydale : Wensleydale
@field #11433 = lu_wensleydale : @s("ch","wensleydale");
 @call(11433,"chosen");

@field #11433 = chname_white_stilton : White Stilton
@field #11433 = lu_white_stilton : @s("ch","white_stilton");
 @call(11433,"chosen");

@field #11433 = chname_cottage : Cottage Cheese
@field #11433 = lu_cottage_cheese : lu_cottage
@field #11433 = lu_cottage : @s("ch","cottage"); @call(11433,"chosen");

@field #11433 = vchname_chevre : chevre
@field #11433 = lu_chevre : @s("ch","chevre"); @call(11433,"fn_vague");

@field #11433 = vchname_goat : goat cheese
@field #11433 = lu_goat_cheese : lu_goat
@field #11433 = lu_goat : @s("ch","goat"); @call(11433,"fn_vague");

@field #11433 = vchname_cream : cream cheese
@field #11433 = lu_cream_cheese : lu_cream
@field #11433 = lu_cream : @s("ch","cream"); @call(11433,"fn_vague");

@field #11433 = vchname_cheese : cheese
@field #11433 = lu_ : lu_cheese
@field #11433 = lu_cheese : @s("ch","cheese");
 @switch(@g("ch0flag"),0,@call(11433,"do_cheese_0"),@call(11433,"fn_vague"));

@field #11433 = chname_popular : most popular cheese
@field #11433 = lu_popular_cheese : lu_popular
@field #11433 = lu_most_popular : lu_popular
@field #11433 = lu_most_popular_cheese : lu_popular
@field #11433 = lu_popular : @s("ch","popular"); @call(11433,"chosen");

@field #11433 = chname_any_cheese : any cheese at all
@field #11433 = lu_really : lu_any_cheese
@field #11433 = lu_any : lu_any_cheese
@field #11433 = lu_any_cheese_at_all : lu_any_cheese
@field #11433 = lu_any_cheese : @s("ch","any_cheese"); @call(11433,"chosen");

buy (dbref #11450)

Provided as a synonym for ASK MAN ABOUT <TOPIC>. Players shouldn't notice any difference between the two formats.

@action buy;buy *;purchase;purchase *;select *;choose *;ask owner for *;
 ask shopkeeper for *;ask man for *;ask wensleydale for *;
 ask for *;ask about * = #11433 : nowhere
@set #11450 = puzzle
@set #11450 = dark
@field #11450 = varobj : 11433
@succ #11450 =
 @call(11429,"dance"); @switch(0,
 @g("ishere"),@tell("%#","   I don't see who you want to talk to."),
 @g("isalive"),@tell("%#","   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."),
 @print(@s("topic","%4"),
 @s("x0",""), @strloop("%0","x",@switch("%x"," ",
 @s("x0",@print(@g("x0"),"_")),@s("x0",@print(@g("x0"),"%x")))),
 @switch(@substr(@g("x0"),0,2),"a_",@s("x0",@substr(@g("x0"),2))),
 @switch(@substr(@g("x0"),0,3),"an_",@s("x0",@substr(@g("x0"),3))),
 @switch(@substr(@g("x0"),0,4),"the_",@s("x0",@substr(@g("x0"),4))),
 @s("x0",@print("lu_",@g("x0"))),
 @switch(@substr(@g(@g("x0")),0,3), "lu_", @s("x0",@g(@g("x0")))),
 @switch(@g(@g("x0")),"",@call(11433,"talk_default"),@call(11433,@g("x0")))
 ));

think (dbref #11449)

Problem: Few mortals know as many cheese names as Mousebender. Solution: Instead of posting a sign listing 120 cheeses, or letting the player type "buy cheese" 30 times (instead of specific names), I decided to add a "think" command, to let the player think up a handful of new cheese names. Once I had the think code written, it was natural to call it from several other places in the code, eg: when the player asked for a topic that Wensleydale didn't know.

@open think;think about cheese;guess the cheese;guess cheese;wait;z;hint
 = nowhere
@set #11449 = dark
@succ #11449 = @call(11429,"dance"); @call(11449,"think");
@field #11449 = old_think : @tell("%#",@print(
 "   (hmmm... what about ",
 @s("tmp",0),
 @fieldloop(11433,"asked_",@switch(
 1,@and(@eq("%v",0),@lt(@g("tmp"),10),
 @not(@eq("%f","asked_any_cheese")),
 @not(@eq("%f","asked_popular")),@not(@eq("%f","asked_cheddar"))),@print(
 @getfield(11433,@print("chname_",@substr("%f",6))),", ",
 @s("tmp",@add(@g("tmp"),1))
 ))),
 "...?)"));
@field #11449 = think :
 @tell("%#",@print(
 "   (hmmm... what about ", @s("tmp",0), @s("n",1),
 @strloop("123456789012345678901234567890123456789012345678901234567890
 123456789012345678901234567890",
 "x",@print(@switch(1,
 @and(@eq(@getfield(11433,@print("asked_",@g(@print("th_",@g("n"))))),0),
 @lt(@g("tmp"),10)),@print(
 @getfield(11433,@print("chname_",@g(@print("th_",@g("n"))))),", ",
 @s("tmp",@add(@g("tmp"),1))
 )), @s("n",@add(1,@g("n")))
 )), "...?)"));

@field #11449 = th_1 : red_leicester
@field #11449 = th_2 : tilsit
@field #11449 = th_3 : caerphilly
@field #11449 = th_4 : bel_paese
@field #11449 = th_5 : red_windsor
@field #11449 = th_6 : stilton
@field #11449 = th_7 : gruyere
@field #11449 = th_8 : emmental
@field #11449 = th_9 : njarls
@field #11449 = th_10 : liptauer
@field #11449 = th_11 : lancashire
@field #11449 = th_12 : white_stilton
@field #11449 = th_13 : danish_blue
@field #11449 = th_14 : dgloucester
@field #11449 = th_15 : cheshire
@field #11449 = th_16 : dorset
@field #11449 = th_17 : brie
@field #11449 = th_18 : rocquefort
@field #11449 = th_19 : pont-leveque
@field #11449 = th_20 : port-salut
@field #11449 = th_21 : savoyard
@field #11449 = th_22 : st-paulin
@field #11449 = th_23 : carre
@field #11449 = th_24 : boursin
@field #11449 = th_25 : bresse-bleue
@field #11449 = th_26 : perle
@field #11449 = th_27 : camembert
@field #11449 = th_28 : gouda
@field #11449 = th_29 : edam
@field #11449 = th_30 : caithness
@field #11449 = th_31 : smoked_austrian
@field #11449 = th_32 : sage_derby
@field #11449 = th_33 : wensleydale
@field #11449 = th_34 : gorgonzola
@field #11449 = th_35 : parmesan
@field #11449 = th_36 : mozzarella
@field #11449 = th_37 : pippo
@field #11449 = th_38 : danish_fimboe
@field #11449 = th_39 : czech
@field #11449 = th_40 : venez
@field #11449 = th_41 : cheddar
@field #11449 = th_42 : feta
@field #11449 = th_43 : provolone
@field #11449 = th_44 : raclette
@field #11449 = th_45 : parmesan
@field #11449 = th_46 : romano
@field #11449 = th_47 : bleu
@field #11449 = th_48 : finlandia
@field #11449 = th_49 : cottage
@field #11449 = th_50 : swinzie
@field #11449 = th_51 : havarti
@field #11449 = th_52 : appenzeller
@field #11449 = th_53 : baylough
@field #11449 = th_54 : bonchester
@field #11449 = th_55 : bishop
@field #11449 = th_56 : brodick
@field #11449 = th_57 : bresse-bleue
@field #11449 = th_58 : bonnet
@field #11449 = th_59 : brodick_blue
@field #11449 = th_60 : boursin
@field #11449 = th_61 : blue_castello
@field #11449 = th_62 : coolea
@field #11449 = th_63 : cabrales
@field #11449 = th_64 : crowdie
@field #11449 = th_65 : comte
@field #11449 = th_66 : caboc
@field #11449 = th_67 : colby
@field #11449 = th_68 : coulommiers
@field #11449 = th_69 : devon
@field #11449 = th_70 : dunlop
@field #11449 = th_71 : fontal
@field #11449 = th_72 : fontina
@field #11449 = th_73 : gjetost
@field #11449 = th_74 : tomme
@field #11449 = th_75 : howgate
@field #11449 = th_76 : jermi
@field #11449 = th_77 : iverlock
@field #11449 = th_78 : lappi
@field #11449 = th_79 : leyden
@field #11449 = th_80 : loch_arthur
@field #11449 = th_81 : maasdam
@field #11449 = th_82 : mascarpone
@field #11449 = th_83 : monterey_jack
@field #11449 = th_84 : mimolette
@field #11449 = th_85 : mizithra
@field #11449 = th_86 : orla
@field #11449 = th_87 : pentland
@field #11449 = th_88 : reblochon
@field #11449 = th_89 : reggianito
@field #11449 = th_90 : saga

dance (dbref #11378)

As Jota pointed out, it is licensed for public dancing.

@open dance;dance about;dance around = nowhere
@set #11378 = dark
@succ #11378 = @call(11429,"dance");
 @tell("%#","   You dance about the room, in an apparent audition
 for the Ministry of Silly Dances.");
 @tellroom(@location("%#"),"%#","   %n dances about the room, in an
 apparent audition for the Ministry of Silly Dances.");

out (dbref #11591)

LucentTrans pointed out that now that there are two exits, the command to "exit" should point out the ambiguity.

@open out;exit;leave = nowhere
@set #11591 = dark
@succ #11591 = @tell("%#","   Which exit do you mean, the north exit or the southeast exit?");
@desc #11591 = @tell("%#","   You can either exit north to Lycanthros Village, or southeast to the Adventurer's Lounge.");