// IMW版 スクリーンセーバー
// くらげ(?)が漂います
// コンパイルして、拡張子を .exe → .scr に変更すれば
// スクリーンセーバーとして使えます
// キーが押されたりクリックされたら終了させる
KEYDOWN { end ; }
LBUTTONDOWN { end ; }
RBUTTONDOWN { end ; }
// マウスが動いたら終了させる
MOUSEMOVE
{
// ms_move の値が 10 までは終了させない
// こうしないといきなり終了してしまう
ms_move = ms_move + 1 ;
if(ms_move > 10){ end ; }
}
CREATE
{
SetWinStyle(4) ;
SetWinSize(SCR_X,SCR_Y) ;
SetWinPos(0,0,0) ;
SetWinColor(0) ;
SetTimer(100) ;
SubScreen(SCR_X,SCR_Y) ;
Data("map",1,16) ;
vpit = 8 ; // 高さ
hpit = 16 ; // 幅
kaku = 18 ; // 角の数 最大32まで
Create3DPack(1,kaku*15*2+kaku*2) ;
Set3DCenter(SCR_X/2,SCR_Y/2,2000) ;
count = SEC ;
ms_move = 0 ;
}
TIMER
{
count = (count + 1) % 360 ;
// 形状を更新
n = 0 ;
loop(16){
map(0,n) = (sin((n+count)*30) + 2) * hpit ;
n = n + 1 ;
}
// 色を更新
cr = (sin(count*1)+1)*64 ;
cg = (sin(count*2)+1)*127 ;
cb = (sin(count*3)+1)*127 ;
// 座標データ作成
call("MakeData") ;
// 姿勢更新
Set3DLocalRotateX(1,count*2) ;
Set3DLocalRotateY(1,count*8) ;
Set3DLocalRotateZ(1,count) ;
// 位置更新
Set3DCenter(SCR_X/2+sin(count*1)*300,SCR_Y/2+sin(count*2)*200,2000) ;
SelectScreen(0) ;
FullPaint(0) ;
Draw3DPack(1) ;
CopyBMP(0,0,0,SCR_X,SCR_Y,1,0,0,SCR_X,SCR_Y,0) ;
}
// 座標データ作成
MakeData
{
p = 360 / kaku ;
x = p / 2 ;
Clear3DPack(1) ;
// ふたの部分
loop(kaku){
fx1 = -cos(x) * map(0,0) ;
fz1 = sin(x) * map(0,0) ;
fx2 = -cos(x+p) * map(0,0) ;
fz2 = sin(x+p) * map(0,0) ;
fx3 = 0 ; fz3 = 0 ; fy3 = - vpit * 8 ;
Add3DPack(1,fx3,fy3+vpit,fz3,fx1,fy3,fz1,fx2,fy3,fz2,cr,cg,cb) ;
x = x + p ;
}
// 胴の部分
s = 0 ;
loop(15){
loop(kaku){
fx1 = -cos(x) * map(0,s) ;
fz1 = sin(x) * map(0,s) ;
fx2 = -cos(x+p) * map(0,s) ;
fz2 = sin(x+p) * map(0,s) ;
fy = - vpit * (8-s) ;
sx1 = -cos(x) * map(0,s+1) ;
sz1 = sin(x) * map(0,s+1) ;
sx2 = -cos(x+p) * map(0,s+1) ;
sz2 = sin(x+p) * map(0,s+1) ;
sy = - vpit * (7-s) ;
Add3DPack(1,fx2,fy,fz2,fx1,fy,fz1,sx1,sy,sz1,cr,cg,cb) ;
Add3DPack(1,fx2,fy,fz2,sx1,sy,sz1,sx2,sy,sz2,cr,cg,cb) ;
x = x + p ;
}
s = s + 1 ;
}
// 底の部分
loop(kaku){
fx1 = -cos(x) * map(0,15) ;
fz1 = sin(x) * map(0,15) ;
fx2 = -cos(x+p) * map(0,15) ;
fz2 = sin(x+p) * map(0,15) ;
fx3 = 0 ; fz3 = 0 ; fy3 = vpit * 7 ;
Add3DPack(1,fx3,fy3-vpit,fz3,fx2,fy3,fz2,fx1,fy3,fz1,cr,cg,cb) ;
x = x + p ;
}
}