Ahh... sorry my bad. I haven't heard of the "and" ASM command before. Sorry for being dumb. XD
I tried your latest modification of the routine right now but I still can't get these abilities (the type changes) to be working. Dunno what exactly is wrong. I just followed everything. :/
Is "mov r0, r6" is equivalent to "add r0, r6, #0x0"? That line is only the difference from the original decompiled routine to "add r0, r6, #0x0" I've seen on VBA's disassembler. I dunno if this really causes it.