Talk:Slash'EM Extended

From NetHackWiki
Jump to: navigation, search

It appears that as of version 1.1.7 (maybe?) the dungeon generator was changed to generate dungeon levels that look much different than the traditional look of a nethack or slashem dungeon level. Is there a way to revert to the older look or would that break additional functionality that came with the new dungeon generator? Mainly I find the multicolor-wall rooms, and # as wall, distracting. If there's no way to change back to old looks easily (maybe by the `dungeon' option, I'll just have to get used to the new look. Thanks. --G7nation Fri Mar 24 20:56:50 UTC 2017

The colors are meant to stay; dungeon symbols can be changed to suit the player's needs, but it's complicated and not very well documented. It can be done by editing the options file and adding something like this:

DUNGEON= 032 186 205 201 187 200 188 206 202 203 \

185 204 249 239 239 254 254 249 177 177 \

060 062 060 062 095 092 035 244 247 249 \

247 042 042 179 196 046 035 247

Take note that these values do not yield a desirable result. You'd probably have to experiment to make it look good, though at least it's possible in theory. --Bluescreenofdeath (talk) 18:13, 25 March 2017 (UTC)

On the server, I created the accounts gehenna, iwbtg, hippie, blindfox, dudley, and lostsoul. The passwords are the same as the usernames, and they are for anyone to use (these are the usernames that give special things). Please do not abuse!! Adding to the redditrobins even though it's not technically a redditrobin account. 17:38, 8 February 2015 (UTC)Elronnd

Cool, I had already wanted to suggest doing that; now everyone can enjoy those special playing modes, and I saw that the game has been updated for the server, too - special levels are working now, and the crash bugs are (hopefully) fixed as well! :-) --Bluescreenofdeath (talk) 07:10, 9 February 2015 (UTC)

Is there going to be a windows binary release that supports graphical tiles?

Only if someone makes tiles, since I don't use them, and I also suck at making new ones for all the new monsters. New versions often add new monsters/items/other things too, so they would all need new tiles as well... anyway, if someone wants to take their time making tiles, they may be included in a future release, but I certainly can't make them myself. --Bluescreenofdeath (talk) 05:58, 12 May 2014 (UTC)
Dear Amy, I'm impressed of your efforts and energy and sadistic humor you put in this fork, really appreciate it. It's whole new era of Slash'em since 2006! I will definitely continue playing S'EX (and maybe sometimes ascend)))). Usually I play roguelikes in ascii although tiles are nice to have. How much new tiles do you need? Maybe I could do some pixelart. But probably making tiles would be more productive after several major versions when most of new content would be added. --Transcendreamer (talk) 10:02, 19 May 2014 (UTC)
Are you thinking to port to android? (I used to play unnethack on my phone.) --Transcendreamer (talk) 10:02, 19 May 2014 (UTC)
Glad that you like it! Unfortunately there would have to be many hundreds of tiles for the monsters alone, and also some for new items; the sourcecode (especially monst.c) shows what's been added. Compared to vanilla SLASH'EM, there are about twice as many monsters now. About an Android port, I'd do that if only I knew how... maybe there is a step-by-step guide on how to compile the game for Android (or other platforms)? --Bluescreenofdeath (talk) 11:26, 19 May 2014 (UTC)
Wow, twice compared to slashem, it rocks. Probably they will not even fit in a single file. Maybe is it possible to group monsters/items and make them using shared tiles? E.g. Kobolt uses Kobold tile, Ogro - Ogre tile, Trollor - Troll tile, etc. So we will need some kind of mapping table for those monsters/items which could be mapped on shared tiles. And for the rest unique monster/items I will draw a new tiles. What do you think? Or they all are mostly unique? --Transcendreamer (talk) 12:15, 19 May 2014 (UTC)
I'm not a programmer but it seems to me that there's a bundle for android and at least 2 nethack ports are using it: Inside source repository there is a svn/trunk/sys/android folder, and readme file contains build instructions accompanied with android specific resource files. --Transcendreamer (talk) 12:15, 19 May 2014 (UTC)
Well I did take a look at the android code, but it seems the compilation instructions are for Linux/Ubuntu systems, and all the PCs that I use are running Windows. Maybe there would be some way to make it work, but it's certainly not going to be easy. And also, real life is currently limiting the amount of time I can spend on Slash'EM Extended, unfortunately... Of course some tiles could be shared, but there's also lots of all-new stuff (like wall/rub monsters), and I'd also need to figure out how to add new tiles to the game in the first place. But if you really want to make them, I'll see what I can do. --Bluescreenofdeath (talk) 07:02, 20 May 2014 (UTC)

Version History


Could we get a Version History?

Useful information might include - version (your version #), date released, what did you change and/or add, are previous version Bones files supported

--Diesalot (talk) 20:16, 27 May 2014 (UTC)

I fear that's not very easy for me to do, since I didn't really take notes on which versions added/changed what. The main Slash'EM Extended page mentions for a few features when they were added (mainly new races/classes), and the other thing that I can do is to make a chronological list showing the order in which most of the new stuff was added, but without exact version numbers unfortunately. Currently, most of the time old savegames and bones files will no longer work upon updating; I hope that if some day all the items, monsters and roles/races that I want in the game have been added, compatibility will be better. However the variant is still in a WIP state; the current release version is stable and playable, but new versions are appearing often.
Also, I got your logfile and analyzed it a bit. Your version of the game is more than a month old, however; I remember that being the version where enemies with firearms were grossly overpowered, as evidenced by the fact that most of your characters died to bullets. Enemy gunslingers have been nerfed quite a bit since then, and there will (probably) be a new version soon that improves the player's chances of surviving their attacks even more. What amazes me is that the lycanthropic Knight was actually your best run; my own lycanthropic characters seem to die a lot earlier, despite my efforts to make that race not suck... Many of the harder races (insectoid, mould, ungenomold etc.) have also been improved, so they should be more playable now. Some of your most obscure deaths were the following ones: "killed by a petty black widow" - this must obviously have been a polytrap abomination, since that is a level 24 creature that shouldn't be normally generated on dlvl5. "poisoned by a brown pudding" - yeah, pudding farming is a lot harder to do, and puddings have some evil disease-inflicting attacks so it's probably best to take them out with ranged attacks or spells. And "killed by a died" is actually a bug; I suppose it was some sort of disintegration attack, which have the weird tendency to give that message instead of "killed by an antimatter vortex" or similar. Of course, if it actually was an antimatter vortex that killed you, it was another outta-depth spawn (probably a polytrap abomination) on dlvl4.
Thanks for the feedback, I'll keep on working to make Slash'EM Extended more enjoyable (especially by making the early game a bit less deadly while late game remains dangerous) and also try to create some sort of version history. --Bluescreenofdeath (talk) 06:12, 28 May 2014 (UTC)

Thanks for the feedback, I appreciate it all. I am now using your most recent version and will log as many games as I am able until your next update (I'll be sure to dump the 50 games I sent you from the next log file). My current Snake Valkyrie just found the first Noble artifact in Minetown - I have not wielded it (yet), but it could prove pretty helpful. --Diesalot (talk) 15:58, 28 May 2014 (UTC)

A rudimentary version history has been created. It's very incomplete though, as I unfortunately didn't take enough notes to see which version changed what. Still, I guess it's better than nothing. --Bluescreenofdeath (talk) 09:51, 6 June 2014 (UTC)

Bug Report

Perhaps you have already squashed this - it is from your End of May 2014 version. When selling a crude short sword in a shop: "Manlobbi offers 4 pieces of eightghtghtghtghtghtghtghtghtghtghtghtghtghtghtghtght" (that's "ght" 16 times) --Diesalot (talk) 17:10, 10 June 2014 (UTC)

This is a side effect of the Pirate role; actually I don't know why the game is doing this, since it's supposed to simply transform "zorkmids" into "pieces of eight", but since I don't know how to fix it and it's (hopefully) not crashing the game, it hasn't yet been fixed. Of course it is a bug though; I recall floating eyes also giving similarly weird messages... --Bluescreenofdeath (talk) 05:56, 11 June 2014 (UTC)
I found out why the game does this. That happens if you copy a string unto himself. Appearently there is a failsafe feature in this C-Compilers sprintf() funktion, beacause the "normal" effect would be that your computer crashes. During the course of this day, I will write a Bugfix, and post it here or write an E-mail to Amy (if I find your adress). Until when better don't play a pirate. -- CK 07:24, 13 June 2014 (UTC)

OK, it is done. As you are German, like me, this makes things a lot of easier. Der Fehler ist in der Funktion replace() in PLINE.C . Die erzeugt einen String und Schreibt ihn immer in den gleichen globalen char vektor buffer[]. Wenn ein String, mit dem replace() mehrmals aufgerufen wird als Parameter von pline() auftritt, wird beim ersten Aufruf das Ergebnis in buffer zurückgeliefert, und beim zweiten Aufruf ist buffer somit der Parameter *st der Funktion replace(). Die Funktion replace() muss also einen String an Ort und Stelle verändern. Das geht solange gut, wie der einzusetzende String *repl kleiner als der zu ersetzende String *orig ist. Ist jedoch *repl größer, wird beim einsetzen von *repl, der zu erhaltende Schwanz von *st (das ja identisch mit buffer[] ist) überschrieben. Danach versucht sprintf() den Schwanz, der ja bereits überschrieben ist, an eine Stelle nach seinem Anfang kopiert. Es werden also in der Mitte des Strings Buchstaben gelesen, die ans Ende angefügt werden. Der String wird also immer länger, da der Lesezeiger von printf() immer wieder die bereits geschriebenen Buchstaben einliest und den String weiter verlängert, und somit den String bis ins Unendliche verlängert.

"You hit the floating eye.",0
"Ye hit the floating eye.",0
;/------------------------------------- String
;|                              /------ Terminator
;|                              |  /--- Schrott am Ende
;v                              v  v
"Ye hit the floating deadlight",0,"qwertzuiopü..."
;                       ^       ^
;                       |       \- Destiny
;                       \--------- Source
;                              /--- Schrott am Ende
;                              |
;                              v
"Ye hit the floating deadlightdqwertzuiopü..."
"Ye hit the floating deadlightdlwertzuiopü..."
"Ye hit the floating deadlightdliertzuiopü..."
"Ye hit the floating deadlightdligrtzuiopü..."
"Ye hit the floating deadlightdlightzuiopü..."
"Ye hit the floating deadlightdlightzuiopü..."
;                             ^     ^
;                             |     \- Destiny
;                             \------- Source
"Ye hit the floating deadlightdlightduiopü..."
"Ye hit the floating deadlightdlightdliopü..."
"Ye hit the floating deadlightdlightdliopü..."
"Ye hit the floating deadlightdlightdligpü..."
"Ye hit the floating deadlightdlightdlighü..."
"Ye hit the floating deadlightdlightdlight..."
;                                   ^     ^
;                                   |     \- Destiny
;                                   \------- Source
; Das ganze geht weiter bis beim Zeiger Source ein Terminato (0)
; gefunden wird, was aber niemals passiert

--CK 09:12, 13 June 2014 (UTC)

Okay, danke für die Erklärung, ich habe jetzt ein Workaround geschrieben, aber ein echter Bugfix wäre besser (das Workaround sorgt lediglich dafür, daß Meldungen, in denen "eye" und "zorkmid" genau 1mal vorkommen, richtig funktionieren); meine E-Mail-Adresse ist failureclockATgmxDOTde (AT durch Klammeraffe und DOT durch Punkt ersetzen :-). Oder einfach die berichtigte Funktion hier posten. Der Bugfix würde dann von mir in die nächste Version eingefügt werden. Vielen Dank! --Bluescreenofdeath (talk) 09:39, 13 June 2014 (UTC)

Nun, der Ansatz das ganze zu korrigieren. Man muss dafür sorgen dass die Quelle von replace() niemals der Puffer ist. Dafür gäbe es mehrere Möglichkeit. replace() könnte mit strdup() eine Kopie erzeugen, die dann vom Aufrufer gelöscht werden muss, so wie es BASIC oder JAVA intern machen, diese Methode ist aber (wie BASIC und JAVA) extrem langsam. Der Aufrufer könnte nach jedem Aufruf eine Kopie mit strcpy() machen, das würde aber bedeuten, das bei jedem Aufruf von pline() massenhaft daten bewegt werden müssen, was noch langsamer ist. Mein Ansatz hingegen nutzt die Tatsache aus, dass es lediglich darum geht, das Quelle und Ziel unterschiedlich sind, also grundsätzlich nur zwei Puffer gebraucht werden. Damit garantiert wird, dass der Puffer bei einem Aufruf niemals der gleiche Puffer wie beim letzten Aufruf ist, reicht es aus, bei jedem Aufruf zwischen den beiden Puffern zu wechseln. Dazu nehmen wir einen globales char vektor buffer[], der 2*BUFSZ groß ist, und eine globale Variable flipflop, die angibt, ob wir die vordere oder die hintere Hälfte nehmen. Gleichzeitig dient flipflop als Wächter, der beim Pufferüberlauf von buffer[] überschrieben wird, und somit einen ungültigen Wert enthält, bei dem panic() aufgerufen wird. Sollte doch mal der Störfall auftreten, dass replace() mit dem Puffer, den sie jetzt nehmen würde als Quelle aufgerufen wird, dann ruft sie im Wizard-mode impossible() auf und liefert ansonsten den unveränderten String zurück. Weiterhin habe ich dafür gesorgt, dass replace() nicht wirksam ist, wenn program_state.in_impossible wahr ist, den impossible() ruft pline() auf. Ich habe die Funktion jetzt so geschrieben, dass sie auf Geschwindigkeit und Sicherheit optimiert ist, also warscheinliche Abbruchbedingungen und Störfälle zuerst geprüft werden, die Reihenfolge ist also für die Effizienz der Funktion entscheidend. Weiterhin ist wichtig, dass die lokalen Variablen von replace() nicht initialisiert werden, sonder ihren Wert erst erhalten, wenn wir wissen, dass sie auch gebraucht werden, also ein zu ersetztendes Wort aufgetreten ist. Weiterhin ist es Absicht, dass &replace_buffer[] mit (flipflop^=1)?BUFSZ:0 indiziert wird, und nicht mit (flipflop^=1)*BUFSZ, denn erstens würde das bei flipflop werten, die im Störfall größer als 1 sind eine Adresse auserhalb des Vektors zurückliefern und andere Aten zerstören, und zweitens dauert eine Multiplikation etwa 50 Rechenschritte, währen eine Fallunterscheidung etwa 10 Rechenschritte benötigt (Auch wenn die CISP-Architektur des 8086 Prozessors einen Assembler-Befehl zur Multiplikation ermöglicht, heist das noch lange nicht, dass eine Multiplikation schnell geht). Ich konnte die Funktion jetzt nicht ausprobieren, da ich keinen C-Compiler für WIN32 habe, aber es müsste funktionieren (Ansonsten bitte melden).

#if 0 /* code from Amy */
char *replace(st, orig, repl)
const char *st, *orig, *repl;
	static char buffer[BUFSZ];
	char *ch;
	if (!(ch = strstr(st, orig)))
		return st;
	strncpy(buffer, st, ch-st);  
	buffer[ch-st] = 0;
	sprintf(buffer+(ch-st), "%s%s", repl, ch+strlen(orig));
	return buffer;
#endif /* code from Amy */
/* code from CK */
/*Consecutive calls to replace would result in strings copied onto itselves*/
/*So we alternate between two buffers*/
char            replace_buffer[BUFSZ*2]; /* two buffers */
unsigned int    flipflop=0;              /* which one ? */
/* flipflop must be unsigned int (not int or boolean) to act as senitel */
/* If it wrote beyond the end of buffer, flipflop is >1 ... */
/* ... then you can panic */
char *replace(st, orig, repl)
const char *st, *orig, *repl;
        char *buffer;
	char *ch;
        /*Most calls won't match, so do the match first.*/
	if (!(ch = strstr(st, orig)))
		return st;
        /* get a buffer */
        buffer = &replace_buffer[(flipflop^=1)?BUFSZ:0];
        /* Don't convert disorder messages into pirate slang ! */
        /* Nested calls of impossible() call panic(). */
        if(program_state.in_impossible) return st;
        /* If it is the same buffer, something went wrong. */
        /* This may happen if you work with two strings at the same time */
        /* and make intersecting calls to replace */
         /* Assert a disorder if in wizard mode */
         /* otherwise do it silently */
           impossible("Intersecting calls to replace() in pline.c !");
         return st;
        strncpy(buffer, st, ch-st);  
	buffer[ch-st] = 0;
        sprintf(buffer+(ch-st), "%s%s", repl, ch+strlen(orig));
        /* we don't know how much data was destroyed, so assume the worst */
          panic("Memory leak in replace() !");
        /* The return value is one of the buffers. */
	return buffer;
/* code from CK */

-- CK 09:47, 13 June 2014 (UTC)

Scheint zu funktionieren, vielen Dank! Allerdings ist es jetzt anscheinend so: wenn ein zu ersetzender Begriff mehrfach im String vorkommt, z.B. "a floating eye corpse named floating eye", wird nur die erste Instanz von "eye" durch "deadlight" ersetzt. Oder vielleicht war das schon vorher so? Jedenfalls kommen keine "pieces of eightghtghtghtghtght"-Fehler mehr. :-) Translation for non-German speakers: thanks to CK's help the bug has been removed now, and the next uploaded version will have the Pirate slang working as intended. --Bluescreenofdeath (talk) 10:25, 13 June 2014 (UTC)
Okay, new version upload complete! For the sake of it I'll write down what exactly got changed: Kick attacks done by the player can be stronger, gremlins have increased odds of stealing intrinsics at night, couatls and certain other enemies can also drown the player in lava (as opposed to water only) - be careful, eating poisonous corpses has a lower chance to reduce strength, enlightenment can show the player's exercised/abused stats and when to expect the next stat-ups, lycanthrope characters do extra melee damage so they don't completely suck, bashing enemies with bows or polearms isn't as useless as it used to be, and the pirate slang shouldn't be bugged anymore. --Bluescreenofdeath (talk) 10:47, 13 June 2014 (UTC)
Almost forgot, the source code hasn't been updated yet but it will be in the near future.

Also, dass es nur einmal ersetzt wird, liegt daran, dass es in der ursprünglichen Version nur einmal (pro wort) geprüft wird, und das war auch schon vorher so (Im Wizard-Mode "You You You You" in den Staub schreiben, und beim Lesen kommt "Ye read : You You You You"). Wobei die Tatsache, dass sie was man auf den Boden schreibt übersetzt auch nicht umbedingt gut ist, denn wenn man "eyelbereth" auf den Boden schreibt, liest man "deadlightlbereth" und trotzdem müsste das Elbereth funktionieren. Es mehrmals zu ersetzten hat aber auch Nachteile, da man so mit der Fruit Option oder Engrave Strings erzeugen könnte "eyeeyeeyeeye..." die den Puffer zum Überlauf bringen (was mit panic() abgefangen wird, aber ohne panic() wäre es gefährlicher). Um es mehrmals zu überstzen, wäre es denkbar, am Schluss nochmal mit strncmp() zu prüfen, ob der String immernoch vorhanden ist, und wenn ja, *st auf *buffer setzen, und mit goto an den Anfang der Funktion zu springen. Dazu müsste man aber genau prüfen, ob das Ergebnis länger als BUFSZ ist. Ich werde mich mal drum kümmern. Eventuell auch strings in Anführungszeichen ignorieren, um Probleme mit "eyelbereth" zu vermeiden -- CK 12:27, 13 June 2014 (UTC)

So, hab mich jetzt noch mal drum gekümmert, dass replace() mehrere ersetzen kann und zahlreiche Sonderfälle abfängt, und gleichzeitig pline() auf Geschwindigkeit optimiert (da replace() jetzt langsamer ist). Um zu vermeiden, dass der Rechner abstürzt, wenn man versehentlich replace() mit parametern, die sich selbst enthalten aufruft {replace(line,"old","ye olde")} ersetzt sie das gleicher Wort maximal 20 mal. Trotzdem sollten sich selbst enthaltende Ersatzwörter nicht verwendet werden, da man dann etwas wie "ye ye ye ... oldeeeeee" erhalten würde. Das tritt bei den jetzigen Beispielen aber sowieso nicht auf.

In folgenden Fällen wird das Wort nicht ersetzt :

  • Der string beginnt mit '"' - Das wäre nämlich eine wörtliche Rede von einem nich-Piraten. (und Questmonster haben sowieso individuelle Texte)
  • Vor dem gefundenen Wort kommt '"' vor. - Ebenfalls wörtliche Rede
  • Vor dem gefundenen Wort kommt "read","called" oder "named" vor - das wäre eine Eingabe des Spielers, die nicht verändert werden sollte (Problem : Fruit kann nicht erkannt werden). Wörter davor werden aber nicht beeinflusst (You read wird trotzdem zu Ye read, aber der gelesene Text bleibt unverändert)
  • Es kommt "tiger" im String vor, da "tiger eye ring" im Inventar-Menü sowieso unverändert ist, sollte es auch in der oberen Zeile sein.
  • Das Wort ist "Eye" und es kommt nach dem Wort "Aethiopica" oder "Overworld" vor, um Eye of the Aethiopica und Eyes of the Overworld nicht zu verändern.
  • Der String wäre länger als der Puffer, und würde zu panic() führen.

Bei pline habe ich folgendes verändert :

  • Wenn der String zu lang oder zu kurz (<9 z.B. "It hits.") ist, mit '"' anfängt oder wir in impossible() sind tritt sie gar nicht erst in Role_if(PM_PIRATE) ein.
  • Die vielen Abfragen, ob zorkmid in verschiedenen Schreibweisen durch doublon ersetzt werden soll, sind in einem if-block, so dass sie nur gemacht werden, wenn "orkmid" im String enthalten ist.
  • Gleiches gilt auch für "old coin" und "old piece"

Ich schicke es dann mal per E-mail. -- CK 20:45, 13 June 2014 (UTC)

Vielen Dank, ist angekommen und wird bald in die kommende Version eingearbeitet. :-) Eine Erwähnung in der Credits-Liste kommt auch noch.
Critical bugfix update: Everyone who has a version that has the "scroll of healing" item with a Slash'EM Extended executable file from Friday the 13th of June, 2014 or earlier please download the updated binary ASAP. The update from June 14th, 2014 fixes the severe bug that caused the game to destabilize as soon as a monster reads a scroll of healing. --Bluescreenofdeath (talk) 19:53, 14 June 2014 (UTC)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- New Bug (from paniclog): 0.0.7E7F2 20140716: impossible cant find o_id 494 Version 50 - happened when I tried to descend some stairs I have attempted to Recover, but it does not seem to have worked ——Diesalot (talk) 20:30, 16 July 2014 (UTC)

Version 50??? That one shouldn't have this bug anymore... is there anything remarkable that you did prior to the crash? If I can reproduce the bug, I might be able to remove it. Other than that... argh. For me the game didn't crash in a long time so I really can't tell what's going on there. What is your executable file's date? --Bluescreenofdeath (talk) 05:44, 17 July 2014 (UTC)

Executable file date: 16 July 2014 2:29 pm. On the level before the crash, I had a ant/nymph monster room (mostly nymphs). I disposed of most of them before I tried to descend. The room generated on level 4 of the main dungeon thread and if memory serves, there were 2 sets of downstairs (1 probably lead to the gnomish mines). --Diesalot (talk) 13:49, 17 July 2014 (UTC)

uh... that's weird... I've experimented quite a lot lately, trying to reproduce the crash, but for me it didn't reappear. Did the monsters use any weird items, or did the level have any unusual items lying around? The error message may be related to a timered item (egg, lamp etc.); maybe the game spawned something that wasn't initialized correctly... Of course the bug should be removed, but currently I don't really know what may be causing it. As a rule of thumb for playing though - it's probably a good idea to frequently make backups of your savegames in case anything goes wrong, especially if your character is already past the early game. It's supposed to be stable but with a game that big (read: a game that has so much content), chances are there's a few things not working quite right. Still, thanks for pointing out the bug, and hopefully I'll be able to fix it someday! (On a side note: maybe there was a bones file for the level that you tried to descend to, and something was wrong with it?)--Bluescreenofdeath (talk) 05:49, 18 July 2014 (UTC)

Unfortunately, I can't give you anything else to go on. There were probably 10 mirrors, thanks to the nymphs. I had applied a few to better manage how many came after me. I think I left one of the tougher nymphs alive. The several killer bees and 1 soldier ant that I remember seemed especially weak - of course, I wasn't very deep - maybe that controls their toughness. I don't recall any items that were particularly unusual for that point of the game. Nothing really nasty was polymorphed or spawned. I only have 1 bones file for the current version, gnomish mines level 3, and I definitely was not in the mines. Sorry that this was not more helpful. --Diesalot (talk) 12:16, 18 July 2014 (UTC)

Well now I got some weird crash bug too, however in my case it happened when my LostSoul Archeologist died on dlvl 30-something, and it said "Oops... during the post-game wrapup the dungeon suddenly collapsed. obj_is_local" and some random gibberish. Sourcediving definitely seems to suggest the game is now somehow unable to correctly initialize timered objects - just now when I thought applying the 0.0.7E7F3 bugfix to timered monsters would fix things! Argh! Maybe I can someday find out what exactly is going wrong there, but for now, I can only suggest making frequent backups of your savegames... Thankfully the crash seems to be quite rare. --Bluescreenofdeath (talk) 11:58, 20 July 2014 (UTC)
Did some google search; the error seems to be related to using candles. Did you use any candles in your crashy game? According to Ali "Jubilex" Harlow, the bug was fixed already: - yet in my case, I seem to remember having a candle in my inventory when it crashed after death. Maybe I can reproduce it and find out why it's crashing. --Bluescreenofdeath (talk) 12:17, 20 July 2014 (UTC)
Can't seem to be able to reproduce it... :( Neither candles, mirrors, nymph corpses nor killer bee corpses are generating any crash bugs for me. It's normal for low-depth monsters to be weaker; I don't know the exact formula but a higher level difficulty means the same monster types will start at a higher level. Anyway, probably some timered object isn't working right but actually the game doesn't have that many different types of timered objects - candles and other light sources, corpses, cursed figurines (but they're very rare) and objects created from polypiling are all that come to my mind right now... I really hope I'll eventually be able to reproduce it! --Bluescreenofdeath (talk) 06:10, 21 July 2014 (UTC)
Well I've made some headway - found out why the Bleeder quest was crashing so often. It's got something to do with either monster or corpse initialization, however I can only fix the bug for that quest now; seems that some parts of the makemon.c code aren't always working right. Still looking for a way to fix the other occurrences of that pesky bug. --Bluescreenofdeath (talk) 10:36, 23 July 2014 (UTC)

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- V 54 - dmonsfree: 1 removed doesn't match 2 pending--Program in disorder. Please inform Amy... I was playing a Bleeder Lynconthrope which was in the form of a Vampire. I got the above message frequently after being prompted with the "Drink Blood (y/n)?" prompt. --Diesalot (talk) 19:04, 30 July 2014 (UTC)

This bug has appeared for me a few times, too, but when I just fired up a testing game and drank blood from a spawned ogre lord as a lycanthrope bleeder polymorphed into a vampire a few times, no error message appeared... Actually the bug should be fixed already, see here: - but since it doesn't crash the game and (at least in my cases) doesn't seem to affect the game in a negative way, I didn't really look into it yet. To me it seems just as random as those pesky "cant find o_id" errors; while these errors certainly have a cause, I haven't found it yet.
However, you should definitely update the game (the updated version will show the actual version number if you hit the 'v' key) since v54 has a nasty bug in the Bleeder quest that causes the game to crash all the time! Unfortunately I can't tell if savegames will be compatible, but my advice for you is to update as soon as you're done with your current character since the Bleeder quest can be frustrating enough without crash bugs already. --Bluescreenofdeath (talk) 05:52, 31 July 2014 (UTC)

Rumor checking!

I got a rumor regarding a "wand of recharging". I suspect it doesn't actually exist since the rumor seemed too good to be true, but I just want to double-check it! Thanks! --AvzinElkein (talk) 22:28, 18 July 2014 (UTC)

Well, that wand actually exists. :D However, it cannot be recharged more than once since that would be really unbalancing. Also, it's grievously rare. Good luck finding it! --Bluescreenofdeath (talk) 11:58, 20 July 2014 (UTC)

Can I please have a rumor spoiler, telling me which rumors are true and which ones are false? --AvzinElkein (talk) 13:21, 20 July 2014 (UTC)

You can download the source code and look for the files "rumors.tru" as well as "rumors.fal", but I can also create a spoiler page if you want. --Bluescreenofdeath (talk) 05:49, 21 July 2014 (UTC)
I think I will wait until you have truly updated your source code then; thank you! --AvzinElkein (talk) 13:14, 21 July 2014 (UTC)

Bug report 4/8 Level drain insta kills regardless of xp level

Ok, I actually have 2 bugs to report. System is windows 7. First is that getting level drained is an insta kill, regardless of your current level. You get the message "X sinks it's teeth in and drinks your blood!" e.g. a sewer rat, followed by "Aloha, level Y!" e.g. 5, followed by the DYWYPI ending. It is getting pretty annoying.

The second report is that the game restarts ~5 seconds after opening it. No idea what is causing it and it doesn't happen every time.

Lastly, you may want to make a note on the main page that roles can reach skill level Expert on all skills available to them. Thanks, and I enjoy the game :) -- 03:43, 4 August 2014 (UTC)

Wtf??? Something must be bugged in your version, as I just tested the "sink teeth into player to level-drain him" attack both in wizard mode and normal gameplay, and it just takes away one experience level without instakilling the character. Maybe you were already low on hit points? But even then, the game should actually leave the character with 1 HP... The restarting problem doesn't happen to me either; maybe the game always behaves weird on windows 7 (all of my PCs are running Windows XP)? IIRC Windows 7 is a 64-bit system, maybe the level-drain routine confuses its integers somehow while running under such a system?
About the ability to reach expert skill: it will be added. Thanks for reminding me, I wanted to add that info and somehow forgot it. Thanks for the feedback! By the way, a new version has been uploaded; you may want to test level-drain attacks again to see whether they are still instant death (they shouldn't). --Bluescreenofdeath (talk) 05:48, 4 August 2014 (UTC)
The restarting issue is still there, even when running in winxp compatibility mode. Haven't been drained yet. Any tests you can suggest to get more info?

-- 06:48, 4 August 2014 (UTC)

Hmm. The only thing I can think of is testing it on an actual XP system if you have a way to do so. Did the "draining equals instakill" bug happen if something shot you with a wand of draining too? If that's the case, you may want to use wizard mode, allow an intelligent monster to pick up a wand of draining and see whether your character dies if it hits. On my XP systems it just takes off one experience level. --Bluescreenofdeath (talk) 07:03, 4 August 2014 (UTC)
For reference sake, here's the level-draining code, and it's actually completely impossible that it kills a character greater than XL1; what was your tombstone message? "Killed by life drainage"?
if (u.ulevel > 1)
{ pline("%s level %d.", Goodbye(), u.ulevel--);
/* remove intrinsic abilities */
adjabil(u.ulevel + 1, u.ulevel);
reset_rndmonst(NON_PM);	/* new monster selection */
} else {
if (drainer) {
killer_format = KILLED_BY;
killer = drainer;
/* no drainer or lifesaved */
u.uexp = 0;
So as long as u.ulevel is at least 2, the "done(DIED)" operation can't be called, and thus the character shouldn't die... it's really weird...
Solved the riddle of the double opening! It is avast antivirus messing about due to it being a console call. Now to try the draining deaths..—— 13:25, 4 August 2014 (UTC)

Ok, level drain is still insta death. Spawned a Vampire lord at level 14. Text is;

"The vampire lord bites you! Your blood is being drained! Goodbye level 13. [7 pts] You die... I still had over 100 hp remaining and no other problems. Done on wizard mode.

Also, something funky is happening with the potions. Dipping a potion of healing into a level gain only results in "Interesting..." BUT dipping them the other way round results in a "burned diluted potion of extra healing". Dipping items seems to work as expected, including upgrading, as does holy water. I can't for the life of me see any problems in source and I haven't done any editing. I'll continue the testing..-- 10:12, 5 August 2014 (UTC)

It seems that something is wrong with your version for whatever weird reason... just tested it myself with the version from 1st of August, 2014 (I suppose that's the version you're using too?):
"The vampire lord bites you! Your blood is being drained! Goodbye level 15. You feel hydrophobic! [7 pts.]"
Character used for testing was a chaotic male imperial Diver. Then allowed the vampire lord to attack again:
"The vampire lord bites you! Your blood is being drained! Goodbye level 14. [4 pts.]"
No "You die..." messages. The alchemy bug is reproducible for me though; since I didn't really change the alchemy code in any way, I suppose it was like that in SLASH'EM too, except for the "burnt" part - in Slash'EM Extended, all items can take erosion damage. Seems that diluting and burning share the same item flag. The potion then works as a standard potion of extra healing for me. Really don't know why level drain is killing you though. --Bluescreenofdeath (talk) 10:29, 5 August 2014 (UTC)
Yeah, the weirdness continues. Zapping myself with level drain doesn't kill me, just drains a level. Getting bitten by a vampire/sewer rat etc and drained kills me, but only the first time it happens. If I choose not to die, all further drains perform as expected. I assume some variable is not being initialized properly. Guess for now I'll just backup each level or so :) Thanks for looking into it though. May want to leave the restart warning in here for people who use avast.-- 11:20, 5 August 2014 (UTC)

O.K! Definitely an edge case, and I think I have cornered it! The insta die ONLY happens if a MONSTER level drains you with an INNATE attack AFTER a save load and BEFORE anything else affects your levels! (No levels up, no changing dungeon level, no other forms of level drain). I can reproduce this. Hence the initial problem of reloading AFTER reaching level 4 then getting bitten by a sewer rat and dying. Or a vampire and dying. This really points to an uninitialized or improperly initialized call/variable but seems to be a weird minor case. I'll start looking into the alchemy problems now.-- 13:30, 5 August 2014 (UTC)

Problem with alchemy involving potions of gain level solved! Well that was quick. Narrowed down the alchemy failure bug in that it only effected recipes involving 2 potions, where X is dipped INTO a potion of gain level, and only resulted in "interesting.." and no loss of potions. The cause? From line 2994

/* KMH, balance patch -- idea by Dylan O'Donnell <> */
	else if (potion->otyp == POT_GAIN_LEVEL) {
	    res = upgrade_obj(obj);
	    if (res != 0) {
		if (res == 1) { 
		     /* The object was upgraded */
		     pline("Hmm!  You don't recall dipping that into the potion.");
		     prinv((char *)0, obj, 0L);
		} /* else potion exploded */
		if (!objects[potion->otyp].oc_name_known &&
		exercise(A_WIS, TRUE);
	    /* no return here, go for Interesting... message */
	} else if (obj->otyp == POT_POLYMORPH ||...

Because this is several else ifs before mixtype even gets called, nothing gets dipped into potions of gain level outside of this snippet. Same goes for potions of polymorph if you ever want to do alchemy with them. WOO! You are welcome!-- 14:28, 5 August 2014 (UTC) A fix would be to check if the object is not a potion, like with some of the other else ifs, e.g. For line 2994;

/* KMH, balance patch -- idea by Dylan O'Donnell <> */
/* Mixing potions is handled later */
	else if (potion->otyp == POT_GAIN_LEVEL && obj->oclass != POTION_CLASS) {

Should fix it :D -- 14:45, 5 August 2014 (UTC)

Hmm, for some reason I still can't reproduce the level drain bug - reloaded the diver game and instantly allowed a vampire lord to drain me on my next turn. No instadeath. Thanks for the alchemy fix though, it will be implemented in the next version soon. Since you seem to be good at coding and finding bugs, I'll mention another annoying bug that I couldn't get rid of yet, maybe you can narrow it down? The bug is that a punished character (convict or anyone reading a nonblessed scroll of punishment) keeps crashing the game on the Plane of Water. This bug exists in normal SLASH'EM too but not in vanilla NetHack, so it must be due to some SLASH'EM-specific code (the error message is "floorobj: obj not on floor" or something like that) and of course I would like to remove that one too. Maybe I can figure it out myself, but four eyes are faster at tracking down bugs than two... ;) --Bluescreenofdeath (talk) 05:48, 6 August 2014 (UTC)
Thanks, and I'll look into it. I'm just a hobbyist at coding but I like killing bugs. I find fixing other people code easier than writing my own :p Just a suggestion, perhaps it would be worth it to add a KNOWN BUGS section and encourage people to add to, or offer fixes for it.-- 09:02, 6 August 2014 (UTC)
Okay, a rudimentary known bugs list is available here: User:Bluescreenofdeath/Known Bugs - it's probably not complete but I added everything that came to my mind right now. Hopefully some day I can remove the most serious ones from the list. ;) --Bluescreenofdeath (talk) 09:18, 6 August 2014 (UTC)
Added a new bug I found to the bug list, as well as possible solutions.-- 04:30, 10 August 2014 (UTC)
Okay, I'll try to find a way to fix it. Of course the amount of potion descriptions won't be reduced, and it shouldn't be too easy to get powerful potions (so "potion of acid + jasper" certainly won't generate "full healing", but it may generate "healing" as you suggested), but there will probably be a solution that is similar to what you suggested on the known bugs page. Thanks! --Bluescreenofdeath (talk) 06:17, 11 August 2014 (UTC)
Now a fixed version of the binary and source code has been uploaded; my solution was to simply prevent the potion from generating if its appearance doesn't correspond to an existing potion. Of course this isn't the most elegant solution but it prevents the crash bug and also makes it a little harder to create tons of powerful potions just from dipping some otherwise-useless gems. Since the bug doesn't exist any longer now, its entry can be removed from the known bugs page. --Bluescreenofdeath (talk) 06:27, 12 August 2014 (UTC)
Thanks for the hard work :) I'll keep calling them as I see them.-- 11:20, 12 August 2014 (UTC)
From all, I read here about the draining bug, there is a suggestion : It appears, that the C-Compiler for 64bit processors compiles different Source files with different sizes of u.ulevel or another variable. If the bytes before the variable have bit 7 set, the value is interpretetd as negative. Some suggestions :
  • If you recompiled SEE for your 64bit processor, are you sure that you recompiled every file ? Try " MAKE -B ", or delete any object code "ERASE *.OBJ" and the recompile. If you can't recompile it then anymore after erasing the object code, something must be wrong with the MAKEFILE.
  • Try to replace "if (u.ulevel > 1)" with "if ((char) ((u.ulevel)&31) > (char)1)", and "u.ulevel--;" with "u.ulevel=(u.ulevel&31)-1;". This is very failsafe variant. It the bug disapears afterwards, you know that the problem is different variable sizes.
  • add a line "if (u.ulevel < 0 ) panic("u.ulevel = %ld and %d bytes long",(long) u.ulevel,sizeof(u.ulevel));"
  • Are Safegames/Bones from the same Version ?
  • Did you change headers (*.H) and don't recompile some importing source files ?

-- 17:34, 28 August 2014 (UTC)

Bug Report

So my game crashed just now. I stepped on to a polymorph trap and turned into a monster I can't remember the name of. I'd never heard of it before though. The game crashed with the prompt please contact Amy to report this bug. I pulled this from my panic log. 0.65.7E7F2 20140921: panic monsndx - could not index monster (-1) Sorry I'm not quite as tech savy as most of the posters on here. I'm guessing that I polymorphed into a creature that is listed but does not have attributes listed for it yet.

Ndwolfwood 00:54, 22 September 2014 (UTC)
Hmm, weird. That didn't happen to me yet; the error message says the game somehow tried to spawn monster -1, which obviously doesn't exist. A quick wizmode test doesn't reproduce it either. So you have no idea what the name of the monster was, or maybe the glyph your character turned into? Basically, however, it should be impossible because there's no reason why the game would try to spawn a monster with a negative index number... Can you recover your game?
On a side note, it seems you're using version 65; meanwhile the game has been updated with quite some interesting new features, including an improvement to the Jedi role. You may want to download the newest version provided you don't have a character running (v65 savegames are no longer compatible). Maybe if the polymorph trap error reappears, I can try to figure out what causes it but currently I don't have a clue... --Bluescreenofdeath (talk) 10:20, 22 September 2014 (UTC)

Bug report: stepping on a heap of shit crashes the game.

Hello. I haven't found a proper place for bug reports, that's why I'll post it right here.

Stepping on a heap of shit crashes the game. Reproducable: always. Playing nymphian zyborg, v70.

Whoops! No idea what's going wrong there, but it's segfaulting for me, too. Maybe that's why I've had several random segfaults lately. Thanks, I'll have a look at it and hopefully find out why it crashes. I'll test all the other traps too, to make sure all of them work as intended. --Bluescreenofdeath (talk) 05:44, 30 September 2014 (UTC)
Hmm. The game is attempting a rnd(0) call for some reason. This should be easy to fix actually; I'll upload a fixed version of the game soon. --Bluescreenofdeath (talk) 05:48, 30 September 2014 (UTC)
Okay, so the error resulted from me being stupid while attempting to rework the traps... you may want to download the new version (v71) now, where that bug shouldn't exist any longer. Unfortunately the new version breaks savegame and bones file compatibility though. Also, the bug happened on shallow dungeon levels only; traps that do damage (yes, arrow and dart traps were bugged too, as well as some others) now call rnd((level_difficulty() / x) + 1) instead of the bugged rnd(level_difficulty() / x) routine. Even if it somehow still results in a rnd(0) call, I also reworked the code in rnd.c to make sure it doesn't segfault; now, the game will just print a "program in disorder" message instead but continue working. Thanks for your bug report, it's really appreciated since it helps me to track down those nasty bugs; if you encounter any other crashes, feel free to post about them here! :) --Bluescreenofdeath (talk) 06:04, 30 September 2014 (UTC)

Thank you for a quick fix. It works now :)

Bug report: impossible to pick some roles, because the letters duplicate for them.

I haven't managed to pick roles: Rocker, Chevalier, Activisor (and probably some others), because their letters (r, c, a respectively) duplicate with vanilla/older roles: Rogue, Caveman, Archeologist respectively.

Either it is not possible at all to pick those roles, or possible, but there are completely no clues of how to do it.

Well, I figured it out. If you run slashem on windows (xp and 7 in my case) without changing terminal window height (25 or 24 by default), then you are most likely avoid this bug. But should you raise the height, allowing more lines to appear on screen, you encounter the bug.

I'd suggest this workaround: don't duplicate letters, replacing them with vacant symbols (@#$%^&* etc).

This is unfortunately a problem by design; I don't know where exactly the game assigns letters to the playable roles and races, so I tried to make sure that no more than two with the same first letter appear on the screen at once. Yes, I was aware of that problem but currently that's the best I can do; somewhere in the code there is a function that automatically assigns the starting letter of a role/race to the selection, and makes it uppercase if the previous one has the same letter, but other than that, I dunno. The best way is probably to have a window height of 25 letters which allows everything to be selected. But if I manage to figure out that part of code someday then all the roles and races will get distinct symbols. --Bluescreenofdeath (talk) 05:51, 2 October 2014 (UTC)

Bug report: "You fall below the bottom of the page! You die..." after reading identify scroll.

Hello again. I'm playing PsiClkFemNeu Xp:10/6710 and now I'm on Dlvl:7. Windows SlashEM Extended tty Version 0.74.7E7F2 - last build Fri Oct 03 22:41:34 2014. I read one of the identify scrolls (not standard id), and the output just shocked me!

You drop a potion of gain level {1}.
You drop a potion of healing {1}.
You drop a fluorescent potion {1}.
You drop a turquoise potion {1}.
You drop 3 thaumaturgic potions {3}.
D - 3 thaumaturgic potions {3}.
What do you want to read? [###bcijmopr-tvzJMPX-Z or ?*]
As you read the scroll, it disappears.
You fall below the bottom of the page! You die...
Do you want your possessions identified? DYWYPI? [ynq] (n) _
This is an identify scroll.
W - an uncursed wand of make invisible (0:5) {1}.

After the "This is an identify scroll" it allowed me to choose an item, identified it and then the game went on normally.

Hahaha, this is not a bug, but a reference to the TV Tropes page for NetHack. See here: Nethack at TV Tropes - it's at the bottom of the page (unsurprisingly ;). Yes, I'm fully aware of the fact that this message can scare a player out of their seat, but that's intentional, and the character doesn't really die so you can just go on playing. Bonus points if (like me) you have the sounds option set to play a dramatic tune if any message on the screen contains the "DYWYPI" string, which will then usually play on a game over. :D (Do I win the "most sadistic programmer" award for this? :) --Bluescreenofdeath (talk) 06:04, 6 October 2014 (UTC)

Bug report: (dungeon collapse) monsndx - could not index monster (-1)

Hello again, Amy. I quaffed a blessed polymorph potion and the dungeon collapsed. The monster I was trying to polymorph into is called "How About A Pupil Experiment - Cut Off Your Ears?" :)

0.74.7E7F2 20141006: panic monsndx - could not index monster (-1)

Then I had to change the extention of the samegame left after the collapse, loaded the game successfully and it appeared I've actually managed to polymorph into that thing.

Restoring save file...  You return to level 3 in The Gnomish Mines.
Finishing off potion of polymorph...

Later playing in this monster form was very unstable, any my attack resulted in program disorder:

You are suddenly very hot!  [3 pts.]  strange attack of yours (84)
Program in disorder. Please inform Amy (Bluescreenofdeath at nethackwiki) about
this bug.
You are suddenly very hot!  [3 pts.]  strange attack of yours (140)
Program in disorder. Please inform Amy (Bluescreenofdeath at nethackwiki) about
this bug.
strange attack of yours (220)

When I look at myself (hitting ; twice), I get this:

Pick an object.
do_look:  bad glyph -1 at (63,8)
Program in disorder. Please inform Amy (Bluescreenofdeath at nethackwiki) about
this bug.
        an unexplored area
What the heck??? The string you mention is actually a taunt uttered by certain types of monsters, which means I have no idea why you would polymorph into that... Is the bug reproducible in wizard mode? If I try it, my TraRedMalCha turned into a journeyman dark wall and the game continues to work... Anyway, the game apparently tried to polymorph you into a monster with the index number -1, which obviously doesn't exist. You're not the first player to report that bug either but since it's not happening to me so far, I can't really tell why it happens. Somewhere the polymorph code may have an error that causes the "monster to polymorph into" index to become -1, resulting in the crash bug. Until I can nail down that problem, I'd advise you to unpolymorph if you can since your bugged polymorph form obviously destabilizes the game. --Bluescreenofdeath (talk) 14:32, 6 October 2014 (UTC)
Well, I just quaffed fifty more blessed potions of polymorph with that character and turned into various monsters but the game remained stable. No idea what's going wrong, perhaps it's role/race dependant, or perhaps you're wearing some sort of dragon scale mail (but that should cause you to polymorph into various dragons)? --Bluescreenofdeath (talk) 14:35, 6 October 2014 (UTC)
Found it! The bug was caused by the new (but bugged) code for polymorphing with a worn dragon scale mail. Now the polymorphs work as intended, but I also put some safety code in place that catches cases where the game tries to polymorph the player into a nonexistant monster; instead of crashing, it simply says "uh-oh, the polymorph didn't seem to work". However, old savegame and bones files aren't compatible with the fixed version. --Bluescreenofdeath (talk) 09:55, 14 October 2014 (UTC)

Bug report: upon reaching Dlvl:12 - Couldn't load "makemase.lev" - making a maze.

Well, pretty self-explanatory, I hope.

Yes, and it's also not a bug but a workaround, really; I didn't find any other way to force the game to make a random maze level outside of the Gehennom. The "makemase" level file doesn't exist; at first it did and I tried to put code in it that generates random mazes but it just wasn't working as intended. So that special level displays the message you've seen instead (it can appear anywhere from dlvl5 to dlvl39) and a random maze is generated. In earlier versions those were guaranteed to contain minotaurs but that would be very evil on dlvl5. ;) --Bluescreenofdeath (talk) 05:46, 8 October 2014 (UTC)

Random segfaults hopefully fixed for the time being

A critical bugfix update (v75) has just been uploaded. It fixes the chance of monsters walking into traps randomly crashing the game with a segfault. Let's hope there aren't other segfault bugs in the game as well... Savegame and bones files from previous versions are no longer compatible though. --Bluescreenofdeath (talk) 15:29, 8 October 2014 (UTC)

Bug? Poisoned by a ... what?

I smacked a Grey Pudding or ooze (the one that makes you ill). I couldn't save myself from death, but I found my log file interesting: 0.83.7 11716 0 5 5 93 111 1 20141119 20141118 1 Wiz Dop Fem Law One27,poisoned by a �a Conduct=119 --Diesalot (talk) 19:47, 19 November 2014 (UTC)

Yes, that happened to me too at least once; it's because the "delayed killer" isn't set correctly. This might get fixed someday if I can find out how to correctly pass the delayed killer string to the function responsible for food poisoning. On a side note, either stoning or disintegration (can't remember which one) has a similar bug where the game simply says "killed by a died". However, this bug is merely cosmetic and doesn't (from what I can tell) cause crashes or savegame corruption. Thanks for playing, and maybe the upcoming version v84 will correctly display the cause of death! --Bluescreenofdeath (talk) 12:28, 20 November 2014 (UTC)

Orc and twoweapon

How about allow orcs to dual wielding? Of all the races, orcs are the ones more likely to dismiss a shield in favour of another weapon.

Hmm, I'll think about it. Strictly speaking it makes no sense that they can't; in Skyrim (The Elder Scrolls 5) for example, enemy orcs often spawn with two weapons. Maybe I'll allow them to dual-wield in a future version. --Bluescreenofdeath (talk) 13:05, 26 November 2014 (UTC)
Okay, you may want to re-download the game; now your orcish characters should be able to dual-wield. Have fun! :) --Bluescreenofdeath (talk) 12:39, 27 November 2014 (UTC)
Wow! That was very quick! Not expected you working this fast! Many thanks! Keep up the good work! --Amnekian (talk) 22:00, 27 November 2014 (UTC)

Buildsystem unification?

I'm on Linux, and am interested in porting it. As one step of that, would you accept patches to integrate your changes with the pre-existing SLASH'EM build system on windows? (i.e. sys/winnt, rather than the custom makefile added in src/).

I'd probably do that in three phases - the first would be getting it to build at all with the sys/winnt buildsystem by migrating changes, the second would be full parity of build-time config options, and the third would be a patch to remove the src/ makefiles and add a doc for how to build with sys/winnt (which could be taken straight from SLASH'EM upstream's readme.txt, in all likelihood) --Eternaleye (talk) 11:22, 8 December 2014 (UTC)

Oh, it looks easier than I'd thought to do that, since your src/ makefiles are based on the sys/winnt ones! --Eternaleye (talk) 11:26, 8 December 2014 (UTC)
Well, if you're able to port the game and make a Linux binary then by all means go for it, I could then add a download link for it so Linux users can enjoy the game without having to use the Wine emulator tool. What's important, though, is to make sure the makefile is configured to compile all the added special level files, like "sheol.des", "compu.des" etc.; they're in the src/makefile.gcc but not in the sys/%s/makefile.%s ones (replace %s with the various folder/file names). Anyway, nice to see you're interested in the game, and maybe there will be a Linux version! :) --Bluescreenofdeath (talk) 11:39, 8 December 2014 (UTC)
It's definitely looking possible - I've got it imported into git, using upstream 0.0.7E7F2 as a base so I can more easily see what changes you made. So far, it looks like unifying the windows buildsystem with the one SLASH'EM already had should be relatively easy, and that'll make adding support for other platforms much easier. One thing is that I really would suggest using version control, such as git - it saves a lot of the effort you're having to put into making xfoox and yfooy copies, because you've always got the history of the changes and can revert to an earlier revision even on a per-file basis. If you have any questions about git (or other version control systems, though git's what I'm best with) feel free to poke me; I'd be glad to help. --Eternaleye (talk) 11:55, 8 December 2014 (UTC)
*ding*! "Hello Eternaleye, welcome to SlashEM Extended! You are a neutral female doppelganger Zyborg. You are lucky! Full moon tonight." --Eternaleye (talk) 13:08, 8 December 2014 (UTC)
Great! Where can other Linux users get it? I'd like to put a link somewhere. Also, the newest Slash'EM Extended version is v85; if you hit the v key to check the version of what you just compiled, it should say 85 (this is important because up to v84 many of the new roles didn't even exist yet). Thanks a lot! --Bluescreenofdeath (talk) 13:13, 8 December 2014 (UTC)
I still need to do some fixes, and unlike Windows there's enough variety in Linux that one prebuilt version won't necessarily work consistently (library versions, 32/64, etc). However, what I'm working to do is make it so the Install.unx file mentioned in the readme.txt completely true for what I'm doing, so people can build it using the exact same procedure as SLASH'EM upstream. Anyway, I just downloaded the source code today - 'v' prints "Unix SlashEM Extended Version 0.85.7E7F2 - last build Mon Dec 8 04:56:29 2014." (I'm in the US PST8PDT timezone) --Eternaleye (talk) 13:25, 8 December 2014 (UTC)
Okay, so I've pastebinned the three patches I applied here: . The first simply adds the level definitions to the Unix build; the others fix up build failures that occurred when not on Windows (both were minor). For future arches, basically the only thing needed should be the first patch (fingers crossed). If these can make it into your source code, any Linux user can compile from it going forward by following the instructions in sys/unix/Install.unx. If you're okay with me doing so, I can also throw the git repository I imported your code into (and did some tidying of the structure) up on Github - it includes integrating your Windows stuff back into the standard build system, but since I don't have a Windows machine handy right now I haven't tested it. --Eternaleye (talk) 15:13, 8 December 2014 (UTC)
Thanks! Wow, I didn't expect it to be that easy. Your patch will be applied soon, and I'll tell you when the updated source code is uploaded (meanwhile I also did some minor fixes to a few of the added roles). :) --Bluescreenofdeath (talk) 06:46, 9 December 2014 (UTC)

Bug report: Extended (#) commands cause segfault in Wizard mode (neutral female doppelganger Binder)

The cause is that after your modifications, there can be >40 extended commands, but line 376 of cmd.c never got changed:

#define MAX_EXT_CMD 40     /* Change if we ever have > 40 ext cmds */
--Eternaleye (talk) 11:46, 10 December 2014 (UTC)
Huh?! Never happened to me on Windows XP or Windows 7 yet... Are all the extended commands crashing for you, or just a few? The source code has been updated with your unix compatibility changes and the Unix makefiles are updated too, but I'll have a look into this reported bug. Of course I can just increase the limit to 60 or even higher (I have to admit that I don't know the exact amount of extended commands currently in the game) but I'd also like to be able to reproduce it... Anyway, thanks for the report, and stay tuned for a fix! ;) --Bluescreenofdeath (talk) 12:38, 10 December 2014 (UTC)
In my case, it happens the instant I hit # - but only in wizard mode (the -D commandline option), which does add a few commands. Increasing MAX_EXT_CMD does fix it here, which is how I made sure that was the issue. --Eternaleye (talk) 13:59, 10 December 2014 (UTC)

Suggestions (like in modern nethack forks):

- hotkey for Elbereth - auto opening doors - auto-explore ——Transcendreamer (talk) 00:06, 18 December 2014 (UTC)

Thought about Elbereth hotkey too, but it would probably be a pain to code the different engraving possibilities (bare hands, athame, wand of fire etc.) into it. Auto opening doors; well, I still remember the Unnethack days where opening doors was just plain impossible while confused because the open command didn't exist, and let's not forget opening doors is actually quite a complex mechanic (confused? ran into it with low dexterity? polymorphed into something that can't open anything at all? etc. All those cases would need to be considered; I really think the way it currently works is just fine...) And an auto-explore hotkey would screw up my gaming experience too. Wanna know how many times I hit that thing in DCSS by mistake? Too many times! And there is no confirmation. You push that button, your character runs willy-nilly through the dungeon and probably ends up surrounded by super-strong monsters. Heck, auto-exploring in DCSS goes by so fast, you can't even really see where your character is going since it all happens in the fraction of a second, after accidentally pushing a button and not expecting anyting like that to boot! There's the "travelto" function in Slash'EM Extended, and while not really "better" (how many times did my characters trigger traps even though I knew they were there, or get stuck due to the stupid pathfinding algorithm?), it's far less annoying IMHO. So, well, I fear I can't really implement those features any time soon; maybe if someone manages to code a bearable form of them?
Thanks for the suggestions though; I hope you can enjoy the game without those features for now. Sorry! --Bluescreenofdeath (talk) 12:24, 18 December 2014 (UTC)
I don't know which version of UnNetHack you were playing, but...
> Auto opening doors; well, I still remember the Unnethack days where opening doors was just plain impossible while confused because the open command didn't exist
Auto-open for doors has always been a complement to the 'o'pen command, not a replacement, so this should never have been the case.
> and let's not forget opening doors is actually quite a complex mechanic (confused? ran into it with low dexterity? polymorphed into something that can't open anything at all? etc. All those cases would need to be considered;
Auto-open for doors runs through the same code as the open command itself, so it handles all special cases.
> And an auto-explore hotkey would screw up my gaming experience too. Wanna know how many times I hit that thing in DCSS by mistake? Too many times! And there is no confirmation. You push that button, your character runs willy-nilly through the dungeon and probably ends up surrounded by super-strong monsters.
Unlike NetHack, UnNetHack interrupts all forms of running and travel if a hostile monster is in sight, which is inconvenient in some cases but means that all running, travel and auto-explore is always at least as safe as manual movement, and sometimes safer.
> Heck, auto-exploring in DCSS goes by so fast, you can't even really see where your character is going since it all happens in the fraction of a second, after accidentally pushing a button and not expecting anyting like that to boot!
In NetHack 4 auto-explore, as well as running and travel, is animated step-by-step, and you can interrupt it at any point by pressing any key, which I believe is the case in DCSS as well.
--Tungtn (talk) 03:14, 19 December 2014 (UTC)
Finally found out why I remembered auto-open being bugged: that was Unnethackplus, where the devs somehow decided to completely remove the open command, yet auto-open would not trigger if you were suffering from confusion or similar status effects and it was then suddenly completely impossible to get past a door! --Bluescreenofdeath (talk) 18:49, 15 May 2017 (UTC)

Dying from disintegration gives a weird message.

Dying from a disintegration trap gives the death message: "Killed by a died"

-- 20:46, 31 May 2015 (UTC)

Yes; this is actually a bug, but I decided to declare it a feature. It should be "killed by disintegration". :) --Bluescreenofdeath (talk) 11:01, 1 June 2015 (UTC)

Player of dinosaur race is generated with armour

Trying to change armour gives a message that dinos are restricted from wearing armour except boots and suits, but still the player has already some body armour being worn! Taking off body armour restricts wearing it again. This definitely is not logical at all. --Transcendreamer (talk) 22:31, 9 April 2017 (UTC)

It's Slash'EM Extended, the word "logical" is not meant to be used in a sentence mentioning this variant :D Yes, they start out wearing their armor, and they would in fact be well-advised to keep it on, at least if it's a useful type. Similarly, lich race characters can't wield two-handed weapons but might start out wearing one (e.g. barbarian). --Bluescreenofdeath (talk) 05:57, 10 April 2017 (UTC)
"the word "logical" is not meant to be used in a sentence mentioning this variant" -- ah, I see, it explains everything... but still it's quite dull... I know several nethack players who reject SLEX because of this reason (not being friendly with logic) it undermines gameplay integrity.--Transcendreamer (talk) 08:15, 10 April 2017 (UTC)
Yes, but there are also several nethack players who love SLEX because of this reason, i.e. SLEX fills a niche that was previously unoccupied. :) --Bluescreenofdeath (talk) 09:08, 10 April 2017 (UTC)
Can not argue with that, strange madness is amusing for a while, but maybe you find it worth your efforts to make a sub-fork for eh... more conservative players?--Transcendreamer (talk) 10:23, 10 April 2017 (UTC)
Exists in two flavors! SLASHTHEM is basically SLEX without SLEX, and picking the Soviet race in SLEX turns the game into "SLASHTHEM Extended", i.e. it still has SLEX's monsters, items, traps etc. but many of the more controversial parts of the game are rolled back to SLASH'EM behavior. Apart from that, I'm still swamped in things I want to implement in the actual SLEX, though. Gotta get a polished version ready before Junethack commences! --Bluescreenofdeath (talk) 10:25, 10 April 2017 (UTC)
Yes, to me SLASHTHEM is more reasonable and playable, sadly it looks abandoned... Best wishes in getting things done before June!--Transcendreamer (talk) 10:37, 10 April 2017 (UTC)

SLEX is overrunning the wiki

The Random Page button, which I use heavily to discover new things about nethack, feels like it results in 40% or 50% SLEX articles. Perhaps SLEX can take a page from other variants, and condense multiple small articles into one page? Monsters, especially, seem to be extremely numerous - when I'm Random Pageing, if I get a monster I find myself quickly scanning the page to see whether it's another single-fork-specific monster only, or found more generally in vanilla and/or multiple different forks. --Testbutt (talk) 20:07, 15 May 2017 (UTC)

Hmm. I just tested this by hitting random page 40 times (probably too few, I know), and it resulted in a SLEX page exactly once; it gave dnethack monsters 3 times though and one from unnethack. Maybe you were seeing SLASH'EM monsters, which indeed all have their own pages? I intentionally didn't create a page for every SLEX monsters because then it would really dominate the entire wiki. --Bluescreenofdeath (talk) 20:42, 15 May 2017 (UTC)
For another reference, I tried myself. The result was 0 SLEX pages, 4+2 dNetHack pages, 4+2 SLASH'EM pages and 2 GruntHack pages. The rest were vanilla, multivariant or otherwise. Here's a list
Crocodile [v]
Engraving [v]
Healing [v]
Samurai (player monster) [v]
Animal [v]
Carnivorous ape [v]
Magic trap [v]
Quaff [v]
Metastrategy [v]
Role difficulty [v]
Property [v]
E [v]
Dragonbane [v]
Orc [v]
Wand of sleep [v]
Auto-identify [v]
Ring of conflict [v]
Nurse [v]
Devil [v]
Leather jacket [v]
Destroy armor (monster spell) [v]
Amulet [v]
Huge chunk of meat [v]
Zombie [v]
Leather cloak [v]
Environment variable [v]
Turn [v]
Killer bee [v]
King [gh]
Psi bolt [gh]
Ascension kit (dNetHack) [dnh]
Dantrag [dnh]
Oread [dnh]
Burning fern spore [dnh]
Byakhee [dnh|sl]
Deva [dnh|sl]
Assault rifle [sl]
Spellbook of acid stream [sl]
Jumbo the Elephant [sl]
Hobbit quest [sl]

Slash'EM: 6 (4+2)
dNetHack: 6 (4+2)
GruntHack: 2
Vanilla: 28

--FIQ (talk) 21:15, 15 May 2017 (UTC)

Yes, it's quite likely that I was conflating SlashEM and SlashEX. It felt like the wiki has a a lot of slash oh it, but it seems I overestimated the issue. --Testbutt (talk) 03:43, 16 May 2017 (UTC)