More synchronisation

This commit is contained in:
Slawter666 2018-10-17 13:52:26 +01:00
parent 1435c96b41
commit b7b1d609d0
12 changed files with 146 additions and 140 deletions

View File

@ -1,6 +1,13 @@
#ifndef GUARD_BERRY_H #ifndef GUARD_BERRY_H
#define GUARD_BERRY_H #define GUARD_BERRY_H
#define BERRY_NONE 0
#define FIRST_BERRY ITEM_CHERI_BERRY
#define LAST_BERRY ITEM_ENIGMA_BERRY
#define GETBERRYID(berry) ((berry - FIRST_BERRY) + 1)
#define GETITEMID(berry) ((berry + FIRST_BERRY) - 1)
enum enum
{ {
BERRY_FIRMNESS_UNKNOWN, BERRY_FIRMNESS_UNKNOWN,
@ -21,6 +28,17 @@ enum
FLAVOR_COUNT FLAVOR_COUNT
}; };
enum
{
BERRY_STAGE_NO_BERRY, // there is no tree planted and the soil is completely flat.
BERRY_STAGE_PLANTED,
BERRY_STAGE_SPROUTED,
BERRY_STAGE_TALLER,
BERRY_STAGE_FLOWERING,
BERRY_STAGE_BERRIES,
BERRY_STAGE_SPARKLING = 0xFF,
};
#define NUM_BERRIES 44 #define NUM_BERRIES 44
extern const u8 *const gBerryTreeEventObjectGraphicsIdTablePointers[]; extern const u8 *const gBerryTreeEventObjectGraphicsIdTablePointers[];
@ -29,7 +47,6 @@ extern const u8 *const gBerryTreePaletteSlotTablePointers[];
void ClearEnigmaBerries(void); void ClearEnigmaBerries(void);
void SetEnigmaBerry(u8 *src); void SetEnigmaBerry(u8 *src);
u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
bool32 IsEnigmaBerryValid(void); bool32 IsEnigmaBerryValid(void);
const struct Berry *GetBerryInfo(u8 berry); const struct Berry *GetBerryInfo(u8 berry);
struct BerryTree *GetBerryTreeInfo(u8 id); struct BerryTree *GetBerryTreeInfo(u8 id);
@ -37,28 +54,20 @@ bool32 EventObjectInteractionWaterBerryTree(void);
bool8 IsPlayerFacingPlantedBerryTree(void); bool8 IsPlayerFacingPlantedBerryTree(void);
bool8 TryToWaterBerryTree(void); bool8 TryToWaterBerryTree(void);
void ClearBerryTrees(void); void ClearBerryTrees(void);
bool32 BerryTreeGrow(struct BerryTree *tree);
void BerryTreeTimeUpdate(s32 minutes); void BerryTreeTimeUpdate(s32 minutes);
void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle); void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle);
void RemoveBerryTree(u8 id); void RemoveBerryTree(u8 id);
u8 GetBerryTypeByBerryTreeId(u8 id); u8 GetBerryTypeByBerryTreeId(u8 id);
u8 GetStageByBerryTreeId(u8); u8 GetStageByBerryTreeId(u8);
u8 ItemIdToBerryType(u16 item); u8 ItemIdToBerryType(u16 item);
u16 BerryTypeToItemId(u16 berry);
void GetBerryNameByBerryType(u8 berry, u8 *string); void GetBerryNameByBerryType(u8 berry, u8 *string);
void ResetBerryTreeSparkleFlag(u8 id); void ResetBerryTreeSparkleFlag(u8 id);
u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree);
u8 GetNumStagesWateredByBerryTreeId(u8 id);
u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water);
u8 CalcBerryYield(struct BerryTree *tree);
u8 GetBerryCountByBerryTreeId(u8 id);
u16 GetStageDurationByBerryType(u8);
void Bag_ChooseBerry(void); void Bag_ChooseBerry(void);
void EventObjectInteractionGetBerryTreeData(void); void EventObjectInteractionGetBerryTreeData(void);
void EventObjectInteractionPlantBerryTree(void); void EventObjectInteractionPlantBerryTree(void);
void EventObjectInteractionPickBerryTree(void); void EventObjectInteractionPickBerryTree(void);
void EventObjectInteractionRemoveBerryTree(void); void EventObjectInteractionRemoveBerryTree(void);
u8 PlayerHasBerries(void); bool8 PlayerHasBerries(void);
void ResetBerryTreeSparkleFlags(void); void ResetBerryTreeSparkleFlags(void);
extern const struct Berry gBerries[]; extern const struct Berry gBerries[];

View File

@ -75,7 +75,7 @@ struct PairedPalettes
struct LockedAnimEventObjects struct LockedAnimEventObjects
{ {
u8 eventObjectIds[NUM_EVENT_OBJECTS]; u8 eventObjectIds[EVENT_OBJECTS_COUNT];
u8 count; u8 count;
}; };

View File

@ -1,7 +0,0 @@
#ifndef GUARD_FLDEFF_TELEPORT_H
#define GUARD_FLDEFF_TELEPORT_H
void hm_teleport_run_dp02scr(void);
void sub_817C94C(void);
#endif // GUARD_FLDEFF_TELEPORT_H

View File

@ -1,8 +1,6 @@
#ifndef GUARD_GLOBAL_FIELDMAP_H #ifndef GUARD_GLOBAL_FIELDMAP_H
#define GUARD_GLOBAL_FIELDMAP_H #define GUARD_GLOBAL_FIELDMAP_H
#define NUM_EVENT_OBJECTS 16
enum enum
{ {
CONNECTION_SOUTH = 1, CONNECTION_SOUTH = 1,
@ -313,7 +311,7 @@ struct Camera
s32 y; s32 y;
}; };
extern struct EventObject gEventObjects[NUM_EVENT_OBJECTS]; extern struct EventObject gEventObjects[EVENT_OBJECTS_COUNT];
extern u8 gSelectedEventObject; extern u8 gSelectedEventObject;
extern struct MapHeader gMapHeader; extern struct MapHeader gMapHeader;
extern struct PlayerAvatar gPlayerAvatar; extern struct PlayerAvatar gPlayerAvatar;

View File

@ -119,22 +119,22 @@ enum LanguageId
#define GAME_LANGUAGE (LANGUAGE_ENGLISH) #define GAME_LANGUAGE (LANGUAGE_ENGLISH)
// capacities of various saveblock objects // capacities of various saveblock objects
#define DAYCARE_MON_COUNT 2 #define DAYCARE_MON_COUNT 2
#define POKEBLOCKS_COUNT 40 #define POKEBLOCKS_COUNT 40
#define EVENT_OBJECTS_COUNT 16 #define EVENT_OBJECTS_COUNT 16
#define BERRY_TREES_COUNT 128 #define BERRY_TREES_COUNT 128
#define FLAGS_COUNT 300 #define FLAGS_COUNT 300
#define VARS_COUNT 256 #define VARS_COUNT 256
#define MAIL_COUNT 16 #define MAIL_COUNT 16
#define SECRET_BASES_COUNT 20 #define SECRET_BASES_COUNT 20
#define TV_SHOWS_COUNT 25 #define TV_SHOWS_COUNT 25
#define POKE_NEWS_COUNT 16 #define POKE_NEWS_COUNT 16
#define PC_ITEMS_COUNT 50 #define PC_ITEMS_COUNT 50
#define BAG_ITEMS_COUNT 30 #define BAG_ITEMS_COUNT 30
#define BAG_KEYITEMS_COUNT 30 #define BAG_KEYITEMS_COUNT 30
#define BAG_POKEBALLS_COUNT 16 #define BAG_POKEBALLS_COUNT 16
#define BAG_TMHM_COUNT 64 #define BAG_TMHM_COUNT 64
#define BAG_BERRIES_COUNT 46 #define BAG_BERRIES_COUNT 46
#define PYRAMID_BAG_ITEMS_COUNT 10 #define PYRAMID_BAG_ITEMS_COUNT 10

View File

@ -1,12 +1,13 @@
#include "global.h" #include "global.h"
#include "berry.h" #include "berry.h"
#include "main.h"
#include "item.h"
#include "constants/items.h"
#include "text.h"
#include "random.h"
#include "event_data.h" #include "event_data.h"
#include "fieldmap.h" #include "fieldmap.h"
#include "item.h"
#include "main.h"
#include "random.h"
#include "text.h"
#include "constants/event_object_movement_constants.h"
#include "constants/items.h"
extern u8 EventObjectGetBerryTreeId(u8 eventObjectId); extern u8 EventObjectGetBerryTreeId(u8 eventObjectId);
extern void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup); extern void sub_8092EF0(u8 mapId, u8 mapNumber, u8 mapGroup);
@ -18,6 +19,17 @@ extern u16 gSpecialVar_ItemId;
extern const u8 BerryTreeScript[]; extern const u8 BerryTreeScript[];
static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry);
static bool32 BerryTreeGrow(struct BerryTree *tree);
static u16 BerryTypeToItemId(u16 berry);
static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree);
static u8 GetNumStagesWateredByBerryTreeId(u8 id);
static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water);
static u8 CalcBerryYield(struct BerryTree *tree);
static u8 GetBerryCountByBerryTreeId(u8 id);
static u16 GetStageDurationByBerryType(u8);
//.rodata
static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers."); static const u8 sBerryDescriptionPart1_Cheri[] = _("Blooms with delicate pretty flowers.");
static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy."); static const u8 sBerryDescriptionPart2_Cheri[] = _("The bright red BERRY is very spicy.");
static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRYs thick skin and fruit are"); static const u8 sBerryDescriptionPart1_Chesto[] = _("The BERRYs thick skin and fruit are");
@ -845,6 +857,7 @@ const struct UnkStruct_0858AB24 gUnknown_0858AB24[] = {
const struct BerryTree gBlankBerryTree = {}; const struct BerryTree gBlankBerryTree = {};
//.text
// unused // unused
void ClearEnigmaBerries(void) void ClearEnigmaBerries(void)
{ {
@ -860,7 +873,7 @@ void SetEnigmaBerry(u8 *src)
dest[i] = src[i]; dest[i] = src[i];
} }
u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry) static u32 GetEnigmaBerryChecksum(struct EnigmaBerry *enigmaBerry)
{ {
u32 i; u32 i;
u32 checksum; u32 checksum;
@ -889,12 +902,12 @@ bool32 IsEnigmaBerryValid(void)
const struct Berry *GetBerryInfo(u8 berry) const struct Berry *GetBerryInfo(u8 berry)
{ {
if (berry == 0x2B && IsEnigmaBerryValid()) if (berry == GETBERRYID(ITEM_ENIGMA_BERRY) && IsEnigmaBerryValid())
return (struct Berry*)(&gSaveBlock1Ptr->enigmaBerry.berry); return (struct Berry*)(&gSaveBlock1Ptr->enigmaBerry.berry);
else else
{ {
if (berry == 0 || berry > 0x2B) if (berry == BERRY_NONE || berry > GETBERRYID(LAST_BERRY))
berry = 1; berry = GETBERRYID(FIRST_BERRY);
return &gBerries[berry - 1]; return &gBerries[berry - 1];
} }
} }
@ -910,16 +923,16 @@ bool32 EventObjectInteractionWaterBerryTree(void)
switch (tree->stage) switch (tree->stage)
{ {
case 1: case BERRY_STAGE_PLANTED:
tree->watered1 = TRUE; tree->watered1 = TRUE;
break; break;
case 2: case BERRY_STAGE_SPROUTED:
tree->watered2 = TRUE; tree->watered2 = TRUE;
break; break;
case 3: case BERRY_STAGE_TALLER:
tree->watered3 = TRUE; tree->watered3 = TRUE;
break; break;
case 4: case BERRY_STAGE_FLOWERING:
tree->watered4 = TRUE; tree->watered4 = TRUE;
break; break;
default: default:
@ -953,28 +966,28 @@ void ClearBerryTrees(void)
gSaveBlock1Ptr->berryTrees[i] = gBlankBerryTree; gSaveBlock1Ptr->berryTrees[i] = gBlankBerryTree;
} }
bool32 BerryTreeGrow(struct BerryTree *tree) static bool32 BerryTreeGrow(struct BerryTree *tree)
{ {
if (tree->growthSparkle) if (tree->growthSparkle)
return FALSE; return FALSE;
switch (tree->stage) switch (tree->stage)
{ {
case 0: case BERRY_STAGE_NO_BERRY:
return FALSE; return FALSE;
case 4: case BERRY_STAGE_FLOWERING:
tree->berryYield = CalcBerryYield(tree); tree->berryYield = CalcBerryYield(tree);
case 1: case BERRY_STAGE_PLANTED:
case 2: case BERRY_STAGE_SPROUTED:
case 3: case BERRY_STAGE_TALLER:
tree->stage++; tree->stage++;
break; break;
case 5: case BERRY_STAGE_BERRIES:
tree->watered1 = 0; tree->watered1 = 0;
tree->watered2 = 0; tree->watered2 = 0;
tree->watered3 = 0; tree->watered3 = 0;
tree->watered4 = 0; tree->watered4 = 0;
tree->berryYield = 0; tree->berryYield = 0;
tree->stage = 2; tree->stage = BERRY_STAGE_SPROUTED;
if (++tree->regrowthCount == 10) if (++tree->regrowthCount == 10)
*tree = gBlankBerryTree; *tree = gBlankBerryTree;
break; break;
@ -1012,7 +1025,7 @@ void BerryTreeTimeUpdate(s32 minutes)
tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry); tree->minutesUntilNextStage = GetStageDurationByBerryType(tree->berry);
if (!BerryTreeGrow(tree)) if (!BerryTreeGrow(tree))
break; break;
if (tree->stage == 5) if (tree->stage == BERRY_STAGE_BERRIES)
tree->minutesUntilNextStage *= 4; tree->minutesUntilNextStage *= 4;
} }
} }
@ -1028,7 +1041,7 @@ void PlantBerryTree(u8 id, u8 berry, u8 stage, bool8 sparkle)
tree->berry = berry; tree->berry = berry;
tree->minutesUntilNextStage = GetStageDurationByBerryType(berry); tree->minutesUntilNextStage = GetStageDurationByBerryType(berry);
tree->stage = stage; tree->stage = stage;
if (stage == 5) if (stage == BERRY_STAGE_BERRIES)
{ {
tree->berryYield = CalcBerryYield(tree); tree->berryYield = CalcBerryYield(tree);
tree->minutesUntilNextStage *= 4; tree->minutesUntilNextStage *= 4;
@ -1064,7 +1077,7 @@ u8 ItemIdToBerryType(u16 item)
return ITEM_TO_BERRY(item); return ITEM_TO_BERRY(item);
} }
u16 BerryTypeToItemId(u16 berry) static u16 BerryTypeToItemId(u16 berry)
{ {
u16 item = berry - 1; u16 item = berry - 1;
@ -1087,10 +1100,10 @@ void GetBerryCountStringByBerryType(u8 berry, u8* dest, u32 berryCount)
void ResetBerryTreeSparkleFlag(u8 id) void ResetBerryTreeSparkleFlag(u8 id)
{ {
GetBerryTreeInfo(id)->growthSparkle = 0; GetBerryTreeInfo(id)->growthSparkle = FALSE;
} }
u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree) static u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
{ {
u8 count = 0; u8 count = 0;
@ -1105,12 +1118,12 @@ u8 BerryTreeGetNumStagesWatered(struct BerryTree *tree)
return count; return count;
} }
u8 GetNumStagesWateredByBerryTreeId(u8 id) static u8 GetNumStagesWateredByBerryTreeId(u8 id)
{ {
return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id)); return BerryTreeGetNumStagesWatered(GetBerryTreeInfo(id));
} }
u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water) static u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
{ {
u32 randMin; u32 randMin;
u32 randMax; u32 randMax;
@ -1133,7 +1146,7 @@ u8 CalcBerryYieldInternal(u16 max, u16 min, u8 water)
} }
} }
u8 CalcBerryYield(struct BerryTree *tree) static u8 CalcBerryYield(struct BerryTree *tree)
{ {
const struct Berry *berry = GetBerryInfo(tree->berry); const struct Berry *berry = GetBerryInfo(tree->berry);
u8 min = berry->minYield; u8 min = berry->minYield;
@ -1142,12 +1155,12 @@ u8 CalcBerryYield(struct BerryTree *tree)
return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree)); return CalcBerryYieldInternal(max, min, BerryTreeGetNumStagesWatered(tree));
} }
u8 GetBerryCountByBerryTreeId(u8 id) static u8 GetBerryCountByBerryTreeId(u8 id)
{ {
return gSaveBlock1Ptr->berryTrees[id].berryYield; return gSaveBlock1Ptr->berryTrees[id].berryYield;
} }
u16 GetStageDurationByBerryType(u8 berry) static u16 GetStageDurationByBerryType(u8 berry)
{ {
return GetBerryInfo(berry)->stageDuration * 60; return GetBerryInfo(berry)->stageDuration * 60;
} }
@ -1156,18 +1169,18 @@ void EventObjectInteractionGetBerryTreeData(void)
{ {
u8 id; u8 id;
u8 berry; u8 berry;
u8 unk; u8 localId;
u8 group; u8 group;
u8 num; u8 num;
id = EventObjectGetBerryTreeId(gSelectedEventObject); id = EventObjectGetBerryTreeId(gSelectedEventObject);
berry = GetBerryTypeByBerryTreeId(id); berry = GetBerryTypeByBerryTreeId(id);
ResetBerryTreeSparkleFlag(id); ResetBerryTreeSparkleFlag(id);
unk = gSpecialVar_LastTalked; localId = gSpecialVar_LastTalked;
num = gSaveBlock1Ptr->location.mapNum; num = gSaveBlock1Ptr->location.mapNum;
group = gSaveBlock1Ptr->location.mapGroup; group = gSaveBlock1Ptr->location.mapGroup;
if (IsBerryTreeSparkling(unk, num, group)) if (IsBerryTreeSparkling(localId, num, group))
gSpecialVar_0x8004 = 0xFF; gSpecialVar_0x8004 = BERRY_STAGE_SPARKLING;
else else
gSpecialVar_0x8004 = GetStageByBerryTreeId(id); gSpecialVar_0x8004 = GetStageByBerryTreeId(id);
gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id); gSpecialVar_0x8005 = GetNumStagesWateredByBerryTreeId(id);
@ -1216,7 +1229,7 @@ void EventObjectInteractionRemoveBerryTree(void)
sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); sub_8092EF0(gSpecialVar_LastTalked, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
} }
u8 PlayerHasBerries(void) bool8 PlayerHasBerries(void)
{ {
return IsBagPocketNonEmpty(POCKET_BERRIES); return IsBagPocketNonEmpty(POCKET_BERRIES);
} }
@ -1238,7 +1251,7 @@ void ResetBerryTreeSparkleFlags(void)
bottom = top + 8; bottom = top + 8;
for (i = 0; i < EVENT_OBJECTS_COUNT; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active && gEventObjects[i].movementType == 12) if (gEventObjects[i].active && gEventObjects[i].movementType == MOVEMENT_TYPE_BERRY_TREE_GROWTH)
{ {
cam_left = gEventObjects[i].currentCoords.x; cam_left = gEventObjects[i].currentCoords.x;
cam_top = gEventObjects[i].currentCoords.y; cam_top = gEventObjects[i].currentCoords.y;

View File

@ -3,13 +3,13 @@
#include "event_object_movement.h" #include "event_object_movement.h"
#include "field_player_avatar.h" #include "field_player_avatar.h"
#include "fieldmap.h" #include "fieldmap.h"
#include "constants/flags.h"
#include "global.fieldmap.h" #include "global.fieldmap.h"
#include "metatile_behavior.h" #include "metatile_behavior.h"
#include "overworld.h" #include "overworld.h"
#include "constants/songs.h"
#include "sound.h" #include "sound.h"
#include "constants/flags.h"
#include "constants/map_types.h" #include "constants/map_types.h"
#include "constants/songs.h"
extern bool8 gBikeCyclingChallenge; extern bool8 gBikeCyclingChallenge;
extern u8 gBikeCollisions; extern u8 gBikeCollisions;

View File

@ -1079,7 +1079,7 @@ static void ClearAllEventObjects(void)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
ClearEventObject(&gEventObjects[i]); ClearEventObject(&gEventObjects[i]);
} }
@ -1109,7 +1109,7 @@ static void CreateReflectionEffectSprites(void)
u8 GetFirstInactiveEventObjectId(void) u8 GetFirstInactiveEventObjectId(void)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (!gEventObjects[i].active) if (!gEventObjects[i].active)
break; break;
@ -1130,7 +1130,7 @@ u8 GetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId)
bool8 TryGetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u8 *eventObjectId) bool8 TryGetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u8 *eventObjectId)
{ {
*eventObjectId = GetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroupId); *eventObjectId = GetEventObjectIdByLocalIdAndMap(localId, mapNum, mapGroupId);
if (*eventObjectId == NUM_EVENT_OBJECTS) if (*eventObjectId == EVENT_OBJECTS_COUNT)
return TRUE; return TRUE;
else else
return FALSE; return FALSE;
@ -1139,7 +1139,7 @@ bool8 TryGetEventObjectIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId, u
u8 GetEventObjectIdByXY(s16 x, s16 y) u8 GetEventObjectIdByXY(s16 x, s16 y)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active && gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y) if (gEventObjects[i].active && gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y)
break; break;
@ -1151,25 +1151,25 @@ u8 GetEventObjectIdByXY(s16 x, s16 y)
static u8 GetEventObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapGroupId) static u8 GetEventObjectIdByLocalIdAndMapInternal(u8 localId, u8 mapNum, u8 mapGroupId)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroupId) if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroupId)
return i; return i;
} }
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
static u8 GetEventObjectIdByLocalId(u8 localId) static u8 GetEventObjectIdByLocalId(u8 localId)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active && gEventObjects[i].localId == localId) if (gEventObjects[i].active && gEventObjects[i].localId == localId)
return i; return i;
} }
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
// This function has the same nonmatching quirk as in Ruby/Sapphire. // This function has the same nonmatching quirk as in Ruby/Sapphire.
@ -1184,7 +1184,7 @@ static u8 InitEventObjectStateFromTemplate(struct EventObjectTemplate *template,
// mapNum and mapGroup are in the wrong registers (r7/r6 instead of r6/r7) // mapNum and mapGroup are in the wrong registers (r7/r6 instead of r6/r7)
if (GetAvailableEventObjectId(template->localId, mapNum, mapGroup, &eventObjectId)) if (GetAvailableEventObjectId(template->localId, mapNum, mapGroup, &eventObjectId))
{ {
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
eventObject = &gEventObjects[eventObjectId]; eventObject = &gEventObjects[eventObjectId];
ClearEventObject(eventObject); ClearEventObject(eventObject);
@ -1414,7 +1414,7 @@ u8 Unref_TryInitLocalEventObject(u8 localId)
} }
} }
} }
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 *eventObjectId) static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 *eventObjectId)
@ -1426,14 +1426,14 @@ static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 *
{ {
u8 i = 0; u8 i = 0;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (!gEventObjects[i].active) if (!gEventObjects[i].active)
break; break;
if (gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup) if (gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup)
return TRUE; return TRUE;
} }
if (i >= NUM_EVENT_OBJECTS) if (i >= EVENT_OBJECTS_COUNT)
return TRUE; return TRUE;
*eventObjectId = i; *eventObjectId = i;
do do
@ -1441,7 +1441,7 @@ static bool8 GetAvailableEventObjectId(u16 localId, u8 mapNum, u8 mapGroup, u8 *
if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup) if (gEventObjects[i].active && gEventObjects[i].localId == localId && gEventObjects[i].mapNum == mapNum && gEventObjects[i].mapGroup == mapGroup)
return TRUE; return TRUE;
i++; i++;
} while (i < NUM_EVENT_OBJECTS); } while (i < EVENT_OBJECTS_COUNT);
return FALSE; return FALSE;
} }
@ -1473,7 +1473,7 @@ void RemoveAllEventObjectsExceptPlayer(void)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (i != gPlayerAvatar.eventObjectId) if (i != gPlayerAvatar.eventObjectId)
RemoveEventObject(&gEventObjects[i]); RemoveEventObject(&gEventObjects[i]);
@ -1490,8 +1490,8 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
u8 spriteId; u8 spriteId;
eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup); eventObjectId = InitEventObjectStateFromTemplate(eventObjectTemplate, mapNum, mapGroup);
if (eventObjectId == NUM_EVENT_OBJECTS) if (eventObjectId == EVENT_OBJECTS_COUNT)
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
eventObject = &gEventObjects[eventObjectId]; eventObject = &gEventObjects[eventObjectId];
graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId);
@ -1509,7 +1509,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
paletteSlot -= 16; paletteSlot -= 16;
sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot); sub_808EAB0(graphicsInfo->paletteTag1, paletteSlot);
} }
if (eventObject->movementType == 0x4c) if (eventObject->movementType == MOVEMENT_TYPE_INVISIBLE)
{ {
eventObject->invisible = TRUE; eventObject->invisible = TRUE;
} }
@ -1518,7 +1518,7 @@ static u8 TrySetupEventObjectSprite(struct EventObjectTemplate *eventObjectTempl
if (spriteId == MAX_SPRITES) if (spriteId == MAX_SPRITES)
{ {
gEventObjects[eventObjectId].active = FALSE; gEventObjects[eventObjectId].active = FALSE;
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
sprite = &gSprites[spriteId]; sprite = &gSprites[spriteId];
sub_8092FF0(eventObject->currentCoords.x + cameraX, eventObject->currentCoords.y + cameraY, &sprite->pos1.x, &sprite->pos1.y); sub_8092FF0(eventObject->currentCoords.x + cameraX, eventObject->currentCoords.y + cameraY, &sprite->pos1.x, &sprite->pos1.y);
@ -1554,9 +1554,9 @@ static u8 TrySpawnEventObject(struct EventObjectTemplate *eventObjectTemplate, u
spriteFrameImage.size = graphicsInfo->size; spriteFrameImage.size = graphicsInfo->size;
spriteTemplate.images = &spriteFrameImage; spriteTemplate.images = &spriteFrameImage;
eventObjectId = TrySetupEventObjectSprite(eventObjectTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY); eventObjectId = TrySetupEventObjectSprite(eventObjectTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY);
if (eventObjectId == NUM_EVENT_OBJECTS) if (eventObjectId == EVENT_OBJECTS_COUNT)
{ {
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
gSprites[gEventObjects[eventObjectId].spriteId].images = graphicsInfo->images; gSprites[gEventObjects[eventObjectId].spriteId].images = graphicsInfo->images;
if (subspriteTables != NULL) if (subspriteTables != NULL)
@ -1604,7 +1604,7 @@ u8 show_sprite(u8 localId, u8 mapNum, u8 mapGroup)
eventObjectTemplate = GetEventObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup); eventObjectTemplate = GetEventObjectTemplateByLocalIdAndMap(localId, mapNum, mapGroup);
if (eventObjectTemplate == NULL) if (eventObjectTemplate == NULL)
{ {
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
GetEventObjectMovingCameraOffset(&cameraX, &cameraY); GetEventObjectMovingCameraOffset(&cameraX, &cameraY);
return TrySpawnEventObject(eventObjectTemplate, mapNum, mapGroup, cameraX, cameraY); return TrySpawnEventObject(eventObjectTemplate, mapNum, mapGroup, cameraX, cameraY);
@ -1759,7 +1759,7 @@ void RemoveEventObjectsOutsideView(void)
bool8 isActiveLinkPlayer; bool8 isActiveLinkPlayer;
struct EventObject *eventObject; struct EventObject *eventObject;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerEventObjects); j++) for (j = 0, isActiveLinkPlayer = FALSE; j < ARRAY_COUNT(gLinkPlayerEventObjects); j++)
{ {
@ -1778,21 +1778,16 @@ void RemoveEventObjectsOutsideView(void)
static void RemoveEventObjectIfOutsideView(struct EventObject *eventObject) static void RemoveEventObjectIfOutsideView(struct EventObject *eventObject)
{ {
s16 left; s16 left = gSaveBlock1Ptr->pos.x - 2;
s16 right; s16 right = gSaveBlock1Ptr->pos.x + 17;
s16 top; s16 top = gSaveBlock1Ptr->pos.y;
s16 bottom; s16 bottom = gSaveBlock1Ptr->pos.y + 16;
left = gSaveBlock1Ptr->pos.x - 2;
right = gSaveBlock1Ptr->pos.x + 17;
top = gSaveBlock1Ptr->pos.y;
bottom = gSaveBlock1Ptr->pos.y + 16;
if (eventObject->currentCoords.x >= left && eventObject->currentCoords.x <= right if (eventObject->currentCoords.x >= left && eventObject->currentCoords.x <= right
&& eventObject->currentCoords.y >= top && eventObject->currentCoords.y <= bottom) && eventObject->currentCoords.y >= top && eventObject->currentCoords.y <= bottom)
return; return;
if (eventObject->initialCoords.x >= left && eventObject->initialCoords.x <= right if (eventObject->initialCoords.x >= left && eventObject->initialCoords.x <= right
&& eventObject->initialCoords.y >= top && eventObject->initialCoords.y <= bottom) && eventObject->initialCoords.y >= top && eventObject->initialCoords.y <= bottom)
return; return;
RemoveEventObject(eventObject); RemoveEventObject(eventObject);
} }
@ -1802,7 +1797,7 @@ void sub_808E16C(s16 x, s16 y)
u8 i; u8 i;
ClearPlayerAvatarInfo(); ClearPlayerAvatarInfo();
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active) if (gEventObjects[i].active)
{ {
@ -2060,7 +2055,7 @@ void sub_808E75C(s16 x, s16 y)
struct EventObject *eventObject; struct EventObject *eventObject;
eventObjectId = GetEventObjectIdByXY(x, y); eventObjectId = GetEventObjectIdByXY(x, y);
if (eventObjectId != NUM_EVENT_OBJECTS) if (eventObjectId != EVENT_OBJECTS_COUNT)
{ {
eventObject = &gEventObjects[eventObjectId]; eventObject = &gEventObjects[eventObjectId];
eventObject->triggerGroundEffectsOnMove = TRUE; eventObject->triggerGroundEffectsOnMove = TRUE;
@ -2283,7 +2278,7 @@ void UpdateEventObjectCoordsForCameraUpdate(void)
{ {
dx = gCamera.x; dx = gCamera.x;
dy = gCamera.y; dy = gCamera.y;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active) if (gEventObjects[i].active)
{ {
@ -2301,7 +2296,7 @@ void UpdateEventObjectCoordsForCameraUpdate(void)
u8 GetEventObjectIdByXYZ(u16 x, u16 y, u8 z) u8 GetEventObjectIdByXYZ(u16 x, u16 y, u8 z)
{ {
u8 i; u8 i;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
if (gEventObjects[i].active) if (gEventObjects[i].active)
{ {
@ -2311,7 +2306,7 @@ u8 GetEventObjectIdByXYZ(u16 x, u16 y, u8 z)
} }
} }
} }
return NUM_EVENT_OBJECTS; return EVENT_OBJECTS_COUNT;
} }
static bool8 EventObjectDoesZCoordMatch(struct EventObject *eventObject, u8 z) static bool8 EventObjectDoesZCoordMatch(struct EventObject *eventObject, u8 z)
@ -4952,7 +4947,7 @@ static bool8 DoesObjectCollideWithObjectAt(struct EventObject *eventObject, s16
u8 i; u8 i;
struct EventObject *curObject; struct EventObject *curObject;
for (i = 0; i < NUM_EVENT_OBJECTS; i++) for (i = 0; i < EVENT_OBJECTS_COUNT; i++)
{ {
curObject = &gEventObjects[i]; curObject = &gEventObjects[i];
if (curObject->active && curObject != eventObject) if (curObject->active && curObject != eventObject)
@ -5333,7 +5328,7 @@ void npc_apply_direction(struct EventObject *eventObject, struct Sprite *sprite,
ShiftEventObjectCoords(eventObject, x, y); ShiftEventObjectCoords(eventObject, x, y);
oamt_npc_ministep_reset(sprite, direction, speed); oamt_npc_ministep_reset(sprite, direction, speed);
sprite->animPaused = FALSE; sprite->animPaused = FALSE;
if (gLockedAnimEventObjects != NULL && FindLockedEventObjectIndex(eventObject) != NUM_EVENT_OBJECTS) if (gLockedAnimEventObjects != NULL && FindLockedEventObjectIndex(eventObject) != EVENT_OBJECTS_COUNT)
{ {
sprite->animPaused = TRUE; sprite->animPaused = TRUE;
} }

View File

@ -595,7 +595,7 @@ static void LoadLinkPartnerEventObjectSpritePalette(u8 graphicsId, u8 localEvent
graphicsId == EVENT_OBJ_GFX_RIVAL_MAY_NORMAL) graphicsId == EVENT_OBJ_GFX_RIVAL_MAY_NORMAL)
{ {
u8 obj = GetEventObjectIdByLocalIdAndMap(localEventId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); u8 obj = GetEventObjectIdByLocalIdAndMap(localEventId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
if (obj != NUM_EVENT_OBJECTS) if (obj != EVENT_OBJECTS_COUNT)
{ {
u8 spriteId = gEventObjects[obj].spriteId; u8 spriteId = gEventObjects[obj].spriteId;
struct Sprite *sprite = &gSprites[spriteId]; struct Sprite *sprite = &gSprites[spriteId];

View File

@ -1,6 +1,4 @@
#include "global.h" #include "global.h"
#include "constants/rgb.h"
#include "constants/songs.h"
#include "event_data.h" #include "event_data.h"
#include "event_scripts.h" #include "event_scripts.h"
#include "field_effect.h" #include "field_effect.h"
@ -14,22 +12,24 @@
#include "sprite.h" #include "sprite.h"
#include "task.h" #include "task.h"
#include "wild_encounter.h" #include "wild_encounter.h"
#include "constants/rgb.h"
#include "constants/songs.h"
void hm2_sweet_scent(void); static void FieldCallback_SweetScent(void);
void sub_8159F5C(void); static void StartSweetScentFieldEffect(void);
void sub_8159FEC(u8 taskId); static void TrySweetScentEncounter(u8 taskId);
void sub_815A090(u8 taskId); static void FailSweetScentEncounter(u8 taskId);
void sub_81BE6B8(void); void sub_81BE6B8(void);
void sub_81BE72C(void); void sub_81BE72C(void);
bool8 SetUpFieldMove_SweetScent(void) bool8 SetUpFieldMove_SweetScent(void)
{ {
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = hm2_sweet_scent; gPostMenuFieldCallback = FieldCallback_SweetScent;
return TRUE; return TRUE;
} }
void hm2_sweet_scent(void) static void FieldCallback_SweetScent(void)
{ {
FieldEffectStart(FLDEFF_SWEET_SCENT); FieldEffectStart(FLDEFF_SWEET_SCENT);
gFieldEffectArguments[0] = GetCursorSelectionMonId(); gFieldEffectArguments[0] = GetCursorSelectionMonId();
@ -41,12 +41,12 @@ bool8 FldEff_SweetScent(void)
sub_80AC3D0(); sub_80AC3D0();
taskId = oei_task_add(); taskId = oei_task_add();
gTasks[taskId].data[8] = (u32)sub_8159F5C >> 16; gTasks[taskId].data[8] = (u32)StartSweetScentFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)sub_8159F5C; gTasks[taskId].data[9] = (u32)StartSweetScentFieldEffect;
return FALSE; return FALSE;
} }
void sub_8159F5C(void) static void StartSweetScentFieldEffect(void)
{ {
u8 taskId; u8 taskId;
@ -54,12 +54,12 @@ void sub_8159F5C(void)
CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100); CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100);
CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100); CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100);
BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED);
taskId = CreateTask(sub_8159FEC, 0); taskId = CreateTask(TrySweetScentEncounter, 0);
gTasks[taskId].data[0] = 0; gTasks[taskId].data[0] = 0;
FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT); FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT);
} }
void sub_8159FEC(u8 taskId) static void TrySweetScentEncounter(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {
@ -74,7 +74,7 @@ void sub_8159FEC(u8 taskId)
} }
else else
{ {
gTasks[taskId].func = sub_815A090; gTasks[taskId].func = FailSweetScentEncounter;
BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, RGB_RED); BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, RGB_RED);
sub_81BE6B8(); sub_81BE6B8();
} }
@ -86,7 +86,7 @@ void sub_8159FEC(u8 taskId)
} }
} }
void sub_815A090(u8 taskId) static void FailSweetScentEncounter(u8 taskId)
{ {
if (!gPaletteFade.active) if (!gPaletteFade.active)
{ {

View File

@ -1,5 +1,4 @@
#include "global.h" #include "global.h"
#include "fldeff_teleport.h"
#include "field_effect.h" #include "field_effect.h"
#include "field_player_avatar.h" #include "field_player_avatar.h"
#include "party_menu.h" #include "party_menu.h"
@ -7,18 +6,21 @@
#include "rom6.h" #include "rom6.h"
#include "task.h" #include "task.h"
static void FieldCallback_Teleport(void);
static void StartTeleportFieldEffect(void);
bool8 SetUpFieldMove_Teleport(void) bool8 SetUpFieldMove_Teleport(void)
{ {
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE) if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{ {
gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu; gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
gPostMenuFieldCallback = hm_teleport_run_dp02scr; gPostMenuFieldCallback = FieldCallback_Teleport;
return TRUE; return TRUE;
} }
return FALSE; return FALSE;
} }
void hm_teleport_run_dp02scr(void) static void FieldCallback_Teleport(void)
{ {
Overworld_ResetStateAfterTeleport(); Overworld_ResetStateAfterTeleport();
FieldEffectStart(FLDEFF_USE_TELEPORT); FieldEffectStart(FLDEFF_USE_TELEPORT);
@ -28,16 +30,14 @@ void hm_teleport_run_dp02scr(void)
bool8 FldEff_UseTeleport(void) bool8 FldEff_UseTeleport(void)
{ {
u8 taskId = oei_task_add(); u8 taskId = oei_task_add();
gTasks[taskId].data[8] = (u32)sub_817C94C >> 16; gTasks[taskId].data[8] = (u32)StartTeleportFieldEffect >> 16;
gTasks[taskId].data[9] = (u32)sub_817C94C; gTasks[taskId].data[9] = (u32)StartTeleportFieldEffect;
SetPlayerAvatarTransitionFlags(1); SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
return FALSE; return FALSE;
} }
void sub_817C94C(void) static void StartTeleportFieldEffect(void)
{ {
FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT); FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
CreateTeleportFieldEffectTask(); CreateTeleportFieldEffectTask();
} }

View File

@ -7,8 +7,6 @@
#include "script_menu.h" #include "script_menu.h"
#include "task.h" #include "task.h"
extern void (*gUnknown_0300485C)(void);
extern void Overworld_PlaySpecialMapMusic(void); extern void Overworld_PlaySpecialMapMusic(void);
extern bool16 ScrSpecial_CreatePCMenu(void); extern bool16 ScrSpecial_CreatePCMenu(void);
extern void ScriptMenu_DisplayPCStartupPrompt(void); extern void ScriptMenu_DisplayPCStartupPrompt(void);