diff options
author | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-13 14:48:31 +0800 |
---|---|---|
committer | jiangzhengwenjz <jiangzhengwenjzw@qq.com> | 2019-07-13 14:48:31 +0800 |
commit | 0eb43a11847b4a20263146a61e009b86c67de1b4 (patch) | |
tree | 217a6a74006fd672b68d10cb1dd9614c43c37eaf | |
parent | 2b09d272ebb31c3aac555139a1b79e55b51a7def (diff) |
finished pokemon_3
-rw-r--r-- | asm/pokemon_3.s | 1228 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/pokemon.c | 387 |
3 files changed, 387 insertions, 1229 deletions
diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s deleted file mode 100644 index 788415285..000000000 --- a/asm/pokemon_3.s +++ /dev/null @@ -1,1228 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text -/* - thumb_func_start GetPlayerPartyHighestLevel -GetPlayerPartyHighestLevel: @ 80444F8 - push {r4-r6,lr} - movs r6, 0x1 - movs r5, 0 -_080444FE: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08044548 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x5 - movs r2, 0 - bl GetMonData - cmp r0, 0x1 - bne _08044538 - adds r0, r4, 0 - movs r1, 0x6 - movs r2, 0 - bl GetMonData - cmp r0, 0 - bne _08044538 - adds r0, r4, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r0, 24 - cmp r0, r6 - bls _08044538 - adds r6, r0, 0 -_08044538: - adds r5, 0x1 - cmp r5, 0x5 - ble _080444FE - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08044548: .4byte gPlayerParty - thumb_func_end GetPlayerPartyHighestLevel - - thumb_func_start FacilityClassToPicIndex -FacilityClassToPicIndex: @ 804454C - lsls r0, 16 - lsrs r0, 16 - ldr r1, _08044558 @ =gFacilityClassToPicIndex - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08044558: .4byte gFacilityClassToPicIndex - thumb_func_end FacilityClassToPicIndex - - thumb_func_start sub_804455C -sub_804455C: @ 804455C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - cmp r0, 0x5 - bhi _08044632 - lsls r0, 2 - ldr r1, _08044574 @ =_08044578 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08044574: .4byte _08044578 - .align 2, 0 -_08044578: - .4byte _08044632 - .4byte _08044590 - .4byte _08044664 - .4byte _080445BC - .4byte _08044664 - .4byte _080445F4 -_08044590: - ldr r0, _080445B0 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08044632 - ldr r0, _080445B4 @ =gMain - ldr r1, _080445B8 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08044632 - b _0804461A - .align 2, 0 -_080445B0: .4byte gBattleTypeFlags -_080445B4: .4byte gMain -_080445B8: .4byte 0x00000439 -_080445BC: - ldr r0, _080445E8 @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08044632 - ldr r0, _080445EC @ =gMain - ldr r1, _080445F0 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08044632 - cmp r5, 0x1 - beq _08044664 - cmp r5, 0x4 - beq _08044664 - cmp r5, 0x5 - beq _08044664 - b _08044632 - .align 2, 0 -_080445E8: .4byte gBattleTypeFlags -_080445EC: .4byte gMain -_080445F0: .4byte 0x00000439 -_080445F4: - ldr r0, _08044638 @ =gBattleTypeFlags - ldr r2, [r0] - movs r3, 0x2 - adds r0, r2, 0 - ands r0, r3 - cmp r0, 0 - beq _08044648 - ldr r0, _0804463C @ =gMain - ldr r1, _08044640 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08044632 - movs r0, 0x40 - ands r2, r0 - cmp r2, 0 - beq _08044658 -_0804461A: - ldr r4, _08044644 @ =gLinkPlayers - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r1, r4 - ldrh r0, [r1, 0x18] - cmp r0, r5 - bne _08044664 -_08044632: - movs r0, 0 - b _08044666 - .align 2, 0 -_08044638: .4byte gBattleTypeFlags -_0804463C: .4byte gMain -_08044640: .4byte 0x00000439 -_08044644: .4byte gLinkPlayers -_08044648: - ldr r0, _0804466C @ =gMain - ldr r1, _08044670 @ =0x00000439 - adds r0, r1 - ldrb r1, [r0] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _08044632 -_08044658: - adds r0, r5, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08044632 -_08044664: - movs r0, 0x1 -_08044666: - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0804466C: .4byte gMain -_08044670: .4byte 0x00000439 - thumb_func_end sub_804455C - - thumb_func_start GetDeoxysStat -GetDeoxysStat: @ 8044674 - push {r4-r6,lr} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r0, _0804469C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x20 - ands r0, r1 - cmp r0, 0 - bne _08044698 - adds r0, r5, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - movs r1, 0xCD - lsls r1, 1 - cmp r0, r1 - beq _080446A0 -_08044698: - movs r0, 0 - b _080446FE - .align 2, 0 -_0804469C: .4byte gBattleTypeFlags -_080446A0: - adds r1, r6, 0 - adds r1, 0x27 - adds r0, r5, 0 - movs r2, 0 - bl GetMonData - adds r4, r0, 0 - adds r1, r6, 0 - adds r1, 0x1A - adds r0, r5, 0 - movs r2, 0 - bl GetMonData - ldr r2, _08044704 @ =sDeoxysBaseStats - lsls r1, r6, 1 - adds r1, r2 - ldrh r1, [r1] - lsls r1, 1 - adds r1, r4 - cmp r0, 0 - bge _080446CC - adds r0, 0x3 -_080446CC: - asrs r0, 2 - adds r0, r1, r0 - adds r1, r5, 0 - adds r1, 0x54 - ldrb r1, [r1] - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - adds r0, 0x5 - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r5, 0 - bl GetNature - lsls r0, 24 - lsrs r0, 24 - lsls r2, r6, 24 - lsrs r2, 24 - adds r1, r4, 0 - bl ModifyStatByNature - lsls r0, 16 - lsrs r4, r0, 16 - adds r0, r4, 0 -_080446FE: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08044704: .4byte sDeoxysBaseStats - thumb_func_end GetDeoxysStat - - thumb_func_start SetDeoxysStats -SetDeoxysStats: @ 8044708 - push {r4,r5,lr} - sub sp, 0x4 - movs r5, 0 -_0804470E: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _080447A8 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - movs r1, 0xCD - lsls r1, 1 - cmp r0, r1 - bne _08044798 - adds r0, r4, 0 - movs r1, 0x3B - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x3B - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3C - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x3C - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3D - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x3D - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3E - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x3E - mov r2, sp - bl SetMonData - adds r0, r4, 0 - movs r1, 0x3F - movs r2, 0 - bl GetMonData - str r0, [sp] - adds r0, r4, 0 - movs r1, 0x3F - mov r2, sp - bl SetMonData -_08044798: - adds r5, 0x1 - cmp r5, 0x5 - ble _0804470E - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080447A8: .4byte gPlayerParty - thumb_func_end SetDeoxysStats - - thumb_func_start sub_80447AC -sub_80447AC: @ 80447AC - push {lr} - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _080447E8 @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r0, r3, 0x4 - adds r0, r1, r0 - ldr r2, [r0] - movs r0, 0x7 - ands r2, r0 - adds r1, r3 - ldrb r0, [r1, 0x13] - lsls r0, 3 - orrs r2, r0 - ldr r0, _080447EC @ =gLinkPlayerFacilityClasses - lsls r2, 1 - adds r2, r0 - ldrh r0, [r2] - bl FacilityClassToPicIndex - lsls r0, 16 - lsrs r0, 16 - pop {r1} - bx r1 - .align 2, 0 -_080447E8: .4byte gLinkPlayers -_080447EC: .4byte gLinkPlayerFacilityClasses - thumb_func_end sub_80447AC - - thumb_func_start sub_80447F0 -sub_80447F0: @ 80447F0 - push {lr} - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - ldr r3, _0804482C @ =gLinkPlayers - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - adds r0, r3, 0x4 - adds r0, r1, r0 - ldr r2, [r0] - movs r0, 0x7 - ands r2, r0 - adds r1, r3 - ldrb r0, [r1, 0x13] - lsls r0, 3 - orrs r2, r0 - ldr r1, _08044830 @ =gFacilityClassToTrainerClass - ldr r0, _08044834 @ =gLinkPlayerFacilityClasses - lsls r2, 1 - adds r2, r0 - ldrh r0, [r2] - adds r0, r1 - ldrb r0, [r0] - pop {r1} - bx r1 - .align 2, 0 -_0804482C: .4byte gLinkPlayers -_08044830: .4byte gFacilityClassToTrainerClass -_08044834: .4byte gLinkPlayerFacilityClasses - thumb_func_end sub_80447F0 - - thumb_func_start CreateObedientEnemyMon -CreateObedientEnemyMon: @ 8044838 - push {r4-r7,lr} - sub sp, 0x14 - ldr r0, _08044888 @ =gSpecialVar_0x8004 - ldrh r5, [r0] - ldr r0, _0804488C @ =gSpecialVar_0x8005 - ldrh r4, [r0] - ldr r0, _08044890 @ =gSpecialVar_0x8006 - ldrh r6, [r0] - bl ZeroEnemyPartyMons - ldr r7, _08044894 @ =gEnemyParty - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - str r0, [sp, 0x8] - str r0, [sp, 0xC] - adds r0, r7, 0 - adds r1, r5, 0 - adds r2, r4, 0 - movs r3, 0x20 - bl CreateObedientMon - cmp r6, 0 - beq _08044880 - add r0, sp, 0x10 - strb r6, [r0] - adds r1, r0, 0 - asrs r0, r6, 8 - strb r0, [r1, 0x1] - adds r0, r7, 0 - movs r1, 0xC - add r2, sp, 0x10 - bl SetMonData -_08044880: - add sp, 0x14 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044888: .4byte gSpecialVar_0x8004 -_0804488C: .4byte gSpecialVar_0x8005 -_08044890: .4byte gSpecialVar_0x8006 -_08044894: .4byte gEnemyParty - thumb_func_end CreateObedientEnemyMon - - thumb_func_start HandleSetPokedexFlag -HandleSetPokedexFlag: @ 8044898 - push {r4-r7,lr} - adds r7, r2, 0 - lsls r0, 16 - lsrs r4, r0, 16 - adds r6, r4, 0 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0x2 - eors r0, r5 - negs r1, r0 - orrs r1, r0 - lsrs r1, 31 - adds r0, r4, 0 - bl GetSetPokedexFlag - lsls r0, 24 - cmp r0, 0 - bne _080448EE - adds r0, r4, 0 - adds r1, r5, 0 - bl GetSetPokedexFlag - adds r0, r4, 0 - bl NationalPokedexNumToSpecies - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC9 - bne _080448D8 - ldr r0, _080448F4 @ =gSaveBlock2Ptr - ldr r0, [r0] - str r7, [r0, 0x1C] -_080448D8: - adds r0, r6, 0 - bl NationalPokedexNumToSpecies - lsls r0, 16 - movs r1, 0x9A - lsls r1, 17 - cmp r0, r1 - bne _080448EE - ldr r0, _080448F4 @ =gSaveBlock2Ptr - ldr r0, [r0] - str r7, [r0, 0x20] -_080448EE: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080448F4: .4byte gSaveBlock2Ptr - thumb_func_end HandleSetPokedexFlag - - thumb_func_start CheckBattleTypeGhost -CheckBattleTypeGhost: @ 80448F8 - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r1, 24 - lsrs r2, r1, 24 - ldr r0, _0804493C @ =gBattleTypeFlags - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 8 - ands r0, r1 - cmp r0, 0 - beq _08044944 - adds r0, r2, 0 - bl GetBattlerSide - lsls r0, 24 - cmp r0, 0 - beq _08044944 - adds r0, r4, 0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - mov r0, sp - bl StringGetEnd10 - ldr r1, _08044940 @ =gUnknown_841D148 - mov r0, sp - bl StringCompare - cmp r0, 0 - bne _08044944 - movs r0, 0x1 - b _08044946 - .align 2, 0 -_0804493C: .4byte gBattleTypeFlags -_08044940: .4byte gUnknown_841D148 -_08044944: - movs r0, 0 -_08044946: - add sp, 0xC - pop {r4} - pop {r1} - bx r1 - thumb_func_end CheckBattleTypeGhost - - thumb_func_start OakSpeechNidoranFSetupTemplate -OakSpeechNidoranFSetupTemplate: @ 8044950 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r6, 0 - cmp r1, 0x3 - bls _080449EC - adds r5, r6, 0 - ldrb r0, [r4] - lsls r0, 28 - lsrs r0, 28 - cmp r5, r0 - bge _08044A2C -_08044972: - ldr r1, [r4, 0x10] - lsls r3, r5, 1 - adds r0, r3, r5 - lsls r0, 3 - ldr r2, _080449E8 @ =gUnknown_825DEF0 - adds r1, r0, r1 - adds r0, r2 - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - ldm r0!, {r2,r6,r7} - stm r1!, {r2,r6,r7} - movs r6, 0 - ldrb r2, [r4, 0x1] - ldr r0, [r4, 0x10] - mov r10, r0 - mov r8, r3 - ldr r7, [r4, 0x14] - adds r1, r5, 0x1 - mov r9, r1 - cmp r6, r2 - bcs _080449C2 - mov r12, r7 - ldr r1, [r4, 0xC] - lsls r0, r5, 2 - adds r0, r1 - ldr r3, [r0] -_080449A6: - adds r0, r5, 0 - muls r0, r2 - adds r0, r6 - lsls r0, 3 - add r0, r12 - lsls r1, r6, 11 - adds r1, r3, r1 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldrb r2, [r4, 0x1] - cmp r6, r2 - bcc _080449A6 -_080449C2: - mov r2, r8 - adds r1, r2, r5 - lsls r1, 3 - add r1, r10 - ldrb r0, [r4, 0x1] - muls r0, r5 - lsls r0, 3 - adds r0, r7, r0 - str r0, [r1, 0xC] - mov r3, r9 - lsls r0, r3, 16 - lsrs r5, r0, 16 - ldrb r0, [r4] - lsls r0, 28 - lsrs r0, 28 - cmp r5, r0 - blt _08044972 - b _08044A2C - .align 2, 0 -_080449E8: .4byte gUnknown_825DEF0 -_080449EC: - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldr r2, _08044A3C @ =gUnknown_825DEF0 - ldr r1, [r4, 0x10] - adds r0, r2 - ldm r0!, {r2,r5,r7} - stm r1!, {r2,r5,r7} - ldm r0!, {r3,r5,r7} - stm r1!, {r3,r5,r7} - ldr r0, [r4, 0x10] - mov r10, r0 - ldr r7, [r4, 0x14] - ldrb r1, [r4, 0x1] - cmp r6, r1 - bcs _08044A28 - adds r3, r7, 0 - ldr r0, [r4, 0xC] - ldr r2, [r0] -_08044A12: - lsls r0, r6, 3 - adds r0, r3 - lsls r1, r6, 11 - adds r1, r2, r1 - str r1, [r0] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldrb r5, [r4, 0x1] - cmp r6, r5 - bcc _08044A12 -_08044A28: - mov r6, r10 - str r7, [r6, 0xC] -_08044A2C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044A3C: .4byte gUnknown_825DEF0 - thumb_func_end OakSpeechNidoranFSetupTemplate - - thumb_func_start OakSpeechNidoranFSetupTemplateDummy -OakSpeechNidoranFSetupTemplateDummy: @ 8044A40 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r4, r0, 0 - ldrb r0, [r4] - lsls r0, 28 - movs r3, 0 - cmp r0, 0 - beq _08044ADA - ldr r0, _08044AE8 @ =gUnknown_825E05C - mov r10, r0 -_08044A5A: - ldr r0, [r4, 0x10] - lsls r2, r3, 1 - adds r1, r2, r3 - lsls r1, 3 - adds r1, r0 - mov r0, r10 - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - ldm r0!, {r5-r7} - stm r1!, {r5-r7} - movs r5, 0 - ldr r0, [r4, 0x10] - mov r8, r0 - mov r12, r2 - ldr r7, [r4, 0x14] - adds r1, r3, 0x1 - mov r9, r1 - ldrb r6, [r4, 0x1] - cmp r5, r6 - bcs _08044AAE - adds r6, r7, 0 - ldr r1, [r4, 0xC] - lsls r0, r3, 2 - adds r0, r1 - ldr r2, [r0] -_08044A8C: - ldrb r0, [r4] - lsls r0, 28 - lsrs r0, 28 - adds r1, r3, 0 - muls r1, r0 - adds r1, r5 - lsls r1, 3 - adds r1, r6 - lsls r0, r5, 11 - adds r0, r2, r0 - str r0, [r1] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - ldrb r0, [r4, 0x1] - cmp r5, r0 - bcc _08044A8C -_08044AAE: - mov r5, r12 - adds r1, r5, r3 - lsls r1, 3 - add r1, r8 - ldrb r0, [r4] - lsls r0, 28 - lsrs r0, 28 - muls r0, r3 - lsls r0, 3 - adds r0, r7, r0 - str r0, [r1, 0xC] - ldr r6, _08044AEC @ =gUnknown_82349BC - str r6, [r1, 0x8] - strh r3, [r1, 0x2] - mov r7, r9 - lsls r0, r7, 16 - lsrs r3, r0, 16 - ldrb r0, [r4] - lsls r0, 28 - lsrs r0, 28 - cmp r3, r0 - blt _08044A5A -_08044ADA: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08044AE8: .4byte gUnknown_825E05C -_08044AEC: .4byte gUnknown_82349BC - thumb_func_end OakSpeechNidoranFSetupTemplateDummy - - thumb_func_start OakSpeechNidoranFSetup -OakSpeechNidoranFSetup: @ 8044AF0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - movs r0, 0 - mov r8, r0 - ldr r4, _08044B34 @ =sOakSpeechNidoranResources - ldr r1, [r4] - cmp r1, 0 - beq _08044B1E - ldrb r0, [r1, 0x2] - cmp r0, 0xA3 - beq _08044B2E - adds r0, r1, 0 - movs r1, 0 - movs r2, 0x18 - bl memset - mov r1, r8 - str r1, [r4] -_08044B1E: - ldr r4, _08044B34 @ =sOakSpeechNidoranResources - movs r0, 0x18 - bl AllocZeroed - adds r2, r0, 0 - str r2, [r4] - cmp r2, 0 - bne _08044B38 -_08044B2E: - movs r0, 0 - b _08044D70 - .align 2, 0 -_08044B34: .4byte sOakSpeechNidoranResources -_08044B38: - cmp r5, 0 - beq _08044B94 - cmp r5, 0x1 - bne _08044B94 - cmp r6, 0x4 - bne _08044B5E - ldrb r1, [r2] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2] - ldr r2, [r4] - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - movs r1, 0x40 - b _08044B7C -_08044B5E: - cmp r6, 0x4 - bls _08044B64 - movs r6, 0 -_08044B64: - ldrb r1, [r2] - movs r0, 0x10 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldr r2, [r4] - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - movs r1, 0x10 -_08044B7C: - orrs r0, r1 - strb r0, [r2] - ldr r2, _08044B90 @ =sOakSpeechNidoranResources - ldr r1, [r2] - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r1, [r2] - movs r0, 0x1 - strb r0, [r1, 0x3] - b _08044BD0 - .align 2, 0 -_08044B90: .4byte sOakSpeechNidoranResources -_08044B94: - cmp r6, 0 - bne _08044B9A - movs r6, 0x1 -_08044B9A: - cmp r6, 0x8 - bls _08044BA0 - movs r6, 0x8 -_08044BA0: - ldr r4, _08044C10 @ =sOakSpeechNidoranResources - ldr r3, [r4] - movs r0, 0xF - adds r1, r6, 0 - ands r1, r0 - ldrb r2, [r3] - movs r0, 0x10 - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3] - ldr r2, [r4] - lsls r3, r6, 4 - ldrb r1, [r2] - movs r0, 0xF - ands r0, r1 - orrs r0, r3 - strb r0, [r2] - ldr r1, [r4] - movs r2, 0 - movs r0, 0x4 - strb r0, [r1, 0x1] - ldr r0, [r4] - strb r2, [r0, 0x3] -_08044BD0: - ldr r5, _08044C10 @ =sOakSpeechNidoranResources - ldr r0, [r5] - ldrb r1, [r0, 0x1] - lsls r1, 11 - str r1, [r0, 0x4] - ldrb r0, [r0] - lsls r0, 28 - lsrs r0, 28 - muls r0, r1 - bl AllocZeroed - ldr r1, [r5] - str r0, [r1, 0x8] - ldrb r0, [r1] - lsls r0, 28 - lsrs r0, 23 - bl AllocZeroed - adds r2, r0, 0 - ldr r1, [r5] - str r2, [r1, 0xC] - ldr r0, [r1, 0x8] - cmp r0, 0 - beq _08044C04 - cmp r2, 0 - bne _08044C14 -_08044C04: - movs r0, 0x1 - mov r1, r8 - orrs r1, r0 - mov r8, r1 - b _08044C44 - .align 2, 0 -_08044C10: .4byte sOakSpeechNidoranResources -_08044C14: - ldrb r0, [r1] - lsls r0, 28 - movs r4, 0 - adds r3, r5, 0 - cmp r0, 0 - beq _08044C44 -_08044C20: - ldr r3, [r5] - ldr r0, [r3, 0xC] - lsls r1, r4, 2 - adds r1, r0 - ldr r0, [r3, 0x4] - adds r2, r0, 0 - muls r2, r4 - ldr r0, [r3, 0x8] - adds r0, r2 - str r0, [r1] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r0, [r3] - lsls r0, 28 - lsrs r0, 28 - cmp r4, r0 - blt _08044C20 -_08044C44: - ldr r5, _08044C8C @ =sOakSpeechNidoranResources - ldr r0, [r5] - ldrb r1, [r0] - lsls r1, 28 - lsrs r1, 28 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - bl AllocZeroed - ldr r2, [r5] - str r0, [r2, 0x10] - ldrb r1, [r2] - lsls r1, 28 - lsrs r1, 28 - ldrb r0, [r2, 0x1] - lsls r0, 3 - muls r0, r1 - bl AllocZeroed - adds r2, r0, 0 - ldr r1, [r5] - str r2, [r1, 0x14] - ldr r0, [r1, 0x10] - cmp r0, 0 - beq _08044C7C - cmp r2, 0 - bne _08044C90 -_08044C7C: - movs r0, 0x2 - mov r1, r8 - orrs r1, r0 - lsls r0, r1, 24 - lsrs r0, 24 - mov r8, r0 - b _08044CE2 - .align 2, 0 -_08044C8C: .4byte sOakSpeechNidoranResources -_08044C90: - movs r4, 0 - ldrb r0, [r1, 0x1] - ldrb r1, [r1] - lsls r1, 28 - lsrs r1, 28 - muls r0, r1 - adds r3, r5, 0 - cmp r4, r0 - bge _08044CC6 - adds r7, r3, 0 - movs r5, 0x80 - lsls r5, 4 -_08044CA8: - ldr r2, [r7] - ldr r1, [r2, 0x14] - lsls r0, r4, 3 - adds r0, r1 - strh r5, [r0, 0x4] - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldrb r1, [r2, 0x1] - ldrb r0, [r2] - lsls r0, 28 - lsrs r0, 28 - muls r0, r1 - cmp r4, r0 - blt _08044CA8 -_08044CC6: - ldr r0, [r3] - ldrb r4, [r0, 0x3] - cmp r4, 0 - beq _08044CDA - cmp r4, 0x1 - bne _08044CDA - adds r1, r6, 0 - bl OakSpeechNidoranFSetupTemplate - b _08044CE2 -_08044CDA: - ldr r0, _08044D60 @ =sOakSpeechNidoranResources - ldr r0, [r0] - bl OakSpeechNidoranFSetupTemplateDummy -_08044CE2: - movs r0, 0x2 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _08044D12 - ldr r4, _08044D60 @ =sOakSpeechNidoranResources - ldr r0, [r4] - ldr r0, [r0, 0x14] - cmp r0, 0 - beq _08044D00 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x14] -_08044D00: - ldr r0, [r4] - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _08044D12 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x10] -_08044D12: - movs r0, 0x1 - mov r1, r8 - ands r0, r1 - cmp r0, 0 - beq _08044D42 - ldr r4, _08044D60 @ =sOakSpeechNidoranResources - ldr r0, [r4] - ldr r0, [r0, 0xC] - cmp r0, 0 - beq _08044D30 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0xC] -_08044D30: - ldr r0, [r4] - ldr r0, [r0, 0x8] - cmp r0, 0 - beq _08044D42 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x8] -_08044D42: - mov r0, r8 - cmp r0, 0 - beq _08044D64 - ldr r4, _08044D60 @ =sOakSpeechNidoranResources - ldr r0, [r4] - movs r1, 0 - movs r2, 0x18 - bl memset - ldr r0, [r4] - bl Free - movs r0, 0 - str r0, [r4] - b _08044D6C - .align 2, 0 -_08044D60: .4byte sOakSpeechNidoranResources -_08044D64: - ldr r0, _08044D7C @ =sOakSpeechNidoranResources - ldr r1, [r0] - movs r0, 0xA3 - strb r0, [r1, 0x2] -_08044D6C: - ldr r0, _08044D7C @ =sOakSpeechNidoranResources - ldr r0, [r0] -_08044D70: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08044D7C: .4byte sOakSpeechNidoranResources - thumb_func_end OakSpeechNidoranFSetup -*/ - thumb_func_start OakSpeechNidoranFFreeResources -OakSpeechNidoranFFreeResources: @ 8044D80 - push {r4,lr} - ldr r4, _08044D9C @ =sOakSpeechNidoranResources - ldr r1, [r4] - cmp r1, 0 - beq _08044DFA - ldrb r0, [r1, 0x2] - cmp r0, 0xA3 - beq _08044DA0 - adds r0, r1, 0 - movs r1, 0 - movs r2, 0x18 - bl memset - b _08044DF6 - .align 2, 0 -_08044D9C: .4byte sOakSpeechNidoranResources -_08044DA0: - ldr r0, [r1, 0x14] - cmp r0, 0 - beq _08044DB0 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x14] -_08044DB0: - ldr r0, [r4] - ldr r0, [r0, 0x10] - cmp r0, 0 - beq _08044DC2 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x10] -_08044DC2: - ldr r0, [r4] - ldr r0, [r0, 0xC] - cmp r0, 0 - beq _08044DD4 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0xC] -_08044DD4: - ldr r0, [r4] - ldr r0, [r0, 0x8] - cmp r0, 0 - beq _08044DE6 - bl Free - ldr r1, [r4] - movs r0, 0 - str r0, [r1, 0x8] -_08044DE6: - ldr r0, [r4] - movs r1, 0 - movs r2, 0x18 - bl memset - ldr r0, [r4] - bl Free -_08044DF6: - movs r0, 0 - str r0, [r4] -_08044DFA: - pop {r4} - pop {r0} - bx r0 - thumb_func_end OakSpeechNidoranFFreeResources - - thumb_func_start OakSpeechNidoranFGetBuffer -OakSpeechNidoranFGetBuffer: @ 8044E00 - push {lr} - lsls r0, 24 - lsrs r1, r0, 24 - ldr r0, _08044E14 @ =sOakSpeechNidoranResources - ldr r2, [r0] - ldrb r0, [r2, 0x2] - cmp r0, 0xA3 - beq _08044E18 - movs r0, 0 - b _08044E2C - .align 2, 0 -_08044E14: .4byte sOakSpeechNidoranResources -_08044E18: - ldrb r0, [r2] - lsls r0, 28 - lsrs r0, 28 - cmp r1, r0 - blt _08044E24 - movs r1, 0 -_08044E24: - ldr r0, [r2, 0xC] - lsls r1, 2 - adds r1, r0 - ldr r0, [r1] -_08044E2C: - pop {r1} - bx r1 - thumb_func_end OakSpeechNidoranFGetBuffer - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 2867cd998..1e9974d21 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -76,7 +76,6 @@ SECTIONS { asm/battle_ai_switch_items.o(.text); asm/battle_controller_link_opponent.o(.text); src/pokemon.o(.text); - asm/pokemon_3.o(.text); src/trig.o(.text); src/random.o(.text); src/util.o(.text); diff --git a/src/pokemon.c b/src/pokemon.c index 39ccbc2d3..9b8df60a6 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -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]; + } +} |