Lower level of Perception needed to widen FOV.

Make monsters stay unconsciousness  for longer.
Make loseconsciousness() time actually work.
Merciful fighting now works more reliably (and is shown in the status bar)
This commit is contained in:
Rob Pearce 2023-10-11 20:06:17 +11:00
parent 8eb5d2af99
commit 0e8a26c2b7
4 changed files with 27 additions and 12 deletions

4
data.c
View File

@ -20952,8 +20952,8 @@ void initskills(void) {
addskilldesc(SK_PERCEPTION, PR_NOVICE, "^gYou can now check for trails on staircases before descending.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_NOVICE, "^gYou now have perception of your blind spots.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_BEGINNER, "^gYou can now determine the depth and direction of footprints.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_BEGINNER, "^gYou can now recognise the quality of all items.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_ADEPT, "^gYour field of vision is now wider.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_BEGINNER, "^gYour field of vision is now wider.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_ADEPT, "^gYou can now recognise the quality of all items.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_EXPERT, "^gYou can now move without leaving footprints.^n", B_TRUE);
addskilldesc(SK_PERCEPTION, PR_MASTER, "^gYou field of vision now extends behind you.^n", B_TRUE);
addskill(SK_STEALTH, "Stealth", "Affects your ability to move silently.", 0); // untrainable?

9
io.c
View File

@ -4935,7 +4935,7 @@ void docommslf(lifeform_t *lf, char ch, lifeform_t *lf2, cell_t *targc) {
sayphrase(lf, SP_MERCYACCEPT, SV_TALK, NA, player->race->name, player);
// they knock you out
msg("^%d*WHACK*^n", C_YELLOW);
fallasleep(player, ST_KO, rnd(50,100));
loseconsciousness(player, getkotime(player),lf);
// they take all your stuff
/*
for (o = player->pack->first ; o ; o = nexto) {
@ -7059,7 +7059,7 @@ char *makedesc_ob(object_t *o, char *retbuf) {
}
// item value
if (getskill(player, SK_PERCEPTION) >= PR_EXPERT) {
if (getskill(player, SK_PERCEPTION) >= PR_ADEPT) {
showvalue = B_TRUE;
}
if (!showvalue) {
@ -11941,6 +11941,11 @@ void drawstatus(void) {
unsetcol(statwin, C_LIGHTBLUE);
}
if (lfhasflag(player, F_STRIKETOKO)) {
setcol(statwin, C_ORANGE);
wprintw(statwin, " Mercy");
unsetcol(statwin, C_RED);
}
if (lfhasflag(player, F_RAGE)) {
setcol(statwin, C_RED);
wprintw(statwin, " Rage");

25
lf.c
View File

@ -9213,6 +9213,16 @@ int getjobrecommendation(race_t *r, job_t *j) {
return rec;
}
int getkotime(lifeform_t *lf) {
int kotime;
kotime = rnd(50,100);
if (lf != player) {
// monsters stay knocked out for a long time
kotime *= 10;
}
return kotime;
}
int getlastdir(lifeform_t *lf) {
flag_t *f;
f = lfhasflag(lf, F_LASTDIR);
@ -17838,7 +17848,7 @@ void loseconcentration(lifeform_t *lf) {
void loseconsciousness(lifeform_t *lf, int howlong, lifeform_t *fromlf) {
if (!isunconscious(lf)) {
fallasleep(lf, ST_KO, rnd(50,100));
fallasleep(lf, ST_KO, howlong);
if (fromlf && isplayer(fromlf)) {
pleasegodmaybe(R_GODMERCY, 5);
}
@ -17932,7 +17942,7 @@ int losehp_real(lifeform_t *lf, int amt, enum DAMTYPE damtype, lifeform_t *froml
// would this damage reduce the lf to < 0 hp ???
hpleftafterdam = lf->hp - amt;
if (lfcanbekod(lf) && (lf->hp > 1) && (hpleftafterdam <= 0)) {
int threshold = 0,kochance = 0;
int threshold = -10,kochance = 0;
// merciful weapons - these will ALWAYS ko, even if
// they are already unconscious.
if (!ko && fromob) {
@ -17965,7 +17975,7 @@ int losehp_real(lifeform_t *lf, int amt, enum DAMTYPE damtype, lifeform_t *froml
if (damtypeok) {
if (playerinvolved && godprayedto(R_GODMERCY)) {
threshold = -10;
threshold -= 10;
if (isplayer(lf)) {
// player being hit?
kochance += 75;
@ -17974,15 +17984,14 @@ int losehp_real(lifeform_t *lf, int amt, enum DAMTYPE damtype, lifeform_t *froml
kochance += 30;
}
} else {
threshold = -5;
kochance += 15; // base chance to KO with bashing.
}
// TRYING to ko rather than kill?
if (fromlf && lfhasflag(fromlf, F_STRIKETOKO)) {
if (cansee(fromlf, lf)) {
kochance += 30;
threshold -= 5;
kochance += 50;
threshold -= 15;
}
}
}
@ -18364,7 +18373,7 @@ void losehpeffects(lifeform_t *lf, int dam, enum DAMTYPE damtype, lifeform_t *fr
// this is mainly used in attack.c, so that we can announce
// "you hit xxx. xxx loses consciousness." as opposed to
// "xxx loses consciousness. you hit xxx." which makes no sense!
kotime = rnd(50,100);
kotime = getkotime(lf);
if (waskod) {
*waskod = kotime;
} else {
@ -20348,7 +20357,7 @@ void precalclos(lifeform_t *lf) {
if (plev >= PR_MASTER) {
inc_quad_range(&startq, missingeye ? NULL : &endq, 2);
} else if (plev >= PR_ADEPT) {
} else if (plev >= PR_BEGINNER) {
inc_quad_range(&startq, missingeye ? NULL : &endq, 1);
}

1
lf.h
View File

@ -212,6 +212,7 @@ enum JOBCATEGORY getjobcat(lifeform_t *lf);
//enum SUBJOB getsubjob(lifeform_t *lf);
char *getjobname(lifeform_t *lf);
int getjobrecommendation(race_t *r, job_t *j);
int getkotime(lifeform_t *lf);
int getlastdir(lifeform_t *lf);
int getleftrightwalls(lifeform_t *lf);
int getlfaccuracy(lifeform_t *lf, object_t *wep);