void cPict::drawCustomMonstLg(short num, Rect to_rect){ static const short adj[4] = {0, 8, 4, 12}; num += adj[animFrame]; Rect small_monst_rect = {0,0,18,14}; to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; OffsetRect(&small_monst_rect,to_rect.left,to_rect.top); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); from_gw = customSheets[n]; OffsetRect(&small_monst_rect,14,0); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); from_gw = customSheets[n]; OffsetRect(&small_monst_rect,-14,18); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); from_gw = customSheets[n]; OffsetRect(&small_monst_rect,14,0); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); }
void cPict::drawPartyMonstTall(short num, Rect to_rect){ Rect small_monst_rect = {0,0,18,14}; to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); if(!isSheetSet(SHEET_PARTY)) throw xMissingSheet(SHEET_PARTY); GWorldPtr from_gw = save; Rect from_rect = get_custom_rect(num); OffsetRect(&small_monst_rect,to_rect.left + 7,to_rect.top); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); OffsetRect(&small_monst_rect,0,18); from_rect = get_custom_rect(num+1); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); }
// mode 0 normal 1 click void draw_lb_slot (short which,short mode) { RECT text_rect,from_rect; COLORREF colors = RGB(0,0,102),colors2 = RGB(0,0,0); paint_pattern(NULL,1,left_buttons[which][0],3); if (left_button_status[which] == 0) return; text_rect = left_buttons[which][0]; if (left_button_status[which] >= 10) { text_rect.left += 18; from_rect = blue_button_from; if (mode > 0) OffsetRect(&from_rect,from_rect.right - from_rect.left,0); rect_draw_some_item(editor_mixed,from_rect,editor_mixed,left_buttons[which][1],0,1); } if (left_button_status[which] % 10 == 3) text_rect.left += 16; if (left_button_status[which] % 10 == 2) { SelectObject(main_dc,bold_font); } else OffsetRect(&text_rect,0,2); if (mode > 0) SetTextColor(main_dc,colors); char_win_draw_string(main_dc,text_rect,(char *)data_store->strings_ls[which],0,12); SetTextColor(main_dc,colors2); SelectObject(main_dc,font); }
void cPict::drawPresetTerMap(short num, Rect to_rect){ Rect from_rect = {0,0,12,12}; if(!isSheetSet(SHEET_TER_MAP)) throw xMissingSheet(SHEET_TER_MAP); GWorldPtr from_gw = map; to_rect.right = to_rect.left + 24; to_rect.bottom = to_rect.top + 24; OffsetRect(&from_rect,12 * (num % 10), 12 * (num / 10)); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetScenLg(short num, Rect to_rect){ if(!isSheetSet(SHEET_SCEN_LG)) throw xMissingSheet(SHEET_SCEN_LG); GWorldPtr from_gw = largeScen; to_rect.right = to_rect.left + 64; to_rect.bottom = to_rect.top + 64; Rect from_rect = {0,0,64,64}; OffsetRect(&from_rect, num * 64, 0); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawStatusIcon(short num, Rect to_rect){ Rect from_rect = {0,0,12,12}; if(!isSheetSet(SHEET_STATUS)) throw xMissingSheet(SHEET_STATUS); GWorldPtr from_gw = status; to_rect.right = to_rect.left + 12; to_rect.bottom = to_rect.top + 12; OffsetRect(&from_rect,12 * (num % 3), 12 * (num / 3)); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void cPict::drawPresetBoom(short num, Rect to_rect){ if(!isSheetSet(SHEET_BOOM)) throw xMissingSheet(SHEET_BOOM); GWorldPtr from_gw = boom; Rect from_rect = calc_rect(num % 8, num / 8); to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void cPict::drawFullSheet(short num, Rect to_rect){ Rect from_rect; if(!isSheetSet(SHEET_FULL,num)) throw xMissingSheet(SHEET_FULL,num); GWorldPtr from_gw = largeSheets[num]; GetPortBounds(from_gw, &from_rect); to_rect.right = to_rect.left + (from_rect.right - from_rect.left); to_rect.bottom = to_rect.top + (from_rect.bottom - from_rect.top); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetScen(short num, Rect to_rect){ if(!isSheetSet(SHEET_SCEN)) throw xMissingSheet(SHEET_SCEN); GWorldPtr from_gw = scen; Rect from_rect = {0,0,32,32}; OffsetRect(&from_rect,32 * (num % 5),32 * (num / 5)); to_rect.right = to_rect.left + 32; to_rect.bottom = to_rect.top + 32; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetDlogLg(short num, Rect to_rect){ to_rect.right = to_rect.left + 72; to_rect.bottom = to_rect.top + 72; if(!isSheetSet(SHEET_DLOG)) throw xMissingSheet(SHEET_DLOG); GWorldPtr from_gw = dlog; Rect from_rect = {0,0,72,72}; OffsetRect(&from_rect,36 * (num % 4),36 * (num / 4)); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPartyPc(short num, Rect to_rect){ printf("Drawing graphic %i as a custom space pic.\n",num); to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 32; if(!isSheetSet(SHEET_PARTY)) throw xMissingSheet(SHEET_PARTY); GWorldPtr from_gw = save; Rect from_rect = get_custom_rect(num); PaintRect(&to_rect); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void cPict::drawCustomTalk(short num, Rect to_rect){ Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; to_rect.right = to_rect.left + 16; to_rect.bottom = to_rect.top + 32; from_rect.right = from_rect.left + 16; from_rect.bottom = from_rect.top + 32; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); from_gw = customSheets[n]; OffsetRect(&to_rect,16,0); from_rect.right = from_rect.left + 16; from_rect.bottom = from_rect.top + 32; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetTer(short num, Rect to_rect){ printf("Getting terrain icon from sheet %i.\n",num / 50); if(!isSheetSet(SHEET_TER,num / 50)) throw xMissingSheet(SHEET_TER,num / 50); GWorldPtr from_gw = ter[num / 50]; num = num % 50; Rect from_rect = calc_rect(num % 10, num / 10); if (to_rect.right - to_rect.left > 28) InsetRect(&to_rect,4,0); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetTalk(short num, Rect to_rect){ num--; to_rect.right = to_rect.left + 32; to_rect.bottom = to_rect.top + 32; if(!isSheetSet(SHEET_TALK)) throw xMissingSheet(SHEET_TALK); GWorldPtr from_gw = talk; Rect from_rect = {0,0,32,32}; OffsetRect(&from_rect,32 * (num % 10),32 * (num / 10)); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawCustomTer(short num, Rect to_rect){ printf("Drawing graphic %i as a custom terrain pic.\n",num); to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 32; Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
//short dest; // 0 - terrain gworld 1 - screen // if terrain_to_draw is -1, do black // if terrain_to_draw >= 10000, force to draw graphic which is terrain_to_draw - 10000 void draw_one_terrain_spot (short i,short j,short terrain_to_draw) { rectangle where_draw; rectangle source_rect; sf::Texture* source_gworld; short anim_type = 0; location l; l.x = i; l.y = j; if(supressing_some_spaces && (l != ok_space[0]) && (l != ok_space[1]) && (l != ok_space[2]) && (l != ok_space[3])) return; where_draw = calc_rect(i,j); where_draw.offset(13,13); if(terrain_to_draw == -1) { fill_rect(terrain_screen_gworld, where_draw, sf::Color::Black); return; } if(terrain_to_draw >= 10000) { // force using a specific graphic terrain_to_draw -= 10000; int which_sheet = terrain_to_draw / 50; source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get(); terrain_to_draw %= 50; source_rect = calc_rect(terrain_to_draw % 10, terrain_to_draw / 10); anim_type = -1; } else if(univ.scenario.ter_types[terrain_to_draw].picture >= 2000) { // custom graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(univ.scenario.ter_types[terrain_to_draw].picture - 2000 + (anim_ticks % 4)); anim_type = 0; } else if(univ.scenario.ter_types[terrain_to_draw].picture >= 1000) { // custom graf_pos_ref(source_gworld, source_rect) = spec_scen_g.find_graphic(univ.scenario.ter_types[terrain_to_draw].picture - 1000); } else if(univ.scenario.ter_types[terrain_to_draw].picture >= 960) { // animated source_gworld = ResMgr::get<ImageRsrc>("teranim").get(); terrain_to_draw = univ.scenario.ter_types[terrain_to_draw].picture; source_rect = calc_rect(4 * ((terrain_to_draw - 960) / 5) + (anim_ticks % 4),(terrain_to_draw - 960) % 5); anim_type = 0; } else { terrain_to_draw = univ.scenario.ter_types[terrain_to_draw].picture; int which_sheet = terrain_to_draw / 50; source_gworld = ResMgr::get<ImageRsrc>("ter" + std::to_string(1 + which_sheet)).get(); terrain_to_draw %= 50; source_rect = calc_rect(terrain_to_draw % 10, terrain_to_draw / 10); anim_type = -1; } if(anim_type >= 0) { if((is_town()) || (is_out())) anim_onscreen = true; } rect_draw_some_item(*source_gworld, source_rect, terrain_screen_gworld, where_draw); }
void cPict::drawPresetMissile(short num, Rect to_rect){ Rect from_rect = {0,0,18,18}; if(!isSheetSet(SHEET_MISSILE)) throw xMissingSheet(SHEET_MISSILE); GWorldPtr from_gw = missile; to_rect.right = to_rect.left + 18; to_rect.bottom = to_rect.top + 18; PaintRect(&to_rect); short i = animFrame == 7 ? 0 : animFrame + 1; OffsetRect(&from_rect,18 * i, 18 * num); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void refresh_shopping() { Rect from_rects[4] = {{0,0,62,279},{62,0,352,253},{62,269,352,279},{352,0,415,279}},to_rect; short i; for (i = 0; i < 4; i++) { to_rect = from_rects[i]; OffsetRect(&to_rect,5,5); rect_draw_some_item(talk_gworld,from_rects[i],to_rect,ul); } }
void cPict::drawPresetTerAnim(short num, Rect to_rect){ Rect from_rect = calc_rect(4 * (num / 5) + animFrame, num % 5); if(!isSheetSet(SHEET_TER_ANIM)) throw xMissingSheet(SHEET_TER_ANIM); GWorldPtr from_gw = teranim; printf("Getting animated terrain graphic %i from sheet 20", num); if (to_rect.right - to_rect.left > 28) { InsetRect(&to_rect,4,0); to_rect.right = to_rect.left + 28; } rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawPresetMonstSm(short num, Rect to_rect){ short m_start_pic = m_pic_index[num].i; if(!isSheetSet(SHEET_MONST,m_start_pic / 20)) throw xMissingSheet(SHEET_MONST,m_start_pic / 20); GWorldPtr from_gw = monst[m_start_pic / 20]; m_start_pic = m_start_pic % 20; Rect from_rect = calcDefMonstRect(m_start_pic, animFrame); to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void cPict::drawPresetMonstWide(short num, Rect to_rect){ Rect small_monst_rect = {0,0,18,14}; to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); short m_start_pic = m_pic_index[num].i; if(!isSheetSet(SHEET_MONST,m_start_pic / 20)) throw xMissingSheet(SHEET_MONST,m_start_pic / 20); GWorldPtr from_gw = monst[m_start_pic / 20]; m_start_pic = m_start_pic % 20; Rect from_rect = calcDefMonstRect(num, animFrame); OffsetRect(&small_monst_rect,to_rect.left,to_rect.top + 7); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); m_start_pic = m_pic_index[num].i + 1; if(!isSheetSet(SHEET_MONST,m_start_pic / 20)) throw xMissingSheet(SHEET_MONST,m_start_pic / 20); from_gw = monst[m_start_pic / 20]; m_start_pic = m_start_pic % 20; from_rect = calcDefMonstRect(num, animFrame); OffsetRect(&small_monst_rect,14,0); rect_draw_some_item(from_gw, from_rect, small_monst_rect, (Point){0,0}, transparent); }
void cCustomGraphics::copy_graphic(pic_num_t dest, pic_num_t src, size_t numSlots) { if(numSlots < 1) return; if(!party_sheet) { sf::Image empty; empty.create(280, 180, sf::Color::Transparent); party_sheet.reset(new sf::Texture); party_sheet->create(280, 180); party_sheet->update(empty); numSheets = 1; } size_t havePics = count(); if(havePics < dest + numSlots) { int addRows = 1; while(havePics + 10 * addRows < dest + numSlots) addRows++; sf::RenderTexture temp; temp.create(280, party_sheet->getSize().y + 36 * addRows); temp.clear(sf::Color::Transparent); rect_draw_some_item(*party_sheet, rectangle(*party_sheet), temp, rectangle(*party_sheet)); *party_sheet = temp.getTexture(); } sf::Texture* from_sheet; sf::Texture* to_sheet; sf::Texture* last_src = nullptr; sf::RenderTexture temp; rectangle from_rect, to_rect; for(size_t i = 0; i < numSlots; i++) { graf_pos_ref(from_sheet, from_rect) = find_graphic(src + i); graf_pos_ref(to_sheet, to_rect) = find_graphic(dest + i, true); if(to_sheet != last_src) { if(last_src) *last_src = temp.getTexture(); last_src = to_sheet; temp.create(to_sheet->getSize().x, to_sheet->getSize().y); rect_draw_some_item(*to_sheet, rectangle(*to_sheet), temp, rectangle(*to_sheet)); } rect_draw_some_item(*from_sheet, from_rect, temp, to_rect); } *last_src = temp.getTexture(); }
void cPict::drawCustomTerMap(short num, Rect to_rect){ Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; from_rect.right = from_rect.left + 12; from_rect.bottom = from_rect.top + 12; num /= 1000; num--; OffsetRect(&from_rect, (num / 3) * 12, (num % 3) * 12); to_rect.right = to_rect.left + 24; to_rect.bottom = to_rect.top + 24; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}); }
void cPict::drawCustomMissile(short num, Rect to_rect){ num += animFrame % 4; Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; from_rect.right = from_rect.left + 18; from_rect.bottom = from_rect.top + 18; if(animFrame >= 4) OffsetRect(&from_rect, 0, 18); PaintRect(&to_rect); InsetRect(&to_rect,5,9); rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void load_main_screen() { short i; RECT map_from_orig = {372,0,380,8},map_from,brush_to = {0,0,8,8}; main_dc = GetDC(mainPtr); SelectObject(main_dc,font); SetBkMode(main_dc,TRANSPARENT); SetStretchBltMode(main_dc,STRETCH_DELETESCANS); terrain_buttons_gworld = CreateCompatibleBitmap(main_dc,terrain_buttons_rect.right,terrain_buttons_rect.bottom); ter_draw_gworld = CreateCompatibleBitmap(main_dc,terrain_rect.right,terrain_rect.bottom); dlg_buttons_gworld = load_pict(2000); mixed_gworld = load_pict(903); run_startup_g(); world_screen = terrain_rect; OffsetRect(&world_screen,TER_RECT_UL_X,TER_RECT_UL_Y); for (i = 0; i < 10; i++) monst_gworld[i] = load_pict(1100 + i); for (i = 0; i < 6; i++) terrain_gworld[i] = load_pict(800 + i); small_terrain_gworld = load_pict(904); editor_mixed = load_pict(906); anim_gworld = load_pict(820); field_gworld = load_pict(821); talkfaces_gworld = load_pict(860); items_gworld = load_pict(901); tiny_obj_gworld = load_pict(900); dlogpics_gworld = load_pict(850); dialog_pattern_gworld = CreateCompatibleBitmap(main_dc,192,256); pattern_gworld = CreateCompatibleBitmap(main_dc,192,256); //draw_main_screen(); for (i = 0; i < 25; i++) { map_from = map_from_orig; OffsetRect(&map_from,8 * (i / 10),8 * (i % 10)); map_bitmap[i] = CreateCompatibleBitmap(main_dc,8,8); rect_draw_some_item(mixed_gworld,map_from,map_bitmap[i],brush_to,0,0); map_brush[i] = CreatePatternBrush(map_bitmap[i]); } }
void cPict::drawCustomMonstSm(short num, Rect to_rect){ static const short adj[4] = {0, 2, 1, 3}; num += adj[animFrame]; printf("Drawing graphic %i as a custom space pic.\n",num); to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 32; PaintRect(&to_rect); Rect from_rect; short n = get_custom_rect(num,from_rect); if(!isSheetSet(SHEET_CUSTOM,n)) throw xMissingSheet(SHEET_CUSTOM,n); GWorldPtr from_gw = customSheets[n]; rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
void draw_items(HDC hdc) { short i; RECT source_rect,draw_rect; location where_draw; short pic_num; for (i = 0; i < 64; i++) { if (town.preset_items[i].item_code >= 0) { where_draw.x = town.preset_items[i].item_loc.x - cen_x + 4; where_draw.y = town.preset_items[i].item_loc.y - cen_y + 4; pic_num = scen_item_list.scen_items[town.preset_items[i].item_code].graphic_num; if ((where_draw.x >= 0) && (where_draw.x <= 8) && (where_draw.y >= 0) && (where_draw.y <= 8)) { if (pic_num >= 150) { source_rect = get_custom_rect(pic_num - 150); draw_rect = calc_rect(where_draw.x,where_draw.y); OffsetRect(&draw_rect,8,8); rect_draw_some_item(spec_scen_g,source_rect, ter_draw_gworld, draw_rect, 1, 0); } else { source_rect = get_item_template_rect(pic_num); draw_rect = calc_rect(where_draw.x,where_draw.y); OffsetRect(&draw_rect,8,8); if (pic_num >= 45) { draw_rect.top += 9; draw_rect.bottom -= 9; draw_rect.left += 5; draw_rect.right -= 5; } rect_draw_some_item((pic_num < 45) ? items_gworld : tiny_obj_gworld,source_rect, ter_draw_gworld, draw_rect, 1, 0); } } } } }
/* Draw a bitmap in the world window. hor in 0 .. 8, vert in 0 .. 8, object is ptr. to bitmap to be drawn, and masking is for Copybits. */ void Draw_Some_Item ( GWorldPtr src_gworld,RECT src_rect,GWorldPtr targ_gworld,location target, char masked,short main_win) { RECT destrec; if ((target.x < 0) || (target.x > 8) || (target.y < 0) || (target.y > 8)) return; destrec.left = 8 + BITMAP_WIDTH * target.x; destrec.right = destrec.left + BITMAP_WIDTH; destrec.top = 8 + BITMAP_HEIGHT * target.y; destrec.bottom = destrec.top + BITMAP_HEIGHT; destrec.left = destrec.right - (src_rect.right - src_rect.left); destrec.top = destrec.bottom - (src_rect.bottom - src_rect.top); rect_draw_some_item(src_gworld,src_rect,ter_draw_gworld,destrec,masked,0); }
void cPict::drawPresetItem(short num, Rect to_rect){ to_rect.right = to_rect.left + 28; to_rect.bottom = to_rect.top + 36; PaintRect(&to_rect); GWorldPtr from_gw; Rect from_rect = {0,0,18,18}; if (num < 45) { if(!isSheetSet(SHEET_ITEM)) throw xMissingSheet(SHEET_ITEM); from_gw = item; from_rect = calc_rect(num % 5, num / 5); }else{ if(!isSheetSet(SHEET_TINY_ITEM)) throw xMissingSheet(SHEET_TINY_ITEM); from_gw = tinyItem; InsetRect(&to_rect,5,9); OffsetRect(&from_rect,18 * (num % 10), 18 * (num / 10)); } rect_draw_some_item(from_gw, from_rect, to_rect, (Point){0,0}, transparent); }
// klugde for speed ...exactly like place location above, but just writes location void place_just_location() { char draw_str[256]; RECT from_rect,draw_rect,erase_rect; HBITMAP store_bmp; HDC hdc; erase_rect.left = terrain_rects[255].left + 17; erase_rect.right = RIGHT_AREA_WIDTH - 1; erase_rect.top = terrain_rects[255].top + 12 - 9; erase_rect.bottom = erase_rect.top + 12; paint_pattern(terrain_buttons_gworld,0,erase_rect,1); hdc = CreateCompatibleDC(main_dc); SetBkMode(hdc,TRANSPARENT); SelectObject(hdc,small_bold_font); store_bmp = (HBITMAP)SelectObject(hdc,terrain_buttons_gworld); draw_rect.left = terrain_rects[255].left + 20; draw_rect.top = terrain_rects[255].top; if (overall_mode < 60) sprintf(draw_str,"Center: x = %d, y = %d ",cen_x,cen_y); else { draw_rect.left = 5; draw_rect.top = terrain_rects[255].top + 28; sprintf(draw_str,"Click terrain to edit. "); } draw_rect.bottom = draw_rect.top + 14; draw_rect.right = draw_rect.left + 200; win_draw_string(hdc,draw_rect,draw_str,0,12); SelectObject(hdc,store_bmp); from_rect = terrain_buttons_rect; from_rect.top = erase_rect.top; from_rect.bottom = erase_rect.bottom; draw_rect = from_rect; OffsetRect(&draw_rect,RIGHT_AREA_UL_X,RIGHT_AREA_UL_Y); rect_draw_some_item(terrain_buttons_gworld,from_rect, terrain_buttons_gworld,draw_rect,0,1); DeleteObject(hdc); }