From: Mischa Poslawsky Date: Sat, 11 Sep 1999 10:07:40 +0000 (+0200) Subject: version 0.93 (public): (hi)score, better pickup/multiple movement X-Git-Url: http://git.shiar.net/nemesis.git/commitdiff_plain/81075f4e1dc18d93001983505a783dcac93db629 version 0.93 (public): (hi)score, better pickup/multiple movement # 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 + 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) --- diff --git a/nemesis.txt b/nemesis.txt index 1dfba3c..d7b2e48 100644 --- a/nemesis.txt +++ b/nemesis.txt @@ -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 - ║ 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.. + 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, -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 -------------------------------------------------------------- @@ -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: -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 - 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 ------------------------------------------------------------ - 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: -* more levels more enemies more pickups +* more LEVELS!! more enemies more pickups * 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 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! + ----------------------------------------------------------------------- <<<<<<< \ No newline at end of file diff --git a/nemesis.z80 b/nemesis.z80 index 6fd51d9..1400114 100644 --- a/nemesis.z80 +++ b/nemesis.z80 @@ -1,11 +1,13 @@ .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 @@ -13,7 +15,7 @@ DELC_LEN = _undelBufLen ;$64 bytes long .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 @@ -66,20 +68,25 @@ LogoLoop: 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 @@ -88,14 +95,19 @@ menutext: ;---------------------- 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 ; 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! +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 ; pressed? -; out (1),a -; nop \ nop -; in a,(1) -; bit 6,a ;test bit 6 = -; jr z,quit ;yes: quit game + bit 6,a ;test bit 6 = exit-key = EXIT + jp z,game_over_nopop ; 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: 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 -------------------------------------------- @@ -149,9 +183,11 @@ 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 ------------------------------------------ @@ -168,8 +204,7 @@ displayloop: 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 @@ -185,7 +220,7 @@ ldhld: call UNPACK_HL ;one digit of hl ret savestr: - .db "SHIAR",0 + .db "00000",0 ;------------------------- handle ship ---------------------------------------- @@ -208,6 +243,19 @@ ok: 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 @@ -269,16 +317,22 @@ handle_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 + 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 @@ -294,6 +348,8 @@ handle_multiples: 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 + @@ -333,23 +389,21 @@ no_armor: 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 @@ -385,12 +439,17 @@ select5: 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 @@ -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? - 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) ; @@ -635,6 +694,9 @@ pickupdone: 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: @@ -930,12 +992,17 @@ normal_enemy: ;occ "normal" 2 or "moving" 3 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 add hl,bc ;go there (@hl) dec (hl) ;decrease counter till next blast @@ -1016,10 +1083,6 @@ movedown: ;--------------------------- 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 @@ -1064,6 +1127,12 @@ collide_enemy: 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 @@ -1101,13 +1170,23 @@ check_next: 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) @@ -1118,7 +1197,7 @@ cleanline: 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 @@ -1128,11 +1207,11 @@ cleanline: 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 @@ -1141,16 +1220,20 @@ no_torp: 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 @@ -1159,8 +1242,8 @@ no_multiples: 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 @@ -1168,7 +1251,7 @@ no_multiples: 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 @@ -1192,25 +1275,80 @@ disp_lives: 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 @@ -1237,13 +1375,22 @@ You_die: 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 @@ -1270,18 +1417,13 @@ nonext_level: 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 @@ -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) -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) @@ -1642,7 +1784,7 @@ spr_explosion: ;--------------------------------------- bar ----------------------------------- spr_icon: - .db 16,7 ;unused .......:.......: + .db 16,7 ;selected .......:.......: .db %11111111,%11111111 ; ████████████████ .db %11000000,%00000001 ; ██ █ .db %11000000,%00000001 ; ██ █ @@ -1678,14 +1820,14 @@ spr_icon02: .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 ; █ @@ -1697,29 +1839,27 @@ spr_icon04: .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 @@ -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 -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 @@ -1763,9 +1906,9 @@ sprites: 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 @@ -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 -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 ------------------------------------- @@ -1847,15 +1990,15 @@ level01: 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 ------------------------------------------- @@ -1888,19 +2031,19 @@ logo_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 -;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 -------------------------------- @@ -1951,7 +2094,7 @@ logo_nemesis: ; * 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 @@ -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#) ; -; 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) @@ -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) ; -; 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) @@ -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) ; -; 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 ; + 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 ; -; 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 @@ -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 ; -; 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 +; + 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