storepos = _asm_exec_ram+6000 ;120 OF 165
storepos2 = _asm_exec_ram+6200 ;141 OF 167
-exlevel = _asm_exec_ram+6400 ;784+OF 2.7kb
-
-XLlevelsdata = exlevel+8 ;size: upto 1016 bytes
-XLweapondata = exlevel+1024 ;size: always 64 byte
-XLenemytable = exlevel+1088 ;size: always 16 byt
-XLenemyinfos = exlevel+1104 ;size: always 64 by
-XLsprenemies = exlevel+1168 ;size: like 128 b (upto 1kb)
;---------------------- in-game vars ------------------------------------------
-temp1 = storepos ;+0+1 ;temp (2 bytes) bullet
-
just_fired = storepos+2 ; +2 ;counts how long a blast lasts
curline = storepos+2 ; +2 ;used to display SFX
menuitem = storepos+2 ; +2 ;used to store menu location
;^-----------------------------------<1 ;-120=$78
-nrenemies = 10 ;max. nr of enemies
+enemies = storepos2 ; +0 ;info about each enemy (6byt)
enemysize = 7
-enemies = storepos2 ; +0 ;info about each enemy (6byt)
+nrenemies = 10 ;max. nr of enemies
-nrybuls = 10
-ybullets = enemies+(nrenemies*6) ;+80 ;60 bytes = 20(state,x,y)
-nrebuls = 10
+ybullets = enemies+(nrenemies*enemysize) ;60 bytes = 20(state,x,y)
+nrybuls = 32 ; +80\
ebullets = ybullets+(nrybuls*3) ;+110 ;30 bytes = 10(state,x,y)
+nrebuls = 16
ybuls = ebullets+(nrebuls*3) ;+140
+maxbullets = 32
;^-----------------------------------<2 ;-141=$8D
;level_info:
; [0000:damage 0:directfire 0:ground 0:ceiling 0:diagfire]
;enemies:
-; [HP] [000000:HP left 00:(00=no enemy 01=exploding 10=normal 11=moving)]
+; [HP64] [000000:HP left 00:(00=no enemy 01=exploding 10=normal 11=moving)]
; [ship type or explosion frame] [x] [y] [move] [fire]
;---------------------- introduction ------------------------------------------
level_name: .db 8,"nemesis0"
-StartFix:
- im 1
- ld hl,$D400
- ld de,$D401
- ld bc,$0100
- ld (hl),$D3
- ldir
- ld hl,int_handler
- ld de,$D3D3
- ld bc,int_end-int_handler
- ldir
- ld a,$D4
- ld i,a
- im 2
- ret
-
int_handler:
ex af,af'
in a,($03)
init: cal BUSY_OFF ;turns the run-indicator off, obviously
cal _clrScrn ;clean the screen
-
-Loadlevel:
- ld hl,level_name-1 ;find own variable
- rst 20h ;cal _ABS_MOV10TOOP1
- rst 10h ;cal _FINDSYM
- ret c ;not found? who cares...
-
- cal _ex_ahl_bde
- cal _SET_ABS_SRC_ADDR
- xor a
- ld hl,exlevel
- cal _SET_ABS_DEST_ADDR
- ld hl,4+4
- cal _SET_MM_NUM_BYTES
- cal _mm_ldir
-
- ld hl,(exlevel+4+2)
- cal _SET_MM_NUM_BYTES
- cal _mm_ldir
-
- xor a
- ld hl,XLweapondata
- cal _SET_ABS_DEST_ADDR
- ld hl,272
- cal _SET_MM_NUM_BYTES
- cal _mm_ldir ;save done (cal \ ret)
-
-setup: xor a ;<ld a,0>: reset:
+ xor a ;ld a,0
ld (iy+13),a ;don't affect TEXT_MEM and don't scroll screen
+ cal _flushallmenus ;remove TI menus
ld (_asapvar+1),a ;Asm( thinks it's the first time it runs Nems.
- cal StartFix
-setcontrast:
- ld a,(CONTRAST) ;load current contrast level
- cp $1f ;if already at maximum...
- jr z,skipdarken ;...then skip level increase
- inc a ;otherwise increase contrast level
-skipdarken:
- out (2),a ;set it
+
+FixKeys: ;fixes some key problems like left+down bug
+ im 1
+ ld a,$D4
+ ld bc,$0100
+ ld h,a
+ ld l,c ;ld hl,$D400
+ ld d,a
+ ld e,b ;ld de,$D401
+ dec a ;ld a,$D3
+ ld (hl),a
+ ldir
+ ld hl,int_handler
+ ld d,a
+ ld e,a ;ld de,$D3D3
+ ld bc,int_end-int_handler
+ ldir
+ inc a ;ld a,$D4
+ ld i,a
+ im 2
;---------------------- main menu ---------------------------------------------
LogoPut:
xor a ;white bitmask (a=0)
- ld b,16 ;one line
ld hl,logo_nemesis ;from...
ld de,VIDEO_MEM+16 ;...to one line from top
+ ld b,e ;ld b,16: one line
AboveLogo:
ld (de),a ;clear/n byte
inc de ;next
ld bc,16*19 ;logo size
ldir ;display one line of logo
-; ld hl,GRAPH_MEM ;cleared line
-; ld bc,16 ;size=one line
-; ldir ;also clear one line below the logo
-
-; ld a,-1 ;first line is -1+1=0
-; ld b,21 ;with first 21 lines:
-; cal DoSFX ;do special effect &&&skip
-
ld hl,VIDEO_MEM+(16*$39)+4 ;$39 rows down, 4 cols right (4*8=$20)
ld b,8 ;draw 8x one byte = 8*8 = 64 pixels wide
ld a,%11111111 ;horizontal line mask
ld (_curRow),hl
cal _putc
- halt \ halt \ halt \ halt
+ halt \ halt
cal GET_KEY ;wait for keypress
cp K_UP
ld a,(menuitem)
dec a
jr nz,startnewgame
- cal Continue_game
- jr game_main_loop
-
-startnewgame:
- cal New_game
+ cal samelevel
jr game_main_loop
menuchange:
jr menuloop
do_invert:
- ld (hl),$EE
+ ld (hl),$2F ;cpl
ret
undo_invert
- ld (hl),$E6
+ ld (hl),$B7 ;or a
ret
+startnewgame:
+ cal New_game
+
;------------------------------------------------------------------------------
;---------------------- game loop ---------------------------------------------
;------------------------------------------------------------------------------
cal CheckGround ;check for collision with the ground
check_keys:
- cal GET_KEY
- cp K_GRAPH
- cal z,Teacher
-
- ld a,%00111111 ;function keys (MORE,EXIT,2ND,F1,F2,F3,F4,F5)
+ ld a,%10111111 ;function keys (MORE,EXIT,2ND,F1,F2,F3,F4,F5)
out (1),a ;ask for them
nop \ nop ;delay 8 clocks
in a,(1) ;get zem!
psh hl ;push hl on stack (instead of cal Fire_bullet)
jp z,Fire_bullet ;fire smtn (bulletstorplasermultiples+stuff..)
pop hl ;no cal to Fire_bullet made, so pop stack
- ld hl,just_fired ;no:
- ld (hl),0 ;reset just_fired
+ xor a ;no:
+ ld (just_fired),a ;reset just_fired
check_selkey:
ld a,%01011111 ;look at first column of keys (ALPHA to STO)
out (1),a ;gimme
nop \ nop ;what's taking you so long
in a,(1) ;at last... our precious keyzzz...
- ;old: <bit 7,a \ cal z,select> now see this:
+
+ bit 6,a ;'bout the GRAPH key...
+ cal z,Teacher ;you didn't _press_ it, did you?!?
+
rla ;test bit7 so we know f ALPHA has been pressed
cal nc,select ;yeppy, select the currently selected upgrade
cal Enemies_hit ;check for collision with enemies
+ cal inc_weapdamage
_gamestuff1:
cal Handle_Ship ;move you
cal Display_Screen ;display all
halt ;delay
- jp game_main_loop ;LOOP^^^^^^^^^^^^^
+ jp game_main_loop ;LOOP ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+inc_weapdamage:
+ ld a,0
+weapincs =$-1
+ inc a
+ cp 31
+ ret nc ;return if increased 16 times or more already
+ ld (weapincs),a
+
+ ld b,1
+weapdamage =$-1
+ add a,b
+
+ ld (curweapdamage),a
+ ret
;--------------------------- ground -------------------------------------------
;--------------------------- exit ---------------------------------------------
quit:
- im 1
- ld a,(CONTRAST) ;load original contrast level
- out (2),a ;and set it back
+ im 1 ;release keyfix procedure
ld (iy+13),3 ;use textshadow (TEXT_MEM) and scrolling
ld hl,GRAPH_MEM ;graph-screen location
jp _clrWindow ;as _clrLCD but also clears TEXT_MEM (like the
;_clrScrn) AND also executes _homeup and ret
-; cal _clrScrn
-; jp _homeup
+
;--------------------------- display ------------------------------------------
Display_Screen:
displaytloop:
ld a,(hl) ;copy byte from (hl)
_invert:
- xor $ff ; } ;invert byte (white<=>black)
+ cpl ;xor $ff: invert byte (white<=>black)
ld (de),a ;to (de)
inc hl \ inc de ;next byte
dnz displaytloop ;16x hl >> de
jr nz,select2 ;no, carry on
select1:
ld a,(your_armor) ;load current armor
- cp 24 ;is it >=24
- ret nc ;then return (armor may not be 25 or more)
- xor a
- ld (your_pickup),a ;reset pickups (a=0)
- ld hl,your_armor ;change armor
- inc (hl) ;increase HPs by one
+ cp 25-6 ;may not become >=25
+ jr c,select1_ ;ok then just add 6
+ ld a,25-6 ;set to maximum (6 will be added below)
+select1_:
+ add a,6 ;add 6 to armor
+ ld (your_armor),a ;change armor
+ xor a ;ld a,0
+ ld (your_pickup),a ;reset pickups
jp disp_icons ;display and return
select2:
dec a ;is it 2?
cp 10
jp nc,disp_icons ;>=10
ld (hl),a
-
- add a,a ;weap*2
- add a,a ; *4
- add a,a ; *8
- ld c,a
- ld b,0
- ld hl,XLweapondata-7
- add hl,bc
- ld a,(hl)
- ld (ybuls),a
-
+ cal loadweapon
jp disp_icons ;display n return
select4:
dec a ;is it 4?
;------------------------- fire bullet ----------------------------------------
Fire_bullet:
- ld hl,RanPos ;random
- inc (hl) ;update random counter
-
-; ld a,(laserlasts)
-; ld b,5
ld hl,just_fired
ld a,(hl) ;just_fired
cp 5 ;already pressed?
dec a ;1=yes
jr z,fire_laser
- ld ix,XLweapondata-6
+ ld ix,weapondata-6
add a,a ;weap*2
add a,a ; *4
add a,a ; *8
ld c,(ix)
xor a
cp c
- jr nz,fire_ybullet
+ cal nz,fire_ybullet
ret
fire_torp:
dnz laserhits ;check all enemies
ret
-enemy_lashit:
+enemy_lashit: ;&&&before nolashit
cal enemy_hit
jr nolashit
fire_ybullet:
ld hl,ybullets
ld de,3
- ld a,(ybuls)
- ld b,a
+ ld b,maxbullets
find_ybullet:
ld a,(hl)
or a
jr z,found_ybullet ;0 = no bullet here
add hl,de
dnz find_ybullet ;look next bullet
- ret
+ pop hl ;don't try to fire any other bullets
+ ret ;so ret twice
found_ybullet:
ld (hl),c ;use the bullet and set correct bullet-type
add a,(ix+1) ;place bullet at the middle of your ship
inc hl ;go to bullet-y
ld (hl),a ;set y
+
+ xor a
+ ld (weapincs),a ;reset damage
ret
;------------------------ handle bullets --------------------------------------
Handle_bullets:
ld hl,ybullets
- ld a,(ybuls)
- ld b,a
+ ld b,maxbullets
scan_bullets:
psh bc
psh hl
cal bullet_left ;move bullet left
display_bullet:
- ld ix,spr_bullet01
psh de
+ ld hl,XLbullettable ;pointer to first bullet
+ ld a,(curweapdamage) ;bullet damage=size
+ srl a
+ srl a ;per 4
+ inc a ;must be at least 1
+nextbulletlook:
+ inc hl ;next bullet
+ dec a
+ jr nz,nextbulletlook
+ ld a,(hl) ;load pointer offset
+ ld d,0
+ ld e,a ;convert to 16bit
+ ld ix,spr_bullet01 ;first sprite
+ add ix,de ;add offset (go to correct sprite)
+ pop de ;position saved
+ psh de ;but will be altered so save again
cal putsprite ;display bullet
pop de
ld hl,enemies+1
hit_enemies: ;Hits with normal enemies
+ psh bc ;enemy counter
psh hl
ld a,(hl)
jp m,nohit
psh hl
- ld hl,(temp1)
- ld (hl),$00 ;remove bullet
+ xor a
+ ld (0),a ;remove bullet
+temp1 =$-2
pop hl
cal enemy_hit
-
nohit:
pop hl
- ld a,b ;psh bc
ld bc,enemysize
add hl,bc
- ld b,a ;pop bc
+ pop bc
dnz hit_enemies ;check next enemy
ret
dec hl
dec hl
dec hl
- ld a,(hl) ;occ
- ld c,a ;psh occ
- and %11111100 ;occ/4 = HP left ;<srl a\srl a
- jr nz,hpleft ;not zero -> jump
- ld (hl),%01 ;set to explode
+ ld a,1 ;damage to inflict
+curweapdamage =$-1
+ rla
+ rla ;*4
+ ld b,a
+ ld a,(hl) ;load occ
+ sub b ;decrease HP (if <0 then c is set)
+ ld (hl),a ;save (no flag-changes)
+ dec hl ;goto hp64; no change in c
+ ld a,(hl) ;load; no c-change
+ sbc a,0 ;if c then decrease a
+ ld (hl),a ;save back the new value
+ ret nc ;if a>=0 then return, otherwise explode
+
+ inc hl ;goto occ again
+ ld (hl),%01 ;set to explode
ld a,(pickuptimer) ;counts enemies destroyed
dec a ;enough destroyed for a pickup?
jr nz,pickupdone ;otherwise just explode
- ld (hl),%00000110 ;change it into a pickup (with 2 HP)
+ ld (hl),%110 ;change it into a pickup (with 2 HP)
ld a,18 ;reset enemies counter (18 hits = next)
pickupdone:
ld (pickuptimer),a ;save new enemiescounter value
ld hl,1 ;increase score by one
jp scoreInc ;+ret
-hpleft:
- ld a,c ;pop occ
- sub %00000100 ;decrease HP by one
- ld (hl),a ;save
- ret
-
;--------------------------- handle torpedo ----------------------------------
Handle_torp:
add hl,bc
cp (hl) ;(hl) = 0 ??
jr nz,chk_noenemy ;jump if enemy present (non-0)
-
- ld d,h
- ld e,l
+ ex de,hl ;de=hl=usable enemy
place_enemy:
ld a,(level_enemy) ;enemy type to place (lvl)
ld a,(hl) ;load hitpoints+occ of this enemy class
ld (de),a ;save occ
+ inc hl ;next enemyInfo byte
dec de ;goto hp
- xor a
+ ld a,(hl) ;load hp64
ld (de),a ;save hp64
inc de ;next byte (or previous): occ again
halt
dnz SFXdelay
- pop bc
+ pop bc
dnz SFXframe
ret
cal _SET_ABS_SRC_ADDR
ld hl,storehi_end-storehi_start
cal _SET_MM_NUM_BYTES
- jp _mm_ldir ;save done (cal \ ret)
+ cal _mm_ldir ;save done (cal \ ret)
+ jp _RAM_PAGE_1
save_lvl:
ld hl,own_name-1 ;find own variable
cal _SET_ABS_SRC_ADDR
ld hl,storesave_end-storesave_start
cal _SET_MM_NUM_BYTES
- jp _mm_ldir ;save done (cal \ ret)
- ret
+ cal _mm_ldir ;save done (cal \ ret)
+ jp _RAM_PAGE_1
game_over:
pop hl ;=ret (game_over was called from a procedure)
cal _getkey ;wait for keypress
jp quit ;restore some things and return to TI-OS/shell
-Continue_game:
- jr nonext_level
-
New_game:
xor a ;ld a,0
ld (score),a ;reset score
ld (your_lives),a ;3 lives (4 will be decreased @ You_die)
ld (pickuptimer),a ;next pickup after 4 enemies destroyed
- xor a
- cp (hl)
- cal z,dostory
-
You_die:
ld a,12
- ld (your_armor),a ;5 HPs/shields
- ld hl,your_lives
- dec (hl) ;decrease lives
- ld a,(hl) ;load lives left
- inc a ;if lives=0ffh then a=0
- jp z,game_over ;if so, game's over
- jr nonext_level
+ ld (your_armor),a ;12 HPs/shields
+ ld a,(your_lives) ;load lives left
+ dec a ;decrease lives
+ ld (your_lives),a ;if lives=0ffh GO
+ jp c,game_over
+ jr samelevel
;--------------------------- next level ---------------------------------------
Next_level:
+ ld a,(your_armor) ;load current armor
+ cp 25-8 ;may not become >=25
+ jr c,addok ;ok then just add 8
+ ld a,25-8 ;set to maximum (8 will be added below)
+addok:
+ add a,8 ;add 8 to armor
+ ld (your_armor),a ;change armor
+
ld hl,level ;level number
ld a,(hl)
inc a
add hl,bc ;update to point to next level
ld (levelp),hl ;save
- xor a
- cp (hl)
- cal z,dostory
-
-nonext_level:
- ld a,(your_weapon)
- add a,a ;weap*2
- add a,a ; *4
- add a,a ; *8
- ld c,a
- ld b,0
- ld hl,XLweapondata-7
- add hl,bc
- ld a,(hl)
- ld (ybuls),a ;max number of bullets (varies per weap.class)
-
+samelevel:
ld a,80
ld (nextevent),a ;time to first enemy appearance
ld hl,(levelp) ;level pointer
+ xor a
+ cp (hl)
+ cal z,dostory
+
ld a,(hl) ;load new level-enemy type
ld (level_enemy),a ;set level-enemy
inc hl
dnz placestars ;repeat for all stars
ret
+loadweapon:
+ ld a,(your_weapon)
+ add a,a ;weap*2
+ add a,a ; *4
+ add a,a ; *8
+ ld c,a
+ ld b,0
+ ld hl,weapondata-16
+ add hl,bc
+ ld a,(hl)
+ ld (weapdamage),a ;damage of bullets
+ inc hl
+ ld a,(hl)
+; ld (weapdaminc),a ;damage increase
+ ret
+
;--------------------------- putsprite ----------------------------------------
;--------------------------- de =(X,Y) ----------------------------------------
offsets_table:
- .db 128,64,32,%10000,%01000,%00100,%00010,%00001
+ .db $80,$40,$20,$10,8,4,2,1
putsprite:
ld a,d ;a = X
and %00000111 ;a = X mod 8 = bit nr. to mask
srl d ;d/4
srl d ;d/8 (8 bits in byte) ** c is set when overflow
add a,d ;a = (Y*16+X/8) mod 256
- jp nc,_n1 ;jump if no carry = no overflow = a<=255
+ jr nc,_n1 ;jump if no carry = no overflow = a<=255
inc b ;a>255 so increase bc by 256
_n1: ld c,a ;c = (Y*16+X/8) mod 256
add hl,bc ;bc = Y*16+X/8
inc ix
_smc1: ld a,1 ;Load pixel mask
_iloop: sla c ;Test leftmost pixel
- jp nc,_noplot ;See if a plot is needed
+ jr nc,_noplot ;See if a plot is needed
ld e,a ;OR pixel with screen
or (hl)
ld (hl),a
ld a,e
_noplot:rrca
- jp nc,_notedge ;Test if edge of byte reached
+ jr nc,_notedge ;Test if edge of byte reached
inc hl ;Go to next byte
_notedge:
dnz _iloop
.db %01111000 ; ████
spr_ship01i:
.db 7,7 ;ship alpha class
- .db %00000000 ;
- .db %00000000 ;
- .db %00000000 ;
- .db %00000000 ;
- .db %00000000 ;
- .db %00000000 ;
- .db %00000000 ;
-
.db %01010000 ; █ █
.db %10100000 ; █ █
.db %01010100 ; █ █ █
.db 8,7
.db 128,128,128,128,128,128,128 ;128 = %10000000
+;-------------------------- weapondata ----------------------------------------
+
+;format:[unused] [ybuls(max.bullets)] [0000:direction 0000:speed] [offset]
+weapondata:
+ .db 2,1,%00000010,2,%00000000,0,%00000000,0 ;single fire
+ .db 2,1,%00000011,2,%00000000,0,%00000000,0 ;fast single
+ .db 16,2,%00000010,0,%00000010,5,%00000000,0 ;double
+ .db 16,1,%00010010,2,%00110010,2,%01000010,2 ;triple
+ .db 16,1,%00010011,2,%00110011,2,%01000011,2
+ .db 16,1,%00010011,2,%00110011,2,%01000100,2
+ .db 16,1,%00010100,2,%00110100,2,%01000101,2
+ .db 16,1,%00010100,2,%00110100,2,%01000101,2
+
;---------------------------- texts -------------------------------------------
txt_about: .db " v0.96.A30",127,"by Shiar",0
storehi_start:
hiscore .dw $0000
-hiname .db "Shiar.96",0
+hiname .db "Shiar.97",0
storehi_end:
storesave_start:
level .db $01 ;level number
-levelp .dw XLlevelsdata+4 ;pointer to level data
+levelp .dw XLlevelsdata ;pointer to level data
pickuptimer .db $04 ;counts when to place a pickup
score .dw $0000
your_armor .db $0a ;HP left
your_lives .db $03 ;
-your_weapon .db $02 ;laser avail: 0=no, 1=yes
+your_weapon .db $02 ;weapon: 0=no, 1=laser, 2+=bullet n+1
your_multiples .db $00 ;multiples present
torp_occ .db $00 ;torp.state: 0=unavail 1=avail 2=presnt
torp_pos .dw $0000 ;torpedo position (x,y)
storesave_end:
+
+;XLlevelsdata:----------------------------------------------------------------
+XLlevelsdata:
+
+ .db 0
+ .db $21,$1d,"Cosmic year 6716" ,0,0,$1d,$06
+ .db $1b,$1d,"storyline coming soon..." ,0,0,$1d,$06
+ .db $09,$19,"the Nemesis saga continues",0,1
+ .db $2e,$21,"with NEMESIS 86" ,0,1
+ .db $52,$36,"by Shiar" ,0,0,$19,$23
+ .db $ff
+
+;format:[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]
+
+ .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 0
+ .db $01,01,"And the storyline conti",
+ .db "nues.....",0,1
+ .db $01,09,"You decide to fly close",
+ .db " to the",0,1
+ .db $01,15,"surface of a nearby pl",
+ .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 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 $0E,$07,$09
+level03:
+ .db $03,$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 $0D,$07,$08
+level04:
+ .db $04,$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 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 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,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
+
+;XLenemytable:----------------------------------------------------------------
+XLbullettable:
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet01-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+ .db (spr_bullet02-spr_bullet01)
+
+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_boss01 -spr_enemy00)/2 ;08
+ .db (spr_boss02 -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
+
+;XLenemyinfos:----------------------------------------------------------------
+XLenemyinfos:
+
+;format: [000000:HP 00:occ] [HP64] [appearance(ypos)] [unused]
+
+ .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 %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 %00011011,0,7,3 ;#7 HP:7 app:halflure moving
+
+ .db %00110011,1,8,1 ;boss1
+ .db %00111011,0,9,3 ;boss2
+
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+ .db %00000000,0,0,0
+
+;XLsprenemies:----------------------------------------------------------------
+XLsprenemies:
+
+spr_enemy00:
+ .db 8,8 ;pickup
+ .db %00011000 ; ██
+ .db %00011000 ; ██
+ .db %00011000 ; ██
+ .db %11111111 ; ████████
+ .db %11111111 ; ████████
+ .db %00011000 ; ██
+ .db %00011000 ; ██
+ .db %00011000 ; ██
+
+spr_enemy01:
+ .db 6,6 ;enemy type one
+ .db %00111100 ; ████
+ .db %01110000 ; ███
+ .db %11110000 ; ████
+ .db %11110000 ; ████
+ .db %01110000 ; ███
+ .db %00111100 ; ████
+spr_enemy02:
+ .db 8,6 ;enemy type two
+ .db %00111111 ; █████
+ .db %01111000 ; ████
+ .db %11111100 ; ██████
+ .db %11111100 ; ██████
+ .db %01111000 ; ████
+ .db %00111111 ; █████
+spr_enemy03:
+ .db 6,6 ;enemy type three
+ .db %01111100 ; █████
+ .db %11110000 ; ████
+ .db %11111000 ; █████
+ .db %11111000 ; █████
+ .db %11110000 ; ████
+ .db %01111100 ; █████
+spr_enemy04:
+ .db 6,6 ;enemy type four
+ .db %00111000 ; ███
+ .db %01111100 ; █████
+ .db %11111000 ; █████
+ .db %11111000 ; █████
+ .db %01111100 ; █████
+ .db %00111000 ; ███
+spr_enemy05:
+ .db 7,6 ;enemy type five
+ .db %00011110 ; ████
+ .db %01111110 ; ██████
+ .db %11111100 ; ██████
+ .db %11111100 ; ██████
+ .db %01111110 ; ██████
+ .db %00011110 ; ████
+spr_enemy06:
+ .db 7,6 ;enemy type six
+ .db %00011100 ; ███
+ .db %01111110 ; ██████
+ .db %10111000 ; █ ███
+ .db %10111000 ; █ ███
+ .db %01111110 ; ██████
+ .db %00011100 ; ███
+spr_enemy07:
+ .db 8,6 ;enemy type seven
+ .db %00011110 ; ████
+ .db %01111111 ; ███████
+ .db %10011100 ; █ ███
+ .db %10011100 ; █ ███
+ .db %01111111 ; ███████
+ .db %00011110 ; ████
+
+spr_boss01:
+ .db 16,10 ;boss type one
+ .db %00000001,%11111111 ; █████████
+ .db %00001111,%11111110 ; ███████████
+ .db %00111111,%11110000 ; ██████████
+ .db %01011111,%10000000 ; █ ██████
+ .db %10011111,%01000000 ; █ █████ █
+ .db %10011111,%01000000 ; █ █████ █
+ .db %01011111,%10000000 ; █ ██████
+ .db %00111111,%11110000 ; ██████████
+ .db %00001111,%11111110 ; ███████████
+ .db %00000001,%11111111 ; █████████
+spr_boss02:
+ .db 16,10 ;boss type:one :
+ .db %11111110,%00000000 ; ███████
+ .db %00001111,%10001111 ; █████ ████
+ .db %00111111,%11100011 ; █████████ ██
+ .db %01001111,%11111110 ; █ ███████████
+ .db %10001101,%01111100 ; █ ██ █ █████
+ .db %10001101,%01111100 ; █ ██ █ █████
+ .db %01001111,%11111110 ; █ ███████████
+ .db %00111111,%11100011 ; █████████ ██
+ .db %00001111,%10001111 ; █████ ████
+ .db %11111110,%00000000 ; ███████
+
+
+spr_enemy08:
+ .db 8,6 ;enemy type eight
+ .db %00011110 ; ████
+ .db %01111111 ; ███████
+ .db %10011100 ; █ ███
+ .db %10011100 ; █ ███
+ .db %01111111 ; ███████
+ .db %00011110 ; ████
+
+;-----------------------------------------------------------------------------
;----------------------------- logo -------------------------------------------
logo_nemesis:
; instead of two 4-byte spaces 40 bytes apart! (cleaner code; faster)
; * ground/ceiling/stars are continued when at boss (c00l level 3 boss)
;
+; 0.97.B12 -- 12.XI.99 -- size
+;
+; # bullets do damage in all levels
+; * more armor at armor-upgrade and extra armor at end of a level
+; - internal levels again (no need, safer/smaller)
+; # some registers not correctly pushed/popped
+; * several optimizations (init.procs some bytes smaller)
+;
;
; + added - removed * changed # bug fixed