X-Git-Url: http://git.shiar.net/nemesis.git/blobdiff_plain/360b8ba326a96e75e72b2dee8992072578565ec3..026d2d55516b9bf4d2826305f33a898043e46b81:/nemesis.z80 diff --git a/nemesis.z80 b/nemesis.z80 index 79042be..19d3b9e 100644 --- a/nemesis.z80 +++ b/nemesis.z80 @@ -1,15 +1,21 @@ - .include "asm86.h" + .include "asm86.h" .include "ti86asm.inc" .include "ti86abs.inc" + .org _asm_exec_ram + nop jp Start - .dw $0000 + .dw $0001 .dw Title -Title: .db "Nemesis v0.1.718 by Shiar",0 + .dw spr_ship +Title: .db "Nemesis v0.4.720 by Shiar",0 Start: jr init +just_fired = $c0f9 ;byte +temp1 = $c100 ;word + ;-------------------- init ---------------------------------------------------- init: @@ -17,6 +23,7 @@ init: ;-------------------- main menu ----------------------------------------------- + call Next_level jp play_game ;-------------------- exit ---------------------------------------------------- @@ -27,32 +34,15 @@ exit_game: ;----------------------- game setup ------------------------------------------- play_game: - ld hl,stored_data_start - ld bc,variables_end-stored_data_start-1 ;---------------------- display setup ---------------------------------------- set_up_display: call _clrLCD - - ld hl,in_game_text - ld b,3 -l11: ld a,(hl) - ld (_curCol),a - inc hl - ld a,(hl) - ld (_curRow),a - inc hl + ld (_curCol),16 + ld (_curRow),6 + ld hl,txt_score call _puts - djnz l11 - -in_game_text: - .db 16,0,"LIVES",0 - .db 16,3,"LEVEL",0 - .db 16,6,"SCORE",0 - -str_question: - .db "-----",0 ;------------------------------------------------------------------------------ ;-------------------------- game loop ----------------------------------------- @@ -87,11 +77,15 @@ check_exitkey: game_stuff: call Level_event ;insert enemies call Handle_Ship ;move you + call Fire_bullet ;check for fire + call Handle_bullets ;move bullets call Handle_enemies ;move enemies + call Enemy_fires ;check for enemy fire + call Enemy_bullets ;move bullets call Enemies_hit ;check for collision with enemies call Display_Screen ;display all -; halt \ halt \ halt ;delay + halt \ halt \ halt ;delay jr game_main_loop ;loop quit: ret @@ -112,20 +106,19 @@ displayloop: dec a jr nz,displayloop -; ld hl,$1007 ;Display Score -; ld (_curRow),hl -; ld hl,(score) + ld hl,$1006 ;Display Score + ld (_curRow),hl + ld hl,(timer) ; jp _D_HL_DECI ret ;------------------------- handle ship ---------------------------------------- Handle_Ship: - ld a,(your_status) -; bit 4,a -; jr nz,you_not_normal + ld a,(your_occ) or a - jr z,ok + jr z,ok ;0 = normal stat + ; dec a ; ld (your_status),a ; ld hl,(lives) @@ -175,21 +168,13 @@ no_right: cp 15 ;y > 15 jr z,no_up ld (hl),a -no_up: ld ix,spr_ship +no_up: ld ix,spr_ship01 display_common: ld e,(hl) jp drw_spr ;you_not_normal: -; ld hl,(score) -; ld de,-6 -; add hl,de -; ld a,255 -; cp h -; jr nz,_ok_ -; ld hl,0 -;_ok_: ld (score),hl ; ld a,(your_status) ; dec a ; ld (your_status),a @@ -198,19 +183,168 @@ 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 + +damage_you: + ret + +;------------------------- fire bullet ---------------------------------------- + +Fire_bullet: + ld a,%00111111 + out (1),a + ld a,(your_occ) + or a + ret nz ;return if not normal stat + ld hl,just_fired + in a,(1) + bit 4,a + jr z,fire ;fire pressed? + 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,5 + 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_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_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) + and %00000010 + jr z,nohit ;no hit when enemy_occ <> 2/3 + + 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 + dec hl + ld a,(hl) ;occ + ld b,a + srl a + srl a ;occ/4 = HP left + jr nz,hpleft + ld (hl),$01 ;set to explode + inc hl + ld (hl),a ;explosionFrame 0 + pop hl + ret + +hpleft: + ld a,b + sub %00000100 ;decrease HP by one + ld (hl),a ;save + 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 +356,7 @@ Level_event: ret nz do_event: - ld hl,(curevent) ;+1 + ld hl,(curevent) ld de,enemies-4 chk_noenemy: inc de @@ -230,64 +364,203 @@ chk_noenemy: inc de inc de ld a,(de) - or a + or a ;0 = no enemy present jr nz,chk_noenemy - ld a,$01 - ld (de),a ;occ - inc de + ld a,(hl) ;type + ld hl,enemy01 + ld c,a + ld b,0 + add hl,bc + add hl,bc ;hl = enemy specs + ld a,(hl) ;load hitpoints+occ of this enemy class + ld (de),a ;occ - ld a,(hl) - ld (de),a ;type + inc hl inc de + ld a,(hl) ;load movement+type of this enemy class + ld (de),a ;type - ld a,$5a - ld (de),a ;x + inc de + ld a,$5a ;appear at right edge of screen + ld (de),a ;x inc de - inc hl ;+2 + ld hl,(curevent) + inc hl ld a,(hl) - ld (de),a ;y + ld (de),a ;y - inc hl ;+0 + inc hl ;@ next event ld a,(hl) - cp $ff + cp $ff ;255 = end marker jp z,Next_level - ld (nextevent),a + ld (nextevent),a ;else time to next event - inc hl ;+1 - ld (curevent),hl + inc hl + ld (curevent),hl ;update pointer + ret + +;--------------------------- enemy fires -------------------------------------- + +Enemy_fires: + ld a,r + and %01111111 + cp 19 + ret p + + add a,a + add a,a + ld c,a + ld b,0 ;bc = a*4 + ld hl,enemies + add hl,bc ;hl = enemy + ld a,(hl) + or a + ret z ;return if no enemy + dec a + dec a + ret z ;or exploding enemy + inc hl + inc hl + ld c,(hl) ;enemy x-pos + dec c + dec c ;c = x-2 + inc hl + ld a,(hl) ;y-pos + inc a + ld e,a ;e = y+1 + + ld b,10 + ld hl,ebullets +find_ebullet: + ld a,(hl) + or a + jr z,found_ebullet ;0 = not used + inc hl + inc hl + inc hl + djnz find_ebullet ;look next bullet + ret + +found_ebullet: + ld (hl),1 ;use bullet + inc hl + ld (hl),c ;set x-pos + inc hl + ld (hl),e ;set y-pos + ret + +;----------------------------- enemy bullets ---------------------------------- + +Enemy_bullets: + ld hl,ebullets + ld b,10 +handle_bullet: + push bc + push hl + ld a,(hl) + or a + jr nz,enemy_bullet +next_bullet: + pop hl + pop bc + inc hl + inc hl + inc hl + djnz handle_bullet ret + +enemy_bullet: + inc hl + ld a,(hl) ;bullet x + dec a + jp m,remove_ebullet ;off screen? + jr z,remove_ebullet ;" + dec a ;move left + ld (hl),a + ld d,a ;d=x + inc hl + ld e,(hl) ;e=y + ld ix,spr_bullet11 ;display enemy bullet + call drw_spr + + ld a,(your_occ) + or a + jr nz,next_bullet ;0 = you're normal + + pop hl + push hl + inc hl ;check x + ld a,(x) + sub (hl) + add a,6 + jp m,next_bullet + cp 9 + jr nc,next_bullet + + inc hl ;check y + ld a,(y) + sub (hl) + add a,6 + jp m,next_bullet + cp 9 + jr nc,next_bullet + + call damage_you ;HIT!! + +remove_ebullet: + dec hl + dec hl + ld (hl),0 ;bullet > unused + jr next_bullet + ;--------------------------- handle enemies ----------------------------------- Handle_enemies: ld hl,enemies + ld b,20 ;loop 20x handle_enemy: + push bc push hl ld a,(hl) - cp 1 - jr nz,next_enemy + and %00000011 + jr z,next_enemy ;occ "no enemy" 0 + dec a + jr z,exploding_enemy ;occ "exploding" 1 + ld b,0 + dec a + jr z,normal_enemy ;occ "normal" 2 +moving_enemy: ;occ "moving" 3 + ld b,1 + +normal_enemy: inc hl - ld c,(hl) ;type - inc hl - ld d,(hl) ;x - inc hl - ld e,(hl) ;y + ld a,(hl) ;type + add a,a + add a,a + add a,a + ld c,a ;type*8 = offset - ld a,d - or a - jr z,next_enemy - dec a + inc hl + ld a,(hl) ;x + dec a ;move left + jp m,remove_enemy ;off screen + jr z,remove_enemy ;" ld d,a - jr z,remove_enemy - ld (hl),e + inc hl + ld a,(hl) ;y + ;;;;;;;;;;;;;;;; ; + ld (hl),a ;store new y + ld e,a + dec hl - ld (hl),d + ld (hl),d ;store new x ld ix,spr_enemy01 ld b,$00 add ix,bc @@ -295,73 +568,114 @@ handle_enemy: jr next_enemy remove_enemy: - dec hl - dec hl - dec hl - ld (hl),$0000 - + pop hl + ld (hl),$0000 ;bye bye enemy + push hl next_enemy: pop hl - inc hl - inc hl - inc hl - inc hl - ld a,(hl) - cp $ff - jr nz,handle_enemy - + ld bc,$0004 + add hl,bc + pop bc + 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,remove_enemy ;remove when at last frame + inc a + ld (hl),a ;next frame + jr next_enemy + ;--------------------------- check collision ---------------------------------- Enemies_hit: - ld de,(x) ;e = X, d = Y - ld hl,enemies-4 -check_next: - inc hl - inc hl - inc hl - inc hl + ld a,(your_occ) + or a ;0 = you're normal + ret nz - ld a,(hl) - cp $ff - ret z ;-1 = no more enemies + ld de,(x) ;e = X, d = Y + ld hl,enemies + ld b,20 ;check all 20 enemies +check_collision: push hl - cp 1 - jr nz,nocrash ;1 = enemy + ld a,(hl) + and %00000010 + jr z,check_next ;2/3 = ok inc hl inc hl ld a,(hl) ;check x match sub e add a,6 - jp m,nocrash + jp m,check_next cp 12 - jr nc,nocrash + jr nc,check_next inc hl ld a,(hl) ;check y match sub d add a,6 - jp m,nocrash + jp m,check_next cp 12 - jr nc,nocrash + jr nc,check_next dec hl dec hl - ld (hl),0 + xor a + ld (hl),a ;explosionFrame 0 dec hl - ld (hl),2 ;set to explode + inc a + ld (hl),a ;set to explode + call damage_you ;auch! -nocrash: +check_next: pop hl - jr check_next + inc hl + inc hl + inc hl + inc hl + djnz check_collision + ret ;--------------------------- next level --------------------------------------- Next_level: - ld hl,Leveldata+1 + ld hl,Leveldata+1 ;reset level data ld (curevent),hl + + call _clrLCD ;clear screen + ld hl,$0703 + ld (_curRow),hl ;center + ld hl,txt_level + call _puts ;display "LEVEL " + + ld a,(level) + inc a ;increase level nr. + ld (level),a + ld l,a + ld h,$00 + + call UNPACK_HL + add a,'0' + ld b,a + call UNPACK_HL + add a,'0' + call _putc ;display second digit + ld a,b + call _putc ;display first digit + + ld b,$20 +wait: halt \ halt + djnz wait ;delay + call _getkey ;wait for keypress + ret ;--------------------------- putsprite ---------------------------------------- @@ -452,178 +766,277 @@ 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,1 ;ship icon + .db %11000000 ; ██ + .db %11110000 ; ████ + .db %01111100 ; █████ + .db %01110010 ; ███ █ + .db %01111100 ; █████ + .db %11110000 ; ████ + .db %11000000 ; ██ + +spr_ship01: + .db 7,7 ;ship alpha class + .db %01110000 ; ███ + .db %11100000 ; ███ + .db %11111100 ; ██████ + .db %11110010 ; ████ █ + .db %11111100 ; ██████ + .db %11100000 ; ███ + .db %01110000 ; ███ +spr_ship02: + .db 7,7 ;ship beta class + .db %11000000 ; ██ + .db %11110000 ; ████ + .db %01111100 ; █████ + .db %01110010 ; ███ █ + .db %01111100 ; █████ + .db %11110000 ; ████ + .db %11000000 ; ██ spr_bullet01: - .db 5,3 - .db %11110000 - .db %11111000 - .db %11110000 - + .db 5,3 ;your bullets + .db %00110000 ; ░▒▓██ + .db %11111000 ; ░▒▓█████ + .db %00110000 ; ░▒▓██ spr_bullet02: - .db 3,3 - .db %01000000 - .db %11100000 - .db %01000000 + .db 5,3 ;your bullets + .db %11110000 ; ░▒▓████ + .db %11111000 ; ░▒▓█████ + .db %11110000 ; ░▒▓████ -spr_enemy01: - .db 6,6 - .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 +spr_bullet11: + .db 3,3 ;enemy bullets + .db %01000000 ; █▓▒░ + .db %11100000 ; ███▓▒░ + .db %01000000 ; █▓▒░ spr_explosion: - .db 8,6 - .db %00000000 - .db %00011100 - .db %00111110 - .db %01010110 - .db %00111000 + .db 8,6 ;1 .db %00000000 - - .db 8,6 - .db %00110000 - .db %01001110 - .db %10111110 - .db %01001111 - .db %00111000 - .db %00011010 - - .db 8,6 - .db %11110011 - .db %01001110 - .db %10110101 - .db %01000101 - .db %00111110 - .db %11011010 - - .db 8,6 - .db %11110010 - .db %01001110 - .db %10110101 - .db %01000101 - .db %00111110 - .db %01011010 - - .db 8,6 - .db %01000001 - .db %00100110 - .db %00010101 - .db %01000100 - .db %00010010 - .db %10011010 - - .db 8,6 - .db %01000100 - .db %00100000 - .db %00000001 - .db %01000100 - .db %00100010 - .db %10001000 - - .db 8,6 - .db %00001000 - .db %11000010 + .db %00011100 ; ███ + .db %00111110 ; █████ + .db %01010110 ; █ █ ██ + .db %00111000 ; ███ .db %00000000 - .db %00100000 - .db %00000001 - .db %00110000 - .db 8,6 - .db %00000100 - .db %00000000 - .db %01000000 - .db %00000000 - .db %00000001 - .db %00100100 - -;---------------------------- level data ------------------------------------- -Leveldata: - .db $10,$00,$40 ;$time (ff=end) $type $y-pos - .db $10,$08,$30 - .db $10,$08,$20 - .db $40,$00,$10 - .db $ff,$ff,$ff - -;---------------------------- texts ------------------------------------------ - -title_message: - .db "* * NEMESIS * *",0 - -;---------------------------- save data -------------------------------------- + .db 8,6 ;2 + .db %00110000 ; ██ + .db %01001110 ; █ ▒███ + .db %10111110 ; █ █████ + .db %01001111 ; █ ▒████ + .db %00111000 ; ███ + .db %00011010 ; ██ █ + + .db 8,6 ;3 + .db %10110011 ; █ ██ ██ + .db %01001110 ; █ ███ + .db %10110101 ; █ ██▒█▒█ + .db %01000101 ; █ ▒█▒█ + .db %00111110 ; █████ + .db %11011010 ; ██ ██ █ + + .db 8,6 ;4 + .db %00101010 ; ▒ █▒█ █▒ + .db %01000110 ; █ ▒██ + .db %10110101 ; █ ██ █ █ + .db %01100110 ; ██ ██▒ + .db %00111100 ; ████▒ + .db %01011001 ; ▒█ ██ ▒█ + + .db 8,6 ;5 + .db %01000001 ; █▒ ▒ ▒█ + .db %00100101 ; ▒█ █▒█ + .db %00010100 ; ▒ ▒█ █ ▒ + .db %01000100 ; █▒ █ + .db %00010010 ; ▒█▒▒█ + .db %10011010 ; █▒ ██ █▒ + + .db 8,6 ;6 + .db %01000100 ; █ █ ▒ + .db %00100000 ; ▒█ ▒ ▒ + .db %00000001 ; ▒ ▒ █ + .db %01000100 ; █ █ + .db %00100010 ; █▒ █ + .db %01001000 ; ▒█ ▒█ ▒ + + .db 8,6 ;7 + .db %00001000 ; ▒ █▒ + .db %11000010 ; ██ ▒ █ + .db %00000000 ; ▒ + .db %00100000 ; ▒█ ▒ + .db %00000001 ; ▒ ▒█ + .db %00110000 ; ▒██▒ + + .db 8,6 ;8 + .db %00000100 ; ▒█ + .db %00000000 ; ▒▒ ▒ + .db %01000000 ; █ + .db %00000000 ; ▒ + .db %00000010 ; █▒ + .db %00100100 ; █▒ █ + +spr_icon01: + .db 5,4 + .db %00100000 ; █ + .db %10101000 ; █ █ █ + .db %11111000 ; █████ + .db %01110000 ; ███ +spr_icon02: + .db 5,4 + .db %00000000 ; ███ + .db %00000000 ; ██ ██ + .db %00000000 ; █ █ + .db %00000000 ; + +;---------------------------- texts ------------------------------------------- + +txt_title: .db "* * NEMESIS * *",0 +txt_level: .db "LEVEL ",0 +txt_score: .db "SCORE",0 + +;---------------------------- save data --------------------------------------- stored_data_start: +level .db $00 ;level number +timer .db $00 ;frame counter curevent .dw Leveldata+1 ;next event nextevent .db (Leveldata) ;time to next event + score .dw $0000 -lives .dw $0003 -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 + +your_occ .db $00 ;0=normal 1=exploding 2=gone +lives .dw $0003 ;unused +x .db $16 ;x-pos +y .db $46 ;think about it.. +hp .db $00 ;hitpoints left + +ybullets .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;10 x (state,x,y) +ebullets .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;10 x (state,x,y) + 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 -; 0011 2233 >> 0=occupation (0=no enemy 1=normal 2=exploding) -; 1=frame/ship 2=x 3=y + .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 + .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000 -boss_status .db 00 -boss_pwr .db 00 -boss_x .db 00 -boss_y .db 00 -boss_2bytes .dw 0000 +; %111111 (HP left) 11 (00=no enemy 01=exploding 10=normal 11=moving) +; %111 (move ptrn) 11111 (ship or explosion frame) %11111111 (x) %11111111 (y) -timer .dw $0000 -your_status .db $00 - .db $00 -warped_status .db $00 -variables_end: +;---------------------------- enemy data -------------------------------------- -stored_data_end: +spr_enemy01: + .db 6,6 ;enemy type one + .db %00111100 ; ████ + .db %01110000 ; ███ + .db %11110000 ; ████ + .db %11110000 ; ████ + .db %01110000 ; ███ + .db %00111100 ; ████ +spr_enemy02: + .db 6,6 ;enemy type two + .db %00111000 ; ███ + .db %01100000 ; ██ + .db %11111100 ; ██████ + .db %11111100 ; ██████ + .db %01100000 ; ██ + .db %00111000 ; ███ +spr_enemy03: + .db 6,6 ;enemy type three + .db %01111100 ; █████ + .db %11110000 ; ████ + .db %11111000 ; █████ + .db %11111000 ; █████ + .db %11110000 ; ████ + .db %01111100 ; █████ +spr_enemy04: + .db 6,6 ;enemy type four + .db %00111000 ; ███ + .db %01111100 ; █████ + .db %11111000 ; █████ + .db %11111000 ; █████ + .db %01111100 ; █████ + .db %00111000 ; ███ + +enemy01: + .db %00000010,%00000000 ;first two enemy bytes +enemy02: + .db %00000010,%00100001 +enemy03: + .db %00000110,%00000010 +enemy04: + .db %00010010,%00000010 + +;---------------------------- level data -------------------------------------- + +Leveldata: + .db $01,$01,$40 ;$time (ff=end) $type $y-pos + .db $10,$00,$30 + .db $10,$02,$20 + .db $40,$01,$10 + .db $01,$00,$44 + .db $15,$01,$31 + .db $04,$02,$38 + .db $05,$00,$40 + .db $03,$00,$2f + .db $04,$00,$3a + .db $12,$02,$10 + .db $10,$03,$18 + .db $0e,$03,$20 + .db $0c,$03,$28 + .db $0a,$02,$30 + .db $08,$02,$38 + .db $06,$01,$40 + .db $04,$00,$48 + .db $2a,$00,$20 + .db $ff,$ff,$ff +;----------------------------- end -------------------------------------------- .end +.end -;NEMESIS'86 by Shiar +;----------------------------- NEMESIS'86 by Shiar ---------------------------- +;----------------------------- version history -------------------------------- -; 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 +; +; 0.3.719 -- 19.VII.99 -- size 1401 +; +; * bullets appear correctly (not INSIDE your ship) +; + some enemies can take multiple hits (differs per class) +; + all enemies fire bullets at random +; + if you're hit by bullet/enemy, you'll lose one hitpoint +; +; 0.4.720 -- 20.VII.99 -- size 1481 +; +; * collision detection fixed and optimized (much faster now!) +; + shell-icon added (YAS type) +; * code optimizations, some data "compression" +; * explosion looks better, and some vars removed/smaller +; * enemies are removed if at left side (instead of becoming invisible) +; + displays level number before each level begins