From: Mischa Poslawsky Date: Mon, 23 Oct 2000 11:19:02 +0000 (+0200) Subject: version 1.0 rc1: minor improvements, laser hit X-Git-Url: http://git.shiar.net/nemesis.git/commitdiff_plain/6b817abf2a6df0db014b17594aff7a1ae114305d version 1.0 rc1: minor improvements, laser hit * armor-bar background, empty upgrades sprites changed + shows sprite when laser hits an enemy (his "shield"?) + exit-key also quits out of ship selection screen # fixed direct-quit on death bug (bug since recent optimization) * armor-bar background changed (more elegant and smaller code) # "flash" when end-boss spawns mine fixed + enemy's y start position can be specified per enemy * first icon is now laser, second one's bullets (later undone again) # when bullets selected, upgrade icons won't appear half the time # remainder pixels in armor bar (appeared after heavy damage) removed + your ship's explosion is now also 8 frames (half enemy expl. speed) --- diff --git a/nemesis.txt b/nemesis.txt index fae3488..e7ff9a0 100644 --- a/nemesis.txt +++ b/nemesis.txt @@ -1,9 +1,23 @@ ------------------------------------------------------------------------------ + +█████████████████ ████████ ███████████ ████████ ████████ █ █████████████████ + ████████████████ ████████ ███████████ ████████ ████████ ███ ████████████████ + █ ███ █ █ █ ███ █ █ █ █ + ██ ███ ██ ██ ██ ███ ██ ██ ██ ██ + ███ ███ ██████ ███ ███ ███ ██████ ████████ ███ ████████ + ███ ███ ██████ ███ ███ ███ ██████ ████████ ███ ████████ + ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ + ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ + ███ ███ ████████ ███ ███ ███ ████████ ████████ ███ ████████ v1.0 + ███ ███ ████████ ███ ███ ███ ████████ ████████ ███ ████████ by SHIAR + +------------------------------------------------------------------------------ + Title : Nemesis - Version : 0.99.99 Beta - Release Date : 9.IX.00 - Filename : nemesis.86p (size 6939) - Author(s) : Shiar + Version : 1.0.A23 Beta + Release Date : 23.X.00 + Filename : nemesis.86p (size 7212) + Author : Shiar Email Address : shiar0@hotmail.com Web Page : http://www.shiar.org Description : cool arcade-shoot-em-up-game @@ -17,6 +31,8 @@ ten levels, and should never crash your calc. Report any bugs or imperfections to me. Thanks, and have fun! + (No comments on levels, storyline and difficulty plz, working on that) + >>>>>>> INTRO TO NEMESIS ----------------------------------------------------- @@ -75,14 +91,14 @@ You can have four of them. 4 - SCORE: If you collect four pickups, your score will be increased by 250 points. This is for the real hardcore shmuppers who don't need no skinkin' -upgrades, +upgrades. >>>>>>> BETA STUFF ----------------------------------------------------------- Continue to send me any IDEAS and BUGS found!! Or send me you like this program, or even send me something if you don't. Again: shiar@mailroom.com, -or ICQ #43840958! PLEASE! +PLEASE! Tested on TI86es and emulators with ROM 1.2, 1.4 and 1.6 using YAS, Rascall and Asm(. Nemesis will NOT run correctly under RASCALL with the diff --git a/nemesis.z80 b/nemesis.z80 index 3cbb88e..495d581 100644 --- a/nemesis.z80 +++ b/nemesis.z80 @@ -84,7 +84,7 @@ lvlenemies = ebullets+(nrebuls*3) ;-1032 .dw Title ;pointer to description (all shells) .dw Icon ;pointer to YAS icon -Title: .db "Nemesis v0.99.99 by SHIAR",0 +Title: .db "Nemesis v1.0.A23 by SHIAR",0 Icon: .db 8,1 ;icon for YAS: width = 1byte; height = 7bytes .db %11100000 ; ███ @@ -211,7 +211,7 @@ menuchange: start_tha_freakin_game: ld a,(hl) ;(menuitem) dec a ;new game=0; so that gives -1 = NZ - cal nz,New_game ;NEW GAME + jp nz,New_game ;NEW GAME jp samelevel ;CONTINUE: game_main_loop menuexit: @@ -754,8 +754,9 @@ Handle_Ship: cp 64+1 ;last explosion frame? (1-16=1st;49-64=4th) jp c,exploding_you ;not yet: display explosion cp 64+16 ;delay finished? + ret nz ;no, don't display anything (&return) + pop hl ;restore stack (cuzzof call) jp z,You_die ;yes = game over - ret ;don't display anything ;----move---- ok: ;we are @@ -884,8 +885,7 @@ dispmultiplesloop: exploding_you: srl a ;half the framerate - srl a ;half that framerate - srl a ;and half again that framerate + srl a ;and half that framerate ld hl,x-1 ld ix,spr_yexplosion ;base sprite @@ -968,8 +968,9 @@ select: dec a ;is it 1? ret m ;return if it's 0 (no pickups) - jr nz,selectlaser ;no, carry on - ld (hl),a ;reset pickups + ld (hl),0 ;reset pickups + jr nz,selectlaser ;no, carry on again +selectbeam: ld a,(de) ;(your_weapon) inc a ;next cp maxweapon @@ -984,8 +985,7 @@ selectedbeam: jr disp_icons ;display n return selectlaser: dec a ;is it 2? - ld (hl),0 ;reset pickups - jr nz,selectextra ;no, carry on again + jr nz,selectextra ;no, carry on ld (your_extra),a ;no extra beams (tailbeam/up-double) ld a,(de) ;(your_weapon) cp maxweapon ;upgrade from bullet? @@ -1051,37 +1051,33 @@ displivesloop: displivesdone: cal disp_armor ;display bar - ld ix,spr_icon00 + ld ix,spr_icon00 ;emptyIcon ld a,(your_weapon) ;ur weapon - cp maxweapon ;laser? + cp maxweapon ;bullets? psh af ;a=(your_weapon); cf=bullets jr nc,no_bullets ;=laser ld hl,$3945 ;position to display bullet-type digit - pop af ;digit=(your_weapon) - psh af inc a ;1 = weapon #1 (=0) ld (_penCol),hl ;set location add a,'0' ;make digit cal _vputmap ;display char - ld ix,spr_icon03 ;bulletIcon + ld ix,spr_icon04 ;bulletIcon no_bullets: - ld de,$3939 ;icon #1 - cal putwidesprite ;display icon (beamweap) + ld de,$3939 ;icon #2 + cal putwidesprite ;(beamweap) - ld ix,spr_icon00 ;emptyIcon - pop af ;ld a,(your_weapon) - ld b,a + ld ix,spr_icon00 + pop af ;ld a,(your_weapon) \ cp maxweapon jr c,no_laser ;popped carry - ld hl,$3955 ;position to display bullet-type digit + ld hl,$3955 ;position to display laser-type digit ld (_penCol),hl ;set location - ld a,b ;(your_weapon) ;load = faster than push - sub maxweapon-1 ;1 = laser #1 (=maxweapon) + sub maxweapon-1 ;1 = laser #1 (=maxweapon) add a,'0' ;make digit cal _vputmap ;display char - ld ix,spr_icon04 ;laserIcon + ld ix,spr_icon03 ;laserIcon no_laser: - ld de,$4939 ;icon #2 - cal putwidesprite ;(laser) + ld de,$4939 ;icon #1 + cal putwidesprite ;display icon (laser) ld ix,spr_icon00 ;emptyIcon ld a,(your_multiples) ;number of multiples @@ -1122,23 +1118,15 @@ iconsdone: ld (PutWhere),a ;set sprite-position to normal screen jp disp_charge ;display weapon charge bar +drawline: + ld (hl),a ;draw one piece of the divider-line + inc hl ;move right (8 pixels = 1 byte) + dnz drawline ;repeat (16bytes * 8pixels =128= screen width) + ret + disp_armor: ld de,16 ;line size - ld hl,(58*16)+VIDEO_MEM+6 - ld c,5 ;5 lines down -armorbarclrY: - ld b,4 ;four bytes right - psh hl -armorbarclrX: - ld (hl),0 ;clear - dec hl ;next byte - dnz armorbarclrX ;4x - pop hl ;old position - add hl,de ;one pixel down - dec c ;5x - jr nz,armorbarclrY ;loop - ld hl,VIDEO_MEM+(58*16)+6 ld a,(your_armor) ;load your armor (0 = hit enemy_lashit: + psh hl ;pointer to enemy destroyed by putsprite + psh bc ;safe enemy counter + psh de ; and Ur position (used for further compares) + dec e ;adjust y-position + dec e + dec e ;hit sprite centered at e (height=6) + dec hl ;@x + ld d,(hl) ;x-position of hit (enemy's x-pos) + ld ix,spr_lashit ;laserHit sprite + cal putsprite ;display this frame only unlike bullethit ani + pop de ;restore regs + pop bc + pop hl ld a,(curweapdamage) ;damage - cal enemy_hit ;hl=enemy+y + cal enemy_hit ;inflict (hl=enemy+y) nolashit: pop hl ;enemy+1 ld a,b ;psh bc @@ -1636,7 +1655,14 @@ chk_enemyleft: dnz chk_enemyleft ;loop for all enemies ld hl,nextevent ;time 'til next event ld (hl),157 ;next time to check is in 157 turns/frames - inc a ;no enemies left: place upgrade pickup + ld a,(your_weapon) + cp maxweapon ;you have bullets? + jr nc,placebigupgrade ;if not just place the big upgrade + ld a,(level) + rra ;if level&1=0 (even levels) + ret nc ;then dont place a pickup (=50%) +placebigupgrade + ld a,1 ;no enemies left: place upgrade pickup jr place_enemy ;place enemy #1(=a) = big pickup enemyleft: ld hl,eventleft @@ -1662,7 +1688,7 @@ place_boss: dec hl ;points to leveldata\boss\enemynr ld a,(hl) ;load enemy# of boss -place_enemy: ;places enemy #=a +place_enemy: ;places enemy #=a (out:achl=?;b=0;de=@enemy+11) psh af ld hl,enemies+1-enemysize ld bc,enemysize @@ -1678,22 +1704,28 @@ chk_noenemy: ;find an unused (no) enemy dec de ;goto hp64 (before occ) ldi ;set hp64 ldi ;set hitpoints+occ of enemy class - ld a,(hl) - .db $DD,$6F ;ld hx,a + ld c,(hl) ldi ;set sprite - ld a,(hl) - .db $DD,$67 ;ld lx,a + ld b,(hl) ;bc=@enemy_sprite + inc bc ;@sprite-height + ld a,(bc) + ld b,a ;b = sprite-height ldi ;set sprite + 1 ldi ;set x-position ld a,(hl) ;load placeInfo inc hl - dec a ;is it 1? + inc a ;is it -1? jr z,random_enemy ;yes: create random value <51 in a - dec a ;is it 2? + inc a ;is it -2? jr z,lure_enemy ;yes: create a 100% luring enemy + inc a ;is it -3? + jr z,lure_enemy ;yes: pick one (50% lure) ;otherwise? -halflure_enemy: ;yes (of course it is): pick one (50% lure) +yset_enemy: ;set 0+3..$FC+3 as y-position + ld (de),a + jr ypos_OK +halflure_enemy: ld a,(timer) ;look at frame-number rra ;make random if odd frame nr. jr nc,random_enemy ;1st possibility: random enemy @@ -1702,8 +1734,8 @@ lure_enemy: ;2nd possibility: luring enemy jr ypos_OK random_enemy: ld a,64-8 ;=57=screen height (8 is scorebar) - sub (ix+1) ;minus sprite height=bottom - ld c,b ;range=0 to... + sub b ;minus sprite height=bottom + ld c,0 ;range=0 to... ld b,a ;...57-y cal Random ;random value on screen ypos_OK: ;random value successfully created @@ -1746,7 +1778,7 @@ found_ebullet: sub 6 jp c,bulletok ;type #0-5 = done (normal/diag) or a - jr z,bulletaiming ;type #6 = aiming = type#2..5 + jp z,bulletaiming ;type #6 = aiming = type#2..5 dec a jr z,bullettriple ;type #7 = triple dec a @@ -1757,18 +1789,29 @@ found_ebullet: jr z,bulletdquad ;type #10 = double-quad dec a jr z,bulletran ;type #11 = random + dec a + jr z,firesenemies ;type #12 = mine + Dquad + +basefiresenemies: ;type #13 = base + ld bc,$3A00 + cal Random + ld e,a + cal random14 + ld c,a + cal bulletok ;find and fire bullet + + ld a,boss2enemy ;otherwise place enemy #[boss2enemy] + jp place_enemy firesenemies: ;type #12 = mine / Dquad ld a,(timer) rra ;if odd turn (50% chance) jr c,bulletdquad ;then fire 6x - ld a,bossenemy ;otherwise place enemy #[bossenemy] + ld a,boss1enemy ;otherwise place enemy #[boss1enemy] jp place_enemy bulletran: - ld c,1 - ld b,4 - cal Random + cal random14 ld (hl),a jr _bulletok @@ -1784,6 +1827,7 @@ bulletdquad: ;type #10 = double-quad ld a,e add a,10 ld e,a ;offset 10 down (5 total) +_enemy_fires_again: jr enemy_fires_again bulletquad: ;type #9 = quad @@ -1802,7 +1846,7 @@ bulletdouble: ;type #8 = double inc hl ;next bullet position inc e inc e ;two px down - jr enemy_fires_again ;find and fire another bullet + jr _enemy_fires_again ;find and fire another bullet bullettriple: ;type #7 = triple ld (hl),1 ;type #1 = normal @@ -1812,7 +1856,7 @@ bullettriple: ;type #7 = triple cal enemy_fires_again inc hl ld c,5 ;type #5 = up 50% - jr enemy_fires_again + jr _enemy_fires_again bulletaiming: ;type #6 = aiming = type#2..5 ld a,(y) @@ -2066,6 +2110,8 @@ moving_enemy: jr z,movetype_right ;11 = (.5>) dec b jr z,movetype_fright ;12 = (1>) + dec b + ret z ;13 = (0) movetype_right: rra @@ -2300,10 +2346,31 @@ dostory: ld (levelp),hl ;set the level-pointer ret ;and return -;--------------------------- SFX -------------------------------------------- DoSFX: ;in:(curline)=beginLine;b=nrOfLines -SFXloop: + jr sfxlaser + ld hl,dispbuffer + ld b,64 +sfxscrollloop: + psh bc + psh hl + ld de,VIDEO_MEM + ld hl,VIDEO_MEM+16 + ld bc,63*16 + ldir + pop hl + ld bc,16 + ldir + ld b,16 +sfxscrolldelay: + halt ;delay + dnz sfxscrolldelay ;8x + pop bc + dnz sfxscrollloop + ret + + +sfxlaser: psh bc ld a,0 ;get line number @@ -2327,25 +2394,29 @@ curline =$-1 ld hl,dispbuffer ;source of original add hl,bc ;hl->source -SFXdisp: ;display this frame on screen +sfxlaserdisp: ;display this frame on screen ld bc,16 ;one line (=16 bytes, you'd know by now) ldir ;display (copy actually) ld bc,-16 ;go up one line (not on screen) add hl,bc ;so the same line will be displayed dec a ;counter - jr nz,SFXdisp ;repeat until whole screen is displayed + jr nz,sfxlaserdisp ;repeat until whole screen is displayed ld b,8 -SFXdelay: +sfxlaserdelay: halt ;delay - dnz SFXdelay ;8x + dnz sfxlaserdelay ;8x pop bc ;counter - dnz SFXloop + dnz sfxlaser ret ;--------------------------- proc ------------------------------------------- +random14: ;random 1..1+4 + ld c,1 + ld b,4 +; cal Random Random: ;a=cW mode setting cpl @@ -3619,7 +3750,7 @@ your_occ .db 0 ;0=normal 1..16=exploding 0 your_shield .db 0 ;invincibility left 0 your_armor .db 24 ;HP left 24 your_lives .db 3 ;lives left 3 -your_weapon .db 17 ;current weapon upgrade 0 +your_weapon .db 9 ;current weapon upgrade 0 your_multiples .db 0 ;multiples present 0 your_extra .db 0 ;extra beam present 0 hardcore .db 0 ;hardcore mode if non-0 0 @@ -3638,8 +3769,10 @@ time2invert: .db 0 ;time until b<>w switch (0 at startup) .db 0 ;storyline ID levelstart: ;[y-pos] [x-pos] [text,0] [SFX lines; 0=more text] [-1=end] - .db 25,33,"Imperial ships have",0,0 - .db 31,9,"been sent to intercept you",0,31-25+6,-1 + .db 1,33,"Imperial ships have",0,0 + .db 7,9,"been sent to intercept you",0,0 ;,7-1+6,-1 + .db 41,33,"Note STORYLINE and LEVELS",0,0 + .db 48,38,"---- AINT DONE YET! ----",0,48-1+6,-1 .db 30 level00:.db 5,3,5,3,2,2 @@ -3734,59 +3867,61 @@ pickupfreq = 19 enemyspecs: ;10 bytes/enemy | max.enemies <64 | sprites use <768 bytes ;0-1=pickups - .db 0,%00000010,spr_enemyP1&255,spr_enemyP1/256,128,2,03, 0, 0,1 ;pickup - .db 0,%00000110,spr_enemyP2&255,spr_enemyP2/256,128,2,03, 0, 0,1 ;bigpickup + .db 0,%00000010,spr_enemyP1&255,spr_enemyP1/256,128,-2,03, 0, 0,1 ;pickup + .db 0,%00000110,spr_enemyP2&255,spr_enemyP2/256,128,-2,03, 0, 0,1 ;bigpickup ;2-7=basic enemies , , , , , , , , - .db 0,%00001011,spr_enemyE0&255,spr_enemyE0/256,128,1,00,12, 0,1 ;intro - .db 0,%00100011,spr_enemyE1&255,spr_enemyE1/256,128,1,00,10, 0,1 ;weak - .db 0,%01100011,spr_enemyE4&255,spr_enemyE4/256,128,1,03, 6,50,1 ;slow - .db 0,%01001011,spr_enemyE2&255,spr_enemyE2/256,128,1,00, 1, 0,1 - .db 0,%01011011,spr_enemyE3&255,spr_enemyE3/256,128,3,00,19,39,8 ;heavy - .db 0,%01010011,spr_enemyE5&255,spr_enemyE5/256,128,3,05, 1, 0,1 ;fast -;8-10=backwards enemies, , , , , , , , - .db 0,%00111011,spr_enemyB1&255,spr_enemyB1/256,000,3,11,19,92,1 - .db 0,%01011011,spr_enemyB2&255,spr_enemyB2/256,000,1,12,11,45,1 - .db 0,%01101011,spr_enemyB3&255,spr_enemyB3/256,000,1,11,10,41,8 ;small -;11-15=asteroid , , , , , , , , - .db 0,%01001011,spr_enemyA1&255,spr_enemyA1/256,128,1,04, 0, 0,1 - .db 0,%01111011,spr_enemyA2&255,spr_enemyA2/256,128,1,00, 0, 0,1 - .db 0,%10110011,spr_enemyA3&255,spr_enemyA3/256,128,1,05, 0, 0,1 - .db 1,%00010011,spr_enemyA4&255,spr_enemyA4/256,128,1,03, 0, 0,1 ;slow+hard - .db 0,%01111011,spr_enemyA4&255,spr_enemyA4/256,128,1,06, 0, 0,1 -;16-21=improved enemies, , , , , , , , - .db 0,%10010011,spr_enemyG1&255,spr_enemyG1/256,128,3,00, 3,40,1 - .db 0,%10111011,spr_enemyG2&255,spr_enemyG2/256,128,3,00, 1,36,1 - .db 0,%01100011,spr_enemyG5&255,spr_enemyG5/256,128,1,01, 9,52,1 ;updown - .db 0,%11110011,spr_enemyG3&255,spr_enemyG3/256,128,3,04, 7,99,7 ;3x - .db 1,%01101011,spr_enemyG4&255,spr_enemyG4/256,128,2,01,17, 0,7 ;updown3x - .db 1,%00010011,spr_enemyG6&255,spr_enemyG6/256,128,2,07,62,60,8 ;lure -;22-26=hi-speed , , , , , , , , - .db 1,%00010011,spr_enemyS2&255,spr_enemyS2/256,128,2,05, 3,32,8 ;fast - .db 0,%11111011,spr_enemyS1&255,spr_enemyS1/256,128,3,07, 2,28,1 ;lure - .db 1,%00101011,spr_enemyS4&255,spr_enemyS4/256,128,3,06, 0, 0,1 ;vfast+nofire - .db 1,%01110011,spr_enemyS3&255,spr_enemyS3/256,128,1,07, 1,20,8 ;lure - .db 0,%11011011,spr_enemyS2&255,spr_enemyS2/256,128,2,01, 3,7,11 ;updown+ran -;27-28=unused, , , , , , , , , - .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,2,03, 0, 0,1 ;27 - .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,2,03, 0, 0,1 ;28 + .db 0,%00001011,spr_enemyE0&255,spr_enemyE0/256,128,-1,00,12, 0,1 ;intro + .db 0,%00100011,spr_enemyE1&255,spr_enemyE1/256,128,-1,00,10, 0,1 ;weak + .db 0,%01100011,spr_enemyE4&255,spr_enemyE4/256,128,-1,03, 6,50,1 ;slow + .db 0,%01001011,spr_enemyE2&255,spr_enemyE2/256,128,-1,00, 1, 0,1 + .db 0,%01011011,spr_enemyE3&255,spr_enemyE3/256,128,-3,00,19,39,8 ;heavy + .db 0,%01010011,spr_enemyE5&255,spr_enemyE5/256,128,-3,05, 1, 0,1 ;fast +;8-10=backwards enemies, , , , , , , , + .db 0,%00111011,spr_enemyB1&255,spr_enemyB1/256,000,-3,11,19,92,1 + .db 0,%01011011,spr_enemyB2&255,spr_enemyB2/256,000,-1,12,11,45,1 + .db 0,%01101011,spr_enemyB3&255,spr_enemyB3/256,000,-1,11,10,41,8 ;small +;11-15=asteroid , , , , , , , , + .db 0,%01001011,spr_enemyA1&255,spr_enemyA1/256,128,-1,04, 0, 0,1 + .db 0,%01111011,spr_enemyA2&255,spr_enemyA2/256,128,-1,00, 0, 0,1 + .db 0,%10110011,spr_enemyA3&255,spr_enemyA3/256,128,-1,05, 0, 0,1 + .db 1,%00010011,spr_enemyA4&255,spr_enemyA4/256,128,-1,03, 0, 0,1 ;slow+hard + .db 0,%01111011,spr_enemyA4&255,spr_enemyA4/256,128,-1,06, 0, 0,1 +;16-21=improved enemies, , , , , , , , + .db 0,%10010011,spr_enemyG1&255,spr_enemyG1/256,128,-3,00, 3,40,1 + .db 0,%10111011,spr_enemyG2&255,spr_enemyG2/256,128,-3,00, 1,36,1 + .db 0,%01100011,spr_enemyG5&255,spr_enemyG5/256,128,-1,01, 9,52,1 ;updown + .db 0,%11110011,spr_enemyG3&255,spr_enemyG3/256,128,-3,04, 7,99,7 ;3x + .db 1,%01101011,spr_enemyG4&255,spr_enemyG4/256,128,-2,01,17, 0,7 ;updown3x + .db 1,%00010011,spr_enemyG6&255,spr_enemyG6/256,128,-2,07,62,60,8 ;lure +;22-26=hi-speed , , , , , , , , + .db 1,%00010011,spr_enemyS2&255,spr_enemyS2/256,128,-2,05, 3,32,8 ;fast + .db 0,%11111011,spr_enemyS1&255,spr_enemyS1/256,128,-3,07, 2,28,1 ;lure + .db 1,%00101011,spr_enemyS4&255,spr_enemyS4/256,128,-3,06, 0, 0,1 ;vfast+nofire + .db 1,%01110011,spr_enemyS3&255,spr_enemyS3/256,128,-1,07, 1,20,8 ;lure + .db 0,%11011011,spr_enemyS2&255,spr_enemyS2/256,128,-2,01, 3,7,11 ;updown+ran +;27-28=unused, , , , , , , , , + .db 0,%00000011,spr_enemy00&255,spr_enemy00/256,128,-2,03, 0, 0,1 ;27 ;29=final boss' enemy - .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,3,01, 0, 0,1 ;lure -bossenemy = 29 -;30-34=first bosses , , , , , , , , - .db 2,%01000111,spr_boss01 &255,spr_boss01 /256,127,1,09,35,50,7 ;triple - .db 2,%01010011,spr_boss02 &255,spr_boss02 /256,127,1,09,20,12,1 ;small - .db 2,%01111011,spr_boss03 &255,spr_boss03 /256,127,1,09,15,11,8 ;normal - .db 2,%10011111,spr_boss04 &255,spr_boss04 /256,127,3,10,10,11,1 ;moving - .db 1,%11111011,spr_boss05 &255,spr_boss05 /256,127,2,10, 1, 4,1 ;weak+rapidfire -;35-36=asteroid bosses , , , , , , , , - .db 4,%00010111,spr_bossA1 &255,spr_bossA1 /256,127,1,10,36,14,6 - .db 4,%01101111,spr_bossA1 &255,spr_bossA1 /256,127,2,10,28,12,6 -;37-41=big bosses , , , , , , , , - .db 4,%00010111,spr_boss07 &255,spr_boss07 /256,127,3,08,31, 8,7 - .db 5,%00101011,spr_boss06 &255,spr_boss06 /256,127,3,08,13, 7,7 - .db 6,%10001111,spr_boss08 &255,spr_boss08 /256,127,1,08,18, 8,9 ;quad - .db 7,%00101011,spr_boss09 &255,spr_boss09 /256,127,1,08,21, 9,10 ;6x - .db 9,%11011011,spr_boss09 &255,spr_boss09 /256,127,1,08,12,11,12 ;enemies + .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,-3,01, 0, 0,1 ;moving + .db 0,%11110011,spr_enemyM1&255,spr_enemyM1/256,128,23,09, 0, 0,1 ;mid+lure +boss1enemy = 28 +boss2enemy = 29 +;30-34=first bosses , , , , , , , , + .db 2,%01000111,spr_boss01 &255,spr_boss01 /256,127,-1,09,35,50,7 ;triple + .db 2,%01010011,spr_boss02 &255,spr_boss02 /256,127,-1,09,20,12,1 ;small + .db 2,%01111011,spr_boss03 &255,spr_boss03 /256,127,-1,09,15,11,8 ;normal + .db 2,%10011111,spr_boss04 &255,spr_boss04 /256,127,-3,10,10,11,1 ;moving + .db 1,%11111011,spr_boss05 &255,spr_boss05 /256,127,-2,10, 1, 4,1 ;weak+rapidfire +;35-36=asteroid bosses , , , , , , , , + .db 4,%00010111,spr_bossA1 &255,spr_bossA1 /256,127,-1,10,36,14,6 + .db 4,%01101111,spr_bossA1 &255,spr_bossA1 /256,127,-2,10,28,12,6 +;37-41=big bosses , , , , , , , , + .db 4,%00010111,spr_boss07 &255,spr_boss07 /256,127,-3,08,31, 8,7 + .db 5,%00101011,spr_boss06 &255,spr_boss06 /256,127,-3,08,13, 7,7 + .db 6,%10001111,spr_boss08 &255,spr_boss08 /256,127,-1,08,18, 8,9 ;quad + .db 7,%00101011,spr_boss09 &255,spr_boss09 /256,127,-1,08,21, 9,10 ;6x + .db 9,%11011011,spr_boss09 &255,spr_boss09 /256,127,-1,08,12,11,12 ;enemies + .db 9,%11011011,spr_boss0E &255,spr_boss0E /256,119,00,13,12,13,13 spr_enemy00: spr_enemyP1: @@ -4374,6 +4509,59 @@ spr_boss09: .db %10100000 .db %11111000 .db %10000000 +spr_boss0E: + .db 8,51 ;.......:.......: + .db %00111011 ; ████ ██ + .db %01100110 ;█ ██ + .db %01110011 ; ██ + .db %00111011 ; ███ ██ + .db %01000111 ; ███ + .db %10101100 ; ██ + .db %01110111 ; ██ ███ + .db %00111011 ; ████ ██ + .db %01100100 ;███ █ + .db %01000001 ; ████ + .db %01100100 ;███ █ + .db %01111011 ; ████ ██ + .db %01110111 ; ██ ███ + .db %01001100 ; ██ + .db %00100111 ; ███ + .db %00111011 ; ███ ██ + .db %01000011 ; ██ + .db %10010110 ;█ ██ + .db %01111011 ; ████ ██ + .db %00110101 ; █ + .db %00001011 ; ██ + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000000 ; + .db %00000011 ; ██ + .db %00001101 ; █ + .db %01111011 ; ████ ██ + .db %11000110 ;█ ██ + .db %01000011 ; ██ + .db %01111011 ; ███ ██ + .db %00100111 ; ███ + .db %01011100 ; ██ + .db %00110111 ; ██ ███ + .db %01111011 ; ████ ██ + .db %11100100 ;███ █ + .db %00000001 ; ████ + .db %11100100 ;███ █ + .db %01111011 ; ████ ██ + .db %00110111 ; ██ ███ + .db %00101100 ; ██ + .db %01000111 ; ███ + .db %00111011 ; ███ ██ + .db %01001011 ; ██ + .db %10000110 ;█ ██ + .db %01111011 ; ████ ██ + .db %00001101 ; ████ ;---------------------------------------------------------------------------- ;----------------------------- logo ------------------------------------------ @@ -4410,79 +4598,6 @@ logo_nemesis: ;---------------------------------------------------------------------------- ;---------------------------------------------------------------------------- -; 0.98.77 -- 7.VII.00 -- size 6707 -; -; # bullets do damage in all levels -; * more armor at armor-upgrade and extra armor at end of a level -; - internal levels again (no need 4 external, safer/smaller) -; # some registers not correctly pushed/popped -; * several optimizations (init.procs some bytes smaller) -; # enemies hit with hitpoints left disappeared (one pop too much...) -; + bullets "charge up" (more damage) when not firing -; - removed contrast changes -; + more powerful bullets have different sprites (larger=more damage) -; # multiples appear at your position (begin level/just selected) -; # when invulnerable multiples acted weird -; # no more error at activation after APD off after running Nemesis -; # saves correctly if own name ain't "nemesis" + some bytes smaller -; # screen wasn't always entirely cleared after quit -; * waits until all keys have been released after death -; + different bullets sizes will miss if they're too small -; + at level start "press F1 to save"-text will be displayed -; * w3.shiar.org displayed at title screen, black bar behind version nr -; # score to 0 when exit pressed at main menu -; # no residual story-text in first frame of game -; # game doesn't continue again after death (stack messed up) -; # game over when lives<0 (didn't work in v0.96+) -; * using some self-modifiing code (so it's smaller) -; # new random procedure: stars don't appear on one line anymore -; * weapons appear centered at multiples -; * laser properties can be changed (damage, charge) -; + weapon can be combination of bullets/lasers (max. of 3 per weapon) -; * bullet-icon is removed when laser is selected -; * enemy sprite table integrated in enemy specs (-1 byte/enemy) -; + random enemy is chosen from any number of enemies per level -; * time to first enemy fire defined per enemy, not per level -; + CLIPPED sprites!! no more in/out popping enemies! wow... -; * bullets/enemies removed when _entirely_ off screen -; # enemies would sometimes be hit by bullets going right below them -; # size of the second bullet was too big (invisible hit) -; * the frequency an enemy fires bullets is defined per enemy -; + wide clipped sprites implemented (width 1-16 pixels) -; # bosses first move left until x=100, otherwise they'd be off-screen -; * at status bar left below ships are displayed for lives left -; * armor bar is two pixels high (better visible) -; # bullet overflow fixed again (>63 bullets fired) -; # correct weapon loaded when continuing a saved game -; # game freezed when generating a random value <=1 -; * you explode in a different way than the enemies -; + screen inverts for a brief time when you are hit! -; # stats-bar was messed up when ya got 0 lives left -; * two new (big) bosses modeled after a common MSX Nemesis2-boss -; * score increased once every 32 frames (instead of every 256) -; # ground fixed for new random routine (smaller routine; incs -2 to 2) -; + laser will upgrade as well when you reselect it -; * 2nd can be used in main menu (wow!) -; # altered variable storage space because of Nemesis grew beyond 6kb -; # fixed armor bar display when at maximum -; + a few new enemies (asteroids) and remade 1st 4 levels; new pickup -; - torpedo since it was kinda useless -; + second icon now selects TAIL BEAM: bullet going backwards -; # armor increase at the end of a level doesn't overflow armorbar -; + you can choose your own ship out of four vessel after NEW GAME! -; + enemies can appear at any x-position and move both left and right -; + move patterns given per enemy, not per level -; * new (faster) enemy-move system; 10 basic moves (x2 left+right) -; # enemies can _never_ move above or below visible screen -; * "randomY"-enemies are placed entirely on screen (height calced) -; # the major TI-OS crash bug WAS afterall caused by sprites drawn -; (partially) outside screen memory. temporarily fixed by setting -; virtual screen buffer to $8200 (enough mem there) -; + upto 29 cool enemy sprites and redone first five levels -; * improved enemy-move routine; smooth luring, five speeds+backwards -; # after pause weapon will not be fired -; # teacher key fixed (waits for GRAPH to be release before&after) -; ; 0.99.99 -- 9.IX.00 -- size 6936 ; ; + you can have upto FOUR multiples! (~20 pixels apart) @@ -4552,9 +4667,19 @@ logo_nemesis: ; * the armor bar is now 5 pixels in height; very visible ; # if selecting upgrade or starting level, charge bar wasn't displayed ; -; 1.00.99 -- 9.IX.00 -- size 6936 +; 1.00.A23 -- 23.X.00 -- size 7212 ; -; + ... +; * armor-bar background, empty upgrades sprites changed +; + shows sprite when laser hits an enemy (his "shield"?) +; + exit-key also quits out of ship selection screen +; # fixed direct-quit on death bug (bug since recent optimization) +; * armor-bar background changed (more elegant and smaller code) +; # "flash" when end-boss spawns mine fixed +; + enemy's y start position can be specified per enemy +; * first icon is now laser, second one's bullets +; + when bullets selected, upgrade icons won't appear half the time +; # remainder pixels in armor bar (appeared after heavy damage) removed +; + your ship's explosion is now also 8 frames (half enemy expl. speed) ; ; ; + added - removed * changed # bug fixed