- [+] glorana should accept scarifice of undead corpses.

- [+] babayagahut stay in vault not working. am i allowing it to pursue
      out ?
- [+] babayagahut shoud ahve nobleed
- [+] scourge shouldn't get heavy blow etc
- [+] problem - scourge was able to learn allomancy.
- [+] rats should squeak
- [+] bug: anticipate spell lasting forever.
- [+] time announcements if you have a watch
    - [+] night is falling
        - [+] undead will be stronger
    - [+] sun is rising outside
        - [+] undead weaker
This commit is contained in:
Rob Pearce 2012-07-04 06:01:07 +00:00
parent 042ade4ca6
commit 2603d35bc7
11 changed files with 93 additions and 37 deletions

View File

@ -1355,7 +1355,7 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag)
killflag(magicarm);
} else {
if (cansee(player, victim)) {
msg("^%c%s%s %s pulses!^n",
msg("^%d%s%s %s pulses!^n",
CC_GOOD,
victimname, getpossessive(victimname),
magicarm->text);
@ -1522,10 +1522,8 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag)
buf, getpossessive(buf));
}
} else {
int anticipated = B_FALSE;
if (lfhasflagval(victim, F_ANTICIPATE, lf->id, NA, NA, NULL)) {
anticipated = B_TRUE;
}
flag_t *anticipated = NULL;
anticipated = lfhasflagval(victim, F_ANTICIPATE, lf->id, NA, NA, NULL);
if (isplayer(lf)) {
msg("You %smiss %s.", anticipated ? "wildly " : "", victimname);
} else {
@ -1562,6 +1560,14 @@ int attacklf(lifeform_t *lf, lifeform_t *victim, object_t *wep, flag_t *damflag)
}
}
}
// anticipated spells lose power
if (anticipated) {
if (--anticipated->val[1] <= 0) {
killflag(anticipated);
anticipated = NULL;
}
}
}
}

16
data.c
View File

@ -5346,12 +5346,14 @@ void initobjects(void) {
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_HOLDCONFER, F_KNOWSTIME, B_FALSE, IFKNOWN, NULL);
addot(OT_DIGITALWATCH, "digital watch", "An electronic timekeeping device which shows the time as a number.", MT_METAL, 0.1, OC_TECH, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_ALL, 85, NA, NULL);
addflag(lastot->flags, F_VALUE, 50, NA, NA, NULL);
addflag(lastot->flags, F_OPERABLE, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_TECHLEVEL, PR_NOVICE, NA, NA, NULL);
addflag(lastot->flags, F_HASHIDDENNAME, B_TRUE, NA, NA, NULL);
addflag(lastot->flags, F_HOLDCONFER, F_KNOWSTIME, B_TRUE, IFKNOWN, NULL);
addot(OT_INSECTICIDE, "can of insecticide", "A spraycan containing poisonous chemicals.", MT_METAL, 0.5, OC_TECH, SZ_TINY);
addflag(lastot->flags, F_RARITY, H_SWAMP, 85, RR_COMMON, NULL);
addflag(lastot->flags, F_RARITY, H_ALL, 85, RR_UNCOMMON, NULL);
@ -8868,6 +8870,7 @@ void initrace(void) {
addbodypart(lastrace, BP_FEET, "feet");
addflag(lastrace->flags, F_NAME, NA, NA, NA, "Baba Yaga's hut");
addflag(lastrace->flags, F_CORPSETYPE, NA, NA, NA, "wooden hut");
addflag(lastrace->flags, F_BLOODOB, NA, NA, NA, NULL);
addflag(lastrace->flags, F_HOSTILE, NA, NA, NA, NULL);
addflag(lastrace->flags, F_SIZE, SZ_HUGE, NA, NA, NULL);
addflag(lastrace->flags, F_HITDICE, 5, NA, NA, NULL);
@ -8885,7 +8888,7 @@ void initrace(void) {
addflag(lastrace->flags, F_STARTATT, A_WIS, AT_EXLOW, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_CON, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_STARTATT, A_CHA, AT_AVERAGE, NA, NULL);
addflag(lastrace->flags, F_STAYINROOM, NA, B_MAYCHASE, NA, NULL);
addflag(lastrace->flags, F_STAYINROOM, NA, B_NOCHASE, NA, NULL);
addflag(lastrace->flags, F_AWARENESS, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_A_JUMP, NA, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_WALK, 2, NA, "^clucking");
@ -9967,6 +9970,7 @@ void initrace(void) {
addflag(lastrace->flags, F_GODDISLIKES, NA, NA, NA, "attacking peaceful creatures");
addflag(lastrace->flags, F_HATESRACECLASS, RC_UNDEAD, NA, NA, NULL);
// sacrifices
addflag(lastrace->flags, F_SACRIFICEOB, OT_CORPSE, RC_UNDEAD, 30, "OB IS consumed by a shaft of holy light.");
addflag(lastrace->flags, F_SACRIFICEOB, OT_POT_HEALINGMIN, NA, 10, "OB IS consumed by a shaft of holy light.");
addflag(lastrace->flags, F_SACRIFICEOB, OT_POT_HEALING, NA, 20, "OB IS consumed by a shaft of holy light.");
addflag(lastrace->flags, F_SACRIFICEOB, OT_POT_HEALINGMAJ, NA, 30, "OB IS consumed by a shaft of holy light.");
@ -13687,7 +13691,7 @@ void initrace(void) {
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 2, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_CLAWS, 2, NA, NULL);
addflag(lastrace->flags, F_HASATTACK, OT_TEETH, 6, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "roars^a roar");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "growls^growling");
addflag(lastrace->flags, F_SEEINDARK, 5, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 6, NA, NA, NULL);
addflag(lastrace->flags, F_CANWILL, OT_A_JUMP, NA, NA, "stamcost:0;");
@ -13770,7 +13774,7 @@ void initrace(void) {
addflag(lastrace->flags, F_CANWILL, OT_A_JUMP, NA, NA, "stamcost:0;");
addflag(lastrace->flags, F_CANWILL, OT_A_CHARGE, NA, NA, NULL);
addflag(lastrace->flags, F_CASTCHANCE, 50, NA, NA, NULL);
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "roars^a roar");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 2, NA, "growls^growling");
addflag(lastrace->flags, F_SEEINDARK, 5, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 6, NA, NA, NULL);
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
@ -14752,6 +14756,8 @@ void initrace(void) {
addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL);
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_WALKVERB, NA, NA, NA, "scuttle");
addflag(lastrace->flags, F_NOISETEXT, N_WALK, 1, NA, "^squeaking");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 1, NA, "squeaks^squeaking");
addrace(R_RATDIRE, "dire rat", 3, 'r', C_MAGENTA, MT_FLESH, RC_ANIMAL, "Dire rats are massive rats, larger than most dogs. Unlike dogs, dire rats are equipped with razor sharp shark-like teeth and their bite is very much worse than their bark.");
setbodytype(lastrace, BT_QUADRAPED);
@ -14783,6 +14789,8 @@ void initrace(void) {
addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL);
addflag(lastrace->flags, F_MORALE, 4, NA, NA, NULL);
addflag(lastrace->flags, F_WALKVERB, NA, NA, NA, "scuttle");
addflag(lastrace->flags, F_NOISETEXT, N_WALK, 1, NA, "^squeaking");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 1, NA, "squeaks^squeaking");
addrace(R_RATPLAGUE, "plague rat", 3, 'r', C_GREEN, MT_FLESH, RC_ANIMAL, "Plague rats are named both for their infectious bite as well as the great speed at which they run.");
setbodytype(lastrace, BT_QUADRAPED);
@ -14815,6 +14823,8 @@ void initrace(void) {
addflag(lastrace->flags, F_DTVULN, DT_POISONGAS, NA, NA, NULL);
addflag(lastrace->flags, F_CANEATRAW, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_WALKVERB, NA, NA, NA, "scuttle");
addflag(lastrace->flags, F_NOISETEXT, N_WALK, 1, NA, "^squeaking");
addflag(lastrace->flags, F_NOISETEXT, N_GETANGRY, 1, NA, "squeaks^squeaking");
addflag(lastrace->flags, F_POISONCORPSE, B_TRUE, NA, NA, NULL);
addflag(lastrace->flags, F_FILLPOT, OT_POT_POISON, NA, NA, NULL);

Binary file not shown.

View File

@ -32,5 +32,6 @@ mayrotate
tag:forestboss
maintainedge
nostairs
monstersstay
@end

3
defs.h
View File

@ -3582,6 +3582,9 @@ enum FLAG {
F_INVISIBLE, // lifeform is invisible
F_INVULNERABLE,// immune to most damage
// this can apply to objects too!
F_KNOWSTIME, // this lf knows what time it is.
// v0 = false means you know 12 hour time
// v1 = true means you know 24 hour time
F_GRAVBOOSTED,// cannot walk or throw stuff
F_GRAVLESSENED,// knockback maeks you go further, can jump further
// your current load is reduce by v0 * 15kg.

2
god.c
View File

@ -2069,7 +2069,7 @@ int prayto(lifeform_t *lf, lifeform_t *god) {
if (isinbattle(lf, B_INCLUDEDISTANT, B_FALSE)) {
if (plev >= PL_INDIFFERENT) {
int pow;
pow = plev + 2;
pow = plev + 1;
limit(&pow, 1, getspellmaxpower(OT_S_HEAVENARM));
dospelleffects(NULL, OT_S_HEAVENARM, pow, player, NULL, player->cell, B_UNCURSED, NULL, B_FALSE, NULL);
donesomething = B_TRUE;

9
io.c
View File

@ -1321,7 +1321,7 @@ int announceflaggain(lifeform_t *lf, flag_t *f) {
lf2 = findlf(NULL, f->val[0]);
if (lf2) {
getlfname(lf2, buf);
msg("%s%s intentions enter your mind!", buf, getpossessive(buf));
msg("^%d%s%s intentions enter your mind!", getlfcol(lf, CC_GOOD), buf, getpossessive(buf));
donesomething = B_TRUE;
}
}
@ -2102,7 +2102,7 @@ int announceflagloss(lifeform_t *lf, flag_t *f) {
lf2 = findlf(NULL, f->val[0]);
if (lf2) {
getlfname(lf2, buf);
msg("You no longer know %s%s intentions.", buf, getpossessive(buf));
msg("^%dYou no longer know %s%s intentions.", getlfcol(lf, CC_BAD), buf, getpossessive(buf));
donesomething = B_TRUE;
}
}
@ -2390,7 +2390,10 @@ int announceflagloss(lifeform_t *lf, flag_t *f) {
msg("^%dYour %s vanishes!", getlfcol(lf, CC_BAD), f->text);
donesomething = B_TRUE;
} else {
msg("^%d%s%s %s vanishes!", getlfcol(lf, CC_BAD), lfname, getpossessive(lfname), f->text);
char text[BUFLEN];
sprintf(text,"%s%s %s vanishes!", lfname, getpossessive(lfname), f->text);
capitalise(text);
msg("^%d%s", getlfcol(lf, CC_BAD), text);
donesomething = B_TRUE;
}
break;

31
lf.c
View File

@ -10786,8 +10786,11 @@ void givesubjob(lifeform_t *lf, enum SUBJOB sj) {
}
break;
case SJ_SCOURGE:
// remove warrior's level abilities
killflagsofid(lf->flags, F_LEVABIL);
// magic resistance at level 5
addtempflag(lf->flags, F_RESISTMAG, 5, NA, NA, NULL, FROMJOB);
// no mp other other magic.
// no mp or other magic.
killflagsofid(lf->flags, F_MPDICE);
killflagsofid(lf->flags, F_CANCAST);
f = lfhasflagval(lf, F_HASSKILL, SK_SS_ALLOMANCY, NA, NA, NULL);
@ -10804,19 +10807,19 @@ void givesubjob(lifeform_t *lf, enum SUBJOB sj) {
addtempflag(lf->flags, F_LEVABIL, 16, OT_S_NULLIFY, NA, "pw:8;", FROMJOB);
addtempflag(lf->flags, F_LEVABIL, 18, OT_S_NULLIFY, NA, "pw:9;", FROMJOB);
addtempflag(lf->flags, F_LEVABIL, 20, OT_S_NULLIFY, NA, "pw:10;", FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_ALLOMANCY, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_MENTAL, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_NATURE, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_AIR, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_DEATH, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_DIVINATION, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_FIRE, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_COLD, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_LIFE, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_MODIFICATION, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_SUMMONING, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_TRANSLOCATION, NA, NA, NULL,FROMJOB);
addtempflag(lastrace->flags, F_NOSKILL, SK_SS_WILD, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_ALLOMANCY, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_MENTAL, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_NATURE, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_AIR, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_DEATH, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_DIVINATION, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_FIRE, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_COLD, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_LIFE, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_MODIFICATION, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_SUMMONING, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_TRANSLOCATION, NA, NA, NULL,FROMJOB);
addtempflag(lf->flags, F_NOSKILL, SK_SS_WILD, NA, NA, NULL,FROMJOB);
break;
//

2
map.c
View File

@ -7676,7 +7676,7 @@ int isnewcellok(cell_t *cell, char *err) {
int isnighttime(void) {
int hours,mins,secs;
splittime(&hours,&mins,&secs);
if ((hours < 7) || (hours >= 19)) {
if ((hours < 6) || (hours >= 20)) {
return B_TRUE;
}
return B_FALSE;

34
nexus.c
View File

@ -1891,18 +1891,46 @@ void timeeffectsworld(map_t *map, int updategametime) {
}
}
/*
// if it's the player's turn, announce sun set/rise
if (isplayer(map->lf) && isoutdoors(map)) {
if (isplayer(map->lf)) {
flag_t *f;
f = lfhasflag(map->lf, F_KNOWSTIME);
if (f) {
int h,m,s;
splittime(&h, &m, &s);
if (m <= 10) {
if (f->val[1] == B_TRUE) {
if (h == 6) {
msg("The sun is rising.");
} else if (h == 8) {
msg("It is now daytime.");
if (getskill(player, SK_LORE_UNDEAD) >= PR_ADEPT) {
real_warnabout("The undead will be less dangerous now.", 200, B_FALSE);
}
} else if (h == 12) {
msg("It is now Noon.");
} else if (h == 18) {
msg("The sun is setting.");
} else if (h == 20) {
msg("It is now nighttime.");
if (getskill(player, SK_LORE_UNDEAD) >= PR_ADEPT) {
real_warnabout("The undead will be more dangerous!", 200, B_FALSE);
}
} else if (h == 0) {
msg("It is now Midnight.");
}
} else {
if ((h == 0) || (h == 12)) {
msg("It is now 12 o'clock.");
} else if ((h == 6) || (h == 18)) {
msg("It is now 6 o'clock.");
} else if ((h == 8) || (h == 20)) {
msg("It is now 8 o'clock.");
}
}
}
}
}
*/
if (db) dblog("cur time is %ld\n",curtime);
}

View File

@ -411,8 +411,10 @@ int addvaultthing(cell_t *c, vault_t *v, enum VAULTTHING vt, char *what) {
}
*/
if (lf && hasflag(v->flags, F_MONSTERSSTAY)) {
if (!lfhasflag(lf, F_STAYINROOM)) {
addflag(lf->flags, F_STAYINROOM, getroomid(c), B_MAYCHASE, NA, NULL);
}
}
break;
case VT_CELL:
if (streq(what, "EMPTY")) {