{"id":23414911,"url":"https://github.com/aurel300/re-posel","last_synced_at":"2025-06-13T21:07:32.305Z","repository":{"id":269263982,"uuid":"904446850","full_name":"Aurel300/re-posel","owner":"Aurel300","description":"Posel Smrti / The Black Mirror (2003), reverse engineered","archived":false,"fork":false,"pushed_at":"2024-12-22T22:19:49.000Z","size":57,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-09T05:41:30.684Z","etag":null,"topics":["game","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/Aurel300.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}},"created_at":"2024-12-16T22:53:09.000Z","updated_at":"2025-02-08T12:44:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"b508f10f-dad8-4a99-b657-8bb1fa2735af","html_url":"https://github.com/Aurel300/re-posel","commit_stats":null,"previous_names":["aurel300/re-posel"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Aurel300/re-posel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aurel300%2Fre-posel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aurel300%2Fre-posel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aurel300%2Fre-posel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aurel300%2Fre-posel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Aurel300","download_url":"https://codeload.github.com/Aurel300/re-posel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Aurel300%2Fre-posel/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259719734,"owners_count":22901244,"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":["game","reverse-engineering"],"created_at":"2024-12-22T20:32:01.647Z","updated_at":"2025-06-13T21:07:32.296Z","avatar_url":"https://github.com/Aurel300.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# `re-posel`\n\n**Reverse engineering Posel Smrti/The Black Mirror (2003)**\n\n## About\n\nThis repository contains tools for reverse engineering and analysing the game [**The Black Mirror**](https://en.wikipedia.org/wiki/The_Black_Mirror_(video_game)), first released as **Posel Smrti** in Czechia in 2003. The bulk of the work was done by analysing the `agds.exe` binary in [Ghidra](https://github.com/NationalSecurityAgency/ghidra/) and by analysing the datafiles packaged with the game. The latter are in a bespoke format (with light XOR-based \"encryption\") and also contain bytecode.\n\n## Features\n\nThe [`analyser`](./analyser) tool, implemented in Rust, can:\n\n- extract assets from `*.grp` files: these are simply big archive formats with no compression;\n- extract *objects* (strings, dialogue scripts, references to assets, screen regions, bytecode scripts) from `*.adb` files;\n- analyse and visualise objects: references to objects and assets are resolved, bytecode is decompiled into readable script;\n- patch `*.adb` files to fix or modify game behaviour.\n\nThe tool requires you to provide paths to the original data files.\n\n## Patches\n\nBy default, the `patch` command will apply all of the following patches:\n\n- `chapter_select`: allows the player to choose a starting chapter (I. - VI.) when starting a new game;\n- `check_again`: removes dialogue paths where the same person has to be asked multiple times before the game progresses (currently only done for dialogue with Harry);\n- `skip_intros`: skips intro logos and menu animation on launch, quits faster.\n\n## Goals\n\nThe main reason I am doing this is because I enjoy reverse engineering, and this game is close to my heart.\n\nOther than that, some goals I hope to achieve are:\n\n- patch game to avoid wasting player's time\n  - [x] skip game intros\n  - [x] re-enable chapter selection\n  - ask a person three times before plot is advanced:\n    - [x] Harry, waiting for Mark\n    - waiting for Frederick... (extra annoying because of horizontal scroll?)\n    - ...?\n  - [ ] avoid Sierra-style deaths and unwinnable game states\n  - [ ] double click to instantly move, even across horizontal scroll screens\n  - [ ] unskippable animations before dialogue is started\n- find optimal routes in the game for speedrunning (look at that [thriving community](https://www.speedrun.com/black_mirror/resources))\n  - create Autosplits https://github.com/LiveSplit/LiveSplit.AutoSplitters\n- recreate game engine in Rust\n  - run natively on more platforms\n  - higher resolutions (scaling filter...?)\n  - allow mixed language audio and subtitles\n- make video content about the game\n  - find cut content (e.g. VA instructions in dialogue scripts)\n  - explain how game works\n  - find differences between English and Czech versions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurel300%2Fre-posel","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faurel300%2Fre-posel","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faurel300%2Fre-posel/lists"}