More decomp of saving functions

This commit is contained in:
Seth Barberee
2024-07-13 22:21:58 -07:00
parent 04b1b57942
commit 16e70a7426
9 changed files with 120 additions and 178 deletions

View File

@@ -5,110 +5,8 @@
.text
thumb_func_start sub_8081AD4
sub_8081AD4:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrb r1, [r4]
bl sub_8083060
ldrb r1, [r4, 0x1]
adds r0, r5, 0
bl sub_8083060
adds r1, r4, 0x2
adds r0, r5, 0
movs r2, 0x2
bl sub_8082FA8
ldrb r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083060
ldrb r1, [r4, 0x5]
adds r0, r5, 0
bl sub_8083060
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081AD4
thumb_func_start sub_8081B08
sub_8081B08:
push {r4-r7,lr}
adds r6, r0, 0
adds r7, r1, 0
adds r4, r7, 0
movs r5, 0x3
_08081B12:
adds r0, r6, 0
adds r1, r4, 0
bl sub_8081AD4
adds r4, 0x8
subs r5, 0x1
cmp r5, 0
bge _08081B12
adds r0, r7, 0
adds r0, 0x20
ldrb r1, [r0]
adds r0, r6, 0
bl sub_8083060
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8081B08
thumb_func_start sub_8081B34
sub_8081B34:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r0, 0
ldrsh r1, [r4, r0]
adds r0, r5, 0
bl sub_8083048
movs r0, 0x2
ldrsh r1, [r4, r0]
adds r0, r5, 0
bl sub_8083048
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081B34
thumb_func_start sub_8081B54
sub_8081B54:
push {lr}
movs r2, 0x3
bl sub_8082FA8
pop {r0}
bx r0
thumb_func_end sub_8081B54
thumb_func_start sub_8081B60
sub_8081B60:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
ldrh r1, [r4]
bl sub_8083030
ldrh r1, [r4, 0x4]
adds r0, r5, 0
bl sub_8083030
adds r1, r4, 0
adds r1, 0x9
adds r0, r5, 0
movs r2, 0x1
bl sub_8082FA8
adds r4, 0xE
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x1
bl sub_8082FA8
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8081B60
thumb_func_start sub_8081B94
sub_8081B94:
thumb_func_start SaveDungeonWeather
SaveDungeonWeather:
push {r4-r6,lr}
adds r6, r0, 0
adds r5, r1, 0
@@ -149,7 +47,7 @@ _08081BAC:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_8081B94
thumb_func_end SaveDungeonWeather
thumb_func_start sub_8081BF4
sub_8081BF4:

View File

@@ -31,6 +31,24 @@ typedef struct Dungeon_sub
u8 unk2;
} Dungeon_sub;
typedef struct Weather
{
/* 0xE264 */ u8 weather; // Uses the weather constants in weather.h.
u8 unkE265; // Uses the weather constants in weather.h
/* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically.
/* 0xE267 */ u8 unkE267[0xE269 - 0xE267];
u8 unkE269;
u8 fillE26A;
u8 unkE26B;
u8 weatherTurns;
u8 fillE26D[0xE26F - 0xE26D];
/* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather.
/* 0xE277 */ u8 mudSportTurns;
/* 0xE278 */ u8 waterSportTurns;
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
} Weather;
// size: 0x30
typedef struct unkDungeonGlobal_unk1CE98_sub
{
@@ -175,20 +193,7 @@ typedef struct Dungeon
u32 unkE250;
u8 fillE254[0xE260 - 0xE254];
u32 unkE260;
/* 0xE264 */ u8 weather; // Uses the weather constants in weather.h.
u8 unkE265; // Uses the weather constants in weather.h
/* 0xE266 */ u8 weatherDamageCounter; // Timer for applying sandstorm/hail damage periodically.
/* 0xE267 */ u8 unkE267[0xE269 - 0xE267];
u8 unkE269;
u8 fillE26A;
u8 unkE26B;
u8 weatherTurns;
u8 fillE26D[0xE26F - 0xE26D];
/* 0xE26F */ u8 naturalWeather[8]; // The weather at the start of the floor. If the weather changes, then expires, revert back to the starting weather.
/* 0xE277 */ u8 mudSportTurns;
/* 0xE278 */ u8 waterSportTurns;
/* 0xE279 */ bool8 nullifyWeather; // Air Lock and Cloud Nine toggle this to disable weather effects
u8 fillE27A[0xE27C - 0xE27A];
/* 0xE264 */ Weather weather; // Uses the weather constants in weather.h.
/* 0xE27C */ Tile unkE27C[8][8];
/* 0xE87C */ u8 unkE87C[8][8];
u32 fillE8BC;

View File

@@ -1072,7 +1072,7 @@ void ArticunoPreFightDialogue(void)
DisplayDungeonDialogue(gArticunoPreFightDialogue_7);
sub_803E708(10,0x46);
PlaySoundEffect(0); // snow flurry
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
PlaySoundEffect(0x1ee); // flash effect?
sub_8088574();
@@ -1107,7 +1107,7 @@ void ArticunoReFightDialogue(void)
LeaderEntity = xxx_call_GetLeader();
ArticunoEntity = GetEntityFromClientType(0xd);
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
sub_803E708(10,0x46);
DisplayDungeonDialogue(gArticunoReFightDialogue_1);
@@ -1134,7 +1134,7 @@ void ArticunoPostStoryPreFightDialogue(void)
sub_80866C4(gUnknown_8102A9C);
}
else {
gDungeon->unkE265 = WEATHER_SNOW;
gDungeon->weather.unkE265 = WEATHER_SNOW;
sub_807EAA0(0,1);
ArticunoScreenFlash();
sub_8086738();
@@ -2494,7 +2494,7 @@ void RaikouPreFightDialogue(void)
DisplayDungeonDialogue(gRaikouPreFightDialogue_1);
RaikouScreenFlash();
DisplayDungeonDialogue(gRaikouPreFightDialogue_2);
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
sub_803E708(10,70);
DisplayDungeonDialogue(gRaikouPreFightDialogue_3);
@@ -2516,7 +2516,7 @@ void RaikouReFightDialogue(void)
LeaderEntity = xxx_call_GetLeader();
RaikouEntity = GetEntityFromClientType(0x13);
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
RaikouScreenFlash();
DisplayDungeonDialogue(gRaikouReFightDialogue_1);
@@ -2540,7 +2540,7 @@ void RaikouPostStoryPreFightDialogue(void)
sub_80866C4(gRaikouPostStoryPreFightDialogue_4);
}
else {
gDungeon->unkE265 = WEATHER_RAIN;
gDungeon->weather.unkE265 = WEATHER_RAIN;
sub_807EAA0(0,1);
DisplayDungeonDialogue(gRaikouPostStoryPreFightDialogue_1);
RaikouScreenFlash();

View File

@@ -71,23 +71,23 @@ void TriggerWeatherAbilities(void)
if (gDungeon->unkC != 0) {
gDungeon->unkC = 0;
gDungeon->nullifyWeather = FALSE;
gDungeon->weather.nullifyWeather = FALSE;
for(index = 0; index < DUNGEON_MAX_POKEMON; index++)
{
entity = gDungeon->allPokemon[index];
if (EntityExists(entity)) {
if (HasAbility(entity, ABILITY_DRIZZLE)) {
gDungeon->naturalWeather[WEATHER_RAIN] = 1;
gDungeon->weather.naturalWeather[WEATHER_RAIN] = 1;
}
else if (HasAbility(entity, ABILITY_SAND_STREAM)) {
gDungeon->naturalWeather[WEATHER_SANDSTORM] = 1;
gDungeon->weather.naturalWeather[WEATHER_SANDSTORM] = 1;
}
else if (HasAbility(entity, ABILITY_DROUGHT)) {
gDungeon->naturalWeather[WEATHER_SUNNY] = 1;
gDungeon->weather.naturalWeather[WEATHER_SUNNY] = 1;
}
if ((HasAbility(entity, ABILITY_AIR_LOCK)) || (HasAbility(entity, ABILITY_CLOUD_NINE))) {
gDungeon->nullifyWeather = TRUE;
gDungeon->weather.nullifyWeather = TRUE;
}
}
}

View File

@@ -441,7 +441,7 @@ bool32 sub_805783C(Entity *pokemon, Entity *target, Move *move, s32 param_4)
bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4)
{
gDungeon->unkE26B = gUnknown_80F4F42;
gDungeon->weather.unkE26B = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == 0) {
// The weather remains unchanged
sub_80522F4(pokemon,target,*gUnknown_80FCF74);
@@ -451,7 +451,7 @@ bool32 sub_805785C(Entity *pokemon, Entity *target, Move *move, s32 param_4)
bool32 sub_80578A4(Entity *pokemon, Entity *target, Move *move, s32 param_4)
{
gDungeon->weatherTurns = gUnknown_80F4F42;
gDungeon->weather.weatherTurns = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == 0) {
// The weather remains unchanged
sub_80522F4(pokemon,target,*gUnknown_80FCF80);
@@ -2035,7 +2035,7 @@ bool8 sub_805946C(Entity * pokemon,Entity * target,Move * move,u32 param_4)
bool8 sub_80594E0(Entity *pokemon, Entity *target, Move *move, u32 param_4)
{
gDungeon->unkE269 = gUnknown_80F4F42;
gDungeon->weather.unkE269 = gUnknown_80F4F42;
if(sub_807EAA0(1, 0) == 0)
{
sub_80522F4(pokemon, target, *gUnknown_80FCF78);
@@ -2729,7 +2729,7 @@ bool8 RolePlayMoveAction(Entity *pokemon, Entity *target, Move *move, u32 param_
bool8 sub_805A394(Entity *pokemon, Entity *target, Move *move, u32 param_4)
{
gDungeon->unkE267[1] = gUnknown_80F4F42;
gDungeon->weather.unkE267[1] = gUnknown_80F4F42;
if (sub_807EAA0(1,0) == 0) {
sub_80522F4(pokemon,target,*gUnknown_80FCF7C);
}

View File

@@ -375,13 +375,13 @@ bool8 CanUseOnSelfWithStatusChecker(Entity *pokemon, Move *move)
break;
}
case MOVE_MUD_SPORT:
if (gDungeon->mudSportTurns > 0)
if (gDungeon->weather.mudSportTurns > 0)
{
return FALSE;
}
break;
case MOVE_WATER_SPORT:
if (gDungeon->waterSportTurns > 0)
if (gDungeon->weather.waterSportTurns > 0)
{
return FALSE;
}

View File

@@ -14,15 +14,15 @@ extern u8 gUnknown_81071D4[];
extern void sub_8082FA8(unkStruct_8094924 *, void *, s32);
void sub_8081B60(void *, Tile *);
void SaveTile(unkStruct_8094924 *r0, Tile *tile);
void sub_80830F8(void * , u32*);
void sub_808312C(void *, u32 *);
void sub_8081B94(void *, u8 *);
void SaveDungeonWeather(void *, Weather *);
void sub_8083078(void *, u32);
void sub_80830B4(void *, u8);
void sub_8083030(void *, u16);
void sub_8080E0C(unkStruct_8094924 *, Entity *);
void sub_808300C(void *, u8 *);
void SaveEntity(unkStruct_8094924 *param_1, Entity *);
void sub_808300C(unkStruct_8094924 *param_1, u8 *);
void sub_8081788(unkStruct_8094924 *param_1, Item *param_2);
void sub_8080B90(unkStruct_8094924 *param_1);
void SaveItemData(unkStruct_8094924 *param_1);
@@ -34,20 +34,20 @@ void sub_8080CF0(unkStruct_8094924 *param_1);
void nullsub_98(unkStruct_8094924 *param_1);
void sub_8082F9C(unkStruct_8094924 *param_1, u32, u32);
void sub_8049ED4(void);
void sub_8083060(void *, u32);
void sub_8083060(unkStruct_8094924 *param_1, u32);
void sub_80817F4(unkStruct_8094924 *param_1, u32 param_2);
void sub_80830A0(void *, u32);
void sub_80830A0(unkStruct_8094924 *param_1, u32);
void sub_808180C(unkStruct_8094924 *param_1, u32 param_2);
void sub_8083048(void *, u32);
void sub_8083048(unkStruct_8094924 *param_1, u32);
void sub_80818C8(unkStruct_8094924 *param_1, JoinedAt *param_2);
void sub_80817C8(unkStruct_8094924 *param_1, ActionContainer *param_2);
void sub_8081B34(void *, void *);
void sub_8081B08(void *, Move *);
void SaveActionContainer(unkStruct_8094924 *param_1, ActionContainer *param_2);
void sub_8081B34(unkStruct_8094924 *r0, s16 *r1);
void SaveEntityMoves(unkStruct_8094924 *r0, Move *move);
void sub_8081824(unkStruct_8094924 *param_1, u32 param_2);
void sub_80817B0(unkStruct_8094924 *param_1, u32 param_2);
void SavePosition(void*, Position *);
void sub_80818E4(unkStruct_8094924 *param_1, AITarget* param_2);
void sub_8081B54(void *, u8 *);
void SaveAITargetStatus(unkStruct_8094924 *param_1, AITarget* param_2);
void SaveIQFlags(unkStruct_8094924 *r0, u8 *r1);
void SaveSpeedStage(unkStruct_8094924 *param_1, s32 param_2);
void sub_8081854(unkStruct_8094924 *param_1, s32 param_2);
void sub_808183C(unkStruct_8094924 *param_1, s32 param_2);
@@ -66,10 +66,10 @@ void SaveHiddenPower(unkStruct_8094924 *param_1, HiddenPower *param_2);
void SaveChargingStatus(unkStruct_8094924 *param_1, Charging *param_2);
void SaveProtectionStatus(unkStruct_8094924 *param_1, Protection *param_2);
void SaveWaitingStatus(unkStruct_8094924 *param_1, Waiting *param_2);
void SaveSpeedCounters(void *, u8 *, u32);
void SaveSpeedCounters(unkStruct_8094924 *param_1, u8 *speedCounters, u32 numCounters);
void SaveClientType(unkStruct_8094924 *param_1, u8 param_2);
void sub_803E708(u32, u32);
void sub_80421C0(Entity *, u32);
void sub_80421C0(Entity *, u16);
void sub_804687C(Entity *, Position *, Position *, Item *, u32);
void HandleTripTrap(Entity *pokemon, Entity *target)
@@ -218,15 +218,15 @@ void sub_8080CF0(unkStruct_8094924 *param_1)
sub_8083030(param_1,gDungeon->unk3800);
for(counter = 0; counter < MAX_TEAM_MEMBERS; counter++)
{
sub_8080E0C(param_1,gDungeon->teamPokemon[counter]);
SaveEntity(param_1,gDungeon->teamPokemon[counter]);
}
for(counter = 0; counter < DUNGEON_MAX_WILD_POKEMON; counter++)
{
sub_8080E0C(param_1,gDungeon->wildPokemon[counter]);
SaveEntity(param_1,gDungeon->wildPokemon[counter]);
}
}
void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
void SaveEntity(unkStruct_8094924 *param_1, Entity *param_2)
{
Position *pos;
EntityInfo *info;
@@ -322,7 +322,7 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
sub_80830A0(param_1,info->offensiveMultipliers[1]);
sub_80830A0(param_1,info->defensiveMultipliers[0]);
sub_80830A0(param_1,info->defensiveMultipliers[1]);
sub_80817C8(param_1,&info->action);
SaveActionContainer(param_1,&info->action);
sub_808180C(param_1,info->types[0]);
sub_808180C(param_1,info->types[1]);
sub_8081824(param_1,info->abilities[0]);
@@ -373,9 +373,9 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
pos++;
}
sub_80818E4(param_1,temp3);
sub_8081B54(param_1,temp2);
sub_8081B54(param_1,temp1);
SaveAITargetStatus(param_1,temp3);
SaveIQFlags(param_1,temp2);
SaveIQFlags(param_1,temp1);
SaveTactic(param_1,*puStack_a0);
SaveHiddenPower(param_1,psStack_a4);
sub_8083078(param_1,*puStack_9c);
@@ -415,9 +415,9 @@ void sub_8080E0C(unkStruct_8094924 *param_1,Entity *param_2)
sub_8083060(param_1,info->stockpileStage);
sub_8083060(param_1,info->fill113);
sub_8083060(param_1,(u8)info->moveRandomly);
sub_8081B08(param_1,info->moves);
sub_8081B34(param_1,&info->belly);
sub_8081B34(param_1,&info->maxBelly);
SaveEntityMoves(param_1,info->moves);
sub_8081B34(param_1,(s16 *)&info->belly);
sub_8081B34(param_1,(s16 *)&info->maxBelly);
sub_80830B4(param_1,info->aiNextToTarget);
sub_80830B4(param_1,info->recalculateFollow);
sub_80830B4(param_1,info->waiting);
@@ -472,7 +472,7 @@ void sub_8081454(unkStruct_8094924 *param_1)
for(iVar2 = 0; iVar2 < DUNGEON_MAX_SIZE_X; iVar2++)
{
sub_8081B60(param_1,&gDungeon->tiles[iVar1][iVar2]);
SaveTile(param_1,&gDungeon->tiles[iVar1][iVar2]);
}
}
@@ -494,11 +494,11 @@ void sub_8081454(unkStruct_8094924 *param_1)
{
for(iVar2 = 0; iVar2 < 8; iVar2++)
{
sub_8081B60(param_1, &gDungeon->unkE27C[iVar1][iVar2]);
SaveTile(param_1, &gDungeon->unkE27C[iVar1][iVar2]);
sub_8083060(param_1, gDungeon->unkE87C[iVar1][iVar2]);
}
}
sub_8081B94(param_1,&gDungeon->weather);
SaveDungeonWeather(param_1,&gDungeon->weather);
}
void sub_808165C(unkStruct_8094924 *param_1)
@@ -540,7 +540,7 @@ void sub_80817B0(unkStruct_8094924 *param_1, u32 param_2)
sub_8082FA8(param_1, &stack, 1);
}
void sub_80817C8(unkStruct_8094924 *param_1, ActionContainer *param_2)
void SaveActionContainer(unkStruct_8094924 *param_1, ActionContainer *param_2)
{
sub_8082FA8(param_1, &param_2->direction, 1);
sub_8082FA8(param_1, &param_2->itemTargetPosition.x, 1);
@@ -609,7 +609,7 @@ void sub_80818C8(unkStruct_8094924 *param_1, JoinedAt *param_2)
sub_8083060(param_1, param_2->unk1);
}
void sub_80818E4(unkStruct_8094924 *param_1, AITarget* param_2)
void SaveAITargetStatus(unkStruct_8094924 *param_1, AITarget* param_2)
{
sub_8082FA8(param_1, &param_2->aiObjective, 1);
sub_80830B4(param_1, param_2->aiNotNextToTarget);
@@ -707,3 +707,42 @@ void SaveMuzzledStatus(unkStruct_8094924 *param_1, Muzzled *param_2)
sub_8083060(param_1, param_2->muzzledTurns);
}
void SaveEntityMove(unkStruct_8094924 *r0, Move *r1)
{
sub_8083060(r0, r1->moveFlags);
sub_8083060(r0, r1->moveFlags2);
sub_8082FA8(r0, &r1->id, 2);
sub_8083060(r0, r1->PP);
sub_8083060(r0, r1->ginseng);
}
void SaveEntityMoves(unkStruct_8094924 *r0, Move *move)
{
s32 index;
for(index = 0; index < MAX_MON_MOVES; index++)
{
SaveEntityMove(r0, &move[index]);
}
sub_8083060(r0, *(u8 *)(move + 0x4)); // Struggle Move flags?
}
void sub_8081B34(unkStruct_8094924 *r0, s16 *r1)
{
sub_8083048(r0, r1[0]);
sub_8083048(r0, r1[1]);
}
void SaveIQFlags(unkStruct_8094924 *r0, u8 *r1)
{
sub_8082FA8(r0, r1, 3);
}
void SaveTile(unkStruct_8094924 *r0, Tile *tile)
{
sub_8083030(r0, tile->terrainType);
sub_8083030(r0, tile->unk4);
sub_8082FA8(r0, &tile->room, 1);
sub_8082FA8(r0, &tile->unkE, 1);
}

View File

@@ -231,11 +231,11 @@ bool8 sub_806E100(s32 *param_1, Entity *pokemon, Entity *target, u8 type, struct
sub_800A34C(param_1,param_1, gUnknown_8106F64);
gDungeon->unk16A = TRUE;
}
if (((gDungeon->mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) {
if (((gDungeon->weather.mudSportTurns != 0) || (weather == WEATHER_FOG)) && (type == TYPE_ELECTRIC)) {
gDungeon->fill16E[7] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
if ((gDungeon->waterSportTurns != 0) && (type == TYPE_FIRE)) {
if ((gDungeon->weather.waterSportTurns != 0) && (type == TYPE_FIRE)) {
gDungeon->fill16E[8] = TRUE;
sub_800A34C(param_1,param_1,gUnknown_8106F1C);
}
@@ -388,11 +388,11 @@ s32 WeightWeakTypePicker(Entity *user, Entity *target, u8 moveType)
return 2;
}
}
if (gDungeon->mudSportTurns != 0 && moveType == TYPE_ELECTRIC)
if (gDungeon->weather.mudSportTurns != 0 && moveType == TYPE_ELECTRIC)
{
return 2;
}
if (gDungeon->waterSportTurns != 0 && moveType == TYPE_FIRE)
if (gDungeon->weather.waterSportTurns != 0 && moveType == TYPE_FIRE)
{
return 2;
}

View File

@@ -19,7 +19,7 @@ u8 GetApparentWeather(Entity *pokemon)
{
return WEATHER_CLEAR;
}
return gDungeon->weather;
return gDungeon->weather.weather;
}
void sub_807E5AC(void)
@@ -38,18 +38,18 @@ void sub_807E5E4(u8 weather)
int index;
u8 *preload;
gDungeon->unkE265 = weather;
gDungeon->weather = gDungeon->unkE265;
gDungeon->nullifyWeather = FALSE;
gDungeon->weather.unkE265 = weather;
gDungeon->weather.weather = gDungeon->weather.unkE265;
gDungeon->weather.nullifyWeather = FALSE;
for(index = 0; index < 8; index++) {
gDungeon->unkE267[index] = 0;
gDungeon->naturalWeather[index] = 0;
gDungeon->weather.unkE267[index] = 0;
gDungeon->weather.naturalWeather[index] = 0;
}
preload = &gDungeon->weatherDamageCounter;
preload = &gDungeon->weather.weatherDamageCounter;
index = 0;
*preload = 9;
gDungeon->mudSportTurns = 0;
gDungeon->waterSportTurns = 0;
gDungeon->weather.mudSportTurns = 0;
gDungeon->weather.waterSportTurns = 0;
for(index = 0; index < 0x100; index++)
{
gDungeon->unk17C[index].unk0 = index;