1
0
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:
duncanspumpkin
2018-04-04 19:25:15 +01:00
parent 82884396f4
commit 4c3fd31002
3 changed files with 183 additions and 183 deletions

View File

@@ -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);
}

View File

@@ -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.

View File

@@ -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;