Fixed walkway smoothing and road connecting.

git-svn-id: http://openexile.googlecode.com/svn/trunk@57 4ebdad44-0ea0-11de-aab3-ff745001d230
This commit is contained in:
2009-05-16 18:41:27 +00:00
parent 28f4368651
commit 1b68a09993
6 changed files with 217 additions and 82 deletions

View File

@@ -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 = "<group>"; wrapsLines = 1; };
2BF04B0A0BF51924006C0831 /* boe.town.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = boe.town.h; sourceTree = "<group>"; };
2BF04DE80BF7A6FE006C0831 /* Carbon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; name = Carbon.framework; path = /Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks/Carbon.framework; sourceTree = "<absolute>"; };
910BBA170FB8BECA001E34EA /* dialog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dialog.h; path = dialogxml/dialog.h; sourceTree = "<group>"; };
910BBA180FB8BECA001E34EA /* dialog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dialog.cpp; path = dialogxml/dialog.cpp; sourceTree = "<group>"; };
910BBA270FB8C459001E34EA /* ticpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ticpp.cpp; path = "dialogxml/TinyXML++/ticpp.cpp"; sourceTree = "<group>"; };
910BBA280FB8C459001E34EA /* ticpp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticpp.h; path = "dialogxml/TinyXML++/ticpp.h"; sourceTree = "<group>"; };
910BBA290FB8C459001E34EA /* tinystr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinystr.h; path = "dialogxml/TinyXML++/tinystr.h"; sourceTree = "<group>"; };
910BBA2A0FB8C459001E34EA /* tinyxml.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxml.cpp; path = "dialogxml/TinyXML++/tinyxml.cpp"; sourceTree = "<group>"; };
910BBA2B0FB8C459001E34EA /* tinyxml.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = tinyxml.h; path = "dialogxml/TinyXML++/tinyxml.h"; sourceTree = "<group>"; };
910BBA2C0FB8C459001E34EA /* tinyxmlerror.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxmlerror.cpp; path = "dialogxml/TinyXML++/tinyxmlerror.cpp"; sourceTree = "<group>"; };
910BBA2D0FB8C459001E34EA /* tinyxmlparser.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinyxmlparser.cpp; path = "dialogxml/TinyXML++/tinyxmlparser.cpp"; sourceTree = "<group>"; };
910BBA2E0FB8C459001E34EA /* tinystr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = tinystr.cpp; path = "dialogxml/TinyXML++/tinystr.cpp"; sourceTree = "<group>"; };
910BBA2F0FB8C470001E34EA /* ticpprc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ticpprc.h; path = "dialogxml/TinyXML++/ticpprc.h"; sourceTree = "<group>"; };
910BBA3B0FB8DA8E001E34EA /* control.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = control.h; path = dialogxml/control.h; sourceTree = "<group>"; };
910BBA3C0FB8DA8E001E34EA /* control.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = control.cpp; path = dialogxml/control.cpp; sourceTree = "<group>"; };
910BBA880FB8EC57001E34EA /* button.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = button.h; path = dialogxml/button.h; sourceTree = "<group>"; };
910BBA890FB8EC57001E34EA /* button.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = button.cpp; path = dialogxml/button.cpp; sourceTree = "<group>"; };
910BBAA80FB8F733001E34EA /* pict.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = pict.h; path = dialogxml/pict.h; sourceTree = "<group>"; };
910BBAA90FB8F733001E34EA /* pict.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = pict.cpp; path = dialogxml/pict.cpp; sourceTree = "<group>"; };
910BBAB40FB91A26001E34EA /* field.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = field.h; path = dialogxml/field.h; sourceTree = "<group>"; };
910BBAB50FB91A26001E34EA /* field.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = field.cpp; path = dialogxml/field.cpp; sourceTree = "<group>"; };
910BBAB80FB91ADB001E34EA /* message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = message.h; path = dialogxml/message.h; sourceTree = "<group>"; };
910BBAB90FB91ADB001E34EA /* message.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = message.cpp; path = dialogxml/message.cpp; sourceTree = "<group>"; };
910BBAD90FB91D2A001E34EA /* dlogutil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = dlogutil.h; path = dialogxml/dlogutil.h; sourceTree = "<group>"; };
910BBADA0FB91D2A001E34EA /* dlogutil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = dlogutil.cpp; path = dialogxml/dlogutil.cpp; sourceTree = "<group>"; };
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 = "<group>"; };
91279BAD0F9CFCBA007B0D52 /* boescenario.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = boescenario.icns; sourceTree = "<group>"; };
@@ -463,6 +498,68 @@
name = Products;
sourceTree = "<group>";
};
910BBA130FB8BE66001E34EA /* dialogs */ = {
isa = PBXGroup;
children = (
910BBA190FB8C43E001E34EA /* TinyXML++ */,
910BBA140FB8BE7D001E34EA /* headers */,
910BBA150FB8BE88001E34EA /* src */,
910BBA160FB8BE98001E34EA /* common */,
);
name = dialogs;
sourceTree = "<group>";
};
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 = "<group>";
};
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 = "<group>";
};
910BBA160FB8BE98001E34EA /* common */ = {
isa = PBXGroup;
children = (
);
name = common;
sourceTree = "<group>";
};
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 = "<group>";
};
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;
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 MiB

After

Width:  |  Height:  |  Size: 4.8 MiB

View File

@@ -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) &&

View File

@@ -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(here){
if (where.y > 0)
ter = coord_to_ter(where.x,where.y - 1);
if ((where.y == 0) || (extend_road_terrain(ter))) {
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)){
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)) {
|| 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[0], terrain_screen_gworld, to_rect, 0, 0);
}else{
ter = coord_to_ter(where.x + 1,where.y);
if(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);
}
}
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)) {
|| 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);
}else{
ter = coord_to_ter(where.x,where.y + 2);
if(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)) {
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[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(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);
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);
}
}

View File

@@ -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();

View File

@@ -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)))