594 lines
22 KiB
JavaScript
594 lines
22 KiB
JavaScript
//=============================================================================
|
|
// TDS Language Processor
|
|
// Version: 1.5
|
|
//=============================================================================
|
|
// Add to Imported List
|
|
var Imported = Imported || {} ; Imported.TDS_TextLanguageProcessor = true;
|
|
// Initialize Alias Object
|
|
var _TDS_ = _TDS_ || {} ; _TDS_.TextLanguageProcessor = _TDS_.TextLanguageProcessor || {};
|
|
//=============================================================================
|
|
/*:
|
|
* @plugindesc
|
|
* This plugin allows you to use YAML files for multiple language purposes.
|
|
*
|
|
* @author TDS
|
|
*
|
|
*
|
|
* @param Default Language
|
|
* @desc Default language of the game.
|
|
* @default en
|
|
*
|
|
* @help
|
|
* ============================================================================
|
|
* * Script calls
|
|
* ============================================================================
|
|
*
|
|
* To manually set the current language use the following in a
|
|
* script call:
|
|
*
|
|
* LanguageManager.setLanguage(LANGUAGE, SAVE);
|
|
*
|
|
* LANGUAGE
|
|
* ^ Language name string.
|
|
*
|
|
* SAVE
|
|
* ^ true/false. If true it will save the language in the config
|
|
* file so it remembers it when the game is closed and reopened.
|
|
* (Optional. Defaults to True)
|
|
*
|
|
* Examples:
|
|
*
|
|
* LanguageManager.setLanguage('jp', false);
|
|
*
|
|
* LanguageManager.setLanguage('en');
|
|
*
|
|
*/
|
|
//=============================================================================
|
|
// Node.js path
|
|
var path = require('path');
|
|
// Get Parameters
|
|
var parameters = PluginManager.parameters("Text_Language_Processor");
|
|
// Initialize Parameters
|
|
_TDS_.TextLanguageProcessor.params = {};
|
|
_TDS_.TextLanguageProcessor.params.defaultLanguage = String(parameters['Default Language'] || 'en');
|
|
|
|
//=============================================================================
|
|
// ** LanguageManager
|
|
//-----------------------------------------------------------------------------
|
|
// Static class used for handling Language Text Processing.
|
|
//=============================================================================
|
|
function LanguageManager() { throw new Error('This is a static class'); };
|
|
//=============================================================================
|
|
// * Object Initialization
|
|
//=============================================================================
|
|
LanguageManager.initialize = function() {
|
|
// Current Language
|
|
this._language = this.defaultLanguage();
|
|
// Language Data Object
|
|
this._data = {};
|
|
// Load All Language Files
|
|
this.loadAllLanguageFiles();
|
|
};
|
|
//=============================================================================
|
|
// * Get Default Language
|
|
//=============================================================================
|
|
LanguageManager.defaultLanguage = function() { return _TDS_.TextLanguageProcessor.params.defaultLanguage; };
|
|
//=============================================================================
|
|
// * Get System Text
|
|
//=============================================================================
|
|
LanguageManager.setLanguage = function(language, save) {
|
|
// Set Default save State
|
|
if (save === undefined) { save = true; };
|
|
// Set Language
|
|
LanguageManager._language = language;
|
|
// If Save Flag
|
|
if (save) { ConfigManager.save(); };
|
|
};
|
|
//=============================================================================
|
|
// * Get Language Data
|
|
//=============================================================================
|
|
LanguageManager.languageData = function(language) {
|
|
// Set Default Language
|
|
if (language === undefined) { language = this._language; }
|
|
// Return Language Data
|
|
return this._data[language];
|
|
};
|
|
//=============================================================================
|
|
// * Get System Text
|
|
//=============================================================================
|
|
LanguageManager.getSystemText = function(type, name, language) {
|
|
// Set Default Language
|
|
if (language === undefined) { language = this._language; }
|
|
// Get Data
|
|
var data = this._data[language].text.System;
|
|
// If Data Exists
|
|
if (data) { return data.terms[type][name]; };
|
|
// Return Error
|
|
return "- ERROR -";
|
|
};
|
|
//=============================================================================
|
|
// * Get Plugin Text
|
|
//=============================================================================
|
|
LanguageManager.getPluginText = function(type, name, language = this._language) {
|
|
// Get Data
|
|
var data = this._data[language].text.System
|
|
// If Data Exists
|
|
if (data) { return data.plugins[type][name]; };
|
|
// Return Error
|
|
return " - ERROR -";
|
|
};
|
|
//=============================================================================
|
|
// * Get Input Keys Table
|
|
//=============================================================================
|
|
LanguageManager.getInputKeysTable = function() {
|
|
// Get Data
|
|
var data = this.languageData().text.System;
|
|
// Return Input Keys Table
|
|
return data.inputKeysTable ? data.inputKeysTable : [];
|
|
};
|
|
//=============================================================================
|
|
// * Get Input Keys Table
|
|
//=============================================================================
|
|
LanguageManager.getInputName = function(type, input, language = this._language) {
|
|
// Get Data
|
|
var data = this.languageData().text.System;
|
|
// If Data Exists
|
|
if (data) { return data.InputNames[type][input]; };
|
|
// Return Error
|
|
return " - ERROR -";
|
|
};
|
|
//=============================================================================
|
|
// * Get Text Data
|
|
//=============================================================================
|
|
LanguageManager.getTextData = function(file, name, language) {
|
|
// Set Default Language
|
|
if (language === undefined) { language = this._language; }
|
|
// Return Text Data
|
|
return this._data[language].text[file][name];
|
|
};
|
|
//=============================================================================
|
|
// * Get Message Data
|
|
//=============================================================================
|
|
LanguageManager.getMessageData = function(code, language) {
|
|
// Set Default Language
|
|
if (language === undefined) { language = this._language; }
|
|
// Get Commands
|
|
var cmd = code.split('.');
|
|
// Get Data
|
|
var data = this.getTextData(cmd[0], cmd[1], language);
|
|
// Return Data
|
|
return data;
|
|
};
|
|
LanguageManager.getDatabaseText = function(code, language) {
|
|
// Set Default Language
|
|
if (language === undefined) { language = this._language; }
|
|
// Get Data
|
|
var data = this._data[language].text.Database;
|
|
// If Data Exists
|
|
if (data) { return data[code]; };
|
|
// Return Error
|
|
return "- ERROR -";
|
|
};
|
|
//=============================================================================
|
|
// * Load Language Files
|
|
//=============================================================================
|
|
LanguageManager.loadLanguageFiles = function(language) {
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var base = path.dirname(process.mainModule.filename);
|
|
// Get Folder
|
|
var folder = '/Languages/' + language;
|
|
// Get FilePath
|
|
var filePath = base + folder;
|
|
// Get Directory List
|
|
var dirList = fs.readdirSync(filePath);
|
|
// Initialize Language Data
|
|
this._data[language] = { text: {} };
|
|
// Go Through Directory
|
|
for (var i = 0; i < dirList.length; i++) {
|
|
// Get Directory
|
|
var directory = dirList[i];
|
|
// Get Format
|
|
var format = path.extname(dirList[i]);
|
|
// Get Filename
|
|
var filename = path.basename(directory, format);
|
|
// If Format is yaml
|
|
if (format === '.yaml') {
|
|
// Get Language File Data
|
|
var data = jsyaml.load(fs.readFileSync(filePath + '/' + filename + format, 'utf8'));
|
|
// Set Language Text Data
|
|
this._data[language].text[filename] = data;
|
|
continue;
|
|
};
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Load All Language Files
|
|
//=============================================================================
|
|
LanguageManager.loadAllLanguageFiles = function() {
|
|
var path = require('path');
|
|
var fs = require('fs');
|
|
var base = path.dirname(process.mainModule.filename);
|
|
// Get Folder
|
|
var folder = '/Languages/';
|
|
// Get FilePath
|
|
var filePath = base + folder;
|
|
// Get Directory List
|
|
var dirList = fs.readdirSync(filePath);
|
|
// Go Through Directory
|
|
for (var i = 0; i < dirList.length; i++) {
|
|
// Get Directory
|
|
var directory = dirList[i];
|
|
// Get Format
|
|
var format = path.extname(dirList[i]);
|
|
// Get Filename
|
|
var filename = path.basename(directory, format);
|
|
// Get Stat
|
|
var stat = fs.statSync(filePath + filename)
|
|
//If it's a directory
|
|
if (stat.isDirectory()) {
|
|
// Load Language Files
|
|
this.loadLanguageFiles(directory);
|
|
};
|
|
};
|
|
};
|
|
// Initialize Language Manager
|
|
//LanguageManager.initialize();
|
|
|
|
|
|
|
|
//=============================================================================
|
|
// ** ConfigManager
|
|
//-----------------------------------------------------------------------------
|
|
// The static class that manages the configuration data.
|
|
//=============================================================================
|
|
// Alias Listing
|
|
//=============================================================================
|
|
_TDS_.TextLanguageProcessor.ConfigManager_makeData = ConfigManager.makeData;
|
|
_TDS_.TextLanguageProcessor.ConfigManager_applyData = ConfigManager.applyData;
|
|
//=============================================================================
|
|
// * Make Data
|
|
//=============================================================================
|
|
/*ConfigManager.makeData = function() {
|
|
// Get Original Config Object
|
|
var config = _TDS_.TextLanguageProcessor.ConfigManager_makeData.call(this);
|
|
// Set Language
|
|
config.language = LanguageManager._language;
|
|
// Return config object
|
|
return config;
|
|
};
|
|
//=============================================================================
|
|
// * Apply Data
|
|
//=============================================================================
|
|
ConfigManager.applyData = function(config) {
|
|
// Run Original Function
|
|
_TDS_.TextLanguageProcessor.ConfigManager_applyData.call(this, config);
|
|
// Set Language
|
|
this.language = LanguageManager._language = config.language || LanguageManager.defaultLanguage();
|
|
};*/
|
|
|
|
//=============================================================================
|
|
// ** TextManager
|
|
//-----------------------------------------------------------------------------
|
|
// The static class that handles terms and messages.
|
|
//=============================================================================
|
|
// * Get System Text
|
|
//=============================================================================
|
|
TextManager.basic = function(basicId) { return LanguageManager.getSystemText('basic', basicId); };
|
|
TextManager.param = function(paramId) { return LanguageManager.getSystemText('param', paramId); };
|
|
TextManager.command = function(commandId) { return LanguageManager.getSystemText('command', commandId); };
|
|
TextManager.message = function(messageId) { return LanguageManager.getSystemText('message', messageId); };
|
|
TextManager.database = function(databaseId) { return LanguageManager.getDatabaseText(databaseId); };
|
|
|
|
//=============================================================================
|
|
// * Get Scene Text
|
|
//=============================================================================
|
|
TextManager.basic = function(basicId) { return LanguageManager.getSystemText('basic', basicId); };
|
|
|
|
//=============================================================================
|
|
// ** Game_Message
|
|
//-----------------------------------------------------------------------------
|
|
// The game object class for the state of the message window that displays text
|
|
// or selections, etc.
|
|
//=============================================================================
|
|
// * Show Language Message
|
|
//=============================================================================
|
|
Game_Message.prototype.showLanguageMessage = function(code) {
|
|
// Get Message Data
|
|
var data = LanguageManager.getMessageData(code);
|
|
var faceset = data.faceset || "";
|
|
var faceindex = data.faceindex || 0;
|
|
var background = data.background || 0;
|
|
var positionType = data.position === undefined ? 2 : data.position;
|
|
// Get Extra Faces
|
|
var extraFaces = data.extraFaces;
|
|
// If Data has Extra Faces
|
|
if (extraFaces) {
|
|
// Go Through Extra Fraces
|
|
for (var i = 0; i < extraFaces.length; i++) {
|
|
// Get Face Data
|
|
var face = extraFaces[i];
|
|
// Set Extra Face
|
|
this.setExtraFace(i, face.faceset, face.faceindex, this.makeFaceBackgroundColor(face.faceBackgroundColor,face.faceset, face.faceindex));
|
|
};
|
|
};
|
|
// Set Message Properties
|
|
this.setFaceImage(faceset, faceindex);
|
|
this.setBackground(background);
|
|
this.setPositionType(positionType);
|
|
this._faceBackgroundColor = this.makeFaceBackgroundColor(data.faceBackgroundColor, faceset, faceindex);
|
|
if (Imported && Imported.YEP_MessageCore) {
|
|
this.addText(data.text);
|
|
} else {
|
|
this.add(data.text);
|
|
};
|
|
};
|
|
//=============================================================================
|
|
// * Make Face Background Color
|
|
//=============================================================================
|
|
Game_Message.prototype.makeFaceBackgroundColor = function(color, name, index) {
|
|
// If Color Exists
|
|
if (color) {
|
|
if (color.match(/^rgba/)) { return color; }
|
|
if (color.match(/^#/)) { return color; }
|
|
};
|
|
// If Color Is for FaceName or Color is undefined
|
|
if (name && color === 'FaceName' || color === undefined) {
|
|
// Switch Case Name
|
|
switch (name) {
|
|
case '04_HERO_OW':
|
|
return '#52b9fc';
|
|
break;
|
|
};
|
|
};
|
|
// Return null (Clear Background)
|
|
return null;
|
|
};
|
|
|
|
|
|
Game_Message.prototype.setLanguageLabels = function(labels) {
|
|
if (!this._choiceLabels) this._choiceLabels = [];
|
|
this._choiceLabels = labels;
|
|
};
|
|
|
|
//=============================================================================
|
|
// ** Game_Interpreter
|
|
//-----------------------------------------------------------------------------
|
|
// The interpreter for running event commands.
|
|
//=============================================================================
|
|
// Alias Listing
|
|
//=============================================================================
|
|
_TDS_.TextLanguageProcessor.Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
|
|
//=============================================================================
|
|
// * Plugin Command
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.pluginCommand = function(command, args) {
|
|
// Command Switch Case
|
|
switch (command) {
|
|
case 'ShowMessage':
|
|
// Show Language Message
|
|
this.commandShowLanguageMessage(args[0]);
|
|
break;
|
|
case 'ChangeLanguage':
|
|
// Set Language
|
|
LanguageManager._language = args[0];
|
|
break;
|
|
case 'AddChoice':
|
|
this.addLanguageChoice(args[0],args[1]);
|
|
break;
|
|
case 'ShowChoices':
|
|
this.commandShowLanguageChoices(args[0]);
|
|
break;
|
|
};
|
|
// Return Original Function
|
|
return _TDS_.TextLanguageProcessor.Game_Interpreter_pluginCommand.call(this, command, args);
|
|
};
|
|
//=============================================================================
|
|
// * Show Language Message
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.commandShowLanguageMessage = function (code) {
|
|
if (!$gameMessage.isBusy()) {
|
|
// Show Language Message
|
|
$gameMessage.showLanguageMessage(code);
|
|
// Next Event Code Switch Case
|
|
switch (this.nextEventCode()) {
|
|
case 102:
|
|
// Show Choices
|
|
this._index++;
|
|
this.setupChoices(this.currentCommand().parameters);
|
|
break;
|
|
case 103:
|
|
// Input Number
|
|
this._index++;
|
|
this.setupNumInput(this.currentCommand().parameters);
|
|
break;
|
|
case 104:
|
|
// Select Item
|
|
this._index++;
|
|
this.setupItemChoice(this.currentCommand().parameters);
|
|
break;
|
|
case 356:
|
|
var nextCommand = this._list[this._index + 1];
|
|
var parameters = nextCommand.parameters;
|
|
var pluginCommand = parameters[0].split(' ')[0];
|
|
var cancelType = parameters[0].split(' ')[1];
|
|
if (pluginCommand && pluginCommand === "ShowChoices") {
|
|
this._index++;
|
|
this.setupLanguageChoices(cancelType);
|
|
}
|
|
break;
|
|
};
|
|
// this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
};
|
|
//=============================================================================
|
|
// * Show Choice
|
|
//=============================================================================
|
|
Game_Interpreter.prototype.addLanguageChoice = function(code,label) {
|
|
if (!this._choices) this._choices = [];
|
|
if (!this._choiceLabels) this._choiceLabels = [];
|
|
var data = LanguageManager.getMessageData(code);
|
|
this._choices.push(data.text);
|
|
this._choiceLabels.push(label);
|
|
};
|
|
|
|
Game_Interpreter.prototype.commandShowLanguageChoices = function(cancelType) {
|
|
if (!$gameMessage.isBusy()) {
|
|
this.setupLanguageChoices(parseInt(cancelType));
|
|
this._index++;
|
|
this.setWaitMode('message');
|
|
}
|
|
return false;
|
|
};
|
|
|
|
Game_Interpreter.prototype.commandLanguageJumpTo = function(label) {
|
|
for (var i = 0; i < this._list.length; i++) {
|
|
var command = this._list[i];
|
|
if (command.code === 118 && command.parameters[0] === label) {
|
|
this.jumpTo(i);
|
|
return;
|
|
}
|
|
}
|
|
return true;
|
|
};
|
|
|
|
Game_Interpreter.prototype.setupLanguageChoices = function(cancel) {
|
|
var choices = this._choices.clone();
|
|
var cancelType = cancel;
|
|
var defaultType = 0;
|
|
var positionType = 2;
|
|
var background = 0;
|
|
if (cancelType >= choices.length) {
|
|
cancelType = -2;
|
|
}
|
|
$gameMessage.setChoices(choices, defaultType, cancelType);
|
|
$gameMessage.setChoiceBackground(background);
|
|
$gameMessage.setChoicePositionType(positionType);
|
|
$gameMessage.setLanguageLabels(this._choiceLabels.clone());
|
|
$gameMessage.setChoiceCallback(function(n) {
|
|
if (n >= 0) {
|
|
this.commandLanguageJumpTo($gameMessage._choiceLabels[n]);
|
|
} else {
|
|
this._branch[this._indent] = n;
|
|
}
|
|
}.bind(this));
|
|
this._choices = [];
|
|
this._choiceLabels = [];
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Window_Base_drawTextEx = Window_Base.prototype.drawTextEx;
|
|
Window_Base.prototype.drawTextEx = function(text, x, y) {
|
|
if (!text) _TDS_.TextLanguageProcessor.Window_Base_drawTextEx.call(this, text, x, y);
|
|
var regex = /\{(.*?)\}/;
|
|
var result;
|
|
while ((result = regex.exec(text)) !== null) {
|
|
var dbString = TextManager.database(result[1]);
|
|
text = text.replace(result[0], dbString);
|
|
}
|
|
return _TDS_.TextLanguageProcessor.Window_Base_drawTextEx.call(this, text, x, y);
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Window_Base_drawActorName = Window_Base.prototype.drawActorName;
|
|
Window_Base.prototype.drawActorName = function(actor, x, y, width) {
|
|
if (!actor || !actor.name()) return _TDS_.TextLanguageProcessor.Window_Base_drawActorName.call(this, actor, x, y, width);
|
|
width = width || 168;
|
|
this.changeTextColor(this.hpColor(actor));
|
|
|
|
var regex = /\{(.*?)\}/;
|
|
var result;
|
|
var text = actor.name();
|
|
while ((result = regex.exec(text)) !== null) {
|
|
var dbString = TextManager.database(result[1]);
|
|
text = text.replace(result[0], dbString);
|
|
}
|
|
|
|
this.drawText(text, x, y, width);
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Window_Base_drawActorClass = Window_Base.prototype.drawActorClass;
|
|
Window_Base.prototype.drawActorClass = function(actor, x, y, width) {
|
|
if (!actor || !actor.currentClass().name) return _TDS_.TextLanguageProcessor.Window_Base_drawActorClass.call(this, actor,x, y, width);
|
|
width = width || 168;
|
|
this.resetTextColor();
|
|
|
|
var regex = /\{(.*?)\}/;
|
|
var result;
|
|
var text = actor.currentClass().name;
|
|
while ((result = regex.exec(text)) !== null) {
|
|
var dbString = TextManager.database(result[1]);
|
|
text = text.replace(result[0], dbString);
|
|
}
|
|
|
|
this.drawText(text, x, y, width);
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Window_Base_drawActorNickname = Window_Base.prototype.drawActorNickname;
|
|
Window_Base.prototype.drawActorNickname = function(actor, x, y, width) {
|
|
if (!actor || !actor.nickname()) return _TDS_.Window_Base_drawActorNickname.call(this, actor, x, y, width);
|
|
width = width || 270;
|
|
this.resetTextColor();
|
|
|
|
var regex = /\{(.*?)\}/;
|
|
var result;
|
|
var text = actor.nickname();
|
|
while ((result = regex.exec(text)) !== null) {
|
|
var dbString = TextManager.database(result[1]);
|
|
text = text.replace(result[0], dbString);
|
|
}
|
|
|
|
this.drawText(text, x, y, width);
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Window_Base_drawItemName = Window_Base.prototype.drawItemName;
|
|
Window_Base.prototype.drawItemName = function(item, x, y, width) {
|
|
if (!item || !item.name) return _TDS_.TextLanguageProcessor.Window_Base_drawItemName.call(this, item, x, y, width);
|
|
width = width || 312;
|
|
if (item) {
|
|
var iconBoxWidth = Window_Base._iconWidth + 4;
|
|
this.resetTextColor();
|
|
this.drawIcon(item.iconIndex, x + 2, y + 2);
|
|
|
|
var regex = /\{(.*?)\}/;
|
|
var result;
|
|
var text = item.name;
|
|
while ((result = regex.exec(text)) !== null) {
|
|
var dbString = TextManager.database(result[1]);
|
|
text = text.replace(result[0], dbString);
|
|
}
|
|
this.drawText(text, x + iconBoxWidth, y, width - iconBoxWidth);
|
|
}
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Game_Interpreter_requestImages = Game_Interpreter.prototype.requestImages;
|
|
Game_Interpreter.prototype.requestImages = function(list, commonList) {
|
|
if(!list) return;
|
|
|
|
list.forEach(function(command){
|
|
var params = command.parameters;
|
|
switch(command.code){
|
|
case 231:
|
|
var image = params[1].replace("_" + LanguageManager.defaultLanguage(), "_" + LanguageManager._language);
|
|
ImageManager.requestPicture(image);
|
|
break;
|
|
}
|
|
});
|
|
_TDS_.TextLanguageProcessor.Game_Interpreter_requestImages.call(this, list, commonList);
|
|
};
|
|
|
|
_TDS_.TextLanguageProcessor.Game_Interpreter_command231 = Game_Interpreter.prototype.command231;
|
|
Game_Interpreter.prototype.command231 = function() {
|
|
var x, y;
|
|
if (this._params[3] === 0) { // Direct designation
|
|
x = this._params[4];
|
|
y = this._params[5];
|
|
} else { // Designation with variables
|
|
x = $gameVariables.value(this._params[4]);
|
|
y = $gameVariables.value(this._params[5]);
|
|
}
|
|
var image = this._params[1].replace("_" + LanguageManager.defaultLanguage(), "_" + LanguageManager._language);
|
|
$gameScreen.showPicture(this._params[0], image, this._params[2],
|
|
x, y, this._params[6], this._params[7], this._params[8], this._params[9]);
|
|
return true;
|
|
};
|