private void ctrlRun(CallbackToController callbacks) { if (mo.process(keyTrigger, callbacks)) { mOmatsuri.getExitReason(); } mo.restartSlot(); ZZ.dbgDrawAll(); }
public bool process(int keyTrigger, CallbackToController callbacks, int[] reelIndexies) { int_s_value[Defines.DEF_INT_REEL_SPEED] = ZZ.getThreadSpeed() * Defines.DEF_REEL_COUNT_MIN * 0x10000 / 60000 * mobile.getReelSpeed() / 100; if (mobile.isMeoshi() || (slotInterface.gpif_auto_f == true) || (slotInterface.gpif_nonstop_f == true) || (slotInterface.gpif_tatsujin_f == true)) { // オートプレイ if ((slotInterface.gpif_auto_f == true) || (slotInterface.gpif_nonstop_f == true) || (slotInterface.gpif_tatsujin_f == true)) { // オートプレイの予約 //DfMain.TRACE(("test:" + mobile.int_m_value[Defines.DEF_INT_IS_MENU_AVAILABLE]); // スロットゲーム中WAIT時以外は遷移しない if (mobile.int_m_value[Defines.DEF_INT_IS_MENU_AVAILABLE] == Defines.DEF_MENU_UNAVAILABLE) { // メニューが無効の時 //DfMain.TRACE(("ここきてる?:" + keyTrigger); if ((keyTrigger & Defines.DEF_KEY_BIT_SOFT1) != 0) { // ソフトキーがおされたら //DfMain.TRACE(("メニュー予約!!!"); req_code = 1; reqMenuFg = true; } if ((keyTrigger & Defines.DEF_KEY_BIT_SOFT2) != 0) { // ソフトキーがおされたら //DfMain.TRACE(("メニュー予約!!!"); req_code = 2; reqMenuFg = true; } } } keyTrigger = Defines.DEF_KEY_BIT_SELECT; } if (reqMenuFg == true) { // 自動メニュー画面描画 if (mobile.int_m_value[Defines.DEF_INT_IS_MENU_AVAILABLE] == Defines.DEF_MENU_AVAILABLE) { // メニューが無効の時 reqMenuFg = false; } } if (slotInterface.getBusy()) { // GP用のウインドウが出ているので、筐体キーを無効化する keyTrigger = 0; return false; } // コイン枚数の更新 int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] = slotInterface.gpif_coin; pressingSpan++; pressingSpan %= 10; if (!IS_BONUS() && pressingSpan == 0) { } // ループの中で int_s_value が副作用を発生させる while (int_s_value[Defines.DEF_INT_CURRENT_MODE] != int_s_value[Defines.DEF_INT_REQUEST_MODE]) { if (Defines.DEF_IS_DEBUG_PRINT_RMODE) { Defines.TRACE("RMODE: " + int_s_value[Defines.DEF_INT_CURRENT_MODE] + " → " + int_s_value[Defines.DEF_INT_REQUEST_MODE]); } int_s_value[Defines.DEF_INT_CURRENT_MODE] = int_s_value[Defines.DEF_INT_REQUEST_MODE]; // スロットゲームモード変更時に更新するフラグ int_s_value[Defines.DEF_INT_MODE_COUNTER] = 0; int_s_value[Defines.DEF_INT_ON_OFF_EFFECT] = 0; int_s_value[Defines.DEF_INT_RLPTNDT_COUNTER] = 0; int_s_value[Defines.DEF_INT_TOP_LAMP] = 0; // 各モードでの初期化 switch (int_s_value[Defines.DEF_INT_CURRENT_MODE]) { case Defines.DEF_RMODE_WIN: if (int_s_value[Defines.DEF_INT_WIN_LAMP] > 0 && int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 0) { // た~まや~点灯 int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 1; // ボーナス当選時 slotInterface.onBonusNaibu(); // セルフオート停止フラグを立てる GameManager.StopAutoPlay("たまや点灯"); } // さらに大当たりで止まっていたらかっきーん! if (int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 1) { if (int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] == Defines.DEF_RP08) { playSE(Defines.DEF_SOUND_12); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_12; int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 2; // 以後演出抽選しないようにする v23.setWork(Defines.DEF_FOUT3, (ushort)1); } } break; // TOBE [=0.RMODE_WAIT init]137 case Defines.DEF_RMODE_WAIT: // (モード初期) if (IS_HALL()) { mobile.saveMenuData(true);//不正防止用にここで保存 } mobile.setMenuAvarable(true);// 押せるようにする if (!IS_BONUS()) { lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_OFF); } // コイン7セグ描画用変数を初期化 int_s_value[Defines.DEF_INT_BETTED_COUNT] = 0; //Defines.TRACE("待機中"); // 演出帳のデータを転送する GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_WEB, -1); break; case Defines.DEF_RMODE_BET: // MAXBETランプ表示期間(モード初期) //DfMain.TRACE(("ベット処理1"); // リール全点滅は一回だけ if (int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 2) { int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 3; } // 払い出しコイン枚数(表示用) int_s_value[Defines.DEF_INT_WIN_GET_COIN] = 0; int_s_value[Defines.DEF_INT_WIN_COIN_NUM] = 0; // 1ゲーム中の獲得コイン枚数 // テンパイ状態 int_s_value[Defines.DEF_INT_IS_TEMPAI] = 0; // 告知はBET時にクリア if (!IS_REPLAY()) { int_s_value[Defines.DEF_INT_KOKUCHI_X] = 0; } // サウンド if (!IS_BONUS()) { // ボーナス消化中以外は毎回停止指示。 mobile.stopSound(Defines.DEF_SOUND_UNDEF); } { if (IS_HALL()) { /*プレーヤーコイン要求*/ if (hallData[Defines.DEF_H_PLAYER_COIN] < int_s_value[Defines.DEF_INT_BET_COUNT]) { //鳴らさない //DfMain.TRACE(("ベット音ならさない"); break; } } //DfMain.TRACE(("ベット音ならす"); switch (int_s_value[Defines.DEF_INT_BET_COUNT]) { case 1: playSE(Defines.DEF_SOUND_25); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_25; break; case 2: playSE(Defines.DEF_SOUND_26); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_26; break; case 3: playSE(Defines.DEF_SOUND_22); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_22; break; } } mobile.setMenuAvarable(false); break; case Defines.DEF_RMODE_SPIN: if (!IS_REPLAY()) { int_s_value[Defines.DEF_INT_TOTAL_BET] += int_s_value[Defines.DEF_INT_BETTED_COUNT]; hallData[Defines.DEF_H_MEDAL_IN] += int_s_value[Defines.DEF_INT_BETTED_COUNT]; hallData[Defines.DEF_H_PLAYER_COIN] -= int_s_value[Defines.DEF_INT_BETTED_COUNT]; } v23.clearWork(Defines.DEF_CLR_AREA_3); int rand = v23.mRandomX(); chgWaveNum(); if (IS_BONUS_JAC()) { v23.mSetForceFlag(Defines.ForceYakuFlag.REG); } chgYaku(); // 役抽選 v23.mReelStart(rand, int_s_value[Defines.DEF_INT_BET_COUNT]); var yaku = v23.getWork(Defines.DEF_WAVEBIT); // 内部BB 内部RBははずれ強制 // はずれ強制だが、BIG/777は揃えられる→リプレイ・チェリーを来ないようにする // BB中、RB中ははずれ強制は解除する→ if ((v23.getWork(Defines.DEF_HITREQ) == Defines.DEF_HITFLAG_NR_BB) || (v23.getWork(Defines.DEF_HITREQ) == Defines.DEF_HITFLAG_NR_RB)) { //v23.mSetForceFlag(Defines.ForceYakuFlag.BIG); v23.mSetForceFlag(Defines.ForceYakuFlag.HAZURE); } callbacks.ReelStart(yaku); if (!IS_BONUS()) { if ((v23.getWork(Defines.DEF_WAVEBIT) & 0x01) != 0) { int_s_value[Defines.DEF_INT_CHRY_HIT]++; } else if ((v23.getWork(Defines.DEF_WAVEBIT) & 0x04) != 0) { int_s_value[Defines.DEF_INT_WMLN_HIT]++; } } else if (IS_BONUS_GAME()) { // ビタ外し成功 if ((v23.getWork(Defines.DEF_WAVEBIT) & 0x08) != 0) { int_s_value[Defines.DEF_INT_JAC_HIT]++; } } if ((v23.getWork(Defines.DEF_GMLVSTS) & (0x08 | 0x10)) != 0) { int_s_value[Defines.DEF_INT_THIS_FLAG_GAME]++; } int flash0 = v23.getWork(Defines.DEF_FLASH + 0); GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_LANP, (flash0 / 128)); int_s_value[Defines.DEF_INT_WIN_LAMP] = flash0 / 128; flash0 %= 128; int flash1 = v23.getWork(Defines.DEF_FLASH + 1); GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_FLASH, flash1); setFlash(flash1 / 32); set4th(flash1 % 32); int snd_id = Defines.DEF_SOUND_19; if (flash1 % 32 > 0) { snd_id = Defines.DEF_SOUND_21; } if (flash0 / 64 > 0) { snd_id = Defines.DEF_SOUND_20; } if (mobile.isJacCut() == false) { playSE(snd_id); } _spinTime = Util.GetMilliSeconds() + Defines.DEF_WAIT_SPIN; int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] = 0; // リールストップ int_s_value[Defines.DEF_INT_KOKUCHI_X] = 0; if (int_s_value[Defines.DEF_INT_IS_BB_RB_END] > 0) { if (!IS_HALL()) { if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7 || int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { shiftDataPanelHistory( int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES], Defines.DEF_PS_BB_RUN); } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_RB_IN) { shiftDataPanelHistory( int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES], Defines.DEF_PS_RB_RUN); } } int_s_value[Defines.DEF_INT_IS_BB_RB_END] = 0; int_s_value[Defines.DEF_INT_BB_KIND] = Defines.DEF_BB_UNDEF; int_s_value[Defines.DEF_INT_BONUS_GOT] = 0; int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] = 0; int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES] = 0; hallData[Defines.DEF_H_BNS_0] = 0; int_s_value[Defines.DEF_INT_BB_AFTER_1GAME] = 1; } if (!IS_BONUS()) { int_s_value[Defines.DEF_INT_TOTAL_GAMES]++; slotInterface.onCountUp(); hallData[Defines.DEF_H_GAME_COUNT]++; int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES]++; hallData[Defines.DEF_H_BNS_0]++; } if (IS_HALL()) { setCurrentDataPanel(hallData[Defines.DEF_H_BNS_0]); } else { setCurrentDataPanel(int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES]); } int_s_value[Defines.DEF_INT_KEY_REJECT] = 5; int_s_value[Defines.DEF_INT_REEL_STOP_R0] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_STOP_R1] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_STOP_R2] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_ANGLE_R0] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; int_s_value[Defines.DEF_INT_REEL_ANGLE_R1] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; int_s_value[Defines.DEF_INT_REEL_ANGLE_R2] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; GameManager.OnStartPlay(); break; case Defines.DEF_RMODE_FLASH: break; case Defines.DEF_RMODE_RESULT: // (モード初期) // RESULTに入った時間を記録 _lampTime = Util.GetMilliSeconds() + Defines.DEF_WAIT_LAMP; // 払い出しコイン枚数 var payOut = v23.mPayMedal(); int_s_value[Defines.DEF_INT_WIN_COIN_NUM] = payOut; int_s_value[Defines.DEF_INT_TOTAL_PAY] += payOut; hallData[Defines.DEF_H_MEDAL_OUT] += payOut; callbacks.Payout(payOut); int_s_value[Defines.DEF_INT_TOTAL_PAY] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; hallData[Defines.DEF_H_MEDAL_OUT] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_RB) != 0) { Defines.TRACE("RB入賞時"); } else if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_BB) != 0) { Defines.TRACE("BB入賞時"); } if (!IS_BONUS()) { if ((v23.getWork(Defines.DEF_HITFLAG) & 0x01) != 0) { int_s_value[Defines.DEF_INT_CHRY_GOT]++; } else if ((v23.getWork(Defines.DEF_HITFLAG) & 0x04) != 0) { int_s_value[Defines.DEF_INT_WMLN_GOT]++; } } else if (IS_BONUS_GAME()) { // ビタ外し成功 if (v23.getWork(Defines.DEF_HITFLAG) == 0 && ((v23.getWork(Defines.DEF_WAVEBIT) & 0x08) != 0) && (v23.getWork(Defines.DEF_ARAY11) == Defines.DEF_BAR_)) { int_s_value[Defines.DEF_INT_HAZUSI_COUNT]++; } } int_s_value[Defines.DEF_INT_BONUS_GOT] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; if ((IS_BONUS_JAC() == true)) { int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; } playCoinSound(); break; case Defines.DEF_RMODE_BB_FANFARE: int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 0; int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] = 0; lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_ON); if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_03; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_03, false); // BBファンファーレ1(ドンチャン揃い) } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) { _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_02; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_02, false); // BBファンファーレ2(7揃い) } set4th(29); break; // TOBE [=6.RMODE_BB_FANFARE init] case Defines.DEF_RMODE_RB_FANFARE: // (モード初期) int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 0; int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] = 0; lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_ON); // RBファンファーレ鳴らすモード(→Defines.DEF_RMODE_BB_FANFARE_VOICE) _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_04; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_04, false); set4th(29); break; // TOBE [=5.RMODE_FIN_WAIT init] case Defines.DEF_RMODE_FIN_WAIT: // (モード初期) int_s_value[Defines.DEF_INT_KEY_REJECT] = 0; // 毎ゲーム終了時にここを通る // DfMain.TRACE(("毎ゲーム終了"); // ボーナス制御 ushort bonusEndFg; bonusEndFg = v23.mBonusCounter(); if (IS_BONUS() == true) { // ボーナス終了フラグじゃないとき if (cutBonusSystem(0)) { // ボーナスカット処理が必要の場合 // カット処理フラグON BonusCutFg = true; if ((int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) || (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7)) { // BB終了判定(RBの場合はRB終了時にメダル加算を行なう) if ((IS_BONUS_JAC() == true)) { int num; num = 0; // JACゲームの獲得枚数 if (int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] < Defines.JAC_BONUS_AVENUM) { // JACゲームのカット枚数を加算する num = (Defines.JAC_BONUS_AVENUM - int_s_value[Defines.DEF_INT_BONUS_JAC_GOT]); int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] = 0; // JAC中の獲得枚数をクリア int_s_value[Defines.DEF_INT_BONUS_GOT] += num; } Defines.TRACE("JACカット分を追加:" + num); GPW_chgCredit(num); BonusCutFg = false; // JACのカットはここまでなので } } bonusEndFg = v23.mBonusCounter(); } } if (bonusEndFg != 0) { BonusEnd(0); } break; // 抜ける // TOBE [=RMODE_NO_COIN init} case Defines.DEF_RMODE_NO_COIN: // (モード初期) return true; // コインなしで終了通知 } // E-O-各モードでの初期化 break; } // end of while if (int_s_value[Defines.DEF_INT_PREV_GAMEST] != v23.getWork(Defines.DEF_GAMEST)) { int_s_value[Defines.DEF_INT_PREV_GAMEST] = v23.getWork(Defines.DEF_GAMEST); if ((int_s_value[Defines.DEF_INT_PREV_GAMEST] & 0x01) != 0) { // TODO JACBGMを鳴らす playBGM(Defines.DEF_SOUND_05, true); } else if ((int_s_value[Defines.DEF_INT_PREV_GAMEST] & 0x80) != 0) { // TODO BIGBGMを鳴らす if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { playBGM(Defines.DEF_SOUND_07, true); } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) { playBGM(Defines.DEF_SOUND_06, true); } } } // モードが切り替わってからの累積カウンタ int_s_value[Defines.DEF_INT_MODE_COUNTER]++; ctrlTopLamp(); int_s_value[Defines.DEF_INT_ON_OFF_EFFECT] = Util.GetMilliSeconds() % 1000 > 500 ? 1 : 0; ctrlLamp(); ctrlBetLamp(); DoModeAction(keyTrigger, callbacks, reelIndexies); return false; }
private void DoModeAction(int keyTrigger, CallbackToController callbacks, int[] reelIndexies) { // ====================================== // 各モードにおける毎回の処理 // ====================================== //DfMain.TRACE(("リプレイある(毎回)?" + IS_REPLAY()); //DfMain.TRACE(("Defines.DEF_INT_CURRENT_MODE:" + int_s_value[Defines.DEF_INT_CURRENT_MODE] + ":" + (clOHHB_V23.getWork(Defines.DEF_GAMEST)&0xFFFF)); switch (int_s_value[Defines.DEF_INT_CURRENT_MODE]) { // TOBE [=0.RMODE_WAIT rp] case Defines.DEF_RMODE_WAIT: // (毎回処理) // 直前の停止音の完奏を待つ if (_soundTime < Util.GetMilliSeconds()) { // リプレイが揃っているときは、自動的にRMODE_BETまで遷移する if (bgm_resumeFg == true) { // 休憩中からの復帰 if (bgm_no != -1) { // サウンド //if (!IS_BONUS()) { // // ボーナス消化中以外は毎回停止指示。 // mobile.stopSound(Defines.DEF_SOUND_UNDEF); //} if (IS_BONUS()) { // ボーナス時限定 Defines.TRACE("復帰サウンドの再生"); playBGM(bgm_no, bgm_loop); // 復帰サウンドの再生 bgm_resumeFg = false; } else { // ボーナス消化中以外は毎回停止指示。 mobile.stopSound(Defines.DEF_SOUND_UNDEF); } } } slotInterface.betFlag = false; if (IS_REPLAY()) { slotInterface.betFlag = true; REQ_MODE(Defines.DEF_RMODE_BET); // MAXBETへ遷移 } else { // BET開始 if ((keyTrigger & (Defines.DEF_KEY_BIT_SELECT | Defines.DEF_KEY_BIT_5)) != 0) { if (IS_BONUS_JAC()) { int_s_value[Defines.DEF_INT_BET_COUNT] = 1; } else { int_s_value[Defines.DEF_INT_BET_COUNT] = 3; } //DfMain.TRACE(("枚数チェック:" + int_s_value[Defines.DEF_INT_SLOT_COIN_NUM]+ ":" + int_s_value[Defines.DEF_INT_BETTED_COUNT] + ":" + int_s_value[Defines.DEF_INT_BET_COUNT]); if (int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] < int_s_value[Defines.DEF_INT_BET_COUNT]) { // コインがないからBETさせない slotInterface.onCreditZero(); } else { REQ_MODE(Defines.DEF_RMODE_BET); slotInterface.betFlag = true; } } } } break; // TOBE [=1.RMODE_BET rp] case Defines.DEF_RMODE_BET: // MAXBETランプ表示期間(毎回処理) #region DEF_RMODE_BET //DfMain.TRACE(("ベット処理2"); int betMax = Math.Min(3, int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] + int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] + int_s_value[Defines.DEF_INT_BETTED_COUNT]); // サウンドの終わりを待つ // 描画を増やす if (int_s_value[Defines.DEF_INT_BETTED_COUNT] < int_s_value[Defines.DEF_INT_BET_COUNT]) { // ココのタイミングの取り方は40msでループするのが前提 if (int_s_value[Defines.DEF_INT_MODE_COUNTER] % 2 == 0) { if (!IS_REPLAY()) { // クレジットから減らす if (int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] > 0) { int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM]--; } int_s_value[Defines.DEF_INT_SLOT_COIN_NUM]--; // BETした分だけ減算する GPW_chgCredit(-1); // コイン投入時処理 GameManager.OnCoinInsert(); callbacks.Bet(); } int_s_value[Defines.DEF_INT_BONUS_GOT]--; int_s_value[Defines.DEF_INT_BETTED_COUNT]++; //GPW_chgCredit(0 - int_s_value[Defines.DEF_INT_BETTED_COUNT]); } } // 減らす else if (int_s_value[Defines.DEF_INT_BETTED_COUNT] > int_s_value[Defines.DEF_INT_BET_COUNT]) { // ココのタイミングの取り方は40msでループするのが前提 if (int_s_value[Defines.DEF_INT_MODE_COUNTER] % 2 == 0) { if (!IS_REPLAY()) { if (int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] < Defines.DEF_NUM_MAX_CREDIT) { int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM]++; } int_s_value[Defines.DEF_INT_SLOT_COIN_NUM]++; } int_s_value[Defines.DEF_INT_BONUS_GOT]++; int_s_value[Defines.DEF_INT_BETTED_COUNT]--; } } else { if (_soundTime < Util.GetMilliSeconds()) { // 回転開始 //DfMain.TRACE(("回転開始チェック:" + int_s_value[Defines.DEF_INT_BETTED_COUNT]); if ((int_s_value[Defines.DEF_INT_BETTED_COUNT] > 0) && (((keyTrigger & (Defines.DEF_KEY_BIT_SELECT | Defines.DEF_KEY_BIT_5)) != 0) || (reelStartFg == true))) { //DfMain.TRACE(("回転開始ウェイト"); reelStartFg = true; lampSwitch(Defines.DEF_LAMP_LEVER, Defines.DEF_LAMP_ACTION_ON); if (mobile.isJacCut() == true) { // ボーナスカットの場合 reelwait = -3200; } if ((reelwait + 3200) < Util.GetMilliSeconds()) { // リールウェイト //DfMain.TRACE(("回転開始"); REQ_MODE(Defines.DEF_RMODE_SPIN); //DfMain.TRACE(("リールウェイト:" + (Util.GetMilliSeconds() - reelwait)); reelwait = Util.GetMilliSeconds();//リール全体用 reelStartFg = false; } } } } break; #endregion // TOBE [=2.RMODE_SPIN rp] case Defines.DEF_RMODE_SPIN: // 回転中(毎回処理) // 4thをまわす。 action4th(); // 全部止まったらモード変わる if (int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] == 7) { // 停止音 完奏を待って次のモードへ遷移 if (_soundTime < Util.GetMilliSeconds()) { // 4thが止まったら if (int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] == 0) { if (isPlay()) { REQ_MODE(Defines.DEF_RMODE_FLASH); } else { REQ_MODE(Defines.DEF_RMODE_WIN); } } } break; } // 前に鳴らしたサウンド待ち if (_soundTime < Util.GetMilliSeconds() || int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] != 0) { if (int_s_value[Defines.DEF_INT_KEY_REJECT] > 0) { // 一定ターン待つ int_s_value[Defines.DEF_INT_KEY_REJECT]--; } else { // 同時押しは出来ない ワンボタン(KEY_5)操作あり bool isSpinning = true; bool isLimitStop = false; // 自動停止の場合用 //DfMain.TRACE(("ここから開始"); if (_spinTime < Util.GetMilliSeconds()) { Defines.TRACE(Util.GetMilliSeconds() - _spinTime); isLimitStop = true; } // 自動停止もあり if ((keyTrigger & (Defines.DEF_KEY_BIT_SELECT | Defines.DEF_KEY_BIT_5)) != 0 || (isLimitStop == true)) { var orderDown = new[] { 0, 1, 2 }; var orderUp = new[] { 2, 1, 0 }; // JACIN時はorderUpを使う var yaku = (Yaku)v23.getWork(Defines.DEF_WAVEBIT); var useOrder = yaku == Yaku.JACIN ? orderUp : orderDown; var mt = MeoshiType.HazureKotei; foreach (var i in useOrder) { if (isSpinning) { isSpinning = setReelStopAngle(i, yaku, mt); } } } else { var orderDown = new[] { 0, 1, 2 }; var orderUp = new[] { 2, 1, 0 }; // JACIN時はorderUpを使う var yaku = (Yaku)v23.getWork(Defines.DEF_WAVEBIT); var useOrder = yaku == Yaku.JACIN ? orderUp : orderDown; var mt = MeoshiType.HazureKotei; foreach (var i in useOrder) { if (isSpinning) { isSpinning = setReelStopAngle(i, yaku, mt); } } } } } // 停止ボタンを点灯 ctrlButtonLamp(); // リールを進める。 for (int i = 0; i < 3; i++) { // 止まっていたら次 if ((int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] & BIT(i)) != 0) continue; if (int_s_value[Defines.DEF_INT_REEL_STOP_R0 + i] != ANGLE_UNDEF && (((int_s_value[Defines.DEF_INT_REEL_STOP_R0 + i] - int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + i]) & ANGLE_2PI_MASK) <= int_s_value[Defines.DEF_INT_REEL_SPEED] || (mobile.isJacCut() == true))) { // 止めにかかる int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + i] = int_s_value[Defines.DEF_INT_REEL_STOP_R0 + i]; // 止まった int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] |= BIT(i); int_s_value[Defines.DEF_INT_KEY_REJECT] = 1; // 次のボタンが押せるようにする int stop_snd_id = Defines.DEF_SOUND_23; _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_23 / 2; if (!IS_BONUS()) { int_s_value[Defines.DEF_INT_IS_TEMPAI] = 0; int[] tempai = isTempai(); switch (v23.getWork(Defines.DEF_PUSHCTR)) { case 0x02:// 第1停止 if (i == 0) { // 停止リールが左リールの時 GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_REEL, (int)Defines.EVENT.EVENT_NO1); } break; case 0x01:// 第2停止 if (tempai[1] == 3) { //トリプルテンパイ音 // (トリプルテンパイ(BIG確)) GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_REEL, (int)Defines.EVENT.EVENT_NO2); stop_snd_id = Defines.DEF_SOUND_15; _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_15; int_s_value[Defines.DEF_INT_IS_TEMPAI] = 1; } else if (tempai[0] != Defines.DEF_BB_UNDEF) { stop_snd_id = Defines.DEF_SOUND_14; _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_14; int_s_value[Defines.DEF_INT_IS_TEMPAI] = 1; } break; case 0x00:// 第三停止 if (tempai[0] == Defines.DEF_BB_B7) { int_s_value[Defines.DEF_INT_BB_KIND] = Defines.DEF_BB_B7; //TOBE 個別PARAM BB揃ったかの判定 if (int_s_value[Defines.DEF_INT_BB_AFTER_1GAME] > 0) { int_s_value[Defines.DEF_INT_BB_END_1GAME_REGET_BB] = 1; // 揃えた if (Defines.DEF_IS_DEBUG_MISSION_PARAM) { Defines.TRACE("1ゲーム目で青七をそろえた"); } } slotInterface.onBonusBB(); } else if (tempai[0] == Defines.DEF_BB_R7) { int_s_value[Defines.DEF_INT_BB_KIND] = Defines.DEF_BB_R7; //TOBE 個別PARAM BB揃ったかの判定 if (int_s_value[Defines.DEF_INT_BB_AFTER_1GAME] > 0) { int_s_value[Defines.DEF_INT_BB_END_1GAME_REGET_BB] = 1; // 揃えた if (Defines.DEF_IS_DEBUG_MISSION_PARAM) { Defines.TRACE("1ゲーム目で赤ドンをそろえた"); } } slotInterface.onBonusBB(); } // ゲチェナ GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_REEL, (int)Defines.EVENT.EVENT_NO3); int_s_value[Defines.DEF_INT_BB_AFTER_1GAME] = 0;// TOBE 個別PARAM用フラグで使うフラグを必ず下ろす break; } } if ((mobile.isJacCut() == false)) { playSE(stop_snd_id); } } else { int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + i] = (int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + i] + int_s_value[Defines.DEF_INT_REEL_SPEED]) & ANGLE_2PI_MASK; } } break; // TOBE [=3.RMODE_FLASH rp] case Defines.DEF_RMODE_FLASH: // 結果(毎回処理) //スピード調整 if (ZZ.getThreadSpeed() < 40 && int_s_value[Defines.DEF_INT_MODE_COUNTER] % 2 == 0) { break; } if (isPlay()) { int_s_value[Defines.DEF_INT_FLASH_DATA] = getNext(); // リールフラッシュ以外の部分 if ((int_s_value[Defines.DEF_INT_FLASH_DATA] & (1 << 10)) != 0) { lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_ON); } else { lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_OFF); } } else { REQ_MODE(Defines.DEF_RMODE_WIN); } break; case Defines.DEF_RMODE_WIN: if (_soundTime < Util.GetMilliSeconds()) { REQ_MODE(Defines.DEF_RMODE_RESULT); } break; // TOBE [=4.RMODE_RESULT rp] case Defines.DEF_RMODE_RESULT: // 結果(毎回処理) if ((mobile.isJacCut() == true)) { // 内部でカウント int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; // 表示用は個々で増やす int_s_value[Defines.DEF_INT_WIN_GET_COIN] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; hallData[Defines.DEF_H_PLAYER_COIN] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; // 50枚まではクレジットへ貯めるぅ if (int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] > Defines.DEF_NUM_MAX_CREDIT) { int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] = Defines.DEF_NUM_MAX_CREDIT; } // MAXを超えないように。 if (int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] > Defines.DEF_NUM_MAX_COIN) { int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] = Defines.DEF_NUM_MAX_COIN; } _soundTime = 0; // 払い出し分加算 GPW_chgCredit(int_s_value[Defines.DEF_INT_WIN_COIN_NUM]); } else { // 一枚一枚移す // satoh#暫定 if (int_s_value[Defines.DEF_INT_WIN_GET_COIN] < int_s_value[Defines.DEF_INT_WIN_COIN_NUM]) { if ((int_s_value[Defines.DEF_INT_MODE_COUNTER] % (Defines.DEF_WAIT_COUNT_UP / int_s_value[Defines.DEF_INT_LOOP_SPEED] + 1)) == 0) { // if (int_s_value[Defines.DEF_INT_WIN_GET_COIN] < int_s_value[Defines.DEF_INT_WIN_COIN_NUM]) { // if ((int_s_value[Defines.DEF_INT_MODE_COUNTER] % (Defines.DEF_WAIT_COUNT_UP // / 1 + 1 )) == 0) { // 払い出し分加算 GPW_chgCredit(1); // 50枚まではクレジットへ貯めるぅ if (int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM] < Defines.DEF_NUM_MAX_CREDIT) { int_s_value[Defines.DEF_INT_CREDIT_COIN_NUM]++; } int_s_value[Defines.DEF_INT_SLOT_COIN_NUM]++; /**/ hallData[Defines.DEF_H_PLAYER_COIN]++; // 表示用は個々で増やす int_s_value[Defines.DEF_INT_WIN_GET_COIN]++; // MAXを超えないように。 if (int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] > Defines.DEF_NUM_MAX_COIN) { int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] = Defines.DEF_NUM_MAX_COIN; } } break; } } // 払い出し音を待つ if (_soundTime < Util.GetMilliSeconds() || (int_s_value[Defines.DEF_INT_WIN_COIN_NUM] <= int_s_value[Defines.DEF_INT_WIN_GET_COIN] && !IS_REPLAY())) { mobile.stopSound(Defines.DEF_SOUND_MULTI_SE); _soundTime = Util.GetMilliSeconds(); // REG入賞 if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_RB) != 0) { int_s_value[Defines.DEF_INT_BONUS_GOT] = 15; int_s_value[Defines.DEF_INT_REG_COUNT]++; int_s_value[Defines.DEF_INT_FLAG_GAME_COUNT] += int_s_value[Defines.DEF_INT_THIS_FLAG_GAME]; int_s_value[Defines.DEF_INT_THIS_FLAG_GAME] = 0; hallData[Defines.DEF_H_RB_COUNT]++;/*HALL*/ // Jac-in 突入 int_s_value[Defines.DEF_INT_BB_KIND] = Defines.DEF_RB_IN; REQ_MODE(Defines.DEF_RMODE_RB_FANFARE); // RBファンファーレへ遷移 Defines.TRACE("REG入賞処理"); slotInterface.onBonusRB(); break; } // BIG入賞 else if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_BB) != 0) { Defines.TRACE("BB入賞処理"); int_s_value[Defines.DEF_INT_BONUS_GOT] = 15; int_s_value[Defines.DEF_INT_FLAG_GAME_COUNT] += int_s_value[Defines.DEF_INT_THIS_FLAG_GAME]; int_s_value[Defines.DEF_INT_THIS_FLAG_GAME] = 0; int_s_value[Defines.DEF_INT_BIG_COUNT]++; hallData[Defines.DEF_H_BB_COUNT]++;/*HALL*/ REQ_MODE(Defines.DEF_RMODE_BB_FANFARE); // BBファンファーレへ遷移 // セルフオート停止フラグを立てる GameManager.StopAutoPlay("BB入賞"); break; } REQ_MODE(Defines.DEF_RMODE_FIN_WAIT); break; } break; // TOBE [=6.RMODE_BB_FANFARE rp] case Defines.DEF_RMODE_BB_FANFARE: case Defines.DEF_RMODE_RB_FANFARE: // if (int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] < 1) { // int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] += 20 + Defines.DEF_POS_4TH_TOTAL_W; // int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] %= Defines.DEF_POS_4TH_TOTAL_W; // } // if (int_s_value[Defines.DEF_INT_MODE_COUNTER] > 10) { // if (int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] < 20 + Defines.DEF_RP08) { // int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] = 1; // int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] = Defines.DEF_RP08; // } // } action4th(); if (_soundTime < Util.GetMilliSeconds() && int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] == 0) { REQ_MODE(Defines.DEF_RMODE_FIN_WAIT); } break; // TOBE [=5.RMODE_FIN_WAIT rp] case Defines.DEF_RMODE_FIN_WAIT: if (int_s_value[Defines.DEF_INT_IS_BB_RB_END] > 0 && int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_RB_IN) { int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] += Defines.DEF_POS_4TH_TOTAL_W - 20; int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] %= Defines.DEF_POS_4TH_TOTAL_W; if (Defines.DEF_RP19 - 20 < int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] && int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] <= Defines.DEF_RP19 + 20) { int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] = Defines.DEF_RP19; // REQ_MODE(Defines.DEF_RMODE_WAIT); // 回転待ちへ遷移 } else { break; } } // 直前の音の完奏を待つ if (_soundTime < Util.GetMilliSeconds()) { if (IS_HALL()) { //ボーナス終了時通信 if (int_s_value[Defines.DEF_INT_IS_BB_RB_END] == 1) { hallData[Defines.DEF_H_APPLI_REQ] = Defines.DEF_HRQ_BNSEND; REQ_MODE(Defines.DEF_RMODE_HTTP); // REG入賞時通信 } else if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_RB) != 0) { hallData[Defines.DEF_H_APPLI_REQ] = Defines.DEF_HRQ_BNSIN; REQ_MODE(Defines.DEF_RMODE_HTTP); // BIG入賞時通信 } else if ((v23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_BB) != 0) { hallData[Defines.DEF_H_APPLI_REQ] = Defines.DEF_HRQ_BNSIN; REQ_MODE(Defines.DEF_RMODE_HTTP); // //規定ゲーム通信 // }else if(hallData[Defines.DEF_H_GAME_COUNT] - lastHttpGame >= Defines.DEF_HALL_GAME_SPAN){ // hallData[Defines.DEF_H_APPLI_REQ] = Defines.DEF_HRQ_NORMAL; // REQ_MODE(Defines.DEF_RMODE_HTTP); //10分経過後の最初のゲームで一応通信 } else if (prevHttpTime + (5 * 60) < Util.GetMilliSeconds() / 1000) { hallData[Defines.DEF_H_APPLI_REQ] = Defines.DEF_HRQ_NORMAL; REQ_MODE(Defines.DEF_RMODE_HTTP); } else { REQ_MODE(Defines.DEF_RMODE_WAIT); // 回転待ちへ遷移 } } else { REQ_MODE(Defines.DEF_RMODE_WAIT); // 回転待ちへ遷移 } } break; } }
public Associative Collect(Associative param) { var reelstopleft = null as string; var reelstopcenter = null as string; var reelstopright = null as string; var oshijun = null as string; var left = 0; // ボタン0押下時リール位置 var center = 0; // ボタン1押下時リール位置 var right = 0; // ボタン2押下時リール位置 var order = null as int[]; // 押し順 try { reelstopleft = param["reelStopLeft"]; reelstopcenter = param["reelStopCenter"]; reelstopright = param["reelStopRight"]; oshijun = param["oshijun"]; left = reelstopleft.ParseInt(); center = reelstopcenter.ParseInt(); right = reelstopright.ParseInt(); order = oshijun.ToCharArray().Select(c => c.ToString().ParseInt()-1).ToArray(); } catch { return new Associative() { { "result", "error".DQ() } }; } var winCoins = 0; var gotCoinCountFlg = false; // マシンからのコールバック群 Action<int> Payout = (coinCount) => { winCoins = coinCount; gotCoinCountFlg = true; }; Action<int> ReelStart = (_yaku) => { }; Action<int, int> ButtonStop = (button, reelIndex) => { }; Action<int> KeyTrigger = (key) => { }; Action Bet = () => { }; var callbacks = new CallbackToController() { Payout = Payout, ReelStart = ReelStart, ButtonStop = ButtonStop, KeyTrigger = KeyTrigger, Bet = Bet }; var indexis = new int[] { left, center, right }; mobile.SetClientPressed(indexis); // 押し順、押した位置で止める while(gotCoinCountFlg == false) { mobile.ZZ.int_value[Defines.DEF_Z_INT_KEYPRESS] |= (1 << 5); mobile.exec(callbacks); Thread.Sleep(20); } var v1 = reelstopleft.Substring(1, (reelstopleft.Length - 1)); var v2 = reelstopcenter.Substring(1, (reelstopcenter.Length - 1)); var v3 = reelstopright.Substring(1, (reelstopright.Length - 1)); var v4 = oshijun.Substring(1, (oshijun.Length - 1)); var xor = v1 + v2 + v3 + v4; var code = (xor.ParseLong()^(0xffeeddcc)).ToString(); var yaku = code.Substring(4, 2).ParseInt(); var payout = code.Substring(6, 2).ParseInt(); var result = new Associative(); result.Add("result", "WIN".DQ()); result.Add("payout", payout.ToString()); result.Add("yaku", ((int)yaku).ToString()); State = MACHINE_STATE.COLLECT; Logger.Info($"[INFO]Collect GameId:{gameId} UserId:{userId} Payout:{winCoins} Yaku:{yaku}"); // 役を保存しておく currentYaku = (Yaku)yaku; return result; }
public Associative Play(Associative param) { var betcount = null as string; var bet = 0; try { betcount = param["betCount"]; bet = betcount.ParseInt(); } catch { Logger.Error("[ERROR]Palameter error."); return new Associative() { { "result", "error".DQ() } }; } // bet 0 check if (bet == 0) { Logger.Warn("BET 0 ERROR!!!"); Logger.Warn("BET 0 ERROR!!!"); Logger.Warn("BET 0 ERROR!!!"); return new Associative() { { "result", "error".DQ() } }; } mobile.InsertCoin(bet); // マシンからのコールバック群 Action<int> Payout = (coinCount) => { }; var isLeverPulled = false; Action<int> ReelStart = (_yaku) => { Yaku y = (Yaku)_yaku; isLeverPulled = true; }; Action<int, int> ButtonStop = (button, reelIndex) => { }; Action<int> KeyTrigger = (key) => { }; Action Bet = () => { }; var callbacks = new CallbackToController() { Payout = Payout, ReelStart = ReelStart, ButtonStop = ButtonStop, KeyTrigger = KeyTrigger, Bet = Bet }; // レバーを引くまで回す while(isLeverPulled == false) { mobile.ZZ.int_value[Defines.DEF_Z_INT_KEYPRESS] |= (1 << 5); mobile.exec(callbacks); Thread.Sleep(20); } var afterCoinCount = mobile.CoinCount; var yaku = mobile.Yaku; var result = new Associative(); result.Add("route", "0"); result.Add("yaku", ((int)yaku).ToString()); State = MACHINE_STATE.PLAY; Logger.Info($"[INFO]Play GameId:{gameId} UserId:{userId} Bet:{bet} ------ Yaku:{yaku}"); return result; }
/// <summary> /// 大祭りプロセス /// </summary> /// <param name="keyTrigger"></param> /// <returns></returns> public bool process(int keyTrigger, CallbackToController callbacks) { int_s_value[Defines.DEF_INT_REEL_SPEED] = ZZ.getThreadSpeed() * Defines.DEF_REEL_COUNT_MIN * 0x10000 / 60000 * Mobile.getReelSpeed() / 100; if (Mobile.isMeoshi() || gp.gpif_auto_f || gp.gpif_nonstop_f || gp.gpif_tatsujin_f) { // オートプレイ if ((gp.gpif_auto_f) || (gp.gpif_nonstop_f) || (gp.gpif_tatsujin_f)) { if (Mobile.int_m_value[Defines.DEF_INT_IS_MENU_AVAILABLE] == Defines.DEF_MENU_UNAVAILABLE) { // メニューが無効の時 if ((keyTrigger & Defines.DEF_KEY_BIT_SOFT1) != 0) { reqMenuFg = true; } if ((keyTrigger & Defines.DEF_KEY_BIT_SOFT2) != 0) { reqMenuFg = true; } } } keyTrigger = Defines.DEF_KEY_BIT_SELECT; } if (reqMenuFg == true) { // 自動メニュー画面描画 if (Mobile.int_m_value[Defines.DEF_INT_IS_MENU_AVAILABLE] == Defines.DEF_MENU_AVAILABLE) { // メニューが無効の時 reqMenuFg = false; } } if (gp.getBusy()) { // GP用のウインドウが出ているので、筐体キーを無効化する keyTrigger = 0; return false; } // コイン枚数の更新 int_s_value[Defines.DEF_INT_SLOT_COIN_NUM] = gp.gpif_coin; // 40ms*10毎にタイミングを取ってみる pressingSpan++; pressingSpan %= 10; if (!IS_BONUS() && pressingSpan == 0) { } while (int_s_value[Defines.DEF_INT_CURRENT_MODE] != int_s_value[Defines.DEF_INT_REQUEST_MODE]) { int_s_value[Defines.DEF_INT_CURRENT_MODE] = int_s_value[Defines.DEF_INT_REQUEST_MODE]; // スロットゲームモード変更時に更新するフラグ int_s_value[Defines.DEF_INT_MODE_COUNTER] = 0; int_s_value[Defines.DEF_INT_ON_OFF_EFFECT] = 0; int_s_value[Defines.DEF_INT_RLPTNDT_COUNTER] = 0; int_s_value[Defines.DEF_INT_TOP_LAMP] = 0; // 各モードでの初期化 switch (int_s_value[Defines.DEF_INT_CURRENT_MODE]) { case Defines.DEF_RMODE_WIN: if (int_s_value[Defines.DEF_INT_WIN_LAMP] > 0 && int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 0) { // た~まや~点灯 int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 1; // ボーナス当選時 gp.onBonusNaibu(); // セルフオート停止フラグを立てる GameManager.Instance.StopAutoPlay("たまや点灯"); } // さらに大当たりで止まっていたらかっきーん! if (int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 1) { if (int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] == Defines.DEF_RP08) { playSE(Defines.DEF_SOUND_12); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_12; int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 2; // 以後演出抽選しないようにする clOHHB_V23.setWork(Defines.DEF_FOUT3, (ushort)1); } } break; case Defines.DEF_RMODE_WAIT: if (IS_HALL()) { //不正防止用にここで保存 Mobile.saveMenuData(true); } // 押せるようにする Mobile.setMenuAvarable(true); if (!IS_BONUS()) { lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_OFF); } // コイン7セグ描画用変数を初期化 int_s_value[Defines.DEF_INT_BETTED_COUNT] = 0; // 演出帳のデータを転送する GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_WEB, -1); break; case Defines.DEF_RMODE_BET: // MAXBETランプ表示期間(モード初期) // リール全点滅は一回だけ if (int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] == 2) { int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 3; } // 払い出しコイン枚数(表示用) int_s_value[Defines.DEF_INT_WIN_GET_COIN] = 0; int_s_value[Defines.DEF_INT_WIN_COIN_NUM] = 0; // 1ゲーム中の獲得コイン枚数 int_s_value[Defines.DEF_INT_IS_TEMPAI] = 0; // テンパイ状態 // 告知はBET時にクリア if (!IS_REPLAY()) { int_s_value[Defines.DEF_INT_KOKUCHI_X] = 0; } // サウンド if (!IS_BONUS()) { // ボーナス消化中以外は毎回停止指示。 Mobile.stopSound(Defines.DEF_SOUND_UNDEF); } if (IS_HALL()) { /*プレーヤーコイン要求*/ if (hallData[Defines.DEF_H_PLAYER_COIN] < int_s_value[Defines.DEF_INT_BET_COUNT]) { break; } } switch (int_s_value[Defines.DEF_INT_BET_COUNT]) { case 1: playSE(Defines.DEF_SOUND_25); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_25; break; case 2: playSE(Defines.DEF_SOUND_26); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_26; break; case 3: playSE(Defines.DEF_SOUND_22); _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_22; break; } // MENU遷移を禁止する Mobile.setMenuAvarable(false); break; case Defines.DEF_RMODE_SPIN: // 回転開始(モード初期) if (!IS_REPLAY()) { int_s_value[Defines.DEF_INT_TOTAL_BET] += int_s_value[Defines.DEF_INT_BETTED_COUNT]; hallData[Defines.DEF_H_MEDAL_IN] += int_s_value[Defines.DEF_INT_BETTED_COUNT]; hallData[Defines.DEF_H_PLAYER_COIN] -= int_s_value[Defines.DEF_INT_BETTED_COUNT]; } // Z80移植リール部分の初期化 // 1プレイ遊技用初期化 clOHHB_V23.clearWork(Defines.DEF_CLR_AREA_3); // Z80移植 // パチスロ抽選用乱数を取得 int rand = clOHHB_V23.mRandomX(); // 設定変更チェック chgWaveNum(); // 役の変更チェック chgYaku(); // 役抽選 clOHHB_V23.mReelStart(rand, int_s_value[Defines.DEF_INT_BET_COUNT]); var yaku = clOHHB_V23.getWork(Defines.DEF_WAVEBIT); callbacks.ReelStart(yaku); if (!IS_BONUS()) { if ((clOHHB_V23.getWork(Defines.DEF_WAVEBIT) & 0x01) != 0) { int_s_value[Defines.DEF_INT_CHRY_HIT]++; } else if ((clOHHB_V23.getWork(Defines.DEF_WAVEBIT) & 0x04) != 0) { int_s_value[Defines.DEF_INT_WMLN_HIT]++; } } else if (IS_BONUS_GAME()) { // ビタ外し成功 if ((clOHHB_V23.getWork(Defines.DEF_WAVEBIT) & 0x08) != 0) { int_s_value[Defines.DEF_INT_JAC_HIT]++; } } if ((clOHHB_V23.getWork(Defines.DEF_GMLVSTS) & (0x08 | 0x10)) != 0) { int_s_value[Defines.DEF_INT_THIS_FLAG_GAME]++; } // 演出をセット int flash0 = clOHHB_V23.getWork(Defines.DEF_FLASH + 0); GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_LANP, (flash0 / 128)); // 確定ランプフラグ int_s_value[Defines.DEF_INT_WIN_LAMP] = flash0 / 128; flash0 %= 128; int flash1 = clOHHB_V23.getWork(Defines.DEF_FLASH + 1); // 演出によるチェック GPW_eventProcess((int)Defines.EVENT_PROC.EVENT_PROC_CHK_FLASH, flash1); setFlash(flash1 / 32); set4th(flash1 % 32); // 開始音を鳴らす int snd_id = Defines.DEF_SOUND_19; if (flash1 % 32 > 0) { snd_id = Defines.DEF_SOUND_21; } if (flash0 / 64 > 0) { snd_id = Defines.DEF_SOUND_20; } if (Mobile.isJacCut() == false) { playSE(snd_id); } // 回転開始時間を記録する _spinTime = Util.GetMilliSeconds() + Defines.DEF_WAIT_SPIN; int_s_value[Defines.DEF_INT_IS_REEL_STOPPED] = 0; // リールストップ // 告知はSPIN時にクリア int_s_value[Defines.DEF_INT_KOKUCHI_X] = 0; // ボーナス(BB・RB)終了ですか? if (int_s_value[Defines.DEF_INT_IS_BB_RB_END] > 0) { // ここはボーナス終了ゲームの次ゲームの回転開始です if (!IS_HALL()) { // データパネル更新 if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7 || int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { // BB終了時のみ shiftDataPanelHistory(int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES], Defines.DEF_PS_BB_RUN); } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_RB_IN) { // RB終了時のみ shiftDataPanelHistory(int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES], Defines.DEF_PS_RB_RUN); } } // ボーナス関係のフラグたちをクリア int_s_value[Defines.DEF_INT_IS_BB_RB_END] = 0; // ボーナス終了後の次ゲームの回転でこのフラグおろす int_s_value[Defines.DEF_INT_BB_KIND] = Defines.DEF_BB_UNDEF; // BB入賞時の種別 int_s_value[Defines.DEF_INT_BONUS_GOT] = 0; // ボーナス獲得枚数の値をクリア int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] = 0; // JAC中の獲得枚数をクリア // ボーナス間ゲーム数をボーナス終了時にクリア int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES] = 0; hallData[Defines.DEF_H_BNS_0] = 0; // TOBE 個別PARAM BB 終了後の1ゲーム目ですよフラグを立てる int_s_value[Defines.DEF_INT_BB_AFTER_1GAME] = 1; } if (!IS_BONUS()) { // 通常ゲーム中 // ボーナス消化中のゲーム数を総回転数としてカウントしない int_s_value[Defines.DEF_INT_TOTAL_GAMES]++; // 総回転数を増やす //DfMain.TRACE(("総回転数のカウントアップ"); gp.onCountUp(); hallData[Defines.DEF_H_GAME_COUNT]++; // ボーナス間累積(ゲーム情報) int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES]++; hallData[Defines.DEF_H_BNS_0]++; } // データパネル情報更新(ゲーム数) if (IS_HALL()) { setCurrentDataPanel(hallData[Defines.DEF_H_BNS_0]); } else { setCurrentDataPanel(int_s_value[Defines.DEF_INT_UNTIL_BONUS_GAMES]); } // キーリジェクトの値。 int_s_value[Defines.DEF_INT_KEY_REJECT] = 5; // 停止フラグ int_s_value[Defines.DEF_INT_REEL_STOP_R0] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_STOP_R1] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_STOP_R2] = ANGLE_UNDEF; int_s_value[Defines.DEF_INT_REEL_ANGLE_R0] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; int_s_value[Defines.DEF_INT_REEL_ANGLE_R1] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; int_s_value[Defines.DEF_INT_REEL_ANGLE_R2] -= int_s_value[Defines.DEF_INT_REEL_SPEED] * 2 / 4; GameManager.Instance.OnStartPlay(); break; case Defines.DEF_RMODE_FLASH: // (モード初期) break; case Defines.DEF_RMODE_RESULT: // (モード初期) // RESULTに入った時間を記録 _lampTime = Util.GetMilliSeconds() + Defines.DEF_WAIT_LAMP; // 払い出しコイン枚数 var payOut = clOHHB_V23.mPayMedal(); int_s_value[Defines.DEF_INT_WIN_COIN_NUM] = payOut; int_s_value[Defines.DEF_INT_TOTAL_PAY] += payOut; hallData[Defines.DEF_H_MEDAL_OUT] += payOut; callbacks.Payout(payOut); if ((clOHHB_V23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_RB) != 0) { Defines.TRACE("RB入賞時"); } else if ((clOHHB_V23.getWork(Defines.DEF_HITFLAG) & Defines.DEF_HITFLAG_NR_BB) != 0) { Defines.TRACE("BB入賞時"); } //DfMain.TRACE(("払い出し分加算"); if (!IS_BONUS()) { if ((clOHHB_V23.getWork(Defines.DEF_HITFLAG) & 0x01) != 0) { int_s_value[Defines.DEF_INT_CHRY_GOT]++; } else if ((clOHHB_V23.getWork(Defines.DEF_HITFLAG) & 0x04) != 0) { int_s_value[Defines.DEF_INT_WMLN_GOT]++; } } else if (IS_BONUS_GAME()) { // ビタ外し成功 if (clOHHB_V23.getWork(Defines.DEF_HITFLAG) == 0 && ((clOHHB_V23.getWork(Defines.DEF_WAVEBIT) & 0x08) != 0) && (clOHHB_V23.getWork(Defines.DEF_ARAY11) == Defines.DEF_BAR_)) { int_s_value[Defines.DEF_INT_HAZUSI_COUNT]++; } } int_s_value[Defines.DEF_INT_BONUS_GOT] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; if ((IS_BONUS_JAC() == true)) { int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] += int_s_value[Defines.DEF_INT_WIN_COIN_NUM]; } // 払い出し音の発生(獲得枚数がなくても鳴らさなくてはならないので、ここで呼ぶ) playCoinSound(); break; case Defines.DEF_RMODE_BB_FANFARE: // (モード初期) int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 0; int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] = 0; lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_ON); // BBファンファーレ鳴らすモード(→Defines.DEF_RMODE_BB_FANFARE_VOICE) if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_03; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_03, false); // BBファンファーレ1(ドンチャン揃い) } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) { _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_02; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_02, false); // BBファンファーレ2(7揃い) } set4th(29); break; case Defines.DEF_RMODE_RB_FANFARE: // (モード初期) int_s_value[Defines.DEF_INT_WIN_LAMP_STATUS] = 0; int_s_value[Defines.DEF_INT_4TH_ACTION_FLAG] = 0; lampSwitch(Defines.DEF_LAMP_4TH, Defines.DEF_LAMP_ACTION_ON); // RBファンファーレ鳴らすモード(→Defines.DEF_RMODE_BB_FANFARE_VOICE) _soundTime = Util.GetMilliSeconds() + Defines.DEF_SOUND_MS_04; // ファンファーレ完奏時間設定 playBGM(Defines.DEF_SOUND_04, false); set4th(29); break; case Defines.DEF_RMODE_FIN_WAIT: // (モード初期) int_s_value[Defines.DEF_INT_KEY_REJECT] = 0; // 毎ゲーム終了時にここを通る ushort bonusEndFg; bonusEndFg = clOHHB_V23.mBonusCounter(); if (IS_BONUS() == true) { // ボーナス終了フラグじゃないとき if (cutBonusSystem(0)) { // ボーナスカット処理が必要の場合 // カット処理フラグON BonusCutFg = true; if ((int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) || (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7)) { // BB終了判定(RBの場合はRB終了時にメダル加算を行なう) if ((IS_BONUS_JAC() == true)) { int num; num = 0; // JACゲームの獲得枚数 if (int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] < Defines.JAC_BONUS_AVENUM) { // JACゲームのカット枚数を加算する num = (Defines.JAC_BONUS_AVENUM - int_s_value[Defines.DEF_INT_BONUS_JAC_GOT]); int_s_value[Defines.DEF_INT_BONUS_JAC_GOT] = 0; // JAC中の獲得枚数をクリア int_s_value[Defines.DEF_INT_BONUS_GOT] += num; } Defines.TRACE("JACカット分を追加:" + num); GPW_chgCredit(num); BonusCutFg = false; // JACのカットはここまでなので } } bonusEndFg = clOHHB_V23.mBonusCounter(); } } if (bonusEndFg != 0) { BonusEnd(0); } break; case Defines.DEF_RMODE_NO_COIN: // (モード初期) return true; // コインなしで終了通知 } break; } if (int_s_value[Defines.DEF_INT_PREV_GAMEST] != clOHHB_V23.getWork(Defines.DEF_GAMEST)) { int_s_value[Defines.DEF_INT_PREV_GAMEST] = clOHHB_V23.getWork(Defines.DEF_GAMEST); if ((int_s_value[Defines.DEF_INT_PREV_GAMEST] & 0x01) != 0) { // JACBGMを鳴らす playBGM(Defines.DEF_SOUND_05, true); } else if ((int_s_value[Defines.DEF_INT_PREV_GAMEST] & 0x80) != 0) { // BIGBGMを鳴らす if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_R7) { playBGM(Defines.DEF_SOUND_07, true); } else if (int_s_value[Defines.DEF_INT_BB_KIND] == Defines.DEF_BB_B7) { playBGM(Defines.DEF_SOUND_06, true); } } } int_s_value[Defines.DEF_INT_MODE_COUNTER]++; // モードが切り替わってからの累積カウンタ ctrlTopLamp(); int_s_value[Defines.DEF_INT_ON_OFF_EFFECT] = Util.GetMilliSeconds() % 1000 > 500 ? 1 : 0; ctrlLamp(); ctrlBetLamp(); DoModeAction(keyTrigger, callbacks); return false; }
/** * リールを止めるべき所に止める。 * @param button 第?回胴停止(左=0, 中=1, 右=2) * @return true:既に止まっている * false:回転中 */ private static bool setReelStopAngle(int button, CallbackToController callbacks) { if (IsReelStopped(button)) { // 止まってる return true; } // 止まる場所 var result_index = 0; // 目押サポート付ボーナスイン result_index = ANGLE2INDEX(int_s_value[Defines.DEF_INT_REEL_ANGLE_R0 + button]); //// BB, RBで分岐 //if ((clOHHB_V23.getWork(Defines.DEF_GAMEST) & 0x01) != 0) //{ // // ビタでREGを止めているので、 // // 正式対応時に後で外す // result_index = EyeSniperRB(button); //} //else if (currentYaku == Yaku.BigBonus) //{ // // ビタで777を止めているので、 // // 正式対応時に後で外す // result_index = EyeSniperBB(button); //} // BB, RBで分岐 if (clOHHB_V23.getWork(Defines.DEF_HITREQ) == Defines.DEF_HITFLAG_NR_RB) { // ビタでREGを止めているので、 // 正式対応時に後で外す result_index = EyeSniperRB(button); } else if (clOHHB_V23.getWork(Defines.DEF_HITREQ) == Defines.DEF_HITFLAG_NR_BB) { // ビタで777を止めているので、 // 正式対応時に後で外す result_index = EyeSniperBB(button); } callbacks.ButtonStop(button, result_index); // 停止角度を決める int_s_value[Defines.DEF_INT_REEL_STOP_R0 + button] = INDEX2ANGLE(result_index); // 停止出目を覚えておく int_s_value[Defines.DEF_INT_PREV_GAME] &= ~(0x1F << button * 5);// 対象BITをクリア int_s_value[Defines.DEF_INT_PREV_GAME] |= (result_index << (button * 5));// 記憶 if (Mobile.isJacCut() == true) { return true; } return false; }
/// <summary> /// メインループ /// メインループを外だしにすっか /// </summary> /// <returns></returns> IEnumerator MainLoop() { var core = new Mobile(); var pressed = new List<ButtonWithReelIndex>(); var betCoins = 0; // マシンからのコールバック群 Action<int> Payout = (coinCount) => { // sorottaは役が揃った=1 揃わなかった=0 var sorotta = coinCount > 0 ? "1" : "0"; // 押し順をFSMにストア var msg = String.Join("", pressed.Select(pr => (pr.Button + 1).ToString()).ToArray()); msg += sorotta; var fsmStr = SlotMachineStateFsm.FsmVariables.FindFsmString("PressOrder"); fsmStr.Value = msg; SlotMachineStateFsm.SendEvent("Payout"); }; Action<int> ReelStart = (yaku) => { SlotMachineStateFsm.FsmVariables.FindFsmInt("Yaku").Value = yaku; Yaku y = (Yaku)yaku; Debug.Log("クライアント成立役:" + y.ToString()); pressed.Clear(); betCoins = 0; }; Action<int, int> ButtonStop = (button, reelIndex) => { //Debug.Log("ButtonStop:" + button + "," + reelIndex); var p = new ButtonWithReelIndex() { Button = button, ReelIndex = reelIndex }; var table = new[] { new { index = 0, fsmInt = SlotMachineStateFsm.FsmVariables.FindFsmInt("ReelIndex0") }, new { index = 1, fsmInt = SlotMachineStateFsm.FsmVariables.FindFsmInt("ReelIndex1") }, new { index = 2, fsmInt = SlotMachineStateFsm.FsmVariables.FindFsmInt("ReelIndex2") }, }; // ボタン押下リール位置をFSMにストア var fsmInt = table.Where(e => e.index == button).First().fsmInt; fsmInt.Value = reelIndex; // すでにボタンが押下してあるなら登録しない if ( pressed.Any(prs=>prs.Button==button)) { return; } pressed.Add(p); if( pressed.Count == 3) { // 3ボタン押した SlotMachineStateFsm.SendEvent("AllButtonPushed"); } }; Action<int> KeyTrigger = (key) => { //Debug.Log("Key:" + key); }; Action Bet = () => { betCoins++; SlotMachineStateFsm.FsmVariables.FindFsmInt("BetCount").Value = betCoins; if (betCoins >= 3) { //Debug.Log("Bet:" + betCoins); } }; var callbacks = new CallbackToController() { Payout = Payout, ReelStart = ReelStart, ButtonStop = ButtonStop, KeyTrigger = KeyTrigger, Bet = Bet }; while (true) { try { core.exec(callbacks); } catch (Exception e) { Debug.Log(e); } if (IsAllReelStopped() && Is4thReelStopped()) { slotMachineState.PlayEnd(); SlotMachineStateFsm.SendEvent("AllReelsStopped"); } yield return new WaitForSeconds(0.02f); } }
private void ctrlRun(CallbackToController callbacks) { if (mOmatsuri.process(keyTrigger, callbacks, ReelIndexies)) { mOmatsuri.getExitReason(); } mOmatsuri.restartSlot(); int pos = (mOmatsuri.int_s_value[Defines.DEF_INT_4TH_REEL_ANGLE] % 414) * (2359296 / 414); ZZ.dbgDrawAll(); }
public void exec(CallbackToController callbacks) { // キー取得 keyTrigger = ZZ.getKeyPressed(); keyPressing = ZZ.getKeyPressing(); if (keyTrigger != 0) { callbacks.KeyTrigger(keyTrigger); } if (keyPressing == 0) { keyPressingCount = 0; } else { keyPressingCount++; } // モード切り替えチェック if (int_m_value[Defines.DEF_INT_MODE_CURRENT] != int_m_value[Defines.DEF_INT_MODE_REQUEST]) { int_m_value[Defines.DEF_INT_MODE_CURRENT] = int_m_value[Defines.DEF_INT_MODE_REQUEST]; int_m_value[Defines.DEF_INT_COUNTER] = 0; } // モードごとに処理分岐 switch (int_m_value[Defines.DEF_INT_MODE_CURRENT]) { case Defines.DEF_MODE_UNDEF: if (!loadMenuData()) { initConfig(); saveMenuData(false); //初期はホールPは保存しない if (DEF_IS_DOCOMO) { break; } } setMode(Defines.DEF_MODE_TITLE); break; /* タイトル */ case Defines.DEF_MODE_TITLE: ctrlTitle(); break; /* ゲーム中 */ case Defines.DEF_MODE_RUN: ctrlRun(callbacks); break; } }