label and decompile more of field_weather_2

This commit is contained in:
camthesaxman 2017-11-25 18:07:24 -06:00
parent c9a21f43bd
commit 37418d05c4
14 changed files with 1050 additions and 1244 deletions

View File

@ -11280,14 +11280,14 @@ _080D812A:
ldr r2, _080D81C4 @ =0x85000400
str r2, [r0, 0x8]
ldr r2, [r0, 0x8]
ldr r2, _080D81C8 @ =gWeatherFog1Tiles
ldr r2, _080D81C8 @ =gWeatherFog2Tiles
ldr r3, [sp]
str r2, [r0]
str r3, [r0, 0x4]
ldr r2, _080D81CC @ =0x80000400
str r2, [r0, 0x8]
ldr r0, [r0, 0x8]
ldr r0, _080D81D0 @ =gWeatherFog1Tilemap
ldr r0, _080D81D0 @ =gBattleAnimFogTilemap
bl LZDecompressVram
ldr r0, _080D81D4 @ =gUnknown_083970E8
mov r1, sp
@ -11326,9 +11326,9 @@ _080D81B8: .4byte gUnknown_030041B4
_080D81BC: .4byte REG_BG1HOFS
_080D81C0: .4byte 0x040000d4
_080D81C4: .4byte 0x85000400
_080D81C8: .4byte gWeatherFog1Tiles
_080D81C8: .4byte gWeatherFog2Tiles
_080D81CC: .4byte 0x80000400
_080D81D0: .4byte gWeatherFog1Tilemap
_080D81D0: .4byte gBattleAnimFogTilemap
_080D81D4: .4byte gUnknown_083970E8
_080D81D8: .4byte gTasks
_080D81DC: .4byte sub_80D81E0
@ -11672,14 +11672,14 @@ _080D845E:
ldr r2, _080D84FC @ =0x85000400
str r2, [r0, 0x8]
ldr r2, [r0, 0x8]
ldr r2, _080D8500 @ =gWeatherFog1Tiles
ldr r2, _080D8500 @ =gWeatherFog2Tiles
ldr r3, [sp]
str r2, [r0]
str r3, [r0, 0x4]
ldr r2, _080D8504 @ =0x80000400
str r2, [r0, 0x8]
ldr r0, [r0, 0x8]
ldr r0, _080D8508 @ =gWeatherFog1Tilemap
ldr r0, _080D8508 @ =gBattleAnimFogTilemap
bl LZDecompressVram
ldr r0, _080D850C @ =gUnknown_083970E8
mov r1, sp
@ -11720,9 +11720,9 @@ _080D84F0: .4byte gUnknown_030041B4
_080D84F4: .4byte REG_BG1HOFS
_080D84F8: .4byte 0x040000d4
_080D84FC: .4byte 0x85000400
_080D8500: .4byte gWeatherFog1Tiles
_080D8500: .4byte gWeatherFog2Tiles
_080D8504: .4byte 0x80000400
_080D8508: .4byte gWeatherFog1Tilemap
_080D8508: .4byte gBattleAnimFogTilemap
_080D850C: .4byte gUnknown_083970E8
_080D8510: .4byte gTasks
_080D8514: .4byte 0x0000ffff

View File

@ -204,7 +204,7 @@ _08123384:
bl ResetTasks
bl FreeAllSpritePalettes
bl ResetPaletteFade
bl sub_807C828
bl StartWeather
movs r4, 0
ldr r0, _081233D4 @ =gWeatherPtr
ldr r0, [r0]

View File

@ -5,373 +5,6 @@
.text
thumb_func_start sub_807F6E8
sub_807F6E8: @ 807F6E8
push {r4,r5,lr}
sub sp, 0x8
ldr r0, _0807F75C @ =gWeatherPtr
ldr r0, [r0]
ldr r1, _0807F760 @ =0x000006fb
adds r0, r1
ldrb r0, [r0]
cmp r0, 0
bne _0807F792
ldr r0, _0807F764 @ =gWeatherFog1SpriteSheet
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp]
str r1, [sp, 0x4]
mov r0, sp
bl LoadSpriteSheet
movs r5, 0
_0807F70C:
ldr r0, _0807F768 @ =gSpriteTemplate_839AB90
movs r1, 0
movs r2, 0
movs r3, 0xFF
bl CreateSpriteAtEnd
lsls r0, 24
lsrs r0, 24
cmp r0, 0x40
beq _0807F770
lsls r4, r0, 4
adds r4, r0
lsls r4, 2
ldr r0, _0807F76C @ =gSprites
adds r4, r0
adds r0, r5, 0
movs r1, 0x5
bl __umodsi3
strh r0, [r4, 0x2E]
lsls r0, 16
lsrs r0, 10
adds r0, 0x20
strh r0, [r4, 0x20]
adds r0, r5, 0
movs r1, 0x5
bl __udivsi3
lsls r0, 16
lsrs r0, 10
adds r0, 0x20
strh r0, [r4, 0x22]
ldr r2, _0807F75C @ =gWeatherPtr
ldr r0, [r2]
lsls r1, r5, 2
adds r0, 0xA0
adds r0, r1
str r4, [r0]
b _0807F77E
.align 2, 0
_0807F75C: .4byte gWeatherPtr
_0807F760: .4byte 0x000006fb
_0807F764: .4byte gWeatherFog1SpriteSheet
_0807F768: .4byte gSpriteTemplate_839AB90
_0807F76C: .4byte gSprites
_0807F770:
ldr r2, _0807F79C @ =gWeatherPtr
ldr r1, [r2]
lsls r0, r5, 2
adds r1, 0xA0
adds r1, r0
movs r0, 0
str r0, [r1]
_0807F77E:
adds r0, r5, 0x1
lsls r0, 16
lsrs r5, r0, 16
cmp r5, 0x13
bls _0807F70C
ldr r0, [r2]
ldr r1, _0807F7A0 @ =0x000006fb
adds r0, r1
movs r1, 0x1
strb r1, [r0]
_0807F792:
add sp, 0x8
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0807F79C: .4byte gWeatherPtr
_0807F7A0: .4byte 0x000006fb
thumb_func_end sub_807F6E8
thumb_func_start sub_807F7A4
sub_807F7A4: @ 807F7A4
push {r4,r5,lr}
ldr r0, _0807F7EC @ =gWeatherPtr
ldr r1, [r0]
ldr r2, _0807F7F0 @ =0x000006fb
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
beq _0807F7E4
movs r4, 0
adds r5, r1, 0
adds r5, 0xA0
_0807F7BA:
lsls r0, r4, 2
adds r0, r5, r0
ldr r0, [r0]
cmp r0, 0
beq _0807F7C8
bl DestroySprite
_0807F7C8:
adds r0, r4, 0x1
lsls r0, 16
lsrs r4, r0, 16
cmp r4, 0x13
bls _0807F7BA
ldr r0, _0807F7F4 @ =0x00001201
bl FreeSpriteTilesByTag
ldr r0, _0807F7EC @ =gWeatherPtr
ldr r0, [r0]
ldr r1, _0807F7F0 @ =0x000006fb
adds r0, r1
movs r1, 0
strb r1, [r0]
_0807F7E4:
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0807F7EC: .4byte gWeatherPtr
_0807F7F0: .4byte 0x000006fb
_0807F7F4: .4byte 0x00001201
thumb_func_end sub_807F7A4
thumb_func_start sub_807F7F8
sub_807F7F8: @ 807F7F8
push {lr}
ldr r0, _0807F844 @ =gWeatherPtr
ldr r1, [r0]
ldr r0, _0807F848 @ =0x000006cc
adds r2, r1, r0
movs r3, 0
movs r0, 0
strh r0, [r2]
ldr r2, _0807F84C @ =0x000006d2
adds r0, r1, r2
strb r3, [r0]
subs r2, 0x11
adds r0, r1, r2
strb r3, [r0]
ldr r3, _0807F850 @ =0x000006c2
adds r0, r1, r3
movs r2, 0x14
strb r2, [r0]
adds r3, 0x3C
adds r0, r1, r3
strh r2, [r0]
movs r0, 0xE0
lsls r0, 3
adds r1, r0
ldrb r0, [r1]
cmp r0, 0
bne _0807F840
movs r0, 0
movs r1, 0x10
bl sub_807DB64
ldr r1, _0807F854 @ =REG_BLDALPHA
movs r2, 0xFD
lsls r2, 6
adds r0, r2, 0
strh r0, [r1]
_0807F840:
pop {r0}
bx r0
.align 2, 0
_0807F844: .4byte gWeatherPtr
_0807F848: .4byte 0x000006cc
_0807F84C: .4byte 0x000006d2
_0807F850: .4byte 0x000006c2
_0807F854: .4byte REG_BLDALPHA
thumb_func_end sub_807F7F8
thumb_func_start sub_807F858
sub_807F858: @ 807F858
push {r4,lr}
bl sub_807F7F8
ldr r0, _0807F880 @ =gWeatherPtr
ldr r1, [r0]
ldr r2, _0807F884 @ =0x000006d2
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _0807F878
adds r4, r1, r2
_0807F86E:
bl sub_807F888
ldrb r0, [r4]
cmp r0, 0
beq _0807F86E
_0807F878:
pop {r4}
pop {r0}
bx r0
.align 2, 0
_0807F880: .4byte gWeatherPtr
_0807F884: .4byte 0x000006d2
thumb_func_end sub_807F858
thumb_func_start sub_807F888
sub_807F888: @ 807F888
push {r4,r5,lr}
ldr r2, _0807F8CC @ =gWeatherPtr
ldr r1, [r2]
ldr r0, _0807F8D0 @ =gSpriteCoordOffsetX
ldrh r0, [r0]
ldr r3, _0807F8D4 @ =0x000001ff
ands r3, r0
ldr r0, _0807F8D8 @ =0x000006fc
adds r1, r0
strh r3, [r1]
cmp r3, 0xEF
bls _0807F8B4
adds r4, r1, 0
adds r1, r3, 0
_0807F8A4:
adds r3, r1, 0
subs r3, 0xF0
adds r1, r3, 0
lsls r0, r3, 16
lsrs r0, 16
cmp r0, 0xEF
bhi _0807F8A4
strh r3, [r4]
_0807F8B4:
ldr r5, [r2]
ldr r1, _0807F8DC @ =0x000006cc
adds r4, r5, r1
ldrh r0, [r4]
cmp r0, 0x1
beq _0807F8EC
cmp r0, 0x1
bgt _0807F8E0
cmp r0, 0
beq _0807F8E6
b _0807F928
.align 2, 0
_0807F8CC: .4byte gWeatherPtr
_0807F8D0: .4byte gSpriteCoordOffsetX
_0807F8D4: .4byte 0x000001ff
_0807F8D8: .4byte 0x000006fc
_0807F8DC: .4byte 0x000006cc
_0807F8E0:
cmp r0, 0x2
beq _0807F908
b _0807F928
_0807F8E6:
bl sub_807F99C
b _0807F91A
_0807F8EC:
movs r1, 0xE0
lsls r1, 3
adds r0, r5, r1
ldrb r0, [r0]
cmp r0, 0
bne _0807F8FC
bl sub_807F9AC
_0807F8FC:
movs r0, 0x10
movs r1, 0
movs r2, 0x1
bl sub_807DBA4
b _0807F91A
_0807F908:
bl sub_807DBE8
lsls r0, 24
cmp r0, 0
beq _0807F92C
ldr r0, _0807F924 @ =0x000006d2
adds r1, r5, r0
movs r0, 0x1
strb r0, [r1]
_0807F91A:
ldrh r0, [r4]
adds r0, 0x1
strh r0, [r4]
b _0807F92C
.align 2, 0
_0807F924: .4byte 0x000006d2
_0807F928:
bl sub_807DBE8
_0807F92C:
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_807F888
thumb_func_start sub_807F934
sub_807F934: @ 807F934
push {r4,lr}
ldr r0, _0807F950 @ =gWeatherPtr
ldr r0, [r0]
ldr r1, _0807F954 @ =0x000006ce
adds r4, r0, r1
ldrh r0, [r4]
cmp r0, 0x1
beq _0807F96A
cmp r0, 0x1
bgt _0807F958
cmp r0, 0
beq _0807F95E
b _0807F98C
.align 2, 0
_0807F950: .4byte gWeatherPtr
_0807F954: .4byte 0x000006ce
_0807F958:
cmp r0, 0x2
beq _0807F980
b _0807F98C
_0807F95E:
movs r0, 0
movs r1, 0x10
movs r2, 0x1
bl sub_807DBA4
b _0807F978
_0807F96A:
bl sub_807DBE8
lsls r0, 24
cmp r0, 0
beq _0807F994
bl sub_807FA54
_0807F978:
ldrh r0, [r4]
adds r0, 0x1
strh r0, [r4]
b _0807F994
_0807F980:
ldr r1, _0807F990 @ =REG_BLDALPHA
movs r0, 0
strh r0, [r1]
ldrh r0, [r4]
adds r0, 0x1
strh r0, [r4]
_0807F98C:
movs r0, 0
b _0807F996
.align 2, 0
_0807F990: .4byte REG_BLDALPHA
_0807F994:
movs r0, 0x1
_0807F996:
pop {r4}
pop {r1}
bx r1
thumb_func_end sub_807F934
thumb_func_start sub_807F99C
sub_807F99C: @ 807F99C
push {lr}
ldr r0, _0807F9A8 @ =gWeatherAshSpriteSheet
bl LoadSpriteSheet
pop {r0}
bx r0
.align 2, 0
_0807F9A8: .4byte gWeatherAshSpriteSheet
thumb_func_end sub_807F99C
thumb_func_start sub_807F9AC
sub_807F9AC: @ 807F9AC
push {r4,r5,lr}
@ -618,7 +251,7 @@ sub_807FB24: @ 807FB24
strh r2, [r0]
movs r0, 0
movs r1, 0x10
bl sub_807DB64
bl Weather_SetBlendCoeffs
_0807FB8E:
pop {r4}
pop {r0}
@ -687,10 +320,10 @@ _0807FC0C:
movs r0, 0xC
movs r1, 0x8
movs r2, 0x8
bl sub_807DBA4
bl Weather_SetTargetBlendCoeffs
b _0807FC2A
_0807FC18:
bl sub_807DBE8
bl Weather_UpdateBlend
lsls r0, 24
cmp r0, 0
beq _0807FC30
@ -737,10 +370,10 @@ _0807FC6A:
movs r0, 0
movs r1, 0x10
movs r2, 0x1
bl sub_807DBA4
bl Weather_SetTargetBlendCoeffs
b _0807FC86
_0807FC76:
bl sub_807DBE8
bl Weather_UpdateBlend
lsls r0, 24
cmp r0, 0
beq _0807FC92
@ -848,7 +481,7 @@ sub_807FD30: @ 807FD30
ldrb r0, [r0]
cmp r0, 0
bne _0807FDD6
ldr r0, _0807FDA4 @ =gWeatherFog0SpriteSheet
ldr r0, _0807FDA4 @ =gWeatherFog1SpriteSheet
ldr r1, [r0, 0x4]
ldr r0, [r0]
str r0, [sp]
@ -893,7 +526,7 @@ _0807FD54:
.align 2, 0
_0807FD9C: .4byte gWeatherPtr
_0807FDA0: .4byte 0x00000724
_0807FDA4: .4byte gWeatherFog0SpriteSheet
_0807FDA4: .4byte gWeatherFog1SpriteSheet
_0807FDA8: .4byte gSpriteTemplate_839AC04
_0807FDAC: .4byte gSprites
_0807FDB0:
@ -1068,7 +701,7 @@ sub_807FE9C: @ 807FE9C
_0807FEF0:
movs r0, 0
movs r1, 0x10
bl sub_807DB64
bl Weather_SetBlendCoeffs
_0807FEF8:
pop {r4}
pop {r0}
@ -1150,10 +783,10 @@ _0807FF98:
movs r0, 0x10
movs r1, 0
movs r2, 0
bl sub_807DBA4
bl Weather_SetTargetBlendCoeffs
b _0807FFB6
_0807FFA4:
bl sub_807DBE8
bl Weather_UpdateBlend
lsls r0, 24
cmp r0, 0
beq _0807FFBC
@ -1201,10 +834,10 @@ _0807FFFA:
movs r0, 0
movs r1, 0x10
movs r2, 0
bl sub_807DBA4
bl Weather_SetTargetBlendCoeffs
b _08080016
_08080006:
bl sub_807DBE8
bl Weather_UpdateBlend
lsls r0, 24
cmp r0, 0
beq _08080022
@ -1793,7 +1426,7 @@ sub_8080470: @ 8080470
thumb_func_start sub_8080474
sub_8080474: @ 8080474
push {r4,r5,lr}
bl sub_807F49C
bl Fog2_InitVars
ldr r0, _080804B4 @ =gWeatherPtr
ldr r4, [r0]
ldr r1, _080804B8 @ =0x0000072e
@ -1859,7 +1492,7 @@ _080804F4: .4byte 0x000006d2
thumb_func_start sub_80804F8
sub_80804F8: @ 80804F8
push {r4-r7,lr}
bl sub_807F52C
bl Fog2_Main
ldr r0, _08080558 @ =gWeatherPtr
ldr r5, [r0]
ldr r0, _0808055C @ =0x00000726
@ -1916,7 +1549,7 @@ _08080568: .4byte 0x0000072a
thumb_func_start sub_808056C
sub_808056C: @ 808056C
push {lr}
bl sub_807F5EC
bl Fog2_Finish
lsls r0, 24
cmp r0, 0
beq _0808057C

View File

@ -24,7 +24,7 @@ gUnknown_0839AC68:: @ 839AC68
.align 2
gWeatherBubbleSpriteSheet:: @ 839AC70
obj_tiles WeatherBubbleTiles, 0x40, 0x1205
obj_tiles gWeatherBubbleTiles, 0x40, 0x1205
.align 1
gUnknown_0839AC78:: @ 839AC78

View File

@ -2997,8 +2997,8 @@ gBattleAnimSpriteSheet_277:: @ 8E6DA54
.incbin "graphics/battle_anims/sprites/277.4bpp.lz"
.align 2
gWeatherFog1Tilemap:: @ 8E6DE48
.incbin "graphics/weather/fog1.bin.lz"
gBattleAnimFogTilemap:: @ 8E6DE48
.incbin "graphics/battle_anims/backgrounds/fog.bin.lz"
.align 2
gBattleAnimSpritePalette_283:: @ 8E6DFC0

Binary file not shown.

Before

Width:  |  Height:  |  Size: 928 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1018 B

After

Width:  |  Height:  |  Size: 928 B

BIN
graphics/weather/fog2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1018 B

View File

@ -1,20 +1,30 @@
#ifndef GUARD_WEATHER_H
#define GUARD_WEATHER_H
#define WEATHER_NONE 0
#define WEATHER_CLOUDS 1
#define WEATHER_RAIN_LIGHT 3
#define WEATHER_SNOW 4
#define WEATHER_RAIN_MED 5
#define WEATHER_FOG_2 6
#define WEATHER_FOG_1 7
#define WEATHER_DROUGHT 12
#define WEATHER_RAIN_HEAVY 13
struct Sprite;
// TODO: This might be a union
struct Weather2
{
/*0x00*/ u8 filler0[0xA0];
/*0xA0*/ struct Sprite *fogSprites[20];
};
struct Weather
{
struct Sprite *unknown_0[24];
struct Sprite *snowflakeSprites[0x65]; // snowflakes?
struct Sprite *cloudSprites[3];
/*0x000*/ struct Sprite *rainSprites[24];
/*0x060*/ struct Sprite *snowflakeSprites[0x65]; // snowflakes?
/*0x1F4*/ struct Sprite *cloudSprites[3];
u8 unknown_200[2][32];
u8 filler_240[0x460-0x240];
u8 unk460[2][32];
@ -32,11 +42,11 @@ struct Weather
u8 unknown_6C9;
u8 unknown_6CA;
u8 unknown_6CB;
u16 unknown_6CC;
u16 initStep;
u16 unknown_6CE;
u8 currWeather;
u8 unknown_6D1;
u8 unknown_6D2;
u8 nextWeather;
u8 weatherGfxLoaded;
u8 unknown_6D3;
u8 unknown_6D4;
u8 unknown_6D5;
@ -47,25 +57,26 @@ struct Weather
u8 unknown_6DB;
u8 unknown_6DC;
u8 rainStrength;
u8 unknown_6DE;
/*0x6DE*/ u8 cloudsActive;
u8 filler_6DF[1];
u16 unknown_6E0;
u16 unknown_6E2;
u8 unknown_6E4;
u8 snowflakeSpriteCount;
u8 unknown_6E5;
u16 unknown_6E6;
u16 unknown_6E8;
u16 thunderCounter;
u8 unknown_6EA;
u8 unknown_6EB;
u8 unknown_6EC;
u8 unknown_6ED;
u16 unknown_6EE;
u16 fog2ScrollPosX;
u16 unknown_6F0;
u16 unknown_6F2;
u8 unknown_6F4[6];
u8 unknown_6FA;
u8 unknown_6FB;
u8 filler_6FC[4];
u8 unknown_6FB; // fogActive
u16 unknown_6FC;
u16 unknown_6FE;
u8 unknown_700;
u8 filler_701[0x15];
u8 unknown_716;
@ -75,13 +86,13 @@ struct Weather
u8 filler_725[9];
u8 unknown_72E;
u8 filler_72F;
u16 unknown_730;
u16 unknown_732;
u16 unknown_734;
u16 unknown_736;
u16 currBlendEVA;
u16 currBlendEVB;
u16 targetBlendEVA;
u16 targetBlendEVB;
u8 unknown_738;
u8 unknown_739;
u8 unknown_73A;
u8 blendDelay;
u8 filler_73B[0x3C-0x3B];
s16 unknown_73C;
s16 unknown_73E;
@ -92,12 +103,12 @@ struct Weather
u8 unknown_74E;
};
void sub_807C828(void);
void StartWeather(void);
void DoWeatherEffect(u8 effect);
void sub_807C988(u8 effect);
void sub_807C9B4(u8 effect);
void sub_807C9E4(u8);
void sub_807CA34(u8);
void Task_WeatherInit(u8);
void Task_WeatherMain(u8);
void sub_807CAE8(void);
void nullsub_38(void);
void sub_807CB10(void);
@ -120,7 +131,7 @@ void fade_screen(u8, u8);
void sub_807D78C(u8 tag);
void sub_807D874(u8);
// ...
void sub_807DB64(u8, u8);
void Weather_SetBlendCoeffs(u8, u8);
// ...
void sub_807DE68(void);
// ...

View File

@ -539,7 +539,28 @@
#define BGCNT_AFF1024x1024 0xC000
// BLDCNT
// Bits 0-5 select layers for the 1st target
#define BLDCNT_TGT1_BG0 (1 << 0)
#define BLDCNT_TGT1_BG1 (1 << 1)
#define BLDCNT_TGT1_BG2 (1 << 2)
#define BLDCNT_TGT1_BG3 (1 << 3)
#define BLDCNT_TGT1_OBJ (1 << 4)
#define BLDCNT_TGT1_BD (1 << 5)
// Bits 6-7 select the special effect
#define BLDCNT_EFFECT_NONE (0 << 6) // no special effect
#define BLDCNT_EFFECT_BLEND (1 << 6) // 1st+2nd targets mixed (controlled by BLDALPHA)
#define BLDCNT_EFFECT_LIGHTEN (2 << 6) // 1st target becomes whiter (controlled by BLDY)
#define BLDCNT_EFFECT_DARKEN (3 << 6) // 1st target becomes blacker (controlled by BLDY)
// Bits 8-13 select layers for the 2nd target
#define BLDCNT_TGT2_BG0 (1 << 8)
#define BLDCNT_TGT2_BG1 (1 << 9)
#define BLDCNT_TGT2_BG2 (1 << 10)
#define BLDCNT_TGT2_BG3 (1 << 11)
#define BLDCNT_TGT2_OBJ (1 << 12)
#define BLDCNT_TGT2_BD (1 << 13)
// BLDALPHA
#define BLDALPHA_BLEND(target1, target2) (((target2) << 8) | (target1))
// SOUNDCNT_H
#define SOUND_CGB_MIX_QUARTER 0x0000

View File

@ -28,10 +28,10 @@ struct WeatherPaletteData
struct WeatherCallbacks
{
void (*func0)(void);
void (*func1)(void);
void (*func2)(void);
u8 (*func3)(void);
void (*initVars)(void);
void (*main)(void);
void (*initAll)(void);
u8 (*finish)(void);
};
extern struct Weather gWeather;
@ -48,7 +48,7 @@ const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz");
extern u8 (*gUnknown_0202FC48)[32];
extern u8 gUnknown_0202F9E8[32];
const u8 *const gUnknown_08396FA8[] =
static const u8 *const sCompressedDroughtPalettes[] =
{
DroughtPaletteData_0,
DroughtPaletteData_1,
@ -65,34 +65,34 @@ const u8 *const gUnknown_08396FA8[] =
// this file produces the same result as accessing gWeather directly.
struct Weather *const gWeatherPtr = &gWeather;
void sub_807CAE8(void);
void nullsub_38(void);
u8 sub_807CB0C(void);
void sub_807DE78(void);
void sub_807DEF4(void);
void sub_807DEC4(void);
u8 sub_807DF54(void);
void None_Init(void);
void None_Main(void);
u8 None_Finish(void);
void Clouds_InitVars(void);
void Clouds_Main(void);
void Clouds_InitAll(void);
u8 Clouds_Finish(void);
void sub_807DF9C(void);
void nullsub_55(void);
void sub_807DFC0(void);
u8 sub_807DFD0(void);
void LightRain_InitVars(void);
void sub_807E400(void);
void sub_807E3D0(void);
u8 sub_807E460(void);
void LightRain_Main(void);
void LightRain_InitAll(void);
u8 LightRain_Finish(void);
void Snow_InitVars(void);
void snowflakes_progress2(void);
void sub_807EA18(void);
u8 sub_807EAC0(void);
void sub_807EE80(void);
void sub_807EFC0(void);
void sub_807EEF4(void);
u8 sub_807F34C(void);
void sub_807F49C(void);
void sub_807F52C(void);
void sub_807F4FC(void);
u8 sub_807F5EC(void);
void sub_807F7F8(void);
void Snow_Main(void);
void Snow_InitAll(void);
u8 Snow_Finish(void);
void MedRain_InitVars(void);
void Rain_Main(void);
void MedRain_InitAll(void);
u8 Rain_Finish(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void Fog2_InitAll(void);
u8 Fog2_Finish(void);
void Fog1_InitVars(void);
void sub_807F888(void);
void sub_807F858(void);
u8 sub_807F934(void);
@ -104,10 +104,10 @@ void sub_807FB24(void);
void sub_807FBD8(void);
void sub_807FBA8(void);
u8 sub_807FC3C(void);
void sub_807F49C(void);
void sub_807F52C(void);
void sub_807F4FC(void);
u8 sub_807F5EC(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void Fog2_InitAll(void);
u8 Fog2_Finish(void);
void sub_8080430(void);
void nullsub_56(void);
void sub_8080460(void);
@ -116,32 +116,32 @@ void sub_807E110(void);
void sub_807E174(void);
void sub_807E144(void);
u8 sub_807E258(void);
void sub_807EF24(void);
void sub_807EFC0(void);
void sub_807EF90(void);
u8 sub_807F34C(void);
void HeavyRain_InitVars(void);
void Rain_Main(void);
void HeavyRain_InitAll(void);
u8 Rain_Finish(void);
void sub_8080474(void);
void sub_80804F8(void);
void sub_80804C8(void);
u8 sub_808056C(void);
const struct WeatherCallbacks gUnknown_08396FC8[] =
static const struct WeatherCallbacks sWeatherFuncs[] =
{
{sub_807CAE8, nullsub_38, sub_807CAE8, sub_807CB0C},
{sub_807DE78, sub_807DEF4, sub_807DEC4, sub_807DF54},
{sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0},
{LightRain_InitVars, sub_807E400, sub_807E3D0, sub_807E460}, // light rain
{Snow_InitVars, snowflakes_progress2, sub_807EA18, sub_807EAC0}, // snow
{sub_807EE80, sub_807EFC0, sub_807EEF4, sub_807F34C},
{sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC},
{sub_807F7F8, sub_807F888, sub_807F858, sub_807F934},
{sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8},
{sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C},
{sub_807F49C, sub_807F52C, sub_807F4FC, sub_807F5EC},
{sub_8080430, nullsub_56, sub_8080460, sub_8080470},
{sub_807E110, sub_807E174, sub_807E144, sub_807E258},
{sub_807EF24, sub_807EFC0, sub_807EF90, sub_807F34C},
{sub_8080474, sub_80804F8, sub_80804C8, sub_808056C},
{None_Init, None_Main, None_Init, None_Finish},
{Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish},
{sub_807DF9C, nullsub_55, sub_807DFC0, sub_807DFD0},
{LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, // light rain
{Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish}, // snow
{MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish},
{Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
{Fog1_InitVars, sub_807F888, sub_807F858, sub_807F934}, // fog 1
{sub_807FE9C, sub_807FF4C, sub_807FF1C, sub_807FFC8},
{sub_807FB24, sub_807FBD8, sub_807FBA8, sub_807FC3C},
{Fog2_InitVars, Fog2_Main, Fog2_InitAll, Fog2_Finish},
{sub_8080430, nullsub_56, sub_8080460, sub_8080470},
{sub_807E110, sub_807E174, sub_807E144, sub_807E258},
{HeavyRain_InitVars, Rain_Main, HeavyRain_InitAll, Rain_Finish},
{sub_8080474, sub_80804F8, sub_80804C8, sub_808056C},
};
void (*const gUnknown_083970B8[])(void) =
@ -190,10 +190,10 @@ const u8 gUnknown_083970C8[] =
const u16 gUnknown_083970E8[] = INCBIN_U16("graphics/weather/0.gbapal");
void sub_807C828(void)
void StartWeather(void)
{
u8 index;
if (!FuncIsActiveTask(sub_807CA34))
if (!FuncIsActiveTask(Task_WeatherMain))
{
index = AllocSpritePalette(0x1200);
CpuCopy32(gUnknown_083970E8, &gPlttBufferUnfaded[0x100 + index * 16], 32);
@ -202,8 +202,8 @@ void sub_807C828(void)
gWeatherPtr->unknown_6D4 = AllocSpritePalette(0x1201);
gWeatherPtr->unknown_6DA = 0;
gWeatherPtr->unknown_6D8 = 0;
gWeatherPtr->unknown_6DE = 0;
gWeatherPtr->unknown_6E4 = 0;
gWeatherPtr->cloudsActive = 0;
gWeatherPtr->snowflakeSpriteCount = 0;
gWeatherPtr->unknown_700 = 0;
gWeatherPtr->unknown_6FB = 0;
gWeatherPtr->unknown_724 = 0;
@ -211,12 +211,12 @@ void sub_807C828(void)
gWeatherPtr->unknown_717 = 0;
gWeatherPtr->unknown_72E = 0;
gWeatherPtr->unknown_6FA = 0;
sub_807DB64(16, 0);
Weather_SetBlendCoeffs(16, 0);
gWeatherPtr->currWeather = 0;
gWeatherPtr->unknown_6C6 = 3;
gWeatherPtr->unknown_6C8 = 0;
gWeatherPtr->unknown_6D3 = 1;
gWeatherPtr->unknown_6C9 = CreateTask(sub_807C9E4, 80);
gWeatherPtr->unknown_6C9 = CreateTask(Task_WeatherInit, 80);
}
}
@ -226,12 +226,12 @@ void DoWeatherEffect(u8 effect)
{
PlayRainSoundEffect();
}
if (gWeatherPtr->unknown_6D1 != effect && gWeatherPtr->currWeather == effect)
if (gWeatherPtr->nextWeather != effect && gWeatherPtr->currWeather == effect)
{
gUnknown_08396FC8[effect].func0();
sWeatherFuncs[effect].initVars();
}
gWeatherPtr->unknown_6D3 = 0;
gWeatherPtr->unknown_6D1 = effect;
gWeatherPtr->nextWeather = effect;
gWeatherPtr->unknown_6CE = 0;
}
@ -239,59 +239,57 @@ void sub_807C988(u8 effect)
{
PlayRainSoundEffect();
gWeatherPtr->currWeather = effect;
gWeatherPtr->unknown_6D1 = effect;
gWeatherPtr->nextWeather = effect;
}
void sub_807C9B4(u8 effect)
{
PlayRainSoundEffect();
gWeatherPtr->currWeather = effect;
gWeatherPtr->unknown_6D1 = effect;
gWeatherPtr->nextWeather = effect;
gWeatherPtr->unknown_6C8 = 1;
}
void sub_807C9E4(u8 taskId)
void Task_WeatherInit(u8 taskId)
{
if (gWeatherPtr->unknown_6C8)
{
gUnknown_08396FC8[gWeatherPtr->currWeather].func2();
gTasks[taskId].func = sub_807CA34;
sWeatherFuncs[gWeatherPtr->currWeather].initAll();
gTasks[taskId].func = Task_WeatherMain;
}
}
void sub_807CA34(u8 task)
void Task_WeatherMain(u8 taskId)
{
u8 v1;
if (gWeatherPtr->currWeather != gWeatherPtr->unknown_6D1)
if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather)
{
v1 = gUnknown_08396FC8[gWeatherPtr->currWeather].func3();
if (!v1)
if (!sWeatherFuncs[gWeatherPtr->currWeather].finish())
{
gUnknown_08396FC8[gWeatherPtr->unknown_6D1].func0();
gWeatherPtr->unknown_6C3 = 0; // compiler reuses v1
gWeatherPtr->unknown_6C6 = 0; // compiler reuses v1
gWeatherPtr->currWeather = gWeatherPtr->unknown_6D1;
sWeatherFuncs[gWeatherPtr->nextWeather].initVars();
gWeatherPtr->unknown_6C3 = 0;
gWeatherPtr->unknown_6C6 = 0;
gWeatherPtr->currWeather = gWeatherPtr->nextWeather;
gWeatherPtr->unknown_6D3 = 1;
}
}
else
{
gUnknown_08396FC8[gWeatherPtr->currWeather].func1();
sWeatherFuncs[gWeatherPtr->currWeather].main();
}
gUnknown_083970B8[gWeatherPtr->unknown_6C6]();
}
void sub_807CAE8(void)
void None_Init(void)
{
gWeatherPtr->unknown_6C1 = 0;
gWeatherPtr->unknown_6C2 = 0;
}
void nullsub_38(void)
void None_Main(void)
{
}
u8 sub_807CB0C(void)
u8 None_Finish(void)
{
return 0;
}
@ -627,14 +625,14 @@ void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e)
}
}
void sub_807D304(s8 a, u8 arg2, u16 c)
void sub_807D304(s8 a, u8 coeff, u16 c)
{
struct RGBColor color;
u8 r_;
u8 g_;
u8 b_;
u16 r4;
u16 r5;
u16 palOffset;
u16 r12;
a = -a - 1;
@ -642,13 +640,13 @@ void sub_807D304(s8 a, u8 arg2, u16 c)
r_ = color.r;
g_ = color.g;
b_ = color.b;
r5 = 0;
palOffset = 0;
for (r4 = 0; r4 < 32; r4++)
{
if (gUnknown_030006DC[r4] == 0)
{
BlendPalette(r5, 16, arg2, c);
r5 += 16;
BlendPalette(palOffset, 16, coeff, c);
palOffset += 16;
}
else
{
@ -660,7 +658,7 @@ void sub_807D304(s8 a, u8 arg2, u16 c)
u8 r1, g1, b1;
u8 r2, g2, b2;
color1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5];
color1 = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset];
r1 = color1.r;
g1 = color1.g;
b1 = color1.b;
@ -671,11 +669,11 @@ void sub_807D304(s8 a, u8 arg2, u16 c)
g2 = color2.g;
b2 = color2.b;
r2 += ((r_ - r2) * arg2) >> 4;
g2 += ((g_ - g2) * arg2) >> 4;
b2 += ((b_ - b2) * arg2) >> 4;
r2 += ((r_ - r2) * coeff) >> 4;
g2 += ((g_ - g2) * coeff) >> 4;
b2 += ((b_ - b2) * coeff) >> 4;
gPlttBufferFaded[r5++] = (b2 << 10) | (g2 << 5) | r2;
gPlttBufferFaded[palOffset++] = (b2 << 10) | (g2 << 5) | r2;
}
}
}
@ -775,28 +773,28 @@ void sub_807D5F0(u8 a, u8 b, u8 c)
}
}
void fade_screen(u8 a, u8 b)
void fade_screen(u8 a, u8 delay)
{
u32 r4;
u32 fadeColor;
u32 r1;
u32 r2;
switch (a)
{
case 0:
r4 = 0;
fadeColor = 0;
r1 = 0;
break;
case 2:
r4 = 0xFFFF;
fadeColor = 0xFFFF;
r1 = 0;
break;
case 1:
r4 = 0;
fadeColor = 0;
r1 = 1;
break;
case 3:
r4 = 0xFFFF;
fadeColor = 0xFFFF;
r1 = 1;
break;
default:
@ -823,20 +821,20 @@ void fade_screen(u8 a, u8 b)
{
if (r2 != 0)
CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4);
BeginNormalPaletteFade(0xFFFFFFFF, delay, 0, 16, fadeColor);
gWeatherPtr->unknown_6C6 = 2;
}
else
{
gWeatherPtr->unknown_6C4 = r4;
gWeatherPtr->unknown_6C4 = fadeColor;
if (r2 != 0)
gWeatherPtr->unknown_6C7 = 0;
else
BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4);
BeginNormalPaletteFade(0xFFFFFFFF, delay, 16, 0, fadeColor);
gWeatherPtr->unknown_6C6 = 1;
gWeatherPtr->unknown_6CA = 1;
gWeatherPtr->unknown_6CB = 0;
sub_807DB64(gWeatherPtr->unknown_730, gWeatherPtr->unknown_732);
Weather_SetBlendCoeffs(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
gWeatherPtr->unknown_6C8 = 1;
}
}
@ -909,7 +907,7 @@ void sub_807D8F0(u8 *a, u8 *b)
if (r4 < 7)
{
r4--;
LZ77UnCompWram(gUnknown_08396FA8[r4], eWeatherPaletteData.data[r4]);
LZ77UnCompWram(sCompressedDroughtPalettes[r4], eWeatherPaletteData.data[r4]);
if (r4 == 0)
{
eWeatherPaletteData.data[r4][0] = 0x421;
@ -921,8 +919,7 @@ void sub_807D8F0(u8 *a, u8 *b)
for (i = 0; i < 0x1000; i++)
eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i];
}
(*a)++;
if (*a == 7)
if (++(*a) == 7)
{
*a = 32;
*b = 32;
@ -997,52 +994,58 @@ void sub_807DA4C(void)
}
}
void sub_807DB64(u8 a, u8 b)
void Weather_SetBlendCoeffs(u8 eva, u8 evb)
{
gWeatherPtr->unknown_730 = a;
gWeatherPtr->unknown_732 = b;
gWeatherPtr->unknown_734 = a;
gWeatherPtr->unknown_736 = b;
REG_BLDALPHA = (b << 8) | a;
gWeatherPtr->currBlendEVA = eva;
gWeatherPtr->currBlendEVB = evb;
gWeatherPtr->targetBlendEVA = eva;
gWeatherPtr->targetBlendEVB = evb;
REG_BLDALPHA = BLDALPHA_BLEND(eva, evb);
}
void sub_807DBA4(u8 a, u8 b, int c)
void Weather_SetTargetBlendCoeffs(u8 eva, u8 evb, int delay)
{
gWeatherPtr->unknown_734 = a;
gWeatherPtr->unknown_736 = b;
gWeatherPtr->unknown_73A = c;
gWeatherPtr->targetBlendEVA = eva;
gWeatherPtr->targetBlendEVB = evb;
gWeatherPtr->blendDelay = delay;
gWeatherPtr->unknown_739 = 0;
gWeatherPtr->unknown_738 = 0;
}
bool8 sub_807DBE8(void)
bool8 Weather_UpdateBlend(void)
{
if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734
&& gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736)
if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
&& gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
return TRUE;
if (++gWeatherPtr->unknown_739 > gWeatherPtr->unknown_73A)
if (++gWeatherPtr->unknown_739 > gWeatherPtr->blendDelay)
{
gWeatherPtr->unknown_739 = 0;
gWeatherPtr->unknown_738++;
// Update currBlendEVA and currBlendEVB on alternate frames
if (gWeatherPtr->unknown_738 & 1)
{
if (gWeatherPtr->unknown_730 < gWeatherPtr->unknown_734)
gWeatherPtr->unknown_730++;
else if (gWeatherPtr->unknown_730 > gWeatherPtr->unknown_734)
gWeatherPtr->unknown_730--;
if (gWeatherPtr->currBlendEVA < gWeatherPtr->targetBlendEVA)
gWeatherPtr->currBlendEVA++;
else if (gWeatherPtr->currBlendEVA > gWeatherPtr->targetBlendEVA)
gWeatherPtr->currBlendEVA--;
}
else
{
if (gWeatherPtr->unknown_732 < gWeatherPtr->unknown_736)
gWeatherPtr->unknown_732++;
else if (gWeatherPtr->unknown_732 > gWeatherPtr->unknown_736)
gWeatherPtr->unknown_732--;
if (gWeatherPtr->currBlendEVB < gWeatherPtr->targetBlendEVB)
gWeatherPtr->currBlendEVB++;
else if (gWeatherPtr->currBlendEVB > gWeatherPtr->targetBlendEVB)
gWeatherPtr->currBlendEVB--;
}
}
REG_BLDALPHA = (gWeatherPtr->unknown_732 << 8) | gWeatherPtr->unknown_730;
if (gWeatherPtr->unknown_730 == gWeatherPtr->unknown_734
&& gWeatherPtr->unknown_732 == gWeatherPtr->unknown_736)
REG_BLDALPHA = BLDALPHA_BLEND(gWeatherPtr->currBlendEVA, gWeatherPtr->currBlendEVB);
if (gWeatherPtr->currBlendEVA == gWeatherPtr->targetBlendEVA
&& gWeatherPtr->currBlendEVB == gWeatherPtr->targetBlendEVB)
return TRUE;
return FALSE;
}

File diff suppressed because it is too large Load Diff

View File

@ -1737,7 +1737,7 @@ void sub_8054D4C(u32 a1)
sub_805C7C4(0);
FieldEffectActiveListClear();
InitFieldMessageBox();
sub_807C828();
StartWeather();
sub_8080750();
if (!a1)
SetUpFieldTasks();