mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge pull request #7920 from ZehMatt/sprite-structs
Simplify sprite structs
This commit is contained in:
commit
cf6f8a356f
|
@ -71,7 +71,7 @@ int32_t viewport_interaction_get_item_left(int32_t x, int32_t y, viewport_intera
|
|||
switch (info->type)
|
||||
{
|
||||
case VIEWPORT_INTERACTION_ITEM_SPRITE:
|
||||
switch (sprite->unknown.sprite_identifier)
|
||||
switch (sprite->generic.sprite_identifier)
|
||||
{
|
||||
case SPRITE_IDENTIFIER_VEHICLE:
|
||||
vehicle = &(sprite->vehicle);
|
||||
|
@ -135,7 +135,7 @@ int32_t viewport_interaction_left_click(int32_t x, int32_t y)
|
|||
switch (viewport_interaction_get_item_left(x, y, &info))
|
||||
{
|
||||
case VIEWPORT_INTERACTION_ITEM_SPRITE:
|
||||
switch (info.sprite->unknown.sprite_identifier)
|
||||
switch (info.sprite->generic.sprite_identifier)
|
||||
{
|
||||
case SPRITE_IDENTIFIER_VEHICLE:
|
||||
{
|
||||
|
@ -154,7 +154,7 @@ int32_t viewport_interaction_left_click(int32_t x, int32_t y)
|
|||
case SPRITE_IDENTIFIER_MISC:
|
||||
if (game_is_not_paused())
|
||||
{
|
||||
switch (info.sprite->unknown.misc_identifier)
|
||||
switch (info.sprite->generic.type)
|
||||
{
|
||||
case SPRITE_MISC_BALLOON:
|
||||
game_do_command(
|
||||
|
@ -420,7 +420,7 @@ int32_t viewport_interaction_right_click(int32_t x, int32_t y)
|
|||
return 0;
|
||||
|
||||
case VIEWPORT_INTERACTION_ITEM_SPRITE:
|
||||
if (info.sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
if (info.sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
ride_construct(info.sprite->vehicle.ride);
|
||||
break;
|
||||
case VIEWPORT_INTERACTION_ITEM_RIDE:
|
||||
|
|
|
@ -616,8 +616,8 @@ static void window_title_command_editor_tool_down(rct_window* w, rct_widgetindex
|
|||
|
||||
if (info.type == VIEWPORT_INTERACTION_ITEM_SPRITE)
|
||||
{
|
||||
uint16_t spriteIndex = info.sprite->unknown.sprite_index;
|
||||
uint16_t spriteIdentifier = info.sprite->unknown.sprite_identifier;
|
||||
uint16_t spriteIndex = info.sprite->generic.sprite_index;
|
||||
uint16_t spriteIdentifier = info.sprite->generic.sprite_identifier;
|
||||
bool validSprite = false;
|
||||
if (spriteIdentifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
|
|
|
@ -294,7 +294,7 @@ namespace Editor
|
|||
for (int32_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
rct_sprite* sprite = get_sprite(i);
|
||||
user_string_free(sprite->unknown.name_string_idx);
|
||||
user_string_free(sprite->generic.name_string_idx);
|
||||
}
|
||||
|
||||
reset_sprite_list();
|
||||
|
|
|
@ -1160,9 +1160,9 @@ void reset_all_sprite_quadrant_placements()
|
|||
for (size_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
rct_sprite* spr = get_sprite(i);
|
||||
if (spr->unknown.sprite_identifier != SPRITE_IDENTIFIER_NULL)
|
||||
if (spr->generic.sprite_identifier != SPRITE_IDENTIFIER_NULL)
|
||||
{
|
||||
sprite_move(spr->unknown.x, spr->unknown.y, spr->unknown.z, spr);
|
||||
sprite_move(spr->generic.x, spr->generic.y, spr->generic.z, spr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -186,9 +186,9 @@ void viewport_create(
|
|||
{
|
||||
w->viewport_target_sprite = sprite;
|
||||
rct_sprite* centre_sprite = get_sprite(sprite);
|
||||
centre_x = centre_sprite->unknown.x;
|
||||
centre_y = centre_sprite->unknown.y;
|
||||
centre_z = centre_sprite->unknown.z;
|
||||
centre_x = centre_sprite->generic.x;
|
||||
centre_y = centre_sprite->generic.y;
|
||||
centre_z = centre_sprite->generic.z;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -638,13 +638,13 @@ void viewport_update_sprite_follow(rct_window* window)
|
|||
{
|
||||
rct_sprite* sprite = get_sprite(window->viewport_target_sprite);
|
||||
|
||||
int32_t height = (tile_element_height(0xFFFF & sprite->unknown.x, 0xFFFF & sprite->unknown.y) & 0xFFFF) - 16;
|
||||
int32_t underground = sprite->unknown.z < height;
|
||||
int32_t height = (tile_element_height(0xFFFF & sprite->generic.x, 0xFFFF & sprite->generic.y) & 0xFFFF) - 16;
|
||||
int32_t underground = sprite->generic.z < height;
|
||||
|
||||
viewport_set_underground_flag(underground, window, window->viewport);
|
||||
|
||||
int32_t centre_x, centre_y;
|
||||
centre_2d_coordinates(sprite->unknown.x, sprite->unknown.y, sprite->unknown.z, ¢re_x, ¢re_y, window->viewport);
|
||||
centre_2d_coordinates(sprite->generic.x, sprite->generic.y, sprite->generic.z, ¢re_x, ¢re_y, window->viewport);
|
||||
|
||||
window->saved_view_x = centre_x;
|
||||
window->saved_view_y = centre_y;
|
||||
|
@ -660,7 +660,7 @@ void viewport_update_smart_sprite_follow(rct_window* window)
|
|||
window->viewport_smart_follow_sprite = SPRITE_INDEX_NULL;
|
||||
window->viewport_target_sprite = SPRITE_INDEX_NULL;
|
||||
}
|
||||
else if (sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
else if (sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
rct_peep* peep = GET_PEEP(window->viewport_smart_follow_sprite);
|
||||
|
||||
|
@ -669,13 +669,13 @@ void viewport_update_smart_sprite_follow(rct_window* window)
|
|||
else if (peep->type == PEEP_TYPE_STAFF)
|
||||
viewport_update_smart_staff_follow(window, peep);
|
||||
}
|
||||
else if (sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
else if (sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
{
|
||||
viewport_update_smart_vehicle_follow(window);
|
||||
}
|
||||
else if (
|
||||
sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_MISC
|
||||
|| sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_LITTER)
|
||||
sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_MISC
|
||||
|| sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_LITTER)
|
||||
{
|
||||
window->viewport_focus_sprite.sprite_id = window->viewport_smart_follow_sprite;
|
||||
window->viewport_target_sprite = window->viewport_smart_follow_sprite;
|
||||
|
|
|
@ -822,9 +822,9 @@ void window_scroll_to_viewport(rct_window* w)
|
|||
if (w->viewport_focus_sprite.type & VIEWPORT_FOCUS_TYPE_SPRITE)
|
||||
{
|
||||
rct_sprite* sprite = get_sprite(w->viewport_focus_sprite.sprite_id);
|
||||
x = sprite->unknown.x;
|
||||
y = sprite->unknown.y;
|
||||
z = sprite->unknown.z;
|
||||
x = sprite->generic.x;
|
||||
y = sprite->generic.y;
|
||||
z = sprite->generic.z;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -32,12 +32,12 @@ void misc_paint(paint_session* session, const rct_sprite* misc, int32_t imageDir
|
|||
{
|
||||
rct_drawpixelinfo* dpi = session->DPI;
|
||||
|
||||
switch (misc->steam_particle.misc_identifier)
|
||||
switch (misc->steam_particle.type)
|
||||
{
|
||||
case SPRITE_MISC_STEAM_PARTICLE: // 0
|
||||
{
|
||||
uint32_t imageId = 22637 + (misc->steam_particle.frame / 256);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->unknown.z);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->generic.z);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -68,14 +68,14 @@ void misc_paint(paint_session* session, const rct_sprite* misc, int32_t imageDir
|
|||
uint32_t imageId = vehicle_particle_base_sprites[particle.crashed_sprite_base] + particle.frame / 256;
|
||||
imageId = imageId | (particle.colour[0] << 19) | (particle.colour[1] << 24) | IMAGE_TYPE_REMAP
|
||||
| IMAGE_TYPE_REMAP_2_PLUS;
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->unknown.z);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->generic.z);
|
||||
break;
|
||||
}
|
||||
|
||||
case SPRITE_MISC_EXPLOSION_CLOUD: // 3
|
||||
{
|
||||
uint32_t imageId = 22878 + (misc->unknown.frame / 256);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->unknown.z);
|
||||
uint32_t imageId = 22878 + (misc->generic.frame / 256);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->generic.z);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -90,8 +90,8 @@ void misc_paint(paint_session* session, const rct_sprite* misc, int32_t imageDir
|
|||
case SPRITE_MISC_EXPLOSION_FLARE: // 5
|
||||
{
|
||||
// Like a flare
|
||||
uint32_t imageId = 22896 + (misc->unknown.frame / 256);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->unknown.z);
|
||||
uint32_t imageId = 22896 + (misc->generic.frame / 256);
|
||||
sub_98196C(session, imageId, 0, 0, 1, 1, 0, misc->generic.z);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,7 @@ void misc_paint(paint_session* session, const rct_sprite* misc, int32_t imageDir
|
|||
al = al ^ 1;
|
||||
}
|
||||
|
||||
uint32_t baseImageId = (jumpingFountain.misc_identifier == SPRITE_MISC_JUMPING_FOUNTAIN_SNOW) ? 23037 : 22973;
|
||||
uint32_t baseImageId = (jumpingFountain.type == SPRITE_MISC_JUMPING_FOUNTAIN_SNOW) ? 23037 : 22973;
|
||||
uint32_t imageId = baseImageId + ebx * 16 + jumpingFountain.frame;
|
||||
if (al & 1)
|
||||
{
|
||||
|
|
|
@ -49,13 +49,13 @@ void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t
|
|||
const bool highlightPathIssues = (gCurrentViewportFlags & VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES);
|
||||
|
||||
for (const rct_sprite* spr = get_sprite(sprite_idx); sprite_idx != SPRITE_INDEX_NULL;
|
||||
sprite_idx = spr->unknown.next_in_quadrant)
|
||||
sprite_idx = spr->generic.next_in_quadrant)
|
||||
{
|
||||
spr = get_sprite(sprite_idx);
|
||||
|
||||
if (highlightPathIssues)
|
||||
{
|
||||
if (spr->unknown.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
if (spr->generic.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
rct_peep* peep = (rct_peep*)spr;
|
||||
if (!(peep->type == PEEP_TYPE_STAFF && peep->staff_type == STAFF_TYPE_HANDYMAN))
|
||||
|
@ -63,7 +63,7 @@ void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t
|
|||
continue;
|
||||
}
|
||||
}
|
||||
else if (spr->unknown.sprite_identifier != SPRITE_IDENTIFIER_LITTER)
|
||||
else if (spr->generic.sprite_identifier != SPRITE_IDENTIFIER_LITTER)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -75,15 +75,15 @@ void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t
|
|||
// height of the slope element, and consequently clipped.
|
||||
if ((gCurrentViewportFlags & VIEWPORT_FLAG_CLIP_VIEW))
|
||||
{
|
||||
if (spr->unknown.z > (gClipHeight * 8))
|
||||
if (spr->generic.z > (gClipHeight * 8))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (spr->unknown.x / 32 < gClipSelectionA.x || spr->unknown.x / 32 > gClipSelectionB.x)
|
||||
if (spr->generic.x / 32 < gClipSelectionA.x || spr->generic.x / 32 > gClipSelectionB.x)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (spr->unknown.y / 32 < gClipSelectionA.y || spr->unknown.y / 32 > gClipSelectionB.y)
|
||||
if (spr->generic.y / 32 < gClipSelectionA.y || spr->generic.y / 32 > gClipSelectionB.y)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
@ -91,23 +91,23 @@ void sprite_paint_setup(paint_session* session, const uint16_t x, const uint16_t
|
|||
|
||||
dpi = session->DPI;
|
||||
|
||||
if (dpi->y + dpi->height <= spr->unknown.sprite_top || spr->unknown.sprite_bottom <= dpi->y
|
||||
|| dpi->x + dpi->width <= spr->unknown.sprite_left || spr->unknown.sprite_right <= dpi->x)
|
||||
if (dpi->y + dpi->height <= spr->generic.sprite_top || spr->generic.sprite_bottom <= dpi->y
|
||||
|| dpi->x + dpi->width <= spr->generic.sprite_left || spr->generic.sprite_right <= dpi->x)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
int32_t image_direction = session->CurrentRotation;
|
||||
image_direction <<= 3;
|
||||
image_direction += spr->unknown.sprite_direction;
|
||||
image_direction += spr->generic.sprite_direction;
|
||||
image_direction &= 0x1F;
|
||||
|
||||
session->CurrentlyDrawnItem = spr;
|
||||
session->SpritePosition.x = spr->unknown.x;
|
||||
session->SpritePosition.y = spr->unknown.y;
|
||||
session->SpritePosition.x = spr->generic.x;
|
||||
session->SpritePosition.y = spr->generic.y;
|
||||
session->InteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE;
|
||||
|
||||
switch (spr->unknown.sprite_identifier)
|
||||
switch (spr->generic.sprite_identifier)
|
||||
{
|
||||
case SPRITE_IDENTIFIER_VEHICLE:
|
||||
vehicle_paint(session, (rct_vehicle*)spr, image_direction);
|
||||
|
|
|
@ -5348,11 +5348,11 @@ void rct_peep::UpdateWalking()
|
|||
|
||||
// Check if there is a peep watching (and if there is place for us)
|
||||
uint16_t sprite_id = sprite_get_first_in_quadrant(x, y);
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->unknown.next_in_quadrant)
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(sprite_id);
|
||||
|
||||
if (sprite->unknown.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
if (sprite->generic.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
continue;
|
||||
|
||||
if (sprite->peep.state != PEEP_STATE_WATCHING)
|
||||
|
@ -5946,11 +5946,11 @@ bool rct_peep::UpdateWalkingFindBench()
|
|||
uint8_t free_edge = 3;
|
||||
|
||||
// Check if there is no peep sitting in chosen_edge
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->unknown.next_in_quadrant)
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(sprite_id);
|
||||
|
||||
if (sprite->unknown.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
if (sprite->generic.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
continue;
|
||||
|
||||
if (sprite->peep.state != PEEP_STATE_SITTING)
|
||||
|
@ -6136,11 +6136,11 @@ static void peep_update_walking_break_scenery(rct_peep* peep)
|
|||
uint16_t sprite_id = sprite_get_first_in_quadrant(peep->x, peep->y);
|
||||
|
||||
// Check if a peep is already sitting on the bench. If so, do not vandalise it.
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->unknown.next_in_quadrant)
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(sprite_id);
|
||||
|
||||
if ((sprite->unknown.linked_list_type_offset != SPRITE_LIST_PEEP * 2) || (sprite->peep.state != PEEP_STATE_SITTING)
|
||||
if ((sprite->generic.linked_list_type_offset != SPRITE_LIST_PEEP * 2) || (sprite->peep.state != PEEP_STATE_SITTING)
|
||||
|| (peep->z != sprite->peep.z))
|
||||
{
|
||||
continue;
|
||||
|
|
|
@ -396,7 +396,7 @@ rct_peep* try_get_guest(uint16_t spriteIndex)
|
|||
rct_sprite* sprite = try_get_sprite(spriteIndex);
|
||||
if (sprite == nullptr)
|
||||
return nullptr;
|
||||
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_PEEP)
|
||||
if (sprite->generic.sprite_identifier != SPRITE_IDENTIFIER_PEEP)
|
||||
return nullptr;
|
||||
if (sprite->peep.type != PEEP_TYPE_GUEST)
|
||||
return nullptr;
|
||||
|
@ -2775,10 +2775,10 @@ static void peep_footpath_move_forward(rct_peep* peep, int16_t x, int16_t y, rct
|
|||
uint8_t litter_count = 0;
|
||||
uint8_t sick_count = 0;
|
||||
uint16_t sprite_id = sprite_get_first_in_quadrant(x, y);
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->unknown.next_in_quadrant)
|
||||
for (rct_sprite* sprite; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(sprite_id);
|
||||
if (sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
if (sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
rct_peep* other_peep = (rct_peep*)sprite;
|
||||
if (other_peep->state != PEEP_STATE_WALKING)
|
||||
|
@ -2789,7 +2789,7 @@ static void peep_footpath_move_forward(rct_peep* peep, int16_t x, int16_t y, rct
|
|||
crowded++;
|
||||
continue;
|
||||
}
|
||||
else if (sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_LITTER)
|
||||
else if (sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_LITTER)
|
||||
{
|
||||
rct_litter* litter = (rct_litter*)sprite;
|
||||
if (abs(litter->z - peep->next_z * 8) > 16)
|
||||
|
|
|
@ -467,7 +467,7 @@ void game_command_set_staff_patrol(
|
|||
return;
|
||||
}
|
||||
rct_sprite* sprite = get_sprite(sprite_id);
|
||||
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_PEEP || sprite->peep.type != PEEP_TYPE_STAFF)
|
||||
if (sprite->generic.sprite_identifier != SPRITE_IDENTIFIER_PEEP || sprite->peep.type != PEEP_TYPE_STAFF)
|
||||
{
|
||||
*ebx = MONEY32_UNDEFINED;
|
||||
log_warning("Invalid type of sprite %u for game command", sprite_id);
|
||||
|
@ -2292,11 +2292,11 @@ static int32_t peep_update_patrolling_find_sweeping(rct_peep* peep)
|
|||
|
||||
uint16_t sprite_id = sprite_get_first_in_quadrant(peep->x, peep->y);
|
||||
|
||||
for (rct_sprite* sprite = nullptr; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->unknown.next_in_quadrant)
|
||||
for (rct_sprite* sprite = nullptr; sprite_id != SPRITE_INDEX_NULL; sprite_id = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(sprite_id);
|
||||
|
||||
if (sprite->unknown.linked_list_type_offset != SPRITE_LIST_LITTER * 2)
|
||||
if (sprite->generic.linked_list_type_offset != SPRITE_LIST_LITTER * 2)
|
||||
continue;
|
||||
|
||||
uint16_t z_diff = abs(peep->z - sprite->litter.z);
|
||||
|
|
|
@ -1322,7 +1322,7 @@ private:
|
|||
for (size_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
rct_sprite* sprite = get_sprite(i);
|
||||
if (sprite->unknown.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
if (sprite->generic.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE)
|
||||
{
|
||||
rct_vehicle* vehicle = (rct_vehicle*)sprite;
|
||||
FixVehiclePeepLinks(vehicle, spriteIndexMap);
|
||||
|
@ -1650,11 +1650,11 @@ private:
|
|||
if (sprite.unknown.sprite_identifier == SPRITE_IDENTIFIER_MISC)
|
||||
{
|
||||
rct1_unk_sprite* src = &sprite.unknown;
|
||||
rct_unk_sprite* dst = (rct_unk_sprite*)create_sprite(SPRITE_IDENTIFIER_MISC);
|
||||
rct_sprite_generic* dst = (rct_sprite_generic*)create_sprite(SPRITE_IDENTIFIER_MISC);
|
||||
move_sprite_to_list((rct_sprite*)dst, SPRITE_LIST_MISC * 2);
|
||||
|
||||
dst->sprite_identifier = src->sprite_identifier;
|
||||
dst->misc_identifier = src->misc_identifier;
|
||||
dst->type = src->misc_identifier;
|
||||
dst->flags = src->flags;
|
||||
dst->sprite_direction = src->sprite_direction;
|
||||
dst->sprite_width = src->sprite_width;
|
||||
|
|
|
@ -828,9 +828,9 @@ public:
|
|||
{
|
||||
// The number of riders might have overflown or underflown. Re-calculate the value.
|
||||
uint16_t numRiders = 0;
|
||||
for (const rct_sprite sprite : _s6.sprites)
|
||||
for (const rct_sprite& sprite : _s6.sprites)
|
||||
{
|
||||
if (sprite.unknown.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
if (sprite.generic.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
if (sprite.peep.current_ride == rideIndex
|
||||
&& (sprite.peep.state == PEEP_STATE_ON_RIDE || sprite.peep.state == PEEP_STATE_ENTERING_RIDE))
|
||||
|
|
|
@ -834,7 +834,7 @@ rct_vehicle* try_get_vehicle(uint16_t spriteIndex)
|
|||
rct_sprite* sprite = try_get_sprite(spriteIndex);
|
||||
if (sprite == nullptr)
|
||||
return nullptr;
|
||||
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_VEHICLE)
|
||||
if (sprite->generic.sprite_identifier != SPRITE_IDENTIFIER_VEHICLE)
|
||||
return nullptr;
|
||||
return &sprite->vehicle;
|
||||
}
|
||||
|
@ -7235,7 +7235,7 @@ static void steam_particle_create(int16_t x, int16_t y, int16_t z)
|
|||
steam->sprite_height_negative = 18;
|
||||
steam->sprite_height_positive = 16;
|
||||
steam->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
steam->misc_identifier = SPRITE_MISC_STEAM_PARTICLE;
|
||||
steam->type = SPRITE_MISC_STEAM_PARTICLE;
|
||||
steam->frame = 256;
|
||||
steam->time_to_move = 0;
|
||||
sprite_move(x, y, z, (rct_sprite*)steam);
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
|
||||
bool rct_sprite::IsBalloon()
|
||||
{
|
||||
return this->balloon.sprite_identifier == SPRITE_IDENTIFIER_MISC && this->balloon.misc_identifier == SPRITE_MISC_BALLOON;
|
||||
return this->balloon.sprite_identifier == SPRITE_IDENTIFIER_MISC && this->balloon.type == SPRITE_MISC_BALLOON;
|
||||
}
|
||||
|
||||
rct_balloon* rct_sprite::AsBalloon()
|
||||
|
@ -111,7 +111,7 @@ void create_balloon(int32_t x, int32_t y, int32_t z, int32_t colour, bool isPopp
|
|||
sprite->balloon.sprite_height_positive = 11;
|
||||
sprite->balloon.sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z, sprite);
|
||||
sprite->balloon.misc_identifier = SPRITE_MISC_BALLOON;
|
||||
sprite->balloon.type = SPRITE_MISC_BALLOON;
|
||||
sprite->balloon.time_to_move = 0;
|
||||
sprite->balloon.frame = 0;
|
||||
sprite->balloon.colour = colour;
|
||||
|
|
|
@ -76,7 +76,7 @@ static constexpr const uint8_t * DuckAnimations[] =
|
|||
|
||||
bool rct_sprite::IsDuck()
|
||||
{
|
||||
return this->duck.sprite_identifier == SPRITE_IDENTIFIER_MISC && this->duck.misc_identifier == SPRITE_MISC_DUCK;
|
||||
return this->duck.sprite_identifier == SPRITE_IDENTIFIER_MISC && this->duck.type == SPRITE_MISC_DUCK;
|
||||
}
|
||||
|
||||
rct_duck* rct_sprite::AsDuck()
|
||||
|
@ -313,7 +313,7 @@ void create_duck(int32_t targetX, int32_t targetY)
|
|||
if (sprite != nullptr)
|
||||
{
|
||||
sprite->duck.sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite->duck.misc_identifier = SPRITE_MISC_DUCK;
|
||||
sprite->duck.type = SPRITE_MISC_DUCK;
|
||||
sprite->duck.sprite_width = 9;
|
||||
sprite->duck.sprite_height_negative = 12;
|
||||
sprite->duck.sprite_height_positive = 9;
|
||||
|
@ -378,9 +378,9 @@ void duck_remove_all()
|
|||
for (uint16_t spriteIndex = gSpriteListHead[SPRITE_LIST_MISC]; spriteIndex != SPRITE_INDEX_NULL;
|
||||
spriteIndex = nextSpriteIndex)
|
||||
{
|
||||
rct_unk_sprite* sprite = &(get_sprite(spriteIndex)->unknown);
|
||||
rct_sprite_generic* sprite = &(get_sprite(spriteIndex)->generic);
|
||||
nextSpriteIndex = sprite->next;
|
||||
if (sprite->misc_identifier == SPRITE_MISC_DUCK)
|
||||
if (sprite->type == SPRITE_MISC_DUCK)
|
||||
{
|
||||
sprite_remove((rct_sprite*)sprite);
|
||||
}
|
||||
|
|
|
@ -142,8 +142,8 @@ void jumping_fountain_create(int32_t type, int32_t x, int32_t y, int32_t z, int3
|
|||
jumpingFountain->sprite_height_positive = 12;
|
||||
jumpingFountain->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z, (rct_sprite*)jumpingFountain);
|
||||
jumpingFountain->misc_identifier = type == JUMPING_FOUNTAIN_TYPE_SNOW ? SPRITE_MISC_JUMPING_FOUNTAIN_SNOW
|
||||
: SPRITE_MISC_JUMPING_FOUNTAIN_WATER;
|
||||
jumpingFountain->type = type == JUMPING_FOUNTAIN_TYPE_SNOW ? SPRITE_MISC_JUMPING_FOUNTAIN_SNOW
|
||||
: SPRITE_MISC_JUMPING_FOUNTAIN_WATER;
|
||||
jumpingFountain->num_ticks_alive = 0;
|
||||
jumpingFountain->frame = 0;
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ void jumping_fountain_update(rct_jumping_fountain* jumpingFountain)
|
|||
invalidate_sprite_0((rct_sprite*)jumpingFountain);
|
||||
jumpingFountain->frame++;
|
||||
|
||||
switch (jumpingFountain->misc_identifier)
|
||||
switch (jumpingFountain->type)
|
||||
{
|
||||
case SPRITE_MISC_JUMPING_FOUNTAIN_WATER:
|
||||
if (jumpingFountain->frame == 11 && (jumpingFountain->fountain_flags & FOUNTAIN_FLAG::FAST))
|
||||
|
@ -192,8 +192,8 @@ void jumping_fountain_update(rct_jumping_fountain* jumpingFountain)
|
|||
|
||||
static int32_t jumping_fountain_get_type(const rct_jumping_fountain* jumpingFountain)
|
||||
{
|
||||
int32_t type = jumpingFountain->misc_identifier == SPRITE_MISC_JUMPING_FOUNTAIN_SNOW ? JUMPING_FOUNTAIN_TYPE_SNOW
|
||||
: JUMPING_FOUNTAIN_TYPE_WATER;
|
||||
int32_t type = jumpingFountain->type == SPRITE_MISC_JUMPING_FOUNTAIN_SNOW ? JUMPING_FOUNTAIN_TYPE_SNOW
|
||||
: JUMPING_FOUNTAIN_TYPE_WATER;
|
||||
return type;
|
||||
}
|
||||
|
||||
|
|
|
@ -200,10 +200,10 @@ static bool map_animation_invalidate_small_scenery(int32_t x, int32_t y, int32_t
|
|||
int32_t y2 = y - CoordsDirectionDelta[direction].y;
|
||||
|
||||
uint16_t spriteIdx = sprite_get_first_in_quadrant(x2, y2);
|
||||
for (; spriteIdx != SPRITE_INDEX_NULL; spriteIdx = sprite->unknown.next_in_quadrant)
|
||||
for (; spriteIdx != SPRITE_INDEX_NULL; spriteIdx = sprite->generic.next_in_quadrant)
|
||||
{
|
||||
sprite = get_sprite(spriteIdx);
|
||||
if (sprite->unknown.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
if (sprite->generic.linked_list_type_offset != SPRITE_LIST_PEEP * 2)
|
||||
continue;
|
||||
|
||||
peep = &sprite->peep;
|
||||
|
|
|
@ -37,7 +37,7 @@ void money_effect_create_at(money32 value, int32_t x, int32_t y, int32_t z, bool
|
|||
moneyEffect->sprite_height_positive = 30;
|
||||
moneyEffect->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z, (rct_sprite*)moneyEffect);
|
||||
moneyEffect->misc_identifier = SPRITE_MISC_MONEY_EFFECT;
|
||||
moneyEffect->type = SPRITE_MISC_MONEY_EFFECT;
|
||||
moneyEffect->num_movements = 0;
|
||||
moneyEffect->move_delay = 0;
|
||||
|
||||
|
|
|
@ -29,7 +29,7 @@ void crashed_vehicle_particle_create(rct_vehicle_colour colours, int32_t x, int3
|
|||
sprite->sprite_height_positive = 8;
|
||||
sprite->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z, (rct_sprite*)sprite);
|
||||
sprite->misc_identifier = SPRITE_MISC_CRASHED_VEHICLE_PARTICLE;
|
||||
sprite->type = SPRITE_MISC_CRASHED_VEHICLE_PARTICLE;
|
||||
|
||||
sprite->frame = (scenario_rand() & 0xFF) * 12;
|
||||
sprite->time_to_live = (scenario_rand() & 0x7F) + 140;
|
||||
|
@ -114,7 +114,7 @@ void crashed_vehicle_particle_update(rct_crashed_vehicle_particle* particle)
|
|||
*/
|
||||
void crash_splash_create(int32_t x, int32_t y, int32_t z)
|
||||
{
|
||||
rct_unk_sprite* sprite = (rct_unk_sprite*)create_sprite(2);
|
||||
rct_sprite_generic* sprite = (rct_sprite_generic*)create_sprite(2);
|
||||
if (sprite != nullptr)
|
||||
{
|
||||
sprite->sprite_width = 33;
|
||||
|
@ -122,7 +122,7 @@ void crash_splash_create(int32_t x, int32_t y, int32_t z)
|
|||
sprite->sprite_height_positive = 16;
|
||||
sprite->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z + 3, (rct_sprite*)sprite);
|
||||
sprite->misc_identifier = SPRITE_MISC_CRASH_SPLASH;
|
||||
sprite->type = SPRITE_MISC_CRASH_SPLASH;
|
||||
sprite->frame = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ uint16_t sprite_get_first_in_quadrant(int32_t x, int32_t y)
|
|||
|
||||
static void invalidate_sprite_max_zoom(rct_sprite* sprite, int32_t maxZoom)
|
||||
{
|
||||
if (sprite->unknown.sprite_left == LOCATION_NULL)
|
||||
if (sprite->generic.sprite_left == LOCATION_NULL)
|
||||
return;
|
||||
|
||||
for (int32_t i = 0; i < MAX_VIEWPORT_COUNT; i++)
|
||||
|
@ -86,8 +86,8 @@ static void invalidate_sprite_max_zoom(rct_sprite* sprite, int32_t maxZoom)
|
|||
if (viewport->width != 0 && viewport->zoom <= maxZoom)
|
||||
{
|
||||
viewport_invalidate(
|
||||
viewport, sprite->unknown.sprite_left, sprite->unknown.sprite_top, sprite->unknown.sprite_right,
|
||||
sprite->unknown.sprite_bottom);
|
||||
viewport, sprite->generic.sprite_left, sprite->generic.sprite_top, sprite->generic.sprite_right,
|
||||
sprite->generic.sprite_bottom);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -142,19 +142,19 @@ void reset_sprite_list()
|
|||
for (int32_t i = 0; i < MAX_SPRITES; ++i)
|
||||
{
|
||||
rct_sprite* spr = get_sprite(i);
|
||||
spr->unknown.sprite_identifier = SPRITE_IDENTIFIER_NULL;
|
||||
spr->unknown.sprite_index = i;
|
||||
spr->unknown.next = SPRITE_INDEX_NULL;
|
||||
spr->unknown.linked_list_type_offset = 0;
|
||||
spr->generic.sprite_identifier = SPRITE_IDENTIFIER_NULL;
|
||||
spr->generic.sprite_index = i;
|
||||
spr->generic.next = SPRITE_INDEX_NULL;
|
||||
spr->generic.linked_list_type_offset = 0;
|
||||
|
||||
if (previous_spr != (rct_sprite*)SPRITE_INDEX_NULL)
|
||||
{
|
||||
spr->unknown.previous = previous_spr->unknown.sprite_index;
|
||||
previous_spr->unknown.next = i;
|
||||
spr->generic.previous = previous_spr->generic.sprite_index;
|
||||
previous_spr->generic.next = i;
|
||||
}
|
||||
else
|
||||
{
|
||||
spr->unknown.previous = SPRITE_INDEX_NULL;
|
||||
spr->generic.previous = SPRITE_INDEX_NULL;
|
||||
gSpriteListHead[SPRITE_LIST_NULL] = i;
|
||||
}
|
||||
_spriteFlashingList[i] = false;
|
||||
|
@ -178,12 +178,12 @@ void reset_sprite_spatial_index()
|
|||
for (size_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
rct_sprite* spr = get_sprite(i);
|
||||
if (spr->unknown.sprite_identifier != SPRITE_IDENTIFIER_NULL)
|
||||
if (spr->generic.sprite_identifier != SPRITE_IDENTIFIER_NULL)
|
||||
{
|
||||
size_t index = GetSpatialIndexOffset(spr->unknown.x, spr->unknown.y);
|
||||
size_t index = GetSpatialIndexOffset(spr->generic.x, spr->generic.y);
|
||||
uint16_t nextSpriteId = gSpriteSpatialIndex[index];
|
||||
gSpriteSpatialIndex[index] = spr->unknown.sprite_index;
|
||||
spr->unknown.next_in_quadrant = nextSpriteId;
|
||||
gSpriteSpatialIndex[index] = spr->generic.sprite_index;
|
||||
spr->generic.next_in_quadrant = nextSpriteId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -227,13 +227,13 @@ const char* sprite_checksum()
|
|||
for (size_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
auto sprite = get_sprite(i);
|
||||
if (sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_NULL
|
||||
&& sprite->unknown.sprite_identifier != SPRITE_IDENTIFIER_MISC)
|
||||
if (sprite->generic.sprite_identifier != SPRITE_IDENTIFIER_NULL
|
||||
&& sprite->generic.sprite_identifier != SPRITE_IDENTIFIER_MISC)
|
||||
{
|
||||
auto copy = *sprite;
|
||||
copy.unknown.sprite_left = copy.unknown.sprite_right = copy.unknown.sprite_top = copy.unknown.sprite_bottom = 0;
|
||||
copy.generic.sprite_left = copy.generic.sprite_right = copy.generic.sprite_top = copy.generic.sprite_bottom = 0;
|
||||
|
||||
if (copy.unknown.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
if (copy.generic.sprite_identifier == SPRITE_IDENTIFIER_PEEP)
|
||||
{
|
||||
// We set this to 0 because as soon the client selects a guest the window will remove the
|
||||
// invalidation flags causing the sprite checksum to be different than on server, the flag does not affect
|
||||
|
@ -272,7 +272,7 @@ const char* sprite_checksum()
|
|||
|
||||
#endif // DISABLE_NETWORK
|
||||
|
||||
static void sprite_reset(rct_unk_sprite* sprite)
|
||||
static void sprite_reset(rct_sprite_generic* sprite)
|
||||
{
|
||||
// Need to retain how the sprite is linked in lists
|
||||
uint8_t llto = sprite->linked_list_type_offset;
|
||||
|
@ -298,13 +298,13 @@ static void sprite_reset(rct_unk_sprite* sprite)
|
|||
*/
|
||||
void sprite_clear_all_unused()
|
||||
{
|
||||
rct_unk_sprite* sprite;
|
||||
rct_sprite_generic* sprite;
|
||||
uint16_t spriteIndex, nextSpriteIndex;
|
||||
|
||||
spriteIndex = gSpriteListHead[SPRITE_LIST_NULL];
|
||||
while (spriteIndex != SPRITE_INDEX_NULL)
|
||||
{
|
||||
sprite = &get_sprite(spriteIndex)->unknown;
|
||||
sprite = &get_sprite(spriteIndex)->generic;
|
||||
nextSpriteIndex = sprite->next;
|
||||
sprite_reset(sprite);
|
||||
sprite->linked_list_type_offset = SPRITE_LIST_NULL * 2;
|
||||
|
@ -347,7 +347,7 @@ rct_sprite* create_sprite(uint8_t bl)
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
rct_unk_sprite* sprite = &(get_sprite(gSpriteListHead[SPRITE_LIST_NULL]))->unknown;
|
||||
rct_sprite_generic* sprite = &(get_sprite(gSpriteListHead[SPRITE_LIST_NULL]))->generic;
|
||||
|
||||
move_sprite_to_list((rct_sprite*)sprite, (uint8_t)linkedListTypeOffset);
|
||||
|
||||
|
@ -380,7 +380,7 @@ rct_sprite* create_sprite(uint8_t bl)
|
|||
*/
|
||||
void move_sprite_to_list(rct_sprite* sprite, uint8_t newListOffset)
|
||||
{
|
||||
rct_unk_sprite* unkSprite = &sprite->unknown;
|
||||
rct_sprite_generic* unkSprite = &sprite->generic;
|
||||
uint8_t oldListOffset = unkSprite->linked_list_type_offset;
|
||||
int32_t oldList = oldListOffset >> 1;
|
||||
int32_t newList = newListOffset >> 1;
|
||||
|
@ -400,13 +400,13 @@ void move_sprite_to_list(rct_sprite* sprite, uint8_t newListOffset)
|
|||
else
|
||||
{
|
||||
// Hook up sprite->previous->next to sprite->next, removing the sprite from its old list
|
||||
get_sprite(unkSprite->previous)->unknown.next = unkSprite->next;
|
||||
get_sprite(unkSprite->previous)->generic.next = unkSprite->next;
|
||||
}
|
||||
|
||||
// Similarly, hook up sprite->next->previous to sprite->previous
|
||||
if (unkSprite->next != SPRITE_INDEX_NULL)
|
||||
{
|
||||
get_sprite(unkSprite->next)->unknown.previous = unkSprite->previous;
|
||||
get_sprite(unkSprite->next)->generic.previous = unkSprite->previous;
|
||||
}
|
||||
|
||||
unkSprite->previous = SPRITE_INDEX_NULL; // We become the new head of the target list, so there's no previous sprite
|
||||
|
@ -418,7 +418,7 @@ void move_sprite_to_list(rct_sprite* sprite, uint8_t newListOffset)
|
|||
if (unkSprite->next != SPRITE_INDEX_NULL)
|
||||
{
|
||||
// Fix the chain by settings sprite->next->previous to sprite_index
|
||||
get_sprite(unkSprite->next)->unknown.previous = unkSprite->sprite_index;
|
||||
get_sprite(unkSprite->next)->generic.previous = unkSprite->sprite_index;
|
||||
}
|
||||
|
||||
// These globals are probably counters for each sprite list?
|
||||
|
@ -455,7 +455,7 @@ static void sprite_steam_particle_update(rct_steam_particle* steam)
|
|||
*/
|
||||
void sprite_misc_explosion_cloud_create(int32_t x, int32_t y, int32_t z)
|
||||
{
|
||||
rct_unk_sprite* sprite = (rct_unk_sprite*)create_sprite(2);
|
||||
rct_sprite_generic* sprite = (rct_sprite_generic*)create_sprite(2);
|
||||
if (sprite != nullptr)
|
||||
{
|
||||
sprite->sprite_width = 44;
|
||||
|
@ -463,7 +463,7 @@ void sprite_misc_explosion_cloud_create(int32_t x, int32_t y, int32_t z)
|
|||
sprite->sprite_height_positive = 34;
|
||||
sprite->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z + 4, (rct_sprite*)sprite);
|
||||
sprite->misc_identifier = SPRITE_MISC_EXPLOSION_CLOUD;
|
||||
sprite->type = SPRITE_MISC_EXPLOSION_CLOUD;
|
||||
sprite->frame = 0;
|
||||
}
|
||||
}
|
||||
|
@ -475,8 +475,8 @@ void sprite_misc_explosion_cloud_create(int32_t x, int32_t y, int32_t z)
|
|||
static void sprite_misc_explosion_cloud_update(rct_sprite* sprite)
|
||||
{
|
||||
invalidate_sprite_2(sprite);
|
||||
sprite->unknown.frame += 128;
|
||||
if (sprite->unknown.frame >= (36 * 128))
|
||||
sprite->generic.frame += 128;
|
||||
if (sprite->generic.frame >= (36 * 128))
|
||||
{
|
||||
sprite_remove(sprite);
|
||||
}
|
||||
|
@ -488,7 +488,7 @@ static void sprite_misc_explosion_cloud_update(rct_sprite* sprite)
|
|||
*/
|
||||
void sprite_misc_explosion_flare_create(int32_t x, int32_t y, int32_t z)
|
||||
{
|
||||
rct_unk_sprite* sprite = (rct_unk_sprite*)create_sprite(2);
|
||||
rct_sprite_generic* sprite = (rct_sprite_generic*)create_sprite(2);
|
||||
if (sprite != nullptr)
|
||||
{
|
||||
sprite->sprite_width = 25;
|
||||
|
@ -496,7 +496,7 @@ void sprite_misc_explosion_flare_create(int32_t x, int32_t y, int32_t z)
|
|||
sprite->sprite_height_positive = 8;
|
||||
sprite->sprite_identifier = SPRITE_IDENTIFIER_MISC;
|
||||
sprite_move(x, y, z + 4, (rct_sprite*)sprite);
|
||||
sprite->misc_identifier = SPRITE_MISC_EXPLOSION_FLARE;
|
||||
sprite->type = SPRITE_MISC_EXPLOSION_FLARE;
|
||||
sprite->frame = 0;
|
||||
}
|
||||
}
|
||||
|
@ -508,8 +508,8 @@ void sprite_misc_explosion_flare_create(int32_t x, int32_t y, int32_t z)
|
|||
static void sprite_misc_explosion_flare_update(rct_sprite* sprite)
|
||||
{
|
||||
invalidate_sprite_2(sprite);
|
||||
sprite->unknown.frame += 64;
|
||||
if (sprite->unknown.frame >= (124 * 64))
|
||||
sprite->generic.frame += 64;
|
||||
if (sprite->generic.frame >= (124 * 64))
|
||||
{
|
||||
sprite_remove(sprite);
|
||||
}
|
||||
|
@ -521,7 +521,7 @@ static void sprite_misc_explosion_flare_update(rct_sprite* sprite)
|
|||
*/
|
||||
static void sprite_misc_update(rct_sprite* sprite)
|
||||
{
|
||||
switch (sprite->unknown.misc_identifier)
|
||||
switch (sprite->generic.type)
|
||||
{
|
||||
case SPRITE_MISC_STEAM_PARTICLE:
|
||||
sprite_steam_particle_update((rct_steam_particle*)sprite);
|
||||
|
@ -567,7 +567,7 @@ void sprite_misc_update_all()
|
|||
while (spriteIndex != SPRITE_INDEX_NULL)
|
||||
{
|
||||
sprite = get_sprite(spriteIndex);
|
||||
spriteIndex = sprite->unknown.next;
|
||||
spriteIndex = sprite->generic.next;
|
||||
sprite_misc_update(sprite);
|
||||
}
|
||||
}
|
||||
|
@ -589,7 +589,7 @@ void sprite_move(int16_t x, int16_t y, int16_t z, rct_sprite* sprite)
|
|||
}
|
||||
|
||||
size_t newIndex = GetSpatialIndexOffset(x, y);
|
||||
size_t currentIndex = GetSpatialIndexOffset(sprite->unknown.x, sprite->unknown.y);
|
||||
size_t currentIndex = GetSpatialIndexOffset(sprite->generic.x, sprite->generic.y);
|
||||
if (newIndex != currentIndex)
|
||||
{
|
||||
uint16_t* spriteIndex = &gSpriteSpatialIndex[currentIndex];
|
||||
|
@ -598,7 +598,7 @@ void sprite_move(int16_t x, int16_t y, int16_t z, rct_sprite* sprite)
|
|||
rct_sprite* sprite2 = get_sprite(*spriteIndex);
|
||||
while (sprite != sprite2)
|
||||
{
|
||||
spriteIndex = &sprite2->unknown.next_in_quadrant;
|
||||
spriteIndex = &sprite2->generic.next_in_quadrant;
|
||||
if (*spriteIndex == SPRITE_INDEX_NULL)
|
||||
{
|
||||
break;
|
||||
|
@ -606,19 +606,19 @@ void sprite_move(int16_t x, int16_t y, int16_t z, rct_sprite* sprite)
|
|||
sprite2 = get_sprite(*spriteIndex);
|
||||
}
|
||||
}
|
||||
*spriteIndex = sprite->unknown.next_in_quadrant;
|
||||
*spriteIndex = sprite->generic.next_in_quadrant;
|
||||
|
||||
int32_t tempSpriteIndex = gSpriteSpatialIndex[newIndex];
|
||||
gSpriteSpatialIndex[newIndex] = sprite->unknown.sprite_index;
|
||||
sprite->unknown.next_in_quadrant = tempSpriteIndex;
|
||||
gSpriteSpatialIndex[newIndex] = sprite->generic.sprite_index;
|
||||
sprite->generic.next_in_quadrant = tempSpriteIndex;
|
||||
}
|
||||
|
||||
if (x == LOCATION_NULL)
|
||||
{
|
||||
sprite->unknown.sprite_left = LOCATION_NULL;
|
||||
sprite->unknown.x = x;
|
||||
sprite->unknown.y = y;
|
||||
sprite->unknown.z = z;
|
||||
sprite->generic.sprite_left = LOCATION_NULL;
|
||||
sprite->generic.x = x;
|
||||
sprite->generic.y = y;
|
||||
sprite->generic.z = z;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -649,13 +649,13 @@ void sprite_set_coordinates(int16_t x, int16_t y, int16_t z, rct_sprite* sprite)
|
|||
break;
|
||||
}
|
||||
|
||||
sprite->unknown.sprite_left = new_x - sprite->unknown.sprite_width;
|
||||
sprite->unknown.sprite_right = new_x + sprite->unknown.sprite_width;
|
||||
sprite->unknown.sprite_top = new_y - sprite->unknown.sprite_height_negative;
|
||||
sprite->unknown.sprite_bottom = new_y + sprite->unknown.sprite_height_positive;
|
||||
sprite->unknown.x = x;
|
||||
sprite->unknown.y = y;
|
||||
sprite->unknown.z = z;
|
||||
sprite->generic.sprite_left = new_x - sprite->generic.sprite_width;
|
||||
sprite->generic.sprite_right = new_x + sprite->generic.sprite_width;
|
||||
sprite->generic.sprite_top = new_y - sprite->generic.sprite_height_negative;
|
||||
sprite->generic.sprite_bottom = new_y + sprite->generic.sprite_height_positive;
|
||||
sprite->generic.x = x;
|
||||
sprite->generic.y = y;
|
||||
sprite->generic.z = z;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -665,18 +665,18 @@ void sprite_set_coordinates(int16_t x, int16_t y, int16_t z, rct_sprite* sprite)
|
|||
void sprite_remove(rct_sprite* sprite)
|
||||
{
|
||||
move_sprite_to_list(sprite, SPRITE_LIST_NULL * 2);
|
||||
user_string_free(sprite->unknown.name_string_idx);
|
||||
sprite->unknown.sprite_identifier = SPRITE_IDENTIFIER_NULL;
|
||||
_spriteFlashingList[sprite->unknown.sprite_index] = false;
|
||||
user_string_free(sprite->generic.name_string_idx);
|
||||
sprite->generic.sprite_identifier = SPRITE_IDENTIFIER_NULL;
|
||||
_spriteFlashingList[sprite->generic.sprite_index] = false;
|
||||
|
||||
size_t quadrantIndex = GetSpatialIndexOffset(sprite->unknown.x, sprite->unknown.y);
|
||||
size_t quadrantIndex = GetSpatialIndexOffset(sprite->generic.x, sprite->generic.y);
|
||||
uint16_t* spriteIndex = &gSpriteSpatialIndex[quadrantIndex];
|
||||
rct_sprite* quadrantSprite;
|
||||
while (*spriteIndex != SPRITE_INDEX_NULL && (quadrantSprite = get_sprite(*spriteIndex)) != sprite)
|
||||
{
|
||||
spriteIndex = &quadrantSprite->unknown.next_in_quadrant;
|
||||
spriteIndex = &quadrantSprite->generic.next_in_quadrant;
|
||||
}
|
||||
*spriteIndex = sprite->unknown.next_in_quadrant;
|
||||
*spriteIndex = sprite->generic.next_in_quadrant;
|
||||
}
|
||||
|
||||
static bool litter_can_be_at(int32_t x, int32_t y, int32_t z)
|
||||
|
@ -768,8 +768,8 @@ void litter_remove_at(int32_t x, int32_t y, int32_t z)
|
|||
while (spriteIndex != SPRITE_INDEX_NULL)
|
||||
{
|
||||
rct_sprite* sprite = get_sprite(spriteIndex);
|
||||
uint16_t nextSpriteIndex = sprite->unknown.next_in_quadrant;
|
||||
if (sprite->unknown.linked_list_type_offset == SPRITE_LIST_LITTER * 2)
|
||||
uint16_t nextSpriteIndex = sprite->generic.next_in_quadrant;
|
||||
if (sprite->generic.linked_list_type_offset == SPRITE_LIST_LITTER * 2)
|
||||
{
|
||||
rct_litter* litter = &sprite->litter;
|
||||
|
||||
|
@ -791,7 +791,7 @@ void litter_remove_at(int32_t x, int32_t y, int32_t z)
|
|||
*/
|
||||
static bool sprite_should_tween(rct_sprite* sprite)
|
||||
{
|
||||
switch (sprite->unknown.linked_list_type_offset >> 1)
|
||||
switch (sprite->generic.linked_list_type_offset >> 1)
|
||||
{
|
||||
case SPRITE_LIST_TRAIN:
|
||||
case SPRITE_LIST_PEEP:
|
||||
|
@ -808,9 +808,9 @@ static void store_sprite_locations(LocationXYZ16* sprite_locations)
|
|||
// skip going through `get_sprite` to not get stalled on assert,
|
||||
// this can get very expensive for busy parks with uncap FPS option on
|
||||
const rct_sprite* sprite = &_spriteList[i];
|
||||
sprite_locations[i].x = sprite->unknown.x;
|
||||
sprite_locations[i].y = sprite->unknown.y;
|
||||
sprite_locations[i].z = sprite->unknown.z;
|
||||
sprite_locations[i].x = sprite->generic.x;
|
||||
sprite_locations[i].y = sprite->generic.y;
|
||||
sprite_locations[i].z = sprite->generic.z;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -870,22 +870,22 @@ void sprite_position_tween_reset()
|
|||
for (uint16_t i = 0; i < MAX_SPRITES; i++)
|
||||
{
|
||||
rct_sprite* sprite = get_sprite(i);
|
||||
_spritelocations1[i].x = _spritelocations2[i].x = sprite->unknown.x;
|
||||
_spritelocations1[i].y = _spritelocations2[i].y = sprite->unknown.y;
|
||||
_spritelocations1[i].z = _spritelocations2[i].z = sprite->unknown.z;
|
||||
_spritelocations1[i].x = _spritelocations2[i].x = sprite->generic.x;
|
||||
_spritelocations1[i].y = _spritelocations2[i].y = sprite->generic.y;
|
||||
_spritelocations1[i].z = _spritelocations2[i].z = sprite->generic.z;
|
||||
}
|
||||
}
|
||||
|
||||
void sprite_set_flashing(rct_sprite* sprite, bool flashing)
|
||||
{
|
||||
assert(sprite->unknown.sprite_index < MAX_SPRITES);
|
||||
_spriteFlashingList[sprite->unknown.sprite_index] = flashing;
|
||||
assert(sprite->generic.sprite_index < MAX_SPRITES);
|
||||
_spriteFlashingList[sprite->generic.sprite_index] = flashing;
|
||||
}
|
||||
|
||||
bool sprite_get_flashing(rct_sprite* sprite)
|
||||
{
|
||||
assert(sprite->unknown.sprite_index < MAX_SPRITES);
|
||||
return _spriteFlashingList[sprite->unknown.sprite_index];
|
||||
assert(sprite->generic.sprite_index < MAX_SPRITES);
|
||||
return _spriteFlashingList[sprite->generic.sprite_index];
|
||||
}
|
||||
|
||||
static rct_sprite* find_sprite_list_cycle(uint16_t sprite_idx)
|
||||
|
@ -898,26 +898,26 @@ static rct_sprite* find_sprite_list_cycle(uint16_t sprite_idx)
|
|||
const rct_sprite* slow = fast;
|
||||
bool increment_slow = false;
|
||||
rct_sprite* cycle_start = nullptr;
|
||||
while (fast->unknown.sprite_index != SPRITE_INDEX_NULL)
|
||||
while (fast->generic.sprite_index != SPRITE_INDEX_NULL)
|
||||
{
|
||||
// increment fast every time, unless reached the end
|
||||
if (fast->unknown.next == SPRITE_INDEX_NULL)
|
||||
if (fast->generic.next == SPRITE_INDEX_NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
fast = get_sprite(fast->unknown.next);
|
||||
fast = get_sprite(fast->generic.next);
|
||||
}
|
||||
// increment slow only every second iteration
|
||||
if (increment_slow)
|
||||
{
|
||||
slow = get_sprite(slow->unknown.next);
|
||||
slow = get_sprite(slow->generic.next);
|
||||
}
|
||||
increment_slow = !increment_slow;
|
||||
if (fast == slow)
|
||||
{
|
||||
cycle_start = get_sprite(slow->unknown.sprite_index);
|
||||
cycle_start = get_sprite(slow->generic.sprite_index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -934,26 +934,26 @@ static rct_sprite* find_sprite_quadrant_cycle(uint16_t sprite_idx)
|
|||
const rct_sprite* slow = fast;
|
||||
bool increment_slow = false;
|
||||
rct_sprite* cycle_start = nullptr;
|
||||
while (fast->unknown.sprite_index != SPRITE_INDEX_NULL)
|
||||
while (fast->generic.sprite_index != SPRITE_INDEX_NULL)
|
||||
{
|
||||
// increment fast every time, unless reached the end
|
||||
if (fast->unknown.next_in_quadrant == SPRITE_INDEX_NULL)
|
||||
if (fast->generic.next_in_quadrant == SPRITE_INDEX_NULL)
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
fast = get_sprite(fast->unknown.next_in_quadrant);
|
||||
fast = get_sprite(fast->generic.next_in_quadrant);
|
||||
}
|
||||
// increment slow only every second iteration
|
||||
if (increment_slow)
|
||||
{
|
||||
slow = get_sprite(slow->unknown.next_in_quadrant);
|
||||
slow = get_sprite(slow->generic.next_in_quadrant);
|
||||
}
|
||||
increment_slow = !increment_slow;
|
||||
if (fast == slow)
|
||||
{
|
||||
cycle_start = get_sprite(slow->unknown.sprite_index);
|
||||
cycle_start = get_sprite(slow->generic.sprite_index);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -969,7 +969,7 @@ static bool index_is_in_list(uint16_t index, enum SPRITE_LIST sl)
|
|||
{
|
||||
return true;
|
||||
}
|
||||
sprite_index = get_sprite(sprite_index)->unknown.next;
|
||||
sprite_index = get_sprite(sprite_index)->generic.next;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -985,13 +985,13 @@ int32_t check_for_sprite_list_cycles(bool fix)
|
|||
{
|
||||
// Fix head list, but only in reverse order
|
||||
// This is likely not needed, but just in case
|
||||
get_sprite(gSpriteListHead[i])->unknown.previous = SPRITE_INDEX_NULL;
|
||||
get_sprite(gSpriteListHead[i])->generic.previous = SPRITE_INDEX_NULL;
|
||||
|
||||
// Store the leftover part of cycle to be fixed
|
||||
uint16_t cycle_next = cycle_start->unknown.next;
|
||||
uint16_t cycle_next = cycle_start->generic.next;
|
||||
|
||||
// Break the cycle
|
||||
cycle_start->unknown.next = SPRITE_INDEX_NULL;
|
||||
cycle_start->generic.next = SPRITE_INDEX_NULL;
|
||||
|
||||
// Now re-add remainder of the cycle back to list, safely.
|
||||
// Add each sprite to the list until we encounter one that is already part of the list.
|
||||
|
@ -999,10 +999,10 @@ int32_t check_for_sprite_list_cycles(bool fix)
|
|||
{
|
||||
rct_sprite* spr = get_sprite(cycle_next);
|
||||
|
||||
cycle_start->unknown.next = cycle_next;
|
||||
spr->unknown.previous = cycle_start->unknown.sprite_index;
|
||||
cycle_next = spr->unknown.next;
|
||||
spr->unknown.next = SPRITE_INDEX_NULL;
|
||||
cycle_start->generic.next = cycle_next;
|
||||
spr->generic.previous = cycle_start->generic.sprite_index;
|
||||
cycle_next = spr->generic.next;
|
||||
spr->generic.next = SPRITE_INDEX_NULL;
|
||||
cycle_start = spr;
|
||||
}
|
||||
}
|
||||
|
@ -1028,7 +1028,7 @@ int32_t fix_disjoint_sprites()
|
|||
reachable[sprite_idx] = true;
|
||||
// cache the tail, so we don't have to walk the list twice
|
||||
null_list_tail = get_sprite(sprite_idx);
|
||||
sprite_idx = null_list_tail->unknown.next;
|
||||
sprite_idx = null_list_tail->generic.next;
|
||||
}
|
||||
|
||||
int32_t count = 0;
|
||||
|
@ -1037,16 +1037,16 @@ int32_t fix_disjoint_sprites()
|
|||
for (sprite_idx = 0; sprite_idx < MAX_SPRITES; sprite_idx++)
|
||||
{
|
||||
rct_sprite* spr = get_sprite(sprite_idx);
|
||||
if (spr->unknown.sprite_identifier == SPRITE_IDENTIFIER_NULL)
|
||||
if (spr->generic.sprite_identifier == SPRITE_IDENTIFIER_NULL)
|
||||
{
|
||||
openrct2_assert(null_list_tail != nullptr, "Null list is empty, yet found null sprites");
|
||||
spr->unknown.sprite_index = sprite_idx;
|
||||
spr->generic.sprite_index = sprite_idx;
|
||||
if (!reachable[sprite_idx])
|
||||
{
|
||||
// Add the sprite directly to the list
|
||||
null_list_tail->unknown.next = sprite_idx;
|
||||
spr->unknown.next = SPRITE_INDEX_NULL;
|
||||
spr->unknown.previous = null_list_tail->unknown.sprite_index;
|
||||
null_list_tail->generic.next = sprite_idx;
|
||||
spr->generic.next = SPRITE_INDEX_NULL;
|
||||
spr->generic.previous = null_list_tail->generic.sprite_index;
|
||||
null_list_tail = spr;
|
||||
count++;
|
||||
reachable[sprite_idx] = true;
|
||||
|
@ -1066,10 +1066,10 @@ int32_t check_for_spatial_index_cycles(bool fix)
|
|||
if (fix)
|
||||
{
|
||||
// Store the leftover part of cycle to be fixed
|
||||
uint16_t cycle_next = cycle_start->unknown.next_in_quadrant;
|
||||
uint16_t cycle_next = cycle_start->generic.next_in_quadrant;
|
||||
|
||||
// Break the cycle
|
||||
cycle_start->unknown.next_in_quadrant = SPRITE_INDEX_NULL;
|
||||
cycle_start->generic.next_in_quadrant = SPRITE_INDEX_NULL;
|
||||
|
||||
// Now re-add remainder of the cycle back to list, safely.
|
||||
// Add each sprite to the list until we encounter one that is already part of the list.
|
||||
|
@ -1077,9 +1077,9 @@ int32_t check_for_spatial_index_cycles(bool fix)
|
|||
{
|
||||
rct_sprite* spr = get_sprite(cycle_next);
|
||||
|
||||
cycle_start->unknown.next_in_quadrant = cycle_next;
|
||||
cycle_next = spr->unknown.next_in_quadrant;
|
||||
spr->unknown.next_in_quadrant = SPRITE_INDEX_NULL;
|
||||
cycle_start->generic.next_in_quadrant = cycle_next;
|
||||
cycle_next = spr->generic.next_in_quadrant;
|
||||
spr->generic.next_in_quadrant = SPRITE_INDEX_NULL;
|
||||
cycle_start = spr;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -38,10 +38,10 @@ enum SPRITE_LIST
|
|||
};
|
||||
|
||||
#pragma pack(push, 1)
|
||||
struct rct_unk_sprite
|
||||
struct rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint8_t type; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
|
@ -64,54 +64,27 @@ struct rct_unk_sprite
|
|||
uint8_t sprite_direction; // 0x1e
|
||||
uint8_t pad_1F[3];
|
||||
rct_string_id name_string_idx; // 0x22
|
||||
};
|
||||
|
||||
struct rct_sprite_generic : rct_sprite_common
|
||||
{
|
||||
uint16_t pad_24;
|
||||
uint16_t frame; // 0x26
|
||||
};
|
||||
assert_struct_size(rct_unk_sprite, 0x28);
|
||||
assert_struct_size(rct_sprite_generic, 0x28); // 9 bytes
|
||||
|
||||
struct rct_litter
|
||||
struct rct_litter : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t type; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
uint8_t sprite_width; // 0x14
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
uint8_t pad_16[8];
|
||||
uint8_t sprite_direction; // 0x1E
|
||||
uint8_t pad_1F[5];
|
||||
uint32_t creationTick; // 0x24
|
||||
};
|
||||
assert_struct_size(rct_litter, 0x28);
|
||||
|
||||
struct rct_balloon
|
||||
struct rct_balloon : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
uint8_t sprite_width; // 0x14
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
uint8_t pad_16[0xE];
|
||||
uint16_t popped; // 0x24
|
||||
uint8_t time_to_move; // 0x26
|
||||
uint8_t frame; // 0x27
|
||||
|
||||
uint8_t frame; // 0x27
|
||||
uint8_t pad_28[4];
|
||||
uint8_t colour; // 0x2C
|
||||
|
||||
|
@ -121,25 +94,9 @@ struct rct_balloon
|
|||
};
|
||||
assert_struct_size(rct_balloon, 0x2D);
|
||||
|
||||
struct rct_duck
|
||||
struct rct_duck : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
uint8_t sprite_width; // 0x14
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
uint8_t pad_16[0x8];
|
||||
uint8_t sprite_direction; // 0x1E
|
||||
uint8_t pad_1F[0x7];
|
||||
uint8_t pad_1F[0x2];
|
||||
uint16_t frame;
|
||||
uint8_t pad_28[0x8];
|
||||
int16_t target_x; // 0x30
|
||||
|
@ -159,25 +116,9 @@ struct rct_duck
|
|||
};
|
||||
assert_struct_size(rct_duck, 0x49);
|
||||
|
||||
struct rct_jumping_fountain
|
||||
struct rct_jumping_fountain : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8_t sprite_height_negative;
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
uint8_t sprite_width; // 0x14
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
uint8_t pad_16[0x8];
|
||||
uint8_t sprite_direction; // 0x1E
|
||||
uint8_t pad_1F[0x7];
|
||||
uint8_t pad_1F[0x2];
|
||||
uint8_t num_ticks_alive; // 0x26
|
||||
uint8_t frame; // 0x27
|
||||
uint8_t pad_28[0x7]; // 0x28 Originally var_2E was set to direction but it was unused.
|
||||
|
@ -189,23 +130,8 @@ struct rct_jumping_fountain
|
|||
};
|
||||
assert_struct_size(rct_jumping_fountain, 0x48);
|
||||
|
||||
struct rct_money_effect
|
||||
struct rct_money_effect : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
uint8_t sprite_height_negative;
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
uint8_t sprite_width; // 0x14
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
uint8_t pad_16[0xE];
|
||||
uint16_t move_delay; // 0x24
|
||||
uint8_t num_movements; // 0x26
|
||||
uint8_t vertical;
|
||||
|
@ -216,34 +142,10 @@ struct rct_money_effect
|
|||
};
|
||||
assert_struct_size(rct_money_effect, 0x48);
|
||||
|
||||
struct rct_crashed_vehicle_particle
|
||||
struct rct_crashed_vehicle_particle : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
// Height from centre of sprite to bottom
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
// Width from centre of sprite to edge
|
||||
uint8_t sprite_width; // 0x14
|
||||
// Height from centre of sprite to top
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
int16_t sprite_left; // 0x16
|
||||
int16_t sprite_top; // 0x18
|
||||
int16_t sprite_right; // 0x1A
|
||||
int16_t sprite_bottom; // 0x1C
|
||||
uint8_t sprite_direction; // direction of sprite? 0x1e
|
||||
uint8_t pad_1F[3]; // 0x1f
|
||||
uint16_t name_string_idx; // 0x22
|
||||
uint16_t time_to_live; // 0x24
|
||||
uint16_t frame; // 0x26
|
||||
uint16_t time_to_live; // 0x24
|
||||
uint16_t frame; // 0x26
|
||||
uint8_t pad_28[4];
|
||||
uint8_t colour[2];
|
||||
uint16_t crashed_sprite_base; // 0x2E
|
||||
|
@ -257,65 +159,17 @@ struct rct_crashed_vehicle_particle
|
|||
};
|
||||
assert_struct_size(rct_crashed_vehicle_particle, 0x44);
|
||||
|
||||
struct rct_crash_splash
|
||||
struct rct_crash_splash : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
// Height from centre of sprite to bottom
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
// Width from centre of sprite to edge
|
||||
uint8_t sprite_width; // 0x14
|
||||
// Height from centre of sprite to top
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
int16_t sprite_left; // 0x16
|
||||
int16_t sprite_top; // 0x18
|
||||
int16_t sprite_right; // 0x1A
|
||||
int16_t sprite_bottom; // 0x1C
|
||||
uint8_t sprite_direction; // direction of sprite? 0x1e
|
||||
uint8_t pad_1F[3]; // 0x1f
|
||||
uint16_t name_string_idx; // 0x22
|
||||
uint16_t pad_24;
|
||||
uint16_t frame; // 0x26
|
||||
};
|
||||
assert_struct_size(rct_crash_splash, 0x28);
|
||||
|
||||
struct rct_steam_particle
|
||||
struct rct_steam_particle : rct_sprite_common
|
||||
{
|
||||
uint8_t sprite_identifier; // 0x00
|
||||
uint8_t misc_identifier; // 0x01
|
||||
uint16_t next_in_quadrant; // 0x02
|
||||
uint16_t next; // 0x04
|
||||
uint16_t previous; // 0x06
|
||||
uint8_t linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_...
|
||||
// Height from centre of sprite to bottom
|
||||
uint8_t sprite_height_negative; // 0x09
|
||||
uint16_t sprite_index; // 0x0A
|
||||
uint16_t flags; // 0x0C
|
||||
int16_t x; // 0x0E
|
||||
int16_t y; // 0x10
|
||||
int16_t z; // 0x12
|
||||
// Width from centre of sprite to edge
|
||||
uint8_t sprite_width; // 0x14
|
||||
// Height from centre of sprite to top
|
||||
uint8_t sprite_height_positive; // 0x15
|
||||
int16_t sprite_left; // 0x16
|
||||
int16_t sprite_top; // 0x18
|
||||
int16_t sprite_right; // 0x1A
|
||||
int16_t sprite_bottom; // 0x1C
|
||||
uint8_t sprite_direction; // 0x1E
|
||||
uint8_t pad_1F[3]; // 0x1F
|
||||
uint16_t name_string_idx; // 0x22
|
||||
uint16_t time_to_move; // 0x24 Moves +1 z every 3 ticks after intitial 4 ticks
|
||||
uint16_t frame; // 0x26
|
||||
uint16_t time_to_move; // 0x24 Moves +1 z every 3 ticks after intitial 4 ticks
|
||||
uint16_t frame; // 0x26
|
||||
};
|
||||
assert_struct_size(rct_steam_particle, 0x28);
|
||||
|
||||
|
@ -326,7 +180,7 @@ assert_struct_size(rct_steam_particle, 0x28);
|
|||
union rct_sprite
|
||||
{
|
||||
uint8_t pad_00[0x100];
|
||||
rct_unk_sprite unknown;
|
||||
rct_sprite_generic generic;
|
||||
rct_peep peep;
|
||||
rct_litter litter;
|
||||
rct_vehicle vehicle;
|
||||
|
|
Loading…
Reference in New Issue