2023-08-19 08:24:59 +02:00
|
|
|
#![no_std]
|
|
|
|
#![allow(non_upper_case_globals)]
|
|
|
|
|
|
|
|
//Include the Arduboy Library
|
|
|
|
#[allow(unused_imports)]
|
|
|
|
use arduboy_rust::prelude::*;
|
2023-09-04 12:56:36 +02:00
|
|
|
use arduboy_tone::arduboy_tone_pitch::*;
|
2023-08-21 05:24:03 +02:00
|
|
|
mod gameloop;
|
2023-08-19 18:21:14 +02:00
|
|
|
|
2023-08-19 08:24:59 +02:00
|
|
|
#[allow(dead_code)]
|
2023-08-21 05:24:03 +02:00
|
|
|
pub const arduboy: Arduboy2 = Arduboy2::new();
|
2023-09-04 12:56:36 +02:00
|
|
|
pub const sound: ArduboyTones = ArduboyTones::new();
|
2023-08-19 18:21:14 +02:00
|
|
|
|
2023-09-04 12:56:36 +02:00
|
|
|
pub static eeprom: EEPROM = EEPROM::new(200);
|
|
|
|
pub static mut scorebord: Scoreboard = Scoreboard {
|
|
|
|
player1: 0,
|
|
|
|
player2: 0,
|
|
|
|
player3: 0,
|
|
|
|
};
|
|
|
|
pub struct Scoreboard {
|
|
|
|
pub player1: u16,
|
|
|
|
pub player2: u16,
|
|
|
|
pub player3: u16,
|
|
|
|
}
|
|
|
|
impl Scoreboard {
|
|
|
|
pub fn check_score(&self, score: u16) -> u8 {
|
|
|
|
match score {
|
|
|
|
s if s > self.player1 => 1,
|
|
|
|
s if s == self.player1 => 2,
|
|
|
|
s if s > self.player2 => 2,
|
|
|
|
s if s == self.player1 => 3,
|
|
|
|
s if s > self.player3 => 3,
|
|
|
|
_ => 0,
|
|
|
|
}
|
|
|
|
}
|
2023-09-04 15:07:26 +02:00
|
|
|
pub fn update_score(&mut self, score: u16, e: &EEPROM) {
|
2023-09-04 12:56:36 +02:00
|
|
|
let place = self.check_score(score);
|
|
|
|
match place {
|
|
|
|
1 => {
|
|
|
|
self.player3 = self.player2;
|
|
|
|
self.player2 = self.player1;
|
|
|
|
self.player1 = score;
|
|
|
|
}
|
|
|
|
2 => {
|
|
|
|
self.player3 = self.player2;
|
|
|
|
self.player2 = score;
|
|
|
|
}
|
|
|
|
3 => {
|
|
|
|
self.player3 = score;
|
|
|
|
}
|
|
|
|
_ => (),
|
|
|
|
}
|
2023-09-04 15:07:26 +02:00
|
|
|
e.put(self)
|
2023-09-04 12:56:36 +02:00
|
|
|
}
|
|
|
|
}
|
2023-08-19 08:24:59 +02:00
|
|
|
// dynamic ram variables
|
2023-08-19 19:14:32 +02:00
|
|
|
#[derive(Debug)]
|
2023-08-21 05:24:03 +02:00
|
|
|
pub struct Enemy {
|
|
|
|
pub active: bool,
|
|
|
|
pub bitmap: *const u8,
|
|
|
|
pub bitmap_frame: u8,
|
|
|
|
pub rect: Rect,
|
2023-08-20 12:52:28 +02:00
|
|
|
}
|
|
|
|
impl Enemy {
|
2023-08-21 05:24:03 +02:00
|
|
|
pub fn move_down(&mut self) {
|
|
|
|
self.rect.x -= 1;
|
2023-08-20 12:52:28 +02:00
|
|
|
}
|
|
|
|
}
|
2023-08-21 05:24:03 +02:00
|
|
|
#[derive(Debug)]
|
|
|
|
pub struct Player {
|
|
|
|
pub gamemode: GameMode,
|
|
|
|
pub immortal: bool,
|
|
|
|
pub immortal_frame_count: u8,
|
|
|
|
pub active: bool,
|
|
|
|
pub live: u8,
|
2023-08-21 05:56:22 +02:00
|
|
|
pub level: u8,
|
2023-08-21 05:24:03 +02:00
|
|
|
pub speed: u8,
|
|
|
|
pub speed_change: bool,
|
2023-09-04 12:56:36 +02:00
|
|
|
pub counter: u16,
|
2023-08-21 05:24:03 +02:00
|
|
|
pub bitmap: *const u8,
|
|
|
|
pub bitmap_frame: i8,
|
|
|
|
pub rect: Rect,
|
|
|
|
pub gameover_height: i16,
|
2023-09-04 15:18:29 +02:00
|
|
|
//pub sound: bool,
|
2023-08-21 05:24:03 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
pub static mut p: Player = Player {
|
|
|
|
gamemode: GameMode::Titlescreen,
|
|
|
|
live: 3,
|
2023-08-21 05:56:22 +02:00
|
|
|
level: 1,
|
2023-08-21 05:24:03 +02:00
|
|
|
immortal: false,
|
|
|
|
immortal_frame_count: 0,
|
|
|
|
active: true,
|
|
|
|
counter: 0,
|
2023-09-04 12:56:36 +02:00
|
|
|
speed: 60,
|
2023-08-21 05:24:03 +02:00
|
|
|
speed_change: false,
|
|
|
|
bitmap: get_sprite_addr!(player),
|
2023-08-19 18:21:14 +02:00
|
|
|
bitmap_frame: 0,
|
2023-08-21 05:24:03 +02:00
|
|
|
rect: Rect {
|
|
|
|
x: 0,
|
|
|
|
y: 8,
|
|
|
|
width: 8,
|
|
|
|
height: 8,
|
|
|
|
},
|
|
|
|
gameover_height: -30,
|
2023-09-04 15:18:29 +02:00
|
|
|
//sound: true,
|
2023-08-19 18:21:14 +02:00
|
|
|
};
|
2023-08-20 12:52:28 +02:00
|
|
|
|
2023-08-19 19:14:32 +02:00
|
|
|
unsafe impl Sync for Player {}
|
2023-08-21 05:24:03 +02:00
|
|
|
#[derive(Debug)]
|
|
|
|
pub enum GameMode {
|
|
|
|
Titlescreen,
|
|
|
|
GameLoop,
|
|
|
|
Losescreen,
|
|
|
|
Scoreboard,
|
|
|
|
Reset,
|
|
|
|
}
|
2023-08-19 08:24:59 +02:00
|
|
|
|
|
|
|
// The setup() function runs once when you turn your Arduboy on
|
|
|
|
#[no_mangle]
|
|
|
|
pub unsafe extern "C" fn setup() {
|
|
|
|
// put your setup code here, to run once:
|
|
|
|
arduboy.begin();
|
2023-09-04 12:56:36 +02:00
|
|
|
eeprom.init(&mut scorebord);
|
|
|
|
arduboy.set_frame_rate(60);
|
|
|
|
sound.tones(get_tones_addr!(music));
|
2023-08-19 08:24:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// The loop() function repeats forever after setup() is done
|
|
|
|
#[no_mangle]
|
|
|
|
#[export_name = "loop"]
|
|
|
|
pub unsafe extern "C" fn loop_() {
|
|
|
|
// put your main code here, to run repeatedly:
|
2023-08-19 18:21:14 +02:00
|
|
|
if !arduboy.next_frame() {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
arduboy.clear();
|
2023-09-04 12:56:36 +02:00
|
|
|
arduboy.poll_buttons();
|
2023-08-21 05:24:03 +02:00
|
|
|
|
|
|
|
match p.gamemode {
|
|
|
|
GameMode::Titlescreen => {
|
|
|
|
sprites::draw_override(0, 0, get_sprite_addr!(titlescreen), 0);
|
2023-09-04 12:56:36 +02:00
|
|
|
if arduboy.just_pressed(A) {
|
2023-08-21 05:24:03 +02:00
|
|
|
p.gamemode = GameMode::GameLoop;
|
|
|
|
}
|
2023-09-04 12:56:36 +02:00
|
|
|
if arduboy.just_pressed(B) {
|
|
|
|
p.gamemode = GameMode::Scoreboard;
|
|
|
|
}
|
|
|
|
if arduboy.just_pressed(DOWN) {
|
|
|
|
arduboy.audio_toggle();
|
|
|
|
}
|
2023-08-20 12:52:28 +02:00
|
|
|
}
|
2023-08-21 05:24:03 +02:00
|
|
|
GameMode::GameLoop => {
|
|
|
|
gameloop::gameloop();
|
|
|
|
}
|
|
|
|
GameMode::Losescreen => {
|
|
|
|
//todo
|
|
|
|
arduboy.set_text_size(2);
|
|
|
|
arduboy.set_cursor(13, p.gameover_height);
|
|
|
|
arduboy.print(get_string_addr!(text_gameover));
|
|
|
|
if arduboy.every_x_frames(2) && p.gameover_height < 15 {
|
|
|
|
p.gameover_height += 1
|
|
|
|
}
|
|
|
|
if p.gameover_height == 15 {
|
|
|
|
arduboy.set_text_size(1);
|
|
|
|
arduboy.set_cursor(13, 35);
|
|
|
|
arduboy.print(get_string_addr!(text_gameover_score));
|
|
|
|
arduboy.print(p.counter as i16);
|
|
|
|
}
|
2023-09-04 12:56:36 +02:00
|
|
|
if arduboy.just_pressed(A) || arduboy.just_pressed(B) {
|
|
|
|
p.gamemode = GameMode::Reset;
|
2023-08-21 05:24:03 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
GameMode::Scoreboard => {
|
2023-09-04 12:56:36 +02:00
|
|
|
arduboy.set_text_size(2);
|
|
|
|
arduboy.set_cursor(0, 0);
|
|
|
|
arduboy.print(f!(b"Scoreboard\0"));
|
|
|
|
arduboy.set_text_size(1);
|
|
|
|
arduboy.print(f!(b"\n\n\n\0"));
|
|
|
|
arduboy.print(f!(b"Player 1: \0"));
|
|
|
|
arduboy.print(scorebord.player1);
|
|
|
|
arduboy.print(f!(b"\n\0"));
|
|
|
|
arduboy.print(f!(b"Player 2: \0"));
|
|
|
|
arduboy.print(scorebord.player2);
|
|
|
|
arduboy.print(f!(b"\n\0"));
|
|
|
|
arduboy.print(f!(b"Player 3: \0"));
|
|
|
|
arduboy.print(scorebord.player3);
|
|
|
|
if arduboy.just_pressed(A) || arduboy.just_pressed(B) {
|
|
|
|
p.gamemode = GameMode::Reset
|
|
|
|
}
|
2023-08-21 05:24:03 +02:00
|
|
|
}
|
|
|
|
GameMode::Reset => {
|
2023-09-04 15:18:29 +02:00
|
|
|
vec_enemies.iter_mut().for_each(|f| f.active = false);
|
2023-09-04 12:56:36 +02:00
|
|
|
p = Player {
|
|
|
|
gamemode: GameMode::Titlescreen,
|
|
|
|
live: 3,
|
|
|
|
level: 1,
|
|
|
|
immortal: false,
|
|
|
|
immortal_frame_count: 0,
|
|
|
|
active: true,
|
|
|
|
counter: 0,
|
|
|
|
speed: 60,
|
|
|
|
speed_change: false,
|
|
|
|
bitmap: get_sprite_addr!(player),
|
|
|
|
bitmap_frame: 0,
|
|
|
|
rect: Rect {
|
|
|
|
x: 0,
|
|
|
|
y: 8,
|
|
|
|
width: 8,
|
|
|
|
height: 8,
|
|
|
|
},
|
|
|
|
gameover_height: -30,
|
2023-09-04 15:18:29 +02:00
|
|
|
//sound: p.sound,
|
2023-09-04 12:56:36 +02:00
|
|
|
};
|
2023-08-19 18:21:14 +02:00
|
|
|
}
|
2023-08-19 19:14:32 +02:00
|
|
|
}
|
2023-08-19 18:21:14 +02:00
|
|
|
|
|
|
|
arduboy.display();
|
2023-08-19 08:24:59 +02:00
|
|
|
}
|
2023-08-21 05:24:03 +02:00
|
|
|
pub static mut enemy_count: u8 = 0;
|
2023-08-21 05:56:22 +02:00
|
|
|
pub static mut vec_enemies: Vec<Enemy, 9> = Vec::<Enemy, 9>::new();
|
2023-08-21 05:24:03 +02:00
|
|
|
progmem!(
|
|
|
|
static text_gameover: [u8; _] = *b"Game Over\0";
|
|
|
|
static text_levelwin: [u8; _] = *b"Congrats\0";
|
|
|
|
static text_gameover_score: [u8; _] = *b"Your score is: \0";
|
|
|
|
pub static player: [u8; _] = [
|
|
|
|
8, 8, // width, height,
|
|
|
|
0xa3, 0x51, 0xa6, 0x51, 0xa1, 0x56, 0xa1, 0x53, // TILE 00
|
|
|
|
0x7e, 0xdf, 0xb3, 0xdf, 0xbf, 0xd3, 0xbf, 0x7e, // TILE 01
|
|
|
|
0x7e, 0xc1, 0xad, 0xc1, 0xa1, 0xcd, 0xa1, 0x7e, // TILE 02
|
|
|
|
];
|
|
|
|
pub static titlescreen: [u8; _] = [
|
|
|
|
// width, height,
|
|
|
|
128, 64, 0xff, 0xff, 0xff, 0x3f, 0x1f, 0x0f, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07, 0x07,
|
|
|
|
0x07, 0x07, 0x07, 0x0f, 0x1f, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x03, 0x03, 0x03, 0x03,
|
|
|
|
0x07, 0x06, 0x1e, 0xfc, 0xf0, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0x60, 0x30, 0x30, 0x30, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff,
|
|
|
|
0xc3, 0xc3, 0xc3, 0xc3, 0xe7, 0xfe, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x80, 0xe0, 0x60, 0x30,
|
|
|
|
0x30, 0x30, 0x30, 0x60, 0xe0, 0x80, 0x00, 0x10, 0xf0, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x80,
|
|
|
|
0xe0, 0x70, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff,
|
|
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x7f, 0x7f, 0x60, 0x60, 0x60, 0x60, 0x60, 0x70, 0x30, 0x3c, 0x1f, 0x07, 0x00, 0x00,
|
|
|
|
0x00, 0x7f, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x7f, 0x60, 0x60, 0x60, 0x60, 0x60, 0x71, 0x3f,
|
|
|
|
0x1e, 0x00, 0x00, 0x00, 0x0f, 0x3f, 0x30, 0x60, 0x60, 0x60, 0x60, 0x30, 0x3f, 0x0f, 0x00,
|
|
|
|
0x00, 0x00, 0x03, 0x0f, 0xfe, 0xf0, 0x3e, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x07, 0x03, 0x01, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x30, 0x10, 0x60, 0x10, 0x10, 0x60, 0x10, 0x30, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x60, 0x56, 0x60, 0x50,
|
|
|
|
0x66, 0x50, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x05, 0x0a, 0x05,
|
|
|
|
0x0a, 0x05, 0x0a, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x6f, 0x59,
|
|
|
|
0x6f, 0x5f, 0x69, 0x5f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xe0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
|
|
|
|
0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xc0, 0xe0, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
|
|
|
|
0xd9, 0xb6, 0xb6, 0xb6, 0xcd, 0xff, 0xc7, 0xbb, 0xbb, 0xbb, 0xff, 0xc7, 0xbb, 0xbb, 0xbb,
|
|
|
|
0xc7, 0xff, 0x83, 0xfb, 0xfb, 0xff, 0xff, 0xc7, 0xab, 0xab, 0xab, 0xa7, 0xff, 0xbb, 0xff,
|
|
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xb6, 0xb6, 0xb6, 0xc9, 0xff, 0xff, 0x7f,
|
|
|
|
0x3e, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x1c, 0x3e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x80, 0xf6, 0xf6, 0xf6, 0xf9, 0xff,
|
|
|
|
0x80, 0xff, 0x9f, 0xab, 0xab, 0xab, 0x87, 0xff, 0x73, 0x4f, 0x3f, 0xcf, 0xf3, 0xff, 0xbb,
|
|
|
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xc7, 0xe9, 0xee, 0xe9, 0xc7, 0xbf,
|
|
|
|
0xff, 0xff, 0xff, 0xff, 0xff,
|
|
|
|
];
|
|
|
|
|
|
|
|
pub static overlay_score: [u8; _] = *b"Score: \0";
|
|
|
|
|
|
|
|
pub static enemies: [u8; _] = [
|
|
|
|
8, 8, // width, height,
|
|
|
|
0x7e, 0xd5, 0xab, 0xd5, 0xab, 0xd5, 0xab, 0x7e, // TILE 00 Gray
|
|
|
|
0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7e, // TILE 01 White
|
|
|
|
0x7e, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x7e, // TILE 02 Black
|
|
|
|
];
|
|
|
|
pub static overlay_3hearts: [u8; _] = [
|
|
|
|
// width, height,
|
|
|
|
64, 8, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x00, 0x7a, 0x00, 0x0c, 0x30, 0x40, 0x30, 0x0c,
|
|
|
|
0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x58, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x0c, 0x1e, 0x3f, 0x7e, 0xfc, 0x7e, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7e,
|
|
|
|
0xfc, 0x7e, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7e, 0xfc, 0x7e, 0x3f, 0x1e,
|
|
|
|
0x0c, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
];
|
|
|
|
pub static overlay_2hearts: [u8; _] = [
|
|
|
|
// width, height,
|
|
|
|
64, 8, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x00, 0x7a, 0x00, 0x0c, 0x30, 0x40, 0x30, 0x0c,
|
|
|
|
0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x58, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x0c, 0x1e, 0x3f, 0x7e, 0xfc, 0x7e, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x0c, 0x1e, 0x3f, 0x7e,
|
|
|
|
0xfc, 0x7e, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
];
|
|
|
|
pub static overlay_1heart: [u8; _] = [
|
|
|
|
// width, height,
|
|
|
|
64, 8, 0x00, 0x00, 0x7e, 0x40, 0x40, 0x40, 0x00, 0x7a, 0x00, 0x0c, 0x30, 0x40, 0x30, 0x0c,
|
|
|
|
0x00, 0x38, 0x54, 0x54, 0x58, 0x00, 0x58, 0x54, 0x54, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x0c, 0x1e, 0x3f, 0x7e, 0xfc, 0x7e, 0x3f, 0x1e, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
0x00, 0x00, 0x00, 0x00, 0x00,
|
|
|
|
];
|
2023-09-04 12:56:36 +02:00
|
|
|
static music: [u16; _] = [
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
236,
|
|
|
|
NOTE_REST,
|
|
|
|
13,
|
|
|
|
NOTE_A2,
|
|
|
|
1186,
|
|
|
|
NOTE_REST,
|
|
|
|
63,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
711,
|
|
|
|
NOTE_REST,
|
|
|
|
38,
|
|
|
|
NOTE_F2,
|
|
|
|
236,
|
|
|
|
NOTE_REST,
|
|
|
|
13,
|
|
|
|
NOTE_E2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
576,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_C3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_B2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_G2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1076,
|
|
|
|
NOTE_D3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_D3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_G2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_F2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1576,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_F2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_G2,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_F2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1576,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
711,
|
|
|
|
NOTE_REST,
|
|
|
|
38,
|
|
|
|
NOTE_F2,
|
|
|
|
236,
|
|
|
|
NOTE_REST,
|
|
|
|
13,
|
|
|
|
NOTE_E2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
576,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_C3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_B2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_G2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1076,
|
|
|
|
NOTE_D3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_D3,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C3,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_A2,
|
|
|
|
498,
|
|
|
|
NOTE_REST,
|
|
|
|
1,
|
|
|
|
NOTE_G2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_F2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1576,
|
|
|
|
NOTE_D2,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_A2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_G2,
|
|
|
|
948,
|
|
|
|
NOTE_REST,
|
|
|
|
51,
|
|
|
|
NOTE_F2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_E2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_C2,
|
|
|
|
473,
|
|
|
|
NOTE_REST,
|
|
|
|
26,
|
|
|
|
NOTE_D2,
|
|
|
|
1423,
|
|
|
|
NOTE_REST,
|
|
|
|
1576,
|
|
|
|
NOTE_F2,
|
|
|
|
1423,
|
|
|
|
TONES_REPEAT,
|
|
|
|
];
|
2023-08-21 05:24:03 +02:00
|
|
|
);
|