diff --git a/asm/code_8085B80.s b/asm/code_8085B80.s index f9f27fd90..e49e82d5f 100644 --- a/asm/code_8085B80.s +++ b/asm/code_8085B80.s @@ -5,116 +5,6 @@ .text -@ https://decomp.me/scratch/lb4jF (kermalis 87.53%) `bool8 sub_8085B80(struct_8085B80 *)` - thumb_func_start sub_8085B80 -sub_8085B80: - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r1, r0, 0 - movs r0, 0 - mov r8, r0 - movs r7, 0 - ldr r0, _08085BE4 - ldr r0, [r0] - cmp r8, r0 - bge _08085C3E - adds r5, r1, 0 -_08085B98: - ldr r6, [r5, 0x4] - ldr r2, [r6, 0x70] - adds r3, r2, 0 - ldr r4, [r5, 0xC] - ldrb r0, [r5] - cmp r0, 0 - beq _08085C32 - movs r1, 0x1 - mov r8, r1 - ldr r0, [r5, 0x8] - cmp r0, 0 - bne _08085C08 - adds r4, 0x8 - movs r1, 0x4 - ldrsh r0, [r4, r1] - cmp r0, 0 - bne _08085BE8 - strb r0, [r5] - ldrb r1, [r4] - movs r0, 0x7 - ands r0, r1 - adds r1, r2, 0 - adds r1, 0x46 - strb r0, [r1] - movs r3, 0 - ldrsh r2, [r4, r3] - adds r0, r6, 0 - movs r1, 0x7 - bl sub_806CDD4 - movs r0, 0xA - ldrsh r1, [r4, r0] - movs r3, 0xC - ldrsh r2, [r4, r3] - adds r0, r6, 0 - bl sub_80856C8 - b _08085C32 - .align 2, 0 -_08085BE4: .4byte gUnknown_202F3D8 -_08085BE8: - movs r1, 0x4 - ldrsh r0, [r4, r1] - str r0, [r5, 0x8] - str r4, [r5, 0xC] - ldrb r1, [r4] - movs r0, 0x7 - ands r0, r1 - adds r1, r3, 0 - adds r1, 0x46 - strb r0, [r1] - movs r3, 0 - ldrsh r2, [r4, r3] - adds r0, r6, 0 - movs r1, 0 - bl sub_806CDD4 -_08085C08: - ldr r0, [r5, 0x8] - subs r0, 0x1 - str r0, [r5, 0x8] - ldr r1, _08085C4C - movs r2, 0 - ldrsh r0, [r4, r2] - lsls r0, 2 - adds r0, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x2 - ldrsh r2, [r4, r3] - muls r1, r2 - lsls r1, 8 - movs r3, 0x2 - ldrsh r0, [r0, r3] - muls r2, r0 - lsls r2, 8 - adds r0, r6, 0 - bl IncreaseEntityPixelPos -_08085C32: - adds r5, 0x10 - adds r7, 0x1 - ldr r0, _08085C50 - ldr r0, [r0] - cmp r7, r0 - blt _08085B98 -_08085C3E: - mov r0, r8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08085C4C: .4byte gAdjacentTileOffsets -_08085C50: .4byte gUnknown_202F3D8 - thumb_func_end sub_8085B80 - thumb_func_start SetDungeonBGColorRGB SetDungeonBGColorRGB: push {r4-r7,lr} diff --git a/src/dungeon_util_1.c b/src/dungeon_util_1.c index fa1d66152..609b008ab 100644 --- a/src/dungeon_util_1.c +++ b/src/dungeon_util_1.c @@ -418,3 +418,39 @@ void sub_8085B4C(struct_8085B80 a0[], s16 *a1[], Entity *a2[], s32 a3) a0[i].unk8 = a1[i][2]; } } + +bool8 sub_8085B80(struct_8085B80 *a0) +{ + s16 *unkCPtr; + int i; + bool8 ret = FALSE; + + for (i = 0; i < gUnknown_202F3D8; i++) { + Entity *entity = a0[i].unk4; + EntityInfo *enInfo = GetEntInfo(entity); + unkCPtr = a0[i].unkC; + if (a0[i].unk0 != 0) { + ret = TRUE; + if (a0[i].unk8 == 0) { + unkCPtr = unkCPtr + 4; + if (unkCPtr[2] == 0) { + a0[i].unk0 = 0; + enInfo->action.direction = unkCPtr[0] & DIRECTION_MASK; + sub_806CDD4(entity, 7, unkCPtr[0]); + sub_80856C8(entity, unkCPtr[5], unkCPtr[6]); + continue; + } + a0[i].unk8 = unkCPtr[2]; + a0[i].unkC = unkCPtr; + enInfo->action.direction = *(u8 *)unkCPtr & DIRECTION_MASK; + sub_806CDD4(entity, 0, (int)*unkCPtr); + } + + a0[i].unk8--; + IncreaseEntityPixelPos(entity, + gAdjacentTileOffsets[*unkCPtr].x * unkCPtr[1] * 0x100, + gAdjacentTileOffsets[*unkCPtr].y * unkCPtr[1] * 0x100); + } + } + return ret; +}