Ничего подобного взламыванию классических игр.
Какая версия? Оригинал написан на Фортране и работает на PDP-11. Так что это не тот, который у вас есть.
Возможно, у вас последняя версия OSS? https://gitlab.com/esr/open-adventure
Итак, вам нужно взглянуть на конкретную реализацию игры и взять структуры данных, которые она использует для сохранения игрового состояния.
Вот что вы хотите сделать:
git clone https://gitlab.com/esr/open-adventure.git open-adventure
make
./advent
Это запускает игру и помещает вас в нее.
Welcome to Adventure!! Would you like instructions?
> no
You are standing at the end of a road before a small brick building.
Around you is a forest. A small stream flows out of the building and
down a gully.
> save
I can suspend your Adventure for you so that you can resume later, but
it will cost you 5 points.
Is this acceptable?
> yes
OK
File name: saved_game
Richs-MBP:open-adventure randrews$ ls -l saved_game
-rw-r--r-- 1 randrews staff 3192 Mar 18 19:11 saved_game
Richs-MBP:open-adventure randrews$ file saved_game
saved_game: data
Richs-MBP:open-adventure randrews$ strings saved_game
E'HTH
Это двоично, хорошо. Итак, мы идем за исходником игры.
saveresume.c
- отличное место для старта.
Внутри мы находим ссылку на struct game_t
в коде, который suspend()
s в игре. И эта структура определена в advent.h
Похоже:
struct game_t {
int32_t lcg_x;
int abbnum; // How often to print int descriptions
score_t bonus; // What kind of finishing bonus we are getting
loc_t chloc; // pirate chest location
loc_t chloc2; // pirate chest alternate location
turn_t clock1; // # turns from finding last treasure to close
turn_t clock2; // # turns from warning till blinding flash
bool clshnt; // has player read the clue in the endgame?
bool closed; // whether we're all the way closed
bool closng; // whether it's closing time yet
bool lmwarn; // has player been warned about lamp going dim?
bool novice; // asked for instructions at start-up?
bool panic; // has player found out he's trapped?
bool wzdark; // whether the loc he's leaving was dark
bool blooded; // has player drunk of dragon's blood?
... it is big! ...
obj_t link[NOBJECTS * 2 + 1];// object-list links
loc_t place[NOBJECTS + 1]; // location of object
int hinted[NHINTS]; // hinted[i] = true iff hint i has been used.
int hintlc[NHINTS]; // hintlc[i] = how int at LOC with cond bit i
int prop[NOBJECTS + 1]; // object state array */
};
И это то, что в вашем файле. Получите удовольствие, взяв код игры C и используя функции приостановки / возобновления, чтобы загрузить сохраненный файл и взломать его, чтобы вы напились крови драконов!