//--------------------------------
//毎F実行される
mev[MEV_ON_FRAME] .map(parentMap) .name("毎F実行") .pos(2,0)
mep[1] .parallel bl {
    //タイマー
    sceneTimer += 1

    pseudoSwitchState(sceneState,
        [ SC_ST_PLAY, bl {//ゲーム中
            //玉が無くなった
            @if `!eventMode bl {
                @if ballCount <= 0 bl {
                    //フリーズが起動している時は待機する
                    @if `freezeState == GIM_ST_EVENT bl {
                    //フリーズを起動する
                    } .elif freezeState == GIM_ST_ACTIVATED bl {
                        pbDisplay(DI_ST_NORMAL, "\c[2]フリーズ")
                        freezeState = GIM_ST_EVENT
                    //残機を消費するか聞く
                    } .elif chance > 0 bl {
                        changeSceneState(SC_ST_CHANCE)
                    //ゲームオーバー
                    } .else bl {
                        changeSceneState(SC_ST_GAMEOVER)
                    }
                }
            }
        },
        SC_ST_CHANCE, bl {
            @if sceneTimer == 0 bl {
                startEventMode()
            }
            @if sceneTimer >= 30 bl {
                @if sceneTimer == 30 bl {
                    $TEXT =
"\c[7]残機を消費して続けますか？
\c[2]$v\c[0]:やめる  \c[2]$t\c[0]:つづける"
                    pbDisplay(DI_ST_SELECT, $TEXT)
                }
                @if displayState != DI_ST_SELECT bl {
                    @if displaySelect == 1 bl {
                        endEventMode()

                        //無敵モード中は残機が減らない
                        @if invincibleSwitch.isOff bl {
                            chance -= 1
                            bitOn(triggerFlg, SC_BIT_CHANCE)
                        }

                        //フリーズを起動する
                        _activateFreeze(FREEZE_SECOND)

                        //玉を追加する
                        cm_addBall()

                        changeSceneState(SC_ST_PLAY)
                    } .else bl {
                        changeSceneState(SC_ST_GAMEOVER)
                    }
                }
            }
        },
        //マップに入った直後に実行される
        SC_ST_ENTER, bl {
            cm_onEnterMap()

            setScroll(0, 16*16, 0)
            @wait(0)
            fastFadeIn(1)

            //タイムボーナス用のタイマーを起動する
            timeBonusTimer = [TIME_BOSS1, TIME_BOSS2][bonusGameMode] + 1

            //フリーズを起動する
            _activateFreeze(FREEZE_SECOND)

            //イベントモードの解除はイベント側で行う
            changeSceneState(SC_ST_PLAY)
        },
        //ボーナスゲーム成功
        SC_ST_WINS, bl {
            @if sceneTimer == 0 bl {
                @scr.tint .rgbs(80, 80, 80, 100) .time(5)
                //BGMをフェードアウト
                stopBGM(200)
            }
            //BGM
            @if sceneTimer == 30 bl {
                startBGM("JFanfare 5", FALSE, 0, 100, 100, 50)
            }
            //取得と表示
            @if sceneTimer == 60 bl {
                //エクストラホール
                bitOn(iconFlag, ICON_BIT_EXTRA)

                //ボーナス
                temA = muldiv(timeBonusTimer + UNIT_FPS / 2, 1, UNIT_FPS)//四捨五入
                temB = [TIMEBONUS_BOSS1, TIMEBONUS_BOSS2][bonusGameMode]
                temC = (powerupTimer > 0 ? 2 : 1)
                temD = temA * temB
                pbAddScore(NUM_TYPE_BONUS, temD, 0)

                //パワーアップ中はボーナスが２倍になるので表示にも反映させる
                temD *= temC

                //マルチプライヤー
                temE = [MULTI_WIN_1, MULTI_WIN_2][bonusGameMode]
                pbAddScore(NUM_TYPE_MULTI, temE, 0)

                pbDisplay(DI_ST_CENTER,
                __str("\c[0]戦いに勝利した！\c[0]",NEWLINE,
                "\c[9]Extra\c[0]", NEWLINE,
                "\c[7]Multiplier: \", temE, NEWLINE,
                "\c[5]Time Bonus: \", temD )
                )
            }

            @if `sceneTimer > 60 && displayState <= DI_ST_NONE bl {
                //BGMを停止する
                stopBGM()

                //ボス討伐フラグ
                @if bonusGameMode == 0 bl {
                    bitOn(iconFlag, ICON_BIT_NIN)
                //魔王を倒すと討伐フラグが初期化される
                } .else bl {
                    bitOff(iconFlag, ICON_BIT_NIN)
                }

                //メインステージへ移動する
                changeSceneState(SC_ST_EXIT_BONUSSTAGE)
                goToPinballStage(MAP_MAINSTAGE)
                @ev.abort
            }
        },
        //ボーナスステージから出る
        SC_ST_GAMEOVER, bl {
            @if sceneTimer == 0 bl {
                @scr.tint .rgbs(80, 80, 80, 100) .time(5)
                //BGMをフェードアウト
                stopBGM(200)
                //イベントモード
                startEventMode()
            }
            //BGM
            @if sceneTimer == 30 bl {
                startBGM("Game Over 1", FALSE, 0, 100, 100, 50)
            }
            //表示
            @if sceneTimer == 40 bl {
                pbDisplay(DI_ST_CENTER, "\c[7]負けてしまった…\c[0]")
            }
            @if `sceneTimer > 40 && displayState <= DI_ST_NONE bl {
                //BGMを停止する
                stopBGM()
                //メインステージへ移動する
                changeSceneState(SC_ST_EXIT_BONUSSTAGE)
                goToPinballStage(MAP_MAINSTAGE)
                @ev.abort
            }
        }
    ] )

    //毎フレーム実行
    pbOnFrame()
}