(TL;DR: Skip the immediately following paragraph; from there, the more you read, the less important it is.)
Hello, I am playing on underhound.eu. The server hanged up or crashed yesterday during my game, just a few moments after I picked a really good randart Ranged Weapon from a scroll of acquirement, exactly what I needed (I trained Ranged Weapons to almost 14). Now after reloading the game, not only did it roll back to before reading the scroll of acquirement (so no Ranged Weapon), it also replaced the acquirements completely with totally useless shit. I never won this game and this run had potential, I even survived being cast to the Abyss and I beat lots of lethal monsters I never thought I could beat, all thanks to Uskayaw (first time trying Uskayaw). So I ragequit this run because itās unfairly borked. (Actually I want to add: The ācurrentā damage per time was about 30-something, and the artifact that was unfairly taken away from me was a Ranged Weapon of speed with 50-something damage per time and (as far as I remember) at least the same or better accuracy taking into account the base accuracy and enchantment, but it was also Dex+5 (if Iām not mistaken) so when wielded it increased to 60-something (67?) damage per time, roughly doubling my damage per time. The artifact also had a short, cool name, something like āZheraā or āZaryaā or āZoaraā or āRhazaā or something like that. I donāt know why itās not mentioned in the morgue file, but I also got a manual of Fire Magic from killing that player ghost, which is why I started training Fire Magic in the first place, as I hadnāt intended to be a spellcaster. I want to add: I was forced to make a choice between continuing to play and maybe even winning but having a bitter feeling that control was taken from me unfairly, or abandoning the character and (later) starting anew out of a conscious decision. DCSS feels fair to play because most of my deaths are caused by my own mistakes, oversights, or overconfidence, and when theyāre caused because of a bad seed, I just know in advance that bad seeds can happen and I consciously choose to play anyway (same thing goes for Xom (including from a faded altar), if Iāll ever decide to try it); in contrast, here I shouldnāt have lost my acquirement, and I feel like control was taken away from me. This reminds me of The Matrix movies.)
FEATURE REQUEST: Please make the game save its progress and flush its files (e.g. using fsync(2) system call on Unix-like systems) immediately after major events like generating acquirements (maybe also before showing the acquirements to the player, so nobody will ever be disappointed if the game crashes during this and the acquirements would have changed). (Alternatively, make the random generation less sensitive to small details, or make it more deterministic, so such save-and-flush would likely be unnecessary.) Also:
(1) Nonetheless, if the game doesnāt flush its data when the player saves & exits, it would be good to add to the save function a system call to flush.
(2) There could be a screen, similar to the dungeon generation screen thatās especially visible with the āpregen_dungeon = fullā configuration option, that shows the duration of the effect(s) (e.g. acquirement generation and/or game saving) and the wait for the operating system to flush afterwards together with one progress bar. This is useful to give an indication to the player of whatās happening instead of the game suddenly freezing for what could be a few long seconds (or minutes in rare cases) and to indicate that the acquirements/loot presented to the player is ready to be seen by the player, and also maybe to increase the tension, kinda like how in reality shows on TV they tense the audience before they announce the winner/loser (although here it wouldnāt be artificial). I imagine there could also be such a screen when the character dies, but only after the player sees the message āYou dieā¦ā with less than 1 HP in the stats at the side. (Itās impossible to see less than 1 HP at the side before seeing the message, right??)
(3) I imagine this could also be useful when creating, loading, or killing/deleting player ghosts? I have no idea how DCSS handles player ghosts and whether there could be race conditions in their handling.
Thank you in advance. I really gotta stop editing this