From 0f9db848d3c9f162700b3226bd46e8b8d7020400 Mon Sep 17 00:00:00 2001 From: Rob Pearce Date: Thu, 5 Apr 2012 09:28:20 +0000 Subject: [PATCH] - [+] populate ant nest with objects (set rarity) - [+] when placing any vault with maintainedge, set "LOCKED" for all cells - [+] change all mapmaking code to honour LOCKED(not just digdungeon) - [+] room placement code - [+] cave - [+] dungeon - [+] forest - [+] sewer - [+] swamp - [+] fixed. BUG: TRAVEL to the swamp, walk up stairs... - [+] ERROR - stairs should link to existing map ('dungeon L7 (id #3)', depth 7), but it has no free stairs.--More-- - [+] walking _down_ is okay. - [+] was only checking to link entryob when we were going DOWN stairs. - [+] place fixed vaults _BEFORE_ creating habitats ??? - [+] this will only work after all creation routines honour "->locked" - [+] set locked on all fixed vault cells after making them. - [+] better code for removal of internal doors. - [+] bug! fleeing monsters taking no time! - [+] brainbat - [+] consume corpses to regain life? make this a normal death spell. - [+] f_consumesouls - [+] anything that dies in sight nearby heals her. - [+] "%s consumes the soul of the dying %s ?" - [+] give this to baba yaga - [+] loading bug with map flags: - [+] getting a flag with text = "flags" - [+] am i saving something else with a space in it ??? - [+] %s in fscanf doesn't handle spaces! - [+] in save.c, when I'm liable to get spaces in a string, replace %s with: - [+] sscanf("%[ a-xA-Z0-9+'*/-]") - [+] earthwyrm - [+] divine into two monsters if slashed - [+] appear in ant nests --- ai.c | 1 - attack.c | 4 +- data.c | 112 +++++++++++-- data/hiscores.db | Bin 15360 -> 15360 bytes defs.h | 7 + god.c | 2 +- lf.c | 144 ++++++++++++++++- lf.h | 1 + map.c | 405 ++++++++++++++++++++++++++++++----------------- map.h | 6 +- nexus.c | 2 +- save.c | 21 ++- spell.c | 16 +- text.c | 5 +- vault.c | 2 +- 15 files changed, 546 insertions(+), 182 deletions(-) diff --git a/ai.c b/ai.c index e83fe35..66874ed 100644 --- a/ai.c +++ b/ai.c @@ -586,7 +586,6 @@ int aigetspelltarget(lifeform_t *lf, objecttype_t *spelltype, lifeform_t *victim break; } } - // aim at an adjacent wall cell if (spellcell) *spellcell = poss[rnd(0,nposs-1)]; } else if (spelltype->id == OT_S_PLANTWALK) { diff --git a/attack.c b/attack.c index ab8fd7c..b63936e 100644 --- a/attack.c +++ b/attack.c @@ -1197,7 +1197,9 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag) addflag(victim->flags, F_BEHEADED, B_TRUE, NA, NA, NULL); addflag(victim->flags, F_MUTILATED, B_TRUE, NA, NA, NULL); } else if (strstr(buf, "bisect")) { - addflag(victim->flags, F_MUTILATED, B_TRUE, NA, NA, NULL); + if (victim->race->id != R_EARTHWYRM) { + addflag(victim->flags, F_MUTILATED, B_TRUE, NA, NA, NULL); + } } if ((isplayer(lf) || cansee(player, victim)) && !hasflag(victim->flags, F_NODEATHANNOUNCE)) { if (!hasflag(victim->flags, F_PHANTASM)) { diff --git a/data.c b/data.c index 1b04f7e..a8db2b3 100644 --- a/data.c +++ b/data.c @@ -1390,9 +1390,11 @@ void initobjects(void) { addocnoun(lastobjectclass, "furniture"); addflag(lastobjectclass->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastobjectclass->flags, F_RARITY, H_CAVE, RR_RARE, NA, NULL); // override for habitat + addflag(lastobjectclass->flags, F_RARITY, H_ANTNEST, RR_NEVER, NA, NULL); // override for habitat addoc(OC_TERRAIN, "Terrain", "Water, etc.", '\\', C_GREY, RR_NEVER); addoc(OC_TRAP, "Trap", "Fiendish traps.", '^', C_GREY, RR_RARE); addocnoun(lastobjectclass, "trap"); + addflag(lastobjectclass->flags, F_RARITY, H_ANTNEST, RR_NEVER, NA, NULL); // override for habitat addoc(OC_MONEY, "Money", "The standard currency of Nexus.", '$', C_GREY, RR_UNCOMMON); addoc(OC_SCROLL, "Scrolls", "An arcane roll of parchment, inscribed with many magical glyphs.", '?', C_GREY, RR_COMMON); addocnoun(lastobjectclass, "scroll"); @@ -2166,6 +2168,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 250, NA, NA, NULL); addot(OT_AMETHYST, "amethyst", "A purple gemstone.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2175,6 +2178,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL); addot(OT_DIAMOND, "diamond", "A sparkling diamond.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2184,6 +2188,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_VERYRARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_UNCOMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 1000, NA, NA, NULL); addot(OT_EMERALD, "emerald", "A deep green gem.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2193,6 +2198,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_VERYRARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_UNCOMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 650, NA, NA, NULL); addot(OT_OPAL, "opal", "An amorphous form of silica related to quartz.", MT_STONE, 0.1, OC_ROCK, SZ_TINY); @@ -2202,6 +2208,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 70, NA, NA, NULL); addot(OT_PEARL, "pearl", "A small pinkish-white gem.", MT_STONE, 0.1, OC_ROCK, SZ_TINY); @@ -2211,6 +2218,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 30, NA, NA, NULL); addot(OT_RUBY, "ruby", "A large red gem.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2220,6 +2228,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 110, NA, NA, NULL); addot(OT_SAPPHIRE, "sapphire", "A brilliant blue gem.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2229,6 +2238,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_VERYRARE, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_UNCOMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 850, NA, NA, NULL); addot(OT_TOPAZ, "topaz stone", "A dull blue gem.", MT_STONE, 0.2, OC_ROCK, SZ_TINY); @@ -2238,6 +2248,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, ""); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_STOMACH, 100, RR_COMMON, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 60, NA, NA, NULL); @@ -2424,15 +2435,19 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 40, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_COMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addot(OT_BANANA, "banana", "Ba-na-na-na-na-na na-na na-na-na.", MT_FOOD, 0.3, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_YELLOW, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 50, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_RARE, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, ""); addot(OT_BANANASKIN, "banana skin", "A slippery banana skin.", MT_FOOD, 0.1, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_YELLOW, '%', NA, NULL); - addflag(lastot->flags, F_RARITY, H_DUNGEON, 70, NA, NULL); + addflag(lastot->flags, F_RARITY, H_DUNGEON, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_FOREST, NA, NA, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_SLIPPERY, 15, NA, NA, NULL); addflag(lastot->flags, F_SLIPMOVE, 15, NA, NA, NULL); addot(OT_BERRY, "berry", "Juicy, brightly coloured berries.", MT_FOOD, 0.1, OC_FOOD, SZ_TINY); @@ -2441,11 +2456,13 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_NUMAPPEAR, 1, 15, NA, ""); addot(OT_BREADFRESH, "loaf of fresh bread", "A freshly-baked loaf of bread.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 200, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_FEELTEXT, NA, NA, NA, "some bread"); addot(OT_BREADGARLIC, "loaf of garlic bread", "A pungent loaf of garlic bread. Nauseates those around you and restores some health.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); @@ -2459,10 +2476,12 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 60, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_CHOCOLATE, "block of chocolate", "An entire block of chocolate.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 250, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_CLOVER, "four leafed clover", "A rare 4-leafed clover.", MT_FOOD, 0.1, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_GREEN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); @@ -2481,6 +2500,7 @@ void initobjects(void) { addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_FEELTEXT, NA, NA, NA, "some bread"); addot(OT_CACFRUIT, "cactus fruit", "The nutritous fruit from a cactus plant.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_RED, '%', NA, NULL); @@ -2491,12 +2511,14 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 85, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_GARLIC, "clove of garlic", "A very pungent clove of raw garlic. ", MT_FOOD, 0.1, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 5, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, ""); addot(OT_HOTDOG, "hot dog", "A chunk of meat sandwiched between two pieces of bread. Temporarily increases strength, and provides some healing.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_RED, '%', NA, NULL); @@ -2512,6 +2534,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_FREQUENT, NULL); addflag(lastot->flags, F_RARITY, H_SWAMP, 100, RR_FREQUENT, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, ""); addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, "mushroom"); addot(OT_MUSHROOMTOAD, "toadstool", "A poisonous variety of mushroom.", MT_FOOD, 0.2, OC_FOOD, SZ_TINY); @@ -2521,6 +2544,7 @@ void initobjects(void) { addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_FREQUENT, NULL); addflag(lastot->flags, F_RARITY, H_SWAMP, 100, RR_FREQUENT, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_PURIFIESTO, OT_MUSHROOMSHI, NA, NA, NULL); addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, ""); addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, "mushroom"); @@ -2531,6 +2555,7 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 22, NA, ""); addflag(lastot->flags, F_RARITY, H_FOREST, 90, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addflag(lastot->flags, F_NUMAPPEAR, 1, 12, NA, ""); addflag(lastot->flags, F_GROWSTO, OT_TREE, VT_OB, NA, NULL); addot(OT_ONION, "onion", "An edible bulb, known for its irritant effects on the eyes.", MT_FOOD, 0.2, OC_FOOD, SZ_TINY); @@ -2538,11 +2563,13 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 60, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_PASSIONFRUIT, "passionfruit", "A succulent passionfruit.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addflag(lastot->flags, F_GLYPH, C_MAGENTA, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, RR_UNCOMMON, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_POISONSAC, "venom sac", "A small sac of flesh, filled with potent venom.", MT_FLESH, 0.2, OC_FOOD, SZ_TINY); // weight normally comes from corpse type addflag(lastot->flags, F_GLYPH, C_BLUE, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 1, NA, ""); @@ -2551,6 +2578,7 @@ void initobjects(void) { addflag(lastot->flags, F_GLYPH, C_MAGENTA, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 250, NA, ""); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_VERYRARE, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_RARE, NULL); addot(OT_ROASTMEAT, "chunk of roast meat", "A chunk of flame-roasted flesh.", MT_FLESH, 1, OC_FOOD, SZ_TINY); // weight normally comes from corpse type addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); @@ -2582,6 +2610,7 @@ void initobjects(void) { addflag(lastot->flags, F_EDIBLE, B_TRUE, 30, NA, ""); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_FOREST, 100, NA, NULL); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, NA, NULL); // corpses addot(OT_CORPSE, "corpse", "xxx", MT_FLESH, 1, OC_CORPSE, SZ_TINY); addflag(lastot->flags, F_EDIBLE, B_TRUE, 1, NA, NULL); // will be overridden @@ -2593,6 +2622,7 @@ void initobjects(void) { addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_EDIBLE, B_TRUE, 25, NA, NULL); addflag(lastot->flags, F_ISMEAT, B_TRUE, 80, NA, ""); + addflag(lastot->flags, F_RARITY, H_ANTNEST, 100, RR_COMMON, NULL); addot(OT_FINGER, "severed finger", "The severed finger from some kind of creature.", MT_FLESH, 0.02, OC_CORPSE, SZ_TINY); addflag(lastot->flags, F_EDIBLE, B_TRUE, 1, NA, NULL); addflag(lastot->flags, F_ISMEAT, B_TRUE, 80, NA, ""); @@ -4043,6 +4073,7 @@ void initobjects(void) { addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "Creatures with higher intelligence will take more damage."); addflag(lastot->flags, F_SPELLSCHOOL, SS_MENTAL, NA, NA, NULL); addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); + addflag(lastot->flags, F_MAXPOWER, 1, NA, NA, NULL); addflag(lastot->flags, F_TARGETTEDSPELL, TT_MONSTER, NA, NA, NULL); addflag(lastot->flags, F_AICASTTOATTACK, ST_VICTIM, NA, NA, NULL); addflag(lastot->flags, F_LOSLOF, B_TRUE, LOF_DONTNEED, NA, NULL); @@ -8334,7 +8365,7 @@ void initrace(void) { addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_CHA, AT_LTAVERAGE, NA, NULL); - addflag(lastrace->flags, F_STAYINROOM, NA, B_TRUE, NA, NULL); // stay in our room, but we can chase targets out. + addflag(lastrace->flags, F_STAYINROOM, NA, B_MAYCHASE, NA, NULL); // stay in our room, but we can chase targets out. addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "50-100 gold coins"); addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "+2 halberd"); addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "great armour"); @@ -8392,7 +8423,10 @@ void initrace(void) { addflag(lastrace->flags, F_CANCAST, OT_S_ENTANGLE, NA, NA, "pw:10;"); addflag(lastrace->flags, F_CANCAST, OT_S_BLINK, NA, NA, "pw:6;"); addflag(lastrace->flags, F_SPELLCASTTEXT, OT_NONE, NA, B_APPENDYOU, "grins"); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_NONE, NA, B_APPENDYOU, "cackles"); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_NONE, NA, B_APPENDYOU, "gestures"); addflag(lastrace->flags, F_CASTCHANCE, 50, NA, NA, NULL); + addflag(lastrace->flags, F_CONSUMESOULS, 50, NA, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "cackles evilly^an evil cackling"); addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL); @@ -9805,7 +9839,8 @@ void initrace(void) { addflag(lastrace->flags, F_CASTTYPE, OT_S_CHARM, CT_GAZE, NA, NULL); //addflag(lastrace->flags, F_CANCAST, OT_S_SLEEP, 10, 10, NULL); addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_PLANTWALK, NA, NA, NULL); - addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_CHARM, NA, B_APPENDYOU, "smiles seductively and beckons"); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_CHARM, NA, B_APPENDYOU, "smiles seductively"); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_CHARM, NA, B_APPENDYOU, "blows a kiss"); addflag(lastrace->flags, F_WANTSOBFLAG, F_GEM, B_COVETS, NA, NULL); addflag(lastrace->flags, F_WANTS, OT_GOLD, B_COVETS, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout"); @@ -10351,7 +10386,7 @@ void initrace(void) { addflag(lastrace->flags, F_RARITY, H_DUNGEON, 87, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, 80, RR_UNCOMMON, NULL); - addflag(lastrace->flags, F_RARITY, H_ANTNEST, NA, RR_UNCOMMON, NULL); + addflag(lastrace->flags, F_RARITY, H_ANTNEST, NA, RR_RARE, NULL); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL); addflag(lastrace->flags, F_HITDICE, 4, NA, NA, NULL); addflag(lastrace->flags, F_TR, 4, NA, NA, NULL); @@ -10359,7 +10394,7 @@ void initrace(void) { addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL); - addflag(lastrace->flags, F_NUMAPPEAR, 2, 4, NA, NULL); + addflag(lastrace->flags, F_NUMAPPEAR, 1, 3, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LTAVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); @@ -10376,7 +10411,7 @@ void initrace(void) { addflag(lastrace->flags, F_CANCAST, OT_S_PASSWALL, NA, NA, "pw:5;"); addflag(lastrace->flags, F_CASTCHANCE, 50, NA, NA, NULL); addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_PASSWALL, NA, NA, NULL); - addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_DIG, NA, NA, "burrows down into the ground"); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_DIG, NA, NA, "burrows into a wall"); addflag(lastrace->flags, F_STABILITY, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout"); addflag(lastrace->flags, F_DODGES, B_TRUE, NA, NA, NULL); @@ -12820,6 +12855,35 @@ void initrace(void) { addflag(lastrace->flags, F_NOISETEXT, N_FLY, 1, NA, "^flapping wings"); addflag(lastrace->flags, F_NOFLEE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_EATCONFER, F_MUTABLE, B_TRUE, NA, "100"); + addrace(R_BATBRAIN, "brain bat", 6, 'B', C_RED, MT_FLESH, RC_ANIMAL, "Rare bats, said to exhibit strange psionic behaviour."); + setbodytype(lastrace, BT_BIRD); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL); + addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_RARE, NULL); + addflag(lastrace->flags, F_RARITY, H_FOREST, NA, RR_RARE, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_RANDOM, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_VERYFAST, NA, NA, ""); + addflag(lastrace->flags, F_NATURALFLIGHT, B_TRUE, NA, NA, ""); + addflag(lastrace->flags, F_CANWILL, OT_S_FLIGHT, NA, NA, NULL); + addflag(lastrace->flags, F_SPELLCASTTEXT, OT_S_FLIGHT, NA, NA, NULL); + addflag(lastrace->flags, F_HITDICE, 2, NA, NA, NULL); + addflag(lastrace->flags, F_TR, 4, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 2, NA, NULL); + addflag(lastrace->flags, F_EVASION, -10, NA, NA, NULL); + addflag(lastrace->flags, F_TREMORSENSE, 10, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_FLY, 1, NA, "^flapping wings"); + addflag(lastrace->flags, F_CANCAST, OT_S_STUN, 3, 3, "pw:3;"); + addflag(lastrace->flags, F_CANCAST, OT_S_DISORIENT, 3, 3, "pw:3;"); + addflag(lastrace->flags, F_CANCAST, OT_S_PSIBLAST, 3, 3, "pw:1;"); + addflag(lastrace->flags, F_ENHANCESMELL, 4, NA, NA, NULL); + addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_MORALE, 6, NA, NA, NULL); addrace(R_BATVAMPIRE, "vampire bat", 6, 'B', C_BLUE, MT_FLESH, RC_ANIMAL, "Bats which suck the blood of their victims."); setbodytype(lastrace, BT_BIRD); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_COMMON, NULL); @@ -13169,7 +13233,7 @@ void initrace(void) { addflag(lastrace->flags, F_DEAF, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_ENHANCESMELL, 4, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 6, NA, NA, NULL); - addrace(R_ANTS, "giant soldier ant", 25, 'a', C_RED, MT_FLESH, RC_ANIMAL, "The fighter of the giant ant family. Giant soldier ants are equipped with a powerful acidic stinger."); + addrace(R_ANTS, "giant soldier ant", 25, 'a', C_ORANGE, MT_FLESH, RC_ANIMAL, "The fighter of the giant ant family. Giant soldier ants are equipped with a powerful acidic stinger."); setbodytype(lastrace, BT_QUADRAPED); lastrace->baseid = R_ANT; addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14646,7 +14710,10 @@ void initrace(void) { addflag(lastrace->flags, F_CANINE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL); - addrace(R_WORMGLUT, "glutwyrm", 25, 'W', C_MAGENTA, MT_FLESH, RC_DRAGON, "Gigantic wyrms who have become so obese over the centuries that they have evolved to be wingless. They swallow their prey whole, slowly digesting their still living bodies."); + // end animals + + // dragons / wyrms + addrace(R_WORMGLUT, "glutwyrm", 2500, 'W', C_MAGENTA, MT_FLESH, RC_DRAGON, "Gigantic wyrms who have become so obese over the centuries that they have evolved to be wingless. They swallow their prey whole, slowly digesting their still living bodies."); addbodypart(lastrace, BP_HEAD, NULL); addbodypart(lastrace, BP_TAIL, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); @@ -14674,9 +14741,32 @@ void initrace(void) { addflag(lastrace->flags, F_FLEEONHPPCT, 20, NA, NA, ""); addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL); addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL); - // end animals - // dragons / wyrms + addrace(R_EARTHWYRM, "earthwyrm", 25, 'w', C_BROWN, MT_FLESH, RC_DRAGON, "Giant scaled wormlike creatures. Their large mouths are ringed with hundreds of sharp teeth."); + addbodypart(lastrace, BP_HEAD, NULL); + addbodypart(lastrace, BP_TAIL, NULL); + addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); + //addflag(lastrace->flags, F_HATESALL, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_IQ, IQ_ANIMAL, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_AGI, AT_LTAVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_WIS, AT_LOW, NA, NULL); + addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL); + addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); + addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); + addflag(lastrace->flags, F_NOTALK, B_TRUE, NA, NA, NULL); + addflag(lastrace->flags, F_ENHANCESMELL, 2, NA, NA, NULL); + addflag(lastrace->flags, F_TREMORSENSE, 4, NA, NA, NULL); + addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 8, NA, NULL); + addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, NULL); + addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL); + addflag(lastrace->flags, F_RARITY, H_ANTNEST, NA, RR_UNCOMMON, NULL); + addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL); + addflag(lastrace->flags, F_TR, 6, NA, NA, NULL); + addflag(lastrace->flags, F_NOISETEXT, N_WALK, SV_TALK, NA, "^slithering"); + addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL); + addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL); addrace(R_WYVERN, "wyvern", 150, 'w', C_MAGENTA, MT_FLESH, RC_DRAGON, "Wyverns are smaller, malformed wyrms which were born without their usual breath powers."); setbodytype(lastrace, BT_HUMANOID); @@ -17007,7 +17097,7 @@ void initskills(void) { addskilldesc(sk->id, PR_BEGINNER, "^gYou gain the 'wild strike' ability.^n", B_FALSE); addskilldesc(sk->id, PR_ADEPT, "^g+10% damage bonus.^n", B_FALSE); addskilldesc(sk->id, PR_ADEPT, "^g+2 accuracy.^n", B_FALSE); - addskilldesc(sk->id, PR_ADEPT, "^gYou can now alter your attack style to deal different damage types^n.", B_FALSE); + addskilldesc(sk->id, PR_ADEPT, "^gYou can now alter your attacks' damage types^n.", B_FALSE); addskilldesc(sk->id, PR_SKILLED, "^g+3 accuracy, +20% damage bonus.^n", B_FALSE); addskilldesc(sk->id, PR_SKILLED, "^gYou can now block certain attacks with this kind of weapon.^n", B_FALSE); addskilldesc(sk->id, PR_EXPERT, "^g+4 accuracy, +30% damage bonus.^n", B_FALSE); diff --git a/data/hiscores.db b/data/hiscores.db index 33596d6f58ea99d3859247b906672bc1ea5331bf..0f172885b051a52a923676e54e8af37c3833e7ad 100644 GIT binary patch delta 1723 zcmbu9e`s4(6vywo=jA0$XV;~z&1@{U(BfK!^v9gB*6~~wvL@n+bBb>6C8f=_bcy}3 z*(okB=|qts?e4TP=6oBx#C~ot|EErL&RjB{8Os1eW@7#aHKNNg~ zd~(kDe$PGcBzfkDIWktGJa8)TGx(>7xK_d}d;!v*-|}nCt7xe5LaZk5m+KxE+T@moG#wI+5KKR!ojnicX}dx%yU!S7I*_pdK6mWxM-bH z4$}j$6}sS8+5ro61Qx~zPV;9=rl``zH+a`+P)0N*%J+N6R5&OO^_5;McZUdZ0ijC7 zdEb~{E?uFz;XzVH&J$k7R>K5b$k&&*fhva3`O&5hK2eeM4H1pZ5Hh3qX^c)nADqrt zR&G~HAwU)htq3N--~-hxf2^v{n^E8lfio&qL<{=|>d-h=jkLfao5#FuVP3CtIeD^G z`c9zET#)`pG0$F;`IE@PFId+Xkyf=U<214jY3M-~UPpueCX(EM2O0sS*(-Gkq`nJj z*J7R3A?-OCe=B|8Aq(Fl^&d0%fqaEDt{}}(WLl$oIppHpqF3JI3M1%d1G}NHL*n%-zjj{PPvhWSk;?j3L#_UTZ*^EA; z5@U0s1UG$2>R!M&V|%*`^)ANtGqOP^=Gl4q72YLve<1ZK)EiHu-dZp7 z*N}y)f}6$pW;r&nKaq__(V%yr&|F3uA7R}xMLnF0YU0n_m{i^#Ovj^pTUmI|?pTW5 zn@%P9mG8seYuV9;xO5UvQ>_>jkBiehQ9t- zlI@E1BzuS1n&BOT>BmznzK_M&W9fcjP4w;@8gAslV9n$$s>kmoyNP&BD^iwEPqNOPGsb)m;AQ4ePOq7Bkg1-3DiqM~jwt`ydowz>egZIMW@SS_U z@7(XsjOEAjCu?Ez<+>MGGsWa8$6xRfzQTKW8)tADr*O(y>N$-bSu3Nf3z{NJ3-}xJ z7D^=$D(sUTGVvES$>^T(7e@Vfg3$K`bW)eEm-9TG@HK|Za2NiBWBe>O;{~aZh12{9 z?!_Lt|2&nuLfu%xV6YyB;W9ku%lR&Tj9=q_U?cY7gcGS~K~KCe;H57^mx4Fg0yfLoEYyI-RX&9S zPF2-@2y7Xz_c9(@{S_XdT(xk{eKO$xEXbsw!gMzIF$H`uKa>oVDxY-bD!$|I^e#FO z0nhR`%**aDb_d$Pb!U#lP3o!=)x)Z-nZnAdgIbh#vzS}!fa_Ei7E~7s1SF8Y5a(Bn}Bx=>3|ozA<%Mli~x#f@(`KEh*Bv zEo{T=PeqF!cLpR^yUP`aC!{v4p#Q?9G!a@GkPaPn@f>7aJf28vmL(~y)In1plxi#O zlxYkXRTFA9soPCa*|kP?wR{Q(=Iv+^Th&a)pl9`qAy2cRm;>F212W|S)=l&x;=%qSz!+%w)W|KvKpC04}dgBdj|`c%`@4ReEZ zvp7mpH#K3ZHoa16sWo;hvIx4EpG6q=@ZEeG7vdiLQ9j$>?2H5>Z$AebZy%zS?R)5H zTd(_fB;+Ml7b>xP{uXP*4lSKEOwp&0sAh6UTGfkUgGRzgC#BO?%19;;iHxS&qCc&v WLz+q9SS^jTC7jo>5}?DaFaHN