;############## Calcuzap by Patrick Davidson - enemies moving randomly ; Escape pod enemy, always spins but with smaller sprite size than other spinners escape_pod: call enemy_shoot_maybe inc hl push hl ld hl,img_escape_pod ld de,202 ld a,(frame_count) rra and 3 jr z,first_frame_e ld b,a loop_spin_e: add hl,de djnz loop_spin_e first_frame_e: ex de,hl pop hl inc hl inc hl #ifdef TI84CE ld (hl),de #else ld (hl),e inc hl ld (hl),d dec hl #endif dec hl dec hl push hl jr rampage_after_spin ; Plain rampaging enemy rampaging_enemy: ld a,(flag_spin) cp 130 jr z,rampage_vicious call enemy_shoot_maybe jr rampage_common rampage_vicious: call heavy_shoot_maybe rampage_common: inc hl push hl call maybe_spin rampage_after_spin: ld d,(hl) ; D = X inc hl ld a,(hl) ; A = Y inc hl inc hl #ifdef TI84CE inc hl #endif inc hl ; HL -> e_misc cp 15 jr c,rampage_force_down cp 99 ld a,d jr nc,rampage_force_up cp 48 jr z,rampage_force_right cp 48+160-7 jr z,rampage_force_left ld a,(hl) #ifdef TI84CE ld (do_rampage+1),a do_rampage: jr rampage_direction_table #else ld de,rampage_direction_table dispatch_ADE: ex de,hl ld b,0 ld c,a add hl,bc push hl ex de,hl ret #endif rampage_direction_table: jr rampage_downright ;0 jr rampage_upright ;2 jr rampage_downleft ;4 ;6 rampage_upleft_set: ld (hl),6 rampage_upleft: pop hl ld bc,$FFFE jp move_up_left rampage_force_left: push hl call get_rand pop hl add a,a jr c,rampage_upleft_set jr rampage_downleft_set rampage_force_down: ld a,d cp 48 jr z,rampage_downright_set cp 48+160-7 jr z,rampage_downleft_set push hl call get_rand pop hl add a,a jr c,rampage_downright_set rampage_downleft_set: ld (hl),4 rampage_downleft: pop hl ld bc,$FF02 jp move_down_left rampage_force_right: push hl call get_rand pop hl add a,a jr c,rampage_upright_set rampage_downright_set: ld (hl),0 rampage_downright: pop hl ld bc,$102 jp move_down_right rampage_force_up: cp 48 jr z,rampage_upright_set cp 48+160-7 jr z,rampage_upleft_set push hl call get_rand pop hl add a,a jr c,rampage_upleft_set rampage_upright_set: ld (hl),2 rampage_upright: pop hl ld bc,$1FE jp move_up_right triangle_left: call triangle_common ld b,-1 jp nz,move_up_left jp move_down_left triangle_right: call triangle_common ld b,1 jp nz,move_up_right jp move_down_right triangle_common: push hl call diagonal_shoot_maybe pop hl inc hl ; HL -> X ld a,(hl) cp 48+160-7-2 jr c,no_right_edge_triangle dec hl ld (hl),27 inc hl no_right_edge_triangle: cp 50 jr nc,no_left_edge_triangle dec hl ld (hl),24 inc hl no_left_edge_triangle: push hl inc hl ld a,(hl) ; A = Y coordinate inc hl inc hl inc hl #ifdef TI84CE inc hl #endif cp 14 jr nc,no_top_triangle push hl call get_rand pop hl rla and 1 inc a ld (hl),a jr no_bottom_triangle no_top_triangle: cp 92 jr c,no_bottom_triangle push hl call get_rand pop hl rla and 1 sub 2 ld (hl),a no_bottom_triangle: ld c,(hl) ; C = Y velocity pop hl ; HL -> X bit 7,c ret