1146 lines
42 KiB
JavaScript
1146 lines
42 KiB
JavaScript
//=============================================================================
|
|
// TDS Omori BlackLetter Menu
|
|
// Version: 1.5
|
|
//=============================================================================
|
|
// Add to Imported List
|
|
var Imported = Imported || {} ; Imported.TDS_OmoriBlackLetterMenu = true;
|
|
// Initialize Alias Object
|
|
var _TDS_ = _TDS_ || {} ; _TDS_.OmoriBlackLetterMenu = _TDS_.OmoriBlackLetterMenu || {};
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc
|
|
* This plugin shows the Omori Black Letter menu.
|
|
*
|
|
* @author TDS
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
// ImageManager.loadSystem('Blackletters_menu');
|
|
|
|
|
|
//=============================================================================
|
|
// ** Game_Interpreter
|
|
//-----------------------------------------------------------------------------
|
|
// The interpreter for running event commands.
|
|
//=============================================================================
|
|
// * Call Black Letter menu
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.callBlackLetterMenu = function(forced = true) {
|
|
SceneManager.push(Scene_OmoBlackLetterMenu);
|
|
SceneManager.prepareNextScene(forced);
|
|
};
|
|
//=============================================================================
|
|
// * Add Black Letter
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.addBlackLetter = function() {
|
|
// Get Letters
|
|
var letters = Array.from(arguments).map(function(l) { return l.toUpperCase(); });
|
|
// Get Blackletter Items
|
|
var items = DataManager.getBlackletterItems();
|
|
// Find Letter Item
|
|
var findLetterItem = function(item, letter) { }
|
|
// Go Through Letters
|
|
for (var i = 0; i < letters.length; i++) {
|
|
// Get Letter
|
|
var letter = letters[i];
|
|
// Find Item
|
|
var item = items.find(function(i) { return i.meta.Blackletter.trim().toUpperCase() === letter; })
|
|
// If item exists
|
|
if (item) {
|
|
// If the party does not have the item already add it
|
|
if (!$gameParty.hasItem(item)) {
|
|
// Add Letter Item
|
|
$gameParty.gainItem(item, 1);
|
|
// Add Letter to Blackletters array
|
|
$gameParty._blackLetters.push(item.id);
|
|
};
|
|
}
|
|
};
|
|
// Go through Items
|
|
for (var i = 0; i < items.length; i++) {
|
|
// Get Item
|
|
var item = items[i];
|
|
// Get Letter
|
|
var letter = item.meta.Blackletter.trim();
|
|
// If Letters Contains Blackletter
|
|
if (letters.contains(letter)) {
|
|
// If the party does not have the item already add it
|
|
if (!$gameParty.hasItem(item)) {
|
|
// Add Letter Item
|
|
$gameParty.gainItem(item, 1);
|
|
// Add Letter to Blackletters array
|
|
$gameParty._blackLetters.push(item.id);
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
_TDS_.OmoriBlackLetterMenu.Scene_Map_needsFadeIn = Scene_Map.prototype.needsFadeIn;
|
|
Scene_Map.prototype.needsFadeIn = function() {
|
|
return (_TDS_.OmoriBlackLetterMenu.Scene_Map_needsFadeIn.call(this) || SceneManager.isPreviousScene(Scene_OmoBlackLetterMenu));
|
|
};
|
|
|
|
|
|
//=============================================================================
|
|
// ** Scene_OmoBlackLetterMenu
|
|
//-----------------------------------------------------------------------------
|
|
// Class for displaying the blackletter collection interface.
|
|
//=============================================================================
|
|
function Scene_OmoBlackLetterMenu() { this.initialize.apply(this, arguments); }
|
|
Scene_OmoBlackLetterMenu.prototype = Object.create(Scene_BaseEX.prototype);
|
|
Scene_OmoBlackLetterMenu.prototype.constructor = Scene_OmoBlackLetterMenu;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.initialize = function() {
|
|
// Set Image reservation Id
|
|
this._imageReservationId = 'hangman';
|
|
// Super Call
|
|
Scene_BaseEX.prototype.initialize.call(this);
|
|
// Set Crashing flag to false
|
|
this._crashing = false;
|
|
// Nose Flag (If True apply random seed to noise filter)
|
|
this._noise = false;
|
|
// Get Black Letter Collection State
|
|
this._collectionState = DataManager.blackLetterCollectionState();
|
|
// Inert Flag (Done doing stuff)
|
|
this._inert = $gameSwitches.value(45);
|
|
if(this._collectionState === 1 && !this._inert) {
|
|
var time = 32 / 60;
|
|
AudioManager.fadeOutBgm(time);
|
|
AudioManager.fadeOutBgs(time);
|
|
AudioManager.fadeOutMe(time);
|
|
}
|
|
};
|
|
//=============================================================================
|
|
// * Prepare
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.prepare = function(forced = false) {
|
|
// Set Forced flag
|
|
this._forced = forced
|
|
};
|
|
//=============================================================================
|
|
// * Initialize Atlas Lists
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.initAtlastLists = function() {
|
|
// Super Call
|
|
Scene_BaseEX.prototype.initAtlastLists.call(this);
|
|
};
|
|
//=============================================================================
|
|
// * Load Reserved Bitmaps
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.loadReservedBitmaps = function() {
|
|
// Super Call
|
|
Scene_BaseEX.prototype.loadReservedBitmaps.call(this);
|
|
// Reserve Hangman States Image
|
|
ImageManager.reserveSystem('Blackletters_menu', 0, this._imageReservationId);
|
|
ImageManager.reserveSystem('HangmanStates', 0, this._imageReservationId);
|
|
}
|
|
//=============================================================================
|
|
// * Start
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.start = function() {
|
|
// Super Call
|
|
Scene_BaseEX.prototype.start.call(this);
|
|
this.startFadeIn(this.slowFadeSpeed());
|
|
// Turn on Switch if all letters collected
|
|
if (this._collectionState === 0) {
|
|
// Turn on switch
|
|
$gameSwitches.setValue(15);
|
|
}
|
|
};
|
|
//=============================================================================
|
|
// * Create
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.create = function() {
|
|
// Super Call
|
|
Scene_BaseEX.prototype.create.call(this);
|
|
|
|
// Create Background
|
|
this.createBackground();
|
|
// Create Window Container
|
|
this._windowContainer = new Sprite();
|
|
this.addChild(this._windowContainer);
|
|
|
|
var items = DataManager.getBlackletterItems();
|
|
|
|
$gameParty._blackLetterIndex = 0;
|
|
$gameParty._blackLetters = [];
|
|
// Go through Items
|
|
for (var i = 0; i < items.length; i++) {
|
|
// Get Item
|
|
var item = items[i];
|
|
// If Party has item
|
|
if ($gameParty.hasItem(item)) {
|
|
// Add Blackletter to Blackletters array
|
|
$gameParty._blackLetters.push(item.id);
|
|
};
|
|
};
|
|
|
|
// Create Windows
|
|
this.createHangmanHeaderWindow();
|
|
this.createHangmanHeaderHelpWindow();
|
|
this.createBlackLetterListWindow();
|
|
this.createHangmanBodyWindow();
|
|
this.createHangmanWordWindow();
|
|
|
|
// this._tvFilter = new PIXI.filters.CRTFilter();
|
|
// // this._tvFilter.lineWidth = 1;
|
|
// // this._tvFilter.vignetting = 1;
|
|
// this._tvFilter.animated = true;
|
|
// this._tvFilter.noise = 0.2;
|
|
// this._tvFilter.noiseSize = 1;
|
|
// this._tvFilter.seed = 0;
|
|
// this._tvFilter.time = 0.5;
|
|
// // this._tvFilter.aniSpeed = 10;
|
|
|
|
this._glitchFilter = new PIXI.filters.GlitchFilter();
|
|
|
|
this._glitchFilter.fillMode = 2;
|
|
this._glitchFilter.slices = 0;
|
|
this._glitchFilter.red = new Point(0, 0)
|
|
|
|
this._glitchFilter.seed = 0;
|
|
|
|
this._noiseFilter = new PIXI.filters.NoiseFilter();
|
|
this._noiseFilter.animated = true;
|
|
this._noiseFilter.noise = 0
|
|
|
|
|
|
this._windowContainer._filters = [this._glitchFilter, this._noiseFilter]
|
|
|
|
this._hangmanSomething = new Sprite(ImageManager.loadPicture('hangman_something'));
|
|
// this._hangmanSomething.scale = 0.5;
|
|
this._hangmanSomething.scale.set(0.1, 0.1);
|
|
this._hangmanSomething.x = Graphics.width -200;
|
|
this._hangmanSomething.y = 150;
|
|
this._hangmanSomething.opacity = 0;
|
|
this._hangmanSomething.filters = [this._glitchFilter]
|
|
this._windowContainer.addChild(this._hangmanSomething);
|
|
|
|
|
|
// this._horrorTest = new Sprite(new Bitmap(Graphics.width, Graphics.height));
|
|
// this.addChild(this._horrorTest)
|
|
};
|
|
//=============================================================================
|
|
// * Create Background
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createBackground = function() {
|
|
this._backgroundSprite = new Sprite();
|
|
this._backgroundSprite.bitmap = SceneManager.backgroundBitmap();
|
|
this.addChild(this._backgroundSprite);
|
|
};
|
|
//=============================================================================
|
|
// * Create Hangman Header Window
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createHangmanHeaderWindow = function() {
|
|
// Create Hangman Header Window
|
|
this._hangmanHeaderwindow = new Window_Base(0, 0, 0, 0);
|
|
this._hangmanHeaderwindow.standardPadding = function() { return 4; };
|
|
this._hangmanHeaderwindow.initialize(0, 0, 386, 45)
|
|
this._hangmanHeaderwindow.fontSize = 38;
|
|
// this._hangmanHeaderwindow.drawText('HANGMAN', 5, -7, 200, 40);
|
|
|
|
this._hangmanHeaderwindow.drawBlackLetterText(LanguageManager.getMessageData("XX_BLUE.Omori_Blackletter_Menu").hangman, 5, 2, 26);
|
|
this._windowContainer.addChild(this._hangmanHeaderwindow);
|
|
};
|
|
//=============================================================================
|
|
// * Create Hangman Header Help Window
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createHangmanHeaderHelpWindow = function() {
|
|
// Get Header Window
|
|
var header = this._hangmanHeaderwindow;
|
|
// Create Hangman Header Window
|
|
this._hangmanHeaderHelpwindow = new Window_Base(0, 0, 0, 0);
|
|
this._hangmanHeaderHelpwindow.standardPadding = function() { return 4; };
|
|
this._hangmanHeaderHelpwindow.initialize(0, header.height, header.width, 60)
|
|
this._hangmanHeaderHelpwindow.contents.fontSize = 22;
|
|
this._hangmanHeaderHelpwindow.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Blackletter_Menu").collect_desc, 5, -7, 400, 40);
|
|
this._hangmanHeaderHelpwindow.drawText(LanguageManager.getMessageData("XX_BLUE.Omori_Blackletter_Menu").incorrect_desc, 5, 15, 400, 40);
|
|
this._windowContainer.addChild(this._hangmanHeaderHelpwindow);
|
|
};
|
|
//=============================================================================
|
|
// * Create BlackLetter List window
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createBlackLetterListWindow = function() {
|
|
// Create Black Letter List Window
|
|
this._blackLetterListWindow = new Window_OmoBlackLetterList(this.hangmanWord());
|
|
// Select the first letter if not forced
|
|
if (!this._forced) { this._blackLetterListWindow.select(0); };
|
|
this._windowContainer.addChild(this._blackLetterListWindow);
|
|
};
|
|
//=============================================================================
|
|
// * Create Hangman Body Window
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createHangmanBodyWindow = function() {
|
|
// Create Hangman Body Window
|
|
this._hangmanBodyWindow = new Window_OmoHangmanBody(this.hangmanWord());
|
|
this._windowContainer.addChild(this._hangmanBodyWindow);
|
|
};
|
|
//=============================================================================
|
|
// * Create Hangman Word Window
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.createHangmanWordWindow = function() {
|
|
// Create Hangman Word Window
|
|
this._hangmanWordWindow = new Window_OmoBlackLetterWord(this.hangmanWord(), this._forced);
|
|
this._windowContainer.addChild(this._hangmanWordWindow);
|
|
};
|
|
//=============================================================================
|
|
// * Get Hangman Word
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.hangmanWord = function() {
|
|
return DataManager.hangmanWord();
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.update = function() {
|
|
// Super Call
|
|
Scene_BaseEX.prototype.update.call(this);
|
|
|
|
// If Noise Flag
|
|
if (this._noise) {
|
|
// Set Noise Filter Seed
|
|
this._noiseFilter.seed = Math.random();
|
|
};
|
|
|
|
// If Not Crashing
|
|
if (!this._crashing) {
|
|
// If Failed
|
|
if (!this._inert && this._collectionState === 1) {
|
|
// If Hangman Body Window is not busy animating
|
|
if (!this._hangmanBodyWindow.isBusyAnimating()) {
|
|
// Start Crash
|
|
this.startCrash();
|
|
};
|
|
return;
|
|
};
|
|
|
|
// If Input trigger cancel
|
|
if (Input.isTriggered('cancel')) {
|
|
// If Hangman Body Window is not busy animating
|
|
//(!this.isBusy() && !this._hangmanBodyWindow.isBusyAnimating() && this._hangmanWordWindow._introPhase === -1)
|
|
if (!this.isBusy()) {
|
|
// Go to previous scene
|
|
// SoundManager.playCancel();
|
|
SceneManager.pop();
|
|
Input.clear();
|
|
TouchInput.clear();
|
|
};
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Start Crash
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.startCrash = function() {
|
|
// Set Crashing Flag to true;
|
|
this._crashing = true;
|
|
// Turn on Switch
|
|
$gameSwitches.setValue(45, true)
|
|
// Save Game
|
|
DataManager.saveGame(44);
|
|
|
|
// return
|
|
// Set Crashing Flag to true;
|
|
this._crashing = true;
|
|
// Reset Crash Count
|
|
this._crashCount = 0;
|
|
|
|
// Set Noise Filter Seed
|
|
this._noiseFilter.seed = Math.random();
|
|
|
|
this._crashPresses = 1//3 + Math.randomInt(3);
|
|
|
|
this._heartBeatVolume = 1;
|
|
|
|
AudioManager.playBgs({name: 'SEheartbeat', volume: 50, pitch: 100})
|
|
this._noise = true;
|
|
|
|
// TEST
|
|
// this._hangmanSomething.opacity = 255;
|
|
|
|
// this._noiseFilter.noise = 0.8
|
|
|
|
// this.queueGlitch(15, 0);
|
|
// this.queueGlitch(15, 10);
|
|
// this.queue('performGlitch', 1);
|
|
// this.queue('wait', 5);
|
|
// this.queue('performGlitch', 0);
|
|
|
|
// Introduction Phase
|
|
this.queue('startFunctionWait', function() {
|
|
// Increase Crash Count
|
|
this._crashCount++
|
|
// Increase Hangman Something Opacity
|
|
this._hangmanSomething.opacity += 50;
|
|
// If crash count has reached the end
|
|
if (this._crashCount >= 24) {
|
|
// SceneManager.startWindowShake(30);
|
|
// Reset Crash Count
|
|
this._crashCount = 0;
|
|
return false;
|
|
};
|
|
return true;
|
|
});
|
|
|
|
this.queueGlitch(2, 0);
|
|
this.queueGlitch(2, 0);
|
|
this.queueGlitch(2, 0);
|
|
this.queueGlitch(2, 0);
|
|
|
|
this.queue(function() {
|
|
// Close Game
|
|
SceneManager.terminate()
|
|
}.bind(this));
|
|
|
|
this.queue(function() {
|
|
// alert('tits')
|
|
this._hangmanSomething.x = 100
|
|
this._hangmanSomething.y = 0;
|
|
this._hangmanSomething.scale.set(1, 1);
|
|
this.addChild(this._hangmanSomething);
|
|
AudioManager.playSe({name: 'mini_sme_move', volume: 100, pitch: 100})
|
|
SceneManager.startWindowShake(30);
|
|
|
|
}.bind(this))
|
|
|
|
this.queueGlitch(2, 3);
|
|
this.queueGlitch(2, 3);
|
|
this.queueGlitch(2, 3);
|
|
|
|
this.queue('wait', 2);
|
|
|
|
this.queue(function() {
|
|
this._hangmanSomething.opacity = 0;
|
|
this._crashing = false;
|
|
}.bind(this))
|
|
|
|
};
|
|
//=============================================================================
|
|
// * Perform Glitch
|
|
//=============================================================================
|
|
Scene_OmoBlackLetterMenu.prototype.queueGlitch = function(duration = 15, wait = 0) {
|
|
// Perform glitch
|
|
this.queue(function() {
|
|
// Set Glitch Values
|
|
AudioManager.playSe({name: 'mini_sme_move', volume: 100, pitch: 100})
|
|
|
|
this._glitchFilter.seed = Math.random();
|
|
this._glitchFilter.slices = 15 + Math.randomInt(10);
|
|
this._glitchFilter.direction = Math.randomInt(10) * Math.sin(Graphics.frameCount);
|
|
}.bind(this))
|
|
this.queue('wait', duration);
|
|
// Reset Filter
|
|
this.queue(function() {
|
|
// Reset
|
|
this._glitchFilter.slices = 0
|
|
this._glitchFilter.direction = 0
|
|
}.bind(this))
|
|
// If Wait duration is more than 0
|
|
if (wait > 0) { this.queue('wait', wait); }
|
|
};
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Window_OmoBlackLetterList
|
|
//-----------------------------------------------------------------------------
|
|
// The window for showing blackletters in the blackletter menu.
|
|
//=============================================================================
|
|
function Window_OmoBlackLetterList() { this.initialize.apply(this, arguments); }
|
|
Window_OmoBlackLetterList.prototype = Object.create(Window_Command.prototype);
|
|
Window_OmoBlackLetterList.prototype.constructor = Window_OmoBlackLetterList;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.initialize = function(word = "") {
|
|
// Set Hangman Word
|
|
this._hangmanWord = word
|
|
// Super Call
|
|
Window_Command.prototype.initialize.call(this, 0, 105);
|
|
// Select Letter
|
|
this.selectLetter($gameParty.lastBlackLetter());
|
|
};
|
|
//=============================================================================
|
|
// * Settings
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.isUsingCustomCursorRectSprite = function() { return true; };
|
|
Window_OmoBlackLetterList.prototype.standardPadding = function() { return 10; }
|
|
Window_OmoBlackLetterList.prototype.windowWidth = function () { return 386; };
|
|
Window_OmoBlackLetterList.prototype.windowHeight = function() { return 360 - 55; };
|
|
Window_OmoBlackLetterList.prototype.maxCols = function() { return 1;};
|
|
Window_OmoBlackLetterList.prototype.itemHeight = function() { return 34 + 1; };
|
|
Window_OmoBlackLetterList.prototype.spacing = function() { return 5; };
|
|
Window_OmoBlackLetterList.prototype.customCursorRectXOffset = function() { return 8; }
|
|
Window_OmoBlackLetterList.prototype.customCursorRectYOffset = function() { return 0; }
|
|
Window_OmoBlackLetterList.prototype.playOkSound = function() { };
|
|
//=============================================================================
|
|
// * Refresh Arrows
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype._refreshArrows = function() {
|
|
// Run Original Function
|
|
Window_Command.prototype._refreshArrows.call(this);
|
|
var w = this._width;
|
|
var h = this._height;
|
|
var p = 28;
|
|
var q = p/2;
|
|
this._downArrowSprite.move(w - q, h - q);
|
|
this._upArrowSprite.move(w - q, q);
|
|
};
|
|
//=============================================================================
|
|
// * Select Letter
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.selectLetter = function(letter) {
|
|
// Convert Letter to Uppercase
|
|
letter = letter.toUpperCase();
|
|
// Go through list
|
|
for (var i = 0; i < this._list.length; i++) {
|
|
// Get Command
|
|
var command = this._list[i];
|
|
// If Command letter matches letter
|
|
if (command.ext.letter === letter) {
|
|
// Select command at index
|
|
this.select(i);
|
|
break
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Make Command List
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.makeCommandList = function() {
|
|
// Get Blackletter Items
|
|
var items = DataManager.getBlackletterItems();
|
|
// Go through Items
|
|
for (var i = 0; i < items.length; i++) {
|
|
// Get Item
|
|
var item = items[i];
|
|
// Get Data
|
|
var data = {letter: item.meta.Blackletter.trim(), clue: item.meta.BlackLetterClue.trim(), itemId: item.id };
|
|
// Add Command
|
|
this.addCommand(item.name, 'ok', true, data)
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Draw Item
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.drawItem = function(index) {
|
|
// Get Item Rect
|
|
var rect = this.itemRect(index);
|
|
// Get Data
|
|
var data = this._list[index].ext;
|
|
// Draw Clue
|
|
this.contents.fontSize = 24;
|
|
this.changeTextColor(this.textColor(0))
|
|
this.drawText(data.clue, 75, rect.y - 5, rect.width - 135, rect.height);
|
|
// Adjust Rect
|
|
rect.x = rect.width - (rect.height + 10)
|
|
rect.height -= 6
|
|
rect.width = rect.height;
|
|
// Draw Blackletter Text
|
|
this.drawBlackLetterText(data.letter, 35, rect.y);
|
|
// Move rect Y
|
|
rect.y += 3;
|
|
// Fill Check mark box
|
|
this.contents.fillRect(rect.x, rect.y, rect.width, rect.height, 'rgba(255, 255, 255, 1)');
|
|
this.contents.clearRect(rect.x + 3, rect.y + 3, rect.width - 6, rect.height - 6);
|
|
// Change Font Size
|
|
this.contents.fontSize = 20;
|
|
// Get State (Right, Wrong, Empty)
|
|
var state = 2;
|
|
// If Item is obtained
|
|
if ($gameParty.hasItem($dataItems[data.itemId])) {
|
|
// Set State
|
|
state = this._hangmanWord.contains(data.letter) ? 0 : 1;
|
|
};
|
|
// Get Symbol
|
|
var symbol = ['✓', '✕', ''][state];
|
|
// Get Color
|
|
var color = [3, 2, 0][state];
|
|
|
|
var symbolsImage = ImageManager.loadSystem('HangmanStates');
|
|
this.contents.blt(symbolsImage, 20 * state, 0, 20, 20, rect.x + 5, rect.y + 4, 20, 20);
|
|
};
|
|
//=============================================================================
|
|
// * Draw Option Segment
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.drawOptionSegment = function(header, options, spacing, rect) {
|
|
// Draw Header
|
|
this.contents.drawText(header, rect.x + 50, rect.y, rect.width, 24);
|
|
// Go Through Options
|
|
for (var i = 0; i < options.length; i++) {
|
|
// Draw Options
|
|
this.contents.drawText(options[i], rect.x + (100 + (i * spacing)), rect.y + 35, rect.width, 24)
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Window_OmoBlackLetterList.prototype.update = function(index) {
|
|
// Run Original Function
|
|
Window_Command.prototype.update.call(this);
|
|
};
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Window_OmoBlackLetterWord
|
|
//-----------------------------------------------------------------------------
|
|
// The window for show blackletters in the blackletter menu.
|
|
//=============================================================================
|
|
function Window_OmoBlackLetterWord() { this.initialize.apply(this, arguments); }
|
|
Window_OmoBlackLetterWord.prototype = Object.create(Window_Base.prototype);
|
|
Window_OmoBlackLetterWord.prototype.constructor = Window_OmoBlackLetterWord;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.initialize = function(word = "", forced = false) {
|
|
// Set Hangman Word
|
|
this._hangmanWord = word;
|
|
// Set Forced state
|
|
this._forced = forced;
|
|
Window_Base.prototype.initialize.call(this, 0, Graphics.height -70, Graphics.width, 70);
|
|
// Get Letter Collection State
|
|
this._letterCollectionState = DataManager.blackLetterCollectionState();
|
|
// Spin Index
|
|
this._spinIndex = 0;
|
|
// Set Intro Phase
|
|
this._introPhase = -1;
|
|
// Get Last Letter
|
|
this._lastLetter = $gameParty.lastBlackLetter();
|
|
// Create Letter Sprites
|
|
this.createLetterSprites();
|
|
};
|
|
//=============================================================================
|
|
// * Create Letter Sprites
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.createLetterSprites = function() {
|
|
// Get Split Word
|
|
var word = this._hangmanWord.split('');
|
|
// Get bitmap
|
|
var bitmap = ImageManager.loadSystem('Blackletters_menu');
|
|
// Create Low Bitmap
|
|
var lowBitmap = new Bitmap(32, 32);
|
|
lowBitmap.fillRect(1, 30, 27, 2, 'rgba(255, 255, 255, 1)');
|
|
// Initialize Blackletters Array
|
|
var blackletters = [];
|
|
// Get Blackletter Items
|
|
var items = DataManager.getBlackletterItems();
|
|
|
|
// Go through Items
|
|
for (var i = 0; i < items.length; i++) {
|
|
// Get Item
|
|
var item = items[i];
|
|
// If Party has item
|
|
if ($gameParty.hasItem(item)) {
|
|
// Add Blackletter to Blackletters array
|
|
blackletters.push(item.meta.Blackletter.trim());
|
|
};
|
|
};
|
|
|
|
// Initialize Letter Sprites
|
|
this._letterSprites = [];
|
|
// Set Starting X
|
|
var sx = 29;
|
|
// Go Through Word
|
|
for (var i = 0; i < word.length; i++) {
|
|
// Get Letter
|
|
var letter = word[i].toUpperCase();
|
|
// If Letter is not space
|
|
if (letter !== " ") {
|
|
// Create Sprite
|
|
var sprite = new Sprite_OmoBlackletter(blackletters.contains(letter) ? letter : "");
|
|
sprite.x = sx;
|
|
sprite.y = 34;
|
|
// If Forced and Letter matches the last letter
|
|
if (this._forced && letter === this._lastLetter) {
|
|
sprite.opacity = 0;
|
|
this._introPhase = 0;
|
|
};
|
|
// Add Letter Sprite to Array
|
|
this._letterSprites.push(sprite)
|
|
// Add Child
|
|
this.addChild(sprite);
|
|
sx += 29;
|
|
} else {
|
|
sx += 20;
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Settings
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.standardPadding = function() { return 4; }
|
|
//=============================================================================
|
|
// * Refresh
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.refresh = function() {
|
|
// Clear Contents
|
|
this.contents.clear();
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.update = function() {
|
|
// Super Call
|
|
Window_Base.prototype.update.call(this);
|
|
// Update Letter animation
|
|
this.updateLetterAnimation();
|
|
};
|
|
//=============================================================================
|
|
// * Update Letter Animation
|
|
//=============================================================================
|
|
Window_OmoBlackLetterWord.prototype.updateLetterAnimation = function() {
|
|
// If Intro Phase is equal or more than 0
|
|
if (this._introPhase >= 0) {
|
|
// Intro Phase switch case
|
|
switch (this._introPhase) {
|
|
case 0:
|
|
// Set Finished Flag
|
|
var finished = true;
|
|
// Go Through Letter Sprites
|
|
for (var i = 0; i < this._letterSprites.length; i++) {
|
|
// Get Letter Sprite
|
|
var sprite = this._letterSprites[i];
|
|
// If Sprite Opacity is less than 255
|
|
if (sprite.opacity < 255) {
|
|
// Increase Opacity
|
|
sprite.opacity += 5;
|
|
// Set Finished to false
|
|
finished = false;
|
|
};
|
|
};
|
|
|
|
// If Finished
|
|
if (finished) {
|
|
// Go Through Letter Sprites
|
|
for (var i = 0; i < this._letterSprites.length; i++) {
|
|
// Get Letter Sprite
|
|
var sprite = this._letterSprites[i];
|
|
if (sprite._letter === this._lastLetter) { sprite.setupFlip(); };
|
|
};
|
|
// Set Intro Phase
|
|
this._introPhase = 1;
|
|
};
|
|
break;
|
|
case 1:
|
|
// Set Finished Flag
|
|
var finished = true;
|
|
// Go Through Letter Sprites
|
|
for (var i = 0; i < this._letterSprites.length; i++) {
|
|
// If Flip duration is more than 0
|
|
if (this._letterSprites[i]._flipDuration > 0) {
|
|
// Set Finished to false
|
|
finished = false;
|
|
};
|
|
};
|
|
// If Finished
|
|
if (finished) {
|
|
// Go Through Letter Sprites
|
|
for (var i = 0; i < this._letterSprites.length; i++) {
|
|
// Get Letter Sprite
|
|
var sprite = this._letterSprites[i];
|
|
// If Not an empty spot
|
|
if (sprite._letter !== "") { sprite.setupFlip(); };
|
|
};
|
|
// Set Intro Phase (Clear)
|
|
this._introPhase = -1;
|
|
};
|
|
break;
|
|
};
|
|
return
|
|
};
|
|
|
|
|
|
// Return if not complete
|
|
if (this._letterCollectionState !== 0) { return; }
|
|
// If Spin index is more than 0
|
|
if (this._spinIndex > 0) {
|
|
// Get Sprite
|
|
var sprite = this._letterSprites[this._spinIndex];
|
|
// Get Last Sprite
|
|
var lastSprite = this._letterSprites[this._spinIndex-1];
|
|
// If Spin index is more or equal than amount of letters
|
|
if (this._spinIndex >= this._letterSprites.length) {
|
|
// Setup Flip
|
|
sprite.setupFlip()
|
|
// Increase Spin Index
|
|
this._spinIndex = (this._spinIndex + 1) % this._letterSprites.length;
|
|
} else {
|
|
if (lastSprite && lastSprite._flipDirection === -1 && lastSprite._flipDuration <= 3) {
|
|
// Setup Flip
|
|
sprite.setupFlip()
|
|
// Increase Spin Index
|
|
this._spinIndex = (this._spinIndex + 1) % this._letterSprites.length;
|
|
};
|
|
};
|
|
} else {
|
|
// Get Last Sprite
|
|
var lastSprite = this._letterSprites[this._letterSprites.length-1];
|
|
if (lastSprite._flipDirection === 0) {
|
|
// Get Sprite
|
|
var sprite = this._letterSprites[this._spinIndex];
|
|
// Setup Flip
|
|
sprite.setupFlip();
|
|
// Increase Spin Index
|
|
this._spinIndex = (this._spinIndex + 1) % this._letterSprites.length;
|
|
};
|
|
}
|
|
};
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Window_OmoHangmanBody
|
|
//-----------------------------------------------------------------------------
|
|
// The window for showing the hangman body in the hangman menu.
|
|
//=============================================================================
|
|
function Window_OmoHangmanBody() { this.initialize.apply(this, arguments); }
|
|
Window_OmoHangmanBody.prototype = Object.create(Window_Base.prototype);
|
|
Window_OmoHangmanBody.prototype.constructor = Window_OmoHangmanBody;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.initialize = function(word = "") {
|
|
// Set Hangman Word
|
|
this._hangmanWord = word;
|
|
// Animation Delay
|
|
this._animationDelay = 30;
|
|
// Inert Flag
|
|
this._inert = $gameSwitches.value(45);
|
|
// Get Width
|
|
var width = 254;
|
|
// Super Call
|
|
Window_Base.prototype.initialize.call(this, Graphics.width - width, 0, width, 410);
|
|
// Animation Settings
|
|
this._anim = {part: null, duration: 10}
|
|
// Create Background Sprite
|
|
this.createBackgroundSprite();
|
|
// Create Body Sprites
|
|
this.createBodySprites();
|
|
// Create Letter Sprites
|
|
this.createLetterSprites();
|
|
};
|
|
//=============================================================================
|
|
// * Settings
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.standardPadding = function() { return 4; }
|
|
//=============================================================================
|
|
// * Get Sheet Bitmap
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.sheetBitmap = function() { return ImageManager.loadPicture('HANGMAN_Sheet'); };
|
|
//=============================================================================
|
|
// * Determine if busy animating
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.isBusyAnimating = function() {
|
|
if ($gameParty._blackLetterIndex < this._letterSprites.length) { return true; }
|
|
if (this._anim.part !== null) { return true; }
|
|
return false;
|
|
};
|
|
//=============================================================================
|
|
// * Create Background Sprite
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.createBackgroundSprite = function() {
|
|
// Create Background Sprite
|
|
this._backgroundSprite = new Sprite(this.sheetBitmap());
|
|
this._backgroundSprite.x = 3;
|
|
this._backgroundSprite.y = 3;
|
|
this._backgroundSprite.setFrame(2, 1, 247, 403);
|
|
this.addChildToBack(this._backgroundSprite);
|
|
};
|
|
//=============================================================================
|
|
// * Create Letter Sprites
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.createLetterSprites = function() {
|
|
// Get Split Word
|
|
var word = this._hangmanWord.split('');
|
|
// Get bitmap
|
|
var bitmap = ImageManager.loadSystem('Blackletters_menu');
|
|
// Get Blackletters
|
|
var blackLetters = $gameParty._blackLetters.map(function(id) { return $dataItems[id].meta.Blackletter.trim().toUpperCase(); });
|
|
// Initialize Letter Sprites
|
|
this._letterSprites = [];
|
|
// Return if inert
|
|
if (this._inert) { return; }
|
|
// Get index
|
|
var index = 0;
|
|
// Go Through Word
|
|
for (var i = 0; i < blackLetters.length; i++) {
|
|
// Get Letter
|
|
var letter = blackLetters[i];
|
|
// If Letter is not space
|
|
if (letter !== " " && !word.contains(letter)) {
|
|
// Create Sprite
|
|
var sprite = new Sprite_OmoBlackletter(letter);
|
|
sprite.x = 24 + ((index % 7) * 34);
|
|
sprite.y = 24 + (Math.floor(index / 7) * 34);
|
|
sprite.opacity = index < $gameParty._blackLetterIndex ? 255 : 0;
|
|
// Add Letter Sprite to Array
|
|
this._letterSprites.push(sprite)
|
|
// Add Child
|
|
this.addChild(sprite);
|
|
// Increase index
|
|
index++
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Create Body Sprites
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.createBodySprites = function() {
|
|
// Create Body Sprite Container
|
|
this._bodySpriteContainer = new Sprite();
|
|
this._bodySpriteContainer.y = 25
|
|
this.addChild(this._bodySpriteContainer);
|
|
|
|
// Return if inert
|
|
if (this._inert) {
|
|
this._smudgeSprite = new Sprite(this.sheetBitmap())
|
|
|
|
this._backgroundSprite.setFrame(253, 4, 247, 403);
|
|
this._bodySpriteContainer.addChild(this._backgroundSprite)
|
|
return;
|
|
}
|
|
|
|
var source = [
|
|
{name: "rope", x: 71, y: 76, rect: new Rectangle(253, 447, 21, 63)},
|
|
{name: "base1", x: 84, y: 75, rect: new Rectangle(277, 447, 82, 21)},
|
|
{name: "base2", x: 158, y: 88, rect: new Rectangle(253, 513, 21, 246)},
|
|
{name: "base3", x: 88, y: 324, rect: new Rectangle(277, 471, 126, 15)},
|
|
|
|
{name: "head", x: 46, y: 131, rect: new Rectangle(277, 489, 64, 63)},
|
|
{name: "body", x: 68, y: 180, rect: new Rectangle(344, 489, 38, 52)},
|
|
|
|
{name: "rightArm", x: 77, y: 192, rect: new Rectangle(385, 489, 7, 28)},
|
|
{name: "leftArm", x: 87, y: 190, rect: new Rectangle(395, 489, 7, 32)},
|
|
|
|
{name: "rightLeg", x: 75, y: 228, rect: new Rectangle(344, 544, 12, 35)},
|
|
{name: "leftLeg", x: 93, y: 228, rect: new Rectangle(359, 544, 10, 32)},
|
|
|
|
{name: "rightEye", x: 62, y: 165, rect: new Rectangle(277, 555, 12, 7)},
|
|
{name: "leftEye", x: 81, y: 161, rect: new Rectangle(292, 555, 16, 7)},
|
|
|
|
{name: "mouth", x: 74, y: 172, rect: new Rectangle(277, 565, 11, 7)},
|
|
{name: "hair", x: 47, y: 134, rect: new Rectangle(277, 582, 65, 104)},
|
|
];
|
|
|
|
// Body Sprites Object
|
|
this._bodySprites = {};
|
|
// Get Sheet Bitmap
|
|
var bitmap = this.sheetBitmap();
|
|
// Go Through Sources
|
|
for (var i = 0; i < source.length; i++) {
|
|
// Get Data From Source
|
|
var data = source[i];
|
|
// Create Sprite
|
|
var sprite = new Sprite(bitmap);
|
|
// If Index is less than blackletter index
|
|
if (i < $gameParty._blackLetterIndex) {
|
|
// Set Sprite Frame
|
|
sprite.setFrame(data.rect.x, data.rect.y, data.rect.width, data.rect.height);
|
|
} else {
|
|
// Set Sprite Frame
|
|
sprite.setFrame(data.rect.x, data.rect.y, 0, 0);
|
|
};
|
|
// Set Sprite Position
|
|
sprite.y = data.y; sprite.x = data.x;
|
|
// Set Source Rect
|
|
sprite._srcRect = data.rect;
|
|
// Set Index
|
|
sprite._letterIndex = i;
|
|
// Set Data
|
|
this._bodySprites[data.name] = sprite;
|
|
// Add Sprite to Body Sprite container
|
|
this._bodySpriteContainer.addChild(sprite);
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Refresh
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.refresh = function() {
|
|
// Clear Contents
|
|
this.contents.clear();
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.update = function() {
|
|
// Super Call
|
|
Window_Base.prototype.update.call(this);
|
|
// Update Blackletter index
|
|
this.updateBlackLetterIndex();
|
|
// Update Body Animations
|
|
this.updateBodyAnimations();
|
|
};
|
|
//=============================================================================
|
|
// * Update Blackletter Index
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.updateBlackLetterIndex = function() {
|
|
// If Animation Delay is more than 0
|
|
if (this._anim.part === null && this._animationDelay > 0) {
|
|
// Decrease Animation Delay
|
|
this._animationDelay--;
|
|
return;
|
|
};
|
|
// Get Index
|
|
var index = $gameParty._blackLetterIndex;
|
|
// If Index is less than letter sprites length
|
|
if (index < this._letterSprites.length) {
|
|
// Get Animation
|
|
var anim = this._anim;
|
|
// If Animation part is null
|
|
if (anim.part === null) {
|
|
// Get Part
|
|
var part = Object.keys(this._bodySprites)[index];
|
|
// Setup Animation
|
|
let dur = part === "mouth" ? 2 : 20
|
|
this._anim = {part: part, duration: dur}
|
|
// Increase Blackletter index
|
|
$gameParty._blackLetterIndex++;
|
|
// Set Animation Delay
|
|
this._animationDelay = 30;
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Update Body Animations
|
|
//=============================================================================
|
|
Window_OmoHangmanBody.prototype.updateBodyAnimations = function() {
|
|
// Get Animation
|
|
var anim = this._anim;
|
|
// If Animation Part Exists
|
|
if (anim.part) {
|
|
// Get Sprite
|
|
var sprite = this._bodySprites[anim.part];
|
|
// Get Letter Sprite
|
|
var letterSprite = this._letterSprites[sprite._letterIndex];
|
|
// Get Duration
|
|
var d = anim.duration;
|
|
// Animation Part switch case
|
|
switch (anim.part) {
|
|
case 'rope':
|
|
case 'base2':
|
|
case 'rightArm':
|
|
case 'leftArm':
|
|
case 'rightLeg':
|
|
case 'leftLeg':
|
|
case 'head':
|
|
case 'body':
|
|
case 'hair':
|
|
sprite.height = (sprite.height * (d - 1) + sprite._srcRect.height) / d;
|
|
sprite.width = sprite._srcRect.width;
|
|
break;
|
|
case 'base1':
|
|
case 'base3':
|
|
case 'rightEye':
|
|
case 'leftEye':
|
|
case 'mouth':
|
|
sprite.height = sprite._srcRect.height;
|
|
sprite.width = (sprite.width * (d - 1) + sprite._srcRect.width) / d;
|
|
break;
|
|
};
|
|
// If letter sprite exists
|
|
if (letterSprite) {
|
|
// Set Letter Sprite Opacity
|
|
letterSprite.opacity = (letterSprite.opacity * (d - 1) + 255) / d;
|
|
};
|
|
if(anim.duration >= 20) {
|
|
AudioManager.playSe({name: "SE_chalk", volume: 60, pitch:Math.randomInt(80) + 70, pan: 30})
|
|
}
|
|
// Decrease Duration
|
|
anim.duration--;
|
|
// Set Animation part to null if finished
|
|
if (anim.duration <= 0) { anim.part = null; anim.duration = 1; };
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** Sprite_OmoBlackletter
|
|
//-----------------------------------------------------------------------------
|
|
// This sprite is for showing blackletters in the hangman menu.
|
|
//=============================================================================
|
|
function Sprite_OmoBlackletter() { this.initialize.apply(this, arguments); }
|
|
Sprite_OmoBlackletter.prototype = Object.create(Sprite.prototype);
|
|
Sprite_OmoBlackletter.prototype.constructor = Sprite_OmoBlackletter;
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
Sprite_OmoBlackletter.prototype.initialize = function(letter = "") {
|
|
// Super Call
|
|
Sprite.prototype.initialize.call(this);
|
|
// Set Centered anchor
|
|
this.anchor.set(0.5, 0.5);
|
|
// Set Letter
|
|
this._letter = letter;
|
|
// Setup Bitmap
|
|
this.setupBitmap();
|
|
// Set Default Flip Direction
|
|
this._flipDirection = 0;
|
|
};
|
|
//=============================================================================
|
|
// * Setup Bitmap
|
|
//=============================================================================
|
|
Sprite_OmoBlackletter.prototype.setupBitmap = function() {
|
|
// If Letter is empty
|
|
if (this._letter === "") {
|
|
// Set Bitmap
|
|
this.bitmap = new Bitmap(32, 32);
|
|
this.bitmap.fillRect(1, 30, 27, 2, 'rgba(255, 255, 255, 1)');
|
|
} else {
|
|
// Set Bitmap
|
|
this.bitmap = ImageManager.loadSystem('Blackletters_menu');
|
|
// Get Index
|
|
var index = this._letter.charCodeAt(0) - 65;
|
|
var bx = (index % 5) * 32
|
|
var by = Math.floor(index / 5) * 32
|
|
this.setFrame(bx, by, 32, 32);
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Setup Flip
|
|
//=============================================================================
|
|
Sprite_OmoBlackletter.prototype.setupFlip = function(duration = 15, times = 1) {
|
|
this._flipDirection = -1;
|
|
this._flipDuration = duration;
|
|
this._flipTimes = times;
|
|
this._baseFlipDuration = duration
|
|
};
|
|
//=============================================================================
|
|
// * Frame Update
|
|
//=============================================================================
|
|
Sprite_OmoBlackletter.prototype.update = function() {
|
|
// Super Call
|
|
Sprite.prototype.update.call(this);
|
|
// If Flip Direction is not 0
|
|
if (this._flipDirection !== 0) {
|
|
var d = this._flipDuration
|
|
// If Duration is more than 0
|
|
if (d > 0) {
|
|
// Set Scale
|
|
this.scale.x = (this.scale.x * (d - 1) + this._flipDirection) / d;
|
|
// Decrease Flip Duration
|
|
this._flipDuration--
|
|
// IF Flip Duration is 0 or less and flip times is more than 0
|
|
if (this._flipDuration <= 0) {
|
|
if (this._flipTimes > 0) {
|
|
// Swap Flip Direction
|
|
this._flipDirection = this._flipDirection === -1 ? 1 : -1;
|
|
this._flipDuration = this._baseFlipDuration;
|
|
// Decrease Flip Times
|
|
this._flipTimes--;
|
|
} else {
|
|
// Set Flip Direction to none
|
|
this._flipDirection = 0;
|
|
}
|
|
};
|
|
};
|
|
}
|
|
};
|