>gzoomやgsquareを使うとしてもどうつかえば三角形があんなグラフィックになるのかがさっぱりですw
実際の処理はわからんが、それっぽく動かしてみた
screen 1,640,480,0
boxf
siz=340
gradf 0,0,siz/4,siz, 0, $30a030, $ffffff
gradf siz/4,0,siz/2,siz, 0, $ffffff, $a0f0a0
gradf siz/4+siz/2,0,siz-siz/4-siz/2,siz, 0, $a0f0a0, $5000
tx(0)=0:ty(0)=0
tx(1)=siz:ty(1)=0
tx(2)=siz:ty(2)=siz
tx(3)=0:ty(3)=siz
x(0)=siz/2 : y(0)=0
x(1)=siz/2 : y(1)=0
x(2)=siz : y(2)=siz
x(3)=0 : y(3)=siz
screen 3
gsquare 1,x,y,tx,ty
screen 0
spl=20//分割数
sysiz=siz/spl
sxsiz=siz
sx=siz/spl/2
repeat spl//元画像の座標を計算代入
tx(cnt*4 )=sxsiz/2-sx*cnt:ty(cnt*4+0)=sysiz*cnt
tx(cnt*4+1)=sxsiz/2+sx*cnt:ty(cnt*4+1)=sysiz*cnt
tx(cnt*4+2)=sxsiz/2+sx*(cnt+1):ty(cnt*4+2)=sysiz+sysiz*cnt
tx(cnt*4+3)=sxsiz/2-sx*(cnt+1):ty(cnt*4+3)=sysiz+sysiz*cnt
loop
ddim x,4*spl //コピー先座標用
ddim y,4*spl
dim lr,(spl+1)*2,20//分割されたライン分必要だから+1
dim ud,(spl+1)*2,20
r=180.0/(spl+1)
lrn=100,110,80,120
udn=100,80,160,80
uddn=100,100,100,80
ssn=30,40,10,30
repeat 2*2//基本の形、伸び縮み(0〜3)
rr=0
n=cnt
repeat spl+1
if (spl/2)>cnt{//上半分
lr(cnt*2,i)=int(sin(-deg2rad(r*cnt))*(lrn(n)))//左(表示用の座標)
lr(cnt*2+1,i)=int(-sin(-deg2rad(r*cnt))*(lrn(n)))//右
ud(cnt*2,i)=-int(cos(deg2rad(r*cnt))*(udn(n)))//上
ud(cnt*2+1,i)=-int(cos(deg2rad(r*cnt))*(udn(n)))//下
}else{//下半分
rr+7
ss=-sin(-deg2rad(rr))*ssn(n)
lr(cnt*2,i)=int(sin(-deg2rad(r*cnt))*(lrn(n)))
lr(cnt*2+1,i)=int(-sin(-deg2rad(r*cnt))*(lrn(n)))
ud(cnt*2,i)=-int(cos(deg2rad(r*cnt))*(uddn(n)-ss))
ud(cnt*2+1,i)=-int(cos(deg2rad(r*cnt))*(uddn(n)-ss))
}
loop
repeat spl+1//下部が基点になるように一番下の座標を全てから引く
ud(cnt*2,i)-ud((spl)*2,i)
ud(cnt*2+1,i)-ud((spl)*2+1,i)
loop
i++
loop
repeat 2//左右移動(4〜5)
n=(cnt=0)-(cnt=1)
repeat spl+1
lr(cnt*2+(n=-1),i)=lr(cnt*2+(n=-1),0)+sin(-deg2rad(8*cnt+40))*80*n
lr(cnt*2+(n=1),i)=lr(cnt*2+(n=1),0)+sin(-deg2rad(5*cnt+140))*80*n
ud(cnt*2,i)=int(0.6*ud(cnt*2,0))
ud(cnt*2+1,i)=int(0.6*ud(cnt*2+1,0))
loop
repeat spl+1
ud(cnt*2,i)-ud((spl)*2,i)
ud(cnt*2+1,i)-ud((spl)*2+1,i)
loop
i++
loop
// 0通常 1通常 2伸び 3縮み 4左 5右
anms= 0.1, 0.1, 0.3, 0.25, 0.1, 0.1 //アニメーション速度
abmcnt=25, 25, 1000, 24, 20, 20 //アニメーションコマ数
anmno="01","41-","51-","2-","31-" //アニメーションテーブル(-でテーブル0に戻る)
foreach anmno
anmp(cnt)=strlen(anmno(cnt)) //アニメーションパターン数
loop
b=0
p=0,1,3,2//表示用の座標は左右左右の順に並んでるから左右右左の順位に変更させる要素数
px=200.0
py=400.0
Border=400
repeat
gsel 0
stick k,$ff
if jf=0{
if k=1 and pno!1{pno=1:b=0:anmcnt=0:pxs=0}//←移動アニメーションセット
if k=4 and pno!2{pno=2:b=0:anmcnt=0:pxs=0}//→移動アニメーションセット
}else{
if k=1 {px-4}//←移動(ジャンプ中)
if k=4 {px+4}//→移動
}
if k=2 and pno!3{pno=3:b=0:anmcnt=0:j=5.0:jf=1}//↑ジャンプ
if jf { py-j:j-0.1}//ジャンプ処理
if Border<py {jf=0:py=400.0:pno=4:b=0:anmcnt=0}//着地処理
anmcnt+1//アニメーションカウント
if (anmcnt\abmcnt(ano))=0 {b=(b+1)\anmp(pno)}
ano=peek(anmno(pno),b)-'0'//アニメーションNO取得
if ano<0{ano=0:b=0:pno=0}//アニメーションNOが-なら0を
if pno=1{pxs+2:px+=sin(-deg2rad(pxs+90))*5}//←移動アニメーションの時左移動
if pno=2{pxs+2:px-=sin(-deg2rad(pxs+90))*5}
m=1.4 //表示倍率
redraw 0
color 64,64,80:boxf 0,0,640,Border
color 100,100,100:boxf 0,Border,640,480
color 255
pos 300,0
ss=anms(ano)
repeat spl
i=cnt*4
dupptr _x,varptr(x(i)),32,3
dupptr _y,varptr(y(i)),32,3
dupptr _tx,varptr(tx(i)),16
dupptr _ty,varptr(ty(i)),16
c=cnt
repeat 4
_x(cnt)-=ss*(_x(cnt)-lr(c*2+cnt,ano))//現在から次の形の座標を引いて差分にアニメーション速度を掛けで現在から引く
__x(p(cnt))=int(_x(cnt)*m)+px//上で出した座標に表示倍率を掛けてキャラ座標を加える
_y(cnt)-=ss*(_y(cnt)-ud(c*2+cnt,ano))
__y(p(cnt))=int(_y(cnt)*m)+py
loop
gsquare 3,__x,__y,_tx,_ty
loop
redraw 1
await 15
loop