From 2933f6caea2c35845de6c7176165505f7136871d Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Mon, 22 Nov 2021 00:30:30 -0500 Subject: [PATCH] peasant: kerrek: can kill kerrek now --- games/peasant/NOTES | 3 +- games/peasant/TODO | 3 ++ games/peasant/kerrek_actions.s | 83 +++++++++++++++++++++++++++++++++- games/peasant/text/kerrek.inc | 11 ++++- 4 files changed, 96 insertions(+), 4 deletions(-) diff --git a/games/peasant/NOTES b/games/peasant/NOTES index a5712180..b8ff24ac 100644 --- a/games/peasant/NOTES +++ b/games/peasant/NOTES @@ -189,8 +189,9 @@ POINTS IMPLEMENTED: (in order of implementation) + 2 (get super trinket) + 3 (win archery game) + 10 (get belt) ++ 5 (kill kerrek) ====== - 67 points + 72 points deaths/endings implemented diff --git a/games/peasant/TODO b/games/peasant/TODO index 07b7dfe6..6afcda52 100644 --- a/games/peasant/TODO +++ b/games/peasant/TODO @@ -1,5 +1,8 @@ TODO: +update knight for kerrek belt +kerrek decay + string compression: run trgodor level, intro, and instructions through it can get stuck on top of targets at archery range diff --git a/games/peasant/kerrek_actions.s b/games/peasant/kerrek_actions.s index cdffe7a0..b1e718bf 100644 --- a/games/peasant/kerrek_actions.s +++ b/games/peasant/kerrek_actions.s @@ -29,7 +29,7 @@ kerrek_alive_out: sta KERREK_X lda #76 sta KERREK_Y - lda #0 + lda #1 ; right sta KERREK_DIRECTION lda #1 sta KERREK_SPEED @@ -348,8 +348,87 @@ kerrek_save: ;================= kerrek_kill: kerrek_shoot: + ; check we are trying to kill kerrek? + lda CURRENT_NOUN + cmp #NOUN_KERREK + beq kerrek_kill_kerrek - rts + jmp parse_common_unknown + +kerrek_kill_kerrek: + + ; first check if Kerrek is alive + lda KERREK_STATE + and #$f + bpl kerrek_kill_still_alive + +kerrek_kill_hes_dead: + ldx #kerrek_kill_kerrek_dead_message + jmp finish_parse_message + +kerrek_kill_still_alive: + + ; next check if he's on screen + lda KERREK_STATE + bmi kerrek_kill_on_screen + +kerrek_kill_off_screen: + ldx #kerrek_kill_kerrek_not_there_message + jmp finish_parse_message + +kerrek_kill_on_screen: + ; he's alive and on screen + + ; check if have bow and arrow + + lda INVENTORY_1 + and #(INV1_BOW | INV1_ARROW) + beq kerrek_kill_no_bow_no_arrow + cmp #INV1_BOW + beq kerrek_kill_only_bow + cmp #INV1_ARROW + beq kerrek_kill_only_arrow + +kerrek_actually_kill: + ldx #kerrek_kill_message + jsr partial_message_step + + ldx #kerrek_kill_message2 + jsr partial_message_step + + lda #5 + jsr score_points + + inc KERREK_STATE ; make kerrek dead + + lda GAME_STATE_1 + ora #(RAINING|PUDDLE_WET) + sta GAME_STATE_1 + + + ldx #kerrek_kill_message3 + jmp finish_parse_message + + +kerrek_kill_only_bow: + ldx #kerrek_kill_only_bow_message + jmp finish_parse_message + +kerrek_kill_only_arrow: + ldx #kerrek_kill_only_arrow_message + jmp finish_parse_message + +kerrek_kill_no_bow_no_arrow: + ldx #kerrek_kill_no_bow_no_arrow_message + jmp finish_parse_message ;================= diff --git a/games/peasant/text/kerrek.inc b/games/peasant/text/kerrek.inc index 9fce3c8e..7be93632 100644 --- a/games/peasant/text/kerrek.inc +++ b/games/peasant/text/kerrek.inc @@ -13,20 +13,23 @@ kerrek_pound_message: .byte "You dead. Thanks for",13 .byte "playing.",0 + ; + 5 POINTS ; + kill kerrek ; + shoot Kerrek with bow +kerrek_kill_message: .byte "Here goes nothin', Kid",13 .byte "Icarus",0 ; animation of shooting him, him falling +kerrek_kill_message2: .byte "ARROWED!! Nice shot. You",13 .byte "smote the Kerrek! He lay",13 .byte "there stinking.",0 ; pause - +kerrek_kill_message3: .byte "A light rain heralds the",13 .byte "washing free of the",13 .byte "Kerrek's grip on the land.",13 @@ -36,24 +39,30 @@ kerrek_pound_message: .byte "bug you.",0 ; + kill kerrek (he is there, no bow or arrow) +kerrek_kill_no_bow_no_arrow_message: .byte "With what?! You got no",13 .byte "weapons except your",13 .byte "butter-knife wit.",0 ; + kill kerrek (he is there, you have arrow but not bow) +kerrek_kill_only_arrow_message: .byte "With what?! You gonna throw",13 .byte "that arrow at him?",0 ; + kill kerrek (he is there, you have bow, not arrow +kerrek_kill_only_bow_message: .byte "With what?! You got no",13 .byte "arrow, fool!",0 ; + kill kerrek (he is dead) +; even if not on screen with dead body +kerrek_kill_kerrek_dead_message: .byte "Yeah. You smote the Kerrek.",13 .byte "You deserve a trophy full",13 .byte "of Mutton-ums.",0 ; + kill kerrek (he is not there) +kerrek_kill_kerrek_not_there_message: .byte "Good idea. But you kinda",13 .byte "need the actual Kerrek to",13 .byte "be here for that to work.",0