Hey people, now you might be thinking this blog post is late but we were actually totally planning on delaying it an extra day because… Uh… Freedom I guess? Listen, things just happen sometimes… So now that we’ve got me making yet another blog post, let’s talk about something dealing with mechanics and design!
Let’s see… Well for one thing I’m hoping to be able to fit a nice quality of life improvement into the trophy trader. People were asking to be able to trade in multiple trophies at a time and I think that’s a good idea so why not! It’s a bit of a slow process though, because while I could turn the whole trophy trader process into some script stuff to make it dynamically generate the proper text, choices, and all of that at this point that’d honestly be more work than just hard-coding it, but hey why don’t we take this opportunity to talk about what I mean by that, as a little insight into my thought process for other aspiring game designers!
So, let’s take any one trophy trader to start with and break down what goes into the interactions with them in their current incarnation, I’ll even open up RPG Maker to get this completely accurate. First up is a small introduction to the shop, and then a tutorial about what the trophy traders are if you haven’t seen it, and then the trader asking if you want to trade, this is going to have to be hard-coded either way so it probably wouldn’t be until after this point that I’d begin a script if I was designing one.
First there’s a little bit where they say hello, and if it’s your first time visiting a trophy trader they explain what they are, pretty straight forward with no real variability to it so that’d be left to the event editor no matter what.
Next comes the Yes/No option, those pretty easy to add in RPG maker even in script format all you need is to create an array that has the name of the options, tell the program to throw them at the player, then the player selects something and it’s returned to you, from there you use a case/select conditional (basically you input a variable and it compares it to various predetermined results that you specified) to determine what you do. If the player chooses ‘No’ you show them a dialogue box (these are more complicated as you have to specify the image the face you’re using is found, which of the 8 faces on that image you’re using, then specify the text where you’ve got to be considerate of formatting and won’t have feedback on when it clips outside of the box, then combine it with a few other pieces of code to make sure that it’s a new separate dialogue box instead of just changing an existing one, not hard per say but there’s a lot of details that you have to double check outside of the programming area to make sure it all works) and then let the event end, simple enough. If they choose ‘Yes’ and you’re using the RPG Maker editor you drop a label so that you can immediately jump back here later so that players can keep trading trophies. So if I were to make this into a script, I’d just move the entire process from here on out into another function so that I can easily make the process loop around to this point, either way you then need to make sure the player has at least 25 silver otherwise you drop another dialogue box about them not having money and end things, conditionals like these are very easy.
If they do have the money another dialogue box about what they want to exchange, a list of Shiny Bits, Monster Fang, and Pocket Tome then come up (with an extra option if the player chooses to exit out), the player chooses one and from here on out we’ve got to keep track as to what you’ve done, so what I’d probably do is drop a variable that contains the item ID of which one you selected and go from there. We also have to make sure that you’ve actually got at least one of those items, otherwise we need to send you back to the trading screen so that you can change your selection (after a dialogue box of course), then we ask you what you want to receive and here’s where switching to a script format would start to benefit us.
See, with our current manual system we obviously have to manually keep track as to which area we’re in (by this point there’s already so much in the event that it can be easy to forget if you’re in the ‘Pocket Tome’ or the ‘Monster Fang’ sections), while in a script as I’m generating the array of choices for the player I can basically just say, “Add Monster Fang unless variable == X” making it easy for the game to auto-generate the options needed, so if we ever added in a fourth trophy we’d definitely want to switch to scripts so that we wouldn’t have to redo 16 different choice selections (probably more due to a few story events but irrelevant to my point). This is kinda what I refer to when I talk about generating stuff dynamically, I’d code stuff in a way that I as the game designer don’t need to know if you’re in Westcastle trading in a Monster Fang as I teach the game how to do it, so if we add in a fourth trophy I spend 5 minutes adding in a few extra options where it matters and let my code handle the rest, but as I said that’s not what we’re looking at so even if the hard-coded stuff takes longer to search for bugs, typos, and all that it just makes more sense to spend my time adding in new stuff than changing existing stuff that works just fine.
So then we’ve got a dialogue box, reducing the player’s gold, decreasing the trophy they’re trading in and giving them the one they want, then yet another dialogue box but this one specifies the name of what you chose, so from a scripting perspective I’d need to have stored the trophy you want to receive in another variable then dynamically generate the text that’d go inside this dialogue box by checking that variable and adding in the name of the relevant item. After that we throw them back to the beginning of that ‘Yes/No’ option so that they can do more trading if they want to and that’s what we’ve got. It’d be annoying to turn that into scripts and we’d need to keep track of which city the player is at to make sure that we show the right faces and dialogue from the trader, but it’s just busy work there… But that’s what we’ve already got, let’s look at what I want to add in.
So what I want to add in is simple, after the player has made decided on what they want to trade in and what they want to receive we’d need to ask them how many they want to trade, so give them a number input box, store that into a variable. Since the code in the number input box is rather limited, the best thing to do here is to show the player their money while they do this and store the inputted number into a variable, after that if the player entered 0 then we just treat that as ‘cancelling’ and let them leave, if they enter 1 then we go through with the old code, if they enter 2 or more we now need to verify they’ve got enough of the chosen item and enough money for this transaction, if so we go through with it and specify how many of the new trophy they’ve received. There’s nothing too complex there, but if you recall the trader says a line as you receive the new trophies, plus since the existing code is already hard-coded this means that even if I made a script to handle just this portion I’d still need to customize the script call to specify what the player is giving, receiving, and where they are, then program into it several dialogue responses depending on the location, or what I do is I basically create all of that with events, copy and paste it, but change the conditionals and comparisons along the way… Hmm… You know when I say it like that, doing this new part all in scripts actually wouldn’t be that bad since I’d only need to store in 4 dialogue boxes that are location based, and then I have a 5th box that has it’s text dynamically generated. It’s still going to take some time to get it in either way but hey, look forward to it!
Now, since I’ve finished that rather dry talk there, what else is there…? Oh, not sure if it was mentioned in the release notes but the achievement system should have gotten an update to include a tracker as to your progress towards any achievements you’ve unlocked hints for! Now if only I could remember if that was added into the 0.40 release or the 0.41 mini-release….
Ah! So I appreciate all the feedback that I got on ‘tanking’, after some discussion with NoMoshing we decided that the core of the issue dealt with how AoEs were just too potent (effectively doing 400% damage and status effects compared to their single target versions) I had shared some of the math breakdown of say Force Barrage (Damage type AoE force spell that gets a lot of complaints) and how statistically speaking getting 1 or 2 knockdowns when it’s used against you is more likely than 0, though I had gotten some of that math wrong the point is that AoE abilities just really break the action economy, so instead of trying to make tanking better so that you can take AoE hits a lot easier we thought it’d be better to instead roll out a balance to AoEs themselves by having them scale in effectiveness based on the number of targets you’re looking at. What this would mean is that while you will always do more total damage and have a higher potential of inflicting several status effects the more targets an AoE has, the damage and chance of infliction will be decreased on any given target as there are more of them (so if there’s one boss it’ll take damage/statuses as normal, but if there’s say 4 bosses each of them will be taking 50% damage and have 50% chance of status infliction, but it’ll total up to 200% damage and a higher chance of inflicting statuses in general).
I’m still not entirely sure what numbers I want to use, and I made sure to wait until after the mini-release to add this in so that the first people who have to deal with it are testers to get their help in fine-tuning things. I understand this probably isn’t going to be the most well received choice as it’s going to make your mages in general pack less of a punch, but it should serve to greatly curtail a lot of the issues seen in say force barrage (and to clarify, if you set it up so that you have your tank take the hits in everyone’s place, each individual hit will still be reduced to 50% effectiveness on damage and status as it still had 4 targets). Evocations will not be impacted by this since their unpredictability already serves to debuff them against many targets, they have a static number of hits, and the momentum requirements of them already makes them a generally undesirable type of magic to many players. Feel free to share your questions, comments, or concerns here, on the forums, or on the discord and I’ll do my best to respond to them!