mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 03:23:15 +01:00
Move guest functions out of peep
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user