https://github.com/aurel300/re-posel
Posel Smrti / The Black Mirror (2003), reverse engineered
https://github.com/aurel300/re-posel
game reverse-engineering
Last synced: 10 months ago
JSON representation
Posel Smrti / The Black Mirror (2003), reverse engineered
- Host: GitHub
- URL: https://github.com/aurel300/re-posel
- Owner: Aurel300
- Created: 2024-12-16T22:53:09.000Z (over 1 year ago)
- Default Branch: master
- Last Pushed: 2024-12-22T22:19:49.000Z (over 1 year ago)
- Last Synced: 2025-04-09T05:41:30.684Z (12 months ago)
- Topics: game, reverse-engineering
- Language: Rust
- Homepage:
- Size: 55.7 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# `re-posel`
**Reverse engineering Posel Smrti/The Black Mirror (2003)**
## About
This 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.
## Features
The [`analyser`](./analyser) tool, implemented in Rust, can:
- extract assets from `*.grp` files: these are simply big archive formats with no compression;
- extract *objects* (strings, dialogue scripts, references to assets, screen regions, bytecode scripts) from `*.adb` files;
- analyse and visualise objects: references to objects and assets are resolved, bytecode is decompiled into readable script;
- patch `*.adb` files to fix or modify game behaviour.
The tool requires you to provide paths to the original data files.
## Patches
By default, the `patch` command will apply all of the following patches:
- `chapter_select`: allows the player to choose a starting chapter (I. - VI.) when starting a new game;
- `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);
- `skip_intros`: skips intro logos and menu animation on launch, quits faster.
## Goals
The main reason I am doing this is because I enjoy reverse engineering, and this game is close to my heart.
Other than that, some goals I hope to achieve are:
- patch game to avoid wasting player's time
- [x] skip game intros
- [x] re-enable chapter selection
- ask a person three times before plot is advanced:
- [x] Harry, waiting for Mark
- waiting for Frederick... (extra annoying because of horizontal scroll?)
- ...?
- [ ] avoid Sierra-style deaths and unwinnable game states
- [ ] double click to instantly move, even across horizontal scroll screens
- [ ] unskippable animations before dialogue is started
- find optimal routes in the game for speedrunning (look at that [thriving community](https://www.speedrun.com/black_mirror/resources))
- create Autosplits https://github.com/LiveSplit/LiveSplit.AutoSplitters
- recreate game engine in Rust
- run natively on more platforms
- higher resolutions (scaling filter...?)
- allow mixed language audio and subtitles
- make video content about the game
- find cut content (e.g. VA instructions in dialogue scripts)
- explain how game works
- find differences between English and Czech versions