]> granicus.if.org Git - nethack/commitdiff
split "act_on_act" into separate function
authorSHIRAKATA Kentaro <argrath@ub32.org>
Sat, 21 May 2022 15:52:13 +0000 (00:52 +0900)
committerSHIRAKATA Kentaro <argrath@ub32.org>
Sat, 28 May 2022 21:40:44 +0000 (06:40 +0900)
src/cmd.c

index b74e3a34805973c52f6e061b4bcc5c4662ac4cca..1c1f85dda4c54fd64dee1ab66c16f7cee3f38d2f 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -151,6 +151,7 @@ static void reset_cmd_vars(boolean);
 static void mcmd_addmenu(winid, int, const char *);
 static char here_cmd_menu(void);
 static char there_cmd_menu(int, int, int);
+static void act_on_act(int, int, int, int, int, int);
 static char readchar_core(int *, int *, int *);
 static char *parse(void);
 static void show_direction_keys(winid, char, boolean);
@@ -4902,12 +4903,166 @@ there_cmd_menu_common(
     return K;
 }
 
+static void
+act_on_act(int act, int x, int y, int dx, int dy, int dir)
+{
+    struct obj *otmp;
+
+    switch (act) {
+    case MCMD_TRAVEL:
+        iflags.travelcc.x = u.tx = x;
+        iflags.travelcc.y = u.ty = y;
+        cmdq_add_ec(dotravel_target);
+        break;
+    case MCMD_THROW_OBJ:
+        cmdq_add_ec(dothrow);
+        cmdq_add_userinput();
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_OPEN_DOOR:
+        cmdq_add_ec(doopen);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_LOCK_DOOR:
+        otmp = carrying(SKELETON_KEY);
+        if (!otmp)
+            otmp = carrying(LOCK_PICK);
+        if (!otmp)
+            otmp = carrying(CREDIT_CARD);
+        if (otmp) {
+            cmdq_add_ec(doapply);
+            cmdq_add_key(otmp->invlet);
+            cmdq_add_dir(dx, dy, 0);
+            cmdq_add_key('y'); /* "Lock it?" */
+        }
+        break;
+    case MCMD_UNTRAP_DOOR:
+        cmdq_add_ec(dountrap);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_KICK_DOOR:
+        cmdq_add_ec(dokick);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_CLOSE_DOOR:
+        cmdq_add_ec(doclose);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_SEARCH:
+        cmdq_add_ec(dosearch);
+        break;
+    case MCMD_LOOK_TRAP:
+        cmdq_add_ec(doidtrap);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_UNTRAP_TRAP:
+        cmdq_add_ec(dountrap);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_MOVE_DIR:
+        cmdq_add_ec(move_funcs[xytod(dx, dy)][MV_WALK]);
+        break;
+    case MCMD_RIDE:
+        cmdq_add_ec(doride);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_REMOVE_SADDLE:
+        /* m-prefix for #loot: skip any floor containers */
+        cmdq_add_ec(do_reqmenu);
+        cmdq_add_ec(doloot);
+        cmdq_add_dir(dx, dy, 0);
+        cmdq_add_key('y'); /* "Do you want to remove the saddle ..." */
+        break;
+    case MCMD_APPLY_SADDLE:
+        if ((otmp = carrying(SADDLE)) != 0) {
+            cmdq_add_ec(doapply);
+            cmdq_add_key(otmp->invlet);
+            cmdq_add_dir(dx, dy, 0);
+        }
+        break;
+    case MCMD_ATTACK_NEXT2U:
+        cmdq_add_ec(move_funcs[dir][MV_WALK]);
+        break;
+    case MCMD_TALK:
+        cmdq_add_ec(dotalk);
+        cmdq_add_dir(dx, dy, 0);
+        break;
+    case MCMD_NAME:
+        cmdq_add_ec(docallcmd);
+        cmdq_add_key('m'); /* name a monster */
+        cmdq_add_dir(dx, dy, 0); /* getpos() will use u.ux+dx,u.uy+dy */
+        break;
+    case MCMD_QUAFF:
+        cmdq_add_ec(dodrink);
+        cmdq_add_key('y'); /* "Drink from the fountain?" */
+        break;
+    case MCMD_DIP:
+        cmdq_add_ec(dodip);
+        cmdq_add_userinput();
+        cmdq_add_key('y'); /* "Dip foo into the fountain?" */
+        break;
+    case MCMD_SIT:
+        cmdq_add_ec(dosit);
+        break;
+    case MCMD_UP:
+        cmdq_add_ec(doup);
+        break;
+    case MCMD_DOWN:
+        cmdq_add_ec(dodown);
+        break;
+    case MCMD_DISMOUNT:
+        cmdq_add_ec(doride);
+        break;
+    case MCMD_MONABILITY:
+        cmdq_add_ec(domonability);
+        break;
+    case MCMD_PICKUP:
+        cmdq_add_ec(dopickup);
+        break;
+    case MCMD_LOOT:
+        cmdq_add_ec(doloot);
+        break;
+    case MCMD_EAT:
+        cmdq_add_ec(doeat);
+        cmdq_add_key('y'); /* "There is foo here; eat it?" */
+        break;
+    case MCMD_DROP:
+        cmdq_add_ec(dodrop);
+        break;
+    case MCMD_INVENTORY:
+        cmdq_add_ec(ddoinv);
+        break;
+    case MCMD_REST:
+        cmdq_add_ec(donull);
+        break;
+    case MCMD_LOOK_HERE:
+        cmdq_add_ec(dolook);
+        break;
+    case MCMD_LOOK_AT:
+        g.clicklook_cc.x = x;
+        g.clicklook_cc.y = y;
+        cmdq_add_ec(doclicklook);
+        break;
+    case MCMD_UNTRAP_HERE:
+        cmdq_add_ec(dountrap);
+        cmdq_add_dir(0, 0, 1);
+        break;
+    case MCMD_OFFER:
+        cmdq_add_ec(dosacrifice);
+        cmdq_add_userinput();
+        break;
+    case MCMD_CAST_SPELL:
+        cmdq_add_ec(docast);
+        break;
+    default: break;
+    }
+}
+
 /* offer choice of actions to perform at adjacent location <x,y> */
 static char
 there_cmd_menu(int x, int y, int mod)
 {
     winid win;
-    struct obj *otmp;
     char ch = '\0';
     int npick = 0, K = 0;
     menu_item *picks = (menu_item *) 0;
@@ -4939,7 +5094,8 @@ there_cmd_menu(int x, int y, int mod)
         ch = '\0';
     } else if ((K == 1) && (act != MCMD_NOTHING)) {
         destroy_nhwindow(win);
-        goto act_on_act;
+        act_on_act(act, x, y, dx, dy, dir);
+        return '\0';
     } else {
         end_menu(win, "What do you want to do?");
         npick = select_menu(win, PICK_ONE, &picks);
@@ -4951,155 +5107,7 @@ there_cmd_menu(int x, int y, int mod)
 
         free((genericptr_t) picks);
 
-    act_on_act:
-        switch (act) {
-        case MCMD_TRAVEL:
-            iflags.travelcc.x = u.tx = x;
-            iflags.travelcc.y = u.ty = y;
-            cmdq_add_ec(dotravel_target);
-            break;
-        case MCMD_THROW_OBJ:
-            cmdq_add_ec(dothrow);
-            cmdq_add_userinput();
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_OPEN_DOOR:
-            cmdq_add_ec(doopen);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_LOCK_DOOR:
-            otmp = carrying(SKELETON_KEY);
-            if (!otmp)
-                otmp = carrying(LOCK_PICK);
-            if (!otmp)
-                otmp = carrying(CREDIT_CARD);
-            if (otmp) {
-                cmdq_add_ec(doapply);
-                cmdq_add_key(otmp->invlet);
-                cmdq_add_dir(dx, dy, 0);
-                cmdq_add_key('y'); /* "Lock it?" */
-            }
-            break;
-        case MCMD_UNTRAP_DOOR:
-            cmdq_add_ec(dountrap);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_KICK_DOOR:
-            cmdq_add_ec(dokick);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_CLOSE_DOOR:
-            cmdq_add_ec(doclose);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_SEARCH:
-            cmdq_add_ec(dosearch);
-            break;
-        case MCMD_LOOK_TRAP:
-            cmdq_add_ec(doidtrap);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_UNTRAP_TRAP:
-            cmdq_add_ec(dountrap);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_MOVE_DIR:
-            cmdq_add_ec(move_funcs[xytod(dx, dy)][MV_WALK]);
-            break;
-        case MCMD_RIDE:
-            cmdq_add_ec(doride);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_REMOVE_SADDLE:
-            /* m-prefix for #loot: skip any floor containers */
-            cmdq_add_ec(do_reqmenu);
-            cmdq_add_ec(doloot);
-            cmdq_add_dir(dx, dy, 0);
-            cmdq_add_key('y'); /* "Do you want to remove the saddle ..." */
-            break;
-        case MCMD_APPLY_SADDLE:
-            if ((otmp = carrying(SADDLE)) != 0) {
-                cmdq_add_ec(doapply);
-                cmdq_add_key(otmp->invlet);
-                cmdq_add_dir(dx, dy, 0);
-            }
-            break;
-        case MCMD_ATTACK_NEXT2U:
-            cmdq_add_ec(move_funcs[dir][MV_WALK]);
-            break;
-        case MCMD_TALK:
-            cmdq_add_ec(dotalk);
-            cmdq_add_dir(dx, dy, 0);
-            break;
-        case MCMD_NAME:
-            cmdq_add_ec(docallcmd);
-            cmdq_add_key('m'); /* name a monster */
-            cmdq_add_dir(dx, dy, 0); /* getpos() will use u.ux+dx,u.uy+dy */
-            break;
-        case MCMD_QUAFF:
-            cmdq_add_ec(dodrink);
-            cmdq_add_key('y'); /* "Drink from the fountain?" */
-            break;
-        case MCMD_DIP:
-            cmdq_add_ec(dodip);
-            cmdq_add_userinput();
-            cmdq_add_key('y'); /* "Dip foo into the fountain?" */
-            break;
-        case MCMD_SIT:
-            cmdq_add_ec(dosit);
-            break;
-        case MCMD_UP:
-            cmdq_add_ec(doup);
-            break;
-        case MCMD_DOWN:
-            cmdq_add_ec(dodown);
-            break;
-        case MCMD_DISMOUNT:
-            cmdq_add_ec(doride);
-            break;
-        case MCMD_MONABILITY:
-            cmdq_add_ec(domonability);
-            break;
-        case MCMD_PICKUP:
-            cmdq_add_ec(dopickup);
-            break;
-        case MCMD_LOOT:
-            cmdq_add_ec(doloot);
-            break;
-        case MCMD_EAT:
-            cmdq_add_ec(doeat);
-            cmdq_add_key('y'); /* "There is foo here; eat it?" */
-            break;
-        case MCMD_DROP:
-            cmdq_add_ec(dodrop);
-            break;
-        case MCMD_INVENTORY:
-            cmdq_add_ec(ddoinv);
-            break;
-        case MCMD_REST:
-            cmdq_add_ec(donull);
-            break;
-        case MCMD_LOOK_HERE:
-            cmdq_add_ec(dolook);
-            break;
-        case MCMD_LOOK_AT:
-            g.clicklook_cc.x = x;
-            g.clicklook_cc.y = y;
-            cmdq_add_ec(doclicklook);
-            break;
-        case MCMD_UNTRAP_HERE:
-            cmdq_add_ec(dountrap);
-            cmdq_add_dir(0, 0, 1);
-            break;
-        case MCMD_OFFER:
-            cmdq_add_ec(dosacrifice);
-            cmdq_add_userinput();
-            break;
-        case MCMD_CAST_SPELL:
-            cmdq_add_ec(docast);
-            break;
-        default: break;
-        }
+        act_on_act(act, x, y, dx, dy, dir);
         return '\0';
     }
     return ch;