[FE7] Item-based branching promotions

Another note from testing - assigned the bolt and the knight’s crest to cavalier (lances only) to go Ranger (sword/bow) or Paladin. Still only the first item listed for the class was usable, so I tested the Ranger promotion. He forgot his lance weapon rank with 0 wexp gain, had a D by default. Gave him a fight’s worth of wexp, promoted him and he just had a sliver of an E rank.

Have you used the patch I made? I made some fix to make it 3 byte/data (previously 4 byte/data).
This is the image of using item in prep screen

This is the image of using item in the mids of battle

Posting your hex from 27408 (until 2744C) will help (I guess, since I have no trouble in using promotion item after applying the patch).

Fuck yeah

I’m curious to know, how difficult would it be to restrict item use by character instead of by class?

Additionally, since I’m now not sure which patch I need to use, can you “promote” into other T1 classes with this?

Did we just make a way to reclass characters?

1 Like

Awesome; sadly palette support seems to not be a thing for both classes; perhaps some kind of alteration of the character palette setting to be similar to fe8’s?(2 seperate palette options)

fuck yeah indeed

yeah tier 1 to tier 1 should be possible just by the logic of how promotion works :stuck_out_tongue:

if you were to do that I think you’d find it easier to just expand your class table and give your characters unique T1 classes. (e.g. if it’s a cavalier just expand the class thingy, make them class 0x80 or something and then just make that identical to a cavalier except for promotions)

I seriously do not know why no one does this as there are like 0x90 class slots not used by vanilla FE7

Edit: or you could do what he said lol.

@Agro
To restrict them into character, just change 6D into 2D (the 5th byte). Though using this method means a character will have unlimited potentials. To add restriction into class AND character, you need to add a few lines.
(not that hard. As long as r5 isn’t changed, ldr rx(r5,0x00) will load character pointer and ldr rx(r5,0x04) will load class pointer. Do ldrb ry(rx,0x04) to load the class/character ID (and remember that x and y are two of r0,…,r7). Please refer to GBATEK for the instruction.)

Honestly, if it were just an array listing XX (charID) YY (classID) ZZ (paletteID) for determining the palette we could have even more than two promotion branches, and it’d also make generic palettes much more compact in terms of using up character slots.

And then we’ve simultaneously freed two bytes in the character data and one byte in class data to do all sorts of wacky shit with.

Some brainstorming notes, but using this in conjunction with @CT075 variable levels hack, you can create a trainee villager unit, for example, and allow them to use every promotion item to determine their T1 class.

Knight’s Crest → Knight
Orion’s Bolt → Archer
Coat of Arms → Soldier
Hero’s Crest → Mercenary
Guiding Ring → Mage
Elysian Whip → Pegasus Knight
Marauder Seal → Thief
Wyvern Flute → Dracoknight

This is what I had in mind for the FE1 remake. Dunno what to do with the actual Villager though in terms of weapons and such. FE2s use swords, 13’s use lances. We’d need to be able to drop weapons via promotion for this to actually pan out. But it’d be interesting to have ROM hackers handling the Villager better than FE13, for sure. There’s much potential.

@Arch

It seems that using the format is impossible since the palette used in every battle is directly loaded from character table. However, we can make another table so that every pair of class and character has its own palette.

P.S. Is it good to have each promotion owns its own level requirement?

@theP.S.: That would be interesting as an option, at least.

you could probably introduce a new field in the character struct that is a pointer to a series of XX YY halfwords, where XX is the class ID and YY is the index in another table that lists every unit palette

…idk about anyone else but my default approach to “not enough space in struct” is “let’s make a new table!”

At first, I think that this listing will be put into promotion list. That’s why I said it’s impossible (Misinterpretation leads me to the wrong answer). It seems that the palette function is stored in 5322C, and the value is not byte, but halfword (so we can have XX YY ZZ ZZ format).

Update version of the patch. Including the Nightmare module.
The promotion table is changed into 4 byte (added promotion level requirement).

Download here

Okay so I applied this to Fire Shell just using the patch, went to D90000 and ported that data to BE0260. Changed the pointers at 2981C (from 01 00 D9 08 -> 61 02 BE 08) and 27444 (from 14 00 D9 08 -> 74 02 BE 08). The promotions work fine, but I’m running into the same problem as last time I fiddled with this where the second promotion item listed for a class is still unusable.

The promotion array is all set up with the default promotions. I set up Mercenary using the Orion’s Bolt to go Nomad Trooper to test this.

http://puu.sh/9Ngf1/1cd9a09c40.png

Halp?

Sorry for late mentioning it. The current patch is v2 (the one with compressed files), with 4 byte of data per entries. It seems that the one you use is the first patch, which has 3 byte of data per entries. Currently I’m trying to fix the second patch (v2), in order to be able to handle interrupted promotion (so the table maybe shifted once more)

Edit. @Arch. Thanks for telling me the bugs. Update file. The current patch is v3. Same download link (the table has been shifted into 08D90080).

If i have 08D90080 Ocupied, what should i do? How much space does that table take? Is there any conditions on wich offset should i use? And about palletes, is that issue fixed?

I finally aplied this great patch to my hack, and it works so far, without pallete support, but now i have an issue…I want my knight class 15, be able to promote to class 67(Great knight) but so far game frezes each time i try it, it worked on palladin and even king Class 61, BUT 67 is not working What should i do? Is there a number i should change? My class list is efectively repointed and expanded…

I just fixed the issue, but now, i think the same structure you are using could be used for palette changing, if we have char ID XX, then Class ID YY and the last byte goes to pallete ZZ it could be wonderfull…