Regarding an MV port
Greetings all.
As has been mentioned in the shop page for this plugin, an MV version of it is in the works, and has been in development since the initial release of the MZ version of the plugin.
The current plan is that the MV version will be the same exact file as this MZ version, and will simply "work" in MV, via some switching based on which maker you're using. That means that on release, this plugin will be renamed to MV/MZ - Skill Shop, and anyone who has already bought it will immediately have access to the MV version as well (since they'll be the same file).
With that being said, I'm running up against an issue with backporting it to MV, that being the way plugin commands were handled. In rpgmaker MZ, plugin commands are a lot more robust, allowing for the very intricate commands I have going on in this plugin to create a shop, and modify its skill stock.
The MV plugin command is, simply put, quite obtuse. Currently I need to strike a balance between maintaining the plugin command functionality from MZ, and making it so that the end user doesn't pull their hair out trying to work around the plugin commands.
As an example, the MZ plugin command to create a shop has 4 parameters:
- The Key
- Whether the shop has a limited stock or not
- The list of skills in the shop (with their stock values)
- The customized shop strings for the various messages in the shop (buy button, error messages, etc)
From a user perspective, these are presented pretty clearly, with their own help text for each, so you know what they all are, and how to input them.
An MV plugin command requires to be presented to the engine in the following way:
plugincommandname args
So, for this example, the command name would be 'CreateShop', but what do you end up putting in for the arguments? Well there's the issue.
The easiest way to set this up is to comma separate them into their own thing, so we could do CreateShop Key, locked, skills, strings , but then we run into the second issue, the actual arguments.
See, in MZ, the list the user inputs ends up as a couple of objects, so starting with the strings part of the argument, it needs to be an object.
{BuyOne: "Buy", BuyTwo: "Confirm", FailBox: "You do not meet the requirements...", KnownSkill: "You already know this skill", OutOfStock: "Out of stock."}
The problem with the above approach, is that this is just ONE of the arguments you'd need to provide the plugin command, and it's already massive.
The other issue is the skills argument. It's not just a list of skills, it's a list of skills with their stock values. So that parameter is an array, and each element in the array is an object with two properties, a skillId and a stockvalue:
[{skillId: 12, StockValue: -1}, {skillId: 41, StockValue: 4},{skillId: 6, StockValue: 21}]
The above is just an example of a shop with just three skills in stock.
So we end up with a plugin command that looks like this:
CreateShop Zoop false [{skillId: 12, StockValue: -1}, {skillId: 41, StockValue: 4},{skillId: 6, StockValue: 21}] {BuyOne: "Buy", BuyTwo: "Confirm", FailBox: "You do not meet the requirements...", KnownSkill: "You already know this skill", OutOfStock: "Out of stock."}
To create one shop, with three skills. Not ideal, right? And what happens if you miss a colon, or put the wrong bracket? The whole thing doesn't work. Super great, eh?
So right now I'm working on a way to streamline this a bit better in MV. I'm thinking it'll end up using a comment event command instead of the plugin command, but we'll see how it goes. I just need to figure my way around doing that, since I've never made a plugin that used the event comment command before.
Just figured I'd keep y'all in the loop.
Oh, one other thing, when I do release the update that will make this plugin compatible with MV, I'll run another discount the same as the release discount, so there's no need to buy it right now thinking there won't be a similar sale in a couple of weeks when I get this working. no FOMO here.
That's all for now.
~Ramza
Comments
Log in with itch.io to leave a comment.
Hi Ramza, it has been awhile since your last update on the MV version. I just wanted to ask if this is still in the works to be release anytime soon (by soon, I mean like maybe end of 2026)?
Hello.
If I'm being honest, I haven't put much thought into porting it to MV since this post was made 3 years ago. I still have the same major issue, which is that plugin commands in MV are inferior from an end user perspective.
In order to make the two plugins as close as possible, I'd likely need to look into some kind of electron app that would take the inputs of a dev in a similar manner as the MZ plugin command window does, and outputs the results in one giant line for use in the plugin command event command for MV.
If I wanted to go the route of having the features be slightly different, the MV version could define the shops on initialization, so that creating them could make use of the plugin parameters in the plugin instead of plugin commands. But this would prevent Devs from defining them mid game, at the very least, and adding or removing or changing stock in a specific shop is still going to take a giant plugin command that'd be easy to butcher when you're typing it in, making it hard to use, and hard to troubleshoot if it's not working.
The best workaround I can think of is either breaking the plugin commands down into individual calls, and using regEx to parse them like note tags. But I'm not sure how that'd handle custom costs, and a whole host of other things, really.
Even as a dev who's not afraid of a little jank (trust me, look at the crafting plugin), myself, the prospect of having to type in a bunch of easily typo'd text instead of clicking from dropdowns and menus scares me a lot.
~Ramza
Hi Ramza, thanks for the response and explanation. I was hoping for an MV version mostly due to the limited quantity feature. I guess I will stick to the (very old) Yami's plugin instead.
Nonetheless, looking forward to any new plugins you might be releasing. I know what people say about feature creep in game dev, but I just enjoy adding features to my games.