- [+] still give mp to warriors, justnot much

- [+] more rare potions - too many exp potions at the moment.
- [+] don't show dt resistances in io.c  if you're immune
- [+] more orcs
    - [+] make ork better
    - [+] grey orc
        - [+] invis
        - [+] confuse
    - [+] grand orc
    - [+] blood orc
    - [+] norc
        - [+] smitegood, darkness
- [+] more goblins
    - [+] froglin (blowguns, jump)
    - [+] dusur (sand goblin)
        - [+] throw salt to blind
        - [+] go through walls (passwall)
        - [+] tunnel downards (dig)
- [+] blowguns
- [+] more veryrare food to dilute 4leaf clover
    - [+] curadough - filling, fullheal, lower metab
    - [+] psitruffle - give temp xp/skill boost.
- [+] bug: two adjacent corpses, one catches on fire
    - [+] fire keeps going between them
    - [+] fix: fires don't burn out if there are adjacent fires with
          MORE hp - must be >, not >=. (they remain at 1hp)
    - [+] when fires spread, they get all their hp back.
    - [+] flaming objects don't expire if there is a fire object on top
          of them
- [+] random alignments on monsters not working!!!
    - [+] test with lizardman.
- [+] dispaly of skills not working......
    - [+] we get:
        - [+] At Novice level:   xxxxxxxxxxx
        - [+] : yyyyyyyyyyyyyyy
    - [+] should be:
        - [+] At Novice level:   xxxxxxxxxxx
        - [+]                            : yyyyyyyyyyyyyyy
    - [+] makedesc_skill ok.
    - [+] it's when we print it from getchoicestr!
    - [+] ie. wrapprint()
        - [+] if strlen(word) == 0, print a " "
        - [+] kind of words... but now i'm getting twice the amount of
              spaces
        - [+] make readuntil_real which remembers the amount of
              delimeters seen
            - [+] if number of delims is > 1, then print them all.
- [+] warn if you're good and attacking something helpless
This commit is contained in:
Rob Pearce 2012-02-13 19:55:55 +00:00
parent 3e5c718502
commit df442e96d1
8 changed files with 353 additions and 69 deletions

View File

@ -222,6 +222,7 @@ int attackcell(lifeform_t *lf, cell_t *c, int force) {
if ((isplayer(lf) || areallies(player, lf)) && (getalignment(lf) != AL_EVIL)) { if ((isplayer(lf) || areallies(player, lf)) && (getalignment(lf) != AL_EVIL)) {
killflagsofid(c->lf->flags, F_XPVAL); killflagsofid(c->lf->flags, F_XPVAL);
addflag(c->lf->flags, F_XPVAL, 0, NA, NA, NULL); addflag(c->lf->flags, F_XPVAL, 0, NA, NA, NULL);
real_warnabout(TEXT_WARN_NOXP_GOODVSPEACEFUL, PERMENANT, B_FALSE);
} }
} }

315
data.c
View File

@ -701,7 +701,7 @@ void initjobs(void) {
// also: has a hook instead of fists. // also: has a hook instead of fists.
addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL); addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL);
addjob(J_ROGUE, "Rogue", "Rogues (sometimes known as \"thieves\") are criminals who are skilled in the appropriation of valuable goods. They can hide in the shadows, stab unsuspecting victims in the back and foil the most cunning traps."); addjob(J_ROGUE, "Rogue", "Rogues (AKA \"thieves\") are criminals who are skilled in the appropriation of valuable goods. They can hide in the shadows, stab unsuspecting victims in the back and foil the most cunning traps.");
// stats // stats
addflag(lastjob->flags, F_JOBATTRMOD, A_STR, -10, NA, NULL); addflag(lastjob->flags, F_JOBATTRMOD, A_STR, -10, NA, NULL);
addflag(lastjob->flags, F_JOBATTRMOD, A_AGI, 15, NA, NULL); addflag(lastjob->flags, F_JOBATTRMOD, A_AGI, 15, NA, NULL);
@ -797,6 +797,7 @@ void initjobs(void) {
addflag(lastjob->flags, F_CANLEARN, SK_TWOWEAPON, NA, NA, NULL); addflag(lastjob->flags, F_CANLEARN, SK_TWOWEAPON, NA, NA, NULL);
addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, PR_ADEPT, NA, NULL); addflag(lastjob->flags, F_CANLEARN, SK_LORE_DRAGONS, PR_ADEPT, NA, NULL);
// abilities // abilities
addflag(lastjob->flags, F_MPDICE, 1, -1, NA, NULL);
addflag(lastjob->flags, F_MAXHPMOD, 120, NA, NA, NULL); addflag(lastjob->flags, F_MAXHPMOD, 120, NA, NA, NULL);
addflag(lastjob->flags, F_SELECTWEAPON, B_TRUE, NA, NA, NULL); addflag(lastjob->flags, F_SELECTWEAPON, B_TRUE, NA, NA, NULL);
addflag(lastjob->flags, F_LEVABIL, 3, OT_A_HEAVYBLOW, NA, NULL); addflag(lastjob->flags, F_LEVABIL, 3, OT_A_HEAVYBLOW, NA, NULL);
@ -2174,6 +2175,11 @@ void initobjects(void) {
addflag(lastot->flags, F_HOLDCONFER, F_EXTRALUCK, 1, NA, NULL); addflag(lastot->flags, F_HOLDCONFER, F_EXTRALUCK, 1, NA, NULL);
addflag(lastot->flags, F_VALUE, 300, NA, NA, ""); addflag(lastot->flags, F_VALUE, 300, NA, NA, "");
killflagsofid(lastot->flags, F_STACKABLE); killflagsofid(lastot->flags, F_STACKABLE);
addot(OT_CURADOUGH, "loaf of curadough", "This very rare form of bread can magically heal whoever eats it, as well as lowering their metabolism for a short period afterwards.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY);
addflag(lastot->flags, F_GLYPH, C_YELLOW, '%', 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_FEELTEXT, NA, NA, NA, "some bread");
addot(OT_BREADSTALE, "loaf of stale bread", "A small loaf of old, stale bread.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY); addot(OT_BREADSTALE, "loaf of stale bread", "A small loaf of old, stale bread.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY);
addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL); addflag(lastot->flags, F_GLYPH, C_BROWN, '%', NA, NULL);
addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, "");
@ -2238,6 +2244,10 @@ void initobjects(void) {
addflag(lastot->flags, F_GLYPH, C_BLUE, '%', NA, NULL); addflag(lastot->flags, F_GLYPH, C_BLUE, '%', NA, NULL);
addflag(lastot->flags, F_EDIBLE, B_TRUE, 1, NA, ""); addflag(lastot->flags, F_EDIBLE, B_TRUE, 1, NA, "");
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL);
addot(OT_PSITRUFFLE, "psitruffle", "Psitruffles are extremely rare forms of truffle which can unlock potentials within a living brain. Eating one will double all experience earned for a short period thereafter.", MT_FOOD, 0.5, OC_FOOD, SZ_TINY);
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);
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 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_GLYPH, C_BROWN, '%', NA, NULL);
addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, ""); addflag(lastot->flags, F_EDIBLE, B_TRUE, 100, NA, "");
@ -2290,7 +2300,7 @@ void initobjects(void) {
addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_VALUE, 45, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 45, NA, NA, NULL);
addot(OT_POT_JUICE, "potion of fruit juice", "Tasty (but not very fresh) fruit juice! Sates hunger and restores a little stamina.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_JUICE, "potion of fruit juice", "Tasty (but not very fresh) fruit juice! Sates hunger and restores a little stamina.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_VALUE, 10, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 10, NA, NA, NULL);
addot(OT_POT_CANINETRACKING, "potion of canine tracking", "Mimics the effects of a 'canine tracking' spell.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_CANINETRACKING, "potion of canine tracking", "Mimics the effects of a 'canine tracking' spell.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
@ -2299,7 +2309,7 @@ void initobjects(void) {
addflag(lastot->flags, F_VALUE, 50, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 50, NA, NA, NULL);
addot(OT_POT_HEALINGMIN, "potion of minor healing", "Restores 1-10 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_HEALINGMIN, "potion of minor healing", "Restores 1-10 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 30, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 30, NA, NA, NULL);
addot(OT_POT_WATER, "potion of water", "Plain, regular water.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_WATER, "potion of water", "Plain, regular water.", MT_GLASS, 1, OC_POTION, SZ_TINY);
@ -2309,25 +2319,25 @@ void initobjects(void) {
modflag(lastot->flags, F_HASHIDDENNAME, NA, NA, NA, "clear potion"); modflag(lastot->flags, F_HASHIDDENNAME, NA, NA, NA, "clear potion");
addflag(lastot->flags, F_VALUE, 5, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 5, NA, NA, NULL);
addot(OT_POT_HEALING, "potion of healing", "Restores 10-20 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_HEALING, "potion of healing", "Restores 10-20 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 90, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 90, NA, NA, NULL);
addot(OT_POT_HEALINGMAJ, "potion of major healing", "Restores 20-30 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_HEALINGMAJ, "potion of major healing", "Restores 20-30 health to whoever drinks it.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL);
addot(OT_POT_OIL, "potion of oil", "A bottle of cooking oil.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_OIL, "potion of oil", "A bottle of cooking oil.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puddle of oil"); addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puddle of oil");
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, NULL); addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, NULL);
addflag(lastot->flags, F_EXPLODEONDAM, DT_FIRE, NA, NA, "2d4"); addflag(lastot->flags, F_EXPLODEONDAM, DT_FIRE, NA, NA, "2d4");
addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL);
addot(OT_POT_COFFEE, "potion of coffee", "A caffeinated beverage prepared from coffee beans.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_COFFEE, "potion of coffee", "A caffeinated beverage prepared from coffee beans.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_VALUE, 10, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 10, NA, NA, NULL);
addot(OT_POT_RUM, "potion of rum", "Strong liqour which is sure to make you tipsy. This will make you unsteady and lower your accuracy, but also let you ignore pain, minor damage, and many mental attacks.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_RUM, "potion of rum", "Strong liqour which is sure to make you tipsy. This will make you unsteady and lower your accuracy, but also let you ignore pain, minor damage, and many mental attacks.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_FLAMMABLE, 1, NA, NA, "medium fire"); addflag(lastot->flags, F_FLAMMABLE, 1, NA, NA, "medium fire");
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, NULL); addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, NULL);
@ -2336,56 +2346,56 @@ void initobjects(void) {
addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL); addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL);
addot(OT_POT_RESTORATION, "potion of restoration", "Restores lost abilities to the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_RESTORATION, "potion of restoration", "Restores lost abilities to the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 170, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 170, NA, NA, NULL);
addot(OT_POT_SLEEP, "potion of sleep", "Puts the drinker into a deep sleep.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_SLEEP, "potion of sleep", "Puts the drinker into a deep sleep.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 80, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 80, NA, NA, NULL);
addot(OT_POT_SPEED, "potion of haste", "Temporarily increasees the drinker's speed.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_SPEED, "potion of haste", "Temporarily increasees the drinker's speed.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 150, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 150, NA, NA, NULL);
addot(OT_POT_LEVITATION, "potion of levitation", "Causes the drinker to float up in the air.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_LEVITATION, "potion of levitation", "Causes the drinker to float up in the air.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_VALUE, 150, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 150, NA, NA, NULL);
addot(OT_POT_MAGIC, "potion of magic", "Fully restores the drinker's magical energy.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_MAGIC, "potion of magic", "Fully restores the drinker's magical energy.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 60, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 60, NA, NA, NULL);
addot(OT_POT_ACROBATICS, "potion of acrobatics", "Allows the drinker to leap large distances.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_ACROBATICS, "potion of acrobatics", "Allows the drinker to leap large distances.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_VALUE, 45, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 45, NA, NA, NULL);
addot(OT_POT_INVIS, "potion of invisibility", "Temporarily renders the drinker invisible.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_INVIS, "potion of invisibility", "Temporarily renders the drinker invisible.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 70, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 70, NA, NA, NULL);
addot(OT_POT_POISON, "potion of poison", "Poisons the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_POISON, "potion of poison", "Poisons the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL); addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL);
addot(OT_POT_ACID, "flask of acid", "Causes massive internal burning if ingested.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_ACID, "flask of acid", "Causes massive internal burning if ingested.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 80, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 80, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puddle of acid"); addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "puddle of acid");
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_BADOBJECT, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL); addflag(lastot->flags, F_PURIFIESTO, OT_POT_WATER, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL);
addot(OT_POT_ELEMENTIMMUNE, "potion of elemental immunity", "Grants the imbiber temporary immunity to both fire and cold.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_ELEMENTIMMUNE, "potion of elemental immunity", "Grants the imbiber temporary immunity to both fire and cold.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_VALUE, 75, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 75, NA, NA, NULL);
addot(OT_POT_BLOOD, "potion of blood", "A small quantity of blood.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_BLOOD, "potion of blood", "A small quantity of blood.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "splash of blood"); addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "splash of blood");
addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 15, NA, NA, NULL);
addot(OT_POT_SANCTUARY, "potion of sanctuary", "Creates a temporary magical barrier abour the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_SANCTUARY, "potion of sanctuary", "Creates a temporary magical barrier abour the drinker.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 75, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 75, NA, NA, NULL);
@ -2393,39 +2403,39 @@ void initobjects(void) {
addflag(lastot->flags, F_RARITY, H_ALL, 70, RR_RARE, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 70, RR_RARE, NULL);
addflag(lastot->flags, F_VALUE, 140, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 140, NA, NA, NULL);
addot(OT_POT_EXPERIENCE, "potion of experience", "Instantly grants the imbiber the next experience level.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_EXPERIENCE, "potion of experience", "Instantly grants the imbiber the next experience level.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_VERYRARE, NULL);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, 40, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, 40, NA, NULL);
addflag(lastot->flags, F_VALUE, 410, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 410, NA, NA, NULL);
addot(OT_POT_BLOODC, "potion of cockatrice blood", "A small quantity of cockatrice blood.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_BLOODC, "potion of cockatrice blood", "A small quantity of cockatrice blood.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "splash of cockatrice blood"); addflag(lastot->flags, F_DIECONVERT, NA, NA, NA, "splash of cockatrice blood");
addflag(lastot->flags, F_VALUE, 35, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 35, NA, NA, NULL);
addot(OT_POT_COMPETENCE, "potion of competence", "Permemantly increases the drinker's base attribites (Strength, IQ, etc).", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_COMPETENCE, "potion of competence", "Permemantly increases the drinker's base attribites (Strength, IQ, etc).", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, RR_VERYRARE, NULL);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL);
addflag(lastot->flags, F_VALUE, 160, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 160, NA, NA, NULL);
addot(OT_POT_FURY, "potion of fury", "Causes the drinker to enter a state of berzerk rage.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_FURY, "potion of fury", "Causes the drinker to enter a state of berzerk rage.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL);
addflag(lastot->flags, F_VALUE, 70, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 70, NA, NA, NULL);
addot(OT_POT_GASEOUSFORM, "potion of gaseous form", "Turns the drinker into a cloud of gas. Only intended for emergencies, since it will cause you to drop all your items.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_GASEOUSFORM, "potion of gaseous form", "Turns the drinker into a cloud of gas. Only intended for emergencies, since it will cause you to drop all your items.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_VERYRARE, NULL);
addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIFLEEITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL);
addot(OT_POT_POLYMORPH, "potion of polymorph self", "Transmutes the drinker into another living race.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_POLYMORPH, "potion of polymorph self", "Transmutes the drinker into another living race.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 120, NA, NA, NULL);
addot(OT_POT_INVULN, "potion of invulnerability", "Grants the drinker temporary immunity to physical harm.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_INVULN, "potion of invulnerability", "Grants the drinker temporary immunity to physical harm.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, RR_VERYRARE, NA, NULL);
addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIBOOSTITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 200, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 200, NA, NA, NULL);
addot(OT_POT_AMBROSIA, "vial of ambrosia", "The nectar of the gods, said to completely restore the drinker's health.", MT_GLASS, 1, OC_POTION, SZ_TINY); addot(OT_POT_AMBROSIA, "vial of ambrosia", "The nectar of the gods, said to completely restore the drinker's health.", MT_GLASS, 1, OC_POTION, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 100, NA, NULL); addflag(lastot->flags, F_RARITY, H_ALL, 100, RR_RARE, NULL);
addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_AIHEALITEM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_VALUE, 220, NA, NA, NULL); addflag(lastot->flags, F_VALUE, 220, NA, NA, NULL);
@ -3702,6 +3712,7 @@ void initobjects(void) {
addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power determines how long the caster can wait before entering a wall."); addflag(lastot->flags, F_EXTRADESC, NA, NA, NA, "The spell's power determines how long the caster can wait before entering a wall.");
addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL); addflag(lastot->flags, F_SPELLSCHOOL, SS_MODIFICATION, NA, NA, NULL);
addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL); addflag(lastot->flags, F_SPELLSCHOOL, SS_TRANSLOCATION, NA, NA, NULL);
addflag(lastot->flags, F_AICASTTOFLEE, ST_SELF, NA, NA, NULL);
addflag(lastot->flags, F_ONGOING, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_ONGOING, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL); addflag(lastot->flags, F_SPELLLEVEL, 3, NA, NA, NULL);
addot(OT_S_ANIMATESTATUE, "animate statue", "Temporarily brings a statue to life, under control of the caster. Also stops stoning.", MT_NOTHING, 0, OC_SPELL, SZ_TINY); addot(OT_S_ANIMATESTATUE, "animate statue", "Temporarily brings a statue to life, under control of the caster. Also stops stoning.", MT_NOTHING, 0, OC_SPELL, SZ_TINY);
@ -7045,9 +7056,25 @@ void initobjects(void) {
addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL); addflag(lastot->flags, F_CANBLOCK, DT_SLASH, NA, NA, NULL);
// projectile weapons // projectile weapons
addot(OT_BLOWGUN, "blowgun", "A thin reed tube which employs the user's breath to propel darts at high speed.", MT_PLANT, 0.5, OC_WEAPON, SZ_SMALL);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_SWAMP, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 4, NA, NA, NULL);
addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL);
addflag(lastot->flags, F_RANGE, 5, NA, NA, NULL);
addflag(lastot->flags, F_AMMOOB, OT_DART, NA, NA, NULL);
addflag(lastot->flags, F_AMMOOB, OT_DARTNANO, NA, NA, NULL);
addflag(lastot->flags, F_AMMOOB, OT_DARTTRANQ, NA, NA, NULL);
addflag(lastot->flags, F_AMMOCAPACITY, 1, NA, NA, NULL);
addflag(lastot->flags, F_RELOADTURNS, 1, NA, NA, NULL);
addot(OT_BOW, "short bow", "A weapon which projects arrows via its elasticity.", MT_WOOD, 5, OC_WEAPON, SZ_MEDIUM); addot(OT_BOW, "short bow", "A weapon which projects arrows via its elasticity.", MT_WOOD, 5, OC_WEAPON, SZ_MEDIUM);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 6, NA, NA, NULL); addflag(lastot->flags, F_FIRESPEED, 6, NA, NA, NULL);
@ -7060,8 +7087,8 @@ void initobjects(void) {
addflag(lastot->flags, F_RODSHAPED, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_RODSHAPED, B_TRUE, NA, NA, NULL);
addot(OT_CROSSBOW, "crossbow", "A standard crossbow. Very powerful, but slow to reload and needs high strength to use.", MT_WOOD, 8, OC_WEAPON, SZ_MEDIUM); addot(OT_CROSSBOW, "crossbow", "A standard crossbow. Very powerful, but slow to reload and needs high strength to use.", MT_WOOD, 8, OC_WEAPON, SZ_MEDIUM);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 10, NA, NA, NULL); addflag(lastot->flags, F_FIRESPEED, 10, NA, NA, NULL);
@ -7073,8 +7100,8 @@ void initobjects(void) {
addflag(lastot->flags, F_ATTREQ, A_STR, 75, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 75, NA, NULL);
addot(OT_CROSSBOWHAND, "hand crossbow", "A small wrist-mounted crossbow. Less powerful and accurate than its full-sized sibling, the hand crossbow's primary strength is its ability to fire multiple shots before reloading.", MT_WOOD, 3, OC_WEAPON, SZ_SMALL); addot(OT_CROSSBOWHAND, "hand crossbow", "A small wrist-mounted crossbow. Less powerful and accurate than its full-sized sibling, the hand crossbow's primary strength is its ability to fire multiple shots before reloading.", MT_WOOD, 3, OC_WEAPON, SZ_SMALL);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 5, NA, NA, NULL); addflag(lastot->flags, F_FIRESPEED, 5, NA, NA, NULL);
@ -7085,8 +7112,8 @@ void initobjects(void) {
addflag(lastot->flags, F_RELOADTURNS, 1, NA, NA, NULL); addflag(lastot->flags, F_RELOADTURNS, 1, NA, NA, NULL);
addot(OT_LONGBOW, "longbow", "A very large (human-sized) bow, capable of firing arrows with great power.", MT_WOOD, 7, OC_WEAPON, SZ_MEDIUM); addot(OT_LONGBOW, "longbow", "A very large (human-sized) bow, capable of firing arrows with great power.", MT_WOOD, 7, OC_WEAPON, SZ_MEDIUM);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 75, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 8, NA, NA, NULL); addflag(lastot->flags, F_FIRESPEED, 8, NA, NA, NULL);
@ -7098,8 +7125,8 @@ void initobjects(void) {
addflag(lastot->flags, F_ATTREQ, A_STR, 65, NA, NULL); addflag(lastot->flags, F_ATTREQ, A_STR, 65, NA, NULL);
addot(OT_REVOLVER, "revolver", "Basic one-handed firearm.", MT_METAL, 1, OC_WEAPON, SZ_SMALL); addot(OT_REVOLVER, "revolver", "Basic one-handed firearm.", MT_METAL, 1, OC_WEAPON, SZ_SMALL);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 60, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_RARE, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
//addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL); //addflag(lastot->flags, F_DAMTYPE, DT_BASH, NA, NA, NULL);
@ -7113,8 +7140,8 @@ void initobjects(void) {
addflag(lastot->flags, F_RELOADTURNS, 2, NA, NA, NULL); addflag(lastot->flags, F_RELOADTURNS, 2, NA, NA, NULL);
addot(OT_SHOTGUN, "shotgun", "Powerful but short-ranged gun.", MT_METAL, 5, OC_WEAPON, SZ_MEDIUM); addot(OT_SHOTGUN, "shotgun", "Powerful but short-ranged gun.", MT_METAL, 5, OC_WEAPON, SZ_MEDIUM);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 60, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_RARE, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 60, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_RARE, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_TWOHANDED, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_TWOHANDED, B_TRUE, NA, NA, NULL);
@ -7126,8 +7153,8 @@ void initobjects(void) {
addflag(lastot->flags, F_RELOADTURNS, 3, NA, NA, NULL); addflag(lastot->flags, F_RELOADTURNS, 3, NA, NA, NULL);
addot(OT_SLING, "sling", "Stretchy piece of rubber for launching projectiles.", MT_RUBBER, 0.5, OC_WEAPON, SZ_SMALL); addot(OT_SLING, "sling", "Stretchy piece of rubber for launching projectiles.", MT_RUBBER, 0.5, OC_WEAPON, SZ_SMALL);
addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, NULL); addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, NULL); addflag(lastot->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL);
addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_FIREARM, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL); addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_FIRESPEED, 4, NA, NA, NULL); addflag(lastot->flags, F_FIRESPEED, 4, NA, NA, NULL);
@ -8623,6 +8650,7 @@ void initrace(void) {
addflag(lastrace->flags, F_CANINE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_CANINE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_FATALFOOD, OT_CHOCOLATE, NA, NA, NULL); addflag(lastrace->flags, F_FATALFOOD, OT_CHOCOLATE, NA, NA, NULL);
addrace(R_GOBLIN, "goblin", 25, 'g', C_BROWN, MT_FLESH, RC_HUMANOID, "Small humanoids with flat faces, broad noses, pointed ears, and small, sharp fangs."); addrace(R_GOBLIN, "goblin", 25, 'g', C_BROWN, MT_FLESH, RC_HUMANOID, "Small humanoids with flat faces, broad noses, pointed ears, and small, sharp fangs.");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
@ -8657,6 +8685,88 @@ void initrace(void) {
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 0, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 0, NA, NA, NULL);
addrace(R_GOBLINR, "froglin", 25, 'g', C_BLUE, MT_FLESH, RC_HUMANOID, "River goblins (more commonly known as 'froglins') are blueish goblins with sleek, leathery skin. They seems constantly wet, and can leap like a frog.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 87, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_CAVE, 100, RR_FREQUENT, NULL);
addflag(lastrace->flags, F_RARITY, H_FOREST, 80, RR_COMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_SWAMP, 100, RR_COMMON, NULL);
addflag(lastrace->flags, F_BREATHWATER, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "3d4+3");
addflag(lastrace->flags, F_ARMOURRATING, 5, NA, NA, NULL);
addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL);
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, 4, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_LTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "trident");
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "blowgun");
f = addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "1-3 tranquiliser darts");
addcondition(f, FC_NOCONDITION, 50);
addaltval(f, F_STARTOB, 100, NA, NA, "1-3 darts");
addflag(lastrace->flags, F_STARTOBCLASS, 40, OC_POTION, NA, NULL);
addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL);
addflag(lastrace->flags, F_WANTS, OT_GOLD, B_COVETS, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_A_JUMP, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_A_FEIGNDEATH, NA, NA, NULL);
addflag(lastrace->flags, F_AUTOCREATEOB, 0, NA, NA, "large puddle of water");
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_SEEINDARK, 2, NA, NA, NULL);
addflag(lastrace->flags, F_DODGES, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_PACKATTACK, 2, DT_SLASH, 3, NULL);
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_NOVICE, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_SWIMMING, PR_MASTER, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 3, NA, NA, NULL);
addrace(R_GOBLINS, "dusur", 25, 'g', C_RED, MT_FLESH, RC_HUMANOID, "The red-skinned Dusur (or 'sand goblins') are tribal goblins commonly found in deserts or other sandy regions. They possess an uncanny level of stealth, seemingly able to meld into the very earth itself.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
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_SIZE, SZ_MEDIUM, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "4d4+3");
addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL);
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_STARTATT, A_IQ, AT_LTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_STR, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_AGI, AT_GTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "manriki");
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "throwing net");
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "pinch of salt");
addflag(lastrace->flags, F_STARTOBCLASS, 40, OC_POTION, NA, NULL);
addflag(lastrace->flags, F_WANTSBETTERWEP, B_TRUE, B_COVETS, NA, NULL);
addflag(lastrace->flags, F_WANTS, OT_GOLD, B_COVETS, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_DIG, NA, NA, "pw:1;");
addflag(lastrace->flags, F_CANWILL, 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_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);
addflag(lastrace->flags, F_PACKATTACK, 2, DT_SLASH, 3, NULL);
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_NOVICE, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_STEALTH, PR_EXPERT, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_THROWING, PR_SKILLED, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 3, NA, NA, NULL);
addrace(R_GOBLINWAR, "goblin warrior", 30, 'g', C_BROWN, MT_FLESH, RC_HUMANOID, "Goblin Warriors are uncommon goblins with sufficient mental control to ungergo formal combat training (rather than just hack away mindlessly at their foes)."); addrace(R_GOBLINWAR, "goblin warrior", 30, 'g', C_BROWN, MT_FLESH, RC_HUMANOID, "Goblin Warriors are uncommon goblins with sufficient mental control to ungergo formal combat training (rather than just hack away mindlessly at their foes).");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
lastrace->baseid = R_GOBLIN; lastrace->baseid = R_GOBLIN;
@ -8799,7 +8909,6 @@ void initrace(void) {
addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL); addflag(lastrace->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_SMALL, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "3d4"); addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "3d4");
addflag(lastrace->flags, F_NUMAPPEAR, 2, 4, NA, NULL);
addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL); addflag(lastrace->flags, F_EVASION, 10, NA, NA, NULL);
addflag(lastrace->flags, F_BREATHWATER, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_BREATHWATER, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_AQUATIC, B_TRUE, NA, NA, NULL);
@ -8820,7 +8929,7 @@ void initrace(void) {
addflag(lastrace->flags, F_CANWILL, OT_S_GASEOUSFORM, NA, NA, "pw:3;"); addflag(lastrace->flags, F_CANWILL, OT_S_GASEOUSFORM, NA, NA, "pw:3;");
// gremlins also cause tech to fail around them. // gremlins also cause tech to fail around them.
addrace(R_HOBGOBLIN, "hobgoblin", 90, 'g', C_GREEN, MT_FLESH, RC_HUMANOID, "A larger, stronger, smarter and more menacing form of a goblin."); addrace(R_HOBGOBLIN, "hobgoblin", 90, 'g', C_YELLOW, MT_FLESH, RC_HUMANOID, "A larger, stronger, smarter and more menacing form of a goblin.");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL); addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
@ -8828,7 +8937,6 @@ void initrace(void) {
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_FOREST, 73, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, 73, RR_COMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_SWAMP, 73, RR_COMMON, NULL); addflag(lastrace->flags, F_RARITY, H_SWAMP, 73, RR_COMMON, NULL);
addflag(lastrace->flags, F_NUMAPPEAR, 1, 2, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "5d4+3"); addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "5d4+3");
addflag(lastrace->flags, F_ARMOURRATING, 8, NA, NA, NULL); addflag(lastrace->flags, F_ARMOURRATING, 8, NA, NA, NULL);
@ -8866,7 +8974,6 @@ void initrace(void) {
addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_CAVE, NA, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_FOREST, 60, NA, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, 60, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_SWAMP, 60, NA, NULL); addflag(lastrace->flags, F_RARITY, H_SWAMP, 60, NA, NULL);
addflag(lastrace->flags, F_NUMAPPEAR, 1, 2, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "7d4+3"); addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "7d4+3");
addflag(lastrace->flags, F_ARMOURRATING, 10, NA, NA, NULL); addflag(lastrace->flags, F_ARMOURRATING, 10, NA, NA, NULL);
@ -9085,7 +9192,6 @@ void initrace(void) {
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "1-70 gold coins"); addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "1-70 gold coins");
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MINIONS, 50, 1, 5, "orc"); addflag(lastrace->flags, F_MINIONS, 50, 1, 5, "orc");
addflag(lastrace->flags, F_MINIONS, 20, 1, 2, "orc warrior");
addflag(lastrace->flags, F_MORALE, 20, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 20, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_NOVICE, NA, NULL); addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_NOVICE, NA, NULL);
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
@ -9121,7 +9227,6 @@ void initrace(void) {
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 30, NA, NA, NULL);
addflag(lastrace->flags, F_MINIONS, 25, 1, 8, "orc"); addflag(lastrace->flags, F_MINIONS, 25, 1, 8, "orc");
addflag(lastrace->flags, F_MINIONS, 25, 1, 2, "orc warrior");
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_ADEPT, NA, NULL); addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_ADEPT, NA, NULL);
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_EATCONFER, F_ATTRMOD, A_STR, 5, "75"); addflag(lastrace->flags, F_EATCONFER, F_ATTRMOD, A_STR, 5, "75");
@ -9163,7 +9268,64 @@ void initrace(void) {
addflag(lastrace->flags, F_STARTJOB, 25, J_WARRIOR, NA, NULL); addflag(lastrace->flags, F_STARTJOB, 25, J_WARRIOR, NA, NULL);
addflag(lastrace->flags, F_STARTJOB, 25, J_GUARD, NA, NULL); addflag(lastrace->flags, F_STARTJOB, 25, J_GUARD, NA, NULL);
addrace(R_ORK, "ork", 90, 'o', C_BROWN, MT_FLESH, RC_HUMANOID, "Orcs who have become fascinated with technology tend to become shunned by their peers, and have taken the name 'Orks' for themselves."); addrace(R_ORCGREY, "grey orc", 90, 'o', C_GREY, MT_FLESH, RC_HUMANOID, "Grey orcs are mysterious cousins of the orc family. With tattoos covering their grey pallid skin, they command strange magical arts against their prey.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 80, RR_RARE, NULL);
addflag(lastrace->flags, F_RARITY, H_CAVE, 100, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_FOREST, 80, RR_RARE, NULL);
addflag(lastrace->flags, F_RARITY, H_SWAMP, 80, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "4d4+3");
addflag(lastrace->flags, F_EVASION, 5, NA, NA, NULL);
addflag(lastrace->flags, F_ARMOURRATING, 5, NA, NA, NULL);
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 4, NA, NULL);
f = addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "enchanter staff");
addcondition(f, FC_NOCONDITION, 50);
addaltval(f, F_STARTOBWEPSK, 50, NA, NA, "sorcerer staff");
addflag(lastrace->flags, F_STARTOBCLASS, 80, OC_POTION, NA, NULL);
addflag(lastrace->flags, F_STARTOBCLASS, 60, OC_POTION, NA, NULL);
addflag(lastrace->flags, F_STARTOBCLASS, 40, OC_POTION, NA, NULL);
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "robes");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout");
addflag(lastrace->flags, F_SEEINDARK, 4, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_DISORIENT, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_BAFFLE, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_INVISIBILITY, 10, 10, "pw:1;");
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_BEGINNER, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 13, NA, NA, NULL);
addrace(R_ORCN, "norc", 90, 'o', C_BLUE, MT_FLESH, RC_HUMANOID, "While all orcs prefer the darkness, night orcs (or 'norcs') can actually _create_ it, spewing darkness from their bodies and blotting out all that is good and holy.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 80, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_CAVE, 100, RR_COMMON, NULL);
addflag(lastrace->flags, F_RARITY, H_SWAMP, 80, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "4d4+3");
addflag(lastrace->flags, F_EVASION, 5, NA, NA, NULL);
addflag(lastrace->flags, F_ARMOURRATING, 5, NA, NA, NULL);
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_GTAVERAGE, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 6, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout");
addflag(lastrace->flags, F_SEEINDARK, UNLIMITED, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_SMITEGOOD, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_S_DARKNESS, NA, NA, "pw:8;");
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_BEGINNER, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 13, NA, NA, NULL);
addrace(R_ORK, "ork", 90, 'o', C_GREEN, MT_FLESH, RC_HUMANOID, "Orcs who have become fascinated with technology tend to become shunned by their peers, and have taken the name 'Orks' for themselves.");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "orc corpse"); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "orc corpse");
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
@ -9171,10 +9333,10 @@ void initrace(void) {
addflag(lastrace->flags, F_RARITY, H_DUNGEON, 81, NA, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, 81, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_CAVE, 81, NA, NULL); addflag(lastrace->flags, F_RARITY, H_CAVE, 81, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_FOREST, 81, NA, NULL); addflag(lastrace->flags, F_RARITY, H_FOREST, 81, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "4d4+3"); addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "5d4+3");
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 4, NA, NULL); addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTOBDT, 100, DT_SLASH, NA, NULL); addflag(lastrace->flags, F_STARTOBDT, 100, DT_SLASH, NA, NULL);
addflag(lastrace->flags, F_STARTOBDT, 30, DT_BASH, NA, NULL); addflag(lastrace->flags, F_STARTOBDT, 30, DT_BASH, NA, NULL);
@ -9195,6 +9357,52 @@ void initrace(void) {
addflag(lastrace->flags, F_DIURNAL, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_DIURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 5, NA, NA, NULL); addflag(lastrace->flags, F_MORALE, 5, NA, NA, NULL);
addrace(R_ORCB, "borc", 90, 'o', C_RED, MT_FLESH, RC_HUMANOID, "Blood orcs (or 'borcs') are larger and more muscled than standard orcs. When they enter a state of blood rage, they are feared even by their own kind.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_ALL, 80, RR_RARE, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "6d4+3");
addflag(lastrace->flags, F_EVASION, 5, NA, NA, NULL);
addflag(lastrace->flags, F_ARMOURRATING, 5, NA, NA, NULL);
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
addflag(lastrace->flags, F_STARTATT, A_STR, AT_HIGH, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout");
addflag(lastrace->flags, F_SEEINDARK, 5, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_A_RAGE, NA, NA, NULL);
addflag(lastrace->flags, F_LOWHPABIL, OT_A_RAGE, NA, NA, NULL);
addflag(lastrace->flags, F_SPELLCASTTEXT, OT_A_RAGE, NA, NA, "rakes its claws down its chest");
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_ADEPT, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 16, NA, NA, NULL);
addrace(R_ORCGRAND, "gnorc", 120, 'o', C_MAGENTA, MT_FLESH, RC_HUMANOID, "Even more powerful than blood orcs, grand orcs (or 'gnorcs') are both extremely rare and extremely powerful.");
setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_ALIGNMENT, AL_EVIL, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_ALL, 80, RR_VERYRARE, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "7d4+3");
addflag(lastrace->flags, F_EVASION, 5, NA, NA, NULL);
addflag(lastrace->flags, F_ARMOURRATING, 8, NA, NA, NULL);
addflag(lastrace->flags, F_MOVESPEED, SP_NORMAL, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
addflag(lastrace->flags, F_STARTATT, A_STR, AT_EXHIGH, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 8, NA, NULL);
addflag(lastrace->flags, F_MAXATTACKS, 2, 2, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 3, NA, "shouts^a shout");
addflag(lastrace->flags, F_SEEINDARK, 7, NA, NA, NULL);
addflag(lastrace->flags, F_HUMANOID, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_STARTSKILL, SK_PERCEPTION, PR_ADEPT, NA, NULL);
addflag(lastrace->flags, F_NOCTURNAL, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 20, NA, NA, NULL);
addrace(R_CRYMIDIA, "crymidia", 10, 'e', C_WHITE, MT_ICE, RC_MAGIC, "A floating crystalline form, a crymidia is formed when a mass of crystal becomes sentient."); addrace(R_CRYMIDIA, "crymidia", 10, 'e', C_WHITE, MT_ICE, RC_MAGIC, "A floating crystalline form, a crymidia is formed when a mass of crystal becomes sentient.");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
@ -9471,7 +9679,7 @@ void initrace(void) {
addflag(lastrace->flags, F_FATALFOOD, OT_CHOCOLATE, NA, NA, NULL); addflag(lastrace->flags, F_FATALFOOD, OT_CHOCOLATE, NA, NA, NULL);
addflag(lastrace->flags, F_EATCONFER, F_CANSEETHROUGHMAT, MT_GAS, NA, "80"); addflag(lastrace->flags, F_EATCONFER, F_CANSEETHROUGHMAT, MT_GAS, NA, "80");
addrace(R_SKOOB, "skoob", 40, 'm', C_WHITE, MT_ICE, RC_MAGIC, "Your typical snowman right down to the carrot nose, with just a two key differences: it is alive, and it is homocidal."); addrace(R_SKOOB, "skoob", 40, 'g', C_WHITE, MT_ICE, RC_MAGIC, "Your typical snowman right down to the carrot nose, with just a two key differences: it is alive, and it is homocidal.");
setbodytype(lastrace, BT_HUMANOID); setbodytype(lastrace, BT_HUMANOID);
addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "carrot"); addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "carrot");
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, "puddle of water"); addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, "puddle of water");
@ -9479,7 +9687,7 @@ void initrace(void) {
addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL); addflag(lastrace->flags, F_STARTATT, A_IQ, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL); addflag(lastrace->flags, F_HOSTILE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL); addflag(lastrace->flags, F_RARITY, H_DUNGEON, NA, RR_UNCOMMON, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUMAN, NA, NA, NULL); addflag(lastrace->flags, F_SIZE, SZ_MEDIUM, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "2d4"); addflag(lastrace->flags, F_HITDICE, NA, NA, NA, "2d4");
addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL); addflag(lastrace->flags, F_MOVESPEED, SP_SLOW, NA, NA, NULL);
addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, ""); addflag(lastrace->flags, F_ACTIONSPEED, SP_NORMAL, NA, NA, "");
@ -12606,7 +12814,6 @@ void initskills(void) {
// spell schools // spell schools
addskill(SK_SS_ALLOMANCY, "Allomancy", "Boosts casting of spells from this school.", 50); addskill(SK_SS_ALLOMANCY, "Allomancy", "Boosts casting of spells from this school.", 50);
addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Each rank gives you a 20% chance to learn a new allomantic ability when levelling up.", B_FALSE); addskilldesc(SK_SS_ALLOMANCY, PR_INEPT, "- Each rank gives you a 20% chance to learn a new allomantic ability when levelling up.", B_FALSE);
addskilldesc(SK_SS_ALLOMANCY, PR_NOVICE, "You gain knowledge of all Allomancy spells.", B_FALSE);
addskilldesc(SK_SS_ALLOMANCY, PR_NOVICE, "Allows you to cast Allomancy spells up to level 1.", B_FALSE); addskilldesc(SK_SS_ALLOMANCY, PR_NOVICE, "Allows you to cast Allomancy spells up to level 1.", B_FALSE);
addskilldesc(SK_SS_ALLOMANCY, PR_BEGINNER, "Allows you to cast Allomancy spells up to level 2.", B_FALSE); addskilldesc(SK_SS_ALLOMANCY, PR_BEGINNER, "Allows you to cast Allomancy spells up to level 2.", B_FALSE);
addskilldesc(SK_SS_ALLOMANCY, PR_ADEPT, "Allows you to cast Allomancy spells up to level 3.", B_FALSE); addskilldesc(SK_SS_ALLOMANCY, PR_ADEPT, "Allows you to cast Allomancy spells up to level 3.", B_FALSE);

Binary file not shown.

14
defs.h
View File

@ -20,7 +20,8 @@
#define TEXT_WARN_ATTACK_NOXP "You will not gain experience until you train. Really attack?" #define TEXT_WARN_ATTACK_NOXP "You will not gain experience until you train. Really attack?"
#define TEXT_WARN_CLIMB "Really attempt to climb without Climbing skill?" #define TEXT_WARN_CLIMB "Really attempt to climb without Climbing skill?"
#define TEXT_WARN_FLY "Warning: while airborne you will not map your surroundings." #define TEXT_WARN_FLY "Warning: while airborne you will not map your surroundings."
#define TEXT_WARN_MUTABLE "(you can now gain abilities by eating corpses)" #define TEXT_WARN_MUTABLE "(you can now gain attributes by eating corpses)"
#define TEXT_WARN_NOXP_GOODVSPEACEFUL "Warning: Good-aligned players gain no XP for peaceful kills."
// Defaults // Defaults
#define DEF_AIFOLLOWTIME (50) // if target lf is out of view #define DEF_AIFOLLOWTIME (50) // if target lf is out of view
@ -944,6 +945,8 @@ enum RACE {
R_GNOLL, R_GNOLL,
R_GNOLLHM, R_GNOLLHM,
R_GOBLIN, R_GOBLIN,
R_GOBLINR,
R_GOBLINS,
R_GOBLINHEXER, R_GOBLINHEXER,
R_GOBLINKING, R_GOBLINKING,
R_GOBLINWAR, R_GOBLINWAR,
@ -958,8 +961,11 @@ enum RACE {
R_OGRE, R_OGRE,
R_OGREWARHULK, R_OGREWARHULK,
R_OOZEGREY, R_OOZEGREY,
R_ORCB,
R_ORC, R_ORC,
R_ORCWARRIOR, R_ORCGREY,
R_ORCGRAND,
R_ORCN,
R_ORK, R_ORK,
R_PEGASUS, R_PEGASUS,
R_POLTERGEIST, R_POLTERGEIST,
@ -1253,6 +1259,7 @@ enum OBTYPE {
OT_CHEESE, OT_CHEESE,
OT_CHOCOLATE, OT_CHOCOLATE,
OT_CLOVER, OT_CLOVER,
OT_CURADOUGH,
OT_GARLIC, OT_GARLIC,
OT_HOTDOG, OT_HOTDOG,
OT_JERKY, OT_JERKY,
@ -1262,6 +1269,7 @@ enum OBTYPE {
OT_NUT, OT_NUT,
OT_PASSIONFRUIT, OT_PASSIONFRUIT,
OT_POISONSAC, OT_POISONSAC,
OT_PSITRUFFLE,
OT_ROASTMEAT, OT_ROASTMEAT,
OT_RUMBALL, OT_RUMBALL,
OT_SALT, OT_SALT,
@ -1936,6 +1944,7 @@ enum OBTYPE {
OT_SPANNER, OT_SPANNER,
OT_STICK, OT_STICK,
// projectile weapons // projectile weapons
OT_BLOWGUN,
OT_BOW, OT_BOW,
OT_CROSSBOW, OT_CROSSBOW,
OT_CROSSBOWHAND, OT_CROSSBOWHAND,
@ -3095,6 +3104,7 @@ enum FLAG {
// is activated! // is activated!
F_SLOWACT, // modifier for action speed F_SLOWACT, // modifier for action speed
F_SLOWMETAB, // hunger counter increases slower, poison cures slower. F_SLOWMETAB, // hunger counter increases slower, poison cures slower.
// v0 is multiplier
F_SLOWMOVE, // modifier for move speed F_SLOWMOVE, // modifier for move speed
F_SLOWACTMOVE, // modifier for move and action speed F_SLOWACTMOVE, // modifier for move and action speed
F_XRAYVIS, //val0=num of walls we can see through F_XRAYVIS, //val0=num of walls we can see through

31
io.c
View File

@ -11865,7 +11865,7 @@ void showlfstats(lifeform_t *lf, int showall) {
for (i = 0; i < MAXDAMTYPE; i++) { for (i = 0; i < MAXDAMTYPE; i++) {
if (basedamagetype(i) != i) continue; if (basedamagetype(i) != i) continue;
f = isresistantto(lf->flags, i, B_TRUE); f = isresistantto(lf->flags, i, B_TRUE);
if (f) { if (f && !isimmuneto(lf->flags, i, B_TRUE)) {
if (first) { if (first) {
snprintf(buf2, BUFLEN, "%s %s resistant to: %s", you(lf), is(lf),getdamnamenoun(i)); snprintf(buf2, BUFLEN, "%s %s resistant to: %s", you(lf), is(lf),getdamnamenoun(i));
first = B_FALSE; first = B_FALSE;
@ -12699,7 +12699,7 @@ char wrapprint(WINDOW *win, int *y, int *x, int newlineindent, char *format, ...
char word[HUGEBUFLEN],buf[HUGEBUFLEN]; char word[HUGEBUFLEN],buf[HUGEBUFLEN];
char *p; char *p;
va_list args; va_list args;
int w,nspaces = 0,h; int w,nspaces = 0, h;
int first = B_TRUE; int first = B_TRUE;
va_start(args, format); va_start(args, format);
@ -12720,16 +12720,38 @@ char wrapprint(WINDOW *win, int *y, int *x, int newlineindent, char *format, ...
// add on spaces at the end // add on spaces at the end
//strncat(buf, " ", HUGEBUFLEN); //strncat(buf, " ", HUGEBUFLEN);
// count number of spaces at the start...
/*
p = buf;
while (*p == ' ') {
nstartspaces++;
p++;
}
// print out pre-spaces.
for (i = 0;i < nstartspaces; i++) {
(*x)++;
if (*x >= w) {
(*y)++;
*x = newlineindent;
}
}
*/
// new code: print it word by word. // new code: print it word by word.
p = readuntil(word, buf, ' '); // get first word p = readuntil(word, buf, ' '); // get first word
//while (strlen(word)) { //while (strlen(word)) {
while (strlen(p) || strlen(word)) { while (strlen(p) || strlen(word)) {
char *repword; char *repword;
int rv = B_TRUE; int rv = B_TRUE;
if (strlen(word) == 0) {
repword = strdup(" ");
} else {
repword = strdup(word); repword = strdup(word);
while (rv) { while (rv) {
repword = strrep(repword, "@", " ", &rv); repword = strrep(repword, "@", " ", &rv);
} }
}
// if this word won't fit, put it on the next line. // if this word won't fit, put it on the next line.
if (*x != 0) { if (*x != 0) {
if (*x + strlen(repword) >= (w-1)) { if (*x + strlen(repword) >= (w-1)) {
@ -12758,9 +12780,12 @@ char wrapprint(WINDOW *win, int *y, int *x, int newlineindent, char *format, ...
if (first) { if (first) {
first = B_FALSE; first = B_FALSE;
} else if (*x != newlineindent) { } else if ((*x != newlineindent) && strlen(word)) {
textwithcol_real(win, " ", B_FALSE); textwithcol_real(win, " ", B_FALSE);
} }
if (strlen(repword) < 2) {
dblog("xxx");
}
textwithcol_real(win, repword, B_FALSE); textwithcol_real(win, repword, B_FALSE);
//(*x) += strlen(buf); //(*x) += strlen(buf);
getyx(win, *y, *x); getyx(win, *y, *x);

10
lf.c
View File

@ -2793,8 +2793,9 @@ void die(lifeform_t *lf) {
// some lfs have extra corpse objects // some lfs have extra corpse objects
getflags(lf->flags, retflag, &nretflags, F_EXTRACORPSE, F_NONE); getflags(lf->flags, retflag, &nretflags, F_EXTRACORPSE, F_NONE);
for (i = 0; i < nretflags; i++) { for (i = 0; i < nretflags; i++) {
f = retflag[i];
if ((f->val[0] == NA) || pctchance(f->val[0])) { if ((f->val[0] == NA) || pctchance(f->val[0])) {
addob(corpsecell->obpile, retflag[i]->text); addob(corpsecell->obpile, f->text);
} }
} }
@ -3810,6 +3811,13 @@ int eat(lifeform_t *lf, object_t *o) {
case OT_CHOCOLATE: case OT_CHOCOLATE:
setstamina(lf, getmaxstamina(lf)); setstamina(lf, getmaxstamina(lf));
break; break;
case OT_CURADOUGH:
addtempflag(lf->flags, F_SLOWMETAB, 3, NA, NA, NULL, rnd(100,200));
gainhp(lf, lf->maxhp);
break;
case OT_PSITRUFFLE:
addtempflag(lf->flags, F_LEARNBOOST, 100, NA, NA, NULL, 100);
break;
case OT_HOTDOG: case OT_HOTDOG:
addtempflag(lf->flags, F_ATTRMOD, A_STR, 3, NA, NULL, rnd(30,50)); addtempflag(lf->flags, F_ATTRMOD, A_STR, 3, NA, NULL, rnd(30,50));
gainhp(lf,rnd(6,12)); gainhp(lf,rnd(6,12));

27
map.c
View File

@ -1405,22 +1405,37 @@ int doelementspread(cell_t *c) {
} }
// fire // fire
fireob = hasobofmaterial(c->obpile, MT_FIRE); fireob = hasobofmaterial(c->obpile, MT_FIRE);
if (fireob && (fireob->birthtime != curtime)) { if (fireob && (fireob->birthtime != curtime) && !isdeadob(fireob)) {
cell_t *retcell[MAXRETCELLS]; cell_t *retcell[MAXRETCELLS];
int nretcells,i,nspread = 0; int nretcells,i,nspread = 0;
// check adjacent cells for flammable stuff
getradiuscells(c, 1, DT_COMPASS, B_FALSE, LOF_DONTNEED, B_FALSE, retcell, &nretcells, B_FALSE);
for (i = 0; i < nretcells; i++) {
object_t *oo; object_t *oo;
// check adjacent cells (and this one) for flammable stuff
getradiuscells(c, 1, DT_COMPASS, B_FALSE, LOF_DONTNEED, B_TRUE, retcell, &nretcells, B_FALSE);
for (i = 0; i < nretcells; i++) {
int celldone = B_FALSE; int celldone = B_FALSE;
for (oo = retcell[i]->obpile->first ; oo ; oo = oo->next) { for (oo = retcell[i]->obpile->first ; oo ; oo = oo->next) {
if (isflammable(oo) && !hasobofmaterial(retcell[i]->obpile, MT_FIRE)) { flag_t *f;
if (hasobofmaterial(retcell[i]->obpile, MT_FIRE)) {
// there's already a fire here.
// f_onfire flags won't expire if there is fire there.
f = hasflag(oo->flags, F_ONFIRE);
if (f && (f->lifetime > 0)) {
f->lifetime++;
}
} else if (isflammable(oo)) {
// no fire here already. if there is a flammable object here, the fire
// will spread.
ignite(oo); ignite(oo);
// if object didn't ignite into a fire, add one. // if object didn't ignite into a fire, add one.
if (!hasobofmaterial(retcell[i]->obpile, MT_FIRE)) { if (!hasobofmaterial(retcell[i]->obpile, MT_FIRE)) {
addobfast(retcell[i]->obpile, fireob->type->id); addobfast(retcell[i]->obpile, fireob->type->id);
} }
// now we regain our full hp
f = hasflag(fireob->flags, F_OBHP);
if (f) f->val[0] = f->val[1];
nspread++; nspread++;
celldone = B_TRUE; celldone = B_TRUE;
} }

View File

@ -11678,6 +11678,7 @@ int real_takedamage(object_t *o, int howmuch, int damtype, int wantannounce) {
// initial effects based on damage type // initial effects based on damage type
if (damtype == DT_FIRE) { if (damtype == DT_FIRE) {
if ( ((o->type->id == OT_CANDLE) || (o->type->id == OT_TORCH) || (o->type->id == OT_CANDELABRUM)) && if ( ((o->type->id == OT_CANDLE) || (o->type->id == OT_TORCH) || (o->type->id == OT_CANDELABRUM)) &&
!isactivated(o)) { !isactivated(o)) {
cell_t *c; cell_t *c;
@ -13090,12 +13091,29 @@ void timeeffectsob(object_t *o) {
} else { } else {
damtype = f->val[1]; damtype = f->val[1];
} }
// special case // special case - corpses don't decay when on ice
if (o->type->id == OT_CORPSE) { if (o->type->id == OT_CORPSE) {
if (hasobofmaterial(o->pile, MT_ICE)) { if (hasobofmaterial(o->pile, MT_ICE)) {
doit = B_FALSE; doit = B_FALSE;
} }
} }
// special case - fire doesn't naturally die down
// if there are larger fires in adjacent cells.
if ((o->type->material->id == MT_FIRE) && (o->pile->where)) {
int dir,myhp;
cell_t *c;
object_t *otherfire;
myhp = getobhp(o, NULL);
for (dir = DC_N; dir <= DC_NW; dir++) {
c = getcellindir(location, dir);
if (c) {
otherfire = hasobofmaterial(c->obpile, MT_FIRE);
if (otherfire && (getobhp(otherfire, NULL) > myhp)) {
doit = B_FALSE;
}
}
}
}
if (doit) { if (doit) {
takedamage(o, f->val[0], damtype); takedamage(o, f->val[0], damtype);
if (hasflag(o->flags, F_DEAD)) return; if (hasflag(o->flags, F_DEAD)) return;