mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-16 11:33:03 +01:00
Merge branch 'master' into ride-window
This commit is contained in:
@@ -25,7 +25,7 @@ enum GAME_COMMAND {
|
||||
GAME_COMMAND_0,
|
||||
GAME_COMMAND_1,
|
||||
GAME_COMMAND_TOGGLE_PAUSE, // 2
|
||||
GAME_COMMAND_3,
|
||||
GAME_COMMAND_3, //Has something to do with ride construction
|
||||
GAME_COMMAND_4,
|
||||
GAME_COMMAND_LOAD_OR_QUIT, // 5
|
||||
GAME_COMMAND_6,
|
||||
|
||||
45
src/ride.c
45
src/ride.c
@@ -20,6 +20,7 @@
|
||||
|
||||
#include <windows.h>
|
||||
#include "addresses.h"
|
||||
#include "game.h"
|
||||
#include "map.h"
|
||||
#include "news_item.h"
|
||||
#include "sprite.h"
|
||||
@@ -422,6 +423,48 @@ rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *ou
|
||||
return (rct_map_element*)esi;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B4800
|
||||
*/
|
||||
void ride_construct_new(int list_item)
|
||||
{
|
||||
int eax, ebx, ecx, edx, esi, edi, ebp;
|
||||
edx = list_item;
|
||||
eax = 0;
|
||||
ecx = 0;
|
||||
ebx = 1;
|
||||
edi = 0;
|
||||
esi = 0;
|
||||
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = 0x3DC;
|
||||
|
||||
esi = GAME_COMMAND_6;
|
||||
game_do_command_p(esi, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
if (ebx == 0x80000000) {
|
||||
return;
|
||||
}
|
||||
|
||||
//Looks like edi became the ride index after the command.
|
||||
eax = edi;
|
||||
rct_window *w;
|
||||
short widgetIndex;
|
||||
|
||||
//TODO: replace with window_ride_main_open(eax)
|
||||
// window_ride_main_open(eax);
|
||||
RCT2_CALLFUNC_X(0x006ACC28, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
window_get_register(w);
|
||||
|
||||
ecx = w->classification;
|
||||
edx = 0x13;
|
||||
ebp = (int)w;
|
||||
//TODO: replace with window_ride_main_mouseup() after ride-window_merge
|
||||
// window_ride_main_mouseup();
|
||||
RCT2_CALLFUNC_X(0x006AF17E, &eax, &ebx, &ecx, &edx, &esi, &edi, &ebp);
|
||||
rct_window *ride_window = window_find_by_id(w->classification, w->number); //class here
|
||||
window_close(ride_window);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006CC056
|
||||
@@ -431,4 +474,4 @@ int ride_try_construct(rct_map_element *trackMapElement)
|
||||
// Success stored in carry flag which can't be accessed after call using is macro
|
||||
RCT2_CALLPROC_X(0x006CC056, 0, 0, 0, (int)trackMapElement, 0, 0, 0);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -385,6 +385,7 @@ void ride_update_favourited_stat();
|
||||
void ride_check_all_reachable();
|
||||
rct_map_element *sub_6CAF80(int rideIndex, int *outX, int *outY);
|
||||
rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *outX, int *outY);
|
||||
void ride_construct_new(int list_item);
|
||||
int ride_try_construct(rct_map_element *trackMapElement);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1039,3 +1039,50 @@ void hide_construction_rights()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006CB70A
|
||||
*/
|
||||
void viewport_set_visibility(uint8 mode)
|
||||
{
|
||||
rct_window* window = window_get_main();
|
||||
|
||||
if(window != NULL) {
|
||||
rct_viewport* edi = window->viewport;
|
||||
uint32 invalidate = 0;
|
||||
|
||||
switch(mode) {
|
||||
case 0: { //Set all these flags to 0, and invalidate if any were active
|
||||
uint16 mask = VIEWPORT_FLAG_UNDERGROUND_INSIDE | VIEWPORT_FLAG_SEETHROUGH_RIDES |
|
||||
VIEWPORT_FLAG_SEETHROUGH_SCENERY | VIEWPORT_FLAG_INVISIBLE_SUPPORTS |
|
||||
VIEWPORT_FLAG_LAND_HEIGHTS | VIEWPORT_FLAG_TRACK_HEIGHTS |
|
||||
VIEWPORT_FLAG_PATH_HEIGHTS | VIEWPORT_FLAG_INVISIBLE_PEEPS |
|
||||
VIEWPORT_FLAG_HIDE_BASE | VIEWPORT_FLAG_HIDE_VERTICAL;
|
||||
|
||||
invalidate += edi->flags & mask;
|
||||
edi->flags &= ~mask;
|
||||
break;
|
||||
}
|
||||
case 1: //6CB79D
|
||||
case 4: //6CB7C4
|
||||
//Set underground on, invalidate if it was off
|
||||
invalidate += !(edi->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE);
|
||||
edi->flags |= VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
break;
|
||||
case 2: //6CB7EB
|
||||
//Set track heights on, invalidate if off
|
||||
invalidate += !(edi->flags & VIEWPORT_FLAG_TRACK_HEIGHTS);
|
||||
edi->flags |= VIEWPORT_FLAG_TRACK_HEIGHTS;
|
||||
break;
|
||||
case 3: //6CB7B1
|
||||
case 5: //6CB7D8
|
||||
//Set underground off, invalidate if it was on
|
||||
invalidate += edi->flags & VIEWPORT_FLAG_UNDERGROUND_INSIDE;
|
||||
edi->flags &= ~((uint16)VIEWPORT_FLAG_UNDERGROUND_INSIDE);
|
||||
break;
|
||||
}
|
||||
if (invalidate != 0)
|
||||
window_invalidate(window);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,5 +60,6 @@ void show_land_rights();
|
||||
void hide_land_rights();
|
||||
void show_construction_rights();
|
||||
void hide_construction_rights();
|
||||
void viewport_set_visibility(uint8 mode);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -226,7 +226,7 @@ static void window_footpath_close()
|
||||
window_get_register(w);
|
||||
|
||||
RCT2_CALLPROC_EBPSAFE(0x006A7831);
|
||||
RCT2_CALLPROC_X(0x006CB70A, 0, 0, 0, 0, 0, 0, 0);
|
||||
viewport_set_visibility(0);
|
||||
RCT2_CALLPROC_EBPSAFE(0x0068AB1B);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) &= ~2;
|
||||
window_invalidate_by_id(WC_TOP_TOOLBAR, 0);
|
||||
@@ -677,7 +677,7 @@ static int window_footpath_set_provisional_path(int type, int x, int y, int z, i
|
||||
eax = 3;
|
||||
if (RCT2_GLOBAL(0x00F3EFA4, uint8) & 2)
|
||||
eax = 1;
|
||||
RCT2_CALLPROC_X(0x006CB70A, eax, 0, 0, 0, 0, 0, 0);
|
||||
viewport_set_visibility((uint8)eax);
|
||||
}
|
||||
|
||||
return cost;
|
||||
|
||||
@@ -989,5 +989,6 @@ static void window_new_ride_select(rct_window *w)
|
||||
}
|
||||
|
||||
// Show ride construction window
|
||||
RCT2_CALLPROC_X(0x006B4800, *((sint16*)&item), 0, 0, 0, 0, 0, 0);
|
||||
}
|
||||
//RCT2_CALLPROC_X(0x006B4800, *((sint16*)&item), 0, 0, 0, 0, 0, 0);
|
||||
ride_construct_new(*((sint16*)&item));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user