mirror of
https://github.com/italicsjenga/agb.git
synced 2024-12-24 00:31:34 +11:00
Move the palettes to a single constant rather than being repeated
This commit is contained in:
parent
a5c86e8ce8
commit
1e759dbeca
|
@ -20,7 +20,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
- Many of the places that originally disabled IRQs now use the `sync` module, reducing the chance of missed interrupts.
|
- Many of the places that originally disabled IRQs now use the `sync` module, reducing the chance of missed interrupts.
|
||||||
- HashMap iterators now implement `size_hint` which should result in slightly better generation of code using those iterators.
|
- HashMap iterators now implement `size_hint` which should result in slightly better generation of code using those iterators.
|
||||||
- Transparency of backgrounds is now set once in the toml file rather than once for every image.
|
- Transparency of backgrounds is now set once in the toml file rather than once for every image.
|
||||||
- Palette generation now takes into account every single background a toml definition rather than one at a time.
|
- Palette generation now takes into account every single background a toml definition rather than one at a time, you can now find it in the PALETTES constant rather than in every individual image.
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
- Fixed the fast magnitude function in agb_fixnum. This is also used in fast_normalise. Previously only worked for positive (x, y).
|
- Fixed the fast magnitude function in agb_fixnum. This is also used in fast_normalise. Previously only worked for positive (x, y).
|
||||||
|
|
|
@ -127,10 +127,15 @@ pub fn include_gfx(input: TokenStream) -> TokenStream {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let palette_code =
|
||||||
|
rust_generator::generate_palette_code(&optimisation_results, &config.crate_prefix());
|
||||||
|
|
||||||
let module = quote! {
|
let module = quote! {
|
||||||
mod #module_name {
|
mod #module_name {
|
||||||
const _: &[u8] = include_bytes!(#include_path);
|
const _: &[u8] = include_bytes!(#include_path);
|
||||||
|
|
||||||
|
#palette_code
|
||||||
|
|
||||||
#(#image_code)*
|
#(#image_code)*
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -7,19 +7,13 @@ use quote::{format_ident, quote};
|
||||||
|
|
||||||
use std::iter;
|
use std::iter;
|
||||||
|
|
||||||
pub(crate) fn generate_code(
|
pub(crate) fn generate_palette_code(
|
||||||
output_variable_name: &str,
|
|
||||||
results: &Palette16OptimisationResults,
|
results: &Palette16OptimisationResults,
|
||||||
image: &Image,
|
crate_prefix: &str,
|
||||||
image_filename: &str,
|
|
||||||
tile_size: TileSize,
|
|
||||||
crate_prefix: String,
|
|
||||||
assignment_offset: Option<usize>,
|
|
||||||
) -> TokenStream {
|
) -> TokenStream {
|
||||||
let crate_prefix = format_ident!("{}", crate_prefix);
|
let crate_prefix = format_ident!("{}", crate_prefix);
|
||||||
let output_variable_name = format_ident!("{}", output_variable_name);
|
|
||||||
|
|
||||||
let palette_data = results.optimised_palettes.iter().map(|palette| {
|
let palettes = results.optimised_palettes.iter().map(|palette| {
|
||||||
let colours = palette
|
let colours = palette
|
||||||
.clone()
|
.clone()
|
||||||
.into_iter()
|
.into_iter()
|
||||||
|
@ -35,6 +29,23 @@ pub(crate) fn generate_code(
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
quote! {
|
||||||
|
pub const PALETTES: &[#crate_prefix::display::palette16::Palette16] = &[#(#palettes),*];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(crate) fn generate_code(
|
||||||
|
output_variable_name: &str,
|
||||||
|
results: &Palette16OptimisationResults,
|
||||||
|
image: &Image,
|
||||||
|
image_filename: &str,
|
||||||
|
tile_size: TileSize,
|
||||||
|
crate_prefix: String,
|
||||||
|
assignment_offset: Option<usize>,
|
||||||
|
) -> TokenStream {
|
||||||
|
let crate_prefix = format_ident!("{}", crate_prefix);
|
||||||
|
let output_variable_name = format_ident!("{}", output_variable_name);
|
||||||
|
|
||||||
let (tile_data, assignments) = if let Some(assignment_offset) = assignment_offset {
|
let (tile_data, assignments) = if let Some(assignment_offset) = assignment_offset {
|
||||||
let mut tile_data = Vec::new();
|
let mut tile_data = Vec::new();
|
||||||
|
|
||||||
|
@ -68,17 +79,13 @@ pub(crate) fn generate_code(
|
||||||
pub const #output_variable_name: #crate_prefix::display::tile_data::TileData = {
|
pub const #output_variable_name: #crate_prefix::display::tile_data::TileData = {
|
||||||
const _: &[u8] = include_bytes!(#image_filename);
|
const _: &[u8] = include_bytes!(#image_filename);
|
||||||
|
|
||||||
const PALETTE_DATA: &[#crate_prefix::display::palette16::Palette16] = &[
|
|
||||||
#(#palette_data),*
|
|
||||||
];
|
|
||||||
|
|
||||||
const TILE_DATA: &[u8] = #data;
|
const TILE_DATA: &[u8] = #data;
|
||||||
|
|
||||||
const PALETTE_ASSIGNMENT: &[u8] = &[
|
const PALETTE_ASSIGNMENT: &[u8] = &[
|
||||||
#(#assignments),*
|
#(#assignments),*
|
||||||
];
|
];
|
||||||
|
|
||||||
#crate_prefix::display::tile_data::TileData::new(PALETTE_DATA, TILE_DATA, PALETTE_ASSIGNMENT)
|
#crate_prefix::display::tile_data::TileData::new(TILE_DATA, PALETTE_ASSIGNMENT)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ fn main(mut gba: agb::Gba) -> ! {
|
||||||
|
|
||||||
let tileset = TileSet::new(affine_tiles::water_tiles.tiles, TileFormat::EightBpp);
|
let tileset = TileSet::new(affine_tiles::water_tiles.tiles, TileFormat::EightBpp);
|
||||||
|
|
||||||
vram.set_background_palettes(affine_tiles::water_tiles.palettes);
|
vram.set_background_palettes(affine_tiles::PALETTES);
|
||||||
|
|
||||||
let mut bg = gfx.background(Priority::P0, AffineBackgroundSize::Background32x32);
|
let mut bg = gfx.background(Priority::P0, AffineBackgroundSize::Background32x32);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ fn main(mut gba: agb::Gba) -> ! {
|
||||||
|
|
||||||
let tileset = TileSet::new(water_tiles::water_tiles.tiles, TileFormat::FourBpp);
|
let tileset = TileSet::new(water_tiles::water_tiles.tiles, TileFormat::FourBpp);
|
||||||
|
|
||||||
vram.set_background_palettes(water_tiles::water_tiles.palettes);
|
vram.set_background_palettes(water_tiles::PALETTES);
|
||||||
|
|
||||||
let mut bg = gfx.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
let mut bg = gfx.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ use super::tiled::{RegularMap, TileFormat, TileSet, TileSetting, TiledMap, VRamM
|
||||||
crate::include_gfx!("gfx/agb_logo.toml");
|
crate::include_gfx!("gfx/agb_logo.toml");
|
||||||
|
|
||||||
pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) {
|
pub fn display_logo(map: &mut RegularMap, vram: &mut VRamManager) {
|
||||||
vram.set_background_palettes(agb_logo::test_logo.palettes);
|
vram.set_background_palettes(agb_logo::PALETTES);
|
||||||
|
|
||||||
let background_tilemap = TileSet::new(agb_logo::test_logo.tiles, TileFormat::FourBpp);
|
let background_tilemap = TileSet::new(agb_logo::test_logo.tiles, TileFormat::FourBpp);
|
||||||
|
|
||||||
|
|
|
@ -1,20 +1,13 @@
|
||||||
use crate::display::palette16::Palette16;
|
#[non_exhaustive]
|
||||||
|
|
||||||
pub struct TileData {
|
pub struct TileData {
|
||||||
pub palettes: &'static [Palette16],
|
|
||||||
pub tiles: &'static [u8],
|
pub tiles: &'static [u8],
|
||||||
pub palette_assignments: &'static [u8],
|
pub palette_assignments: &'static [u8],
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TileData {
|
impl TileData {
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub const fn new(
|
pub const fn new(tiles: &'static [u8], palette_assignments: &'static [u8]) -> Self {
|
||||||
palettes: &'static [Palette16],
|
|
||||||
tiles: &'static [u8],
|
|
||||||
palette_assignments: &'static [u8],
|
|
||||||
) -> Self {
|
|
||||||
TileData {
|
TileData {
|
||||||
palettes,
|
|
||||||
tiles,
|
tiles,
|
||||||
palette_assignments,
|
palette_assignments,
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ use crate::sfx::Sfx;
|
||||||
include_gfx!("gfx/backgrounds.toml");
|
include_gfx!("gfx/backgrounds.toml");
|
||||||
|
|
||||||
pub fn load_palettes(vram: &mut VRamManager) {
|
pub fn load_palettes(vram: &mut VRamManager) {
|
||||||
vram.set_background_palettes(backgrounds::stars.palettes);
|
vram.set_background_palettes(backgrounds::PALETTES);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) fn load_help_text(
|
pub(crate) fn load_help_text(
|
||||||
|
@ -101,7 +101,7 @@ fn create_background_map(map: &mut RegularMap, vram: &mut VRamManager, stars_til
|
||||||
|
|
||||||
pub fn show_title_screen(background: &mut RegularMap, vram: &mut VRamManager, sfx: &mut Sfx) {
|
pub fn show_title_screen(background: &mut RegularMap, vram: &mut VRamManager, sfx: &mut Sfx) {
|
||||||
background.set_scroll_pos((0i16, 0).into());
|
background.set_scroll_pos((0i16, 0).into());
|
||||||
vram.set_background_palettes(backgrounds::title.palettes);
|
vram.set_background_palettes(backgrounds::PALETTES);
|
||||||
let tile_set = TileSet::new(
|
let tile_set = TileSet::new(
|
||||||
backgrounds::title.tiles,
|
backgrounds::title.tiles,
|
||||||
agb::display::tiled::TileFormat::FourBpp,
|
agb::display::tiled::TileFormat::FourBpp,
|
||||||
|
|
|
@ -785,7 +785,7 @@ fn agb_main(mut gba: agb::Gba) -> ! {
|
||||||
|
|
||||||
pub fn main(mut agb: agb::Gba) -> ! {
|
pub fn main(mut agb: agb::Gba) -> ! {
|
||||||
let (tiled, mut vram) = agb.display.video.tiled0();
|
let (tiled, mut vram) = agb.display.video.tiled0();
|
||||||
vram.set_background_palettes(tile_sheet::background.palettes);
|
vram.set_background_palettes(tile_sheet::PALETTES);
|
||||||
let mut splash_screen = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
let mut splash_screen = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||||
let mut world_display = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
let mut world_display = tiled.background(Priority::P0, RegularBackgroundSize::Background32x32);
|
||||||
|
|
||||||
|
@ -817,7 +817,7 @@ pub fn main(mut agb: agb::Gba) -> ! {
|
||||||
world_display.commit(&mut vram);
|
world_display.commit(&mut vram);
|
||||||
world_display.show();
|
world_display.show();
|
||||||
|
|
||||||
vram.set_background_palettes(tile_sheet::background.palettes);
|
vram.set_background_palettes(tile_sheet::PALETTES);
|
||||||
|
|
||||||
let object = agb.display.object.get();
|
let object = agb.display.object.get();
|
||||||
let mut mixer = agb.mixer.mixer();
|
let mut mixer = agb.mixer.mixer();
|
||||||
|
|
|
@ -19,20 +19,13 @@ pub fn show_splash_screen(
|
||||||
vram: &mut VRamManager,
|
vram: &mut VRamManager,
|
||||||
) {
|
) {
|
||||||
map.set_scroll_pos((0i16, 0i16).into());
|
map.set_scroll_pos((0i16, 0i16).into());
|
||||||
let (tileset, palette) = match which {
|
let tileset = match which {
|
||||||
SplashScreen::Start => {
|
SplashScreen::Start => TileSet::new(splash_screens::splash.tiles, TileFormat::FourBpp),
|
||||||
let tileset = TileSet::new(splash_screens::splash.tiles, TileFormat::FourBpp);
|
|
||||||
|
|
||||||
(tileset, splash_screens::splash.palettes)
|
SplashScreen::End => TileSet::new(
|
||||||
}
|
|
||||||
SplashScreen::End => {
|
|
||||||
let tileset = TileSet::new(
|
|
||||||
splash_screens::thanks_for_playing.tiles,
|
splash_screens::thanks_for_playing.tiles,
|
||||||
TileFormat::FourBpp,
|
TileFormat::FourBpp,
|
||||||
);
|
),
|
||||||
|
|
||||||
(tileset, splash_screens::thanks_for_playing.palettes)
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let vblank = agb::interrupt::VBlank::get();
|
let vblank = agb::interrupt::VBlank::get();
|
||||||
|
@ -77,7 +70,7 @@ pub fn show_splash_screen(
|
||||||
}
|
}
|
||||||
|
|
||||||
map.commit(vram);
|
map.commit(vram);
|
||||||
vram.set_background_palettes(palette);
|
vram.set_background_palettes(splash_screens::PALETTES);
|
||||||
map.show();
|
map.show();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
|
|
|
@ -2146,7 +2146,7 @@ impl<'a> Game<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_sunrise(vram: &mut VRamManager, time: u16) {
|
fn update_sunrise(vram: &mut VRamManager, time: u16) {
|
||||||
let mut modified_palette = background::background.palettes[0].clone();
|
let mut modified_palette = background::PALETTES[0].clone();
|
||||||
|
|
||||||
let a = modified_palette.colour(0);
|
let a = modified_palette.colour(0);
|
||||||
let b = modified_palette.colour(1);
|
let b = modified_palette.colour(1);
|
||||||
|
@ -2160,7 +2160,7 @@ impl<'a> Game<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn update_fade_out(vram: &mut VRamManager, time: u16) {
|
fn update_fade_out(vram: &mut VRamManager, time: u16) {
|
||||||
let mut modified_palette = background::background.palettes[0].clone();
|
let mut modified_palette = background::PALETTES[0].clone();
|
||||||
|
|
||||||
let c = modified_palette.colour(2);
|
let c = modified_palette.colour(2);
|
||||||
|
|
||||||
|
@ -2216,7 +2216,7 @@ fn game_with_level(gba: &mut agb::Gba) {
|
||||||
loop {
|
loop {
|
||||||
let (background, mut vram) = gba.display.video.tiled0();
|
let (background, mut vram) = gba.display.video.tiled0();
|
||||||
|
|
||||||
vram.set_background_palettes(background::background.palettes);
|
vram.set_background_palettes(background::PALETTES);
|
||||||
|
|
||||||
let tileset = TileSet::new(background::background.tiles, TileFormat::FourBpp);
|
let tileset = TileSet::new(background::background.tiles, TileFormat::FourBpp);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue