mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-18 05:22:42 +01:00
implement game_command_set_current_loan
This commit is contained in:
@@ -904,7 +904,7 @@ static uint32 game_do_command_table[58] = {
|
||||
0x006E5597,
|
||||
0x006B893C,
|
||||
0x006B8E1B,
|
||||
0x0069DFB3,
|
||||
0,
|
||||
0,
|
||||
0x006D13FE,
|
||||
0,
|
||||
@@ -967,7 +967,7 @@ static GAME_COMMAND_POINTER* new_game_command_table[58] = {
|
||||
game_command_emptysub,
|
||||
game_command_emptysub,
|
||||
game_command_emptysub,
|
||||
game_command_emptysub,
|
||||
game_command_set_current_loan,
|
||||
game_command_set_research_funding,
|
||||
game_command_emptysub,
|
||||
game_command_start_campaign,
|
||||
|
||||
@@ -822,6 +822,7 @@ enum {
|
||||
STR_TILE_SMOOTHING_TIP = 2362,
|
||||
STR_GRIDLINES = 2363,
|
||||
STR_GRIDLINES_TIP = 2364,
|
||||
STR_BANK_REFUSES_TO_INCREASE_LOAN = 2365,
|
||||
STR_CELSIUS = 2366,
|
||||
STR_FAHRENHEIT = 2367,
|
||||
//STR_NONE = 2368,
|
||||
|
||||
@@ -19,7 +19,9 @@
|
||||
*****************************************************************************/
|
||||
|
||||
#include "../addresses.h"
|
||||
#include "../game.h"
|
||||
#include "../interface/window.h"
|
||||
#include "../localisation/localisation.h"
|
||||
#include "../peep/peep.h"
|
||||
#include "../ride/ride.h"
|
||||
#include "../world/park.h"
|
||||
@@ -239,7 +241,7 @@ void sub_69E869()
|
||||
{
|
||||
// This subroutine is loan related and is used for cheat detection
|
||||
sint32 value = 0x70093A;
|
||||
value -= RCT2_GLOBAL(0x013573DC, money32); // Cheat detection
|
||||
value -= RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32);
|
||||
value = ror32(value, 5);
|
||||
value -= RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32);
|
||||
value = ror32(value, 7);
|
||||
@@ -247,3 +249,50 @@ void sub_69E869()
|
||||
value = ror32(value, 3);
|
||||
RCT2_GLOBAL(0x013587C4, sint32) = value;
|
||||
}
|
||||
|
||||
void finance_set_loan(money32 loan)
|
||||
{
|
||||
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, loan, GAME_COMMAND_SET_CURRENT_LOAN, 0, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0069DFB3
|
||||
*/
|
||||
void game_command_set_current_loan(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp)
|
||||
{
|
||||
money32 money, loanDifference, currentLoan;
|
||||
money32 newLoan = *edx;
|
||||
|
||||
currentLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32);
|
||||
money = DECRYPT_MONEY(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32));
|
||||
loanDifference = currentLoan - newLoan;
|
||||
|
||||
RCT2_GLOBAL(0x0141F56C, uint8) = 52;
|
||||
if (newLoan > currentLoan) {
|
||||
if (newLoan > RCT2_GLOBAL(RCT2_ADDRESS_MAXIMUM_LOAN, money32)) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, uint16) = STR_BANK_REFUSES_TO_INCREASE_LOAN;
|
||||
*ebx = MONEY32_UNDEFINED;
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (loanDifference > money) {
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, uint16) = STR_NOT_ENOUGH_CASH_AVAILABLE;
|
||||
*ebx = MONEY32_UNDEFINED;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (*ebx & GAME_COMMAND_FLAG_APPLY) {
|
||||
money -= loanDifference;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) = newLoan;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_INITIAL_CASH, money32) = money;
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_MONEY_ENCRYPTED, money32) = ENCRYPT_MONEY(money);
|
||||
sub_69E869();
|
||||
|
||||
window_invalidate_by_class(WC_FINANCES);
|
||||
RCT2_GLOBAL(0x009A9804, uint16) |= 1;
|
||||
}
|
||||
|
||||
*ebx = 0;
|
||||
}
|
||||
@@ -44,4 +44,7 @@ void finance_init();
|
||||
void finance_update_daily_profit();
|
||||
void sub_69E869();
|
||||
|
||||
void finance_set_loan(money32 loan);
|
||||
void game_command_set_current_loan(int* eax, int* ebx, int* ecx, int* edx, int* esi, int* edi, int* ebp);
|
||||
|
||||
#endif
|
||||
@@ -599,13 +599,13 @@ static void window_finances_summary_mousedown(int widgetIndex, rct_window*w, rct
|
||||
case WIDX_LOAN_INCREASE:
|
||||
newLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) + MONEY(1000, 00);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_BORROW_ANY_MORE_MONEY;
|
||||
game_do_command(0, 1, 0, newLoan, GAME_COMMAND_SET_CURRENT_LOAN, 0, 0);
|
||||
finance_set_loan(newLoan);
|
||||
break;
|
||||
case WIDX_LOAN_DECREASE:
|
||||
if (RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) > 0) {
|
||||
newLoan = RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_LOAN, money32) - MONEY(1000, 00);
|
||||
RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TITLE, uint16) = STR_CANT_PAY_BACK_LOAN;
|
||||
game_do_command(0, 1, 0, newLoan, GAME_COMMAND_SET_CURRENT_LOAN, 0, 0);
|
||||
finance_set_loan(newLoan);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user