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):
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):
PALADIN WITH ASTRA! ABORT! ABORT!
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”
@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:
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
22 Skills more!
You get a skill, and you get a skill, everybody gets a skill!
Well, here’s the list:
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)
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)
Evenhanded: During even-numbered Turns, damage +4 (Kitsune class skill, from Fates)
Fierce Counter: +2 Damage when a male enemy initiates the combat. (Forrest’s personal skill, from Fates)
Hunter’s Boon: If enemy’s HP < 50%, +20 Crit (Petra’s personal skill, from Three Houses)
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)
Odd Shaped: During odd-numbered Turns, damage +4 (Wolfskin class skill, from Fates)
Philanderer: +2/-2 damage dealt/taken when adjacent to a female ally. (Sylvain’s personal skill, from Three Houses)
Pride: If unit’s level is lower than the enemy (Promoted units add +20 to level), +4 Damage. (Hayato’s personal skill, from Fates)
Prodigy: If unit’s (Str+Mag) is lower than enemy’s (Str+Mag), +4 Damage. (Inspired by Caeldori’s personal skill, from Fates)
Sword Prowess
Lance Prowess
Axe Prowess
Bow Prowess
Tome Prowess: Gives a bonus depending on unit’s weapon rank (Inspired by weapon rank skills, from Three Houses):
Rivalry: +2/-2 damage dealt/taken when adjacent to a male ally. (Leonie’s personal skill, from Three Houses)
Unmask: If enemy is female, +4 Damage and +20 Crit. (Charlotte’s personal skill, from Fates)
Download everything here:
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.
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.
I’m not sure if this is a known issue or not. I’ve downloaded a fresh version of Skill Systems buildfile to see if it works and I’ve been able to replicate it 3x.
There seems to be something wrong with Mag growth, the only changes I’ve done is uncomment to allow Str/Mag split. I’ve then changed Eirika’s Mag growth to 100 and haven’t been able to get 1 Mag level up.
Hey thanks for catching that! I was able to replicate it. Today I’ll see if I can find the issue. Let’s see if it was my fault or someone else’s
Bad news: Autoleveling is still not working, and I’m unsure why.
That’s something to investigate for today.
Good news: Level ups are functional
It looks like this was caused by MSS reorganization not incorporating magic in a couple places. Something like that is to be expected for such a big reorganization. Once I find the autolevelling culprit, I should have the changes pushed soon.
EDIT: It was a simple mistake on my end. All functional for me now, so I’ve pushed the changes. Just waiting on PR approval. Hm I should have noticed Eirika maxing strength in that screenshot…
EDIT 2: Sme’s a speedster - Already merged!
Heya, CannotCrit seems to not ensure battle crit is 0 when the one receiving the attack from the 255 crit weapon has negative dodge (which can happen due to anathema, and maybe some other things as well). If you hook this with a callHack_r3
at 0x2ACA0
it should ensure that battle crit will be 0 again when the weapon has 255 crit:
@ Ensure Compute Crit leaves battle crit at 0
@ even when dodge is <0. Hooked at 0x2ACA0
@ r0: defender's dodge address.
@ r1: attacker's crit. Turns into battle crit.
@ r2: attacker battlestruct.
@ r3: unused.
@ r4: unused.
@ r5: unused.
@ r6: defender battlestruct.
.thumb
mov r3, #0x0
ldsh r0, [r0, r3]
sub r1, r0 @ Battle crit.
@ Check if item can crit.
mov r3, #0x4A
ldrh r3, [r2, r3]
lsl r3, #0x18
lsr r4, r3, #0x13
lsr r3, #0x16
add r3, r4
add r3, #0x18
ldr r4, =ItemTable
ldrb r3, [r4, r3] @ Item crit.
cmp r3, #0xFF
bne L1
@ item can't crit.
mov r1, #0x0 @ Battle crit.
@ vanilla stuff overwritten by hook.
L1:
mov r5, r2
add r5, #0x6A
mov r4, #0x0
strh r1, [r5]
bx r14
Mind you that ItemTable
needs to be defined of course.
Edit: I also made an edit to NegativeDisplay.s
to draw a dash to the item helpbox crit value if crit is equal to -1.
.thumb
@ the old hack made hit (actually many things but hit was most noticeable) display as signed
@ so this time, we only make it draw weapon stats as signed by hooking into the weapon stats drawing func
@ Vanilla functions definitions
Text_SetParams = 0x08003E68+1
Text_DrawCharacter = 0x08004180+1
GetItemMight = 0x080175DC+1
GetItemHit = 0x080175F4+1
GetItemWeight = 0x0801760C+1
GetItemCrit = 0x08017624+1
.global DrawHelpBoxWeaponStats_Hook
.type DrawHelpBoxWeaponStats_Hook, function
DrawHelpBoxWeaponStats_Hook:
@ function is at 08089CD4, but we don't need to change all of it
@ hook at 08089CFC (jumpToHack works), known state:
@ - r4 is address of texts (there is 2 lines, r4+8 is the second one)
@ - r5 is our item
@ - everything else is whatever
.macro draw_from_function function, x, y
@ Defining macro because this is repeated 4 times
ldr r3, =\function
mov r0, r5 @ arg r0 = item
bl call_via_r3
@ Convert result to signed number
lsl r0, r0, #24
asr r3, r0, #24
mov r0, \y
mov r12, r0
mov r0, r4 @ arg r0 = text
mov r1, \x @ arg r1 = x
mov r2, #7 @ arg r2 = color
@ implied @ arg r3 = number
bl Text_InsertDrawSignedNumber
.endm
@ First line (there's already stuff drawn there from before we hooked)
draw_from_function GetItemWeight, #129, #0
@ Second line
add r4, #8
draw_from_function GetItemMight, #32, #0
draw_from_function GetItemHit, #81, #0
draw_from_function GetItemCrit, #129, #1
@ epilogue
pop {r4-r5}
pop {r3}
call_via_r3:
bx r3
.pool
.global Text_InsertDrawSignedNumber
.type Text_InsertDrawSignedNumber, function
Text_InsertDrawSignedNumber:
@ this is our new function that replaces Text_InsertDrawNumberOrBlank
@ arg r0 = text
@ arg r1 = x
@ arg r2 = color
@ arg r3 = signed number
push {r0, r4-r6, lr} @ pushing r0 is to make 4byte space on the stack
mov r4, r0 @ var r4 = text
mov r5, r3 @ var r5 = number
mov r6, r12 @ Dash-flag
ldr r3, =Text_SetParams
@ implied @ arg r1 = cursor
@ implied @ arg r2 = color
bl call_via_r3
cmp r5, #0
beq Text_InsertDrawSignedNumber.draw_zero
cmp r6, #0
beq L1
mov r6, #1
lsl r6, #31
asr r6, #31
cmp r5, r6
beq Text_InsertDrawSignedNumber.draw_dash
L1:
@ r6 = 1 if number is negative, r5 = abs(number)
@ it's surprise tools that will help us later
lsr r6, r5, #31
beq Text_InsertDrawSignedNumber.lop
neg r5, r5
Text_InsertDrawSignedNumber.lop:
mov r0, r5 @ arg r0 = num
mov r1, #10 @ arg r1 = denom
swi 6 @ div!
@ r0 = number / 10
@ r1 = number % 10
mov r5, r0 @ number = number / 10
add r1, #0x30
str r1, [sp] @ [sp] = ['0' + number % 10, 0, 0, 0]
ldr r3, =Text_DrawCharacter
mov r0, r4 @ arg r0 = text
mov r1, sp @ arg r1 = string
bl call_via_r3
ldrb r0, [r4, #2]
sub r0, #15
strb r0, [r4, #2]
cmp r5, #0
bne Text_InsertDrawSignedNumber.lop
@ Draw dash if number was negative
cmp r6, #0
beq Text_InsertDrawSignedNumber.end
ldrb r0, [r4, #2]
add r0, #3
strb r0, [r4, #2]
mov r0, #0x2D
str r0, [sp] @ [sp] = ['-', 0, 0, 0]
ldr r3, =Text_DrawCharacter
mov r0, r4 @ arg r0 = text
mov r1, sp @ arg r1 = string
bl call_via_r3
Text_InsertDrawSignedNumber.end:
pop {r0, r4-r6}
pop {r0}
bx r0
Text_InsertDrawSignedNumber.draw_zero:
ldr r3, =Text_DrawCharacter
mov r0, r4 @ arg r0 = text
adr r1, strZero @ arg r1 = string
bl call_via_r3
b Text_InsertDrawSignedNumber.end
.pool
strZero:
.asciz "0"
Text_InsertDrawSignedNumber.draw_dash:
ldr r3, =Text_DrawCharacter
mov r0, r4 @ arg r0 = text
adr r1, strDash @ arg r1 = string
bl call_via_r3
b Text_InsertDrawSignedNumber.end
.pool
strDash:
.short 0x7F
Are skills on items only useable with equipped weapons? I want to implement something like Mystery of the Emblem’s life orb. Ie create an item that just sits in the player’s inventory but just by having it they get the renewal skill.
Passive skill granting items work (you just need to set the passive booster bit on the item, in addition to the skill). Note that this doesn’t work properly in febuilder’s skillsys installation.
You know, now that I read this answer, I think I’ve asked this exact question before XD
That’s unfortunate. I tried that a week or two ago to see if it would work. I thought it wasn’t possible, not that it was an FEBuilder issue.
The febuilder patch is based on skill system github from Feb 2020, or about a year and a half ago. It’s received a few minor bug fixes or specific features since then, but it has not been sync’d in quite a while.
7743 cares most about the stability of the system. The febuilder patch has very few bugs, so that is ideal for him, as he does not want to debug people’s skillsys issues. Which is totally fair. It’s amazing that he debugs so many report7z’s as it is!
Yeah he’s usually been pretty prompt and helpful on the discord in my experience. And he seems to use a translator for most English, making his dedication all the more impressive. Still, I can’t help but be greedy and want more nice things XD
Hello. I’m using the FEbuilder version of skillsystem and i’m wondering if an issue i’ve encountered has since been fixed in the Github. When i use Skillsystem’s Seal Strength (seems to be auto-included on Franz) on an enemy with 5 or less STR, it underflows and causes the enemy to deal 255 damage.