Skip to content

fancypantalons/NetHack-Android-DS

 
 

Repository files navigation

NetHack Android DS

A modernized Android port of NetHack 3.6.7, built for touchscreens and physical gamepads. This is a personal, in-development project meant to scratch a personal itch, so expect rough edges.

Releases (APK downloads) are posted on the GitHub releases page.

Requires Android 13 or later.

Design Philosophy

This port is built around a few firm ideas:

  • Touch and gamepad first. A physical keyboard or mouse should never be required for gameplay. Navigation, commands, and menus all work through touch gestures or a physical gamepad. The soft keyboard only appears for text entry.
  • Native Android experience. This port tries to create a gaming experience that feels natural and not like a soft keyboard bolted onto a terminal-native game. In this way it borrows a lot from my work on NetHackDS.
  • Radical configurability. NetHack is a deep game. The interface must accommodate diverse playstyles rather than enforcing a single correct way to play.
  • Always fullscreen and immersive. It's a game. There's no good reason to give up screen real estate.

Showcase

Portrait — Touch Mode

Like the original project this is based on, this port supports tapping to control as well as a widget overlay system allowing for deep customization:

portrait-touch-mode.mp4

Landscape — Touch Mode

Orientation-specific layouts allow for unique portrait and landscape layouts.

landscape-touch-mode.mp4

Dual Screen — Gamepad

In truth the reason this port exists is because I wanted something I could play on my Ayn Thor, so this port includes first-class support for dual-screen devices and gamepads:

dual-screen-gamepad.mp4

Overlay Editor

The overlay system is designed to allow the user to relocate nearly any on-screen element, allowing for deep customization:

overlay-editor.mp4

Architecture

The port follows a thick native, thin wrapper model:

  • The vanilla NetHack 3.6.7 engine compiles to a native shared library (libnethack.so) via the Android NDK. The core game logic is untouched.
  • A thin JNI bridge (sys/android/winandroid.c) connects the engine to the Java UI layer by implementing NetHack's standard window_procs interface.
  • The UI is implemented by ForkFront-DS, a dedicated Android library that lives in sys/android/forkfront/ as a Git submodule. It handles rendering, input, menus, dialogs, and settings.

For a deeper dive, see the docs in DEVEL/:


Building from Source

Requirements: JDK 17, Android SDK 34, NDK 21.4.7075529.

cd sys/android
./gradlew assembleDebug

The resulting APK is at sys/android/app/build/outputs/apk/debug/app-debug.apk.

See DEVEL/android-port-build.md for full setup instructions.


Origins

This project is a hard fork of NetHack-Android by gurrhack, which provided the original native bridge and build system for NetHack 3.6.7 on Android. The UI library, ForkFront, is similarly a hard fork of gurrhack's ForkFront-Android. Both forks diverge substantially in architecture and design philosophy, and while it could not exist without all that previous hard work, I've opted to deviate pretty substantially without a focus on contributing back to the original (now fairly quiet) project.

NetHack itself is the work of the NetHack Dev Team and a long line of contributors stretching back to 1987. See README.NetHack for the original upstream README.


Contributing

See CONTRIBUTING.md. The ForkFront submodule has its own CONTRIBUTING.md with the same conventions.

About

Android port of NetHack

Resources

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • C 93.6%
  • C++ 3.7%
  • Yacc 0.7%
  • Perl 0.5%
  • Makefile 0.3%
  • Assembly 0.3%
  • Other 0.9%