readme.org 4.9 KB

About

(project is still work-in-progress)

Cloning

This repository uses git submodules.

git clone git@notabug.org:ZelphirKaltstahl/lf2-data-reader.git cd lf2-data-reader git submodule update --init --recursive

Using GNU Guix

With GNU Guix installed, you can do the following:

  1. activate the specified GNU Guix environment:

#+begin_src shell bash guix-env/env.sh #+end_src

  1. run the program:

#+begin_src shell make run #+end_src

The output should show a decrypted stage.dat file.

Other ways

All you need is a working GNU Guile installation to run the program. How you get it, does not really matter. For example you could use your system package to install GNU Guile, if it is available in your the package sources of your system, or you could download the source code of GNU Guile and compile it for your system.

Interactive REPL session

Here is an example for an interactive REPL session. Run your REPL from the root directory of this project and then input the following:

(add-to-load-path ".") (add-to-load-path "lib") (add-to-load-path "lib/lf2-data-reader/") (add-to-load-path "lib/lf2-data-crypt/") (add-to-load-path "lib/guile-random-utils/") (load "lib/lf2-data-reader/renderer.scm")

(import (except (rnrs base) let-values) (only (guile) lambda* λ error eof-object? simple-format current-output-port call-with-output-string ) (prefix (logging) log:) (ice-9 binary-ports) (ice-9 textual-ports) (ice-9 peg) (ice-9 pretty-print) (print-utils) (peg-tree-utils) (file-reader) (random-utils) (prefix (lf2-data-crypt) lf2crypt:) (prefix (grammar) grammar:) (prefix (srfi srfi-1) srfi-1:))

(load "lib/peg-tree-utils.scm") (import (renderer))

(define loc "data/stage.dat") (define stage-text (process-file loc lf2crypt:decrypt)) (define stage-data (peg:tree (match-pattern grammar:STAGE-DAT stage-text))) (define survival-data (find-in-peg-tree stage-data 'SURVIVAL-STAGE)) (define phases (flatten-filter-peg-tree (find-all-in-peg-tree survival-data 'PHASE) 'PHASE)) (define phase (list-ref phases 0))

(print-limited stage-text #:max 1024) (print-limited (fisher-yates-shuffle phases) #:max 2048)

(render-data (list phase))

;; and perhaps the following is useful too (load "lib/lf2-data-reader/lib/alist-utils.scm") (import (lib alist-utils))

(load "lib/lf2-data-reader/model/entity.scm") (import (model entity))

(define phase-entities (alist-item-value (alist-find-item-by-key 'PHASE-ENTITIES (cdr phase))))

(define entity (srfi-1:first phase-entities))

(entity-list-repr->entity entity)

Testing

You can run unit tests using the following command:

guile -L . test/

Or run tests from submodules, if tests exist.

Dependencies

The project depends on nothing except GNU Guile. It is tested using GNU Guile =3.0.7=, but probably works using many older versions as well.

To do [0/3]

  • [ ] write the code for translating back the data structure of a stage to a string
  • [ ] implement replace operation for peg tree
  • [ ] add more tests

local variables noexport