diff --git a/src/main.rs b/src/main.rs index 782491c..570210e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -27,6 +27,14 @@ fn main() { .default_value( "bin" ) .takes_value( true ) ) + .arg( + Arg::with_name( "TILEORDER" ) + .short( "to" ) + .long( "tile-order" ) + .help( "Specify tile order for tileset (valid TILEORDER options: tile, sprite" ) + .default_value( "tile" ) + .takes_value( true ) + ) ) .get_matches(); @@ -35,7 +43,12 @@ fn main() { // Get input and output filenames if let Some( input_filename ) = matches.value_of( "input" ) { if let Some( output_filename ) = matches.value_of( "output" ) { - return tileset::generate( input_filename, output_filename, matches.value_of( "FORMAT" ).unwrap() ); + return tileset::generate( + input_filename, + output_filename, + matches.value_of( "FORMAT" ).unwrap(), + matches.value_of( "TILEORDER" ).unwrap() + ); } else { utility::print_error( "expected: output_filename (-o,--output)" ); } diff --git a/src/reskit/tileset.rs b/src/reskit/tileset.rs index 54c4d04..c97f976 100644 --- a/src/reskit/tileset.rs +++ b/src/reskit/tileset.rs @@ -114,7 +114,7 @@ fn output_inc( image_filename: &str, output_filename: &str, palette: [u16; 16], utility::print_good( format!( "converted file {}", image_filename ).as_str() ); } -pub fn generate( image_filename: &str, output_filename: &str, output_mode: &str ) { +pub fn generate( image_filename: &str, output_filename: &str, output_mode: &str, tile_order: &str ) { let img = image::open( image_filename ); if let Ok( img ) = img { let ( mut max_x, mut max_y ) = img.dimensions(); @@ -124,19 +124,49 @@ pub fn generate( image_filename: &str, output_filename: &str, output_mode: &str let mut palette: [u16; 16] = [ 0; 16 ]; let mut body: Vec< u8 > = Vec::new(); - for y in ( 0..max_y ).step_by( 8 ) { - for x in ( 0..max_x ).step_by( 8 ) { - for cell_y in 0..8 { - let mut series: u32 = 0; + if tile_order == "sprite" { + /* + * Tile order: + * 1 3 + * 2 4 + */ + for x in ( 0..max_x ).step_by( 8 ) { + for y in ( 0..max_y ).step_by( 8 ) { + for cell_y in 0..8 { + let mut series: u32 = 0; - for cell_x in 0..8 { - let nibble: u32 = get_pixel( &img, &mut palette, cell_x + x, cell_y + y ) << ( ( 7 - cell_x ) * 4 ); - series = series | nibble; + for cell_x in 0..8 { + let nibble: u32 = get_pixel( &img, &mut palette, cell_x + x, cell_y + y ) << ( ( 7 - cell_x ) * 4 ); + series = series | nibble; + } + + let bytes = series.to_be_bytes(); + for i in 0..4 { + body.push( bytes[ i ] ); + } } + } + } + } else { + /* + * Tile order: + * 1 2 + * 3 4 + */ + for y in ( 0..max_y ).step_by( 8 ) { + for x in ( 0..max_x ).step_by( 8 ) { + for cell_y in 0..8 { + let mut series: u32 = 0; - let bytes = series.to_be_bytes(); - for i in 0..4 { - body.push( bytes[ i ] ); + for cell_x in 0..8 { + let nibble: u32 = get_pixel( &img, &mut palette, cell_x + x, cell_y + y ) << ( ( 7 - cell_x ) * 4 ); + series = series | nibble; + } + + let bytes = series.to_be_bytes(); + for i in 0..4 { + body.push( bytes[ i ] ); + } } } }