From 1b68a09993e4a6cdc9408bd5fed10f9ee87559e0 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Sat, 16 May 2009 18:41:27 +0000 Subject: [PATCH] Fixed walkway smoothing and road connecting. git-svn-id: http://openexile.googlecode.com/svn/trunk@57 4ebdad44-0ea0-11de-aab3-ff745001d230 --- osx/BoE.xcodeproj/project.pbxproj | 110 +++++++++++++ osx/Scenario Editor/Blades of Exile Graphics | Bin 5214769 -> 4983005 bytes osx/Scenario Editor/scen.graphics.cpp | 18 +-- osx/boe.graphics.cpp | 154 +++++++++++-------- osx/boe.graphics.h | 5 +- osx/boe.graphutil.cpp | 12 +- 6 files changed, 217 insertions(+), 82 deletions(-) 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 1dc7f2d8f9dc52b63747f397f4e6fd780a1eae21..3fe51a003f5070fc9d26d8148efebd1bdd31e182 100644 GIT binary patch delta 24250 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 U{)TfeuKV1^%|+*2xcTz`25**bOaK4? delta 8234 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[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)))