peasant: kerrek can bonk you now

This commit is contained in:
Vince Weaver 2022-02-21 01:48:48 -05:00
parent 206ab9676e
commit b390c96f0a
5 changed files with 390 additions and 20 deletions

View File

@ -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 INL
lda #>peasant_down2_sprite
sta INH
jsr hgr_draw_sprite_1x28
; draw kerrek
; draw kerrek head
lda #<kerrek_r_hitting_head_sprite
sta INL
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 INL
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 INL
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 INL
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 INL
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 INL
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 INL
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 INL
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 INL
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 INL
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 INL
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
ldy #>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:
;=======================
;=======================
;=======================

View File

@ -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

View File

@ -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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -163,11 +163,11 @@ GAME_STATE_2 = $99
GREASE_ON_HEAD =$80
NED_STATUS = $9A
; 0 = hiding
; 1..127 = countdown to appearing
; 128 = hands on tree
; 129 = half out
; 130+/negative = out
; 0 = hiding (no increment)
; 1..127 = count up to appearing
; 126,255 = hands on tree
; 127,254 = half out
; 128 = out (no increment)
BUSH_STATUS = $9B ; status of bush search
BUSH_1_SEARCHED = $01