.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
+_dispahl = $4a33
nop
jp init
.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
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 hl,txt_about ;display "by Shiar (ICQ#43840958)"
+ ld hl,txt_about ;display version and author (yes, that's me!)
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
;---------------------- game loop ---------------------------------------------
;------------------------------------------------------------------------------
-game_main_loop:
+game_main_loop: ;REPEATS FROM HERE EVERY FRAME
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
+.db $80+7 ;<add a,r>
ld (hl),a ;save even more random value back
Clear_screen:
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:
- 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
- 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 Enemies_hit ;check for collision with enemies
call Display_Screen ;display all
- halt \ halt ;delay
- jr game_main_loop ;loop
+ halt ;delay
+
+ jr game_main_loop ;LOOP
;--------------------------- pause --------------------------------------------
;--------------------------- 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 (iy+13),6
+ ld (iy+13),6 ;restore system-flags
ret ;quit Nemesis :(
;--------------------------- display ------------------------------------------
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
ret
savestr:
- .db "SHIAR",0
+ .db "00000",0
;------------------------- handle ship ----------------------------------------
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
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
+ 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 c,a ;de=a
+ ld c,a ;bc=2a
ld b,0
ld hl,your_prevpos ;previous positions
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 (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
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
-fire: ld hl,RanPos ;random
+;------------------------- fire bullet ----------------------------------------
+
+Fire_bullet:
+ ld hl,RanPos ;random
inc (hl) ;update random counter
ld hl,just_fired
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>
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:
dec hl ;@x
ld (hl),d ;store new x
-
-check_enemyfire:
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
;--------------------------- 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
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
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)
+ xor a ;blank line mask
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)
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
jr z,no_torp
ld ix,spr_icon02 ;torpedoIcon
no_torp:
- ld de,$2a01 ;icon #2
+ ld de,$2901 ;icon #2
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
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)
- or a
+ and %11
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
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
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
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:
+ 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"
+ 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
-
- 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
+ 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
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 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
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,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
+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)
;--------------------------------------- bar -----------------------------------
spr_icon:
- .db 16,7 ;unused .......:.......:
+ .db 16,7 ;selected .......:.......:
.db %11111111,%11111111 ; ████████████████
.db %11000000,%00000001 ; ██ █
.db %11000000,%00000001 ; ██ █
.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 ; █
.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 -------------------------------------------
-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_score: .db "Score",0
+txt_hiscore: .db "Hiscore",0
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
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
+stored_data_start:
+hiscore .dw $0000
+stored_data_end:
your_pickup .db $00
your_occ .db $00 ;0=normal 1..16=exploding
spr_enemy00:
.db 7,5 ;pickup
.db %11111110 ; ███████
- .db %10011010 ; █ ██ █
.db %11111110 ; ███████
- .db %10011010 ; █ ██ █
+ .db %11000110 ; ██ ██
+ .db %11111110 ; ███████
.db %11111110 ; ███████
spr_enemy01:
.db 6,6 ;enemy type one
.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 -------------------------------------
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:
- .db $05,$25,$3d
+ .db $05,$23,$3d
level06:
- .db $06,$23,$39
+ .db $06,$1f,$39
level07:
- .db $07,$1f,$f9
+ .db $07,$1d,$f9
;----------------------------- logo -------------------------------------------
;----------------------------- 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
-;Size · · · · · · · · · · · · · · · · · · · · · · · · · · · 2935 bytes on calc
+;Size · · · · · · · · · · · · · · · · · · · · · · · · · · · 3098 bytes on calc
;Author · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · SHIAR
-;ICQ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · #43840958
+;ICQ · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · #43840958
;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.
-; <*> 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 --------------------------------
; * 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
; + 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
;
-; 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)
; # 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)
; # 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
; * 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
; 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)
-; * 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)
+;
+;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