Oh! Seem to have missed that. We’ll have to seee if I can actually do anything with this, but from a glance probably not. Still, thank you!
Edit: Aye, as thought I couldn’t really understand a thing about that. Ah well.
Uhhhh… Have some time so may as well write up a bit on how I did this in case anyone else wanted to try and experiment and play around with it. Or what I remember anyways. Again, apologies for any incoherent ramblings. Likely pointless to put this here, but I like sharing knowledge, even if I’m a dumb.
Lots of rambling and stupid stumbling into 'explaining' the process I took.
Starting up, I’d used FEBuilder and installed the Skill System, simple enough, from there throughout testing imported a custom build via the Advanced Editors > Skill Custom Build. It’s apparently inefficient to do it this way, but I know nothing about buildfiles and stuff, so I can’t compare. For reference if you are unfamiliar, this is the skil system I initially used to customised (Well, a quite older version I’ve yet to update)
GitHub - FireEmblemUniverse/SkillSystem_FE8
Of course you’ll need the ASM-related stuff you also need to edit skills, but this is under the assumption you’ve already sorted through all of that.
Now to start the editing! In the Skill System main folder… EngineHacks > Necessary > GrowthGetters there are growth things, naturally! I just copied the ‘Get_Luk_Growth.s’ twice, one is replaces ‘Luk’ with ‘Con’, and the other with ‘Mov’, this is what both of those generally look like.
.thumb
.org 0x0
.equ ClassGrowthOption, Extra_Growth_Boosts+4
@r0=battle struct or char data ptr
ldr r1,[r0]
add r1,#35
ldrb r1,[r1] @con growth
ldr r2,ClassGrowthOption
cmp r2,#0
beq GetExtraGrowthBoost
ldr r2,[r0,#4]
add r2,#34
ldrb r2,[r2]
add r1,r2
GetExtraGrowthBoost:
mov r2,#17 @index of misc boost
ldr r3,Extra_Growth_Boosts
bx r3
.align
Extra_Growth_Boosts:
@
Comparing that with the ‘Luk’ one, not too much different, the first ‘add’ bit replaces the #34 with #35, and the one lower down replaces the #33 with #34, then assuming you get what’s happening here, the ‘Mov’ file instead shifts up by +2 instead of +1, so the #35 would instead be #36. I’m not doubting there’ll be glitches somewhere doing this, but this is just fun experimentation, I’m not expecting it to be 100%, hehehe.
As for the #17 you see here, that was just so it didn’t conflict with the proper luck growth things, probably would’ve changed to like #37/38 instead.
Here’s where those two tie into in the Character editor for visual reference~
Then from there, drag your two .s files into the AssembleARM file that should be there, that’ll make .dmp files the skill system’ll actually read.
After the the ‘GrowthGetters.event’ file will have more Growth stuff don’t actually know what it does, but I assume it makes the game actually read the growths. Here you’ll just need to add the new growth files you made.
//Growth Bonuses from skills are located in the GrowthSkills folder
#include "GrowthBonuses/GrowthBonuses.event"
ALIGN 4
Growth_Bonus_CalcLoop:
POIN BlossomGrowthModifier AptitudeGrowthModifier MetisTomeCheck ScrollsCheck
WORD 0 //Terminator
#ifndef USE_STRMAG_SPLIT
ALIGN 4
Growth_Getter_Table:
POIN Get_Hp_Growth Get_Str_Growth Get_Skl_Growth Get_Spd_Growth Get_Luk_Growth Get_Def_Growth Get_Res_Growth Get_Con_Growth Get_Mov_Growth
#else //USE_STRMAG_SPLIT
ALIGN 4
Growth_Getter_Table:
POIN Get_Hp_Growth Get_Str_Growth Get_Mag_Growth Get_Skl_Growth Get_Spd_Growth Get_Luk_Growth Get_Def_Growth Get_Res_Growth Get_Con_Growth Get_Mov_Growth
#endif //USE_STRMAG_SPLIT
ALIGN 4
Get_Hp_Growth:
#incbin "Get_Hp_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Str_Growth:
#incbin "Get_Str_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
#ifdef USE_STRMAG_SPLIT
ALIGN 4
Get_Mag_Growth:
#incbin "Get_Mag_Growth.dmp"
POIN Extra_Growth_Boosts|1
POIN MagCharTable
POIN MagClassTable
WORD USE_CHAR_AND_CLASS_GROWTHS
#endif
ALIGN 4
Get_Skl_Growth:
#incbin "Get_Skl_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Spd_Growth:
#incbin "Get_Spd_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Def_Growth:
#incbin "Get_Def_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Res_Growth:
#incbin "Get_Res_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Luk_Growth:
#incbin "Get_Luk_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Con_Growth:
#incbin "Get_Con_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Get_Mov_Growth:
#incbin "Get_Mov_Growth.dmp"
POIN Extra_Growth_Boosts|1
WORD USE_CHAR_AND_CLASS_GROWTHS
ALIGN 4
Extra_Growth_Boosts:
#incbin "Extra_Growth_Boosts.dmp"
WORD Growth_Options
POIN Growth_Bonus_CalcLoop
Congrats, growth rates exist. Not that they actually do anything yet! You’ll need to do the first bit with Get_Luk/Con/Mov_Growth again later, but I’ll get to that.
I doubt this next bit is properly ‘necessary’ in itself, but it’s nice to just cover everything. I think this this all just for the menu stuff but it’s not impossible it somehow deals with actual growths. Back out from the ‘GrowthGetters’ and into the ‘ModularStatScreen’ folder, from there open the ‘ModularStatScreen.event’, near the bottom you’ll see the same growth stuff as right up there from the previous event file, just add th growths in there again and that’s it for here. Into the ‘asm’ folder, and the ‘Write_Growths_To_Battle_Struct.asm’ here.
At the top you’ll see a table of growth stuff, here’s what I did with it~
.thumb @if you don't put this, the assembler assuming it's in ARM mode, which would be a Bad Thing
.org 0x0 @not necessary if 0, but I put it anyway out of habit
@setting up the literal pool
.equ Get_Hp_Growth, Class_Level_Cap_Table+4
.equ Get_Str_Growth, Class_Level_Cap_Table+8
.equ Get_Mag_Growth, Class_Level_Cap_Table+12 @ If strmag split isn't installed, this will be 0, and code inserted in here will do nothing.
.equ Get_Skl_Growth, Class_Level_Cap_Table+16
.equ Get_Spd_Growth, Class_Level_Cap_Table+20
.equ Get_Def_Growth, Class_Level_Cap_Table+24
.equ Get_Res_Growth, Class_Level_Cap_Table+28
.equ Get_Luk_Growth, Class_Level_Cap_Table+32
.equ Get_Con_Growth, Class_Level_Cap_Table+36
.equ Get_Mov_Growth, Class_Level_Cap_Table+40
.equ Growth_Options, Class_Level_Cap_Table+44
'Course that’s not all. Moving down you’ll find growth functions. The last of this group will be the Luk growth, I just copied the Res bit twice, changed the first copy to the Luk bit, then the second to Con and the existing Luk to Mov, like so.
ResGrowth:
ldr r0,Get_Res_Growth
mov r14,r0
mov r0,r7
.short 0xF800
mov r14,r6
.short 0xF800
mov r1,r7
add r1,#0x78
strb r0,[r1]
add r5,r0
cmp r4,#0x0
beq LukGrowth
cmp r5,#0x0
beq LukGrowth
b CheckCaps
LukGrowth:
ldr r0,Get_Luk_Growth
mov r14,r0
mov r0,r7
.short 0xF800
mov r14,r6
.short 0xF800
mov r1,r7
add r1,#0x79
strb r0,[r1]
add r5,r0
cmp r4,#0x0
beq ConGrowth
cmp r5,#0x0
beq ConGrowth
b CheckCaps
ConGrowth:
ldr r0,Get_Con_Growth
mov r14,r0
mov r0,r7
.short 0xF800
mov r14,r6
.short 0xF800
mov r1,r7
add r1,#0x46
strb r0,[r1]
add r5,r0
cmp r4,#0x0
beq MovGrowth
cmp r5,#0x0
beq MovGrowth
b CheckCaps
MovGrowth:
ldr r0,Get_Mov_Growth
mov r14,r0
mov r0,r7
.short 0xF800
mov r14,r6
.short 0xF800
mov r1,r7
add r1,#0x47
strb r0,[r1]
add r5,r0
cmp r5,#0x0
bne CheckCapsLadder
cmp r4,#0x0
bne CheckCapsLadder
mov r4,#0x1
b HpGrowth
I’m going to take note of the ‘add’ function here as well, the Res one has #0x78, while Luk has #0x79, I changed the Con one to #0x46 and Mov to #0x47, both of these things are unknowns but apparently 0x46 is used for AI, while I assume there’ll be no actual conflict since actual statups are used for playables and not NPCs/Enemies if you want to change it to be safe 0x3B seems to also be unused, I hope.
Lower down there’ll be a second set of these growths for fixed growths, it’s near enough in how the previous were done, copy stuff, change names, change the IDs they read from. Aaaand that’s all I know from here, I assume the bottom pointers arehandy to know about, but y’know dumb so I don’t understand the data they point to at all. Save, drag the file to the ‘AssembleARM’ batch file again, and that’s that for this.
From here back out from those folders, instead into EngineHacks > ExternalHacks > StrMagSplit
Here you’ll see… GrowthGetters folder again! Just do the same stuff as was done the first time, simple! You might be able to just copy the previous files buuuut I dunno, maybe just redo stuff to be safe.
Back into the main StrMagSplit is the _MasterAsmInstaller.event file, you’ll near immediately see ‘//#define ExpandedLevelUpScreen’. Just remove the two slashes and that’s it, this’ll make the level up popup show CON and MOV.
Aaaand that’s as far I know/think I know so far. I won’t be surprised if this is all totally wrong, but it was fun to play with anyways.