diff --git a/games/peasant/Makefile b/games/peasant/Makefile index f18ec2f9..fd484ff5 100644 --- a/games/peasant/Makefile +++ b/games/peasant/Makefile @@ -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 diff --git a/games/peasant/dialog_trogdor.s b/games/peasant/dialog_trogdor.s new file mode 100644 index 00000000..c2f02d20 --- /dev/null +++ b/games/peasant/dialog_trogdor.s @@ -0,0 +1,2 @@ +.include "text/lookup.inc" +.include "text/trogdor.inc.lookup" diff --git a/games/peasant/graphics_trogdor/Makefile b/games/peasant/graphics_trogdor/Makefile index fca279c7..2b9575c8 100644 --- a/games/peasant/graphics_trogdor/Makefile +++ b/games/peasant/graphics_trogdor/Makefile @@ -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 diff --git a/games/peasant/graphics_trogdor/trogdor_priority.png b/games/peasant/graphics_trogdor/trogdor_priority.png new file mode 100644 index 00000000..e8b0f9e3 Binary files /dev/null and b/games/peasant/graphics_trogdor/trogdor_priority.png differ diff --git a/games/peasant/graphics_trogdor/trogdor_sleep.png b/games/peasant/graphics_trogdor/trogdor_sleep.png new file mode 100644 index 00000000..162caa5c Binary files /dev/null and b/games/peasant/graphics_trogdor/trogdor_sleep.png differ diff --git a/games/peasant/parse_input.s b/games/peasant/parse_input.s index 0751e2ab..56e845fc 100644 --- a/games/peasant/parse_input.s +++ b/games/peasant/parse_input.s @@ -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 diff --git a/games/peasant/text/trogdor.inc b/games/peasant/text/trogdor.inc index 74934242..be24ce1e 100644 --- a/games/peasant/text/trogdor.inc +++ b/games/peasant/text/trogdor.inc @@ -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 diff --git a/games/peasant/trogdor.s b/games/peasant/trogdor.s index 3f653fe5..08cccb5a 100644 --- a/games/peasant/trogdor.s +++ b/games/peasant/trogdor.s @@ -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+2 + + lda #$d0 + jsr decompress_lzsa2_fast + ; update score jsr update_score -trogdor_cave: - 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 + 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 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_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 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+2 - - lda #$40 - - jsr decompress_lzsa2_fast - - ;====================== - ; draw rather dashing - - lda #12 - sta CURSOR_X - lda #142 - sta CURSOR_Y - - 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+2 - - lda #$40 - - jsr decompress_lzsa2_fast - -trogdor_flame2: - - 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_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 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_hi: + .byte >trogdor_sleep_lzsa + +map_priority_low: + .byte trogdor_priority_lzsa + +verb_tables_low: + .byte trogdor_inner_verb_table +trogdor_text_lzsa: +.incbin "DIALOG_TROGDOR.LZSA" + +.include "trogdor_actions.s" diff --git a/games/peasant/trogdor_actions.s b/games/peasant/trogdor_actions.s new file mode 100644 index 00000000..636d6e79 --- /dev/null +++ b/games/peasant/trogdor_actions.s @@ -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+2 + + lda #$40 + + jsr decompress_lzsa2_fast + + ;====================== + ; draw rather dashing + + lda #12 + sta CURSOR_X + lda #142 + sta CURSOR_Y + + lda #dashing0_sprite + sta INH + + jsr hgr_draw_sprite + + + jsr update_top + + jsr wait_until_keypress + + ;============================== + ;============================== + ; print honestly say message + ;============================== + ;============================== + + ldx #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_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 + jsr finish_parse_message + + + ; UPDATE SCORE + + lda #$10 ; it's BCD + jsr score_points + +trogdor_open: + + 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 INH + + jsr hgr_draw_sprite + + jsr update_top + +; jsr wait_until_keypress + + +trogdor_flame1: + + lda #trogdor_flame1_lzsa + sta getsrc_smc+2 + + lda #$40 + + jsr decompress_lzsa2_fast + +trogdor_flame2: + + 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+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 + 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 + + +.include "dialog_trogdor.inc"