hope you don't mind me copying the list back in..
On Sat, 2 Feb 2002, Brian E. Ermovick wrote:
> hey - regarding this - could you possibly show me the code that allows you
> to do that? -- I've been trying to do the exact opposite - generate a .xpm
> file from my grid to view on www.
this should be really easy, if your wilderness is actually a grid. a
10x10, 3 color xpm file looks like this:
/* XPM */
static char * test[] = {
"10 10 4 1", // width, height, num colors, alpha channel (?)
" c None", // hex color value
". c #2453B7", // and glyph key pairs
"+ c #000000", //
"@ c #1EDB1E", //
"..........",
"..........",
".++++++...",
".+@@@@+...",
".+@@@@+....",
".++++++...",
"[EMAIL PROTECTED]",
"[EMAIL PROTECTED]",
"[EMAIL PROTECTED]",
"..........", // height lines of width chars
};
first, pick one color per wilderness sector type. you can use the gimp or
photoshop or whatever to give you the hex values. you can either just
write them to the top of a file, or, if you want output mapping to be
dynamic (if you have wilderness editing in OLC or something), you can just
include em in a header somewhere.
then, pick a glyph for each wilderness sector type, corresponding to your
entries in merc.h, ie:
const char *wilderness_glyphs[] =
{
"f", //field
"F", //forest
"H", //hills
"M", //mountain
"w", //water_swim
"W", //water_noswim
"A", //air
"D" //desert
};
etc. then just open an FH for your output file, walk your wilderness, and
output one char per room( wilderness_glyphs[wilderness_room->sector] ),
ending with a '",'.
how that happens depends on how your wilderness is set up.
the code i use to create my 512x512 world, after being mangled by indent,
looks like this:
extern char *terrain_xpm[]; // an xpm created in the gimp with a fixed
// pallette
struct world_type {
int posx;
int posy;
int posz; // z is virtualized for flying, ie, not read from the map
int sector;
int area; // which area is linked to pos x,y,z in the world
};
struct world_type world[512][512];
int create_world()
{
int x, y;
for (x = 0; x < 512; x++) {
for (y = 0; y < 512; y++) {
world[x][y].posx = x;
world[x][y].posy = y;
world[x][y].posz = 0;
world[x][y].area = 0;
switch (terrain_xpm[x][y]) {
case 'F':
world[x][y].sector = 2;
break;
case 'f':
world[x][y].sector = 3;
break;
case 'W':
world[x][y].sector = 4;
break;
case 'w':
world[x][y].sector = 5;
break;
case 'D':
world[x][y].sector = 6;
break;
case 'd':
world[x][y].sector = 7;
break;
case 'h':
world[x][y].sector = 8;
break;
case 'a':
world[x][y].sector = 9;
break;
case 'j':
world[x][y].sector = 1;
break;
case 'g':
world[x][y].sector = 1;
break;
default:
world[x][y].sector = 0;
break;
}
}
}
return 0;
}
pretty straightforward. don't be like me and use numbers for your sectors,
btw. ;)
hope that helps,
--
Blue Lang http://www.b-side.org/~blue
editor, b-side.org http://www.b-side.org
bug generation unit, alanthia mud alanthia.org 1536
integration engineer, veritas software http://www.veritas.com