//--------------------------------
//共通処理
// common in map
__fn cm_setUpGame {
    @ev.call .mev(MEV_COMMON, 1)
}

__fn cm_setPerson {
    @ev.call .mev(MEV_COMMON, 2)
}

__fn cm_setParallax {
    @ev.call .mev(MEV_COMMON, 3)
}

__fn cm_shufflePattern {
    @ev.call .mev(MEV_COMMON, 4)
}

__fn cm_nextPattern {
    @ev.call .mev(MEV_COMMON, 5)
}

__fn cm_onEnter {
    @ev.call .mev(MEV_COMMON, 6)
}

__fn cm_onFirstPlay {
    @ev.call .mev(MEV_COMMON, 7)
}

__fn cm_putBanner {
    @ev.call .mev(MEV_COMMON, 8)
}

//--------------------------------
//イベントを設置する
mev[MEV_COMMON] .map(parentMap) .name("common") .pos(2,0)

//--------------------------------
//獲得したゲームを設置する
mep[1] bl {
    __fn _cm_setUpGameEvent $switch $event $x $y bl {
        @if s[__id($switch)].isOn bl {
            @ev.setPos[$event] .pos($x, $y)
        }
    }
    _cm_setUpGameEvent(playablePinball, MEV_PINBALL, 4,  6 + 15)
    _cm_setUpGameEvent(playableBriansWorking, MEV_BRIANS_WORKING, 16,  5 + 15)
    _cm_setUpGameEvent(playableSteelBrian, MEV_STEEL_BRIAN, 15,  4 + 15)
    _cm_setUpGameEvent(playableEnNoRyu, MEV_ENRYUDO, 7,  10 + 15)
    _cm_setUpGameEvent(playableCatLeg, MEV_CAT_LEG, 8,  10 + 15)
    _cm_setUpGameEvent(playableAirHocker, MEV_AIR_HOCKEY, 6,  6 + 15)
    _cm_setUpGameEvent(playableStarlightMania, MEV_STARLIGHT_MANIA, 9,  7 + 15)
    _cm_setUpGameEvent(playableHatansStory, MEV_HATANS_STORY, 10,  7 + 15)
    _cm_setUpGameEvent(playableMagatokiWestern, MEV_MAGATOKI_WESTERN, 6,  3 + 15)
    _cm_setUpGameEvent(playableMommothGame, MEV_MAMMOTH_GAME, 12, 10 + 15)
    _cm_setUpGameEvent(playableLoopHell, MEV_LOOP_HELL, 12,  7 + 15)
    _cm_setUpGameEvent(playableJewelTower, MEV_JEWEL_TOWER, 13,  7 + 15)
    _cm_setUpGameEvent(playablePankuMan, MEV_PANKU_MAN, 10,  10 + 15)
    _cm_setUpGameEvent(playableKimetuNoYaiba, MEV_KIMETU_NO_YAIBA, 11,  10 + 15)
    _cm_setUpGameEvent(playableGraCatcher, MEV_GRA_CATCHER, 14,  12 + 15)
    _cm_setUpGameEvent(playableChestShougi, MEV_CHEST_SHOUGI, 3,  9 + 15)
    _cm_setUpGameEvent(playableSpiritWatch, MEV_SPIRIT_WATCH, 4,  9 + 15)
    _cm_setUpGameEvent(playableNawabaria, MEV_NAWABARIA, 1,  11 + 15)
    _cm_setUpGameEvent(playableJankenCard, MEV_JANKEN_CARD, 4,  8 + 15)
    _cm_setUpGameEvent(playableDragopy, MEV_DRAGOPY, 5,  8 + 15)
    _cm_setUpGameEvent(playableOppaiCard, MEV_OPPAI_CARD, 2,  11 + 15)
    _cm_setUpGameEvent(playableRainbowPusher, MEV_RAINBOW_PUSHER, 16,  9 + 15)
    _cm_setUpGameEvent(playableHighwayAlex, MEV_HIGHWAY_ALEX, 8, 13 + 15)
    _cm_setUpGameEvent(playableLichWay, MEV_LICH_WAY,6, 13 + 15)
    _cm_setUpGameEvent(playableGomezTower, MEV_GOMEZ_TOWER, 10, 13 + 15)
    _cm_setUpGameEvent(playableAguga, MEV_AGUGA, 7,  3 + 15)
    _cm_setUpGameEvent(playableDeadGames, MEV_DEAD_GAMES, 16, 7 + 15)
    _cm_setUpGameEvent(playableEtarnalBattle, MEV_ETERNAL_BATTLE, 5,  6 + 15)
    _cm_setUpGameEvent(playableStaffroll, MEV_STAFFROLL,10,  11)
    _cm_setUpGameEvent(playableLightUp, MEV_LIGHT_UP,19,  25)
    _cm_setUpGameEvent(playableButobas, MEV_BUTOBAS,19,  26)
    _cm_setUpGameEvent(playableFalconBooster, MEV_FALCON_BOOSTER,19,  27)
}

//--------------------------------
//客を設置する
mep[2] bl {
    //ダンサーのタイプに応じた歩行グラフィックに変える
    __loop [bl {$P = 1 $D = 0 $S = -1},//能面
    bl {$P = 1 $D = 1 $S = -1},//VIP
    bl {$P = 1 $D = 2 $S = -1},//おにぎり
    bl {$P = 1 $D = 3 $S = 0},//カニ
    bl {$P = 1 $D = 4 $S = 0},//学生
    bl {$P = 1 $D = 5 $S = 0},//謎の男
    bl {$P = 1 $D = 6 $S = 0},//姫
    bl {$P = 1 $D = 7 $S = 2},//魔皇女
    bl {$P = 2 $D = 0 $S = -1},//ウボァ
    bl {$P = 2 $D = 1 $S = -1},//超天使
    ] $block $idx bl {
        @if dancerType == $idx bl {
            $block
            @ev[MEV_DANCER] .setAction .freq(8) .unskippable .act {
                .setBody(__str("ac_dancer", $P), $D)
            }
            @ev.addAction .speed($S)
        }
    }

    //一度イベントを片付ける
    @loop PE_EVENT_NUMBER .dst(localA) bl {
        localB = localA + MEV_PERSON_0
        localC = localA + PE_WAIT_X
        localD = PE_WAIT_Y
        @ev[localB].setPos .pos(localC, localD) 
        //設定を初期化する
        @ev[localB] .setAction .freq(8) .unskippable .act {
            .unfixDir
            .resumeAnim
        }
    }
    @wait(0)

    //パターンごとにイベントを配置する
    __loop PE_PATTERN $patNum bl {
        @if personPattern == $patNum bl {
            __loop PE_LIST $arr $peIdx bl {
                __loop $arr $var $idx bl {
                    __if $idx == PE_INDEX_NUMBER bl {
                        $EVENT_ID = 0
                        $EVENT_ID += $var
                        $EVENT_ID += MEV_PERSON_0
                    }
                    __if $idx == PE_INDEX_PATTERN bl {
                        $EVENT_PATTERN = 0
                        $EVENT_PATTERN += $var
                    }
                    __if $idx == PE_INDEX_PUT_BLOCK bl {
                        __if $patNum == $EVENT_PATTERN bl {
                            $var
                        }
                    }
                }
            }
        }
    }
}

//--------------------------------
//遠景を設定する
mep[3] bl {
    __loop ["bg0",
    "bg1",
    "bg2",
    "bg3",
    "bg4",
    "bg5",
    "bg6",
    "bg7",
    ] $path $idx bl {
        @if parallaxType == $idx bl {
            @map.parallax $path
        }
    }
}

//--------------------------------
//アーケード内の客や遠景のパターン番号を設定する
mep[4] bl {
    personPattern = rnd(0, PE_PATTERN - 1)
    dancerType    = rnd(0, DANCER_PATTERN - 1)
    parallaxType  = rnd(0, PARALLAX_PATTERN - 1)
}

//--------------------------------
//アーケード内の客や遠景のパターン番号を一つ進める
mep[5] bl {
    personPattern = (personPattern + 1) % PE_PATTERN
    dancerType = (dancerType + 1) % DANCER_PATTERN
    parallaxType = (parallaxType + 1) % PARALLAX_PATTERN
}

//--------------------------------
//マップに入った時の処理
mep[6] bl {
    //debug
    /*
    enableDedicatedBGM.on
    playablePinball.on
    personPattern = 0
    */

    //スクロールを固定する
    setScroll(0, 16*15, 0)
    @wait(0)
    @scr.scroll .fix
    
    //メニューを許可する
    @sys.menuAccess .on
    //主人公をパーティに加える
    @player.trans .off
    @party.member .add(1)
    //移動を許可する
    @ev.setAction .player .freq 8 .unskippable .act {}
    //メッセージの設定
    msgDefault()
    //BGM
    playArcadeBGM(100)
    //ゲーム開始イベントを設置する
    cm_setUpGame()
    //客を設置する
    cm_shufflePattern()
    cm_setPerson()
    cm_putBanner()
}

//--------------------------------
//OP後にピンボールを終えた時のイベント
mep[7] bl {
    msgDefault()

    //change face
    $ALEX = @msg.face "Actor1_2k", 0, .left
    $BRIAN = @msg.face "Actor1_2k", 2, .left

    @wait(20)
    //振り向く
    @ev.setAction .player .freq(8) .unskippable .act {
        .faceDown
    }

    //無理すんな
    @if pbBestScore < 500 bl {
$BRIAN
"\>こりゃ一体どうなってんだ？"
$ALEX
"\>こっちが聞きたいわ。
\>狙わないとできない低スコアだぞ。"
"\>もしかして、ピンボールは
\>好きじゃなかったか？"
$BRIAN
"\>い、いや、そんなんじゃねぇよ…
\>操作方法すら分からないんだから
\>仕方ないだろ！"
$ALEX
"\>ゴメス。
\>細かい説明は後でした方が良いと
\>思ってな。"

    //こんなもん
    } .elif pbBestScore < 5000 bl {
$BRIAN
"\>うーん、よく分からないまま
\>終わっちまったな。"
$ALEX
"\>ルールも説明してないからな。
\>こんなもんだろ。"

    //やるなお前
    } .else bl {
$BRIAN
"\>よっしゃ！結構いけたぜ！
\>どうだアレックス！？"
$ALEX
"\>やるじゃない…
\>初見でこれはすごいぞ。"
"\>アナログの方のゲームも
\>やってみたらどうだ？
\>案外ハマるかもな。"
$BRIAN
"\>褒められるのは良いけど、
\>沼に沈めようとしてねぇかお前。"
$ALEX
"\>いいじゃんかい。
\>楽しみは多いに越した事はないだろ。"
"\>それにゲーセンの筐体って
\>いつの間にか消えるからな…
\>興味がある内に触った方が良い。"
    }
@wait(0)

//共通部分
$ALEX
"\>もう一度ピンボールで遊びたいなら、
\>\c[2]店長からフリーパスを買ってくれ。\c[0]
\>そうすりゃ何度でも遊べるドン"
"\>あと、俺に話しかければ
\>\c[2]台のルールとかを適当に説明するよ。\c[0]
\>勇者はゲームシステムに詳しいもんだ。"
"\>よし、そんじゃあ解散だ。
\>好きに遊ぼうぜ。"

    //300Pプレゼント
    @party.money .add(300)

    //end
    pbFirstPlay.off
}

//--------------------------------
//バナーを設置する
mep[8] bl {
    //バナーの種類
    localA = personPattern % 3
    //マップチップ番号を入力
    @loop 5 .dst(localB) bl {
        v[__id(localC) + localB] = 114 + localB + localA * 6
    }
    //マップ書き換え
    @map.rewrite .xywh(6, 16, 5, 1) .range(localC) .lower .disableAutoTile
}