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