field_weather_util

This commit is contained in:
PikalaxALT
2020-03-16 20:37:51 -04:00
parent 6e00e82210
commit 51eac4e14b
11 changed files with 313 additions and 472 deletions
-287
View File
@@ -5,291 +5,4 @@
.text
thumb_func_start sub_807B0C4
sub_807B0C4: @ 807B0C4
push {lr}
adds r1, r0, 0
adds r3, r2, 0
ldr r0, _0807B0E8 @ =gWeather
movs r2, 0xDA
lsls r2, 3
adds r0, r2
ldrb r0, [r0]
cmp r0, 0xB
beq _0807B0F0
cmp r0, 0xB
bgt _0807B0EC
cmp r0, 0x5
bgt _0807B0FA
cmp r0, 0x3
blt _0807B0FA
b _0807B0F0
.align 2, 0
_0807B0E8: .4byte gWeather
_0807B0EC:
cmp r0, 0xD
bne _0807B0FA
_0807B0F0:
adds r0, r1, 0
movs r1, 0
movs r2, 0x3
bl sub_8045314
_0807B0FA:
pop {r0}
bx r0
thumb_func_end sub_807B0C4
thumb_func_start SetSav1Weather
SetSav1Weather: @ 807B100
push {r4,r5,lr}
ldr r4, _0807B12C @ =gSaveBlock1Ptr
ldr r1, [r4]
adds r1, 0x2E
ldrb r5, [r1]
lsls r0, 24
lsrs r0, 24
bl TranslateWeatherNum
ldr r1, [r4]
adds r1, 0x2E
strb r0, [r1]
ldr r0, [r4]
adds r0, 0x2E
ldrb r0, [r0]
adds r1, r5, 0
bl UpdateRainCounter
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0807B12C: .4byte gSaveBlock1Ptr
thumb_func_end SetSav1Weather
thumb_func_start sav1_get_weather_probably
sav1_get_weather_probably: @ 807B130
ldr r0, _0807B13C @ =gSaveBlock1Ptr
ldr r0, [r0]
adds r0, 0x2E
ldrb r0, [r0]
bx lr
.align 2, 0
_0807B13C: .4byte gSaveBlock1Ptr
thumb_func_end sav1_get_weather_probably
thumb_func_start SetSav1WeatherFromCurrMapHeader
SetSav1WeatherFromCurrMapHeader: @ 807B140
push {r4,r5,lr}
ldr r4, _0807B16C @ =gSaveBlock1Ptr
ldr r0, [r4]
adds r0, 0x2E
ldrb r5, [r0]
ldr r0, _0807B170 @ =gMapHeader
ldrb r0, [r0, 0x16]
bl TranslateWeatherNum
ldr r1, [r4]
adds r1, 0x2E
strb r0, [r1]
ldr r0, [r4]
adds r0, 0x2E
ldrb r0, [r0]
adds r1, r5, 0
bl UpdateRainCounter
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0807B16C: .4byte gSaveBlock1Ptr
_0807B170: .4byte gMapHeader
thumb_func_end SetSav1WeatherFromCurrMapHeader
thumb_func_start SetWeather
SetWeather: @ 807B174
push {lr}
bl SetSav1Weather
bl sav1_get_weather_probably
lsls r0, 24
lsrs r0, 24
bl SetNextWeather
pop {r0}
bx r0
thumb_func_end SetWeather
thumb_func_start sub_807B18C
sub_807B18C: @ 807B18C
push {lr}
bl SetSav1Weather
bl sav1_get_weather_probably
lsls r0, 24
lsrs r0, 24
bl SetCurrentAndNextWeather
pop {r0}
bx r0
thumb_func_end sub_807B18C
thumb_func_start DoCurrentWeather
DoCurrentWeather: @ 807B1A4
push {lr}
bl sav1_get_weather_probably
lsls r0, 24
lsrs r0, 24
bl SetNextWeather
pop {r0}
bx r0
thumb_func_end DoCurrentWeather
thumb_func_start sub_807B1B8
sub_807B1B8: @ 807B1B8
push {lr}
bl sav1_get_weather_probably
lsls r0, 24
lsrs r0, 24
bl SetCurrentAndNextWeather
pop {r0}
bx r0
thumb_func_end sub_807B1B8
thumb_func_start TranslateWeatherNum
TranslateWeatherNum: @ 807B1CC
push {lr}
lsls r0, 24
lsrs r0, 24
cmp r0, 0x15
bhi _0807B294
lsls r0, 2
ldr r1, _0807B1E0 @ =_0807B1E4
adds r0, r1
ldr r0, [r0]
mov pc, r0
.align 2, 0
_0807B1E0: .4byte _0807B1E4
.align 2, 0
_0807B1E4:
.4byte _0807B294
.4byte _0807B23C
.4byte _0807B240
.4byte _0807B244
.4byte _0807B248
.4byte _0807B24C
.4byte _0807B250
.4byte _0807B254
.4byte _0807B258
.4byte _0807B25C
.4byte _0807B260
.4byte _0807B264
.4byte _0807B268
.4byte _0807B26C
.4byte _0807B270
.4byte _0807B294
.4byte _0807B294
.4byte _0807B294
.4byte _0807B294
.4byte _0807B294
.4byte _0807B274
.4byte _0807B27C
_0807B23C:
movs r0, 0x1
b _0807B296
_0807B240:
movs r0, 0x2
b _0807B296
_0807B244:
movs r0, 0x3
b _0807B296
_0807B248:
movs r0, 0x4
b _0807B296
_0807B24C:
movs r0, 0x5
b _0807B296
_0807B250:
movs r0, 0x6
b _0807B296
_0807B254:
movs r0, 0x7
b _0807B296
_0807B258:
movs r0, 0x8
b _0807B296
_0807B25C:
movs r0, 0x9
b _0807B296
_0807B260:
movs r0, 0xA
b _0807B296
_0807B264:
movs r0, 0xB
b _0807B296
_0807B268:
movs r0, 0xC
b _0807B296
_0807B26C:
movs r0, 0xD
b _0807B296
_0807B270:
movs r0, 0xE
b _0807B296
_0807B274:
ldr r1, _0807B278 @ =gUnknown_83C65C0
b _0807B27E
.align 2, 0
_0807B278: .4byte gUnknown_83C65C0
_0807B27C:
ldr r1, _0807B28C @ =gUnknown_83C65C4
_0807B27E:
ldr r0, _0807B290 @ =gSaveBlock1Ptr
ldr r0, [r0]
adds r0, 0x2F
ldrb r0, [r0]
adds r0, r1
ldrb r0, [r0]
b _0807B296
.align 2, 0
_0807B28C: .4byte gUnknown_83C65C4
_0807B290: .4byte gSaveBlock1Ptr
_0807B294:
movs r0, 0
_0807B296:
pop {r1}
bx r1
thumb_func_end TranslateWeatherNum
thumb_func_start UpdateWeatherPerDay
UpdateWeatherPerDay: @ 807B29C
lsls r0, 16
ldr r1, _0807B2B8 @ =gSaveBlock1Ptr
ldr r2, [r1]
adds r2, 0x2F
lsrs r0, 16
ldrb r1, [r2]
adds r0, r1
lsls r0, 16
movs r1, 0xC0
lsls r1, 10
ands r1, r0
lsrs r1, 16
strb r1, [r2]
bx lr
.align 2, 0
_0807B2B8: .4byte gSaveBlock1Ptr
thumb_func_end UpdateWeatherPerDay
thumb_func_start UpdateRainCounter
UpdateRainCounter: @ 807B2BC
push {lr}
lsls r0, 24
lsls r1, 24
lsrs r2, r0, 24
cmp r0, r1
beq _0807B2D6
cmp r2, 0x3
beq _0807B2D0
cmp r2, 0x5
bne _0807B2D6
_0807B2D0:
movs r0, 0x28
bl IncrementGameStat
_0807B2D6:
pop {r0}
bx r0
thumb_func_end UpdateRainCounter
.align 2, 0 @ Don't pad with nop
+2 -2
View File
@@ -4645,7 +4645,7 @@ _08057050:
_08057056:
bl FieldEffectActiveListClear
bl StartWeather
bl sub_807B1B8
bl ResumePausedWeather
cmp r4, 0
bne _0805706A
bl SetUpFieldTasks
@@ -5401,7 +5401,7 @@ _0805769C:
bl InstallCameraPanAheadCallback
bl FieldEffectActiveListClear
bl StartWeather
bl sub_807B1B8
bl ResumePausedWeather
bl SetUpFieldTasks
bl mapheader_run_script_with_tag_x5
b _0805772A
-6
View File
@@ -7,12 +7,6 @@
.section .rodata
.align 2
gUnknown_83C65C0:: @ 83C65C0
.byte 0x02, 0x03, 0x05, 0x03
gUnknown_83C65C4:: @ 83C65C4
.byte 0x02, 0x02, 0x03, 0x02
gUnknown_83C65C8:: @ 83C65C8
.2byte 0x0000, 0x0042, 0x0005, 0x0049, 0x000a, 0x004e
+1
View File
@@ -10,5 +10,6 @@
// Exported ROM declarations
void BlendPalette(u16, u16, u8, u16);
void sub_8045314(u16 * palbuff, u16 blend_pal, u32 coefficient, s32 size);
#endif //GUARD_BLEND_PALETTE_H
+2
View File
@@ -16,5 +16,7 @@
#define WEATHER_DROUGHT 12 // unused and broken in overworld
#define WEATHER_DOWNPOUR 13 // unused
#define WEATHER_UNDERWATER_BUBBLES 14 // unused
#define WEATHER_ROUTE119_CYCLE 20 // unused
#define WEATHER_ROUTE123_CYCLE 21 // unused
#endif // GUARD_CONSTANTS_WEATHER_H
+116
View File
@@ -2,6 +2,119 @@
#define GUARD_WEATHER_H
#include "global.h"
#include "constants/field_weather.h"
struct Weather
{
union
{
struct
{
struct Sprite *rainSprites[MAX_RAIN_SPRITES];
struct Sprite *snowflakeSprites[101];
struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
} s1;
struct
{
u8 filler0[0xA0];
struct Sprite *fogHSprites[NUM_FOG_HORIZONTAL_SPRITES];
struct Sprite *ashSprites[NUM_ASH_SPRITES];
struct Sprite *fogDSprites[NUM_FOG_DIAGONAL_SPRITES];
struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
} s2;
} sprites;
u8 gammaShifts[19][32];
u8 altGammaShifts[19][32];
s8 gammaIndex;
s8 gammaTargetIndex;
u8 gammaStepDelay;
u8 gammaStepFrameCounter;
u16 fadeDestColor;
/*0x6C6*/ u8 palProcessingState;
/*0x6C7*/ u8 fadeScreenCounter;
/*0x6C8*/ bool8 readyForInit;
/*0x6C9*/ u8 taskId;
/*0x6CA*/ u8 unknown_6CA;
u8 unknown_6CB;
u16 initStep;
u16 finishStep;
u8 currWeather;
u8 nextWeather;
u8 weatherGfxLoaded;
bool8 weatherChangeComplete;
u8 weatherPicSpritePalIndex;
u8 altGammaSpritePalIndex;
u16 rainSpriteVisibleCounter;
u8 curRainSpriteIndex;
u8 targetRainSpriteCount;
u8 rainSpriteCount;
u8 rainSpriteVisibleDelay;
u8 isDownpour;
u8 rainStrength;
/*0x6DE*/ u8 cloudSpritesCreated;
u8 filler_6DF[1];
u16 snowflakeVisibleCounter;
u16 unknown_6E2;
u8 snowflakeSpriteCount;
u8 targetSnowflakeSpriteCount;
u16 unknown_6E6;
u16 thunderCounter;
u8 unknown_6EA;
u8 unknown_6EB;
u8 unknown_6EC;
u8 thunderTriggered;
u16 fogHScrollPosX;
u16 fogHScrollCounter;
u16 fogHScrollOffset;
u8 lightenedFogSpritePals[6];
u8 lightenedFogSpritePalsCount;
u8 fogHSpritesCreated;
u16 ashBaseSpritesX;
u16 unknown_6FE;
u8 ashSpritesCreated;
u8 filler_701[3];
u32 sandstormXOffset;
u32 sandstormYOffset;
u8 filler_70C[2];
u16 sandstormBaseSpritesX;
u16 sandstormPosY;
u16 sandstormWaveIndex;
u16 sandstormWaveCounter;
u8 sandstormSpritesCreated;
u8 sandstormSwirlSpritesCreated;
u16 fogDBaseSpritesX;
u16 fogDPosY;
u16 fogDScrollXCounter;
u16 fogDScrollYCounter;
u16 fogDXOffset;
u16 fogDYOffset;
u8 fogDSpritesCreated;
u8 filler_725[1];
u16 bubblesDelayCounter;
u16 bubblesDelayIndex;
u16 bubblesCoordsIndex;
u16 bubblesSpriteCount;
u8 bubblesSpritesCreated;
u8 filler_72F;
u16 currBlendEVA;
u16 currBlendEVB;
u16 targetBlendEVA;
u16 targetBlendEVB;
u8 blendUpdateCounter;
u8 blendFrameCounter;
u8 blendDelay;
u8 filler_73B[0x3C-0x3B];
s16 unknown_73C;
s16 unknown_73E;
s16 unknown_740;
s16 unknown_742;
u8 filler_744[0xD-4];
s8 loadDroughtPalsIndex;
u8 loadDroughtPalsOffset;
};
extern struct Weather *const gWeatherPtr;
void FadeScreen(u8 mode, s8 delay);
@@ -22,4 +135,7 @@ void UpdateSpritePaletteWithWeather(u8 palIdx);
void ResetPreservedPalettesInWeather(void);
void PreservePaletteInWeather(u8 palIdx);
void SetNextWeather(u8 weather);
void SetCurrentAndNextWeather(u8 weather);
#endif // GUARD_WEATHER_H
+55
View File
@@ -0,0 +1,55 @@
#ifndef GUARD_FIELD_WEATHER_EFFECTS_H
#define GUARD_FIELD_WEATHER_EFFECTS_H
bool8 Ash_Finish(void);
bool8 Bubbles_Finish(void);
bool8 Clouds_Finish(void);
bool8 Fog1_Finish(void);
bool8 Fog2_Finish(void);
bool8 LightRain_Finish(void);
bool8 Rain_Finish(void);
bool8 Sandstorm_Finish(void);
bool8 Snow_Finish(void);
bool8 sub_807B434(void);
bool8 sub_807B6BC(void);
bool8 sub_807D8D0(void);
void Ash_InitAll(void);
void Ash_InitVars(void);
void Ash_Main(void);
void Bubbles_InitAll(void);
void Bubbles_InitVars(void);
void Bubbles_Main(void);
void Clouds_InitAll(void);
void Clouds_InitVars(void);
void Clouds_Main(void);
void Drought_InitAll(void);
void Drought_InitVars(void);
void Drought_Main(void);
void Fog1_InitAll(void);
void Fog1_InitVars(void);
void Fog1_Main(void);
void Fog2_InitAll(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void LightRain_InitAll(void);
void LightRain_InitVars(void);
void LightRain_Main(void);
void Rain_Main(void);
void Sandstorm_InitAll(void);
void Sandstorm_InitVars(void);
void Sandstorm_Main(void);
void Snow_InitAll(void);
void Snow_InitVars(void);
void Weather11_InitAll(void);
void Weather11_InitVars(void);
void Weather2_InitAll(void);
void Weather2_InitVars(void);
void nullsub_48(void);
void nullsub_49(void);
void snowflakes_progress2(void);
void sub_807C2E4(void);
void sub_807C358(void);
void sub_807C388(void);
void sub_807C3F4(void);
#endif //GUARD_FIELD_WEATHER_EFFECTS_H
+1 -1
View File
@@ -749,7 +749,7 @@ struct SaveBlock1
/*0x0024*/ struct WarpData escapeWarp;
/*0x002C*/ u16 savedMusic;
/*0x002E*/ u8 weather;
/*0x002F*/ u8 filler_2F;
/*0x002F*/ u8 weatherCycleStage;
/*0x0030*/ u8 flashLevel;
/*0x0032*/ u16 mapLayoutId;
/*0x0034*/ u8 playerPartyCount;
+15 -176
View File
@@ -4,6 +4,7 @@
#include "field_effect.h"
#include "field_weather.h"
#include "field_weather_util.h"
#include "field_weather_effects.h"
#include "task.h"
#include "trig.h"
#include "constants/field_weather.h"
@@ -39,116 +40,6 @@ struct WeatherCallbacks
bool8 (*finish)(void);
};
struct Weather
{
union
{
struct
{
struct Sprite *rainSprites[MAX_RAIN_SPRITES];
struct Sprite *snowflakeSprites[101];
struct Sprite *cloudSprites[NUM_CLOUD_SPRITES];
} s1;
struct
{
u8 filler0[0xA0];
struct Sprite *fogHSprites[NUM_FOG_HORIZONTAL_SPRITES];
struct Sprite *ashSprites[NUM_ASH_SPRITES];
struct Sprite *fogDSprites[NUM_FOG_DIAGONAL_SPRITES];
struct Sprite *sandstormSprites1[NUM_SANDSTORM_SPRITES];
struct Sprite *sandstormSprites2[NUM_SWIRL_SANDSTORM_SPRITES];
} s2;
} sprites;
u8 gammaShifts[19][32];
u8 altGammaShifts[19][32];
s8 gammaIndex;
s8 gammaTargetIndex;
u8 gammaStepDelay;
u8 gammaStepFrameCounter;
u16 fadeDestColor;
/*0x6C6*/ u8 palProcessingState;
/*0x6C7*/ u8 fadeScreenCounter;
/*0x6C8*/ bool8 readyForInit;
/*0x6C9*/ u8 taskId;
/*0x6CA*/ u8 unknown_6CA;
u8 unknown_6CB;
u16 initStep;
u16 finishStep;
u8 currWeather;
u8 nextWeather;
u8 weatherGfxLoaded;
bool8 weatherChangeComplete;
u8 weatherPicSpritePalIndex;
u8 altGammaSpritePalIndex;
u16 rainSpriteVisibleCounter;
u8 curRainSpriteIndex;
u8 targetRainSpriteCount;
u8 rainSpriteCount;
u8 rainSpriteVisibleDelay;
u8 isDownpour;
u8 rainStrength;
/*0x6DE*/ u8 cloudSpritesCreated;
u8 filler_6DF[1];
u16 snowflakeVisibleCounter;
u16 unknown_6E2;
u8 snowflakeSpriteCount;
u8 targetSnowflakeSpriteCount;
u16 unknown_6E6;
u16 thunderCounter;
u8 unknown_6EA;
u8 unknown_6EB;
u8 unknown_6EC;
u8 thunderTriggered;
u16 fogHScrollPosX;
u16 fogHScrollCounter;
u16 fogHScrollOffset;
u8 lightenedFogSpritePals[6];
u8 lightenedFogSpritePalsCount;
u8 fogHSpritesCreated;
u16 ashBaseSpritesX;
u16 unknown_6FE;
u8 ashSpritesCreated;
u8 filler_701[3];
u32 sandstormXOffset;
u32 sandstormYOffset;
u8 filler_70C[2];
u16 sandstormBaseSpritesX;
u16 sandstormPosY;
u16 sandstormWaveIndex;
u16 sandstormWaveCounter;
u8 sandstormSpritesCreated;
u8 sandstormSwirlSpritesCreated;
u16 fogDBaseSpritesX;
u16 fogDPosY;
u16 fogDScrollXCounter;
u16 fogDScrollYCounter;
u16 fogDXOffset;
u16 fogDYOffset;
u8 fogDSpritesCreated;
u8 filler_725[1];
u16 bubblesDelayCounter;
u16 bubblesDelayIndex;
u16 bubblesCoordsIndex;
u16 bubblesSpriteCount;
u8 bubblesSpritesCreated;
u8 filler_72F;
u16 currBlendEVA;
u16 currBlendEVB;
u16 targetBlendEVA;
u16 targetBlendEVB;
u8 blendUpdateCounter;
u8 blendFrameCounter;
u8 blendDelay;
u8 filler_73B[0x3C-0x3B];
s16 unknown_73C;
s16 unknown_73E;
s16 unknown_740;
s16 unknown_742;
u8 filler_744[0xD-4];
s8 loadDroughtPalsIndex;
u8 loadDroughtPalsOffset;
};
EWRAM_DATA struct Weather gWeather = {};
EWRAM_DATA u8 sFieldEffectPaletteGammaTypes[32] = {};
EWRAM_DATA const u8 *sPaletteGammaTypes = NULL;
@@ -172,72 +63,6 @@ void DoNothing(void);
void ApplyFogBlend(u8 blendCoeff, u16 blendColor);
bool8 LightenSpritePaletteInFog(u8 paletteIndex);
void Weather_SetBlendCoeffs(u8, u8);
bool8 Ash_Finish(void);
bool8 Bubbles_Finish(void);
bool8 Clouds_Finish(void);
bool8 Fog1_Finish(void);
bool8 Fog2_Finish(void);
bool8 LightRain_Finish(void);
bool8 Rain_Finish(void);
bool8 Sandstorm_Finish(void);
bool8 Snow_Finish(void);
bool8 sub_807B434(void);
bool8 sub_807B6BC(void);
bool8 sub_807D8D0(void);
void Ash_InitAll(void);
void Ash_InitVars(void);
void Ash_Main(void);
void Bubbles_InitAll(void);
void Bubbles_InitVars(void);
void Bubbles_Main(void);
void Clouds_InitAll(void);
void Clouds_InitVars(void);
void Clouds_Main(void);
void Drought_InitAll(void);
void Drought_InitVars(void);
void Drought_Main(void);
void Fog1_InitAll(void);
void Fog1_InitVars(void);
void Fog1_Main(void);
void Fog2_InitAll(void);
void Fog2_InitVars(void);
void Fog2_Main(void);
void LightRain_InitAll(void);
void LightRain_InitVars(void);
void LightRain_Main(void);
void Rain_Main(void);
void Sandstorm_InitAll(void);
void Sandstorm_InitVars(void);
void Sandstorm_Main(void);
void Snow_InitAll(void);
void Snow_InitVars(void);
void Weather11_InitAll(void);
void Weather11_InitVars(void);
void Weather2_InitAll(void);
void Weather2_InitVars(void);
void nullsub_48(void);
void nullsub_49(void);
void snowflakes_progress2(void);
void sub_807C2E4(void);
void sub_807C358(void);
void sub_807C388(void);
void sub_807C3F4(void);
const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz");
const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz");
const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz");
const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz");
const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz");
const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz");
const u32 *const gUnknown_83C2BA4[] = {
gUnknown_83BFBE4,
gUnknown_83C0408,
gUnknown_83C0C00,
gUnknown_83C139C,
gUnknown_83C1BB8,
gUnknown_83C2380
};
struct Weather *const gWeatherPtr = &gWeather;
@@ -1318,3 +1143,17 @@ void ResetPreservedPalettesInWeather(void)
{
sPaletteGammaTypes = sBasePaletteGammaTypes;
}
void sub_807B0C4(u16 *palbuf, u16 *unused, u32 size)
{
switch (gWeatherPtr->currWeather)
{
case WEATHER_RAIN:
case WEATHER_SNOW:
case WEATHER_RAIN_THUNDERSTORM:
case WEATHER_SHADE:
case WEATHER_DOWNPOUR:
sub_8045314(palbuf, RGB_BLACK, 3, size);
break;
}
}
+105
View File
@@ -1,4 +1,10 @@
#include "global.h"
#include "field_weather.h"
#include "overworld.h"
#include "constants/weather.h"
u8 TranslateWeatherNum(u8 weather);
void UpdateRainCounter(u8 newWeather, u8 oldWeather);
const u16 gUnknown_83C2D00[] = INCBIN_U16("graphics/field_effects/unk_83C2D00.gbapal");
const u16 gUnknown_83C2D20[] = INCBIN_U16("graphics/field_effects/unk_83C2D20.gbapal");
@@ -10,3 +16,102 @@ const u16 gUnknown_83C4580[] = INCBIN_U16("graphics/field_effects/unk_83C4580.4b
const u16 gUnknown_83C45C0[] = INCBIN_U16("graphics/field_effects/unk_83C45C0.4bpp");
const u16 gUnknown_83C55C0[] = INCBIN_U16("graphics/field_effects/unk_83C55C0.4bpp");
const u16 gUnknown_83C5BC0[] = INCBIN_U16("graphics/field_effects/unk_83C5BC0.4bpp");
void SetSav1Weather(u32 weather)
{
u8 oldWeather = gSaveBlock1Ptr->weather;
gSaveBlock1Ptr->weather = TranslateWeatherNum(weather);
UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
}
u8 GetSav1Weather(void)
{
return gSaveBlock1Ptr->weather;
}
void SetSav1WeatherFromCurrMapHeader(void)
{
u8 oldWeather = gSaveBlock1Ptr->weather;
gSaveBlock1Ptr->weather = TranslateWeatherNum(gMapHeader.weather);
UpdateRainCounter(gSaveBlock1Ptr->weather, oldWeather);
}
void SetWeather(u32 weather)
{
SetSav1Weather(weather);
SetNextWeather(GetSav1Weather());
}
void SetWeather_Unused(u32 weather)
{
SetSav1Weather(weather);
SetCurrentAndNextWeather(GetSav1Weather());
}
void DoCurrentWeather(void)
{
u8 weather = GetSav1Weather();
SetNextWeather(weather);
}
void ResumePausedWeather(void)
{
u8 weather = GetSav1Weather();
SetCurrentAndNextWeather(weather);
}
const u8 sWeatherCycleRoute119[] =
{
WEATHER_SUNNY,
WEATHER_RAIN,
WEATHER_RAIN_THUNDERSTORM,
WEATHER_RAIN,
};
const u8 sWeatherCycleRoute123[] =
{
WEATHER_SUNNY,
WEATHER_SUNNY,
WEATHER_RAIN,
WEATHER_SUNNY,
};
u8 TranslateWeatherNum(u8 weather)
{
switch (weather)
{
case WEATHER_NONE: return WEATHER_NONE;
case WEATHER_SUNNY_CLOUDS: return WEATHER_SUNNY_CLOUDS;
case WEATHER_SUNNY: return WEATHER_SUNNY;
case WEATHER_RAIN: return WEATHER_RAIN;
case WEATHER_SNOW: return WEATHER_SNOW;
case WEATHER_RAIN_THUNDERSTORM: return WEATHER_RAIN_THUNDERSTORM;
case WEATHER_FOG_HORIZONTAL: return WEATHER_FOG_HORIZONTAL;
case WEATHER_VOLCANIC_ASH: return WEATHER_VOLCANIC_ASH;
case WEATHER_SANDSTORM: return WEATHER_SANDSTORM;
case WEATHER_FOG_DIAGONAL: return WEATHER_FOG_DIAGONAL;
case WEATHER_UNDERWATER: return WEATHER_UNDERWATER;
case WEATHER_SHADE: return WEATHER_SHADE;
case WEATHER_DROUGHT: return WEATHER_DROUGHT;
case WEATHER_DOWNPOUR: return WEATHER_DOWNPOUR;
case WEATHER_UNDERWATER_BUBBLES: return WEATHER_UNDERWATER_BUBBLES;
case WEATHER_ROUTE119_CYCLE: return sWeatherCycleRoute119[gSaveBlock1Ptr->weatherCycleStage];
case WEATHER_ROUTE123_CYCLE: return sWeatherCycleRoute123[gSaveBlock1Ptr->weatherCycleStage];
default: return WEATHER_NONE;
}
}
void UpdateWeatherPerDay(u16 increment)
{
u16 weatherStage = gSaveBlock1Ptr->weatherCycleStage + increment;
weatherStage %= 4;
gSaveBlock1Ptr->weatherCycleStage = weatherStage;
}
void UpdateRainCounter(u8 newWeather, u8 oldWeather)
{
if (newWeather != oldWeather
&& (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM))
IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
}
+16
View File
@@ -305,6 +305,22 @@ static const u16 gUnknown_LG_83BFA10[] = {
};
#endif
const u32 gUnknown_83BFBE4[] = INCBIN_U32("graphics/field_effects/unk_83BFBE4.bin.lz");
const u32 gUnknown_83C0408[] = INCBIN_U32("graphics/field_effects/unk_83C0408.bin.lz");
const u32 gUnknown_83C0C00[] = INCBIN_U32("graphics/field_effects/unk_83C0C00.bin.lz");
const u32 gUnknown_83C139C[] = INCBIN_U32("graphics/field_effects/unk_83C139C.bin.lz");
const u32 gUnknown_83C1BB8[] = INCBIN_U32("graphics/field_effects/unk_83C1BB8.bin.lz");
const u32 gUnknown_83C2380[] = INCBIN_U32("graphics/field_effects/unk_83C2380.bin.lz");
const u32 *const gUnknown_83C2BA4[] = {
gUnknown_83BFBE4,
gUnknown_83C0408,
gUnknown_83C0C00,
gUnknown_83C139C,
gUnknown_83C1BB8,
gUnknown_83C2380
};
void CB2_InitTitleScreen(void)
{
switch (gMain.state)