]> granicus.if.org Git - nethack/commitdiff
Unify putting a saddle on steed
authorPasi Kallinen <paxed@alt.org>
Fri, 5 Feb 2016 15:23:22 +0000 (17:23 +0200)
committerPasi Kallinen <paxed@alt.org>
Fri, 5 Feb 2016 15:23:22 +0000 (17:23 +0200)
include/extern.h
src/dog.c
src/read.c
src/steed.c

index 850cbe2b1c8b3c4e2c82d95c86a7da1a310a2992..a15251e2c59a19705c41a6f1840c0756dd75d79e 100644 (file)
@@ -2235,6 +2235,7 @@ E struct obj *FDECL(findgold, (struct obj *));
 E void NDECL(rider_cant_reach);
 E boolean FDECL(can_saddle, (struct monst *));
 E int FDECL(use_saddle, (struct obj *));
+E void FDECL(put_saddle_on_mon, (struct obj *, struct monst *));
 E boolean FDECL(can_ride, (struct monst *));
 E int NDECL(doride);
 E boolean FDECL(mount_steed, (struct monst *, BOOLEAN_P));
index a5f8a5a759eeb08cd0269fd6b3f5f048d5120aeb..f2993751dff98e764fdbd9467e44637e88686052 100644 (file)
--- a/src/dog.c
+++ b/src/dog.c
@@ -187,13 +187,8 @@ makedog()
     context.startingpet_mid = mtmp->m_id;
     /* Horses already wear a saddle */
     if (pettype == PM_PONY && !!(otmp = mksobj(SADDLE, TRUE, FALSE))) {
-        if (mpickobj(mtmp, otmp))
-            panic("merged saddle?");
-        mtmp->misc_worn_check |= W_SADDLE;
         otmp->dknown = otmp->bknown = otmp->rknown = 1;
-        otmp->owornmask = W_SADDLE;
-        otmp->leashmon = mtmp->m_id;
-        update_mon_intrinsics(mtmp, otmp, TRUE, TRUE);
+        put_saddle_on_mon(otmp, mtmp);
     }
 
     if (!petname_used++ && *petname)
index 20a9b85cda51c1d9af010467b747af58c214739a..815dfe731f9b1031bceb4406adac80ed150ee483 100644 (file)
@@ -2457,11 +2457,7 @@ create_particular()
             }
             if (saddled && can_saddle(mtmp) && !which_armor(mtmp, W_SADDLE)) {
                 struct obj *otmp = mksobj(SADDLE, TRUE, FALSE);
-                (void) mpickobj(mtmp, otmp);
-                mtmp->misc_worn_check |= W_SADDLE;
-                otmp->owornmask = W_SADDLE;
-                otmp->leashmon = mtmp->m_id;
-                update_mon_intrinsics(mtmp, otmp, TRUE, FALSE);
+                put_saddle_on_mon(otmp, mtmp);
             }
             if (invisible)
                 mon_set_minvis(mtmp);
index 4070bbf740b52f4f678b38a0f99c36169d2a4cb9..a9dfa3eec9e83a1b1d0b8dfdca3ad2ce369a9bab 100644 (file)
@@ -134,18 +134,27 @@ struct obj *otmp;
         if (otmp->owornmask)
             remove_worn_item(otmp, FALSE);
         freeinv(otmp);
-        /* mpickobj may free otmp it if merges, but we have already
-           checked for a saddle above, so no merger should happen */
-        (void) mpickobj(mtmp, otmp);
-        mtmp->misc_worn_check |= W_SADDLE;
-        otmp->owornmask = W_SADDLE;
-        otmp->leashmon = mtmp->m_id;
-        update_mon_intrinsics(mtmp, otmp, TRUE, FALSE);
+        put_saddle_on_mon(otmp, mtmp);
     } else
         pline("%s resists!", Monnam(mtmp));
     return 1;
 }
 
+void
+put_saddle_on_mon(saddle, mtmp)
+struct obj *saddle;
+struct monst *mtmp;
+{
+    if (!can_saddle(mtmp) || which_armor(mtmp, W_SADDLE))
+        return;
+    if (mpickobj(mtmp, saddle))
+        panic("merged saddle?");
+    mtmp->misc_worn_check |= W_SADDLE;
+    saddle->owornmask = W_SADDLE;
+    saddle->leashmon = mtmp->m_id;
+    update_mon_intrinsics(mtmp, saddle, TRUE, FALSE);
+}
+
 /*** Riding the monster ***/
 
 /* Can we ride this monster?  Caller should also check can_saddle() */