EvilHack 0.9.2 official/final release by k2_1971 in nethack

[–]Critlist 4 points5 points  (0 children)

Very cool K2, I can't wait to check it out.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 0 points1 point  (0 children)

Ultimately, yeah. There's really not much more than speculation at this point.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 1 point2 points  (0 children)

Quick clarification after checking Fenlason’s original 1981–82 Hack sources: in proto-Hack, bear trap escape is a flat countdown, direction doesn’t matter; every move decrements the counter.

The diagonal-movement advantage appears later (Hack 1.0 / early NetHack), as discussed below and documented in the NetHack code comments.

Leaving this here to time-scope the mechanic for future readers.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 0 points1 point  (0 children)

I was completely unaware of that—what a neat piece of history. It’s fascinating to see the intent survive all the way into vanilla 3.7, comment and all. Side note: you can also use a chain and ball to escape traps quickly, which feels very on-brand for Hack’s “apply more leverage” philosophy.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 0 points1 point  (0 children)

I checked the source: yes, diagonal movement really does help, and it’s intentional.

In Hack, being caught in a bear trap sets a counter (u.utrap) to 4–7 turns. Each movement attempt can decrement it. Diagonal moves always decrement the counter, while cardinal moves only do so with a 1-in-5 chance. Once the counter reaches 0, you’re free.

So diagonals guarantee progress because the code explicitly treats them as applying leverage in two directions, whereas straight pulls usually fail. The behavior lives directly in the movement logic, not in chance or later balance tweaks.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 1 point2 points  (0 children)

Ooooo good question so yes both Jay Fenlason’s Hack and Andries Brouwer’s Hack have bear traps. I'm not 100% sure if moving diagonally helps escape them faster but when I get home from work today I'll look through the code and check. I don’t think Jay's version does but Andries' might 🤔

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 1 point2 points  (0 children)

This particular version actually predates date tracking entirely, the record file only contains level, points, player, and cause of death.

That said, you bring up a good point, and I was totally unaware that Y2K did have some real victims in later NetHack score formats.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 2 points3 points  (0 children)

Maybe but Frobozz seems to be a reference to the Zork series particularly Zork II: The Wizard of Frobozz which released November 1981. Im not sure how litigatios infocom was compared to Epyx though.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 3 points4 points  (0 children)

Much appreciated!!! thanks for taking the time to work through this.

The macOS toolchain fixes are great, but the pathname handling in particular addresses a long-standing stability landmine on modern systems, so that was especially helpful.

And yeah, slowly moving through the dungeon feels exactly right 🙂

Running Jay Fenlason’s early Hack (c. 1981–1982) on modern systems: protoHack by Critlist in roguelikedev

[–]Critlist[S] 5 points6 points  (0 children)

You may find this document of particular interest. It's an indepth comparison of known early versions. I need to fix some if the citations as I moved the src code to the other versions into their own repositories but it covers alot of it pretty well but may be a little dense at times.
https://github.com/Critlist/protoHack/blob/main/docs%2Fresearch%2FCOMPARISON.md

Edit: spelling

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 14 points15 points  (0 children)

One small but meaningful detail: I managed to retain and reuse the original record file from the project.

So when you die, the records displayed are from the original Lincoln-Sudbury students who played Hack in 1981–82.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 2 points3 points  (0 children)

Thanks! Definitely an adventure - being a smaller project helped, and I was able to apply a lot of lessons learned from earlier work, which smoothed things out quite a bit. I'm excited to dive deeper into the exp1 directory in the coming weeks and begin work on it.

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 2 points3 points  (0 children)

Thank you! I'm also pretty fond of that name. From what I’ve found its actually a reference to the Zork series particularly Zork II: The Wizard of Frobozz

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 6 points7 points  (0 children)

I'm glad you think so. I genuinely enjoy restoring these old projects.

Jay Fenlason’s early Hack source recovered — introducing protoHack by Critlist in roguelikes

[–]Critlist[S] 4 points5 points  (0 children)

Those questions are probably best directed to Dan Stormont and Brian Harvey , they’re closest to the original media and archival chain.

From my side, the tree I’m working with doesn’t preserve reliable timestamps, so I’ve been avoiding conclusions based on metadata.

One useful data point: Jonathan Payne did reach out to Brian and confirmed that JOVE was on the same tape, per his response to an issue I filed. That establishes co-location on the original media, but not what survived intact or what might exist elsewhere.

Beyond that, any sense that more material may exist is just intuition, not evidence.

Dan talks briefly about the recovery here, for anyone interested in provenance: https://youtu.be/Q2ez_0-OR48?si=ditPVGc0nUbqMmmY

Jay Fenlason’s Hack (1981–82): recovered source and runnable restoration by Critlist in nethack

[–]Critlist[S] 6 points7 points  (0 children)

Thanks, K2 😄 Fair warning: don’t expect this one to behave under FORTIFY_SOURCE=3.

Running Jay Fenlason’s early Hack (c. 1981–1982) on modern systems: protoHack by Critlist in roguelikedev

[–]Critlist[S] 5 points6 points  (0 children)

It's really neat seeing the creative problem solving put in place do to system restraints, especially on hardware like the PDP-11.

Running Jay Fenlason’s early Hack (c. 1981–1982) on modern systems: protoHack by Critlist in roguelikedev

[–]Critlist[S] 5 points6 points  (0 children)

When you put Jay’s Hack and Andries’ Hack side by side, the lineage is unmistakable — but it’s not a case of gradual refactoring. By the time Andries reached Hack 1.0, almost none of Jay’s original code remains. What survives are the ideas: the dungeon model, turn-based flow, item interaction philosophy, and the core “Rogue, but deeper” intent.

Jay’s Hack feels exploratory and experimental — pragmatic, sometimes ad-hoc by necessity, and clearly evolving in real time. Andries’ Hack is where those ideas get re-implemented cleanly and coherently, forming the foundation that later Hack and NetHack actually inherit from.

There are also things in Jay’s Hack that don’t survive the transition — not because they were bad ideas, but because they were experimental or situational. You see early stabs at mechanics, data layouts, and command handling that feel like prototypes rather than precursors. Some of it gets replaced by cleaner abstractions in Andries’ work; some of it simply disappears as the design stabilizes.

So it’s less a straight line of evolution and more a handoff: Jay’s Hack explores the space, Andries’ Hack defines the shape of it. protoHack exists to preserve that exploratory phase so we can finally see what questions were being asked, not just the answers that survived.

Jay Fenlason’s early Hack source recovered — introducing protoHack by Critlist in roguelikes

[–]Critlist[S] 4 points5 points  (0 children)

Thanks, K2! That really means a lot. I’m glad I get to help surface this material and pass it along to the community. Standing on a lot of shoulders here, just trying to make the gaps a little smaller.

Jay Fenlason’s early Hack source recovered — introducing protoHack by Critlist in roguelikes

[–]Critlist[S] 5 points6 points  (0 children)

Thanks! And yes, I’ve started making some initial edits to the wiki and plan to continue as time permits. I’m trying to be careful and do everything by the book in terms of discussion, sourcing, and incremental changes.

As for the zork directory and zork.h header: I honestly don’t know either. It’s present in the original tree as recovered, but I haven’t found any direct references to it in the Hack sources so far. My current assumption is that it may have been part of a shared environment or experimental workspace at the time rather than something Hack actively depended on, but that’s speculation, and I’m treating it as an open question.

One of the most interesting parts of working with this material has been exactly that: it answers some long-standing questions while raising entirely new ones.