Public Access
Add four animated KonoSuba ESPHome pages
Megumin's daily explosion, the Adventurers' Guild quest board (agenda, weather, solar), Megumin's adventurer card and a party battle against a giant toad with a live-data battle log. Original 1-bit pixel art lives in tools/konosuba_sprites.py, which generates konosuba_sprites.h and can render a preview PNG. Home data and drawing helpers shared by the themed pages move to el512_pages.h; the display gains dither_mask() for a dissolve-in intro. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
50ee17b3f6
commit
e9b91c5628
11 files changed
+1655
-61
No files matched your search
@@ -0,0 +1,331 @@
|
||||
// Pixel art for the KonoSuba pages, generated by tools/konosuba_sprites.py;
|
||||
// edit the art there. Original 1-bit fan art, '#' = lit pixel.
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace esphome::el512::konosuba {
|
||||
|
||||
struct Sprite {
|
||||
uint8_t w, h;
|
||||
const char *const *rows;
|
||||
};
|
||||
|
||||
static const char *const MEGUMIN_ROWS[] = {
|
||||
"...............####.........",
|
||||
"..............######........",
|
||||
".............###...##.......",
|
||||
"............####.....#......",
|
||||
"...........#####............",
|
||||
"..........######............",
|
||||
"..........#######...........",
|
||||
".........########...........",
|
||||
".........#########..........",
|
||||
"........##########..........",
|
||||
"........#.........#.........",
|
||||
"........###########.........",
|
||||
"##########################..",
|
||||
".########################...",
|
||||
".....###############........",
|
||||
".....##.#.##..#.#.##........",
|
||||
".....#.............#........",
|
||||
".....#..##....####.#........",
|
||||
".....#..##....####.#........",
|
||||
".....#.........#...#........",
|
||||
".....##.............#.......",
|
||||
"......#.....##.....#........",
|
||||
".....###..........###.......",
|
||||
"....####.##....##.####......",
|
||||
"...######.######.######.....",
|
||||
"..#######..####..#######....",
|
||||
"..######...####...#######...",
|
||||
".#######...#..#...#######...",
|
||||
".######....#..#....######...",
|
||||
".######...#....#...######...",
|
||||
"#######...#....#...#######..",
|
||||
"######...#......#...######..",
|
||||
"######..##########..######..",
|
||||
"#####...#........#...#####..",
|
||||
"#####..#..........#..#####..",
|
||||
"####...############...####..",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
".......###....###...........",
|
||||
".......####...####..........",
|
||||
};
|
||||
static constexpr Sprite MEGUMIN{28, 42, MEGUMIN_ROWS};
|
||||
|
||||
static const char *const STAFF_ROWS[] = {
|
||||
"..#####..",
|
||||
".#.....#.",
|
||||
"#..###..#",
|
||||
"#.#####.#",
|
||||
"#.#####.#",
|
||||
"#..###..#",
|
||||
".#.....#.",
|
||||
"..#...#..",
|
||||
"...#.#...",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"...##....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....##...",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"...##....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....##...",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
"....#....",
|
||||
};
|
||||
static constexpr Sprite STAFF{9, 42, STAFF_ROWS};
|
||||
|
||||
static const char *const MEGUMIN_DOWN_ROWS[] = {
|
||||
"....###......................................................",
|
||||
"...#####.....................................................",
|
||||
"..######.....................................................",
|
||||
"..#######....................................................",
|
||||
".########.##.................................................",
|
||||
".#########..##.........#######...............................",
|
||||
"###########...##.....###########.............................",
|
||||
"#.........#.....#...##.#.#.#.#.##..#####################.....",
|
||||
"###########......#..#.#.#.#.#.#.#.########################...",
|
||||
"...................##############.###########.##########.###.",
|
||||
"....................############..#####...........######...##",
|
||||
"......................########....####.............####......",
|
||||
};
|
||||
static constexpr Sprite MEGUMIN_DOWN{61, 12, MEGUMIN_DOWN_ROWS};
|
||||
|
||||
static const char *const KAZUMA_ROWS[] = {
|
||||
"....######......",
|
||||
"...########.....",
|
||||
"..##########....",
|
||||
"..#.#.##.#.#....",
|
||||
"..#........#....",
|
||||
"..#..#..#..#....",
|
||||
"..#........#....",
|
||||
"...#..##..#.....",
|
||||
"....######......",
|
||||
"..##########....",
|
||||
".###.####.###...",
|
||||
".##..#..#..##...",
|
||||
".##..#..#..##.#.",
|
||||
".##..####..##.#.",
|
||||
".##..#..#..##.#.",
|
||||
"..#..#..#..#.###",
|
||||
"....#....#....#.",
|
||||
"....#....#......",
|
||||
"...##....##.....",
|
||||
};
|
||||
static constexpr Sprite KAZUMA{16, 19, KAZUMA_ROWS};
|
||||
|
||||
static const char *const AQUA_ROWS[] = {
|
||||
".....####.......",
|
||||
"....#....#......",
|
||||
".....####.......",
|
||||
"....######......",
|
||||
"...########.....",
|
||||
"..##########....",
|
||||
"..#........#....",
|
||||
"..#..#..#..#....",
|
||||
"..#........#....",
|
||||
"..##..##..##....",
|
||||
"..###....###....",
|
||||
".####.##.####...",
|
||||
".##..####..##...",
|
||||
".##.#....#.##...",
|
||||
".#.#......#.#...",
|
||||
".#.#......#.#...",
|
||||
"...########.....",
|
||||
"....#....#......",
|
||||
"....#....#......",
|
||||
"...##....##.....",
|
||||
};
|
||||
static constexpr Sprite AQUA{16, 20, AQUA_ROWS};
|
||||
|
||||
static const char *const MEGUMIN_S_ROWS[] = {
|
||||
".......##.......",
|
||||
"......####......",
|
||||
".....######.....",
|
||||
"....########....",
|
||||
"....#......#....",
|
||||
"################",
|
||||
"...##########...",
|
||||
"...#........#...",
|
||||
"...#.#...##.#...",
|
||||
"...#........#...",
|
||||
"....#..##..#....",
|
||||
".....######.....",
|
||||
"...##########...",
|
||||
"..############..",
|
||||
"..###.####.###..",
|
||||
"..##..#..#..##..",
|
||||
"..##..####..##..",
|
||||
"..############..",
|
||||
".....#....#.....",
|
||||
".....#....#.....",
|
||||
"....##....##....",
|
||||
};
|
||||
static constexpr Sprite MEGUMIN_S{16, 21, MEGUMIN_S_ROWS};
|
||||
|
||||
static const char *const DARKNESS_ROWS[] = {
|
||||
"....######......",
|
||||
"...########.###.",
|
||||
"..##########.##.",
|
||||
"..#.##..##.#..#.",
|
||||
"..#........#....",
|
||||
"..#..#..#..#....",
|
||||
"..#........#....",
|
||||
"...#..##..#.....",
|
||||
"....######......",
|
||||
"############....",
|
||||
"##.########.##..",
|
||||
"#..#.#..#.#..#..",
|
||||
"...#.####.#.....",
|
||||
"...#.#..#.#.....",
|
||||
"...#.####.#.....",
|
||||
"...########.....",
|
||||
"....#....#......",
|
||||
"....##...##.....",
|
||||
"...###...###....",
|
||||
};
|
||||
static constexpr Sprite DARKNESS{16, 19, DARKNESS_ROWS};
|
||||
|
||||
static const char *const TOAD_ROWS[] = {
|
||||
"......####............####......",
|
||||
".....#....#..........#....#.....",
|
||||
"....#..##..#........#..##..#....",
|
||||
"....#..##..##########..##..#....",
|
||||
"...##.....#..........#.....##...",
|
||||
"..#..........................#..",
|
||||
".#....#..........#.......#....#.",
|
||||
"#..............................#",
|
||||
"#.....##....#.........##...#...#",
|
||||
"#..............................#",
|
||||
"#..####################........#",
|
||||
"#......................#.......#",
|
||||
".#........#.......#...........#.",
|
||||
"..#..##..................##..#..",
|
||||
"...##..#................#..##...",
|
||||
"..#.....#..............#.....#..",
|
||||
".#..###..#............#..###..#.",
|
||||
"##########............##########",
|
||||
};
|
||||
static constexpr Sprite TOAD{32, 18, TOAD_ROWS};
|
||||
|
||||
static const char *const TOAD_TONGUE_ROWS[] = {
|
||||
"......####............####......",
|
||||
".....#....#..........#....#.....",
|
||||
"....#..##..#........#..##..#....",
|
||||
"....#..##..##########..##..#....",
|
||||
"...##.....#..........#.....##...",
|
||||
"..#..........................#..",
|
||||
".#....#..........#.......#....#.",
|
||||
"#..............................#",
|
||||
"#.....##....#.........##...#...#",
|
||||
"#..............................#",
|
||||
"#..####################........#",
|
||||
"#...#..................#.......#",
|
||||
".#...#....#.......#...........#.",
|
||||
"..#...#..##..............##..#..",
|
||||
"...##..#.##.............#..##...",
|
||||
"..#.....####...........#.....#..",
|
||||
".#..###..##...........#..###..#.",
|
||||
"##########............##########",
|
||||
};
|
||||
static constexpr Sprite TOAD_TONGUE{32, 18, TOAD_TONGUE_ROWS};
|
||||
|
||||
static const char *const CABBAGE_A_ROWS[] = {
|
||||
"#..............#",
|
||||
"##...######...##",
|
||||
".##.#..#...#.##.",
|
||||
"..##.#.#..#.##..",
|
||||
"...#..###...#...",
|
||||
"...#.#.#.#..#...",
|
||||
"....#..#...#....",
|
||||
".....######.....",
|
||||
};
|
||||
static constexpr Sprite CABBAGE_A{16, 8, CABBAGE_A_ROWS};
|
||||
|
||||
static const char *const CABBAGE_B_ROWS[] = {
|
||||
"................",
|
||||
".....######.....",
|
||||
"....#..#...#....",
|
||||
"...#.#.#..#.#...",
|
||||
"####..###...####",
|
||||
"##.#.#.#.#..#.##",
|
||||
"#...#..#...#...#",
|
||||
".....######.....",
|
||||
};
|
||||
static constexpr Sprite CABBAGE_B{16, 8, CABBAGE_B_ROWS};
|
||||
|
||||
static const char *const MEGUMIN_BLINK_ROWS[] = {
|
||||
"...............####.........",
|
||||
"..............######........",
|
||||
".............###...##.......",
|
||||
"............####.....#......",
|
||||
"...........#####............",
|
||||
"..........######............",
|
||||
"..........#######...........",
|
||||
".........########...........",
|
||||
".........#########..........",
|
||||
"........##########..........",
|
||||
"........#.........#.........",
|
||||
"........###########.........",
|
||||
"##########################..",
|
||||
".########################...",
|
||||
".....###############........",
|
||||
".....##.#.##..#.#.##........",
|
||||
".....#.............#........",
|
||||
".....#........####.#........",
|
||||
".....#..##....####.#........",
|
||||
".....#.........#...#........",
|
||||
".....##.............#.......",
|
||||
"......#.....##.....#........",
|
||||
".....###..........###.......",
|
||||
"....####.##....##.####......",
|
||||
"...######.######.######.....",
|
||||
"..#######..####..#######....",
|
||||
"..######...####...#######...",
|
||||
".#######...#..#...#######...",
|
||||
".######....#..#....######...",
|
||||
".######...#....#...######...",
|
||||
"#######...#....#...#######..",
|
||||
"######...#......#...######..",
|
||||
"######..##########..######..",
|
||||
"#####...#........#...#####..",
|
||||
"#####..#..........#..#####..",
|
||||
"####...############...####..",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
"........#......#............",
|
||||
".......###....###...........",
|
||||
".......####...####..........",
|
||||
};
|
||||
static constexpr Sprite MEGUMIN_BLINK{28, 42, MEGUMIN_BLINK_ROWS};
|
||||
|
||||
} // namespace esphome::el512::konosuba
|
||||
Reference in new issue
Block a user