###########################################
#
#  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
