From b390c96f0a98e50cd178838e744a048f344e6bff Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 21 Feb 2022 01:48:48 -0500 Subject: [PATCH] peasant: kerrek can bonk you now --- games/peasant/kerrek_actions.s | 356 ++++++++++++++++++++++- games/peasant/move_peasant.s | 33 ++- games/peasant/sprites/Makefile | 11 + games/peasant/sprites/kerrek_sprites.png | Bin 2703 -> 2795 bytes games/peasant/zp.inc | 10 +- 5 files changed, 390 insertions(+), 20 deletions(-) diff --git a/games/peasant/kerrek_actions.s b/games/peasant/kerrek_actions.s index 0b8cec9a..c07d8382 100644 --- a/games/peasant/kerrek_actions.s +++ b/games/peasant/kerrek_actions.s @@ -405,13 +405,363 @@ kerrek_y_distance_negate: adc #1 kerrek_y_distance_good: cmp #5 - bcs kerrek_no_collision + bcc kerrek_got_ya + +kerrek_no_collision: + + rts + ;============================= + ; kerrek got ya! + ;============================= + ; for now, from right only + + ; clear out both + ; 1. draw peasant looking forward + ; draw kerrek feet + ; draw kerrek head + ; draw kerrek teeth + ; draw kerrek, arm + ; 2. draw arm up + ; 3. draw big hit + ; 4. erase peasant, draw in ground + ; 5. draw regular arm + ; 6. pause a bit + ; 7. print message kerrek_got_ya: + ;===================== ; game over, man! - ; animate pounding you into ground + + ;============================= + ; step 1 + ;============================= + + ; erase old kerrek (FIXME: make common?) + + lda PREV_Y + sta SAVED_Y1 + clc + adc #51 + sta SAVED_Y2 + + lda PREV_X + tax + inx + inx + jsr hgr_partial_restore + + jsr erase_peasant + + ; draw peasant + + lda PEASANT_X + and #$FE ; only works on even locations + sta PEASANT_X + sta CURSOR_X + sec + sbc #4 + sta KERREK_X + + lda PEASANT_Y + sta CURSOR_Y + sec + sbc #22 + sta KERREK_Y + + lda #peasant_down2_sprite + sta INH + + jsr hgr_draw_sprite_1x28 + + ; draw kerrek + + ; draw kerrek head + + lda #kerrek_r_hitting_head_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw kerrek teeth + + lda #kerrek_r_hitting_teeth_sprite + sta INH + lda KERREK_X + clc + adc #2 + sta CURSOR_X + lda KERREK_Y + clc + adc #8 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw kerrek arm + + lda #kerrek_r_hitting_arm_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + clc + adc #11 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw kerrek legs + + lda #kerrek_r_hitting_legs_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + clc + adc #21 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; wait a bit + + lda #5 + jsr wait_a_bit + + ;============================= + ; step 2 + ;============================= + + ; erase old kerrek arm + + lda KERREK_Y + clc + adc #10 + sta SAVED_Y1 + adc #10 + sta SAVED_Y2 + + lda KERREK_X + tax + inx + inx + jsr hgr_partial_restore + + + ; draw kerrek + + ; draw kerrek head + + lda #kerrek_r_hitting_arm_up_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + sec + sbc #2 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; wait a bit + + lda #5 + jsr wait_a_bit + + + ;============================= + ; step 3 + ;============================= + + ; erase old kerrek arm + + lda KERREK_Y + sec + sbc #2 + sta SAVED_Y1 + adc #17 + sta SAVED_Y2 + + lda KERREK_X + tax + inx + inx + jsr hgr_partial_restore + + + ; draw kerrek + + + ; draw kerrek head + + lda #kerrek_r_hitting_head_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw kerrek teeth + + lda #kerrek_r_hitting_teeth_sprite + sta INH + lda KERREK_X + clc + adc #2 + sta CURSOR_X + lda KERREK_Y + clc + adc #8 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw big arm + + lda #kerrek_r_hitting_arm_down_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + clc + adc #11 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; wait a bit + + ; FIXME: sound effect + + lda #5 + jsr wait_a_bit + + + ;============================= + ; step 4 + ;============================= + + ; erase peasant + + jsr erase_peasant + + ; draw peasant in ground + + lda PEASANT_X + sta CURSOR_X + + lda PEASANT_Y + clc + adc #15 + sta CURSOR_Y + + lda #kerrek_peasant_ground_sprite + sta INH + + jsr hgr_draw_sprite + + lda #5 + jsr wait_a_bit + + + ;============================= + ; step 5 + ;============================= + + ; erase old kerrek + + lda KERREK_Y + clc + adc #11 + sta SAVED_Y1 + adc #20 + sta SAVED_Y2 + + lda KERREK_X + tax + inx + inx + inx + inx + jsr hgr_partial_restore + + ; draw kerrek + + ; draw kerrek arm + + lda #kerrek_r_hitting_arm_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + clc + adc #11 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; draw kerrek legs + + lda #kerrek_r_hitting_legs_sprite + sta INH + lda KERREK_X + sta CURSOR_X + lda KERREK_Y + clc + adc #21 + sta CURSOR_Y + + jsr hgr_draw_sprite + + ; wait a bit + + lda #5 + jsr wait_a_bit + + + ;============================= + ; step 6 + ;============================= + + ; wait a bit + + lda #20 + jsr wait_a_bit + + + ; print message ldx #kerrek_pound_message @@ -423,7 +773,6 @@ kerrek_got_ya: lda #NEW_FROM_DISK sta LEVEL_OVER -kerrek_no_collision: rts @@ -431,6 +780,7 @@ kerrek_no_collision: + ;======================= ;======================= ;======================= diff --git a/games/peasant/move_peasant.s b/games/peasant/move_peasant.s index df182000..8c04f600 100644 --- a/games/peasant/move_peasant.s +++ b/games/peasant/move_peasant.s @@ -14,18 +14,7 @@ really_move_peasant: ; restore bg behind peasant - lda PEASANT_Y - sta SAVED_Y1 - clc - adc #28 - sta SAVED_Y2 - - ldx PEASANT_X - txa - inx - - jsr hgr_partial_restore - + jsr erase_peasant ;========================= ;========================= @@ -159,6 +148,26 @@ peasant_the_same: rts + ;=========================== + ; erase peasant + ;=========================== + + ; restore bg behind peasant +erase_peasant: + lda PEASANT_Y + sta SAVED_Y1 + clc + adc #28 + sta SAVED_Y2 + + ldx PEASANT_X + txa + inx + + jmp hgr_partial_restore ; tail call + + + ; when peasants collide diff --git a/games/peasant/sprites/Makefile b/games/peasant/sprites/Makefile index e3714a11..538e270b 100644 --- a/games/peasant/sprites/Makefile +++ b/games/peasant/sprites/Makefile @@ -142,6 +142,17 @@ kerrek_sprites.inc: kerrek_sprites.png $(HGR_SPRITE) -s -l kerrek_r1_head_sprite kerrek_sprites.png 21 60 27 68 >> kerrek_sprites.inc $(HGR_SPRITE) -s -l kerrek_r2_sprite kerrek_sprites.png 42 56 55 108 >> kerrek_sprites.inc $(HGR_SPRITE) -s -l kerrek_r2_head_sprite kerrek_sprites.png 56 60 62 66 >> kerrek_sprites.inc + # hitting animation + $(HGR_SPRITE) -s -l kerrek_r_hitting_legs_sprite kerrek_sprites.png 70 23 83 54 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_r_hitting_head_sprite kerrek_sprites.png 70 2 83 13 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_r_hitting_teeth_sprite kerrek_sprites.png 84 10 90 12 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_r_hitting_arm_sprite kerrek_sprites.png 98 13 118 23 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_r_hitting_arm_up_sprite kerrek_sprites.png 126 0 146 23 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_r_hitting_arm_down_sprite kerrek_sprites.png 154 13 188 31 >> kerrek_sprites.inc + $(HGR_SPRITE) -s -l kerrek_peasant_ground_sprite kerrek_sprites.png 182 41 188 54 >> kerrek_sprites.inc + + + trogdor_sprites.inc: trogdor_sprites.png $(HGR_SPRITE) -s -l dashing0_sprite trogdor_sprites.png 14 6 20 45 > trogdor_sprites.inc diff --git a/games/peasant/sprites/kerrek_sprites.png b/games/peasant/sprites/kerrek_sprites.png index 650ce703930b39ade26301f42d1b3ff44714013c..d3acc9d0a894b859e65e58b24fc91e50bfc53c5d 100644 GIT binary patch delta 2696 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