Subject: The Extinction Patch
From: [email-masked] (Wingnut)
Date: Fri, 17 Mar 2000 04:40:26 GMT
Newsgroups: rec.games.roguelike.nethack

What it does:  Causes extinct species to show up in the genocide list.  These
species are denoted by (Extinct) next to their names.  Extinct species are
creatures which the game no longer generates, because 120 of them have already
been created (or 3 Erinyes / 9 Nazgul.)  Not all forms of monster generation add
to this count, polymorph and gremlin multiplication to name a few.

Note: In 3.2.x, species went extinct after 120 died, this was changed to the
above behavior in 3.3.0.

Species extinctions do not affect the number of monsters genocided, or the
genocideless conduct, and this patch does not cause them to.

Sample output:

Do you want a list of species genocided? [ynq] (n) y
Genocided species:

soldiers (extinct)
erinyes (extinct)

0 species genocided.

To apply:
Save the text between the "cut here" lines as extinct.diff in the nethack/src
directory.
Cd to the nethack/src directory and type "patch -cl end.c -i extinct.diff"
Add a line "#define SHOW_EXTINCT" in nethack/include/config.h
Recompile

To turn the effects off, simply remove the #define and recompile.

Enjoy!

Wingnut

-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
GCS d- s-:+ a--- C++ ULS P L+ E---- W+ N++ !o K- w(---) O-- M- V?
PS++ PE-- Y+ PGP- t-- 5+++ X- R tv b DI+ D+ G e>++ h! r--- y--
------END GEEK CODE BLOCK------

-------Cut Here-------

*** end.old	Sat Dec 11 00:20:54 1999
--- end.c	Sun Dec 12 13:37:20 1999
***************
*** 35,40 ****
--- 35,45 ----
  STATIC_DCL void FDECL(savelife, (int));
  STATIC_DCL void NDECL(list_vanquished);
  STATIC_DCL void NDECL(list_genocided);
+ #ifdef SHOW_EXTINCT
+ STATIC_DCL void NDECL(list_genod_or_extinct);
+ #endif
+ 
+ 
  #if defined(UNIX) || defined(VMS) || defined (__EMX__)
  static void FDECL(done_hangup, (int));
  #endif
***************
*** 317,323 ****
--- 322,332 ----
  
          if (!done_stopprint &&
                  (!flags.end_disclose[0] || index(flags.end_disclose, 'g'))) {
+ #ifdef SHOW_EXTINCT
+             list_genod_or_extinct();
+ #else
              list_genocided();
+ #endif
          }
  
          if (!done_stopprint &&
***************
*** 937,940 ****
--- 946,1002 ----
      }
  }
  
+ 
+ static void
+ list_genod_or_extinct()
+ {
+     register int i;
+     int ngenocided = 0;
+     char c;
+     winid klwin;
+     char buf[BUFSZ];
+ 
+     /* get totals first */
+     for (i = LOW_PM; i < NUMMONS; i++) {
+         if( (mvitals[i].mvflags & G_GONE) && !(mons[i].geno & G_UNIQ) )
+         ngenocided++;
+     }
+ 
+     /* genocided species list */
+     if (ngenocided != 0) {
+         c = yn_function("Do you want a list of species genocided?",
+                         ynqchars, 'n');
+         if (c == 'q') done_stopprint++;
+         if (c == 'y') {
+             klwin = create_nhwindow(NHW_MENU);
+             putstr(klwin, 0, "Genocided species:");
+             putstr(klwin, 0, "");
+ 
+ /* uniques shouldn't show up as (extinct), and fortunately, no unique may be 
+ genocided */
+ 
+             for (i = LOW_PM; i < NUMMONS; i++)
+                 if (mvitals[i].mvflags & G_GONE && !(mons[i].geno & G_UNIQ) )
{
+                     if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST)
+                         Sprintf(buf, "%s%s",
+                                 !type_is_pname(&mons[i]) ? "" : "the ",
+                                 mons[i].mname);
+                     else
+                         Strcpy(buf, makeplural(mons[i].mname));
+                     if( !(mvitals[i].mvflags & G_GENOD) )
+                         Strcat(buf, " (extinct)");
+                     putstr(klwin, 0, buf);
+                 }
+ 
+             putstr(klwin, 0, "");
+             Sprintf(buf, "%d species genocided.", num_genocides());
+             putstr(klwin, 0, buf);
+ 
+             display_nhwindow(klwin, TRUE);
+             destroy_nhwindow(klwin);
+         }
+     }
+ }
+ 
  /*end.c*/
+ 

-------Cut Here-------