メイリオ


メイリオ

マリオさんぽいアクションゲーム。コチラも古い。
画像は後からつけたもの。昔の携帯ではこれで性能を最大に引き出していたけど
最近のは早すぎて操作できないので、ウェイトを付けた。
トリッキー度が高く、解析は難しいかも

WAIT=30
'キャラ画像'
loadimg(m,"7,76,252,252,252,48,12,252,252,252,100,20,0,252,196,152,0,0,0,0,48,156,0,20,20,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,3,3,3,3,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,3,4,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,3,3,4,3,4,4,5,4,4,4,0,0,0,0,0,0,0,0,0,0,0,3,4,3,4,4,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,6,1,1,1,6,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,6,1,1,1,6,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1,6,1,1,1,6,1,1,1,0,0,0,0,0,0,0,2,1,1,1,6,6,6,6,6,6,6,1,1,1,0,0,0,0,0,0,2,2,2,0,6,6,6,6,6,6,6,0,1,1,1,0,0,0,0,0,0,2,2,0,6,6,6,6,6,6,6,0,0,2,2,2,0,0,0,0,0,0,0,0,6,6,6,6,6,6,6,0,0,2,2,2,0,0,0,0,0,0,0,0,6,6,6,0,6,6,6,0,0,2,2,2,0,0,0,0,0,0,0,0,6,6,6,0,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0,3,3,3,0,3,3,3,3,0,0,0,0,0,0,0,0,0,0,0,3,2,3,3,0,3,3,3,3,3,0,0,0,0,0,0,0,0,0,0,3,3,3,3,0,3,3,3,3,3,0,0,0,0,0")
@(BC,0xFFD000,0x70B4E6,0x909090)
@(BG,0x80E0,0,192<<16)
'ステージデータ'
@(D,"0000020000000000000000010000000100001110000200111111110100100001000100000111001110400001000000010010000000000011101111110000000110000000000000111010000100000001010000000000101110100100000000010000010000000011100011100000000011110111101111111111111100000001"
 ,"0111111111111111110000111111110000000000000000000000000000000020000000000000000000200100000020000000000000000100001000000020000000011100000100000000000000000000000000000101001000000000000000000000020201014010000000000000000011111111111111111100001110000000"
 ,"0111111111111111111111111111111100000000001100000000002001100001000000000011000200001111110000010000100000000001100002000000000100000000000000111001111100003001000000111000011110002000000000110000001110001111111111111111111111110011100000001111111100000011")
@(msg,"GAMEOVER","STAGECLEAR!")
soft1("EXIT")
HP=3
'指定マップで初期化'
func U(S,M){
    makeimg(B,128,128)
    gc()
    trgt(B)
    lock()
    col(BG[M])
    frect(0,0,128,128)
    col(BC[M])
    for(m=n=I=0;I<8;++I){
        for(i=0;i<8;++i){
            if(1==a=M[I+i*8]=strat(D[M],S*8+I+i*32)){
                frect(I<<4,i<<4,16,16)
            }elsif(a){
                T[n]=a-3
                M[I+i*8]=0
                X[n]=I<<4
                Y[n++]=i<<4
                n=n*!!T[n-1]
            }
        }
    }
    gc()
    unlock(1)
    trgt(off)
    clip(0,0,128,128)
}
U()
label 0
lock()
if(x=X>>4,y=Y>>4,c=x+y*8,16==A=scan>>13){end}
drawimg(B,0,0,j?++t>8&&t=j=0:t=0;)
col(0xFF0000)
'マリオの動きの制御と表示。とてもトリッキー'
drawimg(m,8+X=X+((A&2&&(X&15||X>111||!M[c+1]&&!(Y&15)||!M[c+9]))-(A&1&&(X&15||X<1||!M[c-1]&&!(Y&15)||!M[c+7]))<<2),16+Y=Y+(J=(!G&&!j&&(Y&15||!M[8+c=X/16+y*8]&&!(X&15)||!M[c+9])))*4-(j=(!J&&(A&8||G)&&(Y&15)||!M[-8+c=X/16+y*8]&&!(X&15)||!M[c-7]))*4,33)
col(128<<16)
for(G=I=0,S==3&&M==2&&HP&&B();I<n;Y[I]<128&&T(),I++){}
if(count++,1000<abs(tick-start)){fps=count count=0start=tick}
text(fps,0,114,0)
unlock(1)
sleep(WAIT)
(X>112&&(S<3?X=U(S+1,M):Y=129*m=1;),X<0&&S>0&&(X=112)&&U(S-1,M))+Y>128&&E();
goto 0
func T(){'敵。この一行で表示と動き制御をしている'
    frect(X[I]=(a=X[I])+(a&15||M[8+b=(a>>4)+(Y[I]>>4<<3)]&&!M[b+T[I]]||!T[I]=-T[I])*T[I]*2,Y[I]=(b=Y[I])+(!(a&15)&&(b&15)||!M[(a>>4)+(b>>4<<3)+8])*2,16,(abs(X-X[I])<16&&abs(Y-Y[I])<16&&(J&Y[I]-Y>11?Y[I]=G=150:Y=150;),16))
}
'ボスの関数'
func B(){
    col(3<<14)
    farc(64,y=++q%40<9?-q%40<<1:q%40<17?q%40-16<<1:0;;+64,32,32)'ボスの表示と動き'
    col(0xE08800)
    farc(72,y+56,16,40+(abs(X-72)<24&&abs(Y-y-68)<28&&(Y-y<57?G=HP--:Y=129;)))
    if(!HP){'倒した'
        M[31]=M[39]=0
        trgt(B)
        col(BG[M])
        frect(112,48,16,32)
        trgt(off)
        clip(0,0,128,128)
    }else{'炎?'
        col(0xFF9000)
        for(K=0;K<2;++K){
            if(X[K]>-13){
                farc(X[K]=X[K]-4,Y[K],16,8+(abs(X-X[K])<16&&abs(Y-Y[K]+4)<12&&!Y=129))
            }elsif((q-8)%40==K*20){
                Y[K]=!y*40+48X[K]=64)
            }
        }
    }
}
'クリアもしくはゲームオーバーの表示'
func E(){
    col(255)
    text(msg[m],64,58,3)
    sleep(1000)
    if(m&&M<2){
        U(X=Y=0,M+1)
    }else{
        end
    }
}