mirror of
https://github.com/dschmenk/PLASMA.git
synced 2024-07-01 07:29:32 +00:00
Pre-compile sprites and more animations and audio
This commit is contained in:
parent
09d861e5a5
commit
0c57570d4a
|
@ -137,8 +137,8 @@ export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1
|
||||||
sprtptr->s_height = h
|
sprtptr->s_height = h
|
||||||
sprtptr->s_xcenter = xcenter
|
sprtptr->s_xcenter = xcenter
|
||||||
sprtptr->s_ycenter = ycenter
|
sprtptr->s_ycenter = ycenter
|
||||||
sprtptr=>s_under[0] = 0//heapalloc(spritesize)
|
sprtptr=>s_under[0] = 0
|
||||||
sprtptr=>s_under[1] = 0//heapalloc(spritesize)
|
sprtptr=>s_under[1] = 0
|
||||||
for i = 0 to 13
|
for i = 0 to 13
|
||||||
sprtptr=>s_map[i] = heapalloc(spritesize)
|
sprtptr=>s_map[i] = heapalloc(spritesize)
|
||||||
sprtptr=>s_mask[i] = heapalloc(spritesize)
|
sprtptr=>s_mask[i] = heapalloc(spritesize)
|
||||||
|
@ -158,15 +158,14 @@ export def spriteCompile(w, h, xcenter, ycenter, srcptr)#1
|
||||||
return sprtptr
|
return sprtptr
|
||||||
end
|
end
|
||||||
export def spriteDup(sprtsrc)#1
|
export def spriteDup(sprtsrc)#1
|
||||||
var sprtdup, spritesize
|
var sprtdup
|
||||||
byte i
|
byte i
|
||||||
|
|
||||||
sprtdup = heapalloc(t_sprite)
|
sprtdup = heapalloc(t_sprite)
|
||||||
if not sprtdup; return 0; fin
|
if not sprtdup; return 0; fin
|
||||||
memcpy(sprtdup, sprtsrc, t_sprite)
|
memcpy(sprtdup, sprtsrc, t_sprite)
|
||||||
//spritesize = sprtdup=>s_size
|
sprtdup=>s_under[0] = 0
|
||||||
sprtdup=>s_under[0] = 0//heapalloc(spritesize)
|
sprtdup=>s_under[1] = 0
|
||||||
sprtdup=>s_under[1] = 0//heapalloc(spritesize)
|
|
||||||
return sprtdup
|
return sprtdup
|
||||||
end
|
end
|
||||||
export def spriteRead(filestr)#1
|
export def spriteRead(filestr)#1
|
||||||
|
@ -175,20 +174,20 @@ export def spriteRead(filestr)#1
|
||||||
|
|
||||||
sprtptr = heapalloc(t_sprite)
|
sprtptr = heapalloc(t_sprite)
|
||||||
if not sprtptr; return 0; fin
|
if not sprtptr; return 0; fin
|
||||||
refnum = fileio:open(@filestr)
|
refnum = fileio:open(filestr)
|
||||||
if refnum
|
if refnum
|
||||||
if fileio:read(refnum, sprtptr, t_sprite) == t_sprite
|
if fileio:read(refnum, sprtptr, t_sprite) == t_sprite
|
||||||
spritesize = sprtptr=>s_size
|
spritesize = sprtptr=>s_size
|
||||||
sprtptr=>s_under[0] = heapalloc(spritesize)
|
sprtptr=>s_under[0] = 0
|
||||||
sprtptr=>s_under[1] = heapalloc(spritesize)
|
sprtptr=>s_under[1] = 0
|
||||||
if not sprtptr=>s_under[0] or not sprtptr=>s_under[1]
|
for i = 0 to 13
|
||||||
|
sprtptr=>s_map[i] = heapalloc(spritesize)
|
||||||
|
sprtptr=>s_mask[i] = heapalloc(spritesize)
|
||||||
|
if not sprtptr=>s_map[i] or not sprtptr=>s_mask[i]
|
||||||
heaprelease(sprtptr)
|
heaprelease(sprtptr)
|
||||||
fileio:close(refnum)
|
fileio:close(refnum)
|
||||||
return 0
|
return 0
|
||||||
fin
|
fin
|
||||||
for i = 0 to 13
|
|
||||||
sprtptr=>s_map[i] = 0//heapalloc(spritesize)
|
|
||||||
sprtptr=>s_mask[i] = 0//heapalloc(spritesize)
|
|
||||||
fileio:read(refnum, sprtptr=>s_map[i], spritesize)
|
fileio:read(refnum, sprtptr=>s_map[i], spritesize)
|
||||||
fileio:read(refnum, sprtptr=>s_mask[i], spritesize)
|
fileio:read(refnum, sprtptr=>s_mask[i], spritesize)
|
||||||
next
|
next
|
||||||
|
@ -207,9 +206,9 @@ export def spriteSave(filestr, sprtptr)#1
|
||||||
var spritesize
|
var spritesize
|
||||||
byte refnum, i
|
byte refnum, i
|
||||||
|
|
||||||
fileio:destroy(@filestr)
|
fileio:destroy(filestr)
|
||||||
if fileio:create(@filestr, $06, $0000) == FILE_ERR_OK
|
if fileio:create(filestr, $06, $0000) == FILE_ERR_OK
|
||||||
refnum = fileio:open(@filestr)
|
refnum = fileio:open(filestr)
|
||||||
if refnum
|
if refnum
|
||||||
if fileio:write(refnum, sprtptr, t_sprite) == t_sprite
|
if fileio:write(refnum, sprtptr, t_sprite) == t_sprite
|
||||||
spritesize = sprtptr=>s_size
|
spritesize = sprtptr=>s_size
|
||||||
|
|
|
@ -305,7 +305,7 @@ TONELP SBC #$01 ; 2
|
||||||
;+4 = 11 (from BNE above)
|
;+4 = 11 (from BNE above)
|
||||||
|
|
||||||
+++ BIT $C000 ; 4
|
+++ BIT $C000 ; 4
|
||||||
BMI TONEXIT ; 2
|
NOP ; 2
|
||||||
BPL TONELP ; 3
|
BPL TONELP ; 3
|
||||||
;---
|
;---
|
||||||
;+9 = 20
|
;+9 = 20
|
||||||
|
|
|
@ -66,6 +66,7 @@ HGRSPRITE = rel/apple/HGRSPRITE\#FE1000
|
||||||
LINES = rel/LINES\#FE1000
|
LINES = rel/LINES\#FE1000
|
||||||
GRAFIX = rel/apple/GRAFIX\#FE1000
|
GRAFIX = rel/apple/GRAFIX\#FE1000
|
||||||
SFM = rel/apple/SFM\#FE1000
|
SFM = rel/apple/SFM\#FE1000
|
||||||
|
SFMSPRT = rel/apple/SFMSPRT\#FE1000
|
||||||
GFXDEMO = rel/apple/GFXDEMO\#FE1000
|
GFXDEMO = rel/apple/GFXDEMO\#FE1000
|
||||||
JOYBUZZ = rel/apple/JOYBUZZ\#FE1000
|
JOYBUZZ = rel/apple/JOYBUZZ\#FE1000
|
||||||
PORTIO = rel/apple/PORTIO\#FE1000
|
PORTIO = rel/apple/PORTIO\#FE1000
|
||||||
|
@ -105,7 +106,7 @@ TXTTYPE = .TXT
|
||||||
#SYSTYPE = \#FF2000
|
#SYSTYPE = \#FF2000
|
||||||
#TXTTYPE = \#040000
|
#TXTTYPE = \#040000
|
||||||
|
|
||||||
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(ZIP) $(MATCHFILES) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRSPRITE) $(HGRLIB) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
apple: $(PLVMZP_APL) $(PLASM) $(PLVM) $(PLVM01) $(PLVM02) $(PLVMJIT) $(PLVM802) $(PLVM03) $(PLVMJIT03) $(CMD) $(CMDJIT) $(JIT) $(JIT16) $(JITUNE) $(SOSCMD) $(SOSCMDJIT) $(PLASMAPLASM) $(CODEOPT) $(ZIP) $(MATCHFILES) $(ARGS) $(MEMMGR) $(MEMTEST) $(FIBER) $(FIBERTEST) $(LONGJMP) $(ED) $(MON) $(COPY) $(DEL) $(REN) $(CAT) $(NEWDIR) $(TYPE) $(SOS) $(ROD) $(SIEVE) $(PRIMEGAP) $(MOUSE) $(UTHERNET2) $(UTHERNET) $(ETHERIP) $(INET) $(DHCP) $(HTTPD) $(TFTPD) $(ROGUE) $(ROGUEMAP) $(ROGUECOMBAT) $(SFM) $(SFMSPRT) $(GRAFIX) $(GFXDEMO) $(LINES) $(HGRSPRITE) $(HGRLIB) $(HGRTEST) $(GRLIB) $(DGRLIB) $(GRTEST) $(DGRTEST) $(HGRTEST) $(FILEIO_APL) $(CONIO_APL) $(JOYBUZZ) $(PORTIO) $(SPIPORT) $(SDFAT) $(FATCAT) $(FATGET) $(FATPUT) $(FATWDSK) $(FATRDSK) $(INT32) $(INT32TEST) $(SANE) $(FPSTR) $(FPU) $(SANITY) $(LZ4) $(LZ4CAT) $(RPNCALC) $(SNDSEQ) $(PLAYSEQ)
|
||||||
|
|
||||||
-rm vmsrc/plvmzp.inc
|
-rm vmsrc/plvmzp.inc
|
||||||
|
|
||||||
|
@ -263,6 +264,10 @@ $(SFM): samplesrc/sfm.pla $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -AMOW < samplesrc/sfm.pla > samplesrc/sfm.a
|
./$(PLASM) -AMOW < samplesrc/sfm.pla > samplesrc/sfm.a
|
||||||
acme --setpc 4094 -o $(SFM) samplesrc/sfm.a
|
acme --setpc 4094 -o $(SFM) samplesrc/sfm.a
|
||||||
|
|
||||||
|
$(SFMSPRT): samplesrc/sfmsprt.pla $(PLVM02) $(PLASM)
|
||||||
|
./$(PLASM) -AMOW < samplesrc/sfmsprt.pla > samplesrc/sfmsprt.a
|
||||||
|
acme --setpc 4094 -o $(SFMSPRT) samplesrc/sfmsprt.a
|
||||||
|
|
||||||
$(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
|
$(ROGUE): samplesrc/rogue.pla $(PLVM02) $(PLASM)
|
||||||
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
|
./$(PLASM) -AMOW < samplesrc/rogue.pla > samplesrc/rogue.a
|
||||||
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
|
acme --setpc 4094 -o $(ROGUE) samplesrc/rogue.a
|
||||||
|
|
|
@ -75,12 +75,15 @@ cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
||||||
cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL
|
cp rel/apple/GRTEST#FE1000 prodos/demos/GRTEST.REL
|
||||||
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL
|
cp rel/apple/DGRTEST#FE1000 prodos/demos/DGRTEST.REL
|
||||||
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
cp rel/apple/HGRTEST#FE1000 prodos/demos/HGRTEST.REL
|
||||||
cp rel/apple/SFM#FE1000 prodos/demos/SFM.REL
|
|
||||||
cp rel/apple/ROD#FE1000 prodos/demos/ROD.REL
|
cp rel/apple/ROD#FE1000 prodos/demos/ROD.REL
|
||||||
cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL
|
cp rel/RPNCALC#FE1000 prodos/demos/RPNCALC.REL
|
||||||
cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
|
cp rel/LZ4CAT#FE1000 prodos/demos/LZ4CAT.REL
|
||||||
cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.REL
|
cp rel/PRIMEGAP#FE1000 prodos/demos/PRIMEGAP.REL
|
||||||
|
|
||||||
|
mkdir prodos/demos/spiders
|
||||||
|
cp rel/apple/SFM#FE1000 prodos/demos/spiders/SFM.REL
|
||||||
|
cp rel/apple/SFMSPRT#FE1000 prodos/demos/spiders/SFMSPRT.REL
|
||||||
|
|
||||||
mkdir prodos/demos/rogue
|
mkdir prodos/demos/rogue
|
||||||
cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
|
cp rel/ROGUE#FE1000 prodos/demos/rogue/ROGUE.REL
|
||||||
cp rel/ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL
|
cp rel/ROGUECOMBAT#FE1000 prodos/demos/rogue/ROGUECOMBAT.REL
|
||||||
|
@ -134,6 +137,7 @@ cp samplesrc/fatcat.pla prodos/bld/samples/FATCAT.PLA.TXT
|
||||||
cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT
|
cp samplesrc/gfxdemo.pla prodos/bld/samples/GFXDEMO.PLA.TXT
|
||||||
cp samplesrc/lz4cat.pla prodos/bld/samples/Z4CAT.PLA.TXT
|
cp samplesrc/lz4cat.pla prodos/bld/samples/Z4CAT.PLA.TXT
|
||||||
cp samplesrc/sfm.pla prodos/bld/samples/SFM.PLA.TXT
|
cp samplesrc/sfm.pla prodos/bld/samples/SFM.PLA.TXT
|
||||||
|
cp samplesrc/sfmsprt.pla prodos/bld/samples/SFMSPRT.PLA.TXT
|
||||||
|
|
||||||
#mkdir prodos/bld/examples
|
#mkdir prodos/bld/examples
|
||||||
#cp samplesrc/examples/ex.1.pla prodos/bld/examples/EX.1.PLA.TXT
|
#cp samplesrc/examples/ex.1.pla prodos/bld/examples/EX.1.PLA.TXT
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
|
//
|
||||||
|
// Ziggy Stardust and the Spiders from Mars
|
||||||
|
//
|
||||||
include "inc/cmdsys.plh"
|
include "inc/cmdsys.plh"
|
||||||
include "inc/hgrlib.plh"
|
include "inc/hgrlib.plh"
|
||||||
include "inc/hgrsprite.plh"
|
include "inc/hgrsprite.plh"
|
||||||
|
@ -9,185 +12,93 @@ const SHIP_SPRTNUM = 0
|
||||||
const MISSLE_SPRTNUM = 1
|
const MISSLE_SPRTNUM = 1
|
||||||
const WEB_SPRTBASE = 2
|
const WEB_SPRTBASE = 2
|
||||||
const SPIDER_SPRTEBASE = 8
|
const SPIDER_SPRTEBASE = 8
|
||||||
const FULL_CHARGE = 20
|
const LASER_RECHARGE = 20
|
||||||
|
const MISSLE_RELOAD = 10
|
||||||
const ATTACK_SPEED = 12
|
const ATTACK_SPEED = 12
|
||||||
const SWARM_LIMIT = 52
|
const SWARM_LIMIT = 52
|
||||||
const FASTMOVE_LIMIT = 120
|
const FASTMOVE_LIMIT = 120
|
||||||
const WEB_LIMIT = 152
|
const WEB_LIMIT = 152
|
||||||
const YSHIP = 180
|
const YSHIP = 180
|
||||||
|
const LASER_BUZZ = 20
|
||||||
|
const ATTACK_BUZZ = 5
|
||||||
|
const WEB1_BUZZ = 10
|
||||||
|
const WEB2_BUZZ = 12
|
||||||
|
const WEB3_BUZZ = 14
|
||||||
|
const SPLAT_BUZZ = 40
|
||||||
|
|
||||||
byte egg3 = $88,$88,$83,$33,$38,$88,$88
|
var sprtEgg1, sprtEgg2, sprtEgg3, sprtEgg
|
||||||
byte = $88,$83,$33,$11,$33,$38,$88
|
var sprtSpider1, sprtSpider2, sprtSpider3, sprtSpider
|
||||||
byte = $83,$31,$11,$11,$11,$13,$38
|
var sprtSplat1, sprtSplat2
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $33,$11,$11,$11,$11,$11,$33
|
|
||||||
byte = $83,$31,$11,$11,$11,$13,$38
|
|
||||||
byte = $88,$83,$33,$11,$33,$38,$88
|
|
||||||
byte = $88,$88,$83,$33,$38,$88,$88
|
|
||||||
byte egg2 = $88,$88,$83,$33,$38,$88,$88
|
|
||||||
byte = $88,$83,$33,$11,$33,$38,$88
|
|
||||||
byte = $83,$30,$11,$00,$11,$13,$38
|
|
||||||
byte = $33,$11,$00,$11,$00,$11,$33
|
|
||||||
byte = $33,$00,$11,$00,$11,$00,$33
|
|
||||||
byte = $33,$11,$00,$11,$00,$11,$33
|
|
||||||
byte = $33,$00,$11,$00,$11,$00,$33
|
|
||||||
byte = $33,$11,$00,$11,$00,$11,$33
|
|
||||||
byte = $33,$00,$11,$00,$11,$00,$33
|
|
||||||
byte = $83,$31,$00,$11,$00,$13,$38
|
|
||||||
byte = $88,$83,$33,$00,$33,$38,$88
|
|
||||||
byte = $88,$88,$83,$33,$38,$88,$88
|
|
||||||
byte egg1 = $88,$88,$83,$33,$38,$88,$88
|
|
||||||
byte = $88,$83,$33,$00,$33,$38,$88
|
|
||||||
byte = $83,$30,$00,$00,$00,$03,$38
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $33,$00,$00,$00,$00,$00,$33
|
|
||||||
byte = $83,$30,$00,$00,$00,$03,$38
|
|
||||||
byte = $88,$83,$33,$11,$33,$38,$88
|
|
||||||
byte = $88,$88,$83,$33,$38,$88,$88
|
|
||||||
byte spider3 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
|
||||||
byte = $33,$88,$83,$32,$22,$22,$23,$38,$88,$33
|
|
||||||
byte = $83,$38,$83,$32,$22,$22,$23,$38,$83,$38
|
|
||||||
byte = $88,$83,$33,$22,$22,$22,$22,$33,$38,$88
|
|
||||||
byte = $33,$88,$33,$22,$22,$22,$22,$33,$88,$33
|
|
||||||
byte = $88,$33,$38,$33,$22,$22,$33,$83,$33,$88
|
|
||||||
byte = $88,$88,$83,$33,$22,$22,$33,$38,$88,$88
|
|
||||||
byte = $88,$33,$33,$33,$22,$22,$33,$33,$33,$88
|
|
||||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
|
||||||
byte = $88,$88,$33,$33,$22,$22,$33,$33,$88,$88
|
|
||||||
byte = $88,$33,$88,$33,$22,$22,$33,$88,$33,$88
|
|
||||||
byte = $33,$88,$88,$83,$32,$23,$38,$88,$88,$33
|
|
||||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
|
||||||
byte spider2 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
|
||||||
byte = $33,$88,$83,$30,$02,$20,$03,$38,$88,$33
|
|
||||||
byte = $83,$38,$83,$32,$20,$02,$23,$38,$83,$38
|
|
||||||
byte = $88,$83,$33,$20,$02,$20,$02,$33,$38,$88
|
|
||||||
byte = $33,$88,$33,$02,$20,$02,$20,$33,$88,$33
|
|
||||||
byte = $88,$33,$38,$30,$02,$20,$03,$83,$33,$88
|
|
||||||
byte = $88,$88,$83,$33,$20,$02,$33,$38,$88,$88
|
|
||||||
byte = $88,$33,$33,$30,$02,$20,$03,$33,$33,$88
|
|
||||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
|
||||||
byte = $88,$88,$33,$30,$02,$20,$03,$33,$88,$88
|
|
||||||
byte = $88,$33,$88,$33,$20,$02,$33,$88,$33,$88
|
|
||||||
byte = $33,$88,$88,$83,$32,$23,$38,$88,$88,$33
|
|
||||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
|
||||||
byte spider1 = $33,$88,$88,$33,$33,$33,$33,$88,$88,$33
|
|
||||||
byte = $33,$88,$83,$30,$00,$00,$03,$38,$88,$33
|
|
||||||
byte = $83,$38,$83,$30,$00,$00,$03,$38,$83,$38
|
|
||||||
byte = $88,$83,$33,$00,$00,$00,$00,$33,$38,$88
|
|
||||||
byte = $33,$88,$33,$00,$00,$00,$00,$33,$88,$33
|
|
||||||
byte = $88,$33,$38,$33,$00,$00,$33,$83,$33,$88
|
|
||||||
byte = $88,$88,$83,$33,$00,$00,$33,$38,$88,$88
|
|
||||||
byte = $88,$33,$33,$30,$00,$00,$03,$33,$33,$88
|
|
||||||
byte = $33,$88,$88,$88,$33,$33,$88,$88,$88,$33
|
|
||||||
byte = $88,$88,$33,$30,$00,$00,$03,$33,$88,$88
|
|
||||||
byte = $88,$33,$88,$33,$00,$00,$33,$88,$33,$88
|
|
||||||
byte = $33,$88,$88,$83,$30,$03,$38,$88,$88,$33
|
|
||||||
byte = $88,$88,$88,$88,$33,$33,$88,$88,$88,$88
|
|
||||||
byte web1 = $88,$83,$38,$88
|
|
||||||
byte = $88,$38,$83,$88
|
|
||||||
byte = $88,$38,$83,$88
|
|
||||||
byte = $88,$33,$33,$88
|
|
||||||
byte = $83,$38,$83,$38
|
|
||||||
byte = $83,$38,$83,$38
|
|
||||||
byte = $83,$38,$83,$38
|
|
||||||
byte = $33,$33,$33,$33
|
|
||||||
byte web2 = $88,$33,$83,$38,$33,$88
|
|
||||||
byte = $88,$38,$83,$38,$83,$88
|
|
||||||
byte = $83,$38,$83,$38,$83,$38
|
|
||||||
byte = $83,$33,$33,$33,$33,$38
|
|
||||||
byte = $83,$38,$83,$38,$83,$38
|
|
||||||
byte = $83,$38,$83,$38,$83,$38
|
|
||||||
byte = $33,$88,$83,$38,$88,$33
|
|
||||||
byte = $33,$33,$33,$33,$33,$33
|
|
||||||
byte web3 = $88,$83,$38,$83,$38,$83,$38,$83,$38,$88
|
|
||||||
byte = $88,$83,$38,$83,$38,$83,$38,$83,$38,$88
|
|
||||||
byte = $88,$33,$88,$33,$88,$88,$33,$88,$33,$88
|
|
||||||
byte = $88,$33,$33,$33,$33,$33,$33,$33,$33,$88
|
|
||||||
byte = $83,$38,$88,$33,$83,$38,$33,$88,$83,$38
|
|
||||||
byte = $83,$38,$83,$38,$83,$38,$83,$38,$83,$38
|
|
||||||
byte = $33,$88,$83,$38,$83,$38,$83,$38,$88,$33
|
|
||||||
byte = $33,$38,$33,$33,$33,$33,$33,$33,$33,$33
|
|
||||||
byte ship = $CC,$CC,$CC,$77,$CC,$CC,$CC
|
|
||||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
|
||||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
|
||||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
|
||||||
byte = $CC,$CC,$C7,$77,$7C,$CC,$CC
|
|
||||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
|
||||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
|
||||||
byte = $77,$CC,$77,$66,$77,$CC,$77
|
|
||||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
|
||||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
|
||||||
byte = $77,$CC,$77,$77,$77,$CC,$77
|
|
||||||
byte = $77,$C7,$77,$77,$77,$7C,$77
|
|
||||||
byte = $77,$77,$75,$55,$57,$77,$77
|
|
||||||
byte = $77,$77,$75,$55,$57,$77,$77
|
|
||||||
byte missle = $CC,$55,$CC
|
|
||||||
byte = $CC,$55,$CC
|
|
||||||
byte = $CC,$55,$CC
|
|
||||||
byte = $CC,$55,$CC
|
|
||||||
byte = $CC,$55,$CC
|
|
||||||
byte = $CC,$55,$CC
|
|
||||||
byte = $C5,$55,$5C
|
|
||||||
byte = $55,$55,$55
|
|
||||||
byte dummy = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
byte = $88,$88,$88,$88
|
|
||||||
var sprtEgg1, sprtEgg2, sprtEgg3
|
|
||||||
var sprtSpider1, sprtSpider2, sprtSpider3
|
|
||||||
var sprtWeb1, sprtWeb2, sprtWeb3
|
var sprtWeb1, sprtWeb2, sprtWeb3
|
||||||
var sprtShip, sprtMissle, sprtDummy
|
var sprtShip, sprtMissle, sprtDummy
|
||||||
var[NUMSTARS] xstar
|
var[NUMSTARS] xstar
|
||||||
byte[NUMSTARS] ystar
|
byte[NUMSTARS] ystar
|
||||||
byte won, curstar
|
byte curstar, buzz
|
||||||
def initStars#0
|
|
||||||
byte k
|
//
|
||||||
|
// Apple II speaker tone generator routine
|
||||||
|
//
|
||||||
|
//asm spkrTone(pitch, duration)#0
|
||||||
|
byte _spkrTone[]
|
||||||
|
byte = $86, $E5 // STX ESP
|
||||||
|
byte = $B4, $C0 // LDY ESTKH,X
|
||||||
|
byte = $B5, $D0 // LDA ESTKL,X
|
||||||
|
byte = $F0, $01 // BEQ +1
|
||||||
|
byte = $C8 // INY
|
||||||
|
byte = $85, $08 // STA DSTL
|
||||||
|
byte = $84, $09 // STY DSTH
|
||||||
|
byte = $B4, $C1 // LDY ESTKL+1,X
|
||||||
|
byte = $B5, $D1 // LDA ESTKL+1,X
|
||||||
|
byte = $F0, $01 // BEQ +1
|
||||||
|
byte = $C8 // INY
|
||||||
|
byte = $85, $E7 // STA TMPL
|
||||||
|
byte = $84, $E8 // STY TMPH
|
||||||
|
byte = $AA // TAX
|
||||||
|
byte = $A9, $FF // LDA #$FF
|
||||||
|
byte = $08 // PHP
|
||||||
|
byte = $78 // SEI
|
||||||
|
byte = $EA // NOP
|
||||||
|
byte = $EA // NOP
|
||||||
|
byte = $B0, $00 // BCS +0
|
||||||
|
byte = $38 // SEC
|
||||||
|
byte = $CA // DEX
|
||||||
|
byte = $D0, $18 // BNE +18
|
||||||
|
byte = $88 // DEY
|
||||||
|
byte = $D0, $17 // BNE +17
|
||||||
|
byte = $2C, $30, $C0 // BIT $C030
|
||||||
|
byte = $A6, $E7 // LDX TMPL
|
||||||
|
byte = $A4, $E8 // LDY TMPH
|
||||||
|
byte = $E9, $01 // SBC #$01
|
||||||
|
byte = $B0, $EA // BCS -EA
|
||||||
|
byte = $C6, $08 // DEC DSTL
|
||||||
|
byte = $D0, $EA // BNE -EA
|
||||||
|
byte = $C6, $09 // DEC DSTH
|
||||||
|
byte = $D0, $E6 // BNE -E6
|
||||||
|
byte = $F0, $07 // BEQ +8
|
||||||
|
byte = $EA // NOP
|
||||||
|
byte = $EA // NOP
|
||||||
|
byte = $EA, $EA // BIT $C000 (nope)
|
||||||
|
byte = $EA // NOP
|
||||||
|
byte = $D0, $EB // BNE -EA
|
||||||
|
byte = $28 // PLP
|
||||||
|
byte = $A6, $E5 // LDX ESP
|
||||||
|
byte = $E8 // INX
|
||||||
|
byte = $E8 // INX
|
||||||
|
byte = $60 // RTS
|
||||||
|
|
||||||
xstar[0] = 99
|
|
||||||
ystar[0] = 10
|
|
||||||
hgrColor(3)
|
|
||||||
hgrXorPlot(xstar[0], ystar[0])
|
|
||||||
for k = 1 to NUMSTARS-1
|
|
||||||
xstar[k] = (xstar[k - 1] + 97 - k) % 280
|
|
||||||
ystar[k] = (ystar[k - 1] + 19 + k) % YSHIP
|
|
||||||
hgrXorPlot(xstar[k], ystar[k])
|
|
||||||
next
|
|
||||||
curstar = 0
|
|
||||||
end
|
|
||||||
def updateStars#0
|
|
||||||
hgrColor(3)
|
|
||||||
hgrXorPlot(xstar[curstar], ystar[curstar])
|
|
||||||
ystar[curstar]++
|
|
||||||
if ystar[curstar] > YSHIP
|
|
||||||
ystar[curstar] = 0
|
|
||||||
fin
|
|
||||||
hgrXorPlot(xstar[curstar], ystar[curstar])
|
|
||||||
curstar++
|
|
||||||
if curstar >= NUMSTARS; curstar = 0; fin
|
|
||||||
end
|
|
||||||
def game(spdrcnt)#1
|
def game(spdrcnt)#1
|
||||||
var[8] xspdr, yspdr, ixspdr, iyspdr, hatch
|
var[8] xspdr, yspdr, ixspdr, iyspdr, hatch
|
||||||
var xship, xmissle, leftxlaser, rightxlaser, attack
|
var xship, xmissle, leftxlaser, rightxlaser, attack
|
||||||
byte[8] life
|
byte[8] life, death
|
||||||
byte lasercharge, misslecnt, ymissle, leftylaser, rightylaser, lefthit, righthit, width
|
byte lasercharging, missleloading, misslecnt, ymissle
|
||||||
|
byte leftylaser, rightylaser, lefthit, righthit, sprtnum[], width
|
||||||
byte spdrnum, k, xdelta, ydelta, btn0, btn1, webstate
|
byte spdrnum, k, xdelta, ydelta, btn0, btn1, webstate
|
||||||
|
|
||||||
xship = 140
|
xship = 140
|
||||||
ymissle = 255 // Not active value
|
ymissle = 255 // Not active value
|
||||||
misslecnt = 6
|
misslecnt = 6
|
||||||
lasercharge = FULL_CHARGE
|
missleloading = FALSE
|
||||||
|
lasercharging = FALSE
|
||||||
//
|
//
|
||||||
// Initialize the spiders (first is special)
|
// Initialize the spiders (first is special)
|
||||||
//
|
//
|
||||||
|
@ -197,6 +108,7 @@ def game(spdrcnt)#1
|
||||||
iyspdr[0] = -1
|
iyspdr[0] = -1
|
||||||
hatch[0] = 1
|
hatch[0] = 1
|
||||||
life[0] = 3
|
life[0] = 3
|
||||||
|
death[0] = 0
|
||||||
attack = -1
|
attack = -1
|
||||||
webstate = 0
|
webstate = 0
|
||||||
//
|
//
|
||||||
|
@ -211,6 +123,7 @@ def game(spdrcnt)#1
|
||||||
iyspdr[k] = -iyspdr[k - 1]
|
iyspdr[k] = -iyspdr[k - 1]
|
||||||
hatch[k] = k / 2 + 1//hatch[k - 1] + 1
|
hatch[k] = k / 2 + 1//hatch[k - 1] + 1
|
||||||
life[k] = 3
|
life[k] = 3
|
||||||
|
death[k] = 0
|
||||||
next
|
next
|
||||||
//
|
//
|
||||||
// Initialize missle display
|
// Initialize missle display
|
||||||
|
@ -222,7 +135,7 @@ def game(spdrcnt)#1
|
||||||
spriteDrawXor(sprtMissle)
|
spriteDrawXor(sprtMissle)
|
||||||
next
|
next
|
||||||
hgrColor(1)
|
hgrColor(1)
|
||||||
hgrRect(4, YSHIP+6, FULL_CHARGE * 4 + 4, 188)
|
hgrRect(4, YSHIP+6, LASER_RECHARGE * 4 + 4, 188)
|
||||||
//
|
//
|
||||||
// Main game loop
|
// Main game loop
|
||||||
//
|
//
|
||||||
|
@ -278,11 +191,13 @@ def game(spdrcnt)#1
|
||||||
iyspdr[k] = 0
|
iyspdr[k] = 0
|
||||||
spriteAdd(2, sprtWeb1)
|
spriteAdd(2, sprtWeb1)
|
||||||
spritePosIndex(xspdr[k], WEB_LIMIT+7, 2)
|
spritePosIndex(xspdr[k], WEB_LIMIT+7, 2)
|
||||||
|
buzz = WEB1_BUZZ
|
||||||
webstate = 1
|
webstate = 1
|
||||||
break
|
break
|
||||||
is 1
|
is 1
|
||||||
spriteAdd(3, sprtWeb2)
|
spriteAdd(3, sprtWeb2)
|
||||||
spritePosIndex(xspdr[k], WEB_LIMIT+15, 3)
|
spritePosIndex(xspdr[k], WEB_LIMIT+15, 3)
|
||||||
|
buzz = WEB2_BUZZ
|
||||||
webstate = 2
|
webstate = 2
|
||||||
break
|
break
|
||||||
is 2
|
is 2
|
||||||
|
@ -299,6 +214,7 @@ def game(spdrcnt)#1
|
||||||
//
|
//
|
||||||
return FALSE
|
return FALSE
|
||||||
fin
|
fin
|
||||||
|
buzz = WEB3_BUZZ
|
||||||
webstate++
|
webstate++
|
||||||
wend
|
wend
|
||||||
else
|
else
|
||||||
|
@ -306,7 +222,9 @@ def game(spdrcnt)#1
|
||||||
//
|
//
|
||||||
// Move towards player during attack, but not too fast
|
// Move towards player during attack, but not too fast
|
||||||
//
|
//
|
||||||
xspdr[k] = xspdr[k] + (xship - xspdr[k]) / (yspdr[k] > FASTMOVE_LIMIT ?? 2 :: 4)
|
xdelta = yspdr[k] > FASTMOVE_LIMIT ?? 2 :: 4
|
||||||
|
xspdr[k] = xspdr[k] + (xship - xspdr[k]) / xdelta
|
||||||
|
buzz = ATTACK_BUZZ
|
||||||
else
|
else
|
||||||
//
|
//
|
||||||
// Retreat at a progressively faster rate
|
// Retreat at a progressively faster rate
|
||||||
|
@ -351,21 +269,47 @@ def game(spdrcnt)#1
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||||
|
elsif death[k]
|
||||||
|
//
|
||||||
|
// Splat sequence
|
||||||
|
//
|
||||||
|
death[k]--
|
||||||
|
if death[k]
|
||||||
|
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtSplat2))
|
||||||
|
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||||
|
else
|
||||||
|
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtDummy))
|
||||||
|
spritePosIndex(0, 0, k+SPIDER_SPRTEBASE)
|
||||||
|
spdrcnt--
|
||||||
|
if not spdrcnt
|
||||||
|
return TRUE
|
||||||
|
fin
|
||||||
|
buzz = SPLAT_BUZZ
|
||||||
|
fin
|
||||||
fin
|
fin
|
||||||
next
|
next
|
||||||
//
|
//
|
||||||
// Move ship
|
// Move ship
|
||||||
//
|
//
|
||||||
xdelta, ydelta, btn0, btn1 = joypos(ymissle/4)
|
xdelta, ydelta, btn0, btn1 = joypos(buzz)
|
||||||
|
buzz = spdrcnt * 4
|
||||||
xship = xship + ((xdelta + 4) / 8 - 5)
|
xship = xship + ((xdelta + 4) / 8 - 5)
|
||||||
if xship < 0; xship = 0; fin
|
if xship < 0; xship = 0; fin
|
||||||
if xship > 279; xship = 279; fin
|
if xship > 279; xship = 279; fin
|
||||||
if btn0 and misslecnt and ymissle == 255
|
spritePosIndex(xship, YSHIP, SHIP_SPRTNUM)
|
||||||
|
//
|
||||||
|
// Missle
|
||||||
|
//
|
||||||
|
if misslecnt and missleloading
|
||||||
|
missleloading--
|
||||||
|
fin
|
||||||
|
if btn0 and not missleloading
|
||||||
//
|
//
|
||||||
// Fire missle
|
// Fire missle
|
||||||
//
|
//
|
||||||
xmissle = xship
|
xmissle = xship
|
||||||
ymissle = YSHIP-15
|
ymissle = YSHIP-15
|
||||||
|
missleloading = MISSLE_RELOAD
|
||||||
misslecnt--
|
misslecnt--
|
||||||
spritePos(misslecnt * 16 + 160, 184, sprtMissle) // Erase from armory
|
spritePos(misslecnt * 16 + 160, 184, sprtMissle) // Erase from armory
|
||||||
spriteDrawXor(sprtMissle)
|
spriteDrawXor(sprtMissle)
|
||||||
|
@ -397,8 +341,9 @@ def game(spdrcnt)#1
|
||||||
// Hit & kill spider
|
// Hit & kill spider
|
||||||
//
|
//
|
||||||
life[k] = 0
|
life[k] = 0
|
||||||
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtDummy))
|
death[k] = 2
|
||||||
spritePosIndex(0, 0, k+SPIDER_SPRTEBASE)
|
spriteAdd(k+SPIDER_SPRTEBASE, spriteDup(sprtSplat1))
|
||||||
|
spritePosIndex(xspdr[k], yspdr[k], k+SPIDER_SPRTEBASE)
|
||||||
if attack == k // Was it attacking?
|
if attack == k // Was it attacking?
|
||||||
attack = -1
|
attack = -1
|
||||||
spriteDel(2)
|
spriteDel(2)
|
||||||
|
@ -406,10 +351,6 @@ def game(spdrcnt)#1
|
||||||
spriteDel(4)
|
spriteDel(4)
|
||||||
webstate = 0
|
webstate = 0
|
||||||
fin
|
fin
|
||||||
spdrcnt--
|
|
||||||
if not spdrcnt
|
|
||||||
return TRUE
|
|
||||||
fin
|
|
||||||
//
|
//
|
||||||
// Remove missle
|
// Remove missle
|
||||||
//
|
//
|
||||||
|
@ -419,20 +360,24 @@ def game(spdrcnt)#1
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
next
|
next
|
||||||
|
buzz = ymissle/4
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
if lasercharge < FULL_CHARGE
|
//
|
||||||
lasercharge++
|
// Lasers
|
||||||
|
//
|
||||||
|
if lasercharging
|
||||||
|
lasercharging--
|
||||||
hgrColor(1)
|
hgrColor(1)
|
||||||
hgrRect((lasercharge - 1) * 4 + 5, YSHIP+6, lasercharge * 4 + 4, 188)
|
hgrRect(81 - lasercharging*4, YSHIP+6, 84 - lasercharging*4, 188)
|
||||||
fin
|
fin
|
||||||
if btn1 and lasercharge == FULL_CHARGE
|
if btn1 and not lasercharging
|
||||||
//
|
//
|
||||||
// Fire laser
|
// Fire laser
|
||||||
//
|
//
|
||||||
hgrColor(0)
|
hgrColor(0)
|
||||||
hgrRect(4, YSHIP+6, FULL_CHARGE * 4 + 4, 188)
|
hgrRect(4, YSHIP+6, LASER_RECHARGE * 4 + 4, 188)
|
||||||
lasercharge = 0
|
lasercharging = LASER_RECHARGE
|
||||||
leftxlaser = xship - 7
|
leftxlaser = xship - 7
|
||||||
rightxlaser = xship + 7
|
rightxlaser = xship + 7
|
||||||
leftylaser = 0
|
leftylaser = 0
|
||||||
|
@ -449,13 +394,13 @@ def game(spdrcnt)#1
|
||||||
else
|
else
|
||||||
width = 10 // Spider width
|
width = 10 // Spider width
|
||||||
fin
|
fin
|
||||||
if leftxlaser >= xspdr[k] - width and leftxlaser <= xspdr[k] + width
|
if leftxlaser >= xspdr[k]-width and leftxlaser <= xspdr[k]+width
|
||||||
if yspdr[k] > leftylaser
|
if yspdr[k] > leftylaser
|
||||||
lefthit = k
|
lefthit = k
|
||||||
leftylaser = yspdr[k]
|
leftylaser = yspdr[k]
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
if rightxlaser >= xspdr[k] - width and rightxlaser <= xspdr[k] + width
|
if rightxlaser >= xspdr[k]-width and rightxlaser <= xspdr[k]+width
|
||||||
if yspdr[k] > rightylaser
|
if yspdr[k] > rightylaser
|
||||||
righthit = k
|
righthit = k
|
||||||
rightylaser = yspdr[k]
|
rightylaser = yspdr[k]
|
||||||
|
@ -467,10 +412,6 @@ def game(spdrcnt)#1
|
||||||
// Draw Laser beams
|
// Draw Laser beams
|
||||||
//
|
//
|
||||||
hgrColor(3)
|
hgrColor(3)
|
||||||
//for k=0 to 1
|
|
||||||
// if leftxlaser + k >= 0; hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+k); fin
|
|
||||||
// if rightxlaser + k < 280;hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-k); fin
|
|
||||||
//next
|
|
||||||
if leftxlaser >= 0
|
if leftxlaser >= 0
|
||||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
||||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
||||||
|
@ -479,7 +420,10 @@ def game(spdrcnt)#1
|
||||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser)
|
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser)
|
||||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
||||||
fin
|
fin
|
||||||
|
buzz = LASER_BUZZ
|
||||||
|
(@_spkrTone)(15, 1)#0
|
||||||
if lefthit <> 255
|
if lefthit <> 255
|
||||||
|
sprtnum = lefthit + SPIDER_SPRTEBASE
|
||||||
//
|
//
|
||||||
// Hit
|
// Hit
|
||||||
//
|
//
|
||||||
|
@ -488,8 +432,9 @@ def game(spdrcnt)#1
|
||||||
//
|
//
|
||||||
// Kill spider
|
// Kill spider
|
||||||
//
|
//
|
||||||
spriteAdd(lefthit + SPIDER_SPRTEBASE, spriteDup(sprtDummy))
|
death[lefthit] = 2
|
||||||
spritePosIndex(0, 0, lefthit + SPIDER_SPRTEBASE)
|
spriteAdd(sprtnum, spriteDup(sprtSplat1))
|
||||||
|
spritePosIndex(xspdr[lefthit], yspdr[lefthit], sprtnum)
|
||||||
if attack == lefthit // Was it attacking?
|
if attack == lefthit // Was it attacking?
|
||||||
spriteDel(2)
|
spriteDel(2)
|
||||||
spriteDel(3)
|
spriteDel(3)
|
||||||
|
@ -497,23 +442,22 @@ def game(spdrcnt)#1
|
||||||
webstate = 0
|
webstate = 0
|
||||||
attack = -1
|
attack = -1
|
||||||
fin
|
fin
|
||||||
spdrcnt--
|
|
||||||
if not spdrcnt
|
|
||||||
return TRUE
|
|
||||||
fin
|
|
||||||
else
|
else
|
||||||
//
|
//
|
||||||
// Dim color to show life status
|
// Dim color to show life status
|
||||||
//
|
//
|
||||||
if hatch[lefthit]
|
if hatch[lefthit]
|
||||||
spriteAdd(lefthit + SPIDER_SPRTEBASE, spriteDup(life[lefthit] == 2 ?? sprtEgg2 :: sprtEgg1))
|
sprtEgg = life[lefthit] == 2 ?? sprtEgg2 :: sprtEgg1
|
||||||
|
spriteAdd(sprtnum, spriteDup(sprtEgg))
|
||||||
else
|
else
|
||||||
spriteAdd(lefthit + SPIDER_SPRTEBASE, spriteDup(life[lefthit] == 2 ?? sprtSpider2 :: sprtSpider1))
|
sprtSpider = life[lefthit] == 2 ?? sprtSpider2 :: sprtSpider1
|
||||||
|
spriteAdd(sprtnum, spriteDup(sprtSpider))
|
||||||
fin
|
fin
|
||||||
spritePosIndex(xspdr[lefthit], yspdr[lefthit], lefthit+SPIDER_SPRTEBASE)
|
spritePosIndex(xspdr[lefthit], yspdr[lefthit], sprtnum)
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
if righthit <> 255 and life[righthit]
|
if righthit <> 255 and life[righthit]
|
||||||
|
sprtnum = righthit + SPIDER_SPRTEBASE
|
||||||
//
|
//
|
||||||
// Hit
|
// Hit
|
||||||
//
|
//
|
||||||
|
@ -522,8 +466,9 @@ def game(spdrcnt)#1
|
||||||
//
|
//
|
||||||
// Kill spider
|
// Kill spider
|
||||||
//
|
//
|
||||||
spriteAdd(righthit + SPIDER_SPRTEBASE, spriteDup(sprtDummy))
|
death[righthit] = 2
|
||||||
spritePosIndex(0, 0, righthit + SPIDER_SPRTEBASE)
|
spriteAdd(sprtnum, spriteDup(sprtSplat1))
|
||||||
|
spritePosIndex(xspdr[righthit], yspdr[righthit], sprtnum)
|
||||||
if attack == righthit // Was it attacking?
|
if attack == righthit // Was it attacking?
|
||||||
spriteDel(2)
|
spriteDel(2)
|
||||||
spriteDel(3)
|
spriteDel(3)
|
||||||
|
@ -531,30 +476,24 @@ def game(spdrcnt)#1
|
||||||
webstate = 0
|
webstate = 0
|
||||||
attack = -1
|
attack = -1
|
||||||
fin
|
fin
|
||||||
spdrcnt--
|
|
||||||
if not spdrcnt
|
|
||||||
return TRUE
|
|
||||||
fin
|
|
||||||
else
|
else
|
||||||
//
|
//
|
||||||
// Dim color to show life status
|
// Dim color to show life status
|
||||||
//
|
//
|
||||||
if hatch[righthit]
|
if hatch[righthit]
|
||||||
spriteAdd(righthit + SPIDER_SPRTEBASE, spriteDup(life[righthit] == 2 ?? sprtEgg2 :: sprtEgg1))
|
sprtEgg = life[righthit] == 2 ?? sprtEgg2 :: sprtEgg1
|
||||||
|
spriteAdd(sprtnum, spriteDup(sprtEgg))
|
||||||
else
|
else
|
||||||
spriteAdd(righthit + SPIDER_SPRTEBASE, spriteDup(life[righthit] == 2 ?? sprtSpider2 :: sprtSpider1))
|
sprtSpider = life[righthit] == 2 ?? sprtSpider2 :: sprtSpider1
|
||||||
|
spriteAdd(sprtnum, spriteDup(sprtSpider))
|
||||||
fin
|
fin
|
||||||
spritePosIndex(xspdr[righthit], yspdr[righthit], righthit+SPIDER_SPRTEBASE)
|
spritePosIndex(xspdr[righthit], yspdr[righthit], sprtnum)
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
//
|
//
|
||||||
// Undraw lasers
|
// Undraw lasers
|
||||||
//
|
//
|
||||||
hgrColor(3)
|
hgrColor(3)
|
||||||
//for k=0 to 1
|
|
||||||
// if leftxlaser + k >= 0; hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+k); fin
|
|
||||||
// if rightxlaser + k < 280;hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-k); fin
|
|
||||||
//next
|
|
||||||
if leftxlaser >= 0
|
if leftxlaser >= 0
|
||||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser)
|
||||||
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
hgrXorVLin(leftylaser, YSHIP-8, leftxlaser+1)
|
||||||
|
@ -564,35 +503,110 @@ def game(spdrcnt)#1
|
||||||
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
hgrXorVLin(rightylaser, YSHIP-8, rightxlaser-1)
|
||||||
fin
|
fin
|
||||||
fin
|
fin
|
||||||
spritePosIndex(xship, YSHIP, SHIP_SPRTNUM)
|
|
||||||
spriteDrawXorList()
|
spriteDrawXorList()
|
||||||
updateStars
|
//
|
||||||
until ^$C000 == $9B
|
// Update stars
|
||||||
|
//
|
||||||
|
hgrColor(3)
|
||||||
|
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||||
|
ystar[curstar]++
|
||||||
|
if ystar[curstar] > YSHIP
|
||||||
|
ystar[curstar] = 0
|
||||||
|
fin
|
||||||
|
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||||
|
curstar++
|
||||||
|
if curstar >= NUMSTARS; curstar = 0; fin
|
||||||
|
until ^$C000 == $9B // ESCape key pressed
|
||||||
getc
|
getc
|
||||||
return FALSE
|
return FALSE
|
||||||
end
|
end
|
||||||
|
//
|
||||||
|
// Initialization
|
||||||
|
//
|
||||||
|
puts("Loading");
|
||||||
|
putc('.')
|
||||||
|
sprtShip = spriteRead("SHIP")
|
||||||
|
if not sprtShip
|
||||||
|
cmdsys:modexec("SFMSPRT")
|
||||||
|
sprtShip = spriteRead("SHIP")
|
||||||
|
if not sprtShip
|
||||||
|
puts("\nError: Unable to compile sprites.\n")
|
||||||
|
return -1
|
||||||
|
fin
|
||||||
|
fin
|
||||||
|
putc('.')
|
||||||
|
sprtMissle = spriteRead("MISSLE")
|
||||||
|
putc('.')
|
||||||
|
sprtEgg3 = spriteRead("EGG3")
|
||||||
|
putc('.')
|
||||||
|
sprtEgg2 = spriteRead("EGG2")
|
||||||
|
putc('.')
|
||||||
|
sprtEgg1 = spriteRead("EGG1")
|
||||||
|
putc('.')
|
||||||
|
sprtSpider3= spriteRead("SPIDER3")
|
||||||
|
putc('.')
|
||||||
|
sprtSpider2= spriteRead("SPIDER2")
|
||||||
|
putc('.')
|
||||||
|
sprtSpider1= spriteRead("SPIDER1")
|
||||||
|
putc('.')
|
||||||
|
sprtWeb1 = spriteRead("WEB1")
|
||||||
|
putc('.')
|
||||||
|
sprtWeb2 = spriteRead("WEB2")
|
||||||
|
putc('.')
|
||||||
|
sprtWeb3 = spriteRead("WEB3")
|
||||||
|
putc('.')
|
||||||
|
sprtSplat1 = spriteRead("SPLAT1")
|
||||||
|
putc('.')
|
||||||
|
sprtSplat2 = spriteRead("SPLAT2")
|
||||||
|
putc('.')
|
||||||
|
sprtDummy = spriteRead("DUMMY")
|
||||||
|
//
|
||||||
|
// Heat up JIT compiler
|
||||||
|
//
|
||||||
|
spriteAdd(0, sprtDummy)
|
||||||
|
for curstar = 0 to 50
|
||||||
|
putc('.')
|
||||||
|
spriteDrawXorList()
|
||||||
|
next
|
||||||
hgrMode
|
hgrMode
|
||||||
spriteDrawBuf(hgrDrawBuf(0)) // So we can see the compile process
|
spriteDrawBuf(hgrDrawBuf(0)) // Single buffered
|
||||||
sprtShip = spriteCompile(14, 14, 7, 13, @ship)
|
|
||||||
sprtMissle = spriteCompile( 6, 8, 3, 0, @missle)
|
|
||||||
sprtEgg3 = spriteCompile(14, 12, 7, 6, @egg3)
|
|
||||||
sprtEgg2 = spriteCompile(14, 12, 7, 6, @egg2)
|
|
||||||
sprtEgg1 = spriteCompile(14, 12, 7, 6, @egg1)
|
|
||||||
sprtSpider3= spriteCompile(20, 13, 10, 6, @spider3)
|
|
||||||
sprtSpider2= spriteCompile(20, 13, 10, 6, @spider2)
|
|
||||||
sprtSpider1= spriteCompile(20, 13, 10, 6, @spider1)
|
|
||||||
sprtWeb1 = spriteCompile( 8, 8, 4, 0, @web1)
|
|
||||||
sprtWeb2 = spriteCompile(12, 8, 6, 0, @web2)
|
|
||||||
sprtWeb3 = spriteCompile(20, 8, 10, 0, @web3)
|
|
||||||
sprtDummy = spriteCompile( 7, 8, 0, 0, @dummy)
|
|
||||||
hgrColor(0)
|
|
||||||
hgrClear()
|
|
||||||
spriteAdd(SHIP_SPRTNUM, sprtShip)
|
spriteAdd(SHIP_SPRTNUM, sprtShip)
|
||||||
spriteAdd(SPIDER_SPRTEBASE, sprtEgg3)
|
spriteAdd(SPIDER_SPRTEBASE, sprtEgg3)
|
||||||
initStars
|
//
|
||||||
won = game(8)
|
// Init stars
|
||||||
|
//
|
||||||
|
xstar[0] = 99
|
||||||
|
ystar[0] = 10
|
||||||
|
hgrColor(3)
|
||||||
|
hgrXorPlot(xstar[0], ystar[0])
|
||||||
|
for curstar = 1 to NUMSTARS-1
|
||||||
|
xstar[curstar] = (xstar[curstar - 1] + 97 - curstar) % 280
|
||||||
|
ystar[curstar] = (ystar[curstar - 1] + 19 + curstar) % YSHIP
|
||||||
|
hgrXorPlot(xstar[curstar], ystar[curstar])
|
||||||
|
next
|
||||||
|
curstar = 0
|
||||||
|
if game(8)
|
||||||
|
//
|
||||||
|
// Won
|
||||||
|
//
|
||||||
|
spriteDrawXorList()
|
||||||
|
(@_spkrTone)(100, 20)#0
|
||||||
|
(@_spkrTone)(75, 20)#0
|
||||||
|
(@_spkrTone)(15, 20)#0
|
||||||
|
(@_spkrTone)(25, 100)#0
|
||||||
|
else
|
||||||
|
//
|
||||||
|
// Lost
|
||||||
|
//
|
||||||
|
spriteDrawXorList()
|
||||||
|
(@_spkrTone)(100, 50)#0
|
||||||
|
spriteDrawXor(sprtShip)
|
||||||
|
(@_spkrTone)(150, 50)#0
|
||||||
|
spriteDrawXor(sprtShip)
|
||||||
|
(@_spkrTone)(100, 50)#0
|
||||||
|
spriteDrawXor(sprtShip)
|
||||||
|
(@_spkrTone)(150, 50)#0
|
||||||
|
fin
|
||||||
txtMode
|
txtMode
|
||||||
puts(won ?? "You won!\n" :: "You lost.\n")
|
puts("\nAvailable memory: "); puti(heapavail()); putln
|
||||||
puts("Available memory: "); puti(heapavail()); putln
|
|
||||||
done
|
done
|
||||||
|
|
|
@ -53,5 +53,6 @@ echo "BLD/SAMPLES/FATCAT.PLA"; atftp $1 --put -l samplesrc/fatcat.pla -r $
|
||||||
echo "BLD/SAMPLES/GFXDEMO.PLA"; atftp $1 --put -l samplesrc/gfxdemo.pla -r $2/BLD/SAMPLES/GFXDEMO.PLA#040000
|
echo "BLD/SAMPLES/GFXDEMO.PLA"; atftp $1 --put -l samplesrc/gfxdemo.pla -r $2/BLD/SAMPLES/GFXDEMO.PLA#040000
|
||||||
echo "BLD/SAMPLES/LZ4CAT.PLA"; atftp $1 --put -l samplesrc/lz4cat.pla -r $2/BLD/SAMPLES/LZ4CAT.PLA#040000
|
echo "BLD/SAMPLES/LZ4CAT.PLA"; atftp $1 --put -l samplesrc/lz4cat.pla -r $2/BLD/SAMPLES/LZ4CAT.PLA#040000
|
||||||
echo "BLD/SAMPLES/SFM.PLA"; atftp $1 --put -l samplesrc/sfm.pla -r $2/BLD/SAMPLES/SFM.PLA#040000
|
echo "BLD/SAMPLES/SFM.PLA"; atftp $1 --put -l samplesrc/sfm.pla -r $2/BLD/SAMPLES/SFM.PLA#040000
|
||||||
|
echo "BLD/SAMPLES/SFMSPRT.PLA"; atftp $1 --put -l samplesrc/sfmsprt.pla -r $2/BLD/SAMPLES/SFMSPRT.PLA#040000
|
||||||
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
|
echo "BLD/SAMPLES/MON.PLA"; atftp $1 --put -l utilsrc/apple/mon.pla -r $2/BLD/SAMPLES/MON.PLA#040000
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,10 @@ echo "DEMOS/HGRTEST"; atftp $1 --put -l rel/apple/HGRTEST#FE1000
|
||||||
echo "DEMOS/GRTEST"; atftp $1 --put -l rel/apple/GRTEST#FE1000 -r $2/DEMOS/GRTEST#FE1000
|
echo "DEMOS/GRTEST"; atftp $1 --put -l rel/apple/GRTEST#FE1000 -r $2/DEMOS/GRTEST#FE1000
|
||||||
echo "DEMOS/INT32TEST"; atftp $1 --put -l rel/INT32TEST#FE1000 -r $2/DEMOS/INT32TEST#FE1000
|
echo "DEMOS/INT32TEST"; atftp $1 --put -l rel/INT32TEST#FE1000 -r $2/DEMOS/INT32TEST#FE1000
|
||||||
echo "DEMOS/DGRTEST"; atftp $1 --put -l rel/apple/DGRTEST#FE1000 -r $2/DEMOS/DGRTEST#FE1000
|
echo "DEMOS/DGRTEST"; atftp $1 --put -l rel/apple/DGRTEST#FE1000 -r $2/DEMOS/DGRTEST#FE1000
|
||||||
echo "DEMOS/SFM"; atftp $1 --put -l rel/apple/SFM#FE1000 -r $2/DEMOS/SFM#FE1000
|
|
||||||
|
# Spiders from Mars
|
||||||
|
echo "DEMOS/SPIDERS/SFM"; atftp $1 --put -l rel/apple/SFM#FE1000 -r $2/DEMOS/SPIDERS/SFM#FE1000
|
||||||
|
echo "DEMOS/SPIDERS/SFMSPRT"; atftp $1 --put -l rel/apple/SFMSPRT#FE1000 -r $2/DEMOS/SPIDERS/SFMSPRT#FE1000
|
||||||
|
|
||||||
# Music demo
|
# Music demo
|
||||||
echo "DEMOS/MUSIC/PLAYSEQ"; atftp $1 --put -l rel/apple/PLAYSEQ#FE1000 -r $2/DEMOS/MUSIC/PLAYSEQ#FE1000
|
echo "DEMOS/MUSIC/PLAYSEQ"; atftp $1 --put -l rel/apple/PLAYSEQ#FE1000 -r $2/DEMOS/MUSIC/PLAYSEQ#FE1000
|
||||||
|
|
Loading…
Reference in New Issue
Block a user