mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-21 14:02:59 +01:00
Fix definition of PARK_FLAGS_NO_MONEY flag and clean up related code.
This commit is contained in:
@@ -155,7 +155,7 @@ static int award_is_deserved_best_value(int awardType, int activeAwardTypes)
|
||||
return 0;
|
||||
if (activeAwardTypes & (1 << PARK_AWARD_MOST_DISAPPOINTING))
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & (PARK_FLAGS_11 | PARK_FLAGS_PARK_FREE_ENTRY))
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & (PARK_FLAGS_NO_MONEY | PARK_FLAGS_PARK_FREE_ENTRY))
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_TOTAL_RIDE_VALUE, money16) < MONEY(10, 00))
|
||||
return 0;
|
||||
@@ -205,7 +205,7 @@ static int award_is_deserved_worse_value(int awardType, int activeAwardTypes)
|
||||
{
|
||||
if (activeAwardTypes & (1 << PARK_AWARD_BEST_VALUE))
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11)
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
|
||||
return 0;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16) == MONEY(0, 00))
|
||||
return 0;
|
||||
|
||||
@@ -74,7 +74,7 @@ void finance_pay_wages()
|
||||
rct_peep* peep;
|
||||
uint16 spriteIndex;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11)
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
|
||||
return;
|
||||
|
||||
FOR_ALL_STAFF(spriteIndex, peep)
|
||||
@@ -89,7 +89,7 @@ void finance_pay_research()
|
||||
{
|
||||
uint8 level;
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800)
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
|
||||
return;
|
||||
|
||||
level = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_RESEARCH_LEVEL, uint8);
|
||||
@@ -106,7 +106,7 @@ void finance_pay_interest()
|
||||
sint16 current_interest = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_INTEREST_RATE, sint16);
|
||||
money32 tempcost = (current_loan * 5 * current_interest) >> 14; // (5 * interest) / 2^14 is pretty close to
|
||||
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800)
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)
|
||||
return;
|
||||
|
||||
finance_payment(tempcost, RCT_EXPENDITURE_TYPE_INTEREST);
|
||||
@@ -127,7 +127,7 @@ void finance_pay_ride_upkeep()
|
||||
ride->var_196 = 25855; // durability?
|
||||
|
||||
}
|
||||
if (ride->status != RIDE_STATUS_CLOSED && !(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800)) {
|
||||
if (ride->status != RIDE_STATUS_CLOSED && !(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
sint16 upkeep = ride->upkeep_cost;
|
||||
if (upkeep != -1) {
|
||||
ride->var_158 -= upkeep;
|
||||
@@ -185,6 +185,31 @@ void finance_init() {
|
||||
sub_69E869();
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0069E79A
|
||||
*/
|
||||
void finance_update_daily_profit()
|
||||
{
|
||||
// 0x0135832C is related to savegames
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, money32) = 7 * RCT2_GLOBAL(0x0135832C, money32);
|
||||
RCT2_GLOBAL(0x0135832C, money32) = 0;
|
||||
|
||||
int32 eax = 0;
|
||||
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY))
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
eax /= 4;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_PROFIT, money32) += eax;
|
||||
RCT2_GLOBAL(0x1358334, money32) += eax;
|
||||
RCT2_GLOBAL(0x1358338, money32) += 1;
|
||||
|
||||
//invalidate_window(al = 1C, bx = 0)
|
||||
}
|
||||
|
||||
void sub_69E869()
|
||||
{
|
||||
// This subroutine is loan related and is used for cheat detection
|
||||
|
||||
@@ -41,6 +41,7 @@ void finance_pay_interest();
|
||||
void finance_pay_ride_upkeep();
|
||||
void finance_reset_history();
|
||||
void finance_init();
|
||||
void finance_update_daily_profit();
|
||||
void sub_69E869();
|
||||
|
||||
#endif
|
||||
@@ -1860,7 +1860,7 @@ void handle_shortcut_command(int shortcutIndex)
|
||||
break;
|
||||
case SHORTCUT_SHOW_FINANCIAL_INFORMATION:
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 0x0C))
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800))
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY))
|
||||
window_finances_open();
|
||||
break;
|
||||
case SHORTCUT_SHOW_RESEARCH_INFORMATION:
|
||||
|
||||
@@ -103,7 +103,7 @@ void park_init()
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_LAND_COST, uint16) = MONEY(90, 00);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCTION_RIGHTS_COST, uint16) = MONEY(40,00);
|
||||
RCT2_GLOBAL(0x01358774, uint16) = 0;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) = PARK_FLAGS_11 | PARK_FLAGS_SHOW_REAL_GUEST_NAMES;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) = PARK_FLAGS_NO_MONEY | PARK_FLAGS_SHOW_REAL_GUEST_NAMES;
|
||||
park_reset_history();
|
||||
finance_reset_history();
|
||||
award_reset();
|
||||
@@ -427,7 +427,7 @@ static int park_calculate_guest_generation_probability()
|
||||
probability /= 4;
|
||||
|
||||
// Check if money is enabled
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11)) {
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
// Penalty for overpriced entrance fee relative to total ride value
|
||||
money16 entranceFee = RCT2_GLOBAL(RCT2_ADDRESS_PARK_ENTRANCE_FEE, money16);
|
||||
if (entranceFee > totalRideValue) {
|
||||
|
||||
@@ -35,11 +35,11 @@ enum {
|
||||
PARK_FLAGS_PREF_LESS_INTENSE_RIDES = (1 << 6),
|
||||
PARK_FLAGS_FORBID_MARKETING_CAMPAIGN = (1 << 7),
|
||||
PARK_FLAGS_PREF_MORE_INTENSE_RIDES = (1 << 8),
|
||||
PARK_FLAGS_11 = (1 << 11),
|
||||
PARK_FLAGS_NO_MONEY = (1 << 11),
|
||||
PARK_FLAGS_DIFFICULT_GUEST_GENERATION = (1 << 12),
|
||||
PARK_FLAGS_PARK_FREE_ENTRY = (1 << 13),
|
||||
PARK_FLAGS_DIFFICULT_PARK_RATING = (1 << 14),
|
||||
PARK_FLAGS_NO_MONEY = (1 << 17),
|
||||
PARK_FLAGS_NO_MONEY_SCENARIO = (1 << 17), // equivalent to PARK_FLAGS_NO_MONEY, but used in scenario editor
|
||||
PARK_FLAGS_18 = (1 << 18)
|
||||
};
|
||||
|
||||
|
||||
@@ -223,8 +223,8 @@ void scenario_load_and_play(const rct_scenario_basic *scenario)
|
||||
|
||||
RCT2_GLOBAL(0x009DEB7C, sint16) = 0;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, sint32) &= 0xFFFFF7FF;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, sint32) & 0x20000)
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, sint32) |= 0x800;
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, sint32) & PARK_FLAGS_NO_MONEY_SCENARIO)
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, sint32) |= PARK_FLAGS_NO_MONEY;
|
||||
RCT2_CALLPROC_EBPSAFE(0x00684AC3);
|
||||
RCT2_CALLPROC_EBPSAFE(0x006DFEE4);
|
||||
news_item_init_queue();
|
||||
|
||||
@@ -171,7 +171,7 @@ static void window_game_bottom_toolbar_mouseup()
|
||||
switch (widgetIndex) {
|
||||
case WIDX_LEFT_OUTSET:
|
||||
case WIDX_MONEY:
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800))
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY))
|
||||
window_finances_open();
|
||||
break;
|
||||
case WIDX_GUESTS:
|
||||
@@ -332,7 +332,7 @@ static void window_game_bottom_toolbar_invalidate()
|
||||
}
|
||||
|
||||
// Hide money if there is no money
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x800) {
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY) {
|
||||
window_game_bottom_toolbar_widgets[WIDX_MONEY].type = WWT_EMPTY;
|
||||
window_game_bottom_toolbar_widgets[WIDX_GUESTS].top = 1;
|
||||
window_game_bottom_toolbar_widgets[WIDX_GUESTS].bottom = 17;
|
||||
@@ -426,7 +426,7 @@ static void window_game_bottom_toolbar_draw_left_panel(rct_drawpixelinfo *dpi, r
|
||||
y = window_game_bottom_toolbar_widgets[WIDX_LEFT_OUTSET].top + w->y + 4;
|
||||
|
||||
// Draw money
|
||||
if (!(RCT2_GLOBAL(0x0013573E4, uint32) & 0x800)) {
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
RCT2_GLOBAL(0x013CE952, int) = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, sint32));
|
||||
gfx_draw_string_centred(
|
||||
dpi,
|
||||
|
||||
@@ -580,6 +580,7 @@ static void window_park_anchor_border_widgets(rct_window *w);
|
||||
static void window_park_align_tabs(rct_window *w);
|
||||
static void window_park_set_pressed_tab(rct_window *w);
|
||||
static void window_park_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w);
|
||||
static void window_park_set_disabled_tabs(rct_window *w);
|
||||
|
||||
/**
|
||||
*
|
||||
@@ -599,7 +600,7 @@ rct_window *window_park_open()
|
||||
w->list_information_type = -1;
|
||||
w->var_48C = -1;
|
||||
w->var_492 = 0;
|
||||
RCT2_CALLPROC_X(0x00667F8B, 0, 0, 0, 0, (int)w, 0, 0);
|
||||
window_park_set_disabled_tabs(w);
|
||||
w->colours[0] = 1;
|
||||
w->colours[1] = 19;
|
||||
w->colours[2] = 19;
|
||||
@@ -607,6 +608,16 @@ rct_window *window_park_open()
|
||||
return w;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x00667F8B
|
||||
*/
|
||||
void window_park_set_disabled_tabs(rct_window *w)
|
||||
{
|
||||
// Disable price tab if money is disabled
|
||||
w->disabled_widgets = (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY) ? (1 << WIDX_TAB_4) : 0;
|
||||
}
|
||||
|
||||
#pragma region Entrance page
|
||||
|
||||
/**
|
||||
@@ -2267,7 +2278,7 @@ static void window_park_set_page(rct_window *w, int page)
|
||||
w->var_020 = RCT2_GLOBAL(0x0097BAE0 + (page * 4), uint32);
|
||||
w->event_handlers = window_park_page_events[page];
|
||||
w->widgets = window_park_page_widgets[page];
|
||||
RCT2_CALLPROC_X(0x00667F8B, 0, 0, 0, 0, (int)w, 0, 0);
|
||||
window_park_set_disabled_tabs(w);
|
||||
window_invalidate(w);
|
||||
|
||||
RCT2_CALLPROC_X(w->event_handlers[WE_RESIZE], 0, 0, 0, 0, (int)w, 0, 0);
|
||||
|
||||
@@ -663,7 +663,7 @@ void window_staff_paint() {
|
||||
rct2_free(sprite_dpi);
|
||||
}
|
||||
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_11)) {
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
RCT2_GLOBAL(0x013CE952, uint32) = RCT2_ADDRESS(0x00992A00, uint16)[selectedTab];
|
||||
gfx_draw_string_left(dpi, 1858, (void*)0x013CE952, 0, w->x + 0xA5, w->y + 0x20);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user