diff options
author | scnorton <scnorton@biociphers.org> | 2017-06-02 14:47:30 -0400 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2017-06-02 14:47:30 -0400 |
commit | 97a19baae9076dd2c74c6fc8e2231ef3ec6786fd (patch) | |
tree | b22e0345aa11043b7efd00a1c3bf9843197a4117 | |
parent | 928687bdf61fa44aec66e36adae2ae9f241d7b48 (diff) |
sub_80FF1EC
-rwxr-xr-x | asm/decoration.s | 220 | ||||
-rw-r--r-- | include/fieldmap.h | 1 | ||||
-rw-r--r-- | src/decoration.c | 44 |
3 files changed, 45 insertions, 220 deletions
diff --git a/asm/decoration.s b/asm/decoration.s index f1fb5019c..238017247 100755 --- a/asm/decoration.s +++ b/asm/decoration.s @@ -8,226 +8,6 @@ .equiv ewram_1f000, 0x0201f000 - thumb_func_start sub_80FF1EC -sub_80FF1EC: @ 80FF1EC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x34 - ldr r4, [sp, 0x54] - lsls r0, 16 - lsrs r0, 16 - str r0, [sp] - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x4] - lsls r2, 24 - lsrs r2, 24 - str r2, [sp, 0x8] - lsls r3, 24 - lsrs r3, 24 - str r3, [sp, 0xC] - lsls r4, 16 - lsrs r4, 16 - str r4, [sp, 0x10] - movs r2, 0 - lsls r0, r3, 16 - cmp r2, r3 - bcc _080FF222 - b _080FF384 -_080FF222: - ldr r1, [sp, 0x8] - str r1, [sp, 0x28] - str r0, [sp, 0x2C] -_080FF228: - ldr r3, [sp, 0x4] - ldr r4, [sp, 0xC] - subs r1, r3, r4 - lsls r0, r2, 16 - asrs r0, 16 - adds r0, 0x1 - adds r1, r0 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x14] - movs r0, 0 - mov r10, r0 - adds r1, r2, 0x1 - str r1, [sp, 0x30] - ldr r3, [sp, 0x28] - cmp r10, r3 - bcc _080FF24C - b _080FF374 -_080FF24C: - ldr r4, [sp, 0x10] - lsls r4, 5 - str r4, [sp, 0x18] - ldr r0, _080FF2B4 @ =gDecorations + 0x1C - adds r0, r4, r0 - str r0, [sp, 0x1C] - ldr r0, _080FF2B8 @ =gDecorations - adds r0, r4, r0 - str r0, [sp, 0x24] - ldr r3, [sp, 0x8] - adds r1, r2, 0 - muls r1, r3 - str r1, [sp, 0x20] -_080FF266: - ldr r0, [sp] - add r0, r10 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, [sp, 0x20] - add r1, r10 - ldr r4, [sp, 0x1C] - ldr r0, [r4] - lsls r1, 1 - adds r1, r0 - movs r2, 0x80 - lsls r2, 2 - adds r0, r2, 0 - ldrh r1, [r1] - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - bl GetBehaviorByMetatileId - lsls r4, r0, 16 - lsls r0, r4, 8 - lsrs r0, 24 - bl sub_8057288 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - beq _080FF2AC - ldr r3, [sp, 0x24] - ldrb r0, [r3, 0x11] - cmp r0, 0x1 - beq _080FF2BC - lsrs r0, r4, 28 - cmp r0, 0 - beq _080FF2BC -_080FF2AC: - movs r4, 0xC0 - lsls r4, 4 - mov r8, r4 - b _080FF2C0 - .align 2, 0 -_080FF2B4: .4byte gDecorations + 0x1C -_080FF2B8: .4byte gDecorations -_080FF2BC: - movs r0, 0 - mov r8, r0 -_080FF2C0: - ldr r1, [sp, 0x24] - ldrb r0, [r1, 0x11] - lsls r7, r5, 16 - ldr r2, [sp, 0x14] - lsls r2, 16 - mov r9, r2 - cmp r0, 0x3 - beq _080FF2EA - asrs r0, r7, 16 - asrs r1, r2, 16 - bl MapGridGetMetatileBehaviorAt - lsls r0, 24 - lsrs r0, 24 - bl sub_80572B0 - lsls r0, 24 - lsrs r0, 24 - movs r6, 0x1 - cmp r0, 0x1 - beq _080FF2EC -_080FF2EA: - movs r6, 0 -_080FF2EC: - ldr r3, [sp, 0x18] - ldr r4, _080FF334 @ =gDecorations - adds r0, r3, r4 - ldrb r0, [r0] - ldr r4, [sp, 0x20] - add r4, r10 - lsls r1, r4, 24 - lsrs r1, 24 - bl sub_80FF1B0 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r0, _080FF338 @ =0x0000ffff - cmp r5, r0 - beq _080FF33C - asrs r0, r7, 16 - mov r2, r9 - asrs r1, r2, 16 - ldr r3, [sp, 0x1C] - ldr r2, [r3] - lsls r3, r4, 1 - adds r3, r2 - movs r4, 0x80 - lsls r4, 2 - adds r2, r4, 0 - orrs r6, r2 - ldrh r3, [r3] - adds r2, r6, r3 - mov r3, r8 - orrs r3, r2 - orrs r3, r5 - lsls r2, r3, 16 - lsrs r2, 16 - bl MapGridSetMetatileEntryAt - b _080FF362 - .align 2, 0 -_080FF334: .4byte gDecorations -_080FF338: .4byte 0x0000ffff -_080FF33C: - asrs r0, r7, 16 - mov r2, r9 - asrs r1, r2, 16 - ldr r3, [sp, 0x1C] - ldr r2, [r3] - lsls r3, r4, 1 - adds r3, r2 - movs r4, 0x80 - lsls r4, 2 - adds r2, r4, 0 - orrs r6, r2 - ldrh r3, [r3] - adds r2, r6, r3 - mov r3, r8 - orrs r3, r2 - lsls r2, r3, 16 - lsrs r2, 16 - bl MapGridSetMetatileIdAt -_080FF362: - mov r0, r10 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - ldr r4, [sp, 0x28] - cmp r10, r4 - bcs _080FF374 - b _080FF266 -_080FF374: - ldr r1, [sp, 0x30] - lsls r0, r1, 16 - lsrs r2, r0, 16 - ldr r3, [sp, 0x2C] - lsrs r0, r3, 16 - cmp r2, r0 - bcs _080FF384 - b _080FF228 -_080FF384: - add sp, 0x34 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80FF1EC - thumb_func_start sub_80FF394 sub_80FF394: @ 80FF394 push {r4,lr} diff --git a/include/fieldmap.h b/include/fieldmap.h index 0e6878929..d08627ddc 100644 --- a/include/fieldmap.h +++ b/include/fieldmap.h @@ -8,5 +8,6 @@ int GetMapBorderIdAt(int x, int y); extern bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction); int CanCameraMoveInDirection(int direction); u32 GetBehaviorByMetatileId(u16 metatile); +void MapGridSetMetatileEntryAt(int, int, u16); #endif diff --git a/src/decoration.c b/src/decoration.c index 482b5922e..6b57ead5f 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -634,3 +634,47 @@ u16 sub_80FF1B0(u8 decoId, u8 a1) return retval; } } + +void sub_80FF1EC(s16 mapX, s16 mapY, u8 decWidth, u8 decHeight, u16 decIdx) +{ + u16 i; + u16 j; // r10 + u16 behavior; + u16 flags; // r8 + u16 v0; + u16 v1; + s16 x; + s16 decBottom; + + for (i=0; i<decHeight; i++) + { + decBottom = mapY - decHeight + 1 + i; + for (j=0; j<decWidth; j++) + { + x = mapX + j; + behavior = GetBehaviorByMetatileId(0x200 + gDecorations[decIdx].tiles[i * decWidth + j]); + if (sub_8057288(behavior) == 1 || (gDecorations[decIdx].decor_field_11 != 1 && (behavior >> 12))) + { + flags = 0xc00; + } else + { + flags = 0x000; + } + if (gDecorations[decIdx].decor_field_11 != 3 && sub_80572B0(MapGridGetMetatileBehaviorAt(x, decBottom)) == 1) + { + v0 = 1; + } else + { + v0 = 0; + } + v1 = sub_80FF1B0(gDecorations[decIdx].id, i * decWidth + j); + if (v1 != 0xffff) + { + MapGridSetMetatileEntryAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags | v1); + } else + { + MapGridSetMetatileIdAt(x, decBottom, (gDecorations[decIdx].tiles[i * decWidth + j] + (0x200 | v0)) | flags); + } + } + } +} |