Rewrote get_peep_face_sprite. Fixed mistakes in peep update

This commit is contained in:
Duncan Frost 2014-09-09 17:33:20 +01:00
parent efc9c4915b
commit 08e37a0435
2 changed files with 84 additions and 60 deletions

View File

@ -589,73 +589,96 @@ int peep_can_be_picked_up(rct_peep* peep){
return RCT2_ADDRESS(0x982004, uint8)[peep->state] & 1; return RCT2_ADDRESS(0x982004, uint8)[peep->state] & 1;
} }
/** enum{
* Function split into large and small sprite PEEP_FACE_OFFSET_ANGRY = 0,
* rct2: 0x00698721 PEEP_FACE_OFFSET_VERY_VERY_SICK,
*/ PEEP_FACE_OFFSET_VERY_SICK,
int get_peep_face_sprite_small(rct_peep *peep) PEEP_FACE_OFFSET_SICK,
{ PEEP_FACE_OFFSET_VERY_TIRED,
int sprite; PEEP_FACE_OFFSET_TIRED,
sprite = SPR_PEEP_SMALL_FACE_ANGRY; 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; const int face_sprite_small[] = {
sprite = SPR_PEEP_SMALL_FACE_VERY_VERY_SICK; 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; const int face_sprite_large[] = {
sprite--; //VERY_SICK 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; int get_face_sprite_offset(rct_peep *peep){
sprite--; //SICK
if (peep->nausea > 140) return sprite; // ANGRY
sprite = SPR_PEEP_SMALL_FACE_VERY_TIRED; if (peep->var_F3) return PEEP_FACE_OFFSET_ANGRY;
if (peep->energy < 46) return sprite; // VERY_VERY_SICK
sprite--; //TIRED if (peep->nausea > 200) return PEEP_FACE_OFFSET_VERY_VERY_SICK;
if (peep->energy < 70) return sprite; // VERY_SICK
sprite = SPR_PEEP_SMALL_FACE_VERY_VERY_UNHAPPY; 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 //There are 7 different happiness based faces
for (int i = 37; peep->happiness >= i; i += 37) for (int i = 37; peep->happiness >= i; i += 37)
{ {
sprite++; offset++;
} }
return sprite; return offset;
} }
/** /**
* Function split into large and small sprite * Function split into large and small sprite
* rct2: 0x00698721 * rct2: 0x00698721
*/ */
int get_peep_face_sprite_large(rct_peep* peep){ int get_peep_face_sprite_small(rct_peep *peep){
int sprite; return face_sprite_small[get_face_sprite_offset(peep)];
sprite = SPR_PEEP_LARGE_FACE_ANGRY; }
if (peep->var_F3) return sprite; /**
sprite = SPR_PEEP_LARGE_FACE_VERY_VERY_SICK; * Function split into large and small sprite
* rct2: 0x00698721
if (peep->nausea > 200) return sprite; */
sprite = SPR_PEEP_LARGE_FACE_VERY_SICK; int get_peep_face_sprite_large(rct_peep *peep){
return face_sprite_large[get_face_sprite_offset(peep)];
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;
} }

View File

@ -23,6 +23,7 @@
#include "map.h" #include "map.h"
#include "ride.h" #include "ride.h"
#include "peep.h" #include "peep.h"
#include "scenario.h"
#include "string_ids.h" #include "string_ids.h"
#include "staff.h" #include "staff.h"
#include "sprite.h" #include "sprite.h"
@ -1039,7 +1040,7 @@ void window_peep_overview_update(rct_window* w){
var_496++; var_496++;
var_496 %= 24; var_496 %= 24;
w->var_494 &= 0x0000FFFF; w->var_494 &= 0x0000FFFF;
w->var_494 |= var_496; w->var_494 |= var_496 << 16;
window_invalidate_by_id( 0x497, w->number); window_invalidate_by_id( 0x497, w->number);
@ -1047,18 +1048,18 @@ void window_peep_overview_update(rct_window* w){
w->list_information_type += 2; w->list_information_type += 2;
if (w->var_494 & 0xFFFF == 0xFFFF) if ((w->var_494 & 0xFFFF) == 0xFFFF)
w->var_494&=0xFFFF0000; w->var_494 &= 0xFFFF0000;
else else
w->var_494++; w->var_494++;
if (w->var_494 & 0xFFFF >= 3840){ // Create the "I have the strangest feeling I am being watched thought"
if (w->var_494 & 0x3FF){ if ((w->var_494 & 0xFFFF) >= 3840){
//call 6e37dc if (!(w->var_494 & 0x3FF)){
if (ax <= 0x2AAA){ int rand = scenario_rand() & 0xFFFF;
if (rand <= 0x2AAA){
rct_peep* peep = GET_PEEP(w->number); rct_peep* peep = GET_PEEP(w->number);
ax = 0xFF47; RCT2_CALLPROC_X(0x699F5A, 0xFF47, 0, 0, 0, (int)peep, 0, 0);
//call 699F5A
} }
} }
} }