peasant: split outer off from cliff_heights

was running out of room
This commit is contained in:
Vince Weaver 2024-10-22 22:27:05 -04:00
parent 3ac85fe3c5
commit e389f21d82
21 changed files with 1875 additions and 1338 deletions

View File

@ -13,8 +13,7 @@
.include "../inventory/inventory.inc"
.include "../parse_input.inc"
.include "../redbook_sound.inc"
collision_location = $bc00
.include "../common_locations.inc"
LOCATION_BASE = LOCATION_CLIFF_HEIGHTS ; (21 = $15)
@ -228,50 +227,6 @@ level_good:
jsr draw_lightning
no_lightning:
;=====================
; see if keeper triggered
lda MAP_LOCATION
cmp #LOCATION_TROGDOR_OUTER
bne done_check_keeper
lda IN_QUIZ
bne done_check_keeper
check_keeper1:
lda INVENTORY_2
and #INV2_TROGSHIELD ; only if not have shield
bne check_keeper2
lda PEASANT_X ; only if ourx > 9
cmp #10
bcc check_keeper2
jsr handle_keeper1
check_keeper2:
done_check_keeper:
;=================================
; draw keeper if we need refresh
lda REFRESH_SCREEN
beq no_draw_keeper
lda #0
sta REFRESH_SCREEN
lda IN_QUIZ ; need to draw keeper if quizzing
beq no_draw_keeper
jsr draw_standing_keeper
no_draw_keeper:
;=====================
; always draw peasant
@ -294,49 +249,19 @@ no_draw_keeper:
; original code also waited approximately 100ms?
; this led to keypressed being lost
lda PEASANT_DIR
sta OLD_DIR
lda #13
sta WAIT_LOOP
wait_loop:
lda IN_QUIZ
cmp #2 ; means waiting for answer
bne normal_keyboard_check
jsr check_keyboard_answer
jmp done_keyboard_check
normal_keyboard_check:
jsr check_keyboard
done_keyboard_check:
lda #50 ; approx 7ms
jsr wait
dec WAIT_LOOP
bne wait_loop
;===================================
; keep from moving if being quizzed
;===================================
lda IN_QUIZ
beq not_in_quiz
lda #0 ; keep from moving
sta PEASANT_XADD
sta PEASANT_YADD
lda OLD_DIR ; keep from changing dir
sta PEASANT_DIR
not_in_quiz:
jsr wait_vblank
jmp game_loop
@ -432,27 +357,21 @@ exiting_cliff:
map_backgrounds_low:
.byte <cliff_heights_zx02
.byte <outer_zx02
map_backgrounds_hi:
.byte >cliff_heights_zx02
.byte >outer_zx02
map_priority_low:
.byte <cliff_heights_priority_zx02
.byte <outer_priority_zx02
map_priority_hi:
.byte >cliff_heights_priority_zx02
.byte >outer_priority_zx02
verb_tables_low:
.byte <cliff_heights_verb_table
.byte <cave_outer_verb_table
verb_tables_hi:
.byte >cliff_heights_verb_table
.byte >cave_outer_verb_table
@ -463,522 +382,16 @@ cliff_text_zx02:
robe_sprite_data:
.incbin "../sprites_peasant/robe_sprites.zx02"
; .incbin "../sprites_peasant/robe_shield_sprites.zx02"
.include "sprites_heights/ron_sprites.inc"
;.include "sprites_heights/keeper1_sprites.inc"
;.include "sprites_heights/ron_sprites.inc"
;.include "sprites_heights/keeper2_sprites.inc"
.include "draw_lightning.s"
;==========================================
; first keeper ron
; flips peasant forward
; 3 (4) (u shaped)
; 5 (4) (up)
; 6 (6) (up, up)
; 7 (4) (up, down)
; 6 (4)
; 7 (4)
; 6 (4)
; 7 (4)
; 6 (4)
; 7 (4)
; 6 (4)
; 7 (4) 9? repeats, ending on down
; ron transition happens
; (8) switches to 5 part way through first frame?
; 3 / ron next , to 1 part way through second (cloud frame)
; 5 ron (gap)
; 10 ron (tiny smoke)
; 10 full ron
ron_which_keeper_sprite:
.byte 3, 5, 6, 7
.byte 6, 7, 6, 7
.byte 6, 7, 6, 7
.byte 7, 5, 5, 1, 1, 1, 1, 1, 1, 1, 1
ron_which_ron_sprite:
.byte 0, 0, 0, 0
.byte 0, 0, 0, 0
.byte 0, 0, 0, 0
.byte 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 4
;===============================
; ron transform
;===============================
ron_transform:
lda #0
sta KEEPER_COUNT
; look down for this
lda #PEASANT_DIR_DOWN
sta PEASANT_DIR
ron1_loop:
; play sound if needed, 2.. 12
lda KEEPER_COUNT
cmp #2
bcc skip_ron_sound
cmp #12
bcs skip_ron_sound
and #1
beq ron_other_note
lda #NOTE_F6
beq ron_common_note ; bra
ron_other_note:
lda #NOTE_E6
ron_common_note:
sta speaker_frequency
lda #8
sta speaker_duration
jsr speaker_tone
skip_ron_sound:
; erase prev keeper
ldy #3 ; erase slot 3?
jsr hgr_partial_restore_by_num
inc KEEPER_COUNT
ldx KEEPER_COUNT
lda #10
sta SPRITE_X
lda #60
sta SPRITE_Y
; get offset for graphics
ldx KEEPER_COUNT
lda ron_which_keeper_sprite,X
clc
adc #5 ; skip ron
tax
ldy #3 ; ? slot
jsr hgr_draw_sprite_save
;=======================
; see if done animation
lda KEEPER_COUNT
cmp #21 ;
beq ron_done
cmp #12
bcc ron_peasant ; normal peasant first 12 frames
; erase prev peasant
ldy #4 ; erase slot 4?
jsr hgr_partial_restore_by_num
ldx KEEPER_COUNT
lda PEASANT_X
sta SPRITE_X
lda PEASANT_Y
sta SPRITE_Y
; get offset for graphics
; ldx KEEPER_COUNT
lda ron_which_ron_sprite,X
tax
ldy #4 ; ? slot
jsr hgr_draw_sprite_save
jmp done_ron_peasant
ron_peasant:
;========================
; draw peasant
jsr draw_peasant
;========================
; increment flame
jsr increment_flame
done_ron_peasant:
;=========================
; delay
lda #200
jsr wait
jsr wait_vblank
jmp ron1_loop
ron_done:
;===========================
; weep sound
lda #32
sta speaker_duration
lda #NOTE_E5
sta speaker_frequency
jsr speaker_tone
lda #64
sta speaker_duration
lda #NOTE_F5
sta speaker_frequency
jsr speaker_tone
jsr wait_until_keypress
rts
;==========================================
; first keeper info
;
; seems to trigger at approx peasant_x = 70 (10)
;
; 0 (4), move down/r
; 0 (4), move down/r
; 1 (4), no move
; 1 (5), move down/r
; 1 (5), move down/r
; 1 (5), move down/r
; 1 (5), move down/r
; 1 (5), move down/r
; 2 (5)
; 3 (4)
; 4 (10)
; 3 (10)
; 4 (15)
; 3 (5)
; 2 (5)
; 1 (11) ; starts talking
keeper_x:
.byte 9, 9,10,10
.byte 10,10,10,10
.byte 10,10,10,10, 10,10
.byte 10,10,10,10,10,10,10
keeper_y:
.byte 51,52,53,54
.byte 56,58,59,60
.byte 60,60,60,60, 60,60
.byte 60,60,60,60, 60,60,60
which_keeper_sprite:
.byte 0, 0, 1, 1
.byte 1, 1, 1, 1
.byte 2, 3, 4, 4, 3, 3
.byte 4, 4, 4, 3, 2, 1, 1
;===============================
; handle keeper1
;===============================
; handle keeper1
; stop walking
; have keeper come out to talk
; special limited handling
; can't walk unless win
handle_keeper1:
lda #0 ; stop walking
sta PEASANT_XADD
sta PEASANT_YADD
;===========================
; animate keeper coming out
keeper1_loop:
; erase prev keeper
ldy #3 ; erase slot 3?
jsr hgr_partial_restore_by_num
inc KEEPER_COUNT
ldx KEEPER_COUNT
lda keeper_x,X
sta SPRITE_X
lda keeper_y,X
sta SPRITE_Y
; get offset for graphics
ldx KEEPER_COUNT
lda which_keeper_sprite,X
clc
adc #5 ; skip ron
tax
ldy #3 ; ? slot
jsr hgr_draw_sprite_save
;=======================
; see if done animation
lda KEEPER_COUNT
cmp #20 ;
beq keeper_talk1
;========================
; increment flame
jsr draw_peasant
;========================
; increment flame
jsr increment_flame
;=========================
; delay
lda #200
jsr wait
jsr wait_vblank
jmp keeper1_loop
rts
;====================
; increment flame
;====================
increment_flame:
inc FLAME_COUNT
lda FLAME_COUNT
cmp #3
bne flame_good
lda #0
sta FLAME_COUNT
flame_good:
rts
keeper_talk1:
; print the message
ldx #<cave_outer_keeper1_message1
ldy #>cave_outer_keeper1_message1
jsr finish_parse_message
jsr draw_standing_keeper
ldx #<cave_outer_keeper1_message2
ldy #>cave_outer_keeper1_message2
jsr finish_parse_message
jsr draw_standing_keeper
ldx #<cave_outer_keeper1_message3
ldy #>cave_outer_keeper1_message3
jsr finish_parse_message
jsr draw_standing_keeper
ldx #<cave_outer_keeper1_message4
ldy #>cave_outer_keeper1_message4
jsr finish_parse_message
jsr draw_standing_keeper
;===============================================
; if have sub print5, otherwise skip ahead
lda INVENTORY_2
and #INV2_MEATBALL_SUB
beq dont_have_sub
ldx #<cave_outer_keeper1_message5
ldy #>cave_outer_keeper1_message5
jsr finish_parse_message
jsr draw_standing_keeper
dont_have_sub:
; now we need to re-draw keeper
; also we're in quiz mode
; so we can't move and can only take quiz or give sub
lda #1
sta IN_QUIZ
; custom common verb table the essentially does nothing
jsr setup_quiz_verb_table
; respond only to take quiz and give sub
lda #<keeper1_verb_table
sta INL
lda #>keeper1_verb_table
sta INH
jsr load_custom_verb_table
jmp game_loop
;==============================
; check_keyboard_answer
;==============================
; for when in quiz
; looking for just A, B, or C
check_keyboard_answer:
lda KEYPRESS
bpl no_answer
bit KEYRESET
pha
jsr restore_parse_message
lda #0
sta REFRESH_SCREEN ; don't refresh or we draw keeper on top
pla
and #$7f ; strip high bit
and #$df ; convert to lowercase $61 -> $41 0110 -> 0100
cmp #'A'
bcc invalid_answer ; blt
cmp #'D'
bcs invalid_answer ; bge
ldx WHICH_QUIZ
cmp quiz1_answers,X
beq right_answer
bne wrong_answer
no_answer:
rts
;======================
; quiz1 invalid answer
;======================
invalid_answer:
bit KEYRESET ; clear the keyboard buffer
lda WHICH_QUIZ
cmp #2 ; off by 1
beq resay_quiz3
cmp #1
beq resay_quiz2
resay_quiz1:
ldx #<cave_outer_quiz1_1again
ldy #>cave_outer_quiz1_1again
jmp finish_parse_message_nowait
resay_quiz2:
ldx #<cave_outer_quiz1_2again
ldy #>cave_outer_quiz1_2again
jmp finish_parse_message_nowait
resay_quiz3:
ldx #<cave_outer_quiz1_3again
ldy #>cave_outer_quiz1_3again
jmp finish_parse_message_nowait
;======================
; quiz1 wrong answer
;======================
wrong_answer:
bit KEYRESET ; clear the keyboard buffer
ldx #<cave_outer_quiz1_wrong
ldy #>cave_outer_quiz1_wrong
jsr finish_parse_message
jsr draw_standing_keeper
ldx #<cave_outer_quiz1_wrong_part2
ldy #>cave_outer_quiz1_wrong_part2
jsr finish_parse_message
jsr draw_standing_keeper
ldx #<cave_outer_quiz1_wrong_part3
ldy #>cave_outer_quiz1_wrong_part3
jsr finish_parse_message
; transform to ron
jsr ron_transform
ldx #<cave_outer_quiz1_wrong_part4
ldy #>cave_outer_quiz1_wrong_part4
jsr finish_parse_message
lda #0
sta IN_QUIZ
; game over
lda #LOAD_GAME_OVER
sta WHICH_LOAD
lda #NEW_FROM_DISK
sta LEVEL_OVER
rts
;======================
; quiz1 correct answer
;======================
right_answer:
bit KEYRESET ; clear the keyboard buffer
ldx #<cave_outer_quiz1_correct
ldy #>cave_outer_quiz1_correct
jsr finish_parse_message
jsr cave_outer_get_shield
; FIXME: animate keeper backing off
rts
quiz1_answers:
.byte 'B','A','C'
;============================
; setup heights verb table
;============================
@ -1005,65 +418,18 @@ setup_heights_verb_table:
rts
;==========================
; draw standing keeper
;==========================
draw_standing_keeper:
;====================
; increment flame
;====================
increment_flame:
inc FLAME_COUNT
lda FLAME_COUNT
cmp #3
bne flame_good
; erase prev keeper
ldy #3 ; erase slot 3?
jsr hgr_partial_restore_by_num
ldx #19
lda keeper_x,X
sta SPRITE_X
lda keeper_y,X
sta SPRITE_Y
; get offset for graphics
ldx #19
lda which_keeper_sprite,X
clc
adc #5 ; skip ron
tax
ldy #3 ; ? slot
jsr hgr_draw_sprite_save
lda #0
sta FLAME_COUNT
flame_good:
rts
sprites_xsize:
.byte 2, 2, 2, 2, 2 ; ron 0..4
.byte 2, 2, 3, 3, 3, 3, 3, 3 ; keeper 0..7
sprites_ysize:
.byte 29,30,30,30,30 ; ron 0..4
.byte 28,28,28,28,28,28,28,28 ; keeper 0..7
sprites_data_l:
.byte <ron0,<ron1,<ron2,<ron3,<ron4
.byte <keeper0,<keeper1,<keeper2,<keeper3
.byte <keeper4,<keeper5,<keeper6,<keeper7
sprites_data_h:
.byte >ron0,>ron1,>ron2,>ron3,>ron4
.byte >keeper0,>keeper1,>keeper2,>keeper3
.byte >keeper4,>keeper5,>keeper6,>keeper7
sprites_mask_l:
.byte <ron0_mask,<ron1_mask,<ron2_mask,<ron3_mask,<ron4_mask
.byte <keeper0_mask,<keeper1_mask,<keeper2_mask,<keeper3_mask
.byte <keeper4_mask,<keeper5_mask,<keeper6_mask,<keeper7_mask
sprites_mask_h:
.byte >ron0_mask,>ron1_mask,>ron2_mask,>ron3_mask,>ron4_mask
.byte >keeper0_mask,>keeper1_mask,>keeper2_mask,>keeper3_mask
.byte >keeper4_mask,>keeper5_mask,>keeper6_mask,>keeper7_mask
.include "../hgr_sprite_save.s"

View File

@ -9,17 +9,15 @@ all: cliff_heights_graphics.inc \
###
cliff_heights_graphics.inc: \
cliff_heights.zx02 outer.zx02
cliff_heights.zx02
echo "cliff_heights_zx02: .incbin \"cliff_heights.zx02\"" >> cliff_heights_graphics.inc
echo "outer_zx02: .incbin \"outer.zx02\"" >> cliff_heights_graphics.inc
###
priority_cliff_heights.inc: \
cliff_heights_priority.zx02 \
outer_priority.zx02
cliff_heights_priority.zx02
echo "cliff_heights_priority_zx02: .incbin \"cliff_heights_priority.zx02\"" >> priority_cliff_heights.inc
echo "outer_priority_zx02: .incbin \"outer_priority.zx02\"" >> priority_cliff_heights.inc
###
@ -29,13 +27,6 @@ cliff_heights.zx02: cliff_heights.hgr
cliff_heights.hgr: cliff_heights.png
$(PNG2HGR) cliff_heights.png > cliff_heights.hgr
###
outer.zx02: outer.hgr
$(ZX02) -f outer.hgr outer.zx02
outer.hgr: outer.png
$(PNG2HGR) outer.png > outer.hgr
####
@ -54,22 +45,8 @@ cliff_heights_collision.bin: cliff_heights_collision.png
####
outer_priority.zx02: outer_priority.combined
$(ZX02) -f outer_priority.combined outer_priority.zx02
outer_priority.combined: outer_priority.gr outer_collision.bin
cat outer_priority.gr > outer_priority.combined
cat outer_collision.bin >> outer_priority.combined
outer_priority.gr: outer_priority.png
$(PNG2GR) outer_priority.png outer_priority.gr
outer_collision.bin: outer_collision.png
$(PNG2COLLISION) outer_collision.png outer_collision.bin
####
clean:
rm -f *~ cliff_heights_graphics.inc priority_cliff_heights.inc *.zx02 *.gr *.hgr
rm -f *~ cliff_heights_graphics.inc priority_cliff_heights.inc \
*.zx02 *.gr *.hgr *.bin *.combined

View File

@ -109,234 +109,4 @@ cliff_heights_look_at_lightning:
jmp finish_parse_message
;=======================
;=======================
;=======================
; Trogdor Cave Outer
;=======================
;=======================
;=======================
cave_outer_verb_table:
.byte VERB_CLIMB
.word cave_outer_climb-1
.byte VERB_LOOK
.word cave_outer_look-1
.byte 0
;=================
; look
;=================
cave_outer_look:
lda CURRENT_NOUN
cmp #NOUN_BEADS
beq cave_outer_look_at_curtain
cmp #NOUN_CURTAIN
beq cave_outer_look_at_curtain
cmp #NOUN_DOOR
beq cave_outer_look_at_door
cmp #NOUN_SKELETON
beq cave_outer_look_at_skeleton
cmp #NOUN_OPENINGS
beq cave_outer_look_at_openings
cmp #NOUN_NONE
beq cave_outer_look_at
jmp parse_common_look
cave_outer_look_at:
ldx #<cave_outer_look_message
ldy #>cave_outer_look_message
jmp finish_parse_message
cave_outer_look_at_curtain:
ldx #<cave_outer_look_curtain_message
ldy #>cave_outer_look_curtain_message
jmp finish_parse_message
cave_outer_look_at_door:
ldx #<cave_outer_look_door_message
ldy #>cave_outer_look_door_message
jmp finish_parse_message
cave_outer_look_at_openings:
ldx #<cave_outer_look_openings_message
ldy #>cave_outer_look_openings_message
jmp finish_parse_message
cave_outer_look_at_skeleton:
ldx #<cave_outer_look_skeleton_message
ldy #>cave_outer_look_skeleton_message
jmp finish_parse_message
;================
; climb
;================
cave_outer_climb:
lda CURRENT_NOUN
cmp #NOUN_CLIFF
beq cave_outer_do_climb
cmp #NOUN_NONE
beq cave_outer_do_climb
jmp parse_common_unknown
cave_outer_do_climb:
ldx #<cave_outer_climb_message
ldy #>cave_outer_climb_message
jmp finish_parse_message
;=======================
;=======================
;=======================
; Trogdor Cave Outer -- Keeper 1
;=======================
;=======================
;=======================
keeper1_verb_table:
.byte VERB_TAKE
.word keeper1_take-1
.byte VERB_GIVE
.word keeper1_give-1
.byte 0
;=============================
; take
;=============================
; can only take quiz
;
keeper1_take:
; lda IN_QUIZ
; bne actual_quiz
; ; it not being quizzed, can't try to take it??
; jmp parse_common_get ; is this the right path
actual_quiz:
lda CURRENT_NOUN
cmp #NOUN_QUIZ
beq cave_outer_take_quiz
; if not say quiz, give hint
cave_outer_hint:
ldx #<cave_outer_keeper_wants_message
ldy #>cave_outer_keeper_wants_message
jmp finish_parse_message
cave_outer_take_quiz:
inc IN_QUIZ ; make it 2 which means wait for answer
jsr random8
cmp #85
bcc keeper1_quiz3
cmp #170
bcc keeper1_quiz2
keeper1_quiz1:
lda #0
ldx #<cave_outer_quiz1_1
ldy #>cave_outer_quiz1_1
jmp keeper1_quiz_common
keeper1_quiz2:
lda #1
ldx #<cave_outer_quiz1_2
ldy #>cave_outer_quiz1_2
jmp keeper1_quiz_common
keeper1_quiz3:
lda #2
ldx #<cave_outer_quiz1_3
ldy #>cave_outer_quiz1_3
keeper1_quiz_common:
sta WHICH_QUIZ
jmp finish_parse_message_nowait
;=============================
; give
;=============================
; can only give sub/sandwich
keeper1_give:
lda CURRENT_NOUN
cmp #NOUN_SUB
beq cave_outer_give_sub
cmp #NOUN_SANDWICH
beq cave_outer_give_sandwich
cave_outer_give_sub:
cave_outer_give_sandwich:
ldx #<cave_outer_give_sub_message
ldy #>cave_outer_give_sub_message
jsr finish_parse_message
jsr cave_outer_get_shield
; FIXME: back out the keeper
rts
parse_quiz_unknown:
ldx #<cave_outer_keeper_wants_message
ldy #>cave_outer_keeper_wants_message
jmp finish_parse_message
verb_table = $BF00
setup_quiz_verb_table:
ldx #0
unknown_loop:
lda #<(parse_quiz_unknown-1)
sta verb_table,X
lda #>(parse_quiz_unknown-1)
sta verb_table+1,X
inx
inx
cpx #(VERB_ALL_DONE*2)
bne unknown_loop
rts
;=============================
; you got the shield somehow
;=============================
cave_outer_get_shield:
lda #0
sta IN_QUIZ
; re-set up the verb table
jsr setup_heights_verb_table
; actually get the shield
lda INVENTORY_2
ora #INV2_TROGSHIELD ; get the shield
sta INVENTORY_2
; score points
lda #5
jsr score_points
; FIXME: load new peasant sprite with shield
rts
.include "../text/dialog_cliff_heights.inc"

View File

@ -1,6 +1,7 @@
HGR_SPRITE = ../../../../utils/hgr-utils/hgr_make_sprite
all: lightning_sprites.inc ron_sprites.inc
all: lightning_sprites.inc
lightning_sprites.inc: lightning.png
$(HGR_SPRITE) -s -l small_lightning1 lightning.png 14 3 27 14 > lightning_sprites.inc
@ -12,34 +13,7 @@ lightning_sprites.inc: lightning.png
$(HGR_SPRITE) -s -l big_lightning3 lightning.png 112 51 167 118 >> lightning_sprites.inc
$(HGR_SPRITE) -s -l big_lightning0 lightning.png 182 51 237 118 >> lightning_sprites.inc
ron_sprites.inc: keeper1_sprites.png
$(HGR_SPRITE) -l ron0 keeper1_sprites.png 14 32 27 61 > ron_sprites.inc
$(HGR_SPRITE) -l ron1 keeper1_sprites.png 42 32 55 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron2 keeper1_sprites.png 70 32 83 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron3 keeper1_sprites.png 98 32 111 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron4 keeper1_sprites.png 126 32 139 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron0_mask keeper1_sprites.png 14 63 27 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron1_mask keeper1_sprites.png 42 63 55 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron2_mask keeper1_sprites.png 70 63 83 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron3_mask keeper1_sprites.png 98 63 111 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron4_mask keeper1_sprites.png 126 63 139 93 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper0 keeper1_sprites.png 14 128 27 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper1 keeper1_sprites.png 42 128 55 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper2 keeper1_sprites.png 70 128 90 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper3 keeper1_sprites.png 98 128 118 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper4 keeper1_sprites.png 126 128 146 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper5 keeper1_sprites.png 154 128 174 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper6 keeper1_sprites.png 182 128 202 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper7 keeper1_sprites.png 210 128 230 156 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper0_mask keeper1_sprites.png 14 159 27 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper1_mask keeper1_sprites.png 42 159 55 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper2_mask keeper1_sprites.png 70 159 90 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper3_mask keeper1_sprites.png 98 159 118 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper4_mask keeper1_sprites.png 126 159 146 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper5_mask keeper1_sprites.png 154 159 174 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper6_mask keeper1_sprites.png 182 159 202 187 >> ron_sprites.inc
$(HGR_SPRITE) -l keeper7_mask keeper1_sprites.png 210 159 230 187 >> ron_sprites.inc
clean:
rm -f *~ lightning_sprites.inc ron_sprites.inc
rm -f *~ lightning_sprites.inc \
keeper1_sprites.inc ron_sprites.inc \
keeper2_sprites.inc

View File

@ -0,0 +1,2 @@
collision_location = $bc00 ; FIXME: how big? somewhere else?

View File

@ -29,11 +29,20 @@ T 1 = MAP 2556 bytes 2T (8192) 6k free
T 3 = ARCHERY 2016 bytes 4T (16384) 14k free
T 7 = INSIDE 13457 bytes 4T (16384) 3k free
T 11 = INN 8935 bytes 4T (16384) 7k free
Disk4 Map (disk has 35 tracks, each 4k in size)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
T 0 = WBOOT4
T 1 = CLIFF_BASE 6071 bytes 2T (8192) 2k free
T 3 = CLIMB 12448 bytes 4T (16384) 4k free
T 7 = HEIGHTS 14948 bytes 4T (16384) 1k free
T 11 = OUTER 14948 bytes 4T (16384) 1k free
T 15 = TROGDOR 14771 bytes 4T (16384) 3k free
T 19 = ENDING 17037 bytes 5T (20480) 3k free
T 24 = CLIFF_BASE 6071 bytes 2T (8192) 2k free
T 26 = CLIMB 12448 bytes 4T (16384) 4k free
T 30 = HEIGHTS 14948 bytes 4T (16384) 1k free
SECOND COPY OF MUSIC TO AVOID DISK SWAP? PEASANT SPRITES?
S.A.M. CODE?

View File

@ -0,0 +1,51 @@
include ../../../Makefile.inc
LINKER_SCRIPTS = ../../../linker_scripts
all: OUTER
####
OUTER: outer.o
ld65 -o OUTER outer.o -C $(LINKER_SCRIPTS)/apple2_6000.inc
outer.o: outer.s \
../zp.inc ../hardware.inc ../qload.inc ../version.inc \
../inventory/inventory.inc \
../parse_input.inc ../common_defines.inc \
outer_actions.s \
../text/DIALOG_OUTER.ZX02 ../text/dialog_outer.inc \
graphics_outer/outer_graphics.inc \
graphics_outer/outer_priority.inc \
sprites_outer/ron_sprites.inc \
sprites_outer/keeper1_sprites.inc \
sprites_outer/keeper2_sprites.inc \
../sprites_peasant/robe_sprites.zx02 \
../draw_peasant.s ../move_peasant.s \
../gr_copy.s ../hgr_copy.s \
../new_map_location.s \
../keyboard.s \
../wait.s ../wait_a_bit.s
ca65 -o outer.o outer.s -l outer.lst
###
graphics_outer/outer_graphics.inc:
cd graphics_outer && make
###
sprites_outer/ron_sprites.inc:
cd sprites_outer && make
###
distclean:
make clean
cd graphics_outer && make clean
cd sprites_outer && make clean
###
clean:
rm -f *~ *.o *.lst OUTER

View File

@ -0,0 +1,50 @@
PNG2GR = ../../../../utils/gr-utils/png2gr
PNG2HGR = ../../../../utils/hgr-utils/png2hgr
ZX02 = ~/research/6502_compression/zx02.git/build/zx02
PNG2COLLISION = ../../../../utils/gr-utils/png2collision
all: outer_graphics.inc \
outer_priority.inc
###
outer_graphics.inc: \
outer.zx02
echo "outer_zx02: .incbin \"outer.zx02\"" > outer_graphics.inc
###
outer_priority.inc: \
outer_priority.zx02
echo "outer_priority_zx02: .incbin \"outer_priority.zx02\"" > outer_priority.inc
###
outer.zx02: outer.hgr
$(ZX02) -f outer.hgr outer.zx02
outer.hgr: outer.png
$(PNG2HGR) outer.png > outer.hgr
####
outer_priority.zx02: outer_priority.combined
$(ZX02) -f outer_priority.combined outer_priority.zx02
outer_priority.combined: outer_priority.gr outer_collision.bin
cat outer_priority.gr > outer_priority.combined
cat outer_collision.bin >> outer_priority.combined
outer_priority.gr: outer_priority.png
$(PNG2GR) outer_priority.png outer_priority.gr
outer_collision.bin: outer_collision.png
$(PNG2COLLISION) outer_collision.png outer_collision.bin
####
clean:
rm -f *~ outer_graphics.inc outer_priority.inc \
*.bin *.combined *.zx02 *.gr *.hgr

View File

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

1024
games/peasant/outer/outer.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,233 @@
.include "../tokens.inc"
;=======================
;=======================
;=======================
; Trogdor Cave Outer
;=======================
;=======================
;=======================
cave_outer_verb_table:
.byte VERB_CLIMB
.word cave_outer_climb-1
.byte VERB_LOOK
.word cave_outer_look-1
.byte 0
;=================
; look
;=================
cave_outer_look:
lda CURRENT_NOUN
cmp #NOUN_BEADS
beq cave_outer_look_at_curtain
cmp #NOUN_CURTAIN
beq cave_outer_look_at_curtain
cmp #NOUN_DOOR
beq cave_outer_look_at_door
cmp #NOUN_SKELETON
beq cave_outer_look_at_skeleton
cmp #NOUN_OPENINGS
beq cave_outer_look_at_openings
cmp #NOUN_NONE
beq cave_outer_look_at
jmp parse_common_look
cave_outer_look_at:
ldx #<cave_outer_look_message
ldy #>cave_outer_look_message
jmp finish_parse_message
cave_outer_look_at_curtain:
ldx #<cave_outer_look_curtain_message
ldy #>cave_outer_look_curtain_message
jmp finish_parse_message
cave_outer_look_at_door:
ldx #<cave_outer_look_door_message
ldy #>cave_outer_look_door_message
jmp finish_parse_message
cave_outer_look_at_openings:
ldx #<cave_outer_look_openings_message
ldy #>cave_outer_look_openings_message
jmp finish_parse_message
cave_outer_look_at_skeleton:
ldx #<cave_outer_look_skeleton_message
ldy #>cave_outer_look_skeleton_message
jmp finish_parse_message
;================
; climb
;================
cave_outer_climb:
lda CURRENT_NOUN
cmp #NOUN_CLIFF
beq cave_outer_do_climb
cmp #NOUN_NONE
beq cave_outer_do_climb
jmp parse_common_unknown
cave_outer_do_climb:
ldx #<cave_outer_climb_message
ldy #>cave_outer_climb_message
jmp finish_parse_message
;=======================
;=======================
;=======================
; Trogdor Cave Outer -- Keeper 1
;=======================
;=======================
;=======================
keeper1_verb_table:
.byte VERB_TAKE
.word keeper1_take-1
.byte VERB_GIVE
.word keeper1_give-1
.byte 0
;=============================
; take
;=============================
; can only take quiz
;
keeper1_take:
; lda IN_QUIZ
; bne actual_quiz
; ; it not being quizzed, can't try to take it??
; jmp parse_common_get ; is this the right path
actual_quiz:
lda CURRENT_NOUN
cmp #NOUN_QUIZ
beq cave_outer_take_quiz
; if not say quiz, give hint
cave_outer_hint:
ldx #<cave_outer_keeper_wants_message
ldy #>cave_outer_keeper_wants_message
jmp finish_parse_message
cave_outer_take_quiz:
inc IN_QUIZ ; make it 2 which means wait for answer
jsr random8
cmp #85
bcc keeper1_quiz3
cmp #170
bcc keeper1_quiz2
keeper1_quiz1:
lda #0
ldx #<cave_outer_quiz1_1
ldy #>cave_outer_quiz1_1
jmp keeper1_quiz_common
keeper1_quiz2:
lda #1
ldx #<cave_outer_quiz1_2
ldy #>cave_outer_quiz1_2
jmp keeper1_quiz_common
keeper1_quiz3:
lda #2
ldx #<cave_outer_quiz1_3
ldy #>cave_outer_quiz1_3
keeper1_quiz_common:
sta WHICH_QUIZ
jmp finish_parse_message_nowait
;=============================
; give
;=============================
; can only give sub/sandwich
keeper1_give:
lda CURRENT_NOUN
cmp #NOUN_SUB
beq cave_outer_give_sub
cmp #NOUN_SANDWICH
beq cave_outer_give_sandwich
cave_outer_give_sub:
cave_outer_give_sandwich:
ldx #<cave_outer_give_sub_message
ldy #>cave_outer_give_sub_message
jsr finish_parse_message
jsr cave_outer_get_shield
; FIXME: back out the keeper
rts
parse_quiz_unknown:
ldx #<cave_outer_keeper_wants_message
ldy #>cave_outer_keeper_wants_message
jmp finish_parse_message
verb_table = $BF00
setup_quiz_verb_table:
ldx #0
unknown_loop:
lda #<(parse_quiz_unknown-1)
sta verb_table,X
lda #>(parse_quiz_unknown-1)
sta verb_table+1,X
inx
inx
cpx #(VERB_ALL_DONE*2)
bne unknown_loop
rts
;=============================
; you got the shield somehow
;=============================
cave_outer_get_shield:
lda #0
sta IN_QUIZ
; re-set up the verb table
jsr setup_outer_verb_table
; actually get the shield
lda INVENTORY_2
ora #INV2_TROGSHIELD ; get the shield
sta INVENTORY_2
; score points
lda #5
jsr score_points
; FIXME: load new peasant sprite with shield
rts
.include "../text/dialog_outer.inc"

View File

@ -0,0 +1,59 @@
HGR_SPRITE = ../../../../utils/hgr-utils/hgr_make_sprite
all: keeper1_sprites.inc ron_sprites.inc \
keeper2_sprites.inc
keeper1_sprites.inc: keeper1_sprites.png
$(HGR_SPRITE) -l keeper_r0 keeper1_sprites.png 14 128 27 156 > keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r1 keeper1_sprites.png 42 128 55 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r2 keeper1_sprites.png 70 128 90 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r3 keeper1_sprites.png 98 128 118 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r4 keeper1_sprites.png 126 128 146 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r5 keeper1_sprites.png 154 128 174 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r6 keeper1_sprites.png 182 128 202 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r7 keeper1_sprites.png 210 128 230 156 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r0_mask keeper1_sprites.png 14 159 27 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r1_mask keeper1_sprites.png 42 159 55 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r2_mask keeper1_sprites.png 70 159 90 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r3_mask keeper1_sprites.png 98 159 118 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r4_mask keeper1_sprites.png 126 159 146 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r5_mask keeper1_sprites.png 154 159 174 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r6_mask keeper1_sprites.png 182 159 202 187 >> keeper1_sprites.inc
$(HGR_SPRITE) -l keeper_r7_mask keeper1_sprites.png 210 159 230 187 >> keeper1_sprites.inc
ron_sprites.inc: keeper1_sprites.png
$(HGR_SPRITE) -l ron0 keeper1_sprites.png 14 32 27 61 > ron_sprites.inc
$(HGR_SPRITE) -l ron1 keeper1_sprites.png 42 32 55 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron2 keeper1_sprites.png 70 32 83 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron3 keeper1_sprites.png 98 32 111 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron4 keeper1_sprites.png 126 32 139 62 >> ron_sprites.inc
$(HGR_SPRITE) -l ron0_mask keeper1_sprites.png 14 63 27 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron1_mask keeper1_sprites.png 42 63 55 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron2_mask keeper1_sprites.png 70 63 83 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron3_mask keeper1_sprites.png 98 63 111 93 >> ron_sprites.inc
$(HGR_SPRITE) -l ron4_mask keeper1_sprites.png 126 63 139 93 >> ron_sprites.inc
keeper2_sprites.inc: keeper2_sprites.png
$(HGR_SPRITE) -l keeper_l0 keeper2_sprites.png 14 128 27 156 > keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l1 keeper2_sprites.png 42 128 55 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l2 keeper2_sprites.png 70 128 90 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l3 keeper2_sprites.png 98 128 118 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l4 keeper2_sprites.png 126 128 146 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l5 keeper2_sprites.png 154 128 174 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l6 keeper2_sprites.png 182 128 202 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l7 keeper2_sprites.png 210 128 230 156 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l0_mask keeper2_sprites.png 14 159 27 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l1_mask keeper2_sprites.png 42 159 55 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l2_mask keeper2_sprites.png 70 159 90 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l3_mask keeper2_sprites.png 98 159 118 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l4_mask keeper2_sprites.png 126 159 146 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l5_mask keeper2_sprites.png 154 159 174 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l6_mask keeper2_sprites.png 182 159 202 187 >> keeper2_sprites.inc
$(HGR_SPRITE) -l keeper_l7_mask keeper2_sprites.png 210 159 230 187 >> keeper2_sprites.inc
clean:
rm -f *~ \
keeper1_sprites.inc ron_sprites.inc \
keeper2_sprites.inc

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -15,6 +15,7 @@ all: dump_text shrink_text \
DIALOG_INN.ZX02 dialog_inn.inc \
DIALOG_CLIFF_BASE.ZX02 dialog_cliff_base.inc \
DIALOG_CLIFF_HEIGHTS.ZX02 dialog_cliff_heights.inc \
DIALOG_OUTER.ZX02 dialog_outer.inc \
DIALOG_TROGDOR.ZX02 dialog_trogdor.inc \
DIALOG_CLIMB.ZX02 dialog_climb.inc \
common.inc.lookup \
@ -70,6 +71,23 @@ dialog_cliff_heights.o: dialog_cliff_heights.s \
dialog_cliff_heights.inc: ../generate_all_symbols dialog_cliff_heights
../generate_all_symbols -a 0xd000 dialog_cliff_heights.lst > dialog_cliff_heights.inc
###
DIALOG_OUTER.ZX02: dialog_outer
$(ZX02) -f dialog_outer DIALOG_OUTER.ZX02
dialog_outer: dialog_outer.o
ld65 -o dialog_outer dialog_outer.o -C $(LINKER_SCRIPTS)/apple2_d000.inc
dialog_outer.o: dialog_outer.s \
outer.inc.lookup
ca65 -o dialog_outer.o dialog_outer.s -l dialog_outer.lst
dialog_outer.inc: ../generate_all_symbols dialog_outer
../generate_all_symbols -a 0xd000 dialog_outer.lst > dialog_outer.inc
###
@ -258,6 +276,9 @@ mud.inc.lookup: mud.inc shrink_text
ned_cottage.inc.lookup: ned_cottage.inc shrink_text
./shrink_text < ned_cottage.inc > ned_cottage.inc.lookup
outer.inc.lookup: outer.inc shrink_text
./shrink_text < outer.inc > outer.inc.lookup
outside_inn.inc.lookup: outside_inn.inc shrink_text
./shrink_text < outside_inn.inc > outside_inn.inc.lookup

View File

@ -48,399 +48,3 @@ cliff_heights_get_bone_message:
.byte "Eww. No. Grody. You're",13
.byte "grody. No. Eww.",0
;======================================
; Trogdor's Outer Sanctum / Outer Cave
;======================================
; note: if you don't have the item, it doesn't give
; you an option and launches directly into the quiz
; +5 POINTS (give sub or answer question)
; +5 POINTS (give soda or answer question)
; +5 POINTS (give pills or answer question)
; walk in, you can walk out again. once the keeper appears
; you are stuck and have to talk
; will only say the "I think he wants... text
; + look
cave_outer_look_message:
.byte "There are 3 openings with a",13
.byte "little cliff in front of",13
.byte "each. A beaded curtain",13
.byte "hangs in a doorway on the",13
.byte "far wall.",0
; + look curtain/beads
cave_outer_look_curtain_message:
.byte "That thing's awesome. You",13
.byte "always wanted one for your",13
.byte "dorm room but your roommate",13
.byte "was a total drag and said",13
.byte "no.",0
; + look door
cave_outer_look_door_message:
.byte "A wicked beaded curtain",13
.byte "hangs in the doorway.",0
; + look openings
cave_outer_look_openings_message:
.byte "They're mysterious and out",13
.byte "of reach. Like girls were",13
.byte "to you in high school.",0
; + look skeleton
cave_outer_look_skeleton_message:
.byte "You can't be sure but you",13
.byte "think those are dead person",13
.byte "bones.",0
; + get bones
cave_outer_get_bones_message:
.byte "Eww. No. Grody. You're",13
.byte "grody. No. Eww.",0
;=========================
; First Keeper
;=========================
; + (approached by first keeper)
cave_outer_keeper1_message1:
.byte "Foolish peasant! How dare",13
.byte "you enter this fairly",13
.byte "sacred chamber!",0
cave_outer_keeper1_message2:
.byte "You explain that you're",13
.byte "here to smote Trogdor and",13
.byte "if he doesn't get outta",13
.byte "your way, him too!",0
cave_outer_keeper1_message3:
.byte "You cannot vanquish",13
.byte "Trogdor! Only the Three",13
.byte "Keepers of Trogdor hold the",13
.byte "tools with which to destroy",13
.byte "the Burninator. The",13
.byte "Trog-Shield, the",13
.byte "Trog-Helmet, and the",13
.byte "Trog-Sword.",0
cave_outer_keeper1_message4:
.byte "And the only way we'll give",13
.byte "them up is if you answer",13
.byte "the three Trog-Trivia",13
.byte "questions correctly.",0
; only say this if have sub
cave_outer_keeper1_message5:
.byte "Unless you happen to have",13
.byte "something to eat on ya.",13
.byte "Then we could forego my",13
.byte "question.",0
; can't leave or do anything except take quiz or give sub
; prints a message saying so
; Type any command other than "take the quiz" or "give (requested item)"
; after being apporached by a Keeper
cave_outer_keeper_wants_message:
.byte "I think he wants something",13
.byte "from your inventory. Or you",13
.byte "could just tell him ",34,"take",13
.byte "the quiz",34,0
; take quiz
cave_outer_keeper_take_quiz:
.byte "Your shake off the Keeper of",13
.byte "Trogdor's request.",13
.byte "Seriously - this guy should",13
.byte "get a job.",0
; if you say other than A/B/C then...
; Peasant fool! Choose A, B,
; or C!
; followed by repeat of the question
cave_outer_quiz1_1:
.byte "Okay here goes. What did",13
.byte "you win from the Archery",13
.byte "game?",13
.byte "A. SuperBow FunTime TM",13
.byte "B. SuperTime FunBow TM",13 ; correct
.byte "C. SuperFun BowTime TM",0
cave_outer_quiz1_1again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What did you win from the",13
.byte "Archery game?",13
.byte "A. SuperBow FunTime TM",13
.byte "B. SuperTime FunBow TM",13 ; correct
.byte "C. SuperFun BowTime TM",0
cave_outer_quiz1_2:
.byte "Okay here goes. What does",13
.byte "Mendelev have you tell",13
.byte "Dongolev?",13
.byte "A. Haldo",13 ; correct
.byte "B. Hallo",13
.byte "C. Allo",0
cave_outer_quiz1_2again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What does Mendelev have you",13
.byte "tell Dongolev?",13
.byte "A. Haldo",13 ; correct
.byte "B. Hallo",13
.byte "C. Allo",0
cave_outer_quiz1_3:
.byte "Okay here goes. What is the",13
.byte "only creature the Jhonka",13
.byte "fears?",13
.byte "A. Poor Gary",13
.byte "B. The Baby",13
.byte "C. The Kerrek",0 ; correct
cave_outer_quiz1_3again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What is the only creature",13
.byte "the Jhonka fears?",13
.byte "A. Poor Gary",13
.byte "B. The Baby",13
.byte "C. The Kerrek",0 ; correct
; Response to Correct Answer
; makes happy noise, then gives you +5 POINTS
cave_outer_quiz1_correct:
.byte 34,"Ah crap! You're right.",13
.byte "Here, take this stupid",13
.byte "Trog-Shield!",34,0
; Response to Incorrect Answer
;
cave_outer_quiz1_wrong:
.byte "Sorry peasant! You fail!",13
.byte "And as punishment, you will",13
.byte "be turned into... RON ",13
.byte "CUMBERDALE!!",0
cave_outer_quiz1_wrong_part2:
.byte "You ask who the crap Ron",13
.byte "Cumberdale is.",0
cave_outer_quiz1_wrong_part3:
.byte 34,"Just this kid from 4th",13
.byte "grade that I really hated.",13
.byte "But he was a BIG LOSER and",13
.byte "HE SMELLED!",34,0
; wiggles hands, poof of smoke, turn into Ron
; makes twinkly noise as wiggles hand, another noise (blrrp?) as poof of smoke
cave_outer_quiz1_wrong_part4:
.byte "Well, you not exactly dead.",13
.byte "But there's no way you",13
.byte "could defeat Trogdor as Ron",13
.byte "Cumberdale. Your quest",13
.byte "ends here. Thanks for",13
.byte "playing.",0
; + give sub, sandwich
; slowly backs away, you suddenly have shield
; +5 POINTS
cave_outer_give_sub_message:
cave_outer_give_sandwich_message:
.byte "No way! I was just kidding",13
.byte "but you've really got a",13
.byte "meatball sub. This rules!",13
.byte "Here, you can have the",13
.byte "Trog-Shield.",0
; you now have the shield and can leave if you want
; whole new walking animation
;=========================
; Second Keeper
;=========================
; + (approached by second keeper)
; comes out and waggles his hands
.byte "Hold, peasant! You must",13
.byte "answer the second dreaded",13
.byte "Trog-Trivia question!",0
.byte "Or we could call it even if",13
.byte "I had an ice cold drink",13
.byte "right now.",0
; take quiz
; + get a job again
.byte "Listen careful now. Which",13
.byte "one of these letters is the",13
.byte "letter C?",13
.byte "A. B",13
.byte "B. C",13 ; correct
.byte "C. A",0
.byte "Listen careful now. How",13
.byte "many berry bushes are there",13
.byte "in the whole kingdom of",13
.byte "Peasantry?",13
.byte "A. 4",13
.byte "B. 5",13 ; [sic] correct?
.byte "C. 6 ",0
.byte "Listen careful now. What",13
.byte "was the Innkeeper's pantry",13
.byte "full of?",13
.byte "A. Epsom Salts",13
.byte "B. Epson Printers",13
.byte "C. Old Man Rub",0 ; correct
; Response to Correct Answer
.byte 34,"That's right. Oh. This",13
.byte "sucks. Guess I have to give",13
.byte "you this Trog-Helmet.",13
.byte "Dang.",0
; backs out, you now have helm on, can leave
; Response to Incorrect Answer
.byte 34,"WRONG! You are hereby",13
.byte "cursed to write corny folk",13
.byte "songs for the rest of",13
.byte "eternity! The kind that",13
.byte "only OLD PEOPLE LIKE!!",34,0
; waggles arms
; you face forward, then play the guitar for like 5 seconds
.byte "Well, you not exactly dead.",13
.byte "But you certainly can't",13
.byte "face Trogdor after writing",13
.byte "'Wheat Grows Sweet, But My",13
.byte "Gal's Sweeter'. Your quest",13
.byte "ends here. Thanks for",13
.byte "playing.",0
; + give soda
.byte "Sweet deal, peasant. I",13
.byte "underestimated you. Wear",13
.byte "this Trog-Helmet with",13
.byte "style.",0
;=========================
; Third Keeper
;=========================
; + (approached by third keeper)
.byte "Think you're pretty hot",13
.byte "stuff, eh? Let's see you",13
.byte "answer the deadly and",13
.byte "pretty impossible THIRD",13
.byte "TROG-TRIVIA QUESTION!",0
.byte "That is, unless you've got",13
.byte "something for my lower",13
.byte "back. Man, it's killin me!",0
; .take quiz
; + get a job again
.byte "Riddle me this. To whom",13
.byte "did the robe you're wearing",13
.byte "originally belong?",13
.byte "A. Nobleman Nicholas",13
.byte "B. Nina Neverawesome",13
.byte "C. Naked Ned",0 ; correct
.byte "Riddle me this. What color",13
.byte "are the leaves on the tree",13
.byte "that grows by the well?",13
.byte "A. Orange",13 ; correct
.byte "B. Green",13
.byte "C. Yellow",0
.byte "Riddle me this. Which way",13
.byte "does the river that runs",13
.byte "through Peasantry flow?",13
.byte "A. West to East",13
.byte "B. Northwest to South",13
.byte "C. Northeast to Southwest",0 ; correct
; Response to Correct Answer
.byte "Uh oh. You got it right.",13
.byte "Trogdor's gonna kill me.",13
.byte "Okay, you can have the",13
.byte "Trog-Sword. Just promise",13
.byte "not to kill any Trogdor's",13 ; [sic]
.byte "with it, kay?",0
.byte "You just stare at the",13
.byte "Keeper blankly.",0
.byte 34,"Okay fine! You can have",13
.byte "the dumb thing anyways.",13
.byte "Trogdor's through the",13
.byte "beaded curtain over there.",34,0
; now print "fabled Trog-sword" below
; Response to Incorrect Answer
.byte "YES! I was hoping you'd get",13
.byte "mine wrong. No Trog-Sword",13
.byte "for you. In fact, no skin",13
.byte "for you either!",0
; turns you into a skeleton
.byte "Wow. You sure dead. You had",13
.byte "a good run, though. Thanks",13
.byte "for playin.",0
; Response if not A, B, or C
; then print following followed by repeat of question
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",0
; + give pills
.byte "Whoa! Where'd you find this",13
.byte "stuff? I don't think this",13
.byte "is even legal anymore.",13
.byte "These babies'll definitely",13
.byte "smote LUMBAGO the, um,",13
.byte "LOWER BACKINATOR!!",0
; lift sword and it gleams
; bead curtain parts
.byte "The fabled Trog-Sword is",13
.byte "yours. You now have the",13
.byte "means to strike down",13
.byte "Trogdor. Good luck,",13
.byte "peasant.",0
; backs out, you raise the sword in the air animation
; + climb cliff
cave_outer_climb_message:
.byte "Nope. It's too sheer.",0

View File

@ -0,0 +1,2 @@
.include "lookup.inc"
.include "outer.inc.lookup"

View File

@ -0,0 +1,395 @@
;======================================
; Trogdor's Outer Sanctum / Outer Cave
;======================================
; note: if you don't have the item, it doesn't give
; you an option and launches directly into the quiz
; +5 POINTS (give sub or answer question)
; +5 POINTS (give soda or answer question)
; +5 POINTS (give pills or answer question)
; walk in, you can walk out again. once the keeper appears
; you are stuck and have to talk
; will only say the "I think he wants... text
; + look
cave_outer_look_message:
.byte "There are 3 openings with a",13
.byte "little cliff in front of",13
.byte "each. A beaded curtain",13
.byte "hangs in a doorway on the",13
.byte "far wall.",0
; + look curtain/beads
cave_outer_look_curtain_message:
.byte "That thing's awesome. You",13
.byte "always wanted one for your",13
.byte "dorm room but your roommate",13
.byte "was a total drag and said",13
.byte "no.",0
; + look door
cave_outer_look_door_message:
.byte "A wicked beaded curtain",13
.byte "hangs in the doorway.",0
; + look openings
cave_outer_look_openings_message:
.byte "They're mysterious and out",13
.byte "of reach. Like girls were",13
.byte "to you in high school.",0
; + look skeleton
cave_outer_look_skeleton_message:
.byte "You can't be sure but you",13
.byte "think those are dead person",13
.byte "bones.",0
; + get bones
cave_outer_get_bones_message:
.byte "Eww. No. Grody. You're",13
.byte "grody. No. Eww.",0
;=========================
; First Keeper
;=========================
; + (approached by first keeper)
cave_outer_keeper1_message1:
.byte "Foolish peasant! How dare",13
.byte "you enter this fairly",13
.byte "sacred chamber!",0
cave_outer_keeper1_message2:
.byte "You explain that you're",13
.byte "here to smote Trogdor and",13
.byte "if he doesn't get outta",13
.byte "your way, him too!",0
cave_outer_keeper1_message3:
.byte "You cannot vanquish",13
.byte "Trogdor! Only the Three",13
.byte "Keepers of Trogdor hold the",13
.byte "tools with which to destroy",13
.byte "the Burninator. The",13
.byte "Trog-Shield, the",13
.byte "Trog-Helmet, and the",13
.byte "Trog-Sword.",0
cave_outer_keeper1_message4:
.byte "And the only way we'll give",13
.byte "them up is if you answer",13
.byte "the three Trog-Trivia",13
.byte "questions correctly.",0
; only say this if have sub
cave_outer_keeper1_message5:
.byte "Unless you happen to have",13
.byte "something to eat on ya.",13
.byte "Then we could forego my",13
.byte "question.",0
; can't leave or do anything except take quiz or give sub
; prints a message saying so
; Type any command other than "take the quiz" or "give (requested item)"
; after being apporached by a Keeper
cave_outer_keeper_wants_message:
.byte "I think he wants something",13
.byte "from your inventory. Or you",13
.byte "could just tell him ",34,"take",13
.byte "the quiz",34,0
; take quiz
cave_outer_keeper_take_quiz:
.byte "Your shake off the Keeper of",13
.byte "Trogdor's request.",13
.byte "Seriously - this guy should",13
.byte "get a job.",0
; if you say other than A/B/C then...
; Peasant fool! Choose A, B,
; or C!
; followed by repeat of the question
cave_outer_quiz1_1:
.byte "Okay here goes. What did",13
.byte "you win from the Archery",13
.byte "game?",13
.byte "A. SuperBow FunTime TM",13
.byte "B. SuperTime FunBow TM",13 ; correct
.byte "C. SuperFun BowTime TM",0
cave_outer_quiz1_1again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What did you win from the",13
.byte "Archery game?",13
.byte "A. SuperBow FunTime TM",13
.byte "B. SuperTime FunBow TM",13 ; correct
.byte "C. SuperFun BowTime TM",0
cave_outer_quiz1_2:
.byte "Okay here goes. What does",13
.byte "Mendelev have you tell",13
.byte "Dongolev?",13
.byte "A. Haldo",13 ; correct
.byte "B. Hallo",13
.byte "C. Allo",0
cave_outer_quiz1_2again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What does Mendelev have you",13
.byte "tell Dongolev?",13
.byte "A. Haldo",13 ; correct
.byte "B. Hallo",13
.byte "C. Allo",0
cave_outer_quiz1_3:
.byte "Okay here goes. What is the",13
.byte "only creature the Jhonka",13
.byte "fears?",13
.byte "A. Poor Gary",13
.byte "B. The Baby",13
.byte "C. The Kerrek",0 ; correct
cave_outer_quiz1_3again:
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",13
.byte "What is the only creature",13
.byte "the Jhonka fears?",13
.byte "A. Poor Gary",13
.byte "B. The Baby",13
.byte "C. The Kerrek",0 ; correct
; Response to Correct Answer
; makes happy noise, then gives you +5 POINTS
cave_outer_quiz1_correct:
.byte 34,"Ah crap! You're right.",13
.byte "Here, take this stupid",13
.byte "Trog-Shield!",34,0
; Response to Incorrect Answer
;
cave_outer_quiz1_wrong:
.byte "Sorry peasant! You fail!",13
.byte "And as punishment, you will",13
.byte "be turned into... RON ",13
.byte "CUMBERDALE!!",0
cave_outer_quiz1_wrong_part2:
.byte "You ask who the crap Ron",13
.byte "Cumberdale is.",0
cave_outer_quiz1_wrong_part3:
.byte 34,"Just this kid from 4th",13
.byte "grade that I really hated.",13
.byte "But he was a BIG LOSER and",13
.byte "HE SMELLED!",34,0
; wiggles hands, poof of smoke, turn into Ron
; makes twinkly noise as wiggles hand, another noise (blrrp?) as poof of smoke
cave_outer_quiz1_wrong_part4:
.byte "Well, you not exactly dead.",13
.byte "But there's no way you",13
.byte "could defeat Trogdor as Ron",13
.byte "Cumberdale. Your quest",13
.byte "ends here. Thanks for",13
.byte "playing.",0
; + give sub, sandwich
; slowly backs away, you suddenly have shield
; +5 POINTS
cave_outer_give_sub_message:
cave_outer_give_sandwich_message:
.byte "No way! I was just kidding",13
.byte "but you've really got a",13
.byte "meatball sub. This rules!",13
.byte "Here, you can have the",13
.byte "Trog-Shield.",0
; you now have the shield and can leave if you want
; whole new walking animation
;=========================
; Second Keeper
;=========================
; + (approached by second keeper)
; comes out and waggles his hands
.byte "Hold, peasant! You must",13
.byte "answer the second dreaded",13
.byte "Trog-Trivia question!",0
.byte "Or we could call it even if",13
.byte "I had an ice cold drink",13
.byte "right now.",0
; take quiz
; + get a job again
.byte "Listen careful now. Which",13
.byte "one of these letters is the",13
.byte "letter C?",13
.byte "A. B",13
.byte "B. C",13 ; correct
.byte "C. A",0
.byte "Listen careful now. How",13
.byte "many berry bushes are there",13
.byte "in the whole kingdom of",13
.byte "Peasantry?",13
.byte "A. 4",13
.byte "B. 5",13 ; [sic] correct?
.byte "C. 6 ",0
.byte "Listen careful now. What",13
.byte "was the Innkeeper's pantry",13
.byte "full of?",13
.byte "A. Epsom Salts",13
.byte "B. Epson Printers",13
.byte "C. Old Man Rub",0 ; correct
; Response to Correct Answer
.byte 34,"That's right. Oh. This",13
.byte "sucks. Guess I have to give",13
.byte "you this Trog-Helmet.",13
.byte "Dang.",0
; backs out, you now have helm on, can leave
; Response to Incorrect Answer
.byte 34,"WRONG! You are hereby",13
.byte "cursed to write corny folk",13
.byte "songs for the rest of",13
.byte "eternity! The kind that",13
.byte "only OLD PEOPLE LIKE!!",34,0
; waggles arms
; you face forward, then play the guitar for like 5 seconds
.byte "Well, you not exactly dead.",13
.byte "But you certainly can't",13
.byte "face Trogdor after writing",13
.byte "'Wheat Grows Sweet, But My",13
.byte "Gal's Sweeter'. Your quest",13
.byte "ends here. Thanks for",13
.byte "playing.",0
; + give soda
.byte "Sweet deal, peasant. I",13
.byte "underestimated you. Wear",13
.byte "this Trog-Helmet with",13
.byte "style.",0
;=========================
; Third Keeper
;=========================
; + (approached by third keeper)
.byte "Think you're pretty hot",13
.byte "stuff, eh? Let's see you",13
.byte "answer the deadly and",13
.byte "pretty impossible THIRD",13
.byte "TROG-TRIVIA QUESTION!",0
.byte "That is, unless you've got",13
.byte "something for my lower",13
.byte "back. Man, it's killin me!",0
; .take quiz
; + get a job again
.byte "Riddle me this. To whom",13
.byte "did the robe you're wearing",13
.byte "originally belong?",13
.byte "A. Nobleman Nicholas",13
.byte "B. Nina Neverawesome",13
.byte "C. Naked Ned",0 ; correct
.byte "Riddle me this. What color",13
.byte "are the leaves on the tree",13
.byte "that grows by the well?",13
.byte "A. Orange",13 ; correct
.byte "B. Green",13
.byte "C. Yellow",0
.byte "Riddle me this. Which way",13
.byte "does the river that runs",13
.byte "through Peasantry flow?",13
.byte "A. West to East",13
.byte "B. Northwest to South",13
.byte "C. Northeast to Southwest",0 ; correct
; Response to Correct Answer
.byte "Uh oh. You got it right.",13
.byte "Trogdor's gonna kill me.",13
.byte "Okay, you can have the",13
.byte "Trog-Sword. Just promise",13
.byte "not to kill any Trogdor's",13 ; [sic]
.byte "with it, kay?",0
.byte "You just stare at the",13
.byte "Keeper blankly.",0
.byte 34,"Okay fine! You can have",13
.byte "the dumb thing anyways.",13
.byte "Trogdor's through the",13
.byte "beaded curtain over there.",34,0
; now print "fabled Trog-sword" below
; Response to Incorrect Answer
.byte "YES! I was hoping you'd get",13
.byte "mine wrong. No Trog-Sword",13
.byte "for you. In fact, no skin",13
.byte "for you either!",0
; turns you into a skeleton
.byte "Wow. You sure dead. You had",13
.byte "a good run, though. Thanks",13
.byte "for playin.",0
; Response if not A, B, or C
; then print following followed by repeat of question
.byte "Peasant fool! Choose A, B,",13
.byte "or C!",0
; + give pills
.byte "Whoa! Where'd you find this",13
.byte "stuff? I don't think this",13
.byte "is even legal anymore.",13
.byte "These babies'll definitely",13
.byte "smote LUMBAGO the, um,",13
.byte "LOWER BACKINATOR!!",0
; lift sword and it gleams
; bead curtain parts
.byte "The fabled Trog-Sword is",13
.byte "yours. You now have the",13
.byte "means to strike down",13
.byte "Trogdor. Good luck,",13
.byte "peasant.",0
; backs out, you raise the sword in the air animation
; + climb cliff
cave_outer_climb_message:
.byte "Nope. It's too sheer.",0