- [+] gunpoweder should be unstable - explode on ANY dam.
- [+] mosnter facing being set to -. debug with forced break. fixed. - [+] fix territorial monster crash. - [+] CRASH in celldangerous when undead avoiding holy circles. - [+] alternate text for 'ineffectually' - [+] need an announce for bjorn's ecstatic ability (ehavy blow) - [+] whenever you gain a new godbonus, give you a grace period - [+] change selectweapon so i can specify valid choices - [+] have multiple F_SELECTWEAPON flags, v0 = object. (or text?) - [+] getflags() then pick from these. - [+] hwen gunpowder inside a barrel explodes: - [+] say "the barrel explodes", since that's what you can see - [+] explosion should actually work!!! - [+] lethargy should drain lots more stamina now that exhaustion doesn't prevent attacks - [+] thrown knifes not doing enough damage. - [+] fireat(): dam = throwdam(2) + speed(2) dealing 3 damage - [+] maybe increase throwdam to 4. - [+] check otehr throwmissiles too
This commit is contained in:
parent
5b28b3571e
commit
d39e7ea7c1
2
ai.c
2
ai.c
|
@ -2347,7 +2347,7 @@ int aimovetotargetcell(lifeform_t *lf, flag_t *f) {
|
||||||
}
|
}
|
||||||
killflag(f);
|
killflag(f);
|
||||||
} else {
|
} else {
|
||||||
if (!turned) {
|
if (!turned && (c != lf->cell)) {
|
||||||
turntoface(lf, c);
|
turntoface(lf, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
28
attack.c
28
attack.c
|
@ -670,6 +670,10 @@ int attackcell(lifeform_t *lf, cell_t *c, int force) {
|
||||||
attacksdone = maxattacks;
|
attacksdone = maxattacks;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// no longer adjacent?
|
||||||
|
if (!isadjacent(lf->cell, victim->cell) || isdead(victim)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
// vicitm started to flee?
|
// vicitm started to flee?
|
||||||
if (isplayer(lf)) {
|
if (isplayer(lf)) {
|
||||||
if (!fleeflag && isfleeingfrom(victim, lf)) {
|
if (!fleeflag && isfleeingfrom(victim, lf)) {
|
||||||
|
@ -2047,6 +2051,11 @@ int attackob(lifeform_t *lf, object_t *o, object_t *wep, flag_t *damflag) {
|
||||||
}
|
}
|
||||||
// damstring should never be used...
|
// damstring should never be used...
|
||||||
shatter(oo, B_FALSE, "shattering damage", lf);
|
shatter(oo, B_FALSE, "shattering damage", lf);
|
||||||
|
} else {
|
||||||
|
int obdam;
|
||||||
|
obdam = dam[0] / 2;
|
||||||
|
limit(&obdam, 1, NA);
|
||||||
|
takedamage(oo, obdam, DT_BASH, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3015,6 +3024,7 @@ int rolltohit(lifeform_t *lf, lifeform_t *victim, object_t *wep, int *critical,
|
||||||
int db = B_FALSE;
|
int db = B_FALSE;
|
||||||
char lfname[BUFLEN];
|
char lfname[BUFLEN];
|
||||||
char vicname[BUFLEN];
|
char vicname[BUFLEN];
|
||||||
|
int critpossible = B_TRUE;
|
||||||
|
|
||||||
if (lfhasflag(lf, F_DEBUG)) db = B_TRUE;
|
if (lfhasflag(lf, F_DEBUG)) db = B_TRUE;
|
||||||
real_getlfname(lf, lfname, NULL, B_SHOWALL, B_CURRACE);
|
real_getlfname(lf, lfname, NULL, B_SHOWALL, B_CURRACE);
|
||||||
|
@ -3027,6 +3037,12 @@ int rolltohit(lifeform_t *lf, lifeform_t *victim, object_t *wep, int *critical,
|
||||||
if (fumble) *fumble = B_FALSE;
|
if (fumble) *fumble = B_FALSE;
|
||||||
if (missby) *missby = 0;
|
if (missby) *missby = 0;
|
||||||
|
|
||||||
|
if (lf && lfhasflag(lf, F_NOGIVECRITS)) {
|
||||||
|
critpossible = B_FALSE;
|
||||||
|
} else if (victim && lfhasflag(victim, F_NOTAKECRITS)) {
|
||||||
|
critpossible = B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
// anticipate action spell?
|
// anticipate action spell?
|
||||||
if (lfhasflagval(victim, F_ANTICIPATE, lf->id, NA, NA, NULL)) {
|
if (lfhasflagval(victim, F_ANTICIPATE, lf->id, NA, NA, NULL)) {
|
||||||
if (db) dblog("%s: victim has anticipate action - MISS.", lfname);
|
if (db) dblog("%s: victim has anticipate action - MISS.", lfname);
|
||||||
|
@ -3045,7 +3061,7 @@ int rolltohit(lifeform_t *lf, lifeform_t *victim, object_t *wep, int *critical,
|
||||||
}
|
}
|
||||||
gothit = B_TRUE;
|
gothit = B_TRUE;
|
||||||
if (db) dblog("%s: we have truestrike - HIT.", lfname);
|
if (db) dblog("%s: we have truestrike - HIT.", lfname);
|
||||||
} else if (critical && *critical) {
|
} else if (critical && *critical && critpossible) {
|
||||||
// critical already set = forced critical
|
// critical already set = forced critical
|
||||||
gothit = B_TRUE;
|
gothit = B_TRUE;
|
||||||
if (db) dblog("%s: pre-determined critical - HIT.", lfname);
|
if (db) dblog("%s: pre-determined critical - HIT.", lfname);
|
||||||
|
@ -3169,14 +3185,7 @@ int rolltohit(lifeform_t *lf, lifeform_t *victim, object_t *wep, int *critical,
|
||||||
}
|
}
|
||||||
|
|
||||||
// critical chance
|
// critical chance
|
||||||
if (critical && gothit) {
|
if (critical && gothit && critpossible) {
|
||||||
int critpossible = B_TRUE;
|
|
||||||
if (lf && lfhasflag(lf, F_NOGIVECRITS)) {
|
|
||||||
critpossible = B_FALSE;
|
|
||||||
} else if (victim && lfhasflag(victim, F_NOTAKECRITS)) {
|
|
||||||
critpossible = B_FALSE;
|
|
||||||
}
|
|
||||||
if (critpossible) {
|
|
||||||
if (lfhasflag(lf, F_AIMEDSTRIKE)) {
|
if (lfhasflag(lf, F_AIMEDSTRIKE)) {
|
||||||
*critical = 1;
|
*critical = 1;
|
||||||
} else {
|
} else {
|
||||||
|
@ -3194,7 +3203,6 @@ int rolltohit(lifeform_t *lf, lifeform_t *victim, object_t *wep, int *critical,
|
||||||
if (critroll <= getcritchance(lf, wep,victim)) *critical = 1;
|
if (critroll <= getcritchance(lf, wep,victim)) *critical = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (fumble && !gothit) {
|
if (fumble && !gothit) {
|
||||||
if (isexhausted(lf) || (baseacc <= 60) || !getweaponskill(lf, wep)) {
|
if (isexhausted(lf) || (baseacc <= 60) || !getweaponskill(lf, wep)) {
|
||||||
|
|
39
data.c
39
data.c
|
@ -1011,7 +1011,10 @@ void initjobs(void) {
|
||||||
// abilities
|
// abilities
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, -1, NA, NULL);
|
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, OT_LONGSWORD, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_SHORTSWORD, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_SPEAR, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_MACE, 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);
|
||||||
addflag(lastjob->flags, F_LEVABIL, 4, OT_A_WARCRY, NA, NULL);
|
addflag(lastjob->flags, F_LEVABIL, 4, OT_A_WARCRY, NA, NULL);
|
||||||
addflag(lastjob->flags, F_LEVABIL, 5, OT_A_CHARGE, NA, NULL);
|
addflag(lastjob->flags, F_LEVABIL, 5, OT_A_CHARGE, NA, NULL);
|
||||||
|
@ -1123,7 +1126,8 @@ void initjobs(void) {
|
||||||
addflag(lastjob->flags, F_CANLEARN, SK_SS_WILD, PR_ADEPT, NA, NULL);
|
addflag(lastjob->flags, F_CANLEARN, SK_SS_WILD, PR_ADEPT, NA, NULL);
|
||||||
// abilities
|
// abilities
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, 0, NA, NULL);
|
addflag(lastjob->flags, F_MPDICE, 1, 0, NA, NULL);
|
||||||
addflag(lastjob->flags, F_SELECTWEAPON, B_TRUE, NA, NA, NULL);
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_LONGSWORD, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_SHORTSWORD, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL);
|
||||||
|
|
||||||
addjob(J_PALADIN, "Paladin", "Paladins are holy warriors dedicated to the Goddess of Life. They gain powerful abilities and have access to healing magics, but these powers are dependant upon their goddess' approval. Paladins must take holy vows to only ever use battle equipiment which has first been blessed.", JC_FIGHTERMAGE);
|
addjob(J_PALADIN, "Paladin", "Paladins are holy warriors dedicated to the Goddess of Life. They gain powerful abilities and have access to healing magics, but these powers are dependant upon their goddess' approval. Paladins must take holy vows to only ever use battle equipiment which has first been blessed.", JC_FIGHTERMAGE);
|
||||||
|
@ -1183,7 +1187,8 @@ void initjobs(void) {
|
||||||
// abilities
|
// abilities
|
||||||
addflag(lastjob->flags, F_MPDICE, 1, -1, NA, NULL);
|
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, OT_LONGSWORD, NA, NA, NULL);
|
||||||
|
addflag(lastjob->flags, F_SELECTWEAPON, OT_FLAIL, NA, NA, NULL);
|
||||||
addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastjob->flags, F_HIRABLE, B_TRUE, NA, NA, NULL);
|
||||||
// can permenantly turn undead for 0 power.
|
// can permenantly turn undead for 0 power.
|
||||||
addflag(lastjob->flags, F_CANWILL, OT_S_TURNUNDEAD, NA, NA, NULL);
|
addflag(lastjob->flags, F_CANWILL, OT_S_TURNUNDEAD, NA, NA, NULL);
|
||||||
|
@ -2974,7 +2979,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, 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_MISSILEDAM, NA, NA, NA, "1");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "2");
|
||||||
addot(OT_BRICK, "brick", "A heavy brick.", MT_STONE, 3, OC_ROCK, SZ_TINY);
|
addot(OT_BRICK, "brick", "A heavy brick.", MT_STONE, 3, OC_ROCK, SZ_TINY);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, NA, RR_RARE, "");
|
||||||
|
@ -2984,7 +2989,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOBLESS, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, 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_MISSILEDAM, NA, NA, NA, "3");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "4");
|
||||||
|
|
||||||
// gems
|
// gems
|
||||||
addot(OT_AQUAMARINE, "aquamarine stone", "An aqua-coloured gemstone.", MT_STONE, 0.2, OC_ROCK, SZ_TINY);
|
addot(OT_AQUAMARINE, "aquamarine stone", "An aqua-coloured gemstone.", MT_STONE, 0.2, OC_ROCK, SZ_TINY);
|
||||||
|
@ -5997,14 +6002,14 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_STARTOBCLASS, 50, OC_FOOD, NA, NULL);
|
addflag(lastot->flags, F_STARTOBCLASS, 50, OC_FOOD, NA, NULL);
|
||||||
addflag(lastot->flags, F_STARTOBCLASS, 50, OC_FOOD, NA, NULL);
|
addflag(lastot->flags, F_STARTOBCLASS, 50, OC_FOOD, NA, NULL);
|
||||||
|
|
||||||
addot(OT_GUNPOWDER, "pile of gunpowder", "A black metallic powder.", MT_METAL, 0.5, OC_TOOLS, SZ_TINY);
|
addot(OT_GUNPOWDER, "pile of gunpowder", "A black metallic powder. Said to be highly unstable.", MT_METAL, 0.5, OC_TOOLS, SZ_TINY);
|
||||||
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, "pile of black powder");
|
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, "pile of black powder");
|
||||||
addflag(lastot->flags, F_GLYPH, NA, ',', NA, NULL);
|
addflag(lastot->flags, F_GLYPH, NA, ',', NA, NULL);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, NULL);
|
addflag(lastot->flags, F_RARITY, H_ALL, 65, NA, NULL);
|
||||||
addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL);
|
addflag(lastot->flags, F_VALUE, 25, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_EXPLODEONDAM, DT_FIRE, NA, NA, "8d2");
|
addflag(lastot->flags, F_EXPLODEONDAM, NA, NA, NA, "8d2");
|
||||||
addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, "2d6");
|
addflag(lastot->flags, F_DTVULN, DT_FIRE, NA, NA, "2d6");
|
||||||
addflag(lastot->flags, F_FLAMMABLE, 3, NA, NA, NULL);
|
addflag(lastot->flags, F_FLAMMABLE, 3, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_POWDER, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_POWDER, B_TRUE, NA, NA, NULL);
|
||||||
|
@ -8635,7 +8640,7 @@ void initobjects(void) {
|
||||||
addot(OT_DART, "dart", "A small, sharp projectile weapon.", MT_WOOD, 0.5, OC_MISSILE, SZ_SMALL);
|
addot(OT_DART, "dart", "A small, sharp projectile weapon.", MT_WOOD, 0.5, OC_MISSILE, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "1");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "2");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
||||||
|
@ -8646,7 +8651,7 @@ void initobjects(void) {
|
||||||
addot(OT_KNIFETHROWING, "throwing knife", "A weighted knife, designed to be thrown.", MT_METAL, 1.5, OC_MISSILE, SZ_SMALL);
|
addot(OT_KNIFETHROWING, "throwing knife", "A weighted knife, designed to be thrown.", MT_METAL, 1.5, OC_MISSILE, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "2");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "5");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
||||||
|
@ -8655,7 +8660,7 @@ void initobjects(void) {
|
||||||
addot(OT_DARTNANO, "nanodart", "A metal dart with a nanofibre point. Capable of piercing most armour.", MT_METAL, 0.5, OC_MISSILE, SZ_TINY);
|
addot(OT_DARTNANO, "nanodart", "A metal dart with a nanofibre point. Capable of piercing most armour.", MT_METAL, 0.5, OC_MISSILE, SZ_TINY);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "2");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "5");
|
||||||
addflag(lastot->flags, F_ARMOURPIERCE, 10, NA, NA, "");
|
addflag(lastot->flags, F_ARMOURPIERCE, 10, NA, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 67, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 67, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 67, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 67, NA, "");
|
||||||
|
@ -8712,7 +8717,7 @@ void initobjects(void) {
|
||||||
addot(OT_JAVELIN, "javelin", "A long, sharp missile weapon.", MT_METAL, 4, OC_MISSILE, SZ_MEDIUM);
|
addot(OT_JAVELIN, "javelin", "A long, sharp missile weapon.", MT_METAL, 4, OC_MISSILE, SZ_MEDIUM);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "3");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "6");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 90, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 90, NA, "");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 2, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 2, NA, "");
|
||||||
|
@ -8721,7 +8726,7 @@ void initobjects(void) {
|
||||||
|
|
||||||
addot(OT_JAVELINLT, "lightning javelin", "A long, sharp missile weapon which transforms into a bolt of lightning when thrown.", MT_METAL, 4, OC_MISSILE, SZ_MEDIUM);
|
addot(OT_JAVELINLT, "lightning javelin", "A long, sharp missile weapon which transforms into a bolt of lightning when thrown.", MT_METAL, 4, OC_MISSILE, SZ_MEDIUM);
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "3");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "6");
|
||||||
addflag(lastot->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
|
addflag(lastot->flags, F_RARITY, H_ALL, NA, RR_RARE, NULL);
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 2, NA, NULL);
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL);
|
addflag(lastot->flags, F_OBHP, 5, 5, NA, NULL);
|
||||||
|
@ -8735,7 +8740,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 85, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 85, NA, "");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, "");
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "3");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "4");
|
||||||
addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL);
|
addflag(lastot->flags, F_OBHP, 2, 2, NA, NULL);
|
||||||
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_CANHAVEOBMOD, OM_POISONED, 17, NA, NULL);
|
addflag(lastot->flags, F_CANHAVEOBMOD, OM_POISONED, 17, NA, NULL);
|
||||||
|
@ -8746,7 +8751,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 80, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 80, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "4");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "6");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 10, NA, "");
|
||||||
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_CANHAVEOBMOD, OM_POISONED, 17, NA, NULL);
|
addflag(lastot->flags, F_CANHAVEOBMOD, OM_POISONED, 17, NA, NULL);
|
||||||
|
@ -8761,7 +8766,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_DAMAGABLE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_MISSILEALWAYSDIES, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_MISSILEALWAYSDIES, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL);
|
addflag(lastot->flags, F_OBHP, 1, 1, NA, NULL);
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "4");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "6");
|
||||||
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_NOOBDIETEXT, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_CANBEDIFFMAT, MT_SILVER, 10, NA, NULL);
|
addflag(lastot->flags, F_CANBEDIFFMAT, MT_SILVER, 10, NA, NULL);
|
||||||
|
|
||||||
|
@ -8780,7 +8785,7 @@ void initobjects(void) {
|
||||||
addot(OT_SHURIKEN, "shuriken", "A sharpened star-shaped piece of metal, made for throwing.", MT_METAL, 1, OC_MISSILE, SZ_SMALL);
|
addot(OT_SHURIKEN, "shuriken", "A sharpened star-shaped piece of metal, made for throwing.", MT_METAL, 1, OC_MISSILE, SZ_SMALL);
|
||||||
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_STACKABLE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, "");
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "4");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "6");
|
||||||
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_DUNGEON, 100, NA, "");
|
||||||
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
addflag(lastot->flags, F_RARITY, H_CAVE, 100, NA, "");
|
||||||
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
addflag(lastot->flags, F_NUMAPPEAR, 1, 3, NA, "");
|
||||||
|
@ -8833,7 +8838,7 @@ void initobjects(void) {
|
||||||
addflag(lastot->flags, F_ARMOURPIERCE, 4, NA, NA, "");
|
addflag(lastot->flags, F_ARMOURPIERCE, 4, NA, NA, "");
|
||||||
addflag(lastot->flags, F_DAM, DT_CHOP, 7, NA, NULL);
|
addflag(lastot->flags, F_DAM, DT_CHOP, 7, NA, NULL);
|
||||||
addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL);
|
addflag(lastot->flags, F_ACCURACY, 70, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "5");
|
addflag(lastot->flags, F_MISSILEDAM, NA, NA, NA, "7");
|
||||||
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
|
addflag(lastot->flags, F_THROWMISSILE, B_TRUE, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_USESSKILL, SK_AXES, NA, NA, NULL);
|
addflag(lastot->flags, F_USESSKILL, SK_AXES, NA, NA, NULL);
|
||||||
addflag(lastot->flags, F_ATTREQ, A_STR, 35, 55, "5");
|
addflag(lastot->flags, F_ATTREQ, A_STR, 35, 55, "5");
|
||||||
|
|
BIN
data/hiscores.db
BIN
data/hiscores.db
Binary file not shown.
7
defs.h
7
defs.h
|
@ -3331,6 +3331,9 @@ enum FLAG {
|
||||||
// can pick what alignment they want to be.
|
// can pick what alignment they want to be.
|
||||||
// text shows the choices ("g", "n" or "e")
|
// text shows the choices ("g", "n" or "e")
|
||||||
F_PIETY, // for god lifeforms - tracks player's piety with them
|
F_PIETY, // for god lifeforms - tracks player's piety with them
|
||||||
|
F_NOPIETYLOSS, // piety for god v0 cannot be lowered. used
|
||||||
|
// to give a 'grace period'. NOTE: this flag goes
|
||||||
|
// on the _player_ ,not the god lfs.
|
||||||
F_AUTOTANGLE, // v0% chance to auto entangle on hit. spellpower=v1
|
F_AUTOTANGLE, // v0% chance to auto entangle on hit. spellpower=v1
|
||||||
F_PLANTFRIEND, // for player druids - makes plants friendly.
|
F_PLANTFRIEND, // for player druids - makes plants friendly.
|
||||||
F_HOMEMAP, // which map did this lf get created on?
|
F_HOMEMAP, // which map did this lf get created on?
|
||||||
|
@ -4086,6 +4089,7 @@ enum FLAG {
|
||||||
|
|
||||||
// for jobs (job flags)
|
// for jobs (job flags)
|
||||||
F_SELECTWEAPON, // this job gets to pick their starting weapon
|
F_SELECTWEAPON, // this job gets to pick their starting weapon
|
||||||
|
// and obtype v0 is one of the options.
|
||||||
F_NOSELECTWEAPON, // override F_SELECTWEAPON from job
|
F_NOSELECTWEAPON, // override F_SELECTWEAPON from job
|
||||||
F_NOPLAYER, // players can't pick this job
|
F_NOPLAYER, // players can't pick this job
|
||||||
F_HASPET, // this job starts with a pet of race f->text
|
F_HASPET, // this job starts with a pet of race f->text
|
||||||
|
@ -4923,6 +4927,9 @@ typedef struct lifeform_s {
|
||||||
// set to TRUE after lf has being created
|
// set to TRUE after lf has being created
|
||||||
int born;
|
int born;
|
||||||
|
|
||||||
|
// not saved - don't ever recalc this lf's los
|
||||||
|
int loslock;
|
||||||
|
|
||||||
// debugging
|
// debugging
|
||||||
int redraws; // # actual screen redraws during this lf's turn.
|
int redraws; // # actual screen redraws during this lf's turn.
|
||||||
|
|
||||||
|
|
35
god.c
35
god.c
|
@ -946,6 +946,7 @@ void givegodbonus(enum RACE rid, flag_t *bf) {
|
||||||
|
|
||||||
// increment piety so that it doesn't keep bouncing around the border.
|
// increment piety so that it doesn't keep bouncing around the border.
|
||||||
modpiety(rid, PIETYPRAYLOSS);
|
modpiety(rid, PIETYPRAYLOSS);
|
||||||
|
addtempflag(player->flags, F_NOPIETYLOSS, rid, NA, NA, NULL,rnd(50,100));
|
||||||
|
|
||||||
// parse regular rags
|
// parse regular rags
|
||||||
parsegodbonusargs(bf, &bonuslev, &bonusid, &arg, targ);
|
parsegodbonusargs(bf, &bonuslev, &bonusid, &arg, targ);
|
||||||
|
@ -976,6 +977,8 @@ void givegodbonus(enum RACE rid, flag_t *bf) {
|
||||||
case SC_SEARCH: godsay(rid, B_FALSE, "That which is hidden shall be revealed!"); break;
|
case SC_SEARCH: godsay(rid, B_FALSE, "That which is hidden shall be revealed!"); break;
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
} else if (arg == F_HEAVYBLOW) {
|
||||||
|
godsay(rid, B_FALSE, "Foes shall be driven away by your blows!"); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -2032,6 +2035,7 @@ int prayto(lifeform_t *lf, lifeform_t *god) {
|
||||||
char assisttext[BUFLEN];
|
char assisttext[BUFLEN];
|
||||||
enum PIETYLEV plev;
|
enum PIETYLEV plev;
|
||||||
int newgod;
|
int newgod;
|
||||||
|
enum ALIGNMENT changealign = AL_NONE;
|
||||||
|
|
||||||
taketime(lf, getactspeed(lf));
|
taketime(lf, getactspeed(lf));
|
||||||
|
|
||||||
|
@ -2069,6 +2073,30 @@ int prayto(lifeform_t *lf, lifeform_t *god) {
|
||||||
// you get some help...
|
// you get some help...
|
||||||
plev = getpietylev(god->race->id, NULL, NULL);
|
plev = getpietylev(god->race->id, NULL, NULL);
|
||||||
|
|
||||||
|
if ((god->race->id == R_GODDEATH) && (getalignment(player) == AL_GOOD)) {
|
||||||
|
char yn;
|
||||||
|
godsay(god->race->id, B_TRUE, "You really wish to walk the path of evil, fleshling?");
|
||||||
|
yn = askchar("Change alignment to Evil?", "yn?", "n", B_TRUE, B_FALSE);
|
||||||
|
if (yn == 'y') {
|
||||||
|
godsay(god->race->id, B_FALSE, "So be it, foolish mortal.");
|
||||||
|
changealign = AL_EVIL;
|
||||||
|
} else {
|
||||||
|
godsay(god->race->id, B_FALSE, "Coward!");
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
} else if ((god->race->id == R_GODLIFE) && (getalignment(player) == AL_EVIL)) {
|
||||||
|
char yn;
|
||||||
|
godsay(god->race->id, B_TRUE, "Are you sure you wish to forsake your evil ways?");
|
||||||
|
yn = askchar("Change alignment to Good?", "yn?", "n", B_TRUE, B_FALSE);
|
||||||
|
if (yn == 'y') {
|
||||||
|
godsay(god->race->id, B_FALSE, "Be welcome, then!");
|
||||||
|
changealign = AL_GOOD;
|
||||||
|
} else {
|
||||||
|
godsay(god->race->id, B_FALSE, "If you reconsider, pray to me.");
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!prayedtoany()) {
|
if (!prayedtoany()) {
|
||||||
// special msg for first time.
|
// special msg for first time.
|
||||||
switch (god->race->id) {
|
switch (god->race->id) {
|
||||||
|
@ -2141,6 +2169,13 @@ int prayto(lifeform_t *lf, lifeform_t *god) {
|
||||||
}
|
}
|
||||||
godsay(god->race->id, B_TRUE, assisttext);
|
godsay(god->race->id, B_TRUE, assisttext);
|
||||||
|
|
||||||
|
if (changealign != AL_NONE) {
|
||||||
|
setalignment(player, changealign);
|
||||||
|
msg("^gYour alignment has changed to %s!", getalignmentname(changealign));
|
||||||
|
more();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// at this point, remember that we have now prayed to
|
// at this point, remember that we have now prayed to
|
||||||
// this god. ie. player is expected to follow the god's rules.
|
// this god. ie. player is expected to follow the god's rules.
|
||||||
|
|
4
io.c
4
io.c
|
@ -13371,6 +13371,10 @@ void showlfstats(lifeform_t *lf, int showall) {
|
||||||
mvwprintw(mainwin, y, 0, "%s %s %s resistant to magic.", you(lf), is(lf), adjective);
|
mvwprintw(mainwin, y, 0, "%s %s %s resistant to magic.", you(lf), is(lf), adjective);
|
||||||
y++;
|
y++;
|
||||||
}
|
}
|
||||||
|
f = hasflag_real(lf->flags, F_FEARLESS, B_TRUE, NULL, FROMRACE);
|
||||||
|
if (f) {
|
||||||
|
wrapprint(mainwin, &y, &x, 0, "%s %s immune to the effects of fear.", you(lf), is(lf));
|
||||||
|
}
|
||||||
|
|
||||||
f = hasflag_real(lf->flags, F_FASTMETAB, B_TRUE, NULL, FROMRACE);
|
f = hasflag_real(lf->flags, F_FASTMETAB, B_TRUE, NULL, FROMRACE);
|
||||||
if (f) {
|
if (f) {
|
||||||
|
|
37
lf.c
37
lf.c
|
@ -325,8 +325,10 @@ long calcscore(lifeform_t *lf) {
|
||||||
// the game.
|
// the game.
|
||||||
if (winner) {
|
if (winner) {
|
||||||
points += getobpoints(o);
|
points += getobpoints(o);
|
||||||
} else {
|
} else if (isknown(o)) {
|
||||||
points += (getobpoints(o)/4);
|
points += (getobpoints(o)/4);
|
||||||
|
} else {
|
||||||
|
points += (getobpoints(o)/6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// donated items etc
|
// donated items etc
|
||||||
|
@ -12156,12 +12158,21 @@ void givestartobs(lifeform_t *lf, object_t *targob, flagpile_t *fp) {
|
||||||
|
|
||||||
// handle autoweapon
|
// handle autoweapon
|
||||||
if (lf && hasflag(fp, F_SELECTWEAPON)) {
|
if (lf && hasflag(fp, F_SELECTWEAPON)) {
|
||||||
skill_t *sk;
|
//skill_t *sk;
|
||||||
flag_t *f2;
|
flag_t *f2;
|
||||||
objecttype_t *poss[MAXSKILLS];
|
objecttype_t *poss[MAXSKILLS];
|
||||||
int nposs = 0, i;
|
int nposs = 0, i;
|
||||||
|
flag_t *retflag[MAXCANDIDATES];
|
||||||
|
int nretflags;
|
||||||
|
|
||||||
|
getflags(fp, retflag, &nretflags, F_SELECTWEAPON, F_NONE);
|
||||||
|
for (i = 0; i < nretflags; i++) {
|
||||||
|
poss[nposs++] = findot(retflag[i]->val[0]);
|
||||||
|
}
|
||||||
|
|
||||||
// find all the weapon skills this lf can learn
|
// find all the weapon skills this lf can learn
|
||||||
// and get basic objects of this type
|
// and get basic objects of this type
|
||||||
|
/*
|
||||||
for (sk = firstskill ; sk ; sk = sk->next) {
|
for (sk = firstskill ; sk ; sk = sk->next) {
|
||||||
if (isweaponskill(sk->id)) {
|
if (isweaponskill(sk->id)) {
|
||||||
if (canlearn(lf, sk->id) || getskill(lf, sk->id)) {
|
if (canlearn(lf, sk->id) || getskill(lf, sk->id)) {
|
||||||
|
@ -12173,6 +12184,7 @@ void givestartobs(lifeform_t *lf, object_t *targob, flagpile_t *fp) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
if (nposs) {
|
if (nposs) {
|
||||||
objecttype_t *ot = NULL;
|
objecttype_t *ot = NULL;
|
||||||
char ch = 'a';
|
char ch = 'a';
|
||||||
|
@ -14708,6 +14720,7 @@ lifeform_t *real_addlf(cell_t *cell, enum RACE rid, int level, int controller) {
|
||||||
a->los = NULL; // will be alloced in precalclos
|
a->los = NULL; // will be alloced in precalclos
|
||||||
//a->losdark = NULL; // will be alloced in precalclos
|
//a->losdark = NULL; // will be alloced in precalclos
|
||||||
a->nlos = 0;
|
a->nlos = 0;
|
||||||
|
a->loslock = B_FALSE;
|
||||||
//a->nlosdark = 0;
|
//a->nlosdark = 0;
|
||||||
|
|
||||||
//a->eyeadjustment = 0;
|
//a->eyeadjustment = 0;
|
||||||
|
@ -18528,6 +18541,8 @@ void precalclos(lifeform_t *lf) {
|
||||||
|
|
||||||
if (gamemode == GM_CLEANUP) return;
|
if (gamemode == GM_CLEANUP) return;
|
||||||
|
|
||||||
|
if (lf->loslock) return;
|
||||||
|
|
||||||
if (lf->cell->type->id == CT_FAKE) return;
|
if (lf->cell->type->id == CT_FAKE) return;
|
||||||
|
|
||||||
if (lf->los) {
|
if (lf->los) {
|
||||||
|
@ -20040,11 +20055,7 @@ int scare(lifeform_t *lf, lifeform_t *scarer, int howlong, int scarerbonus) {
|
||||||
|
|
||||||
void setalignment(lifeform_t *lf, enum ALIGNMENT al) {
|
void setalignment(lifeform_t *lf, enum ALIGNMENT al) {
|
||||||
flag_t *f;
|
flag_t *f;
|
||||||
if (isplayer(lf)) {
|
|
||||||
dblog("warning - changing player alignment");
|
|
||||||
msg("warning - changing player alignment");
|
|
||||||
more();
|
|
||||||
}
|
|
||||||
f = lfhasflag(lf, F_ALIGNMENT);
|
f = lfhasflag(lf, F_ALIGNMENT);
|
||||||
if (f) {
|
if (f) {
|
||||||
f->val[0] = al;
|
f->val[0] = al;
|
||||||
|
@ -20157,6 +20168,9 @@ void setbodytype(race_t *r, enum BODYTYPE bt) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int setfacing(lifeform_t *lf, int dir) {
|
int setfacing(lifeform_t *lf, int dir) {
|
||||||
|
if (dir < 0) {
|
||||||
|
raise(SIGINT);
|
||||||
|
}
|
||||||
if (isclimbing(lf)) { // can't change dir while climbing
|
if (isclimbing(lf)) { // can't change dir while climbing
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
|
@ -21985,11 +21999,16 @@ void startlfturn(lifeform_t *lf) {
|
||||||
dir = 1;
|
dir = 1;
|
||||||
chance = piety;
|
chance = piety;
|
||||||
limit(&chance, 10, 100);
|
limit(&chance, 10, 100);
|
||||||
|
} else {
|
||||||
|
if (lfhasflagval(player, F_NOPIETYLOSS, godlf[i]->race->id, NA, NA, NULL)) {
|
||||||
|
dir = 0;
|
||||||
|
chance = 0;
|
||||||
} else {
|
} else {
|
||||||
dir = -1;
|
dir = -1;
|
||||||
chance = 100 - (piety-200); // ie. 100 max
|
chance = 100 - (piety-200); // ie. 100 max
|
||||||
limit(&chance, 1, 50);
|
limit(&chance, 1, 50);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
// the further away from neutral you are, the less chance
|
// the further away from neutral you are, the less chance
|
||||||
// piety/anger has of 'expiring'
|
// piety/anger has of 'expiring'
|
||||||
if (pctchance(chance)) {
|
if (pctchance(chance)) {
|
||||||
|
@ -22222,6 +22241,8 @@ void startlfturn(lifeform_t *lf) {
|
||||||
if (f && !lfhasflag(lf, F_HOSTILE) &&
|
if (f && !lfhasflag(lf, F_HOSTILE) &&
|
||||||
!isinbattle(lf, B_INCLUDEDISTANT, B_FALSE) &&
|
!isinbattle(lf, B_INCLUDEDISTANT, B_FALSE) &&
|
||||||
!isfleeing(lf) && !isplayer(lf)) {
|
!isfleeing(lf) && !isplayer(lf)) {
|
||||||
|
|
||||||
|
lf->loslock = B_TRUE;
|
||||||
for (i = 1 ; i < lf->nlos; i++) {
|
for (i = 1 ; i < lf->nlos; i++) {
|
||||||
lifeform_t *otherlf;
|
lifeform_t *otherlf;
|
||||||
otherlf = lf->los[i]->lf;
|
otherlf = lf->los[i]->lf;
|
||||||
|
@ -22242,6 +22263,7 @@ void startlfturn(lifeform_t *lf) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
lf->loslock = B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
f = lfhasflag(lf, F_AUTOROTATE);
|
f = lfhasflag(lf, F_AUTOROTATE);
|
||||||
|
@ -24221,6 +24243,7 @@ int real_touch(lifeform_t *lf, object_t *o, int onpurpose) {
|
||||||
void turntoface(lifeform_t *lf, cell_t *dstcell) {
|
void turntoface(lifeform_t *lf, cell_t *dstcell) {
|
||||||
if (isdead(lf)) return;
|
if (isdead(lf)) return;
|
||||||
if (lfhasflag(lf, F_AUTOROTATE)) return;
|
if (lfhasflag(lf, F_AUTOROTATE)) return;
|
||||||
|
if (dstcell == lf->cell) return;
|
||||||
// not providing srclf, since this will make getdirtowards() not include
|
// not providing srclf, since this will make getdirtowards() not include
|
||||||
// directions in which the next cell is unwalkable. in this case we're
|
// directions in which the next cell is unwalkable. in this case we're
|
||||||
// not actually walking there, so we don't care.
|
// not actually walking there, so we don't care.
|
||||||
|
|
2
move.c
2
move.c
|
@ -220,8 +220,10 @@ int celldangerous(lifeform_t *lf, cell_t *cell, int onlyifknown, enum ERROR *err
|
||||||
}
|
}
|
||||||
} else if (o->type->id == OT_HOLYCIRCLE) {
|
} else if (o->type->id == OT_HOLYCIRCLE) {
|
||||||
if (isundead(lf) || lfhasflag(lf, F_LYCANTHROPE)) {
|
if (isundead(lf) || lfhasflag(lf, F_LYCANTHROPE)) {
|
||||||
|
if (error) {
|
||||||
*error = E_AVOIDOB;
|
*error = E_AVOIDOB;
|
||||||
rdata = o;
|
rdata = o;
|
||||||
|
}
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
33
objects.c
33
objects.c
|
@ -3639,8 +3639,7 @@ void explodeob(object_t *o, flag_t *f, int bigness, lifeform_t *causedby) {
|
||||||
cell_t *c;
|
cell_t *c;
|
||||||
int dam;
|
int dam;
|
||||||
char obname[BUFLEN];
|
char obname[BUFLEN];
|
||||||
|
object_t *outerob;
|
||||||
c = getoblocation(o);
|
|
||||||
|
|
||||||
// override causedby
|
// override causedby
|
||||||
if (!causedby) {
|
if (!causedby) {
|
||||||
|
@ -3652,24 +3651,36 @@ void explodeob(object_t *o, flag_t *f, int bigness, lifeform_t *causedby) {
|
||||||
}
|
}
|
||||||
|
|
||||||
dam = roll(f->text);
|
dam = roll(f->text);
|
||||||
getobname(o, obname, o->amt);
|
|
||||||
|
// inside a container? if so, it's the container
|
||||||
|
// which you will see exploding.
|
||||||
|
if (o->pile->parentob) {
|
||||||
|
outerob = o->pile->parentob;
|
||||||
|
} else {
|
||||||
|
outerob = o;
|
||||||
|
}
|
||||||
|
c = getoblocation(outerob);
|
||||||
|
|
||||||
|
getobname(outerob, obname, outerob->amt);
|
||||||
|
|
||||||
// announce
|
// announce
|
||||||
if (o->pile->owner) {
|
if (outerob->pile->owner) {
|
||||||
if (isplayer(o->pile->owner)) {
|
if (isplayer(outerob->pile->owner)) {
|
||||||
msg("^BYour %s explode%s!^n", noprefix(obname),OBS1(o));
|
msg("^BYour %s explode%s!^n", noprefix(obname),OBS1(outerob));
|
||||||
} else if (cansee(player, o->pile->owner)) {
|
} else if (cansee(player, outerob->pile->owner)) {
|
||||||
char lfname[BUFLEN];
|
char lfname[BUFLEN];
|
||||||
getlfname(o->pile->owner, lfname);
|
getlfname(outerob->pile->owner, lfname);
|
||||||
msg("^B%s%s %s explode%s!^n", lfname, getpossessive(lfname), noprefix(obname),OBS1(o));
|
msg("^B%s%s %s explode%s!^n", lfname, getpossessive(lfname), noprefix(obname),OBS1(outerob));
|
||||||
}
|
}
|
||||||
} else if (haslos(player, c)) {
|
} else if (haslos(player, c)) {
|
||||||
msg("^B%s explode%s!^n", obname,OBS1(o));
|
msg("^B%s explode%s!^n", obname,OBS1(outerob));
|
||||||
}
|
}
|
||||||
explodecells(c, dam * o->amt, bigness ? B_TRUE : B_FALSE, o, bigness , DT_ORTH, B_FALSE, causedby);
|
explodecells(c, dam * o->amt, bigness ? B_TRUE : B_FALSE, o, bigness , DT_ORTH, B_FALSE, causedby);
|
||||||
|
|
||||||
// object dies.
|
// object dies.
|
||||||
removeob(o, o->amt);
|
//removeob(o, o->amt);
|
||||||
|
// explode the container
|
||||||
|
removeob(outerob, outerob->amt);
|
||||||
}
|
}
|
||||||
|
|
||||||
void extinguish(object_t *o) {
|
void extinguish(object_t *o) {
|
||||||
|
|
5
spell.c
5
spell.c
|
@ -7924,7 +7924,8 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
if (isplayer(target)) {
|
if (isplayer(target)) {
|
||||||
char obname[BUFLEN];
|
char obname[BUFLEN];
|
||||||
getobname(dropob[i], obname, dropob[i]->amt);
|
getobname(dropob[i], obname, dropob[i]->amt);
|
||||||
msg("^BYour %s %s too hot to hold!", obname, (o->amt == 1) ? "is" : "are");
|
msg("^BYour %s %s too hot to hold!", obname,
|
||||||
|
(dropob[i]->amt == 1) ? "is" : "are");
|
||||||
}
|
}
|
||||||
drop(dropob[i], dropob[i]->amt);
|
drop(dropob[i], dropob[i]->amt);
|
||||||
}
|
}
|
||||||
|
@ -11069,7 +11070,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
||||||
fizzle(caster);
|
fizzle(caster);
|
||||||
return B_TRUE;
|
return B_TRUE;
|
||||||
}
|
}
|
||||||
amttolose = power*2;
|
amttolose = roll("1d6") + power;
|
||||||
if (isplayer(target)) {
|
if (isplayer(target)) {
|
||||||
msg("^%cYou suddenly feel very lethargic!", getlfcol(target, CC_BAD));
|
msg("^%cYou suddenly feel very lethargic!", getlfcol(target, CC_BAD));
|
||||||
} else if (cansee(player, target)) {
|
} else if (cansee(player, target)) {
|
||||||
|
|
8
text.c
8
text.c
|
@ -246,7 +246,11 @@ char *construct_hit_string(lifeform_t *lf, lifeform_t *victim, char *attackernam
|
||||||
if (!victim || getlorelevel(lf, victim->race->raceclass->id)) {
|
if (!victim || getlorelevel(lf, victim->race->raceclass->id)) {
|
||||||
if (!lfhasflag(lf, F_PHANTASM)) {
|
if (!lfhasflag(lf, F_PHANTASM)) {
|
||||||
//strcpy(extradambuf, " but do no damage");
|
//strcpy(extradambuf, " but do no damage");
|
||||||
|
if (onein(2)) {
|
||||||
strcpy(extradambuf, " ineffectually");
|
strcpy(extradambuf, " ineffectually");
|
||||||
|
} else {
|
||||||
|
strcpy(extradambuf, ", but do no damage.");
|
||||||
|
}
|
||||||
knownnodam = B_TRUE;
|
knownnodam = B_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -335,7 +339,11 @@ char *construct_hit_string(lifeform_t *lf, lifeform_t *victim, char *attackernam
|
||||||
strcpy(nodamstr, "");
|
strcpy(nodamstr, "");
|
||||||
if ((dam == 0) && (damtype != DT_TOUCH) && !lfhasflag(lf, F_PHANTASM)) {
|
if ((dam == 0) && (damtype != DT_TOUCH) && !lfhasflag(lf, F_PHANTASM)) {
|
||||||
nodam = B_TRUE;
|
nodam = B_TRUE;
|
||||||
|
if (onein(2)) {
|
||||||
strcpy(nodamstr, " ineffectually");
|
strcpy(nodamstr, " ineffectually");
|
||||||
|
} else {
|
||||||
|
strcpy(nodamstr, ", but does no damage");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (backstab && (idx == 0)) {
|
if (backstab && (idx == 0)) {
|
||||||
|
|
Loading…
Reference in New Issue