; Strongbad Zone -- Back Off Ladies section ; ; by popular demand. Too lazy to try to fit it in with the ; main program so it gets loaded separately ; ; Yet Another HSR project ; ; by deater (Vince Weaver) .include "zp.inc" .include "hardware.inc" div7_table = $400 mod7_table = $500 hposn_high = $600 hposn_low = $700 back_off_start: ;=================== ; set graphics mode ;=================== ; assume already in graphics mode ;==================== ; set up tables ;==================== ; assume tables already there ;========================== ; 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+1 lda #$D0 jsr full_decomp ; read ROM/no-write bit $C082 done_load_sound: ;================= ; Load Background ;================= ; this is tricky as there's not enough room ; so we are over-writing stuff carefully load_backgrounds: lda #bg1_data sta ZX0_src+1 lda #$A0 jsr full_decomp ;=================== ; set up variables ;=================== ; inline this? jsr do_back_off ;========================== ; done game ;========================== done_game: bit KEYRESET jsr wait_until_keypress lda #$A0 jsr hgr_copy jsr flip_page lda #0 sta WHICH_LOAD rts wait_until_keypress: lda KEYPRESS ; 4 bpl wait_until_keypress ; 3 bit KEYRESET ; clear the keyboard buffer rts ;============================== ; do the backoff routine ;============================== ; should move head to center do_back_off: lda #0 sta FRAME lda #16 sta STRONGBAD_X back_off_loop: ;=================== ; copy background ;=================== lda #$a0 jsr hgr_copy ;========================== ; draw new sprite ;========================== ldx FRAME lda asplode_sprite_l,X sta INL lda asplode_sprite_h,X sta INH use_hardcoded_x: lda asplode_sprite_x,X sta SPRITE_X lda asplode_sprite_y,X sta SPRITE_Y jsr hgr_draw_sprite_big ldx FRAME cpx #6 bcc done_extra_sprites ;========================== ; draw back ;========================== lda #back_sprite sta INH lda #11 sta SPRITE_X lda #133 sta SPRITE_Y jsr hgr_draw_sprite_big ldx FRAME cpx #12 bcc done_extra_sprites ;========================== ; draw off ;========================== lda #off_sprite sta INH lda #18 sta SPRITE_X lda #133 sta SPRITE_Y jsr hgr_draw_sprite_big done_extra_sprites: jsr flip_page ldx FRAME sound_check_back: cpx #5 bne sound_check_off ; play sound ldy #0 beq do_play_asplode ; bra sound_check_off: cpx #11 bne sound_check_baby ldy #1 bne do_play_asplode sound_check_baby: cpx #17 bne sound_check_done ldy #2 do_play_asplode: jsr play_back_off sound_check_done: inc FRAME lda FRAME cmp #18 bcs done_back_off jmp back_off_loop done_back_off: lda #20 jsr long_wait ; reset things bit KEYRESET ; clear any keypresses during asplode rts asplode_sprite_l: ; back .byte back_sm_sprite .byte >back_sm_sprite .byte >back_med_sprite .byte >back_med_sprite .byte >back_sprite .byte >back_sprite ; off .byte >off_sm_sprite .byte >off_sm_sprite .byte >off_med_sprite .byte >off_med_sprite .byte >off_sprite .byte >off_sprite ; baby .byte >baby_sm_sprite .byte >baby_sm_sprite .byte >baby_med_sprite .byte >baby_med_sprite .byte >baby_sprite .byte >baby_sprite asplode_sprite_x: ; back .byte 18 .byte 17 .byte 15 .byte 14 .byte 12 .byte 11 ; off .byte 18 .byte 18 .byte 18 .byte 18 .byte 18 .byte 18 ; baby .byte 18 .byte 19 .byte 20 .byte 21 ; .byte 23 .byte 24 asplode_sprite_y: ; back .byte 80 .byte 90 .byte 100 .byte 111 .byte 122 .byte 133 ; off .byte 80 .byte 90 .byte 100 .byte 111 .byte 122 .byte 133 ; baby .byte 80 .byte 90 .byte 100 .byte 111 .byte 122 .byte 133 long_wait: ldx #10 long_wait_loop: lda #255 jsr WAIT dex bne long_wait_loop rts ;========== ; flip page ;========== 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 rts .include "hgr_sprite_big.s" .include "hgr_copy_fast.s" .include "audio.s" .include "play_back_off.s" .include "asplode_graphics/bob_sprites.inc" bg1_data: .incbin "asplode_graphics/bob_bg.hgr.zx02" sound_data: .incbin "asplode_sound/back_off.btc.zx02" .include "zx02_optim.s"