diff --git a/src/mapper/map_modify.c b/src/mapper/map_modify.c index f5caf51e2..5bd2a8f4f 100644 --- a/src/mapper/map_modify.c +++ b/src/mapper/map_modify.c @@ -94,7 +94,7 @@ blockcoord(int x) static char newblock[BLOCKSIZE][BLOCKSIZE]; static int g_maxluxuries; -static void +void block_create(int x1, int y1, int size, char chaotisch, int special, char terrain) { int local_climate; @@ -103,9 +103,9 @@ block_create(int x1, int y1, int size, char chaotisch, int special, char terrain vset_init(&fringe); - x1 = blockcoord(x1); +/* x1 = blockcoord(x1); y1 = blockcoord(y1); - local_climate = climate(y1); +*/ local_climate = climate(y1); memset(newblock, T_OCEAN, sizeof newblock); x = BLOCKSIZE / 2; @@ -198,9 +198,9 @@ block_create(int x1, int y1, int size, char chaotisch, int special, char terrain for (x = 0; x != BLOCKSIZE; x++) { for (y = 0; y != BLOCKSIZE; y++) { const luxury_type * sale = (rand()%2)?p1:p2; - r = findregion(x1 + x, y1 + y); - if (r) continue; - r = new_region(x1 + x, y1 + y); + r = findregion(x1 + x - BLOCKSIZE/2, y1 + y - BLOCKSIZE/2); + if (r && r->terrain!=T_OCEAN) continue; + if (r==NULL) r = new_region(x1 + x - BLOCKSIZE/2, y1 + y - BLOCKSIZE/2); if (chaotisch) fset(r, RF_CHAOTIC); if (special == 1) { terraform(r, terrain); @@ -1302,7 +1302,8 @@ Create_Island(region *r, int * n, terrain_t t, int x, int y) { } void -create_island(region *r, int n, terrain_t t) { +create_island(region *r, int n, terrain_t t) +{ int sx=r->x, sy=r->y, i, x = 0, y = 0; direction_t d; boolean abbruch=false; diff --git a/src/mapper/mapper.c b/src/mapper/mapper.c index 8a8fa7273..72ebf9df6 100644 --- a/src/mapper/mapper.c +++ b/src/mapper/mapper.c @@ -747,6 +747,7 @@ movearound(int rx, int ry) { int hx = -1, hy = -1, ch, x, y, Rand, d, a, b, p, q, oldx=0, oldy=0; int oldrx=0, oldry=0, Hx=0, Hy=0; int sel; + static int editmode=0; char *selc; region *c, *r = NULL, *r2; tagregion *tag; @@ -788,11 +789,28 @@ movearound(int rx, int ry) { } else #endif { + int edit=0; ch = getch(); unmark(x, y, rx, ry); oldx=x; oldy=y; oldrx=rx; oldry=ry; - switch (ch) { + if (editmode) { + if (ch=='E') { + editmode=0; + edit=1; + } else { + region * r = findregion(rx, ry); + if (r) { + int terrai = 0; + while (terrai!=MAXTERRAINS && tolower(terrain[terrai].symbol)!=tolower(ch)) ++terrai; + if (terrai!=MAXTERRAINS) { + edit=1; + terraform(r, (terrain_t)terrai); + } + } + } + } + if (!edit) switch (ch) { case KEY_HELP: case '?': if (reglist) { @@ -1048,6 +1066,7 @@ movearound(int rx, int ry) { case 'I': a=map_input(0,0,0,"Wieviele Regionen?",0,500,0); if (a) { +/* block_create(rx, ry, a, 0, 0, T_GLACIER); */ create_island(r, a, (terrain_t)(rand()%(T_GLACIER)+1)); modified=1; } @@ -1138,10 +1157,9 @@ movearound(int rx, int ry) { } } break; - case 'E': - clipunit = 0; - clipregion = 0; - break; + case 'E': + editmode = !editmode; + break; case 'i': case 'r': showregion(r, 1); diff --git a/src/mapper/mapper.h b/src/mapper/mapper.h index a86c05c7b..f7f6715a1 100644 --- a/src/mapper/mapper.h +++ b/src/mapper/mapper.h @@ -121,6 +121,7 @@ typedef struct selection { struct selection * do_selection(struct selection * sel, const char * title, void (*perform)(struct selection *, void *), void * data); struct selection ** push_selection(struct selection ** p_sel, char * str, void * payload); void insert_selection(struct selection ** p_sel, struct selection * prev, char * str, void * payload); +void block_create(int x1, int y1, int size, char chaotisch, int special, char terrain); extern void read_newfactions(const char * filename); extern void read_orders(const char * filename);