mirror of
https://github.com/FranLMSP/pokemon_sprite_decompress.git
synced 2024-11-23 17:41:31 +00:00
Changing render algorithm and making sprite a bit more wider
This commit is contained in:
parent
d06cc5d91c
commit
50f76a2e1c
74
src/main.rs
74
src/main.rs
@ -378,61 +378,63 @@ impl Buffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn render(&self) {
|
fn render(&self) {
|
||||||
|
let mut pixels = Vec::<u8>::new(); // a "vram" to store each pixel
|
||||||
println!("{}", termion::clear::All);
|
|
||||||
let pixel_height = 7 * 8;
|
|
||||||
let buffer_b_start = 7 * 7 * 8; // 392
|
let buffer_b_start = 7 * 7 * 8; // 392
|
||||||
let mut index = buffer_b_start;
|
let mut index = buffer_b_start;
|
||||||
let buffer_c_end = (7 * 7 * 8 * 3) - 1; // 392
|
let buffer_c_end = (7 * 7 * 8 * 3) - 1; // 1175
|
||||||
let mut pixel_row = 0;
|
|
||||||
let mut pixel_col = 0;
|
|
||||||
let mut current_row_pixel_count = 0;
|
|
||||||
let mut total_pixels_count = 0;
|
|
||||||
|
|
||||||
while index <= buffer_c_end {
|
while index <= buffer_c_end {
|
||||||
let byte = self.bytes[index];
|
let mut bit_index = 0;
|
||||||
let mut shift: u8 = 8;
|
|
||||||
let mut count = 0;
|
|
||||||
while count < 4 {
|
|
||||||
shift -= 2;
|
|
||||||
let bit_pair = (byte >> shift) & 0b00000011;
|
|
||||||
count += 1;
|
|
||||||
|
|
||||||
let coords = termion::cursor::Goto(pixel_col + 1, pixel_row + 1);
|
while bit_index <= 7 {
|
||||||
|
let bit_a = (self.bytes[index] >> (7 - bit_index)) & 0b00000001;
|
||||||
|
let bit_b = (self.bytes[index + 1] >> (7 - bit_index)) & 0b00000001;
|
||||||
|
|
||||||
match bit_pair {
|
if bit_a == 0 && bit_b == 0 {
|
||||||
|
pixels.push(0);
|
||||||
|
} else if bit_a == 0 && bit_b == 1 {
|
||||||
|
pixels.push(1);
|
||||||
|
} else if bit_a == 1 && bit_b == 0 {
|
||||||
|
pixels.push(2);
|
||||||
|
} else {
|
||||||
|
pixels.push(3);
|
||||||
|
}
|
||||||
|
|
||||||
|
bit_index += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
index += 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("{}", termion::clear::All);
|
||||||
|
let mut pixel_col = 0;
|
||||||
|
let mut pixel_row = 0;
|
||||||
|
let mut current_row_col = 0;
|
||||||
|
let pixel_height = 8 * 7;
|
||||||
|
for pixel in pixels {
|
||||||
|
|
||||||
|
let coords = termion::cursor::Goto((pixel_col * 2) + 1, pixel_row + 1);
|
||||||
|
|
||||||
|
match pixel {
|
||||||
0 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::White)),
|
0 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::White)),
|
||||||
1 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::Blue)),
|
1 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::Blue)),
|
||||||
2 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::LightBlue)),
|
2 => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::LightBlue)),
|
||||||
_ => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::Black)),
|
_ => print!("{goto}{color} ", goto = coords, color = termion::color::Bg(termion::color::Black)),
|
||||||
}
|
}
|
||||||
|
|
||||||
/* match bit_pair {
|
|
||||||
0 => print!("{goto}0", goto = coords),
|
|
||||||
2 => print!("{goto}1", goto = coords),
|
|
||||||
3 => print!("{goto}2", goto = coords),
|
|
||||||
_ => print!("{goto}3", goto = coords),
|
|
||||||
} */
|
|
||||||
|
|
||||||
total_pixels_count += 1;
|
|
||||||
|
|
||||||
pixel_col += 1;
|
pixel_col += 1;
|
||||||
current_row_pixel_count += 1;
|
current_row_col += 1;
|
||||||
if current_row_pixel_count > 7 {
|
if current_row_col > 7 {
|
||||||
current_row_pixel_count = 0;
|
current_row_col = 0;
|
||||||
pixel_col -= 8;
|
pixel_col -= 8;
|
||||||
pixel_row += 1;
|
pixel_row += 1;
|
||||||
if pixel_row >= pixel_height {
|
if pixel_row >= pixel_height {
|
||||||
pixel_col += 8;
|
|
||||||
pixel_row = 0;
|
pixel_row = 0;
|
||||||
|
pixel_col += 8;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
index += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
println!("{reset}", reset = termion::style::Reset);
|
println!("{reset}", reset = termion::style::Reset);
|
||||||
println!("Total pixels count: {}", total_pixels_count);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_bitplanes(&self) {
|
fn render_bitplanes(&self) {
|
||||||
@ -558,7 +560,7 @@ fn main() {
|
|||||||
buffer.delta_decode(1);
|
buffer.delta_decode(1);
|
||||||
},
|
},
|
||||||
EncodingMode::Mode2 => {
|
EncodingMode::Mode2 => {
|
||||||
buffer.delta_decode(1);
|
buffer.delta_decode(2);
|
||||||
buffer.xor_buffers(2, 1);
|
buffer.xor_buffers(2, 1);
|
||||||
},
|
},
|
||||||
EncodingMode::Mode3 => {
|
EncodingMode::Mode3 => {
|
||||||
@ -584,6 +586,8 @@ fn main() {
|
|||||||
// println!("{:02X?}", buffer.bytes);
|
// println!("{:02X?}", buffer.bytes);
|
||||||
|
|
||||||
// And we can finally start rendering our sprite!!!
|
// And we can finally start rendering our sprite!!!
|
||||||
|
|
||||||
|
// buffer.render_bitplanes();
|
||||||
buffer.render();
|
buffer.render();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user