示例#1
0
/* rct2: 0x006C6E14 */
void window_construction_mouseup(){
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	RCT2_CALLPROC_X(0x6C6A77, 0, 0, 0, 0, 0, 0, 0);

	switch (widgetIndex){
	case WIDX_CLOSE:
		window_close(w);
		break;
	case 27:
		RCT2_CALLPROC_X(0x6C9296, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	case 26:
		RCT2_CALLPROC_X(0x6C93B8, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	case 23:
		RCT2_CALLPROC_X(0x6C9F72, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	case WIDX_DEMOLISH:
		window_construction_mouseup_demolish(w);
		break;
	case 32:
		RCT2_CALLPROC_X(0x6C78AA, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	case 29:
		RCT2_CALLPROC_X(0x6C7802, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	case 30:
		RCT2_CALLPROC_X(0x6C7866, 0, 0, 0, widgetIndex, (int)w, 0, 0);
		break;
	}
}
示例#2
0
/**
 *
 *  rct2: 0x006CFA31
 */
static void window_track_list_mouseup()
{
	rct_window *w;
	short widgetIndex;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) {
			window_close_by_number(WC_MANAGE_TRACK_DESIGN, w->number);
			window_close_by_number(WC_TRACK_DELETE_PROMPT, w->number);
			trackmanager_load();
		}
		break;
	case WIDX_ROTATE:
		RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_ROTATION, uint8)++;
		RCT2_GLOBAL(RCT2_ADDRESS_TRACK_PREVIEW_ROTATION, uint8) %= 4;
		window_invalidate(w);
		break;
	case WIDX_TOGGLE_SCENERY:
		RCT2_GLOBAL(RCT2_ADDRESS_TRACK_DESIGN_SCENERY_TOGGLE, uint8) ^= 1;
		reset_track_list_cache();
		window_invalidate(w);
		break;
	}
}
示例#3
0
static void window_text_input_mouseup(){
	short widgetIndex;
	rct_window *w;
	rct_window *calling_w;
	window_widget_get_registers(w, widgetIndex);

	calling_w = window_find_by_number(calling_class, calling_number);

	switch (widgetIndex){
	case WIDX_CANCEL:
	case WIDX_CLOSE:
		platform_stop_text_input();
		// Pass back the text that has been entered.
		// ecx when zero means text input failed
		if (calling_w != NULL)
			window_event_textinput_call(calling_w, calling_widget, NULL);
		window_close(w);
		break;
	case WIDX_OKAY:
		platform_stop_text_input();
		// Pass back the text that has been entered.
		// ecx when none zero means text input success
		if (calling_w != NULL)
			window_event_textinput_call(calling_w, calling_widget, text_input);
		window_close(w);
	}
}
/**
*
*  rct2: 0x006E3AE0
*/
static void window_shortcut_change_mouseup(){
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex){
	case WIDX_CLOSE:
		window_close(w);
	}
}
示例#5
0
static void window_title_options_mouseup()
{
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	if (RCT2_GLOBAL(RCT2_ADDRESS_RUN_INTRO_TICK_PART, uint8) != 0)
		return;

	if (widgetIndex == 0)
		window_options_open();
}
示例#6
0
static void window_tile_inspector_mouseup()
{
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	}
}
示例#7
0
文件: land.c 项目: MaikelS11/OpenRCT2
/**
 *
 *  rct2: 0x00664064
 */
static void window_land_mouseup()
{
	int limit;
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	case WIDX_DECREMENT:
		// Decrement land tool size
		RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16)--;

		// FEATURE: minimum size is always 0
		limit = 0;
		// limit = (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2 ? 0 : 1);

		if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) < limit)
			RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = limit;

		// Invalidate the window
		window_invalidate(w);
		break;
	case WIDX_INCREMENT:
		// Increment land tool size
		RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16)++;

		// FEATURE: maximum size is 64
		limit = 64;
		// limit = (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2 ? 7 : 5);
		
		if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > limit)
			RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = limit;

		// Invalidate the window
		window_invalidate(w);
		break;
	case WIDX_PAINTMODE:
		LandPaintMode ^= 1;
		window_invalidate(w);
		break;
	case WIDX_PREVIEW:
		window_land_inputsize(w);
		break;
	}
}
示例#8
0
/**
 *
 *  rct2: 0x006A7E92
 */
static void window_footpath_mouseup()
{
    short widgetIndex;
    rct_window *w;

    window_widget_get_registers(w, widgetIndex);

    switch (widgetIndex) {
    case WIDX_CLOSE:
        window_close(w);
        break;
    case WIDX_CONSTRUCT:
        window_footpath_construct();
        break;
    case WIDX_REMOVE:
        window_footpath_remove();
        break;
    case WIDX_CONSTRUCT_ON_LAND:
        if (RCT2_GLOBAL(RCT2_ADDRESS_PATH_CONSTRUCTION_MODE, uint8) == PATH_CONSTRUCTION_MODE_LAND)
            break;

        _window_footpath_cost = 0x80000000;
        tool_cancel();
        RCT2_CALLPROC_EBPSAFE(0x006A7831);
        RCT2_CALLPROC_EBPSAFE(0x0068AB1B);
        RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) &= ~2;
        RCT2_GLOBAL(RCT2_ADDRESS_PATH_CONSTRUCTION_MODE, uint8) = PATH_CONSTRUCTION_MODE_LAND;
        tool_set(w, WIDX_CONSTRUCT_ON_LAND, 17);
        RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
        RCT2_GLOBAL(RCT2_ADDRESS_PATH_ERROR_OCCURED, uint8) = 0;
        RCT2_CALLPROC_EBPSAFE(0x006A855C);
        break;
    case WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL:
        if (RCT2_GLOBAL(RCT2_ADDRESS_PATH_CONSTRUCTION_MODE, uint8) == PATH_CONSTRUCTION_MODE_BRIDGE_OR_TUNNEL)
            break;

        _window_footpath_cost = 0x80000000;
        tool_cancel();
        RCT2_CALLPROC_EBPSAFE(0x006A7831);
        RCT2_CALLPROC_EBPSAFE(0x0068AB1B);
        RCT2_GLOBAL(RCT2_ADDRESS_MAP_SELECTION_FLAGS, uint16) &= ~2;
        RCT2_GLOBAL(RCT2_ADDRESS_PATH_CONSTRUCTION_MODE, uint8) = PATH_CONSTRUCTION_MODE_BRIDGE_OR_TUNNEL;
        tool_set(w, WIDX_CONSTRUCT_BRIDGE_OR_TUNNEL, 12);
        RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
        RCT2_GLOBAL(RCT2_ADDRESS_PATH_ERROR_OCCURED, uint8) = 0;
        RCT2_CALLPROC_EBPSAFE(0x006A855C);
        break;
    }
}
示例#9
0
/**
*
*  rct2: 0x006B4933
*/
static void window_ride_demolish_mouseup(){
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex){
	case WIDX_DEMOLISH:
		RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_STRING_ID, rct_string_id) = STR_CANT_DEMOLISH_RIDE;
		game_do_command(0, 1, 0, w->number, GAME_COMMAND_7, 0, 0);
		break;
	case WIDX_CANCEL:
	case WIDX_CLOSE:
		window_close(w);
	}
}
示例#10
0
/**
*
*  rct2: 0x0066C957
*/
static void window_editor_top_toolbar_mouseup()
{
	short widgetIndex;
	rct_window *w, *mainWindow;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_ZOOM_IN:
		if ((mainWindow = window_get_main()) != NULL)
			window_zoom_in(mainWindow);
		break;
	case WIDX_ZOOM_OUT:
		if ((mainWindow = window_get_main()) != NULL)
			window_zoom_out(mainWindow);
		break;
	case WIDX_ROTATE:
		if ((mainWindow = window_get_main()) != NULL)
			window_rotate_camera(mainWindow);
		break;
	case WIDX_SCENERY:
		if (!tool_set(w, WIDX_SCENERY, 0)) {
			RCT2_GLOBAL(0x009DE518, uint32) |= (1 << 6);
			window_scenery_open();
		}
		break;
	case WIDX_PATH:
		toggle_footpath_window();
		break;
	case WIDX_LAND:
		toggle_land_window(w, WIDX_LAND);
		break;
	case WIDX_CLEAR_SCENERY:
		toggle_clear_scenery_window(w, WIDX_CLEAR_SCENERY);
		break;
	case WIDX_WATER:
		toggle_water_window(w, WIDX_WATER);
		break;
	case WIDX_MAP:
		window_map_open();
		break;
	case WIDX_CONSTRUCT_RIDE:
		window_new_ride_open();
		break;
	}
}
示例#11
0
/**
*
*  rct2: 0x006C0B40
*/
static void window_staff_fire_mouseup(){
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	rct_peep* peep = &g_sprite_list[w->number].peep;
	
	switch (widgetIndex){
	case WIDX_YES:
		game_do_command(peep->x, 1, peep->y, w->number, GAME_COMMAND_FIRE_STAFF_MEMBER, 0, 0);
		break;
	case WIDX_CANCEL:
	case WIDX_CLOSE:
		window_close(w);
	}
}
示例#12
0
/**
 * 
 *  rct2: 0x0066D4D5
 */
static void window_about_mouseup()
{
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	case WIDX_MUSIC_CREDITS:
		window_music_credits_open();
		break;
	case WIDX_PUBLISHER_CREDITS:
		window_publisher_credits_open();
		break;
	}
}
示例#13
0
/* rct2: 0x6ba4d6*/
static void window_banner_mouseup()
{
	short widgetIndex;
	rct_window *w;

	window_widget_get_registers(w, widgetIndex);

	rct_banner* banner = &gBanners[w->number];
	int x = banner->x << 5;
	int y = banner->y << 5;

	rct_map_element* map_element = TILE_MAP_ELEMENT_POINTER(((y << 8) | x) >> 5);

	while (1){
		if (((map_element->type & MAP_ELEMENT_TYPE_MASK) == MAP_ELEMENT_TYPE_BANNER) &&
			(map_element->properties.banner.index == w->number)) break;
		map_element++;
	}

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	case WIDX_BANNER_DEMOLISH:
		game_do_command(x, 1, y, map_element->base_height | (map_element->properties.banner.position << 8), GAME_COMMAND_51, 0, 0);
		break;
	case WIDX_BANNER_TEXT:
		window_text_input_open(w, WIDX_BANNER_TEXT, 2982, 2983, gBanners[w->number].string_idx, 0);
		break;
	case WIDX_BANNER_NO_ENTRY:
		RCT2_CALLPROC_EBPSAFE(0x006EE3C3);
		banner->flags ^= BANNER_FLAG_NO_ENTRY;
		window_invalidate(w);

		map_element->properties.banner.flags = 0xFF;
		if (banner->flags & BANNER_FLAG_NO_ENTRY){
			map_element->properties.banner.flags &= ~(1 << map_element->properties.banner.position);
		}
		break;
	}
}
示例#14
0
/**
 *
 *  rct2: 0x006D3823
 */
static void window_track_delete_prompt_mouseup()
{
	rct_window *w;
	short widgetIndex;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
	case WIDX_PROMPT_CANCEL:
		window_close(w);
		break;
	case WIDX_PROMPT_DELETE:
		window_close(w);
		if (track_delete())
			window_close_by_class(WC_MANAGE_TRACK_DESIGN);
		else
			window_error_open(STR_CANT_DELETE_TRACK_DESIGN, RCT2_GLOBAL(RCT2_ADDRESS_GAME_COMMAND_ERROR_TEXT, uint16));
		break;
	}
}
示例#15
0
/**
 *
 *  rct2: 0x0068E185
 */
static void window_clear_scenery_mouseup()
{
	rct_window *w;
	int limit;
	short widgetIndex;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	case WIDX_DECREMENT:
		// Decrement land tool size
		RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16)--;
		limit = 1;

		if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) < limit)
			RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = limit;

		// Invalidate the window
		window_invalidate(w);
		break;
	case WIDX_INCREMENT:
		// Increment land tool size
		RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16)++;

		// FEATURE: maximum size is always 7
		limit = 7;
		// limit = (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & 2 ? 7 : 5);
		
		if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > limit)
			RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) = limit;

		// Invalidate the window
		window_invalidate(w);
		break;
	}
}
示例#16
0
/**
 *
 *  rct2: 0x006D3523
 */
static void window_track_manage_mouseup()
{
	uint8 *trackDesignList = (uint8*)0x00F441EC;
	rct_window *w, *trackDesignListWindow;
	short widgetIndex;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		window_close(w);
		break;
	case WIDX_RENAME:
		trackDesignListWindow = window_find_by_class(WC_TRACK_DESIGN_LIST);
		if (trackDesignListWindow != NULL) {
			strcpy((char*)0x009BC677, (char*)trackDesignList[trackDesignListWindow->track_list.var_482 * 128]);
			window_show_textinput(w, widgetIndex, 3350, 3351, 3165);
		}
		break;
	case WIDX_DELETE:
		window_track_delete_prompt_open();
		break;
	}
}
/**
 * 
 *  rct2: 0x006AAFAB
 */
static void window_editor_object_selection_mouseup()
{
	rct_window *w;
	short widgetIndex;

	window_widget_get_registers(w, widgetIndex);

	switch (widgetIndex) {
	case WIDX_CLOSE:
		if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_EDITOR) {
			game_do_command(0, 1, 0, 0, GAME_COMMAND_LOAD_OR_QUIT, 1, 0);
		}
		else {
			// Used for in-game object selection cheat
			window_close(w);
		}
		break;

	case WIDX_TAB_1:
	case WIDX_TAB_2:
	case WIDX_TAB_3:
	case WIDX_TAB_4:
	case WIDX_TAB_5:
	case WIDX_TAB_6:
	case WIDX_TAB_7:
	case WIDX_TAB_8:
	case WIDX_TAB_9:
	case WIDX_TAB_10:
	case WIDX_TAB_11:
		window_editor_object_set_page(w, widgetIndex - WIDX_TAB_1);
		break;
	case WIDX_FILTER_RIDE_TAB_ALL:
		_filter_flags |= 0x7E0;
		filter_update_counts();

		w->selected_list_item = -1;
		w->var_494 = 0xFFFFFFFF;
		w->scrolls[0].v_top = 0;
		object_free_scenario_text();
		window_invalidate(w);
		break;
	case WIDX_FILTER_RIDE_TAB_TRANSPORT:
	case WIDX_FILTER_RIDE_TAB_GENTLE:
	case WIDX_FILTER_RIDE_TAB_COASTER:
	case WIDX_FILTER_RIDE_TAB_THRILL:
	case WIDX_FILTER_RIDE_TAB_WATER:
	case WIDX_FILTER_RIDE_TAB_STALL:
		_filter_flags &= ~0x7E0;
		_filter_flags |= (1 << (widgetIndex - WIDX_FILTER_RIDE_TAB_TRANSPORT + 5));

		filter_update_counts();

		w->selected_list_item = -1;
		w->var_494 = 0xFFFFFFFF;
		w->scrolls[0].v_top = 0;
		object_free_scenario_text();
		window_invalidate(w);
		break;

	case WIDX_DROPDOWN1:
		w->list_information_type ^= 1;
		window_invalidate(w);
		break;

	case WIDX_DROPDOWN2:
		if (w->selected_list_item != -1) {
			w->selected_list_item = -1;
			object_free_scenario_text();
		}
		window_invalidate(w);

		window_loadsave_open(LOADSAVETYPE_LOAD | LOADSAVETYPE_TRACK, NULL);
		break;
	case WIDX_FILTER_STRING_BUTTON:
		//window_text_input_open(w, widgetIndex, 5275, 5276, 1170, (uint32)_filter_string, 40);
		window_start_textbox(w, widgetIndex, 1170, (uint32)_filter_string, 40);
		break;
	case WIDX_FILTER_CLEAR_BUTTON:
		memset(_filter_string, 0, sizeof(_filter_string));

		w->scrolls->v_top = 0;

		window_invalidate(w);
		break;
	}
}
示例#18
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;
    }
}