peasant: hook up cliff

can actually climb it, though birds/rocks not working currently
for some reason
This commit is contained in:
Vince Weaver 2024-10-08 13:46:52 -04:00
parent c6d5b96a4f
commit ca0c839e6f
6 changed files with 96 additions and 131 deletions

View File

@ -67,6 +67,7 @@ peasant.2mg: dts_block PROBOOTHD QLOAD_HD \
./music/MUSIC ./copy/COPY_CHECK ./inventory/INVENTORY \ ./music/MUSIC ./copy/COPY_CHECK ./inventory/INVENTORY \
./map/MAP ./archery/ARCHERY ./inside/INSIDE ./inn/INN \ ./map/MAP ./archery/ARCHERY ./inside/INSIDE ./inn/INN \
./trogdor/TROGDOR ./ending/ENDING ./cliff_base/CLIFF_BASE \ ./trogdor/TROGDOR ./ending/ENDING ./cliff_base/CLIFF_BASE \
./climb/CLIMB \
./cliff_heights/CLIFF_HEIGHTS \ ./cliff_heights/CLIFF_HEIGHTS \
SAVE1 SAVE2 SAVE3 PARSE_INPUT.ZX02 ./game_over/GAME_OVER SAVE1 SAVE2 SAVE3 PARSE_INPUT.ZX02 ./game_over/GAME_OVER
$(PRODOSDIR)/mkprodosfs peasant.2mg -n PeasantsQ -b 2800 -2 $(PRODOSDIR)/mkprodosfs peasant.2mg -n PeasantsQ -b 2800 -2

View File

@ -1,3 +1,10 @@
current:
finish base (mostly walk_to)
fix/add sound effects for rocks/lightning
add lightning
===============================
Sound effects: Sound effects:
+ Rocks make noise when crash + Rocks make noise when crash
+ di-dit-da-do when falling + di-dit-da-do when falling
@ -47,10 +54,7 @@ General:
+ background priority mask not working when at far top of screen + background priority mask not working when at far top of screen
+ fix issue where walking stops when you cross to screen w priority + fix issue where walking stops when you cross to screen w priority
(most visible, mountain pass to river) (most visible, mountain pass to river)
+ More frames in peasant sprites
+ Let disk 2 live in the 2nd drive?
LDA $C08A,X to select first drive
LDA $C08B,X to select second drive
Peasant sprites: Peasant sprites:
@ -63,8 +67,6 @@ Peasant sprites:
Text parsing: Text parsing:
~~~~~~~~~~~~~ ~~~~~~~~~~~~~
+ get rid ot wasd, make it more like original
for Apple II+ use :,/ for up,down
+ always load CURERENT_NOUN into A before calling into parsing + always load CURERENT_NOUN into A before calling into parsing
routines routines
@ -211,15 +213,26 @@ Inside Inn:
+ Animate getting room (sleeping in bed, waking up) + Animate getting room (sleeping in bed, waking up)
+ Animate night falling + Animate night falling
Cliff: Cliff_Base:
~~~~~~ ~~~~~~~~~~~
+ Walk to
Cliff Climb
~~~~~~~~~~~
+ Hook up
+ Sound effects for rocks falling
+ Sound effect for falling
+ Message upon hitting ground
Cliff Heights
~~~~~~~~~~~~~
+ Hook up points/message for arriving at cliff + Hook up points/message for arriving at cliff
+ Cliff minigame
+ Animate lightning + Animate lightning
+ Fix the priority/entry points for the various entrances + Fix the priority/entry points for the various entrances
+ Hook up dialog with keepers + Hook up dialog with keepers
+ Animate keepers + Animate keepers
+ Animate the three deaths + Animate the three deaths
+ peasant sprites for the various outfits
Trogdor: Trogdor:
~~~~~~~~ ~~~~~~~~

View File

@ -49,10 +49,10 @@ cliff_base_climb:
cliff_base_do_climb: cliff_base_do_climb:
lda #LOAD_HEIGHTS lda #LOAD_CLIMB
sta WHICH_LOAD sta WHICH_LOAD
lda #LOCATION_CLIFF_HEIGHTS lda #LOCATION_CLIMB
sta MAP_LOCATION sta MAP_LOCATION
lda #NEW_FROM_DISK lda #NEW_FROM_DISK

View File

@ -167,7 +167,11 @@ col_copy_loop:
jsr zx02_full_decomp jsr zx02_full_decomp
; clear the keyboard in case we were holding it down
bit KEYRESET
; See if we need to give points
lda GAME_STATE_3 lda GAME_STATE_3
and #CLIFF_CLIMBED and #CLIFF_CLIMBED
@ -207,8 +211,6 @@ col_copy_loop:
cliff_already_climbed: cliff_already_climbed:
;=========================== ;===========================
;=========================== ;===========================
;=========================== ;===========================

View File

@ -41,7 +41,7 @@ cliff_climb:
sta PEASANT_FALLING sta PEASANT_FALLING
sta MAX_HEIGHT sta MAX_HEIGHT
lda #22 ; starting location lda #19 ; starting location
sta PEASANT_X sta PEASANT_X
lda #86 lda #86
sta PEASANT_Y sta PEASANT_Y
@ -127,7 +127,7 @@ draw_bird:
jsr hgr_draw_sprite jsr hgr_draw_sprite
done_draw_bird: done_draw_bird:
.if 0
;===================== ;=====================
; draw rock ; draw rock
;===================== ;=====================
@ -383,7 +383,7 @@ rock_good:
lda CURRENT_ROCK lda CURRENT_ROCK
cmp #MAX_ROCKS cmp #MAX_ROCKS
bne move_rock_loop bne move_rock_loop
.endif
;===================== ;=====================
; increment frame ; increment frame
@ -429,62 +429,55 @@ flame_good:
jmp game_loop jmp game_loop
;=======================
; here if fell
;=======================
cliff_game_over: cliff_game_over:
; jsr clear_gr_all
; bit SET_TEXT lda #LOAD_GAME_OVER
; bit PAGE1
; update max height attained
; lda MAX_HEIGHT
; and #$f
; clc
; adc #$30
; sta losing_number+1
; lda MAX_HEIGHT
; lsr
; lsr
; lsr
; lsr
; clc
; adc #$30
; sta losing_number
; lda #<losing_text
; sta OUTL
; lda #>losing_text
; sta OUTH
; jsr move_and_print_list
; bit KEYRESET
;wait_until_keypress2:
; lda KEYPRESS ; 4
; bpl wait_until_keypress2 ; 3
; cmp #'N'|$80
; beq exit_game
; cmp #'n'|$80
; beq exit_game
; bit KEYRESET ; clear the keyboard buffer
; jmp restart_game
exit_game:
; FIXME
lda #0
sta WHICH_LOAD sta WHICH_LOAD
lda #NEW_FROM_DISK
sta LEVEL_OVER
; FIXME: there actually is a message I think
; ldx #<die_message
; ldy #>die_message
; jmp finish_parse_message
rts ; will this work? rts ; will this work?
;==========================
; here if off top of screen
;==========================
cliff_reload_bg: cliff_reload_bg:
lda MAP_LOCATION
cmp #3
bcc keep_on_climbing ; blt
; hit the top!
lda #LOCATION_CLIFF_HEIGHTS
sta MAP_LOCATION
lda #LOAD_HEIGHTS
sta WHICH_LOAD
lda #NEW_FROM_DISK
sta LEVEL_OVER
rts
keep_on_climbing:
jsr reset_enemy_state jsr reset_enemy_state
jsr load_graphics jsr load_graphics
@ -495,6 +488,10 @@ cliff_reload_bg:
jmp game_loop jmp game_loop
;================================
; load graphics
;================================
load_graphics: load_graphics:
@ -504,25 +501,6 @@ load_graphics:
;======================== ;========================
ldx MAP_LOCATION ldx MAP_LOCATION
cpx #2
bcc priority_normal
; here if map_location above 2
; for coach z version make it harder in this case
lda #$f
sta bird_freq_smc+1
sta rock_freq_smc+1
txa
sta rock_speed_smc+1 ; rock speed prop to level
ldx #2
priority_normal:
lda priority_data_l,X lda priority_data_l,X
sta zx_src_l+1 sta zx_src_l+1
lda priority_data_h,X lda priority_data_h,X
@ -552,19 +530,11 @@ col_copy_loop:
;========================== ;==========================
; Load Background Graphics ; Load Background Graphics
;=========================== ;===========================
; one of the three map locations
ldx MAP_LOCATION ldx MAP_LOCATION
; extra for Z variant
; repeat level 2 over and over
cpx #2
bcc bg_normal
ldx #2
bg_normal:
lda bg_data_l,X lda bg_data_l,X
sta zx_src_l+1 sta zx_src_l+1
lda bg_data_h,X lda bg_data_h,X
@ -585,18 +555,11 @@ bg_normal:
;==================================== ;====================================
; includes ; includes
; .include "hgr_tables.s"
.include "../hgr_sprite.s" .include "../hgr_sprite.s"
; .include "zx02_optim.s"
.include "../wait.s"
.include "keyboard_climb.s" .include "keyboard_climb.s"
.include "../wait.s"
.include "draw_peasant_climb.s" .include "draw_peasant_climb.s"
@ -604,14 +567,9 @@ bg_normal:
.include "../hgr_partial_restore.s" .include "../hgr_partial_restore.s"
; .include "text_print.s" ; for z version
.include "../gr_copy.s" .include "../gr_copy.s"
.include "../hgr_copy.s" .include "../hgr_copy.s"
; .include "random16.s"
.include "../gr_offsets.s" .include "../gr_offsets.s"
.include "../hgr_sprite_bg_mask.s" .include "../hgr_sprite_bg_mask.s"
@ -694,31 +652,6 @@ sprites_mask_h:
.byte >smallrock2_mask,>smallrock3_mask .byte >smallrock2_mask,>smallrock3_mask
.byte >smallrock_crash0_mask,>smallrock_crash1_mask .byte >smallrock_crash0_mask,>smallrock_crash1_mask
.if 0
;========================================
; background restore parameters
; currently 5, should check this and error if we overflow
; tried to dynamically do this, but in the end hard-coded
; 0 = bird
; 1,2,3 = boulders
; 4 = peasant
; 5 = flame
save_valid:
.byte 0, 0, 0, 0, 0, 0
save_xstart:
.byte 0, 0, 0, 0, 0, 0
save_xend:
.byte 0, 0, 0, 0, 0, 0
save_ystart:
.byte 0, 0, 0, 0, 0, 0
save_yend:
.byte 0, 0, 0, 0, 0, 0
.endif
;======================================== ;========================================
; data for the enemies ; data for the enemies

View File

@ -252,12 +252,14 @@ done_cottage:
cottage_path: cottage_path:
.byte 10,117 ; 0 ; 5s, text 1 .byte 10,117 ; 0 ; 5s, text 1
.byte 10,117 ; 1 ; 3s, text 2 .byte 10,117 ; 1 ; 3s, text 2
; diagonal
.byte 11,122 .byte 11,122
.byte 12,127 .byte 12,127
.byte 13,132 .byte 13,132
.byte 14,137 .byte 14,137
.byte 15,142 .byte 15,142
.byte 16,147 .byte 16,147
; horizontal
.byte 17,147 .byte 17,147
.byte 18,147 .byte 18,147
.byte 19,147 .byte 19,147
@ -282,3 +284,17 @@ cottage_path:
.byte 38,147 .byte 38,147
.byte $FF,$FF .byte $FF,$FF
;=====================================
; walk to
; go one step from PEASANT_X, PEASANT_Y
; to WALK_DEST_X, WALK_DEST_Y
; if PEASANT_X>WALK_DEST_X face left
; else WALK_DEST_X face right
; if PEASANT_X==WALK_DEST_X
; if PEASANT_Y>WALK_DEST_Y face up
; else WALK_DEST_Y face down
walk_to: