version 0.98 pre2: minor fixes and updates
authorMischa Poslawsky <nemesis@shiar.org>
Thu, 29 Jun 2000 17:19:44 +0000 (19:19 +0200)
committerMischa Poslawsky <nemesis@shiar.org>
Wed, 18 Mar 2009 03:22:31 +0000 (04:22 +0100)
* at status bar left below ships are displayed for lives left
* armor bar is two pixels high (better visible)
# bullet overflow fixed again (>63 bullets fired)
# correct weapon loaded when continuing a saved game
# game froze when generating a random value <=1
* you explode in a different way than the enemies
+ screen inverts for a brief time when you are hit!
# stats-bar was messed up when ya got 0 lives left
* new (big) boss modeled after a common MSX Nemesis2-boss
* score increased once every 32 frames (instead of every 256)
# ground fixed for new random routine (smaller routine; incs -2 to 2)

nemesis.txt
nemesis.z80

index 16ec69c25c640768624cdd4f14f057de28573fd5..b2ec9556fad1d5aea6df6bf5342f4ba296e9271c 100644 (file)
@@ -1,36 +1,27 @@
 ------------------------------------------------------------------------------
  Title                         : Nemesis
 ------------------------------------------------------------------------------
  Title                         : Nemesis
- Version                       : 0.96.A31 Beta
- Release Date                  : 31.X.99
- Filename                      : nemesis.86p (size 4842)
+ Version                       : 0.97.629 Beta
+ Release Date                  : 29.VI.00
+ Filename                      : nemesis.86p (size 6kb)
  Author(s)                     : Shiar
  Author(s)                     : Shiar
- Email Address                 : shiar@mailroom.com
+ Email Address                 : shiar0@hotmail.com
  ICQ                           : #43840958
  ICQ                           : #43840958
- Web Page                      : http://come.to/shiar
+ Web Page                      : http://www.shiar.org
  Description                   : cool arcade-shoot-em-up-game
  Description                   : cool arcade-shoot-em-up-game
- Where to get this game        : www.ticalc.org
- Other games by author         : N/Y
- Additional credits to         : See bottom
+ Where to get this game        : www.shiar.org | www.ticalc.org
+ Other games by author         : Worm
 
 
 
 
->>>>>>> NOTE ON V.96 ---------------------------------------------------------
+>>>>>>> NOTE ON V.97 ---------------------------------------------------------
 
 
-  YES! NEMESIS was on the NEWS in TICALC.ORG! With a nice screenshot so you
-just couldn't ignore it!! And my, I received a lot of messages. Thanks to
-everybody, I'm very happy!
-
-  More happiness: a new update featuring alot of bug fixes (Nemesis has now
-got some good beta-testers!), bosses, weapon-upgrades, LEFT+DOWN-bug fixed
-(THANKS2 BRIAN KOROPOFF!), teacher key, armor-bar, hiscorenames, external
-levels, and much more. Again thank you all and keep sending me stuff!
-I really appreciate it!
+  Still under construction. Don't distribute.
 
 
 >>>>>>> INTRO TO NEMESIS -----------------------------------------------------
 
   Nemesis is an old arcade-game for many platforms, originally for arcades.
 I first played Nemesis III for the MSX (1988), but Konami made at least
 
 
 >>>>>>> INTRO TO NEMESIS -----------------------------------------------------
 
   Nemesis is an old arcade-game for many platforms, originally for arcades.
 I first played Nemesis III for the MSX (1988), but Konami made at least
-> 41 < Nemesis-games (mostly named Nemesis, Gradius, Salamander, Parodius)
+* 41 * Nemesis-games (mostly named Nemesis, Gradius, Salamander, Parodius)
 for systems including the Game Boy, (S)NES and Play Station.
 
 
 for systems including the Game Boy, (S)NES and Play Station.
 
 
@@ -43,9 +34,9 @@ Arrow keys : move
 ALPHA      : select powerup
 MORE       : pause
 EXIT       : exit
 ALPHA      : select powerup
 MORE       : pause
 EXIT       : exit
-GRAPH      : teacher! (press graph again to resume)
+GRAPH      : teacher/boss! (press graph again to resume)
 
 
-  In main menu you can press F1 to toggle b<>w (will not be saved... yet).
+  In main menu you can press F1 to toggle b<>w.
   A game can be saved by pressing F1 at the level-screen.
 
 
   A game can be saved by pressing F1 at the level-screen.
 
 
@@ -53,10 +44,12 @@ GRAPH      : teacher! (press graph again to resume)
 
   Collect the pickups enemies leave after they're destroyed to upgrade your
 ship. The highlighted icon in the score bar (bottom) can be activated by
 
   Collect the pickups enemies leave after they're destroyed to upgrade your
 ship. The highlighted icon in the score bar (bottom) can be activated by
-pressing ALPHA. The number in the first icon shows your shield-points left.
-This icon can be chosen more than once, to increase your shield-points.
+pressing ALPHA.
+
+  Upgrades: ARMOR | TORPEDO | WEAPON-UPG | LASER | MULTIPLES
 
 
-  Other upgrades: ARMOR/SHIELD | TORPEDO | WEAPON-UPG | LASER | MULTIPLES
+  The upper bar on the left shows your hitpoints left (armor). The bar below
+that shows the current power of your weapon.
 
 
 >>>>>>> BETA STUFF -----------------------------------------------------------
 
 
 >>>>>>> BETA STUFF -----------------------------------------------------------
@@ -64,10 +57,7 @@ This icon can be chosen more than once, to increase your shield-points.
   There are just seven levels for now, don't try to get to level eight.
 Things to come:
 
   There are just seven levels for now, don't try to get to level eight.
 Things to come:
 
-* compressed level-files
-* different enemies in one level
 * save options (like b<>w)
 * save options (like b<>w)
-* boss key (saves game and quits)
 * more LEVELS!! more enemies more upgrades more story
 * maybe obstacles?
 * source code release
 * more LEVELS!! more enemies more upgrades more story
 * maybe obstacles?
 * source code release
@@ -77,8 +67,9 @@ Things to come:
 program, or even send me something if you don't. Again: shiar@mailroom.com,
 or ICQ #43840958! PLEASE!
 
 program, or even send me something if you don't. Again: shiar@mailroom.com,
 or ICQ #43840958! PLEASE!
 
-  Tested on TI86es (and emulators) with ROM 1.4 and 1.6 using YAS, Rascall and
-Asm(. Nemesis will NOT run correctly under RASCALL with the memory LOCKED!
+  Tested on TI86es (and emulators) with ROM 1.2, 1.4 and 1.6 using YAS,
+Rascall and Asm(. Nemesis will NOT run correctly under RASCALL with the
+memory LOCKED!
 
 
 >>>>>>> CREDITS --------------------------------------------------------------
 
 
 >>>>>>> CREDITS --------------------------------------------------------------
@@ -100,77 +91,10 @@ Asm(. Nemesis will NOT run correctly under RASCALL with the memory LOCKED!
 
 * Damage to you, your calc, or anything else was not caused by Nemesis
   and I am certainly not responsible
 
 * Damage to you, your calc, or anything else was not caused by Nemesis
   and I am certainly not responsible
-* One shall NOT release an altered version of Nemesis
-* This documentation must be included with distribution (except calc2calc)
-* No money shall be asked for this program
-* Eat plenty of vegetables every day
-
-
->>>>>>> HISTORY --------------------------------------------------------------
-
-Most significant version changes since version 0.61.
-
-  Version 0.7 Beta  Size:2303  02.IX
-
-* contrast is increased at startup
-* invulerable when entering the game (your ship looks different too)
-* hitpoints/shield. some enemies leave pickups which increase your shield
-* fixed the fake bullets-bug
-
-  Version 0.8 Beta  Size:2433  03.IX
-
-* enemies move individually, not all at the same time
-* enemies fire once every x time instead of randomized
-* changed: enemies removed correctly, screen cleared at quit, enemies don't
-  move off screen (above or below edge), levels rebuild
-
-  Version 0.9 Beta  Size:2693  04.IX   (first major release)
-
-* multiple pickups can be collected, and activated by pressing F2
-* two pickups select torpedo, one selects shield increase
-* you have 4 lives. Dieing will decrease lives and restart in the same level
-* fixes: pickups no longer fire bullets, randomizer fixed, game over quits
-
-  Version 0.91Beta  Size:2797  05.IX
-
-* fourth icon selects laser
-* fifth icon selects multiples (like the shadow multiples in Nemesis)
-* most data no longer stored in program, saving a lot of bytes
-
-  Version 0.92Beta  Size:2831  08.IX
-
-* Laserbeam lasts for five turns, making it more powerfull
-* Bullets and enemies are removed at the beginning of a level
-* Pickups don't appear random anymore, but after destroying x enemies
-* Bugs fixed: fifth icon select, firing bullets, invulerability
-
-  Version 0.93Beta  Size:3098  11.IX   (second major release)
-
-* Counts score and saves highest score
-* Pickups move slower, keys changed to 2nd and Alpha
-* Multiples move only when you move (like in MSX-Nemesis)
-* A lot of small fixes and changes (really a lot of them)
-
-  Version 0.94Beta  Size:4456  08.X    (yet another release; ticalc news)
-
-* Two-layer starfield scrolling in the background
-* Enemies can move at different speeds or move patterns and can aim bullets
-* Ground scrolling at bottom and ceiling scrolling @ top (also tunnel-effect)
-* Main menu, levels changed, bugs fixed, enemy firing rate differs, and more
-
-  Version 0.95Beta  Size:5285  21.X
-
-* Boss at the end of a level
-* Bullet-upgrades (speed/multiple bullets) and 3-bullet limit
-* Graph cleared, unintended pixels removed, prog reload, major bugfixes
-* When you got a hiscore, you can enter your name
-
-  Version 0.96Beta  Size:4842  31.X
-
-* Armor-bar and enemy-bullets doing 1/4 damage (can vary per level)
-* External levels (in nemesis0.86p) storing level/enemy-data and story
-* You move faster, ground at boss, more bugs fixed, code optimized
-* Game can be saved at start of a level (continue game does work now)
+* Thou shallt NOT release an altered version of Nemesis
+* Thou shallt include this documentation with distribution (except calc2calc)
+* Thou shallt not ask money for this program
+* Thou shallt eat plenty of vegetables every day
 
 
 
 
----------------------------------------------------------------------- <<<<<<<
+---------------------------------------------------------------------- <<<<<<<
\ No newline at end of file
index 6d958b217cfeb0613c871311c52e1c1ac72eca92..9b62f3a9d25ebf20f7f1156c2730b7a6c539d0e8 100644 (file)
@@ -57,6 +57,7 @@ nextevent     = eventleft+1           ; +6    ;time to next event
 level_enemy    = nextevent+1           ; +7    ;enemy type
 level_info     = level_enemy+1         ; +8    ;info (see below)
 level_move     = level_info+1          ; +9    ;=
 level_enemy    = nextevent+1           ; +7    ;enemy type
 level_info     = level_enemy+1         ; +8    ;info (see below)
 level_move     = level_info+1          ; +9    ;=
+time2invert    = level_move+1          ;+10    ;time until b<>w switch
                                        ;       ;--------OBJECTS
 spacespace     = storepos+19           ;+19
 groundinfo     = spacespace+1          ;+20
                                        ;       ;--------OBJECTS
 spacespace     = storepos+19           ;+19
 groundinfo     = spacespace+1          ;+20
@@ -229,18 +230,15 @@ menuloop:
        jr  z,menuchange
        cp  K_EXIT
        jr  z,menuexit
        jr  z,menuchange
        cp  K_EXIT
        jr  z,menuexit
-       ld  hl,_invert
        cp  K_F1
        cp  K_F1
-       cal z,undo_invert
-       cp  K_F2
        cal z,do_invert
        cp  K_ENTER
        jr  nz,menuloop
 
        ld  a,(menuitem)
        dec a
        cal z,do_invert
        cp  K_ENTER
        jr  nz,menuloop
 
        ld  a,(menuitem)
        dec a
-       cal nz,New_game
-       jp  samelevel           ;game_main_loop
+       cal nz,New_game         ;NEW GAME
+       jp  samelevel           ;CONTINUE: game_main_loop
 
 menuexit:
        ld  hl,0
 
 menuexit:
        ld  hl,0
@@ -253,11 +251,15 @@ menuchange:
        ld  (menuitem),a
        jr  menuloop
 
        ld  (menuitem),a
        jr  menuloop
 
-do_invert:
-       ld  (hl),$2F ;cpl
-       ret
-undo_invert
-       ld  (hl),$B7 ;or a
+do_invert:                     ;invert screen (b<>w); destr:b
+       psh hl
+       ld  b,a                 ;psh a
+       ld  hl,_invert
+       ld  a,$98
+       xor (hl)                ;$2F (cpl) <-> $B7 (or a)
+       ld  (hl),a
+       ld  a,b                 ;pop a
+       pop hl
        ret
 
 ;----------------------------------------------------------------------------
        ret
 
 ;----------------------------------------------------------------------------
@@ -267,9 +269,10 @@ undo_invert
 game_main_loop:                        ;REPEATS FROM HERE EVERY FRAME
        ld  hl,timer            ;update time
        inc (hl)                ;increase by 1
 game_main_loop:                        ;REPEATS FROM HERE EVERY FRAME
        ld  hl,timer            ;update time
        inc (hl)                ;increase by 1
-       jr  nz,Clear_screen     ;continue when new time <> 0
-       ld  hl,1                ;once every 256 frames, increase score by 1
-       cal scoreInc            ;do it
+       ld  a,(hl)
+       and %11111
+       ld  hl,1                ;once every 32 frames, increase score by 1
+       cal z,scoreInc          ;do it
 
 Clear_screen:
        ld  hl,GRAPH_MEM        ;move from (hl) = top left
 
 Clear_screen:
        ld  hl,GRAPH_MEM        ;move from (hl) = top left
@@ -354,7 +357,10 @@ _gamestuff1:
        cal Level_event         ;insert enemies
        cal Display_Screen      ;display all
 
        cal Level_event         ;insert enemies
        cal Display_Screen      ;display all
 
+ ld  b,1
+___:
        halt                    ;delay
        halt                    ;delay
+ dnz ___
        jp  game_main_loop      ;LOOP ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 inc_weapdamage:
        jp  game_main_loop      ;LOOP ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 inc_weapdamage:
@@ -399,31 +405,30 @@ Handle_ground:
        jr  z,ground_tunnel     ;tunnel effect
 ground_boring:
        ld  a,(groundpos)       ;type 0
        jr  z,ground_tunnel     ;tunnel effect
 ground_boring:
        ld  a,(groundpos)       ;type 0
+       jr  newground+1
 
 ground_tunnel:
        ld  a,(groundpos+14)
        ld  d,a
        ld  hl,spacespace
 
 ground_tunnel:
        ld  a,(groundpos+14)
        ld  d,a
        ld  hl,spacespace
-
-       ld  bc,$201             ;range=1..3
-       cal Random              ;a=1-3
-       dec a
-       jr  z,newground         ;same if a=1
-       dec a
-       jr  z,gtunneldown       ;down if a=2
-gtunnelup:                     ;up   if a=3
-       ld  a,(hl)
+       ld  bc,$500             ;range=0..4
+       cal Random              ;a=0..4
+       dec a                   ;a=-1..3
+       dec a                   ;a=-2..2
+       ld  b,a
+       add a,(hl)              ;add to spacesize (so +2..-2)
+       cp  10
+       jr  c,newground         ;>=0 then don't change
+       ld  c,a
+       ld  a,d
+       add a,b                 ;new position
        or  a
        or  a
-       jr  z,newground         ;a>=0 (a=0 actually)
-       inc (hl)
-       inc d
-       jr  newground
-gtunneldown:
-       ld  a,1
-       cp  d
-       jr  z,newground
-       dec d
-       dec (hl)
+       jr  z,newground         ;may not be 0 (=256)
+       cp  -10
+       jr  nc,newground        ;and not be <0 (>246)
+diffground:
+       ld  d,a
+       ld  (hl),c
 newground:
        ld  a,d
        ld  (groundpos+15),a    ;save new byte on the right
 newground:
        ld  a,d
        ld  (groundpos+15),a    ;save new byte on the right
@@ -678,13 +683,22 @@ displayloop:
        ld  b,16                ;display width = 16 bytes (16*8bits=256pixels)
 displaytloop:
        ld  a,(hl)              ;copy byte from (hl)
        ld  b,16                ;display width = 16 bytes (16*8bits=256pixels)
 displaytloop:
        ld  a,(hl)              ;copy byte from (hl)
-_invert:
-       cpl                     ;xor $ff: invert byte (white<=>black)
+_invert:                       ;SMC: cpl <-> or a
+       cpl                     ;xor $ff: invert byte (white<=>black)
        ld  (de),a              ;to (de)
        inc hl \ inc de         ;next byte
        dnz displaytloop        ;16x hl >> de
        dec c                   ;next line
        ld  (de),a              ;to (de)
        inc hl \ inc de         ;next byte
        dnz displaytloop        ;16x hl >> de
        dec c                   ;next line
-       jr  nz,displayloop      ;loop 64x
+       jr  nz,displayloop      ;loop 56x
+
+       ld  hl,time2invert
+       ld  a,(hl)
+       or  a                   ;(time2invert)=0:
+       jr  z,noinvert          ; do nothing
+       dec a                   ;otherwise decrease
+       cal z,do_invert         ;if it became 0 then invert
+       ld  (hl),a              ;save new value
+noinvert:
 
        ld  hl,$396b            ;Display Score
        ld  (_penCol),hl        ;bottom right of screen
 
        ld  hl,$396b            ;Display Score
        ld  (_penCol),hl        ;bottom right of screen
@@ -715,9 +729,9 @@ Handle_Ship:
        inc a                   ;no! next (explosion)frame
        ld  (your_occ),a        ;save
 
        inc a                   ;no! next (explosion)frame
        ld  (your_occ),a        ;save
 
-       cp  34                  ;last explosion frame?
+       cp  64+1                ;last explosion frame? (1-16=1st;49-64=4th)
        jp  c,exploding_you     ;not yet: display explosion
        jp  c,exploding_you     ;not yet: display explosion
-       cp  40                  ;delay finished?
+       cp  64+16               ;delay finished?
        jp  z,You_die           ;yes = game over
        ret                     ;don't display anything
 
        jp  z,You_die           ;yes = game over
        ret                     ;don't display anything
 
@@ -781,6 +795,7 @@ no_right:
 
 no_up: ld  e,(hl)              ;e=y
        ld  ix,spr_ship01       ;normal ship sprite
 
 no_up: ld  e,(hl)              ;e=y
        ld  ix,spr_ship01       ;normal ship sprite
+your_shipspr =$-2
        ld  hl,your_inv         ;invulnerable?
        ld  a,(hl)              ;load time in a
        or  a                   ;is it 0?
        ld  hl,your_inv         ;invulnerable?
        ld  a,(hl)              ;load time in a
        or  a                   ;is it 0?
@@ -794,7 +809,8 @@ not_time:
        and %00000100           ;a switches 0<->1 every 2 frames
        jr  z,disp_ship         ;show normal ship
 inv_flicker:
        and %00000100           ;a switches 0<->1 every 2 frames
        jr  z,disp_ship         ;show normal ship
 inv_flicker:
-       ld  ix,spr_ship01i      ;display invulnerable ship
+       ld  bc,spr_ship01i-spr_ship01
+       add ix,bc               ;display invulnerable ship
 disp_ship:
        cal safeputsprite       ;display your ship; save de
 
 disp_ship:
        cal safeputsprite       ;display your ship; save de
 
@@ -841,16 +857,17 @@ mult_adv:
 
 exploding_you:
        srl a                   ;half the framerate
 
 exploding_you:
        srl a                   ;half the framerate
-       dec a                   ;first frame is 1>inc>srl>dec = 0
+       srl a                   ;half that framerate
+       srl a                   ;and half again that framerate
        ld  hl,x-1
        ld  hl,x-1
+       ld  ix,spr_yexplosion   ;base sprite
 
 
-explosion_stuff:               ;in:a=frame*2+(0 to 1); (hl)=xpos--
+explosion_stuff:               ;in:a=frame*2+(0 to 1); (hl)=xpos-- ix=sprite
        and %11111110
        add a,a
        add a,a                 ;frame*8
        ld  c,a
        ld  b,0                 ;bc=a
        and %11111110
        add a,a
        add a,a                 ;frame*8
        ld  c,a
        ld  b,0                 ;bc=a
-       ld  ix,spr_explosion    ;base sprite
        add ix,bc               ;go to correct sprite (each spr. is 8 bytes)
        inc hl
        ld  d,(hl)              ;load xpos
        add ix,bc               ;go to correct sprite (each spr. is 8 bytes)
        inc hl
        ld  d,(hl)              ;load xpos
@@ -861,9 +878,18 @@ explosion_stuff:           ;in:a=frame*2+(0 to 1); (hl)=xpos--
 ;----hit----
 
 damage_you:                    ;damages you B points
 ;----hit----
 
 damage_you:                    ;damages you B points
-       ld  a,(your_inv)        ;invulnerability left?
+       ld  a,(your_inv)        ;shield left?
        or  a
        or  a
-       ret nz                  ;return if inv>0
+       jr  z,dothadamage       ;no shield
+       srl b                   ;shield: half the damage
+dothadamage:
+       ld  hl,time2invert
+       xor a                   ;a=0
+       cp  (hl)                ;no already inverted?
+       cal z,do_invert         ;then invert screen
+       ld  a,2
+       ld  (hl),a              ;change back 2 frames from now
+
        ld  hl,your_armor       ;armor left
        ld  a,(hl)              ;load hp in A
        sub b                   ;decrease hp by B
        ld  hl,your_armor       ;armor left
        ld  a,(hl)              ;load hp in A
        sub b                   ;decrease hp by B
@@ -1098,8 +1124,7 @@ find_ybullet:
        jr  z,found_ybullet     ;0 = no bullet here
        add hl,de
        dnz find_ybullet        ;look next bullet
        jr  z,found_ybullet     ;0 = no bullet here
        add hl,de
        dnz find_ybullet        ;look next bullet
-       pop hl                  ;don't try to fire any other bullets
-       ret                     ;so ret twice
+       ret                     ;none found, return don't fire
 
 found_ybullet:
        ld  (hl),c              ;use the bullet and set correct bullet-type
 
 found_ybullet:
        ld  (hl),c              ;use the bullet and set correct bullet-type
@@ -1196,7 +1221,7 @@ display_bullet:
        dec hl                  ;@x
        dec hl                  ;@damage
        ld  a,(hl)              ;bullet damage=size
        dec hl                  ;@x
        dec hl                  ;@damage
        ld  a,(hl)              ;bullet damage=size
-       ld  hl,XLbullettable    ;pointer to first bullet
+       ld  hl,bullettable      ;pointer to first bullet
        srl a
        srl a                   ;per 4
        ld  d,0
        srl a
        srl a                   ;per 4
        ld  d,0
@@ -1361,8 +1386,9 @@ Level_event:
        or  a                   ;has it reached zero?
        ret nz                  ;nope: get outta here!
 
        or  a                   ;has it reached zero?
        ret nz                  ;nope: get outta here!
 
-       ld  a,0                 ;enemy frequency (lvl)
-eventtime =$-1
+       ld  bc,0                ;enemy frequency (lvl)
+eventtime =$-2
+       cal Random
        ld  (nextevent),a       ;set time to next event
        ld  hl,eventleft
        dec (hl)                ;update enemy-counter
        ld  (nextevent),a       ;set time to next event
        ld  hl,eventleft
        dec (hl)                ;update enemy-counter
@@ -1707,6 +1733,8 @@ exploding_enemy:
        jr  z,remove_enemy      ;remove when at last frame
        inc a
        ld  (hl),a              ;next frame
        jr  z,remove_enemy      ;remove when at last frame
        inc a
        ld  (hl),a              ;next frame
+       dec a                   ;1-16 -> 0-15
+       ld  ix,spr_explosion    ;base sprite
        cal explosion_stuff     ;display explosion
        jr  next_enemy
 
        cal explosion_stuff     ;display explosion
        jr  next_enemy
 
@@ -2047,7 +2075,22 @@ disp_icons:
        xor a                   ;blank line mask
        cal drawline            ;clear scorebar
 
        xor a                   ;blank line mask
        cal drawline            ;clear scorebar
 
-       cal disp_lives
+disp_lives:
+       ld  de,5                ;(0,5)
+       ld  a,(your_lives)      ;nr of lives
+       or  a
+       jr  z,displivesdone     ;no lives
+       ld  b,a
+displivesloop:
+       psh bc
+       ld  ix,spr_lship
+       cal safeputsprite       ;put li'l ship
+       ld  a,lshipsize+1
+       add a,d
+       ld  d,a                 ;x=x+5
+       pop bc
+       dnz displivesloop       ;one ship per life
+displivesdone:
 
        ld  ix,spr_icon01       ;armorIcon
        ld  de,$1901            ;icon #1
 
        ld  ix,spr_icon01       ;armorIcon
        ld  de,$1901            ;icon #1
@@ -2120,11 +2163,15 @@ iconsdone:
        ret
 
 disp_armor:
        ret
 
 disp_armor:
+       ld  de,16               ;line size
        ld  hl,(57*16)+VIDEO_MEM+3
        ld  b,3
 armorbarclr:
        dec hl
        ld  (hl),0
        ld  hl,(57*16)+VIDEO_MEM+3
        ld  b,3
 armorbarclr:
        dec hl
        ld  (hl),0
+       add hl,de
+       ld  (hl),0
+       sbc hl,de
        dnz armorbarclr
 
        ld  a,(your_armor)      ;load your armor
        dnz armorbarclr
 
        ld  a,(your_armor)      ;load your armor
@@ -2136,6 +2183,9 @@ armorbarclr:
        ld  b,a                 ;loop b=a times
 armorbar:                      ;starting at ($39*16)+VIDEO_MEM
        ld  (hl),%11111111      ;draw a piece of the bar
        ld  b,a                 ;loop b=a times
 armorbar:                      ;starting at ($39*16)+VIDEO_MEM
        ld  (hl),%11111111      ;draw a piece of the bar
+       add hl,de               ;one down (resets carry)
+       ld  (hl),%11111111      ;same piece
+       sbc hl,de               ;up again
        inc hl                  ;next position
        dnz armorbar            ;loop it b times
 
        inc hl                  ;next position
        dnz armorbar            ;loop it b times
 
@@ -2151,15 +2201,18 @@ armorbarbit:
        dnz armorbarbit         ;repeat B times (so if B=6 then a=%11111100)
 armorbarready:                 ;               (an if B=3 then a=%11100000)
        ld  (hl),a              ;draw this last byte
        dnz armorbarbit         ;repeat B times (so if B=6 then a=%11111100)
 armorbarready:                 ;               (an if B=3 then a=%11100000)
        ld  (hl),a              ;draw this last byte
+       add hl,de
+       ld  (hl),a              ;and just below
        ret
 
 disp_charge:
        ret
 
 disp_charge:
-       ld  hl,(58*16)+VIDEO_MEM+3
+       ld  hl,(59*16)+VIDEO_MEM+3
        ld  b,3
 chargebarclr:
        dec hl
        ld  (hl),0
        dnz chargebarclr
        ld  b,3
 chargebarclr:
        dec hl
        ld  (hl),0
        dnz chargebarclr
+
        ld  a,(weapincs)        ;load bar size (0-80)
        srl a                   ;half the size (0-40)
        srl a                   ;again half that size (0-20 pixels)
        ld  a,(weapincs)        ;load bar size (0-80)
        srl a                   ;half the size (0-40)
        srl a                   ;again half that size (0-20 pixels)
@@ -2172,7 +2225,7 @@ chargebarclr:
 chargebar:                     ;starting at ($39*16)+VIDEO_MEM
        ld  (hl),%11111111      ;draw a piece of the bar
        inc hl                  ;next position
 chargebar:                     ;starting at ($39*16)+VIDEO_MEM
        ld  (hl),%11111111      ;draw a piece of the bar
        inc hl                  ;next position
-       dnz armorbar            ;loop it b times
+       dnz chargebar           ;loop it b times
 nochargebar:
        ld  a,c                 ;pop a
        and %111                ;display last bits of chargebar
 nochargebar:
        ld  a,c                 ;pop a
        and %111                ;display last bits of chargebar
@@ -2187,36 +2240,30 @@ chargebarready:                 ;               (an if B=3 then a=%11100000)
        ld  (hl),a              ;draw this last byte
        ret
 
        ld  (hl),a              ;draw this last byte
        ret
 
-disp_lives:
-       ld  hl,$3A00            ;display Lives
-       ld  (_penCol),hl        ;bottom left
-       ld  hl,savestr+2
-       ld  (hl),'L'
-       inc hl
-       ld  (hl),'x'
-       inc hl
-
-       ld  a,(your_lives)      ;nr of lives in a
-       add a,'0'               ;make digit
-       ld  (hl),a
-       dec hl \ dec hl
-       jp  _vputs              ;display on screen +ret
-
 ;--------------------------- proc -------------------------------------------
 
 Random:                                ;a=c<random<b+c; destr:none
 ;--------------------------- proc -------------------------------------------
 
 Random:                                ;a=c<random<b+c; destr:none
-       ld a,r
-       add a,0                 ;increase last value by 0-255 (r)
-ranseed =$-1
-       ld (ranseed),a          ;save for next time
-       cp b                    ;a>=b
-       jr nc,Random            ;then add again
+       psh hl
+       ld  hl,rancount         ;amount to increase with (0-255)
+randomloop:
+       inc (hl)                ;change for next time
+       ld  a,r                 ;value $0-7F (can be _anything_ so watch out!)
+       add a,0                 ;add to last random value
+ranseed =$-1                   ;SMC :P
+       add a,(hl)              ;add the changing increase value
+                       ;(this is because R can be anything;
+                       ; ie always be even so freeze when a must be 1<=a<=1)
+       ld  (ranseed),a         ;save for next time
+       cp  b                   ;a>=b
+       jr  nc,randomloop       ;then add again
        add a,c                 ;a<b; a=a+c
        add a,c                 ;a<b; a=a+c
+       pop hl
        ret
        ret
+rancount: .db 0
 
 RandomY:                       ;HL = random Y 0..50 right side ((1..51)*16-1)
        psh bc
 
 RandomY:                       ;HL = random Y 0..50 right side ((1..51)*16-1)
        psh bc
-       ld  bc,1+50*256         ;range=1..51
+       ld  bc,50*256+1         ;range=1..51
        cal Random              ;a = 1..51
        ld  h,0
        ld  l,a                 ;hl = 1..51
        cal Random              ;a = 1..51
        ld  h,0
        ld  l,a                 ;hl = 1..51
@@ -2447,6 +2494,7 @@ restore_line:
 
 New_game:                      ;stack must be +1 (so change the jp in cal :)
        xor a                   ;ld a,0
 
 New_game:                      ;stack must be +1 (so change the jp in cal :)
        xor a                   ;ld a,0
+       ld  (time2invert),a     ;keep the screen as it is
        ld  (your_score),a      ;reset score
        ld  (your_score+1),a    ;reset score (0)
        ld  (torp_occ),a        ;no torpedoes
        ld  (your_score),a      ;reset score
        ld  (your_score+1),a    ;reset score (0)
        ld  (torp_occ),a        ;no torpedoes
@@ -2503,11 +2551,14 @@ addok:
        ld  b,0                 ;advance one level
        ld  c,(hl)
        add hl,bc               ;passed the enemies
        ld  b,0                 ;advance one level
        ld  c,(hl)
        add hl,bc               ;passed the enemies
-       ld  c,1+6+32+4
+       ld  c,1+7+32+4
        add hl,bc               ;update to point to next level
        ld  (levelp),hl         ;save
 
 samelevel:
        add hl,bc               ;update to point to next level
        ld  (levelp),hl         ;save
 
 samelevel:
+       ld  hl,(your_ship)
+       ld  (your_shipspr),hl
+
        ld  a,80
        ld  (nextevent),a       ;time to first enemy appearance
 
        ld  a,80
        ld  (nextevent),a       ;time to first enemy appearance
 
@@ -2524,7 +2575,10 @@ samelevel:
        ld  de,lvlenemies       ;table of enemies
        ldir                    ;load enemies to table
        ld  a,(hl)              ;load new appearance-time
        ld  de,lvlenemies       ;table of enemies
        ldir                    ;load enemies to table
        ld  a,(hl)              ;load new appearance-time
-       ld  (eventtime),a       ;set
+       ld  (eventtime),a
+       inc hl
+       ld  a,(hl)
+       ld  (eventtime+1),a     ;set
        inc hl
        ld  a,(hl)              ;load nr of enemies in this level
        ld  (eventleft),a       ;set nr of events left
        inc hl
        ld  a,(hl)              ;load nr of enemies in this level
        ld  (eventleft),a       ;set nr of events left
@@ -2563,6 +2617,9 @@ samelevel:
        ld  a,1                 ;if so, set to "ready to fire" (=1)
 torpsclear:
 
        ld  a,1                 ;if so, set to "ready to fire" (=1)
 torpsclear:
 
+       ld  a,(your_weapon)
+       cal loadweapon
+
        ld  hl,enemies          ;remove all enemies and bullets
        ld  (hl),0              ;clear first byte
        ld  de,enemies+1        ;copy this to the next byte
        ld  hl,enemies          ;remove all enemies and bullets
        ld  (hl),0              ;clear first byte
        ld  de,enemies+1        ;copy this to the next byte
@@ -2671,7 +2728,7 @@ CSclipleft:
                                ;b=5: a=%00000111
                                ;b=6: a=%00000011
                                ;b=7: a=%00000001
                                ;b=5: a=%00000111
                                ;b=6: a=%00000011
                                ;b=7: a=%00000001
-       res 7,d                 ;subtract 128, if X was -1 (255) it is now 127
+       res 7,d                 ;X+128 (right side of screen)
        dec e                   ;Y--
        jr  CSdisplay           ;done clipping
 
        dec e                   ;Y--
        jr  CSdisplay           ;done clipping
 
@@ -2945,13 +3002,37 @@ spr_explosion:
        .db %00100100   ;   █▒ █
 
 spr_yexplosion:
        .db %00100100   ;   █▒ █
 
 spr_yexplosion:
-       .db 8,6         ;8
-       .db %00000000   ;
-       .db %00000000   ;
-       .db %00000000   ;
-       .db %00000000   ;
-       .db %00000000   ;
-       .db %00000000   ;
+       .db 8,5         ;1
+       .db %00000000
+       .db %00101100   ;  █ ██
+       .db %00011110   ;   ████
+       .db %00110100   ;  ██ █
+       .db %00011000   ;   ██
+       .db %00000000
+
+       .db 8,5         ;2
+       .db %00111000   ;  ███
+       .db %01011100   ; █ ███
+       .db %10010111   ;█  █ ███
+       .db %01000110   ; █   ██
+       .db %00111000   ;  ███
+       .db %00000000
+
+       .db 8,6         ;3
+       .db %00111100   ;   ████
+       .db %01001111   ; █  ████
+       .db %10100011   ;█ █   ██
+       .db %11000110   ;██   ██
+       .db %01110101   ; ███ █ █
+       .db %00111000   ;  ███
+
+       .db 8,6         ;4
+       .db %00110110   ;  ██ ██
+       .db %00000101   ;     █ █
+       .db %11000001   ;██     █
+       .db %01100001   ; ██    █
+       .db %11000010   ;██    █
+       .db %01010001   ; █ █   █
 
 ;--------------------------------- bullets ----------------------------------
 
 
 ;--------------------------------- bullets ----------------------------------
 
@@ -3037,7 +3118,7 @@ spr_bullete1:
        .db %11110000   ;████▒
        .db %01100000   ; ██▒
 
        .db %11110000   ;████▒
        .db %01100000   ; ██▒
 
-XLbullettable:
+bullettable:
        .db (spr_bullet01-spr_bullet01) ;0
        .db (spr_bullet02-spr_bullet01) ;4
        .db (spr_bullet03-spr_bullet01) ;8
        .db (spr_bullet01-spr_bullet01) ;0
        .db (spr_bullet02-spr_bullet01) ;4
        .db (spr_bullet03-spr_bullet01) ;8
@@ -3073,6 +3154,13 @@ collidedamage = 4
 
 ;------------------------------------ bar -----------------------------------
 
 
 ;------------------------------------ bar -----------------------------------
 
+spr_lship:
+       .db 5,3
+       .db %11100000
+       .db %01111000
+       .db %11100000
+lshipsize = 5
+
 spr_icon:
        .db 16,7        ;selected .......:.......:
        .db %11111111           ; ████████████████
 spr_icon:
        .db 16,7        ;selected .......:.......:
        .db %11111111           ; ████████████████
@@ -3229,7 +3317,8 @@ storesave_start:
 level          .db $01                 ;level number
 levelp         .dw level01             ;pointer to level data
 pickuptimer    .db $04                 ;counts when to place a pickup
 level          .db $01                 ;level number
 levelp         .dw level01             ;pointer to level data
 pickuptimer    .db $04                 ;counts when to place a pickup
-your_score     .dw $0000
+your_ship      .dw spr_ship04          ;your sprite
+your_score     .dw $0000               ;current score
 
 your_pickup    .db $04
 your_occ       .db $00                 ;0=normal 1..16=exploding
 
 your_pickup    .db $04
 your_occ       .db $00                 ;0=normal 1..16=exploding
@@ -3243,30 +3332,37 @@ torp_occ        .db $00                 ;torp.state: 0=unavail 1=avail 2=presnt
 torp_pos       .dw $0000               ;torpedo position (x,y)
 storesave_end:
 
 torp_pos       .dw $0000               ;torpedo position (x,y)
 storesave_end:
 
-
 ;XLlevelsdata:---------------------------------------------------------------
 
 level00:
        .db 0                           ;story identifier
        .db $21,$1d,"Cosmic year 6716"          ,0,0,$1d,$06
 ;XLlevelsdata:---------------------------------------------------------------
 
 level00:
        .db 0                           ;story identifier
        .db $21,$1d,"Cosmic year 6716"          ,0,0,$1d,$06
-       .db $1b,$1d,"storyline coming soon..."  ,0,0,$1d,$06
-       .db $09,$19,"the Nemesis saga continues",0,1
-       .db $2e,$21,"with NEMESIS 86"           ,0,1
+       .db $1b,$1d,"STORYLINE COMING SOON"     ,0,0,$1d,$06
+       .db $09,$19,"STORYLINE COMING SOON"     ,0,1
+       .db $2e,$21,"**** NEMESIS 86"           ,0,1
        .db $52,$36,"by Shiar"                  ,0,0,$19,$23
        .db $ff                         ;story end
 
 ;format:[nr.dif.enemies]x [enemy nr]
        .db $52,$36,"by Shiar"                  ,0,0,$19,$23
        .db $ff                         ;story end
 
 ;format:[nr.dif.enemies]x [enemy nr]
-;      [enemy frequency] [next lvl]
+;      [min. enemy frequency] [enemy frequency max.inc] [next lvl]
 ;      [level_info: 0000:damage 0:directfire 0:ground 0:ceiling 0:diagfire]
 ;      [level_move] [tunnel size] [groundtype]
 ;      [16_ground] [16_ceiling] [stars1] [stars2]
 
        .db $07,$08                     ;moveType; enemyType
 level01:                               ;efrequency must be odd if halfluring!
 ;      [level_info: 0000:damage 0:directfire 0:ground 0:ceiling 0:diagfire]
 ;      [level_move] [tunnel size] [groundtype]
 ;      [16_ground] [16_ceiling] [stars1] [stars2]
 
        .db $07,$08                     ;moveType; enemyType
 level01:                               ;efrequency must be odd if halfluring!
-       .db 3,$01,$02,$03
-       .db $1b,$2f,%00010000
-       .db 0
-       .db 0,0
+       .db 3,1,2,3
+       .db 6,10,180,%00000000
+       .db 2,0,0
+       .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
+       .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+       .db 1,1
+
+       .db $07,$08                     ;moveType; enemyType
+level02:                               ;efrequency must be odd if halfluring!
+       .db 3,4,5,6
+       .db 30,1,40,%00010000
+       .db 0,0,0
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
@@ -3283,10 +3379,10 @@ level01:                                ;efrequency must be odd if halfluring!
        .db $FF
 
        .db $07,$09
        .db $FF
 
        .db $07,$09
-level02:
+level03:
        .db 1,$02
        .db 1,$02
-       .db $13,$4b,%00100100,0,0,0
-       .db 1,2,3,4,5,6,6,5,4,3,4,5,4,3,2,1
+       .db $13,40,$4b,%00100100,0,-5,1
+       .db 1,2,3,4,5,6,6,5,4,3,4,5,4,5,6,5
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
 
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
 
@@ -3298,7 +3394,7 @@ level02:
        .db $FF
 
        .db $07,$09
        .db $FF
 
        .db $07,$09
-level03:
+level03a:
        .db 1,$03
        .db $2d,$3f,%00010110,0,-9,1
        .db 3,2,4,3,2,2,1,1,1,1 ,1,1,21,17,18,20
        .db 1,$03
        .db $2d,$3f,%00010110,0,-9,1
        .db 3,2,4,3,2,2,1,1,1,1 ,1,1,21,17,18,20
@@ -3337,12 +3433,16 @@ level07:
 
 ;------------------------------ enemies -------------------------------------
 
 
 ;------------------------------ enemies -------------------------------------
 
-;format: [000000:HP 00:occ] [HP64] [sprite] [appearance(ypos)]
+;format: [HP64] [000000:HP 00:occ] [sprite] [appearance(ypos)]
 ;       [time2fire] [firefreq] [0] [0]
 enemyspecs:
 ;       [time2fire] [firefreq] [0] [0]
 enemyspecs:
-       .db 0,%00100110,(spr_enemy01-spr_enemy00)/2,1,10,10,0,0 ;#1
-       .db 0,%00101010,(spr_enemy02-spr_enemy00)/2,3,20,20,0,0 ;#2
-       .db 0,%00001111,(spr_enemy03-spr_enemy00)/2,2,100,5,0,0 ;#3
+       .db 0,%00100110,(spr_enemy01-spr_enemy00)/2,1,0,0,0,0   ;#1
+       .db 0,%00111111,(spr_enemy02-spr_enemy00)/2,1,0,0,0,0   ;#2
+       .db 0,%01011010,(spr_enemy03-spr_enemy00)/2,1,0,0,0,0   ;#2
+
+       .db 0,%00100110,(spr_enemy04-spr_enemy00)/2,1,1,46,0,0  ;#1
+       .db 0,%00101010,(spr_enemy05-spr_enemy00)/2,3,39,13,0,0 ;#2
+       .db 0,%00001111,(spr_enemy06-spr_enemy00)/2,2,87,5,0,0  ;#3
 
        .db 0,%00000110,(spr_enemy04-spr_enemy00)/2,2,0,0,0,0   ;#4
        .db 0,%00000111,(spr_enemy05-spr_enemy00)/2,3,0,0,0,0   ;#5
 
        .db 0,%00000110,(spr_enemy04-spr_enemy00)/2,2,0,0,0,0   ;#4
        .db 0,%00000111,(spr_enemy05-spr_enemy00)/2,3,0,0,0,0   ;#5
@@ -3351,7 +3451,7 @@ enemyspecs:
        .db 0,%00011011,(spr_enemy07-spr_enemy00)/2,3,0,0,0,0   ;#7
 
        .db 1,%00110011,(spr_boss0_1-spr_enemy00)/2,1,15,10,0,0 ;boss1
        .db 0,%00011011,(spr_enemy07-spr_enemy00)/2,3,0,0,0,0   ;#7
 
        .db 1,%00110011,(spr_boss0_1-spr_enemy00)/2,1,15,10,0,0 ;boss1
-       .db 1,%11001011,(spr_boss0_2-spr_enemy00)/2,3,10,8,0,0  ;boss2
+       .db 1,%01001011,(spr_boss0_2-spr_enemy00)/2,3,10,8,0,0  ;boss2
 
        .db 0,%00000000,0,0,0,0,0,0
        .db 0,%00000000,0,0,0,0,0,0
 
        .db 0,%00000000,0,0,0,0,0,0
        .db 0,%00000000,0,0,0,0,0,0
@@ -3373,6 +3473,34 @@ spr_enemy00:
        .db %00011000                   ;    ██
 
 spr_enemy01:
        .db %00011000                   ;    ██
 
 spr_enemy01:
+       .db 7,6                         ;enemy type one
+       .db %00011000                   ;   ██
+       .db %01111100                   ; █████
+       .db %11111110                   ;███████
+       .db %11111110                   ;███████
+       .db %11111100                   ;██████
+       .db %01110000                   ; ███
+spr_enemy02:
+       .db 8,7                         ;enemy type two
+       .db %00111100                   ;  ████
+       .db %01111110                   ; ██████
+       .db %01111111                   ; ███████
+       .db %11111111                   ;████████
+       .db %11111111                   ;████████
+       .db %11110110                   ;████ ██
+       .db %01100000                   ; ██
+       .db 0
+spr_enemy03:
+       .db 8,8                         ;enemy type three
+       .db %00011110                   ;   ████
+       .db %01110011                   ; ███  ██
+       .db %01111101                   ; █████ █
+       .db %11111111                   ;████████
+       .db %11111110                   ;███████
+       .db %11111110                   ;████████
+       .db %01111110                   ; ███████
+       .db %00011100                   ;    ███
+spr_enemy04:
        .db 6,6                         ;enemy type one
        .db %00111100                   ;   ████
        .db %01110000                   ;  ███
        .db 6,6                         ;enemy type one
        .db %00111100                   ;   ████
        .db %01110000                   ;  ███
@@ -3380,7 +3508,7 @@ spr_enemy01:
        .db %11110000                   ; ████
        .db %01110000                   ;  ███
        .db %00111100                   ;   ████
        .db %11110000                   ; ████
        .db %01110000                   ;  ███
        .db %00111100                   ;   ████
-spr_enemy02:
+spr_enemy05:
        .db 8,6                         ;enemy type two
        .db %00111111                   ;    █████
        .db %01111000                   ;  ████
        .db 8,6                         ;enemy type two
        .db %00111111                   ;    █████
        .db %01111000                   ;  ████
@@ -3388,7 +3516,7 @@ spr_enemy02:
        .db %11111100                   ; ██████
        .db %01111000                   ;  ████
        .db %00111111                   ;    █████
        .db %11111100                   ; ██████
        .db %01111000                   ;  ████
        .db %00111111                   ;    █████
-spr_enemy03:
+spr_enemy06:
        .db 6,6                         ;enemy type three
        .db %01111100                   ;  █████
        .db %11110000                   ; ████
        .db 6,6                         ;enemy type three
        .db %01111100                   ;  █████
        .db %11110000                   ; ████
@@ -3396,7 +3524,7 @@ spr_enemy03:
        .db %11111000                   ; █████
        .db %11110000                   ; ████
        .db %01111100                   ;  █████
        .db %11111000                   ; █████
        .db %11110000                   ; ████
        .db %01111100                   ;  █████
-spr_enemy04:
+spr_enemy06A:
        .db 6,6                         ;enemy type four
        .db %00111000                   ;   ███
        .db %01111100                   ;  █████
        .db 6,6                         ;enemy type four
        .db %00111000                   ;   ███
        .db %01111100                   ;  █████
@@ -3404,7 +3532,7 @@ spr_enemy04:
        .db %11111000                   ; █████
        .db %01111100                   ;  █████
        .db %00111000                   ;   ███
        .db %11111000                   ; █████
        .db %01111100                   ;  █████
        .db %00111000                   ;   ███
-spr_enemy05:
+spr_enemy07:
        .db 7,6                         ;enemy type five
        .db %00011110                   ;    ████
        .db %01111110                   ;  ██████
        .db 7,6                         ;enemy type five
        .db %00011110                   ;    ████
        .db %01111110                   ;  ██████
@@ -3412,7 +3540,7 @@ spr_enemy05:
        .db %11111100                   ; ██████
        .db %01111110                   ;  ██████
        .db %00011110                   ;    ████
        .db %11111100                   ; ██████
        .db %01111110                   ;  ██████
        .db %00011110                   ;    ████
-spr_enemy06:
+spr_enemy08:
        .db 7,6                         ;enemy type six
        .db %00011100                   ;    ███
        .db %01111110                   ;  ██████
        .db 7,6                         ;enemy type six
        .db %00011100                   ;    ███
        .db %01111110                   ;  ██████
@@ -3420,7 +3548,7 @@ spr_enemy06:
        .db %10111000                   ; █ ███
        .db %01111110                   ;  ██████
        .db %00011100                   ;    ███
        .db %10111000                   ; █ ███
        .db %01111110                   ;  ██████
        .db %00011100                   ;    ███
-spr_enemy07:
+spr_enemy09:
        .db 8,6                         ;enemy type seven
        .db %00011110                   ;    ████
        .db %01111111                   ;  ███████
        .db 8,6                         ;enemy type seven
        .db %00011110                   ;    ████
        .db %01111111                   ;  ███████
@@ -3428,7 +3556,7 @@ spr_enemy07:
        .db %10011100                   ; █  ███
        .db %01111111                   ;  ███████
        .db %00011110                   ;    ████
        .db %10011100                   ; █  ███
        .db %01111111                   ;  ███████
        .db %00011110                   ;    ████
-spr_enemy08:
+spr_enemy10:
        .db 8,6                         ;enemy type seven
        .db %00011110                   ;    ████
        .db %01111111                   ;  ███████
        .db 8,6                         ;enemy type seven
        .db %00011110                   ;    ████
        .db %01111111                   ;  ███████
@@ -3438,6 +3566,48 @@ spr_enemy08:
        .db %00011110                   ;    ████
 
 spr_boss0_1:
        .db %00011110                   ;    ████
 
 spr_boss0_1:
+       .db 16,19                       ;boss type one  :
+       .db %00000000                   ;         █ █
+       .db %00000111                   ;     ███ ███
+       .db %00000011                   ;      ████ █
+       .db %00000001                   ;       ██ ██
+       .db %00000011                   ;      ███ ██
+       .db %00000000                   ;        █████
+       .db %00010111                   ;   █ ██████████
+       .db %00111111                   ;  ██████ ██ ██
+       .db %11111000                   ;█████   ██ █ ███
+       .db %00001111                   ;    █████ ██ █ █
+       .db %11111000                   ;█████   ██ █ ███
+       .db %00111111                   ;  ██████ ██ ██
+       .db %00010111                   ;   █ ██████████
+       .db %00000000                   ;        █████
+       .db %00000011                   ;      ███ ██
+       .db %00000001                   ;       ██ ██
+       .db %00000011                   ;      ████ █
+       .db %00000111                   ;     ███ ███
+       .db %00000000                   ;         █ █
+       .db 19
+       .db %01010000
+       .db %01110000
+       .db %11010000
+       .db %10110000
+       .db %10110000
+       .db %11111000
+       .db %11111110
+       .db %01101100
+       .db %11010111
+       .db %10110101
+       .db %11010111
+       .db %01101100
+       .db %11111110
+       .db %11111000
+       .db %10110000
+       .db %10110000
+       .db %11010000
+       .db %01110000
+       .db %01010000
+       .db 0
+spr_boss0_2:
        .db 16,10                       ;boss type one   :
        .db %00000001                   ;        █████████
        .db %00001111                   ;     ███████████
        .db 16,10                       ;boss type one   :
        .db %00000001                   ;        █████████
        .db %00001111                   ;     ███████████
@@ -3460,7 +3630,8 @@ spr_boss0_1:
        .db %11110000
        .db %11111110
        .db %11111111
        .db %11110000
        .db %11111110
        .db %11111111
-spr_boss0_2:
+       .db 0
+spr_boss0_3:
        .db 16,10                       ;boss type:one   :
        .db %11111110                   ; ███████
        .db %00001111                   ;     █████   ████
        .db 16,10                       ;boss type:one   :
        .db %11111110                   ; ███████
        .db %00001111                   ;     █████   ████
@@ -3483,6 +3654,7 @@ spr_boss0_2:
        .db %11100011
        .db %10001111
        .db %00000000
        .db %11100011
        .db %10001111
        .db %00000000
+       .db 0
 
 ;----------------------------------------------------------------------------
 ;----------------------------- logo ------------------------------------------
 
 ;----------------------------------------------------------------------------
 ;----------------------------- logo ------------------------------------------
@@ -3558,6 +3730,17 @@ logo_nemesis:
 ;      * the frequency an enemy fires bullets is defined per enemy
 ;      + wide clipped sprites implemented (width 1-16 pixels)
 ;      # bosses first move left until x=100, otherwise they'd be off-screen
 ;      * the frequency an enemy fires bullets is defined per enemy
 ;      + wide clipped sprites implemented (width 1-16 pixels)
 ;      # bosses first move left until x=100, otherwise they'd be off-screen
+;      * at status bar left below ships are displayed for lives left
+;      * armor bar is two pixels high (better visible)
+;      # bullet overflow fixed again (>63 bullets fired)
+;      # correct weapon loaded when continuing a saved game
+;      # game doesn't freeze when generating a random value <=1
+;      * you explode in a different way than the enemies
+;      + screen inverts for a brief time when you are hit!
+;      # stats-bar was messed up when ya got 0 lives left
+;      * new (big) boss; "asteroids" level #1
+;      * score increased once every 32 frames (instead of 256)
+;      # ground fixed for new random routine (smaller routine; incs -2 to 2)
 ;
 ;
 ;       + added        - removed       * changed       # bug fixed
\ No newline at end of file
 ;
 ;
 ;       + added        - removed       * changed       # bug fixed
\ No newline at end of file