;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 -----------------------------------
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
_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]
.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 ; ███
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
pop hl
ret
-getsomekeys:
- halt
- halt
- cal GET_KEY
- cp K_SECOND
- ret z
- cp K_ENTER
- ret
-
;----------------------------------------------------------------------------
;---------------------- game loop -------------------------------------------
;----------------------------------------------------------------------------
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
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
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)
;----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
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
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?
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
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:
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)
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)
;------------------------ 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
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
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
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
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
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
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:
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)
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
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
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:
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
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
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:
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
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
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)
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
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:
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)
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
.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
.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
;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 -----------------------------------
.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 ;█ ▒
.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 ;█ ██ ▒
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
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)
;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 ",
.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 ; ████
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
.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
.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
; # 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,
; # 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