mirror of https://github.com/OpenRCT2/OpenRCT2.git
parent
07989e325f
commit
b9a4ef86df
|
@ -19,6 +19,53 @@
|
||||||
#include "../../interface/viewport.h"
|
#include "../../interface/viewport.h"
|
||||||
#include "../paint.h"
|
#include "../paint.h"
|
||||||
|
|
||||||
|
enum {
|
||||||
|
SPR_LITTER_SICK = 23101,
|
||||||
|
|
||||||
|
SPR_LITTER_SICK_ALT = 23103,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_CAN = 23105,
|
||||||
|
|
||||||
|
SPR_LITTER_RUBBISH = 23107,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_BURGER_BOX = 23109,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_CUP = 23111,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_BOX = 23113,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_BOTTLE = 23115,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_BOWL_RED = 23117,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_DRINK_CART = 23121,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_JUICE_CUP = 23125,
|
||||||
|
|
||||||
|
SPR_LITTER_EMPTY_BOWL_BLUE = 23129,
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct litter_sprite {
|
||||||
|
uint16 base_id;
|
||||||
|
uint8 direction_mask;
|
||||||
|
} litter_sprite;
|
||||||
|
|
||||||
|
/** rct2: 0x0097EF6C */
|
||||||
|
static const litter_sprite litter_sprites[] = {
|
||||||
|
{ SPR_LITTER_SICK, 0x1 },
|
||||||
|
{ SPR_LITTER_SICK_ALT, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_CAN, 0x1 },
|
||||||
|
{ SPR_LITTER_RUBBISH, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_BURGER_BOX, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_CUP, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_BOX, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_BOTTLE, 0x1 },
|
||||||
|
{ SPR_LITTER_EMPTY_BOWL_RED, 0x3 },
|
||||||
|
{ SPR_LITTER_EMPTY_DRINK_CART, 0x3 },
|
||||||
|
{ SPR_LITTER_EMPTY_JUICE_CUP, 0x3 },
|
||||||
|
{ SPR_LITTER_EMPTY_BOWL_BLUE, 0x3 },
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Litter Paint Setup
|
* Litter Paint Setup
|
||||||
* rct2: 0x006736FC
|
* rct2: 0x006736FC
|
||||||
|
@ -34,9 +81,9 @@ void litter_paint(rct_litter *litter, int imageDirection)
|
||||||
imageDirection >>= 3;
|
imageDirection >>= 3;
|
||||||
// Some litter types have only 1 direction so remove
|
// Some litter types have only 1 direction so remove
|
||||||
// anything that isn't required.
|
// anything that isn't required.
|
||||||
imageDirection &= RCT2_ADDRESS(0x97EF6C, uint32)[litter->type * 2 + 1];
|
imageDirection &= litter_sprites[litter->type].direction_mask;
|
||||||
|
|
||||||
uint32 image_id = imageDirection + RCT2_ADDRESS(0x97EF6C, uint32)[litter->type * 2];
|
uint32 image_id = imageDirection + litter_sprites[litter->type].base_id;
|
||||||
|
|
||||||
sub_98197C(image_id, 0, 0, 4, 4, -1, litter->z, -4, -4, litter->z + 2, get_current_rotation());
|
sub_98197C(image_id, 0, 0, 4, 4, -1, litter->z, -4, -4, litter->z + 2, get_current_rotation());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1586,7 +1586,7 @@ static int peep_update_action(sint16* x, sint16* y, sint16* xy_distance, rct_pee
|
||||||
peep->window_invalidate_flags |= PEEP_INVALIDATE_PEEP_2;
|
peep->window_invalidate_flags |= PEEP_INVALIDATE_PEEP_2;
|
||||||
|
|
||||||
// Create sick at location
|
// Create sick at location
|
||||||
litter_create(peep->x, peep->y, peep->z, peep->sprite_direction, peep->sprite_index & 1);
|
litter_create(peep->x, peep->y, peep->z, peep->sprite_direction, (peep->sprite_index & 1) ? LITTER_TYPE_SICK_ALT: LITTER_TYPE_SICK);
|
||||||
|
|
||||||
int sound_id = SOUND_COUGH_1 + (scenario_rand() & 3);
|
int sound_id = SOUND_COUGH_1 + (scenario_rand() & 3);
|
||||||
audio_play_sound_at_location(sound_id, peep->x, peep->y, peep->z);
|
audio_play_sound_at_location(sound_id, peep->x, peep->y, peep->z);
|
||||||
|
@ -5454,6 +5454,64 @@ static void peep_update_buying(rct_peep* peep)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** rct2: 0x0097EFCC */
|
||||||
|
static const uint8 item_standard_litter[32] = {
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BALLOON
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TOY
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_MAP
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_UMBRELLA
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_DRINK
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BURGER
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FRIES
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ICE_CREAM
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_COTTON_CANDY
|
||||||
|
LITTER_TYPE_EMPTY_CAN, // PEEP_ITEM_EMPTY_CAN
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_RUBBISH
|
||||||
|
LITTER_TYPE_EMPTY_BURGER_BOX, // PEEP_ITEM_EMPTY_BURGER_BOX
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PIZZA
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_VOUCHER
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_POPCORN
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_HOT_DOG
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TENTACLE
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_HAT
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_CANDY_APPLE
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TSHIRT
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_DONUT
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_COFFEE
|
||||||
|
LITTER_TYPE_EMPTY_CUP, // PEEP_ITEM_EMPTY_CUP
|
||||||
|
LITTER_TYPE_EMPTY_BOX, // PEEP_ITEM_CHICKEN
|
||||||
|
LITTER_TYPE_EMPTY_BOTTLE, // PEEP_ITEM_LEMONADE
|
||||||
|
LITTER_TYPE_EMPTY_BOX, // PEEP_ITEM_EMPTY_BOX
|
||||||
|
LITTER_TYPE_EMPTY_BOTTLE, // PEEP_ITEM_EMPTY_BOTTLE
|
||||||
|
};
|
||||||
|
|
||||||
|
/** rct2: 0x0097EFE8 */
|
||||||
|
static const uint8 item_extra_litter[32] = {
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO2
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO3
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO4
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PRETZEL
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_CHOCOLATE
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ICED_TEA
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FUNNEL_CAKE
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SUNGLASSES
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BEEF_NOODLES
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FRIED_RICE_NOODLES
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_WONTON_SOUP
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_MEATBALL_SOUP
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FRUIT_JUICE
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SOYBEAN_MILK
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SU_JONGKWA
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SUB_SANDWICH
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_COOKIE
|
||||||
|
LITTER_TYPE_EMPTY_BOWL_RED, // PEEP_ITEM_EMPTY_BOWL_RED
|
||||||
|
LITTER_TYPE_EMPTY_DRINK_CARTON, // PEEP_ITEM_EMPTY_DRINK_CARTON
|
||||||
|
LITTER_TYPE_EMPTY_JUICE_CUP, // PEEP_ITEM_EMPTY_JUICE_CUP
|
||||||
|
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ROAST_SAUSAGE
|
||||||
|
LITTER_TYPE_EMPTY_BOWL_BLUE, // PEEP_ITEM_EMPTY_BOWL_BLUE
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* rct2: 0x00691089
|
* rct2: 0x00691089
|
||||||
|
@ -5531,7 +5589,7 @@ static void peep_update_using_bin(rct_peep* peep){
|
||||||
peep_update_sprite_type(peep);
|
peep_update_sprite_type(peep);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
uint8 bp = RCT2_ADDRESS(0x97EFCC, uint8)[cur_container];
|
uint8 bp = item_standard_litter[cur_container];
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
x = peep->x + (scenario_rand() & 7) - 3;
|
x = peep->x + (scenario_rand() & 7) - 3;
|
||||||
|
@ -5562,7 +5620,7 @@ static void peep_update_using_bin(rct_peep* peep){
|
||||||
peep_update_sprite_type(peep);
|
peep_update_sprite_type(peep);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
uint8 bp = RCT2_ADDRESS(0x97EFE8, uint8)[cur_container];
|
uint8 bp = item_extra_litter[cur_container];
|
||||||
|
|
||||||
int x, y;
|
int x, y;
|
||||||
x = peep->x + (scenario_rand() & 7) - 3;
|
x = peep->x + (scenario_rand() & 7) - 3;
|
||||||
|
@ -6137,7 +6195,13 @@ static void peep_update_walking(rct_peep* peep){
|
||||||
if (peep->peep_flags & PEEP_FLAGS_LITTER){
|
if (peep->peep_flags & PEEP_FLAGS_LITTER){
|
||||||
if (!(peep->next_var_29 & 0x18)){
|
if (!(peep->next_var_29 & 0x18)){
|
||||||
if ((0xFFFF & scenario_rand()) <= 4096){
|
if ((0xFFFF & scenario_rand()) <= 4096){
|
||||||
int ebp = (scenario_rand() & 0x3) + 2;
|
static const uint8 litter_types[] = {
|
||||||
|
LITTER_TYPE_EMPTY_CAN,
|
||||||
|
LITTER_TYPE_RUBBISH,
|
||||||
|
LITTER_TYPE_EMPTY_BURGER_BOX,
|
||||||
|
LITTER_TYPE_EMPTY_CUP,
|
||||||
|
};
|
||||||
|
int ebp = litter_types[scenario_rand() & 0x3];
|
||||||
int x = peep->x + (scenario_rand() & 0x7) - 3;
|
int x = peep->x + (scenario_rand() & 0x7) - 3;
|
||||||
int y = peep->y + (scenario_rand() & 0x7) - 3;
|
int y = peep->y + (scenario_rand() & 0x7) - 3;
|
||||||
int direction = (scenario_rand() & 0x3);
|
int direction = (scenario_rand() & 0x3);
|
||||||
|
@ -6160,7 +6224,7 @@ static void peep_update_walking(rct_peep* peep){
|
||||||
|
|
||||||
if (pos_stnd != 32){
|
if (pos_stnd != 32){
|
||||||
peep->item_standard_flags &= ~(1u << pos_stnd);
|
peep->item_standard_flags &= ~(1u << pos_stnd);
|
||||||
bp = RCT2_ADDRESS(0x97EFCC, uint8)[pos_stnd];
|
bp = item_standard_litter[pos_stnd];
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
uint8 pos_extr = 0;
|
uint8 pos_extr = 0;
|
||||||
|
@ -6168,7 +6232,7 @@ static void peep_update_walking(rct_peep* peep){
|
||||||
if (container & (1u << pos_extr))
|
if (container & (1u << pos_extr))
|
||||||
break;
|
break;
|
||||||
peep->item_extra_flags &= ~(1u << pos_extr);
|
peep->item_extra_flags &= ~(1u << pos_extr);
|
||||||
bp = RCT2_ADDRESS(0x97EFE8, uint8)[pos_extr];
|
bp = item_extra_litter[pos_extr];
|
||||||
}
|
}
|
||||||
|
|
||||||
peep->window_invalidate_flags |= PEEP_INVALIDATE_PEEP_INVENTORY;
|
peep->window_invalidate_flags |= PEEP_INVALIDATE_PEEP_INVENTORY;
|
||||||
|
@ -7931,7 +7995,7 @@ static int peep_footpath_move_forward(rct_peep* peep, sint16 x, sint16 y, rct_ma
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
litter_count++;
|
litter_count++;
|
||||||
if (litter->type > 1)
|
if (litter->type != LITTER_TYPE_SICK && litter->type != LITTER_TYPE_SICK_ALT)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
litter_count--;
|
litter_count--;
|
||||||
|
|
|
@ -384,6 +384,21 @@ enum {
|
||||||
SPRITE_FLAGS_PEEP_FLASHING = 1 << 9, // Peep belongs to highlighted group (flashes red on map)
|
SPRITE_FLAGS_PEEP_FLASHING = 1 << 9, // Peep belongs to highlighted group (flashes red on map)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
LITTER_TYPE_SICK,
|
||||||
|
LITTER_TYPE_SICK_ALT,
|
||||||
|
LITTER_TYPE_EMPTY_CAN,
|
||||||
|
LITTER_TYPE_RUBBISH,
|
||||||
|
LITTER_TYPE_EMPTY_BURGER_BOX,
|
||||||
|
LITTER_TYPE_EMPTY_CUP,
|
||||||
|
LITTER_TYPE_EMPTY_BOX,
|
||||||
|
LITTER_TYPE_EMPTY_BOTTLE,
|
||||||
|
LITTER_TYPE_EMPTY_BOWL_RED,
|
||||||
|
LITTER_TYPE_EMPTY_DRINK_CARTON,
|
||||||
|
LITTER_TYPE_EMPTY_JUICE_CUP,
|
||||||
|
LITTER_TYPE_EMPTY_BOWL_BLUE,
|
||||||
|
};
|
||||||
|
|
||||||
rct_sprite *get_sprite(size_t sprite_idx);
|
rct_sprite *get_sprite(size_t sprite_idx);
|
||||||
|
|
||||||
// rct2: 0x00982708
|
// rct2: 0x00982708
|
||||||
|
|
Loading…
Reference in New Issue