# 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 * add Bitsy HD and Bitsy 7.0 test data * fix variables/endings becoming "DLG DLG"? * replace Image with Vec or something. seems like a pointless abstraction ### tidy up * refactor the more shonky bits to idiomatic rust