diff --git a/sys/unix/Makefile.dat b/sys/unix/Makefile.dat index 85d40ef53..a339fa307 100644 --- a/sys/unix/Makefile.dat +++ b/sys/unix/Makefile.dat @@ -27,10 +27,12 @@ all: $(VARDAT) spec_levs quest_levs x11tiles: ../util/tile2x11 ../win/share/monsters.txt ../win/share/objects.txt \ ../win/share/other.txt \ - ../win/share/monsters.txt + ../win/share/monsters.txt \ + ../win/share/decals.txt ../util/tile2x11 ../win/share/monsters.txt ../win/share/objects.txt \ ../win/share/other.txt \ - -grayscale ../win/share/monsters.txt + -grayscale ../win/share/monsters.txt \ + ../win/share/decals.txt beostiles: ../util/tile2beos ../win/share/monsters.txt \ ../win/share/objects.txt \ diff --git a/win/share/decals.txt b/win/share/decals.txt new file mode 100644 index 000000000..bc1094912 --- /dev/null +++ b/win/share/decals.txt @@ -0,0 +1,95 @@ +# decals.txt - definitions for 'decals' +# to merge over top of another tile +# +# Note: lines beginning with '# tile ' are not comments; other +# lines beginning with '#' are. +. = (71, 108, 108) +A = (0, 0, 0) +B = (0, 182, 255) +C = (255, 108, 0) +D = (255, 0, 0) +E = (0, 0, 255) +F = (0, 145, 0) +G = (108, 255, 0) +H = (255, 255, 0) +I = (255, 0, 255) +J = (145, 71, 0) +K = (204, 79, 0) +L = (255, 182, 145) +M = (237, 237, 237) +N = (255, 255, 255) +O = (215, 215, 215) +P = (108, 145, 182) +Q = (18, 18, 18) +R = (54, 54, 54) +S = (73, 73, 73) +T = (82, 82, 82) +U = (205,205,205) +V = (104, 104, 104) +W = (131, 131, 131) +X = (140, 140, 140) +Y = (149, 149, 149) +Z = (195, 195, 195) +0 = (100, 100, 100) +1 = (72, 108, 108) +2 = (0, 255, 0) +# tile 0 (decal_delimiter) +{ + ................ + AAAAAAAAAAAAAAAA + 2222222222222222 + EEEEEEEEEEEEEEEE + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ +} +# decals that can be overlayed +# onto an object tile +# +# tile 1 (decal_pet) +{ + ............D.D. + ...........DDDDD + ............DDD. + .............D.. + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ +} +# tile 2 (decal_pile) +{ + ..N............. + ..N............. + NNNNN........... + ..N............. + ..N.N........... + .....N.......... + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ + ................ +} diff --git a/win/share/tile2bmp.c b/win/share/tile2bmp.c index f25950c84..d58c4402d 100644 --- a/win/share/tile2bmp.c +++ b/win/share/tile2bmp.c @@ -114,12 +114,9 @@ static void build_bmptile(pixel(*) [TILE_X]); #define TILESETS 1 static const char *const relative_tiledir = "../win/share/"; /* monsters must be first because main uses it twice */ -const char *const tilefilenames[TILESETS][3] = { - {"monsters.txt", "objects.txt", "other.txt"}, -#if 0 - {"mon32.txt", "obj32.txt", "oth32.txt"}, - {"mon64.txt", "obj64.txt", "oth64.txt"}, -#endif +const char *const tilefilenames[TILESETS][5] = { + { "monsters.txt", "objects.txt", "other.txt", + "monsters.txt", "decals.txt" }, }; int tilecnt[SIZE(tilefilenames[0])]; @@ -191,8 +188,8 @@ main(int argc, char *argv[]) printf("Error creating tile file %s, aborting.\n", bmpname); exit(EXIT_FAILURE); } - while (pass < 4) { - filenum = pass % SIZE(tilefilenames[tilefileset]); + filenum = 0; + while (pass < SIZE(tilefilenames[tilefileset])) { if (!set_tilefile_path(relative_tiledir, tilefilenames[tilefileset][filenum], tilefile_full_path, sizeof tilefile_full_path)) { @@ -248,6 +245,7 @@ main(int argc, char *argv[]) } (void) fclose_text_file(); ++pass; + ++filenum; } fwrite(newbmp, bmpsize, 1, fp); fclose(fp); diff --git a/win/share/tilemap.c b/win/share/tilemap.c index 11b067471..0fbfcb045 100644 --- a/win/share/tilemap.c +++ b/win/share/tilemap.c @@ -101,9 +101,9 @@ const char *zap_texts[] = { "death", "lightning", "poison gas", "acid", }; -enum tilesrc { monsters_file, objects_file, other_file, generated }; +enum tilesrc { monsters_file, objects_file, other_file, generated, decals_file }; const char *tilesrc_texts[] = { - "monsters.txt", "objects.txt", "other.txt", "generated", + "monsters.txt", "objects.txt", "other.txt", "generated", "decals.txt" }; struct tilemap_t { @@ -129,7 +129,11 @@ struct tiles_used *tilelist[2500] = { 0 }; int TILE_stone = 0, /* will get set to correct tile later */ TILE_unexplored = 0, /* will get set to correct tile later */ TILE_nothing = 0, /* will get set to correct tile later */ - TILE_corr = 0; /* will get set to correct tile later; X11 uses it */ + TILE_corr = 0, /* will get set to correct tile later; X11 uses it */ + TILE_delimiter = 0, /* reference tile to indicate the two below exist */ + TILE_petmark = 0, /* tile to overlay on another tile to mark pet */ + TILE_pilemark = 0, /* tile to overlay on another tile to mark piletop */ + TILE_very_last_tile = 0; /* prototypes for functions in this file */ const char *tilename(int, const int, int); @@ -195,6 +199,7 @@ tilename(int set, const int file_entry, int gend UNUSED) { int i, k, cmap, condnum, tilenum; static char buf[BUFSZ]; + boolean decal_flag = FALSE; #if 0 int offset, gendnum; #endif @@ -203,6 +208,10 @@ tilename(int set, const int file_entry, int gend UNUSED) tilenum = 0; buf[0] = '\0'; + if (set == 3) + set = MON_GLYPH; + else if (set == 4) + decal_flag = TRUE; if (set == MON_GLYPH) { for (i = 0; i < NUMMONS; i++) { if (tilenum == file_entry) { @@ -530,9 +539,28 @@ tilename(int set, const int file_entry, int gend UNUSED) } } } /* OTH_GLYPH */ + if (decal_flag) { + tilenum = 0; /* set-relative number */ + for (i = 0; i < 3; i++) { + if (tilenum == file_entry) + switch(i) { + case 0: + return "decal_delimiter"; + break; + case 1: + return "decal_pet"; + break; + case 2: + return "decal_pile"; + break; + } + tilenum++; + } + } /* DECALS */ Sprintf(buf, "unknown %d %d", set, file_entry); - return buf; + return buf; } + #endif /* TILETEXT || OBTAIN_TILEMAP */ #ifndef TILETEXT @@ -1282,16 +1310,31 @@ init_tilemap(void) tilenum++; file_entry++; } + laststatuetile = tilenum - 1; +#endif /* STATUES_DONT_LOOK_LIKE_MONSTERS */ /* go beyond NUMMONS to cover off the invisible tile at the end of monsters.txt so that the tile mapping matches things in the .bmp file (for example) */ - file_entry = 0; #if defined(OBTAIN_TILEMAP) - add_tileref(tilenum, NO_GLYPH, monsters_file, file_entry, + file_entry = 0; + add_tileref(tilenum, NO_GLYPH, generated, file_entry, "invisible statue", ""); #endif - laststatuetile = tilenum - 1; -#endif /* STATUES_DONT_LOOK_LIKE_MONSTERS */ + tilenum++; + + file_entry = 0; + TILE_delimiter = tilenum++; /* Used to init nul_glyphinfo tileidx entry */ + TILE_petmark = tilenum++; + TILE_pilemark = tilenum++; +#if defined(OBTAIN_TILEMAP) + add_tileref(TILE_delimiter, NO_GLYPH, decals_file, file_entry++, + "decal_delimiter",""); + add_tileref(TILE_petmark, NO_GLYPH, decals_file, file_entry++, + "decal_petmark",""); + add_tileref(TILE_pilemark, NO_GLYPH, decals_file, file_entry++, + "decal_pilemark",""); +#endif + TILE_very_last_tile = tilenum; #if defined(OBTAIN_TILEMAP) for (i = 0; i < MAX_GLYPH; ++i) { @@ -1347,12 +1390,18 @@ main(int argc, char *argv[]) Fprintf(ofp, "\nenum special_tiles {\n"); Fprintf(ofp, " TILE_CORR = %d,\n", TILE_corr); Fprintf(ofp, " TILE_STONE = %d,\n", TILE_stone); - Fprintf(ofp, " TILE_UNEXPLORED = %d\n", TILE_unexplored); + Fprintf(ofp, " TILE_UNEXPLORED = %d,\n", TILE_unexplored); + Fprintf(ofp, " TILE_DELIMITER = %d,\n", TILE_delimiter); + Fprintf(ofp, " TILE_PETMARK = %d,\n", TILE_petmark); + Fprintf(ofp, " TILE_PILEMARK = %d\n", TILE_pilemark); Fprintf(ofp, "};\n"); - Fprintf(ofp, "\nint total_tiles_used = %d,\n", laststatuetile + 1); + Fprintf(ofp, "\nint total_tiles_used = %d,\n", TILE_very_last_tile); Fprintf(ofp, "%sTile_corr = TILE_CORR,\n", indent); /* X11 uses it */ - Fprintf(ofp, "%sTile_stone = TILE_STONE,\n", indent); - Fprintf(ofp, "%sTile_unexplored = TILE_UNEXPLORED,\n", indent); + Fprintf(ofp, "%sTile_stone = TILE_STONE,\n", indent); + Fprintf(ofp, "%sTile_unexplored = TILE_UNEXPLORED,\n", indent); + Fprintf(ofp, "%sTile_delimiter = TILE_DELIMITER,\n", indent); + Fprintf(ofp, "%sTile_petmark = TILE_PETMARK,\n", indent); + Fprintf(ofp, "%sTile_pilemark = TILE_PILEMARK,\n", indent); Fprintf(ofp, "%smaxmontile = %d,\n", indent, lastmontile); Fprintf(ofp, "%smaxobjtile = %d,\n", indent, lastobjtile); Fprintf(ofp, "%smaxothtile = %d;\n\n", indent, lastothtile); diff --git a/win/share/tiletext.c b/win/share/tiletext.c index 09cab5935..47e3bbebe 100644 --- a/win/share/tiletext.c +++ b/win/share/tiletext.c @@ -20,9 +20,9 @@ static FILE *tile_file; static int tile_set, tile_set_indx; static const char *const text_sets[] = { #if (TILE_X == 8) - "monthin.txt", "objthin.txt", "oththin.txt" + "monthin.txt", "objthin.txt", "oththin.txt", "monthin.txt", "decthin.txt" #else - "monsters.txt", "objects.txt", "other.txt" + "monsters.txt", "objects.txt", "other.txt", "monsters.txt", "decals.txt" #endif }; @@ -36,7 +36,7 @@ static boolean write_text_colormap(FILE *); static boolean read_txttile(FILE *, pixel (*)[TILE_X]); static void write_txttile(FILE *, pixel (*)[TILE_X]); -enum { MONSTER_SET, OBJECT_SET, OTHER_SET}; +enum { MONSTER_SET, OBJECT_SET, OTHER_SET, STATUE_SET, DECAL_SET }; /* Ugh. DICE doesn't like %[A-Z], so we have to spell it out... */ #define FORMAT_STRING \ @@ -189,7 +189,7 @@ read_txttile(FILE *txtfile, pixel (*pixels)[TILE_X]) gend[0] = '\0'; reslt = 0; if (get_next_line(txtfile, FALSE)) { - if (tile_set == MONSTER_SET) + if (tile_set == MONSTER_SET || tile_set == STATUE_SET) reslt = sscanf(inbuf, "# %255s %d (%255[^,],%255[^)])", ttype, &i, buf, gend); else @@ -202,7 +202,7 @@ read_txttile(FILE *txtfile, pixel (*pixels)[TILE_X]) ttype[sizeof ttype - 1] = '\0'; buf[sizeof buf - 1] = '\0'; - if (tile_set == MONSTER_SET && gend[0] == 'f') + if ((tile_set == MONSTER_SET || tile_set == STATUE_SET) && gend[0] == 'f') gidx = 1; ph = strcmp(ttype, "placeholder") == 0;