From 87616cef0d3617cd349edb6641d32d71cdd96b22 Mon Sep 17 00:00:00 2001 From: j-p-e-g Date: Sat, 10 Jan 2009 15:53:13 +0000 Subject: Add yet another unique courtesy of castamir: Dissolution, sentient jelly. Update Credits. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/trunk@8382 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/CREDITS | 46 +++++++++++---------- crawl-ref/source/branch.cc | 2 +- crawl-ref/source/dat/database/monspeak.txt | 16 +++++++ crawl-ref/source/dat/descript/monsters.txt | 4 ++ crawl-ref/source/dungeon.cc | 22 +++++++--- crawl-ref/source/enum.h | 3 +- crawl-ref/source/mon-data.h | 38 +++++++++++------ crawl-ref/source/monstuff.cc | 15 +++++-- crawl-ref/source/rltiles/dc-corpse.txt | 3 +- crawl-ref/source/rltiles/dc-mon.txt | 1 + .../source/rltiles/dc-mon/unique/dissolution.png | Bin 0 -> 825 bytes crawl-ref/source/tilepick.cc | 2 + 12 files changed, 103 insertions(+), 49 deletions(-) create mode 100644 crawl-ref/source/rltiles/dc-mon/unique/dissolution.png diff --git a/crawl-ref/CREDITS b/crawl-ref/CREDITS index 013e7aaade..ff2a6d61e2 100644 --- a/crawl-ref/CREDITS +++ b/crawl-ref/CREDITS @@ -15,26 +15,28 @@ Enne Walker) would like to thank: We'd also like to thank members of the Dungeon Crawl community who have contributed to Dungeon Crawl Stone Soup: -Warwick Allison Benoit Hudson Stefan O'Rear -Juha Arpiainen Iainuki Yuuma Oohara -Roy Axenov Ilyak Erik Piper -Max Bane Mitsuhiro Itakura Lemuel Pitkin +Warwick Allison Benoit Hudson Yuuma Oohara +Juha Arpiainen Iainuki Erik Piper +Roy Axenov Ilyak Lemuel Pitkin +Max Bane Mitsuhiro Itakura Derek Ray Bill Beher Eino Keskitalo Remsleep -Alexander Beisig Jarmo Kielosto Derek Ray -Erik Inge Bolsø Kornel Kisielewicz David Rose -Peter Borgmann Vsevolod Kozlov Sebastian Salman -Terje Bø Ryan Kusnery Brett Scarborough -Aaron Curtis Jukka Kuusisto Darshan Shaligram -Denzi Maciej Lapinski Robert Shimmin -Rachel Elizabeth Dillon Jordan Lewis Sigurd -Mike Drinen Icy Lich Edgar Simo -Kieron Dunbar Jesse Luehrs Solf -Christopher Evenstar Markus Maier Johan Strandell -Ben Goetter Arien Malec Roman Sêk -Rob Grant Wille Mäntylä Marc H. Thoben -John Greenberg Shawn M Moore Matt Titus -GreyKnight Eva Myers Robert Vollmert -Shayne Halvorson Onia Ninara Steven Wheeler -Ciaran Hamilton Erkki Nurmi Jeremey Wilson -Chris Hamons nyra Yelve Yakut -R. Dan Henry Dylan O'Donnell Zooko +Alexander Beisig Jarmo Kielosto David Rose +Erik Inge Bolsø Kornel Kisielewicz Sebastian Salman +Peter Borgmann Vsevolod Kozlov Brett Scarborough +Adam Borowski Ryan Kusnery Darshan Shaligram +Terje Bø Jukka Kuusisto Robert Shimmin +Aaron Curtis Maciej Lapinski Sigurd +Denzi Jordan Lewis Edgar Simo +Rachel Elizabeth Dillon Icy Lich Solf +Mike Drinen Jesse Luehrs Johan Strandell +Kieron Dunbar Markus Maier Roman Sêk +Christopher Evenstar Arien Malec Marc H. Thoben +Ben Goetter Shawn M Moore Matt Titus +Rob Grant Eva Myers Robert Vollmert +John Greenberg Wille Mäntylä Steven Wheeler +GreyKnight Onia Ninara Jeremey Wilson +Shayne Halvorson Erkki Nurmi Yelve Yakut +Ciaran Hamilton nyra Zooko +Chris Hamons Dylan O'Donnell +R. Dan Henry Stefan O'Rear + diff --git a/crawl-ref/source/branch.cc b/crawl-ref/source/branch.cc index b62991a7e5..968be889a0 100644 --- a/crawl-ref/source/branch.cc +++ b/crawl-ref/source/branch.cc @@ -207,7 +207,7 @@ Branch branches[] = { DNGN_ENTER_SLIME_PITS, DNGN_RETURN_FROM_SLIME_PITS, "Slime Pits", "the Pits of Slime", "Slime", NULL, - false, false, GREEN, LIGHTGREEN, + false, true, GREEN, LIGHTGREEN, mons_pitslime_rare, mons_pitslime_level, NULL, NULL, NULL, NULL, 5, 'M', false, true }, diff --git a/crawl-ref/source/dat/database/monspeak.txt b/crawl-ref/source/dat/database/monspeak.txt index ae80083a7a..605cf66ef8 100644 --- a/crawl-ref/source/dat/database/monspeak.txt +++ b/crawl-ref/source/dat/database/monspeak.txt @@ -1281,6 +1281,22 @@ Boris unsummoned @The_monster@ says, "You can't fire me, I quit!" ## END Boris ## %%%% +# a sentient jelly +Dissolution + +@The_monster@ gurgles. + +@The_monster@ gurgles loudly. + +@The_monster@ emits a sizzling noise. + +@The_monster@ jiggles. + +@The_monster@ says, "Join with me for eternity!" + +@The_monster@ says, "Become one with my sorrow!" +## END Dissolution ## +%%%% # An adventurer hating competition Donald diff --git a/crawl-ref/source/dat/descript/monsters.txt b/crawl-ref/source/dat/descript/monsters.txt index 13f3ca7de5..bd1acdd71a 100644 --- a/crawl-ref/source/dat/descript/monsters.txt +++ b/crawl-ref/source/dat/descript/monsters.txt @@ -64,6 +64,10 @@ Dispater The lord of the Iron City of Dis. %%%% +Dissolution + +The Pits of Slime used to be a thriving civilization and Dissolution was the prophet of their god. When the city was overtaken by its current residents and their god became the Slime God, only Dissolution survived, becoming a tremendous mass of acidic ooze. He retained his intelligence but is filled with hate for anything that can hold a form. +%%%% Donald An adventurer like you, trying to find the Orb. diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index 166ea06a1f..e88859df94 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -3262,7 +3262,7 @@ static monster_type _choose_unique_by_depth(int step) MONS_HAROLD, MONS_NORBERT, MONS_JOZEF, MONS_AGNES, MONS_MAUD, MONS_LOUISE, MONS_FRANCIS, MONS_FRANCES, MONS_AZRAEL, MONS_EUSTACHIO, MONS_NERGALLE, - MONS_SONJA, MONS_NESSOS, -1); + MONS_SONJA, MONS_NESSOS, MONS_DISSOLUTION, -1); break; case 6: // depth > 19 default: @@ -3270,7 +3270,7 @@ static monster_type _choose_unique_by_depth(int step) MONS_RUPERT, MONS_WAYNE, MONS_DUANE, MONS_XTAHUA, MONS_NORRIS, MONS_FREDERICK, MONS_MARGERY, MONS_BORIS, MONS_ROXANNE, MONS_NERGALLE, - MONS_SAINT_ROKA, -1); + MONS_SAINT_ROKA, MONS_DISSOLUTION, -1); } return static_cast(ret); @@ -3278,6 +3278,15 @@ static monster_type _choose_unique_by_depth(int step) static monster_type _pick_unique(int lev) { + if (player_in_branch(BRANCH_SLIME_PITS)) + { + // Only allow Dissolution in the Slime Pits. + if (player_branch_depth() > 1 && one_chance_in(3)) + return MONS_DISSOLUTION; + + return MONS_PROGRAM_BUG; + } + // First, pick generic unique depending on depth. int which_unique = ((lev <= 3) ? _choose_unique_by_depth(0) : @@ -3328,19 +3337,20 @@ static int _place_uniques(int level_number, char level_type) while (one_chance_in(3)) { - monster_type which_unique = MONS_PROGRAM_BUG; // 30 in total + monster_type which_unique = MONS_PROGRAM_BUG; while (which_unique == MONS_PROGRAM_BUG || you.unique_creatures[which_unique]) { + which_unique = _pick_unique(level_number); + // Sometimes, we just quit if a unique is already placed. - if (which_unique != MONS_PROGRAM_BUG && !one_chance_in(3)) + if (which_unique == MONS_PROGRAM_BUG + || you.unique_creatures[which_unique] && !one_chance_in(3)) { which_unique = MONS_PROGRAM_BUG; break; } - - which_unique = _pick_unique(level_number); } // Usually, we'll have quit after a few tries. Make sure we have diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 0be4723c71..15b24ce7fe 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -2003,9 +2003,10 @@ enum monster_type // (int) menv[].type MONS_SAINT_ROKA, MONS_NESSOS, MONS_LERNAEAN_HYDRA, + MONS_DISSOLUTION, // 460 // Testing monsters - MONS_TEST_SPAWNER, // 460 + MONS_TEST_SPAWNER, NUM_MONSTERS, // used for polymorph RANDOM_MONSTER = 1000, // used to distinguish between a random monster and using program bugs for error trapping {dlb} diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index e419bb3fdd..cbb1d5a66c 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -1718,7 +1718,7 @@ static monsterentry mondata[] = { { MONS_BORING_BEETLE, 'B', BROWN, "boring beetle", - M_NO_FLAGS, + M_BURROWS, MR_VUL_POISON, 1300, 10, MONS_GIANT_BEETLE, MONS_BORING_BEETLE, MH_NATURAL, -3, { {AT_BITE, AF_PLAIN, 26}, AT_NO_ATK, AT_NO_ATK, AT_NO_ATK }, @@ -2281,18 +2281,6 @@ static monsterentry mondata[] = { HT_LAND, 14, DEFAULT_ENERGY, MONUSE_EATS_ITEMS, SIZE_LITTLE }, -{ - MONS_ROYAL_JELLY, 'J', YELLOW, "the royal jelly", - M_NO_SKELETON | M_SENSE_INVIS | M_SPECIAL_ABILITY | M_ACID_SPLASH - | M_NO_REGEN | M_UNIQUE, - MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, - 0, 20, MONS_JELLY, MONS_ROYAL_JELLY, MH_NATURAL, -7, - { {AT_HIT, AF_ACID, 50}, {AT_HIT, AF_ACID, 30}, AT_NO_ATK, AT_NO_ATK }, - { 21, 0, 0, 230 }, - 8, 4, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SILENT, I_PLANT, - HT_LAND, 16, DEFAULT_ENERGY, MONUSE_EATS_ITEMS, SIZE_SMALL -}, - // kobolds ('K') { MONS_KOBOLD, 'K', BROWN, "kobold", @@ -3981,6 +3969,30 @@ static monsterentry mondata[] = { HT_LAND, 10, DEFAULT_ENERGY, MONUSE_WEAPONS_ARMOUR, SIZE_SMALL }, +{ + MONS_ROYAL_JELLY, 'J', YELLOW, "the royal jelly", + M_NO_SKELETON | M_SENSE_INVIS | M_SPECIAL_ABILITY | M_ACID_SPLASH + | M_NO_REGEN | M_UNIQUE, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, + 0, 20, MONS_JELLY, MONS_ROYAL_JELLY, MH_NATURAL, -7, + { {AT_HIT, AF_ACID, 50}, {AT_HIT, AF_ACID, 30}, AT_NO_ATK, AT_NO_ATK }, + { 21, 0, 0, 230 }, + 8, 4, MST_NO_SPELLS, CE_CLEAN, Z_NOZOMBIE, S_SILENT, I_PLANT, + HT_LAND, 16, DEFAULT_ENERGY, MONUSE_EATS_ITEMS, SIZE_SMALL +}, + +{ + MONS_DISSOLUTION, 'J', LIGHTMAGENTA, "Dissolution", + M_UNIQUE | M_NO_SKELETON | M_SENSE_INVIS | M_ACID_SPLASH | M_BURROWS + | M_SPEAKS, + MR_RES_POISON | MR_RES_ASPHYX | mrd(MR_RES_ACID, 3), + 0, 11, MONS_JELLY, MONS_DISSOLUTION, MH_NATURAL, -7, + { {AT_HIT, AF_ACID, 50}, {AT_HIT, AF_ACID, 30}, AT_NO_ATK, AT_NO_ATK }, + { 12, 3, 5, 180 }, + 10, 1, MST_NO_SPELLS, CE_POISONOUS, Z_NOZOMBIE, S_SILENT, I_NORMAL, + HT_LAND, 8, DEFAULT_ENERGY, MONUSE_EATS_ITEMS, SIZE_LARGE +}, + { MONS_SONJA, 'K', RED, "Sonja", M_UNIQUE | M_WARM_BLOOD | M_SPEAKS | M_SPELLCASTER | M_ACTUAL_SPELLS diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index d1907b6b5e..6cfae15e46 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -4474,7 +4474,7 @@ static void _handle_movement(monsters *monster) } // some calculations - if (monster->type == MONS_BORING_BEETLE && monster->foe == MHITYOU) + if (mons_class_flag(monster->type, M_BURROWS) && monster->foe == MHITYOU) { // Boring beetles always move in a straight line in your direction. delta = you.pos() - monster->pos(); @@ -7783,7 +7783,7 @@ static bool _mon_can_move_to_pos(const monsters *monster, (curr_cloud_num == EMPTY_CLOUD) ? CLOUD_NONE : env.cloud[curr_cloud_num].type; - if (monster->type == MONS_BORING_BEETLE + if (mons_class_flag(monster->type, M_BURROWS) && (target_grid == DNGN_ROCK_WALL || target_grid == DNGN_CLEAR_ROCK_WALL)) { @@ -8180,7 +8180,7 @@ forget_it: // ------------------------------------------------------------------ // Take care of beetle burrowing. - if (monster->type == MONS_BORING_BEETLE) + if (mons_class_flag(monster->type, M_BURROWS)) { const dungeon_feature_type feat = grd(monster->pos() + mmov); if ((feat == DNGN_ROCK_WALL || feat == DNGN_CLEAR_ROCK_WALL) @@ -8190,7 +8190,13 @@ forget_it: set_terrain_changed(monster->pos() + mmov); if (!silenced(you.pos())) - mpr("You hear a grinding noise.", MSGCH_SOUND); + { + // Message depends on whether caused by boring beetle or + // acid (Dissolution). + mpr((monster->type == MONS_BORING_BEETLE) ? + "You hear a grinding noise." : + "You hear a sizzling sound.", MSGCH_SOUND); + } } } @@ -8472,6 +8478,7 @@ bool monster_descriptor(int which_class, unsigned char which_descriptor) case MONS_HYDRA: case MONS_KILLER_KLOWN: case MONS_LERNAEAN_HYDRA: + case MONS_DISSOLUTION: return (true); default: return (false); diff --git a/crawl-ref/source/rltiles/dc-corpse.txt b/crawl-ref/source/rltiles/dc-corpse.txt index ca3ce91079..881e54f122 100644 --- a/crawl-ref/source/rltiles/dc-corpse.txt +++ b/crawl-ref/source/rltiles/dc-corpse.txt @@ -138,14 +138,13 @@ goblin CORPSE_GOBLIN /* g */ hobgoblin CORPSE_HOBGOBLIN /* g */ %sdir dc-mon/animals +jackal CORPSE_JACKAL /* h */ hog CORPSE_HOG /* h */ hound CORPSE_HOUND /* h */ warg CORPSE_WARG /* h */ war_dog CORPSE_WAR_DOG /* h */ wolf CORPSE_WOLF /* h */ -jackal CORPSE_JACKAL /* j */ - %back dc-misc/blood_green bumblebee CORPSE_BUMBLEBEE /* k */ killer_bee CORPSE_KILLER_BEE /* k */ diff --git a/crawl-ref/source/rltiles/dc-mon.txt b/crawl-ref/source/rltiles/dc-mon.txt index 87b74c43ba..0b6e03a389 100644 --- a/crawl-ref/source/rltiles/dc-mon.txt +++ b/crawl-ref/source/rltiles/dc-mon.txt @@ -366,6 +366,7 @@ ice_beast MONS_ICE_BEAST /*'I'*/ ## Jellies ('J') %sdir dc-mon/unique royal_jelly MONS_ROYAL_JELLY +dissolution MONS_DISSOLUTION %sdir dc-mon ooze MONS_OOZE jelly MONS_JELLY diff --git a/crawl-ref/source/rltiles/dc-mon/unique/dissolution.png b/crawl-ref/source/rltiles/dc-mon/unique/dissolution.png new file mode 100644 index 0000000000..d4613d24ac Binary files /dev/null and b/crawl-ref/source/rltiles/dc-mon/unique/dissolution.png differ diff --git a/crawl-ref/source/tilepick.cc b/crawl-ref/source/tilepick.cc index 23aa5e9ab3..ddaac223fd 100644 --- a/crawl-ref/source/tilepick.cc +++ b/crawl-ref/source/tilepick.cc @@ -939,6 +939,8 @@ static int _tileidx_monster_base(const monsters *mon, bool detected) return TILEP_MONS_NESSOS; case MONS_LERNAEAN_HYDRA: return TILEP_MONS_LERNAEAN_HYDRA; + case MONS_DISSOLUTION: + return TILEP_MONS_DISSOLUTION; // human uniques ('@') case MONS_TERENCE: -- cgit v1.2.3-54-g00ecf