diff --git a/asm/ground_lives.s b/asm/ground_lives.s index c72d971d1..02e98488e 100644 --- a/asm/ground_lives.s +++ b/asm/ground_lives.s @@ -7,335 +7,6 @@ - thumb_func_start GroundLivesNotifyAll -GroundLivesNotifyAll: - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 16 - asrs r7, r0, 16 - ldr r0, _080A8B70 - ldr r4, [r0] - movs r5, 0 - movs r0, 0x1 - negs r0, r0 - mov r8, r0 - movs r6, 0x80 - lsls r6, 9 -_080A8B36: - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, r8 - beq _080A8B4E - adds r0, r4, 0 - adds r0, 0x38 - adds r1, r7, 0 - bl GroundScriptNotify - orrs r5, r0 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080A8B4E: - adds r0, r6, 0 - movs r1, 0x80 - lsls r1, 9 - adds r6, r1 - asrs r0, 16 - movs r1, 0xF8 - lsls r1, 1 - adds r4, r1 - cmp r0, 0x17 - ble _080A8B36 - adds r0, r5, 0 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080A8B70: .4byte gGroundLives - thumb_func_end GroundLivesNotifyAll - - thumb_func_start GroundLivesCancelAll -GroundLivesCancelAll: - push {r4-r7,lr} - ldr r0, _080A8BB8 - ldr r4, [r0] - movs r5, 0 - movs r7, 0x1 - negs r7, r7 - movs r6, 0x80 - lsls r6, 9 -_080A8B84: - movs r1, 0x2 - ldrsh r0, [r4, r1] - cmp r0, r7 - beq _080A8B9A - adds r0, r4, 0 - adds r0, 0x38 - bl GroundScript_Cancel - orrs r5, r0 - lsls r0, r5, 24 - lsrs r5, r0, 24 -_080A8B9A: - adds r0, r6, 0 - movs r1, 0x80 - lsls r1, 9 - adds r6, r1 - asrs r0, 16 - movs r1, 0xF8 - lsls r1, 1 - adds r4, r1 - cmp r0, 0x17 - ble _080A8B84 - adds r0, r5, 0 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080A8BB8: .4byte gGroundLives - thumb_func_end GroundLivesCancelAll - - thumb_func_start sub_80A8BBC -sub_80A8BBC: - lsls r0, 16 - asrs r0, 16 - ldr r2, _080A8BD4 - lsls r1, r0, 5 - subs r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r0, r1 - movs r1, 0x2 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080A8BD4: .4byte gGroundLives - thumb_func_end sub_80A8BBC - - thumb_func_start sub_80A8BD8 -sub_80A8BD8: - lsls r0, 16 - asrs r0, 16 - ldr r3, _080A8BF8 - lsls r2, r0, 5 - subs r2, r0 - lsls r2, 4 - ldr r0, [r3] - adds r0, r2 - movs r3, 0x8E - lsls r3, 1 - adds r2, r0, r3 - ldr r2, [r2] - str r2, [r1] - movs r1, 0x2 - ldrsh r0, [r0, r1] - bx lr - .align 2, 0 -_080A8BF8: .4byte gGroundLives - thumb_func_end sub_80A8BD8 - - thumb_func_start sub_80A8BFC -sub_80A8BFC: - push {lr} - lsls r0, 16 - asrs r0, 16 - ldr r2, _080A8C20 - lsls r1, r0, 5 - subs r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r2, r0, r1 - movs r0, 0x2 - ldrsh r1, [r2, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - bne _080A8C24 - movs r0, 0 - b _080A8C28 - .align 2, 0 -_080A8C20: .4byte gGroundLives -_080A8C24: - movs r1, 0x8 - ldrsh r0, [r2, r1] -_080A8C28: - pop {r1} - bx r1 - thumb_func_end sub_80A8BFC - - thumb_func_start sub_80A8C2C -sub_80A8C2C: - push {r4,lr} - sub sp, 0x4 - mov r1, sp - strh r0, [r1] - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl sub_80A7DDC - movs r1, 0 - ldrsh r0, [r4, r1] - add sp, 0x4 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80A8C2C - - thumb_func_start sub_80A8C4C -sub_80A8C4C: - push {r4,r5,lr} - adds r5, r1, 0 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080A8C80 - lsls r1, r0, 5 - subs r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r4, r0, r1 - movs r0, 0x2 - ldrsh r1, [r4, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A8C90 - adds r0, r1, 0 - bl sub_80A8D54 - adds r1, r0, 0 - cmp r1, 0 - beq _080A8C84 - ldr r0, [r1, 0x4] - str r0, [r5] - b _080A8C8A - .align 2, 0 -_080A8C80: .4byte gGroundLives -_080A8C84: - movs r0, 0x63 - strb r0, [r5] - strb r1, [r5, 0x1] -_080A8C8A: - movs r1, 0x8 - ldrsh r0, [r4, r1] - b _080A8C92 -_080A8C90: - movs r0, 0 -_080A8C92: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_80A8C4C - - thumb_func_start sub_80A8C98 -sub_80A8C98: - push {r4,lr} - lsls r0, 16 - asrs r0, 16 - ldr r2, _080A8CD4 - lsls r1, r0, 5 - subs r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r3, r0, r1 - movs r0, 0x2 - ldrsh r1, [r3, r0] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _080A8CE8 - ldr r1, _080A8CD8 - ldrh r2, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - beq _080A8CE8 - movs r0, 0x8 - ldrsh r3, [r3, r0] -_080A8CC6: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, r3 - bne _080A8CDC - movs r0, 0x1 - b _080A8CEA - .align 2, 0 -_080A8CD4: .4byte gGroundLives -_080A8CD8: .4byte gUnknown_8117FCE -_080A8CDC: - adds r1, 0x2 - ldrh r2, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _080A8CC6 -_080A8CE8: - movs r0, 0 -_080A8CEA: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80A8C98 - - thumb_func_start sub_80A8CF0 -sub_80A8CF0: - push {r4,lr} - lsls r0, 16 - asrs r3, r0, 16 - ldr r1, _080A8CFC - b _080A8D0E - .align 2, 0 -_080A8CFC: .4byte gUnknown_8117FCE -_080A8D00: - lsls r0, r2, 16 - asrs r0, 16 - cmp r0, r3 - bne _080A8D0C - movs r0, 0x1 - b _080A8D1A -_080A8D0C: - adds r1, 0x2 -_080A8D0E: - ldrh r2, [r1] - movs r4, 0 - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _080A8D00 - movs r0, 0 -_080A8D1A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_80A8CF0 - - thumb_func_start sub_80A8D20 -sub_80A8D20: - push {lr} - movs r0, 0 - bl sub_80A7AE8 - lsls r0, 16 - asrs r0, 16 - ldr r2, _080A8D50 - lsls r1, r0, 5 - subs r1, r0 - lsls r1, 4 - ldr r0, [r2] - adds r0, r1 - movs r1, 0x90 - lsls r1, 1 - adds r0, r1 - bl sub_809CDB8 - movs r1, 0 - cmp r0, 0x1 - bne _080A8D4A - movs r1, 0x1 -_080A8D4A: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080A8D50: .4byte gGroundLives - thumb_func_end sub_80A8D20 - thumb_func_start sub_80A8D54 sub_80A8D54: push {r4,r5,lr} diff --git a/src/ground_lives.c b/src/ground_lives.c index 7549fee93..1eb5a490e 100644 --- a/src/ground_lives.c +++ b/src/ground_lives.c @@ -1035,6 +1035,10 @@ bool8 GroundLives_ExecutePlayerScriptActionLives(s32 id1_, s32 id2_) extern bool8 sub_80AC274(s32 a0, ScriptInfoSmall *scriptInfo, s32 a2); extern void GroundObject_ExecuteScript(s32, void *, ScriptInfoSmall *); extern bool8 sub_80ADC64(s32 id, ScriptInfoSmall *dst); +extern bool8 GroundScriptNotify(Action *param_1, s32 param_2); +extern bool8 GroundScript_Cancel(Action *r0); +extern PokemonStruct1 *sub_80A8D54(s32); +extern s32 sub_809CDB8(struct Struct3001B84_sub120 *dst); bool8 sub_80A8A5C(s32 id1_, s32 id2_) { @@ -1076,4 +1080,136 @@ bool8 sub_80A8ACC(s32 id1_, s32 id2_) return FALSE; } +bool8 GroundLivesNotifyAll(s32 a0_) +{ + s32 i; + s32 a0 = (s16) a0_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[0]; + bool8 ret = FALSE; + + for (i = 0; i < UNK_3001B84_ARR_COUNT; i = (s16)(i + 1), livesPtr++) { + if (livesPtr->unk2 != -1) { + ret |= GroundScriptNotify(&livesPtr->unk38, a0); + } + } + + return ret; +} + +bool8 GroundLivesCancelAll(void) +{ + s32 i; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[0]; + bool8 ret = FALSE; + + for (i = 0; i < UNK_3001B84_ARR_COUNT; i = (s16)(i + 1), livesPtr++) { + if (livesPtr->unk2 != -1) { + ret |= GroundScript_Cancel(&livesPtr->unk38); + } + } + + return ret; +} + +s32 sub_80A8BBC(s32 id_) +{ + s32 id = (s16) id_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + + return livesPtr->unk2; +} + +s32 sub_80A8BD8(s32 id_, u32 *a1) +{ + s32 id = (s16) id_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + + *a1 = livesPtr->unk11C; + return livesPtr->unk2; +} + +s32 sub_80A8BFC(s32 id_) +{ + s32 id = (s16) id_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + + if (livesPtr->unk2 != -1) { + return livesPtr->unk8; + } + + return 0; +} + +s32 sub_80A8C2C(s32 a0) +{ + s16 sp = a0; + s16 species; + + sub_80A7DDC(&sp, &species); + return species; +} + +s32 sub_80A8C4C(s32 id_, DungeonLocation *dungLoc) +{ + s32 id = (s16) id_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + + if (livesPtr->unk2 != -1) { + PokemonStruct1 *monStrPtr = sub_80A8D54(livesPtr->unk2); + if (monStrPtr != NULL) { + *dungLoc = monStrPtr->dungeonLocation; + } + else { + dungLoc->id = NUM_DUNGEONS + 1; + dungLoc->floor = 0; + } + + return livesPtr->unk8; + } + + return 0; +} + +extern const s16 gUnknown_8117FCE[]; + +bool8 sub_80A8C98(s32 id_) +{ + const s16 *arr; + s32 id = (s16) id_; + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + + if (livesPtr->unk2 != -1) { + for (arr = gUnknown_8117FCE; *arr != 0; arr++) { + if (*arr == livesPtr->unk8) { + return TRUE; + } + } + } + + return FALSE; +} + +bool8 sub_80A8CF0(s32 cmpVal_) +{ + const s16 *arr; + s32 cmpVal = (s16) cmpVal_; + + for (arr = gUnknown_8117FCE; *arr != 0; arr++) { + if (*arr == (s16) cmpVal) { + return TRUE; + } + } + + return FALSE; +} + +bool8 sub_80A8D20(void) +{ + s32 id = (s16) sub_80A7AE8(0); + struct unkStruct_3001B84_sub *livesPtr = &gGroundLives->array[id]; + s32 val = sub_809CDB8(&livesPtr->unk120); + + return (val == 1); +} + //