From d0420eef0ba5dda93f8206bee2e17d82867ede61 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Wed, 22 Apr 2015 21:03:44 +0100 Subject: [PATCH] Refactor to use defined pathBit entry address. --- src/interface/viewport_interaction.c | 2 +- src/peep/peep.c | 12 ++++++------ src/world/footpath.c | 11 ++++++----- src/world/scenery.h | 3 +++ 4 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/interface/viewport_interaction.c b/src/interface/viewport_interaction.c index fa32dd9055..a7ece92671 100644 --- a/src/interface/viewport_interaction.c +++ b/src/interface/viewport_interaction.c @@ -283,7 +283,7 @@ int viewport_interaction_get_item_right(int x, int y, viewport_interaction_info return info->type; case VIEWPORT_INTERACTION_ITEM_FOOTPATH_ITEM: - sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[mapElement->properties.path.additions & 0x0F]; + sceneryEntry = g_pathBitSceneryEntries[(mapElement->properties.path.additions & 0x0F) - 1]; RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 0, uint16) = 1164; if (mapElement->flags & 0x20) { RCT2_GLOBAL(RCT2_ADDRESS_MAP_TOOLTIP_ARGS + 2, uint16) = 3124; diff --git a/src/peep/peep.c b/src/peep/peep.c index 4a8231bc72..26a63d7c32 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -3107,7 +3107,7 @@ static int peep_update_walking_find_bench(rct_peep* peep){ uint8 additions = map_element->properties.path.additions & 0xF; if (!additions) return 0; - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 0x2))return 0; @@ -3184,7 +3184,7 @@ static int peep_update_walking_find_bin(rct_peep* peep){ uint8 additions = map_element->properties.path.additions & 0xF; if (!additions) return 0; - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 0x1))return 0; @@ -3261,7 +3261,7 @@ static void peep_update_walking_break_scenery(rct_peep* peep){ uint8 additions = map_element->properties.path.additions & 0xF; if (!additions) return; - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 0x4))return; @@ -3437,7 +3437,7 @@ static void peep_update_using_bin(rct_peep* peep){ return; } - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 1)){ peep_state_reset(peep); return; @@ -3828,7 +3828,7 @@ static int peep_update_patrolling_find_bin(rct_peep* peep){ if (additions == 0)return 0; - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 1)) return 0; @@ -4121,7 +4121,7 @@ static void peep_update_walking(rct_peep* peep){ if (additions){ if (!(map_element->properties.path.additions & 0x80)){ - rct_scenery_entry* sceneryEntry = RCT2_ADDRESS(0x9ADA50, rct_scenery_entry*)[additions]; + rct_scenery_entry* sceneryEntry = g_pathBitSceneryEntries[additions - 1]; if (!(sceneryEntry->path_bit.var_06 & 0x2)) ebp = 9; } diff --git a/src/world/footpath.c b/src/world/footpath.c index 8a0f7c594e..0b290c3366 100644 --- a/src/world/footpath.c +++ b/src/world/footpath.c @@ -24,6 +24,7 @@ #include "../util/util.h" #include "footpath.h" #include "map.h" +#include "scenery.h" void sub_673883(int x, int y, int z); void sub_69A48B(int x, int y, int z); @@ -201,8 +202,8 @@ static money32 footpath_element_update(int x, int y, rct_map_element *mapElement } if (RCT2_GLOBAL(0x00F3EF88, uint16) != 0) { - uint8 *unk = RCT2_ADDRESS(0x009ADA50, uint8*)[RCT2_GLOBAL(0x00F3EF88, uint16)]; - uint16 unk6 = RCT2_GLOBAL(unk + 6, uint16); + rct_scenery_entry* scenery_entry = g_pathBitSceneryEntries[RCT2_GLOBAL(0x00F3EF88, uint16) - 1]; + uint16 unk6 = scenery_entry->path_bit.var_06; if ((unk6 & 0x80) && (mapElement->properties.path.type & 4)) { RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, rct_string_id) = STR_CANT_BUILD_THIS_ON_SLOPED_FOOTPATH; @@ -224,7 +225,7 @@ static money32 footpath_element_update(int x, int y, rct_map_element *mapElement return MONEY32_UNDEFINED; } - RCT2_GLOBAL(0x00F3EFD9, money32) += RCT2_GLOBAL(unk + 10, money16); + RCT2_GLOBAL(0x00F3EFD9, money32) += scenery_entry->path_bit.price; } if (flags & (1 << 4)) @@ -259,8 +260,8 @@ static money32 footpath_element_update(int x, int y, rct_map_element *mapElement mapElement->properties.path.additions = (mapElement->properties.path.additions & 0xF0) | RCT2_GLOBAL(0x00F3EF88, uint8); mapElement->flags &= ~0x20; if (RCT2_GLOBAL(0x00F3EF88, uint16) != 0) { - uint8 *unk = RCT2_ADDRESS(0x009ADA50, uint8*)[RCT2_GLOBAL(0x00F3EF88, uint16)]; - uint16 unk6 = RCT2_GLOBAL(unk + 6, uint16); + rct_scenery_entry* scenery_entry = g_pathBitSceneryEntries[RCT2_GLOBAL(0x00F3EF88, uint16) - 1]; + uint16 unk6 = scenery_entry->path_bit.var_06; if (unk6 & 1) mapElement->properties.path.addition_status = 255; } diff --git a/src/world/scenery.h b/src/world/scenery.h index b444f80735..e94337fec8 100644 --- a/src/world/scenery.h +++ b/src/world/scenery.h @@ -141,6 +141,9 @@ enum { #define g_largeSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_LARGE_SCENERY].chunks) #define g_wallSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_WALLS].chunks) #define g_bannerSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_BANNERS].chunks) + +// Often 0x009ADA50 is used for pathBits this is 1 entry before g_pathBitSceneryEntries and is used +// because 0 represents no path bits on a path. So remember to remove 1 when using it for 0x009ADA50 #define g_pathBitSceneryEntries ((rct_scenery_entry**)object_entry_groups[OBJECT_TYPE_PATH_BITS].chunks) #define g_scenerySetEntries ((rct_scenery_set_entry**)object_entry_groups[OBJECT_TYPE_SCENERY_SETS].chunks)