]> granicus.if.org Git - nethack/commitdiff
Unify ad_ssex
authorPasi Kallinen <paxed@alt.org>
Tue, 1 Dec 2020 14:05:25 +0000 (16:05 +0200)
committerPasi Kallinen <paxed@alt.org>
Fri, 4 Dec 2020 07:30:21 +0000 (09:30 +0200)
include/extern.h
src/mhitm.c
src/mhitu.c
src/uhitm.c

index 13122a575685ac64a73484a0b5b45bc270ff2cff..8b4bd149c29d309e19fbbedef77c5841a58112a2 100644 (file)
@@ -2795,6 +2795,7 @@ E void FDECL(mhitm_ad_dgst, (struct monst *, struct attack *, struct monst *, st
 E void FDECL(mhitm_ad_samu, (struct monst *, struct attack *, struct monst *, struct mhitm_data *));
 E void FDECL(mhitm_ad_dise, (struct monst *, struct attack *, struct monst *, struct mhitm_data *));
 E void FDECL(mhitm_ad_sedu, (struct monst *, struct attack *, struct monst *, struct mhitm_data *));
+E void FDECL(mhitm_ad_ssex, (struct monst *, struct attack *, struct monst *, struct mhitm_data *));
 E boolean FDECL(do_stone_u, (struct monst *));
 E void FDECL(do_stone_mon, (struct monst *, struct attack *, struct monst *, struct mhitm_data *));
 E int FDECL(damageum, (struct monst *, struct attack *, int));
index fab8bbba0df893a6c850fd1accb9f0d04ae38453..0cb8138035dec1c2475ccd13fdd370bfbdd9c8ba 100644 (file)
@@ -1020,6 +1020,10 @@ int dieroll;
             return mhm.hitflags;
         break;
     case AD_SSEX:
+        mhitm_ad_ssex(magr, mattk, mdef, &mhm);
+        if (mhm.done)
+            return mhm.hitflags;
+        break;
     case AD_SITM: /* for now these are the same */
     case AD_SEDU:
         mhitm_ad_sedu(magr, mattk, mdef, &mhm);
index 31d9035416dff36b1cecb819cf8a002abb9bb3c5..3fce4da9e883941d532989d25279de95305e8f74 100644 (file)
@@ -1105,13 +1105,10 @@ register struct attack *mattk;
         break;
 
     case AD_SSEX:
-        if (SYSOPT_SEDUCE) {
-            if (could_seduce(mtmp, &g.youmonst, mattk) == 1 && !mtmp->mcan)
-                if (doseduce(mtmp))
-                    return 3;
-            break;
-        }
-        /*FALLTHRU*/
+        mhitm_ad_ssex(mtmp, mattk, &g.youmonst, &mhm);
+        if (mhm.done)
+            return mhm.hitflags;
+        break;
     case AD_SITM: /* for now these are the same */
     case AD_SEDU:
         mhitm_ad_sedu(mtmp, mattk, &g.youmonst, &mhm);
index 211316e54e9f9d6eba9953fd766f34386e3c1ca3..012f1cfdbbe1b7c8623568413d48a71295625861 100644 (file)
@@ -4149,6 +4149,40 @@ struct mhitm_data *mhm;
     }
 }
 
+void
+mhitm_ad_ssex(magr, mattk, mdef, mhm)
+struct monst *magr;
+struct attack *mattk;
+struct monst *mdef;
+struct mhitm_data *mhm;
+{
+    if (magr == &g.youmonst) {
+        /* uhitm */
+        mhitm_ad_sedu(magr, mattk, mdef, mhm);
+        if (mhm->done)
+            return;
+    } else if (mdef == &g.youmonst) {
+        /* mhitu */
+        if (SYSOPT_SEDUCE) {
+            if (could_seduce(magr, mdef, mattk) == 1 && !magr->mcan)
+                if (doseduce(magr)) {
+                    mhm->hitflags = MM_HIT | MM_DEF_DIED; /* return 3??? */
+                    mhm->done = TRUE;
+                    return;
+                }
+            return;
+        }
+        mhitm_ad_sedu(magr, mattk, mdef, mhm);
+        if (mhm->done)
+            return;
+    } else {
+        /* mhitm */
+        mhitm_ad_sedu(magr, mattk, mdef, mhm);
+        if (mhm->done)
+            return;
+    }
+}
+
 
 /* Template for monster hits monster for AD_FOO.
    - replace "break" with return
@@ -4262,6 +4296,10 @@ int specialdmg; /* blessed and/or silver bonus against various things */
             return mhm.hitflags;
         break;
     case AD_SSEX:
+        mhitm_ad_ssex(&g.youmonst, mattk, mdef, &mhm);
+        if (mhm.done)
+            return mhm.hitflags;
+        break;
     case AD_SITM:
     case AD_SEDU:
         mhitm_ad_sedu(&g.youmonst, mattk, mdef, &mhm);