diff --git a/attack.c b/attack.c index bc52899..df2c1ae 100644 --- a/attack.c +++ b/attack.c @@ -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; + } + } } } diff --git a/data.c b/data.c index 731054d..25afcce 100644 --- a/data.c +++ b/data.c @@ -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); diff --git a/data/hiscores.db b/data/hiscores.db index 1a33ad2..a0fbcdf 100644 Binary files a/data/hiscores.db and b/data/hiscores.db differ diff --git a/data/vaults/woodsboss1.vlt b/data/vaults/woodsboss1.vlt index 9ebda54..2a65c1e 100644 --- a/data/vaults/woodsboss1.vlt +++ b/data/vaults/woodsboss1.vlt @@ -32,5 +32,6 @@ mayrotate tag:forestboss maintainedge nostairs +monstersstay @end diff --git a/defs.h b/defs.h index 6e86bc1..dcbe787 100644 --- a/defs.h +++ b/defs.h @@ -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. diff --git a/god.c b/god.c index ababcca..306c226 100644 --- a/god.c +++ b/god.c @@ -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; diff --git a/io.c b/io.c index 6d68856..463b43b 100644 --- a/io.c +++ b/io.c @@ -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; diff --git a/lf.c b/lf.c index 77e5f13..c9c0dc1 100644 --- a/lf.c +++ b/lf.c @@ -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; // diff --git a/map.c b/map.c index c9ee877..3b5f239 100644 --- a/map.c +++ b/map.c @@ -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; diff --git a/nexus.c b/nexus.c index 34666ed..f890fcc 100644 --- a/nexus.c +++ b/nexus.c @@ -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)) { - int h,m,s; - splittime(&h, &m, &s); - if (h == 6) { - msg("The sun is rising."); - } else if (h == 18) { - msg("The sun is setting."); + 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); } diff --git a/vault.c b/vault.c index 8165ca1..fe4d84b 100644 --- a/vault.c +++ b/vault.c @@ -411,7 +411,9 @@ int addvaultthing(cell_t *c, vault_t *v, enum VAULTTHING vt, char *what) { } */ if (lf && hasflag(v->flags, F_MONSTERSSTAY)) { - addflag(lf->flags, F_STAYINROOM, getroomid(c), B_MAYCHASE, NA, NULL); + if (!lfhasflag(lf, F_STAYINROOM)) { + addflag(lf->flags, F_STAYINROOM, getroomid(c), B_MAYCHASE, NA, NULL); + } } break; case VT_CELL: