The game is defined in a single file cloak.acl, which then merges in the library definitions. Many thanks to Stuart Allen for providing the popup annotations.
#!/usr/local/jacl-1.5/bin/jacl
# -----------------------------------------------------------------------------
constant GAME_VERSION 1
# -----------------------------------------------------------------------------
{+intro
clear
centre "<h1>CLOAK OF DARKNESS</h1>"
write "<p>^^Hurrying through the rainswept July night, you're glad to see the "
write "bright lights of the Opera House. It's surprising that there aren't more "
write "people about but, hey, what do you expect from a quick port of a cheap "
write "demo game...?^^"
look
}
location foyer : foyer
short the "foyer of the Opera House"
north foyer
south bar
west cloak_room
{look
write "<p>You are standing in a spacious hall, spendidly decorated in red "
write "and gold, with glittering chandeliers overhead. The entrance from "
write "the street is to the north, and there are doorways south and west.^"
}
{movement
if destination = foyer
write "<p>You've only just arrived, and besides, the weather outside seems "
write "to be getting worse.^"
break
endif
break false
}
location cloak_room : cloak_room
east foyer
{look
write "<p>The walls of this small room were clearly once lined with hooks, "
write "though now only one remains. The exit is a door to the east.^"
}
object hook : small brass hook peg
has SURFACE
short a "small brass hook"
capacity 25
{examine
write "<p>It's just a small brass hook, "
if cloak(parent) = hook
write "with a cloak hanging on it.^"
else
write "screwed to the wall.^"
}
location bar : bar
has DARK
short the "foyer bar"
north foyer
{look
write "<p>The bar, much rougher that you'd have guessed after the opulence of the "
write "foyer to the north, is completely empty. There seems to be some sort of "
write "message scrawled in the sawdust on the floor.^"
}
{movement
if here has DARKNESS
if destination != foyer
write "<p>Blundering around in the dark isn't a good idea!^"
set bar(blundered_in) + 1
break
endif
endif
break false
}
object message : message sawdust floor
short a "scrawled message"
{read : examine
if bar(blundered_in) < 2
write "<p>The message, neatly marking in the sawdust, reads...^^"
write "<p>~You have won!~^"
points 50
execute "+game_over"
else
write "<p>The message has been carelessly trampled, making it difficult "
write "to read. You can just distinguish the words...^^"
write "<p>~You have lost.~^"
execute "+game_over"
endif
}
{+eachturn
if here hasnt OUTDOORS
move north_wall to here
move south_wall to here
move east_wall to here
move west_wall to here
endif
}
object kryten : myself self me
has ANIMATE
short name "yourself"
quantity 42
parent foyer
player
{examine_override
execute "+inventory"
}
object cloak : handsome dark black velvet satin cloak
has WEARABLE WORN
short a "velvet cloak"
long "Lying on the ground is a handsome velvet coat."
parent kryten
mass 5
{examine_override
write "<p>A handsome cloak, velvet trimmed with satin, and slightly spattered with "
write "raindrops. Its blackness is so deep that it alsmost seems to suck light from "
write "the room.^"
}
{drop
if here != cloak_room
write "<p>This isn't the best place to leave a smart cloak lying around.^"
break
else
proxy "hang cloak on hook"
endif
}
{insert_on_hook_override
write "<p>You hang the cloak on the hook.^"
move cloak to hook
ensure bar hasnt DARK
if hook hasnt SCORED
points 50
ensure hook has SCORED
endif
}
{take_override
write "<p>You take the cloak back off the hook.^"
move cloak to player
ensure bar has DARK
}
constant blundered_in 1
grammar hang *held on *present >insert_on
{+game_over
write "<P>^"
centre "<h2>---[THE END]---</h2>"
if interpreter = TACL
write "^"
execute "+score"
endif
endgame
loop
if noun3(parent) = player
set noun3(parent) = limbo
endif
endloop
set player(parent) = prologue
look
}
{+dark_description
write "<p>You are in complete darkness.^"
}
{+no_light
write "<p>It's very dark in here. Perhaps you should just leave before you "
write "do any damage.^"
set bar(blundered_in) + 1
set TIME = false
}
{+title
if player has SITTING
write "<p>(sitting)</p>^"
endif
}
{+styles
write "<style>"
write " <!--"
write " P { font-family: Helvetica, Arial, Sanserif; "
write " color: black; font-size: 12pt}"
write " TD { font-family: Helvetica, Arial, Sanserif; "
write " color: black; font-size: 12pt}"
write " A { font-family: Helvetica, Arial, Sanserif; "
write " color: white; font-size: 10pt}"
write " H1 { font-family: Times, Garamond, serif; "
write " color: white; font-size: 24pt}"
write " H2 { font-family: Times, Garamond, serif; "
write " color: black; font-size: 12pt;
write " font-weight: bold}
write " TH { background-color: #777777;
write " font-family: Helvetica, Arial, San-serif; "
write " font-weight: bold;"
write " color: black; font-size: 16pt}"
write " -->"
write "</style>"
}
{+header
write "Content-type: text/html"
write "Expire: -1^^"
write "<HTML><HEAD>
write "<TITLE>Cloak of Darkness</TITLE>"
execute "+styles"
write "</HEAD><BODY bgcolor=~blue~>"
write "<FORM NAME=~GameForm~ METHOD=get ACTION=~" $url "~>"
}
{+footer
execute "+exits"
write "<BR>"
prompt
execute "+score"
write "</FORM>"
write "</BODY></HTML>"
}
#include "verbs.library"