implement enter name on scenario complete, closes #605

This commit is contained in:
IntelOrca 2014-11-30 02:17:01 +00:00
parent 88b425f6a7
commit 31ebf03c30
5 changed files with 59 additions and 4 deletions

View File

@ -946,6 +946,8 @@ enum {
STR_FINACNES_PARK_VALUE = 2787,
STR_ENTER_NAME_INTO_SCENARIO_CHART = 2790,
STR_ENTER_NAME = 2791,
STR_PLEASE_ENTER_YOUR_NAME_FOR_THE_SCENARIO_CHART = 2792,
STR_COMPLETED_BY_WITH_COMPANY_VALUE = 2794,
STR_SORT = 2795,

View File

@ -379,7 +379,7 @@ void scenario_success()
if (scenario->flags & SCENARIO_FLAGS_COMPLETED && scenario->company_value < current_val)
break; // not a new high score -> no glory
// bts game_flags, 1 happens here but I don't know what for
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) |= PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT;
scenario->company_value = current_val;
scenario->flags |= SCENARIO_FLAGS_COMPLETED;
scenario->completed_by[0] = 0;
@ -1015,4 +1015,28 @@ int scenario_save(char *path, int flags)
gfx_invalidate_screen();
RCT2_GLOBAL(0x009DEA66, uint16) = 0;
return 1;
}
void scenario_success_submit_name(const char *name)
{
int i;
rct_scenario_basic* scenario;
uint32 scenarioWinCompanyValue;
for (i = 0; i < gScenarioListCount; i++) {
char *cur_scenario_name = RCT2_ADDRESS(0x135936C, char);
scenario = &gScenarioList[i];
if (strncmp(cur_scenario_name, scenario->path, 256) == 0) {
scenarioWinCompanyValue = RCT2_GLOBAL(0x013587C0, uint32);
if (scenario->company_value == scenarioWinCompanyValue) {
strncpy(scenario->completed_by, name, 64);
strncpy((char*)0x013587D8, name, 32);
scenario_scores_save();
}
break;
}
}
RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) &= ~PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT;
}

View File

@ -413,5 +413,6 @@ void scenario_update();
unsigned int scenario_rand();
int scenario_prepare_for_save();
int scenario_save(char *path, int flags);
void scenario_success_submit_name(const char *name);
#endif

View File

@ -259,6 +259,7 @@ static void window_park_stats_paint();
static void window_park_objective_mouseup();
static void window_park_objective_resize();
static void window_park_objective_update(rct_window *w);
static void window_park_objective_textinput();
static void window_park_objective_invalidate();
static void window_park_objective_paint();
@ -443,7 +444,7 @@ static void* window_park_objective_events[] = {
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
window_park_objective_textinput,
window_park_emptysub,
window_park_emptysub,
window_park_emptysub,
@ -1643,7 +1644,14 @@ static void window_park_objective_mouseup()
window_park_set_page(w, widgetIndex - WIDX_TAB_1);
break;
case WIDX_ENTER_NAME:
RCT2_CALLPROC_X(0x006EE308, 2791, 2792, 0, 0, 0, 0, 0);
window_text_input_open(
w,
WIDX_ENTER_NAME,
STR_ENTER_NAME,
STR_PLEASE_ENTER_YOUR_NAME_FOR_THE_SCENARIO_CHART,
0,
0
);
break;
}
}
@ -1671,6 +1679,25 @@ static void window_park_objective_update(rct_window *w)
widget_invalidate(w, WIDX_TAB_6);
}
/**
*
* rct2: 0x006695CC
*/
static void window_park_objective_textinput()
{
uint8 result;
short widgetIndex;
rct_window *w;
char *text;
window_textinput_get_registers(w, widgetIndex, result, text);
if (widgetIndex == WIDX_ENTER_NAME && result && text[0] != 0) {
scenario_success_submit_name(text);
window_invalidate(w);
}
}
/**
*
* rct2: 0x006693B2
@ -1688,7 +1715,7 @@ static void window_park_objective_invalidate()
*((uint32*)0x013CE954) = RCT2_GLOBAL(0x013573D8, uint32);
//
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & 0x02)
if (RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT)
window_park_objective_widgets[WIDX_ENTER_NAME].type = WWT_DROPDOWN_BUTTON;
else
window_park_objective_widgets[WIDX_ENTER_NAME].type = WWT_EMPTY;

View File

@ -28,6 +28,7 @@
enum {
PARK_FLAGS_PARK_OPEN = (1 << 0),
PARK_FLAGS_SCENARIO_COMPLETE_NAME_INPUT = (1 << 1),
PARK_FLAGS_FORBID_LANDSCAPE_CHANGES = (1 << 2),
PARK_FLAGS_FORBID_TREE_REMOVAL = (1 << 3),
PARK_FLAGS_SHOW_REAL_GUEST_NAMES = (1 << 4),