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

I can certainly try, but we tried on a “clean” ROM, and it was working normally

Yeah i just checked and it seems to be working properly in the default skill system
So you probably broke something on your end?
I recommend checking to see if you made any edits to the routine for doing the heal amount

Where exactly do we have to look for that?

Also, do you think the first method you suggested could work anyway, even though the problem is in our ROM?

If you’re already familiar with asm the routine for getting the heal amount is at 0x16fb8; you can compare the routine from your rom to the routine from a clean rom to see what has been altered

iirc if you’re using build files you can use ASSERT or PROTECT to figure out what is trying to edit the routine

and i don’t really use febuilder but i assume it has a thing for keeping track of the edits you’ve made

Yes, I believe it should still work

thank you, we’ll try.

So regarding this

We always used FEBuilder for everything, we know nothing about asm. So, we don’t really know how to do what you told us.

If it’s not suspected that this is a Skill System bug now, then this is pretty off topic for this thread. :frowning:

2 Likes

Seems it could be worthwhile to have a separate thread specifically for the FEBuilder patch. There’s an awful lot of discourse regarding that version cluttering both this and 7743’s threads up. Or maybe a mod can edit the OP here (since Circles seems pretty inactive) to include a link to the main FEBuilder thread to redirect FEBuilder users if 7743 doesn’t mind.

I understand responsibility for it is a little grey - I don’t think anyone wants to own that patch lmao. Just my two cents.

I thought this was a bug in skillsystems, so I told him to ask a question in this thread.
I’m not using SkillSystems, so I’m not familiar with it.
According to Teraspark’s explanation, this did not seem to be a problem with SkillSystems.
So I think it is a Gorgonath ROM-specific problem.

Knowledge is needed to find out if it is a bug.
Now that the problem has been revealed to be ROM-specific, I’d like to solve it in the FEBuilderGBA thread from now on.

1 Like

I disagree with splitting the SkillSystems thread.
The bug found in SkillSystems of FEBuilderGBA is because it needs to be reported to SkillSystems, so it takes double time.

Also, like this time, if not sure if it’s a SkillSystems bug, you’ll end up reporting this symptom in this thread.
So I don’t think it makes sense to separate threads.

2 Likes

I looked into it in detail.
This is a bug in SkillSystems.

Str or Mag Damage.asm

mov 	r0,#0x5A
strh	r5,[r4,r0]
mov 	r0,#0x4C
mov		r7,#0x14
ldr		r0,[r4,r0]	//weaponAttributes
mov		r5,#0x2
tst		r5,r0
beq		IsStr
Magic:
mov		r7,#0x3A
IsStr:
ldrb	r7,[r6,r7]

This routine gets the “weaponAttributes” of the Item and checks if the bit flag of 0x02 (Attacks Res) is valid.
And this routine is the source of the bug.
There are three mistakes in this routine.

Look at these two images.


Heal Staff does not have the “Attacks Res” flag set.
In vanilla, the Staff does not have this flag set.
So when trying to recover with a Staff, this routine refers to power, not magic.

This is one of the causes of the bug.
There is still more.

The Staff seems to have a special routine, and weaponAttributes may be set to 0 when using the Staff.
Of course, bool r = (0 & 0x2); is false, so the power is referenced, not magic.
This is the second mistake.

In addition, vanilla rules are not good for writing this check.
“Attacks Res” flag has been translated as IsMagic by Nightmare.
However, this is incorrect.

The meaning of this flag is to refer to res, not enemy def.
It is very easy to verify this.
Try removing the “Attacks Res” flag from the Fire magic.
The enemy Def should now be used for Fire damage calculations.

In other words, you can create magic that refers to def, not res.

With this routine of the current SkillSystems you cannot make it.
This is the third mistake.

So how do implement this routine correctly?
is to use “weaponType” instead of “weaponAttributes”
You also need to check for the possibility of “Magic sword”.

@BattleUnit@4C	word	weaponAttributes
@BattleUnit@50	byte	weaponType

Let’s actually make it.

Str or Mag Damage.asm

.thumb
.org 0x0

mov 	r0,#0x5A
strh	r5,[r4,r0]
mov		r7,#0x14

mov 	r0,#0x4C	@weaponAttributes
ldr		r0,[r4,r0]
mov		r5,#0x40	@Magic Sword
tst		r5,r0
bne		Magic		@IsMagicSword?

mov 	r0,#0x50	@weaponType
ldrb	r0,[r4,r0]
cmp		r0,#0xB		@B=Monster's weapon
beq		IsStr
cmp		r0,#0x4		@0=sword 1=lance 2=axs 3=bow
blt		IsStr		@IsPhysicalWeapon? 4=staff 5=anima ... 0xff = staff(when alone)

Magic:
mov		r7,#0x3A

IsStr:
ldrb	r7,[r6,r7]
mov		r5,#0x5A
ldrh	r0,[r4,r5]	@current damage
add		r0,r7
strh	r0,[r4,r5]
b		End

End:
add		r4,#0x5A @for stone
bx		r14

Also, there was one problem in OE490 actual.
This patch is not compatible with str mag split.

Healing Formula: Staff Might: MAG/2 + Staff Might = Heal

This patch does not work correctly because it calls PowerGetter directly.


I forgot to check Monster Weapon in str mag split.
I also my modified the code suggested yesterday.

1 Like

So was this a problem with the skill system itself or some kind of febuilder patch conflict?

The two problems are occurring at the same time.

“Healing Formula: Staff Might: MAG/2 + Staff Might = Heal”
It is true that this patch does not work.
However, even if you do not install this patch, it will not work properly due to the above bug.

I am writing in discord’s FEBuilderHelp,
There is a bug in Skill Boon.

DragonVine also has a bug.

Skill Boon:
On maps with Eggs, incorrect hooks from Boon Skill will destroy enemy stats.


this monster has 204 res and 212 luck

This is a bug in SkillSystems Boon.

//Boon
ORG $188F6
BYTE $40 $B4
callHack_r6(Boon)

Vanilla.

080188F4 D004   beq #0x8018900   //Fixed Skill SkillSystems 20200211 (スキル拡張)@000188F4.bin@BIN
    080188F6 0918   lsr r0 ,r3 ,#0x4   //Uninstall SkillSystems Boon@Uninstall SkillSystems Boon_188F6.bin@BIN
    080188F8 3801   sub r0, #0x1
    080188FA 0100   lsl r0 ,r0 ,#0x4
    080188FC 4310   orr r0 ,r2
    080188FE 7008   strb r0, [r1, #0x0]   //Unit@味方[5].状態とターン
08018900 7809   ldrb r1, [r1, #0x0] # pointer:0202BFE4 (Unit@味方[5].状態とターン ) r1=UnitForm r1=UnitForm

callHack_r6 and a hook with a length of 2 bytes break conditional branches.
Therefore, 0x80018900 and later will be destroyed.

SkillSystems

080188F4 D004   BEQ #0x8018900 <<<<
    080188F6 B440   PUSH {r6}
    080188F8 4E01   LDR r6, [PC, #0x4] # pointer:08018900 -> 08BC860D
    080188FA F0B8 FFED   BL 0x080D18D8   //_call_via_r6
    080188FE E001   B 0x8018904
08018900 860D 08BC   //LDRDATA  <<<<
08018904 4008   AND r0 ,r1

修正案

#ifndef jumpToHack_r0
//Hook with r0 for compatibility.
#define jumpToHack_r0(offset) "BYTE 0x00 0x48 0x87 0x46; POIN (offset|0x1)"
#endif //jumpToHack_r0

//Boon
ORG $188F6
BYTE 0x00 0x00
jumpToHack_r0(Boon)

Also change boon.asm.
https://cdn.discordapp.com/attachments/470029781795078175/698344354284306512/Fix_Boon.7z

DragonVeins.event

#define HealTileTrapID 0xC <<<<<<<<<<<<
#define HealTile(XX,YY,HealPercent) "BYTE HealTileTrapID XX YY 0x0 HealPercent 0x0"
#define HealTile(XX,YY,HealPercent,EventID) "BYTE HealTileTrapID XX YY 0x0 HealPercent EventID"

TrapID 0xC is Egg.

@TrapEntry@00    byte    x pos
@TrapEntry@01    byte    y pos
@TrapEntry@02    byte    trap type id    0=Nothing (unused entry) 1=Ballista 2=Wall/Snag 3=Map Change (yes those are actually traps) 4=Fire Trap 5=Gas Trap 6=Map Change too? game supports them but idk where it might be used 7=Arrow Trap 8=? (used?) 9=? (used?) A=Light from Torch Staff B=Mine C=Gorgon Egg? (needs investigating as to in which circumstances) D=Light Rune
@TrapEntry@03    byte    ext1
@TrapEntry@04    byte    ext2
@TrapEntry@05    byte    ext3
@TrapEntry@06    byte    ext4
@TrapEntry@07    byte    ext5

IDs must not be duplicated.
Since 0xE is free, I think that it should be changed to it.

Due to this bug, when an egg tries to hatch, it will display NO DAMAGE or the egg will display as a HealTile.
This is due to the TrapID colliding with the egg.

2 Likes

DefiantCrit Skill conditional expression is reversed.

When HP is full, Crit correction will be applied.
Conversely, if the HP is 1, no correction is applied.

However, the source code DefiantCrit.s is correct.
Only the DefiantCrit.dmp file is wrong.
Perhaps the creator has forgotten to recompile. (゚∀゚)


On the right is the DefiantCrit.dmp that is currently stored in the repository.
On the left is the recompiled (assembled) DefiantCrit.dmp.

5 Likes

I’ve implemented the fixes for the issues above as well as written fixes for a number of other issues. Once these are merged in, most logged issues should be resolved.

6 Likes

When HIT exceeds 128, it becomes negative.
This is a display issue only.

If the value is negative, a strange display will occur.
-104
Slim Sword

SkillSystems hijacks the Text_AppendNumberOr2Dashes function.
And output negative numbers.

However, HIT can sometimes exceed 128.
At this time, it is processed as a negative value.
To solve this problem, I made a patch that changes the display of HIT to use the original routine.

HIT_rate_unsingned_text.s

.thumb
.macro blh to, reg=r3
  ldr \reg, =\to
  mov lr, \reg
  .short 0xf800
.endm


@Resend the breaking code.
ldsh r3, [r0, r2] @pointer:0203A54C (BattleUnit@gBattleActor.battleHitRate )
mov r0 ,r4
mov r1, #0x24
mov r2, r9

Start:
push {r4,r5,r6}
mov r4 ,r0
mov r5 ,r2
mov r6 ,r3
blh 0x08003e54   @Text_SetXCursor
mov r0 ,r4
mov r1 ,r5
blh 0x08003e60   @Text_SetColorId
mov r0 ,r4
mov r1 ,r6
bl Text_AppendNumberOr2Dashes_Unisngned
pop {r4,r5,r6}

ldr r3,=0x0801E98C+1
bx r3

Text_AppendNumberOr2Dashes_Unisngned:
push {r4,lr}
mov r4 ,r0
cmp r1, #0xff

beq ShowDecNumber
    mov r0, #0x1
    neg r0 ,r0
    cmp r1 ,r0
    bne ShowDecNumber
    mov r1, #0x8
    neg r1 ,r1
    mov r0 ,r4
    blh 0x08003e58   @Text_Advance
ldr r0, =0x535
blh 0x0800a240   @GetStringFromIndex
mov r1 ,r0
mov r0 ,r4
blh 0x08004004   @Text_AppendString
b Exit

ShowDecNumber:
mov r0 ,r4
blh 0x08004074   @Text_AppendDecNumber

Exit:
pop {r4}
pop {r0}
bx r0

HIT_rate_unsingned_text.event

PUSH
ORG $1E980
jumpToHack(HIT_rate_unsingned_text)
POP

ALIGN 4
HIT_rate_unsingned_text:
#incbin "HIT_rate_unsingned_text.dmp"

After adding this code, the correct numbers will be displayed.
Slim Sword
->
Clipboard01

9 Likes

Ohhh, I had been wondering what was causing this. Nice job!

Thank you, with this patch magic passive boost is working. However, I also see that move passive boost is not. Is there a similar issue?

1 Like

Oh, yeah, maybe you already know about this but there’s enough clutter already for me to just put this here, but there may be an issue with Skillsystems doubling the weapon triangle damage bonus and penalty for every unit. I presume this is a carryover with the Triangle Adept skill which is apparently broken from what I have heard.

1 Like