From a5a63f839aca539ad75abf09a765e590e5ba973b Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Tue, 23 Mar 2021 11:58:09 +0100 Subject: [PATCH] Allow passing ImageId into gfx_draw_sprite() --- src/openrct2-ui/interface/Widget.cpp | 8 ++-- src/openrct2-ui/scripting/CustomWindow.cpp | 2 +- .../scripting/ScGraphicsContext.hpp | 3 +- src/openrct2-ui/windows/About.cpp | 4 +- src/openrct2-ui/windows/Cheats.cpp | 9 ++-- src/openrct2-ui/windows/Dropdown.cpp | 5 +-- .../windows/EditorBottomToolbar.cpp | 10 ++--- .../windows/EditorInventionsList.cpp | 2 +- .../windows/EditorObjectSelection.cpp | 6 +-- .../windows/EditorObjectiveOptions.cpp | 4 +- .../windows/EditorScenarioOptions.cpp | 6 +-- src/openrct2-ui/windows/Finances.cpp | 3 +- src/openrct2-ui/windows/Footpath.cpp | 2 +- src/openrct2-ui/windows/GameBottomToolbar.cpp | 43 +++++++------------ src/openrct2-ui/windows/Guest.cpp | 32 ++++++-------- src/openrct2-ui/windows/GuestList.cpp | 15 ++++--- src/openrct2-ui/windows/InstallTrack.cpp | 2 +- src/openrct2-ui/windows/Land.cpp | 4 +- src/openrct2-ui/windows/Map.cpp | 11 +++-- src/openrct2-ui/windows/MapGen.cpp | 3 +- src/openrct2-ui/windows/Multiplayer.cpp | 3 +- src/openrct2-ui/windows/NewRide.cpp | 5 +-- src/openrct2-ui/windows/News.cpp | 16 +++---- src/openrct2-ui/windows/NewsOptions.cpp | 3 +- src/openrct2-ui/windows/Options.cpp | 2 +- src/openrct2-ui/windows/Park.cpp | 33 +++++++------- src/openrct2-ui/windows/Player.cpp | 8 ++-- src/openrct2-ui/windows/Research.cpp | 3 +- src/openrct2-ui/windows/Ride.cpp | 30 ++++++------- src/openrct2-ui/windows/RideList.cpp | 6 +-- src/openrct2-ui/windows/ScenarioSelect.cpp | 2 +- src/openrct2-ui/windows/ServerList.cpp | 4 +- src/openrct2-ui/windows/ShortcutKeys.cpp | 2 +- src/openrct2-ui/windows/Staff.cpp | 21 +++------ src/openrct2-ui/windows/StaffList.cpp | 12 +++--- src/openrct2-ui/windows/TitleEditor.cpp | 5 +-- src/openrct2-ui/windows/TitleLogo.cpp | 4 +- src/openrct2-ui/windows/TopToolbar.cpp | 30 +++++-------- src/openrct2-ui/windows/TrackDesignPlace.cpp | 2 +- src/openrct2-ui/windows/TrackList.cpp | 2 +- src/openrct2/Intro.cpp | 24 +++++------ src/openrct2/drawing/Drawing.h | 1 + src/openrct2/drawing/NewDrawing.cpp | 5 +++ 43 files changed, 183 insertions(+), 214 deletions(-) diff --git a/src/openrct2-ui/interface/Widget.cpp b/src/openrct2-ui/interface/Widget.cpp index 957450ea75..4c883a04c7 100644 --- a/src/openrct2-ui/interface/Widget.cpp +++ b/src/openrct2-ui/interface/Widget.cpp @@ -135,7 +135,7 @@ static void WidgetFrameDraw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetind // Draw the resize sprite at the bottom right corner leftTop = w->windowPos + ScreenCoordsXY{ widget->right - 18, widget->bottom - 18 }; - gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), leftTop, 0); + gfx_draw_sprite(dpi, ImageId(SPR_RESIZE, colour & 0x7F), leftTop); } /** @@ -166,7 +166,7 @@ static void WidgetResizeDraw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetin // Draw the resize sprite at the bottom right corner leftTop = w->windowPos + ScreenCoordsXY{ widget->right - 18, widget->bottom - 18 }; - gfx_draw_sprite(dpi, SPR_RESIZE | IMAGE_TYPE_REMAP | ((colour & 0x7F) << 19), leftTop, 0); + gfx_draw_sprite(dpi, ImageId(SPR_RESIZE, colour & 0x7F), leftTop); } /** @@ -246,7 +246,7 @@ static void WidgetTabDraw(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetindex uint32_t image = widget->image + 2; // Draw disabled image - gfx_draw_sprite(dpi, image | (colour << 19), leftTop, 0); + gfx_draw_sprite(dpi, ImageId(image, colour), leftTop); } /** @@ -835,7 +835,7 @@ static void WidgetDrawImage(rct_drawpixelinfo* dpi, rct_window* w, rct_widgetind else image |= colour << 19; - gfx_draw_sprite(dpi, image, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId::FromUInt32(image), screenCoords); } } diff --git a/src/openrct2-ui/scripting/CustomWindow.cpp b/src/openrct2-ui/scripting/CustomWindow.cpp index 673c90a224..4525eda422 100644 --- a/src/openrct2-ui/scripting/CustomWindow.cpp +++ b/src/openrct2-ui/scripting/CustomWindow.cpp @@ -866,7 +866,7 @@ namespace OpenRCT2::Ui::Windows auto imageOffset = frame % tab.imageFrameCount; image = image.WithIndex(image.GetIndex() + imageOffset); } - gfx_draw_sprite(&dpi, image.ToUInt32(), leftTop, image.GetTertiary()); + gfx_draw_sprite(&dpi, image, leftTop); } tabIndex++; } diff --git a/src/openrct2-ui/scripting/ScGraphicsContext.hpp b/src/openrct2-ui/scripting/ScGraphicsContext.hpp index c89f9c313d..046ad972e6 100644 --- a/src/openrct2-ui/scripting/ScGraphicsContext.hpp +++ b/src/openrct2-ui/scripting/ScGraphicsContext.hpp @@ -227,7 +227,8 @@ namespace OpenRCT2::Scripting img = img.WithSecondary(*_secondaryColour); } } - gfx_draw_sprite(&_dpi, static_cast(img.ToUInt32()), { x, y }, _ternaryColour.value_or(0)); + + gfx_draw_sprite(&_dpi, img.WithTertiary(_ternaryColour.value_or(0)), { x, y }); } void line(int32_t x1, int32_t y1, int32_t x2, int32_t y2) diff --git a/src/openrct2-ui/windows/About.cpp b/src/openrct2-ui/windows/About.cpp index 077aa81677..a2ed0f5b34 100644 --- a/src/openrct2-ui/windows/About.cpp +++ b/src/openrct2-ui/windows/About.cpp @@ -200,7 +200,7 @@ static void window_about_openrct2_paint(rct_window* w, rct_drawpixelinfo* dpi) + lineHeight; rct_size16 logoSize = gfx_get_sprite_size(SPR_G2_LOGO); - gfx_draw_sprite(dpi, SPR_G2_LOGO, aboutCoords - ScreenCoordsXY{ logoSize.width / 2, 0 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_LOGO), aboutCoords - ScreenCoordsXY{ logoSize.width / 2, 0 }); aboutCoords.y += logoSize.height + lineHeight * 2; // About OpenRCT2 text @@ -297,7 +297,7 @@ static void window_about_rct2_paint(rct_window* w, rct_drawpixelinfo* dpi) DrawTextBasic(dpi, screenCoords, STR_LICENSED_TO_INFOGRAMES_INTERACTIVE_INC, {}, { TextAlignment::CENTRE }); // Images - gfx_draw_sprite(dpi, SPR_CREDITS_CHRIS_SAWYER_SMALL, { w->windowPos.x + 92, yPage + 24 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_CREDITS_CHRIS_SAWYER_SMALL), { w->windowPos.x + 92, yPage + 24 }); // Licence } diff --git a/src/openrct2-ui/windows/Cheats.cpp b/src/openrct2-ui/windows/Cheats.cpp index 9af8eb14f6..653db49cc9 100644 --- a/src/openrct2-ui/windows/Cheats.cpp +++ b/src/openrct2-ui/windows/Cheats.cpp @@ -754,7 +754,7 @@ private: if (page == WINDOW_CHEATS_PAGE_MONEY) sprite_idx += (frame_no / 2) % 8; gfx_draw_sprite( - &dpi, sprite_idx, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].left, widgets[WIDX_TAB_1].top }, 0); + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].left, widgets[WIDX_TAB_1].top }); } // Guests tab @@ -764,15 +764,14 @@ private: if (page == WINDOW_CHEATS_PAGE_GUESTS) sprite_idx += (frame_no / 3) % 8; gfx_draw_sprite( - &dpi, sprite_idx, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }, 0); + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }); } // Misc tab if (!IsWidgetDisabled(WIDX_TAB_3)) { - uint32_t sprite_idx = SPR_TAB_PARK; gfx_draw_sprite( - &dpi, sprite_idx, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_3].left, widgets[WIDX_TAB_3].top }, 0); + &dpi, ImageId(SPR_TAB_PARK), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_3].left, widgets[WIDX_TAB_3].top }); } // Rides tab @@ -782,7 +781,7 @@ private: if (page == WINDOW_CHEATS_PAGE_RIDES) sprite_idx += (frame_no / 4) % 16; gfx_draw_sprite( - &dpi, sprite_idx, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_4].left, widgets[WIDX_TAB_4].top }, 0); + &dpi, ImageId(sprite_idx), windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_4].left, widgets[WIDX_TAB_4].top }); } } diff --git a/src/openrct2-ui/windows/Dropdown.cpp b/src/openrct2-ui/windows/Dropdown.cpp index fe313ec380..a8ea39dd92 100644 --- a/src/openrct2-ui/windows/Dropdown.cpp +++ b/src/openrct2-ui/windows/Dropdown.cpp @@ -345,9 +345,8 @@ static void window_dropdown_paint(rct_window* w, rct_drawpixelinfo* dpi) image++; gfx_draw_sprite( - dpi, image, - w->windowPos + ScreenCoordsXY{ 2 + (cell_x * _dropdown_item_width), 2 + (cell_y * _dropdown_item_height) }, - 0); + dpi, ImageId::FromUInt32(image), + w->windowPos + ScreenCoordsXY{ 2 + (cell_x * _dropdown_item_width), 2 + (cell_y * _dropdown_item_height) }); } else { diff --git a/src/openrct2-ui/windows/EditorBottomToolbar.cpp b/src/openrct2-ui/windows/EditorBottomToolbar.cpp index 86ee4d289f..ddfb200789 100644 --- a/src/openrct2-ui/windows/EditorBottomToolbar.cpp +++ b/src/openrct2-ui/windows/EditorBottomToolbar.cpp @@ -441,11 +441,10 @@ void window_editor_bottom_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) if (drawPreviousButton) { gfx_draw_sprite( - dpi, SPR_PREVIOUS, + dpi, ImageId(SPR_PREVIOUS), w->windowPos + ScreenCoordsXY{ window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].left + 6, - window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].top + 6 }, - 0); + window_editor_bottom_toolbar_widgets[WIDX_PREVIOUS_IMAGE].top + 6 }); colour_t textColour = NOT_TRANSLUCENT(w->colours[1]); if (gHoverWidget.window_classification == WC_BOTTOM_TOOLBAR @@ -471,11 +470,10 @@ void window_editor_bottom_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) if ((drawPreviousButton || drawNextButton) && gS6Info.editor_step != EditorStep::RollercoasterDesigner) { gfx_draw_sprite( - dpi, SPR_NEXT, + dpi, ImageId(SPR_NEXT), w->windowPos + ScreenCoordsXY{ window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].right - 29, - window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].top + 6 }, - 0); + window_editor_bottom_toolbar_widgets[WIDX_NEXT_IMAGE].top + 6 }); colour_t textColour = NOT_TRANSLUCENT(w->colours[1]); diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index f532f1db8e..5423b56611 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -504,7 +504,7 @@ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo // Tab image auto screenPos = w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }; - gfx_draw_sprite(dpi, SPR_TAB_FINANCES_RESEARCH_0 + (w->frame_no / 2) % 8, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TAB_FINANCES_RESEARCH_0 + (w->frame_no / 2) % 8), screenPos); // Pre-researched items label screenPos = w->windowPos diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index f6fef734f7..f96e268cb2 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -953,9 +953,9 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf widget = &w->widgets[WIDX_TAB_1 + i]; if (widget->type != WindowWidgetType::Empty) { - auto image = ObjectSelectionPages[i].Image; + auto image = ImageId(ObjectSelectionPages[i].Image); auto screenPos = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, image, screenPos, 0); + gfx_draw_sprite(dpi, image, screenPos); } } @@ -983,7 +983,7 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf spriteIndex += (i == 4 ? ThrillRidesTabAnimationSequence[frame] : frame); auto screenPos = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, spriteIndex | (w->colours[1] << 19), screenPos, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex, w->colours[1]), screenPos); } } diff --git a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp index cf7037e82a..baba696237 100644 --- a/src/openrct2-ui/windows/EditorObjectiveOptions.cpp +++ b/src/openrct2-ui/windows/EditorObjectiveOptions.cpp @@ -267,7 +267,7 @@ static void window_editor_objective_options_draw_tab_images(rct_window* w, rct_d if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_MAIN) spriteIndex += (w->frame_no / 4) % 16; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top }); // Tab 2 if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) @@ -277,7 +277,7 @@ static void window_editor_objective_options_draw_tab_images(rct_window* w, rct_d if (w->page == WINDOW_EDITOR_OBJECTIVE_OPTIONS_PAGE_RIDES) spriteIndex += (w->frame_no / 4) % 16; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top }); } } diff --git a/src/openrct2-ui/windows/EditorScenarioOptions.cpp b/src/openrct2-ui/windows/EditorScenarioOptions.cpp index ca9a2bac0e..21b811ef66 100644 --- a/src/openrct2-ui/windows/EditorScenarioOptions.cpp +++ b/src/openrct2-ui/windows/EditorScenarioOptions.cpp @@ -376,7 +376,7 @@ static void window_editor_scenario_options_draw_tab_images(rct_window* w, rct_dr if (w->page == WINDOW_EDITOR_SCENARIO_OPTIONS_PAGE_FINANCIAL) spriteIndex += (w->frame_no / 2) % 8; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top }); // Tab 2 widget = &w->widgets[WIDX_TAB_2]; @@ -384,12 +384,12 @@ static void window_editor_scenario_options_draw_tab_images(rct_window* w, rct_dr if (w->page == WINDOW_EDITOR_SCENARIO_OPTIONS_PAGE_GUESTS) spriteIndex += (w->frame_no / 4) % 8; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top }); // Tab 3 widget = &w->widgets[WIDX_TAB_3]; spriteIndex = SPR_TAB_PARK; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->left, widget->top }, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->left, widget->top }); } /** diff --git a/src/openrct2-ui/windows/Finances.cpp b/src/openrct2-ui/windows/Finances.cpp index 3b4c2ef5f6..1aec370fa6 100644 --- a/src/openrct2-ui/windows/Finances.cpp +++ b/src/openrct2-ui/windows/Finances.cpp @@ -1364,7 +1364,8 @@ static void window_finances_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/Footpath.cpp b/src/openrct2-ui/windows/Footpath.cpp index 1854c3e1e5..bafcfb616f 100644 --- a/src/openrct2-ui/windows/Footpath.cpp +++ b/src/openrct2-ui/windows/Footpath.cpp @@ -612,7 +612,7 @@ static void window_footpath_paint(rct_window* w, rct_drawpixelinfo* dpi) screenCoords = w->windowPos + ScreenCoordsXY{ window_footpath_widgets[WIDX_CONSTRUCT].midX(), window_footpath_widgets[WIDX_CONSTRUCT].bottom - 60 }; - gfx_draw_sprite(dpi, image, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image), screenCoords); // Draw build this... label screenCoords = w->windowPos diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 3135435fe5..054aa5e681 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -472,8 +472,8 @@ static void window_game_bottom_toolbar_draw_park_rating( } // Draw thumbs on the sides - gfx_draw_sprite(dpi, SPR_RATING_LOW, { x - 14, y }, 0); - gfx_draw_sprite(dpi, SPR_RATING_HIGH, { x + 114, y }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_RATING_LOW), { x - 14, y }); + gfx_draw_sprite(dpi, ImageId(SPR_RATING_HIGH), { x + 114, y }); } static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, rct_window* w) @@ -528,7 +528,7 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, // Current weather auto currentWeatherSpriteId = climate_get_weather_sprite_id(gClimateCurrent); - gfx_draw_sprite(dpi, currentWeatherSpriteId, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(currentWeatherSpriteId), screenCoords); // Next weather auto nextWeatherSpriteId = climate_get_weather_sprite_id(gClimateNext); @@ -536,8 +536,8 @@ static void window_game_bottom_toolbar_draw_right_panel(rct_drawpixelinfo* dpi, { if (gClimateUpdateTimer < 960) { - gfx_draw_sprite(dpi, SPR_NEXT_WEATHER, screenCoords + ScreenCoordsXY{ 27, 5 }, 0); - gfx_draw_sprite(dpi, nextWeatherSpriteId, screenCoords + ScreenCoordsXY{ 40, 0 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_NEXT_WEATHER), screenCoords + ScreenCoordsXY{ 27, 5 }); + gfx_draw_sprite(dpi, ImageId(nextWeatherSpriteId), screenCoords + ScreenCoordsXY{ 40, 0 }); } } } @@ -573,7 +573,7 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc switch (newsItem->Type) { case News::ItemType::Ride: - gfx_draw_sprite(dpi, SPR_RIDE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_RIDE), screenCoords); break; case News::ItemType::PeepOnRide: case News::ItemType::Peep: @@ -602,48 +602,37 @@ static void window_game_bottom_toolbar_draw_news_item(rct_drawpixelinfo* dpi, rc image_id_base += w->frame_no & 0xFFFFFFFC; image_id_base++; - uint32_t image_id = image_id_base; - image_id |= SPRITE_ID_PALETTE_COLOUR_2(peep->TshirtColour, peep->TrousersColour); - - gfx_draw_sprite(&cliped_dpi, image_id, clipCoords, 0); + auto image_id = ImageId(image_id_base, peep->TshirtColour, peep->TrousersColour); + gfx_draw_sprite(&cliped_dpi, image_id, clipCoords); if (image_id_base >= 0x2A1D && image_id_base < 0x2A3D) { - image_id_base += 32; - image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour); - - gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); + gfx_draw_sprite(&cliped_dpi, ImageId(image_id_base + 32, peep->BalloonColour), clipCoords); } else if (image_id_base >= 0x2BBD && image_id_base < 0x2BDD) { - image_id_base += 32; - image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour); - - gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); + gfx_draw_sprite(&cliped_dpi, ImageId(image_id_base + 32, peep->UmbrellaColour), clipCoords); } else if (image_id_base >= 0x29DD && image_id_base < 0x29FD) { - image_id_base += 32; - image_id_base |= SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour); - - gfx_draw_sprite(&cliped_dpi, image_id_base, clipCoords, 0); + gfx_draw_sprite(&cliped_dpi, ImageId(image_id_base + 32, peep->HatColour), clipCoords); } break; } case News::ItemType::Money: - gfx_draw_sprite(dpi, SPR_FINANCE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_FINANCE), screenCoords); break; case News::ItemType::Research: - gfx_draw_sprite(dpi, (newsItem->Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE), screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(newsItem->Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE), screenCoords); break; case News::ItemType::Peeps: - gfx_draw_sprite(dpi, SPR_GUESTS, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_GUESTS), screenCoords); break; case News::ItemType::Award: - gfx_draw_sprite(dpi, SPR_AWARD, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_AWARD), screenCoords); break; case News::ItemType::Graph: - gfx_draw_sprite(dpi, SPR_GRAPH, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_GRAPH), screenCoords); break; case News::ItemType::Null: case News::ItemType::Blank: diff --git a/src/openrct2-ui/windows/Guest.cpp b/src/openrct2-ui/windows/Guest.cpp index 2ea9124588..11389c86d0 100644 --- a/src/openrct2-ui/windows/Guest.cpp +++ b/src/openrct2-ui/windows/Guest.cpp @@ -772,31 +772,25 @@ static void window_guest_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dp } animationFrame += animationFrameOffset; - int32_t sprite_id = animationFrame | SPRITE_ID_PALETTE_COLOUR_2(peep->TshirtColour, peep->TrousersColour); - gfx_draw_sprite(&clip_dpi, sprite_id, screenCoords, 0); + auto sprite_id = ImageId(animationFrame, peep->TshirtColour, peep->TrousersColour); + gfx_draw_sprite(&clip_dpi, sprite_id, screenCoords); // If holding a balloon if (animationFrame >= 0x2A1D && animationFrame < 0x2A3D) { - animationFrame += 32; - animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour); - gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(animationFrame + 32, peep->BalloonColour), screenCoords); } // If holding umbrella if (animationFrame >= 0x2BBD && animationFrame < 0x2BDD) { - animationFrame += 32; - animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour); - gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(animationFrame + 32, peep->UmbrellaColour), screenCoords); } // If wearing hat if (animationFrame >= 0x29DD && animationFrame < 0x29FD) { - animationFrame += 32; - animationFrame |= SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour); - gfx_draw_sprite(&clip_dpi, animationFrame, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(animationFrame + 32, peep->HatColour), screenCoords); } } @@ -835,7 +829,7 @@ static void window_guest_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) break; } } - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -857,7 +851,7 @@ static void window_guest_rides_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) image_id += (w->frame_no / 4) & 0xF; } - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -879,7 +873,7 @@ static void window_guest_finance_tab_paint(rct_window* w, rct_drawpixelinfo* dpi image_id += (w->frame_no / 2) & 0x7; } - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -901,7 +895,7 @@ static void window_guest_thoughts_tab_paint(rct_window* w, rct_drawpixelinfo* dp image_id += (w->frame_no / 2) & 0x7; } - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -916,9 +910,7 @@ static void window_guest_inventory_tab_paint(rct_window* w, rct_drawpixelinfo* d rct_widget* widget = &w->widgets[WIDX_TAB_6]; auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - int32_t image_id = SPR_TAB_GUEST_INVENTORY; - - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TAB_GUEST_INVENTORY), screenCoords); } static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) @@ -935,7 +927,7 @@ static void window_guest_debug_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) image_id += (w->frame_no / 2) & 0x3; } - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -960,7 +952,7 @@ void window_guest_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) rct_viewport* viewport = w->viewport; if (viewport->flags & VIEWPORT_FLAG_SOUND_ON) { - gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos + ScreenCoordsXY{ 2, 2 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_HEARING_VIEWPORT), w->windowPos + ScreenCoordsXY{ 2, 2 }); } } diff --git a/src/openrct2-ui/windows/GuestList.cpp b/src/openrct2-ui/windows/GuestList.cpp index d638064585..76ef0c53a0 100644 --- a/src/openrct2-ui/windows/GuestList.cpp +++ b/src/openrct2-ui/windows/GuestList.cpp @@ -643,12 +643,15 @@ private: auto i = (_selectedTab == TabId::Individual ? _tabAnimationIndex & ~3 : 0); i += GetPeepAnimation(PeepSpriteType::Normal).base_image + 1; i |= 0xA1600000; - gfx_draw_sprite(&dpi, i, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].midX(), widgets[WIDX_TAB_1].bottom - 6 }, 0); + gfx_draw_sprite( + &dpi, ImageId::FromUInt32(i), + windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_1].midX(), widgets[WIDX_TAB_1].bottom - 6 }); // Tab 2 image i = (_selectedTab == TabId::Summarised ? _tabAnimationIndex / 4 : 0); gfx_draw_sprite( - &dpi, SPR_TAB_GUESTS_0 + i, windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }, 0); + &dpi, ImageId(SPR_TAB_GUESTS_0 + i), + windowPos + ScreenCoordsXY{ widgets[WIDX_TAB_2].left, widgets[WIDX_TAB_2].top }); } void DrawScrollIndividual(rct_drawpixelinfo& dpi) @@ -683,11 +686,11 @@ private: { case GuestViewType::Actions: // Guest face - gfx_draw_sprite(&dpi, get_peep_face_sprite_small(peep), { 118, y + 1 }, 0); + gfx_draw_sprite(&dpi, ImageId(get_peep_face_sprite_small(peep)), { 118, y + 1 }); // Tracking icon if (peep->PeepFlags & PEEP_FLAGS_TRACKING) - gfx_draw_sprite(&dpi, STR_ENTER_SELECTION_SIZE, { 112, y + 1 }, 0); + gfx_draw_sprite(&dpi, ImageId(STR_ENTER_SELECTION_SIZE), { 112, y + 1 }); // Action ft = Formatter(); @@ -743,8 +746,8 @@ private: for (uint32_t j = 0; j < std::size(group.Faces) && j < group.NumGuests; j++) { gfx_draw_sprite( - &dpi, group.Faces[j] + SPR_PEEP_SMALL_FACE_VERY_VERY_UNHAPPY, { static_cast(j) * 8, y + 12 }, - 0); + &dpi, ImageId(group.Faces[j] + SPR_PEEP_SMALL_FACE_VERY_VERY_UNHAPPY), + { static_cast(j) * 8, y + 12 }); } // Draw action diff --git a/src/openrct2-ui/windows/InstallTrack.cpp b/src/openrct2-ui/windows/InstallTrack.cpp index c6f241b05b..992e619a4b 100644 --- a/src/openrct2-ui/windows/InstallTrack.cpp +++ b/src/openrct2-ui/windows/InstallTrack.cpp @@ -208,7 +208,7 @@ static void window_install_track_paint(rct_window* w, rct_drawpixelinfo* dpi) g1temp.flags = G1_FLAG_BMP; gfx_set_g1_element(SPR_TEMP, &g1temp); drawing_engine_invalidate_image(SPR_TEMP); - gfx_draw_sprite(dpi, SPR_TEMP, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TEMP), screenPos); screenPos = w->windowPos + ScreenCoordsXY{ widget->midX(), widget->bottom - 12 }; diff --git a/src/openrct2-ui/windows/Land.cpp b/src/openrct2-ui/windows/Land.cpp index d36ed53ca6..8b1d34b6b1 100644 --- a/src/openrct2-ui/windows/Land.cpp +++ b/src/openrct2-ui/windows/Land.cpp @@ -272,8 +272,8 @@ public: else if (gLandMountainMode) { screenCoords = { windowPos.x + previewWidget->left, windowPos.y + previewWidget->top }; - int32_t sprite = gLandToolSize % 2 == 0 ? SPR_G2_MOUNTAIN_TOOL_EVEN : SPR_G2_MOUNTAIN_TOOL_ODD; - gfx_draw_sprite(&dpi, sprite, screenCoords, 0); + auto sprite = ImageId(gLandToolSize % 2 == 0 ? SPR_G2_MOUNTAIN_TOOL_EVEN : SPR_G2_MOUNTAIN_TOOL_ODD); + gfx_draw_sprite(&dpi, sprite, screenCoords); WidgetDraw(&dpi, this, WIDX_DECREMENT); WidgetDraw(&dpi, this, WIDX_INCREMENT); } diff --git a/src/openrct2-ui/windows/Map.cpp b/src/openrct2-ui/windows/Map.cpp index 41eb23f912..b57e916f5b 100644 --- a/src/openrct2-ui/windows/Map.cpp +++ b/src/openrct2-ui/windows/Map.cpp @@ -832,9 +832,7 @@ static void window_map_paint(rct_window* w, rct_drawpixelinfo* dpi) screenCoords = w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_PEOPLE_STARTING_POSITION].left + 12, w->widgets[WIDX_PEOPLE_STARTING_POSITION].top + 18 }; - gfx_draw_sprite( - dpi, IMAGE_TYPE_REMAP | IMAGE_TYPE_REMAP_2_PLUS | (COLOUR_LIGHT_BROWN << 24) | (COLOUR_BRIGHT_RED << 19) | SPR_6410, - screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_6410, COLOUR_BRIGHT_RED, COLOUR_LIGHT_BROWN), screenCoords); } if (!(gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR) && !gCheatsSandboxMode) @@ -886,7 +884,7 @@ static void window_map_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32_ g1temp.y_offset = -8; gfx_set_g1_element(SPR_TEMP, &g1temp); drawing_engine_invalidate_image(SPR_TEMP); - gfx_draw_sprite(dpi, SPR_TEMP, { 0, 0 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TEMP), { 0, 0 }); if (w->selected_tab == PAGE_PEEPS) { @@ -1007,7 +1005,8 @@ static void window_map_draw_tab_images(rct_window* w, rct_drawpixelinfo* dpi) image += w->list_information_type / 4; gfx_draw_sprite( - dpi, image, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_PEOPLE_TAB].left, w->widgets[WIDX_PEOPLE_TAB].top }, 0); + dpi, ImageId(image), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_PEOPLE_TAB].left, w->widgets[WIDX_PEOPLE_TAB].top }); // Ride/stall tab image (animated) image = SPR_TAB_RIDE_0; @@ -1015,7 +1014,7 @@ static void window_map_draw_tab_images(rct_window* w, rct_drawpixelinfo* dpi) image += w->list_information_type / 4; gfx_draw_sprite( - dpi, image, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_RIDES_TAB].left, w->widgets[WIDX_RIDES_TAB].top }, 0); + dpi, ImageId(image), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_RIDES_TAB].left, w->widgets[WIDX_RIDES_TAB].top }); } /** diff --git a/src/openrct2-ui/windows/MapGen.cpp b/src/openrct2-ui/windows/MapGen.cpp index b89d06a1a8..0acc3d61a4 100644 --- a/src/openrct2-ui/windows/MapGen.cpp +++ b/src/openrct2-ui/windows/MapGen.cpp @@ -1319,7 +1319,8 @@ static void window_mapgen_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w, } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/Multiplayer.cpp b/src/openrct2-ui/windows/Multiplayer.cpp index a17bdf19cb..04cc4b60a0 100644 --- a/src/openrct2-ui/windows/Multiplayer.cpp +++ b/src/openrct2-ui/windows/Multiplayer.cpp @@ -999,7 +999,8 @@ static void window_multiplayer_draw_tab_image(rct_window* w, rct_drawpixelinfo* } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/NewRide.cpp b/src/openrct2-ui/windows/NewRide.cpp index 11739f1077..dc804fa722 100644 --- a/src/openrct2-ui/windows/NewRide.cpp +++ b/src/openrct2-ui/windows/NewRide.cpp @@ -613,10 +613,9 @@ static void window_new_ride_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w spriteIndex += page == WINDOW_NEW_RIDE_PAGE_THRILL ? ThrillRidesTabAnimationSequence[frame] : frame; - spriteIndex |= w->colours[1] << 19; - gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex, w->colours[1]), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/News.cpp b/src/openrct2-ui/windows/News.cpp index abd2dbbd91..0101053543 100644 --- a/src/openrct2-ui/windows/News.cpp +++ b/src/openrct2-ui/windows/News.cpp @@ -268,7 +268,7 @@ static void window_news_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32 switch (newsItem.Type) { case News::ItemType::Ride: - gfx_draw_sprite(dpi, SPR_RIDE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_RIDE), screenCoords); break; case News::ItemType::Peep: case News::ItemType::PeepOnRide: @@ -301,23 +301,23 @@ static void window_news_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32 image_id += 0xA0000001; image_id |= (peep->TshirtColour << 19) | (peep->TrousersColour << 24); - gfx_draw_sprite(&cliped_dpi, image_id, clipCoords, 0); + gfx_draw_sprite(&cliped_dpi, ImageId::FromUInt32(image_id), clipCoords); break; } case News::ItemType::Money: - gfx_draw_sprite(dpi, SPR_FINANCE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_FINANCE), screenCoords); break; case News::ItemType::Research: - gfx_draw_sprite(dpi, newsItem.Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(newsItem.Assoc < 0x10000 ? SPR_NEW_SCENERY : SPR_NEW_RIDE), screenCoords); break; case News::ItemType::Peeps: - gfx_draw_sprite(dpi, SPR_GUESTS, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_GUESTS), screenCoords); break; case News::ItemType::Award: - gfx_draw_sprite(dpi, SPR_AWARD, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_AWARD), screenCoords); break; case News::ItemType::Graph: - gfx_draw_sprite(dpi, SPR_GRAPH, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_GRAPH), screenCoords); break; case News::ItemType::Null: case News::ItemType::Blank: @@ -339,7 +339,7 @@ static void window_news_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi, int32 press = 0x20; } gfx_fill_rect_inset(dpi, { screenCoords, screenCoords + ScreenCoordsXY{ 23, 23 } }, w->colours[2], press); - gfx_draw_sprite(dpi, SPR_LOCATE, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_LOCATE), screenCoords); } y += itemHeight; diff --git a/src/openrct2-ui/windows/NewsOptions.cpp b/src/openrct2-ui/windows/NewsOptions.cpp index d0e1c54842..c6860bd317 100644 --- a/src/openrct2-ui/windows/NewsOptions.cpp +++ b/src/openrct2-ui/windows/NewsOptions.cpp @@ -266,7 +266,8 @@ static void window_news_options_draw_tab_image(rct_window* w, rct_drawpixelinfo* } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index f8e20dda26..c7626fce89 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -2324,7 +2324,7 @@ static void window_options_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w, } // Draw normal, enabled sprite. - gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex), screenCoords); } else { diff --git a/src/openrct2-ui/windows/Park.cpp b/src/openrct2-ui/windows/Park.cpp index 42b175c1b9..8b2200e49f 100644 --- a/src/openrct2-ui/windows/Park.cpp +++ b/src/openrct2-ui/windows/Park.cpp @@ -719,7 +719,7 @@ static void window_park_entrance_paint(rct_window* w, rct_drawpixelinfo* dpi) { window_draw_viewport(dpi, w); if (w->viewport->flags & VIEWPORT_FLAG_SOUND_ON) - gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos + ScreenCoordsXY{ 2, 2 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_HEARING_VIEWPORT), w->windowPos + ScreenCoordsXY{ 2, 2 }); } // Draw park closed / open label @@ -1618,7 +1618,7 @@ static void window_park_awards_paint(rct_window* w, rct_drawpixelinfo* dpi) if (award->Time == 0) continue; - gfx_draw_sprite(dpi, ParkAwards[award->Type].sprite, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(ParkAwards[award->Type].sprite), screenCoords); DrawTextWrapped(dpi, screenCoords + ScreenCoordsXY{ 34, 6 }, 180, ParkAwards[award->Type].text); screenCoords.y += 32; @@ -1696,8 +1696,8 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) // Entrance tab if (!(w->disabled_widgets & (1 << WIDX_TAB_1))) gfx_draw_sprite( - dpi, SPR_TAB_PARK_ENTRANCE, - w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }, 0); + dpi, ImageId(SPR_TAB_PARK_ENTRANCE), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }); // Rating tab if (!(w->disabled_widgets & (1 << WIDX_TAB_2))) @@ -1706,13 +1706,13 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_PARK_PAGE_RATING) sprite_idx += (w->frame_no / 8) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left, w->widgets[WIDX_TAB_2].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left, w->widgets[WIDX_TAB_2].top }); gfx_draw_sprite( - dpi, SPR_RATING_HIGH, - w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left + 7, w->widgets[WIDX_TAB_2].top + 1 }, 0); + dpi, ImageId(SPR_RATING_HIGH), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left + 7, w->widgets[WIDX_TAB_2].top + 1 }); gfx_draw_sprite( - dpi, SPR_RATING_LOW, - w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left + 16, w->widgets[WIDX_TAB_2].top + 12 }, 0); + dpi, ImageId(SPR_RATING_LOW), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left + 16, w->widgets[WIDX_TAB_2].top + 12 }); } // Guests tab @@ -1722,7 +1722,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_PARK_PAGE_GUESTS) sprite_idx += (w->frame_no / 8) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }); sprite_idx = GetPeepAnimation(PeepSpriteType::Normal).base_image + 1; if (w->page == WINDOW_PARK_PAGE_GUESTS) @@ -1730,8 +1730,8 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) sprite_idx |= 0xA9E00000; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].midX(), w->widgets[WIDX_TAB_3].bottom - 9 }, - 0); + dpi, ImageId::FromUInt32(sprite_idx), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].midX(), w->widgets[WIDX_TAB_3].bottom - 9 }); } // Price tab @@ -1741,7 +1741,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_PARK_PAGE_PRICE) sprite_idx += (w->frame_no / 2) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_4].left, w->widgets[WIDX_TAB_4].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_4].left, w->widgets[WIDX_TAB_4].top }); } // Statistics tab @@ -1751,7 +1751,7 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_PARK_PAGE_STATS) sprite_idx += (w->frame_no / 4) % 7; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_5].left, w->widgets[WIDX_TAB_5].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_5].left, w->widgets[WIDX_TAB_5].top }); } // Objective tab @@ -1761,13 +1761,14 @@ static void window_park_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) if (w->page == WINDOW_PARK_PAGE_OBJECTIVE) sprite_idx += (w->frame_no / 4) % 16; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_6].left, w->widgets[WIDX_TAB_6].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_6].left, w->widgets[WIDX_TAB_6].top }); } // Awards tab if (!(w->disabled_widgets & (1 << WIDX_TAB_7))) gfx_draw_sprite( - dpi, SPR_TAB_AWARDS, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_7].left, w->widgets[WIDX_TAB_7].top }, 0); + dpi, ImageId(SPR_TAB_AWARDS), + w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_7].left, w->widgets[WIDX_TAB_7].top }); } #pragma endregion diff --git a/src/openrct2-ui/windows/Player.cpp b/src/openrct2-ui/windows/Player.cpp index c7c659ffbf..26ea3fb4e3 100644 --- a/src/openrct2-ui/windows/Player.cpp +++ b/src/openrct2-ui/windows/Player.cpp @@ -567,15 +567,13 @@ static void window_player_set_page(rct_window* w, int32_t page) static void window_player_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) { rct_widget* widget; - int32_t imageId; // Tab 1 if (!WidgetIsDisabled(w, WIDX_TAB_1)) { widget = &w->widgets[WIDX_TAB_1]; auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - imageId = SPR_PEEP_LARGE_FACE_NORMAL; - gfx_draw_sprite(dpi, imageId, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(SPR_PEEP_LARGE_FACE_NORMAL), screenCoords); } // Tab 2 @@ -583,14 +581,14 @@ static void window_player_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* w) { widget = &w->widgets[WIDX_TAB_2]; auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - imageId = SPR_TAB_FINANCES_SUMMARY_0; + int32_t imageId = SPR_TAB_FINANCES_SUMMARY_0; if (w->page == WINDOW_PLAYER_PAGE_STATISTICS) { imageId += (w->frame_no / 2) & 7; } - gfx_draw_sprite(dpi, imageId, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(imageId), screenCoords); } } diff --git a/src/openrct2-ui/windows/Research.cpp b/src/openrct2-ui/windows/Research.cpp index d24094bbd6..da0b2f30d2 100644 --- a/src/openrct2-ui/windows/Research.cpp +++ b/src/openrct2-ui/windows/Research.cpp @@ -627,7 +627,8 @@ static void window_research_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } diff --git a/src/openrct2-ui/windows/Ride.cpp b/src/openrct2-ui/windows/Ride.cpp index 1610b5d09f..5f00959874 100644 --- a/src/openrct2-ui/windows/Ride.cpp +++ b/src/openrct2-ui/windows/Ride.cpp @@ -942,7 +942,8 @@ static void window_ride_draw_tab_image(rct_drawpixelinfo* dpi, rct_window* w, in } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } @@ -978,8 +979,8 @@ static void window_ride_draw_tab_main(rct_drawpixelinfo* dpi, rct_window* w) break; } gfx_draw_sprite( - dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }, - 0); + dpi, ImageId(spriteIndex), + w->windowPos + ScreenCoordsXY{ w->widgets[widgetIndex].left, w->widgets[widgetIndex].top }); } } } @@ -1052,7 +1053,7 @@ static void window_ride_draw_tab_vehicle(rct_drawpixelinfo* dpi, rct_window* w) spriteIndex |= (vehicleColour.additional_1 << 24) | (vehicleColour.main << 19); spriteIndex |= IMAGE_TYPE_REMAP_2_PLUS; - gfx_draw_sprite(&clipDPI, spriteIndex, screenCoords, vehicleColour.additional_2); + gfx_draw_sprite(&clipDPI, ImageId::FromUInt32(spriteIndex, vehicleColour.additional_2), screenCoords); } } @@ -1075,7 +1076,8 @@ static void window_ride_draw_tab_customer(rct_drawpixelinfo* dpi, rct_window* w) spriteIndex += 1; spriteIndex |= 0xA9E00000; - gfx_draw_sprite(dpi, spriteIndex, w->windowPos + ScreenCoordsXY{ widget->midX(), widget->bottom - 6 }, 0); + gfx_draw_sprite( + dpi, ImageId::FromUInt32(spriteIndex), w->windowPos + ScreenCoordsXY{ widget->midX(), widget->bottom - 6 }); } } @@ -2604,7 +2606,7 @@ static void window_ride_main_paint(rct_window* w, rct_drawpixelinfo* dpi) { window_draw_viewport(dpi, w); if (w->viewport->flags & VIEWPORT_FLAG_SOUND_ON) - gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos + ScreenCoordsXY{ 2, 2 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_HEARING_VIEWPORT), w->windowPos + ScreenCoordsXY{ 2, 2 }); } // View dropdown @@ -4786,8 +4788,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi) // Track if (ride->type == RIDE_TYPE_MAZE) { - int32_t spriteIndex = MazeOptions[trackColour.supports].sprite; - gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(MazeOptions[trackColour.supports].sprite), screenCoords); } else { @@ -4795,16 +4796,14 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi) int32_t spriteIndex = typeDescriptor.ColourPreview.Track; if (spriteIndex != 0) { - spriteIndex |= SPRITE_ID_PALETTE_COLOUR_2(trackColour.main, trackColour.additional); - gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex, trackColour.main, trackColour.additional), screenCoords); } // Supports spriteIndex = typeDescriptor.ColourPreview.Supports; if (spriteIndex != 0) { - spriteIndex |= SPRITE_ID_PALETTE_COLOUR_1(trackColour.supports); - gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(spriteIndex, trackColour.supports), screenCoords); } } } @@ -4814,10 +4813,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi) + ScreenCoordsXY{ (widget->left + widget->right) / 2 - 8, (widget->bottom + widget->top) / 2 - 6 }; ShopItem shopItem = rideEntry->shop_item[1] == ShopItem::None ? rideEntry->shop_item[0] : rideEntry->shop_item[1]; - int32_t spriteIndex = GetShopItemDescriptor(shopItem).Image; - spriteIndex |= SPRITE_ID_PALETTE_COLOUR_1(ride->track_colour[0].main); - - gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(GetShopItemDescriptor(shopItem).Image, ride->track_colour[0].main), screenCoords); } // Entrance preview @@ -4898,7 +4894,7 @@ static void window_ride_colour_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi spriteIndex += rideVehicleEntry->base_image_id; spriteIndex |= (vehicleColour.additional_1 << 24) | (vehicleColour.main << 19); spriteIndex |= IMAGE_TYPE_REMAP_2_PLUS; - gfx_draw_sprite(dpi, spriteIndex, screenCoords, vehicleColour.additional_2); + gfx_draw_sprite(dpi, ImageId::FromUInt32(spriteIndex, vehicleColour.additional_2), screenCoords); } #pragma endregion diff --git a/src/openrct2-ui/windows/RideList.cpp b/src/openrct2-ui/windows/RideList.cpp index 0e21adc62b..6cf8fd5575 100644 --- a/src/openrct2-ui/windows/RideList.cpp +++ b/src/openrct2-ui/windows/RideList.cpp @@ -764,21 +764,21 @@ static void window_ride_list_draw_tab_images(rct_drawpixelinfo* dpi, rct_window* if (w->page == PAGE_RIDES) sprite_idx += w->frame_no / 4; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_1].left, w->widgets[WIDX_TAB_1].top }); // Shops and stalls tab sprite_idx = SPR_TAB_SHOPS_AND_STALLS_0; if (w->page == PAGE_SHOPS_AND_STALLS) sprite_idx += w->frame_no / 4; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left, w->widgets[WIDX_TAB_2].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_2].left, w->widgets[WIDX_TAB_2].top }); // Information kiosks and facilities tab sprite_idx = SPR_TAB_KIOSKS_AND_FACILITIES_0; if (w->page == PAGE_KIOSKS_AND_FACILITIES) sprite_idx += (w->frame_no / 4) % 8; gfx_draw_sprite( - dpi, sprite_idx, w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }, 0); + dpi, ImageId(sprite_idx), w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_TAB_3].left, w->widgets[WIDX_TAB_3].top }); } /** diff --git a/src/openrct2-ui/windows/ScenarioSelect.cpp b/src/openrct2-ui/windows/ScenarioSelect.cpp index b9850eb422..ea0daa2bb5 100644 --- a/src/openrct2-ui/windows/ScenarioSelect.cpp +++ b/src/openrct2-ui/windows/ScenarioSelect.cpp @@ -614,7 +614,7 @@ static void window_scenarioselect_scrollpaint(rct_window* w, rct_drawpixelinfo* if (isCompleted) { // Draw completion tick - gfx_draw_sprite(dpi, SPR_MENU_CHECKMARK, { wide ? 500 : 395, y + 1 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_MENU_CHECKMARK), { wide ? 500 : 395, y + 1 }); // Draw completion score const utf8* completedByName = "???"; diff --git a/src/openrct2-ui/windows/ServerList.cpp b/src/openrct2-ui/windows/ServerList.cpp index ddfeed9acb..929475a0d6 100644 --- a/src/openrct2-ui/windows/ServerList.cpp +++ b/src/openrct2-ui/windows/ServerList.cpp @@ -493,14 +493,14 @@ static void window_server_list_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi bool correctVersion = serverDetails.Version == network_get_version(); compatibilitySpriteId = correctVersion ? SPR_G2_RCT1_OPEN_BUTTON_2 : SPR_G2_RCT1_CLOSE_BUTTON_2; } - gfx_draw_sprite(dpi, compatibilitySpriteId, { right, screenCoords.y + 1 }, 0); + gfx_draw_sprite(dpi, ImageId(compatibilitySpriteId), { right, screenCoords.y + 1 }); right -= 4; // Draw lock icon right -= 8; if (serverDetails.RequiresPassword) { - gfx_draw_sprite(dpi, SPR_G2_LOCKED, { right, screenCoords.y + 4 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_LOCKED), { right, screenCoords.y + 4 }); } right -= 6; diff --git a/src/openrct2-ui/windows/ShortcutKeys.cpp b/src/openrct2-ui/windows/ShortcutKeys.cpp index 43891f30c1..24b5b5859c 100644 --- a/src/openrct2-ui/windows/ShortcutKeys.cpp +++ b/src/openrct2-ui/windows/ShortcutKeys.cpp @@ -492,7 +492,7 @@ private: } const auto& widget = widgets[widgetIndex]; - gfx_draw_sprite(&dpi, imageId, windowPos + ScreenCoordsXY{ widget.left, widget.top }, 0); + gfx_draw_sprite(&dpi, ImageId(imageId), windowPos + ScreenCoordsXY{ widget.left, widget.top }); } } } diff --git a/src/openrct2-ui/windows/Staff.cpp b/src/openrct2-ui/windows/Staff.cpp index 5651e944f7..fc4b2fc0c4 100644 --- a/src/openrct2-ui/windows/Staff.cpp +++ b/src/openrct2-ui/windows/Staff.cpp @@ -928,7 +928,7 @@ void window_staff_overview_paint(rct_window* w, rct_drawpixelinfo* dpi) rct_viewport* viewport = w->viewport; if (viewport->flags & VIEWPORT_FLAG_SOUND_ON) { - gfx_draw_sprite(dpi, SPR_HEARING_VIEWPORT, w->windowPos + ScreenCoordsXY{ 2, 2 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_HEARING_VIEWPORT), w->windowPos + ScreenCoordsXY{ 2, 2 }); } } @@ -965,7 +965,7 @@ void window_staff_options_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) } auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -987,7 +987,7 @@ void window_staff_stats_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) } auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top }; - gfx_draw_sprite(dpi, image_id, screenCoords, 0); + gfx_draw_sprite(dpi, ImageId(image_id), screenCoords); } /** @@ -1033,31 +1033,24 @@ void window_staff_overview_tab_paint(rct_window* w, rct_drawpixelinfo* dpi) } ebx += eax; - int32_t sprite_id = ebx | SPRITE_ID_PALETTE_COLOUR_2(peep->TshirtColour, peep->TrousersColour); - gfx_draw_sprite(&clip_dpi, sprite_id, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(ebx, peep->TshirtColour, peep->TrousersColour), screenCoords); // If holding a balloon if (ebx >= 0x2A1D && ebx < 0x2A3D) { - ebx += 32; - ebx |= SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour); - gfx_draw_sprite(&clip_dpi, ebx, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(ebx + 32, peep->BalloonColour), screenCoords); } // If holding umbrella if (ebx >= 0x2BBD && ebx < 0x2BDD) { - ebx += 32; - ebx |= SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour); - gfx_draw_sprite(&clip_dpi, ebx, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(ebx + 32, peep->UmbrellaColour), screenCoords); } // If wearing hat if (ebx >= 0x29DD && ebx < 0x29FD) { - ebx += 32; - ebx |= SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour); - gfx_draw_sprite(&clip_dpi, ebx, screenCoords, 0); + gfx_draw_sprite(&clip_dpi, ImageId(ebx + 32, peep->HatColour), screenCoords); } } diff --git a/src/openrct2-ui/windows/StaffList.cpp b/src/openrct2-ui/windows/StaffList.cpp index 755c7e9751..a51b90884a 100644 --- a/src/openrct2-ui/windows/StaffList.cpp +++ b/src/openrct2-ui/windows/StaffList.cpp @@ -416,7 +416,7 @@ public: // True if a patrol path is set for the worker if (gStaffModes[peep->StaffId] == StaffMode::Patrol) { - gfx_draw_sprite(&dpi, SPR_STAFF_PATROL_PATH, { nameColumnSize + 5, y }, 0); + gfx_draw_sprite(&dpi, ImageId(SPR_STAFF_PATROL_PATH), { nameColumnSize + 5, y }); } auto staffOrderIcon_x = nameColumnSize + 20; @@ -429,7 +429,7 @@ public: { if (staffOrders & 1) { - gfx_draw_sprite(&dpi, staffOrderSprite, { staffOrderIcon_x, y }, 0); + gfx_draw_sprite(&dpi, ImageId(staffOrderSprite), { staffOrderIcon_x, y }); } staffOrders = staffOrders >> 1; staffOrderIcon_x += 9; @@ -439,7 +439,7 @@ public: } else { - gfx_draw_sprite(&dpi, GetEntertainerCostumeSprite(peep->SpriteType), { staffOrderIcon_x, y }, 0); + gfx_draw_sprite(&dpi, ImageId(GetEntertainerCostumeSprite(peep->SpriteType)), { staffOrderIcon_x, y }); } } @@ -517,8 +517,8 @@ private: const auto& widget = widgets[widgetIndex]; auto imageId = (_selectedTab == tabIndex ? (_tabAnimationIndex & ~3) : 0); imageId += GetPeepAnimation(type).base_image + 1; - imageId |= SPRITE_ID_PALETTE_COLOUR_1(colour); - gfx_draw_sprite(&dpi, imageId, windowPos + ScreenCoordsXY{ (widget.left + widget.right) / 2, widget.bottom - 6 }, 0); + gfx_draw_sprite( + &dpi, ImageId(imageId, colour), windowPos + ScreenCoordsXY{ (widget.left + widget.right) / 2, widget.bottom - 6 }); } void DrawTabImage(rct_drawpixelinfo& dpi, int32_t tabIndex, PeepSpriteType type) const @@ -532,7 +532,7 @@ private: { auto imageId = (_selectedTab == 3 ? (_tabAnimationIndex & ~3) : 0); imageId += GetPeepAnimation(type).base_image + 1; - gfx_draw_sprite(&clippedDpi, imageId, { 15, 23 }, 0); + gfx_draw_sprite(&clippedDpi, ImageId(imageId), { 15, 23 }); } } diff --git a/src/openrct2-ui/windows/TitleEditor.cpp b/src/openrct2-ui/windows/TitleEditor.cpp index 703eac7486..813e0287da 100644 --- a/src/openrct2-ui/windows/TitleEditor.cpp +++ b/src/openrct2-ui/windows/TitleEditor.cpp @@ -1064,11 +1064,10 @@ static void window_title_editor_draw_tab_images(rct_drawpixelinfo* dpi, rct_wind screenCoords = ScreenCoordsXY{ 4, 1 }; } gfx_draw_sprite( - dpi, spriteId, + dpi, ImageId(spriteId), w->windowPos + screenCoords + ScreenCoordsXY{ w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].left, - w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].top }, - 0); + w->widgets[WIDX_TITLE_EDITOR_PRESETS_TAB + i].top }); } } diff --git a/src/openrct2-ui/windows/TitleLogo.cpp b/src/openrct2-ui/windows/TitleLogo.cpp index d5725bf91e..f3602e75de 100644 --- a/src/openrct2-ui/windows/TitleLogo.cpp +++ b/src/openrct2-ui/windows/TitleLogo.cpp @@ -73,6 +73,6 @@ static void window_title_menu_mouseup(rct_window* w, rct_widgetindex widgetIndex static void window_title_logo_paint(rct_window* w, rct_drawpixelinfo* dpi) { auto screenCoords = w->windowPos + ScreenCoordsXY{ 2, 2 }; - gfx_draw_sprite(dpi, SPR_G2_LOGO, screenCoords, 0); - gfx_draw_sprite(dpi, SPR_G2_TITLE, screenCoords + ScreenCoordsXY{ 104, 18 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_LOGO), screenCoords); + gfx_draw_sprite(dpi, ImageId(SPR_G2_TITLE), screenCoords + ScreenCoordsXY{ 104, 18 }); } diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index 1431fff7f7..4e3f1de7b7 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -863,8 +863,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) imgId = SPR_TOOLBAR_STAFF; if (WidgetIsPressed(w, WIDX_STAFF)) imgId++; - imgId |= SPRITE_ID_PALETTE_COLOUR_2(gStaffHandymanColour, gStaffMechanicColour); - gfx_draw_sprite(dpi, imgId, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(imgId, gStaffHandymanColour, gStaffMechanicColour), screenPos); } // Draw fast forward button @@ -874,16 +873,15 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) w->windowPos.y + window_top_toolbar_widgets[WIDX_FASTFORWARD].top + 0 }; if (WidgetIsPressed(w, WIDX_FASTFORWARD)) screenPos.y++; - imgId = SPR_G2_FASTFORWARD; - gfx_draw_sprite(dpi, imgId, screenPos + ScreenCoordsXY{ 6, 3 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_FASTFORWARD), screenPos + ScreenCoordsXY{ 6, 3 }); for (int32_t i = 0; i < gGameSpeed && gGameSpeed <= 4; i++) { - gfx_draw_sprite(dpi, SPR_G2_SPEED_ARROW, screenPos + ScreenCoordsXY{ 5 + i * 5, 15 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_SPEED_ARROW), screenPos + ScreenCoordsXY{ 5 + i * 5, 15 }); } for (int32_t i = 0; i < 3 && i < gGameSpeed - 4 && gGameSpeed >= 5; i++) { - gfx_draw_sprite(dpi, SPR_G2_HYPER_ARROW, screenPos + ScreenCoordsXY{ 5 + i * 6, 15 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_HYPER_ARROW), screenPos + ScreenCoordsXY{ 5 + i * 6, 15 }); } } @@ -895,8 +893,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) window_top_toolbar_widgets[WIDX_CHEATS].top - 1 }; if (WidgetIsPressed(w, WIDX_CHEATS)) screenPos.y++; - imgId = SPR_G2_SANDBOX; - gfx_draw_sprite(dpi, imgId, screenPos, 3); + gfx_draw_sprite(dpi, ImageId(SPR_G2_SANDBOX), screenPos); // Draw an overlay if clearance checks are disabled if (gCheatsDisableClearanceChecks) @@ -914,8 +911,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) + ScreenCoordsXY{ window_top_toolbar_widgets[WIDX_CHAT].left, window_top_toolbar_widgets[WIDX_CHAT].top - 2 }; if (WidgetIsPressed(w, WIDX_CHAT)) screenPos.y++; - imgId = SPR_G2_CHAT; - gfx_draw_sprite(dpi, imgId, screenPos, 3); + gfx_draw_sprite(dpi, ImageId(SPR_G2_CHAT), screenPos); } // Draw debug button @@ -925,8 +921,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) + ScreenCoordsXY{ window_top_toolbar_widgets[WIDX_DEBUG].left, window_top_toolbar_widgets[WIDX_DEBUG].top - 1 }; if (WidgetIsPressed(w, WIDX_DEBUG)) screenPos.y++; - imgId = SPR_TAB_GEARS_0; - gfx_draw_sprite(dpi, imgId, screenPos, 3); + gfx_draw_sprite(dpi, ImageId(SPR_TAB_GEARS_0), screenPos); } // Draw research button @@ -937,8 +932,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) window_top_toolbar_widgets[WIDX_RESEARCH].top }; if (WidgetIsPressed(w, WIDX_RESEARCH)) screenPos.y++; - imgId = SPR_TAB_FINANCES_RESEARCH_0; - gfx_draw_sprite(dpi, imgId, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TAB_FINANCES_RESEARCH_0), screenPos); } // Draw finances button @@ -949,8 +943,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) window_top_toolbar_widgets[WIDX_FINANCES].top + 1 }; if (WidgetIsPressed(w, WIDX_FINANCES)) screenPos.y++; - imgId = SPR_FINANCE; - gfx_draw_sprite(dpi, imgId, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(SPR_FINANCE), screenPos); } // Draw news button @@ -960,8 +953,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) + ScreenCoordsXY{ window_top_toolbar_widgets[WIDX_NEWS].left + 3, window_top_toolbar_widgets[WIDX_NEWS].top + 0 }; if (WidgetIsPressed(w, WIDX_NEWS)) screenPos.y++; - imgId = SPR_G2_TAB_NEWS; - gfx_draw_sprite(dpi, imgId, screenPos, 0); + gfx_draw_sprite(dpi, ImageId(SPR_G2_TAB_NEWS), screenPos); } // Draw network button @@ -975,7 +967,7 @@ static void window_top_toolbar_paint(rct_window* w, rct_drawpixelinfo* dpi) // Draw (de)sync icon. imgId = (network_is_desynchronised() ? SPR_G2_MULTIPLAYER_DESYNC : SPR_G2_MULTIPLAYER_SYNC); - gfx_draw_sprite(dpi, imgId, screenPos + ScreenCoordsXY{ 3, 11 }, 0); + gfx_draw_sprite(dpi, ImageId(imgId), screenPos + ScreenCoordsXY{ 3, 11 }); // Draw number of players. auto ft = Formatter(); diff --git a/src/openrct2-ui/windows/TrackDesignPlace.cpp b/src/openrct2-ui/windows/TrackDesignPlace.cpp index cbdeda78e7..f8655d1811 100644 --- a/src/openrct2-ui/windows/TrackDesignPlace.cpp +++ b/src/openrct2-ui/windows/TrackDesignPlace.cpp @@ -490,7 +490,7 @@ static void window_track_place_paint(rct_window* w, rct_drawpixelinfo* dpi) g1temp.width = TRACK_MINI_PREVIEW_WIDTH; g1temp.height = TRACK_MINI_PREVIEW_HEIGHT; gfx_set_g1_element(SPR_TEMP, &g1temp); - gfx_draw_sprite(&clippedDpi, SPR_TEMP | SPRITE_ID_PALETTE_COLOUR_1(NOT_TRANSLUCENT(w->colours[0])), { 0, 0 }, 0); + gfx_draw_sprite(&clippedDpi, ImageId(SPR_TEMP, NOT_TRANSLUCENT(w->colours[0])), { 0, 0 }); } // Price diff --git a/src/openrct2-ui/windows/TrackList.cpp b/src/openrct2-ui/windows/TrackList.cpp index 42585dcba6..4f507d961b 100644 --- a/src/openrct2-ui/windows/TrackList.cpp +++ b/src/openrct2-ui/windows/TrackList.cpp @@ -532,7 +532,7 @@ static void window_track_list_paint(rct_window* w, rct_drawpixelinfo* dpi) g1temp.flags = G1_FLAG_BMP; gfx_set_g1_element(SPR_TEMP, &g1temp); drawing_engine_invalidate_image(SPR_TEMP); - gfx_draw_sprite(dpi, SPR_TEMP, trackPreview, 0); + gfx_draw_sprite(dpi, ImageId(SPR_TEMP), trackPreview); screenPos.y = w->windowPos.y + widget->bottom - 12; diff --git a/src/openrct2/Intro.cpp b/src/openrct2/Intro.cpp index b313e006d2..c640ff5788 100644 --- a/src/openrct2/Intro.cpp +++ b/src/openrct2/Intro.cpp @@ -189,10 +189,10 @@ void intro_draw(rct_drawpixelinfo* dpi) BORDER_COLOUR_PUBLISHER); // Draw Infogrames logo - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_00, { (screenWidth / 2) - 320 + 69, _introStateCounter + 69 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_10, { (screenWidth / 2) - 320 + 319, _introStateCounter + 69 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_01, { (screenWidth / 2) - 320 + 69, _introStateCounter + 319 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_INFOGRAMES_11, { (screenWidth / 2) - 320 + 319, _introStateCounter + 319 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_INFOGRAMES_00), { (screenWidth / 2) - 320 + 69, _introStateCounter + 69 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_INFOGRAMES_10), { (screenWidth / 2) - 320 + 319, _introStateCounter + 69 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_INFOGRAMES_01), { (screenWidth / 2) - 320 + 69, _introStateCounter + 319 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_INFOGRAMES_11), { (screenWidth / 2) - 320 + 319, _introStateCounter + 319 }); break; case IntroState::DeveloperBegin: gfx_clear(dpi, BACKROUND_COLOUR_DARK); @@ -202,8 +202,8 @@ void intro_draw(rct_drawpixelinfo* dpi) gfx_clear(dpi, BACKROUND_COLOUR_DARK); // Draw Chris Sawyer logo - gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_00, { (screenWidth / 2) - 320 + 70, _introStateCounter }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_CHRIS_SAWYER_10, { (screenWidth / 2) - 320 + 320, _introStateCounter }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_CHRIS_SAWYER_00), { (screenWidth / 2) - 320 + 70, _introStateCounter }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_CHRIS_SAWYER_10), { (screenWidth / 2) - 320 + 320, _introStateCounter }); break; case IntroState::LogoFadeIn: if (_introStateCounter <= 0xFF00) @@ -292,10 +292,10 @@ static void screen_intro_draw_logo(rct_drawpixelinfo* dpi) drawing_engine_invalidate_image(SPR_INTRO_LOGO_21); gfx_clear(dpi, BACKROUND_COLOUR_LOGO); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_00, { imageX + 0, 0 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_10, { imageX + 220, 0 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_20, { imageX + 440, 0 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_01, { imageX + 0, 240 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_11, { imageX + 220, 240 }, 0); - gfx_draw_sprite(dpi, SPR_INTRO_LOGO_21, { imageX + 440, 240 }, 0); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_00), { imageX + 0, 0 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_10), { imageX + 220, 0 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_20), { imageX + 440, 0 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_01), { imageX + 0, 240 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_11), { imageX + 220, 240 }); + gfx_draw_sprite(dpi, ImageId(SPR_INTRO_LOGO_21), { imageX + 440, 240 }); } diff --git a/src/openrct2/drawing/Drawing.h b/src/openrct2/drawing/Drawing.h index ad445c7eb3..dde20b9eb7 100644 --- a/src/openrct2/drawing/Drawing.h +++ b/src/openrct2/drawing/Drawing.h @@ -719,6 +719,7 @@ size_t ImageListGetMaximum(); void FASTCALL gfx_sprite_to_buffer(DrawSpriteArgs& args); void FASTCALL gfx_bmp_sprite_to_buffer(DrawSpriteArgs& args); void FASTCALL gfx_rle_sprite_to_buffer(DrawSpriteArgs& args); +void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, ImageId image_id, const ScreenCoordsXY& coords); void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image_id, const ScreenCoordsXY& coords, uint32_t tertiary_colour); void FASTCALL gfx_draw_glyph(rct_drawpixelinfo* dpi, int32_t image_id, const ScreenCoordsXY& coords, const PaletteMap& paletteMap); diff --git a/src/openrct2/drawing/NewDrawing.cpp b/src/openrct2/drawing/NewDrawing.cpp index 7b1b3de45f..29aa3622aa 100644 --- a/src/openrct2/drawing/NewDrawing.cpp +++ b/src/openrct2/drawing/NewDrawing.cpp @@ -245,6 +245,11 @@ void gfx_draw_dashed_line( } } +void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, ImageId image_id, const ScreenCoordsXY& coords) +{ + gfx_draw_sprite(dpi, image_id.ToUInt32(), coords, image_id.GetTertiary()); +} + void FASTCALL gfx_draw_sprite(rct_drawpixelinfo* dpi, int32_t image, const ScreenCoordsXY& coords, uint32_t tertiary_colour) { auto drawingEngine = dpi->DrawingEngine;