mirror of https://github.com/OpenRCT2/OpenRCT2.git
Rewrote get_peep_face_sprite. Fixed mistakes in peep update
This commit is contained in:
parent
efc9c4915b
commit
08e37a0435
125
src/peep.c
125
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)];
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue