mirror of
https://codeberg.org/noisytoot/notnotdnethack.git
synced 2025-07-30 01:12:25 +01:00
Merge branch 'compat-3.21.1' of https://github.com/Chris-plus-alphanumericgibberish/dNAO.git into compat-3.21.1
This commit is contained in:
commit
7a600a804e
7 changed files with 39 additions and 50 deletions
|
@ -6114,11 +6114,10 @@ struct obj *obj;
|
|||
You("chip off the existing rune.");
|
||||
multi-=1;
|
||||
if(carvee->oartifact) pline("The wood heals like the rune was never there.");
|
||||
else carvee->spe -= 1;
|
||||
if(carvee->spe < -1*rn2(8)){
|
||||
You("destroyed the %s in the process.", xname(carvee));
|
||||
useup(carvee);
|
||||
return 0;
|
||||
else if(--carvee->spe < -1*rn2(8)) {
|
||||
You("destroyed the %s in the process.", xname(carvee));
|
||||
useup(carvee);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
multi -= carveTurns[rune-FIRST_RUNE];
|
||||
|
|
|
@ -7053,13 +7053,12 @@ arti_invoke(obj)
|
|||
}
|
||||
break;
|
||||
case DEATH_TCH:
|
||||
if ((!uwep && uwep == obj)){
|
||||
if (!(uwep && uwep == obj)){
|
||||
You_feel("that you should be wielding %s.", the(xname(obj)));;
|
||||
obj->age = monstermoves;
|
||||
return(0);
|
||||
}
|
||||
getdir((char *)0);
|
||||
if (!isok(u.ux + u.dx, u.uy + u.dy)) break;
|
||||
|
||||
if ((mtmp = m_at(u.ux + u.dx, u.uy + u.dy))) {
|
||||
/* message */
|
||||
|
@ -7152,8 +7151,7 @@ arti_invoke(obj)
|
|||
}
|
||||
|
||||
struct monst *mtmp = makemon(pm, u.ux, u.uy, MM_EDOG|MM_ADJACENTOK);
|
||||
mtmp = tamedog(mtmp, (struct obj *) 0);
|
||||
|
||||
initedog(mtmp);
|
||||
if (mtmp->mtyp != PM_SKELETON)
|
||||
set_template(mtmp, SKELIFIED);
|
||||
|
||||
|
@ -8555,10 +8553,6 @@ arti_invoke(obj)
|
|||
/* revert */
|
||||
rehumanize();
|
||||
}
|
||||
else if (Unchanging) {
|
||||
You_feel("the mask's magic be blocked by something.");
|
||||
return partial_action();
|
||||
}
|
||||
else {
|
||||
/* steal a face */
|
||||
if(getdir((char *)0)) {
|
||||
|
@ -8575,13 +8569,14 @@ arti_invoke(obj)
|
|||
xkilled(mtmp, 3);
|
||||
obj->corpsenm = mtmp->mtyp;
|
||||
/* keep consistent with on-wear code in do_wear.c */
|
||||
if (obj == ublindf) {
|
||||
if (obj == ublindf && !Unchanging) {
|
||||
activate_mirrored_mask(obj);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* resisted */
|
||||
pline("%s resists!", Monnam(mtmp));
|
||||
obj->age = monstermoves; // but does use your turn
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11043,7 +11038,7 @@ activate_mirrored_mask(obj)
|
|||
struct obj * obj;
|
||||
{
|
||||
polymon(obj->corpsenm);
|
||||
u.mtimedone = (u.ulevel * 30) / max(1, 10 + mons[obj->corpsenm].mlevel - u.ulevel);
|
||||
u.mtimedone = 5 + (u.ulevel * 30) / max(1, 10 + mons[obj->corpsenm].mlevel - u.ulevel);
|
||||
if (!polyok(&mons[obj->corpsenm])) u.mtimedone /= 3;
|
||||
uskin = obj;
|
||||
ublindf = (struct obj *)0;
|
||||
|
|
|
@ -1315,7 +1315,7 @@ register const char *let,*word;
|
|||
(otyp != HELLFIRE_COMPONENT))
|
||||
|| (!strcmp(word, "build a scrap maw with") &&
|
||||
(otyp != SCRAP))
|
||||
|| (!strcmp(word, "create a skeletal minion of") &&
|
||||
|| (!strcmp(word, "make a skeletal minion of") &&
|
||||
!(otyp == CORPSE))
|
||||
|| (!strcmp(word, "feed blood to") &&
|
||||
!(otyp == CORPSE && otmp->odrained && (peek_at_iced_corpse_age(otmp) + 20) >= monstermoves))
|
||||
|
|
47
src/minion.c
47
src/minion.c
|
@ -112,36 +112,27 @@ struct permonst * ptr; /* summon as though you were <X> */
|
|||
EMIN(mtmp)->min_align = atyp;
|
||||
EPRI(mtmp)->shralign = atyp;
|
||||
if(mon->isminion) mtmp->isminion = TRUE;
|
||||
mtmp->mpeaceful = mon->mpeaceful;
|
||||
mtmp->mpeaceful = mon && mon->mpeaceful;
|
||||
}
|
||||
if (is_angel(mtmp->data)){
|
||||
if(mon->mtyp == PM_LAMASHTU || mon->mfaction == LAMASHTU_FACTION)
|
||||
mtmp->mfaction = LAMASHTU_FACTION;
|
||||
if(has_template(mon, MAD_TEMPLATE))
|
||||
set_template(mtmp, MAD_TEMPLATE);
|
||||
if(has_template(mon, FALLEN_TEMPLATE))
|
||||
set_template(mtmp, FALLEN_TEMPLATE);
|
||||
|
||||
/* some templates are passed from summoner to summon */
|
||||
if (mon && (
|
||||
get_template(mon) == FRACTURED ||
|
||||
get_template(mon) == VAMPIRIC ||
|
||||
get_template(mon) == PSEUDONATURAL ||
|
||||
get_template(mon) == CRANIUM_RAT ||
|
||||
get_template(mon) == MISTWEAVER ||
|
||||
get_template(mon) == YELLOW_TEMPLATE ||
|
||||
get_template(mon) == DREAM_LEECH ||
|
||||
(get_template(mon) == MAD_TEMPLATE && is_angel(mtmp->data)) ||
|
||||
(get_template(mon) == FALLEN_TEMPLATE && is_angel(mtmp->data))
|
||||
) && mtemplate_accepts_mtyp(get_template(mon), mtmp->mtyp)
|
||||
) {
|
||||
set_template(mtmp, get_template(mon));
|
||||
}
|
||||
if(has_template(mon, FRACTURED)){
|
||||
set_template(mtmp, FRACTURED);
|
||||
}
|
||||
if(has_template(mon, VAMPIRIC)){
|
||||
set_template(mtmp, VAMPIRIC);
|
||||
}
|
||||
if(has_template(mon, PSEUDONATURAL)){
|
||||
set_template(mtmp, PSEUDONATURAL);
|
||||
}
|
||||
if(has_template(mon, CRANIUM_RAT)){
|
||||
set_template(mtmp, CRANIUM_RAT);
|
||||
}
|
||||
if(has_template(mon, MISTWEAVER)){
|
||||
set_template(mtmp, MISTWEAVER);
|
||||
}
|
||||
if(has_template(mon, YELLOW_TEMPLATE)){
|
||||
set_template(mtmp, YELLOW_TEMPLATE);
|
||||
}
|
||||
if(has_template(mon, DREAM_LEECH)){
|
||||
set_template(mtmp, DREAM_LEECH);
|
||||
/* as are some factions */
|
||||
if (mon && (mon->mtyp == PM_LAMASHTU || mon->mfaction == LAMASHTU_FACTION)) {
|
||||
mtmp->mfaction = LAMASHTU_FACTION;
|
||||
}
|
||||
}
|
||||
cnt--;
|
||||
|
|
|
@ -1556,6 +1556,7 @@ int effect_num;
|
|||
int tmp;
|
||||
char buf[BUFSZ];
|
||||
struct obj * optr;
|
||||
const char * s;
|
||||
|
||||
boolean greater = /* lilith/belial seduce */
|
||||
(mon->mtyp == PM_MOTHER_LILITH || mon->mtyp == PM_BELIAL);
|
||||
|
@ -1602,7 +1603,8 @@ int effect_num;
|
|||
flags.botl = 1;
|
||||
break;
|
||||
case SEDU_DULLSENSES:
|
||||
Your("%s are dulled.", greatest ? "mind" : "senses");
|
||||
s = greatest ? "mind" : "senses";
|
||||
Your("%s %s dulled.", s, vtense(s, "are"));
|
||||
if (greatest) {
|
||||
if (u.sealsActive&SEAL_HUGINN_MUNINN){
|
||||
unbind(SEAL_HUGINN_MUNINN, TRUE);
|
||||
|
|
|
@ -410,7 +410,8 @@ int tary;
|
|||
|
||||
/* Special demon/minion handling code */
|
||||
/* mvu only; we don't want it mvm and player's is handled as an ability */
|
||||
if (youdef && !magr->cham && gates_in_help(pa) && !template_blocks_gate(magr) && !ranged && (magr->summonpwr < magr->data->mlevel)) {
|
||||
if (youdef && !magr->cham && gates_in_help(pa) && !template_blocks_gate(magr)
|
||||
&& !ranged && !wildmiss && (magr->summonpwr < magr->data->mlevel)) {
|
||||
if (!magr->mcan && !rn2(13)) {
|
||||
msummon(magr, (struct permonst *)0);
|
||||
}
|
||||
|
@ -2905,6 +2906,7 @@ int dmg; /* damage to deal */
|
|||
}
|
||||
|
||||
if (*hp(mdef) < 1) {
|
||||
int nocorpse = (attk && (attk->adtyp == AD_DGST || attk->adtyp == AD_DISN)) ? 0x2 : 0;
|
||||
/* killed a pet by accident */
|
||||
if (mdef->mtame && !cansee(mdef->mx, mdef->my)) {
|
||||
You_feel("embarrassed for a moment.");
|
||||
|
@ -2915,11 +2917,11 @@ int dmg; /* damage to deal */
|
|||
/* non-verbose */
|
||||
if (!flags.verbose) {
|
||||
You("destroy it!");
|
||||
if (dmg) xkilled(mdef, 0);
|
||||
if (dmg) xkilled(mdef, 0|nocorpse);
|
||||
}
|
||||
/* verbose */
|
||||
else {
|
||||
if (dmg) killed(mdef);
|
||||
if (dmg) xkilled(mdef, 1|nocorpse);
|
||||
}
|
||||
}
|
||||
if (*hp(mdef) > 0)
|
||||
|
|
|
@ -1712,13 +1712,13 @@ int vis;
|
|||
if (magr) {
|
||||
pline("%s attack passes harmlessly through %s.",
|
||||
(youagr ? "Your" : s_suffix(Monnam(magr))),
|
||||
the(mon_nam(mdef)));
|
||||
mon_nam(mdef));
|
||||
}
|
||||
else {
|
||||
pline("%s %s harmlessly through %s.",
|
||||
The(cxname(weapon)),
|
||||
vtense(cxname(weapon), "pass"),
|
||||
the(mon_nam(mdef)));
|
||||
mon_nam(mdef));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue