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:
committed by
Michał Janiszewski
parent
63eb861cbd
commit
dd4e4caeaa
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user