From a89b352fb2db50296d9d5f3e446bbd490ee661f1 Mon Sep 17 00:00:00 2001 From: Matt Date: Mon, 20 Aug 2018 18:27:40 +0200 Subject: [PATCH] Rename rct_sprite::unknown to rct_sprite::generic --- .../interface/ViewportInteraction.cpp | 8 +- .../windows/TitleCommandEditor.cpp | 4 +- src/openrct2/Editor.cpp | 2 +- src/openrct2/Game.cpp | 4 +- src/openrct2/interface/Viewport.cpp | 20 +- src/openrct2/interface/Window.cpp | 6 +- src/openrct2/paint/sprite/Paint.Misc.cpp | 16 +- src/openrct2/paint/sprite/Paint.Sprite.cpp | 24 +-- src/openrct2/peep/Guest.cpp | 12 +- src/openrct2/peep/Peep.cpp | 8 +- src/openrct2/peep/Staff.cpp | 6 +- src/openrct2/rct1/S4Importer.cpp | 6 +- src/openrct2/rct2/S6Importer.cpp | 2 +- src/openrct2/ride/Vehicle.cpp | 4 +- src/openrct2/world/Balloon.cpp | 4 +- src/openrct2/world/Duck.cpp | 8 +- src/openrct2/world/Fountain.cpp | 6 +- src/openrct2/world/MapAnimation.cpp | 4 +- src/openrct2/world/MoneyEffect.cpp | 2 +- src/openrct2/world/Particle.cpp | 6 +- src/openrct2/world/Sprite.cpp | 200 +++++++++--------- src/openrct2/world/Sprite.h | 27 +-- 22 files changed, 185 insertions(+), 194 deletions(-) diff --git a/src/openrct2-ui/interface/ViewportInteraction.cpp b/src/openrct2-ui/interface/ViewportInteraction.cpp index 6e54b4c112..4935c087ca 100644 --- a/src/openrct2-ui/interface/ViewportInteraction.cpp +++ b/src/openrct2-ui/interface/ViewportInteraction.cpp @@ -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: diff --git a/src/openrct2-ui/windows/TitleCommandEditor.cpp b/src/openrct2-ui/windows/TitleCommandEditor.cpp index 98bbe0eed1..dcd20d47ce 100644 --- a/src/openrct2-ui/windows/TitleCommandEditor.cpp +++ b/src/openrct2-ui/windows/TitleCommandEditor.cpp @@ -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) { diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 8acf49810d..a894ad4fdf 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -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(); diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index a6f97b39ee..b78ceac250 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -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); } } } diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 796af9e810..f0cf1d40e2 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -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; diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index 6efb78bbcd..81f2b435f1 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -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 { diff --git a/src/openrct2/paint/sprite/Paint.Misc.cpp b/src/openrct2/paint/sprite/Paint.Misc.cpp index f74f57ce96..5d36cea41a 100644 --- a/src/openrct2/paint/sprite/Paint.Misc.cpp +++ b/src/openrct2/paint/sprite/Paint.Misc.cpp @@ -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) { diff --git a/src/openrct2/paint/sprite/Paint.Sprite.cpp b/src/openrct2/paint/sprite/Paint.Sprite.cpp index 40db8d55b3..b9fcb37893 100644 --- a/src/openrct2/paint/sprite/Paint.Sprite.cpp +++ b/src/openrct2/paint/sprite/Paint.Sprite.cpp @@ -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); diff --git a/src/openrct2/peep/Guest.cpp b/src/openrct2/peep/Guest.cpp index c64f458b38..82e22ed05e 100644 --- a/src/openrct2/peep/Guest.cpp +++ b/src/openrct2/peep/Guest.cpp @@ -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; diff --git a/src/openrct2/peep/Peep.cpp b/src/openrct2/peep/Peep.cpp index 8c0004e772..7266f4e544 100644 --- a/src/openrct2/peep/Peep.cpp +++ b/src/openrct2/peep/Peep.cpp @@ -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) diff --git a/src/openrct2/peep/Staff.cpp b/src/openrct2/peep/Staff.cpp index a20217d4cf..dfd53bc5f7 100644 --- a/src/openrct2/peep/Staff.cpp +++ b/src/openrct2/peep/Staff.cpp @@ -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); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 59c0857d5c..85695a33ec 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -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; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 44d080ef0e..2f1922f144 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -832,7 +832,7 @@ public: uint16_t numRiders = 0; 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)) diff --git a/src/openrct2/ride/Vehicle.cpp b/src/openrct2/ride/Vehicle.cpp index a7acb5e92b..b910429db8 100644 --- a/src/openrct2/ride/Vehicle.cpp +++ b/src/openrct2/ride/Vehicle.cpp @@ -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); diff --git a/src/openrct2/world/Balloon.cpp b/src/openrct2/world/Balloon.cpp index dcfae4f13f..adc5c5b84f 100644 --- a/src/openrct2/world/Balloon.cpp +++ b/src/openrct2/world/Balloon.cpp @@ -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; diff --git a/src/openrct2/world/Duck.cpp b/src/openrct2/world/Duck.cpp index a3d022f34a..cf21e51876 100644 --- a/src/openrct2/world/Duck.cpp +++ b/src/openrct2/world/Duck.cpp @@ -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); } diff --git a/src/openrct2/world/Fountain.cpp b/src/openrct2/world/Fountain.cpp index 245b440d6b..dbf4afb145 100644 --- a/src/openrct2/world/Fountain.cpp +++ b/src/openrct2/world/Fountain.cpp @@ -142,7 +142,7 @@ 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 + 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,7 +192,7 @@ 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 + int32_t type = jumpingFountain->type == SPRITE_MISC_JUMPING_FOUNTAIN_SNOW ? JUMPING_FOUNTAIN_TYPE_SNOW : JUMPING_FOUNTAIN_TYPE_WATER; return type; } diff --git a/src/openrct2/world/MapAnimation.cpp b/src/openrct2/world/MapAnimation.cpp index 850fd729e9..d785956c61 100644 --- a/src/openrct2/world/MapAnimation.cpp +++ b/src/openrct2/world/MapAnimation.cpp @@ -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; diff --git a/src/openrct2/world/MoneyEffect.cpp b/src/openrct2/world/MoneyEffect.cpp index adf6b26cf0..2af28d036c 100644 --- a/src/openrct2/world/MoneyEffect.cpp +++ b/src/openrct2/world/MoneyEffect.cpp @@ -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; diff --git a/src/openrct2/world/Particle.cpp b/src/openrct2/world/Particle.cpp index 05b25d92f5..2e0033c782 100644 --- a/src/openrct2/world/Particle.cpp +++ b/src/openrct2/world/Particle.cpp @@ -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; } } diff --git a/src/openrct2/world/Sprite.cpp b/src/openrct2/world/Sprite.cpp index 1446c06bc9..5531ad559f 100644 --- a/src/openrct2/world/Sprite.cpp +++ b/src/openrct2/world/Sprite.cpp @@ -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; } } diff --git a/src/openrct2/world/Sprite.h b/src/openrct2/world/Sprite.h index b36ed44813..f6c24ffc17 100644 --- a/src/openrct2/world/Sprite.h +++ b/src/openrct2/world/Sprite.h @@ -41,7 +41,7 @@ enum SPRITE_LIST 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 @@ -62,27 +62,25 @@ struct rct_sprite_common int16_t sprite_right; // 0x1A int16_t sprite_bottom; // 0x1C uint8_t sprite_direction; // 0x1e -}; - -struct rct_unk_sprite : rct_sprite_common -{ 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); // 9 bytes +assert_struct_size(rct_sprite_generic, 0x28); // 9 bytes struct rct_litter : rct_sprite_common { - uint8_t pad_1F[5]; uint32_t creationTick; // 0x24 }; assert_struct_size(rct_litter, 0x28); struct rct_balloon : rct_sprite_common { - uint8_t pad_16[0x05]; uint16_t popped; // 0x24 uint8_t time_to_move; // 0x26 @@ -98,7 +96,7 @@ assert_struct_size(rct_balloon, 0x2D); struct rct_duck : rct_sprite_common { - uint8_t pad_1F[0x7]; + uint8_t pad_1F[0x2]; uint16_t frame; uint8_t pad_28[0x8]; int16_t target_x; // 0x30 @@ -120,7 +118,7 @@ assert_struct_size(rct_duck, 0x49); struct rct_jumping_fountain : rct_sprite_common { - 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. @@ -134,7 +132,6 @@ assert_struct_size(rct_jumping_fountain, 0x48); struct rct_money_effect : rct_sprite_common { - uint8_t pad_16[0x5]; uint16_t move_delay; // 0x24 uint8_t num_movements; // 0x26 uint8_t vertical; @@ -147,8 +144,6 @@ assert_struct_size(rct_money_effect, 0x48); struct rct_crashed_vehicle_particle : rct_sprite_common { - uint8_t pad_1F[3]; // 0x1f - uint16_t name_string_idx; // 0x22 uint16_t time_to_live; // 0x24 uint16_t frame; // 0x26 uint8_t pad_28[4]; @@ -166,8 +161,6 @@ assert_struct_size(rct_crashed_vehicle_particle, 0x44); struct rct_crash_splash : rct_sprite_common { - uint8_t pad_1F[3]; // 0x1f - uint16_t name_string_idx; // 0x22 uint16_t pad_24; uint16_t frame; // 0x26 }; @@ -175,8 +168,6 @@ assert_struct_size(rct_crash_splash, 0x28); struct rct_steam_particle : rct_sprite_common { - 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 }; @@ -189,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;