Unpromoted Summoner Reset

Does anyone know if there’s ever been any kind of fix for the power of summoned units resetting if an unpromoted summoner promotes. The level of a summon is equal to the summoner’s level, so if you have an unpromoted unit who can summon, he’ll go back to making level one summons after promoting. If this editor was somehow expanded so that the summon could be set by the class of the summoner in addition to character, then the promoted class could summon a promoted version of the summon if used together with the patch that allows for the setting of different summoned classes.

It’s not a huge setback if that isn’t possible, but it would help with my next project. I’d say that I could just use the patch that makes level not reset after promoting and have a level cap of 40, but that can’t be used with skill system’s str/mag split, which I’d like to have.

If the unpromoted summoners are force promoted in a cutscene or something then you could potentially swap out the unit with a copy of that unit with summons at a different base level.

and unless you’re drastically changing how the summons are intended to be used it shouldn’t matter all too much, their main use in the base game is to be an enemy lightning rod with rock bottom defenses and hp stat, getting a free hit in with them will generally prove less useful in the base game.

I agree with theghostcreator. If you don’t want to learn to write ASM to code things the way you want it to be, then you have to live with things the way they are or force promote the character.

1 Like

I apologize in advance if anything I say below sounds really stupid because I don’t entirely know what I’m doing.

So after trying to follow Tequila’s Assembly for Dummies guide, looking through the summon ASM in FEBuilder, and some trial and error, I rewrote two of the bytes that check the operated unit during summoning to check class instead of character. By doing that, I’ve made the summoner table function based on class instead of character.

Just put in class IDs instead of character IDs for summoners. I have it working alongside skill system and the patch that lets you summon the support class of the summoned unit.

To make this work I wrote 40 to 807AD3C and 42 to 807AD6E in the hex editor.

However, the summon command isn’t deactivating when a summoner has a summon on the field. If the summon command is used again, the existing summon will disappear, and a new one will appear on the selected tile. If anyone has any guidance on what might be controlling whether the summon command is available, I would appreciate it.

If anyone is interested in trying this for themselves, please note that any summoner units must be different classes.

1 Like

Try writing 40 at 8024410, and 41 at 802443E (in addition to what you’ve already done). I found that this seemed to function properly.

1 Like

I thought your fix wasn’t working, but then I thought that perhaps it was skill system getting in the way and that seems to be the case. I tried it in a new ROM without skill system and it’s working. Skill system must move the check for whether a unit can summon elsewhere. I set breaks on the entire area that FEBuilder calls “Summon Command Usability” in No$gba and it never paused until after the command menu was already displayed.

I tried to see if having the summon ability checked instead of the summon skill made a difference and it doesn’t. Skill system must take over the ability either way.

It’s probably not even the biggest deal in the world if a summoner can infinitely “Rescue” his summon, but if it’s in the game, I know I’ll get that one guy who comments “I had the summoner summon for 160 turns to max his level and steamroll the game.”

Ah, yeah. Skillsys uses this:

So you’d want to find where this code is installed, and edit it.

I found the skill system’s Summon Possibility Check at 08B4F4FC, but I haven’t had any success with disabling summons for those who have already summoned by adjusting the values. It’s really odd because parts of it have the same structure as the vanilla check, but changing the values that correspond to the ones that work in the vanilla check don’t seem to do anything.

But I tried changing every value that checks the operating unit to a class check, but it doesn’t seem to be affecting anything. The only time when anything changed is when 08B4F500 and 08B4F518 are changed at the same time then no one can ever summon.

This isn’t really helpful from an ASM perspective, I realize, but one idea for balancing this is you could set it to do the “regard promoted units’ levels as +20” thing that the EXP formula does, then set summoned unit level equal to “[summoner ‘total’ level + 1] / 2” (the +1 being there to prevent level 0 summons from a level 1 character, though that may not be a a concern in this particular case).

All right, I think I’ve got it!

After a lot of testing and actually having to learn what was going on beyond just looking for references to the operating unit, I realized that in my test ROM, the game was reading 0 anytime it was looking to the summon table. And it turns out that the reason writing to analogous addresses wasn’t working was because the summon table was broken. I went back to test it, and it looks like it isn’t safe to expand the summon table after shrinking it if SkillSystem is installed in FEBuilder. This is not related to my editing and seems to be an FEBuilder problem as it occurs in ROMs with no editing other than a skill system install.

I had got this pop up:

Screenshot 2021-07-22 215630

But I wasn’t sure what it was trying to tell me. I had thought it was something to do with FEBuilder’s error reporting, like it was trying to run a check of whether all the units with summons assigned had the summon skill, like how it will tell you that an axe unit doesn’t have animations assigned for all throwing axes (something I’m familiar with because of my hack having a PRF throwing axe that I didn’t bother to assign animations for to classes that wouldn’t be using it). But if this pop up comes up, it means Skill System’s summon table is broken and won’t properly check if a unit has already summoned.

Thankfully, I was working in test ROMs and haven’t broken my actual project.

Anyway, here’s what you need to do to have summons assigned to classes instead of characters:

To assign summons to classes write these two addresses:

0807AD3C->40
0807AD6E->42

To make the check for an existing summon work without Skill System write these two addresses as Epicer stated:

08024410->40
0802443E->41

To make the check work with Skill System write these two addresses:

08B4F550->40
08B4F58E->41

I can try to write an installer to use in event assembler if there’s interest in it.

I would note that with skillsys moving the summon usability check, there’s no one given address that the check would be at, as the address will vary depending on which version of skillsys is being installed, and what other patches have already been installed, due to how builder skillsys gets installed (buildfile users should simply edit the asm and assemble a new dmp, like normal).