Acrobat-type skill not working

Yep! Local dumb fox here.
So I’ve got a skill that essentially has the Acrobat skill slapped into it and have not been able to figure out what is actually happening-- I don’t actually understand ASM and only have ‘some’ skill in recognising patterns related to it, so I may need things explained to me like I’m a five year old.

Here’s what it is so far, this is like the hundredth revision of the thing. (Right now it is 90% the ‘vanilla’ Acrobat skill in the base skill system.)

.thumb
.org 0x0

.equ AcrobatID, SkillChecker+4
.equ HuntressID, AcrobatID+4
@r0=movement cost table. Function originally at 1A4CC, now jumped to here (jumpToHack)
push  {r4,r5,r14}
mov   r4,r0
ldr   r0,SkillChecker
mov   r14,r0
ldr   r0,CurrentCharPtr
ldr   r0,[r0]
cmp   r0, #0
bne   NoDZ
mov   r0, r2 @if the active unit is 0, we're being called from dangerzone

NoDZ:
ldr   r1,AcrobatID
cmp	r0,#0x00
bne	MovementA

Huntress:
ldr   r1,HuntressID

MovementA:
.short  0xF800
mov   r1,#0x0       @counter
ldr   r5,MoveCostLoc

Loop1:
add   r2,r4,r1
add   r3,r5,r1
ldrb  r2,[r2]
cmp   r0,#0x0
beq   NoAcrobat
cmp   r2,#0xFF
beq   NoAcrobat
mov   r2,#0x1

NoAcrobat:
strb  r2,[r3]
add   r1,#0x1
cmp   r1,#0x40
ble   Loop1

End:
pop   {r4-r5}
pop   {r0}
bx    r0

.align
CurrentCharPtr:
.long 0x03004E50
MoveCostLoc:
.long 0x03004BB0
SkillChecker:
@POIN SkillChecker
@WORD AcrobatID
@WORD HuntressID

So just to say, the outcome I am aiming for is to have both the Acrobat and Huntress skill function, in previous attempts I’ve had either one or the other function, but not both at the same time.

I’m likely missing out on explaining something so uhm… please let me know if I forgot anything dire.

Base Acrobat has this bit here:

NoDZ:
ldr   r1,AcrobatID
.short  0xF800 
mov   r1,#0x0       @counter
ldr   r5,MoveCostLoc
Loop1:
add   r2,r4,r1
add   r3,r5,r1
ldrb  r2,[r2]
cmp   r0,#0x0
beq   NoAcrobat

That “.short 0xF800” is where the code calls the function that checks if the current unit has the Acrobat skill. That function then stores the true/false result in r0, which is then referenced at “cmp r0, 0x0” to jump to the appropriate part of the code. I think you’ve misplaced these lines in your code, so the code will not properly check for having these skills.

Your current code flow will always skip the “Huntress:” if the function is not being called from danger zone (and so r0 is not 0), because the bne MovementA will skip it, so the skill is not ever actually going to be checked.

Ah, I had a feeling of that one at least and kept moving it about.
As said though, I don’t really understand most of it though, so I don’t especially know the proper ‘why’ if that makes any sense.
I had the short function called after the skill checks initially and that just caused things to not load, something with movement I imagine.