field_weather_util
This commit is contained in:
@@ -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
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user