@@ -176,14 +176,16 @@ struct CheatEntry {
|
|||||||
* Order matches with the values of #CheatNumbers
|
* Order matches with the values of #CheatNumbers
|
||||||
*/
|
*/
|
||||||
static const CheatEntry _cheats_ui[] = {
|
static const CheatEntry _cheats_ui[] = {
|
||||||
{CNM_MONEY, SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
{CNM_MONEY, SLE_INT32, STR_CHEAT_MONEY, &_money_cheat_amount, &_cheats.money.been_used, &ClickMoneyCheat },
|
||||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_CHANGE_COMPANY, &_local_company, &_cheats.switch_company.been_used, &ClickChangeCompanyCheat },
|
||||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
{CNM_ALL, SLE_BOOL, STR_CHEAT_EXTRA_DYNAMITE, &_cheats.magic_bulldozer.value, &_cheats.magic_bulldozer.been_used, nullptr },
|
||||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
{CNM_ALL, SLE_BOOL, STR_CHEAT_CROSSINGTUNNELS, &_cheats.crossing_tunnels.value, &_cheats.crossing_tunnels.been_used, nullptr },
|
||||||
{CNM_ALL, SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
{CNM_ALL, SLE_BOOL, STR_CHEAT_NO_JETCRASH, &_cheats.no_jetcrash.value, &_cheats.no_jetcrash.been_used, nullptr },
|
||||||
{CNM_LOCAL_ONLY, SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
{CNM_LOCAL_ONLY, SLE_BOOL, STR_CHEAT_SETUP_PROD, &_cheats.setup_prod.value, &_cheats.setup_prod.been_used, &ClickSetProdCheat },
|
||||||
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
{CNM_LOCAL_ONLY, SLE_UINT8, STR_CHEAT_EDIT_MAX_HL, &_settings_game.construction.max_heightlevel, &_cheats.edit_max_hl.been_used, &ClickChangeMaxHlCheat },
|
||||||
{CNM_LOCAL_ONLY, SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
{CNM_LOCAL_ONLY, SLE_INT32, STR_CHEAT_CHANGE_DATE, &_cur_year, &_cheats.change_date.been_used, &ClickChangeDateCheat },
|
||||||
|
{CNM_ALL, SLF_NOT_IN_SAVE, STR_CHEAT_INFLATION_COST, &_economy.inflation_prices, &_extra_cheats.inflation_cost.been_used, nullptr },
|
||||||
|
{CNM_ALL, SLF_NOT_IN_SAVE, STR_CHEAT_INFLATION_INCOME, &_economy.inflation_payment, &_extra_cheats.inflation_income.been_used, nullptr },
|
||||||
};
|
};
|
||||||
|
|
||||||
static bool IsCheatAllowed(CheatNetworkMode mode)
|
static bool IsCheatAllowed(CheatNetworkMode mode)
|
||||||
@@ -251,6 +253,18 @@ struct CheatWindow : Window {
|
|||||||
DrawSprite((*ce->been_used) ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, box_left, y + icon_y_offset + 2);
|
DrawSprite((*ce->been_used) ? SPR_BOX_CHECKED : SPR_BOX_EMPTY, PAL_NONE, box_left, y + icon_y_offset + 2);
|
||||||
|
|
||||||
switch (ce->type) {
|
switch (ce->type) {
|
||||||
|
case SLF_NOT_IN_SAVE: {
|
||||||
|
/* Change inflation factors */
|
||||||
|
|
||||||
|
/* Draw [<][>] boxes for settings of an integer-type */
|
||||||
|
DrawArrowButtons(button_left, y + icon_y_offset, COLOUR_YELLOW, clicked - (i * 2), true, true);
|
||||||
|
|
||||||
|
uint64 val = (uint64)ReadValue(ce->variable, SLE_UINT64);
|
||||||
|
SetDParam(0, val * 1000 >> 16);
|
||||||
|
SetDParam(1, 3);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SLE_BOOL: {
|
case SLE_BOOL: {
|
||||||
bool on = (*(bool*)ce->variable);
|
bool on = (*(bool*)ce->variable);
|
||||||
|
|
||||||
@@ -302,6 +316,10 @@ struct CheatWindow : Window {
|
|||||||
if (!IsCheatAllowed(ce->mode)) continue;
|
if (!IsCheatAllowed(ce->mode)) continue;
|
||||||
lines++;
|
lines++;
|
||||||
switch (ce->type) {
|
switch (ce->type) {
|
||||||
|
case SLF_NOT_IN_SAVE:
|
||||||
|
/* Change inflation factors */
|
||||||
|
break;
|
||||||
|
|
||||||
case SLE_BOOL:
|
case SLE_BOOL:
|
||||||
SetDParam(0, STR_CONFIG_SETTING_ON);
|
SetDParam(0, STR_CONFIG_SETTING_ON);
|
||||||
width = max(width, GetStringBoundingBox(ce->str).width);
|
width = max(width, GetStringBoundingBox(ce->str).width);
|
||||||
@@ -371,6 +389,17 @@ struct CheatWindow : Window {
|
|||||||
SetDParam(0, value);
|
SetDParam(0, value);
|
||||||
ShowQueryString(STR_JUST_INT, STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED);
|
ShowQueryString(STR_JUST_INT, STR_CHEAT_EDIT_MAX_HL_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED);
|
||||||
return;
|
return;
|
||||||
|
} else if (ce->type == SLF_NOT_IN_SAVE && x >= 20 + this->box_width + SETTING_BUTTON_WIDTH) {
|
||||||
|
clicked_widget = btn;
|
||||||
|
uint64 val = (uint64)ReadValue(ce->variable, SLE_UINT64);
|
||||||
|
SetDParam(0, val * 1000 >> 16);
|
||||||
|
SetDParam(1, 3);
|
||||||
|
StringID str = (btn == CHT_INFLATION_COST) ? STR_CHEAT_INFLATION_COST_QUERY_CAPT : STR_CHEAT_INFLATION_INCOME_QUERY_CAPT;
|
||||||
|
char *saved = _settings_game.locale.digit_group_separator;
|
||||||
|
_settings_game.locale.digit_group_separator = const_cast<char*>("");
|
||||||
|
ShowQueryString(STR_JUST_DECIMAL, str, 12, this, CS_NUMERAL_DECIMAL, QSF_ACCEPT_UNCHANGED);
|
||||||
|
_settings_game.locale.digit_group_separator = saved;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Not clicking a button? */
|
/* Not clicking a button? */
|
||||||
@@ -379,6 +408,14 @@ struct CheatWindow : Window {
|
|||||||
if (!_networking) *ce->been_used = true;
|
if (!_networking) *ce->been_used = true;
|
||||||
|
|
||||||
switch (ce->type) {
|
switch (ce->type) {
|
||||||
|
case SLF_NOT_IN_SAVE: {
|
||||||
|
/* Change inflation factors */
|
||||||
|
uint64 value = (uint64)ReadValue(ce->variable, SLE_UINT64) + (((x >= 10 + this->box_width + SETTING_BUTTON_WIDTH / 2) ? 1 : -1) << 16);
|
||||||
|
value = Clamp<uint64>(value, 1 << 16, MAX_INFLATION);
|
||||||
|
DoCommandP(0, (uint32)btn, (uint32)value, CMD_CHEAT_SETTING);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case SLE_BOOL:
|
case SLE_BOOL:
|
||||||
value ^= 1;
|
value ^= 1;
|
||||||
if (ce->proc != nullptr && !_networking) ce->proc(value, 0);
|
if (ce->proc != nullptr && !_networking) ce->proc(value, 0);
|
||||||
@@ -414,12 +451,20 @@ struct CheatWindow : Window {
|
|||||||
|
|
||||||
void OnQueryTextFinished(char *str) override
|
void OnQueryTextFinished(char *str) override
|
||||||
{
|
{
|
||||||
if (_networking) return;
|
|
||||||
|
|
||||||
/* Was 'cancel' pressed or nothing entered? */
|
/* Was 'cancel' pressed or nothing entered? */
|
||||||
if (str == nullptr || StrEmpty(str)) return;
|
if (str == nullptr || StrEmpty(str)) return;
|
||||||
|
|
||||||
const CheatEntry *ce = &_cheats_ui[clicked_widget];
|
const CheatEntry *ce = &_cheats_ui[clicked_widget];
|
||||||
|
|
||||||
|
if (ce->type == SLF_NOT_IN_SAVE) {
|
||||||
|
char tmp_buffer[32];
|
||||||
|
strecpy(tmp_buffer, str, lastof(tmp_buffer));
|
||||||
|
str_replace_wchar(tmp_buffer, lastof(tmp_buffer), GetDecimalSeparatorChar(), '.');
|
||||||
|
DoCommandP(0, (uint32)clicked_widget, (uint32)Clamp<uint64>(atof(tmp_buffer) * 65536.0, 1 << 16, MAX_INFLATION), CMD_CHEAT_SETTING);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_networking) return;
|
||||||
int oldvalue = (int32)ReadValue(ce->variable, ce->type);
|
int oldvalue = (int32)ReadValue(ce->variable, ce->type);
|
||||||
int value = atoi(str);
|
int value = atoi(str);
|
||||||
*ce->been_used = true;
|
*ce->been_used = true;
|
||||||
|
@@ -38,6 +38,8 @@ struct Cheats {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct ExtraCheats {
|
struct ExtraCheats {
|
||||||
|
Cheat inflation_cost; ///< inflation cost factor
|
||||||
|
Cheat inflation_income; ///< inflation income factor
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Available cheats. */
|
/** Available cheats. */
|
||||||
@@ -50,6 +52,8 @@ enum CheatNumbers {
|
|||||||
CHT_SETUP_PROD, ///< Allow manually editing of industry production.
|
CHT_SETUP_PROD, ///< Allow manually editing of industry production.
|
||||||
CHT_EDIT_MAX_HL, ///< Edit maximum allowed heightlevel
|
CHT_EDIT_MAX_HL, ///< Edit maximum allowed heightlevel
|
||||||
CHT_CHANGE_DATE, ///< Do time traveling.
|
CHT_CHANGE_DATE, ///< Do time traveling.
|
||||||
|
CHT_INFLATION_COST, ///< Change inflation cost factor
|
||||||
|
CHT_INFLATION_INCOME,///< Change inflation income factor
|
||||||
|
|
||||||
CHT_NUM_CHEATS, ///< Number of cheats.
|
CHT_NUM_CHEATS, ///< Number of cheats.
|
||||||
};
|
};
|
||||||
|
@@ -2080,6 +2080,10 @@ STR_CHEAT_SWITCH_CLIMATE_TOYLAND_LANDSCAPE :Toyland landsca
|
|||||||
STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE}{DATE_SHORT}
|
STR_CHEAT_CHANGE_DATE :{LTBLUE}Change date: {ORANGE}{DATE_SHORT}
|
||||||
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change current year
|
STR_CHEAT_CHANGE_DATE_QUERY_CAPT :{WHITE}Change current year
|
||||||
STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1}
|
STR_CHEAT_SETUP_PROD :{LTBLUE}Enable modifying production values: {ORANGE}{STRING1}
|
||||||
|
STR_CHEAT_INFLATION_COST :{LTBLUE}Change inflation cost factor: {ORANGE}{DECIMAL}
|
||||||
|
STR_CHEAT_INFLATION_COST_QUERY_CAPT :{WHITE}Change inflation cost factor
|
||||||
|
STR_CHEAT_INFLATION_INCOME :{LTBLUE}Change inflation income factor: {ORANGE}{DECIMAL}
|
||||||
|
STR_CHEAT_INFLATION_INCOME_QUERY_CAPT :{WHITE}Change inflation income factor
|
||||||
|
|
||||||
# Livery window
|
# Livery window
|
||||||
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme
|
STR_LIVERY_CAPTION :{WHITE}{COMPANY} - Colour Scheme
|
||||||
|
@@ -249,6 +249,32 @@ CommandCost CmdCheatSetting(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
|||||||
cht = &_cheats.no_jetcrash;
|
cht = &_cheats.no_jetcrash;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case CHT_INFLATION_INCOME:
|
||||||
|
if (flags & DC_EXEC) {
|
||||||
|
_extra_cheats.inflation_income.been_used = true;
|
||||||
|
_economy.inflation_payment = Clamp<uint64>(p2, 1 << 16, MAX_INFLATION);
|
||||||
|
if (_economy.inflation_payment > _economy.inflation_prices) {
|
||||||
|
_economy.inflation_prices = _economy.inflation_payment;
|
||||||
|
_extra_cheats.inflation_cost.been_used = true;
|
||||||
|
}
|
||||||
|
RecomputePrices();
|
||||||
|
SetWindowDirty(WC_CHEATS, 0);
|
||||||
|
}
|
||||||
|
return CommandCost();
|
||||||
|
|
||||||
|
case CHT_INFLATION_COST:
|
||||||
|
if (flags & DC_EXEC) {
|
||||||
|
_extra_cheats.inflation_cost.been_used = true;
|
||||||
|
_economy.inflation_prices = Clamp<uint64>(p2, 1 << 16, MAX_INFLATION);
|
||||||
|
if (_economy.inflation_payment > _economy.inflation_prices) {
|
||||||
|
_economy.inflation_payment = _economy.inflation_prices;
|
||||||
|
_extra_cheats.inflation_income.been_used = true;
|
||||||
|
}
|
||||||
|
RecomputePrices();
|
||||||
|
SetWindowDirty(WC_CHEATS, 0);
|
||||||
|
}
|
||||||
|
return CommandCost();
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return CMD_ERROR;
|
return CMD_ERROR;
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,8 @@ struct ExtraCheatNameDesc {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static ExtraCheatNameDesc _extra_cheat_descs[] = {
|
static ExtraCheatNameDesc _extra_cheat_descs[] = {
|
||||||
|
{ "inflation_cost", &_extra_cheats.inflation_cost },
|
||||||
|
{ "inflation_income", &_extra_cheats.inflation_income },
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Reference in New Issue
Block a user