Skip to content

Instantly share code, notes, and snippets.

@KVonGit
Last active June 13, 2021 05:06
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save KVonGit/3688e2a663df5c79a02fb9eececd442b to your computer and use it in GitHub Desktop.
Save KVonGit/3688e2a663df5c79a02fb9eececd442b to your computer and use it in GitHub Desktop.
<!--Saved by Quest 5.8.7753.35184-->
<asl version="580">
<include ref="English.aslx" />
<include ref="Core.aslx" />
<template name="DefaultObjectDescription">Nothing out of the ordinary.</template>
<template name="UnresolvedObject">I don't see what you're referring to.</template>
<template name="UnresolvedLocation">{=WriteVerb(game.pov, "can't")} go that way.</template>
<template name="NotCarryingAnything">You are empty-handed.</template>
<dynamictemplate name="TakeSuccessful">"Taken."</dynamictemplate>
<dynamictemplate name="TakeUnsuccessful">"Nice try."</dynamictemplate>
<dynamictemplate name="LookAtDarkness">"It's too dark to see!"</dynamictemplate>
<dynamictemplate name="WearSuccessful">"You are now wearing " + GetDisplayName(object) + "."</dynamictemplate>
<dynamictemplate name="DefaultObjectDescription">"You see nothing special about " + GetDisplayName(object) + "."</dynamictemplate>
<delegate name="routine" parameters="cmd, var" type="boolean" />
<delegate name="exit_to" parameters="door" type="string" />
<game name="The Hitchhiker's Guide to the Galaxy">
<gameid>697cbd68-c08d-4b3c-a75d-6c1b701ebdf5</gameid>
<version>42</version>
<revision type="int">13</revision>
<firstpublished>2021</firstpublished>
<category>Sci-Fi</category>
<attr name="autodescription_youarein_useprefix" type="boolean">false</attr>
<attr name="autodescription_description" type="int">2</attr>
<attr name="autodescription_youcango" type="int">0</attr>
<attr name="autodescription_youcansee" type="int">3</attr>
<showscore />
<feature_limitinventory />
<feature_lightdark />
<feature_asktell />
<feature_advancedscripts />
<multiplecommands />
<attr name="autodescription_youarein_newline" type="boolean">false</attr>
<author><![CDATA[Douglas Adams & Steve Meretzky]]></author>
<subtitle>(Quest 5 Port)</subtitle>
<defaultforeground>White</defaultforeground>
<defaultfont>monospace</defaultfont>
<defaultbackground>Black</defaultbackground>
<showpanes type="boolean">false</showpanes>
<borderlesscursor />
<turnoffsavebutton />
<defaultlinkforeground>White</defaultlinkforeground>
<cover>Hitchhikers_Guide_to_the_Galaxy-questcover.png</cover>
<classiclocation type="boolean">false</classiclocation>
<customlocationcolour>White</customlocationcolour>
<customlocationtextcolour>black</customlocationtextcolour>
<gridmap type="boolean">false</gridmap>
<enablehyperlinks type="boolean">false</enablehyperlinks>
<autodescription_description_newline />
<appendobjectdescription />
<showtitle type="boolean">false</showtitle>
<showdescriptiononenter type="boolean">false</showdescriptiononenter>
<attr name="serial_number">101010</attr>
<description><![CDATA[THIS IS A QUEST 5 PORT OF THE FIRST PART OF THE GAME, NOT AN OFFICIAL RELEASE OF THE GAME!!!<br/>______<br/><br/>Beyond question the most mind-bogglingly hilarious story Infocom has ever produced is THE HITCHHIKER'S GUIDE TO THE GALAXY, written and designed by Douglas Adams, author of the phenomenally best-selling novel, and Steve Meretzky, the award-winning designer of Infocom's PLANETFALL and SORCERER.<br/><br/>As the story begins, you are Arthur Dent, and a bulldozer is preparing to level your house even as an alien space fleet is preparing to level your planet. The incorrigible Mr. Adams has written new material and designed problems especially for this interactive story. So grab a pint of bitter and a couple for the road and join Ford Prefect, Trillian, Zaphod Beeblebrox and Marvin on a cosmic jaunt into the outer reaches where anything can -- and does -- happen. And don't forget your towel!]]></description>
<debugging type="boolean">false</debugging>
<hintmode type="boolean">false</hintmode>
<pov type="object">player</pov>
<start type="script"><![CDATA[
SetUpObjectAlts
SetUpITurnscripts
SetUpTextProcessorStuff
UpdateContentsInLists
SetGlobalObjectsToNotAll
SetUpFlags
FixChangedSceneryBits
global.inside_of = bed
global.in_something = true
JS.eval ("var yCatcher = function(e){ASLEvent('DoYouWantColor', e.which.toString());$(document).off('keydown',yCatcher);};function doIntro(){$(document).focus();$(document).on('keydown', yCatcher);};doIntro()")
JS.setCss ("#status", "display:none;")
JS.uiHide ("#txtCommandDiv")
JS.setCss ("#status", "display:none;")
if (not StartsWith(GetFileUrl("foo"), "quest://")) {
OnlineDeath
}
else {
msg ("Do you want color? <span id=\"blinking-cursor1\">_</span>")
JS.eval ("var blinkingCursor1 = setInterval(function(){$('#blinking-cursor1').toggle();},100);")
// DoYouWantColor will get the input from the keydown event via ASLEvent
}
]]></start>
<inituserinterface type="script"><![CDATA[
JS.eval ("/* Adding for online player fix (this function is missing) */var SaveTranscript = function(data) {data = data + '<style>*{color:black !important;background:white !important;text-align:left !important}</style>';if (!webPlayer && transcriptString != '') { UIEvent('SaveTranscript', data); } transcriptString += data;};")
if (not game.timeelapsed = 0) {
UpdateContentsInLists
}
JS.eval ("if(navigator.userAgent.toLowerCase().indexOf('mobile') > -1){platform = \"mobile\";whereAmI();ASLEvent('MobileDeviceDeath','');}")
JS.eval ("function runCommand() {var command = $('#txtCommand').val();if (command.length > 0 && canSendCommand) {numCommands++;commandsList[numCommands] = command;thisCommand = numCommands + 1;sendCommand(command);$('#txtCommand').val('');} else if (command.length === 0 && canSendCommand){addTextAndScroll('<br/>><br/>I beg your pardon?<br/>')}}")
request (SetInterfaceString, "TypeHereLabel=")
s = "<table width=\"100%\"><tr>"
s = s + "<td id=\"location\"></td>"
s = s + "<td id=\"altlocation\" align=\"right\"></td>"
s = s + "</tr></table>"
JS.eval ("$('#location').replaceWith('" + s + "');$('#location,#altlocation').css('font-family','monospace')")
if (HasAttribute(game, "turncount")) {
JS.eval ("$('#altlocation').html('Score: " + game.score + Spaces(4) + " Moves: " + game.turncount + "');$('#location,#altlocation').css('font-family','monospace')")
}
JS.setCss ("#txtOutput", "color:white;")
SetUpHintInterfaceUI
]]></inituserinterface>
<scopebackdrop type="script">
// Checks the current room for its list of globals
if (HasAttribute(game.pov.parent, "global")) {
list = Split(game.pov.parent.global, " ")
foreach (o, list) {
o = GetObject(o)
if (IsDefined("o")) {
if (o.parent = local_globals or o.parent = global_objects) {
list add (items, o)
// msg("ADDED: " + o)
}
}
}
}
list = GetDirectChildren(global_objects)
foreach (o, list) {
// Log ("Added " + o.name + " to scope.")
list add (items, o)
}
</scopebackdrop>
<changedlastobjects type="script">
foreach (obj, game.lastobjects) {
if (not obj.article = "yourself") {
DictionaryAdd (global.parser_pronouns, obj.article, obj.name)
}
}
</changedlastobjects>
<changedquestplatform type="script">
if (game.questplatform = "mobile") {
MobileDeviceDeath ("")
}
</changedquestplatform>
<changedhintmode type="script">
ToggleHintMode (game.hintmode)
</changedhintmode>
</game>
<verb name="buy">
<pattern>buy #object#; purchase #object#</pattern>
<property>buy</property>
<defaulttemplate>DefaultBuy</defaulttemplate>
<synonyms>buy purchase</synonyms>
</verb>
<verb name="climb">
<pattern>climb #object#</pattern>
<property>climb</property>
<defaulttemplate>DefaultClimb</defaulttemplate>
<synonyms>climb</synonyms>
</verb>
<verb name="drink">
<pattern>drink #object#</pattern>
<property>drink</property>
<defaulttemplate>DefaultDrink</defaulttemplate>
<synonyms>drink</synonyms>
</verb>
<verb name="eat">
<pattern>eat #object#;swallow #object#</pattern>
<property>eat</property>
<defaulttemplate>DefaultEat</defaulttemplate>
<synonyms>eat swallow</synonyms>
</verb>
<verb name="enter_verb">
<pattern>enter #object#</pattern>
<property>enterverb</property>
<defaultexpression>"You can't enter "+object.article+"."</defaultexpression>
<scope>notheld</scope>
<synonyms>enter</synonyms>
</verb>
<verb name="hit">
<pattern>hit #object#</pattern>
<property>hit</property>
<defaulttemplate>DefaultHit</defaulttemplate>
<synonyms>hit</synonyms>
</verb>
<verb name="kill">
<pattern>kill #object#</pattern>
<property>kill</property>
<defaulttemplate>DefaultKill</defaulttemplate>
<synonyms>kill</synonyms>
</verb>
<verb name="kiss">
<pattern>kiss #object#</pattern>
<property>kiss</property>
<defaulttemplate>DefaultKiss</defaulttemplate>
<synonyms>kiss</synonyms>
<defaulttext>This is family entertainment, not a video nasty.</defaulttext>
</verb>
<verb name="knock">
<pattern>knock #object#</pattern>
<property>knock</property>
<defaulttemplate>DefaultKnock</defaulttemplate>
<synonyms>knock</synonyms>
</verb>
<verb name="lick">
<pattern>lick #object#</pattern>
<property>lick</property>
<defaulttemplate>DefaultLick</defaulttemplate>
<synonyms>lick</synonyms>
</verb>
<verb name="lieon">
<pattern>lie on #object#; lie upon #object#; lie down on #object#; lie down upon #object#</pattern>
<property>lie</property>
<defaulttemplate>DefaultLie</defaulttemplate>
<synonyms>lie</synonyms>
</verb>
<verb name="listento">
<pattern>listen to #object#</pattern>
<property>listen</property>
<defaulttemplate>DefaultListenTo</defaulttemplate>
<synonyms>listen</synonyms>
</verb>
<verb name="lock">
<pattern>lock #object#</pattern>
<property>lock</property>
<defaulttemplate>DefaultLock</defaulttemplate>
<synonyms>lock</synonyms>
</verb>
<verb name="move">
<pattern>move #object#</pattern>
<property>move</property>
<defaulttemplate>DefaultMove</defaulttemplate>
<synonyms>move</synonyms>
</verb>
<verb name="pull">
<pattern>pull #object#</pattern>
<property>pull</property>
<defaulttemplate>DefaultPull</defaulttemplate>
<synonyms>pull</synonyms>
</verb>
<verb name="push">
<pattern>push #object#</pattern>
<property>push</property>
<defaulttemplate>DefaultPush</defaulttemplate>
<synonyms>push</synonyms>
</verb>
<verb name="read">
<pattern>read #object#</pattern>
<property>read</property>
<defaulttemplate>DefaultRead</defaulttemplate>
<synonyms>read</synonyms>
</verb>
<verb name="search">
<pattern>search #object#</pattern>
<property>search</property>
<defaulttemplate>DefaultSearch</defaulttemplate>
<synonyms>search</synonyms>
</verb>
<verb name="show">
<pattern>show #object#</pattern>
<property>show</property>
<defaulttemplate>DefaultShow</defaulttemplate>
<synonyms>show</synonyms>
</verb>
<verb name="siton">
<pattern>sit on #object#; sit upon #object#; sit down on #object#; sit down upon #object#</pattern>
<property>sit</property>
<defaulttemplate>DefaultSit</defaulttemplate>
<synonyms>sit</synonyms>
</verb>
<verb name="smell">
<pattern>smell #object#; sniff #object#</pattern>
<property>smell</property>
<defaulttemplate>DefaultSmell</defaulttemplate>
<synonyms>smell sniff</synonyms>
</verb>
<verb name="speak">
<pattern>speak to #object#; speak #object#; talk to #object#; talk #object#</pattern>
<property>speak</property>
<defaulttemplate>DefaultSpeakTo</defaulttemplate>
<synonyms>speak talk</synonyms>
</verb>
<verb name="taste">
<pattern>taste #object#</pattern>
<property>taste</property>
<defaulttemplate>DefaultTaste</defaulttemplate>
<synonyms>taste</synonyms>
</verb>
<verb name="throw">
<pattern>throw #object#</pattern>
<property>throw</property>
<defaulttemplate>DefaultThrow</defaulttemplate>
<synonyms>throw</synonyms>
</verb>
<verb name="tie">
<pattern>tie #object#</pattern>
<property>tie</property>
<defaulttemplate>DefaultTie</defaulttemplate>
<synonyms>tie</synonyms>
</verb>
<verb name="touch">
<pattern>touch #object#</pattern>
<property>touch</property>
<defaulttemplate>DefaultTouch</defaulttemplate>
<synonyms>touch</synonyms>
</verb>
<verb name="turnon">
<pattern>turn on #object#; turn #object# on; switch on #object#; switch #object# on</pattern>
<property>turnon</property>
<defaulttemplate>DefaultTurnOn</defaulttemplate>
<synonyms>turn switch</synonyms>
</verb>
<verb name="turnoff">
<pattern>turn off #object#; turn #object# off; switch off #object#; switch #object# off</pattern>
<property>turnoff</property>
<defaulttemplate>DefaultTurnOff</defaulttemplate>
<synonyms>turn switch</synonyms>
</verb>
<verb name="turn">
<pattern>turn #object#</pattern>
<property>turn</property>
<defaulttemplate>DefaultTurn</defaulttemplate>
<synonyms>turn</synonyms>
</verb>
<verb name="unlock">
<pattern>unlock #object#</pattern>
<property>unlock</property>
<defaulttemplate>DefaultUnlock</defaulttemplate>
<synonyms>unlock</synonyms>
</verb>
<verb name="untie">
<pattern>untie #object#</pattern>
<property>untie</property>
<defaulttemplate>DefaultUntie</defaulttemplate>
<synonyms>untie</synonyms>
</verb>
<command name="alarm_cmd">
<pattern type="string"><![CDATA[^(wake|rouse|awake)( up|) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>wake</value>
<value>rouse</value>
<value>awake</value>
</synonyms>
<script>
if (not IsDefined("object")) {
HandleSingleCommand ("wake me")
game.suppressturnscripts = true
}
else {
msg ("I don't think " + GetDisplayName(object) + " is sleeping.")
}
</script>
</command>
<command name="answer_cmd">
<pattern type="string"><![CDATA[^answer|reply$|^(answer|reply)( to|) ?(<object>.*)$|^(answer|reply) ?(<text>.*)$]]></pattern>
<synonyms type="stringlist">
<value>answer</value>
<value>reply</value>
</synonyms>
<script>
if (global.awaiting_reply) {
if (IsDefined("text") and LCase(text) = "y" or LCase(text) = "yes") {
do (yes_cmd, "script")
FuckingClear
}
else if (IsDefined("text") and LCase(text) = "n" or LCase(text) = "no") {
do (yes_cmd, "script")
FuckingClear
}
}
else if (beast.parent = game.pov.parent) {
msg ("answer_cmd: TODO")
// v-say
// FuckingClear
}
else {
msg ("Nobody is awaiting your answer.")
FuckingClear
}
</script>
</command>
<command name="applaud_cmd">
<pattern>applaud;clap;cheer</pattern>
<synonyms type="stringlist">
<value>applaud</value>
<value>clap</value>
<value>cheer</value>
</synonyms>
<script>
s = "Thank you, thank you."
if (HasAttribute(i_captain, "enabled")) {
if (i_captain.enabled) {
msg ("If you want to enjoy the poetry, just type that.")
}
else {
msg (s)
}
}
else {
msg (s)
}
</script>
</command>
<command name="appreciate_cmd">
<pattern>appreciate #object#;appreciat #object#</pattern>
<synonyms type="stringlist">
<value>appreciate</value>
<value>appreciat</value>
</synonyms>
<script>
s = "Hey, I never get any appreciation! There's absolutely no job satisfaction in being a computer."
if (HasAttribute(i_captain, "enabled")) {
if (i_captain.enabled) {
msg ("If you want to enjoy the poetry, just type that.")
}
else {
msg (s)
}
}
else {
msg (s)
}
</script>
</command>
<command name="ask_about_cmd">
<pattern>ask #object1# about #object2#;ask about #object#;ask #object1# #object2#;#object1#, tell me about #object2#</pattern>
<synonyms type="stringlist">
<value>ask</value>
</synonyms>
<scope>world</scope>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="ask_for_cmd">
<pattern>ask #object1# for #object2#;#object1#, give me #object2#;#object1#, get me #object2#;order #object2# from #object1#</pattern>
<synonyms type="stringlist">
<value>ask</value>
</synonyms>
<scope>world</scope>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="block_cmd">
<pattern>block #object#</pattern>
<synonyms type="stringlist">
<value>block</value>
</synonyms>
<script>
if (HasAttribute(object, "block")) {
SayOrDo (object, "block")
}
else if (HasAttribute(object, "action")) {
bool = RunDelegateFunction(object, "action", block_cmd, QuickParams("object",object))
}
else {
msg (WriteVerb(game.pov, "can't") + " block " + object.article + ".")
}
</script>
</command>
<command name="board_cmd">
<pattern>board #object#;embark #object#</pattern>
<synonyms type="stringlist">
<value>board</value>
<value>embark</value>
</synonyms>
<script>
if (PreBoard(object)) {
VBoard (object)
}
</script>
</command>
<command name="call_cmd">
<pattern>call #object#;phone #object#</pattern>
<synonyms type="stringlist">
<value>call</value>
<value>phone</value>
</synonyms>
<scope>world</scope>
<script><![CDATA[
if (not Here(Bedroom)) {
msg ("(phone)")
msg ("There's no phone here!")
}
else if (global.headache) {
msg ("You reach for the receiver. " + PickOneString(global.lurches))
}
else if (IsFSet(phone, "touchbit")) {
msg ("The cable is down, remember?")
}
else if (object = Dais) {
FSet (phone, "touchbit")
msg ("You explain your situation. The desk sergeant promises to send someone over soon, and says not to try anything crazy in the meantime, like lying down in front of the {bulldozer.alias}.{global.dialing_tone}")
}
else if (object = home) {
msg ("Who do you think you are, E.T.?")
}
else if (object = Maze) {
do (hints_cmd, "script")
}
else {
// <TELL "You don't know the number." CR>)>>
msg ("You don't know the number.")
}
// (T
]]></script>
</command>
<command name="carve_cmd">
<pattern>carve #object1# on #object2#;carve #object1# in #object2#</pattern>
<synonyms type="stringlist">
<value>carve</value>
</synonyms>
<script>
msg (PickOneString(global.yuks))
</script>
</command>
<command name="climb_foo_cmd">
<pattern type="string"><![CDATA[^(climb|scale) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>climb</value>
<value>scale</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="climb_down_cmd">
<pattern type="string"><![CDATA[^(climb|scale) down (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>climb</value>
<value>scale</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="climb_on_cmd">
<pattern type="string"><![CDATA[^(climb|scale) on (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>climb</value>
<value>scale</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="climb_up_cmd">
<pattern type="string"><![CDATA[^(climb|scale) up (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>climb</value>
<value>scale</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="count_cmd">
<pattern>count #object#</pattern>
<synonyms type="stringlist">
<value>count</value>
</synonyms>
<script>
msg (PickOneString(global.impossibles))
</script>
</command>
<command name="diagnose_cmd">
<pattern>diagnose</pattern>
<synonyms type="stringlist">
<value>diagnose</value>
</synonyms>
<script>
if (global.headache) {
msg ("You have a big blinding throbber.")
}
else if (global.groggy) {
msg ("You feel weak.")
}
else if (global.playing_as = "Zaphod") {
msg ("You have two " + hangover.alias + "s.")
}
else {
msg ("")
}
</script>
</command>
<command name="dig_cmd">
<pattern>dig;dig with #object#;dig in #object#;dig through #object#</pattern>
<synonyms type="stringlist">
<value>dig</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="disembark_cmd">
<pattern>disembark #object#;debark#object#</pattern>
<synonyms type="stringlist">
<value>disembark</value>
<value>debark</value>
</synonyms>
<script><![CDATA[
// <COND (<AND <FSET? ,PRSO ,TAKEBIT> ;"since GET OUT is also TAKE OUT"
// <EQUAL? <META-LOC ,PRSO> ,HERE>
// <NOT <IN? ,PRSO ,HERE>>
// <NOT <IN? ,PRSO ,PROTAGONIST>>>
// <PERFORM ,V?TAKE ,PRSO>
// <RTRUE>)
// ^^ Fuck that. GET OUT and TAKE OUT are not the same in this Quest port.
if (not game.pov.parent = object and not global.inside_of = object) {
msg (global.look_around)
}
else {
OwnFeet
global.lying_down = false
MoveObjectHere (game.pov)
global.ohere = false
}
]]></script>
</command>
<command name="dont_cmd">
<pattern>don't #text#;dont #text#</pattern>
<synonyms type="stringlist">
<value>don't</value>
<value>dont</value>
</synonyms>
<script>
msg ("dont_cmd")
// This won't run, but the pattern's existence will help when in Darkness.
</script>
</command>
<command name="enjoy_cmd">
<pattern>enjoy #object#</pattern>
<synonyms type="stringlist">
<value>enjoy</value>
</synonyms>
<script>
if (HasAttribute(object,"enjoy_f") and not GetBoolean(object,"enjoy_f")) {
SayOrDo (object, "enjoy_f")
}
else if (object.gender = "she" or object.gender = "he") {
// Try kissing the object
msg ("This is family entertainment, not a video nasty.")
}
else {
msg ("Not difficult at all, considering how enjoyable " + GetDisplayAlias(object) + " is.")
}
</script>
</command>
<command name="exit_object_cmd">
<pattern>leave #object#;exit #object#;disembark #object#</pattern>
<synonyms type="stringlist">
<value>leave</value>
<value>exit</value>
<value>disembark</value>
</synonyms>
<script>
if (HasAttribute(object,"exit_f") and not GetBoolean(object,"exit_f")) {
SayOrDo (object, "exit_f")
}
else {
msg (PickOneString(global.yuks))
}
</script>
</command>
<command name="follow_cmd">
<pattern>follow #object#</pattern>
<synonyms type="stringlist">
<value>follow</value>
</synonyms>
<scope>world</scope>
<script>
if (HasAttribute(object,"follow")) {
SayOrDo (object, "follow")
}
else if (object.parent = game.pov.parent) {
if (DoesInherit(object,"npc_type")) {
msg ("But " + GetDisplayName(object) + " is right here!")
}
else {
do (count_cmd, "script")
}
}
else {
msg ("You have no idea where " + GetDisplayName(object) + " is.")
}
</script>
</command>
<command name="get_drunk_cmd">
<pattern>get drunk</pattern>
<synonyms type="stringlist">
<value>get drunk</value>
</synonyms>
<script>
if (not IsDefined("object")) {
if (game.pov.parent = Pub) {
Tell ("You get drunk and have a terrific time for twelve minutes, are the life and soul of the Pub, tell some really great stories, make everyone laugh a lot, and they all clap you on the back and tell you what a great chap you are and then the Earth gets unexpectedly demolished")
if (global.identity_flag = "Arthur") {
msg (". You wake up with a hangover which lasts for all eternity.")
Finish
}
else {
JigsUp (".")
}
}
else if (game.pov.parent = Living_Room or game.pov.parent = Dining_Room or game.pov.parent = Kitchen) {
msg (global.you_are)
}
else {
msg ("You can't see any alcohol here!")
}
}
else {
do (tell_time_cmd, "script")
}
</script>
</command>
<command name="hello_cmd">
<pattern>hello #object#;hello, #object#;hi, #object#;hi #object#;hello;hi</pattern>
<synonyms type="stringlist">
<value>hello</value>
<value>hi</value>
</synonyms>
<script>
if (IsDefined("object")) {
if (HasAttribute(object,"hello")) {
SayOrDo (object, "hello")
}
else {
if (DoesInherit(object,"npc_type")) {
msg ("\"Hello to you too.\"")
}
else {
text = Left(game.pov.currentcommand, Instr(game.pov.currentcommand, " "))
DoAskTell (object, text, "tell", "telldefault", "DefaultTell")
}
}
}
else {
msg ("Talking to yourself is a sign of impending mental collapse.")
}
</script>
</command>
<command name="i_am_cmd">
<pattern>i am #object#</pattern>
<synonyms type="stringlist">
<value>i am</value>
</synonyms>
<scope>world</scope>
<script>
msg ("Pleased to meet you. I'm your computer.")
</script>
</command>
<command name="kick_cmd">
<pattern type="string"><![CDATA[^kick (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>kick</value>
</synonyms>
<script>
HackHack ("Kicking", object)
</script>
</command>
<command name="kill_cmd">
<pattern type="string"><![CDATA[^(attack|assault|fight|hit|slap|kill|murder|strike|punch) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>attack</value>
<value>assault</value>
<value>fight</value>
<value>hit</value>
<value>slap</value>
<value>kill</value>
<value>murder</value>
<value>strike</value>
<value>punch</value>
</synonyms>
<script>
HackHack ("Killing", object)
</script>
</command>
<command name="leave_cmd">
<pattern type="string"><![CDATA[^(leave|((walk|go|run|proceed|step)( away|)))( from|) (?<object>.*)$|^leave$]]></pattern>
<synonyms type="stringlist">
<value>leave</value>
<value>walk</value>
<value>go</value>
<value>run</value>
<value>proceed</value>
<value>step</value>
</synonyms>
<script><![CDATA[
// <COND (<NOT ,PRSO>
// <SETG PRSO ,ROOMS>)>
// <COND (<PRSO? ,ROOMS>
// <DO-WALK ,P?OUT>)
// (<PRSO? <LOC ,WINNER>>
// <PERFORM ,V?DISEMBARK ,PRSO>
// <RTRUE>)
// (T
// <PERFORM ,V?DROP ,PRSO>
// <RTRUE>)>>
if (not IsDefined("object")) {
object = "ROOMS"
}
if (object = "ROOMS") {
if (not CheckDarkness()) {
DoWalk ("out")
}
else {
msg ("You can't see a thing!")
}
}
else if (object = game.pov.parent or global.inside_of = object) {
HandleSingleCommand ("leave " + object.alt[0])
game.suppressturnscripts = true
}
else {
HandleSingleCommand ("drop " + object.alt[0])
game.suppressturnscripts = true
}
]]></script>
</command>
<command name="lie_down_on_cmd">
<pattern>lie on #object#;lie in #object#;recline on #object#;recline in #object#</pattern>
<synonyms type="stringlist">
<value>lie</value>
<value>recline</value>
</synonyms>
<script>
msg ("You can't get into " + GetDisplayName(object) + "!")
</script>
</command>
<command name="liedown_cmd">
<pattern>lie down #object#</pattern>
<synonyms type="stringlist">
<value>lie down</value>
</synonyms>
<script>
msg (PickOneString(global.yuks))
</script>
</command>
<command name="look_behind_cmd">
<pattern>look behind #object#;x behind #object#;examine behind #object#</pattern>
<synonyms type="stringlist">
<value>look</value>
<value>x</value>
<value>examine</value>
</synonyms>
<script>
if (HasAttribute(object,"look_behind_f")) {
if (TypeOf(object.look_behind_f) = "string") {
msg (object.look_behind_f)
}
else {
do (object, "look_behind_f")
}
}
else {
msg (WriteVerb(game.pov, "can't") + " look behind " + object.article + ".")
}
</script>
</command>
<command name="look_inside_cmd">
<pattern type="string"><![CDATA[^(look|examine|l|x|ex) (in|inside) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>look</value>
</synonyms>
<script><![CDATA[
if (DoesInherit(object, "container_base") and not DoesInherit(object, "surface")) {
if (not GetBoolean(object, "isopen")) {
msg ("It isn't open.")
}
else {
Tell ("It looks like " + GetDisplayName(object) + " contains ")
contents = GetDirectChildren(object)
if (ListCount(contents) > 2) {
n = ", and"
}
else {
n = "and"
}
s = FormatList(contents, ",", n, "nothing")
msg (s + ".")
}
}
else {
msg (PickOneString(global.yuks))
}
// NOTE This is not from the original source code. So, TODO
]]></script>
</command>
<command name="look_under_cmd">
<pattern>look under #object#;x under #object#;examine under #object#</pattern>
<synonyms type="stringlist">
<value>look</value>
<value>x</value>
<value>examine</value>
</synonyms>
<script>
if (HasAttribute(object,"look_under_f")) {
if (TypeOf(object.look_under_f) = "string") {
msg (object.look_under_f)
}
else {
do (object, "look_under_f")
}
}
else {
msg (WriteVerb(game.pov, "can't") + " look under " + object.article + ".")
}
</script>
</command>
<command name="no_cmd">
<pattern>no;negative</pattern>
<synonyms type="stringlist">
<value>no</value>
<value>negative</value>
</synonyms>
<script>
switch (global.awaiting_reply) {
case (1) {
// return false (???)
}
case (2) {
DoWalk ("south")
}
case (3,10) {
msg ("I should think not.")
}
case (4) {
msg ("The word \"no\" is not in our hostess' vocabulary.")
}
case (5) {
global.awaiting_reply = 3
do (yes_cmd, "script")
}
case (6,11) {
global.awaiting_reply = 6
do (yes_cmd, "script")
}
case (7,8,13,15) {
global.awaiting_reply = 3
do (yes_cmd, "script")
}
case (9) {
msg ("I disagree.")
}
case (12) {
// TODO: Create EngineerLeave,engineer, and global.roars_off
// EngineerLeave
// msg("\"Think you're funny, huh?\" The " + engineer.alias + global.roars_off + ", making sure to spray you with his Sub-Ethon exhaust.")
}
case (14) {
msg ("Then stop.")
}
case (16) {
msg ("I didn't think so.")
}
case (18,19) {
do (yes_cmd, "script")
}
default {
msg ("You sound rather negative.")
}
}
</script>
</command>
<command name="panic_cmd">
<pattern>panic</pattern>
<synonyms type="stringlist">
<value>panic</value>
</synonyms>
<script>
msg ("Not surprised.")
</script>
</command>
<command name="pretty_inventory_cmd">
<pattern type="string">^i$|^inv$|^inventory$</pattern>
<synonyms type="stringlist">
<value>i</value>
<value>inv</value>
<value>inventory</value>
</synonyms>
<script>
list = FormatObjectList(Template("CarryingListHeader"), game.pov, Template("And"), ".")
if (list = "") {
msg ("You are empty-handed.")
}
else {
PrettyInventory
}
</script>
</command>
<command name="read_cmd">
<pattern>read #object#</pattern>
<synonyms type="stringlist">
<value>read</value>
</synonyms>
<script>
if (IsFSet(object, "readbit")) {
msg (object.text)
}
else {
// global.PRSO = object
msg ("How can you read {object:global.PRSO}?")
}
</script>
</command>
<command name="rub_cmd">
<pattern>rub #object#</pattern>
<synonyms type="stringlist">
<value>rub</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="score_cmd">
<pattern>score</pattern>
<synonyms type="stringlist">
<value>score</value>
</synonyms>
<script>
game.suppressturnscripts = true
Score
</script>
</command>
<command name="shake_cmd">
<pattern>shake #object#</pattern>
<synonyms type="stringlist">
<value>shake</value>
</synonyms>
<script>
if (DoesInherit(object, "npc_type")) {
msg ("Be real.")
}
else {
HackHack ("Shaking")
}
</script>
</command>
<command name="show_cmd">
<pattern>show #object1# to #object2#;show #object2# #object1#</pattern>
<synonyms type="stringlist">
<value>show</value>
</synonyms>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="speech_cmd">
<pattern>make speech;give speech</pattern>
<synonyms type="stringlist">
<value>make</value>
<value>give</value>
</synonyms>
<script>
if (not game.pov.parent=Dais) {
s = " or the place"
}
msg ("This isn't the time"+s+" for making speeches.")
</script>
</command>
<command name="stand_before_cmd">
<pattern>stand before #object#;stand in front of #object#</pattern>
<synonyms type="stringlist">
<value>stand</value>
</synonyms>
<script>
do (dig_cmd, "script")
</script>
</command>
<command name="stand_cmd">
<pattern>get up;stand;stand up</pattern>
<synonyms type="stringlist">
<value>get</value>
<value>stand</value>
</synonyms>
<script>
if (global.lying_down) {
global.lying_down = false
msg ("Done.")
if (i_prosser.enabled) {
msg ("You are safe! Prosser heaves a visible sigh of relief, shakes his head and wipes his brow. {global.bulldozer_piles}")
BrickDeath
FuckingClear
}
else if (Here(Front_of_House) and not global.prosser_lying and not fleet.parent = Front_of_House) {
msg ("The {bulldozer_driver.alias} gives a quick chew of his gum and slams in the clutch. {global.bulldozer_piles}")
BrickDeath
FuckingClear
}
}
else {
msg (global.look_around)
}
</script>
</command>
<command name="take_nothing_cmd">
<pattern>get;take;pick up</pattern>
<synonyms type="stringlist">
<value>take</value>
</synonyms>
<script><![CDATA[
msg ("What do you want to " + LCase(game.pov.currentcommand) + "?")
get input {
msg ("<br/>> " + result)
HandleSingleCommand (game.pov.currentcommand + " " + result)
}
]]></script>
</command>
<command name="tell_about_cmd">
<pattern>tell #object1# about #object2#</pattern>
<synonyms type="stringlist">
<value>tell</value>
</synonyms>
<scope>world</scope>
<script>
msg (PickOneString(global.wastes))
</script>
</command>
<command name="tell_time_cmd">
<pattern>tell #object1# #object2#</pattern>
<synonyms type="stringlist">
<value>tell</value>
</synonyms>
<scope>world</scope>
<script>
msg ("That sentence isn't one I recognise.")
</script>
</command>
<command name="through_cmd">
<pattern type="string"><![CDATA[^(walk|go|run|proceed|step) (through|thru) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>walk</value>
<value>go</value>
<value>run</value>
<value>proceed</value>
<value>step</value>
</synonyms>
<script><![CDATA[
// <ROUTINE V-THROUGH ("AUX" M)
if (GetBoolean(object,"doorbit")) {
// <DO-WALK <OTHER-SIDE ,PRSO>>
DoWalk (object.other_side)
// <RTRUE>)
}
else if (GetBoolean(object,"vehbit")) {
// <PERFORM ,V?BOARD ,PRSO>
// <RTRUE>)
}
else if (not GetBoolean(object,"take") and not HasScript(object,"take")) {
// <TELL "You hit your head against">
Tell ("You hit your head against")
// <ARTICLE ,PRSO T>
Tell (" "+ GetDisplayName(object))
// <TELL " as you attempt this feat." CR>)
msg (" as you attempt this feat.")
}
else {
// <V-CARVE>)>>
HandleSingleCommand ("carve " + object.alt[0])
game.suppressturnscripts = true
}
// (<IN? ,PRSO ,WINNER>
// <PERFORM ,V?EXAMINE ,EYES>
// <RTRUE>)
]]></script>
</command>
<command name="throw_cmd">
<pattern type="string"><![CDATA[^(throw|hurl|toss) (?<object1>.*) (up|at|to|through|in) (?<object2>.*)$]]></pattern>
<synonyms type="stringlist">
<value>throw</value>
<value>hurl</value>
<value>toss</value>
</synonyms>
<script>
VThrow (QuickParams("PRSO", object1, "PRSI", object2))
// PreThrow("PRSO",object1,"PRSI",object2)
</script>
</command>
<command name="throw_in_cmd">
<pattern><![CDATA[^(throw|hurl|toss) in (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>throw</value>
<value>hurl</value>
<value>toss</value>
</synonyms>
<script>
if (object = towel) {
do (quit, "script")
}
else {
do (tell_time_cmd, "script")
}
</script>
</command>
<command name="throw_single_cmd">
<pattern type="string"><![CDATA[^(throw|hurl|toss) (?<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>throw</value>
<value>hurl</value>
<value>toss</value>
</synonyms>
<scope>inventory</scope>
<script>
VThrow (QuickParams("PRSO",object))
// PreThrow(QuickParams("PRSO",object))
</script>
</command>
<command name="walk_around_cmd">
<pattern>walk around;walk around #object#</pattern>
<synonyms type="stringlist">
<value>walk</value>
</synonyms>
<script><![CDATA[
if (not IsDefined("object")) {
msg ("no object")
}
else {
// <SETG AWAITING-REPLY 16>
// <ENABLE <QUEUE I-REPLY 2>>
// <TELL "Did you have any particular direction in mind?" CR>>
global.awaiting_reply = 16
EnableQueue (i_reply, 2)
msg ("Did you have any particular direction in mind?")
}
// msg (PickOneString(global.wastes))
]]></script>
</command>
<command name="walk_to_cmd">
<pattern type="string"><![CDATA[^(walk|go|run|proceed|step|approach)( to|) ?(<object>.*)$]]></pattern>
<synonyms type="stringlist">
<value>approach</value>
<value>walk</value>
<value>go</value>
<value>run</value>
<value>proceed</value>
<value>step</value>
</synonyms>
<script>
if (object.parent = game.pov.parent or object.parent = global.global_in) {
if (object = Trillian or object = hostess) {
Tell ("She")
}
else if (HasType(object, "npc_type") and not object = Nutrimat and not object = screening_door and not object = beast) {
Tell ("He")
}
else {
Tell ("It")
}
msg ("'s here!")
}
else {
do (walk_around_cmd, "script")
}
</script>
</command>
<command name="what_cmd">
<pattern>what is #object#;what #object#;whats #object#;what's #object#</pattern>
<synonyms type="stringlist">
<value>what</value>
<value>whats</value>
<value>what's</value>
</synonyms>
<scope>world</scope>
<script>
msg ("Good question.")
</script>
</command>
<command name="what_about_cmd">
<pattern>what about #object#</pattern>
<synonyms type="stringlist">
<value>what</value>
</synonyms>
<scope>world</scope>
<script>
msg ("Well, what about it?")
</script>
</command>
<command name="what_time_cmd">
<pattern>what #object1# #object2#;whats #object1# #object2#;what's #object1# #object2#;what is #object1# #object2#</pattern>
<synonyms type="stringlist">
<value>what</value>
<value>whats</value>
<value>what's</value>
</synonyms>
<scope>world</scope>
<script>
do (tell_time_cmd, "script")
</script>
</command>
<command name="who_am_i_cmd">
<pattern>who am i</pattern>
<synonyms type="stringlist">
<value>who</value>
</synonyms>
<script>
msg ("You are " + GetDisplayAlias(GetObject(global.identity_flag)) + ".")
</script>
</command>
<command name="yes_cmd">
<pattern>yes;y;affirmative</pattern>
<synonyms type="stringlist">
<value>yes</value>
<value>y</value>
<value>affirmative</value>
</synonyms>
<script>
switch (global.awaiting_reply) {
case (1) {
DoWalk ("south")
}
case (2) {
// return false (???)
}
case (3) {
msg ("Well, tough.")
}
case (4) {
// take item dropped at party
}
case (5) {
msg ("So do I.")
}
case (6,8,11,13,14,15) {
msg ("That was just a rhetorical question.")
}
case (7,9) {
msg ("Well, good for you!")
}
case (10) {
HandleSingleCommand ("enjoy ford")
game.suppressturnscripts = true
}
case (12) {
// TODO Create i_engineer
EnableQueue (i_engineer, 2)
msg ("\"Well, let's see the malfunctioning equipment.\"")
}
case (16) {
msg ("Then type it.")
}
case (18,19) {
msg ("\"Well, leave me alone then! I'm busy!\"")
}
default {
msg ("You sound rather positive.")
}
}
</script>
</command>
<command name="ask">
<pattern type="string"><![CDATA[^ask (?<object>.*) about$]]></pattern>
<synonyms type="stringlist">
<value>ask</value>
</synonyms>
<script>
// global.winner = object
// DoAskTell (object, text, "ask", "askdefault", "DefaultAsk")
msg ("I didn't understand your command.")
game.suppressturnscripts = true
</script>
</command>
<command name="close">
<pattern>close #object#</pattern>
<synonyms type="stringlist">
<value>close</value>
</synonyms>
<script>
if (object = thing) {
msg ("Come to think of it, you vaguely remember an instruction booklet with directions for that. You never read it and lost it months ago.")
}
else {
TryOpenClose (false, object)
}
</script>
</command>
<command name="drop">
<pattern>drop #object#</pattern>
<allow_all />
<scope>inventory</scope>
<synonyms type="stringlist">
<value>drop</value>
</synonyms>
<script>
if (multiple and ListCount(object) = 0) {
msg (Template("NotCarryingAnything"))
}
else {
foreach (obj, object) {
if (not multiple or Contains(game.pov, obj)) {
DoDrop (obj, multiple)
}
}
}
</script>
</command>
<command name="give">
<pattern type="string"><![CDATA[^give (?<object1>.*) to (?<object2>.*)$]]></pattern>
<synonyms type="stringlist">
<value>give</value>
</synonyms>
<script>
HandleGiveTo (object1, object2)
</script>
</command>
<command name="givesingle">
<pattern>give #object#</pattern>
<synonyms type="stringlist">
<value>give</value>
</synonyms>
<script><![CDATA[
if (HasScript(object, "givesingle")) {
do (object, "givesingle")
}
else {
if (GetBoolean(object, "givesingle")) {
candidates = CreateGiveMenuList (object)
if (ListCount(candidates) = 0) {
msg (Template("NoObjectsAvailable"))
}
else {
game.pov.givemenuobject = object
if (HasString(object, "givemenuprompt")) {
menucaption = object.givemenuprompt
}
else {
menucaption = Template("GiveToMenu")
}
ShowMenu (menucaption, candidates, true) {
if (result <> null) {
HandleGiveTo (game.pov.givemenuobject, GetObject(result))
game.pov.givemenuobject = null
}
}
}
}
else {
msg (DynamicTemplate("CantGive", object))
}
}
]]></script>
</command>
<command name="go">
<pattern type="string"><![CDATA[^go to (?<exit>.*)$|^go (?<exit>.*)$|^(?<exit>north|east|south|west|northeast|northwest|southeast|southwest|in|out|up|down|n|e|s|w|ne|nw|se|sw|o|u|d)$]]></pattern>
<synonyms type="stringlist">
<value>go</value>
<value>north</value>
<value>n</value>
<value>west</value>
<value>w</value>
<value>south</value>
<value>s</value>
<value>east</value>
<value>e</value>
<value>northwest</value>
<value>nw</value>
<value>northeast</value>
<value>ne</value>
<value>southeast</value>
<value>se</value>
<value>southwest</value>
<value>sw</value>
<value>in</value>
<value>out</value>
<value>up</value>
<value>down</value>
<value>o</value>
<value>u</value>
<value>d</value>
</synonyms>
<unresolved type="script">
if (global.in_bed) {
s = "You'll have to get out of bed first."
}
else {
s = WriteVerb(game.pov, "can't") + " go that way."
}
msg (s)
if (global.in_bed) {
RunTurnScripts
}
</unresolved>
<script>
if (global.in_bed) {
msg ("You'll have to get out of bed first.")
}
else if (global.lying_down) {
if (Here(Front_of_House)) {
msg ("You'll have to get off the ground first!")
FuckingClear
}
else {
msg ("You'll have to get up first.")
}
}
else if (exit.visible) {
if (exit.locked) {
msg (exit.lockmessage)
}
else if (not TestExitGlobal(exit)) {
// Do nothing, already handled
}
else if (exit.runscript) {
if (HasScript(exit, "script")) {
do (exit, "script")
}
}
else if (exit.lookonly) {
msg (Template("UnresolvedLocation"))
}
else {
if (HasString(exit, "message")) {
if (not exit.message = "") {
if (game.clearscreenonroomenter) {
game.currentexitmessage = exit.message
}
else {
msg (exit.message)
}
}
}
game.pov.parent = exit.to
}
}
else {
msg (Template("UnresolvedLocation"))
}
</script>
</command>
<command name="help">
<pattern type="string">^help$|^\?$</pattern>
<synonyms type="stringlist">
<value>help</value>
<value>?</value>
</synonyms>
<script>
game.suppressturnscripts = true
do (hint_cmd, "script")
// msg ("If you're really stuck, a complete map and InvisiClues Hint Booklet are available from your dealer, or via mail order with the form that came in your package.")
</script>
</command>
<command name="inventory">
<pattern type="string">^i$|^inv$|^inventory$</pattern>
<synonyms type="stringlist">
<value>i</value>
<value>inv</value>
<value>inventory</value>
</synonyms>
<script>
do (pretty_inventory_cmd, "script")
</script>
</command>
<command name="jump">
<pattern type="string">^jump$</pattern>
<synonyms type="stringlist">
<value>jump</value>
</synonyms>
<script>
msg (Template("DefaultJump"))
</script>
</command>
<command name="lie">
<pattern type="string">^lie$|^lie down$</pattern>
<synonyms type="stringlist">
<value>lie</value>
</synonyms>
<script>
if (global.in_bed or (game.pov.parent = Bedroom and global.lying_down)) {
msg ("Look around you.{notfirst: (You already are.)}")
}
else if (game.pov.parent = Bedroom) {
global.in_bed = true
global.inside_of = bed
global.in_something = true
global.lying_down = true
msg ("You are now in the bed.")
request (UpdateLocation, GetDisplayAlias(game.pov.parent))
}
else if (game.pov.parent = Front_of_House) {
// global.lying_down = true
// msg ("You are now lying on the ground.")
HandleSingleCommand ("block bulldozer")
game.suppressturnscripts = true
}
else {
if (not global.lying_down) {
// TODO: Do stuff
msg (PickOneString(global.wastes))
}
else {
msg ("Look around you.{notfirst: (You already are.)}")
}
}
</script>
</command>
<command name="listen">
<pattern type="string">^listen$</pattern>
<synonyms type="stringlist">
<value>listen</value>
</synonyms>
<script>
msg (Template("DefaultListen"))
</script>
</command>
<command name="log_cmd">
<pattern type="string">^log$</pattern>
<synonyms type="stringlist">
<value>log</value>
</synonyms>
<script>
msg ("I don't know the word \"log\".")
</script>
</command>
<command name="look">
<pattern type="string">^look$|^l$</pattern>
<synonyms type="stringlist">
<value>look</value>
<value>l</value>
</synonyms>
<script>
ShowRoomDescription
</script>
</command>
<command name="lookat">
<pattern>look at #object#; look #object#; x #object#; examine #object#; exam #object#; ex #object#</pattern>
<synonyms type="stringlist">
<value>look</value>
<value>x</value>
<value>ex</value>
<value>exam</value>
<value>examine</value>
</synonyms>
<script>
if (GetBoolean(object, "hidechildren")) {
object.hidechildren = false
}
if (TypeOf(object, "look") = "script") {
if (not HasAttribute(object,"timesexamined")) {
object.timesexamined = 0
}
do (object, "look")
object.timesexamined = object.timesexamined + 1
}
else {
lookdesc = ""
if (GetBoolean(object, "unimportant")) {
lookdesc = "That's not important; leave it alone."
}
if (HasString(object, "look")) {
lookdesc = object.look
}
if (LengthOf(lookdesc) = 0) {
lookdesc = DynamicTemplate("DefaultObjectDescription",object)
}
if (GetBoolean(object, "switchedon")) {
if (HasString(object, "switchedondesc")) {
lookdesc = lookdesc + " " + object.switchedondesc
}
}
else {
if (HasString(object, "switchedoffdesc")) {
lookdesc = lookdesc + " " + object.switchedoffdesc
}
}
isDark = CheckDarkness()
if (isDark and not GetBoolean(object, "lightsource")) {
lookdesc = DynamicTemplate("LookAtDarkness", object)
}
else {
if (not HasAttribute(object,"timesexamined")) {
object.timesexamined = 0
}
object.timesexamined = object.timesexamined + 1
}
msg (lookdesc)
}
ListObjectContents (object)
</script>
</command>
<command name="lookdir">
<pattern type="string"><![CDATA[^look (?<exit>north|east|south|west|northeast|northwest|southeast|southwest|out|up|down|n|e|s|w|ne|nw|se|sw|o|u|d)$]]></pattern>
<synonyms type="stringlist">
<value>look</value>
</synonyms>
<script><![CDATA[
if (HasScript(exit, "look")) {
do (exit, "look")
}
else {
message = DynamicTemplate("YouLooking",exit.alias)
if (HasString(exit, "look")) {
if (exit.look <> "") {
message = exit.look
}
}
if (exit.locked) {
if (HasString(exit,"lockmessage")) {
lockmessage = exit.lockmessage
}
else {
lockmessage = Template("LockedExit")
}
msg (message+" "+lockmessage)
}
else {
msg (message)
}
}
]]></script>
</command>
<command name="oops">
<pattern type="string"><![CDATA[^oops (?<text>.*)$]]></pattern>
<isoops />
<synonyms type="stringlist">
<value>oops</value>
</synonyms>
<script><![CDATA[
hasoops = false
if (HasAttribute(game, "unresolvedcommand")) {
if (game.unresolvedcommand <> null) {
hasoops = true
}
}
if (not hasoops) {
msg (Template("DefaultOops"))
}
else {
dictionary remove (game.unresolvedcommandvarlist, game.unresolvedcommandkey)
dictionary add (game.unresolvedcommandvarlist, game.unresolvedcommandkey, text)
HandleSingleCommandPattern ("", game.unresolvedcommand, game.unresolvedcommandvarlist)
}
game.suppressturnscripts = true
]]></script>
</command>
<command name="open">
<pattern>open #object#</pattern>
<synonyms type="stringlist">
<value>open</value>
</synonyms>
<script><![CDATA[
if (not object = gown and not object = mail) {
TryOpenClose (true, object)
}
else if (object = gown) {
if (gown.worn and gown.parent = game.pov) {
// TryOpenClose (true, object)
if (not gown.isopen) {
contents = GetDirectChildren(gown)
if (ListCount(contents) > 2) {
n = ", and"
}
else {
n = "and"
}
s = FormatList(contents, ",", n, "nothing")
msg ("Opening your gown reveals " + s + ".")
// msg("Opening your gown reveals a thing your aunt gave you which you don't know what it is, a buffered analgesic, and pocket fluff.")
gown.isopen = true
}
else {
msg ("It is already open.")
}
}
else {
msg ("It's hard to open or close the pocket unless you're wearing the gown.")
}
}
else if (object = mail) {
msg (mail.look)
}
]]></script>
</command>
<command name="put">
<pattern type="string"><![CDATA[^(put|insert|place|drop) (?<object1>.*) (on to|onto|in to|into|on|in) (?<object2>.*)$]]></pattern>
<scope>object1=inventory|object2=container</scope>
<synonyms type="stringlist">
<value>put</value>
<value>insert</value>
<value>place</value>
<value>drop</value>
</synonyms>
<allow_all />
<script><![CDATA[
put_something = false
// msg (multiple)
// msg (object1)
// msg (object2)
// msg ("<hr/>")
if (multiple) {
if (ListCount(object2) > 1) {
msg ("object2 can't be multiple!")
}
else {
object2 = ListItem(object2,0)
object1 = ListExclude(object1, object2)
foreach (obj, object1) {
if (not GetBoolean(obj, "worn")) {
Tell (CapFirst(GetDisplayAlias(obj))+": ")
if (obj = object2) {
msg ("You can't put something into itself.")
}
else {
HandlePut (obj, object2)
put_something = true
}
}
}
}
if (not put_something) {
msg ("You didn't put anything anywhere!")
}
}
else {
object1 = ListItem(object1,0)
object2 = ListItem(object2,0)
if (object1 = object2) {
msg ("You can't put something into itself.")
}
else {
HandlePut (object1, object2)
}
}
]]></script>
</command>
<command name="quit">
<pattern type="string">^quit$</pattern>
<synonyms type="stringlist">
<value>quit</value>
</synonyms>
<script>
if (not HasAttribute(game,"finishing")) {
Score
}
finish
JS.eval ("window.close();")
</script>
</command>
<command name="remove">
<pattern>take #object# off; remove #object#; take off #object#; doff #object#</pattern>
<allow_all />
<scope>inventory</scope>
<synonyms type="stringlist">
<value>take</value>
<value>remove</value>
<value>doff</value>
</synonyms>
<script>
if (multiple and ListCount(object) = 0) {
msg (Template("NothingToRemove"))
}
else {
foreach (obj, object) {
if (obj = gown and game.pov.parent = Front_of_House) {
msg ("Do you want to get arrested for indecent exposure?")
}
else {
if (multiple) {
OutputTextNoBr (GetDisplayAlias(obj) + ": ")
}
f = _DoRemove(obj)
}
}
}
UpdateArmour
</script>
</command>
<command name="removefrom">
<pattern type="string"><![CDATA[^(remove|take|get|eject) (?<object1>.*) (from|out of|off|out) (?<object2>.*)$]]></pattern>
<scope>object1=contents|object2=container</scope>
<synonyms type="stringlist">
<value>remove</value>
<value>take</value>
<value>get</value>
<value>eject</value>
</synonyms>
<script>
// remove object1 from object2
// if object2 does indeed contain object1, this is a synonym for "take object1"
if (not Contains(object2, object1)) {
msg (DynamicTemplate("ObjectDoesNotContain", object2, object1))
}
else {
DoTake (object1, false)
}
</script>
</command>
<command name="restart">
<pattern type="string">^restart$</pattern>
<synonyms type="stringlist">
<value>restart</value>
</synonyms>
<script>
if (not HasAttribute(game,"finishing")) {
Score
on ready {
Ask (Template("WantRestartGame")) {
if (result) {
JS.eval ("if(webPlayer){window.location.reload();}else if (typeof(RestartGame) != 'undefined'){RestartGame();}else{addTextAndScroll('Try pressing CTRL+R.')};")
}
else {
game.suppressturnscripts = true
}
}
}
}
else {
JS.eval ("if(webPlayer){window.location.reload();}else if (typeof(RestartGame) != 'undefined'){RestartGame();}else{addTextAndScroll('Try pressing CTRL+R.')};")
}
</script>
</command>
<command name="save">
<pattern type="string">^save$</pattern>
<synonyms type="stringlist">
<value>save</value>
</synonyms>
<script>
if (HasAttribute(game, "questplatform")) {
if (game.questplatform = "desktop") {
request (RequestSave, "")
}
else {
JS.saveGame ()
}
}
else {
request (RequestSave, "")
}
game.suppressturnscripts = true
</script>
</command>
<command name="sit">
<pattern type="string">^sit$|^sit down$</pattern>
<synonyms type="stringlist">
<value>sit</value>
</synonyms>
<script>
msg (Template("DefaultSitDown"))
</script>
</command>
<command name="sleep">
<pattern type="string">^sleep$|^rest$</pattern>
<synonyms type="stringlist">
<value>sleep</value>
</synonyms>
<script>
if (not house.demolished) {
OutputTextNoBr ("You nod off and are wakened briefly a few hours later as")
BetterLuck
}
else {
msg (Template("DefaultSleep"))
}
</script>
</command>
<command name="take">
<pattern>take #object#; get #object#; pick up #object#;#object# take;#object# get;#object# pick up</pattern>
<allow_all />
<scope>notheld</scope>
<synonyms type="stringlist">
<value>take</value>
<value>get</value>
<value>pick</value>
</synonyms>
<script>
took_something = false
foreach (obj, object) {
// Log("Running take:")
// Log(obj.name)
// if this is multiple then we should skip anything in a container that has already been taken
// (always earlier in the list) and anything held by an NPC.
// Scenery and anything flagged "not_all" will already be excluded
if (GetBoolean(obj, "unimportant")) {
if (not multiple) {
msg ("That's not important; leave it alone.")
}
else {
msg (GetDisplayAlias(obj) + ": That's not important; leave it alone.")
}
}
else if (not multiple or (not Contains(game.pov, obj.parent) and not DoesInherit(obj.parent, "npc_type"))) {
DoTake (obj, multiple)
took_something = true
}
}
if (multiple and not took_something) {
if (CheckDarkness()) {
msg ("You can't see a thing!")
}
else {
msg (Template("NothingToTake"))
}
}
</script>
</command>
<command name="tell">
<pattern type="string"><![CDATA[^tell (?<object>.*) about$]]></pattern>
<synonyms type="stringlist">
<value>tell</value>
</synonyms>
<script>
// global.winner = object
// DoAskTell (object, text, "tell", "telldefault", "DefaultTell")
msg ("I didn't understand your command.")
game.suppressturnscripts = true
</script>
</command>
<command name="tellto">
<pattern type="string"><![CDATA[^(tell|ask) (?<object>.*) to (?<text>.*)$]]></pattern>
<synonyms type="stringlist">
<value>tell</value>
</synonyms>
<script>
global.winner = object
DoAskTell (object, text, "tellto", "telltodefault", "DefaultTellTo")
</script>
</command>
<command name="alttellto">
<pattern type="string"><![CDATA[^(?<object>.*), (?<text>.*)$]]></pattern>
<synonyms type="stringlist">
<value>tell</value>
</synonyms>
<script>
global.winner = object
DoAskTell (object, text, "tellto", "telltodefault", "DefaultTellTo")
</script>
</command>
<command name="transcript_off_cmd">
<pattern type="string">^(transcript|script) off$|^disable (script|transcript)$</pattern>
<synonyms type="stringlist">
<value>transcript</value>
<value>script</value>
<value>disable</value>
</synonyms>
<script>
if (not GetBoolean(game, "notranscript")) {
if (GetBoolean(game,"savetranscript")) {
game.savetranscript = false
JS.eval ("var savingTranscript = false;")
msg ("Transcript disabled.")
}
else {
msg ("The transcript is already disabled.")
}
}
else {
msg ("This game has no transcript feature.")
}
game.suppressturnscripts = true
</script>
</command>
<command name="transcript_on_cmd">
<pattern type="string">^(transcript|script)( on|)$|^enable (script|transcript)$</pattern>
<synonyms type="stringlist">
<value>transcript</value>
<value>script</value>
<value>enable</value>
</synonyms>
<script><![CDATA[
if (not GetBoolean(game, "notranscript")) {
if (not GetBoolean(game,"savetranscript")) {
msg ("Please enter a filename. (<b> \"-transcript.html\" will be appended to this filename.)<br/> <i>(The file will be saved in \"Documents\\Quest Transcripts\".)</i></b>")
JS.eval ("$('input#txtCommand').val(transcriptName);")
get input {
filename = Trim(result)
if (not filename = "") {
JS.eval ("transcriptName = '"+filename+"';")
}
JS.eval ("savingTranscript = true;")
game.savetranscript = true
pre = "<hr/>Transcript enabled for:<br/>"
s = "<b>TITLE: </b>" + game.gamename + "<br/>"
if (HasAttribute (game, "author")) {
s = s + "<b>AUTHOR: </b>" + game.author + "<br/>"
}
s = s + "<b>VERSION: </b>" + game.version + "<br/>"
s = s + "<b>IFID: </b>" + game.gameid + "<br/>"
s = s + "<br/>"
s = pre + s
msg ("")
msg (s)
msg ("<br/><b><i>[ Enter </i>SCRIPT OFF<i> to disable the transcript. ]</i></b>")
}
}
else {
msg ("The transcript is already enabled.")
}
}
else {
msg ("This game has no transcript feature.")
}
game.suppressturnscripts = true
]]></script>
</command>
<command name="undo">
<pattern type="string">^undo$</pattern>
<isundo />
<synonyms type="stringlist">
<value>undo</value>
</synonyms>
<script>
msg ("I don't know the word \"undo\".")
game.suppressturnscripts = true
</script>
</command>
<command name="use">
<pattern>use #object#</pattern>
<synonyms type="stringlist">
<value>use</value>
</synonyms>
<script>
msg ("I don't know the word \"use\".")
</script>
</command>
<command name="useon">
<pattern type="string"><![CDATA[^use (?<object1>.*) (on|with) (?<object2>.*)$]]></pattern>
<synonyms type="stringlist">
<value>use</value>
</synonyms>
<script>
// HandleUseOn (object1, object2)
msg ("I don't know the word \"use\".")
</script>
</command>
<command name="version_cmd">
<pattern type="string">^(version|info|about)$</pattern>
<synonyms type="stringlist">
<value>version</value>
<value>info</value>
<value>about</value>
</synonyms>
<script><![CDATA[
msg ("THE HITCHHIKER'S GUIDE TO THE GALAXY<br/>Infocom interactive fiction - a science fiction story<br/>Copyright (c) 1984 by Infocom, Inc. All rights reserved.<br/>Release {game.version} / Serial number {game.serial_number}<span style='color:" + game.defaultbackground + "'> / Revision " + game.revision + "</span>")
game.suppressturnscripts = true
]]></script>
</command>
<command name="view_transcript_cmd">
<pattern type="string">^(view|display|show) (the |)(script|transcript)$</pattern>
<synonyms type="stringlist">
<value>view</value>
<value>display</value>
<value>show</value>
</synonyms>
<script>
if (not GetBoolean(game, "notranscript")) {
JS.showTranscript ()
}
else {
msg ("This game has no transcript feature.")
}
game.suppressturnscripts = true
</script>
</command>
<command name="wait">
<pattern type="string">^wait$|^z$</pattern>
<synonyms type="stringlist">
<value>wait</value>
<value>z</value>
</synonyms>
<script>
msg (Template("DefaultWait") + "..")
RunTurnScripts
RunTurnScripts
RunTurnScripts
game.suppressturnscripts = true
</script>
</command>
<command name="wear">
<pattern>put #object# on; wear #object#; put on #object#; don #object#; wear #object#</pattern>
<allow_all />
<scope>inventory</scope>
<synonyms type="stringlist">
<value>put</value>
<value>wear</value>
<value>don</value>
</synonyms>
<script>
if (multiple and ListCount(object) = 0) {
msg (Template("NothingToWear"))
}
else {
foreach (obj, object) {
if (multiple) {
OutputTextNoBr (GetDisplayAlias(obj) + ": ")
}
f = _DoWear(obj)
}
UpdateArmour
}
</script>
</command>
<command name="xyzzy">
<pattern type="string">^xyzzy$</pattern>
<script>
msg ("I don't know the word \"xyzzy\".")
game.suppressturnscripts = true
</script>
</command>
<object name="earth_section">
<object name="Bedroom">
<inherit name="editor_room" />
<loc>rooms</loc>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<dark />
<darkroomdescription>It is pitch black.</darkroomdescription>
<synonym>travel</synonym>
<adjective>time</adjective>
<alias>Bedroom</alias>
<flags>rlandbit</flags>
<global>house home global_bed bulldozer window stairs bedroom_door third_planet water</global>
<action type="routine">
return (BedroomF(QuickParams("cmd",cmd,"var",var)))
</action>
<description type="script">
BedroomF ("look")
</description>
<exit alias="south" to="Front_Porch">
<inherit name="southdirection" />
<runscript />
<script type="script">
return (BedroomExitF(global.PRSA, QuickParams("exit",global.PRSO)))
</script>
</exit>
<exit alias="out" to="Front_Porch">
<inherit name="outdirection" />
<runscript />
<script type="script">
return (BedroomExitF(global.PRSA, QuickParams("exit",global.PRSO)))
</script>
</exit>
<exit alias="down" to="Front_Porch">
<inherit name="downdirection" />
<runscript />
<script type="script">
return (BedroomExitF(global.PRSA, QuickParams("exit",global.PRSO)))
</script>
</exit>
<command name="turn_on_bedroom_light_cmd">
<pattern>turn on light;turn on lights;switch on light;switch on lights;light;turn on lamp;switch on lamp</pattern>
<synonyms type="stringlist">
<value>turn</value>
<value>switch</value>
<value>light</value>
<value>lights</value>
<value>lamp</value>
</synonyms>
<script>
if (LCase(Trim(game.pov.currentcommand)) = "light") {
msg ("(light)")
}
if (Bedroom.dark) {
msg ("Good start to the day. Pity it's going to be the worst one of your life. The light is now on.{cr}")
SetLight (Bedroom)
FSet (Bedroom, "onbit")
ThisIsIt (light)
light.switchedon = true
ShowRoomDescription
request (UpdateLocation, GetDisplayAlias(game.pov.parent))
}
else {
msg ("It's already on.")
}
</script>
</command>
<command name="getoutofbed">
<pattern>exit;get up;get out;exit bed;get off;get out of bed;get off bed;get out of the bed;get off of the bed;stand;stand up</pattern>
<synonyms type="stringlist">
<value>exit</value>
<value>get</value>
<value>stand</value>
<value>get up</value>
<value>get off</value>
<value>stand up</value>
</synonyms>
<script>
if (global.in_bed) {
global.in_bed = false
global.inside_of = nowhere
global.in_something = false
global.lying_down = false
msg ("Very difficult, but you manage it. The room is still spinning. It dips and sways a little.")
request (UpdateLocation, GetDisplayAlias(game.pov.parent))
}
else {
msg ("You are already standing.")
}
</script>
</command>
<object name="bedroom_pseudo">
<synonym>bedroom</synonym>
<adjective>small</adjective>
<alias>bedroom</alias>
<flags>ndescbit</flags>
<scenery />
<action type="routine">
return (GlobalRoomF(cmd,var))
</action>
</object>
<object name="phone">
<alias>telephone</alias>
<synonym>phone telephone receiver</synonym>
<flags>ndescbit takebit trytakebit</flags>
<scenery />
<all_ok />
<take />
<action type="routine">
return (PhoneF(cmd,var))
</action>
</object>
<object name="bed">
<inherit name="surface" />
<feature_container />
<listchildren />
<alias>bed</alias>
<synonym>bed</synonym>
<scenery />
<flags>vehbit contbit surfacebit searchbit openbit ndescbit</flags>
<vehbit />
<action type="routine">
return (BedF(cmd,var))
</action>
</object>
<object name="curtains">
<alias>your curtains</alias>
<synonym>curtain curtains shade shades</synonym>
<adjective>your</adjective>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (CurtainsF(cmd,var))
</action>
</object>
<object name="gown">
<inherit name="wearable" />
<inherit name="container_closed" />
<feature_wearable />
<feature_container />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<listchildren />
<scenery />
<all_ok />
<take />
<alias>your gown</alias>
<ldesc>Your gown is here.</ldesc>
<inroomdescription>{if not gown.scenery:{br}{gown.ldesc}}</inroomdescription>
<synonym>gown pocket robe loop</synonym>
<adjective>my your dressing tatty faded battered</adjective>
<flags>wearbit trytakebit takebit contbit ndescbit narticlebit searchbit</flags>
<size type="int">15</size>
<capacity type="int">14</capacity>
<action type="routine">
return (GownF(cmd,var))
</action>
<object name="thing">
<inherit name="container_open" />
<alias>thing your aunt gave you which you don't know what it is</alias>
<synonym>thing gift</synonym>
<adjective>aunt's</adjective>
<flags>takebit contbit searchbit openbit</flags>
<take />
<feature_container />
<listchildren />
<size type="int">6</size>
<capacity type="int">200</capacity>
<action type="routine">
return (ThingF(cmd,var))
</action>
</object>
<object name="pocket_fluff">
<alias>pocket fluff</alias>
<synonym>fluff lint</synonym>
<adjective>pocket</adjective>
<flags>takebit narticlebit</flags>
<take />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<size type="int">1</size>
<generic type="object">pocket_fluff</generic>
</object>
<object name="tablet">
<alias>buffered analgesic</alias>
<synonym>analgesic tablet aspirin pill</synonym>
<adjective>large buffered</adjective>
<flags>takebit eatbit</flags>
<take />
<eatbit />
<size type="int">2</size>
<action type="routine">
return (TabletF(cmd,var))
</action>
</object>
</object>
<object name="sink">
<alias>it</alias>
<synonym>basin washbasin sink</synonym>
<adjective>wash</adjective>
<flags>ndescbit narticlebit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (UnimportantThingF())
</action>
</object>
<object name="bedroom_furnishings">
<alias>it</alias>
<synonym>carpet wallpaper paper chair</synonym>
<adjective>wall faded old</adjective>
<flags>ndescbit narticlebit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (UnimportantThingF())
</action>
</object>
<object name="toothbrush">
<alias>toothbrush</alias>
<synonym>toothbrus toothbrush brush tool tools</synonym>
<adjective>tooth my proper</adjective>
<flags>takebit trytakebit toolbit</flags>
<take />
<size type="int">3</size>
<action type="routine">
return (ToothbrushF(cmd,var))
</action>
<generic type="object">tweezers</generic>
</object>
<object name="screwdriver">
<alias>flathead screwdriver</alias>
<synonym>screwdriv screwdriver tool tools</synonym>
<adjective>flathead proper</adjective>
<flags>takebit trytakebit toolbit</flags>
<size type="int">3</size>
<generic type="object">tweezers</generic>
<take type="script">
if (global.in_bed) {
msg (global.reach_bit)
}
else if (global.headache) {
msg (global.lurches)
}
else {
AddToInventory (screwdriver)
FClear (screwdriver, "trytakebit")
msg ("Taken.")
}
</take>
</object>
<object name="player">
<inherit name="editor_object" />
<inherit name="editor_player" />
<feature_player />
<follow>I'd like to, but like most computers I don't have legs.</follow>
<telldefault type="script">
msg ("Talking to yourself is a sign of impending mental collapse.")
</telldefault>
<telltodefault type="script">
msg ("Talking to yourself is a sign of impending mental collapse.")
</telltodefault>
<askdefault type="script">
msg ("Talking to yourself is a sign of impending mental collapse.")
</askdefault>
<kill type="script">
JigsUp ("Done.")
</kill>
<object name="hangover">
<inherit name="editor_object" />
<look>You have a big blinding throbber.</look>
<drop type="boolean">false</drop>
<alt type="stringlist">
<value>headache</value>
<value>hangover</value>
</alt>
<alias>splitting headache</alias>
<action type="routine">
return (HangoverF(cmd,var))
</action>
</object>
<object name="no_tea">
<inherit name="editor_object" />
<drop type="boolean">false</drop>
<look>You're talking complete nonsense; pull yourself together.</look>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<dropmsg>Your common sense tells you that you can't do that.</dropmsg>
<alt type="stringlist">
<value>tea</value>
<value>no tea</value>
</alt>
<attr name="enjoy_f">You're talking complete nonsense; pull yourself together.</attr>
<alias>no tea</alias>
</object>
</object>
</object>
<object name="Front_Porch">
<inherit name="editor_room" />
<loc>rooms</loc>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<synonym>beam beams</synonym>
<adjective>matter transfere transference</adjective>
<alias>Front Porch</alias>
<description>This is the enclosed front porch of your home. Your garden lies to the south, and you can reenter your home to the north.</description>
<ldesc>{Front_Porch.description}</ldesc>
<up>to bedroom</up>
<north>to bedroom</north>
<out>per ClothesExitF</out>
<flags>rlandbit onbit</flags>
<global>house home stairs third_planet bedroom_door</global>
<exit alias="up" to="Bedroom">
<inherit name="updirection" />
</exit>
<exit alias="north" to="Bedroom">
<inherit name="northdirection" />
</exit>
<exit alias="south" to="Front_of_House">
<inherit name="southdirection" />
<runscript />
<script type="script">
ClothesExitF
</script>
</exit>
<exit alias="out" to="Front_of_House">
<inherit name="outdirection" />
<runscript />
<script type="script">
ClothesExitF
</script>
</exit>
<object name="doormat">
<synonym>doormat mat</synonym>
<adjective>door</adjective>
<alias>doormat</alias>
<flags>ndescbit</flags>
<scenery />
<action type="routine">
return (UnimportantThingF())
</action>
</object>
<object name="mail">
<alias>loose pile of junk mail</alias>
<fdesc>On the doormat is a loose pile of junk mail.</fdesc>
<scenery />
<all_ok />
<inroomdescription>{if mail.scenery:{br}{mail.fdesc}}</inroomdescription>
<synonym>order mail pile letter letters</synonym>
<adjective>demolishi junk my official loose</adjective>
<flags>takebit readbit trytakebit</flags>
<take />
<size type="int">4</size>
<look>There are many pieces of mail. Most are from some computer company called Infocom which wants you to buy their games. Hidden underneath is an official letter from the local council, dated some two years ago and inexplicably not delivered till now, explaining that a demolition order has been served on your home. The date of demolition is today's date.</look>
<text>{mail.look}</text>
<action type="routine">
return (MailF(cmd,var))
</action>
</object>
</object>
<object name="Front_of_House">
<inherit name="editor_room" />
<loc>rooms</loc>
<synonym>woonbeam</synonym>
<adjective>galaxia</adjective>
<alias>Front of House</alias>
<flags>rlandbit onbit outsidebit</flags>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<global>house home bulldozer conversation third_planet rubble tree</global>
<action type="routine">
return (FrontOfHouseF(QuickParams("cmd",cmd,"var",var)))
</action>
<beforeenter type="script">
FrontOfHouseF ("m_enter")
</beforeenter>
<description type="script">
FrontOfHouseF ("m_look")
</description>
<enter type="script">
FrontOfHouseF ("m_end")
</enter>
<exit alias="north" to="Bedroom">
<inherit name="northdirection" />
<runscript />
<script type="script">
HouseEnterF
</script>
</exit>
<exit alias="south" to="Country_Lane">
<inherit name="southdirection" />
</exit>
<exit alias="northeast" to="Back_of_House">
<inherit name="northeastdirection" />
</exit>
<exit alias="northwest" to="Back_of_House">
<inherit name="northwestdirection" />
</exit>
<object name="roses">
<alias>it</alias>
<synonym>rose roses rosebed bed</synonym>
<adjective>rose</adjective>
<flags>ndescbit narticlebit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (UnimportantThingF())
</action>
</object>
<object name="bulldozer_driver">
<inherit name="male" />
<alias>bulldozer driver</alias>
<synonym>driver</synonym>
<adjective>bulldozer dozer</adjective>
<flags>ndescbit actorbit</flags>
<scenery />
<action type="routine">
return (BulldozerDriverF(cmd,var))
</action>
</object>
<object name="Prosser">
<inherit name="namedmale" />
<inherit name="surface" />
<alias>Mr. Prosser</alias>
<descfcn>ProsserDescfcn</descfcn>
<inroomdescription>{=ProsserDescfcn()}</inroomdescription>
<scenery />
<synonym>prosser foreman crew</synonym>
<adjective>wrecking mr mister</adjective>
<flags>narticlebit actorbit contbit openbit</flags>
<feature_container />
<action type="routine">
return (ProsserF(cmd,var))
</action>
<object name="digital_watch">
<alias>digital watch</alias>
<synonym>watch watches</synonym>
<adjective>digital</adjective>
<flags>ndescbit trytakebit</flags>
<scenery />
<action type="routine">
return (DigitalWatchF(cmd,var))
</action>
</object>
</object>
</object>
<object name="Back_of_House">
<inherit name="editor_room" />
<loc>rooms</loc>
<synonym>list question questions</synonym>
<adjective>great unanswere unanswered</adjective>
<alias>Back of House</alias>
<se>to Front_of_House</se>
<sw>to Front_of_House</sw>
<flags>rlandbit onbit outsidebit</flags>
<global>house home third_planet rubble tree</global>
<action type="routine">
BackOfHouseF (QuickParams("rarg","no"))
return (false)
</action>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<enter type="script">
BackOfHouseF (QuickParams("rarg","m_end"))
</enter>
<description type="script">
BackOfHouseF (QuickParams("rarg","m_look"))
</description>
<exit alias="southwest" to="Front_of_House">
<inherit name="southwestdirection" />
</exit>
<exit alias="southeast" to="Front_of_House">
<inherit name="southeastdirection" />
</exit>
<object name="birds">
<synonym>bird birds</synonym>
<alias>bird</alias>
<flags>ndescbit</flags>
<scenery />
<action type="routine">
return (UnimportantThingF())
</action>
</object>
</object>
<object name="Country_Lane">
<inherit name="editor_room" />
<loc>rooms</loc>
<synonym>space</synonym>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Country Lane</alias>
<north>to Front_of_House</north>
<west>to Pub</west>
<attr name="in_to">to Pub</attr>
<flags>rlandbit onbit outsidebit</flags>
<global>house home pub_object bulldozer third_planet tree</global>
<action type="routine">
CountryLaneF ("no")
return (false)
</action>
<beforeenter type="script">
CountryLaneF ("m_enter")
</beforeenter>
<enter type="script">
CountryLaneF ("m_end")
</enter>
<description type="script">
CountryLaneF ("m_look")
</description>
<exit alias="north" to="Front_of_House">
<inherit name="northdirection" />
</exit>
<exit alias="west" to="Pub">
<inherit name="westdirection" />
</exit>
<exit alias="in" to="Pub">
<inherit name="indirection" />
</exit>
</object>
<object name="Pub">
<inherit name="editor_room" />
<loc>rooms</loc>
<synonym>alcohol</synonym>
<alias>Pub</alias>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<east>to Country_lane</east>
<out>to Country_Lane</out>
<flags>rlandbit onbit outsidebit</flags>
<global>pub_object window third_planet pub_furnishings people</global>
<action type="routine">
PubF ("no")
</action>
<description type="script">
PubF ("m_look")
</description>
<beforeenter type="script">
PubF ("m_enter")
</beforeenter>
<enter type="script">
PubF ("m_end")
</enter>
<exit alias="east" to="Country_Lane">
<inherit name="eastdirection" />
</exit>
<exit alias="out" to="Country_Lane">
<inherit name="outdirection" />
</exit>
<object name="bar">
<inherit name="editor_object" />
<inherit name="surface" />
<alias>bar</alias>
<synonym>bar counter</synonym>
<flags>ndescbit contbit surfacebit openbit</flags>
<scenery />
<feature_container />
<listchildren />
<capacity type="int">60</capacity>
<action type="routine">
return (BarF(cmd,var))
</action>
</object>
<object name="pub_shelf">
<inherit name="editor_object" />
<alias>shelf of items</alias>
<scenery />
<inroomdescription>{br}Behind the bar is a shelf. It is full of the sort of items you find on shelves behind bars in pubs.</inroomdescription>
<synonym>shelf items shelves</synonym>
<action type="routine">
return (PubShelfF(cmd,var))
</action>
</object>
<object name="music">
<inherit name="editor_object" />
<alias>music</alias>
<synonym>music song songs</synonym>
<flags>narticlebit ndescbit</flags>
<scenery />
<look>Nice try.</look>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (MusicF(cmd,var))
</action>
</object>
<object name="jukebox">
<inherit name="editor_object" />
<inherit name="switchable" />
<synonym>jukebox box</synonym>
<adjective>juke old</adjective>
<flags>ndescbit lightbit onbit</flags>
<scenery />
<feature_lightdark />
<lightsource />
<feature_switchable />
<switchedon />
<action type="routine">
return (JukeboxF(cmd,var))
</action>
</object>
<object name="barman">
<inherit name="editor_object" />
<inherit name="namedmale" />
<alias>barman</alias>
<scenery />
<inroomdescription>{br}There is a barman serving at the bar.</inroomdescription>
<synonym>barman bartender</synonym>
<flags>actorbit</flags>
<action type="routine">
return (BarmanF(cmd,var))
</action>
<askdefault type="script">
params = QuickParams("object",barman,"text",text)
do (tell, "script", params)
</askdefault>
<telltodefault type="script">
params = QuickParams("object",barman,"text",text)
do (tell, "script", params)
</telltodefault>
<telldefault type="script">
msg ("The barman ignores you and keeps polishing the other end of the bar.")
</telldefault>
</object>
<object name="beer">
<inherit name="editor_object" />
<alias>lots of beer</alias>
<synonym>lots bitter bitters pint beer</synonym>
<flags>drinkbit narticlebit ndescbit</flags>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<scenery />
<action type="routine">
return (BeerF(cmd,var))
</action>
</object>
<object name="peanuts">
<inherit name="editor_object" />
<scenery />
<alias>peanuts</alias>
<synonym>packet peanut peanuts nut nuts</synonym>
<flags>trytakebit ndescbit narticlebit eatbit</flags>
<take type="boolean">false</take>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (PeanutsF(cmd,var))
</action>
</object>
<object name="sandwich">
<inherit name="editor_object" />
<scenery />
<alias>cheese sandwich</alias>
<synonym>plate sandwich</synonym>
<adjective>cheese uninvitin uninviting</adjective>
<flags>ndescbit eatbit trytakebit</flags>
<take />
<not_all />
<size type="int">10</size>
<action type="routine">
return (SandwichF(cmd,var))
</action>
</object>
<command name="listen_in_pub">
<pattern>listen</pattern>
<script>
HandleSingleCommand ("listen to jukebox")
game.suppressturnscripts = true
</script>
</command>
</object>
</object>
<object name="globals_section">
<object name="global">
<inherit name="editor_object" />
<PRS_TEXT />
<attr name="PRSA_ALLOWS_ALL" type="boolean">false</attr>
<attr name="PRSA_ALLOWS_MULTIPLE" type="boolean">false</attr>
<attr name="PRSA_IS_MULTIPLE" type="boolean">false</attr>
<PRSO_KEY />
<PRSI_KEY />
<PRS_DIRECTION />
<attr name="nice_day">t's a bright morning, the sun is shining, the birds are singing, the meadows are blooming</attr>
<lurches>{random:It slips through your fumbling fingers and hits the carpet with a nerve-shattering bang.:It dances by you like a thing possessed.:You lunge for it, but the room spins nauseatingly away. The floor gives you a light tap on the forehead.:You're certainly picking the tough tasks. The floor acts like a trampoline on an ice rink, or like something they've been working on for years at Disneyland.}</lurches>
<attr name="identity_flag">Arthur</attr>
<ho_hum type="stringlist">
<value> doesn't do anything.</value>
<value> accomplishes nothing.</value>
<value> has no desirable effect.</value>
</ho_hum>
<yuks type="stringlist">
<value>What a concept.</value>
<value>Nice try.</value>
<value>You can't be serious.</value>
<value>Not bloody likely.</value>
</yuks>
<impossibles type="stringlist">
<value>You have lost your mind.</value>
<value>You are clearly insane.</value>
<value>You appear to have gone barking mad.</value>
<value>I'm not convinced you're allowed to be playing with this computer.</value>
<value>Run out on the street and say that. See what happens.</value>
<value>No, no, a thousand times no. Go boil an egg.</value>
</impossibles>
<wastes type="stringlist">
<value>Complete waste of time.</value>
<value>Useless. Utterly useless.</value>
<value>A totally unhelpful idea.</value>
</wastes>
<attr name="you_are">You already are!</attr>
<attr name="reach_bit">You can't reach it from the bed.{if hangover.parent=player: The effort almost kills you.}</attr>
<attr name="dead_counter" type="int">0</attr>
<attr name="earth_demolished" type="boolean">false</attr>
<attr name="get_rid"> you've been trying to get rid of it for years.</attr>
<attr name="bulldozer_counter" type="int">-2</attr>
<attr name="prosser_lying" type="boolean">false</attr>
<attr name="prosser_counter" type="int">0</attr>
<zen>A brave, Zen-like effort. It fails.</zen>
<attr name="look_around">Look around you.</attr>
<attr name="awaiting_reply" type="int">0</attr>
<arrested>Do you want to get arrested for indecent exposure?</arrested>
<headache />
<attr name="bulldozer_piles">The {bulldozer.alias} piles into the side of your home.{cr}</attr>
<attr name="house_demolished" type="boolean">false</attr>
<groggy type="boolean">false</groggy>
<buzz type="stringlist">
<value>a</value>
<value>an</value>
<value>the</value>
<value>is</value>
<value>are</value>
<value>am</value>
<value>and</value>
<value>of</value>
<value>then</value>
<value>.</value>
<value>,</value>
<value>"</value>
<value>don't</value>
<value>dont</value>
<value>pry</value>
<value>please</value>
<value>here</value>
<value>some</value>
<value>more</value>
<value>front</value>
<value>g</value>
<value>again</value>
<value>oops</value>
<value>o</value>
</buzz>
<in_bed />
<in_something />
<attr name="lying_down" type="boolean">false</attr>
<attr name="dont_flag" type="boolean">false</attr>
<attr name="on_something" type="boolean">false</attr>
<attr name="vogon_counter" type="int">0</attr>
<attr name="ford_gone" type="boolean">false</attr>
<attr name="ford_counter" type="int">0</attr>
<scc>Sirius Cybernetics Corporation</scc>
<attr name="driven_back">You struggle to reach the Thumb, but the wind is too fierce and you are driven back.</attr>
<attr name="thumb_clicks"> Thumb merely makes a few feeble clicking noises.</attr>
<parser_pronouns type="stringdictionary">
<item>
<key>it</key>
<value></value>
</item>
<item>
<key>him</key>
<value></value>
</item>
<item>
<key>her</key>
<value></value>
</item>
<item>
<key>them</key>
<value></value>
</item>
</parser_pronouns>
<in_front_flag />
<attr name="heart_counter" type="int">0</attr>
<announcement>\"Announcement, announcement. This is </announcement>
<attr name="drunk_level" type="int">0</attr>
<attr name="ford_point" type="int">15</attr>
<attr name="lost_planet" type="string"></attr>
<attr name="guards_counter" type="int">0</attr>
<attr name="ford_sleeping" type="boolean">false</attr>
<attr name="dog_fed" type="boolean">false</attr>
<attr name="follow_flag" type="int">0</attr>
<attr name="guide_name">The Hitchhiker's Guide to the Galaxy</attr>
<beam> matter transference beam</beam>
<attr name="hands_off">The barman snaps \"Hands off until you pay for it!\"</attr>
<ford_table type="stringdictionary">
<item>
<key>0</key>
<value>0</value>
</item>
<item>
<key>1</key>
<value>0</value>
</item>
<item>
<key>2</key>
<value>0</value>
</item>
<item>
<key>3</key>
<value>0</value>
</item>
<item>
<key>4</key>
<value>0</value>
</item>
<item>
<key>5</key>
<value>0</value>
</item>
</ford_table>
<attr name="towel_offered" type="boolean">false</attr>
<attr name="sandwich_bought" type="boolean">false</attr>
<attr name="with_passion"> with passion, and ignores a passing microscopic space fleet.</attr>
<attr name="ask_about_object">"Oh...you're trying to figure that out also? The manual's not much help, is it? By the way, do you know your score? I don't. My computer doesn't have a status line."</attr>
<gibberish type="stringlist">
<value>toy</value>
<value>r g</value>
<value>irb</value>
<value>kwa</value>
<value>o s</value>
<value>fim</value>
<value>p w</value>
<value>osh</value>
<value>flu</value>
<value>a r</value>
<value>vup</value>
<value>d t</value>
<value>imb</value>
<value>tha</value>
<value>i l</value>
<value>cav</value>
<value>s g</value>
<value>ulp</value>
<value>cho</value>
<value>u n</value>
<value>zit</value>
<value>z z</value>
<value>eft</value>
<value>qui</value>
<value>e h</value>
<value>kon</value>
<value>l m</value>
<value>ork</value>
<value>gry</value>
<value>o t</value>
<value>huv</value>
<value>x j</value>
<value>erl</value>
<value>tru</value>
<value>a b</value>
<value>fud</value>
<value>w c</value>
<value>oll</value>
<value>wro</value>
<value>i s</value>
</gibberish>
<attr name="on_other_side">standing on the other side</attr>
<attr name="dialing_tone"> A moment later, the dialing tone is suddenly cut off. Glancing through the window you can't help but notice the large old oak tree of which you are particularly fond crashing down through the phone cable.</attr>
<attr name="sleeve_tied" type="boolean">false</attr>
<attr name="gone_around" type="boolean">false</attr>
<attr name="fluff_to_gown" type="boolean">false</attr>
<attr name="towel_muddy" type="boolean">false</attr>
<attr name="peanuts_bought" type="boolean">false</attr>
<PRSA type="object">null_object</PRSA>
<PRSO type="object">null_object</PRSO>
<PRSI type="object">null_object</PRSI>
<attr name="panel_blocker" type="object">null_object</attr>
<attr name="inside_of" type="object">bed</attr>
<attr name="changedlying_down" type="script">
request (UpdateLocation, GetDisplayAlias(game.pov.parent))
</attr>
</object>
<object name="local_globals">
<inherit name="editor_room" />
<object name="window">
<inherit name="editor_object" />
<inherit name="openable" />
<scenery />
<feature_container />
<open />
<close type="boolean">false</close>
<takemsg>{if Bedroom.dark:It's too dark to see!}{if not Bedroom.dark:Not bloody likely.}</takemsg>
<synonym>window</synonym>
<look type="script">
if (global.in_bed) {
msg (global.reach_bit)
}
else {
HandleSingleCommand ("open curtains")
game.suppressturnscripts = true
}
</look>
<openscript type="script">
msg ("The bloody thing's been jammed shut for months, now.")
</openscript>
<closescript type="script">
msg ("The bloody thing's been jammed shut for months, now.")
</closescript>
</object>
<object name="home">
<alias>your home</alias>
<synonym>home</synonym>
<adjective>my your</adjective>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<flags>narticlebit</flags>
<scenery />
<action type="routine">
return (HomeF(cmd,var))
</action>
</object>
<object name="house">
<alias>it</alias>
<synonym>house</synonym>
<adjective>my your</adjective>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<flags>narticlebit</flags>
<scenery />
<action type="routine">
return (HouseF(cmd,var))
</action>
</object>
<object name="rubble">
<alias>pile of rubble</alias>
<synonym>pile rubble debris</synonym>
<flags>ndescbit</flags>
<scenery />
<action type="routine">
return (HomeF(cmd,var))
</action>
</object>
<object name="bedroom_door">
<inherit name="openable" />
<alias>door</alias>
<synonym>door</synonym>
<not_all />
<scenery />
<feature_container />
<isopen />
<flags>doorbit openbit ndescbit</flags>
<attr name="other_side" type="exit_to">
if (game.pov.parent = Bedroom) {
return ("south")
}
else if (game.pov.parent = Front_Porch) {
return ("north")
}
else {
return ("none")
}
</attr>
</object>
<object name="global_bed">
<inherit name="surface" />
<feature_container />
<listchildren />
<alias>bed</alias>
<synonym>bed</synonym>
<flags>vehbit</flags>
<scenery />
<action type="routine">
return (GlobalBedF(cmd,var))
</action>
<generic type="object">bed</generic>
</object>
<object name="stuff_under_bed">
<alias>it</alias>
<synonym>book coin handkerch handkerchief coins</synonym>
<adjective>soiled foreign</adjective>
<flags>ndescbit narticlebit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (UnimportantThingF())
</action>
</object>
<object name="tree">
<synonym>tree trees</synonym>
<alias>tree</alias>
<action type="routine">
return (TreePseudo(cmd,var))
</action>
</object>
<object name="bulldozer">
<alias>bulldozer</alias>
<synonym>bulldozer dozer</synonym>
<adjective>large yellow bull huge</adjective>
<flags>ndescbit invisible</flags>
<scenery />
<visible type="boolean">false</visible>
<action type="routine">
return (BulldozerF(cmd,var))
</action>
</object>
<object name="Ford">
<inherit name="namedmale" />
<inherit name="surface" />
<alias>Ford Prefect</alias>
<inroomdescription>{=FordDescfcn("NOX")}</inroomdescription>
<scenery />
<synonym>ford prefect</synonym>
<adjective>ford</adjective>
<flags>actorbit contbit searchbit openbit narticlebit</flags>
<feature_container />
<action type="routine">
return (FordF(cmd,var))
</action>
<addscript type="script">
msg (PickOneString(global.yuks))
</addscript>
<object name="satchel">
<inherit name="container_open" />
<alias>satchel</alias>
<inroomdescription>{=SatchelDescfcn("NOX")}</inroomdescription>
<synonym>satchel</synonym>
<adjective>battered leather bulky</adjective>
<flags>contbit searchbit takebit trytakebit</flags>
<feature_container />
<scenery />
<take />
<capacity type="int">30</capacity>
<size type="int">20</size>
<action type="routine">
return (SatchelF(cmd,var))
</action>
<object name="satchel_fluff">
<alias>satchel fluff</alias>
<synonym>fluff lint</synonym>
<adjective>satchel</adjective>
<flags>takebit narticlebit</flags>
<take />
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<size type="int">1</size>
<generic type="object">pocket_fluff</generic>
</object>
</object>
<object name="towel">
<alias>towel</alias>
<synonym>towel towels</synonym>
<flags>takebit trytakebit</flags>
<take />
<scenery />
<size type="int">7</size>
<capacity type="int">40</capacity>
<action type="routine">
return (TowelF(cmd,var))
</action>
</object>
</object>
<object name="dog">
<inherit name="editor_object" />
<alias>dog</alias>
<synonym>dog mongrel</synonym>
<adjective>small serene irritable</adjective>
<action type="routine">
return (DogF(cmd,var))
</action>
</object>
<object name="pub_object">
<inherit name="editor_object" />
<synonym>pub groom</synonym>
<adjective>horse 'n</adjective>
<alias>pub</alias>
<action type="routine">
return (PubObjectF(cmd,var))
</action>
</object>
<object name="people">
<inherit name="editor_object" />
<inherit name="maleplural" />
<synonym>people</synonym>
<alias>people</alias>
<action type="routine">
return (PeoplePseudo(cmd,var))
</action>
<scenery />
</object>
<object name="pub_furnishings">
<inherit name="editor_object" />
<alias>it</alias>
<synonym>beermat beermats glass glasses bottle bottles</synonym>
<adjective>usual soggy</adjective>
<flags>ndesbit narticlebit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<unimportant />
<action type="routine">
return (UnimportantThingF())
</action>
<generic type="object">mineral_water</generic>
</object>
<object name="fleet">
<inherit name="editor_object" />
<alias>fleet of Vogon Constructor Ships</alias>
<synonym>fleet ship ships spaceship</synonym>
<adjective>vogon construct constructor huge ugly yellow</adjective>
<flags>ndescbit</flags>
<action type="routine">
return (FleetF(cmd,var))
</action>
</object>
<object name="stairs">
<alias>stairs</alias>
<synonym>stair stairs stairway gangway</synonym>
<flags>narticlebit ndescbit</flags>
<scenery />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<action type="routine">
return (StairsF(cmd,var))
</action>
</object>
<object name="third_planet">
<alias>third planet</alias>
<synonym>planet earth</synonym>
<adjective>third blue blue-gree blue-green small</adjective>
<flags>ndescbit</flags>
<scenery />
<action type="routine">
return (ThirdPlanetF(cmd,var))
</action>
</object>
<object name="water">
<synonym>water</synonym>
<alias>water</alias>
<flags>narticlebit</flags>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<scenery />
<action type="routine">
// TODO Create WaterPseudo
return (false)
return (WaterPseudo(cmd,var))
</action>
</object>
</object>
<object name="global_objects">
<inherit name="editor_room" />
<object name="ground">
<inherit name="editor_object" />
<alias>ground</alias>
<synonym>floor ground mud</synonym>
<action type="routine">
return (GroundF(cmd,var))
</action>
</object>
<object name="poetry">
<inherit name="editor_object" />
<visible type="boolean">false</visible>
</object>
<object name="eyes">
<inherit name="editor_object" />
<inherit name="plural" />
</object>
<object name="guarantee">
<inherit name="editor_object" />
<alias>guarantee</alias>
</object>
<object name="hands">
<inherit name="editor_object" />
<alias>your hands</alias>
<alt type="stringlist">
<value>hand</value>
<value>your hand</value>
<value>your hands</value>
</alt>
</object>
<object name="teeth">
<inherit name="editor_object" />
</object>
<object name="head">
<inherit name="editor_object" />
</object>
<object name="ears">
<inherit name="editor_object" />
</object>
<object name="screening_door">
<inherit name="editor_object" />
<alias>screening door</alias>
<visible type="boolean">false</visible>
</object>
<object name="heart_of_gold">
<inherit name="editor_object" />
<alias>the Heart of Gold</alias>
<usedefaultprefix type="boolean">false</usedefaultprefix>
</object>
<object name="babel_fish">
<inherit name="editor_object" />
<alias>babel fish</alias>
<take />
</object>
<object name="conversation">
<inherit name="editor_object" />
<alias>conversation</alias>
<flags>invisible</flags>
<synonym>conversation</synonym>
<action type="routine">
if (cmd = listento and Here(Front_of_House)) {
msg ("You can't hear anything from here.")
return (true)
}
return (false)
</action>
</object>
<object name="sleeves">
<alias>sleeve</alias>
<synonym>sleeve sleeves</synonym>
<action type="routine">
return (SleevesF(cmd,var))
</action>
</object>
<object name="time">
<alias>time</alias>
<synonym>time</synonym>
</object>
<object name="light">
<inherit name="switchable" />
<alias>light</alias>
<synonym>light lights lamp</synonym>
<flags>lightbit</flags>
<action type="routine">
return (LightF(cmd,var))
</action>
<scenery />
<feature_switchable />
<feature_lightdark />
<lightsource />
<lightstrength>weak</lightstrength>
<takemsg>Nice try.</takemsg>
<onswitchon type="script">
SetLight (Bedroom)
</onswitchon>
<turnoff type="script">
// TODO: I just made this up! Need to find this action in the original source code!
if (ListContains(ScopeReachable(), this)) {
if (not this.switchedon) {
msg ("It is.")
}
else {
msg ("Complete waste of time.")
}
}
else {
msg (DynamicTemplate("DefaultTurnOff", this))
}
</turnoff>
</object>
<object name="object_of_game">
<alias>object of the game</alias>
<synonym>object game goal</synonym>
<alt type="stringlist">
<value>object of the game</value>
</alt>
<flags>vowelbit</flags>
<action type="routine">
return (ObjectOfGameF(cmd,var))
</action>
</object>
<object name="sky">
<inherit name="editor_object" />
<synonym>sky</synonym>
<action type="routine">
return (SkyF(cmd,var))
</action>
</object>
<object name="air">
<inherit name="editor_object" />
<synonym>air</synonym>
</object>
</object>
<object name="Dark">
<isroom />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description>{notfirst:You can't hear anything, see anything, smell anything, feel anything, or taste anything, and do not even know where you are or who you are or how you got there.}</description>
<dark type="boolean">false</dark>
<enter type="script">
</enter>
<command name="catch_all_fake_command">
<pattern type="string">.*</pattern>
<script>
msg (Dark.description)
</script>
</command>
</object>
</object>
<object name="not_earth_section">
<object name="Lair">
<inherit name="editor_room" />
<attr name="grid_label">Lair</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="southwest" to="Inner_Lair">
<inherit name="southwestdirection" />
</exit>
<exit alias="east" to="Beasts_Outer_Lair">
<inherit name="eastdirection" />
</exit>
</object>
<object name="Inner_Lair">
<inherit name="editor_room" />
<attr name="grid_label">Inner Lair</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Inner Lair</alias>
<exit alias="northeast" to="Lair">
<inherit name="northeastdirection" />
</exit>
<object name="beast">
<inherit name="editor_object" />
<inherit name="male" />
</object>
</object>
<object name="Beasts_Outer_Lair">
<inherit name="editor_room" />
<attr name="grid_label">Beast's Outer Lair</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<alias>Beast's Outer Lair</alias>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="west" to="Lair">
<inherit name="westdirection" />
</exit>
</object>
<object name="Dais">
<inherit name="editor_room" />
<attr name="grid_label">Dais</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<synonym>police cops</synonym>
<exit alias="south" to="speedboat">
<inherit name="southdirection" />
</exit>
</object>
<object name="speedboat">
<inherit name="editor_room" />
<attr name="grid_label">Presidential Speedboat</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Presidential Speedboat</alias>
<exit alias="north" to="Dais">
<inherit name="northdirection" />
</exit>
</object>
<object name="Dining_Room">
<inherit name="editor_room" />
<attr name="grid_label">Dining Room</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Dining Room</alias>
<exit alias="east" to="Living_Room">
<inherit name="eastdirection" />
</exit>
<exit alias="south" to="Kitchen">
<inherit name="southdirection" />
</exit>
</object>
<object name="Living_Room">
<inherit name="editor_room" />
<attr name="grid_label">Living Room</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Living Room</alias>
<exit alias="west" to="Dining_Room">
<inherit name="westdirection" />
</exit>
<exit alias="southwest" to="Kitchen">
<inherit name="southwestdirection" />
</exit>
</object>
<object name="Kitchen">
<inherit name="editor_room" />
<attr name="grid_label">Kitchen</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="northeast" to="Living_Room">
<inherit name="northeastdirection" />
</exit>
<exit alias="north" to="Dining_Room">
<inherit name="northdirection" />
</exit>
</object>
<object name="Maze">
<inherit name="editor_room" />
<attr name="grid_label">Maze</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<synonym>infocom adams meretzky</synonym>
<adjective>douglas steve steven</adjective>
<exit alias="north" to="Maze">
<inherit name="northdirection" />
</exit>
<exit alias="northeast" to="Maze">
<inherit name="northeastdirection" />
</exit>
<exit alias="east" to="Maze">
<inherit name="eastdirection" />
</exit>
<exit alias="southeast" to="Maze">
<inherit name="southeastdirection" />
</exit>
<exit alias="south" to="Maze">
<inherit name="southdirection" />
</exit>
<exit alias="southwest" to="Maze">
<inherit name="southwestdirection" />
</exit>
<exit alias="west" to="Maze">
<inherit name="westdirection" />
</exit>
<exit alias="northwest" to="Maze">
<inherit name="northwestdirection" />
</exit>
</object>
<object name="War_Chamber">
<inherit name="editor_room" />
<attr name="grid_label">War Chamber</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>War Chamber</alias>
<synonym>walking</synonym>
</object>
<object name="Inside_Whale">
<inherit name="editor_room" />
<attr name="grid_label">Inside the Sperm Whale</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Inside the Sperm Whale</alias>
<synonym>tree foreknowl foreknowledge</synonym>
</object>
<object name="Bridge">
<inherit name="editor_room" />
<attr name="grid_label">Bridge</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="down" to="Fore_Corridor">
<inherit name="downdirection" />
</exit>
<object name="Eddie">
<inherit name="editor_object" />
<inherit name="namedmale" />
<inherit name="switchable" />
<alias>Eddie (the shipboard computer)</alias>
<scenery />
<feature_lightdark />
<lightsource />
<feature_switchable />
<switchedon />
<turnoff type="script">
msg ("You don't know how (fortunately).")
</turnoff>
</object>
<object name="Trillian">
<inherit name="editor_object" />
<inherit name="namedfemale" />
<alias>Trillian</alias>
<visible type="boolean">false</visible>
<object name="handbag">
<inherit name="editor_object" />
<alias>handbag</alias>
<object name="tweezers">
<alias>pair of tweezers</alias>
<synonym>tweezers tweezer pair tool tools</synonym>
<adjective>proper</adjective>
<size type="int">3</size>
<generic type="object">tweezers</generic>
</object>
</object>
</object>
<object name="Zaphod">
<inherit name="editor_object" />
<inherit name="namedmale" />
<alias>Zaphod Beeblebrox</alias>
</object>
</object>
<object name="Galley">
<inherit name="editor_room" />
<attr name="grid_label">Galley</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="east" to="Fore_Corridor">
<inherit name="eastdirection" />
</exit>
<object name="Nutrimat">
<inherit name="editor_object" />
</object>
</object>
<object name="Pantry">
<inherit name="editor_room" />
<attr name="grid_label">Marvin's Party</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<alias>Marvin's Pantry</alias>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description>This is a small closet with an exit to starboard.</description>
<exit alias="east" to="Aft_Corridor">
<inherit name="eastdirection" />
</exit>
</object>
<object name="Aft_Corridor">
<inherit name="editor_room" />
<attr name="grid_label">Corridor Aft End</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Corridor, Aft End</alias>
<exit alias="down" to="Hatchway">
<inherit name="downdirection" />
</exit>
<exit alias="south" to="Engine_Room">
<inherit name="southdirection" />
</exit>
<exit alias="west" to="Pantry">
<inherit name="westdirection" />
</exit>
<exit alias="north" to="Fore_Corridor">
<inherit name="northdirection" />
</exit>
</object>
<object name="Hatchway">
<inherit name="editor_room" />
<attr name="grid_label">Hatchway</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="up" to="Aft_Corridor">
<inherit name="updirection" />
</exit>
<exit alias="east" to="Access_Space">
<inherit name="eastdirection" />
</exit>
<exit alias="down" to="Ramp">
<inherit name="downdirection" />
</exit>
</object>
<object name="Access_Space">
<inherit name="editor_room" />
<attr name="grid_label">Access Space</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Access Space</alias>
<exit alias="west" to="Hatchway">
<inherit name="westdirection" />
</exit>
</object>
<object name="Ramp">
<inherit name="editor_room" />
<attr name="grid_label">Ramp</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description>The wind moans. Dust drifts across the surface of the alien world. Zaphod, Ford, and Trillian appear and urge you forward.</description>
<exit alias="north" to="Hatchway">
<inherit name="northdirection" />
</exit>
</object>
<object name="Engine_Room">
<inherit name="editor_room" />
<attr name="grid_label">Engine Room</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Engine Room</alias>
<exit alias="north" to="Aft_Corridor">
<inherit name="northdirection" />
</exit>
</object>
<object name="Fore_Corridor">
<inherit name="editor_room" />
<attr name="grid_label">Corridor Fore End</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Corridor, Fore End</alias>
<exit alias="south" to="Aft_Corridor">
<inherit name="southdirection" />
</exit>
<exit alias="west" to="Galley">
<inherit name="westdirection" />
</exit>
<exit alias="north" to="Entry_Bay">
<inherit name="northdirection" />
</exit>
<exit alias="up" to="Bridge">
<inherit name="updirection" />
</exit>
</object>
<object name="Entry_Bay">
<inherit name="editor_room" />
<attr name="grid_label">Entry Bay 2</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Entry Bay Number Two</alias>
<description>This is an entry bay for the Heart of Gold. A corridor lies aft of here.</description>
<exit alias="south" to="Fore_Corridor">
<inherit name="southdirection" />
</exit>
</object>
<object name="Captains_Quarters">
<inherit name="editor_room" />
<attr name="grid_label">Captain's Quarters</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<alias>Captain's Quarters</alias>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="east" to="Hold">
<inherit name="eastdirection" />
</exit>
</object>
<object name="Hold">
<inherit name="editor_room" />
<attr name="grid_label">Vogon Hold</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<alias>Vogon Hold</alias>
<exit alias="west" to="Captains_Quarters">
<inherit name="westdirection" />
</exit>
<exit alias="east" to="Airlock">
<inherit name="eastdirection" />
</exit>
</object>
<object name="Airlock">
<inherit name="editor_room" />
<attr name="grid_label">Airlock</attr>
<attr name="grid_width" type="int">1</attr>
<attr name="grid_length" type="int">1</attr>
<usedefaultprefix type="boolean">false</usedefaultprefix>
<exit alias="west" to="Hold">
<inherit name="westdirection" />
</exit>
</object>
</object>
<object name="nowhere">
<inherit name="editor_room" />
<object name="thumb">
<inherit name="editor_object" />
<inherit name="container_open" />
<alias>electronic Sub-Etha signaling device</alias>
<alt type="stringlist">
<value>thumb</value>
<value>device</value>
<value>senso</value>
</alt>
<adjectives type="stringlist">
<value>electroni</value>
<value>electronic</value>
<value>sub-etha</value>
<value>signaling</value>
<value>small</value>
<value>black</value>
<value>little</value>
<value>blinking</value>
</adjectives>
<feature_container />
<scenery />
<isopen />
<open type="boolean">false</open>
<close type="boolean">false</close>
<listchildren />
<listchildrenprefix>It has</listchildrenprefix>
<contentsprefix>which has</contentsprefix>
<take type="script">
if (global.identity_flag = "Ford" and fleet.parent = game.pov.parent and not thumb.parent = satchel) {
msg (global.driven_back)
}
else {
thumb.parent = game.pov
msg (DynamicTemplate("TakeSuccessful", thumb))
}
</take>
<look type="script">
Tell ("The " + thumb.alias + " is shaped like a small fist with an extended thumb. Various lights along its \"knuckles\" are currently ")
if (fleet.parent = game.pov.parent) {
Tell ("blinking wildly, indicating a spaceship in the vicinity")
}
else {
Tell ("dark")
}
Tell (". It has two small buttons, a red one labelled \"Call Engineer\" and a green one labelled \"Hitchhike.\"")
FineProduct
msg (" Affixed to the Thumb is a lifetime " + guarantee.alias + ".")
</look>
<openscript type="script">
msg ("Impossible")
</openscript>
<closescript type="script">
msg ("Impossible")
</closescript>
<addscript type="script">
msg (PickOneString(global.impossibles))
</addscript>
<object name="red_button">
<inherit name="editor_object" />
<scenery />
<alias>red button</alias>
</object>
<object name="green_button">
<inherit name="editor_object" />
<alias>green button</alias>
<synonym>button</synonym>
<adjective>green</adjective>
<scenery />
<push type="script">
if (fleet.parent = game.pov.parent and global.drunk_level = 3) {
msg ("Lights whirl sickeningly around your head, the ground arches away beneath your feet, and every atom of your being is scrambled, an experience you're probably going to have to get used to. You are in...{cr}")
LeaveEarth
MoveObject (game.pov, Dark)
}
else {
msg ("TODO")
}
</push>
</object>
</object>
<object name="guide">
<inherit name="editor_object" />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<prefix type="string"></prefix>
<alias>The Hitchhiker's Guide</alias>
<look>The Guide is a Mark II model. Its only resemblance to the Mark IV pictured in the brochure in your game package is the large, friendly "Don't Panic!" on its cover.</look>
<topics type="stringdictionary">
<item>
<key>guide</key>
<value>The Hitchhiker's Guide is a wholly remarkable product.</value>
</item>
<item>
<key>damogran</key>
<value><![CDATA[Damogran is a planet whose surface is mostly water. It is a favourite spot for Presidential dedication ceremonies.<br/>Also see: France]]></value>
</item>
<item>
<key>france</key>
<value>France is the largest landmass on the planet.</value>
</item>
<item>
<key>heart of gold</key>
<value>There is absolutely no such spaceship as the Heart of Gold and anything you've ever read in this spot to the contrary was just a prank.</value>
</item>
<item>
<key>poetry</key>
<value>Vogon poetry is so awful that even the Sarkopsi of Burphon XII, whose religion strictly forbids the taking of one's life, consider suicide a preferable alternative to a Vogon poetry reading.</value>
</item>
</topics>
<take />
<preamble><![CDATA[The Guide checks through its Sub-Etha-Net database and eventually comes up with the following entry:<br/><br/>]]></preamble>
<scenery />
<telldefault type="script">
msg ("Try: CONSULT GUIDE ABOUT (something).")
</telldefault>
<askdefault type="script">
msg ("Try: CONSULT GUIDE ABOUT (something).")
</askdefault>
<telltodefault type="script">
msg ("Try: CONSULT GUIDE ABOUT (something).")
</telltodefault>
</object>
<object name="Arthur">
<inherit name="editor_object" />
<inherit name="namedmale" />
<alias>Arthur Dent</alias>
<inroomdescription><![CDATA[<br/>Arthur Dent is here.]]></inroomdescription>
<synonym>arthur dent</synonym>
<adjective>arthur dent</adjective>
</object>
<object name="Poetry_Appreciation_Chair">
<inherit name="editor_object" />
<alias>Poetry Appreciation Chair</alias>
</object>
<object name="Vogon_Captain">
<inherit name="editor_object" />
<inherit name="namedmale" />
<alias>Vogon Captain</alias>
<alt type="stringlist">
<value>captain</value>
</alt>
</object>
<object name="mineral_water">
<inherit name="editor_object" />
<alias>Santraginean Mineral Water</alias>
<inroomdescription>There is a bottle of mineral water here.</inroomdescription>
<scenery />
<take />
</object>
<object name="null_object">
<inherit name="editor_object" />
</object>
</object>
<object name="hints">
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<table class='i-clues'><tbody><tr><td class='selector section-0'>{either hints.current_selection=0:{hints.pointer}|{hints.spacer}}</td><td>ON THE EARTH</td></tr><tr><td class='selector section-1'>{either hints.current_selection=1:{hints.pointer}|{hints.spacer}}</td><td>IN THE DARK</td></tr></tbody></table>]]></description>
<prefix>the</prefix>
<alt type="list" />
<alias>hints</alias>
<hints type="dictionary">
<item>
<key>ON THE EARTH</key>
<value type="dictionary">
<item>
<key>How do I get out of the dark?</key>
<value type="stringlist">
<value>TURN ON THE LIGHT.</value>
</value>
</item>
<item>
<key>Why can't I pick things up?</key>
<value type="stringlist">
<value>Are you out of the bed with the light on?</value>
<value>The room is spinning because you have a hangover.</value>
<value>There is ONE thing you can pick up.</value>
<value>It's the gown.</value>
</value>
</item>
<item>
<key>How can I get out of the bedroom?</key>
<value type="stringlist">
<value>You bounce off the doorframe because the room is spinning from your hangover.</value>
<value>You'll have to get rid of it.</value>
<value>See the previous question.</value>
<value>There's an aspirin in the pocket of the gown.</value>
<value>TAKE GOWN. PUT IT ON. OPEN THE POCKET. TAKE THE ANALGESIC.</value>
</value>
</item>
<item>
<key>Is the pile of mail important?</key>
<value type="stringlist">
<value>Have you read the mail?</value>
<value>Now you know what's going on outside.</value>
<value>Take it along, it might prove useful later.</value>
</value>
</item>
<item>
<key>What's that bulldozer doing outside?</key>
<value type="stringlist">
<value>Have you read the pile of mail on your Front Porch?</value>
<value>It's there to knock down your house to make way for a new highway bypass.</value>
</value>
</item>
<item>
<key>How do I stop the bulldozer?</key>
<value type="stringlist">
<value>There's a tried and true method for stopping bulldozers.</value>
<value>Have you tried phoning the police?</value>
<value>Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?</value>
<value>Have you tried to STAND IN FRONT OF THE BULLDOZER?</value>
<value>In case you haven't figured it out from these subtle clues, you want to LIE DOWN IN FRONT OF THE BULLDOZER.</value>
<value>BLOCK THE BULLDOZER, STOP THE BULLDOZER, or LIE DOWN also work.</value>
<value>You'll have to wait a few turns after you lie down before the bulldozer finally grinds to a halt.</value>
</value>
</item>
<item>
<key>What should I do with Ford Prefect?</key>
<value type="stringlist">
<value>If you take the towel he's trying to give you, he'll walk away.</value>
<value>Standing up to follow him is fatal.</value>
<value>Without Ford you'll never survive the upcoming destruction of the Earth.</value>
<value>Ford is oblivious to your problem. If you wait, he'll notice the bulldozer, and help you out.</value>
<value>Or you can say FORD, WHAT ABOUT MY HOME? as soon as he arrives.</value>
</value>
</item>
<item>
<key>Should I go with Ford to the Pub?</key>
<value type="stringlist">
<value>Don't stand up until Prosser is lying down in your place.</value>
<value>This will happen if you wait a few turns after Ford shows up.</value>
<value>At this point, listen to Ford and follow him to the Pub.</value>
</value>
</item>
<item>
<key>What should I do in the Pub?</key>
<value type="stringlist">
<value>You came here because of Ford, right?</value>
<value>Why not do as he says?</value>
<value>Drink some beer.</value>
<value>Also, have you noticed the shelf of items behind the bar?</value>
</value>
</item>
<item>
<key>How much beer should I drink?</key>
<value type="stringlist">
<value>Ford will keep urging you to drink beer until you've had enough.</value>
<value>If you have fewer than three beers, the shock of the matter transference beam will kill you.</value>
<value>If you have more than three beers, you'll get drunk and end up partying through the end of the world.</value>
<value>Drink the beer three times.</value>
</value>
</item>
<item>
<key>How can I buy beer?</key>
<value type="stringlist">
<value>You can't.</value>
<value>But so what? Ford buys some for you.</value>
</value>
</item>
<item>
<key>How can I buy a packet of peanuts?</key>
<value type="stringlist">
<value>You can't.</value>
<value>At least, not when you're Arthur.</value>
</value>
</item>
<item>
<key>How can I buy a cheese sandwich?</key>
<value type="stringlist">
<value>How about BUY A CHEESE SANDWICH.</value>
<value>Or BARTENDER, GIVE ME A CHEESE SANDWICH.</value>
<value>Perhaps ASK BARTENDER FOR A SANDWICH is more up your alley.</value>
</value>
</item>
<item>
<key>My home's being wrecked. What now?</key>
<value type="stringlist">
<value>There's not much you can do about it.</value>
<value>You might return to survey the rubble, or to have it out with Prosser.</value>
</value>
</item>
<item>
<key>What should I do about the dog?</key>
<value type="stringlist">
<value>Have you examined the dog?</value>
<value>If you haven't figured it out, you'll find out more later.</value>
</value>
</item>
<item>
<key>How do I survive Earth's demolition?</key>
<value type="stringlist">
<value>DON'T PANIC.</value>
<value>Read everything carefully.</value>
<value>Remember Ford's reason for drinking all that beer?</value>
<value>It has to do with that small black device that Ford drops after the fleet arrives.</value>
<value>Have you tried picking it up?</value>
<value>Have you tried examining it?</value>
<value>You want to hitch a ride aboard one of the Vogon ships.</value>
<value>PUSH THE GREEN BUTTON.</value>
</value>
</item>
<item>
<key>Why do I die during transference?</key>
<value type="stringlist">
<value>You didn't drink enough beer.</value>
<value>See the question about how much beer to drink.</value>
</value>
</item>
</value>
</item>
<item>
<key>IN THE DARK</key>
<value type="dictionary">
<item>
<key>Help! I'm stuck in the Dark!</key>
<value type="stringlist">
<value>If this "Dark" is at the very beginning of the game, you're in the wrong place. Look at the very first question.</value>
<value>That's all for this port of the game.</value>
</value>
</item>
</value>
</item>
</hints>
<pointer><![CDATA[&gt;▮]]></pointer>
<spacer><![CDATA[&nbsp;&nbsp;]]></spacer>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<attr name="changedcurrent_selection" type="script">
i = this.current_selection
JS.eval ("$('.section-" + i + "').html('" + hints.pointer + "');$('.section-" + oldvalue + "').html('" + hints.spacer + "');")
</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = '<center>INVISICLUES (tm)</center><br/><div style=\"position:absolute;bottom:1.25em;left:0;\">N = Next</div>';s += '<div style=\"position:absolute;bottom:1.25em;right:0;\">P = Previous</div>';s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See topics</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = Resume story</div>';$('#status').html(s);$('#status').height('4em');")
JS.setCss ("#divOutput", "margin-top: 42px")
ClearScreen
]]></beforeenter>
<toc type="objectlist">section0; section1</toc>
<object name="section0">
<is_section />
<alias>ON THE EARTH</alias>
<index type="int">0</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<next>section1</next>
<attr name="item_count" type="int">17</attr>
<description><![CDATA[<table class='i-clues'><tbody><tr><td class='selector section-0'>{either section0.current_selection=0:{hints.pointer}|{hints.spacer}}</td><td>How do I get out of the dark?</td></tr><tr><td class='selector section-1'>{either section0.current_selection=1:{hints.pointer}|{hints.spacer}}</td><td>Why can't I pick things up?</td></tr><tr><td class='selector section-2'>{either section0.current_selection=2:{hints.pointer}|{hints.spacer}}</td><td>How can I get out of the bedroom?</td></tr><tr><td class='selector section-3'>{either section0.current_selection=3:{hints.pointer}|{hints.spacer}}</td><td>Is the pile of mail important?</td></tr><tr><td class='selector section-4'>{either section0.current_selection=4:{hints.pointer}|{hints.spacer}}</td><td>What's that bulldozer doing outside?</td></tr><tr><td class='selector section-5'>{either section0.current_selection=5:{hints.pointer}|{hints.spacer}}</td><td>How do I stop the bulldozer?</td></tr><tr><td class='selector section-6'>{either section0.current_selection=6:{hints.pointer}|{hints.spacer}}</td><td>What should I do with Ford Prefect?</td></tr><tr><td class='selector section-7'>{either section0.current_selection=7:{hints.pointer}|{hints.spacer}}</td><td>Should I go with Ford to the Pub?</td></tr><tr><td class='selector section-8'>{either section0.current_selection=8:{hints.pointer}|{hints.spacer}}</td><td>What should I do in the Pub?</td></tr><tr><td class='selector section-9'>{either section0.current_selection=9:{hints.pointer}|{hints.spacer}}</td><td>How much beer should I drink?</td></tr><tr><td class='selector section-10'>{either section0.current_selection=10:{hints.pointer}|{hints.spacer}}</td><td>How can I buy beer?</td></tr><tr><td class='selector section-11'>{either section0.current_selection=11:{hints.pointer}|{hints.spacer}}</td><td>How can I buy a packet of peanuts?</td></tr><tr><td class='selector section-12'>{either section0.current_selection=12:{hints.pointer}|{hints.spacer}}</td><td>How can I buy a cheese sandwich?</td></tr><tr><td class='selector section-13'>{either section0.current_selection=13:{hints.pointer}|{hints.spacer}}</td><td>My home's being wrecked. What now?</td></tr><tr><td class='selector section-14'>{either section0.current_selection=14:{hints.pointer}|{hints.spacer}}</td><td>What should I do about the dog?</td></tr><tr><td class='selector section-15'>{either section0.current_selection=15:{hints.pointer}|{hints.spacer}}</td><td>How do I survive Earth's demolition?</td></tr><tr><td class='selector section-16'>{either section0.current_selection=16:{hints.pointer}|{hints.spacer}}</td><td>Why do I die during transference?</td></tr></tbody></table>]]></description>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = '<center>INVISICLUES (tm)</center><br/><div style=\"position:absolute;bottom:1.25em;left:0;\">N = Next</div>';s += '<div style=\"position:absolute;bottom:1.25em;right:0;\">P = Previous</div>';s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = Main menu</div>';$('#status').html(s);$('#status').height('4em');")
JS.setCss ("#divOutput", "margin-top: 42px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<attr name="changedcurrent_selection" type="script">
i = this.current_selection
JS.eval ("$('.section-" + i + "').html('" + hints.pointer + "');$('.section-" + oldvalue + "').html('" + hints.spacer + "');")
</attr>
<toc type="objectlist">section0q0; section0q1; section0q2; section0q3; section0q4; section0q5; section0q6; section0q7; section0q8; section0q9; section0q10; section0q11; section0q12; section0q13; section0q14; section0q15; section0q16</toc>
<object name="section0q0">
<is_question />
<next>section0q1</next>
<alias>How do I get out of the dark?</alias>
<index type="int">0</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How do I get out of the dark?</b><br/>1 hint left -> ]]></description>
<attr name="item_count" type="int">1</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q0a0</toc>
<object name="section0q0a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I get out of the dark?</question>
<index type="int">0</index>
<attr name="item_count" type="int">1</attr>
<alias>How do I get out of the dark?</alias>
<answer>TURN ON THE LIGHT.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I get out of the dark?</b><br/>1 hint left -> TURN ON THE LIGHT.<br/>[That's all.]<br/>▮]]></description>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q1">
<is_question />
<previous>section0q0</previous>
<next>section0q2</next>
<alias>Why can't I pick things up?</alias>
<index type="int">1</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>Why can't I pick things up?</b><br/>4 hints left -> ]]></description>
<attr name="item_count" type="int">4</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q1a0; section0q1a1; section0q1a2; section0q1a3</toc>
<object name="section0q1a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why can't I pick things up?</question>
<index type="int">0</index>
<attr name="item_count" type="int">4</attr>
<alias>Why can't I pick things up?</alias>
<answer>Are you out of the bed with the light on?</answer>
<description><![CDATA[<div class='i-clues'><b>Why can't I pick things up?</b><br/>4 hints left -> Are you out of the bed with the light on?<br/>3 hints left -> ]]></description>
<next>section0q1a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q1a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why can't I pick things up?</question>
<index type="int">1</index>
<attr name="item_count" type="int">4</attr>
<alias>Why can't I pick things up?</alias>
<answer>The room is spinning because you have a hangover.</answer>
<description><![CDATA[<div class='i-clues'><b>Why can't I pick things up?</b><br/>4 hints left -> Are you out of the bed with the light on?<br/>3 hints left -> The room is spinning because you have a hangover.<br/>2 hints left -> ]]></description>
<previous>section0q1a0</previous>
<next>section0q1a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q1a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why can't I pick things up?</question>
<index type="int">2</index>
<attr name="item_count" type="int">4</attr>
<alias>Why can't I pick things up?</alias>
<answer>There is ONE thing you can pick up.</answer>
<description><![CDATA[<div class='i-clues'><b>Why can't I pick things up?</b><br/>4 hints left -> Are you out of the bed with the light on?<br/>3 hints left -> The room is spinning because you have a hangover.<br/>2 hints left -> There is ONE thing you can pick up.<br/>1 hint left -> ]]></description>
<previous>section0q1a1</previous>
<next>section0q1a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q1a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why can't I pick things up?</question>
<index type="int">3</index>
<attr name="item_count" type="int">4</attr>
<alias>Why can't I pick things up?</alias>
<answer>It's the gown.</answer>
<description><![CDATA[<div class='i-clues'><b>Why can't I pick things up?</b><br/>4 hints left -> Are you out of the bed with the light on?<br/>3 hints left -> The room is spinning because you have a hangover.<br/>2 hints left -> There is ONE thing you can pick up.<br/>1 hint left -> It's the gown.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q1a2</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q2">
<is_question />
<previous>section0q1</previous>
<next>section0q3</next>
<alias>How can I get out of the bedroom?</alias>
<index type="int">2</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> ]]></description>
<attr name="item_count" type="int">5</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q2a0; section0q2a1; section0q2a2; section0q2a3; section0q2a4</toc>
<object name="section0q2a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I get out of the bedroom?</question>
<index type="int">0</index>
<attr name="item_count" type="int">5</attr>
<alias>How can I get out of the bedroom?</alias>
<answer>You bounce off the doorframe because the room is spinning from your hangover.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> You bounce off the doorframe because the room is spinning from your hangover.<br/>4 hints left -> ]]></description>
<next>section0q2a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q2a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I get out of the bedroom?</question>
<index type="int">1</index>
<attr name="item_count" type="int">5</attr>
<alias>How can I get out of the bedroom?</alias>
<answer>You'll have to get rid of it.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> You bounce off the doorframe because the room is spinning from your hangover.<br/>4 hints left -> You'll have to get rid of it.<br/>3 hints left -> ]]></description>
<previous>section0q2a0</previous>
<next>section0q2a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q2a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I get out of the bedroom?</question>
<index type="int">2</index>
<attr name="item_count" type="int">5</attr>
<alias>How can I get out of the bedroom?</alias>
<answer>See the previous question.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> You bounce off the doorframe because the room is spinning from your hangover.<br/>4 hints left -> You'll have to get rid of it.<br/>3 hints left -> See the previous question.<br/>2 hints left -> ]]></description>
<previous>section0q2a1</previous>
<next>section0q2a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q2a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I get out of the bedroom?</question>
<index type="int">3</index>
<attr name="item_count" type="int">5</attr>
<alias>How can I get out of the bedroom?</alias>
<answer>There's an aspirin in the pocket of the gown.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> You bounce off the doorframe because the room is spinning from your hangover.<br/>4 hints left -> You'll have to get rid of it.<br/>3 hints left -> See the previous question.<br/>2 hints left -> There's an aspirin in the pocket of the gown.<br/>1 hint left -> ]]></description>
<previous>section0q2a2</previous>
<next>section0q2a4</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q2a4">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I get out of the bedroom?</question>
<index type="int">4</index>
<attr name="item_count" type="int">5</attr>
<alias>How can I get out of the bedroom?</alias>
<answer>TAKE GOWN. PUT IT ON. OPEN THE POCKET. TAKE THE ANALGESIC.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I get out of the bedroom?</b><br/>5 hints left -> You bounce off the doorframe because the room is spinning from your hangover.<br/>4 hints left -> You'll have to get rid of it.<br/>3 hints left -> See the previous question.<br/>2 hints left -> There's an aspirin in the pocket of the gown.<br/>1 hint left -> TAKE GOWN. PUT IT ON. OPEN THE POCKET. TAKE THE ANALGESIC.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q2a3</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q3">
<is_question />
<previous>section0q2</previous>
<next>section0q4</next>
<alias>Is the pile of mail important?</alias>
<index type="int">3</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>Is the pile of mail important?</b><br/>3 hints left -> ]]></description>
<attr name="item_count" type="int">3</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q3a0; section0q3a1; section0q3a2</toc>
<object name="section0q3a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Is the pile of mail important?</question>
<index type="int">0</index>
<attr name="item_count" type="int">3</attr>
<alias>Is the pile of mail important?</alias>
<answer>Have you read the mail?</answer>
<description><![CDATA[<div class='i-clues'><b>Is the pile of mail important?</b><br/>3 hints left -> Have you read the mail?<br/>2 hints left -> ]]></description>
<next>section0q3a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q3a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Is the pile of mail important?</question>
<index type="int">1</index>
<attr name="item_count" type="int">3</attr>
<alias>Is the pile of mail important?</alias>
<answer>Now you know what's going on outside.</answer>
<description><![CDATA[<div class='i-clues'><b>Is the pile of mail important?</b><br/>3 hints left -> Have you read the mail?<br/>2 hints left -> Now you know what's going on outside.<br/>1 hint left -> ]]></description>
<previous>section0q3a0</previous>
<next>section0q3a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q3a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Is the pile of mail important?</question>
<index type="int">2</index>
<attr name="item_count" type="int">3</attr>
<alias>Is the pile of mail important?</alias>
<answer>Take it along, it might prove useful later.</answer>
<description><![CDATA[<div class='i-clues'><b>Is the pile of mail important?</b><br/>3 hints left -> Have you read the mail?<br/>2 hints left -> Now you know what's going on outside.<br/>1 hint left -> Take it along, it might prove useful later.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q3a1</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q4">
<is_question />
<previous>section0q3</previous>
<next>section0q5</next>
<alias>What's that bulldozer doing outside?</alias>
<index type="int">4</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>What's that bulldozer doing outside?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q4a0; section0q4a1</toc>
<object name="section0q4a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What's that bulldozer doing outside?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>What's that bulldozer doing outside?</alias>
<answer>Have you read the pile of mail on your Front Porch?</answer>
<description><![CDATA[<div class='i-clues'><b>What's that bulldozer doing outside?</b><br/>2 hints left -> Have you read the pile of mail on your Front Porch?<br/>1 hint left -> ]]></description>
<next>section0q4a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q4a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What's that bulldozer doing outside?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>What's that bulldozer doing outside?</alias>
<answer>It's there to knock down your house to make way for a new highway bypass.</answer>
<description><![CDATA[<div class='i-clues'><b>What's that bulldozer doing outside?</b><br/>2 hints left -> Have you read the pile of mail on your Front Porch?<br/>1 hint left -> It's there to knock down your house to make way for a new highway bypass.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q4a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q5">
<is_question />
<previous>section0q4</previous>
<next>section0q6</next>
<alias>How do I stop the bulldozer?</alias>
<index type="int">5</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> ]]></description>
<attr name="item_count" type="int">7</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q5a0; section0q5a1; section0q5a2; section0q5a3; section0q5a4; section0q5a5; section0q5a6</toc>
<object name="section0q5a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">0</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>There's a tried and true method for stopping bulldozers.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> ]]></description>
<next>section0q5a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">1</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>Have you tried phoning the police?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> ]]></description>
<previous>section0q5a0</previous>
<next>section0q5a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">2</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?<br/>4 hints left -> ]]></description>
<previous>section0q5a1</previous>
<next>section0q5a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">3</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>Have you tried to STAND IN FRONT OF THE BULLDOZER?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?<br/>4 hints left -> Have you tried to STAND IN FRONT OF THE BULLDOZER?<br/>3 hints left -> ]]></description>
<previous>section0q5a2</previous>
<next>section0q5a4</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a4">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">4</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>In case you haven't figured it out from these subtle clues, you want to LIE DOWN IN FRONT OF THE BULLDOZER.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?<br/>4 hints left -> Have you tried to STAND IN FRONT OF THE BULLDOZER?<br/>3 hints left -> In case you haven't figured it out from these subtle clues, you want to LIE DOWN IN FRONT OF THE BULLDOZER.<br/>2 hints left -> ]]></description>
<previous>section0q5a3</previous>
<next>section0q5a5</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a5">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">5</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>BLOCK THE BULLDOZER, STOP THE BULLDOZER, or LIE DOWN also work.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?<br/>4 hints left -> Have you tried to STAND IN FRONT OF THE BULLDOZER?<br/>3 hints left -> In case you haven't figured it out from these subtle clues, you want to LIE DOWN IN FRONT OF THE BULLDOZER.<br/>2 hints left -> BLOCK THE BULLDOZER, STOP THE BULLDOZER, or LIE DOWN also work.<br/>1 hint left -> ]]></description>
<previous>section0q5a4</previous>
<next>section0q5a6</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q5a6">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I stop the bulldozer?</question>
<index type="int">6</index>
<attr name="item_count" type="int">7</attr>
<alias>How do I stop the bulldozer?</alias>
<answer>You'll have to wait a few turns after you lie down before the bulldozer finally grinds to a halt.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I stop the bulldozer?</b><br/>7 hints left -> There's a tried and true method for stopping bulldozers.<br/>6 hints left -> Have you tried phoning the police?<br/>5 hints left -> Have you tried to PROTEST or asked PROSSER, STOP THE BULLDOZER?<br/>4 hints left -> Have you tried to STAND IN FRONT OF THE BULLDOZER?<br/>3 hints left -> In case you haven't figured it out from these subtle clues, you want to LIE DOWN IN FRONT OF THE BULLDOZER.<br/>2 hints left -> BLOCK THE BULLDOZER, STOP THE BULLDOZER, or LIE DOWN also work.<br/>1 hint left -> You'll have to wait a few turns after you lie down before the bulldozer finally grinds to a halt.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q5a5</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q6">
<is_question />
<previous>section0q5</previous>
<next>section0q7</next>
<alias>What should I do with Ford Prefect?</alias>
<index type="int">6</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> ]]></description>
<attr name="item_count" type="int">5</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q6a0; section0q6a1; section0q6a2; section0q6a3; section0q6a4</toc>
<object name="section0q6a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do with Ford Prefect?</question>
<index type="int">0</index>
<attr name="item_count" type="int">5</attr>
<alias>What should I do with Ford Prefect?</alias>
<answer>If you take the towel he's trying to give you, he'll walk away.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> If you take the towel he's trying to give you, he'll walk away.<br/>4 hints left -> ]]></description>
<next>section0q6a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q6a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do with Ford Prefect?</question>
<index type="int">1</index>
<attr name="item_count" type="int">5</attr>
<alias>What should I do with Ford Prefect?</alias>
<answer>Standing up to follow him is fatal.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> If you take the towel he's trying to give you, he'll walk away.<br/>4 hints left -> Standing up to follow him is fatal.<br/>3 hints left -> ]]></description>
<previous>section0q6a0</previous>
<next>section0q6a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q6a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do with Ford Prefect?</question>
<index type="int">2</index>
<attr name="item_count" type="int">5</attr>
<alias>What should I do with Ford Prefect?</alias>
<answer>Without Ford you'll never survive the upcoming destruction of the Earth.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> If you take the towel he's trying to give you, he'll walk away.<br/>4 hints left -> Standing up to follow him is fatal.<br/>3 hints left -> Without Ford you'll never survive the upcoming destruction of the Earth.<br/>2 hints left -> ]]></description>
<previous>section0q6a1</previous>
<next>section0q6a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q6a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do with Ford Prefect?</question>
<index type="int">3</index>
<attr name="item_count" type="int">5</attr>
<alias>What should I do with Ford Prefect?</alias>
<answer>Ford is oblivious to your problem. If you wait, he'll notice the bulldozer, and help you out.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> If you take the towel he's trying to give you, he'll walk away.<br/>4 hints left -> Standing up to follow him is fatal.<br/>3 hints left -> Without Ford you'll never survive the upcoming destruction of the Earth.<br/>2 hints left -> Ford is oblivious to your problem. If you wait, he'll notice the bulldozer, and help you out.<br/>1 hint left -> ]]></description>
<previous>section0q6a2</previous>
<next>section0q6a4</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q6a4">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do with Ford Prefect?</question>
<index type="int">4</index>
<attr name="item_count" type="int">5</attr>
<alias>What should I do with Ford Prefect?</alias>
<answer>Or you can say FORD, WHAT ABOUT MY HOME? as soon as he arrives.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do with Ford Prefect?</b><br/>5 hints left -> If you take the towel he's trying to give you, he'll walk away.<br/>4 hints left -> Standing up to follow him is fatal.<br/>3 hints left -> Without Ford you'll never survive the upcoming destruction of the Earth.<br/>2 hints left -> Ford is oblivious to your problem. If you wait, he'll notice the bulldozer, and help you out.<br/>1 hint left -> Or you can say FORD, WHAT ABOUT MY HOME? as soon as he arrives.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q6a3</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q7">
<is_question />
<previous>section0q6</previous>
<next>section0q8</next>
<alias>Should I go with Ford to the Pub?</alias>
<index type="int">7</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>Should I go with Ford to the Pub?</b><br/>3 hints left -> ]]></description>
<attr name="item_count" type="int">3</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q7a0; section0q7a1; section0q7a2</toc>
<object name="section0q7a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Should I go with Ford to the Pub?</question>
<index type="int">0</index>
<attr name="item_count" type="int">3</attr>
<alias>Should I go with Ford to the Pub?</alias>
<answer>Don't stand up until Prosser is lying down in your place.</answer>
<description><![CDATA[<div class='i-clues'><b>Should I go with Ford to the Pub?</b><br/>3 hints left -> Don't stand up until Prosser is lying down in your place.<br/>2 hints left -> ]]></description>
<next>section0q7a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q7a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Should I go with Ford to the Pub?</question>
<index type="int">1</index>
<attr name="item_count" type="int">3</attr>
<alias>Should I go with Ford to the Pub?</alias>
<answer>This will happen if you wait a few turns after Ford shows up.</answer>
<description><![CDATA[<div class='i-clues'><b>Should I go with Ford to the Pub?</b><br/>3 hints left -> Don't stand up until Prosser is lying down in your place.<br/>2 hints left -> This will happen if you wait a few turns after Ford shows up.<br/>1 hint left -> ]]></description>
<previous>section0q7a0</previous>
<next>section0q7a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q7a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Should I go with Ford to the Pub?</question>
<index type="int">2</index>
<attr name="item_count" type="int">3</attr>
<alias>Should I go with Ford to the Pub?</alias>
<answer>At this point, listen to Ford and follow him to the Pub.</answer>
<description><![CDATA[<div class='i-clues'><b>Should I go with Ford to the Pub?</b><br/>3 hints left -> Don't stand up until Prosser is lying down in your place.<br/>2 hints left -> This will happen if you wait a few turns after Ford shows up.<br/>1 hint left -> At this point, listen to Ford and follow him to the Pub.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q7a1</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q8">
<is_question />
<previous>section0q7</previous>
<next>section0q9</next>
<alias>What should I do in the Pub?</alias>
<index type="int">8</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>What should I do in the Pub?</b><br/>4 hints left -> ]]></description>
<attr name="item_count" type="int">4</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q8a0; section0q8a1; section0q8a2; section0q8a3</toc>
<object name="section0q8a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do in the Pub?</question>
<index type="int">0</index>
<attr name="item_count" type="int">4</attr>
<alias>What should I do in the Pub?</alias>
<answer>You came here because of Ford, right?</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do in the Pub?</b><br/>4 hints left -> You came here because of Ford, right?<br/>3 hints left -> ]]></description>
<next>section0q8a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q8a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do in the Pub?</question>
<index type="int">1</index>
<attr name="item_count" type="int">4</attr>
<alias>What should I do in the Pub?</alias>
<answer>Why not do as he says?</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do in the Pub?</b><br/>4 hints left -> You came here because of Ford, right?<br/>3 hints left -> Why not do as he says?<br/>2 hints left -> ]]></description>
<previous>section0q8a0</previous>
<next>section0q8a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q8a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do in the Pub?</question>
<index type="int">2</index>
<attr name="item_count" type="int">4</attr>
<alias>What should I do in the Pub?</alias>
<answer>Drink some beer.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do in the Pub?</b><br/>4 hints left -> You came here because of Ford, right?<br/>3 hints left -> Why not do as he says?<br/>2 hints left -> Drink some beer.<br/>1 hint left -> ]]></description>
<previous>section0q8a1</previous>
<next>section0q8a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q8a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do in the Pub?</question>
<index type="int">3</index>
<attr name="item_count" type="int">4</attr>
<alias>What should I do in the Pub?</alias>
<answer>Also, have you noticed the shelf of items behind the bar?</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do in the Pub?</b><br/>4 hints left -> You came here because of Ford, right?<br/>3 hints left -> Why not do as he says?<br/>2 hints left -> Drink some beer.<br/>1 hint left -> Also, have you noticed the shelf of items behind the bar?<br/>[That's all.]<br/>▮]]></description>
<previous>section0q8a2</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q9">
<is_question />
<previous>section0q8</previous>
<next>section0q10</next>
<alias>How much beer should I drink?</alias>
<index type="int">9</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How much beer should I drink?</b><br/>4 hints left -> ]]></description>
<attr name="item_count" type="int">4</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q9a0; section0q9a1; section0q9a2; section0q9a3</toc>
<object name="section0q9a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How much beer should I drink?</question>
<index type="int">0</index>
<attr name="item_count" type="int">4</attr>
<alias>How much beer should I drink?</alias>
<answer>Ford will keep urging you to drink beer until you've had enough.</answer>
<description><![CDATA[<div class='i-clues'><b>How much beer should I drink?</b><br/>4 hints left -> Ford will keep urging you to drink beer until you've had enough.<br/>3 hints left -> ]]></description>
<next>section0q9a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q9a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How much beer should I drink?</question>
<index type="int">1</index>
<attr name="item_count" type="int">4</attr>
<alias>How much beer should I drink?</alias>
<answer>If you have fewer than three beers, the shock of the matter transference beam will kill you.</answer>
<description><![CDATA[<div class='i-clues'><b>How much beer should I drink?</b><br/>4 hints left -> Ford will keep urging you to drink beer until you've had enough.<br/>3 hints left -> If you have fewer than three beers, the shock of the matter transference beam will kill you.<br/>2 hints left -> ]]></description>
<previous>section0q9a0</previous>
<next>section0q9a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q9a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How much beer should I drink?</question>
<index type="int">2</index>
<attr name="item_count" type="int">4</attr>
<alias>How much beer should I drink?</alias>
<answer>If you have more than three beers, you'll get drunk and end up partying through the end of the world.</answer>
<description><![CDATA[<div class='i-clues'><b>How much beer should I drink?</b><br/>4 hints left -> Ford will keep urging you to drink beer until you've had enough.<br/>3 hints left -> If you have fewer than three beers, the shock of the matter transference beam will kill you.<br/>2 hints left -> If you have more than three beers, you'll get drunk and end up partying through the end of the world.<br/>1 hint left -> ]]></description>
<previous>section0q9a1</previous>
<next>section0q9a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q9a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How much beer should I drink?</question>
<index type="int">3</index>
<attr name="item_count" type="int">4</attr>
<alias>How much beer should I drink?</alias>
<answer>Drink the beer three times.</answer>
<description><![CDATA[<div class='i-clues'><b>How much beer should I drink?</b><br/>4 hints left -> Ford will keep urging you to drink beer until you've had enough.<br/>3 hints left -> If you have fewer than three beers, the shock of the matter transference beam will kill you.<br/>2 hints left -> If you have more than three beers, you'll get drunk and end up partying through the end of the world.<br/>1 hint left -> Drink the beer three times.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q9a2</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q10">
<is_question />
<previous>section0q9</previous>
<next>section0q11</next>
<alias>How can I buy beer?</alias>
<index type="int">10</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How can I buy beer?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q10a0; section0q10a1</toc>
<object name="section0q10a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy beer?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>How can I buy beer?</alias>
<answer>You can't.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy beer?</b><br/>2 hints left -> You can't.<br/>1 hint left -> ]]></description>
<next>section0q10a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q10a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy beer?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>How can I buy beer?</alias>
<answer>But so what? Ford buys some for you.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy beer?</b><br/>2 hints left -> You can't.<br/>1 hint left -> But so what? Ford buys some for you.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q10a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q11">
<is_question />
<previous>section0q10</previous>
<next>section0q12</next>
<alias>How can I buy a packet of peanuts?</alias>
<index type="int">11</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How can I buy a packet of peanuts?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q11a0; section0q11a1</toc>
<object name="section0q11a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy a packet of peanuts?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>How can I buy a packet of peanuts?</alias>
<answer>You can't.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy a packet of peanuts?</b><br/>2 hints left -> You can't.<br/>1 hint left -> ]]></description>
<next>section0q11a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q11a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy a packet of peanuts?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>How can I buy a packet of peanuts?</alias>
<answer>At least, not when you're Arthur.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy a packet of peanuts?</b><br/>2 hints left -> You can't.<br/>1 hint left -> At least, not when you're Arthur.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q11a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q12">
<is_question />
<previous>section0q11</previous>
<next>section0q13</next>
<alias>How can I buy a cheese sandwich?</alias>
<index type="int">12</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How can I buy a cheese sandwich?</b><br/>3 hints left -> ]]></description>
<attr name="item_count" type="int">3</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q12a0; section0q12a1; section0q12a2</toc>
<object name="section0q12a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy a cheese sandwich?</question>
<index type="int">0</index>
<attr name="item_count" type="int">3</attr>
<alias>How can I buy a cheese sandwich?</alias>
<answer>How about BUY A CHEESE SANDWICH.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy a cheese sandwich?</b><br/>3 hints left -> How about BUY A CHEESE SANDWICH.<br/>2 hints left -> ]]></description>
<next>section0q12a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q12a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy a cheese sandwich?</question>
<index type="int">1</index>
<attr name="item_count" type="int">3</attr>
<alias>How can I buy a cheese sandwich?</alias>
<answer>Or BARTENDER, GIVE ME A CHEESE SANDWICH.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy a cheese sandwich?</b><br/>3 hints left -> How about BUY A CHEESE SANDWICH.<br/>2 hints left -> Or BARTENDER, GIVE ME A CHEESE SANDWICH.<br/>1 hint left -> ]]></description>
<previous>section0q12a0</previous>
<next>section0q12a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q12a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How can I buy a cheese sandwich?</question>
<index type="int">2</index>
<attr name="item_count" type="int">3</attr>
<alias>How can I buy a cheese sandwich?</alias>
<answer>Perhaps ASK BARTENDER FOR A SANDWICH is more up your alley.</answer>
<description><![CDATA[<div class='i-clues'><b>How can I buy a cheese sandwich?</b><br/>3 hints left -> How about BUY A CHEESE SANDWICH.<br/>2 hints left -> Or BARTENDER, GIVE ME A CHEESE SANDWICH.<br/>1 hint left -> Perhaps ASK BARTENDER FOR A SANDWICH is more up your alley.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q12a1</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q13">
<is_question />
<previous>section0q12</previous>
<next>section0q14</next>
<alias>My home's being wrecked. What now?</alias>
<index type="int">13</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>My home's being wrecked. What now?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q13a0; section0q13a1</toc>
<object name="section0q13a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>My home's being wrecked. What now?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>My home's being wrecked. What now?</alias>
<answer>There's not much you can do about it.</answer>
<description><![CDATA[<div class='i-clues'><b>My home's being wrecked. What now?</b><br/>2 hints left -> There's not much you can do about it.<br/>1 hint left -> ]]></description>
<next>section0q13a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q13a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>My home's being wrecked. What now?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>My home's being wrecked. What now?</alias>
<answer>You might return to survey the rubble, or to have it out with Prosser.</answer>
<description><![CDATA[<div class='i-clues'><b>My home's being wrecked. What now?</b><br/>2 hints left -> There's not much you can do about it.<br/>1 hint left -> You might return to survey the rubble, or to have it out with Prosser.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q13a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q14">
<is_question />
<previous>section0q13</previous>
<next>section0q15</next>
<alias>What should I do about the dog?</alias>
<index type="int">14</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>What should I do about the dog?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q14a0; section0q14a1</toc>
<object name="section0q14a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do about the dog?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>What should I do about the dog?</alias>
<answer>Have you examined the dog?</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do about the dog?</b><br/>2 hints left -> Have you examined the dog?<br/>1 hint left -> ]]></description>
<next>section0q14a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q14a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>What should I do about the dog?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>What should I do about the dog?</alias>
<answer>If you haven't figured it out, you'll find out more later.</answer>
<description><![CDATA[<div class='i-clues'><b>What should I do about the dog?</b><br/>2 hints left -> Have you examined the dog?<br/>1 hint left -> If you haven't figured it out, you'll find out more later.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q14a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q15">
<is_question />
<previous>section0q14</previous>
<next>section0q16</next>
<alias>How do I survive Earth's demolition?</alias>
<index type="int">15</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> ]]></description>
<attr name="item_count" type="int">8</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q15a0; section0q15a1; section0q15a2; section0q15a3; section0q15a4; section0q15a5; section0q15a6; section0q15a7</toc>
<object name="section0q15a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">0</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>DON'T PANIC.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> ]]></description>
<next>section0q15a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">1</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>Read everything carefully.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> ]]></description>
<previous>section0q15a0</previous>
<next>section0q15a2</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a2">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">2</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>Remember Ford's reason for drinking all that beer?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> ]]></description>
<previous>section0q15a1</previous>
<next>section0q15a3</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a3">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">3</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>It has to do with that small black device that Ford drops after the fleet arrives.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> It has to do with that small black device that Ford drops after the fleet arrives.<br/>4 hints left -> ]]></description>
<previous>section0q15a2</previous>
<next>section0q15a4</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a4">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">4</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>Have you tried picking it up?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> It has to do with that small black device that Ford drops after the fleet arrives.<br/>4 hints left -> Have you tried picking it up?<br/>3 hints left -> ]]></description>
<previous>section0q15a3</previous>
<next>section0q15a5</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a5">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">5</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>Have you tried examining it?</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> It has to do with that small black device that Ford drops after the fleet arrives.<br/>4 hints left -> Have you tried picking it up?<br/>3 hints left -> Have you tried examining it?<br/>2 hints left -> ]]></description>
<previous>section0q15a4</previous>
<next>section0q15a6</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a6">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">6</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>You want to hitch a ride aboard one of the Vogon ships.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> It has to do with that small black device that Ford drops after the fleet arrives.<br/>4 hints left -> Have you tried picking it up?<br/>3 hints left -> Have you tried examining it?<br/>2 hints left -> You want to hitch a ride aboard one of the Vogon ships.<br/>1 hint left -> ]]></description>
<previous>section0q15a5</previous>
<next>section0q15a7</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q15a7">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>How do I survive Earth's demolition?</question>
<index type="int">7</index>
<attr name="item_count" type="int">8</attr>
<alias>How do I survive Earth's demolition?</alias>
<answer>PUSH THE GREEN BUTTON.</answer>
<description><![CDATA[<div class='i-clues'><b>How do I survive Earth's demolition?</b><br/>8 hints left -> DON'T PANIC.<br/>7 hints left -> Read everything carefully.<br/>6 hints left -> Remember Ford's reason for drinking all that beer?<br/>5 hints left -> It has to do with that small black device that Ford drops after the fleet arrives.<br/>4 hints left -> Have you tried picking it up?<br/>3 hints left -> Have you tried examining it?<br/>2 hints left -> You want to hitch a ride aboard one of the Vogon ships.<br/>1 hint left -> PUSH THE GREEN BUTTON.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q15a6</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
<object name="section0q16">
<is_question />
<previous>section0q15</previous>
<alias>Why do I die during transference?</alias>
<index type="int">16</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>Why do I die during transference?</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section0q16a0; section0q16a1</toc>
<object name="section0q16a0">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why do I die during transference?</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>Why do I die during transference?</alias>
<answer>You didn't drink enough beer.</answer>
<description><![CDATA[<div class='i-clues'><b>Why do I die during transference?</b><br/>2 hints left -> You didn't drink enough beer.<br/>1 hint left -> ]]></description>
<next>section0q16a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section0q16a1">
<is_answer />
<hasbeenmoved />
<section>section0</section>
<question>Why do I die during transference?</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>Why do I die during transference?</alias>
<answer>See the question about how much beer to drink.</answer>
<description><![CDATA[<div class='i-clues'><b>Why do I die during transference?</b><br/>2 hints left -> You didn't drink enough beer.<br/>1 hint left -> See the question about how much beer to drink.<br/>[That's all.]<br/>▮]]></description>
<previous>section0q16a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
</object>
<object name="section1">
<is_section />
<alias>IN THE DARK</alias>
<index type="int">1</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<previous>section0</previous>
<attr name="item_count" type="int">1</attr>
<description><![CDATA[<table class='i-clues'><tbody><tr><td class='selector section-0'>{either section1.current_selection=0:{hints.pointer}|{hints.spacer}}</td><td>Help! I'm stuck in the Dark!</td></tr></tbody></table>]]></description>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = '<center>INVISICLUES (tm)</center><br/><div style=\"position:absolute;bottom:1.25em;left:0;\">N = Next</div>';s += '<div style=\"position:absolute;bottom:1.25em;right:0;\">P = Previous</div>';s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = Main menu</div>';$('#status').html(s);$('#status').height('4em');")
JS.setCss ("#divOutput", "margin-top: 42px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<attr name="changedcurrent_selection" type="script">
i = this.current_selection
JS.eval ("$('.section-" + i + "').html('" + hints.pointer + "');$('.section-" + oldvalue + "').html('" + hints.spacer + "');")
</attr>
<toc type="objectlist">section1q0</toc>
<object name="section1q0">
<is_question />
<alias>Help! I'm stuck in the Dark!</alias>
<index type="int">0</index>
<hasbeenmoved />
<usedefaultprefix type="boolean">false</usedefaultprefix>
<description><![CDATA[<div class='i-clues'><b>Help! I'm stuck in the Dark!</b><br/>2 hints left -> ]]></description>
<attr name="item_count" type="int">2</attr>
<attr name="current_selection" type="int">0</attr>
<beforeenter type="script"><![CDATA[
JS.eval ("s = \"<center>INVISICLUES (tm)<br/>" + game.pov.parent.alias + "</center>\";s += '<br/><div style=\"position:absolute;bottom:0;left:0;\">RETURN = See hint</div>';s += '<div style=\"position:absolute;bottom:0;right:0;\">Q = See hint menu</div>';$('#status').html(s);$('#status').height('3.25em');")
JS.setCss ("#divOutput", "margin-top: 36px")
ClearScreen
]]></beforeenter>
<attr name="enter_verb" type="script">
MoveObject (game.pov, this)
</attr>
<toc type="objectlist">section1q0a0; section1q0a1</toc>
<object name="section1q0a0">
<is_answer />
<hasbeenmoved />
<section>section1</section>
<question>Help! I'm stuck in the Dark!</question>
<index type="int">0</index>
<attr name="item_count" type="int">2</attr>
<alias>Help! I'm stuck in the Dark!</alias>
<answer>If this "Dark" is at the very beginning of the game, you're in the wrong place. Look at the very first question.</answer>
<description><![CDATA[<div class='i-clues'><b>Help! I'm stuck in the Dark!</b><br/>2 hints left -> If this "Dark" is at the very beginning of the game, you're in the wrong place. Look at the very first question.<br/>1 hint left -> ]]></description>
<next>section1q0a1</next>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
<object name="section1q0a1">
<is_answer />
<hasbeenmoved />
<section>section1</section>
<question>Help! I'm stuck in the Dark!</question>
<index type="int">1</index>
<attr name="item_count" type="int">2</attr>
<alias>Help! I'm stuck in the Dark!</alias>
<answer>That's all for this port of the game.</answer>
<description><![CDATA[<div class='i-clues'><b>Help! I'm stuck in the Dark!</b><br/>2 hints left -> If this "Dark" is at the very beginning of the game, you're in the wrong place. Look at the very first question.<br/>1 hint left -> That's all for this port of the game.<br/>[That's all.]<br/>▮]]></description>
<previous>section1q0a0</previous>
<beforeenter type="script">
ClearScreen
</beforeenter>
<firstenter type="script">
this.parent.description = this.description
this.parent.last_viewed = this
</firstenter>
</object>
</object>
</object>
</object>
<turnscript name="update_contents_in_lists_turnscript">
<enabled />
<script>
UpdateContentsInLists
</script>
</turnscript>
<turnscript name="turncount_turnscript">
<enabled />
<script>
game.turncount = game.turncount + 1
JS.eval ("$('#altlocation').html('Score: " + game.score + Spaces(4) + "Moves: " + game.turncount + "')")
if (GetBoolean(game,"finishing")) {
DisableTurnScript (turncount_turnscript)
}
</script>
</turnscript>
<turnscript name="i_dog">
<istyle />
<script>
if (game.pov.parent = War_Chamber) {
msg ("TODO: i_dog")
}
else if (global.identity_flag = "Ford") {
msg ("TODO: i_dog")
}
else if (game.pov.parent = Country_Lane and not dog.parent = Country_Lane and not fleet.parent = Country_Lane) {
MoveObjectHere (dog)
EnableQueue (i_dog, 2)
msg ("You see the huge " + bulldozer.alias + " heaving itself among the cloud of brick dust which is all that remains of " + home.alias + ". As you start up the lane, a small dog runs up to you, yapping.")
// RTRUE
}
else if (not global.dog_fed and dog.parent = game.pov.parent and not HasFlag(dog, "touchbit")) {
dog.touchbit = true
msg ("The dog carries on yapping for a moment and then gulps uncomfortably.")
}
else {
// RFALSE
}
</script>
</turnscript>
<turnscript name="i_reply">
<istyle />
<script>
global.awaiting_reply = 0
</script>
</turnscript>
<turnscript name="i_captain">
<istyle />
<script>
msg ("TODO: i_captain")
</script>
</turnscript>
<turnscript name="i_follow">
<istyle />
<script>
global.follow_flag = 0
</script>
</turnscript>
<turnscript name="i_uneasy">
<istyle />
<script>
msg ("i_uneasy: TODO")
</script>
</turnscript>
<turnscript name="pronouns_turnscript">
<enabled />
<script>
MaintainPronouns
</script>
</turnscript>
<turnscript name="i_housewreck">
<enabled />
<istyle />
<triggerturncount type="int">19</triggerturncount>
<script>
if (game.pov.parent = Bedroom or game.pov.parent = Front_Porch) {
Tell ("{cr}Astoundingly, a {bulldozer.alias} pokes through your wall. However, you have no time for surprise because the ceiling is collapsing on you as")
BetterLuck
}
</script>
</turnscript>
<turnscript name="i_thing">
<istyle />
<enabled type="boolean">false</enabled>
<script>
EnableQueue (i_thing, RandomInt(1,4) + 4)
if (not global.identity_flag = "Arthur" or (Here() = engine_room and global.look_counter = 3) or (Here() = dark or Here() = access_space or Here() = maze) or thing.visible or thing.parent = game.pov or fleet.parent = Here()) {
// RFALSE
// Do nothing.
}
else {
thing.scenery = false
thing.visible = true
if (GetRandomChance(40)) {
MoveObjectHere (thing)
if (gown.worn and gown.isopen and GetRandomChance(65)) {
MoveObject (thing, gown)
}
else {
AddToInventory (thing)
}
}
}
</script>
</turnscript>
<turnscript name="i_bulldozer">
<istyle />
<enabled type="boolean">false</enabled>
<script>
if (global.lying_down or global.house_demolished) {
DisableTurnScript (i_bulldozer)
return (false)
}
FSet (Prosser, "touchbit")
global.bulldozer_counter = global.bulldozer_counter + 1
if (G(global.bulldozer_counter,4)) {
DisableTurnScript (i_bulldozer)
msg (global.bulldozer_piles)
BrickDeath
}
else if (Here(Front_of_House)) {
msg ("{cr}The {bulldozer.alias} rumbles slowly toward your home.{cr}")
RTRUE
}
return (false)
</script>
</turnscript>
<turnscript name="i_prosser">
<istyle />
<enabled type="boolean">false</enabled>
<script>
if (not global.lying_down) {
DisableTurnScript (i_prosser)
do (i_bulldozer, "timeoutturnscript")
RTRUE
}
else {
// msg ("i_prosser script running else . . .")
// This doesn't take effect in time. The turncount meets the triggerturncount before the changes, and this script disables.
// So, I queued this turnscript with a SetTurnTimeout(1) instead. (See: bulldozer.block)
// UPDATE: I'm testing this next line instead. I think I fixed it.
EnableQueue (i_prosser, -1)
global.prosser_counter = global.prosser_counter + 1
switch (global.prosser_counter) {
case (1) {
msg ("{br}The {bulldozer.alias} thunders toward you. The ground is shaking beneath you as you lie in the mud.")
RTRUE
}
case (2) {
msg ("{br}The noise of the giant {bulldozer.alias} is now so violently loud that you can't even hear Prosser yelling to warn you that you will be killed if you don't get the hell out of the way. You just see him gesticulating wildly.")
RTRUE
}
case (3) {
DisableTurnScript (i_prosser)
EnableQueue (i_ford, -1)
MoveObjectHere (Ford)
ThisIsIt (towel)
msg ("{br}With a terrible grinding of gears the {bulldozer.alias} comes to an abrupt halt just in front of you. It shakes, shudders, and emits noxious substances all over your rose bed. Prosser is incoherent with rage.{br}{br}Moments later, your friend {Ford.alias} arrives. He hardly seems to notice your predicament, but keeps glancing nervously at the sky. He says, \"Hello, Arthur,\" takes a towel from his battered leather satchel, and offers it to you.")
RTRUE
}
}
}
</script>
</turnscript>
<turnscript name="i_ford">
<istyle />
<script>
EnableQueue (i_ford, -1)
if (InHeart(game.pov)) {
msg ("TODO: i_ford")
}
else if (game.pov.parent = Hold) {
msg ("TODO: i_ford")
}
else if (global.ford_counter = 0) {
global.ford_counter = 1
Tell ("{cr}Ford glances uncomfortably at the sky.")
if (towel.parent = Ford) {
Tell (" He offers you the towel again.")
}
Tell ("{cr}")
RTRUE
}
else if (global.ford_counter = 1) {
Tell ("{cr}Ford seems oblivious to your trouble, so you ask \"Ford, what about my home?\" He")
FordDecides
RTRUE
}
else if (global.ford_counter = 2) {
global.ford_counter = 3
global.lying_down = false
global.prosser_lying = true
// msg ("i_ford enabling (i_ford, 2)")
EnableQueue (i_ford, 2)
conversation.visible = false
FSet (conversation, "invisible")
msg ("{cr}Ford and Prosser stop talking and approach you. Ford says that Prosser has agreed to lie in your place so that the two of you can go off to the Pub. Reluctantly, Prosser steps forward and lies down in front of the {bulldozer.alias}. You stand up.")
RTRUE
}
else if (global.ford_counter = 3) {
MoveObject (Ford, Country_Lane)
global.ford_counter = 4
if (game.pov.parent = Front_of_House) {
global.follow_flag = 1
EnableQueue (i_follow, 2)
msg ("{cr}Ford, urging you to follow, hurries toward the country lane.")
RTRUE
}
else if (game.pov.parent = Country_Lane) {
msg ("{cr}Ford enters from the north.")
}
}
else if (global.ford_counter = 4) {
if (game.pov.parent = Country_Lane) {
if (not Pub.visited) {
global.ford_counter = 5
global.follow_flag = 1
EnableQueue (i_follow, 2)
MoveObject (Ford, Pub)
msg ("{br}\"Come along, Arthur,\" says Ford impatiently, and enters the Pub.")
}
}
}
else if (not game.pov.parent = Ford.parent) {
if (Pub.visited) {
MoveObjectHere (Ford)
msg ("{cr}Ford hurries after you.")
}
}
else if (L(global.drunk_level,3)) {
Tell ("{cr}\"Drink the beer,\" urges Ford. \"It will help")
Cushion
msg ("\"")
}
else {
return (false)
}
</script>
</turnscript>
<turnscript name="i_vogons">
<istyle />
<script>
EnableQueue (i_vogons, -1)
global.vogon_counter = global.vogon_counter + 1
switch (global.vogon_counter) {
case (1) {
if (game.pov.parent = Pub) {
GoToLane
}
MoveObject (fleet, game.pov.parent)
msg ("")
if (global.identity_flag = "Ford") {
MoveObjectHere (Arthur)
msg ("Right on schedule (according to the news you picked up last night on your Sub-Etha Sens-O-Matic), a huge {fleet.alias} hurtles noisily through the sky. Time is very, very short. Storms break in the wake of the ships, the wind whips at you and makes it difficult to stand. You grab hold of a tree.")
RTRUE
}
else {
msg ("With a noise like a cross between Led Zeppelin's farewell concert and the eruption of Krakatoa, a huge {fleet.alias} flies overhead and announces that the Earth will be demolished to make way for a new hyperspace bypass in \"two of your Earth minutes.\"")
if (game.pov.parent = Ford.parent and global.ford_counter = 0) {
MoveObject (Ford, local_globals)
DisableTurnScript (i_ford)
global.ford_gone = true
MoveObjectHere (towel)
towel.take = true
msg ("{cr}Ford drops the towel and dashes away.")
RTRUE
}
if (thing.parent = game.pov or thing.parent = gown) {
MoveObject (thing, local_globals)
Tell ("{cr}In all the turmoil, ")
if (thing.parent = gown) {
Tell ("the {thing.alias} drops out of your pocket and rolls away.")
}
else {
Tell ("you drop the {thing.alias} and it rolls away.")
}
Tell (" It is the least of your worries. Anyway,{global.get_rid}{cr}")
RTRUE
}
}
}
case (2) {
msg ("{cr}The vast yellow ships thunder across the sky, spreading waves of terror and panic in their wake. The voice of the {Vogon_Captain.alias} slams across the country, insisting that the planning charts and demolition orders have been available at the local planning office in Alpha Centauri for fifty years and it's too late to start making a fuss about it now.")
if (global.identity_flag = "Ford") {
if (thumb.parent = game.pov or thumb.parent = satchel) {
if (thumb.parent = game.pov) {
Tell ("The {thumb.alias} in {hands.alias} begins to whine.")
}
else {
Tell ("You remove the {thumb.alias} from your satchel.")
}
msg (" Lights pulsate across its surface. {global.thumb_fumble}")
MoveObjectHere (thumb)
ThisIsIt (thumb)
}
else {
msg ("You wish you were holding your {thumb.alias}.")
}
}
else if (not global.ford_gone) {
MoveObjectHere (thumb)
ThisIsIt (thumb)
msg ("{cr}Throughout the noise, Ford is shouting at you. He removes a small black device from his satchel, but accidentally drops it at your feet.")
}
RTRUE
}
case (3) {
Tell ("{cr}Fierce gales whip across the land, and thunder bangs continuously through the air in the wake of the giant ships. ")
if (global.identity_flag = "Arthur" and not global.ford_gone) {
msg (" Ford fights to reach you, but the wind is too fierce. Further announcements from the {Vogon_Captain.alias} make it clear that demolition will begin in just a few seconds.{cr}{cr}Through the blinding rain, you see lights flickering on the small device.")
}
else if (global.identity_flag = "Ford" and game.pov.parent = thumb.parent) {
if (global.fluff_to_gown) {
Country_Lane.revisitbit = true
}
msg (global.driven_back)
Tell (" Fortunately, at this point, Arthur picks up the Thumb, and somehow manages to push the right button")
if (thumb.mungedbit) {
Tell (". Unfortunately, the{global.thumb_clicks}")
global.vogon_counter = 4
Tell (" ")
do (i_vogons, "script")
}
else {
msg (".{cr}")
JigsUp ("However often you do it, you are still stunned by the shock of dematerialisation. The scene around is ripped away like a flimsy backcloth.")
}
}
else {
msg ("")
}
RTRUE
}
case (4) {
// msg ("i_vogon 4")
// Nothing for this case in the source code!
}
case (5) {
Tell ("The Earth is destroyed by the {fleet.alias}")
if (global.fluff_to_gown) {
Country_Lane.revisitbit = true
}
JigsUp (".")
}
}
</script>
</turnscript>
<command name="hint_cmd">
<pattern>hint;hints;help;clue;clues;visiclues;invisiclues;?</pattern>
<script>
if (game.questplatform = "mobile") {
msg ("{i:[Mobile browser detected. This feature does not work in a mobile browser.]}{cr}{cr}If you're really stuck, a complete map and InvisiClues Hint Booklet are available from your dealer, or via mail order with the form that came in your package.")
}
else if (not GetBoolean(game, "hint_warning") and not GetBoolean(game, "hints_off")) {
game.hint_warning = true
msg ("[Warning: It is recognized that the temptation for help may at times be so exceedingly strong that you might fetch hints prematurely. Therefore, you may at any time during the story type HINTS OFF, and this will disallow the seeking out of help for the present session of the story. If you still want a hint now, indicate HINT.]")
}
else if (not GetBoolean(game, "hints_off")) {
game.hintmode = true
MoveObject (game.pov, hints)
}
else {
msg ("[Hints have been disallowed for this session.]")
}
game.suppressturnscripts = true
</script>
</command>
<command name="hints_off_cmd">
<pattern>hints off</pattern>
<script>
msg ("[Hints have been disallowed for this session.]")
game.hints_off = true
</script>
</command>
<command name="footnote_cmd">
<pattern>footnote #text#;footnote</pattern>
<script>
game.suppressturnscripts = true
if (not IsDefined("text")) {
msg ("Specify a number, as in \"FOOTNOTE 6.\"")
}
else {
text = Trim(text)
if (text = "2") {
msg ("Bob Dylan, 1969.")
}
else if (text = "4") {
msg ("The first single they recorded on their own Apple label, and one of their most successful songs ever.")
}
else if (text = "6") {
msg ("That was just an example.")
}
else {
msg ("There is no Footnote " + text + ".")
}
}
</script>
</command>
<function name="GetDefiniteName" parameters="obj" type="string">
result = GetDisplayAlias(obj)
if (not DoesInherit(obj, "namedmale") and not DoesInherit(obj, "namedfemale") and not result = "me" and not result = "you" and GetBoolean(obj, "usedefaultprefix")) {
result = "the " + result
}
return (result)
</function>
<function name="_SetGarmentAlias" parameters="object"><![CDATA[
ext = GetDescriptor(object)
// object.alias = object.display + ext
if (HasString(object, "listalias")) {
if (StartsWith(object.listalias, "<span style=\"color:blue\">")) {
object.listalias = null
do (object, "colourmylistalias")
}
else {
object.listalias = object.original_listalias + ext
}
}
]]></function>
<function name="ToggleHintMode" parameters="bool">
if (bool) {
game.hint_mode = true
JS.hintModeOn ()
JS.uiHide ("#txtCommandDiv")
game.pov.wasinroom = game.pov.parent
game.pov.default_autodescription_youarein = game.autodescription_youarein
game.pov.default_autodescription_youcansee = game.autodescription_youcansee
JS.eval ("var defaultStatusHtml = $('#status').html();")
game.autodescription_youarein = 0
game.autodescription_youcansee = 0
MoveObject (game.pov, hints)
}
else {
// These next 2 lines clear all the hint stuff away, leaving ALL the story's text intact, which is NOT how the real games behave!
// JS.eval ("$('.selector').remove();$('.clearedScreen').toggle();$('.i-clues').remove();$('.clearedAbove,."+ game.currentturnoutputsection + ".clearedScreen').remove();scrollToEnd();")
// msg ("Back to the story. . .")
game.hint_mode = false
JS.hintModeOff ()
JS.eval ("$('#status').html(defaultStatusHtml).height('30px');")
JS.eval ("$('#divOutput').css('margin-top','none');")
game.autodescription_youarein = game.pov.default_autodescription_youarein
game.autodescription_youcansee = game.pov.default_autodescription_youcansee
JS.uiShow ("#txtCommandDiv")
MoveObject (game.pov, game.pov.wasinroom)
// NOTE: The real games cleared the screen afterwards. If you didn't have the transcript on, you couldn't go back and read the previous bit of the story.
ClearScreen
msg ("Back to the story. . .")
}
</function>
<function name="HintHandler" parameters="key"><![CDATA[
here = game.pov.parent
switch (key) {
case (78) {
// "N" - next
if (GetBoolean(here, "is_answer")) {
// N does nothing here
return (false)
}
else {
// We are in a menu. Select the previous selection
if (here.current_selection = here.item_count - 1) {
// We are at the last item. Go to the beginning.
i = 0
}
else {
// Select the next item.
i = here.current_selection + 1
}
here.current_selection = i
}
}
case (80) {
// "P" - previous
if (GetBoolean(here, "is_answer")) {
// P does nothing here
return (false)
}
else {
// We are in a menu. Select the previous selection
if (here.current_selection = 0) {
// We are at the first item. Go to the end.
i = here.item_count - 1
}
else {
// Select the previous item.
i = here.current_selection - 1
}
here.current_selection = i
}
}
case (81) {
// "Q" - main menu or resume story when in main menu
if (here = hints) {
game.hintmode = false
}
else if (GetBoolean(here,"is_answer")) {
MoveObject (game.pov, GetObject(here.section))
}
else {
MoveObject (game.pov, here.parent)
}
}
case (13) {
// "ENTER KEY" - select
if (GetBoolean(here, "is_answer")) {
if (HasAttribute(here, "next")) {
next = GetObject(here.next)
MoveObject (game.pov, next)
return (true)
}
return (false)
}
if (GetBoolean(here, "is_question")) {
not_seen = FilterByAttribute(here.toc, "visited", false)
if (ListCount(not_seen) < 1) {
target = here.toc[here.item_count - 1]
MoveObject (game.pov, target)
return (true)
}
handled = false
foreach (o, here.toc) {
if (not handled and not GetBoolean(o, "visited")) {
handled = true
here.tmp__next = o
}
}
MoveObject (game.pov, here.tmp__next)
here.tmp__next = null
return (true)
}
MoveObject (game.pov, here.toc[here.current_selection])
}
}
game.suppressturnscripts = true
]]></function>
<function name="SetUpHintInterfaceUI">
game.hints_off = false
game.hint_warning = false
game.hint_mode = false
JS.eval ("var hintsOn = function(e){ASLEvent('HintHandler', e.which)};var hintModeOn = function(){$(document).on('keydown', hintsOn)};var hintModeOff = function(){$(document).off('keydown', hintsOn);};")
</function>
<function name="HomeF" parameters="cmd, var" type="boolean">
handled = false
if (cmd = enjoy_cmd and global.house_demolished) {
msg ("{global.zen} You can't enjoy a {rubble.alias} properly till it's at least a hundred years old. Also, you are haunted by the tragic vision of your favourite teapot lying shattered among the dust.{br}There is also the matter of all your clothes.")
handled = true
}
else if (cmd = through_cmd or cmd = walk_to_cmd or cmd = board_cmd or cmd = enter_verb) {
handled = true
if (game.pov.parent = Front_of_House or game.pov.parent = Front_Porch) {
DoWalk ("north")
}
else if (game.pov.parent = Bedroom) {
msg (global.look_around)
}
else {
do (walk_around_cmd, "script")
}
}
else if (cmd = disembark_cmd or cmd = exit_object_cmd or cmd = leave_cmd) {
handled = true
if (game.pov.parent = Front_Porch) {
DoWalk ("south")
}
else if (game.pov.parent = Bedroom) {
do (walk_around_cmd, "script")
}
else {
msg (global.look_around)
}
}
else if (cmd = liedown_cmd and game.pov.parent = Front_of_House) {
handled = true
do (lie, "script")
}
else if (cmd = lookat) {
if (global.house_demolished) {
msg ("It is now a {rubble.alias}.")
handled = true
}
else if (global.identity_flag = "Ford") {
handled = UnimportantThingF()
}
}
return (handled)
</function>
<function name="HouseF" parameters="cmd, var" type="boolean">
if (DictionaryContains(var,"object")) {
object = DictionaryItem(var,"object")
if (object = house) {
DictionaryAdd (var, "object", home)
}
}
if (not IsDefined("object")) {
object1 = DictionaryItem(var, "object1")
if (object1 = house) {
DictionaryAdd (var, "object1", home)
}
}
if (DictionaryContains(var,"object2")) {
object2 = DictionaryItem(var,"object2")
if (object2 = house) {
DictionaryAdd (var, "object2", home)
}
}
if (not HomeF(cmd,var)) {
do (cmd, "script", var)
}
return (true)
</function>
<function name="BetterLuck">
Tell (" your home is unexpectedly demolished to make way for a new bypass. You are seriously injured in the process, but on your way to the hospital")
MakeWayFor
if (not IsFSet(Bedroom, "onbit")) {
msg ("Next time, try turning on the light.")
}
else if (not IsFSet(gown,"openbit") and global.headache) {
msg ("Too bad you never found an aspirin for your hangover.")
}
else {
msg ("Better luck next life.")
}
Finish
</function>
<function name="HangoverF" parameters="cmd, var" type="boolean">
handled = false
if (cmd = ask_about_cmd and HasAttribute(global,"PRSI")) {
if (global.PRSI = hangover) {
game.hangover_thingy = true
// RFALSE
// So, do nothing, I guess.
}
}
else if (cmd = ask and HasAttribute(global,"PRS_TEXT")) {
if (global.PRS_TEXT = "hangover" or global.PRS_TEXT = "headache") {
game.hangover_thingy2 = true
// RFALSE
// So, do nothing, I guess.
}
}
else if (not global.headache and global.identity_flag = "Zaphod") {
msg ("You can't feel any {hangover.alias}s here.")
handled = true
}
else if (cmd = lookat) {
do (diagnose_cmd, "script")
handled = true
}
else if (cmd = give or cmd = throw_cmd or cmd = drop) {
do (count_cmd, "script")
handled = true
}
return (handled)
</function>
<function name="BedroomF" parameters="rarg" type="boolean">
bool = false
if (rarg = "look") {
bool = true
Tell ("The bedroom is a mess.{cr}It is a small bedroom with a faded carpet and old wallpaper. There is a washbasin, a chair")
if (gown.scenery) {
Tell (" with a tatty dressing gown slung over it")
}
msg (", and a window with the curtains drawn. Near the exit leading south is a phone.")
}
return (bool)
</function>
<function name="BedroomExitF" parameters="cmd, var" type="boolean">
bool = false
if (not bedroom_door.isopen) {
msg ("The door is closed.")
ThisIsIt (bedroom_door)
bool = true
}
else {
if (global.headache) {
msg ("You miss the doorway by a good eighteen inches. The wall jostles you rather rudely.")
bool = true
}
else {
if (IsFSet(bulldozer, "invisible")) {
msg ("You make your way down to the front porch.{cr}")
}
else {
msg ("You rush down the stairs in panic.{cr}")
}
FClear (light, "lightbit")
MoveObject (game.pov, Front_Porch)
bool = true
}
}
return (bool)
</function>
<function name="PhoneF" parameters="cmd, var" type="boolean">
if (cmd = take) {
multiple = DictionaryItem(var,"multiple")
if (global.in_bed) {
msg (global.reach_bit)
return (true)
}
else if (global.headache) {
msg (global.lurches)
return (true)
}
else if (IsFSet(phone,"touchbit")) {
Perform (call_cmd, QuickParams("object", Dais))
return (true)
}
else {
FSet (phone, "touchbit")
Tell ("You pick up the receiver.{global.dialing_tone}")
if (IsFSet(toothbrush,"touchbit")) {
TwoTrees
}
}
Tell ("{cr}")
return (true)
}
else if (cmd = answer_cmd) {
msg ("It isn't ringing.")
return (true)
}
return (false)
</function>
<function name="GlobalBedF" parameters="cmd, var" type="boolean">
bool = false
if (global.PRSO = global_bed) {
params = global.PRS_VAR
DictionaryAdd (params, global.PRSO_KEY, bed)
do (global.PRSA, "script", params)
bool = true
}
else {
params = global.PRS_VAR
DictionaryAdd (params, global.PRSI_KEY, bed)
do (global.PRSA, "script", params)
bool = true
}
return (bool)
</function>
<function name="BedF" parameters="cmd, var" type="boolean">
// Check if called by m_beg
if (DictionaryContains(var,"rarg")) {
rarg = DictionaryItem(var, "rarg")
if (cmd = take and global.PRSO.take) {
if (not global.PRSO.parent = bed) {
if (not global.PRSO.parent = game.pov) {
Tell ("You can't reach it from the bed.")
if (global.headache) {
Tell (" The effort almost kills you.")
}
msg ("")
return (true)
}
}
}
else if (cmd = look_inside_cmd and global.PRSO = curtains) {
HandleSingleCommand ("take phone")
game.suppressturnscripts = true
ThisIsIt (curtains)
return (true)
}
else if ((cmd = open or cmd = close) and global.PRSO = bedroom_door) {
HandleSingleCommand ("take phone")
game.suppressturnscripts = true
ThisIsIt (bedroom_door)
return (true)
}
else if (cmd = go) {
OutOfFirst (bed)
return (true)
}
else {
return (false)
}
}
else if (cmd = disembark_cmd and global.headache and global.in_bed) {
global.ohere = false
global.lying_down = false
global.in_bed = false
global.in_something = false
global.on_something = false
global.inside_of = null_object
msg ("Very difficult, but you manage it. The room is still spinning. It dips and sways a little.")
return (true)
}
else if (cmd = look_under_cmd) {
MoveObjectHere (stuff_under_bed)
msg ("There's nothing there. Well, there are a few soiled handkerchiefs, a book you thought you'd lost, a couple of foreign coins, and something else which can't be fully described in a family game, but nothing you'd actually want.")
return (true)
}
else if ((cmd = open or cmd = close) and global.PRSO = bed) {
TellMeHow
return (true)
}
else {
return (false)
}
</function>
<function name="CurtainsF" parameters="cmd, var" type="boolean">
if (cmd = open or cmd = look_inside_cmd) {
FClear (bulldozer, "invisible")
msg ("As you part " + GetDisplayAlias(curtains) + " you see that i{global.nice_day}, and a large yellow " + GetDisplayAlias(bulldozer) + " is advancing on " + GetDisplayAlias(home) + ".")
return (true)
}
return (false)
</function>
<function name="GownF" parameters="cmd, var" type="boolean">
if ((cmd = open or cmd = close) and not gown.worn) {
msg ("It's hard to open or close the pocket unless you're wearing the gown.")
return (true)
}
else if (cmd = lookat) {
Tell ("The dressing gown is faded and battered, and is clearly a garment which has seen better decades. It has a pocket which is ")
if (gown.isopen) {
Tell ("open")
}
else {
Tell ("closed")
}
Tell (", and a small loop at the back of the collar.")
if (GetBoolean(global, "gown_hung")) {
Tell (" It is hanging from a " + GetDisplayAlias(hook) + ".")
}
if (global.sleeve_tied) {
Tell (" The sleeves are tied closed.")
}
msg ("")
return (true)
}
if (cmd = take and global.headache) {
bool = DictionaryItem(var,"multiple")
if (bool) {
if (not ListContains(global.PRSO,gown)) {
return (false)
}
}
else {
if (not global.PRSO = gown and not ListContains(global.PRSO, gown)) {
return (false)
}
}
if (global.in_bed) {
msg (global.reach_bit)
return (true)
}
if (gown.parent = game.pov) {
return (false)
}
FClear (gown, "trytakebit")
gown.scenery = false
AddToInventory (gown)
msg ("Luckily, this is large enough for you to get hold of. You notice something in the pocket.")
return (true)
}
else if (cmd = wear and global.sleeve_tied) {
msg ("You'll have to untie the sleeve first.")
return (true)
}
else if (cmd = tie or cmd = untie) {
Perform (global.PRSA, QuickParams("object",sleeves))
return (true)
}
return (false)
</function>
<function name="SleevesF" parameters="cmd, var" type="boolean">
if (not ListContains(ScopeVisible(),gown)) {
CantSee (sleeves)
return (true)
}
else if (cmd = wear or cmd = take) {
HandleSingleCommand (cmd.name + " gown")
game.suppressturnscripts = true
return (true)
}
else if (cmd = tie or cmd = close) {
global.PRSO = gown
// TODO Create IDrop (?)
// if(IDrop()){
// return (true)
// }
// else if (global.sleeve_tied){
if (global.sleeve_tied) {
msg ("It is.")
return (true)
}
else {
global.sleeve_tied = true
msg ("The sleeves are now tied closed.")
return (true)
}
}
return (false)
</function>
<function name="TwoTrees">
global.awaiting_reply = 9
EnableQueue (i_reply, 2)
Tell (" Shouldn't you be taking more interest in events in the world around you? While you've got it...?")
</function>
<function name="ThingF" parameters="cmd, var" type="boolean">
if (cmd = lookat) {
msg ("Apart from a label on the bottom saying \"Made in Ibiza\" it furnishes you with no clue as to its purpose, if indeed it has one. You are surprised to see it because you thought you'd thrown it away. Like most gifts from your aunt,{global.get_rid}")
return (true)
}
else if (cmd = drop and not game.pov.parent = Maze and not game.pov.parent = Access_Space) {
MoveObject (thing, game.pov.parent)
msg ("It falls to the ground with a light \"thunk.\" It doesn't do anything else at all.")
return (true)
}
else if (cmd = close) {
msg ("Come to think of it, you vaguely remember an instruction booklet with directions for that. You never read it and lost it months ago.")
return (true)
}
return (false)
</function>
<function name="TabletF" parameters="cmd, var" type="boolean">
if (cmd = eat or cmd = take or cmd = drink) {
MoveObject (tablet, local_globals)
screwdriver.trytakebit = false
toothbrush.trytakebit = false
global.headache = false
game.score = game.score + 10
msg ("You swallow the tablet. After a few seconds the room begins to calm down and behave in an orderly manner. Your terrible headache goes.")
return (true)
}
return (false)
</function>
<function name="ClothesExitF">
if (gown.worn) {
MoveObject (game.pov, Front_of_House)
}
else {
global.awaiting_reply = 10
EnableQueue (i_reply, 2)
msg (global.arrested)
}
</function>
<function name="MailF" parameters="cmd, var" type="boolean">
if (cmd = take and not IsFSet(mail,"touchbit")) {
FSet (mail, "touchbit")
FClear (mail, "trytakebit")
mail.scenery = false
AddToInventory (mail)
msg ("You gather up the pile of mail.")
return (true)
}
else if (cmd = open) {
Perform (read_cmd, QuickParams("object",mail))
return (true)
}
return (false)
</function>
<function name="HouseEnterF" type="boolean">
if (global.house_demolished) {
msg ("You can't enter a {rubble.alias}.")
return (false)
}
else if (global.identity_flag = "Ford") {
if (not cmd = through_cmd) {
Tell ("Enter the house? ")
Private ("Arthur")
return (false)
}
}
else if (not global.prosser_lying) {
Tell ("The {bulldozer.alias}")
JigsUp (", which you may have noticed outside, just pushed your home down on top of you.")
return (false)
}
else {
EnableQueue (i_housewreck, 5)
MoveObject (game.pov, Front_Porch)
return (true)
}
</function>
<function name="FrontOfHouseF" parameters="rarg" type="boolean">
if (rarg = "m_enter") {
FClear (bulldozer, "invisible")
bulldozer.visible = true
if (dog.parent = Country_Lane) {
if (not global.dog_fed) {
do (i_dog, "timeoutturnscript")
}
EnableQueue (i_vogons, 3)
Tell ("You reach the site of what was ")
if (global.identity_flag = "Ford") {
Tell ("Arthur's")
}
else {
Tell ("your")
}
msg (" home. It is now a {rubble.alias}. {Prosser.alias} looks sheepishly triumphant, a trick few people can do, as it requires a lot of technically complex deltoid muscle work.{cr}")
if (not global.identity_flag = "Ford" and not global.prosser_lying) {
EnableQueue (i_bulldozer, -1)
}
}
}
else if (rarg = "m_look") {
if (global.identity_flag = "Ford" and not IsFSet(Front_of_House,"ndescbit")) {
FSet (beer, "ndescbit")
beer.scenery = true
global.drunk_level = 0
FSet (Arthur, "ndescbit")
Arthur.scenery = true
FSet (Front_of_House, "ndescbit")
Tell ("Before you is the house of your friend, {Arthur.alias}, who is lying in front of a {bulldozer.alias} you have no idea why. You have no idea about most things about Arthur, even why you regard him as a friend, but you do, and must therefore return his towel before you leave.")
// last fix
}
else {
if (global.house_demolished) {
Tell ("There is a huge {rubble.alias}")
}
else if (global.identity_flag = "Ford") {
Tell ("Arthur's house is")
}
else {
Tell ("You can enter your home")
}
Tell (" to the north. A path leads around it to the northeast and northwest, and a country lane is visible to the south.")
}
if (not IsFSet(Front_of_House, "ndescbit") and global.identity_flag = "Arthur") {
// Log("front of house: ndescbit not IsFSet")
FSet (Front_of_House, "ndescbit")
// Front_of_House.scenery = true
Tell (" All that lies between your home and the huge yellow {bulldozer.alias} bearing down on it is a few yards of mud.")
}
msg ("")
}
else if (rarg = "m_end" and global.identity_flag = "Ford" and IsFSet(Arthur, "ndescbit")) {
FClear (Arthur, "ndescbit")
Arthur.scenery = false
return (false)
}
return (false)
</function>
<function name="BrickDeath"><![CDATA[
msg ("{cr}Your home collapses in a cloud of dust, and a stray flying brick hits you squarely on the back of the head. You try to think of some suitable last words, but what with the confusion of the moment and the spinning of your head, you are unable to compose anything pithy and expire in silence.{cr}")
global.dead_counter = 1
global.deadmsg = "You keep out of this, you're dead"
get input {
msg ("{cr}> " + result)
Tell (global.deadmsg)
msg (". An ambulance arrives.{cr}")
get input {
msg ("{cr}> " + result)
Tell (global.deadmsg)
msg (" and should be concentrating on developing a good firm rigor mortis. You are put in the ambulance, which drives away.{cr}")
get input {
msg ("{cr}> " + result)
Tell ("For a dead person you are talking too much.{cr}{cr}As the ambulance reaches the mortuary")
MakeWayFor
Finish
}
}
}
]]></function>
<function name="BulldozerDriverF" parameters="cmd, var" type="boolean">
if (cmd = tell or cmd = tellto or cmd = ask or cmd = alttellto or cmd = hello_cmd) {
msg ("The {bulldozer_driver.alias}, perusing a booklet of union rules, ignores you.")
FuckingClear
return (true)
}
return (false)
</function>
<function name="BulldozerF" parameters="cmd, var" type="boolean">
if (cmd = lookat) {
msg ("It's one of those really big {bulldozer.alias}s that can actually crush other {bulldozer.alias}s, let alone houses.")
return (true)
}
else if (not Here(Front_of_House)) {
gotime = false
switch (cmd) {
case (rub_cmd,push,move_cmd,take,kick_cmd,block,walk_around_cmd) {
gotime = true
}
}
if (gotime) {
msg ("The {bulldozer.alias} isn't here.")
return (true)
}
}
else if (cmd = lie) {
HandleSingleCommand ("block bulldozer")
game.suppressturnscripts = true
return (true)
}
else if (cmd = block_cmd and global.identity_flag = "Arthur") {
if (global.house_demolished) {
msg ("Too late now.")
}
else if (global.lying_down) {
do (lie, "script")
}
else if (global.prosser_lying) {
msg ("Prosser's doing that for you.")
}
else {
global.lying_down = true
// I think I fixed the error that made me need to use this
// SetTurnTimeout (1) {
// EnableQueue (i_prosser, -1)
// }
// Enabling instead. HOPE THIS WORKS!
EnableQueue (i_prosser, 2)
msg ("You lie down in the path of the advancing {object:bulldozer}. Prosser yells at you to for crissakes move!!!")
}
return (true)
}
else if (cmd = walk_around_cmd) {
if (global.identity_flag = "Arthur") {
do (dig_cmd, "script")
return (true)
}
else if (not global.towel_offered) {
msg ("Didn't you come here for a purpose? Something about a towel?")
}
else if (global.gone_around) {
msg ("You already did. It's not a merry-go-round.")
}
else {
global.gone_around = true
msg ("You walk around the {bulldozer.alias}. Prosser is standing here, looking cross and frustrated. Realising that you are a friend of Arthur's he starts to talk at you. He says that this sort of protest is all very well, but what Mr. Dent must realise is that he's had plenty of time to make a formal protest at the proper time and place, and that spending months going through the appropriate official channels, filling in the appropriate official forms, and going to the appropriate official public hearings is the right way of going about it, and lying around whimsically in the mud is not. He says that he personally hates mud and despises the sort of people who lie in it.")
}
return (true)
}
else if (cmd = listen and GetBoolean(i_prosser, "enabled")) {
msg ("\"Rumble...rumble...\"")
return (true)
}
return (false)
</function>
<function name="ProsserDescfcn" type="string">
// Optional X parameter???
if (global.identity_flag = "Ford" and not IsFSet(Prosser, "touchbit")) {
FSet (Prosser, "touchbit")
s = "{br}Nearby stands an impatient man. There seems to be a bit of an atmosphere."
}
else {
s = "{Prosser.alias}, from the local council is "
if (global.prosser_lying) {
s = s + "lying in front"
}
else if (global.gone_around) {
s = s + "standing at the side"
}
else {
s = s + global.on_other_side
}
s = s + " of the {bulldozer.alias}. He seems to be wearing a {digital_watch.alias}."
if (not IsFSet(Prosser, "touchbit")) {
FSet (Prosser, "touchbit")
s = s + " He looks startled to see you emerge, and yells at you to get out of the way."
}
}
return (s)
</function>
<function name="ProsserF" parameters="cmd, var" type="boolean">
if ((cmd = tellto or cmd = alttellto) and global.PRSO = Prosser) {
if (fleet.parent = game.pov.parent) {
msg ("Prosser is too preoccupied with recent events to give your remarks much consideration. He is running off and saying a number of things about his mother in a high voice.")
FuckingClear
return (true)
}
}
if (cmd = alttellto) {
// msg("ALTTELLTO")
s = DictionaryItem(var,"text")
regex = tell_about_cmd.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object1")
prsi = DictionaryItem(tmpparams,"object2")
if (prso = "me") {
HandleSingleCommand ("ask prosser about " + prsi)
game.suppressturnscripts = true
return (true)
}
}
regex = what_about_cmd.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object")
HandleSingleCommand ("ask prosser about " + prso)
game.suppressturnscripts = true
return (true)
}
regex = what_cmd.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object")
HandleSingleCommand ("ask prosser about " + prso)
game.suppressturnscripts = true
return (true)
}
regex = give.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object1")
prsi = DictionaryItem(tmpparams,"object2")
if (prsi = "me") {
HandleSingleCommand ("ask prosser for " + prso)
game.suppressturnscripts = true
return (true)
}
}
if (global.PRS_TEXT = "hello") {
HandleSingleCommand ("hello prosser")
game.suppressturnscripts = true
return (true)
}
}
if (cmd = tell_about_cmd and global.PRSO = game.pov) {
global.winner = game.pov
HandleSingleCommand ("ask prosser about me")
game.suppressturnscripts = true
global.winner = Prosser
return (true)
}
if (cmd = hello_cmd) {
global.winner = game.pov
HandleSingleCommand ("hello prosser")
game.suppressturnscripts = true
global.winner = Prosser
return (true)
}
if (cmd = what_cmd and global.PRSO = object_of_game) {
global.winner = game.pov
HandleSingleCommand ("ask prosser about the object of the game")
game.suppressturnscripts = true
global.winner = Prosser
return (true)
}
if ((cmd = what_cmd and global.PRSO = time) or (cmd = tell_time_cmd and global.PRSO = game.pov and global.PRSI = time) or (cmd = what_time_cmd and global.PRSO = time)) {
global.winner = game.pov
HandleSingleCommand ("ask prosser for time")
game.suppressturnscripts = true
global.winner = Prosser
return (true)
}
if (cmd = what_cmd and global.PRSO = object_of_game) {
global.winner = game.pov
HandleSingleCommand ("ask prosser about " + global.PRSO.alt[0])
game.suppressturnscripts = true
global.winner = Prosser
return (true)
}
if (global.identity_flag = "Ford") {
msg ("TODO: FORD STUFF IN ProsserF!")
return (true)
}
if ((cmd = what_about_cmd or cmd = ask_about_cmd) and (global.PRSO = house or global.PRSO = home) and global.house_demolished) {
msg ("Prosser explains the local planning regulations and says, by way of reassurance, that you will probably be rehoused within a couple of years.")
return (true)
}
if (cmd = block_cmd and global.PRSO = bulldozer and GetBoolean(i_bulldozer, "enabled")) {
do (protest_cmd, "script")
return (true)
}
if (cmd = give or cmd = show_cmd) {
switch (global.PRSO) {
case (thing) {
msg ("He is much impressed and says, \"You must have the same aunt I have.\"")
return (true)
}
case (towel) {
global.towel_muddy = true
msg ("Prosser thanks you, wipes the mud off his boots, and hands it back.")
return (true)
}
case (guide) {
msg ("Prosser takes a quick look at {guide.alias}, says he doesn't read that kind of rubbish, and hands it back.")
return (true)
}
case (satchel) {
msg ("Prosser says he wouldn't be seen dead with that kind of thing slung over his shoulder.")
return (true)
}
}
}
if (cmd = walk_to_cmd and game.pov.parent = Front_of_House) {
if (global.identity_flag = "Ford" and not global.gone_around) {
HandleSingleCommand ("walk around bulldozer")
game.suppressturnscripts = true
return (true)
}
msg ("You're already as close as any reasonable person would want to get.")
return (true)
}
if ((cmd = kill_cmd or cmd = kick_cmd) and global.PRSO = Prosser and global.house_demolished) {
msg ("You muck up all his fancy facial work. This is the last moment of satisfaction you will experience for some time.")
return (true)
}
if ((cmd = kill_cmd or cmd = kick_cmd) and global.PRSO = Prosser) {
msg ("He dodges, insisting that this is incorrect procedure.")
return (true)
}
if (cmd = throw_cmd and global.PRSI = Prosser) {
MoveObjectHere (global.PRSO)
HandleSingleCommand ("kill prosser")
game.suppressturnscripts = true
return (true)
}
if (cmd = lookat) {
msg (ProsserDescfcn())
return (true)
}
if (cmd = listen and not IsFSet(conversation,"invisible")) {
HandleSingleCommand ("listen to conversation")
game.suppressturnscripts = true
return (true)
}
if (cmd = ask_about_cmd and global.PRSI = object_of_game) {
msg ("Prosser pulls a booklet out of his back pocket. \"My game manual says that the goal is getting this here house knocked down.\"")
return (true)
}
if (cmd = ask_about_cmd and (global.PRSI = digital_watch or global.PRSI = time)) {
HandleSingleCommand ("ask prosser for time")
game.suppressturnscripts = true
return (true)
}
if (cmd = ask_for_cmd and global.PRSI = time) {
msg ("Prosser shakes the {digital_watch.alias}. \"Hasn't worked for months. I keep wearing it only because I think {digital_watch.alias}es are neat.\"")
return (true)
}
StandAside
FuckingClear
return (true)
</function>
<function name="StandAside">
if (global.prosser_lying) {
msg ("\"Leave me alone,\" Prosser whimpers miserably.")
}
else {
Tell ("\"Please step aside as I need to be able to ")
if (global.house_demolished) {
msg ("clear this {rubble.alias} away.\"")
}
else {
Tell ("knock ")
if (global.identity_flag = "Arthur") {
Tell ("your")
}
else {
Tell ("that")
}
msg (" house down.\"")
}
}
</function>
<function name="DigitalWatchF" parameters="cmd, var" type="boolean">
if (cmd = take or cmd = read_cmd) {
Private ("Prosser")
return (true)
}
return (false)
</function>
<function name="FordDescfcn" parameters="X" type="string">
if (global.ford_sleeping) {
return ("{br}Ford is in the corner, snoring loudly.")
}
else {
return ("{br}{Ford.alias} is here.")
}
</function>
<function name="FordF" parameters="cmd, var" type="boolean"><![CDATA[
if (global.identity_flag = "Ford") {
if (global.PRSO = Ford) {
// THIS WILL NEVER HAPPEN IN THIS PORT
Perform (cmd, QuickParams(global.PRSO_KEY, game.pov,global.PRSI_KEY, global.PRSI))
return (true)
}
else {
// Perform (cmd, QuickParams(global.PRSO_KEY,global.PRSO,global.PRSI_KEY, game.pov))
s = game.pov.currentcommandvarlist
o = DictionaryItem(var, global.PRSI_KEY)
s = Replace(s, o, "me")
HandleSingleCommand (s)
game.suppressturnscripts = true
return (true)
}
}
else {
if (cmd = alttellto and global.PRSO = Ford) {
// Fuck, this is gonna be long!
if (fleet.parent = game.pov.parent) {
msg (global.above_noise)
FuckingClear
return (true)
}
if (global.PRSI = house or global.PRSO = house) {
msg ("\"It's not a house, it's a home.\" (Footnote 2)")
FuckingClear
return (true)
}
// if(IsCmd(tell_about_cmd, global.PRS_TEXT) and GetPRSOText(tell_about_cmd, global.PRS_TEXT) = "me"){
// holy shit!
// This is already handled. My ask_about_cmd has a "object1, tell me about object2" pattern.
// }
if (IsCmd(hello_cmd, global.PRS_TEXT)) {
HandleSingleCommand ("hello ford")
game.suppressturnscripts = true
return (true)
}
if (IsCmd(what_cmd, global.PRS_TEXT) and GetPRSO(what_cmd, global.PRS_TEXT) = object_of_game) {
msg (global.ask_about_object)
return (true)
}
if (IsCmd(what_about_cmd, global.PRS_TEXT) and L(global.ford_counter, 2) and game.pov.parent = Front_of_House and GetPRSO(what_about_cmd, global.PRS_TEXT) = home) {
Tell ("Ford")
FordDecides
return (true)
}
if (IsCmd(what_about_cmd, global.PRS_TEXT) and (GetPRSO(what_about_cmd, global.PRS_TEXT) = home or GetPRSO(what_about_cmd, global.PRS_TEXT) = third_planet) and global.earth_demolished) {
// msg("1662: forwarding --> \"ask ford about earth\"")
HandleSingleCommand ("ask ford about earth")
game.suppressturnscripts = true
return (true)
}
if (not global.earth_demolished) {
if (L(global.drunk_level, 3) and game.pov.parent = Pub) {
msg ("\"Shut up and drink your beer. You're going to need it.\"")
return (true)
}
else {
Tell ("Ford, busy ")
if (global.ford_counter = 2) {
Tell ("talking to Prosser")
}
else {
Tell ("scanning the sky ")
if (game.pov.parent = Pub) {
Tell ("through the window")
}
if (not global.ford_counter = 2) {
Tell (" for something")
}
}
msg (", ignores you")
}
EnableQueue (i_ford, 2)
return (true)
}
else {
msg ("Ford seems deep in thought.")
FuckingClear
return (true)
}
}
if ((cmd = ask or cmd = tell or cmd = tellto or cmd = ask_about_cmd or cmd = ask_for_cmd or cmd = tell_about_cmd or cmd = hello_cmd) and global.PRSO = Ford and global.ford_sleeping) {
msg ("Ford is sleeping!")
FuckingClear
return (true)
}
if (cmd = give and global.PRSI = Ford and global.ford_sleeping) {
HandleSingleCommand ("hello, ford")
game.suppressturnscripts = true
return (true)
}
if (global.follow_flag = 1 and not game.pov.parent = Ford.parent and cmd = follow_cmd) {
msg ("In a state of anxiety and confusion you follow Ford down the lane...{cr}")
MoveObject (game.pov, Ford.parent)
return (true)
}
if (global.follow_flag = 3 and cmd = follow_cmd) {
DoWalk ("west")
return (true)
}
if (cmd = follow_cmd and global.follow_flag = 5) {
DoWalk ("south")
return (true)
}
if ((cmd = alarm_cmd or cmd = shake_cmd) and global.ford_sleeping) {
msg ("Rather like trying to wake the dead.")
return (true)
}
if (cmd = ask_about_cmd and global.PRSI = object_of_game) {
msg (global.ask_about_object)
return (true)
}
if (cmd = ask_about_cmd and global.PRSI = third_planet) {
msg ("Ford explains that the Earth has been demolished. To cheer you up, he points out that there are an awful lot of little planets like that around, and the Earth wasn't even a particularly nice one.")
return (true)
}
if (cmd = give and global.PRSO = thumb and fleet.parent = game.pov.parent) {
msg ("You can't reach him in this wind.")
return (true)
}
if (cmd = listen) {
if (not IsFSet(conversation, "invisible")) {
// Perform (listen, QuickParams("object",conversation))
HandleSingleCommand ("listen to conversation")
game.suppressturnscripts = true
return (true)
}
if (global.ford_sleeping) {
msg ("\"Zzzzzzz...\"")
return (true)
}
}
if (cmd = lookat and global.ford_sleeping) {
msg ("He's sleeping.")
return (true)
}
if (cmd = ask_for_cmd and global.PRSI = towel and (global.ford_counter = 0 or global.ford_counter = 1)) {
HandleSingleCommand ("take towel")
game.suppressturnscripts = true
return (true)
}
}
return (false)
]]></function>
<function name="FordDecides">
FClear (conversation, "invisible")
conversation.visible = true
EnableQueue (i_ford, 2)
global.ford_counter = 2
msg (" looks startled, then guilty. He starts to say something and stops. He starts to say something else and stops. Suddenly, he seems to see the {bulldozer.alias} for the first time, stops starting to say things and starts.{cr}{cr}He seems to come to a momentous decision, says he has something of Earth-shattering importance to tell you, and stresses the importance of a quick drink at the Horse 'n Groom.{cr}")
ButThatMan ("you exclaim")
msg (" Ford goes off for a quiet word with Prosser. From where you're lying, you cannot hear what's happening, although they seem deeply engrossed in {conversation.alias}.")
</function>
<function name="SatchelDescfcn" parameters="X" type="string">
if (satchel.parent = Ford) {
return ("")
}
s = "There is a satchel here"
if (global.panel_blocker = satchel) {
s = s + ", resting in front of the {robot_panel.alas}"
}
s = s + "."
s = s + ItemOnSatchelDescription()
s = s + "{cr}"
return (s)
</function>
<function name="ItemOnSatchelDescription" type="string">
s = ""
if (global.item_on_satchel) {
s = s + " Sitting on top of it is"
s = s + GetDisplayName(global.item_on_satchel)
s = s + "."
}
return (s)
</function>
<function name="SatchelF" parameters="cmd, var" type="boolean">
if (cmd = take and satchel.parent = Ford) {
msg ("Ford says, \"Hey, Arthur, keep {hands.alias}s off my satchel!\"")
return (true)
}
if (cmd = lookat) {
Tell ("The satchel, which is {either satchel.isopen:open|closed}, is fairly bulky.")
ItemOnSatchelDescription
return (true)
}
// This next IF is a hack, unless I never code the bit where you play as Ford.
if (not global.identity_flag = "Ford") {
Private ("Ford")
return (true)
}
if (cmd = open and not global.identity_flag = "Ford") {
Private ("Ford")
return (true)
}
return (false)
</function>
<function name="TowelF" parameters="cmd, var" type="boolean">
if (cmd = take and IsFSet (towel, "trytakebit") and Here(Front_of_House) and global.lying_down) {
FClear (towel, "trytakebit")
AddToInventory (towel)
MoveObject (Ford, local_globals)
global.ford_gone = true
global.follow_flag = 5
EnableQueue (i_follow, 2)
i_ford.enabled = false
msg ("As you take it, Ford says, \"Er, look, thanks for lending me the towel... been nice knowing you... got to go now...\" He smiles oddly and walks down the {Country_Lane.alias}.")
return (true)
}
else if ((cmd = take or cmd = move) and IsFSet(towel, "surfacebit")) {
FClear (towel, "trytakebit")
FClear (towel, "sufacebit")
foreach (o, GetDirectChildren(towel)) {
MoveObjectHere (o)
}
FClear (towel, "containerbit")
FClear (towel, "openbit")
FClear (towel, "ndescbit")
if (cmd = move) {
msg ("Okay, it's no longer covering the drain.")
return (true)
}
else {
return (false)
}
}
if ((cmd = wear or cmd = tie) and global.PRSI = beast) {
msg ("The effect is decorative rather than helpful.")
return (true)
}
if ((cmd = wear or cmd = tie) and (global.PRSI = head or global.PRSI = eyes)) {
if (IsFSet(towel, "wornbit")) {
msg ("It already is.")
return (true)
}
else if (game.pov.parent = beast.parent) {
WearGarment (towel)
FSet (towel, "wornbit")
EnableQueue (i_beast, 11)
msg ("The {beast.alias} is completely bewildered. It is so dim it thinks that if you can't see it, it can't see you. You have a few seconds before it realises its mistake.")
return (true)
}
else {
msg ("There's no need for that. It's not like there's a {beast.alias} around, or something.")
return (true)
}
}
else if (cmd = lookat) {
if (IsFSet(towel, "surfacebit")) {
msg ("TODO: TowelF but this can't happen unless I code beyond earth.")
return (true)
}
else {
if (global.towel_muddy) {
msg ("It is caked with mud.")
}
else {
msg ("It's covered with little pink and blue flowers.")
}
return (true)
}
}
return (false)
</function>
<function name="BackOfHouseF" parameters="rarg">
if (rarg = "m_end") {
if (not GetBoolean(i_vogons, "enabled") and global.house_demolished) {
do (i_vogons, "timeoutturnscript")
EnableQueue (i_vogons, 2)
}
}
if (rarg = "m_look") {
msg ("The rear garden is a pleasant place. I{global.nice_day}, and it's a lovely day for a walk. A path leads around the house to the southeast and southwest.")
}
</function>
<function name="CountryLaneF" parameters="rarg">
if (rarg = "m_enter") {
if (not global.house_demolished and not global.prosser_lying and not Hold.visited) {
global.bulldozer_counter = 3
}
else if (global.identity_flag = "Ford" and global.house_demolished) {
EnableQueue (i_dog, 1)
}
else if (global.drunk_level = 3 and global.identity_flag = "Arthur") {
EnableQueue (i_dog, 1)
}
else if (Hold.visited and not HasFlag(Country_Lane,"ndescbit")) {
dict = global.ford_table
DictionaryAdd (dict, "0", satchel.parent.name)
DictionaryAdd (dict, "1", thumb.parent.name)
DictionaryAdd (dict, "2", guide.parent.name)
DictionaryAdd (dict, "3", towel.parent.name)
DictionaryAdd (dict, "5", mineral_water.parent.name)
if (HasFlag(thumb, "mungedbit")) {
DictionaryAdd (dict, "4", "true")
thumb.mungedbit = false
}
Country_Lane.ndescbit = true
// TODO Create Rob
// ROB PROTAGONIST MEMORIAL
foreach (o, GetDirectChildren(game.pov)) {
// This is mimmicking the ROB function, since there is no ROB function.
if (not o = no_tea) {
MoveObject (o, Memorial)
}
}
AddToInventory (satchel)
MoveObject (thumb, satchel)
MoveObject (guide, satchel)
MoveObject (towel, satchel)
MoveObject (mineral_water, satchel)
MoveObject (Arthur, Front_of_House)
global.identity_flag = "Ford"
MoveObject (Ford, global_objects)
MoveObject (peanuts, Pub)
peanuts.trytakebit = true
peanuts.scenery = true
global.peanuts_bought = false
global.dreaming = true
EnableQueue (i_vogons, 38)
msg ("You are hurrying up a country lane. The sky is light and clear, but you keep glancing at it with apprehension because you know that it will shortly be torn apart by Vogon ships, and that the hills and trees around you will just burn up and blow away, and you hope there's time for a quick drink beforehand.{cr}{cr}You want to hitch a ride aboard the Vogon fleet, but are anxious because it's so long since you were through a{global.beam}.")
}
}
else if (rarg = "m_end") {
if (HasFlag(Country_Lane, "revisitbit")) {
global.dreaming = true
Tell ("Suddenly, a shadow passes in front of the sun. You look up. The shadow is a {fleet.alias}. You fumble for ")
JigsUp ("your Thumb, but before you can hitch a ride the planet is destroyed.")
}
}
else if (rarg = "m_look") {
Tell ("The road runs from ")
if (global.identity_flag = "Arthur") {
Tell ("your")
}
else {
Tell ("Arthur's")
}
Tell (" home, to the north, toward the village Pub, to the west.")
}
</function>
<function name="DogF" parameters="cmd, var" type="boolean">
bool = false
if (cmd = give or cmd = throw_cmd) {
if (global.PRSO = sandwich) {
bool = true
if (global.identity_flag = "Ford") {
MoveObjectHere (sandwich)
msg ("The dog is in a bad mood and tries to bite {hands.alias}. The {sandwich.alias} lies ignored in the roadside dust.")
}
else if (HasFlag(dog,"touchbit")) {
// The dog already swallowed the fleet.
msg ("The dog, which seems to have a slight case of indigestion, ignores the {sandwich.alias}.")
}
else {
// MoveObject (sandwich, local_globals)
MoveObject (sandwich, nowhere)
global.dog_fed = true
msg ("The dog is deeply moved. With powerful sweeps of its tail it indicates that it regards this {sandwich.alias} as one of the great {sandwich.alias}es. Nine out of ten pet owners could happen by at this point expressing any preference they pleased, but this dog would spurn both them and all their tins. This is a dog which has met its main sandwich. It eats{global.with_passion}")
}
}
else if (global.PRSO = peanuts) {
bool = true
msg ("This is a dog, not an elephant.")
}
}
else if (cmd = lookat) {
if (not global.dog_fed) {
msg ("The mongrel looks hungry.")
bool = true
}
}
else if (cmd = rub_cmd or cmd = push or cmd = kick_cmd) {
bool = true
Tell ("The dog tries to bite your ")
if (cmd = kick_cmd) {
Tell ("foot")
}
else {
Tell ("hand")
msg (".")
}
}
return (bool)
</function>
<function name="PubObjectF" parameters="cmd, var" type="boolean">
bool = false
if (cmd = walk_to_cmd or cmd = through_cmd) {
bool = true
if (game.pov.parent = Pub) {
msg (global.look_around)
}
else if (game.pov.parent = Country_Lane) {
DoWalk ("west")
}
else {
do (walk_around_cmd, "script")
}
}
else if (cmd = leave_cmd or cmd = disembark_cmd) {
bool = true
if (game.pov.parent = Pub) {
DoWalk ("west")
}
else {
msg (global.look_around)
}
}
return (bool)
</function>
<function name="PubF" parameters="rarg">
if (rarg = "m_enter") {
if (global.identity_flag = "Ford" and not global.towel_offered) {
EnableQueue (i_uneasy, -1)
}
}
else if (rarg = "m_look") {
Tell ("The Pub is pleasant and cheerful and full of pleasant and cheerful people who don't know they've got about twelve minutes to live and are therefore having a spot of lunch. Some music is playing on an old jukebox. The exit is east.")
}
else if (rarg = "m_end") {
// msg("Pub: m_end")
if (beer.scenery and not global.identity_flag = "Ford" and Ford.parent = Pub) {
beer.scenery = false
EnableQueue (i_ford, 2)
global.ford_counter = 5
msg ("{br}Ford buys {beer.alias} and offers half to you. \"Muscle relaxant...\" he says, impenetrably.")
}
}
</function>
<function name="BarF" parameters="cmd, var" type="boolean">
if (cmd = look_behind_cmd) {
// Perform (lookat, QuickParams("object",pub_shelf))
HandleSingleCommand ("x shelf")
game.suppressturnscripts = true
return (true)
}
return (false)
</function>
<function name="PubShelfF" parameters="cmd, var" type="boolean">
if (cmd = lookat) {
pub_shelf.scenery = true
Tell ("On the shelf behind the bar is the usual array of bottles, glasses and soggy beermats")
if (not global.peanuts_bought) {
peanuts.take = true
peanuts.not_all = true
if (global.sandwich_bought) {
Tell (", and")
}
else {
Tell (",")
}
Tell (" some packets of peanuts")
}
if (not global.sandwich_bought) {
sandwich.take = true
sandwich.not_all = true
Tell (", and a plate of uninviting {sandwich.alias}es")
}
msg (".")
return (true)
}
return (false)
</function>
<function name="MusicF" parameters="cmd, var" type="boolean">
if (cmd = listento or cmd = enjoy_cmd) {
// Perform (listento, QuickParams("object",jukebox))
HandleSingleCommand ("listen to jukebox")
game.suppressturnscripts = true
return (true)
}
return (false)
</function>
<function name="JukeboxF" parameters="cmd, var" type="boolean">
if (cmd = listento) {
Tell ("The song is ")
if (RandomChance(25)) {
msg ("a Walker Brothers single, \"The Sun Ain't Gonna Shine Anymore.\"")
}
else if (RandomChance(33)) {
msg ("\"Get Back\" by the Beatles.")
}
else if (RandomChance(50)) {
msg ("\"Hey Jude\" by the Beatles (Footnote 4). It's a particular favourite, and listening to it calms you down, and cheers you up.")
}
else {
Tell ("\"Tie a Yellow Ribbon.\"")
if (global.identity_flag = "Ford") {
msg (" You can't stand it, and are pleased to think that this is probably the last time it will ever be heard.")
}
else {
msg ("")
}
}
return (true)
}
else if (cmd = turnoff) {
Private ("the Pub")
return (true)
}
return (false)
</function>
<function name="BarmanF" parameters="cmd, var" type="boolean">
if (cmd = alttellto) {
s = DictionaryItem(var,"text")
regex = tell_about_cmd.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object1")
prsi = DictionaryItem(tmpparams,"object2")
if (prso = "me") {
// Perform(ask_about_cmd, QuickParams("object1",barman, "object2",prsi))
HandleSingleCommand ("ask barman about " + prsi)
game.suppressturnscripts = true
return (true)
}
}
regex = give.pattern
if (IsRegexMatch(regex, s)) {
tmpparams = Populate(regex,s)
prso = DictionaryItem(tmpparams,"object1")
prsi = DictionaryItem(tmpparams,"object2")
if (prsi = "me") {
// Perform(ask_about_cmd, QuickParams("object1",barman, "object2",prsi))
HandleSingleCommand ("buy " + prso)
game.suppressturnscripts = true
return (true)
}
}
if (global.PRS_TEXT = "hello") {
HandleSingleCommand ("hello barman")
game.suppressturnscripts = true
return (true)
}
msg ("The barman ignores you and keeps polishing the other end of the bar.")
return (true)
}
if (cmd = ask_for_cmd or cmd = ask_about_cmd) {
if (global.PRSI = beer or global.PRSI = sandwich or global.PRSI = peanuts) {
// Perform(buy, QuickParams("object", global.PRSI))
HandleSingleCommand ("buy " + global.PRSI.alt[0])
game.suppressturnscripts = true
return (true)
}
}
return (false)
</function>
<function name="BeerF" parameters="cmd, var" type="boolean">
bool = false
if ((cmd = drink or cmd = enjoy_cmd or cmd = count_cmd or cmd = smell or cmd = rub_cmd or cmd = take) and beer.scenery) {
msg ("You'd better buy some first.")
bool = true
}
else if (cmd = count_cmd) {
msg ("Lots.")
bool = true
}
else if (cmd = take) {
msg ("Just drink it!")
bool = true
}
else if (global.identity_flag = "Ford") {
msg ("TODO BeerF")
bool = true
}
else if (cmd = drink or cmd = enjoy_cmd) {
game.score = game.score + 5
global.drunk_level = global.drunk_level + 1
switch (global.drunk_level) {
case (4) {
msg ("You can hear the muffled noise of your home being demolished, and the taste of the beer sours in your mouth.{cr}")
do (get_drunk_cmd, "script")
bool = true
// return (true)
}
case (3) {
bool = true
EnableQueue (i_ford, -1)
global.house_demolished = true
global.prosser_lying = false
msg ("There is a distant crash which Ford explains is nothing to worry about, probably just your house being knocked down.")
game.suppressturnscripts = true
}
case (2) {
bool = true
msg ("It is really very pleasant stuff, with a very good dry, nutty flavour, some light froth on top, and a deep colour. It is at exactly room temperature. You reflect that the world cannot be all bad when there are such pleasures in it.{cr}{cr}Ford mentions that the world is going to end in about twelve minutes.")
game.suppressturnscripts = true
}
case (1) {
bool = true
msg ("It's very good beer, brewed by a small local company. You particularly like its flavour, which is why you woke up feeling so wretched this morning. You were at somebody's birthday party here in the Pub last night.{cr}{cr}You begin to relax and enjoy yourself, so when Ford mentions that he's from a small planet in the vicinity of Betelgeuse, not from Guildford as he usually claims, you take it in your stride, and say, \"Oh yes, which part?\"")
game.suppressturnscripts = true
}
}
}
else if (cmd = buy) {
bool = true
if (beer.scenery) {
HandleSingleCommand ("buy peanuts")
game.suppressturnscripts = true
}
else {
msg (Ford.alias + " has already bought an enormous quantity for you!")
}
}
return (bool)
</function>
<function name="PeanutsF" parameters="cmd, var" type="boolean">
if (global.identity_flag = "Ford") {
msg ("TODO PeanutsF")
return (true)
}
else {
switch (cmd) {
case (open) {
msg ("Just eat 'em.")
return (true)
}
}
}
return (false)
</function>
<function name="SandwichF" parameters="cmd, var" type="boolean">
bool = false
if (cmd = buy and not global.sandwich_bought) {
bool = true
AddToInventory (sandwich)
sandwich.take = true
sandwich.not_all = false
sandwich.scenery = false
global.sandwich_bought = true
msg ("The barman gives you a {sandwich.alias}. The bread is like the stuff that stereos come packed in, the cheese would be great for rubbing out spelling mistakes, and margarine and pickle have performed an unedifying chemical reaction to produce something that shouldn't be, but is, turquoise. Since it is clearly unfit for human consumption you are grateful to be charged only a pound for it.")
}
else if (cmd = buy) {
bool = true
msg ("You already did.")
}
else if ((cmd = take or cmd = eat or cmd = enjoy_cmd) and sandwich.not_all and game.pov.parent = Pub) {
bool = true
msg (global.hands_off)
}
else if (cmd = eat or cmd = enjoy_cmd) {
bool = true
sandwich.parent = local_globals
game.score = game.score - 30
if (global.identity_flag = "Ford") {
msg ("You swallow with revulsion, astonished that life forms which have spent 4.6 billion years evolving cannot produce a better {sandwich.alias} than this.")
}
else {
msg ("It is one of the least rewarding taste experiences you can recall.")
}
}
return (bool)
</function>
<function name="GoToLane">
global.lying_down = false
Tell ("You hear sounds of panic from the street. You ")
if (global.identity_flag = "Ford" and not game.pov.parent = Arthur.parent) {
msg ("leave the Pub and run into Arthur...{cr}")
}
else {
if (global.identity_flag = "Ford") {
Tell ("and Arthur")
}
else {
Tell ("and Ford")
}
msg (" rush outside...{cr}")
}
MoveObject (game.pov, Country_Lane)
if (global.identity_flag = "Ford") {
MoveObject (Ford, Country_Lane)
}
else {
MoveObject (Arthur, Country_Lane)
}
</function>
<function name="FleetF" parameters="cmd, var" type="boolean">
if (cmd = enjoy_cmd) {
msg (global.zen)
return (true)
}
if (cmd = walk_to_cmd or cmd = through_cmd) {
global.awaiting_reply = 11
EnableQueue (i_reply, 2)
msg ("From here?")
return (true)
}
if (cmd = lookat) {
msg ("The fleet consists of terrifying numbers of huge, ugly, yellow ships, all scarred with the results of many such past demolition jobs. Chicago's John Hancock tower, knocked about a bit and painted yellow, is what they each look like. That is, knocked about a bit, painted yellow, and flying.")
return (true)
}
return (false)
</function>
<function name="LeaveEarth">
DisableTurnScript (i_housewreck)
DisableTurnScript (i_bulldozer)
DisableTurnScript (i_prosser)
DisableTurnScript (i_ford)
DisableTurnScript (i_vogons)
hangover.parent = nowhere
global.headache = false
global.bulldozer_counter = 0
global.prosser_counter = 0
global.prosser_lying = false
global.ford_counter = 0
global.drunk_level = 0
global.house_demolished = false
global.vogon_counter = 0
global.earth_demolished = true
global.identity_flag = "Arthur"
MoveObject (Arthur, local_globals)
MoveObject (dog, local_globals)
MoveObject (fleet, local_globals)
MoveObject (Ford, local_globals)
if (not sandwich.parent = game.pov and global.sandwich_bought) {
MoveObject (sandwich, local_globals)
}
FSet (beer, "ndescbit")
FClear (Prosser, "touchbit")
FClear (Front_of_House, "ndescbit")
FClear (Front_of_House, "touchbit")
FClear (Country_Lane, "touchbit")
</function>
<function name="TreePseudo" parameters="cmd, var" type="boolean">
if (cmd = climb_up_cmd or cmd = climb_foo_cmd) {
msg ("You were never very good at that.")
return (true)
}
return (false)
</function>
<function name="ToothbrushF" parameters="cmd, var" type="boolean">
if (cmd = take and not IsFSet(toothbrush, "touchbit")) {
multiple = DictionaryItem(var,"multiple")
if (global.in_bed) {
msg (global.reach_bit)
return (true)
}
else if (global.headache) {
msg (global.lurches)
return (true)
}
AddToInventory (toothbrush)
FSet (toothbrush, "touchbit")
FClear (toothbrush, "trytakebit")
Tell ("As you pick up the {toothbrush.alias} a tree outside the window collapses. There is no causal relationship between these two events.")
if (IsFSet(phone, "touchbit")) {
TwoTrees
}
Tell ("{cr}")
return (true)
}
return (false)
</function>
<function name="LightF" parameters="cmd, var" type="boolean">
if ((fleet.parent = game.pov.parent or Here(Airlock) or Here(Inside_Whale)) and thumb.visible) {
if (global.PRSI = light) {
s = game.pov.currentcommand
o = DictionaryItem(game.pov.currentcommandvarlist, global.PRSI_key)
s = Replace(s, o, thumb.alt[0])
HandleSingleCommand (s)
game.suppressturnscripts = true
// Perform (cmd, QuickParams("object1",global.PRSO,"object2",thumb))
return (true)
}
else {
s = game.pov.currentcommand
o = DictionaryItem(game.pov.currentcommandvarlist, global.PRSO_key)
s = Replace(s, o, thumb.alt[0])
HandleSingleCommand (s)
Log (s)
game.suppressturnscripts = true
// Perform (cmd, QuickParams("object1",thumb,"object2",global.PRSI))
return (true)
}
}
else if (Here(Galley)) {
return (UnimportantThingF())
}
else if (light = global.PRSI and (cmd = ask or cmd = tell or cmd = alttellto)) {
return (false)
}
else if (not game.pov.parent = Bedroom) {
CantSee (light)
return (true)
}
else if (cmd = turnon or cmd = turn_on_bedroom_light_cmd) {
if (not CheckDarkness()) {
msg ("It is.")
return (true)
}
else {
global.lit = true
SetLight (Bedroom)
FSet (Bedroom, "onbit")
// FSet (dark_object, "darkbit")
// MoveObject (dark_object, dark)
msg ("Good start to the day. Pity it's going to be the worst one of your life. The light is now on.{cr}")
ShowRoomDescription
global.ohere = false
return (true)
}
}
// else if (global.PRSO = light and (cmd = find_cmd or cmd = follow_cmd or cmd = what_cmd or cmd = where_cmd or cmd = walk_to_cmd or cmd = what_about_cmd)) {
// return (false)
// }
return (false)
</function>
<function name="GlobalRoomF" parameters="cmd, var" type="boolean">
// This function is on line 639 in the original source code.
if (cmd = look or cmd = lookat or cmd = look_inside_cmd) {
do (look, "script")
return (true)
}
else if (cmd = through_cmd or cmd = walk_through_cmd) {
do (walk_around_cmd, "script")
return (true)
}
else if (cmd = leave_cmd or cmd = exit_object_cmd) {
DoWalk ("out")
return (true)
}
else if (cmd = walk_around_cmd) {
if (Here(Captains_Quarters)) {
do (stand, "script")
}
else {
msg ("Walking around the room reveals nothing new. To move elsewhere, just type the desired direction.")
}
return (true)
}
else if (cmd = turn_on_bedroom_light_cmd) {
// Perform(lamp_on_cmd, QuickParams("object",light))
HandleSingleCommand ("turn on light")
game.suppressturnscripts = true
return (true)
}
return (false)
</function>
<function name="StairsF" parameters="cmd, var" type="boolean">
if (cmd = climb_up_cmd or cmd = climb_foo_cmd) {
HandleSingleCommand ("up")
game.suppressturnscripts = true
return (true)
}
if (cmd = climb_down_cmd) {
HandleSingleCommand ("down")
game.suppressturnscripts = true
return (true)
}
return (false)
</function>
<function name="ObjectOfGameF" parameters="cmd, var" type="boolean">
if (cmd = what_cmd) {
msg ("That's for me to know and you to find out.")
return (true)
}
return (false)
</function>
<function name="ThirdPlanetF" parameters="cmd, var" type="boolean">
if (not global.earth_demolished) {
if (global.PRSO = third_planet) {
regex = cmd.pattern
cmddict = Populate(regex,game.pov.currentcommand)
PRSO = DictionaryItem(cmddict, global.PRSO_KEY)
PRSI = DictionaryItem(cmddict, global.PRSI_KEY)
newcmd = Replace(game.pov.currentcommand, PRSO, "ground")
HandleSingleCommand (newcmd)
game.suppressturnscripts = true
return (true)
}
else {
regex = cmd.pattern
cmddict = Populate(regex,game.pov.currentcommand)
PRSO = DictionaryItem(cmddict, global.PRSO_KEY)
PRSI = DictionaryItem(cmddict, global.PRSI_KEY)
newcmd = Replace(game.pov.currentcommand, PRSI, "ground")
HandleSingleCommand (newcmd)
game.suppressturnscripts = true
// Perform(global.PRSA, QuickParams("object1",global.PRSO,"object2",ground))
return (true)
}
}
else if (cmd = disembark_cmd) {
msg ("You did!")
return (true)
}
else if (cmd = lookat) {
msg ("It is an utterly insignificant little blue-green planet, of the sort where they probably still wear {digital_watch.alias}es.")
return (true)
}
return (false)
</function>
<function name="PeoplePseudo" parameters="cmd, var" type="boolean">
if (not Zaphod.parent = game.pov.parent) {
msg ("What people?")
return (true)
}
if (cmd = lookat) {
HandleSingleCommand ("examine zaphod")
game.suppressturnscripts = true
return (true)
}
HandleSingleCommand ("examine trillian")
game.suppressturnscripts = true
return (true)
</function>
<function name="RunTurnScripts">
if (IsGameRunning()) {
if (game.menucallback = null) {
foreach (turnscript, ObjectListSort(AllTurnScripts(), "name")) {
turnscript.printed = false
if (GetBoolean(turnscript, "enabled")) {
inscope = false
if (turnscript.parent = game or turnscript.parent = null) {
inscope = true
}
else {
if (Contains(turnscript.parent, game.pov)) {
inscope = true
}
}
if (inscope and not GetBoolean(game.pov, "commandqueueinterrupt")) {
// Check if this prints output. If so, FuckingClear!
// Add RTRUE to your turnscript after printing something!
do (turnscript, "script")
if (turnscript.printed) {
// msg ("FuckingClear")
}
turnscript.printed = false
}
}
}
}
}
</function>
<function name="AddDescriptionLine" parameters="desc, line" type="string"><![CDATA[
if (LengthOf(line) > 0) {
if (LengthOf(desc) > 0) {
// Log ("AddDescriptionLine: adding shit itself!")
// Log (game.pov.parent.name)
// Log ("desc: " + JSSafe(desc))
msg (desc)
desc = ""
}
desc = desc + line
}
return (desc)
]]></function>
<function name="OnEnterRoom" parameters="oldRoom"><![CDATA[
game.displayroomdescriptiononstart = false
if (IsDefined("oldRoom")) {
if (oldRoom <> null) {
if (game.clearscreenonroomenter) {
ClearScreen
if (not game.currentexitmessage = null) {
msg (game.currentexitmessage)
game.currentexitmessage = null
}
}
if (HasScript(oldRoom, "onexit")) {
do (oldRoom, "onexit")
}
}
}
on ready {
if ((not GetBoolean(game.pov.parent, "visited")) and HasScript(game.pov.parent, "beforefirstenter")) {
do (game.pov.parent, "beforefirstenter")
}
on ready {
if (HasScript(game.pov.parent, "beforeenter")) {
do (game.pov.parent, "beforeenter")
}
on ready {
if (game.gridmap) {
Grid_CalculateMapCoordinates (game.pov.parent, game.pov)
Grid_DrawPlayerInRoom (game.pov.parent)
}
if (IsDefined("oldRoom")) {
if (oldRoom <> null and game.changeroom_newline and not game.command_newline) {
// msg("{hr}what the fuck?{hr}")
// msg ("")
}
}
JS.updateLocation (CapFirst(GetDisplayName(game.pov.parent)))
roomFrameExists = false
if (HasString(game.pov.parent, "picture")) {
if (LengthOf(game.pov.parent.picture) > 0) {
roomFrameExists = true
SetFramePicture (game.pov.parent.picture)
}
}
if (game.clearframe and not roomFrameExists) {
ClearFramePicture
}
if (game.showdescriptiononenter) {
ShowRoomDescription
}
if (HasScript( game, "roomenter")) {
do (game, "roomenter")
}
on ready {
if ((not GetBoolean(game.pov.parent, "visited")) and HasScript(game.pov.parent, "firstenter")) {
do (game.pov.parent, "firstenter")
}
on ready {
if (HasScript(game.pov.parent, "enter")) {
do (game.pov.parent, "enter")
}
}
set (game.pov.parent, "visited", true)
}
}
}
}
]]></function>
<function name="ResolveNameFromList" parameters="variable, value, objtype, scope, secondaryscope" type="object"><![CDATA[
value = Trim(LCase(value))
fullmatches = NewObjectList()
partialmatches = NewObjectList()
foreach (obj, scope) {
// name = LCase(GetDisplayAlias(obj))
// CompareNames (name, value, obj, fullmatches, partialmatches)
if (obj.alt <> null) {
foreach (altname, obj.alt) {
CompareNames (LCase(altname), value, obj, fullmatches, partialmatches)
}
}
}
// allow referring to objects from the previous command by gender or article
// if (objtype = "object" and game.lastobjects <> null) {
// foreach (obj, game.lastobjects) {
// CompareNames (LCase(obj.article), value, obj, fullmatches, partialmatches)
// CompareNames (LCase(obj.gender), value, obj, fullmatches, partialmatches)
// }
// }
if (objtype = "object" and global.parser_pronouns <> null) {
if (DictionaryContains(global.parser_pronouns,value) and not DictionaryItem(global.parser_pronouns,value) = "") {
obj = DictionaryItem(global.parser_pronouns,value)
object = GetObject(obj)
if (IsDefined("object")) {
// msg ("(" + GetDisplayAlias(object) + ")")
CompareNames (value, value, object, fullmatches, partialmatches)
}
}
}
// Also check the secondary scope, but only if we have not found anything yet
if (ListCount(fullmatches) = 0 and ListCount(partialmatches) = 0 and not secondaryscope = null) {
foreach (obj, secondaryscope) {
name = LCase(GetDisplayAlias(obj))
CompareNames (name, value, obj, fullmatches, partialmatches)
if (obj.alt <> null) {
foreach (altname, obj.alt) {
CompareNames (LCase(altname), value, obj, fullmatches, partialmatches)
}
}
}
}
if (ListCount(fullmatches) = 1) {
return (ListItem(fullmatches, 0))
}
else if (ListCount(fullmatches) = 0 and ListCount(partialmatches) = 1) {
return (ListItem(partialmatches, 0))
}
else if (ListCount(fullmatches) + ListCount(partialmatches) = 0) {
return (null)
}
else {
game.disambiguating = true
candidates = ListCompact(ListCombine(fullmatches, partialmatches))
generic = false
// msg(candidates)
foreach (o, candidates) {
if (HasAttribute(o,"generic")) {
if (ListContains(ScopeVisible(),o.generic)) {
generic = true
generic_object = o.generic
}
}
}
// Added this line to resolve issue with new FinishTurn setup in 580
// game.disambiguating = true
if (LengthOf(variable) > 0) {
// single object command, so after showing the menu, add the object to game.pov.currentcommandresolvedelements
if (generic) {
return (generic_object)
}
else {
game.disambiguating = true
game.pov.currentcommandpendingvariable = variable
ShowMenu (DynamicTemplate("DisambiguateMenu", value), candidates, true) {
varname = game.pov.currentcommandpendingvariable
game.pov.currentcommandpendingvariable = null
if (result <> null) {
AddToResolvedNames (varname, GetObject(result))
}
}
}
}
else {
// multi-object command, so after showing the menu, add the object to the list
game.pov.currentcommandmultiobjectpending = true
if (generic) {
list add (game.pov.currentcommandpendingobjectlist, generic_object)
ResolveNextNameListItem
}
else {
game.disambiguating = true
ShowMenu (DynamicTemplate("DisambiguateMenu", value), candidates, true) {
if (result <> null) {
list add (game.pov.currentcommandpendingobjectlist, GetObject(result))
ResolveNextNameListItem
}
}
}
}
return (null)
}
]]></function>
<function name="HandleSingleCommandPattern" parameters="command, thiscommand, varlist">
if (thiscommand.name = "dont_cmd") {
global.dont_flag = true
cmd = StringDictionaryItem(varlist,"text")
HandleSingleCommand (cmd)
}
else {
// current command string
game.pov.currentcommand = command
// current command object
game.pov.currentcommandpattern = thiscommand
// string dictionary of variables, e.g. object1="book"; object2="table"
game.pov.currentcommandvarlist = varlist
// string list of variables left to resolve
game.pov.currentcommandvarlistqueue = NewStringList()
foreach (key, varlist) {
list add (game.pov.currentcommandvarlistqueue, key)
}
// dictionary of resolved elements, e.g. object1=book_object; object2=table_object
game.pov.currentcommandresolvedelements = NewDictionary()
// list of resolved elements, e.g. book_object; table_object
game.pov.currentcommandresolvedobjects = NewObjectList()
game.pov.currentcommandunresolvedobject = null
game.pov.currentcommandpendingvariable = null
ResolveNextName
}
</function>
<function name="ResolveNextName"><![CDATA[
resolvedall = false
queuetype = TypeOf(game.pov, "currentcommandvarlistqueue")
global.PRSA = game.pov.currentcommandpattern
if (queuetype = "stringlist") {
queuelength = ListCount(game.pov.currentcommandvarlistqueue)
if (queuelength > 0) {
// Pop next variable off the queue
var = StringListItem(game.pov.currentcommandvarlistqueue, 0)
if (queuelength = 1) {
game.pov.currentcommandvarlistqueue = null
}
else {
newqueue = NewStringList()
for (i, 1, queuelength - 1) {
list add (newqueue, StringListItem(game.pov.currentcommandvarlistqueue, i))
}
game.pov.currentcommandvarlistqueue = newqueue
}
// Resolve variable
value = StringDictionaryItem(game.pov.currentcommandvarlist, var)
if (value <> "") {
result = null
resolvinglist = false
// This is to resolve issue 626
if (StartsWith(var, "objectexit")) {
result = ResolveName(var, value, "exit")
}
if (result = null) {
if (not StartsWith(var, "text")) {
global.PRS_TEXT = ""
}
if (StartsWith(var, "object")) {
if (GetBoolean(game.pov.currentcommandpattern, "allow_all")) {
global.PRSA_ALLOWS_ALL = true
scope = FilterByAttribute(GetScope("object", "", "object"), "scenery", false)
allok = FilterByAttribute(FilterByAttribute(GetScope("object", "", "object"), "scenery", true), "all_ok", true)
newlist = ListCombine (scope, allok)
game.pov.currentcommandpendingobjectscope = ListExclude(newlist, FilterByAttribute(scope, "not_all", true))
game.pov.currentcommandpendingvariable = var
ResolveNameList (value, "object")
resolvinglist = true
}
else if (HasScript(game.pov.currentcommandpattern, "multipleobjects")) {
global.PRSA_ALLOWS_ALL = false
global.PRSA_ALLOWS_MULTIPLE = true
game.pov.currentcommandpendingobjectlist = NewObjectList()
game.pov.currentcommandpendingvariable = var
do (game.pov.currentcommandpattern, "multipleobjects")
ResolveNameList (value, "object")
resolvinglist = true
}
else {
global.PRSA_ALLOWS_ALL = false
global.PRSA_ALLOWS_MULTIPLE = false
result = ResolveName(var, value, "object")
}
}
else if (StartsWith(var, "exit")) {
result = ResolveName(var, value, "exit")
}
else if (StartsWith(var, "text")) {
result = StringDictionaryItem(game.pov.currentcommandvarlist, var)
global.PRS_TEXT = result
}
else {
error ("Unhandled command variable '" + var + "' - command variable names must begin with 'object', 'exit' or 'text'")
}
}
// at this point, ResolveName has returned - either an object name, unresolved, or pending
if (result = null) {
if ((not resolvinglist) and LengthOf(GetString(game.pov, "currentcommandpendingvariable")) = 0) {
global.dont_flag = false
UnresolvedCommand (value, var)
}
}
else {
AddToResolvedNames (var, result)
}
}
else {
ResolveNextName
}
}
else {
resolvedall = true
}
}
else if (queuetype = "null") {
resolvedall = true
}
else {
error ("Invalid queue type")
}
if (resolvedall) {
// All the objects have been resolved, so now we can actually do the command
// TO DO: game.lastobjects should be game.pov.lastobjects
game.lastobjects = game.pov.currentcommandresolvedobjects
global.PRSA_IS_MULTIPLE = true
if (not DictionaryContains(game.pov.currentcommandresolvedelements, "multiple")) {
dictionary add (game.pov.currentcommandresolvedelements, "multiple", false)
global.PRSA_IS_MULTIPLE = false
}
if (not GetBoolean(game.pov.currentcommandpattern, "isundo")) {
if (LengthOf(game.pov.currentcommand) > 0) {
start transaction (game.pov.currentcommand)
}
}
if (not GetBoolean(game.pov.currentcommandpattern, "isoops")) {
// TO DO: game.unresolved* should be game.pov.unresolved*
game.unresolvedcommand = null
game.unresolvedcommandvarlist = null
game.unresolvedcommandkey = null
}
objFound = false
obj = ""
if (DictionaryContains(game.pov.currentcommandresolvedelements, "object")) {
game.text_processor_this = ObjectDictionaryItem(game.pov.currentcommandresolvedelements, "object")
objFound = true
obj = DictionaryItem(game.pov.currentcommandresolvedelements, "object")
global.PRSO = obj
global.PRSO_KEY = "object"
global.PRSI = null_object
}
else if (DictionaryContains(game.pov.currentcommandresolvedelements, "object1")) {
game.text_processor_this = ObjectDictionaryItem(game.pov.currentcommandresolvedelements, "object1")
objFound = true
obj = DictionaryItem(game.pov.currentcommandresolvedelements, "object1")
obj2 = DictionaryItem(game.pov.currentcommandresolvedelements, "object2")
global.PRSO = obj
global.PRSO_KEY = "object1"
global.PRSI = obj2
global.PRSI_KEY = "object2"
}
else {
global.PRSO = null_object
global.PRSO_KEY = ""
global.PRSI = null_object
global.PRSI_KEY = ""
}
if (DictionaryContains(game.pov.currentcommandresolvedelements, "exit")) {
global.PRSO = ObjectDictionaryItem(game.pov.currentcommandresolvedelements, "exit")
global.PRS_DIRECTION = global.PRSO.alias
}
else {
global.PRS_DIRECTION = ""
}
if (HasScript(game.pov.currentcommandpattern, "script")) {
handled = false
// This is the bit that actually runs the commands
if (global.dont_flag) {
DontF (game.pov.currentcommandpattern, game.pov.currentcommandresolvedelements)
handled = true
}
else if (objFound) {
// msg(TypeOf(obj))
if (IsDefined("obj2")) {
if (not TypeOf (obj2) = "object") {
if (ListCount(obj2) > 1) {
// Uh... Just let it go to the default.
}
else {
obj2 = obj2[0]
}
}
if (HasFlag(obj2,"unimportant")) {
handled = true
UnimportantThingF
}
else if (HasDelegateImplementation(obj2,"action")) {
Log (obj2.name + " has action!")
handled = RunDelegateFunction(obj2,"action", game.pov.currentcommandpattern, game.pov.currentcommandresolvedelements)
}
}
if (not handled and TypeOf(obj) = "objectlist") {
// msg("multiple")
mhandled = 0
foreach (o, obj) {
bool = false
if (HasFlag(o, "unimportant")) {
if (ListCount(obj)>1) {
Tell (GetDisplayAlias(o) + ": ")
}
else if (DictionaryContains (game.pov.currentcommandvarlist, "object")) {
if (DictionaryItem (game.pov.currentcommandvarlist, "object") = "all") {
Tell (GetDisplayAlias(o) + ": ")
}
}
else if (DictionaryContains (game.pov.currentcommandvarlist, "object1")) {
if (DictionaryItem (game.pov.currentcommandvarlist, "object1") = "all") {
Tell (GetDisplayAlias(o) + ": ")
}
}
UnimportantThingF
// handled = true
mhandled = mhandled + 1
bool = true
}
else if (HasDelegateImplementation(o,"action")) {
// msg ("ResolveNextName found 'action': " + o)
Log (o.name + " has action.")
// enteredobj = DictionaryItem(game.pov.currentcommandvarlist,"object")
if (DictionaryContains (game.pov.currentcommandvarlist, "object")) {
enteredobj = DictionaryItem(game.pov.currentcommandvarlist,"object")
}
else if (DictionaryContains (game.pov.currentcommandvarlist, "object1")) {
enteredobj = DictionaryItem(game.pov.currentcommandvarlist,"object1")
}
if (ListCount(obj)>1 or enteredobj = "all") {
Tell (GetDisplayAlias(o) + ": ")
}
thishandled = RunDelegateFunction(o,"action", game.pov.currentcommandpattern, game.pov.currentcommandresolvedelements)
if (thishandled) {
mhandled = mhandled + 1
bool = true
}
}
else {
dict = game.pov.currentcommandresolvedelements
// msg (dict)
// msg (global.PRSO_KEY)
objlist = NewObjectList()
list add (objlist, o)
// msg (objlist)
DictionaryAdd (dict, global.PRSO_KEY, objlist)
do (game.pov.currentcommandpattern, "script", dict)
mhandled = mhandled + 1
bool = true
}
if (ListCount(obj) = mhandled) {
handled = true
}
}
}
else if (not handled and HasDelegateImplementation(obj,"action")) {
// msg ("ResolveNextName found 'action': " + obj)
Log (obj.name + " has action.")
handled = RunDelegateFunction(obj,"action", game.pov.currentcommandpattern, game.pov.currentcommandresolvedelements)
}
}
if (not handled) {
do (game.pov.currentcommandpattern, "script", game.pov.currentcommandresolvedelements)
}
}
//
// Setting game.runturnscripts to true to run turn scripts after ShowMenu , show menu, ask, or Ask.
// This works in conjuction with FinishTurn, which has also been modified as of Quest 5.8.
// - KV, 2018/05/25
global.PRS_VAR = game.pov.currentcommandresolvedelements
game.runturnscripts = true
FinishTurn
// MaintainPronouns
HandleNextCommandQueueItem
}
]]></function>
<function name="HandleNextCommandQueueItem"><![CDATA[
if (GetBoolean(game.pov, "commandqueueinterrupt")) {
}
else if (TypeOf(game.pov, "commandqueue") = "stringlist") {
queuelength = ListCount(game.pov.commandqueue)
if (queuelength > 0) {
thiscommand = Trim(StringListItem(game.pov.commandqueue, 0))
if (queuelength = 1) {
game.pov.commandqueue = null
}
else {
newqueue = NewStringList()
for (i, 1, queuelength - 1) {
list add (newqueue, StringListItem(game.pov.commandqueue, i))
}
game.pov.commandqueue = newqueue
}
if (LengthOf(thiscommand) > 0) {
msg ("")
HandleSingleCommand (thiscommand)
}
else {
HandleNextCommandQueueItem
}
}
}
set (game.pov, "commandqueueinterrupt", false)
]]></function>
<function name="GetRoomDescription" type="string"><![CDATA[
fulldesc = ""
if (CheckDarkness() and not game.hint_mode) {
if (HasString(game.pov.parent, "darkroomdescription")) {
if (LengthOf(game.pov.parent.darkroomdescription) > 0) {
fulldesc = game.pov.parent.darkroomdescription
}
}
// Added by The Pixie to correct what appears to be a bug
if (fulldesc = "") {
fulldesc = DynamicTemplate("LookAtDarkness", game.pov.parent)
}
}
else {
if (HasString(game.pov.parent, "description")) {
if (LengthOf(game.pov.parent.description) > 0) {
fulldesc = game.pov.parent.description
}
}
}
if (game.appendobjectdescription) {
foreach (val, ScopeVisibleNotHeldForRoom(game.pov.parent)) {
if (HasString(val, "inroomdescription")) {
if (LengthOf(val.inroomdescription) > 0 and val <> game.pov) {
// msg ("GetRoomDescription adding " + val.name + ": inroomdescription . . .")
fulldesc = fulldesc + " " + val.inroomdescription
}
}
}
}
return (Trim(fulldesc))
]]></function>
<function name="ShowRoomDescription"><![CDATA[
isDark = CheckDarkness()
if (isDark and not game.hint_mode) {
descriptionfield = "darkroomdescription"
}
else {
descriptionfield = "description"
}
if (game.autodescription) {
desc = ""
for (i, 1, 4) {
if (i = game.autodescription_youarein) {
if (isDark and not game.hint_mode) {
// Do nothing. (No room name printed.)
}
else {
desc = AddDescriptionLine (desc, CapFirst(GetDisplayName(game.pov.parent)))
}
if (game.autodescription_youarein_newline) {
msg (desc + "<br/>")
desc = ""
}
}
if (i = game.autodescription_youcansee) {
// objects = FormatObjectList(game.pov.parent.objectslistprefix, GetNonTransparentParent(game.pov.parent), Template("And"), ".")
// desc = AddDescriptionLine(desc, objects)
objects = ScopeVisibleNotHeldNotSceneryForRoom(GetNonTransparentParent(game.pov.parent))
if (ListCount(objects) > 0) {
desc = ""
s = ""
if (global.in_something) {
obj = global.inside_of
if (IsDefined("obj")) {
s = " (outside " + GetDisplayName(obj) + ")"
}
}
objcount = ListCount(objects)
foreach (object, objects) {
if (not objcount = ListCount(objects)) {
desc = desc + "<br/>"
}
desc = desc + "There is " + GetDisplayName(object) + " here." + s
objcount = objcount - 1
}
}
if (game.autodescription_youcansee_newline) {
// msg (desc + "<br/>")
msg (desc)
desc = ""
}
}
if (i = game.autodescription_youcango) {
exits = FormatExitList(game.pov.parent.exitslistprefix, GetExitsList(), Template("Or"), ".")
desc = AddDescriptionLine(desc, exits)
if (game.autodescription_youcango_newline) {
msg (desc + "<br/>")
desc = ""
}
}
if (i = game.autodescription_description) {
if (HasScript(game.pov.parent, descriptionfield)) {
// msg("HasScript(game.pov.parent, descriptionfield)")
if (LengthOf(desc) > 0) {
msg (desc)
// msg (desc)
desc = ""
}
// msg("ShowRoomDescription about to do(game.pov.parent, descriptionfield)...")
do (game.pov.parent, descriptionfield)
// msg("ShowRoomDescription (game.pov.parent, descriptionfield): Done.")
if (game.appendobjectdescription) {
// msg("ShowRoomDescription: appendobjectdescription...")
// msg(ScopeVisibleNotHeld())
// valcount = ListCount(ScopeVisibleNotHeld())
printedsomething = false
foreach (val, ScopeVisibleNotHeld()) {
if (HasString(val, "inroomdescription")) {
if (LengthOf(val.inroomdescription) > 0 and val <> game.pov) {
// msg ("ShowRoomDescription: adding " + val.name + ": inroomdescription . . .")
desc = ProcessText(val.inroomdescription)
// msg("set desc")
if (not desc = "") {
Tell (desc)
printedsomething = true
// msg(desc)
// msg("Printed desc")
desc = ""
}
}
}
}
if (printedsomething) {
msg ("")
}
// msg (desc)
}
if (game.autodescription_description_newline) {
// msg ("")
}
}
else {
desc = AddDescriptionLine(desc, GetRoomDescription())
if (game.autodescription_description_newline) {
// msg (desc + "<br/>")
msg (desc)
desc = ""
}
}
}
}
if (LengthOf(desc) > 0) {
msg (desc)
}
}
else {
if (HasScript(game.pov.parent, descriptionfield)) {
do (game.pov.parent, descriptionfield)
if (game.appendobjectdescription) {
foreach (val, ScopeVisibleNotHeld()) {
if (HasString(val, "inroomdescription")) {
if (LengthOf(val.inroomdescription) > 0 and val <> game.pov) {
fulldesc = val.inroomdescription
}
}
}
msg (fulldesc)
}
}
else {
fulldesc = GetRoomDescription()
if (LengthOf(fulldesc) > 0) {
msg (fulldesc)
}
}
}
]]></function>
<function name="GetDisplayAlias" parameters="obj" type="string">
if (CheckDarkness() and GetBoolean(obj, "isroom")) {
result = "Darkness"
}
else if (HasString(obj, "alias")) {
if (not Trim(obj.alias) = "") {
result = obj.alias
}
}
else {
result = obj.name
}
if (GetBoolean(obj, "isroom") and not CheckDarkness()) {
if (global.inside_of = Poetry_Appreciation_Chair) {
result = result + ", in the chair"
}
else if (global.in_something) {
result = result + ", in " + GetDisplayName(global.inside_of)
}
else if (global.on_something) {
}
else if (global.lying_down) {
result = result + ", lying down"
}
}
return (result)
</function>
<function name="Log" parameters="text">
// request (Log, text)
// Replacing double quotes with 2 single quotes
text = Replace(text, "\"", "''")
request (Log, text)
</function>
<function name="HandleSingleCommand" parameters="command"><![CDATA[
if (LCase(command) = "again" or LCase(command) = "g") {
// First handle AGAIN
if (not game.pov.currentcommand = null) {
HandleSingleCommand (game.pov.currentcommand)
}
else {
msg ("There is nothing to repeat.")
}
}
else {
if (StartsWith(LCase(command), "but what") or StartsWith(LCase(command), "but ford") or StartsWith(LCase(command), "but prosser")) {
Log ("Removing 'but '.")
command = Replace(command, "but ", "")
}
// Check through all commands for any that match
candidates = NewObjectList()
foreach (cmd, ScopeCommands()) {
if (IsRegexMatch(cmd.pattern, command, cmd.name)) {
list add (candidates, cmd)
}
}
maxstrength = -1
thiscommand = null
// Pick the best match
foreach (candidate, candidates) {
strength = GetMatchStrength(candidate.pattern, command, candidate.name)
// favour commands defined later, so an author can override a library command...
if (strength >= maxstrength) {
// ... except if the command defined later (candidate) has no parent, and the current best
// match (thiscommand) does have a parent. We want to favour any commands defined in rooms
// over global candidates.
skip = false
if (thiscommand <> null) {
if (thiscommand.parent <> null and candidate.parent = null) {
skip = true
}
}
if (not skip) {
thiscommand = candidate
maxstrength = strength
}
}
}
if (thiscommand = null) {
if (HasScript(game, "unresolvedcommandhandler")) {
params = NewDictionary()
dictionary add (params, "command", command)
do (game, "unresolvedcommandhandler", params)
}
else {
// Infocom style mod
if (CheckDarkness()) {
msg ("It's too dark to see!")
}
else {
msg ("That sentence isn't one I recognise.")
}
}
HandleNextCommandQueueItem
}
else {
varlist = Populate(thiscommand.pattern, command, thiscommand.name)
HandleSingleCommandPattern (command, thiscommand, varlist)
}
}
]]></function>
<function name="UnresolvedCommand" parameters="objectname, varname"><![CDATA[
// TO DO: Update names below, we don't need these two variables
unresolvedobject = objectname
unresolvedkey = varname
global.dont_flag = false
if (HasString(game.pov.currentcommandpattern, "unresolved")) {
if (ListCount(game.pov.currentcommandvarlist) > 1) {
msg (game.pov.currentcommandpattern.unresolved + " (" + unresolvedobject + ")")
}
else {
msg (game.pov.currentcommandpattern.unresolved)
}
}
else if (HasScript(game.pov.currentcommandpattern, "unresolved")) {
do (game.pov.currentcommandpattern, "unresolved", QuickParams("object", unresolvedobject, "key", unresolvedkey))
}
else {
// Infocom style mod
if (game.pov.parent.dark) {
msg ("It's too dark to see!")
}
else {
handled = ObjectExists(unresolvedobject)
if (handled and not unresolvedobject = "all") {
msg ("You can't see any " + unresolvedobject + " here!")
}
else {
msg ("I don't understand \"" + unresolvedobject + "\".")
}
}
}
game.unresolvedcommand = game.pov.currentcommandpattern
game.unresolvedcommandvarlist = game.pov.currentcommandvarlist
game.unresolvedcommandkey = unresolvedkey
]]></function>
<function name="HandleCommand" parameters="command, metadata"><![CDATA[
handled = false
if (game.menucallback <> null) {
if (HandleMenuTextResponse(command)) {
handled = true
}
else {
if (game.menuallowcancel) {
ClearMenu
}
else {
handled = true
}
}
}
if (not handled) {
StartTurnOutputSection
if (StartsWith (command, "*")) {
// Modified by KV to bypass turn scripts and turn counts, and to print "Noted."
game.suppressturnscripts = true
msg ("")
msg (SafeXML (command))
msg ("Noted.")
// Added for Quest 5.8 - KV
FinishTurn
}
else {
shownlink = false
if (game.echocommand) {
if (metadata <> null and game.enablehyperlinks and game.echohyperlinks) {
foreach (key, metadata) {
if (EndsWith(command, key)) {
objectname = StringDictionaryItem(metadata, key)
object = GetObject(objectname)
if (object <> null) {
msg ("")
msg ("&gt; " + Left(command, LengthOf(command) - LengthOf(key)) + "{object:" + object.name + "}")
shownlink = true
}
}
}
}
if (not shownlink) {
msg ("")
OutputTextRaw ("&gt; " + SafeXML(command))
}
}
if (game.command_newline) {
msg ("")
}
game.pov.commandmetadata = metadata
if (game.multiplecommands) {
commands = Split(command, ".")
if (ListCount(commands) = 1) {
game.pov.commandqueue = null
HandleSingleCommand (Trim(command))
}
else {
game.pov.commandqueue = commands
HandleNextCommandQueueItem
}
}
else {
game.pov.commandqueue = null
HandleSingleCommand (Trim(command))
}
}
}
]]></function>
<function name="UpdateContentsInLists"><![CDATA[
foreach (o, ListExclude(ScopeVisible(),game.pov)) {
if (not HasAttribute(o, "listalias")) {
o.listalias = GetDisplayAlias(o)
}
o.listalias = Replace(o.listalias,"&nbsp;","")
containers = ListExclude(ListParents(o), game.pov)
containers = ListExclude(containers, ListParents(game.pov))
foreach (c, containers) {
o.listalias = "&nbsp;&nbsp;" + o.listalias
}
}
]]></function>
<function name="PrettyInventory">
msg ("You have:")
if (global.headache) {
msg (Spaces(1) + "a splitting headache")
}
if (no_tea.parent = game.pov) {
msg (Spaces(1) + "no tea")
}
stuff = GetDirectChildren(game.pov)
stuff = ListExclude(stuff, hangover)
stuff = ListExclude (stuff, no_tea)
indents = 1
foreach (o, stuff) {
worn = ""
if (GetBoolean(o, "worn")) {
worn = " (being worn)"
}
msg (Spaces(indents) + GetDisplayName(o) + worn)
TellContents (o, indents)
}
</function>
<function name="TellContents" parameters="o, indents"><![CDATA[
if (GetBoolean (o, "feature_container") and (GetBoolean(o, "isopen") or GetBoolean (o, "transparent"))) {
stuff = GetDirectChildren (o)
stuff = ListExclude(stuff, FilterByAttribute (stuff, "scenery", true))
stuff = FilterByAttribute (stuff, "visible", true)
if (ListCount (stuff) > 0) {
msg (Spaces(indents) + "It looks like " + GetDefiniteName(o) + " contains:")
indents = indents + 1
foreach (obj, stuff) {
msg (Spaces(indents) + GetDisplayName(obj))
TellContents (obj, indents)
}
}
}
]]></function>
<function name="CompareNames" parameters="name, value, obj, fullmatches, partialmatches">
if (LCase(name) = LCase(value)) {
if (not ListContains(fullmatches, obj)) {
list add (fullmatches, obj)
}
}
</function>
<function name="ObjectExists" parameters="o" type="boolean">
handled = false
foreach (obj, AllObjects()) {
if (obj.name = o) {
handled = true
}
if (not handled and HasAttribute(obj, "alt")) {
foreach (altname, obj.alt) {
if (altname = o) {
handled = true
}
}
}
if (not handled and HasAttribute(obj, "adjectives")) {
foreach (adjective, obj.adjectives) {
if (adjective = o) {
handled = true
}
}
}
}
return (handled)
</function>
<function name="ActionExists" parameters="s" type="boolean">
exists = false
foreach (cmd, AllCommands()) {
if (HasAttribute(cmd,"synonyms")) {
list = cmd.synonyms
if (TypeOf(list) = "string") {
list = Split(list, " ")
}
foreach (syn, list) {
if (LCase(syn) = LCase(s)) {
exists = true
}
}
}
else {
Log (cmd + " - no synonyms!")
}
}
return (exists)
</function>
<function name="MakeWayFor"><![CDATA[
msg (" a " + fleet.alias + " unexpectedly arrives and demolishes the Earth to make way for a new hyperspace bypass.<br/>")
]]></function>
<function name="Finish">
game.finishing = true
LeaveEarth
Score
</function>
<function name="Score"><![CDATA[
JS.eval ("$('#txtCommandPrompt').html('We are about to give you your score. Put on your peril-sensitive sunglasses now. (Hit RETURN or ENTER when ready.)>');$('#txtCommand').width(null);")
wait {
JS.eval ("$('#txtCommandPrompt').html('>');")
msg ("Your score is {game.score} of a possible 400, in {game.turncount} turn{if game.turncount<>1:s}.<br/>")
if (HasAttribute(game,"finishing")) {
QuitOrRestart
}
}
]]></function>
<function name="QuitOrRestart"><![CDATA[
msg ("Would you like to restart, or end this session of the game?<br/>(Type RESTART or QUIT):")
get input {
result = LCase(Trim(result))
if (result = "restart") {
do (restart, "script")
}
else if (result = "quit") {
do (quit, "script")
}
else {
QuitOrRestart
}
}
]]></function>
<function name="JigsUp" parameters="desc"><![CDATA[
msg (desc)
if (GetBoolean(game.pov,"dreaming")) {
// TODO
}
else {
msg (" **** You have died ****<br/><br/>")
LeaveEarth
Finish
}
]]></function>
<function name="SetUpITurnscripts"><![CDATA[
foreach (turnscript, ObjectListSort(AllTurnScripts(), "name")) {
if (GetBoolean(turnscript,"istyle")) {
turnscript.turncount = 0
// turnscript.changedturncount => {
// msg ("<hr/>" + this.name + ": turncount changed to " + this.turncount + ".")
// }
turnscript.timeoutturnscript = turnscript.script
// turnscript.changedtriggerturncount => {
// msg ("<hr/>" + this.name + ": triggerturncount changed to " + this.triggerturncount + ".")
// }
SetTurnScript (turnscript) {
// msg ("Turnscript running...")
// msg ("Running: " + this)
// msg (this.turncount)
// msg (this.triggerturncount)
if (not this.triggerturncount = -1) {
this.turncount = this.turncount + 1
}
if (this.triggerturncount = -1) {
do (this, "timeoutturnscript")
}
else if (this.turncount = this.triggerturncount and not this.triggerturncount = -1) {
do (this, "timeoutturnscript")
if (this.turncount = this.triggerturncount and not this.triggerturncount = -1) {
// msg ("<hr/>Disabling: "+this)
DisableTurnScript (this)
}
}
}
}
}
]]></function>
<function name="EnableQueue" parameters="turnscript, i"><![CDATA[
turnscript.turncount = 0
if (not GetBoolean(turnscript, "enabled")) {
turnscript.enabled = true
}
// msg ("<hr/>EnableQueue: setting " + turnscript.name + " triggerturncount to " + i + ".")
turnscript.triggerturncount = i
// do (turnscript, "script")
]]></function>
<function name="FuckingClear">
global.p_cont = false
global.quote_flag = false
RFatal
</function>
<function name="RFatal">
// TODO: If multiple commands (separated by ".") are being processed, stop the process(es)!
// if (TypeOf(game.pov, "commandqueue") = "stringlist") {
// msg(game.pov.commandqueue)
// current = game.pov.commandqueue[0]
// game.pov.commandqueue = NewList()
// list add (game.pov.commandqueue, current)
// }
game.pov.commandqueueinterrupt = true
</function>
<function name="UnimportantThingF" type="boolean">
msg ("That's not important; leave it alone.")
return (true)
</function>
<function name="Tell" parameters="s">
OutputTextNoBr (s)
</function>
<function name="DoWalk" parameters="dir">
params = NewDictionary()
exit_name = GetExitByName(game.pov.parent, dir)
exit_to = GetObject(exit_name)
dictionary add (params, "exit", exit_to)
do (go, "script", params)
</function>
<function name="Perform" parameters="action, params">
Log ("PERFORM:")
Log (action.name)
do (action, "script", params)
</function>
<function name="Yes" type="boolean">
bool = false
get input {
result = LCase(Trim(result))
if (result = "y" or result = "yes") {
bool = true
}
return (bool)
}
</function>
<function name="SayOrDo" parameters="object, att">
if (HasAttribute(object,att) and not GetBoolean(object, att)) {
// Make this work like a verb.
if (HasScript(object,att)) {
do (object, att)
}
else {
msg (GetAttribute(object, att))
}
}
else {
error ("SayOrDo: error -- object: "+object+", att:"+att+"")
}
</function>
<function name="HandlePut" parameters="object1, object2">
// put object1 in/on object 2
canbedropped = true
if (HasBoolean(object1, "drop")) {
if (not object1.drop) {
canbedropped = false
}
}
if (object1.parent = object2) {
msg (DynamicTemplate("AlreadyThere", object1))
}
else if (not ListContains(ScopeInventory(), object1)) {
msg (DynamicTemplate("NotCarrying", object1))
}
else if (not canbedropped) {
if (HasString(object1,"dropmsg")) {
msg (object1.dropmsg)
}
else {
msg (DynamicTemplate("ObjectCannotBeStored", object1))
}
}
else if (not ListContains(ScopeReachable(), object1)) {
msg (BlockingMessage(object1, ""))
}
else if (not ListContains(ScopeReachable(), object2)) {
msg (BlockingMessage(object2, ""))
}
else if (not object2.container) {
msg (Template("CannotDoThat"))
}
else if (not object2.isopen) {
msg (DynamicTemplate("ObjectNotOpen", object2))
}
else if (ListContains(ListParents(object2), object1)) {
msg (Template("CannotDoThat"))
}
else if (not TestDropGlobal(object1, "")) {
// Do nothing, already handled
}
else {
if (GetBoolean(object2, "hidechildren")) {
object2.hidechildren = false
}
params = NewDictionary()
dictionary add (params, "object", object1)
dictionary add (params, "destination", object2)
if (HasScript(object2, "addscript")) {
do (object2, "addscript", params)
}
else if (HasScript(object1, "drop")) {
do (object1, "drop", params)
}
else {
object1.parent = object2
msg (Template("Done"))
}
}
// must be carrying object1
// item cannot be dropped
// object1 must not be inside a closed container
// object2 must not be inside a closed container
// object2 must be an open container or surface
// object1 is inside object 2
</function>
<function name="SetGlobalObjectsToNotAll">
foreach (obj, GetDirectChildren(local_globals)) {
// obj.not_all = true
obj.scenery = true
}
foreach (obj, GetDirectChildren(global_objects)) {
// obj.not_all = true
obj.scenery = true
}
</function>
<function name="DontF" parameters="verb, data">
global.dont_flag = false
game.pov.currentcommand = "don't " + game.pov.currentcommand
// msg (verb)
// msg (data)
switch (verb.name) {
case ("panic_cmd") {
if (RandomChance(50)) {
s = "Very clever. It looks like there's a lot you should be panicking about."
}
else {
s = "Why not? Your position appears quite hopeless."
}
msg (s)
}
case ("look") {
msg ("TODO: Perform(close,eyes)")
global.dont_flag = false
// Perform(close,eyes)
}
case ("wait") {
msg ("Time doesn't pass...")
}
case ("take") {
msg ("Not taken.")
}
case ("listen") {
if (poetry.visible) {
global.dont_flag = false
HandleSingleCommand ("listen to poetry")
game.suppressturnscripts = true
}
else {
msg ("Not done.")
}
}
default {
msg ("Not done.")
}
}
global.dont_flag = false
</function>
<function name="FineProduct">
msg (" It bears a small label which reads \"Another fine product of the " + global.scc + ".\"")
</function>
<function name="Idiot" type="boolean">
msg ("Idiot doesn't work. Add this code to the code that calls this function.")
bool = false
get input {
if (LCase(Trim(result)) = "idiot") {
bool = true
}
return (bool)
}
</function>
<function name="PreBoard" parameters="object" type="boolean">
bool = false
// if bool is returned true in ZIL, the game will stop the action
if (global.in_front_flag) {
// Perform (stand_before_cmd, global.PRS_VAR)
HandleSingleCommand ("stand before " + object.alt[0])
game.suppressturnscripts = true
// in this port, we don't need to stop the action that way (and we can't, without extra coding)
// bool = true
}
else if (game.pov.parent = object) {
msg (global.look_around)
}
else if (global.in_something and global.inside_of = object) {
msg (global.look_around)
}
return (bool)
</function>
<function name="VBoard" parameters="object">
if (HasBoolean(object,"vehbit")) {
msg ("You are now in " + GetDisplayName(object) + ".")
// MoveObject(game.pov,object)
global.in_something = true
global.inside_of = object
if (not global.inside_of = speedboat) {
global.lying_down = true
}
// no need to call enter script, as Quest already handles that
global.ohere = false
}
else {
msg ("You can't get into " + GetDisplayName(object) + "!")
}
</function>
<function name="InHeart" parameters="obj" type="boolean">
bool = false
switch (obj.parent) {
case (Entry_Bay,Fore_Corridor,Aft_Corridor,Galley,Bridge,Engine_Room,Hatchway,Pantry,Access_Space) {
bool = true
}
}
return (bool)
</function>
<function name="Factor" parameters="s">
Tell (" at an improbability factor of 2 to the " + s + "th power to 1 against.")
</function>
<function name="ProduceGibberish" parameters="n"><![CDATA[
global.super_counter = 0
while (not global.super_counter = n) {
global.super_counter = global.super_counter + 1
global.gibberish_counter = 0
while (global.gibberish_counter < 11) {
global.gibberish_counter = global.gibberish_counter + 1
Tell (PickOneString(global.gibberish))
if (global.gibberish_counter = 10) {
if (not global.super_counter = n) {
Tell (" o")
// return (null)
}
}
if (global.super_counter = n) {
Tell (".\"")
return (null)
}
}
}
]]></function>
<function name="ButThatMan" parameters="s">
Tell ("Pointing toward Prosser, " + s + ", \"But that man ")
if (global.house_demolished) {
Tell ("just knocked")
}
else {
Tell ("wants to knock")
}
Tell (" my house down!\"")
</function>
<function name="Cushion">
Tell (" cushion your system against the coming shock of the" + global.beam + ".")
</function>
<function name="Private" parameters="string">
msg ("You can't. It's not yours. It's " + string + "'s and it's private.")
</function>
<function name="VThrow" parameters="data">
PRSO = DictionaryItem(data,"PRSO")
PRSI = DictionaryItem(data,"PRSI")
if (game.pov.parent = Hold) {
MoveObject (PRSO, local_globals)
Tell (global.robot_flies_in + "collects")
Tell (GetDisplayName(PRSO))
msg (" in midair, and flashes away.")
}
else if (game.pov.parent = Maze or game.pov.parent = Access_Space) {
HandleSingleCommand ("drop " + PRSO.alt[0])
game.suppressturnscripts = true
}
else if (IsDefined("PRSI")) {
MoveObjectHere (PRSO)
msg ("You missed.")
}
else {
MoveObjectHere (PRSO)
msg ("Thrown.")
}
</function>
<function name="HackHack" parameters="str, object">
msg (str + GetDisplayName(object) + PickOneString(global.ho_hum))
</function>
<function name="SetUpTextProcessorStuff"><![CDATA[
game.textprocessorcommands = game.textprocessorcommands
scr => {
game.textprocessorcommandresult = "<br/>"
}
dictionary add (game.textprocessorcommands, "br", scr)
dictionary add (game.textprocessorcommands, "cr", scr)
dictionary add (game.textprocessorcommands, "line break", scr)
dictionary add (game.textprocessorcommands, "crlf", scr)
scr => {
game.textprocessorcommandresult = "<hr/>"
}
dictionary add (game.textprocessorcommands, "hr", scr)
scr => {
game.textprocessorcommandresult = "<br/><br/>"
}
dictionary add (game.textprocessorcommands, "paragraph break", scr)
// Add {global:}
// 1234567^ this will be the 8th character
// So, Mid(section,8) will pull the text after "global:"
// This will allow me to print the "global strings" more easily.
scr => {
s = Mid(section,8)
game.textprocessorcommandresult = GetString(global,s)
}
dictionary add (game.textprocessorcommands, "global", scr)
]]></function>
<function name="SetUpObjectAlts"><![CDATA[
objects = AllObjects()
// game.false_objects = objects
// objects = ListExclude(objects, FilterByAttribute(objects,"isroom",true))
// game.false_objects1 = objects
// objects = ListExclude(objects, FilterByAttribute(objects,"alt",true))
// game.false_objects2 = objects
foreach (o, objects) {
if (not HasAttribute(o, "alt")) {
o.alt = NewStringList()
if (not HasAttribute(o, "alias")) {
o.alias = o.name
}
}
hassyns = false
if (HasAttribute(o, "synonym")) {
syns = Split(Trim(o.synonym), " ")
if (ListCount(syns) > 0) {
hassyns = true
foreach (syn, syns) {
list add (o.alt, syn)
}
}
}
if (HasAttribute(o,"adjective")) {
if (ListCount(Split(Trim(o.adjective), " ")) > 0 and hassyns) {
adjs = Split(Trim(o.adjective), " ")
syns = Split(Trim(o.synonym), " ")
foreach (syn, syns) {
foreach (adj, adjs) {
list add (o.alt, adj + " " + syn)
}
}
}
}
o.alt = ListCompact(o.alt)
}
exits = AllExits()
foreach (exit, exits) {
alt = ListCompact(exit.alt)
list add (alt, exit.alias)
exit.alt = alt
}
]]></function>
<function name="Includes" parameters="s, string" type="boolean"><![CDATA[
return (Instr(s,string) > 0)
]]></function>
<function name="Here" parameters="object" type="boolean">
return (game.pov.parent = object)
</function>
<function name="In" parameters="object1, object2" type="boolean">
return (object1.parent = object2)
</function>
<function name="MaintainPronouns">
dict = global.parser_pronouns
gone = false
list = NewList()
foreach (key, dict) {
list add (list, key)
}
foreach (key, list) {
o = DictionaryItem(dict,key)
if (not o = "") {
obj = GetObject(o)
}
if (not IsDefined("obj")) {
DictionaryAdd (dict, key, "")
game.lastobjects = NewObjectList()
}
else if (obj.parent = nowhere) {
DictionaryAdd (dict, key, "")
game.lastobjects = NewObjectList()
}
}
</function>
<function name="OutOfFirst" parameters="vehicle">
msg ("You'll have to get out of the " + GetDisplayAlias(vehicle) + " first.")
</function>
<function name="TellMeHow">
msg ("You must tell me how to do that to " + GetDisplayName(global.prso) + ".")
</function>
<function name="Random" parameters="int" type="int">
return (RandomInt(1,int))
</function>
<function name="Prob" parameters="int" type="int">
return (GetRandomChance(int))
</function>
<function name="ThisIsIt" parameters="object">
game.lastobjects = NewObjectList()
list add (game.lastobjects, object)
DictionaryAdd (global.parser_pronouns, "it", object.name)
</function>
<function name="HasFlag" parameters="object, flag" type="boolean">
return (GetBoolean (object, flag))
</function>
<function name="FClear" parameters="object, flag">
// Log ("FClear: clearing flag ("+flag+") from "+object.name)
set (object, flag, false)
// Log ("FClear: updated flags for "+object.name+": "+object.flags)
switch (flag) {
case ("ndescbit") {
object.scenery = false
}
case ("openbit") {
object.isopen = false
}
case ("invisible") {
object.visible = true
}
case ("takebit") {
if (not HasScript(object, "take") and not HasString(object, "take")) {
object.take = false
}
}
case ("trytakebit") {
object.trytake = false
}
case ("lockedbit") {
object.locked = false
}
case ("wornbit") {
RemoveGarment (object)
}
case ("lightbit") {
object.switchedon = false
}
case ("onbit") {
object.switchedon = false
if (GetBoolean(object, "isroom")) {
object.dark = true
}
}
case ("nallbit") {
object.not_all = false
}
case ("touchbit") {
if (GetBoolean(object, "isroom")) {
object.visited = false
}
else {
object.handled = false
}
}
}
</function>
<function name="FSet" parameters="object, flag">
// Log ("FSet: adding flag ("+flag+") to "+object.name)
set (object, flag, true)
// Log ("FSet: updated flags for "+object.name+": "+object.flags)
switch (flag) {
case ("ndescbit") {
object.scenery = true
}
case ("openbit") {
object.isopen = true
}
case ("invisible") {
object.visible = false
}
case ("takebit") {
if (not HasScript(object, "take") and not HasString(object, "take")) {
object.take = true
}
}
case ("trytakebit") {
object.trytake = true
}
case ("lockedbit") {
object.locked = true
}
case ("wornbit") {
WearGarment (object)
}
case ("lightbit") {
object.switchedon = true
}
case ("onbit") {
object.switchedon = true
if (GetBoolean(object, "isroom")) {
object.dark = false
}
}
case ("nallbit") {
object.not_all = true
}
case ("touchbit") {
if (GetBoolean(object, "isroom")) {
object.visited = true
}
else {
object.handled = true
}
}
}
</function>
<function name="IsFSet" parameters="object, flag" type="boolean">
return (GetBoolean (object, flag))
</function>
<function name="FixChangedSceneryBits"><![CDATA[
objects = FilterByAttribute(FilterByAttribute(AllObjects(),"scenery"),"flags")
foreach (obj, objects) {
obj.changedscenery => {
if (this.scenery and not IsFSet(this,"ndescbit")) {
FSet (this, "ndescbit")
}
else if (not this.scenery and IsFSet(this, "ndesbit")) {
Log ("changedscenery clearing ndescbit for "+this.name)
FClear (this, "ndescbit")
}
}
}
]]></function>
<function name="DoYouWantColor" parameters="result"><![CDATA[
JS.eval ("clearInterval(blinkingCursor1);$('#blinking-cursor1').remove();")
if (result = "89") {
game.defaultbackground = "#0000AA"
game.customlocationtextcolour = "#0000AA"
JS.setCss ("#status", "display:none;color:#0000AA")
JS.setCss ("#gameBorder", "background-color:#0000AA")
JS.setCss ("#color-question", "display:none")
}
ClearScreen
msg ("<center>Hitchhiker's Guide to the Galaxy{br}Part 1 - ON THE EARTH (Quest 5 Port){br}Original copyright (c) 1984 Infocom, Inc.</center>{br}{br}Quest ASL Compiler, version 5.8{br}Copyright (c) 2017-PRESENT Andy Joel{br}Copyright (c) 1998-2016 Alex Warren{br}{br}Story loading. Please wait. . .{br}312 pages allocated.")
msg ("<div id=\"blinking-cursor\">_</div>")
JS.eval ("var blinkingCursor = setInterval(function(){$('#blinking-cursor').toggle();},100);setTimeout(function(){clearInterval(blinkingCursor);},3000);")
SetTimeout (5) {
JS.uiShow ("#txtCommandDiv")
ClearScreen
JS.setCss ("#status", "display:block;")
msg ("THE HITCHHIKER'S GUIDE TO THE GALAXY{br}PART 1 - ON THE EARTH (QUEST 5 PORT){br}Infocom interactive fiction - a science fiction story{br}Original copyright (c) 1984 by Infocom, Inc. All rights reserved.{br}Release {game.version} / Serial number {game.serial_number} / Quest 5 Version 8{br}{br}{br}You wake up. The room is spinning very gently round your head. Or at least it would be if you could see it which you can't.{br}{br}It is pitch black.")
game.showdescriptiononenter = true
game.turncount = 0
JS.eval ("$('#altlocation').html('Score: " + game.score + Spaces(4) + " Moves: " + game.turncount + "');$('#blinking-cursor').remove();")
}
]]></function>
<function name="L" parameters="value1, value2" type="boolean"><![CDATA[
return (not value1 >= value2)
]]></function>
<function name="G" parameters="value1, value2" type="boolean"><![CDATA[
return (value1 > value2)
]]></function>
<function name="SetUpFlags"><![CDATA[
objects = FilterByAttribute(AllObjects(), "flags")
foreach (o, objects) {
flags = Split(o.flags, " ")
if (ListCount (flags) > 0) {
foreach (flag, flags) {
set (o, flag, true)
}
}
o.flags = null
}
]]></function>
<function name="RTRUE">
FuckingClear
game.suppressturnscripts = true
</function>
<function name="IsCmd" parameters="cmd, s" type="boolean">
return (IsRegexMatch(cmd.pattern,s))
</function>
<function name="GetPRSO" parameters="cmd, s" type="object"><![CDATA[
if (not IsCmd(cmd,s)) {
return (null)
}
params = Populate(cmd.pattern,s)
name = ""
if (DictionaryContains(params,"object")) {
name = DictionaryItem(params,"object")
}
else if (DictionaryContains(params,"object1")) {
name = DictionaryItem(params,"object1")
}
name = LCase(Trim(name))
if (name = "") {
return (null)
}
o = ResolveNameInternal("object", name, "object")
if (o <> null) {
return (o)
}
return (null)
]]></function>
<function name="GroundF" parameters="cmd, var" type="boolean">
switch (cmd) {
case (climb_foo_cmd,climb_up_cmd,climb_on_cmd,board_cmd) {
do (dig_cmd, "script")
return (true)
}
case (look_under_cmd) {
do (count_cmd, "script")
return (true)
}
case (leave_cmd) {
HandleSingleCommand ("go up")
game.suppressturnscripts = true
return (true)
}
case (lie_down_on_cmd) {
// Is this already handled?
if (global.in_bed) {
msg ("(first getting out of bed)")
HandleSingleCommand ("get up")
msg ("{br}Complete waste of time.")
return (true)
}
if (Here(Bedroom)) {
msg (PickOneString(global.wastes))
return (true)
}
do (lie, "script")
return (true)
}
case (enjoy_cmd) {
if (Here(Front_of_House) and global.lying_down) {
msg ("It occurs to you that you've never deliberately lain in any mud before and that it's actually a pleasant sort of squishy sensation. You let the mud ooze between your toes. You may be here for some time, so you may as well make the most of it.")
return (true)
}
}
}
return (false)
</function>
<function name="MobileDeviceDeath" parameters="bs"><![CDATA[
ClearScreen
s = "At an improbability factor of 2 to the 101010th power to 1 against, a Vogon constructor fleet happens to pass over "
s = s + "your insignificant little blue-green planet just as you prepare to begin this magnificent story. "
s = s + "You hear something from some sort of sound system mounted underneath one of the ships which have improbably appeared in the sky."
s = s + " It sounds a lot like, \"<i>"
Tell (s)
ProduceGibberish (2)
s = "</i> "
s = s + "<br/>Perhaps, if you weren't attempting to interact with this story using that poor imitation of the Guide "
s = s + "(which isn't possible), you could have made it to the part of the story in which you acquire the Babel fish, "
s = s + "in which case you would have understood the message, which was this:<br/><br/>"
s = s + "<h2>YOU CAN'T PLAY THIS GAME ON MOBILE!</h2>"
s = s + " **** You have died ****<br/><br/>"
msg (s)
finish
]]></function>
<function name="OnlineDeath"><![CDATA[
ClearScreen
s = "At an improbability factor of 2 to the 101010th power to 1 against, a Vogon constructor fleet happens to pass over "
s = s + "your insignificant little blue-green planet just as you prepare to begin this magnificent story. "
s = s + "You hear something from some sort of sound system mounted underneath one of the ships which have improbably appeared in the sky."
s = s + " It sounds a lot like, \"<i>"
Tell (s)
ProduceGibberish (2)
s = "</i> "
s = s + "<br/>Perhaps, if you weren't attempting to interact with this story online "
s = s + "(which isn't possible), you could have made it to the part of the story in which you acquire the Babel fish, "
s = s + "in which case you would have understood the message, which was this:<br/><br/>"
s = s + "<h2>YOU CAN'T PLAY THIS GAME ONLINE!</h2>"
s = s + " **** You have died ****<br/><br/>"
msg (s)
finish
]]></function>
<function name="OwnFeet">
msg ("You are now on your feet.")
</function>
<function name="CantSee" parameters="o">
Tell ("You can't see")
if (o.usedefaultprefix) {
Tell (" any")
}
if (o = global.PRSO) {
obj = DictionaryItem(game.pov.currentcommandvarlist, global.PRSO_KEY)
Tell (obj)
}
else {
obj = DictionaryItem(game.pov.currentcommandvarlist, global.PRSI_KEY)
Tell (obj)
}
msg (" here.")
FuckingClear
</function>
<function name="SkyF" parameters="cmd, var" type="boolean">
if (not IsFSet (game.pov.parent, "outsidebit")){
CantSee(sky)
return (true)
}
else if (fleet.parent = game.pov.parent and cmd = lookat){
msg("The sky is filled with the ships of the " + D(fleet) + "." + CR)
return (true)
}
return (false)
</function>
<walkthrough name="up and at em">
<steps type="simplestringlist">
light
stand
get gown
don it
open it
take pill
</steps>
</walkthrough>
<walkthrough name="out of house">
<steps type="simplestringlist">
light
stand
get gown
don it
open it
take pill
get all
s
get all
s
lie down
z
</steps>
</walkthrough>
<walkthrough name="pub">
<steps type="simplestringlist">
light
stand
get gown
don it
open it
take pill
get all
s
get all
s
lie down
z
z
z
z
z
z
z
s
in
</steps>
</walkthrough>
<walkthrough name="end">
<steps type="simplestringlist">
light
stand
get gown
don it
open it
take pill
get all
s
get all
s
lie down
z
z
z
z
z
z
z
s
in
buy sandwich
drink beer
g
g
out
give sandwich to dog
n
z
z
push green button
</steps>
</walkthrough>
</asl>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment