Zeroing/nullifying mov FEDS style (based on AI parameters?)

This patch (FE8, writes data to $E90130-18F and $E901F0-213) checks if AI byte 4 is 0x20:

Incidentally, if you wanted to be evil and restrict player units’ movement you can now also do this with a simple CHAI.

And source for anyone who wants to make an FE7 port:
###Map movement to 0

MOV_Map_Hook_Start: @paste to 0x801CB70
push {r4-r6,r14}
ldr r3, Jump_to
bl GOTO_R3
b End
GOTO_R3:
bx r3
.align
Jump_to:
.long 0x08E90131
End:
MOV_Map_Hack_Start:  @paste to 0x08e90130
push {lr}
mov r6, r0
mov r4, #0x1
ldr r5, CharDataPointer
ldr r0, [r5]
mov r3, #0x41
ldrb r3, [r0,r3] @Check AI byte 4
cmp r3, #0x20 @Guard Tile?
beq NoMove

ldr r1, [r0,#0x4] @else continue as normal
ldrb r1, [r1,#0x12] @mov from class data
ldrb r2, [r0,#0x1D] @mov bonus (boots)
b End

NoMove:
mov r1, #0x0
mov r2, #0x0

End:
pop {r3}
bx r3

.align
CharDataPointer:
.long 0x03004e50

###Stat screen to –

MOV_Info_Hook_Start: @paste to 0x8087300
ldr r3, Jump_to
bl GOTO_R3
b End
GOTO_R3:
bx r3
.align
Jump_to:
.long 0x08E90161
End:
MOV_Info_Hack_Start: @paste to 0x8E90160
push {lr}

ldr r1, [r5,#0xC] @r1 = char data

mov r3, #0x41
ldrb r3, [r1,r3] @AI byte 4
cmp r3, #0x20
beq NoMove

ldr r0, [r1,#0x4]
mov r3, #0x12
ldsb r3, [r0,r3] @r3 is the return value
mov r0, #0x1D
ldsb r0, [r1,r0]
b End

NoMove:
ldr r3, DisplayNegative
mov r0, #0x0

End:
pop {r1} @saves some stack manipulation by popping first
add r0,r0,r3
str r0, [sp]
bx r1

DisplayNegative:
.long 0xFFFFFFFF

###Danger Zone compatibility

@paste to 801b898 - b8aa
ldr r0, Jump_To
bl GOTO_R0
b End
GOTO_R0:
bx r0
.align
Jump_To:
.long 0x8e901f1
nop
End:
@paste to e901f0

mov r3, #0x41 @check AI
ldrb r3, [r4,r3]
cmp r3, #0x20
beq NoMove

ldr r0,[r4,#0x4]
ldrb r1, [r0,#0x12] @mov from class data
ldrb r0, [r4,#0x1D] @mov bonus (boots)
add r1,r1,r0
b End

NoMove:
mov r1, #0x0

End:
lsl r1,r1,#0x18
asr r1,r1,#0x18
mov r0,r4
ldr r3, Function
bx r3

.align
Function:
.long 0x801a3cd
5 Likes