]> granicus.if.org Git - nethack/commitdiff
gender-specific names can be used in .lua files with the gender upheld
authornhmall <nhmall@nethack.org>
Thu, 31 Dec 2020 23:49:43 +0000 (18:49 -0500)
committernhmall <nhmall@nethack.org>
Thu, 31 Dec 2020 23:51:00 +0000 (18:51 -0500)
Revert "monster name references in .lua files"
This reverts commit 0e0aa7bdf602fd8e3c382a40ae7ebe9823b9951b.

dat/Tou-goal.lua
doc/fixes37.0
src/sp_lev.c

index 90fc53f4895546c7aceb797936224bea8c276ecd..2fc3de33c0a369e7e4ed7b76857d1ff9a929d031 100644 (file)
@@ -135,12 +135,12 @@ des.monster("giant spider")
 des.monster("s")
 des.monster("s")
 -- ladies of the evening
-des.monster("amorous demon", 02, 08)
-des.monster("amorous demon", 08, 08)
-des.monster("amorous demon", 02, 14)
-des.monster("amorous demon", 08, 14)
-des.monster("amorous demon", 02, 17)
-des.monster("amorous demon", 08, 17)
+des.monster("succubus", 02, 08)
+des.monster("succubus", 08, 08)
+des.monster("incubus", 02, 14)
+des.monster("incubus", 08, 14)
+des.monster("incubus", 02, 17)
+des.monster("incubus", 08, 17)
 -- Police station (with drunken prisoners)
 des.monster({ id = "Kop Kaptain", x=24, y=09, peaceful = 0 })
 des.monster({ id = "Kop Lieutenant", x=20, y=09, peaceful = 0 })
index 10eea91c555d990af5df46126b9ce93153b5b7ca..ab7033686e8d0818874b60ba8ffa4a838a9acbfb 100644 (file)
@@ -468,8 +468,10 @@ arbitrate when there is a conflict between gender term (male or female) and
 wizard mode sanity check complained about Wizard's clone mimicking a monster
 new ^G gender-naming handling code required a guard against null permonst
        pointer which could occur under some circumstances
-replace some monster names in .lua files with their new equivalents
+replace "aligned priest" entries in Pri-loca.lua, astral.lua, minetn-1.lua,
+       and sanctum.lua, with "aligned cleric"
 attempting to swap places with a peaceful monster might cause it to flee
+gender-specific monster names can be used in .lua files with the gender upheld
 
 curses: 'msg_window' option wasn't functional for curses unless the binary
        also included tty support
index 859945bbca93205543cf3a0700f3e93aba380b85..dcf6ff645365c62116a39a6f2bb638b00f742966 100755 (executable)
@@ -110,8 +110,8 @@ static long FDECL(line_dist_coord, (long, long, long, long, long, long));
 static void FDECL(l_push_wid_hei_table, (lua_State *, int, int));
 static int FDECL(get_table_align, (lua_State *));
 static int FDECL(get_table_monclass, (lua_State *));
-static int FDECL(find_montype, (lua_State *, const char *));
-static int FDECL(get_table_montype, (lua_State *));
+static int FDECL(find_montype, (lua_State *, const char *, int *));
+static int FDECL(get_table_montype, (lua_State *, int *));
 static int FDECL(get_table_int_or_random, (lua_State *, const char *, int));
 static int FDECL(get_table_buc, (lua_State *));
 static int FDECL(get_table_objclass, (lua_State *));
@@ -3011,31 +3011,39 @@ lua_State *L;
 }
 
 static int
-find_montype(L, s)
+find_montype(L, s, mgender)
 lua_State *L UNUSED;
 const char *s;
+int *mgender;
 {
-    int i;
+    int i, mgend = NEUTRAL;
 
-    for (i = LOW_PM; i < NUMMONS; i++)
-        if (!strcmpi(mons[i].pmnames[NEUTRAL], s)
-            || (mons[i].pmnames[MALE] != 0
-                    && !strcmpi(mons[i].pmnames[MALE], s))
-            || (mons[i].pmnames[FEMALE] != 0
-                    && !strcmpi(mons[i].pmnames[FEMALE], s)))
-            return i;
+    i = name_to_monplus(s, (const char **) 0, &mgend);
+    if (i >= LOW_PM && i < NUMMONS) {
+        if (is_male(&mons[i]) || is_female(&mons[i]))
+            mgend = is_female(&mons[i]) ? FEMALE : MALE;
+        else
+            mgend = (mgend == FEMALE) ? FEMALE
+                        : (mgend == MALE) ? MALE : rn2(2);
+        if (mgender)
+            *mgender = mgend;
+        return i;
+    }
+    if (mgender)
+        *mgender = NEUTRAL;
     return NON_PM;
 }
 
 static int
-get_table_montype(L)
+get_table_montype(L, mgender)
 lua_State *L;
+int *mgender;
 {
     char *s = get_table_str_opt(L, "id", NULL);
     int ret = NON_PM;
 
     if (s) {
-        ret = find_montype(L, s);
+        ret = find_montype(L, s, mgender);
         Free(s);
         if (ret == NON_PM)
             nhl_error(L, "Unknown monster id");
@@ -3074,7 +3082,7 @@ lua_State *L;
 {
     int argc = lua_gettop(L);
     monster tmpmons;
-    int mx = -1, my = -1;
+    int mx = -1, my = -1, mgend = NEUTRAL;
     char *mappear = NULL;
 
     create_des_coder();
@@ -3106,7 +3114,9 @@ lua_State *L;
             tmpmons.id = NON_PM;
         } else {
             tmpmons.class = -1;
-            tmpmons.id = find_montype(L, paramstr);
+            tmpmons.id = find_montype(L, paramstr, &mgend);
+            tmpmons.female = (mgend == FEMALE) ? FEMALE
+                                : (mgend == MALE) ? MALE : rn2(2);
         }
     } else if (argc == 2 && lua_type(L, 1) == LUA_TSTRING
                && lua_type(L, 2) == LUA_TTABLE) {
@@ -3119,7 +3129,9 @@ lua_State *L;
             tmpmons.id = NON_PM;
         } else {
             tmpmons.class = -1;
-            tmpmons.id = find_montype(L, paramstr);
+            tmpmons.id = find_montype(L, paramstr, &mgend);
+            tmpmons.female = (mgend == FEMALE) ? FEMALE
+                                : (mgend == MALE) ? MALE : rn2(2);
         }
 
     } else if (argc == 3) {
@@ -3133,7 +3145,9 @@ lua_State *L;
             tmpmons.id = NON_PM;
         } else {
             tmpmons.class = -1;
-            tmpmons.id = find_montype(L, paramstr);
+            tmpmons.id = find_montype(L, paramstr, &mgend);
+            tmpmons.female = (mgend == FEMALE) ? FEMALE
+                                : (mgend == MALE) ? MALE : rn2(2);
         }
     } else {
         lcheck_param_table(L);
@@ -3174,7 +3188,10 @@ lua_State *L;
 
         get_table_xy_or_coord(L, &mx, &my);
 
-        tmpmons.id = get_table_montype(L);
+        tmpmons.id = get_table_montype(L, &mgend);
+        if (mgend != NEUTRAL)
+            tmpmons.female = mgend;
+
         tmpmons.class = get_table_monclass(L);
 
         lua_getfield(L, 1, "inventory");