diff options
Diffstat (limited to 'src/overworld.c')
-rw-r--r-- | src/overworld.c | 411 |
1 files changed, 205 insertions, 206 deletions
diff --git a/src/overworld.c b/src/overworld.c index 3d9a1bdc2..9cbc8dc52 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -10,9 +10,7 @@ #include "field_control_avatar.h" #include "field_effect.h" #include "field_fadetransition.h" -#include "field_ground_effect.h" -#include "field_map_obj.h" -#include "field_map_obj_helpers.h" +#include "event_object_movement.h" #include "field_message_box.h" #include "field_player_avatar.h" #include "field_screen_effect.h" @@ -59,6 +57,7 @@ #include "malloc.h" #include "gpu_regs.h" #include "link_rfu.h" +#include "constants/map_types.h" // event scripts extern const u8 EventScript_WhiteOut[]; @@ -83,14 +82,14 @@ extern const u8 gUnknown_082774EF[]; extern const u8 gUnknown_08277509[]; // vars -extern const struct MapData *const gMapAttributes[]; +extern const struct MapLayout *const gMapLayouts[]; extern const struct MapHeader *const *const gMapGroups[]; extern const s32 gMaxFlashLevel; extern const u16 gUnknown_82EC7C4[]; u16 gUnknown_03005DA8; MainCallback gFieldCallback; -bool8 (*gUnknown_03005DB0)(void); +bool8 (*gFieldCallback2)(void); u8 gUnknown_03005DB4; u8 gFieldLinkPlayerCount; @@ -99,16 +98,16 @@ extern void HealPlayerParty(void); extern void move_tilemap_camera_to_upper_left_corner(void); extern void cur_mapheader_run_tileset_funcs_after_some_cpuset(void); extern void DrawWholeMapView(void); -extern void copy_map_tileset1_tileset2_to_vram(const struct MapData *); -extern void apply_map_tileset1_tileset2_palette(const struct MapData *); +extern void copy_map_tileset1_tileset2_to_vram(const struct MapLayout *); +extern void apply_map_tileset1_tileset2_palette(const struct MapLayout *); extern void ResetCyclingRoadChallengeData(void); extern void ApplyNewEncryptionKeyToWord(u32 *word, u32 newKey); extern void mapheader_run_script_with_tag_x5(void); extern void ResetFieldTasksArgs(void); extern void sub_80A0A2C(void); extern void not_trainer_hill_battle_pyramid(void); -extern void apply_map_tileset2_palette(const struct MapData *); -extern void copy_map_tileset2_to_vram_2(const struct MapData *); +extern void apply_map_tileset2_palette(const struct MapLayout *); +extern void copy_map_tileset2_to_vram_2(const struct MapLayout *); extern void prev_quest_postbuffer_cursor_backup_reset(void); extern void ShowMapNamePopup(void); extern bool32 InTrainerHill(void); @@ -145,8 +144,8 @@ extern void sub_80EDB44(void); extern void sub_81D64C0(void); extern void sub_81BE6AC(void); extern void sub_8098128(void); -extern void copy_map_tileset1_to_vram(const struct MapData *); -extern void copy_map_tileset2_to_vram(const struct MapData *); +extern void copy_map_tileset1_to_vram(const struct MapLayout *); +extern void copy_map_tileset2_to_vram(const struct MapLayout *); extern void FieldUpdateBgTilemapScroll(void); extern void TransferTilesetAnimsBuffer(void); extern bool32 sub_81D5F48(void); @@ -171,7 +170,7 @@ extern const u8* sub_809C2C8(struct MapPosition *a1, u8, u8); extern u8 *sub_809D0F4(void*); extern u8 sub_808BD6C(u8); extern u8 sub_808BD7C(u8); -extern void sub_80979D4(struct Sprite*, u8); +extern void UpdateEventObjectSpriteVisibility(struct Sprite*, u8); // this file's functions static void Overworld_ResetStateAfterWhiteOut(void); @@ -206,7 +205,7 @@ static void sub_8086C90(void); static void sub_8086FA0(u16); static void sub_8086F38(u16*, s32); static u8 npc_something3(u8 a1, u8 a2); -static u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y); +static u8 LinkPlayerDetectCollision(u8 selfEventObjId, u8 a2, s16 x, s16 y); static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion); static void sub_8087878(u8 linkPlayerId, u16 *x, u16 *y); static u8 sub_80878A0(u8 linkPlayerId); @@ -214,15 +213,15 @@ static u8 sub_80878C0(u8 linkPlayerId); static s32 sub_80878E4(u8 linkPlayerId); static u8 GetLinkPlayerIdAt(s16 x, s16 y); static void sub_808796C(u8 linkPlayerId, u8 a2); -static void ZeroMapObject(struct MapObject *mapObj); -static void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4); -static void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y); +static void ZeroEventObject(struct EventObject *eventObj); +static void SpawnLinkPlayerEventObject(u8 linkPlayerId, s16 x, s16 y, u8 a4); +static void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, s16 x, s16 y); static void sub_80877DC(u8 linkPlayerId, u8 a2); static void sub_808780C(u8 linkPlayerId); static u8 sub_8087858(u8 linkPlayerId); static void sub_8087584(void); static u32 sub_8087690(void); -static void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj); +static void ZeroLinkPlayerEventObject(struct LinkPlayerEventObject *linkPlayerEventObj); static const u8 *sub_80873B4(struct UnkStruct_8054FF8 *a1); static u16 sub_8087480(const u8 *script); static void sub_8087510(void); @@ -269,7 +268,7 @@ EWRAM_DATA static u16 sLastMapSectionId = 0; EWRAM_DATA static struct UnkPlayerStruct sUnknown_02032300 = {0}; EWRAM_DATA static u16 sAmbientCrySpecies = 0; EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE; -EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0}; +EWRAM_DATA struct LinkPlayerEventObject gLinkPlayerEventObjects[4] = {0}; // const rom data static const struct WarpData sDummyWarpData = @@ -354,22 +353,22 @@ static const struct ScanlineEffectParams gUnknown_08339DBC = 0, }; -static u8 sub_80879D8(struct LinkPlayerMapObject *, struct MapObject *, u8); -static u8 sub_80879F8(struct LinkPlayerMapObject *, struct MapObject *, u8); -static u8 sub_80879FC(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_80879D8(struct LinkPlayerEventObject *, struct EventObject *, u8); +static u8 sub_80879F8(struct LinkPlayerEventObject *, struct EventObject *, u8); +static u8 sub_80879FC(struct LinkPlayerEventObject *, struct EventObject *, u8); -static u8 (*const gUnknown_08339DC8[])(struct LinkPlayerMapObject *, struct MapObject *, u8) = +static u8 (*const gUnknown_08339DC8[])(struct LinkPlayerEventObject *, struct EventObject *, u8) = { sub_80879D8, sub_80879F8, sub_80879FC, }; -static u8 sub_8087A1C(struct LinkPlayerMapObject *, struct MapObject *, u8); -static u8 sub_8087A20(struct LinkPlayerMapObject *, struct MapObject *, u8); -static u8 sub_8087A88(struct LinkPlayerMapObject *, struct MapObject *, u8); +static u8 sub_8087A1C(struct LinkPlayerEventObject *, struct EventObject *, u8); +static u8 sub_8087A20(struct LinkPlayerEventObject *, struct EventObject *, u8); +static u8 sub_8087A88(struct LinkPlayerEventObject *, struct EventObject *, u8); -static u8 (*const gUnknown_08339DD4[])(struct LinkPlayerMapObject *, struct MapObject *, u8) = +static u8 (*const gUnknown_08339DD4[])(struct LinkPlayerEventObject *, struct EventObject *, u8) = { sub_8087A1C, sub_8087A20, @@ -384,10 +383,10 @@ static u8 (*const gUnknown_08339DD4[])(struct LinkPlayerMapObject *, struct MapO sub_8087A88, }; -static void sub_8087AA0(struct LinkPlayerMapObject *, struct MapObject *); -static void sub_8087AA8(struct LinkPlayerMapObject *, struct MapObject *); +static void sub_8087AA0(struct LinkPlayerEventObject *, struct EventObject *); +static void sub_8087AA8(struct LinkPlayerEventObject *, struct EventObject *); -static void (*const gUnknown_08339E00[])(struct LinkPlayerMapObject *, struct MapObject *) = +static void (*const gUnknown_08339E00[])(struct LinkPlayerEventObject *, struct EventObject *) = { sub_8087AA0, sub_8087AA8, @@ -503,55 +502,55 @@ void ApplyNewEncryptionKeyToGameStats(u32 newKey) ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey); } -void LoadMapObjTemplatesFromHeader(void) +void LoadEventObjTemplatesFromHeader(void) { // Clear map object templates - CpuFill32(0, gSaveBlock1Ptr->mapObjectTemplates, sizeof(gSaveBlock1Ptr->mapObjectTemplates)); + CpuFill32(0, gSaveBlock1Ptr->eventObjectTemplates, sizeof(gSaveBlock1Ptr->eventObjectTemplates)); // Copy map header events to save block - CpuCopy32(gMapHeader.events->mapObjects, - gSaveBlock1Ptr->mapObjectTemplates, - gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate)); + CpuCopy32(gMapHeader.events->eventObjects, + gSaveBlock1Ptr->eventObjectTemplates, + gMapHeader.events->eventObjectCount * sizeof(struct EventObjectTemplate)); } -void LoadSaveblockMapObjScripts(void) +void LoadSaveblockEventObjScripts(void) { - struct MapObjectTemplate *mapHeaderObjTemplates = gMapHeader.events->mapObjects; - struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates; + struct EventObjectTemplate *mapHeaderObjTemplates = gMapHeader.events->eventObjects; + struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates; s32 i; for (i = 0; i < 64; i++) savObjTemplates[i].script = mapHeaderObjTemplates[i].script; } -void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y) +void Overworld_SetEventObjTemplateCoords(u8 localId, s16 x, s16 y) { s32 i; - struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates; + struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates; for (i = 0; i < 64; i++) { - struct MapObjectTemplate *mapObjectTemplate = &savObjTemplates[i]; - if (mapObjectTemplate->localId == localId) + struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i]; + if (eventObjectTemplate->localId == localId) { - mapObjectTemplate->x = x; - mapObjectTemplate->y = y; + eventObjectTemplate->x = x; + eventObjectTemplate->y = y; return; } } } -void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType) +void Overworld_SetEventObjTemplateMovementType(u8 localId, u8 movementType) { s32 i; - struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates; + struct EventObjectTemplate *savObjTemplates = gSaveBlock1Ptr->eventObjectTemplates; for (i = 0; i < 64; i++) { - struct MapObjectTemplate *mapObjectTemplate = &savObjTemplates[i]; - if (mapObjectTemplate->localId == localId) + struct EventObjectTemplate *eventObjectTemplate = &savObjTemplates[i]; + if (eventObjectTemplate->localId == localId) { - mapObjectTemplate->movementType = movementType; + eventObjectTemplate->movementType = movementType; return; } } @@ -560,17 +559,17 @@ void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType) static void mapdata_load_assets_to_gpu_and_full_redraw(void) { move_tilemap_camera_to_upper_left_corner(); - copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData); - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + copy_map_tileset1_tileset2_to_vram(gMapHeader.mapLayout); + apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); DrawWholeMapView(); cur_mapheader_run_tileset_funcs_after_some_cpuset(); } -const struct MapData *get_mapdata_header(void) +const struct MapLayout *GetMapLayout(void) { - u16 mapDataId = gSaveBlock1Ptr->mapDataId; - if (mapDataId) - return gMapAttributes[mapDataId - 1]; + u16 mapLayoutId = gSaveBlock1Ptr->mapLayoutId; + if (mapLayoutId) + return gMapLayouts[mapLayoutId - 1]; return NULL; } @@ -627,14 +626,14 @@ void set_current_map_header_from_sav1_save_old_name(void) { sLastMapSectionId = gMapHeader.regionMapSectionId; gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); - gSaveBlock1Ptr->mapDataId = gMapHeader.mapDataId; - gMapHeader.mapData = get_mapdata_header(); + gSaveBlock1Ptr->mapLayoutId = gMapHeader.mapLayoutId; + gMapHeader.mapLayout = GetMapLayout(); } void LoadSaveblockMapHeader(void) { gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum); - gMapHeader.mapData = get_mapdata_header(); + gMapHeader.mapLayout = GetMapLayout(); } void update_camera_pos_from_warpid(void) @@ -651,8 +650,8 @@ void update_camera_pos_from_warpid(void) } else { - gSaveBlock1Ptr->pos.x = gMapHeader.mapData->width / 2; - gSaveBlock1Ptr->pos.y = gMapHeader.mapData->height / 2; + gSaveBlock1Ptr->pos.x = gMapHeader.mapLayout->width / 2; + gSaveBlock1Ptr->pos.y = gMapHeader.mapLayout->height / 2; } } @@ -826,7 +825,7 @@ void mliX_load_map(u8 mapGroup, u8 mapNum) ApplyCurrentWarp(); set_current_map_header_from_sav1_save_old_name(); - LoadMapObjTemplatesFromHeader(); + LoadEventObjTemplatesFromHeader(); TrySetMapSaveWarpStatus(); ClearTempFieldEventData(); ResetCyclingRoadChallengeData(); @@ -839,8 +838,8 @@ void mliX_load_map(u8 mapGroup, u8 mapNum) Overworld_ClearSavedMusic(); mapheader_run_script_with_tag_x3(); not_trainer_hill_battle_pyramid(); - copy_map_tileset2_to_vram_2(gMapHeader.mapData); - apply_map_tileset2_palette(gMapHeader.mapData); + copy_map_tileset2_to_vram_2(gMapHeader.mapLayout); + apply_map_tileset2_palette(gMapHeader.mapLayout); for (paletteIndex = 6; paletteIndex < 13; paletteIndex++) ApplyWeatherGammaShiftToPal(paletteIndex); @@ -864,12 +863,12 @@ static void mli0_load_map(u32 a1) set_current_map_header_from_sav1_save_old_name(); if (!(sUnknown_020322D8 & 1)) { - if (gMapHeader.mapDataId == 0x169) + if (gMapHeader.mapLayoutId == 0x169) sub_81AA1D8(); else if (InTrainerHill()) sub_81D5DF8(); else - LoadMapObjTemplatesFromHeader(); + LoadEventObjTemplatesFromHeader(); } v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType); @@ -892,7 +891,7 @@ static void mli0_load_map(u32 a1) mapheader_run_script_with_tag_x3(); UpdateLocationHistoryForRoamer(); RoamerMoveToOtherLocationSet(); - if (gMapHeader.mapDataId == 0x169) + if (gMapHeader.mapLayoutId == 0x169) battle_pyramid_map_load_related(0); else if (InTrainerHill()) trainer_hill_map_load_related(); @@ -914,7 +913,7 @@ void player_avatar_init_params_reset(void) void walkrun_find_lowest_active_bit_in_bitfield(void) { - sUnknown_02032300.player_field_1 = player_get_direction_lower_nybble(); + sUnknown_02032300.player_field_1 = GetPlayerFacingDirection(); if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE)) sUnknown_02032300.player_field_0 = 2; @@ -1018,10 +1017,10 @@ u8 Overworld_GetFlashLevel(void) return gSaveBlock1Ptr->flashLevel; } -void sub_8085524(u16 mapDataId) +void sub_8085524(u16 mapLayoutId) { - gSaveBlock1Ptr->mapDataId = mapDataId; - gMapHeader.mapData = get_mapdata_header(); + gSaveBlock1Ptr->mapLayoutId = mapLayoutId; + gMapHeader.mapLayout = GetMapLayout(); } void sub_8085540(u8 var) @@ -1520,15 +1519,15 @@ void sub_8085E94(void *a0) static bool8 map_post_load_hook_exec(void) { - if (gUnknown_03005DB0 != NULL) + if (gFieldCallback2 != NULL) { - if (!gUnknown_03005DB0()) + if (!gFieldCallback2()) { return FALSE; } else { - gUnknown_03005DB0 = NULL; + gFieldCallback2 = NULL; gFieldCallback = NULL; } } @@ -1556,7 +1555,7 @@ void CB2_NewGame(void) ScriptContext1_Init(); ScriptContext2_Disable(); gFieldCallback = ExecuteTruckSequence; - gUnknown_03005DB0 = NULL; + gFieldCallback2 = NULL; do_load_map_stuff_loop(&gMain.state); SetFieldVBlankCallback(); SetMainCallback1(CB1_Overworld); @@ -1686,7 +1685,7 @@ void c2_8056854(void) void CB2_ReturnToFieldWithOpenMenu(void) { FieldClearVBlankHBlankCallbacks(); - gUnknown_03005DB0 = sub_80AF6A4; + gFieldCallback2 = sub_80AF6A4; CB2_ReturnToField(); } @@ -1731,17 +1730,17 @@ void CB2_ContinueSavedGame(void) LoadSaveblockMapHeader(); set_warp2_warp3_to_neg_1(); trainerHillMapId = GetCurrentTrainerHillMapId(); - if (gMapHeader.mapDataId == 0x169) + if (gMapHeader.mapLayoutId == 0x169) sub_81AA2F8(); else if (trainerHillMapId != 0 && trainerHillMapId != 6) sub_81D5F48(); else - LoadSaveblockMapObjScripts(); + LoadSaveblockEventObjScripts(); - UnfreezeMapObjects(); + UnfreezeEventObjects(); DoTimeBasedEvents(); sub_8084788(); - if (gMapHeader.mapDataId == 0x169) + if (gMapHeader.mapLayoutId == 0x169) battle_pyramid_map_load_related(1); else if (trainerHillMapId != 0) trainer_hill_map_load_related(); @@ -1861,17 +1860,17 @@ static bool32 map_loading_iteration_3(u8 *state) (*state)++; break; case 6: - copy_map_tileset1_to_vram(gMapHeader.mapData); + copy_map_tileset1_to_vram(gMapHeader.mapLayout); (*state)++; break; case 7: - copy_map_tileset2_to_vram(gMapHeader.mapData); + copy_map_tileset2_to_vram(gMapHeader.mapLayout); (*state)++; break; case 8: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); (*state)++; } break; @@ -1936,17 +1935,17 @@ static bool32 load_map_stuff(u8 *state, u32 a2) (*state)++; break; case 6: - copy_map_tileset1_to_vram(gMapHeader.mapData); + copy_map_tileset1_to_vram(gMapHeader.mapLayout); (*state)++; break; case 7: - copy_map_tileset2_to_vram(gMapHeader.mapData); + copy_map_tileset2_to_vram(gMapHeader.mapLayout); (*state)++; break; case 8: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); (*state)++; } break; @@ -2033,17 +2032,17 @@ static bool32 map_loading_iteration_2_link(u8 *state) (*state)++; break; case 5: - copy_map_tileset1_to_vram(gMapHeader.mapData); + copy_map_tileset1_to_vram(gMapHeader.mapLayout); (*state)++; break; case 6: - copy_map_tileset2_to_vram(gMapHeader.mapData); + copy_map_tileset2_to_vram(gMapHeader.mapLayout); (*state)++; break; case 7: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - apply_map_tileset1_tileset2_palette(gMapHeader.mapData); + apply_map_tileset1_tileset2_palette(gMapHeader.mapLayout); (*state)++; } break; @@ -2172,7 +2171,7 @@ static void sub_80869DC(void) gUnknown_03005DEC = 0; gUnknown_03005DE8 = 0; sub_808D438(); - SpawnFieldObjectsInView(0, 0); + TrySpawnEventObjects(0, 0); mapheader_run_first_tag4_script_list_match(); } @@ -2189,7 +2188,7 @@ static void mli4_mapscripts_and_other(void) InitPlayerAvatar(x, y, player->player_field_1, gSaveBlock2Ptr->playerGender); SetPlayerAvatarTransitionFlags(player->player_field_0); player_avatar_init_params_reset(); - SpawnFieldObjectsInView(0, 0); + TrySpawnEventObjects(0, 0); mapheader_run_first_tag4_script_list_match(); } @@ -2202,7 +2201,7 @@ static void sub_8086A68(void) static void sub_8086A80(void) { - gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1; + gEventObjects[gPlayerAvatar.eventObjectId].trackedByCamera = 1; InitCameraUpdateCallback(gPlayerAvatar.spriteId); } @@ -2233,7 +2232,7 @@ static void sub_8086B14(void) for (i = 0; i < gFieldLinkPlayerCount; i++) { - SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender); + SpawnLinkPlayerEventObject(i, i + x, y, gLinkPlayers[i].gender); CreateLinkPlayerSprite(i, gLinkPlayers[i].version); } @@ -2678,7 +2677,7 @@ static void sub_80872D8(s32 linkPlayerId, s32 a2, struct UnkStruct_8054FF8 *a3) a3->a = linkPlayerId; a3->b = (linkPlayerId == a2) ? 1 : 0; - a3->c = gLinkPlayerMapObjects[linkPlayerId].mode; + a3->c = gLinkPlayerEventObjects[linkPlayerId].mode; a3->d = sub_80878A0(linkPlayerId); sub_8087878(linkPlayerId, &x, &y); a3->sub.x = x; @@ -2891,109 +2890,109 @@ static u32 sub_8087690(void) return gLink.sendQueue.count; } -static void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj) +static void ZeroLinkPlayerEventObject(struct LinkPlayerEventObject *linkPlayerEventObj) { - memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject)); + memset(linkPlayerEventObj, 0, sizeof(struct LinkPlayerEventObject)); } -void ZeroAllLinkPlayerMapObjects(void) +void ClearLinkPlayerEventObjects(void) { - memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects)); + memset(gLinkPlayerEventObjects, 0, sizeof(gLinkPlayerEventObjects)); } -static void ZeroMapObject(struct MapObject *mapObj) +static void ZeroEventObject(struct EventObject *eventObj) { - memset(mapObj, 0, sizeof(struct MapObject)); + memset(eventObj, 0, sizeof(struct EventObject)); } -static void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) +static void SpawnLinkPlayerEventObject(u8 linkPlayerId, s16 x, s16 y, u8 a4) { - u8 mapObjId = sub_808D4F4(); - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - struct MapObject *mapObj = &gMapObjects[mapObjId]; + u8 eventObjId = GetFirstInactiveEventObjectId(); + struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId]; + struct EventObject *eventObj = &gEventObjects[eventObjId]; - ZeroLinkPlayerMapObject(linkPlayerMapObj); - ZeroMapObject(mapObj); + ZeroLinkPlayerEventObject(linkPlayerEventObj); + ZeroEventObject(eventObj); - linkPlayerMapObj->active = 1; - linkPlayerMapObj->linkPlayerId = linkPlayerId; - linkPlayerMapObj->mapObjId = mapObjId; - linkPlayerMapObj->mode = 0; + linkPlayerEventObj->active = 1; + linkPlayerEventObj->linkPlayerId = linkPlayerId; + linkPlayerEventObj->eventObjId = eventObjId; + linkPlayerEventObj->mode = 0; - mapObj->active = 1; - mapObj->mapobj_bit_1 = a4; - mapObj->range.as_byte = 2; - mapObj->spriteId = 64; + eventObj->active = 1; + eventObj->singleMovementActive = a4; + eventObj->range.as_byte = 2; + eventObj->spriteId = 64; - InitLinkPlayerMapObjectPos(mapObj, x, y); + InitLinkPlayerEventObjectPos(eventObj, x, y); } -static void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y) +static void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, s16 x, s16 y) { - mapObj->coords2.x = x; - mapObj->coords2.y = y; - mapObj->coords3.x = x; - mapObj->coords3.y = y; - sub_8093038(x, y, &mapObj->coords1.x, &mapObj->coords1.y); - mapObj->coords1.x += 8; - FieldObjectUpdateZCoord(mapObj); + eventObj->currentCoords.x = x; + eventObj->currentCoords.y = y; + eventObj->previousCoords.x = x; + eventObj->previousCoords.y = y; + sub_8093038(x, y, &eventObj->initialCoords.x, &eventObj->initialCoords.y); + eventObj->initialCoords.x += 8; + EventObjectUpdateZCoord(eventObj); } static void sub_80877DC(u8 linkPlayerId, u8 a2) { - if (gLinkPlayerMapObjects[linkPlayerId].active) + if (gLinkPlayerEventObjects[linkPlayerId].active) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - mapObj->range.as_byte = a2; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + eventObj->range.as_byte = a2; } } static void sub_808780C(u8 linkPlayerId) { - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - if (mapObj->spriteId != 64 ) - DestroySprite(&gSprites[mapObj->spriteId]); - linkPlayerMapObj->active = 0; - mapObj->active = 0; + struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId]; + u8 eventObjId = linkPlayerEventObj->eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + if (eventObj->spriteId != 64 ) + DestroySprite(&gSprites[eventObj->spriteId]); + linkPlayerEventObj->active = 0; + eventObj->active = 0; } static u8 sub_8087858(u8 linkPlayerId) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->spriteId; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + return eventObj->spriteId; } static void sub_8087878(u8 linkPlayerId, u16 *x, u16 *y) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - *x = mapObj->coords2.x; - *y = mapObj->coords2.y; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + *x = eventObj->currentCoords.x; + *y = eventObj->currentCoords.y; } static u8 sub_80878A0(u8 linkPlayerId) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->range.as_byte; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + return eventObj->range.as_byte; } static u8 sub_80878C0(u8 linkPlayerId) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return mapObj->mapobj_unk_0B_0; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + return eventObj->currentElevation; } static s32 sub_80878E4(u8 linkPlayerId) { - u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; - return 16 - (s8)mapObj->mapobj_unk_21; + u8 eventObjId = gLinkPlayerEventObjects[linkPlayerId].eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; + return 16 - (s8)eventObj->directionSequenceIndex; } static u8 GetLinkPlayerIdAt(s16 x, s16 y) @@ -3001,11 +3000,11 @@ static u8 GetLinkPlayerIdAt(s16 x, s16 y) u8 i; for (i = 0; i < 4; i++) { - if (gLinkPlayerMapObjects[i].active - && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2)) + if (gLinkPlayerEventObjects[i].active + && (gLinkPlayerEventObjects[i].mode == 0 || gLinkPlayerEventObjects[i].mode == 2)) { - struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId]; - if (mapObj->coords2.x == x && mapObj->coords2.y == y) + struct EventObject *eventObj = &gEventObjects[gLinkPlayerEventObjects[i].eventObjId]; + if (eventObj->currentCoords.x == x && eventObj->currentCoords.y == y) return i; } } @@ -3014,79 +3013,79 @@ static u8 GetLinkPlayerIdAt(s16 x, s16 y) static void sub_808796C(u8 linkPlayerId, u8 a2) { - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; + struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId]; + u8 eventObjId = linkPlayerEventObj->eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; - if (linkPlayerMapObj->active) + if (linkPlayerEventObj->active) { if (a2 > 10) - mapObj->mapobj_bit_2 = 1; + eventObj->triggerGroundEffectsOnMove = 1; else - gUnknown_08339E00[gUnknown_08339DC8[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj); + gUnknown_08339E00[gUnknown_08339DC8[linkPlayerEventObj->mode](linkPlayerEventObj, eventObj, a2)](linkPlayerEventObj, eventObj); } } -static u8 sub_80879D8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_80879D8(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { - return gUnknown_08339DD4[a3](linkPlayerMapObj, mapObj, a3); + return gUnknown_08339DD4[a3](linkPlayerEventObj, eventObj, a3); } -static u8 sub_80879F8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_80879F8(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { return 1; } -static u8 sub_80879FC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_80879FC(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { - return gUnknown_08339DD4[a3](linkPlayerMapObj, mapObj, a3); + return gUnknown_08339DD4[a3](linkPlayerEventObj, eventObj, a3); } -static u8 sub_8087A1C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8087A1C(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { return 0; } -static u8 sub_8087A20(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8087A20(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { s16 x, y; - mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte); - FieldObjectMoveDestCoords(mapObj, mapObj->range.as_byte, &x, &y); + eventObj->range.as_byte = npc_something3(a3, eventObj->range.as_byte); + EventObjectMoveDestCoords(eventObj, eventObj->range.as_byte, &x, &y); - if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->range.as_byte, x, y)) + if (LinkPlayerDetectCollision(linkPlayerEventObj->eventObjId, eventObj->range.as_byte, x, y)) { return 0; } else { - mapObj->mapobj_unk_21 = 16; - npc_coords_shift(mapObj, x, y); - FieldObjectUpdateZCoord(mapObj); + eventObj->directionSequenceIndex = 16; + ShiftEventObjectCoords(eventObj, x, y); + EventObjectUpdateZCoord(eventObj); return 1; } } -static u8 sub_8087A88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3) +static u8 sub_8087A88(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj, u8 a3) { - mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte); + eventObj->range.as_byte = npc_something3(a3, eventObj->range.as_byte); return 0; } -static void sub_8087AA0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +static void sub_8087AA0(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj) { - linkPlayerMapObj->mode = 0; + linkPlayerEventObj->mode = 0; } -static void sub_8087AA8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj) +static void sub_8087AA8(struct LinkPlayerEventObject *linkPlayerEventObj, struct EventObject *eventObj) { - mapObj->mapobj_unk_21--; - linkPlayerMapObj->mode = 1; - MoveCoords(mapObj->range.as_byte, &mapObj->coords1.x, &mapObj->coords1.y); - if (!mapObj->mapobj_unk_21) + eventObj->directionSequenceIndex--; + linkPlayerEventObj->mode = 1; + MoveCoords(eventObj->range.as_byte, &eventObj->initialCoords.x, &eventObj->initialCoords.y); + if (!eventObj->directionSequenceIndex) { - npc_coords_shift_still(mapObj); - linkPlayerMapObj->mode = 2; + ShiftStillEventObjectCoords(eventObj); + linkPlayerEventObj->mode = 2; } } @@ -3110,15 +3109,15 @@ static u8 npc_something3(u8 a1, u8 a2) return a2; } -static u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y) +static u8 LinkPlayerDetectCollision(u8 selfEventObjId, u8 a2, s16 x, s16 y) { u8 i; for (i = 0; i < 16; i++) { - if (i != selfMapObjId) + if (i != selfEventObjId) { - if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y) - || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y)) + if ((gEventObjects[i].currentCoords.x == x && gEventObjects[i].currentCoords.y == y) + || (gEventObjects[i].previousCoords.x == x && gEventObjects[i].previousCoords.y == y)) { return 1; } @@ -3129,51 +3128,51 @@ static u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y) static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion) { - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId]; - u8 mapObjId = linkPlayerMapObj->mapObjId; - struct MapObject *mapObj = &gMapObjects[mapObjId]; + struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[linkPlayerId]; + u8 eventObjId = linkPlayerEventObj->eventObjId; + struct EventObject *eventObj = &gEventObjects[eventObjId]; struct Sprite *sprite; - if (linkPlayerMapObj->active) + if (linkPlayerEventObj->active) { switch (gameVersion) { case VERSION_FIRE_RED: case VERSION_LEAF_GREEN: - mapObj->spriteId = AddPseudoFieldObject(sub_808BD6C(mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0); + eventObj->spriteId = AddPseudoEventObject(sub_808BD6C(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_RUBY: case VERSION_SAPPHIRE: - mapObj->spriteId = AddPseudoFieldObject(sub_808BD7C(mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0); + eventObj->spriteId = AddPseudoEventObject(sub_808BD7C(eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); break; case VERSION_EMERALD: - mapObj->spriteId = AddPseudoFieldObject(GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0); + eventObj->spriteId = AddPseudoEventObject(GetRivalAvatarGraphicsIdByStateIdAndGender(0, eventObj->singleMovementActive), SpriteCB_LinkPlayer, 0, 0, 0); break; } - sprite = &gSprites[mapObj->spriteId]; + sprite = &gSprites[eventObj->spriteId]; sprite->coordOffsetEnabled = TRUE; sprite->data[0] = linkPlayerId; - mapObj->mapobj_bit_2 = 0; + eventObj->triggerGroundEffectsOnMove = 0; } } static void SpriteCB_LinkPlayer(struct Sprite *sprite) { - struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data[0]]; - struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId]; - sprite->pos1.x = mapObj->coords1.x; - sprite->pos1.y = mapObj->coords1.y; - SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1); - sprite->oam.priority = ZCoordToPriority(mapObj->elevation); + struct LinkPlayerEventObject *linkPlayerEventObj = &gLinkPlayerEventObjects[sprite->data[0]]; + struct EventObject *eventObj = &gEventObjects[linkPlayerEventObj->eventObjId]; + sprite->pos1.x = eventObj->initialCoords.x; + sprite->pos1.y = eventObj->initialCoords.y; + SetObjectSubpriorityByZCoord(eventObj->previousElevation, sprite, 1); + sprite->oam.priority = ZCoordToPriority(eventObj->previousElevation); - if (!linkPlayerMapObj->mode) - StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->range.as_byte)); + if (!linkPlayerEventObj->mode) + StartSpriteAnim(sprite, GetFaceDirectionAnimNum(eventObj->range.as_byte)); else - StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->range.as_byte)); + StartSpriteAnimIfDifferent(sprite, GetMoveDirectionAnimNum(eventObj->range.as_byte)); - sub_80979D4(sprite, 0); - if (mapObj->mapobj_bit_2) + UpdateEventObjectSpriteVisibility(sprite, 0); + if (eventObj->triggerGroundEffectsOnMove) { sprite->invisible = ((sprite->data[7] & 4) >> 2); sprite->data[7]++; |