version 1.0 rc1: minor improvements, laser hit
authorMischa Poslawsky <nemesis@shiar.org>
Mon, 23 Oct 2000 11:19:02 +0000 (13:19 +0200)
committerMischa Poslawsky <nemesis@shiar.org>
Wed, 18 Mar 2009 04:20:18 +0000 (05:20 +0100)
* armor-bar background, empty upgrades sprites changed
+ shows sprite when laser hits an enemy (his "shield"?)
+ exit-key also quits out of ship selection screen
# fixed direct-quit on death bug (bug since recent optimization)
* armor-bar background changed (more elegant and smaller code)
# "flash" when end-boss spawns mine fixed
+ enemy's y start position can be specified per enemy
* first icon is now laser, second one's bullets (later undone again)
# when bullets selected, upgrade icons won't appear half the time
# remainder pixels in armor bar (appeared after heavy damage) removed
+ your ship's explosion is now also 8 frames (half enemy expl. speed)

nemesis.txt
nemesis.z80

index fae34882795865c811b886e1d5dac0b7abb4665b..e7ff9a06a74dd330d10848c52c7fb6eb954878ff 100644 (file)
@@ -1,9 +1,23 @@
 ------------------------------------------------------------------------------
 ------------------------------------------------------------------------------
+
+█████████████████ ████████ ███████████ ████████ ████████   █ █████████████████
+ ████████████████ ████████ ███████████ ████████ ████████ ███ ████████████████
+           █  ███   █        █   █ ███   █        █        █   █
+          ██  ███  ██       ██  ██ ███  ██       ██       ██  ██
+         ███  ███ ██████   ███ ███ ███ ██████   ████████ ███ ████████
+         ███  ███ ██████   ███ ███ ███ ██████   ████████ ███ ████████
+         ███  ███ ███      ███ ███ ███ ███           ███ ███      ███
+         ███  ███ ███      ███ ███ ███ ███           ███ ███      ███
+         ███  ███ ████████ ███ ███ ███ ████████ ████████ ███ ████████     v1.0
+         ███  ███ ████████ ███ ███ ███ ████████ ████████ ███ ████████ by SHIAR
+
+------------------------------------------------------------------------------
+
  Title                         : Nemesis
  Title                         : Nemesis
- Version                       : 0.99.99 Beta
- Release Date                  : 9.IX.00
- Filename                      : nemesis.86p (size 6939)
- Author(s)                     : Shiar
+ Version                       : 1.0.A23 Beta
+ Release Date                  : 23.X.00
+ Filename                      : nemesis.86p (size 7212)
+ Author                        : Shiar
  Email Address                 : shiar0@hotmail.com
  Web Page                      : http://www.shiar.org
  Description                   : cool arcade-shoot-em-up-game
  Email Address                 : shiar0@hotmail.com
  Web Page                      : http://www.shiar.org
  Description                   : cool arcade-shoot-em-up-game
@@ -17,6 +31,8 @@
 ten levels, and should never crash your calc. Report any bugs or imperfections
 to me. Thanks, and have fun!
 
 ten levels, and should never crash your calc. Report any bugs or imperfections
 to me. Thanks, and have fun!
 
+  (No comments on levels, storyline and difficulty plz, working on that)
+
 
 >>>>>>> INTRO TO NEMESIS -----------------------------------------------------
 
 
 >>>>>>> INTRO TO NEMESIS -----------------------------------------------------
 
@@ -75,14 +91,14 @@ You can have four of them.
 
   4 - SCORE: If you collect four pickups, your score will be increased by 250
 points. This is for the real hardcore shmuppers who don't need no skinkin'
 
   4 - SCORE: If you collect four pickups, your score will be increased by 250
 points. This is for the real hardcore shmuppers who don't need no skinkin'
-upgrades,
+upgrades.
 
 
 >>>>>>> BETA STUFF -----------------------------------------------------------
 
   Continue to send me any IDEAS and BUGS found!! Or send me you like this
 program, or even send me something if you don't. Again: shiar@mailroom.com,
 
 
 >>>>>>> BETA STUFF -----------------------------------------------------------
 
   Continue to send me any IDEAS and BUGS found!! Or send me you like this
 program, or even send me something if you don't. Again: shiar@mailroom.com,
-or ICQ #43840958! PLEASE!
+PLEASE!
 
   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
 
   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
index 3cbb88ea324d8c49739394a1e1d2ec5f05b4b58b..495d581bc5298180ca76eaab912e02fd8c311ebd 100644 (file)
@@ -84,7 +84,7 @@ lvlenemies    = ebullets+(nrebuls*3)  ;-1032
        .dw Title               ;pointer to description (all shells)
        .dw Icon                ;pointer to YAS icon
 
        .dw Title               ;pointer to description (all shells)
        .dw Icon                ;pointer to YAS icon
 
-Title: .db "Nemesis v0.99.99 by SHIAR",0
+Title: .db "Nemesis v1.0.A23 by SHIAR",0
 
 Icon:  .db 8,1                 ;icon for YAS: width = 1byte; height = 7bytes
        .db %11100000           ; ███
 
 Icon:  .db 8,1                 ;icon for YAS: width = 1byte; height = 7bytes
        .db %11100000           ; ███
@@ -211,7 +211,7 @@ menuchange:
 start_tha_freakin_game:
        ld  a,(hl)              ;(menuitem)
        dec a                   ;new game=0; so that gives -1 = NZ
 start_tha_freakin_game:
        ld  a,(hl)              ;(menuitem)
        dec a                   ;new game=0; so that gives -1 = NZ
-       cal nz,New_game         ;NEW GAME
+       jp  nz,New_game         ;NEW GAME
        jp  samelevel           ;CONTINUE: game_main_loop
 
 menuexit:
        jp  samelevel           ;CONTINUE: game_main_loop
 
 menuexit:
@@ -754,8 +754,9 @@ Handle_Ship:
        cp  64+1                ;last explosion frame? (1-16=1st;49-64=4th)
        jp  c,exploding_you     ;not yet: display explosion
        cp  64+16               ;delay finished?
        cp  64+1                ;last explosion frame? (1-16=1st;49-64=4th)
        jp  c,exploding_you     ;not yet: display explosion
        cp  64+16               ;delay finished?
+       ret nz                  ;no, don't display anything (&return)
+       pop hl                  ;restore stack (cuzzof call)
        jp  z,You_die           ;yes = game over
        jp  z,You_die           ;yes = game over
-       ret                     ;don't display anything
 
 ;----move----
 ok:                            ;we are
 
 ;----move----
 ok:                            ;we are
@@ -884,8 +885,7 @@ dispmultiplesloop:
 
 exploding_you:
        srl a                   ;half the framerate
 
 exploding_you:
        srl a                   ;half the framerate
-       srl a                   ;half that framerate
-       srl a                   ;and half again that framerate
+       srl a                   ;and half that framerate
        ld  hl,x-1
        ld  ix,spr_yexplosion   ;base sprite
 
        ld  hl,x-1
        ld  ix,spr_yexplosion   ;base sprite
 
@@ -968,8 +968,9 @@ select:
        dec a                   ;is it 1?
        ret m                   ;return if it's 0 (no pickups)
 
        dec a                   ;is it 1?
        ret m                   ;return if it's 0 (no pickups)
 
-       jr  nz,selectlaser      ;no, carry on
-       ld  (hl),a              ;reset pickups
+       ld  (hl),0              ;reset pickups
+       jr  nz,selectlaser      ;no, carry on again
+selectbeam:
        ld  a,(de)              ;(your_weapon)
        inc a                   ;next
        cp  maxweapon
        ld  a,(de)              ;(your_weapon)
        inc a                   ;next
        cp  maxweapon
@@ -984,8 +985,7 @@ selectedbeam:
        jr  disp_icons          ;display n return
 selectlaser:
        dec a                   ;is it 2?
        jr  disp_icons          ;display n return
 selectlaser:
        dec a                   ;is it 2?
-       ld  (hl),0              ;reset pickups
-       jr  nz,selectextra      ;no, carry on again
+       jr  nz,selectextra      ;no, carry on
        ld  (your_extra),a      ;no extra beams (tailbeam/up-double)
        ld  a,(de)              ;(your_weapon)
        cp  maxweapon           ;upgrade from bullet?
        ld  (your_extra),a      ;no extra beams (tailbeam/up-double)
        ld  a,(de)              ;(your_weapon)
        cp  maxweapon           ;upgrade from bullet?
@@ -1051,37 +1051,33 @@ displivesloop:
 displivesdone:
        cal disp_armor          ;display bar
 
 displivesdone:
        cal disp_armor          ;display bar
 
-       ld  ix,spr_icon00
+       ld  ix,spr_icon00       ;emptyIcon
        ld  a,(your_weapon)     ;ur weapon
        ld  a,(your_weapon)     ;ur weapon
-       cp  maxweapon           ;laser?
+       cp  maxweapon           ;bullets?
        psh af                  ;a=(your_weapon); cf=bullets
        jr  nc,no_bullets       ;=laser
        ld  hl,$3945            ;position to display bullet-type digit
        psh af                  ;a=(your_weapon); cf=bullets
        jr  nc,no_bullets       ;=laser
        ld  hl,$3945            ;position to display bullet-type digit
-       pop af                  ;digit=(your_weapon)
-       psh af
        inc a                   ;1 = weapon #1 (=0)
        ld  (_penCol),hl        ;set location
        add a,'0'               ;make digit
        cal _vputmap            ;display char
        inc a                   ;1 = weapon #1 (=0)
        ld  (_penCol),hl        ;set location
        add a,'0'               ;make digit
        cal _vputmap            ;display char
-       ld  ix,spr_icon03       ;bulletIcon
+       ld  ix,spr_icon04       ;bulletIcon
 no_bullets:
 no_bullets:
-       ld  de,$3939            ;icon #1
-       cal putwidesprite       ;display icon (beamweap)
+       ld  de,$3939            ;icon #2
+       cal putwidesprite       ;(beamweap)
 
 
-       ld  ix,spr_icon00       ;emptyIcon
-       pop af                  ;ld a,(your_weapon)
-       ld  b,a
+       ld  ix,spr_icon00
+       pop af                  ;ld a,(your_weapon) \ cp maxweapon
        jr  c,no_laser          ;popped carry
        jr  c,no_laser          ;popped carry
-       ld  hl,$3955            ;position to display bullet-type digit
+       ld  hl,$3955            ;position to display laser-type digit
        ld  (_penCol),hl        ;set location
        ld  (_penCol),hl        ;set location
-       ld  a,b                 ;(your_weapon)  ;load = faster than push
-       sub maxweapon-1         ;1 = laser #1 (=maxweapon)
+       sub maxweapon-1         ;1 = laser #1 (=maxweapon)
        add a,'0'               ;make digit
        cal _vputmap            ;display char
        add a,'0'               ;make digit
        cal _vputmap            ;display char
-       ld  ix,spr_icon04       ;laserIcon
+       ld  ix,spr_icon03       ;laserIcon
 no_laser:
 no_laser:
-       ld  de,$4939            ;icon #2
-       cal putwidesprite       ;(laser)
+       ld  de,$4939            ;icon #1
+       cal putwidesprite       ;display icon (laser)
 
        ld  ix,spr_icon00       ;emptyIcon
        ld  a,(your_multiples)  ;number of multiples
 
        ld  ix,spr_icon00       ;emptyIcon
        ld  a,(your_multiples)  ;number of multiples
@@ -1122,23 +1118,15 @@ iconsdone:
        ld  (PutWhere),a        ;set sprite-position to normal screen
        jp  disp_charge         ;display weapon charge bar
 
        ld  (PutWhere),a        ;set sprite-position to normal screen
        jp  disp_charge         ;display weapon charge bar
 
+drawline:
+       ld  (hl),a              ;draw one piece of the divider-line
+       inc hl                  ;move right (8 pixels = 1 byte)
+       dnz drawline            ;repeat (16bytes * 8pixels =128= screen width)
+       ret
+
 
 disp_armor:
        ld  de,16               ;line size
 
 disp_armor:
        ld  de,16               ;line size
-       ld  hl,(58*16)+VIDEO_MEM+6
-       ld  c,5                 ;5 lines down
-armorbarclrY:
-       ld  b,4                 ;four bytes right
-       psh hl
-armorbarclrX:
-       ld  (hl),0              ;clear
-       dec hl                  ;next byte
-       dnz armorbarclrX        ;4x
-       pop hl                  ;old position
-       add hl,de               ;one pixel down
-       dec c                   ;5x
-       jr  nz,armorbarclrY     ;loop
-
        ld  hl,VIDEO_MEM+(58*16)+6
        ld  a,(your_armor)      ;load your armor (<maxarmor)
        srl a                   ;divide by 2 (barsize halved)
        ld  hl,VIDEO_MEM+(58*16)+6
        ld  a,(your_armor)      ;load your armor (<maxarmor)
        srl a                   ;divide by 2 (barsize halved)
@@ -1172,17 +1160,35 @@ armorbarbyte:
        dnz armorbarbyte        ;loop it b times
 lastarmorbit:
        ld  (hl),c              ;draw the last byte
        dnz armorbarbyte        ;loop it b times
 lastarmorbit:
        ld  (hl),c              ;draw the last byte
+       dec hl
+       ld  (hl),0              ;empty byte before to remove any remainders
        pop hl                  ;recall first byte
        add hl,de               ;one down
        pop bc                  ;recall yloop-counter
        dnz armorbarloop1       ;display again
        pop hl                  ;recall first byte
        add hl,de               ;one down
        pop bc                  ;recall yloop-counter
        dnz armorbarloop1       ;display again
-       ret
 
 
 
 
-drawline:
-       ld  (hl),a              ;draw one piece of the divider-line
-       inc hl                  ;move right (8 pixels = 1 byte)
-       dnz drawline            ;repeat (16bytes * 8pixels =128= screen width)
+       ld  hl,(56*16)+VIDEO_MEM+7
+       ld  a,%01010101
+armorbarY:
+       cal drawbarrow          ;display "grey" mask
+       cal drawbarrow          ;display "grey" mask
+       add hl,de
+       add hl,de
+       add hl,de
+       cal drawbarrow
+drawbarrow:                    ;ORs an entire row with A
+       add hl,de               ;one down
+       ld  b,4                 ;four bytes right
+       psh hl
+armorbarX:
+       dec hl                  ;next byte
+       psh af
+       or  (hl)
+       ld  (hl),a              ;clear
+       pop af
+       dnz armorbarX           ;4x
+       pop hl                  ;old position
        ret
 
 ;------------------------- fire bullet --------------------------------------
        ret
 
 ;------------------------- fire bullet --------------------------------------
@@ -1362,8 +1368,21 @@ laserhits:                       ;hits with normal enemies
        add a,(ix+1)            ;add enemy height (according to sprite @ix)
        jp  m,nolashit          ;a-e>0 = hit
 enemy_lashit:
        add a,(ix+1)            ;add enemy height (according to sprite @ix)
        jp  m,nolashit          ;a-e>0 = hit
 enemy_lashit:
+       psh hl                  ;pointer to enemy destroyed by putsprite
+       psh bc                  ;safe enemy counter
+       psh de                  ; and Ur position (used for further compares)
+       dec e                   ;adjust y-position
+       dec e
+       dec e                   ;hit sprite centered at e (height=6)
+       dec hl                  ;@x
+       ld  d,(hl)              ;x-position of hit (enemy's x-pos)
+       ld  ix,spr_lashit       ;laserHit sprite
+       cal putsprite           ;display this frame only unlike bullethit ani
+       pop de                  ;restore regs
+       pop bc
+       pop hl
        ld  a,(curweapdamage)   ;damage
        ld  a,(curweapdamage)   ;damage
-       cal enemy_hit           ;hl=enemy+y
+       cal enemy_hit           ;inflict (hl=enemy+y)
 nolashit:
        pop hl                  ;enemy+1
        ld  a,b                 ;psh bc
 nolashit:
        pop hl                  ;enemy+1
        ld  a,b                 ;psh bc
@@ -1636,7 +1655,14 @@ chk_enemyleft:
        dnz chk_enemyleft       ;loop for all enemies
        ld  hl,nextevent        ;time 'til next event
        ld  (hl),157            ;next time to check is in 157 turns/frames
        dnz chk_enemyleft       ;loop for all enemies
        ld  hl,nextevent        ;time 'til next event
        ld  (hl),157            ;next time to check is in 157 turns/frames
-       inc a                   ;no enemies left: place upgrade pickup
+       ld  a,(your_weapon)
+       cp  maxweapon           ;you have bullets?
+       jr  nc,placebigupgrade  ;if not just place the big upgrade
+       ld  a,(level)
+       rra                     ;if level&1=0 (even levels)
+       ret nc                  ;then dont place a pickup (=50%)
+placebigupgrade
+       ld  a,1                 ;no enemies left: place upgrade pickup
        jr  place_enemy         ;place enemy #1(=a) = big pickup
 enemyleft:
        ld  hl,eventleft
        jr  place_enemy         ;place enemy #1(=a) = big pickup
 enemyleft:
        ld  hl,eventleft
@@ -1662,7 +1688,7 @@ place_boss:
        dec hl                  ;points to leveldata\boss\enemynr
        ld  a,(hl)              ;load enemy# of boss
 
        dec hl                  ;points to leveldata\boss\enemynr
        ld  a,(hl)              ;load enemy# of boss
 
-place_enemy:                   ;places enemy #=a
+place_enemy:                   ;places enemy #=a (out:achl=?;b=0;de=@enemy+11)
        psh af
        ld  hl,enemies+1-enemysize
        ld  bc,enemysize
        psh af
        ld  hl,enemies+1-enemysize
        ld  bc,enemysize
@@ -1678,22 +1704,28 @@ chk_noenemy:                    ;find an unused (no) enemy
        dec de                  ;goto hp64 (before occ)
        ldi                     ;set hp64
        ldi                     ;set hitpoints+occ of enemy class
        dec de                  ;goto hp64 (before occ)
        ldi                     ;set hp64
        ldi                     ;set hitpoints+occ of enemy class
-       ld  a,(hl)
-       .db $DD,$6F ;ld hx,a
+       ld  c,(hl)
        ldi                     ;set sprite
        ldi                     ;set sprite
-       ld  a,(hl)
-       .db $DD,$67 ;ld lx,a
+       ld  b,(hl)              ;bc=@enemy_sprite
+       inc bc                  ;@sprite-height
+       ld  a,(bc)
+       ld  b,a                 ;b = sprite-height
        ldi                     ;set sprite + 1
        ldi                     ;set x-position
 
        ld  a,(hl)              ;load placeInfo
        inc hl
        ldi                     ;set sprite + 1
        ldi                     ;set x-position
 
        ld  a,(hl)              ;load placeInfo
        inc hl
-       dec a                   ;is it 1?
+       inc a                   ;is it -1?
        jr  z,random_enemy      ;yes: create random value <51 in a
        jr  z,random_enemy      ;yes: create random value <51 in a
-       dec a                   ;is it 2?
+       inc a                   ;is it -2?
        jr  z,lure_enemy        ;yes: create a 100% luring enemy
        jr  z,lure_enemy        ;yes: create a 100% luring enemy
+       inc a                   ;is it -3?
+       jr  z,lure_enemy        ;yes: pick one (50% lure)
                                ;otherwise?
                                ;otherwise?
-halflure_enemy:                        ;yes (of course it is): pick one (50% lure)
+yset_enemy:                    ;set 0+3..$FC+3 as y-position
+       ld  (de),a
+       jr  ypos_OK
+halflure_enemy:
        ld  a,(timer)           ;look at frame-number
        rra                     ;make random if odd frame nr.
        jr  nc,random_enemy     ;1st possibility: random enemy
        ld  a,(timer)           ;look at frame-number
        rra                     ;make random if odd frame nr.
        jr  nc,random_enemy     ;1st possibility: random enemy
@@ -1702,8 +1734,8 @@ lure_enemy:                       ;2nd possibility: luring enemy
        jr  ypos_OK
 random_enemy:
        ld  a,64-8              ;=57=screen height (8 is scorebar)
        jr  ypos_OK
 random_enemy:
        ld  a,64-8              ;=57=screen height (8 is scorebar)
-       sub (ix+1)              ;minus sprite height=bottom
-       ld  c,b                 ;range=0 to...
+       sub b                   ;minus sprite height=bottom
+       ld  c,0                 ;range=0 to...
        ld  b,a                 ;...57-y
        cal Random              ;random value on screen
 ypos_OK:                       ;random value successfully created
        ld  b,a                 ;...57-y
        cal Random              ;random value on screen
 ypos_OK:                       ;random value successfully created
@@ -1746,7 +1778,7 @@ found_ebullet:
        sub 6
        jp  c,bulletok          ;type #0-5 = done (normal/diag)
        or  a
        sub 6
        jp  c,bulletok          ;type #0-5 = done (normal/diag)
        or  a
-       jr  z,bulletaiming      ;type #6 = aiming = type#2..5
+       jp  z,bulletaiming      ;type #6 = aiming = type#2..5
        dec a
        jr  z,bullettriple      ;type #7 = triple
        dec a
        dec a
        jr  z,bullettriple      ;type #7 = triple
        dec a
@@ -1757,18 +1789,29 @@ found_ebullet:
        jr  z,bulletdquad       ;type #10 = double-quad
        dec a
        jr  z,bulletran         ;type #11 = random
        jr  z,bulletdquad       ;type #10 = double-quad
        dec a
        jr  z,bulletran         ;type #11 = random
+       dec a
+       jr  z,firesenemies      ;type #12 = mine + Dquad
+
+basefiresenemies:              ;type #13 = base
+       ld  bc,$3A00
+       cal Random
+       ld  e,a
+       cal random14
+       ld  c,a
+       cal bulletok            ;find and fire bullet
+
+       ld  a,boss2enemy        ;otherwise place enemy #[boss2enemy]
+       jp  place_enemy
 
 firesenemies:                  ;type #12 = mine / Dquad
        ld  a,(timer)
        rra                     ;if odd turn (50% chance)
        jr  c,bulletdquad       ;then fire 6x
 
 firesenemies:                  ;type #12 = mine / Dquad
        ld  a,(timer)
        rra                     ;if odd turn (50% chance)
        jr  c,bulletdquad       ;then fire 6x
-       ld  a,bossenemy         ;otherwise place enemy #[bossenemy]
+       ld  a,boss1enemy        ;otherwise place enemy #[boss1enemy]
        jp  place_enemy
 
 bulletran:
        jp  place_enemy
 
 bulletran:
-       ld  c,1
-       ld  b,4
-       cal Random
+       cal random14
        ld  (hl),a
        jr  _bulletok
 
        ld  (hl),a
        jr  _bulletok
 
@@ -1784,6 +1827,7 @@ bulletdquad:                      ;type #10 = double-quad
        ld  a,e
        add a,10
        ld  e,a                 ;offset 10 down (5 total)
        ld  a,e
        add a,10
        ld  e,a                 ;offset 10 down (5 total)
+_enemy_fires_again:
        jr  enemy_fires_again
 
 bulletquad:                    ;type #9 = quad
        jr  enemy_fires_again
 
 bulletquad:                    ;type #9 = quad
@@ -1802,7 +1846,7 @@ bulletdouble:                     ;type #8 = double
        inc hl                  ;next bullet position
        inc e
        inc e                   ;two px down
        inc hl                  ;next bullet position
        inc e
        inc e                   ;two px down
-       jr  enemy_fires_again   ;find and fire another bullet
+       jr  _enemy_fires_again  ;find and fire another bullet
 
 bullettriple:                  ;type #7 = triple
        ld  (hl),1              ;type #1 = normal
 
 bullettriple:                  ;type #7 = triple
        ld  (hl),1              ;type #1 = normal
@@ -1812,7 +1856,7 @@ bullettriple:                     ;type #7 = triple
        cal enemy_fires_again
        inc hl
        ld  c,5                 ;type #5 = up 50%
        cal enemy_fires_again
        inc hl
        ld  c,5                 ;type #5 = up 50%
-       jr  enemy_fires_again
+       jr  _enemy_fires_again
 
 bulletaiming:                  ;type #6 = aiming = type#2..5
        ld  a,(y)
 
 bulletaiming:                  ;type #6 = aiming = type#2..5
        ld  a,(y)
@@ -2066,6 +2110,8 @@ moving_enemy:
        jr  z,movetype_right    ;11 = (.5>)
        dec b
        jr  z,movetype_fright   ;12 = (1>)
        jr  z,movetype_right    ;11 = (.5>)
        dec b
        jr  z,movetype_fright   ;12 = (1>)
+       dec b
+       ret z                   ;13 = (0)
 
 movetype_right:
        rra
 
 movetype_right:
        rra
@@ -2300,10 +2346,31 @@ dostory:
        ld  (levelp),hl         ;set the level-pointer
        ret                     ;and return
 
        ld  (levelp),hl         ;set the level-pointer
        ret                     ;and return
 
-;--------------------------- SFX --------------------------------------------
 
 DoSFX:                         ;in:(curline)=beginLine;b=nrOfLines
 
 DoSFX:                         ;in:(curline)=beginLine;b=nrOfLines
-SFXloop:
+ jr sfxlaser
+       ld  hl,dispbuffer
+       ld  b,64
+sfxscrollloop:
+       psh bc
+       psh hl
+       ld  de,VIDEO_MEM
+       ld  hl,VIDEO_MEM+16
+       ld  bc,63*16
+       ldir
+       pop hl
+       ld  bc,16
+       ldir
+       ld  b,16
+sfxscrolldelay:
+       halt                    ;delay
+       dnz sfxscrolldelay      ;8x
+       pop bc
+       dnz sfxscrollloop
+       ret
+
+
+sfxlaser:
        psh bc
 
        ld  a,0                 ;get line number
        psh bc
 
        ld  a,0                 ;get line number
@@ -2327,25 +2394,29 @@ curline =$-1
        ld  hl,dispbuffer       ;source of original
        add hl,bc               ;hl->source
 
        ld  hl,dispbuffer       ;source of original
        add hl,bc               ;hl->source
 
-SFXdisp:                       ;display this frame on screen
+sfxlaserdisp:                  ;display this frame on screen
        ld  bc,16               ;one line (=16 bytes, you'd know by now)
        ldir                    ;display (copy actually)
        ld  bc,-16              ;go up one line (not on screen)
        add hl,bc               ;so the same line will be displayed
        dec a                   ;counter
        ld  bc,16               ;one line (=16 bytes, you'd know by now)
        ldir                    ;display (copy actually)
        ld  bc,-16              ;go up one line (not on screen)
        add hl,bc               ;so the same line will be displayed
        dec a                   ;counter
-       jr  nz,SFXdisp          ;repeat until whole screen is displayed
+       jr  nz,sfxlaserdisp     ;repeat until whole screen is displayed
 
        ld  b,8
 
        ld  b,8
-SFXdelay:
+sfxlaserdelay:
        halt                    ;delay
        halt                    ;delay
-       dnz SFXdelay            ;8x
+       dnz sfxlaserdelay       ;8x
 
        pop bc                  ;counter
 
        pop bc                  ;counter
-       dnz SFXloop
+       dnz sfxlaser
        ret
 
 ;--------------------------- proc -------------------------------------------
 
        ret
 
 ;--------------------------- proc -------------------------------------------
 
+random14:                      ;random 1..1+4
+       ld  c,1
+       ld  b,4
+;      cal Random
 Random:                                ;a=c<random<b+c; destr:none
        psh hl
        ld  hl,rancount         ;amount to increase with (0-255)
 Random:                                ;a=c<random<b+c; destr:none
        psh hl
        ld  hl,rancount         ;amount to increase with (0-255)
@@ -2617,7 +2688,7 @@ invshiploop:
        pop af
        ret
 
        pop af
        ret
 
-New_game:                      ;stack must be +1 (so change the jp in cal :)
+New_game:                      ;start a new game (SP=+0)
        cal _clrLCD
        ld  a,VIDEO_MEM/$400
        ld  (PutWhere),a        ;will be reset after displaying iconbar
        cal _clrLCD
        ld  a,VIDEO_MEM/$400
        ld  (PutWhere),a        ;will be reset after displaying iconbar
@@ -2667,18 +2738,19 @@ dispsbeam:
 selectship:
        psh bc
        cal invship
 selectship:
        psh bc
        cal invship
-selectshiploop:
        cal getsomekeys
        pop bc
        jr  z,startthenewgame   ;enter/2nd
        cal getsomekeys
        pop bc
        jr  z,startthenewgame   ;enter/2nd
+       cp  K_EXIT
+       jp  z,menuexit          ;go game over when exit was pressed
        psh bc
        psh bc
-       cal invship
+       cal invship             ;display selection bar on current ship
        pop bc
        pop bc
-       cp  K_DOWN
+       cp  K_DOWN              ;down pressed?
        jr  nz,selnotdown
        inc b                   ;move selection down
 selnotdown:
        jr  nz,selnotdown
        inc b                   ;move selection down
 selnotdown:
-       cp  K_UP
+       cp  K_UP                ;up pressed?
        jr  nz,selnotup
        dec b                   ;move selection up
 selnotup:
        jr  nz,selnotup
        dec b                   ;move selection up
 selnotup:
@@ -2719,7 +2791,6 @@ searchyourship:
        ld  (pickuptimer),a     ;next pickup after 4 enemies destroyed
 
 You_die:                       ;stack must be +1
        ld  (pickuptimer),a     ;next pickup after 4 enemies destroyed
 
 You_die:                       ;stack must be +1
-       pop hl                  ;restore stack
        ld  a,24
        ld  (your_armor),a      ;24 HPs/shields
        ld  a,(your_lives)      ;load lives left
        ld  a,24
        ld  (your_armor),a      ;24 HPs/shields
        ld  a,(your_lives)      ;load lives left
@@ -3150,6 +3221,7 @@ spr_multiple:
        .db %01111100   ; █████
        .db %00111000   ;  ███
 spr_multiple2:
        .db %01111100   ; █████
        .db %00111000   ;  ███
 spr_multiple2:
+spr_lashit:
        .db 7,7         ;multiples
        .db %00111000   ;  ███
        .db %01111100   ; █████
        .db 7,7         ;multiples
        .db %00111000   ;  ███
        .db %01111100   ; █████
@@ -3161,6 +3233,16 @@ spr_multiple2:
 
 ;-------------------------------- explosions --------------------------------
 
 
 ;-------------------------------- explosions --------------------------------
 
+;spr_lashit:           ;the same as spr_multiple2
+;      .db 7,7
+;      .db %00111000   ;     ███
+;      .db %01111100   ;    █████
+;      .db %11111110   ;   ███████
+;      .db %11111110   ;▒▒▒███████
+;      .db %11111110   ;   ███████
+;      .db %01111100   ;    █████
+;      .db %00111000   ;     ███
+
 spr_hit:
 hitsprites = 5         ;btw: sprites stored backwards
        .db 5,4         ;5
 spr_hit:
 hitsprites = 5         ;btw: sprites stored backwards
        .db 5,4         ;5
@@ -3268,6 +3350,22 @@ spr_yexplosion:
        .db %00000000
 
        .db 8,5         ;2
        .db %00000000
 
        .db 8,5         ;2
+       .db %00000000
+       .db %00010100   ;   █ █
+       .db %00111010   ;  ███ █
+       .db %01110110   ; ███ ██
+       .db %00011000   ;   ██
+       .db %00000000
+
+       .db 8,5         ;3
+       .db %00000000
+       .db %00101100   ;  █ ██
+       .db %01100110   ; ██  ██
+       .db %01001011   ; █  █ ██
+       .db %00111100   ;  ████
+       .db %00000000
+
+       .db 8,5         ;4
        .db %00111000   ;  ███
        .db %01011100   ; █ ███
        .db %10010111   ;█  █ ███
        .db %00111000   ;  ███
        .db %01011100   ; █ ███
        .db %10010111   ;█  █ ███
@@ -3275,7 +3373,7 @@ spr_yexplosion:
        .db %00111000   ;  ███
        .db %00000000
 
        .db %00111000   ;  ███
        .db %00000000
 
-       .db 8,6         ;3
+       .db 8,6         ;5
        .db %00111100   ;   ████
        .db %01001111   ; █  ████
        .db %10100011   ;█ █   ██
        .db %00111100   ;   ████
        .db %01001111   ; █  ████
        .db %10100011   ;█ █   ██
@@ -3283,14 +3381,30 @@ spr_yexplosion:
        .db %01110101   ; ███ █ █
        .db %00111000   ;  ███
 
        .db %01110101   ; ███ █ █
        .db %00111000   ;  ███
 
-       .db 8,6         ;4
+       .db 8,6         ;6
+       .db %00101110   ;  █ ███
+       .db %10000011   ;█     ██
+       .db %01000101   ; █   █ █
+       .db %10100011   ;█ █   ██
+       .db %01000110   ; █   ██
+       .db %00110000   ;  ██
+
+       .db 8,6         ;7
        .db %00110110   ;  ██ ██
        .db %00000101   ;     █ █
        .db %00110110   ;  ██ ██
        .db %00000101   ;     █ █
-       .db %11000001   ;██     █
+       .db %10001001   ;█   █  █
        .db %01100001   ; ██    █
        .db %11000010   ;██    █
        .db %01010001   ; █ █   █
 
        .db %01100001   ; ██    █
        .db %11000010   ;██    █
        .db %01010001   ; █ █   █
 
+       .db 8,6         ;8
+       .db %00000110   ;     ██
+       .db %00100001   ;  █    █
+       .db %10000000   ;█
+       .db %01000010   ; █    █
+       .db %01000000   ; █
+       .db %00010100   ;   █ █
+
 ;--------------------------------- bullets ----------------------------------
 
 bullettable:
 ;--------------------------------- bullets ----------------------------------
 
 bullettable:
@@ -3398,25 +3512,25 @@ spr_bullete1:
 ;           111=laser (speed=duration 00010-00000)
 
 weapondata:    ;max = 9x6; 15x5; 21x4; 27x3
 ;           111=laser (speed=duration 00010-00000)
 
 weapondata:    ;max = 9x6; 15x5; 21x4; 27x3
-       .db 2,1,%00110010,3,%00000000,0,%00000000,0     ;1 single
-       .db 3,1,%00110011,3,%00000000,0,%00000000,0     ;2 fast
-       .db 2,1,%00110010,0,%00110010,6,%00000000,0     ;3 double
-       .db 2,1,%01110010,2,%10010010,2,%00110010,2     ;4 triple
-       .db 3,2,%00110011,2,%10010010,2,%01110010,2     ;5
-       .db 4,2,%01110011,2,%10010011,2,%00110011,2     ;6
-       .db 5,3,%01110100,2,%10010100,2,%00110100,2     ;7
-       .db 7,4,%01110101,2,%10010101,2,%00110101,2     ;8
-       .db 9,6,%01110110,2,%10010110,2,%00110110,2     ;9
+       .db 2,1,%00110010,3,%00000000,0,%00000000,0     ;1 single     (1x2+1)  2
+       .db 3,1,%00110011,3,%00000000,0,%00000000,0     ;2 fast       (1x3+1)  3
+       .db 2,1,%00110010,0,%00110010,6,%00000000,0     ;3 double     (2x2+1)  4
+       .db 2,1,%01110010,2,%10010010,2,%00110010,2     ;4 triple     (3x2+1)  6
+       .db 3,2,%00110011,2,%10010010,2,%01110010,2     ;5            (3x3+2)  9
+       .db 4,2,%01110011,2,%10010011,2,%00110011,2     ;6            (3x4+2) 12
+       .db 5,3,%01110100,2,%10010100,2,%00110100,2     ;7            (3x5+3) 15
+       .db 7,4,%01110101,2,%10010101,2,%00110101,2     ;8            (3x7+4) 21
+       .db 9,6,%01110110,2,%10010110,2,%00110110,2     ;9            (3x9+6) 27
 maxweapon  = 9
 maxweapon  = 9
-       .db 1,1,%11100100,3,%00000000,0,%00000000,0     ;1 single       (1x1x3)
-       .db 2,3,%11100011,3,%00000000,0,%00000000,0     ;2 short        (2x1x2)
-       .db 1,2,%11100100,3,%11100000,4,%00000000,0     ;3 fat          (1x2x3)
-       .db 1,2,%11100101,0,%11100000,6,%00000000,0     ;4 double       (1x2x4)
-       .db 4,4,%11100011,3,%00000000,0,%00000000,0     ;5 short        (4x1x2)
-       .db 1,2,%11100100,3,%11100000,6,%11100000,0     ;6 triple       (1x3x3)
-       .db 1,3,%11101000,3,%11100000,6,%11100000,0     ;7 triple long  (1x3x7)
-       .db 2,5,%11100101,2,%11100000,4,%00000000,0     ;8 double       (2x2x4)
-       .db 1,8,%11101011,3,%11100000,2,%11100000,4     ;9 big fat long (1x3x10)
+       .db 1,1,%11100100,3,%00000000,0,%00000000,0     ;1 single     (1x1x3)  3
+       .db 2,3,%11100011,3,%00000000,0,%00000000,0     ;2 short      (2x1x2)  4
+       .db 1,2,%11100100,3,%11100000,4,%00000000,0     ;3 fat        (1x2x3)  6
+       .db 1,2,%11100101,0,%11100000,6,%00000000,0     ;4 double     (1x2x4)  8
+       .db 4,4,%11100011,3,%00000000,0,%00000000,0     ;5 short      (4x1x2)  8
+       .db 1,2,%11100100,3,%11100000,6,%11100000,0     ;6 triple     (1x3x3)  9
+       .db 1,3,%11101000,3,%11100000,6,%11100000,0     ;7 triple long(1x3x7) 21
+       .db 2,5,%11100101,2,%11100000,4,%00000000,0     ;8 double     (2x2x4) 32
+       .db 1,9,%11101100,3,%11100000,2,%11100000,4     ;9 big fat lng(1x3xB) 33
 maxlaser   = 18
 tailbeam   = %00101101 ;180 degrees
 doublebeam = %01010010 ;45 degrees
 maxlaser   = 18
 tailbeam   = %00101101 ;180 degrees
 doublebeam = %01010010 ;45 degrees
@@ -3450,6 +3564,23 @@ spr_icon:
        .db %00000001
        .db %11111111
 spr_icon00:
        .db %00000001
        .db %11111111
 spr_icon00:
+       .db 15,7        ;unused  .......:.......:
+       .db %10000000           ;█
+       .db %10111111           ;█ █████████████
+       .db %10101010           ;█ █ █ █ █ █ █ █
+       .db %10110101           ;█ ██ █ █ █ █ ██
+       .db %10101010           ;█ █ █ █ █ █ █ █
+       .db %10111111           ;█ █████████████
+       .db %10000000           ;█
+       .db 6
+       .db %00000000
+       .db %11111110
+       .db %10101010
+       .db %01010110
+       .db %10101010
+       .db %11111110
+;      .db %00000000
+spr_icon00_:
        .db 16,7        ;unused  .......:.......:
        .db %10101010           ;█ █ █ █ █ █ █ █
        .db %11010101           ;██ █ █ █ █ █ █ █
        .db 16,7        ;unused  .......:.......:
        .db %10101010           ;█ █ █ █ █ █ █ █
        .db %11010101           ;██ █ █ █ █ █ █ █
@@ -3485,14 +3616,14 @@ spr_icon01:
        .db %11100100
 maxarmor = 63                          ;maximum HPs you can get
 spr_icon02a:
        .db %11100100
 maxarmor = 63                          ;maximum HPs you can get
 spr_icon02a:
-       .db 16,7        ;tailbeam.......:.......:
+       .db 16,6        ;tailbeam.......:.......:
        .db %10000000           ;█               ▒
        .db %10000011           ;█     ██        ▒
        .db %10000001           ;█      ███      ▒
        .db %10111011           ;█ ███ ███ ██  ██▒
        .db %10000001           ;█      ███      ▒
        .db %10000011           ;█     ██        ▒
        .db %10000000           ;█               ▒
        .db %10000011           ;█     ██        ▒
        .db %10000001           ;█      ███      ▒
        .db %10111011           ;█ ███ ███ ██  ██▒
        .db %10000001           ;█      ███      ▒
        .db %10000011           ;█     ██        ▒
-       .db %10000000           ;█               ▒
+;      .db %10000000           ;█               ▒
        .db 5
        .db %00000000
        .db %00000000
        .db 5
        .db %00000000
        .db %00000000
@@ -3515,6 +3646,20 @@ spr_icon02b:
        .db %00000000
        .db %00011110
 spr_icon03:
        .db %00000000
        .db %00011110
 spr_icon03:
+       .db 16,7        ;laser   .......:.......:
+       .db %10000000           ;█               ▒
+       .db %10001010           ;█   █ █     ▒▒▒ ▒
+       .db %11101100           ;███ ██      ▒▒▒ ▒
+       .db %11110111           ;████ ███████▒▒▒█▒
+       .db %11101100           ;███ ██      ▒▒▒ ▒
+       .db %10001010           ;█   █ █     ▒▒▒ ▒
+       .db %10000000           ;█               ▒
+       .db 4
+       .db %00000000
+       .db %00000000
+       .db %00000000
+       .db %11111111
+spr_icon04:
        .db 11,7        ;bullets .......:.......:
        .db %10000000           ;█       ██      ▒
        .db %10000011           ;█     █████ ▒▒▒ ▒
        .db 11,7        ;bullets .......:.......:
        .db %10000000           ;█       ██      ▒
        .db %10000011           ;█     █████ ▒▒▒ ▒
@@ -3531,20 +3676,6 @@ spr_icon03:
        .db %11000000
        .db %11100000
        .db %11000000
        .db %11000000
        .db %11100000
        .db %11000000
-spr_icon04:
-       .db 16,7        ;laser   .......:.......:
-       .db %10000000           ;█               ▒
-       .db %10001010           ;█   █ █     ▒▒▒ ▒
-       .db %11101100           ;███ ██      ▒▒▒ ▒
-       .db %11110111           ;████ ███████▒▒▒█▒
-       .db %11101100           ;███ ██      ▒▒▒ ▒
-       .db %10001010           ;█   █ █     ▒▒▒ ▒
-       .db %10000000           ;█               ▒
-       .db 4
-       .db %00000000
-       .db %00000000
-       .db %00000000
-       .db %11111111
 spr_icon05:
        .db 16,7        ;multiple.......:.......:
        .db %10000011           ;█     ███       ▒
 spr_icon05:
        .db 16,7        ;multiple.......:.......:
        .db %10000011           ;█     ███       ▒
@@ -3570,7 +3701,7 @@ spr_dividerline:
 txt_email:     .db "www.shiar.org ",127 ;title screen
                .db " shiar0@hotmail.com",0
 _txt_email       = $3A01 ;$3A1E=just email
 txt_email:     .db "www.shiar.org ",127 ;title screen
                .db " shiar0@hotmail.com",0
 _txt_email       = $3A01 ;$3A1E=just email
-txt_about:     .db "v0.99.99 ",127," by Shiar",0 ;right behind txt_email
+txt_about:     .db "v1.0.A23 ",127," by Shiar",0 ;right behind txt_email
 _txt_about       = $3321
 txt_menu1:     .db "NEW GAME",0
 txt_menu2:     .db "CONTINUE",0
 _txt_about       = $3321
 txt_menu1:     .db "NEW GAME",0
 txt_menu2:     .db "CONTINUE",0
@@ -3602,7 +3733,7 @@ txt_teacherans:   .db Lneg,"14.6549373495",0
 
 storehi_start:
 hiscore                .dw 0                   ;default hiscore
 
 storehi_start:
 hiscore                .dw 0                   ;default hiscore
-hiname         .db "shiar.99",0        ;   "       "    name
+hiname         .db "by shiar",0        ;   "       "    name
 storehi_end:
 
 invertmode:     cpl ;/or a             ;saves B<>W mode setting        cpl
 storehi_end:
 
 invertmode:     cpl ;/or a             ;saves B<>W mode setting        cpl
@@ -3619,7 +3750,7 @@ your_occ  .db  0                  ;0=normal 1..16=exploding       0
 your_shield    .db  0                  ;invincibility left             0
 your_armor     .db 24                  ;HP left                        24
 your_lives     .db  3                  ;lives left                     3
 your_shield    .db  0                  ;invincibility left             0
 your_armor     .db 24                  ;HP left                        24
 your_lives     .db  3                  ;lives left                     3
-your_weapon    .db 17                  ;current weapon upgrade         0
+your_weapon    .db  9                  ;current weapon upgrade         0
 your_multiples .db  0                  ;multiples present              0
 your_extra     .db  0                  ;extra beam present             0
 hardcore       .db  0                  ;hardcore mode if non-0         0
 your_multiples .db  0                  ;multiples present              0
 your_extra     .db  0                  ;extra beam present             0
 hardcore       .db  0                  ;hardcore mode if non-0         0
@@ -3638,8 +3769,10 @@ time2invert:     .db 0                   ;time until b<>w switch (0 at startup)
 
        .db 0   ;storyline ID
 levelstart:    ;[y-pos] [x-pos] [text,0] [SFX lines; 0=more text] [-1=end]
 
        .db 0   ;storyline ID
 levelstart:    ;[y-pos] [x-pos] [text,0] [SFX lines; 0=more text] [-1=end]
-       .db 25,33,"Imperial ships have",0,0
-       .db 31,9,"been sent to intercept you",0,31-25+6,-1
+       .db 1,33,"Imperial ships have",0,0
+       .db 7,9,"been sent to intercept you",0,0 ;,7-1+6,-1
+       .db 41,33,"Note STORYLINE and LEVELS",0,0
+       .db 48,38,"---- AINT DONE YET! ----",0,48-1+6,-1
 
        .db 30
 level00:.db 5,3,5,3,2,2
 
        .db 30
 level00:.db 5,3,5,3,2,2
@@ -3734,59 +3867,61 @@ pickupfreq = 19
 
 enemyspecs:  ;10 bytes/enemy | max.enemies <64 | sprites use <768 bytes
 ;0-1=pickups
 
 enemyspecs:  ;10 bytes/enemy | max.enemies <64 | sprites use <768 bytes
 ;0-1=pickups
-       .db 0,%00000010,spr_enemyP1&255,spr_enemyP1/256,128,2,03, 0, 0,1 ;pickup
-       .db 0,%00000110,spr_enemyP2&255,spr_enemyP2/256,128,2,03, 0, 0,1 ;bigpickup
+       .db 0,%00000010,spr_enemyP1&255,spr_enemyP1/256,128,-2,03, 0, 0,1 ;pickup
+       .db 0,%00000110,spr_enemyP2&255,spr_enemyP2/256,128,-2,03, 0, 0,1 ;bigpickup
 ;2-7=basic enemies     ,               ,               ,   , ,  ,  ,  ,
 ;2-7=basic enemies     ,               ,               ,   , ,  ,  ,  ,
-       .db 0,%00001011,spr_enemyE0&255,spr_enemyE0/256,128,1,00,12, 0,1 ;intro
-       .db 0,%00100011,spr_enemyE1&255,spr_enemyE1/256,128,1,00,10, 0,1 ;weak
-       .db 0,%01100011,spr_enemyE4&255,spr_enemyE4/256,128,1,03, 6,50,1 ;slow
-       .db 0,%01001011,spr_enemyE2&255,spr_enemyE2/256,128,1,00, 1, 0,1
-       .db 0,%01011011,spr_enemyE3&255,spr_enemyE3/256,128,3,00,19,39,8 ;heavy
-       .db 0,%01010011,spr_enemyE5&255,spr_enemyE5/256,128,3,05, 1, 0,1 ;fast
-;8-10=backwards enemies,               ,               ,   , ,  ,  ,  ,
-       .db 0,%00111011,spr_enemyB1&255,spr_enemyB1/256,000,3,11,19,92,1
-       .db 0,%01011011,spr_enemyB2&255,spr_enemyB2/256,000,1,12,11,45,1
-       .db 0,%01101011,spr_enemyB3&255,spr_enemyB3/256,000,1,11,10,41,8 ;small
-;11-15=asteroid        ,               ,               ,   , ,  ,  ,  ,
-       .db 0,%01001011,spr_enemyA1&255,spr_enemyA1/256,128,1,04, 0, 0,1
-       .db 0,%01111011,spr_enemyA2&255,spr_enemyA2/256,128,1,00, 0, 0,1
-       .db 0,%10110011,spr_enemyA3&255,spr_enemyA3/256,128,1,05, 0, 0,1
-       .db 1,%00010011,spr_enemyA4&255,spr_enemyA4/256,128,1,03, 0, 0,1 ;slow+hard
-       .db 0,%01111011,spr_enemyA4&255,spr_enemyA4/256,128,1,06, 0, 0,1
-;16-21=improved enemies,               ,               ,   , ,  ,  ,  ,
-       .db 0,%10010011,spr_enemyG1&255,spr_enemyG1/256,128,3,00, 3,40,1
-       .db 0,%10111011,spr_enemyG2&255,spr_enemyG2/256,128,3,00, 1,36,1
-       .db 0,%01100011,spr_enemyG5&255,spr_enemyG5/256,128,1,01, 9,52,1 ;updown
-       .db 0,%11110011,spr_enemyG3&255,spr_enemyG3/256,128,3,04, 7,99,7 ;3x
-       .db 1,%01101011,spr_enemyG4&255,spr_enemyG4/256,128,2,01,17, 0,7 ;updown3x
-       .db 1,%00010011,spr_enemyG6&255,spr_enemyG6/256,128,2,07,62,60,8 ;lure
-;22-26=hi-speed        ,               ,               ,   , ,  ,  ,  ,
-       .db 1,%00010011,spr_enemyS2&255,spr_enemyS2/256,128,2,05, 3,32,8 ;fast
-       .db 0,%11111011,spr_enemyS1&255,spr_enemyS1/256,128,3,07, 2,28,1 ;lure
-       .db 1,%00101011,spr_enemyS4&255,spr_enemyS4/256,128,3,06, 0, 0,1 ;vfast+nofire
-       .db 1,%01110011,spr_enemyS3&255,spr_enemyS3/256,128,1,07, 1,20,8 ;lure
-       .db 0,%11011011,spr_enemyS2&255,spr_enemyS2/256,128,2,01, 3,7,11 ;updown+ran
-;27-28=unused,         ,               ,               ,   , ,  ,  ,  ,
-       .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,2,03, 0, 0,1 ;27
-       .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,2,03, 0, 0,1 ;28
+       .db 0,%00001011,spr_enemyE0&255,spr_enemyE0/256,128,-1,00,12, 0,1 ;intro
+       .db 0,%00100011,spr_enemyE1&255,spr_enemyE1/256,128,-1,00,10, 0,1 ;weak
+       .db 0,%01100011,spr_enemyE4&255,spr_enemyE4/256,128,-1,03, 6,50,1 ;slow
+       .db 0,%01001011,spr_enemyE2&255,spr_enemyE2/256,128,-1,00, 1, 0,1
+       .db 0,%01011011,spr_enemyE3&255,spr_enemyE3/256,128,-3,00,19,39,8 ;heavy
+       .db 0,%01010011,spr_enemyE5&255,spr_enemyE5/256,128,-3,05, 1, 0,1 ;fast
+;8-10=backwards enemies,               ,               ,   ,  ,  ,  ,  ,
+       .db 0,%00111011,spr_enemyB1&255,spr_enemyB1/256,000,-3,11,19,92,1
+       .db 0,%01011011,spr_enemyB2&255,spr_enemyB2/256,000,-1,12,11,45,1
+       .db 0,%01101011,spr_enemyB3&255,spr_enemyB3/256,000,-1,11,10,41,8 ;small
+;11-15=asteroid        ,               ,               ,   ,  ,  ,  ,  ,
+       .db 0,%01001011,spr_enemyA1&255,spr_enemyA1/256,128,-1,04, 0, 0,1
+       .db 0,%01111011,spr_enemyA2&255,spr_enemyA2/256,128,-1,00, 0, 0,1
+       .db 0,%10110011,spr_enemyA3&255,spr_enemyA3/256,128,-1,05, 0, 0,1
+       .db 1,%00010011,spr_enemyA4&255,spr_enemyA4/256,128,-1,03, 0, 0,1 ;slow+hard
+       .db 0,%01111011,spr_enemyA4&255,spr_enemyA4/256,128,-1,06, 0, 0,1
+;16-21=improved enemies,               ,               ,   ,  ,  ,  ,  ,
+       .db 0,%10010011,spr_enemyG1&255,spr_enemyG1/256,128,-3,00, 3,40,1
+       .db 0,%10111011,spr_enemyG2&255,spr_enemyG2/256,128,-3,00, 1,36,1
+       .db 0,%01100011,spr_enemyG5&255,spr_enemyG5/256,128,-1,01, 9,52,1 ;updown
+       .db 0,%11110011,spr_enemyG3&255,spr_enemyG3/256,128,-3,04, 7,99,7 ;3x
+       .db 1,%01101011,spr_enemyG4&255,spr_enemyG4/256,128,-2,01,17, 0,7 ;updown3x
+       .db 1,%00010011,spr_enemyG6&255,spr_enemyG6/256,128,-2,07,62,60,8 ;lure
+;22-26=hi-speed        ,               ,               ,   ,  ,  ,  ,  ,
+       .db 1,%00010011,spr_enemyS2&255,spr_enemyS2/256,128,-2,05, 3,32,8 ;fast
+       .db 0,%11111011,spr_enemyS1&255,spr_enemyS1/256,128,-3,07, 2,28,1 ;lure
+       .db 1,%00101011,spr_enemyS4&255,spr_enemyS4/256,128,-3,06, 0, 0,1 ;vfast+nofire
+       .db 1,%01110011,spr_enemyS3&255,spr_enemyS3/256,128,-1,07, 1,20,8 ;lure
+       .db 0,%11011011,spr_enemyS2&255,spr_enemyS2/256,128,-2,01, 3,7,11 ;updown+ran
+;27-28=unused,         ,               ,               ,   ,  ,  ,  ,  ,
+       .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,-2,03, 0, 0,1 ;27
 ;29=final boss' enemy
 ;29=final boss' enemy
-       .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,3,01, 0, 0,1 ;lure
-bossenemy = 29
-;30-34=first bosses    ,               ,               ,   , ,  ,  ,  ,
-       .db 2,%01000111,spr_boss01 &255,spr_boss01 /256,127,1,09,35,50,7 ;triple
-       .db 2,%01010011,spr_boss02 &255,spr_boss02 /256,127,1,09,20,12,1 ;small
-       .db 2,%01111011,spr_boss03 &255,spr_boss03 /256,127,1,09,15,11,8 ;normal
-       .db 2,%10011111,spr_boss04 &255,spr_boss04 /256,127,3,10,10,11,1 ;moving
-       .db 1,%11111011,spr_boss05 &255,spr_boss05 /256,127,2,10, 1, 4,1 ;weak+rapidfire
-;35-36=asteroid bosses ,               ,               ,   , ,  ,  ,  ,
-       .db 4,%00010111,spr_bossA1 &255,spr_bossA1 /256,127,1,10,36,14,6
-       .db 4,%01101111,spr_bossA1 &255,spr_bossA1 /256,127,2,10,28,12,6
-;37-41=big bosses      ,               ,                   ,   , ,  ,  ,  ,
-       .db 4,%00010111,spr_boss07 &255,spr_boss07 /256,127,3,08,31, 8,7
-       .db 5,%00101011,spr_boss06 &255,spr_boss06 /256,127,3,08,13, 7,7
-       .db 6,%10001111,spr_boss08 &255,spr_boss08 /256,127,1,08,18, 8,9  ;quad
-       .db 7,%00101011,spr_boss09 &255,spr_boss09 /256,127,1,08,21, 9,10 ;6x
-       .db 9,%11011011,spr_boss09 &255,spr_boss09 /256,127,1,08,12,11,12 ;enemies
+       .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,-3,01, 0, 0,1 ;moving
+       .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,23,09, 0, 0,1 ;mid+lure
+boss1enemy = 28
+boss2enemy = 29
+;30-34=first bosses    ,               ,               ,   ,  ,  ,  ,  ,
+       .db 2,%01000111,spr_boss01 &255,spr_boss01 /256,127,-1,09,35,50,7 ;triple
+       .db 2,%01010011,spr_boss02 &255,spr_boss02 /256,127,-1,09,20,12,1 ;small
+       .db 2,%01111011,spr_boss03 &255,spr_boss03 /256,127,-1,09,15,11,8 ;normal
+       .db 2,%10011111,spr_boss04 &255,spr_boss04 /256,127,-3,10,10,11,1 ;moving
+       .db 1,%11111011,spr_boss05 &255,spr_boss05 /256,127,-2,10, 1, 4,1 ;weak+rapidfire
+;35-36=asteroid bosses ,               ,               ,   ,  ,  ,  ,  ,
+       .db 4,%00010111,spr_bossA1 &255,spr_bossA1 /256,127,-1,10,36,14,6
+       .db 4,%01101111,spr_bossA1 &255,spr_bossA1 /256,127,-2,10,28,12,6
+;37-41=big bosses      ,               ,               ,   ,  ,  ,  ,  ,
+       .db 4,%00010111,spr_boss07 &255,spr_boss07 /256,127,-3,08,31, 8,7
+       .db 5,%00101011,spr_boss06 &255,spr_boss06 /256,127,-3,08,13, 7,7
+       .db 6,%10001111,spr_boss08 &255,spr_boss08 /256,127,-1,08,18, 8,9  ;quad
+       .db 7,%00101011,spr_boss09 &255,spr_boss09 /256,127,-1,08,21, 9,10 ;6x
+       .db 9,%11011011,spr_boss09 &255,spr_boss09 /256,127,-1,08,12,11,12 ;enemies
+       .db 9,%11011011,spr_boss0E &255,spr_boss0E /256,119,00,13,12,13,13
 
 spr_enemy00:
 spr_enemyP1:
 
 spr_enemy00:
 spr_enemyP1:
@@ -4374,6 +4509,59 @@ spr_boss09:
        .db %10100000
        .db %11111000
        .db %10000000
        .db %10100000
        .db %11111000
        .db %10000000
+spr_boss0E:
+       .db 8,51                        ;.......:.......:
+       .db %00111011                   ; ████ ██
+       .db %01100110                   ;█    ██
+       .db %01110011                   ;      ██
+       .db %00111011                   ;  ███ ██
+       .db %01000111                   ;     ███
+       .db %10101100                   ;    ██
+       .db %01110111                   ;  ██ ███
+       .db %00111011                   ; ████ ██
+       .db %01100100                   ;███  █
+       .db %01000001                   ;    ████
+       .db %01100100                   ;███  █
+       .db %01111011                   ; ████ ██
+       .db %01110111                   ;  ██ ███
+       .db %01001100                   ;    ██
+       .db %00100111                   ;     ███
+       .db %00111011                   ;  ███ ██
+       .db %01000011                   ;      ██
+       .db %10010110                   ;█    ██
+       .db %01111011                   ; ████ ██
+       .db %00110101                   ;       █
+       .db %00001011                   ;      ██
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000000                   ;
+       .db %00000011                   ;      ██
+       .db %00001101                   ;       █
+       .db %01111011                   ; ████ ██
+       .db %11000110                   ;█    ██
+       .db %01000011                   ;      ██
+       .db %01111011                   ;  ███ ██
+       .db %00100111                   ;     ███
+       .db %01011100                   ;    ██
+       .db %00110111                   ;  ██ ███
+       .db %01111011                   ; ████ ██
+       .db %11100100                   ;███  █
+       .db %00000001                   ;    ████
+       .db %11100100                   ;███  █
+       .db %01111011                   ; ████ ██
+       .db %00110111                   ;  ██ ███
+       .db %00101100                   ;    ██
+       .db %01000111                   ;     ███
+       .db %00111011                   ;  ███ ██
+       .db %01001011                   ;      ██
+       .db %10000110                   ;█    ██
+       .db %01111011                   ; ████ ██
+       .db %00001101                   ;    ████
 
 ;----------------------------------------------------------------------------
 ;----------------------------- logo ------------------------------------------
 
 ;----------------------------------------------------------------------------
 ;----------------------------- logo ------------------------------------------
@@ -4410,79 +4598,6 @@ logo_nemesis:
 ;----------------------------------------------------------------------------
 ;----------------------------------------------------------------------------
 
 ;----------------------------------------------------------------------------
 ;----------------------------------------------------------------------------
 
-; 0.98.77 -- 7.VII.00 -- size 6707
-;
-;      # bullets do damage in all levels
-;      * more armor at armor-upgrade and extra armor at end of a level
-;      - internal levels again (no need 4 external, safer/smaller)
-;      # some registers not correctly pushed/popped
-;      * several optimizations (init.procs some bytes smaller)
-;      # enemies hit with hitpoints left disappeared (one pop too much...)
-;      + bullets "charge up" (more damage) when not firing
-;      - removed contrast changes
-;      + more powerful bullets have different sprites (larger=more damage)
-;      # multiples appear at your position (begin level/just selected)
-;      # when invulnerable multiples acted weird
-;      # no more error at activation after APD off after running Nemesis
-;      # saves correctly if own name ain't "nemesis" + some bytes smaller
-;      # screen wasn't always entirely cleared after quit
-;      * waits until all keys have been released after death
-;      + different bullets sizes will miss if they're too small
-;      + at level start "press F1 to save"-text will be displayed
-;      * w3.shiar.org displayed at title screen, black bar behind version nr
-;      # score to 0 when exit pressed at main menu
-;      # no residual story-text in first frame of game
-;      # game doesn't continue again after death (stack messed up)
-;      # game over when lives<0 (didn't work in v0.96+)
-;      * using some self-modifiing code (so it's smaller)
-;      # new random procedure: stars don't appear on one line anymore
-;      * weapons appear centered at multiples
-;      * laser properties can be changed (damage, charge)
-;      + weapon can be combination of bullets/lasers (max. of 3 per weapon)
-;      * bullet-icon is removed when laser is selected
-;      * enemy sprite table integrated in enemy specs (-1 byte/enemy)
-;      + random enemy is chosen from any number of enemies per level
-;      * time to first enemy fire defined per enemy, not per level
-;      + CLIPPED sprites!! no more in/out popping enemies! wow...
-;      * bullets/enemies removed when _entirely_ off screen
-;      # enemies would sometimes be hit by bullets going right below them
-;      # size of the second bullet was too big (invisible hit)
-;      * 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 freezed 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
-;      * two new (big) bosses 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)
-;      + laser will upgrade as well when you reselect it
-;      * 2nd can be used in main menu (wow!)
-;      # altered variable storage space because of Nemesis grew beyond 6kb
-;      # fixed armor bar display when at maximum
-;      + a few new enemies (asteroids) and remade 1st 4 levels; new pickup
-;      - torpedo since it was kinda useless
-;      + second icon now selects TAIL BEAM: bullet going backwards
-;      # armor increase at the end of a level doesn't overflow armorbar
-;      + you can choose your own ship out of four vessel after NEW GAME!
-;      + enemies can appear at any x-position and move both left and right
-;      + move patterns given per enemy, not per level
-;      * new (faster) enemy-move system; 10 basic moves (x2 left+right)
-;      # enemies can _never_ move above or below visible screen
-;      * "randomY"-enemies are placed entirely on screen (height calced)
-;      # the major TI-OS crash bug WAS afterall caused by sprites drawn
-;         (partially) outside screen memory. temporarily fixed by setting
-;         virtual screen buffer to $8200 (enough mem there)
-;      + upto 29 cool enemy sprites and redone first five levels
-;      * improved enemy-move routine; smooth luring, five speeds+backwards
-;      # after pause weapon will not be fired
-;      # teacher key fixed (waits for GRAPH to be release before&after)
-;
 ; 0.99.99 -- 9.IX.00 -- size 6936
 ;
 ;      + you can have upto FOUR multiples! (~20 pixels apart)
 ; 0.99.99 -- 9.IX.00 -- size 6936
 ;
 ;      + you can have upto FOUR multiples! (~20 pixels apart)
@@ -4552,9 +4667,19 @@ logo_nemesis:
 ;      * the armor bar is now 5 pixels in height; very visible
 ;      # if selecting upgrade or starting level, charge bar wasn't displayed
 ;
 ;      * the armor bar is now 5 pixels in height; very visible
 ;      # if selecting upgrade or starting level, charge bar wasn't displayed
 ;
-; 1.00.99 -- 9.IX.00 -- size 6936
+; 1.00.A23 -- 23.X.00 -- size 7212
 ;
 ;
-;      + ...
+;      * armor-bar background, empty upgrades sprites changed
+;      + shows sprite when laser hits an enemy (his "shield"?)
+;      + exit-key also quits out of ship selection screen
+;      # fixed direct-quit on death bug (bug since recent optimization)
+;      * armor-bar background changed (more elegant and smaller code)
+;      # "flash" when end-boss spawns mine fixed
+;      + enemy's y start position can be specified per enemy
+;      * first icon is now laser, second one's bullets
+;      + when bullets selected, upgrade icons won't appear half the time
+;      # remainder pixels in armor bar (appeared after heavy damage) removed
+;      + your ship's explosion is now also 8 frames (half enemy expl. speed)
 ;
 ;
 ;       + added        - removed       * changed       # bug fixed
 ;
 ;
 ;       + added        - removed       * changed       # bug fixed