]> granicus.if.org Git - nethack/commitdiff
boulder pushing feedback
authorPatR <rankin@nethack.org>
Thu, 8 Dec 2022 00:45:35 +0000 (16:45 -0800)
committerPatR <rankin@nethack.org>
Thu, 8 Dec 2022 00:45:35 +0000 (16:45 -0800)
Redo the details about giving or suppressing "with great effort you
push the boulder".  It works the same except that if push a different
boulder than previously, you'll get a new message.  If you do it
while riding, you have the same lack-of-message for successive pushes
instead of getting a message every turn.

Don't exercise strength when pushing a boulder if poly'd into a giant.

include/context.h
include/decl.h
src/decl.c
src/hack.c

index 6a257cbae24dfcec5e8c6b0afa88af990edb0eb1..a5ba46b80f372242217aa9e22159f8174f56d1a9 100644 (file)
@@ -129,9 +129,9 @@ struct achievement_tracking {
 struct context_info {
     unsigned ident;         /* social security number for each monster */
     unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
-    unsigned run;           /* 0: h (etc), 1: H (etc), 2: fh (etc) */
-                            /* 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF- */
-                            /* 8: travel */
+    unsigned run;           /* 0: h (etc), 1: H (etc), 2: fh (etc),
+                             * 3: FH, 4: ff+, 5: ff-, 6: FF+, 7: FF-,
+                             * 8: travel */
     unsigned startingpet_mid; /* monster id number for initial pet */
     int current_fruit;      /* fruit->fid corresponding to gp.pl_fruit[] */
     int mysteryforce;       /* adjusts how often "mysterious force" kicks in */
index 4af60b455d6e71afe73bcf624ef186919fa31e95..4682ca49d1b275e57f6c45c0dccd07ffcd7b30e4 100644 (file)
@@ -777,6 +777,11 @@ struct instance_globals_b {
     /* files.c */
     char bones[BONESSIZE];
 
+    /* hack.c */
+    unsigned bldrpush_oid; /* id of last boulder pushed */
+    long bldrpushtime;     /* turn that a message was given for pushing
+                            * a boulder; used in lieu of Norep() */
+
     /* mkmaze.c */
     lev_region bughack; /* for preserving the insect legs when wallifying
                          * baalz level */
index f5a69ef92d7d0490732fa153719bdb68bfd72f04..1ac558e41168ea9bebfe6957dff36e90370127ed 100644 (file)
@@ -232,6 +232,9 @@ const struct instance_globals_b g_init_b = {
     UNDEFINED_PTR, /* branches */
     /* files.c */
     BONESINIT, /* bones */
+    /* hack.c */
+    0U, /* bldrpush_oid - last boulder pushed */
+    0L, /* bldrpushtime - turn message was given about pushing that boulder */
     /* mkmaze.c */
     { {COLNO, ROWNO, 0, 0}, {COLNO, ROWNO, 0, 0},
             FALSE, FALSE, 0, 0, { 0 } }, /* bughack */
index 636ee7ab3974360f7cd10fae59e3be604c5f7a38..2b3f14d5aa23b863062308e853b01bf9e087b8cf 100644 (file)
@@ -414,22 +414,33 @@ moverock(void)
             }
 
             {
-                /* note: reset to zero after save/restore cycle */
-                static NEARDATA long lastmovetime;
+                boolean givemesg, easypush;
  dopush:
-                what = the(xname(otmp));
+                /* give boulder pushing feedback if this is a different
+                   boulder than the last one pushed or if it's been at
+                   least 2 turns since we last pushed this boulder;
+                   unlike with Norep(), intervening messages don't cause
+                   it to repeat, only doing something else in the meantime */
+                if (otmp->o_id != gb.bldrpush_oid) {
+                    gb.bldrpushtime = gm.moves + 1L;
+                    gb.bldrpush_oid = otmp->o_id;
+                }
+                givemesg = (gm.moves > gb.bldrpushtime + 2L
+                            || gm.moves < gb.bldrpushtime);
+                what = givemesg ? the(xname(otmp)) : 0;
                 if (!u.usteed) {
-                    /* FIXME: also remember boulder->o_id and override
-                       lastmovetime if this is a different boulder */
-                    if (gm.moves > lastmovetime + 2 || gm.moves < lastmovetime)
+                    easypush = throws_rocks(gy.youmonst.data);
+                    if (givemesg)
                         pline("With %s effort you move %s.",
-                              throws_rocks(gy.youmonst.data) ? "little"
-                                                            : "great",
-                              what);
-                    exercise(A_STR, TRUE);
-                } else
-                    pline("%s moves %s.", upstart(y_monnam(u.usteed)), what);
-                lastmovetime = gm.moves;
+                              easypush ? "little" : "great", what);
+                    if (!easypush)
+                        exercise(A_STR, TRUE);
+                } else {
+                    if (givemesg)
+                        pline("%s moves %s.",
+                              upstart(y_monnam(u.usteed)), what);
+                }
+                gb.bldrpushtime = gm.moves;
             }
 
             /* Move the boulder *after* the message. */