diff options
-rw-r--r-- | asm/code_8073B78.s (renamed from asm/code_8073AA0.s) | 118 | ||||
-rw-r--r-- | asm/code_8075BA4.s | 1027 | ||||
-rw-r--r-- | asm/code_808411C.s | 31 | ||||
-rw-r--r-- | asm/code_8084160.s | 958 | ||||
-rw-r--r-- | include/dungeon_ai_items.h | 5 | ||||
-rw-r--r-- | include/dungeon_entity.h | 56 | ||||
-rw-r--r-- | include/dungeon_global_data.h | 2 | ||||
-rw-r--r-- | include/dungeon_random.h | 9 | ||||
-rw-r--r-- | include/dungeon_random_1.h | 7 | ||||
-rw-r--r-- | include/map.h | 24 | ||||
-rwxr-xr-x | ld_script.txt | 6 | ||||
-rw-r--r-- | src/code_80521D0_1.c | 30 | ||||
-rw-r--r-- | src/code_8057824_1.c | 156 | ||||
-rw-r--r-- | src/code_80848F0.c | 6 | ||||
-rw-r--r-- | src/code_80869E4.c | 16 | ||||
-rw-r--r-- | src/code_8086A3C.c | 30 | ||||
-rw-r--r-- | src/dungeon_ai_items.c | 89 | ||||
-rw-r--r-- | src/dungeon_movement.c | 8 | ||||
-rw-r--r-- | src/dungeon_random.c | 15 | ||||
-rw-r--r-- | src/dungeon_random_1.c | 13 | ||||
-rw-r--r-- | src/dungeon_util.c | 4 | ||||
-rw-r--r-- | sym_ewram2.txt | 2 |
22 files changed, 1276 insertions, 1336 deletions
diff --git a/asm/code_8073AA0.s b/asm/code_8073B78.s index c7c06de..8ed31ec 100644 --- a/asm/code_8073AA0.s +++ b/asm/code_8073B78.s @@ -1,120 +1,10 @@ .include "constants/gba_constants.inc" - .include "asm/macros.inc" + .include "asm/macros.inc" - .syntax unified - - .text - - thumb_func_start FindRockItemTargets -FindRockItemTargets: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - adds r5, r0, 0 - mov r10, r1 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - ldr r1, _08073B6C - movs r0, 0 - str r0, [r1] - movs r6, 0 - adds r7, r1, 0 -_08073AC0: - ldr r0, _08073B70 - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _08073B74 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _08073B56 - cmp r5, r4 - beq _08073B56 - adds r0, r5, 0 - adds r1, r4, 0 - bl CanSee - lsls r0, 24 - cmp r0, 0 - beq _08073B56 - adds r0, r5, 0 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x1 - bl CanTarget - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08073B56 - movs r3, 0x4 - ldrsh r1, [r4, r3] - movs r2, 0x4 - ldrsh r0, [r5, r2] - subs r2, r1, r0 - cmp r2, 0 - bge _08073B10 - negs r2, r2 -_08073B10: - movs r3, 0x6 - ldrsh r1, [r4, r3] - movs r3, 0x6 - ldrsh r0, [r5, r3] - subs r1, r0 - cmp r1, 0 - bge _08073B20 - negs r1, r1 -_08073B20: - cmp r1, r2 - bge _08073B26 - adds r1, r2, 0 -_08073B26: - cmp r1, 0xA - bgt _08073B56 - mov r0, r8 - cmp r0, 0 - bne _08073B44 - adds r0, r4, 0 - mov r1, r10 - movs r2, 0x1 - bl EvaluateItem - bl RollPercentChance - lsls r0, 24 - cmp r0, 0 - beq _08073B56 -_08073B44: - ldr r2, [r7] - lsls r1, r2, 2 - add r1, r9 - ldrh r0, [r4, 0x4] - strh r0, [r1] - ldrh r0, [r4, 0x6] - strh r0, [r1, 0x2] - adds r2, 0x1 - str r2, [r7] -_08073B56: - adds r6, 0x1 - cmp r6, 0x13 - ble _08073AC0 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08073B6C: .4byte gNumPotentialTargets -_08073B70: .4byte gDungeonGlobalData -_08073B74: .4byte 0x000135cc - thumb_func_end FindRockItemTargets + .syntax unified + .text + thumb_func_start TargetThrownItem TargetThrownItem: push {r4-r7,lr} diff --git a/asm/code_8075BA4.s b/asm/code_8075BA4.s index dc265cb..90e8196 100644 --- a/asm/code_8075BA4.s +++ b/asm/code_8075BA4.s @@ -28806,1030 +28806,7 @@ sub_80840D8: str r1, [r2] bx lr .align 2, 0 -_080840E4: .4byte gUnknown_203B454 +_080840E4: .4byte gDungeonRngState thumb_func_end sub_80840D8 - thumb_func_start GetRandomNumber -GetRandomNumber: - ldr r2, _080840F8 - ldr r1, [r2] - ldr r0, _080840FC - muls r0, r1 - adds r0, 0x1 - str r0, [r2] - lsrs r0, 16 - bx lr - .align 2, 0 -_080840F8: .4byte gUnknown_203B454 -_080840FC: .4byte 0x5d588b65 - thumb_func_end GetRandomNumber - - thumb_func_start DungeonRandomCapped -DungeonRandomCapped: - push {r4,lr} - adds r4, r0, 0 - bl GetRandomNumber - ldr r1, _08084118 - ands r0, r1 - muls r0, r4 - asrs r0, 16 - ands r0, r1 - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_08084118: .4byte 0x0000ffff - thumb_func_end DungeonRandomCapped - - thumb_func_start sub_808411C -sub_808411C: - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - cmp r5, r4 - beq _0808413C - cmp r5, r4 - blt _08084134 - subs r0, r5, r4 - bl DungeonRandomCapped - adds r0, r4 - b _0808413C -_08084134: - subs r0, r4, r5 - bl DungeonRandomCapped - adds r0, r5 -_0808413C: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_808411C - - thumb_func_start RollPercentChance -RollPercentChance: - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x64 - bl DungeonRandomCapped - cmp r0, r4 - blt _08084156 - movs r0, 0 - b _08084158 -_08084156: - movs r0, 0x1 -_08084158: - pop {r4} - pop {r1} - bx r1 - thumb_func_end RollPercentChance - - thumb_func_start sub_8084160 -sub_8084160: - push {r4,lr} - adds r4, r0, 0 - movs r0, 0x64 - bl DungeonRandomCapped - cmp r0, r4 - blt _08084172 - movs r0, 0 - b _08084174 -_08084172: - movs r0, 0x1 -_08084174: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8084160 - - thumb_func_start sub_808417C -sub_808417C: - push {r4-r6,lr} - adds r5, r0, 0 - lsls r2, 24 - lsrs r6, r2, 24 - movs r2, 0 - ldrsh r0, [r1, r2] - movs r2, 0x2 - ldrsh r1, [r1, r2] - bl sub_808411C - adds r4, r0, 0 - adds r0, r5, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _080841DC - adds r0, r5, 0 - bl GetEntityType - cmp r0, 0x1 - bne _080841DC - cmp r6, 0 - beq _080841DC - adds r0, r5, 0 - movs r1, 0x12 - bl HasIQSkill - lsls r0, 24 - cmp r0, 0 - beq _080841C4 - cmp r4, 0x7F - beq _080841C4 - lsrs r0, r4, 31 - adds r0, r4, r0 - asrs r4, r0, 1 -_080841C4: - adds r0, r5, 0 - movs r1, 0x14 - bl HasAbility - lsls r0, 24 - cmp r0, 0 - beq _080841DC - cmp r4, 0x7F - beq _080841DC - cmp r4, 0x4 - ble _080841DC - movs r4, 0x5 -_080841DC: - cmp r4, 0 - bgt _080841E2 - movs r4, 0x1 -_080841E2: - adds r0, r4, 0 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_808417C - - thumb_func_start sub_80841EC -sub_80841EC: - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0xC4 - add r0, sp, 0x60 - mov r8, r0 - movs r1, 0 - movs r2, 0x60 - bl memset - movs r0, 0x6 - str r0, [sp, 0x64] - add r1, sp, 0x68 - movs r6, 0 - movs r0, 0x4 - strh r0, [r1] - movs r2, 0x3 - strh r2, [r1, 0x2] - add r1, sp, 0x6C - movs r0, 0x16 - strh r0, [r1] - mov r0, sp - adds r0, 0x6E - movs r5, 0xE - movs r1, 0xE - strh r1, [r0] - add r0, sp, 0x70 - strh r1, [r0] - add r4, sp, 0xC0 - str r4, [sp, 0x74] - str r2, [sp, 0x7C] - add r0, sp, 0x90 - str r2, [r0, 0x4] - add r0, sp, 0xA8 - str r2, [r0, 0x4] - mov r0, sp - mov r1, r8 - movs r2, 0x60 - bl memcpy - movs r0, 0x1 - strb r0, [r4] - strb r6, [r4, 0x1] - strb r5, [r4, 0x2] - strb r6, [r4, 0x3] - mov r1, sp - movs r0, 0x14 - strh r0, [r1, 0xA] - mov r0, sp - movs r1, 0x1 - bl sub_803ECB4 - ldr r0, _0808426C - ldr r0, [r0] - ldr r1, _08084270 - adds r0, r1 - movs r2, 0 - ldrsh r1, [r0, r2] - ldr r0, _08084274 - cmp r1, r0 - ble _08084278 - bl sub_8083DE0 - b _0808427C - .align 2, 0 -_0808426C: .4byte gDungeonGlobalData -_08084270: .4byte 0x0001ceac -_08084274: .4byte 0x00000225 -_08084278: - bl sub_8083D98 -_0808427C: - ldr r0, _080842B8 - ldr r1, [r0] - ldr r0, _080842BC - ldr r2, [r0] - ldr r0, _080842C0 - adds r2, r0 - movs r0, 0 - bl sub_8094558 - mov r4, sp -_08084290: - movs r0, 0x36 - bl sub_803E668 - bl sub_8083F58 - ldrh r1, [r4, 0xA] - movs r2, 0xA - ldrsh r0, [r4, r2] - cmp r0, 0x3 - ble _080842C4 - subs r0, r1, 0x1 - strh r0, [r4, 0xA] - movs r0, 0xA0 - strb r0, [r4] - mov r0, sp - movs r1, 0x1 - bl sub_803ECB4 - b _08084290 - .align 2, 0 -_080842B8: .4byte gUnknown_80FE6E8 -_080842BC: .4byte gDungeonGlobalData -_080842C0: .4byte 0x0001ce98 -_080842C4: - bl sub_8094D14 - lsls r0, 24 - cmp r0, 0 - bne _080842DA - ldr r0, _080842EC - ldrh r1, [r0, 0x2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _08084290 -_080842DA: - bl sub_8083D08 - add sp, 0xC4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080842EC: .4byte gRealInputs - thumb_func_end sub_80841EC - - thumb_func_start sub_80842F0 -sub_80842F0: - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r1, _0808436C - ldr r0, [r1] - ldr r2, _08084370 - adds r0, r2 - movs r2, 0 - strb r2, [r0] - ldr r0, [r1] - ldr r3, _08084374 - adds r0, r3 - strb r2, [r0] - ldr r0, [r1] - movs r5, 0xCF - lsls r5, 3 - adds r0, r5 - ldrb r0, [r0] - cmp r0, 0x2 - bne _080843AE - movs r6, 0 - ldr r0, _08084378 - mov r8, r0 - movs r7, 0x1 -_08084320: - lsls r0, r6, 24 - lsrs r0, 24 - bl sub_8096AB4 - adds r4, r0, 0 - ldrb r0, [r4] - cmp r0, 0x6 - bne _080843A8 - ldr r3, _0808436C - ldr r5, [r3] - ldr r1, _0808437C - adds r0, r5, r1 - ldrh r0, [r0] - ldrh r2, [r4, 0x4] - mov r1, r8 - ands r1, r0 - mov r0, r8 - ands r0, r2 - cmp r1, r0 - bne _080843A8 - ldrb r0, [r4, 0x1] - cmp r0, 0x3 - beq _080843A8 - cmp r0, 0x4 - bne _08084380 - ldrb r1, [r4, 0x10] - ldr r2, _08084374 - adds r0, r5, r2 - strb r1, [r0] - ldr r2, [r3] - ldrh r1, [r4, 0xE] - movs r3, 0xD1 - lsls r3, 3 - adds r0, r2, r3 - strh r1, [r0] - strb r7, [r2, 0x9] - b _080843A8 - .align 2, 0 -_0808436C: .4byte gDungeonGlobalData -_08084370: .4byte 0x00000677 -_08084374: .4byte 0x0000068a -_08084378: .4byte 0x0000ffff -_0808437C: .4byte 0x00000644 -_08084380: - cmp r0, 0 - beq _0808438C - cmp r0, 0x2 - beq _0808438C - cmp r0, 0x1 - bne _080843A8 -_0808438C: - ldr r2, [r3] - ldrh r0, [r4, 0xE] - movs r5, 0xD1 - lsls r5, 3 - adds r1, r2, r5 - strh r0, [r1] - ldrb r0, [r4, 0x1] - cmp r0, 0x2 - bne _080843A4 - ldr r1, _080843B8 - adds r0, r2, r1 - strb r7, [r0] -_080843A4: - ldr r0, [r3] - strb r7, [r0, 0x9] -_080843A8: - adds r6, 0x1 - cmp r6, 0x7 - ble _08084320 -_080843AE: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080843B8: .4byte 0x00000677 - thumb_func_end sub_80842F0 - - thumb_func_start sub_80843BC -sub_80843BC: - push {r4-r6,lr} - lsls r0, 16 - asrs r6, r0, 16 - movs r4, 0 - ldr r5, _08084418 -_080843C6: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_8096AB4 - adds r3, r0, 0 - ldrb r0, [r3] - cmp r0, 0x6 - bne _0808440C - ldr r0, _0808441C - ldr r0, [r0] - ldr r1, _08084420 - adds r0, r1 - ldrh r0, [r0] - ldrh r2, [r3, 0x4] - adds r1, r5, 0 - ands r1, r0 - adds r0, r5, 0 - ands r0, r2 - cmp r1, r0 - bne _0808440C - ldrb r0, [r3, 0x1] - cmp r0, 0 - beq _08084400 - cmp r0, 0x4 - beq _08084400 - cmp r0, 0x2 - beq _08084400 - cmp r0, 0x1 - bne _0808440C -_08084400: - movs r1, 0xE - ldrsh r0, [r3, r1] - cmp r6, r0 - bne _0808440C - movs r0, 0x8 - strb r0, [r3] -_0808440C: - adds r4, 0x1 - cmp r4, 0x7 - ble _080843C6 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08084418: .4byte 0x0000ffff -_0808441C: .4byte gDungeonGlobalData -_08084420: .4byte 0x00000644 - thumb_func_end sub_80843BC - - thumb_func_start sub_8084424 -sub_8084424: - push {r4,lr} - movs r4, 0 -_08084428: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_8096AB4 - adds r1, r0, 0 - ldrb r0, [r1] - cmp r0, 0x8 - bne _0808443C - movs r0, 0x9 - strb r0, [r1] -_0808443C: - adds r4, 0x1 - cmp r4, 0x7 - ble _08084428 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8084424 - - thumb_func_start sub_8084448 -sub_8084448: - push {r4-r7,lr} - adds r5, r0, 0 - ldr r7, [r5, 0x70] - ldr r4, _0808447C - bl GetLeaderEntity - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r5, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r5, 0 - bl sub_8070BC0 - lsls r0, 24 - cmp r0, 0 - bne _08084484 - ldr r0, _08084480 - b _080844F0 - .align 2, 0 -_0808447C: .4byte gAvailablePokemonNames -_08084480: .4byte gUnknown_80FA464 -_08084484: - ldr r4, _080844FC - ldr r0, [r4] - ldr r6, _08084500 - adds r0, r6 - ldrb r0, [r0] - cmp r0, 0 - beq _08084540 - ldr r0, _08084504 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - beq _080844A4 - b _080845D4 -_080844A4: - ldr r0, _08084508 - ldr r1, [r4] - adds r1, r6 - ldrb r1, [r1] - movs r2, 0 - bl sub_8090DC4 - movs r3, 0 - ldr r0, _0808450C - adds r6, r0, 0 - ldr r2, [r6] -_080844BA: - ldrb r1, [r2] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080844E2 - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - bne _080844E2 - movs r0, 0x18 - ands r0, r1 - cmp r0, 0x18 - beq _080844E2 - ldr r0, [r4] - ldr r1, _08084500 - adds r0, r1 - ldrb r1, [r2, 0x2] - ldrb r0, [r0] - cmp r1, r0 - beq _080844EA -_080844E2: - adds r2, 0x4 - adds r3, 0x1 - cmp r3, 0x13 - ble _080844BA -_080844EA: - cmp r3, 0x14 - bne _08084514 - ldr r0, _08084510 -_080844F0: - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - b _080845D4 - .align 2, 0 -_080844FC: .4byte gDungeonGlobalData -_08084500: .4byte 0x0000068a -_08084504: .4byte gUnknown_80FA32C -_08084508: .4byte gUnknown_202DE58 -_0808450C: .4byte gTeamInventory_203B460 -_08084510: .4byte gUnknown_80FA448 -_08084514: - lsls r1, r3, 2 - ldr r0, [r6] - adds r1, r0 - movs r0, 0 - strb r0, [r1, 0x2] - strb r0, [r1, 0x1] - strb r0, [r1] - bl FillInventoryGaps - ldr r0, _08084538 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - ldr r0, _0808453C - b _0808455E - .align 2, 0 -_08084538: .4byte gUnknown_80FA2B0 -_0808453C: .4byte gUnknown_80FA370 -_08084540: - ldr r0, _080845B0 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - bne _080845D4 - ldr r0, _080845B4 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - ldr r0, _080845B8 -_0808455E: - ldr r4, [r0] - movs r1, 0x2 - ldrsh r0, [r7, r1] - bl sub_80843BC - adds r0, r5, 0x4 - bl sub_8042A34 - movs r1, 0x87 - lsls r1, 2 - adds r0, r5, 0 - movs r2, 0 - bl sub_8068FE0 - movs r0, 0x1 - bl sub_804178C - ldr r5, _080845BC -_08084582: - movs r0, 0 - adds r1, r4, 0 - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - bne _080845C4 - ldr r0, _080845C0 - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl sub_8052B8C - adds r1, r0, 0 - cmp r1, 0x1 - bne _08084582 - ldr r0, [r5] - strb r1, [r0, 0x4] - ldr r1, [r5] - movs r0, 0x2 - strb r0, [r1, 0x11] - b _080845D4 - .align 2, 0 -_080845B0: .4byte gUnknown_80FA2F0 -_080845B4: .4byte gUnknown_80FA260 -_080845B8: .4byte gUnknown_80FA36C -_080845BC: .4byte gDungeonGlobalData -_080845C0: .4byte gUnknown_80FA394 -_080845C4: - ldr r0, _080845DC - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl sub_8052B8C - cmp r0, 0x1 - bne _08084582 -_080845D4: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080845DC: .4byte gUnknown_80FA3B8 - thumb_func_end sub_8084448 - - thumb_func_start sub_80845E0 -sub_80845E0: - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - ldr r0, [r6, 0x70] - mov r8, r0 - movs r7, 0 - movs r1, 0 - mov r9, r1 - ldr r4, _08084620 - bl GetLeaderEntity - adds r1, r0, 0 - adds r0, r4, 0 - movs r2, 0 - bl SetMessageArgument - adds r4, 0x50 - adds r0, r4, 0 - adds r1, r6, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r6, 0 - bl sub_8070BC0 - lsls r0, 24 - cmp r0, 0 - bne _08084630 - ldr r0, _08084624 - b _080846B4 - .align 2, 0 -_08084620: .4byte gAvailablePokemonNames -_08084624: .4byte gUnknown_80FA530 -_08084628: - adds r7, r4, 0 - ldr r2, [r7, 0x70] - mov r9, r2 - b _08084674 -_08084630: - movs r5, 0 -_08084632: - ldr r0, _08084660 - ldr r0, [r0] - lsls r1, r5, 2 - ldr r2, _08084664 - adds r0, r2 - adds r0, r1 - ldr r4, [r0] - adds r0, r4, 0 - bl EntityExists - lsls r0, 24 - cmp r0, 0 - beq _0808466E - ldr r0, [r4, 0x70] - adds r0, 0x40 - ldrb r0, [r0] - cmp r0, 0x4A - beq _0808465A - cmp r0, 0x47 - bne _08084668 -_0808465A: - movs r0, 0x1 - b _0808466A - .align 2, 0 -_08084660: .4byte gDungeonGlobalData -_08084664: .4byte 0x0001357c -_08084668: - movs r0, 0 -_0808466A: - cmp r0, 0 - bne _08084628 -_0808466E: - adds r5, 0x1 - cmp r5, 0x3 - ble _08084632 -_08084674: - cmp r7, 0 - bne _08084680 - ldr r0, _0808467C - b _080846B4 - .align 2, 0 -_0808467C: .4byte gUnknown_80FA52C -_08084680: - ldr r0, _0808469C - adds r1, r7, 0 - movs r2, 0 - bl SetMessageArgument - adds r0, r7, 0 - bl sub_8070BC0 - lsls r0, 24 - cmp r0, 0 - bne _080846A4 - ldr r0, _080846A0 - b _080846B4 - .align 2, 0 -_0808469C: .4byte gUnknown_202E038 -_080846A0: .4byte gUnknown_80FA54C -_080846A4: - adds r0, r6, 0 - adds r1, r7, 0 - bl CanSee - lsls r0, 24 - cmp r0, 0 - bne _080846C4 - ldr r0, _080846C0 -_080846B4: - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - b _08084768 - .align 2, 0 -_080846C0: .4byte gUnknown_80FA500 -_080846C4: - ldr r0, _08084744 - ldr r1, [r0] - movs r0, 0 - movs r2, 0x1 - bl PrintFieldMessage - mov r1, r8 - movs r2, 0x2 - ldrsh r0, [r1, r2] - bl sub_80843BC - ldr r5, _08084748 - ldr r0, [r5] - ldr r1, _0808474C - adds r0, r1 - ldrb r1, [r0] - mov r0, r9 - adds r0, 0x40 - strb r1, [r0] - adds r0, r6, 0x4 - bl sub_8042A34 - adds r0, r7, 0x4 - bl sub_8042A34 - movs r4, 0x87 - lsls r4, 2 - adds r0, r6, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8068FE0 - adds r0, r7, 0 - adds r1, r4, 0 - movs r2, 0 - bl sub_8068FE0 - movs r0, 0x1 - bl sub_804178C - ldr r4, _08084750 -_08084716: - movs r0, 0 - ldr r1, [r4] - movs r2, 0x1 - bl sub_8052B8C - cmp r0, 0x1 - bne _08084758 - ldr r0, _08084754 - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl sub_8052B8C - adds r1, r0, 0 - cmp r1, 0x1 - bne _08084716 - ldr r0, [r5] - strb r1, [r0, 0x4] - ldr r1, [r5] - movs r0, 0x2 - strb r0, [r1, 0x11] - b _08084768 - .align 2, 0 -_08084744: .4byte gUnknown_80FA4D4 -_08084748: .4byte gDungeonGlobalData -_0808474C: .4byte 0x00000644 -_08084750: .4byte gUnknown_80FA4D8 -_08084754: .4byte gUnknown_80FA394 -_08084758: - ldr r0, _08084774 - ldr r1, [r0] - movs r0, 0 - movs r2, 0 - bl sub_8052B8C - cmp r0, 0x1 - bne _08084716 -_08084768: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08084774: .4byte gUnknown_80FA3B8 - thumb_func_end sub_80845E0 - - thumb_func_start sub_8084778 -sub_8084778: - push {r4,lr} - ldr r0, _080847B8 - ldr r1, _080847BC - bl strcpy - movs r4, 0 -_08084784: - lsls r0, r4, 24 - lsrs r0, 24 - bl sub_8096AB4 - adds r1, r0, 0 - ldrb r0, [r1] - cmp r0, 0x6 - bne _080847C8 - ldr r0, _080847C0 - ldr r0, [r0] - ldr r2, _080847C4 - adds r0, r2 - ldrb r0, [r0] - ldrb r2, [r1, 0x4] - cmp r0, r2 - bne _080847C8 - ldrb r0, [r1, 0x1] - cmp r0, 0x2 - bne _080847C8 - movs r0, 0xE - ldrsh r1, [r1, r0] - ldr r0, _080847B8 - bl CopyCyanSpeciesNametoBuffer - b _080847CE - .align 2, 0 -_080847B8: .4byte gUnknown_202E088 -_080847BC: .4byte gUnknown_8107224 -_080847C0: .4byte gDungeonGlobalData -_080847C4: .4byte 0x00000644 -_080847C8: - adds r4, 0x1 - cmp r4, 0x7 - ble _08084784 -_080847CE: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8084778 - - thumb_func_start sub_80847D4 -sub_80847D4: - push {r4,r5,lr} - ldr r2, _08084820 - ldr r0, [r2] - ldr r1, _08084824 - adds r0, r1 - movs r1, 0 - strb r1, [r0] - ldr r0, [r2] - ldr r2, _08084828 - adds r0, r2 - strb r1, [r0] - bl sub_8040A84 - movs r4, 0 - ldr r0, _0808482C - ldrb r0, [r0] - cmp r0, 0 - beq _08084846 - movs r3, 0 -_080847FA: - ldr r0, _08084820 - ldr r0, [r0] - ldr r5, _08084830 - adds r0, r5 - movs r2, 0 - ldrsh r1, [r0, r2] - adds r0, r1, 0 - subs r0, 0x1C - cmp r0, 0x15 - bhi _08084810 - movs r1, 0x1B -_08084810: - ldr r2, _0808482C - adds r0, r3, r2 - ldrb r5, [r0] - cmp r1, r5 - bne _08084834 - bl sub_8084854 - b _08084846 - .align 2, 0 -_08084820: .4byte gDungeonGlobalData -_08084824: .4byte 0x00003a0d -_08084828: .4byte 0x0001356c -_0808482C: .4byte gUnknown_8107234 -_08084830: .4byte 0x00003a14 -_08084834: - adds r3, 0x8 - adds r4, 0x1 - ldr r0, _08084850 - cmp r4, r0 - bgt _08084846 - adds r0, r3, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _080847FA -_08084846: - bl sub_8097FF8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08084850: .4byte 0x000003e6 - thumb_func_end sub_80847D4 - - thumb_func_start sub_8084854 -sub_8084854: - push {r4,r5,lr} - adds r4, r0, 0 - ldr r5, _08084874 - ldr r2, [r5] - movs r1, 0xCF - lsls r1, 3 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0808487C - ldrb r1, [r4, 0x5] - ldr r3, _08084878 - adds r0, r2, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084874: .4byte gDungeonGlobalData -_08084878: .4byte 0x00003a0d -_0808487C: - ldrb r0, [r4, 0x4] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _08084898 - ldr r0, [r5] - ldrb r1, [r4, 0x5] - ldr r2, _08084894 - adds r0, r2 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_08084894: .4byte 0x00003a0d -_08084898: - ldrb r0, [r4, 0x2] - bl sub_8098100 - lsls r0, 24 - cmp r0, 0 - beq _080848B4 - ldr r0, [r5] - ldrb r1, [r4, 0x3] - ldr r3, _080848B0 - adds r0, r3 - strb r1, [r0] - b _080848C8 - .align 2, 0 -_080848B0: .4byte 0x00003a0d -_080848B4: - ldr r0, [r5] - ldrb r1, [r4, 0x1] - ldr r2, _080848E0 - adds r0, r2 - strb r1, [r0] - ldrb r0, [r4, 0x2] - cmp r0, 0x40 - beq _080848C8 - bl sub_8097FA8 -_080848C8: - ldr r0, _080848E4 - ldr r0, [r0] - ldr r3, _080848E8 - adds r0, r3 - movs r1, 0x1 - strb r1, [r0] - movs r0, 0 - bl sub_807E5E4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080848E0: .4byte 0x00003a0d -_080848E4: .4byte gDungeonGlobalData -_080848E8: .4byte 0x00000675 - thumb_func_end sub_8084854 - - .align 2,0 + .align 2, 0
\ No newline at end of file diff --git a/asm/code_808411C.s b/asm/code_808411C.s new file mode 100644 index 0000000..385dd10 --- /dev/null +++ b/asm/code_808411C.s @@ -0,0 +1,31 @@ + .include "constants/gba_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_808411C +sub_808411C: + push {r4,r5,lr} + adds r5, r0, 0 + adds r4, r1, 0 + cmp r5, r4 + beq _0808413C + cmp r5, r4 + blt _08084134 + subs r0, r5, r4 + bl DungeonRandomCapped + adds r0, r4 + b _0808413C +_08084134: + subs r0, r4, r5 + bl DungeonRandomCapped + adds r0, r5 +_0808413C: + pop {r4,r5} + pop {r1} + bx r1 + thumb_func_end sub_808411C + + .align 2, 0
\ No newline at end of file diff --git a/asm/code_8084160.s b/asm/code_8084160.s new file mode 100644 index 0000000..54f31d7 --- /dev/null +++ b/asm/code_8084160.s @@ -0,0 +1,958 @@ + .include "constants/gba_constants.inc" + .include "asm/macros.inc" + + .syntax unified + + .text + + thumb_func_start sub_8084160 +sub_8084160: + push {r4,lr} + adds r4, r0, 0 + movs r0, 0x64 + bl DungeonRandomCapped + cmp r0, r4 + blt _08084172 + movs r0, 0 + b _08084174 +_08084172: + movs r0, 0x1 +_08084174: + pop {r4} + pop {r1} + bx r1 + thumb_func_end sub_8084160 + + thumb_func_start sub_808417C +sub_808417C: + push {r4-r6,lr} + adds r5, r0, 0 + lsls r2, 24 + lsrs r6, r2, 24 + movs r2, 0 + ldrsh r0, [r1, r2] + movs r2, 0x2 + ldrsh r1, [r1, r2] + bl sub_808411C + adds r4, r0, 0 + adds r0, r5, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _080841DC + adds r0, r5, 0 + bl GetEntityType + cmp r0, 0x1 + bne _080841DC + cmp r6, 0 + beq _080841DC + adds r0, r5, 0 + movs r1, 0x12 + bl HasIQSkill + lsls r0, 24 + cmp r0, 0 + beq _080841C4 + cmp r4, 0x7F + beq _080841C4 + lsrs r0, r4, 31 + adds r0, r4, r0 + asrs r4, r0, 1 +_080841C4: + adds r0, r5, 0 + movs r1, 0x14 + bl HasAbility + lsls r0, 24 + cmp r0, 0 + beq _080841DC + cmp r4, 0x7F + beq _080841DC + cmp r4, 0x4 + ble _080841DC + movs r4, 0x5 +_080841DC: + cmp r4, 0 + bgt _080841E2 + movs r4, 0x1 +_080841E2: + adds r0, r4, 0 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_808417C + + thumb_func_start sub_80841EC +sub_80841EC: + push {r4-r6,lr} + mov r6, r8 + push {r6} + sub sp, 0xC4 + add r0, sp, 0x60 + mov r8, r0 + movs r1, 0 + movs r2, 0x60 + bl memset + movs r0, 0x6 + str r0, [sp, 0x64] + add r1, sp, 0x68 + movs r6, 0 + movs r0, 0x4 + strh r0, [r1] + movs r2, 0x3 + strh r2, [r1, 0x2] + add r1, sp, 0x6C + movs r0, 0x16 + strh r0, [r1] + mov r0, sp + adds r0, 0x6E + movs r5, 0xE + movs r1, 0xE + strh r1, [r0] + add r0, sp, 0x70 + strh r1, [r0] + add r4, sp, 0xC0 + str r4, [sp, 0x74] + str r2, [sp, 0x7C] + add r0, sp, 0x90 + str r2, [r0, 0x4] + add r0, sp, 0xA8 + str r2, [r0, 0x4] + mov r0, sp + mov r1, r8 + movs r2, 0x60 + bl memcpy + movs r0, 0x1 + strb r0, [r4] + strb r6, [r4, 0x1] + strb r5, [r4, 0x2] + strb r6, [r4, 0x3] + mov r1, sp + movs r0, 0x14 + strh r0, [r1, 0xA] + mov r0, sp + movs r1, 0x1 + bl sub_803ECB4 + ldr r0, _0808426C + ldr r0, [r0] + ldr r1, _08084270 + adds r0, r1 + movs r2, 0 + ldrsh r1, [r0, r2] + ldr r0, _08084274 + cmp r1, r0 + ble _08084278 + bl sub_8083DE0 + b _0808427C + .align 2, 0 +_0808426C: .4byte gDungeonGlobalData +_08084270: .4byte 0x0001ceac +_08084274: .4byte 0x00000225 +_08084278: + bl sub_8083D98 +_0808427C: + ldr r0, _080842B8 + ldr r1, [r0] + ldr r0, _080842BC + ldr r2, [r0] + ldr r0, _080842C0 + adds r2, r0 + movs r0, 0 + bl sub_8094558 + mov r4, sp +_08084290: + movs r0, 0x36 + bl sub_803E668 + bl sub_8083F58 + ldrh r1, [r4, 0xA] + movs r2, 0xA + ldrsh r0, [r4, r2] + cmp r0, 0x3 + ble _080842C4 + subs r0, r1, 0x1 + strh r0, [r4, 0xA] + movs r0, 0xA0 + strb r0, [r4] + mov r0, sp + movs r1, 0x1 + bl sub_803ECB4 + b _08084290 + .align 2, 0 +_080842B8: .4byte gUnknown_80FE6E8 +_080842BC: .4byte gDungeonGlobalData +_080842C0: .4byte 0x0001ce98 +_080842C4: + bl sub_8094D14 + lsls r0, 24 + cmp r0, 0 + bne _080842DA + ldr r0, _080842EC + ldrh r1, [r0, 0x2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _08084290 +_080842DA: + bl sub_8083D08 + add sp, 0xC4 + pop {r3} + mov r8, r3 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_080842EC: .4byte gRealInputs + thumb_func_end sub_80841EC + + thumb_func_start sub_80842F0 +sub_80842F0: + push {r4-r7,lr} + mov r7, r8 + push {r7} + ldr r1, _0808436C + ldr r0, [r1] + ldr r2, _08084370 + adds r0, r2 + movs r2, 0 + strb r2, [r0] + ldr r0, [r1] + ldr r3, _08084374 + adds r0, r3 + strb r2, [r0] + ldr r0, [r1] + movs r5, 0xCF + lsls r5, 3 + adds r0, r5 + ldrb r0, [r0] + cmp r0, 0x2 + bne _080843AE + movs r6, 0 + ldr r0, _08084378 + mov r8, r0 + movs r7, 0x1 +_08084320: + lsls r0, r6, 24 + lsrs r0, 24 + bl sub_8096AB4 + adds r4, r0, 0 + ldrb r0, [r4] + cmp r0, 0x6 + bne _080843A8 + ldr r3, _0808436C + ldr r5, [r3] + ldr r1, _0808437C + adds r0, r5, r1 + ldrh r0, [r0] + ldrh r2, [r4, 0x4] + mov r1, r8 + ands r1, r0 + mov r0, r8 + ands r0, r2 + cmp r1, r0 + bne _080843A8 + ldrb r0, [r4, 0x1] + cmp r0, 0x3 + beq _080843A8 + cmp r0, 0x4 + bne _08084380 + ldrb r1, [r4, 0x10] + ldr r2, _08084374 + adds r0, r5, r2 + strb r1, [r0] + ldr r2, [r3] + ldrh r1, [r4, 0xE] + movs r3, 0xD1 + lsls r3, 3 + adds r0, r2, r3 + strh r1, [r0] + strb r7, [r2, 0x9] + b _080843A8 + .align 2, 0 +_0808436C: .4byte gDungeonGlobalData +_08084370: .4byte 0x00000677 +_08084374: .4byte 0x0000068a +_08084378: .4byte 0x0000ffff +_0808437C: .4byte 0x00000644 +_08084380: + cmp r0, 0 + beq _0808438C + cmp r0, 0x2 + beq _0808438C + cmp r0, 0x1 + bne _080843A8 +_0808438C: + ldr r2, [r3] + ldrh r0, [r4, 0xE] + movs r5, 0xD1 + lsls r5, 3 + adds r1, r2, r5 + strh r0, [r1] + ldrb r0, [r4, 0x1] + cmp r0, 0x2 + bne _080843A4 + ldr r1, _080843B8 + adds r0, r2, r1 + strb r7, [r0] +_080843A4: + ldr r0, [r3] + strb r7, [r0, 0x9] +_080843A8: + adds r6, 0x1 + cmp r6, 0x7 + ble _08084320 +_080843AE: + pop {r3} + mov r8, r3 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080843B8: .4byte 0x00000677 + thumb_func_end sub_80842F0 + + thumb_func_start sub_80843BC +sub_80843BC: + push {r4-r6,lr} + lsls r0, 16 + asrs r6, r0, 16 + movs r4, 0 + ldr r5, _08084418 +_080843C6: + lsls r0, r4, 24 + lsrs r0, 24 + bl sub_8096AB4 + adds r3, r0, 0 + ldrb r0, [r3] + cmp r0, 0x6 + bne _0808440C + ldr r0, _0808441C + ldr r0, [r0] + ldr r1, _08084420 + adds r0, r1 + ldrh r0, [r0] + ldrh r2, [r3, 0x4] + adds r1, r5, 0 + ands r1, r0 + adds r0, r5, 0 + ands r0, r2 + cmp r1, r0 + bne _0808440C + ldrb r0, [r3, 0x1] + cmp r0, 0 + beq _08084400 + cmp r0, 0x4 + beq _08084400 + cmp r0, 0x2 + beq _08084400 + cmp r0, 0x1 + bne _0808440C +_08084400: + movs r1, 0xE + ldrsh r0, [r3, r1] + cmp r6, r0 + bne _0808440C + movs r0, 0x8 + strb r0, [r3] +_0808440C: + adds r4, 0x1 + cmp r4, 0x7 + ble _080843C6 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_08084418: .4byte 0x0000ffff +_0808441C: .4byte gDungeonGlobalData +_08084420: .4byte 0x00000644 + thumb_func_end sub_80843BC + + thumb_func_start sub_8084424 +sub_8084424: + push {r4,lr} + movs r4, 0 +_08084428: + lsls r0, r4, 24 + lsrs r0, 24 + bl sub_8096AB4 + adds r1, r0, 0 + ldrb r0, [r1] + cmp r0, 0x8 + bne _0808443C + movs r0, 0x9 + strb r0, [r1] +_0808443C: + adds r4, 0x1 + cmp r4, 0x7 + ble _08084428 + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_8084424 + + thumb_func_start sub_8084448 +sub_8084448: + push {r4-r7,lr} + adds r5, r0, 0 + ldr r7, [r5, 0x70] + ldr r4, _0808447C + bl GetLeaderEntity + adds r1, r0, 0 + adds r0, r4, 0 + movs r2, 0 + bl SetMessageArgument + adds r4, 0x50 + adds r0, r4, 0 + adds r1, r5, 0 + movs r2, 0 + bl SetMessageArgument + adds r0, r5, 0 + bl sub_8070BC0 + lsls r0, 24 + cmp r0, 0 + bne _08084484 + ldr r0, _08084480 + b _080844F0 + .align 2, 0 +_0808447C: .4byte gAvailablePokemonNames +_08084480: .4byte gUnknown_80FA464 +_08084484: + ldr r4, _080844FC + ldr r0, [r4] + ldr r6, _08084500 + adds r0, r6 + ldrb r0, [r0] + cmp r0, 0 + beq _08084540 + ldr r0, _08084504 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl sub_8052B8C + cmp r0, 0x1 + beq _080844A4 + b _080845D4 +_080844A4: + ldr r0, _08084508 + ldr r1, [r4] + adds r1, r6 + ldrb r1, [r1] + movs r2, 0 + bl sub_8090DC4 + movs r3, 0 + ldr r0, _0808450C + adds r6, r0, 0 + ldr r2, [r6] +_080844BA: + ldrb r1, [r2] + movs r0, 0x1 + ands r0, r1 + cmp r0, 0 + beq _080844E2 + movs r0, 0x2 + ands r0, r1 + cmp r0, 0 + bne _080844E2 + movs r0, 0x18 + ands r0, r1 + cmp r0, 0x18 + beq _080844E2 + ldr r0, [r4] + ldr r1, _08084500 + adds r0, r1 + ldrb r1, [r2, 0x2] + ldrb r0, [r0] + cmp r1, r0 + beq _080844EA +_080844E2: + adds r2, 0x4 + adds r3, 0x1 + cmp r3, 0x13 + ble _080844BA +_080844EA: + cmp r3, 0x14 + bne _08084514 + ldr r0, _08084510 +_080844F0: + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + b _080845D4 + .align 2, 0 +_080844FC: .4byte gDungeonGlobalData +_08084500: .4byte 0x0000068a +_08084504: .4byte gUnknown_80FA32C +_08084508: .4byte gUnknown_202DE58 +_0808450C: .4byte gTeamInventory_203B460 +_08084510: .4byte gUnknown_80FA448 +_08084514: + lsls r1, r3, 2 + ldr r0, [r6] + adds r1, r0 + movs r0, 0 + strb r0, [r1, 0x2] + strb r0, [r1, 0x1] + strb r0, [r1] + bl FillInventoryGaps + ldr r0, _08084538 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + ldr r0, _0808453C + b _0808455E + .align 2, 0 +_08084538: .4byte gUnknown_80FA2B0 +_0808453C: .4byte gUnknown_80FA370 +_08084540: + ldr r0, _080845B0 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl sub_8052B8C + cmp r0, 0x1 + bne _080845D4 + ldr r0, _080845B4 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + ldr r0, _080845B8 +_0808455E: + ldr r4, [r0] + movs r1, 0x2 + ldrsh r0, [r7, r1] + bl sub_80843BC + adds r0, r5, 0x4 + bl sub_8042A34 + movs r1, 0x87 + lsls r1, 2 + adds r0, r5, 0 + movs r2, 0 + bl sub_8068FE0 + movs r0, 0x1 + bl sub_804178C + ldr r5, _080845BC +_08084582: + movs r0, 0 + adds r1, r4, 0 + movs r2, 0x1 + bl sub_8052B8C + cmp r0, 0x1 + bne _080845C4 + ldr r0, _080845C0 + ldr r1, [r0] + movs r0, 0 + movs r2, 0 + bl sub_8052B8C + adds r1, r0, 0 + cmp r1, 0x1 + bne _08084582 + ldr r0, [r5] + strb r1, [r0, 0x4] + ldr r1, [r5] + movs r0, 0x2 + strb r0, [r1, 0x11] + b _080845D4 + .align 2, 0 +_080845B0: .4byte gUnknown_80FA2F0 +_080845B4: .4byte gUnknown_80FA260 +_080845B8: .4byte gUnknown_80FA36C +_080845BC: .4byte gDungeonGlobalData +_080845C0: .4byte gUnknown_80FA394 +_080845C4: + ldr r0, _080845DC + ldr r1, [r0] + movs r0, 0 + movs r2, 0 + bl sub_8052B8C + cmp r0, 0x1 + bne _08084582 +_080845D4: + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_080845DC: .4byte gUnknown_80FA3B8 + thumb_func_end sub_8084448 + + thumb_func_start sub_80845E0 +sub_80845E0: + push {r4-r7,lr} + mov r7, r9 + mov r6, r8 + push {r6,r7} + adds r6, r0, 0 + ldr r0, [r6, 0x70] + mov r8, r0 + movs r7, 0 + movs r1, 0 + mov r9, r1 + ldr r4, _08084620 + bl GetLeaderEntity + adds r1, r0, 0 + adds r0, r4, 0 + movs r2, 0 + bl SetMessageArgument + adds r4, 0x50 + adds r0, r4, 0 + adds r1, r6, 0 + movs r2, 0 + bl SetMessageArgument + adds r0, r6, 0 + bl sub_8070BC0 + lsls r0, 24 + cmp r0, 0 + bne _08084630 + ldr r0, _08084624 + b _080846B4 + .align 2, 0 +_08084620: .4byte gAvailablePokemonNames +_08084624: .4byte gUnknown_80FA530 +_08084628: + adds r7, r4, 0 + ldr r2, [r7, 0x70] + mov r9, r2 + b _08084674 +_08084630: + movs r5, 0 +_08084632: + ldr r0, _08084660 + ldr r0, [r0] + lsls r1, r5, 2 + ldr r2, _08084664 + adds r0, r2 + adds r0, r1 + ldr r4, [r0] + adds r0, r4, 0 + bl EntityExists + lsls r0, 24 + cmp r0, 0 + beq _0808466E + ldr r0, [r4, 0x70] + adds r0, 0x40 + ldrb r0, [r0] + cmp r0, 0x4A + beq _0808465A + cmp r0, 0x47 + bne _08084668 +_0808465A: + movs r0, 0x1 + b _0808466A + .align 2, 0 +_08084660: .4byte gDungeonGlobalData +_08084664: .4byte 0x0001357c +_08084668: + movs r0, 0 +_0808466A: + cmp r0, 0 + bne _08084628 +_0808466E: + adds r5, 0x1 + cmp r5, 0x3 + ble _08084632 +_08084674: + cmp r7, 0 + bne _08084680 + ldr r0, _0808467C + b _080846B4 + .align 2, 0 +_0808467C: .4byte gUnknown_80FA52C +_08084680: + ldr r0, _0808469C + adds r1, r7, 0 + movs r2, 0 + bl SetMessageArgument + adds r0, r7, 0 + bl sub_8070BC0 + lsls r0, 24 + cmp r0, 0 + bne _080846A4 + ldr r0, _080846A0 + b _080846B4 + .align 2, 0 +_0808469C: .4byte gUnknown_202E038 +_080846A0: .4byte gUnknown_80FA54C +_080846A4: + adds r0, r6, 0 + adds r1, r7, 0 + bl CanSee + lsls r0, 24 + cmp r0, 0 + bne _080846C4 + ldr r0, _080846C0 +_080846B4: + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + b _08084768 + .align 2, 0 +_080846C0: .4byte gUnknown_80FA500 +_080846C4: + ldr r0, _08084744 + ldr r1, [r0] + movs r0, 0 + movs r2, 0x1 + bl PrintFieldMessage + mov r1, r8 + movs r2, 0x2 + ldrsh r0, [r1, r2] + bl sub_80843BC + ldr r5, _08084748 + ldr r0, [r5] + ldr r1, _0808474C + adds r0, r1 + ldrb r1, [r0] + mov r0, r9 + adds r0, 0x40 + strb r1, [r0] + adds r0, r6, 0x4 + bl sub_8042A34 + adds r0, r7, 0x4 + bl sub_8042A34 + movs r4, 0x87 + lsls r4, 2 + adds r0, r6, 0 + adds r1, r4, 0 + movs r2, 0 + bl sub_8068FE0 + adds r0, r7, 0 + adds r1, r4, 0 + movs r2, 0 + bl sub_8068FE0 + movs r0, 0x1 + bl sub_804178C + ldr r4, _08084750 +_08084716: + movs r0, 0 + ldr r1, [r4] + movs r2, 0x1 + bl sub_8052B8C + cmp r0, 0x1 + bne _08084758 + ldr r0, _08084754 + ldr r1, [r0] + movs r0, 0 + movs r2, 0 + bl sub_8052B8C + adds r1, r0, 0 + cmp r1, 0x1 + bne _08084716 + ldr r0, [r5] + strb r1, [r0, 0x4] + ldr r1, [r5] + movs r0, 0x2 + strb r0, [r1, 0x11] + b _08084768 + .align 2, 0 +_08084744: .4byte gUnknown_80FA4D4 +_08084748: .4byte gDungeonGlobalData +_0808474C: .4byte 0x00000644 +_08084750: .4byte gUnknown_80FA4D8 +_08084754: .4byte gUnknown_80FA394 +_08084758: + ldr r0, _08084774 + ldr r1, [r0] + movs r0, 0 + movs r2, 0 + bl sub_8052B8C + cmp r0, 0x1 + bne _08084716 +_08084768: + pop {r3,r4} + mov r8, r3 + mov r9, r4 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_08084774: .4byte gUnknown_80FA3B8 + thumb_func_end sub_80845E0 + + thumb_func_start sub_8084778 +sub_8084778: + push {r4,lr} + ldr r0, _080847B8 + ldr r1, _080847BC + bl strcpy + movs r4, 0 +_08084784: + lsls r0, r4, 24 + lsrs r0, 24 + bl sub_8096AB4 + adds r1, r0, 0 + ldrb r0, [r1] + cmp r0, 0x6 + bne _080847C8 + ldr r0, _080847C0 + ldr r0, [r0] + ldr r2, _080847C4 + adds r0, r2 + ldrb r0, [r0] + ldrb r2, [r1, 0x4] + cmp r0, r2 + bne _080847C8 + ldrb r0, [r1, 0x1] + cmp r0, 0x2 + bne _080847C8 + movs r0, 0xE + ldrsh r1, [r1, r0] + ldr r0, _080847B8 + bl CopyCyanSpeciesNametoBuffer + b _080847CE + .align 2, 0 +_080847B8: .4byte gUnknown_202E088 +_080847BC: .4byte gUnknown_8107224 +_080847C0: .4byte gDungeonGlobalData +_080847C4: .4byte 0x00000644 +_080847C8: + adds r4, 0x1 + cmp r4, 0x7 + ble _08084784 +_080847CE: + pop {r4} + pop {r0} + bx r0 + thumb_func_end sub_8084778 + + thumb_func_start sub_80847D4 +sub_80847D4: + push {r4,r5,lr} + ldr r2, _08084820 + ldr r0, [r2] + ldr r1, _08084824 + adds r0, r1 + movs r1, 0 + strb r1, [r0] + ldr r0, [r2] + ldr r2, _08084828 + adds r0, r2 + strb r1, [r0] + bl sub_8040A84 + movs r4, 0 + ldr r0, _0808482C + ldrb r0, [r0] + cmp r0, 0 + beq _08084846 + movs r3, 0 +_080847FA: + ldr r0, _08084820 + ldr r0, [r0] + ldr r5, _08084830 + adds r0, r5 + movs r2, 0 + ldrsh r1, [r0, r2] + adds r0, r1, 0 + subs r0, 0x1C + cmp r0, 0x15 + bhi _08084810 + movs r1, 0x1B +_08084810: + ldr r2, _0808482C + adds r0, r3, r2 + ldrb r5, [r0] + cmp r1, r5 + bne _08084834 + bl sub_8084854 + b _08084846 + .align 2, 0 +_08084820: .4byte gDungeonGlobalData +_08084824: .4byte 0x00003a0d +_08084828: .4byte 0x0001356c +_0808482C: .4byte gUnknown_8107234 +_08084830: .4byte 0x00003a14 +_08084834: + adds r3, 0x8 + adds r4, 0x1 + ldr r0, _08084850 + cmp r4, r0 + bgt _08084846 + adds r0, r3, r2 + ldrb r0, [r0] + cmp r0, 0 + bne _080847FA +_08084846: + bl sub_8097FF8 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_08084850: .4byte 0x000003e6 + thumb_func_end sub_80847D4 + + thumb_func_start sub_8084854 +sub_8084854: + push {r4,r5,lr} + adds r4, r0, 0 + ldr r5, _08084874 + ldr r2, [r5] + movs r1, 0xCF + lsls r1, 3 + adds r0, r2, r1 + ldrb r0, [r0] + cmp r0, 0 + beq _0808487C + ldrb r1, [r4, 0x5] + ldr r3, _08084878 + adds r0, r2, r3 + strb r1, [r0] + b _080848C8 + .align 2, 0 +_08084874: .4byte gDungeonGlobalData +_08084878: .4byte 0x00003a0d +_0808487C: + ldrb r0, [r4, 0x4] + bl sub_8098100 + lsls r0, 24 + cmp r0, 0 + beq _08084898 + ldr r0, [r5] + ldrb r1, [r4, 0x5] + ldr r2, _08084894 + adds r0, r2 + strb r1, [r0] + b _080848C8 + .align 2, 0 +_08084894: .4byte 0x00003a0d +_08084898: + ldrb r0, [r4, 0x2] + bl sub_8098100 + lsls r0, 24 + cmp r0, 0 + beq _080848B4 + ldr r0, [r5] + ldrb r1, [r4, 0x3] + ldr r3, _080848B0 + adds r0, r3 + strb r1, [r0] + b _080848C8 + .align 2, 0 +_080848B0: .4byte 0x00003a0d +_080848B4: + ldr r0, [r5] + ldrb r1, [r4, 0x1] + ldr r2, _080848E0 + adds r0, r2 + strb r1, [r0] + ldrb r0, [r4, 0x2] + cmp r0, 0x40 + beq _080848C8 + bl sub_8097FA8 +_080848C8: + ldr r0, _080848E4 + ldr r0, [r0] + ldr r3, _080848E8 + adds r0, r3 + movs r1, 0x1 + strb r1, [r0] + movs r0, 0 + bl sub_807E5E4 + pop {r4,r5} + pop {r0} + bx r0 + .align 2, 0 +_080848E0: .4byte 0x00003a0d +_080848E4: .4byte gDungeonGlobalData +_080848E8: .4byte 0x00000675 + thumb_func_end sub_8084854 + + .align 2,0 diff --git a/include/dungeon_ai_items.h b/include/dungeon_ai_items.h index b9e7625..f4effd2 100644 --- a/include/dungeon_ai_items.h +++ b/include/dungeon_ai_items.h @@ -2,10 +2,13 @@ #define GUARD_DUNGEON_AI_ITEMS_H #include "dungeon_entity.h" +#include "map.h" // 0x73658 void DecideUseItem(struct DungeonEntity *pokemon); // 0x739DC -void FindStraightThrowableTargets(struct DungeonEntity* pokemon, s32 thrownAIFlag, struct ItemSlot* item, bool8 ignoreRollChance); +void FindStraightThrowableTargets(struct DungeonEntity *pokemon, s32 thrownAIFlag, struct ItemSlot *item, bool8 ignoreRollChance); +// 0x73AA0 +void FindRockItemTargets(struct DungeonEntity *pokemon, struct ItemSlot *item, struct Position potentialTargets[], bool8 ignoreRollChance); #endif diff --git a/include/dungeon_entity.h b/include/dungeon_entity.h index ef18c67..25291e4 100644 --- a/include/dungeon_entity.h +++ b/include/dungeon_entity.h @@ -1,8 +1,9 @@ #ifndef GUARD_DUNGEON_ENTITY_H #define GUARD_DUNGEON_ENTITY_H -#include "item.h" #include "constants/move.h" +#include "item.h" +#include "map.h" struct DungeonActionContainer { @@ -13,8 +14,7 @@ struct DungeonActionContainer /* 0x4 */ u8 actionUseIndex; u8 fill5[0x8 - 0x5]; // Position of the Pokémon the last time it threw an item. - /* 0x8 */ s16 lastItemThrowPositionX; - /* 0xA */ s16 lastItemThrowPositionY; + /* 0x8 */ struct Position lastItemThrowPosition; u8 unkC; }; @@ -68,21 +68,17 @@ struct DungeonEntityData /* 0x44 */ struct DungeonActionContainer action; u8 fill55[0x58 - 0x55]; // Position of the target that the Pokémon wants throw an item at. - /* 0x58 */ s16 *itemTargetPosition; + /* 0x58 */ struct Position itemTargetPosition; /* 0x5C */ u8 type1; /* 0x5D */ u8 type2; /* 0x5E */ u8 ability1; /* 0x5F */ u8 ability2; /* 0x60 */ struct ItemSlot heldItem; u8 fill64[0x68 - 0x64]; - /* 0x68 */ s16 previousPosition1X; - /* 0x6A */ s16 previousPosition1Y; - /* 0x6C */ s16 previousPosition2X; - /* 0x6E */ s16 previousPosition2Y; - /* 0x70 */ s16 previousPosition3X; - /* 0x72 */ s16 previousPosition3Y; - /* 0x74 */ s16 previousPosition4X; - /* 0x76 */ s16 previousPosition4Y; + /* 0x68 */ struct Position previousPosition1; + /* 0x6C */ struct Position previousPosition2; + /* 0x70 */ struct Position previousPosition3; + /* 0x74 */ struct Position previousPosition4; /* 0x78 */ u8 movementAction; /* 0x79 */ bool8 notAdjacentToTarget; /* 0x7A */ bool8 hasTarget; @@ -91,8 +87,7 @@ struct DungeonEntityData u8 fill7E[0x80 - 0x7E]; /* 0x80 */ u32 targetPokemon; u8 fill84[0x88 - 0x84]; - /* 0x88 */ s16 targetMovePositionX; - /* 0x8A */ s16 targetMovePositionY; + /* 0x88 */ struct Position targetMovePosition; // Bitwise flags corresponding to selected IQ skills. /* 0x8C */ u8 IQSkillsSelected[4]; // IQ skills selected in the IQ skills menu. /* 0x90 */ u8 IQSkillsEnabled[4]; @@ -200,22 +195,17 @@ struct DungeonEntityData u8 unk15E; u8 unk15F; u8 fill160[0x16C - 0x160]; - /* 0x16C */ s16 targetPositionX; - /* 0x16E */ s16 targetPositionY; - /* 0x170 */ s16 posPixelX; - /* 0x172 */ s16 posPixelY; + /* 0x16C */ struct Position targetPosition; + /* 0x170 */ struct Position posPixel; u32 unk174; u8 fill178[0x184 - 0x178]; // Previous value of targetPosition for movement, 1 and 2 moves ago. - /* 0x184 */ s16 previousTargetMovePosition1X; - /* 0x186 */ s16 previousTargetMovePosition1Y; - /* 0x188 */ s32 previousTargetMovePosition2X; - /* 0x18C */ s32 previousTargetMovePosition2Y; + /* 0x184 */ struct Position previousTargetMovePosition1; + /* 0x188 */ struct Position32 previousTargetMovePosition2; /* 0x190 */ u8 lastMoveDirection; // The last direction that the Pokémon moved in. u8 fill191[0x194 - 0x191]; // Number of tiles that the Pokémon moved last, multiplied by 0x100. - /* 0x194 */ s32 lastMoveIncrementX; - /* 0x198 */ s32 lastMoveIncrementY; + /* 0x194 */ struct Position32 lastMoveIncrement; /* 0x19C */ u8 walkAnimationCounter; // Set when the Pokémon starts moving, and counts down until the Pokémon's walk animation stops. u8 fill19D[0x1F4 - 0x19D]; /* 0x1F4 */ u8 numMoveTiles; // Number of tiles to move in a turn. Can be greater than 1 if the user's movement speed is boosted. @@ -232,16 +222,12 @@ struct DungeonEntityData struct DungeonEntity { /* 0x0 */ u32 entityType; - /* 0x4 */ s16 posWorldX; - /* 0x6 */ s16 posWorldY; - /* 0x8 */ s16 prevPosWorldX; - /* 0xA */ s16 prevPosWorldY; + /* 0x4 */ struct Position posWorld; + /* 0x8 */ struct Position prevPosWorld; // The center of the entity acccording to pixel-space coordinates, using the same origin as posWorld. // X = (posWorld * 24 + 16) * 256, while Y = (posWorld * 24 + 12) * 256. - /* 0xC */ s32 posPixelX; - /* 0x10 */ s32 posPixelY; - /* 0x14 */ s32 prevPosPixelX; - /* 0x18 */ s32 prevPosPixelY; + /* 0xC */ struct Position32 posPixel; + /* 0x14 */ struct Position32 prevPosPixel; u8 fill1C[0x20 - 0x1C]; /* 0x20 */ bool8 visible; // Turned off when a Pokémon faints. u8 fill21[0x25 - 0x21]; @@ -259,11 +245,9 @@ struct DungeonEntity /* 0x2C */ u16 spriteAnimationIndex; /* 0x2E */ u16 spriteAnimationCounter2; // The position of the sprite within the tile. The animation may change the position slightly. - /* 0x30 */ u16 spritePosX; - /* 0x32 */ u16 spritePosY; + /* 0x30 */ struct Position spritePos; // Offset of the sprite from its position at the start of the animation. Changes alongside spritePos. - /* 0x34 */ s16 spritePosOffsetX; - /* 0x36 */ s16 spritePosOffsetY; + /* 0x34 */ struct Position spritePosOffset; u8 fill38[0x48 - 0x38]; // The sprite index to display, among the Pokémon's possible sprites. /* 0x48 */ u16 spriteIndexForEntity; diff --git a/include/dungeon_global_data.h b/include/dungeon_global_data.h index 254a195..5cb0c8a 100644 --- a/include/dungeon_global_data.h +++ b/include/dungeon_global_data.h @@ -72,7 +72,7 @@ struct DungeonGlobalData u8 fill10364[0x10844 - 0x10364]; /* 0x10844 */ u16 numRoomExits[MAX_ROOM_COUNT]; u8 fill10874[0x10884 - 0x10874]; - /* 0x10884 */ struct RoomExit roomExits[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room. + /* 0x10884 */ struct Position roomExits[MAX_ROOM_COUNT][32]; // Arrays of room exits for each room. u8 fill11444[0x1356C - 0x11484]; u8 unk1356C; u8 fill1356D[0x1357C - 0x1356D]; diff --git a/include/dungeon_random.h b/include/dungeon_random.h new file mode 100644 index 0000000..5679720 --- /dev/null +++ b/include/dungeon_random.h @@ -0,0 +1,9 @@ +#ifndef GUARD_DUNGEON_RANDOM_H +#define GUARD_DUNGEON_RANDOM_H + +// 0x840E8 +s32 DungeonRandom(void); +// 0x84100 +s32 DungeonRandomCapped(s32 cap); + +#endif diff --git a/include/dungeon_random_1.h b/include/dungeon_random_1.h new file mode 100644 index 0000000..bfc2ecd --- /dev/null +++ b/include/dungeon_random_1.h @@ -0,0 +1,7 @@ +#ifndef GUARD_DUNGEON_RANDOM_1_H +#define GUARD_DUNGEON_RANDOM_1_H + +// 0x84144 +bool8 RollPercentChance(s32 percentChance); + +#endif diff --git a/include/map.h b/include/map.h index 38fe68a..7863b46 100644 --- a/include/map.h +++ b/include/map.h @@ -25,23 +25,27 @@ struct MapTile /* 0x14 */ struct DungeonEntity *mapObject; // Item or trap on the tile. }; +struct Position +{ + s16 x; + s16 y; +}; + +struct Position32 +{ + s32 x; + s32 y; +}; + struct MapRoom { u8 fill0[0x2 - 0x0]; // All coordinates are inclusive. - /* 0x2 */ s16 startX; - /* 0x4 */ s16 startY; - /* 0x6 */ s16 endX; - /* 0x8 */ s16 endY; + /* 0x2 */ struct Position start; + /* 0x6 */ struct Position end; u8 fillA[0x1C - 0xA]; }; -struct RoomExit -{ - s16 x; - s16 y; -}; - enum TileType { TILE_TYPE_FLOOR = 1 << 0, diff --git a/ld_script.txt b/ld_script.txt index 8d0cb11..86511b9 100755 --- a/ld_script.txt +++ b/ld_script.txt @@ -212,9 +212,13 @@ SECTIONS { src/dungeon_pokemon_attributes_1.o(.text); asm/code_80718D8.o(.text); src/dungeon_ai_items.o(.text); - asm/code_8073AA0.o(.text); + asm/code_8073B78.o(.text); src/dungeon_movement.o(.text); asm/code_8075BA4.o(.text); + src/dungeon_random.o(.text); + asm/code_808411C.o(.text); + src/dungeon_random_1.o(.text); + asm/code_8084160.o(.text); src/code_80848F0.o(.text); asm/code_80848F0.o(.text); src/dungeon_util_1.o(.text); diff --git a/src/code_80521D0_1.c b/src/code_80521D0_1.c index 433194d..ab497b8 100644 --- a/src/code_80521D0_1.c +++ b/src/code_80521D0_1.c @@ -1,11 +1,12 @@ #include "global.h" +#include "constants/direction.h" +#include "constants/friend_area.h" #include "dungeon_global_data.h" #include "dungeon_entity.h" +#include "dungeon_random.h" #include "friend_area.h" -#include "constants/friend_area.h" -#include "pokemon.h" -#include "constants/direction.h" #include "map.h" +#include "pokemon.h" extern struct DungeonEntity *xxx_call_GetLeaderEntity(void); extern struct DungeonEntity *sub_8085680(u32); @@ -130,7 +131,6 @@ void sub_808C02C(); extern void sub_80861B8(struct DungeonEntity *, u32, u32); void nullsub_99(); -extern u32 DungeonRandomCapped(s32); extern bool8 *gFriendAreas; extern void sub_8049884(); @@ -286,7 +286,7 @@ void sub_808BDEC(void) gDungeonGlobalData->unk7 = 1; SetFacingDirection(LugiaEntity, DIRECTION_SOUTH); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LUGIA); } @@ -335,7 +335,7 @@ void LugiaPreFightDialogue(void) sub_808BFA0(); SetupBossFightHP(LugiaEntity,800,0x20); sub_8083E88(0x23); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -424,7 +424,7 @@ void sub_808C10C(void) gDungeonGlobalData->unk7 = 1; SetFacingDirection(KyogreEntity, DIRECTION_SOUTH); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); uVar3 = sub_803F994(); iVar2 = sub_803F9B0(); sub_803F878(uVar3,iVar2 + -0x1000); @@ -485,7 +485,7 @@ void KyogrePreFightDialogue(void) sub_803E708(10,0x46); SetupBossFightHP(KyogreEntity,600,0xb); sub_8083E88(0x23); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -542,7 +542,7 @@ void sub_808C3A0(void) gDungeonGlobalData->unk7 = 1; sub_808563C(SetupDeoxysFacingDirection); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_DEOXYS_NORMAL); } @@ -576,7 +576,7 @@ void DeoxysPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8106390); sub_803E708(10,0x46); sub_808563C(SetupDeoxysFightHP); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -642,7 +642,7 @@ void sub_808C5C0(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(CelebiEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); uVar3 = sub_803F994(); iVar2 = sub_803F9B0(); sub_803F878(uVar3,iVar2 + 0xfffff000); @@ -1130,7 +1130,7 @@ void sub_808C9C4(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); SetFacingDirection(MedichamEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX, LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); } @@ -1198,7 +1198,7 @@ void sub_808CB5C(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_8068FE0(MedichamEntity, 0x21C, 0); - sub_8085860(LeaderEntity->posWorldX, LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MEDICHAM); } @@ -1218,7 +1218,7 @@ void sub_808CBB0(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); SetFacingDirection(SmeargleEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX, LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE); } @@ -1290,7 +1290,7 @@ void sub_808CD44(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); sub_8068FE0(SmeargleEntity, 0x21C, 0); - sub_8085860(LeaderEntity->posWorldX, LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x, LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SMEARGLE); } diff --git a/src/code_8057824_1.c b/src/code_8057824_1.c index 5409061..646feca 100644 --- a/src/code_8057824_1.c +++ b/src/code_8057824_1.c @@ -1,9 +1,10 @@ #include "global.h" +#include "constants/direction.h" #include "dungeon_global_data.h" #include "dungeon_entity.h" -#include "pokemon.h" +#include "dungeon_util.h" #include "item.h" -#include "constants/direction.h" +#include "pokemon.h" extern struct DungeonGlobalData *gDungeonGlobalData; @@ -313,7 +314,6 @@ void sub_808919C(); void GroudonScreenFlash2(void); extern void sub_8083F14(); -extern u8 EntityExists(struct DungeonEntity *); extern u8 sub_8086AE4(u32); @@ -388,7 +388,7 @@ void ZapdosReFightDialogue(void) sub_808775C(2); DisplayDungeonDialogue(&gUnknown_8101918); SetupBossFightHP(ZapdosEntity,300,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void ZapdosPostStoryPreFightDialogue(void) @@ -416,7 +416,7 @@ void ZapdosPostStoryPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8101A04); sub_803E708(10,0x46); SetupBossFightHP(ZapdosEntity,300,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -485,7 +485,7 @@ void sub_80877E8(void) sub_80855E4(sub_8086A3C); SetFacingDirection(MoltresEntity, DIRECTION_SOUTH); sub_8086A3C(MoltresEntity); - sub_8085860(LeaderEntity->posWorldX + -3,LeaderEntity->posWorldY + -2); + sub_8085860(LeaderEntity->posWorld.x + -3,LeaderEntity->posWorld.y + -2); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_MOLTRES); } @@ -511,7 +511,7 @@ void sub_8087848(void) SetFacingDirection(MoltresEntity, DIRECTION_SOUTH); sub_8086A3C(MoltresEntity); } - sub_8085860(LeaderEntity->posWorldX - 5, LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x - 5, LeaderEntity->posWorld.y); uVar4 = sub_803F994(); iVar3 = sub_803F9B0(); sub_803F878(uVar4,iVar3 + -0x1000); @@ -594,7 +594,7 @@ void MoltresPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8102108); sub_803E708(10,0x46); SetupBossFightHP(MoltresEntity,400,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } @@ -637,7 +637,7 @@ void MoltresReFightDialogue(void) DisplayDungeonDialogue(&gUnknown_81022F8); sub_803E708(10,0x46); SetupBossFightHP(MoltresEntity,400,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void MoltresPostStoryPreFightDialogue(void) @@ -675,7 +675,7 @@ void MoltresPostStoryPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8102454); sub_803E708(10,0x46); SetupBossFightHP(MoltresEntity,400,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -897,7 +897,7 @@ void sub_8087F54(void) sub_80855E4(sub_8086A3C); SetFacingDirection(ArticunoEntity, DIRECTION_SOUTH); sub_8086A3C(ArticunoEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ARTICUNO); } @@ -934,7 +934,7 @@ void sub_8087FF8(void) SetFacingDirection(ArticunoEntity, DIRECTION_SOUTH); sub_8086A3C(ArticunoEntity); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ARTICUNO); } @@ -1023,7 +1023,7 @@ void ArticunoPreFightDialogue(void) sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x10,0x46); SetupBossFightHP(ArticunoEntity,0x1c2,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void ArticunoReFightDialogue(void) @@ -1045,7 +1045,7 @@ void ArticunoReFightDialogue(void) sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x28,0x46); SetupBossFightHP(ArticunoEntity,0x1c2,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void ArticunoPostStoryPreFightDialogue(void) @@ -1081,7 +1081,7 @@ void ArticunoPostStoryPreFightDialogue(void) sub_806CDD4(ArticunoEntity,0xf,DIRECTION_SOUTH); sub_803E708(0x28,0x46); SetupBossFightHP(ArticunoEntity,0x1c2,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -1156,7 +1156,7 @@ void sub_80885C4(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); } void sub_8088608(void) @@ -1192,7 +1192,7 @@ void sub_808862C(void) sub_80861D4(AlakazamEntity,0xd,4); SetFacingDirection(GroudonEntity, DIRECTION_SOUTH); sub_8086A3C(GroudonEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y -3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); } @@ -1217,7 +1217,7 @@ void sub_80886C4(void) sub_8068FE0(AlakazamEntity,0x21c,0); SetFacingDirection(GroudonEntity, DIRECTION_SOUTH); sub_8086A3C(GroudonEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); uVar4 = sub_803F994(); iVar2 = sub_803F9B0(); sub_803F878(uVar4,iVar2 + -0x1000); @@ -1247,7 +1247,7 @@ void sub_808875C(void) SetFacingDirection(GroudonEntity, DIRECTION_SOUTH); sub_80861D4(GroudonEntity,0xf,0); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); } @@ -1344,7 +1344,7 @@ void GroudonPreFightDialogue(void) sub_8085930(DIRECTION_NORTH); sub_8086764(); SetupBossFightHP(GroudonEntity,500,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void GroudonReFightDialogue(void) @@ -1376,7 +1376,7 @@ void GroudonReFightDialogue(void) sub_8085930(DIRECTION_NORTH); sub_8086764(); SetupBossFightHP(GroudonEntity,500,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void GroudonPostStoryPreFightDialogue(void) @@ -1404,7 +1404,7 @@ void GroudonPostStoryPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_810347C); sub_803E708(10,0x46); SetupBossFightHP(GroudonEntity,500,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -1427,7 +1427,7 @@ void SceneGroudonMovement(struct DungeonEntity * param_1) } sub_803E46C(0x46); } - sub_80856C8(param_1,param_1->posWorldX,param_1->posWorldY + 1); + sub_80856C8(param_1,param_1->posWorld.x,param_1->posWorld.y + 1); sub_80861D4(param_1,0xf,0); sub_803E708(10,0x46); sub_808682C(); @@ -1509,7 +1509,7 @@ void sub_8088DC0(void) sub_806CDD4(uVar2,0xe,DIRECTION_SOUTH); sub_8086A3C(uVar3); sub_806CDD4(uVar3,0xe,DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); } @@ -1530,7 +1530,7 @@ void sub_8088E5C(void) sub_80855E4(sub_8086A3C); sub_8068FE0(uVar2,0x21c,0); sub_8068FE0(uVar3,0x21c,0); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_GROUDON); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_ALAKAZAM); } @@ -1601,8 +1601,8 @@ void MagmaCavernMidDialogue(void) DisplayDungeonDialogue(&gUnknown_8102C30); iVar3->entityData->unk15E = 0; iVar4->entityData->unk15E =0; - local_20[0] = (iVar3->posPixelX + iVar4->posPixelX) / 2; - local_20[1] = (iVar3->posPixelY + iVar4->posPixelY) / 2 + 0x800; + local_20[0] = (iVar3->posPixel.x + iVar4->posPixel.x) / 2; + local_20[1] = (iVar3->posPixel.y + iVar4->posPixel.y) / 2 + 0x800; sub_80858AC(local_20,0x20); sub_803E708(0x3c,0x46); sub_80891F0(); @@ -1671,7 +1671,7 @@ void sub_8089168(void) sub_803E708(10,0x46); SpriteLookAroundEffect(LeaderEntity); sub_803E708(10,0x46); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void sub_808919C(struct DungeonEntity *r0) @@ -1709,10 +1709,10 @@ void sub_8089224(struct DungeonEntity * param_1) { s32 iVar1; - if (param_1->posPixelY < 0x9001) { + if (param_1->posPixel.y < 0x9001) { return; } - iVar1 = param_1->posPixelX; + iVar1 = param_1->posPixel.x; if(iVar1 < 0xE400) { @@ -1774,7 +1774,7 @@ void sub_80892C8(void) sub_80855E4(sub_8086A3C); SetFacingDirection(RayquazaEntity, DIRECTION_SOUTH); sub_8086A3C(RayquazaEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_RAYQUAZA); } @@ -1796,7 +1796,7 @@ void sub_8089328(void) sub_8072008(RayquazaEntity,RayquazaEntity,gUnknown_80F57CA,0,0); sub_8086A3C(RayquazaEntity); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_RAYQUAZA); } @@ -1846,7 +1846,7 @@ void RayquazaPreFightDialogue(void) RayquazaScreenFlash(); DisplayDungeonDialogue(&gUnknown_8103820); SetupBossFightHP(RayquazaEntity,600,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void RayquazaReFightDialogue(void) @@ -1870,7 +1870,7 @@ void RayquazaReFightDialogue(void) RayquazaScreenFlash(); DisplayDungeonDialogue(&gUnknown_81038F8); SetupBossFightHP(RayquazaEntity,600,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void RayquazaPostStoryPreFightDialogue(void) @@ -1896,7 +1896,7 @@ void RayquazaPostStoryPreFightDialogue(void) RayquazaScreenFlash(); DisplayDungeonDialogue(&gUnknown_8103B30); SetupBossFightHP(RayquazaEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -1959,7 +1959,7 @@ void sub_808970C(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); sub_808563C(sub_8089908); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -3); } void sub_808974C(void) @@ -1971,7 +1971,7 @@ void sub_808974C(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); sub_808563C(sub_80898F8); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -3); } void sub_8089788(struct DungeonEntity *param_1, u8 param_2, s32 param_3) @@ -2030,7 +2030,7 @@ void sub_80897F0(void) // Get 'em! It's frenzy time! DisplayDungeonDialogue(&gUnknown_8103D50); sub_803E708(10,0x46); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } @@ -2050,7 +2050,7 @@ void sub_8089878(void) DisplayDungeonDialogue(&gUnknown_8103DD8); DisplayDungeonDialogue(&gUnknown_8103E28); sub_803E708(10,0x46); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void sub_80898E4(void) @@ -2083,7 +2083,7 @@ void sub_8089914(void) sub_80855E4(sub_8086A3C); SetFacingDirection(MewtwoEntity, DIRECTION_SOUTH); sub_8086A3C(MewtwoEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MEWTWO); } @@ -2107,7 +2107,7 @@ void sub_8089978(void) SetFacingDirection(MewtwoEntity, DIRECTION_SOUTH); sub_8086A3C(MewtwoEntity); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_MEWTWO); } @@ -2143,7 +2143,7 @@ void MewtwoPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8104008); sub_803E708(10,0x46); SetupBossFightHP(MewtwoEntity,900,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void MewtwoPreFightDialogue1(void) @@ -2169,7 +2169,7 @@ void MewtwoPreFightDialogue1(void) MewtwoScreenFlash(); DisplayDungeonDialogue(&gUnknown_8104114); SetupBossFightHP(MewtwoEntity,900,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -2232,7 +2232,7 @@ void sub_8089C44(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(EnteiEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ENTEI); } @@ -2253,7 +2253,7 @@ void sub_8089C90(void) else { SetFacingDirection(EnteiEntity, DIRECTION_SOUTH); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_ENTEI); } @@ -2282,7 +2282,7 @@ void EnteiPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_81041F8); sub_803E708(10,70); SetupBossFightHP(EnteiEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void EnteiPreFightDialogue1(void) @@ -2300,7 +2300,7 @@ void EnteiPreFightDialogue1(void) DisplayDungeonDialogue(&gUnknown_81042B8); sub_803E708(10,70); SetupBossFightHP(EnteiEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void EnteiPreFightDialogue2(void) @@ -2322,7 +2322,7 @@ void EnteiPreFightDialogue2(void) DisplayDungeonDialogue(&gUnknown_81043C0); sub_803E708(10,70); SetupBossFightHP(EnteiEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -2363,7 +2363,7 @@ void sub_8089EFC(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(RaikouEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU); } @@ -2379,7 +2379,7 @@ void sub_8089F44(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(RaikouEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU); } @@ -2400,7 +2400,7 @@ void sub_8089F8C(void) else { SetFacingDirection(RaikouEntity, DIRECTION_SOUTH); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_RAIKOU); } @@ -2435,7 +2435,7 @@ void RaikouPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_81045B0); sub_803E708(10,70); SetupBossFightHP(RaikouEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void RaikouPreFightDialogue1(void) @@ -2455,7 +2455,7 @@ void RaikouPreFightDialogue1(void) DisplayDungeonDialogue(&gUnknown_81046A0); sub_803E708(10,70); SetupBossFightHP(RaikouEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void RaikouPreFightDialogue2(void) @@ -2478,7 +2478,7 @@ void RaikouPreFightDialogue2(void) DisplayDungeonDialogue(&gUnknown_810476C); sub_803E708(10,70); SetupBossFightHP(RaikouEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -2521,7 +2521,7 @@ void sub_808A264(void) sub_80855E4(sub_8086A3C); SetFacingDirection(SuicuneEntity, DIRECTION_SOUTH); sub_8086A3C(SuicuneEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE); } @@ -2536,7 +2536,7 @@ void sub_808A2C0(void) sub_80854D4(); sub_8085930(DIRECTION_NORTH); SetFacingDirection(SuicuneEntity, DIRECTION_SOUTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE); } @@ -2556,7 +2556,7 @@ void sub_808A308(void) else { SetFacingDirection(SuicuneEntity, DIRECTION_SOUTH); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_SUICUNE); } @@ -2593,7 +2593,7 @@ void SuicunePreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8104914); sub_803E708(10,70); SetupBossFightHP(SuicuneEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void SuicunePreFightDialogue1(void) @@ -2610,7 +2610,7 @@ void SuicunePreFightDialogue1(void) DisplayDungeonDialogue(&gUnknown_8104998); sub_803E708(10,70); SetupBossFightHP(SuicuneEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void SuicunePreFightDialogue2(void) @@ -2631,7 +2631,7 @@ void SuicunePreFightDialogue2(void) DisplayDungeonDialogue(&gUnknown_8104A9C); sub_803E708(10,70); SetupBossFightHP(SuicuneEntity,0x28a,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -2697,7 +2697,7 @@ void sub_808A608(void) sub_8085930(DIRECTION_NORTH); SetFacingDirection(HoOhEntity, DIRECTION_SOUTH); sub_8086A3C(HoOhEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -6); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -6); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_HO_OH); } @@ -2720,7 +2720,7 @@ void sub_808A668(void) SetFacingDirection(HoOhEntity, DIRECTION_SOUTH); sub_8086A3C(HoOhEntity); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 6); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 6); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_HO_OH); } @@ -2746,8 +2746,8 @@ void HoOhPreFightDialogue(void) LeaderEntity = xxx_call_GetLeaderEntity(); HoOhEntity = sub_8085680(0x15); - local_14[0] = LeaderEntity->posPixelX; - local_14[1] = LeaderEntity->posPixelY + -0x1000; + local_14[0] = LeaderEntity->posPixel.x; + local_14[1] = LeaderEntity->posPixel.y + -0x1000; sub_80858AC(local_14,0x88); sub_803E708(0x40,70); DisplayDungeonDialogue(&gUnknown_8104AD4); @@ -2774,7 +2774,7 @@ void HoOhPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8104CE0); sub_803E708(10,70); SetupBossFightHP(HoOhEntity,800,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void HoOhPreFightDialogue1(void) @@ -2786,8 +2786,8 @@ void HoOhPreFightDialogue1(void) LeaderEntity = xxx_call_GetLeaderEntity(); HoOhEntity = sub_8085680(0x15); - local_14[0] = LeaderEntity->posPixelX; - local_14[1] = LeaderEntity->posPixelY + -0x1000; + local_14[0] = LeaderEntity->posPixel.x; + local_14[1] = LeaderEntity->posPixel.y + -0x1000; sub_80858AC(local_14,0x88); sub_803E708(0x40,70); if (HasRecruitedMon(SPECIES_HO_OH)) { @@ -2810,7 +2810,7 @@ void HoOhPreFightDialogue1(void) DisplayDungeonDialogue(&gUnknown_8104E0C); sub_803E708(10,70); SetupBossFightHP(HoOhEntity,800,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } } @@ -2874,7 +2874,7 @@ void sub_808A9E4(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); SetFacingDirection(LatiosEntity, DIRECTION_NORTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 4); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 4); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS); } @@ -2890,7 +2890,7 @@ void sub_808AA3C(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); SetFacingDirection(LatiosEntity, DIRECTION_NORTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS); } @@ -2906,7 +2906,7 @@ void sub_808AA94(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); sub_8068FE0(LatiosEntity,0x21c,0); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_LATIOS); } @@ -2927,8 +2927,8 @@ void LatiosPreFightDialogue(void) LeaderEntity = xxx_call_GetLeaderEntity(); LatiosEntity = sub_8085680(0x16); - local_18[0] = LatiosEntity->posPixelX; - local_18[1] = LatiosEntity->posPixelY + (0x80 << 6); + local_18[0] = LatiosEntity->posPixel.x; + local_18[1] = LatiosEntity->posPixel.y + (0x80 << 6); local_18[2] = 0x7000fc; sub_8085EC8(0x1bd,0,0,&local_18[2],1); @@ -2946,7 +2946,7 @@ void LatiosPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8104F30); sub_803E708(10,70); SetupBossFightHP(LatiosEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void LatiosReFightDialogue(void) @@ -2965,7 +2965,7 @@ void LatiosReFightDialogue(void) DisplayDungeonDialogue(&gUnknown_8104F30); sub_803E708(10,70); SetupBossFightHP(LatiosEntity,600,0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void sub_808AC3C(void) @@ -3401,7 +3401,7 @@ void sub_808B2F4(void) sub_80855E4(sub_8086A3C); SetFacingDirection(JirachiEntity, DIRECTION_SOUTH); sub_8086A3C(JirachiEntity); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI); } @@ -3426,7 +3426,7 @@ void sub_808B35C(void) sub_8049ED4(); } - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_JIRACHI); } @@ -3543,7 +3543,7 @@ void JirachiPreFightDialogue(void) DisplayDungeonDialogue(&gUnknown_810550C); sub_803E708(10,70); SetupBossFightHP(JirachiEntity,0x15e,0x20); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void sub_808B50C(void) diff --git a/src/code_80848F0.c b/src/code_80848F0.c index 14b8b3e..ac98809 100644 --- a/src/code_80848F0.c +++ b/src/code_80848F0.c @@ -589,13 +589,13 @@ void sub_8084E00(struct DungeonEntity *param_1,char param_2,char param_3) sub_808AAF0(param_2,gDungeonGlobalData->unk3A0D); break; case 0x2e: - sub_808AE54(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + sub_808AE54(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorld.x); break; case 0x2f: - sub_808AEC8(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + sub_808AEC8(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorld.x); break; case 0x30: - sub_808AF3C(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorldX); + sub_808AF3C(param_2,gDungeonGlobalData->unk3A0D,¶m_1->posWorld.x); break; case 0x31: case 0x32: diff --git a/src/code_80869E4.c b/src/code_80869E4.c index 30bae49..148a88e 100644 --- a/src/code_80869E4.c +++ b/src/code_80869E4.c @@ -60,8 +60,8 @@ void sub_80862BC(struct DungeonEntity *r0) void sub_80862DC(struct DungeonEntity *r0) { u32 array[2]; - array[0] = r0->posPixelX; - array[1] = r0->posPixelY + (0xE0 << 6); + array[0] = r0->posPixel.x; + array[1] = r0->posPixel.y + (0xE0 << 6); sub_804535C(r0, array); sub_806CDD4(r0, 0, DIRECTION_NORTH); @@ -71,8 +71,8 @@ void sub_80862DC(struct DungeonEntity *r0) void sub_8086310(struct DungeonEntity *r0) { u32 array[2]; - array[0] = r0->posPixelX; - array[1] = r0->posPixelY + (0x90 << 8); + array[0] = r0->posPixel.x; + array[1] = r0->posPixel.y + (0x90 << 8); sub_804535C(r0, array); sub_806CE68(r0, DIRECTION_SOUTH); @@ -83,8 +83,8 @@ void sub_8086310(struct DungeonEntity *r0) void sub_8086348(struct DungeonEntity *r0) { u32 array[2]; - array[0] = r0->posPixelX + (0xF0 << 7); - array[1] = r0->posPixelY + 0xffffe000; + array[0] = r0->posPixel.x + (0xF0 << 7); + array[1] = r0->posPixel.y + 0xffffe000; sub_804535C(r0, array); sub_806CDD4(r0, 0, DIRECTION_WEST); @@ -94,8 +94,8 @@ void sub_8086348(struct DungeonEntity *r0) void sub_8086384(struct DungeonEntity *r0) { u32 array[2]; - array[0] = r0->posPixelX + (0xF0 << 7); - array[1] = r0->posPixelY; + array[0] = r0->posPixel.x + (0xF0 << 7); + array[1] = r0->posPixel.y; sub_804535C(r0, array); sub_806CDD4(r0, 0, DIRECTION_WEST); diff --git a/src/code_8086A3C.c b/src/code_8086A3C.c index 1e5c5cd..43889de 100644 --- a/src/code_8086A3C.c +++ b/src/code_8086A3C.c @@ -129,7 +129,7 @@ void sub_8086B14(void) sub_80855E4(sub_8086A3C); sub_8086A3C(SkarmoryEntity); DiglettEntity->entityData->unk15C = 1; - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY + -2); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y + -2); CopySpeciesNametoBuffer(gUnknown_202E038,SPECIES_DIGLETT); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_SKARMORY); } @@ -148,7 +148,7 @@ void sub_8086B94(void) sub_8068FE0(DiglettEntity,0x21c,0); sub_80854D4(); sub_8085930(DIRECTION_NORTH); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y); } void sub_8086BDC(char param_1, s32 param_2) @@ -168,17 +168,17 @@ void SkarmoryPreFightDialogue(void) struct subStruct_Skarmory local_1c; struct subStruct_Skarmory local_20; - + LeaderEntity = xxx_call_GetLeaderEntity(); // Player PartnerEntity = GetPartnerEntity(); // Partner DiglettEntity = sub_8085680(4); // Diglett SkarmoryEntity = sub_8085680(3); // Skarmory - local_1c.x = DiglettEntity->posPixelX; - local_1c.y = DiglettEntity->posPixelY + 0x3000; + local_1c.x = DiglettEntity->posPixel.x; + local_1c.y = DiglettEntity->posPixel.y + 0x3000; - local_20.x = SkarmoryEntity->posPixelX; - local_20.y = SkarmoryEntity->posPixelY + 0x2000; + local_20.x = SkarmoryEntity->posPixel.x; + local_20.y = SkarmoryEntity->posPixel.y + 0x2000; sub_8086448(); sub_803E708(10,0x46); @@ -216,7 +216,7 @@ void SkarmoryPreFightDialogue(void) sub_80869E4(LeaderEntity,4,1,4); sub_803E708(10,0x46); sub_8083E88(0xb); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); } void SkarmoryReFightDialogue(void) @@ -224,11 +224,11 @@ void SkarmoryReFightDialogue(void) struct DungeonEntity * LeaderEntity; struct DungeonEntity * SkarmoryEntity; struct subStruct_Skarmory local_14; - + LeaderEntity = xxx_call_GetLeaderEntity(); SkarmoryEntity = sub_8085680(3); - local_14.x = SkarmoryEntity->posPixelX; - local_14.y = SkarmoryEntity->posPixelY + 0x2000; + local_14.x = SkarmoryEntity->posPixel.x; + local_14.y = SkarmoryEntity->posPixel.y + 0x2000; sub_8086448(); sub_803E708(10,0x46); sub_8086E74(SkarmoryEntity); @@ -240,7 +240,7 @@ void SkarmoryReFightDialogue(void) sub_806CDD4(SkarmoryEntity,0xd,0); DisplayDungeonDialogue(&gUnknown_8100CDC); sub_803E708(10,0x46); - sub_80858AC(&LeaderEntity->posPixelX,0x10); + sub_80858AC(&LeaderEntity->posPixel.x,0x10); sub_8083E88(0xb); } @@ -272,7 +272,7 @@ void sub_8086E9C(void) sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); sub_808563C(sub_8086A3C); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_METAPOD); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_GENGAR); CopySpeciesNametoBuffer(gUnknown_202E038 + 0xA0, SPECIES_CATERPIE); @@ -281,12 +281,12 @@ void sub_8086E9C(void) void sub_8086F00(void) { struct DungeonEntity * LeaderEntity; - + LeaderEntity = xxx_call_GetLeaderEntity(); sub_80854D4(); sub_8085930(DIRECTION_NORTH); sub_80855E4(sub_8086A3C); - sub_8085860(LeaderEntity->posWorldX,LeaderEntity->posWorldY - 3); + sub_8085860(LeaderEntity->posWorld.x,LeaderEntity->posWorld.y - 3); CopySpeciesNametoBuffer(gUnknown_202E038, SPECIES_METAPOD); CopySpeciesNametoBuffer(gUnknown_202E038 + 0x50, SPECIES_GENGAR); CopySpeciesNametoBuffer(gUnknown_202E038 + 0xA0, SPECIES_CATERPIE); diff --git a/src/dungeon_ai_items.c b/src/dungeon_ai_items.c index 48b675a..ce70182 100644 --- a/src/dungeon_ai_items.c +++ b/src/dungeon_ai_items.c @@ -10,6 +10,8 @@ #include "dungeon_entity.h" #include "dungeon_global_data.h" #include "dungeon_pokemon_attributes_1.h" +#include "dungeon_random.h" +#include "dungeon_random_1.h" #include "dungeon_util.h" #include "item.h" #include "team_inventory.h" @@ -31,10 +33,7 @@ enum TargetCapability TARGET_CAPABILITY_CAN_ATTACK_NOT_TARGET }; -extern bool8 RollPercentChance(u32); -extern void FindRockItemTargets(struct DungeonEntity*, struct ItemSlot*, s16*[], bool8); -extern s32 DungeonRandomCapped(s32); -extern s32 CalculateFacingDir(s16*, s16*); +extern s32 CalculateFacingDir(struct Position*, struct Position*); extern struct MapTile* GetMapTileAtPosition(s16, s16); extern u32 EvaluateItem(struct DungeonEntity*, struct ItemSlot*, u8); extern bool8 ToolboxEnabled(struct DungeonEntityData*); @@ -105,8 +104,8 @@ void DecideUseItem(struct DungeonEntity *pokemon) { SetAction(&pokemonData->action, DUNGEON_ACTION_THROW_ITEM_AI); pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; pokemonData->action.facingDir = gPotentialTargetDirections[targetIndex] & DIRECTION_MASK; break; } @@ -118,7 +117,7 @@ void DecideUseItem(struct DungeonEntity *pokemon) } else if (itemType == ITEM_TYPE_ROCK) { - s16 *potentialTargetPositions[NUM_POTENTIAL_ROCK_TARGETS]; + struct Position potentialTargetPositions[NUM_POTENTIAL_ROCK_TARGETS]; FindRockItemTargets(pokemon, item, potentialTargetPositions, TRUE); if (gNumPotentialTargets == 0) { @@ -129,9 +128,9 @@ void DecideUseItem(struct DungeonEntity *pokemon) u32 chosenTargetIndex = DungeonRandomCapped(gNumPotentialTargets); SetAction(&pokemonData->action, DUNGEON_ACTION_THROW_ITEM_AI); pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; - pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorldX, (s16 *) (&potentialTargetPositions[chosenTargetIndex])) & DIRECTION_MASK; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; + pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorld, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK; pokemonData->itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; } } @@ -142,8 +141,8 @@ void DecideUseItem(struct DungeonEntity *pokemon) { SetAction(&pokemonData->action, DUNGEON_ACTION_CONSUME_ITEM_AI); pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; } else { @@ -164,7 +163,7 @@ void DecideUseItem(struct DungeonEntity *pokemon) else if (toolboxIndex == 0) { // This seems unused. toolboxIndex can never be 0. - struct MapTile *mapTile = GetMapTileAtPosition(pokemon->posWorldX, pokemon->posWorldY); + struct MapTile *mapTile = GetMapTileAtPosition(pokemon->posWorld.x, pokemon->posWorld.y); struct DungeonEntity *mapObject = mapTile->mapObject; if (mapObject != null) { @@ -214,8 +213,8 @@ void DecideUseItem(struct DungeonEntity *pokemon) SetAction(&pokemonData->action, DUNGEON_ACTION_CONSUME_ITEM_AI); } pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; return; } } @@ -241,16 +240,16 @@ void DecideUseItem(struct DungeonEntity *pokemon) u8 itemType = GetItemType(item->itemIndex); if (itemType == ITEM_TYPE_ROCK) { - s16 *potentialTargetPositions[NUM_POTENTIAL_ROCK_TARGETS]; + struct Position potentialTargetPositions[NUM_POTENTIAL_ROCK_TARGETS]; FindRockItemTargets(pokemon, item, potentialTargetPositions, FALSE); if (gNumPotentialTargets != 0) { u32 chosenTargetIndex = DungeonRandomCapped(gNumPotentialTargets); SetAction(&pokemonData->action, DUNGEON_ACTION_THROW_ITEM_AI); pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; - pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorldX, (s16 *) (&potentialTargetPositions[chosenTargetIndex])) & DIRECTION_MASK; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; + pokemonData->action.facingDir = CalculateFacingDir(&pokemon->posWorld, &potentialTargetPositions[chosenTargetIndex]) & DIRECTION_MASK; pokemonData->itemTargetPosition = potentialTargetPositions[chosenTargetIndex]; return; } @@ -265,8 +264,8 @@ void DecideUseItem(struct DungeonEntity *pokemon) { SetAction(&pokemonData->action, DUNGEON_ACTION_THROW_ITEM_AI); pokemonData->action.actionUseIndex = selectedToolboxIndex; - pokemonData->action.lastItemThrowPositionX = pokemon->posWorldX; - pokemonData->action.lastItemThrowPositionY = pokemon->posWorldY; + pokemonData->action.lastItemThrowPosition.x = pokemon->posWorld.x; + pokemonData->action.lastItemThrowPosition.y = pokemon->posWorld.y; pokemonData->action.facingDir = gPotentialTargetDirections[targetIndex] & DIRECTION_MASK; return; } @@ -279,7 +278,7 @@ void DecideUseItem(struct DungeonEntity *pokemon) } } -void FindStraightThrowableTargets(struct DungeonEntity* pokemon, s32 thrownAIFlag, struct ItemSlot* item, bool8 ignoreRollChance) +void FindStraightThrowableTargets(struct DungeonEntity *pokemon, s32 thrownAIFlag, struct ItemSlot *item, bool8 ignoreRollChance) { s32 i; gNumPotentialTargets = 0; @@ -319,3 +318,49 @@ void FindStraightThrowableTargets(struct DungeonEntity* pokemon, s32 thrownAIFla } } } + +void FindRockItemTargets(struct DungeonEntity *pokemon, struct ItemSlot *item, struct Position potentialTargets[], bool8 ignoreRollChance) +{ + s32 i; + gNumPotentialTargets = 0; + for (i = 0; i < DUNGEON_MAX_POKEMON; i++) + { + struct DungeonEntity* targetPokemon = gDungeonGlobalData->allPokemon[i]; + if (EntityExists(targetPokemon) && pokemon != targetPokemon && + CanSee(pokemon, targetPokemon) && CanTarget(pokemon, targetPokemon, FALSE, TRUE) == TARGET_CAPABILITY_CAN_TARGET) + { + s32 posDiffX; + s32 maxPosDiff; + posDiffX = targetPokemon->posWorld.x - pokemon->posWorld.x; + if (posDiffX < 0) + { + posDiffX = -posDiffX; + } + maxPosDiff = targetPokemon->posWorld.y - pokemon->posWorld.y; + if (maxPosDiff < 0) + { + maxPosDiff = -maxPosDiff; + } + if (maxPosDiff < posDiffX) + { + maxPosDiff = posDiffX; + } + if (maxPosDiff <= 10) + { + struct Position *newPotentialTarget; + if (!ignoreRollChance) + { + u32 itemWeight = EvaluateItem(targetPokemon, item, ITEM_TARGET_OTHER); + if (!RollPercentChance(itemWeight)) + { + continue; + } + } + newPotentialTarget = &potentialTargets[gNumPotentialTargets]; + newPotentialTarget->x = targetPokemon->posWorld.x; + newPotentialTarget->y = targetPokemon->posWorld.y; + gNumPotentialTargets++; + } + } + } +} diff --git a/src/dungeon_movement.c b/src/dungeon_movement.c index 6bb225e..9ea894e 100644 --- a/src/dungeon_movement.c +++ b/src/dungeon_movement.c @@ -9,6 +9,7 @@ #include "dungeon_capabilities_1.h" #include "dungeon_global_data.h" #include "dungeon_pokemon_attributes_1.h" +#include "dungeon_random.h" #include "dungeon_util.h" #include "dungeon_util_1.h" #include "map.h" @@ -26,7 +27,6 @@ extern bool8 HasStatusAffectingActions(struct DungeonEntity*); extern bool8 CanSee(struct DungeonEntity*, struct DungeonEntity*); extern void ResetAction(u16*); extern void SetWalkAction(u16*, s16); -extern s32 DungeonRandomCapped(s32); extern void DecideAttack(struct DungeonEntity*); extern void MoveIfPossible(struct DungeonEntity*, bool8); extern u8 sub_8044B28(void); @@ -143,7 +143,7 @@ void sub_8075900(struct DungeonEntity *pokemon, u8 r1) gDungeonGlobalData->unk672 = 1; sub_807AB38(pokemon, r1); sub_8041888(0); - if(sub_803F428(&pokemon->posWorldX) != 0) + if(sub_803F428(&pokemon->posWorld.x) != 0) sub_803E708(0x78, 0x39); } } @@ -211,8 +211,8 @@ void DecideAction(struct DungeonEntity *pokemon) { SetWalkAction(&pokemonData->action.action, pokemonData->entityID); pokemonData->action.facingDir = DungeonRandomCapped(8); - pokemonData->targetPositionX = pokemon->posWorldX; - pokemonData->targetPositionY = pokemon->posWorldY - 1; + pokemonData->targetPosition.x = pokemon->posWorld.x; + pokemonData->targetPosition.y = pokemon->posWorld.y - 1; } else { diff --git a/src/dungeon_random.c b/src/dungeon_random.c new file mode 100644 index 0000000..86b1c79 --- /dev/null +++ b/src/dungeon_random.c @@ -0,0 +1,15 @@ +#include "global.h" +#include "dungeon_random.h" + +extern u32 gDungeonRngState; + +s32 DungeonRandom(void) +{ + gDungeonRngState = 1566083941 * gDungeonRngState + 1; + return gDungeonRngState >> 16; +} + +s32 DungeonRandomCapped(s32 cap) +{ + return (((DungeonRandom() & 0xFFFF) * cap) >> 16) & 0xFFFF; +} diff --git a/src/dungeon_random_1.c b/src/dungeon_random_1.c new file mode 100644 index 0000000..a6941f3 --- /dev/null +++ b/src/dungeon_random_1.c @@ -0,0 +1,13 @@ +#include "global.h" +#include "dungeon_random_1.h" + +#include "dungeon_random.h" + +bool8 RollPercentChance(s32 percentChance) +{ + if (DungeonRandomCapped(100) < percentChance) + { + return TRUE; + } + return FALSE; +} diff --git a/src/dungeon_util.c b/src/dungeon_util.c index 5943d4b..50b3e08 100644 --- a/src/dungeon_util.c +++ b/src/dungeon_util.c @@ -45,10 +45,10 @@ struct DungeonEntityData *sub_8045110(struct DungeonEntity *entity) struct MapTile *sub_8045114(struct DungeonEntity *entity) { - return GetMapTileAtPosition(entity->posWorldX, entity->posWorldY); + return GetMapTileAtPosition(entity->posWorld.x, entity->posWorld.y); } struct MapTile *sub_8045128(struct DungeonEntity *entity) { - return GetMapEntity(entity->posWorldX, entity->posWorldY); + return GetMapEntity(entity->posWorld.x, entity->posWorld.y); } diff --git a/sym_ewram2.txt b/sym_ewram2.txt index ba1c931..add077c 100644 --- a/sym_ewram2.txt +++ b/sym_ewram2.txt @@ -578,7 +578,7 @@ gUnknown_203B444 = .; /* 203B444 */ gLeaderPokemon = .; /* 203B450 */ . += 0x4; -gUnknown_203B454 = .; /* 203B454 */ +gDungeonRngState = .; /* 203B454 */ . += 0x4; gUnknown_203B458 = .; /* 203B458 */ |