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

/*
@return
スコア
エクストラボール
*/
cev[CEV_ETERNAL_BATTLE] .name("mg_エターナルバトル") {

    def {
        NUM_OF_VAR = 24
        NUM_OF_STR = 0
        NUM_OF_PIC = 20

        BASE_LAYER = 7

        PATH_BACK    = "eb\back"
        PATH_INPUT   = "eb\input"
        PATH_FILTER  = "eb\filter"
        PATH_SCENE   = "eb\scene"
        PATH_OPENING = "eb\kanae"
        PATH_ET_BACK = "eb\eta_back"
        PATH_ET_BODY = "eb\eta_body"
        PATH_ET_HAND = "eb\eta_hand"
        PATH_BR_BODY = "eb\brian_body"
        PATH_HP      = "eb\hp"
        PATH_WIN_BACK   = "eb\win_back"
        PATH_WIN_FRONT  = "eb\win_front"
        PATH_LOSE_BACK  = "eb\lose_back"
        PATH_LOSE_FRONT = "eb\lose_front"

        PIC_HEAD = 160//ピンボールのピクチャと干渉しないように
        PIC_EXP
        PIC_BACK
        PIC_MIDDLE_HEAD
        PIC_BASE
        PIC_FRONT
        PIC_ETANAL_BACK
        PIC_ETANAL_BODY
        PIC_ETANAL_HAND
        PIC_BRIAN_BODY
        PIC_ETANAL_HP
        PIC_BRIAN_HP
        PIC_MIDDLE_FOOT
        PIC_INPUT
        PIC_SCENE
        PIC_FILTER//1_16

        //状態
        STATE_WAIT = 0
        STATE_ATTACK
        STATE_COUNTER
        STATE_SLOW

        CHAR_STATE_NONE = 0
        CHAR_STATE_CENTER
        CHAR_STATE_LEFT
        CHAR_STATE_RIGHT

        //説明文
        STRING_EXP = "            『 エターナルを撃破せよ！ 』
\c[2]$v/Sh/Z/X\c[0]:左防御 \c[2]入力なし\c[0]:中央防御 \c[2]$s/$u/$t\c[0]:右防御"

        //定数
        MAX_HP = 4 //最大体力

        //ボーナス算出
        //= ((自分の残り体力 * 500 + (4 - 敵の残り体力) * 800) + 800) * (1 + パーフェクトボーナス)
        //エクストラボール
        //= (敵の残り体力 <= 1) ? 1 : 0
        GET_BONUS = ((brianHP * 500 + (MAX_HP - etanalHP) * 800) + 800) * (1 + (brianHP >= MAX_HP ? 1 : 0))
        GET_EXTRA = etanalHP <= 1 ? 1 : 0
    }

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

        //一枚絵用の共通ブロック
        //pos,trans,grid,cell
        singlePicCmd = bl {
            .topLeft
            basePicCmd
        }

        //キャラクター用共通ブロック
        //pos,grid,cell
        charaPicCmd = bl {
            .top
            basePicCmd
        }

        flashPicCmd = bl {
            .top
            .rgbs(150, 150, 150, 150)
            basePicCmd
        }

        //文字列ピクチャ用共通ブロック
        //pos
        baseStrPicCmd = bl {
            .topLeft
            .font("", 24) .bold
            .skin "" .nobg .noframe .noPadding
            .size(0, 0)
            .spacing(0, 4)
            basePicCmd
        }

        expStrPicCmd = bl {
            STRING_EXP
            .skin "" .stretch
            .font("", 12)
            .pos(0, -176) .topLeft
            .scale(100)
            .trans(0)
            .size(320, 48)
        }

        //pos,trans
        moveSinglePicCmd = bl {
            .topLeft
        }

        //pos
        moveCharaPicCmd = bl {
            .top
            .keepFlip
        }

    }

    //変数定義
    defv {
        varHead = TV_MINIGAME
        
        ipt
        iptLeft
        iptRight
        cell
        vol
        sceneState
        sceneTimer
        etanalTimer
        etanalState
        etanalAtk
        etanalHP
        brianTimer
        brianState
        brianHP
        bonus
        extra

        varFoot

        r_bonus = TV_RETURN
        r_extra

    }

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

    //中間のピクチャを消去
    __fn _eraseMiddlePictures bl {
        @pic.erase [PIC_MIDDLE_HEAD..PIC_MIDDLE_FOOT]
        
    }

    //左右のどちらかが入力されるまで待つ
    __fn _waitForInput bl {
        @pic[PIC_INPUT].move {
            .relative
            .pos(0, 0) .center
            .scale(0)
            .trans(-100)
            .keepRgbs
            .keepBlend
        }

        getAnyKey(ipt, TRUE)

        @pic[PIC_INPUT].move {
            .relative
            .pos(0, 0) .center
            .scale(0)
            .trans(100)
            .keepRgbs
            .keepBlend
        }
        @wait(0)
    }

    //画面表示
    __fn _fadeIn bl {
        @pic[PIC_SCENE].move {
            .pos(-160, 64) .topLeft
            .scale(100)
            .trans(0)
            .keepRgbs
            .keepBlend
        }
        @wait(0)

        @loop 30 {
            @pic[PIC_SCENE].move {
                .relative
                .pos(-16, 0) .center
                .scale(0)
                .trans(0)
                .keepRgbs
                .keepBlend
            }
            @wait(0)
        }
    }

    //画面消去
    __fn _fadeOut bl {
        @pic[PIC_SCENE].move {
            .pos(-640, 64) .topLeft
            .scale(100)
            .trans(0)
            .keepRgbs
            .keepBlend
        }
        @wait(0)

        @loop 30 {
            @pic[PIC_SCENE].move {
                .relative
                .pos(16, 0) .center
                .scale(0)
                .trans(0)
                .keepRgbs
                .keepBlend
            }
            @wait(0)

        }

        @pic[PIC_SCENE].move {
            .relative
            .pos(0, 0) .center
            .scale(0)
            .trans(100)
            .keepRgbs
            .keepBlend
        }
        //ウェイトなし
    }

    //------------------------------------------------------------------------------------
    //開始処理
    bl {
        initPicturesAndVariables(PIC_HEAD, NUM_OF_PIC, TV_MINIGAME, NUM_OF_VAR, 0, 0)
        storeAndStopBGM()

        //周りを暗くする
        @scr.tint .rgbs(50, 50, 50, 100) .time(3)
        @se.play "Recovery7" .opt(90, 80, 50)

        //常に使用するピクチャ
        @pic[PIC_EXP].strpic STRING_EXP .pos(0, -176) .topLeft expStrPicCmd
        @pic[PIC_BACK].show   PATH_BACK   .pos(0,-112) .trans( 0) singlePicCmd
        @pic[PIC_FILTER].show PATH_FILTER .pos(0,-112) .trans(50) .grid(1, 2) .anim(4) .repeat .multi singlePicCmd
        @wait(1)

        //下へスライドする
        $moveBlock = {
            .relative
            .pos(0, 176)
            .scale(0)
            .trans(0)
            .time(3)
            .keepRgbs
            .keepBlend
        }
        @pic[PIC_EXP ].move   $moveBlock
        @pic[PIC_BACK].move   $moveBlock
        @pic[PIC_FILTER].move $moveBlock
        @wait(3)

        //最初は透明な状態
        @pic[PIC_INPUT ].show PATH_INPUT .pos(4, 148) .trans(100) .grid(1, 2) .anim(30) .repeat singlePicCmd
        @pic[PIC_SCENE ].show PATH_SCENE .pos(0,  64) .trans(100) singlePicCmd
        @wait(0)

        //--------------------------------
        //初期シーン
        startBGM("J2003Horn", FALSE, 0, 100, 100, 50)
        //ピクチャ
        //一瞬だけ透明にする
        @pic[PIC_BASE].show PATH_OPENING .pos(0, 64) .trans(100) singlePicCmd
        @pic[PIC_BASE].move .pos(0, 64) .trans(0) moveSinglePicCmd

        //画面表示
        _fadeIn()

        //入力待ち
        _waitForInput()

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

        //画面消去
        _fadeOut()

        //ピクチャを消去する
        @pic.erase[PIC_BASE]

        //--------------------------------
        //戦闘シーン
        startBGM("2003Repeated Wars", FALSE, 0, 100, 100, 50)
        //ピクチャ
        //エターナル
        @pic[PIC_ETANAL_BACK].show PATH_ET_BACK .pos(160, 64) charaPicCmd
        @pic[PIC_ETANAL_BODY].show PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(1) charaPicCmd
        @pic[PIC_ETANAL_HAND].show PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd

        //ブライアン
        @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd

        //体力
        @pic[PIC_ETANAL_HP].show PATH_HP .pos( 32, 146) .grid(1,10) .cell(10) singlePicCmd
        @pic[PIC_BRIAN_HP ].show PATH_HP .pos(218, 146) .grid(1,10) .cell( 5) singlePicCmd

        _fadeIn()
        @wait(2)

        //変数初期化
        sceneState = STATE_WAIT
        sceneTimer = 0
        etanalTimer = 0
        etanalState = CHAR_STATE_NONE
        etanalAtk = 0
        etanalHP = MAX_HP
        brianTimer = 0
        brianState = CHAR_STATE_NONE
        brianHP = MAX_HP
    }

    //------------------------------------------------------------------------------------
    //ゲームループ
    @label.set "gameLoop"
    bl {
        //待機
        @if sceneState == STATE_WAIT bl {
            //初期化
            @pic[PIC_ETANAL_BODY].show PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(1) charaPicCmd
            @pic[PIC_ETANAL_HAND].show PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd
            @pic[PIC_BRIAN_BODY ].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd

            //変数初期化
            brianTimer = 0
            brianState = CHAR_STATE_NONE

            //攻撃までの猶予
            //連続攻撃中は0、通常は30+乱数*60
            etanalTimer = etanalAtk > 0 ? 0 : 30 + rnd(0, 6) * 10
            etanalState = CHAR_STATE_NONE

            //ループ
            @loop bl {
                sceneTimer += 1

                //ブライアン
                @if brianState == CHAR_STATE_NONE bl {
                    //入力を取得する
                    //左:shift,決定,キャンセル,左
                    //右:右,下,上
                    @key.input .dst(iptLeft) {
                        .left
                        .decision
                        .cancel
                        .shift
                    }
                    @key.input .dst(iptRight) {
                        .right
                        .down
                        .up
                    }

                    //決定キーと左入力は同じものとして扱う
                    ipt = (iptRight != 0 ? 1 : 0) - (iptLeft != 0 ? 1 : 0)

                    //防御
                    @if ipt != 0 bl {
                        //防御判定は0.5秒維持する
                        brianTimer = UNIT_FPS / 2
                        brianState = ipt > 0 ? CHAR_STATE_RIGHT : CHAR_STATE_LEFT

                        //防御モーション
                        @if brianState == CHAR_STATE_LEFT bl {
                            @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(4) charaPicCmd
                            @pic[PIC_BRIAN_BODY].move .pos(156, 64) .time(1) moveCharaPicCmd
                        }

                        @if brianState == CHAR_STATE_RIGHT bl {
                            @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(3) charaPicCmd
                            @pic[PIC_BRIAN_BODY].move .pos(164, 64) .time(1) moveCharaPicCmd
                        }

                    //待機モーション
                    } .else bl {
                        //上下に揺れる
                        @if `sceneTimer % UNIT_FPS == 00 bl {
                            @pic[PIC_BRIAN_BODY].move .pos(160, 64) .time(3) moveCharaPicCmd
                        }
                        @if `sceneTimer % UNIT_FPS == 30 bl {
                            @pic[PIC_BRIAN_BODY].move .pos(160, 66) .time(4) moveCharaPicCmd
                        }
                    }

                //防御中
                } .else bl {
                    brianTimer -= 1

                    //判定を緩く見せる為にピクチャは早めに戻る
                    @if brianTimer == 5 bl {
                        @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd
                    }

                    //立ち状態に戻る
                    @if brianTimer <= 0 bl {
                        brianTimer = 0
                        brianState = CHAR_STATE_NONE
                    }
                }

                //エターナル
                @if etanalState == CHAR_STATE_NONE bl {
                    etanalTimer -= 1

                    @if etanalTimer <= 0 bl {
                        etanalTimer = 0

                        //攻撃方向を決定する
                        //左右:40%  中央:20%
                        ipt = rnd(0, 99)

                        @if ipt < 20 bl {
                            etanalState = CHAR_STATE_CENTER
                        } .elif ipt < 60 bl {
                            etanalState = CHAR_STATE_LEFT
                        } .else bl {
                            etanalState = CHAR_STATE_RIGHT
                        }

                        //連続攻撃回数
                        @if etanalAtk <= 0 bl {
                            etanalAtk = 2
                        } .else bl {
                            //攻撃回数を消化
                            etanalAtk -= 1
                        }

                        //攻撃速度
                        //最初は遅く、後半は0.33秒くらい
                        etanalTimer = [0, 18, 22, 30, 45][etanalHP]
                        
                        //効果音
                        @se.play "Attack1" .opt(100, 100, 50)

                        //体
                        @pic[PIC_ETANAL_BODY].show PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(4) flashPicCmd

                        //手
                        @if etanalState == CHAR_STATE_CENTER bl {
                            @pic[PIC_ETANAL_HAND].show PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(5) flashPicCmd
                        }

                        @if etanalState == CHAR_STATE_LEFT bl {
                            @pic[PIC_ETANAL_HAND].show PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(3) .hrev flashPicCmd
                        }

                        @if etanalState == CHAR_STATE_RIGHT bl {
                            @pic[PIC_ETANAL_HAND].show PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(3) flashPicCmd
                        }

                        //少し後退する
                        @pic[PIC_ETANAL_BODY].move .pos(160, 66) .time(2) moveCharaPicCmd
                        @pic[PIC_ETANAL_HAND].move .pos(160, 64) .time(2) moveCharaPicCmd

                    //待機モーション
                    } .else bl {
                        //上下に揺れる
                        @if `sceneTimer % UNIT_FPS == 10 bl {
                            @pic[PIC_ETANAL_HAND].move .pos(160, 64) .time(4) moveCharaPicCmd
                        }
                        @if `sceneTimer % UNIT_FPS == 40 bl {
                            @pic[PIC_ETANAL_HAND].move .pos(160, 66) .time(3) moveCharaPicCmd
                        }
                    }
                //攻撃準備中
                } .else bl {
                    etanalTimer -= 1
                    @if etanalTimer <= 0 bl {
                        //攻撃動作へ
                        sceneState = STATE_ATTACK
                        @label.jump "gameLoop"
                    }
                }
                @wait(0)
            }
        }

        //--------------------------------
        //攻撃
        @if sceneState == STATE_ATTACK bl {
            //エターナル
            @if etanalState == CHAR_STATE_CENTER bl {
                @pic.show [PIC_ETANAL_BODY] PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(4) charaPicCmd
                @pic.show [PIC_ETANAL_HAND] PATH_ET_HAND .pos(160, 62) .grid(1, 6) .cell(6) charaPicCmd
            }

            @if etanalState == CHAR_STATE_LEFT bl {
                @pic.show [PIC_ETANAL_BODY] PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(3) .hrev charaPicCmd
                @pic.show [PIC_ETANAL_HAND] PATH_ET_HAND .pos(160, 62) .grid(1, 6) .cell(4) .hrev charaPicCmd
            }

            @if etanalState == CHAR_STATE_RIGHT bl {
                @pic.show [PIC_ETANAL_BODY] PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(3) charaPicCmd
                @pic.show [PIC_ETANAL_HAND] PATH_ET_HAND .pos(160, 62) .grid(1, 6) .cell(4) charaPicCmd
            }

            //少し前進する
            @pic[PIC_ETANAL_BODY].move .pos(160, 62) .time(2) moveCharaPicCmd
            @pic[PIC_ETANAL_HAND].move .pos(160, 64) .time(2) moveCharaPicCmd

            //ブライアン
            //未入力は中央防御として扱う
            @if brianState == CHAR_STATE_NONE bl {
                brianState = CHAR_STATE_CENTER
            }

            //防御に成功した
            @if brianState == etanalState bl {
                @se.play "Sword2" .opt(100, 100, 50)

                @if brianState == CHAR_STATE_CENTER bl {
                    @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(5) charaPicCmd
                }

                @if brianState == CHAR_STATE_LEFT bl {
                    @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(4) charaPicCmd
                }

                @if brianState == CHAR_STATE_RIGHT bl {
                    @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(3) charaPicCmd
                }

                @pic[PIC_BRIAN_BODY].move .pos(160, 66) .time(2) moveCharaPicCmd

            //防御に失敗した
            } .else bl {
                @se.play "Damage1" .opt(100, 100, 50)

                //ブライアンのダメージモーション
                @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(2) charaPicCmd
                @pic[PIC_BRIAN_BODY].move .pos(160, 66) .time(2) moveCharaPicCmd

                //体力減少
                //無敵モード中は減らない
                @if invincibleSwitch.isOff bl {
                    brianHP -= 1
                }

                //体力を更新する
                cell = brianHP + 1
                @pic[PIC_BRIAN_HP ].show PATH_HP .pos(218, 146) .grid(1,10) .cell(cell) singlePicCmd

                //敗北演出へ
                @if brianHP <= 0 bl {
                    sceneState = STATE_SLOW
                    @label.jump "gameLoop"
                }
            }

            //敵の体力が減っているほど、待機時間が減る
            etanalTimer = [0, 20, 24, 30, 30][etanalHP]
            @wait .frame(etanalTimer)

            //もう一度攻撃する
            @if etanalAtk > 0 bl {
                sceneState = STATE_WAIT
            //最後の攻撃を防御できた場合、反撃する
            } .elif brianState == etanalState bl {
                sceneState = STATE_COUNTER
            //攻撃を受けた
            } .else bl {
                sceneState = STATE_WAIT
            }

            @label.jump "gameLoop"
        }

        //--------------------------------
        //反撃
        @if sceneState == STATE_COUNTER bl {
            @se.play "Attack2" .opt(100, 100, 50)

            //エターナル
            @pic.show [PIC_ETANAL_BODY] PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(1) charaPicCmd
            @pic.show [PIC_ETANAL_HAND] PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(1) charaPicCmd

            //ブライアン
            @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(1) flashPicCmd
            @pic[PIC_BRIAN_BODY].move .pos(160, 66) .time(2) moveCharaPicCmd

            //待機
            @wait .frame(20)

            //攻撃
            @se.play "Damage1" .opt 100, 100, 50

            //エターナル
            @pic.show [PIC_ETANAL_BODY] PATH_ET_BODY .pos(160, 64) .grid(1, 4) .cell(2) charaPicCmd
            @pic.show [PIC_ETANAL_HAND] PATH_ET_HAND .pos(160, 64) .grid(1, 6) .cell(2) charaPicCmd
            @pic[PIC_ETANAL_BODY].move .pos(160, 62) .time(2) moveCharaPicCmd
            @pic[PIC_ETANAL_HAND].move .pos(160, 62) .time(2) moveCharaPicCmd

            //ブライアン
            @pic[PIC_BRIAN_BODY].show PATH_BR_BODY .pos(160, 64) .grid(1, 6) .cell(6) charaPicCmd
            @pic[PIC_BRIAN_BODY].move .pos(160, 62) .time(2) moveCharaPicCmd

            //体力減少
            etanalHP -= 1

            //体力を更新する
            cell = etanalHP + 6
            @pic[PIC_ETANAL_HP ].show PATH_HP .pos(32, 146) .grid(1,10) .cell(cell) singlePicCmd

            //勝利演出へ
            @if etanalHP <= 0 bl {
                sceneState = STATE_SLOW
            //通常状態へ
            } .else bl {
                @wait .frame(40)
                sceneState = STATE_WAIT
            }
            @label.jump "gameLoop"
        }

        //--------------------------------
        //スローモーション
        @if sceneState == STATE_SLOW bl {
            //変数を初期化する
            etanalTimer = 0
            etanalState = brianHP > 0 ? TRUE : FALSE

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

            //残響音
            @loop 120 .dst(etanalTimer) {
                @if `etanalTimer % 20 == 0 bl {
                    vol = 100 - etanalTimer / 20 * 20
                    @if vol >= 10 {
                        @if etanalState == TRUE {
                            //勝利
                            @se.play "Damage1" .opt(vol, 100, 50)
                        } .else bl {
                            //敗北
                            @se.play "Damage2" .opt(vol, 100, 50)
                        }
                    }
                }
                @wait(0)
            }

            //ピクチャを消去する
            _eraseMiddlePictures()

            //勝利
            @if etanalState == TRUE bl {
                @label.jump "victory"
            //敗北
            } .else bl {
                @label.jump "lose"
            }
        }

        //異常終了
        @label.jump "exit"
    }

    //------------------------------------------------------------------------------------
    //勝利シーン
    @label.set "victory"
    bl {
        startBGM("JEnd of Battle 4", FALSE, 0, 100, 100, 50)

        //ピクチャ
        @pic.show[PIC_BASE ] PATH_WIN_BACK  .pos(0, 64) .trans(100) .grid(1, 2) .anim(20) .repeat singlePicCmd
        @pic.show[PIC_FRONT] PATH_WIN_FRONT .pos(0, 64) .trans(100) singlePicCmd
        @pic[PIC_BASE ].move .pos(0, 64) .trans(0) moveSinglePicCmd
        @pic[PIC_FRONT].move .pos(0, 64) .trans(0) moveSinglePicCmd

        //画面表示
        _fadeIn()

        //入力待ち
        _waitForInput()
        stopBGM(500)
        @se.play "Decision1" .opt(90, 100, 50)

        //画面消去
        _fadeOut()

        //ピクチャを消去
        _eraseMiddlePictures()

        @label.jump "result"
    }

    //------------------------------------------------------------------------------------
    //敗北シーン
    @label.set "lose"
    bl {
        //ピクチャ
        @pic.show[PIC_BASE ] PATH_LOSE_BACK  .pos(0, 64) .trans(100) singlePicCmd
        @pic.show[PIC_FRONT] PATH_LOSE_FRONT .pos(0, 64) .trans(100) singlePicCmd

        @pic.move[PIC_FRONT] .pos(0, 64) .trans(0) .time(1) moveSinglePicCmd

        @wait(10)    

        //理不尽にも消し飛ぶブライアン

        startBGM("Game Over 1", FALSE, 0, 100, 100, 50)
        @se.play "Earthquake1" .opt(100, 100, 50)

        @pic.move[PIC_FRONT] .pos(0, 64) .trans(0) .time(20) .wave(1) moveSinglePicCmd
        @wait(0)

        @pic.move[PIC_BASE ] .pos(0, 64) .trans(0) .time(10) moveSinglePicCmd
        @pic.move[PIC_FRONT] .pos(0, 64) .trans(100) .time(20) .wave(10) moveSinglePicCmd
        @wait(10)

        //入力待ち
        _waitForInput()
        stopBGM(500)
        @se.play "Decision1" .opt(90, 100, 50)

        //暗転
        @wait(5)
        _eraseMiddlePictures()

        @label.jump "result"
    }

    //------------------------------------------------------------------------------------
    //結果発表
    @label.set "result"
    bl {
        //ピクチャ番号を使いまわす
        def {
            PIC_SCORE   = PIC_BASE
            PIC_EXTRA   = PIC_FRONT
            PIC_PERFECT = PIC_ETANAL_BACK
        }
        
        bonus = GET_BONUS
        extra = GET_EXTRA

        @wait(4)

        //ピクチャを順番に表示する
        @se.play "Cursor1" .opt(100, 120, 50)
        @pic.strpic[PIC_SCORE] __str("\c[2]BONUS : \", bonus) .pos(64,  96) .scale(100) baseStrPicCmd
        @wait(2)
        @se.play "Cursor1" .opt(100, 120, 50)
        @pic.strpic[PIC_EXTRA] __str("\c[2]EXTRA : \", extra) .pos(64, 120) .scale(100) baseStrPicCmd 
        @wait(2)

        @if brianHP >= MAX_HP bl {
            @wait(2)
            @se.play "explo1" .opt(100, 100, 50)
            @pic.strpic[PIC_PERFECT] "\c[2]PERFECT!!" .pos(96, 72) .scale(20) baseStrPicCmd
            @pic.move[PIC_PERFECT] .relative .pos(0, 0) .trans(0) .scale(80) .time(5)
    
            //実績
            checkSetAchievement(achievedEtarnal, TRUE)
        } .else bl {
            @se.play "register2" .opt(100, 100, 50)
        }

        //入力待ち
        _waitForInput()
        @se.play "Decision1" .opt(90, 100, 50)

        //ピクチャを消去する
        _eraseMiddlePictures()

        @label.jump "exit"
    }

    //------------------------------------------------------------------------------------
    //終了処理
    @label.set "exit"
    bl {
        //ピクチャを上へ持っていく
        $moveBlock = {
            .relative
            .pos(0, -240)
            .scale(0)
            .trans(0)
            .time(3)
            .keepRgbs
            .keepBlend
        }
        @pic[PIC_EXP ].move   $moveBlock
        @pic[PIC_BACK].move   $moveBlock
        @pic[PIC_FILTER].move $moveBlock

        //色調を戻す
        @scr.tint .rgbs(100, 100, 100, 100) .time(3)

        @wait(3)

        //返り値を設定する
        r_bonus = bonus
        r_extra = extra

        initPicturesAndVariables(PIC_HEAD, NUM_OF_PIC, TV_MINIGAME, NUM_OF_VAR, 0, 0)
        restoreBGM()
    }
}