Example #1
0
/**
 *
 *  rct2: 0x0066DDF2
 */
static void window_save_prompt_mouseup(rct_window *w, sint32 widgetIndex)
{
	if (gScreenFlags & (SCREEN_FLAGS_TITLE_DEMO | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
		switch (widgetIndex) {
		case WQIDX_OK:
			game_load_or_quit_no_save_prompt();
			break;
		case WQIDX_CLOSE:
		case WQIDX_CANCEL:
			window_close(w);
			break;
		}
		return;
	} else {
		switch (widgetIndex) {
		case WIDX_SAVE:
			if (gScreenFlags & (SCREEN_FLAGS_EDITOR)) {
				window_loadsave_open(LOADSAVETYPE_SAVE | LOADSAVETYPE_LANDSCAPE, gS6Info.name);
			} else {
				save_game_as();
			}
			window_close(w);
			gLoadSaveCallback = window_save_prompt_callback;
			break;
		case WIDX_DONT_SAVE:
			game_load_or_quit_no_save_prompt();
			return;
		case WIDX_CLOSE:
		case WIDX_CANCEL:
			window_close(w);
			return;
		}
	}
}
Example #2
0
/**
 * 
 *  rct2: 0x0066DB5F
 */
static void game_load_or_quit()
{
	char input_bl, input_dl;
	short input_di;

	__asm mov input_bl, bl
	__asm mov input_dl, dl
	__asm mov input_di, di

	if (!(input_bl & 1))
		return; // 0;
	
	switch (input_dl) {
	case 0:
		RCT2_GLOBAL(0x009A9802, uint16) = input_di;
		window_save_prompt_open();
		break;
	case 1:
		window_close_by_id(WC_SAVE_PROMPT, 0);
		break;
	default:
		game_load_or_quit_no_save_prompt();
		break;
	}

	__asm mov ebx, 0
}
Example #3
0
/**
 *
 *  rct2: 0x0066DDF2
 */
static void window_save_prompt_mouseup(rct_window *w, rct_widgetindex widgetIndex)
{
    if (gScreenFlags & (SCREEN_FLAGS_TITLE_DEMO | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
        switch (widgetIndex) {
        case WQIDX_OK:
            game_load_or_quit_no_save_prompt();
            break;
        case WQIDX_CLOSE:
        case WQIDX_CANCEL:
            window_close(w);
            break;
        }
        return;
    } else {
        switch (widgetIndex)
        {
        case WIDX_SAVE:
        {
            Intent * intent;

            if (gScreenFlags & (SCREEN_FLAGS_EDITOR))
            {
                intent = new Intent(WC_LOADSAVE);
                intent->putExtra(INTENT_EXTRA_LOADSAVE_TYPE, LOADSAVETYPE_SAVE | LOADSAVETYPE_LANDSCAPE);
                intent->putExtra(INTENT_EXTRA_PATH, std::string{gS6Info.name});
            }
            else
            {
                intent = (Intent *) create_save_game_as_intent();
            }
            window_close(w);
            intent->putExtra(INTENT_EXTRA_CALLBACK, (void *) window_save_prompt_callback);
            context_open_intent(intent);
            delete intent;
            break;
        }
        case WIDX_DONT_SAVE:
            game_load_or_quit_no_save_prompt();
            return;
        case WIDX_CLOSE:
        case WIDX_CANCEL:
            window_close(w);
            return;
        }
    }
}
Example #4
0
/**
 *
 *  rct2: 0x0066DDF2
 */
static void window_save_prompt_mouseup(rct_window *w, int widgetIndex)
{
	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TITLE_DEMO | SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
		switch (widgetIndex) {
		case WQIDX_OK:
			game_load_or_quit_no_save_prompt();
			break;
		case WQIDX_CLOSE:
		case WQIDX_CANCEL:
			window_close(w);
			break;
		}
		return;
	} else {
		switch (widgetIndex) {
		case WIDX_SAVE:
			save_game_as();
			window_close(w);
			gLoadSaveCallback = window_save_prompt_callback;
			break;
		case WIDX_DONT_SAVE:
			game_load_or_quit_no_save_prompt();
			return;
		case WIDX_CLOSE:
		case WIDX_CANCEL:
			window_close(w);
			return;
		}
	}

	if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 0) {
		if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 1) {
			RCT2_CALLPROC_EBPSAFE(0x0066EE54);
			game_load_or_quit_no_save_prompt();
			return;
		} else {
			tutorial_stop();
			game_load_or_quit_no_save_prompt();
			return;
		}
	}
}
Example #5
0
static void window_save_prompt_callback(int result)
{
	if (result == MODAL_RESULT_OK) {
		game_load_or_quit_no_save_prompt();
	}
}
Example #6
0
/**
 *
 *  rct2: 0x0066DCBE
 */
void window_save_prompt_open()
{
	int stringId, width, height;
	rct_window* window;
	unsigned short prompt_mode;
	rct_widget *widgets;
	uint64 enabled_widgets;

	prompt_mode = RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16);
	if (prompt_mode == PM_QUIT)
		prompt_mode = PM_SAVE_BEFORE_QUIT;

	// do not show save prompt if we're in the title demo and click on load game
	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TITLE_DEMO) {
		game_load_or_quit_no_save_prompt();
		return;
	}

	if (!gConfigGeneral.confirmation_prompt) {
		/* game_load_or_quit_no_save_prompt() will exec requested task and close this window
		* immediately again.
		* TODO restructure these functions when we're sure game_load_or_quit_no_save_prompt()
		* and game_load_or_quit() are not called by the original binary anymore.
		*/

		if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 0) {
			if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 1) {
				RCT2_CALLPROC_EBPSAFE(0x0066EE54);
				game_load_or_quit_no_save_prompt();
				return;
			}
			else {
				tutorial_stop();
				game_load_or_quit_no_save_prompt();
				return;
			}
		}

		if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_AGE, uint16) < 3840) {
			game_load_or_quit_no_save_prompt();
			return;
		}
	}

	// Check if window is already open
	window = window_bring_to_front_by_class(WC_SAVE_PROMPT);
	if (window){
		window_close(window);
	}

	if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
		widgets = window_quit_prompt_widgets;
		enabled_widgets =
			(1 << WQIDX_CLOSE) |
			(1 << WQIDX_OK) |
			(1 << WQIDX_CANCEL);
		width = 177;
		height = 34;
	} else {
		widgets = window_save_prompt_widgets;
		enabled_widgets =
			(1 << WIDX_CLOSE) |
			(1 << WIDX_SAVE) |
			(1 << WIDX_DONT_SAVE) |
			(1 << WIDX_CANCEL);
		width = 260;
		height = 50;
	}

	window = window_create_centred(
		width,
		height,
		&window_save_prompt_events,
		WC_SAVE_PROMPT,
		WF_TRANSPARENT | WF_STICK_TO_FRONT
	);

	window->widgets = widgets;
	window->enabled_widgets = enabled_widgets;
	window_init_scroll_widgets(window);

	// Pause the game
	RCT2_GLOBAL(RCT2_ADDRESS_GAME_PAUSED, uint8) |= 2;
	audio_pause_sounds();
	window_invalidate_by_class(WC_TOP_TOOLBAR);

	stringId = prompt_mode + STR_LOAD_GAME_PROMPT_TITLE;
	if (stringId == STR_LOAD_GAME_PROMPT_TITLE && RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
		stringId = STR_LOAD_LANDSCAPE_PROMPT_TITLE;
	if (stringId == STR_QUIT_GAME_PROMPT_TITLE && RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
		stringId = STR_QUIT_SCENARIO_EDITOR;
	window_save_prompt_widgets[WIDX_TITLE].image = stringId;
	window_save_prompt_widgets[WIDX_LABEL].image = prompt_mode + STR_SAVE_BEFORE_LOADING;
}
Example #7
0
/**
 *
 *  rct2: 0x0066DDF2
 */
static void window_save_prompt_mouseup()
{
    short widgetIndex;
    rct_window *w;
    short prompt_mode;

    window_widget_get_registers(w, widgetIndex);

    prompt_mode = RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16);

    if (prompt_mode == PM_QUIT) {
        switch (widgetIndex) {
        case WQIDX_OK:
            rct2_finish();
            break;
        case WQIDX_CLOSE:
        case WQIDX_CANCEL:
            window_close(w);
            break;
        }
        return;
    } else {
        switch (widgetIndex) {
        case WIDX_SAVE:
            if (!save_game()) {
                // user pressed cancel
                window_close(w);
                return;
            }
            break;
        case WIDX_DONT_SAVE:
            break;
        case WIDX_CLOSE:
        case WIDX_CANCEL:
            window_close(w);
            return;
        }
    }


    if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 0x0D) {
        game_load_or_quit_no_save_prompt();
        return;
    }

    if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 0) {
        if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 1) {
            RCT2_CALLPROC_EBPSAFE(0x0066EE54);
            game_load_or_quit_no_save_prompt();
            return;
        } else {
            tutorial_stop();
            game_load_or_quit_no_save_prompt();
            return;
        }
    }

    if (RCT2_GLOBAL(0x009DEA66, uint16) < 3840) {
        game_load_or_quit_no_save_prompt();
        return;
    }
}
Example #8
0
/**
 *
 *  rct2: 0x0066DCBE
 */
void window_save_prompt_open()
{
    int stringId, x, y;
    rct_window* window;
    unsigned short prompt_mode;
    rct_widget *widgets;
    uint64 enabled_widgets;

    prompt_mode = RCT2_GLOBAL(RCT2_ADDRESS_SAVE_PROMPT_MODE, uint16);

    // do not show save prompt if we're in the title demo and click on load game
    if (prompt_mode != PM_QUIT && RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TITLE_DEMO) {
        game_load_or_quit_no_save_prompt();
        return;
    }

    // Check if window is already open
    window = window_bring_to_front_by_id(WC_SAVE_PROMPT, 0);
    if (window) {
        window_close(window);
    }

    if (prompt_mode == PM_QUIT) {
        widgets = window_quit_prompt_widgets;
        enabled_widgets =
            (1 << WQIDX_CLOSE) |
            (1 << WQIDX_OK) |
            (1 << WQIDX_CANCEL);
        x = 177;
        y = 34;
    } else {
        widgets = window_save_prompt_widgets;
        enabled_widgets =
            (1 << WIDX_CLOSE) |
            (1 << WIDX_SAVE) |
            (1 << WIDX_DONT_SAVE) |
            (1 << WIDX_CANCEL);
        x = 260;
        y = 50;
    }

    window = window_create(
                 (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_WIDTH, sint16) / 2) - x / 2,
                 max(28, (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_HEIGHT, sint16) / 2) - y / 2),
                 x,
                 y,
                 (uint32*)window_save_prompt_events,
                 WC_SAVE_PROMPT,
                 WF_TRANSPARENT | WF_STICK_TO_FRONT
             );

    window->widgets = widgets;
    window->enabled_widgets = enabled_widgets;
    window_init_scroll_widgets(window);
    window->colours[0] = 154;

    // Pause the game
    RCT2_GLOBAL(0x009DEA6E, uint8) |= 2;
    pause_sounds();
    window_invalidate_by_id(0x80 | WC_TOP_TOOLBAR, 0);

    stringId = prompt_mode + STR_LOAD_GAME;
    if (stringId == STR_LOAD_GAME && RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
        stringId = STR_LOAD_LANDSCAPE;
    if (stringId == STR_QUIT_GAME && RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2)
        stringId = STR_QUIT_SCENARIO_EDITOR;
    window_save_prompt_widgets[WIDX_TITLE].image = stringId;
    window_save_prompt_widgets[WIDX_LABEL].image = prompt_mode + STR_SAVE_BEFORE_LOADING;

    if (!gGeneral_config.confirmation_prompt) {
        /* game_load_or_quit_no_save_prompt() will exec requested task and close this window
         * immediately again.
         * TODO restructure these functions when we're sure game_load_or_quit_no_save_prompt()
         * and game_load_or_quit() are not called by the original binary anymore.
         */

        if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 0x0D) {
            game_load_or_quit_no_save_prompt();
            return;
        }

        if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 0) {
            if (RCT2_GLOBAL(RCT2_ADDRESS_ON_TUTORIAL, uint8) != 1) {
                RCT2_CALLPROC_EBPSAFE(0x0066EE54);
                game_load_or_quit_no_save_prompt();
                return;
            } else {
                tutorial_stop();
                game_load_or_quit_no_save_prompt();
                return;
            }
        }

        if (RCT2_GLOBAL(0x009DEA66, uint16) < 3840) {
            game_load_or_quit_no_save_prompt();
            return;
        }
    }

}
Example #9
0
static void window_save_prompt_callback(sint32 result, const utf8 * path)
{
	if (result == MODAL_RESULT_OK) {
		game_load_or_quit_no_save_prompt();
	}
}
Example #10
0
/**
 *
 *  rct2: 0x0066DCBE
 */
void window_save_prompt_open()
{
	sint32 width, height;
	rct_string_id stringId;
	rct_window* window;
	uint8 prompt_mode;
	rct_widget *widgets;
	uint64 enabled_widgets;

	prompt_mode = gSavePromptMode;
	if (prompt_mode == PM_QUIT)
		prompt_mode = PM_SAVE_BEFORE_QUIT;

	// do not show save prompt if we're in the title demo and click on load game
	if (gScreenFlags & SCREEN_FLAGS_TITLE_DEMO) {
		game_load_or_quit_no_save_prompt();
		return;
	}

	if (!gConfigGeneral.confirmation_prompt) {
		/* game_load_or_quit_no_save_prompt() will exec requested task and close this window
		* immediately again.
		* TODO restructure these functions when we're sure game_load_or_quit_no_save_prompt()
		* and game_load_or_quit() are not called by the original binary anymore.
		*/

		if (gScreenAge < 3840) {
			game_load_or_quit_no_save_prompt();
			return;
		}
	}

	// Check if window is already open
	window = window_bring_to_front_by_class(WC_SAVE_PROMPT);
	if (window){
		window_close(window);
	}

	if (gScreenFlags & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) {
		widgets = window_quit_prompt_widgets;
		enabled_widgets =
			(1 << WQIDX_CLOSE) |
			(1 << WQIDX_OK) |
			(1 << WQIDX_CANCEL);
		width = 177;
		height = 34;
	} else {
		widgets = window_save_prompt_widgets;
		enabled_widgets =
			(1 << WIDX_CLOSE) |
			(1 << WIDX_SAVE) |
			(1 << WIDX_DONT_SAVE) |
			(1 << WIDX_CANCEL);
		width = 260;
		height = 50;
	}

	if (prompt_mode >= countof(window_save_prompt_labels)) {
		log_warning("Invalid save prompt mode %u", prompt_mode);
		return;
	}
	window = window_create_centred(
		width,
		height,
		&window_save_prompt_events,
		WC_SAVE_PROMPT,
		WF_TRANSPARENT | WF_STICK_TO_FRONT
	);

	window->widgets = widgets;
	window->enabled_widgets = enabled_widgets;
	window_init_scroll_widgets(window);

	// Pause the game
	gGamePaused |= GAME_PAUSED_MODAL;
	audio_pause_sounds();
	window_invalidate_by_class(WC_TOP_TOOLBAR);

	stringId = window_save_prompt_labels[prompt_mode][0];
	if (stringId == STR_LOAD_GAME_PROMPT_TITLE && gScreenFlags & 2)
		stringId = STR_LOAD_LANDSCAPE_PROMPT_TITLE;
	if (stringId == STR_QUIT_GAME_PROMPT_TITLE && gScreenFlags & 2)
		stringId = STR_QUIT_SCENARIO_EDITOR;
	window_save_prompt_widgets[WIDX_TITLE].text = stringId;
	window_save_prompt_widgets[WIDX_LABEL].text = window_save_prompt_labels[prompt_mode][1];
}