Merge pull request #563 from duncanspumpkin/fix_sitting

Fix peeps sitting. Renamed a function to sprite_move
This commit is contained in:
Ted John 2014-11-12 22:45:29 +00:00
commit e9c3e8f1c1
9 changed files with 70 additions and 46 deletions

View File

@ -719,7 +719,7 @@ void sub_0x0069E9A7(){
//return;
for (rct_sprite* spr = g_sprite_list; spr < (rct_sprite*)RCT2_ADDRESS_SPRITES_NEXT_INDEX; ++spr){
if (spr->unknown.sprite_identifier != 0xFF){
sub_69E9D3(spr->unknown.x, spr->unknown.y, spr->unknown.z, spr);
sprite_move(spr->unknown.x, spr->unknown.y, spr->unknown.z, spr);
}
}
}

View File

@ -169,7 +169,7 @@ int sub_6939EB(sint16* x, sint16* y, rct_peep* peep){
return 1;
}
peep->var_70 = ebx;
if (peep->var_71 != 8 || peep->var_72 != 15){
if (peep->var_71 != PEEP_ACTION_THROW_UP || peep->var_72 != 15){
invalidate_sprite((rct_sprite*)peep);
*x = peep->x;
*y = peep->y;
@ -264,12 +264,12 @@ void peep_remove(rct_peep* peep){
* Falling and its subset drowning
*/
void peep_update_falling(rct_peep* peep){
if (peep->var_71 == 11){
if (peep->var_71 == PEEP_ACTION_DROWNING){
// Check to see if we are ready to drown.
sint16 x, y;
sub_6939EB(&x, &y, peep);
//RCT2_CALLPROC_X(0x6939EB, 0, 0, 0, 0, (int)peep, 0, 0);
if (peep->var_71 == 11) return;
if (peep->var_71 == PEEP_ACTION_DROWNING) return;
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x80000)){
RCT2_GLOBAL(0x13CE952, uint16) = peep->name_string_idx;
RCT2_GLOBAL(0x13CE954, uint32) = peep->id;
@ -311,7 +311,7 @@ void peep_update_falling(rct_peep* peep){
if (height - 4 >= peep->z && height < peep->z + 20){
// Looks like we are drowning!
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3(peep->x, peep->y, height, (rct_sprite*)peep);
sprite_move(peep->x, peep->y, height, (rct_sprite*)peep);
// Drop balloon if held
if (peep->item_standard_flags & PEEP_ITEM_BALLOON){
peep->item_standard_flags &= ~PEEP_ITEM_BALLOON;
@ -325,7 +325,7 @@ void peep_update_falling(rct_peep* peep){
peep_insert_new_thought(peep, PEEP_THOUGHT_TYPE_DROWNING, -1);
peep->var_71 = 11;
peep->var_71 = PEEP_ACTION_DROWNING;
peep->var_72 = 0;
peep->var_70 = 0;
@ -351,13 +351,13 @@ void peep_update_falling(rct_peep* peep){
peep_remove(peep);
return;
}
sub_69E9D3(peep->x, peep->y, peep->z - 2, (rct_sprite*)peep);
sprite_move(peep->x, peep->y, peep->z - 2, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
return;
}
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3(peep->x, peep->y, saved_height, (rct_sprite*)peep);
sprite_move(peep->x, peep->y, saved_height, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
peep->next_x = peep->x & 0xFFE0;
@ -408,12 +408,12 @@ void peep_update_sitting(rct_peep* peep){
if (!(RCT2_GLOBAL(0xF1EE18, uint16) & 1))return;
int ebx = peep->var_37 & 0x7;
int x = peep->x & 0xFFE0 + RCT2_ADDRESS(0x981F2C, uint16)[ebx * 2];
int y = peep->y & 0xFFE0 + RCT2_ADDRESS(0x981F2E, uint16)[ebx * 2];
int x = (peep->x & 0xFFE0) + RCT2_ADDRESS(0x981F2C, uint16)[ebx * 2];
int y = (peep->y & 0xFFE0) + RCT2_ADDRESS(0x981F2E, uint16)[ebx * 2];
int z = peep->z;
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3(x, y, z, (rct_sprite*)peep);
sprite_move(x, y, z, (rct_sprite*)peep);
peep->sprite_direction = ((peep->var_37 + 2) & 3) * 8;
invalidate_sprite((rct_sprite*)peep);
@ -462,7 +462,7 @@ void peep_update_sitting(rct_peep* peep){
peep_try_get_up_from_sitting(peep);
return;
}
peep->var_71 = 4;
peep->var_71 = PEEP_ACTION_SITTING_EAT_FOOD;
peep->var_72 = 0;
peep->var_70 = 0;
RCT2_CALLPROC_X(0x693B58, 0, 0, 0, 0, (int)peep, 0, 0);
@ -480,13 +480,13 @@ void peep_update_sitting(rct_peep* peep){
return;
}
peep->var_71 = 5;
peep->var_71 = PEEP_ACTION_SITTING_LOOK_AROUND_LEFT;
if (rand & 0x80000000){
peep->var_71 = 6;
peep->var_71 = PEEP_ACTION_SITTING_LOOK_AROUND_RIGHT;
}
if (rand & 0x40000000){
peep->var_71 = 4;
peep->var_71 = PEEP_ACTION_SITTING_CHECK_WATCH;
}
peep->var_72 = 0;
peep->var_70 = 0;
@ -537,7 +537,7 @@ void peep_update_queuing(rct_peep* peep){
if (peep->sprite_type == 0){
if (peep->var_7A >= 2000 && (0xFFFF & scenario_rand()) <= 119){
// Look at watch
peep->var_71 = 1;
peep->var_71 = PEEP_ACTION_CHECK_WATCH;
peep->var_72 = 0;
peep->var_70 = 0;
RCT2_CALLPROC_X(0x693B58, 0, 0, 0, 0, (int)peep, 0, 0);
@ -575,7 +575,7 @@ void peep_update_queuing(rct_peep* peep){
case 0x2E:
case 0x2F:
// Look at watch
peep->var_71 = 1;
peep->var_71 = PEEP_ACTION_CHECK_WATCH;
peep->var_72 = 0;
peep->var_70 = 0;
RCT2_CALLPROC_X(0x693B58, 0, 0, 0, 0, (int)peep, 0, 0);
@ -623,7 +623,7 @@ static void peep_update_entering_park(rct_peep* peep){
sint16 x = 0, y = 0;
if (sub_6939EB(&x, &y, peep)){
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3(x, y, peep->z, (rct_sprite*)peep);
sprite_move(x, y, peep->z, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
return;
}
@ -1044,7 +1044,7 @@ void peep_applause()
// Clap
if ((peep->state == PEEP_STATE_WALKING || peep->state == PEEP_STATE_QUEUING) && peep->var_71 >= 254) {
peep->var_71 = 26;
peep->var_71 = PEEP_ACTION_CLAP;
peep->var_72 = 0;
peep->var_70 = 0;
RCT2_CALLPROC_X(0x00693B58, 0, 0, 0, 0, (int)peep, 0, 0);
@ -1082,7 +1082,7 @@ void get_arguments_from_action(rct_peep* peep, uint32 *argument_1, uint32* argum
switch (peep->state){
case PEEP_STATE_FALLING:
*argument_1 = peep->var_71 == 0xB ? STR_DROWNING : STR_WALKING;
*argument_1 = peep->var_71 == PEEP_ACTION_DROWNING ? STR_DROWNING : STR_WALKING;
*argument_2 = 0;
break;
case PEEP_STATE_1:

View File

@ -208,6 +208,29 @@ enum PEEP_STATE {
PEEP_STATE_INSPECTING = 23
};
enum PEEP_ACTION_EVENTS {
PEEP_ACTION_CHECK_WATCH = 1,
PEEP_ACTION_SHAKE_HEAD = 2,
PEEP_ACTION_EMPTY_POCKETS = 3,
PEEP_ACTION_SITTING_EAT_FOOD = 4,
PEEP_ACTION_SITTING_CHECK_WATCH = 4,
PEEP_ACTION_SITTING_LOOK_AROUND_LEFT = 5,
PEEP_ACTION_SITTING_LOOK_AROUND_RIGHT = 6,
PEEP_ACTION_WOW = 7,
PEEP_ACTION_THROW_UP = 8,
PEEP_ACTION_JUMP = 9,
PEEP_ACTION_STAFF_SWEEP = 10,
PEEP_ACTION_DROWNING = 11,
PEEP_ACTION_STAFF_ANSWER_CALL = 12,
PEEP_ACTION_STAFF_ANSWER_CALL_2 = 13,
PEEP_ACTION_STAFF_CHECKBOARD = 14,
PEEP_ACTION_STAFF_FIX = 15,
PEEP_ACTION_STAFF_FIX_2 = 16,
PEEP_ACTION_STAFF_FIX_GROUND = 17,
PEEP_ACTION_CLAP = 26,
};
enum PEEP_FLAGS {
PEEP_FLAGS_LEAVING_PARK = (1 << 0),
PEEP_FLAGS_SLOW_WALK = (1 << 1),

View File

@ -134,7 +134,7 @@ void game_command_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx,
newPeep->var_14 = 8;
newPeep->sprite_direction = 0;
sub_69E9D3(_ax, *ecx, _dx, (rct_sprite*)newPeep);
sprite_move(_ax, *ecx, _dx, (rct_sprite*)newPeep);
newPeep->state = PEEP_STATE_PICKED;
if (newPeep->x != -32768) {
@ -202,8 +202,8 @@ void game_command_hire_new_staff_member(int* eax, int* ebx, int* ecx, int* edx,
newPeep->var_09 = *((uint8*)(_edx + 1));
newPeep->var_15 = *((uint8*)(_edx + 2));
sub_69E9D3( newPeep->x, newPeep->y, newPeep->z, (rct_sprite*)newPeep);
RCT2_CALLPROC_X(0x006EC473, *eax, 0, 0, 0, (int)newPeep, 0, 0);
sprite_move( newPeep->x, newPeep->y, newPeep->z, (rct_sprite*)newPeep);
invalidate_sprite((rct_sprite*)newPeep);
newPeep->var_AD = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONTH_YEAR, uint8);
newPeep->var_CC = 0xFFFFFFFF;

View File

@ -549,7 +549,7 @@ static void ride_remove_cable_lift(rct_ride *ride)
spriteIndex = ride->cable_lift;
do {
vehicle = &(g_sprite_list[spriteIndex].vehicle);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)vehicle, 0, 0);
invalidate_sprite((rct_sprite*)vehicle);
RCT2_CALLPROC_X(0x0069EDB6, 0, 0, 0, 0, (int)vehicle, 0, 0);
spriteIndex = vehicle->next_vehicle_on_train;
} while (spriteIndex != SPRITE_INDEX_NULL);
@ -574,7 +574,7 @@ static void ride_remove_vehicles(rct_ride *ride)
spriteIndex = ride->vehicles[i];
while (spriteIndex != SPRITE_INDEX_NULL) {
vehicle = &(g_sprite_list[spriteIndex].vehicle);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)vehicle, 0, 0);
invalidate_sprite((rct_sprite*)vehicle);
RCT2_CALLPROC_X(0x0069EDB6, 0, 0, 0, 0, (int)vehicle, 0, 0);
spriteIndex = vehicle->next_vehicle_on_train;
}
@ -671,7 +671,7 @@ static void ride_remove_peeps(int rideIndex)
if (peep->state == PEEP_STATE_QUEUING_FRONT && peep->var_2C == 0)
RCT2_CALLPROC_X(0x006966A9, 0, 0, 0, 0, (int)peep, 0, 0);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
invalidate_sprite((rct_sprite*)peep);
if (exitDirection == 255) {
x = peep->next_x + 16;
@ -680,13 +680,13 @@ static void ride_remove_peeps(int rideIndex)
if ((peep->next_z >> 8) & 4)
z += 8;
z++;
RCT2_CALLPROC_X(0x0069E9D3, exitX, 0, exitY, exitZ, (int)peep, 0, 0);
sprite_move(exitX, exitY, exitZ, (rct_sprite*)peep);
} else {
RCT2_CALLPROC_X(0x0069E9D3, exitX, 0, exitY, exitZ, (int)peep, 0, 0);
sprite_move(exitX, exitY, exitZ, (rct_sprite*)peep);
peep->sprite_direction = exitDirection;
}
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
invalidate_sprite((rct_sprite*)peep);
peep->state = PEEP_STATE_FALLING;
RCT2_CALLPROC_X(0x00693BE5, 0, 0, 0, 0, (int)peep, 0, 0);

View File

@ -622,9 +622,9 @@ void window_guest_overview_mouse_up(){
w->var_48C = peep->x;
RCT2_CALLPROC_X(0x0069A512, 0, 0, 0, 0, (int)peep, 0, 0);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3(0x8000, peep->y, peep->z, (rct_sprite*)peep);
sprite_move(0x8000, peep->y, peep->z, (rct_sprite*)peep);
peep_decrement_num_riders(peep);
peep->state = PEEP_STATE_PICKED;
peep->var_2C = 0;
@ -1224,8 +1224,8 @@ void window_guest_overview_tool_down(){
}
rct_peep* peep = GET_PEEP(w->number);
sub_69E9D3(dest_x, dest_y, dest_z, (rct_sprite*)peep);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
sprite_move(dest_x, dest_y, dest_z, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
peep_decrement_num_riders(peep);
peep->state = 0;
peep_window_state_update(peep);
@ -1255,8 +1255,8 @@ void window_guest_overview_tool_abort(){
rct_peep* peep = GET_PEEP(w->number);
if (peep->state != PEEP_STATE_PICKED) return;
sub_69E9D3( w->var_48C, peep->y, peep->z + 8, (rct_sprite*)peep);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
sprite_move( w->var_48C, peep->y, peep->z + 8, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
if (peep->x != 0x8000){
peep_decrement_num_riders(peep);

View File

@ -458,9 +458,9 @@ void window_staff_overview_mouseup()
w->var_48C = peep->x;
RCT2_CALLPROC_X(0x0069A512, 0, 0, 0, 0, (int)peep, 0, 0);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
invalidate_sprite((rct_sprite*)peep);
sub_69E9D3( 0x8000, peep->y, peep->z, (rct_sprite*)peep);
sprite_move( 0x8000, peep->y, peep->z, (rct_sprite*)peep);
peep_decrement_num_riders(peep);
peep->state = PEEP_STATE_PICKED;
peep_window_state_update(peep);
@ -1149,8 +1149,8 @@ void window_staff_overview_tool_down(){
}
rct_peep* peep = GET_PEEP(w->number);
sub_69E9D3(dest_x, dest_y, dest_z, (rct_sprite*)peep);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
sprite_move(dest_x, dest_y, dest_z, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
peep_decrement_num_riders(peep);
peep->state = PEEP_STATE_FALLING;
peep_window_state_update(peep);
@ -1185,8 +1185,8 @@ void window_staff_overview_tool_abort(){
rct_peep* peep = GET_PEEP(w->number);
if (peep->state != PEEP_STATE_PICKED) return;
RCT2_CALLPROC_X(0x0069E9D3, w->var_48C, 0, peep->y, peep->z + 8, (int)peep, 0, 0);
RCT2_CALLPROC_X(0x006EC473, 0, 0, 0, 0, (int)peep, 0, 0);
sprite_move(w->var_48C, peep->y, peep->z + 8, (rct_sprite*)peep);
invalidate_sprite((rct_sprite*)peep);
if (peep->x != 0x8000){
peep_decrement_num_riders(peep);

View File

@ -182,7 +182,7 @@ rct_sprite *create_sprite(uint8 bl)
sprite->z = 0;
sprite->name_string_idx = 0;
sprite->var_14 = 0x10;
sprite->pad_09 = 0x14;
sprite->var_09 = 0x14;
sprite->var_15 = 0x8;
sprite->pad_0C[0] = 0x0;
sprite->sprite_left = SPRITE_LOCATION_NULL;
@ -256,11 +256,12 @@ void texteffect_update_all()
/**
* rct2: 0x0069E9D3
* Moves a sprite to a new location.
* ax: x
* cx: y
* dx: z
*/
void sub_69E9D3(int x, int y, int z, rct_sprite* sprite){
void sprite_move(int x, int y, int z, rct_sprite* sprite){
int new_position = x;
if ((uint16)x == 0x8000)new_position = 0x10000;
else{
@ -318,7 +319,7 @@ void sub_69E9D3(int x, int y, int z, rct_sprite* sprite){
sprite->unknown.sprite_left = new_x - sprite->unknown.var_14;
sprite->unknown.sprite_right = new_x + sprite->unknown.var_14;
sprite->unknown.sprite_top = new_y - sprite->unknown.pad_09;
sprite->unknown.sprite_top = new_y - sprite->unknown.var_09;
sprite->unknown.sprite_bottom = new_y + sprite->unknown.var_15;
sprite->unknown.x = x;
sprite->unknown.y = y;

View File

@ -51,7 +51,7 @@ typedef struct {
uint16 next; // 0x04
uint16 previous; // 0x06
uint8 linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
uint8 pad_09;
uint8 var_09;
uint16 sprite_index; // 0x0A
uint8 pad_0C[2];
sint16 x; // 0x0E
@ -102,7 +102,7 @@ void reset_sprite_list();
void reset_0x69EBE4();
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
void texteffect_update_all();
void sub_69E9D3(int x, int y, int z, rct_sprite* sprite);
void sprite_move(int x, int y, int z, rct_sprite* sprite);
void balloon_pop(rct_sprite *sprite);
void invalidate_sprite(rct_sprite* sprite);