version 0.93 (public): (hi)score, better pickup/multiple movement
authorMischa Poslawsky <nemesis@shiar.org>
Sat, 11 Sep 1999 10:07:40 +0000 (12:07 +0200)
committerMischa Poslawsky <nemesis@shiar.org>
Wed, 18 Mar 2009 02:16:59 +0000 (03:16 +0100)
# torpedo-upgrade was cleared when firing torpedo at the end of level
* pickups move half the speed of enemies (one pixel every 2 turns)
# fixed a bug causing some calcs to crash on quit
# contrast was not restored after game over (remained one step darker)
* fire key changed from F1 to 2ND, select key changed from F2 to ALPHA
* improved key-checking procedureS (much faster, smaller, better, yea)
* changed title screen, displays version white on black and my e-mail
+ score count!! simple system: one point for an enemy destroyed, two
  for collision, and 1 point every 256 frames. plus level clear bonus
+ saves HISCORE!!! At game-over screen your and hi-score are displayed
* Game over screen will be displayed before quit after pressing <exit>
+ screen is cleared and cursor moved to top-left on quit
* multiples move only when YOU move, just like the original MSXNemesis
* multiple is placed at your position when selected/at start of level
* minor changes in iconbar (3rd icon is empty, line between 5th/score)

nemesis.txt
nemesis.z80

index 1dfba3cf84ada00ff3710a94c0925af493470ba8..d7b2e48f0a162996800927c687ae38dc4437f1e6 100644 (file)
@@ -1,20 +1,20 @@
              ╔═══════════════════╗
              ╔═══════════════════╗
-             ║   N E M E S I S   ║██     Game: Nemesis  version 0.9.94 BETA!!
+             ║   N E M E S I S   ║██     Game: Nemesis  version 0.93.911 BETA!!
              ║───────────────────║██     By:   SHIAR  shiar0@hotmail.com
              ║───────────────────║██     By:   SHIAR  shiar0@hotmail.com
-             ║ 0.9 BETA by SHIAR ║██                  ICQ #43840958
-             ╚═══════════════════╝██     Size: 2693 on calc
+             ║ 0.93BETA by SHIAR ║██                  ICQ #43840958
+             ╚═══════════════════╝██                  http://come.to/shiar
                █████████████████████     Calc: TI-86 only, for now..
                █████████████████████     Calc: TI-86 only, for now..
+                                         Size: 3098 bytes on calc
+                           Description: Arcade-game based on an old MSX-game.
+
 
 
 >>>>>>> INTRO TO NEMESIS ------------------------------------------------------
 
   Nemesis is an old arcade-game for the MSX. It was a really good game,
 
 
 >>>>>>> INTRO TO NEMESIS ------------------------------------------------------
 
   Nemesis is an old arcade-game for the MSX. It was a really good game,
-that's why Konami made three Nemesis games, named Nemesis, Nemesis ][ and
-Nemesis III. This game has got some things in common with each game:
+that's why Konami made three Nemesis games, named Nemesis (1986), Nemesis ][
+(1987) and Nemesis III ('88).
 
 
-* Nemesis' bad graphics, and worse. But what do you expect of a simple TI86.
-* Nemesis ][ variety of ship-upgrades and cheats (not yet finished: beta v)
-* The BAD storyline of Nemesis 3 (not yet finished: beta version)
 
 >>>>>>> CONTROLS --------------------------------------------------------------
 
 
 >>>>>>> CONTROLS --------------------------------------------------------------
 
@@ -22,41 +22,61 @@ Nemesis III. This game has got some things in common with each game:
 blast 'n evade your way through a lot of enemies. Some enemies leave pickups
 which you can collect in order to power-up your ship. Keys are:
 
 blast 'n evade your way through a lot of enemies. Some enemies leave pickups
 which you can collect in order to power-up your ship. Keys are:
 
-Arrow keys: stupid question, but ok: self-destruct your ship (no, really)
-F1: fire your weapon (bullets are blastalot-class and infinate)
-F2: enable the currently selected upgrade
+Arrow keys: stupid question, self-destructs your ship of course
+2nd: fire your weapon (disruptor as default, upgradable to laserbeam)
+ALPHA: enable the currently selected upgrade
+MORE: pause, press Enter to continue
 EXIT: resets your calc and clears your ROM memory
 
 EXIT: resets your calc and clears your ROM memory
 
-  No pause key yet. But the game does halt when you press the Down and Left-
-keys simoultaniously. No it's not a bug, I did that on purpose. Just kidding,
-can anybody help me? I also noticed the same problem in Galaxian for the 86.
 
 
->>>>>>> SCORE-BAR -------------------------------------------------------------
+>>>>>>> PICKUPS AND SO --------------------------------------------------------
+
+  Collect the pickups enemies leave after they're destroyed to upgrade your
+ship. The highlighted icon in the score bar (bottom) can be activated by
+pressing ALPHA. The number in the first icon shows your shield-points left.
+This icon can be chosen more than once, to increase your shield-points.
+
+  Other upgrades: ┌───────┬─────────┬───────┬───────┬───────────┐
+                  │ ARMOR │ TORPEDO │ EMPTY │ LASER │ MULTIPLES │
+                  └───────┴─────────┴───────┴───────┴───────────┘
 
 
-  The first icon shows your shield-points left (press F2 when you picked one
-pickup to increase shield-points) and the second icon shows whether you have
-torpedoes on your ship (needs two pickups to activate).
+  All upgrades and pickups will be lost when your ship is destroyed!
 
 
-  I'll make more options later, but as you may or may not know: this is still a
-beta version.
 
 >>>>>>> BETA STUFF ------------------------------------------------------------
 
 
 >>>>>>> BETA STUFF ------------------------------------------------------------
 
-  There are just seven levels for now, don't try to get to level eight.
+  There are just eight levels for now, don't try to get to level nine.
 Things to come:
 
 Things to come:
 
-* more levels more enemies more pickups
+* more LEVELS!! more enemies more pickups
 * maybe obstacles?
 * storyline
 * maybe obstacles?
 * storyline
-* pause- and teacher-key
+* teacher-key or save game
+* save names with hi-score
+* source code release
 
   Send me any IDEAS and BUGS found!! Or send me you like this program, or even
 
   Send me any IDEAS and BUGS found!! Or send me you like this program, or even
-send me something if you don't. Again: shiar0@hotmail.com, or, even better:
-ICQ #43840958! PLEASE!
+send me something if you don't. Again: shiar0@hotmail.com, or ICQ #43840958!
+PLEASE!
+
+  Tested on TI86es (and emulators) with ROM 1.4 and 1.6 using YAS, Rascall and
+Asm(.
+
 
 
->>>>>>> DISCLAIMER AND END ---------------------------------------------------
+>>>>>>> CREDITS ---------------------------------------------------------------
+
+  SHIAR                programming and everything else. SHIAR0@HOTMAIL.COM
+  KONAMI           for writing the original Nemesises and more great games
+  FRAGGIE            beta tester #1 and being very positive about the game
+  FREE BIRD             beta tester #2, will help me writing the storyline
+  ELEANOR GILES     for sending me mail / reporting a bug / making my day!
+  JAMES RUBINGH                          sent me an ICQ message, thank you
+
+
+>>>>>>> DISCLAIMER AND END ----------------------------------------------------
 
   Take any program and read the disclaimer. The same thing applies here. Now go
 and play Nemesis and SEND ME SOMETHING!
 
 
   Take any program and read the disclaimer. The same thing applies here. Now go
 and play Nemesis and SEND ME SOMETHING!
 
+
 ----------------------------------------------------------------------- <<<<<<<
\ No newline at end of file
 ----------------------------------------------------------------------- <<<<<<<
\ No newline at end of file
index 6fd51d94a616b260ae6d21ca27a1a3d4a8ae6692..1400114e922b272dc283accebccc81c0859cafae 100644 (file)
@@ -1,11 +1,13 @@
        .include "asm86.h"
        .include "ti86asm.inc"
        .include "ram86.inc"
        .include "asm86.h"
        .include "ti86asm.inc"
        .include "ram86.inc"
+       .include "ti86abs.inc"
 
        .org _asm_exec_ram
 
 TEXT_MEM = _textShadow
 DELC_LEN = _undelBufLen                ;$64 bytes long
 
        .org _asm_exec_ram
 
 TEXT_MEM = _textShadow
 DELC_LEN = _undelBufLen                ;$64 bytes long
+_dispahl = $4a33
 
         nop
         jp init
 
         nop
         jp init
@@ -13,7 +15,7 @@ DELC_LEN = _undelBufLen               ;$64 bytes long
        .dw Title               ;pointer to description
        .dw spr_ship            ;pointer to YAS icon
 
        .dw Title               ;pointer to description
        .dw spr_ship            ;pointer to YAS icon
 
-Title: .db "Nemesis v0.92.98 by Shiar",0
+Title: .db "Nemesis v0.93.911 by Shiar",0
 
 just_fired     = TEXT_MEM      ;byte
 temp1          = TEXT_MEM+1    ;word
 
 just_fired     = TEXT_MEM      ;byte
 temp1          = TEXT_MEM+1    ;word
@@ -66,20 +68,25 @@ LogoLoop:
        dec a                   ;decrease line-counter
        jr nz,LogoLoop          ;repeat when counter is not yet zero
 
        dec a                   ;decrease line-counter
        jr nz,LogoLoop          ;repeat when counter is not yet zero
 
-menutext:
-       ld  hl,$1608            ;just below logo
+       ld  hl,VIDEO_MEM+(16*$39)+4     ;$39 rows down, 4 cols right (4*8=$20)
+       ld  b,$8                ;draw 8x one byte = 8*8 = 64 pixels wide
+       ld  a,%11111111         ;horizontal line mask
+underline:
+       ld  (hl),a              ;draw one piece of the divider-line
+       inc hl                  ;move right (8 pixels = 1 byte)
+       djnz underline          ;repeat (16bytes * 8pixels =128= screen width)
+
+       set 3,(iy+5)
+       ld  hl,$3320            ;near the bottom of the screen
        ld  (_penCol),hl
        ld  (_penCol),hl
-       ld  hl,txt_about        ;display "by Shiar (ICQ#43840958)"
+       ld  hl,txt_about        ;display version and author (yes, that's me!)
        call _vputs
        call _vputs
+       res 3,(iy+5)
 
 
-       ld  hl,$0705            ;located one row above bottom
-       ld  (_curRow),hl        ;go there
-       ld  hl,txt_1player      ;display "ONE PLAYER"
-       call _puts
-       ld  hl,$0706            ;below oneplayer text
-       ld  (_curRow),hl
-       ld  hl,txt_2players     ;display "TWO PLAYERS"
-       call _puts
+       ld  hl,$3a1e            ;below previous stuff
+       ld  (_penCol),hl
+       ld  hl,txt_email        ;hey, my e-mail address so SEND ME SOMETHING!!
+       call _vputs             ;VERY important, so display in small font ?:}
 
        call _getkey            ;wait for keypress
        call New_game           ;prepare level
 
        call _getkey            ;wait for keypress
        call New_game           ;prepare level
@@ -88,14 +95,19 @@ menutext:
 ;---------------------- game loop ---------------------------------------------
 ;------------------------------------------------------------------------------
 
 ;---------------------- game loop ---------------------------------------------
 ;------------------------------------------------------------------------------
 
-game_main_loop:
+game_main_loop:                        ;REPEATS FROM HERE EVERY FRAME
        ld  hl,timer            ;update time
        inc (hl)                ;increase by 1
        ld  hl,timer            ;update time
        inc (hl)                ;increase by 1
-       ld  b,(hl)              ;new time
+       ld  b,(hl)              ;new time, save for rand# upd. (no flag change)
+       jr  nz,updaterandom     ;continue when new time <> 0
+       ld  hl,1                ;once every 256 frames, increase score by 1
+       call scoreInc           ;do it
 
 
+updaterandom:
        ld  hl,RanPos           ;random counter
        ld  a,(hl)              ;random value
        add a,b                 ;even more random by adding timer
        ld  hl,RanPos           ;random counter
        ld  a,(hl)              ;random value
        add a,b                 ;even more random by adding timer
+.db    $80+7                   ;<add a,r>
        ld  (hl),a              ;save even more random value back
 
 Clear_screen:
        ld  (hl),a              ;save even more random value back
 
 Clear_screen:
@@ -105,33 +117,55 @@ Clear_screen:
        ld  bc,896              ;loop 896 times = (128/8) * (64-8 for scorebar)
        ldir                    ;clear!
 
        ld  bc,896              ;loop 896 times = (128/8) * (64-8 for scorebar)
        ldir                    ;clear!
 
+check_keys:
+       ld  a,%00111111         ;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!
+
 check_exitkey:
 check_exitkey:
-       call GET_KEY
-       cp  K_EXIT
-       jr  z,quit
-       cp  K_MORE
-       call z,Pause
-;      ld  a,%00111111         ;<exit> pressed?
-;      out (1),a
-;      nop \ nop
-;      in  a,(1)
-;      bit 6,a                 ;test bit 6 = <EXIT>
-;      jr  z,quit              ;yes: quit game
+       bit 6,a                 ;test bit 6 = exit-key = EXIT
+       jp  z,game_over_nopop   ;<exit> pressed, so be it
+check_morekey:
+       bit 7,a                 ;test bit 7 = more-key = PAUSE
+       call z,Pause            ;yes, go to pause
+
+check_firekey:
+       bit 5,a                 ;test bit 5 = 2nd-key = FIRE
+       ld  hl,game_stuff       ;where to continue after executing Fire_bullet
+       push hl                 ;push hl on stack (instead of call Fire_bullet)
+       jp  z,Fire_bullet       ;fire smtn (bulletstorplasersmultiples+stuff..)
+       pop hl                  ;no call to Fire_bullet made, so pop stack
+       ld  hl,just_fired       ;no:
+       ld  (hl),0              ;reset just_fired
 
 game_stuff:
        call Level_event        ;insert enemies
        call Handle_Ship        ;move you
        call Handle_enemies     ;move enemies
 
 
 game_stuff:
        call Level_event        ;insert enemies
        call Handle_Ship        ;move you
        call Handle_enemies     ;move enemies
 
-       call Fire_bullet        ;check for fire
+       ld  a,(your_occ)        ;are you 100% OK?
+       or  a                   ;a=0??
+       jr  nz,activesdone      ;then don't check for movements/fires/...
+
+       ld  a,%01011111         ;look at first column of keys (ALPHA to STO)
+       out (1),a               ;gimme gimme
+       nop \ nop               ;what's taking you so long
+       in  a,(1)               ;at last... our precious keyzzz...
+                               ;old: <bit 7,a \ call z,select> now see this:
+       rla                     ;test bit 7 so we know f ALPHA has been pressed
+       call nc,select          ;yeppy, select the currently selected upgrade
+       call Enemies_hit        ;check for collision with enemies
+
+activesdone:
        call Handle_bullets     ;move your bullets
        call Handle_torp        ;move your torpedo
        call Enemy_bullets      ;move enemy bullets
        call Handle_bullets     ;move your bullets
        call Handle_torp        ;move your torpedo
        call Enemy_bullets      ;move enemy bullets
-       call Enemies_hit        ;check for collision with enemies
 
        call Display_Screen     ;display all
 
        call Display_Screen     ;display all
-       halt \ halt             ;delay
-       jr   game_main_loop     ;loop
+       halt                    ;delay
+
+       jr   game_main_loop     ;LOOP
 
 ;--------------------------- pause --------------------------------------------
 
 
 ;--------------------------- pause --------------------------------------------
 
@@ -149,9 +183,11 @@ pause:
 ;--------------------------- exit ---------------------------------------------
 
 quit:
 ;--------------------------- exit ---------------------------------------------
 
 quit:
+       call _clrLCD            ;clears screen
+       call _homeup            ;set cursor to top-left
        ld  a,(CONTRAST)        ;load original contrast level
        out (2),a               ;and set it back
        ld  a,(CONTRAST)        ;load original contrast level
        out (2),a               ;and set it back
-       ld  (iy+13),6
+       ld  (iy+13),6           ;restore system-flags
        ret                     ;quit Nemesis :(
 
 ;--------------------------- display ------------------------------------------
        ret                     ;quit Nemesis :(
 
 ;--------------------------- display ------------------------------------------
@@ -168,8 +204,7 @@ displayloop:
 
        ld  hl,$396b            ;Display Score
        ld  (_penCol),hl        ;bottom right of screen
 
        ld  hl,$396b            ;Display Score
        ld  (_penCol),hl        ;bottom right of screen
-       ld  hl,(timer)
-       ld  h,0
+       ld  hl,(score)
 
 _D_HL_DECI:            ;------- display 5-digit value -------
        ld   de,savestr+4       ;savenr saves number string
 
 _D_HL_DECI:            ;------- display 5-digit value -------
        ld   de,savestr+4       ;savenr saves number string
@@ -185,7 +220,7 @@ ldhld:      call UNPACK_HL          ;one digit of hl
        ret
 
 savestr:
        ret
 
 savestr:
-       .db "SHIAR",0
+       .db "00000",0
 
 ;------------------------- handle ship ----------------------------------------
 
 
 ;------------------------- handle ship ----------------------------------------
 
@@ -208,6 +243,19 @@ ok:
        out (1),a
        ld  hl,y                ;instead of nop\nop do something usefull
        in  a,(1)
        out (1),a
        ld  hl,y                ;instead of nop\nop do something usefull
        in  a,(1)
+
+       ld  b,a                 ;push a (keys)
+       xor %11111111           ;inverted a = 0 if arrow-key has been pressed
+       ld  a,(your_multiples)
+       jr  z,no_adv            ;if so, leave the multiples where they are
+       or  %100                ;set move bit
+       jr  adv_ok
+no_adv:
+       and %11111011           ;reset move bit
+adv_ok:
+       ld  (your_multiples),a
+       ld  a,b                 ;pop a (keys)
+
        rra                     ;rotate right (put last bit in c)
        ld  b,a                 ;we need a
 
        rra                     ;rotate right (put last bit in c)
        ld  b,a                 ;we need a
 
@@ -269,16 +317,22 @@ handle_multiples:
        call putsprite          ;display your ship
 
        ld  a,(your_multiples)  ;do you have multiples
        call putsprite          ;display your ship
 
        ld  a,(your_multiples)  ;do you have multiples
-       or  a                   ;no?
+       ld  b,a                 ;save a for 2nd check
+       and %11                 ;no? (last two bits = nr of multiples)
        ret z                   ;then don't handle them either
 
        ret z                   ;then don't handle them either
 
+       ld  hl,y
+       ld  a,b                 ;restore a (your_multiples)
+       and %100                ;move the multiples???
+       jr  z,mult_adv          ;nope, just let them (saves (y) in y, (x) in x)
+
        ld  hl,your_locpos      ;location to save this position
        ld  a,(hl)              ;load a
        inc a                   ;a=a+1
        and %00001111           ;if a>15 then a=a-16
        ld  (hl),a              ;save new a
        add a,a                 ;a=a*2
        ld  hl,your_locpos      ;location to save this position
        ld  a,(hl)              ;load a
        inc a                   ;a=a+1
        and %00001111           ;if a>15 then a=a-16
        ld  (hl),a              ;save new a
        add a,a                 ;a=a*2
-       ld  c,a                 ;de=a
+       ld  c,a                 ;bc=2a
        ld  b,0
 
        ld  hl,your_prevpos     ;previous positions
        ld  b,0
 
        ld  hl,your_prevpos     ;previous positions
@@ -294,6 +348,8 @@ handle_multiples:
        ld  a,(x)               ;load new x-pos
        ld  (hl),a              ;save that too
 
        ld  a,(x)               ;load new x-pos
        ld  (hl),a              ;save that too
 
+mult_adv:
+ ld de,(mx)
        ld  ix,spr_multiple     ;sprite of the multiple
        jp  putsprite           ;display it + <ret>
 
        ld  ix,spr_multiple     ;sprite of the multiple
        jp  putsprite           ;display it + <ret>
 
@@ -333,23 +389,21 @@ no_armor:
        ld  (your_occ),a        ;set to explode
        ret
 
        ld  (your_occ),a        ;set to explode
        ret
 
-;------------------------- fire bullet ----------------------------------------
+;------------------------- place multiples ------------------------------------
 
 
-Fire_bullet:
-       ld  a,(your_occ)        ;are you 100% OK?
-       or  a                   ;a=0??
-       ret nz                  ;return if not normal stat
+Place_multiples
+       ld  (mx),de             ;set last multiple-position
+       ld  hl,your_prevpos     ;place all previous positions
+       ld  b,16                ;all 16 of them
+place_multiples:
+       ld  (hl),d              ;set prev-x to d
+       inc hl                  ;next
+       ld  (hl),e              ;set prev-y to e
+       inc hl                  ;next
+       djnz place_multiples    ;repeat
+       ret
 
 
-       ld  a,%00111111         ;function keys (F1-F5)
-       out (1),a               ;ask for them
-       nop \ nop               ;delay 8 clocks
-       in  a,(1)               ;get zem!
-       bit 4,a                 ;test bit 4 = F1-key
-       jr  z,fire              ;fire pressed?
-       ld  hl,just_fired
-       ld  (hl),0              ;no: reset just_fired
-       bit 3,a                 ;test bit 3 = F2-key
-       ret nz                  ;return if not
+;------------------------- select upgrade -------------------------------------
 
 select:
        ld  hl,your_pickup      ;select pickups
 
 select:
        ld  hl,your_pickup      ;select pickups
@@ -385,12 +439,17 @@ select5:
        ld  (hl),a              ;reset pickups
        inc a
        ld  (your_multiples),a
        ld  (hl),a              ;reset pickups
        inc a
        ld  (your_multiples),a
+       ld  de,(x)
+       call Place_multiples
        jp  disp_icons          ;display, return
 select6:
        ld  (hl),0              ;reset pickups
        jp  disp_icons          ;display/return
 
        jp  disp_icons          ;display, return
 select6:
        ld  (hl),0              ;reset pickups
        jp  disp_icons          ;display/return
 
-fire:  ld  hl,RanPos           ;random
+;------------------------- fire bullet ----------------------------------------
+
+Fire_bullet:
+       ld  hl,RanPos           ;random
        inc (hl)                ;update random counter
 
        ld  hl,just_fired
        inc (hl)                ;update random counter
 
        ld  hl,just_fired
@@ -407,8 +466,8 @@ fireOK:
        ld  hl,(x)              ;yes: first fire from ship position (x)
        ld  (firex),hl          ;set firepos
        ld  a,(your_multiples)  ;any multiples?
        ld  hl,(x)              ;yes: first fire from ship position (x)
        ld  (firex),hl          ;set firepos
        ld  a,(your_multiples)  ;any multiples?
-       dec a                   ;nope?
-       jr  nz,fireany          ;then just fire somethin'
+       and %11                 ;nope?
+       jr  z,fireany           ;then just fire somethin'
        call fireany            ;and blast
        ld  hl,(my)             ;then, fire from multiple position (mx)
        ld  a,(mx)              ;<ex h,l>
        call fireany            ;and blast
        ld  hl,(my)             ;then, fire from multiple position (mx)
        ld  a,(mx)              ;<ex h,l>
@@ -635,6 +694,9 @@ pickupdone:
        ld  (pickuptimer),a     ;save new enemiescounter value
        inc hl
        ld  (hl),$00            ;explosionFrame 0
        ld  (pickuptimer),a     ;save new enemiescounter value
        inc hl
        ld  (hl),$00            ;explosionFrame 0
+
+       ld  hl,1                ;increase score by one
+       call scoreInc
        jp  (ix)
 
 hpleft:
        jp  (ix)
 
 hpleft:
@@ -930,12 +992,17 @@ normal_enemy:                     ;occ "normal" 2 or "moving" 3
 
        dec hl                  ;@x
        ld  (hl),d              ;store new x
 
        dec hl                  ;@x
        ld  (hl),d              ;store new x
-
-check_enemyfire:
        ld  a,c                 ;a = enemy type
        or  a                   ;type 0? (pickup)
        ld  a,c                 ;a = enemy type
        or  a                   ;type 0? (pickup)
-       jr  z,firing_done       ;pickups don't fire
+       jr  nz,check_enemyfire  ;no, a normal enemy; let em fire
+       ld  a,(timer)           ;load time
+       and %1                  ;move left once every 2 turns
+       jr  z,firing_done       ;don't move now
+       inc d                   ;increase x-position (don't move this turn)
+       inc (hl)                ;and save it
+       jr  firing_done         ;continue
 
 
+check_enemyfire:
        ld  bc,add2enemy+1-2    ;offset of <xtra enemy info: fire>
        add hl,bc               ;go there (@hl)
        dec (hl)                ;decrease counter till next blast
        ld  bc,add2enemy+1-2    ;offset of <xtra enemy info: fire>
        add hl,bc               ;go there (@hl)
        dec (hl)                ;decrease counter till next blast
@@ -1016,10 +1083,6 @@ movedown:
 ;--------------------------- check collision ----------------------------------
 
 Enemies_hit:
 ;--------------------------- check collision ----------------------------------
 
 Enemies_hit:
-       ld  a,(your_occ)
-       or  a                   ;0 = you're normal
-       ret nz
-
        ld  de,(x)              ;e = X, d = Y
        ld  hl,enemies
        ld  b,nrenemies         ;check all 20 enemies
        ld  de,(x)              ;e = X, d = Y
        ld  hl,enemies
        ld  b,nrenemies         ;check all 20 enemies
@@ -1064,6 +1127,12 @@ collide_enemy:
 
 take_pickup:
        ld  a,(hl)              ;load enemy type
 
 take_pickup:
        ld  a,(hl)              ;load enemy type
+
+       push hl                 ;we need hl
+       ld   hl,2               ;increase score by 2
+       call scoreInc
+       pop  hl                 ;we're done
+
        or  a
        jr  nz,collide          ;enemy when <>0
 
        or  a
        jr  nz,collide          ;enemy when <>0
 
@@ -1101,13 +1170,23 @@ check_next:
        djnz check_collision
        ret
 
        djnz check_collision
        ret
 
+;--------------------------- update score -------------------------------------
+
+scoreInc:
+       push bc
+       ld  bc,(score)
+       add hl,bc
+       ld  (score),hl
+       pop bc
+       ret
+
 ;--------------------------- show icon ----------------------------------------
 
 disp_icons:
        ld  hl,VIDEO_MEM+(16*57);57 rows down = seven rows from bottom
        ld  b,16*7              ;draw 16x (screen width) 7x (height)
 ;--------------------------- show icon ----------------------------------------
 
 disp_icons:
        ld  hl,VIDEO_MEM+(16*57);57 rows down = seven rows from bottom
        ld  b,16*7              ;draw 16x (screen width) 7x (height)
+       xor a                   ;blank line mask
 cleanline:
 cleanline:
-       ld  a,%00000000         ;blank line mask
        ld  (hl),a              ;draw one piece of the divider-line
        inc hl                  ;move right (8 pixels = 1 byte)
        djnz cleanline          ;repeat (16bytes * 7rows * 8pixels)
        ld  (hl),a              ;draw one piece of the divider-line
        inc hl                  ;move right (8 pixels = 1 byte)
        djnz cleanline          ;repeat (16bytes * 7rows * 8pixels)
@@ -1118,7 +1197,7 @@ cleanline:
        call disp_lives
 
        ld  ix,spr_icon01       ;armorIcon
        call disp_lives
 
        ld  ix,spr_icon01       ;armorIcon
-       ld  de,$1a01            ;icon #1
+       ld  de,$1901            ;icon #1
        call putwidesprite      ;display icon
        call disp_armor         ;display value
 
        call putwidesprite      ;display icon
        call disp_armor         ;display value
 
@@ -1128,11 +1207,11 @@ cleanline:
        jr  z,no_torp
        ld  ix,spr_icon02       ;torpedoIcon
 no_torp:
        jr  z,no_torp
        ld  ix,spr_icon02       ;torpedoIcon
 no_torp:
-       ld  de,$2a01            ;icon #2
+       ld  de,$2901            ;icon #2
        call putwidesprite      ;display
 
        call putwidesprite      ;display
 
-       ld  ix,spr_icon00       ;
-       ld  de,$3a01            ;icon #3
+       ld  ix,spr_icon03       ;emptyIcon
+       ld  de,$3901            ;icon #3
        call putwidesprite
 
        ld  ix,spr_icon00       ;emptyIcon
        call putwidesprite
 
        ld  ix,spr_icon00       ;emptyIcon
@@ -1141,16 +1220,20 @@ no_torp:
        jr  z,no_laser
        ld  ix,spr_icon04       ;laserIcon
 no_laser:
        jr  z,no_laser
        ld  ix,spr_icon04       ;laserIcon
 no_laser:
-       ld  de,$4a01            ;icon #4
+       ld  de,$4901            ;icon #4
        call putwidesprite
 
        ld  ix,spr_icon00       ;emptyIcon
        ld  a,(your_multiples)
        call putwidesprite
 
        ld  ix,spr_icon00       ;emptyIcon
        ld  a,(your_multiples)
-       or  a
+       and %11
        jr  z,no_multiples
        ld  ix,spr_icon05
 no_multiples:
        jr  z,no_multiples
        ld  ix,spr_icon05
 no_multiples:
-       ld  de,$5a01            ;icon #5
+       ld  de,$5901            ;icon #5
+       call putwidesprite
+
+       ld  ix,spr_icon03
+       ld  de,$6901
        call putwidesprite
 
        ld  a,(your_pickup)     ;pickups taken
        call putwidesprite
 
        ld  a,(your_pickup)     ;pickups taken
@@ -1159,8 +1242,8 @@ no_multiples:
        add a,a                 ;picks*4
        add a,a                 ;picks*8
        add a,a                 ;picks*$10
        add a,a                 ;picks*4
        add a,a                 ;picks*8
        add a,a                 ;picks*$10
-       add a,$0a               ;add 0ah
-       ld  d,a                 ;y-pos = picks * $10 + $0a (1a,2a,3a,4a,5a)
+       add a,$09               ;add 0ah
+       ld  d,a                 ;y-pos = picks * $10 + $0a (19,29,39,49,59)
        ld  e,$01               ;x-pos = bottom (1a01,2a01,3a01,4a01,5a01)
 
        ld  ix,spr_icon
        ld  e,$01               ;x-pos = bottom (1a01,2a01,3a01,4a01,5a01)
 
        ld  ix,spr_icon
@@ -1168,7 +1251,7 @@ no_multiples:
        ret
 
 disp_armor:
        ret
 
 disp_armor:
-       ld  hl,$3926            ;Display Armor left
+       ld  hl,$3925            ;Display Armor left
        ld  (_penCol),hl        ;place @ armorIcon
        ld  a,(your_armor)      ;load armor left
        add a,'0'               ;make digit
        ld  (_penCol),hl        ;place @ armorIcon
        ld  a,(your_armor)      ;load armor left
        add a,'0'               ;make digit
@@ -1192,25 +1275,80 @@ disp_lives:
        ret
 
 ;--------------------------- game over / new game / death ---------------------
        ret
 
 ;--------------------------- game over / new game / death ---------------------
+own_name:
+       .db $12,7,"nemesis"
+
+save_hi:
+       ld   hl,own_name        ; Find own variable
+       xor  a
+       call _ABS_MOV10TOOP1
+       call _FINDSYM
+       ret  c                  ; If not found, give up
+
+        ld  a,b                        ; Save the stored section
+        ld  h,d
+        ld  l,e
+        ld  b,0
+        ld  de,4+stored_data_start-_asm_exec_ram
+        add hl,de
+        adc a,b
+        call _SET_ABS_DEST_ADDR
+        ld   a,0
+        ld   hl,stored_data_start
+        call _SET_ABS_SRC_ADDR
+        ld   hl,stored_data_end-stored_data_start
+        call _SET_MM_NUM_BYTES
+        call _mm_ldir
+
+       ret
 
 game_over:
 
 game_over:
+       pop hl                  ;=ret (game_over was called from a procedure)
+game_over_nopop:
        call _clrLCD            ;clear screen
        ld  hl,$0603
        ld  (_curRow),hl        ;center
        ld  hl,txt_gameover
        call _puts              ;display "GAME OVER"
 
        call _clrLCD            ;clear screen
        ld  hl,$0603
        ld  (_curRow),hl        ;center
        ld  hl,txt_gameover
        call _puts              ;display "GAME OVER"
 
+       xor  a                  ;clear a (AHL will be displayed)
+       ld   hl,$1006           ;bottom-1 right
+       ld   (_curRow),hl       ;set
+       ld   hl,(score)         ;your score
+       call _dispahl           ;display it (a=0)
+       ld  hl,$314b            ;bottom-1 right before score ^^
+       ld  (_penCol),hl        ;set
+       ld  hl,txt_score        ;"Score"
+       call _vputs             ;display (small)
+
+       ld   hl,$1007           ;bottom right
+       ld   (_curRow),hl       ;set
+       ld   hl,(hiscore)       ;hi-score
+       call _dispahl           ;display
+       ld  hl,$3946            ;bottom right before hiscore ^^
+       ld  (_penCol),hl        ;set
+       ld  hl,txt_hiscore      ;"Hiscore"
+       call _vputs             ;display (small)
+
+       ld  de,(score)
+       ld  hl,(hiscore)
+       call CP_HL_DE
+       jr  nc,no_hiscore
+       ld  (hiscore),de
+
+no_hiscore:
+       call save_hi
+
        ld  b,$20
 wait2: halt \ halt
        djnz wait2              ;delay
        call _getkey            ;wait for keypress
        ld  b,$20
 wait2: halt \ halt
        djnz wait2              ;delay
        call _getkey            ;wait for keypress
-
-       pop hl                  ;=ret (game_over was called from a procedure)
-       ret                     ;quit to TI-OS or shell
+       jp  quit                ;restore some things and return to TI-OS/shell
 
 New_game:
        xor a                   ;score 0
        ld  (score),a           ;reset score
 
 New_game:
        xor a                   ;score 0
        ld  (score),a           ;reset score
+       ld  (score+1),a         ;reset score
        inc a                   ;level #1
        ld  (level),a           ;reset level nr
        ld  hl,level01          ;set level pointer to level#1
        inc a                   ;level #1
        ld  (level),a           ;reset level nr
        ld  hl,level01          ;set level pointer to level#1
@@ -1237,13 +1375,22 @@ You_die:
 
 Next_level:
        ld  hl,level            ;level number
 
 Next_level:
        ld  hl,level            ;level number
-       inc (hl)                ;increase it
+       ld  a,(hl)
+       inc a
+       ld  (hl),a
+
        ld  hl,(levelp)         ;level pointer
        inc hl
        inc hl
        inc hl                  ;update to point to next level
        ld  (levelp),hl         ;save
 
        ld  hl,(levelp)         ;level pointer
        inc hl
        inc hl
        inc hl                  ;update to point to next level
        ld  (levelp),hl         ;save
 
+       ld  h,0                 ;increase score....
+       ld  l,a                 ;by level number
+       ld  bc,20
+       add hl,bc               ;plus 20
+       call scoreInc           ;update score
+
 nonext_level:
        ld  a,80
        ld  (nextevent),a       ;time to first enemy appearance
 nonext_level:
        ld  a,80
        ld  (nextevent),a       ;time to first enemy appearance
@@ -1270,18 +1417,13 @@ nonext_level:
        ld  (hl),24             ;...=24=middle
 
        ld  a,(torp_occ)
        ld  (hl),24             ;...=24=middle
 
        ld  a,(torp_occ)
-       and %00000001           ;remove torpedoes
-       ld  (torp_occ),a
+       or  a                   ;no torpedoes?
+       jr  z,torpsclear        ;then just continue (=0)
+       ld  a,1                 ;if so, set to "ready to fire" (=1)
+torpsclear:
 
 
-       xor a                   ;reset previous positions
-       ld  hl,your_prevpos     ;place all previous positions
-       ld  b,16                ;all 16 of them
-place_multiples:
-       ld  (hl),a              ;set prev-x to 0
-       inc hl                  ;next
-       ld  (hl),24             ;set prev-y to 24
-       inc hl                  ;next
-       djnz place_multiples    ;repeat
+       ld  de,$0018            ;x=0, y=24 (like you..)
+       call Place_multiples    ;place all multiple-positions at (0,24)
 
        ld  hl,ybullets         ;clear your/enemy bullets
        ld  (hl),a              ;clear first byte
 
        ld  hl,ybullets         ;clear your/enemy bullets
        ld  (hl),a              ;clear first byte
@@ -1352,8 +1494,8 @@ wait:     halt \ halt
 
        ld  hl,VIDEO_MEM+(16*56);56 rows down = eight rows from bottom
        ld  b,16                ;draw 16x (screen width)
 
        ld  hl,VIDEO_MEM+(16*56);56 rows down = eight rows from bottom
        ld  b,16                ;draw 16x (screen width)
-drawline:
        ld  a,%11111111         ;horizontal line mask
        ld  a,%11111111         ;horizontal line mask
+drawline:
        ld  (hl),a              ;draw one piece of the divider-line
        inc hl                  ;move right (8 pixels = 1 byte)
        djnz drawline           ;repeat (16bytes * 8pixels =128= screen width)
        ld  (hl),a              ;draw one piece of the divider-line
        inc hl                  ;move right (8 pixels = 1 byte)
        djnz drawline           ;repeat (16bytes * 8pixels =128= screen width)
@@ -1642,7 +1784,7 @@ spr_explosion:
 ;--------------------------------------- bar -----------------------------------
 
 spr_icon:
 ;--------------------------------------- bar -----------------------------------
 
 spr_icon:
-       .db 16,7        ;unused   .......:.......:
+       .db 16,7        ;selected .......:.......:
        .db %11111111,%11111111 ; ████████████████
        .db %11000000,%00000001 ; ██             █
        .db %11000000,%00000001 ; ██             █
        .db %11111111,%11111111 ; ████████████████
        .db %11000000,%00000001 ; ██             █
        .db %11000000,%00000001 ; ██             █
@@ -1678,14 +1820,14 @@ spr_icon02:
        .db %10011000,%11110101 ; █  ██   ████ █ █
        .db %11100110,%00110010 ; ███  ██   ██  █
 spr_icon03:
        .db %10011000,%11110101 ; █  ██   ████ █ █
        .db %11100110,%00110010 ; ███  ██   ██  █
 spr_icon03:
-       .db 16,7        ;         .......:.......:
-       .db %10000000,%01010100 ; █
-       .db %10011110,%00101010 ; █
-       .db %10111000,%00010101 ; █
-       .db %10111111,%10101010 ; █
-       .db %10111111,%00010101 ; █
-       .db %10111000,%00101010 ; █
-       .db %10011110,%01010100 ; █
+       .db 16,7        ;empty    .......:.......:
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
+       .db %10000000,%00000000 ; █
 spr_icon04:
        .db 16,7        ;laser    .......:.......:
        .db %10000000,%00000000 ; █
 spr_icon04:
        .db 16,7        ;laser    .......:.......:
        .db %10000000,%00000000 ; █
@@ -1697,29 +1839,27 @@ spr_icon04:
        .db %10000000,%00000000 ; █
 spr_icon05:
        .db 16,7        ;multiple .......:.......:
        .db %10000000,%00000000 ; █
 spr_icon05:
        .db 16,7        ;multiple .......:.......:
-       .db %10000011,%10000000 ; █     ███
-       .db %10000001,%11100111 ; █      ████  ███
-       .db %10000001,%11100000 ; █      ████
-       .db %10000011,%10000000 ; █     ███
-       .db %10011000,%00000000 ; █  ██
-       .db %10111100,%01110000 ; █ ████   ███
-       .db %10011000,%00000000 ; █  ██
+       .db %10000011,%10000000 ; █     ███      
+       .db %10000001,%11100110 ; █      ████  ██ 
+       .db %10000001,%11100000 ; █      ████    
+       .db %10000011,%10000000 ; █     ███      
+       .db %10011000,%00000000 ; █  ██          
+       .db %10111100,%11000011 ; █ ████  ██    ██
+       .db %10011000,%00000000 ; █  ██          
 
 ;---------------------------- texts -------------------------------------------
 
 
 ;---------------------------- texts -------------------------------------------
 
-txt_about:     .db "v0.92.98 ","by Shiar  "
-               .db "(ICQ#43840958)",0
-txt_1player:   .db "1 PLAYER",0
-txt_2players:  .db "2 PLAYERS",0
+txt_about:     .db " v0.93.911",127,"by Shiar",0
+txt_email:     .db "shiar0@hotmail.com",0
 txt_level:     .db "LEVEL ",0
 txt_gameover:  .db "GAME OVER!",0
 txt_level:     .db "LEVEL ",0
 txt_gameover:  .db "GAME OVER!",0
+txt_score:     .db "Score",0
+txt_hiscore:   .db "Hiscore",0
 txt_lives:     .db "Lx0?",0
 txt_pressenter:        .db "Enter to continue",0
 
 ;---------------------------- save data ---------------------------------------
 
 txt_lives:     .db "Lx0?",0
 txt_pressenter:        .db "Enter to continue",0
 
 ;---------------------------- save data ---------------------------------------
 
-stored_data_start:
-
 PutWhere       .dw GRAPH_MEM           ;where to put the wide sprites
 
 timer          .db $00                 ;frame counter
 PutWhere       .dw GRAPH_MEM           ;where to put the wide sprites
 
 timer          .db $00                 ;frame counter
@@ -1730,9 +1870,12 @@ eventenemy       .db $02                 ;enemy type
 eventtime      .db $15                 ;enemy frequency
 eventleft      .db $00                 ;nr. of enemies still to come
 nextevent      .db $50                 ;time to next event
 eventtime      .db $15                 ;enemy frequency
 eventleft      .db $00                 ;nr. of enemies still to come
 nextevent      .db $50                 ;time to next event
-pickuptimer    .db $4
+pickuptimer    .db $04
 
 score          .dw $0000
 
 score          .dw $0000
+stored_data_start:
+hiscore                .dw $0000
+stored_data_end:
 
 your_pickup    .db $00
 your_occ       .db $00                 ;0=normal 1..16=exploding
 
 your_pickup    .db $00
 your_occ       .db $00                 ;0=normal 1..16=exploding
@@ -1763,9 +1906,9 @@ sprites:
 spr_enemy00:
        .db 7,5         ;pickup
        .db %11111110   ; ███████
 spr_enemy00:
        .db 7,5         ;pickup
        .db %11111110   ; ███████
-       .db %10011010   ; █  ██ █
        .db %11111110   ; ███████
        .db %11111110   ; ███████
-       .db %10011010   ; █  ██ █
+       .db %11000110   ; ██   ██
+       .db %11111110   ; ███████
        .db %11111110   ; ███████
 spr_enemy01:
        .db 6,6         ;enemy type one
        .db %11111110   ; ███████
 spr_enemy01:
        .db 6,6         ;enemy type one
@@ -1835,10 +1978,10 @@ enemy04:                        ;#4     HP:2    app:lure
        .db %00000110,4,2,0
 enemy05:                       ;#5     HP:2    app:random      moving
        .db %00000111,5,1,0
        .db %00000110,4,2,0
 enemy05:                       ;#5     HP:2    app:random      moving
        .db %00000111,5,1,0
-enemy06:                       ;#6     HP:2    app:lure        moving
-       .db %00000111,6,2,0
-enemy07:                       ;#7     HP:4    app:halflure    moving
-       .db %00001111,7,3,0
+enemy06:                       ;#6     HP:3    app:lure        moving
+       .db %00001011,6,2,0
+enemy07:                       ;#7     HP:6    app:halflure    moving
+       .db %00010111,7,3,0
 
 ;----------------------------- level info -------------------------------------
 
 
 ;----------------------------- level info -------------------------------------
 
@@ -1847,15 +1990,15 @@ level01:
 level02:                               ;frequency must be odd if halfluring!
        .db $02,$11,$4b
 level03:
 level02:                               ;frequency must be odd if halfluring!
        .db $02,$11,$4b
 level03:
-       .db $03,$1d,$3f
+       .db $03,$1f,$3f
 level04:
        .db $04,$0d,$4f
 level05:
 level04:
        .db $04,$0d,$4f
 level05:
-       .db $05,$25,$3d
+       .db $05,$23,$3d
 level06:
 level06:
-       .db $06,$23,$39
+       .db $06,$1f,$39
 level07:
 level07:
-       .db $07,$1f,$f9
+       .db $07,$1d,$f9
 
 ;----------------------------- logo -------------------------------------------
 
 
 ;----------------------------- logo -------------------------------------------
 
@@ -1888,19 +2031,19 @@ logo_nemesis:
 ;----------------------------- NEMESIS'86 by Shiar ----------------------------
 
 ;Game · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · NEMESIS
 ;----------------------------- NEMESIS'86 by Shiar ----------------------------
 
 ;Game · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · NEMESIS
-;Version  · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 0.92.98
-;Latest modification  · · · · · · · · · · · · · · · · · · · · · · · · · 7.IX.99
+;Version  · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·  0.93.911
+;Latest modification  · · · · · · · · · · · · · · · · · · · · · · · ·  11.IX.99
 ;Calc · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·  TI-86 only
 ;Calc · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·  TI-86 only
-;Size · · · · · · · · · · · · · · · · · · · · · · · · · · ·  2935 bytes on calc
+;Size · · · · · · · · · · · · · · · · · · · · · · · · · · ·  3098 bytes on calc
 
 ;Author · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · SHIAR
 
 ;Author · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · SHIAR
-;ICQ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · ·  #43840958
+;ICQ  · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · #43840958
 ;E-mail · · · · · · · · · · · · · · · · · · · · · · · · · ·  shiar0@hotmail.com
 ;E-mail · · · · · · · · · · · · · · · · · · · · · · · · · ·  shiar0@hotmail.com
-;Homepage · · · · · · · · · · · · · · · · · · coming soon (www.wish.net/~shiar)
+;Homepage · · · · · · · · · · · · · · · · · · · · · · · · · · · · come.to/shiar
 
 ;Notes:
 ;  <*> This game is not yet finished (BETA) and there may still be some bugs.
 
 ;Notes:
 ;  <*> This game is not yet finished (BETA) and there may still be some bugs.
-;  <*> Source will be released when the game has been finished.
+;  <*> I'll probably release the source when the game has been finished.
 ;  <*> Have fun, and have even more fun with the completed version of NEMESIS!
 
 ;----------------------------- version history --------------------------------
 ;  <*> Have fun, and have even more fun with the completed version of NEMESIS!
 
 ;----------------------------- version history --------------------------------
@@ -1951,7 +2094,7 @@ logo_nemesis:
 ;      * game over screen will be displayed just *after* your ship's gone
 ;      + frame counter onscreen
 ;
 ;      * game over screen will be displayed just *after* your ship's gone
 ;      + frame counter onscreen
 ;
-; 0.6.820 -- 20.IIX.99 -- size 2077
+; 0.6.820 -- 20.IIX.99 -- size 2077 -- MAJOR UPGRADE first release (not on web)
 ;
 ;      * play field increased to full screen instead of 3/4
 ;      + bottom eight lines used for score (etc) display
 ;
 ;      * play field increased to full screen instead of 3/4
 ;      + bottom eight lines used for score (etc) display
@@ -1968,14 +2111,14 @@ logo_nemesis:
 ;      + NEMESIS LOGO displayed at startup!! (also, program grew 350bytes ):
 ;      + version/credits string displayed below logo: v0.6.820 by shiar (ICQ#)
 ;
 ;      + NEMESIS LOGO displayed at startup!! (also, program grew 350bytes ):
 ;      + version/credits string displayed below logo: v0.6.820 by shiar (ICQ#)
 ;
-; 0.6.825 -- 25.IIX.99 -- size 2085
+;0.61.825 -- 25.IIX.99 -- size 2085 -- small changes to v0.6
 ;
 ;      # pointer to fifth ship corrected (ships in level 5 weren't displayed)
 ;      # calc doesn't crash anymore when game is continued after game over!!
 ;      + lives are decreased when ship is destroyed
 ;      # last eight pixels of divider line are shown correctly now
 ;
 ;
 ;      # pointer to fifth ship corrected (ships in level 5 weren't displayed)
 ;      # calc doesn't crash anymore when game is continued after game over!!
 ;      + lives are decreased when ship is destroyed
 ;      # last eight pixels of divider line are shown correctly now
 ;
-;  0.7.92 -- 02.IX .99 -- size 2303
+;  0.7.92 -- 02.IX .99 -- size 2303 -- optimizations and pickups
 ;
 ;      + contrast is increased one level at startup (and restored on exit)
 ;      + invulnerable for a sec when you enter the game (inv-pickup later)
 ;
 ;      + contrast is increased one level at startup (and restored on exit)
 ;      + invulnerable for a sec when you enter the game (inv-pickup later)
@@ -1990,7 +2133,7 @@ logo_nemesis:
 ;      # code optimization caused some bullets to reappear as "fake" bullets
 ;      * pickups can't be destroyed by bullets (they pass right through it)
 ;
 ;      # code optimization caused some bullets to reappear as "fake" bullets
 ;      * pickups can't be destroyed by bullets (they pass right through it)
 ;
-;  0.8.93 -- 03.IX .99 -- size 2433
+;  0.8.93 -- 03.IX .99 -- size 2433 -- small improvements and bugfixes
 ;
 ;      + enemies move individually, not all at the same time!! Looks very nice
 ;      # titlescreen background is cleared (looked weird in Rascall and TI-OS)
 ;
 ;      + enemies move individually, not all at the same time!! Looks very nice
 ;      # titlescreen background is cleared (looked weird in Rascall and TI-OS)
@@ -2000,7 +2143,7 @@ logo_nemesis:
 ;      # xtraInfo data wasn't reset when a moving enemy entered the game
 ;      * longer delay when level is completed (NextLevel screen came too soon)
 ;
 ;      # xtraInfo data wasn't reset when a moving enemy entered the game
 ;      * longer delay when level is completed (NextLevel screen came too soon)
 ;
-;  0.9.94 -- 04.IX .99 -- size 2693
+;  0.9.94 -- 04.IX .99 -- size 2693 -- FIRST MAJOR (BETA) RELEASE; on websites
 ;
 ;      # pickups no longer fire bullets like normal enemies
 ;      + <halt>s added so the game runs slower and looks better
 ;
 ;      # pickups no longer fire bullets like normal enemies
 ;      + <halt>s added so the game runs slower and looks better
@@ -2017,7 +2160,7 @@ logo_nemesis:
 ;      * of course optimizations and a few tiny bug fixes (not important)
 ;      * increased the size of the enemy bullets so they're better to see
 ;
 ;      * of course optimizations and a few tiny bug fixes (not important)
 ;      * increased the size of the enemy bullets so they're better to see
 ;
-; 0.91.95 -- 05.IX .99 -- size 2797
+; 0.91.95 -- 05.IX .99 -- size 2797 -- good improvements (upgrades); beta rel.
 ;
 ;      + LASERS!!!!! four pickups and you fire laserbeams instead of bullets
 ;      * multiple enemies can be hit at once, very usefull when firing lasers
 ;
 ;      + LASERS!!!!! four pickups and you fire laserbeams instead of bullets
 ;      * multiple enemies can be hit at once, very usefull when firing lasers
@@ -2027,16 +2170,33 @@ logo_nemesis:
 ;        instead of in program, saving A LOT of bytes in program-size
 ;      - at release of 0.91 bullets didn't work, laser is used instead
 ;
 ;        instead of in program, saving A LOT of bytes in program-size
 ;      - at release of 0.91 bullets didn't work, laser is used instead
 ;
-; 0.92.98 -- 08.IX .99 -- size 2831
+; 0.92.98 -- 08.IX .99 -- size 2831 -- beta released to testers
 ;
 ;      + all bullets and enemies are removed at the start of a level
 ;      # you can fire bullets again (no more laser at startup)
 ;
 ;      + all bullets and enemies are removed at the start of a level
 ;      # you can fire bullets again (no more laser at startup)
-;      * game delay is increased (one halt more) so it runs slower
 ;      * pickups aren't given at random, but appear every x enemies destroyed
 ;      # solved a minor bug in invulnerability flashing display
 ;      * clearScreen procedure improved (faster and smaller)
 ;      # fifth icon couldn't be selected (so no multiples selectable). fixed
 ;      * laserbeam lasts 5 turns (laser wasnt good enough compared to bullets)
 ;      * pickups aren't given at random, but appear every x enemies destroyed
 ;      # solved a minor bug in invulnerability flashing display
 ;      * clearScreen procedure improved (faster and smaller)
 ;      # fifth icon couldn't be selected (so no multiples selectable). fixed
 ;      * laserbeam lasts 5 turns (laser wasnt good enough compared to bullets)
+;
+;0.93.911 -- 11.IX .99 -- size 3098
+;
+;      # torpedo-upgrade was cleared when firing torpedo at the end of a level
+;      * pickups move away half the speed of enemies (one pixel every 2 turns)
+;      # fixed a bug causing some calcs to crash on quit
+;      # contrast was not restored after game over (remained one step darker)
+;      * fire key changed from F1 to 2ND, select key changed from F2 to ALPHA
+;      * improved key-checking procedureS (much faster, smaller, better, yea)
+;      * changed title screen, displays version white on black and my e-mail
+;      + score count!! simple system: one point for an enemy destroyed, two
+;        for collision, and one point every 256 frames. plus level clear bonus
+;      + saves HISCORE!!! At game-over screen your- and hi-score are displayed
+;      * Game over screen will be displayed before quit after pressing <exit>
+;      + screen is cleared and cursor moved to top-left on quit
+;      * multiples move only when YOU move, just like the original MSX-Nemesis
+;      * multiple is placed at your position when selected/at start of level
+;      * minor changes in iconbar (3rd icon is empty, line between 5th/score)
 
 
 ;       + added        - removed       * changed       # bug fixed
 
 
 ;       + added        - removed       * changed       # bug fixed