mirror of https://github.com/OpenRCT2/OpenRCT2.git
Pass paint session to more ps functions
This commit is contained in:
parent
ae6c820662
commit
2980be0667
|
@ -109,7 +109,7 @@ static sint32 div_to_minus_infinity(sint32 a, sint32 b) {
|
|||
return (a / b) - (a % b < 0);
|
||||
}
|
||||
|
||||
static void scenery_multiple_sign_paint_line(const utf8 *str, rct_large_scenery_text *text, sint32 textImage, sint32 textColour, uint8 direction, sint32 y_offset)
|
||||
static void scenery_multiple_sign_paint_line(paint_session * session, const utf8 *str, rct_large_scenery_text *text, sint32 textImage, sint32 textColour, uint8 direction, sint32 y_offset)
|
||||
{
|
||||
const utf8 *fitStr = scenery_multiple_sign_fit_text(str, text, false);
|
||||
sint32 width = scenery_multiple_sign_text_width(fitStr, text);
|
||||
|
@ -141,12 +141,12 @@ static void scenery_multiple_sign_paint_line(const utf8 *str, rct_large_scenery_
|
|||
}
|
||||
sint32 image_id = (textImage + glyph_offset + glyph_type) | textColour;
|
||||
if (direction == 3) {
|
||||
paint_attach_to_previous_ps(image_id, x_offset, -div_to_minus_infinity(acc, 2));
|
||||
paint_attach_to_previous_ps(session, image_id, x_offset, -div_to_minus_infinity(acc, 2));
|
||||
} else {
|
||||
if (text->flags & LARGE_SCENERY_TEXT_FLAG_VERTICAL) {
|
||||
paint_attach_to_previous_ps(image_id, x_offset, div_to_minus_infinity(acc, 2));
|
||||
paint_attach_to_previous_ps(session, image_id, x_offset, div_to_minus_infinity(acc, 2));
|
||||
} else {
|
||||
paint_attach_to_previous_attach(image_id, x_offset, div_to_minus_infinity(acc, 2));
|
||||
paint_attach_to_previous_attach(session, image_id, x_offset, div_to_minus_infinity(acc, 2));
|
||||
}
|
||||
}
|
||||
x_offset += scenery_multiple_sign_get_glyph(text, codepoint)->width;
|
||||
|
@ -280,7 +280,7 @@ void scenery_multiple_paint(paint_session * session, uint8 direction, uint16 hei
|
|||
while ((codepoint = utf8_get_next(fitStrPtr, &fitStrPtr)) != 0) {
|
||||
utf8 str[5] = {0};
|
||||
utf8_write_codepoint(str, codepoint);
|
||||
scenery_multiple_sign_paint_line(str, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset - height2);
|
||||
scenery_multiple_sign_paint_line(session, str, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset - height2);
|
||||
y_offset += scenery_multiple_sign_get_glyph(text, codepoint)->height * 2;
|
||||
}
|
||||
} else {
|
||||
|
@ -311,15 +311,15 @@ void scenery_multiple_paint(paint_session * session, uint8 direction, uint16 hei
|
|||
*spacedst = 0;
|
||||
src = spacesrc;
|
||||
}
|
||||
scenery_multiple_sign_paint_line(str1, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
scenery_multiple_sign_paint_line(session, str1, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
y_offset += (scenery_multiple_sign_get_glyph(text, 'A')->height + 1) * 2;
|
||||
}
|
||||
} else {
|
||||
scenery_multiple_sign_paint_line(signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
scenery_multiple_sign_paint_line(session, signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
}
|
||||
} else {
|
||||
// Draw one-line sign:
|
||||
scenery_multiple_sign_paint_line(signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
scenery_multiple_sign_paint_line(session, signString, entry->large_scenery.text, entry->large_scenery.text_image, textColour, direction, y_offset);
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
|
|
@ -445,7 +445,7 @@ static void viewport_surface_smoothen_edge(paint_session * session, enum edge_t
|
|||
|
||||
uint32 image_id = maskImageBase + byte_97B444[self.slope];
|
||||
|
||||
if (paint_attach_to_previous_ps(image_id, 0, 0)) {
|
||||
if (paint_attach_to_previous_ps(session, image_id, 0, 0)) {
|
||||
attached_paint_struct * out = session->UnkF1AD2C;
|
||||
// set content and enable masking
|
||||
out->colour_image_id = dword_97B804[neighbour.terrain] + cl;
|
||||
|
@ -456,7 +456,7 @@ static void viewport_surface_smoothen_edge(paint_session * session, enum edge_t
|
|||
/**
|
||||
* rct2: 0x0065F63B, 0x0065F77D
|
||||
*/
|
||||
static void viewport_surface_draw_land_side_top(enum edge_t edge, uint8 height, uint8 terrain, struct tile_descriptor self, struct tile_descriptor neighbour)
|
||||
static void viewport_surface_draw_land_side_top(paint_session * session, enum edge_t edge, uint8 height, uint8 terrain, struct tile_descriptor self, struct tile_descriptor neighbour)
|
||||
{
|
||||
registers regs;
|
||||
|
||||
|
@ -509,7 +509,7 @@ static void viewport_surface_draw_land_side_top(enum edge_t edge, uint8 height,
|
|||
|
||||
uint32 image_id = _terrainEdgeSpriteIds[terrain][3] + (edge == EDGE_TOPLEFT ? 3 : 0) + incline; // var_c;
|
||||
sint16 y = (regs.dl - regs.al) * 16;
|
||||
paint_attach_to_previous_ps(image_id, 0, y);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, y);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -1165,7 +1165,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
|
||||
image_id |= SPR_TERRAIN_SELECTION_PATROL_AREA + byte_97B444[surfaceShape];
|
||||
image_id |= patrolColour << 19;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1191,7 +1191,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
// loc_660E9A:
|
||||
if (mapElement->properties.surface.ownership & OWNERSHIP_OWNED) {
|
||||
assert(surfaceShape < countof(byte_97B444));
|
||||
paint_attach_to_previous_ps(SPR_TERRAIN_SELECTION_SQUARE + byte_97B444[surfaceShape], 0, 0);
|
||||
paint_attach_to_previous_ps(session, SPR_TERRAIN_SELECTION_SQUARE + byte_97B444[surfaceShape], 0, 0);
|
||||
} else if (mapElement->properties.surface.ownership & OWNERSHIP_AVAILABLE) {
|
||||
rct_xy16 pos = session->MapPosition;
|
||||
paint_struct * backup = session->UnkF1AD28;
|
||||
|
@ -1205,7 +1205,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
&& !(mapElement->properties.surface.ownership & OWNERSHIP_OWNED)) {
|
||||
if (mapElement->properties.surface.ownership & OWNERSHIP_CONSTRUCTION_RIGHTS_OWNED) {
|
||||
assert(surfaceShape < countof(byte_97B444));
|
||||
paint_attach_to_previous_ps(SPR_TERRAIN_SELECTION_DOTTED + byte_97B444[surfaceShape], 0, 0);
|
||||
paint_attach_to_previous_ps(session, SPR_TERRAIN_SELECTION_DOTTED + byte_97B444[surfaceShape], 0, 0);
|
||||
} else if (mapElement->properties.surface.ownership & OWNERSHIP_CONSTRUCTION_RIGHTS_AVAILABLE) {
|
||||
paint_struct * backup = session->UnkF1AD28;
|
||||
rct_xy16 pos = session->MapPosition;
|
||||
|
@ -1233,13 +1233,13 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
// loc_661089:
|
||||
uint32 eax = ((((mapSelectionType - 9) + rotation) & 3) + 0x21) << 19;
|
||||
uint32 image_id = (SPR_TERRAIN_SELECTION_EDGE + byte_97B444[surfaceShape]) | eax | IMAGE_TYPE_REMAP;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
} else if (mapSelectionType >= MAP_SELECT_TYPE_QUARTER_0) {
|
||||
// loc_661051:(no jump)
|
||||
// Selection split into four quarter segments
|
||||
uint32 eax = ((((mapSelectionType - MAP_SELECT_TYPE_QUARTER_0) + rotation) & 3) + 0x27) << 19;
|
||||
uint32 image_id = (SPR_TERRAIN_SELECTION_QUARTER + byte_97B444[surfaceShape]) | eax | IMAGE_TYPE_REMAP;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
} else if (mapSelectionType <= MAP_SELECT_TYPE_FULL) {
|
||||
// Corners
|
||||
uint32 eax = mapSelectionType;
|
||||
|
@ -1249,7 +1249,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
|
||||
eax = (eax + 0x21) << 19;
|
||||
uint32 image_id = (SPR_TERRAIN_SELECTION_CORNER + byte_97B444[surfaceShape]) | eax | IMAGE_TYPE_REMAP;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
} else {
|
||||
sint32 local_surfaceShape = surfaceShape;
|
||||
sint32 local_height = height;
|
||||
|
@ -1298,7 +1298,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
}
|
||||
|
||||
uint32 image_id = (SPR_TERRAIN_SELECTION_CORNER + byte_97B444[surfaceShape]) | colours | IMAGE_TYPE_REMAP;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -1325,7 +1325,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
base_image = byte_97B84A[terrain_type];
|
||||
}
|
||||
uint32 image_id = dword_97B7C8[base_image] + image_offset;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(session, image_id, 0, 0);
|
||||
}
|
||||
|
||||
if (!(gCurrentViewportFlags & VIEWPORT_FLAG_HIDE_VERTICAL)) {
|
||||
|
@ -1352,8 +1352,8 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
memcpy(backupRightTunnels, session->RightTunnels, sizeof(tunnel_entry) * TUNNEL_MAX_COUNT);
|
||||
#endif
|
||||
|
||||
viewport_surface_draw_land_side_top(EDGE_TOPLEFT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[3]);
|
||||
viewport_surface_draw_land_side_top(EDGE_TOPRIGHT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[4]);
|
||||
viewport_surface_draw_land_side_top(session, EDGE_TOPLEFT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[3]);
|
||||
viewport_surface_draw_land_side_top(session, EDGE_TOPRIGHT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[4]);
|
||||
viewport_surface_draw_land_side_bottom(session, EDGE_BOTTOMLEFT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[1]);
|
||||
viewport_surface_draw_land_side_bottom(session, EDGE_BOTTOMRIGHT, height / 16, eax / 32, tileDescriptors[0], tileDescriptors[2]);
|
||||
|
||||
|
@ -1389,7 +1389,7 @@ void surface_paint(paint_session * session, uint8 direction, uint16 height, rct_
|
|||
sint32 image_id = (SPR_WATER_MASK + image_offset) | IMAGE_TYPE_REMAP | IMAGE_TYPE_TRANSPARENT | PALETTE_WATER << 19;
|
||||
sub_98196C(image_id, 0, 0, 32, 32, -1, waterHeight, rotation);
|
||||
|
||||
paint_attach_to_previous_ps(SPR_WATER_OVERLAY + image_offset, 0, 0);
|
||||
paint_attach_to_previous_ps(session, SPR_WATER_OVERLAY + image_offset, 0, 0);
|
||||
|
||||
// This wasn't in the original, but the code depended on globals that were only set in a different conditional
|
||||
uint8 al_edgeStyle = mapElement->properties.surface.slope & 0xE0;
|
||||
|
|
|
@ -520,12 +520,10 @@ paint_struct * sub_98199C(
|
|||
* @param y (cx)
|
||||
* @return (!CF) success
|
||||
*/
|
||||
bool paint_attach_to_previous_attach(uint32 image_id, uint16 x, uint16 y)
|
||||
bool paint_attach_to_previous_attach(paint_session * session, uint32 image_id, uint16 x, uint16 y)
|
||||
{
|
||||
paint_session * session = &gPaintSession;
|
||||
|
||||
if (session->UnkF1AD2C == NULL) {
|
||||
return paint_attach_to_previous_ps(image_id, x, y);
|
||||
return paint_attach_to_previous_ps(session, image_id, x, y);
|
||||
}
|
||||
|
||||
if (session->NextFreePaintStruct >= session->EndOfPaintStructArray) {
|
||||
|
@ -557,10 +555,8 @@ bool paint_attach_to_previous_attach(uint32 image_id, uint16 x, uint16 y)
|
|||
* @param y (cx)
|
||||
* @return (!CF) success
|
||||
*/
|
||||
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y)
|
||||
bool paint_attach_to_previous_ps(paint_session * session, uint32 image_id, uint16 x, uint16 y)
|
||||
{
|
||||
paint_session * session = &gPaintSession;
|
||||
|
||||
if (session->NextFreePaintStruct >= session->EndOfPaintStructArray) {
|
||||
return false;
|
||||
}
|
||||
|
@ -598,10 +594,8 @@ bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y)
|
|||
* @param y_offsets (di)
|
||||
* @param rotation (ebp)
|
||||
*/
|
||||
void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation)
|
||||
void paint_floating_money_effect(paint_session * session, money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation)
|
||||
{
|
||||
paint_session * session = &gPaintSession;
|
||||
|
||||
if (session->NextFreePaintStruct >= session->EndOfPaintStructArray) {
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -222,9 +222,9 @@ paint_struct * sub_98199C_rotated(uint8 direction, uint32 image_id, sint8 x_offs
|
|||
|
||||
void paint_util_push_tunnel_rotated(uint8 direction, uint16 height, uint8 type);
|
||||
|
||||
bool paint_attach_to_previous_attach(uint32 image_id, uint16 x, uint16 y);
|
||||
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y);
|
||||
void paint_floating_money_effect(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation);
|
||||
bool paint_attach_to_previous_attach(paint_session * session, uint32 image_id, uint16 x, uint16 y);
|
||||
bool paint_attach_to_previous_ps(paint_session * session, uint32 image_id, uint16 x, uint16 y);
|
||||
void paint_floating_money_effect(paint_session * session, money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation);
|
||||
|
||||
paint_session * paint_session_alloc(rct_drawpixelinfo * dpi);
|
||||
void paint_session_free(paint_session *);
|
||||
|
|
|
@ -58,7 +58,7 @@ void misc_paint(paint_session * session, rct_sprite *misc, sint32 imageDirection
|
|||
rct_money_effect * moneyEffect = &misc->money_effect;
|
||||
money32 value;
|
||||
rct_string_id stringId = money_effect_get_string_id(moneyEffect, &value);
|
||||
paint_floating_money_effect(value, stringId, moneyEffect->y, moneyEffect->z, (sint8 *) &money_wave[moneyEffect->wiggle % 22], moneyEffect->offset_x, get_current_rotation());
|
||||
paint_floating_money_effect(session, value, stringId, moneyEffect->y, moneyEffect->z, (sint8 *) &money_wave[moneyEffect->wiggle % 22], moneyEffect->offset_x, get_current_rotation());
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,7 @@ static void paint_dodgems_roof(sint32 height, sint32 offset)
|
|||
sub_98196C(image_id, 0, 0, 32, 32, 2, height, get_current_rotation());
|
||||
|
||||
image_id = (SPR_DODGEMS_ROOF_GLASS + offset) | (PALETTE_DARKEN_3 << 19) | IMAGE_TYPE_TRANSPARENT;
|
||||
paint_attach_to_previous_ps(image_id, 0, 0);
|
||||
paint_attach_to_previous_ps(&gPaintSession, image_id, 0, 0);
|
||||
}
|
||||
|
||||
static void paint_dodgems(uint8 rideIndex, uint8 trackSequence, uint8 direction, sint32 height, rct_map_element * mapElement)
|
||||
|
|
|
@ -385,7 +385,7 @@ paint_struct *sub_98199C(
|
|||
);
|
||||
}
|
||||
|
||||
bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y) {
|
||||
bool paint_attach_to_previous_ps(paint_session * session, uint32 image_id, uint16 x, uint16 y) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue