diff --git a/osx/BoE.xcodeproj/project.pbxproj b/osx/BoE.xcodeproj/project.pbxproj index 8fa6230c..23c50f63 100644 --- a/osx/BoE.xcodeproj/project.pbxproj +++ b/osx/BoE.xcodeproj/project.pbxproj @@ -42,6 +42,18 @@ 2BF04B2D0BF51924006C0831 /* boe.text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BF04B070BF51924006C0831 /* boe.text.cpp */; }; 2BF04B2E0BF51924006C0831 /* boe.town.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BF04B090BF51924006C0831 /* boe.town.cpp */; }; 2BF04DE90BF7A6FE006C0831 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2BF04DE80BF7A6FE006C0831 /* Carbon.framework */; }; + 910BBA450FB8E345001E34EA /* dialog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA180FB8BECA001E34EA /* dialog.cpp */; }; + 910BBA460FB8E347001E34EA /* control.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA3C0FB8DA8E001E34EA /* control.cpp */; }; + 910BBA470FB8E34E001E34EA /* ticpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA270FB8C459001E34EA /* ticpp.cpp */; }; + 910BBA480FB8E34E001E34EA /* tinystr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA2E0FB8C459001E34EA /* tinystr.cpp */; }; + 910BBA490FB8E34F001E34EA /* tinyxml.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA2A0FB8C459001E34EA /* tinyxml.cpp */; }; + 910BBA4A0FB8E350001E34EA /* tinyxmlerror.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA2C0FB8C459001E34EA /* tinyxmlerror.cpp */; }; + 910BBA4B0FB8E351001E34EA /* tinyxmlparser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA2D0FB8C459001E34EA /* tinyxmlparser.cpp */; }; + 910BBA8A0FB8EC57001E34EA /* button.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBA890FB8EC57001E34EA /* button.cpp */; }; + 910BBAAA0FB8F733001E34EA /* pict.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBAA90FB8F733001E34EA /* pict.cpp */; }; + 910BBAB60FB91A26001E34EA /* field.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBAB50FB91A26001E34EA /* field.cpp */; }; + 910BBABA0FB91ADB001E34EA /* message.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBAB90FB91ADB001E34EA /* message.cpp */; }; + 910BBADB0FB91D2A001E34EA /* dlogutil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 910BBADA0FB91D2A001E34EA /* dlogutil.cpp */; }; 9127903E0F9B7F49007B0D52 /* boe.actions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BF04ACF0BF51923006C0831 /* boe.actions.cpp */; }; 9127903F0F9B7F50007B0D52 /* boe.graphics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 2BF04AD30BF51923006C0831 /* boe.graphics.cpp */; }; 912793640F9C107B007B0D52 /* viewdlog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 91B3EEF80F969BA700BF5B67 /* viewdlog.cpp */; }; @@ -285,6 +297,29 @@ 2BF04B090BF51924006C0831 /* boe.town.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = boe.town.cpp; sourceTree = ""; wrapsLines = 1; }; 2BF04B0A0BF51924006C0831 /* boe.town.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = boe.town.h; sourceTree = ""; }; 2BF04DE80BF7A6FE006C0831 /* Carbon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = Carbon.framework; path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework; sourceTree = ""; }; + 910BBA170FB8BECA001E34EA /* dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dialog.h; path = dialogxml/dialog.h; sourceTree = ""; }; + 910BBA180FB8BECA001E34EA /* dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dialog.cpp; path = dialogxml/dialog.cpp; sourceTree = ""; }; + 910BBA270FB8C459001E34EA /* ticpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ticpp.cpp; path = "dialogxml/TinyXML++/ticpp.cpp"; sourceTree = ""; }; + 910BBA280FB8C459001E34EA /* ticpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticpp.h; path = "dialogxml/TinyXML++/ticpp.h"; sourceTree = ""; }; + 910BBA290FB8C459001E34EA /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinystr.h; path = "dialogxml/TinyXML++/tinystr.h"; sourceTree = ""; }; + 910BBA2A0FB8C459001E34EA /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxml.cpp; path = "dialogxml/TinyXML++/tinyxml.cpp"; sourceTree = ""; }; + 910BBA2B0FB8C459001E34EA /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinyxml.h; path = "dialogxml/TinyXML++/tinyxml.h"; sourceTree = ""; }; + 910BBA2C0FB8C459001E34EA /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxmlerror.cpp; path = "dialogxml/TinyXML++/tinyxmlerror.cpp"; sourceTree = ""; }; + 910BBA2D0FB8C459001E34EA /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxmlparser.cpp; path = "dialogxml/TinyXML++/tinyxmlparser.cpp"; sourceTree = ""; }; + 910BBA2E0FB8C459001E34EA /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinystr.cpp; path = "dialogxml/TinyXML++/tinystr.cpp"; sourceTree = ""; }; + 910BBA2F0FB8C470001E34EA /* ticpprc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticpprc.h; path = "dialogxml/TinyXML++/ticpprc.h"; sourceTree = ""; }; + 910BBA3B0FB8DA8E001E34EA /* control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control.h; path = dialogxml/control.h; sourceTree = ""; }; + 910BBA3C0FB8DA8E001E34EA /* control.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control.cpp; path = dialogxml/control.cpp; sourceTree = ""; }; + 910BBA880FB8EC57001E34EA /* button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = button.h; path = dialogxml/button.h; sourceTree = ""; }; + 910BBA890FB8EC57001E34EA /* button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = dialogxml/button.cpp; sourceTree = ""; }; + 910BBAA80FB8F733001E34EA /* pict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pict.h; path = dialogxml/pict.h; sourceTree = ""; }; + 910BBAA90FB8F733001E34EA /* pict.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pict.cpp; path = dialogxml/pict.cpp; sourceTree = ""; }; + 910BBAB40FB91A26001E34EA /* field.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = field.h; path = dialogxml/field.h; sourceTree = ""; }; + 910BBAB50FB91A26001E34EA /* field.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = field.cpp; path = dialogxml/field.cpp; sourceTree = ""; }; + 910BBAB80FB91ADB001E34EA /* message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = message.h; path = dialogxml/message.h; sourceTree = ""; }; + 910BBAB90FB91ADB001E34EA /* message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message.cpp; path = dialogxml/message.cpp; sourceTree = ""; }; + 910BBAD90FB91D2A001E34EA /* dlogutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dlogutil.h; path = dialogxml/dlogutil.h; sourceTree = ""; }; + 910BBADA0FB91D2A001E34EA /* dlogutil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dlogutil.cpp; path = dialogxml/dlogutil.cpp; sourceTree = ""; }; 912793480F9C0FE6007B0D52 /* ViewDlog.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ViewDlog.app; sourceTree = BUILT_PRODUCTS_DIR; }; 912798AE0F9CA636007B0D52 /* dlgbtns.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dlgbtns.cpp; path = tools/dlgbtns.cpp; sourceTree = ""; }; 91279BAD0F9CFCBA007B0D52 /* boescenario.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = boescenario.icns; sourceTree = ""; }; @@ -463,6 +498,68 @@ name = Products; sourceTree = ""; }; + 910BBA130FB8BE66001E34EA /* dialogs */ = { + isa = PBXGroup; + children = ( + 910BBA190FB8C43E001E34EA /* TinyXML++ */, + 910BBA140FB8BE7D001E34EA /* headers */, + 910BBA150FB8BE88001E34EA /* src */, + 910BBA160FB8BE98001E34EA /* common */, + ); + name = dialogs; + sourceTree = ""; + }; + 910BBA140FB8BE7D001E34EA /* headers */ = { + isa = PBXGroup; + children = ( + 910BBA170FB8BECA001E34EA /* dialog.h */, + 910BBA3B0FB8DA8E001E34EA /* control.h */, + 910BBA880FB8EC57001E34EA /* button.h */, + 910BBAA80FB8F733001E34EA /* pict.h */, + 910BBAB40FB91A26001E34EA /* field.h */, + 910BBAB80FB91ADB001E34EA /* message.h */, + 910BBAD90FB91D2A001E34EA /* dlogutil.h */, + ); + name = headers; + sourceTree = ""; + }; + 910BBA150FB8BE88001E34EA /* src */ = { + isa = PBXGroup; + children = ( + 910BBA180FB8BECA001E34EA /* dialog.cpp */, + 910BBA3C0FB8DA8E001E34EA /* control.cpp */, + 910BBA890FB8EC57001E34EA /* button.cpp */, + 910BBAA90FB8F733001E34EA /* pict.cpp */, + 910BBAB50FB91A26001E34EA /* field.cpp */, + 910BBAB90FB91ADB001E34EA /* message.cpp */, + 910BBADA0FB91D2A001E34EA /* dlogutil.cpp */, + ); + name = src; + sourceTree = ""; + }; + 910BBA160FB8BE98001E34EA /* common */ = { + isa = PBXGroup; + children = ( + ); + name = common; + sourceTree = ""; + }; + 910BBA190FB8C43E001E34EA /* TinyXML++ */ = { + isa = PBXGroup; + children = ( + 910BBA270FB8C459001E34EA /* ticpp.cpp */, + 910BBA280FB8C459001E34EA /* ticpp.h */, + 910BBA2F0FB8C470001E34EA /* ticpprc.h */, + 910BBA290FB8C459001E34EA /* tinystr.h */, + 910BBA2A0FB8C459001E34EA /* tinyxml.cpp */, + 910BBA2B0FB8C459001E34EA /* tinyxml.h */, + 910BBA2C0FB8C459001E34EA /* tinyxmlerror.cpp */, + 910BBA2D0FB8C459001E34EA /* tinyxmlparser.cpp */, + 910BBA2E0FB8C459001E34EA /* tinystr.cpp */, + ); + name = "TinyXML++"; + sourceTree = ""; + }; 91279BAB0F9CFB18007B0D52 /* classes */ = { isa = PBXGroup; children = ( @@ -681,6 +778,7 @@ 91B3F0FF0F97797200BF5B67 /* tools */ = { isa = PBXGroup; children = ( + 910BBA130FB8BE66001E34EA /* dialogs */, 913D03350FA1000200184C18 /* headers */, 913D03340FA0FFFF00184C18 /* src */, ); @@ -1060,6 +1158,18 @@ 91AC60A90FA26C1B00EEAE67 /* tmpltown.cpp in Sources */, 91AC620C0FA2853700EEAE67 /* creatlist.cpp in Sources */, 91AC65520FA3441B00EEAE67 /* universe.cpp in Sources */, + 910BBA450FB8E345001E34EA /* dialog.cpp in Sources */, + 910BBA460FB8E347001E34EA /* control.cpp in Sources */, + 910BBA470FB8E34E001E34EA /* ticpp.cpp in Sources */, + 910BBA480FB8E34E001E34EA /* tinystr.cpp in Sources */, + 910BBA490FB8E34F001E34EA /* tinyxml.cpp in Sources */, + 910BBA4A0FB8E350001E34EA /* tinyxmlerror.cpp in Sources */, + 910BBA4B0FB8E351001E34EA /* tinyxmlparser.cpp in Sources */, + 910BBA8A0FB8EC57001E34EA /* button.cpp in Sources */, + 910BBAAA0FB8F733001E34EA /* pict.cpp in Sources */, + 910BBAB60FB91A26001E34EA /* field.cpp in Sources */, + 910BBABA0FB91ADB001E34EA /* message.cpp in Sources */, + 910BBADB0FB91D2A001E34EA /* dlogutil.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/osx/Scenario Editor/Blades of Exile Graphics b/osx/Scenario Editor/Blades of Exile Graphics index 1dc7f2d8..3fe51a00 100644 Binary files a/osx/Scenario Editor/Blades of Exile Graphics and b/osx/Scenario Editor/Blades of Exile Graphics differ diff --git a/osx/Scenario Editor/scen.graphics.cpp b/osx/Scenario Editor/scen.graphics.cpp index dc823a5a..4b9b3465 100644 --- a/osx/Scenario Editor/scen.graphics.cpp +++ b/osx/Scenario Editor/scen.graphics.cpp @@ -69,7 +69,7 @@ GWorldPtr terrain_gworld[7]; GWorldPtr editor_mixed; GWorldPtr terrain_buttons_gworld; GWorldPtr anim_gworld; -GWorldPtr field_gworld; +GWorldPtr fields_gworld; GWorldPtr dialog_gworld; GWorldPtr items_gworld; GWorldPtr tiny_obj_gworld; @@ -430,7 +430,7 @@ void load_graphics(){ terrain_gworld[i] = load_pict(800 + i); editor_mixed = load_pict(906); anim_gworld = load_pict(820); - field_gworld = load_pict(821); + fields_gworld = load_pict(821); roads_gworld = load_pict(822); talkfaces_gworld = load_pict(860); items_gworld = load_pict(901); @@ -835,32 +835,32 @@ void draw_terrain(){ } if (is_web(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(5,0); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } if (is_crate(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(6,0); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } if (is_barrel(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(7,0); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } if (is_fire_barrier(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(0,2); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } if (is_quickfire(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(7,1); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } if (is_force_barrier(cen_x + q - 4,cen_y + r - 4) == true) { from_rect = calc_rect(2,2); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } for (i = 0; i < 8; i++) if (is_sfx(cen_x + q - 4,cen_y + r - 4,i)) { from_rect = calc_rect(i,3); - Draw_Some_Item(field_gworld,from_rect,ter_draw_gworld,where_draw,1,0); + Draw_Some_Item(fields_gworld,from_rect,ter_draw_gworld,where_draw,1,0); } for (x = 0; x < 64; x++) if ((cen_x + q - 4 == town->preset_items[x].loc.x) && diff --git a/osx/boe.graphics.cpp b/osx/boe.graphics.cpp index 5da9ee33..240bd612 100644 --- a/osx/boe.graphics.cpp +++ b/osx/boe.graphics.cpp @@ -1777,7 +1777,10 @@ bool is_nature(char x, char y, unsigned char ground_t) } unsigned short get_ground_from_ter(unsigned short ter){ - unsigned char ground = scenario.ter_types[ter].ground_type; + return get_ter_from_ground(scenario.ter_types[ter].ground_type); +} + +unsigned short get_ter_from_ground(unsigned char ground){ for(int i = 0; i < 256; i++) if(scenario.ter_types[i].ground_type == ground) return i; @@ -1919,7 +1922,7 @@ void draw_terrain(short mode) eTrimType trim = scenario.ter_types[spec_terrain].trim_type; - // Finally, draw this terrain spot TODO: Alter walkway drawing + // Finally, draw this terrain spot // if(short_spec_terrain == 82) { // cave wway // if (loc_off_act_area(where_draw) == false) { // if ((is_nature(where_draw.x - 1,where_draw.y)) && @@ -1954,8 +1957,8 @@ void draw_terrain(short mode) // draw_one_terrain_spot(q,r,short_spec_terrain,0); if(trim == TRIM_WALKWAY){ int corner = -1; - unsigned short ground_ter = get_ground_from_ter(spec_terrain); unsigned char ground_t = scenario.ter_types[spec_terrain].trim_ter; + unsigned short ground_ter = get_ter_from_ground(ground_t); if (!loc_off_act_area(where_draw)) { if ((is_nature(where_draw.x - 1,where_draw.y,ground_t)) && (is_nature(where_draw.x,where_draw.y - 1,ground_t))) @@ -1973,7 +1976,8 @@ void draw_terrain(short mode) draw_one_terrain_spot(q,r,corner < 0 ? spec_terrain : ground_ter,0); if(corner >= 0) Draw_Some_Item(roads_gworld, calc_rect(corner,0), terrain_screen_gworld, loc(q,r), 1, 0); - }else if(trim == TRIM_ROAD) { // TODO: Alter road handling + }else if(trim == TRIM_ROAD || trim == TRIM_N || trim == TRIM_S || + trim == TRIM_W || trim == TRIM_E) { // if ((short_spec_terrain == 81) // && ((univ.out[where_draw.x][where_draw.y - 1] == 80) || (univ.out[where_draw.x][where_draw.y - 1] == 79))) // short_spec_terrain = 42; @@ -2003,7 +2007,7 @@ void draw_terrain(short mode) ((univ.out[where_draw.x + 1][where_draw.y] < 36) || (univ.out[where_draw.x + 1][where_draw.y] > 49)))) short_spec_terrain = 40;*/ draw_one_terrain_spot(q,r,spec_terrain,0); - place_road(q,r,where_draw); + place_road(q,r,where_draw,trim == TRIM_ROAD); }else if(spec_terrain == 65535) { draw_one_terrain_spot(q,r,-1,0); }else{ @@ -2271,8 +2275,8 @@ void draw_trim(short q,short r,short which_trim,short which_mode) bool extend_road_terrain(unsigned short ter) { - unsigned short trim = scenario.ter_types[ter].trim_type; - unsigned short spec = scenario.ter_types[ter].special; + eTrimType trim = scenario.ter_types[ter].trim_type; + eTerSpec spec = scenario.ter_types[ter].special; unsigned short flag = scenario.ter_types[ter].flag1; if(trim == TRIM_ROAD || trim == TRIM_CITY || trim == TRIM_WALKWAY) return true; @@ -2286,22 +2290,35 @@ bool extend_road_terrain(unsigned short ter) return true; // open door (I think) TODO: Verify this works if(spec == TER_SPEC_LOCKABLE) return true; // open portcullis (most likely) + if(trim == TRIM_N || trim == TRIM_S || trim == TRIM_W || trim == TRIM_E) + return true; // connect roads to trim boundaries + return false; } -void place_road(short q,short r,location where) +bool connect_roads(unsigned short ter){ + eTrimType trim = scenario.ter_types[ter].trim_type; + eTerSpec spec = scenario.ter_types[ter].special; + if(trim == TRIM_ROAD || trim == TRIM_CITY) + return true; + if(spec == TER_SPEC_TOWN_ENTRANCE && trim != TRIM_NONE) + return true; // cave entrance, most likely + return false; +} + +void place_road(short q,short r,location where, bool here) { location draw_loc; unsigned char ter; Rect to_rect; //Rect road_rects[2] = {{76,112,80,125},{72,144,90,148}}; // 0 - rl partial 1 - ud partial - Rect road_rects[4] = { + static const Rect road_rects[4] = { {4,112,8,125}, // horizontal partial {0,144,18,148}, // vertical partial {0,112,4,140}, // horizontal full {0,140,36,144}, // vertical full }; //Rect road_dest_rects[4] = {{0,12,18,16},{16,15,20,28},{18,12,36,16},{16,0,20,13}}; // top right bottom left - Rect road_dest_rects[6] = { + static const Rect road_dest_rects[6] = { {0,12,18,16}, // top {16,15,20,28}, // right {18,12,36,16}, // bottom @@ -2309,80 +2326,83 @@ void place_road(short q,short r,location where) {0,12,36,16}, // top + bottom {16,0,20,28}, // right + left }; - draw_loc.x = q; draw_loc.y = r; + draw_loc.x = q; + draw_loc.y = r; terrain_there[q][r] = -1; // TODO: Test the new road-handling code on a hills boundary. - if (where.y > 0) - ter = coord_to_ter(where.x,where.y - 1); - if ((where.y == 0) || (extend_road_terrain(ter))) { - to_rect = road_dest_rects[0]; - OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); - }else{ - ter = coord_to_ter(where.x,where.y - 2); - if(extend_road_terrain(ter)){ + if(here){ + if (where.y > 0) + ter = coord_to_ter(where.x,where.y - 1); + if ((where.y == 0) || extend_road_terrain(ter)) { to_rect = road_dest_rects[0]; OffsetRect(&to_rect,13 + q * 28,13 + r * 36); rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); - to_rect = road_dest_rects[4]; - OffsetRect(&to_rect,13 + q * 28,13 + (r - 1) * 36); - rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld, to_rect, 0, 0); } - } - - if (((is_out()) && (where.x < 96)) || (!(is_out()) && (where.x < univ.town->max_dim() - 1))) - ter = coord_to_ter(where.x + 1,where.y); - if (((is_out()) && (where.x == 96)) || (!(is_out()) && (where.x == univ.town->max_dim() - 1)) - || (extend_road_terrain(ter) == true)) { - to_rect = road_dest_rects[1]; - OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect, 0, 0); - }else{ - ter = coord_to_ter(where.x + 1,where.y); - if(extend_road_terrain(ter)){ + + if (((is_out()) && (where.x < 96)) || (!(is_out()) && (where.x < univ.town->max_dim() - 1))) + ter = coord_to_ter(where.x + 1,where.y); + if (((is_out()) && (where.x == 96)) || (!(is_out()) && (where.x == univ.town->max_dim() - 1)) + || extend_road_terrain(ter)) { to_rect = road_dest_rects[1]; OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); - to_rect = road_dest_rects[5]; - OffsetRect(&to_rect,13 + (q + 1) * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld, to_rect, 0, 0); + rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect, 0, 0); } - } - - if (((is_out()) && (where.y < 96)) || (!(is_out()) && (where.y < univ.town->max_dim() - 1))) - ter = coord_to_ter(where.x,where.y + 1); - if (((is_out()) && (where.y == 96)) || (!(is_out()) && (where.y == univ.town->max_dim() - 1)) - || (extend_road_terrain(ter) == true)) { - to_rect = road_dest_rects[2]; - OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); - }else{ - ter = coord_to_ter(where.x,where.y + 2); - if(extend_road_terrain(ter)){ + + if (((is_out()) && (where.y < 96)) || (!(is_out()) && (where.y < univ.town->max_dim() - 1))) + ter = coord_to_ter(where.x,where.y + 1); + if (((is_out()) && (where.y == 96)) || (!(is_out()) && (where.y == univ.town->max_dim() - 1)) + || extend_road_terrain(ter)) { to_rect = road_dest_rects[2]; OffsetRect(&to_rect,13 + q * 28,13 + r * 36); rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); - to_rect = road_dest_rects[4]; - OffsetRect(&to_rect,13 + q * 28,13 + (r + 1) * 36); - rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld, to_rect, 0, 0); } - } - - if (where.x > 0) - ter = coord_to_ter(where.x - 1,where.y); - if ((where.x == 0) || (extend_road_terrain(ter) == true)) { - to_rect = road_dest_rects[3]; - OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect, 0, 0); - }else{ - ter = coord_to_ter(where.x - 1,where.y); - if(extend_road_terrain(ter)){ + + if (where.x > 0) + ter = coord_to_ter(where.x - 1,where.y); + if ((where.x == 0) || extend_road_terrain(ter)) { to_rect = road_dest_rects[3]; OffsetRect(&to_rect,13 + q * 28,13 + r * 36); - rect_draw_some_item (roads_gworld, road_rects[1], terrain_screen_gworld, to_rect, 0, 0); + rect_draw_some_item (roads_gworld, road_rects[0], terrain_screen_gworld, to_rect, 0, 0); + } + }else{ + bool horz = false, vert = false; + if (where.y > 0) + ter = coord_to_ter(where.x,where.y - 1); + if ((where.y == 0) || connect_roads(ter)) + vert = true; + + if (((is_out()) && (where.x < 96)) || (!(is_out()) && (where.x < univ.town->max_dim() - 1))) + ter = coord_to_ter(where.x + 1,where.y); + if (((is_out()) && (where.x == 96)) || (!(is_out()) && (where.x == univ.town->max_dim() - 1)) + || connect_roads(ter)) + horz = true; + + if(vert){ + if (((is_out()) && (where.y < 96)) || (!(is_out()) && (where.y < univ.town->max_dim() - 1))) + ter = coord_to_ter(where.x,where.y + 1); + if (((is_out()) && (where.y == 96)) || (!(is_out()) && (where.y == univ.town->max_dim() - 1)) + || connect_roads(ter)) + vert = true; + else vert = false; + } + + if(horz){ + if (where.x > 0) + ter = coord_to_ter(where.x - 1,where.y); + if ((where.x == 0) || connect_roads(ter)) + horz = true; + else horz = false; + } + + if(horz){ to_rect = road_dest_rects[5]; - OffsetRect(&to_rect,13 + (q - 1) * 28,13 + r * 36); + OffsetRect(&to_rect,13 + q * 28,13 + r * 36); + rect_draw_some_item (roads_gworld, road_rects[2], terrain_screen_gworld, to_rect, 0, 0); + } + if(vert){ + to_rect = road_dest_rects[4]; + OffsetRect(&to_rect,13 + q * 28,13 + r * 36); rect_draw_some_item (roads_gworld, road_rects[3], terrain_screen_gworld, to_rect, 0, 0); } } diff --git a/osx/boe.graphics.h b/osx/boe.graphics.h index 964a13d0..bbee3dcf 100644 --- a/osx/boe.graphics.h +++ b/osx/boe.graphics.h @@ -43,7 +43,7 @@ void draw_terrain(short mode = 0); void place_trim(short q,short r,location where,unsigned char ter_type); void draw_trim(short q,short r,short which_trim,short which_mode); bool extend_road_terrain(unsigned short ter); -void place_road(short q,short r,location where); +void place_road(short q,short r,location where,bool here); void draw_rest_screen(); void boom_space(location where,short mode,short type,short damage,short sound); void draw_pointing_arrows() ; @@ -64,6 +64,9 @@ void HideMenuBar( void ); void ShowMenuBar( void ); void FlushAndPause(unsigned long ticks); +unsigned short get_ground_from_ter(unsigned short ter); +unsigned short get_ter_from_ground(unsigned char ground); + void draw_startup_anim(); short cd_create_custom_dialog(WindowPtr parent, Str255 strs[6],short pic_num,short buttons[3]); void init_dialogs(); diff --git a/osx/boe.graphutil.cpp b/osx/boe.graphutil.cpp index 5bde393e..c4cc6ef6 100644 --- a/osx/boe.graphutil.cpp +++ b/osx/boe.graphutil.cpp @@ -614,9 +614,10 @@ void draw_one_field(unsigned char flag,short source_x,short source_y) Rect orig_rect = {0,0,36,28},source_rect; for (q = 0; q < 9; q++) - for (r = 0; r < 9; r++) - { - where_draw = center;where_draw.x += q - 4;where_draw.y += r - 4; + for (r = 0; r < 9; r++){ + where_draw = center; + where_draw.x += q - 4; + where_draw.y += r - 4; if ((where_draw.x < 0) || (where_draw.x > univ.town->max_dim() - 1) || (where_draw.y < 0) || (where_draw.y > univ.town->max_dim() - 1)) @@ -625,8 +626,9 @@ void draw_one_field(unsigned char flag,short source_x,short source_y) if (univ.town.misc_i(where_draw.x,where_draw.y) & flag) if (spot_seen[q][r] > 0) { loc.x = q; loc.y = r; - source_rect = orig_rect; - OffsetRect(&source_rect,28 * source_x,36 * source_y); + //source_rect = orig_rect; + //OffsetRect(&source_rect,28 * source_x,36 * source_y); + source_rect = calc_rect(source_x,source_y); Draw_Some_Item(fields_gworld,source_rect,terrain_screen_gworld,loc, 1,0); if ((is_town()) && ((flag == 32) || (flag == 64)))