From 60df18ee0fa32f2201f15b746487387af08dea1e Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 19 Oct 2016 18:14:25 +0100 Subject: [PATCH] Refactor paint_arrange_structs --- src/interface/viewport.c | 23 +++++++++-------------- src/interface/viewport.h | 2 -- src/paint/paint.c | 24 ++++++++++-------------- src/paint/paint.h | 4 ++-- src/windows/ride_construction.c | 4 ++-- 5 files changed, 23 insertions(+), 34 deletions(-) diff --git a/src/interface/viewport.c b/src/interface/viewport.c index 5336c53ae1..76387c823f 100644 --- a/src/interface/viewport.c +++ b/src/interface/viewport.c @@ -52,7 +52,6 @@ uint8 gSavedViewZoom; uint8 gSavedViewRotation; #ifdef NO_RCT2 -paint_entry *unk_EE7884; paint_entry *gNextFreePaintStruct; uint8 gCurrentRotation; uint32 gCurrentViewportFlags = 0; @@ -748,9 +747,9 @@ static void viewport_paint_column(rct_drawpixelinfo * dpi, uint32 viewFlags) gfx_clear(dpi, colour); } paint_init(dpi); - paint_generate_structs(); - paint_arrange_structs(); - paint_draw_structs(dpi, &unk_EE7884->basic, viewFlags); + paint_generate_structs(dpi); + paint_struct ps = paint_arrange_structs(); + paint_draw_structs(dpi, &ps, viewFlags); if (gConfigGeneral.render_weather_gloom && !gTrackDesignSaveMode && @@ -1323,15 +1322,11 @@ static bool sub_679023(rct_drawpixelinfo *dpi, int imageId, int x, int y) * * rct2: 0x0068862C */ -static void sub_68862C() +static void sub_68862C(rct_drawpixelinfo * dpi, paint_struct * ps) { - rct_drawpixelinfo *dpi = unk_140E9A8; - paint_struct *ps = &unk_EE7884->basic, *old_ps, *next_ps; - while ((ps = ps->next_quadrant_ps) != NULL) { - old_ps = ps; - - next_ps = ps; + paint_struct * old_ps = ps; + paint_struct * next_ps = ps; while (next_ps != NULL) { ps = next_ps; if (sub_679023(dpi, ps->image_id, ps->x, ps->y)) @@ -1395,9 +1390,9 @@ void get_map_coordinates_from_pos(int screenX, int screenY, int flags, sint16 *x dpi->x = _viewportDpi1.x; dpi->width = 1; paint_init(dpi); - paint_generate_structs(); - paint_arrange_structs(); - sub_68862C(); + paint_generate_structs(dpi); + paint_struct ps = paint_arrange_structs(); + sub_68862C(dpi, &ps); } if (viewport != NULL) *viewport = myviewport; } diff --git a/src/interface/viewport.h b/src/interface/viewport.h index 65ffb8acf2..fdf6596185 100644 --- a/src/interface/viewport.h +++ b/src/interface/viewport.h @@ -105,12 +105,10 @@ extern uint8 gSavedViewZoom; extern uint8 gSavedViewRotation; #ifdef NO_RCT2 -extern paint_entry *unk_EE7884; extern paint_entry *gNextFreePaintStruct; extern uint8 gCurrentRotation; extern uint32 gCurrentViewportFlags; #else - #define unk_EE7884 RCT2_GLOBAL(0x00EE7884, paint_entry*) #define gNextFreePaintStruct RCT2_GLOBAL(0x00EE7888, paint_entry*) #define gCurrentRotation RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint8) #define gCurrentViewportFlags RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_VIEWPORT_FLAGS, uint32) diff --git a/src/paint/paint.c b/src/paint/paint.c index 83f88c3b9c..d440469d84 100644 --- a/src/paint/paint.c +++ b/src/paint/paint.c @@ -650,10 +650,8 @@ void sub_685EBC(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sin * * rct2: 0x0068B6C2 */ -void paint_generate_structs() +void paint_generate_structs(rct_drawpixelinfo * dpi) { - rct_drawpixelinfo* dpi = unk_140E9A8; - rct_xy16 mapTile = { .x = dpi->x & 0xFFE0, .y = (dpi->y - 16) & 0xFFE0 @@ -757,11 +755,10 @@ void paint_generate_structs() } } -static void paint_arrange_structs_helper(uint16 ax, uint8 flag) +static void paint_arrange_structs_helper(paint_struct * ps_next, uint16 ax, uint8 flag) { - paint_struct *ps, *ps_temp; - paint_struct *ps_next = &unk_EE7884->basic; - + paint_struct * ps; + paint_struct * ps_temp; do { ps = ps_next; ps_next = ps_next->next_quadrant_ps; @@ -769,7 +766,6 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag) } while (ax > ps_next->var_18); ps_temp = ps; - do { ps = ps->next_quadrant_ps; if (ps == NULL) break; @@ -784,7 +780,6 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag) ps->var_1B = flag | (1 << 0); } } while (ps->var_18 <= ax + 1); - ps = ps_temp; uint8 rotation = get_current_rotation(); @@ -867,10 +862,10 @@ static void paint_arrange_structs_helper(uint16 ax, uint8 flag) * * rct2: 0x00688217 */ -void paint_arrange_structs() +paint_struct paint_arrange_structs() { - unk_EE7884 = gNextFreePaintStruct++; - paint_struct * ps = &unk_EE7884->basic; + paint_struct psHead = { 0 }; + paint_struct * ps = &psHead; ps->next_quadrant_ps = NULL; uint32 edi = _F1AD0C; if (edi != UINT32_MAX) { @@ -885,12 +880,13 @@ void paint_arrange_structs() } } while (++edi <= _F1AD10); - paint_arrange_structs_helper(_F1AD0C & 0xFFFF, 1 << 1); + paint_arrange_structs_helper(&psHead, _F1AD0C & 0xFFFF, 1 << 1); uint32 eax = _F1AD0C; while (++eax < _F1AD10) { - paint_arrange_structs_helper(eax & 0xFFFF, 0); + paint_arrange_structs_helper(&psHead, eax & 0xFFFF, 0); } } + return psHead; } /** diff --git a/src/paint/paint.h b/src/paint/paint.h index 0c11eeff87..4b2f916fad 100644 --- a/src/paint/paint.h +++ b/src/paint/paint.h @@ -169,8 +169,8 @@ bool paint_attach_to_previous_ps(uint32 image_id, uint16 x, uint16 y); void sub_685EBC(money32 amount, rct_string_id string_id, sint16 y, sint16 z, sint8 y_offsets[], sint16 offset_x, uint32 rotation); void paint_init(rct_drawpixelinfo * dpi); -void paint_generate_structs(); -void paint_arrange_structs(); +void paint_generate_structs(rct_drawpixelinfo * dpi); +paint_struct paint_arrange_structs(); void paint_draw_structs(rct_drawpixelinfo * dpi, paint_struct * ps, uint32 viewFlags); void paint_draw_money_structs(rct_drawpixelinfo * dpi, paint_string_struct * ps); diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 99c29f3767..27133606bc 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -2412,8 +2412,8 @@ static void sub_6CBCE2( gMapSize = preserveMapSize; gMapSizeMaxXY = preserveMapSizeMaxXY; - paint_arrange_structs(); - paint_draw_structs(unk_140E9A8, &unk_EE7884->basic, gCurrentViewportFlags); + paint_struct ps = paint_arrange_structs(); + paint_draw_structs(unk_140E9A8, &ps, gCurrentViewportFlags); gCurrentViewportFlags = preserve_current_viewport_flags; }