diff options
| author | Marcus Huderle <huderlem@gmail.com> | 2017-11-11 13:20:03 -0800 | 
|---|---|---|
| committer | Marcus Huderle <huderlem@gmail.com> | 2017-11-11 13:20:03 -0800 | 
| commit | 92fda2cc0d5afa76e94927cb72ceac9700f54c1b (patch) | |
| tree | 24a7840f1c49602a6ad033ea6cc1cb27b7e12be4 /src/field | |
| parent | 955c5a8e90c9afba35114c583628f74f849a0da4 (diff) | |
| parent | 999c4d59793e761ca71ab7b27272de46d78de138 (diff) | |
Merge remote-tracking branch 'upstream/master' into pokenav
Diffstat (limited to 'src/field')
30 files changed, 2004 insertions, 284 deletions
| diff --git a/src/field/battle_tower.c b/src/field/battle_tower.c index 06d692eae..3e60d3a9a 100644 --- a/src/field/battle_tower.c +++ b/src/field/battle_tower.c @@ -24,6 +24,7 @@  #include "trainer.h"  #include "tv.h"  #include "vars.h" +#include "ewram.h"  #if ENGLISH  #include "../data/battle_tower/trainers.h" @@ -278,9 +279,6 @@ extern u8 gBattleOutcome;  extern struct Pokemon gUnknown_030042FC[];  extern struct BattlePokemon gBattleMons[]; -#define ewram160FB (ewram[0x160FB]) - -  void sub_8134548(void)  {  	u8 var1 = 0; @@ -1370,7 +1368,7 @@ void FillBattleTowerTrainerParty(void)  			}  			SetMonData(&gEnemyParty[partyIndex], MON_DATA_FRIENDSHIP, &friendship); -			SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, (u8 *)&sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]); +			SetMonData(&gEnemyParty[partyIndex], MON_DATA_HELD_ITEM, &sBattleTowerHeldItems[battleTowerMons[battleMonIndex].heldItem]);  			// The pokemon was successfully added to the trainer's party, so it's safe to move on to  			// the next party slot. @@ -1589,7 +1587,7 @@ void sub_81354CC(void)  		for (i = 0; i < PARTY_SIZE; i++)  		{  			heldItem = GetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM); -			SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); +			SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &heldItem);  		}  		break;  	case 2: @@ -1633,7 +1631,7 @@ void sub_813556C(void)  		for (i = 0; i < PARTY_SIZE; i++)  		{  			heldItem = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); -			SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, (u8 *)&heldItem); +			SetMonData(&gSaveBlock1.playerParty[i], MON_DATA_HELD_ITEM, &heldItem);  		}  		CreateTask(sub_8135534, 1); @@ -2185,7 +2183,7 @@ void AwardBattleTowerRibbons(void)  			if (!GetMonData(pokemon, ribbonType))  			{  				gScriptResult = 1; -				SetMonData(pokemon, ribbonType, (u8 *)&gScriptResult); +				SetMonData(pokemon, ribbonType, &gScriptResult);  			}  		}  	} diff --git a/src/field/berry_tag_screen.c b/src/field/berry_tag_screen.c index 1413a02ca..55405138d 100644 --- a/src/field/berry_tag_screen.c +++ b/src/field/berry_tag_screen.c @@ -28,7 +28,7 @@ struct Struct2000000      /*0x1FFFF*/ u8 var_1FFFF;  }; -extern struct Struct2000000 unk_2000000; +extern struct Struct2000000 gSharedMem;  extern u16 gUnknown_030041B4;  static EWRAM_DATA u8 gUnknown_0203932C = 0; @@ -119,13 +119,13 @@ static bool8 sub_8146058(void)      case 5:          if (!MultistepInitMenuWindowContinue())              break; -        unk_2000000.var_1FFFF = 0; +        gSharedMem.var_1FFFF = 0;          gMain.state += 1;          break;      case 6:          if (!sub_81462B8())              break; -        unk_2000000.var_1FFFF = 0; +        gSharedMem.var_1FFFF = 0;          gMain.state += 1;          break;      case 7: @@ -191,19 +191,19 @@ bool8 sub_81462B8(void)      u16 i;      void *addr; -    switch (unk_2000000.var_1FFFF) +    switch (gSharedMem.var_1FFFF)      {      case 0:          LZDecompressVram(gBerryCheck_Gfx, (void *)VRAM); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 1:          LZDecompressVram(gUnknown_08E788E4, (void *)VRAM + 0x2800); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 2:          LZDecompressVram(gUnknown_08E78A84, (void *)VRAM + 0x3000); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 3:          for (i = 0; i < 0x400; i++) @@ -215,19 +215,19 @@ bool8 sub_81462B8(void)          }          addr = (void *)(VRAM + 0x3800);          DmaCopy16(3, gBGTilemapBuffers[2], addr, 0x800); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 4:          LoadCompressedPalette(gBerryCheck_Pal, 0, 96 * 2); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 5:          LoadCompressedObjectPic(&gUnknown_083C1F74); -        unk_2000000.var_1FFFF += 1; +        gSharedMem.var_1FFFF += 1;          break;      case 6:          LoadCompressedObjectPalette(&gUnknown_083C1F7C); -        unk_2000000.var_1FFFF = 0; +        gSharedMem.var_1FFFF = 0;          return TRUE;      } diff --git a/src/field/choose_party.c b/src/field/choose_party.c index adb210e7b..891ee48b8 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -17,6 +17,7 @@  #include "string_util.h"  #include "task.h"  #include "text.h" +#include "ewram.h"  extern u8 gPlayerPartyCount;  extern u8 gLastFieldPokeMenuOpened; @@ -34,7 +35,7 @@ extern void sub_806BC3C(u8, u8);  extern void ShowPokemonSummaryScreen(struct Pokemon *, u8, u8, void (*)(void), int);  extern u8 GetMonStatusAndPokerus();  extern void PartyMenuPrintHP(); -extern bool8 sub_80F9344(void); +extern bool8 sub_80F9344(void);   static void ClearPartySelection(void);  static bool8 IsMonAllowedInBattleTower(struct Pokemon *); diff --git a/src/field/daycare.c b/src/field/daycare.c index d182e121b..dd74f59e0 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -189,7 +189,7 @@ static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot)      if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL)      {          experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot]; -        SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience); +        SetMonData(&pokemon, MON_DATA_EXP, &experience);          DayCare_LevelUpMoves(&pokemon);      }      gPlayerParty[PARTY_SIZE - 1] = pokemon; @@ -214,7 +214,7 @@ u16 sub_8041648()  u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){      struct BoxPokemon temp = *mon;      u32 new_exp = GetBoxMonData(mon, MON_DATA_EXP) + steps; -    SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp); +    SetBoxMonData(&temp, MON_DATA_EXP,  &new_exp);      return GetLevelFromBoxMonExp(&temp);  } @@ -961,7 +961,7 @@ void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // s      metLevel = 0;      ball = ITEM_POKE_BALL;      language = LANGUAGE_JAPANESE; -    SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); +    SetMonData(mon, MON_DATA_POKEBALL, &ball);      SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);      SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);      SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); @@ -986,7 +986,7 @@ static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *da      metLevel = 0;      ball = ITEM_POKE_BALL;      language = LANGUAGE_JAPANESE; -    SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball); +    SetMonData(mon, MON_DATA_POKEBALL, &ball);      SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);      SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);      SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel); @@ -1031,7 +1031,7 @@ static bool8 sub_80421B0(struct DayCareData *dayCareData)                      return TRUE;                  }                  steps--; -                SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, (u8 *)&steps); +                SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &steps);              }          }      } diff --git a/src/field/decoration.c b/src/field/decoration.c index e067191e9..bdeaaf91d 100644 --- a/src/field/decoration.c +++ b/src/field/decoration.c @@ -18,6 +18,7 @@  #include "event_data.h"  #include "field_weather.h"  #include "decoration.h" +#include "ewram.h"  EWRAM_DATA u8 *gUnknown_020388D0 = NULL;  EWRAM_DATA u8 gUnknown_020388D4 = 0; @@ -1494,7 +1495,7 @@ const union AnimCmd *const gSpriteAnimTable_83EC930[] = {  };  const struct SpriteFrameImage gSpriteImageTable_83EC934[] = { -    {.data = (u8 *)&gUnknown_02038900.image, .size = sizeof gUnknown_02038900.image} +    {.data = gUnknown_02038900.image, .size = sizeof(gUnknown_02038900.image)}  };  const struct SpriteTemplate gSpriteTemplate_83EC93C = { @@ -1555,7 +1556,7 @@ const struct SpriteTemplate gSpriteTemplate_83ECA88 = {  const struct YesNoFuncTable gUnknown_083ECAA0 = {.yesFunc = sub_8101848, .noFunc = sub_80FED3C}; -u8 *const unref_label_083ECAA8[] = {ewram}; +u8 *const unref_label_083ECAA8[] = {gSharedMem};  // text diff --git a/src/field/decoration_inventory.c b/src/field/decoration_inventory.c index 083cb260c..687589373 100644 --- a/src/field/decoration_inventory.c +++ b/src/field/decoration_inventory.c @@ -8,7 +8,7 @@  #include "decoration.h"  #include "decoration_inventory.h" -#define DECOR_INV(ptr) {.items = (u8 *)&ptr, .size = sizeof ptr} +#define DECOR_INV(ptr) {.items = ptr, .size = sizeof ptr}  struct DecorationInventory const gDecorationInventories[] = {      DECOR_INV(gSaveBlock1.decorDesk), diff --git a/src/field/dewford_trend.c b/src/field/dewford_trend.c index aaf4dd66a..102784066 100644 --- a/src/field/dewford_trend.c +++ b/src/field/dewford_trend.c @@ -5,8 +5,7 @@  #include "link.h"  #include "rng.h"  #include "text.h" - -extern u8 unk_2000000[]; +#include "ewram.h"  extern u16 gScriptResult;  extern u16 gSpecialVar_0x8004; diff --git a/src/field/easy_chat.c b/src/field/easy_chat.c index 2668b57dd..8e7413516 100644 --- a/src/field/easy_chat.c +++ b/src/field/easy_chat.c @@ -161,7 +161,7 @@ u16 unref_sub_80EB5E0(u16 arg0)      {      case EC_GROUP_POKEMON: // 0      case EC_GROUP_POKEMON_2: // 21 -        chars = (u8 *) gSpeciesNames[word]; +        chars = gSpeciesNames[word];          break;      case EC_GROUP_MOVE_1: // 18      case EC_GROUP_MOVE_2: // 19 diff --git a/src/field/field_effect.c b/src/field/field_effect.c index d86d6e5cd..bd78fb632 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -37,7 +37,7 @@ const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/field_effect_obj  const u32 gSpriteImage_839E474[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");  const u32 gSpriteImage_839E534[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");  const u32 gSpriteImage_839E5F4[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp"); -const u32 gSpriteImage_839E7F4[] = INCBIN_U32("graphics/misc/small_hof_monitor.4bpp"); +const u8 gSpriteImage_839E7F4[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp");  const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/field_effect_objects/palettes/05.gbapal");  // Graphics for the lights streaking past your Pokemon when it uses a field move. @@ -110,7 +110,7 @@ const struct SpriteFrameImage gSpriteImageTable_839F170[] = {  };  const struct SpriteFrameImage gSpriteImageTable_839F178[] = { -    {.data = (u8 *)gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here +    {.data = gSpriteImage_839E7F4, .size = 0x200} // the macro breaks down here  };  const struct Subsprite Unknown_39F180[] = { diff --git a/src/field/field_ground_effect.c b/src/field/field_ground_effect.c index 5af8ea3e3..25b678ff9 100644 --- a/src/field/field_ground_effect.c +++ b/src/field/field_ground_effect.c @@ -458,76 +458,52 @@ bool8 AreZCoordsCompatible(u8 a, u8 b)  void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite)  { -    u8 *ptr; -      gFieldEffectArguments[0] = mapObj->coords2.x;      gFieldEffectArguments[1] = mapObj->coords2.y;      gFieldEffectArguments[2] = mapObj->elevation;      gFieldEffectArguments[3] = 2; -    gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; +    gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;      gFieldEffectArguments[5] = mapObj->mapGroup; - -    ptr = (u8 *)&gSaveBlock1; -    gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) -                         | (u8)gSaveBlock1.location.mapGroup; - +    gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;      gFieldEffectArguments[7] = 1;      FieldEffectStart(FLDEFF_TALL_GRASS);  }  void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite)  { -    u8 *ptr; -      gFieldEffectArguments[0] = mapObj->coords2.x;      gFieldEffectArguments[1] = mapObj->coords2.y;      gFieldEffectArguments[2] = mapObj->elevation;      gFieldEffectArguments[3] = 2; -    gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; +    gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;      gFieldEffectArguments[5] = mapObj->mapGroup; - -    ptr = (u8 *)&gSaveBlock1; -    gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) -                         | (u8)gSaveBlock1.location.mapGroup; - +    gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;      gFieldEffectArguments[7] = 0;      FieldEffectStart(FLDEFF_TALL_GRASS);  }  void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite)  { -    u8 *ptr; -      gFieldEffectArguments[0] = mapObj->coords2.x;      gFieldEffectArguments[1] = mapObj->coords2.y;      gFieldEffectArguments[2] = mapObj->elevation;      gFieldEffectArguments[3] = 2; -    gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum; +    gFieldEffectArguments[4] = mapObj->localId << 8 | mapObj->mapNum;      gFieldEffectArguments[5] = mapObj->mapGroup; - -    ptr = (u8 *)&gSaveBlock1; -    gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) -                         | (u8)gSaveBlock1.location.mapGroup; - +    gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;      gFieldEffectArguments[7] = 1;      FieldEffectStart(FLDEFF_LONG_GRASS);  }  void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite)  { -    u8 *ptr; -      gFieldEffectArguments[0] = mapObj->coords2.x;      gFieldEffectArguments[1] = mapObj->coords2.y;      gFieldEffectArguments[2] = mapObj->elevation;      gFieldEffectArguments[3] = 2;      gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;      gFieldEffectArguments[5] = mapObj->mapGroup; - -    ptr = (u8 *)&gSaveBlock1; -    gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8) -                         | (u8)gSaveBlock1.location.mapGroup; - +    gFieldEffectArguments[6] = (u8)gSaveBlock1.location.mapNum << 8 | (u8)gSaveBlock1.location.mapGroup;      gFieldEffectArguments[7] = 0;      FieldEffectStart(FLDEFF_LONG_GRASS);  } diff --git a/src/field/field_map_obj.c b/src/field/field_map_obj.c index 094e70107..74ef3b7fe 100644 --- a/src/field/field_map_obj.c +++ b/src/field/field_map_obj.c @@ -2775,11 +2775,11 @@ void npc_by_local_id_and_map_set_field_1_bit_x20(u8 localId, u8 mapNum, u8 mapGr          gMapObjects[mapObjectId].mapobj_bit_13 = d;  } -void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, u8 *localId, u8 *mapNum, u8 *mapGroup) +void FieldObjectGetLocalIdAndMap(struct MapObject *mapObject, void *localId, void *mapNum, void *mapGroup)  { -    *localId = mapObject->localId; -    *mapNum = mapObject->mapNum; -    *mapGroup = mapObject->mapGroup; +    *(u8 *)localId = mapObject->localId; +    *(u8 *)mapNum = mapObject->mapNum; +    *(u8 *)mapGroup = mapObject->mapGroup;  }  void sub_805BCC0(s16 x, s16 y) @@ -5187,7 +5187,7 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite)      mapObject = &gMapObjects[sprite->data0];      if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))      { -        FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +        FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);          mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE);          mapObject->mapobj_unk_21 = 1;          sprite->data7 ++; @@ -5207,7 +5207,7 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite)      mapObject = &gMapObjects[sprite->data0];      if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))      { -        FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +        FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);          mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE);          mapObject->mapobj_unk_21 = 1;          sprite->data7 ++; @@ -7371,7 +7371,7 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite)  bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite)  { -    FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +    FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);      FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);      sprite->data2 = 1;      return TRUE; @@ -7379,7 +7379,7 @@ bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *s  bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite)  { -    FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +    FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);      FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2);      sprite->data2 = 1;      return TRUE; @@ -7387,7 +7387,7 @@ bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *s  bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite)  { -    FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +    FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);      FieldEffectStart(FLDEFF_HEART_ICON);      sprite->data2 = 1;      return TRUE; diff --git a/src/field/field_map_obj_helpers.c b/src/field/field_map_obj_helpers.c index b453d3794..59e857aae 100644 --- a/src/field/field_map_obj_helpers.c +++ b/src/field/field_map_obj_helpers.c @@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir)  u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject)  { -    FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +    FieldObjectGetLocalIdAndMap(mapObject, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);      return FieldEffectStart(fieldEffectId);  } diff --git a/src/field/field_poison.c b/src/field/field_poison.c index 1244b9c62..b6ff12ff9 100644 --- a/src/field/field_poison.c +++ b/src/field/field_poison.c @@ -128,7 +128,7 @@ s32 DoPoisonFieldEffect(void)                  hp--;              if (hp == 0)                  numFainting++; //Pokemon will now faint due to poison -            SetMonData(pkmn, MON_DATA_HP, (u8 *)&hp); +            SetMonData(pkmn, MON_DATA_HP, &hp);              numPoisoned++;          }          pkmn++; diff --git a/src/field/field_region_map.c b/src/field/field_region_map.c index 7cb22e5df..73e101d8f 100644 --- a/src/field/field_region_map.c +++ b/src/field/field_region_map.c @@ -7,6 +7,7 @@  #include "sprite.h"  #include "strings2.h"  #include "text.h" +#include "ewram.h"  struct RegionMapStruct  { @@ -24,14 +25,11 @@ struct UnkStruct      u16 unk888;  }; -extern u8 ewram[]; -#define unk_2000000 (*(struct UnkStruct *)(ewram)) -  void FieldInitRegionMap(MainCallback callback)  {      SetVBlankCallback(NULL); -    unk_2000000.unk888 = 0; -    unk_2000000.callback = callback; +    ewram0_5.unk888 = 0; +    ewram0_5.callback = callback;      SetMainCallback2(CB2_FieldInitRegionMap);  } @@ -49,7 +47,7 @@ void CB2_FieldInitRegionMap(void)      ResetSpriteData();      FreeAllSpritePalettes();      // TODO: remove this cast -    InitRegionMap((void *)&unk_2000000.unk8, 0); +    InitRegionMap((void *)&ewram0_5.unk8, 0);      CreateRegionMapPlayerIcon(0, 0);      CreateRegionMapCursor(1, 1);      SetUpWindowConfig(&gWindowConfig_81E709C); @@ -82,15 +80,15 @@ void CB2_FieldRegionMap(void)  void sub_813EFDC(void)  { -    switch (unk_2000000.unk888) +    switch (ewram0_5.unk888)      {      case 0:          REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; -        unk_2000000.unk888++; +        ewram0_5.unk888++;          break;      case 1:          if (!gPaletteFade.active) -            unk_2000000.unk888++; +            ewram0_5.unk888++;          break;      case 2:          switch (sub_80FAB60()) @@ -100,18 +98,18 @@ void sub_813EFDC(void)              break;          case 4:          case 5: -            unk_2000000.unk888++; +            ewram0_5.unk888++;          }          break;      case 3:          BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); -        unk_2000000.unk888++; +        ewram0_5.unk888++;          break;      case 4:          if (!gPaletteFade.active)          {              FreeRegionMapIconResources(); -            SetMainCallback2(unk_2000000.callback); +            SetMainCallback2(ewram0_5.callback);          }          break;      } @@ -120,6 +118,6 @@ void sub_813EFDC(void)  void sub_813F0C8(void)  {      MenuFillWindowRectWithBlankTile(17, 17, 28, 18); -    if (unk_2000000.unk8.unk16) -        MenuPrint(unk_2000000.unk8.str, 17, 17); +    if (ewram0_5.unk8.unk16) +        MenuPrint(ewram0_5.unk8.str, 17, 17);  } diff --git a/src/field/field_specials.c b/src/field/field_specials.c index d67cbe54f..46061febf 100644 --- a/src/field/field_specials.c +++ b/src/field/field_specials.c @@ -1905,13 +1905,13 @@ void PutZigzagoonInPlayerParty(void)      u16 monData;      CreateMon(&gPlayerParty[0], SPECIES_ZIGZAGOON, 7, 0x20, FALSE, 0, FALSE, 0);      monData = TRUE; -    SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, (u8 *)&monData); +    SetMonData(&gPlayerParty[0], MON_DATA_ALT_ABILITY, &monData);      monData = MOVE_TACKLE; -    SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, (u8 *)&monData); +    SetMonData(&gPlayerParty[0], MON_DATA_MOVE1, &monData);      monData = MOVE_NONE; -    SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, (u8 *)&monData); -    SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, (u8 *)&monData); -    SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, (u8 *)&monData); +    SetMonData(&gPlayerParty[0], MON_DATA_MOVE2, &monData); +    SetMonData(&gPlayerParty[0], MON_DATA_MOVE3, &monData); +    SetMonData(&gPlayerParty[0], MON_DATA_MOVE4, &monData);  }  bool8 IsStarterInParty(void) diff --git a/src/field/field_tasks.c b/src/field/field_tasks.c index da6f162c2..767753da2 100644 --- a/src/field/field_tasks.c +++ b/src/field/field_tasks.c @@ -1,7 +1,3 @@ -// - -// -  #include "global.h"  #include "task.h"  #include "main.h" diff --git a/src/field/field_weather.c b/src/field/field_weather.c index 443a38357..042655644 100644 --- a/src/field/field_weather.c +++ b/src/field/field_weather.c @@ -1,14 +1,42 @@  #include "global.h" +#include "blend_palette.h" +#include "field_map_obj.h"  #include "field_weather.h"  #include "palette.h" +#include "rng.h" +#include "script.h" +#include "songs.h" +#include "sound.h"  #include "sprite.h"  #include "task.h" +#include "trig.h" +#include "ewram.h" + +#define MACRO1(a) ((((a) >> 1) & 0xF) | (((a) >> 2) & 0xF0) | (((a) >> 3) & 0xF00)) + +struct RGBColor +{ +    u16 r:5; +    u16 g:5; +    u16 b:5; +}; + +struct WeatherPaletteData +{ +    u16 data[0][0x1000];  // unknown length +};  struct Weather  { -    u8 filler_000[0x200]; +    struct Sprite *unknown_0[24]; +    struct Sprite *unknown_60[0x65];  // snowflakes? +    struct Sprite *unknown_1F4[3];      u8 unknown_200[2][32]; -    u8 filler_240[0x480]; +    u8 filler_240[0x460-0x240]; +    u8 unk460[2][32]; +    u8 filler4A0[0x6B6-0x4A0]; +    s8 unknown_6B6; +    u8 filler_6B7[0xC0-0xB7];      s8 unknown_6C0;      s8 unknown_6C1;      u8 unknown_6C2; @@ -20,23 +48,37 @@ struct Weather      u8 unknown_6C9;      u8 unknown_6CA;      u8 unknown_6CB; -    u8 filler_6CC[2]; +    u16 unknown_6CC;      u16 unknown_6CE;      u8 unknown_6D0;      u8 unknown_6D1; -    u8 filler_6D2[1]; +    u8 unknown_6D2;      u8 unknown_6D3;      u8 unknown_6D4;      u8 unknown_6D5; -    u8 filler_6D6[2]; +    u16 unknown_6D6;      u8 unknown_6D8; -    u8 filler_6D9[1]; +    u8 unknown_6D9;      u8 unknown_6DA; -    u8 filler_6DB[3]; +    u8 unknown_6DB; +    u8 unknown_6DC; +    u8 unknown_6DD;      u8 unknown_6DE; -    u8 filler_6DF[5]; +    u8 filler_6DF[1]; +    u16 unknown_6E0; +    u16 unknown_6E2;      u8 unknown_6E4; -    u8 filler_6E5[0x15]; +    u8 unknown_6E5; +    u16 unknown_6E6; +    u16 unknown_6E8; +    u8 unknown_6EA; +    u8 unknown_6EB; +    u8 unknown_6EC; +    u8 unknown_6ED; +    u16 unknown_6EE; +    u16 unknown_6F0; +    u16 unknown_6F2; +    u8 unknown_6F4[6];      u8 unknown_6FA;      u8 unknown_6FB;      u8 filler_6FC[4]; @@ -48,18 +90,66 @@ struct Weather      u8 unknown_724;      u8 filler_725[9];      u8 unknown_72E; +    u8 filler_72F; +    u16 unknown_730; +    u16 unknown_732; +    u16 unknown_734; +    u16 unknown_736; +    u8 unknown_738; +    u8 unknown_739; +    u8 unknown_73A; +    u8 filler_73B[0x3C-0x3B]; +    s16 unknown_73C; +    s16 unknown_73E; +    s16 unknown_740; +    s16 unknown_742; +    u8 filler_744[0xD-4]; +    s8 unknown_74D; +    u8 unknown_74E;  };  #define gWeather gUnknown_0202F7E8 -extern struct Weather gWeather; +extern struct Weather gUnknown_0202F7E8; +extern u8 gUnknown_0202FF38[]; +extern u16 gUnknown_0202FF58;  extern u8 *gUnknown_083970E8;  extern u8 (*gUnknown_08396FC8[][4])(void);  extern u8 (*gUnknown_083970B8[])(void); -IWRAM_DATA u8 *gUnknown_030006DC; -extern u8 gUnknown_083970C8; +IWRAM_DATA const u8 *gUnknown_030006DC; +extern const u8 gUnknown_083970C8[]; + +// This is a pointer to gWeather. All code sub_807DE78 and below uses this pointer, +// while everything above accesses gWeather directly. +extern struct Weather *const gUnknown_08396FC4; + +extern const struct SpriteSheet gUnknown_0839A9D4; +extern const struct SpriteTemplate gSpriteTemplate_839A9F0; +extern const u16 gUnknown_08397108[]; +//extern const s16 gUnknown_0839A9C8[][2]; +extern const struct Coords16 gUnknown_0839A9C8[]; +extern const struct SpriteSheet gUnknown_0839AACC; +extern const struct SpriteTemplate gSpriteTemplate_839AAA4; +extern const struct SpriteTemplate gSpriteTemplate_839AB04; + +const u8 DroughtPaletteData_0[] = INCBIN_U8("graphics/weather/drought0.bin.lz"); +const u8 DroughtPaletteData_1[] = INCBIN_U8("graphics/weather/drought1.bin.lz"); +const u8 DroughtPaletteData_2[] = INCBIN_U8("graphics/weather/drought2.bin.lz"); +const u8 DroughtPaletteData_3[] = INCBIN_U8("graphics/weather/drought3.bin.lz"); +const u8 DroughtPaletteData_4[] = INCBIN_U8("graphics/weather/drought4.bin.lz"); +const u8 DroughtPaletteData_5[] = INCBIN_U8("graphics/weather/drought5.bin.lz");  extern u8 (*gUnknown_0202FC48)[32];  extern u8 gUnknown_0202F9E8[32]; +const u8 *const gUnknown_08396FA8[] = +{ +    DroughtPaletteData_0, +    DroughtPaletteData_1, +    DroughtPaletteData_2, +    DroughtPaletteData_3, +    DroughtPaletteData_4, +    DroughtPaletteData_5, +    gSharedMem, +};  void sub_807C828(void)  { @@ -87,7 +177,7 @@ void sub_807C828(void)          gWeather.unknown_6C6 = 3;          gWeather.unknown_6C8 = 0;          gWeather.unknown_6D3 = 1; -        gWeather.unknown_6C9 = CreateTask(&sub_807C9E4, 80); +        gWeather.unknown_6C9 = CreateTask(sub_807C9E4, 80);      }  } @@ -121,12 +211,12 @@ void sub_807C9B4(u8 effect)      gWeather.unknown_6C8 = 1;  } -void sub_807C9E4(u8 task) +void sub_807C9E4(u8 taskId)  {      if (gWeather.unknown_6C8)      {          gUnknown_08396FC8[gWeather.unknown_6D0][2](); -        gTasks[task].func = &sub_807CA34; +        gTasks[taskId].func = sub_807CA34;      }  } @@ -170,7 +260,7 @@ u32 sub_807CB0C(void)  void sub_807CB10(void)  {      u16 v0; -    u8(*v1)[32]; +    u8 (*v1)[32];      u16 v2;      u16 v4;      u16 v5; @@ -180,30 +270,22 @@ void sub_807CB10(void)      u16 v11;      s16 dunno; -    gUnknown_030006DC = &gUnknown_083970C8; +    gUnknown_030006DC = gUnknown_083970C8;      for (v0 = 0; v0 <= 1; v0++)      {          if (v0 == 0) -        { -            v1 = &gUnknown_0202F9E8; -        } +            v1 = gWeather.unknown_200;          else -        { -            v1 = &gUnknown_0202F9E8 + 19; -        } +            v1 = gWeather.unk460; +          for (v2 = 0; (u16)v2 <= 0x1f; v2++)          {              v4 = v2 << 8;              if (v0 == 0) -            {                  v5 = (v2 << 8) / 16; -            }              else -            {                  v5 = 0; -            } -            v6 = 0; -            for (; v6 <= 2; v6++) +            for (v6 = 0; v6 <= 2; v6++)              {                  v4 = (v4 - v5);                  v1[v6][v2] = v4 >> 8; @@ -260,13 +342,9 @@ void sub_807CC24(void)          {              gWeather.unknown_6C3 = 0;              if (gWeather.unknown_6C0 < gWeather.unknown_6C1) -            {                  gWeather.unknown_6C0++; -            }              else -            {                  gWeather.unknown_6C0--; -            }              sub_807CEBC(0, 0x20, gWeather.unknown_6C0);          }      } @@ -275,9 +353,7 @@ void sub_807CC24(void)  void sub_807CCAC(void)  {      if (++gWeather.unknown_6CB > 1) -    {          gWeather.unknown_6CA = 0; -    }      switch (gWeather.unknown_6D0)      {      case 3: @@ -322,9 +398,7 @@ void sub_807CCAC(void)  u8 sub_807CDC4(void)  {      if (gWeather.unknown_6C7 == 0x10) -    {          return 0; -    }      if (++gWeather.unknown_6C7 >= 0x10)      {          sub_807CEBC(0, 0x20, 3); @@ -338,9 +412,7 @@ u8 sub_807CDC4(void)  u8 sub_807CE24(void)  {      if (gWeather.unknown_6C7 == 0x10) -    {          return 0; -    }      if (++gWeather.unknown_6C7 >= 0x10)      {          sub_807CEBC(0, 0x20, -6); @@ -354,9 +426,7 @@ u8 sub_807CE24(void)  u8 sub_807CE7C(void)  {      if (gWeather.unknown_6C7 == 0x10) -    {          return 0; -    }      ++gWeather.unknown_6C7;      sub_807D424(0x10 - gWeather.unknown_6C7, gWeather.unknown_6C4);      return 1; @@ -365,3 +435,1710 @@ u8 sub_807CE7C(void)  void nullsub_39(void)  {  } + +void sub_807CEBC(u8 a, u8 b, s8 c) +{ +    u16 r4; +    u16 palOffset; +    u8 *r6; +    u16 i; + +    if (c > 0) +    { +        c = c - 1; +        palOffset = a * 16; +        b += a; +        r4 = a; +        while (r4 < b) +        { +            if (gUnknown_030006DC[r4] == 0) +            { +                CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); +                palOffset += 16; +            } +            else +            { +                u8 r, g, b; + +                if (gUnknown_030006DC[r4] == 2 || r4 - 16 == gWeather.unknown_6D5) +                    r6 = gWeather.unk460[c]; +                else +                    r6 = gWeather.unknown_200[c]; +                if (r4 == 16 || r4 > 0x1B) +                { +                    for (i = 0; i < 16; i++) +                    { +                        if (gPlttBufferUnfaded[palOffset] == 0x2D9F) +                        { +                            palOffset++; +                        } +                        else +                        { +                            struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; + +                            r = r6[color.r]; +                            g = r6[color.g]; +                            b = r6[color.b]; +                            gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; +                        } +                    } +                } +                else +                { +                    for (i = 0; i < 16; i++) +                    { +                        struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; + +                        r = r6[color.r]; +                        g = r6[color.g]; +                        b = r6[color.b]; +                        gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; +                    } +                } +            } +            r4++; +        } +    } +    else if (c < 0) +    { +        c = -c - 1; +        palOffset = a * 16; +        b += a; +        r4 = a; +        while (r4 < b) +        { +            if (gUnknown_030006DC[r4] == 0) +            { +                CpuFastCopy(gPlttBufferUnfaded + palOffset, gPlttBufferFaded + palOffset, 16 * sizeof(u16)); +                palOffset += 16; +            } +            else +            { +                if (r4 == 16 || r4 > 0x1B) +                { +                    for (i = 0; i < 16; i++) +                    { +                        if (gPlttBufferUnfaded[palOffset] != 0x2D9F) +                            gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; +                        palOffset++; +                    } +                } +                else +                { +                    for (i = 0; i < 16; i++) +                    { +                        gPlttBufferFaded[palOffset] = eWeatherPaletteData.data[c][MACRO1(gPlttBufferUnfaded[palOffset])]; +                        palOffset++; +                    } +                } +            } +            r4++; +        } +    } +    else +    { +        CpuFastCopy(gPlttBufferUnfaded + a * 16, gPlttBufferFaded + a * 16, b * 16 * sizeof(u16)); +    } +} + +void sub_807D1BC(u8 a1, u8 a2, s8 c, u8 d, u16 e) +{ +    u16 palOffset; +    u16 r4; +    u16 i; +    struct RGBColor color = *(struct RGBColor *)&e; +    u8 r_ = color.r; +    u8 g_ = color.g; +    u8 b_ = color.b; + +    palOffset = a1 * 16; +    a2 += a1; +    c = c - 1; +    r4 = a1; +    while (r4 < a2) +    { +        if (gUnknown_030006DC[r4] == 0) +        { +            BlendPalette(palOffset, 16, d, e); +            palOffset += 16; +        } +        else +        { +            u8 *r5; + +            if (gUnknown_030006DC[r4] == 1) +                r5 = gWeather.unknown_200[c]; +            else +                r5 = gWeather.unk460[c]; + +            for (i = 0; i < 16; i++) +            { +                struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[palOffset]; +                u8 r = r5[color.r]; +                u8 g = r5[color.g]; +                u8 b = r5[color.b]; + +                r += ((r_ - r) * d) >> 4; +                g += ((g_ - g) * d) >> 4; +                b += ((b_ - b) * d) >> 4; +                gPlttBufferFaded[palOffset++] = (b << 10) | (g << 5) | r; +            } +        } +        r4++; +    } +} + +void sub_807D304(s8 a, u8 arg2, u16 c) +{ +    struct RGBColor color; +    u8 r_; +    u8 g_; +    u8 b_; +    u16 r4; +    u16 r5; +    u16 r12; + +    a = -a - 1; +    color = *(struct RGBColor *)&c; +    r_ = color.r; +    g_ = color.g; +    b_ = color.b; +    r5 = 0; +    for (r4 = 0; r4 < 32; r4++) +    { +        if (gUnknown_030006DC[r4] == 0) +        { +            BlendPalette(r5, 16, arg2, c); +            r5 += 16; +        } +        else +        { +            for (r12 = 0; r12 < 16; r12++) +            { +                u32 offset; +                struct RGBColor color1; +                struct RGBColor color2; +                u8 r1, g1, b1; +                u8 r2, g2, b2; + +                color1 = *(struct RGBColor *)&gPlttBufferUnfaded[r5]; +                r1 = color1.r; +                g1 = color1.g; +                b1 = color1.b; + +                offset = ((b1 & 0x1E) << 7) | ((g1 & 0x1E) << 3) | ((r1 & 0x1E) >> 1); +                color2 = *(struct RGBColor *)&eWeatherPaletteData.data[a][offset]; +                r2 = color2.r; +                g2 = color2.g; +                b2 = color2.b; + +                r2 += ((r_ - r2) * arg2) >> 4; +                g2 += ((g_ - g2) * arg2) >> 4; +                b2 += ((b_ - b2) * arg2) >> 4; + +                gPlttBufferFaded[r5++] = (b2 << 10) | (g2 << 5) | r2; +            } +        } +    } +} + +bool8 sub_807D574(u8); + +void sub_807D424(u8 a, u16 b) +{ +    struct RGBColor color; +    u8 r_; +    u8 g_; +    u8 b_; +    u16 r4; + +    BlendPalette(0, 0x100, a, b); +    color = *(struct RGBColor *)&b; +    r_ = color.r; +    g_ = color.g; +    b_ = color.b; + +    r4 = 16; +    while (r4 < 32) +    { +        if (sub_807D574(r4)) +        { +            u16 r12 = (r4 + 1) * 16; +            u16 r6 = r4 * 16; + +            while (r6 < r12) +            { +                struct RGBColor color = *(struct RGBColor *)&gPlttBufferUnfaded[r6]; +                u8 r = color.r; +                u8 g = color.g; +                u8 b = color.b; + +                r += ((28 - r) * 3) >> 2; +                g += ((31 - g) * 3) >> 2; +                b += ((28 - b) * 3) >> 2; + +                r += ((r_ - r) * a) >> 4; +                g += ((g_ - g) * a) >> 4; +                b += ((b_ - b) * a) >> 4; + +                gPlttBufferFaded[r6] = (b << 10) | (g << 5) | r; +                r6++; +            } +        } +        else +        { +            BlendPalette(r4 * 16, 16, a, b); +        } +        r4++; +    } +} + +void sub_807D540(u8 a) +{ +    if (gWeather.unknown_6FA < 6) +    { +        gWeather.unknown_6F4[gWeather.unknown_6FA] = a; +        gWeather.unknown_6FA++; +    } +} + +bool8 sub_807D574(u8 a) +{ +    u16 i; + +    for (i = 0; i < gWeather.unknown_6FA; i++) +    { +        if (gWeather.unknown_6F4[i] == a) +            return TRUE; +    } +    return FALSE; +} + +void sub_807D5BC(s8 a) +{ +    if (gWeather.unknown_6C6 == 3) +    { +        sub_807CEBC(0, 32, a); +        gWeather.unknown_6C0 = a; +    } +} + +void sub_807D5F0(u8 a, u8 b, u8 c) +{ +    if (gWeather.unknown_6C6 == 3) +    { +        gWeather.unknown_6C6 = 0; +        gWeather.unknown_6C0 = a; +        gWeather.unknown_6C1 = b; +        gWeather.unknown_6C3 = 0; +        gWeather.unknown_6C2 = c; +        sub_807D5BC(a); +    } +} + +void fade_screen(u8 a, u8 b) +{ +    u32 r4; +    u32 r1; +    u32 r2; + +    switch (a) +    { +    case 0: +        r4 = 0; +        r1 = 0; +        break; +    case 2: +        r4 = 0xFFFF; +        r1 = 0; +        break; +    case 1: +        r4 = 0; +        r1 = 1; +        break; +    case 3: +        r4 = 0xFFFF; +        r1 = 1; +        break; +    default: +        return; +    } + +    switch (gWeather.unknown_6D0) +    { +    case 3: +    case 4: +    case 5: +    case 6: +    case 11: +    case 12: +    case 13: +        r2 = 1; +        break; +    default: +        r2 = 0; +        break; +    } + +    if (r1 != 0) +    { +        if (r2 != 0) +            CpuFastCopy(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); +        BeginNormalPaletteFade(0xFFFFFFFF, b, 0, 16, r4); +        gWeather.unknown_6C6 = 2; +    } +    else +    { +        gWeather.unknown_6C4 = r4; +        if (r2 != 0) +            gWeather.unknown_6C7 = 0; +        else +            BeginNormalPaletteFade(0xFFFFFFFF, b, 16, 0, r4); +        gWeather.unknown_6C6 = 1; +        gWeather.unknown_6CA = 1; +        gWeather.unknown_6CB = 0; +        sub_807DB64(gWeather.unknown_730, gWeather.unknown_732); +        gWeather.unknown_6C8 = 1; +    } +} + +bool8 sub_807D770(void) +{ +    return gWeather.unknown_6C6 ^ 1 ? TRUE : FALSE; +} + +void sub_807D78C(u8 a) +{ +    u16 r4 = 16 + a; +    u16 i; + +    switch (gWeather.unknown_6C6) +    { +    case 1: +        if (gWeather.unknown_6CA != 0) +        { +            if (gWeather.unknown_6D0 == 6) +                sub_807D540(r4); +            r4 *= 16; +            for (i = 0; i < 16; i++) +                gPlttBufferFaded[r4 + i] = gWeather.unknown_6C4; +        } +        break; +    case 2: +        r4 *= 16; +        CpuFastCopy(gPlttBufferFaded + r4, gPlttBufferUnfaded + r4, 32); +        BlendPalette(r4, 16, gPaletteFade.y, gPaletteFade.blendColor); +        break; +    default: +        if (gWeather.unknown_6D0 != 6) +        { +            sub_807CEBC(r4, 1, gWeather.unknown_6C0); +        } +        else +        { +            r4 *= 16; +            BlendPalette(r4, 16, 12, 0x73FC); +        } +        break; +    } +} + +void sub_807D874(u8 a) +{ +    sub_807CEBC(a, 1, gWeather.unknown_6C0); +} + +u8 unref_sub_807D894(void) +{ +    if (gWeather.unknown_6C6 == 1) +        return gWeather.unknown_6CA; +    else +        return 0; +} + +void sub_807D8C0(const u16 *palette) +{ +    LoadPalette(palette, 0x100 + gWeather.unknown_6D4 * 16, 32); +    sub_807D78C(gWeather.unknown_6D4); +} + +void sub_807D8F0(u8 *a, u8 *b) +{ +    u8 r4 = *a; +    u16 i; + +    if (r4 < 7) +    { +        r4--; +        LZ77UnCompWram(gUnknown_08396FA8[r4], eWeatherPaletteData.data[r4]); +        if (r4 == 0) +        { +            eWeatherPaletteData.data[r4][0] = 0x421; +            for (i = 1; i < 0x1000; i++) +                eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4][i - 1]; +        } +        else +        { +            for (i = 0; i < 0x1000; i++) +                eWeatherPaletteData.data[r4][i] += eWeatherPaletteData.data[r4 - 1][i]; +        } +        (*a)++; +        if (*a == 7) +        { +            *a = 32; +            *b = 32; +        } +    } +} + +void sub_807D9A8(void) +{ +    gWeather.unknown_74D = 1; +    gWeather.unknown_74E = 1; +} + +bool8 sub_807D9C8(void) +{ +    if (gWeather.unknown_74D < 32) +    { +        sub_807D8F0(&gWeather.unknown_74D, &gWeather.unknown_74E); +        if (gWeather.unknown_74D < 32) +            return TRUE; +    } +    return FALSE; +} + +void sub_807DA04(s8 a) +{ +    sub_807D5BC(-a - 1); +} + +void sub_807DA14(void) +{ +    gWeather.unknown_73C = 0; +    gWeather.unknown_740 = 0; +    gWeather.unknown_742 = 0; +    gWeather.unknown_73E = 0; +    gUnknown_0202FF58 = 5; +} + +void sub_807DA4C(void) +{ +    switch (gWeather.unknown_742) +    { +    case 0: +        if (++gWeather.unknown_740 > gUnknown_0202FF58) +        { +            gWeather.unknown_740 = 0; +            sub_807DA04(gWeather.unknown_73C++); +            if (gWeather.unknown_73C > 5) +            { +                gWeather.unknown_73E = gWeather.unknown_73C; +                gWeather.unknown_742 = 1; +                gWeather.unknown_740 = 0x3C; +            } +        } +        break; +    case 1: +        gWeather.unknown_740 = (gWeather.unknown_740 + 3) & 0x7F; +        gWeather.unknown_73C = ((gSineTable[gWeather.unknown_740] - 1) >> 6) + 2; +        if (gWeather.unknown_73C != gWeather.unknown_73E) +            sub_807DA04(gWeather.unknown_73C); +        gWeather.unknown_73E = gWeather.unknown_73C; +        break; +    case 2: +        if (++gWeather.unknown_740 > gUnknown_0202FF58) +        { +            gWeather.unknown_740 = 0; +            sub_807DA04(--gWeather.unknown_73C); +            if (gWeather.unknown_73C == 3) +                gWeather.unknown_742 = 0; +        } +        break; +    } +} + +void sub_807DB64(u8 a, u8 b) +{ +    gWeather.unknown_730 = a; +    gWeather.unknown_732 = b; +    gWeather.unknown_734 = a; +    gWeather.unknown_736 = b; +    REG_BLDALPHA = (b << 8) | a; +} + +void sub_807DBA4(u8 a, u8 b, int c) +{ +    gWeather.unknown_734 = a; +    gWeather.unknown_736 = b; +    gWeather.unknown_73A = c; +    gWeather.unknown_739 = 0; +    gWeather.unknown_738 = 0; +} + +bool8 sub_807DBE8(void) +{ +    if (gWeather.unknown_730 == gWeather.unknown_734 +     && gWeather.unknown_732 == gWeather.unknown_736) +        return TRUE; +    if (++gWeather.unknown_739 > gWeather.unknown_73A) +    { +        gWeather.unknown_739 = 0; +        gWeather.unknown_738++; +        if (gWeather.unknown_738 & 1) +        { +            if (gWeather.unknown_730 < gWeather.unknown_734) +                gWeather.unknown_730++; +            else if (gWeather.unknown_730 > gWeather.unknown_734) +                gWeather.unknown_730--; +        } +        else +        { +            if (gWeather.unknown_732 < gWeather.unknown_736) +                gWeather.unknown_732++; +            else if (gWeather.unknown_732 > gWeather.unknown_736) +                gWeather.unknown_732--; +        } +    } +    REG_BLDALPHA = (gWeather.unknown_732 << 8) | gWeather.unknown_730; +    if (gWeather.unknown_730 == gWeather.unknown_734 +     && gWeather.unknown_732 == gWeather.unknown_736) +        return TRUE; +    return FALSE; +} + +void unref_sub_807DCB4(u8 a) +{ +    switch (a) +    { +    case 1: +        SetWeather(1); +        break; +    case 2: +        SetWeather(2); +        break; +    case 3: +        SetWeather(3); +        break; +    case 4: +        SetWeather(4); +        break; +    case 5: +        SetWeather(5); +        break; +    case 6: +        SetWeather(6); +        break; +    case 7: +        SetWeather(9); +        break; +    case 8: +        SetWeather(7); +        break; +    case 9: +        SetWeather(8); +        break; +    case 10: +        SetWeather(11); +        break; +    } +} + +u8 weather_get_current(void) +{ +    return gWeather.unknown_6D0; +} + +void sub_807DD5C(u16 sndEff) +{ +    if (gUnknown_0202F7E8.unknown_6C6 != 2) +    { +        switch (sndEff) +        { +        case SE_T_KOAME: +            gUnknown_0202F7E8.unknown_6DD = 0; +            break; +        case SE_T_OOAME: +            gUnknown_0202F7E8.unknown_6DD = 1; +            break; +        case SE_T_AME: +            gUnknown_0202F7E8.unknown_6DD = 2; +            break; +        default: +            return; +        } +        PlaySE(sndEff); +    } +} + +void PlayRainSoundEffect(void) +{ +    if (IsSpecialSEPlaying()) +    { +        switch (gUnknown_0202F7E8.unknown_6DD) +        { +        case 0: +            PlaySE(0x56); +            break; +        case 1: +            PlaySE(0x54); +            break; +        case 2: +        default: +            PlaySE(0x52); +            break; +        } +    } +} + +u8 sub_807DDFC(void) +{ +    return gUnknown_0202F7E8.unknown_6D3; +} + +void sub_807DE10(void) +{ +    gUnknown_0202F7E8.unknown_6C6 = 2; +} + +void unref_sub_807DE24(void) +{ +    gUnknown_0202F7E8.unknown_6C6 = 3; +} + +void sub_807DE38(u8 a) +{ +    CpuCopy16(gUnknown_083970C8, gUnknown_0202FF38, 32); +    gUnknown_0202FF38[a] = 0; +    gUnknown_030006DC = gUnknown_0202FF38; +} + +void sub_807DE68(void) +{ +    gUnknown_030006DC = gUnknown_083970C8; +} + +void sub_807DE78(void) +{ +    gUnknown_08396FC4->unknown_6C1 = 0; +    gUnknown_08396FC4->unknown_6C2 = 20; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6CC = 0; +    if (gUnknown_08396FC4->unknown_6DE == 0) +        sub_807DB64(0, 16); +} + +void sub_807DEF4(void); + +void sub_807DEC4(void) +{ +    sub_807DE78(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807DEF4(); +} + +void sub_807DFD4(void); + +void sub_807DEF4(void) +{ +    switch (gUnknown_08396FC4->unknown_6CC) +    { +    case 0: +        sub_807DFD4(); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 1: +        sub_807DBA4(12, 8, 1); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 2: +        if (sub_807DBE8()) +        { +            gUnknown_08396FC4->unknown_6D2 = 1; +            gUnknown_08396FC4->unknown_6CC++; +        } +        break; +    } +} + +void sub_807E0A0(void); + +bool8 sub_807DF54(void) +{ +    switch (gUnknown_08396FC4->unknown_6CE) +    { +    case 0: +        sub_807DBA4(0, 16, 1); +        gUnknown_08396FC4->unknown_6CE++; +        return TRUE; +    case 1: +        if (sub_807DBE8()) +        { +            sub_807E0A0(); +            gUnknown_08396FC4->unknown_6CE++; +        } +        return TRUE; +    } +    return FALSE; +} + +void sub_807DF9C(void) +{ +    gUnknown_08396FC4->unknown_6C1 = 0; +    gUnknown_08396FC4->unknown_6C2 = 20; +} + +void sub_807DFC0(void) +{ +    sub_807DF9C(); +} + +void nullsub_55(void) +{ +} + +int sub_807DFD0(void) +{ +    return 0; +} + +void sub_807DFD4(void) +{ +    u16 i; + +    if (gUnknown_08396FC4->unknown_6DE == 1) +        return; +    LoadSpriteSheet(&gUnknown_0839A9D4); +    sub_807D8C0(gUnknown_08397108); +    for (i = 0; i < 3; i++) +    { +        u8 spriteId = CreateSprite(&gSpriteTemplate_839A9F0, 0, 0, 0xFF); + +        if (spriteId != 64) +        { +            struct Sprite *sprite; + +            gUnknown_08396FC4->unknown_1F4[i] = &gSprites[spriteId]; +            sprite = gUnknown_08396FC4->unknown_1F4[i]; +            sub_80603CC(gUnknown_0839A9C8[i].x + 7, gUnknown_0839A9C8[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); +            sprite->coordOffsetEnabled = TRUE; +        } +        else +        { +            gUnknown_08396FC4->unknown_1F4[i] = NULL; +        } +    } +    gUnknown_08396FC4->unknown_6DE = 1; +} + +void sub_807E0A0(void) +{ +    u16 i; + +    if (gUnknown_08396FC4->unknown_6DE == 0) +        return; +    for (i = 0; i < 3; i++) +    { +        if (gUnknown_08396FC4->unknown_1F4[i] != NULL) +            DestroySprite(gUnknown_08396FC4->unknown_1F4[i]); +    } +    FreeSpriteTilesByTag(0x1200); +    gUnknown_08396FC4->unknown_6DE = 0; +} + +void sub_807E0F4(struct Sprite *sprite) +{ +    sprite->data0 = (sprite->data0 + 1) & 1; +    if (sprite->data0 != 0) +        sprite->pos1.x--; +} + +void sub_807E110(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6C1 = 0; +    gUnknown_08396FC4->unknown_6C2 = 0; +} + +void sub_807E174(void); + +void sub_807E144(void) +{ +    sub_807E110(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807E174(); +} + +void sub_807E174(void) +{ +    switch (gUnknown_08396FC4->unknown_6CC) +    { +    case 0: +        if (gUnknown_08396FC4->unknown_6C6 != 0) +            gUnknown_08396FC4->unknown_6CC++; +        break; +    case 1: +        sub_807D9A8(); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 2: +        if (sub_807D9C8() == FALSE) +            gUnknown_08396FC4->unknown_6CC++; +        break; +    case 3: +        sub_807DA14(); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 4: +        sub_807DA4C(); +        if (gUnknown_08396FC4->unknown_73C == 6) +        { +            gUnknown_08396FC4->unknown_6D2 = 1; +            gUnknown_08396FC4->unknown_6CC++; +        } +        break; +    default: +        sub_807DA4C(); +        break; +    } +} + +int sub_807E258(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 = 0x9E; +        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 + +void sub_807E364(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6D6 = 0; +    gUnknown_08396FC4->unknown_6DB = 8; +    gUnknown_08396FC4->unknown_6DC = 0; +    gUnknown_08396FC4->unknown_6D9 = 10; +    gUnknown_08396FC4->unknown_6C1 = 3; +    gUnknown_08396FC4->unknown_6C2 = 20; +    sub_807DD5C(SE_T_KOAME); +} + +void sub_807E400(void); + +void sub_807E3D0(void) +{ +    sub_807E364(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807E400(); +} + +void sub_807E7A4(void); +u8 sub_807E7B4(void); +u8 sub_807E8E8(void); + +void sub_807E400(void) +{ +    switch (gUnknown_08396FC4->unknown_6CC) +    { +    case 0: +        sub_807E7A4(); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 1: +        if (sub_807E7B4() == 0) +            gUnknown_08396FC4->unknown_6CC++; +        break; +    case 2: +        if (sub_807E8E8() == FALSE) +        { +            gUnknown_08396FC4->unknown_6D2 = 1; +            gUnknown_08396FC4->unknown_6CC++; +        } +        break; +    } +} + +void sub_807E974(void); + +bool8 sub_807E460(void) +{ +    switch (gUnknown_08396FC4->unknown_6CE) +    { +    case 0: +        if (gUnknown_08396FC4->unknown_6D1 == 3 +         || gUnknown_08396FC4->unknown_6D1 == 5 +         || gUnknown_08396FC4->unknown_6D1 == 13) +        { +            gUnknown_08396FC4->unknown_6CE = 0xFF; +            return FALSE; +        } +        else +        { +            gUnknown_08396FC4->unknown_6D9 = 0; +            gUnknown_08396FC4->unknown_6CE++; +        } +        // fall through +    case 1: +        if (sub_807E8E8() == FALSE) +        { +            sub_807E974(); +            gUnknown_08396FC4->unknown_6CE++; +            return FALSE; +        } +        return TRUE; +    } +    return FALSE; +} + +//extern const struct Coords16 gUnknown_0839AAC4[]; +extern const u16 gUnknown_0839AAC4[][2]; +//extern const struct Coords16 gUnknown_0839AABC[]; +extern const s16 gUnknown_0839AABC[][2]; + +void sub_807E4EC(struct Sprite *sprite) +{ +    u32 randVal; +    u16 r6; +    s32 r4; +    s32 r0; + +    if (sprite->data1 == 0) +        sprite->data1 = 361; +    randVal = sprite->data1 * 1103515245 + 12345; +    sprite->data1 = ((randVal & 0x7FFF0000) >> 16) % 600; + +    r6 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; + +    r4 = sprite->data1 % 30; +    sprite->data2 = r4 * 8;  // useless assignment + +    r0 = sprite->data1 / 30; +    sprite->data3 = r0 * 8;  // useless assignment + +    sprite->data2 = r4; +    sprite->data2 <<= 7; + +    sprite->data3 = r0; +    sprite->data3 <<= 7; + +    sprite->data2 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0] * r6; +    sprite->data3 -= gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1] * r6; + +    StartSpriteAnim(sprite, 0); +    sprite->data4 = 0; +    sprite->coordOffsetEnabled = FALSE; +    sprite->data0 = r6; +} + +void sub_807E5C0(struct Sprite *sprite) +{ +    if (sprite->data4 == 0) +    { +        sprite->data2 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][0]; +        sprite->data3 += gUnknown_0839AABC[gUnknown_08396FC4->unknown_6DC][1]; +        sprite->pos1.x = sprite->data2 >> 4; +        sprite->pos1.y = sprite->data3 >> 4; + +        if (sprite->data5 != 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->data0--; +        if (sprite->data0 == 0) +        { +            StartSpriteAnim(sprite, gUnknown_08396FC4->unknown_6DC + 1); +            sprite->data4 = 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->data0 == 0) +    { +        sub_807E4EC(sprite); +        sprite->callback = sub_807E5C0; +    } +    else +    { +        sprite->data0--; +    } +} + +void sub_807E6F0(struct Sprite *sprite, u16 b) +{ +    u16 r8 = gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][0]; +    u16 r6 = b / (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); +    u16 r4 = b % (gUnknown_0839AAC4[gUnknown_08396FC4->unknown_6DC][1] + r8); + +    while (--r6 != 0xFFFF) +        sub_807E4EC(sprite); +    if (r4 < r8) +    { +        while (--r4 != 0xFFFF) +            sub_807E5C0(sprite); +        sprite->data6 = 0; +    } +    else +    { +        sprite->data0 = r4 - r8; +        sprite->invisible = TRUE; +        sprite->data6 = 1; +    } +} + +void sub_807E7A4(void) +{ +    LoadSpriteSheet(&gUnknown_0839AACC); +} + +extern const struct Coords16 gUnknown_0839AA08[]; + +bool8 sub_807E7B4(void) +{ +    u8 r7; +    u8 spriteId; + +    if (gUnknown_08396FC4->unknown_6DA == 24) +        return FALSE; + +    r7 = gUnknown_08396FC4->unknown_6DA; +    spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AAA4, +      gUnknown_0839AA08[r7].x, gUnknown_0839AA08[r7].y, 78); +    if (spriteId != 64) +    { +        gSprites[spriteId].data5 = 0; +        gSprites[spriteId].data1 = r7 * 145; +        while (gSprites[spriteId].data1 >= 600) +            gSprites[spriteId].data1 -= 600; +        sub_807E4EC(&gSprites[spriteId]); +        sub_807E6F0(&gSprites[spriteId], r7 * 9); +        gSprites[spriteId].invisible = TRUE; +        gUnknown_08396FC4->unknown_0[r7] = &gSprites[spriteId]; +    } +    else +    { +        gUnknown_08396FC4->unknown_0[r7] = NULL; +    } + +    if (++gUnknown_08396FC4->unknown_6DA == 24) +    { +        u16 i; + +        for (i = 0; i < 24; i++) +        { +            if (gUnknown_08396FC4->unknown_0[i] != NULL) +            { +                if (gUnknown_08396FC4->unknown_0[i]->data6 == 0) +                    gUnknown_08396FC4->unknown_0[i]->callback = sub_807E5C0; +                else +                    gUnknown_08396FC4->unknown_0[i]->callback = sub_807E6C4; +            } +        } +        return FALSE; +    } +    return TRUE; +} + +bool8 sub_807E8E8(void) +{ +    if (gUnknown_08396FC4->unknown_6D8 == gUnknown_08396FC4->unknown_6D9) +        return FALSE; + +    if (++gUnknown_08396FC4->unknown_6D6 > gUnknown_08396FC4->unknown_6DB) +    { +        gUnknown_08396FC4->unknown_6D6 = 0; +        if (gUnknown_08396FC4->unknown_6D8 < gUnknown_08396FC4->unknown_6D9) +        { +            gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8++]->data5 = 1; +        } +        else +        { +            gUnknown_08396FC4->unknown_6D8--; +            gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->data5 = 0; +            gUnknown_08396FC4->unknown_0[gUnknown_08396FC4->unknown_6D8]->invisible = TRUE; +        } +    } +    return TRUE; +} + +void sub_807E974(void) +{ +    u16 i; + +    for (i = 0; i < gUnknown_08396FC4->unknown_6DA; i++) +    { +        if (gUnknown_08396FC4->unknown_0[i] != NULL) +            DestroySprite(gUnknown_08396FC4->unknown_0[i]); +    } +    gUnknown_08396FC4->unknown_6DA = 0; +    FreeSpriteTilesByTag(0x1206); +} + +void sub_807E9C8(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6C1 = 3; +    gUnknown_08396FC4->unknown_6C2 = 20; +    gUnknown_08396FC4->unknown_6E5 = 16; +    gUnknown_08396FC4->unknown_6E0 = 0; +} + +void snowflakes_progress2(void); +void sub_807ED48(struct Sprite *); + +void sub_807EA18(void) +{ +    sub_807E9C8(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +    { +        u16 i; + +        snowflakes_progress2(); +        for (i = 0; i < gUnknown_08396FC4->unknown_6E4; i++) +        { +            sub_807ED48(gUnknown_08396FC4->unknown_60[i]); +        } +    } +} + +u8 snowflakes_progress(void); + +void snowflakes_progress2(void) +{ +    if (gUnknown_08396FC4->unknown_6CC == 0 && snowflakes_progress() == FALSE) +    { +        gUnknown_08396FC4->unknown_6D2 = 1; +        gUnknown_08396FC4->unknown_6CC++; +    } +} + +bool8 sub_807EAC0(void) +{ +    switch (gUnknown_08396FC4->unknown_6CE) +    { +    case 0: +        gUnknown_08396FC4->unknown_6E5 = 0; +        gUnknown_08396FC4->unknown_6E0 = 0; +        gUnknown_08396FC4->unknown_6CE++; +        // fall through +    case 1: +        if (snowflakes_progress() == FALSE) +        { +            gUnknown_08396FC4->unknown_6CE++; +            return FALSE; +        } +        return TRUE; +    } +    return FALSE; +} + +bool8 snowflake_add(void); +bool8 snowflake_remove(void); + +bool8 snowflakes_progress(void) +{ +    if (gUnknown_08396FC4->unknown_6E4 == gUnknown_08396FC4->unknown_6E5) +        return FALSE; + +    gUnknown_08396FC4->unknown_6E0++; +    if (gUnknown_08396FC4->unknown_6E0 > 36) +    { +        gUnknown_08396FC4->unknown_6E0 = 0; +        if (gUnknown_08396FC4->unknown_6E4 < gUnknown_08396FC4->unknown_6E5) +            snowflake_add(); +        else +            snowflake_remove(); +    } +    return (gUnknown_08396FC4->unknown_6E4 != gUnknown_08396FC4->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); + +bool8 snowflake_add(void) +{ +    u8 spriteId = CreateSpriteAtEnd(&gSpriteTemplate_839AB04, 0, 0, 78); + +    if (spriteId == 64) +        return FALSE; +    gSprites[spriteId].data4 = gUnknown_08396FC4->unknown_6E4; +    sub_807EC40(&gSprites[spriteId]); +    gSprites[spriteId].coordOffsetEnabled = TRUE; +    gUnknown_08396FC4->unknown_60[gUnknown_08396FC4->unknown_6E4++] = &gSprites[spriteId]; +    return TRUE; +} + +bool8 snowflake_remove(void) +{ +    if (gUnknown_08396FC4->unknown_6E4 != 0) +    { +        DestroySprite(gUnknown_08396FC4->unknown_60[--gUnknown_08396FC4->unknown_6E4]); +        return TRUE; +    } +    return FALSE; +} + +void sub_807EC40(struct Sprite *sprite) +{ +    u16 r4 = ((sprite->data4 * 5) & 7) * 30 + (Random() % 30); +    u16 r6; + +    sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); +    sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); +    sprite->data0 = sprite->pos1.y * 128; +    sprite->pos2.x = 0; +    r6 = Random(); +    sprite->data1 = (r6 & 3) * 5 + 64; +    sprite->data7 = (r6 & 3) * 5 + 64; +    StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); +    sprite->data3 = 0; +    sprite->data2 = ((r6 & 3) == 0) ? 2 : 1; +    sprite->data6 = (r6 & 0x1F) + 210; +    sprite->data5 = 0; +} + +void sub_807ECEC(struct Sprite *sprite) +{ +    if (gUnknown_08396FC4->unknown_6E2 > 18) +    { +        sprite->invisible = FALSE; +        sprite->callback = sub_807ED48; +        sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); +        sprite->data0 = sprite->pos1.y * 128; +        gUnknown_08396FC4->unknown_6E2 = 0; +    } +} + +void sub_807ED48(struct Sprite *sprite) +{ +    s16 r3; +    s16 r2; + +    sprite->data0 += sprite->data1; +    sprite->pos1.y = sprite->data0 >> 7; +    sprite->data3 = (sprite->data3 + sprite->data2) & 0xFF; +    sprite->pos2.x = gSineTable[sprite->data3] / 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->data0 = sprite->pos1.y * 128; +        sprite->data5 = 0; +        sprite->data6 = 220; +    } +    else if (r2 > 242 && r2 < 250) +    { +        sprite->pos1.y = 163; +        sprite->data0 = sprite->pos1.y * 128; +        sprite->data5 = 0; +        sprite->data6 = 220; +        sprite->invisible = TRUE; +        sprite->callback = sub_807ECEC; +    } + +    sprite->data5++; +    if (sprite->data5 == sprite->data6) +    { +        sub_807EC40(sprite); +        sprite->pos1.y = 250; +        sprite->invisible = TRUE; +        sprite->callback = sub_807ECEC; +    } +} + +void sub_807EE80(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6D6 = 0; +    gUnknown_08396FC4->unknown_6DB = 4; +    gUnknown_08396FC4->unknown_6DC = 0; +    gUnknown_08396FC4->unknown_6D9 = 16; +    gUnknown_08396FC4->unknown_6C1 = 3; +    gUnknown_08396FC4->unknown_6C2 = 20; +    gUnknown_08396FC4->unknown_6D2 = 0;  // duplicate assignment +    gUnknown_08396FC4->unknown_6ED = 0; +    sub_807DD5C(0x51); +} + +void sub_807EFC0(void); + +void sub_807EEF4(void) +{ +    sub_807EE80(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807EFC0(); +} + +void sub_807EF24(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6D6 = 0; +    gUnknown_08396FC4->unknown_6DB = 4; +    gUnknown_08396FC4->unknown_6DC = 1; +    gUnknown_08396FC4->unknown_6D9 = 24; +    gUnknown_08396FC4->unknown_6C1 = 3; +    gUnknown_08396FC4->unknown_6C2 = 20; +    gUnknown_08396FC4->unknown_6D2 = 0;  // duplicate assignment +    sub_807DD5C(0x53); +} + +void sub_807EF90(void) +{ +    sub_807EF24(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807EFC0(); +} + +void sub_807F434(void); +void sub_807F3F8(u16); + +void sub_807EFC0(void) +{ +    sub_807F434(); +    switch (gUnknown_08396FC4->unknown_6CC) +    { +    case 0: +        sub_807E7A4(); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 1: +        if (sub_807E7B4()) +            break; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 2: +        if (sub_807E8E8()) +            break; +        gUnknown_08396FC4->unknown_6D2 = 1; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 3: +        if (gUnknown_08396FC4->unknown_6C6 == 0) +            break; +        gUnknown_08396FC4->unknown_6CC = 6; +        break; +    case 4: +        gUnknown_08396FC4->unknown_6EA = 1; +        gUnknown_08396FC4->unknown_6E6 = (Random() % 360) + 360; +        gUnknown_08396FC4->unknown_6CC++; +        // fall through +    case 5: +        if (--gUnknown_08396FC4->unknown_6E6 != 0) +            break; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 6: +        gUnknown_08396FC4->unknown_6EA = 1; +        gUnknown_08396FC4->unknown_6EB = Random() % 2; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 7: +        gUnknown_08396FC4->unknown_6EC = (Random() & 1) + 1; +        gUnknown_08396FC4->unknown_6CC++; +        // fall through +    case 8: +        sub_807D5BC(19); +        if (gUnknown_08396FC4->unknown_6EB == 0 && gUnknown_08396FC4->unknown_6EC == 1) +            sub_807F3F8(20); +        gUnknown_08396FC4->unknown_6E6 = (Random() % 3) + 6; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 9: +        if (--gUnknown_08396FC4->unknown_6E6 != 0) +            break; +        sub_807D5BC(3); +        gUnknown_08396FC4->unknown_6EA = 1; +        if (--gUnknown_08396FC4->unknown_6EC != 0) +        { +            gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; +            gUnknown_08396FC4->unknown_6CC = 10; +        } +        else if (gUnknown_08396FC4->unknown_6EB == 0) +        { +            gUnknown_08396FC4->unknown_6CC = 4; +        } +        else +        { +            gUnknown_08396FC4->unknown_6CC = 11; +        } +        break; +    case 10: +        if (--gUnknown_08396FC4->unknown_6E6 != 0) +            break; +        gUnknown_08396FC4->unknown_6CC = 8; +        break; +    case 11: +        gUnknown_08396FC4->unknown_6E6 = (Random() % 16) + 60; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 12: +        if (--gUnknown_08396FC4->unknown_6E6 != 0) +            break; +        sub_807F3F8(100); +        sub_807D5BC(19); +        // Why use "% 16" everywhere else and "& 0xF" here. So dumb. +        gUnknown_08396FC4->unknown_6E6 = (Random() & 0xF) + 30; +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 13: +        if (--gUnknown_08396FC4->unknown_6E6 != 0) +            break; +        sub_807D5F0(19, 3, 5); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 14: +        if (gUnknown_08396FC4->unknown_6C6 != 3) +            break; +        gUnknown_08396FC4->unknown_6EA = 1; +        gUnknown_08396FC4->unknown_6CC = 4; +        break; +    } +} + +bool8 sub_807F34C(void) +{ +    switch (gUnknown_08396FC4->unknown_6CE) +    { +    case 0: +        gUnknown_08396FC4->unknown_6EA = 0; +        gUnknown_08396FC4->unknown_6CE++; +        // fall through +    case 1: +        sub_807EFC0(); +        if (gUnknown_08396FC4->unknown_6EA != 0) +        { +            if (gUnknown_08396FC4->unknown_6D1 == 3 +             || gUnknown_08396FC4->unknown_6D1 == 5 +             || gUnknown_08396FC4->unknown_6D1 == 13) +                return FALSE; +            gUnknown_08396FC4->unknown_6D9 = 0; +            gUnknown_08396FC4->unknown_6CE++; +        } +        break; +    case 2: +        if (sub_807E8E8()) +            break; +        sub_807E974(); +        gUnknown_08396FC4->unknown_6ED = 0; +        gUnknown_08396FC4->unknown_6CE++; +        return FALSE; +    default: +        return FALSE; +    } +    return TRUE; +} + +void sub_807F3F8(u16 a) +{ +    if (gUnknown_08396FC4->unknown_6ED == 0) +    { +        gUnknown_08396FC4->unknown_6E8 = Random() % a; +        gUnknown_08396FC4->unknown_6ED = 1; +    } +} + +void sub_807F434(void) +{ +    if (gUnknown_08396FC4->unknown_6ED == 1) +    { +        if (gUnknown_08396FC4->unknown_6E8 == 0) +        { +            if (IsSEPlaying()) +                return; +            if (Random() & 1) +                PlaySE(0x57); +            else +                PlaySE(0x58); +            gUnknown_08396FC4->unknown_6ED = 0; +        } +        else +        { +            gUnknown_08396FC4->unknown_6E8--; +        } +    } +} + +void sub_807F49C(void) +{ +    gUnknown_08396FC4->unknown_6CC = 0; +    gUnknown_08396FC4->unknown_6D2 = 0; +    gUnknown_08396FC4->unknown_6C1 = 0; +    gUnknown_08396FC4->unknown_6C2 = 20; +    if (gUnknown_08396FC4->unknown_6FB == 0) +    { +        gUnknown_08396FC4->unknown_6F0 = 0; +        gUnknown_08396FC4->unknown_6F2 = 0; +        gUnknown_08396FC4->unknown_6EE = 0; +        sub_807DB64(0, 16); +    } +} + +void sub_807F52C(void); + +void sub_807F4FC(void) +{ +    sub_807F49C(); +    while (gUnknown_08396FC4->unknown_6D2 == 0) +        sub_807F52C(); +} + +void sub_807F6E8(void); + +void sub_807F52C(void) +{ +    gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; +    if (++gUnknown_08396FC4->unknown_6F0 > 3) +    { +        gUnknown_08396FC4->unknown_6F0 = 0; +        gUnknown_08396FC4->unknown_6F2++; +    } +    switch (gUnknown_08396FC4->unknown_6CC) +    { +    case 0: +        sub_807F6E8(); +        if (gUnknown_08396FC4->unknown_6D0 == 6) +            sub_807DBA4(12, 8, 3); +        else +            sub_807DBA4(4, 16, 0); +        gUnknown_08396FC4->unknown_6CC++; +        break; +    case 1: +        if (sub_807DBE8()) +        { +            gUnknown_08396FC4->unknown_6D2 = 1; +            gUnknown_08396FC4->unknown_6CC++; +        } +        break; +    } +} + +void sub_807F7A4(void); + +bool8 sub_807F5EC(void) +{ +    gUnknown_08396FC4->unknown_6EE = (gSpriteCoordOffsetX - gUnknown_08396FC4->unknown_6F2) & 0xFF; +    if (++gUnknown_08396FC4->unknown_6F0 > 3) +    { +        gUnknown_08396FC4->unknown_6F0 = 0; +        gUnknown_08396FC4->unknown_6F2++; +    } +    switch (gUnknown_08396FC4->unknown_6CE) +    { +    case 0: +        sub_807DBA4(0, 16, 3); +        gUnknown_08396FC4->unknown_6CE++; +        break; +    case 1: +        if (!sub_807DBE8()) +            break; +        gUnknown_08396FC4->unknown_6CE++; +        break; +    case 2: +        sub_807F7A4(); +        gUnknown_08396FC4->unknown_6CE++; +        break; +    default: +        return FALSE; +    } +    return TRUE; +} + +void sub_807F688(struct Sprite *sprite) +{ +    sprite->pos2.y = (u8)gSpriteCoordOffsetY; +    sprite->pos1.x = gUnknown_08396FC4->unknown_6EE + 32 + sprite->data0 * 64; +    if (sprite->pos1.x > 0x10F) +    { +        sprite->pos1.x = 480 + gUnknown_08396FC4->unknown_6EE - (4 - sprite->data0) * 64; +        sprite->pos1.x &= 0x1FF; +    } +} diff --git a/src/field/fldeff_cut.c b/src/field/fldeff_cut.c index 00643a979..00cabe5c0 100644 --- a/src/field/fldeff_cut.c +++ b/src/field/fldeff_cut.c @@ -16,8 +16,7 @@  #include "sprite.h"  #include "task.h"  #include "trig.h" - -extern u8 gCutGrassSpriteArray[8]; // seems to be an array of 8 sprite IDs +#include "ewram.h"  extern void (*gFieldCallback)(void);  extern void (*gUnknown_03005CE4)(void); @@ -135,9 +134,9 @@ bool8 FldEff_CutGrass(void)      // populate sprite ID array      for(i = 0; i < 8; i++)      { -        gCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass, +        eCutGrassSpriteArray[i] = CreateSprite((struct SpriteTemplate *)&gSpriteTemplate_CutGrass,          gSprites[gPlayerAvatar.spriteId].oam.x + 8, gSprites[gPlayerAvatar.spriteId].oam.y + 20, 0); -        gSprites[gCutGrassSpriteArray[i]].data2 = 32 * i; +        gSprites[eCutGrassSpriteArray[i]].data2 = 32 * i;      }      return 0;  } @@ -273,8 +272,8 @@ void sub_80A2AB8(void)      u8 i;      for (i = 1; i < 8; i++) -        DestroySprite(&gSprites[gCutGrassSpriteArray[i]]); -    FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS); +        DestroySprite(&gSprites[eCutGrassSpriteArray[i]]); +    FieldEffectStop(&gSprites[eCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS);      sub_8064E2C();      ScriptContext2_Disable();  } diff --git a/src/field/fldeff_softboiled.c b/src/field/fldeff_softboiled.c index 22f9c13f5..b2c3d9bd1 100644 --- a/src/field/fldeff_softboiled.c +++ b/src/field/fldeff_softboiled.c @@ -9,6 +9,7 @@  #include "sprite.h"  #include "strings.h"  #include "task.h" +#include "ewram.h"  struct Struct2001000 {      u8 unk0; @@ -38,15 +39,9 @@ struct Struct201C000 {  #define WINDOW_RIGHT 29  #endif -#define EWRAM_1000 (*(struct Struct2001000 *)(unk_2000000 + 0x1000)) -#define EWRAM_1B000_2 (*(struct Struct201B000 *)(unk_2000000 + 0x1B000)) -#define EWRAM_1C000 (*(struct Struct201C000 *)(unk_2000000 + 0x1C000)) -  // extern  extern u8 gUnknown_0202E8F6;  extern u8 gLastFieldPokeMenuOpened; - -extern u8 unk_2000000[];  extern u8 gUnknown_0202E8F4;  // Static diff --git a/src/field/item_menu.c b/src/field/item_menu.c index c508bcacf..09542cc6d 100644 --- a/src/field/item_menu.c +++ b/src/field/item_menu.c @@ -34,9 +34,9 @@  #include "task.h"  #include "text.h"  #include "unknown_task.h" +#include "ewram.h"  // External stuff -extern u8 ewram[];  extern void gpu_pal_allocator_reset__manage_upper_four(void);  extern void sub_80F9020(void);  extern void sub_80F9988(); @@ -158,12 +158,6 @@ extern struct PocketScrollState gBagPocketScrollStates[];  extern struct ItemSlot *gCurrentBagPocketItemSlots;  // selected pocket item slots  extern const u8 Event_NoRegisteredItem[]; -#define ewramBerryPic             (ewram + 0) -#define ewramBerryPicTemp         (ewram + 0x1000) -#define ewramSavedItemsPocket     ((struct ItemSlot *)(ewram + 0x1E000))  // saved items pocket (for Wally battle) -#define ewramSavedPokeballsPocket ((struct ItemSlot *)(ewram + 0x1F000))  // saved Pokeballs pocket (for Wally battle) -#define ewramBagSetupStep         (ewram[0x1FFFF]) -  extern const struct CompressedSpriteSheet sMaleBagSpriteSheet;  extern const struct CompressedSpriteSheet sFemaleBagSpriteSheet;  extern const struct CompressedSpritePalette sBagSpritePalette; diff --git a/src/field/party_menu.c b/src/field/party_menu.c index a4c66d891..42bb66f6f 100644 --- a/src/field/party_menu.c +++ b/src/field/party_menu.c @@ -25,7 +25,6 @@  #include "pokemon_summary_screen.h"  #include "rom_8077ABC.h"  #include "rom_8094928.h" -#include "script_pokemon_80F9.h"  #include "songs.h"  #include "sound.h"  #include "species.h" @@ -35,6 +34,8 @@  #include "task.h"  #include "unknown_task.h"  #include "util.h" +#include "script_pokemon_80F9.h" +#include "ewram.h"  struct Coords8  { @@ -483,9 +484,6 @@ struct Unk201FE00      u8 unkE02;  }; -#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000)) -#define ewram1FE00 (*(struct Unk201FE00 *)(ewram + 0x1FE00)) -  extern u16 gBattleTypeFlags;  extern u8 gTileBuffer[];  extern u8 gUnknown_0202E8F4; @@ -1111,7 +1109,7 @@ _0806B980:\n\      movs r3, 0x3\n\      bl sub_806BA94\n\  _0806B98C:\n\ -    ldr r0, _0806B99C @ =0x0201b000\n\ +    ldr r0, _0806B99C @ =gSharedMem + 0x1B000\n\      ldr r1, _0806B9A0 @ =0x00000261\n\      adds r0, r1\n\      movs r1, 0x2\n\ @@ -1120,7 +1118,7 @@ _0806B98C:\n\      pop {r0}\n\      bx r0\n\      .align 2, 0\n\ -_0806B99C: .4byte 0x0201b000\n\ +_0806B99C: .4byte gSharedMem + 0x1B000\n\  _0806B9A0: .4byte 0x00000261\n\      .syntax divided\n");  } @@ -2550,7 +2548,7 @@ void sub_806CF04(void)  {      asm(".syntax unified\n\      push {r4,r5,lr}\n\ -    ldr r4, _0806CF94 @ =0x02001000\n\ +    ldr r4, _0806CF94 @ =gSharedMem + 0x1000\n\      ldrb r1, [r4, 0x3]\n\      lsls r0, r1, 4\n\      adds r0, r1\n\ @@ -2618,7 +2616,7 @@ void sub_806CF04(void)      pop {r0}\n\      bx r0\n\      .align 2, 0\n\ -_0806CF94: .4byte 0x02001000\n\ +_0806CF94: .4byte gSharedMem + 0x1000\n\  _0806CF98: .4byte gSprites + 0x20\n\  _0806CF9C: .4byte SpriteCB_sub_806D37C\n\      .syntax divided\n"); @@ -2855,7 +2853,7 @@ void sub_806D5B8(u8 monIndex)      ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom);      var1 = 0; -    CpuFastSet(&var1, (void *)(OBJ_VRAM1 + monIndex * 0x400), 0x1000100); +    CpuFastSet(&var1, OBJ_VRAM1 + monIndex * 0x400, 0x1000100);  }  void sub_806D668(u8 monIndex) @@ -2869,7 +2867,7 @@ void sub_806D668(u8 monIndex)      ZeroFillWindowRect(&gUnknown_03004210, left, top, right, bottom);      var1 = 0; -    CpuFastSet(&var1, (void *)(OBJ_VRAM1 + 0x300 + monIndex * 0x400), 0x1000040); +    CpuFastSet(&var1, OBJ_VRAM1 + 0x300 + monIndex * 0x400, 0x1000040);  }  bool8 LoadPartyMenuGraphics(u8 a) @@ -3460,7 +3458,7 @@ void PartyMenuDoPrintMonNickname(u8 monIndex, int b, const u8 *nameBuffer)      u32 var1 = 0;      CpuFastSet(&var1, gTileBuffer, 0x1000100);      sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gTileBuffer, nameBuffer); -    CpuFastSet(gTileBuffer, (void *)(OBJ_VRAM1 + (monIndex * 0x400)), 128); +    CpuFastSet(gTileBuffer, OBJ_VRAM1 + (monIndex * 0x400), 128);  }  void PrintPartyMenuMonNickname(u8 monIndex, u8 b, struct Pokemon *pokemon) @@ -3570,7 +3568,7 @@ void PartyMenuDoPrintLevel(u8 monIndex, u8 menuLayout, u8 level)      var1 = 0;      CpuFastSet(&var1, gUnknown_02039460, 0x1000020);      sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); -    CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x200 + (monIndex * 0x400)), 32); +    CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x200 + (monIndex * 0x400), 32);  }  void PartyMenuPrintLevel(u8 monIndex, u8 menuLayout, struct Pokemon *pokemon) @@ -3664,7 +3662,7 @@ void PartyMenuDoPrintHP(u8 monIndex, u8 b, u16 currentHP, u16 maxHP)      CpuFastSet(&var, gUnknown_02039460, 0x1000040);      sub_8004E3C((struct WindowConfig *)&gWindowConfig_81E6CAC, gUnknown_02039460 - 0x100 /*gTileBuffer*/, gStringVar1); -    CpuFastSet(gUnknown_02039460, (void *)(OBJ_VRAM1 + 0x300 + (monIndex * 0x400)), 64); +    CpuFastSet(gUnknown_02039460, OBJ_VRAM1 + 0x300 + (monIndex * 0x400), 64);  }  void PartyMenuPrintHP(u8 monIndex, u8 b, struct Pokemon *pokemon) @@ -4457,7 +4455,7 @@ void sub_806F8AC(u8 taskId)          ewram1B000.unk261 = 2;          sub_806E834(gStringVar4, 1);          sp14 += sp0.unk4; -        SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&sp14); +        SetMonData(ewram1C000.pokemon, MON_DATA_HP, &sp14);          RemoveBagItem(ewram1C000.unk6, 1);          sub_8032638();          gTasks[taskId].func = sub_806FB44; @@ -4478,7 +4476,7 @@ void sub_806FA18(u8 taskId)          PlaySE(SE_KAIFUKU);          ewram1C000.unkC = 0;          gTasks[taskId].data[11] -= gTasks[taskId].data[12]; -        SetMonData(ewram1C000.pokemon, MON_DATA_HP, (u8 *)&gTasks[taskId].data[11]); +        SetMonData(ewram1C000.pokemon, MON_DATA_HP, &gTasks[taskId].data[11]);          SetMonIconAnim(GetMonIconSpriteId(ewram1C000.unk4, ewram01000.unk1), ewram1C000.pokemon);          ewram1C000.unk5 = gSprites[ewram01000.unk2].data0;          ewram1C000.pokemon = &gPlayerParty[ewram1C000.unk5]; @@ -5035,7 +5033,7 @@ void PrintStatGrowthsInLevelUpWindow(u8 taskId) {      movs r2, 0x13\n\      mov r8, r2\n\  _0807086C:\n\ -    ldr r1, _08070930 @ =0x0201c000\n\ +    ldr r1, _08070930 @ =gSharedMem + 0x1C000\n\      ldr r0, [r1]\n\      ldr r1, _08070934 @ =StatDataTypes\n\      adds r1, r7, r1\n\ @@ -5043,7 +5041,7 @@ _0807086C:\n\      bl GetMonData\n\      adds r1, r7, 0x6\n\      lsls r1, 1\n\ -    ldr r2, _08070938 @ =0x0201b264\n\ +    ldr r2, _08070938 @ =gSharedMem + 0x1B264\n\      adds r1, r2, r1\n\      strh r0, [r1]\n\      lsls r6, r7, 1\n\ @@ -5125,9 +5123,9 @@ _0807086C:\n\      bx r0\n\      .align 2, 0\n\  _0807092C: .4byte gStringVar1\n\ -_08070930: .4byte 0x0201c000\n\ +_08070930: .4byte gSharedMem + 0x1C000\n\  _08070934: .4byte StatDataTypes\n\ -_08070938: .4byte 0x0201b264\n\ +_08070938: .4byte gSharedMem + 0x1B264\n\  _0807093C: .4byte StatNames\n\  _08070940: .4byte gOtherText_TallPlusAndRightArrow\n\      .syntax divided\n"); diff --git a/src/field/player_pc.c b/src/field/player_pc.c index 83e6dd221..ce78a88d8 100644 --- a/src/field/player_pc.c +++ b/src/field/player_pc.c @@ -20,6 +20,7 @@  #include "mail.h"  #include "overworld.h"  #include "player_pc.h" +#include "ewram.h"  extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16);  extern void DoPlayerPCDecoration(u8); @@ -32,7 +33,7 @@ extern u8 sub_807D770(void);  extern void sub_808B020(void);  extern void sub_80F944C(void); -static EWRAM_DATA u8 *gPcItemMenuOptionOrder = NULL; +static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;  static u8 gPcItemMenuOptionsNum; @@ -211,14 +212,14 @@ void NewGameInitPCItems(void)  void BedroomPC(void)  { -    gPcItemMenuOptionOrder = (u8 *)gBedroomPC_OptionOrder; +    gPcItemMenuOptionOrder = gBedroomPC_OptionOrder;      gPcItemMenuOptionsNum = 4;      DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0);  }  void PlayerPC(void)  { -    gPcItemMenuOptionOrder = (u8 *)gPlayerPC_OptionOrder; +    gPcItemMenuOptionOrder = gPlayerPC_OptionOrder;      gPcItemMenuOptionsNum = 3;      DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gOtherText_WhatWillYouDo, InitPlayerPCMenu, 0);  } @@ -271,14 +272,14 @@ static void PlayerPC_ItemStorage(u8 taskId)  static void PlayerPC_Mailbox(u8 taskId)  {      MenuZeroFillWindowRect(0, 0, 10, 9); -    gMailboxInfo.count = GetMailboxMailCount(); +    eMailboxInfo.count = GetMailboxMailCount(); -    if (gMailboxInfo.count == 0) +    if (eMailboxInfo.count == 0)          DisplayItemMessageOnField(taskId, gOtherText_NoMailHere, ReshowPlayerPC, 0);      else      { -        gMailboxInfo.cursorPos = 0; -        gMailboxInfo.itemsAbove = 0; +        eMailboxInfo.cursorPos = 0; +        eMailboxInfo.itemsAbove = 0;          Mailbox_UpdateMailList();          ItemStorage_SetItemAndMailCount(taskId);          Mailbox_DrawMailboxMenu(taskId); @@ -442,10 +443,10 @@ static void ItemStorage_SetItemAndMailCount(u8 taskId)      else          NUM_PAGE_ITEMS = NUM_ITEMS + 1; // there are not enough items to fill a full page; take the # of items and add 1 for the cancel button. -    if (gMailboxInfo.count > 7) -        gMailboxInfo.pageItems = 8; +    if (eMailboxInfo.count > 7) +        eMailboxInfo.pageItems = 8;      else -        gMailboxInfo.pageItems = gMailboxInfo.count + 1; +        eMailboxInfo.pageItems = eMailboxInfo.count + 1;  }  static void ItemStorage_ProcessInput(u8 taskId) @@ -1048,8 +1049,8 @@ static void Mailbox_UpdateMailList(void)  static void Mailbox_DrawMailList(u8 taskId) // taskId is unused  {      u16 yCoord = 0; -    u16 i = gMailboxInfo.itemsAbove; -    register struct MailboxStruct *tempMailbox asm("r1") = &gMailboxInfo; +    u16 i = eMailboxInfo.itemsAbove; +    register struct MailboxStruct *tempMailbox asm("r1") = &eMailboxInfo;      register struct MailboxStruct *mailbox asm("r6");      if(i < i + tempMailbox->pageItems) @@ -1064,7 +1065,7 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused          if(i != mailbox->count)          { -            StringCopy(gStringVar1, (u8 *)gSaveBlock1.mail[i + 6].playerName); +            StringCopy(gStringVar1, gSaveBlock1.mail[i + 6].playerName);              SanitizeNameString(gStringVar1);              MenuPrint(gStringVar1, 0x15, yCoord + 2);          } @@ -1076,10 +1077,10 @@ static void Mailbox_DrawMailList(u8 taskId) // taskId is unused      }  beforeLabel: -    if(i - gMailboxInfo.itemsAbove != 8) +    if(i - eMailboxInfo.itemsAbove != 8)          MenuFillWindowRectWithBlankTile(0x15, yCoord + 4, 0x1C, 0x12); -    switch(gMailboxInfo.itemsAbove) +    switch(eMailboxInfo.itemsAbove)      {      default:          CreateVerticalScrollIndicators(0, 0xC8, 8); @@ -1092,7 +1093,7 @@ weirdCase:          break;      } -    if(gMailboxInfo.itemsAbove + gMailboxInfo.pageItems <= gMailboxInfo.count) +    if(eMailboxInfo.itemsAbove + eMailboxInfo.pageItems <= eMailboxInfo.count)          CreateVerticalScrollIndicators(1, 0xC8, 0x98);      else          DestroyVerticalScrollIndicator(1); @@ -1107,7 +1108,7 @@ static void Mailbox_DrawMailboxMenu(u8 taskId)      MenuPrint(gPCText_Mailbox, 1, 1);      MenuDrawTextWindow(0x14, 0, 0x1D, 0x13);      Mailbox_DrawMailList(taskId); -    InitMenu(0, 0x15, 2, gMailboxInfo.pageItems, gMailboxInfo.cursorPos, 8); +    InitMenu(0, 0x15, 2, eMailboxInfo.pageItems, eMailboxInfo.cursorPos, 8);  }  // Mailbox_ProcessInput @@ -1117,29 +1118,29 @@ static void Mailbox_ProcessInput(u8 taskId)      {          if(gMain.newAndRepeatedKeys & DPAD_UP)          { -            if(gMailboxInfo.cursorPos != 0) +            if(eMailboxInfo.cursorPos != 0)              {                  PlaySE(SE_SELECT); -                gMailboxInfo.cursorPos = MoveMenuCursor(-1); +                eMailboxInfo.cursorPos = MoveMenuCursor(-1);              } -            else if(gMailboxInfo.itemsAbove != 0) +            else if(eMailboxInfo.itemsAbove != 0)              {                  PlaySE(SE_SELECT); -                gMailboxInfo.itemsAbove--; +                eMailboxInfo.itemsAbove--;                  Mailbox_DrawMailList(taskId);              }          }          else if(gMain.newAndRepeatedKeys & DPAD_DOWN)          { -            if(gMailboxInfo.cursorPos != gMailboxInfo.pageItems - 1) +            if(eMailboxInfo.cursorPos != eMailboxInfo.pageItems - 1)              {                  PlaySE(SE_SELECT); -                gMailboxInfo.cursorPos = MoveMenuCursor(1); +                eMailboxInfo.cursorPos = MoveMenuCursor(1);              } -            else if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos != gMailboxInfo.count) +            else if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos != eMailboxInfo.count)              {                  PlaySE(SE_SELECT); -                gMailboxInfo.itemsAbove++; +                eMailboxInfo.itemsAbove++;                  Mailbox_DrawMailList(taskId);              }          } @@ -1148,7 +1149,7 @@ static void Mailbox_ProcessInput(u8 taskId)              HandleDestroyMenuCursors();              PlaySE(SE_SELECT); -            if(gMailboxInfo.itemsAbove + gMailboxInfo.cursorPos == gMailboxInfo.count) +            if(eMailboxInfo.itemsAbove + eMailboxInfo.cursorPos == eMailboxInfo.count)              {                  Mailbox_TurnOff(taskId);              } @@ -1177,7 +1178,7 @@ static void Mailbox_CloseScrollIndicators(void)  static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)  {      MenuZeroFillWindowRect(0, 0, 0x1D, 0x13); -    StringCopy(gStringVar1, gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos].playerName); +    StringCopy(gStringVar1, gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos].playerName);      SanitizeNameString(gStringVar1);      StringExpandPlaceholders(gStringVar4, gOtherText_WhatWillYouDoMail);      DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions, 0); @@ -1237,7 +1238,7 @@ static void Mailbox_FadeAndReadMail(u8 taskId)  {      if(!gPaletteFade.active)      { -        HandleReadMail(&gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1); +        HandleReadMail(&gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos], Mailbox_ReturnToFieldFromReadMail, 1);          DestroyTask(taskId);      }  } @@ -1276,7 +1277,7 @@ static void Mailbox_DrawYesNoBeforeMove(u8 taskId)  static void Mailbox_DoMailMoveToBag(u8 taskId)  { -    struct MailStruct *mail = &gSaveBlock1.mail[gMailboxInfo.itemsAbove + 6 + gMailboxInfo.cursorPos]; +    struct MailStruct *mail = &gSaveBlock1.mail[eMailboxInfo.itemsAbove + 6 + eMailboxInfo.cursorPos];      MenuZeroFillWindowRect(0x14, 8, 0x1A, 0xD); @@ -1290,10 +1291,10 @@ static void Mailbox_DoMailMoveToBag(u8 taskId)          ClearMailStruct(mail);          Mailbox_UpdateMailList(); -        gMailboxInfo.count--; +        eMailboxInfo.count--; -        if(gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) -            gMailboxInfo.itemsAbove--; +        if(eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) +            eMailboxInfo.itemsAbove--;          ItemStorage_SetItemAndMailCount(taskId);      } @@ -1329,13 +1330,13 @@ static void Mailbox_DoGiveMailPokeMenu(u8 taskId) // Mailbox_DoGiveMailPokeMenu  static void Mailbox_UpdateMailListAfterDeposit(void)  {      u8 taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0); -    u8 oldCount = gMailboxInfo.count; +    u8 oldCount = eMailboxInfo.count; -    gMailboxInfo.count = GetMailboxMailCount(); +    eMailboxInfo.count = GetMailboxMailCount();      Mailbox_UpdateMailList(); -    if(oldCount != gMailboxInfo.count && gMailboxInfo.count < gMailboxInfo.pageItems + gMailboxInfo.itemsAbove && gMailboxInfo.itemsAbove != 0) // did the count update? -        gMailboxInfo.itemsAbove--; +    if(oldCount != eMailboxInfo.count && eMailboxInfo.count < eMailboxInfo.pageItems + eMailboxInfo.itemsAbove && eMailboxInfo.itemsAbove != 0) // did the count update? +        eMailboxInfo.itemsAbove--;      ItemStorage_SetItemAndMailCount(taskId);      Mailbox_DrawMailboxMenu(taskId); diff --git a/src/field/pokeblock.c b/src/field/pokeblock.c index 34f4ffa35..a4497295f 100644 --- a/src/field/pokeblock.c +++ b/src/field/pokeblock.c @@ -27,6 +27,7 @@  #include "safari_zone.h"  #include "event_data.h"  #include "pokeblock.h" +#include "ewram.h"  struct UnkPokeblockStruct  { @@ -36,9 +37,6 @@ struct UnkPokeblockStruct      u8 unk3;  }; -extern u8 ewram[]; - -  static EWRAM_DATA u8 gUnknown_02039244 = 0;  static EWRAM_DATA struct UnkPokeblockStruct gUnknown_02039248 = {0};  static EWRAM_DATA u8 gUnknown_0203924C = 0; @@ -301,7 +299,7 @@ static bool8 sub_810B6C0(void)          case 10:              if (MultistepInitMenuWindowContinue())              { -                ewram[0x1ffff] = 0; +                ewram1FFFF = 0;                  gMain.state++;              }              break; @@ -319,7 +317,7 @@ static bool8 sub_810B6C0(void)              gMain.state++;              break;          case 13: -            ewram[0x1fffe] = sub_810BA50(0x38, 0x40, 0); +            ewram1FFFE = sub_810BA50(0x38, 0x40, 0);              gMain.state++;              break;          case 14: @@ -371,27 +369,27 @@ void sub_810B96C(void)  static bool8 sub_810B998(void)  { -    switch (ewram[0x1ffff]) +    switch (ewram1FFFF)      {          case 0: -            LZDecompressVram(gMenuPokeblock_Gfx, (u8 *)BG_CHAR_ADDR(2)); -            ewram[0x1ffff]++; +            LZDecompressVram(gMenuPokeblock_Gfx, BG_CHAR_ADDR(2)); +            ewram1FFFF++;              break;          case 1:              LZDecompressWram(gMenuPokeblock_Tilemap, gBGTilemapBuffers[2]); -            ewram[0x1ffff]++; +            ewram1FFFF++;              break;          case 2:              LoadCompressedPalette(gMenuPokeblock_Pal, 0, 0xc0); -            ewram[0x1ffff]++; +            ewram1FFFF++;              break;          case 3:              LoadCompressedObjectPic(&gUnknown_083F7F74); -            ewram[0x1ffff]++; +            ewram1FFFF++;              break;          case 4:              LoadCompressedObjectPalette(&gUnknown_083F7F7C); -            ewram[0x1ffff] = 0; +            ewram1FFFF = 0;              return TRUE;      }      return FALSE; @@ -613,7 +611,7 @@ static void sub_810BDAC(bool8 flag)  static void sub_810BF38(bool8 flag)  {      PlaySE(SE_SELECT); -    gSprites[ewram[0x1fffe]].callback = sub_810C8D4; +    gSprites[ewram1FFFE].callback = sub_810C8D4;      sub_810BDAC(flag);  } diff --git a/src/field/region_map.c b/src/field/region_map.c index daf0501f7..973e7decc 100644 --- a/src/field/region_map.c +++ b/src/field/region_map.c @@ -17,6 +17,7 @@  #include "string_util.h"  #include "text.h"  #include "trig.h" +#include "ewram.h"  // Map Section IDs  #define MAPSEC_LITTLEROOT_TOWN 0 @@ -1350,12 +1351,6 @@ struct UnknownStruct3      struct RegionMap regionMap;  }; -extern u8 ewram[]; -#define ewram0 (*(struct UnknownStruct3 *)(ewram + 0)) -#define ewram888 (ewram + 0x888) -#define ewramA6E (ewram[0xA6E]) -#define ewramBlankMapName (ewram + 0xA48) -  static const u16 sFlyRegionMapFrame_Pal[] = INCBIN_U16("graphics/pokenav/map_frame.gbapal");  static const u8 sFlyRegionMapFrame_ImageLZ[] = INCBIN_U8("graphics/pokenav/map_frame.4bpp.lz");  static const u8 sFlyRegionMapFrame_TilemapLZ[] = INCBIN_U8("graphics/pokenav/map_frame.bin.lz"); @@ -1431,7 +1426,7 @@ static const struct UnknownStruct4 sUnknown_083E79C0[1] =  };  // XXX: what is this? -static u8 *const ewram_ = ewram; +static u8 *const ewram_ = gSharedMem;  static const struct SpritePalette sFlyTargetIconSpritePalette = {sFlyTargetIcons_Pal, 2}; @@ -1552,10 +1547,10 @@ void CB2_InitFlyRegionMap(void)          MenuZeroFillScreen();          break;      case 3: -        InitRegionMap(&ewram0.regionMap, 0); +        InitRegionMap(&ewram0_3.regionMap, 0);          CreateRegionMapCursor(0, 0);          CreateRegionMapPlayerIcon(1, 1); -        ewram0.unk6 = ewram0.regionMap.mapSectionId; +        ewram0_3.unk6 = ewram0_3.regionMap.mapSectionId;          StringFill(ewramBlankMapName, CHAR_SPACE, 12);          PrintFlyTargetName();          break; @@ -1598,20 +1593,20 @@ static void VBlankCB_FlyRegionMap(void)  static void CB2_FlyRegionMap(void)  { -    ewram0.unk0(); +    ewram0_3.unk0();      AnimateSprites();      BuildOamBuffer();  }  static void sub_80FC244(void (*func)(void))  { -    ewram0.unk0 = func; -    ewram0.unk4 = 0; +    ewram0_3.unk0 = func; +    ewram0_3.unk4 = 0;  }  static void PrintFlyTargetName(void)  { -    if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) +    if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)      {          u16 i = 0;          int zero; @@ -1620,13 +1615,13 @@ static void PrintFlyTargetName(void)          {              const struct UnknownStruct4 *r4 = &sUnknown_083E79C0[i]; -            if (ewram0.regionMap.mapSectionId == r4->mapSectionId) +            if (ewram0_3.regionMap.mapSectionId == r4->mapSectionId)              {                  if (FlagGet(r4->flag))                  {                      MenuDrawTextWindow(16, 14, 29, 19); -                    MenuPrint(ewram0.regionMap.mapSectionName, 17, 15); -                    MenuPrint_RightAligned(r4->unk0[ewram0.regionMap.everGrandeCityArea], 29, 17); +                    MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 15); +                    MenuPrint_RightAligned(r4->unk0[ewram0_3.regionMap.everGrandeCityArea], 29, 17);                      return;                  }                  break; @@ -1637,7 +1632,7 @@ static void PrintFlyTargetName(void)          if (zero == 0)          {              MenuDrawTextWindow(16, 16, 29, 19); -            MenuPrint(ewram0.regionMap.mapSectionName, 17, 17); +            MenuPrint(ewram0_3.regionMap.mapSectionName, 17, 17);              MenuZeroFillWindowRect(16, 14, 29, 15);          }      } @@ -1738,7 +1733,7 @@ static void CreateSpecialAreaFlyTargetIcons(void)  static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)  {      // Blink if our mapSectionId is the one selected on the map -    if (ewram0.regionMap.mapSectionId == sprite->data0) +    if (ewram0_3.regionMap.mapSectionId == sprite->data0)      {          // Toggle visibility every 16 frames          sprite->data1++; @@ -1757,11 +1752,11 @@ static void SpriteCB_FlyTargetIcons(struct Sprite *sprite)  static void sub_80FC5B4(void)  { -    switch (ewram0.unk4) +    switch (ewram0_3.unk4)      {      case 0:          BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); -        ewram0.unk4++; +        ewram0_3.unk4++;          break;      case 1:          if (UpdatePaletteFade() != 0) @@ -1773,7 +1768,7 @@ static void sub_80FC5B4(void)  static void sub_80FC600(void)  { -    if (ewram0.unk4 == 0) +    if (ewram0_3.unk4 == 0)      {          switch (sub_80FAB60())          { @@ -1785,7 +1780,7 @@ static void sub_80FC600(void)              PrintFlyTargetName();              break;          case INPUT_EVENT_A_BUTTON: -            if (ewram0.regionMap.unk16 == 2 || ewram0.regionMap.unk16 == 4) +            if (ewram0_3.regionMap.unk16 == 2 || ewram0_3.regionMap.unk16 == 4)              {                  m4aSongNumStart(SE_SELECT);                  ewramA6E = 1; @@ -1803,11 +1798,11 @@ static void sub_80FC600(void)  static void sub_80FC69C(void)  { -    switch (ewram0.unk4) +    switch (ewram0_3.unk4)      {      case 0:          BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); -        ewram0.unk4++; +        ewram0_3.unk4++;          break;      case 1:          if (UpdatePaletteFade() != 0) @@ -1815,7 +1810,7 @@ static void sub_80FC69C(void)          FreeRegionMapIconResources();          if (ewramA6E != 0)          { -            switch (ewram0.regionMap.mapSectionId) +            switch (ewram0_3.regionMap.mapSectionId)              {              case MAPSEC_SOUTHERN_ISLAND:                  sub_8053538(22); @@ -1827,13 +1822,13 @@ static void sub_80FC69C(void)                  sub_8053538((gSaveBlock2.playerGender == MALE) ? 12 : 13);                  break;              case MAPSEC_EVER_GRANDE_CITY: -                sub_8053538((FlagGet(0x854) && ewram0.regionMap.everGrandeCityArea == 0) ? 20 : 11); +                sub_8053538((FlagGet(0x854) && ewram0_3.regionMap.everGrandeCityArea == 0) ? 20 : 11);                  break;              default: -                if (sUnknown_083E7920[ewram0.regionMap.mapSectionId][2] != 0) -                    sub_8053538(sUnknown_083E7920[ewram0.regionMap.mapSectionId][2]); +                if (sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2] != 0) +                    sub_8053538(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][2]);                  else -                    warp1_set_2(sUnknown_083E7920[ewram0.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0.regionMap.mapSectionId][1], -1); +                    warp1_set_2(sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][0], sUnknown_083E7920[ewram0_3.regionMap.mapSectionId][1], -1);                  break;              }              sub_80865BC(); diff --git a/src/field/roamer.c b/src/field/roamer.c index 948828d5e..c45c87601 100644 --- a/src/field/roamer.c +++ b/src/field/roamer.c @@ -173,13 +173,13 @@ void CreateRoamerMonInstance(void)      struct Pokemon *mon = &gEnemyParty[0];      struct Roamer *roamer = &gSaveBlock1.roamer;      CreateMonWithIVsPersonality(mon, roamer->species, roamer->level, roamer->ivs, roamer->personality); -    SetMonData(mon, MON_DATA_STATUS, (u8 *)&roamer->status); -    SetMonData(mon, MON_DATA_HP, (u8 *)&roamer->hp); -    SetMonData(mon, MON_DATA_COOL, (u8 *)&roamer->cool); -    SetMonData(mon, MON_DATA_BEAUTY, (u8 *)&roamer->beauty); -    SetMonData(mon, MON_DATA_CUTE, (u8 *)&roamer->cute); -    SetMonData(mon, MON_DATA_SMART, (u8 *)&roamer->smart); -    SetMonData(mon, MON_DATA_TOUGH, (u8 *)&roamer->tough); +    SetMonData(mon, MON_DATA_STATUS, &roamer->status); +    SetMonData(mon, MON_DATA_HP, &roamer->hp); +    SetMonData(mon, MON_DATA_COOL, &roamer->cool); +    SetMonData(mon, MON_DATA_BEAUTY, &roamer->beauty); +    SetMonData(mon, MON_DATA_CUTE, &roamer->cute); +    SetMonData(mon, MON_DATA_SMART, &roamer->smart); +    SetMonData(mon, MON_DATA_TOUGH, &roamer->tough);  }  bool8 TryStartRoamerEncounter(void) diff --git a/src/field/shop.c b/src/field/shop.c index 375205935..493d8c748 100644 --- a/src/field/shop.c +++ b/src/field/shop.c @@ -26,13 +26,10 @@  #include "overworld.h"  #include "decoration_inventory.h"  #include "field_camera.h" - -#define ewram18000 ((u16 *)(ewram + 0x18000)) -#define ewram18300 ((u16 *)(ewram + 0x18300)) +#include "ewram.h"  extern bool8 sub_80A52C4(u8, u8); -extern u8 ewram[];  extern u8 gBuyMenuFrame_Gfx[];  extern u16 gBuyMenuFrame_Tilemap[];  extern u16 gMenuMoneyPal[16]; @@ -54,7 +51,7 @@ static struct MartInfo gMartInfo;  // ewram  EWRAM_DATA u32 gMartTotalCost = 0; -EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; // game freak barely uses 2d arrays wtf? +EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0};  EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static  EWRAM_DATA u8 gUnknown_02038730 = 0;  EWRAM_DATA u8 gUnknown_02038731 = 0; @@ -282,7 +279,7 @@ void BuyMenuDrawGraphics(void)      register const u32 zero asm("r6") = 0;      DmaFill32(3, zero, addr, OAM_SIZE);      LZDecompressVram(gBuyMenuFrame_Gfx, (void*)(VRAM + 0x7C00)); -    LZDecompressWram(gBuyMenuFrame_Tilemap, (void *)0x02018000); +    LZDecompressWram(gBuyMenuFrame_Tilemap, ewram18000_2);      LoadCompressedPalette(gMenuMoneyPal, 0xC0, sizeof(gMenuMoneyPal));      FreeAllSpritePalettes();      ResetPaletteFade(); diff --git a/src/field/slot_machine.c b/src/field/slot_machine.c index e8e4f271b..89ec68b0a 100644 --- a/src/field/slot_machine.c +++ b/src/field/slot_machine.c @@ -3,6 +3,7 @@  #include "decompress.h"  #include "palette.h"  #include "task.h" +#include "ewram.h"  struct UnkStruct2000000 {      /*0x00*/ u8 filler00[61]; @@ -15,8 +16,6 @@ struct UnkStruct1 {      /*0x02*/ s16 unk02;  }; -extern struct UnkStruct2000000 unk_2000000; -  extern struct UnkStruct1 *gUnknown_083ED048[];  extern const u16 gPalette_83EDE24[]; @@ -40,7 +39,7 @@ void sub_8104CAC(u8 arg0) {      sub_8104DA4(); -    task = &gTasks[unk_2000000.unk3D]; +    task = &gTasks[ewram0_8->unk3D];      task->data[1] = arg0;      i = 0; @@ -71,9 +70,9 @@ void sub_8106448(void) {      u32 offsetRead, offsetWrite;      u32 size; -    LZDecompressWram(gSlotMachine_Gfx, (void *) 0x02010000); +    LZDecompressWram(gSlotMachine_Gfx, ewram10000_2); -    offsetRead = 0x02010000; +    offsetRead = (u32)ewram10000_2;      offsetWrite = BG_VRAM;      size = SLOTMACHINE_GFX_TILES * 32;      while (TRUE) @@ -94,7 +93,7 @@ void sub_8106448(void) {  }  void sub_81064B8(void) { -    CpuCopy16(gUnknown_08E95AB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); +    CpuCopy16(gUnknown_08E95AB8, BG_SCREEN_ADDR(29), 20 * 32 * 2);      LoadSlotMachineWheelOverlay();  } @@ -102,7 +101,7 @@ static void LoadSlotMachineWheelOverlay(void) {      s16 x, y, dx;      u16 *screen; -    screen = (u16 *) BG_SCREEN_ADDR(30); +    screen = BG_SCREEN_ADDR(30);      for (x = 4; x < 18; x += 5)      { @@ -125,7 +124,7 @@ static void LoadSlotMachineWheelOverlay(void) {  }  void sub_81065A8(s16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) { -    u16 *vram = (u16 *) BG_SCREEN_ADDR(29); +    u16 *vram = BG_SCREEN_ADDR(29);      vram[15 * 32 + arg0] = arg1;      vram[15 * 32 + 1 + arg0] = arg2; @@ -137,9 +136,9 @@ void sub_81065DC(void) {      s16 y, x;      u16 *screen; -    CpuCopy16(gUnknown_08E95FB8, (void *) BG_SCREEN_ADDR(29), 20 * 32 * 2); +    CpuCopy16(gUnknown_08E95FB8, BG_SCREEN_ADDR(29), 20 * 32 * 2); -    screen = (u16 *) BG_SCREEN_ADDR(30); +    screen = BG_SCREEN_ADDR(30);      for (y = 0; y < 20; y++)      {          for (x = 0; x < 30; x++) diff --git a/src/field/trainer_see.c b/src/field/trainer_see.c index 5a8ebbafc..85bd7ad0b 100644 --- a/src/field/trainer_see.c +++ b/src/field/trainer_see.c @@ -257,7 +257,7 @@ static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainer  {      u8 direction; -    FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]); +    FieldObjectGetLocalIdAndMap(trainerObj, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);      FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);      direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);      FieldObjectSetSpecialAnim(trainerObj, direction); diff --git a/src/field/tv.c b/src/field/tv.c index 87fc03065..a0287e7df 100644 --- a/src/field/tv.c +++ b/src/field/tv.c @@ -38,6 +38,7 @@  #include "string_util.h"  #include "strings.h"  #include "text.h" +#include "ewram.h"  struct UnkTvStruct  { @@ -95,9 +96,6 @@ extern u8 gBattleOutcome;  extern u16 gLastUsedItem; -extern u8 ewram[]; -#define gUnknown_02007000 (*(ewramStruct_02007000 *)(ewram + 0x7000)) -  static EWRAM_DATA u16 gUnknown_020387E0 = 0;  static EWRAM_DATA u16 gUnknown_020387E2 = 0;  static EWRAM_DATA u8 gUnknown_020387E4 = 0; diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index bac231856..54ed89ef2 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -22,10 +22,10 @@  #ifdef GERMAN  extern const u16 ConditionUpDownPalette[16]; -extern const u32 ConditionUpDownTiles[0x80]; +extern const u8 ConditionUpDownTiles[0x200];  #else  const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down.gbapal"); -const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp"); +const u8 ConditionUpDownTiles[] = INCBIN_U8("graphics/misc/condition_up_down.4bpp");  #endif  static const u32 sContestStatsMonData[] = { @@ -49,7 +49,7 @@ static const u8 *const sContextStatNames[] = {  };  static const struct SpriteSheet gSpriteSheet_ConditionUpDown = { -    (u8 *)ConditionUpDownTiles, +    ConditionUpDownTiles,      sizeof ConditionUpDownTiles,      GFX_TAG_CONDITIONUPDOWN  }; | 
