SporkHack

From NetHackWiki
Jump to navigation Jump to search
Sporkhack's login screen (telnetted to sporkhack.com)

SporkHack, at sporkhack.com, is a variant of NetHack 3.4.3 by Derek Ray aimed at game balance. Its stated purpose was to "try to make the game more interesting for experienced/skilled players, while making it no harder...for the newbie." [1]. The latest developed version (0.6.5) can be played on a public server at em.slashem.me or ssh nethack@hardfought.org (USA)/ssh nethack@eu.hardfought.org (EU). To discuss, join #hardfought on Libera IRC.

Development of SporkHack was restarted in July 2017 by community members Tangles and K2, with the blessing of the original author. The latest version is now 0.6.5 - last build Wed Jun 3 16:07:27 2020 (git commit fcddb5b). The repository can be found at https://github.com/NHTangles/sporkhack - the revived development of SporkHack focuses on bugfixes and functionality enhancement; no changes affecting gameplay or the original author's intent have been made at this time. This version fixes a long-standing bug regarding stairs not being generated on certain levels (Minetown, the Oracle level, certain quest levels) as well as several other bugs that could crash the game.

From the original developer's announcement on rec.games.roguelike.nethack, 8 July 2007:

"I've been working on a fork of 3.4.3 that has a number of balance-oriented changes, largely to try to address the problems I've outlined in prior posts as well as just provide a platform for experimental changes. It's been in test among a small group of players for about a month now; it seems time to open it up and see what others think.
In short, one of the purposes of this fork is to try to make the game more interesting for experienced/skilled players, while making it no harder (or, in a couple cases, slightly easier) for the newbie. It's also going to be an attempt to try to increase variety in the standard 'ascension kit', since right now it is pretty well defined.
There is a server available for play at this telnet link; the very rough changelog and description can be seen at this webpage. A patch to match the server state will eventually be published on the website as well, once I confirm that the patches will properly apply to a vanilla 3.4.3 distribution.
There is a channel #sporkhack on irc.freenode.net where discussions take place relatively frequently; there is a bot there, much like #nethack's Rodney, who will announce deaths and ascensions as they occur.
Please keep in mind that these changes should be considered to be alpha- or beta- level; there may well be bugs, and these bugs may affect your gameplay. I do try to fix bugs found as rapidly as possible, but I can't always update the server immediately since I have others' games to consider as well, especially if I have a patch in the queue that will break savefile compatibility.
This is a live fork! For the near future, I will still be making a great deal of changes, and if an imbalance is found with existing changes, they are not set in stone -- if something is too hard, I will certainly consider toning it down to a more reasonable level. By the same token, if something I add makes things too easy, I will probably tone _that_ down too.
I hope you enjoy it."

Major changes

These are the most visible major changes; there have been several changes under the hood that aren't visible for players.

lev_comp changes

Sporkhack incorporates the new level compiler patch, but also has several other changes. The differences between vanilla des-file format are:

  • No more MAZE; all special levels start with LEVEL:"filename". To mark a level mazelike, you add FLAGS:mazelevel.
  • IF [50%] THEN ... ELSE ... ENDIF now uses brackets, so resembles C: IF [50%] { ... } ELSE { ... }
  • ROOM (and SUBROOM) contents are inside brackets.
  • New command RANDLINE to create random river-like structures: RANDLINE:random,random,'L',lit,25,2
  • New command TERRAIN to explicitly set map character(s) in certain locations: TERRAIN:(55,14),'-',unlit
  • New command SPILL to create random pool-like structures: SPILL: random, 'L', north, 20, lit
  • New command REPLACE_TERRAIN to replace a percentage of one map character with another map character inside an area: REPLACE_TERRAIN:(01,01,74,18), 'P', '.', lit, 15%
  • New command EXIT to exit the level creation immediately.
  • New command GRAVE to create a grave, with either a specified epitaph, a random one, or no text: GRAVE:(1,2), "Epitaph text goes here"
  • Level initialization has three different modes:
    • INIT_MAP:solidfill,'X' replaces the now-gone MAZE:"foo",'X'. Also takes an optional light-state parameter.
    • INIT_MAP:mazegrid,' ' replaces the now-gone MAZE:"foo",random
    • INIT_MAP:mines, ... is the old INIT_MAP
  • Map GEOMETRY also accepts absolute coordinates, for example GEOMETRY:(45,10)
  • MAZEWALK can take two optional parameters, a boolean that tells whether the maze should get stocked with standard maze items and monsters, and a map character that is used as the floor of the maze. For example: MAZEWALK:(30,10),west,false,'L'.
  • New level flags: "shroud", "mazelike", "stormy" and "graveyard".
  • In MAP ... ENDMAP, the character 'x' is "transparent" map character.
  • Allows CONTAINER inside another; contents are inside brackets.
  • WALLIFY can take an optional region to wallify: WALLIFY:levregion(1,1,70,20)
  • OBJECT has several new optional parameters: quantity:X, recharged:X, eroded:X, buried, lit, locked, broken, trapped, invisible, greased.
  • MONSTER has several new optional parameters: female, invisible, cancelled, revived, avenge, stunned, confused, fleeing:X, blinded:X, paralyzed:X, seen_traps:X
  • Looping: LOOP [50] { ... }
  • Switch-statements:
SWITCH [6] {
  CASE 0: ... BREAK
  CASE 1: ... BREAK
  CASE 2: ... BREAK
  DEFAULT: ...
}
  • It's possible to define what items a monster gets; the inventory is given inside brackets after the MONSTER-definition.
  • It's possible to override normal random monster generation chances; quest levels use this method: MON_GENERATION:86%, (64,"tiger"), (16,"ape"), (10, 'S')

Minor changes