1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-29 01:35:06 +01:00

Reset sprite quadrant placements as part of sprite reset command

This addresses some sources of desyncs in multiplayer.
This commit is contained in:
Yaroslav Tretyakov
2016-07-25 18:36:58 +02:00
committed by Michał Janiszewski
parent 63eb861cbd
commit dd4e4caeaa
5 changed files with 39 additions and 14 deletions

View File

@@ -162,6 +162,7 @@ void reset_sprite_spatial_index()
void game_command_reset_sprites(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp)
{
if (*ebx & GAME_COMMAND_FLAG_APPLY) {
reset_all_sprite_quadrant_placements();
reset_sprite_spatial_index();
}
*ebx = 0;
@@ -517,6 +518,32 @@ void sprite_move(sint16 x, sint16 y, sint16 z, rct_sprite* sprite){
sprite->unknown.z = z;
}
void sprite_move_interframe(sint16 x, sint16 y, sint16 z, rct_sprite* sprite){
sint16 new_x = x, new_y = y, start_x = x;
switch (get_current_rotation()){
case 0:
new_x = new_y - new_x;
new_y = (new_y + start_x) / 2 - z;
break;
case 1:
new_x = -new_y - new_x;
new_y = (new_y - start_x) / 2 - z;
break;
case 2:
new_x = -new_y + new_x;
new_y = (-new_y - start_x) / 2 - z;
break;
case 3:
new_x = new_y + new_x;
new_y = (-new_y + start_x) / 2 - z;
break;
}
sprite->unknown.x = x;
sprite->unknown.y = y;
sprite->unknown.z = z;
}
/**
*
* rct2: 0x0069EDB6

View File

@@ -401,6 +401,7 @@ void sprite_clear_all_unused();
void move_sprite_to_list(rct_sprite *sprite, uint8 cl);
void sprite_misc_update_all();
void sprite_move(sint16 x, sint16 y, sint16 z, rct_sprite* sprite);
void sprite_move_interframe(sint16 x, sint16 y, sint16 z, rct_sprite* sprite);
void invalidate_sprite_0(rct_sprite* sprite);
void invalidate_sprite_1(rct_sprite *sprite);
void invalidate_sprite_2(rct_sprite *sprite);