diff --git a/asm/ground_lives.s b/asm/ground_lives.s index eec91d70b..9a2e42fa6 100644 --- a/asm/ground_lives.s +++ b/asm/ground_lives.s @@ -10,1101 +10,6 @@ - - thumb_func_start sub_80A7DDC -sub_80A7DDC: - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x24 - adds r7, r0, 0 - adds r5, r1, 0 - bl sub_80A7B94 - lsls r0, 16 - asrs r0, 16 - mov r8, r0 - movs r0, 0 - strh r0, [r5] - ldrh r3, [r7] - movs r1, 0 - ldrsh r0, [r7, r1] - movs r6, 0x1 - negs r6, r6 - cmp r0, r6 - bne _080A7E0A -_080A7E04: - movs r0, 0x1 - negs r0, r0 - b _080A8098 -_080A7E0A: - movs r0, 0 - ldrsh r2, [r7, r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _080A7E50 - adds r4, r0, r1 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0x3 - beq _080A7E22 - b _080A7F38 -_080A7E22: - adds r0, r3, 0 - subs r0, 0xA - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x3 - bhi _080A7E90 - adds r4, r2, 0 - subs r4, 0xA - bl sub_8098F88 - lsls r0, 24 - cmp r0, 0 - beq _080A7E58 - ldr r0, _080A7E54 - lsls r1, r4, 1 - adds r1, r0 - ldrh r0, [r1] - strh r0, [r5] - cmp r0, 0 - bne _080A7E04 - strh r6, [r7] - b _080A7E04 - .align 2, 0 -_080A7E50: .4byte gGroundLivesTypeData_811E63C -_080A7E54: .4byte gUnknown_81180F0 -_080A7E58: - movs r0, 0x9 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080A7E6C - mov r0, sp - bl sub_808D6A4 - b _080A7E72 -_080A7E6C: - mov r0, sp - bl sub_808D654 -_080A7E72: - cmp r4, r0 - blt _080A7E78 - b _080A8080 -_080A7E78: - ldr r2, _080A7E8C - lsls r0, r4, 2 - add r0, sp - ldr r1, [r0] - movs r0, 0x58 - muls r1, r0 - ldr r0, [r2] - adds r0, r1 - ldrh r0, [r0, 0x8] - b _080A800A - .align 2, 0 -_080A7E8C: .4byte gRecruitedPokemonRef -_080A7E90: - adds r0, r3, 0 - subs r0, 0xE - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xF - bls _080A7E9E - b _080A8080 -_080A7E9E: - movs r0, 0 - movs r1, 0x10 - bl GetScriptVarValue - lsls r0, 16 - asrs r0, 16 - bl sub_8002658 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080A7EB8 - b _080A8080 -_080A7EB8: - movs r2, 0 - ldrsh r0, [r7, r2] - adds r4, r0, 0 - subs r4, 0xE - adds r0, r1, 0 - mov r1, sp - movs r2, 0 - movs r3, 0 - bl GetFriendAreaCapacity2 - mov r0, sp - movs r1, 0 - ldrsh r0, [r0, r1] - cmp r4, r0 - blt _080A7ED8 - b _080A8080 -_080A7ED8: - ldr r2, _080A7F0C - ldr r0, [sp, 0x8] - adds r0, r4 - movs r1, 0x58 - muls r1, r0 - ldr r0, [r2] - adds r4, r0, r1 - movs r0, 0x9 - bl sub_80023E4 - lsls r0, 24 - cmp r0, 0 - beq _080A7F10 - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080A7EFE - b _080A8080 -_080A7EFE: - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _080A7F06 - b _080A8080 -_080A7F06: - ldrh r0, [r4, 0x8] - b _080A800A - .align 2, 0 -_080A7F0C: .4byte gRecruitedPokemonRef -_080A7F10: - ldrb r1, [r4] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - bne _080A7F1C - b _080A8080 -_080A7F1C: - ldrb r0, [r4, 0x2] - cmp r0, 0 - beq _080A7F24 - b _080A8080 -_080A7F24: - movs r1, 0 - ldrb r0, [r4, 0x4] - cmp r0, 0x41 - bne _080A7F2E - movs r1, 0x1 -_080A7F2E: - cmp r1, 0 - beq _080A7F34 - b _080A8080 -_080A7F34: - ldrh r0, [r4, 0x8] - b _080A800A -_080A7F38: - subs r0, r3, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x23 - bls _080A7F44 - b _080A808A -_080A7F44: - lsls r0, 2 - ldr r1, _080A7F50 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A7F50: .4byte _080A7F54 - .align 2, 0 -_080A7F54: - .4byte _080A7FE4 - .4byte _080A7FEC - .4byte _080A7FF4 - .4byte _080A808A - .4byte _080A808A - .4byte _080A7FE4 - .4byte _080A7FEC - .4byte _080A7FF4 - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A808A - .4byte _080A8032 - .4byte _080A8032 - .4byte _080A8014 - .4byte _080A7FE4 - .4byte _080A7FEC - .4byte _080A7FF4 - .4byte _080A7FFC -_080A7FE4: - bl sub_808D3BC - ldrh r0, [r0, 0x8] - b _080A8094 -_080A7FEC: - bl sub_808D3F8 - ldrh r0, [r0, 0x8] - b _080A8094 -_080A7FF4: - bl GetPlayerPokemonStruct - ldrh r0, [r0, 0x8] - b _080A8094 -_080A7FFC: - movs r0, 0xF - bl RandInt - ldr r1, _080A8010 - lsls r0, 1 - adds r0, r1 - ldrh r0, [r0] -_080A800A: - strh r0, [r5] - b _080A7E04 - .align 2, 0 -_080A8010: .4byte gUnknown_81180FC -_080A8014: - movs r0, 0 - movs r1, 0x1F - bl GetScriptVarValue - lsls r0, 16 - asrs r0, 16 - cmp r0, 0 - beq _080A8028 - strh r0, [r5] - b _080A7E04 -_080A8028: - movs r1, 0x1 - negs r1, r1 - adds r0, r1, 0 - strh r0, [r7] - b _080A7E04 -_080A8032: - movs r0, 0x89 - strh r0, [r5] - add r6, sp, 0x10 - adds r0, r6, 0 - bl sub_8099328 - lsls r0, 24 - cmp r0, 0 - bne _080A8046 - b _080A7E04 -_080A8046: - add r1, sp, 0x14 - add r2, sp, 0x18 - movs r0, 0x2 - bl GetScriptVarScenario - add r4, sp, 0x1C - ldr r1, [sp, 0x18] - lsls r1, 24 - lsrs r1, 24 - ldrb r2, [r6] - adds r0, r4, 0 - bl sub_8096AF8 - ldrb r0, [r4] - cmp r0, 0 - beq _080A8076 - movs r2, 0 - ldrsh r0, [r7, r2] - cmp r0, 0x1E - bne _080A8072 - ldrh r0, [r4, 0x2] - b _080A8074 -_080A8072: - ldrh r0, [r4, 0x4] -_080A8074: - strh r0, [r5] -_080A8076: - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0 - beq _080A8080 - b _080A7E04 -_080A8080: - movs r2, 0x1 - negs r2, r2 - adds r0, r2, 0 - strh r0, [r7] - b _080A7E04 -_080A808A: - movs r1, 0 - ldrsh r0, [r5, r1] - cmp r0, 0 - bne _080A8096 - ldrh r0, [r4, 0x2] -_080A8094: - strh r0, [r5] -_080A8096: - mov r0, r8 -_080A8098: - add sp, 0x24 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_80A7DDC - - thumb_func_start GroundLives_Add -GroundLives_Add: - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - str r1, [sp, 0x10] - lsls r0, 16 - asrs r6, r0, 16 - lsls r2, 16 - asrs r2, 16 - str r2, [sp, 0x14] - lsls r3, 24 - asrs r3, 24 - str r3, [sp, 0x18] - ldrb r1, [r1] - add r0, sp, 0xC - strh r1, [r0] - movs r0, 0 - mov r8, r0 - mov r4, sp - adds r4, 0xE - add r0, sp, 0xC - adds r1, r4, 0 - bl sub_80A7DDC - lsls r0, 16 - asrs r7, r0, 16 - add r0, sp, 0xC - movs r2, 0 - ldrsh r1, [r0, r2] - movs r0, 0x1 - negs r0, r0 - mov r9, r4 - cmp r1, r0 - beq _080A81AE - cmp r7, 0x1 - beq _080A8104 - cmp r7, 0x1 - bgt _080A80FA - cmp r7, 0 - beq _080A8100 - b _080A8118 -_080A80FA: - cmp r7, 0x2 - beq _080A8108 - b _080A8118 -_080A8100: - movs r6, 0 - b _080A8118 -_080A8104: - movs r6, 0x1 - b _080A8118 -_080A8108: - movs r0, 0 - movs r1, 0x1D - bl GetScriptVarValue - cmp r0, 0 - bne _080A8116 - movs r7, 0x1 -_080A8116: - movs r6, 0x2 -_080A8118: - add r0, sp, 0xC - movs r3, 0 - ldrsh r2, [r0, r3] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - ldr r1, _080A813C - adds r0, r1 - str r0, [sp, 0x1C] - cmp r6, 0 - bge _080A81B4 - cmp r2, 0x21 - beq _080A8140 - cmp r2, 0x23 - beq _080A8154 - adds r0, r2, 0 - b _080A8162 - .align 2, 0 -_080A813C: .4byte gGroundLivesTypeData_811E63C -_080A8140: - ldr r0, _080A8150 - ldr r0, [r0] - movs r4, 0x2 - ldrsh r0, [r0, r4] - cmp r0, 0x1 - beq _080A81AE - movs r0, 0x21 - b _080A8162 - .align 2, 0 -_080A8150: .4byte gGroundLives -_080A8154: - ldr r0, _080A8188 - ldr r0, [r0] - movs r1, 0x2 - ldrsh r0, [r0, r1] - cmp r0, 0x3 - beq _080A81AE - movs r0, 0x23 -_080A8162: - bl sub_80A7AE8 - adds r6, r0, 0 - cmp r6, 0 - bge _080A81B4 - movs r2, 0x3 - ldr r0, _080A8188 - ldr r0, [r0] - movs r3, 0xBA - lsls r3, 3 - adds r5, r0, r3 - movs r4, 0x2 - ldrsh r1, [r5, r4] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080A818C - movs r6, 0x3 - b _080A81B4 - .align 2, 0 -_080A8188: .4byte gGroundLives -_080A818C: - adds r0, r2, 0x1 - lsls r0, 16 - asrs r2, r0, 16 - movs r0, 0xF8 - lsls r0, 1 - adds r5, r0 - cmp r2, 0x17 - bgt _080A81AA - movs r3, 0x2 - ldrsh r1, [r5, r3] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080A818C - adds r6, r2, 0 -_080A81AA: - cmp r6, 0 - bge _080A81B4 -_080A81AE: - movs r0, 0x1 - negs r0, r0 - b _080A8674 -_080A81B4: - ldr r1, _080A8234 - lsls r0, r6, 5 - subs r0, r6 - lsls r0, 4 - ldr r1, [r1] - adds r5, r1, r0 - ldr r1, _080A8238 - add r0, sp, 0xC - movs r4, 0 - ldrsh r3, [r0, r4] - ldr r2, [sp, 0x1C] - movs r4, 0 - ldrsh r0, [r2, r4] - str r0, [sp] - ldr r0, [sp, 0x14] - str r0, [sp, 0x4] - ldr r2, [sp, 0x18] - str r2, [sp, 0x8] - movs r0, 0 - adds r2, r6, 0 - bl Log - movs r2, 0 - movs r3, 0x2 - ldrsh r1, [r5, r3] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080A81F0 - movs r2, 0x1 -_080A81F0: - str r2, [sp, 0x20] - strh r6, [r5] - add r0, sp, 0xC - ldrh r0, [r0] - strh r0, [r5, 0x2] - mov r4, sp - ldrh r4, [r4, 0x14] - strh r4, [r5, 0x4] - mov r0, sp - ldrb r0, [r0, 0x18] - strb r0, [r5, 0x6] - mov r1, r9 - ldrh r0, [r1] - strh r0, [r5, 0x8] - movs r2, 0x90 - lsls r2, 1 - adds r4, r5, r2 - adds r0, r4, 0 - bl sub_809CD68 - movs r0, 0x9 - str r0, [r4] - ldr r3, [sp, 0x1C] - ldrh r0, [r3] - subs r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bhi _080A82D8 - lsls r0, 2 - ldr r1, _080A823C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080A8234: .4byte gGroundLives -_080A8238: .4byte gUnknown_811811C -_080A823C: .4byte _080A8240 - .align 2, 0 -_080A8240: - .4byte _080A8268 - .4byte _080A8280 - .4byte _080A8290 - .4byte _080A82D8 - .4byte _080A82D8 - .4byte _080A8298 - .4byte _080A82A8 - .4byte _080A82B4 - .4byte _080A82BE - .4byte _080A82CA -_080A8268: - movs r4, 0x8E - lsls r4, 1 - adds r1, r5, r4 - ldr r0, _080A827C - str r0, [r1] - movs r0, 0x90 - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x1 - b _080A82E0 - .align 2, 0 -_080A827C: .4byte 0x2300181d -_080A8280: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - ldr r0, _080A828C - b _080A82E0 - .align 2, 0 -_080A828C: .4byte 0x23001000 -_080A8290: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - b _080A82DE -_080A8298: - movs r4, 0x8E - lsls r4, 1 - adds r1, r5, r4 - ldr r0, _080A82A4 - b _080A82E0 - .align 2, 0 -_080A82A4: .4byte 0x2000000d -_080A82A8: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x80 - lsls r0, 10 - b _080A82E0 -_080A82B4: - movs r2, 0x8E - lsls r2, 1 - adds r1, r5, r2 - movs r0, 0 - b _080A82E0 -_080A82BE: - movs r3, 0x8E - lsls r3, 1 - adds r1, r5, r3 - movs r0, 0xC0 - lsls r0, 12 - b _080A82E0 -_080A82CA: - movs r4, 0x8E - lsls r4, 1 - adds r1, r5, r4 - ldr r0, _080A82D4 - b _080A82E0 - .align 2, 0 -_080A82D4: .4byte 0x20010000 -_080A82D8: - movs r0, 0x8E - lsls r0, 1 - adds r1, r5, r0 -_080A82DE: - ldr r0, _080A83DC -_080A82E0: - str r0, [r1] - ldr r2, [sp, 0x1C] - ldrb r1, [r2, 0x8] - lsls r1, 11 - str r1, [r5, 0xC] - ldrb r0, [r2, 0x9] - lsls r0, 11 - str r0, [r5, 0x10] - lsrs r1, 1 - str r1, [r5, 0x14] - lsrs r0, 1 - str r0, [r5, 0x18] - ldr r3, [sp, 0x10] - ldrb r0, [r3, 0x1] - strb r0, [r5, 0x1C] - adds r2, r3, 0 - adds r2, 0x4 - adds r4, r5, 0 - adds r4, 0x20 - ldrb r1, [r2, 0x2] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080A8328 - 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 _080A8328 - movs r1, 0x80 - lsls r1, 3 - adds r0, r3, r1 - str r0, [r5, 0x20] -_080A8328: - ldrb r1, [r2, 0x3] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080A834A - 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 _080A834A - movs r2, 0x80 - lsls r2, 3 - adds r0, r3, r2 - str r0, [r4, 0x4] -_080A834A: - ldr r3, [sp, 0x20] - cmp r3, 0 - beq _080A83EC - ldrb r0, [r5, 0x1C] - movs r4, 0xA1 - lsls r4, 1 - adds r1, r5, r4 - movs r3, 0 - strb r0, [r1] - movs r0, 0xA2 - lsls r0, 1 - adds r2, r5, r0 - ldr r0, [r5, 0x20] - ldr r1, [r5, 0x14] - subs r0, r1 - str r0, [r2] - movs r1, 0xA6 - lsls r1, 1 - adds r2, r5, r1 - ldr r0, [r5, 0x20] - ldr r1, [r5, 0x14] - adds r0, r1 - str r0, [r2] - adds r4, 0x6 - adds r2, r5, r4 - ldr r0, [r5, 0x24] - ldr r1, [r5, 0x18] - subs r0, r1 - str r0, [r2] - movs r0, 0xA8 - lsls r0, 1 - adds r2, r5, r0 - ldr r0, [r5, 0x24] - ldr r1, [r5, 0x18] - adds r0, r1 - str r0, [r2] - movs r2, 0xAA - lsls r2, 1 - adds r1, r5, r2 - adds r4, 0x10 - adds r0, r5, r4 - str r3, [r0] - str r3, [r1] - movs r1, 0x9E - lsls r1, 1 - adds r0, r5, r1 - strh r7, [r0] - ldr r1, _080A83E0 - lsls r0, r7, 1 - adds r0, r7 - lsls r0, 2 - ldr r1, [r1] - adds r1, r0 - movs r0, 0x1 - negs r0, r0 - str r0, [r1, 0x8] - str r3, [r1] - str r3, [r1, 0x4] - ldrh r0, [r5, 0x2] - subs r0, 0xE - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xF - bhi _080A83E4 - movs r0, 0x12 - bl OtherRandInt - movs r2, 0xA0 - lsls r2, 1 - adds r1, r5, r2 - strh r0, [r1] - b _080A83EC - .align 2, 0 -_080A83DC: .4byte 0x2300068d -_080A83E0: .4byte gGroundLivesMeta -_080A83E4: - movs r4, 0xA0 - lsls r4, 1 - adds r0, r5, r4 - strh r3, [r0] -_080A83EC: - movs r1, 0x8E - lsls r1, 1 - adds r0, r5, r1 - ldr r0, [r0] - movs r1, 0x80 - lsls r1, 4 - ands r0, r1 - cmp r0, 0 - beq _080A8418 - movs r2, 0xA2 - lsls r2, 1 - adds r1, r5, r2 - movs r3, 0xA6 - lsls r3, 1 - adds r2, r5, r3 - movs r0, 0x20 - bl FindGroundEvent - movs r4, 0x9F - lsls r4, 1 - adds r1, r5, r4 - b _080A8420 -_080A8418: - movs r0, 0x9F - lsls r0, 1 - adds r1, r5, r0 - ldr r0, _080A849C -_080A8420: - strh r0, [r1] - adds r0, r5, 0 - adds r0, 0x28 - adds r1, r5, 0 - adds r1, 0x30 - bl GetCurrentDungeonBounds - ldr r1, [sp, 0x20] - cmp r1, 0 - beq _080A84AC - ldr r2, _080A84A0 - adds r1, r5, r2 - movs r0, 0xFF - strb r0, [r1] - movs r3, 0xAF - lsls r3, 1 - adds r1, r5, r3 - movs r3, 0 - movs r0, 0xC0 - lsls r0, 2 - strh r0, [r1] - movs r4, 0xB0 - lsls r4, 1 - adds r1, r5, r4 - movs r2, 0x1 - movs r0, 0x1 - strh r0, [r1] - movs r1, 0xB2 - lsls r1, 1 - adds r0, r5, r1 - str r3, [r0] - adds r4, 0x8 - adds r1, r5, r4 - ldr r0, _080A84A4 - strh r0, [r1] - movs r1, 0xAE - lsls r1, 1 - adds r0, r5, r1 - strb r2, [r0] - movs r2, 0xB5 - lsls r2, 1 - adds r0, r5, r2 - strh r3, [r0] - movs r3, 0xB8 - lsls r3, 1 - adds r0, r5, r3 - movs r4, 0x2 - ldrsh r1, [r5, r4] - movs r3, 0x8 - ldrsh r2, [r5, r3] - movs r4, 0x8E - lsls r4, 1 - adds r3, r5, r4 - ldr r3, [r3] - bl sub_80A7428 - adds r4, r5, 0 - adds r4, 0x38 - ldr r1, _080A84A8 - ldr r0, [sp, 0x18] - str r0, [sp] - b _080A855C - .align 2, 0 -_080A849C: .4byte 0x0000ffff -_080A84A0: .4byte 0x0000015d -_080A84A4: .4byte 0x00000807 -_080A84A8: .4byte gGroundLivesCallbacks -_080A84AC: - adds r4, r5, 0 - adds r4, 0x38 - ldr r0, _080A84F0 - ldr r1, [r0] - movs r2, 0xCB - lsls r2, 2 - adds r1, r2 - adds r0, r4, 0 - bl sub_809D684 - lsls r0, 24 - cmp r0, 0 - beq _080A8550 - adds r0, r5, 0 - adds r0, 0xBE - movs r3, 0 - ldrsh r0, [r0, r3] - cmp r0, 0 - beq _080A84F4 - adds r0, r5, 0 - adds r0, 0xE0 - ldrh r0, [r0] - mov r10, r0 - adds r0, r5, 0 - adds r0, 0xE2 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - mov r9, r0 - adds r7, r5, 0 - adds r7, 0x80 - movs r0, 0x82 - adds r0, r5 - b _080A8508 - .align 2, 0 -_080A84F0: .4byte gGroundLivesMeta -_080A84F4: - adds r1, r5, 0 - adds r1, 0x80 - ldrh r2, [r1] - mov r10, r2 - adds r0, r5, 0 - adds r0, 0x82 - movs r3, 0 - ldrsb r3, [r0, r3] - mov r9, r3 - adds r7, r1, 0 -_080A8508: - mov r8, r0 - adds r0, r4, 0 - bl InitAction2 - ldr r1, _080A8544 - ldr r0, [sp, 0x18] - str r0, [sp] - adds r0, r4, 0 - adds r2, r5, 0 - ldr r3, [sp, 0x14] - bl InitActionWithParams - ldr r0, _080A8548 - ldr r2, [r0] - movs r1, 0xCB - lsls r1, 2 - adds r2, r1 - ldr r3, _080A854C - adds r0, r4, 0 - movs r1, 0 - bl GroundScript_ExecutePP - mov r2, r10 - strh r2, [r7] - mov r0, r9 - mov r3, r8 - strb r0, [r3] - movs r1, 0x1 - mov r8, r1 - b _080A8566 - .align 2, 0 -_080A8544: .4byte gGroundLivesCallbacks -_080A8548: .4byte gGroundLivesMeta -_080A854C: .4byte gUnknown_8118170 -_080A8550: - adds r0, r4, 0 - bl InitAction2 - ldr r1, _080A861C - ldr r2, [sp, 0x18] - str r2, [sp] -_080A855C: - adds r0, r4, 0 - adds r2, r5, 0 - ldr r3, [sp, 0x14] - bl InitActionWithParams -_080A8566: - ldr r3, [sp, 0x10] - ldr r2, [r3, 0xC] - cmp r2, 0 - bne _080A8574 - ldr r0, _080A8620 - adds r0, 0xEC - ldr r2, [r0] -_080A8574: - adds r0, r4, 0 - movs r1, 0x1 - bl SetPredefinedScript - ldr r0, [sp, 0x10] - ldr r2, [r0, 0x10] - cmp r2, 0 - bne _080A8588 - ldr r0, _080A8620 - ldr r2, [r0, 0x38] -_080A8588: - adds r0, r4, 0 - movs r1, 0x2 - bl SetPredefinedScript - ldr r1, [sp, 0x10] - ldr r2, [r1, 0x14] - cmp r2, 0 - bne _080A859C - ldr r0, _080A8620 - ldr r2, [r0, 0x50] -_080A859C: - adds r0, r4, 0 - movs r1, 0x3 - bl SetPredefinedScript - ldr r3, [sp, 0x10] - ldr r2, [r3, 0x8] - cmp r2, 0 - beq _080A8630 - adds r0, r4, 0 - movs r1, 0 - bl SetPredefinedScript - ldr r0, [sp, 0x20] - cmp r0, 0 - bne _080A860C - mov r1, r8 - cmp r1, 0 - bne _080A860C - movs r2, 0x8E - lsls r2, 1 - adds r0, r5, r2 - ldr r0, [r0] - movs r1, 0xC0 - lsls r1, 5 - ands r0, r1 - cmp r0, 0 - bne _080A860C - ldr r0, _080A8624 - ldr r2, [r0] - movs r3, 0xCB - lsls r3, 2 - adds r2, r3 - ldr r3, _080A8628 - adds r0, r4, 0 - movs r1, 0 - bl GroundScript_ExecutePP - movs r1, 0xB0 - lsls r1, 1 - adds r0, r5, r1 - movs r2, 0xAF - lsls r2, 1 - adds r1, r5, r2 - ldrh r0, [r0] - ldrh r1, [r1] - orrs r0, r1 - adds r1, r5, 0 - adds r1, 0x80 - strh r0, [r1] - movs r3, 0xA1 - lsls r3, 1 - adds r0, r5, r3 - ldrb r1, [r0] - adds r0, r5, 0 - adds r0, 0x82 - strb r1, [r0] -_080A860C: - ldr r3, _080A862C - adds r0, r4, 0 - movs r1, 0 - movs r2, 0 - bl ExecutePredefinedScript - b _080A865A - .align 2, 0 -_080A861C: .4byte gGroundLivesCallbacks -_080A8620: .4byte gFunctionScriptTable -_080A8624: .4byte gGroundLivesMeta -_080A8628: .4byte gUnknown_811817C -_080A862C: .4byte gUnknown_8118188 -_080A8630: - mov r4, r8 - cmp r4, 0 - beq _080A865A - movs r0, 0xAE - lsls r0, 1 - adds r1, r5, r0 - movs r0, 0x1 - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0x82 - ldrb r0, [r0] - movs r2, 0xA1 - lsls r2, 1 - adds r1, r5, r2 - strb r0, [r1] - adds r0, r5, 0 - adds r0, 0x80 - ldrh r1, [r0] - adds r0, r5, 0 - bl sub_80A9750 -_080A865A: - ldr r3, [sp, 0x1C] - movs r4, 0 - ldrsh r0, [r3, r4] - cmp r0, 0x1 - bne _080A8672 - ldr r0, [sp, 0x20] - cmp r0, 0 - beq _080A8672 - movs r0, 0x1 - adds r1, r6, 0 - bl sub_809D170 -_080A8672: - adds r0, r6, 0 -_080A8674: - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end GroundLives_Add - thumb_func_start GroundLives_Delete GroundLives_Delete: push {r4,lr} diff --git a/include/ground_event.h b/include/ground_event.h index 84b2347be..789713b57 100644 --- a/include/ground_event.h +++ b/include/ground_event.h @@ -3,6 +3,24 @@ #include "structs/str_position.h" +static inline void SetUnkInGroundEvent(const CompactPos *posPtr, PixelPos *dst) +{ + if (!(posPtr->xFlags & 4)) { + s32 x = posPtr->xTiles << 11; + dst->x = x; + if (posPtr->xFlags & 2) { + dst->x += 0x400; + } + } + if (!(posPtr->yFlags & 4)) { + s32 y = posPtr->yTiles << 11; + dst->y = y; + if (posPtr->yFlags & 2) { + dst->y += 0x400; + } + } +} + s16 FindGroundEvent(u32 flags, PixelPos *arg1, PixelPos *arg2); #endif // GUARD_GROUND_EVENT_H diff --git a/include/ground_lives.h b/include/ground_lives.h index 58ca3ca03..12d347ccc 100644 --- a/include/ground_lives.h +++ b/include/ground_lives.h @@ -4,7 +4,7 @@ #include "structs/str_position.h" // ground_lives.s -s16 sub_80A7AE8(s16); +s32 sub_80A7AE8(s16); s16 sub_80A8FD8(s32, PixelPos*); #endif // GUARD_GROUND_LIVES_H diff --git a/include/ground_script.h b/include/ground_script.h index 236221edf..c22db77fd 100644 --- a/include/ground_script.h +++ b/include/ground_script.h @@ -207,11 +207,12 @@ void InitScriptData(ScriptData *a0); u8 GroundScriptCheckLockCondition(Action *param_1, s16 param_2); void InitAction2(Action *action); void GetFunctionScript(Action *param_1, ScriptInfoSmall *script, s16 index); +bool8 sub_809D684(Action *action, ScriptInfoSmall *scriptInfo); bool8 GroundScriptLockCond(Action *param_1, s16 index, s32 param_3); bool8 ActionResetScriptData(Action *param_1, const DebugLocation *unused); bool8 GroundScript_ExecutePP(Action *, s32 *, ScriptInfoSmall *, const DebugLocation *unused); const ScriptCommand *FindLabel(Action *action, s32 r1); const ScriptCommand *ResolveJump(Action *action, s32 r1); -void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s16 group, s8 sector); +void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s32 group, s32 sector); #endif // GUARD_GROUND_SCRIPT_H diff --git a/src/code_801D014.c b/src/code_801D014.c index f752fca99..0e5658bfd 100644 --- a/src/code_801D014.c +++ b/src/code_801D014.c @@ -153,7 +153,7 @@ u32 sub_801D178(void) if (sUnknown_203B250->unkC != GetPlayerPokemonStruct()) goto _ret4; - if (sub_80A7AE8(7) < 0) + if ((s16) sub_80A7AE8(7) < 0) return 0; pokeStruct = sub_808D3F8(); diff --git a/src/code_809A560.c b/src/code_809A560.c index 5c95cbd48..aaa12f8c9 100644 --- a/src/code_809A560.c +++ b/src/code_809A560.c @@ -408,7 +408,7 @@ bool8 sub_809A8B8(s32 param_1, s32 param_2) } if (local_28 != -1) { - s32 sVar3 = sub_80A7AE8(local_28); + s32 sVar3 = (s16) sub_80A7AE8(local_28); if (sVar3 >= 0) { unkPtr->unk0 = local_28; unkPtr->speciesID = sub_80A8BFC(sVar3); diff --git a/src/ground_event.c b/src/ground_event.c index 400aa05fe..9ad0a9489 100644 --- a/src/ground_event.c +++ b/src/ground_event.c @@ -12,10 +12,8 @@ typedef struct GroundEvent s16 unk4; // scriptID or group? s8 unk6; // sector s32 unk8; - s32 unkC; - s32 unk10; - s32 unk14; - s32 unk18; + PixelPos unkC; + PixelPos unk14; const ScriptCommand *unk1C; } GroundEvent; @@ -121,30 +119,6 @@ void GroundEvent_Cancel(s32 scriptID, s32 sector) } } -static inline void SetUnkInGroundEvent(const CompactPos *posPtr, s32 *dst) -{ - if (!(posPtr->xFlags & 4)) { - s32 unk = posPtr->xTiles << 11; - dst[0] = unk; - if (posPtr->xFlags & 2) { - dst[0] = unk + 0x400; - } - } - if (!(posPtr->yFlags & 4)) { - s32 unk = posPtr->yTiles << 11; - dst[1] = unk; - if (posPtr->yFlags & 2) { - dst[1] = unk + 0x400; - } - } -} - -struct TestStruct -{ - s32 unk0; - s32 unk4; -}; - s32 GroundEvent_Add(s32 id, const GroundEventData *eventData, s32 group, s32 sector) { s32 i; @@ -153,8 +127,8 @@ s32 GroundEvent_Add(s32 id, const GroundEventData *eventData, s32 group, s32 sec s32 sector_s32 = (s8) sector; const ScriptRef *script; GroundEvent *ptr; - struct TestStruct r; - s32 sp[2]; + PixelPos pos; + PixelPos resultPos; ASM_MATCH_TRICK(sector_s32); @@ -193,13 +167,13 @@ s32 GroundEvent_Add(s32 id, const GroundEventData *eventData, s32 group, s32 sec break; } - r = (struct TestStruct) {eventData->kind << 11, eventData->unk1 << 11}; - SetUnkInGroundEvent(&eventData->pos, sp); + pos = (PixelPos) {eventData->kind << 11, eventData->unk1 << 11}; + SetUnkInGroundEvent(&eventData->pos, &resultPos); - ptr->unkC = sp[0]; - ptr->unk14 = sp[0] + r.unk0; - ptr->unk10 = sp[1]; - ptr->unk18 = sp[1] + r.unk4; + ptr->unkC.x = resultPos.x; + ptr->unk14.x = resultPos.x + pos.x; + ptr->unkC.y = resultPos.y; + ptr->unk14.y = resultPos.y + pos.y; ptr->unk1C = eventData->script->script; GroundLives_CancelBlank_2(); @@ -238,10 +212,10 @@ s16 FindGroundEvent(u32 flags, PixelPos *arg1, PixelPos *arg2) for (i = 0; i < 0x20; i = (s16)(i + 1), ptr++) { if (ptr->unk2 != -1 && (ptr->unk8 & flags) - && ptr->unkC < arg2->x - && ptr->unk14 > arg1->x - && ptr->unk10 < arg2->y - && ptr->unk18 > arg1->y) + && ptr->unkC.x < arg2->x + && ptr->unk14.x > arg1->x + && ptr->unkC.y < arg2->y + && ptr->unk14.y > arg1->y) { return i; } @@ -257,8 +231,8 @@ UNUSED static s16 UnusedFindGroundEvent(u32 flags, PixelPos *arg1, PixelPos *arg for (i = 0; i < 0x20; i = (s16)(i + 1), ptr++) { if (ptr->unk2 != -1 && (ptr->unk8 & flags)) { PixelPos resultPos = {0}; - resultPos.x = (ptr->unkC + ptr->unk14) / 2; - resultPos.y = (ptr->unk10 + ptr->unk18) / 2; + resultPos.x = (ptr->unkC.x + ptr->unk14.x) / 2; + resultPos.y = (ptr->unkC.y + ptr->unk14.y) / 2; if (resultPos.x < arg2->x && resultPos.x > arg1->x && resultPos.y < arg2->y diff --git a/src/ground_lives.c b/src/ground_lives.c index 84566608a..f1b88f193 100644 --- a/src/ground_lives.c +++ b/src/ground_lives.c @@ -8,13 +8,18 @@ #include "event_flag.h" #include "pokemon.h" #include "friend_area.h" +#include "random.h" +#include "code_8099328.h" +#include "code_80958E8.h" +#include "debug.h" +#include "other_random.h" struct GroundLivesMeta_Sub1 { // size: 0xC u32 unk0; u32 unk4; - u32 unk8; + s32 unk8; }; struct unkStruct_3001B80 @@ -28,6 +33,18 @@ struct unkStruct_3001B80 }; IWRAM_INIT struct unkStruct_3001B80 *gGroundLivesMeta = NULL; +// TODO: Merge with code 809C5C4 +struct Tempsub_809CD68Struct +{ + s32 unk0; + s32 unk4; + s32 unk8; + u8 unkC; + s32 unk10; + s32 unk14; + u8 unk18; +}; + struct unkStruct_3001B84_sub { // size: 0x1F0 @@ -35,17 +52,32 @@ struct unkStruct_3001B84_sub s16 unk2; s16 unk4; s8 unk6; - u8 fill8[0x14 - 0x8]; + s16 unk8; + s32 unkC; + s32 unk10; PixelPos unk14; - u8 fill1C[0x11C-0x1C]; + s8 unk1C; + PixelPos unk20; + PixelPos unk28; + PixelPos unk30; + Action unk38; u32 unk11C; - u8 fill120[0x13C - 0x120]; + struct Tempsub_809CD68Struct unk120; s16 unk13C; s16 unk13E; - u8 fill140[4]; + s16 unk140; + s8 unk142; PixelPos unk144; PixelPos unk14C; - u8 fill14C[0x170-0x154]; + PixelPos unk154; + u8 unk15C; + s8 unk15D; + u16 unk15E; + u16 unk160; + s32 unk164; + u16 unk168; + u16 unk16A; + u8 fill16C[1]; struct UnkGroundSpriteStruct unk170; }; @@ -60,7 +92,7 @@ IWRAM_INIT struct unkStruct_3001B84 *gGroundLives = NULL; extern void DeleteGroundLives(void); void GroundLives_Delete(s32); -s16 GroundLives_Add(s32 id, const GroundLivesData*, s32 group, s32 sector); +s32 GroundLives_Add(s32 id_, const GroundLivesData *ptr, s32 group_, s32 sector_); const struct GroundScriptHeader *GetGroundScript(s16 a0, DebugLocation *); extern DebugLocation gUnknown_811808C; extern u8 gUnknown_8118098[]; @@ -223,7 +255,7 @@ void GroundLives_CancelBlank_2(void) s32 sub_80A7B94(s16 *a0); -s16 sub_80A7AE8(s16 a0) +s32 sub_80A7AE8(s16 a0) { s32 i; struct unkStruct_3001B84_sub *ptr; @@ -259,8 +291,10 @@ UNUSED static s16 sub_80A7B40(s32 a0_) struct GroundLiveTypeData { s16 unk0; - u8 fill2[4]; + s16 unk2; const char *unk4; + u8 unk8; + u8 unk9; }; extern const struct GroundLiveTypeData gGroundLivesTypeData_811E63C[]; @@ -428,4 +462,395 @@ s32 sub_80A7B94(s16 *a0) return ret; } +extern const s16 gUnknown_81180F0[]; +extern const s16 gUnknown_81180FC[]; + +s32 sub_80A7DDC(s16 *a0, s16 *speciesDst) +{ + const struct GroundLiveTypeData *dataPtr; + s32 ret = (s16) sub_80A7B94(a0); + + *speciesDst = MONSTER_NONE; + if (*a0 == -1) { + return -1; + } + + dataPtr = &gGroundLivesTypeData_811E63C[*a0]; + if (dataPtr->unk0 == 3) { + if (*a0 >= 10 && *a0 < 14) { + s32 val; + s32 sp[4]; + s32 id = *a0 - 10; + + if (sub_8098F88()) { + *speciesDst = gUnknown_81180F0[id]; + if (*speciesDst == 0) { + *a0 = -1; + } + return -1; + } + + if (sub_80023E4(9)) { + val = sub_808D6A4(sp); + } + else { + val = sub_808D654(sp); + } + + if (id < val) { + PokemonStruct1 *monStrPtr = &gRecruitedPokemonRef->pokemon[sp[id]]; + *speciesDst = monStrPtr->speciesNum; + return -1; + } + } + else if (*a0 >= 14 && *a0 <= 29) { + FriendAreaCapacity fAreaCapacity; + u8 map = sub_8002658(GetScriptVarValue(NULL, GROUND_MAP)); + + if (map != 0) { + s32 id = *a0 - 14; + GetFriendAreaCapacity2(map, &fAreaCapacity, FALSE, FALSE); + if (id < fAreaCapacity.maxPokemon) { + PokemonStruct1 *monStrPtr = &gRecruitedPokemonRef->pokemon[fAreaCapacity.unk8 + id]; + if (sub_80023E4(9)) { + if (PokemonFlag1(monStrPtr) && !monStrPtr->isTeamLeader) { + *speciesDst = monStrPtr->speciesNum; + return -1; + } + } + else { + if (PokemonFlag1(monStrPtr) && !monStrPtr->isTeamLeader && !IsMonPartner(monStrPtr)) { + *speciesDst = monStrPtr->speciesNum; + return -1; + } + } + } + } + } + + *a0 = -1; + return -1; + } + else { + switch (*a0) { + case 1: + case 6: + case 33: + *speciesDst = sub_808D3BC()->speciesNum; + break; + case 2: + case 7: + case 34: + *speciesDst = sub_808D3F8()->speciesNum; + break; + case 3: + case 8: + case 35: + *speciesDst = GetPlayerPokemonStruct()->speciesNum; + break; + case 36: + *speciesDst = gUnknown_81180FC[RandInt(15)]; + return -1; + case 32: { + s32 friendSpecies = (s16) GetScriptVarValue(NULL, NEW_FRIEND_KIND); + if (friendSpecies != MONSTER_NONE) { + *speciesDst = friendSpecies; + } + else { + *a0 = -1; + } + return -1; + } + case 30: + case 31: { + u8 dungId; + u32 outMain, outSub; + struct unkStruct_8096AF8 unkStruct; + + *speciesDst = MONSTER_PORYGON; + if (sub_8099328(&dungId)) { + GetScriptVarScenario(SCENARIO_SELECT, &outMain, &outSub); + sub_8096AF8(&unkStruct, outSub, dungId); + if (unkStruct.unk0) { + if (*a0 == 30) { + *speciesDst = unkStruct.clientSpecies; + } + else { + *speciesDst = unkStruct.targetSpecies; + } + } + + if (*speciesDst == 0) { + *a0 = -1; + } + } + return -1; + } + default: + if (*speciesDst == 0) { + *speciesDst = dataPtr->unk2; + } + break; + } + } + + return ret; +} + +extern const char gUnknown_811811C[]; + +extern void sub_809CD68(struct Tempsub_809CD68Struct *dst); + +extern bool8 GetCurrentDungeonBounds(PixelPos *a0, PixelPos *a1); +extern void sub_80A7428(struct UnkGroundSpriteStruct *ptr, s32 a1_, s32 monsterId_, s32 a3); +extern void SetPredefinedScript(Action *param_1, s16 index, const ScriptCommand *param_3); +extern bool8 ExecutePredefinedScript(Action *param_1, s32 *param_2, s16 index, const DebugLocation *debug); +extern void sub_809D170(s32 r0, s32 r1); + +extern const CallbackData gGroundLivesCallbacks[]; +extern const DebugLocation gUnknown_8118170; +extern const DebugLocation gUnknown_811817C; +extern const DebugLocation gUnknown_8118188; + +void sub_80A9750(struct unkStruct_3001B84_sub *ptr, u16 a1); + +s32 GroundLives_Add(s32 id_, const GroundLivesData *ptr, s32 group_, s32 sector_) +{ + s32 id = (s16) id_; + s32 group = (s16) group_; + s32 sector = (s8) sector_; + struct unkStruct_3001B84_sub *livesPtr; + const struct GroundLiveTypeData *typeDataPtr; + const ScriptCommand *scrCommand; + s16 sp12, species; + bool8 var24; + bool8 r8; + s32 r7; + + sp12 = ptr->kind; + r8 = FALSE; + r7 = (s16) sub_80A7DDC(&sp12, &species); + + if (sp12 == -1) + return -1; + + switch (r7) { + case 0: + id = 0; + break; + case 1: + id = 1; + break; + case 2: + if (GetScriptVarValue(NULL, PARTNER1_KIND) == 0) { + r7 = 1; + } + id = 2; + break; + } + + typeDataPtr = &gGroundLivesTypeData_811E63C[sp12]; + if (id < 0) { + switch (sp12) { + case 0x21: + if (gGroundLives->array[0].unk2 == 1) + return -1; + id = sub_80A7AE8(sp12); + break; + case 0x23: + if (gGroundLives->array[0].unk2 == 3) + return -1; + id = sub_80A7AE8(sp12); + break; + default: + id = sub_80A7AE8(sp12); + break; + } + + if (id < 0) { + s32 i = 3; + livesPtr = &gGroundLives->array[3]; + + for (; i < UNK_3001B84_ARR_COUNT; i = (s16)(i + 1), livesPtr++) { + if (livesPtr->unk2 == -1) { + id = i; + break; + } + } + } + + if (id < 0) { + return -1; + } + } + + livesPtr = &gGroundLives->array[id]; + Log(0, gUnknown_811811C, id, sp12, typeDataPtr->unk0, group, sector); + var24 = (livesPtr->unk2 == -1); + livesPtr->unk0 = id; + livesPtr->unk2 = sp12; + livesPtr->unk4 = group; + livesPtr->unk6 = sector; + livesPtr->unk8 = species; + sub_809CD68(&livesPtr->unk120); + livesPtr->unk120.unk0 = 9; + + switch (typeDataPtr->unk0) { + case 1: + livesPtr->unk11C = 0x2300181D; + livesPtr->unk120.unk0 = 1; + break; + case 2: + livesPtr->unk11C = 0x23001000; + break; + case 3: + livesPtr->unk11C = 0x2300068D; + break; + case 6: + livesPtr->unk11C = 0x2000000D; + break; + case 7: + livesPtr->unk11C = 0x20000; + break; + case 8: + livesPtr->unk11C = 0; + break; + case 9: + livesPtr->unk11C = 0xC0000; + break; + case 10: + livesPtr->unk11C = 0x20010000; + break; + default: + livesPtr->unk11C = 0x2300068D; + break; + } + + livesPtr->unkC = typeDataPtr->unk8 << 11; + livesPtr->unk10 = typeDataPtr->unk9 << 11; + livesPtr->unk14.x = livesPtr->unkC / 2; + livesPtr->unk14.y = livesPtr->unk10 / 2; + livesPtr->unk1C = ptr->unk1; + SetUnkInGroundEvent(&ptr->pos, &livesPtr->unk20); + if (var24) { + struct GroundLivesMeta_Sub1 *metaPtr; + + livesPtr->unk142 = livesPtr->unk1C; + livesPtr->unk144.x = livesPtr->unk20.x - livesPtr->unk14.x; + livesPtr->unk14C.x = livesPtr->unk20.x + livesPtr->unk14.x; + livesPtr->unk144.y = livesPtr->unk20.y - livesPtr->unk14.y; + livesPtr->unk14C.y = livesPtr->unk20.y + livesPtr->unk14.y; + livesPtr->unk154.x = livesPtr->unk154.y = 0; + livesPtr->unk13C = r7; + metaPtr = &gGroundLivesMeta->unk0[r7]; + metaPtr->unk8 = -1; + metaPtr->unk0 = 0; + metaPtr->unk4 = 0; + if (livesPtr->unk2 >= 14 && livesPtr->unk2 <= 29) { + livesPtr->unk140 = OtherRandInt(0x12); + } + else { + livesPtr->unk140 = 0; + } + } + + if (livesPtr->unk11C & 0x800) { + livesPtr->unk13E = FindGroundEvent(0x20, &livesPtr->unk144, &livesPtr->unk14C); + } + else { + livesPtr->unk13E = -1; + } + + GetCurrentDungeonBounds(&livesPtr->unk28, &livesPtr->unk30); + if (var24) { + livesPtr->unk15D = -1; + livesPtr->unk15E = 0x300; + livesPtr->unk160 = 1; + livesPtr->unk164 = 0; + livesPtr->unk168 = 0x807; + livesPtr->unk15C = 1; + livesPtr->unk16A = 0; + sub_80A7428(&livesPtr->unk170, livesPtr->unk2, livesPtr->unk8, livesPtr->unk11C); + } + + if (!var24) { + if (sub_809D684(&livesPtr->unk38, &gGroundLivesMeta->unk32C)) { + s32 r10; + s32 r9; + // Note: these ptr variables are unfortunately a fakematch, but I was not able to match the function without them... + u16 *ptr1; + s8 *ptr2; + + if (livesPtr->unk38.scriptData2.savedState != 0) { + r10 = livesPtr->unk38.scriptData2.unk24; + r9 = livesPtr->unk38.scriptData2.unk26; + + ptr1 = &livesPtr->unk38.scriptData.unk24; + ptr2 = &livesPtr->unk38.scriptData.unk26; + } + else { + r10 = livesPtr->unk38.scriptData.unk24; + r9 = livesPtr->unk38.scriptData.unk26; + + ptr1 = &livesPtr->unk38.scriptData.unk24; + ptr2 = &livesPtr->unk38.scriptData.unk26; + } + + InitAction2(&livesPtr->unk38); + InitActionWithParams(&livesPtr->unk38, gGroundLivesCallbacks, livesPtr, group, sector); + GroundScript_ExecutePP(&livesPtr->unk38, NULL, &gGroundLivesMeta->unk32C, &gUnknown_8118170); + ptr2++;ptr2--; + *ptr1 = r10; + *ptr2 = r9; + r8 = TRUE; + } + else { + InitAction2(&livesPtr->unk38); + InitActionWithParams(&livesPtr->unk38, gGroundLivesCallbacks, livesPtr, group, sector); + } + } + else { + InitActionWithParams(&livesPtr->unk38, gGroundLivesCallbacks, livesPtr, group, sector); + } + + scrCommand = ptr->scripts[1]; + if (scrCommand == NULL) { + scrCommand = gFunctionScriptTable[19].script; + } + SetPredefinedScript(&livesPtr->unk38, 1, scrCommand); + + scrCommand = ptr->scripts[2]; + if (scrCommand == NULL) { + scrCommand = gFunctionScriptTable[4].script; + } + SetPredefinedScript(&livesPtr->unk38, 2, scrCommand); + + scrCommand = ptr->scripts[3]; + if (scrCommand == NULL) { + scrCommand = gFunctionScriptTable[6].script; + } + SetPredefinedScript(&livesPtr->unk38, 3, scrCommand); + + if (ptr->scripts[0] != NULL) { + SetPredefinedScript(&livesPtr->unk38, 0, ptr->scripts[0]); + if (!var24 && !r8 && !(livesPtr->unk11C & 0x1800)) { + GroundScript_ExecutePP(&livesPtr->unk38, NULL, &gGroundLivesMeta->unk32C, &gUnknown_811817C); + livesPtr->unk38.scriptData.unk24 = livesPtr->unk160 | livesPtr->unk15E; + livesPtr->unk38.scriptData.unk26 = livesPtr->unk142; + } + ExecutePredefinedScript(&livesPtr->unk38, NULL, 0, &gUnknown_8118188); + } + else if (r8) { + livesPtr->unk15C = 1; + livesPtr->unk142 = livesPtr->unk38.scriptData.unk26; + sub_80A9750(livesPtr, livesPtr->unk38.scriptData.unk24); + } + + if (typeDataPtr->unk0 == 1 && var24) { + sub_809D170(1, id); + } + + return id; +} + // diff --git a/src/ground_map.c b/src/ground_map.c index 38a123e2f..74fb23546 100644 --- a/src/ground_map.c +++ b/src/ground_map.c @@ -31,7 +31,6 @@ extern bool8 GroundScriptNotify(void *, s32); extern const CallbackData gGroundScriptNullCallbacks; extern const DebugLocation gUnknown_8117538[]; -extern void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s16 group, s8 sector); extern void sub_80A2D00(unkStruct_3001B70 *); extern void sub_80A2D68(unkStruct_3001B70 *); extern void sub_80A2D88(unkStruct_3001B70 *); diff --git a/src/ground_script.c b/src/ground_script.c index d60abbf4f..efb01e827 100644 --- a/src/ground_script.c +++ b/src/ground_script.c @@ -315,13 +315,10 @@ void InitAction(Action *a0) InitScriptData(&a0->scriptData2); } -void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s16 group, s8 sector) +void InitActionWithParams(Action *action, const CallbackData *callbacks, void *parent, s32 group, s32 sector) { - s32 group_s32; - s32 sector_s32; - - group_s32 = group; - sector_s32 = sector; + s32 group_s32 = (s16) group; + s32 sector_s32 = (s8) sector; InitAction(action); @@ -360,28 +357,28 @@ bool8 sub_809D678(Action *action) return action->scriptData.savedState == 0 ? FALSE : TRUE; } -bool8 sub_809D684(Action *action, ScriptCommand **scriptPtr) +bool8 sub_809D684(Action *action, ScriptInfoSmall *scriptInfo) { if(action->scriptData.savedState != 0) { if(action->scriptData.savedScript.ptr != 0) { - if(action->scriptData.savedScript.ptr2 == *scriptPtr) return 1; + if(action->scriptData.savedScript.ptr2 == scriptInfo->ptr) return 1; } else { - if(action->scriptData.script.ptr2 == *scriptPtr) return 1; + if(action->scriptData.script.ptr2 == scriptInfo->ptr) return 1; } } if(action->scriptData2.savedState != 0) { if(action->scriptData2.savedScript.ptr != 0) { - if(action->scriptData2.savedScript.ptr2 == *scriptPtr) return 1; + if(action->scriptData2.savedScript.ptr2 == scriptInfo->ptr) return 1; } else { - if(action->scriptData2.script.ptr2 == *scriptPtr) return 1; + if(action->scriptData2.script.ptr2 == scriptInfo->ptr) return 1; } } return 0; @@ -3237,7 +3234,7 @@ s32 sub_80A14E8(Action *action, u8 idx, u32 r2, s32 r3) s32 r4; PixelPos sp_318; PixelPos sp_320; - s32 r5 = sub_80A7AE8(r2); + s32 r5 = (s16) sub_80A7AE8(r2); if(r5 >= 0) { r4 = (r3 << 8); action->callbacks->getHitboxCenter(action->parentObject, &sp_318);