{"id":51041770,"url":"https://github.com/catannadev/hysteria","last_synced_at":"2026-06-22T11:01:21.370Z","repository":{"id":366277148,"uuid":"1275704754","full_name":"CatAnnaDev/hysteria","owner":"CatAnnaDev","description":"From-scratch modding stack for Alice: Madness Returns (UE3): a dinput8 proxy framework with a full runtime reflection API, mods in C/C++/Rust, a cross-platform asset studio (Rust/egui), and a native keyboard+mouse fix.","archived":false,"fork":false,"pushed_at":"2026-06-21T03:43:53.000Z","size":582,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-21T05:20:24.742Z","etag":null,"topics":["alice-madness-returns","c","dinput8","egui","game-modding","mod-framework","modding","reverse-engineering","rust","trainer","ue3","unreal-engine-3"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/CatAnnaDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-21T03:23:18.000Z","updated_at":"2026-06-21T03:43:56.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/CatAnnaDev/hysteria","commit_stats":null,"previous_names":["catannadev/hysteria"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/CatAnnaDev/hysteria","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatAnnaDev%2Fhysteria","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatAnnaDev%2Fhysteria/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatAnnaDev%2Fhysteria/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatAnnaDev%2Fhysteria/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/CatAnnaDev","download_url":"https://codeload.github.com/CatAnnaDev/hysteria/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/CatAnnaDev%2Fhysteria/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34645688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["alice-madness-returns","c","dinput8","egui","game-modding","mod-framework","modding","reverse-engineering","rust","trainer","ue3","unreal-engine-3"],"created_at":"2026-06-22T11:01:20.494Z","updated_at":"2026-06-22T11:01:21.364Z","avatar_url":"https://github.com/CatAnnaDev.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Hysteria\n\nA from-scratch modding stack for **Alice: Madness Returns** (Unreal Engine 3, D3D9).\nZero hardcoded addresses, zero heavy dependencies — everything is discovered at runtime.\nIt runs natively on Windows and under CrossOver/Wine on macOS.\n\nThree pieces:\n\n- **`hysteria/`** — the framework: a `dinput8.dll` proxy that hooks into the running game,\n  exposes its whole UnrealScript object model, and loads mods.\n- **`mods/`** — mods are tiny DLLs (C, C++, or Rust) built on the framework's API.\n- **`studio/`** — Hysteria Studio: a cross-platform desktop app (Rust + egui) to open,\n  inspect, edit, preview and export the game's `.upk` assets (textures, sounds, properties).\n\n## What it can do\n\n- Read and write **any** property on **any** live object, by name, through the class hierarchy.\n- Intercept, modify, block or override the return of **any** of the game's ~8000 functions.\n- Call any function, spawn/destroy actors, run console commands, draw an in-game overlay.\n- A proper **keyboard + mouse fix** (Alice was built for a gamepad — see below).\n- A standalone asset tool that loads all ~1700 cooked packages and lets you edit them.\n\nThe full game surface — 1861 classes, ~13900 properties, 8272 functions — is mapped in\n`hysteria_reference.txt` (generated). Nothing is out of reach.\n\n## The mouse fix\n\nAlice: Madness Returns is gamepad-first; its keyboard+mouse aim has acceleration, smoothing\nand a deadzone that eats small movements. The `input` mod fixes it **the clean way** — it keeps\nthe game's native camera and just neutralizes the bad parts: it forces the camera-input accel\ntimers (`aTurnElapsedTime` / `aLookUpElapsedTime`) flat and disables `bEnableMouseSmoothing`.\nNo input bypass, no camera fighting, menus still work.\n\n## Layout\n\n```\nhysteria/        the framework (compiles to the injected dinput8.dll)\n  proxy.c         dll proxy + D3D9 EndScene/Reset hooks + raw-input plumbing + logmsg\n  mem.c           GNames/GObjects discovery, name/class/property reflection\n  props.c         runtime offset calibration (UProperty tables)\n  mod_hook.c      ProcessEvent finder + inline detour + dispatch + per-frame ticks\n  mod_api.c       the HysteriaAPI implementation + mod loader\n  hysteria_api.h  the PUBLIC header mods compile against\n  hysteria.hpp    C++ wrapper (lambdas, std::string, HYSTERIA_MOD macro)\n  hysteria_sdk.h  GENERATED typed offset accessors (tools/gen_sdk.py) — not committed\n  console.c       in-game log console;  ui.c  Nuklear overlay\n  camera.c render.c entities.c dump.c   built-in overlay tools (freecam/ESP/actors/dump)\n  frame.c         per-frame orchestrator;  build.sh  cross-compile + deploy\nmods/\n  trainer/        god / fly / noclip / freeze / teleport / savestates / world / heal\n  alice/          Alice abilities, hysteria, shrink-sense\n  input/          the keyboard+mouse fix\n  examples/       reference mods in C, C++ and Rust (+ older demos)\n  build.sh        builds every top-level mod -\u003e Win32/Mods/\u003cname\u003e.dll\nstudio/           Hysteria Studio (Rust + egui) — the asset tool\ntools/            gen_sdk.py, gen_reference.py, gen_ccmds.py, upk.py, lzo1x.py\n```\n\n## Build \u0026 run\n\n```\nhysteria/build.sh     # build the framework, auto-deploy dinput8.dll to the game folder\nmods/build.sh         # build the mods, deploy to Win32/Mods/\nbash play.command     # launch windowed   (RES=1920x1080 bash play.command to resize)\n```\n\nToolchain: `i686-w64-mingw32-gcc/g++` (Homebrew `mingw-w64`); Rust mods need nightly +\n`rustup target add i686-pc-windows-gnu` + `rustup component add rust-src`. On macOS the game\nruns from the CrossOver bottle via `cxstart`.\n\nIn game: `` ` `` toggles the overlay. The ProcessEvent hook installs itself; mods load from\n`Mods/` (hit \"Reload mods\" in the Modding tab to hot-reload).\n\n## Writing a mod\n\n**C** — `mods/\u003cname\u003e/\u003cname\u003e.c`:\n```c\n#include \u003cwindows.h\u003e\n#include \"hysteria_api.h\"\nstatic HysteriaAPI *A;\nstatic void on_damage(AEvent *e){ if(e-\u003eself == A-\u003eplayer_pawn()) e-\u003eblock = 1; } // godmode\n__declspec(dllexport) void ModMain(HysteriaAPI *api){\n    A = api;\n    api-\u003elog(\"my mod loaded\");\n    api-\u003eon(\"TakeDamage\", on_damage);\n    api-\u003eset_bool(A-\u003eplayer_pawn(), \"bCanFly\", 1);\n}\n```\n\n**C++** (`hysteria.hpp` — lambdas + std::string):\n```cpp\n#include \"hysteria.hpp\"\nusing namespace hysteria;\nHYSTERIA_MOD() {\n    log(\"my mod loaded\");\n    on(\"TakeDamage\", [](Event \u0026e){ if (e.self() == player_pawn()) e.block(); });\n    on_tick([]{ if (key_pressed(VK_F11)) console(\"God\"); });\n}\n```\n\n**Rust** (closures, no unsafe in your mod):\n```rust\nmod hysteria_api; mod hysteria; use hysteria::*;\n#[no_mangle] pub extern \"C\" fn ModMain(api: *const hysteria_api::HysteriaAPI) {\n    hysteria::init(api);\n    on(\"TakeDamage\", |e| if e.this() == player_pawn() { e.block(); });\n    on_tick(|| if key_pressed(0x7A) { console(\"God\"); });\n}\n```\n\nSee **MODDING.md** for the full guide. The API (`hysteria_api.h`, version 7) covers:\nreflection, typed property get/set (int/float/bool/byte/vector/rotator), event hooks with\nparam + return editing, a generic typed call builder (`call_begin → call_arg_* → call_invoke\n→ call_out_*`), spawn/destroy/console, per-frame `on_tick` + `key_down`/`key_pressed`,\noverlay panels (`ui_panel` + widgets), `world_info()`, raw memory access, and raw mouse.\n\n## Hysteria Studio\n\nA standalone, cross-platform (Windows/macOS/Linux) asset tool — no game required.\n\n```\ncd studio \u0026\u0026 cargo run --release\n```\n\nIt ships its own from-scratch LZO1X decompressor, UE3 package parser and DXT (BC1/BC2/BC3)\ncodec. It loads every cooked `.upk`, browses objects, edits int/float/bool/byte properties\nin place, decodes struct values (Vector/Rotator/Color/...), previews and exports textures to\nPNG (DXT1/DXT3/DXT5/G8/A8R8G8B8, reading streamed mips from `.tfc`), replaces textures from\nPNG, exports/replaces sounds (OGG/WAV), bulk-exports all textures/sounds, shows a raw hex\nview of any object, and writes a game-loadable package back out.\n\n**3D mesh view** is wired to UModel (UE Viewer): select a SkeletalMesh/StaticMesh and click\n\"View in 3D (UModel)\" to open its interactive 3D viewer (and export OBJ/glTF/textures).\nDrop `umodel_64.exe` into the CrossOver bottle at `C:\\umodel\\` (from gildor.org); `umodel.command`\nlaunches the browser standalone.\n\nIt also has a **Localization (text) mode**: browse and edit every `Localization/\u003cLANG\u003e/*`\nstring file (menus, subtitles, objectives, tutorials...) with byte-exact saves (UTF-16 and\nLatin-1 preserved). Editing these is the most reliable way to mod game text — it takes effect\nin-game immediately, no package rebuild needed.\n\n## Notes\n\n- Everything is discovered at runtime — GNames/GObjects, property/bitmask/super-class\n  offsets, the ProcessEvent vtable index. No build-specific addresses are baked in.\n- `tools/gen_sdk.py` turns an in-game F2 dump into typed offset accessors; `gen_reference.py`\n  turns it into the browsable `hysteria_reference.txt` API map.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatannadev%2Fhysteria","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcatannadev%2Fhysteria","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcatannadev%2Fhysteria/lists"}