From 1ac631bbcf6ec2c87560e20f2cb5dea74765db14 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 29 Dec 2021 01:27:37 -0500 Subject: [PATCH] peasant: work on unifying the sprite code --- games/peasant/Makefile | 1 - games/peasant/hgr_1x28_sprite_mask.s | 52 +++++--- games/peasant/inn.s | 34 ++++- games/peasant/intro.s | 45 +++---- games/peasant/intro_cottage.s | 64 +++++----- games/peasant/intro_knight.s | 4 +- games/peasant/intro_lake_e.s | 8 +- games/peasant/intro_lake_w.s | 150 +++++++++++++---------- games/peasant/intro_river.s | 4 +- games/peasant/peasant4_actions.s | 2 +- games/peasant/qload.inc | 51 ++++---- games/peasant/sprites/Makefile | 13 +- games/peasant/sprites/bubble_sprites.png | Bin 0 -> 7580 bytes 13 files changed, 242 insertions(+), 186 deletions(-) create mode 100644 games/peasant/sprites/bubble_sprites.png diff --git a/games/peasant/Makefile b/games/peasant/Makefile index 82f50cc8..cebe235b 100644 --- a/games/peasant/Makefile +++ b/games/peasant/Makefile @@ -119,7 +119,6 @@ qload.inc: generate_common QLOAD ./generate_common -a 0xb00 -s hgr2 qload.lst >> qload.inc ./generate_common -a 0xb00 -s hgr_make_tables qload.lst >> qload.inc ./generate_common -a 0xb00 -s hgr_put_string qload.lst >> qload.inc - ./generate_common -a 0xb00 -s save_bg_1x28 qload.lst >> qload.inc ./generate_common -a 0xb00 -s restore_bg_1x28 qload.lst >> qload.inc ./generate_common -a 0xb00 -s hgr_draw_sprite_1x28 qload.lst >> qload.inc ./generate_common -a 0xb00 -s input_buffer qload.lst >> qload.inc diff --git a/games/peasant/hgr_1x28_sprite_mask.s b/games/peasant/hgr_1x28_sprite_mask.s index 35f2b12a..35312f6f 100644 --- a/games/peasant/hgr_1x28_sprite_mask.s +++ b/games/peasant/hgr_1x28_sprite_mask.s @@ -105,12 +105,12 @@ draw_sprite_skip: rts - +.if 0 ;====================== ; save bg 1x28 ;====================== -save_bg_1x28: +bsave_bg_1x28: ldx #0 save_yloop: @@ -142,6 +142,7 @@ save_yloop: bne save_yloop rts +.endif ;====================== ; restore bg 1x28 @@ -149,28 +150,41 @@ save_yloop: restore_bg_1x28: - ldx #0 -restore_yloop: - txa ; current row - clc - adc CURSOR_Y ; add in y start point + ; restore bg behind peasant + ; is this actually faster than using the generic version? + + ldy CURSOR_Y ; y start point + + ldx #27 ; height + +restore_yloop: ; calc GBASL/GBASH using lookup table - tay + clc lda hposn_low,Y - sta GBASL + adc PEASANT_X + sta restore_page1_smc+1 + sta restore_page2_smc+1 + + ; $40 -> $20 0100 0000 -> 0010 0000 + ; $41 -> $21 0100 0001 -> 0010 0001 + ; $51 -> $31 0101 0011 -> 0101 0001 + lda hposn_high,Y - sta GBASH + sta restore_page2_smc+2 + eor #$60 + sta restore_page1_smc+2 - ldy CURSOR_X +restore_page1_smc: + lda $DDDD +restore_page2_smc: + sta $DDDD - lda save_sprite_1x28,X - sta (GBASL),Y + iny - inx - cpx #28 - bne restore_yloop + dex + bpl restore_yloop rts @@ -285,9 +299,9 @@ mask_false: ; save area ;==================== -save_sprite_1x28: -.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 -.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +;save_sprite_1x28: +;.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 +;.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 ysave: .byte $00 diff --git a/games/peasant/inn.s b/games/peasant/inn.s index 2e32decb..3e922c08 100644 --- a/games/peasant/inn.s +++ b/games/peasant/inn.s @@ -133,24 +133,46 @@ new_location: ;==================== ; save background - lda PEASANT_X - sta CURSOR_X - lda PEASANT_Y - sta CURSOR_Y +; lda PEASANT_X +; sta CURSOR_X +; lda PEASANT_Y +; sta CURSOR_Y ;======================= ; draw initial peasant - jsr save_bg_1x28 +; jsr save_bg_1x28 - jsr draw_peasant +; jsr draw_peasant + + ;=========================== + ;=========================== + ;=========================== + ; main loop + ;=========================== + ;=========================== + ;=========================== game_loop: + ;======================== + ; move the peasant + jsr move_peasant + ;======================== + ; draw the peasant + + jsr draw_peasant + + ;======================== + ; increment the frame + inc FRAME + ;======================== + ; check the keyboard + jsr check_keyboard ;===================== diff --git a/games/peasant/intro.s b/games/peasant/intro.s index b3b1a86a..28a2dade 100644 --- a/games/peasant/intro.s +++ b/games/peasant/intro.s @@ -14,15 +14,16 @@ peasant_quest_intro: lda #0 sta ESC_PRESSED + sta LEVEL_OVER jsr hgr_make_tables jsr hgr2 - ;******************************* + ;=============================== ; restart music, only drum loop - ;****************************** + ;=============================== lda SOUND_STATUS and #SOUND_MOCKINGBOARD @@ -41,51 +42,51 @@ peasant_quest_intro: cli mockingboard_notfound: - ;************************ + ;======================== ; Cottage - ;************************ + ;======================== jsr cottage lda ESC_PRESSED bne escape_handler - ;************************ + ;======================== ; Lake West - ;************************ + ;======================== jsr lake_west lda ESC_PRESSED bne escape_handler - ;************************ + ;======================== ; Lake East - ;************************ + ;======================== jsr lake_east lda ESC_PRESSED bne escape_handler - ;************************ + ;======================== ; River - ;************************ + ;======================== jsr river lda ESC_PRESSED bne escape_handler - ;************************ + ;======================== ; Knight - ;************************ + ;======================== jsr knight - ;************************ + ;======================== ; Start actual game - ;************************ + ;======================== jsr draw_peasant @@ -119,9 +120,6 @@ mockingboard_notfound2: .include "new_game.s" - -;.include "wait_keypress.s" - .include "intro_cottage.s" .include "intro_lake_w.s" .include "intro_lake_e.s" @@ -130,21 +128,12 @@ mockingboard_notfound2: .include "draw_peasant.s" -;.include "decompress_fast_v2.s" -;.include "hgr_font.s" -;.include "draw_box.s" -;.include "hgr_rectangle.s" -;.include "hgr_1x28_sprite.s" -;.include "hgr_partial_save.s" -;.include "hgr_input.s" -;.include "hgr_tables.s" -;.include "hgr_text_box.s" -;.include "hgr_hgr2.s" - .include "hgr_1x5_sprite.s" +.include "hgr_sprite.s" .include "gr_copy.s" +.include "hgr_copy.s" .include "wait.s" .include "wait_a_bit.s" diff --git a/games/peasant/intro_cottage.s b/games/peasant/intro_cottage.s index 5ab3e527..11c3adb6 100644 --- a/games/peasant/intro_cottage.s +++ b/games/peasant/intro_cottage.s @@ -1,11 +1,12 @@ ; THATCHED ROOF COTTAGES + ; More specifically, the Dashing Residence cottage: - ;************************ + ;======================== ; Cottage - ;************************ + ;======================== lda #0 sta FRAME @@ -22,19 +23,7 @@ cottage: lda #PEASANT_DIR_RIGHT sta PEASANT_DIR - ;================== - ; draw background - - lda #<(cottage_lzsa) - sta getsrc_smc+1 - lda #>(cottage_lzsa) - sta getsrc_smc+2 - - lda #$40 - - jsr decompress_lzsa2_fast - - + ;============================= ; load priority to $400 ; indirectly as we can't trash screen holes @@ -52,6 +41,21 @@ cottage: jsr gr_copy_to_page1 + + ;========================== + ; load background to $2000 (PAGE1) + + lda #<(cottage_lzsa) + sta getsrc_smc+1 + lda #>(cottage_lzsa) + sta getsrc_smc+2 + + lda #$20 + + jsr decompress_lzsa2_fast + + jsr hgr_copy + ;=================== ; print title @@ -60,15 +64,15 @@ cottage: ;==================== ; save background - lda PEASANT_X - sta CURSOR_X - lda PEASANT_Y - sta CURSOR_Y +; lda PEASANT_X +; sta CURSOR_X +; lda PEASANT_Y +; sta CURSOR_Y ;======================= ; walking - jsr save_bg_1x28 +; jsr save_bg_1x28 cottage_walk_loop: @@ -98,20 +102,20 @@ cottage_walk_loop: sta PEASANT_Y sta CURSOR_Y - jsr save_bg_1x28 +; jsr save_bg_1x28 jsr draw_peasant - ;======================== - ; handle special - + ;====================== + ; handle special action lda FRAME check_cottage_action1: cmp #0 bne check_cottage_action2 + ;======================== ; display cottage text 1 lda #cottage_text2 - jmp finish_cottage_action check_cottage_action3: cmp #13 bne done_cottage_action + + ;========================= + ; undraw the text box lda #0 ldx #39 jsr hgr_partial_restore + ;========================= ; display cottage text 3 lda #(lake_w_lzsa) - sta getsrc_smc+2 - - lda #$40 - - jsr decompress_lzsa2_fast - - ;================ - ; print title - - jsr intro_print_title - - + ;=============================== ; load priority to $400 ; indirectly as we can't trash screen holes @@ -54,18 +40,38 @@ lake_west: jsr gr_copy_to_page1 + ;================== + ; load background + + lda #<(lake_w_lzsa) + sta getsrc_smc+1 + lda #>(lake_w_lzsa) + sta getsrc_smc+2 + + lda #$20 + + jsr decompress_lzsa2_fast + + jsr hgr_copy + + ;================ + ; print title + + jsr intro_print_title + + ;==================== ; save background - lda PEASANT_X - sta CURSOR_X - lda PEASANT_Y - sta CURSOR_Y +; lda PEASANT_X +; sta CURSOR_X +; lda PEASANT_Y +; sta CURSOR_Y ;======================= ; walking - jsr save_bg_1x28 +; jsr save_bg_1x28 lake_w_walk_loop: @@ -92,7 +98,7 @@ lake_w_walk_loop: sta PEASANT_Y sta CURSOR_Y - jsr save_bg_1x28 +; jsr save_bg_1x28 jsr draw_peasant @@ -104,6 +110,7 @@ check_lake_w_action1: cmp #0 bne check_lake_w_action2 + ;========================== ; re-display cottage text 3 lda # peasant_sprites.inc @@ -156,9 +156,18 @@ trogdor_sprites.inc: trogdor_sprites.png waterfall_sprites.inc: waterfall_sprites.png $(HGR_SPRITE) -s -l waterfall_sprite waterfall_sprites.png 14 5 27 52 > waterfall_sprites.inc +bubble_sprites.inc: bubble_sprites.png + $(HGR_SPRITE) -s -l bubble_sprite0 bubble_sprites.png 7 1 13 6 > bubble_sprites.inc + $(HGR_SPRITE) -s -l bubble_sprite1 bubble_sprites.png 7 8 13 13 >> bubble_sprites.inc + $(HGR_SPRITE) -s -l bubble_sprite2 bubble_sprites.png 7 15 13 20 >> bubble_sprites.inc + $(HGR_SPRITE) -s -l bubble_sprite3 bubble_sprites.png 7 22 13 27 >> bubble_sprites.inc + $(HGR_SPRITE) -s -l bubble_sprite4 bubble_sprites.png 7 29 13 34 >> bubble_sprites.inc + $(HGR_SPRITE) -s -l bubble_sprite5 bubble_sprites.png 7 36 13 41 >> bubble_sprites.inc + + clean: rm -f *~ peasant_sprites.inc inventory_sprites.inc \ ending_sprites.inc trogdor_sprites.inc ned_sprites.inc \ peasant_robe_sprites.inc kerrek_sprites.inc \ - waterfall_sprites.inc + waterfall_sprites.inc bubble_sprites.inc diff --git a/games/peasant/sprites/bubble_sprites.png b/games/peasant/sprites/bubble_sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..e13ddfa2dee6e5440cf11a36834a6af094d719ed GIT binary patch literal 7580 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