diff options
author | camthesaxman <cameronghall@cox.net> | 2017-09-20 11:12:52 -0500 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2017-09-20 11:12:52 -0500 |
commit | 1f74ac11c84c3e62854effebe5eda240991567f2 (patch) | |
tree | f0f4410a6cc0e167649fe78fa9e15e85c0d7d7d8 | |
parent | 93d274828bb6efea08e0ef451ec2a832d4cfc8f0 (diff) |
decompile sub_807D1BC
-rw-r--r-- | asm/field_weather.s | 171 | ||||
-rw-r--r-- | include/field_weather.h | 3 | ||||
-rw-r--r-- | src/field_weather.c | 147 |
3 files changed, 99 insertions, 222 deletions
diff --git a/asm/field_weather.s b/asm/field_weather.s index 399bf65d1..eaa99d63e 100644 --- a/asm/field_weather.s +++ b/asm/field_weather.s @@ -5,177 +5,6 @@ .text - thumb_func_start sub_807D1BC -sub_807D1BC: @ 807D1BC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x14 - ldr r4, [sp, 0x34] - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - mov r1, sp - strh r4, [r1] - ldr r1, [sp] - lsls r3, r1, 27 - lsrs r3, 27 - str r3, [sp, 0x4] - lsls r3, r1, 22 - lsrs r3, 27 - str r3, [sp, 0x8] - lsls r1, 17 - lsrs r1, 27 - str r1, [sp, 0xC] - lsls r6, r0, 4 - mov r3, r10 - adds r1, r3, r0 - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - lsls r2, 24 - movs r1, 0xFF - lsls r1, 24 - adds r2, r1 - lsrs r2, 24 - adds r4, r0, 0 - cmp r4, r10 - bcs _0807D2E8 - lsls r0, r2, 24 - asrs r0, 19 - str r0, [sp, 0x10] -_0807D214: - ldr r0, _0807D244 @ =gUnknown_030006DC - ldr r0, [r0] - adds r0, r4 - ldrb r0, [r0] - cmp r0, 0 - bne _0807D248 - mov r0, sp - ldrh r3, [r0] - adds r0, r6, 0 - movs r1, 0x10 - mov r2, r8 - bl BlendPalette - adds r0, r6, 0 - adds r0, 0x10 - lsls r0, 16 - lsrs r6, r0, 16 - mov r3, r10 - lsls r3, 16 - mov r9, r3 - adds r4, 0x1 - mov r12, r4 - b _0807D2DE - .align 2, 0 -_0807D244: .4byte gUnknown_030006DC -_0807D248: - cmp r0, 0x1 - bne _0807D258 - ldr r0, _0807D254 @ =gUnknown_0202F9E8 - ldr r1, [sp, 0x10] - adds r5, r1, r0 - b _0807D25E - .align 2, 0 -_0807D254: .4byte gUnknown_0202F9E8 -_0807D258: - ldr r0, _0807D2F8 @ =gUnknown_0202FC48 - ldr r3, [sp, 0x10] - adds r5, r3, r0 -_0807D25E: - movs r7, 0 - mov r0, r10 - lsls r0, 16 - mov r9, r0 - adds r4, 0x1 - mov r12, r4 -_0807D26A: - adds r4, r6, 0 - lsls r0, r4, 1 - ldr r1, _0807D2FC @ =gPlttBufferUnfaded - adds r0, r1 - ldr r1, [r0] - lsls r0, r1, 27 - lsrs r0, 27 - adds r0, r5, r0 - ldrb r3, [r0] - lsls r0, r1, 22 - lsrs r0, 27 - adds r0, r5, r0 - ldrb r2, [r0] - lsls r1, 17 - lsrs r1, 27 - adds r1, r5, r1 - ldrb r1, [r1] - ldr r6, [sp, 0x4] - subs r0, r6, r3 - mov r6, r8 - muls r6, r0 - adds r0, r6, 0 - asrs r0, 4 - adds r3, r0 - lsls r3, 24 - lsrs r3, 24 - ldr r6, [sp, 0x8] - subs r0, r6, r2 - mov r6, r8 - muls r6, r0 - adds r0, r6, 0 - asrs r0, 4 - adds r2, r0 - lsls r2, 24 - ldr r6, [sp, 0xC] - subs r0, r6, r1 - mov r6, r8 - muls r6, r0 - adds r0, r6, 0 - asrs r0, 4 - adds r1, r0 - lsls r1, 24 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - lsls r4, 1 - ldr r0, _0807D300 @ =gPlttBufferFaded - adds r4, r0 - lsrs r1, 14 - lsrs r2, 19 - orrs r1, r2 - orrs r1, r3 - strh r1, [r4] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0xF - bls _0807D26A -_0807D2DE: - mov r1, r12 - lsls r0, r1, 16 - lsrs r4, r0, 16 - cmp r0, r9 - bcc _0807D214 -_0807D2E8: - add sp, 0x14 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0807D2F8: .4byte gUnknown_0202FC48 -_0807D2FC: .4byte gPlttBufferUnfaded -_0807D300: .4byte gPlttBufferFaded - thumb_func_end sub_807D1BC - thumb_func_start sub_807D304 sub_807D304: @ 807D304 push {r4-r7,lr} diff --git a/include/field_weather.h b/include/field_weather.h index 409f76028..bfa848d4f 100644 --- a/include/field_weather.h +++ b/include/field_weather.h @@ -20,7 +20,8 @@ void nullsub_39(void); // ASM void sub_807CEBC(u8, u8, s8); -void sub_807D1BC(u8, u8, u8, u8, u16); +//void sub_807D1BC(u8, u8, u8, u8, u16); +void sub_807D1BC(u8 a, u8 a2, s8 c, u8 d, u16 e); void sub_807D304(int, u8, u16); void sub_807D424(u8, u16); // ... diff --git a/src/field_weather.c b/src/field_weather.c index 366d57824..8807362e2 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -1,4 +1,5 @@ #include "global.h" +#include "blend_palette.h" #include "field_weather.h" #include "palette.h" #include "sprite.h" @@ -61,8 +62,9 @@ extern u8 (*gUnknown_08396FC8[][4])(void); extern u8 (*gUnknown_083970B8[])(void); extern u8 *gUnknown_030006DC; extern u8 gUnknown_083970C8; -extern u8 (*gUnknown_0202FC48)[32]; -extern u8 gUnknown_0202F9E8[32]; +//extern u8 (*gUnknown_0202FC48)[32]; +extern u8 gUnknown_0202FC48[][32]; +extern u8 gUnknown_0202F9E8[][32]; void sub_807C828(void) @@ -188,9 +190,10 @@ void sub_807CB10(void) for (v0 = 0; v0 <= 1; v0++) { if (v0 == 0) - v1 = &gUnknown_0202F9E8; + v1 = (void *)&gUnknown_0202F9E8; else - v1 = &gUnknown_0202F9E8 + 19; + //v1 = (void *)(&gUnknown_0202F9E8 + 19); + v1 = &gUnknown_0202F9E8[19]; for (v2 = 0; (u16)v2 <= 0x1f; v2++) { @@ -369,22 +372,22 @@ struct Struct2000000 void sub_807CEBC(u8 a, u8 b, s8 c) { u16 r4; - u16 r5; + u16 palOffset; u8 *r6; - u16 r7; + u16 i; if (c > 0) { c = c - 1; - r5 = a * 16; + palOffset = a * 16; b += a; r4 = a; while (r4 < b) { if (gUnknown_030006DC[r4] == 0) { - CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); - r5 += 16; + CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + palOffset += 16; } else { @@ -396,80 +399,124 @@ void sub_807CEBC(u8 a, u8 b, s8 c) r6 = gUnknown_0202F7E8.unknown_200[c]; if (r4 == 16 || r4 > 0x1B) { - for (r7 = 0; r7 < 16; r7++) + for (i = 0; i < 16; i++) { - if (gPlttBufferUnfaded[r5] == 0x2D9F) + if (gPlttBufferUnfaded[palOffset] == 0x2D9F) { - r5++; + palOffset++; } else { - struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; - r = r6[r1.r]; - g = r6[r1.g]; - b = r6[r1.b]; + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; - gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + r = r6[color.r]; + g = r6[color.g]; + b = r6[color.b]; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; } } } else { - for (r7 = 0; r7 < 16; r7++) + for (i = 0; i < 16; i++) { - struct RGBColor r1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; - r = r6[r1.r]; - g = r6[r1.g]; - b = r6[r1.b]; + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; - gPlttBufferFaded[r5++] = (b << 10) | (g << 5) | r; + r = r6[color.r]; + g = r6[color.g]; + b = r6[color.b]; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; } } } r4++; } } - else + else if (c < 0) { - if (c < 0) + c = -c - 1; + palOffset = a * 16; + b += a; + r4 = a; + while (r4 < b) { - c = -c - 1; - r5 = a * 16; - b += a; - r4 = a; - while (r4 < b) + if (gUnknown_030006DC[r4] == 0) { - if (gUnknown_030006DC[r4] == 0) + CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); + palOffset += 16; + } + else + { + if (r4 == 16 || r4 > 0x1B) { - CpuFastCopy(gPlttBufferUnfaded + r5, gPlttBufferFaded + r5, 16 * sizeof(u16)); - r5 += 16; + for (i = 0; i < 16; i++) + { + if (gPlttBufferUnfaded[palOffset] != 0x2D9F) + gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + palOffset++; + } } else { - if (r4 == 16 || r4 > 0x1B) + for (i = 0; i < 16; i++) { - for (r7 = 0; r7 < 16; r7++) - { - if (gPlttBufferUnfaded[r5] != 0x2D9F) - gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; - r5++; - } - } - else - { - for (r7 = 0; r7 < 16; r7++) - { - gPlttBufferFaded[r5] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[r5])]; - r5++; - } + gPlttBufferFaded[palOffset] = ewram0.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; + palOffset++; } } - r4++; } + r4++; + } + } + else + { + CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); + } +} + +void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) +{ + u16 palOffset; + u16 r4; + u16 i; + struct RGBColor color = *(struct RGBColor *)&e; + u8 r_ = color.r; + u8 g_ = color.g; + u8 b_ = color.b; + + palOffset = a1 * 16; + a2 += a1; + c = c - 1; + r4 = a1; + while (r4 < a2) + { + if (gUnknown_030006DC[r4] == 0) + { + BlendPalette(palOffset, 16, d, e); + palOffset += 16; } else { - CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); + u8 *r5; + + if (gUnknown_030006DC[r4] == 1) + r5 = gUnknown_0202F9E8[c]; + else + r5 = gUnknown_0202FC48[c]; + + for (i = 0; i < 16; i++) + { + struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; + u8 r = r5[color.r]; + u8 g = r5[color.g]; + u8 b = r5[color.b]; + + r += ((r_ - r) * d) >> 4; + g += ((g_ - g) * d) >> 4; + b += ((b_ - b) * d) >> 4; + gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; + } } + r4++; } } |