OMORI_Android/www.br/js/plugins/Omori BlackLetterMenu.js
2024-05-26 04:07:13 +03:00

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('JOGO DA FORCA', 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('Colete as TECLAS para preencher os espaços.', 5, -7, 400, 40);
this._hangmanHeaderHelpwindow.drawText('TECLAS erradas serão jogadas para a direita.', 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 = 26;
// 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 += 26;
} else {
sx += 15;
};
};
};
//=============================================================================
// * 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;
}
};
};
}
};