[FE8] Modern c-skillsystem

233 4
3 4

Source code at at here:

Community repo
abandoned private repo

Release

v1.1.0-beta

v1.0.0-LTS (recommanded)


Traditional ASM hack generally requires modifying in assembly level. Many times it is even hard to say that the hacker himself can make it clear on the original functionality, which results in extremely low reliability and poor efficiency. There are also many of other problems, such as headache RAM space management, conflict on various functionality, limition on skill index bit width, etc.

Today, With the 98% progress of decomp project and extensive CHAX engineering practices (such as this, this, this, this and this…), We can review on existing work from a higher perspective. At such a stage that people’s understanding of the vanilla functionality mechanics has reached at an unprecedented level, I think it’s time to solve existing problems, and reconstruct C-SkillSys project closer to a modern software engineering.

Main features

  1. More diverse functionality features

    • 450+ skills have been introduced and with the bit width of skill index has been expanded to 16 bits, it can support up to 0xFFFF skills working at the same time in theory.
    • Each unit can carry up to 23 skills, 7 of which can be configured through the prepscreen freely.
    • Introduced a lot of new combat mechanics, such as ThreeHouses style hit rate decreases with battle range increses, Engage style combo-attack, etc. Combat calculation formula has been restructured so that we can get more reasonable calculation on damage increase and reduction, and thus a large number of FE-Heros skills were introduced based on that.
    • Reworked movement calculation ARM function enables more Heros style mobility skills introduced such as Flier Formation, etc. This also avoids serious performance losses caused by the introduction of Pass skill.
  2. Anim and UI effects

    • Reworked better interface on statscreen with FE6 style scrollable statscreenfx.
    • A variety of cool map anim effects for skills.
    • Introduce new features via kernel tutorial info during game-playing.
    • Reworked efxskill and map skill anim effects.
  3. Friendly for FEBuilder users

    • Proactively provide FEB patches. For non-developer users, you may just download Patches zipped directory in release and put it to <path-to-FEBuilder>\config\patch2\FE8U\. Then you can modify C-Skillsys data easily.
  4. Better performace

    • Now the kernel run on in-BL range space. For the function call, we can just use BL instruction ranther than slowly BLH.
    • Frequently called functions are placed in IWRAM and called as ARM functions, including SkillTester, map-task routine, some other judgements, etc.
  5. Higher code quality and stability

    • Modifications on vanilla functions followed the principles: Unless specific circumstances, the hacked functions should worked consistent with original.
    • Rigorous PR review based on decomp code.
    • Rigorous code style review.
  6. Better development control

    • All components are all generated at once via a make command.
    • Introduction of debug kit port from FEHRR enables developers use non-std IO functions (such as Printf) to debug on their modification.
    • More reasonable RAM space control. Now RAM space registration is designed very similar to a malloc function. Developers may just tell the kernel the size. And kernel may automatically maintain the physical address and overflow detection.

Use FEB to config your skillsys!

Modern c-skillsystem can directly enable users to configure the rom data in FEB via FEB patches. For now, 1.0.0-LTS version has been integrated inside latest version of laqieer/FEBuilderGBA from @MisakaMikoto

Feel free to use or edit or make games based on that. :slightly_smiling_face:

83 Likes

This is a turning point in the entire romhacking scene. Really good job here, and let´s celebrate this as the big acomplishment that it´s!

7 Likes

As in a unit can attack 20 times? Like how brave/hero weapons let you attack 2/4 times?

I think a move towards a C based skillsystem is for the best, although it will take a while. It’ll also make it easier to have a version for fe6/fe7 once all 3 decomps are far along. Kudos to you!

14 Likes

this is amazing! thanks and congrats, feels this is a new milestone

So does this mean skills can be coded in C now?

1 Like

We always could, although progress on the decomp has made this easier over time. Several skills in the older skillsys are written in C, but most are not.

5 Likes

The total attacker number (actor + target) can reach no more than 20. And it is auto dectected by function CheckBattleHitOverflow()

2 Likes

:bow: :bow: :bowing_man:

2 Likes

Oh it’s my fault that battle hit can reach 0x20 rather than 20

1 Like

Having a play around with this, it’s really impressive work!

I did notice that pressing left to select combat art doesn’t allow you to select Without Art, but pressing right works as expected.

Combo/chain attack could maybe use an indicator similar to the one for battle arts? and sprite doesn’t swap when anims off but I guess that’s just not finished yet.

Also installing worked fine for me on WSL although the dotnet var only worked until I closed the session so might be good to add a note about adding it to ~/.bashrc so it will persist?

Anyway great stuff as always Mokha!

4 Likes

This may be a bug, I may fix it later.

In FE-Engage, according to my understanding, it is an inherent mechanism, just like assassin cannot trigger silencer attack to BOSS in FE8. So I also set it to trigger combo-attacks unconditionally.

√

Yes, I recommand to put the following variables to ~/.bashrc:

export DOTNET_ROOT=$HOME/.dotnet
export PATH=$PATH:$DOTNET_ROOT:$DOTNET_ROOT/tools

export DEVKITPRO=/opt/devkitpro
export DEVKITARM=${DEVKITPRO}/devkitARM
export DEVKITPPC=${DEVKITPRO}/devkitPPC
export PATH=${DEVKITPRO}/tools/bin:$PATH
2 Likes

Is there currently no way to view what combat arts are available to a unit?

This is honestly really cool. Was able to get everything to work following the instructions just fine, though I did need to update and upgrade apt-get since I was doing this on a fresh install, if you feel it might be worth adding a note about that after wsl is installed.

Later I may write a doc and some patches on combat-art design

I believe he just means there should be some indication that a chain attack is happening during the battle forecast, as is the case in Engage

1 Like

Patches at main

I have built a ./Patches dir, and for now, write some patches about combat-art configuration. You may try on them via FEB.

And @Blademaster now you can try it.

3 Likes

My apologies for not being more clear before, but I mean in game. On the unit menu, other than when you attack, how to you view available combat arts such as wrathful stike and grounder? Do you need to press select on a certain page or?

Now fixed

Yeah, we did not make combat-art select submenu for now. But you can see detailed info for combat-art by R_BUTTON on TargetSelection.

1 Like

Update at 2024.03.19

Now patches for FEB has been updated.

Put Patches dir of repo to <path-to-FEBuilderGBA>\config\patch2\FE8U\, and find “CSKILL_K” you may config data for cskillsys.



9 Likes