dos33fsprogs/games/peasant/ending.s

620 lines
9.3 KiB
ArmAsm
Raw Normal View History

2021-09-07 04:55:37 +00:00
; Peasant's Quest Ending
2021-09-11 03:18:21 +00:00
; The credits scenes
2021-09-07 04:55:37 +00:00
; by Vince `deater` Weaver vince@deater.net
.include "hardware.inc"
.include "zp.inc"
.include "qload.inc"
ending:
jsr hgr_make_tables
jsr HGR2 ; Hi-res graphics, no text at bottom
; Y=0, A=0 after this called
lda #0
sta FRAME
; update score
jsr update_score
2021-09-11 03:18:21 +00:00
;=====================
; re-start music
;=====================
; need to un-do any patching
; reset to beginning of song
; and start interrupts
; FIXME: only if mockingboard enabled
cli
2021-09-07 04:55:37 +00:00
2021-09-11 03:18:21 +00:00
;=====================
;=====================
; boat scene
;=====================
;=====================
2021-09-08 03:31:37 +00:00
boat:
lda #<lake_e_boat_lzsa
sta getsrc_smc+1
lda #>lake_e_boat_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
2021-09-11 03:18:21 +00:00
jsr update_top
; draw rectangle
lda #$80 ; color is black2
sta VGI_RCOLOR
lda #12
sta VGI_RX1
2021-09-17 02:51:55 +00:00
lda #98
2021-09-11 03:18:21 +00:00
sta VGI_RY1
lda #202
sta VGI_RXRUN
lda #20
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #214
sta VGI_RX1
2021-09-17 02:51:55 +00:00
lda #98
2021-09-11 03:18:21 +00:00
sta VGI_RY1
lda #45
sta VGI_RXRUN
lda #20
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #<boat_string
sta OUTL
lda #>boat_string
sta OUTH
jsr disp_put_string
;======================
; animate catching fish
2021-09-17 02:51:55 +00:00
lda #1
sta CURSOR_X
lda #52
sta CURSOR_Y
lda #0
sta BABY_COUNT
boat_loop:
ldy BABY_COUNT
lda boat_progress_l,Y
sta INL
lda boat_progress_h,Y
sta INH
jsr hgr_draw_sprite
lda #4
jsr wait_a_bit
; jsr wait_until_keypress
2021-09-08 03:31:37 +00:00
2021-09-17 02:51:55 +00:00
inc BABY_COUNT
lda BABY_COUNT
cmp #14
bne boat_loop
2021-09-08 03:31:37 +00:00
2021-09-11 03:18:21 +00:00
;=======================
;=======================
; waterfall
;=======================
;=======================
2021-09-07 04:55:37 +00:00
waterfall:
2021-09-13 05:06:58 +00:00
lda #0
sta FRAME
2021-09-07 04:55:37 +00:00
lda #<waterfall_lzsa
sta getsrc_smc+1
lda #>waterfall_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
2021-09-11 03:18:21 +00:00
jsr update_top
; draw rectangle
lda #$80 ; color is black2
sta VGI_RCOLOR
lda #44
sta VGI_RX1
lda #48
sta VGI_RY1
lda #192
sta VGI_RXRUN
lda #20
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #<waterfall_string
sta OUTL
lda #>waterfall_string
sta OUTH
jsr disp_put_string
;=========================
; animate baby
2021-09-13 01:32:14 +00:00
ldx #0
stx BABY_COUNT
lda #14
sta h1414_smc_len+1
; initial bg save
lda #0
sta CURSOR_X
sta CURSOR_Y
jsr save_bg_14x14
2021-09-13 05:06:58 +00:00
2021-09-13 01:32:14 +00:00
baby_loop:
2021-09-17 03:07:19 +00:00
;====================
; also animate waterfall
lda CURSOR_X
pha
lda CURSOR_Y
pha
lda #36
sta CURSOR_X
lda #93
sta CURSOR_Y
lda FRAME
and #$4
beq do_foam1
do_foam0:
lda #<foam0
sta INL
lda #>foam0
jmp do_foam
do_foam1:
lda #<foam1
sta INL
lda #>foam1
do_foam:
sta INH
jsr hgr_draw_sprite
pla
sta CURSOR_Y
pla
sta CURSOR_X
;====================
; actually draw baby
2021-09-13 05:06:58 +00:00
ldx BABY_COUNT
lda baby_progress,X
bmi done_baby
cmp FRAME
bne same_baby
lda BABY_COUNT
clc
adc #4 ; point to next
sta BABY_COUNT
; make sprite length smaller after fall
lda FRAME
cmp #41
bcs same_baby
lda #8
sta h1414_smc_len+1
2021-09-13 05:06:58 +00:00
same_baby:
jsr restore_bg_14x14
2021-09-13 05:06:58 +00:00
ldx BABY_COUNT
2021-09-13 01:32:14 +00:00
2021-09-13 05:06:58 +00:00
lda baby_progress+2,X
sta CURSOR_X
lda baby_progress+3,X
sta CURSOR_Y
2021-09-13 01:32:14 +00:00
; save background so we can restore when move
2021-09-13 01:32:14 +00:00
jsr save_bg_14x14
ldx BABY_COUNT
2021-09-13 05:06:58 +00:00
lda baby_progress+1,X
bmi no_draw_baby
tax
2021-09-13 01:32:14 +00:00
lda baby_pointers_l,X
sta INL
lda baby_pointers_h,X
sta INH
jsr hgr_draw_sprite_14x14
2021-09-13 05:06:58 +00:00
no_draw_baby:
lda #150
2021-09-13 05:06:58 +00:00
jsr WAIT
inc FRAME
2021-09-13 01:32:14 +00:00
2021-09-13 05:06:58 +00:00
jmp baby_loop
2021-09-13 01:32:14 +00:00
2021-09-13 05:06:58 +00:00
done_baby:
2021-09-13 01:32:14 +00:00
;
;===========================
; jsr wait_until_keypress
2021-09-07 04:55:37 +00:00
2021-09-11 03:40:04 +00:00
;=========================
;=========================
; jhonka
;=========================
;=========================
2021-09-07 04:55:37 +00:00
jhonka:
lda #<jhonka_lzsa
sta getsrc_smc+1
lda #>jhonka_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
2021-09-11 03:18:21 +00:00
jsr update_top
; draw rectangle
lda #$80 ; color is black2
sta VGI_RCOLOR
2021-09-11 03:40:04 +00:00
lda #44
2021-09-11 03:18:21 +00:00
sta VGI_RX1
lda #58
sta VGI_RY1
2021-09-11 03:40:04 +00:00
lda #180
2021-09-11 03:18:21 +00:00
sta VGI_RXRUN
lda #12
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #<jhonka_string
sta OUTL
lda #>jhonka_string
sta OUTH
jsr disp_put_string
;=================
; animate jhonka
2021-09-17 02:51:55 +00:00
; repeats 12 times
2021-09-15 20:32:43 +00:00
lda #19
sta CURSOR_X
lda #83
sta CURSOR_Y
2021-09-17 02:51:55 +00:00
lda #13
sta BABY_COUNT
2021-09-15 20:32:43 +00:00
animation_loop:
lda #<jhonka1
sta INL
lda #>jhonka1
sta INH
2021-09-17 02:51:55 +00:00
jsr hgr_draw_sprite
2021-09-15 20:32:43 +00:00
2021-09-17 02:51:55 +00:00
lda #2
jsr wait_a_bit
2021-09-15 20:32:43 +00:00
lda #<jhonka2
sta INL
lda #>jhonka2
sta INH
2021-09-17 02:51:55 +00:00
jsr hgr_draw_sprite
2021-09-15 20:32:43 +00:00
2021-09-17 02:51:55 +00:00
lda #2
jsr wait_a_bit
dec BABY_COUNT
2021-09-07 04:55:37 +00:00
2021-09-17 02:51:55 +00:00
bne animation_loop
2021-09-15 20:32:43 +00:00
2021-09-11 03:40:04 +00:00
;========================
;========================
; cottage
;========================
;========================
2021-09-07 04:55:37 +00:00
cottage:
lda #<cottage_lzsa
sta getsrc_smc+1
lda #>cottage_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
2021-09-11 03:18:21 +00:00
jsr update_top
; draw rectangle
lda #$80 ; color is black2
sta VGI_RCOLOR
lda #40
sta VGI_RX1
lda #48
sta VGI_RY1
lda #192
sta VGI_RXRUN
lda #32
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #<cottage_string
sta OUTL
lda #>cottage_string
sta OUTH
jsr disp_put_string
2021-09-11 03:40:04 +00:00
lda #42
jsr wait_a_bit
;====================
; second message
2021-09-07 04:55:37 +00:00
2021-09-11 03:18:21 +00:00
lda #11
sta VGI_RX1
lda #48
sta VGI_RY1
lda #192
sta VGI_RXRUN
lda #32
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #203
sta VGI_RX1
lda #48
sta VGI_RY1
lda #60
sta VGI_RXRUN
lda #32
sta VGI_RYRUN
jsr vgi_simple_rectangle
lda #<cottage_string2
sta OUTL
lda #>cottage_string2
sta OUTH
jsr disp_put_string
2021-09-07 04:55:37 +00:00
2021-09-11 03:40:04 +00:00
lda #42
jsr wait_a_bit
2021-09-07 04:55:37 +00:00
2021-09-11 03:18:21 +00:00
;========================
;========================
; final screen
;========================
;========================
2021-09-07 04:55:37 +00:00
final_screen:
lda #<the_end_lzsa
sta getsrc_smc+1
lda #>the_end_lzsa
sta getsrc_smc+2
lda #$40
jsr decompress_lzsa2_fast
2021-09-11 03:18:21 +00:00
jsr update_top
2021-09-09 12:13:42 +00:00
jsr wait_until_keypress
2021-09-07 04:55:37 +00:00
game_over:
2021-09-11 03:40:04 +00:00
jmp boat
2021-09-07 04:55:37 +00:00
peasant_text:
.byte 25,2,"Peasant's Quest",0
.include "decompress_fast_v2.s"
.include "wait_keypress.s"
.include "hgr_font.s"
.include "draw_box.s"
.include "hgr_rectangle.s"
2021-09-11 03:40:04 +00:00
2021-09-07 04:55:37 +00:00
.include "hgr_1x5_sprite.s"
.include "hgr_partial_save.s"
.include "hgr_input.s"
.include "hgr_tables.s"
.include "hgr_text_box.s"
2021-09-11 03:40:04 +00:00
;.include "draw_peasant.s"
;.include "hgr_save_restore.s"
;.include "clear_bottom.s"
;.include "gr_offsets.s"
;.include "gr_copy.s"
;.include "version.inc"
2021-09-07 04:55:37 +00:00
2021-09-13 01:32:14 +00:00
.include "hgr_14x14_sprite_mask.s"
2021-09-17 02:51:55 +00:00
.include "hgr_sprite.s"
2021-09-13 01:32:14 +00:00
2021-09-07 04:55:37 +00:00
.include "score.s"
.include "wait_a_bit.s"
.include "graphics_end/ending_graphics.inc"
2021-09-09 12:13:42 +00:00
2021-09-13 01:32:14 +00:00
.include "sprites/ending_sprites.inc"
2021-09-09 12:13:42 +00:00
boat_string:
2021-09-17 02:51:55 +00:00
.byte 2,100
2021-09-09 12:13:42 +00:00
.byte " Peasant's Quest",13
.byte "Written by Matt, Jonathan, and Mike",0
waterfall_string:
2021-09-11 03:18:21 +00:00
.byte 7,50
2021-09-09 12:13:42 +00:00
.byte " Programmed by Jonathan",13
.byte "Apple ][ support by Deater",0
jhonka_string:
2021-09-11 03:18:21 +00:00
.byte 7,60
.byte "Graphics by Mike and Matt",0
2021-09-09 12:13:42 +00:00
cottage_string:
2021-09-11 03:18:21 +00:00
.byte 6,50
2021-09-09 12:13:42 +00:00
.byte " Quality Assurance Types:",13
.byte " Neal Stamper,",13
.byte "Don Chapman, and John Radle",0
cottage_string2:
2021-09-11 03:18:21 +00:00
.byte 2,58
2021-09-09 12:13:42 +00:00
.byte "Nice work on winning and everything.",0
2021-09-11 03:18:21 +00:00
2021-09-13 01:32:14 +00:00
baby_pointers_l:
2021-09-13 05:06:58 +00:00
.byte <baby0_sprite ; head left
.byte <baby1_sprite ; head down
.byte <baby2_sprite ; head right
.byte <baby3_sprite ; head up
.byte <baby4_sprite ; splash head
.byte <baby5_sprite ; splash ring
.byte <baby6_sprite ; baby ring
.byte <baby7_sprite ; baby ring2
.byte <baby8_sprite ; baby ring3
.byte <baby9_sprite ; baby high
.byte <baby10_sprite ; baby low
2021-09-13 01:32:14 +00:00
baby_pointers_h:
.byte >baby0_sprite
.byte >baby1_sprite
.byte >baby2_sprite
.byte >baby3_sprite
.byte >baby4_sprite
.byte >baby5_sprite
.byte >baby6_sprite
.byte >baby7_sprite
.byte >baby8_sprite
.byte >baby9_sprite
.byte >baby10_sprite
2021-09-11 03:18:21 +00:00
2021-09-13 05:06:58 +00:00
baby_progress:
.byte 18, $FF, 0, 0 ; nothing at first?
.byte 20, 2, 37, 44 ; frame 28, head right 266,53
.byte 22, 3, 37, 50 ; frame 30, head up 266,53
.byte 24, 0, 37, 56 ; frame 32, head left 266,53
.byte 26, 1, 37, 61 ; frame 34, head down 266,53
.byte 28, 2, 37, 67 ; frame 36, head right, 266,56
.byte 30, 3, 37, 73 ; frame 38, head up, 266,73
.byte 32, 0, 37, 79 ; frame 40, head left, 259,79
.byte 34, 1, 37, 85 ; frame 42, head down, 259,85
.byte 36, 2, 37, 97 ; frame 44, head right, 259,97
.byte 38, 3, 37, 98 ; frame 46, head up, 259, 98
.byte 41, 4, 37, 113 ; frame 48, baby in water, 259, 113
.byte 42, 5, 37, 113 ; frame 51, splash
.byte 56, $FF, 37, 113 ; frame 52, nothing
.byte 58, 5, 34, 120 ; frame 66, splash, 238,120
.byte 60, 6, 34, 120 ; frame 68, head coming out 238,120
.byte 65, 7, 34, 120 ; frame 70, head more out 238,120
.byte 67, 8, 34, 121 ; frame 75, head down, 238,120
.byte 71, 9, 33, 122 ; frame 77, frame 79, moving left same
.byte 75, 10,32, 122 ; frame 81, frame 83, moving left up
.byte 79, 9, 31, 123 ; 12 frames up
.byte 83, 10,30, 123
.byte 87, 9, 29, 124
.byte 91,10,28, 124
.byte 95,9, 27, 125
.byte 99,10,26, 125
.byte 103,9, 25, 126
.byte 107,10,24, 126
.byte 111,9, 23, 127
.byte 115,10,22, 127 ; 154,127 end
.byte 119,9, 21, 128 ; 154,127 end
.byte 123,10,20, 128 ; 154,127 end
2021-09-13 05:06:58 +00:00
.byte $FF,$FF,0,0
2021-09-17 02:51:55 +00:00
boat_progress_l:
.byte <boat0,<boat1
.byte <boat0,<boat1
.byte <boat0,<boat1
.byte <boat2,<boat3,<boat3
.byte <boat4,<boat5,<boat6,<boat7,<boat7
boat_progress_h:
.byte >boat0,>boat1
.byte >boat0,>boat1
.byte >boat0,>boat1
.byte >boat2,>boat3,>boat3
.byte >boat4,>boat5,>boat6,>boat7,>boat7
2021-09-11 03:18:21 +00:00
update_top:
; put peasant text
lda #<peasant_text
sta OUTL
lda #>peasant_text
sta OUTH
jsr hgr_put_string
; put score
jsr print_score
rts