KanameChidori is correct.
Anyway, that was a nice break to look at fun things, let's look at more practical ones. Gonna put the PSP model format thing on the back burner again for the time being.
(Completely unrelated: it turns out the PSP games still use the PSU player animation format. This may mean I can bring in those two new nanoblasts, or at least their attacks, but no promises.)
So... how about that unit rework.
Not going to lie, it's easily
the most complex thing I want to do. The game seriously gives me next to no help at all here, I need to rewrite most of the unit-handling code. As a result, this is somewhere between a 3 and a 4 on the plausibility scale
. Main thing keeping it from being a 4 is that I really want it...
This is still in the planning stages. Let's see what we're looking at here.
1. User Interface
PSO had a special menu for equipment, allowing you to equip a unit to whichever slot you wanted. PSP2 and Infinity had a special menu on armor, allowing you to equip a unit to whichever slot you wanted. PSO2 has a special menu for equipment, allowing you to equip a unit to whichever slot you wanted.
PSU has... an inventory with an "equip" button, allowing you to equip a unit to whichever slot the game
wants. There is no "equip unit to slot" menu (nor an armor palette, for that matter--that was a pretty cool thing in the portable games), there is only an "equip unit" button. So... what can we use here?
Turns out there's a generic menu. It's used for pretty much everything in the options menu; feed it a list of text strings, it returns the index of which menu item you end up choosing (iirc -1 if you cancel). In theory, that would be usable here; fill in the list of equipped units (or "None" for slots that have nothing), then take the output and feed it in as "slot to equip". Piece of cake, just need to learn how to use it.
2. Data Format
PSU (and all of its derivatives) doesn't have a single "unit" type, it has 4 different ones. Each type has its own set of stats, and they're not the same size (iirc arm units are the smallest). A given unit's stats are loaded onto the stack (so they get copied around from place to place, and updating the size would require editing _everything_ that ever loads one, where it would crash if I got it wrong...). Regardless, somehow I want to make it so a single unit can have whatever stats I want.
The options end up being...
a) Combine all the units into one uber-unit type, then edit the size and everything that loads it anyway (I know I literally just said this was a terrible idea).
b) Leave the unit types separate, but make each unit include multiple. In other words, if I wanted an equivalent to God / Ability (+all stats), it would internally be 4 units: a +TP/MST head unit, a +ATP/ATA arm unit, a +DFP body unit, and a +STA extra unit. This would mean I could still use at least _part_ of the existing code (in theory), but it'd be harder to understand, and it means I can't add anything on units.
c) This is a dumb one. Combine the unit types into a single combined unit type (as in option a), but don't change any of the stack code. Instead, upon reading a unit, dump a pointer to the unit somewhere relatively irrelevant in it (so something on the second page on the stat display), then when any of the stats are needed, use that
instead of the stack copy. Means I can do whatever I like to the data format without breaking things, but I'd have to rewrite everything
3. Equipping the Unit
PSU doesn't really understand having multiple of a single unit category. There's one slot for head units, one for arm units, one for body units, one for extra units. There are a couple different "which unit is equipped" lists, keyed off of different things (one's based on item number, one's based on the unit slot in the unit data (as mentioned in part 1)), there are a couple lists of stats for equipped units, there's a section dedicated to extra bonuses (e.g attack speed)...
Long story short, this all needs to be updated to support multiples. On the other hand, this is legitimately a pretty short story; "update the things to load from whatever I decide for section 2". This means I need to take the existing lists and change them to be based on slot ID rather than unit type, I need to make sure it reads the current stats rather than 0... basically, this has a lot of things that could be really fiddly.
There is one complication, though! Speeds, ranges, and PP cost modifiers are integer values, and small ones at that. Start at the average, go one direction, it gets better, go the other, it gets worse... but not linearly. PSO generally went with taking the highest modifier you had at the time (e.g having a God / Battle and a Devil / Battle simultaneously would be equivalent to having only a God / Battle), but it strictly had bonuses, and it only really had the one (note: PSOBB also had tech speed and TP cost ones, but only one of each!). PSU, on the other hand, is filled with "bonus to striking, penalty to ranged", "bonus to power, penalty to PP costs", "bonus to speed, penalty to range" units, and if you could throw on a Har / Quick and unlimited numbers of TECH charge units, it would be potentially kinda broken.
a) Take the highest bonus or
penalty. If you have a Har / Quick (+2 speed, or 200% castspeed), your Me / Concentrate (-1 speed, or 66% cast speed) won't do anything. If you use Hizeri / Concentrate (-4 speed, or 25% castspeed), your Har / Quicks won't do anything. Fairly simple, but I feel like if I include more complicated units ("this unit makes your melee attacks faster, but your techs cost more PP, and your ranged attacks have extra range; this other unit makes your techs cheaper and your ranged attacks cost more PP; a third unit gives you a lot more damage on all three attack types, in exchange for reducing their speeds"), it'll quickly turn into a mess of "I have no idea what any of my speeds/ranges/PP costs will end up being as a result of this". It also makes duplicate special bonus units worthless (one Har / Quick is equivalent to 4, but you're an idiot if you use 4 given it'll drop 200 TP). Note that HP regeneration units are explicitly "levels" (to match the auto-recovery from Giresta), so this isn't completely unprecedented.
b) Multiply the bonuses together. One Har / Quick triples your teching speed, four Har / Quicks give you 81 times the casting speed
. Plus side, this would have probably more than enough penalty on Charge units, minus side, it's... err... prone to scaling really
wacky if I don't heavily reduce the amount per unit.
c) Keep the bonuses the same as they are now, but add the offset. Har / Quick is +2, while Me / Concentrate is -1; if you equip both, it'll give you a +1. This means you'll be able to balance out penalties with weaker units (two Har / Quicks will cancel a Hizeri / Concentrate, etc), but the actual bonus will remain a bit opaque, seeing how a -2 is a bigger penalty than two -1s would suggest.
c) Take the highest bonus, remove units that have a penalty. If you're using a +ATP unit, you're not using a +castspeed unit, so that's penalty enough, right? This is PSO's approach. It keeps the "why have two Har / Quicks?" issue, but it's much easier to reason about.
d) (Most complicated) Completely change how they work. Get rid of the ints, convert it to a raw bonus ("Har / Quick is +50% castspeed"), add them together. Fortunately, the actual values have always been full bytes, so it's a bit of a waste to use it solely for a number from 0 to 15; this is the most understandable for players (I can even add a display for it, in human readable terms!), but it kinda requires... redoing everything that uses it, whoops.
This is, admittedly, pretty much the definition of a "nothing has changed" post, but I figured people would like the glimpse into the process behind the scenes. Also, if anyone has any opinions on the whole "speed/PP cost/range bonus" thing, let me know! I'm still debating that one, and that section in particular has a direct impact on people's experiences with the game.