static void track_design_save_add_wall(sint32 x, sint32 y, rct_tile_element *tileElement) { sint32 entryType = tileElement->properties.wall.type; auto entry = object_entry_get_entry(OBJECT_TYPE_WALLS, entryType); uint8 flags = 0; flags |= tileElement->type & 3; flags |= wall_get_tertiary_colour(tileElement) << 2; uint8 secondaryColour = wall_get_secondary_colour(tileElement); uint8 primaryColour = wall_get_primary_colour(tileElement); track_design_save_push_tile_element(x, y, tileElement); track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, primaryColour, secondaryColour); }
static void track_design_save_add_scenery(sint32 x, sint32 y, rct_tile_element *tileElement) { sint32 entryType = tileElement->properties.scenery.type; auto entry = object_entry_get_entry(OBJECT_TYPE_SMALL_SCENERY, entryType); uint8 flags = 0; flags |= tileElement->type & 3; flags |= (tileElement->type & 0xC0) >> 4; uint8 primaryColour = scenery_small_get_primary_colour(tileElement); uint8 secondaryColour = scenery_small_get_secondary_colour(tileElement); track_design_save_push_tile_element(x, y, tileElement); track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, primaryColour, secondaryColour); }
static void track_design_save_add_large_scenery(sint32 x, sint32 y, rct_tile_element *tileElement) { rct_large_scenery_tile *sceneryTiles, *tile; sint32 x0, y0, z0, z; sint32 direction, sequence; sint32 entryType = scenery_large_get_type(tileElement); auto entry = object_entry_get_entry(OBJECT_TYPE_LARGE_SCENERY, entryType); sceneryTiles = get_large_scenery_entry(entryType)->large_scenery.tiles; z = tileElement->base_height; direction = tileElement->type & 3; sequence = scenery_large_get_sequence(tileElement); if (!map_large_scenery_get_origin(x, y, z, direction, sequence, &x0, &y0, &z0, NULL)) { return; } // Iterate through each tile of the large scenery element sequence = 0; for (tile = sceneryTiles; tile->x_offset != -1; tile++, sequence++) { sint16 offsetX = tile->x_offset; sint16 offsetY = tile->y_offset; rotate_map_coordinates(&offsetX, &offsetY, direction); x = x0 + offsetX; y = y0 + offsetY; z = (z0 + tile->z_offset) / 8; tileElement = map_get_large_scenery_segment(x, y, z, direction, sequence); if (tileElement != nullptr) { if (sequence == 0) { uint8 flags = tileElement->type & 3; uint8 primaryColour = scenery_large_get_primary_colour(tileElement); uint8 secondaryColour = scenery_large_get_secondary_colour(tileElement); track_design_save_push_tile_element_desc(entry, x, y, z, flags, primaryColour, secondaryColour); } track_design_save_push_tile_element(x, y, tileElement); } } }
uint8 flags = 0; flags |= tileElement->type & 3; flags |= wall_get_tertiary_colour(tileElement) << 2; uint8 secondaryColour = wall_get_secondary_colour(tileElement); uint8 primaryColour = wall_get_primary_colour(tileElement); track_design_save_push_tile_element(x, y, tileElement); track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, primaryColour, secondaryColour); } static void track_design_save_add_footpath(sint32 x, sint32 y, rct_tile_element *tileElement) { sint32 entryType = tileElement->properties.path.type >> 4; auto entry = object_entry_get_entry(OBJECT_TYPE_PATHS, entryType); uint8 flags = 0; flags |= tileElement->properties.path.edges & FOOTPATH_PROPERTIES_EDGES_EDGES_MASK; flags |= (tileElement->properties.path.type & FOOTPATH_PROPERTIES_FLAG_IS_SLOPED) << 2; flags |= (tileElement->properties.path.type & FOOTPATH_PROPERTIES_SLOPE_DIRECTION_MASK) << 5; flags |= (tileElement->type & FOOTPATH_ELEMENT_TYPE_FLAG_IS_QUEUE) << 7; track_design_save_push_tile_element(x, y, tileElement); track_design_save_push_tile_element_desc(entry, x, y, tileElement->base_height, flags, 0, 0); } /** * * rct2: 0x006D2B3C */
/** * * rct2: 0x00684EE0 */ static void window_editor_inventions_list_paint(rct_window* w, rct_drawpixelinfo* dpi) { rct_widget* widget; rct_research_item* researchItem; rct_string_id stringId; int32_t x, y, width; window_draw_widgets(w, dpi); // Tab image x = w->x + w->widgets[WIDX_TAB_1].left; y = w->y + w->widgets[WIDX_TAB_1].top; gfx_draw_sprite(dpi, SPR_TAB_FINANCES_RESEARCH_0 + (w->frame_no / 2) % 8, x, y, 0); // Pre-researched items label x = w->x + w->widgets[WIDX_PRE_RESEARCHED_SCROLL].left; y = w->y + w->widgets[WIDX_PRE_RESEARCHED_SCROLL].top - 11; gfx_draw_string_left(dpi, STR_INVENTION_PREINVENTED_ITEMS, nullptr, COLOUR_BLACK, x, y - 1); // Research order label x = w->x + w->widgets[WIDX_RESEARCH_ORDER_SCROLL].left; y = w->y + w->widgets[WIDX_RESEARCH_ORDER_SCROLL].top - 11; gfx_draw_string_left(dpi, STR_INVENTION_TO_BE_INVENTED_ITEMS, nullptr, COLOUR_BLACK, x, y - 1); // 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, ColourMapA[w->colours[1]].darkest); researchItem = _editorInventionsListDraggedItem; if (researchItem == nullptr) researchItem = w->research_item; // If the research item is null or a list separator. if (researchItem == nullptr || researchItem->rawValue < 0) return; // Preview image int32_t objectEntryType = OBJECT_TYPE_SCENERY_GROUP; if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE) objectEntryType = OBJECT_TYPE_RIDE; auto chunk = object_entry_get_chunk(objectEntryType, researchItem->entryIndex); if (chunk == nullptr) return; auto entry = object_entry_get_entry(objectEntryType, researchItem->entryIndex); // Draw preview widget = &w->widgets[WIDX_PREVIEW]; void* object = object_manager_get_loaded_object(entry); if (object != nullptr) { rct_drawpixelinfo clipDPI; x = w->x + widget->left + 1; y = w->y + widget->top + 1; width = widget->right - widget->left - 1; int32_t height = widget->bottom - widget->top - 1; if (clip_drawpixelinfo(&clipDPI, dpi, x, y, width, height)) { object_draw_preview(object, &clipDPI, width, height); } } // Item name x = w->x + ((widget->left + widget->right) / 2) + 1; y = w->y + widget->bottom + 3; width = w->width - w->widgets[WIDX_RESEARCH_ORDER_SCROLL].right - 6; rct_string_id drawString = window_editor_inventions_list_prepare_name(researchItem, false); gfx_draw_string_centred_clipped(dpi, drawString, gCommonFormatArgs, COLOUR_BLACK, x, y, width); y += 15; // Item category x = w->x + w->widgets[WIDX_RESEARCH_ORDER_SCROLL].right + 4; stringId = EditorInventionsResearchCategories[researchItem->category]; gfx_draw_string_left(dpi, STR_INVENTION_RESEARCH_GROUP, &stringId, COLOUR_BLACK, x, y); }