bitsy-parser 0.65.12

A parser for Bitsy game data
Documentation
# bitsy-parser

![Rust](https://github.com/synth-ruiner/bitsy-parser/workflows/Rust/badge.svg)
![](https://img.shields.io/badge/license-MIT-blueviolet.svg)
[![Crates.io](https://img.shields.io/crates/v/bitsy-parser.svg)](https://crates.io/crates/bitsy-parser)

a library for parsing Bitsy game data.

the version number follows Bitsy itself, so version 0.65.* targets Bitsy 6.5.

## how to use

a simple example program:

```rust
extern crate bitsy_parser;
use std::{env, fs};
use bitsy_parser::game::Game;
use bitsy_parser::image::Image;

/// replaces the player avatar with a smiley face.
fn main() {
    let input_file = env::args().nth(1)
        .expect("No input path specified. Usage: `smiley infile outfile`");
    let output_file = env::args().nth(2)
        .expect("No output path specified. Usage: `smiley infile outfile`");

    let mut game = Game::from(fs::read_to_string(input_file).unwrap()).unwrap();

    game.avatar.animation_frames = vec![
        Image {
            pixels: vec![
                0,0,1,1,1,1,0,0,
                0,1,1,1,1,1,1,0,
                1,1,0,1,1,0,1,1,
                1,1,0,1,1,0,1,1,
                1,1,1,1,1,1,1,1,
                1,1,0,1,1,0,1,1,
                0,1,1,0,0,1,1,0,
                0,0,1,1,1,1,0,0,
            ]
        }
    ];

    fs::write(output_file, &game.to_string())
        .expect("Failed to write to output file");
}
```

some more practical uses would be things like:

* remove duplicate tiles
* merge two Bitsy games together
* programmatically create Bitsy games
* a Bitsy game editor

## todo

* test for bitsy 7.0 and implement new features
    * titles can have multiple lines of dialog
    * dialogue names
* implement Result return types on ::from functions so we can handle errors
* handle old out-of-bounds editor errors (extra image pixels, exits/endings with position -1,-0 etc.) 
    * it's ok if the output of these does not match the input as we're fixing it
* "unquote" function for dialogues, game title, anything else that supports """
* add Bitsy HD and Bitsy 7.0 test data
* fix variables/endings becoming "DLG DLG"?
* replace Image with Vec<u8> or something. seems like a pointless abstraction

### tidy up

* refactor the more shonky bits to idiomatic rust