FelixSitu

Villager
Member
Joined
Mar 31, 2018
Messages
12
Reaction score
0
First Language
English
Primarily Uses
RMMV
Hi,

I am currently using SRD Picture Choice Plugin and I noticed that the only way to distinguish the choice currently "pointed at" vs the other ones is the size scaling. I also want to add change in opacity. For example, for the currently selected, I want its opacity to be 255 while the others are at 150 so players can distinguish between them easier.

/*:
* @plugindesc Allows players to have the ability to select from a collection of pictures.
* @author SumRndmDde
*
* @param Min Scale
* @desc The scale of the picture when it is not selected.
* @Default 1
*
* @param Max Scale
* @desc The scale of the picture when it is selected.
* @Default 1.5
*
* @param Scaling Speed
* @desc The speed in which the pictures zoom when selecting them.
* @Default 0.04
*
* @param Confirm Speed
* @desc The speed of the animation of a picture when it is chosen.
* @Default 0.2
*
* @param Close Speed
* @desc The speed of the animation of a picture when it closes.
* @Default 0.4
*
* @Help
*
* Picture Choices
* Version 1.00
* SumRndmDde
*
*
* This is a plugin that allows players to have the ability to select from
* a collection of pictures.
*
*
* ==========================================================================
* Where to Store the Pictures
* ==========================================================================
*
* All of the image files need to be stored in:
*
* /img/SumRndmDde/choices/
*
*
* ==========================================================================
* How to Set up Picture Choices
* ==========================================================================
*
* Within one of the slots for a Choice in a "Show Choices" event, use:
*
* \picture[image-name]
*
* For example, if you had an image called "Happy.png", then you could do:
*
* \picture[Happy]
*
*
* Using this, you can assign pictures to each choice.
* Keep in mind if even one choice is set up like this, the entire choice
* window will use the Picture Choices format.
* I would HIGHLY recommend making every choice have an picture assigned to it.
*
*
* ==========================================================================
* Picture Choices Grid
* ==========================================================================
*
* By default, the grid used for the Picture Choices is based on the amount
* of choices that are used.
*
* For example:
*
* 2 Choices - 2 Columns | 1 Rows
* 3 Choices - 3 Columns | 1 Rows
* 4 Choices - 2 Columns | 2 Rows
* 5 Choices - 5 Columns | 1 Rows
* 6 Choices - 3 Columns | 2 Rows
*
*
* However, say for example, you wish to set up a custom grid (like you may
* wish to have 3 Rows for 3 Choices), you can use the Plugin Command:
*
* SetPictureChoicesGrid [cols] [rows]
*
* For example:
*
* SetPictureChoicesGrid 1 3
*
*
* If you wish to set it back to automatic mode, use the Plugin Command:
*
* SetPictureChoicesGrid auto
*
*
* ==========================================================================
* End of Help File
* ==========================================================================
*
* Welcome to the bottom of the Help file.
*
*
* Thanks for reading!
* If you have questions, or if you enjoyed this Plugin, please check
* out my YouTube channel!
*
* https://www.youtube.com/c/SumRndmDde
*
*
* Until next time,
* ~ SumRndmDde
*
*/

var SRD = SRD || {};
SRD.PictureChoices = SRD.PictureChoices || {};

var Imported = Imported || {};
Imported["SumRndmDde Picture Choices"] = 1.00;

function Window_PictureChoiceList() {
this.initialize.apply(this, arguments);
}

function Sprite_PictureChoice() {
this.initialize.apply(this, arguments);
}

(function(_) {

"use strict";

var params = PluginManager.parameters('SRD_PictureChoices');

//-----------------------------------------------------------------------------
// SRD.PictureChoices
//-----------------------------------------------------------------------------

_.min = parseFloat(params['Min Scale']);
_.max = parseFloat(params['Max Scale']);
_.speed = parseFloat(params['Scaling Speed']);
_.confirm = parseFloat(params['Confirm Speed']);
_.close = parseFloat(params['Close Speed']);

_.loadPicture = function(filename, hue) {
return ImageManager.loadBitmap('img/SumRndmDde/choices/', filename, hue, true);
};

_.matchesAny = function(name) {
return !!name.match(/\\picture\[(.*)\]/i);
};

//-----------------------------------------------------------------------------
// Game_Message
//-----------------------------------------------------------------------------

var _Game_Message_clear = Game_Message.prototype.clear;
Game_Message.prototype.clear = function() {
_Game_Message_clear.apply(this, arguments);
this.isPictureChoices = false;
this.pictureChoiceSize = [Graphics.boxWidth, Graphics.boxHeight];
this.pictureChoiceGrid = [1, 1];
this.customizedPictureChoiceGrid = false;
};

var _Game_Message_setChoices = Game_Message.prototype.setChoices;
Game_Message.prototype.setChoices = function(choices, defaultType, cancelType) {
this.pictureChoicesCheck(choices);
_Game_Message_setChoices.apply(this, arguments);
};

Game_Message.prototype.pictureChoicesCheck = function(choices) {
this.isPictureChoices = false;
for(var i = 0; i < choices.length; i++) {
if(_.matchesAny(choices)) {
this.isPictureChoices = true;
break;
}
}
if(!this.customizedPictureChoiceGrid) {
var amount = choices.length;
if(amount === 1) this.pictureChoiceGrid = [1, 1];
else if(amount === 2) this.pictureChoiceGrid = [2, 1];
else if(amount === 3) this.pictureChoiceGrid = [3, 1];
else if(amount === 4) this.pictureChoiceGrid = [2, 2];
else if(amount === 5) this.pictureChoiceGrid = [5, 1];
else if(amount === 6) this.pictureChoiceGrid = [6, 2];
}
};

Game_Message.prototype.setPictureChoicesGrid = function(cols, rows) {
this.customizedPictureChoiceGrid = true;
this.pictureChoiceGrid = [cols, rows];
};

Game_Message.prototype.disablePictureChoicesGrid = function() {
this.customizedPictureChoiceGrid = false;
};

//-----------------------------------------------------------------------------
// Game_Interpreter
//-----------------------------------------------------------------------------

var _Game_Interpreter_pluginCommand = Game_Interpreter.prototype.pluginCommand;
Game_Interpreter.prototype.pluginCommand = function(command, args) {
_Game_Interpreter_pluginCommand.apply(this, arguments);
if(command.trim().toLowerCase() === 'setpicturechoicesgrid') {
if(String(args[0]).trim().toLowerCase() === 'auto') {
$gameMessage.disablePictureChoicesGrid();
} else {
var cols = parseInt(args[0]);
var rows = parseInt(args[1]);
$gameMessage.setPictureChoicesGrid(cols, rows);
}
}
};

//-----------------------------------------------------------------------------
// Window_Message
//-----------------------------------------------------------------------------

var _Window_Message_subWindows = Window_Message.prototype.subWindows;
Window_Message.prototype.subWindows = function() {
var result = _Window_Message_subWindows.apply(this, arguments);
result.push(this._pictureChoiceWindow);
return result;
};

var _Window_Message_createSubWindows = Window_Message.prototype.createSubWindows;
Window_Message.prototype.createSubWindows = function() {
_Window_Message_createSubWindows.apply(this, arguments);
this._pictureChoiceWindow = new Window_PictureChoiceList(this);
};

var _Window_Message_isAnySubWindowActive = Window_Message.prototype.isAnySubWindowActive;
Window_Message.prototype.isAnySubWindowActive = function() {
return _Window_Message_isAnySubWindowActive.apply(this, arguments) || this._pictureChoiceWindow.active;
};

var _Window_Message_startInput = Window_Message.prototype.startInput;
Window_Message.prototype.startInput = function() {
if($gameMessage.isPictureChoices && $gameMessage.isChoice()) {
this._pictureChoiceWindow.start();
return true;
}
return _Window_Message_startInput.apply(this, arguments);
};

var _Scene_Map_createMessageWindow = Scene_Map.prototype.createMessageWindow;
Scene_Map.prototype.createMessageWindow = function() {
_Scene_Map_createMessageWindow.apply(this, arguments);
if(this._messageWindow._pictureChoiceWindow) {
this._windowLayer.removeChild(this._messageWindow._pictureChoiceWindow);
this.addChild(this._messageWindow._pictureChoiceWindow);
}
};

//-----------------------------------------------------------------------------
// Window_PictureChoiceList
//-----------------------------------------------------------------------------

Window_PictureChoiceList.prototype = Object.create(Window_ChoiceList.prototype);
Window_PictureChoiceList.prototype.constructor = Window_PictureChoiceList;

Window_PictureChoiceList.prototype._refreshAllParts = function() {};
Window_PictureChoiceList.prototype._refreshCursor = function() {};

var _Window_PictureChoiceList_initialize = Window_PictureChoiceList.prototype.initialize;
Window_PictureChoiceList.prototype.initialize = function(messageWindow) {
Window_ChoiceList.prototype.initialize.apply(this, arguments);
this._spriteChoices = [];
};

Window_PictureChoiceList.prototype.updatePlacement = function() {
this.width = this.windowWidth();
this.height = this.windowHeight();
this.x = (Graphics.boxWidth - this.width) / 2;
this.y = (Graphics.boxHeight - this.height) / 2;
if(!this._messageWindow.isClosed()) {
if(this._messageWindow.y > Graphics.boxHeight/2) this.y -= this._messageWindow.height / 2;
else if(this._messageWindow.y <= 0) this.y += this._messageWindow.height / 2;
}
};

var _Window_PictureChoiceList_start = Window_PictureChoiceList.prototype.start;
Window_PictureChoiceList.prototype.start = function() {
this._spriteChoices.forEach(function(sprite) {
if(sprite) {
this.removeChild(sprite);
}
}, this);
_Window_PictureChoiceList_start.apply(this, arguments);
};

Window_PictureChoiceList.prototype.windowWidth = function() {
return $gameMessage.pictureChoiceSize[0];
};

Window_PictureChoiceList.prototype.windowHeight = function() {
if(!this._messageWindow.isClosed()) {
return $gameMessage.pictureChoiceSize[1] - this._messageWindow.height;
}
return $gameMessage.pictureChoiceSize[1];
};

Window_PictureChoiceList.prototype.maxCols = function() {
return $gameMessage.pictureChoiceGrid[0];
};

Window_PictureChoiceList.prototype.numVisibleRows = function() {
return $gameMessage.pictureChoiceGrid[1];
};

Window_PictureChoiceList.prototype.itemHeight = function() {
return (this.contentsHeight() / this.numVisibleRows());
};

Window_PictureChoiceList.prototype.contentsHeight = Window_Base.prototype.contentsHeight;

var _Window_PictureChoiceList_drawItem = Window_PictureChoiceList.prototype.drawItem;
Window_PictureChoiceList.prototype.drawItem = function(index) {
var name = this.commandName(index);
var rect = this.itemRectForText(index);
if(name.match(/\\picture\[(.*)\]/i)) {
if(this._spriteChoices[index]) this.removeChild(this._spriteChoices[index]);
var imageName = String(RegExp.$1);
var bit = _.loadPicture(imageName);
var sprite = new Sprite_PictureChoice(bit);
sprite.x = rect.x + (rect.width/2);
sprite.y = rect.y + (rect.height/2);
this._spriteChoices[index] = sprite;
this.addChild(sprite);
} else {
var width = this.textWidthEx(name);
var bit = new Bitmap(width, this.contents.fontSize + 4);
var tempCont = this.contents;
this.contents = bit;
this.drawTextEx(name, 0, 0);
this.contents = tempCont;
var sprite = new Sprite_PictureChoice(bit);
sprite.x = rect.x + (rect.width/2);
sprite.y = rect.y + (rect.height/2);
this._spriteChoices[index] = sprite;
this.addChild(sprite);
}
};

Window_PictureChoiceList.prototype.itemTextAlign = function() {
return 'center';
};

var _Window_PictureChoiceList_update = Window_PictureChoiceList.prototype.update;
Window_PictureChoiceList.prototype.update = function() {
_Window_PictureChoiceList_update.apply(this, arguments);
var length = this._spriteChoices.length;
for(var i = 0; i < length; i++) {
if(this._spriteChoices) {
if(this.index() === i) {
//this._spriteChoices.setOpacity(255);
this._spriteChoices.updateIncrease();

} else {
//this._spriteChoices.setOpacity(150);
this._spriteChoices.updateDecrease();
}
}
}
};

Window_PictureChoiceList.prototype.close = function() {
for(var i = 0; i < this._spriteChoices.length; i++) {
if(this._spriteChoices) {
if(i === this.index()) {
this._spriteChoices.startConfirm();
} else {
this._spriteChoices.startDecline();
}
}
}
Window_ChoiceList.prototype.close.apply(this, arguments);
};

//-----------------------------------------------------------------------------
// Sprite_PictureChoice
//-----------------------------------------------------------------------------

Sprite_PictureChoice.prototype = Object.create(Sprite.prototype);
Sprite_PictureChoice.prototype.constructor = Sprite_PictureChoice;

Sprite_PictureChoice.prototype.initialize = function() {
Sprite.prototype.initialize.apply(this, arguments);
this.anchor.x = 0.5;
this.anchor.y = 0.5;
this._breath = 1;
this._direction = 0;
};

Sprite_PictureChoice.prototype.update = function() {
Sprite.prototype.update.apply(this, arguments);
if(this._direction) {
if(this._direction === 1) {
this.opacity -= (_.close * 100);
this._breath += _.close;
this.scale.x = this._breath;
this.scale.y = this._breath;
if(this.opacity <= 0) {
this._direction = 0;
this.parent.removeChild(this);
}
} else if(this._direction === 2) {
this._breath -= _.confirm;
this.scale.x = this._breath;
this.scale.y = this._breath;
if(this._breath <= 0) {
this._direction = 0;
this.parent.removeChild(this);
}
}
}
};

Sprite_PictureChoice.prototype.startConfirm = function() {
this._direction = 1;
};

Sprite_PictureChoice.prototype.startDecline = function() {
this._direction = 2;
};

Sprite_PictureChoice.prototype.updateIncrease = function() {
if(this._breath < _.max) {
this._breath += _.speed;
this.scale.x = this._breath;
this.scale.y = this._breath;

}
};

Sprite_PictureChoice.prototype.updateDecrease = function() {
if(this._breath > _.min) {
this._breath -= _.speed;
this.scale.x = this._breath;
this.scale.y = this._breath;
}
};

})(SRD.PictureChoices);

Thank you.
 

Latest Profile Posts

its_a_random_world.jpg
Well after half a year of health problems (that aren't as bad as before), and playing with UE4 & 5... I realized I should finish this project before working on something else. So I decided to upgrade my randomizer. And really just focus on compromising wherever I can to finish the project sooner rather than later. :kaoswt:
hmmm. an art of mine was removed from reddit, for a reason not even listed.

Forum statistics

Threads
121,890
Messages
1,144,956
Members
160,143
Latest member
Krockhunter
Top