{"id":13632946,"url":"https://github.com/deavid/unhaunter","last_synced_at":"2026-05-10T20:14:46.452Z","repository":{"id":213081837,"uuid":"520614108","full_name":"deavid/unhaunter","owner":"deavid","description":"Terror Game about ghosts","archived":false,"fork":false,"pushed_at":"2024-08-17T16:45:56.000Z","size":87817,"stargazers_count":18,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-10-19T02:53:39.260Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/deavid.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-02T18:48:11.000Z","updated_at":"2024-10-17T21:23:29.000Z","dependencies_parsed_at":"2023-12-18T10:58:12.606Z","dependency_job_id":"effbf339-311a-476a-af11-980cc7386731","html_url":"https://github.com/deavid/unhaunter","commit_stats":{"total_commits":381,"total_committers":1,"mean_commits":381.0,"dds":0.0,"last_synced_commit":"b65efe5825611566192e1e453005fd6d8a24744f"},"previous_names":["deavid/unhaunter"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deavid%2Funhaunter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deavid%2Funhaunter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deavid%2Funhaunter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/deavid%2Funhaunter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/deavid","download_url":"https://codeload.github.com/deavid/unhaunter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221815574,"owners_count":16885183,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-01T23:00:19.505Z","updated_at":"2026-04-25T23:02:05.708Z","avatar_url":"https://github.com/deavid.png","language":"Rust","funding_links":[],"categories":["Uncategorized","Upcoming"],"sub_categories":["Uncategorized"],"readme":"# Unhaunter: Dare to Face the Unseen\n\nDare to enter a world where shadows whisper and every creak could be a ghostly presence. In Unhaunter, you're a paranormal investigator armed with cutting-edge gear, tasked with identifying and expelling restless spirits from haunted locations.\n\nThis 2D isometric game seamlessly blends exploration, puzzle-solving, and strategic investigation, offering a unique blend of thrills and chills for those brave enough to confront the unknown.\n\nJoin our discord server:\n\n[![Unhaunter Discord Banner 2](https://discord.com/api/guilds/1374650085127749745/widget.png?style=banner2)](https://discord.gg/Ux7CGfvVtV)\n\nCheck the game website: [Unhaunter.com](https://www.unhaunter.com/)\n\nThe game can be played from the browser, [click here](https://www.unhaunter.com/) for more instructions.\n\nHere are some screenshots of the game:\n\n![Screenshot1](screenshots/unhaunter-c1.png)\n\n![Screenshot2](screenshots/unhaunter-c2.png)\n\n![Screenshot3](screenshots/unhaunter-c3.png)\n\n![Screenshot4](screenshots/unhaunter-c4.png)\n\n![Screenshot5](screenshots/unhaunter-c5.png)\n\n## Gameplay\n\n### Exploration\n\nExplore atmospheric, isometric environments and unravel their secrets. Venture into dimly lit rooms, interact with objects like doors, switches, and lamps, and uncover clues to help you identify the ghost.\n\n### Investigation\n\nYour ultimate goal is to banish the lingering spirits (currently one per location).\n\nTo achieve this, you must first identify the ghost among 44 distinct possible ghost types. Each ghost type interacts with your equipment in a different way, leaving behind specific clues known as evidence.\n\nThere are 8 types of evidence. Each ghost exhibits 5 of these 8.\n\n### Ghost Identification\n\nYour first task is to locate the ghost and determine its preferred area.  Look for subtle visual clues like a semi-transparent dust cloud, which indicates the ghost's spawn point (breach). This is often easiest to see with the location's lights (not your flashlight). You can also use your equipment, like the Thermometer, to detect temperature changes, or the EMF meter to find fluctuations in the electromagnetic field. Carefully test your equipment, and record your findings in your trusty van. Once you have enough evidence, synthesize a specialized \"Unhaunter Ghost Repellent\" to expel the ghost.\n\nOnce you're done, you can click \"End Mission\" on the van and you'll get the mission score.\n\n### Controls\n\n*   **[WASD]:** Movement (or Arrow keys, configurable)\n*   **[E]:** Interact (doors, switches, lamps, hiding spots)\n*   **[R]:** Activate right-hand gear\n*   **[T]:** Swap left and right hand items\n*   **[Q]:** Cycle right-hand inventory\n*   **[TAB]:** Activate left-hand item\n*   **[F]:** Grab item\n*   **[G]:** Drop item\n*   **[C]:** Record Evidence\n*   **[ShiftLeft]:** Run (hold)\n\n### Ghost Hunting\n\nBeware! Ghosts can enter a hunting phase, becoming more aggressive and directly pursuing players to inflict damage. The likelihood of a hunt increases as the ghost's rage grows, and its duration is determined by the ghost's \"hunting\" state. Before a hunt begins, the ghost will often give a warning, such as a loud roar, giving you time to prepare. During a hunt, you can try to hide behind certain objects by holding down the [E] key. If the ghost catches you during a hunt, it will damage your health.\n\n## Evidence \u0026 Equipment\n\n| Evidence       | Gear           | Description                                                                                                                                                                               |\n| -------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Freezing Temps | Thermometer    | The room frequented by the ghost becomes unusually cold. Some ghosts will cause temperatures to drop below 0°C.                                                                           |\n| Floating Orbs  | Video Camera   | The ghost's breach (a spectral dust cloud) might glow brightly when viewed through a Night Vision camera.  Lights must be OFF.                                                            |\n| UV Ectoplasm   | UV Torch       | Some ghosts will emit a greenish glow under UV light. Lights must be OFF.                                                                                                                 |\n| EMF Level 5    | EMF Meter      | The EMF Meter may spike to level 5 in the presence of certain ghosts.  Keep the meter close to the ghost's area of activity.                                                              |\n| EVP Recording  | Recorder       | The Recorder might capture ghostly voices (Electronic Voice Phenomena). If a EVP Recording is made, [EVP RECORDED] will appear.                                                           |\n| Spirit Box     | Spirit Box     | Screams, whispers, or other paranormal sounds may be heard through the Spirit Box when close to the breach and in relative darkness.                                                      |\n| RL Presence    | Red Torch      | Some ghosts glow orange under red light.  Lights must be OFF.                                                                                                                             |\n| 500+ cpm       | Geiger Counter | The Geiger Counter measures radiation levels. Some ghosts emit high radiation, registering over 500 counts per minute (cpm). It takes time for the Geiger counter to settle into a value. |\n\n## Basic Strategy\n\n### Quick Tips:\n\n*   **Use your ears:** Pay close attention to audio cues from your equipment (changes in the EMF meter's beeping, the ghost's whispers, etc.).\n*   **Control the environment:** Closing doors helps contain cold air for more accurate temperature readings. Lights also heat up the room, so turning them off can create a colder environment.\n*  **Hide:** If a hunt starts, press and hold [E] near tables, beds, and other objects to hide itself.\n*   **Sanity is key:** Manage your sanity by taking breaks in the truck.\n\n### Finding the Ghost\n\nYour first task is to locate the ghost and determine its preferred area.\n\nThe ghost's spawn point, known as its breach, appears as a subtle, semi-transparent dust cloud. It's most visible with the location's lights (not from your torch). The UV Torch will make it glow golden, this is not evidence, but it helps with visual identification.\n\n### Gathering Evidence\n\nGhosts can move throughout the environment, but you might find more activity near their breach (spawn point). Investigate this area carefully.\n\nFor the best results, turn off lights near the breach and close the doors. This will help create a colder environment for more accurate temperature readings and might enhance the visibility of certain paranormal phenomena.\n\nUse your equipment and take note of which ones yield positive results.\n\n### Crafting the Repellent\n\nReturn to your van and record the evidence you've gathered in your journal. The crafting of the ghost repellent can only be performed inside the van.\n\nAs you record evidence, the list of possible ghosts in your journal will narrow down. Once you're confident in your identification, select the ghost and click \"Craft Unhaunter Ghost Repellent\".\n\n### Expelling the Ghost\n\nThis will create a vial filled with the specific repellent needed to banish that ghost type. Return to the ghost's room (breach), wait for it to appear, and activate the vial.\n\nIf successful, the ghost will fade out over several seconds while emitting smoke particles. You'll also hear distinct sounds indicating its departure. Make sure the ghost and its breach are completely gone before ending the mission. You can refill the vial automatically when crafting a new repellent in the van.\n\nOnce you're certain there are no more ghosts, go back to the van and click \"End Mission\".\n\n## Building and Installing\n\nEveryone is welcome to try the game from sources or do their own changes. You can just try to play from source code, it's easy.\n\n1.  Clone the repository:\n\n    ```bash\n    $ git clone https://github.com/deavid/unhaunter.git\n    ```\n\n## Prerequisites\n\nYou'll need to have Rust and the necessary dependencies for Bevy installed.\n\n2.  Install Rust:\n\n    [https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install)\n\n3.  Install Bevy dependencies:\n\n    Follow the instructions for your operating system at:\n\n    [https://bevyengine.org/learn/quick-start/getting-started/setup/#installing-os-dependencies](https://bevyengine.org/learn/quick-start/getting-started/setup/#installing-os-dependencies)\n\n4.  Run the game:\n\n    ```bash\n    $ cargo run\n    ```\n\n    Run this command from the game's source folder.\n\n\n## Profiling\n\nIf you encounter performance issues, profiling can help identify the bottlenecks. **Warning:** Profiling generates a large amount of data (potentially gigabytes). Be mindful of this and profile only for short durations.\n\nTo run a profiling session:\n\n    ```bash\n    $ cargo run --release --features bevy/trace_chrome\n    ```\n\n    This creates a file named `trace-1999999999999999.json` (the numbers will vary) in the same folder from where you ran `cargo run`.\n\n    **Warning:** The trace file may contain private information about your system. Be cautious about sharing it.\n\n### Inspecting the Trace\n\n1.  **Compress the trace:** The JSON trace file can be compressed significantly. Use 7-Zip or a tool like ZSTD for efficient compression.\n2.  **Open the trace:** You can inspect the trace using [https://ui.perfetto.dev](https://ui.perfetto.dev). If the file is too large for the browser's WASM limit, follow the instructions at: [https://perfetto.dev/docs/quickstart/trace-analysis#trace-processor](https://perfetto.dev/docs/quickstart/trace-analysis#trace-processor)\n3.  **Analyze the trace:** Zoom in on the timeframe you want to analyze (typically the later portion) and look for the `bevy_app -\u003e winit event_handler -\u003e update -\u003e main_app -\u003e schedule: name=Main -\u003e schedule: name=Update` section. This will reveal the main contributors to frame time.\n\n**Note:** `bevy_framepace::framerate_limiter` will likely take up most of the time, as its purpose is to introduce delays to maintain a consistent FPS.\n\nFor more information on profiling Bevy, see:\n\n[https://github.com/bevyengine/bevy/blob/main/docs/profiling.md](https://github.com/bevyengine/bevy/blob/main/docs/profiling.md)\n\n## WASM Support\n\nA WASM version of Unhaunter is available to play directly in your web browser:\n\n[See more instructions on Unhaunter.com](https://www.unhaunter.com/)\n\nPlease note that this version is primarily intended as a demo.\n\nFor the best experience, we recommend playing the native build.\n\n**Note:** Google Chrome is the recommended browser for the best experience.\n\n### Current WASM Limitations:\n\n*   Performance issues may occur in Firefox.\n*   Single-thread only.\n\nThis WASM version is intended as a demo for those who cannot build the game locally. Unhaunter primarily targets native builds, so WASM support will be minimal for now.\n\n## Faster Compile Times\n\n### Dynamic Linking\n\nUsing dynamic linking for incremental builds (small code changes) can significantly reduce compile times:\n\n```bash\ncargo run --features bevy/dynamic_linking\n```\n\nThis is mainly beneficial for debug builds. For fresh builds, the difference is negligible. This only works on Linux.\n\nYou can profile the build process to identify further optimizations using:\n\n```bash\nRUSTFLAGS=\"-Zself-profile\" cargo +nightly run --features bevy/dynamic_linking\n```\n\n**Note:** This requires a nightly Rust toolchain.\n\n## Building WASM locally:\n\nhttps://bevy-cheatbook.github.io/platforms/wasm.html\n\nInstall deps\n\n```bash\nrustup target install wasm32-unknown-unknown\ncargo install wasm-server-runner\ncargo install wasm-pack\n```\n\nRun with:\n\n```bash\nwasm-pack build --release --target web\n```\n\nThis will build in pkg/\n\nAnd to test:\n\n```bash\npython3 -m http.server\n```\n\n## Faster development incremental builds\n\nIncremental builds on Linux can be much faster if you use `mold`. I decided to not enable it on the project because it would force everyone building from Linux to install it in order to build the game, adding a dependency.\n\nInstead, if you're interested, you can edit `~/.cargo/config.toml` (create the folder and file if they don't exist) and add this:\n\n```\n# Use Mold Linker for faster builds\n[target.x86_64-unknown-linux-gnu]\nlinker = \"clang\"\nrustflags = [\"-C\", \"link-arg=-fuse-ld=/usr/bin/mold\"]\n```\n\nYou'll need to install `mold` and `clang`.\n\nThis is only useful for incremental builds, for example if you are actively developing the game. Also this these speeds are possible only using Bevy dynamic linking (`cargo run --features bevy/dynamic_linking`).\n\nWith Rust default Linker:\n\n*   Crate `uncore` changed: 4.93s (triggers all Unhaunter crates to be rebuilt)\n*   Crate `unhaunter` changed: 3.74s (Just builds library + binary)\n\nWith Mold Linker:\n\n*   Crate `uncore` changed: 3.32s\n*   Crate `unhaunter` changed: 1.87s\n\nThis is only worth it if you plan to compile Unhaunter a lot with different small changes. If you only update Unhaunter on new releases, this difference is virtually nothing since you'll need to build all dependencies that have been upgraded.\n\n## Community\n\nUnhaunter has a Matrix room for discussion and collaboration. Access public, anyone can join. We also have a Discord server.\n\n* [Matrix Room](https://matrix.to/#/#unhaunter:matrix.org)\n* [Discord Server](https://discord.gg/Ux7CGfvVtV)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeavid%2Funhaunter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdeavid%2Funhaunter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdeavid%2Funhaunter/lists"}