diff --git a/src/news_item.c b/src/news_item.c index 88e4e90a09..7d779a48c4 100644 --- a/src/news_item.c +++ b/src/news_item.c @@ -164,10 +164,15 @@ static int news_item_get_new_history_slot() return 60; } +/** + * + * rct2: 0x0066BA74 + */ void news_item_get_subject_location(int type, int subject, int *x, int *y, int *z) { + int i; rct_ride *ride; - rct_sprite *sprite; + rct_sprite *sprite, *sprite_2; switch (type) { case NEWS_ITEM_RIDE: @@ -189,6 +194,30 @@ void news_item_get_subject_location(int type, int subject, int *x, int *y, int * } break; case NEWS_ITEM_PEEP_1: + sprite = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[subject]); + *x = sprite->unknown.x; + *y = sprite->unknown.y; + *z = sprite->unknown.z; + if (*x != 0x8000) + break; + + if (sprite->peep.state != 3 && sprite->peep.state != 7) { + *x = 0x8000; + break; + } + + ride = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[sprite->peep.current_ride]); + if (ride->var_1D0 & 1) { + *x = 0x8000; + break; + } + + sprite_2 = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[ride->var_086[sprite->peep.var_6A]]); + for (i = 0; i < sprite->peep.var_6B; i++) + sprite_2 = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[*((uint16*)&sprite_2->pad_00[0x3E])]); + *x = sprite_2->unknown.x; + *y = sprite_2->unknown.y; + *z = sprite_2->unknown.z; break; case NEWS_ITEM_PEEP_2: sprite = &(RCT2_ADDRESS(RCT2_ADDRESS_SPRITE_LIST, rct_sprite)[subject]); diff --git a/src/peep.h b/src/peep.h index 5027d5ece6..4ee4b34376 100644 --- a/src/peep.h +++ b/src/peep.h @@ -70,7 +70,11 @@ typedef struct { uint8 var_31; uint8 pad_32[0x08]; uint8 happiness; // 0x3A - uint8 pad_3B[0x61]; + uint8 pad_03B[0x2D]; + uint8 current_ride; // 0x68 + uint8 var_6A; + uint8 var_6B; + uint8 pad_6C[0x30]; uint32 id; // 0x9C uint8 pad_A0[0x10]; rct_peep_thought thoughts[PEEP_MAX_THOUGHTS]; // 0xB0 diff --git a/src/ride.h b/src/ride.h index 5ba91b1dd2..ab16329574 100644 --- a/src/ride.h +++ b/src/ride.h @@ -31,7 +31,9 @@ typedef struct { uint8 type; // 0x000 uint8 pad_001[0x4F]; uint16 var_050; // 0x050 - uint8 pad_052[0x9E]; + uint8 pad_052[0x34]; + uint16 var_086[1]; + uint8 pad_088[0x68]; sint16 excitement; // 0x0F0 sint16 intensity; // 0x0F2 sint16 nausea; // 0x0F4 @@ -53,7 +55,9 @@ typedef struct { uint16 reliability; // 0x146 uint8 pad_148[0x51]; uint8 var_199; - uint8 pad_19A[0xC6]; + uint8 pad_19A[0x36]; + uint32 var_1D0; + uint8 pad_1D4[0x8C]; } rct_ride; /**