summaryrefslogtreecommitdiff
path: root/src/field/field_weather_effects.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/field/field_weather_effects.c')
-rw-r--r--src/field/field_weather_effects.c2381
1 files changed, 0 insertions, 2381 deletions
diff --git a/src/field/field_weather_effects.c b/src/field/field_weather_effects.c
deleted file mode 100644
index eff702f8c..000000000
--- a/src/field/field_weather_effects.c
+++ /dev/null
@@ -1,2381 +0,0 @@
-#include "global.h"
-#include "field_map_obj.h"
-#include "field_weather.h"
-#include "overworld.h"
-#include "random.h"
-#include "script.h"
-#include "constants/weather.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "sprite.h"
-#include "task.h"
-#include "trig.h"
-
-extern struct Weather *const gWeatherPtr;
-
-const u16 gUnknown_08397108[] = INCBIN_U16("graphics/weather/1.gbapal");
-const u16 gUnknown_08397128[] = INCBIN_U16("graphics/weather/2.gbapal");
-const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp");
-const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp");
-const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp");
-const u8 gWeatherSnow1Tiles[] = INCBIN_U8("graphics/weather/snow0.4bpp");
-const u8 gWeatherSnow2Tiles[] = INCBIN_U8("graphics/weather/snow1.4bpp");
-const u8 gWeatherBubbleTiles[] = INCBIN_U8("graphics/weather/bubble.4bpp");
-const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp");
-const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp");
-const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp");
-
-static const struct Coords16 gUnknown_0839A9C8[] =
-{
- { 0, 66},
- { 5, 73},
- {10, 78},
-};
-
-static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, sizeof(gWeatherCloudTiles), 0x1200};
-
-static const struct OamData gOamData_839A9DC =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 1,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 3,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd gSpriteAnim_839A9E4[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_839A9EC[] =
-{
- gSpriteAnim_839A9E4,
-};
-
-void sub_807E0F4(struct Sprite *);
-static const struct SpriteTemplate sCloudSpriteTemplate =
-{
- .tileTag = 4608,
- .paletteTag = 4609,
- .oam = &gOamData_839A9DC,
- .anims = gSpriteAnimTable_839A9EC,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807E0F4,
-};
-
-extern void sub_807D5BC(s8 gammaIndex);
-extern void sub_807DA14(void);
-extern void sub_807DA4C(void);
-extern void Weather_SetTargetBlendCoeffs(u8 a, u8 b, int c);
-extern bool8 Weather_UpdateBlend(void);
-extern void SetRainStrengthFromSoundEffect(u16 sndEff);
-extern void sub_807D5F0(u8 a, u8 b, u8 c);
-
-//------------------------------------------------------------------------------
-// Clouds
-//------------------------------------------------------------------------------
-
-void Clouds_InitVars(void)
-{
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->initStep = 0;
- if (gWeatherPtr->cloudSpritesCreated == FALSE)
- Weather_SetBlendCoeffs(0, 16);
-}
-
-void Clouds_Main(void);
-
-void Clouds_InitAll(void)
-{
- Clouds_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Clouds_Main();
-}
-
-void CreateCloudSprites(void);
-
-void Clouds_Main(void)
-{
- switch (gWeatherPtr->initStep)
- {
- case 0:
- CreateCloudSprites();
- gWeatherPtr->initStep++;
- break;
- case 1:
- Weather_SetTargetBlendCoeffs(12, 8, 1);
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (Weather_UpdateBlend())
- {
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- }
- break;
- }
-}
-
-void sub_807E0A0(void);
-
-bool8 Clouds_Finish(void)
-{
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- Weather_SetTargetBlendCoeffs(0, 16, 1);
- gWeatherPtr->finishStep++;
- return TRUE;
- case 1:
- if (Weather_UpdateBlend())
- {
- sub_807E0A0();
- gWeatherPtr->finishStep++;
- }
- return TRUE;
- }
- return FALSE;
-}
-
-//------------------------------------------------------------------------------
-// Weather 2
-//------------------------------------------------------------------------------
-
-void Weather2_InitVars(void)
-{
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
-}
-
-void Weather2_InitAll(void)
-{
- Weather2_InitVars();
-}
-
-void Weather2_Main(void)
-{
-}
-
-int Weather2_Finish(void)
-{
- return 0;
-}
-
-void CreateCloudSprites(void)
-{
- u16 i;
-
- if (gWeatherPtr->cloudSpritesCreated == TRUE)
- return;
- LoadSpriteSheet(&sCloudSpriteSheet);
- LoadCustomWeatherSpritePalette(gUnknown_08397108);
- for (i = 0; i < 3; i++)
- {
- u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF);
-
- if (spriteId != 64)
- {
- struct Sprite *sprite;
-
- gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId];
- sprite = gWeatherPtr->sprites.s1.cloudSprites[i];
- sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y);
- sprite->coordOffsetEnabled = TRUE;
- }
- else
- {
- gWeatherPtr->sprites.s1.cloudSprites[i] = NULL;
- }
- }
- gWeatherPtr->cloudSpritesCreated = TRUE;
-}
-
-void sub_807E0A0(void)
-{
- u16 i;
-
- if (gWeatherPtr->cloudSpritesCreated == FALSE)
- return;
- for (i = 0; i < 3; i++)
- {
- if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]);
- }
- FreeSpriteTilesByTag(0x1200);
- gWeatherPtr->cloudSpritesCreated = FALSE;
-}
-
-void sub_807E0F4(struct Sprite *sprite)
-{
- sprite->data[0] = (sprite->data[0] + 1) & 1;
- if (sprite->data[0] != 0)
- sprite->pos1.x--;
-}
-
-//------------------------------------------------------------------------------
-// Drought
-//------------------------------------------------------------------------------
-
-void Drought_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 0;
-}
-
-void Drought_Main(void);
-
-void Drought_InitAll(void)
-{
- Drought_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Drought_Main();
-}
-
-void Drought_Main(void)
-{
- switch (gWeatherPtr->initStep)
- {
- case 0:
- if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER)
- gWeatherPtr->initStep++;
- break;
- case 1:
- ResetDroughtWeatherPaletteLoading();
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (LoadDroughtWeatherPalettes() == FALSE)
- gWeatherPtr->initStep++;
- break;
- case 3:
- sub_807DA14();
- gWeatherPtr->initStep++;
- break;
- case 4:
- sub_807DA4C();
- if (gWeatherPtr->unknown_73C == 6)
- {
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- }
- break;
- default:
- sub_807DA4C();
- break;
- }
-}
-
-int Drought_Finish(void)
-{
- return 0;
-}
-
-void task50_0807B6D4(u8);
-
-void sub_807E25C(void)
-{
- CreateTask(task50_0807B6D4, 0x50);
-}
-
-#define tState data[0]
-#define tBlendY data[1]
-#define tBlendDelay data[2]
-#define tWinRange data[3]
-
-void task50_0807B6D4(u8 taskId)
-{
- struct Task *task = &gTasks[taskId];
-
- switch (task->tState)
- {
- case 0:
- task->tBlendY = 0;
- task->tBlendDelay = 0;
- task->tWinRange = REG_WININ;
- REG_WININ = WIN_RANGE(63, 63);
- REG_BLDCNT = BLDCNT_TGT1_BG1 | BLDCNT_TGT1_BG2 | BLDCNT_TGT1_BG3 | BLDCNT_TGT1_OBJ
- | BLDCNT_EFFECT_LIGHTEN;
- REG_BLDY = 0;
- task->tState++;
- // fall through
- case 1:
- task->tBlendY += 3;
- if (task->tBlendY > 16)
- task->tBlendY = 16;
- REG_BLDY = task->tBlendY;
- if (task->tBlendY >= 16)
- task->tState++;
- break;
- case 2:
- task->tBlendDelay++;
- if (task->tBlendDelay > 9)
- {
- task->tBlendDelay = 0;
- task->tBlendY--;
- if (task->tBlendY <= 0)
- {
- task->tBlendY = 0;
- task->tState++;
- }
- REG_BLDY = task->tBlendY;
- }
- break;
- case 3:
- REG_BLDCNT = 0;
- REG_BLDY = 0;
- REG_WININ = task->tWinRange;
- task->tState++;
- break;
- case 4:
- EnableBothScriptContexts();
- DestroyTask(taskId);
- break;
- }
-}
-
-#undef tState
-#undef tBlendY
-#undef tBlendDelay
-#undef tWinRange
-
-//------------------------------------------------------------------------------
-// Light Rain
-//------------------------------------------------------------------------------
-
-void LightRain_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6D6 = 0;
- gWeatherPtr->unknown_6DB = 8;
- gWeatherPtr->unknown_6DC = 0;
- gWeatherPtr->unknown_6D9 = 10;
- gWeatherPtr->gammaTargetIndex = 3;
- gWeatherPtr->gammaStepDelay = 20;
- SetRainStrengthFromSoundEffect(SE_T_KOAME);
-}
-
-void LightRain_Main(void);
-
-void LightRain_InitAll(void)
-{
- LightRain_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- LightRain_Main();
-}
-
-void LoadRainSpriteSheet(void);
-u8 CreateRainSprite(void);
-u8 sub_807E8E8(void);
-
-void LightRain_Main(void)
-{
- switch (gWeatherPtr->initStep)
- {
- case 0:
- LoadRainSpriteSheet();
- gWeatherPtr->initStep++;
- break;
- case 1:
- if (CreateRainSprite() == 0)
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (sub_807E8E8() == FALSE)
- {
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- }
- break;
- }
-}
-
-void DestroyRainSprites(void);
-
-bool8 LightRain_Finish(void)
-{
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
- || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
- || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
- {
- gWeatherPtr->finishStep = 0xFF;
- return FALSE;
- }
- else
- {
- gWeatherPtr->unknown_6D9 = 0;
- gWeatherPtr->finishStep++;
- }
- // fall through
- case 1:
- if (sub_807E8E8() == FALSE)
- {
- DestroyRainSprites();
- gWeatherPtr->finishStep++;
- return FALSE;
- }
- return TRUE;
- }
- return FALSE;
-}
-
-// defined below
-extern const s16 gUnknown_0839AABC[][2];
-extern const u16 gUnknown_0839AAC4[][2];
-
-void sub_807E4EC(struct Sprite *sprite)
-{
- u32 randVal;
- u16 r6;
- s32 r4;
- s32 r0;
-
- if (sprite->data[1] == 0)
- sprite->data[1] = 361;
- randVal = sprite->data[1] * 1103515245 + 12345;
- sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600;
-
- r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
-
- r4 = sprite->data[1] % 30;
- sprite->data[2] = r4 * 8; // useless assignment
-
- r0 = sprite->data[1] / 30;
- sprite->data[3] = r0 * 8; // useless assignment
-
- sprite->data[2] = r4;
- sprite->data[2] <<= 7;
-
- sprite->data[3] = r0;
- sprite->data[3] <<= 7;
-
- sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6;
- sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6;
-
- StartSpriteAnim(sprite, 0);
- sprite->data[4] = 0;
- sprite->coordOffsetEnabled = FALSE;
- sprite->data[0] = r6;
-}
-
-void sub_807E5C0(struct Sprite *sprite)
-{
- if (sprite->data[4] == 0)
- {
- sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0];
- sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1];
- sprite->pos1.x = sprite->data[2] >> 4;
- sprite->pos1.y = sprite->data[3] >> 4;
-
- if (sprite->data[5] != 0
- && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248)
- && sprite->pos1.y >= -16 && sprite->pos1.y <= 176)
- sprite->invisible = FALSE;
- else
- sprite->invisible = TRUE;
-
- sprite->data[0]--;
- if (sprite->data[0] == 0)
- {
- StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1);
- sprite->data[4] = 1;
- sprite->pos1.x -= gSpriteCoordOffsetX;
- sprite->pos1.y -= gSpriteCoordOffsetY;
- sprite->coordOffsetEnabled = TRUE;
- }
- }
- else if (sprite->animEnded)
- {
- sprite->invisible = TRUE;
- sub_807E4EC(sprite);
- }
-}
-
-void sub_807E6C4(struct Sprite *sprite)
-{
- if (sprite->data[0] == 0)
- {
- sub_807E4EC(sprite);
- sprite->callback = sub_807E5C0;
- }
- else
- {
- sprite->data[0]--;
- }
-}
-
-void sub_807E6F0(struct Sprite *sprite, u16 b)
-{
- u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0];
- u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
- u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8);
-
- while (--r6 != 0xFFFF)
- sub_807E4EC(sprite);
- if (r4 < r8)
- {
- while (--r4 != 0xFFFF)
- sub_807E5C0(sprite);
- sprite->data[6] = 0;
- }
- else
- {
- sprite->data[0] = r4 - r8;
- sprite->invisible = TRUE;
- sprite->data[6] = 1;
- }
-}
-
-extern const struct SpriteSheet sRainSpriteSheet; // defined below
-
-void LoadRainSpriteSheet(void)
-{
- LoadSpriteSheet(&sRainSpriteSheet);
-}
-
-static const struct Coords16 sRainSpriteCoords[] =
-{
- { 0, 0},
- { 0, 160},
- { 0, 64},
- {144, 224},
- {144, 128},
- { 32, 32},
- { 32, 192},
- { 32, 96},
- { 72, 128},
- { 72, 32},
- { 72, 192},
- {216, 96},
- {216, 0},
- {104, 160},
- {104, 64},
- {104, 224},
- {144, 0},
- {144, 160},
- {144, 64},
- { 32, 224},
- { 32, 128},
- { 72, 32},
- { 72, 192},
- { 48, 96},
-};
-
-static const struct OamData gOamData_839AA68 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 2,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 2,
- .affineParam = 0,
-};
-
-static const union AnimCmd gSpriteAnim_839AA70[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd gSpriteAnim_839AA78[] =
-{
- ANIMCMD_FRAME(8, 3),
- ANIMCMD_FRAME(32, 2),
- ANIMCMD_FRAME(40, 2),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AA88[] =
-{
- ANIMCMD_FRAME(8, 3),
- ANIMCMD_FRAME(16, 3),
- ANIMCMD_FRAME(24, 4),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_839AA98[] =
-{
- gSpriteAnim_839AA70,
- gSpriteAnim_839AA78,
- gSpriteAnim_839AA88,
-};
-
-static const struct SpriteTemplate sRainSpriteTemplate =
-{
- .tileTag = 4614,
- .paletteTag = 4608,
- .oam = &gOamData_839AA68,
- .anims = gSpriteAnimTable_839AA98,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807E5C0,
-};
-
-
-const s16 gUnknown_0839AABC[][2] =
-{
- {-104, 208},
- {-160, 320},
-};
-
-const u16 gUnknown_0839AAC4[][2] =
-{
- {18, 7},
- {12, 10},
-};
-
-static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206};
-
-static const struct OamData gOamData_839AAD4 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 0,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const struct SpriteFrameImage gSpriteImageTable_839AADC[] =
-{
- {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)},
- {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)},
-};
-
-static const union AnimCmd gSpriteAnim_839AAEC[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AAF4[] =
-{
- ANIMCMD_FRAME(1, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_839AAFC[] =
-{
- gSpriteAnim_839AAEC,
- gSpriteAnim_839AAF4,
-};
-
-void sub_807ED48(struct Sprite *);
-static const struct SpriteTemplate sSnowflakeSpriteTemplate =
-{
- .tileTag = 0xFFFF,
- .paletteTag = 4608,
- .oam = &gOamData_839AAD4,
- .anims = gSpriteAnimTable_839AAFC,
- .images = gSpriteImageTable_839AADC,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807ED48,
-};
-
-// unused data
-static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300};
-
-static const struct OamData gOamData_839AB2C =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 1,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd gSpriteAnim_839AB34[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AB3C[] =
-{
- ANIMCMD_FRAME(32, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AB44[] =
-{
- ANIMCMD_FRAME(64, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AB4C[] =
-{
- ANIMCMD_FRAME(96, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AB54[] =
-{
- ANIMCMD_FRAME(128, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_839AB5C[] =
-{
- ANIMCMD_FRAME(160, 16),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_839AB64[] =
-{
- gSpriteAnim_839AB34,
- gSpriteAnim_839AB3C,
- gSpriteAnim_839AB44,
- gSpriteAnim_839AB4C,
- gSpriteAnim_839AB54,
- gSpriteAnim_839AB5C,
-};
-
-static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] =
-{
- AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0),
- AFFINEANIMCMD_END,
-};
-
-static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] =
-{
- gSpriteAffineAnim_839AB7C,
-};
-
-static void Fog1SpriteCallback(struct Sprite *);
-static const struct SpriteTemplate sFog1SpriteTemplate =
-{
- .tileTag = 4609,
- .paletteTag = 4608,
- .oam = &gOamData_839AB2C,
- .anims = gSpriteAnimTable_839AB64,
- .images = NULL,
- .affineAnims = gSpriteAffineAnimTable_839AB8C,
- .callback = Fog1SpriteCallback,
-};
-
-bool8 CreateRainSprite(void)
-{
- u8 spriteNum;
- u8 spriteId;
-
- if (gWeatherPtr->rainSpriteCount == 24)
- return FALSE;
-
- spriteNum = gWeatherPtr->rainSpriteCount;
- spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate,
- sRainSpriteCoords[spriteNum].x, sRainSpriteCoords[spriteNum].y, 78);
- if (spriteId != 64)
- {
- gSprites[spriteId].data[5] = 0;
- gSprites[spriteId].data[1] = spriteNum * 145;
- while (gSprites[spriteId].data[1] >= 600)
- gSprites[spriteId].data[1] -= 600;
- sub_807E4EC(&gSprites[spriteId]);
- sub_807E6F0(&gSprites[spriteId], spriteNum * 9);
- gSprites[spriteId].invisible = TRUE;
- gWeatherPtr->sprites.s1.rainSprites[spriteNum] = &gSprites[spriteId];
- }
- else
- {
- gWeatherPtr->sprites.s1.rainSprites[spriteNum] = NULL;
- }
-
- if (++gWeatherPtr->rainSpriteCount == 24)
- {
- u16 i;
-
- for (i = 0; i < 24; i++)
- {
- if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
- {
- if (gWeatherPtr->sprites.s1.rainSprites[i]->data[6] == 0)
- gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E5C0;
- else
- gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E6C4;
- }
- }
- return FALSE;
- }
- return TRUE;
-}
-
-bool8 sub_807E8E8(void)
-{
- if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9)
- return FALSE;
-
- if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB)
- {
- gWeatherPtr->unknown_6D6 = 0;
- if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9)
- {
- gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1;
- }
- else
- {
- gWeatherPtr->unknown_6D8--;
- gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0;
- gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE;
- }
- }
- return TRUE;
-}
-
-void DestroyRainSprites(void)
-{
- u16 i;
-
- for (i = 0; i < gWeatherPtr->rainSpriteCount; i++)
- {
- if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]);
- }
- gWeatherPtr->rainSpriteCount = 0;
- FreeSpriteTilesByTag(0x1206);
-}
-
-//------------------------------------------------------------------------------
-// Snow
-//------------------------------------------------------------------------------
-
-void Snow_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->gammaTargetIndex = 3;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->unknown_6E5 = 16;
- gWeatherPtr->unknown_6E0 = 0;
-}
-
-void Snow_Main(void);
-void sub_807ED48(struct Sprite *);
-
-void Snow_InitAll(void)
-{
- Snow_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- {
- u16 i;
-
- Snow_Main();
- for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++)
- {
- sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]);
- }
- }
-}
-
-u8 snowflakes_progress(void);
-
-void Snow_Main(void)
-{
- if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE)
- {
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- }
-}
-
-bool8 Snow_Finish(void)
-{
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- gWeatherPtr->unknown_6E5 = 0;
- gWeatherPtr->unknown_6E0 = 0;
- gWeatherPtr->finishStep++;
- // fall through
- case 1:
- if (snowflakes_progress() == FALSE)
- {
- gWeatherPtr->finishStep++;
- return FALSE;
- }
- return TRUE;
- }
- return FALSE;
-}
-
-bool8 CreateSnowflakeSprite(void);
-bool8 RemoveSnowflakeSprite(void);
-
-bool8 snowflakes_progress(void)
-{
- if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5)
- return FALSE;
-
- gWeatherPtr->unknown_6E0++;
- if (gWeatherPtr->unknown_6E0 > 36)
- {
- gWeatherPtr->unknown_6E0 = 0;
- if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5)
- CreateSnowflakeSprite();
- else
- RemoveSnowflakeSprite();
- }
- return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5);
-}
-
-void sub_807EC40(struct Sprite *);
-
-bool8 CreateSnowflakeSprite(void)
-{
- u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78);
-
- if (spriteId == 64)
- return FALSE;
- gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount;
- sub_807EC40(&gSprites[spriteId]);
- gSprites[spriteId].coordOffsetEnabled = TRUE;
- gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId];
- return TRUE;
-}
-
-bool8 RemoveSnowflakeSprite(void)
-{
- if (gWeatherPtr->snowflakeSpriteCount != 0)
- {
- DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]);
- return TRUE;
- }
- return FALSE;
-}
-
-void sub_807EC40(struct Sprite *sprite)
-{
- u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30);
- u16 r6;
-
- sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
- sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
- sprite->data[0] = sprite->pos1.y * 128;
- sprite->pos2.x = 0;
- r6 = Random();
- sprite->data[1] = (r6 & 3) * 5 + 64;
- sprite->data[7] = (r6 & 3) * 5 + 64;
- StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1);
- sprite->data[3] = 0;
- sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1;
- sprite->data[6] = (r6 & 0x1F) + 210;
- sprite->data[5] = 0;
-}
-
-void sub_807ECEC(struct Sprite *sprite)
-{
- if (gWeatherPtr->unknown_6E2 > 18)
- {
- sprite->invisible = FALSE;
- sprite->callback = sub_807ED48;
- sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
- sprite->data[0] = sprite->pos1.y * 128;
- gWeatherPtr->unknown_6E2 = 0;
- }
-}
-
-void sub_807ED48(struct Sprite *sprite)
-{
- s16 r3;
- s16 r2;
-
- sprite->data[0] += sprite->data[1];
- sprite->pos1.y = sprite->data[0] >> 7;
- sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF;
- sprite->pos2.x = gSineTable[sprite->data[3]] / 64;
-
- r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF;
- if (r3 & 0x100)
- r3 = -0x100 | r3; // hmm... what is this?
- if (r3 < -3)
- sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
- else if (r3 > 242)
- sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX);
-
- r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF;
- if (r2 > 163 && r2 < 171)
- {
- sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY);
- sprite->data[0] = sprite->pos1.y * 128;
- sprite->data[5] = 0;
- sprite->data[6] = 220;
- }
- else if (r2 > 242 && r2 < 250)
- {
- sprite->pos1.y = 163;
- sprite->data[0] = sprite->pos1.y * 128;
- sprite->data[5] = 0;
- sprite->data[6] = 220;
- sprite->invisible = TRUE;
- sprite->callback = sub_807ECEC;
- }
-
- sprite->data[5]++;
- if (sprite->data[5] == sprite->data[6])
- {
- sub_807EC40(sprite);
- sprite->pos1.y = 250;
- sprite->invisible = TRUE;
- sprite->callback = sub_807ECEC;
- }
-}
-
-//------------------------------------------------------------------------------
-// Medium Rain
-//------------------------------------------------------------------------------
-
-void MedRain_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6D6 = 0;
- gWeatherPtr->unknown_6DB = 4;
- gWeatherPtr->unknown_6DC = 0;
- gWeatherPtr->unknown_6D9 = 16;
- gWeatherPtr->gammaTargetIndex = 3;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
- gWeatherPtr->unknown_6ED = 0;
- SetRainStrengthFromSoundEffect(SE_T_AME);
-}
-
-void Rain_Main(void);
-
-void MedRain_InitAll(void)
-{
- MedRain_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Rain_Main();
-}
-
-//------------------------------------------------------------------------------
-// Heavy Rain
-//------------------------------------------------------------------------------
-
-void HeavyRain_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->unknown_6D6 = 0;
- gWeatherPtr->unknown_6DB = 4;
- gWeatherPtr->unknown_6DC = 1;
- gWeatherPtr->unknown_6D9 = 24;
- gWeatherPtr->gammaTargetIndex = 3;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment
- SetRainStrengthFromSoundEffect(SE_T_OOAME);
-}
-
-void HeavyRain_InitAll(void)
-{
- HeavyRain_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Rain_Main();
-}
-
-void UpdateThunderSound(void);
-void SetThunderCounter(u16);
-
-void Rain_Main(void)
-{
- UpdateThunderSound();
- switch (gWeatherPtr->initStep)
- {
- case 0:
- LoadRainSpriteSheet();
- gWeatherPtr->initStep++;
- break;
- case 1:
- if (CreateRainSprite())
- break;
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (sub_807E8E8())
- break;
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- break;
- case 3:
- if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_CHANGING_WEATHER)
- break;
- gWeatherPtr->initStep = 6;
- break;
- case 4:
- gWeatherPtr->unknown_6EA = 1;
- gWeatherPtr->unknown_6E6 = (Random() % 360) + 360;
- gWeatherPtr->initStep++;
- // fall through
- case 5:
- if (--gWeatherPtr->unknown_6E6 != 0)
- break;
- gWeatherPtr->initStep++;
- break;
- case 6:
- gWeatherPtr->unknown_6EA = 1;
- gWeatherPtr->unknown_6EB = Random() % 2;
- gWeatherPtr->initStep++;
- break;
- case 7:
- gWeatherPtr->unknown_6EC = (Random() & 1) + 1;
- gWeatherPtr->initStep++;
- // fall through
- case 8:
- sub_807D5BC(19);
- if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1)
- SetThunderCounter(20);
- gWeatherPtr->unknown_6E6 = (Random() % 3) + 6;
- gWeatherPtr->initStep++;
- break;
- case 9:
- if (--gWeatherPtr->unknown_6E6 != 0)
- break;
- sub_807D5BC(3);
- gWeatherPtr->unknown_6EA = 1;
- if (--gWeatherPtr->unknown_6EC != 0)
- {
- gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
- gWeatherPtr->initStep = 10;
- }
- else if (gWeatherPtr->unknown_6EB == 0)
- {
- gWeatherPtr->initStep = 4;
- }
- else
- {
- gWeatherPtr->initStep = 11;
- }
- break;
- case 10:
- if (--gWeatherPtr->unknown_6E6 != 0)
- break;
- gWeatherPtr->initStep = 8;
- break;
- case 11:
- gWeatherPtr->unknown_6E6 = (Random() % 16) + 60;
- gWeatherPtr->initStep++;
- break;
- case 12:
- if (--gWeatherPtr->unknown_6E6 != 0)
- break;
- SetThunderCounter(100);
- sub_807D5BC(19);
- // Why use "% 16" everywhere else and "& 0xF" here. So dumb.
- gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30;
- gWeatherPtr->initStep++;
- break;
- case 13:
- if (--gWeatherPtr->unknown_6E6 != 0)
- break;
- sub_807D5F0(19, 3, 5);
- gWeatherPtr->initStep++;
- break;
- case 14:
- if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_IDLE)
- break;
- gWeatherPtr->unknown_6EA = 1;
- gWeatherPtr->initStep = 4;
- break;
- }
-}
-
-bool8 Rain_Finish(void)
-{
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- gWeatherPtr->unknown_6EA = 0;
- gWeatherPtr->finishStep++;
- // fall through
- case 1:
- Rain_Main();
- if (gWeatherPtr->unknown_6EA != 0)
- {
- if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT
- || gWeatherPtr->nextWeather == WEATHER_RAIN_MED
- || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY)
- return FALSE;
- gWeatherPtr->unknown_6D9 = 0;
- gWeatherPtr->finishStep++;
- }
- break;
- case 2:
- if (sub_807E8E8())
- break;
- DestroyRainSprites();
- gWeatherPtr->unknown_6ED = 0;
- gWeatherPtr->finishStep++;
- return FALSE;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-void SetThunderCounter(u16 max)
-{
- if (gWeatherPtr->unknown_6ED == 0)
- {
- gWeatherPtr->thunderCounter = Random() % max;
- gWeatherPtr->unknown_6ED = 1;
- }
-}
-
-void UpdateThunderSound(void)
-{
- if (gWeatherPtr->unknown_6ED == 1)
- {
- if (gWeatherPtr->thunderCounter == 0)
- {
- if (IsSEPlaying())
- return;
- if (Random() & 1)
- PlaySE(SE_T_KAMI);
- else
- PlaySE(SE_T_KAMI2);
- gWeatherPtr->unknown_6ED = 0;
- }
- else
- {
- gWeatherPtr->thunderCounter--;
- }
- }
-}
-
-//------------------------------------------------------------------------------
-// Fog 1
-//------------------------------------------------------------------------------
-
-void Fog1_Main(void);
-static void CreateFog1Sprites(void);
-static void DestroyFog1Sprites(void);
-
-void Fog1_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
- if (gWeatherPtr->fog1SpritesCreated == 0)
- {
- gWeatherPtr->unknown_6F0 = 0;
- gWeatherPtr->unknown_6F2 = 0;
- gWeatherPtr->fog1ScrollPosX = 0;
- Weather_SetBlendCoeffs(0, 16);
- }
-}
-
-void Fog1_InitAll(void)
-{
- Fog1_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Fog1_Main();
-}
-
-void Fog1_Main(void)
-{
- gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
- if (++gWeatherPtr->unknown_6F0 > 3)
- {
- gWeatherPtr->unknown_6F0 = 0;
- gWeatherPtr->unknown_6F2++;
- }
- switch (gWeatherPtr->initStep)
- {
- case 0:
- CreateFog1Sprites();
- if (gWeatherPtr->currWeather == WEATHER_FOG_1)
- Weather_SetTargetBlendCoeffs(12, 8, 3);
- else
- Weather_SetTargetBlendCoeffs(4, 16, 0);
- gWeatherPtr->initStep++;
- break;
- case 1:
- if (Weather_UpdateBlend())
- {
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- }
- break;
- }
-}
-
-bool8 Fog1_Finish(void)
-{
- gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF;
- if (++gWeatherPtr->unknown_6F0 > 3)
- {
- gWeatherPtr->unknown_6F0 = 0;
- gWeatherPtr->unknown_6F2++;
- }
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- Weather_SetTargetBlendCoeffs(0, 16, 3);
- gWeatherPtr->finishStep++;
- break;
- case 1:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->finishStep++;
- break;
- case 2:
- DestroyFog1Sprites();
- gWeatherPtr->finishStep++;
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-#define sprColumn data[0]
-
-static void Fog1SpriteCallback(struct Sprite *sprite)
-{
- sprite->pos2.y = (u8)gSpriteCoordOffsetY;
- sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->sprColumn * 64;
- if (sprite->pos1.x > 0x10F)
- {
- sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->sprColumn) * 64;
- sprite->pos1.x &= 0x1FF;
- }
-}
-
-static void CreateFog1Sprites(void)
-{
- u16 i;
-
- if (!gWeatherPtr->fog1SpritesCreated)
- {
- struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201};
-
- LoadSpriteSheet(&fog1SpriteSheet);
- for (i = 0; i < 20; i++)
- {
- u8 spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF);
-
- if (spriteId != MAX_SPRITES)
- {
- struct Sprite *sprite = &gSprites[spriteId];
-
- sprite->sprColumn = i % 5;
- sprite->pos1.x = (i % 5) * 64 + 32;
- sprite->pos1.y = (i / 5) * 64 + 32;
- gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite;
- }
- else
- {
- gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL;
- }
- }
- gWeatherPtr->fog1SpritesCreated = TRUE;
- }
-}
-
-#undef sprColumn
-
-static void DestroyFog1Sprites(void)
-{
- u16 i;
-
- if (gWeatherPtr->fog1SpritesCreated)
- {
- for (i = 0; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]);
- }
- FreeSpriteTilesByTag(0x1201);
- gWeatherPtr->fog1SpritesCreated = 0;
- }
-}
-
-//------------------------------------------------------------------------------
-// Volcanic ash
-//------------------------------------------------------------------------------
-
-void Ash_Main(void);
-void LoadAshSpriteSheet(void);
-void CreateAshSprites(void);
-void DestroyAshSprites(void);
-
-void Ash_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = FALSE;
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->unknown_6FE = 20;
- if (!gWeatherPtr->ashSpritesCreated)
- {
- Weather_SetBlendCoeffs(0, 16);
- REG_BLDALPHA = BLDALPHA_BLEND(64, 63); // Those aren't even valid coefficients!
- }
-}
-
-void Ash_InitAll(void)
-{
- Ash_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Ash_Main();
-}
-
-void Ash_Main(void)
-{
- gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF;
- while (gWeatherPtr->unknown_6FC > 0xEF)
- gWeatherPtr->unknown_6FC -= 0xF0;
- switch (gWeatherPtr->initStep)
- {
- case 0:
- LoadAshSpriteSheet();
- gWeatherPtr->initStep++;
- break;
- case 1:
- if (!gWeatherPtr->ashSpritesCreated)
- CreateAshSprites();
- Weather_SetTargetBlendCoeffs(16, 0, 1);
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- break;
- default:
- Weather_UpdateBlend();
- break;
- }
-}
-
-bool8 Ash_Finish(void)
-{
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- Weather_SetTargetBlendCoeffs(0, 16, 1);
- gWeatherPtr->finishStep++;
- break;
- case 1:
- if (!Weather_UpdateBlend())
- break;
- DestroyAshSprites();
- gWeatherPtr->finishStep++;
- break;
- case 2:
- REG_BLDALPHA = 0;
- gWeatherPtr->finishStep++;
- return FALSE;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-static const struct SpriteSheet sAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202};
-
-void LoadAshSpriteSheet(void)
-{
- LoadSpriteSheet(&sAshSpriteSheet);
-}
-
-const struct OamData gOamData_839ABB8 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 1,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 15,
- .affineParam = 0,
-};
-
-const union AnimCmd gSpriteAnim_839ABC0[] =
-{
- ANIMCMD_FRAME(0, 60),
- ANIMCMD_FRAME(64, 60),
- ANIMCMD_JUMP(0),
-};
-
-const union AnimCmd *const gSpriteAnimTable_839ABCC[] =
-{
- gSpriteAnim_839ABC0,
-};
-
-void sub_807FAA8(struct Sprite *);
-static const struct SpriteTemplate sAshSpriteTemplate =
-{
- .tileTag = 4610,
- .paletteTag = 4608,
- .oam = &gOamData_839ABB8,
- .anims = gSpriteAnimTable_839ABCC,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_807FAA8,
-};
-
-void CreateAshSprites(void)
-{
- u8 i;
-
- if (!gWeatherPtr->ashSpritesCreated)
- {
- for (i = 0; i < 20; i++)
- {
- u8 spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E);
-
- if (spriteId != MAX_SPRITES)
- {
- struct Sprite *sprite = &gSprites[spriteId];
-
- sprite->data[1] = 0;
- sprite->data[2] = (u8)(i % 5);
- sprite->data[3] = (u8)(i / 5);
- sprite->data[0] = sprite->data[3] * 64 + 32;
- gWeatherPtr->sprites.s2.ashSprites[i] = sprite;
- }
- else
- {
- gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
- }
- }
- gWeatherPtr->ashSpritesCreated = TRUE;
- }
-}
-
-void DestroyAshSprites(void)
-{
- u16 i;
-
- if (gWeatherPtr->ashSpritesCreated)
- {
- for (i = 0; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]);
- }
- FreeSpriteTilesByTag(0x1202);
- gWeatherPtr->ashSpritesCreated = FALSE;
- }
-}
-
-void sub_807FAA8(struct Sprite *sprite)
-{
- sprite->data[1]++;
- if (sprite->data[1] > 5)
- {
- sprite->data[1] = 0;
- sprite->data[0]++;
- }
- sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0];
- sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64;
- if (sprite->pos1.x > 271)
- {
- sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64;
- sprite->pos1.x &= 0x1FF;
- }
-}
-
-//------------------------------------------------------------------------------
-// Fog 2
-//------------------------------------------------------------------------------
-
-void Fog2_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
- gWeatherPtr->unknown_6F0 = 0;
- gWeatherPtr->unknown_6F2 = 1;
- if (gWeatherPtr->fog2SpritesCreated == 0)
- {
- gWeatherPtr->unknown_71C = 0;
- gWeatherPtr->unknown_71E = 0;
- gWeatherPtr->unknown_720 = 0;
- gWeatherPtr->unknown_722 = 0;
- gWeatherPtr->unknown_718 = 0;
- gWeatherPtr->unknown_71A = 0;
- Weather_SetBlendCoeffs(0, 16);
- }
-}
-
-void Fog2_Main(void);
-
-void Fog2_InitAll(void)
-{
- Fog2_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Fog2_Main();
-}
-
-void sub_807FC9C(void);
-void CreateFog2Sprites(void);
-
-void Fog2_Main(void)
-{
- sub_807FC9C();
- switch (gWeatherPtr->initStep)
- {
- case 0:
- CreateFog2Sprites();
- gWeatherPtr->initStep++;
- break;
- case 1:
- Weather_SetTargetBlendCoeffs(12, 8, 8);
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- break;
- }
-}
-
-void DestroyFog2Sprites(void);
-
-bool8 Fog2_Finish(void)
-{
- sub_807FC9C();
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- Weather_SetTargetBlendCoeffs(0, 16, 1);
- gWeatherPtr->finishStep++;
- break;
- case 1:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->finishStep++;
- break;
- case 2:
- DestroyFog2Sprites();
- gWeatherPtr->finishStep++;
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-void sub_807FC9C(void)
-{
- if (++gWeatherPtr->unknown_71C > 2)
- {
- gWeatherPtr->unknown_720++;
- gWeatherPtr->unknown_71C = 0;
- }
-
- if (++gWeatherPtr->unknown_71E > 4)
- {
- gWeatherPtr->unknown_722++;
- gWeatherPtr->unknown_71E = 0;
- }
-
- gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF;
- gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722;
-}
-
-extern const struct SpriteTemplate sFog2SpriteTemplate; // defined below
-
-void CreateFog2Sprites(void)
-{
- u16 i;
-
- if (!gWeatherPtr->fog2SpritesCreated)
- {
- struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1203};
-
- LoadSpriteSheet(&fog2SpriteSheet);
- for (i = 0; i < 20; i++)
- {
- u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF);
-
- if (spriteId != MAX_SPRITES)
- {
- struct Sprite *sprite = &gSprites[spriteId];
-
- sprite->data[0] = i % 5;
- sprite->data[1] = i / 5;
- gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite;
- }
- else
- {
- gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL;
- }
- }
- gWeatherPtr->fog2SpritesCreated = TRUE;
- }
-}
-
-const struct OamData gOamData_839ABF0 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 1,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-const union AnimCmd gSpriteAnim_839ABF8[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_839AC00[] =
-{
- gSpriteAnim_839ABF8,
-};
-
-void Fog2SpriteCallback(struct Sprite *);
-const struct SpriteTemplate sFog2SpriteTemplate =
-{
- .tileTag = 4611,
- .paletteTag = 4608,
- .oam = &gOamData_839ABF0,
- .anims = gSpriteAnimTable_839AC00,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = Fog2SpriteCallback,
-};
-
-void DestroyFog2Sprites(void)
-{
- u16 i;
-
- if (gWeatherPtr->fog2SpritesCreated)
- {
- for (i = 0; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.fog2Sprites[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]);
- }
- FreeSpriteTilesByTag(0x1203);
- gWeatherPtr->fog2SpritesCreated = FALSE;
- }
-}
-
-void Fog2SpriteCallback(struct Sprite *sprite)
-{
- sprite->pos2.y = gWeatherPtr->unknown_71A;
- sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64;
- if (sprite->pos1.x > 271)
- {
- sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64;
- sprite->pos1.x &= 0x1FF;
- }
-}
-
-//------------------------------------------------------------------------------
-// Sandstorm
-//------------------------------------------------------------------------------
-
-void Sandstorm_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->weatherGfxLoaded = 0;
- gWeatherPtr->gammaTargetIndex = 0;
- gWeatherPtr->gammaStepDelay = 20;
- if (gWeatherPtr->sandstormSprites1Created == 0)
- {
- gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0;
- gWeatherPtr->unknown_712 = 8;
- gWeatherPtr->unknown_714 = 0;
- // Dead code. How does the compiler not optimize this out?
- if (gWeatherPtr->unknown_712 > 0x5F)
- gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712;
- Weather_SetBlendCoeffs(0, 16);
- }
-}
-
-void Sandstorm_Main(void);
-
-void Sandstorm_InitAll(void)
-{
- Sandstorm_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Sandstorm_Main();
-}
-
-void sub_808002C(void);
-void sub_8080064(void);
-void CreateSandstormSprites_1(void);
-void CreateSandstormSprites_2(void);
-
-void Sandstorm_Main(void)
-{
- sub_8080064();
- sub_808002C();
- if (gWeatherPtr->unknown_712 > 0x5F)
- gWeatherPtr->unknown_712 = 32;
- switch (gWeatherPtr->initStep)
- {
- case 0:
- CreateSandstormSprites_1();
- CreateSandstormSprites_2();
- gWeatherPtr->initStep++;
- break;
- case 1:
- Weather_SetTargetBlendCoeffs(16, 0, 0);
- gWeatherPtr->initStep++;
- break;
- case 2:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->weatherGfxLoaded = TRUE;
- gWeatherPtr->initStep++;
- break;
- }
-}
-
-void sub_80800E4(void);
-
-bool8 Sandstorm_Finish(void)
-{
- sub_8080064();
- sub_808002C();
- switch (gWeatherPtr->finishStep)
- {
- case 0:
- Weather_SetTargetBlendCoeffs(0, 16, 0);
- gWeatherPtr->finishStep++;
- break;
- case 1:
- if (!Weather_UpdateBlend())
- break;
- gWeatherPtr->finishStep++;
- break;
- case 2:
- sub_80800E4();
- gWeatherPtr->finishStep++;
- break;
- default:
- return FALSE;
- }
- return TRUE;
-}
-
-void sub_808002C(void)
-{
- if (gWeatherPtr->unknown_714++ > 4)
- {
- gWeatherPtr->unknown_712++;
- gWeatherPtr->unknown_714 = 0;
- }
-}
-
-void sub_8080064(void)
-{
- gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4;
- gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712];
- gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF;
- gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8);
-}
-
-void sub_80800E4(void)
-{
- u16 i;
-
- if (gWeatherPtr->sandstormSprites1Created)
- {
- for (i = 0; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.sandstormSprites1[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]);
- }
- gWeatherPtr->sandstormSprites1Created = FALSE;
- FreeSpriteTilesByTag(0x1204);
- }
-
- if (gWeatherPtr->sandstormSprites2Created)
- {
- for (i = 0; i < 5; i++)
- {
- if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL)
- DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]);
- }
- gWeatherPtr->sandstormSprites2Created = FALSE;
- }
-}
-
-const struct OamData gOamData_839AC1C =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 1,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-const union AnimCmd gSpriteAnim_839AC24[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd gSpriteAnim_839AC2C[] =
-{
- ANIMCMD_FRAME(64, 3),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_839AC34[] =
-{
- gSpriteAnim_839AC24,
- gSpriteAnim_839AC2C,
-};
-
-void SandstormSpriteCallback1(struct Sprite *);
-const struct SpriteTemplate sSandstormSpriteTemplate =
-{
- .tileTag = 4612,
- .paletteTag = 4609,
- .oam = &gOamData_839AC1C,
- .anims = gSpriteAnimTable_839AC34,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SandstormSpriteCallback1,
-};
-
-static const struct SpriteSheet sSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204};
-
-void CreateSandstormSprites_1(void)
-{
- u16 i;
-
- if (!gWeatherPtr->sandstormSprites1Created)
- {
- LoadSpriteSheet(&sSandstormSpriteSheet);
- LoadCustomWeatherSpritePalette(gUnknown_08397128);
- for (i = 0; i < 20; i++)
- {
- u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1);
-
- if (spriteId != MAX_SPRITES)
- {
- gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId];
- gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[0] = i % 5;
- gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[1] = i / 5;
- }
- else
- {
- gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL;
- }
- }
- gWeatherPtr->sandstormSprites1Created = TRUE;
- }
-}
-
-const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0};
-
-void SandstormSpriteCallback2(struct Sprite *);
-
-void CreateSandstormSprites_2(void)
-{
- u16 i;
-
- if (!gWeatherPtr->sandstormSprites2Created)
- {
- for (i = 0; i < 5; i++)
- {
- u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 0x18, 0xD0, 1);
-
- if (spriteId != MAX_SPRITES)
- {
- gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId];
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2;
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[1] = i * 51;
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[0] = 8;
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[2] = 0;
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730;
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[3] = gUnknown_0839AC5C[i];
- StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1);
- CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0);
- gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = SandstormSpriteCallback2;
- }
- else
- {
- gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL;
- }
- gWeatherPtr->sandstormSprites2Created = TRUE;
- }
- }
-}
-
-void SandstormSpriteCallback1(struct Sprite *sprite)
-{
- sprite->pos2.y = gWeatherPtr->unknown_710;
- sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64;
- if (sprite->pos1.x > 271)
- {
- sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64;
- sprite->pos1.x &= 0x1FF;
- }
-}
-
-void SandstormSpriteCallback3(struct Sprite *);
-
-void SandstormSpriteCallback2(struct Sprite *sprite)
-{
- if (--sprite->data[3] == -1)
- sprite->callback = SandstormSpriteCallback3;
-}
-
-void SandstormSpriteCallback3(struct Sprite *sprite)
-{
- u32 x;
- u32 y;
-
- if (--sprite->pos1.y < -48)
- {
- sprite->pos1.y = 208;
- sprite->data[0] = 4;
- }
- x = sprite->data[0] * gSineTable[sprite->data[1]];
- y = sprite->data[0] * gSineTable[sprite->data[1] + 64];
- sprite->pos2.x = x >> 8;
- sprite->pos2.y = y >> 8;
- sprite->data[1] = (sprite->data[1] + 10) & 0xFF;
- if (++sprite->data[2] > 8)
- {
- sprite->data[2] = 0;
- sprite->data[0]++;
- }
-}
-
-//------------------------------------------------------------------------------
-// Shade
-//------------------------------------------------------------------------------
-
-void Shade_InitVars(void)
-{
- gWeatherPtr->initStep = 0;
- gWeatherPtr->gammaTargetIndex = 3;
- gWeatherPtr->gammaStepDelay = 20;
-}
-
-void Shade_InitAll(void)
-{
- Shade_InitVars();
-}
-
-void Shade_Main(void)
-{
-}
-
-bool8 Shade_Finish(void)
-{
- return FALSE;
-}
-
-//------------------------------------------------------------------------------
-// Weather 14
-//------------------------------------------------------------------------------
-
-const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30};
-
-const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205};
-
-void Bubbles_InitVars(void)
-{
- Fog1_InitVars();
- if (gWeatherPtr->unknown_72E == 0)
- {
- LoadSpriteSheet(&gWeatherBubbleSpriteSheet);
- gWeatherPtr->unknown_728 = 0;
- gWeatherPtr->unknown_726 = gUnknown_0839AC68[0];
- gWeatherPtr->unknown_72A = 0;
- gWeatherPtr->unknown_72C = 0;
- }
-}
-
-void Bubbles_Main(void);
-
-void Bubbles_InitAll(void)
-{
- Bubbles_InitVars();
- while (gWeatherPtr->weatherGfxLoaded == FALSE)
- Bubbles_Main();
-}
-
-void sub_8080588(u16);
-
-void Bubbles_Main(void)
-{
- Fog1_Main();
- if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728])
- {
- gWeatherPtr->unknown_726 = 0;
- if (++gWeatherPtr->unknown_728 > 7)
- gWeatherPtr->unknown_728 = 0;
- sub_8080588(gWeatherPtr->unknown_72A);
- if (++gWeatherPtr->unknown_72A > 12)
- gWeatherPtr->unknown_72A = 0;
- }
-}
-
-void sub_8080610(void);
-
-bool8 Bubbles_Finish(void)
-{
- if (!Fog1_Finish())
- {
- sub_8080610();
- return FALSE;
- }
- return TRUE;
-}
-
-const s16 gUnknown_0839AC78[][2] =
-{
- {120, 160},
- {376, 160},
- { 40, 140},
- {296, 140},
- {180, 130},
- {436, 130},
- { 60, 160},
- {436, 160},
- {220, 180},
- {476, 180},
- { 10, 90},
- {266, 90},
- {256, 160},
-};
-
-const union AnimCmd gSpriteAnim_839ACAC[] =
-{
- ANIMCMD_FRAME(0, 16),
- ANIMCMD_FRAME(1, 16),
- ANIMCMD_END,
-};
-
-const union AnimCmd *const gSpriteAnimTable_839ACB8[] =
-{
- gSpriteAnim_839ACAC,
-};
-
-extern const struct OamData gOamData_837DF24;
-
-void unc_0807DAB4(struct Sprite *);
-const struct SpriteTemplate gSpriteTemplate_839ACBC =
-{
- .tileTag = 4613,
- .paletteTag = 4608,
- .oam = &gOamData_837DF24,
- .anims = gSpriteAnimTable_839ACB8,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = unc_0807DAB4,
-};
-
-void sub_8080588(u16 a)
-{
- s16 x = gUnknown_0839AC78[a][0];
- s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY;
- u8 spriteId = CreateSpriteAtEnd(
- &gSpriteTemplate_839ACBC,
- x,
- y,
- 0);
-
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].coordOffsetEnabled = TRUE;
- gSprites[spriteId].data[0] = 0;
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].data[2] = 0;
- gWeatherPtr->unknown_72C++;
- }
-}
-
-void sub_8080610(void)
-{
- u16 i;
-
- for (i = 0; i < 64; i++)
- {
- if (gSprites[i].template == &gSpriteTemplate_839ACBC)
- DestroySprite(&gSprites[i]);
- }
- FreeSpriteTilesByTag(0x1205);
-}
-
-void unc_0807DAB4(struct Sprite *sprite)
-{
- ++sprite->data[0];
- if (++sprite->data[0] > 8) // double increment
- {
- sprite->data[0] = 0;
- if (sprite->data[1] == 0)
- {
- if (++sprite->pos2.x > 4)
- sprite->data[1] = 1;
- }
- else
- {
- if (--sprite->pos2.x <= 0)
- sprite->data[1] = 0;
- }
- }
- sprite->pos1.y -= 3;
- if (++sprite->data[2] > 0x77)
- DestroySprite(sprite);
-}
-
-//------------------------------------------------------------------------------
-
-u8 TranslateWeatherNum(u8);
-void UpdateRainCounter(u8, u8);
-
-void SetSav1Weather(u32 weather)
-{
- u8 oldWeather = gSaveBlock1.weather;
-
- gSaveBlock1.weather = TranslateWeatherNum(weather);
- UpdateRainCounter(gSaveBlock1.weather, oldWeather);
-}
-
-u8 GetSav1Weather(void)
-{
- return gSaveBlock1.weather;
-}
-
-void SetSav1WeatherFromCurrMapHeader(void)
-{
- u8 oldWeather = gSaveBlock1.weather;
-
- gSaveBlock1.weather = TranslateWeatherNum(gMapHeader.weather);
- UpdateRainCounter(gSaveBlock1.weather, oldWeather);
-}
-
-void SetWeather(u32 weather)
-{
- SetSav1Weather(weather);
- ChangeWeather(GetSav1Weather());
-}
-
-void SetWeather_Unused(u32 weather)
-{
- SetSav1Weather(weather);
- sub_807C988(GetSav1Weather());
-}
-
-void DoCurrentWeather(void)
-{
- ChangeWeather(GetSav1Weather());
-}
-
-void sub_8080750(void)
-{
- sub_807C988(GetSav1Weather());
-}
-
-static const u8 sWeatherCycle1[] = {2, 3, 5, 3};
-static const u8 sWeatherCycle2[] = {2, 2, 3, 2};
-
-u8 TranslateWeatherNum(u8 weather)
-{
- switch (weather)
- {
- case 0: return 0;
- case 1: return 1;
- case 2: return 2;
- case 3: return 3;
- case 4: return 4;
- case 5: return 5;
- case 6: return 6;
- case 7: return 7;
- case 8: return 8;
- case 9: return 9;
- case 10: return 10;
- case 11: return 11;
- case 12: return 12;
- case 13: return 13;
- case 14: return 14;
- case 20: return sWeatherCycle1[gSaveBlock1.filler_2F];
- case 21: return sWeatherCycle2[gSaveBlock1.filler_2F];
- default: return 0;
- }
-}
-
-void UpdateWeatherPerDay(u16 increment)
-{
- u16 weatherStage = gSaveBlock1.filler_2F + increment;
- weatherStage %= 4;
- gSaveBlock1.filler_2F = weatherStage;
-}
-
-void UpdateRainCounter(u8 newWeather, u8 oldWeather)
-{
- if (newWeather != oldWeather
- && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED))
- IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
-}