use crate::rom;
const STRUCT_SIZE: usize = 17;
#[derive(Debug)]
pub struct BattleBackground {
bbg_data: Vec<i16>,
}
impl BattleBackground {
pub fn new(i: usize) -> Self {
let mut bbg = BattleBackground {
bbg_data: vec![0i16; STRUCT_SIZE],
};
bbg.read(i);
bbg
}
pub fn graphics_index(&self) -> usize {
self.bbg_data[0] as usize
}
pub fn palette_index(&self) -> usize {
self.bbg_data[1] as usize
}
pub fn bits_per_pixel(&self) -> u8 {
self.bbg_data[2] as u8
}
pub fn palette_cycle_type(&self) -> i16 {
self.bbg_data[3]
}
pub fn palette_cycle_1_start(&self) -> usize {
self.bbg_data[4] as usize
}
pub fn palette_cycle_1_end(&self) -> usize {
self.bbg_data[5] as usize
}
pub fn palette_cycle_2_start(&self) -> usize {
self.bbg_data[6] as usize
}
pub fn palette_cycle_2_end(&self) -> usize {
self.bbg_data[7] as usize
}
pub fn palette_cycle_speed(&self) -> i16 {
self.bbg_data[8]
}
#[allow(unused)]
pub fn horizontal_movement(&self) -> i16 {
self.bbg_data[9]
}
#[allow(unused)]
pub fn vertical_movement(&self) -> i16 {
self.bbg_data[10]
}
#[allow(unused)]
pub fn horizontal_acceleration(&self) -> i16 {
self.bbg_data[11]
}
#[allow(unused)]
pub fn vertical_acceleration(&self) -> i16 {
self.bbg_data[12]
}
pub fn animation(&self) -> u32 {
((self.bbg_data[13] as u32) << 24)
+ ((self.bbg_data[14] as u32) << 16)
+ ((self.bbg_data[15] as u32) << 8)
+ (self.bbg_data[16] as u32)
}
fn read(&mut self, index: usize) {
let mut main = rom::read_block(0xDCA1 + index * STRUCT_SIZE);
for i in 0..STRUCT_SIZE {
self.bbg_data[i] = main.read_int16();
}
}
}