maybe theres hope for multiple listings..
charles
edits::::::
- Code: Select all
EG
Fast Basic By Computer Concepts
Copyright 1986, All Rights Reserved
Program: SPRITEXP.BSC
Length: 10 Kilobytes.
Requires 100 KBytes To Run
FHREM Move the sprite with the
REM joystick and press fire
REM to end
REM The backgrund colour is
REM displayed
ON ERROR GOTO clearup
PROCinitjoystick
TXTRECT 0,0,50,20
GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT
CLG 0
PROCinitsprites
HIDEMOUSE
IF SCREENMODE=0 THEN
PROCloadpic("A:\JOKEY.PIC",PHYSBASE)
ELSE FILLCOL 2
CIRCLE 150,100,80
FILLCOL 3
CIRCLE 250,70,70
ENDIF
xpos%=50:ypos%=50:oldsprx%=xpos%:oldspry%=ypos%
REPEAT
REM Delete the next 2 lines
REM to turn off the collision
REM detection and speed up the
REM program
colourhit%=FNcollision(1)
PRINT TAB(1,1)colourhit%
PROCinputmove
IF move=TRUE THEN PROCspriteon(1,xpos%,ypos%)
UNTIL quit=TRUE
OUT 4,8
SHOWMOUSE
END
DEFPROCloadpic(A$,A%)
LOCAL I%,P%
BLOAD A$,A%-128
FOR I%=0 TO 15
P%={A%-124+I%*2}&
SETCOL I%,P%>>8,P%>>4,P%
NEXT I%
ENDPROC
DEFPROCinputmove
move=FALSE
quit=FALSE
IF fire&=-1 THEN quit=TRUE:ENDPROC
oldxpos%=xpos%:oldypos%=ypos%
xpos%=xpos%+joyx&*5
ypos%=ypos%-joyy&*3
IF xpos%<0 THEN xpos%=0
IF xpos%>SCREENWIDTH-sw(1) THEN xpos%=SCREENWIDTH-sw(1)
IF ypos%<0 THEN ypos%=0
IF ypos%>SCREENHEIGHT-sh(1) THEN ypos%=SCREENHEIGHT-sh(1)
IF oldxpos%<>xpos% OR oldypos%<>ypos% THEN move=TRUE
ENDPROC
DEFPROCinitsprites
LOCAL cplane
IF SCREENMODE=0 THEN
cplane=4
ELSE IF SCREENMODE=1 THEN cplane=2 ELSE cplane=1
ENDIF
RESERVE screen,33000
screentwo=(screen+256)AND$FFFF00
screenone=PHYSBASE
LOGBASE=screentwo
GRAFRECT 0,0,SCREENWIDTH,SCREENHEIGHT
CLG 0
LOGBASE=screenone
DIM MFDB&(9)
MFDB&(0)=LOGBASE>>16
MFDB&(1)=LOGBASE AND $FFFF
MFDB&(2)=SCREENWIDTH
MFDB&(3)=SCREENHEIGHT
MFDB&(4)=SCREENWIDTH>>4
MFDB&(5)=0
MFDB&(6)=cplane
MFDB&(7)=0
MFDB&(8)=0
MFDB&(9)=0
DIM MFDB2&(9)
MFDB2&(0)=screentwo>>16
MFDB2&(1)=screentwo AND $FFFF
MFDB2&(2)=SCREENWIDTH
MFDB2&(3)=SCREENHEIGHT
MFDB2&(4)=SCREENWIDTH>>4
MFDB2&(5)=0
MFDB2&(6)=cplane
MFDB2&(7)=0
MFDB2&(8)=0
MFDB2&(9)=0
LOGBASE=screentwo
DIM sh(4),sw(4),oldsprx%(4),oldspry%(4)
RESTORE
REPEAT
READ sprite%
IF sprite%<>0 THEN
READ sh(sprite%),sw(sprite%)
sxpos%=(sprite%-1)*100
FOR sy%=1 TO sh(sprite%)
FOR sx%=1 TO sw(sprite%)
READ sdata%
MARKCOL sdata%
PLOT sx%+sxpos%-1,sy%-1
IF sdata%=0 THEN MARKCOL 1 ELSE MARKCOL 0
PLOT sx%+sxpos%-1,50+sy%-1
NEXT sx%
NEXT sy%
ENDIF
UNTIL sprite%=0
LOGBASE=screenone
PROCassemblecollision
ENDPROC
REM data for each sprite
REM replace with your own data
DATA 1,16,16
DATA 0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0
DATA 0,0,0,1,1,1,15,15,1,1,1,1,0,0,0,0
DATA 0,0,0,1,15,4,4,15,4,4,15,1,0,0,0,0
DATA 0,0,0,0,15,4,4,15,4,4,15,0,0,0,0,0
DATA 0,0,0,0,15,1,15,2,15,1,15,0,0,15,0,0
DATA 0,0,0,0,15,15,1,1,1,15,15,0,15,15,15,0
DATA 0,0,0,0,0,15,15,15,15,15,0,0,15,15,15,0
DATA 0,0,0,0,0,0,15,15,15,0,0,0,2,2,0,0
DATA 0,0,0,0,0,0,0,15,0,0,0,2,2,0,0,0
DATA 0,0,0,0,0,0,0,15,0,0,2,2,0,0,0,0
DATA 0,0,0,0,2,2,2,2,2,2,2,0,0,0,0,0
DATA 0,0,0,2,2,0,2,2,2,0,0,0,0,0,0,0
DATA 15,15,2,2,0,0,2,2,2,0,0,2,0,0,0,0
DATA 15,15,2,0,0,0,2,2,2,0,2,2,0,0,0,0
DATA 15,0,0,0,0,0,2,2,2,2,2,0,0,0,0,0
DATA 0,0,0,0,0,0,0,2,2,2,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0
DEFPROCspriteon(sprite%,sprx%,spry%)
REM Adjust the position and number
REM of the "WAIT"s for better
REM syncronisation with the screen
WAIT
BLIT @MFDB2&(0),100*(sprite%-1),100,sw(sprite%),sh(sprite%),@MFDB&(0),oldsprx%(sprite%),oldspry%(sprite%),3
BLIT @MFDB&(0),sprx%,spry%,sw(sprite%),sh(sprite%),@MFDB2&(0),100*(sprite%-1),100,3
WAIT
BLIT @MFDB2&(0),100*(sprite%-1),50,sw(sprite%),sh(sprite%),@MFDB&(0),sprx%,spry%,1
BLIT @MFDB2&(0),100*(sprite%-1),0,sw(sprite%),sh(sprite%),@MFDB&(0),sprx%,spry%,7
oldsprx%(sprite%)=sprx%:oldspry%(sprite%)=spry%
ENDPROC
DEFFNcollision(sprite%)
LOCAL P&,collision%,xpos&,ypos&,swidth&,sheight&
swidth&=sw(sprite%):sheight&=sh(sprite%)
collision%=0
LOGBASE=screentwo
xpos&=100*(sprite%-1)
ypos&=100
CALL gpix
collision%=P&
LOGBASE=screenone
=collision%
DEFPROCassemblecollision
RESERVE gpix,$200
FOR pass=1 TO 2
[ OPT pass,"L-,W-"
ORG gpix
Intin EQU 8
Ptsin EQU 12
DC.W $A000
MOVE.L Intin(A0),A3
MOVE.L Ptsin(A0),A4
MOVE.L #0,D4
gyloop
ADD.L #3,D4
MOVE.L #0,D3
gloop
ADD.L #3,D3
MOVE @xpos&,(A4)
ADD.W D3,(A4)
MOVE @ypos&,2(A4)
ADD.W D4,2(A4)
DC.W $A002
CMP.W #0,D0
BNE gend
CMP.W @swidth&,D3
BLO gloop
CMP.W @sheight&,D4
BLO gyloop
gend
MOVE.W D0,@P&
RTS
]
NEXT pass
ENDPROC
clearup:
OUT 4,8
LASTERROR
DEFPROCinitjoystick
ON ERROR GOTO clearup
joyx&=0:joyy&=0:port&=0:fire&=0
RESERVE code%,$100
FOR pass=1 TO 2
[ OPT pass,"L-,W-"
ORG code%
MOVE.W #34,-(SP)
TRAP #14
ADDQ.L #2,SP
MOVE.L D0,A0
LEA joyvector(PC),A1
MOVE.L A1,24(A0)
RTS
joyvector
MOVEQ #0,D0
MOVE.B 2(A0),D0
ASL.W #2,D0
LEA table(PC),A1
MOVE.W 0(A1,D0),@joyx&
MOVE.W 2(A1,D0),@joyy&
MOVE.B (A0),D0
ANDI.W #1,D0
MOVE.W D0,@port&
LEA @fire&(PC),A2
MOVE.B 2(A0),D0
ANDI.W #128,D0
SNE.B (A2)
SNE.B 1(A2)
RTS
table DC.W 0,0
DC.W 0,1
DC.W 0,-1
DC.W 0,0
DC.W -1,0
DC.W -1,1
DC.W -1,-1
DC.W 0,0
DC.W 1,0
DC.W 1,1
DC.W 1,-1
EVEN
]
NEXT
CALL code%
OUT 4,$14:OUT 4,$12
ENDPROC

