{"id":51592887,"url":"https://github.com/pinguy/murkk","last_synced_at":"2026-07-11T16:01:05.677Z","repository":{"id":364289904,"uuid":"1266918118","full_name":"pinguy/murkk","owner":"pinguy","description":"Game Created to Make it as Small as Possible - One Shot with Fable 5","archived":false,"fork":false,"pushed_at":"2026-06-12T11:40:30.000Z","size":2348,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T13:22:08.106Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pinguy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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-12T04:16:47.000Z","updated_at":"2026-06-12T11:40:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pinguy/murkk","commit_stats":null,"previous_names":["pinguy/murkk"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pinguy/murkk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguy%2Fmurkk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguy%2Fmurkk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguy%2Fmurkk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguy%2Fmurkk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pinguy","download_url":"https://codeload.github.com/pinguy/murkk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pinguy%2Fmurkk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35367446,"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-07-11T02:00:05.354Z","response_time":104,"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":[],"created_at":"2026-07-11T16:01:04.969Z","updated_at":"2026-07-11T16:01:05.666Z","avatar_url":"https://github.com/pinguy.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# .murkk\n---\n[![UI Preview](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_shotgun.png?raw=true)](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_shotgun.png?raw=true)\n\n[![UI Preview](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_bile.png?raw=true)](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_bile.png?raw=true)\n\n[![UI Preview](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_combat.png?raw=true)](https://github.com/pinguy/murkk/blob/main/nervk/nervk_armory_shot_combat.png?raw=true)\n---\n\nA 96K-spirit homage to **.kkrieger** (.theprodukkt, Breakpoint 2004). Native Linux,\nsingle C file, no engine, no assets. Everything you see and hear is synthesized\nat startup or runtime: the textures, the level, the creatures, the gun, the\nsounds, the font.\n\n**Stripped binary: 51,336 bytes.** Budget: 98,304. Headroom: ~46 KB.\n\n## Build\n\nArch / CachyOS:\n\n    sudo pacman -S --needed sdl2 mesa gcc\n    ./build.sh\n\nDebian / Ubuntu:\n\n    sudo apt install libsdl2-dev libgl1-mesa-dev gcc\n    ./build.sh\n\nOr just: `gcc -Os murkk.c -o murkk -lSDL2 -lGL -lm`\n\n## Play\n\n    ./murkk                # fixed seed — it's a demo, same world every run\n    ./murkk --seed 1982    # different complex\n    ./murkk --smoke        # headless self-test: renders, screenshots, exits 0\n\nWASD move, mouse look, LMB fire, ESC quit. The creatures are low — aim down,\nsame as the original's spiders. Find the green beacon. Red cubes heal,\nyellow cubes are ammo.\n\n## What is synthesized where\n\n- **Textures** (startup, ~260 ms): tileable value-noise fBm over power-of-two\n  lattices → heightfields (brick bevels, plate insets, bolt bumps, brushed\n  streaks) → Sobel-derived tangent-space normal maps + albedo ramps with\n  per-brick hash jitter, grime, and rust thresholds. Four 256² maps, zero\n  files.\n- **Level** (startup, \u003c1 ms): seeded xorshift carves rooms, chains them with\n  L-corridors, places lights (alternating warm sodium / cold mercury — the\n  kkrieger murk), items, creatures, exit. Geometry batched into interleaved\n  client arrays; tangent frames derived from axis-aligned normals identically\n  in C and GLSL so the bump mapping lines up by construction.\n- **Lighting**: GLSL 120, eight nearest point lights per frame with quadratic\n  falloff, per-pixel normal mapping on all level surfaces, distance fog,\n  muzzle-flash and impact lights injected as temporaries, sqrt gamma-out.\n- **Creatures**: box-assembled quadrupeds posed per frame by column-major mat3\n  composition — sin-swung legs while chasing, rear-up windup before the lunge,\n  squash-and-stay-dead on kill. Emissive eyes.\n- **Audio**: one SDL float callback mixing a detuned-55 Hz drone with filtered\n  rumble under one-shot synth voices — noise-burst gunshot with a pitch-glide\n  thump, hit ticks, descending-saw death, footsteps, pickup chirps. No\n  samples.\n- **Font**: 37 glyphs, 5×7, hand-packed bit array, 259 bytes.\n\n## Verification\n\n`--smoke` runs headless under Xvfb + llvmpipe: synthesizes everything, renders\nthe title and a staged firefight, writes both frames as PPM, exits 0. This\nbuild was verified that way — the screenshots in this folder are its actual\noutput, software-rasterized.\n\n## Honest deltas from real 96K practice\n\nkkrieger's 96 KB was won with tooling this homage deliberately skips, so the\n51 KB here is gentleman's-rules size-coding, not compo-grade:\n\n- No packer. kkrieger shipped through **kkrunchy** (ryg's executable\n  compressor). The Linux equivalents — `sstrip`, a `vondehi`-style stub over\n  xz/zstd — would put this binary somewhere under 20 KB.\n- No `-nostartfiles`/custom `_start`, no shader minification, no symbol diet.\n  All left on the table as headroom.\n- Dynamic linking against system SDL2/libGL/libc, excluded from the budget the\n  same way kkrieger leaned on d3d9.dll and the MSVC runtime.\n- kkrieger's levels were hand-authored inside werkkzeug, their operator-stack\n  tool; mine are generated. Different trade, same philosophy: the level is\n  data born at runtime, not bytes on disk.\n- The RAM trade is faithfully reproduced: kkrieger famously unpacked into\n  hundreds of megabytes of 2004-era RAM from its 96 KB. Disk was the only\n  budget. Same here.\n\nCC0 / public domain. Greets to farbrausch and .theprodukkt.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinguy%2Fmurkk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpinguy%2Fmurkk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpinguy%2Fmurkk/lists"}