Go to file
Max Bradbury febb04fc09 version bump 2020-04-30 20:54:02 +01:00
.github/workflows remove rustfmt 2020-04-19 07:37:36 +01:00
src no need for assignment here 2020-04-30 20:18:37 +01:00
.gitignore move test resources 2020-04-14 00:17:40 +01:00
Cargo.toml version bump 2020-04-30 20:54:02 +01:00
LICENSE Create LICENSE 2020-04-05 18:59:30 +01:00
README.md done 2020-04-30 20:53:27 +01:00

README.md

bitsy-parser

Rust Crates.io

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:

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
  • implement Result return types on ::from functions so we can handle errors
  • 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
  • convert integer IDs to strings and just use base36 when creating new IDs; test games with arbitrary IDs

tidy up

  • refactor the more shonky bits to idiomatic rust