Home Artists Posts Import Register

Content

Greetings! I have a build that I'd like to get some feedback on. There's no new story content of any sort, and it's also not the RPG Maker MZ version of the game. Instead, this build should offer significantly improved performance, and possibly compatibility - particularly with MacOS. I borrowed an M1 MacBook Air and the old version of the game was crashing left and right. This one seems to run just fine (even if it did have to use Rosetta.) Hopefully I'll be able to get a native Apple Silicon version out in the next release or two.

So please try it out if you're so inclined and let me know what you think! Here are the links:

Windows 

Mac 

Linux 


It's Not the MZ Version?

It's not the MZ version. And the reason it isn't is because there isn't going to be an MZ version. I will continue developing the game with RPG Maker MV, probably until its completion.

 I had the majority of the work to convert the game done,  so deciding to pull the plug on the MZ port basically means I wasted a month of work. I feel quite bad about this, and think it deserves an explanation, so I'm going to give it now. 

The Short Version

The ins and outs are a bit complex, but the tl;dr version is that I realized switching over would essentially give another group of people the power to kill this project, perhaps for good. It would also make it difficult/impossible for me to implement certain features I might want in the game, but the main reason I'm pulling the plug on the MZ port is that it would introduce a risk that the project could die, and there would be almost nothing I could do about it. 

Sounds a bit melodramatic, but it's true nonetheless. Now, I don't think it's likely that would happen, but it's a big risk, so the question is - is the benefit worth it? My answer is no. I came to realize I can get about 90% of what I wanted from the MZ port through other means - and the release above is a test of that.

The Long Version

RPG Maker, in all its versions, is extremely basic out of the box. Most of the really interesting stuff it does - some of which you see directly, much of which you don't - is the result of plugins. Plugins - in MV and MZ - are bits of JavaScript code that give the engine new capabilities, or change the way it does various things. Some of these plugins are things that I wrote (8 so far) but most are not. Most of the plugins used in TPE are from the most prolific western plugin developer, Yanfly, and his plugins provide a huge portion of this game's functionality.

A Bad Explanation of JavaScript

Now, JavaScript is an interpreted language*, which means a special type of program literally reads the code you wrote and converts it into instructions the computer can use when you open a webpage or run a game or whatever. (*Computer science people: I know this is a bad explanation and that JS is really a JIT-compiled language, but I'm trying to keep things simple.) This is really cool, because it means all the important logic is in human-readable form, and you can just open up a text editor and see how something works, see where your bugs are, change it if you want, and then run it again.

The game is like that. All the engine's core logic, the graphics libraries, all the stuff I've added, all the stuff from other people - it's all stored in text files in human-readable format, which the game reads every time you run it, and that you can read, too, if you want. (It's in the www/js folder, if you're curious.)

This all sounds good, but... what if you *didn't* want people to be able to read it? People who write viruses, for instance, don't want you reading the code they want to run on your computer, but they're not the only ones. What if you were trying to sell code you'd written, but which anyone who ran could see and thus rip off? Or, what if you were basically giving your work away for free, but kids in poor countries were ripping off your stuff and selling it to unsuspecting rubes as their own work?

This is basically what happened to Yanfly, and is why he stopped writing plugins for MV. He came back to write plugins for MZ as part of a group called VisuStella, and most of the huge number of plugins they've already released are refinements of Yanfly's vast library, with one difference - VisuStella's plugins are obfuscated.

Code Obfuscation

While people usually give the JavaScript 'interpreter' text files with human-readable code, it doesn't actually have to be human-readable for it to work. There are all sorts of ways to scramble up the stuff you'd written and still have the computer be able to do something sensible with it. This process of turning human-readable code into gibberish that the computer still understands is called obfuscation.

Since the MV version of TPE relied heavily on Yanfly's plugins, that meant the MZ version would have to rely heavily on VisuStella's. And that meant that the MZ version of The Proteus Effect would use a whole ton of obfuscated code. At the beginning of this process I thought that would be okay, but I've come to realize it is not.

Why Code Obfuscation is Bad

Why is using obfuscated code bad? A few reasons. First, I don't have any idea how the code's doing what it does, so if I want to add some feature or bit of functionality that conflicts with, adds to or changes something affected by the obfuscated code, I simply won't be able to do it. That's bad enough, but a more serious issue is that if something breaks I won't be able to fix it.

As things currently stand, if there's a serious error you'll see an error log of some sort, you can send it to me, and that can give me a place to start tracking down the problem. I can review all the code in the whole dang project, find out where the problem is, and fix it. Or, if it would require more skill or time than I'm able to devote, I could hire someone to do it. This isn't a theoretical problem - all kinds of things can break systems in serious ways - Windows updates, architecture changes (lookin' at you, Apple), there are any number of things, really.

With obfuscated code, I lose the ability to do that. The only people who can fix or change obfuscated code are folks with the original, un-obfuscated code. And that ain't me. Now, the VisuStella folks seem nice, and they were very helpful when I asked them questions once, but will they always be? What if Yanfly gets hit by a bus? What if they really hate gender-bending futa porn? What if they all decide they're tired of making plugins and instead move to Cancun to teach scuba diving? As things stand now, I have total control over the future of the project, and can - with enough time and/or money - fix any problem that may arise. Moving to MZ I would lose that. So I'm not going to move the project to MZ.

What changed my mind? Well, there was one small but very important part of the combat system VisuStella hadn't gotten around to porting yet, so I'd tried to do it myself. And I got it working, except for one little thing. So I fixed that little thing, which caused some other little thing to break... repeat this process a few more times, and I realize that I simply can't do it while such a huge portion of the codebase is a black box. Then I imagined how many more similar situations might come up in the course of future development, then I considered the possibility that there could be, at this very moment, a bus out there somewhere with Yanfly's name on it, and then... Well, I realized that giving up control of the codebase - the ability to change anything and fix any problem - for a project you care about was sheer lunacy.

Maybe We Don't Need MZ After All

The biggest reason I wanted to port the game to MZ was because of MZ's vastly improved performance. The thing is, most of that improvement wasn't because MZ's core engine is written better - though some of it is - it's because they use an updated version of the graphics libraries and nw.js (the 'browser' the game runs in.) And I discovered it's not actually all that hard to update my MV project to use those versions, too. And that's what these releases represent.

Now, this release probably won't blow you away, but from my testing it does run noticeably smoother, and the weird hangs and jankiness are basically gone. There are still some remaining performance niggles, but I think in time I can address those through clever use of preloaders. So, I think I can get almost everything I want for the project without giving up the ability to handle whatever may come in the future. So that's what I've decided to do. After thinking about it, choosing to do anything else would have been foolish.

On to 0.10!

So, unfortunately, I've wasted a month. On the good side, though, I've avoided making potentially a very serious mistake, one that could essentially doom the project.

That means next up is - the next release! I thought about doing one with just the H-scene and engine update - kinda like I'd planned earlier, but without MZ - but concluded that would just be silly. So, I've started writing 0.10. I'm still in the planning phase right now - figuring out exactly what I'm going to include and what the general contours of the quests are going to be - but I'm glad to be back to the actual creative work again. My plan is to have it out in 3 months. I think it's doable; I don't know if that's what it'll actually end up being, but that's the date I'm putting on the wall.

I'm also going to put out at least one more 0.9.x release - that one will include the updated engine and graphics libraries (the stuff in the test build) but it will also do something I've been meaning to for a while - clear out my bug backlog. I have a huge list of (mostly minor) bugs that have been... *bugging* me for a while, so I'm looking forward to cleaning up my room, taking out the trash, whatever metaphor you want to use. Spring cleaning is comin' early to Chez Proxxie!

I wish I had better news to report, but thinking about it now, I really think I (we!) dodged a bullet by calling off the MZ port. I'm happy to be back to writing, I think 0.10 is going to be a lot of fun, and I'm excited to see what the year will bring! Thank you for your support - and Happy New Year!

Comments

Anonymous

Hm... I'm not familiar with how these particular packages work, but usually un-minified source is included with published packages, at least for open source libraries (ie: npm). It'd a shame if these game plugins for RPG Maker aren't open source, since that means fewer people get to contribute and help refine the platform.

proxxie

It's not just that they're minified, they're actively turned into gibberish. Like, all the function names are hex codes, as are all the variable names, and they construct things in really bizarre ways that makes it more difficult to figure out what it's doing. It's mostly just this one group that's obfuscating, though. Most all the other plugin makers release their stuff in plain old human-readable .js files. But the group that's doing obfuscation has by far the largest, most complete library and also had their stuff out way before everyone else. It's definitely bad for the community. It's more difficult for other plugin makers to make their stuff compatible with these guys, and if they don't, people will complain (since everyone uses them.) I used to have warm, fuzzy feelings about most of the folks involved with this plugin team, but I no longer do.