From 4c3fd31002ae782e38348748bc686677f088e8ea Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Wed, 4 Apr 2018 19:25:15 +0100 Subject: [PATCH] Move guest functions out of peep --- src/openrct2/peep/Guest.cpp | 182 ++++++++++++++++++++++++++++++++++++ src/openrct2/peep/Peep.cpp | 182 ------------------------------------ src/openrct2/peep/Peep.h | 2 +- 3 files changed, 183 insertions(+), 183 deletions(-) diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index a5017acf03..6c4fa6d309 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -6615,3 +6615,185 @@ static bool peep_find_ride_to_look_at(rct_peep * peep, uint8 edge, uint8 * rideT return false; } + +/* Part of 0x0069B8CC rct2: 0x0069BC31 */ +void rct_peep::SetSpriteType(uint8 new_sprite_type) +{ + if (sprite_type == new_sprite_type) + return; + + sprite_type = new_sprite_type; + action_sprite_image_offset = 0; + no_action_frame_num = 0; + + if (action >= PEEP_ACTION_NONE_1) + action = PEEP_ACTION_NONE_2; + + peep_flags &= ~PEEP_FLAGS_SLOW_WALK; + Guard::Assert(new_sprite_type < Util::CountOf(gSpriteTypeToSlowWalkMap)); + if (gSpriteTypeToSlowWalkMap[new_sprite_type]) + { + peep_flags |= PEEP_FLAGS_SLOW_WALK; + } + + action_sprite_type = 0xFF; + UpdateCurrentActionSpriteType(); + + if (state == PEEP_STATE_SITTING) + { + action = PEEP_ACTION_NONE_1; + next_action_sprite_type = 7; + SwitchNextActionSpriteType(); + } + if (state == PEEP_STATE_WATCHING) + { + action = PEEP_ACTION_NONE_1; + next_action_sprite_type = 2; + SwitchNextActionSpriteType(); + } +} + +struct item_pref_t +{ + uint8 type; // 0 for standard, 1 for extra + uint32 item; // And this with the relevant flags + uint8 sprite_type; +}; + +// clang-format off +static item_pref_t item_order_preference[] = { + { 0, PEEP_ITEM_ICE_CREAM, PEEP_SPRITE_TYPE_ICE_CREAM }, + { 0, PEEP_ITEM_CHIPS, PEEP_SPRITE_TYPE_CHIPS }, + { 0, PEEP_ITEM_PIZZA, PEEP_SPRITE_TYPE_PIZZA }, + { 0, PEEP_ITEM_BURGER, PEEP_SPRITE_TYPE_BURGER }, + { 0, PEEP_ITEM_DRINK, PEEP_SPRITE_TYPE_DRINK }, + { 0, PEEP_ITEM_COFFEE, PEEP_SPRITE_TYPE_COFFEE }, + { 0, PEEP_ITEM_CHICKEN, PEEP_SPRITE_TYPE_CHICKEN }, + { 0, PEEP_ITEM_LEMONADE, PEEP_SPRITE_TYPE_LEMONADE }, + { 0, PEEP_ITEM_CANDYFLOSS, PEEP_SPRITE_TYPE_CANDYFLOSS }, + { 0, PEEP_ITEM_POPCORN, PEEP_SPRITE_TYPE_PIZZA }, + { 0, PEEP_ITEM_HOT_DOG, PEEP_SPRITE_TYPE_HOT_DOG }, + { 0, PEEP_ITEM_TENTACLE, PEEP_SPRITE_TYPE_TENTACLE }, + { 0, PEEP_ITEM_TOFFEE_APPLE, PEEP_SPRITE_TYPE_TOFFEE_APPLE }, + { 0, PEEP_ITEM_DOUGHNUT, PEEP_SPRITE_TYPE_DOUGHNUT }, + { 1, PEEP_ITEM_PRETZEL, PEEP_SPRITE_TYPE_PRETZEL }, + { 1, PEEP_ITEM_COOKIE, PEEP_SPRITE_TYPE_PRETZEL }, + { 1, PEEP_ITEM_CHOCOLATE, PEEP_SPRITE_TYPE_COFFEE }, + { 1, PEEP_ITEM_ICED_TEA, PEEP_SPRITE_TYPE_COFFEE }, + { 1, PEEP_ITEM_FUNNEL_CAKE, PEEP_SPRITE_TYPE_FUNNEL_CAKE }, + { 1, PEEP_ITEM_BEEF_NOODLES, PEEP_SPRITE_TYPE_NOODLES }, + { 1, PEEP_ITEM_FRIED_RICE_NOODLES, PEEP_SPRITE_TYPE_NOODLES }, + { 1, PEEP_ITEM_WONTON_SOUP, PEEP_SPRITE_TYPE_SOUP }, + { 1, PEEP_ITEM_MEATBALL_SOUP, PEEP_SPRITE_TYPE_SOUP }, + { 1, PEEP_ITEM_FRUIT_JUICE, PEEP_SPRITE_TYPE_JUICE }, + { 1, PEEP_ITEM_SOYBEAN_MILK, PEEP_SPRITE_TYPE_SU_JONGKWA }, + { 1, PEEP_ITEM_SU_JONGKWA, PEEP_SPRITE_TYPE_SU_JONGKWA }, + { 1, PEEP_ITEM_SUB_SANDWICH, PEEP_SPRITE_TYPE_SANDWICH }, + { 1, PEEP_ITEM_ROAST_SAUSAGE, PEEP_SPRITE_TYPE_SAUSAGE }, + { 0, PEEP_ITEM_BALLOON, PEEP_SPRITE_TYPE_BALLOON }, + { 0, PEEP_ITEM_HAT, PEEP_SPRITE_TYPE_HAT }, + { 1, PEEP_ITEM_SUNGLASSES, PEEP_SPRITE_TYPE_SUNGLASSES }, + { 0xFF, 0xFFFFFFFF, 0xFF} +}; +// clang-format on + +/** + * + * rct2: 0x0069B8CC + */ +void rct_peep::UpdateSpriteType() +{ + if (sprite_type == PEEP_SPRITE_TYPE_BALLOON && (scenario_rand() & 0xFFFF) <= 327) + { + bool isBalloonPopped = false; + if (x != LOCATION_NULL) + { + if ((scenario_rand() & 0xFFFF) <= 13107) + { + isBalloonPopped = true; + audio_play_sound_at_location(SOUND_BALLOON_POP, x, y, z); + } + create_balloon(x, y, z + 9, balloon_colour, isBalloonPopped); + } + item_standard_flags &= ~PEEP_ITEM_BALLOON; + window_invalidate_flags |= PEEP_INVALIDATE_PEEP_INVENTORY; + } + + if (climate_is_raining() && (item_standard_flags & PEEP_ITEM_UMBRELLA) && x != LOCATION_NULL) + { + if ((x & 0xFFE0) < 0x1FFF && (y & 0xFFE0) < 0x1FFF) + { + rct_tile_element * tileElement = map_get_first_element_at(x / 32, y / 32); + while (true) + { + if ((z / 8) < tileElement->base_height) + break; + + if (tile_element_is_last_for_tile(tileElement)) + { + SetSpriteType(PEEP_SPRITE_TYPE_UMBRELLA); + return; + } + tileElement++; + } + } + } + + for (item_pref_t * item_pref = item_order_preference; item_pref->type != 0xFF; item_pref++) + { + if (item_pref->type == 0) + { + if (item_standard_flags & item_pref->item) + { + SetSpriteType(item_pref->sprite_type); + return; + } + } + else + { + if (item_extra_flags & item_pref->item) + { + SetSpriteType(item_pref->sprite_type); + return; + } + } + } + + if (state == PEEP_STATE_WATCHING && standing_flags & (1 << 1)) + { + SetSpriteType(PEEP_SPRITE_TYPE_WATCHING); + return; + } + + if (nausea > 170) + { + SetSpriteType(PEEP_SPRITE_TYPE_VERY_NAUSEOUS); + return; + } + + if (nausea > 140) + { + SetSpriteType(PEEP_SPRITE_TYPE_NAUSEOUS); + return; + } + + if (energy <= 64 && happiness < 128) + { + SetSpriteType(PEEP_SPRITE_TYPE_HEAD_DOWN); + return; + } + + if (energy <= 80 && happiness < 128) + { + SetSpriteType(PEEP_SPRITE_TYPE_ARMS_CROSSED); + return; + } + + if (toilet > 220) + { + SetSpriteType(PEEP_SPRITE_TYPE_REQUIRE_BATHROOM); + return; + } + + SetSpriteType(PEEP_SPRITE_TYPE_NORMAL); +} diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index d59f8dd4f8..07d39d06b4 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -736,188 +736,6 @@ void peep_decrement_num_riders(rct_peep * peep) } } -/* Part of 0x0069B8CC rct2: 0x0069BC31 */ -void rct_peep::SetSpriteType(uint8 new_sprite_type) -{ - if (sprite_type == new_sprite_type) - return; - - sprite_type = new_sprite_type; - action_sprite_image_offset = 0; - no_action_frame_num = 0; - - if (action >= PEEP_ACTION_NONE_1) - action = PEEP_ACTION_NONE_2; - - peep_flags &= ~PEEP_FLAGS_SLOW_WALK; - assert(new_sprite_type < Util::CountOf(gSpriteTypeToSlowWalkMap)); - if (gSpriteTypeToSlowWalkMap[new_sprite_type]) - { - peep_flags |= PEEP_FLAGS_SLOW_WALK; - } - - action_sprite_type = 0xFF; - UpdateCurrentActionSpriteType(); - - if (state == PEEP_STATE_SITTING) - { - action = PEEP_ACTION_NONE_1; - next_action_sprite_type = 7; - SwitchNextActionSpriteType(); - } - if (state == PEEP_STATE_WATCHING) - { - action = PEEP_ACTION_NONE_1; - next_action_sprite_type = 2; - SwitchNextActionSpriteType(); - } -} - -struct item_pref_t -{ - uint8 type; // 0 for standard, 1 for extra - uint32 item; // And this with the relevant flags - uint8 sprite_type; -}; - -// clang-format off -static item_pref_t item_order_preference[] = { - { 0, PEEP_ITEM_ICE_CREAM, PEEP_SPRITE_TYPE_ICE_CREAM }, - { 0, PEEP_ITEM_CHIPS, PEEP_SPRITE_TYPE_CHIPS }, - { 0, PEEP_ITEM_PIZZA, PEEP_SPRITE_TYPE_PIZZA }, - { 0, PEEP_ITEM_BURGER, PEEP_SPRITE_TYPE_BURGER }, - { 0, PEEP_ITEM_DRINK, PEEP_SPRITE_TYPE_DRINK }, - { 0, PEEP_ITEM_COFFEE, PEEP_SPRITE_TYPE_COFFEE }, - { 0, PEEP_ITEM_CHICKEN, PEEP_SPRITE_TYPE_CHICKEN }, - { 0, PEEP_ITEM_LEMONADE, PEEP_SPRITE_TYPE_LEMONADE }, - { 0, PEEP_ITEM_CANDYFLOSS, PEEP_SPRITE_TYPE_CANDYFLOSS }, - { 0, PEEP_ITEM_POPCORN, PEEP_SPRITE_TYPE_PIZZA }, - { 0, PEEP_ITEM_HOT_DOG, PEEP_SPRITE_TYPE_HOT_DOG }, - { 0, PEEP_ITEM_TENTACLE, PEEP_SPRITE_TYPE_TENTACLE }, - { 0, PEEP_ITEM_TOFFEE_APPLE, PEEP_SPRITE_TYPE_TOFFEE_APPLE }, - { 0, PEEP_ITEM_DOUGHNUT, PEEP_SPRITE_TYPE_DOUGHNUT }, - { 1, PEEP_ITEM_PRETZEL, PEEP_SPRITE_TYPE_PRETZEL }, - { 1, PEEP_ITEM_COOKIE, PEEP_SPRITE_TYPE_PRETZEL }, - { 1, PEEP_ITEM_CHOCOLATE, PEEP_SPRITE_TYPE_COFFEE }, - { 1, PEEP_ITEM_ICED_TEA, PEEP_SPRITE_TYPE_COFFEE }, - { 1, PEEP_ITEM_FUNNEL_CAKE, PEEP_SPRITE_TYPE_FUNNEL_CAKE }, - { 1, PEEP_ITEM_BEEF_NOODLES, PEEP_SPRITE_TYPE_NOODLES }, - { 1, PEEP_ITEM_FRIED_RICE_NOODLES, PEEP_SPRITE_TYPE_NOODLES }, - { 1, PEEP_ITEM_WONTON_SOUP, PEEP_SPRITE_TYPE_SOUP }, - { 1, PEEP_ITEM_MEATBALL_SOUP, PEEP_SPRITE_TYPE_SOUP }, - { 1, PEEP_ITEM_FRUIT_JUICE, PEEP_SPRITE_TYPE_JUICE }, - { 1, PEEP_ITEM_SOYBEAN_MILK, PEEP_SPRITE_TYPE_SU_JONGKWA }, - { 1, PEEP_ITEM_SU_JONGKWA, PEEP_SPRITE_TYPE_SU_JONGKWA }, - { 1, PEEP_ITEM_SUB_SANDWICH, PEEP_SPRITE_TYPE_SANDWICH }, - { 1, PEEP_ITEM_ROAST_SAUSAGE, PEEP_SPRITE_TYPE_SAUSAGE }, - { 0, PEEP_ITEM_BALLOON, PEEP_SPRITE_TYPE_BALLOON }, - { 0, PEEP_ITEM_HAT, PEEP_SPRITE_TYPE_HAT }, - { 1, PEEP_ITEM_SUNGLASSES, PEEP_SPRITE_TYPE_SUNGLASSES }, - { 0xFF, 0xFFFFFFFF, 0xFF} -}; -// clang-format on - -/** - * - * rct2: 0x0069B8CC - */ -void rct_peep::UpdateSpriteType() -{ - if (sprite_type == PEEP_SPRITE_TYPE_BALLOON && (scenario_rand() & 0xFFFF) <= 327) - { - bool isBalloonPopped = false; - if (x != LOCATION_NULL) - { - if ((scenario_rand() & 0xFFFF) <= 13107) - { - isBalloonPopped = true; - audio_play_sound_at_location(SOUND_BALLOON_POP, x, y, z); - } - create_balloon(x, y, z + 9, balloon_colour, isBalloonPopped); - } - item_standard_flags &= ~PEEP_ITEM_BALLOON; - window_invalidate_flags |= PEEP_INVALIDATE_PEEP_INVENTORY; - } - - if (climate_is_raining() && (item_standard_flags & PEEP_ITEM_UMBRELLA) && x != LOCATION_NULL) - { - if ((x & 0xFFE0) < 0x1FFF && (y & 0xFFE0) < 0x1FFF) - { - rct_tile_element * tileElement = map_get_first_element_at(x / 32, y / 32); - while (true) - { - if ((z / 8) < tileElement->base_height) - break; - - if (tile_element_is_last_for_tile(tileElement)) - { - SetSpriteType(PEEP_SPRITE_TYPE_UMBRELLA); - return; - } - tileElement++; - } - } - } - - for (item_pref_t * item_pref = item_order_preference; item_pref->type != 0xFF; item_pref++) - { - if (item_pref->type == 0) - { - if (item_standard_flags & item_pref->item) - { - SetSpriteType(item_pref->sprite_type); - return; - } - } - else - { - if (item_extra_flags & item_pref->item) - { - SetSpriteType(item_pref->sprite_type); - return; - } - } - } - - if (state == PEEP_STATE_WATCHING && standing_flags & (1 << 1)) - { - SetSpriteType(PEEP_SPRITE_TYPE_WATCHING); - return; - } - - if (nausea > 170) - { - SetSpriteType(PEEP_SPRITE_TYPE_VERY_NAUSEOUS); - return; - } - - if (nausea > 140) - { - SetSpriteType(PEEP_SPRITE_TYPE_NAUSEOUS); - return; - } - - if (energy <= 64 && happiness < 128) - { - SetSpriteType(PEEP_SPRITE_TYPE_HEAD_DOWN); - return; - } - - if (energy <= 80 && happiness < 128) - { - SetSpriteType(PEEP_SPRITE_TYPE_ARMS_CROSSED); - return; - } - - if (toilet > 220) - { - SetSpriteType(PEEP_SPRITE_TYPE_REQUIRE_BATHROOM); - return; - } - - SetSpriteType(PEEP_SPRITE_TYPE_NORMAL); -} - /** * Call after changing a peeps state to insure that all relevant windows update. * Note also increase ride count if on/entering a ride. diff --git a/src/openrct2/peep/Peep.h b/src/openrct2/peep/Peep.h index 22c48c3bc6..eaacd83774 100644 --- a/src/openrct2/peep/Peep.h +++ b/src/openrct2/peep/Peep.h @@ -882,7 +882,7 @@ enum // rct2: 0x00982708 extern rct_peep_animation_entry g_peep_animation_entries[PEEP_SPRITE_TYPE_COUNT]; -extern const bool gSpriteTypeToSlowWalkMap[]; +extern const bool gSpriteTypeToSlowWalkMap[48]; extern uint8 gGuestChangeModifier; extern uint16 gNumGuestsInPark;