peasant: make trogdor lair code closer to the other levels

This commit is contained in:
Vince Weaver 2021-12-13 01:07:16 -05:00
parent 86a88e0e12
commit 1ebfddbfbc
9 changed files with 458 additions and 269 deletions

View File

@ -393,12 +393,14 @@ TROGDOR: trogdor.o
trogdor.o: trogdor.s zp.inc \
graphics_trogdor/trogdor_graphics.inc sprites/trogdor_sprites.inc \
sprites/inventory_sprites.inc \
DIALOG_TROGDOR.LZSA dialog_trogdor.inc \
ssi263_simple_speech.s \
draw_box.s hgr_rectangle.s hgr_font.s hgr_input.s \
hgr_1x28_sprite_mask.s hgr_1x5_sprite.s hgr_save_restore.s \
wait_a_bit.s draw_peasant.s hgr_text_box.s \
keyboard.s new_map_location.s \
peasant_move.s score.s inventory.s
peasant_move.s score.s inventory.s \
trogdor_actions.s
ca65 -o trogdor.o trogdor.s -l trogdor.lst
@ -501,6 +503,7 @@ parse_input.inc: generate_common parse_input
./generate_common -a 0xee00 -s load_custom_verb_table parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s partial_message_step parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s finish_parse_message parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s finish_parse_message_nowait parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s parse_common_talk parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s parse_common_haldo parse_input.lst >> parse_input.inc
./generate_common -a 0xee00 -s parse_common_give parse_input.lst >> parse_input.inc
@ -641,6 +644,23 @@ dialog_cliff.inc: generate_all_symbols dialog_cliff
####
DIALOG_TROGDOR.LZSA: dialog_trogdor
$(LZSA) -r -f2 dialog_trogdor DIALOG_TROGDOR.LZSA
dialog_trogdor: dialog_trogdor.o
ld65 -o dialog_trogdor dialog_trogdor.o -C ../../linker_scripts/apple2_d000.inc
dialog_trogdor.o: dialog_trogdor.s text/cliff.inc
ca65 -o dialog_trogdor.o dialog_trogdor.s -l dialog_trogdor.lst
###
dialog_trogdor.inc: generate_all_symbols dialog_trogdor
./generate_all_symbols -a 0xd000 dialog_trogdor.lst > dialog_trogdor.inc
####
dialog_test: dialog_test.o
ld65 -o dialog_test dialog_test.o -C ../../linker_scripts/apple2_d000.inc

View File

@ -0,0 +1,2 @@
.include "text/lookup.inc"
.include "text/trogdor.inc.lookup"

View File

@ -5,18 +5,21 @@ PNG2HGR = ../../../utils/hgr-utils/png2hgr
LZSA = ~/research/lzsa/lzsa/lzsa
B2D = ../../../utils/bmp2dhr/b2d
all: trogdor_graphics.inc
all: trogdor_graphics.inc \
priority_trogdor.inc
trogdor_graphics.inc: \
trogdor_cave.lzsa \
trogdor_open.lzsa \
trogdor_flame1.lzsa \
trogdor_flame2.lzsa
trogdor_flame2.lzsa \
trogdor_sleep.lzsa
echo "trogdor_cave_lzsa: .incbin \"trogdor_cave.lzsa\"" > trogdor_graphics.inc
echo "trogdor_open_lzsa: .incbin \"trogdor_open.lzsa\"" >> trogdor_graphics.inc
echo "trogdor_flame1_lzsa: .incbin \"trogdor_flame1.lzsa\"" >> trogdor_graphics.inc
echo "trogdor_flame2_lzsa: .incbin \"trogdor_flame2.lzsa\"" >> trogdor_graphics.inc
echo "trogdor_sleep_lzsa: .incbin \"trogdor_sleep.lzsa\"" >> trogdor_graphics.inc
###
@ -50,10 +53,31 @@ trogdor_flame2.lzsa: trogdor_flame2.hgr
trogdor_flame2.hgr: trogdor_flame2.png
$(PNG2HGR) trogdor_flame2.png > trogdor_flame2.hgr
###
trogdor_sleep.lzsa: trogdor_sleep.hgr
$(LZSA) -r -f2 trogdor_sleep.hgr trogdor_sleep.lzsa
trogdor_sleep.hgr: trogdor_sleep.png
$(PNG2HGR) trogdor_sleep.png > trogdor_sleep.hgr
####
priority_trogdor.inc: \
trogdor_priority.lzsa
echo "trogdor_priority_lzsa: .incbin \"trogdor_priority.lzsa\"" > priority_trogdor.inc
####
trogdor_priority.lzsa: trogdor_priority.gr
$(LZSA) -r -f2 trogdor_priority.gr trogdor_priority.lzsa
trogdor_priority.gr: trogdor_priority.png
$(PNG2GR) trogdor_priority.png trogdor_priority.gr
####
clean:
rm -f *~ trogdor_graphics.inc *.lzsa *.gr *.hgr
rm -f *~ trogdor_graphics.inc priority_trogdor.inc *.lzsa *.gr *.hgr

Binary file not shown.

After

Width:  |  Height:  |  Size: 886 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -701,9 +701,11 @@ parse_common_why:
finish_parse_message_nowait:
stx OUTL
sty OUTH
jsr print_text_message
rts
finish_parse_message:
stx OUTL

View File

@ -117,14 +117,17 @@
.byte "or something in honor of",13
.byte "you somewheres.",0 ; [sic] no end quote
trogdor_honestly_message:
.byte 34,"I can honestly say it'll",13
.byte "be a pleasure and an honor",13
.byte "to burninate you, Rather",13
.byte "Dashing.",34,0
trogdor_honestly_message2:
.byte "Aw that sure was nice of",13
.byte "him!",0
trogdor_honestly_message3:
.byte "Congratulations! You've",13
.byte "won! No one can kill",13
.byte "Trogdor but you came closer",13

View File

@ -8,6 +8,10 @@
.include "zp.inc"
.include "qload.inc"
.include "inventory.inc"
.include "parse_input.inc"
LOCATION_BASE = LOCATION_TROGDOR_LAIR ; 23
trogdor:
lda #0
@ -15,270 +19,118 @@ trogdor:
sta FRAME
jsr hgr_make_tables ; needed?
jsr hgr2 ; needed?
; decompress dialog to $D000
lda #<trogdor_text_lzsa
sta getsrc_smc+1
lda #>trogdor_text_lzsa
sta getsrc_smc+2
lda #$d0
jsr decompress_lzsa2_fast
; update score
jsr update_score
trogdor_cave:
lda #<trogdor_cave_lzsa
sta getsrc_smc+1
lda #>trogdor_cave_lzsa
sta getsrc_smc+2
;=============================
;=============================
; new screen location
;=============================
;=============================
lda #$40
new_location:
lda #0
sta LEVEL_OVER
jsr decompress_lzsa2_fast
;==========================
; load updated verb table
;======================
; draw rather dashing
; setup default verb table
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
jsr setup_default_verb_table
lda #<dashing0_sprite
; local verb table
lda MAP_LOCATION
sec
sbc #LOCATION_BASE
tax
lda verb_tables_low,X
sta INL
lda #>dashing0_sprite
lda verb_tables_hi,X
sta INH
jsr hgr_draw_sprite
jsr update_top
jsr wait_until_keypress
;==============================
;==============================
; print honestly say message
;==============================
;==============================
lda #<trogdor_string
sta OUTL
lda #>trogdor_string
sta OUTH
jsr hgr_text_box
;==================================
; text to speech, where available!
lda SOUND_STATUS
and #SOUND_SSI263
beq skip_speech
speech_loop:
; trogdor
lda #4 ; assume slot #4 for now
jsr ssi263_speech_init
lda #<trogdor_honestly
sta SPEECH_PTRL
lda #>trogdor_honestly
sta SPEECH_PTRH
jsr ssi263_speak
wait_for_speech:
lda speech_busy
bmi wait_for_speech
bpl done_speech
skip_speech:
jsr wait_until_keypress
done_speech:
jsr hgr_partial_restore
;==============================
;==============================
; print nice of him message
;==============================
;==============================
lda #<trogdor_string2
sta OUTL
lda #>trogdor_string2
sta OUTH
jsr hgr_text_box
jsr wait_until_keypress
jsr hgr_partial_restore
; UPDATE SCORE
lda #$10 ; it's BCD
jsr score_points
trogdor_open:
lda #<trogdor_open_lzsa
sta getsrc_smc+1
lda #>trogdor_open_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
;======================
; draw rather dashing
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
lda #<dashing0_sprite
sta INL
lda #>dashing0_sprite
sta INH
jsr hgr_draw_sprite
jsr update_top
; jsr wait_until_keypress
trogdor_flame1:
lda #<trogdor_flame1_lzsa
sta getsrc_smc+1
lda #>trogdor_flame1_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
trogdor_flame2:
lda #<trogdor_flame2_lzsa
sta getsrc_smc+1
lda #>trogdor_flame2_lzsa
sta getsrc_smc+2
lda #$20
jsr decompress_lzsa2_fast
ldx #32
stx BABY_COUNT
burninate_loop:
bit PAGE1
lda #16
sta speaker_duration
lda #NOTE_C3
sta speaker_frequency
jsr speaker_beep
; jsr wait_until_keypress
bit PAGE2
lda #16
sta speaker_duration
lda #NOTE_D3
sta speaker_frequency
jsr speaker_beep
; jsr wait_until_keypress
dec BABY_COUNT
bne burninate_loop
jsr load_custom_verb_table
;=====================
;=====================
; stop fire
; open mount
; charred
; smoke
; load bg
lda #<trogdor_cave_lzsa
lda MAP_LOCATION
sec
sbc #LOCATION_BASE
tax
lda map_backgrounds_low,X
sta getsrc_smc+1
lda #>trogdor_cave_lzsa
lda map_backgrounds_hi,X
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
; load priority to $400
; indirectly as we can't trash screen holes
lda MAP_LOCATION
sec
sbc #LOCATION_BASE
tax
lda map_priority_low,X
sta getsrc_smc+1
lda map_priority_hi,X
sta getsrc_smc+2
lda #$20 ; temporarily load to $2000
jsr decompress_lzsa2_fast
; copy to $400
jsr gr_copy_to_page1
; update name/score
jsr update_top
;======================
; draw rather dashing
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
game_loop:
; jsr move_peasant
lda #1
sta BABY_COUNT
inc FRAME
dashing_loop:
jsr check_keyboard
ldy BABY_COUNT
lda dashing_progress_l,Y
sta INL
lda dashing_progress_h,Y
sta INH
lda LEVEL_OVER
bmi oops_new_location
bne level_over
jsr hgr_draw_sprite
; delay
lda #220
lda #200
jsr wait
ldy BABY_COUNT
cpy #7
bne no_boom
lda #64
sta speaker_duration
lda #NOTE_C3
sta speaker_frequency
jsr speaker_beep
no_boom:
inc BABY_COUNT
lda BABY_COUNT
cmp #9
bne dashing_loop
; collapse with boom
;==================
; message
lda #<trogdor_string3
sta OUTL
lda #>trogdor_string3
sta OUTH
jsr hgr_text_box
jsr wait_until_keypress
game_over:
jmp game_loop
oops_new_location:
level_over:
; go to end credits
@ -291,19 +143,13 @@ game_over:
;.include "decompress_fast_v2.s"
;.include "wait_keypress.s"
;.include "hgr_font.s"
;.include "draw_box.s"
;.include "hgr_rectangle.s"
;.include "hgr_1x5_sprite.s"
;.include "draw_peasant.s"
;.include "hgr_7x28_sprite_mask.s"
;.include "hgr_save_restore.s"
;.include "hgr_partial_save.s"
;.include "hgr_input.s"
;.include "hgr_tables.s"
@ -315,6 +161,7 @@ game_over:
.include "gr_copy.s"
.include "keyboard.s"
.include "wait.s"
.include "wait_a_bit.s"
@ -329,30 +176,32 @@ game_over:
.include "graphics_trogdor/trogdor_graphics.inc"
.include "graphics_trogdor/priority_trogdor.inc"
.include "sprites/trogdor_sprites.inc"
trogdor_string:
.byte 0,43,32, 0,253,82
.byte 8,41
.byte 34,"I can honestly say it'll",13
.byte "be a pleasure and an honor",13
.byte "to burninate you, Rather",13
.byte "Dashing.",34,0
;trogdor_string:
; .byte 0,43,32, 0,253,82
; .byte 8,41
; .byte 34,"I can honestly say it'll",13
; .byte "be a pleasure and an honor",13
; .byte "to burninate you, Rather",13
; .byte "Dashing.",34,0
trogdor_string2:
.byte 0,43,32, 0,253,66
.byte 8,41
.byte "Aw that sure was nice of",13
.byte "him!",0
;trogdor_string2:
; .byte 0,43,32, 0,253,66
; .byte 8,41
; .byte "Aw that sure was nice of",13
; .byte "him!",0
trogdor_string3:
.byte 0,43,32, 0,253,90
.byte 8,41
.byte "Congratulations! You've",13
.byte "won! No one can kill",13
.byte "Trogdor but you came closer",13
.byte "than anybody ever! Way to",13
.byte "go!",0
;trogdor_string3:
; .byte 0,43,32, 0,253,90
; .byte 8,41
; .byte "Congratulations! You've",13
; .byte "won! No one can kill",13
; .byte "Trogdor but you came closer",13
; .byte "than anybody ever! Way to",13
; .byte "go!",0
update_top:
@ -372,14 +221,26 @@ update_top:
rts
dashing_progress_l:
.byte <dashing0_sprite,<dashing1_sprite,<dashing2_sprite
.byte <dashing3_sprite,<dashing4_sprite,<dashing5_sprite
.byte <dashing6_sprite,<dashing7_sprite,<dashing8_sprite
map_backgrounds_low:
.byte <trogdor_sleep_lzsa
dashing_progress_h:
.byte >dashing0_sprite,>dashing1_sprite,>dashing2_sprite
.byte >dashing3_sprite,>dashing4_sprite,>dashing5_sprite
.byte >dashing6_sprite,>dashing7_sprite,>dashing8_sprite
map_backgrounds_hi:
.byte >trogdor_sleep_lzsa
map_priority_low:
.byte <trogdor_priority_lzsa
map_priority_hi:
.byte >trogdor_priority_lzsa
verb_tables_low:
.byte <trogdor_inner_verb_table
verb_tables_hi:
.byte >trogdor_inner_verb_table
trogdor_text_lzsa:
.incbin "DIALOG_TROGDOR.LZSA"
.include "trogdor_actions.s"

View File

@ -0,0 +1,277 @@
;=======================
;=======================
;=======================
; trogdor inner
;=======================
;=======================
;=======================
trogdor_inner_verb_table:
; .byte VERB_LOOK
; .word cliff_base_look-1
.byte 0
trogdor_cave:
lda #<trogdor_cave_lzsa
sta getsrc_smc+1
lda #>trogdor_cave_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
;======================
; draw rather dashing
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
lda #<dashing0_sprite
sta INL
lda #>dashing0_sprite
sta INH
jsr hgr_draw_sprite
jsr update_top
jsr wait_until_keypress
;==============================
;==============================
; print honestly say message
;==============================
;==============================
ldx #<trogdor_honestly_message
ldy #>trogdor_honestly_message
jsr finish_parse_message_nowait
;==================================
; text to speech, where available!
lda SOUND_STATUS
and #SOUND_SSI263
beq skip_speech
speech_loop:
; trogdor
lda #4 ; assume slot #4 for now
jsr ssi263_speech_init
lda #<trogdor_honestly
sta SPEECH_PTRL
lda #>trogdor_honestly
sta SPEECH_PTRH
jsr ssi263_speak
wait_for_speech:
lda speech_busy
bmi wait_for_speech
bpl done_speech
skip_speech:
jsr wait_until_keypress
done_speech:
jsr hgr_partial_restore
;==============================
;==============================
; print nice of him message
;==============================
;==============================
ldx #<trogdor_honestly_message2
ldy #>trogdor_honestly_message2
jsr finish_parse_message
; UPDATE SCORE
lda #$10 ; it's BCD
jsr score_points
trogdor_open:
lda #<trogdor_open_lzsa
sta getsrc_smc+1
lda #>trogdor_open_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
;======================
; draw rather dashing
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
lda #<dashing0_sprite
sta INL
lda #>dashing0_sprite
sta INH
jsr hgr_draw_sprite
jsr update_top
; jsr wait_until_keypress
trogdor_flame1:
lda #<trogdor_flame1_lzsa
sta getsrc_smc+1
lda #>trogdor_flame1_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
trogdor_flame2:
lda #<trogdor_flame2_lzsa
sta getsrc_smc+1
lda #>trogdor_flame2_lzsa
sta getsrc_smc+2
lda #$20
jsr decompress_lzsa2_fast
ldx #32
stx BABY_COUNT
burninate_loop:
bit PAGE1
lda #16
sta speaker_duration
lda #NOTE_C3
sta speaker_frequency
jsr speaker_beep
; jsr wait_until_keypress
bit PAGE2
lda #16
sta speaker_duration
lda #NOTE_D3
sta speaker_frequency
jsr speaker_beep
; jsr wait_until_keypress
dec BABY_COUNT
bne burninate_loop
;=====================
;=====================
; stop fire
; open mouth
; charred
; smoke
lda #<trogdor_cave_lzsa
sta getsrc_smc+1
lda #>trogdor_cave_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
jsr update_top
;======================
; draw rather dashing
lda #12
sta CURSOR_X
lda #142
sta CURSOR_Y
lda #1
sta BABY_COUNT
dashing_loop:
ldy BABY_COUNT
lda dashing_progress_l,Y
sta INL
lda dashing_progress_h,Y
sta INH
jsr hgr_draw_sprite
lda #220
jsr wait
ldy BABY_COUNT
cpy #7
bne no_boom
lda #64
sta speaker_duration
lda #NOTE_C3
sta speaker_frequency
jsr speaker_beep
no_boom:
inc BABY_COUNT
lda BABY_COUNT
cmp #9
bne dashing_loop
; collapse with boom
;==================
; message
ldx #<trogdor_honestly_message3
ldy #>trogdor_honestly_message3
jsr finish_parse_message
game_over:
; go to end credits
lda #LOAD_ENDING
sta WHICH_LOAD
rts
dashing_progress_l:
.byte <dashing0_sprite,<dashing1_sprite,<dashing2_sprite
.byte <dashing3_sprite,<dashing4_sprite,<dashing5_sprite
.byte <dashing6_sprite,<dashing7_sprite,<dashing8_sprite
dashing_progress_h:
.byte >dashing0_sprite,>dashing1_sprite,>dashing2_sprite
.byte >dashing3_sprite,>dashing4_sprite,>dashing5_sprite
.byte >dashing6_sprite,>dashing7_sprite,>dashing8_sprite
.include "dialog_trogdor.inc"