diff --git a/asm/ground_object.s b/asm/ground_object.s index 127ae7d22..502ce5237 100644 --- a/asm/ground_object.s +++ b/asm/ground_object.s @@ -5,978 +5,6 @@ .text - thumb_func_start GroundObject_Add -GroundObject_Add: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - mov r8, r1 - lsls r0, 16 - asrs r7, r0, 16 - lsls r2, 16 - asrs r2, 16 - mov r10, r2 - lsls r3, 24 - asrs r3, 24 - mov r9, r3 - ldrb r4, [r1] - cmp r4, 0x1A - bne _080ABDDA - movs r0, 0 - movs r1, 0x28 - bl GetScriptVarValue - cmp r0, 0x1 - bgt _080ABDBC - movs r4, 0x1B - b _080ABDDA -_080ABDBC: - movs r0, 0 - movs r1, 0x29 - bl GetScriptVarValue - cmp r0, 0 - bne _080ABDD4 - movs r0, 0 - movs r1, 0x27 - bl GetScriptVarValue - adds r0, 0x1C - b _080ABDD6 -_080ABDD4: - adds r0, 0x2B -_080ABDD6: - lsls r0, 16 - asrs r4, r0, 16 -_080ABDDA: - lsls r1, r4, 2 - ldr r0, _080ABE10 - adds r6, r1, r0 - cmp r7, 0 - bge _080ABE40 - cmp r4, 0xE - bgt _080ABDF4 - cmp r4, 0xD - blt _080ABDF4 - adds r0, r4, 0 - bl sub_80ABD48 - adds r7, r0, 0 -_080ABDF4: - cmp r7, 0 - bge _080ABE40 - movs r3, 0 - ldr r0, _080ABE14 - ldr r5, [r0] - movs r0, 0x6 - ldrsh r1, [r5, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080ABE18 - movs r7, 0 - b _080ABE40 - .align 2, 0 -_080ABE10: .4byte gGroundObjectTypes -_080ABE14: .4byte gGroundObjects -_080ABE18: - adds r0, r3, 0x1 - lsls r0, 16 - asrs r3, r0, 16 - movs r1, 0xE2 - lsls r1, 1 - adds r5, r1 - cmp r3, 0xF - bgt _080ABE36 - movs r2, 0x6 - ldrsh r1, [r5, r2] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080ABE18 - adds r7, r3, 0 -_080ABE36: - cmp r7, 0 - bge _080ABE40 - movs r0, 0x1 - negs r0, r0 - b _080AC142 -_080ABE40: - ldr r1, _080ABEA8 - lsls r0, r7, 3 - subs r0, r7 - lsls r0, 4 - adds r0, r7 - lsls r0, 2 - ldr r1, [r1] - adds r5, r1, r0 - ldr r1, _080ABEAC - mov r3, r8 - ldrb r0, [r3] - str r0, [sp] - movs r2, 0 - ldrsh r0, [r6, r2] - str r0, [sp, 0x4] - mov r3, r10 - str r3, [sp, 0x8] - mov r0, r9 - str r0, [sp, 0xC] - movs r0, 0 - adds r2, r7, 0 - adds r3, r4, 0 - bl Log - movs r2, 0 - movs r3, 0x6 - ldrsh r1, [r5, r3] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080ABE80 - movs r2, 0x1 -_080ABE80: - str r2, [sp, 0x10] - strh r7, [r5, 0x4] - strh r4, [r5, 0x6] - mov r0, r10 - strh r0, [r5, 0x8] - mov r1, r9 - strb r1, [r5, 0xA] - ldrh r0, [r6] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xE - bls _080ABE9C - b _080ABF8C -_080ABE9C: - lsls r0, 2 - ldr r1, _080ABEB0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080ABEA8: .4byte gGroundObjects -_080ABEAC: .4byte gUnknown_8118448 -_080ABEB0: .4byte _080ABEB4 - .align 2, 0 -_080ABEB4: - .4byte _080ABEF0 - .4byte _080ABF7C - .4byte _080ABF46 - .4byte _080ABF54 - .4byte _080ABF54 - .4byte _080ABF5E - .4byte _080ABF68 - .4byte _080ABF72 - .4byte _080ABF3C - .4byte _080ABEFA - .4byte _080ABEF0 - .4byte _080ABF06 - .4byte _080ABF2C - .4byte _080ABF1E - .4byte _080ABF12 -_080ABEF0: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - movs r0, 0 - b _080ABF94 -_080ABEFA: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - movs r0, 0x80 - lsls r0, 10 - b _080ABF94 -_080ABF06: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x80 - lsls r0, 11 - b _080ABF94 -_080ABF12: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - movs r0, 0x83 - lsls r0, 18 - b _080ABF94 -_080ABF1E: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - ldr r0, _080ABF28 - b _080ABF94 - .align 2, 0 -_080ABF28: .4byte 0x220c0000 -_080ABF2C: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 - ldr r0, _080ABF38 - b _080ABF94 - .align 2, 0 -_080ABF38: .4byte 0x20010000 -_080ABF3C: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - movs r0, 0x5 - b _080ABF94 -_080ABF46: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - ldr r0, _080ABF50 - b _080ABF94 - .align 2, 0 -_080ABF50: .4byte 0x22000184 -_080ABF54: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 - adds r0, 0x68 - b _080ABF94 -_080ABF5E: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - movs r0, 0x44 - b _080ABF94 -_080ABF68: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - movs r0, 0x84 - b _080ABF94 -_080ABF72: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 - adds r0, 0x64 - b _080ABF94 -_080ABF7C: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - ldr r0, _080ABF88 - b _080ABF94 - .align 2, 0 -_080ABF88: .4byte 0x020000c4 -_080ABF8C: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - ldr r0, _080ABFA8 -_080ABF94: - str r0, [r1] - ldrb r0, [r6, 0x2] - cmp r0, 0 - bne _080ABFAC - mov r1, r8 - ldrb r0, [r1, 0x2] - lsls r0, 11 - str r0, [r5, 0xC] - ldrb r0, [r1, 0x3] - b _080ABFB4 - .align 2, 0 -_080ABFA8: .4byte 0x02000185 -_080ABFAC: - ldrb r0, [r6, 0x2] - lsls r0, 11 - str r0, [r5, 0xC] - ldrb r0, [r6, 0x3] -_080ABFB4: - lsls r0, 11 - str r0, [r5, 0x10] - ldr r0, [r5, 0xC] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - str r0, [r5, 0x14] - ldr r0, [r5, 0x10] - lsrs r1, r0, 31 - adds r0, r1 - asrs r0, 1 - str r0, [r5, 0x18] - mov r2, r8 - ldrb r0, [r2, 0x1] - strb r0, [r5, 0x1C] - adds r2, 0x4 - adds r4, r5, 0 - adds r4, 0x20 - ldrb r1, [r2, 0x2] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080ABFFC - mov r3, r8 - ldrb r0, [r3, 0x4] - lsls r3, r0, 11 - str r3, [r5, 0x20] - ldrb r1, [r2, 0x2] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080ABFFC - movs r1, 0x80 - lsls r1, 3 - adds r0, r3, r1 - str r0, [r5, 0x20] -_080ABFFC: - ldrb r1, [r2, 0x3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080AC01E - ldrb r0, [r2, 0x1] - lsls r3, r0, 11 - str r3, [r4, 0x4] - ldrb r1, [r2, 0x3] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _080AC01E - movs r2, 0x80 - lsls r2, 3 - adds r0, r3, r2 - str r0, [r4, 0x4] -_080AC01E: - ldr r3, [sp, 0x10] - cmp r3, 0 - beq _080AC076 - ldrb r1, [r5, 0x1C] - movs r2, 0x90 - lsls r2, 1 - adds r0, r5, r2 - movs r3, 0 - strb r1, [r0] - movs r0, 0x92 - lsls r0, 1 - adds r2, r5, r0 - ldr r0, [r5, 0x20] - ldr r1, [r5, 0x14] - subs r0, r1 - str r0, [r2] - movs r1, 0x96 - lsls r1, 1 - adds r2, r5, r1 - ldr r0, [r5, 0x20] - ldr r1, [r5, 0x14] - adds r0, r1 - str r0, [r2] - movs r0, 0x94 - lsls r0, 1 - adds r2, r5, r0 - ldr r0, [r5, 0x24] - ldr r1, [r5, 0x18] - subs r0, r1 - str r0, [r2] - movs r1, 0x98 - lsls r1, 1 - adds r2, r5, r1 - ldr r0, [r5, 0x24] - ldr r1, [r5, 0x18] - adds r0, r1 - str r0, [r2] - movs r2, 0x9A - lsls r2, 1 - adds r1, r5, r2 - adds r2, 0x4 - adds r0, r5, r2 - str r3, [r0] - str r3, [r1] -_080AC076: - adds r0, r5, 0 - adds r0, 0x28 - adds r1, r5, 0 - adds r1, 0x30 - bl GetCurrentDungeonBounds - ldr r3, [sp, 0x10] - cmp r3, 0 - beq _080AC0C0 - movs r0, 0x9F - lsls r0, 1 - adds r1, r5, r0 - movs r2, 0 - movs r0, 0x80 - lsls r0, 4 - strh r0, [r1] - movs r3, 0x9E - lsls r3, 1 - adds r1, r5, r3 - movs r0, 0x1 - strb r0, [r1] - movs r1, 0xA0 - lsls r1, 1 - adds r0, r5, r1 - strh r2, [r0] - movs r2, 0xA2 - lsls r2, 1 - adds r0, r5, r2 - movs r3, 0x6 - ldrsh r2, [r5, r3] - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - ldr r3, [r1] - adds r1, r7, 0 - bl sub_80A75CC -_080AC0C0: - adds r4, r5, 0 - adds r4, 0x38 - ldr r1, _080AC154 - mov r0, r9 - str r0, [sp] - adds r0, r4, 0 - adds r2, r5, 0 - mov r3, r10 - bl InitActionWithParams - adds r6, r4, 0 - mov r1, r8 - ldr r2, [r1, 0xC] - cmp r2, 0 - bne _080AC0F2 - movs r2, 0xA2 - lsls r2, 1 - adds r0, r5, r2 - bl SpriteHasPokemonSize_80A66A4 - lsls r0, 24 - ldr r2, _080AC158 - cmp r0, 0 - beq _080AC0F2 - ldr r2, _080AC15C -_080AC0F2: - adds r0, r6, 0 - movs r1, 0x1 - bl SetPredefinedScript - adds r1, r4, 0 - mov r3, r8 - ldr r2, [r3, 0x10] - cmp r2, 0 - bne _080AC108 - ldr r0, _080AC160 - ldr r2, [r0, 0x38] -_080AC108: - adds r0, r1, 0 - movs r1, 0x2 - bl SetPredefinedScript - mov r0, r8 - ldr r2, [r0, 0x14] - cmp r2, 0 - bne _080AC11C - ldr r0, _080AC160 - ldr r2, [r0, 0x68] -_080AC11C: - adds r0, r4, 0 - movs r1, 0x3 - bl SetPredefinedScript - mov r1, r8 - ldr r2, [r1, 0x8] - cmp r2, 0 - beq _080AC140 - adds r0, r4, 0 - movs r1, 0 - bl SetPredefinedScript - ldr r3, _080AC164 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - bl ExecutePredefinedScript -_080AC140: - adds r0, r7, 0 -_080AC142: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080AC154: .4byte gGroundObjectCallbacks -_080AC158: .4byte gUnknown_81182F4 -_080AC15C: .4byte gUnknown_8118350 -_080AC160: .4byte gFunctionScriptTable -_080AC164: .4byte gUnknown_81184A4 - thumb_func_end GroundObject_Add - - thumb_func_start GroundObject_Delete -GroundObject_Delete: - push {r4,lr} - adds r2, r0, 0 - lsls r2, 16 - asrs r2, 16 - ldr r1, _080AC1A4 - lsls r0, r2, 3 - subs r0, r2 - lsls r0, 4 - adds r0, r2 - lsls r0, 2 - ldr r1, [r1] - adds r4, r1, r0 - ldr r1, _080AC1A8 - movs r0, 0 - bl Log - movs r1, 0xA2 - lsls r1, 1 - adds r0, r4, r1 - bl sub_80A7658 - adds r0, r4, 0 - adds r0, 0x38 - bl InitAction2 - ldr r0, _080AC1AC - strh r0, [r4, 0x6] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC1A4: .4byte gGroundObjects -_080AC1A8: .4byte gUnknown_81184B0 -_080AC1AC: .4byte 0x0000ffff - thumb_func_end GroundObject_Delete - - thumb_func_start sub_80AC1B0 -sub_80AC1B0: - push {lr} - adds r3, r1, 0 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC1F0 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080AC1EA - movs r1, 0x8E - lsls r1, 1 - adds r0, r2, r1 - ldr r1, [r0] - orrs r1, r3 - str r1, [r0] - movs r3, 0xA2 - lsls r3, 1 - adds r0, r2, r3 - bl sub_80A6688 -_080AC1EA: - pop {r0} - bx r0 - .align 2, 0 -_080AC1F0: .4byte gGroundObjects - thumb_func_end sub_80AC1B0 - - thumb_func_start sub_80AC1F4 -sub_80AC1F4: - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC238 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r3, r0, r1 - movs r0, 0x6 - ldrsh r1, [r3, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080AC232 - movs r0, 0x8E - lsls r0, 1 - adds r2, r3, r0 - ldr r0, _080AC23C - eors r0, r4 - ldr r1, [r2] - ands r1, r0 - str r1, [r2] - movs r2, 0xA2 - lsls r2, 1 - adds r0, r3, r2 - bl sub_80A6688 -_080AC232: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080AC238: .4byte gGroundObjects -_080AC23C: .4byte 0x337fffff - thumb_func_end sub_80AC1F4 - - thumb_func_start sub_80AC240 -sub_80AC240: - push {lr} - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC268 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080AC26C - movs r0, 0 - b _080AC270 - .align 2, 0 -_080AC268: .4byte gGroundObjects -_080AC26C: - adds r0, r2, 0 - adds r0, 0x38 -_080AC270: - pop {r1} - bx r1 - thumb_func_end sub_80AC240 - - thumb_func_start sub_80AC274 -sub_80AC274: - push {r4,lr} - adds r4, r1, 0 - lsls r0, 16 - asrs r0, 16 - lsls r2, 16 - asrs r3, r2, 16 - ldr r2, _080AC2A0 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080AC2A4 - movs r0, 0 - b _080AC2B4 - .align 2, 0 -_080AC2A0: .4byte gGroundObjects -_080AC2A4: - adds r0, r2, 0 - adds r0, 0x38 - adds r1, r4, 0 - adds r2, r3, 0 - bl GetPredefinedScript - lsls r0, 24 - lsrs r0, 24 -_080AC2B4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80AC274 - - thumb_func_start GroundObject_ExecuteScript -GroundObject_ExecuteScript: - push {r4-r6,lr} - adds r3, r0, 0 - adds r5, r1, 0 - adds r6, r2, 0 - lsls r3, 16 - asrs r3, 16 - ldr r1, _080AC2F4 - lsls r0, r3, 3 - subs r0, r3 - lsls r0, 4 - adds r0, r3 - lsls r0, 2 - ldr r1, [r1] - adds r4, r1, r0 - ldr r1, _080AC2F8 - movs r0, 0 - adds r2, r3, 0 - bl Log - movs r0, 0x6 - ldrsh r1, [r4, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080AC2FC - movs r0, 0 - b _080AC314 - .align 2, 0 -_080AC2F4: .4byte gGroundObjects -_080AC2F8: .4byte gUnknown_81184CC -_080AC2FC: - adds r0, r4, 0 - adds r0, 0x38 - ldr r3, _080AC31C - adds r1, r5, 0 - adds r2, r6, 0 - bl GroundScript_ExecutePP - movs r0, 0x9E - lsls r0, 1 - adds r1, r4, r0 - movs r0, 0x1 - strb r0, [r1] -_080AC314: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_080AC31C: .4byte gUnknown_8118504 - thumb_func_end GroundObject_ExecuteScript - - thumb_func_start GroundObjectsNotifyAll -GroundObjectsNotifyAll: - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - asrs r7, r0, 16 - ldr r0, _080AC374 - ldr r4, [r0] - movs r5, 0 - movs r0, 0x1 - negs r0, r0 - mov r8, r0 - movs r6, 0x80 - lsls r6, 9 -_080AC33A: - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, r8 - beq _080AC352 - adds r0, r4, 0 - adds r0, 0x38 - adds r1, r7, 0 - bl GroundScriptNotify - orrs r5, r0 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080AC352: - adds r0, r6, 0 - movs r1, 0x80 - lsls r1, 9 - adds r6, r1 - asrs r0, 16 - movs r1, 0xE2 - lsls r1, 1 - adds r4, r1 - cmp r0, 0xF - ble _080AC33A - adds r0, r5, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080AC374: .4byte gGroundObjects - thumb_func_end GroundObjectsNotifyAll - - thumb_func_start GroundObjectsCancellAll -GroundObjectsCancellAll: - push {r4-r7,lr} - ldr r0, _080AC3BC - ldr r4, [r0] - movs r5, 0 - movs r7, 0x1 - negs r7, r7 - movs r6, 0x80 - lsls r6, 9 -_080AC388: - movs r1, 0x6 - ldrsh r0, [r4, r1] - cmp r0, r7 - beq _080AC39E - adds r0, r4, 0 - adds r0, 0x38 - bl GroundScript_Cancel - orrs r5, r0 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080AC39E: - adds r0, r6, 0 - movs r1, 0x80 - lsls r1, 9 - adds r6, r1 - asrs r0, 16 - movs r1, 0xE2 - lsls r1, 1 - adds r4, r1 - cmp r0, 0xF - ble _080AC388 - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080AC3BC: .4byte gGroundObjects - thumb_func_end GroundObjectsCancellAll - - thumb_func_start sub_80AC3C0 -sub_80AC3C0: - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC3DC - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r0, r1 - movs r1, 0x6 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080AC3DC: .4byte gGroundObjects - thumb_func_end sub_80AC3C0 - - thumb_func_start sub_80AC3E0 -sub_80AC3E0: - lsls r0, 16 - asrs r0, 16 - ldr r3, _080AC404 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 4 - adds r2, r0 - lsls r2, 2 - ldr r0, [r3] - adds r0, r2 - movs r3, 0x8E - lsls r3, 1 - adds r2, r0, r3 - ldr r2, [r2] - str r2, [r1] - movs r1, 0x6 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080AC404: .4byte gGroundObjects - thumb_func_end sub_80AC3E0 - - thumb_func_start sub_80AC408 -sub_80AC408: - push {lr} - adds r3, r1, 0 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC434 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080AC438 - movs r0, 0 - str r0, [r3] - str r0, [r3, 0x4] - b _080AC440 - .align 2, 0 -_080AC434: .4byte gGroundObjects -_080AC438: - ldr r0, [r2, 0xC] - ldr r1, [r2, 0x10] - str r0, [r3] - str r1, [r3, 0x4] -_080AC440: - movs r1, 0x6 - ldrsh r0, [r2, r1] - pop {r1} - bx r1 - thumb_func_end sub_80AC408 - - thumb_func_start sub_80AC448 -sub_80AC448: - push {lr} - adds r3, r1, 0 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080AC474 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x6 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080AC478 - movs r0, 0 - str r0, [r3] - b _080AC492 - .align 2, 0 -_080AC474: .4byte gGroundObjects -_080AC478: - movs r1, 0x92 - lsls r1, 1 - adds r0, r2, r1 - ldr r0, [r0] - ldr r1, [r2, 0x14] - adds r0, r1 - str r0, [r3] - movs r1, 0x94 - lsls r1, 1 - adds r0, r2, r1 - ldr r0, [r0] - ldr r1, [r2, 0x18] - adds r0, r1 -_080AC492: - str r0, [r3, 0x4] - movs r1, 0x6 - ldrsh r0, [r2, r1] - pop {r1} - bx r1 - thumb_func_end sub_80AC448 - - thumb_func_start sub_80AC49C -sub_80AC49C: - push {r4,lr} - lsls r0, 16 - asrs r0, 16 - ldr r3, _080AC4C4 - lsls r2, r0, 3 - subs r2, r0 - lsls r2, 4 - adds r2, r0 - lsls r2, 2 - ldr r4, [r3] - adds r4, r2 - adds r0, r4, 0 - bl TryMoveObjectRelative_80AC6AC - movs r1, 0x6 - ldrsh r0, [r4, r1] - pop {r4} - pop {r1} - bx r1 - .align 2, 0 -_080AC4C4: .4byte gGroundObjects - thumb_func_end sub_80AC49C - thumb_func_start sub_80AC4C8 sub_80AC4C8: push {r4-r7,lr} diff --git a/src/ground_object.c b/src/ground_object.c index 3711a764a..bbf6e1a77 100644 --- a/src/ground_object.c +++ b/src/ground_object.c @@ -1,7 +1,15 @@ +#include "gba/types.h" #include "global.h" +#include "structs/str_ground_script.h" #include "ground_script.h" +#include "ground_sprite.h" #include "memory.h" +// TODO: figure out if this is used anywhere else +struct GroundObjectSub { + s32 a0[2]; +}; + typedef struct GroundObject { // size: 0x1C4 u8 unk0[4]; @@ -9,15 +17,26 @@ typedef struct GroundObject { s16 unk6; // kind s16 unk8; // scriptID / group s8 unkA; // sector - u8 fillB[0x14 - 0xB]; - u32 unk14; - u32 unk18; - u8 fill1C[0x38 - 0x1C]; + u8 unkB; + struct GroundObjectSub unkC; + PixelPos unk14; + //s32 unk18; + u8 unk1C; + PixelPos unk20; + s32 unk28[2]; + s32 unk30[2]; Action unk38; - u8 unk11C[0x124 - 0x11C]; - u32 unk124[2]; - u8 unk12C[0x144 - 0x12C]; - u8 unk144[0x1C4 - 0x144]; + u32 flags; + u8 unk120; + PixelPos unk124; + u32 unk12C; + u32 unk130; + PixelPos unk134; + //u32 unk138; + u8 unk13C; + u16 unk13E; + u16 unk140; + struct UnkGroundSpriteStruct unk144; } GroundObject; IWRAM_INIT GroundObject *gGroundObjects = NULL; @@ -25,13 +44,19 @@ IWRAM_INIT GroundObject *gGroundObjects = NULL; void DeleteGroundObjects(void); void GroundObject_Delete(s32); -extern u8 gUnknown_811842C[]; -extern u8 gUnknown_8118414[]; -extern u8 gUnknown_81183F0[]; -s16 GroundObject_Add(s32 id, const GroundObjectData*, s32 group, s32 sector); extern DebugLocation gUnknown_81183E4; +extern u8 gUnknown_81183F0[]; +extern u8 gUnknown_8118414[]; +extern u8 gUnknown_811842C[]; +extern u8 gUnknown_81184B0[]; + const struct GroundScriptHeader *GetGroundScript(s16 a0, DebugLocation *); -bool8 IsOnscreen_80A675C(u8 *, u32 *); +void sub_80A7658(struct UnkGroundSpriteStruct *); +extern bool8 GroundScriptNotify(Action*, s32); +extern bool8 GroundScript_Cancel(Action *r0); + + +s16 GroundObject_Add(s32 id, const GroundObjectData*, s32 group, s32 sector); void AllocGroundObjects(void) { @@ -125,7 +150,7 @@ void GroundObject_CancelBlank(void) { s32 index; GroundObject *ptr; - u32 stack[2]; + PixelPos stack; Log('\0',gUnknown_811842C); @@ -135,9 +160,9 @@ void GroundObject_CancelBlank(void) { if(ptr->unk6 != -1) { - stack[0] = ptr->unk124[0] + ptr->unk14; - stack[1] = ptr->unk124[1] + ptr->unk18; - if(!IsOnscreen_80A675C(ptr->unk144, stack)) + stack.x = ptr->unk124.x + ptr->unk14.x; + stack.y = ptr->unk124.y + ptr->unk14.y; + if(!IsOnscreen_80A675C(&ptr->unk144, &stack)) GroundObject_Delete(index); } } @@ -159,3 +184,678 @@ s32 sub_80ABD48(s32 r0) return -1; } + +NAKED +s16 GroundObject_Add(s32 id, const GroundObjectData *objectData, s32 group, s32 sector) +{ + asm_unified( +" push {r4-r7,lr} \n" +" mov r7, r10 \n" +" mov r6, r9 \n" +" mov r5, r8 \n" +" push {r5-r7} \n" +" sub sp, 0x14 \n" +" mov r8, r1 \n" +" lsls r0, 16 \n" +" asrs r7, r0, 16 \n" +" lsls r2, 16 \n" +" asrs r2, 16 \n" +" mov r10, r2 \n" +" lsls r3, 24 \n" +" asrs r3, 24 \n" +" mov r9, r3 \n" +" ldrb r4, [r1] \n" +" cmp r4, 0x1A \n" +" bne _080ABDDA \n" +" movs r0, 0 \n" +" movs r1, 0x28 \n" +" bl GetScriptVarValue \n" +" cmp r0, 0x1 \n" +" bgt _080ABDBC \n" +" movs r4, 0x1B \n" +" b _080ABDDA \n" +"_080ABDBC: \n" +" movs r0, 0 \n" +" movs r1, 0x29 \n" +" bl GetScriptVarValue \n" +" cmp r0, 0 \n" +" bne _080ABDD4 \n" +" movs r0, 0 \n" +" movs r1, 0x27 \n" +" bl GetScriptVarValue \n" +" adds r0, 0x1C \n" +" b _080ABDD6 \n" +"_080ABDD4: \n" +" adds r0, 0x2B \n" +"_080ABDD6: \n" +" lsls r0, 16 \n" +" asrs r4, r0, 16 \n" +"_080ABDDA: \n" +" lsls r1, r4, 2 \n" +" ldr r0, _080ABE10 \n" +" adds r6, r1, r0 \n" +" cmp r7, 0 \n" +" bge _080ABE40 \n" +" cmp r4, 0xE \n" +" bgt _080ABDF4 \n" +" cmp r4, 0xD \n" +" blt _080ABDF4 \n" +" adds r0, r4, 0 \n" +" bl sub_80ABD48 \n" +" adds r7, r0, 0 \n" +"_080ABDF4: \n" +" cmp r7, 0 \n" +" bge _080ABE40 \n" +" movs r3, 0 \n" +" ldr r0, _080ABE14 \n" +" ldr r5, [r0] \n" +" movs r0, 0x6 \n" +" ldrsh r1, [r5, r0] \n" +" movs r0, 0x1 \n" +" negs r0, r0 \n" +" cmp r1, r0 \n" +" bne _080ABE18 \n" +" movs r7, 0 \n" +" b _080ABE40 \n" +" .align 2, 0 \n" +"_080ABE10: .4byte gGroundObjectTypes\n" +"_080ABE14: .4byte gGroundObjects \n" +"_080ABE18: \n" +" adds r0, r3, 0x1 \n" +" lsls r0, 16 \n" +" asrs r3, r0, 16 \n" +" movs r1, 0xE2 \n" +" lsls r1, 1 \n" +" adds r5, r1 \n" +" cmp r3, 0xF \n" +" bgt _080ABE36 \n" +" movs r2, 0x6 \n" +" ldrsh r1, [r5, r2] \n" +" movs r0, 0x1 \n" +" negs r0, r0 \n" +" cmp r1, r0 \n" +" bne _080ABE18 \n" +" adds r7, r3, 0 \n" +"_080ABE36: \n" +" cmp r7, 0 \n" +" bge _080ABE40 \n" +" movs r0, 0x1 \n" +" negs r0, r0 \n" +" b _080AC142 \n" +"_080ABE40: \n" +" ldr r1, _080ABEA8 \n" +" lsls r0, r7, 3 \n" +" subs r0, r7 \n" +" lsls r0, 4 \n" +" adds r0, r7 \n" +" lsls r0, 2 \n" +" ldr r1, [r1] \n" +" adds r5, r1, r0 \n" +" ldr r1, _080ABEAC \n" +" mov r3, r8 \n" +" ldrb r0, [r3] \n" +" str r0, [sp] \n" +" movs r2, 0 \n" +" ldrsh r0, [r6, r2] \n" +" str r0, [sp, 0x4] \n" +" mov r3, r10 \n" +" str r3, [sp, 0x8] \n" +" mov r0, r9 \n" +" str r0, [sp, 0xC] \n" +" movs r0, 0 \n" +" adds r2, r7, 0 \n" +" adds r3, r4, 0 \n" +" bl Log \n" +" movs r2, 0 \n" +" movs r3, 0x6 \n" +" ldrsh r1, [r5, r3] \n" +" movs r0, 0x1 \n" +" negs r0, r0 \n" +" cmp r1, r0 \n" +" bne _080ABE80 \n" +" movs r2, 0x1 \n" +"_080ABE80: \n" +" str r2, [sp, 0x10] \n" +" strh r7, [r5, 0x4] \n" +" strh r4, [r5, 0x6] \n" +" mov r0, r10 \n" +" strh r0, [r5, 0x8] \n" +" mov r1, r9 \n" +" strb r1, [r5, 0xA] \n" +" ldrh r0, [r6] \n" +" subs r0, 0x1 \n" +" lsls r0, 16 \n" +" asrs r0, 16 \n" +" cmp r0, 0xE \n" +" bls _080ABE9C \n" +" b _080ABF8C \n" +"_080ABE9C: \n" +" lsls r0, 2 \n" +" ldr r1, _080ABEB0 \n" +" adds r0, r1 \n" +" ldr r0, [r0] \n" +" mov pc, r0 \n" +" .align 2, 0 \n" +"_080ABEA8: .4byte gGroundObjects \n" +"_080ABEAC: .4byte gUnknown_8118448\n" +"_080ABEB0: .4byte _080ABEB4 \n" +" .align 2, 0 \n" +"_080ABEB4: \n" +" .4byte _080ABEF0 \n" +" .4byte _080ABF7C \n" +" .4byte _080ABF46 \n" +" .4byte _080ABF54 \n" +" .4byte _080ABF54 \n" +" .4byte _080ABF5E \n" +" .4byte _080ABF68 \n" +" .4byte _080ABF72 \n" +" .4byte _080ABF3C \n" +" .4byte _080ABEFA \n" +" .4byte _080ABEF0 \n" +" .4byte _080ABF06 \n" +" .4byte _080ABF2C \n" +" .4byte _080ABF1E \n" +" .4byte _080ABF12 \n" +"_080ABEF0: \n" +" movs r2, 0x8E \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" movs r0, 0 \n" +" b _080ABF94 \n" +"_080ABEFA: \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" movs r0, 0x80 \n" +" lsls r0, 10 \n" +" b _080ABF94 \n" +"_080ABF06: \n" +" movs r0, 0x8E \n" +" lsls r0, 1 \n" +" adds r1, r5, r0 \n" +" movs r0, 0x80 \n" +" lsls r0, 11 \n" +" b _080ABF94 \n" +"_080ABF12: \n" +" movs r2, 0x8E \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" movs r0, 0x83 \n" +" lsls r0, 18 \n" +" b _080ABF94 \n" +"_080ABF1E: \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" ldr r0, _080ABF28 \n" +" b _080ABF94 \n" +" .align 2, 0 \n" +"_080ABF28: .4byte 0x220c0000 \n" +"_080ABF2C: \n" +" movs r0, 0x8E \n" +" lsls r0, 1 \n" +" adds r1, r5, r0 \n" +" ldr r0, _080ABF38 \n" +" b _080ABF94 \n" +" .align 2, 0 \n" +"_080ABF38: .4byte 0x20010000 \n" +"_080ABF3C: \n" +" movs r2, 0x8E \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" movs r0, 0x5 \n" +" b _080ABF94 \n" +"_080ABF46: \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" ldr r0, _080ABF50 \n" +" b _080ABF94 \n" +" .align 2, 0 \n" +"_080ABF50: .4byte 0x22000184 \n" +"_080ABF54: \n" +" movs r0, 0x8E \n" +" lsls r0, 1 \n" +" adds r1, r5, r0 \n" +" adds r0, 0x68 \n" +" b _080ABF94 \n" +"_080ABF5E: \n" +" movs r2, 0x8E \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" movs r0, 0x44 \n" +" b _080ABF94 \n" +"_080ABF68: \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" movs r0, 0x84 \n" +" b _080ABF94 \n" +"_080ABF72: \n" +" movs r0, 0x8E \n" +" lsls r0, 1 \n" +" adds r1, r5, r0 \n" +" adds r0, 0x64 \n" +" b _080ABF94 \n" +"_080ABF7C: \n" +" movs r2, 0x8E \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" ldr r0, _080ABF88 \n" +" b _080ABF94 \n" +" .align 2, 0 \n" +"_080ABF88: .4byte 0x020000c4 \n" +"_080ABF8C: \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" ldr r0, _080ABFA8 \n" +"_080ABF94: \n" +" str r0, [r1] \n" +" ldrb r0, [r6, 0x2] \n" +" cmp r0, 0 \n" +" bne _080ABFAC \n" +" mov r1, r8 \n" +" ldrb r0, [r1, 0x2] \n" +" lsls r0, 11 \n" +" str r0, [r5, 0xC] \n" +" ldrb r0, [r1, 0x3] \n" +" b _080ABFB4 \n" +" .align 2, 0 \n" +"_080ABFA8: .4byte 0x02000185 \n" +"_080ABFAC: \n" +" ldrb r0, [r6, 0x2] \n" +" lsls r0, 11 \n" +" str r0, [r5, 0xC] \n" +" ldrb r0, [r6, 0x3] \n" +"_080ABFB4: \n" +" lsls r0, 11 \n" +" str r0, [r5, 0x10] \n" +" ldr r0, [r5, 0xC] \n" +" lsrs r1, r0, 31 \n" +" adds r0, r1 \n" +" asrs r0, 1 \n" +" str r0, [r5, 0x14] \n" +" ldr r0, [r5, 0x10] \n" +" lsrs r1, r0, 31 \n" +" adds r0, r1 \n" +" asrs r0, 1 \n" +" str r0, [r5, 0x18] \n" +" mov r2, r8 \n" +" ldrb r0, [r2, 0x1] \n" +" strb r0, [r5, 0x1C] \n" +" adds r2, 0x4 \n" +" adds r4, r5, 0 \n" +" adds r4, 0x20 \n" +" ldrb r1, [r2, 0x2] \n" +" movs r0, 0x4 \n" +" ands r0, r1 \n" +" cmp r0, 0 \n" +" bne _080ABFFC \n" +" mov r3, r8 \n" +" ldrb r0, [r3, 0x4] \n" +" lsls r3, r0, 11 \n" +" str r3, [r5, 0x20] \n" +" ldrb r1, [r2, 0x2] \n" +" movs r0, 0x2 \n" +" ands r0, r1 \n" +" cmp r0, 0 \n" +" beq _080ABFFC \n" +" movs r1, 0x80 \n" +" lsls r1, 3 \n" +" adds r0, r3, r1 \n" +" str r0, [r5, 0x20] \n" +"_080ABFFC: \n" +" ldrb r1, [r2, 0x3] \n" +" movs r0, 0x4 \n" +" ands r0, r1 \n" +" cmp r0, 0 \n" +" bne _080AC01E \n" +" ldrb r0, [r2, 0x1] \n" +" lsls r3, r0, 11 \n" +" str r3, [r4, 0x4] \n" +" ldrb r1, [r2, 0x3] \n" +" movs r0, 0x2 \n" +" ands r0, r1 \n" +" cmp r0, 0 \n" +" beq _080AC01E \n" +" movs r2, 0x80 \n" +" lsls r2, 3 \n" +" adds r0, r3, r2 \n" +" str r0, [r4, 0x4] \n" +"_080AC01E: \n" +" ldr r3, [sp, 0x10] \n" +" cmp r3, 0 \n" +" beq _080AC076 \n" +" ldrb r1, [r5, 0x1C] \n" +" movs r2, 0x90 \n" +" lsls r2, 1 \n" +" adds r0, r5, r2 \n" +" movs r3, 0 \n" +" strb r1, [r0] \n" +" movs r0, 0x92 \n" +" lsls r0, 1 \n" +" adds r2, r5, r0 \n" +" ldr r0, [r5, 0x20] \n" +" ldr r1, [r5, 0x14] \n" +" subs r0, r1 \n" +" str r0, [r2] \n" +" movs r1, 0x96 \n" +" lsls r1, 1 \n" +" adds r2, r5, r1 \n" +" ldr r0, [r5, 0x20] \n" +" ldr r1, [r5, 0x14] \n" +" adds r0, r1 \n" +" str r0, [r2] \n" +" movs r0, 0x94 \n" +" lsls r0, 1 \n" +" adds r2, r5, r0 \n" +" ldr r0, [r5, 0x24] \n" +" ldr r1, [r5, 0x18] \n" +" subs r0, r1 \n" +" str r0, [r2] \n" +" movs r1, 0x98 \n" +" lsls r1, 1 \n" +" adds r2, r5, r1 \n" +" ldr r0, [r5, 0x24] \n" +" ldr r1, [r5, 0x18] \n" +" adds r0, r1 \n" +" str r0, [r2] \n" +" movs r2, 0x9A \n" +" lsls r2, 1 \n" +" adds r1, r5, r2 \n" +" adds r2, 0x4 \n" +" adds r0, r5, r2 \n" +" str r3, [r0] \n" +" str r3, [r1] \n" +"_080AC076: \n" +" adds r0, r5, 0 \n" +" adds r0, 0x28 \n" +" adds r1, r5, 0 \n" +" adds r1, 0x30 \n" +" bl GetCurrentDungeonBounds \n" +" ldr r3, [sp, 0x10] \n" +" cmp r3, 0 \n" +" beq _080AC0C0 \n" +" movs r0, 0x9F \n" +" lsls r0, 1 \n" +" adds r1, r5, r0 \n" +" movs r2, 0 \n" +" movs r0, 0x80 \n" +" lsls r0, 4 \n" +" strh r0, [r1] \n" +" movs r3, 0x9E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" movs r0, 0x1 \n" +" strb r0, [r1] \n" +" movs r1, 0xA0 \n" +" lsls r1, 1 \n" +" adds r0, r5, r1 \n" +" strh r2, [r0] \n" +" movs r2, 0xA2 \n" +" lsls r2, 1 \n" +" adds r0, r5, r2 \n" +" movs r3, 0x6 \n" +" ldrsh r2, [r5, r3] \n" +" movs r3, 0x8E \n" +" lsls r3, 1 \n" +" adds r1, r5, r3 \n" +" ldr r3, [r1] \n" +" adds r1, r7, 0 \n" +" bl sub_80A75CC \n" +"_080AC0C0: \n" +" adds r4, r5, 0 \n" +" adds r4, 0x38 \n" +" ldr r1, _080AC154 \n" +" mov r0, r9 \n" +" str r0, [sp] \n" +" adds r0, r4, 0 \n" +" adds r2, r5, 0 \n" +" mov r3, r10 \n" +" bl InitActionWithParams \n" +" adds r6, r4, 0 \n" +" mov r1, r8 \n" +" ldr r2, [r1, 0xC] \n" +" cmp r2, 0 \n" +" bne _080AC0F2 \n" +" movs r2, 0xA2 \n" +" lsls r2, 1 \n" +" adds r0, r5, r2 \n" +" bl SpriteHasPokemonSize_80A66A4\n" +" lsls r0, 24 \n" +" ldr r2, _080AC158 \n" +" cmp r0, 0 \n" +" beq _080AC0F2 \n" +" ldr r2, _080AC15C \n" +"_080AC0F2: \n" +" adds r0, r6, 0 \n" +" movs r1, 0x1 \n" +" bl SetPredefinedScript \n" +" adds r1, r4, 0 \n" +" mov r3, r8 \n" +" ldr r2, [r3, 0x10] \n" +" cmp r2, 0 \n" +" bne _080AC108 \n" +" ldr r0, _080AC160 \n" +" ldr r2, [r0, 0x38] \n" +"_080AC108: \n" +" adds r0, r1, 0 \n" +" movs r1, 0x2 \n" +" bl SetPredefinedScript \n" +" mov r0, r8 \n" +" ldr r2, [r0, 0x14] \n" +" cmp r2, 0 \n" +" bne _080AC11C \n" +" ldr r0, _080AC160 \n" +" ldr r2, [r0, 0x68] \n" +"_080AC11C: \n" +" adds r0, r4, 0 \n" +" movs r1, 0x3 \n" +" bl SetPredefinedScript \n" +" mov r1, r8 \n" +" ldr r2, [r1, 0x8] \n" +" cmp r2, 0 \n" +" beq _080AC140 \n" +" adds r0, r4, 0 \n" +" movs r1, 0 \n" +" bl SetPredefinedScript \n" +" ldr r3, _080AC164 \n" +" adds r0, r4, 0 \n" +" movs r1, 0 \n" +" movs r2, 0 \n" +" bl ExecutePredefinedScript \n" +"_080AC140: \n" +" adds r0, r7, 0 \n" +"_080AC142: \n" +" add sp, 0x14 \n" +" pop {r3-r5} \n" +" mov r8, r3 \n" +" mov r9, r4 \n" +" mov r10, r5 \n" +" pop {r4-r7} \n" +" pop {r1} \n" +" bx r1 \n" +" .align 2, 0 \n" +"_080AC154: .4byte gGroundObjectCallbacks\n" +"_080AC158: .4byte gUnknown_81182F4\n" +"_080AC15C: .4byte gUnknown_8118350\n" +"_080AC160: .4byte gFunctionScriptTable\n" +"_080AC164: .4byte gUnknown_81184A4"); +} + +void sub_80A6688(struct UnkGroundSpriteStruct *, s32); + +void GroundObject_Delete(s32 index_) { + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + Log(0, gUnknown_81184B0, index); + sub_80A7658(&parent->unk144); + InitAction2(&parent->unk38); + parent->unk6 = -1; +} + +void sub_80AC1B0(s32 index_, s32 flag) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + if(parent->unk6 != -1) + { + parent->flags |= flag; + sub_80A6688(&parent->unk144, parent->flags); + } +} + +void sub_80AC1F4(s32 index_, s32 flag) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + if(parent->unk6 != -1) + { + parent->flags &= (0x337fffff ^ flag); + sub_80A6688(&parent->unk144, parent->flags); + } +} + +Action *sub_80AC240(s32 index_) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + if(parent->unk6 != -1) + return &parent->unk38; + else + return NULL; +} + +extern bool8 GetPredefinedScript(Action *param_1, ScriptInfoSmall *script, s32 _index); + + +bool8 sub_80AC274(s32 index_, ScriptInfoSmall *scriptInfo, s32 a2_) +{ + s32 index = (s16)index_; + s32 a2 = (s16)a2_; + GroundObject *parent = &gGroundObjects[index]; + + if(parent->unk6 != -1) + return GetPredefinedScript(&parent->unk38, scriptInfo, a2); + else + return FALSE; +} + +extern u8 gUnknown_81184CC[]; +extern DebugLocation gUnknown_8118504; + +bool8 GroundObject_ExecuteScript(s32 index_, void *a1, ScriptInfoSmall *script) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + Log(0, gUnknown_81184CC, index); + + if(parent->unk6 != -1) + { + GroundScript_ExecutePP(&parent->unk38, (ActionUnkIds *)a1, script, &gUnknown_8118504); + parent->unk13C = 1; + return 1; + } + else { + return 0; + } +} + +bool8 GroundObjectsNotifyAll(s32 index_) +{ + s32 index = (s16)index_; + s32 counter; + GroundObject *parent = &gGroundObjects[0]; + bool8 flag = FALSE; + + for(counter = 0; counter < 0x10; counter = (s16)(counter + 1), parent++) + { + if(parent->unk6 != -1) + flag |= GroundScriptNotify(&parent->unk38, index); + } + + return flag; +} + +bool8 GroundObjectsCancelAll(void) +{ + s32 counter; + GroundObject *parent = &gGroundObjects[0]; + bool8 flag = FALSE; + + for(counter = 0; counter < 0x10; counter = (s16)(counter + 1), parent++) + { + if(parent->unk6 != -1) + flag |= GroundScript_Cancel(&parent->unk38); + } + + return flag; +} + +static UNUSED s16 sub_80AC3C0(s32 index_) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + return parent->unk6; +} + +s16 sub_80AC3E0(s32 index_, s32 *a1) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + *a1 = parent->flags; + return parent->unk6; +} + +static UNUSED s16 sub_80AC408(s32 index_, struct GroundObjectSub *a1) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + if(parent->unk6 == -1) + { + a1->a0[0] = 0; + a1->a0[1] = 0; + } + else + { + *a1 = parent->unkC; + } + return parent->unk6; +} + +s16 sub_80AC448(s32 index_, PixelPos *pos) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + if(parent->unk6 == -1) + { + pos->x = 0; + pos->y = 0; + } + else { + pos->x = parent->unk124.x + parent->unk14.x; + pos->y = parent->unk124.y + parent->unk14.y; + } + + return parent->unk6; +} + +extern void TryMoveObjectRelative_80AC6AC(void *, PixelPos *); + + +s16 sub_80AC49C(s32 index_, PixelPos *pos) +{ + s32 index = (s16)index_; + GroundObject *parent = &gGroundObjects[index]; + + TryMoveObjectRelative_80AC6AC(parent, pos); + + return parent->unk6; +} diff --git a/src/ground_script.c b/src/ground_script.c index b08b5785c..f67de6249 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -128,17 +128,42 @@ bool8 sub_809D234(void); s32 sub_80A14E8(Action *, u8, u32, s32); u8 sub_80990EC(struct DungeonSetupInfo *param_1, s32 param_2); -extern u8 GroundObjectsCancellAll(void); +extern u8 GroundObjectsCancelAll(void); extern u8 GroundEffectsCancelAll(void); extern u8 GroundLivesCancelAll(void); extern u8 IsTextboxOpen_809A750(void); -extern Action *sub_80A882C(s16); -extern Action *sub_80AC240(s16); -extern Action *sub_80AD158(s16); +extern Action *sub_80A882C(s32); +extern Action *sub_80AC240(s32); +extern Action *sub_80AD158(s32); extern void sub_809AB4C(s32, s32); extern void sub_809ABB4(s32, s32); extern void sub_809AC18(s32, s32); extern s16 sub_80A8BBC(s32 id_); +extern char gUnknown_81165D4[]; +extern char gUnknown_81165F4[]; +extern char gUnknown_811660C[]; +extern char gUnknown_8116628[]; +extern char gUnknown_8116644[]; +extern char gUnknown_8116664[]; +extern char gUnknown_8116684[]; +extern char gUnknown_81166C0[]; +extern char gUnknown_81166D8[]; + +extern const CallbackData gGroundScriptTriggerCallbacks; +extern DebugLocation gUnknown_81166B4; +extern DebugLocation gUnknown_81166F8; +extern DebugLocation gUnknown_8116704; + +extern const DebugLocation gUnknown_8116588; +extern const DebugLocation gUnknown_8116538; +extern const DebugLocation gUnknown_8116560; +extern u8 gUnknown_8116594[]; +extern u8 gUnknown_8116544[]; +extern u8 gUnknown_811656C[]; + +extern DebugLocation gUnknown_81165C8; + +extern u8 gUnknown_8116848[]; bool8 GroundLivesNotifyAll(s16); bool8 GroundObjectsNotifyAll(s16); @@ -528,7 +553,7 @@ u8 GroundCancelAllEntities(void) u8 ret; ret = GroundLivesCancelAll(); - ret |= GroundObjectsCancellAll(); + ret |= GroundObjectsCancelAll(); ret |= GroundEffectsCancelAll(); return ret; }