From cc994400b367ab7c6e1f136a0561bbb13d42896a Mon Sep 17 00:00:00 2001 From: Mischa Poslawsky Date: Sun, 20 Aug 2000 14:17:14 +0200 Subject: [PATCH] version 0.99 pre3: updates to bullet weapon, enemies * beamweapon can be selected when you got laser (like vice versa) * selecting laser removes tailbeam or up-double # tail beam/up-double correctly centered # disappearing bullets (when enemies fired multiple bullets) fixed + bullets and lasers both upgradable upto level 9 # fixed end story (_vputs didn't recognize 0-end when "'" in string) # stars couldn't be altered anymore since recent levelformat changes * maximum different enemies increased from 28 to 63 * pickup sprite altered, small changes to some enemies + new moves implemented: 75% speed and lure-while-moving --- nemesis.z80 | 871 +++++++++++++++++++++++++++------------------------- 1 file changed, 454 insertions(+), 417 deletions(-) diff --git a/nemesis.z80 b/nemesis.z80 index 413ab08..5d10f61 100644 --- a/nemesis.z80 +++ b/nemesis.z80 @@ -7,10 +7,7 @@ ;This source should only be used for learning practises, do not ;alter it, and certainly never distribute an altered version!! -;&&& marks uncertainties or things to optimize - -;TO DO: -; up-double | torpedoes | levels 7-12 | jp m | better weapons +;TO DO: levels 11,12,13 | bosses 10-13 | look over &&& markings ;---------------------- nemesis.z80 start ----------------------------------- @@ -26,7 +23,6 @@ dispbuffer = $81FA ;= $C9FA ;virtual screen ;VIDEO_MEM = $FC00 ;tha big scareen -TEXT_MEM = _textShadow ;text buffer; C0F9-C1A0 (167/$A7 bytes) _clrWindow = $4a86 ;_clrLCD and _clrScrn _ex_ahl_bde = $45f3 ;exchange values between AHL and BDE @@ -34,55 +30,48 @@ _shracc = $4383 ;like _shlacc but just the opposite :P _dispahl = $4a33 ;display value in ahl <100000 (cheap TI) _asapvar = $d6fc ;our own variable name (likely "nemesis") -storepos = _asm_exec_ram+7000 ;120 OF 165 -storepos2 = _asm_exec_ram+7200 ;141 OF 167 9000 BYTES +storepos = _asm_exec_ram+7000 ;1024 bytes to store things ;---------------------- in-game vars ---------------------------------------- -just_fired = storepos ; +0 ;counts how long a blast lasts -hiscorepos = storepos ; +0 ;entering hiscore name - ; ;--------YOU -x = storepos+1 ; +1 ;your ship's position -y = x+1 ; +2 ;your y-pos -firex = y+1 ; +3 ;(1 byte) -firey = firex+1 ; +4 ;(1 byte) - ; ;--------LEVEL -eventleft = storepos+5 ; +5 ;nr. of enemies still to come -level_enemy = eventleft+1 ; +7 ;enemy type -level_info = level_enemy+1 ; +8 ;info (see below) -level_move = level_info+1 ; +9 ;= -spacespace = level_move+1 ;+10 -groundinfo = spacespace+1 ;+20 -groundpos = groundinfo+1 ;+21 $10 -ceilingpos = groundpos+16 ;+37 $10 - ; ;--------STARS -stars1 = ceilingpos+16 ;+53 -stars2 = stars1+1 ;+54 -nrstars1 = 7 -starx1 = storepos+55 ;+55 -nrstars2 = 7 -starx2 = starx1+(nrstars1*2) ;+69 - ; ;--------MULTIPLES -your_prevpos = starx2+(nrstars2*2) ;+87 ;save previous positions (32d) +just_fired = storepos ; +0 ;counts how long a blast lasts +hiscorepos = storepos ; +0 ;entering hiscore name + +x = storepos+1 ; +1 ;your ship's position +y = x+1 ; +2 ;your y-pos +firex = y+1 ; +3 ;(1 byte) +firey = firex+1 ; +4 ;(1 byte) + +eventleft = firey+1 ; +5 ;nr. of enemies still to come +level_enemy = eventleft+1 ; +6 ;enemy type +level_info = level_enemy+1 ; +7 ;ceiling/ground (%00) present +spacespace = level_info+1 ; +8 +groundinfo = spacespace+1 ; +9 +stars1 = groundinfo+1 ; +10 ;slow stars byte (<< %1) +stars2 = stars1+1 ; +11 ;fast stars byte (<<< %1) +groundpos = stars2+1 ; +12 $10 +ceilingpos = groundpos+16 ; +28 $10 +nrstars1 = 10 +starx1 = ceilingpos+16 ; +44 ;20 +nrstars2 = 10 +starx2 = starx1+(nrstars1*2) ; +64 ;20 + mm = 4 ;max. number of multiples +your_prevpos = starx2+(nrstars2*2) ; +84 ;14*mm+2 ;previous positions -;^-----------------------------------<1 ;-120=$78 -enemies = storepos2 ; +0 ;info about each enemy +enemies = storepos+200 ;+200 ;info about each enemy enemysize = 10 ;infobytes per enemy nrenemies = 16 ;max. nr of enemies ybullets = enemies+(nrenemies*enemysize) ;60 bytes = 20(state,damg,x,y) -nrybuls = 128 ; +80\ -ebullets = ybullets+(nrybuls*4) ;+110 ;30 bytes = 10(state,x,y) +nrybuls = 128 ;+360\ +ebullets = ybullets+(nrybuls*4) ;+872 ;30 bytes = 10(state,x,y) nrebuls = 48 -lvlenemies = ebullets+(nrebuls*3) +lvlenemies = ebullets+(nrebuls*3) ;-1016 -;^-----------------------------------<2 ;-141=$8D -;level_info: -; [0000:damage 0:diagfire 0:ground 0:ceiling 0:-] ;enemies: -; [HP64] [000000:HP left 00:(00=no enemy 01=exploding 10=normal 11=moving)] +; [HP64] [000000:HP left 00:(00=no enemy 01=exploding 1X=normal)] ; [ship type or explosion frame] [x] [y] [movetype] [movecounter] ; [firecounter] [firefreq] [firetype] @@ -94,7 +83,7 @@ lvlenemies = ebullets+(nrebuls*3) .dw Title ;pointer to description (all shells) .dw Icon ;pointer to YAS icon -Title: .db "Nemesis v0.99.812 by SHIAR",0 +Title: .db "Nemesis v0.99.820 by SHIAR",0 Icon: .db 8,1 ;icon for YAS: width = 1byte; height = 9bytes .db %11100000 ; ███ @@ -123,6 +112,11 @@ init: cal BUSY_OFF ;turns the run-indicator off, obviously xor a ;ld a,0 res 2,(iy+13) ;don't scroll the screen cal _flushallmenus ;remove TI menus + ld hl,dispbuffer-20 + ld de,dispbuffer-20+1 + ld bc,150*16 + ld (hl),$FF + ldir FixKeys: ;fixes some key problems like left+down bug im 1 @@ -245,15 +239,6 @@ do_invert: ;invert screen (b<>w) pop hl ret -getsomekeys: - halt - halt - cal GET_KEY - cp K_SECOND - ret z - cp K_ENTER - ret - ;---------------------------------------------------------------------------- ;---------------------- game loop ------------------------------------------- ;---------------------------------------------------------------------------- @@ -268,9 +253,9 @@ game_main_loop: ;REPEATS FROM HERE EVERY FRAME Clear_screen: ld hl,dispbuffer ;move from (hl) = top left - ld (hl),$00 ;first pixel will be copied all over the screen + ld (hl),0 ;first pixel will be copied all over the screen ld de,dispbuffer+1 ;(de) = next pixel, thus clearing whole screen - ld bc,896 ;loop 896 times = (128/8) * (64-8 for scorebar) + ld bc,16*56-1 ;loop 896 times = (128/8) * (64-8 for scorebar) ldir ;all clear! ld a,0 ;current frame/turn 0-255 @@ -290,9 +275,9 @@ movestarsdone: cal DisplayStars ;use the same procedure to display back layer ld a,(level_info) ;level info - and %00000110 ;isolate ground&ceiling - jr z,game_stuff ;both non-present - and %00000010 ;bit representing the presence of any ceiling + rra ;ground present? (%1) + jr nc,game_stuff ;no, so both non-present + rra ;bit representing the presence of any ceiling cal nz,Handle_ceiling ;scroll the ceiling (if any) +check4collision cal Handle_ground ;scroll the ground and check if we're dead @@ -842,7 +827,7 @@ no_right: no_up: ld e,(hl) ;e=y ld ix,spr_ship01 ;normal ship sprite your_shipspr =$-2 - ld hl,your_inv ;invulnerable? + ld hl,your_shield ;shielded? ld a,(hl) ;load time in a or a ;is it 0? jr z,disp_ship ;yes so ship = normal (display \ continue) @@ -931,7 +916,7 @@ explosion_stuff: ;in:a=frame*2+(0 to 1); (hl)=xpos-- ix=sprite ;----hit---- damage_you: ;damages you B points - ld a,(your_inv) ;shield left? + ld a,(your_shield) ;shield left? or a jr z,dothadamage ;no shield srl b ;shield: half the damage @@ -956,7 +941,7 @@ newarmor: Place_multiples: ld hl,your_prevpos ;place all previous positions - ld b,mm*7+2 ;all saved positions of them (14 per multiple) + ld b,mm*7+1 ;all saved positions of them (14 per multiple) place_multiples: ld (hl),e ;set prev-x to d inc hl ;next @@ -985,14 +970,19 @@ select: jr nz,select2 ;no, carry on select1: ld (hl),a ;reset pickups - cal inc_armor + cal inc_armor ;increase armor (like at end of level) + ld a,30 ;activate shield for 30*4=120 frames + ld (your_shield),a jr disp_icons ;display and return select2: dec a ;is it 2? jr nz,select3 ;no, carry on - ld (hl),a ;reset pickups - inc a ;a=1 - ld (your_tail),a ;ready tail beam + ld (hl),a ;reset (otherwise could be used to cheat) + ld a,(your_weapon) + cp maxweapon + jr nc,disp_icons ;no beam with laser + ld a,(your_extramode) ;indicates whether this is tailbeam/double + ld (your_extra),a ;ready extra beam jr disp_icons ;display 'n return select3: dec a ;is it 3? @@ -1002,7 +992,10 @@ select3: ld a,(hl) inc a cp maxweapon - jr nc,disp_icons ;weapon maxed out + jr c,selected3 ;weapon OK + jr z,disp_icons ;weapon maxed out + xor a ;laser was selected: set to first weapon +selected3: ld (hl),a ;set new weapon cal loadweapon ;load it (damage and stuff) jr disp_icons ;display n return @@ -1010,9 +1003,10 @@ select4: dec a ;is it 4? jr nz,select5 ;no, carry on again ld (hl),a ;reset pickups + ld (your_extra),a ;no extra beams (tailbeam/up-double) ld hl,your_weapon ld a,(hl) - cp maxweapon ;upgrade from bullet + cp maxweapon ;upgrade from bullet? jr nc,upgradelaser ;nope, just upgrade ld a,maxweapon-1 ;yes, set laser #1 upgradelaser: @@ -1080,21 +1074,21 @@ displivesdone: cal putwidesprite ;display icon ld ix,spr_icon00 - ld a,(your_weapon) ;ur weapon - cp maxweapon ;laser? - psh af ;(your_weapon) - jr nc,no_tail ;if laser (nc) then tail ain't fired - ld a,(your_tail) + ld a,(your_extra) or a jr z,no_tail - ld ix,spr_icon02 ;tailbeamIcon + ld ix,spr_icon02a ;tailbeamIcon + dec a + jr z,no_tail ;(your_extra)=1 = tailbeam + ld ix,spr_icon02b ;updoubleIcon no_tail: ld de,$2901 ;icon #2 cal putwidesprite ;display ld ix,spr_icon00 - pop af ;a=(your_weapon); cf=bullets - psh af + ld a,(your_weapon) ;ur weapon + cp maxweapon ;laser? + 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) @@ -1272,15 +1266,16 @@ fire_weapon: dnz fire_weapon fire_tail: - ld hl,your_tail + ld ix,extrabulletpos-1 ;extra bullet's position + ld hl,your_extra ;data ld a,(hl) - dec a - ret nz - ld a,(ix-2) ;last weapon fired - cp %11100000 ;issit laser - ret z ;then return - xor %11111 ;smart way of going left instead of right :P - ;fire tail bullet + or a + ret z + ld c,tailbeam ;tailbeam weapon data + dec a ;(your_extra)=1 + jr z,fire_ybullet ;=tail + ld c,doublebeam ;up double data + ;(your_extra)=2 =double ;-----fire BULLETs----- fire_ybullet: ;fire bullet type=C dam=(curweapdamage) at (firex/y) @@ -1399,6 +1394,25 @@ nolashit: ;------------------------ handle bullets ------------------------------------ +remove_bullet: + pop hl ;enemy+type + ld (hl),0 ;dump this bullet! + jr next_ybullet+1 ;+1:skip pop hl at next_ybullet + +Handle_bullets: + ld hl,ybullets + ld b,nrybuls +scan_bullets: + ld a,(hl) ;@bulletType + or a ;bulletType=0 >> no bullet + jp z,next_ybullet+2 ;skip pops (+2); jP for speed + + psh bc ;bullet counter + psh hl ;save enemy+type + ld (temp1),hl ;needed for check_bullethits + inc hl ;@damage + inc hl ;@x + move_bullet: ld c,a ;c=type and %11111 ;pixels to move @@ -1412,7 +1426,7 @@ move_bullet: inc hl ;@y-pos ld a,c - cal _shracc ;%11110000->1111 + cal _shracc ;%11100000->1110 ;Note: a _shracc procedure inside Nemesis itself would be 27 cycles faster srl a ;%1110->111 dec a @@ -1423,7 +1437,6 @@ move_bullet: jr z,bullet_halfup ;3=1/2up dec a jr z,bullet_down ;4=down - bullet_halfdown: ;5=1/2down ld a,(timer) rra ;carry once every other turn @@ -1445,28 +1458,6 @@ bullet_up: ld (hl),a bullet_noymove: ld e,(hl) ;e = Y - ret - -remove_bullet: - pop hl ;cal move_bullet - pop hl ;enemy+type - ld (hl),0 ;dump this bullet! - jr next_ybullet+1 ;+1:skip pop hl at next_ybullet - -Handle_bullets: - ld hl,ybullets - ld b,nrybuls -scan_bullets: - ld a,(hl) ;@bulletType - or a ;bulletType=0 >> no bullet - jp z,next_ybullet+2 ;skip pops (+2); jP for speed - - psh bc ;bullet counter - psh hl ;save enemy+type - ld (temp1),hl ;needed for check_bullethits - inc hl ;@damage - inc hl ;@x - cal move_bullet ;move bullet display_bullet: dec hl ;@x @@ -1495,10 +1486,8 @@ display_bullet: next_ybullet: pop hl ;restore enemy+type pop bc ;b=counter - inc hl ;&&&add hl = faster - inc hl - inc hl - inc hl ;skip type,dam,x,y: next enemy+type + ld de,4 + add hl,de dnz scan_bullets ;next bullet (loop) ret @@ -1587,7 +1576,7 @@ enemy_hit: ;*in:a=damage;hl=enemy+y dec a ;enough destroyed for a pickup? psh af ;save flags and a=0 jr nz,pickupdone ;otherwise just explode - ld a,18 ;reset enemies counter (18 hits = next) + ld a,pickupfreq ;reset enemies counter pickupdone: ld (pickuptimer),a ;save new enemiescounter value inc hl ;@type @@ -1624,7 +1613,7 @@ eventtime =$-2 dec a ;has it reached 3? jr nz,place_ranenemy ;nope: >3 = place an enemy inc hl ;nextevent located behind eventleft - ld (hl),123 ;set delay + ld (hl),193 ;set delay ret ;don't place any more enemies standby_event: @@ -1746,21 +1735,21 @@ found_ebullet: bulletdouble: dec e ;one up ld c,1 ;type #1 - cal enemy_fires_again ;fire bullet + cal bulletok ;fire bullet inc hl ;next bullet position inc e - inc e ;one down - jr bulletok ;fire another bullet + inc e ;two px down + jr enemy_fires_again ;find and fire another bullet bullettriple: ld c,1 ;type #1 = normal - cal enemy_fires_again ;fire + cal bulletok ;fire inc hl ;next bullet ld c,4 ;type #4 = down 50% cal enemy_fires_again inc hl ld c,5 ;type #5 = up 50% - jr bulletok + jr enemy_fires_again bulletaiming: ld a,(y) @@ -1933,13 +1922,13 @@ enemyonscreenX: check_enemyfire: ld bc,4 ;4x inc hl add hl,bc ;@firecount - dec (hl) ;decrease counter till next blast - ld a,(hl) ;&&&doesn't seem efficient to me - or a ;has it reached zero? - jr nz,firing_done ;finished if not + ld a,(hl) ;counter till next blast + dec a ;decrease it + ld (hl),a ;save new value + jr nz,firing_done ;finished if not reached 0 yet inc hl ;@firefreq - ld a,(hl) + ld a,(hl) ;=time 'til next blast inc hl ;@firetype ld c,(hl) ;in c dec hl @@ -1990,20 +1979,21 @@ moving_enemy: dec b jr z,movetype_vslow ;2 = (.25<) dec b - jr z,movetype_slow ;3 = (.5<) + jr z,movetype_slow ;3 = (.5 <) dec b - jr z,movetype_fast ;4 = (1.5<) + jr z,movetype_lslow ;4 = (.75<) dec b - jr z,movetype_vfast ;5 = (2<) - - inc d ;speed 0 + jr z,movetype_fast ;5 = (1.5<) dec b - jr z,movetype_smart ;6 = &&& smart + jr z,movetype_vfast ;6 = (2 <) dec b - jr z,movetype_lure ;7 = (0) move y towards you + jr z,movetype_slowlure ;7 = (1<) move y towards you 50% + + inc d ;speed 0 dec b - jr z,movetype_slowlure ;8 = (0) lure 1/2 speed + jr z,movetype_lure ;8 = (0) move y towards you dec b + jr z,movetype_slowlure ;9 = (0) lure 1/2 speed dec b jr z,movetype_fulllure ;10 = x+y towards you 1/2 speed dec b @@ -2060,16 +2050,20 @@ movetype_smart: and %11111100 jr z,movetype_fast +movetype_lslow: + and %11 + ret nz + inc d ;don't move 25% of the time + ret movetype_slow: rra ret c - inc d ;don't move + inc d ;don't move 50% ret - movetype_vslow: and %11 ret z - inc d ;don't move + inc d ;don't move 75% ret movetype_fast: @@ -2219,7 +2213,7 @@ storyLine: pop bc ;last byte (<>0) is lines to SFX psh hl cal DoSFX ;do special effects - cal _getkey ;wait for a key + cal getsomekeys ;wait for a key pop hl ret @@ -2343,6 +2337,17 @@ BLACKLCD: set 3,(iy+5) ;set white on black ret +getsomekeys: + halt ;wait a li'l while and save batteries :P + halt + cal GET_KEY ;input keys + or a + jr z,getsomekeys ;wait if none + cp K_SECOND ;2nd pressed? + ret z ;then return with zf set + cp K_ENTER ;enter pressed + ret ;then return with zf set, otherwise zf reset + releasekeys: halt ld a,%10000000 ;all key-masks @@ -2354,14 +2359,14 @@ releasekeys: findenemyspecs: ;enemy #a specs in (hl); in:b=0; out:ac=? ld hl,enemyspecs ;enemy "0" specs - ld c,a + ld c,a ;b=0; bc=c=a=type + add hl,bc ;hl = enm#0 + type*1 add a,a ;a=type*2 - add a,a ;a=type*4 - add a,a ;a=type*8 - add a,c ;a=type*9 - ld c,a ;b=0; c=bc=type*8 - add hl,bc ;hl = enemy specs - ret + add a,a ;a=type*4 (max.type<64) + ld c,a ;bc=type*8 + add hl,bc ;hl = enm#0 + type*5 + add hl,bc ;hl = enm#0 + type*9 + ret ;hl = enemy specs ;--------------------------- game over / new game / death ------------------- chartable: @@ -2523,7 +2528,7 @@ restore_line: add hl,de dnz restore_line - cal _getkey ;wait for keypress + cal getsomekeys ;wait for keypress jp quit ;restore some things and return to TI-OS/shell invship: ;procedure used in New_game @@ -2569,18 +2574,12 @@ selectship: psh bc cal invship selectshiploop: - halt - cal GET_KEY - or a - jr z,selectshiploop + cal getsomekeys pop bc + jr z,startthenewgame ;enter/2nd psh bc cal invship pop bc - cp K_SECOND - jr z,startthenewgame - cp K_ENTER - jr z,startthenewgame cp K_DOWN jr nz,selnotdown inc b @@ -2598,20 +2597,24 @@ startthenewgame: ld hl,spr_ship01-(spr_ship02-spr_ship01) ld de,spr_ship02-spr_ship01 inc b ;your ship #0-3++ + ld a,b ;ship #1-4 searchyourship: add hl,de ;next ship dnz searchyourship ld (your_ship),hl + and 1 ;gives: 1,0,1,0 for the ships + inc a ;1 or 2 + ld (your_extramode),a ;sets tail beam or up double (1 or 2) xor a ;ld a,0 ld (your_score),a ;reset score ld (your_score+1),a ;reset score (0) - ld (your_tail),a ;no tail beam + ld (your_extra),a ;no extra beam ld (your_weapon),a ;no laser ld (your_pickup),a ;reset pickups ld (your_multiples),a ;no multiples inc a ;ld a,1 ld (level),a ;reset level nr (#1) - ld hl,level00 ;set level pointer to level#1 + ld hl,levelstart ;set level pointer to level#1 ld (levelp),hl ;reset level pointer ld a,4 ld (your_lives),a ;3 lives (4 will be decreased @ You_die) @@ -2645,7 +2648,7 @@ Next_level: ;stack must be +1 ld b,0 ;advance one level ld c,(hl) add hl,bc ;passed the enemies - ld c,1+7+3 + ld c,10 add hl,bc ;update to point to next level ld (levelp),hl ;save @@ -2694,9 +2697,8 @@ samelevel: ld (eventleft),a ;set nr of events left inc hl ld de,level_info - ld c,4 ;bc=4 - ldir ;4xLDI - ;loads (level_info); (level_move); (spacespace); (groundinfo) + ld c,5 ;5xLDI: loads (level_info) (spacespace) + ldir ; (groundinfo) (stars1) (stars2) ld a,1 ld b,32 ;fill (groundpos) and (ceilingpos) fillground: @@ -2715,8 +2717,8 @@ fillground: ld (timer),a ;reset time ld hl,your_occ ;hl = your_occ ld (hl),a ;reset your ship (not exploding) - inc hl ;hl = your_inv - ld (hl),25 ;set 25*4=100 frames invulnerable + inc hl ;hl = your_shield + ld (hl),25 ;set 25*4=100 frames shielded ld de,$1820 ld (x),de ;begin position (x,y) cal Place_multiples ;place all multiple-positions at that (0,24) @@ -2765,8 +2767,8 @@ game_setup: cal _vputs res 3,(iy+5) ;set white on black - cal _getkey ;wait for keypress - cp kF1 + cal getsomekeys ;wait for keypress + cp K_F1 cal z,save_lvl cal _clrLCD ;clear screen @@ -2979,23 +2981,23 @@ spr_ship01i: .db %11000010 ;██ █ spr_ship02: - .db 7,7 ;ship beta class - .db %11100000 ;███ - .db %11111000 ;█████ - .db %01111100 ; █████ - .db %01110010 ; ███ █ - .db %01111100 ; █████ - .db %11111000 ;█████ - .db %11100000 ;███ + .db 7,7 ;XC1701II ship + .db %11110000 ;████ + .db %10001100 ;█ ██ + .db %11110010 ;████ █ + .db %01011110 ; █ ████ + .db %11110010 ;████ █ + .db %10001100 ;█ ██ + .db %11110000 ;████ spr_ship02i: - .db 8,7 - .db %11100010 ;███ █ - .db %11111001 ;█████ █ - .db %01111101 ; █████ █ - .db %01110011 ; ███ ██ - .db %01111101 ; █████ █ - .db %11111001 ;█████ █ - .db %11100010 ;███ █ + .db 7,7 + .db %11110000 ;████ + .db %10011100 ;█ ███ + .db %11111110 ;███████ + .db %01011110 ; █ ████ + .db %11111110 ;███████ + .db %10011100 ;█ ███ + .db %11110000 ;████ spr_ship03: .db 7,7 ;ship gamma class @@ -3036,15 +3038,23 @@ spr_ship04i: .db %11000010 ; ██ █ spr_ship05: - .db 8,8 ;XC1701II ship - .db %11110000 ;████ - .db %10001100 ;█ ██ - .db %11110010 ;████ █ - .db %01011101 ; █ ███ █ - .db %01011101 ; █ ███ █ - .db %11110010 ;████ █ - .db %10001100 ;█ ██ - .db %11110000 ;████ + .db 7,7 ;ship beta class + .db %11100000 ;███ + .db %11111000 ;█████ + .db %01111100 ; █████ + .db %01110010 ; ███ █ + .db %01111100 ; █████ + .db %11111000 ;█████ + .db %11100000 ;███ +spr_ship05i: + .db 8,7 + .db %11100010 ;███ █ + .db %11111001 ;█████ █ + .db %01111101 ; █████ █ + .db %01110011 ; ███ ██ + .db %01111101 ; █████ █ + .db %11111001 ;█████ █ + .db %11100010 ;███ █ auch_bullet = 1 ;damage to you when hit by an enemy bullet auch_ground = 5 ;the same when you hit the ground/ceiling @@ -3275,23 +3285,34 @@ spr_bullete1: ;format:[min.damage] [dam.inc] [000:direction 00000:speed] [offset] ;damage = min.damage + dam.inc*incs (0<=incs<=6) ;speed in pixels/frame (>=%10010=forward; <=%01110=backwards) -;direction: 0=straight forward; 1=up; 2=1/2up; 3=down; 4=1/2down +;direction: 001=straight forward; 010=up; 011=1/2up; 100=down; 101=1/2down +; 111=laser (speed=duration 00010-00000) -maxnrweapons = 8+1 weapondata: - .db 1,1,%00000000,0,%00000000,0,%00010010,3 ;1 single fire - .db 4,1,%00000000,0,%00000000,0,%00010011,3 ;2 fast single - .db 1,1,%00000000,0,%00010010,0,%00010010,6 ;3 double - .db 1,1,%01110010,2,%10010010,2,%00110010,2 ;4 triple - .db 3,2,%01110011,2,%10010011,2,%00110011,2 ;5 - .db 5,3,%01110011,2,%10010100,2,%00110011,2 ;6 - .db 7,4,%01110100,2,%10010100,2,%00110100,2 ;7 - .db 12,5,%01110110,2,%10010110,2,%00110110,2 ;8 -maxweapon = 8 - .db 1,1,%11100100,3,%00000000,0,%00000000,0 ;1 single laser - .db 1,1,%11111111,0,%11100000,6,%00000000,0 ;2 double laser - .db 10,1,%11100001,0,%11100000,6,%11100000,3 ;3 triple laser -maxlaser = 11 + .db 1,1,%00110010,3,%00000000,0,%00000000,0 ;1 single beam + .db 3,1,%00110011,3,%00000000,0,%00000000,0 ;2 fast single + .db 1,1,%00110010,0,%00110010,6,%00000000,0 ;3 double + .db 1,1,%01110010,2,%10010010,2,%00110010,2 ;4 triple + .db 3,2,%01110011,2,%10010011,2,%00110011,2 ;5 + .db 6,2,%01110011,2,%10010100,2,%00110011,2 ;6 + .db 8,3,%01110100,2,%10010100,2,%00110100,2 ;7 + .db 12,3,%01110110,2,%10010110,2,%00110110,2 ;8 + .db 16,4,%01110110,2,%10010110,2,%00110110,2 ;9 +maxweapon = 9 + .db 1,1,%11100100,3,%00000000,0,%00000000,0 ;1 single laser + .db 2,3,%11100011,3,%00000000,0,%00000000,0 ;2 short + .db 1,2,%11100100,3,%11100000,4,%00000000,0 ;3 fat + .db 1,2,%11100101,0,%11100000,6,%00000000,0 ;4 double + .db 3,4,%11100011,3,%00000000,0,%00000000,0 ;5 short + .db 1,2,%11100100,3,%11100000,6,%11100000,0 ;6 triple + .db 1,3,%11101010,3,%11100000,6,%11100000,0 ;7 triple long + .db 2,4,%11100101,2,%11100000,4,%00000000,0 ;8 double + .db 2,1,%11101011,3,%11100000,2,%11100000,4 ;9 big fat long +maxlaser = 18 +tailbeam = %00101101 ;180 degrees +doublebeam = %01010010 ;45 degrees +extrabulletpos: + .db 3 ;tail/double yposition ;------------------------------------ bar ----------------------------------- @@ -3337,28 +3358,28 @@ spr_icon00: .db %01010101 .db %10101010 spr_icon01: - .db 16,7 ;torpedo .......:.......: - .db %10000001 ;█ ███ ██ █▒ - .db %10000000 ;█ ███ ██ ▒ - .db %11000000 ;██ ███ ██▒ - .db %10110001 ;█ ██ ███ █ █▒ - .db %11001100 ;██ ██ ██ ▒ - .db %10110011 ;█ ██ ██ ████ ▒ - .db %11001100 ;██ ██ ██ ██ ▒ + .db 16,7 ;shield .......:.......: + .db %10001111 ;█ ███████ █ ▒ + .db %10011001 ;█ ██ █████ █ ▒ + .db %10111100 ;█ ████ ████ █ ▒ + .db %10111000 ;█ ███ █ ██ █ ▒ + .db %10111100 ;█ ████ ████ █ ▒ + .db %10011001 ;█ ██ █████ █ ▒ + .db %10001111 ;█ ███████ █ ▒ .db 7 - .db %11001101 - .db %11100110 - .db %11100011 - .db %11000101 - .db %00001100 - .db %00011110 - .db %11000110 -spr_icon02: + .db %11100100 + .db %11110010 + .db %01111010 + .db %10011010 + .db %01111010 + .db %11110010 + .db %11100100 +spr_icon02a: .db 16,7 ;tailbeam.......:.......: .db %10000000 ;█ ▒ .db %10000011 ;█ ██ ▒ .db %10000001 ;█ ███ ▒ - .db %10111011 ;█ ███ ██████ ██▒ + .db %10111011 ;█ ███ ███ ██ ██▒ .db %10000001 ;█ ███ ▒ .db %10000011 ;█ ██ ▒ .db %10000000 ;█ ▒ @@ -3366,8 +3387,23 @@ spr_icon02: .db %00000000 .db %00000000 .db %11000000 - .db %11110011 + .db %10110011 .db %11000000 +spr_icon02b: + .db 16,7 ;updouble.......:.......: + .db %10000000 ;█ ██ ▒ + .db %10000000 ;█ ██ ▒ + .db %10110000 ;█ ██ ██ ▒ + .db %10011100 ;█ ███ ▒ + .db %10111011 ;█ ███ ██ ████ ▒ + .db %10011100 ;█ ███ ▒ + .db %10110000 ;█ ██ ▒ + .db 5 + .db %00011000 + .db %00110000 + .db %01100000 + .db %00000000 + .db %00011110 spr_icon03: .db 11,7 ;bullets .......:.......: .db %10000000 ;█ ██ ▒ @@ -3424,7 +3460,7 @@ spr_dividerline: txt_email: .db "www.shiar.org ",127 ;title screen .db " shiar0@hotmail.com",0 _txt_email = $3A01 ;$3A1E=just email -txt_about: .db "v0.99.812 ",127," by Shiar",0 ;right behind txt_email +txt_about: .db "v0.99.820 ",127," by Shiar",0 ;right behind txt_email _txt_about = $3321 txt_menu1: .db "NEW GAME",0 txt_menu2: .db "CONTINUE",0 @@ -3453,19 +3489,20 @@ hiname .db "shiar.99",0 ; " " name storehi_end: storesave_start: ;--SAVED GAME-- defs: -level .db 1 ;level number 1 -levelp .dw level01 ;pointer to level data l01 +level .db 10 ;level number 1 +levelp .dw level09 ;pointer to level data lev00 pickuptimer .db 4 ;counts when to place a pickup 4 your_ship .dw spr_ship01 ;your sprite sprs1 +your_extramode .db 1 ;you have tail or double 1 your_score .dw 0 ;current score 0 -your_pickup .db 4 ;pickups already picked up 0 +your_pickup .db 3 ;pickups already picked up 0 your_occ .db 0 ;0=normal 1..16=exploding 0 -your_inv .db 0 ;invincibility left 0 -your_armor .db 22 ;HP left 12 +your_shield .db 0 ;invincibility left 0 +your_armor .db 12 ;HP left 12 your_lives .db 3 ;lives left 3 -your_weapon .db 8 ;current weapon upgrade 0 +your_weapon .db 3 ;current weapon upgrade 0 your_multiples .db 0 ;multiples present 0 -your_tail .db 0 ;tail beam present 0 +your_extra .db 0 ;extra beam present 0 storesave_end: time2invert: .db 0 ;time until b<>w switch (0 at startup) @@ -3474,33 +3511,35 @@ time2invert: .db 0 ;time until b<>w switch (0 at startup) ;format:boss: [moveType] [enemyType] ; @level: [nr.dif.enemies]x [enemy nr] -; [min. enemy frequency] [enemy frequency max.inc] [next lvl] -; [level_info: 0000:damage 0:diagfire 0:ground 0:ceiling 0:?] -; [level_move] [tunnel size] [groundtype] [stars1] [stars2] +; [min. enemy frequency] [enemy frequency max.inc] +; [next lvl (=nrenemies+4)] [level_info: 1:ceiling 1:ground] +; [tunnel size] [groundtype] [stars1] [stars2] ;efrequency must be odd if halfluring! .db 0 ;storyline ID -level00: ;[y-pos] [x-pos] [text,0] [SFX lines; 0=more text] [-1=end] +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 20 ;boss for level01 -level01: ;intro-like, just a few enemies to begin with - .db 2,6,8 - .db 26,70,20,%00010000,0,0,0 - .db 1,1 + .db 9 +level00:.db 5,2,4,2,1,1 + .db 28,73,13 + .db %00,0,0,1,1 + + .db 30 ;boss for level01 +level01:.db 2,2,4 ;enemies + .db 26,70,20 + .db %00,0,0,1,1 - .db 21 -level02: ;first wave of enemies; easeey - .db 3,6,7,8 - .db 20,60,60,%00100000,0,0,0 - .db 1,1 + .db 31 +level02:.db 3,2,3,4 + .db 20,60,60 + .db %00,0,0,1,1 - .db 22 -level03: ;some more enemies - .db 4,7,8,9,10 - .db 17,40,75,%00110000,0,0,0 - .db 1,1 + .db 32 +level03:.db 4,3,4,5,6 + .db 17,40,75 + .db %00,0,0,1,1 .db 0 .db 1,1,"Long-Range scanners are ", @@ -3512,182 +3551,133 @@ level03: ;some more enemies .db 31,1,"asteroid belt and try to",0,0 .db 38,1,"lose them inthere.",0,38-24+6,-1 - .db 23 -level04: ;approaching asteroid belt - .db 7,11,11,12,12,13,1,2 - .db 12,24,80,%00111000 - .db 2,0,0,1,1 +;---- approaching asteroid belt + .db 33 +level04:.db 5,7,7,8,10,11 + .db 17,27,70 + .db %00,0,0,1,1 - .db 24 -level05: ;light asteroid belt - .db 5,11,12,1,2,4 - .db 12,24,80,%00111000 - .db 2,0,0,1,1 +;---- light asteroid belt + .db 34 +level05:.db 7,9,10,8,10,11,11,13 + .db 12,24,80 + .db %00,0,0,1,1 - .db 25 -level06: ;inside asteroid belt - .db 6,13,1,2,3,4,5 - .db 7,18,180,%01011000 - .db 2,0,0,1,1 +;---- inside asteroid belt + .db 35 +level06:.db 10,9,10,11,11,13,12,12,13,14,14 + .db 7,18,180 + .db %00,0,0,1,1 - .db 0,1,1,"That's it for now...",0,5,-1 + .db 36 +level07:.db 4,15,16,17,5 + .db 22,29,62 + .db %00,0,0,1,1 ;-1=%11111111=line -endlevel = 6 + .db 37 +level08:.db 5,15,16,17,18,18 + .db 20,38,57 + .db %00,0,0,1,1 - .db 0 - .db 1,1,"And the storyline conti", - .db "nues.....",0,5 - .db 9,1,"You decide to fly close", - .db " to the",0,0 - .db 15,1,"surface of a nearby pl", - .db "anet =)",0,15-9+6,-1 + .db 38 +level09:.db 3,18,19,20 + .db 19,63,57 + .db %00,0,0,1,1 - .db 26 -level03b: - .db 1,2 - .db $13,40,$4b,%00100100,0,-5,1 - .db 1,1 + .db 0,1,1,"That`s all folks...",0,0 + .db 20,50,"for now...",0,20-0+6,-1 - .db 0 +endlevel = 10 - .db 0 - .db $01,01,"Blablabla...",0,1 - .db $01,34,"this storyline sux",0,0,1,39 - .db $FF - - .db 27 -level03a: - .db 1,$03 - .db $2d,$3f,%00110110,0,-9,1 - .db -1,-1 ;=%11111111=line - - .db $07,$08 -level04b: - .db 1,$04 - .db $11,$41,%00100001,0,0,0 - .db 1,1 - .db $07,$09 -level05a: - .db 1,$05 - .db $11,$45,%00100101,%10,-7,1 - .db 1,1 - .db $07,$08 -level06c: - .db 1,$06 - .db $19,$3a,%00100111,0,-4,1 - .db 1,1 - - .db $07,$09 -level07: - .db 1,$07 - .db $09,$ff,%00100001,0,0,0 - .db 1,1 +pickupfreq = 18 ;------------------------------ enemies ------------------------------------- ;format: [HP64] [000000:HP 00:occ] [sprite] [xpos] [appearance(ypos)] ; [movetype] [time2fire] [firefreq] [firetype] ;appearances: 1=random; 2=lure; 3=halflure -;movetypes: 1=updown; 2=1/4x; 3=1/2x; 4=1.5x; 5=2x; 6=smart; 7=y-lure; -; 8=y-lure 1/2x; 9=x; 10=x+y-lure 1/2x +;movetypes: 1=updown; 2=1/4x; 3=1/2x; 4=3/4x; 5=3/2x; 6=2x; 7=ylure50%; +; 7=ylure; 8=ylure50%; 9=x; 10=x+y-lure 50%; 11=-1/2x; 12=-1x ;firetypes: 1=normal; 6=aiming; 7=triple; 8=double -enemyspecs: - .db 0,%00000110,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;pickup -;1-5=asteroids , , , , , , - .db 0,%00100110,(spr_enemyA1-spr_enemy00)/2,128,1,00, 0, 0,1 - .db 0,%00111110,(spr_enemyA2-spr_enemy00)/2,128,1,00, 0, 0,1 - .db 0,%01011010,(spr_enemyA3-spr_enemy00)/2,128,1,04, 0, 0,1 - .db 1,%00001010,(spr_enemyA4-spr_enemy00)/2,128,1,03, 0, 0,1 ;slow+hard - .db 0,%00111110,(spr_enemyA4-spr_enemy00)/2,128,1,05, 0, 0,1 -;6-10=basic enemies , , , , , , +enemyspecs: ;sprites use 418/512 bytes + .db 0,%00000111,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;pickup +;1-6=basic enemies , , , , , , , + .db 0,%00000110,(spr_enemyE0-spr_enemy00)/2,128,1,00,12, 0,1 ;intro .db 0,%00010010,(spr_enemyE1-spr_enemy00)/2,128,1,00,10, 0,1 ;weak .db 0,%00110010,(spr_enemyE4-spr_enemy00)/2,128,1,03, 6,50,1 ;slow .db 0,%00100110,(spr_enemyE2-spr_enemy00)/2,128,1,00, 1, 0,1 .db 0,%00101110,(spr_enemyE3-spr_enemy00)/2,128,3,00,19,39,8 ;heavy - .db 0,%00101010,(spr_enemyE5-spr_enemy00)/2,128,3,04, 1, 0,1 ;fast -;11-13=backwards enemies , , , , , + .db 0,%00101010,(spr_enemyE5-spr_enemy00)/2,128,3,05, 1, 0,1 ;fast +;7-9=backwards enemies , , , , , , , .db 0,%00011110,(spr_enemyB1-spr_enemy00)/2,000,3,11,19,92,1 .db 0,%00101110,(spr_enemyB2-spr_enemy00)/2,000,1,12,11,45,1 .db 0,%00110110,(spr_enemyB3-spr_enemy00)/2,000,1,11,10,41,8 ;small -;14=improved enemies , , , , , , - .db 0,%01001010,(spr_enemyG1-spr_enemy00)/2,128,3,00, 1,35,1 - - .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,0,00, 0, 0,1 ;15 - .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,0,00, 0, 0,1 ;16 - .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,0,00, 0, 0,1 ;17 - .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,0,00, 0, 0,1 ;18 - .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,0,00, 0, 0,1 ;19 -;20-23=first bosses , , , , , , - .db 1,%00101011,(spr_boss2 -spr_enemy00)/2,127,1,08,20,12,1 ;small - .db 1,%00110011,(spr_boss1 -spr_enemy00)/2,127,1,08,15,11,8 ;normal +;10-14=asteroid , , , , , , , + .db 0,%00100110,(spr_enemyA1-spr_enemy00)/2,128,1,04, 0, 0,1 + .db 0,%00111110,(spr_enemyA2-spr_enemy00)/2,128,1,00, 0, 0,1 + .db 0,%01011010,(spr_enemyA3-spr_enemy00)/2,128,1,05, 0, 0,1 + .db 1,%00001010,(spr_enemyA4-spr_enemy00)/2,128,1,03, 0, 0,1 ;slow+hard + .db 0,%00111110,(spr_enemyA4-spr_enemy00)/2,128,1,06, 0, 0,1 +;15-20=improved enemies, , , , , , , + .db 0,%01001010,(spr_enemyG1-spr_enemy00)/2,128,3,00, 3,40,1 + .db 0,%01011110,(spr_enemyG2-spr_enemy00)/2,128,3,00, 1,36,1 + .db 0,%00110010,(spr_enemyG5-spr_enemy00)/2,128,1,01, 9,52,1 ;updown + .db 0,%01111010,(spr_enemyG3-spr_enemy00)/2,128,3,04, 7,99,7 ;3x + .db 0,%10110110,(spr_enemyG4-spr_enemy00)/2,128,2,01,17, 0,7 ;updown3x + .db 0,%10001011,(spr_enemyG6-spr_enemy00)/2,128,2,07,62,60,8 ;lure +;21-29=unused, , , , , , , , + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;21 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;22 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;23 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;24 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;25 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;26 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;27 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;28 + .db 0,%00000011,(spr_enemy00-spr_enemy00)/2,128,2,03, 0, 0,1 ;29 +;30-33=first bosses , , , , , , , + .db 1,%00101011,(spr_boss2 -spr_enemy00)/2,127,1,09,20,12,1 ;small + .db 1,%00110011,(spr_boss1 -spr_enemy00)/2,127,1,09,15,11,8 ;normal .db 1,%01001011,(spr_boss1 -spr_enemy00)/2,127,3,10,10,11,1 ;moving .db 0,%11111111,(spr_boss3 -spr_enemy00)/2,127,2,10, 1, 4,1 ;weak+rapidfire -;24-25=asteroid bosses , , , , , , +;34-35=asteroid bosses , , , , , , , .db 2,%00001011,(spr_bossA1 -spr_enemy00)/2,127,1,10,36,14,6 .db 2,%00110011,(spr_bossA1 -spr_enemy00)/2,127,2,10,28,12,6 -;26-27=big bosses , , , , , , - .db 2,%00000111,(spr_bossB1 -spr_enemy00)/2,127,3,07,18, 7,7 - .db 2,%01001011,(spr_bossB2 -spr_enemy00)/2,127,3,07,18, 7,7 +;36-38=big bosses , , , , , , , + .db 2,%00000011,(spr_bossB1 -spr_enemy00)/2,127,3,08,31, 8,7 + .db 2,%00100111,(spr_bossB2 -spr_enemy00)/2,127,3,08,13, 7,7 + .db 2,%00100111,(spr_bossB2 -spr_enemy00)/2,127,3,08,13, 7,7 spr_enemy00: - .db 16,8 ;pickup - .db %11111111 ; ████████████ - .db %10000110 ; █ ██ █ - .db %10000110 ; █ ██ █ - .db %10111111 ; █ ████████ █ - .db %10111111 ; █ ████████ █ - .db %10000110 ; █ ██ █ - .db %10000110 ; █ ██ █ - .db %11111111 ; ████████████ - .db 8 - .db %11110000 - .db %00010000 - .db %00010000 - .db %11010000 - .db %11010000 - .db %00010000 - .db %00010000 - .db %11110000 - .db 0 + .db 10,8 ;pickup + .db %00111111 ; ██████ + .db %01100001 ; ██ ██ + .db %10001100 ;█ ██ █ + .db %10111111 ;█ ██████ █ + .db %10111111 ;█ ██████ █ + .db %10001100 ;█ ██ █ + .db %01100001 ; ██ ██ + .db %00111111 ; ██████ + .db 7 + .db %00000000 + .db %10000000 + .db %01000000 + .db %01000000 + .db %01000000 + .db %01000000 + .db %10000000 -spr_enemyA1: - .db 7,6 ;asteroid one - .db %00011000 ; ██ - .db %01101100 ; ██ ██ - .db %10011110 ;█ ████ - .db %11111010 ;█████ █ - .db %10111100 ;█ ████ - .db %01110000 ; ███ -spr_enemyA2: - .db 8,7 ;asteroid two - .db %00111100 ; ████ - .db %01011010 ; █ ██ █ - .db %01101101 ; ██ ██ █ - .db %11111101 ;██████ █ - .db %11111111 ;████████ - .db %10110110 ;█ ██ ██ - .db %01100000 ; ██ +spr_enemyE0: + .db 6,7 ;weak + .db %00011100 ; ███ + .db %00100100 ; █ █ + .db %01101000 ; ██ █ + .db %10110100 ;█ ██ █ + .db %01101000 ; ██ █ + .db %00100100 ; █ █ + .db %00011100 ; ███ .db 0 -spr_enemyA3: - .db 8,8 ;asteroid three - .db %00011110 ; ████ - .db %01110011 ; ███ ██ - .db %01111101 ; █████ █ - .db %10110111 ;█ ██ ███ - .db %11111110 ;███████ - .db %11111101 ;██████ █ - .db %01010111 ; █ █ ███ - .db %00001110 ; ███ -spr_enemyA4: - .db 7,6 ;asteroid four - .db %01111000 ; ████ - .db %10110110 ;█ ██ ██ - .db %11111101 ;██████ █ - .db %01111011 ; ████ ██ - .db %01001110 ; █ ███ - .db %00110000 ; ██ - spr_enemyE1: .db 6,7 ;weak .db %00111100 ; ████ @@ -3709,10 +3699,10 @@ spr_enemyE2: spr_enemyE3: .db 6,6 ;normal solid (Galaxian enemy) .db %00111100 ; ████ - .db %01110000 ; ███ - .db %11110000 ;████ - .db %11110000 ;████ - .db %01110000 ; ███ + .db %01010000 ; █ █ + .db %11010000 ;██ █ + .db %11010000 ;██ █ + .db %01010000 ; █ █ .db %00111100 ; ████ spr_enemyE4: .db 6,7 @@ -3726,12 +3716,12 @@ spr_enemyE4: .db 0 spr_enemyE5: .db 6,6 ;speedy - .db %00011100 ; ███ + .db %00010100 ; █ █ .db %01111000 ; ████ - .db %11100000 ;███ - .db %11100000 ;███ + .db %10100000 ;█ █ + .db %10100000 ;█ █ .db %01111000 ; ████ - .db %00011100 ; ███ + .db %00010100 ; █ █ spr_enemyB1: .db 6,6 ;solid backwards @@ -3762,54 +3752,91 @@ spr_enemyB3: .db %11100000 ;███ .db 0 +spr_enemyA1: + .db 7,6 ;asteroid one + .db %00011000 ; ██ + .db %01101100 ; ██ ██ + .db %10011110 ;█ ████ + .db %11111010 ;█████ █ + .db %10111100 ;█ ████ + .db %01110000 ; ███ +spr_enemyA2: + .db 8,7 ;asteroid two + .db %00111100 ; ████ + .db %01011010 ; █ ██ █ + .db %01101101 ; ██ ██ █ + .db %11111101 ;██████ █ + .db %11111111 ;████████ + .db %10110110 ;█ ██ ██ + .db %01100000 ; ██ + .db 0 +spr_enemyA3: + .db 8,8 ;asteroid three + .db %00011110 ; ████ + .db %01110011 ; ███ ██ + .db %01111101 ; █████ █ + .db %10110111 ;█ ██ ███ + .db %11111110 ;███████ + .db %11111101 ;██████ █ + .db %01010111 ; █ █ ███ + .db %00001110 ; ███ +spr_enemyA4: + .db 7,6 ;asteroid four + .db %01111000 ; ████ + .db %10110110 ;█ ██ ██ + .db %11111101 ;██████ █ + .db %01111011 ; ████ ██ + .db %01001110 ; █ ███ + .db %00110000 ; ██ + spr_enemyG1: .db 8,6 ;G-Type - .db %00111111 ; █████ + .db %00011111 ; █████ .db %01001000 ; █ █ .db %10110100 ;█ ██ █ .db %10110100 ;█ ██ █ .db %01001000 ; █ █ - .db %00111111 ; █████ + .db %00011111 ; █████ spr_enemyG2: .db 8,6 ;smaller nacelles - .db %00000111 ; ███ + .db %00010111 ; █ ███ .db %01101100 ; ██ ██ .db %10110100 ;█ ██ █ .db %10110100 ;█ ██ █ .db %01101100 ; ██ ██ - .db %00000111 ; ███ + .db %00010111 ; █ ███ spr_enemyG3: .db 8,6 ;shuttle .db %00001111 ; ████ - .db %01111100 ; █████ + .db %01110100 ; ███ █ .db %10011100 ;█ ███ .db %10011100 ;█ ███ - .db %01111100 ; █████ + .db %01110100 ; ███ █ .db %00001111 ; ████ spr_enemyG4: .db 8,6 ;G-Type solid - .db %00111111 ; █████ + .db %00111101 ; ███ █ .db %01111000 ; ████ - .db %11111100 ;██████ - .db %11111100 ;██████ + .db %11110100 ;████ █ + .db %11110100 ;████ █ .db %01111000 ; ████ - .db %00111111 ; █████ + .db %00111101 ; ███ █ spr_enemyG5: .db 6,6 .db %01111100 ; █████ .db %10110000 ;█ ██ - .db %10111000 ;█ ███ - .db %10111000 ;█ ███ + .db %10101000 ;█ █ █ + .db %10101000 ;█ █ █ .db %10110000 ;█ ██ .db %01111100 ; █████ spr_enemyG6: - .db 7,6 ;small G-type solid - .db %00011110 ; ████ - .db %01111000 ; ████ - .db %11110000 ;████ - .db %11110000 ;████ - .db %01111000 ; ████ - .db %00011110 ; ████ + .db 8,5 ;shuttle + .db %00001111 ; ████ + .db %01110100 ; ███ █ + .db %10011010 ;█ ██ █ + .db %01110100 ; ███ █ + .db %00001111 ; ████ + .db 0 spr_enemyS1: .db 6,6 ;solid @@ -4174,7 +4201,7 @@ logo_nemesis: ; # after pause weapon will not be fired ; # teacher key fixed (waits for GRAPH to be release before&after) ; -; 0.99.815 -- 15.VIII.00 -- size 6399 +; 0.99.820 -- 20.VIII.00 -- size 6500 ; ; + you can have upto FOUR multiples! (~20 pixels apart) ; * some optimizations: keycall, menu handling, port nops removed, @@ -4197,6 +4224,16 @@ logo_nemesis: ; # slow enemies (including pickups) didn't always appear (just 25-50%) ; + enemies can fire different kinds of bullets: aiming, double, triple ; * maximum number of bullets increased (48 for enemies, 128 for you) +; * beamweapon can be selected when you got laser (like vice versa) +; * selecting laser removes tailbeam or up-double +; # tail beam/up-double correctly centered +; # disappearing bullets (when enemies fired multiple bullets) fixed +; + bullets and lasers both upgradable upto level 9 +; # fixed end story (_vputs didn't recognize 0-end when "'" in string) +; # stars couldn't be altered anymore since recent levelformat changes +; * maximum different enemies increased from 28 to 63 +; * pickup sprite altered, small changes to some enemies +; + new moves implemented: 75% speed and lure-while-moving ; ; + added - removed * changed # bug fixed -- 2.30.0