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;
}
/**
* 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)];
}

View File

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