//----------------------------------------------------------------------------- // OMORI Minigame - BlackJack //----------------------------------------------------------------------------- function BlackJackCard(suit, type, index) { this.suit = suit; this.type = type; this.index = index; this.softAce = false; } BlackJackCard.prototype.value = function() { if (this.type === "A") return this.softAce ? 1 : 11; // Value can be one or eleven else if (this.type === "J" || this.type === "Q" || this.type === "K") return 10; else return parseInt(this.type); } function Scene_BlackJack() { this.initialize.apply(this, arguments); } Scene_BlackJack.prototype = Object.create(Scene_MenuBase.prototype); Scene_BlackJack.prototype.constructor = Scene_MenuBase; Scene_BlackJack.prototype.initialize = function() { Scene_MenuBase.prototype.initialize.call(this); ImageManager.loadAtlas("MN_BlackJack"); $gameSystem.saveBgm(); AudioManager.stopAll(); this._exitFade = 0; this._titleScreenActive = true; this._logo = null; this._deck = []; // In terms of wins during current play this._playerScore = 0; this._opponentScore = 0; // In terms of 21, cards this._playerHand = []; this._opponentHand = []; // Keep track of previous decision this._playerPreviousPlay; this._opponentPreviousPlay; this._previousWinner; this._playerStreak = 0; this._opponentStreak = 0; // Player earnings this._earnings = 100; // Bet this._wagerAmount = 0; // Game Started this._gameInProgress = false; this._courtesyOptions = false; this._resultsOpen = false; this._showingOpponentAction = false; } Scene_BlackJack.prototype.create = function () { Scene_MenuBase.prototype.create.call(this); // Create Title Screen this._titleCommands = new Window_BJTitleCommands(); this._titleCommands.setHandler('new', this.startGame.bind(this)); this._titleCommands.setHandler('continue', this.continueGame.bind(this)); this._titleCommands.setHandler('quit', this.commandExit.bind(this)); this._titleCommands.setHandler('cancel', this.commandExit.bind(this)); this.addWindow(this._titleCommands); this._titleCommands.visible = false; this._titleCommands.deactivate(); // Create Visuals this._dataWindow = new Window_BlackJackData(0, 0); this._dataWindow.visible = false; this.addWindow(this._dataWindow); this._titleWindow = new Window_MinigameTitle(); this.addWindow(this._titleWindow); this._titleWindow.visible = false; this._wagerWindow = new Window_Wager(0,0); this._wagerWindow.setHandler('5', this.commandWager5.bind(this)); this._wagerWindow.setHandler('25', this.commandWager25.bind(this)); this._wagerWindow.setHandler('100', this.commandWager100.bind(this)); this._wagerWindow.setHandler('quit', this.commandQuit.bind(this)); this.addWindow(this._wagerWindow); this._wagerWindow.deactivate(); this._wagerWindow.visible = false; this._commandWindow = new Window_BlackJackCommands(0, 0); this._commandWindow.setHandler('stand', this.commandStand.bind(this)); this._commandWindow.setHandler('hit', this.commandHit.bind(this)); this.addWindow(this._commandWindow); this._commandWindow.deactivate(); this._commandWindow.visible = false; this.startFadeIn(this.fadeSpeed(), false); } alias_Scene_BlackJack_createBackground = Scene_BlackJack.prototype.createBackground; Scene_BlackJack.prototype.createBackground = function () { alias_Scene_BlackJack_createBackground.call(this); this.mainImage = new Sprite(); this.mainImage.bitmap = ImageManager.loadPicture("blackjack_bg"); this.addChildAt(this.mainImage, 1); this._titleScreenActive = true; }; Scene_BlackJack.prototype.startGame = function () { this.startFadeOut(25); this._atLeastOneGameStarted = false; this._titleScreenActive = false; this.removeChild(this._logo); this._logo = null; this._musicDelay = 30; // Delay playing the music this._earnings = 100; } Scene_BlackJack.prototype.commandQuit = function () { if (this._gameInProgress) { this._commandWindow.activate(); return; } this.payOut(); // Reset this.hardReset(); this._dataWindow.contents.clear(); this._commandWindow.deactivate(); this._commandWindow.visible = false; this._gameResults = true; } Scene_BlackJack.prototype.gameOver = function() { AudioManager.stopAll(); this.hardReset(); this._commandWindow.deactivate(); this._commandWindow.visible = false; this._wagerWindow.visible = false; this._wagerWindow.deactivate(); this._dataWindow.visible = false; this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_0").text); this._titleWindow.visible = true; this._gameResults = true; } Scene_BlackJack.prototype.continueGame = function () { this.startGame(); this._earnings = $gameVariables.value(827); this.updateData(); } Scene_BlackJack.prototype.toTitle = function () { AudioManager.stopAll(); this._titleScreenActive = true; this.mainImage.bitmap = ImageManager.loadPicture("blackjack_bg"); this._wagerWindow.visible = false; this._wagerWindow.deactivate(); this._titleWindow.visible = false; this._titleScreenActive = true; if ($gameVariables.value(827) > 0) { this._titleCommands.select(1); } } Scene_BlackJack.prototype.commandExit = function () { this._exitFade = 30; this.startFadeOut(30); }; Scene_BlackJack.prototype.commandWager5 = function () { this.setWagerAmount(5); } Scene_BlackJack.prototype.commandWager25 = function () { this.setWagerAmount(25); } Scene_BlackJack.prototype.commandWager100 = function () { this.setWagerAmount(100); } Scene_BlackJack.prototype.commandWager500 = function () { this.setWagerAmount(500); } Scene_BlackJack.prototype.setWagerAmount = function(amount) { if (!(this._earnings >= amount)) { this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_1").text + amount); this._timer = 90; this._wagerWindow.activate(); return; } this._wagerAmount = amount; this._titleWindow.visible = false; this._wagerWindow.deactivate(); this._wagerWindow.visible = false; this.updateData(); this._dataWindow.visible = true; this._commandWindow.activate(); this._commandWindow.visible = true; this._commandWindow.select(0); this.commandDeal(); } Scene_BlackJack.prototype.commandDeal = function() { this._dataWindow.visible = true; this._titleWindow.visible = false; this._deck = []; this.softReset(); // Create the cards in the deck var suits = ["Diamond", "Spade", "Heart", "Club"]; var types = ["K", "Q", "J", 10, 9, 8, 7, 6, 5, 4, 3, 2, "A"]; var index = 0; suits.forEach(suit => { types.forEach(type => { var card = new BlackJackCard(suit, type, index); this._deck.push(card); index ++; }) }); // Randomize Deck var curElement = this._deck.length; var temp; var randomizedLoc; while (0 !== curElement) { randomizedLoc = Math.floor(Math.random() * curElement); curElement -= 1; temp = this._deck[curElement]; this._deck[curElement] = this._deck[randomizedLoc]; this._deck[randomizedLoc] = temp; } // Deal first 2 cards to player this._playerHand.unshift(this._deck[0]); this._deck.splice(0, 1); this._playerHand.unshift(this._deck[0]); this._deck.splice(0, 1); // Deal first 2 cards to oppnonent this._opponentHand.unshift(this._deck[0]); this._deck.splice(0, 1); this._opponentHand.unshift(this._deck[0]); this._deck.splice(0, 1); this._gameInProgress = true; this._courtesyOptions = false; this._atLeastOneGameStarted = true; this._commandWindow.select(0); this.checkWinConditions(); this.updateData(); this.switchPhase('player'); } Scene_BlackJack.prototype.commandHit = function() { var se = { name: "mini_bj_cardplace", volume: 100, pitch: 100, pan: 0 }; AudioManager.playSe(se); this._playerHand.unshift(this._deck[0]); this._deck.splice(0, 1); this._playerPreviousPlay = 'hit'; this.checkWinConditions(); this.updateData(); if (this._gameInProgress) { this.switchPhase('opponent'); } } Scene_BlackJack.prototype.opponentHit = function() { this.showActionImage('BJ-HIT'); var se = { name: "mini_bj_cardplace", volume: 100, pitch: 100, pan: 0 }; AudioManager.playSe(se); this._opponentHand.unshift(this._deck[0]); this._deck.splice(0, 1); this._opponentPreviousPlay = 'hit'; this.checkWinConditions(); this.updateData(); if (this._gameInProgress) { this.switchPhase('player'); } } Scene_BlackJack.prototype.commandStand = function() { this._playerPreviousPlay = 'stand'; this.checkWinConditions(); this.updateData(); if (this._gameInProgress) { this.switchPhase('opponent'); } } Scene_BlackJack.prototype.opponentStand = function() { this.showActionImage('BJ-STAY'); this._opponentPreviousPlay = 'stand'; this.checkWinConditions(); this.updateData(); if (this._gameInProgress) { this.switchPhase('player'); } } Scene_BlackJack.prototype.softReset = function() { this._deck = []; this._playerHand = []; this._opponentHand = []; this._playerPreviousPlay = null; this._opponentPreviousPlay = null; this._gameInProgress = false; this._courtesyOptions = false; this._resultsOpen = false; this._showingOpponentAction = false; } Scene_BlackJack.prototype.hardReset = function() { this._deck = []; // In terms of wins during current play this._playerScore = 0; this._opponentScore = 0; // In terms of 21, cards this._playerHand = []; this._opponentHand = []; // Keep track of previous decision this._playerPreviousPlay; this._opponentPreviousPlay; this._previousWinner; this._playerStreak = 0; this._opponentStreak = 0; // Player earnings this._earnings = $gameVariables.value(827) || 0; // Bet this._wagerAmount = 0; // Game Started this._gameInProgress = false; this._courtesyOptions = false; this._resultsOpen = false; this._showingOpponentAction = false; } Scene_BlackJack.prototype.switchPhase = function(turnOwner) { if (turnOwner === "opponent") { // Play turn animation/image for opponent // Opponent AI (Hit or Stand) if (this.getCurrentHandValue('player') >= 21) { this._commandWindow.activate(); return; } else if (this.getCurrentHandValue('opponent') < 17) { this.opponentHit(); this._commandWindow.activate(); } else { this.opponentStand(); this._commandWindow.activate(); } } else { // Play turn animation/image for player // Hand control to player this._commandWindow.activate(); } } Scene_BlackJack.prototype.getCurrentHandValue = function(turnOwner) { var value = 0; if (turnOwner === 'player') { this._playerHand.forEach(card => { value += card.value(); }); // Account for any aces that might be bringing up the value unnecessarily while (value > 21) { for (var i = 0; i < this._playerHand.length; i++) { if (this._playerHand[i].type === 'A' && value > 21) { this._playerHand[i].softAce = true; value -= 10; } if (value <= 21) break; } break } } else { this._opponentHand.forEach(card => { value += card.value(); }); // Account for any aces that might be bringing up the value unnecessarily while (value > 21) { for (var i = 0; i < this._opponentHand.length; i++) { if (this._opponentHand[i].type === 'A', value > 21) { this._opponentHand[i].softAce = true; value -= 10; } if (value <= 21) break; } break } } value = 0; // Try again if (turnOwner === 'player') { console.log("Player: ") this._playerHand.forEach(card => { value += card.value(); }); } else { console.log("Opponent: ") this._opponentHand.forEach(card => { value += card.value(); }); } console.log(value); return value; } Scene_BlackJack.prototype.courtesyOptions = function() { // YOU'VE ALREADY LOST! this._courtesyOptions = true; this.switchPhase('player'); } Scene_BlackJack.prototype.endGame = function(winner) { this._gameInProgress = false; if (winner === 'player' && this._previousWinner != 'opponent'){ this._playerStreak += 1; this._opponentStreak = 0; } else if (winner === 'opponent' && this._previousWinner != 'player') { this._playerStreak = 0; this._opponentStreak += 1; } else { this._opponentStreak = 0; this._playerStreak = 0; } if (winner === 'player') { this._playerScore += 1; this._earnings += this._wagerAmount * this._playerStreak; // console.log(this._wagerAmount + ' * ' + this._playerStreak); } else if (winner === 'opponent') { this._opponentScore += 1; this._earnings -= this._wagerAmount * this._opponentStreak; // console.log(this._wagerAmount + ' * ' + this._opponentStreak); } this.updateData(); } Scene_BlackJack.prototype.updateData = function() { this._dataWindow._playerHand = this._playerHand; this._dataWindow._opponentHand = this._opponentHand; this._dataWindow._playerScore = this._playerScore; this._dataWindow._opponentScore = this._opponentScore; this._dataWindow._currentEarnings = this._earnings; this._dataWindow._currentPlayerBonus = this._playerStreak + 1; this._dataWindow.refresh(); } Scene_BlackJack.prototype.showResultImage = function(filename) { if (this._winner === "player"){ var se = { name: "mini_bj_win", volume: 100, pitch: 100, pan: 0 }; AudioManager.playSe(se); } else if (this._winner === "opponent") { var se = { name: "mini_bj_lose", volume: 100, pitch: 100, pan: 0 }; AudioManager.playSe(se); } this._commandWindow.deactivate(); this._dataWindow._showOpponentHand = true; this.updateData(); this._result = new Sprite(); this._result.bitmap = ImageManager.loadPicture(filename); this.addChild(this._result); this._resultsOpen = true; this._timer = 120; } Scene_BlackJack.prototype.showActionImage = function (filename) { this._timer = 90; this._commandWindow.deactivate(); this.updateData(); this._action = new Sprite(); this._action.bitmap = ImageManager.loadPicture(filename); this.addChild(this._action); this._showingOpponentAction = true; } Scene_BlackJack.prototype.checkWinConditions = function() { var _playerValue = this.getCurrentHandValue('player'); var _opponentValue = this.getCurrentHandValue('opponent'); if (this._courtesyOptions) { this._courtesyOptions = false; this.setupResults("BJ-LOSE", "opponent"); this._resultsDelay = 180; return; } // Check For 21 if (_playerValue === 21 && _opponentValue === 21) { this.setupResults("BJ-TIE"); this._resultsDelay = 120; // Check if natural (actually check the cards to see if it is an Ace + Face) return; } else if (_playerValue === 21) { this.setupResults("BJ-NATURAL", "player"); this._resultsDelay = 120; return; } else if (_opponentValue === 21) { this.updateData(); this.courtesyOptions(); return; } // Check for BUST (Over 21) if (_playerValue > 21) { this.setupResults("BJ-BUST", "opponent"); this._resultsDelay = 120; return; } else if (_opponentValue > 21){ this.setupResults("BJ-WIN", "player"); this._resultsDelay = 120; return; } // Check for game over if (this._playerPreviousPlay === 'stand' && this._opponentPreviousPlay === 'stand') { if (_playerValue === _opponentValue) { this.setupResults("BJ-TIE"); this._resultsDelay = 120; return; } else if (_playerValue > _opponentValue) { this.setupResults("BJ-WIN", "player"); this._resultsDelay = 120; return; } else if (_opponentValue > _playerValue) { this.setupResults("BJ-LOSE", "opponent"); this._resultsDelay = 120; return; } return; } this.updateData(); } Scene_BlackJack.prototype.setupResults = function(matchOutcome, winner) { this._matchOutcome = matchOutcome; this._winner = winner } Scene_BlackJack.prototype.update = function() { Scene_Base.prototype.update.call(this); if (this._exitFade > 0) { this._exitFade--; this._logo.opacity -= 12; if (this._exitFade <= 0) { this.removeChild(this._logo); this.removeChild(this.mainImage); this.removeChild(this._titleCommands); this.popScene(); $gameSystem.replayBgm(); } return; } if (this._resultsDelay > 0) { this._commandWindow.deactivate(); this._resultsDelay--; if (this._resultsDelay <= 0) { this.showResultImage(this._matchOutcome); this.endGame(this._winner); this._winner = null; this._matchOutcome = null; } } if (this._musicDelay > 0) { this._musicDelay -= 1; if (this._musicDelay <= 0) { var bgm = { name: "minigame_blackjack", volume: 100, pitch: 100, pan: 0 }; AudioManager.playBgm(bgm); this.mainImage.bitmap = ImageManager.loadPicture("blackjack_layout"); this._titleCommands.deactivate(); this._titleCommands.visible = false; this._wagerWindow.activate(); this._wagerWindow.visible = true; this._wagerWindow.select(0); this._titleWindow.visible = true; this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_2").text + this._earnings + LanguageManager.getMessageData("blackjack_minigame.message_3").text); this.startFadeIn(100); } } if (this._gameResults) { if (Input.isTriggered('ok')) { this.toTitle(); this._gameResults = false; } } if (this._titleScreenActive) { if (!this._logo) { this._logo = new Sprite(); this._logo.bitmap = ImageManager.loadPicture("blackjack_logo"); this._logo.x = (Graphics.boxWidth - 418) / 2; this._logo.y = Graphics.boxHeight; this.addChild(this._logo); this._frame = new Sprite(); this._frame.bitmap = ImageManager.loadPicture("blackjack_frame"); this.addChild(this._frame); } else if (this._logo && this._logo.y > 128) { this._logo.y -= 2; if (Input.isTriggered('ok') || Input.isTriggered('cancel')) { this._logo.y = 128; this._titleCommands.activate(); } } else { if (this._titleCommands.visible === false) { this.removeChild(this._frame); this._frame = null; this._titleCommands.refresh(); this._titleCommands.visible = true; this._titleCommands.activate(); } } } if (this._timer > 0 && this._wagerWindow.visible) { this._timer --; if (this._timer <= 0) { this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_2").text + this._earnings + LanguageManager.getMessageData("blackjack_minigame.message_3").text); } } if (this._showingOpponentAction){ if (this._commandWindow.active) this._commandWindow.deactivate(); if (this._timer > 0) { this._timer --; } if (this._action) { if (Input.isTriggered('ok') || this._timer < 1) { if (this._action) this.removeChild(this._action); this._commandWindow.refresh(); this._commandWindow.activate(); this._commandWindow.visible = true; this.updateData(); this._showingOpponentAction = false; } } } if (this._resultsOpen) { if (this._commandWindow.active) { this._commandWindow.deactivate(); } if (this._timer > 0) { this._timer--; } else { if (Input.isTriggered('ok')) { this.removeChild(this._result); this._commandWindow.refresh(); this._commandWindow.deactivate(); this._commandWindow.select(2); this._commandWindow.visible = false; this._dataWindow._showOpponentHand = false; if (this._earnings <= 0) { this.gameOver(); } else { this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_2").text + this._earnings + LanguageManager.getMessageData("blackjack_minigame.message_3").text); this._titleWindow.visible = true; this._dataWindow.visible = false; this.softReset(); this._wagerWindow.activate(); this._wagerWindow.visible = true; } this.updateData(); this._resultsOpen = false; } } } } Scene_BlackJack.prototype.payOut = function() { this._titleWindow.visible = true; if (this._atLeastOneGameStarted) this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_2").text + this._earnings + "!"); else this._titleWindow.refresh(LanguageManager.getMessageData("blackjack_minigame.message_8").text + this._earnings + "!"); $gameVariables.setValue(827, this._earnings); } //============================================================================= // //============================================================================= function Window_Wager() { this.initialize.apply(this, arguments); } Window_Wager.prototype = Object.create(Window_HorzCommand.prototype); Window_Wager.prototype.constructor = Window_Wager; Window_Wager.prototype.initialize = function () { var x = (Graphics.boxWidth - this.windowWidth()) / 2; var y = Graphics.boxHeight - 86; Window_HorzCommand.prototype.initialize.call(this, x, y); this.opacity = 0; this.refresh(); }; Window_Wager.prototype.standardPadding = function () { return 0; }; Window_Wager.prototype.spacing = function () { return 12; }; Window_Wager.prototype.windowWidth = function () { return Graphics.boxWidth - 108; }; Window_Wager.prototype.windowHeight = function () { return this.fittingHeight(1); }; Window_Wager.prototype.itemTextAlign = function () { return 'center'; }; Window_Wager.prototype.select = function (index) { this._index = index; this._stayCount = 0; this.ensureCursorVisible(); this.updateCursor(); this.callUpdateHelp(); this.refresh(); }; Window_Wager.prototype.drawItem = function (index) { this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.fontSize = 20; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = 0; this.changeTextColor(this.textColor(6)); this.contents.fontFace = 'Helvetica'; var rect = this.itemRectForText(index); if (this.currentSymbol() === this.commandSymbol(index)) { var bitmap = ImageManager.loadPicture('BJ-Button-Selected'); if (this.isCommandEnabled(index)) this.changeTextColor(this.textColor(0)); else this.changeTextColor(this.textColor(7)); } else { var bitmap = ImageManager.loadPicture('BJ-Button'); } this.contents.blt(bitmap, 0, 0, 124, 36, rect.x - 22, rect.y); var align = this.itemTextAlign(); this.drawText(this.commandName(index), rect.x - 18, rect.y, rect.width, align); } Window_Wager.prototype.makeCommandList = function () { const bets = LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").bets this.addCommand(bets[0], '5') this.addCommand(bets[1], '25'); this.addCommand(bets[2], '100'); this.addCommand(bets[3], 'quit'); } //============================================================================= // //============================================================================= function Window_BlackJackCommands() { this.initialize.apply(this, arguments); } Window_BlackJackCommands.prototype = Object.create(Window_HorzCommand.prototype); Window_BlackJackCommands.prototype.constructor = Window_BlackJackCommands; Window_BlackJackCommands.prototype.initialize = function () { var x = (Graphics.boxWidth - this.windowWidth()) / 2; var y = Graphics.boxHeight - 86; Window_HorzCommand.prototype.initialize.call(this, x, y); this._gameInProgress = false; this.opacity = 0; this.refresh(); }; Window_BlackJackCommands.prototype.standardPadding = function () { return 0; }; Window_BlackJackCommands.prototype.spacing = function () { return 12; }; Window_BlackJackCommands.prototype.maxCols = function () { return 2; }; Window_BlackJackCommands.prototype.windowWidth = function () { return 302; }; Window_BlackJackCommands.prototype.windowHeight = function () { return this.fittingHeight(1); }; Window_BlackJackCommands.prototype.itemTextAlign = function () { return 'center'; }; Window_BlackJackCommands.prototype.select = function (index) { this._index = index; this._stayCount = 0; this.ensureCursorVisible(); this.updateCursor(); this.callUpdateHelp(); this.refresh(); }; Window_BlackJackCommands.prototype.drawItem = function(index) { this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.fontSize = 20; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = 0; this.changeTextColor(this.textColor(6)); this.contents.fontFace = 'Helvetica'; var rect = this.itemRectForText(index); if (this.currentSymbol() === this.commandSymbol(index)) { var bitmap = ImageManager.loadPicture('BJ-ButtonLong-Selected'); if (this.isCommandEnabled(index)) this.changeTextColor(this.textColor(0)); else this.changeTextColor(this.textColor(7)); } else { var bitmap = ImageManager.loadPicture('BJ-ButtonLong'); } if (!this.isCommandEnabled(index)) this.changeTextColor('#939393'); this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, rect.x - 22, rect.y); var align = this.itemTextAlign(); this.drawText(this.commandName(index), rect.x - 18, rect.y, rect.width, align); } Window_BlackJackCommands.prototype.makeCommandList = function () { const comm = LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").jack_commands this.addCommand(comm[0].toUpperCase(), 'stand'); this.addCommand(comm[1].toUpperCase(), 'hit'); } //============================================================================= // //============================================================================= function Window_BlackJackData() { this.initialize.apply(this, arguments); } Window_BlackJackData.prototype = Object.create(Window_Base.prototype); Window_BlackJackData.prototype.constructor = Window_BlackJackData; Window_BlackJackData.prototype.initialize = function () { Window_Base.prototype.initialize.call(this, 0, 0, this.windowWidth(), this.windowHeight()); this.opacity = 0; this._playerHand; this._opponentHand; this._playerScore = 0; this._opponentScore = 0; this._currentEarnings = 0 this._currentPlayerBonus = 1; this._showOpponentHand = false; this.refresh(); } Window_BlackJackData.prototype.windowWidth = function () { return Graphics.boxWidth; }; Window_BlackJackData.prototype.windowHeight = function () { return Graphics.boxHeight; }; Window_BlackJackData.prototype.refresh = function() { this.contents.clear(); this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.fontSize = 20; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = 0; this.changeTextColor(this.textColor(6)); this.contents.fontFace = 'Times New Roman'; let dealerStreak = SceneManager._scene._opponentStreak > 0 ? LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").streak_string.format(SceneManager._scene._opponentStreak) : ""; let playerStreak = SceneManager._scene._playerStreak > 0 ? LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").streak_string.format(SceneManager._scene._playerStreak) : ""; this.drawText(LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").dealer_streak.format(dealerStreak), 48, 32, this.windowWidth()); this.drawText(LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").player_streak.format(playerStreak), 48, 196, this.windowWidth()); this.drawText(LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").score.format(this._opponentScore, this._playerScore), 0, 22, this.windowWidth() - 76, 'right'); this.drawText(LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").bet.format(SceneManager._scene._wagerAmount, this._currentPlayerBonus, this._currentEarnings), 0, 40, this.windowWidth() - 76, 'right'); var spacing = 96; if (this._playerHand != null) { for (var i = 0; i < this._playerHand.length; i++) { if (this._playerHand.length > 5) var spacing = 96 - ((this._playerHand.length - 5) * 14); this.getCardImage(this._playerHand[i].index, 64 + (spacing * i), 232); // this.drawText(this._playerHand[i].value(), 64 + (spacing * i), 340, 90, 'center'); } // this.drawText(SceneManager._scene.getCurrentHandValue('player'), 32, 232 + 48); } if (this._opponentHand != null) { if (this._opponentHand.length > 5) var spacing = 96 - ((this._opponentHand.length - 5) * 14); for (var i = 0; i < this._opponentHand.length; i++) { if (i === 0 && !this._showOpponentHand) { var bitmap = ImageManager.loadPicture('CardBack'); this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, 64 + (spacing * i), 68); } else { this.getCardImage(this._opponentHand[i].index, 64 + (spacing * i), 68); // this.drawText(this._opponentHand[i].value(), 64 + (spacing * i), 176, 90, 'center'); } } // this.drawText(SceneManager._scene.getCurrentHandValue('opponent'), 32, 68 + 48); } this.resetTextColor(); } Window_BlackJackData.prototype.getCardImage = function(index, x, y) { var bitmap = ImageManager.loadPicture('Cards'); var pw = bitmap.width / 13; var ph = bitmap.height / 4; var n = index; var sx = n % 13 * pw; var sy = (Math.floor(n / 13)) * ph; this.contents.blt(bitmap, sx, sy, pw, ph, x, y); } //============================================================================= // //============================================================================= function Window_MinigameTitle() { this.initialize.apply(this, arguments); } Window_MinigameTitle.prototype = Object.create(Window_Base.prototype); Window_MinigameTitle.prototype.constructor = Window_MinigameTitle; Window_MinigameTitle.prototype.initialize = function () { var x = (Graphics.boxWidth - this.windowWidth()) / 2; var y = (Graphics.boxHeight - this.windowHeight()) / 3; Window_Base.prototype.initialize.call(this, x, y, this.windowWidth(), this.windowHeight()); this.opacity = 0; }; Window_MinigameTitle.prototype.refresh = function(text) { this.contents.clear(); this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.fontSize = 20; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = 0; this.changeTextColor(this.textColor(6)); this.contents.fontFace = 'Times New Roman'; if (text && text.contains("
")) { var lines = text.split("
"); var y = 0; for (var i = 0; i < lines.length; i++) { this.drawText(lines[i].trim(), -18, y, this.windowWidth(), 'center'); y += 18; } } else { this.drawText(text, -18, 18, this.windowWidth(), 'center'); } } Window_MinigameTitle.prototype.windowWidth = function () { return (Graphics.boxWidth / 2) + 64; }; Window_MinigameTitle.prototype.windowHeight = function () { return this.fittingHeight(3); }; //============================================================================= // //============================================================================= function Window_BJTitleCommands() { this.initialize.apply(this, arguments); } Window_BJTitleCommands.prototype = Object.create(Window_HorzCommand.prototype); Window_BJTitleCommands.prototype.constructor = Window_BJTitleCommands; Window_BJTitleCommands.prototype.initialize = function () { var x = (Graphics.boxWidth - this.windowWidth()) / 2; var y = Graphics.boxHeight - 86; Window_HorzCommand.prototype.initialize.call(this, x, y); this.opacity = 0; this.refresh(); if ($gameVariables.value(827) > 0) { this.select(1); } }; Window_BJTitleCommands.prototype.standardPadding = function () { return 0; }; Window_BJTitleCommands.prototype.spacing = function () { return 12; }; Window_BJTitleCommands.prototype.maxCols = function () { return 3; }; Window_BJTitleCommands.prototype.windowWidth = function () { return 459; }; Window_BJTitleCommands.prototype.windowHeight = function () { return this.fittingHeight(1); }; Window_BJTitleCommands.prototype.itemTextAlign = function () { return 'center'; }; Window_BJTitleCommands.prototype.select = function (index) { this._index = index; this._stayCount = 0; this.ensureCursorVisible(); this.updateCursor(); this.callUpdateHelp(); this.refresh(); }; Window_BJTitleCommands.prototype.cursorRight = function (wrap) { var index = this.index(); var maxItems = this.maxItems(); var maxCols = this.maxCols(); if (maxCols >= 2 && (index < maxItems - 1 || (wrap && this.isHorizontal()))) { if (this._list[index + 1] && this.isCommandEnabled(index + 1)) this.select((index + 1) % maxItems); else if (!this._list[index + 1]) { this.select(0); } else this.select(2); } }; Window_BJTitleCommands.prototype.cursorLeft = function (wrap) { var index = this.index(); var maxItems = this.maxItems(); var maxCols = this.maxCols(); if (maxCols >= 2 && (index > 0 || (wrap && this.isHorizontal()))) { if (this._list[index - 1] && this.isCommandEnabled(index - 1)) this.select((index - 1 + maxItems) % maxItems); else if (!this._list[index - 1] && this.isCommandEnabled(maxItems - 1)) { this.select(maxItems - 1); } else this.select(0); } }; Window_BJTitleCommands.prototype.drawItem = function (index) { this.contents.fontBold = false; this.contents.fontItalic = false; this.contents.fontSize = 20; this.contents.outlineColor = 'rgba(0, 0, 0, 0.5)'; this.contents.outlineWidth = 0; this.changeTextColor(this.textColor(6)); this.contents.fontFace = 'Helvetica'; var rect = this.itemRectForText(index); if (this.currentSymbol() === this.commandSymbol(index)) { var bitmap = ImageManager.loadPicture('BJ-ButtonLong-Selected'); if (this.isCommandEnabled(index)) this.changeTextColor(this.textColor(0)); else this.changeTextColor(this.textColor(7)); } else { var bitmap = ImageManager.loadPicture('BJ-ButtonLong'); } if (!this.isCommandEnabled(index)) this.changeTextColor('#939393'); this.contents.blt(bitmap, 0, 0, bitmap.width, bitmap.height, rect.x - 22, rect.y); var align = this.itemTextAlign(); this.drawText(this.commandName(index), rect.x - 18, rect.y, rect.width, align); } Window_BJTitleCommands.prototype.makeCommandList = function () { const commands = LanguageManager.getMessageData("XX_BLUE.Yin_Blackjack").maincommands this.addCommand(commands[0].toUpperCase(), 'new'); this.addCommand(commands[1].toUpperCase(), 'continue', $gameVariables.value(827) >= 5); this.addCommand(commands[2].toUpperCase(), 'quit'); }