--- src/types.h.orig 2004-02-24 19:50:57.000000000 -0500 +++ src/types.h 2004-08-13 23:00:01.000000000 -0400 @@ -2198,6 +2198,7 @@ int d_side[4]; /* Number of sides */ int d_frequency[4]; /* Frequency of damage (1 is the minimum) */ int d_type[4]; /* Type of damage */ + u32b d_descr[4]; /* Damage description */ s16b t_idx[TOWN_DUNGEON]; /* The towns */ s16b t_level[TOWN_DUNGEON]; /* The towns levels */ --- src/dungeon.c.orig 2004-02-24 16:42:12.000000000 -0500 +++ src/dungeon.c 2004-08-13 23:00:00.000000000 -0400 @@ -1120,7 +1120,7 @@ } /* Apply damage */ - project( -100, 0, y, x, dam, f_ptr->d_type[i], + project( -104, 0, y, x, dam, f_ptr->d_type[i], PROJECT_KILL | PROJECT_HIDE); /* Hack -- notice death */ @@ -2578,7 +2578,7 @@ } /* Apply damage */ - project( -100, 0, j, k, dam, d_ptr->d_type[i], + project( -100 - i, 0, j, k, dam, d_ptr->d_type[i], PROJECT_KILL | PROJECT_ITEM | PROJECT_HIDE); } } --- src/spells1.c.orig 2004-02-24 16:42:11.000000000 -0500 +++ src/spells1.c 2004-08-13 23:00:06.000000000 -0400 @@ -4370,6 +4370,9 @@ /* Were the effects "irrelevant"? */ bool skipped = FALSE; + /* Is this a terrain or dungeon effect? */ + bool special_who = (who <= -100 && who >= -104); + /* Move setting */ int x1 = 0; @@ -4435,7 +4438,7 @@ /* Remember if the monster is within player's line of sight */ - seen = (m_ptr->ml && ((who != -101) && (who != -100))) ? TRUE : FALSE; + seen = (m_ptr->ml && !special_who) ? TRUE : FALSE; /* Reduce damage by distance */ dam = (dam + r) / (r + 1); @@ -7210,6 +7213,9 @@ /* Hack -- messages */ cptr act = NULL; + /* Is this a terrain or dungeon effect? */ + bool special_who = (who <= -100 && who >= -104); + /* Player is not here */ if ((x != p_ptr->px) || (y != p_ptr->py)) return (FALSE); @@ -7230,7 +7236,7 @@ } /* Effects done by the plane cannot bounce */ - if (p_ptr->reflect && !a_rad && !(randint(10) == 1) && ((who != -101) && (who != -100))) + if (p_ptr->reflect && !a_rad && !(randint(10) == 1) && !special_who) { int t_y, t_x; int max_attempts = 10; @@ -7287,12 +7293,14 @@ } /* Did the dungeon do it? */ - if (who == -100) + if (who <= -100 && who >= -103) { + u32b n = d_info[dungeon_type].d_descr[-100 - who]; sprintf(killer, "%s", - d_name + d_info[dungeon_type].name); + (n == 0 ? "ambient dungeon damage" : d_text + n)); } - if (who == -101) + /* Did the terrain do it? */ + if (who == -104) { sprintf(killer, "%s", f_name + f_info[cave[p_ptr->py][p_ptr->px].feat].name); @@ -8361,6 +8369,9 @@ /* Is the player blind? */ bool blind = (p_ptr->blind ? TRUE : FALSE); + /* Is this a terrain or dungeon effect? */ + bool special_who = (who <= -100 && who >= -104); + /* Number of grids in the "path" */ int path_n = 0; @@ -8390,7 +8401,7 @@ } /* Start at player */ - else if ((who <= 0) && ((who != -101) && (who != -100))) + else if ((who <= 0) && !special_who) { x1 = p_ptr->px; y1 = p_ptr->py; @@ -8447,7 +8458,7 @@ /* Calculate the projection path */ - if ((who == -101) || (who == -100)) + if (special_who) path_n = 0; else path_n = project_path(path_g, MAX_RANGE, y1, x1, y2, x2, flg); --- src/init1.c.orig 2004-02-24 19:50:57.000000000 -0500 +++ src/init1.c 2004-08-14 00:23:42.000000000 -0400 @@ -9588,6 +9588,7 @@ { int side, dice, freq, type; cptr tmp; + mcptr desc_p; /* Find the next empty blow slot (if any) */ for (i = 0; i < 4; i++) if ((!d_ptr->d_side[i]) && @@ -9612,6 +9613,9 @@ if (tmp == NULL) return (1); tmp++; } + desc_p = strchr(tmp, ':'); + if (desc_p != NULL) + *desc_p++ = '\0'; j = 0; @@ -9626,7 +9630,18 @@ if (d_info_dtypes[j].name == NULL) return (1); } else + { + int j; + d_ptr->d_type[i] = type; + desc_p = buf + 2;; + for (j = 0; j < 3; j++) + { + desc_p = strchr(desc_p, ':'); + if (desc_p != NULL) + desc_p++; + } + } freq *= 10; /* Save the values */ @@ -9634,6 +9649,25 @@ d_ptr->d_dice[i] = dice; d_ptr->d_frequency[i] = freq; + if (desc_p != NULL) + { + /* Hack -- Verify space */ + if (d_head->text_size + strlen(desc_p) + 8 > fake_text_size) return (7); + + /* Advance and Save the text index */ + d_ptr->d_descr[i] = ++d_head->text_size; + + /* Append chars to the name */ + strcpy(d_text + d_head->text_size, desc_p); + + /* Advance the index */ + d_head->text_size += strlen(desc_p); + } + else + { + d_ptr->d_descr[i] = 0; + } + /* Next... */ continue; } --- lib/edit/d_info.txt.orig 2004-02-24 16:42:11.000000000 -0500 +++ lib/edit/d_info.txt 2004-08-13 23:13:18.000000000 -0400 @@ -103,7 +103,7 @@ L:86:90:205:10:1:0 A:177:100:0:0:0:0:85:87 O:10:10:30:30 -E:2d10:10:FIRE +E:2d10:10:FIRE:the fires of Mount Doom F:CAVE | LAVA_RIVER | NO_RECALL | NO_STREAMERS F:FILL_METHOD_0 | NO_EASY_MOVE R:100:1 @@ -119,7 +119,7 @@ A:85:80:87:20:87:0:57:85 A:50:50:0 O:25:25:25:25 -E:10d10:3:NETHER +E:10d10:3:NETHER:choking nether F:EMPTY | FORGET | NO_BREATH | NO_EASY_MOVE | NO_SHAFT F:RANDOM_TOWNS | ADJUST_LEVEL_2 | NO_RECALL | NO_STREAMERS F:LAVA_RIVER | FINAL_GUARDIAN_1032 | FINAL_ARTIFACT_203 @@ -138,7 +138,7 @@ A:187:80:84:10:56:10:57:187 A:60:0:40 O:30:30:10:10 -E:1d1:1:ACID +E:1d1:1:ACID:acidic waters F:NO_STREAMERS F:FINAL_GUARDIAN_980 | FINAL_ARTIFACT_204 F:FILL_METHOD_3 | WATER_BREATH @@ -167,7 +167,7 @@ L:87:5:88:65:16:30 A:97:90:16:10:56:0:16:58 O:30:30:30:10 -E:4d4:20:POISON +E:4d4:20:POISON:the toxic vapors of Cirith Ungol F:FINAL_GUARDIAN_481 F:CIRCULAR_ROOMS F:FILL_METHOD_2 @@ -204,7 +204,7 @@ A:183:90:102:10:0:0:102:102 A:40:60:0 O:25:25:25:25 -E:20d6:100:DARK +E:20d6:100:DARK:the empty darkness of the Void F:EMPTY | FORGET | NO_BREATH | NO_EASY_MOVE | NO_RECALL_OUT | NO_RECALL | F:ADJUST_LEVEL_1_2 | ADJUST_LEVEL_1 | NO_STREAMERS | NO_SHAFT F:FILL_METHOD_2 @@ -236,7 +236,7 @@ L:88:85:84:15:1:0 A:56:75:87:25:56:0:57:58 O:30:30:30:2 -E:1d1:20:RAISE +E:1d1:20:RAISE:being raised from the dead (?) F:FINAL_GUARDIAN_804 | FINAL_ARTIFACT_91 F:FILL_METHOD_3 R:5:0 @@ -254,7 +254,7 @@ L:1:98:188:2:1:0 A:56:50:189:50:56:0:57:58 O:50:10:20:20 -E:6d2:6:CONFUSION +E:6d2:6:CONFUSION:terminal perplexity F:RANDOM_TOWNS | NO_STREAMERS F:FINAL_GUARDIAN_1033 | FINAL_ARTIFACT_160 F:FILL_METHOD_1 @@ -389,7 +389,7 @@ L:84:100:84:0:84:0 A:97:100:56:0:56:0:57:58 O:10:10:30:30 -E:1d1:20:ACID +E:1d1:20:ACID:acidic waters F:FINAL_GUARDIAN_517 | NO_RECALL F:FILL_METHOD_0 R:10:0 @@ -474,7 +474,7 @@ A:95:0:56:100:56:0:57:58 A:100:0:0 O:20:20:20:20 -E:1d4:15:COLD +E:1d4:15:COLD:terminal exposure to cold F:DOUBLE | WATER_RIVER | CAVERN | NO_STREAMERS F:FINAL_GUARDIAN_1034 | F:FILL_METHOD_2