BX,BY | スライドパッド入力量 |
C0~C3 | 回転角に対するコサイン値 |
D0~D3 | 回転角 |
I | 汎用ループカウンタ |
M0~M8 | 座標回転計算用行列 |
MF | 新規発生するショットのスプライト番号 |
MS | 経過フレーム数 |
MX,MY | 自機の座標 |
S0~S3 | 回転角に対するサイン値 |
SC,SP,SQ,SX,SY,SZ | 四角形スプライト配置座標計算用 |
T0~T3 | 回転角速度 |
V0~V3,W0~W3,X0,X1,Y0,Y1 | 四角形描画座標計算用 |
X,Y,Z | 四角形スプライト配置用ループカウンタ |
YR,ZR | 四角形スプライト配置用ループカウンタの範囲 |
ACLS:GPAGE 0,4:SPDEF 0,0,0,32,32,16,16,33
FOR I=0 TO 230:SPSET I,0:NEXT:MF=232:MS=0
SPSET 231,3308:SPROT 231,90:MX=120:MY=120
T0=(RNDF()-.5)/32:T1=(RNDF()-.5)/32
T2=(RNDF()-.5)/32:T3=(RNDF()-.5)/64:WHILE 1
STICK OUT BX,BY:MX=MAX(MIN(MX+BX*4,384),16)
MY=MAX(MIN(MY-BY*4,224),16):SPOFS 231,MX,MY
MS=MS+1:IF BUTTON() AND 16 && MS AND 1 THEN
SPSET MF,3414:SPROT MF,-90:SPCOLOR MF,#LIME
SPANIM MF,"XY",1,MX+16,MY,-24,MX+400,MY,1
SPANIM MF,"S",-3,4,1,1:MF=MF+1-(MF>254)*24
BEEP:ENDIF:S0=SIN(D0):S1=SIN(D1):S2=SIN(D2)
C0=COS(D0):C1=COS(D1):C2=COS(D2):C3=COS(D3)
M0=C1*C2:M1=S0*S1*C2-C0*S2:M2=C0*S1*C2+S0*S2
M3=C1*S2:M4=S0*S1*S2+C0*C2:M5=C0*S1*S2-S0*C2
M6=-S1:M7=S0*C1:M8=C0*C1: V0=M0*12:W0=M3*12
V1=M1*12:W1=M4*12:V2=V0+V1:W2=W0+W1:V3=V0-V1
W3=W0-W1:X0=16+V2:Y0=16+W2:X1=16-V2:Y1=16-W2
GFILL 0,0,31,31,0:FOR I=-1 TO 1 STEP 2
GTRI X0,Y0,16+V3*I,16+W3*I,X1,Y1,-1:NEXT
SP=0:FOR X=-5TO 5:YR=5-ABS(X)FOR Y=-YR TO YR
ZR=YR-ABS(Y)FOR Z=-ZR TO ZR:SX=X*M0+Y*M1+Z*M2
SY=X*M3+Y*M4+Z*M5:SZ=X*M6+Y*M7+Z*M8'by @OBONO
SPCOLOR SP,RGB(16,128+X*24,128+Y*24,128+Z*24)
SC=8/(6+SZ*C3):SPSCALE SP,SC,SC:SQ=SC*C3*64
SPOFS SP,200+SX*SQ,120+SY*SQ,(Z*C3+3)*128
SP=SP+1:NEXT:NEXT:NEXT:D0=D0+T0:D1=D1+T1
D2=D2+T2:D3=D3+T3:VSYNC:WEND