[FE8] Skill System v1.0 - 404 skills done, more on the way

Hi! I’m brand new to using EventAssembler, and have been trying to install your skill system. Any chance you could help me get unstuck?

I’m using Event Assembler V11.1.3

I was able to modify my ROM with _FE8EssentialFixes.event, but continue to get an error when applying either _MasterHackInstaller.event or SkillSystemInstaller.event. The error is as follows:

" 1 errors encountered:

File HeroesMovement_Internal.event, Line 529, Column 14: Didn’t reach end, currently at LeftParenthesis(()"

I would love to use this system, as it looks tremendously fun. Please let me know if I’m being stupid.

Cheers,
Dre

Run makehack_full with fe8_clean.gba in your root directory

Thanks for getting back to me so quickly. Please forgive my ignorance, but that gives me a different error:

“UNC paths are not supported. Defaulting to Windows directory.”

Also, what does makehack_full include? Is it just the skills system, or all of the quality of life improvements as well?

Bah, nevermind. This thread might not show it, but I’m an engineer that regularly does fancy stuff on my computer. Apparently my terminal was having a hard time coping with the file structures that incorporated files from the Mac side of my remote desktop setup. When I moved the root directory into an area that was purely within a Windows environment, everything worked perfectly.

Thanks for helping a poor fool out. I’m excited to play this updated game!

1 Like

It will install everything in the directory that is enabled to install. See the config file in engine hacks.

Also see this link for info on creating a buildfile:

If you just want to play fe8 with skills, you should either use the download link in the 1st post, or change the config file to use Legacy Skill lists.

Hello, so I’ve been trying to get the Rom build to work for the last hour or so. For some reason the “Hello world.txt” file can’t be found even though they’re are within the same folder.
I’ve tried and followed the steps exactly till i have to use the event assembler and then the file cant be found even after i redownloaded. The files seems to be like it isn’t read but i don’t know how to fix that.

I’ve run into a problem where all my characters have stopped gaining experience. All of their experience levels have been set to null, even though their levels are correct. For example, the game might shows “LV 5 E --“. This is the case for every character coming, except for any new ones that are introduced in the next combat. However, those characters are likewise reset at the end of the combat, and no longer get gain experience.

As far as I can tell, I didn’t do anything special to break the game. I think it may have started once I saved the game in the field. Is this a known issue?

This was caused by a recent rewrite to the debuffs system and was only present when save expansion was turned off; the fix here has just been merged and resolves this issue.

1 Like

I don’t understand your issue. Are you following the guide here? https://tutorial.feuniverse.us/

From what I know, skillsys doesn’t have a hello world file. I think you may have added one?

I suggest you join the feu discord and ask buildfile questions in #hacking_help there.

hello, sorry for the late reply. I fixed the initial problem which was nothing was being read however it doesn’t seem to recognized “ColorzCore”

‘ColorzCore’ is not recognized as an internal or external command, operable program or batch file.

That is the message I get whenever it starts to assembly. Afterwards i still get a patch and test rom but no changes

Edit: I figured it out so

1 Like

I created 2 skills:

Heavy Blade: +4 Damage/-2 Attack Speed when unit’s Con. is bigger than the enemy.
Dancing Blade: +4 Attack Speed/-2 Damage when unit’s Con. is lower than the enemy.

Heavy Blade
.thumb
.equ HeavyBladeID, SkillTester+4

push {r4-r7, lr}
mov r4, r0 @atkr
mov r5, r1 @dfdr

@has HeavyBlade
ldr r0, SkillTester
mov lr, r0
mov r0, r4 @attacker data
ldr r1, HeavyBladeID
.short 0xf800
cmp r0, #0
beq End

@make sure we're in combat (or combat prep)
ldrb r3, =gBattleData
ldrb r3, [r3]
cmp r3, #4
beq End

ldr r0, [r4, #0x0] 
ldrb r0, [r0, #0x13] @unit Con
ldr r1, [r4, #0x04]
ldrb r1, [r1, #0x11] @class Con
add r0, r1
ldrb r1, [r4, #0x1A] @Con bonus
add r0, r1 @r0 contains attacker con

ldr r1, [r5, #0x0]
ldrb r1, [r1, #0x13]
ldr r2, [r5, #0x04]
ldrb r2, [r2, #0x11]
add r1, r2
ldrb r2, [r5, #0x1A] @Con bonus
add r1, r2 @r1 contains defender con

cmp r0, r1
ble End @skip if con is less or equal

mov r1, #0x5A
ldrh r0, [r4, r1] @atk
add r0, #4
strh r0, [r4,r1]
mov r1, #0x5E
ldrh r0, [r4, r1] @AS
cmp r0, #0x02
ble ZeroAS
sub r0, #2
strh r0, [r4,r1]
b End

ZeroAS:
mov r0, #0x0
strh r0, [r4,r1]

End:
pop {r4-r7, r15}
.align
.ltorg
SkillTester:
@Poin SkillTester
@WORD HeavyBladeID
Dancing Blade
.thumb
.equ DancingBladeID, SkillTester+4

push {r4-r7, lr}
mov r4, r0 @atkr
mov r5, r1 @dfdr

@has Dancing Blade
ldr r0, SkillTester
mov lr, r0
mov r0, r4 @attacker data
ldr r1, DancingBladeID
.short 0xf800
cmp r0, #0
beq End

@make sure we're in combat (or combat prep)
ldrb r3, =gBattleData
ldrb r3, [r3]
cmp r3, #4
beq End

ldr r0, [r4, #0x0] 
ldrb r0, [r0, #0x13] @unit Con
ldr r1, [r4, #0x04]
ldrb r1, [r1, #0x11] @class Con
add r0, r1
ldrb r1, [r4, #0x1A] @Con bonus
add r0, r1 @r0 contains attacker con

ldr r1, [r5, #0x0]
ldrb r1, [r1, #0x13]
ldr r2, [r5, #0x04]
ldrb r2, [r2, #0x11]
add r1, r2
ldrb r2, [r5, #0x1A] @Con bonus
add r1, r2 @r1 contains defender con

cmp r0,r1
bge End @skip if con is bigger or equal

mov r1, #0x5E
ldrh r0, [r4, r1] @AS
add r0, #4
strh r0, [r4,r1]
mov r1, #0x5A
ldrh r0, [r4, r1] @atk
cmp r0, #0x02
ble ZeroAtk
sub r0, #2
strh r0, [r4,r1]
b End

ZeroAtk:
mov r0, #0x0
strh r0, [r4,r1]

End:
pop {r4-r7, r15}
.align
.ltorg
SkillTester:
@Poin SkillTester
@WORD DancingBladeID

7 Likes

4 skills more: The elemental boosts from FEH.
Fire/Wind/Earth/Water Boost: Grants +6 [Attack/AS/Defense/Resistance] if unit’s current HP is at least 3 higher than the enemy’s.

And the icons (included in the download):
image

9 Likes

PALADIN WITH ASTRA! ABORT! ABORT!

2 Likes

And another skill.

Deathly Dagger: When unit starts combat and uses a [Dagger/Knife] and the enemy uses a magic tome, the enemy can’t counterattack. (Doesn’t work on bosses)

This is based on Jaffar’s personal weapon refine from FEH, which prevents counterattacks from magic users.
You define what a [Dagger] is in a table.

So, this goes in “\RoundSkills\Dazzle\dazzle.s”

dazzle.s
@802c874 checks uncounterable
.equ DazzleID, SkillTester+4
.equ MoonlightID, DazzleID+4
.equ DeathlyDaggerID, MoonlightID+4
.equ DeathlyDaggerWeaponList, DeathlyDaggerID+4
@jumptohack at 802c864

.macro blh to, reg
    ldr \reg, =\to
    mov lr, \reg
    .short 0xF800
.endm

.thumb
push {r4-r7}
@original stuff
ldr r4, =0x203a4ec
mov r5, r12
ldr r0, [r4, #0x4c]
ldr r1, [r5, #0x4c] @if EITHER one has uncounterable weapon
orr r0, r1
mov r1, #0x80
and r0, r1
cmp r0, #0
bne Uncounterable

ldr r0, SkillTester
mov lr, r0
mov r0, r4 @attacker data
ldr r1, DeathlyDaggerID
.short 0xf800
cmp r0, #0
bne CheckForDagger

@otherwise check skill ONLY on the attacker
ldr r0, SkillTester
mov lr, r0
mov r0, r4 @attacker data
ldr r1, DazzleID
.short 0xf800
cmp r0, #0
bne Uncounterable

@does ONLY the attacker have moonlight?
ldr r0, SkillTester
mov lr, r0
mov r0, r4 @attacker data
ldr r1, MoonlightID
.short 0xf800
cmp r0, #0
bne Uncounterable @if not, we can counter
b 		Normal

CheckForDagger:
ldr r0, [r5, #0x0] @Enemy Unit Struct Pointer
mov r1, #0x28
ldr r0, [r0, r1] @Enemy Unit Struct
mov r1, #0x80
lsl r1, #8 @0x8000 IsBoss
tst r0,r1
bne Normal @skip if Boss
mov r1, #0x4A
ldrh r0, [r4, r1]
blh 0x080174EC, r1 @r0 has Weapon ID
ldr r2,DeathlyDaggerWeaponList
WeaponLoop:
ldrb r1,[r2]
cmp r1,#0
beq Normal
cmp r0,r1
beq CheckEnemyWeapon
add r2,#1
b WeaponLoop

CheckEnemyWeapon:
mov		r1, #0x50
ldrb	r0, [r5, r1]	@Enemy weapon type
cmp		r0, #5			@If anima, activate
beq		Uncounterable
cmp		r0, #6			@If light, activate
beq		Uncounterable
cmp		r0, #7			@If dark, activate
beq		Uncounterable
b 		Normal

Uncounterable:
mov r3, r5
pop {r4-r7}
ldr r1, =0x802c877
bx r1

Normal:
mov r3, r5
pop {r4-r7}
ldr r1, =0x802c887
bx r1

.align
.ltorg
SkillTester:
@POIN SkillTester
@WORD DazzleID
@WORD MoonlightID
@WORD DeathlyDaggerID
@POIN DeathlyDaggerWeaponList

Then in the RoundsSkill.event you add the parameters to the DazzleCheck:

RoundsSkill.event
ALIGN 4
DazzleCheck:
#incbin "Dazzle/dazzle.dmp"
POIN SkillTester
WORD DazzleID
WORD MoonlightID
WORD DeathlyDaggerID
POIN DeathlyDaggerWeaponList

And finally you add the table of weapons that trigger the effect:

ALIGN 4
DeathlyDaggerWeaponList:
BYTE IronDagger SteelDagger SilverDagger IronKnife SteelKnife SilverKnife WindKnife Kukri Stiletto MageKiller Baselard
BYTE 0x0
ALIGN 4
6 Likes

22 Skills more!
You get a skill, and you get a skill, everybody gets a skill!

Well, here’s the list:

  • HP Restoration Skills
  1. Better Odds: Recover 40% HP at the start of odd-numbered Turns. (Wolfssegner class skill, from Fates)
  2. Even Better: Recover 40% HP at the start of even-numbered Turns. (Nine-Tails class skill, from Fates)
  3. Good Fortune: Luck% chance of recovering 20% HP at the start of the user’s Turn. (Mercenary class skill, from Fates)
  • Post Battle Skills
  1. Salvage Blow: Luck% chance of receiving an Iron Sword, Lance, Axe or Bow if the user defeats the enemy. (Blacksmith class skill, from Fates)
  • Pre-Battle Skills
  1. Bushido: If unit’s level is higher than the enemy (Promoted units add +20 to level), +10 Crit and +2/-2 Damage dealt/taken. (Inspired by Ryoma’s personal skill, from Fates)

  2. Competitive: If unit’s level is lower than the enemy (Promoted units add +20 to level), +10 Crit and +2/-2 Damage dealt/taken. (Inspired by Takumi’s personal skill, from Fates)

  3. Evenhanded: During even-numbered Turns, damage +4 (Kitsune class skill, from Fates)

  4. Fierce Counter: +2 Damage when a male enemy initiates the combat. (Forrest’s personal skill, from Fates)

  5. Hunter’s Boon: If enemy’s HP < 50%, +20 Crit (Petra’s personal skill, from Three Houses)

  6. Loyalty: When within 2 spaces of a Lord, -3 damage taken, +15% hit. (Modified version, works with Char/Class Ability 2 instead of a class list. Original skill by @Datagne)

  7. Odd Shaped: During odd-numbered Turns, damage +4 (Wolfskin class skill, from Fates)

  8. Philanderer: +2/-2 damage dealt/taken when adjacent to a female ally. (Sylvain’s personal skill, from Three Houses)

  9. Pride: If unit’s level is lower than the enemy (Promoted units add +20 to level), +4 Damage. (Hayato’s personal skill, from Fates)

  10. Prodigy: If unit’s (Str+Mag) is lower than enemy’s (Str+Mag), +4 Damage. (Inspired by Caeldori’s personal skill, from Fates)

  11. Sword Prowess

  12. Lance Prowess

  13. Axe Prowess

  14. Bow Prowess

  15. Tome Prowess: Gives a bonus depending on unit’s weapon rank (Inspired by weapon rank skills, from Three Houses):

    • B Rank: +5 Hit/Avo/C. Avo.
    • A Rank: +10 Hit/Avo/C. Avo.
    • S Rank: +15 Hit/Avo/C. Avo.
  16. Rivalry: +2/-2 damage dealt/taken when adjacent to a male ally. (Leonie’s personal skill, from Three Houses)

  17. Unmask: If enemy is female, +4 Damage and +20 Crit. (Charlotte’s personal skill, from Fates)

Download everything here:

11 Likes

How would these be applied? Like with applying any patch?

These are for buildfiles, here’s how you add them:

I don’t know if FEBuilder has an option to import skills individually.

1 Like

Apparently Void Curse doesn’t work on Enemy Phase.
Any idea how to fix it?

Void curse skill check:
push {r4,r14}
mov r4, r0
mov r0, r2
ldr r1, VoidCurseID
ldr r2, SkillTester
mov lr, r2
.short 0xF800
cmp r0, #0
beq GoBack

Vs paragon skill check:
push { r4, lr }
mov r4, r0
mov r0, r1
ldr r1, ParagonID
ldr r2, SkillTester
mov lr, r2
.short 0xF800
cmp r0, #0x00
beq End

They look identical except for mov r0, r1 in paragon vs mov r0, r2 in void curse.

The comment says

@ r0 = current EXP, r1 = this battle struct, r2 = enemy battle struct.

I think this difference is because in one version it’s checking the skill of the unit to give the exp to, while in the other it’s checking the opposing unit for the void curse skill. Idk. I was going to suggest trying mov r0, r1 in VoidCurse, but I think that would simply make it so if you have the skill, you get no exp ever.

It looks fine to me. Are you using the skill sys buildfile?

Yes, I think I have the latest version.