2023-06-02 20:37:01 +00:00
|
|
|
; Strongbad Zone
|
|
|
|
;
|
2023-06-02 19:40:42 +00:00
|
|
|
; Yet Another HR project
|
|
|
|
;
|
|
|
|
; by deater (Vince Weaver) <vince@deater.net>
|
|
|
|
|
|
|
|
|
|
|
|
.include "zp.inc"
|
|
|
|
.include "hardware.inc"
|
|
|
|
|
2023-06-03 22:37:14 +00:00
|
|
|
div7_table = $400
|
|
|
|
mod7_table = $500
|
|
|
|
hposn_high = $600
|
|
|
|
hposn_low = $700
|
2023-06-02 19:40:42 +00:00
|
|
|
|
2023-06-03 22:37:14 +00:00
|
|
|
|
|
|
|
strongbadzone_start:
|
2023-06-02 19:40:42 +00:00
|
|
|
|
|
|
|
;===================
|
|
|
|
; set graphics mode
|
|
|
|
;===================
|
|
|
|
jsr HOME
|
|
|
|
|
|
|
|
bit HIRES
|
|
|
|
bit FULLGR
|
|
|
|
bit SET_GR
|
|
|
|
bit PAGE1
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
;====================
|
|
|
|
; set up tables
|
|
|
|
;====================
|
2023-06-02 19:40:42 +00:00
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
lda #$20
|
|
|
|
sta HGR_PAGE
|
|
|
|
jsr hgr_make_tables
|
2023-06-02 19:40:42 +00:00
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
|
|
|
|
;==========================
|
|
|
|
; Load Sound
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
lda SOUND_STATUS
|
|
|
|
and #SOUND_IN_LC
|
|
|
|
beq done_load_sound
|
|
|
|
|
|
|
|
; read/write RAM, use $d000 bank1
|
|
|
|
bit $C083
|
|
|
|
bit $C083
|
|
|
|
|
|
|
|
lda #<sound_data
|
|
|
|
sta ZX0_src
|
|
|
|
lda #>sound_data
|
|
|
|
sta ZX0_src+1
|
|
|
|
|
|
|
|
lda #$D0
|
|
|
|
|
|
|
|
jsr full_decomp
|
|
|
|
|
|
|
|
; read ROM/no-write
|
|
|
|
bit $C082
|
|
|
|
|
|
|
|
|
|
|
|
done_load_sound:
|
2023-06-02 19:40:42 +00:00
|
|
|
;==========================
|
|
|
|
; Load Title
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
load_title:
|
|
|
|
lda #<title_data
|
|
|
|
sta ZX0_src
|
|
|
|
lda #>title_data
|
|
|
|
sta ZX0_src+1
|
|
|
|
|
|
|
|
lda #$20
|
|
|
|
|
|
|
|
jsr full_decomp
|
|
|
|
|
2023-06-02 21:07:04 +00:00
|
|
|
; load to page2 for color cycle
|
|
|
|
|
|
|
|
lda #<title_data
|
|
|
|
sta ZX0_src
|
|
|
|
lda #>title_data
|
|
|
|
sta ZX0_src+1
|
|
|
|
|
|
|
|
lda #$40
|
|
|
|
|
|
|
|
jsr full_decomp
|
|
|
|
|
|
|
|
title_cycle_loop:
|
|
|
|
|
|
|
|
jsr cycle_colors
|
|
|
|
inc FRAME
|
|
|
|
|
|
|
|
|
|
|
|
lda KEYPRESS
|
|
|
|
bpl title_cycle_loop
|
|
|
|
|
|
|
|
bit KEYRESET
|
|
|
|
|
2023-06-02 19:40:42 +00:00
|
|
|
|
|
|
|
;===================
|
2023-06-02 20:37:01 +00:00
|
|
|
; setup game
|
2023-06-02 19:40:42 +00:00
|
|
|
;===================
|
|
|
|
|
|
|
|
;==========================
|
2023-06-02 20:37:01 +00:00
|
|
|
; Load Background
|
2023-06-02 19:40:42 +00:00
|
|
|
;===========================
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
load_background:
|
2023-06-02 19:40:42 +00:00
|
|
|
|
|
|
|
; size in ldsizeh:ldsizel (f1/f0)
|
|
|
|
|
|
|
|
lda #<comp_data
|
|
|
|
sta ZX0_src
|
|
|
|
lda #>comp_data
|
|
|
|
sta ZX0_src+1
|
|
|
|
|
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
lda #$A0
|
2023-06-02 19:40:42 +00:00
|
|
|
|
|
|
|
|
|
|
|
jsr full_decomp
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
lda #16
|
|
|
|
sta STRONGBAD_X
|
|
|
|
sta PLAYER_X
|
|
|
|
|
2023-06-03 16:48:37 +00:00
|
|
|
lda #1
|
|
|
|
sta STRONGBAD_DIR
|
|
|
|
|
2023-06-04 04:46:01 +00:00
|
|
|
lda #SHIELD_DOWN
|
|
|
|
sta SHIELD_POSITION
|
2023-06-04 04:50:59 +00:00
|
|
|
sta SHIELD_COUNT
|
2023-06-04 04:46:01 +00:00
|
|
|
|
2023-06-05 05:48:45 +00:00
|
|
|
lda #20
|
|
|
|
sta BULLET_X
|
|
|
|
lda #90
|
|
|
|
sta BULLET_Y
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
;==========================
|
|
|
|
; main loop
|
|
|
|
;===========================
|
|
|
|
main_loop:
|
|
|
|
|
2023-06-03 22:37:14 +00:00
|
|
|
;==========
|
|
|
|
; flip page
|
|
|
|
;==========
|
|
|
|
|
|
|
|
lda DRAW_PAGE
|
|
|
|
beq draw_page2
|
|
|
|
draw_page1:
|
|
|
|
bit PAGE2
|
|
|
|
lda #0
|
|
|
|
|
|
|
|
beq done_flip
|
|
|
|
|
|
|
|
draw_page2:
|
|
|
|
bit PAGE1
|
|
|
|
lda #$20
|
|
|
|
|
|
|
|
done_flip:
|
|
|
|
sta DRAW_PAGE
|
|
|
|
|
|
|
|
;========================
|
2023-06-04 04:46:01 +00:00
|
|
|
; copy over background
|
2023-06-03 22:37:14 +00:00
|
|
|
;========================
|
|
|
|
|
|
|
|
jsr hgr_copy
|
2023-06-03 16:48:37 +00:00
|
|
|
|
|
|
|
|
2023-06-03 22:37:14 +00:00
|
|
|
inc FRAME
|
|
|
|
|
2023-06-04 04:50:59 +00:00
|
|
|
;==========================
|
|
|
|
; adjust shield
|
|
|
|
;==========================
|
|
|
|
|
|
|
|
lda SHIELD_COUNT
|
|
|
|
beq done_shield_count
|
|
|
|
|
|
|
|
dec SHIELD_COUNT
|
|
|
|
bne done_shield_count
|
|
|
|
|
|
|
|
lda #SHIELD_DOWN ; put shield down if timeout
|
|
|
|
sta SHIELD_POSITION
|
|
|
|
|
|
|
|
done_shield_count:
|
|
|
|
|
2023-06-03 16:48:37 +00:00
|
|
|
;===========================
|
|
|
|
; move head
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
lda FRAME
|
|
|
|
and #$3
|
|
|
|
bne no_move_head
|
|
|
|
|
|
|
|
lda STRONGBAD_X
|
2023-06-03 22:37:14 +00:00
|
|
|
cmp #21
|
2023-06-03 16:48:37 +00:00
|
|
|
bcs reverse_head_dir
|
|
|
|
cmp #12
|
|
|
|
bcs no_reverse_head_dir
|
|
|
|
reverse_head_dir:
|
|
|
|
lda STRONGBAD_DIR
|
|
|
|
eor #$FF
|
|
|
|
sta STRONGBAD_DIR
|
|
|
|
inc STRONGBAD_DIR
|
|
|
|
|
|
|
|
no_reverse_head_dir:
|
|
|
|
|
|
|
|
clc
|
|
|
|
lda STRONGBAD_X
|
|
|
|
adc STRONGBAD_DIR
|
|
|
|
sta STRONGBAD_X
|
|
|
|
|
|
|
|
no_move_head:
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
;==========================
|
|
|
|
; draw head
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
lda #<head_sprite
|
|
|
|
sta INL
|
|
|
|
lda #>head_sprite
|
|
|
|
sta INH
|
|
|
|
lda STRONGBAD_X
|
|
|
|
sta SPRITE_X
|
|
|
|
lda #36
|
|
|
|
sta SPRITE_Y
|
2023-06-03 20:00:05 +00:00
|
|
|
jsr hgr_draw_sprite_big
|
2023-06-02 20:37:01 +00:00
|
|
|
|
2023-06-05 05:48:45 +00:00
|
|
|
;==========================
|
|
|
|
; move bullet
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
inc BULLET_Y
|
|
|
|
lda BULLET_Y
|
|
|
|
cmp #150
|
|
|
|
bcc bullet_still_good
|
|
|
|
|
|
|
|
; new bullet position
|
|
|
|
; FIXME: better
|
|
|
|
|
|
|
|
lda #90
|
|
|
|
sta BULLET_Y
|
|
|
|
bullet_still_good:
|
|
|
|
|
|
|
|
;==========================
|
|
|
|
; draw bullet
|
|
|
|
;===========================
|
|
|
|
|
|
|
|
lda #<bullet0_sprite
|
|
|
|
sta INL
|
|
|
|
lda #>bullet0_sprite
|
|
|
|
sta INH
|
|
|
|
lda BULLET_X
|
|
|
|
sta SPRITE_X
|
|
|
|
lda BULLET_Y
|
|
|
|
sta SPRITE_Y
|
|
|
|
jsr hgr_draw_sprite_big
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
;==========================
|
|
|
|
; draw player
|
|
|
|
;===========================
|
|
|
|
|
2023-06-04 04:46:01 +00:00
|
|
|
ldx SHIELD_POSITION
|
|
|
|
lda shield_sprites_l,X
|
2023-06-02 20:37:01 +00:00
|
|
|
sta INL
|
2023-06-04 04:46:01 +00:00
|
|
|
lda shield_sprites_h,X
|
2023-06-02 20:37:01 +00:00
|
|
|
sta INH
|
|
|
|
lda PLAYER_X
|
|
|
|
sta SPRITE_X
|
|
|
|
lda #138
|
|
|
|
sta SPRITE_Y
|
2023-06-03 20:00:05 +00:00
|
|
|
jsr hgr_draw_sprite_big
|
2023-06-02 20:37:01 +00:00
|
|
|
|
|
|
|
check_keypress:
|
|
|
|
lda KEYPRESS
|
2023-06-03 16:48:37 +00:00
|
|
|
bpl done_keyboard_check
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
bit KEYRESET ; clear the keyboard strobe
|
|
|
|
|
|
|
|
; clear high bit
|
|
|
|
and #$7f
|
2023-06-02 19:40:42 +00:00
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
; FIXME: adjust for lowercase too
|
|
|
|
cmp #'Q'
|
|
|
|
beq done_game
|
|
|
|
|
|
|
|
cmp #27 ; escape
|
|
|
|
beq done_game
|
|
|
|
|
|
|
|
cmp #'A' ; shield left
|
2023-06-04 04:46:01 +00:00
|
|
|
beq shield_left
|
2023-06-02 20:37:01 +00:00
|
|
|
cmp #'S' ; shield center
|
2023-06-04 04:46:01 +00:00
|
|
|
beq shield_center
|
2023-06-02 20:37:01 +00:00
|
|
|
cmp #'D' ; shield right
|
2023-06-04 04:46:01 +00:00
|
|
|
beq shield_right
|
2023-06-02 20:37:01 +00:00
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
cmp #'X'
|
|
|
|
beq asplode_asplode
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
cmp #8 ; left
|
|
|
|
beq move_left
|
|
|
|
|
|
|
|
cmp #$15
|
|
|
|
beq move_right ; right
|
|
|
|
|
|
|
|
|
|
|
|
done_keyboard_check:
|
2023-06-03 16:48:37 +00:00
|
|
|
jmp main_loop
|
2023-06-02 20:37:01 +00:00
|
|
|
|
|
|
|
move_left:
|
2023-06-03 22:37:14 +00:00
|
|
|
lda PLAYER_X
|
|
|
|
beq no_more_left
|
2023-06-02 20:37:01 +00:00
|
|
|
dec PLAYER_X
|
2023-06-03 22:37:14 +00:00
|
|
|
no_more_left:
|
2023-06-02 20:37:01 +00:00
|
|
|
jmp main_loop
|
|
|
|
|
|
|
|
move_right:
|
2023-06-03 22:37:14 +00:00
|
|
|
lda PLAYER_X
|
2023-06-04 04:46:01 +00:00
|
|
|
cmp #28 ; bge
|
2023-06-03 22:37:14 +00:00
|
|
|
bcs no_more_right
|
2023-06-02 20:37:01 +00:00
|
|
|
inc PLAYER_X
|
2023-06-03 22:37:14 +00:00
|
|
|
no_more_right:
|
2023-06-02 20:37:01 +00:00
|
|
|
jmp main_loop
|
|
|
|
|
2023-06-04 04:46:01 +00:00
|
|
|
shield_left:
|
|
|
|
lda #SHIELD_UP_LEFT
|
|
|
|
bne adjust_shield
|
|
|
|
shield_center:
|
|
|
|
lda #SHIELD_UP_CENTER
|
|
|
|
bne adjust_shield
|
|
|
|
shield_right:
|
|
|
|
lda #SHIELD_UP_RIGHT
|
|
|
|
adjust_shield:
|
|
|
|
sta SHIELD_POSITION
|
2023-06-04 04:50:59 +00:00
|
|
|
lda #5
|
|
|
|
sta SHIELD_COUNT
|
2023-06-04 04:46:01 +00:00
|
|
|
jmp main_loop
|
2023-06-02 20:37:01 +00:00
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
asplode_asplode:
|
2023-06-02 20:37:01 +00:00
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
jsr play_asplode
|
|
|
|
|
|
|
|
jmp main_loop
|
2023-06-02 20:37:01 +00:00
|
|
|
|
|
|
|
;==========================
|
|
|
|
; done game
|
|
|
|
;==========================
|
|
|
|
|
|
|
|
done_game:
|
2023-06-02 19:40:42 +00:00
|
|
|
lda #0
|
|
|
|
sta WHICH_LOAD
|
|
|
|
rts
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
wait_until_keypress:
|
|
|
|
lda KEYPRESS ; 4
|
|
|
|
bpl wait_until_keypress ; 3
|
|
|
|
bit KEYRESET ; clear the keyboard buffer
|
|
|
|
rts
|
|
|
|
|
2023-06-02 20:37:01 +00:00
|
|
|
.include "hgr_tables.s"
|
2023-06-02 19:40:42 +00:00
|
|
|
.include "zx02_optim.s"
|
2023-06-02 20:37:01 +00:00
|
|
|
.include "hgr_sprite_big.s"
|
2023-06-02 21:07:04 +00:00
|
|
|
.include "cycle_colors.s"
|
2023-06-03 22:37:14 +00:00
|
|
|
.include "hgr_copy_fast.s"
|
2023-06-05 20:29:18 +00:00
|
|
|
.include "audio.s"
|
|
|
|
.include "play_asplode.s"
|
2023-06-02 20:37:01 +00:00
|
|
|
|
|
|
|
.include "asplode_graphics/sb_sprites.inc"
|
2023-06-02 19:40:42 +00:00
|
|
|
|
|
|
|
title_data:
|
|
|
|
.incbin "asplode_graphics/sb_title.hgr.zx02"
|
|
|
|
|
|
|
|
comp_data:
|
|
|
|
.incbin "asplode_graphics/sb_zone.hgr.zx02"
|
|
|
|
|
2023-06-05 20:29:18 +00:00
|
|
|
sound_data:
|
|
|
|
.incbin "asplode_sound/asplode.btc.zx02"
|
2023-06-02 19:40:42 +00:00
|
|
|
|
2023-06-04 04:46:01 +00:00
|
|
|
shield_sprites_l:
|
|
|
|
.byte <player_sprite,<shield_left_sprite
|
|
|
|
.byte <shield_center_sprite,<shield_right_sprite
|
|
|
|
|
|
|
|
shield_sprites_h:
|
|
|
|
.byte >player_sprite,>shield_left_sprite
|
|
|
|
.byte >shield_center_sprite,>shield_right_sprite
|