;################################################################## ; ; Phoenix-Z80 (Player bullet code) ; ; Programmed by Patrick Davidson (pad@calc.org) ; ; Copyright 2001 by Patrick Davidson. This software may be freely ; modified and/or copied with no restrictions. There is no warranty. ; ; This file was last updated April 1, 2001. ; ;################################################################## ;############## Player bullet routine ; ; Calls the code specified by the bullet 'type'. The 'type', which must ; be a multiple of 3, is an index into the table of jumps for bullet code. ; Bullet routines should move the bullet and draw its image. They are ; called with HL pointing to the bullet entry, and can change all registers. player_bullets: ld hl,pb_array ld b,pb_num loop_player_bullets: ld a,(hl) ld (do_player_bullet+1),a push hl push bc call do_player_bullet pop bc pop hl ld de,pb_size add hl,de djnz loop_player_bullets ret do_player_bullet: jr point_to_pbullet_code point_to_pbullet_code: ;############## Bullet routine table starts here no_pbullet: ld (hl),0 ret jp enhanced_bullet ;3 jp standard_bullet ;6 jp double_left ;9 jp double_right ;12 jp triple_right ;15 jp triple_left ;18 jp triple_center ;21 jp quad_left ;24 jp quad_right ;27 jp quad_goup ;30 jp super_shot ;33 jp swing_left ;36 ;39 ;############## Swinging right bullet swing_right: push hl inc hl inc hl dec (hl) jr z,destroy_bullet_stack jr swing_common ;############## Swinging left bullet swing_left: push hl inc hl inc hl inc (hl) ld a,124 cp (hl) jr z,destroy_bullet_stack swing_common: ld de,6 add hl,de dec (hl) ld a,(hl) sra a pop hl ld bc,img_quad_bullet jr common_bullet destroy_bullet_stack: pop hl ld (hl),0 ret ;############## Super-powered bullet super_shot: ld a,-5 ld bc,img_player_bullet_5 jr common_bullet ;############## Companion ship's weapons companion_shots: quad_goup: ld a,-4 ld bc,img_quad_bullet jr common_bullet ;############## Quadruple shot right quad_right: ld a,(game_timer) rrca jr c,quad_goup inc hl inc hl inc (hl) ld a,(hl) cp 124 jr quad_x_updated ;############## Quadruple shot left quad_left: ld a,(game_timer) rrca jr c,quad_goup inc hl inc hl dec (hl) ld a,(hl) or a quad_x_updated: ld d,a ld a,-4 ld bc,img_quad_bullet jr nz,common_after_x_done jr destroy_bullet_x ;############## Triple shot center triple_center: ld a,-5 ld bc,img_player_bullet_3 jr common_bullet ;############## Double shot right side double_right: ld a,-4 ld bc,img_player_bullet_2r jr common_bullet ;############## Double shot left side double_left: ld a,-4 ld bc,img_player_bullet_2l jr common_bullet ;############## Standard bullet standard_bullet: ld bc,img_player_bullet_0 jr common_bullet_2 ;############## Enhanced bullet enhanced_bullet: ld bc,img_player_bullet_1 common_bullet_2: ld a,-2 common_bullet: inc hl inc hl ld d,(hl) common_after_x_done: inc hl inc hl add a,(hl) cp 24 jr c,destroy_bullet ld e,a ld (hl),e push bc pop hl jp drw_spr destroy_bullet: ld bc,-4 add hl,bc ld (hl),0 ret ;############## Triple shot right side triple_right: inc hl inc hl ld d,(hl) dec d jr z,destroy_bullet_x dec d jr z,destroy_bullet_x common_triple: ld (hl),d ld a,-4 ld bc,img_player_bullet_3 jr common_after_x_done destroy_bullet_x: dec hl dec hl ld (hl),0 ret ;############## Triple shot left side triple_left: inc hl inc hl ld a,(hl) add a,2 ld d,a cp 124 jr nc,destroy_bullet_x jr common_triple