diff --git a/src/common/gamecode/laws.c b/src/common/gamecode/laws.c index 6f9ac7aa1..874c696e4 100644 --- a/src/common/gamecode/laws.c +++ b/src/common/gamecode/laws.c @@ -683,7 +683,7 @@ growing_trees(region * r, const int current_season, const int last_weeks_season) if(current_season == SEASON_SUMMER || current_season == SEASON_AUTUMN) { double seedchance = 0.01F * RESOURCE_QUANTITY; - int elves = count_race(r,new_race[RC_ELF]); + int elves = count_race(r, new_race[RC_ELF]); a = a_find(r->attribs, &at_germs); if(a && last_weeks_season == SEASON_SPRING) { diff --git a/src/common/gamecode/randenc.c b/src/common/gamecode/randenc.c index ae477f1e1..8428b1907 100644 --- a/src/common/gamecode/randenc.c +++ b/src/common/gamecode/randenc.c @@ -799,7 +799,7 @@ move_iceberg(region *r) if (fval(rc->terrain, SEA_REGION)) { /* Eisberg treibt */ ship *sh, *shn; unit *u; - short x, y; + int x, y; for (u=r->units; u; u=u->next) freset(u->faction, FFL_SELECT); diff --git a/src/common/kernel/battle.c b/src/common/kernel/battle.c index 483f12196..d045c3f4d 100644 --- a/src/common/kernel/battle.c +++ b/src/common/kernel/battle.c @@ -734,16 +734,21 @@ CavalryBonus(const unit * u, troop enemy, int type) /* old rule, Eressea 1.0 compat */ return (type==BONUS_SKILL)?2:0; } else { - if (type==BONUS_DAMAGE) { - /* new rule, chargers in Eressea 1.1 */ - int skl = effskill(u, SK_RIDING); - /* only half against trolls */ - if (skl>0) { - int dmg = 1+rng_int() % skl; + /* new rule, chargers in Eressea 1.1 */ + int skl = effskill(u, SK_RIDING); + /* only half against trolls */ + if (skl>0) { + if (type==BONUS_DAMAGE) { + int dmg = MIN(skl, 8); if (enemy.fighter->unit->race==new_race[RC_TROLL]) { + dmg = dmg/4; + } else { dmg = dmg/2; } return dmg; + } else { + skl = skl/2; + return MIN(skl, 4); } } } diff --git a/src/common/kernel/eressea.c b/src/common/kernel/eressea.c index be3c23c9c..e1971acd4 100644 --- a/src/common/kernel/eressea.c +++ b/src/common/kernel/eressea.c @@ -91,6 +91,9 @@ #include #endif +int world_width = -1; +int world_height = -1; + /* exported variables */ region *regions; faction *factions; @@ -1149,15 +1152,15 @@ update_lighthouse(building * lh) if (lh->type==bt_lighthouse) { region * r = lh->region; - short d = (short)log10(lh->size) + 1; - short x; + int d = (int)log10(lh->size) + 1; + int x; if (lh->size>0) { r->flags |= RF_LIGHTHOUSE; } for (x=-d;x<=d;++x) { - short y; + int y; for (y=-d;y<=d;++y) { attrib * a; region * r2 = findregion(x+r->x, y+r->y); @@ -2928,9 +2931,12 @@ has_limited_skills (const struct unit * u) return false; } } + void attrib_init(void) { + world_width = get_param_int(global.parameters, "world.width", 0); + world_height = get_param_int(global.parameters, "world.height", 0); /* Alle speicherbaren Attribute müssen hier registriert werden */ at_register(&at_shiptrail); at_register(&at_familiar); diff --git a/src/common/kernel/eressea.h b/src/common/kernel/eressea.h index c489de11c..5ba79d0d4 100644 --- a/src/common/kernel/eressea.h +++ b/src/common/kernel/eressea.h @@ -115,6 +115,9 @@ extern const char *parameters[MAXPARAMS]; #define want(option) (1<faction, (short)tx, 0); - short y = rel_to_abs(0, u->faction, (short)ty, 1); + int x = rel_to_abs(0, u->faction, tx, 0); + int y = rel_to_abs(0, u->faction, ty, 1); region *rt = findregion(x,y); if (rt!=NULL) { diff --git a/src/common/kernel/plane.c b/src/common/kernel/plane.c index af126375f..856e70e05 100644 --- a/src/common/kernel/plane.c +++ b/src/common/kernel/plane.c @@ -72,7 +72,7 @@ getplanebyname(const char * name) } plane * -findplane(short x, short y) +findplane(int x, int y) { plane *pl; @@ -103,7 +103,7 @@ getplaneid(const region *r) return 0; } -static short +static int ursprung_x(const faction *f, const plane *pl, const region * rdefault) { ursprung *ur; @@ -124,7 +124,7 @@ ursprung_x(const faction *f, const plane *pl, const region * rdefault) return rdefault->x - plane_center_x(pl); } -static short +static int ursprung_y(const faction *f, const plane *pl, const region * rdefault) { ursprung *ur; @@ -145,7 +145,7 @@ ursprung_y(const faction *f, const plane *pl, const region * rdefault) return rdefault->y - plane_center_y(pl); } -short +int plane_center_x(const plane *pl) { if(pl == NULL) @@ -154,7 +154,7 @@ plane_center_x(const plane *pl) return(pl->minx + pl->maxx)/2; } -short +int plane_center_y(const plane *pl) { if(pl == NULL) @@ -163,14 +163,14 @@ plane_center_y(const plane *pl) return(pl->miny + pl->maxy)/2; } -short +int region_x(const region *r, const faction *f) { plane *pl = r->planep; return r->x - ursprung_x(f, pl, r) - plane_center_x(pl); } -short +int region_y(const region *r, const faction *f) { plane *pl = r->planep; @@ -178,7 +178,7 @@ region_y(const region *r, const faction *f) } void -set_ursprung(faction *f, int id, short x, short y) +set_ursprung(faction *f, int id, int x, int y) { ursprung *ur; assert(f!=NULL); @@ -199,7 +199,7 @@ set_ursprung(faction *f, int id, short x, short y) } plane * -create_new_plane(int id, const char *name, short minx, short maxx, short miny, short maxy, int flags) +create_new_plane(int id, const char *name, int minx, int maxx, int miny, int maxy, int flags) { plane *pl = getplanebyid(id); @@ -220,8 +220,8 @@ create_new_plane(int id, const char *name, short minx, short maxx, short miny, s } /* Umrechnung Relative-Absolute-Koordinaten */ -short -rel_to_abs(const struct plane *pl, const struct faction * f, short rel, unsigned char index) +int +rel_to_abs(const struct plane *pl, const struct faction * f, int rel, unsigned char index) { assert(index == 0 || index == 1); diff --git a/src/common/kernel/plane.h b/src/common/kernel/plane.h index 47e09e854..f931b3284 100644 --- a/src/common/kernel/plane.h +++ b/src/common/kernel/plane.h @@ -52,7 +52,7 @@ typedef struct plane { struct watcher * watchers; int id; char *name; - short minx, maxx, miny, maxy; + int minx, maxx, miny, maxy; unsigned int flags; struct attrib *attribs; } plane; @@ -60,18 +60,18 @@ typedef struct plane { extern struct plane *planes; struct plane *getplane(const struct region *r); -struct plane *findplane(short x, short y); +struct plane *findplane(int x, int y); void init_planes(void); int getplaneid(const struct region *r); struct plane * getplanebyid(int id); -short region_x(const struct region *r, const struct faction *f); -short region_y(const struct region *r, const struct faction *f); -short plane_center_x(const struct plane *pl); -short plane_center_y(const struct plane *pl); -void set_ursprung(struct faction *f, int id, short x, short y); -plane * create_new_plane(int id, const char *name, short minx, short maxx, short miny, short maxy, int flags); +int region_x(const struct region *r, const struct faction *f); +int region_y(const struct region *r, const struct faction *f); +int plane_center_x(const struct plane *pl); +int plane_center_y(const struct plane *pl); +void set_ursprung(struct faction *f, int id, int x, int y); +plane * create_new_plane(int id, const char *name, int minx, int maxx, int miny, int maxy, int flags); plane * getplanebyname(const char *); -extern short rel_to_abs(const struct plane *pl, const struct faction * f, short rel, unsigned char index); +extern int rel_to_abs(const struct plane *pl, const struct faction * f, int rel, unsigned char index); extern boolean is_watcher(const struct plane * p, const struct faction * f); extern int resolve_plane(variant data, void * addr); extern void write_plane_reference(const plane * p, struct storage * store); diff --git a/src/common/kernel/region.c b/src/common/kernel/region.c index 95d20796a..3935598e4 100644 --- a/src/common/kernel/region.c +++ b/src/common/kernel/region.c @@ -73,12 +73,12 @@ get_maxluxuries() } return maxluxuries; } -const short delta_x[MAXDIRECTIONS] = +const int delta_x[MAXDIRECTIONS] = { -1, 0, 1, 1, 0, -1 }; -const short delta_y[MAXDIRECTIONS] = +const int delta_y[MAXDIRECTIONS] = { 1, 1, 0, -1, -1, 0 }; @@ -433,8 +433,24 @@ static int hash_requests; static int hash_misses; #endif +void cnormalize(int * x, int * y) +{ + if (world_width && x) { + if (*x<0) { + *x = world_width - abs(*x) % world_width; + } + *x = *x % world_width; + } + if (world_height && y) { + if (*y<0) { + *y = world_height - abs(*y) % world_height; + } + *y = *y % world_height; + } +} + static region * -rfindhash(short x, short y) +rfindhash(int x, int y) { unsigned int rid = coor_hashkey(x, y); #if HASH_STATISTICS @@ -510,7 +526,7 @@ r_connect(const region * r, direction_t dir) } region * -findregion(short x, short y) +findregion(int x, int y) { return rfindhash(x, y); } @@ -840,7 +856,7 @@ static region *last; static unsigned int max_index = 0; region * -new_region(short x, short y, unsigned int uid) +new_region(int x, int y, unsigned int uid) { region *r = rfindhash(x, y); diff --git a/src/common/kernel/region.h b/src/common/kernel/region.h index da852fae7..8d7f8eed8 100644 --- a/src/common/kernel/region.h +++ b/src/common/kernel/region.h @@ -112,7 +112,7 @@ typedef struct region { which a faction has its units. See the implementations of firstregion and lastregion */ unsigned int uid; /* a unique id */ - short x, y; + int x, y; struct plane *planep; char *display; unsigned int flags; @@ -141,7 +141,7 @@ struct message_list * r_getmessages(const struct region * r, const struct factio struct message * r_addmessage(struct region * r, const struct faction * viewer, struct message * msg); typedef struct spec_direction { - short x, y; + int x, y; int duration; boolean active; char *desc; @@ -157,7 +157,7 @@ typedef struct { int distance(const struct region*, const struct region*); int koor_distance(int ax, int ay, int bx, int by) ; direction_t reldirection(const struct region * from, const struct region * to); -struct region * findregion(short x, short y); +struct region * findregion(int x, int y); struct region * findregionbyid(unsigned int uid); extern struct attrib_type at_direction; @@ -229,12 +229,12 @@ int r_demand(const struct region * r, const struct luxury_type * ltype); const char * write_regionname(const struct region * r, const struct faction * f, char * buffer, size_t size); -struct region * new_region(short x, short y, unsigned int uid); +struct region * new_region(int x, int y, unsigned int uid); void remove_region(region ** rlist, region * r); void terraform_region(struct region * r, const struct terrain_type * terrain); -extern const short delta_x[MAXDIRECTIONS]; -extern const short delta_y[MAXDIRECTIONS]; +extern const int delta_x[MAXDIRECTIONS]; +extern const int delta_y[MAXDIRECTIONS]; direction_t dir_invert(direction_t dir); int production(const struct region *r); diff --git a/src/common/kernel/save.c b/src/common/kernel/save.c index 165916329..8a72d542a 100644 --- a/src/common/kernel/save.c +++ b/src/common/kernel/save.c @@ -883,7 +883,7 @@ write_unit(struct storage * store, const unit * u) } static region * -readregion(struct storage * store, short x, short y) +readregion(struct storage * store, int x, int y) { region * r = findregion(x, y); const terrain_type * terrain; @@ -1210,8 +1210,8 @@ readfaction(struct storage * store) planes = store->r_int(store); while(--planes >= 0) { int id = store->r_int(store); - short ux = (short)store->r_int(store); - short uy = (short)store->r_int(store); + int ux = store->r_int(store); + int uy = store->r_int(store); set_ursprung(f, id, ux, uy); } f->newbies = 0; @@ -1386,10 +1386,10 @@ readgame(const char * filename, int mode, int backup) } pl->id = id; pl->name = store->r_str(store); - pl->minx = (short)store->r_int(store); - pl->maxx = (short)store->r_int(store); - pl->miny = (short)store->r_int(store); - pl->maxy = (short)store->r_int(store); + pl->minx = store->r_int(store); + pl->maxx = store->r_int(store); + pl->miny = store->r_int(store); + pl->maxy = store->r_int(store); pl->flags = store->r_int(store); /* read watchers */ @@ -1443,8 +1443,8 @@ readgame(const char * filename, int mode, int backup) log_info((1, " - Einzulesende Regionen: %d/%d\r", rmax, n)); while (--n >= 0) { unit **up; - short x = (short)store->r_int(store); - short y = (short)store->r_int(store); + int x = store->r_int(store); + int y = store->r_int(store); if ((n & 0x3FF) == 0) { /* das spart extrem Zeit */ log_info((2, " - Einzulesende Regionen: %d/%d * %d,%d \r", rmax, n, x, y)); diff --git a/src/common/kernel/teleport.c b/src/common/kernel/teleport.c index e62493d6b..a8262c813 100644 --- a/src/common/kernel/teleport.c +++ b/src/common/kernel/teleport.c @@ -45,8 +45,8 @@ #define TP_RADIUS 2 #define TP_DISTANCE 4 -static short -real2tp(short rk) { +static int +real2tp(int rk) { /* in C: * -4 / 5 = 0; * +4 / 5 = 0; @@ -66,7 +66,7 @@ region_list * astralregions(const region * r, boolean (*valid)(const region *)) { region_list * rlist = NULL; - short x, y; + int x, y; assert(is_astral(r)); if (!is_astral(r)) { @@ -99,7 +99,7 @@ r_standard_to_astral(const region *r) region * r_astral_to_standard(const region *r) { - short x, y; + int x, y; region *r2; assert(is_astral(r)); @@ -113,9 +113,9 @@ r_astral_to_standard(const region *r) } region_list * -all_in_range(const region *r, short n, boolean (*valid)(const region *)) +all_in_range(const region *r, int n, boolean (*valid)(const region *)) { - short x, y; + int x, y; region_list *rlist = NULL; if (r == NULL) return NULL; @@ -205,8 +205,8 @@ create_teleport_plane(void) region *ra = tpregion(r); if (ra==NULL) { - short x = TE_CENTER_X+real2tp(r->x); - short y = TE_CENTER_Y+real2tp(r->y); + int x = TE_CENTER_X+real2tp(r->x); + int y = TE_CENTER_Y+real2tp(r->y); plane * pl = findplane(x, y); if (aplane && pl==aplane) { diff --git a/src/common/kernel/teleport.h b/src/common/kernel/teleport.h index df7c51372..61a0cca49 100644 --- a/src/common/kernel/teleport.h +++ b/src/common/kernel/teleport.h @@ -21,7 +21,7 @@ extern "C" { struct region *r_standard_to_astral(const struct region *r); struct region *r_astral_to_standard(const struct region *); extern struct region_list *astralregions(const struct region * rastral, boolean (*valid)(const struct region *)); - extern struct region_list *all_in_range(const struct region *r, short n, boolean (*valid)(const struct region *)); + extern struct region_list *all_in_range(const struct region *r, int n, boolean (*valid)(const struct region *)); extern boolean inhabitable(const struct region * r); extern boolean is_astral(const struct region * r); extern struct plane * get_astralplane(void); diff --git a/src/common/kernel/types.h b/src/common/kernel/types.h index 506ff82aa..df27b21e9 100644 --- a/src/common/kernel/types.h +++ b/src/common/kernel/types.h @@ -74,7 +74,7 @@ struct weapon_type; typedef struct ursprung { struct ursprung *next; int id; - short x, y; + int x, y; } ursprung; /* ----------------- Befehle ----------------------------------- */ diff --git a/src/common/modules/arena.c b/src/common/modules/arena.c index fbf9e6d10..fc835bf35 100644 --- a/src/common/modules/arena.c +++ b/src/common/modules/arena.c @@ -355,9 +355,9 @@ guardian_faction(plane * pl, int id) #ifdef ARENA_CREATION static void -block_create(short x1, short y1, char terrain) +block_create(int x1, int y1, char terrain) { - short x, y; + int x, y; for (x=0;x!=BLOCKSIZE;++x) { for (y=0;y!=BLOCKSIZE;++y) { region * r = new_region(x1 + x, y1 + y, 0); @@ -464,7 +464,7 @@ init_volcano(void) void create_arena(void) { - short x; + int x; arena_id = hashstring("arena"); arena = getplanebyid(arena_id); if (arena!=NULL) return; @@ -477,7 +477,7 @@ create_arena(void) block_create(arena->minx, arena->miny, T_OCEAN); arena_center = findregion(plane_center_x(arena), plane_center_y(arena)); for (x=0;x!=BLOCKSIZE;++x) { - short y; + int y; for (y=0;y!=BLOCKSIZE;++y) { region * r = findregion(arena->minx+x, arena->miny+y); freset(r, RF_ENCOUNTER); diff --git a/src/common/modules/autoseed.c b/src/common/modules/autoseed.c index 783d3d8bf..29b7ca151 100644 --- a/src/common/modules/autoseed.c +++ b/src/common/modules/autoseed.c @@ -479,7 +479,7 @@ prepare_starting_region(region * r) int autoseed(newfaction ** players, int nsize, int max_agediff) { - short x = 0, y = 0; + int x = 0, y = 0; region * r = NULL; region_list * rlist = NULL; int rsize = 0, tsize = 0; @@ -712,7 +712,7 @@ autoseed(newfaction ** players, int nsize, int max_agediff) direction_t d; rbegin=&(*rbegin)->next; for (d=0;d!=MAXDIRECTIONS;++d) if (rconnect(r, d)==NULL) { - short i; + int i; for (i=1;i!=MAXFILLDIST;++i) { if (findregion(r->x + i*delta_x[d], r->y + i*delta_y[d])) break; @@ -881,8 +881,8 @@ smooth_island(region_list * island) r = rlist->data; runhash(r); runhash(rn[n]); - SWAP(short, r->x, rn[n]->x); - SWAP(short, r->y, rn[n]->y); + SWAP(int, r->x, rn[n]->x); + SWAP(int, r->y, rn[n]->y); rhash(r); rhash(rn[n]); rlist->data = r; @@ -901,6 +901,7 @@ starting_region(region * r, region * rn[]) unit * u; int n; + oceans_around(r, rn); freset(r, RF_MARK); for (n=0;n!=MAXDIRECTIONS;++n) { freset(rn[n], RF_MARK); @@ -913,7 +914,7 @@ starting_region(region * r, region * rn[]) } /* E3A island generation */ int -build_island_e3(short x, short y, int numfactions, int minsize) +build_island_e3(int x, int y, int numfactions, int minsize) { #define MIN_QUALITY 1000 int nfactions = 0; @@ -923,7 +924,9 @@ build_island_e3(short x, short y, int numfactions, int minsize) int nsize = 1; int q, maxq = INT_MIN, minq = INT_MAX; - terraform_region(r, random_terrain_e3(NODIRECTION)); + do { + terraform_region(r, random_terrain_e3(NODIRECTION)); + } while (!r->land); while (r) { fset(r, RF_MARK); @@ -963,7 +966,6 @@ build_island_e3(short x, short y, int numfactions, int minsize) get_neighbours(r, rn); q = region_quality(r, rn); if (q>=MIN_QUALITY*4/3 && nfactionsregion); int id = getid(); - short x = rel_to_abs(p, u->faction, (short)getint(), 0); - short y = rel_to_abs(p, u->faction, (short)getint(), 1); + int x = rel_to_abs(p, u->faction, getint(), 0); + int y = rel_to_abs(p, u->faction, getint(), 1); region * r = findregion(x, y); building * b = findbuilding(id); if (b==NULL || r==NULL || p!=rplane(b->region) || p!=rplane(r)) { @@ -208,8 +208,8 @@ gm_terraform(const tnode * tnext, void * data, struct order * ord) { unit * u = (unit*)data; const struct plane * p = rplane(u->region); - short x = rel_to_abs(p, u->faction, (short)getint(), 0); - short y = rel_to_abs(p, u->faction, (short)getint(), 1); + int x = rel_to_abs(p, u->faction, getint(), 0); + int y = rel_to_abs(p, u->faction, getint(), 1); const char * c = getstrtoken(); region * r = findregion(x, y); variant token; @@ -240,8 +240,8 @@ gm_teleport(const tnode * tnext, void * data, struct order * ord) unit * u = (unit*)data; const struct plane * p = rplane(u->region); unit * to = findunit(getid()); - short x = rel_to_abs(p, u->faction, (short)getint(), 0); - short y = rel_to_abs(p, u->faction, (short)getint(), 1); + int x = rel_to_abs(p, u->faction, getint(), 0); + int y = rel_to_abs(p, u->faction, getint(), 1); region * r = findregion(x, y); if (r==NULL || p!=rplane(r)) { @@ -334,8 +334,8 @@ gm_messageregion(const tnode * tnext, void * data, struct order * ord) { unit * u = (unit*)data; const struct plane * p = rplane(u->region); - short x = rel_to_abs(p, u->faction, (short)getint(), 0); - short y = rel_to_abs(p, u->faction, (short)getint(), 1); + int x = rel_to_abs(p, u->faction, getint(), 0); + int y = rel_to_abs(p, u->faction, getint(), 1); const char * msg = getstrtoken(); region * r = findregion(x, y); @@ -611,22 +611,22 @@ gmcommands(void) #define EXTENSION 10000 faction * -gm_addquest(const char * email, const char * name, short radius, unsigned int flags) +gm_addquest(const char * email, const char * name, int radius, unsigned int flags) { plane * p; watcher * w = calloc(sizeof(watcher), 1); region * center; boolean invalid = false; - short minx, miny, maxx, maxy, cx, cy; - short x; + int minx, miny, maxx, maxy, cx, cy; + int x; faction * f; /* GM playfield */ do { - minx = (short)((rng_int() % (2*EXTENSION)) - EXTENSION); - miny = (short)((rng_int() % (2*EXTENSION)) - EXTENSION); + minx = ((rng_int() % (2*EXTENSION)) - EXTENSION); + miny = ((rng_int() % (2*EXTENSION)) - EXTENSION); for (x=0;!invalid && x<=radius*2;++x) { - short y; + int y; for (y=0;!invalid && y<=radius*2;++y) { region * r = findregion(minx+x, miny+y); if (r) invalid = true; @@ -638,7 +638,7 @@ gm_addquest(const char * email, const char * name, short radius, unsigned int fl p = create_new_plane(rng_int(), name, minx, maxx, miny, maxy, flags); center = new_region(cx, cy, 0); for (x=0;x<=2*radius;++x) { - short y; + int y; for (y=0;y<=2*radius;++y) { region * r = findregion(minx+x, miny+y); if (!r) r = new_region(minx+x, miny+y, 0); @@ -723,20 +723,20 @@ gm_addfaction(const char * email, plane * p, region * r) } plane * -gm_addplane(short radius, unsigned int flags, const char * name) +gm_addplane(int radius, unsigned int flags, const char * name) { region * center; plane * p; boolean invalid = false; - short minx, miny, maxx, maxy, cx, cy; - short x; + int minx, miny, maxx, maxy, cx, cy; + int x; /* GM playfield */ do { - minx = (short)(rng_int() % (2*EXTENSION)) - EXTENSION; - miny = (short)(rng_int() % (2*EXTENSION)) - EXTENSION; + minx = (rng_int() % (2*EXTENSION)) - EXTENSION; + miny = (rng_int() % (2*EXTENSION)) - EXTENSION; for (x=0;!invalid && x<=radius*2;++x) { - short y; + int y; for (y=0;!invalid && y<=radius*2;++y) { region * r = findregion(minx+x, miny+y); if (r) invalid = true; @@ -748,7 +748,7 @@ gm_addplane(short radius, unsigned int flags, const char * name) p = create_new_plane(rng_int(), name, minx, maxx, miny, maxy, flags); center = new_region(cx, cy, 0); for (x=0;x<=2*radius;++x) { - short y; + int y; for (y=0;y<=2*radius;++y) { region * r = findregion(minx+x, miny+y); if (!r) r = new_region(minx+x, miny+y, 0); diff --git a/src/common/modules/gmcmd.h b/src/common/modules/gmcmd.h index ef65b11cd..8293a77ab 100644 --- a/src/common/modules/gmcmd.h +++ b/src/common/modules/gmcmd.h @@ -31,7 +31,7 @@ extern void gmcommands(void); /* execute commands */ extern struct faction * gm_addfaction(const char * email, struct plane * p, struct region * r); -extern struct plane * gm_addplane(short radius, unsigned int flags, const char * name); +extern struct plane * gm_addplane(int radius, unsigned int flags, const char * name); /* * doesn't belong in here: diff --git a/src/eressea/editing.c b/src/eressea/editing.c index e0d5dbab6..a287605e0 100644 --- a/src/eressea/editing.c +++ b/src/eressea/editing.c @@ -35,9 +35,9 @@ seed_players(const char * filename, boolean new_island) } void -make_block(short x, short y, short radius, const struct terrain_type * terrain) +make_block(int x, int y, int radius, const struct terrain_type * terrain) { - short cx, cy; + int cx, cy; region *r; if (terrain==NULL) return; @@ -55,7 +55,7 @@ make_block(short x, short y, short radius, const struct terrain_type * terrain) } void -make_island(short x, short y, int size) +make_island(int x, int y, int size) { /* region_list * island; */ } diff --git a/src/eressea/editing.h b/src/eressea/editing.h index 31475a26e..ba66488dc 100644 --- a/src/eressea/editing.h +++ b/src/eressea/editing.h @@ -11,8 +11,8 @@ #ifndef GM_EDITING #define GM_EDITING -extern void make_block(short x, short y, short radius, const struct terrain_type * terrain); -extern void make_island(short x, short y, int size); +extern void make_block(int x, int y, int radius, const struct terrain_type * terrain); +extern void make_island(int x, int y, int size); extern void seed_players(const char * filename, boolean new_island); #endif /* GM_EDITING */ diff --git a/src/eressea/gmtool.c b/src/eressea/gmtool.c index da8853ba5..a6aacb8c4 100644 --- a/src/eressea/gmtool.c +++ b/src/eressea/gmtool.c @@ -449,7 +449,7 @@ static void terraform_at(coordinate * c, const terrain_type *terrain) { if (terrain!=NULL) { - short x = (short)c->x, y = (short)c->y; + int x = c->x, y = c->y; region * r = findregion(x, y); if (r==NULL) r = new_region(x, y, 0); terraform_region(r, terrain); @@ -466,7 +466,7 @@ terraform_selection(selection * selected, const terrain_type *terrain) tag ** tp = &selected->tags[i]; while (*tp) { tag * t = *tp; - short x = (short)t->coord.x, y = (short)t->coord.y; + int x = t->coord.x, y = t->coord.y; region * r = findregion(x, y); if (r==NULL) r = new_region(x, y, 0); terraform_region(r, terrain); @@ -789,17 +789,17 @@ handlekey(state * st, int c) break; case 'B': /* - make_block((short)st->cursor.x, (short)st->cursor.y, 6, select_terrain(st, NULL)); + make_block(st->cursor.x, st->cursor.y, 6, select_terrain(st, NULL)); */ n = rng_int() % 8 + 8; - build_island_e3((short)st->cursor.x, (short)st->cursor.y, n, n*3); + build_island_e3(st->cursor.x, st->cursor.y, n, n*3); st->modified = 1; st->wnd_info->update |= 1; st->wnd_status->update |= 1; st->wnd_map->update |= 1; break; case 0x02: /* CTRL+b */ - make_block((short)st->cursor.x, (short)st->cursor.y, 6, newterrain(T_OCEAN)); + make_block(st->cursor.x, st->cursor.y, 6, newterrain(T_OCEAN)); st->modified = 1; st->wnd_info->update |= 1; st->wnd_status->update |= 1; @@ -1072,7 +1072,7 @@ update_view(view * vi) mr->coord.x = vi->topleft.x + i - j/2; mr->coord.y = vi->topleft.y + j; mr->coord.p = vi->plane; - mr->r = findregion((short)mr->coord.x, (short)mr->coord.y); + mr->r = findregion(mr->coord.x, mr->coord.y); } } } diff --git a/src/eressea/korrektur.c b/src/eressea/korrektur.c index 251a33c4e..1c01406bb 100644 --- a/src/eressea/korrektur.c +++ b/src/eressea/korrektur.c @@ -570,7 +570,7 @@ fix_road_borders(void) border * b; for (b=blist;b && fixes!=MAXDEL;b=b->next) { if (b->type == &bt_road) { - short x1, x2, y1, y2; + int x1, x2, y1, y2; region *r1, *r2; x1 = b->from->x; diff --git a/src/eressea/lua/faction.cpp b/src/eressea/lua/faction.cpp index 107f52b73..e41a499ec 100644 --- a/src/eressea/lua/faction.cpp +++ b/src/eressea/lua/faction.cpp @@ -229,22 +229,22 @@ faction_getorigin(const faction * f, int &x, int &y) y = 0; } } -short +int faction_getorigin_x(const faction * f) { return f->ursprung->x; } void -faction_setorigin_x(faction * f, short x) { +faction_setorigin_x(faction * f, int x) { f->ursprung->x = x; } -static short +static int faction_getorigin_y(const faction * f) { return f->ursprung->y; } static void -faction_setorigin_y(faction * f, short y) { +faction_setorigin_y(faction * f, int y) { f->ursprung->y = y; } diff --git a/src/eressea/lua/region.cpp b/src/eressea/lua/region.cpp index 84d603953..4b376a0a3 100644 --- a/src/eressea/lua/region.cpp +++ b/src/eressea/lua/region.cpp @@ -182,7 +182,7 @@ region_getroad(region * r, int dir) } static region * -region_terraform(short x, short y, const char * tname) +region_terraform(int x, int y, const char * tname) { const terrain_type * terrain = get_terrain(tname); region * r = findregion(x, y); @@ -238,7 +238,7 @@ plane_remove(int plane_id) } void -region_move(region * r, short x, short y) +region_move(region * r, int x, int y) { if (findregion(x,y)) { log_error(("Bei %d, %d gibt es schon eine Region.\n", x, y)); diff --git a/src/eressea/tolua/bind_gmtool.c b/src/eressea/tolua/bind_gmtool.c index 941ea6453..031f0dc03 100644 --- a/src/eressea/tolua/bind_gmtool.c +++ b/src/eressea/tolua/bind_gmtool.c @@ -3,8 +3,11 @@ #include "bind_gmtool.h" #include "../gmtool.h" #include "../gmtool_structs.h" +#include "../editing.h" #include +#include +#include #include #include @@ -77,7 +80,7 @@ tag_advance(tag_iterator * iter) } } if (iter->node) { - iter->r = findregion((short)iter->node->coord.x, (short)iter->node->coord.y); + iter->r = findregion(iter->node->coord.x, iter->node->coord.y); if (iter->r) { break; } @@ -93,7 +96,7 @@ tag_rewind(tag_iterator * iter) iter->node = iter->list->tags[0]; iter->hash = 0; if (iter->node) { - iter->r = findregion((short)iter->node->coord.x, (short)iter->node->coord.y); + iter->r = findregion(iter->node->coord.x, iter->node->coord.y); } if (!iter->r) { tag_advance(iter); @@ -149,6 +152,29 @@ tolua_state_close(lua_State* L) return 0; } +static int +tolua_make_island(lua_State * L) +{ + int x = (int)tolua_tonumber(L, 1, 0); + int y = (int)tolua_tonumber(L, 2, 0); + int n = (int)tolua_tonumber(L, 3, 0); + n = build_island_e3(x, y, n, n*3); + tolua_pushnumber(L, n); + return 1; +} + +static int +tolua_make_block(lua_State * L) +{ + int x = (int)tolua_tonumber(L, 1, 0); + int y = (int)tolua_tonumber(L, 2, 0); + int r = (int)tolua_tonumber(L, 3, 6); + const char * str = tolua_tostring(L, 4, "ocean"); + const struct terrain_type * ter = get_terrain(str); + make_block(x, y, r, ter); + return 0; +} + void tolua_gmtool_open(lua_State* L) { @@ -170,6 +196,9 @@ tolua_gmtool_open(lua_State* L) tolua_function(L, "highlight", tolua_highlight_region); tolua_function(L, "select", tolua_select_region); tolua_function(L, "select_at", tolua_select_coordinate); + + tolua_function(L, "make_block", &tolua_make_block); + tolua_function(L, "make_island", &tolua_make_island); } tolua_endmodule(L); } diff --git a/src/eressea/tolua/bind_region.c b/src/eressea/tolua/bind_region.c index 392d418fb..b6e00f4ba 100644 --- a/src/eressea/tolua/bind_region.c +++ b/src/eressea/tolua/bind_region.c @@ -217,8 +217,8 @@ tolua_region_get_objects(lua_State* L) static int tolua_region_create(lua_State* L) { - short x = (short)tolua_tonumber(L, 1, 0); - short y = (short)tolua_tonumber(L, 2, 0); + int x = (int)tolua_tonumber(L, 1, 0); + int y = (int)tolua_tonumber(L, 2, 0); const char * tname = tolua_tostring(L, 3, 0); const terrain_type * terrain = get_terrain(tname); diff --git a/src/eressea/tolua/bindings.c b/src/eressea/tolua/bindings.c index 890ed6d6b..5d68e280a 100644 --- a/src/eressea/tolua/bindings.c +++ b/src/eressea/tolua/bindings.c @@ -37,6 +37,7 @@ without prior permission by the authors of Eressea. #include #include +#include #include #include #include @@ -549,6 +550,14 @@ tolua_free_game(lua_State* L) return 0; } +static int +tolua_write_map(lua_State* L) +{ + const char * filename = tolua_tostring(L, 1, 0); + crwritemap(filename); + return 0; +} + static int tolua_write_game(lua_State* L) { @@ -591,8 +600,8 @@ tolua_get_faction(lua_State* L) static int tolua_get_region(lua_State* L) { - short x = (short)tolua_tonumber(L, 1, 0); - short y = (short)tolua_tonumber(L, 2, 0); + int x = (int)tolua_tonumber(L, 1, 0); + int y = (int)tolua_tonumber(L, 2, 0); region * r = findregion(x, y); tolua_pushusertype(L, r, "region"); @@ -891,6 +900,7 @@ tolua_eressea_open(lua_State* L) tolua_function(L, "read_game", tolua_read_game); tolua_function(L, "write_game", tolua_write_game); tolua_function(L, "free_game", tolua_free_game); + tolua_function(L, "write_map", &tolua_write_map); tolua_function(L, "read_orders", tolua_read_orders); tolua_function(L, "process_orders", tolua_process_orders); diff --git a/src/res/e2k9.xml b/src/res/e2k9.xml index 0184592cc..eb6bc1ab1 100644 --- a/src/res/e2k9.xml +++ b/src/res/e2k9.xml @@ -55,7 +55,7 @@ - +