/** * * rct2: 0x0066D321 */ static void window_about_paint() { int x, y; rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); x = w->x + 200; y = w->y + 17; // Version RCT2_GLOBAL(0x009C383C, uint8) = 49; gfx_draw_string_centred(dpi, STR_VERSION_X, x, y, 0, (void*)0x009E2D28); // Credits RCT2_GLOBAL(0x009C383C, uint8) = 48; y += 10; gfx_draw_string_centred(dpi, STR_COPYRIGHT_CS, x, y, 0, (void*)0x009E2D28); y += 79; gfx_draw_string_centred(dpi, STR_DESIGNED_AND_PROGRAMMED_BY_CS, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_GRAPHICS_BY_SF, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_SOUND_AND_MUSIC_BY_AB, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_ADDITIONAL_SOUNDS_RECORDED_BY_DE, x, y, 0, (void*)0x009E2D28); y += 13; gfx_draw_string_centred(dpi, STR_REPRESENTATION_BY_JL, x, y, 0, (void*)0x009E2D28); y += 25; gfx_draw_string_centred(dpi, STR_THANKS_TO, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_THANKS_TO_PEOPLE, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_1, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_2, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_3, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_4, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_5, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_6, x, y, 0, (void*)0x009E2D28); y += 10; gfx_draw_string_centred(dpi, STR_CREDIT_SPARE_7, x, y, 0, (void*)0x009E2D28); // Images gfx_draw_sprite(dpi, SPR_CREDITS_CHRIS_SAWYER_SMALL, w->x + 92, w->y + 40, 0); gfx_draw_sprite(dpi, SPR_CREDITS_INFOGRAMES, w->x + 50, w->y + 247, 0); // Licence gfx_draw_string_left(dpi, STR_LICENSED_TO_INFOGRAMES_INTERACTIVE_INC, 0, 0, w->x + 157, w->y + 257); }
/** * * rct2: 0x006E3A9F */ static void window_shortcut_change_paint(){ rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); int x = w->x + 125; int y = w->y + 30; RCT2_GLOBAL(0x13CE952, uint16) = 2493 + RCT2_GLOBAL(0x9DE511, uint8); gfx_draw_string_centred_wrapped(dpi, (void*)0x13CE952, x, y, 242, 2785, RCT2_GLOBAL(0x9DEB8D, uint8)); }
/* rct2:0x006BA4C5 */ static void window_banner_paint() { rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); // Draw viewport if (w->viewport != NULL) { window_draw_viewport(dpi, w); } }
/** * * rct2: 0x006D37EE */ static void window_track_delete_prompt_paint() { rct_window *w; rct_drawpixelinfo *dpi; rct_string_id stringId; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); stringId = 3155; gfx_draw_string_centred_wrapped( dpi, &stringId, w->x + 125, w->y + 28, 246, STR_ARE_YOU_SURE_YOU_WANT_TO_PERMANENTLY_DELETE_TRACK, 0 ); }
/** * * rct2: 0x0066B872 */ static void window_title_logo_paint() { int packs, x, y, i; char *buffer, *names; rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); gfx_draw_sprite(dpi, SPR_MENU_LOGO, w->x, w->y, 0); x = 0; y = 105; packs = RCT2_GLOBAL(RCT2_ADDRESS_EXPANSION_FLAGS, uint16); names = RCT2_ADDRESS(RCT2_ADDRESS_EXPANSION_NAMES, char); buffer = (char*)RCT2_ADDRESS_COMMON_STRING_FORMAT_BUFFER; while (packs != 0) { if (packs & 1) { // Prefix for expansion name buffer[0] = '\n'; buffer[1] = '\v'; buffer[2] = FORMAT_YELLOW; // Colour of the text buffer[3] = '+'; buffer[4] = ' '; i = 0; // Copies the expansion name to the buffer, offset by 5 do { buffer[5 + i] = names[i]; i++; } while (names[i - 1] != 0); RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint32) = 0; gfx_draw_string(dpi, buffer, 0, x, y); y += 10; } packs = packs >> 1; names += 128; } }
/** * * rct2: 0x0068E130 */ static void window_clear_scenery_paint() { rct_window *w; rct_drawpixelinfo *dpi; int x, y; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); // Draw cost amount x = (window_clear_scenery_widgets[WIDX_PREVIEW].left + window_clear_scenery_widgets[WIDX_PREVIEW].right) / 2 + w->x; y = window_clear_scenery_widgets[WIDX_PREVIEW].bottom + w->y + 5; if (RCT2_GLOBAL(0x00F1AD62, uint32) != 0x80000000 && RCT2_GLOBAL(0x00F1AD62, uint32) != 0) gfx_draw_string_centred(dpi, 986, x, y, 0, (void*)0x00F1AD62); }
/** * * rct2: 0x006B48E5 */ static void window_ride_demolish_paint(){ rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); rct_ride* ride = GET_RIDE(w->number); RCT2_GLOBAL(0x13CE952, uint16) = ride->name; RCT2_GLOBAL(0x13CE954, uint32) = ride->name_arguments; int x = w->x + WW / 2; int y = w->y + (WH / 2) - 3; gfx_draw_string_centred_wrapped(dpi, (void*)0x13CE952, x, y, WW - 4, STR_DEMOLISH_RIDE_ID, 0); }
/** * * rct2: 0x006C0AF2 */ static void window_staff_fire_paint(){ rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); rct_peep* peep = &g_sprite_list[w->number].peep; RCT2_GLOBAL(0x13CE952, uint16) = peep->name_string_idx; RCT2_GLOBAL(0x13CE954, uint32) = peep->id; int x = w->x + WW / 2; int y = w->y + (WH / 2) - 3; gfx_draw_string_centred_wrapped(dpi, (void*)0x13CE952, x, y, WW - 4, STR_FIRE_STAFF_ID, 0); }
/** * * rct2: 0x006E6ACF */ static void window_water_paint() { rct_window *w; rct_drawpixelinfo *dpi; int x, y; window_paint_get_registers(w, dpi); x = w->x + (window_water_widgets[WIDX_PREVIEW].left + window_water_widgets[WIDX_PREVIEW].right) / 2; y = w->y + (window_water_widgets[WIDX_PREVIEW].top + window_water_widgets[WIDX_PREVIEW].bottom) / 2; window_draw_widgets(w, dpi); // FEATURE larger land tool size support if (RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16) > 7) { RCT2_GLOBAL(0x009BC677, char) = FORMAT_BLACK; RCT2_GLOBAL(0x009BC678, char) = FORMAT_COMMA16; RCT2_GLOBAL(0x009BC679, char) = 0; RCT2_GLOBAL(0x013CE952, sint16) = RCT2_GLOBAL(RCT2_ADDRESS_LAND_TOOL_SIZE, sint16); gfx_draw_string_centred(dpi, 3165, x, y - 2, 0, (void*)0x013CE952); }
static void window_changelog_scrollpaint() { rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); uint16 *currentFontFlags = RCT2_ADDRESS(RCT2_ADDRESS_CURRENT_FONT_FLAGS, uint16); sint16 *currentFontSpriteBase = RCT2_ADDRESS(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, sint16); *currentFontFlags = 0; *currentFontSpriteBase = 224; gfx_draw_string(dpi, (char*)0x009C383D, 1, dpi->x, dpi->y); int x = 3; int y = 3; for (int i = 0; i < _changelogNumLines; i++) { gfx_draw_string(dpi, _changelogLines[i], 254, x, y); y += 11; } }
static void window_tile_inspector_paint() { int x, y; rct_window *w; rct_drawpixelinfo *dpi; char buffer[256]; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); x = w->x + 20; y = w->y + 25; if (window_tile_inspector_tile_x == -1) { // No tile selected gfx_draw_string_left(dpi, STR_TILE_INSPECTOR_CHOOSE_MSG, NULL, 12, x, y); } else { sprintf( buffer, "X: %d, Y: %d", window_tile_inspector_tile_x, window_tile_inspector_tile_y ); gfx_draw_string(dpi, buffer, 12, x, y); } y += 25; draw_string_left_underline(dpi, STR_TILE_INSPECTOR_ELEMENT_TYPE, NULL, 12, x, y); draw_string_left_underline(dpi, STR_TILE_INSPECTOR_BASE_HEIGHT, NULL, 12, x + 200, y); draw_string_left_underline(dpi, STR_TILE_INSPECTOR_CLEARANGE_HEIGHT, NULL, 12, x + 280, y); draw_string_left_underline(dpi, STR_TILE_INSPECTOR_FLAGS, NULL, 12, x + 390, y); }
/** * * rct2: 0x006A7D8B */ static void window_footpath_paint() { int x, y, image, selectedPath; rct_path_type *pathType; rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); if (!(w->disabled_widgets & (1 << WIDX_CONSTRUCT))) { // Get construction image image = (RCT2_GLOBAL(RCT2_ADDRESS_CONSTRUCT_PATH_DIRECTION, uint8) + RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_ROTATION, uint32)) % 4; if (RCT2_GLOBAL(0x00F3EF91, uint8) == 2) image += 4; else if (RCT2_GLOBAL(0x00F3EF91, uint8) == 6) image += 8; image = RCT2_ADDRESS(0x0098D7E0, uint8)[image]; selectedPath = RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_ID, uint16); pathType = RCT2_ADDRESS(RCT2_ADDRESS_PATH_TYPES, rct_path_type*)[selectedPath]; image += pathType->image; if (RCT2_GLOBAL(RCT2_ADDRESS_SELECTED_PATH_TYPE, uint8) != SELECTED_PATH_TYPE_NORMAL) image += 51; // Draw construction image x = w->x + (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2; y = w->y + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 60; gfx_draw_sprite(dpi, image, x, y, 0); // Draw build this... label x = w->x + (window_footpath_widgets[WIDX_CONSTRUCT].left + window_footpath_widgets[WIDX_CONSTRUCT].right) / 2; y = w->y + window_footpath_widgets[WIDX_CONSTRUCT].bottom - 23; gfx_draw_string_centred(dpi, STR_BUILD_THIS, x, y, 0, 0); }
/** * * rct2: 0x006CF387 */ static void window_track_list_paint() { rct_window *w; rct_drawpixelinfo *dpi; rct_widget *widget; rct_track_design *trackDesign = NULL; uint8 *image, *trackDesignList = RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, uint8); uint16 holes, speed, drops, dropHeight, inversions; fixed32_2dp rating; int trackIndex, x, y, colour, gForces, airTime; rct_g1_element tmpElement, *subsituteElement; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); trackIndex = w->track_list.var_482; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) { if (*trackDesignList == 0 || trackIndex == -1) return; } else if (trackIndex-- == 0) { return; } // Track preview widget = &window_track_list_widgets[WIDX_TRACK_PREVIEW]; x = w->x + widget->left + 1; y = w->y + widget->top + 1; colour = RCT2_GLOBAL(0x0141FC44 + (w->colours[0] * 8), uint8); gfx_fill_rect(dpi, x, y, x + 369, y + 216, colour); trackDesign = track_get_info(trackIndex, &image); if (trackDesign == NULL) return; rct_track_td6* track_td6 = &trackDesign->track_td6; subsituteElement = &g1Elements[0]; tmpElement = *subsituteElement; subsituteElement->offset = image; subsituteElement->width = 370; subsituteElement->height = 217; subsituteElement->x_offset = 0; subsituteElement->y_offset = 0; subsituteElement->flags = G1_FLAG_BMP; gfx_draw_sprite(dpi, 0, x, y, 0); *subsituteElement = tmpElement; x = w->x + (widget->left + widget->right) / 2; y = w->y + widget->bottom - 12; RCT2_GLOBAL(0x00F44153, uint8) = 0; // Warnings if ((track_td6->track_flags & 4) && !(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER)) { // Vehicle design not available gfx_draw_string_centred_clipped(dpi, STR_VEHICLE_DESIGN_UNAVAILABLE, NULL, 0, x, y, 368); y -= 10; } if (track_td6->track_flags & 1) { RCT2_GLOBAL(0x00F44153, uint8) = 1; if (RCT2_GLOBAL(RCT2_ADDRESS_TRACK_DESIGN_SCENERY_TOGGLE, uint8) == 0) { // Scenery not available gfx_draw_string_centred_clipped(dpi, STR_DESIGN_INCLUDES_SCENERY_WHICH_IS_UNAVAILABLE, NULL, 0, x, y, 368); y -= 10; } } // Track design name window_track_list_format_name((char*)0x009BC677, trackDesignList + (trackIndex * 128), FORMAT_WINDOW_COLOUR_1, 1); gfx_draw_string_centred_clipped(dpi, 3165, NULL, 0, x, y, 368); // Information x = w->x + widget->left + 1; y = w->y + widget->bottom + 2; if (track_td6->var_6C & 0x80000000) { // Six flags logo gfx_draw_sprite(dpi, SPR_SIX_FLAGS, w->x + widget->right - 50, y + 4, 0); } // Stats rating = track_td6->excitement * 10; gfx_draw_string_left(dpi, STR_TRACK_LIST_EXCITEMENT_RATING, &rating, 0, x, y); y += 10; rating = track_td6->intensity * 10; gfx_draw_string_left(dpi, STR_TRACK_LIST_INTENSITY_RATING, &rating, 0, x, y); y += 10; rating = track_td6->nausea * 10; gfx_draw_string_left(dpi, STR_TRACK_LIST_NAUSEA_RATING, &rating, 0, x, y); y += 14; if (track_td6->type != RIDE_TYPE_MAZE) { if (track_td6->type == RIDE_TYPE_MINI_GOLF) { // Holes holes = track_td6->holes & 0x1F; gfx_draw_string_left(dpi, STR_HOLES, &holes, 0, x, y); y += 10; } else { // Maximum speed speed = ((track_td6->max_speed << 16) * 9) >> 18; gfx_draw_string_left(dpi, STR_MAX_SPEED, &speed, 0, x, y); y += 10; // Average speed speed = ((track_td6->average_speed << 16) * 9) >> 18; gfx_draw_string_left(dpi, STR_AVERAGE_SPEED, &speed, 0, x, y); y += 10; } // Ride length RCT2_GLOBAL(0x013CE952 + 0, uint16) = 1345; RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->ride_length; gfx_draw_string_left_clipped(dpi, STR_TRACK_LIST_RIDE_LENGTH, (void*)0x013CE952, 0, x, y, 214); y += 10; } if (ride_type_has_flag(track_td6->type, RIDE_TYPE_FLAG_HAS_G_FORCES)) { // Maximum positive vertical Gs gForces = track_td6->max_positive_vertical_g * 32; gfx_draw_string_left(dpi, STR_MAX_POSITIVE_VERTICAL_G, &gForces, 0, x, y); y += 10; // Maximum negative verical Gs gForces = track_td6->max_negative_vertical_g * 32; gfx_draw_string_left(dpi, STR_MAX_NEGATIVE_VERTICAL_G, &gForces, 0, x, y); y += 10; // Maximum lateral Gs gForces = track_td6->max_lateral_g * 32; gfx_draw_string_left(dpi, STR_MAX_LATERAL_G, &gForces, 0, x, y); y += 10; // If .TD6 if (track_td6->version_and_colour_scheme / 4 >= 2) { if (track_td6->total_air_time != 0) { // Total air time airTime = track_td6->total_air_time * 25; gfx_draw_string_left(dpi, STR_TOTAL_AIR_TIME, &airTime, 0, x, y); y += 10; } } } if (ride_type_has_flag(track_td6->type, RIDE_TYPE_FLAG_HAS_DROPS)) { // Drops drops = track_td6->drops & 0x3F; gfx_draw_string_left(dpi, STR_DROPS, &drops, 0, x, y); y += 10; // Drop height is multiplied by 0.75 dropHeight = (track_td6->highest_drop_height + (track_td6->highest_drop_height / 2)) / 2; gfx_draw_string_left(dpi, STR_HIGHEST_DROP_HEIGHT, &drops, 0, x, y); y += 10; } if (track_td6->type != RIDE_TYPE_MINI_GOLF) { inversions = track_td6->inversions & 0x1F; if (inversions != 0) { // Inversions gfx_draw_string_left(dpi, STR_INVERSIONS, &inversions, 0, x, y); y += 10; } } y += 4; if (track_td6->space_required_x != 0xFF) { // Space required RCT2_GLOBAL(0x013CE952 + 0, uint16) = track_td6->space_required_x; RCT2_GLOBAL(0x013CE952 + 2, uint16) = track_td6->space_required_y; gfx_draw_string_left(dpi, STR_TRACK_LIST_SPACE_REQUIRED, (void*)0x013CE952, 0, x, y); y += 10; } if (track_td6->cost != 0) { gfx_draw_string_left(dpi, STR_TRACK_LIST_COST_AROUND, &track_td6->cost, 0, x, y); y += 14; } }
static void window_text_input_paint(){ rct_window *w; rct_drawpixelinfo *dpi; window_paint_get_registers(w, dpi); window_draw_widgets(w, dpi); int y = w->y + 25; int no_lines = 0; int font_height = 0; gfx_draw_string_centred(dpi, input_text_description, w->x + WW / 2, y, w->colours[1], &TextInputDescriptionArgs); y += 25; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_SPRITE_BASE, uint16) = 224; RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_FONT_FLAGS, uint16) = 0; char wrapped_string[512]; strcpy(wrapped_string, text_input); // String length needs to add 12 either side of box // +13 for cursor when max length. gfx_wrap_string(wrapped_string, WW - (24 + 13), &no_lines, &font_height); gfx_fill_rect_inset(dpi, w->x + 10, y, w->x + WW - 10, y + 10 * (no_lines + 1) + 3, w->colours[1], 0x60); y += 1; char* wrap_pointer = wrapped_string; int char_count = 0; uint8 cur_drawn = 0; for (int line = 0; line <= no_lines; ++line){ gfx_draw_string(dpi, wrap_pointer, w->colours[1], w->x + 12, y); int string_length = get_string_length(wrap_pointer); if (!cur_drawn && (gTextInputCursorPosition <= char_count + string_length)){ // Make a copy of the string for measuring the width. char temp_string[512] = { 0 }; memcpy(temp_string, wrap_pointer, gTextInputCursorPosition - char_count); int cur_x = w->x + 13 + gfx_get_string_width(temp_string); int width = 6; if ((uint32)gTextInputCursorPosition < strlen(text_input)){ // Make a new 1 character wide string for measuring the width // of the character that the cursor is under. temp_string[1] = '\0'; temp_string[0] = text_input[gTextInputCursorPosition]; width = max(gfx_get_string_width(temp_string) - 2, 4); } if (w->frame_no > 15){ uint8 colour = RCT2_ADDRESS(0x0141FC48, uint8)[w->colours[1] * 8]; gfx_fill_rect(dpi, cur_x, y + 9, cur_x + width, y + 9, colour + 5); } cur_drawn++; } wrap_pointer += string_length + 1; if (text_input[char_count + string_length] == ' ')char_count++; char_count += string_length; y += 10; } }
static void window_tile_inspector_scrollpaint() { int x = 15, y = 11 * (window_tile_inspector_item_count - 1), i = 0; rct_window *w; rct_drawpixelinfo *dpi; char buffer[256]; window_paint_get_registers(w, dpi); if (window_tile_inspector_tile_x == -1) return; rct_map_element *element = map_get_first_element_at(window_tile_inspector_tile_x, window_tile_inspector_tile_y); do { int type = map_element_get_type(element); char *type_name; int base_height = element->base_height; int clearance_height = element->clearance_height; if ((i & 1) != 0) gfx_fill_rect(dpi, x - 15, y, x + WW - 20, y + 11, RCT2_GLOBAL(0x0141FC4A + (w->colours[1] * 8), uint8) | 0x1000000); switch (type) { case MAP_ELEMENT_TYPE_SURFACE: sprintf( buffer, "Surface (%s, %s)", language_get_string(STR_TILE_INSPECTOR_TERRAIN_START + map_element_get_terrain(element)), language_get_string(STR_TILE_INSPECTOR_TERRAIN_EDGE_START + map_element_get_terrain_edge(element)) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_PATH: { // TODO: use these uint8 pathType, pathDirection; pathType = element->properties.path.type >> 2; pathDirection = element->properties.path.type & 3; } sprintf( buffer, "Path (%s)", "" // TODO: queue? has bins? has benches? e.t.c. ); type_name = buffer; break; case MAP_ELEMENT_TYPE_TRACK: type_name = "Track"; // TODO: show type? break; case MAP_ELEMENT_TYPE_SCENERY: sprintf( buffer, "Scenery (%s)", language_get_string(g_smallSceneryEntries[element->properties.scenery.type]->name) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_ENTRANCE: sprintf( buffer, "Entrance (%s)", language_get_string(STR_TILE_INSPECTOR_ENTRANCE_START + element->properties.entrance.type) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_FENCE: sprintf( buffer, "Fence (%s)", language_get_string(g_wallSceneryEntries[element->properties.scenery.type]->name) ); type_name = buffer; break; case MAP_ELEMENT_TYPE_SCENERY_MULTIPLE: type_name = "Scenery multiple"; break; case MAP_ELEMENT_TYPE_BANNER: sprintf( buffer, "Banner (%d)", element->properties.banner.index ); type_name = buffer; break; } gfx_draw_string(dpi, type_name, 12, x, y); gfx_draw_string_left(dpi, 5182, &base_height, 12, x + 200, y); gfx_draw_string_left(dpi, 5182, &clearance_height, 12, x + 280, y); uint8 flags = element->flags; char j; buffer[8] = '\0'; for (j = 7; j >= 0; j--, flags >>= 1) { buffer[j] = flags & 1 ? '1' : '0'; } gfx_draw_string(dpi, buffer, 12, x + 390, y); y -= 11; i++; } while (!map_element_is_last_for_tile(element++)); }
/** * * rct2: 0x006CF8CD */ static void window_track_list_scrollpaint() { rct_window *w; rct_drawpixelinfo *dpi; rct_string_id stringId, stringId2; int i, x, y, colour; uint8 *trackDesignItem, *trackDesignList = RCT2_ADDRESS(RCT2_ADDRESS_TRACK_LIST, uint8); window_paint_get_registers(w, dpi); colour = RCT2_GLOBAL(0x00141FC48 + (w->colours[0] * 8), uint8); colour = (colour << 24) | (colour << 16) | (colour << 8) | colour; gfx_clear(dpi, colour); i = 0; x = 0; y = 0; trackDesignItem = trackDesignList; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER) { if (*trackDesignItem == 0) { // No track designs gfx_draw_string_left(dpi, STR_NO_TRACK_DESIGNS_OF_THIS_TYPE, NULL, 0, x, y - 1); return; } } else { // Build custom track item if (i == w->track_list.var_482) { // Highlight gfx_fill_rect(dpi, x, y, w->width, y + 9, 0x2000000 | 49); stringId = 1193; } else { stringId = 1191; } stringId2 = STR_BUILD_CUSTOM_DESIGN; gfx_draw_string_left(dpi, stringId, &stringId2, 0, x, y - 1); y += 10; i++; } while (*trackDesignItem != 0) { if (y + 10 >= dpi->y && y < dpi->y + dpi->height) { if (i == w->track_list.var_482) { // Highlight gfx_fill_rect(dpi, x, y, w->width, y + 9, 0x2000000 | 49); stringId = 1193; } else { stringId = 1191; } // Draw track name window_track_list_format_name((char *)language_get_string(3165), trackDesignItem, 0, 1); stringId2 = 3165; gfx_draw_string_left(dpi, stringId, &stringId2, 0, x, y - 1); } y += 10; i++; trackDesignItem += 128; } }
/** * * rct2: 0x006AAB56 */ static void window_editor_object_selection_paint() { int i, x, y, width, numSelected, totalSelectable, type; rct_window *w; rct_drawpixelinfo *dpi; rct_widget *widget; rct_object_entry *highlightedEntry; rct_string_id stringId; uint8 *text, source; char *datName, *name, *stringBuffer; window_paint_get_registers(w, dpi); /*if (w->selected_tab == WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS) { gfx_fill_rect_inset(dpi, w->x + w->widgets[WIDX_FILTER_RIDE_TAB_ALL].left - 1, w->y + w->widgets[WIDX_FILTER_RIDE_TAB_ALL].bottom, w->x + w->widgets[WIDX_FILTER_RIDE_TAB_STALL].right + 1, w->y + w->widgets[WIDX_FILTER_RIDE_TAB_ALL].bottom + 2, w->colours[1], 0x10 ); }*/ window_draw_widgets(w, dpi); // Draw tabs for (i = 0; i < WINDOW_OBJECT_SELECTION_PAGE_COUNT; i++) { widget = &w->widgets[WIDX_TAB_1 + i]; if (widget->type == WWT_EMPTY) continue; x = w->x + widget->left; y = w->y + widget->top; gfx_draw_sprite(dpi, 5458 + i, x, y, 0); } const int ride_tabs[] = { 5458, 0x200015A1, 5542, 0x200015AA, 5557 + 5, 5551, 5530, 5327 }; // Draw ride tabs if (w->selected_tab == WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS) { for (i = 0; i < 7; i++) { widget = &w->widgets[WIDX_FILTER_RIDE_TAB_ALL + i]; if (widget->type == WWT_EMPTY) continue; x = w->x + widget->left; y = w->y + widget->top; gfx_draw_sprite(dpi, ride_tabs[i] | (w->colours[1] << 19), x, y, 0); } } // Preview background widget = &w->widgets[WIDX_PREVIEW]; gfx_fill_rect( dpi, w->x + widget->left + 1, w->y + widget->top + 1, w->x + widget->right - 1, w->y + widget->bottom - 1, RCT2_ADDRESS(0x0141FC44, uint8)[w->colours[1] * 8] ); // Draw number of selected items if (!(RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_MANAGER)) { x = w->x + 3; y = w->y + w->height - 13; numSelected = RCT2_ADDRESS(0x00F433F7, uint16)[w->selected_tab]; totalSelectable = object_entry_group_counts[w->selected_tab]; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & SCREEN_FLAGS_TRACK_DESIGNER) totalSelectable = 4; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint16) = numSelected; RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 2, uint16) = totalSelectable; gfx_draw_string_left(dpi, 3164, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, 0, x, y); } rct_stex_entry* stex_entry = RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TEXT_TEMP_CHUNK, rct_stex_entry*); /*gfx_fill_rect_inset(dpi, w->x + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].left, w->y + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].top, w->x + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].right, w->y + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].bottom, w->colours[1], 0x30 ); RCT2_GLOBAL(RCT2_ADDRESS_COMMON_FORMAT_ARGS + 0, uint32) = (uint32)&_filter_string; gfx_draw_string_left_clipped( dpi, 1170, (void*)RCT2_ADDRESS_COMMON_FORMAT_ARGS, w->colours[1], w->x + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].left + 1, w->y + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].top, w->x + window_editor_object_selection_widgets[WIDX_FILTER_STRING_BUTTON].right );*/ if (w->selected_list_item == -1 || stex_entry == NULL) return; highlightedEntry = (rct_object_entry*)w->var_494; type = highlightedEntry->flags & 0x0F; // Draw preview widget = &w->widgets[WIDX_PREVIEW]; x = w->x + (widget->left + widget->right) / 2 + 1; y = w->y + (widget->top + widget->bottom) / 2 + 1; object_paint(type, 3, type, x, y, 0, (int)dpi, (int)stex_entry); // Draw name of object x = w->x + (widget->left + widget->right) / 2 + 1; y = w->y + widget->bottom + 3; width = w->width - w->widgets[WIDX_LIST].right - 6; // Skip object dat name text = (char*)(highlightedEntry + 1); datName = text; do { text++; } while (*(text - 1) != 0); text += 4; name = text; RCT2_GLOBAL(0x009BC677, uint8) = 14; stringId = 3165; stringBuffer = (char*)language_get_string(3165) + 1; if (RCT2_GLOBAL(RCT2_ADDRESS_SCREEN_FLAGS, uint8) & (SCREEN_FLAGS_TRACK_DESIGNER | SCREEN_FLAGS_TRACK_MANAGER)) { // Skip name do { text++; } while (*(text - 1) != 0); text += 4; text += *text * 16 + 1; text += *text * 16 + 1; if (RCT2_GLOBAL(text, uint32) & 0x1000000) { strcpy(stringBuffer, name); } else { int eax = *text; if (*text == 0xFF) { eax = *(text + 1); if (*(text + 1) == 0xFF) eax = *(text + 2); } format_string(stringBuffer, eax + 2, NULL); } } else { strcpy(stringBuffer, name); } gfx_draw_string_centred_clipped(dpi, stringId, NULL, 0, x, y, width); // Draw description of object x = w->x + w->widgets[WIDX_LIST].right + 4; y += 15; object_paint(type, 259, type, x, y, (int)w, (int)dpi, (int)stex_entry); // Draw object source source = (highlightedEntry->flags & 0xF0) >> 4; switch (source) { case 8: stringId = 2741; break; case 1: stringId = 5262; break; case 2: stringId = 5263; break; default: stringId = 5264; break; } gfx_draw_string_right(dpi, stringId, NULL, 2, w->x + w->width - 5, w->y + w->height - 3 - 12 - 14); // if (w->selected_tab == WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS) { y = w->y + w->height - 3 - 12 - 14 - 14; rct_ride_type *rideType = (rct_ride_type*)stex_entry; for (int i = 0; i < 3; i++) { if (rideType->ride_type[i] == 255) continue; stringId = 2 + rideType->ride_type[i]; gfx_draw_string_right(dpi, stringId, NULL, 2, w->x + w->width - 5, y); y -= 11; } } //stringId = highlightedEntry->checksum // gfx_draw_string_right(dpi, stringId, NULL, 2, w->x + w->width - 5, w->y + w->height - 3 - 12 - 14); // Draw object dat name stringId = 3165; strcpy(stringBuffer, datName); gfx_draw_string_right(dpi, stringId, NULL, 0, w->x + w->width - 5, w->y + w->height - 3 - 12); }