mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Updated viewport_create function variable inputs
This commit is contained in:
@@ -34,7 +34,8 @@
|
||||
rct_viewport* g_viewport_list = RCT2_ADDRESS(RCT2_ADDRESS_VIEWPORT_LIST, rct_viewport);
|
||||
|
||||
/**
|
||||
*
|
||||
* This is not a viewport function. It is used to setup many variables for
|
||||
* multiple things.
|
||||
* rct2: 0x006E6EAC
|
||||
*/
|
||||
void viewport_init_all()
|
||||
@@ -109,23 +110,25 @@ void center_2d_coordinates(int x, int y, int z, int* out_x, int* out_y, rct_view
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006EB009
|
||||
* x: ax
|
||||
* y: eax (top 16)
|
||||
* width: bx
|
||||
* height: ebx (top 16)
|
||||
* zoom: cl (8 bits)
|
||||
* ecx: ecx (top 16 bits see zoom)
|
||||
* edx: edx
|
||||
* w: esi
|
||||
*/
|
||||
void viewport_create(rct_window *w, int x, int y, int width, int height, int zoom, int ecx, int edx)
|
||||
*
|
||||
* rct2: 0x006EB009
|
||||
* x: ax
|
||||
* y: eax (top 16)
|
||||
* width: bx
|
||||
* height: ebx (top 16)
|
||||
* zoom: cl (8 bits)
|
||||
* center_x: edx lower 16 bits
|
||||
* center_y: edx upper 16 bits
|
||||
* center_z: ecx upper 16 bits
|
||||
* sprite: edx lower 16 bits
|
||||
* flags: edx top most 2 bits 0b_X1 for zoom clear see below for 2nd bit.
|
||||
* w: esi
|
||||
*
|
||||
* Viewport will look at sprite or at coordinates as specified in flags 0b_1X for sprite 0b_0X for coordinates
|
||||
*/
|
||||
void viewport_create(rct_window *w, int x, int y, int width, int height, int zoom, int center_x, int center_y, int center_z, char flags, sint16 sprite)
|
||||
{
|
||||
rct_viewport* viewport;
|
||||
int eax = 0xFF000001;
|
||||
int ebx = -1;
|
||||
|
||||
for (viewport = g_viewport_list; viewport->width != 0; viewport++){
|
||||
if (viewport >= RCT2_ADDRESS(RCT2_ADDRESS_NEW_VIEWPORT_PTR, rct_viewport)){
|
||||
error_string_quit(0xFF000001, -1);
|
||||
@@ -137,10 +140,9 @@ void viewport_create(rct_window *w, int x, int y, int width, int height, int zoo
|
||||
viewport->width = width;
|
||||
viewport->height = height;
|
||||
|
||||
if (!(edx & (1 << 30))){
|
||||
if (!(flags & (1 << 0))){
|
||||
zoom = 0;
|
||||
}
|
||||
edx &= ~(1 << 30);
|
||||
|
||||
viewport->view_width = width << zoom;
|
||||
viewport->view_height = height << zoom;
|
||||
@@ -151,20 +153,15 @@ void viewport_create(rct_window *w, int x, int y, int width, int height, int zoo
|
||||
viewport->flags |= VIEWPORT_FLAG_GRIDLINES;
|
||||
}
|
||||
w->viewport = viewport;
|
||||
int center_x, center_y, center_z;
|
||||
|
||||
if (edx & (1 << 31)){
|
||||
edx &= 0xFFFF;
|
||||
w->viewport_target_sprite = edx;
|
||||
rct_sprite* sprite = &g_sprite_list[edx];
|
||||
center_x = sprite->unknown.x;
|
||||
center_y = sprite->unknown.y;
|
||||
center_z = sprite->unknown.z;
|
||||
if (flags & (1<<1)){
|
||||
w->viewport_target_sprite = sprite;
|
||||
rct_sprite* center_sprite = &g_sprite_list[sprite];
|
||||
center_x = center_sprite->unknown.x;
|
||||
center_y = center_sprite->unknown.y;
|
||||
center_z = center_sprite->unknown.z;
|
||||
}
|
||||
else{
|
||||
center_x = edx & 0xFFFF;
|
||||
center_y = edx >> 16;
|
||||
center_z = ecx >> 16;
|
||||
w->viewport_target_sprite = SPR_NONE;
|
||||
}
|
||||
|
||||
@@ -406,7 +403,6 @@ void sub_0x68B6C2(){
|
||||
dx += 0x860;
|
||||
dx >>= 5;
|
||||
for (int i = dx; i > 0; i--){
|
||||
int esi, ebp;
|
||||
RCT2_CALLPROC_X(0x68B35F, ax, 0, cx, 0, 0, 0, 0);
|
||||
RCT2_CALLPROC_X(0x69E8B0, ax, 0, cx, 0, 0, 0, 0);
|
||||
ax += 0x20;
|
||||
|
||||
@@ -46,7 +46,7 @@ enum {
|
||||
extern rct_viewport* g_viewport_list;
|
||||
|
||||
void viewport_init_all();
|
||||
void viewport_create(rct_window *w, int x, int y, int width, int height, int zoom, int ecx, int edx);
|
||||
void viewport_create(rct_window *w, int x, int y, int width, int height, int zoom, int center_x, int center_y, int center_z, char flags, sint16 sprite);
|
||||
void viewport_update_pointers();
|
||||
void viewport_update_position(rct_window *window);
|
||||
void viewport_render(rct_drawpixelinfo *dpi, rct_viewport *viewport, int left, int top, int right, int bottom);
|
||||
|
||||
@@ -141,7 +141,10 @@ void window_banner_open()
|
||||
(viewportWidget->bottom - viewportWidget->top) - 2,
|
||||
0,
|
||||
100, // TODO: needs banner map position
|
||||
100 // TODO: needs banner map position
|
||||
100, // TODO: needs banner map position
|
||||
100,
|
||||
0,
|
||||
-1
|
||||
);
|
||||
|
||||
w->viewport->flags = (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES) ? VIEWPORT_FLAG_GRIDLINES : 0;
|
||||
|
||||
@@ -81,7 +81,7 @@ void window_main_open()
|
||||
);
|
||||
window->widgets = window_main_widgets;
|
||||
|
||||
viewport_create(window, window->x, window->y, window->width, window->height, 0, 0x40000000, 0x0FFF0FFF);
|
||||
viewport_create(window, window->x, window->y, window->width, window->height, 0,0x0FFF,0x0FFF, 0, 0x1, -1);
|
||||
window->viewport->flags |= 0x0400;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, sint32) = 0;
|
||||
RCT2_GLOBAL(0x009E32B0, uint8) = 0;
|
||||
|
||||
@@ -1167,8 +1167,11 @@ static void window_park_init_viewport(rct_window *w)
|
||||
(viewportWidget->right - viewportWidget->left) - 2,
|
||||
(viewportWidget->bottom - viewportWidget->top) - 2,
|
||||
zr&0xFF,
|
||||
zr,
|
||||
xy
|
||||
x,
|
||||
y,
|
||||
z,
|
||||
xy&0xC0000000 >> 30,
|
||||
-1
|
||||
);
|
||||
w->flags |= (1 << 2);
|
||||
window_invalidate(w);
|
||||
|
||||
Reference in New Issue
Block a user