version 0.3: shooting enemies (hitpoints)
[nemesis.git] / nemesis.z80
1         .include "asm86.h"
2         .include "ti86asm.inc"
3         .include "ti86abs.inc"
4
5         .org _asm_exec_ram
6
7         nop
8         jp  Start
9         .dw $0000
10         .dw Title
11 Title:  .db "Nemesis v0.3.719 by Shiar",0
12 Start:
13         jr init
14
15 just_fired      = $c0f9         ;byte
16 temp1           = $c100         ;word
17
18 ;-------------------- init ----------------------------------------------------
19
20 init:
21         call _runindicoff
22
23 ;-------------------- main menu -----------------------------------------------
24
25         jp play_game
26
27 ;-------------------- exit ----------------------------------------------------
28
29 exit_game:
30         ret
31
32 ;----------------------- game setup -------------------------------------------
33
34 play_game:
35         ld  hl,stored_data_start
36         ld  bc,variables_end-stored_data_start-1
37
38 ;---------------------- display setup ----------------------------------------
39
40 set_up_display:
41         call _clrLCD
42
43         ld  hl,in_game_text
44         ld  b,3
45 l11:    ld  a,(hl)
46         ld  (_curCol),a
47         inc hl
48         ld  a,(hl)
49         ld  (_curRow),a
50         inc hl
51         call _puts
52         djnz l11
53
54 in_game_text:
55         .db 16,0,"LIVES",0
56         .db 16,3,"LEVEL",0
57         .db 16,6,"SCORE",0
58
59 str_question:
60         .db "-----",0
61
62 ;------------------------------------------------------------------------------
63 ;-------------------------- game loop -----------------------------------------
64 ;------------------------------------------------------------------------------
65
66 game_main_loop:
67         ld  hl,timer            ;update time
68         inc (hl)
69
70 Clear_screen:
71         xor a
72         ld  hl,GRAPH_MEM+(16*12)
73         ld  b,a
74  ld a,(background)
75 clearloop:
76         ld  (hl),a
77         inc hl
78         ld  (hl),a
79         inc hl
80         ld  (hl),a
81         inc hl
82         djnz clearloop
83
84 check_exitkey:
85         ld  a,%00111111         ;<exit> pressed?
86         out (1),a
87         nop
88         nop
89         in  a,(1)
90         bit 6,a
91         jr  z,quit              ;yes: quit game
92
93 game_stuff:
94         call Level_event        ;insert enemies
95         call Handle_Ship        ;move you
96         call Fire_bullet        ;check for fire
97         call Handle_bullets     ;move bullets
98         call Handle_enemies     ;move enemies
99         call Enemy_fires        ;check for enemy fire
100         call Enemy_bullets      ;move bullets
101         call Enemies_hit        ;check for collision with enemies
102
103         call Display_Screen     ;display all
104         halt \ halt \ halt      ;delay
105         jr   game_main_loop     ;loop
106
107 quit:   ret
108
109 ;---------------------- display -----------------------------------------------
110
111 Display_Screen:
112         ld  a,64                ;Display Image
113         ld  hl,GRAPH_MEM+(16*12)
114         ld  de,$fc00
115 displayloop:
116         ld  bc,12
117         ldir
118         inc de
119         inc de
120         inc de
121         inc de
122         dec a
123         jr  nz,displayloop
124
125 ;       ld  hl,$1007            ;Display Score
126 ;       ld  (_curRow),hl
127 ;       ld  hl,(score)
128 ;       jp  _D_HL_DECI
129         ret
130
131 ;------------------------- handle ship ----------------------------------------
132
133 Handle_Ship:
134         ld  a,(your_occ)
135         or  a
136         jr  z,ok                ;0 = normal stat
137
138 ;       dec a
139 ;       ld  (your_status),a
140 ;       ld  hl,(lives)
141 ;       ld  a,l
142 ;       or  h
143 ;       jr  nz,ok
144 ;       pop af
145 ;       ret
146
147 ok:
148         ld  a,%01111110
149         out (1),a
150         ld  hl,y
151         in  a,(1)
152         rra
153         ld  b,a
154
155         jr  c,no_down
156         ld  a,(hl)
157         inc a
158         cp  73                  ;y < 73
159         jr  z,no_down
160         ld  (hl),a
161 no_down:
162         dec hl
163         rr  b
164         jr  c,no_left
165         ld  a,(hl)
166         dec a
167         jr  z,no_left           ;x > 0
168         ld  (hl),a
169 no_left:
170         rr b   
171         jr  c,no_right
172         ld  a,(hl)
173         inc a
174         cp  89                  ;x < 89
175         jr  z,no_right
176         ld  (hl),a
177 no_right:
178         ld d,(hl)
179         inc hl
180         rr  b
181         jr  c,no_up
182         ld  a,(hl)
183         dec a
184         cp  15                  ;y > 15
185         jr  z,no_up
186         ld  (hl),a
187 no_up:  ld  ix,spr_ship
188
189 display_common:
190         ld  e,(hl)
191         jp  drw_spr
192
193 ;you_not_normal:
194 ;       ld       a,(your_status)
195 ;       dec      a
196 ;       ld       (your_status),a
197 ;       inc      a
198 ;       and      14
199 ;       xor      14
200 ;       ld       hl,x-1
201
202 explosion_stuff:
203         rra
204         add a,a
205         add a,a
206         add a,a
207         ld  c,a
208         ld  b,0
209         ld  ix,spr_explosion
210         add ix,bc
211         inc hl
212         ld  d,(hl)
213         inc hl
214         jr  display_common
215
216 damage_you:
217         or  %10101010
218         ld  (background),a
219         ret
220
221 ;------------------------- fire bullet ----------------------------------------
222
223 Fire_bullet:
224         ld  a,%00111111
225         out (1),a
226         ld  a,(your_occ)
227         or  a
228         ret nz                  ;return if not normal stat
229         ld  hl,just_fired
230         in  a,(1)
231         bit 4,a
232         jr  z,fire              ;fire pressed?
233         ld  (hl),0              ;not fired
234         ret
235
236 fire:   ld  a,(hl)
237         or  a                   ;can't fire when 1
238         ret nz
239         ld  (hl),1              ;just fired
240
241         ld  hl,ybullets
242         ld  de,3
243         ld  b,10
244 find_ybullet:
245         ld  a,(hl)
246         or  a
247         jr  z,found_ybullet     ;0 = no bullet here
248         add hl,de
249         djnz find_ybullet       ;look next bullet
250         ret
251
252 found_ybullet:
253         ld  (hl),1              ;use bullet
254         inc hl
255         ld  a,(x)
256         add a,5
257         ld  (hl),a              ;set x
258         ld  a,(y)
259         add a,2
260         inc hl
261         ld  (hl),a              ;set y
262         ret
263
264 ;------------------------ handle bullets --------------------------------------
265
266 remove_bullet:
267         dec hl
268         ld  (hl),0              ;dump this bullet!
269         ret
270
271 Handle_bullets:
272         ld  hl,ybullets
273         ld  b,10
274 scan_bullets:
275         push bc
276         push hl
277         ld  (temp1),hl
278         ld  a,(hl)
279         inc hl
280         dec a
281         call z,bullet_type1
282         pop hl
283         pop bc
284         ld  de,3
285         add hl,de
286         djnz scan_bullets
287         ret
288
289 bullet_type1:
290         ld  a,(hl)              ;d = X
291         inc a                   ;move right
292         cp  $5a                 ;off screen?
293         jr  z,remove_bullet
294         inc a                   ;move right
295         cp  $5a                 ;off screen?
296         jr  z,remove_bullet
297         ld  (hl),a              ;save new pos.
298         ld  d,a
299         inc hl
300         ld  e,(hl)              ;e = Y
301         ld  ix,spr_bullet01
302         push de
303         call drw_spr            ;display bullet
304         pop de
305         ld  b,20
306         ld  hl,enemies
307
308 hit_enemies:                    ;Hits with normal enemies
309         push hl
310
311         ld  a,(hl)
312         and %00000001
313         jr  z,nohit             ;no hit when enemy_occ <> 1
314
315         inc hl
316         inc hl
317         ld  a,(hl)              ;check x
318         sub d
319         add a,5
320         jp  m,nohit
321         cp  8
322         jr  nc,nohit
323
324         inc hl
325         ld  a,(hl)              ;check y
326         sub e
327         add a,5
328         jp  m,nohit
329         cp  10
330         jr  nc,nohit
331
332         xor a
333         push hl
334         ld  hl,(temp1)
335         ld  (hl),a              ;remove bullet
336         pop hl
337
338         dec hl
339         dec hl
340         dec hl
341         ld  a,(hl)              ;occ
342         srl a
343         srl a                   ;occ/4 = HP left
344         jr  nz,hpleft
345         ld  (hl),2              ;set to explode
346         inc hl
347         ld  (hl),a              ;explosionFrame 0
348         pop hl
349         ret
350
351 hpleft:
352         dec a
353         add a,a
354         add a,a 
355         inc a                   ;HP*4+1 = occ 1
356         ld  (hl),a              ;save
357         pop hl
358         ret
359
360 nohit:  pop hl
361         inc hl
362         inc hl
363         inc hl
364         inc hl
365         djnz hit_enemies        ;check next enemy
366         ret
367
368 ;--------------------------- level events -------------------------------------
369
370 Level_event:
371         ld  a,(nextevent)
372         dec a
373         ld  (nextevent),a
374         or  a
375         ret nz
376
377 do_event:
378         ld  hl,(curevent)
379         ld  de,enemies-4
380 chk_noenemy:
381         inc de
382         inc de
383         inc de
384         inc de
385         ld  a,(de)
386         or  a
387         jr  nz,chk_noenemy
388
389         inc de
390         ld  a,(hl)
391         ld  (de),a              ;type
392         ld  hl,enemy01
393         ld  c,a
394         ld  b,0
395         add hl,bc
396         add hl,bc
397         add hl,bc               ;hl = enemy specs
398         dec de
399         ld  a,(hl)              ;load hitpoints
400         or  1                   ;set type 1 (normal) enemy
401         ld  (de),a              ;occ
402
403         inc de
404         inc de
405         ld  a,$5a
406         ld  (de),a              ;x
407         inc de
408
409         ld  hl,(curevent)
410         inc hl
411         ld  a,(hl)
412         ld  (de),a              ;y
413
414         inc hl                  ;+0
415         ld  a,(hl)
416         cp  $ff
417         jp  z,Next_level
418         ld  (nextevent),a
419
420         inc hl
421         ld  (curevent),hl
422         ret
423
424 ;--------------------------- enemy fires --------------------------------------
425
426 Enemy_fires:
427         ld  a,r
428         and %01111111
429         cp  19
430         ret p
431
432         add a,a
433         add a,a
434         ld  c,a
435         ld  b,0                 ;bc = a*4
436         ld  hl,enemies
437         add hl,bc               ;hl = enemy
438         ld  a,(hl)
439         or  a
440         ret z                   ;return if no enemy
441         dec a
442         dec a
443         ret z                   ;or exploding enemy
444         inc hl
445         inc hl
446         ld  c,(hl)              ;enemy x-pos
447         dec c
448         dec c                   ;c = x-2
449         inc hl
450         ld  a,(hl)              ;y-pos
451         add a,5
452         ld  e,a                 ;e = y+5
453
454         ld  b,10
455         ld  hl,ebullets
456 find_ebullet:
457         ld  a,(hl)
458         or  a
459         jr  z,found_ebullet     ;0 = not used
460         inc hl
461         inc hl
462         inc hl
463         djnz find_ebullet       ;look next bullet
464         ret
465
466 found_ebullet:
467         ld  (hl),1              ;use bullet
468         inc hl
469         ld  (hl),c              ;set x-pos
470         inc hl
471         ld  (hl),e              ;set y-pos
472         ret         
473
474 ;----------------------------- enemy bullets ----------------------------------
475
476 Enemy_bullets:
477         ld  hl,ebullets
478         ld  b,10
479 handle_bullet:
480         push bc
481         push hl
482         ld  a,(hl)
483         or  a
484         jr  nz,enemy_bullet
485 next_bullet:
486         pop hl
487         pop bc
488         inc hl
489         inc hl
490         inc hl
491         djnz handle_bullet
492         ret
493
494
495 enemy_bullet:
496         inc hl
497         ld  a,(hl)              ;bullet x
498         dec a
499         jp  m,remove_ebullet    ;off screen?
500         jr  z,remove_ebullet    ;"
501         dec a                   ;move left
502         ld  (hl),a
503         ld  d,a                 ;d=x
504         inc hl
505         ld  e,(hl)              ;e=y
506         ld  ix,spr_bullet11     ;display enemy bullet
507         call drw_spr
508
509         ld  a,(your_occ)
510         or  a
511         jr  nz,next_bullet      ;0 = you're normal
512
513         pop hl
514         push hl
515         inc hl                  ;check x
516         ld  a,(x)
517         sub (hl)
518         add a,6
519         jp  m,next_bullet
520         cp  9
521         jr  nc,next_bullet
522
523         inc hl                  ;check y
524         ld  a,(y)
525         sub (hl)
526         add a,6
527         jp  m,next_bullet
528         cp  9
529         jr  nc,next_bullet
530
531         call damage_you         ;HIT!!
532
533 remove_ebullet:
534         dec hl
535         dec hl
536         ld   (hl),0             ;bullet > unused
537         jr   next_bullet
538
539 ;--------------------------- handle enemies -----------------------------------
540
541 Handle_enemies:
542         ld  hl,enemies
543         ld  b,20
544
545 handle_enemy:
546         push bc
547         push hl
548
549         ld  a,(hl)
550         and %00000011
551         jr  z,next_enemy        ;occ "no enemy" 0
552         and %00000001
553         jr  z,exploding_enemy   ;occ "exploding" 2
554
555 normal_enemy:                   ;occ "normal" 1
556         inc hl
557         ld  a,(hl)              ;type
558         add a,a
559         add a,a
560         add a,a
561         ld  c,a                 ;type*8 = offset
562         inc hl
563         ld  d,(hl)              ;x
564         inc hl
565         ld  e,(hl)              ;y
566
567         ld  a,d
568         or  a
569         jr  z,next_enemy
570         dec a
571         ld  d,a
572         jr  z,remove_enemy
573
574         ld  (hl),e
575         dec hl
576         ld  (hl),d
577         ld  ix,spr_enemy01
578         ld  b,$00
579         add ix,bc
580         call drw_spr
581         jr  next_enemy
582
583 remove_enemy:
584         dec hl
585         dec hl
586 enemy_gone:
587         dec hl
588         ld  (hl),$0000          ;bye bye enemy
589
590 next_enemy:
591         pop hl
592         ld  bc,$0004
593         add hl,bc
594         pop bc
595         djnz handle_enemy
596         ret
597
598 exploding_enemy:
599         inc  hl
600         push hl
601         ld   a,(hl)
602         call explosion_stuff    ;display explosion
603         pop  hl
604
605         ld  a,(hl)
606         cp  15
607         jr  z,enemy_gone        ;remove when at last frame
608         inc a
609         ld  (hl),a              ;next frame
610         jr  next_enemy
611
612 ;--------------------------- check collision ----------------------------------
613
614 Enemies_hit:
615         ld  a,(your_occ)
616         or  a
617         ret nz
618
619         ld  de,(x)              ;e = X, d = Y
620         ld  hl,enemies-4
621 check_next:
622         ld  bc,$0004
623         add hl,bc
624
625         ld  a,(hl)
626         cp  $ff
627         ret z                   ;-1 = no more enemies
628         push hl
629         cp  1
630         jr  nz,nocrash          ;1 = enemy
631
632         inc hl
633         inc hl
634         ld  a,(hl)              ;check x match
635         sub e
636         add a,6
637         jp  m,nocrash
638         cp  12
639         jr  nc,nocrash
640
641         inc hl
642         ld  a,(hl)              ;check y match
643         sub d
644         add a,6
645         jp  m,nocrash
646         cp  12
647         jr  nc,nocrash
648
649         dec hl
650         dec hl
651         ld  (hl),0              ;explosionFrame 0
652         dec hl
653         ld  (hl),2              ;set to explode
654         call damage_you
655
656 nocrash:
657         pop hl
658         jr  check_next
659
660 ;--------------------------- next level ---------------------------------------
661
662 Next_level:
663         ld  hl,Leveldata+1
664         ld  (curevent),hl
665         ret
666
667 ;--------------------------- putsprite ----------------------------------------
668
669 offsets_table:
670         .db 128,64,32,16,8,4,2,1
671 drw_spr:
672         ld  a,d
673         and 7
674         ld  hl,offsets_table
675         ld  c,a
676         ld  b,0
677         add hl,bc
678         ld  a,(hl)
679         ld  (_smc1+1),a
680
681         ld  (_smc1+1),a
682         ld  hl,GRAPH_MEM
683         ld  a,e
684         add a,a
685         add a,e
686         add a,a
687         rl  b
688         add a,a
689         rl  b
690         srl d
691         srl d
692         srl d
693         add a,d
694         jr  nc,_n1
695         inc b
696 _n1:    ld  c,a
697         add hl,bc
698           
699         ld  d,(ix)
700         ld  b,(ix+1)
701 _oloop: push bc                 ;Save # of rows
702         push hl                 ;Save screen address
703         ld  b,d                 ;Load width
704         ld  c,(ix+2)            ;Load one line of image
705         inc ix
706 _smc1:  ld  a,1                 ;Load pixel mask
707 _iloop: sla c                   ;Test leftmost pixel
708         jr  nc,_noplot          ;See if a plot is needed
709         ld  e,a                 ;OR pixel with screen
710         or  (hl)
711         ld  (hl),a
712         ld  a,e
713 _noplot: rrca
714         jr  nc,_notedge         ;Test if edge of byte reached
715         inc hl                  ;Go to next byte
716 _notedge:djnz _iloop
717         pop hl                  ;Restore address
718         ld  bc,12               ;Go to next line
719         add hl,bc
720         pop bc                  ;Restore data
721         djnz _oloop
722         ret
723
724
725
726 _D_HL_DECI:
727          push     bc
728          ld       de,up_data+4
729          ld       b,5
730 ldhld:   call     UNPACK_HL
731          add      a,'0'
732          ld       (de),a
733          dec      de
734          djnz     ldhld
735          ld       hl,up_data
736          ld       b,4
737 lis:     ld       a,(hl)
738          cp       '0'
739          jr       nz,dis
740          ld       (hl),' '
741          inc      hl
742          djnz     lis
743 dis:     ld       hl,up_data
744          call     _puts
745          pop      bc
746          ret
747
748 up_data: .db      "PAD98",0
749
750
751
752 ;------------------------------- sprites --------------------------------------
753
754 spr_ship:
755         .db 7,7         ;your ship:
756         .db %01110000   ;  ███
757         .db %11100000   ; ███
758         .db %11111100   ; ██████
759         .db %11110010   ; ████  █
760         .db %11111100   ; ██████
761         .db %11100000   ; ███
762         .db %01110000   ;  ███
763
764 spr_bullet01:
765         .db 5,3         ;your bullets
766         .db %00110000   ;   ░▒▓██
767         .db %11111000   ; ░▒▓█████
768         .db %00110000   ;   ░▒▓██
769 spr_bullet02:
770         .db 5,3         ;your bullets
771         .db %11110000   ; ░▒▓████
772         .db %11111000   ; ░▒▓█████
773         .db %11110000   ; ░▒▓████
774
775 spr_bullet11:
776         .db 3,3         ;enemy bullets
777         .db %01000000   ;  █▓▒░
778         .db %11100000   ; ███▓▒░
779         .db %01000000   ;  █▓▒░
780
781 spr_enemy01:
782         .db 6,6         ;enemy type one
783         .db %00111100   ;   ████
784         .db %01110000   ;  ███
785         .db %11110000   ; ████
786         .db %11110000   ; ████
787         .db %01110000   ;  ███
788         .db %00111100   ;   ████
789 spr_enemy02:
790         .db 6,6         ;enemy type two
791         .db %01111100   ;  █████
792         .db %11110000   ; ████
793         .db %10111000   ; █ ███
794         .db %10111000   ; █ ███
795         .db %11110000   ; ████
796         .db %01111100   ;  █████
797 spr_enemy03:
798         .db 6,6         ;enemy type three
799         .db %00111000   ;   ███
800         .db %01111100   ;  █████
801         .db %11111000   ; █████
802         .db %11111000   ; █████
803         .db %01111100   ;  █████
804         .db %00111000   ;   ███
805 spr_enemy03:
806         .db 6,6         ;enemy type three
807         .db %00111000   ; ███
808         .db %01111100   ;   ██
809         .db %11111000   ; █████
810         .db %11111000   ; █████
811         .db %01111100   ;  █████
812         .db %00111000   ; ███
813
814 spr_explosion:                               
815         .db 8,6         ;1
816         .db %00000000
817         .db %00011100
818         .db %00111110
819         .db %01010110
820         .db %00111000
821         .db %00000000
822
823         .db 8,6         ;2
824         .db %00110000
825         .db %01001110
826         .db %10111110
827         .db %01001111
828         .db %00111000
829         .db %00011010
830
831         .db 8,6         ;3
832         .db %11110011
833         .db %01001110
834         .db %10110101
835         .db %01000101
836         .db %00111110
837         .db %11011010
838
839         .db 8,6         ;4
840         .db %11110010
841         .db %01001110
842         .db %10110101
843         .db %01000101
844         .db %00111110
845         .db %01011010
846
847         .db 8,6         ;5
848         .db %01000001
849         .db %00100110
850         .db %00010101
851         .db %01000100
852         .db %00010010
853         .db %10011010
854
855         .db 8,6         ;6
856         .db %01000100
857         .db %00100000
858         .db %00000001
859         .db %01000100
860         .db %00100010
861         .db %10001000
862
863         .db 8,6         ;7
864         .db %00001000
865         .db %11000010
866         .db %00000000
867         .db %00100000
868         .db %00000001
869         .db %00110000
870
871         .db 8,6         ;8
872         .db %00000100
873         .db %00000000
874         .db %01000000
875         .db %00000000
876         .db %00000001
877         .db %00100100
878
879 ;---------------------------- enemy types -------------------------------------
880
881 enemy01:        .db %00000000,$ff,$ff           ;$hits   $fire frequency
882 enemy02:        .db %00000100,$ff,$ff
883 enemy03:        .db %00001000,$ff,$ff
884
885 ;---------------------------- level data --------------------------------------
886
887 Leveldata:
888         .db $01,$01,$40         ;$time (ff=end)    $type    $y-pos
889         .db $10,$00,$30
890         .db $10,$02,$20
891         .db $40,$01,$10
892         .db $01,$00,$44
893         .db $15,$01,$31
894         .db $04,$02,$38
895         .db $05,$00,$40
896         .db $03,$00,$2f
897         .db $04,$00,$3a
898         .db $12,$00,$10
899         .db $10,$00,$18
900         .db $0e,$00,$20
901         .db $0c,$00,$28
902         .db $0a,$00,$30
903         .db $08,$00,$38
904         .db $06,$00,$40
905         .db $04,$00,$48
906         .db $2a,$00,$20
907         .db $ff,$ff,$ff
908
909 ;---------------------------- texts -------------------------------------------
910
911 title_message:
912          .db      "* * NEMESIS * *",0
913
914 ;---------------------------- save data ---------------------------------------
915
916 stored_data_start:
917
918 level           .dw $0000               ;level number
919 background      .db %00000001           ;level background
920 timer           .dw $0000
921 curevent        .dw Leveldata+1         ;next event
922 nextevent       .db (Leveldata)         ;time to next event
923
924 score           .dw $0000
925
926 your_occ        .db $00                 ;0=normal 1=exploding 2=gone
927 lives           .dw $0003       ;unused
928 x               .db $16                 ;x-pos
929 y               .db $46                 ;think about it..
930 hp              .db $00                 ;hitpoints left
931 your_status     .db $00,$00     ;unused
932
933 ybullets        .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;10 x (state,x,y)
934 ebullets        .dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0       ;10 x (state,x,y)
935
936 enemies         .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
937                 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
938                 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
939                 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
940                 .dw $0000,$0000,$0000,$0000,$0000,$0000,$0000,$0000
941 ; 0011 2233 >>  0=occupation (and %00000011: 0=no enemy 1=normal 2=exploding)
942 ;               1=frame/ship 2=x 3=y
943
944 variables_end:
945
946 stored_data_end:
947
948
949         .end
950
951
952
953
954 ;NEMESIS'86 by Shiar
955
956
957 ;0.01.717 -- 17.VII.99 -- size 984
958 ;
959 ;       + movement of ship over whole screen
960 ;       + enemies moving from right to left, appearing right at specified times
961 ;
962 ; 0.1.718 -- 18.VII.99 -- size 907
963 ;
964 ;       * no crash when level restarts for the third time
965 ;       * exit-procedure updated, unnecessary stuff/keychecks removed
966 ;       * alot of unused code removed
967 ;       + different types of enemies (just look different)
968 ;       + collision detection!! enemy ships disappear when you hit them
969 ;
970 ; 0.2.718 -- 18.VII.99 -- size 1153
971 ;
972 ;       + ability to fire bullets (F1). Enemies disappear on impact
973 ;       * enemies explode instead of disappearing
974 ;
975 ; 0.3.719 -- 19.VII.99 -- size 1401
976 ;
977 ;       * bullets appear correctly (not INSIDE your ship)
978 ;       + some enemies can take multiple hits (differs per class)
979 ;       + all enemies fire bullets at random
980 ;       + if you're hit by bullet/enemy, you'll lose one hitpoint
981
982