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
- 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
@@ -17,6 +31,8 @@
 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 -----------------------------------------------------
 
@@ -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'
-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,
-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
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
 
-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           ; ███
@@ -211,7 +211,7 @@ menuchange:
 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:
@@ -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?
+       ret nz                  ;no, don't display anything (&return)
+       pop hl                  ;restore stack (cuzzof call)
        jp  z,You_die           ;yes = game over
-       ret                     ;don't display anything
 
 ;----move----
 ok:                            ;we are
@@ -884,8 +885,7 @@ dispmultiplesloop:
 
 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
 
@@ -968,8 +968,9 @@ select:
        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
@@ -984,8 +985,7 @@ selectedbeam:
        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?
@@ -1051,37 +1051,33 @@ displivesloop:
 displivesdone:
        cal disp_armor          ;display bar
 
-       ld  ix,spr_icon00
+       ld  ix,spr_icon00       ;emptyIcon
        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
-       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
-       ld  ix,spr_icon03       ;bulletIcon
+       ld  ix,spr_icon04       ;bulletIcon
 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
-       ld  hl,$3955            ;position to display bullet-type digit
+       ld  hl,$3955            ;position to display laser-type digit
        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
-       ld  ix,spr_icon04       ;laserIcon
+       ld  ix,spr_icon03       ;laserIcon
 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
@@ -1122,23 +1118,15 @@ iconsdone:
        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
-       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)
@@ -1172,17 +1160,35 @@ armorbarbyte:
        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
-       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 --------------------------------------
@@ -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:
+       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
-       cal enemy_hit           ;hl=enemy+y
+       cal enemy_hit           ;inflict (hl=enemy+y)
 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
-       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
@@ -1662,7 +1688,7 @@ place_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
@@ -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
-       ld  a,(hl)
-       .db $DD,$6F ;ld hx,a
+       ld  c,(hl)
        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
-       dec a                   ;is it 1?
+       inc a                   ;is it -1?
        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
+       inc a                   ;is it -3?
+       jr  z,lure_enemy        ;yes: pick one (50% lure)
                                ;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
@@ -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)
-       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
@@ -1746,7 +1778,7 @@ found_ebullet:
        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
@@ -1757,18 +1789,29 @@ found_ebullet:
        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
-       ld  a,bossenemy         ;otherwise place enemy #[bossenemy]
+       ld  a,boss1enemy        ;otherwise place enemy #[boss1enemy]
        jp  place_enemy
 
 bulletran:
-       ld  c,1
-       ld  b,4
-       cal Random
+       cal random14
        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)
+_enemy_fires_again:
        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
-       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
@@ -1812,7 +1856,7 @@ bullettriple:                     ;type #7 = triple
        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)
@@ -2066,6 +2110,8 @@ moving_enemy:
        jr  z,movetype_right    ;11 = (.5>)
        dec b
        jr  z,movetype_fright   ;12 = (1>)
+       dec b
+       ret z                   ;13 = (0)
 
 movetype_right:
        rra
@@ -2300,10 +2346,31 @@ dostory:
        ld  (levelp),hl         ;set the level-pointer
        ret                     ;and return
 
-;--------------------------- SFX --------------------------------------------
 
 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
@@ -2327,25 +2394,29 @@ curline =$-1
        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
-       jr  nz,SFXdisp          ;repeat until whole screen is displayed
+       jr  nz,sfxlaserdisp     ;repeat until whole screen is displayed
 
        ld  b,8
-SFXdelay:
+sfxlaserdelay:
        halt                    ;delay
-       dnz SFXdelay            ;8x
+       dnz sfxlaserdelay       ;8x
 
        pop bc                  ;counter
-       dnz SFXloop
+       dnz sfxlaser
        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)
@@ -2617,7 +2688,7 @@ invshiploop:
        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
@@ -2667,18 +2738,19 @@ dispsbeam:
 selectship:
        psh bc
        cal invship
-selectshiploop:
        cal getsomekeys
        pop bc
        jr  z,startthenewgame   ;enter/2nd
+       cp  K_EXIT
+       jp  z,menuexit          ;go game over when exit was pressed
        psh bc
-       cal invship
+       cal invship             ;display selection bar on current ship
        pop bc
-       cp  K_DOWN
+       cp  K_DOWN              ;down pressed?
        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:
@@ -2719,7 +2791,6 @@ searchyourship:
        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
@@ -3150,6 +3221,7 @@ spr_multiple:
        .db %01111100   ; █████
        .db %00111000   ;  ███
 spr_multiple2:
+spr_lashit:
        .db 7,7         ;multiples
        .db %00111000   ;  ███
        .db %01111100   ; █████
@@ -3161,6 +3233,16 @@ spr_multiple2:
 
 ;-------------------------------- 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
@@ -3268,6 +3350,22 @@ spr_yexplosion:
        .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   ;█  █ ███
@@ -3275,7 +3373,7 @@ spr_yexplosion:
        .db %00111000   ;  ███
        .db %00000000
 
-       .db 8,6         ;3
+       .db 8,6         ;5
        .db %00111100   ;   ████
        .db %01001111   ; █  ████
        .db %10100011   ;█ █   ██
@@ -3283,14 +3381,30 @@ spr_yexplosion:
        .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 %11000001   ;██     █
+       .db %10001001   ;█   █  █
        .db %01100001   ; ██    █
        .db %11000010   ;██    █
        .db %01010001   ; █ █   █
 
+       .db 8,6         ;8
+       .db %00000110   ;     ██
+       .db %00100001   ;  █    █
+       .db %10000000   ;█
+       .db %01000010   ; █    █
+       .db %01000000   ; █
+       .db %00010100   ;   █ █
+
 ;--------------------------------- bullets ----------------------------------
 
 bullettable:
@@ -3398,25 +3512,25 @@ spr_bullete1:
 ;           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
-       .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
@@ -3450,6 +3564,23 @@ spr_icon:
        .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           ;██ █ █ █ █ █ █ █
@@ -3485,14 +3616,14 @@ spr_icon01:
        .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 %10000000           ;█               ▒
        .db 5
        .db %00000000
        .db %00000000
@@ -3515,6 +3646,20 @@ spr_icon02b:
        .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           ;█     █████ ▒▒▒ ▒
@@ -3531,20 +3676,6 @@ spr_icon03:
        .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           ;█     ███       ▒
@@ -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_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
@@ -3602,7 +3733,7 @@ txt_teacherans:   .db Lneg,"14.6549373495",0
 
 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
@@ -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_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
@@ -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 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
@@ -3734,59 +3867,61 @@ pickupfreq = 19
 
 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     ,               ,               ,   , ,  ,  ,  ,
-       .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
-       .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:
@@ -4374,6 +4509,59 @@ spr_boss09:
        .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 ------------------------------------------
@@ -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)
@@ -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
 ;
-; 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