From 08e37a04359c1da516770835c71909ba7be447d0 Mon Sep 17 00:00:00 2001 From: Duncan Frost Date: Tue, 9 Sep 2014 17:33:20 +0100 Subject: [PATCH] Rewrote get_peep_face_sprite. Fixed mistakes in peep update --- src/peep.c | 125 +++++++++++++++++++++++++++------------------- src/window_peep.c | 19 +++---- 2 files changed, 84 insertions(+), 60 deletions(-) diff --git a/src/peep.c b/src/peep.c index e069820e6a..e2619a5e5b 100644 --- a/src/peep.c +++ b/src/peep.c @@ -589,73 +589,96 @@ int peep_can_be_picked_up(rct_peep* peep){ return RCT2_ADDRESS(0x982004, uint8)[peep->state] & 1; } -/** -* Function split into large and small sprite -* rct2: 0x00698721 -*/ -int get_peep_face_sprite_small(rct_peep *peep) -{ - int sprite; - sprite = SPR_PEEP_SMALL_FACE_ANGRY; +enum{ + PEEP_FACE_OFFSET_ANGRY = 0, + PEEP_FACE_OFFSET_VERY_VERY_SICK, + PEEP_FACE_OFFSET_VERY_SICK, + PEEP_FACE_OFFSET_SICK, + PEEP_FACE_OFFSET_VERY_TIRED, + PEEP_FACE_OFFSET_TIRED, + PEEP_FACE_OFFSET_VERY_VERY_UNHAPPY, + PEEP_FACE_OFFSET_VERY_UNHAPPY, + PEEP_FACE_OFFSET_UNHAPPY, + PEEP_FACE_OFFSET_NORMAL, + PEEP_FACE_OFFSET_HAPPY, + PEEP_FACE_OFFSET_VERY_HAPPY, + PEEP_FACE_OFFSET_VERY_VERY_HAPPY, +}; - if (peep->var_F3) return sprite; - sprite = SPR_PEEP_SMALL_FACE_VERY_VERY_SICK; +const int face_sprite_small[] = { + SPR_PEEP_SMALL_FACE_ANGRY, + SPR_PEEP_SMALL_FACE_VERY_VERY_SICK, + SPR_PEEP_SMALL_FACE_VERY_SICK, + SPR_PEEP_SMALL_FACE_SICK, + SPR_PEEP_SMALL_FACE_VERY_TIRED, + SPR_PEEP_SMALL_FACE_TIRED, + SPR_PEEP_SMALL_FACE_VERY_VERY_UNHAPPY, + SPR_PEEP_SMALL_FACE_VERY_UNHAPPY, + SPR_PEEP_SMALL_FACE_UNHAPPY, + SPR_PEEP_SMALL_FACE_NORMAL, + SPR_PEEP_SMALL_FACE_HAPPY, + SPR_PEEP_SMALL_FACE_VERY_HAPPY, + SPR_PEEP_SMALL_FACE_VERY_VERY_HAPPY, +}; - if (peep->nausea > 200) return sprite; - sprite--; //VERY_SICK +const int face_sprite_large[] = { + SPR_PEEP_LARGE_FACE_ANGRY, + SPR_PEEP_LARGE_FACE_VERY_VERY_SICK, + SPR_PEEP_LARGE_FACE_VERY_SICK, + SPR_PEEP_LARGE_FACE_SICK, + SPR_PEEP_LARGE_FACE_VERY_TIRED, + SPR_PEEP_LARGE_FACE_TIRED, + SPR_PEEP_LARGE_FACE_VERY_VERY_UNHAPPY, + SPR_PEEP_LARGE_FACE_VERY_UNHAPPY, + SPR_PEEP_LARGE_FACE_UNHAPPY, + SPR_PEEP_LARGE_FACE_NORMAL, + SPR_PEEP_LARGE_FACE_HAPPY, + SPR_PEEP_LARGE_FACE_VERY_HAPPY, + SPR_PEEP_LARGE_FACE_VERY_VERY_HAPPY, +}; - if (peep->nausea > 170) return sprite; - sprite--; //SICK +int get_face_sprite_offset(rct_peep *peep){ - if (peep->nausea > 140) return sprite; - sprite = SPR_PEEP_SMALL_FACE_VERY_TIRED; + // ANGRY + if (peep->var_F3) return PEEP_FACE_OFFSET_ANGRY; - if (peep->energy < 46) return sprite; - sprite--; //TIRED + // VERY_VERY_SICK + if (peep->nausea > 200) return PEEP_FACE_OFFSET_VERY_VERY_SICK; - if (peep->energy < 70) return sprite; - sprite = SPR_PEEP_SMALL_FACE_VERY_VERY_UNHAPPY; + // VERY_SICK + if (peep->nausea > 170) return PEEP_FACE_OFFSET_VERY_SICK; + // SICK + if (peep->nausea > 140) return PEEP_FACE_OFFSET_SICK; + + // VERY_TIRED + if (peep->energy < 46) return PEEP_FACE_OFFSET_VERY_TIRED; + + // TIRED + if (peep->energy < 70) return PEEP_FACE_OFFSET_TIRED; + + int offset = PEEP_FACE_OFFSET_VERY_VERY_UNHAPPY; //There are 7 different happiness based faces for (int i = 37; peep->happiness >= i; i += 37) { - sprite++; + offset++; } - return sprite; + return offset; } /** * Function split into large and small sprite * rct2: 0x00698721 */ -int get_peep_face_sprite_large(rct_peep* peep){ - int sprite; - sprite = SPR_PEEP_LARGE_FACE_ANGRY; - - if (peep->var_F3) return sprite; - sprite = SPR_PEEP_LARGE_FACE_VERY_VERY_SICK; - - if (peep->nausea > 200) return sprite; - sprite = SPR_PEEP_LARGE_FACE_VERY_SICK; - - if (peep->nausea > 170) return sprite; - sprite = SPR_PEEP_LARGE_FACE_SICK; - - if (peep->nausea > 140) return sprite; - sprite = SPR_PEEP_LARGE_FACE_VERY_TIRED; - - if (peep->energy < 46) return sprite; - sprite--; //TIRED - - if (peep->energy < 70) return sprite; - sprite = SPR_PEEP_LARGE_FACE_VERY_VERY_UNHAPPY; - - //There are 7 different happiness based faces - for (int i = 37; peep->happiness >= i; i += 37) - { - sprite++; - } - - return sprite; +int get_peep_face_sprite_small(rct_peep *peep){ + return face_sprite_small[get_face_sprite_offset(peep)]; +} + +/** +* Function split into large and small sprite +* rct2: 0x00698721 +*/ +int get_peep_face_sprite_large(rct_peep *peep){ + return face_sprite_large[get_face_sprite_offset(peep)]; } diff --git a/src/window_peep.c b/src/window_peep.c index aa905d97ea..3eab4b2ae0 100644 --- a/src/window_peep.c +++ b/src/window_peep.c @@ -23,6 +23,7 @@ #include "map.h" #include "ride.h" #include "peep.h" +#include "scenario.h" #include "string_ids.h" #include "staff.h" #include "sprite.h" @@ -1039,7 +1040,7 @@ void window_peep_overview_update(rct_window* w){ var_496++; var_496 %= 24; w->var_494 &= 0x0000FFFF; - w->var_494 |= var_496; + w->var_494 |= var_496 << 16; window_invalidate_by_id( 0x497, w->number); @@ -1047,18 +1048,18 @@ void window_peep_overview_update(rct_window* w){ w->list_information_type += 2; - if (w->var_494 & 0xFFFF == 0xFFFF) - w->var_494&=0xFFFF0000; + if ((w->var_494 & 0xFFFF) == 0xFFFF) + w->var_494 &= 0xFFFF0000; else w->var_494++; - if (w->var_494 & 0xFFFF >= 3840){ - if (w->var_494 & 0x3FF){ - //call 6e37dc - if (ax <= 0x2AAA){ + // Create the "I have the strangest feeling I am being watched thought" + if ((w->var_494 & 0xFFFF) >= 3840){ + if (!(w->var_494 & 0x3FF)){ + int rand = scenario_rand() & 0xFFFF; + if (rand <= 0x2AAA){ rct_peep* peep = GET_PEEP(w->number); - ax = 0xFF47; - //call 699F5A + RCT2_CALLPROC_X(0x699F5A, 0xFF47, 0, 0, 0, (int)peep, 0, 0); } } }