Obsoleted Bytes in Fire Shell

It’s #Renaissance time baby. Can you smell it in the air?

The intention of Project Fire Shell is to provide a feature-rich, organize base for new ROM hackers to base their projects with. It comes with a lot of ASM modifications installed by default (mostly improvements that provide options for the user).

I was kind of inspired to think about this after seeing @Venno’s PRF weapons array in action - he took the fourth weapon ability byte and used it to correspond with this array. In doing so, his modification obsoletes several of the character/class ability and other weapon ability values once that’s implemented.

  • Weapon Ability 2: 0x02, 0x08, 0x10, 0x20 (0x04, the Dragonstone weapon lock, simply forces the game not to display the weapon stats - which is a useful functionality to keep).
  • Weapon Ability 3: 0x04, 0x08, 0x10, 0x20, 0x40, 0x80
  • Class/Char Ability 3: 0x01, 0x02, 0x04
  • Class/Char Ability 4: 0x10, 0x20, 0x40, 0x80

@Icecube’s promotion array hack obsoletes the byte in the class table that designates a promoted class. This hack also requires reading the battle palettes from a separate table (and this should probably be done for “custom animations” as well to retain that functionality), which frees up four more in the character table.

Using Fire Shell as a base, with all of these obsoletes functions, would seem to offer some exciting possibilities for those more skilled in assembly hacking. I’m just the community organizer. I know @CT075 used one of these bits to replicate the Starsphere effect from FE11.

I dunno, hopefully those more knowledgeable in this subject will find the possibilities interesting as well.

The idea being that this would look something like this. Just as a mockup. And this would be pre-installed for Fire Shell, and usable in tandem with these other hacks.

1 Like

Since the goal of Fire Shell is to be a brand new base for hackers to work from, are we planning on replacing things like events as well? Just a thought.

So do you plan on using the old promotion class byte and the palette pointer as new bitmaps?

Following up on some ideas bandied about recently, it wouldn’t be too hard to free up a ton of bytes by separating (where necessary the class/character ability bitmaps.

Ability 1:

  • 0x01: (Mounted Aid - make this class only?)
  • 0x02: (Canto - make this class only?)
  • 0x04: (Steal - make this class only?)
  • 0x08: (Lockpick - make this class only?)
  • 0x10: (Dance - make this class only?)
  • 0x20: (Play - make this class only?)
  • 0x40: (Crit +15 - could we possibly take this function and put it in an array with one entry per class, that would allow the application of hit/avo/crit bonuses for each class - makes a lot of the 7x basic class skills doable, and the hit/avo boosts from the DSFE games, would free up this bit)
  • 0x80: (Ballistas - make this class only?)

That free up the entire 8 bits here for additional character abilities.

Ability 2:

  • 0x01: (Promoted - make this class only?) / (Map “cannot trade” function to this?)
  • 0x02: Supply Depot (character only) / (Guerilla - Nintenlord’s canto after attack mapped to a separate ability, class only)
  • 0x04: (Mounted icon - make this class only?)
  • 0x08: (Dragon icon - make this class only?)
  • 0x10: (Pegasus icon - make this class only?)
  • 0x20: (Lord - make this character only?)
  • 0x40: (Female - make this character only?)
  • 0x80: (Boss - make this character only?)

A pickup of four free slots each (three each counting those two that I’ve filled in with an ability).

Ability 3:

  • 0x01: (Old weapon lock - freed by Venno’s new system)
  • 0x02: Use Magic stat (class only)
  • 0x04: (Old weapon lock)
  • 0x08: (Morph - apparently does nothing so free bit)
  • 0x10: (Prevents controlling - make this character only?)
  • 0x20: (Triangle Attack - make this character only?)
  • 0x40: (Triangle Attack 2 - make this character only/is this broken anyways?)
  • 0x80: (Glitched - fixed by Venno and now free)

Ability 4:

  • 0x01: (Gives no EXP - make this character only?)
  • 0x02: (Lethality - make this class only?)
  • 0x04: (Magic sealing - make this class only?)
  • 0x08: (Droppable - freed by Venno’s new system)
  • 0x10: (Old weapon lock)
  • 0x20: (Old weapon lock)
  • 0x40: Renewal (done by CC - make this character only?)
  • 0x80: (Old weapon lock)

And then, another proposed change (required for compatability with branching promotions) would export the palette and custom animation bytes to a separate array, freeing up room for four more bitmaps in the character data struct. Seems like more than enough room for quite a bit of creativity? :wink:

I see you taking my ideas to heart there :wink:

Last item droppable is worthless because it can be assigned with a hidden status. And if renewal is already done making it for both is easy
Also Venno’s “fix” for the glitched bit will either get in the way or have to be replaced to make that ability do something

Just sayin’ as always

The Morph bit does nothing btw. The Female bit makes mounted units use (20 - Con) instead of (25 - Con) for calculating AID. Gives no EXP also makes the unit immune to Lethality.

WRT Crit +15: I’ve made an array-based class function for crit and hit boosts like how you described. It might not be compatible with everything though. An avo boost would also be simple.

Avo boost would be good to have. As for compatibility:

[2:27:32 PM] Archibald: apparently venno’s done the crit bonus replacement thing
[2:27:46 PM] Archibald: I guess the only concern is whether modifying that conflicts with modular battle?
[2:28:24 PM] Jesus-Gandolf: No, since I use the game’s built in check for checking crit bonus…? Lemme check
[2:28:42 PM] Archibald: it adds hit and avo bonuses too
[2:28:53 PM] Jesus-Gandolf: ldr r5,[r4] @This segment checks for Crit+15 bonus
ldr r6,[r4,#0x4]
ldr r5,[r5,#0x28]
ldr r6,[r6,#0x28]
[2:28:56 PM] Jesus-Gandolf: Yeah uhhhhh
[2:29:00 PM] Jesus-Gandolf: It does interfere.
[2:29:06 PM] Jesus-Gandolf: mov r2,#0x40
and r2,r5 @Crit +15% ability
[2:29:16 PM] Jesus-Gandolf: I can easily change what bit it is if necessary though
[2:29:29 PM] Archibald: well it’d be reading from an array now
[2:29:35 PM] Jesus-Gandolf: Hmmm
[2:29:47 PM] Jesus-Gandolf: I can make the fix if you need it.
[2:30:11 PM] Jesus-Gandolf: Ask Venno to include the course for a routine to check if a character has boosted crit.

The crap, you renamed me to Jesus-Gando/alf? … I am somewhat okay with this.

Here’s the routine I use; it just replaces the check for the crit boost bit with a routine that loads a boost from an entry in a table indexed by the class ID:

    .thumb
@r4 = offset of unit data
@r2 = unit's crit
@r3 = offset in battle data to store crit to

@Paste output to 0x28D1C
ldr     r0,[r4,#0x4]@Loads class data
ldrb    r0,[r0,#0x4]@Loads class ID
ldr     r1, TableOffset
ldsb    r0,[r1,r0]@Loads crit boost (or penalty!)
add     r0,r2,r0
cmp     r0,#0x0@Make sure crit isn't negative
bge     Store
mov     r0,#0x0
Store:
strh    r0,[r3]
pop     {r4}
pop     {r0}
bx      r0
.align 2
TableOffset:
.long 0x08D04000@Or wherever you want your table to go

The hit/avo boosts would work similarly, except they don’t fit inline with the original routines so in an otherwise unmodified ROM you’d have to branch to free space first to write the code.

Why not load the byte from the array instead of checking if the bit is set
No offense seems like a waste of an ability

Is class/char ability 2 0x20 (Lord) used for anything?
Promoted Hector and promoted Lyn don’t have it set.

I think it does something I’m just not sure what it does

Let’s make it so that it’s enable seize?

That should be really easy

Does it increase priority targeting with the AI?

It doesn’t. Priority targeting based off of class ID is in all the GBA games, but only FE6 uses it.