From 840813fdb6f20c24e08d734c29f3afbb13d32db8 Mon Sep 17 00:00:00 2001 From: Mischa Poslawsky Date: Sun, 18 Jul 1999 00:00:00 +0200 Subject: [PATCH] version 0.2: fire bullets, exploding enemies + ability to fire bullets (F1). Enemies disappear on impact * enemies explode instead of disappearing --- nemesis.z80 | 358 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 274 insertions(+), 84 deletions(-) diff --git a/nemesis.z80 b/nemesis.z80 index 79042be..fc84fb3 100644 --- a/nemesis.z80 +++ b/nemesis.z80 @@ -1,4 +1,4 @@ - .include "asm86.h" + .include "asm86.h" .include "ti86asm.inc" .include "ti86abs.inc" .org _asm_exec_ram @@ -10,6 +10,9 @@ Title: .db "Nemesis v0.1.718 by Shiar",0 Start: jr init +just_fired = $c0f9 ;byte +temp1 = $c100 ;word + ;-------------------- init ---------------------------------------------------- init: @@ -87,6 +90,8 @@ check_exitkey: game_stuff: call Level_event ;insert enemies call Handle_Ship ;move you + call Fire_bullet ;check for fire + call Handle_bullets call Handle_enemies ;move enemies call Enemies_hit ;check for collision with enemies @@ -184,7 +189,7 @@ display_common: ;you_not_normal: ; ld hl,(score) ; ld de,-6 -; add hl,de +; add hl,de ; ld a,255 ; cp h ; jr nz,_ok_ @@ -198,19 +203,155 @@ display_common: ; xor 14 ; ld hl,x-1 -;explosion_stuff: -; rra -; add a,a -; add a,a -; add a,a -; ld c,a -; ld b,0 -; ld ix,spr_explosion -; add ix,bc -; inc hl -; ld d,(hl) -; inc hl -; jr display_common +explosion_stuff: + rra + add a,a + add a,a + add a,a + ld c,a + ld b,0 + ld ix,spr_explosion + add ix,bc + inc hl + ld d,(hl) + inc hl + jr display_common + +;------------------------- fire bullet ---------------------------------------- + +Fire_bullet: + ld a,%00111111 + out (1),a +; ld a,(your_status) +; or a +; ret nz + ld hl,just_fired + nop + in a,(1) + bit 4,a + jr z,fire + ld (hl),0 ;not fired + ret + +fire: ld a,(hl) + or a ;can't fire when 1 + ret nz + ld (hl),1 ;just fired + + ld hl,ybullets + ld de,3 + ld b,10 + +find_ybullet: + ld a,(hl) + or a + jr z,found_ybullet ;0 = no bullet here + add hl,de + djnz find_ybullet ;look next bullet + ret + +found_ybullet: + ld (hl),1 ;use bullet + inc hl + ld a,(x) + add a,3 + ld (hl),a ;set x + ld a,(y) + add a,2 + inc hl + ld (hl),a ;set y + ret + +;------------------------ handle bullets -------------------------------------- + +remove_bullet: + dec hl + ld (hl),0 ;dump this bullet! + ret + +Handle_bullets: + ld hl,ybullets + ld b,10 +scan_your_bullets: + push bc + push hl + ld (temp1),hl + ld a,(hl) + inc hl + dec a + call z,bullet_type1 + pop hl + pop bc + ld de,3 + add hl,de + djnz scan_your_bullets + ret + +bullet_type1: + ld a,(hl) ;d = X + inc a ;move right + cp $5a ;off screen? + jr z,remove_bullet + inc a ;move right + cp $5a ;off screen? + jr z,remove_bullet + ld (hl),a ;save new pos. + ld d,a + inc hl + ld e,(hl) ;e = Y + ld ix,spr_bullet01 + push de + call drw_spr ;display bullet + pop de + ld b,20 + ld hl,enemies + +hit_enemies: ;Hits with normal enemies + push hl + + ld a,(hl) + dec a + jr nz,nohit ;no hit when enemy_occ <> 1 + + inc hl + inc hl + ld a,(hl) ;check x + sub d + add a,5 + jp m,nohit + cp 8 + jr nc,nohit + + inc hl + ld a,(hl) ;check y + sub e + add a,5 + jp m,nohit + cp 10 + jr nc,nohit + + xor a + push hl + ld hl,(temp1) + ld (hl),a ;remove bullet + pop hl + + dec hl + dec hl + ld (hl),a ;explosionFrame 0 + dec hl + ld (hl),2 ;set to explode + + pop hl + ret + +nohit: pop hl + inc hl + inc hl + inc hl + inc hl + djnz hit_enemies ;check next enemy + ret ;--------------------------- level events ------------------------------------- @@ -222,7 +363,7 @@ Level_event: ret nz do_event: - ld hl,(curevent) ;+1 + ld hl,(curevent) ld de,enemies-4 chk_noenemy: inc de @@ -234,20 +375,20 @@ chk_noenemy: jr nz,chk_noenemy ld a,$01 - ld (de),a ;occ + ld (de),a ;occ inc de ld a,(hl) - ld (de),a ;type + ld (de),a ;type inc de ld a,$5a - ld (de),a ;x + ld (de),a ;x inc de - inc hl ;+2 + inc hl ld a,(hl) - ld (de),a ;y + ld (de),a ;y inc hl ;+0 ld a,(hl) @@ -255,7 +396,7 @@ chk_noenemy: jp z,Next_level ld (nextevent),a - inc hl ;+1 + inc hl ld (curevent),hl ret @@ -263,14 +404,20 @@ chk_noenemy: Handle_enemies: ld hl,enemies + ld b,20 handle_enemy: push hl + push bc ld a,(hl) - cp 1 - jr nz,next_enemy + dec a + jr z,normal_enemy ;occ "normal" 1 + dec a + jr z,exploding_enemy ;occ "exploding" 2 + jr next_enemy ;occ "no enemy" 0 +normal_enemy: inc hl ld c,(hl) ;type inc hl @@ -297,21 +444,34 @@ handle_enemy: remove_enemy: dec hl dec hl +enemy_gone: dec hl - ld (hl),$0000 + ld (hl),$0000 ;bye bye enemy next_enemy: + pop bc pop hl inc hl inc hl inc hl inc hl - ld a,(hl) - cp $ff - jr nz,handle_enemy - + djnz handle_enemy ret +exploding_enemy: + inc hl + push hl + ld a,(hl) + call explosion_stuff ;display explosion + pop hl + + ld a,(hl) + cp 15 + jr z,enemy_gone ;remove when at last frame + inc a + ld (hl),a ;next frame + jr next_enemy + ;--------------------------- check collision ---------------------------------- Enemies_hit: @@ -349,7 +509,7 @@ check_next: dec hl dec hl - ld (hl),0 + ld (hl),0 ;explosionFrame 0 dec hl ld (hl),2 ;set to explode @@ -452,46 +612,54 @@ up_data: .db "PAD98",0 ;------------------------------- sprites -------------------------------------- spr_ship: - .db 7,7 - .db %11111000 - .db %11000000 - .db %11111100 - .db %11111110 - .db %11111100 - .db %11000000 - .db %11111000 + .db 7,7 ;your ship: + .db %01110000 ; ███ + .db %11100000 ; ███ + .db %11111100 ; ██████ + .db %11110010 ; ████ █ + .db %11111100 ; ██████ + .db %11100000 ; ███ + .db %01110000 ; ███ spr_bullet01: - .db 5,3 - .db %11110000 - .db %11111000 - .db %11110000 + .db 5,3 ;your bullets + .db %11110000 ; ████ + .db %11111000 ; █████ + .db %11110000 ; ████ spr_bullet02: - .db 3,3 - .db %01000000 - .db %11100000 - .db %01000000 + .db 3,3 ;enemy bullets + .db %01000000 ; █ + .db %11100000 ; ███ + .db %01000000 ; █ spr_enemy01: - .db 6,6 - .db %00111100 - .db %01110000 - .db %11110000 - .db %11110000 - .db %01110000 - .db %00111100 + .db 6,6 ;enemy type one + .db %00111100 ; ████ + .db %01110000 ; ███ + .db %11110000 ; ████ + .db %11110000 ; ████ + .db %01110000 ; ███ + .db %00111100 ; ████ spr_enemy02: - .db 6,6 - .db %01111100 - .db %11110000 - .db %10111000 - .db %10111000 - .db %11110000 - .db %01111100 + .db 6,6 ;enemy type two + .db %01111100 ; █████ + .db %11110000 ; ████ + .db %10111000 ; █ ███ + .db %10111000 ; █ ███ + .db %11110000 ; ████ + .db %01111100 ; █████ +spr_enemy03: + .db 6,6 ;enemy type three + .db %00111000 ; ███ + .db %01111100 ; █████ + .db %11111000 ; █████ + .db %11111000 ; █████ + .db %01111100 ; █████ + .db %00111000 ; ███ spr_explosion: - .db 8,6 + .db 8,6 ;1 .db %00000000 .db %00011100 .db %00111110 @@ -499,7 +667,7 @@ spr_explosion: .db %00111000 .db %00000000 - .db 8,6 + .db 8,6 ;2 .db %00110000 .db %01001110 .db %10111110 @@ -507,7 +675,7 @@ spr_explosion: .db %00111000 .db %00011010 - .db 8,6 + .db 8,6 ;3 .db %11110011 .db %01001110 .db %10110101 @@ -515,7 +683,7 @@ spr_explosion: .db %00111110 .db %11011010 - .db 8,6 + .db 8,6 ;4 .db %11110010 .db %01001110 .db %10110101 @@ -523,7 +691,7 @@ spr_explosion: .db %00111110 .db %01011010 - .db 8,6 + .db 8,6 ;5 .db %01000001 .db %00100110 .db %00010101 @@ -531,7 +699,7 @@ spr_explosion: .db %00010010 .db %10011010 - .db 8,6 + .db 8,6 ;6 .db %01000100 .db %00100000 .db %00000001 @@ -539,7 +707,7 @@ spr_explosion: .db %00100010 .db %10001000 - .db 8,6 + .db 8,6 ;7 .db %00001000 .db %11000010 .db %00000000 @@ -547,7 +715,7 @@ spr_explosion: .db %00000001 .db %00110000 - .db 8,6 + .db 8,6 ;8 .db %00000100 .db %00000000 .db %01000000 @@ -555,20 +723,42 @@ spr_explosion: .db %00000001 .db %00100100 -;---------------------------- level data ------------------------------------- +;---------------------------- enemy types ------------------------------------- + +;enemy01: .db $01,$00,$00 ;$hits $fire frequency +;enemy02: .db $02,$00,$00 +;enemy03: .db $04,$00,$00 + +;---------------------------- level data -------------------------------------- + Leveldata: .db $10,$00,$40 ;$time (ff=end) $type $y-pos - .db $10,$08,$30 - .db $10,$08,$20 + .db $10,$00,$30 + .db $10,$00,$20 .db $40,$00,$10 + .db $01,$00,$44 + .db $15,$00,$31 + .db $04,$00,$38 + .db $05,$00,$40 + .db $03,$00,$2f + .db $04,$00,$3a + .db $12,$00,$10 + .db $10,$00,$18 + .db $0e,$00,$20 + .db $0c,$00,$28 + .db $0a,$00,$30 + .db $08,$00,$38 + .db $06,$00,$40 + .db $04,$00,$48 + .db $2a,$00,$20 .db $ff,$ff,$ff -;---------------------------- texts ------------------------------------------ +;---------------------------- texts ------------------------------------------- title_message: .db "* * NEMESIS * *",0 -;---------------------------- save data -------------------------------------- +;---------------------------- save data --------------------------------------- stored_data_start: @@ -580,21 +770,16 @@ level .dw $0000 x .db $16 y .db $46 shield .db $00 -ybullets .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 -ebuls .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +ybullets .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;10 x (state,x,y) +;ebuls .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 enemies .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 - .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$ffff,$ffff + .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 + .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 ; 0011 2233 >> 0=occupation (0=no enemy 1=normal 2=exploding) ; 1=frame/ship 2=x 3=y -boss_status .db 00 -boss_pwr .db 00 -boss_x .db 00 -boss_y .db 00 -boss_2bytes .dw 0000 - timer .dw $0000 your_status .db $00 .db $00 @@ -613,17 +798,22 @@ stored_data_end: ;NEMESIS'86 by Shiar -; 0.01.717 -- 17.VII.99 -- size 984 +;0.01.717 -- 17.VII.99 -- size 984 ; ; + movement of ship over whole screen ; + enemies moving from right to left, appearing right at specified times ; -; 0.1.718 -- 18.VII.99 -- size 907 +; 0.1.718 -- 18.VII.99 -- size 907 ; ; * no crash when level restarts for the third time ; * exit-procedure updated, unnecessary stuff/keychecks removed ; * alot of unused code removed ; + different types of enemies (just look different) ; + collision detection!! enemy ships disappear when you hit them +; +; 0.2.718 -- 18.VII.99 -- size 1153 +; +; + ability to fire bullets (F1). Enemies disappear on impact +; * enemies explode instead of disappearing -- 2.30.0