version 0.98: minor fixes, redone levels
authorMischa Poslawsky <nemesis@shiar.org>
Fri, 7 Jul 2000 12:38:00 +0000 (14:38 +0200)
committerMischa Poslawsky <nemesis@shiar.org>
Wed, 18 Mar 2009 03:35:12 +0000 (04:35 +0100)
# 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)

nemesis.txt
nemesis.z80

index b2ec9556fad1d5aea6df6bf5342f4ba296e9271c..10ac92a3350e272272c507f3543a6fdb5ac12411 100644 (file)
@@ -1,8 +1,8 @@
 ------------------------------------------------------------------------------
  Title                         : Nemesis
- Version                       : 0.97.629 Beta
- Release Date                  : 29.VI.00
- Filename                      : nemesis.86p (size 6kb)
+ Version                       : 0.98.77 Beta
+ Release Date                  : 7.VII.00
+ Filename                      : nemesis.86p (size 6707B)
  Author(s)                     : Shiar
  Email Address                 : shiar0@hotmail.com
  ICQ                           : #43840958
  Other games by author         : Worm
 
 
->>>>>>> NOTE ON V.97 ---------------------------------------------------------
+>>>>>>> NOTE ON V.98 ---------------------------------------------------------
 
-  Still under construction. Don't distribute.
+  It's been nearly a year since the first version of Nemesis, and over one
+half year since my last version. So I figured it's about time to complete
+this game. I won't bother you with the endless list of improvements I made;
+just go ahead and play the game!
 
 
 >>>>>>> INTRO TO NEMESIS -----------------------------------------------------
 
   Nemesis is an old arcade-game for many platforms, originally for arcades.
 I first played Nemesis III for the MSX (1988), but Konami made at least
-* 41 * Nemesis-games (mostly named Nemesis, Gradius, Salamander, Parodius)
+41 Nemesis-games (named Nemesis=Gradius, Salamander=LifeForce, Parodius)
 for systems including the Game Boy, (S)NES and Play Station.
 
 
->>>>>>> CONTROLS -------------------------------------------------------------
+>>>>>>> THA GAME -------------------------------------------------------------
 
-  The universal TI-86 keys:
-
-Arrow keys : move
-2nd        : fire
-ALPHA      : select powerup
-MORE       : pause
-EXIT       : exit
-GRAPH      : teacher/boss! (press graph again to resume)
-
-  In main menu you can press F1 to toggle b<>w.
-  A game can be saved by pressing F1 at the level-screen.
-
-
->>>>>>> PICKUPS AND SO -------------------------------------------------------
+  Arrow keys : move
+  2nd        : fire
+  ALPHA      : select powerup
+  MORE       : pause
+  GRAPH      : teacher/boss! (press graph again to resume)
+  EXIT       : exit
+  F1         : toggle B<>W in main menu, save game at level-screen
 
   Collect the pickups enemies leave after they're destroyed to upgrade your
 ship. The highlighted icon in the score bar (bottom) can be activated by
 pressing ALPHA.
 
-  Upgrades: ARMOR | TORPEDO | WEAPON-UPG | LASER | MULTIPLES
+  Upgrades: ARMOR | TAIL-BEAM | WEAPON-UPG | LASER | MULTIPLES
 
   The upper bar on the left shows your hitpoints left (armor). The bar below
 that shows the current power of your weapon.
@@ -54,47 +50,45 @@ that shows the current power of your weapon.
 
 >>>>>>> BETA STUFF -----------------------------------------------------------
 
-  There are just seven levels for now, don't try to get to level eight.
-Things to come:
-
-* save options (like b<>w)
-* more LEVELS!! more enemies more upgrades more story
-* maybe obstacles?
-* source code release
-? grayscale, sounds, multiplayer-option: probably not
+  There are just five levels for now, don't play beyond there. In future
+versions I'll add more levels and enemies, maybe obstacles, and I'll release
+the source code. I don't think I will add greyscale, sound or a multiplayer
+option.
 
   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!
 
-  Tested on TI86es (and emulators) with ROM 1.2, 1.4 and 1.6 using YAS,
+  Tested on TI86es and emulators with ROM 1.2, 1.4 and 1.6 using YAS,
 Rascall and Asm(. Nemesis will NOT run correctly under RASCALL with the
-memory LOCKED!
+memory LOCKED! Besides that there shouldn't be any bugs.
 
 
 >>>>>>> CREDITS --------------------------------------------------------------
 
-  SHIAR             programming and everything else. SHIAR@MAILROOM.COM
-  DAVE              betatester (if you need a bug, ask Dave :)
-  BLACKBELT         betatester (the one and only..)
-  JONAH COHEN       for teaching me z80 and stuff, also kinda betatester
-  FREE BIRD         working on the storyline
-  MATTHEW DALE      betatester
-  KONAMI            for writing the original Nemesises and more great games
-  PATRICK DAVIDSON  wrote Galaxian; Nemesis uses his gfx-engine
+  SHIAR        (me) programming and everything else. SHIAR@MAILROOM.COM
+  DAVE              official betatester (if you need a bug, ask Dave :)
+  BLACKBELT         official betatester
+  MATTHEW DALE      official betatester
+  JONAH COHEN       for teaching me z80, giving advise, testing...
+  SCABBY            gave me Wworm, Derek, and probably some other stuff
+  CULLEN SAULS      exchanging beta MegaMan for beta Nemesis ;)
   BRIAN KOROPOFF    for solving the left+down bug!
+  PATRICK DAVIDSON  Nemesis was originally based on his Galaxian
+  KONAMI            for writing the original Nemesises and more great games
 
-  and EVERYBODY WHO SENT ME SOMETHING!! (too much to list here)
+and EVERYBODY WHO SENT ME SOMETHING!! (too much to list here)
+and everybody I forgot.
 
 
 >>>>>>> RULEZ AND REGULATIONS ------------------------------------------------
 
 * Damage to you, your calc, or anything else was not caused by Nemesis
-  and I am certainly not responsible
-* Thou shallt NOT release an altered version of Nemesis
-* Thou shallt include this documentation with distribution (except calc2calc)
-* Thou shallt not ask money for this program
-* Thou shallt eat plenty of vegetables every day
+   and I am certainly not responsible
+* Thou shalt NOT release an altered version of Nemesis
+* Thou shalt include this documentation with distribution (except calc2calc)
+* Thou shalt not ask money for this program
+* Thou shalt eat plenty of vegetables every day
 
 
 ---------------------------------------------------------------------- <<<<<<<
\ No newline at end of file
index 3b076b94a9ae0d39ecb99b37aecea8fbe5165d93..d57f1c11759fe607c230e8a0bcce170332e5f429 100644 (file)
@@ -23,7 +23,7 @@
 #define                  psh   push    ; ^:D
 #define                  dnz   djnz    ;Dec&Jump while NonZero becomes Do w.Non-Zero
 
-;GRAPH_MEM     = $C9FA         ;display buffer (virtual screen)
+dispbuffer     = $81FA ;= $C9FA                ;virtual screen
 ;VIDEO_MEM     = $FC00         ;tha big scareen
 TEXT_MEM       = _textShadow   ;text buffer; C0F9-C1A0 (167/$A7 bytes)
 
@@ -99,7 +99,7 @@ lvlenemies    = ebullets+(nrebuls*3)
        .dw Title               ;pointer to description (all shells)
        .dw Icon                ;pointer to YAS icon
 
-Title: .db "Nemesis v0.97 by SHIAR",0
+Title: .db "Nemesis v0.98 by SHIAR",0
 
 Icon:  .db 8,1                 ;icon for YAS: width = 1byte; height = 9bytes
        .db %11100000           ; ███
@@ -113,14 +113,14 @@ Icon:     .db 8,1                 ;icon for YAS: width = 1byte; height = 9bytes
 
 ;---------------------- init ------------------------------------------------
 
-int_handler:
-       ex  af,af'
-       in  a,($03)
-       bit 3,a
-       jp  z,$0039
-       res 0,a
-       out ($03),a
-       jp  $0039
+int_handler:                   ;new interrupt proc
+       ex  af,af'              ;just af only (no need for exx)
+       in  a,($03)             ;read bit 3 port 3
+       bit 3,a                 ;is ON key pressed?
+       jp  z,$0039             ;no: np, return
+       res 0,a                 ;yes: then we have a problem (freeze), so...
+       out ($03),a             ;...mask the ON key interrupts!
+       jp  $0039               ;all done, return
 int_end:
 
 init:  cal BUSY_OFF            ;turns the run-indicator off, obviously
@@ -140,7 +140,7 @@ FixKeys:                    ;fixes some key problems like left+down bug
        dec a                   ;ld a,$D3
        ld  (hl),a
        ldir
-       ld  hl,int_handler
+       ld  hl,int_handler      ;new interrupt handler
        ld  d,a
        ld  e,a                 ;ld de,$D3D3
        ld  bc,int_end-int_handler
@@ -272,9 +272,9 @@ game_main_loop:                     ;REPEATS FROM HERE EVERY FRAME
        cal z,scoreInc          ;do it
 
 Clear_screen:
-       ld  hl,GRAPH_MEM        ;move from (hl) = top left
+       ld  hl,dispbuffer       ;move from (hl) = top left
        ld  (hl),$00            ;first pixel will be copied all over the screen
-       ld  de,GRAPH_MEM+1      ;(de) = next pixel, thus clearing whole screen
+       ld  de,dispbuffer+1     ;(de) = next pixel, thus clearing whole screen
        ld  bc,896              ;loop 896 times = (128/8) * (64-8 for scorebar)
        ldir                    ;all clear!
 
@@ -311,7 +311,7 @@ check_keys:
        ld  a,%10111111         ;function keys (MORE,EXIT,2ND,F1,F2,F3,F4,F5)
        out (1),a               ;ask for them
        nop \ nop               ;delay 8 clocks
-       in  a,(1)               ;get zem!
+       in  a,(1)               ;gettem!
 
 check_exitkey:
        bit 6,a                 ;test bit 6 = exit-key = EXIT
@@ -433,7 +433,7 @@ Display_ground:
        ld  b,16                ;screen width
        ld  de,groundpos-1      ;height of current byte (previous actually)
        psh de                  ;use later
-       ld  hl,GRAPH_MEM+(56*16)-1 ;screen position
+       ld  hl,dispbuffer+(56*16)-1 ;screen position
        psh hl
 
 groundloopright:
@@ -522,7 +522,7 @@ Display_ceiling:
        ld  b,16                ;screen width
        ld  de,ceilingpos-1     ;height of current byte
        psh de                  ;use later
-       ld  hl,GRAPH_MEM-17     ;screen position
+       ld  hl,dispbuffer-17    ;screen position
        psh hl
 
 ceilingloopright:
@@ -615,6 +615,7 @@ newstarok:
 ;--------------------------- pause ------------------------------------------
 
 Pause:
+       psh af
        ld  hl,$0200            ;top left
        ld  (_curRow),hl
        ld  hl,txt_pressenter   ;"Enter to continue"
@@ -623,16 +624,17 @@ pause:
        cal _getkey             ;enter low-power mode and wait for key
        cp  kEnter              ;keypressed = enter?
        jr  nz,pause            ;no, wait some more
+       pop af
        ret                     ;continue
 
 ;--------------------------- teacher ----------------------------------------
 
 Teacher:
        ld  (iy+12),5           ;enable flashing cursor
-       cal _clrScrn
-       cal _homeup             ;top left
+       cal _clrWindow          ;top left
        ld  hl,txt_teacher
        cal _puts               ;display message
+       cal releasekeys
 
 teacherloop:
        cal _getkey             ;enter low-power mode and wait for key
@@ -642,6 +644,7 @@ teacherloop:
        jr  nz,teacherloop      ;no, wait some more
 
        ld  (iy+12),0           ;disable cursor
+       cal releasekeys
        jp  disp_icons          ;+ret
 
 teacherans:
@@ -661,8 +664,8 @@ quit:       im  1                   ;release keyfix procedure
        set 2,(iy+13)           ;set back screen scrolling
        xor a
        ld (_asapvar+1),a       ;next Asm( run will reload the program
-       ld  hl,GRAPH_MEM        ;graph-screen location
-       ld  de,GRAPH_MEM+1
+       ld  hl,dispbuffer       ;graph-screen location
+       ld  de,dispbuffer+1
        ld  (hl),a
        ld  bc,1024-1           ;do it 1024 times = entire screen
        ldir
@@ -672,7 +675,7 @@ quit:       im  1                   ;release keyfix procedure
 ;--------------------------- display ----------------------------------------
 
 Display_Screen:
-       ld  hl,GRAPH_MEM        ;from buffer (top left)
+       ld  hl,dispbuffer       ;from buffer (top left)
        ld  de,VIDEO_MEM        ;to real screen (top left)
        ld  c,56                ;display height = 64 bytes (minus 8 for bar)
 displayloop:
@@ -921,6 +924,7 @@ inc_armor:
 doincarmor:
        add a,6                 ;add 6 to armor
        ld  (your_armor),a      ;change armor
+       ret
 
 select:
        ld  hl,your_pickup      ;select pickups
@@ -1065,7 +1069,7 @@ fire_laser:
        jr  nc,_nolc            ;jump if no carry = no overflow = a<=255
        inc b                   ;a>255 so increase bc by 256
 _nolc: ld  c,a                 ;c = (Y*16+X/8) mod 256
-       ld  hl,GRAPH_MEM        ;save-location
+       ld  hl,dispbuffer       ;save-location
        add hl,bc               ;bc = Y*16+X/8: hl=screen address
        ld  a,15                ;128/8=16=screen width ** minus one (inc a ^^)
        sub d                   ;minus x-start (d=X/8)
@@ -1417,7 +1421,7 @@ chk_noenemy:
        ex  de,hl               ;de=hl=usable enemy
 
 place_enemy:                   ;de = enemy+1
-       ld  bc,0                ;0..0
+       ld  bc,0                ;0..nrlvlenemies
 nrlvlenemies =$-1              ;=nr of enemies minus 1
        cal Random              ;random enemy b..b+c = 0..nrenemies-1
        ld  b,0
@@ -1430,9 +1434,11 @@ nrlvlenemies =$-1                ;=nr of enemies minus 1
        dec de                  ;goto hp64 (before occ)
        ldi                     ;set hp64
        ldi                     ;set hitpoints+occ of enemy class
-       ldi                     ;set enemy class (nr)
+       ld  a,(hl)              ;save sprite-offset/2 (ldi decs bc so in a)
+       ldi                     ;set sprite
        ldi                     ;set x-position
 
+       ld  c,a                 ;c=sprite
        ld  a,(hl)              ;load placeInfo
        inc hl
        dec a                   ;is it 1?
@@ -1448,8 +1454,15 @@ lure_enemy:                      ;2nd possibility: luring enemy
        ld  a,(y)               ;place at same y-pos as YOUR ship
        jr  ypos_OK
 random_enemy:
-       ld  bc,256*51           ;range=0..51
-       cal Random
+       ld  b,0                 ;bc = enemy sprite offset / 2
+       ld  ix,spr_enemy00      ;first enemy sprite
+       add ix,bc               ;add offset for current enemy
+       add ix,bc               ;twice (offset stored as offset/2)
+       ld  a,64-8              ;=57=screen height (8 is scorebar)
+       sub (ix+1)              ;minus sprite height=bottom
+       ld  c,b                 ;range=0 to...
+       ld  b,a                 ;...57-y
+       cal Random              ;random value on screen
 ypos_OK:                       ;random value successfully created
        ld  (de),a              ;save y-position
        inc de                  ;@movecounter
@@ -1641,15 +1654,23 @@ normal_enemy:
        cal moving_enemy
        dec hl
 
+       ld  a,e                 ;new y value
+       cp  57
+       jr  c,enemyonscreenY    ;=on screen
+       cp  -20                 ;moved off at top
+       ld  e,0                 ;reset to top
+       jr  nc,enemyonscreenY
+       ld  e,57                ;otherwise reset to bottom
+enemyonscreenY:
+       ld  (hl),e              ;store new y
+       dec hl                  ;@x
+
        ld  a,d                 ;new x value
        cp  128                 ;x<128
-       jr  c,enemyonscreen     ;=on screen
+       jr  c,enemyonscreenX    ;=on screen
        cp  -7                  ;x<=-8
        jr  c,remove_enemy      ;=off screen
-enemyonscreen:
-
-       ld  (hl),e              ;store new y
-       dec hl                  ;@x
+enemyonscreenX:
        ld  (hl),d              ;store new x
        ld  a,c                 ;a = enemy type
        or  a                   ;type 0? (pickup)
@@ -1718,29 +1739,29 @@ moveleft:
 moveright:
        inc d
 moveXdone:
-       res 7,a
+       res 7,a                 ;01111111=movetype:
        and a
-       ret z                   ;type 0 = don't move
+       ret z                   ;0 = don't move
        dec a
-       jr  z,movetype_updown   ;1 = up / down
+       jr  z,movetype_updown   ;1 = 0 >< up / down
        dec a
-       jr  z,movetype_vslow    ;2 = 1/4 speed
+       jr  z,movetype_vslow    ;2 = .75 >>
        dec a
-       jr  z,movetype_slow     ;3 = 1/2 speed
+       jr  z,movetype_slow     ;3 = .5 >>
        dec a
-       jr  z,movetype_fast     ;3 = 1.5x speed
+       jr  z,movetype_fast     ;4 = .5 <<
        dec a
-       jr  z,movetype_vfast    ;4 = 2x speed
+       jr  z,movetype_vfast    ;5 = 1 <<
        dec a
-       jr  z,movetype_smart    ;5
+       jr  z,movetype_smart    ;6
        dec a
-       jr  z,movetype_lure     ;6 = move y towards you
+       jr  z,movetype_lure     ;7 = 1 >> move y towards you
        dec a
-       jr  z,movetype_slowlure ;7 = lure 1/2 speed
+       jr  z,movetype_slowlure ;8 = 1 >> lure 1/2 speed
        dec a
-       jr  z,movetype_stoplure ;8 = slowlure; stop at x=99
+;      jr  z,movetype_stoplure ;9 = 1 >> slowlure; stop at x=99
 ;      dec a
-;      jr  z,movetype_fulllure ;9 = x+y towards you 1/2 speed
+;      jr  z,movetype_fulllure ;10 = x+y towards you 1/2 speed
 
 movetype_fulllure:
        ld  a,(timer)
@@ -1749,28 +1770,28 @@ movetype_fulllure:
        cal movetype_lure
        ld  a,(x)
        cp  d
-       jr  c,lure_left
+       ret c                   ;move left (already did)
 lure_right:
-       inc d
-       ret
-lure_left:
-       dec d
+       inc d                   ;already moved left, so move right
+moverightonce:
+       inc d                   ;twice (=+1)
        ret
 
-movetype_stoplure:
-       ld  a,100
-       cp  d
-       jr  c,movetype_slowlure
-       inc d                   ;x<100: full stop
 movetype_slowlure:
        ld  a,(timer)
-       and 1
-       ret z
+       and 1                   ;half the time
+       jr  z,moverightonce     ;dont move at all (compensate move left +ret)
 movetype_lure:
+       ld  a,104
+       cp  d
+       jr  c,dothelurethingy
+       inc d                   ;x<106: full stop
+dothelurethingy:
        ld  a,(y)
        cp  e
-       jr  c,lure_up
-lure_down:
+       ret z                   ;don't move if equal
+       jr  c,lure_up           ;below you then move up
+lure_down:                     ;above then move down
        inc e
        ret
 lure_up:
@@ -1953,7 +1974,7 @@ storyLine:
 
        psh hl
        ld  hl,VIDEO_MEM        ;copy text
-       ld  de,GRAPH_MEM        ;to GRAPH_MEM
+       ld  de,dispbuffer       ;to GRAPH_MEM
        ld  bc,1024             ;entire screen
        ldir
        cal _clrLCD
@@ -2008,7 +2029,7 @@ curline =$-1
        add hl,de               ;go to ymin
        ex  de,hl               ;put into de again
 
-       ld  hl,GRAPH_MEM
+       ld  hl,dispbuffer
        add hl,bc               ;hl->logo
 
        sub 64                  ;a=a-64
@@ -2148,7 +2169,7 @@ no_multiples:
        ld  ix,spr_icon
        cal putwidesprite
 iconsdone:
-       ld  hl,GRAPH_MEM        ;normal game-screen
+       ld  hl,dispbuffer       ;normal game-screen
        ld  (PutWhere),hl       ;set sprite-position to normal screen
 
  pop ix \ pop hl \ pop de \ pop bc
@@ -2264,7 +2285,7 @@ RandomY:                  ;HL = random Y 0..50 right side ((1..51)*16-1)
        add hl,hl
        add hl,hl               ;hl = 1..51 * 16 (left side at random y)
        dec hl                  ;hl = 0..50 * 16 (" at right side of screen)
-       ld  de,GRAPH_MEM
+       ld  de,dispbuffer
        add hl,de               ;position on screen
        pop bc
        ret
@@ -2331,7 +2352,6 @@ save_hi:
        ld  hl,_asapvar         ;find own variable
        rst 20h                 ;cal _ABS_MOV10TOOP1
        rst 10h                 ;cal _FINDSYM
-       ret c                   ;not found? who cares...
 
        xor a
         ld  hl,4+storehi_start-_asm_exec_ram
@@ -2350,7 +2370,6 @@ save_lvl:
        ld  hl,_asapvar         ;find own variable
        rst 20h                 ;cal _ABS_MOV10TOOP1
        rst 10h                 ;cal _FINDSYM
-       ret c                   ;not found? who cares...
 
        xor a
        ld  hl,4+storesave_start-_asm_exec_ram
@@ -2894,7 +2913,7 @@ findpixel:
        xor a
 FPbit =$+1
        set 0,a
-       ld  de,GRAPH_MEM        ;screen base position (where x+y=0)
+       ld  de,dispbuffer       ;screen base position (where x+y=0)
 PutWhere =$-2
        add hl,de
        ret
@@ -2925,20 +2944,20 @@ spr_ship01i:
 spr_ship02:
        .db 7,7         ;ship beta class
        .db %11100000   ;███
-       .db %11110000   ;████
+       .db %11111000   ;█████
        .db %01111100   ; █████
        .db %01110010   ; ███  █
        .db %01111100   ; █████
-       .db %11110000   ;████
+       .db %11111000   ;█████
        .db %11100000   ;███
 spr_ship02i:
        .db 8,7
        .db %11100010   ;███   █
-       .db %11110001   ;████   █
+       .db %11111001   ;█████  █
        .db %01111101   ; █████ █
        .db %01110011   ; ███  ██
        .db %01111101   ; █████ █
-       .db %11110001   ;████   █
+       .db %11111001   ;█████  █
        .db %11100010   ;███   █
 
 spr_ship03:
@@ -2987,7 +3006,7 @@ spr_multiple:
        .db %11001100   ; ██  ██
        .db %01111000   ;  ████
 
-;-------------------------------- explosion ---------------------------------
+;-------------------------------- explosion--------------------------------
 
 spr_explosion:
        .db 8,6         ;1
@@ -3197,7 +3216,7 @@ bullettable:
 maxnrweapons = 8+1
 weapondata:
        .db 1,1,%00000000,0,%00000000,0,%00010010,3     ;1 single fire
-       .db 6,1,%00000000,0,%00000000,0,%00010011,3     ;2 fast single
+       .db 4,1,%00000000,0,%00000000,0,%00010011,3     ;2 fast single
        .db 1,1,%00000000,0,%00010010,0,%00010010,6     ;3 double
        .db 1,1,%01110010,2,%10010010,2,%00110010,2     ;4 triple
        .db 3,2,%01110011,2,%10010011,2,%00110011,2     ;5
@@ -3215,21 +3234,21 @@ collidedamage = 4
 ;------------------------------------ bar -----------------------------------
 
 spr_lship:
-       .db 5,3
-       .db %11100000
-       .db %01111000
-       .db %11100000
-lshipsize = 5
+       .db 5,3                 ;li'l ship indicating lives left
+       .db %11100000           ;███
+       .db %01111000           ; ████
+       .db %11100000           ;███
+lshipsize = 5                  ;space between two ship icons
 
 spr_icon:
-       .db 16,7        ;selected .......:.......:
-       .db %11111111           ; ████████████████
-       .db %11000000           ; ██             █
-       .db %11000000           ; ██             █
-       .db %11000000           ; ██             █
-       .db %11000000           ; ██             █
-       .db %11000000           ; ██             █
-       .db %11111111           ; ████████████████
+       .db 16,7        ;selected.......:.......:
+       .db %11111111           ;████████████████
+       .db %11000000           ;██             █
+       .db %11000000           ;██             █
+       .db %11000000           ;██             █
+       .db %11000000           ;██             █
+       .db %11000000           ;██             █
+       .db %11111111           ;████████████████
        .db 7
        .db %11111111
        .db %00000001
@@ -3239,14 +3258,14 @@ spr_icon:
        .db %00000001
        .db %11111111
 spr_icon00:
-       .db 16,7        ;unused   .......:.......:
-       .db %10101010           ; █ █ █ █ █ █ █ █
-       .db %11010101           ; ██ █ █ █ █ █ █ █
-       .db %10101010           ; █ █ █ █ █ █ █ █
-       .db %11010101           ; ██ █ █ █ █ █ █ █
-       .db %10101010           ; █ █ █ █ █ █ █ █
-       .db %11010101           ; ██ █ █ █ █ █ █ █
-       .db %10101010           ; █ █ █ █ █ █ █ █
+       .db 16,7        ;unused  .......:.......:
+       .db %10101010           ;█ █ █ █ █ █ █ █
+       .db %11010101           ;██ █ █ █ █ █ █ █
+       .db %10101010           ;█ █ █ █ █ █ █ █
+       .db %11010101           ;██ █ █ █ █ █ █ █
+       .db %10101010           ;█ █ █ █ █ █ █ █
+       .db %11010101           ;██ █ █ █ █ █ █ █
+       .db %10101010           ;█ █ █ █ █ █ █ █
        .db 7
        .db %10101010
        .db %01010101
@@ -3256,14 +3275,14 @@ spr_icon00:
        .db %01010101
        .db %10101010
 spr_icon01:
-       .db 16,7        ;armor  ; .......:.......:
-       .db %10000111           ; █    ███████
-       .db %10011000           ; █  ██       ██
-       .db %10110011           ; █ ██  ████   ██
-       .db %10110000           ; █ ██    ████ ██
-       .db %10110011           ; █ ██  ████   ██
-       .db %10011000           ; █  ██       ██
-       .db %10000111           ; █    ███████
+       .db 16,7        ;armor  ;.......:.......:
+       .db %10000111           ;█    ███████    ▒
+       .db %10011000           ;█  ██       ██  ▒
+       .db %10110011           ;█ ██  ████   ██ ▒
+       .db %10110000           ;█ ██    ████ ██ ▒
+       .db %10110011           ;█ ██  ████   ██ ▒
+       .db %10011000           ;█  ██       ██  ▒
+       .db %10000111           ;█    ███████    ▒
        .db 7
        .db %11110000
        .db %00001100
@@ -3273,14 +3292,14 @@ spr_icon01:
        .db %00001100
        .db %11110000
 spr_icon02:
-       .db 16,7        ;tailbeam .......:.......:
-       .db %10000000           ; █
-       .db %10000011           ; █     ██
-       .db %10000001           ; █      ███
-       .db %10111011           ; █ ███ ██████  ██
-       .db %10000001           ; █      ███
-       .db %10000011           ; █     ██
-       .db %10000000           ; █
+       .db 16,7        ;tailbeam.......:.......:
+       .db %10000000           ;█               ▒
+       .db %10000011           ;█     ██        ▒
+       .db %10000001           ;█      ███      ▒
+       .db %10111011           ;█ ███ ██████  ██▒
+       .db %10000001           ;█      ███      ▒
+       .db %10000011           ;█     ██        ▒
+       .db %10000000           ;█               ▒
        .db 7
        .db %00000000
        .db %00000000
@@ -3290,14 +3309,14 @@ spr_icon02:
        .db %00000000
        .db %00000000
 spr_icon02b:
-       .db 16,7        ;torpedo  .......:.......:
-       .db %10111000           ; █ ███      █ █ █
-       .db %10011100           ; █  ███     █ █ █
-       .db %10111000           ; █ ███    █  █ █
-       .db %10000000           ; █       ███ █ █
-       .db %11100001           ; ███    ████  █ █
-       .db %10011000           ; █  ██   ████ █ █
-       .db %11100110           ; ███  ██   ██  █
+       .db 16,7        ;torpedo .......:.......:
+       .db %10111000           ;█ ███      █ █ █▒
+       .db %10011100           ;█  ███     █ █ █▒
+       .db %10111000           ;█ ███    █  █ █ ▒
+       .db %10000000           ;█       ███ █ █ ▒
+       .db %11100001           ;███    ████  █ █▒
+       .db %10011000           ;█  ██   ████ █ █▒
+       .db %11100110           ;███  ██   ██  █ ▒
        .db 7
        .db %00010101
        .db %00010101
@@ -3307,14 +3326,14 @@ spr_icon02b:
        .db %11110101
        .db %00110010
 spr_icon03:
-       .db 16,7        ;bullets  .......:.......:
-       .db %10000000           ; █       ██
-       .db %10000011           ; █     █████ ▒▒
-       .db %10011000           ; █  ██   ██  ▒▒
-       .db %11111100           ; ██████      ▒▒
-       .db %10011000           ; █  ██   ██  ▒▒
-       .db %10000011           ; █     █████ ▒▒
-       .db %10000000           ; █       ██
+       .db 16,7        ;bullets .......:.......:
+       .db %10000000           ;█       ██      ▒
+       .db %10000011           ;█     █████ ▒▒▒ 
+       .db %10011000           ;█  ██   ██  ▒▒▒ 
+       .db %11111100           ;██████      ▒▒▒ 
+       .db %10011000           ;█  ██   ██  ▒▒▒ 
+       .db %10000011           ;█     █████ ▒▒▒ 
+       .db %10000000           ;█       ██      ▒
        .db 7
        .db %11000000
        .db %11100000
@@ -3324,14 +3343,14 @@ spr_icon03:
        .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 16,7        ;laser   .......:.......:
+       .db %10000000           ;█               ▒
+       .db %10001010           ;█   █ █     ▒▒▒ 
+       .db %11101100           ;███ ██      ▒▒▒ 
+       .db %11110111           ;████ ███████▒▒▒█▒
+       .db %11101100           ;███ ██      ▒▒▒ 
+       .db %10001010           ;█   █ █     ▒▒▒ 
+       .db %10000000           ;█               ▒
        .db 7
        .db %00000000
        .db %00000000
@@ -3341,14 +3360,14 @@ spr_icon04:
        .db %00000000
        .db %00000000
 spr_icon05:
-       .db 16,7        ;multiple .......:.......:
-       .db %10000011           ; █     ███
-       .db %10000001           ; █      ████  ██
-       .db %10000001           ; █      ████
-       .db %10000011           ; █     ███
-       .db %10011000           ; █  ██
-       .db %10111100           ; █ ████  ██    ██
-       .db %10011000           ; █  ██
+       .db 16,7        ;multiple.......:.......:
+       .db %10000011           ;█     ███       ▒
+       .db %10000001           ;█      ████  ██ ▒
+       .db %10000001           ;█      ████     ▒
+       .db %10000011           ;█     ███       ▒
+       .db %10011000           ;█  ██           ▒
+       .db %10111100           ;█ ████  ██    ██▒
+       .db %10011000           ;█  ██           ▒
        .db 7
        .db %10000000
        .db %11100110
@@ -3366,7 +3385,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.97.73 ",127," by Shiar",0 ;right behind txt_email
+txt_about:     .db "v0.98.77 ",127," by Shiar",0 ;right behind txt_email
 _txt_about = $3321
 txt_menu1:     .db "NEW GAME",0
 txt_menu2:     .db "CONTINUE",0
@@ -3380,37 +3399,35 @@ txt_score:      .db "Score",0
 txt_hiscore:   .db "Hiscore",0
 
 txt_pressenter:        .db "Enter to continue",0 ;pause
-txt_teacher:   .db "(2",Lpi,"*.97)/sin 13",0 ;boss
-txt_teacherans:        .db Lneg,"14.5053971725",0
+txt_teacher:   .db "(2",Lpi,"*.98)/sin 13",0 ;teacher
+txt_teacherans:        .db Lneg,"14.6549373495",0
 
 ;---------------------------- save data -------------------------------------
 
 storehi_start:
-hiscore                .dw 0
-hiname         .db "shiar.97",0
+hiscore                .dw 0                   ;default hiscore
+hiname         .db "shiar.98",0        ;   "       "    name
 storehi_end:
 
-storesave_start:
-level          .db $01                 ;level number
-levelp         .dw level01             ;pointer to level data
-pickuptimer    .db $04                 ;counts when to place a pickup
-your_ship      .dw spr_ship01          ;your sprite
-your_score     .dw $0000               ;current score
-
-your_pickup    .db $04
-your_occ       .db $00                 ;0=normal 1..16=exploding
-your_inv       .db $00                 ;invincibility left
-your_armor     .db $0a                 ;HP left
-your_lives     .db $03                 ;
-
-your_weapon    .db $00                 ;current weapon upgrade
-your_multiples .db $00                 ;multiples present
-your_tail      .db $01                 ;tail beam present
+storesave_start:                       ;--SAVED GAME--                 defs:
+level          .db  1                  ;level number                   1
+levelp         .dw level01             ;pointer to level data          l01
+pickuptimer    .db  4                  ;counts when to place a pickup  4
+your_ship      .dw spr_ship01          ;your sprite                    sprs1
+your_score     .dw  0                  ;current score                  0
+your_pickup    .db  0                  ;pickups already picked up      0
+your_occ       .db  0                  ;0=normal 1..16=exploding       0
+your_inv       .db  0                  ;invincibility left             0
+your_armor     .db 12                  ;HP left                        12
+your_lives     .db  3                  ;lives left                     3
+your_weapon    .db  0                  ;current weapon upgrade         0
+your_multiples .db  0                  ;multiples present              0
+your_tail      .db  0                  ;tail beam present              0
 storesave_end:
 
 time2invert:   .db 0                   ;time until b<>w switch (0 at startup)
 
-;XLlevelsdata:---------------------------------------------------------------
+;------------------------------ levels data ---------------------------------
 
 ;format:boss: [moveType] [enemyType]
 ;      @level: [nr.dif.enemies]x [enemy nr]
@@ -3429,25 +3446,31 @@ level00:
        .db $52,$36,"by Shiar"                  ,0,0,$19,$23
        .db $ff                         ;story end
 
+       .db 20 ;boss for level01
+level01:                       ;intro-like, just a few enemies to begin with
+       .db 2,6,8
+       .db 26,70,20,%00010000,0,0,0
+       .db 1,2,3,4,5,6,6,5,4,3,4,5,4,5,6,5
+       .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+       .db 1,1
+
        .db 21
-level01:               ;first wave of enemies; easeey
-       .db 2,6,7
-       .db 20,60,60,%00010000,0,0,0
+level02:                       ;first wave of enemies; easeey
+       .db 3,6,7,8
+       .db 20,60,60,%00100000,0,0,0
        .db 1,2,3,4,5,6,6,5,4,3,4,5,4,5,6,5
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
 
        .db 22
-level02:               ;some more enemies
-       .db 4,6,7,7,8
-       .db 17,40,75,%00010000,0,0,0
+level03:                       ;some more enemies
+       .db 4,7,8,9,10
+       .db 17,40,75,%00110000,0,0,0
        .db 1,2,3,4,5,6,6,5,4,3,4,5,4,5,6,5
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
 
-       .db 0
-
-       .db 0
+       .db 0,0 ;storyline ID
        .db 1,1,"Long-Range scanners are ",
        .db     "showing",0,1
        .db 1,8,"lots of enemy vessels on ",
@@ -3460,18 +3483,18 @@ level02:                ;some more enemies
        .db 1,38+5,$FF
 
        .db 23
-level04:               ;light asteroid belt
+level04:                       ;light asteroid belt
        .db 3,1,2,4
-       .db 12,24,80,%00011000
+       .db 12,24,80,%00111000
        .db 2,0,0
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
        .db 1,1
 
        .db 24
-level05:               ;inside asteroid belt
+level05:                       ;inside asteroid belt
        .db 5,1,2,3,4,5
-       .db 6,10,180,%00101000
+       .db 6,10,180,%01011000
        .db 2,0,0
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
@@ -3480,7 +3503,7 @@ level05:          ;inside asteroid belt
        .db 25
 level02a:
        .db 3,4,5,6
-       .db 30,1,40,%00010000
+       .db 30,1,40,%01000000
        .db 0,0,0
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1     ;16
        .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
@@ -3554,6 +3577,7 @@ level07:
 
 ;format: [HP64] [000000:HP 00:occ] [sprite] [xpos] [appearance(ypos)]
 ;       [movetype] [time2fire] [firefreq]
+;appearances: 1=random; 2=lure; 3=halflure
 ;case movetype:
 ;  1=updown; 2=1/4x; 3=1/2x; 4=1.5x; 5=2x; 6=smart; 7=y-lure;
 ;  8=y-lure 1/2x; 9=8 stop at x=99; 10=x+y-lure 1/2x
@@ -3564,41 +3588,33 @@ enemyspecs:
        .db 0,%01011010,(spr_enemyA3-spr_enemy00)/2,128,1,4,0,0
        .db 1,%00001010,(spr_enemyA4-spr_enemy00)/2,128,1,3,0,0
        .db 0,%00111110,(spr_enemyA4-spr_enemy00)/2,128,1,5,0,0
-;6=basic enemy
-       .db 0,%00100110,(spr_enemy13-spr_enemy00)/2,128,1,0,1,0
-;7=normal enemy
-       .db 0,%00101110,(spr_enemy04-spr_enemy00)/2,128,3,0,19,39
-;8=jumping bug (up/down)
-       .db 0,%00001111,(spr_enemy12-spr_enemy00)/2,128,2,1,87,5
-
-       .db 0,%00000110,(spr_enemy04-spr_enemy00)/2,2,0,0,0,0   ;9=
-       .db 0,%00000111,(spr_enemy05-spr_enemy00)/2,3,0,0,0,0   ;10=
-       .db 0,%00001011,(spr_enemy06-spr_enemy00)/2,2,0,0,0,0   ;11=
-
-       .db 0,%00011011,(spr_enemy07-spr_enemy00)/2,3,0,0,0,0   ;12=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;13=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;14=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;15=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;16=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;17=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;18=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;19=
-       .db 0,%00000011,(spr_enemy07-spr_enemy00)/2,1,0,0,0,0   ;20=
-
-       .db 1,%00110011,(spr_boss0_1-spr_enemy00)/2,128,1,7,15,10       ;21=sm_boss1
-       .db 1,%01001011,(spr_boss0_2-spr_enemy00)/2,128,3,9,10,9        ;22=sm_boss2
-       .db 2,%00001011,(spr_boss0_3-spr_enemy00)/2,128,1,0,36,14       ;23=asteroid
-       .db 2,%00110011,(spr_boss0_3-spr_enemy00)/2,128,2,0,28,12       ;24=asteroid
-       .db 2,%00000111,(spr_boss0_4-spr_enemy00)/2,128,3,0,18,7        ;25=bigboss1
-       .db 2,%01001011,(spr_boss0_5-spr_enemy00)/2,128,3,0,18,7        ;26=bigboss2
-
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
-       .db 0,%00000000,0,0,0,0,0,0
+;6-10=basic enemies
+       .db 0,%00010010,(spr_enemyE1-spr_enemy00)/2,128,1,0,10,0 ;weak
+       .db 0,%00110010,(spr_enemyE4-spr_enemy00)/2,128,1,3,6,50 ;slow
+       .db 0,%00100110,(spr_enemyE2-spr_enemy00)/2,128,1,0,1,0
+       .db 0,%00101110,(spr_enemyE3-spr_enemy00)/2,128,3,0,19,39
+       .db 0,%00101010,(spr_enemyE5-spr_enemy00)/2,128,3,4,1,0 ;fast
+;11=jumping bug (up/down)
+       .db 0,%00001111,(spr_enemyN3-spr_enemy00)/2,128,2,1,87,5
+
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;12
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;13
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;14
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;15
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;16
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;17
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;18
+       .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,1,0,0,0,0   ;19
+;20-22=first bosses
+       .db 1,%00101011,(spr_boss0_1-spr_enemy00)/2,127,1,8,20,12       ;20
+       .db 1,%00110011,(spr_boss0_1-spr_enemy00)/2,127,1,8,15,10       ;21
+       .db 1,%01001011,(spr_boss0_2-spr_enemy00)/2,127,3,9,10,9        ;22
+;23-24=asteroid bosses
+       .db 2,%00001011,(spr_boss0_3-spr_enemy00)/2,127,1,10,36,14
+       .db 2,%00110011,(spr_boss0_3-spr_enemy00)/2,127,2,10,28,12
+;25-26=big bosses
+       .db 2,%00000111,(spr_boss0_4-spr_enemy00)/2,127,3,7,18,7        ;25=bigboss1
+       .db 2,%01001011,(spr_boss0_5-spr_enemy00)/2,127,3,7,18,7        ;26=bigboss2
 
 spr_enemy00:
        .db 16,8                        ;pickup
@@ -3657,64 +3673,136 @@ spr_enemyA4:
        .db %01111011                   ; ████ ██
        .db %01001110                   ; █  ███
        .db %00110000                   ;  ██
-spr_enemy04:
-       .db 6,6                         ;enemy type one
-       .db %00111100                   ;   ████
-       .db %01110000                   ;  ███
-       .db %11110000                   ; ████
-       .db %11110000                   ; ████
-       .db %01110000                   ;  ███
-       .db %00111100                   ;   ████
-spr_enemy05:
-       .db 8,6                         ;enemy type two
-       .db %00111111                   ;    █████
-       .db %01111000                   ;  ████
-       .db %11111100                   ; ██████
-       .db %11111100                   ; ██████
-       .db %01111000                   ;  ████
-       .db %00111111                   ;    █████
-spr_enemy06:
-       .db 6,6                         ;enemy type three
-       .db %01111100                   ;  █████
-       .db %11110000                   ; ████
-       .db %11111000                   ; █████
-       .db %11111000                   ; █████
-       .db %11110000                   ; ████
-       .db %01111100                   ;  █████
-spr_enemy06A:
-       .db 6,6                         ;enemy type four
+
+spr_enemyE1:
+       .db 6,7                         ;weak
+       .db %00111100                   ;  ████
+       .db %01000100                   ; █   █
+       .db %10111000                   ;█ ███
+       .db %11100000                   ;███
+       .db %10111000                   ;█ ███
+       .db %01000100                   ; █   █
+       .db %00111100                   ;  ████
+       .db 0
+spr_enemyE2:
+       .db 6,6                         ;weak
+       .db %00111100                   ;  ████
+       .db %01010000                   ; █ █
+       .db %10100000                   ;█ █
+       .db %10100000                   ;█ █
+       .db %01010000                   ; █ █
+       .db %00111100                   ;  ████
+spr_enemyE3:
+       .db 6,6                         ;normal solid (Galaxian enemy)
+       .db %00111100                   ;  ████
+       .db %01110000                   ; ███
+       .db %11110000                   ;████
+       .db %11110000                   ;████
+       .db %01110000                   ; ███
+       .db %00111100                   ;  ████
+spr_enemyE4:
+       .db 6,7
+       .db %00011100                   ;   ███
+       .db %01101000                   ; ██ █
+       .db %10011000                   ;█  ██
+       .db %01110000                   ; ███
+       .db %10011000                   ;█  ██
+       .db %01101000                   ; ██ █
+       .db %00011100                   ;   ███
+       .db 0
+spr_enemyE5:
+       .db 6,6                         ;speedy
+       .db %00011100                   ;   ███
+       .db %01111000                   ; ████
+       .db %11100000                   ;███
+       .db %11100000                   ;███
+       .db %01111000                   ; ████
+       .db %00011100                   ;   ███
+
+spr_enemyG1:
+       .db 8,6                         ;G-Type
+       .db %00111111                   ;   █████
+       .db %01001000                   ; █  █
+       .db %10110100                   ;█ ██ █
+       .db %10110100                   ;█ ██ █
+       .db %01001000                   ; █  █
+       .db %00111111                   ;   █████
+spr_enemyG2:
+       .db 8,6                         ;smaller nacelles
+       .db %00000111                   ;     ███
+       .db %01101100                   ; ██ ██
+       .db %10110100                   ;█ ██ █
+       .db %10110100                   ;█ ██ █
+       .db %01101100                   ; ██ ██
+       .db %00000111                   ;     ███
+spr_enemyG3:
+       .db 8,6                         ;shuttle
+       .db %00001111                   ;    ████
+       .db %01111100                   ; █████
+       .db %10011100                   ;█  ███
+       .db %10011100                   ;█  ███
+       .db %01111100                   ; █████
+       .db %00001111                   ;    ████
+spr_enemyG4:
+       .db 8,6                         ;G-Type solid
+       .db %00111111                   ;   █████
+       .db %01111000                   ; ████
+       .db %11111100                   ;██████
+       .db %11111100                   ;██████
+       .db %01111000                   ; ████
+       .db %00111111                   ;   █████
+spr_enemyG5:
+       .db 6,6                         ;G lost his head; large window ;)
+       .db %01111100                   ; █████
+       .db %10110000                   ;█ ██
+       .db %10111000                   ;█ ███
+       .db %10111000                   ;█ ███
+       .db %10110000                   ;█ ██
+       .db %01111100                   ; █████
+spr_enemyG6:
+       .db 7,6                         ;small G-type
+       .db %00011110                   ;   ████
+       .db %01111000                   ; ████
+       .db %11110000                   ;████
+       .db %11110000                   ;████
+       .db %01111000                   ; ████
+       .db %00011110                   ;   ████
+
+spr_enemyS1:
+       .db 6,6                         ;solid
        .db %00111000                   ;   ███
        .db %01111100                   ;  █████
        .db %11111000                   ; █████
        .db %11111000                   ; █████
        .db %01111100                   ;  █████
        .db %00111000                   ;   ███
-spr_enemy07:
-       .db 7,6                         ;enemy type five
-       .db %00011110                   ;    ████
-       .db %01111110                   ;  ██████
-       .db %11111100                   ; ██████
-       .db %11111100                   ; ██████
-       .db %01111110                   ;  ██████
-       .db %00011110                   ;    ████
-spr_enemy08:
-       .db 7,6                         ;enemy type six
+spr_enemyS2:
+       .db 7,6                         ;some attack vessel
        .db %00011100                   ;    ███
        .db %01110010                   ;  ███  █
        .db %10101100                   ; █ █ ██
        .db %10101100                   ; █ █ ██
        .db %01110010                   ;  ███  █
        .db %00011100                   ;    ███
-spr_enemy09:
-       .db 8,6                         ;enemy type seven
+spr_enemyS3:
+       .db 7,6                         ;interceptor
+       .db %00011110                   ;    ████
+       .db %01111110                   ;  ██████
+       .db %11111100                   ; ██████
+       .db %11111100                   ; ██████
+       .db %01111110                   ;  ██████
+       .db %00011110                   ;    ████
+spr_enemyS4:
+       .db 8,6                         ;cheap intercept
        .db %00011011                   ;    ██ ██
        .db %01110110                   ;  ███ ██
        .db %10111100                   ; █ ████
        .db %10111100                   ; █ ████
        .db %01110110                   ;  ███ ██
        .db %00011011                   ;    ██ ██
-spr_enemy10:
-       .db 8,7                         ;enemy type eight
+
+spr_enemyN1:
+       .db 8,7                         ;some cool Nemesis-MSX enemy
        .db %00111110                   ;  █████
        .db %11110001                   ;████   █
        .db %00001110                   ;    ███
@@ -3723,8 +3811,8 @@ spr_enemy10:
        .db %11110001                   ;████   █
        .db %00111110                   ;  █████
        .db 0
-spr_enemy11:
-       .db 8,7                         ;enemy type nine
+spr_enemyN2:
+       .db 8,7                         ;
        .db %00111110                   ;  █████
        .db %00011101                   ;   ███ █
        .db %11111111                   ;████ ███
@@ -3733,8 +3821,8 @@ spr_enemy11:
        .db %00011101                   ;   ███ █
        .db %00111110                   ;  █████
        .db 0
-spr_enemy12:
-       .db 8,7                         ;enemy type ten
+spr_enemyN3:
+       .db 8,7                         ;Nem3MSX jumper lvl#3
        .db %10111110                   ;█ █████
        .db %01011101                   ; █ ███ █
        .db %01111110                   ; ██████
@@ -3743,60 +3831,52 @@ spr_enemy12:
        .db %01011101                   ; █ ███ █
        .db %10111110                   ;█ █████
        .db 0
-spr_enemy13:
-       .db 6,6                         ;enemy type eleven
-       .db %00111100                   ;   ████
-       .db %01010000                   ;  █ █
-       .db %10100000                   ; █ █
-       .db %10100000                   ; █ █
-       .db %01010000                   ;  █ █
-       .db %00111100                   ;   ████
 
 spr_boss0_1:
-       .db 16,10                       ;boss type one   :
-       .db %00000001                   ;        █████████
-       .db %00001111                   ;     ███████████
-       .db %00111111                   ;   ██████████
-       .db %01011111                   ;  █ ██████
-       .db %10011111                   ; █  █████ █
-       .db %10011111                   ; █  █████ █
-       .db %01011111                   ;  █ ██████
-       .db %00111111                   ;   ██████████
-       .db %00001111                   ;     ███████████
-       .db %00000001                   ;        █████████
+       .db 16,10               ;boss type one..:.......:
+       .db %00000001                   ;       ██████ ██
+       .db %00001110                   ;    ███   █ ███
+       .db %00110010                   ;  ██  █ ████
+       .db %01001101                   ; █  ██ ██
+       .db %11101011                   ;███ █ ██ █
+       .db %11101011                   ;███ █ ██ █
+       .db %01001101                   ; █  ██ ██
+       .db %00110010                   ;  ██  █ ████
+       .db %00001110                   ;    ███   █ ███
+       .db %00000001                   ;       ██████ ██
        .db 10
-       .db %11111111
-       .db %11111110
+       .db %11111011
+       .db %00101110
        .db %11110000
        .db %10000000
        .db %01000000
        .db %01000000
        .db %10000000
        .db %11110000
-       .db %11111110
-       .db %11111111
+       .db %00101110
+       .db %11111011
        .db 0
 spr_boss0_2:
-       .db 16,10                       ;boss type two   :
-       .db %11111110                   ; ███████
-       .db %00001111                   ;     █████   ████
-       .db %00111111                   ;   █████████   █
-       .db %01001111                   ;  █  ███████████
-       .db %10001101                   ; █   ██ █ █████
-       .db %10001101                   ; █   ██ █ █████
-       .db %01001111                   ;  █  ███████████
-       .db %00111111                   ;   █████████   █
-       .db %00001111                   ;     █████   ████
-       .db %11111110                   ; ███████
+       .db 16,10               ;boss type two..:.......:
+       .db %11111110                   ;███████
+       .db %00000011                   ;      ███   ████
+       .db %00110101                   ;  ██ █ ████    
+       .db %01111010                   ; ████ █ █  █ ██
+       .db %10001101                   ;█   ██ █ ██ ██
+       .db %10001101                   ;█   ██ █ ██ ██
+       .db %01111010                   ; ████ █ █  █ ██
+       .db %00110101                   ;  ██ █ ████    
+       .db %00000011                   ;      ███   ████
+       .db %11111110                   ;███████
        .db 9
        .db %00000000
        .db %10001111
-       .db %11100011
-       .db %11111110
-       .db %01111100
-       .db %01111100
-       .db %11111110
-       .db %11100011
+       .db %11100001
+       .db %10010110
+       .db %01101100
+       .db %01101100
+       .db %10010110
+       .db %11100001
        .db %10001111
 spr_boss0_3:
        .db 16,11                       ;bigasteroid one
@@ -3805,12 +3885,12 @@ spr_boss0_3:
        .db %01111111                   ; ███████ █
        .db %01111111                   ; █████████
        .db %11111110                   ;███████ ███
-       .db %11111110                   ;███████████
+       .db %11111111                   ;███████████
        .db %11111111                   ;████████████
-       .db %11111110                   ;███████ ████
-       .db %01111110                   ; █████████
-       .db %00111110                   ;  ██████
-       .db %00011100                   ;    ███
+       .db %10111110                   ;█ █████ ████
+       .db %01011111                   ; █ ███████
+       .db %00110111                   ;  ██ ███
+       .db %00001110                   ;    ███
        .db 9
        .db %00000000
        .db %10000000
@@ -3843,7 +3923,7 @@ spr_boss0_4:
        .db %00000011                   ;      ████ █
        .db %00000111                   ;     ███ ███
        .db 19                          ;         █ █
-       .db %01010000
+       .db %01010000                   ;modelled after a Nemesis][MSX boss
        .db %01110000
        .db %11010000
        .db %10110000
@@ -3879,7 +3959,7 @@ spr_boss0_5:
        .db %01111101                   ; █████ █ ███████
        .db %00111110                   ;  █████ █████
        .db %00001111                   ;    █████
-       .db 15
+       .db 15                          ;modelled after a Nemesis][MSX boss
        .db %10000000
        .db %11111000
        .db %01111111
@@ -3902,10 +3982,10 @@ spr_boss0_5:
 ;----------------------------------------------------------------------------
 
 logo_nemesis:
-.db %11111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00001011,%11111111,%11111111,%11111111,%11111000
-.db %01111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00011011,%11111111,%11111111,%11111111,%11110000
-.db %00111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00111011,%11111111,%11111111,%11111111,%11100000
-.db %00011111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%01111011,%11111111,%11111111,%11111111,%11000000
+.db %11111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00001011,%11111111,%11111111,%11111111,%11111110
+.db %01111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00011011,%11111111,%11111111,%11111111,%11111100
+.db %00111111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%00111011,%11111111,%11111111,%11111111,%11111000
+.db %00011111,%11111111,%11111111,%11111110,%11111111,%11110111,%11111111,%11111110,%11111111,%111101111,%11111111,%01111011,%11111111,%11111111,%11111111,%11110000
 .db %00000000,%00000000,%00000001,%00011110,%00010000,%00000000,%10000001,%00011110,%00010000,%000000001,%00000000,%00001000,%01000000,%00000000,%00000000,%00000000
 .db %00000000,%00000000,%00000011,%00011110,%00110000,%00000001,%10000011,%00011110,%00110000,%000000011,%00000000,%00011000,%11000000,%00000000,%00000000,%00000000
 .db %00000000,%00000000,%00000111,%00011110,%01110000,%00000011,%10000111,%00011110,%01110000,%000000111,%00000000,%00111001,%11000000,%00000000,%00000000,%00000000
@@ -3932,7 +4012,7 @@ logo_nemesis:
 ;----------------------------------------------------------------------------
 ;----------------------------------------------------------------------------
 
-; 0.97.73 -- 3.VII.00 -- size 6612
+; 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
@@ -3995,8 +4075,14 @@ logo_nemesis:
 ;      + 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)
-;
-;      ! game sometimes crashes after running Nemesis:
-;         (in TI-OS: screen misformed + freeze)
+;      # 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)
 ;
 ;       + added        - removed       * changed       # bug fixed
\ No newline at end of file