;----------------------------------------------------------------------------
; Title : Nemesis
-; Version : 0.96
-; Release Date : 30.X.99
-; Filename : nemesis.86p (5kb)
+; Version : 0.97
+; Release Date : 25.VI.00
+; Filename : nemesis.86p (6kb)
; Author(s) : Shiar
; Email Address : shiar0@hotmail.com
; ICQ ; #43840958
;---------------------- in-game vars ----------------------------------------
-just_fired = storepos+2 ; +2 ;counts how long a blast lasts
-menuitem = storepos+2 ; +2 ;used to store menu location
-hiscorepos = storepos+2 ; +2
-timer = storepos+4 ; +4 ;frame counter
- ;--------YOU
-x = storepos+5 ; +5 ;your ship's position
-y = x+1 ; +6 ;your y-pos
-firex = y+1 ; +7 ;(1 byte)
-firey = firex+1 ; +8 ;(1 byte)
- ; **
- ;--------LEVEL
-eventtime = storepos+10 ;+10 ;enemy frequency
-eventleft = eventtime+1 ;+11 ;nr. of enemies still to come
-nextevent = eventleft+1 ;+12 ;time to next event
-level_enemy = nextevent+1 ;+13 ;enemy type
-level_info = level_enemy+1 ;+14 ;info (see below)
-level_move = level_info+1 ;+15 ;=
-level_fire = level_move+1 ;+16
- ; **
- ;--------OBJECTS
+just_fired = storepos ; +0 ;counts how long a blast lasts
+menuitem = storepos ; +0 ;used to store menu location
+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
+nextevent = eventleft+1 ; +6 ;time to next event
+level_enemy = nextevent+1 ; +7 ;enemy type
+level_info = level_enemy+1 ; +8 ;info (see below)
+level_move = level_info+1 ; +9 ;=
+level_fire = level_move+1 ;+10
+ ; ;--------OBJECTS
spacespace = storepos+19 ;+19
groundinfo = spacespace+1 ;+20
groundpos = groundinfo+1 ;+21 $10
ceilingpos = groundpos+16 ;+37 $10
- ; ^^ ;--------STARS
+ ; ;--------STARS
stars1 = ceilingpos+16 ;+53
stars2 = stars1+1 ;+54
nrstars1 = 7
starx1 = storepos+55 ;+55
nrstars2 = 7
starx2 = starx1+(nrstars1*2) ;+69
- ; ^^ ;--------MULTIPLES
+ ; ;--------MULTIPLES
mx = starx2+(nrstars2*2) ;+83 ;position of multiple#1
my = mx+1 ;+84 ;multiple y-pos
m2x = my+1 ;+85
nrenemies = 16 ;max. nr of enemies
ybullets = enemies+(nrenemies*enemysize) ;60 bytes = 20(state,damg,x,y)
-nrybuls = 32 ; +80\
+nrybuls = 64 ; +80\
ebullets = ybullets+(nrybuls*4) ;+110 ;30 bytes = 10(state,x,y)
nrebuls = 16
-
-ybuls = ebullets+(nrebuls*3) ;+140
-maxbullets = 32
+lvlenemies = ebullets+(nrebuls*3)
;^-----------------------------------<2 ;-141=$8D
;level_info:
.dw Title ;pointer to description (all shells)
.dw Icon ;pointer to YAS icon
-Title: .db "Nemesis v0.96 by Shiar",0
+Title: .db "Nemesis v0.97 by SHIAR",0
Icon: .db 8,1 ;icon for YAS: width = 1byte; height = 9bytes
.db %11100000 ; ███
ld bc,896 ;loop 896 times = (128/8) * (64-8 for scorebar)
ldir ;all clear!
- ld a,(timer)
- and %11
+ ld a,0 ;current frame/turn 0-255
+timer =$-1
+ and %11 ;a=0 once every 4 turns
jr z,movestarsdone ;don't move stars once every 4 frames
cal movestars1 ;move the stars on the FRONT layer
cal movestars2 ;move the distant stars
ld a,(groundinfo) ;what kind of ground
dec a ;type 1:
jr z,ground_tunnel ;tunnel effect
- jr ground_boring
+ground_boring:
+ ld a,(groundpos) ;type 0
ground_tunnel:
ld a,(groundpos+14)
- ld (groundpos+15),a
+ ld d,a
ld hl,spacespace
ld bc,$201 ;range=1..3
cal Random ;a=1-3
dec a
- jr z,ground_previous ;same if a=1
+ jr z,newground ;same if a=1
dec a
jr z,gtunneldown ;down if a=2
gtunnelup: ;up if a=3
ld a,(hl)
or a
- jr z,ground_previous ;a>=0 (a=0 actually)
+ jr z,newground ;a>=0 (a=0 actually)
inc (hl)
- ld a,(groundpos+15)
- inc a
+ inc d
jr newground
gtunneldown:
- ld a,(groundpos+15)
- dec a
- jr z,ground_previous
+ ld a,1
+ cp d
+ jr z,newground
+ dec d
dec (hl)
- jr newground
-
-ground_previous:
- ld a,(groundpos+14) ;type 1
- jr newground
-ground_boring:
- ld a,(groundpos) ;type 0
newground:
+ ld a,d
ld (groundpos+15),a ;save new byte on the right
- ld a,(hl)
- cp -25
- jr nc,Display_ground
- ld a,b ;&&&random
- and %1
- ld b,0
- jr nz,gtunnelup
Display_ground:
ld b,16 ;screen width
ld bc,15 ;scroll all 15 bytes (16th is new position)
ld hl,ceilingpos+1 ;from..
ld de,ceilingpos ;to (one byte to the left)
- ld a,(de) ;load byte on left (will be lost after scroll)
ldir ;LoaDIncreaseRepeat = scroll!
ld a,(groundinfo) ;what kind of ceiling
dec a ;type 1:
jr z,ceiling_tunnel ;tunnel effect
- jr ceiling_boring
+ceiling_boring:
ceiling_tunnel:
ld a,(ceilingpos+14)
- ld (ceilingpos+15),a
+ ld d,a ;d=new ceiling
ld hl,spacespace
ld bc,$201 ;range=1..3
cal Random ;a=1-3
dec a
- jr z,ceiling_previous ;1:same
+ jr z,newceiling ;1:same
dec a
jr z,ctunnelup ;2:up
ctunneldown: ;3:down
ld a,(hl)
- or a
- jr z,ceiling_previous
+ or a ;(spacespace)=0:
+ jr z,newceiling+2 ;keep same ceiling
inc (hl)
- ld a,(ceilingpos+15)
- inc a
+ inc d
jr newceiling
ctunnelup:
- ld a,(ceilingpos+15)
- dec a
- jr z,ceiling_previous
+ ld a,1
+ cp d ;if size=1 then don't
+ jr z,newceiling
+ dec d
dec (hl)
- jr newceiling
-
-ceiling_previous:
- ld a,(ceilingpos+14) ;type 1
- jr newceiling
-ceiling_boring:
- ld a,(ceilingpos) ;type 0
newceiling:
+ ld a,d
ld (ceilingpos+15),a ;save the new byte
- ld a,(hl)
- cp -25
- jr nc,Display_ceiling
- ld a,b
- and %1
- ld b,0
- jr nz,ctunneldown
Display_ceiling:
ld b,16 ;screen width
inc hl ;and
ld c,(hl) ;old y-pos
ld (mx),bc ;save multiple position in (mx)
- ld (hl),e ;save current pos. for 16 turns into the future
+ ld (hl),d ;save current pos. for 16 turns into the future
dec hl ;yes...
- ld (hl),d ;...both
+ ld (hl),e ;...both
mult_adv:
ld de,(mx)
+ ld a,d
+ ld d,e
+ ld e,a ;ex d,e
ld ix,spr_multiple ;sprite of the multiple
jp putsprite ;display it + <ret>
sub b ;decrease hp by B
jp m,no_armor ;<0hp left so explode
ld (hl),a ;no, so save decreased hp
- cal disp_armor ;and display new value
-
- ld a,(your_pickup) ;how many pickups do you have?
- dec a ;is the armor-icon selected
- ret nz ;return if not
-
- psh de \ psh ix ;&&& just2Bsave
- ld hl,VIDEO_MEM+(16*56)
- ld (PutWhere),hl
- ld ix,spr_icon ;if so, highlight armorIcon again
- ld de,$1901 ;position
- cal putwidesprite ;display icon
- ld hl,GRAPH_MEM
- ld (PutWhere),hl
- pop ix \ pop de
- ret ;and return
+ jp disp_armor ;and display new value
no_armor:
ld a,%01 ;occ %xxxxxx01 = explode
ld (your_occ),a ;too bad, you're dead meat
fireOK:
ld hl,(x) ;yes: first fire from ship position (x)
- ld (firex),hl ;set firepos
ld a,(your_multiples) ;any multiples?
and %11 ;nope?
jr z,fireany ;then just fire somethin'
cal fireany ;and blast
- ld hl,(my) ;then, fire from multiple position (mx)
- ld a,(mx) ;<ex h,l>
- ld h,a ; ^^^^^^
- ld (firex),hl ;set firepos
+ ld hl,(mx) ;then, fire from multiple position (mx)
+ dec h ;one up (-2 height: keeps weapons centered)
;blast again and <ret>
-fireany:
+fireany: ;HL=(x,y)
+ ld (firex),hl ;set position to fire from
cal fire_torp ;&&&
ld a,(your_weapon) ;do you have laser?
- dec a ;1=yes
- jr z,fire_laser
-
- ld ix,weapondata-6
+ ld ix,weapondata-6-(256*3)
add a,a ;weap*2
add a,a ; *4
add a,a ; *8
ld c,a
- ld b,0
+ ld b,3 ;go to current weapon (bc=a)
add ix,bc
- ld c,(ix)
- cal fire_ybullet
- inc ix
+fire_weapon: ;b=3
+ psh bc ;save counter
+ ld a,(ix) ;load this weapon
+ cp %11110000 ;%11110000=laser
+ cal z,fire_laser ;fire laser (will set a=0 when done)
+ or a ;<>0=bullet
+ cal nz,fire_ybullet
inc ix
- ld c,(ix)
- cal fire_ybullet
inc ix
- inc ix
- ld c,(ix)
- cal fire_ybullet
- ret
-
-fire_torp:
- ld de,(firex)
- ld hl,torp_occ ;torpedo...
- ld a,(hl) ;load torpInfo
- dec a ;do you have (unused) torpedoes?
- ret nz ;nope (a must be 1)
- ld (hl),2 ;yes; use torpedo
- ld (torp_pos),de ;save torpedo position (in de)
+ pop bc ;weapon counter (do 3 weapons)
+ dnz fire_weapon
ret
;-----fire LASER-----
-fire_laser: ;yes, fire that laser instead
- ld a,(firex) ;a = your x-pos
- ld d,a
+fire_laser:
+ ld b,0 ;overflow counter
+ ld hl,firex
+ ld d,(hl) ;d = your x-pos
+ inc hl
- ld hl,GRAPH_MEM ;save-location
- ld a,(firey) ;y-coord
- add a,3 ;at middle of your ship (y+3)
+ ld a,(hl) ;base y-coord (firey)
+ add a,(ix+1) ;at specified offset (most likely the middle)
ld e,a ;save laser-y in e
+ psh de ;save unmodified (x,y)
add a,a ;y*2
add a,a ;y*4
add a,a ;y*8
srl d ;X/4
srl d ;X/8
add a,d ;a = (Y*16+X/8) mod 256 (c set on overflow)
+
jr nc,_nolc ;jump if no carry = no overflow = a<=255
inc b ;a>255 so increase bc by 256
_nolc: ld c,a ;c = (Y*16+X/8) mod 256
- add hl,bc ;bc = Y*16+X/8
+ ld hl,GRAPH_MEM ;save-location
+ add hl,bc ;bc = Y*16+X/8: hl=screen address
ld a,15 ;128/8=16=screen width ** minus one (inc a ^^)
sub d ;minus x-start (d=X/8)
ld b,a
inc hl ;Go to next byte
dnz drawlaser
handle_laser:
- ld a,(firex)
- ld d,a ;d was divided, so reload the laser-x
+ pop de ;de=(firex): x-pos unmodified
check_laserhits: ;de = (x,y)
- ld b,nrenemies
- ld hl,enemies+1
-laserhits: ;Hits with normal enemies
+ ld b,nrenemies ;check all enemies
+ ld hl,enemies+1 ;enemy#1+occ/hp00
+laserhits: ;hits with normal enemies
psh hl
- ld a,(hl)
- and %00000010
+ ld a,(hl) ;occ+hp00
+ and %00000010 ;normal/moving occ.=%1x
jr z,nolashit ;no hit when enemy_occ <> 2/3
inc hl ;enemy type
ld a,(hl)
add a,5 ;add enemy height&&&
jp m,nolashit ;a-e>0 = hit
enemy_lashit:
- ld a,1 ;damage
- cal enemy_hit
- jr nolashit
+ ld a,(curweapdamage) ;damage
+ cal enemy_hit ;hl=enemy+y
nolashit:
- pop hl
+ pop hl ;enemy+1
ld a,b ;psh bc
ld bc,enemysize
add hl,bc ;go to next enemy
ld b,a ;pop bc
dnz laserhits ;check all enemies
+ xor a ;a=0 otherwise weird things might happen :P
+ ld (weapincs),a ;reset damage
ret
-;-----fire BULLET-----
+;-----misc-----
+
+fire_torp:
+ ld de,(firex)
+ ld hl,torp_occ ;torpedo...
+ ld a,(hl) ;load torpInfo
+ dec a ;do you have (unused) torpedoes?
+ ret nz ;nope (a must be 1)
+ ld (hl),2 ;yes; use torpedo
+ ld (torp_pos),de ;save torpedo position (in de)
+ ret
+
+;-----fire BULLETs-----
fire_ybullet:
- ld hl,ybullets
+ ld c,a ;save bulletType in c
+ ld hl,ybullets ;check for unused bullet
ld de,4
- ld b,maxbullets
+ ld b,nrybuls
find_ybullet:
ld a,(hl)
or a
ret ;so ret twice
found_ybullet:
- xor a
- cp c
- ret z
ld (hl),c ;use the bullet and set correct bullet-type
inc hl ;@damage
ld (hl),1 ;set bullet damage
Handle_bullets:
ld hl,ybullets
- ld b,maxbullets
+ ld b,nrybuls
scan_bullets:
psh bc ;bullet counter
psh hl ;save enemy+type
or a ;has it reached zero?
ret nz ;nope: get outta here!
- ld a,(eventtime) ;enemy frequency (lvl)
+ ld a,0 ;enemy frequency (lvl)
+eventtime =$-1
ld (nextevent),a ;set time to next event
ld hl,eventleft
dec (hl) ;update enemy-counter
ret ;don't place any more enemies
place_boss:
+ ld a,1
+ ld (nrlvlenemies),a ;just one enemy: the BOSS
ld hl,(levelp) ;the leveldata (including the boss)
dec hl ;points to leveldata\boss\enemynr
ld a,(hl) ;load it
- ld (level_enemy),a ;set new enemy (boss)
+ ld (lvlenemies),a ;set new enemy (boss)
dec hl ;points to level\boss\movement
ld a,(hl) ;load
ld (level_move),a ;set boss movement
ex de,hl ;de=hl=usable enemy
place_enemy:
- ld a,(level_enemy) ;enemy type to place (lvl)
+ ld bc,0 ;0..0
+nrlvlenemies =$-1 ;=nr of enemies minus 1
+ cal Random ;random enemy b..b+c = 0..nrenemies-1
+ ld b,0
+ ld c,a ;bc=a
+ ld hl,lvlenemies
+ add hl,bc ;go to a random enemy
+ ld a,(hl) ;load enemy nr of this mysterious random enemy
ld hl,XLenemyinfos-4 ;enemy "0" specs (1 before enemy #1)
add a,a ;a=type*2
add a,a ;a=type*4
- ld c,a ;c=type
- ld b,0 ;bc = enemy nr.&&&XX
+ ld c,a ;b=0; c=bc=type
add hl,bc ;hl = enemy specs
ld a,(hl) ;load hitpoints+occ of this enemy class
ld (de),a ;save occ
ld a,(y) ;place at same y-pos as YOUR ship
jr ypos_OK
random_enemy:
- ld bc,256*51 ;range=0..51
- cal Random
-; ld b,e ;b will be added to random-value
-; cal Random50 ;make a (in a) random value 0-51
+ ld bc,256*51 ;range=0..51
+ cal Random
ypos_OK: ;random value successfully created
ld (de),a ;save y-position
ld de,$2901 ;icon #2
cal putwidesprite ;display
- ld ix,spr_icon03 ;bulletIcon
- ld de,$3901 ;icon #3
- cal putwidesprite ;display icon
+ ld ix,spr_icon00
+ ld a,(your_weapon) ;ur weapon
+ dec a ;1=laser
+ jr z,no_bullets
ld hl,$3945 ;position to display bullet-type digit
ld a,(your_weapon) ;digit
dec a ;minus one (1=laser)
ld (_penCol),hl ;set location
add a,'0' ;make digit
cal _vputmap ;display char
+ ld ix,spr_icon03 ;bulletIcon
+no_bullets:
+ ld de,$3901 ;icon #3
+ cal putwidesprite ;display icon
ld ix,spr_icon00 ;emptyIcon
ld a,(your_weapon)
;--------------------------- proc -------------------------------------------
-Random: ;a=b<random<b+c; destr:none
+Random: ;a=c<random<b+c; destr:none
ld a,r
add a,0 ;increase last value by 0-255 (r)
ranseed =$-1
ld (ranseed),a ;save for next time
- and %01111110
cp b ;a>=b
jr nc,Random ;then add again
add a,c ;a<b; a=a+c
find_sprite: ;in:hl=enemy+type | out:ix=sprite to enemy
psh de
psh hl
- ld e,(hl) ;e = enemy type
+ ld e,(hl) ;e = enemy offset/2
ld d,0 ;de = e
- ld hl,XLenemytable ;hl = @sprites offset-table
- add hl,de ;points to offset of current enemy offset
- ld e,(hl) ;de = @enemy offset
-
ld ix,spr_enemy00 ;first enemy sprite
add ix,de ;add offset for current enemy
add ix,de ;twice (offset stored as offset/2)
cal scoreInc ;update score
ld hl,(levelp) ;level pointer
- ld bc,5+32+4+4 ;advance one level
+ ld c,0 ;advance one level
+ ld b,(hl)
+ add hl,bc ;passed the enemies
+ ld b,7+32+2
add hl,bc ;update to point to next level
ld (levelp),hl ;save
cp (hl)
cal z,dostory
- ld a,(hl) ;load new level-enemy type
- ld (level_enemy),a ;set level-enemy
+ ld a,(hl) ;number of (different) enemies in this level
inc hl
+ ld c,a
+ ld (nrlvlenemies),a ;set nr of enemies-1
+ ld b,0 ;bc=c so we can use ldir
+ ld de,lvlenemies ;table of enemies
+ ldir ;load enemies to table
ld a,(hl) ;load new appearance-time
ld (eventtime),a ;set
inc hl
ld a,(hl) ;load nr of enemies in this level
ld (eventleft),a ;set nr of events left
inc hl
- ld a,(hl) ;
+ ld a,(hl)
ld (level_info),a ;
inc hl
ld a,(hl) ;movement of enemies in this level
inc hl
ld de,spacespace
- ld bc,17+17+2
+ ld c,17+17+2 ;b=0
ldir
ld ix,starx1
ld hl,enemies ;remove all enemies and bullets
ld (hl),0 ;clear first byte
ld de,enemies+1 ;copy this to the next byte
- ld bc,(nrenemies*enemysize)+((nrybuls+nrebuls)*3)-1
+ ld bc,(nrenemies*enemysize)+(nrybuls*4)+(nrebuls*3)-1
ldir ;clear enemies + bullets (y/e)
;--------------------------- setup game -------------------------------------
;damage = min.damage + dam.inc*incs (0<=incs<=6)
maxnrweapons = 8+1
weapondata:
+ .db 1,1,%11110000,0,%11110000,6,%00000000,0 ;LASER
.db 1,1,%00000010,2,%00000000,0,%00000000,0 ;single fire
.db 3,1,%00000011,2,%00000000,0,%00000000,0 ;fast single
.db 1,1,%00000010,0,%00000010,5,%00000000,0 ;double
txt_email: .db "www.shiar.org ",127 ;title screen
.db " shiar0@hotmail.com",0
_txt_email = $3A01 ;$3A1E=just email
-txt_about: .db " v0.97.624 ",127," by Shiar",0 ;right behind txt_email
+txt_about: .db " v0.97.625 ",127," by Shiar",0 ;right behind txt_email
_txt_about = $331F
txt_menu1: .db "NEW GAME",0
txt_menu2: .db "CONTINUE",0
pickuptimer .db $04 ;counts when to place a pickup
your_score .dw $0000
-your_pickup .db $00
+your_pickup .db $04
your_occ .db $00 ;0=normal 1..16=exploding
your_inv .db $00 ;invincibility left
your_armor .db $0a ;HP left
.db $52,$36,"by Shiar" ,0,0,$19,$23
.db $ff
-;format:[enemy nr] [enemy frequency] [next lvl]
+;format:[nr.dif.enemies]x [enemy nr]
+; [enemy frequency] [next lvl]
; [level_info: 0000:damage 0:directfire 0:ground 0:ceiling 0:diagfire]
-; [level_move] [level_fire] [tunnel size] [groundtype] [16_ground]
-; [16_ceiling] [stars1] [stars2]
+; [level_move] [level_fire] [tunnel size] [groundtype]
+; [16_ground] [16_ceiling] [stars1] [stars2]
.db $15,$07,$08 ;fireFreq; moveType; enemyType
level01: ;efrequency must be odd if halfluring!
- .db $01,$1b,$2f,%00010001,0,255,0,0 ;0f>>2f ; 7
- .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ;16
- .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ;16
- .db 1,1 ; 2
- .db $10,$07,$09 ; 3
+ .db 3,$01,$02,$03
+ .db $1b,$2f,%00010001
+ .db 0,255
+ .db 0,0
+ .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ;16
+ .db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
+ .db 1,1
+
+ .db $10,$07,$09
.db 0
.db $01,01,"And the storyline conti",
.db "anet =)",0,0,1,20
.db $FF
- .db $10,$07,$09 ; 3
-level02: ;44
- .db $02,$13,$4b,%00100101,0,064,0,0
+ .db $10,$07,$09
+level02:
+ .db 1,$02
+ .db $13,$4b,%00100101,0,064,0,0
.db 1,2,3,4,5,6,6,5,4,3,4,5,4,3,2,1
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.db 1,1
- .db $0E,$07,$09
.db 0
.db $01,01,"Blablabla...",0,1
.db $01,34,"this storyline sux",0,0,1,39
- .DB $FF
+ .db $FF
.db $0E,$07,$09
level03:
- .db $03,$2d,$3f,%00010110,0,255,-9,1
+ .db 1,$03
+ .db $2d,$3f,%00010110,0,255,-9,1
.db 3,2,4,3,2,2,1,1,1,1 ,1,1,21,17,18,20
.db 1,1,1,1,1,1,1,3,6,12,9,1,21,19,18,18
- .db -1,-1
+ .db -1,-1 ;=%11111111=line
.db $0D,$07,$08
level04:
- .db $04,$11,$41,%00100001,0,057,0,0
+ .db 1,$04
+ .db $11,$41,%00100001,0,057,0,0
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.db 1,1
.db $0C,$07,$09
level05:
- .db $05,$11,$45,%00100101,%10,031,-7,1
+ .db 1,$05
+ .db $11,$45,%00100101,%10,031,-7,1
.db 14,12,11,9,10,7,7,5,4,3,4,4,2,3,1,2
.db 1, 1, 1, 1,1, 1,1,1,1,1,1,1,1,1,1,1
.db 1,1
.db $0B,$07,$08
level06:
- .db $06,$19,$3a,%00100111,0,255,-4,1
+ .db 1,$06
+ .db $19,$3a,%00100111,0,255,-4,1
.db 20,22,18,15,9,1,1,1,1,1,1,1,1,1,1,1
.db 20,22,18,15,9,1,1,1,1,1,1,1,1,1,1,1
.db 1,1
.db $08,$07,$09
level07:
- .db $07,$09,$ff,%00100001,0,043,0,0
+ .db 1,$07
+ .db $09,$ff,%00100001,0,043,0,0
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
.db 1,1
.db %00001111,%10001111 ; █████ ████
.db %11111110,%00000000 ; ███████
-XLenemytable:
- .db $00 ;00
- .db (spr_enemy01-spr_enemy00)/2 ;01
- .db (spr_enemy02-spr_enemy00)/2 ;02
- .db (spr_enemy03-spr_enemy00)/2 ;03
- .db (spr_enemy04-spr_enemy00)/2 ;04
- .db (spr_enemy05-spr_enemy00)/2 ;05
- .db (spr_enemy06-spr_enemy00)/2 ;06
- .db (spr_enemy07-spr_enemy00)/2 ;07
- .db (spr_boss0_1-spr_enemy00)/2 ;08
- .db (spr_boss0_2-spr_enemy00)/2 ;09
- .db (spr_enemy08-spr_enemy00)/2 ;0A
- .db (spr_enemy00-spr_enemy00)/2 ;0B
- .db (spr_enemy00-spr_enemy00)/2 ;0C
- .db (spr_enemy00-spr_enemy00)/2 ;0D
- .db (spr_enemy00-spr_enemy00)/2 ;0E
- .db (spr_enemy00-spr_enemy00)/2 ;0F
-
;format: [000000:HP 00:occ] [HP64] [appearance(ypos)] [unused]
XLenemyinfos:
- .db %00100110,0,1,1 ;#1 HP:1 app:random
- .db %00101010,0,2,3 ;#2 HP:1 app:halflure
- .db %00001111,0,3,2 ;#3 HP:1 app:lure
+ .db %00100110,0,(spr_enemy01-spr_enemy00)/2,1 ;#1
+ .db %00101010,0,(spr_enemy02-spr_enemy00)/2,3 ;#2
+ .db %00001111,0,(spr_enemy03-spr_enemy00)/2,2 ;#3
- .db %00000110,0,4,2 ;#4 HP:2 app:lure
- .db %00000111,0,5,3 ;#5 HP:2 app:random moving
- .db %00001011,0,6,2 ;#6 HP:3 app:lure moving
+ .db %00000110,0,(spr_enemy04-spr_enemy00)/2,2 ;#4
+ .db %00000111,0,(spr_enemy05-spr_enemy00)/2,3 ;#5
+ .db %00001011,0,(spr_enemy06-spr_enemy00)/2,2 ;#6
- .db %00011011,0,7,3 ;#7 HP:7 app:halflure moving
+ .db %00011011,0,(spr_enemy07-spr_enemy00)/2,3 ;#7
- .db %00110011,1,8,1 ;boss1
- .db %00111011,0,9,3 ;boss2
+ .db %00110011,1,(spr_boss0_1-spr_enemy00)/2,1 ;boss1
+ .db %01001011,1,(spr_boss0_2-spr_enemy00)/2,3 ;boss2
.db %00000000,0,0,0
.db %00000000,0,0,0
;----------------------------------------------------------------------------
;----------------------------------------------------------------------------
-; 0.97.624 -- 24.VI.00 -- size 5803
+; 0.97.625 -- 25.VI.00 -- size 5753
;
; # bullets do damage in all levels
; * more armor at armor-upgrade and extra armor at end of a level
; # 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)
;
;
; + added - removed * changed # bug fixed
\ No newline at end of file