#apply
#include "../_include.txt"
#include "../../define/_vector2.txt"


cev[CEV_DEAD_GAMES] .name("mg_没ゲ") {
    def {
        //使用する変数の個数
        NUM_OF_VAR = 64
        NUM_OF_STR = 0
        NUM_OF_PIC = 32

        //レイヤー
        BASE_LAYER = 6

        //ピクチャパス
        PATH_M_BACK    = "to/mo/bg"
        PATH_M_MOON    = "to/mo/mo"
        PATH_M_CUTLINE = "to/mo/cu"
        PATH_M_MUSHA   = "to/mo/mu"
        PATH_M_CUTEFF  = "to/mo/ef"

        PATH_C_BACK    = "to/ca/bg"
        PATH_C_SCREEN  = "to/ca/sc"
        PATH_C_ILLUST  = "to/ca/il"
        PATH_C_FABRIC  = "to/ca/fa"

        PATH_S_CHARA   = "to/sn/ch"
        PATH_S_SOL     = "to/sn/ps"
        PATH_S_WHI     = "to/sn/pw"
        PATH_S_AGU     = "to/sn/pa"
        PATH_S_BLI     = "to/sn/pb"
        PATH_S_RIS     = "to/sn/pr"
        PATH_S_SHI     = "to/sn/pn"
        PATH_S_WIN     = "to/sn/wi"

        PATH_H_FRAME   = "to/hh/fr"
        PATH_H_BACK    = "to/hh/bg"
        PATH_H_PLAYER  = "to/hh/pl"
        PATH_H_ENEMY   = "to/hh/en"
        PATH_H_SMOKE   = "to/hh/sm"
        PATH_H_SPRITE  = "to/hh/sp"
        PATH_H_BARD    = "to/hh/ba"

        //ピクチャID
        PIC_HEAD    = 1

        PIC_M_BACK    = 2
        PIC_M_MOON    = 3//+0_+15
        PIC_M_CUTLINE = 20
        PIC_M_CUTEFF  = 21
        PIC_M_MUSHA   = 22
        PIC_M_TEXT    = 23

        PIC_C_BACK    = 2
        PIC_C_FABRIC  = 3//+0_2
        PIC_C_ILLUST  = 7//+0_2
        PIC_C_SCREEN  = 10
        PIC_C_TEXT    = 11

        PIC_S_WINDOW  = 2
        PIC_S_CHARA   = 3//+0_+15
        PIC_S_PORTRAIT= 20
        PIC_S_TEXT    = 21

        PIC_H_BACK    = 2
        PIC_H_BACK_SP = 3
        PIC_H_PL_SM   = 4//+0_+2
        PIC_H_PLAYER  = 7
        PIC_H_ENEMY   = 8
        PIC_H_EN_SM   = 9//+0_+2
        PIC_H_FRONT_SP= 12
        PIC_H_BARD    = 13
        PIC_H_FRAME   = 14
        PIC_H_TEXT    = 15

        //月
        MOON_NUM   = 16
        MOON_SIZE  = 52
        MOON_SCALE = 100

        //カード
        CARD_NUM = 3
        CARD_PATTERN_NUM = 132

        //シノテイカー
        SINO_CHARA_X = 32
        SINO_CHARA_Y = 120
        SINO_PORT_X  = 160
        SINO_PORT_Y  = 240 - 80 + 16

        //不思議とデカいヘレン
        HELEN_SM_NUM = 3
        HELEN_REF_X = 16*2
        HELEN_REF_Y = 16*2
        HELEN_WIDTH  = 256
        HELEN_HEIGHT = 160
        HELEN_PL_X = 16*5
        HELEN_EN_X = 16*11
    }

    //ピクチャの共通コマンド
    def {
        basePicCmd = bl {
            .chromakey(1)
            .mapLayer(BASE_LAYER)
            .eraseWhenTransfer
            .affectedByTint
            .affectedByFlash
            .affectedByShake
        }

        baseStrPicCmd = bl {
            .font("", 12)
            .spacing(0, 4)
            .skin ""
            basePicCmd
        }

        //月
        m_partPicCmd = bl {
            ""
            .size(MOON_SIZE, MOON_SIZE)
            .scale(MOON_SCALE)
            .trans(0)
            .rgbs(100, 100, 100, 100)
            .font("", 12) .noShadow
            .spacing(0, 4)
            .skin "" .nobg .noframe .noGradation .noPadding
            basePicCmd
        }

        m_moonPicCmd = bl {
            PATH_M_MOON
            .center
            .scale(MOON_SCALE)
            basePicCmd
        }

        m_playerPicCmd = {
            PATH_M_MUSHA
            .topLeft
            .grid(4, 1)
            basePicCmd
        }

        m_effPicCmd = {
            PATH_M_CUTEFF
            .center
            .grid(1, 4)
            basePicCmd
        }

        //カード
        c_fabricPicCmd = {
            PATH_C_FABRIC
            .center
            .grid(5, 3)
            basePicCmd
        }

        c_illustPicCmd = {
            PATH_C_ILLUST
            .center
            .grid(12, 11)
            basePicCmd
        }

        //シノテイカー
        s_charaPicCmd = {
            PATH_S_CHARA
            .bottom
            .grid(12,4)
            basePicCmd
        }

        s_portraitPicCmd = {
            .bottom
            basePicCmd
        }

        //ヘレン
        h_playerPicCmd = {
            PATH_H_PLAYER
            .bottom
            .grid(4,1)
            basePicCmd
        }

        h_enemyPicCmd = {
            PATH_H_ENEMY
            .bottom
            .grid(4,1)
            basePicCmd
        }

        h_smokePicCmd = {
            PATH_H_SMOKE
            .center
            basePicCmd
        }

        h_spritePicCmd = {
            PATH_H_SPRITE
            .bottomLeft
            .grid(1,2)
            basePicCmd
        }

        h_bardPicCmd = {
            PATH_H_BARD
            .center
            .grid(2,1)
            basePicCmd
        }

    }

    defv {
        varHead = TV_MINIGAME

        ipt
        ptr
        idx
        pid
        cell
        col
        tag

        ax
        ay
        bx
        by
        cx
        cy
        dx
        dy
        ex
        ey
        fx
        fy
        gx
        gy

        timer
        varA
        varB
        varC
        varD
        varE
        varF

        varFoot
    }

    commentRangeOfVariables(varFoot, TV_MINIGAME, NUM_OF_VAR, NUM_OF_STR, NUM_OF_PIC)

    //キャンセルボタンを押すと選択画面に戻る
    __fn _commonCheckCancel bl {
        @key.input .dst(ipt) .cancel
        @if `ipt bl {
            @se.play "Cancel2" .opt(100, 100, 50)
            @label.jump "selectToy"
        }
    }

    //ポートレイトを表示する
    __fn _s_showPortrait $path $gridX $cell bl {
        @pic.show [PIC_S_PORTRAIT] $path .pos(SINO_PORT_X - 8, SINO_PORT_Y) .bottom .trans(100) .cell($cell) .grid($gridX, 1) s_portraitPicCmd
        @pic.move [PIC_S_PORTRAIT] .pos(SINO_PORT_X, SINO_PORT_Y) .bottom .time(1)
    }

    //ポートレイトを隠す
    __fn _s_erasePortrait bl {
        @pic.move [PIC_S_PORTRAIT] .pos(SINO_PORT_X, SINO_PORT_Y) .bottom .trans(100) .time(1)
    }

    //キャラクターを光らせて消す
    __fn _s_getCharacter $pid bl {
        @se.play "Holy7" .opt(80, 100, 50)
        @pic.move[$pid] .relative .pos(0, 0) .scale(0) .trans(0) .rgbs(200, 200, 200, 100)
        @wait(0)
        @pic.move[$pid] .relative .pos(0, 0) .scale(0) .trans(100) .rgbs(100, 100, 100, 100) .time(2)
    }

    //主人公の状態を変える
    __fn _s_setState $state bl {
        timer = 0
        varB = $state
    }

    //------------------------------------------------------------------------------------
    //開始処理
    bl {
        //BGMを記憶する
        storeBGM()
        @label.jump "selectToy"
    }

    //------------------------------------------------------------------------------------
    //選択
    @label.set "selectToy"
    bl {
        //変数を初期化
        initPicturesAndVariables(PIC_HEAD, NUM_OF_PIC, TV_MINIGAME, NUM_OF_VAR, TS_MINIGAME, NUM_OF_STR)
        //メッセージの表示位置
        msgBottom()
        //BGMを再生する
        restoreBGM()
        //色調を暗く
        @scr.tint .rgbs(0, 0, 0, 100)

        @msg.choice bl {
            .case "\>ムシャ一刀流" bl {
"\>やりたい事はできたが、ゲーム内容が思いつかなかった
\>1ドットずつ判定しているのも無茶な気がする"
//(52x52x16x2)
                @label.jump "gameLoop_moon"
            }
            .case "\>IF Scryption" bl {
"\>小物に謎解きと用意すべきものが多すぎる…
\>でもカードを作るのは楽しかった！"
                @label.jump "gameLoop_card"
            }
            .case "\>不思議とデカいヘレン" bl {
"\>町をケツで破壊させたら満足した"
                @label.jump "gameLoop_helen"
            }
            .case "\>シノテイカー" bl {
"\>肝心のパズルが思いつかない！
\>やたらとアクションゲームが多いのもそのせい"
                @label.jump "gameLoop_shino"
            }
            .cancel bl {
            }
        }

        @label.jump "gameEnd"
    }

    //------------------------------------------------------------------------------------
    //ムシャ一刀流
    //varA:切断角度(x1)  varB:切断位置X varC:切断位置Y varD:切断ボタン varE:切断回数 varF:アニメーション
    @label.set "gameLoop_moon"
    bl {
        @pic.strpic [PIC_M_TEXT] "\c[2]矢印\c[0]:位置  \c[2]Shift\c[0]:回転  \c[2]Z\c[0]:斬  \c[2]X\c[0]:終了" .pos(0, 0) .topLeft baseStrPicCmd
        @pic.show[PIC_M_BACK] PATH_M_BACK .pos(0, 0) .topLeft basePicCmd
        @pic.show[PIC_M_MUSHA] .pos(0, 0) .cell(1) m_playerPicCmd
        @pic.show[PIC_M_MOON+0] .pos(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2) m_moonPicCmd
        @pic.show[PIC_M_CUTLINE] PATH_M_CUTLINE .pos(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2) .center .add basePicCmd

        //位置を初期化
        V2_set(varB, 320 / 2, 240 / 2)        
        //入力抑止
        varD = 1

        @se.play "Combat2" .opt(100, 100, 50)

        //暗転
        fastFadeInTintOnly(1)
        @wait(1)

        //----------------------------
        //ループ
        @loop bl {
            @wait(0)

            //タイマー
            //斬撃する度にタイマーがリセットされる
            @if timer > 0 bl {
                timer += 1
                // 斬撃してから数秒立つと再生する
                @if timer >= 120 bl {
                    timer = 0

                    @pic.show[PIC_M_MUSHA] .pos(0, 0) .cell(1) m_playerPicCmd
                    @pic.show[PIC_M_MOON+0] .pos(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2 - 32) .rgbs(200, 200, 200, 100) m_moonPicCmd
                    @pic.move[PIC_M_MOON+0] .relative .pos(0, 32) .scale(0) .trans(0) .rgbs(100, 100, 100, 100) .time(1)
                    @pic.erase [PIC_M_MOON+1..PIC_M_MOON+MOON_NUM-1] 
                    @se.play "pon" .opt(80, 100, 50)
                }
            }

            //操作
            _commonCheckCancel()

            V2_getInput(ax)
            V2_set(varB,
                clamp(varB + ax * 2, 320/2-48, 320/2+48),
                clamp(varC + ay * 2, 240/2-48, 240/2+48)
            )

            //回転
            @key.input .dst(ipt) .shift
            varA = (varA + (ipt ? 2 : 0)) % 360

            //切断
            @key.input .dst(ipt) .decision
            varD = (ipt) ? (varD + 1) : (0)

            //切断ライン
            V2_set(ax, varB, varC)
            @pic.move[PIC_M_CUTLINE] .pos(ax, ay) .center .trans(25) .angle(varA, 1) .keepBlend

            //切断
            @if varD == 1 bl {
                //ax:ピクチャの左上 bx:ピクチャの幅 cx:斬撃の始点 dx:斬撃のベクトル ex:ピクセル座標 pid:ピクチャ番号1 tag:ピクチャ番号2
                varE = 0
                //斬撃のベクトル(x1000)
                V2_getCosSin(dx, varA, 1, 1000)

                @loop MOON_NUM .dst(pid) {
                    pid += PIC_M_MOON
                    //左上座標は現在の矩形、幅は拡大率無効
                    @pic.getInfo[pid] .baseRect(0, 0, bx, by) .xywh
                    @pic.getInfo[pid] .currentRect(ax, ay, 0, 0) .xywh
                    //幅が0以下だと存在していないとする
                    @if bx <= 0 bl {
                        @continue
                    }
                    //切断後のピクチャ番号を探す
                    tag = 0
                    @loop MOON_NUM .dst(ex) {
                        ex += PIC_M_MOON
                        @pic.getInfo[ex] .baseRect(0, 0, gx, gy) .xywh

                        @if gx <= 0 bl {
                            tag = ex
                        }
                    }
                    //空きが見つからなかった
                    @if `tag <= 0 bl {
                        @continue
                    }

                    //ピクチャの左上を基準とした斬撃の線分
                    V2_sub(cx, varB, ax)
                    //拡大率に合わせて縮小する
                    V2_muldiv(cx, cx, 100, MOON_SCALE)

                    //移動するピクセル数をカウントする
                    //52*52*16回判定を行っている
                    V2_set(gx, 0, 0)
                    @loop by .dst(ey) bl {
                        @loop bx .dst(ex) bl {
                            @pic.getInfo[pid] .pixel(ex, ey, 1, 1) .dst(col)
                            @if `col & 0xff000000 bl {
                                //外積
                                V2_sub(fx, ex, cx)
                                V2_cross(ipt, fx, dx, 1)
                                @if ipt > 0 bl {
                                    gx += 1
                                } .else bl {
                                    gy += 1
                                }
                            }
                        }
                    }

                    //切断後のピクセル数が少ない場合は切断しない
                    @if `min(gx, gy) < MOON_SIZE bl {
                        @continue
                    }

                    //休憩
                    @wait(0)
                    
                    //ピクチャを用意する
                    @pic.getInfo[pid] .currentRect(gx, gy, 0, 0) .cewh
                    @pic.strpic [tag] .pos(gx, gy) .center m_partPicCmd 

                    //ピクセルの色情報を移動させる gx:移動したピクセル数
                    gx = 0
                    @loop by .dst(ey) bl {
                        @loop bx .dst(ex) bl {
                            @pic.getInfo[pid] .pixel(ex, ey, 1, 1) .dst(col)
                            @if `col & 0xff000000 bl {
                                //外積
                                V2_sub(fx, ex, cx)
                                V2_cross(ipt, fx, dx, 1)
                                @if ipt > 0 bl {
                                    @pic.setPixel[tag] .xywh(ex, ey, 1, 1) .src(col)
                                    col = 0x00000000
                                    @pic.setPixel[pid] .xywh(ex, ey, 1, 1) .src(col)
                                }
                            }
                        }
                    }

                    //ピクチャを移動させる
                    @pic.getInfo[pid] .currentRect(gx, gy, 0, 0) .cewh
                    V2_set(ex, -dy, dx)

                    V2_muldiv(fx, ex, 4, 100)
                    V2_asAdd(fx, gx)
                    @pic.move[pid] .pos(fx, fy) .scale(MOON_SCALE) .time(20)

                    V2_muldiv(fx, ex, -4, 100)
                    V2_asAdd(fx, gx)
                    @pic.move[tag] .pos(fx, fy) .scale(MOON_SCALE) .time(20)

                    varE += 1
                    
                    //休憩
                    @wait(0)
                }

                //アニメーション
                varF += rnd(1, 2)
                varF %= 3

                cell = varF + 2
                @pic.show[PIC_M_MUSHA] .pos(0, 0) .cell(cell) .trans(-40) m_playerPicCmd
                @pic.move[PIC_M_MUSHA] .relative .pos(-8, 0) .scale(0) .trans(40) .time(1)

                //切断演出
                @if varE > 0 bl {
                    //再生タイマー起動
                    timer = 1
                    //斬撃エフェクト
                    @pic.show[PIC_M_CUTEFF] .pos(varB, varC) .trans(-500) .rangeAnim(2, 1, 4) .repeat .angle(varA, 1) m_effPicCmd
                    @pic.move[PIC_M_CUTEFF] .relative .pos(0, 0) .scale(0) .trans(600) .angle(varA, 1) .time(-8)

                    ax = rnd(9,12) * 10
                    @se.play "Slash1" .opt(100, ax, 50)
                    @se.play "Flash1" .opt(80, 150, 50)

                //切断できなかった
                } .else bl {
                    ax = rnd(12,14) * 10
                    @se.play "Evade2" .opt(80, ax, 50)
                }
            }
        }
    }

    //------------------------------------------------------------------------------------
    //カード
    //varA:カードAのタイマー varB:カードBのタイマー varC:カードCのタイマー varD:左入力 varE:上下入力 varF:右入力
    @label.set "gameLoop_card"
    bl {
        //初期化
        @pic.strpic [PIC_C_TEXT] "\c[2]$v/$u$s/$t\c[0]:引く  \c[2]X\c[0]:終了" .pos(0, 0) .topLeft baseStrPicCmd
        @pic.show[PIC_C_BACK] PATH_C_BACK .pos(0, 0) .topLeft basePicCmd
        @pic.show[PIC_C_SCREEN] PATH_C_SCREEN .pos(0, 0) .topLeft .multi .rgbs(100, 100, 100, 100) basePicCmd
        //暗転
        fastFadeInTintOnly(1)
        @wait(1)

        //----------------------------
        //ループ
        @loop bl {
            @wait(0)
            //----------------------------
            //光
            timer += 1
            ax = 20 + sin(timer * 1, 1, 20)
            @pic.move[PIC_C_SCREEN] .pos(0,0) .topLeft .scale(100) .trans(ax) .keepRgbs .keepBlend 

            //----------------------------
            //操作
            _commonCheckCancel()

            @key.input .dst(ipt) .left
            varD = (ipt) ? (varD + 1) : (0)
            @key.input .dst(ipt) .right
            varF = (ipt) ? (varF + 1) : (0)
            @key.input .dst(ipt) {
                .up
                .down
            }
            varE = (ipt) ? (varE + 1) : (0)

            //----------------------------
            //カード
            @loop CARD_NUM .dst(idx) {
                //----------------------------
                //入力を受け付ける
                ptr = __id(varD) + idx
                @if v[ptr] == 1 bl {
                    ptr = __id(varA) + idx
                    @if v[ptr] <= 0 bl {
                        v[ptr] = 1
                    }
                }

                //----------------------------
                //更新
                ptr = __id(varA) + idx
                //待機中
                @if v[ptr] <= 0 bl {
                    @continue
                }

                //タイマー
                v[ptr] += 1
                ipt = v[ptr]

                //基本座標
                V2_set(ax,
                    [60, 160, 260][idx], 
                    120
                )

                //ピクチャID
                cx = PIC_C_FABRIC + idx
                cy = PIC_C_ILLUST + idx

                //出現
                @if `between(ipt, 2, 19) bl {
                    @if ipt == 2 bl {
                        by = ay - 120

                        @pic.show[cy] .pos(-320, -320) .trans(100) .cell(0) c_illustPicCmd
                        @pic.show[cx] .pos(ax, by) .cell(1) c_fabricPicCmd
                        @se.play "page1" .opt(100, 150, 50)
                    }

                    @pic.move[cx] .pos(ax, ay) .time(1)

                //待機
                } .elif `between(ipt, 20, 34) bl {
                    //暗転
                    @if ipt == 26 bl {
                        @pic.move[cx] .pos(ax, ay) .rgbs(0, 0, 0, 100) .time(-8)
                    }

                //めくる
                } .elif `between(ipt, 35, 43) bl {
                    @if ipt == 35 bl {
                        @se.play "bell2" .opt(90, 120, 50)
                    }
                    
                    by = ay + sin((ipt - 35) * 180 / 8, 1, -8)
                    cell = 2 + (ipt - 35) / 1
                    @pic.show[cx] .pos(ax, by) .cell(cell) .rgbs(0, 0, 0, 100) c_fabricPicCmd

                //暗転解除
                } .elif `ipt = 44 bl {
                    cell = rnd(1, CARD_PATTERN_NUM)

                    //セル番号によって下地が変わる
                    //地形カード
                    @if `between(cell, 85, 96) bl {
                        col = 11
                    //レアカード
                    } .elif `between(cell, 97, 120) bl {
                        col = 12
                    //特殊カード
                    } .elif `between(cell, 121, CARD_PATTERN_NUM) bl {
                        col = 13
                    //ノーマルカード
                    } .else bl {
                        col = 10
                    }

                    @pic.show[cx] .pos(ax, ay) .cell(col) .rgbs(0, 0, 0, 100) c_fabricPicCmd
                    @pic.move[cx] .pos(ax, ay) .rgbs(100, 100, 100, 100) .time(-4)
                    @pic.show[cy] .pos(ax, ay) .multi .cell(cell) c_illustPicCmd

                    //処理終了
                    v[ptr] = 0
                }
            }
        }
    }

    //------------------------------------------------------------------------------------
    //不思議とデカいヘレン
    //varA:攻撃入力 varB:左右入力 varC:状態1 varD:タイマー1 varE:状態2:タイマー2
    @label.set "gameLoop_helen"
    bl {
        //初期化
        @pic.strpic [PIC_H_TEXT] "\c[2]$v/$t\c[0]:移動 \c[2]$u\c[0]:攻撃 \c[2]X\c[0]:終了" .pos(0, 0) .topLeft baseStrPicCmd
        @pic.show[PIC_H_FRAME] PATH_H_FRAME .pos(-16*3, 0) .topLeft basePicCmd
        @pic.show[PIC_H_BACK] PATH_H_BACK .pos(HELEN_REF_X, HELEN_REF_Y) .topLeft basePicCmd

        @pic.show[PIC_H_BACK_SP] .pos(HELEN_REF_X, HELEN_REF_Y + HELEN_HEIGHT + 8) .cell(2) h_spritePicCmd
        @pic.show[PIC_H_FRONT_SP] .pos(HELEN_REF_X, HELEN_REF_Y + HELEN_HEIGHT + 8) .cell(1) h_spritePicCmd

        @pic.show[PIC_H_PLAYER] .pos(HELEN_REF_X + HELEN_WIDTH, HELEN_REF_Y + HELEN_HEIGHT) .cell(1) .rgbs(0, 0, 0, 100) h_playerPicCmd
        @pic.move[PIC_H_PLAYER] .pos(HELEN_REF_X + HELEN_PL_X, HELEN_REF_Y + HELEN_HEIGHT) .bottom .time(5)

        @pic.show[PIC_H_ENEMY]  .pos(HELEN_REF_X + 0, HELEN_REF_Y + HELEN_HEIGHT) .cell(1) .rgbs(0, 0, 0, 100) h_enemyPicCmd
        @pic.move[PIC_H_ENEMY] .pos(HELEN_REF_X + HELEN_EN_X, HELEN_REF_Y + HELEN_HEIGHT) .bottom .time(5)
        
        @se.play "Combat1" .opt(100, 100, 50)
        
        //暗転
        fastFadeInTintOnly(1)
        @wait(5)

        //----------------------------
        //ループ
        @loop bl {
            @wait(0)

            //----------------------------
            //操作
            _commonCheckCancel()

            @key.input .dst(ipt) .down
            varA = (ipt) ? (varA + 1) : (0)

            @key.input .dst(ipt) {
                .left
                .right
            }
            varB = (ipt == KEY_RIGHT ? 1 : 0) - (ipt == KEY_LEFT ? 1 : 0)

            //----------------------------
            //ヘレン
            $X = HELEN_REF_X + HELEN_PL_X
            $Y = HELEN_REF_Y + HELEN_HEIGHT

            varD += 1

            //立ち
            @if varC == 0 bl {
                //攻撃
                @if varA == 1 bl {
                    varC = 1
                    varD = 0
                } .elif varB == 1 bl {
                    varC = 3
                    varD = 0
                } .elif varB == -1 bl {
                    varC = 4
                    varD = 0
                }
            //攻撃
            } .elif varC == 1 bl {
                @if varD == 1 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X, $Y + 0) .cell(1) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y + 8)  .bottom .time(5)

                } .elif varD == 40 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X, $Y + 8) .cell(2) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X + 16, $Y)  .bottom .time(2)

                    @scr.shake .once(2) .value(1, 5)

                    @if `varE == 0 || varE == 1 bl {
                        varE = 2
                        varF = 0

                        @se.play "punch2" .opt(100, 80, 50)

                    } .else bl {
                        @se.play "Earth6" .opt(100, 100, 50)

                    }

                } .elif varD == 100 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X + 8, $Y) .cell(1) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y)  .bottom .time(2)

                    varC = 0
                    varD = 0
                }

            //のけぞり
            } .elif varC == 2 bl {
                @if varD == 1 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X, $Y) .cell(3) .rgbs(200, 100, 100, 100) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X - 24, $Y + 8)  .bottom .time(10)

                } .elif varD == 60 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X - 24, $Y + 32) .cell(4) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X - 24, $Y + 24)  .bottom .time(2)

                    @se.play "Earthquake1" .opt(80, 100, 50)
                    @se.play "Explosion2" .opt(80, 90, 50)

                    //叫び声
                    ax = rnd(10, 12) * 10
                    @se.play "voice_aaaa" .opt(60, ax, 50)
                    ax = rnd(10, 13) * 10
                    @se.play "voice_boy13" .opt(80, ax, 50)

                    @scr.shake .once(4) .value(3, 7)

                    //煙
                    @loop HELEN_SM_NUM .dst(idx) bl {
                        pid = PIC_H_PL_SM + idx
                        bx = rnd(-8, 8)
                        by = rnd(-8, 8)
                        V2_set(ax, HELEN_REF_X + HELEN_PL_X - 64 + idx * 32 + bx, HELEN_REF_Y + HELEN_HEIGHT + by)

                        @pic.show [pid] .pos(ax, ay) .trans(0) .rotate(1) h_smokePicCmd
                        @pic.move [pid] .relative .pos(0, -32) .trans(100) .scale(80) .rotate(1) .time(20)

                    }

                    //町が破壊される
                    @pic.show[PIC_H_BACK_SP] .pos(HELEN_REF_X, HELEN_REF_Y + HELEN_HEIGHT + 240) .cell(2) h_spritePicCmd
                    @pic.move[PIC_H_BACK_SP] .relative .pos(0, -240 + 8) .time(30)

                } .elif varD == 120 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X - 16, $Y + 16) .cell(1) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y)  .bottom .time(2)

                } .elif varD == 140 bl {
                    varC = 0
                    varD = 0
                }

            //右ステップ
            } .elif varC == 3 bl {
                @if varD == 1 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X, $Y) .cell(1) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X + 16, $Y)  .bottom .time(2)

                } .elif varD == 12 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X + 32, $Y + 4) .bottom .time(2)

                } .elif varD == 24 bl {
                    @se.play "Earth8" .opt 100, 50, 50
                    @scr.shake .once(2) .value(1, 7)

                } .elif varD == 60 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X + 16, $Y)  .bottom .time(2)

                } .elif varD == 72 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y + 4)  .bottom .time(2)

                } .elif varD == 84 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y)  .bottom .time(2)

                    @se.play "Earth8" .opt 100, 50, 50
                    @scr.shake .once(2) .value(1, 7)
                    
                    varC = 0
                    varD = 0
                }

            //左ステップ
            } .elif varC == 4 bl {
                @if varD == 1 bl {
                    @pic.show[PIC_H_PLAYER] .pos($X, $Y) .cell(1) h_playerPicCmd
                    @pic.move[PIC_H_PLAYER] .pos($X - 16, $Y)  .bottom .time(2)

                } .elif varD == 12 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X - 32, $Y + 4) .bottom .time(2)

                } .elif varD == 24 bl {
                    @se.play "Earth8" .opt 100, 50, 50
                    @scr.shake .once(2) .value(1, 7)

                } .elif varD == 60 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X - 16, $Y)  .bottom .time(2)

                } .elif varD == 72 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y + 4)  .bottom .time(2)

                } .elif varD == 84 bl {
                    @pic.move[PIC_H_PLAYER] .pos($X, $Y)  .bottom .time(2)

                    @se.play "Earth8" .opt 100, 50, 50
                    @scr.shake .once(2) .value(1, 7)
                    
                    varC = 0
                    varD = 0
                }
            }

            //----------------------------
            //アミィ
            $X = HELEN_REF_X + HELEN_EN_X
            $Y = HELEN_REF_Y + HELEN_HEIGHT

            varF += 1

            //立ち
            @if varE == 0 bl {
                @if varF > 120 bl {
                    varE = 1
                    varF = 0
                }

            //攻撃
            } .elif varE == 1 bl {
                @if varF == 1 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X, $Y + 0) .cell(1) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X, $Y + 8)  .bottom .time(5)

                } .elif varF == 40 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X - 16, $Y + 8) .cell(2) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X - 32, $Y)  .bottom .time(2)

                    @scr.shake .once(2) .value(1, 5)

                    @if `varC == 0 || varC == 1 bl {
                        varC = 2
                        varD = 0

                        @se.play "punch2" .opt(100, 80, 50)

                    } .else bl {
                        @se.play "Earth6" .opt(100, 100, 50)
                    }

                } .elif varF == 100 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X - 16, $Y) .cell(1) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X, $Y)  .bottom .time(2)

                    varE = 0
                    varF = 0
                }

            //のけぞり
            } .elif varE == 2 bl {
                @if varF == 1 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X, $Y + 0) .cell(3) .rgbs(200, 100, 100, 100) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X + 16, $Y + 8)  .bottom .time(10)

                } .elif varF == 60 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X + 24, $Y + 8) .cell(4) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X + 24, $Y)  .bottom .time(2)

                    @se.play "Earthquake1" .opt(100, 100, 50)
                    @scr.shake .once(4) .value(4, 7)

                    //鳥
                    @pic.show[PIC_H_BARD] .pos(HELEN_REF_X + 200, HELEN_REF_Y + HELEN_HEIGHT + 32) .rangeAnim(12, 1, 2) .repeat h_bardPicCmd
                    @pic.move[PIC_H_BARD] .relative .pos(-320, -240) .trans(0) .scale(0) .time(30)

                    //煙
                    @loop HELEN_SM_NUM .dst(idx) bl {
                        pid = PIC_H_EN_SM + idx
                        bx = rnd(-8, 8)
                        by = rnd(-8, 8)
                        V2_set(ax, HELEN_REF_X + HELEN_EN_X - 0 + idx * 32 + bx, HELEN_REF_Y + HELEN_HEIGHT + 32 + by)

                        @pic.show [pid] .pos(ax, ay) .trans(-100) .scale(150) .rotate(-1) h_smokePicCmd
                        @pic.move [pid] .relative .pos(0, -64) .trans(200) .scale(50) .rotate(-1) .time(20)
                    }

                } .elif varF == 120 bl {
                    @pic.show[PIC_H_ENEMY] .pos($X + 8, $Y + 32) .cell(1) h_enemyPicCmd
                    @pic.move[PIC_H_ENEMY] .pos($X, $Y)  .bottom .time(2)

                } .elif varF == 140 bl {
                    varE = 0
                    varF = 0
                }
            }
        }
    }

    //------------------------------------------------------------------------------------
    //シノテイカー
    //varA:入力 varB:アニメーション varC:進行度 varD:イベント発生済
    @label.set "gameLoop_shino"
    bl {
        //初期化
        @pic.strpic [PIC_S_TEXT] "\c[2]$t\c[0]:進む  \c[2]X\c[0]:終了" .pos(0, 0) .topLeft baseStrPicCmd
        @pic.show[PIC_S_WINDOW] PATH_S_WIN .pos(WINDOW_WIDTH / 2, WINDOW_HEIGHT / 2) .center .scale(1000) basePicCmd

        //キャラを設置する
        @loop 11 .dst(idx) bl {
            V2_set(ax,
                SINO_CHARA_X + 24 * idx,
                SINO_CHARA_Y
            )

            //アニメーション(0以下で無効)
            bx = 1 + 4 * [0, 10, -1, -1, -1, 5, 11, 6, 7, 8, 9][idx]
            by = bx + 3

            @if bx > 0 bl {
                pid = PIC_S_CHARA + idx
                @pic.show[pid] .pos(ax, ay) .rangeAnim(12, bx, by) .repeat s_charaPicCmd
            }
        }

        //BGM
        startBGM("water1ctrl", FALSE, 0, 100, 100, 50)
        //暗転
        fastFadeInTintOnly(1)

        //オープニングイベント
        @wait(5)
        _s_showPortrait(PATH_S_SOL, 1, 1)
        @wait(1)
"\>\c[2]兵士(右)\c[0]
\>しーちゃんさんがポテチを盗んだそうですよ"
"\>\c[2]兵士(左)\c[0]
\>ストーリーやパズル要素は無いよ"
        _s_erasePortrait()
        @wait(2)

        //----------------------------
        //ループ
        @loop bl {
            @wait(0)

            timer += 1

            //----------------------------
            //操作
            _commonCheckCancel()

            @key.input .dst(ipt) .right
            varA = (ipt) ? (varA + 1) : (0)

            //----------------------------
            //主人公の位置
            V2_set(ax, SINO_CHARA_X + 24 * varC, SINO_CHARA_Y)

            //待機
            @if varB == 0 bl {
                @if timer == 1 bl {
                    @pic.show[PIC_S_CHARA + 0] .pos(ax, ay) .rangeAnim(12, 1, 4) .repeat s_charaPicCmd
                }

                @if `(varA - 1) % 16 == 0 bl {
                    //話しかける
                    @if varD == 0 bl {
                        //イベント発生済フラグ
                        varD = 1

                        //相手のピクチャID
                        pid = PIC_S_CHARA + varC + 1

                        //--------------------------------
                        //ブライアン
                        @if `between(varC, 0, 3) bl {
                            //最初の会話
                            @if varC == 0 bl {
"\>\c[2]ブライアン\c[0]
\>アレーーックス！！
\>俺を仲間に入れてくれアレーックス！！"
                            }

                            //吹っ飛ばし
                            @if varC == 3 bl {
                                @se.play "Blow3" .opt(80, 100, 50)
                                @se.play "voice_boy13" .opt(80, 80, 50)
                                V2_set(bx, SINO_CHARA_X + 24 * (varC + 1) + 200, SINO_CHARA_Y - 200)

                            //回避
                            } .else bl {
                                @se.play "Evade1" .opt(100, 100, 50)
                                V2_set(bx, SINO_CHARA_X + 24 * (varC + 2), SINO_CHARA_Y)
                            }

                            //ブライアンのピクチャID
                            pid = PIC_S_CHARA + 1

                            timer = 0
                            @loop 27 bl {
                                @wait(0)
                                timer += 1

                                cell = [9, 9, 9, 9, 9, 10, 11, 12, 1][(timer - 1) / 3]
                                @pic.show[PIC_S_CHARA + 0] .pos(ax, ay) .cell(cell) s_charaPicCmd
                                @pic.move[pid] .pos(bx, by) .bottom .time(1)
                            }

                            @if varC == 0 bl {
"\>\c[2]ブライアン\c[0]
\>おっと、吹っ飛ばせると思ったか？
\>避ければ怖くないぜ！"
                            } .elif varC == 1 bl {
"\>\c[2]ブライアン\c[0]
\>諦めて俺を仲間に入れろよな！"
                            } .elif varC == 2 bl {
"\>\c[2]ブライアン\c[0]
\>はい、また回避ーwww"
                            }
                            //立ち状態に戻る
                            _s_setState(0)

                        //--------------------------------
                        //ホワイトハウス
                        } .elif varC == 4 bl {
                            @se.play "Combat2" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(31, 31, 31, 31) .wait
                            _s_showPortrait(PATH_S_WHI, 3, 1)
                            @wait(1)
"\>\c[2]正門のホワイトハウス\c[0]
\>おーっと、何かご用ですか？"
                            @msg.choice bl {
                                .case "\>宅配便です" {
                                    _s_showPortrait(PATH_S_WHI, 3, 2)
"\>\c[2]正門のホワイトハウス\c[0]
\>えーと…ちょっと判子が見つかりませんね…
\>私の中に入っていただけますか？"
                                }
                                .case "\>君が欲しい" {
                                    _s_showPortrait(PATH_S_WHI, 3, 3)
"\>\c[2]正門のホワイトハウス\c[0]
\>私の中に住みたいって事？
\>じゃあ、中に入って入隊試験を受けてくださいね"
                                }
                            }
                            _s_erasePortrait()
                            @wait(2)
                            _s_getCharacter(pid)
                            _s_setState(3)

                        //--------------------------------
                        //アグネ
                        } .elif varC == 6 bl {
                            @se.play "Combat2" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(31, 31, 31, 31) .wait
                            _s_showPortrait(PATH_S_AGU, 3, 1)
                            @wait(1)
"\>\c[2]灼熱将軍のアグネファイア\c[0]
\>アレックスじゃないか
\>その様子だと攻め入りに来たって感じだな
\>"
                            @msg.choice bl {
                                .case "\>君に会いに来た" {}
                            }
                            _s_showPortrait(PATH_S_AGU, 3, 2)
"\>\c[2]灼熱将軍のアグネファイア\c[0]
\>それは嬉しいな
\>なら早速、ボス戦と行くか！"
                            _s_showPortrait(PATH_S_AGU, 3, 3)
"\>\c[2]灼熱将軍のアグネファイア\c[0]
\>は？ポテチ？
\>珍しいな…"
"\>\c[2]灼熱将軍のアグネファイア\c[0]
\>そういう事なら、とっとと通ってくれ
\>ぶっ飛ばされたくないしな"
                            _s_erasePortrait()
                            @wait(2)
                            _s_getCharacter(pid)
                            _s_setState(3)

                        //--------------------------------
                        //ブリ
                        } .elif varC == 7 bl {
                            @se.play "Combat2" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(31, 31, 31, 31) .wait
                            _s_showPortrait(PATH_S_BLI, 3, 1)
                            @wait(1)
"\>\c[2]冬将軍のブリザルド\c[0]
\>私の冷気は時間すらも凍らせる
\>アナタを氷の彫刻にしてあげるわ
\>"
                            @msg.choice bl {
                                .case "\>既に君に釘付けだ" {}
                            }
                            _s_showPortrait(PATH_S_BLI, 3, 2)
"\>\c[2]冬将軍のブリザルド\c[0]
\>えぇ？キャラ変えた？"

"\>\c[2]冬将軍のブリザルド\c[0]
\>…あぁ、ポテチね
\>なら通っていいか"
                            _s_showPortrait(PATH_S_BLI, 3, 3)
"\>\c[2]冬将軍のブリザルド\c[0]
\>凍らせるのは、また後でね"
                            _s_erasePortrait()
                            @wait(2)
                            _s_getCharacter(pid)
                            _s_setState(3)

                        //--------------------------------
                        //ライス
                        } .elif varC == 8 bl {
                            @se.play "Combat2" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(31, 31, 31, 31) .wait
                            _s_showPortrait(PATH_S_RIS, 3, 1)
                            @wait(1)
"\>\c[2]電光のライスパーク\c[0]
\>他の二人は倒れたか…
\>次は電光のライスパークが相手だ！
\>"
                            @msg.choice bl {
                                .case "\>素敵な時間を過ごしに来た" {}
                            }
                            _s_showPortrait(PATH_S_RIS, 3, 3)
"\>\c[2]電光のライスパーク\c[0]
\>急に何言ってんの
\>口説くにしても雰囲気を考えなよ"
                            _s_showPortrait(PATH_S_RIS, 3, 2)
"\>\c[2]電光のライスパーク\c[0]
\>あ、奢ってくれるとか！？
\>そういうのだったら歓迎するよ！"
                            _s_erasePortrait()
                            @wait(2)
                            _s_getCharacter(pid)
                            _s_setState(3)

                        //--------------------------------
                        //死の支配者
                        } .elif varC == 9 bl {
                            @se.play "Combat2" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(31, 31, 31, 31) .wait
                            _s_showPortrait(PATH_S_SHI, 4, 1)
                            @wait(8)

                            @se.play "Darkness4" .opt(80, 100, 50)
                            @scr.flash .once(3) .rgbv(0, 0, 0, 31)
                            _s_showPortrait(PATH_S_SHI, 4, 2)
                            @wait(1)
"\>\c[2]死の支配者\c[0]
\>よくぞ！ここまで来たな勇者よ！"
"\>\c[2]死の支配者\c[0]
\>その魂を私に捧げて
\>永久に尽くす事を誓いなさーい
\>"
                            @msg.choice bl {
                                .case "\>ポテチよりも美味しいものを紹介しよう" {}
                            }
                            _s_showPortrait(PATH_S_SHI, 4, 3)
"\>\c[2]死の支配者\c[0]
\>見境ないね
\>どうして私が君に従うっていうのさ
\>"
                            @msg.choice bl {
                                .case "\>チョコレートムースケーキはどうだ？" {}
                            }
"\>\c[2]死の支配者\c[0]
\>ライスならいざ知らず
\>私を食べ物で釣れるとは思わないでくれよ"
"\>\c[2]死の支配者\c[0]
\>でも運が良いね
\>ちょうど滑らかで甘いものが食べたいと思ってた"
                            _s_showPortrait(PATH_S_SHI, 4, 4)
"\>\c[2]死の支配者\c[0]
\>もしかしたら気が合うかもね？"
                            _s_erasePortrait()
                            @wait(2)

                            _s_getCharacter(pid)
                            _s_setState(3)
                            @wait(10)
                            @scr.tint .rgbs(0, 0, 0, 100) .time(1) .wait

"\>旅は終わった
\>強大なる将軍たちを連れ出したのだ"
"\>その後、君は彼女たちの財布になった！
\>ハーレムを夢見た者の末路だろうか"
"\>まぁ、これも一つの冒険なのかもしれない
\>そういう事にしよう"
"\>\c[2]アレックス\c[0]
\>めでたくねぇ…"
"\>\c[2]ブライアン\c[0]
\>次はアレ食おうぜ！
\>お前の奢りだと、いくらでも食えるな！"
                            @se.play "voice_ora1" .opt(100, 100, 50)
                            @wait(3)
                            @se.play "hit_db" .opt(80, 100, 50)
                            @se.play "voice_boy13" .opt(60, 80, 50)
                            @wait(5)
"\>おしまい！！"
"\>\c[2]ゴメス\c[0]
\>ポテチ忘れてね？"
                            @se.play "Cancel2" .opt (80, 100, 50)
                            @wait(2)
                            
                            //ゲーム終了
                            @label.jump "selectToy"

                        //ホネボーン
                        } .elif varC == 5 bl {
                            @se.play "Blow3" .opt(80, 100, 50)
                            @pic.move[pid] .relative .pos(200, -200) .scale(0) .trans(0) .time(1)
                            //蹴り
                            _s_setState(2)
                        }

                    //前方に移動する
                    } .else bl {
                        _s_setState(1)                        
                    }
                }
            //移動
            } .elif varB == 1 bl {
                @if timer == 1 bl {
                    varC += 1
                    varD = 0
                    @pic.show[PIC_S_CHARA + 0] .pos(ax, ay) .rangeAnim(3, 5, 8) .repeat s_charaPicCmd

                    @se.play "Bow2" .opt(70, 150, 50)

                } .elif timer == 1 + 3 * 4 bl {
                    _s_setState(0)

                } .else bl {
                    @pic.move[PIC_S_CHARA + 0] .pos(ax, ay) .bottom .time(-4)
                }

            //蹴り
            } .elif varB == 2 bl {
                @if `between(timer, 1, 24) && timer % 3 == 1 bl {
                    cell = [9, 9, 9, 9, 10, 11, 12, 1][(timer - 1) / 3]
                    @pic.show[PIC_S_CHARA + 0] .pos(ax, ay) .cell(cell) s_charaPicCmd

                } .elif timer == 25 bl {
                    _s_setState(0)
                }

            //ガッツポーズ
            } .elif varB == 3 bl {
                @if `between(timer, 1, 32) && timer % 4 == 1 bl {
                    cell = [13, 14, 15, 16, 16, 16, 16, 16][(timer - 1) / 4]
                    @pic.show[PIC_S_CHARA + 0] .pos(ax, ay) .cell(cell) s_charaPicCmd

                } .elif timer == 33 bl {
                    _s_setState(0)
                }
            }
        }
    }

    //----------------------------
    //終了する
    @label.set "gameEnd"
    bl {
        //暗転
        fastFadeInTintOnly(1)
    }
}