Genies should be immune to cold
Objects/lfs made of gas shouldn't be able to be knocked backwards
This commit is contained in:
parent
1b8980db09
commit
4a7711d110
6
ai.c
6
ai.c
|
@ -1631,6 +1631,7 @@ int ai_housekeeping(lifeform_t *lf, lifeform_t *master) {
|
|||
|
||||
if (lfhasflag(lf, F_ISPRISONER) && master && isplayer(master) &&
|
||||
(cansee(lf, master) || isadjacent(lf->cell,master->cell))) {
|
||||
// soon after escaping the dungeon, they'll leave you.
|
||||
if (isoutdoors(lf->cell->map) && pctchance(85)) {
|
||||
object_t *o;
|
||||
say(lf, "Thanks for getting me out!", SV_TALK);
|
||||
|
@ -1641,7 +1642,7 @@ int ai_housekeeping(lifeform_t *lf, lifeform_t *master) {
|
|||
getobname(o, obname, o->amt);
|
||||
msgnocap("%c - %s", o->letter, obname);
|
||||
}
|
||||
// no longer an ally - but don't announce this.
|
||||
// no longer an ally
|
||||
killflagsofid(lf->flags, F_FRIENDLY);
|
||||
killflagsofid(lf->flags, F_PETOF);
|
||||
killflagsofid(lf->flags, F_ISPRISONER);
|
||||
|
@ -1881,6 +1882,9 @@ int ai_movement(lifeform_t *lf) {
|
|||
// can see a non-enemy on top of the object, and we are adjacent
|
||||
valid = B_FALSE;
|
||||
}
|
||||
} else {
|
||||
// weird ?
|
||||
raise (SIGINT);
|
||||
}
|
||||
|
||||
if (valid) {
|
||||
|
|
1
data.c
1
data.c
|
@ -12493,6 +12493,7 @@ void initrace(void) {
|
|||
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_HIGH, NA, NULL);
|
||||
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_HIGH, NA, NULL);
|
||||
addflag(lastrace->flags, F_DTIMMUNE, DT_PROJECTILE, NA, NA, NULL);
|
||||
addflag(lastrace->flags, F_DTIMMUNE, DT_COLD, NA, NA, NULL);
|
||||
addflag(lastrace->flags, F_HASATTACK, OT_FISTS, 7, NA, NULL);
|
||||
addflag(lastrace->flags, F_STARTOB, 100, NA, NA, "2 scimitars");
|
||||
addflag(lastrace->flags, F_STARTOB, 50, NA, NA, "silk shirt");
|
||||
|
|
2
lf.c
2
lf.c
|
@ -24170,7 +24170,7 @@ void startlfturn(lifeform_t *lf) {
|
|||
}
|
||||
|
||||
// extra effects
|
||||
if (!ko && (f->val[0] == P_COLD)) {
|
||||
if (!ko && (f->val[0] == P_COLD) && !isimmuneto(lf->flags, DT_COLD, B_FALSE)) {
|
||||
if (rnd(1,100) <= 10) {
|
||||
shiver(lf);
|
||||
}
|
||||
|
|
6
move.c
6
move.c
|
@ -895,6 +895,11 @@ int knockback(lifeform_t *lf, int dir, int howfar, lifeform_t *pusher, int fallc
|
|||
int preventchance = 0;
|
||||
enum LFSIZE lfsize;
|
||||
|
||||
// can't knock non-solid things back
|
||||
if (getmaterialstate(getlfmaterial(lf)) != MS_SOLID) {
|
||||
return B_TRUE;
|
||||
}
|
||||
|
||||
if (lfhasflag(lf, F_GRAVLESSENED)) {
|
||||
howfar *= 2;
|
||||
} else if (lfhasflag(lf, F_GRAVBOOSTED)) {
|
||||
|
@ -2656,6 +2661,7 @@ int initiatemove(lifeform_t *lf, cell_t *cell, int onpurpose, int *didmsg) {
|
|||
|
||||
if (willstand) {
|
||||
standup(lf);
|
||||
|
||||
reason = E_OK;
|
||||
// doesn't count as a move for monster who were feigning death!
|
||||
if (!isplayer(lf) && lfhasflag(lf, F_FEIGNINGDEATH)) {
|
||||
|
|
|
@ -16277,7 +16277,8 @@ void timeeffectsob(object_t *o) {
|
|||
object_t *oo;
|
||||
lf = o->pile->where->lf;
|
||||
creator = getobcreatedby(o);
|
||||
if (lf && (lf != creator) ) {
|
||||
|
||||
if (lf && (lf != creator) && (getmaterialstate(getlfmaterial(lf)) == MS_SOLID)) {
|
||||
char damstring[BUFLEN];
|
||||
if (cansee(player, lf)) {
|
||||
char lfname[BUFLEN];
|
||||
|
@ -16302,9 +16303,12 @@ void timeeffectsob(object_t *o) {
|
|||
// objects get knocked away
|
||||
for (oo = o->pile->where->obpile->first ; oo ; oo = oo->next) {
|
||||
if (oo == o) continue;
|
||||
|
||||
|
||||
// note: f_nopickup obs will still get moved!
|
||||
if (hasflag(oo->flags, F_COSMETIC) || hasflag(oo->flags, F_CLIMBABLE) ||
|
||||
(hasflag(oo->flags, F_TRAIL)) ||
|
||||
(getmaterialstate(o->material->id) != MS_SOLID) ||
|
||||
(hasflag(oo->flags, F_KNOCKAWAY)) || // don't affect other wind knockaway objects
|
||||
(oo->type->obclass->id == OC_BUILDING)) {
|
||||
} else {
|
||||
|
|
4
spell.c
4
spell.c
|
@ -8313,7 +8313,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
|||
if (cansee(player, target)) {
|
||||
if (seenbyplayer) *seenbyplayer = B_TRUE;
|
||||
}
|
||||
makehot(o, amt, rnd(1,2));
|
||||
makehot(o, amt, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8343,7 +8343,7 @@ int dospelleffects(lifeform_t *caster, enum OBTYPE spellid, int power, lifeform_
|
|||
if (seenbyplayer) *seenbyplayer = B_TRUE;
|
||||
donesomething = B_TRUE;
|
||||
}
|
||||
makehot(o, amt, rnd(1,2));
|
||||
makehot(o, amt, 2);
|
||||
if (isplayer(caster)) {
|
||||
char obname[BUFLEN];
|
||||
getobname(o, obname, o->amt);
|
||||
|
|
Loading…
Reference in New Issue