finished pokemon_3
This commit is contained in:
+387
@@ -5848,6 +5848,7 @@ void OakSpeechNidoranFSetupTemplateDummy(struct OakSpeechNidoranFStruct *structP
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef NONMATCHING
|
||||
struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
|
||||
{
|
||||
s32 size;
|
||||
@@ -5952,3 +5953,389 @@ struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8
|
||||
}
|
||||
return sOakSpeechNidoranResources;
|
||||
}
|
||||
#else
|
||||
NAKED
|
||||
struct OakSpeechNidoranFStruct *OakSpeechNidoranFSetup(u8 battlePosition, bool8 enable)
|
||||
{
|
||||
asm_unified("\n\
|
||||
push {r4-r7,lr}\n\
|
||||
mov r7, r8\n\
|
||||
push {r7}\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r6, r0, 24\n\
|
||||
lsls r1, 24\n\
|
||||
lsrs r5, r1, 24\n\
|
||||
movs r0, 0\n\
|
||||
mov r8, r0\n\
|
||||
ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r1, [r4]\n\
|
||||
cmp r1, 0\n\
|
||||
beq _08044B1E\n\
|
||||
ldrb r0, [r1, 0x2]\n\
|
||||
cmp r0, 0xA3\n\
|
||||
beq _08044B2E\n\
|
||||
adds r0, r1, 0\n\
|
||||
movs r1, 0\n\
|
||||
movs r2, 0x18\n\
|
||||
bl memset\n\
|
||||
mov r1, r8\n\
|
||||
str r1, [r4]\n\
|
||||
_08044B1E:\n\
|
||||
ldr r4, _08044B34 @ =sOakSpeechNidoranResources\n\
|
||||
movs r0, 0x18\n\
|
||||
bl AllocZeroed\n\
|
||||
adds r2, r0, 0\n\
|
||||
str r2, [r4]\n\
|
||||
cmp r2, 0\n\
|
||||
bne _08044B38\n\
|
||||
_08044B2E:\n\
|
||||
movs r0, 0\n\
|
||||
b _08044D70\n\
|
||||
.align 2, 0\n\
|
||||
_08044B34: .4byte sOakSpeechNidoranResources\n\
|
||||
_08044B38:\n\
|
||||
cmp r5, 0\n\
|
||||
beq _08044B94\n\
|
||||
cmp r5, 0x1\n\
|
||||
bne _08044B94\n\
|
||||
cmp r6, 0x4\n\
|
||||
bne _08044B5E\n\
|
||||
ldrb r1, [r2]\n\
|
||||
movs r0, 0x10\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x4\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2]\n\
|
||||
ldr r2, [r4]\n\
|
||||
ldrb r1, [r2]\n\
|
||||
movs r0, 0xF\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x40\n\
|
||||
b _08044B7C\n\
|
||||
_08044B5E:\n\
|
||||
cmp r6, 0x4\n\
|
||||
bls _08044B64\n\
|
||||
movs r6, 0\n\
|
||||
_08044B64:\n\
|
||||
ldrb r1, [r2]\n\
|
||||
movs r0, 0x10\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x1\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2]\n\
|
||||
ldr r2, [r4]\n\
|
||||
ldrb r1, [r2]\n\
|
||||
movs r0, 0xF\n\
|
||||
ands r0, r1\n\
|
||||
movs r1, 0x10\n\
|
||||
_08044B7C:\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r2]\n\
|
||||
ldr r2, _08044B90 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r1, [r2]\n\
|
||||
movs r0, 0x4\n\
|
||||
strb r0, [r1, 0x1]\n\
|
||||
ldr r1, [r2]\n\
|
||||
movs r0, 0x1\n\
|
||||
strb r0, [r1, 0x3]\n\
|
||||
b _08044BD0\n\
|
||||
.align 2, 0\n\
|
||||
_08044B90: .4byte sOakSpeechNidoranResources\n\
|
||||
_08044B94:\n\
|
||||
cmp r6, 0\n\
|
||||
bne _08044B9A\n\
|
||||
movs r6, 0x1\n\
|
||||
_08044B9A:\n\
|
||||
cmp r6, 0x8\n\
|
||||
bls _08044BA0\n\
|
||||
movs r6, 0x8\n\
|
||||
_08044BA0:\n\
|
||||
ldr r4, _08044C10 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r3, [r4]\n\
|
||||
movs r0, 0xF\n\
|
||||
adds r1, r6, 0\n\
|
||||
ands r1, r0\n\
|
||||
ldrb r2, [r3]\n\
|
||||
movs r0, 0x10\n\
|
||||
negs r0, r0\n\
|
||||
ands r0, r2\n\
|
||||
orrs r0, r1\n\
|
||||
strb r0, [r3]\n\
|
||||
ldr r2, [r4]\n\
|
||||
lsls r3, r6, 4\n\
|
||||
ldrb r1, [r2]\n\
|
||||
movs r0, 0xF\n\
|
||||
ands r0, r1\n\
|
||||
orrs r0, r3\n\
|
||||
strb r0, [r2]\n\
|
||||
ldr r1, [r4]\n\
|
||||
movs r2, 0\n\
|
||||
movs r0, 0x4\n\
|
||||
strb r0, [r1, 0x1]\n\
|
||||
ldr r0, [r4]\n\
|
||||
strb r2, [r0, 0x3]\n\
|
||||
_08044BD0:\n\
|
||||
ldr r5, _08044C10 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r5]\n\
|
||||
ldrb r1, [r0, 0x1]\n\
|
||||
lsls r1, 11\n\
|
||||
str r1, [r0, 0x4]\n\
|
||||
ldrb r0, [r0]\n\
|
||||
lsls r0, 28\n\
|
||||
lsrs r0, 28\n\
|
||||
muls r0, r1\n\
|
||||
bl AllocZeroed\n\
|
||||
ldr r1, [r5]\n\
|
||||
str r0, [r1, 0x8]\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsls r0, 28\n\
|
||||
lsrs r0, 23\n\
|
||||
bl AllocZeroed\n\
|
||||
adds r2, r0, 0\n\
|
||||
ldr r1, [r5]\n\
|
||||
str r2, [r1, 0xC]\n\
|
||||
ldr r0, [r1, 0x8]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044C04\n\
|
||||
cmp r2, 0\n\
|
||||
bne _08044C14\n\
|
||||
_08044C04:\n\
|
||||
movs r0, 0x1\n\
|
||||
mov r1, r8\n\
|
||||
orrs r1, r0\n\
|
||||
mov r8, r1\n\
|
||||
b _08044C44\n\
|
||||
.align 2, 0\n\
|
||||
_08044C10: .4byte sOakSpeechNidoranResources\n\
|
||||
_08044C14:\n\
|
||||
ldrb r0, [r1]\n\
|
||||
lsls r0, 28\n\
|
||||
movs r4, 0\n\
|
||||
adds r3, r5, 0\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044C44\n\
|
||||
_08044C20:\n\
|
||||
ldr r3, [r5]\n\
|
||||
ldr r0, [r3, 0xC]\n\
|
||||
lsls r1, r4, 2\n\
|
||||
adds r1, r0\n\
|
||||
ldr r0, [r3, 0x4]\n\
|
||||
adds r2, r0, 0\n\
|
||||
muls r2, r4\n\
|
||||
ldr r0, [r3, 0x8]\n\
|
||||
adds r0, r2\n\
|
||||
str r0, [r1]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
ldrb r0, [r3]\n\
|
||||
lsls r0, 28\n\
|
||||
lsrs r0, 28\n\
|
||||
cmp r4, r0\n\
|
||||
blt _08044C20\n\
|
||||
_08044C44:\n\
|
||||
ldr r5, _08044C8C @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r5]\n\
|
||||
ldrb r1, [r0]\n\
|
||||
lsls r1, 28\n\
|
||||
lsrs r1, 28\n\
|
||||
lsls r0, r1, 1\n\
|
||||
adds r0, r1\n\
|
||||
lsls r0, 3\n\
|
||||
bl AllocZeroed\n\
|
||||
ldr r2, [r5]\n\
|
||||
str r0, [r2, 0x10]\n\
|
||||
ldrb r1, [r2]\n\
|
||||
lsls r1, 28\n\
|
||||
lsrs r1, 28\n\
|
||||
ldrb r0, [r2, 0x1]\n\
|
||||
lsls r0, 3\n\
|
||||
muls r0, r1\n\
|
||||
bl AllocZeroed\n\
|
||||
adds r2, r0, 0\n\
|
||||
ldr r1, [r5]\n\
|
||||
str r2, [r1, 0x14]\n\
|
||||
ldr r0, [r1, 0x10]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044C7C\n\
|
||||
cmp r2, 0\n\
|
||||
bne _08044C90\n\
|
||||
_08044C7C:\n\
|
||||
movs r0, 0x2\n\
|
||||
mov r1, r8\n\
|
||||
orrs r1, r0\n\
|
||||
lsls r0, r1, 24\n\
|
||||
lsrs r0, 24\n\
|
||||
mov r8, r0\n\
|
||||
b _08044CE2\n\
|
||||
.align 2, 0\n\
|
||||
_08044C8C: .4byte sOakSpeechNidoranResources\n\
|
||||
_08044C90:\n\
|
||||
movs r4, 0\n\
|
||||
ldrb r0, [r1, 0x1]\n\
|
||||
ldrb r1, [r1]\n\
|
||||
lsls r1, 28\n\
|
||||
lsrs r1, 28\n\
|
||||
muls r0, r1\n\
|
||||
adds r3, r5, 0\n\
|
||||
cmp r4, r0\n\
|
||||
bge _08044CC6\n\
|
||||
adds r7, r3, 0\n\
|
||||
movs r5, 0x80\n\
|
||||
lsls r5, 4\n\
|
||||
_08044CA8:\n\
|
||||
ldr r2, [r7]\n\
|
||||
ldr r1, [r2, 0x14]\n\
|
||||
lsls r0, r4, 3\n\
|
||||
adds r0, r1\n\
|
||||
strh r5, [r0, 0x4]\n\
|
||||
adds r0, r4, 0x1\n\
|
||||
lsls r0, 24\n\
|
||||
lsrs r4, r0, 24\n\
|
||||
ldrb r1, [r2, 0x1]\n\
|
||||
ldrb r0, [r2]\n\
|
||||
lsls r0, 28\n\
|
||||
lsrs r0, 28\n\
|
||||
muls r0, r1\n\
|
||||
cmp r4, r0\n\
|
||||
blt _08044CA8\n\
|
||||
_08044CC6:\n\
|
||||
ldr r0, [r3]\n\
|
||||
ldrb r4, [r0, 0x3]\n\
|
||||
cmp r4, 0\n\
|
||||
beq _08044CDA\n\
|
||||
cmp r4, 0x1\n\
|
||||
bne _08044CDA\n\
|
||||
adds r1, r6, 0\n\
|
||||
bl OakSpeechNidoranFSetupTemplate\n\
|
||||
b _08044CE2\n\
|
||||
_08044CDA:\n\
|
||||
ldr r0, _08044D60 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r0]\n\
|
||||
bl OakSpeechNidoranFSetupTemplateDummy\n\
|
||||
_08044CE2:\n\
|
||||
movs r0, 0x2\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D12\n\
|
||||
ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r4]\n\
|
||||
ldr r0, [r0, 0x14]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D00\n\
|
||||
bl Free\n\
|
||||
ldr r1, [r4]\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r1, 0x14]\n\
|
||||
_08044D00:\n\
|
||||
ldr r0, [r4]\n\
|
||||
ldr r0, [r0, 0x10]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D12\n\
|
||||
bl Free\n\
|
||||
ldr r1, [r4]\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r1, 0x10]\n\
|
||||
_08044D12:\n\
|
||||
movs r0, 0x1\n\
|
||||
mov r1, r8\n\
|
||||
ands r0, r1\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D42\n\
|
||||
ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r4]\n\
|
||||
ldr r0, [r0, 0xC]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D30\n\
|
||||
bl Free\n\
|
||||
ldr r1, [r4]\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r1, 0xC]\n\
|
||||
_08044D30:\n\
|
||||
ldr r0, [r4]\n\
|
||||
ldr r0, [r0, 0x8]\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D42\n\
|
||||
bl Free\n\
|
||||
ldr r1, [r4]\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r1, 0x8]\n\
|
||||
_08044D42:\n\
|
||||
mov r0, r8\n\
|
||||
cmp r0, 0\n\
|
||||
beq _08044D64\n\
|
||||
ldr r4, _08044D60 @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r4]\n\
|
||||
movs r1, 0\n\
|
||||
movs r2, 0x18\n\
|
||||
bl memset\n\
|
||||
ldr r0, [r4]\n\
|
||||
bl Free\n\
|
||||
movs r0, 0\n\
|
||||
str r0, [r4]\n\
|
||||
b _08044D6C\n\
|
||||
.align 2, 0\n\
|
||||
_08044D60: .4byte sOakSpeechNidoranResources\n\
|
||||
_08044D64:\n\
|
||||
ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
|
||||
ldr r1, [r0]\n\
|
||||
movs r0, 0xA3\n\
|
||||
strb r0, [r1, 0x2]\n\
|
||||
_08044D6C:\n\
|
||||
ldr r0, _08044D7C @ =sOakSpeechNidoranResources\n\
|
||||
ldr r0, [r0]\n\
|
||||
_08044D70:\n\
|
||||
pop {r3}\n\
|
||||
mov r8, r3\n\
|
||||
pop {r4-r7}\n\
|
||||
pop {r1}\n\
|
||||
bx r1\n\
|
||||
.align 2, 0\n\
|
||||
_08044D7C: .4byte sOakSpeechNidoranResources\n\
|
||||
");
|
||||
}
|
||||
#endif
|
||||
|
||||
void OakSpeechNidoranFFreeResources(void)
|
||||
{
|
||||
if (sOakSpeechNidoranResources != NULL)
|
||||
{
|
||||
if (sOakSpeechNidoranResources->enable != 0xA3)
|
||||
{
|
||||
memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct));
|
||||
sOakSpeechNidoranResources = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (sOakSpeechNidoranResources->frameImages != NULL)
|
||||
FREE_AND_SET_NULL(sOakSpeechNidoranResources->frameImages);
|
||||
if (sOakSpeechNidoranResources->templates != NULL)
|
||||
FREE_AND_SET_NULL(sOakSpeechNidoranResources->templates);
|
||||
if (sOakSpeechNidoranResources->bufferPtrs != NULL)
|
||||
FREE_AND_SET_NULL(sOakSpeechNidoranResources->bufferPtrs);
|
||||
if (sOakSpeechNidoranResources->dataBuffer != NULL)
|
||||
FREE_AND_SET_NULL(sOakSpeechNidoranResources->dataBuffer);
|
||||
memset(sOakSpeechNidoranResources, 0, sizeof(struct OakSpeechNidoranFStruct));
|
||||
Free(sOakSpeechNidoranResources);
|
||||
sOakSpeechNidoranResources = NULL;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
void *OakSpeechNidoranFGetBuffer(u8 bufferId)
|
||||
{
|
||||
if (sOakSpeechNidoranResources->enable != 0xA3)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (bufferId >= (s8)sOakSpeechNidoranResources->spriteCount)
|
||||
bufferId = 0;
|
||||
return sOakSpeechNidoranResources->bufferPtrs[bufferId];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user