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; }
/// <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; }