From bd128402f05dbfa53bef12461e23526f83fe9990 Mon Sep 17 00:00:00 2001 From: zsilencer Date: Tue, 14 Oct 2014 17:01:22 -0600 Subject: [PATCH] 0x006EC9CE --- src/drawing/drawing.c | 69 +++++++++++++++++++++++++++++++++++++++++++ src/drawing/drawing.h | 1 + src/ride/ride.h | 20 +++++++++---- 3 files changed, 84 insertions(+), 6 deletions(-) diff --git a/src/drawing/drawing.c b/src/drawing/drawing.c index 247667a24a..af2e47ea5b 100644 --- a/src/drawing/drawing.c +++ b/src/drawing/drawing.c @@ -152,6 +152,75 @@ void gfx_transpose_palette(int pal, unsigned char product) osinterface_update_palette((char*)0x01424680, 10, 236);//Odd would have expected dest_pointer } +/** +* +* rct2: 0x006EC9CE +* @param x (ax) +* @param y (cx) +* @param base_height (di) +* @param clearance_height (si) +*/ +void gfx_invalidate_scrollingtext(int x, int y, int base_height, int clearance_height) +{ + x += 16; + y += 16; + int left, top, right, bottom; + switch (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32)) { + case 0: + left = (-x + y) - 32; + right = (-x + y) + 32; + top = ((y + x) / 2) - 32 - clearance_height; + bottom = ((y + x) / 2) + 32 - base_height; + break; + case 1: + left = (-x - y) - 32; + right = (-x - y) + 32; + top = ((y - x) / 2) - 32 - clearance_height; + bottom = ((y - x) / 2) + 32 - base_height; + break; + case 2: + left = (x - y) - 32; + right = (x - y) + 32; + top = ((-y - x) / 2) - 32 - clearance_height; + bottom = ((-y - x) / 2) + 32 - base_height; + break; + case 3: + left = (x + y) - 32; + right = (x + y) + 32; + top = ((-y + x) / 2) - 32 - clearance_height; + bottom = ((-y + x) / 2) + 32 - base_height; + break; + } + rct_viewport** viewport_p = RCT2_ADDRESS(RCT2_ADDRESS_NEW_VIEWPORT_PTR, rct_viewport*); + while (*viewport_p) { + rct_viewport* viewport = *viewport_p; + if (viewport->zoom < 1) { + if (right > viewport->view_x && bottom > viewport->view_y && left < viewport->view_x + viewport->view_width) { + if (left < viewport->view_x) { + left = viewport->view_x; + } + if (right > viewport->view_x + viewport->view_width) { + right = viewport->view_x + viewport->view_width; + } + if (top < viewport->view_y + viewport->view_height) { + if (top < viewport->view_y) { + top = viewport->view_y; + } + if (bottom > viewport->view_y + viewport->view_height) { + bottom = viewport->view_y + viewport->view_height; + } + left = ((left - viewport->view_x) >> viewport->zoom) + viewport->x; + top = ((top - viewport->view_y) >> viewport->zoom) + viewport->y; + right = ((right - viewport->view_x) >> viewport->zoom) + viewport->x; + bottom = ((bottom - viewport->view_y) >> viewport->zoom) + viewport->y; + gfx_set_dirty_blocks(left, top, right, bottom); + } + } + } + viewport_p++; + } +} + /** * * rct2: 0x006ED7E5 diff --git a/src/drawing/drawing.h b/src/drawing/drawing.h index a9dabe0648..f167d9ba00 100644 --- a/src/drawing/drawing.h +++ b/src/drawing/drawing.h @@ -70,6 +70,7 @@ rct_drawpixelinfo* clip_drawpixelinfo(rct_drawpixelinfo* dpi, int left, int widt void gfx_set_dirty_blocks(int left, int top, int right, int bottom); void gfx_draw_all_dirty_blocks(); void gfx_redraw_screen_rect(short left, short top, short right, short bottom); +void gfx_invalidate_scrollingtext(int x, int y, int base_height, int clearance_height); void gfx_invalidate_screen(); // palette diff --git a/src/ride/ride.h b/src/ride/ride.h index 77cf17829f..fe255e6920 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -141,7 +141,9 @@ typedef struct { uint32 var_118; uint8 pad_11C[0x02]; uint8 var_11E; - uint8 pad_11F[0x05]; + uint8 var_11F; + sint16 var_120; + sint16 var_122; sint16 var_124; sint16 var_126; sint16 var_128; @@ -153,7 +155,10 @@ typedef struct { sint16 var_134; sint16 var_136; money16 price; // 0x138 - uint8 pad_13A[0x06]; + sint16 var_13A; + sint16 var_13C; + uint8 var_13E; + uint8 var_13F; union { rating_tuple ratings; // 0x140 struct { @@ -163,7 +168,7 @@ typedef struct { }; }; uint16 reliability; // 0x146 - uint16 pad_148; + uint16 var_148; uint16 var_14A; uint8 pad_14C; uint8 var_14D; @@ -173,9 +178,12 @@ typedef struct { uint16 var_158; uint8 pad_15A; uint8 num_riders; // 0x15B - uint8 pad_15C[2]; - uint16 maze_tiles; - uint8 pad_160[0x20]; + uint8 var_15C; + uint8 var_15D; + uint16 maze_tiles; // 0x15E + uint8 pad_160[0x16]; + uint8 var_176; + uint8 pad_177[0x9]; sint16 build_date; // 0x180 money16 upkeep_cost; // 0x182 uint16 race_winner; // 0x184