This is a generic consumable, its children, the generic edible and the generic drinkable, and some examples (roast pig, kegger of mead, Snicker's Bar, and drinking fountain). Some of the examples aren't that interesting yet. I can't recall who originally did the generic consumable; it was someone on Freegate, possibly Shig. I've heavily modified it since then for Valhalla. Jerry Stratton ([j--r--y] at [teetot.acusd.edu], [C--Vi--o] at [valhalla]) CONTENTS: The Generic Consumable ($thing:) The Generic Edible ($thing:Generic Consumable:) The Generic Drinkable ($thing:Generic Consumable:) Roast Pig ($thing:Generic Consumable:Generic Edible:) Kegger of Mead ($thing:Generic Consumable:Generic Drinkable:) Bronze Drinking Fountain ($thing:Generic Consumable:Generic Drinkable:) Snicker's Bar ($thing:Generic Consumable:Generic Edible:) THE GENERIC CONSUMABLE: Granddaddy of consumables. Based on the basic $thing. @create $thing named Generic Consumable:Generic Consumable,gc @prop #121."chunks" 1 r @prop #121."maxChunks" 5 rc @prop #121."consume_msgs" {} rc ;;#121.("consume_msgs") = {"You consume a bit of the %t."} @prop #121."home" 0 rc @prop #121."lastConsume_msgs" {} rc ;;#121.("lastConsume_msgs") = {"You finish off the %t, and boy is it good!"} @prop #121."returnDelay" 60 rc @prop #121."evaporate_msgs" {} rc ;;#121.("evaporate_msgs") = {"The %t evaporates in a dusty puff of smoke. It came, it was consumed, it's going home."} @prop #121."alreadyEmpty_msgs" {} rc ;;#121.("alreadyEmpty_msgs") = {"Too late, friend. There is no more %t for you."} @prop #121."notHolding_msg" "You're not holding the %t." rc @prop #121."help_msg" {} rc ;;#121.("help_msg") = {"", " Generic Consumable", " NOTE: Normally you will want to use the generic drinkable or the generic edible.", "__________________________ ____________________________________________________", "", " Eat, drink, and be merry, for tomorrow you may lag.", "", " I thought quite a bit about this object, and finally decided to make it difficult to use. In order to keep it interesting, there are several lists of messages that your really must set. So without further ado, here they are:", "", " Um.. okay, a little ado. I decided against having them recycle themselves, because the dispensing would be a bother, and because players with low quota would find it a pain.", " -- The Unknown Creator. Someone (Shig? my memory grows hazy. Mona? Help me, Mona!) at Freegate.", "", "I've now forgotten who did this part. I've made quite a few modifications for use on Valhalla, mostly to make it easier to use, and to talk to the consumer as well as everyone watching the consumer get stuffed/drunk. Oh, and the auto-refill mode.", " -- Jerry Stratton ([j--r--y] at [teetot.acusd.edu], [C--Vi--o] at [valhalla])", "", " .maxChunks", " .home", " .returnDelay", " After .returnDelay seconds after the consumable is emptied, it returns home (if it isn't already home). Additionally, if it is .auto_Refill type 2, it is automatically refilled to .maxChunks.", "", " .firstdescriptions_msgs", " .middescription_msgs", " .lastdescriptions_msgs", " An additional description of the consumable when full. This is added on a separate line after .description. These properties are checked in this order, until one with a valid line is found: .fulldescriptions_msg, .lastdescriptions_msg, and .description_msg (which had *better* have a valid line). If .firstdescriptions_msgs or .lastdescriptions_msgs have more than one line, the second line goes for the second chunk (or the second-to-last chunk), the third line for the third chunk, etc. If .middescriptions_msgs has more than one line, a line is chosen at random.", "", " .firstConsume_msgs", " .ofirstConsume_msgs", " .consume_msgs", " .oconsume_msgs", " .lastConsume_msgs", " .olastConsume_msgs", " A list of messages seen when a chunk is consumed. Messages are chosen randomly if there are more than one line in the message, and the same line number is used for consume (player) and oconsume (others). 'lastConsume' is used for the last chunk that is eaten. 'first' and 'last' are for the first chunk (.chunk==maxChunk) and last chunk (.chunk==1).", "", " .evaporate_msgs", " .appear_msgs", " A list of messages seen when the empty food evaporates and re-appears home. The same line number is used for .appear as for .evaporate, if possible.", "", " .alreadyEmpty_msgs", " .oalreadyEmpty_msgs", " If somebody tries to eat an already empty consumable, these messages are displayed. One message is chosen randomly.", "", " .must_take", " .notHolding_msg", " If .must_take is '1', then anyone who is not holding the consumable who tries to consume it will get the .notHolding_msg.", "Setting: @SET .MUST_TAKE TO 1 or 0", " @NOTHOLDING IS \"The message.", "", " .condiment_type", " .condiment_msgs", " .ocondiment_msgs", " Condiment _type_ is 0 if only the owner-specified condiments can be used, and 1 if any condiments can be used. Condiment messages are a message for each condiment (line 1 is used if *any* condiment can be used). Use ADDCONDIM and RMCONDIM any TO this to add or remove condiments from the approved list.", "", " .auto_Refill", " .refill_msgs", " If .auto_Refill is 0, the item is not refilled when consumed. If .auto_Refill is 1, the item is continually replenished--it never goes empty. If .auto_Refill is 2, the item gets re-filled once it goes empty, after .returnDelay seconds. Additionally, for option 2, a random line from .refill_msgs is displayed in the location where the object returns. .refill_msgs is also used when the owner does \"Refill\".", "Setting auto_refill: @SET .AUTO_REFILL TO 0, 1, or 2", "", " .save_line", " Ignore the man behind the curtain. This property is used to allow 'send_message' to talk to itself between calls.", "", "VERBS", " EAT/DRINK this", " The standard verb is 'consume', but you can't use it. The generic edible has \"eat/bite/nibble\" and the generic drinkable has \"drink/sip\". Important messages: firstConsume_msgs, ofirstConsume_msgs; lastConsume_msgs, olastConsume_msgs; consume_msgs, oconsume_msgs; alreadyEmpty_msgs, oalreadyEmpty_msgs.", " I see from the code that in theory you can be a pig and consume more than one chunk at a time. I don't see how this works.", "", " ADD/SPRINKLE/SPREAD/PUT/SLATHER/POUR/SQUEEZE condiment ON this", " Puts condiments on the consumable. Relevant properties: .condiment_type, .condiments, .condiment_msgs", " REFILL/REPLACE this", " Only the owner may refill a consumable. Sets 'chunks' to 'maxChunks'. Important messages: refill_msgs.", "", " @LOOK this", " Gives information about the settable numeric and object id properties.", "", "SEND_MESSAGE(property_name) ==> string", " 1. If the property is a list, one is chosen at random *unless* .save_line is greater than 0, in which case item .save_line is used.", " 2. If .save_line is -1, it sets .save_line to the number of the item chosen.", " 3. $string_utils:pronoun_sub() is called to do pronoun substitution. But *first*, it does it's own substitution, as follows:", " &chunks ==> the number of chunks left, as a digit.", " &consumed ==> the number of chunks consumed, as a digit.", " &full ==> the number of chunks when full.", " &condiment ==> the condiment being used on the chunk.", " &condiments ==> all the condiments in the list.", " &verb ==> whatever verb the consumer typed.", " &food ==> the contents of .food_msg", " & ==> an ampersand.", " &plural{string0,string1,...,string_many} ==> the string corresponding to the number of chunks left. The last string is used for all numbers greater than that as well. Simply using &plural gives \"s\" for 0 and 2 or more, and nothing for 1.", " &pluralc and &pluralf are &plural for 'consumed' and for 'full."} @prop #121."must_take" 0 rc @prop #121."auto_refill" 0 rc @prop #121."refill_msgs" {} rc ;;#121.("refill_msgs") = {"A scantily clad frog refills the %t.", "A strange pig arrives and refills the %t, asking if you've seen a scantily clad frog."} @prop #121."appear_msgs" {} rc ;;#121.("appear_msgs") = {"A %t appears before your eyes."} @prop #121."oalreadyEmpty_msgs" {} rc ;;#121.("oalreadyEmpty_msgs") = {"%N looks forlornly at the remains of %p %t."} @prop #121."oconsume_msgs" {} rc ;;#121.("oconsume_msgs") = {"%N consumes a bit of the %t."} @prop #121."olastConsume_msgs" {} rc ;;#121.("olastConsume_msgs") = {"%N finishes off the %t, smacking %p lips."} @prop #121."firstConsume_msgs" "You dig into the %t." rc @prop #121."ofirstConsume_msgs" "%N digs into the %t." rc @prop #121."save_line" 0 rc @prop #121."firstdescriptions_msgs" {} rc ;;#121.("firstdescriptions_msgs") = {"A full %t.", "An almost full %t."} @prop #121."lastdescriptions_msgs" {} rc ;;#121.("lastdescriptions_msgs") = {"An empty %t... looks like someone enjoyed it!", "An almost empty %t. Better hurry if you want some, %N."} @prop #121."middescriptions_msgs" {} rc ;;#121.("middescriptions_msgs") = {"There &plural{are,is,are} &chunks chunk&plural left.", "There &pluralc{are,is,are} &consumed chunk&pluralc gone.", "There &pluralc{are,is,are} &pluralc{one,two,three,several} chunk&pluralc gone out of &full chunk&pluralf total."} @prop #121."atlook_msg" {} rc ;;#121.("atlook_msg") = {"%T:", " Home: %[thome].", " Use '@SET %t.HOME TO ' to change.", " Chunks left: &chunks.", " Use 'REPLACE %t' to restore it.", " Chunks When Full: &full chunk&pluralf.", " Use '@SET %t.MAXCHUNKS TO ' to change this.", " Auto Refill Type: %[tauto_Refill].", " Use '@SET %t.AUTO_REFILL TO <0, 1, or 2>' to change.", " 0=Manual Refill; 1=Continually Replenished; 2=Automatic Refill", " Delay Before Refill: %[treturnDelay] second(s).", " Use '@SET %t.RETURNDELAY TO ' to change.", " Do consumers have to hold it? %[tmust_take].", " Use '@SET %t.MUST_TAKE TO <0 or 1>' to change.", " 1 = Yes; 0 = No.", " Condiments Allowed: %[tcondiment_type].", " Use '@SET %t.CONDIMENT_TYPE TO <0 or 1>' to change.", " 1 = Any, 0 = Only those specified below:", " Condiments: &condiments.", " Use 'ADDCONDIM and RMCONDIM TO %t' to add or remove condiments.", "And remember that you can @NOTEDIT the following properties:", " Refill & Evaporate: refill_msgs, evaporate_msgs, appear_msgs", " Consume: alreadyEmpty_msgs, oalreadyEmpty_msgs", " firstconsume_msgs, consume_msgs, lastconsume_msgs", " ofirstconsume_msgs, oconsume_msgs, olastconsume_msgs", " Descriptions: firstdescriptions_msgs, middescriptions_msgs, lastdescriptions_msgs", "In the messages you can use the following ampersand subs:", " &chunks, &full, &consumed, &condiments, &verb, &plural, &food, &condiment"} @prop #121."condiment_type" 1 rc @prop #121."condiments" {} rc @prop #121."condiment_msgs" "You &verb &condiment all over the &food." rc @prop #121."ocondiment_msgs" "%N &verbs &condiment all over %p &food." rc @prop #121."current_condiment" "butter" rc @prop #121."food_msg" "consumable" rc @prop #121."verb" "" rc ;;#121.("aliases") = {"Generic Consumable", "gc"} ;;#121.("description") = "A consumable %t. Try a piece!" ;;#121.("object_size") = {17522, 774994943} @verb #121:"description" this none this @program #121:description ChunksFromTop = (this.maxChunks - this.chunks); if ((typeof(this.firstdescriptions_msgs) == STR) && (ChunksFromTop == 0)) ChunksLeftText = this:DoBoth(this.firstdescriptions_msgs); else if ((typeof(this.firstdescriptions_msgs) == LIST) && (ChunksFromTop < length(this.firstdescriptions_msgs))) ChunksLeftText = this.firstdescriptions_msgs[ChunksFromTop + 1]; ChunksLeftText = this:DoBoth(ChunksLeftText); else ChunksFromBottom = this.chunks; if ((typeof(this.lastdescriptions_msgs) == STR) && (ChunksFromBottom == 0)) ChunksLeftText = this:DoBoth(this.lastdescriptions_msgs); else if ((typeof(this.lastdescriptions_msgs) == LIST) && (ChunksFromBottom < length(this.lastdescriptions_msgs))) ChunksLeftText = this.lastdescriptions_msgs[ChunksFromBottom + 1]; ChunksLeftText = this:DoBoth(ChunksLeftText); else ChunksLeftText = this:send_message("middescriptions_msgs"); endif endif endif endif if (this.chunks > 1) Description = this:DoBoth(this.description); return {Description, ChunksLeftText}; else return ChunksLeftText; endif . @verb #121:"consume" this none this @program #121:consume this.verb = verb; if ((this.location != player) && this.must_take) player:tell(this:send_message("notHolding_msg")); return; endif if (this.chunks == 0) this:send_messages("alreadyEmpty_msgs", "oalreadyEmpty_msgs"); return; endif chunks = 1; if (args && (tonum(args[1]) > 0)) chunks = tonum(args); if (chunks > this.chunks) chunks = this.chunks; endif endif if (this.auto_refill != 1) this.chunks = (this.chunks - chunks); endif if (this.chunks == 0) this:send_messages("lastConsume_msgs", "olastConsume_msgs"); fork (this.returnDelay) this:goHome(); if (this.auto_refill == 2) if ($object_utils:isa(this.location, $room)) this.location:announce_all(this:send_message("refill_msgs")); endif this.chunks = this.maxChunks; endif endfork else if (this.chunks == (this.maxChunks - chunks)) this:send_messages("firstConsume_msgs", "ofirstConsume_msgs"); else this:send_messages("consume_msgs", "oconsume_msgs"); endif endif . @verb #121:"send_messages" this none this @program #121:send_messages "The syntax send_messages(message_property1,message_property2)"; "The first property goes to the player, the second to everyone else."; "If there are more than one possible message in the property, a random one is chosen. If both have more than one, the same line is chosen in each, if possible."; "If a message set is a list of messages, send_messages uses the same line number for each set."; this.save_line = -1; player:tell(this:send_message(args[1])); player.location:announce(this:send_message(args[2])); this.save_line = 0; . @verb #121:"goHome" this none this @program #121:goHome if ((typeof(this.home) == OBJ) && valid(this.home)) if (this.home != this.location) start = this.location; if (is_player(start)) start = start.location; endif if (this.home != start) this:moveto(this.home); if (this.location != this.home) this.owner:tell("Your ", this.name, " can't find its way home."); else end = this.location; if (is_player(end)) end = end.location; endif this.save_line = -1; if ($object_utils:isa(start, $room)) start:announce_all(this:send_message("evaporate_msgs")); endif if ($object_utils:isa(end, $room)) end:announce_all(this:send_message("appear_msgs")); endif this.save_line = 0; endif endif endif endif . @verb #121:"send_message" this none this @program #121:send_message "The syntax send_mesages(message_property1)"; "If there are more than one possible message in the property, a random one is chosen."; "If a message set is a list of messages, send_message uses the same line number for each set."; Message = args[1]; if (typeof(this.(Message)) == STR) text = this.(Message); this.save_line = 0; else if ((this.save_line > 0) && (this.save_line <= length(this.(Message)))) text_line = this.save_line; else text_line = random(length(this.(Message))); endif text = this.(Message)[text_line]; if (this.save_line != 0) this.save_line = text_line; endif endif AmpText = this:Amp_sub(text); ProText = $string_utils:pronoun_sub(AmpText); return ProText; . @verb #121:"refill replace restore" this none none @program #121:refill if (player != this.owner) player:tell("Only the owner can refill."); else if (this.chunks == this.maxChunks) player:tell("It is already full."); else this.chunks = this.maxChunks; this.location:announce_all(this:send_message("refill_msgs")); endif endif . @verb #121:"@look" this none none @program #121:@look for TextLine in (this.atlook_msg) AmpText = this:amp_sub(TextLine); ProText = $string_utils:pronoun_sub(AmpText); player:tell(ProText); endfor . @verb #121:"Amp_sub" this none this @program #121:Amp_sub "Takes ampersand keywords and replaces them. Currently supported:"; "&chunks: number of chunks left."; "&consumed: number of chunks consumed from full."; "&full: number of chunks when full."; "&condiments: lists the legal condiments."; "&condiment: lists the current condiment in use."; "&food: the contents of 'food_msg'"; "&verb: the verb used to get here."; "&: an ampersand."; "&plural{string0,string1,...,stringmany}: return string corresponding to number of chunks left."; "&pluralc and &pluralf are for the number consumed and the number when full."; TheText = args[1]; if (this.condiment_type) Condiments = "any"; else length(this.condiments) ? Condiments = $string_utils:english_list(this.condiments) | (Condiments = "none"); endif length(this.current_condiment) ? Condiment = this.current_condiment | (Condiment = "nothing"); TheSubs = {{"&chunks", tostr(this.chunks)}, {"&consumed", tostr(this.maxChunks - this.chunks)}, {"&full", tostr(this.maxChunks)}, {"&condiments", Condiments}, {"&condiment", Condiment}, {"&verb", this.verb}, {"&food", this.food_msg}}; TheText = $string_utils:substitute(TheText, TheSubs); KeepGoing = 1; Text_End = length(TheText); PL = length("&plural"); Full = (this.maxChunks + 1); Chunks = (this.chunks + 1); while ((PluralLoc = index(TheText[1..Text_End], "&plural")) && KeepGoing) if (TheText[PluralLoc + PL] == "c") TheNumber = ((Full - Chunks) + 1); TheLength = (PL + 1); else if (TheText[PluralLoc + PL] == "f") TheNumber = Full; TheLength = (PL + 1); else TheNumber = Chunks; TheLength = PL; endif endif if (TheText[PluralLoc + TheLength] == "{") if (PluralEnd = index(TheText[PluralLoc..Text_End], "}")) Plurality = TheText[(PluralLoc + TheLength) + 1..(PluralLoc + PluralEnd) - 2]; PluralList = $string_utils:explode(Plurality, ","); if (length(PluralList) > TheNumber) Plurality = PluralList[TheNumber]; else Plurality = PluralList[length(PluralList)]; endif TheText[PluralLoc..(PluralLoc + PluralEnd) - 1] = Plurality; else KeepGoing = 0; endif else Plurality = {"s", ""}[(TheNumber == 1) + 1]; TheText[PluralLoc..(PluralLoc + TheLength) - 1] = Plurality; endif Text_End = length(TheText); endwhile TheText = $string_utils:substitute(TheText, {{"&", "&"}}); return TheText; . @verb #121:"DoBoth" this none this @program #121:DoBoth AmpText = this:Amp_sub(args[1]); ProText = $string_utils:pronoun_sub(AmpText); return ProText; . @verb #121:"addcondim" any on this @program #121:addcondim "Check to make sure the condiment isn't already there."; Condiments = this.condiments; if (player == this.owner) if (dobjstr in Condiments) player:tell("There is already ", dobjstr, " in the condiments list: ", $string_utils:english_list(Condiments)); else Condiments = {@Condiments, dobjstr}; player:tell("You add ", dobjstr, " to the condiments around the ", this.name, "."); this.location:announce(player.name, " adds ", dobjstr, " to the condiments tray around the ", this.name, "."); this.condiments = Condiments; endif else player:tell("You need to ask ", this.owner.name, " for permission to add condiments to the tray around ", this.name, "."); endif . @verb #121:"rmcondim" any from this @program #121:rmcondim if (player == this.owner) Condiments = this.condiments; if (Cond_Location = (dobjstr in Condiments)) Condiments = listdelete(Condiments, Cond_Location); player:tell("You remove ", dobjstr, " as a condiment for ", this.name, "."); this.condiments = Condiments; else player:tell("There is no ", dobjstr, " in the list of condiments for ", this.name, "."); (Condiments == {}) ? player:tell("In fact, ", this.name, " has no condiments.") | player:tell("Condiments: ", $string_utils:english_list(Condiments)); endif else player:tell("You'll have to ask ", this.owner.name, " to add ", dobjstr, "to the tray around ", this.name, "."); endif . @verb #121:"add sprinkle spread put slather pour squeeze" any on this @program #121:add CondiType = this.condiment_type; Condiments = this.condiments; if ((Current_Condiment = CondiType) || (Current_Condiment = (dobjstr in Condiments))) this.verb = verb; this.current_condiment = dobjstr; this.save_line = Current_Condiment; player:tell(this:send_message("condiment_msgs")); this.save_line = Current_Condiment; this.location:announce(this:send_message("ocondiment_msgs")); this.save_line = 0; this:consume(); else player:tell("There is no ", dobjstr, " for the ", this.name, "."); endif . "***finished*** THE GENERIC EDIBLE: Note that '#121' is the Generic Consumable, above. @create #121 named Generic Edible:Generic Edible,ge ;;#122.("aliases") = {"Generic Edible", "ge"} ;;#122.("description") = "A consumable %t. Try a piece!" ;;#122.("object_size") = {0, 0} @verb #122:"eat bite nibble" this none none @program #122:eat this:consume(); . "***finished*** THE GENERIC DRINKABLE: Note that '#121' is the Generic Consumable, above. @create #121 named Generic Drinkable:Generic Drinkable,gd ;;#123.("aliases") = {"Generic Drinkable", "gd"} ;;#123.("description") = "A consumable %t. Try a piece!" ;;#123.("object_size") = {0, 0} @verb #123:"drink sip" this none none rxd @program #123:drink this:consume(); . "***finished*** A ROAST PIG: Note that #122 is the generic edible, above. The roast pig, when eaten to the bone, is replaced by an elf from a chimney. (Come to Balder's Hall in Valhalla.) @create #122 named roast pig:roast pig,roast,pig ;;#125.("chunks") = 20 ;;#125.("maxChunks") = 20 ;;#125.("consume_msgs") = {"You tear a piece of meat off of the %t and wolf it down.", "You cut a slice of %t and enjoy the succulent flavor."} ;;#125.("home") = #81 ;;#125.("lastConsume_msgs") = {"You scrape the last meat off of the %t."} ;;#125.("returnDelay") = 45 ;;#125.("help_msg") = {"Why would you want to help a roast pig? Grunt! *Eat* roast pig!"} ;;#125.("auto_refill") = 2 ;;#125.("refill_msgs") = {"A grubby elf pops out of the chimney, hauls the %t's skeleton up, and drops a juicy, succulent %t down."} ;;#125.("oconsume_msgs") = {"%N tears a piece off of the %t and eats it.", "%N slices off a piece of %t and slowly enjoys it."} ;;#125.("olastConsume_msgs") = {"%N picks among the bones of the %t for the last remnants of meat."} ;;#125.("firstConsume_msgs") = {"You chop the first slice of %t and hot fat squirts out at you.", "The %t crackles as you make the first cut."} ;;#125.("ofirstConsume_msgs") = {"%N gets sprayed in the face by a delicious spray of fat as %s makes the first cut into the %t.", "You hear the %t crackle as %N slices into it."} ;;#125.("firstdescriptions_msgs") = {"It is fat and uncut, and looks to be bursting with flavor.", "The fat drips down from the single cut of the huge beast."} ;;#125.("lastdescriptions_msgs") = {"The %t has been almost picked to the bone. Better hurry if you want some!", "There are only a few scraps of meat left on the %t, but they do look good."} ;;#125.("middescriptions_msgs") = {"Its bones show through where people have been slicing and tearing at it.", "A %t half eaten is still half a %t.", "Some people have already enjoyed it. Why not try a piece yourself?"} ;;#125.("aliases") = {"roast pig", "roast", "pig"} ;;#125.("description") = "A small pig, roasting by the fire. Your mouth waters as you look at it." ;;#125.("object_size") = {0, 0} "***finished*** A KEGGER OF MEAD: Note that #123 is the generic drinkable, above. The kegger empties and is replaced by Steve Spear. @create #123 named kegger of mead:kegger of mead,mead,keg ;;#126.("chunks") = 36 ;;#126.("maxChunks") = 40 ;;#126.("consume_msgs") = {"%N chugs back a tanker from the %t."} ;;#126.("lastConsume_msgs") = {"%N cups out the dregs from the %t."} ;;#126.("help_msg") = {"Drink up, friend!"} ;;#126.("auto_refill") = 2 ;;#126.("refill_msgs") = {"Steve Spear comes in with an apple in his mouth carrying a new keg and replaces the empty %t."} ;;#126.("firstConsume_msgs") = "You dip into the frothy mead and come up with mostly foam." ;;#126.("ofirstConsume_msgs") = "%N dips %p cup into the %t and comes up with a cupful of sugary foam." ;;#126.("firstdescriptions_msgs") = {"A full %t.", "The keg is almost overflowing with foam, and the smell of sour honey wafts past you.", "The keg is filled almost to the rim with golden, sweet honey."} ;;#126.("lastdescriptions_msgs") = {"The %t is completely empty. Looks like there was quite a party!", "The %t is almost empty. Better hurry and drink some, %N!"} ;;#126.("middescriptions_msgs") = {"It is still partially full of mead.", "There is still some mead to be drunk. drank. to drink. Oh, hell, just get drunk.", "There's still some left!"} ;;#126.("aliases") = {"kegger of mead", "mead", "keg"} ;;#126.("description") = "A great keg of golden mead." ;;#126.("object_size") = {0, 0} "***finished*** A BRONZE DRINKING FOUNTAIN: Note that #123 is the generic drinkable, above. The fountain never empties. Also, it's @locked to Balder on Valhalla. Obviously, you'll want it @locked to someone else. @create #123 named a bronze Cupid drinking fountain:a bronze Cupid drinking fountain,drinking fountain,fountain,water,cupid ;;#124.("chunks") = 2 ;;#124.("maxChunks") = 2 ;;#124.("consume_msgs") = {"The drink refreshes you immensely.", "The water jets out of the fountain and hits you right in the face. Everyone is looking at you!"} ;;#124.("home") = #11 ;;#124.("auto_refill") = 1 ;;#124.("oconsume_msgs") = {"%N takes a drink from the fountain and comes back looking younger and refreshed.", "Bending over the fountain to get a drink, %N misses and gets a squirt of water right in the face. Boy, is %s embarrased!"} ;;#124.("firstdescriptions_msgs") = {"The water sparkles enough to blind you."} ;;#124.("lastdescriptions_msgs") = {} ;;#124.("middescriptions_msgs") = "" ;;#124.("otake_failed_msg") = "%N tries to take the fountain. Kinda weird of %o." ;;#124.("take_failed_msg") = "The fountain is *firmly* attached to the ground. You look silly even *trying.*" ;;#124.("key") = #78 ;;#124.("aliases") = {"a bronze Cupid drinking fountain", "drinking fountain", "fountain", "water", "cupid"} ;;#124.("description") = "A drinking fountain in the shape of a Roman cupid, carved in bronze." ;;#124.("object_size") = {0, 0} @verb #124:"drink" none from this @program #124:drink this:drink(); . "***finished*** SNICKER'S BAR: Note that #121 is the generic edible. #100 is Captain Video. @dump #134 with create @create #122 named Snicker's Bar:Snicker's Bar,chocolate bar,chocolate,candy bar,snickers ;;#134.("chunks") = 3 ;;#134.("maxChunks") = 4 ;;#134.("consume_msgs") = {"You bite off a chunk of the nutty %t.", "The flavor of chocolate washes over your body like a heroin high.", "The %t tastes great. Go ahead and have another bite!", "The %t is chewy and gooey and chocolatey. Mmm, mmm!"} ;;#134.("home") = #100 ;;#134.("lastConsume_msgs") = {"You pop down the final piece of the %t. Satisfaction!", "You've finished it off! There's no more %t left! What are you going to do!?"} ;;#134.("returnDelay") = 5 ;;#134.("evaporate_msgs") = {"O.J. Simpson jumps out of an Avis rent-a-car, knifes %N, and takes away the %t. He's out of sight before you can react to this horrible scene.", "Dyna Pink of the Dynamen appears in a flash of light, and steals the %t away."} ;;#134.("alreadyEmpty_msgs") = {"My gosh! It's just an empty wrapper. What are you going to do!?"} ;;#134.("help_msg") = {"Look, pally. If you don't know what to do with a Snicker's Bar you can just hand it on over to someone who does."} ;;#134.("must_take") = 1 ;;#134.("auto_refill") = 2 ;;#134.("refill_msgs") = {"Captain Video accepts the %t graciously and stuffs it into his cape."} ;;#134.("appear_msgs") = {"O.J. Simpson comes running down the airport concourse with a bloody knife in his hand, and offers Captain Video a %t.", "Dyna Pink, his main squeeze, pops out of the sky and offers Captain Video a %t."} ;;#134.("oalreadyEmpty_msgs") = {"%N discovers that the %t is just an empty wrapper. \"Chocolate!\" %s screams, \"I need cho-co-late!\""} ;;#134.("oconsume_msgs") = {"%N bites off a chunk of %p %t, and nuts fly everywhere.", "%N eats %p %t. It looks like %s's falling into chocolate ecstasy.", "%N bites off a piece of %p %t, and is debating with %r about having another bite.", "%N bites off a piece of %p %t, the caramel stretching for miles between %p mouth and the chocolate bar."} ;;#134.("olastConsume_msgs") = {"With a satisifed glow in %p eyes, %N pops down the last piece of the %t.", "%N nervously chews the last piece of %p %t and searches for more. %S's on a chocolate binge. Beware!"} ;;#134.("firstConsume_msgs") = {"You tear the wrapper off and bite a huge chunk off of the %t.", "You carefully unwrap the %t and take a bite, slowly caressing the chocolate with your tongue.", "You don't even bother to unwrap it, you're so hungry. You just bite right into it."} ;;#134.("ofirstConsume_msgs") = {"%N tears the wrapper of of %p %t and chomps right into it.", "%N carefully unwraps the %t and bites into it, slowly caressing the chocolate bar with %p tongue.", "%N bites right into %p %t without even bothering to unwrap it!"} ;;#134.("firstdescriptions_msgs") = {"The %t is still wrapped--no germs on this one, no sirree!"} ;;#134.("lastdescriptions_msgs") = {"All it is is the empty, crumpled wrapping of what was once a creamy, crunchy %t.", "It's almost gone, but whoever ate it left one piece for *you*!"} ;;#134.("middescriptions_msgs") = {"There *is* a piece bitten off of it, but that only shows the luscious nougat center. Your mouth is watering!", "It is partially unwrapped and eaten, and chocolate is smeared over the wrapper.", "Someone's already taken a good chunk out of it. But the smell of chocolate is overpowering you!", "Go ahead! You deserve it!"} ;;#134.("aliases") = {"Snicker's Bar", "chocolate bar", "chocolate", "candy bar", "snickers"} ;;#134.("description") = "Chocolate on the outside, creamy nougat on the inside, and crunchy layer of nuts and caramel. Wow!" ;;#134.("object_size") = {0, 0} "***finished***