Trevor Merritt e29ac45c84 scroll down works on CHIP-8 and High-Res modes
scroll left and right work in stdef and hidef
adds octo test roms
adds schip fonts to memory
2024-10-27 11:41:25 -04:00

4011 lines
147 KiB
Plaintext

###########################################
#
# An Evening to Die For
#
# It is a dark and stormy night.
# A murer has been committed.
# Track down a murder weapon and identify
# the killer to bring them to justice!
#
# Arrow keys/ASWD move and change selections,
# Space/E advance dialog, confirm selections,
# and search the surrounding area for clues.
#
# An entry in the 2019 Octojam 6
# by John Earnest
#
###########################################
:calc CODE_POS { 0x200 }
:calc DATA_POS { 0x1000 }
:macro to-code { :calc DATA_POS { HERE } :org { CODE_POS } }
:macro to-data { :calc CODE_POS { HERE } :org { DATA_POS } }
:macro unpack16 ADDR {
:calc hi { 0xFF & ADDR >> 8 } v0 := hi
:calc lo { 0xFF & ADDR } v1 := lo
}
:macro pointer ADDR {
:byte { 0xFF & ADDR >> 8 }
:byte { 0xFF & ADDR }
}
:macro indirect LABEL {
0xF0 0x00 : LABEL 0x00 0x00 # i := long NNNN
}
:macro mirror-byte X {
:byte { ( 1 & X >> 7 ) | ( 2 & X >> 5 ) | ( 4 & X >> 3 ) | ( 8 & X >> 1 ) |
( 128 & X << 7 ) | ( 64 & X << 5 ) | ( 32 & X << 3 ) | ( 16 & X << 1 ) }
}
:macro mirror-8x15-row {
:calc val { @ base + index }
mirror-byte val
:calc index { index + 1 }
}
:macro mirror-8x15 ADDR {
:calc base { ADDR }
:calc index { 0 }
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
mirror-8x15-row
}
: sync
vf := 5
: sync-custom
delay := vf
loop
vf := delay
if vf != 0 then
again
;
:macro wait TIME {
vf := TIME
sync-custom
}
: full-screen-blit #lrtb
v0 := 0
v1 := 0
v2 := 16
v3 := 32
v4 := 48
loop
sprite v0 v1 0 i += v3
sprite v0 v2 0 i += v3
sprite v0 v3 0 i += v3
sprite v0 v4 0 i += v3
v0 += 16
if v0 != 128 then
again
;
###########################################
#
# Global State
#
###########################################
# v0-v4 and ve are currently reserved for temporaries
:const GAME_OVER 0xFA # set current-room to this to bail out.
:alias current-room vd
:alias suspicion-level vc # 0-255
:alias has-spyglass vb # 0/1
:alias has-weapon va # 0/1
# used during room exploration mode:
:alias prev-x v5
:alias prev-y v6
:alias player-face v7
:alias player-x v8
:alias player-y v9
# used during endgame:
:alias accused-npc v9
:alias guilty-npc v8
:alias guilty-weapon v7
# how much does various actions advanced the game?
:const SUSPICION_TALK_NPC 2
:const SUSPICION_TALK_MURDERER 5
:const SUSPICION_EXAMINE_DECO 1
:const SUSPICION_EXAMINE_ITEM 2
:const SUSPICION_ENTER_ROOM 1
:const SUSPICION_TAKE_WEAPON 5
:const SUSPICION_TAKE_SPYGLASS 5
: thicken-plot-sub
suspicion-level += ve
if vf != 0 then suspicion-level := 0xFF
;
:macro thicken-plot CONST {
ve := CONST
thicken-plot-sub
}
to-data
: has-body-room 0x00 # 0-9
: has-passage-room 0x00 # 0-9, replaces desc 1
: has-secret-room 0x00 # 0-9, replaces desc 2
: murder-weapon 0x00 # 0-7
: initial-item-positions
0 1 2 3 4 5 6 7 8 -1 -1
: item-positions
0 0 0 0 0 0 0 0 0 0 0
: npc-positions
0 1 # room 0, [slot 1, slot 2] ...
2 3 # room 1
4 5 # room 2
6 7 # room 3
-1 -1 # room 4
-1 -1 # room 5
-1 -1 # room 6
-1 -1 # room 7
-1 -1 # room 8
-1 -1 # room 9
-1 -1 # room 10
: npc-alibis
: npc-alibi-p1 0 1 # first pair
: npc-alibi-p2 2 3 # second pair
: npc-alibi-p3 4 5 # third pair
: npc-alone 6 # by themselves
: npc-murderer 7 # what it says on the tin
: npc-quip-index
: npc-quip-1 0 1
: npc-quip-2 2 3
4 5 6 7
: npc-scoff-index
0 1 2 3 4 5 6 7
: npc-alibi-rooms
: npc-alibi-r1 0
: npc-alibi-r2 1
: npc-alibi-r3 2
: npc-alibi-r4 3
: npc-alibi-r5 4
5 6 7 8 9 # and the rest aren't occupied
to-code
: random-upto-v1
loop
v0 := random 0xF
if v0 > v1 then
again
;
: shuffle-base i := long 0 ; # SMC
: shuffle-array
loop
v1 := v4
random-upto-v1
v3 := v0
if v3 != v4 begin
# swap a[v4] / a[v3]...
shuffle-base
i += v3
load v1 - v1 # has a[v3]
shuffle-base
i += v4
load v2 - v2 # has a[v4]
save v1 - v1
shuffle-base
i += v3
save v2 - v2
end
v4 += -1
if v4 != 2 then
again
;
:macro random-scalar MAX ADDR {
v1 := MAX
random-upto-v1
i := long ADDR
save v0
}
:macro shuffle LEN ADDR {
:calc target { shuffle-base + 2 }
i := target
unpack16 ADDR
save v1
:calc maxindex { LEN - 1 }
v4 := maxindex
shuffle-array
}
:macro plot-a-murder {
# gotta re-initialize this,
# as items can be removed during gameplay:
i := long initial-item-positions
load vA
i := long item-positions
save vA
# generate randomized scenario
random-scalar 9 has-body-room
random-scalar 9 has-passage-room
random-scalar 9 has-secret-room
random-scalar 7 murder-weapon
shuffle 11 item-positions
shuffle 18 npc-positions
shuffle 8 npc-alibis
shuffle 8 npc-quip-index
shuffle 8 npc-scoff-index
shuffle 10 npc-alibi-rooms
# re-init global game state
suspicion-level := 0
has-spyglass := 0
has-weapon := 0
current-room := 5
}
###########################################
#
# Text rendering routines
#
# These generic routines can draw pre-wrapped
# bytecoded strings with 2 colors, 2 font sizes,
# and 2 inlineable text fragment slots,
# as created by EZ-Writer:
#
# http://beyondloom.com/tools/ezwriter.html
#
# Pointers are "passed" to these routines
# by rewriting immediate i-loads,
# and macros help make the process more compact.
#
# Note that fragments should NOT contain STR_POS
# or recursive fragment references!
#
###########################################
:const STR_END 0xFF
:const STR_POS 0xFE
:const STR_COLOR 0xFD
:const STR_SIZE 0xFC
:const STR_SLOT_0 0xFB
:const STR_SLOT_1 0xFA
:const STR_SPACE 0xF9
:const CHAR_WIDTH_SMALL 6
:const CHAR_WIDTH_LARGE 8
:calc CHAR_WIDTH_DIFF { CHAR_WIDTH_LARGE - CHAR_WIDTH_SMALL }
:alias fragment-offset v3
:alias string-offset v4
:alias cursor-x v5
:alias cursor-y v6
:alias font-size v7
:alias font-color v8
:alias bit-flip v9
: print-char
if v0 == STR_POS begin
string-offset += 2
cursor-x := v1
cursor-y := v2
return
end
if v0 == STR_SPACE begin
cursor-x += CHAR_WIDTH_SMALL
if font-size != 0 then cursor-x += CHAR_WIDTH_DIFF
return
end
if v0 == STR_COLOR begin
font-color ^= bit-flip
return
end
if v0 == STR_SIZE begin
font-size ^= bit-flip
return
end
if v0 == STR_SLOT_0 begin
fragment-offset := 0
loop
indirect print-string0-read
i += fragment-offset
load v0
if v0 == STR_END then return
fragment-offset += 1
print-char
again
end
if v0 == STR_SLOT_1 begin
fragment-offset := 0
loop
indirect print-string1-read
i += fragment-offset
load v0
if v0 == STR_END then return
fragment-offset += 1
print-char
again
end
# draw a plain character
if font-size == 0 begin
i := long font
i += v0 # add v0 * 9
v0 += v0
i += v0
i += v0
i += v0
i += v0
sprite cursor-x cursor-y 9
if font-color != 0 begin
plane 2
sprite cursor-x cursor-y 9
plane 1
end
cursor-x += CHAR_WIDTH_SMALL
else
i := long bigfont
v0 += v0 # add v0 * 14
i += v0
i += v0
i += v0
i += v0
i += v0
i += v0
i += v0
sprite cursor-x cursor-y 14
if font-color != 0 begin
plane 2
sprite cursor-x cursor-y 14
plane 1
end
cursor-x += CHAR_WIDTH_LARGE
end
;
: print-text
i := print-string-read
save v1
i := long string-stash
save vf
i := long print-text-registers
load string-offset - bit-flip
loop
indirect print-string-read
i += string-offset
load v2
while v0 != STR_END
string-offset += 1
print-char
again
i := long string-stash
load vf
;
:macro print ADDR { unpack16 ADDR print-text }
to-data
: print-text-registers
0 0 0 0 0 1
: string-stash
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: font
0x1C 0x22 0x22 0x3E 0x22 0x22 0x22 0x00 0x00 # A
0x3C 0x22 0x22 0x3C 0x22 0x22 0x3C 0x00 0x00 # B
0x1C 0x22 0x20 0x20 0x20 0x22 0x1C 0x00 0x00 # C
0x3C 0x22 0x22 0x22 0x22 0x22 0x3C 0x00 0x00 # D
0x3E 0x20 0x20 0x3C 0x20 0x20 0x3E 0x00 0x00 # E
0x3E 0x20 0x20 0x3C 0x20 0x20 0x20 0x00 0x00 # F
0x1C 0x22 0x20 0x26 0x22 0x22 0x1C 0x00 0x00 # G
0x22 0x22 0x22 0x3E 0x22 0x22 0x22 0x00 0x00 # H
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x00 0x00 # I
0x02 0x02 0x02 0x02 0x22 0x22 0x1C 0x00 0x00 # J
0x22 0x24 0x28 0x30 0x28 0x24 0x22 0x00 0x00 # K
0x20 0x20 0x20 0x20 0x20 0x20 0x3E 0x00 0x00 # L
0x22 0x36 0x2A 0x22 0x22 0x22 0x22 0x00 0x00 # M
0x22 0x32 0x2A 0x26 0x22 0x22 0x22 0x00 0x00 # N
0x1C 0x22 0x22 0x22 0x22 0x22 0x1C 0x00 0x00 # O
0x3C 0x22 0x22 0x3C 0x20 0x20 0x20 0x00 0x00 # P
0x1C 0x22 0x22 0x22 0x22 0x22 0x1C 0x02 0x00 # Q
0x3C 0x22 0x22 0x3C 0x22 0x22 0x22 0x00 0x00 # R
0x1C 0x22 0x20 0x1C 0x02 0x22 0x1C 0x00 0x00 # S
0x3E 0x08 0x08 0x08 0x08 0x08 0x08 0x00 0x00 # T
0x22 0x22 0x22 0x22 0x22 0x22 0x1C 0x00 0x00 # U
0x22 0x22 0x22 0x14 0x14 0x08 0x08 0x00 0x00 # V
0x22 0x22 0x22 0x22 0x2A 0x36 0x22 0x00 0x00 # W
0x22 0x14 0x08 0x08 0x08 0x14 0x22 0x00 0x00 # X
0x22 0x22 0x22 0x14 0x08 0x08 0x08 0x00 0x00 # Y
0x3E 0x02 0x04 0x08 0x10 0x20 0x3E 0x00 0x00 # Z
0x00 0x00 0x1E 0x22 0x22 0x26 0x1A 0x00 0x00 # a
0x20 0x20 0x3C 0x22 0x22 0x22 0x3C 0x00 0x00 # b
0x00 0x00 0x1C 0x22 0x20 0x20 0x1E 0x00 0x00 # c
0x02 0x02 0x1E 0x22 0x22 0x22 0x1E 0x00 0x00 # d
0x00 0x00 0x1C 0x22 0x3E 0x20 0x1E 0x00 0x00 # e
0x06 0x08 0x1C 0x08 0x08 0x08 0x08 0x00 0x00 # f
0x00 0x00 0x1E 0x22 0x22 0x22 0x1E 0x02 0x1C # g
0x20 0x20 0x3C 0x22 0x22 0x22 0x22 0x00 0x00 # h
0x08 0x00 0x08 0x08 0x08 0x08 0x08 0x00 0x00 # i
0x08 0x00 0x08 0x08 0x08 0x08 0x08 0x08 0x30 # j
0x20 0x20 0x24 0x28 0x38 0x24 0x22 0x00 0x00 # k
0x08 0x08 0x08 0x08 0x08 0x08 0x0C 0x00 0x00 # l
0x00 0x00 0x3C 0x2A 0x2A 0x2A 0x2A 0x00 0x00 # m
0x00 0x00 0x2C 0x32 0x22 0x22 0x22 0x00 0x00 # n
0x00 0x00 0x1C 0x22 0x22 0x22 0x1C 0x00 0x00 # o
0x00 0x00 0x3C 0x22 0x22 0x22 0x3C 0x20 0x20 # p
0x00 0x00 0x1E 0x22 0x22 0x22 0x1E 0x02 0x02 # q
0x00 0x00 0x2C 0x32 0x20 0x20 0x20 0x00 0x00 # r
0x00 0x00 0x1E 0x20 0x1C 0x02 0x3C 0x00 0x00 # s
0x08 0x08 0x1E 0x08 0x08 0x08 0x06 0x00 0x00 # t
0x00 0x00 0x22 0x22 0x22 0x26 0x1A 0x00 0x00 # u
0x00 0x00 0x22 0x22 0x14 0x14 0x08 0x00 0x00 # v
0x00 0x00 0x2A 0x2A 0x2A 0x2A 0x14 0x00 0x00 # w
0x00 0x00 0x22 0x14 0x08 0x14 0x22 0x00 0x00 # x
0x00 0x00 0x22 0x22 0x22 0x22 0x1E 0x02 0x1C # y
0x00 0x00 0x3E 0x04 0x08 0x10 0x3E 0x00 0x00 # z
0x1C 0x22 0x26 0x2A 0x32 0x22 0x1C 0x00 0x00 # 0
0x08 0x18 0x08 0x08 0x08 0x08 0x08 0x00 0x00 # 1
0x1C 0x22 0x02 0x04 0x08 0x10 0x3E 0x00 0x00 # 2
0x1C 0x22 0x02 0x0C 0x02 0x22 0x1C 0x00 0x00 # 3
0x04 0x0C 0x14 0x24 0x3E 0x04 0x04 0x00 0x00 # 4
0x3E 0x20 0x3C 0x02 0x02 0x22 0x1C 0x00 0x00 # 5
0x1C 0x20 0x3C 0x22 0x22 0x22 0x1C 0x00 0x00 # 6
0x3E 0x02 0x02 0x04 0x08 0x08 0x08 0x00 0x00 # 7
0x1C 0x22 0x22 0x1C 0x22 0x22 0x1C 0x00 0x00 # 8
0x1C 0x22 0x22 0x22 0x1E 0x02 0x1C 0x00 0x00 # 9
0x00 0x00 0x00 0x00 0x00 0x0C 0x0C 0x00 0x00 # .
0x08 0x08 0x08 0x08 0x08 0x00 0x08 0x00 0x00 # !
0x1C 0x22 0x02 0x04 0x08 0x00 0x08 0x00 0x00 # ?
0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x08 0x10 # ,
0x08 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 # '
0x00 0x00 0x00 0x3E 0x00 0x00 0x00 0x00 0x00 # -
0x14 0x14 0x14 0x00 0x00 0x00 0x00 0x00 0x00 # "
: bigfont
0x38 0x7C 0x6C 0x6C 0xC6 0xC6 0xFE 0xFE 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # A
0xF8 0xFC 0xCC 0xCC 0xF8 0xFC 0xC6 0xC6 0xC6 0xC6 0xFE 0xFC 0x00 0x00 # B
0x7C 0xFE 0xC6 0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xC6 0xFE 0x7C 0x00 0x00 # C
0xF8 0xFC 0xCE 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xCE 0xFC 0xF8 0x00 0x00 # D
0xFE 0xFE 0xC0 0xC0 0xC0 0xF8 0xF8 0xC0 0xC0 0xC0 0xFE 0xFE 0x00 0x00 # E
0xFE 0xFE 0xC0 0xC0 0xC0 0xF8 0xF8 0xC0 0xC0 0xC0 0xC0 0xC0 0x00 0x00 # F
0x7C 0xFE 0xC6 0xC6 0xC0 0xDE 0xDE 0xC6 0xC6 0xE6 0x7E 0x3E 0x00 0x00 # G
0xC6 0xC6 0xC6 0xC6 0xC6 0xFE 0xFE 0xC6 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # H
0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x00 0x00 # I
0x0C 0x0C 0x0C 0x0C 0x0C 0x0C 0xCC 0xCC 0xCC 0xCC 0xFC 0x78 0x00 0x00 # J
0xC6 0xCE 0xDC 0xF8 0xF0 0xF0 0xF8 0xD8 0xCC 0xCC 0xC6 0xC6 0x00 0x00 # K
0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xC0 0xFE 0xFE 0x00 0x00 # L
0xEC 0xFE 0xFE 0xD6 0xD6 0xD6 0xD6 0xC6 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # M
0xF8 0xFC 0xCC 0xCE 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # N
0x7C 0xFE 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # O
0xFC 0xFE 0xC6 0xC6 0xC6 0xFE 0xFC 0xC0 0xC0 0xC0 0xC0 0xC0 0x00 0x00 # P
0x7C 0xFE 0xC6 0xC6 0xC6 0xC6 0xD6 0xDE 0xDC 0xCE 0xF6 0x76 0x00 0x00 # Q
0xFC 0xFE 0xC6 0xC6 0xC6 0xFE 0xFC 0xD8 0xCC 0xCC 0xC6 0xC6 0x00 0x00 # R
0x7C 0xFE 0xC6 0xC0 0xC0 0xFC 0x7E 0x06 0x06 0xC6 0xFE 0x7C 0x00 0x00 # S
0xFE 0xFE 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x38 0x18 0x00 0x00 # T
0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # U
0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xE6 0x66 0x76 0x3E 0x1E 0x0E 0x00 0x00 # V
0xC6 0xC6 0xC6 0xC6 0xC6 0xC6 0xD6 0xD6 0xD6 0xD6 0xFE 0xEC 0x00 0x00 # W
0xC6 0xC6 0xEE 0x6C 0x7C 0x38 0x7C 0x6C 0x6C 0xC6 0xC6 0xC6 0x00 0x00 # X
0xC6 0xC6 0xC6 0xE6 0x7E 0x3E 0x06 0x06 0x06 0xC6 0xFE 0x7C 0x00 0x00 # Y
0xFE 0xFE 0x0C 0x0C 0x18 0x18 0x30 0x30 0x60 0x60 0xFE 0xFE 0x00 0x00 # Z
0x00 0x00 0x00 0x00 0x76 0xFE 0xCE 0xC6 0xC6 0xC6 0xFE 0x7E 0x00 0x00 # a
0xC0 0xC0 0xC0 0xC0 0xDC 0xFE 0xE6 0xC6 0xC6 0xC6 0xFE 0xFC 0x00 0x00 # b
0x00 0x00 0x00 0x00 0x7C 0xFE 0xC6 0xC0 0xC0 0xC6 0xFE 0x7C 0x00 0x00 # c
0x06 0x06 0x06 0x06 0x76 0xFE 0xCE 0xC6 0xC6 0xC6 0xFE 0x7E 0x00 0x00 # d
0x00 0x00 0x00 0x00 0x7C 0xFE 0xC6 0xFE 0xF8 0xC6 0xFE 0x7C 0x00 0x00 # e
0x00 0x1E 0x3E 0x30 0xFE 0xFE 0x30 0x30 0x30 0x30 0x70 0x60 0x00 0x00 # f
0x00 0x00 0x00 0x00 0x7C 0xFE 0xC6 0xC6 0xC6 0xFE 0x7E 0x06 0xFE 0xFC # g
0xC0 0xC0 0xC0 0xC0 0xDC 0xFE 0xE6 0xC6 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # h
0x00 0x18 0x18 0x00 0x18 0x18 0x18 0x18 0x18 0x18 0x1C 0x1C 0x00 0x00 # i
0x00 0x18 0x18 0x00 0x18 0x18 0x18 0x18 0x18 0x18 0x18 0xD8 0xF8 0x70 # j
0xC0 0xC0 0xC0 0xC6 0xCE 0xDC 0xF8 0xF0 0xF8 0xDC 0xCE 0xC6 0x00 0x00 # k
0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x30 0x3C 0x3C 0x00 0x00 # l
0x00 0x00 0x00 0x00 0xEC 0xFE 0xFE 0xD6 0xD6 0xC6 0xC6 0xC6 0x00 0x00 # m
0x00 0x00 0x00 0x00 0xBC 0xFE 0xE6 0xC6 0xC6 0xC6 0xC6 0xC6 0x00 0x00 # n
0x00 0x00 0x00 0x00 0x7C 0xFE 0xC6 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # o
0x00 0x00 0x00 0x00 0xBC 0xFE 0xC6 0xC6 0xC6 0xC6 0xFE 0xFC 0xC0 0xC0 # p
0x00 0x00 0x00 0x00 0x76 0xFE 0xCE 0xC6 0xC6 0xC6 0xFE 0x7E 0x06 0x06 # q
0x00 0x00 0x00 0x00 0xDC 0xFE 0xE6 0xC6 0xC0 0xC0 0xC0 0xC0 0x00 0x00 # r
0x00 0x00 0x00 0x00 0x7E 0xFE 0xC0 0xFC 0x7E 0x06 0xFE 0xFC 0x00 0x00 # s
0x00 0x30 0x30 0x30 0xFE 0xFE 0x30 0x30 0x30 0x30 0x3C 0x1C 0x00 0x00 # t
0x00 0x00 0x00 0x00 0xC6 0xC6 0xC6 0xC6 0xC6 0xCE 0xFE 0x7A 0x00 0x00 # u
0x00 0x00 0x00 0x00 0xC6 0xC6 0xEE 0x6C 0x7C 0x38 0x38 0x10 0x00 0x00 # v
0x00 0x00 0x00 0x00 0xC6 0xC6 0xD6 0xD6 0xD6 0xFE 0xFE 0xEC 0x00 0x00 # w
0x00 0x00 0x00 0x00 0xC6 0xEE 0x6C 0x38 0x7C 0xEE 0xC6 0xC6 0x00 0x00 # x
0x00 0x00 0x00 0x00 0xC6 0xC6 0xC6 0xC6 0xFE 0x7E 0x06 0x06 0xFE 0xFC # y
0x00 0x00 0x00 0x00 0xFE 0xFE 0x0E 0x1C 0x38 0x70 0xFE 0xFE 0x00 0x00 # z
0x7C 0xFE 0xC6 0xD6 0xD6 0xD6 0xD6 0xD6 0xD6 0xC6 0xFE 0x7C 0x00 0x00 # 0
0x18 0x38 0x78 0x18 0x18 0x18 0x18 0x18 0x18 0x18 0x7E 0x7E 0x00 0x00 # 1
0x7C 0xFE 0xC6 0x06 0x3E 0x7C 0xE0 0xC0 0xC0 0xC0 0xFE 0xFE 0x00 0x00 # 2
0x7C 0xFE 0xC6 0x06 0x1E 0x1C 0x06 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # 3
0x0C 0x1C 0x3C 0x6C 0xFE 0xFE 0x0C 0x0C 0x0C 0x0C 0x0C 0x0C 0x00 0x00 # 4
0xFE 0xFE 0xC0 0xC0 0xFC 0xFE 0x06 0x06 0x06 0xC6 0xFE 0x7C 0x00 0x00 # 5
0x7C 0xFE 0xC6 0xC0 0xFC 0xFE 0xC6 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # 6
0xFE 0xFE 0x06 0x0E 0x1C 0x18 0xFE 0xFE 0x30 0x30 0x30 0x30 0x00 0x00 # 7
0x7C 0xFE 0xC6 0xC6 0x7C 0xFE 0xC6 0xC6 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # 8
0x7C 0xFE 0xC6 0xC6 0xFE 0x7E 0x06 0x06 0xC6 0xC6 0xFE 0x7C 0x00 0x00 # 9
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x18 0x00 0x00 # .
0x18 0x18 0x18 0x18 0x18 0x18 0x18 0x18 0x00 0x18 0x18 0x18 0x00 0x00 # !
0x7C 0xFE 0xC6 0xC6 0xDE 0x1C 0x18 0x18 0x00 0x18 0x18 0x18 0x00 0x00 # ?
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x18 0x18 0x18 0x08 0x10 # ,
0x18 0x18 0x18 0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 # '
0x00 0x00 0x00 0x00 0x00 0x00 0x3C 0x3C 0x00 0x00 0x00 0x00 0x00 0x00 # -
0x6C 0x6C 0x6C 0x24 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 # "
: fill-stash
0x00 0x00 0x00 0x00 0x00
: fill-sprite
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
: string-yes-no
0xFE 0x1E 0x34 0x18 0x1E 0x2C 0xF9 0xFE 0x50 0x34 0x0D 0x28 0xFF
: mask-yes-no
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
to-code
: dialog-fill-screen
plane 3
clear
plane 1
i := long fill-stash
save v0 - v4
i := long fill-sprite
full-screen-blit
i := long fill-stash
load v0 - v4
;
: dialog-pause
# debounced key input, to prevent
# missing out on dialog.
vf := OCTO_KEY_E
loop if vf key then again # wait for release,
loop if vf -key then again # wait for press,
loop if vf key then again # wait for release...
wait 2 # ...plus a minimum time delay.
plane 3
clear
plane 1
;
: dialog-draw-answer
v0 := 24
if v2 == 0 then v0 += 48
v1 := 50
i := long mask-yes-no
sprite v0 v1 0
v0 += 16
sprite v0 v1 0
;
: dialog-yes-no
# returns 0/1 in v2
print string-yes-no
ve := OCTO_KEY_E
loop if ve key then again # wait for release
wait 2 # ...plus a minimum time delay.
v2 := 1
loop
dialog-draw-answer
ve := key
dialog-draw-answer
while ve != OCTO_KEY_E
if ve == OCTO_KEY_A then v2 := 1
if ve == OCTO_KEY_D then v2 := 0
again
ve := OCTO_KEY_E
loop if ve key then again # wait for release
clear
;
:macro print-from-table REG TABLE {
i := long TABLE
i += REG
i += REG
load v1
print-text
}
:macro fmt-from-table REG TABLE DEST {
i := long TABLE
i += REG
i += REG
load v3 - v4
i := DEST
save v3 - v4
}
###########################################
#
# Prelude
#
###########################################
to-data
: cake 0x08 0x22 0x08 0x2A 0x54 0xDD 0x7E 0x81 0xFF 0x7E 0x81 0xFF 0x7E
: prelude-placing
32 8
80 10
98 15
22 13
80 30
90 35
30 24
18 35
: prelude-0
0xFE 0x24 0x11 0x44 0x16 0x21 0x1A 0x2D 0xF9 0x1A 0xFE 0x24 0x1B 0x2C 0x29 0x25
0x1E 0x27 0x1D 0x22 0x1D 0xFE 0x24 0x25 0x29 0x1A 0x2B 0x2D 0x32 0x3F 0x44 0xFF
: prelude-1
0xFE 0x12 0x0F 0x44 0x08 0x27 0x1D 0x1E 0x1E 0x1D 0x3E 0xFE 0x12 0x19 0x07 0x1A
0x29 0x29 0x32 0xF9 0x1B 0x22 0x2B 0x2D 0x21 0x1D 0x1A 0x32 0x41 0xFE 0x12 0x23
0x02 0x25 0x1A 0x22 0x2B 0x1E 0x3F 0x44 0xFF
: prelude-2
0xFE 0x08 0x0D 0x44 0x0F 0x1E 0x2B 0x21 0x1A 0x29 0x2C 0xF9 0x30 0x1E 0xF9 0x2C
0x21 0x28 0x2E 0x25 0x1D 0xFE 0x08 0x17 0x2E 0x2C 0x1E 0xF9 0x28 0x2E 0x2B 0xF9
0x1E 0x2C 0x2D 0x1E 0x1E 0x26 0x1E 0x1D 0xFE 0x08 0x21 0x1C 0x28 0x25 0x25 0x1E
0x1A 0x20 0x2E 0x1E 0x42 0x2C 0xF9 0x27 0x1E 0x30 0xFE 0x08 0x2B 0x2D 0x22 0x2D
0x25 0x1E 0x40 0x44 0xFF
: prelude-3
0xFE 0x03 0x0B 0x44 0x10 0x2E 0x22 0x2D 0x1E 0xF9 0x2B 0x22 0x20 0x21 0x2D 0x3E
0xFE 0x03 0x15 0x00 0xF9 0x1F 0x22 0x27 0x1E 0xF9 0x1B 0x22 0x2B 0x2D 0x21 0x1D
0x1A 0x32 0xFE 0x03 0x1F 0x2D 0x28 0xF9 0x32 0x28 0x2E 0x41 0xFE 0x03 0x29 0x08
0x27 0x2C 0x29 0x1E 0x1C 0x2D 0x28 0x2B 0xF9 0x01 0x25 0x1E 0x1C 0x21 0x26 0x1A
0x27 0x3F 0x44 0xFF
: prelude-4
0xFE 0x03 0x0B 0x44 0x16 0x1E 0xF9 0x30 0x22 0x25 0x25 0xF9 0x1A 0x25 0x25 0xF9
0x26 0x28 0x2C 0x2D 0xFE 0x03 0x15 0x1A 0x2C 0x2C 0x2E 0x2B 0x1E 0x1D 0x25 0x32
0xF9 0x1F 0x1E 0x1E 0x25 0xF9 0x2C 0x1A 0x1F 0x1E 0x2B 0xFE 0x03 0x1F 0x30 0x22
0x2D 0x21 0xF9 0x32 0x28 0x2E 0xF9 0x28 0x27 0xF9 0x2D 0x21 0x1E 0xF9 0x23 0x28
0x1B 0x41 0xFE 0x03 0x29 0x1D 0x1E 0x1A 0x2B 0x3E 0x44 0xFF
: prelude-5
0xFE 0x05 0x0C 0x44 0x0D 0x28 0x2D 0xF9 0x2D 0x28 0xF9 0x2C 0x29 0x28 0x22 0x25
0xF9 0x2D 0x21 0x1E 0xFE 0x05 0x16 0x26 0x28 0x28 0x1D 0x41 0xF9 0x1B 0x2E 0x2D
0xF9 0x08 0xF9 0x1C 0x1A 0x27 0x42 0x2D 0xFE 0x05 0x20 0x21 0x1E 0x25 0x29 0xF9
0x1B 0x2E 0x2D 0xF9 0x28 0x1B 0x2C 0x1E 0x2B 0x2F 0x1E 0xF9 0x1A 0x27 0xFE 0x05
0x2A 0x1A 0x1B 0x2C 0x1E 0x27 0x1C 0x1E 0x3E 0x3E 0x3E 0x44 0xFF
: prelude-6
0xFE 0x02 0x08 0x44 0x06 0x28 0x28 0x1D 0xF9 0x29 0x28 0x22 0x27 0x2D 0x3E 0xFE
0x02 0x12 0x00 0x1F 0x2D 0x1E 0x2B 0xF9 0x1A 0x25 0x25 0xF9 0x2D 0x21 0x1E 0xF9
0x1E 0x1F 0x1F 0x28 0x2B 0x2D 0xFE 0x02 0x1C 0x2D 0x28 0xF9 0x2D 0x21 0x2B 0x28
0x30 0xF9 0x2D 0x21 0x22 0x2C 0xF9 0x29 0x1A 0x2B 0x2D 0x32 0x41 0xFE 0x02 0x26
0x30 0x21 0x1E 0x2B 0x1E 0xF9 0x1C 0x28 0x2E 0x25 0x1D 0xF9 0x28 0x2E 0x2B 0xFE
0x02 0x30 0x21 0x28 0x2C 0x2D 0xF9 0x1B 0x1E 0x40 0x44 0xFF
: prelude-7
0xFE 0x02 0x08 0x44 0x08 0x2D 0x42 0x2C 0xF9 0x1B 0x1E 0x1E 0x27 0xF9 0x2A 0x2E
0x22 0x2D 0x1E 0xF9 0x1A 0xFE 0x02 0x12 0x30 0x21 0x22 0x25 0x1E 0x41 0xF9 0x22
0x27 0xF9 0x1F 0x1A 0x1C 0x2D 0x3E 0xFE 0x02 0x1C 0x0F 0x1E 0x2B 0x21 0x1A 0x29
0x2C 0xF9 0x30 0x1E 0xF9 0x2C 0x21 0x28 0x2E 0x25 0x1D 0xF9 0x20 0x28 0xFE 0x02
0x26 0x25 0x28 0x28 0x24 0x22 0x27 0x20 0xF9 0x1F 0x28 0x2B 0xF9 0x2D 0x21 0x1E
0xFE 0x02 0x30 0x28 0x25 0x1D 0xF9 0x1B 0x1E 0x1A 0x27 0x40 0x44 0xFF
: prelude-dialog-table
pointer prelude-0
pointer prelude-1
pointer prelude-2
pointer prelude-3
pointer prelude-4
pointer prelude-5
pointer prelude-6
pointer prelude-7
to-code
: prelude
dialog-fill-screen
wait 60
current-room := 11
clear
draw-room
player-face := 1
i := long room-stash-start
load player-x - player-y
ve := 0
draw-player
i := long cake
v0 := 60
v1 := 20
sprite v0 v1 13
v2 := 0
v3 := 0
loop
i := long prelude-placing
i += v2
i += v2
load v1
i := long npc-sprites
i += v3
sprite v0 v1 15
v3 += 16
v2 += 1
if v2 != 8 then
again
dialog-pause
v2 := 0
loop
introduce-npc
print-from-table v2 prelude-dialog-table
dialog-pause
v2 += 1
if v2 != 8 then
again
dialog-fill-screen
wait 60
jump intro-sequence
###########################################
#
# Introduction
#
###########################################
to-data
: title-screen
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x69 0x01 0xFB
0x01 0x9B 0x03 0x1B 0x03 0x3B 0x03 0xFB
0x01 0xEA 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x80 0x00
0xF8 0x00 0xDC 0x00 0xDF 0x00 0xEF 0x00
0xEF 0x00 0xED 0x90 0xFD 0xB0 0xFD 0xF8
0xFA 0xFC 0xFF 0xEC 0xEF 0xEF 0xEF 0x6F
0xDB 0xEB 0xFF 0xFA 0xFB 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xDF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFE
0xFF 0xF8 0xFF 0xF1 0xFF 0x87 0xFF 0x3F
0xF8 0xFF 0xF7 0xFE 0xEF 0xFF 0xFF 0xFF
0xDF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0xE0 0x79 0xF0 0xFD
0xB0 0xCD 0x30 0xF9 0x70 0xE1 0x60 0xFD
0x70 0x79 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x08 0x00 0x0C 0x00 0x7F 0x3C
0x7F 0x7E 0x1C 0x66 0x18 0x66 0x1A 0x6C
0x1E 0x7C 0x0C 0x38 0x00 0x00 0x00 0x00
0x60 0x00 0x60 0x00 0xE0 0x00 0xF0 0x00
0xF0 0x00 0xF0 0x00 0xF0 0xC0 0xF1 0xD8
0xF1 0xFC 0xF3 0xFC 0xD3 0xFC 0xDB 0xBD
0xFF 0xBC 0xFF 0x9E 0xFF 0xFF 0xFF 0xFB
0xFF 0xFF 0xFF 0xFF 0xFF 0xFE 0xFF 0xF0
0xFF 0x80 0xFE 0x01 0xE0 0x03 0x00 0x07
0x01 0xFF 0xFD 0xFF 0xE3 0xFF 0xDF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x13 0xC7 0xB7 0xEF
0xB6 0x6E 0xB7 0xCC 0xE7 0x0D 0xC7 0xAD
0x83 0xC9 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x3F 0xFF 0x1F 0xFF
0x1F 0xFF 0x1F 0xFF 0x1F 0xFF 0x1F 0xFF
0x1F 0xE0 0x1F 0xE0 0x1F 0xE0 0x1F 0xC0
0x3F 0xC0 0x3F 0xC0 0x3F 0xC0 0x3F 0xC0
0x7F 0x80 0x7F 0x81 0x7F 0xFF 0x7F 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0xC0 0x00 0xFC 0x00
0xFF 0xC0 0xFC 0x39 0x03 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFD 0xFF 0xFB
0xFF 0xFF 0xFF 0xFF 0xFF 0xDF 0xFF 0xFF
0xFF 0xBF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x89 0xE3 0xDB 0xF7
0xC3 0xB4 0xDB 0x36 0xDB 0x77 0x9B 0x67
0xD2 0x71 0x00 0x03 0x00 0x0F 0x00 0x06
0x00 0x00 0x00 0x00 0xF0 0x00 0xFC 0x07
0xFE 0x1F 0xFF 0x3F 0xFF 0x26 0xFF 0xA6
0x7F 0xBF 0x1F 0x9D 0x0F 0xCF 0x0F 0xCA
0x0F 0xC0 0x0F 0xDF 0x0F 0xCF 0x1F 0xCF
0x7F 0xCF 0xFF 0x9F 0xFF 0x9F 0xFF 0x9F
0xFF 0x1F 0xFE 0x1F 0xFC 0x3F 0xF0 0x3F
0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x07
0x0F 0xF7 0xFB 0xFF 0xF7 0xDF 0xCF 0xBF
0x3F 0x7F 0xFF 0xFF 0xF9 0xFF 0xF7 0xFF
0xFF 0xFF 0xDF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x80 0x00 0xC0 0x00
0xC0 0x00 0xC0 0x00 0xC0 0x00 0xC0 0x00
0x80 0x00 0x80 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x3F 0x80 0xFF
0xC1 0xFF 0xE3 0xFF 0x67 0xFF 0x67 0xF8
0xCF 0xF0 0xCF 0xE0 0x8F 0xFF 0x9F 0xFF
0x1F 0xFF 0xDF 0xFF 0x9F 0xC0 0xBF 0xC0
0xBF 0xC0 0xBF 0xE1 0xBF 0xFF 0x9F 0xFF
0x1F 0xFF 0x0F 0xFF 0x07 0xFF 0x81 0xFF
0x0E 0x00 0x3F 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0xE0 0x00 0xFE 0x00
0xFE 0x00 0xFF 0x00 0xFF 0x00 0x3F 0x80
0x1F 0x83 0x1F 0xDF 0xFF 0xDF 0xFF 0xDF
0xFF 0xDF 0xFF 0xDF 0x00 0x1F 0x00 0x3F
0xFF 0xBF 0xFF 0xBF 0xFF 0x7F 0xFF 0x7F
0xFE 0xFF 0xFD 0xF8 0xFB 0xF0 0xE7 0xF3
0x1F 0xC0 0xFF 0xE0 0xFF 0xF3 0xFF 0xC3
0xFF 0xE7 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFC 0xFF 0xF8
0x00 0x00 0x00 0x0C 0x00 0x0C 0x00 0x1E
0x00 0x1E 0x00 0x3F 0x00 0x3F 0x00 0x3F
0x00 0x7F 0x00 0x7F 0x00 0x7F 0x00 0x0F
0x00 0x0E 0x00 0x0E 0x00 0x0F 0x00 0x0F
0x00 0x0F 0x00 0x0F 0x00 0x0F 0x03 0xC0
0x07 0xFF 0x1F 0xFF 0x7F 0xFE 0xFF 0xF0
0xFF 0x87 0xFE 0x1F 0xFD 0xFF 0xF0 0xFF
0xF3 0xFF 0xF0 0x7F 0xF8 0x7F 0xFC 0x03
0xFF 0x00 0xFF 0xE0 0xFF 0xF8 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0x43 0x43 0x81 0x01
0x99 0x91 0x99 0x13 0x91 0x27 0x81 0x21
0xC3 0x21 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xF8 0xFF 0xC4 0xFF 0x00 0xF2 0x00
0xD0 0x00 0x00 0x00 0x00 0x04 0x00 0x01
0x00 0x00 0x0F 0xFF 0x3F 0xFF 0x3F 0xFF
0x0F 0xBD 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xF7 0xBF 0xF7 0xBF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x03 0xE0
0xFF 0x3F 0xF3 0xFF 0x0F 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x7F 0xFF 0x0F 0xFF 0x01 0xFF 0x00 0x7F
0xC0 0x1F 0xE0 0x07 0xF8 0x01 0xFD 0x00
0xFE 0x01 0xFF 0x00 0xFF 0x80 0xFF 0xA0
0xFF 0xC0 0xFF 0xC0 0xFF 0xF0 0xFF 0xE0
0xFF 0xF0 0xFF 0xE0 0xFF 0xE0 0xFF 0xE0
0xFF 0xC0 0xFF 0x80 0xF8 0x01 0xA0 0x00
0x00 0x00 0x00 0x00 0x00 0x02 0x00 0x40
0x01 0x13 0x10 0x3F 0x0D 0xFF 0x3F 0xFF
# a little 3x5 semifont
: tiny-dash 0x00 0x00 0xE0 0x00 0x00
: tiny-space 0x00 0x00 0x00 0x00 0x00
: tiny-P 0xC0 0xA0 0xC0 0x80 0x80
: tiny-R 0xC0 0xA0 0xC0 0xA0 0xA0
: tiny-E 0xE0 0x80 0xC0 0x80 0xE0
: tiny-S 0x60 0x80 0x40 0x20 0xC0
: tiny-A 0x40 0xA0 0xE0 0xA0 0xA0
: tiny-C 0x40 0xA0 0x80 0xA0 0x40
: tiny-table
pointer tiny-dash
pointer tiny-P
pointer tiny-R
pointer tiny-E
pointer tiny-S
pointer tiny-S
pointer tiny-space
pointer tiny-S
pointer tiny-P
pointer tiny-A
pointer tiny-C
pointer tiny-E
pointer tiny-dash
: tiny-table-end
: wiggle-table 0 0 1 1 2 1 1 0 0 -1 -1 -2 -1 -1 0 0
: lightning-right
0x00 0x04 0x00 0x08 0x00 0x70 0x00 0x88 0x01 0x08 0x1E 0x00 0x28 0x00 0x08 0x00
0x04 0x00 0x03 0x00 0x01 0x00 0x03 0x00 0x24 0x80 0x58 0x80 0x81 0x00 0x80 0x00
: lightning-left
0x78 0x00 0x1C 0x00 0x0C 0x00 0x0C 0x00 0x0E 0x00 0x0B 0x00 0x18 0xC0 0x10 0x60
0x20 0x20 0x20 0x20 0x20 0x1C 0x60 0x12 0x90 0x09 0x88 0x00 0x04 0x00 0x04 0x00
: rain # (padded to 8x16)
0x80 0x00 0x00 0x80 0x80 0x00 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x00
0x80 0x00 0x80 0x80 0x80 0x80 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x80 0x00 0x00 0x00 0x00
0x80 0x80 0x80 0x80 0x00 0x00 0x00 0x00 0x00 0x08 0x08 0x08 0x08 0x00 0x00 0x00
: dark-and-stormy # "It is a dark and stormy night."
0xFE 0x0B 0x15 0x08 0x2D 0xF9 0x22 0x2C 0xF9 0x1A 0xF9 0x1D 0x1A 0x2B 0x24 0xFE
0x0B 0x1F 0x1A 0x27 0x1D 0xF9 0x2C 0x2D 0x28 0x2B 0x26 0x32 0xF9 0x27 0x22 0x20
0x21 0x2D 0x3E 0xFF
: a-murder-has-been-committed
0xFE 0x0B 0x15 0xFD 0x00 0xF9 0x26 0x2E 0x2B 0x1D 0x1E 0x2B 0xF9 0x21 0x1A 0x2C
0xF9 0x1B 0x1E 0x1E 0x27 0xF9 0xFE 0x0B 0x1F 0x1C 0x28 0x26 0x26 0x22 0x2D 0x2D
0x1E 0x1D 0x3E 0x3E 0x3E 0xFF
: a-shocking-end
0xFE 0x00 0x12 0x08 0x2D 0xF9 0x2C 0x1E 0x1E 0x26 0x2C 0xF9 0x2D 0x21 0x1E 0xF9
0x27 0x22 0x20 0x21 0x2D 0x42 0x2C 0xFE 0x00 0x1C 0x1F 0x1E 0x2C 0x2D 0x22 0x2F
0x22 0x2D 0x22 0x1E 0x2C 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0x1C 0x28 0x26 0x1E 0xFE
0x00 0x26 0x2D 0x28 0xF9 0x1A 0xF9 0x2C 0x21 0x28 0x1C 0x24 0x22 0x27 0x20 0xF9
0x1E 0x27 0x1D 0x3E 0xFF
: a-pool-of-blood
0xFE 0x02 0x0D 0x0E 0x2E 0x2B 0xF9 0x25 0x1A 0x2D 0x1E 0xF9 0x21 0x28 0x2C 0x2D
0x42 0x2C 0xF9 0x1B 0x28 0x1D 0x32 0xFE 0x02 0x17 0x30 0x1A 0x2C 0xF9 0x23 0x2E
0x2C 0x2D 0xF9 0x1D 0x22 0x2C 0x1C 0x28 0x2F 0x1E 0x2B 0x1E 0x1D 0xFE 0x02 0x21
0x1F 0x1A 0x1C 0x1E 0x43 0x1D 0x28 0x30 0x27 0xF9 0x22 0x27 0xF9 0x1A 0xF9 0x29
0x28 0x28 0x25 0xFE 0x02 0x2B 0x28 0x1F 0xF9 0x21 0x22 0x2C 0xF9 0x28 0x30 0x27
0xF9 0x1B 0x25 0x28 0x28 0x1D 0x3E 0x3E 0x3E 0xFF
: get-to-the-bottom-of-it
0xFE 0x00 0x0C 0x08 0xF9 0x26 0x2E 0x2C 0x2D 0xF9 0x20 0x1E 0x2D 0xF9 0x2D 0x28
0xF9 0x2D 0x21 0x1E 0xFE 0x00 0x16 0x1B 0x28 0x2D 0x2D 0x28 0x26 0xF9 0x28 0x1F
0xF9 0x2D 0x21 0x22 0x2C 0xF9 0x1A 0x2D 0xFE 0x00 0x20 0x28 0x27 0x1C 0x1E 0x43
0xF9 0x1B 0x1E 0x1F 0x28 0x2B 0x1E 0xF9 0x28 0x2E 0x2B 0xFE 0x00 0x2A 0x24 0x22
0x25 0x25 0x1E 0x2B 0xF9 0x2C 0x2D 0x2B 0x22 0x24 0x1E 0x2C 0xF9 0x1A 0x20 0x1A
0x22 0x27 0x3F 0xFF
: intro-1-quip-0 # "Good grief, he's dead!"
0xFE 0x1A 0x14 0x44 0x06 0x28 0x28 0x1D 0xF9 0x20 0x2B 0x22 0x1E 0x1F 0x41 0xFE
0x1A 0x1E 0x21 0x1E 0x42 0x2C 0xF9 0x1D 0x1E 0x1A 0x1D 0x3F 0x44 0xFF
: intro-1-quip-1 # "Hmm. No sign of a pulse."
0xFE 0x03 0x14 0x44 0x07 0x26 0x26 0x3E 0xFE 0x03 0x1E 0x0D 0x28 0xF9 0x2C 0x22
0x20 0x27 0xF9 0x28 0x1F 0xF9 0x1A 0xF9 0x29 0x2E 0x25 0x2C 0x1E 0x3E 0x44 0xFF
: intro-1-quip-2 # "I can't believe it! Murdered in his own home?"
0xFE 0x03 0x11 0x44 0x08 0xF9 0x1C 0x1A 0x27 0x42 0x2D 0xF9 0x1B 0x1E 0x25 0x22
0x1E 0x2F 0x1E 0xF9 0x22 0x2D 0x3F 0xFE 0x03 0x1B 0x0C 0x2E 0x2B 0x1D 0x1E 0x2B
0x1E 0x1D 0xF9 0x22 0x27 0xF9 0x21 0x22 0x2C 0xFE 0x03 0x25 0x28 0x30 0x27 0xF9
0x21 0x28 0x26 0x1E 0x40 0x44 0xFF
: intro-1-quip-3 # "He's Dead? When could this have happened?"
0xFE 0x10 0x10 0x44 0x07 0x1E 0x42 0x2C 0xF9 0x03 0x1E 0x1A 0x1D 0x40 0xFE 0x10
0x1A 0x16 0x21 0x1E 0x27 0xF9 0x1C 0x28 0x2E 0x25 0x1D 0xF9 0x2D 0x21 0x22 0x2C
0xFE 0x10 0x24 0x21 0x1A 0x2F 0x1E 0xF9 0x21 0x1A 0x29 0x29 0x1E 0x27 0x1E 0x1D
0x40 0x44 0xFF
: intro-1-quip-4 # "Doesn't take a coroner to classify this one, I'm afraid."
0xFE 0x02 0x11 0x44 0x03 0x28 0x1E 0x2C 0x27 0x42 0x2D 0xF9 0x2D 0x1A 0x24 0x1E
0xF9 0x1A 0xFE 0x02 0x1B 0x1C 0x28 0x2B 0x28 0x27 0x1E 0x2B 0xF9 0x2D 0x28 0xF9
0x1C 0x1A 0x25 0x25 0xF9 0x2D 0x21 0x22 0x2C 0xFE 0x02 0x25 0x28 0x27 0x1E 0x41
0xF9 0x08 0x42 0x26 0xF9 0x1A 0x1F 0x2B 0x1A 0x22 0x1D 0x3E 0x44 0xFF
: intro-1-quip-5 # "Stone dead. What a mess!"
0xFE 0x1A 0x18 0x44 0x12 0x2D 0x28 0x27 0x1E 0xF9 0x1D 0x1E 0x1A 0x1D 0x3E 0xFE
0x1A 0x22 0x16 0x21 0x1A 0x2D 0xF9 0x1A 0xF9 0x26 0x1E 0x2C 0x2C 0x3F 0x44 0xFF
: intro-1-quip-6 # "Oh dear. The carpet is simply ruined."
0xFE 0x14 0x11 0x44 0x0E 0x21 0xF9 0x1D 0x1E 0x1A 0x2B 0x3E 0xFE 0x14 0x1B 0x13
0x21 0x1E 0xF9 0x1C 0x1A 0x2B 0x29 0x1E 0x2D 0xF9 0x22 0x2C 0xFE 0x14 0x25 0x2C
0x22 0x26 0x29 0x25 0x32 0xF9 0x2B 0x2E 0x22 0x27 0x1E 0x1D 0x3E 0x44 0xFF
: intro-1-quip-7 # "I can't imagine he'll pull through..."
0xFE 0x02 0x16 0x44 0x02 0x1A 0x27 0x42 0x2D 0xF9 0x22 0x26 0x1A 0x20 0x22 0x27
0x1E 0xF9 0x21 0x1E 0x42 0x25 0x25 0xFE 0x02 0x20 0x29 0x2E 0x25 0x25 0xF9 0x2D
0x21 0x2B 0x28 0x2E 0x20 0x21 0x3E 0x3E 0x3E 0x44 0xFF
: intro-2-quip-0 # "Who could have done such a thing?"
0xFE 0x02 0x16 0x44 0x16 0x21 0x28 0xF9 0x1C 0x28 0x2E 0x25 0x1D 0xF9 0x21 0x1A
0x2F 0x1E 0xF9 0x1D 0x28 0x27 0x1E 0xFE 0x02 0x20 0x2C 0x2E 0x1C 0x21 0xF9 0x1A
0xF9 0x2D 0x21 0x22 0x27 0x20 0x40 0x44 0xFF
: intro-2-quip-1 # "I think I'm going to be sick!"
0xFE 0x07 0x16 0x44 0x08 0xF9 0x2D 0x21 0x22 0x27 0x24 0xF9 0x08 0x42 0x26 0xF9
0x20 0x28 0x22 0x27 0x20 0xFE 0x07 0x20 0x2D 0x28 0xF9 0x1B 0x1E 0xF9 0x2C 0x22
0x1C 0x24 0x3F 0x44 0xFF
: intro-2-quip-2 # "I simply can't bear the signt of blood..."
0xFE 0x0F 0x12 0x44 0x08 0xF9 0x2C 0x22 0x26 0x29 0x25 0x32 0xF9 0x1C 0x1A 0x27
0x42 0x2D 0xFE 0x0F 0x1C 0x1B 0x1E 0x1A 0x2B 0xF9 0x2D 0x21 0x1E 0xF9 0x2C 0x22
0x20 0x21 0x2D 0xFE 0x0F 0x26 0x28 0x1F 0xF9 0x1B 0x25 0x28 0x28 0x1D 0x3E 0x3E
0x3E 0x44 0xFF
: intro-2-quip-3 # "Farewell, old chum. Such a way to go!"
0xFE 0x02 0x16 0x44 0x05 0x1A 0x2B 0x1E 0x30 0x1E 0x25 0x25 0x41 0xF9 0x28 0x25
0x1D 0xF9 0x1C 0x21 0x2E 0x26 0x3E 0xFE 0x02 0x20 0x12 0x2E 0x1C 0x21 0xF9 0x1A
0xF9 0x30 0x1A 0x32 0xF9 0x2D 0x28 0xF9 0x20 0x28 0x3F 0x44 0xFF
: intro-2-quip-4 # "How simply dreadful!"
0xFE 0x1A 0x16 0x44 0x07 0x28 0x30 0xF9 0x2C 0x22 0x26 0x29 0x25 0x32 0xFE 0x1A
0x20 0x1D 0x2B 0x1E 0x1A 0x1D 0x1F 0x2E 0x25 0x3F 0x44 0xFF
: intro-2-quip-5 # "I think I'm going to need a few stiff drinks..."
0xFE 0x05 0x11 0x44 0x08 0xF9 0x2D 0x21 0x22 0x27 0x24 0xF9 0x08 0x42 0x26 0xF9
0x20 0x28 0x22 0x27 0x20 0xFE 0x05 0x1B 0x2D 0x28 0xF9 0x27 0x1E 0x1E 0x1D 0xF9
0x1A 0xF9 0x1F 0x1E 0x30 0xF9 0x2C 0x2D 0x22 0x1F 0x1F 0xFE 0x05 0x25 0x1D 0x2B
0x22 0x27 0x24 0x2C 0x3E 0x3E 0x3E 0x44 0xFF
: intro-2-quip-6 # "There's... so much blood..."
0xFE 0x0C 0x16 0x44 0x13 0x21 0x1E 0x2B 0x1E 0x42 0x2C 0x3E 0x3E 0x3E 0xFE 0x0C
0x20 0x2C 0x28 0xF9 0x26 0x2E 0x1C 0x21 0xF9 0x1B 0x25 0x28 0x28 0x1D 0x3E 0x3E
0x3E 0x44 0xFF
: intro-2-quip-7 # "The old man always did know how to make an exit, I suppose."
0xFE 0x02 0x11 0x44 0x13 0x21 0x1E 0xF9 0x28 0x25 0x1D 0xF9 0x26 0x1A 0x27 0xF9
0x1A 0x25 0x30 0x1A 0x32 0x2C 0xFE 0x02 0x1B 0x1D 0x22 0x1D 0xF9 0x24 0x27 0x28
0x30 0xF9 0x21 0x28 0x30 0xF9 0x2D 0x28 0xF9 0x26 0x1A 0x24 0x1E 0xFE 0x02 0x25
0x1A 0x27 0xF9 0x1E 0x31 0x22 0x2D 0x41 0xF9 0x08 0xF9 0x2C 0x2E 0x29 0x29 0x28
0x2C 0x1E 0x3E 0x44 0xFF
: intro-table-1
pointer intro-1-quip-0
pointer intro-1-quip-1
pointer intro-1-quip-2
pointer intro-1-quip-3
pointer intro-1-quip-4
pointer intro-1-quip-5
pointer intro-1-quip-6
pointer intro-1-quip-7
: intro-table-2
pointer intro-2-quip-0
pointer intro-2-quip-1
pointer intro-2-quip-2
pointer intro-2-quip-3
pointer intro-2-quip-4
pointer intro-2-quip-5
pointer intro-2-quip-6
pointer intro-2-quip-7
: intro-sequence-registers
0 # ve: animation index
0 # vd: space key latch
0 # vc: 1 key latch
0xF # vb: constant index mask
to-code
: draw-lightning
clear
vf := random 0b1
v1 := 0
if vf == 0 begin
i := long lightning-right
v0 := 75
else
i := long lightning-left
v0 := 25
end
v2 := 10
loop
sprite v0 v1 0
sync
vf := 5
buzzer := vf
v2 += -1
if v2 != 0 then
again
clear
;
: draw-rain
loop
dialog-fill-screen
v2 := 20 # rain density
loop
i := long rain
vf := random 0b110000 # 0,16,32,48
i += vf
v0 := random 0xFF
v1 := random 0xFF
sprite v0 v1 15
v2 += -1
if v2 != 0 then
again
sync
v3 += -1
if v3 != 0 then
again
clear
;
: draw-wiggle-prompt
# -PRESS SPACE-
:calc prompt-length { 0xFF & ( tiny-table-end - tiny-table ) / 2 }
:calc prompt-offset-x { 0xFF & 64 - ( prompt-length * 4 ) / 2 }
v0 := prompt-offset-x
v1 := 58
v2 := 0
va := ve
loop
i := long tiny-table
i += v2
i += v2
load v3 - v4
i := long prompt-pointer
save v3 - v4
i := long wiggle-table
i += va
load v1 - v1
v1 += 57
indirect prompt-pointer
sprite v0 v1 5
v0 += 4
v2 += 1
va += 1
va &= vb
if v2 != prompt-length then
again
;
:macro latch-key KEY LATCH {
vf := KEY
if LATCH == 0 begin
if vf key then LATCH := 1
else
while vf key
end
}
: test-fight
fencing-minigame
jump intro-sequence
: intro-sequence
clear
i := long title-screen
full-screen-blit
i := long intro-sequence-registers
load ve - vb
draw-wiggle-prompt
loop
draw-wiggle-prompt
ve += 1
ve &= vb
draw-wiggle-prompt
latch-key OCTO_KEY_E vd
latch-key OCTO_KEY_1 vc
vf := OCTO_KEY_2
if vf key then jump test-fight
wait 2
again
plane 3
clear
plane 1
if vc == 1 then jump prelude
v3 := 30 # rain duration
draw-rain
dialog-fill-screen
print dark-and-stormy
plot-a-murder # do this here to hide the delay
wait 120
draw-lightning
v3 := 10
draw-rain
draw-lightning
v3 := 10
draw-rain
draw-lightning
v3 := 40
draw-rain
dialog-fill-screen
print a-murder-has-been-committed
wait 120
dialog-fill-screen
wait 60
clear
print a-shocking-end
dialog-pause
print a-pool-of-blood
dialog-pause
i := long npc-quip-1
load v2 - v3
introduce-npc
print-from-table v3 intro-table-1
dialog-pause
i := long npc-quip-2
load v2 - v3
introduce-npc
print-from-table v3 intro-table-1
dialog-pause
print get-to-the-bottom-of-it
dialog-pause
;
###########################################
#
# Inventory Items
#
###########################################
to-data
: no-time-for-that
0xFE 0x0B 0x12 0x0D 0x28 0xF9 0x2D 0x22 0x26 0x1E 0xF9 0x1F 0x28 0x2B 0xF9 0x2D
0x21 0x1A 0x2D 0x43 0xFE 0x0B 0x1C 0x2D 0x21 0x1E 0x2B 0x1E 0x42 0x2C 0xF9 0x1A
0xF9 0x26 0x2E 0x2B 0x1D 0x1E 0x2B 0xFE 0x0B 0x26 0x2D 0x28 0xF9 0x1B 0x1E 0xF9
0x2C 0x28 0x25 0x2F 0x1E 0x1D 0x3F 0xFF
: upon-closer-inspection
0xFE 0x0F 0x12 0x18 0x28 0x2E 0xF9 0x1E 0x31 0x1A 0x26 0x22 0x27 0x1E 0xF9 0x22
0x2D 0xFE 0x0F 0x1C 0x1C 0x1A 0x2B 0x1E 0x1F 0x2E 0x25 0x25 0x32 0xF9 0x30 0x22
0x2D 0x21 0xFE 0x0F 0x26 0x2D 0x21 0x1E 0xF9 0x2C 0x29 0x32 0x20 0x25 0x1A 0x2C
0x2C 0x3E 0x3E 0x3E 0xFF
: nothing-unusual
0xFE 0x0B 0x16 0x18 0x28 0x2E 0xF9 0x1F 0x22 0x27 0x1D 0xF9 0x27 0x28 0x2D 0x21
0x22 0x27 0x20 0xFE 0x0B 0x20 0x2E 0x27 0x2E 0x2C 0x2E 0x1A 0x25 0xF9 0x1A 0x1B
0x28 0x2E 0x2D 0xF9 0x22 0x2D 0x3E 0xFF
: traces-of-blood
0xFE 0x0C 0x16 0xFD 0x13 0x21 0x1E 0x2B 0x1E 0xF9 0x1A 0x2B 0x1E 0xF9 0x2D 0x2B
0x1A 0x1C 0x1E 0x2C 0xF9 0xFE 0x10 0x20 0x28 0x1F 0xF9 0x1B 0x25 0x28 0x28 0x1D
0xF9 0x28 0x27 0xF9 0x22 0x2D 0x3F 0xFF
: take-murder-weapon
0xFE 0x0E 0x12 0x13 0x1A 0x24 0x1E 0xF9 0x2D 0x21 0x1E 0xF9 0x26 0x2E 0x2B 0x1D
0x1E 0x2B 0xFE 0x0E 0x1C 0x30 0x1E 0x1A 0x29 0x28 0x27 0xF9 0x30 0x22 0x2D 0x21
0xF9 0x32 0x28 0x2E 0x40 0xFF
: item-lead-pipe # "Seems a bit dangerous."
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFE 0xE1 0x7D 0xDD 0x83 0x22 0xFE 0x19 0x86
0x0C 0x06 0x0E 0x0A 0x07 0x56 0x03 0xFC 0x01 0xF8 0x00 0x00 0x00 0x00 0x00 0x00
: item-bullet # "An ordinary household bullet."
0x01 0x80 0x03 0x40 0x03 0x40 0x07 0xA0 0x07 0xA0 0x07 0xE0 0x0B 0xD0 0x08 0x30
0x0A 0xF0 0x0A 0xF0 0x0A 0xF0 0x0A 0xF0 0x1A 0xF8 0x17 0xE8 0x08 0x10 0x07 0xE0
: item-pewter-vase # "Tacky, but quite heavy."
0x01 0x80 0x1E 0x78 0x21 0x84 0x1C 0x38 0x1F 0xF8 0x37 0xEC 0x24 0x24 0x44 0x22
0x49 0x92 0x4A 0x92 0x49 0x12 0x6C 0xB6 0x6C 0x36 0x36 0x6C 0x1F 0xF8 0x07 0xE0
: item-jar-of-caviar # "Fish eggs, Fish eggs. Eat them up, yum."
0x00 0x00 0x7F 0xFE 0x5F 0xFA 0x40 0x02 0x40 0x02 0x3F 0xFC 0x5C 0x9A 0x57 0x62
0x5B 0xAA 0x5C 0xDA 0x5B 0x3A 0x51 0x2A 0x6F 0xF6 0x30 0x0C 0x1F 0xF8 0x00 0x00
: item-jade-skull # "Supposedly stolen from a famous rapper."
0x07 0xF0 0x18 0x0C 0x20 0x02 0x20 0x41 0x6F 0x21 0x67 0x81 0x47 0x83 0x62 0x3B
0xF0 0x73 0xB3 0xE6 0x81 0xFE 0x55 0xBC 0x2B 0x78 0x57 0xC0 0x7F 0xC0 0x3F 0x80
: item-brandy-snifter # "I'm not in the mood for a drink."
0x07 0xE0 0x0B 0xD0 0x08 0x10 0x10 0x08 0x10 0x08 0x24 0x24 0x30 0x0C 0x2A 0x54
0x3C 0x3C 0x1B 0xD8 0x0E 0x70 0x03 0xC0 0x01 0x80 0x07 0xE0 0x0F 0xF0 0x03 0xC0
: item-glass-orb # "It catches the light from every angle..."
0x03 0xC0 0x0C 0x30 0x11 0x08 0x2A 0x64 0x5A 0x6A 0x59 0x02 0xB4 0xF1 0xA4 0x09
0xBA 0x65 0xB3 0xF5 0x5F 0xB2 0x56 0xFA 0x2F 0xF4 0x13 0xC8 0x0C 0x30 0x03 0xC0
: item-fire-poker # "I prefer Texas Hold-em."
0x00 0x03 0x00 0x05 0x00 0x0A 0x00 0x16 0x00 0x2C 0x00 0x58 0x00 0xB0 0x01 0xE0
0x03 0xC0 0x77 0x00 0xFC 0x00 0xB8 0x00 0x30 0x00 0x60 0x00 0xC0 0x00 0x80 0x00
: item-spyglass # "Ah, my spyglass! I can examine things more closely now."
0x0F 0x80 0x10 0x40 0x2F 0xA0 0x50 0x50 0xA3 0x28 0xE3 0x28 0xA0 0xA8 0xE8 0x28
0x70 0x70 0x3F 0xD0 0x1F 0xF8 0x0F 0xB4 0x00 0x1A 0x00 0x0F 0x00 0x07 0x00 0x02
: item-title-pipe 0xFE 0x1C 0x2D 0xFC 0x0B 0x1E 0x1A 0x1D 0xF9 0x0F 0x22 0x29 0x1E 0xFF
: item-title-bullet 0xFE 0x2A 0x2D 0xFC 0x01 0x2E 0x25 0x25 0x1E 0x2D 0xFF
: item-title-vase 0xFE 0x15 0x2D 0xFC 0x0F 0x1E 0x30 0x2D 0x1E 0x2B 0xF9 0x15 0x1A 0x2C 0x1E 0xFF
: item-title-caviar 0xFE 0x0D 0x2D 0xFC 0x09 0x1A 0x2B 0xF9 0x28 0x1F 0xF9 0x02 0x1A 0x2F 0x22 0x1A 0x2B 0xFF
: item-title-skull 0xFE 0x1A 0x2D 0xFC 0x09 0x1A 0x1D 0x1E 0xF9 0x12 0x24 0x2E 0x25 0x25 0xFF
: item-title-snifter 0xFE 0x09 0x2D 0xFC 0x01 0x2B 0x1A 0x27 0x1D 0x32 0xF9 0x12 0x27 0x22 0x1F 0x2D 0x1E 0x2B 0xFF
: item-title-orb 0xFE 0x1D 0x2D 0xFC 0x06 0x25 0x1A 0x2C 0x2C 0xF9 0x0E 0x2B 0x1B 0xFF
: item-title-poker 0xFE 0x1A 0x2D 0xFC 0x05 0x22 0x2B 0x1E 0xF9 0x0F 0x28 0x24 0x1E 0x2B 0xFF
: item-title-spyglass 0xFE 0x21 0x2D 0xFC 0x12 0x29 0x32 0x20 0x25 0x1A 0x2C 0x2C 0xFF
: item-desc-pipe 0xFE 0x18 0x12 0x12 0x1E 0x1E 0x26 0x2C 0xF9 0x1A 0xF9 0x1B 0x22 0x2D 0xFE
0x18 0x1C 0x1D 0x1A 0x27 0x20 0x1E 0x2B 0x28 0x2E 0x2C 0xF9 0x2D 0x28 0xF9
0xFE 0x18 0x26 0x2C 0x26 0x28 0x24 0x1E 0x3E 0x3E 0x3E 0xFF
: item-desc-bullet 0xFE 0x0A 0x16 0x00 0x27 0xF9 0x28 0x2B 0x1D 0x22 0x27 0x1A 0x2B 0x32 0xFE
0x0A 0x20 0x21 0x28 0x2E 0x2C 0x1E 0x21 0x28 0x25 0x1D 0xF9 0x1B 0x2E 0x25
0x25 0x1E 0x2D 0x3E 0xFF
: item-desc-vase 0xFE 0x10 0x14 0x13 0x1A 0x1C 0x24 0x32 0x41 0xF9 0x1B 0x2E 0x2D 0xF9 0x1A
0x25 0x2C 0x28 0xFE 0x10 0x1E 0x2A 0x2E 0x22 0x2D 0x1E 0xF9 0x21 0x1E 0x1A
0x2F 0x32 0x3E 0x3E 0x3E 0xFF
: item-desc-caviar 0xFE 0x0B 0x12 0x05 0x22 0x2C 0x21 0xF9 0x1E 0x20 0x20 0x2C 0x41 0xF9 0xFE
0x0B 0x1C 0x05 0x22 0x2C 0x21 0xF9 0x1E 0x20 0x20 0x2C 0x41 0xF9 0xFE 0x0B
0x26 0x04 0x1A 0x2D 0xF9 0x2D 0x21 0x1E 0x26 0xF9 0x2E 0x29 0x43 0xF9 0x32
0x2E 0x26 0x3E 0xFF
: item-desc-skull 0xFE 0x00 0x12 0x12 0x2E 0x29 0x29 0x28 0x2C 0x1E 0x1D 0x25 0x32 0xF9 0x2C
0x2D 0x28 0x25 0x1E 0x27 0xFE 0x00 0x1C 0x1F 0x2B 0x28 0x26 0xF9 0x1A 0xF9
0x1F 0x1A 0x26 0x28 0x2E 0x2C 0xFE 0x00 0x26 0x2B 0x1A 0x29 0x29 0x1E 0x2B
0xF9 0x1A 0x27 0x1D 0xF9 0x26 0x1E 0x2B 0x1C 0x1E 0x27 0x1A 0x2B 0x32 0x3E
0xFF
: item-desc-snifter 0xFE 0x0A 0x10 0x08 0x42 0x2F 0x1E 0xF9 0x21 0x1A 0x1D 0xF9 0x2A 0x2E 0x22
0x2D 0x1E 0xFE 0x0A 0x1A 0x1E 0x27 0x28 0x2E 0x20 0x21 0xF9 0x2D 0x28 0xF9
0x1D 0x2B 0x22 0x27 0x24 0xFE 0x0A 0x24 0x1A 0x25 0x2B 0x1E 0x1A 0x1D 0x32
0x41 0xF9 0x08 0xF9 0x30 0x1A 0x20 0x1E 0x2B 0x3E 0xFF
: item-desc-orb 0xFE 0x01 0x16 0x08 0x2D 0xF9 0x1C 0x1A 0x2D 0x1C 0x21 0x1E 0x2C 0xF9 0x2D
0x21 0x1E 0xF9 0x25 0x22 0x20 0x21 0x2D 0xFE 0x01 0x20 0x1F 0x2B 0x28 0x26
0xF9 0x1E 0x2F 0x1E 0x2B 0x32 0xF9 0x1A 0x27 0x20 0x25 0x1E 0x3E 0x3E 0x3E
0xFF
: item-desc-poker 0xFE 0x06 0x16 0x08 0xF9 0x1F 0x1A 0x2B 0xF9 0x29 0x2B 0x1E 0x1F 0x1E 0x2B
0xF9 0x13 0x1E 0x31 0x1A 0x2C 0xF9 0xFE 0x06 0x20 0x21 0x28 0x25 0x1D 0x43
0x1E 0x26 0x41 0xF9 0x00 0x1C 0x1E 0x2C 0xF9 0x30 0x22 0x25 0x1D 0x3E 0xFF
: item-desc-spyglass 0xFE 0x03 0x12 0x00 0x21 0x1A 0x41 0xF9 0x1A 0xF9 0x2C 0x29 0x32 0x20 0x25
0x1A 0x2C 0x2C 0x3F 0xFE 0x03 0x1C 0x08 0xF9 0x1C 0x1A 0x27 0xF9 0x1E 0x31
0x1A 0x26 0x22 0x27 0x1E 0xF9 0x2D 0x21 0x22 0x27 0x20 0x2C 0xFE 0x03 0x26
0x26 0x28 0x2B 0x1E 0xF9 0x1C 0x25 0x28 0x2C 0x1E 0x25 0x32 0xF9 0x27 0x28
0x30 0x3E 0xFF
: item-icon-table
pointer item-lead-pipe
pointer item-bullet
pointer item-pewter-vase
pointer item-jar-of-caviar
pointer item-jade-skull
pointer item-brandy-snifter
pointer item-glass-orb
pointer item-fire-poker
pointer item-spyglass
: item-title-table
pointer item-title-pipe
pointer item-title-bullet
pointer item-title-vase
pointer item-title-caviar
pointer item-title-skull
pointer item-title-snifter
pointer item-title-orb
pointer item-title-poker
pointer item-title-spyglass
: item-desc-table
pointer item-desc-pipe
pointer item-desc-bullet
pointer item-desc-vase
pointer item-desc-caviar
pointer item-desc-skull
pointer item-desc-snifter
pointer item-desc-orb
pointer item-desc-poker
pointer item-desc-spyglass
to-code
: take-item
i := long item-positions
i += current-room
v0 := -1
save v0
;
: portrait
i += v2
i += v2
load v1
i := icon-indirection
save v1
indirect icon-indirection
v0 := 56
v1 := 20
sprite v0 v1 0
;
: describe-item
# (pass the item index in v2...)
thicken-plot SUSPICION_EXAMINE_ITEM
clear
if has-weapon == 1 begin
print no-time-for-that
jump dialog-pause
end
i := long item-icon-table
portrait
print-from-table v2 item-title-table
dialog-pause
print-from-table v2 item-desc-table
dialog-pause
if v2 == 8 begin
thicken-plot SUSPICION_TAKE_SPYGLASS
has-spyglass := 1
jump take-item
end
if has-spyglass != 1 then return
print upon-closer-inspection
dialog-pause
i := long murder-weapon
load v0
if v0 == v2 begin
print traces-of-blood
dialog-pause
print take-murder-weapon
dialog-yes-no
if v2 == 0 then return
thicken-plot SUSPICION_TAKE_WEAPON
has-weapon := 1
jump take-item
end
print nothing-unusual
dialog-pause
;
###########################################
#
# The Body
#
###########################################
to-data
: body-sprite # 16x16
0x70 0x00 0x89 0xF0 0x86 0x0C 0x40 0x62 0x30 0xDC 0x20 0x20 0x40 0x10 0x48 0x08
0x54 0x64 0x54 0x52 0x52 0x29 0x51 0x29 0x20 0x95 0x00 0x4A 0x00 0x48 0x00 0x30
: cycle-left 0x08 0x18 0x38 0x7F 0xFF 0x7F 0x38 0x18 0x08
: cycle-right 0x10 0x18 0x1C 0xFE 0xFF 0xFE 0x1C 0x18 0x10
: gather-npcs
0xFE 0x02 0x0A 0x00 0x26 0xF9 0x08 0xF9 0x2B 0x1E 0x1A 0x1D 0x32 0xF9 0x2D 0x28
0xF9 0x20 0x1A 0x2D 0x21 0x1E 0x2B 0xFE 0x02 0x14 0x2D 0x21 0x1E 0xF9 0x29 0x1A
0x2B 0x2D 0x32 0xF9 0x20 0x2E 0x1E 0x2C 0x2D 0x2C 0xF9 0x1A 0x27 0x1D 0xFE 0x02
0x1E 0x1E 0x31 0x29 0x28 0x2C 0x1E 0xF9 0x2D 0x21 0x1E 0xF9 0x24 0x22 0x25 0x25
0x1E 0x2B 0x40 0xFF
: who-dunnit
0xFE 0x08 0x04 0x16 0x21 0x28 0xF9 0x22 0x2C 0xF9 0x2D 0x21 0x1E 0xF9 0x24 0x22
0x25 0x25 0x1E 0x2B 0x40 0xFF
: make-your-case
0xFE 0x00 0x0C 0x13 0x21 0x1E 0xF9 0x20 0x2E 0x1E 0x2C 0x2D 0x2C 0xF9 0x20 0x1A
0x2D 0x21 0x1E 0x2B 0x1E 0x1D 0x41 0xFE 0x00 0x16 0x32 0x28 0x2E 0xF9 0x25 0x1A
0x32 0xF9 0x28 0x2E 0x2D 0xF9 0x32 0x28 0x2E 0x2B 0xF9 0x1C 0x1A 0x2C 0x1E 0xFE
0x00 0x20 0x1A 0x27 0x1D 0xF9 0x29 0x2B 0x1E 0x29 0x1A 0x2B 0x1E 0xF9 0x2D 0x28
0xF9 0x1C 0x1A 0x25 0x25 0xFE 0x00 0x2A 0x2D 0x21 0x1E 0xF9 0x29 0x28 0x25 0x22
0x1C 0x1E 0x3E 0x3E 0x3E 0xFF
: no-weapon-part-1 # $0 is murderer...
0xFE 0x00 0x03 0xFB 0xFE 0x00 0x0D 0x1B 0x2E 0x2B 0x2C 0x2D 0x2C 0xF9 0x28 0x2E
0x2D 0xF9 0x25 0x1A 0x2E 0x20 0x21 0x22 0x27 0x20 0x3E 0xFE 0x00 0x17 0xFE 0x00
0x21 0x44 0x18 0x28 0x2E 0x2B 0xF9 0x1E 0x2F 0x22 0x1D 0x1E 0x27 0x1C 0x1E 0xF9
0x22 0x2C 0xFE 0x00 0x2B 0xF9 0x27 0x28 0x2D 0x21 0x22 0x27 0x20 0xF9 0x1B 0x2E
0x2D 0xF9 0x21 0x1E 0x1A 0x2B 0x2C 0x1A 0x32 0x3F 0xFE 0x00 0x35 0xF9 0x16 0x21
0x1A 0x2D 0xF9 0x1A 0xF9 0x1F 0x28 0x28 0x25 0x3F 0x44 0xFF
: no-weapon-part-2
0xFE 0x00 0x03 0x16 0x22 0x2D 0x21 0x28 0x2E 0x2D 0xF9 0x1A 0xF9 0x30 0x1E 0x1A
0x29 0x28 0x27 0x41 0xFE 0x00 0x0D 0x2D 0x21 0x1E 0xF9 0x29 0x28 0x25 0x22 0x1C
0x1E 0xF9 0x1A 0x2B 0x1E 0x27 0x42 0x2D 0xFE 0x00 0x17 0x1C 0x28 0x27 0x2F 0x22
0x27 0x1C 0x1E 0x1D 0x41 0xF9 0x1E 0x22 0x2D 0x21 0x1E 0x2B 0x3E 0xFE 0x00 0x21
0xFE 0x00 0x2B 0x13 0x21 0x1E 0x32 0x42 0x2B 0x1E 0xF9 0x1F 0x28 0x2B 0x1C 0x1E
0x1D 0xF9 0x2D 0x28 0xF9 0x25 0x1E 0x2D 0xFE 0x00 0x35 0x32 0x28 0x2E 0xF9 0x1A
0x25 0x25 0xF9 0x20 0x28 0x41 0xF9 0x1F 0x28 0x2B 0xF9 0x27 0x28 0x30 0x3E 0xFF
: killer-goes-free
0xFE 0x02 0x0A 0x12 0x28 0x26 0x1E 0x30 0x21 0x1E 0x2B 0x1E 0x41 0xF9 0x1A 0xF9
0x24 0x22 0x25 0x25 0x1E 0x2B 0xF9 0xF9 0xFE 0x02 0x14 0x30 0x1A 0x25 0x24 0x2C
0xF9 0x1F 0x2B 0x1E 0x1E 0xF9 0x1A 0x26 0x28 0x27 0x20 0xF9 0x2E 0x2C 0x3E 0xF9
0xF9 0xFE 0x23 0x28 0x13 0x07 0x04 0xF9 0x04 0x0D 0x03 0x3E 0xFF
: wrong-culprit-part-1
0xFE 0x00 0x10 0xFB 0xFE 0x00 0x1A 0x2C 0x29 0x2E 0x2D 0x2D 0x1E 0x2B 0x2C 0xF9
0x22 0x27 0xF9 0x1D 0x22 0x2C 0x1B 0x1E 0x25 0x22 0x1E 0x1F 0xFE 0x00 0x24 0x1A
0x2D 0xF9 0x32 0x28 0x2E 0x2B 0xF9 0x1A 0x1C 0x1C 0x2E 0x2C 0x1A 0x2D 0x22 0x28
0x27 0x3F 0xFF
: wrong-culprit-part-2
0xFE 0x00 0x03 0x13 0x21 0x1E 0xF9 0x28 0x2D 0x21 0x1E 0x2B 0xF9 0x20 0x2E 0x1E
0x2C 0x2D 0x2C 0xF9 0xFE 0x00 0x0D 0x26 0x2E 0x2B 0x26 0x2E 0x2B 0xF9 0x2D 0x28
0xF9 0x28 0x27 0x1E 0xF9 0xFE 0x00 0x17 0x1A 0x27 0x28 0x2D 0x21 0x1E 0x2B 0xF9
0x30 0x1A 0x2B 0x22 0x25 0x32 0x3E 0xF9 0xFE 0x00 0x2B 0x13 0x21 0x1E 0xF9 0x29
0x28 0x25 0x22 0x1C 0x1E 0xF9 0xFE 0x00 0x35 0x2C 0x1E 0x1E 0x26 0xF9 0x1D 0x2E
0x1B 0x22 0x28 0x2E 0x2C 0x3E 0xFF
: wrong-culprit-part-3
0xFE 0x00 0x03 0x08 0x27 0xF9 0x1C 0x28 0x2E 0x2B 0x2D 0x41 0xF9 0xFE 0x00 0x0D
0xFB 0xF9 0x22 0x2C 0xF9 0xFE 0x00 0x17 0x1F 0x28 0x2E 0x27 0x1D 0xF9 0x22 0x27
0x27 0x28 0x1C 0x1E 0x27 0x2D 0x3E 0xF9 0xFE 0x00 0x2B 0x18 0x28 0x2E 0xF9 0x26
0x2E 0x2C 0x2D 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0x26 0x22 0x2C 0x2C 0x1E 0x1D 0xF9
0xFE 0x00 0x35 0x2C 0x28 0x26 0x1E 0x2D 0x21 0x22 0x27 0x20 0x3E 0x3E 0x3E 0xFF
: good-end-1
0xFE 0x07 0x08 0xFB 0x42 0x2C 0xF9 0xFE 0x07 0x12 0x1F 0x1A 0x1C 0x1E 0xF9 0x1C
0x28 0x27 0x2D 0x28 0x2B 0x2D 0x2C 0xF9 0x30 0x22 0x2D 0x21 0xF9 0xFE 0x07 0x1C
0x2B 0x1A 0x20 0x1E 0x3E 0xF9 0xFE 0x07 0x30 0x44 0x07 0x28 0x30 0xF9 0x1D 0x22
0x1D 0xF9 0x32 0x28 0x2E 0x3E 0x3E 0x3E 0x40 0x44 0xFF
: good-end-2
0xFE 0x05 0x10 0x13 0x21 0x1E 0xF9 0x29 0x28 0x25 0x22 0x1C 0x1E 0xF9 0x2C 0x28
0x28 0x27 0xFE 0x05 0x1A 0x1A 0x2B 0x2B 0x22 0x2F 0x1E 0xF9 0x2D 0x28 0xF9 0x2D
0x1A 0x24 0x1E 0xF9 0x2D 0x21 0x1E 0x26 0xFE 0x05 0x24 0x22 0x27 0x2D 0x28 0xF9
0x1C 0x2E 0x2C 0x2D 0x28 0x1D 0x32 0x3E 0xFF
: good-end-3
0xFE 0x05 0x04 0x00 0x27 0x28 0x2D 0x21 0x1E 0x2B 0xF9 0x2C 0x2E 0x1C 0x1C 0x1E
0x2C 0x2C 0x1F 0x2E 0x25 0xFE 0x05 0x0E 0x1C 0x1A 0x2C 0x1E 0x3E 0xF9 0x18 0x28
0x2E 0xF9 0x1C 0x1A 0x27 0xF9 0x2B 0x1E 0x2C 0x2D 0xFE 0x05 0x18 0x1E 0x1A 0x2C
0x32 0xF9 0x1A 0x2D 0xF9 0x27 0x22 0x20 0x21 0x2D 0x41 0xFE 0x05 0x22 0x1F 0x28
0x2B 0xF9 0x27 0x28 0x30 0x3E 0x3E 0x3E 0xF9 0xFE 0x23 0x32 0x13 0x07 0x04 0xF9
0x04 0x0D 0x03 0x3E 0xFF
: murder-dialog-1 # "Well, if it isn't our friend the detective."
0xFE 0x09 0x11 0x44 0x16 0x1E 0x25 0x25 0x41 0xF9 0x22 0x1F 0xF9 0x22 0x2D 0xF9
0x22 0x2C 0x27 0x42 0x2D 0xFE 0x09 0x1B 0x28 0x2E 0x2B 0xF9 0x1F 0x2B 0x22 0x1E
0x27 0x1D 0xF9 0x2D 0x21 0x1E 0xFE 0x09 0x25 0x1D 0x1E 0x2D 0x1E 0x1C 0x2D 0x22
0x2F 0x1E 0x3E 0x44 0xFF
: murder-dialog-2 # "I can't afford to risk this charade any longer. Game over, old chum."
0xFE 0x06 0x08 0x44 0x08 0xF9 0x1C 0x1A 0x27 0x42 0x2D 0xF9 0x1A 0x1F 0x1F 0x28
0x2B 0x1D 0xF9 0x2D 0x28 0xF9 0xF9 0xFE 0x06 0x12 0x2B 0x22 0x2C 0x24 0xF9 0x2D
0x21 0x22 0x2C 0xF9 0x1C 0x21 0x1A 0x2B 0x1A 0x1D 0x1E 0xF9 0xF9 0xFE 0x06 0x1C
0x1A 0x27 0x32 0xF9 0x25 0x28 0x27 0x20 0x1E 0x2B 0x3E 0xF9 0xFE 0x00 0x30 0xFD
0x06 0x1A 0x26 0x1E 0xF9 0x28 0x2F 0x1E 0x2B 0x41 0xF9 0x28 0x25 0x1D 0xF9 0x1C
0x21 0x2E 0x26 0x3E 0x44 0xFF
: terrible-fate
0xFE 0x0A 0x0E 0xFD 0x18 0x28 0x2E 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0x26 0x1E 0x2D
0xF9 0x30 0x22 0x2D 0x21 0xFE 0x0A 0x18 0x1A 0xF9 0x2D 0x1E 0x2B 0x2B 0x22 0x1B
0x25 0x1E 0xF9 0x1F 0x1A 0x2D 0x1E 0x3E 0xF9 0xF9 0xFE 0x23 0x32 0x13 0x07 0x04
0xF9 0x04 0x0D 0x03 0x3E 0xFF
: final-rank 0xFE 0x1D 0x0C 0x05 0x22 0x27 0x1A 0x25 0xF9 0x11 0x1A 0x27 0x24 0xFF
: rank-0 0xFE 0x09 0x1E 0xFC 0x01 0x25 0x28 0x28 0x1D 0x32 0xF9 0x02 0x21 0x1E 0x1A 0x2D 0x1E 0x2B 0xFF
: rank-1 0xFE 0x27 0x1E 0xFC 0x12 0x25 0x1E 0x2E 0x2D 0x21 0xFF
: rank-2 0xFE 0x1B 0x1E 0xFC 0x03 0x1E 0x2D 0x1E 0x1C 0x2D 0x22 0x2F 0x1E 0xFF
: rank-3 0xFE 0x23 0x1E 0xFC 0x06 0x2E 0x26 0x2C 0x21 0x28 0x1E 0xFF
: rank-4 0xFE 0x1F 0x1E 0xFC 0x02 0x25 0x2E 0x1E 0x25 0x1E 0x2C 0x2C 0xFF
: rank-thresholds
20 60 90 150 255
: rank-table
pointer rank-0
pointer rank-1
pointer rank-2
pointer rank-3
pointer rank-4
to-code
: murder-player
wait 60
i := long npc-murderer
load v2 - v2
introduce-npc
print murder-dialog-1
dialog-pause
print murder-dialog-2
dialog-pause
dialog-fill-screen
wait 60
print terrible-fate
jump show-rank
: describe-body
clear
print gather-npcs # confirm gathering...
dialog-yes-no
if v2 == 0 then return
# accuse!
v2 := random 0b111
loop
print who-dunnit
i := long npc-portrait-table
portrait
v1 := 25
v0 := 40
i := long cycle-left
sprite v0 v1 9
v0 := 80
i := long cycle-right
sprite v0 v1 9
print-from-table v2 npc-title-table
vf := key
clear
if vf == OCTO_KEY_D then v2 += 1
if vf == OCTO_KEY_A then v2 += -1
v0 := 0b111
v2 &= v0
if vf != OCTO_KEY_E then
again
accused-npc := v2
# the truth, and nothing but the truth:
i := long npc-murderer
load guilty-npc - guilty-npc
i := long murder-weapon
load guilty-weapon - guilty-weapon
print make-your-case
dialog-pause
if has-weapon == 0 begin
fmt-from-table guilty-npc npc-name-table print-string0-read
print no-weapon-part-1
dialog-pause
print no-weapon-part-2
dialog-pause
print killer-goes-free
suspicion-level := 255
jump show-rank
end
fmt-from-table accused-npc npc-name-table print-string0-read
if guilty-npc != accused-npc begin
print wrong-culprit-part-1
dialog-pause
print wrong-culprit-part-2
dialog-pause
print wrong-culprit-part-3
dialog-pause
print killer-goes-free
:calc bad-score { @ rank-thresholds + 3 }
suspicion-level := bad-score
jump show-rank
end
print good-end-1
dialog-pause
jump fencing-minigame
: show-rank
dialog-pause
v2 := 0
loop
i := long rank-thresholds
i += v2
load v0
while suspicion-level > v0
v2 += 1
again
print final-rank
print-from-table v2 rank-table
dialog-pause
current-room := GAME_OVER
;
###########################################
#
# NPCs
#
###########################################
to-data
# 8x15 overworld sprites padded to 8x16
: npc-sprites
: npc-0 0x3E 0x7C 0x76 0x66 0x7C 0x38 0x5C 0x5C 0x5C 0x64 0x7E 0x7E 0x7E 0x28 0x3C 0x00
: npc-1 0x78 0xFC 0x4C 0x58 0x78 0x7E 0x3E 0x3E 0x7A 0x78 0x3E 0x3E 0x36 0x36 0x7E 0x00
: npc-2 0x3C 0x3C 0x7A 0x24 0x1C 0x3E 0x7E 0x7E 0x7D 0x7D 0x34 0x34 0x38 0x38 0x1E 0x00
: npc-3 0x38 0x7C 0x72 0x24 0x34 0x7E 0x62 0x7E 0x3E 0x7F 0x77 0x36 0x36 0x3A 0x1D 0x00
: npc-4 0x78 0x58 0x4C 0x4C 0x7E 0x6E 0x3F 0x3F 0x1D 0x3F 0x3F 0x3F 0x3F 0x3F 0x12 0x00
: npc-5 0x7C 0x3A 0x34 0x64 0x24 0x3C 0x42 0x6A 0x5A 0x7E 0x7E 0x7E 0x7E 0x34 0x34 0x00
: npc-6 0x38 0x7C 0x44 0x6C 0x6C 0x7C 0x38 0x7C 0xFE 0xFE 0xFE 0x6C 0x28 0x28 0x6C 0x00
: npc-7 0x18 0x3C 0x24 0x7E 0xC3 0xEF 0xEF 0xEF 0xAF 0xC3 0xFD 0x7E 0x3C 0x3C 0x7E 0x00
# 16x16 portraits
: portrait-0
0x0F 0xFE 0x1F 0xBF 0x3F 0x9C 0x7F 0x0C 0x7F 0xDE 0x7E 0x06 0xFD 0x9E 0xFC 0x8E
0xF8 0x06 0xF8 0x26 0xD8 0x06 0x5C 0xF7 0x3C 0x0E 0x19 0xF8 0x2D 0xDE 0x76 0x3F
: portrait-1
0x1F 0x7C 0x7F 0xF8 0xFF 0xF8 0xF0 0xDC 0xB0 0x1E 0x39 0xDE 0x39 0xFC 0x3C 0x96
0x1C 0x16 0x2C 0x36 0x2E 0x7E 0x30 0x7E 0x3F 0x7C 0x1C 0xF6 0x3F 0xEF 0x6F 0xFF
: portrait-2
0x0F 0xF0 0x38 0x7C 0x30 0x1E 0x30 0x1E 0x30 0x1E 0x3F 0x1E 0xFF 0xEE 0xFF 0xFE
0x37 0xBD 0x1F 0xF9 0x1F 0x19 0x1B 0x06 0x18 0x06 0x0F 0x8C 0x0E 0x3E 0x1F 0xFE
: portrait-3
0x1F 0xE0 0x3F 0xF0 0x7E 0x08 0x78 0x76 0x78 0xE1 0x3C 0x61 0x66 0x1F 0x47 0x0E
0x41 0x86 0x2C 0x1C 0x3E 0x3C 0x1F 0x8C 0x33 0xCC 0x7C 0xF8 0xFE 0x34 0xFF 0x8E
: portrait-4
0x3F 0xC0 0x7F 0xF0 0x7F 0xF8 0xF6 0xEC 0xE3 0x74 0xF6 0x74 0xF7 0xB6 0xD2 0x3A
0xC0 0x1A 0xD8 0x5B 0xCC 0x7D 0xE0 0x5D 0xEE 0xDF 0xF1 0xFE 0x7F 0xBE 0x78 0x7A
: portrait-5
0x3F 0xC0 0xFF 0xF8 0x7F 0xE8 0x3F 0x34 0x34 0x2C 0x3B 0xA8 0x1B 0xDC 0x62 0x38
0x40 0x7C 0x78 0x3C 0x18 0x7C 0x17 0x7E 0x17 0xFF 0x0F 0xDF 0x1C 0x3F 0x3B 0xCF
: portrait-6
0x1F 0xF8 0x1F 0xF4 0x2F 0xFA 0x77 0xFE 0x70 0xFF 0xF0 0x3F 0xFE 0xFF 0xD4 0x57
0xD1 0x17 0xF9 0x3F 0xF9 0x3F 0xE8 0x2F 0x7B 0xBE 0x38 0x3C 0x4F 0xF2 0xFB 0x9F
: portrait-7
0x1F 0xF0 0x2F 0xE8 0x23 0x8C 0x5C 0x74 0x54 0x66 0x48 0x4A 0x6F 0xD6 0x47 0x8E
0x2F 0xEC 0x30 0x1F 0x7F 0xFB 0x5F 0xF3 0xCF 0xCF 0xE0 0x1D 0xBC 0xFB 0xFC 0xFF
: npc-title-0 # "Mme. Genta"
0xFE 0x17 0x2D 0xFC 0x0C 0x26 0x1E 0x3E 0xF9 0x06 0x1E 0x27 0x2D 0x1A 0xFF
: npc-title-1 # "Mr. Carmine"
0xFE 0x14 0x2D 0xFC 0x0C 0x2B 0x3E 0xF9 0x02 0x1A 0x2B 0x26 0x22 0x27 0x1E 0xFF
: npc-title-2 # "Sir Feldgrau"
0xFE 0x11 0x2D 0xFC 0x12 0x22 0x2B 0xF9 0x05 0x1E 0x25 0x1D 0x20 0x2B 0x1A 0x2E 0xFF
: npc-title-3 # "Prof. Puce"
0xFE 0x16 0x2D 0xFC 0x0F 0x2B 0x28 0x1F 0x3E 0xF9 0x0F 0x2E 0x1C 0x1E 0xFF
: npc-title-4 # "Lady Veridian"
0xFE 0x0D 0x2D 0xFC 0x0B 0x1A 0x1D 0x32 0xF9 0x15 0x1E 0x2B 0x22 0x1D 0x22 0x1A 0x27 0xFF
: npc-title-5 # "Cmdr. Coriander" (longest)
0xFE 0x05 0x2D 0xFC 0x02 0x26 0x1D 0x2B 0x3E 0xF9 0x02 0x28 0x2B 0x22 0x1A 0x27 0x1D 0x1E 0x2B 0xFF
: npc-title-6 # "Dr. Coquelicot"
0xFE 0x08 0x2D 0xFC 0x03 0x2B 0x3E 0xF9 0x02 0x28 0x2A 0x2E 0x1E 0x25 0x22 0x1C 0x28 0x2D 0xFF
: npc-title-7 # "Lord Zaffre"
0xFE 0x11 0x2D 0xFC 0x0B 0x28 0x2B 0x1D 0xF9 0xF9 0x19 0x1A 0x1F 0x1F 0x2B 0x1E 0xFF
: npc-name-0 0x0C 0x26 0x1E 0x3E 0xF9 0x06 0x1E 0x27 0x2D 0x1A 0xFF
: npc-name-1 0x0C 0x2B 0x3E 0xF9 0x02 0x1A 0x2B 0x26 0x22 0x27 0x1E 0xFF
: npc-name-2 0x12 0x22 0x2B 0xF9 0x05 0x1E 0x25 0x1D 0x20 0x2B 0x1A 0x2E 0xFF
: npc-name-3 0x0F 0x2B 0x28 0x1F 0x3E 0xF9 0x0F 0x2E 0x1C 0x1E 0xFF
: npc-name-4 0x0B 0x1A 0x1D 0x32 0xF9 0x15 0x1E 0x2B 0x22 0x1D 0x22 0x1A 0x27 0xFF
: npc-name-5 0x02 0x26 0x1D 0x2B 0x3E 0xF9 0x02 0x28 0x2B 0x22 0x1A 0x27 0x1D 0x1E 0x2B 0xFF
: npc-name-6 0x03 0x2B 0x3E 0xF9 0x02 0x28 0x2A 0x2E 0x1E 0x25 0x22 0x1C 0x28 0x2D 0xFF
: npc-name-7 0x0B 0x28 0x2B 0x1D 0xF9 0xF9 0x19 0x1A 0x1F 0x1F 0x2B 0x1E 0xFF
: npc-scoff-0 # "Still snooping about, I see? What was I doing?"
0xFE 0x00 0x0D 0x44 0x12 0x2D 0x22 0x25 0x25 0xF9 0x2C 0x27 0x28 0x28 0x29 0x22
0x27 0x20 0xF9 0x1A 0x1B 0x28 0x2E 0x2D 0xF9 0xFE 0x00 0x17 0x08 0xF9 0x2C 0x1E
0x1E 0x40 0xF9 0x06 0x28 0x28 0x1D 0xF9 0x25 0x2E 0x1C 0x24 0x3E 0xF9 0xF9 0xFE
0x00 0x2B 0x3E 0x3E 0x3E 0x16 0x21 0x1A 0x2D 0xF9 0x30 0x1A 0x2C 0xF9 0x08 0xF9
0x1D 0x28 0x22 0x27 0x20 0x40 0x44 0xFF
: npc-scoff-1 # "I suppose you want to know my wereabouts this evening?"
0xFE 0x00 0x0F 0x44 0x08 0xF9 0x2C 0x2E 0x29 0x29 0x28 0x2C 0x1E 0xF9 0x32 0x28
0x2E 0xF9 0x30 0x1A 0x27 0x2D 0xF9 0xFE 0x00 0x19 0x2D 0x28 0xF9 0x24 0x27 0x28
0x30 0xF9 0x26 0x32 0xF9 0x30 0x1E 0x2B 0x1E 0x1A 0x1B 0x28 0x2E 0x2D 0x2C 0xF9
0xFE 0x00 0x23 0x2D 0x21 0x22 0x2C 0xF9 0x1E 0x2F 0x1E 0x27 0x22 0x27 0x20 0x40
0x44 0xFF
: npc-scoff-2 # "Oh, come now. You can't believe I was responsible for this?"
0xFE 0x04 0x0C 0x44 0x0E 0x21 0x41 0xF9 0x1C 0x28 0x26 0x1E 0xF9 0x27 0x28 0x30
0x3F 0xF9 0xFE 0x04 0x16 0x18 0x28 0x2E 0xF9 0x1C 0x1A 0x27 0x42 0x2D 0xF9 0x1B
0x1E 0x25 0x22 0x1E 0x2F 0x1E 0xF9 0x08 0xF9 0xFE 0x04 0x20 0x30 0x1A 0x2C 0xF9
0x2B 0x1E 0x2C 0x29 0x28 0x27 0x2C 0x22 0x1B 0x25 0x1E 0xF9 0x1F 0x28 0x2B 0xF9
0xFE 0x04 0x2A 0x1A 0x27 0x32 0xF9 0x28 0x1F 0xF9 0x2D 0x21 0x22 0x2C 0x40 0x44
0xFF
: npc-scoff-3 # "I'll have you know I was quite occupied during this vile business."
0xFE 0x01 0x0C 0x44 0x08 0x42 0x25 0x25 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0x32 0x28
0x2E 0xF9 0x24 0x27 0x28 0x30 0x41 0xF9 0xFE 0x01 0x16 0x08 0xF9 0x30 0x1A 0x2C
0xF9 0x2A 0x2E 0x22 0x2D 0x1E 0xF9 0x28 0x1C 0x1C 0x2E 0x29 0x22 0x1E 0x1D 0xF9
0xFE 0x01 0x20 0x1D 0x2E 0x2B 0x22 0x27 0x20 0xF9 0x1A 0x25 0x25 0xF9 0x28 0x1F
0xF9 0x2D 0x21 0x22 0x2C 0xF9 0xFE 0x01 0x2A 0x2F 0x22 0x25 0x1E 0xF9 0x1B 0x2E
0x2C 0x22 0x27 0x1E 0x2C 0x2C 0x3F 0x44 0xFF
: npc-scoff-4 # "Regarding tonight, I assure you I have nothing to hide."
0xFE 0x05 0x11 0x44 0x11 0x1E 0x20 0x1A 0x2B 0x1D 0x22 0x27 0x20 0xF9 0x2D 0x28
0x27 0x22 0x20 0x21 0x2D 0x41 0xF9 0xFE 0x05 0x1B 0x08 0xF9 0x1A 0x2C 0x2C 0x2E
0x2B 0x1E 0xF9 0x32 0x28 0x2E 0xF9 0x08 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0xFE 0x05
0x25 0x27 0x28 0x2D 0x21 0x22 0x27 0x20 0xF9 0x2D 0x28 0xF9 0x21 0x22 0x1D 0x1E
0x3F 0x44 0xFF
: npc-scoff-5 # "Where was I all evening? Hrm. Fine, I'll tell you."
0xFE 0x00 0x0A 0x44 0x16 0x21 0x1E 0x2B 0x1E 0xF9 0x30 0x1A 0x2C 0xF9 0x08 0xF9
0x1A 0x25 0x25 0xF9 0xFE 0x00 0x14 0x1E 0x2F 0x1E 0x27 0x22 0x27 0x20 0x40 0xF9
0x07 0x2E 0x26 0x29 0x21 0x3E 0xF9 0xFE 0x00 0x28 0x05 0x22 0x27 0x1E 0x41 0xF9
0x08 0x42 0x25 0x25 0xF9 0x2D 0x1E 0x25 0x25 0xF9 0x32 0x28 0x2E 0x3E 0x44 0xFF
: npc-scoff-6 # "No beating around the bush, then? I think I know what you want to hear."
0xFE 0x04 0x0A 0x44 0x0D 0x28 0xF9 0x1B 0x1E 0x1A 0x2D 0x22 0x27 0x20 0xF9 0x1A
0x2B 0x28 0x2E 0x27 0x1D 0xFE 0x04 0x14 0x2D 0x21 0x1E 0xF9 0x1B 0x2E 0x2C 0x21
0x41 0xF9 0x2D 0x21 0x1E 0x27 0x40 0xFE 0x04 0x1E 0x08 0xF9 0x2D 0x21 0x22 0x27
0x24 0xF9 0x08 0xF9 0x24 0x27 0x28 0x30 0xF9 0x30 0x21 0x1A 0x2D 0xFE 0x04 0x28
0x32 0x28 0x2E 0xF9 0x30 0x1A 0x27 0x2D 0xF9 0x2D 0x28 0xF9 0x21 0x1E 0x1A 0x2B
0x3E 0x44 0xFF
: npc-scoff-7 # "I dearly hope you can solve this, old chum. As for myself, well..."
0xFE 0x08 0x03 0x44 0x08 0xF9 0x1D 0x1E 0x1A 0x2B 0x25 0x32 0xF9 0x21 0x28 0x29
0x1E 0xF9 0x32 0x28 0x2E 0xF9 0xFE 0x08 0x0D 0x1C 0x1A 0x27 0xF9 0x2C 0x28 0x25
0x2F 0x1E 0xF9 0x2D 0x21 0x22 0x2C 0x41 0xF9 0xFE 0x08 0x17 0x28 0x25 0x1D 0xF9
0x1C 0x21 0x2E 0x26 0x3E 0xF9 0xFE 0x08 0x2B 0x00 0x2C 0xF9 0x1F 0x28 0x2B 0xF9
0x26 0x32 0x2C 0x1E 0x25 0x1F 0x41 0xF9 0xFE 0x08 0x35 0x30 0x1E 0x25 0x25 0x3E
0x3E 0x3E 0x44 0xFF
: npc-scoff-8 # "Hm? Did you want something? Oh, of course, of course."
0xFE 0x0D 0x08 0x44 0x07 0x26 0x40 0xF9 0x03 0x22 0x1D 0xF9 0x32 0x28 0x2E 0xF9
0x30 0x1A 0x27 0x2D 0xFE 0x0D 0x12 0x2C 0x28 0x26 0x1E 0x2D 0x21 0x22 0x27 0x20
0x40 0xFE 0x0D 0x1C 0xFE 0x0D 0x26 0x0E 0x21 0x41 0xF9 0x28 0x1F 0xF9 0x1C 0x28
0x2E 0x2B 0x2C 0x1E 0x41 0xFE 0x0D 0x30 0x28 0x1F 0xF9 0x1C 0x28 0x2E 0x2B 0x2C
0x1E 0x3E 0x44 0xFF
: room-name-0 0x25 0x22 0x1B 0x2B 0x1A 0x2B 0x32 0xFF
: room-name-1 0x1B 0x1A 0x2D 0x21 0x2B 0x28 0x28 0x26 0xFF
: room-name-2 0x1B 0x1E 0x1D 0x2B 0x28 0x28 0x26 0xFF
: room-name-3 0x1D 0x2B 0x1A 0x30 0x22 0x27 0x20 0xF9 0x2B 0x28 0x28 0x26 0xFF
: room-name-4 0x29 0x1A 0x2B 0x25 0x28 0x2B 0xFF
: room-name-5 0x1D 0x22 0x27 0x22 0x27 0x20 0xF9 0x2B 0x28 0x28 0x26 0xFF
: room-name-6 0x2C 0x2D 0x2E 0x1D 0x32 0xFF
: room-name-7 0x1C 0x28 0x27 0x2C 0x1E 0x2B 0x2F 0x1A 0x2D 0x28 0x2B 0x32 0xFF
: room-name-8 0x24 0x22 0x2D 0x1C 0x21 0x1E 0x27 0xFF
: room-name-9 0x29 0x1A 0x27 0x2D 0x2B 0x32 0xFF
: npc-was-alone # $1 is location.
0xFE 0x0E 0x10 0x44 0x08 0xF9 0x30 0x1A 0x2C 0xF9 0x1A 0x25 0x28 0x27 0x1E 0xF9 0x1A
0x25 0x25 0xF9 0xFE 0x0E 0x1A 0x1E 0x2F 0x1E 0x27 0x22 0x27 0x20 0x41 0xF9 0x22 0x27
0xF9 0x2D 0x21 0x1E 0xF9 0xFE 0x0E 0x24 0xFA 0x3E 0x44 0xFF
: npc-was-with-in # $0 is partner, $1 is location.
0xFE 0x00 0x11 0x44 0x08 0xF9 0x30 0x1A 0x2C 0xF9 0x30 0x22 0x2D 0x21 0xF9 0xFE 0x00
0x1B 0xFB 0x41 0xF9 0xFE 0x00 0x25 0x22 0x27 0xF9 0x2D 0x21 0x1E 0xF9 0xFA 0x3E 0x44
0xFF
: npc-portrait-table
pointer portrait-0
pointer portrait-1
pointer portrait-2
pointer portrait-3
pointer portrait-4
pointer portrait-5
pointer portrait-6
pointer portrait-7
: npc-title-table
pointer npc-title-0
pointer npc-title-1
pointer npc-title-2
pointer npc-title-3
pointer npc-title-4
pointer npc-title-5
pointer npc-title-6
pointer npc-title-7
: npc-name-table
pointer npc-name-0
pointer npc-name-1
pointer npc-name-2
pointer npc-name-3
pointer npc-name-4
pointer npc-name-5
pointer npc-name-6
pointer npc-name-7
: npc-scoff-table
pointer npc-scoff-0
pointer npc-scoff-1
pointer npc-scoff-2
pointer npc-scoff-3
pointer npc-scoff-4
pointer npc-scoff-5
pointer npc-scoff-6
pointer npc-scoff-7
: room-name-table
pointer room-name-0
pointer room-name-1
pointer room-name-2
pointer room-name-3
pointer room-name-4
pointer room-name-5
pointer room-name-6
pointer room-name-7
pointer room-name-8
pointer room-name-9
to-code
: introduce-npc
# (pass the npc index in v2...)
clear
i := long npc-portrait-table
portrait
print-from-table v2 npc-title-table
dialog-pause
;
: describe-npc
thicken-plot SUSPICION_TALK_NPC
introduce-npc
i := long npc-scoff-index
i += v2
load v0
print-from-table v0 npc-scoff-table
dialog-pause
# find alibi slot w/ our npc
v0 := 0
loop
i := long npc-alibis
i += v0
load v1 - v1
while v1 != v2
v0 += 1
again
if v0 == 6 begin
# lone NPC
i := long npc-alibi-r4
load v0
fmt-from-table v0 room-name-table print-string1-read
print npc-was-alone
jump dialog-pause
end
if v0 == 7 begin
thicken-plot SUSPICION_TALK_MURDERER
# murderer
i := long npc-alibi-r5
load v0
fmt-from-table v0 room-name-table print-string1-read
i := long npc-alibis
load v0
else
# normal alibi
v1 := v0
vf := 0b110
v1 &= vf # v1 is now the base [0,2,4] alibi slot index.
i := long npc-alibi-rooms
v1 >>= v1 # v1 is now an alibi room index
i += v1
load v1 - v1 # v1 is now the alibi room for the current slot.
fmt-from-table v1 room-name-table print-string1-read
i := long npc-alibis
vf := 1
v0 ^= vf # v0 is now the slot index of the partner NPC.
i += v0
load v0 # v0 is now the id of the partner NPC.
end
fmt-from-table v0 npc-name-table print-string0-read
print npc-was-with-in
jump dialog-pause
###########################################
#
# Decorations and Passages
#
###########################################
to-data
: d1-library # "Countless volumes on the history of the Orient. Fascinating."
0xFE 0x0A 0x08 0x02 0x28 0x2E 0x27 0x2D 0x25 0x1E 0x2C 0x2C 0xF9 0x2F 0x28 0x25
0x2E 0x26 0x1E 0x2C 0xF9 0xFE 0x0A 0x12 0x28 0x27 0xF9 0x2D 0x21 0x1E 0xF9 0x21
0x22 0x2C 0x2D 0x28 0x2B 0x32 0xF9 0x28 0x1F 0xF9 0xFE 0x0A 0x1C 0x2D 0x21 0x1E
0xF9 0x0E 0x2B 0x22 0x1E 0x27 0x2D 0x3E 0xF9 0xFE 0x0A 0x2E 0x05 0x1A 0x2C 0x1C
0x22 0x27 0x1A 0x2D 0x22 0x27 0x20 0x3E 0xFF
: d2-library # "Philosophy, Logic, Game theory... Mosaic tiling? How Curious."
0xFE 0x0A 0x08 0x0F 0x21 0x22 0x25 0x28 0x2C 0x28 0x29 0x21 0x32 0x41 0xF9 0x0B
0x28 0x20 0x22 0x1C 0x41 0xF9 0xFE 0x0A 0x12 0x06 0x1A 0x26 0x1E 0xF9 0x2D 0x21
0x1E 0x28 0x2B 0x32 0x3E 0x3E 0x3E 0xF9 0xFE 0x0A 0x1C 0x0C 0x28 0x2C 0x1A 0x22
0x1C 0xF9 0x2D 0x22 0x25 0x22 0x27 0x20 0x40 0xF9 0xFE 0x0A 0x2E 0x07 0x28 0x30
0xF9 0x02 0x2E 0x2B 0x22 0x28 0x2E 0x2C 0x3E 0xFF
: d1-bathroom # "Spare towels, dirty clothes. Nothing terribly out of the ordinary."
0xFE 0x04 0x0C 0x12 0x29 0x1A 0x2B 0x1E 0xF9 0x2D 0x28 0x30 0x1E 0x25 0x2C 0x41
0xFE 0x04 0x16 0x1D 0x22 0x2B 0x2D 0x32 0xF9 0x1C 0x25 0x28 0x2D 0x21 0x1E 0x2C
0x3E 0xFE 0x04 0x20 0x0D 0x28 0x2D 0x21 0x22 0x27 0x20 0xF9 0x2D 0x1E 0x2B 0x2B
0x22 0x1B 0x25 0x32 0xFE 0x04 0x2A 0x28 0x2E 0x2D 0xF9 0x28 0x1F 0xF9 0x2D 0x21
0x1E 0xF9 0x28 0x2B 0x1D 0x22 0x27 0x1A 0x2B 0x32 0x3E 0xFF
: d2-bathroom # "The bathmat feels damp to the touch. Someone has showered here recently."
0xFE 0x02 0x0C 0x13 0x21 0x1E 0xF9 0x1B 0x1A 0x2D 0x21 0x26 0x1A 0x2D 0xF9 0x1F
0x1E 0x1E 0x25 0x2C 0xFE 0x02 0x16 0x1D 0x1A 0x26 0x29 0xF9 0x2D 0x28 0xF9 0x2D
0x21 0x1E 0xF9 0x2D 0x28 0x2E 0x1C 0x21 0x3E 0xFE 0x02 0x20 0x12 0x28 0x26 0x1E
0x28 0x27 0x1E 0xF9 0x21 0x1A 0x2C 0xF9 0x2C 0x21 0x28 0x30 0x1E 0x2B 0x1E 0x1D
0xFE 0x02 0x2A 0x21 0x1E 0x2B 0x1E 0xF9 0x2B 0x1E 0x1C 0x1E 0x27 0x2D 0x25 0x32
0x3E 0x3E 0x3E 0xFF
: d1-bedroom # "The covers are warm to the touch. How scandalous!"
0xFE 0x02 0x0A 0x13 0x21 0x1E 0xF9 0x1C 0x28 0x2F 0x1E 0x2B 0x2C 0xF9 0x1A 0x2B
0x1E 0xF9 0x2C 0x2D 0x22 0x25 0x25 0xF9 0xFE 0x02 0x14 0x30 0x1A 0x2B 0x26 0xF9
0x2D 0x28 0xF9 0x2D 0x21 0x1E 0xF9 0x2D 0x28 0x2E 0x1C 0x21 0x3E 0xF9 0xFE 0x02
0x23 0x08 0x2D 0xF9 0x2C 0x1E 0x1E 0x26 0x2C 0xF9 0x2D 0x21 0x1E 0xF9 0x20 0x2E
0x1E 0x2C 0x2D 0x2C 0xF9 0xFE 0x02 0x2D 0x21 0x1A 0x2F 0x1E 0xF9 0x1B 0x1E 0x1E
0x27 0x3E 0x3E 0x3E 0xF9 0x1B 0x2E 0x2C 0x32 0x3E 0x3E 0x3E 0xFF
: d2-bedroom # "On the desk is an open decanter of a particularly peaty scotch."
0xFE 0x05 0x08 0x0E 0x27 0xF9 0x2D 0x21 0x1E 0xF9 0x1D 0x1E 0x2C 0x24 0xF9 0x22
0x2C 0xF9 0x1A 0x27 0xFE 0x05 0x12 0x28 0x29 0x1E 0x27 0xF9 0x1D 0x1E 0x1C 0x1A
0x27 0x2D 0x1E 0x2B 0xF9 0x28 0x1F 0xF9 0x1A 0xFE 0x05 0x1C 0x29 0x1A 0x2B 0x2D
0x22 0x1C 0x2E 0x25 0x1A 0x2B 0x25 0x32 0xF9 0x29 0x1E 0x1A 0x2D 0x32 0xFE 0x05
0x26 0x2C 0x1C 0x28 0x2D 0x1C 0x21 0x3E 0xF9 0x03 0x28 0x27 0x42 0x2D 0xF9 0x26
0x22 0x27 0x1D 0xFE 0x05 0x30 0x22 0x1F 0xF9 0x08 0xF9 0x1D 0x28 0x3E 0x3E 0x3E
0xFF
: d1-drawing-room # "A crude sketch of a naked woman. The eyes have been carefully cut out. Most unsettling."
0xFE 0x06 0x02 0x00 0xF9 0x1C 0x2B 0x2E 0x1D 0x1E 0xF9 0x2C 0x24 0x1E 0x2D 0x1C
0x21 0xF9 0x28 0x1F 0xF9 0x1A 0xF9 0xFE 0x06 0x0C 0x27 0x1A 0x24 0x1E 0x1D 0xF9
0x30 0x28 0x26 0x1A 0x27 0x3E 0xF9 0xFE 0x06 0x16 0x13 0x21 0x1E 0xF9 0x1E 0x32
0x1E 0x2C 0xF9 0x21 0x1A 0x2F 0x1E 0xF9 0x1B 0x1E 0x1E 0x27 0xF9 0xFE 0x06 0x20
0x1C 0x1A 0x2B 0x1E 0x1F 0x2E 0x25 0x25 0x32 0xF9 0x1C 0x2E 0x2D 0xF9 0x28 0x2E
0x2D 0x3E 0xF9 0xFE 0x06 0x34 0x0C 0x28 0x2C 0x2D 0xF9 0x2E 0x27 0x2C 0x1E 0x2D
0x2D 0x25 0x22 0x27 0x20 0x3E 0xFF
: d2-drawing-room # "A sketch of a featureless black cube. Quite modern."
0xFE 0x16 0x06 0x00 0xF9 0x2C 0x24 0x1E 0x2D 0x1C 0x21 0xF9 0x28 0x1F 0xF9 0x1A
0xF9 0xFE 0x16 0x10 0x1F 0x1E 0x1A 0x2D 0x2E 0x2B 0x1E 0x25 0x1E 0x2C 0x2C 0xF9
0xFE 0x16 0x1A 0x1B 0x25 0x1A 0x1C 0x24 0xF9 0x1C 0x2E 0x1B 0x1E 0x3E 0xF9 0xFE
0x16 0x2E 0x10 0x2E 0x22 0x2D 0x1E 0xF9 0x26 0x28 0x1D 0x1E 0x2B 0x27 0x3E 0xFF
# editor's note: yes, I know that a "drawing room" is not typically
# dedicated to literal drawings and sketches. It's a joke!
: d1-parlor # "A half-written party invitation. The recipient is hastily scratched out."
0xFE 0x00 0x04 0x00 0xF9 0x21 0x1A 0x25 0x1F 0x43 0x30 0x2B 0x22 0x2D 0x2D 0x1E
0x27 0xF9 0x29 0x1A 0x2B 0x2D 0x32 0xF9 0xF9 0xFE 0x00 0x0E 0x22 0x27 0x2F 0x22
0x2D 0x1A 0x2D 0x22 0x28 0x27 0x3E 0xF9 0xF9 0xFE 0x00 0x1C 0x13 0x21 0x1E 0xF9
0x2B 0x1E 0x1C 0x22 0x29 0x22 0x1E 0x27 0x2D 0x42 0x2C 0xF9 0xF9 0xFE 0x00 0x26
0x27 0x1A 0x26 0x1E 0xF9 0x21 0x1A 0x2C 0xF9 0x1B 0x1E 0x1E 0x27 0xF9 0x21 0x1A
0x2C 0x2D 0x22 0x25 0x32 0xF9 0xF9 0xFE 0x00 0x30 0x2C 0x1C 0x2B 0x1A 0x2D 0x1C
0x21 0x1E 0x1D 0xF9 0x28 0x2E 0x2D 0x3E 0x3E 0x3E 0xFF
: d2-parlor # "Well-worn armchairs of the finest mink leather. A tad ostentatious."
0xFE 0x05 0x0C 0x16 0x1E 0x25 0x25 0x43 0x30 0x28 0x2B 0x27 0xF9 0x1A 0x2B 0x26
0x1C 0x21 0x1A 0x22 0x2B 0x2C 0xFE 0x05 0x16 0x28 0x1F 0xF9 0x2D 0x21 0x1E 0xF9
0x1F 0x22 0x27 0x1E 0x2C 0x2D 0xF9 0x26 0x22 0x27 0x24 0xFE 0x05 0x20 0x25 0x1E
0x1A 0x2D 0x21 0x1E 0x2B 0x3E 0xF9 0x00 0xF9 0x2D 0x1A 0x1D 0xFE 0x05 0x2A 0x28
0x2C 0x2D 0x1E 0x27 0x2D 0x1A 0x2D 0x22 0x28 0x2E 0x2C 0x41 0xF9 0x27 0x28 0x40
0xFF
: d1-dining-room # "What remains of dinner. I daresay I've lost my appetite."
0xFE 0x04 0x08 0x16 0x21 0x1A 0x2D 0xF9 0x2B 0x1E 0x26 0x1A 0x22 0x27 0x2C 0xF9
0xF9 0xFE 0x04 0x12 0x28 0x1F 0xF9 0x1D 0x22 0x27 0x27 0x1E 0x2B 0x3E 0xF9 0xF9
0xFE 0x04 0x26 0x08 0xF9 0x1D 0x1A 0x2B 0x1E 0x2C 0x1A 0x32 0xF9 0x08 0x42 0x2F
0x1E 0xF9 0x25 0x28 0x2C 0x2D 0xF9 0xF9 0xFE 0x04 0x30 0x26 0x32 0xF9 0x1A 0x29
0x29 0x1E 0x2D 0x22 0x2D 0x1E 0x3E 0xFF
: d2-dining-room # "A sterling silver tea set. Someone seems to have made off with the sugar."
0xFE 0x08 0x02 0x00 0xF9 0x2C 0x2D 0x1E 0x2B 0x25 0x22 0x27 0x20 0xF9 0x2C 0x22
0x25 0x2F 0x1E 0x2B 0xF9 0xFE 0x08 0x0C 0x2D 0x1E 0x1A 0xF9 0x2C 0x1E 0x2D 0x3E
0xF9 0xFE 0x08 0x20 0x12 0x28 0x26 0x1E 0x28 0x27 0x1E 0xF9 0x2C 0x1E 0x1E 0x26
0x2C 0xF9 0x2D 0x28 0xF9 0xFE 0x08 0x2A 0x21 0x1A 0x2F 0x1E 0xF9 0x26 0x1A 0x1D
0x1E 0xF9 0x28 0x1F 0x1F 0xF9 0x30 0x22 0x2D 0x21 0xF9 0xFE 0x08 0x34 0x2D 0x21
0x1E 0xF9 0x2C 0x2E 0x20 0x1A 0x2B 0x3E 0xFF
: d1-study # "A leatherbound volume describing ancient torture techniques. Ghastly stuff."
0xFE 0x00 0x0A 0x00 0xF9 0x25 0x1E 0x1A 0x2D 0x21 0x1E 0x2B 0x1B 0x28 0x2E 0x27
0x1D 0xF9 0x2F 0x28 0x25 0x2E 0x26 0x1E 0xFE 0x00 0x14 0x1D 0x1E 0x2C 0x1C 0x2B
0x22 0x1B 0x22 0x27 0x20 0xF9 0x1A 0x27 0x1C 0x22 0x1E 0x27 0x2D 0xFE 0x00 0x1E
0x2D 0x28 0x2B 0x2D 0x2E 0x2B 0x1E 0xF9 0x2D 0x1E 0x1C 0x21 0x27 0x22 0x2A 0x2E
0x1E 0x2C 0x3E 0xFE 0x00 0x28 0x06 0x21 0x1A 0x2C 0x2D 0x25 0x32 0xF9 0x2C 0x2D
0x2E 0x1F 0x1F 0x3E 0xFF
: d2-study # "Our host's beloved collection of mystery novels. Darkly ironic, given tonight's festivities."
0xFE 0x00 0x03 0x0E 0x2E 0x2B 0xF9 0x21 0x28 0x2C 0x2D 0x42 0x2C 0xF9 0x1B 0x1E
0x25 0x28 0x2F 0x1E 0x1D 0xFE 0x00 0x0D 0x1C 0x28 0x25 0x25 0x1E 0x1C 0x2D 0x22
0x28 0x27 0xF9 0x28 0x1F 0xF9 0x26 0x32 0x2C 0x2D 0x1E 0x2B 0x32 0xFE 0x00 0x17
0x27 0x28 0x2F 0x1E 0x25 0x2C 0x3E 0xFE 0x00 0x21 0x03 0x1A 0x2B 0x24 0x25 0x32
0xF9 0x22 0x2B 0x28 0x27 0x22 0x1C 0x41 0xF9 0x20 0x22 0x2F 0x1E 0x27 0xFE 0x00
0x2B 0x2D 0x21 0x1E 0xF9 0x1E 0x2F 0x1E 0x27 0x22 0x27 0x20 0x42 0x2C 0xFE 0x00
0x35 0x44 0x1F 0x1E 0x2C 0x2D 0x22 0x2F 0x22 0x2D 0x22 0x1E 0x2C 0x44 0x3E 0xFF
: d1-conservatory # "Rain patters against the dark windowpanes."
0xFE 0x00 0x07 0x11 0x1A 0x22 0x27 0xF9 0x29 0x1A 0x2D 0x2D 0x1E 0x2B 0x2C 0xF9
0x1A 0x20 0x1A 0x22 0x27 0x2C 0x2D 0xF9 0xFE 0x00 0x11 0x2D 0x21 0x1E 0xF9 0x1D
0x1A 0x2B 0x24 0xF9 0x30 0x22 0x27 0x1D 0x28 0x30 0x29 0x1A 0x27 0x1E 0x2C 0x3E
0xF9 0xFE 0x00 0x25 0x08 0x2D 0x42 0x2C 0xF9 0x2C 0x2D 0x22 0x25 0x25 0xF9 0x2C
0x2D 0x28 0x2B 0x26 0x22 0x27 0x20 0xF9 0xFE 0x00 0x2F 0x21 0x1A 0x2B 0x1D 0xF9
0x28 0x2E 0x2D 0x2C 0x22 0x1D 0x1E 0x3E 0xFF
: d2-conservatory # "The loose soil in this pot suggests recent excavation."
0xFE 0x03 0x11 0x13 0x21 0x1E 0xF9 0x25 0x28 0x28 0x2C 0x1E 0xF9 0x2C 0x28 0x22
0x25 0xF9 0x22 0x27 0xFE 0x03 0x1B 0x2D 0x21 0x22 0x2C 0xF9 0x29 0x28 0x2D 0xF9
0x2C 0x2E 0x20 0x20 0x1E 0x2C 0x2D 0x2C 0xFE 0x03 0x25 0x2B 0x1E 0x1C 0x1E 0x27
0x2D 0xF9 0x1E 0x31 0x1C 0x1A 0x2F 0x1A 0x2D 0x22 0x28 0x27 0x3E 0x3E 0x3E 0xFF
: d1-kitchen # "A slew of recipe books. The master of the house was quite the gourmand."
0xFE 0x03 0x0C 0x00 0xF9 0x2C 0x25 0x1E 0x30 0xF9 0x28 0x1F 0xF9 0x2B 0x1E 0x1C
0x22 0x29 0x1E 0xFE 0x03 0x16 0x1B 0x28 0x28 0x24 0x2C 0x3E 0xF9 0x13 0x21 0x1E
0xF9 0x26 0x1A 0x2C 0x2D 0x1E 0x2B 0xF9 0x28 0x1F 0xFE 0x03 0x20 0x2D 0x21 0x1E
0xF9 0x21 0x28 0x2E 0x2C 0x1E 0xF9 0x30 0x1A 0x2C 0xF9 0x2A 0x2E 0x22 0x2D 0x1E
0xFE 0x03 0x2A 0x2D 0x21 0x1E 0xF9 0x20 0x28 0x2E 0x2B 0x26 0x1A 0x27 0x1D 0x3E
0x3E 0x3E 0xFF
: d2-kitchen # "The washbasin's faucet has a slow drip, which echoes through the room."
0xFE 0x06 0x0C 0x13 0x21 0x1E 0xF9 0x30 0x1A 0x2C 0x21 0x1B 0x1A 0x2C 0x22 0x27
0x42 0x2C 0xFE 0x06 0x16 0x1F 0x1A 0x2E 0x1C 0x1E 0x2D 0xF9 0x21 0x1A 0x2C 0xF9
0x1A 0xF9 0x2C 0x25 0x28 0x30 0xFE 0x06 0x20 0x1D 0x2B 0x22 0x29 0x41 0xF9 0x30
0x21 0x22 0x1C 0x21 0xF9 0x1E 0x1C 0x21 0x28 0x1E 0x2C 0xFE 0x06 0x2A 0x2D 0x21
0x2B 0x28 0x2E 0x20 0x21 0xF9 0x2D 0x21 0x1E 0xF9 0x2B 0x28 0x28 0x26 0x3E 0xFF
: d1-pantry # "There are enough tinned provisions on these shelves to feed a small army."
0xFE 0x02 0x0C 0x13 0x21 0x1E 0x2B 0x1E 0xF9 0x1A 0x2B 0x1E 0xF9 0x1E 0x27 0x28
0x2E 0x20 0x21 0xFE 0x02 0x16 0x2D 0x22 0x27 0x27 0x1E 0x1D 0xF9 0x29 0x2B 0x28
0x2F 0x22 0x2C 0x22 0x28 0x27 0x2C 0xF9 0x28 0x27 0xFE 0x02 0x20 0x2D 0x21 0x1E
0x2C 0x1E 0xF9 0x2C 0x21 0x1E 0x25 0x2F 0x1E 0x2C 0xF9 0x2D 0x28 0xFE 0x02 0x2A
0x1F 0x1E 0x1E 0x1D 0xF9 0x1A 0xF9 0x2C 0x26 0x1A 0x25 0x25 0xF9 0x1A 0x2B 0x26
0x32 0x3E 0xFF
: d2-pantry # "Judging by color and odor, whatever is in these jars should stay there."
0xFE 0x08 0x07 0x09 0x2E 0x1D 0x20 0x22 0x27 0x20 0xF9 0x1B 0x32 0xF9 0x1C 0x28
0x25 0x28 0x2B 0xF9 0xFE 0x08 0x11 0x1A 0x27 0x1D 0xF9 0x28 0x1D 0x28 0x2B 0x41
0xF9 0x30 0x21 0x1A 0x2D 0x1E 0x2F 0x1E 0x2B 0xF9 0xFE 0x08 0x1B 0x22 0x2C 0xF9
0x22 0x27 0xF9 0x2D 0x21 0x1E 0x2C 0x1E 0xF9 0x23 0x1A 0x2B 0x2C 0xF9 0xFE 0x08
0x25 0x2C 0x21 0x28 0x2E 0x25 0x1D 0xF9 0x2C 0x2D 0x1A 0x32 0xF9 0x2D 0x21 0x1E
0x2B 0x1E 0xF9 0xFE 0x08 0x2F 0x22 0x27 0x1D 0x1E 0x1F 0x22 0x27 0x22 0x2D 0x1E
0x25 0x32 0x3E 0xFF
: d1-secret # "Cobwebbed boxes full of knick-knacks and bric-a-brac."
0xFE 0x00 0x07 0x02 0x28 0x1B 0x30 0x1E 0x1B 0x1B 0x1E 0x1D 0xF9 0x1B 0x28 0x31
0x1E 0x2C 0xF9 0x1F 0x2E 0x25 0x25 0xFE 0x00 0x11 0x28 0x1F 0xF9 0x24 0x27 0x22
0x1C 0x24 0x43 0x24 0x27 0x1A 0x1C 0x24 0x2C 0x41 0xF9 0xFE 0x00 0x1B 0x1C 0x2E
0x2B 0x22 0x28 0x2C 0x41 0xF9 0x28 0x1B 0x23 0x1E 0x2D 0xF9 0x1D 0x42 0x1A 0x2B
0x2D 0x41 0xFE 0x00 0x25 0x1B 0x1A 0x2E 0x1B 0x25 0x1E 0x2C 0x41 0xF9 0x1C 0x2E
0x2B 0x22 0x28 0x2C 0x22 0x2D 0x22 0x1E 0x2C 0x41 0xFE 0x00 0x2F 0x1A 0x27 0x1D
0xF9 0x1B 0x2B 0x22 0x1C 0x43 0x1A 0x43 0x1B 0x2B 0x1A 0x1C 0x3E 0xFF
: d2-secret # "Scrapes in the dust suggest these boxes have been moved recently."
0xFE 0x04 0x0C 0x12 0x1C 0x2B 0x1A 0x29 0x1E 0x2C 0xF9 0x22 0x27 0xF9 0x2D 0x21
0x1E 0xF9 0x1D 0x2E 0x2C 0x2D 0xFE 0x04 0x16 0x2C 0x2E 0x20 0x20 0x1E 0x2C 0x2D
0xF9 0x2D 0x21 0x1E 0x2C 0x1E 0xF9 0x1B 0x28 0x31 0x1E 0x2C 0xFE 0x04 0x20 0x21
0x1A 0x2F 0x1E 0xF9 0x1B 0x1E 0x1E 0x27 0xF9 0x26 0x28 0x2F 0x1E 0x1D 0xFE 0x04
0x2A 0x2B 0x1E 0x1C 0x1E 0x27 0x2D 0x25 0x32 0x3E 0x3E 0x3E 0xFF
: secret-passage-entrance
0xFE 0x04 0x02 0x16 0x21 0x1A 0x2D 0x42 0x2C 0xF9 0x2D 0x21 0x22 0x2C 0x40 0xFE
0x04 0x0C 0x00 0xF9 0x1C 0x28 0x27 0x1C 0x1E 0x1A 0x25 0x1E 0x1D 0xF9 0x1D 0x28
0x28 0x2B 0xF9 0x22 0x2C 0xFE 0x04 0x16 0x2C 0x25 0x22 0x20 0x21 0x2D 0x25 0x32
0xF9 0x1A 0x23 0x1A 0x2B 0x3F 0xFE 0x04 0x20 0x12 0x2D 0x1E 0x29 0xF9 0x22 0x27
0x2C 0x22 0x1D 0x1E 0x40 0xFF
: secret-room-entrance
0xFE 0x00 0x02 0x04 0x2E 0x2B 0x1E 0x24 0x1A 0x3F 0xF9 0x00 0xF9 0x2D 0x2B 0x1A
0x29 0xF9 0x1D 0x28 0x28 0x2B 0xFE 0x00 0x0C 0x22 0x2C 0xF9 0x21 0x22 0x1D 0x1D
0x1E 0x27 0xF9 0x22 0x27 0xF9 0x2D 0x21 0x1E 0xFE 0x00 0x16 0x1F 0x25 0x28 0x28
0x2B 0xF9 0x21 0x1E 0x2B 0x1E 0x3F 0xFE 0x00 0x20 0x12 0x21 0x28 0x2E 0x25 0x1D
0xF9 0x08 0xF9 0x22 0x27 0x2F 0x1E 0x2C 0x2D 0x22 0x20 0x1A 0x2D 0x1E 0x40 0xFF
: how-did-i-get-here
0xFE 0x08 0x14 0x07 0x28 0x30 0xF9 0x28 0x27 0xF9 0x1E 0x1A 0x2B 0x2D 0x21 0xFE
0x08 0x1E 0x1D 0x22 0x1D 0xF9 0x08 0xF9 0x1E 0x27 0x1D 0xF9 0x2E 0x29 0xF9 0x21
0x1E 0x2B 0x1E 0x40 0xFF
: room-deco-table
pointer d1-library
pointer d2-library
pointer d1-bathroom
pointer d2-bathroom
pointer d1-bedroom
pointer d2-bedroom
pointer d1-drawing-room
pointer d2-drawing-room
pointer d1-parlor
pointer d2-parlor
pointer d1-dining-room
pointer d2-dining-room
pointer d1-study
pointer d2-study
pointer d1-conservatory
pointer d2-conservatory
pointer d1-kitchen
pointer d2-kitchen
pointer d1-pantry
pointer d2-pantry
pointer d1-secret
pointer d2-secret
: secret-room-player-pos-stash
0x00 0x00
to-code
: describe-deco
# pass the decoration index {0,1} in v2.
thicken-plot SUSPICION_EXAMINE_DECO
clear
if v2 == 0 begin
i := long has-passage-room
load v0
if v0 == current-room begin
print secret-passage-entrance
dialog-yes-no
if v2 == 0 then return
i := long has-body-room
load v0
current-room := v0
# gotta unpack the player's
# start position for the new room:
dialog-fill-screen
plane 0
draw-room
i := long room-stash-start
load player-x - player-y
plane 1
wait 60
clear
print how-did-i-get-here
dialog-pause
jump draw-room-title
end
else
i := long has-secret-room
load v0
if v0 == current-room begin
print secret-room-entrance
dialog-yes-no
if v2 == 0 then return
i := long secret-room-player-pos-stash
save player-x - player-y
current-room := 10
room
i := long has-secret-room
load v0
i := long secret-room-player-pos-stash
load player-x - player-y
current-room := v0
jump draw-room-title
end
end
i := long room-deco-table
v0 := current-room
v0 <<= v0
v0 <<= v0
v0 += v2
v0 += v2
i += v0
load v1
print-text
jump dialog-pause
###########################################
#
# Rooms
#
###########################################
:const TILE_EMPTY 0x00
:const TILE_SOLID 0x08
:const TILE_EXIT_UP 0xA0
:const TILE_EXIT_RT 0xA8
:const TILE_EXIT_DN 0xB0
:const TILE_EXIT_LF 0xB8
:const TILE_NPC_1 0xC0
:const TILE_NPC_2 0xC8
:const TILE_DECO_1 0xD0
:const TILE_DECO_2 0xD8
:const TILE_START 0xE0
:const TILE_BODY 0xE8
:const TILE_ITEM 0xF0
:const TILE_QUESTION 0xF8
to-data
: player-left-0 0x38 0x7C 0x3C 0x3C 0x1E 0x3C 0x3C 0x1C 0x18 0x3C 0x3C 0x3C 0x1C 0x08 0x08
: player-left-1 0x00 0x38 0x7C 0x3C 0x3C 0x1E 0x3C 0x3C 0x1C 0x38 0x3C 0x3C 0x1E 0x24 0x24
: player-right-0 mirror-8x15 player-left-0
: player-right-1 mirror-8x15 player-left-1
: tileset # 8x8 tiles
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0x95 0x95 0x95 0xFF 0x51 0x51 0xFF 0xFF
0x00 0x7E 0x00 0x7A 0x7A 0x7E 0x00 0x00
0xD5 0x00 0xDD 0x10 0xC0 0x10 0xC0 0x00
0x55 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x56 0x00 0x06 0x00 0x06 0x00 0x06 0x00
0x00 0x44 0x50 0x14 0x42 0x54 0x3C 0x08
0xC0 0x00 0xC0 0x00 0xC0 0x00 0xD5 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x55 0x00
0x06 0x00 0x06 0x10 0x36 0x00 0x56 0x00
0xFF 0xFF 0x81 0x00 0x00 0x81 0xFF 0xDB
0xFF 0xFF 0x80 0xBF 0xA0 0xA0 0xE0 0x00
0xFF 0xFF 0x01 0xFD 0x05 0x05 0x07 0x00
0xE0 0xE0 0xE0 0xE0 0xFE 0xFE 0xFE 0x00
0x07 0x07 0x07 0x07 0x7F 0x7F 0x7F 0x00
0x7E 0x7E 0x42 0x42 0x42 0x00 0x00 0x00
0xFF 0xFF 0x00 0xFF 0x00 0x00 0x00 0x00
0xFF 0x83 0xBB 0xB9 0xB9 0x81 0xE1 0xFF
0x40 0x08 0x00 0x88 0x02 0x00 0x10 0x00
0x00 0x18 0x3C 0x7E 0x18 0x18 0x18 0x00
0x00 0x08 0x0C 0x7E 0x7E 0x0C 0x08 0x00
0x00 0x18 0x18 0x18 0x7E 0x3C 0x18 0x00
0x00 0x10 0x30 0x7E 0x7E 0x30 0x10 0x00
0x00 0x74 0x54 0x54 0x74 0x44 0x44 0x00
0x00 0x76 0x52 0x56 0x74 0x44 0x46 0x00
0x00 0x64 0x54 0x54 0x54 0x54 0x64 0x00
0x00 0x66 0x52 0x56 0x54 0x54 0x66 0x00
0x00 0x3E 0x40 0x7E 0x02 0x02 0x7C 0x00
0x00 0x7C 0x42 0x7C 0x42 0x42 0x7C 0x00
0x00 0x7E 0x08 0x08 0x08 0x08 0x7E 0x00
0x3C 0x7E 0x66 0x0E 0x1C 0x18 0x00 0x18
: map-library
0x08 0x38 0x00 0x00 0x00 0x00 0x98 0x00
0x08 0x00 0x00 0x98 0x00 0x38 0x00 0x00
0x08 0x38 0x00 0x00 0x00 0x00 0x98 0x00
0x08 0x38 0x38 0x38 0x00 0x38 0x38 0x38
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x10 0x08
0x08 0x10 0xF0 0x00 0x00 0xD0 0x10 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x10 0x08
0x08 0xC8 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x10 0x08
0x08 0x10 0xE8 0x00 0x00 0xD8 0x10 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x10 0x08
0x08 0x10 0x00 0x00 0xE0 0x00 0x10 0x08
0x08 0xC0 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x08 0x08 0x08 0xA8 0x08 0x08
: map-bathroom
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x98 0x98 0x98 0x98 0x98 0x20 0x08
0x08 0x98 0x98 0x98 0x98 0x98 0x30 0x08
0x08 0x00 0xD8 0x20 0x40 0x00 0x00 0x08
0x08 0x00 0x00 0x30 0x50 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0xC0 0x00 0x08
0x08 0x08 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x58 0xF0 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x00 0x00 0x00 0xE8 0x00 0x08
0x08 0xC8 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0xE0 0x00 0x00 0xD0 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x18 0x08
0x08 0x08 0x08 0xA8 0x08 0x08 0x08 0x08
: map-bedroom
0x08 0x08 0x08 0xB8 0x08 0x08 0x08 0x08
0x08 0x00 0x00 0x00 0x00 0x70 0x80 0x08
0x08 0xC0 0x00 0x00 0x00 0xF0 0x00 0x08
0x08 0x90 0x60 0xD8 0x00 0x00 0x00 0x08
0x08 0x08 0x68 0x00 0x00 0xC8 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0xE0 0x00 0xB0
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0xD0 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x20 0x20 0x60 0x00 0x00 0x08
0x08 0x08 0x28 0x28 0x88 0x00 0x00 0x08
0x08 0x08 0x50 0x30 0x68 0xE8 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-drawing-room
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x00 0x70 0x80 0x00 0xE8 0x00 0x08
0x08 0xC0 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x60 0x00 0x00 0x00 0x90 0x08
0x08 0x90 0x88 0xD0 0x00 0x00 0x08 0x08
0x08 0x08 0x68 0x00 0x00 0x00 0x08 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0xE0 0x00 0xB0
0x08 0x90 0x60 0x00 0x00 0x00 0x00 0x08
0x08 0x90 0x88 0xF0 0x00 0x00 0x00 0x08
0x08 0x08 0x68 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0xD8 0x00 0xC8 0x00 0x08
0x08 0x00 0x08 0x90 0x60 0x78 0x80 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-parlor
0x00 0x38 0x00 0x00 0x00 0x98 0x00 0x38
0x00 0x00 0x00 0x00 0x38 0x00 0x00 0x00
0x00 0x98 0x00 0x00 0x00 0x00 0x00 0x98
0x38 0x38 0x38 0x00 0x98 0x38 0x38 0x38
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x70 0x80 0xC0 0x00 0x00 0x00 0x08
0x08 0xD8 0x00 0x00 0x00 0x00 0xD0 0x08
0x08 0x78 0x80 0x00 0x00 0x90 0x60 0x08
0x08 0x00 0x00 0x00 0x00 0x08 0x68 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0xF0 0x08
0x08 0x00 0xE8 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0xE0 0x00 0x00 0xC8 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0xA8 0x08 0x08 0x08 0x08 0x08
: map-dining-room
0x08 0xB8 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x00 0x00 0x00 0x00 0x70 0x80 0x08
0x08 0x00 0xE0 0x00 0x00 0x00 0xF0 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0xC8 0x00 0xD0 0x00 0x00 0x00 0x08
0x08 0x00 0x70 0x70 0x70 0x80 0x00 0x08
0x08 0x00 0x58 0x08 0x08 0x60 0x00 0x08
0x08 0x00 0x08 0x08 0x58 0x68 0x00 0x08
0x08 0x00 0x78 0x78 0x78 0x80 0x00 0x08
0x08 0x00 0x00 0xC0 0x00 0x00 0x00 0x08
0x08 0xE8 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0xD8 0x00 0x00 0x00 0x08
0x08 0x00 0x08 0x58 0x60 0x00 0x00 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0xA8 0x08
: map-study
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x10 0x00 0x10 0x10 0x10 0x10 0x08
0x08 0x10 0xC0 0x00 0xD0 0x00 0x00 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x00 0x00 0x70 0x80 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0xA0 0x00 0x00 0xE0 0x00 0x00 0x20 0x08
0x08 0xE8 0x00 0x00 0x00 0xF0 0x30 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x00 0x00 0x78 0x80 0x00 0x08
0x08 0x10 0xD8 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x00 0x00 0x00 0xC8 0x00 0x08
0x08 0x10 0x00 0x10 0x10 0x10 0x10 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-conservatory
0x08 0x08 0x08 0x08 0xB8 0x08 0x08 0x08
0x08 0xC0 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0xE0 0x00 0x00 0x08
0x88 0x00 0x38 0x18 0x00 0x38 0x18 0x08
0x88 0x00 0x38 0x18 0x00 0x00 0x00 0x08
0x88 0xD0 0x00 0x00 0x00 0x00 0x00 0x08
0x88 0x00 0x00 0x00 0x00 0x38 0x18 0x08
0x08 0x00 0x38 0x18 0x00 0xD8 0x18 0x08
0x08 0x00 0x38 0x18 0x00 0x00 0x00 0x08
0x88 0xE8 0x00 0x00 0x00 0x38 0x18 0x08
0x88 0x00 0x00 0x00 0x00 0x38 0x18 0x08
0x88 0x00 0x00 0x98 0x00 0x00 0x00 0x08
0x88 0x00 0xF0 0x18 0x00 0xC8 0x00 0x08
0x08 0x00 0x38 0x18 0x00 0x38 0x18 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-kitchen
0x08 0x08 0x08 0x08 0xB8 0x08 0x08 0x08
0x08 0x10 0x00 0x00 0x00 0x00 0x10 0x08
0x08 0x10 0xD0 0x00 0xE0 0x00 0x10 0x08
0x08 0x08 0x60 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x88 0x00 0x00 0xE8 0x00 0x08
0x08 0x08 0x88 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x68 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0xC0 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x60 0x00 0x00 0xC8 0x00 0x08
0x08 0x58 0x88 0x00 0x00 0x00 0x00 0x08
0x08 0x58 0x88 0xD8 0x00 0x00 0x00 0xB0
0x08 0x08 0x68 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x08 0x00 0x00 0x00 0x00 0x08
0x08 0x10 0x08 0x00 0x00 0x00 0x38 0x08
0x08 0x10 0x10 0x60 0x00 0xF0 0x38 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-pantry
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x00 0x00 0xC0 0x00 0x00 0x18 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0xF0 0x08
0x08 0x18 0x18 0x00 0x00 0x00 0x00 0x08
0x08 0x90 0x08 0x80 0x00 0x08 0x90 0x08
0x08 0x00 0xD0 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x08 0x80 0x00 0x00 0x08 0x08 0x08
0x08 0x00 0x00 0x00 0x00 0xC8 0x00 0x08
0xA0 0x00 0xE0 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0xE8 0x00 0x08 0x80 0xD8 0x18 0x08
0x08 0x00 0x00 0x08 0x80 0x00 0x18 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-secret
# note: no NPCs or body!
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x18 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x18 0xD0 0x00 0x00 0x00 0x00 0x08
0x08 0x98 0x00 0x00 0x00 0xE0 0x00 0xB0
0x08 0x18 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x98 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x98 0x08
0x08 0x98 0xF0 0x00 0x00 0xD8 0x18 0x08
0x08 0x98 0x98 0x00 0x98 0x18 0x18 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0x08 0x08
: map-dining-room-alt
# no NPCs or special tiles except start.
0x08 0xB8 0x08 0x08 0x08 0x08 0x08 0x08
0x08 0x00 0x00 0x00 0x00 0x70 0x80 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0xE0 0x00 0x08
0x08 0x00 0x70 0x70 0x70 0x80 0x00 0x08
0x08 0x00 0x08 0x08 0x08 0x60 0x00 0x08
0x08 0x00 0x08 0x08 0x08 0x68 0x00 0x08
0x08 0x00 0x78 0x78 0x78 0x80 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x00 0x00 0x00 0x00 0x00 0x08
0x08 0x00 0x08 0x58 0x60 0x00 0x00 0x08
0x08 0x08 0x08 0x08 0x08 0x08 0xA8 0x08
: room-map-table
pointer map-library
pointer map-bathroom
pointer map-bedroom
pointer map-drawing-room
pointer map-parlor
pointer map-dining-room
pointer map-study
pointer map-conservatory
pointer map-kitchen
pointer map-pantry
pointer map-secret
pointer map-dining-room-alt
: title-library 0xFE 0x24 0x18 0xFC 0x0B 0x22 0x1B 0x2B 0x1A 0x2B 0x32 0xFF
: title-bathroom 0xFE 0x21 0x18 0xFC 0x01 0x1A 0x2D 0x21 0x2B 0x28 0x28 0x26 0xFF
: title-bedroom 0xFE 0x25 0x18 0xFC 0x01 0x1E 0x1D 0x2B 0x28 0x28 0x26 0xFF
: title-drawing-room 0xFE 0x12 0x18 0xFC 0x03 0x2B 0x1A 0x30 0x22 0x27 0x20 0xF9 0x11 0x28 0x28 0x26 0xFF
: title-parlor 0xFE 0x29 0x18 0xFC 0x0F 0x1A 0x2B 0x25 0x28 0x2B 0xFF
: title-dining-room 0xFE 0x15 0x18 0xFC 0x03 0x22 0x27 0x22 0x27 0x20 0xF9 0x11 0x28 0x28 0x26 0xFF
: title-study 0xFE 0x2B 0x18 0xFC 0x12 0x2D 0x2E 0x1D 0x32 0xFF
: title-conservatory 0xFE 0x11 0x18 0xFC 0x02 0x28 0x27 0x2C 0x1E 0x2B 0x2F 0x1A 0x2D 0x28 0x2B 0x32 0xFF
: title-kitchen 0xFE 0x25 0x18 0xFC 0x0A 0x22 0x2D 0x1C 0x21 0x1E 0x27 0xFF
: title-pantry 0xFE 0x28 0x18 0xFC 0x0F 0x1A 0x27 0x2D 0x2B 0x32 0xFF
: title-secret-room 0xFE 0x14 0x18 0xFC 0x12 0x1E 0x1C 0x2B 0x1E 0x2D 0xF9 0x11 0x28 0x28 0x26 0xFF
: title-secret-passage 0xFE 0x08 0x18 0xFC 0x12 0x1E 0x1C 0x2B 0x1E 0x2D 0xF9 0x0F 0x1A 0x2C 0x2C 0x1A 0x20 0x1E 0xFF
: room-title-table
pointer title-library
pointer title-bathroom
pointer title-bedroom
pointer title-drawing-room
pointer title-parlor
pointer title-dining-room
pointer title-study
pointer title-conservatory
pointer title-kitchen
pointer title-pantry
pointer title-secret-room
pointer title-secret-passage
: special-room-exits
# -1 just dumps you to the main map
# UP, RT, DN, LF to match TILE_EXIT indices
-1 -1 -1 -1 # 0 library
-1 2 -1 -1 # 1 bathroom
-1 -1 -1 1 # 2 bedroom
-1 -1 -1 -1 # 3 drawing-room
-1 -1 -1 -1 # 4 parlor
-1 -1 -1 -1 # 5 dining-room 5
-1 -1 -1 -1 # 6 study
-1 -1 -1 -1 # 7 conservatory
-1 -1 9 -1 # 8 kitchen
8 -1 -1 -1 # 9 pantry
-1 -1 -1 -1 # 10 secret-room
: room-stash
0 0 # exit-N
0 0 # exit E
0 0 # exit S
0 0 # exit W
: room-stash-points-of-interest
0 0 # npc 1
0 0 # npc 2
0 0 # deco 1
0 0 # deco 2
: room-stash-start 0 0 # start
0 0 # body
0 0 # item
: blink-masks
: blink-npc 0x7E 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x7E
: blink-item 0x92 0x44 0x00 0x82 0x00 0x44 0x92 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: blink-body 0x00 0x70 0x78 0x38 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: blink-table 0 0 15 15 -1 30 15
to-code
:macro abs-diff A B RESULT {
if A < B begin
RESULT := B
RESULT -= A
else
RESULT := A
RESULT -= B
end
}
: room-poi-find
# grab coords of the current object:
i := long room-stash-points-of-interest
i += v4
i += v4
load v1
# calculate ABS of manhattan distance to object:
prev-x := player-x
prev-y := player-y
if v4 >= 2 begin
# adjust player hitbox to the feet
# for anything but NPC positions:
prev-x += 4
prev-y += 8
end
abs-diff v0 prev-x v2
abs-diff v1 prev-y v3
v3 += v2
# ignore NPCs that aren't in the room.
i := long npc-positions
i += current-room
i += current-room
i += v4
load v2 - v2
if v4 == 0 begin
if v2 == -1 then v3 := 0xFF
end
if v4 == 1 begin
if v2 == -1 then v3 := 0xFF
end
# ignore body if it's not in this room.
if v4 == 5 begin
i := long has-body-room
load v2 - v2
if v2 != current-room then v3 := 0xFF
end
# ignore item if it's not here.
if v4 == 6 begin
i := long item-positions
i += current-room
load v2 - v2
if v2 == -1 then v3 := 0xFF
end
;
: room-poi-walk
# first pass: if objects are close enough,
# just activate them directly.
v4 := 0
loop
room-poi-find
if v3 < 10 begin
if v4 == 0 begin
i := long npc-positions
: room-npc
i += current-room
i += current-room
load v2 - v2
describe-npc
jump poi-done
end
if v4 == 1 begin
:calc npc-slot-2 { npc-positions + 1 }
i := long npc-slot-2
jump room-npc
end
if v4 == 2 begin v2 := 0 describe-deco jump poi-done end
if v4 == 3 begin v2 := 1 describe-deco jump poi-done end
if v4 == 5 begin describe-body jump poi-done end
if v4 == 6 begin
i := long item-positions
i += current-room
load v2 - v2
describe-item
end
: poi-done
if current-room == GAME_OVER then return
draw-room
ve := 0
jump draw-player
end
v4 += 1
if v4 == 4 then v4 += 1 # skip over start position
if v4 != 7 then
again
# second pass: if objects are near-ish,
# blink them.
v4 := 0
loop
room-poi-find
# if the object is further, blink it.
if v3 < 40 begin
i := long blink-table
i += v4
load v2 - v2
i := long blink-masks
i += v2
v2 := 6
loop
sprite v0 v1 15
wait 5
v2 += -1
if v2 != 0 then
again
end
v4 += 1
if v4 == 4 then v4 += 1 # skip over start position
if v4 != 7 then
again
;
: room-load indirect room-write ;
: room-draw-npc
i += current-room
i += current-room
load v4 - v4
if v4 == -1 then return # no npc here
i := long npc-sprites
v4 <<= v4 # * 2
v4 <<= v4 # * 4
v4 <<= v4 # * 8
v4 <<= v4 # * 16
i += v4
sprite v1 v2 15
;
: room-unpack
if v0 == TILE_BODY begin
i := long has-body-room
load v4 - v4
if v4 == current-room begin
i := long body-sprite
sprite v1 v2 0
end
end
if v0 == TILE_NPC_1 begin
i := long npc-positions
room-draw-npc
end
if v0 == TILE_NPC_2 begin
:calc second-slot { npc-positions + 1 }
i := long second-slot
room-draw-npc
end
# in the general case, all we want to do
# is store the x/y coords of the item
# in a convenient lookup table for later:
i := long room-stash
:calc special-tile-offset { 0xFF & - TILE_EXIT_UP }
v0 += special-tile-offset
v0 >>= v0 # v0 had stride 8...
v0 >>= v0 # v0 now has stride 2
i += v0
save v1 - v2
v0 := TILE_EMPTY
;
: draw-player
# pass frame offset { 0, 15 } in ve...
i := long player-left-0
if player-face == 1 then i := long player-right-0
i += ve
sprite player-x player-y 15
;
: draw-room-title
dialog-fill-screen
print-from-table current-room room-title-table
wait 60
clear
;
: draw-room
i := long room-map-table
i += current-room
i += current-room
load v1
i := room-write
save v1
v1 := 0 # x
v2 := 0 # y
v3 := 0 # index
loop
room-load
i += v3
load v0
if v0 >= TILE_NPC_1 then room-unpack
i := long tileset
i += v0
sprite v1 v2 8
v3 += 1
v2 += 8
if v2 == 64 then v1 += 8
if v2 == 64 then v2 := 0
if v1 != 128 then
again
;
: room
draw-room-title
draw-room
# the murderer is stalking the player!
i := long interstitial-progress
load v0
if v0 == 2 begin
i := long npc-positions
i += current-room
i += current-room
load v1
i := long npc-murderer
load v2 - v2
# kill the player if they're alone
# with a stalker murderer...
if v2 == v0 begin
if v1 == -1 then murder-player
if current-room == GAME_OVER then return
end
if v2 == v1 begin
if v1 == -1 then murder-player
if current-room == GAME_OVER then return
end
end
# walk/explore mode:
player-face := 0
i := long room-stash-start
load player-x - player-y
ve := 0
draw-player
loop
ve := 0
draw-player
prev-x := player-x
prev-y := player-y
vf := OCTO_KEY_D if vf key begin player-x += 4 player-face := 1 end
vf := OCTO_KEY_A if vf key begin player-x += -4 player-face := 0 end
vf := OCTO_KEY_S if vf key then player-y += 4
vf := OCTO_KEY_W if vf key then player-y += -4
room-load
# index at feet is:
# (py+8)/8 + (px/8)*8
v0 := player-y
v0 += 8
v0 >>= v0
v0 >>= v0
v0 >>= v0
i += v0
v0 := player-x
vf := 0b11111000
v0 &= vf
i += v0
load v0
if v0 == 0x88 then v0 := TILE_SOLID # (conservatory north windows)
if v0 == TILE_SOLID begin
player-x := prev-x
player-y := prev-y
end
while v0 != TILE_EXIT_UP
while v0 != TILE_EXIT_DN
while v0 != TILE_EXIT_LF
while v0 != TILE_EXIT_RT
if player-x != prev-x begin
# step animation:
player-x := prev-x
if player-face == 1 then player-x += 2
if player-face == 0 then player-x += -2
ve := 15
draw-player
wait 2
draw-player
if player-face == 1 then player-x += 2
if player-face == 0 then player-x += -2
end
ve := 0
draw-player
vf := OCTO_KEY_E if vf key then room-poi-walk
if current-room == GAME_OVER then return
sync
again
clear
i := long special-room-exits
i += current-room # stride 4...
i += current-room
i += current-room
i += current-room
:calc exit-offset { 0xFF & - TILE_EXIT_UP }
v0 += exit-offset
v0 >>= v0 # stride 8 -> stride 4
v0 >>= v0 # stride 4 -> stride 2
v0 >>= v0 # stride 2 -> stride 1
i += v0
load v0
if v0 != -1 begin
current-room := v0
jump room
end
# a brief pause before returning
# to the main map helps debounce
# held down keypresses:
wait 10
;
###########################################
#
# Interstitials
#
###########################################
to-data
: growing-suspicious
0xFE 0x00 0x11 0xFD 0x13 0x21 0x1E 0xF9 0x26 0x2E 0x2B 0x1D 0x1E 0x2B 0x1E 0x2B
0xF9 0x22 0x2C 0xFE 0x00 0x1B 0x20 0x2B 0x28 0x30 0x22 0x27 0x20 0xF9 0x2C 0x2E
0x2C 0x29 0x22 0x1C 0x22 0x28 0x2E 0x2C 0xFE 0x00 0x25 0x28 0x1F 0xF9 0x2D 0x21
0x1E 0xF9 0x22 0x27 0x2F 0x1E 0x2C 0x2D 0x22 0x20 0x1A 0x2D 0x22 0x28 0x27 0x3E
0xFF
: begun-stalking
0xFE 0x06 0x17 0xFD 0x13 0x21 0x1E 0xF9 0x26 0x2E 0x2B 0x1D 0x1E 0x2B 0x1E 0x2B
0xF9 0x21 0x1A 0x2C 0xFE 0x06 0x21 0x1B 0x1E 0x20 0x2E 0x27 0xF9 0x2C 0x2D 0x1A
0x25 0x24 0x22 0x27 0x20 0xF9 0x32 0x28 0x2E 0x3F 0xFF
: footsteps-in-distance
0xFE 0x07 0x10 0x18 0x28 0x2E 0xF9 0x21 0x1E 0x1A 0x2B 0xF9 0x1F 0x28 0x28 0x2D
0x2C 0x2D 0x1E 0x29 0x2C 0xFE 0x07 0x1A 0x2C 0x28 0x26 0x1E 0x30 0x21 0x1E 0x2B
0x1E 0xF9 0x22 0x27 0xF9 0x2D 0x21 0x1E 0xFE 0x07 0x24 0x1D 0x22 0x2C 0x2D 0x1A
0x27 0x1C 0x1E 0x3E 0x3E 0x3E 0xFF
: notice-0 # Thunder rumbles in the distance.
0xFE 0x06 0x17 0x13 0x21 0x2E 0x27 0x1D 0x1E 0x2B 0xF9 0x2B 0x2E 0x26 0x1B 0x25
0x1E 0x2C 0xF9 0x22 0x27 0xFE 0x06 0x21 0x2D 0x21 0x1E 0xF9 0x1D 0x22 0x2C 0x2D
0x1A 0x27 0x1C 0x1E 0x3E 0x3E 0x3E 0xFF
: notice-1 # You feel as though you're being watched.
0xFE 0x14 0x13 0x18 0x28 0x2E 0xF9 0x1F 0x1E 0x1E 0x25 0xF9 0x1A 0x2C 0xFE 0x14
0x1D 0x2D 0x21 0x28 0x2E 0x20 0x21 0xF9 0x32 0x28 0x2E 0x42 0x2B 0x1E 0xFE 0x14
0x27 0x1B 0x1E 0x22 0x27 0x20 0xF9 0x30 0x1A 0x2D 0x1C 0x21 0x1E 0x1D 0x3E 0xFF
: notice-2 # You feel a sudden chill.
0xFE 0x17 0x16 0x18 0x28 0x2E 0xF9 0x1F 0x1E 0x1E 0x25 0xF9 0x1A 0xFE 0x17 0x20
0x2C 0x2E 0x1D 0x1D 0x1E 0x27 0xF9 0x1C 0x21 0x22 0x25 0x25 0x3E 0xFF
: notice-3 # The door slams loudly behind you.
0xFE 0x08 0x16 0x13 0x21 0x1E 0xF9 0x1D 0x28 0x28 0x2B 0xF9 0x2C 0x25 0x1A 0x26
0x2C 0xFE 0x08 0x20 0x25 0x28 0x2E 0x1D 0x25 0x32 0xF9 0x1B 0x1E 0x21 0x22 0x27
0x1D 0xF9 0x32 0x28 0x2E 0x3E 0xFF
: notice-4 # The lights overhead flicker momentarily.
0xFE 0x03 0x18 0x13 0x21 0x1E 0xF9 0x25 0x22 0x20 0x21 0x2D 0x2C 0xF9 0x28 0x2F
0x1E 0x2B 0x21 0x1E 0x1A 0x1D 0xFE 0x03 0x22 0x1F 0x25 0x22 0x1C 0x24 0x1E 0x2B
0xF9 0x26 0x28 0x26 0x1E 0x27 0x2D 0x1A 0x2B 0x22 0x25 0x32 0x3E 0xFF
: notice-5 # You shakily wipe a bead of sweat from your brow. This case is getting to you.
0xFE 0x03 0x0D 0x18 0x28 0x2E 0xF9 0x2C 0x21 0x1A 0x24 0x22 0x25 0x32 0xF9 0x30
0x22 0x29 0x1E 0xF9 0x1A 0xFE 0x03 0x17 0x1B 0x1E 0x1A 0x1D 0xF9 0x28 0x1F 0xF9
0x2C 0x30 0x1E 0x1A 0x2D 0xF9 0x1F 0x2B 0x28 0x26 0xFE 0x03 0x21 0x32 0x28 0x2E
0x2B 0xF9 0x1B 0x2B 0x28 0x30 0x3E 0xF9 0x13 0x21 0x22 0x2C 0xF9 0x1C 0x1A 0x2C
0x1E 0xFE 0x03 0x2B 0x22 0x2C 0xF9 0x20 0x1E 0x2D 0x2D 0x22 0x27 0x20 0xF9 0x2D
0x28 0xF9 0x32 0x28 0x2E 0x3E 0xFF
: notice-6 # Lightning cracks, flooding the nearby windows with light.
0xFE 0x05 0x11 0x0B 0x22 0x20 0x21 0x2D 0x27 0x22 0x27 0x20 0xF9 0x1C 0x2B 0x1A
0x1C 0x24 0x2C 0x41 0xFE 0x05 0x1B 0x1F 0x25 0x28 0x28 0x1D 0x22 0x27 0x20 0xF9
0x2D 0x21 0x1E 0xF9 0x27 0x1E 0x1A 0x2B 0x1B 0x32 0xFE 0x05 0x25 0x30 0x22 0x27
0x1D 0x28 0x30 0x2C 0xF9 0x30 0x22 0x2D 0x21 0xF9 0x25 0x22 0x20 0x21 0x2D 0x3E
0xFF
: notice-7 # The floorboards creak loudly under your feet.
0xFE 0x09 0x13 0x13 0x21 0x1E 0xF9 0x1F 0x25 0x28 0x28 0x2B 0x1B 0x28 0x1A 0x2B
0x1D 0x2C 0xFE 0x09 0x1D 0x1C 0x2B 0x1E 0x1A 0x24 0xF9 0x25 0x28 0x2E 0x1D 0x25
0x32 0xF9 0x2E 0x27 0x1D 0x1E 0x2B 0xFE 0x09 0x27 0x32 0x28 0x2E 0x2B 0xF9 0x1F
0x1E 0x1E 0x2D 0x3E 0xFF
: interstitial-notice-table
pointer notice-0
pointer notice-1
pointer notice-2
pointer notice-3
pointer notice-4
pointer notice-5
pointer notice-6
pointer notice-7
: interstitial-progress 0x00
to-code
: move-npcs
v1 := 9 random-upto-v1 # source room in v0.
v1 := random 1 # source slot in v1.
# make sure we have a source NPC.
i := long npc-positions
i += v0
i += v0
i += v1
load v2 - v2
if v2 == -1 then return
# find an adjacent, distinct room.
i := long room-nav
i += v0
i += v0
i += v0
i += v0
v2 := random 0b11
i += v2
load v2 - v2
if v2 == v0 then return # dest room in v2.
# make sure we have an empty destination.
v3 := 0
i := long npc-positions
i += v2
i += v2
load v4 - v4
if v4 != -1 then v3 := 1
i += v3
load v4 - v4
if v4 != -1 then return
# dest slot is in v3.
# remove NPC from source slot
i := long npc-positions
i += v0
i += v0
i += v1
load v4 - v4 # npc id is in v4.
vf := -1
save vf - vf
# place NPC in destination slot
i := long npc-positions
i += v2
i += v2
i += v3
save v4 - v4
dialog-fill-screen
print footsteps-in-distance
jump dialog-pause
: describe-ambience
i := long interstitial-progress
load v0
if v0 == 0 begin
if suspicion-level > 40 begin
i := long interstitial-progress
v0 := 1
save v0
dialog-fill-screen
print growing-suspicious
jump dialog-pause
end
end
if v0 == 1 begin
if suspicion-level > 100 begin
i := long interstitial-progress
v0 := 2
save v0
dialog-fill-screen
print begun-stalking
jump dialog-pause
end
end
move-npcs
v0 := random 0xFF
if v0 > 128 then return
v2 := random 0b111
dialog-fill-screen
print-from-table v2 interstitial-notice-table
jump dialog-pause
###########################################
#
# Fencing
#
###########################################
to-data
: fencing-background
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x33 0x18 0x33 0x18 0x33 0x18 0x33 0x18 0x33 0x18
0x33 0x18 0x33 0x38 0x33 0x38 0x33 0x30 0x27 0x30 0x27 0x30 0x66 0x60 0x6E 0x60
0x4C 0xC0 0x4C 0xC0 0x99 0x80 0x1B 0x00 0x36 0x00 0x6C 0x00 0xF8 0x00 0xE0 0x00
0xE0 0x00 0x70 0x00 0x70 0x00 0x70 0x00 0x78 0x00 0x78 0x00 0x78 0x00 0x5C 0x00
0x5C 0x00 0x5C 0x00 0x5C 0x00 0x5E 0x00 0x5E 0x00 0x5A 0x00 0x5B 0x00 0x5B 0x00
0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00
0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0x5B 0x00 0xFF 0xFF
0xFF 0xFF 0xF2 0x72 0xE1 0x21 0xE0 0x20 0xF0 0x70 0xF8 0xF8 0xFD 0xFD 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0x72 0x7F 0x21 0x3F 0x20 0x3F 0x70 0x7F 0xF8 0xFF 0xFD 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x02 0x10 0x0A 0x14 0x2A 0x94 0x2A 0x94 0x08 0x84
0x72 0x25 0x1F 0x9B 0x07 0xFF 0x01 0xFF 0x02 0x2F 0x00 0x22 0x00 0x02 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x08 0x40 0x28 0x50 0x29 0x54 0x29 0x54 0x21 0x10
0xA4 0x4E 0xD9 0xF8 0xFF 0xE0 0xFF 0x80 0xF4 0x40 0x44 0x00 0x40 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF
0xFF 0xFF 0xFE 0x4E 0xFC 0x24 0xFC 0x04 0xFE 0x0E 0xFF 0x1F 0xFF 0xBF 0xFF 0xFF
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x18 0xCC 0x18 0xCC 0x18 0xCC 0x18 0xCC 0x18 0xCC
0x18 0xCC 0x1C 0xCC 0x1C 0xCC 0x0C 0xCC 0x0C 0xE4 0x0C 0xE4 0x06 0x66 0x06 0x76
0x03 0x32 0x03 0x32 0x01 0x99 0x00 0xD8 0x00 0x6C 0x00 0x36 0x00 0x1F 0x00 0x07
0x00 0x07 0x00 0x0E 0x00 0x0E 0x00 0x0E 0x00 0x1E 0x00 0x1E 0x00 0x1E 0x00 0x3A
0x00 0x3A 0x00 0x3A 0x00 0x3A 0x00 0x7A 0x00 0x7A 0x00 0x5A 0x00 0xDA 0x00 0xDA
0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA
0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0x00 0xDA 0xFF 0xFF
0xFF 0xFF 0x4E 0x4F 0x24 0x27 0x04 0x07 0x0E 0x0F 0x1F 0x1F 0xBF 0xBF 0xFF 0xFF
: fencing-heart
0xC8 0xF8 0x70 0x20
: player-sword
0xFF 0xF8 0xC0 0x08 0xFF 0xF0 0x80 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: enemy-sword
0x1F 0xFF 0x10 0x03 0x0F 0xFF 0x00 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: player-top-neutral
0x03 0xE0 0x07 0xF0 0x07 0xE8 0x07 0xA0 0x07 0xA0 0x0F 0xE0 0x3F 0xE0 0x1D 0xC0
0x01 0x80 0x0F 0xE0 0x13 0xF0 0x13 0xF8 0x27 0xEE 0x27 0xFF 0x11 0x03 0x08 0xFC
: player-top-stagger
0x07 0xD0 0x4F 0xE0 0x0F 0xC0 0x2E 0x40 0x1F 0xC0 0x7F 0xC0 0x3F 0xC0 0x97 0x80
0x03 0x00 0x1F 0xF0 0x27 0xFC 0x27 0xFF 0x4F 0xC7 0x4F 0xF8 0x22 0x06 0x11 0xF8
: player-top-attack
0x03 0xE0 0x07 0xF8 0x07 0xE0 0x07 0xA0 0x0F 0xA0 0x3F 0xE0 0x1F 0xE0 0x0D 0xC0
0x01 0x83 0x03 0xFD 0x04 0x03 0x1C 0x1C 0x3F 0xE0 0x7F 0xE0 0x77 0xE0 0x37 0xE0
: player-top-block
0x03 0xE0 0x07 0xF8 0x07 0xE2 0x07 0xA2 0x0F 0xA5 0x3F 0xE5 0x1F 0xE5 0x0D 0xC5
0x01 0x85 0x03 0xCA 0x04 0x6E 0x04 0x72 0x06 0x36 0x07 0x04 0x03 0xC8 0x07 0xF0
: player-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x1F 0xF8 0x1F 0xF8 0x3F 0xF8 0x3F 0xFC 0x7F 0xFC 0x1F 0xF8
0x0E 0x70 0x0E 0x70 0x0C 0x60 0x18 0x60 0x18 0xC0 0x18 0xC0 0x1E 0xF0 0x00 0x00
: player-bottom-step
0x0F 0xF0 0x0F 0xF8 0x0F 0xFC 0x1F 0xFC 0x7F 0xFC 0x3F 0xFE 0x1F 0xFE 0x0F 0xFC
0x0E 0x38 0x1C 0x18 0x38 0x1C 0x70 0x1C 0xE0 0x0C 0x60 0x0C 0x30 0x0F 0x00 0x00
: player-bottom-stagger
0x0F 0xF0 0x0F 0xF0 0x1F 0xF8 0x3F 0xF8 0x3F 0xF8 0xFF 0xF8 0x7F 0xF8 0x1F 0xF0
0x0E 0x70 0x0E 0x78 0x07 0x38 0x03 0x19 0x03 0xFF 0x03 0xCE 0x01 0x84 0x00 0x00
: enemy-0-top-neutral
0x07 0xC0 0x0F 0xE0 0x1F 0xE0 0x06 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xA0
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-0-top-tell
0x07 0xC0 0x0F 0xE0 0x1F 0xE0 0x04 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xA0
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-0-top-stagger
0x03 0xE4 0x07 0xF0 0x0F 0xF8 0x02 0x7A 0x02 0x78 0x03 0xF8 0x03 0xF8 0x01 0xD2
0x00 0xC0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-0-top-attack
0x07 0xC0 0x0F 0xE0 0x1F 0xF0 0x06 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xA0
0xC1 0x80 0xBF 0xC0 0xC0 0x20 0x38 0x38 0x07 0xFC 0x07 0xFE 0x07 0xEE 0x07 0xEC
: enemy-0-top-block
0x07 0xC0 0x0F 0xE0 0x5F 0xF0 0x45 0xF0 0xA5 0xF0 0xA7 0xF0 0xA7 0xF0 0xA3 0xA0
0xA1 0x80 0x53 0xC0 0x76 0x20 0x4E 0x20 0x6C 0x60 0x20 0xE0 0x13 0xC0 0x0F 0xE0
: enemy-0-bottom-neutral
0x07 0xE0 0x0F 0xE0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x1F 0xF0 0x1F 0xF8 0x1F 0xF8
0x1F 0xF8 0x1F 0xFC 0x1F 0xFC 0x06 0x18 0x03 0x18 0x03 0x18 0x0F 0x78 0x00 0x00
: enemy-0-bottom-step
0x07 0xE0 0x07 0xE0 0x0F 0xF0 0x0F 0xF0 0x1F 0xF0 0x1F 0xF8 0x1F 0xFC 0x1F 0xFE
0x1F 0xFC 0x1F 0xFC 0x3F 0x9C 0x38 0x0E 0x30 0x07 0x30 0x06 0xF0 0x0C 0x00 0x00
: enemy-0-bottom-stagger
0x01 0xF8 0x03 0xF8 0x03 0xF8 0x03 0xF8 0x07 0xF8 0x0F 0xF8 0x1F 0xF8 0x7F 0xF8
0x3F 0xF8 0x1F 0xF0 0x1F 0xF0 0x98 0xF0 0xFF 0xC0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-1-top-neutral
0x07 0xD0 0x0F 0xF0 0x0F 0xF0 0x06 0xF0 0x05 0xF0 0x0F 0xF0 0x0F 0xF0 0x07 0xE0
0x01 0xC0 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-1-top-tell
0x07 0xD0 0x0F 0xF0 0x0F 0xF0 0x04 0xF0 0x05 0xF0 0x0F 0xF0 0x0F 0xF0 0x07 0xE0
0x01 0xC0 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-1-top-stagger
0x03 0xEA 0x07 0xF8 0x07 0xF8 0x02 0x78 0x02 0x7B 0x07 0xF8 0x07 0xF8 0x03 0xF2
0x00 0xE0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-1-top-attack
0x07 0xD0 0x0F 0xF0 0x0F 0xF0 0x06 0xF0 0x05 0xF0 0x0F 0xF0 0x0F 0xF0 0x07 0xE0
0xF1 0xC0 0x8F 0xC0 0xC0 0x20 0x20 0x38 0x1F 0xFC 0x07 0xFE 0x07 0xFE 0x07 0xF4
: enemy-1-top-block
0x07 0xD0 0x0F 0xF0 0x4F 0xF0 0x45 0xF0 0xA5 0xF0 0xAF 0xF0 0xAF 0xF0 0xA7 0xE0
0xA1 0xC0 0x53 0xC0 0x76 0x20 0x4C 0x20 0x68 0x20 0x20 0x60 0x11 0xC0 0x0F 0xE0
: enemy-1-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF8 0x0F 0xF8 0x0F 0x78
0x0F 0x78 0x0F 0x78 0x07 0x38 0x07 0x9C 0x03 0x9C 0x03 0x9C 0x0F 0xFC 0x00 0x00
: enemy-1-bottom-step
0x07 0xF0 0x07 0xF0 0x0F 0xF0 0x0F 0xE0 0x1F 0xE0 0x1F 0xF0 0x1F 0xF0 0x1E 0xF8
0x1E 0x7C 0x1C 0x3E 0x3C 0x1E 0x3C 0x0F 0x38 0x07 0x38 0x06 0xF8 0x0C 0x00 0x00
: enemy-1-bottom-stagger
0x03 0xFC 0x03 0xFC 0x03 0xFC 0x03 0xFC 0x07 0xFC 0x07 0xFC 0x07 0xFC 0x0F 0xFC
0x0F 0x78 0x1F 0x78 0x1C 0xF0 0x9C 0xE0 0xFF 0xE0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-2-top-neutral
0x07 0xC0 0x07 0xE0 0x07 0xE0 0x1F 0xE0 0x05 0xE0 0x07 0xE0 0x07 0xC0 0x03 0x80
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-2-top-tell
0x07 0xC0 0x07 0xE0 0x07 0xE0 0x1F 0xE0 0x05 0xE0 0x07 0xE0 0x07 0xC0 0x03 0x80
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-2-top-stagger
0x03 0xE4 0x03 0xF0 0x03 0xF0 0x0F 0xF6 0x02 0xF0 0x03 0xF0 0x03 0xE4 0x01 0xC0
0x00 0xC0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-2-top-attack
0x07 0xC0 0x07 0xE0 0x07 0xE0 0x1F 0xE0 0x07 0xE0 0x07 0xE0 0x07 0xC0 0x03 0x80
0xC1 0x80 0xBF 0xC0 0xC0 0x20 0x38 0x38 0x07 0xFC 0x07 0xFE 0x07 0xEE 0x07 0xEC
: enemy-2-top-block
0x07 0xC0 0x07 0xE0 0x47 0xE0 0x5F 0xE0 0xA5 0xE0 0xA7 0xE0 0xA7 0xC0 0xA3 0x80
0xA1 0x80 0x53 0xC0 0x76 0x20 0x4E 0x20 0x6C 0x60 0x20 0xE0 0x13 0xC0 0x0F 0xE0
: enemy-2-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0E 0xF0 0x0E 0x70
0x0E 0x70 0x0E 0x70 0x06 0x30 0x06 0x18 0x03 0x18 0x03 0x18 0x0F 0x78 0x00 0x00
: enemy-2-bottom-step
0x07 0xE0 0x07 0xE0 0x0F 0xE0 0x0F 0xE0 0x1F 0xF0 0x1F 0xF0 0x1E 0xF0 0x1C 0xF0
0x1C 0x78 0x18 0x38 0x38 0x1C 0x38 0x0E 0x30 0x07 0x30 0x06 0xF0 0x0C 0x00 0x00
: enemy-2-bottom-stagger
0x03 0xFC 0x03 0xFC 0x03 0xF8 0x03 0xF8 0x07 0xF8 0x07 0xF8 0x07 0x78 0x0F 0x78
0x0E 0x70 0x1E 0x70 0x1C 0xE0 0x98 0xC0 0xFF 0xC0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-3-top-neutral
0x07 0xC0 0x07 0xE0 0x0F 0xE0 0x1C 0xE0 0x1F 0xE0 0x07 0xE0 0x07 0xC0 0x03 0xE0
0x01 0xE0 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-3-top-tell
0x07 0xC0 0x07 0xE0 0x0F 0xE0 0x1C 0xE0 0x1F 0xE0 0x07 0xE0 0x07 0xC0 0x03 0xE0
0x01 0xE0 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-3-top-stagger
0x03 0xE4 0x03 0xF0 0x07 0xF0 0x0E 0x76 0x0F 0xF0 0x03 0xF0 0x03 0xE4 0x01 0xF0
0x00 0xF0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-3-top-attack
0x07 0xC0 0x07 0xE0 0x0F 0xE0 0x1C 0xE0 0x1F 0xE0 0x07 0xE0 0x07 0xC0 0x03 0xE0
0xC1 0xE0 0xBF 0xE0 0xC0 0x20 0x38 0x38 0x07 0xFC 0x07 0xFE 0x07 0xEE 0x07 0xEC
: enemy-3-top-block
0x07 0xC0 0x07 0xE0 0x4F 0xE0 0x5C 0xE0 0xBF 0xE0 0xA7 0xE0 0xA7 0xC0 0xA3 0xE0
0xA1 0xE0 0x53 0xE0 0x76 0x20 0x4E 0x20 0x6C 0x60 0x20 0xE0 0x13 0xC0 0x0F 0xE0
: enemy-3-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0E 0xF0 0x0E 0x70
0x0E 0x70 0x0E 0x70 0x06 0x30 0x06 0x18 0x03 0x18 0x03 0x18 0x0F 0x78 0x00 0x00
: enemy-3-bottom-step
0x07 0xE0 0x07 0xE0 0x0F 0xE0 0x0F 0xE0 0x1F 0xF0 0x1F 0xF0 0x1E 0xF0 0x1C 0xF0
0x1C 0x78 0x18 0x38 0x38 0x1C 0x38 0x0E 0x30 0x07 0x30 0x06 0xF0 0x0C 0x00 0x00
: enemy-3-bottom-stagger
0x03 0xFC 0x03 0xFC 0x03 0xF8 0x03 0xF8 0x07 0xF8 0x07 0xF8 0x07 0x78 0x0F 0x78
0x0E 0x70 0x1E 0x70 0x1C 0xE0 0x98 0xC0 0xFF 0xC0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-4-top-neutral
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x0E 0xF0 0x0D 0xF0 0x1F 0xF8 0x1F 0xF8 0x1B 0xF8
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-4-top-tell
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x0C 0xF0 0x0D 0xF0 0x1F 0xF8 0x1F 0xF8 0x1B 0xF8
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-4-top-stagger
0x03 0xE4 0x07 0xF0 0x07 0xF0 0x06 0x79 0x06 0x78 0x0F 0xFC 0x0F 0xFD 0x0D 0xFC
0x00 0xC0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-4-top-attack
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x0E 0xF0 0x0D 0xF0 0x1F 0xF8 0x1F 0xF8 0x1B 0xF8
0xC1 0x80 0xBF 0xC0 0xC0 0x20 0x38 0x38 0x07 0xFC 0x07 0xFE 0x07 0xEE 0x07 0xEC
: enemy-4-top-block
0x07 0xC0 0x0F 0xE0 0x4F 0xE0 0x4E 0xF0 0xAD 0xF0 0xBF 0xF8 0xBF 0xF8 0xBB 0xF8
0xA1 0x80 0x53 0xC0 0x76 0x20 0x4E 0x20 0x6C 0x60 0x20 0xE0 0x13 0xC0 0x0F 0xE0
: enemy-4-bottom-neutral
0x07 0xF0 0x07 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF8
0x0F 0xF8 0x0F 0xF8 0x0F 0xF8 0x0F 0xFC 0x0F 0xFE 0x03 0x18 0x0F 0x78 0x00 0x00
: enemy-4-bottom-step
0x07 0xE0 0x07 0xE0 0x0F 0xE0 0x0F 0xE0 0x1F 0xF0 0x1F 0xF0 0x1F 0xF8 0x1F 0xF8
0x1F 0xFC 0x1F 0xFE 0x3F 0xFE 0x3F 0xFE 0x3F 0xFF 0x30 0x06 0xF0 0x0C 0x00 0x00
: enemy-4-bottom-stagger
0x03 0xFC 0x03 0xFC 0x03 0xF8 0x03 0xF8 0x07 0xF8 0x07 0xF8 0x0F 0xF8 0x0F 0xF8
0x1F 0xF8 0x7F 0xF8 0x3F 0xF8 0x98 0xF0 0xFF 0xD0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-5-top-neutral
0x1F 0xC0 0x0F 0xE0 0x0F 0xE0 0x06 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x07 0xC0
0x01 0xC0 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-5-top-tell
0x1F 0xC0 0x0F 0xE0 0x0F 0xE0 0x04 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x07 0xC0
0x01 0xC0 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-5-top-stagger
0x0F 0xE4 0x07 0xF0 0x07 0xF0 0x02 0x70 0x06 0x76 0x07 0xF0 0x03 0xF0 0x03 0xE4
0x00 0xE0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-5-top-attack
0x1F 0xC0 0x0F 0xE0 0x07 0xE0 0x06 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x07 0xC0
0xF1 0xC0 0x8F 0xC0 0xC0 0x20 0x20 0x38 0x1F 0xFC 0x07 0xFE 0x07 0xFE 0x07 0xF4
: enemy-5-top-block
0x1F 0xC0 0x0F 0xE0 0x4F 0xE0 0x45 0xE0 0xAD 0xE0 0xAF 0xE0 0xA7 0xE0 0xA7 0xC0
0xA1 0xC0 0x53 0xC0 0x76 0x20 0x4C 0x20 0x68 0x20 0x20 0x60 0x11 0xC0 0x0F 0xE0
: enemy-5-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF0 0x0F 0xF8 0x0F 0xF8 0x0F 0x78
0x0F 0x78 0x0F 0x78 0x07 0x38 0x07 0x9C 0x03 0x9C 0x03 0x9C 0x0F 0xFC 0x00 0x00
: enemy-5-bottom-step
0x07 0xF0 0x07 0xF0 0x0F 0xF0 0x0F 0xE0 0x1F 0xE0 0x1F 0xF0 0x1F 0xF0 0x1E 0xF8
0x1E 0x7C 0x1C 0x3E 0x3C 0x1E 0x3C 0x0F 0x38 0x07 0x38 0x06 0xF8 0x0C 0x00 0x00
: enemy-5-bottom-stagger
0x03 0xFC 0x03 0xFC 0x03 0xFC 0x03 0xFC 0x07 0xFC 0x07 0xFC 0x07 0xFC 0x0F 0xFC
0x0F 0x78 0x1F 0x78 0x1C 0xF0 0x9C 0xE0 0xFF 0xE0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-6-top-neutral
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x06 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xF0
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xC8 0x77 0xE4 0xFF 0xE4 0xC0 0x88 0x3F 0x10
: enemy-6-top-tell
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x04 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xF0
0x01 0x80 0x07 0xF0 0x0F 0xC8 0x1F 0xE4 0x37 0xF2 0x7F 0xF2 0x20 0x44 0x1F 0x98
: enemy-6-top-stagger
0x03 0xE2 0x07 0xF0 0x07 0xF8 0x02 0x7B 0x02 0x78 0x03 0xF8 0x03 0xFA 0x01 0xF8
0x00 0xC0 0x0F 0xF8 0x3F 0xE4 0xFF 0xE4 0xE3 0xF2 0x1F 0xF2 0x60 0x44 0x1F 0x8C
: enemy-6-top-attack
0x07 0xC0 0x0F 0xE0 0x0F 0xE0 0x06 0xF0 0x05 0xF0 0x07 0xF0 0x07 0xF0 0x03 0xF0
0xC1 0x80 0xBF 0xC0 0xC0 0x20 0x38 0x38 0x07 0xFC 0x07 0xFE 0x07 0xEE 0x07 0xEC
: enemy-6-top-block
0x07 0xC0 0x0F 0xE0 0x47 0xE0 0x45 0xF0 0xA5 0xF0 0xA7 0xF0 0xA7 0xF0 0xA3 0xF0
0xA1 0x80 0x53 0xC0 0x76 0x20 0x4E 0x20 0x6C 0x60 0x20 0xE0 0x13 0xC0 0x0F 0xE0
: enemy-6-bottom-neutral
0x0F 0xF0 0x0F 0xF0 0x0F 0xF8 0x1F 0xF8 0x1F 0xFC 0x0F 0xF0 0x0E 0x70 0x06 0x70
0x06 0x70 0x06 0x30 0x02 0x10 0x02 0x18 0x03 0x18 0x03 0x18 0x0F 0x78 0x00 0x00
: enemy-6-bottom-step
0x0F 0xE0 0x1F 0xF0 0x1F 0xF0 0x3F 0xF0 0x3F 0xF8 0x0F 0xE0 0x1C 0xE0 0x1C 0x70
0x18 0x38 0x18 0x18 0x30 0x0C 0x30 0x06 0x30 0x07 0x30 0x06 0xF0 0x0C 0x00 0x00
: enemy-6-bottom-stagger
0x07 0xFC 0x1F 0xFC 0x3F 0xF8 0x0F 0xF8 0x03 0xF8 0x07 0xF8 0x07 0x70 0x06 0x30
0x0E 0x30 0x0C 0x60 0x18 0x60 0x90 0xC0 0xFF 0xC0 0x73 0xC0 0x21 0x80 0x00 0x00
: enemy-7-top-neutral
0x03 0xC0 0x07 0xE0 0x07 0xE0 0x06 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x03 0xE0
0x07 0xF0 0x0F 0x88 0x1F 0x84 0x3F 0xC4 0x77 0xE2 0xFF 0xE2 0xC0 0x84 0x3F 0x08
: enemy-7-top-tell
0x03 0xC0 0x07 0xE0 0x07 0xE0 0x04 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x03 0xE0
0x03 0xF8 0x07 0xC4 0x0F 0xC2 0x1F 0xE2 0x3F 0xF1 0x7F 0xE1 0x20 0x42 0x1F 0x8C
: enemy-7-top-stagger
0x01 0xE4 0x03 0xF0 0x03 0xF0 0x06 0x76 0x06 0x70 0x03 0xF0 0x03 0xF4 0x01 0xF0
0x01 0xF8 0x0F 0xC4 0x3F 0xC4 0xFF 0xC4 0xE3 0xE2 0x1F 0xE2 0x60 0x44 0x1F 0x8C
: enemy-7-top-attack
0x03 0xC0 0x07 0xE0 0x07 0xE0 0x06 0xE0 0x0D 0xE0 0x0F 0xE0 0x07 0xE0 0x03 0xE0
0xC1 0xF0 0xBF 0xF0 0x80 0x38 0x40 0x3C 0x38 0x3E 0x07 0xFF 0x07 0xFF 0x07 0xEE
: enemy-7-top-block
0x03 0xC0 0x07 0xE0 0x47 0xE0 0x45 0xE0 0xAD 0xE0 0xAF 0xE0 0xA7 0xE0 0xA3 0xE0
0xA1 0xE0 0x53 0x30 0x76 0x10 0x4E 0x10 0x64 0x30 0x20 0x60 0x10 0xE0 0x0F 0xE0
: enemy-7-bottom-neutral
0x0F 0xF0 0x0F 0xF8 0x0F 0xF8 0x0F 0xF8 0x0F 0xF8 0x0F 0xF8 0x0F 0xF8 0x0F 0x7C
0x0F 0x7C 0x0F 0xFC 0x07 0xBC 0x07 0x9E 0x03 0xDE 0x03 0xDE 0x0F 0xFE 0x00 0x00
: enemy-7-bottom-step
0x07 0xF0 0x07 0xF0 0x0F 0xF0 0x0F 0xF8 0x1F 0xF8 0x1F 0xF8 0x1F 0xF8 0x1F 0xFC
0x1E 0x7C 0x1E 0x3E 0x3C 0x1F 0x3C 0x0F 0x3C 0x07 0x3C 0x06 0xFC 0x0C 0x00 0x00
: enemy-7-bottom-stagger
0x03 0xFE 0x03 0xFE 0x03 0xFE 0x03 0xFE 0x07 0xFE 0x07 0xFC 0x07 0xFC 0x0F 0xFC
0x0F 0x78 0x1F 0x78 0x1E 0xF0 0xBC 0xF0 0xFF 0xF0 0x73 0xE0 0x21 0xC0 0x00 0x00
to-code
:const MODE_NEUTRAL 0
:const MODE_WALK_RT 1
:const MODE_WALK_LF 2
:const MODE_BLOCK 3
:const MODE_TELL 4
:const MODE_ATTACK 5
:const MODE_STAGGER 6
#note: can't touch vc as it contains suspicion level. everything else is fair game.
:alias player-health vb # 20, 12, 4 (-8 per step)
:alias enemy-health va # 103, 111, 119 (+8 per step)
:alias player-fence-x v9
:alias enemy-fence-x v8
:alias player-mode v7
:alias player-timer v6
:alias enemy-mode v5
:alias enemy-timer v4
: draw-player-and-enemy
# top halves
v0 := 24
i := long player-top-neutral
if player-mode == MODE_ATTACK then i := long player-top-attack
if player-mode == MODE_STAGGER then i := long player-top-stagger
if player-mode == MODE_BLOCK then i := long player-top-block
sprite player-fence-x v0 0
if player-mode == MODE_ATTACK begin
v1 := 31
v2 := player-fence-x
v2 += 16
i := long player-sword
sprite v2 v1 0
end
indirect enemy-top-neutral-slot
if enemy-mode == MODE_ATTACK then indirect enemy-top-attack-slot
if enemy-mode == MODE_STAGGER then indirect enemy-top-stagger-slot
if enemy-mode == MODE_TELL then indirect enemy-top-tell-slot
if enemy-mode == MODE_BLOCK then indirect enemy-top-block-slot
sprite enemy-fence-x v0 0
if enemy-mode == MODE_ATTACK begin
v1 := 32
v2 := enemy-fence-x
v2 += -16
i := long enemy-sword
sprite v2 v1 0
end
# bottom halves
v0 += 16
i := long player-bottom-neutral
vf := 0
if player-mode == MODE_WALK_LF then vf := 1
if player-mode == MODE_WALK_RT then vf := 1
vf &= player-timer
if vf != 0 then i := long player-bottom-step
if player-mode == MODE_STAGGER then i := long player-bottom-stagger
sprite player-fence-x v0 0
indirect enemy-bottom-neutral-slot
vf := 0
if enemy-mode == MODE_WALK_LF then vf := 1
if enemy-mode == MODE_WALK_RT then vf := 1
vf &= enemy-timer
if vf != 0 then indirect enemy-bottom-step-slot
if enemy-mode == MODE_STAGGER then indirect enemy-bottom-stagger-slot
sprite enemy-fence-x v0 0
;
to-data
: fencing-enemy-0 # { target-pointer, patch-ptr }
pointer enemy-top-neutral-slot pointer enemy-0-top-neutral
pointer enemy-top-tell-slot pointer enemy-0-top-tell
pointer enemy-top-stagger-slot pointer enemy-0-top-stagger
pointer enemy-top-attack-slot pointer enemy-0-top-attack
pointer enemy-top-block-slot pointer enemy-0-top-block
pointer enemy-bottom-neutral-slot pointer enemy-0-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-0-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-0-bottom-stagger
: fencing-enemy-1
pointer enemy-top-neutral-slot pointer enemy-1-top-neutral
pointer enemy-top-tell-slot pointer enemy-1-top-tell
pointer enemy-top-stagger-slot pointer enemy-1-top-stagger
pointer enemy-top-attack-slot pointer enemy-1-top-attack
pointer enemy-top-block-slot pointer enemy-1-top-block
pointer enemy-bottom-neutral-slot pointer enemy-1-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-1-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-1-bottom-stagger
: fencing-enemy-2
pointer enemy-top-neutral-slot pointer enemy-2-top-neutral
pointer enemy-top-tell-slot pointer enemy-2-top-tell
pointer enemy-top-stagger-slot pointer enemy-2-top-stagger
pointer enemy-top-attack-slot pointer enemy-2-top-attack
pointer enemy-top-block-slot pointer enemy-2-top-block
pointer enemy-bottom-neutral-slot pointer enemy-2-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-2-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-2-bottom-stagger
: fencing-enemy-3
pointer enemy-top-neutral-slot pointer enemy-3-top-neutral
pointer enemy-top-tell-slot pointer enemy-3-top-tell
pointer enemy-top-stagger-slot pointer enemy-3-top-stagger
pointer enemy-top-attack-slot pointer enemy-3-top-attack
pointer enemy-top-block-slot pointer enemy-3-top-block
pointer enemy-bottom-neutral-slot pointer enemy-3-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-3-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-3-bottom-stagger
: fencing-enemy-4
pointer enemy-top-neutral-slot pointer enemy-4-top-neutral
pointer enemy-top-tell-slot pointer enemy-4-top-tell
pointer enemy-top-stagger-slot pointer enemy-4-top-stagger
pointer enemy-top-attack-slot pointer enemy-4-top-attack
pointer enemy-top-block-slot pointer enemy-4-top-block
pointer enemy-bottom-neutral-slot pointer enemy-4-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-4-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-4-bottom-stagger
: fencing-enemy-5
pointer enemy-top-neutral-slot pointer enemy-5-top-neutral
pointer enemy-top-tell-slot pointer enemy-5-top-tell
pointer enemy-top-stagger-slot pointer enemy-5-top-stagger
pointer enemy-top-attack-slot pointer enemy-5-top-attack
pointer enemy-top-block-slot pointer enemy-5-top-block
pointer enemy-bottom-neutral-slot pointer enemy-5-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-5-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-5-bottom-stagger
: fencing-enemy-6
pointer enemy-top-neutral-slot pointer enemy-6-top-neutral
pointer enemy-top-tell-slot pointer enemy-6-top-tell
pointer enemy-top-stagger-slot pointer enemy-6-top-stagger
pointer enemy-top-attack-slot pointer enemy-6-top-attack
pointer enemy-top-block-slot pointer enemy-6-top-block
pointer enemy-bottom-neutral-slot pointer enemy-6-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-6-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-6-bottom-stagger
: fencing-enemy-7
pointer enemy-top-neutral-slot pointer enemy-7-top-neutral
pointer enemy-top-tell-slot pointer enemy-7-top-tell
pointer enemy-top-stagger-slot pointer enemy-7-top-stagger
pointer enemy-top-attack-slot pointer enemy-7-top-attack
pointer enemy-top-block-slot pointer enemy-7-top-block
pointer enemy-bottom-neutral-slot pointer enemy-7-bottom-neutral
pointer enemy-bottom-step-slot pointer enemy-7-bottom-step
pointer enemy-bottom-stagger-slot pointer enemy-7-bottom-stagger
: fencing-enemy-table
pointer fencing-enemy-0
pointer fencing-enemy-1
pointer fencing-enemy-2
pointer fencing-enemy-3
pointer fencing-enemy-4
pointer fencing-enemy-5
pointer fencing-enemy-6
pointer fencing-enemy-7
: engarde
0xFE 0x1C 0x19 0xFC 0x04 0x27 0xF9 0x06 0x1A 0x2B 0x1D 0x1E 0x3F 0xFF
: fight-start-1 # The fiend grabs a sword from the wall. They intend to go down fighting!
0xFE 0x03 0x08 0x13 0x21 0x1E 0xF9 0x1F 0x22 0x1E 0x27 0x1D 0xF9 0x20 0x2B 0x1A
0x1B 0x2C 0xF9 0x1A 0xF9 0xF9 0xFE 0x03 0x12 0x2C 0x30 0x28 0x2B 0x1D 0xF9 0x1F
0x2B 0x28 0x26 0xF9 0x2D 0x21 0x1E 0xF9 0x30 0x1A 0x25 0x25 0x3E 0xF9 0xF9 0xFE
0x03 0x26 0x13 0x21 0x1E 0x32 0xF9 0x22 0x27 0x2D 0x1E 0x27 0x1D 0xF9 0x2D 0x28
0xF9 0x20 0x28 0xF9 0xF9 0xFE 0x03 0x30 0x1D 0x28 0x30 0x27 0xF9 0x1F 0x22 0x20
0x21 0x2D 0x22 0x27 0x20 0x3F 0xFF
: fight-start-2 # I pray those fencing lessons won't have gone to waste...
0xFE 0x01 0x11 0x08 0xF9 0x29 0x2B 0x1A 0x32 0xF9 0x2D 0x21 0x28 0x2C 0x1E 0xF9
0x1F 0x1E 0x27 0x1C 0x22 0x27 0x20 0xFE 0x01 0x1B 0x25 0x1E 0x2C 0x2C 0x28 0x27
0x2C 0xF9 0x30 0x28 0x27 0x42 0x2D 0xF9 0x21 0x1A 0x2F 0x1E 0xFE 0x01 0x25 0x20
0x28 0x27 0x1E 0xF9 0x2D 0x28 0xF9 0x30 0x1A 0x2C 0x2D 0x1E 0x3E 0x3E 0x3E 0xFF
: dispatched # With a few deft blows, the villain is soundly trounced.
0xFE 0x03 0x11 0x16 0x22 0x2D 0x21 0xF9 0x1A 0xF9 0x1F 0x1E 0x30 0xF9 0x1D 0x1E
0x1F 0x2D 0xFE 0x03 0x1B 0x1B 0x25 0x28 0x30 0x2C 0x41 0xF9 0x2D 0x21 0x1E 0xF9
0x2F 0x22 0x25 0x25 0x1A 0x22 0x27 0xFE 0x03 0x25 0x22 0x2C 0xF9 0x2C 0x28 0x2E
0x27 0x1D 0x25 0x32 0xF9 0x2D 0x2B 0x28 0x2E 0x27 0x1C 0x1E 0x1D 0x3E 0xFF
: failed-fight-1 # Blast, the villain got the best of me and made their escape!
0xFE 0x25 0x07 0xFC 0x01 0x25 0x1A 0x2C 0x2D 0x3F 0xF9 0xFE 0x05 0x1B 0xFC 0x13
0x21 0x1E 0xF9 0x2F 0x22 0x25 0x25 0x1A 0x22 0x27 0xF9 0x20 0x28 0x2D 0xF9 0x2D
0x21 0x1E 0xF9 0xFE 0x05 0x25 0x1B 0x1E 0x2C 0x2D 0xF9 0x28 0x1F 0xF9 0x26 0x1E
0xF9 0x1A 0x27 0x1D 0xF9 0x26 0x1A 0x1D 0x1E 0xF9 0xFE 0x05 0x2F 0x2D 0x21 0x1E
0x22 0x2B 0xF9 0x1E 0x2C 0x1C 0x1A 0x29 0x1E 0x3F 0xFF
: failed-fight-2 # Jolly good showing, anyway. I can hear the hounds calling for them already...
0xFE 0x05 0x05 0x09 0x28 0x25 0x25 0x32 0xF9 0x20 0x28 0x28 0x1D 0xF9 0x2C 0x21
0x28 0x30 0x22 0x27 0x20 0x41 0xF9 0xFE 0x05 0x0F 0x1A 0x27 0x32 0x30 0x1A 0x32
0x3E 0xF9 0x08 0xF9 0x1C 0x1A 0x27 0xF9 0x21 0x1E 0x1A 0x2B 0xF9 0xFE 0x05 0x19
0x2D 0x21 0x1E 0xF9 0x21 0x28 0x2E 0x27 0x1D 0x2C 0xF9 0x1C 0x1A 0x25 0x25 0x22
0x27 0x20 0xF9 0xFE 0x05 0x23 0x1F 0x28 0x2B 0xF9 0x2D 0x21 0x1E 0x26 0xF9 0x1A
0x25 0x2B 0x1E 0x1A 0x1D 0x32 0x3E 0x3E 0x3E 0xF9 0xFE 0x24 0x31 0x13 0x07 0x04
0xF9 0x04 0x0D 0x03 0xFF
: fencing-registers
20 103
: fencing-registers-round
32 80 0 0 0 0
: fencing-ai # 8 entries { mode, timer }
:byte MODE_WALK_LF 10
:byte MODE_WALK_LF 10
:byte MODE_WALK_LF 10
:byte MODE_WALK_LF 10
:byte MODE_WALK_RT 6
:byte MODE_WALK_RT 6
:byte MODE_BLOCK 4
:byte MODE_BLOCK 4
:byte MODE_BLOCK 4
to-code
: fencing-minigame
clear
print fight-start-1
dialog-pause
print fight-start-2
dialog-pause
# rewrite all the enemy graphics based
# on who is currently the villain...
i := long npc-murderer
load v0
i := long fencing-enemy-table
i += v0
i += v0
load v1
i := fencing-graphics-rewrite
save v1
v4 := 0
loop
indirect fencing-graphics-rewrite
i += v4
i += v4
i += v4
i += v4
load v3
i := fencing-graphics-dest
save v0 - v1
indirect fencing-graphics-dest
save v2 - v3
v4 += 1
if v4 != 8 then
again
i := long fencing-registers
load vb - v4
i := long fencing-background
full-screen-blit
print engarde
wait 60
print engarde
draw-player-and-enemy
loop
draw-player-and-enemy
# player controls and state machine
if player-mode == MODE_NEUTRAL begin
vf := OCTO_KEY_A
if vf key begin
player-mode := MODE_WALK_LF
player-timer := 3
end
vf := OCTO_KEY_D
if vf key begin
player-mode := MODE_WALK_RT
player-timer := 3
end
vf := OCTO_KEY_W
if vf key begin
player-mode := MODE_BLOCK
player-timer := 10
end
vf := OCTO_KEY_E
if vf key begin
player-mode := MODE_ATTACK
player-timer := 6
# did the player hit the enemy?
if enemy-mode != MODE_BLOCK begin
v0 := enemy-fence-x
v0 -= player-fence-x
if v0 < 24 begin
enemy-mode := MODE_STAGGER
enemy-timer := 30
player-timer := 31
end
end
end
end
if player-fence-x > 0 begin
if player-mode == MODE_WALK_LF then player-fence-x += -1
end
if player-fence-x < 112 begin
if player-mode == MODE_WALK_RT then player-fence-x += 1
end
if player-mode != MODE_NEUTRAL begin
player-timer += -1
if player-timer == 0 begin
if player-mode == MODE_STAGGER begin
# done staggering, subtract health.
i := long fencing-heart
v0 := 58
sprite player-health v0 4
player-health += -8
if player-health == -4 then jump fencing-lose
i := long fencing-registers-round
load player-fence-x - enemy-timer
else
player-mode := MODE_NEUTRAL
end
end
end
# enemy AI
if enemy-mode == MODE_NEUTRAL begin
v0 := enemy-fence-x
v0 -= player-fence-x
if v0 < 26 begin
# if player is close, attack!
enemy-mode := MODE_TELL
enemy-timer := 4
else
# otherwise, pick randomly
i := long fencing-ai
v0 := random 0b1110
i += v0
load enemy-mode - enemy-timer
end
else
enemy-timer += -1
if enemy-timer == 0 begin
if enemy-mode == MODE_STAGGER begin
# done staggering, subtract health.
i := long fencing-heart
v0 := 58
sprite enemy-health v0 4
enemy-health += 8
if enemy-health == 127 then jump fencing-win
i := long fencing-registers-round
load player-fence-x - enemy-timer
end
if enemy-mode == MODE_TELL begin
enemy-mode := MODE_ATTACK
enemy-timer := 6
# did the enemy hit the player?
if player-mode != MODE_BLOCK begin
v0 := enemy-fence-x
v0 -= player-fence-x
if v0 < 24 begin
player-mode := MODE_STAGGER
player-timer := 30
enemy-timer := 31
end
end
else
enemy-mode := MODE_NEUTRAL
end
end
end
if enemy-fence-x > 0 begin
if enemy-mode == MODE_WALK_LF then enemy-fence-x += -1
end
if enemy-fence-x < 112 begin
if enemy-mode == MODE_WALK_RT then enemy-fence-x += 1
end
draw-player-and-enemy
wait 3
again
: fencing-win
clear
print dispatched
dialog-pause
print good-end-2
dialog-pause
print good-end-3
jump show-rank
: fencing-lose
clear
print failed-fight-1
dialog-pause
print failed-fight-2
jump show-rank
###########################################
#
# Main Map
#
###########################################
to-data
:const FLOORPLAN_X 16
:const FLOORPLAN_Y 2
:calc FLOORPLAN_END_X { FLOORPLAN_X + 16 * 6 }
:calc FLOORPLAN_END_Y { FLOORPLAN_Y + 16 * 3 }
: empty-floorplan # 6x3 16x16 sprites, tblr
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0x7F 0xFF 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00
0x0F 0xFF 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00
0xF8 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00
0xFF 0xFF 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00
0x04 0x00 0x1C 0x00 0x20 0x00 0x10 0x00 0x08 0x00 0x04 0x00 0x04 0x00 0x04 0x00
0xFF 0xFF 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00
0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00 0x08 0x00
0xF7 0x7F 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x70 0x10 0x08
0x10 0x10 0x10 0x20 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x40 0x10 0x40
0xFF 0xFE 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02
0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02
0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00
0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x7F 0xFF 0x40 0x00 0x40 0x00
0x08 0x00 0x08 0x00 0x08 0x00 0x0F 0xFF 0x08 0x00 0x08 0x00 0x10 0x00 0x20 0x00
0x40 0x7F 0x38 0x40 0x08 0x40 0x08 0x20 0x08 0x10 0xF8 0x08 0x08 0x70 0x08 0x40
0x04 0x08 0x04 0x14 0x04 0x24 0xFF 0xC7 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xFF 0xFF 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04
0x08 0x10 0x08 0x28 0x08 0x48 0xFF 0x8F 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xC7 0xFF 0x24 0x04 0x14 0x04 0x08 0x04 0x00 0x04 0x00 0x07 0x00 0x04 0x00 0x07
0x10 0x7F 0x10 0x40 0x10 0x40 0xF0 0x40 0x00 0x40 0x00 0x40 0x00 0x70 0x00 0x08
0xF0 0x10 0x10 0x20 0x10 0x40 0x10 0x40 0x10 0x40 0xF0 0x40 0x10 0x40 0xF0 0x40
0xFF 0xFE 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02
0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02
0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00
0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x7F 0xFF
0x08 0x40 0x08 0x40 0x08 0x40 0x10 0x40 0x20 0x40 0x40 0x40 0x38 0x40 0x08 0x40
0x08 0x40 0x08 0x40 0x08 0x40 0x08 0x40 0x08 0x40 0x08 0x7F 0x08 0x40 0xFB 0x40
0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x04 0x00 0x07 0x00 0x04 0x00 0x04
0x00 0x08 0x00 0x10 0x00 0x20 0x00 0x1C 0x00 0x04 0xFF 0xFF 0x00 0x00 0x00 0x00
0x00 0x04 0x00 0x07 0x00 0x04 0x00 0x07 0x00 0x04 0xFF 0xFD 0x00 0x00 0x00 0x00
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xFF 0xFF 0x00 0x00 0x00 0x00
0x10 0x7F 0xF0 0x40 0x10 0x40 0xF0 0x40 0x10 0x40 0xD0 0x40 0x00 0x40 0x00 0x40
0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0x00 0x40 0xFF 0xC0 0x00 0x40 0x00 0x7F
0xF1 0xFE 0x09 0x02 0x05 0x02 0x02 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02
0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0x00 0x02 0xFF 0xFE
: room-masks # 16x16 sprites
0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC # library
0xFF 0xFC 0xFF 0xF8 0xFF 0xF0 0xFF 0xE0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xE0
0xFF 0xF0 0xFF 0xF0 0xFF 0xF0 0xFF 0xF0 0xFF 0xE0 0xFF 0xC0 0xFF 0x80 0xFF 0x80 # bathroom
0xFF 0x80 0xFF 0xC0 0xFF 0xE0 0xFF 0xF0 0xFF 0xF0 0xFF 0xF0 0x00 0x00 0x00 0x00
0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 # bedroom
0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xE3 0xC0 0xC1 0xC0 0x80 0xC0 0x00 0x00 0x00 0x00
0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 # drawing room (same as bedroom)
0xFF 0xC0 0xFF 0xC0 0xFF 0xC0 0xE3 0xC0 0xC1 0xC0 0x80 0xC0 0x00 0x00 0x00 0x00
0xFF 0xFC 0xFF 0xFC 0xFF 0xF8 0xFF 0xF0 0xFF 0xE0 0xFF 0xE0 0xFF 0xE0 0xFF 0xF0 # parlor
0xFF 0xF8 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0xFF 0xFC 0x00 0x00 0x00 0x00 0x00 0x00
0x3F 0xFE 0x1F 0xFE 0x0F 0xFE 0x0F 0xFE 0x1F 0xFE 0x3F 0xFE 0x7F 0xFE 0xFF 0xFE # dining room
0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFE 0xFF 0xFC 0xFF 0xF8 0xFF 0xF0 0xFF 0xE0
0x80 0xE0 0xC0 0xE0 0xE1 0xE0 0xFF 0xE0 0xFF 0xE0 0xFF 0xE0 0xFF 0xE0 0xFF 0xE0 # study
0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xFF 0xFF 0x7F 0xFF 0x3F 0xFF 0x1F 0xFF 0x1F 0xFF 0x1F 0xFF 0x3F 0xFF 0x7F 0xFF # conservatory
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xFF 0xFF 0x7F 0xFF 0x3F 0xFF 0x1F 0xFF 0x1F 0xFF 0x1F 0xFF 0x3F 0xFF 0x7F 0xFF # kitchen (same as conservatory)
0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
0xFE 0x03 0xFF 0x03 0xFF 0x87 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF # pantry
0xFF 0xFF 0xFF 0xFF 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
: mask-positions # [x,y]
20 13 # 0 - library
39 5 # 1 - bathroom
56 5 # 2 - bedroom
71 5 # 3 - drawing room
20 34 # 4 - parlor
44 29 # 5 - dining room
64 29 # 6 - study
92 5 # 7 - conservatory
92 21 # 8 - kitchen
92 37 # 9 - pantry
: room-nav # [n,e,s,w]
1 1 4 0 # 0
1 2 5 0 # 1
2 3 5 1 # 2
3 7 6 2 # 3
0 5 4 4 # 4
2 6 5 4 # 5
3 9 6 5 # 6
7 7 8 3 # 7
7 8 9 6 # 8
8 9 9 6 # 9
10 10 10 10 # 10 (secret room)
: label-library 0xFE 0x28 0x35 0x0B 0x22 0x1B 0x2B 0x1A 0x2B 0x32 0xFF
: label-bathroom 0xFE 0x26 0x35 0x01 0x1A 0x2D 0x21 0x2B 0x28 0x28 0x26 0xFF
: label-bedroom 0xFE 0x26 0x35 0x01 0x1E 0x1D 0x2B 0x28 0x28 0x26 0xFF
: label-drawing-room 0xFE 0x1B 0x35 0x03 0x2B 0x1A 0x30 0x22 0x27 0x20 0xF9 0x11 0x28 0x28 0x26 0xFF
: label-parlor 0xFE 0x2D 0x35 0x0F 0x1A 0x2B 0x25 0x28 0x2B 0xFF
: label-dining-room 0xFE 0x1E 0x35 0x03 0x22 0x27 0x22 0x27 0x20 0xF9 0x11 0x28 0x28 0x26 0xFF
: label-study 0xFE 0x2F 0x35 0x12 0x2D 0x2E 0x1D 0x32 0xFF
: label-conservatory 0xFE 0x1B 0x35 0x02 0x28 0x27 0x2C 0x1E 0x2B 0x2F 0x1A 0x2D 0x28 0x2B 0x32 0xFF
: label-kitchen 0xFE 0x29 0x35 0x0A 0x22 0x2D 0x1C 0x21 0x1E 0x27 0xFF
: label-pantry 0xFE 0x2C 0x35 0x0F 0x1A 0x27 0x2D 0x2B 0x32 0xFF
: room-label-table
pointer label-library
pointer label-bathroom
pointer label-bedroom
pointer label-drawing-room
pointer label-parlor
pointer label-dining-room
pointer label-study
pointer label-conservatory
pointer label-kitchen
pointer label-pantry
to-code
: draw-map-label
i := long room-label-table
i += current-room
i += current-room
load v1
jump print-text # TCO
:macro main-map {
# draw the building's floorplan
clear
i := long empty-floorplan
v0 := FLOORPLAN_X
v1 := FLOORPLAN_Y
v2 := 32
loop
sprite v0 v1 0
i += v2
v0 += 16
if v0 == FLOORPLAN_END_X then v1 += 16
if v0 == FLOORPLAN_END_X then v0 := FLOORPLAN_X
if v1 != FLOORPLAN_END_Y then
again
# choose a new room
loop
draw-map-label
i := long mask-positions
i += current-room
i += current-room
load v1 - v2
i := long room-masks
v0 := current-room
vf := 32
loop
while v0 != 0
v0 += -1
i += vf
again
sprite v1 v2 0
v4 := key
sprite v1 v2 0
draw-map-label
i := long room-nav
i += current-room
i += current-room
i += current-room
i += current-room
load v3
if v4 == OCTO_KEY_W then current-room := v0
if v4 == OCTO_KEY_D then current-room := v1
if v4 == OCTO_KEY_S then current-room := v2
if v4 == OCTO_KEY_A then current-room := v3
if v4 != OCTO_KEY_E then
again
}
###########################################
#
# Entrypoint
#
###########################################
: main
hires
loop
intro-sequence
loop
main-map
thicken-plot SUSPICION_ENTER_ROOM
room
while current-room != GAME_OVER
describe-ambience
again
again