feat: new src: dungeon

This commit is contained in:
2026-11-08 19:02:24 +01:00
parent be2323bb64
commit 3d86c9cf60
3 changed files with 310 additions and 190 deletions
+19 -3
View File
@@ -49,6 +49,9 @@ sentences.txt:
project/inc_sentences.glsl: sentences.txt
$(MAKE) glsl-glyphs-sentences
project/inc_dungeon.glsl:
$(MAKE) glsl-glyphs-dungeon
# ACTIONS
.PHONY: init
@@ -120,7 +123,7 @@ ty: .venv ## ty check
$(TY) check
.PHONY: git-submodule-update
git-submodule-update: ## prepare git submodules
git-submodule-update: ## git submodule update
git submodule update --init --recursive
.PHONY: glsl-glyphs-sentences
@@ -134,8 +137,21 @@ glsl-glyphs-sentences: sentences.txt ## glsl-glyphs --sentences-only
--sentences-input ../../sentences.txt \
--sentences-output ../../project/inc_sentences.glsl
.PHONY: glsl-glyphs-dungeon
glsl-glyphs-dungeon: ## glsl-glyphs --name dungeon
$(GLSL_GLYPHS) \
--name dungeon \
--functions \
--includes \
--add-empty \
--add-all \
--input sample/pmlomb_8x8.png \
--glyph-names sample/pmlomb_names.txt \
--sets sample/pmlomb_sets.csv \
--output ../../project/inc_dungeon.glsl
.PHONY: forge-run
forge-run: $(BUILD_DIR)/$(TARGET) ## run locally
forge-run: $(BUILD_DIR)/$(TARGET) ## ./build/forge
$(BUILD_DIR)/$(TARGET) $(RUN_ARGS)
.PHONY: rasp-chmod-opt
@@ -143,7 +159,7 @@ rasp-chmod-opt: ## chmod remote project
sudo chmod -R a+rwx $(RASP_ROOTFS)/opt
.PHONY: rasp-remove-motd
rasp-remove-motd: ##
rasp-remove-motd: ## rm remote project motd
sudo rm -rf $(RASP_ROOTFS)/etc/motd
sudo rm -rf $(RASP_ROOTFS)/etc/issue
sudo rm -rf $(RASP_ROOTFS)/etc/update-motd.d/*
+241
View File
@@ -0,0 +1,241 @@
#ifndef INC_DUNGEON
#define INC_DUNGEON
#define DUNGEON_COUNT 193
const int dungeon_glyphs[] = int[772](
0x0000, 0x0000, 0x0000, 0x0000, // 0x00, EMPTY
0xC480, 0x6530, 0x0088, 0x0033, // 0x01, TODO
0xCC80, 0x7730, 0x4C2A, 0x569B, // 0x02
0xC800, 0x7300, 0x04C4, 0x0575, // 0x03
0xAEEA, 0x5775, 0x26EE, 0x4677, // 0x04
0xECD6, 0xBB60, 0x2EE7, 0x4371, // 0x05
0xC400, 0x7100, 0x4CEE, 0x27FF, // 0x06
0xEAEC, 0x7AB9, 0x26FE, 0xABBB, // 0x07
0xEAE2, 0xB232, 0x26FF, 0x233F, // 0x08
0x8400, 0x7200, 0xA698, 0x207A, // 0x09
0x9A80, 0xA724, 0x5E69, 0x2307, // 0x0A
0x4C40, 0x532C, 0x4C2A, 0x2767, // 0x0B
0xEC80, 0xF730, 0x4E62, 0x4FD9, // 0x0C
0x4EA0, 0x5FB0, 0x08AC, 0x02A7, // 0x0D
0x0000, 0x0000, 0x7EC8, 0x7331, // 0x0E
0x0000, 0x0000, 0xFC00, 0xEF70, // 0x0F
0x0000, 0x0000, 0xFE80, 0xF730, // 0x10
0x5E48, 0x7110, 0x07BE, 0x9760, // 0x11
0xEEC8, 0xFF73, 0xCEE2, 0x6EE8, // 0x12
0xACC4, 0x5332, 0x24CD, 0x423B, // 0x13
0xAD12, 0x5B84, 0x56C6, 0xA636, // 0x14
0xACC7, 0x533E, 0x478E, 0x2E17, // 0x15
0xA2E3, 0x547C, 0x4AE2, 0x2574, // 0x16
0xE421, 0x7248, 0x5EBF, 0xA7DF, // 0x17
0xE153, 0x78AC, 0x2E6A, 0x4765, // 0x18
0x0000, 0x0000, 0x8484, 0x3530, // 0x19
0x8400, 0x0000, 0xCE6C, 0x3753, // 0x1A
0x6C80, 0xB700, 0x44EE, 0x44FF, // 0x1B
0xE6C0, 0x7530, 0x3FDF, 0xFEFF, // 0x1C
0xF880, 0xF320, 0x08CE, 0x0037, // 0x1D
0xCA94, 0x7210, 0xCE5D, 0x3482, // 0x1E
0x4000, 0x5500, 0xEC82, 0xE778, // 0x1F
0xCC80, 0x2310, 0x008C, 0x0303, // 0x20
0xC800, 0x3133, 0x48AA, 0x2253, // 0x21
0xAC00, 0x3133, 0x448A, 0x2215, // 0x22
0xDE88, 0x2011, 0x24FE, 0x1135, // 0x23
0x2A62, 0x8BC8, 0x842A, 0x349A, // 0x24
0xFEC8, 0x7000, 0x4880, 0x0013, // 0x25
0xA553, 0x1236, 0xD3EC, 0x3872, // 0x26
0x22C0, 0x8960, 0x0084, 0x0124, // 0x27
0x22C0, 0xEF60, 0x0084, 0x0126, // 0x28
0xEEC0, 0xFF60, 0x008C, 0x0137, // 0x29
0xCC00, 0x7600, 0x0008, 0x0013, // 0x2A
0x1000, 0x1A40, 0x004A, 0x0000, // 0x2B
0xC800, 0x7210, 0x0008, 0x0013, // 0x2C
0xA248, 0x2210, 0xFF15, 0x7754, // 0x2D
0x9E00, 0x8700, 0xF99F, 0xF8AF, // 0x2E
0x0E00, 0x1E00, 0x0088, 0x0133, // 0x2F
0x0800, 0x1200, 0x0088, 0x0133, // 0x30
0x0000, 0x5640, 0x284A, 0x1012, // 0x31
0x4000, 0x5EC0, 0x248C, 0x0312, // 0x32
0x22A4, 0x88B4, 0x0842, 0x1248, // 0x33
0x4C00, 0x4700, 0x0844, 0x1244, // 0x34
0x4287, 0x5258, 0x2348, 0x8A94, // 0x35
0x0000, 0xDA98, 0x1248, 0x007E, // 0x36
0x8000, 0x3760, 0x08EC, 0x3335, // 0x37
0xCC80, 0x1100, 0x0C0C, 0x0101, // 0x38
0x2240, 0x1248, 0x128C, 0x0340, // 0x39
0x4000, 0x7EC8, 0xD258, 0x0113, // 0x3A
0x2C80, 0x9970, 0x8422, 0x34CE, // 0x3B
0x0FFE, 0x0111, 0x68EE, 0xF300, // 0x3C
0xC800, 0x7700, 0x8CAA, 0x3777, // 0x3D
0xEEC0, 0x7730, 0xC2EE, 0x7477, // 0x3E
0xF1F0, 0xF9F0, 0xF3F9, 0xF9F8, // 0x3F
0xCC80, 0x7731, 0x00EC, 0x10F7, // 0x40
0x8000, 0x3100, 0x224C, 0x8847, // 0x41
0x8000, 0x7FF6, 0x2340, 0x0001, // 0x42
0xC800, 0x33C4, 0x23CC, 0x0013, // 0x43
0x0000, 0x5E68, 0xF95B, 0x0000, // 0x44
0x2000, 0xDE48, 0x75FC, 0x0102, // 0x45
0x9C00, 0x9300, 0x8CAE, 0x1357, // 0x46
0x8C00, 0x1300, 0xCED8, 0x37B1, // 0x47
0x080C, 0x1317, 0x08C0, 0x1371, // 0x48
0x0000, 0x0000, 0x0000, 0x0001, // 0x49
0x0000, 0x1100, 0x000C, 0x0116, // 0x4A
0x0000, 0x0010, 0x0002, 0x1008, // 0x4B
0x0000, 0xA620, 0x8C80, 0x13BA, // 0x4C
0x0000, 0x5110, 0x4444, 0x5555, // 0x4D
0x0000, 0x2000, 0x0084, 0x0001, // 0x4E
0x8000, 0x2000, 0x0080, 0x0021, // 0x4F
0x2C00, 0x1ACE, 0x0C22, 0x0122, // 0x50
0x8448, 0x3443, 0x08C0, 0x1371, // 0x51
0xC448, 0x7553, 0x8444, 0x3444, // 0x52
0xCCC8, 0x7553, 0x8444, 0x3444, // 0x53
0xC448, 0x7773, 0x8444, 0x3444, // 0x54
0x2480, 0x8421, 0xC444, 0x7444, // 0x55
0xC800, 0x7310, 0x0888, 0x0333, // 0x56
0xE0E0, 0x7070, 0x00E0, 0x0070, // 0x57
0xFAC0, 0xF730, 0xC211, 0x3488, // 0x58
0x8000, 0x6DE0, 0x16A4, 0x0017, // 0x59
0x0000, 0x1010, 0xCE10, 0x7B51, // 0x5A
0x0800, 0x16E0, 0xCEEC, 0x3773, // 0x5B
0x0000, 0xEC88, 0xCE80, 0x377F, // 0x5C
0x8000, 0x3160, 0x8CC8, 0x3773, // 0x5D
0x4888, 0x4221, 0x4EE4, 0x4EE4, // 0x5E
0x8420, 0x2480, 0x2480, 0x8421, // 0x5F
0x2480, 0x8430, 0x8422, 0x3488, // 0x60
0x111F, 0x888F, 0xF111, 0xF888, // 0x61
0x0117, 0x088E, 0x7110, 0xE880, // 0x62
0x0013, 0x008C, 0x3100, 0xC800, // 0x63
0x0137, 0x08CE, 0x7310, 0xEC80, // 0x64
0x0032, 0x00C4, 0x2300, 0x4C00, // 0x65
0x0764, 0x0E62, 0x4670, 0x26E0, // 0x66
0x113E, 0x88C7, 0xE311, 0x7C88, // 0x67
0x174D, 0x8E2B, 0xD471, 0xB2E8, // 0x68
0x111E, 0x8887, 0xE111, 0x7888, // 0x69
0x0116, 0x0886, 0x6110, 0x6880, // 0x6A
0x101D, 0x880D, 0xB011, 0xB808, // 0x6B
0x101B, 0x808D, 0xB101, 0xD808, // 0x6C
0x112C, 0x8843, 0xC211, 0x3488, // 0x6D
0x4800, 0x2100, 0x0084, 0x0012, // 0x6E
0xB7EC, 0xDE73, 0xCE7B, 0x37ED, // 0x6F
0xC800, 0x3100, 0x008C, 0x0013, // 0x70
0x0105, 0x8085, 0xA101, 0xA080, // 0x71
0x101A, 0x080A, 0x5010, 0x5808, // 0x72
0x22C0, 0x4430, 0x0CE2, 0x0374, // 0x73
0x0020, 0x0040, 0x0020, 0x0401, // 0x74
0xDCC0, 0xFF10, 0x08DD, 0x0133, // 0x75
0xDCC8, 0x3300, 0x08DD, 0x0133, // 0x76
0xA888, 0x7300, 0x80CC, 0x7077, // 0x77
0xDC44, 0xFBB3, 0xC0EF, 0x3077, // 0x78
0x0000, 0x0000, 0x26E0, 0x0000, // 0x79
0xEC00, 0x7700, 0x26EE, 0x0037, // 0x7A
0xEEEC, 0xFFF7, 0x4CEE, 0x007F, // 0x7B
0xAEEC, 0xFFF7, 0x4CEE, 0x007F, // 0x7C
0xAEEC, 0xEFF7, 0x4CEE, 0x007F, // 0x7D
0xAEEC, 0xAFF7, 0x4CEE, 0x007F, // 0x7E
0xEEEC, 0xFEE7, 0x4CEE, 0x007E, // 0x7F
0xEEEC, 0xFDC7, 0x4CEE, 0x007E, // 0x80
0xEEEC, 0x9EE7, 0x4CEE, 0x007F, // 0x81
0x622C, 0xC897, 0x4CEE, 0x007E, // 0x82
0x22AC, 0x88A7, 0x4CE2, 0x0078, // 0x83
0xE6EC, 0xECE7, 0x4CEE, 0x007E, // 0x84
0x152C, 0x8A43, 0xC295, 0x349A, // 0x85
0x152C, 0x8A43, 0xC29D, 0x349B, // 0x86
0x152C, 0x8A43, 0xC21D, 0x348B, // 0x87
0x152C, 0x8A43, 0xC259, 0x34A9, // 0x88
0x152C, 0x8A43, 0xC21D, 0x3488, // 0x89
0x152C, 0x8A43, 0xC299, 0x3499, // 0x8A
0x152C, 0x8A43, 0xC2D9, 0x34B9, // 0x8B
0x152C, 0x8A43, 0xC259, 0x349A, // 0x8C
0x352C, 0xCA43, 0xC291, 0x3498, // 0x8D
0x512C, 0xA843, 0xC211, 0x3488, // 0x8E
0x552C, 0xAA43, 0xC655, 0x36AA, // 0x8F
0x152C, 0x8A43, 0xC291, 0x34BA, // 0x90
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, // 0x91
0x585A, 0x1A4A, 0x0040, 0x0204, // 0x92
0x5A5A, 0x5A5A, 0x5A5A, 0x5A5A, // 0x93
0x50FF, 0x50FF, 0x5A5A, 0x5A5A, // 0x94
0x5A0F, 0x5A0F, 0x5A5A, 0x5A5A, // 0x95
0x10FF, 0xE0FF, 0x7591, 0x889A, // 0x96
0x70FF, 0xE0FF, 0x7599, 0xE99A, // 0x97
0x10FF, 0x80FF, 0x11D7, 0x8CB8, // 0x98
0x10FF, 0x80FF, 0xE311, 0x7888, // 0x99
0x10FF, 0x00FF, 0x000E, 0x000F, // 0x9A
0x00FF, 0x00FF, 0x000F, 0x000F, // 0x9B
0x0000, 0x0000, 0x000F, 0x000F, // 0x9C
0xFEFF, 0x7EFB, 0xFEFF, 0x7EFF, // 0x9D
0x0A5B, 0x52DB, 0x2051, 0x0272, // 0x9E
0x7EDB, 0x7EDB, 0x7EDB, 0x7EDB, // 0x9F
0x7E0F, 0x7E0F, 0x7EDB, 0x7EDB, // 0xA0
0x7E05, 0x7E05, 0x7EDB, 0x7EDB, // 0xA1
0x3E0F, 0x4E0F, 0x729B, 0x7CD9, // 0xA2
0x5D1F, 0xBA8F, 0xF1D9, 0xF8A9, // 0xA3
0x5C0F, 0x2B0F, 0x70D5, 0x78BA, // 0xA4
0x135F, 0x000B, 0x1011, 0x0000, // 0xA5
0xF8BB, 0x0C9F, 0x7513, 0x0001, // 0xA6
0x153E, 0x0078, 0x1222, 0x0000, // 0xA7
0x0117, 0x000B, 0x1011, 0x0000, // 0xA8
0x0000, 0x0000, 0x0000, 0x0000, // 0xA9
0xFFCD, 0x0000, 0x0000, 0x0000, // 0xAA
0x0000, 0xFF3B, 0x0000, 0x0000, // 0xAB
0x0000, 0x0000, 0xDCFF, 0x0000, // 0xAC
0x0000, 0x0000, 0x0000, 0xB3FF, // 0xAD
0xFF0F, 0xFF0F, 0x0000, 0x0000, // 0xAE
0xDDDD, 0x0000, 0xDDDD, 0x0000, // 0xAF
0x7BCD, 0x1000, 0x0008, 0xB3DE, // 0xB0
0x8000, 0xED3B, 0xDCB7, 0x0001, // 0xB1
0x0000, 0xBBBB, 0x0000, 0xBBBB, // 0xB2
0x0000, 0x0000, 0xF0FF, 0xF0FF, // 0xB3
0xDD1F, 0xFF0F, 0xDDDD, 0x0000, // 0xB4
0xFF0F, 0xBB8F, 0x0000, 0xBBBB, // 0xB5
0xDDDD, 0x0000, 0xF1DD, 0xF0FF, // 0xB6
0x0000, 0xBBBB, 0xF0FF, 0xF8BB, // 0xB7
0x0000, 0x1248, 0x1248, 0x0000, // 0xB8
0x8421, 0x0000, 0x0000, 0x8421, // 0xB9
0x4801, 0x5A5A, 0x5A5A, 0x8012, // 0xBA
0x111E, 0x8887, 0xE111, 0x7888, // 0xBB
0xDD1E, 0xBB87, 0xE1DD, 0x78BB, // 0xBC
0xD91E, 0xB987, 0xE111, 0x7888, // 0xBD
0xD91E, 0xB987, 0xE19D, 0x789B, // 0xBE
0xD51E, 0x8887, 0xE1DD, 0x78B9, // 0xBF
0x151E, 0xBA87, 0xE1D9, 0x78BA // 0xC0
);
#define DUNGEON_SETS 9
const int dungeon_sets[] = int[18](
0x01, 192, // ALL
0x01, 36, // ENTITIES
0x27, 3, // HEARTS
0x25, 36, // OBJECTS
0x61, 20, // SELECT
0x7B, 10, // CHAT
0x85, 12, // EMOTION
0x91, 42, // TILES
0xBB, 6 // SQUARES
);
bool dungeon(vec2 pos, int code)
{
if (pos.x < .0 || pos.y < .0 || pos.x >= 1. || pos.y >= 1. || code < 0 || code >= DUNGEON_COUNT) {
return false;
}
ivec2 pos2 = ivec2(pos.x * 8., (1 - pos.y) * 8.);
ivec2 subpos = pos2 % 4;
int v = int(pow(2., subpos.y * 4. + subpos.x));
int d = int(pos2.y * .25) * 2 + int(pos2.x * .25);
return (dungeon_glyphs[code * 4 + d] & v) > 0;
}
float dungeon_at(vec2 uv, vec2 pos, int code)
{
return dungeon(uv - pos, code) ? 1. : 0.;
}
int dungeon_set_glyph(int set, float v)
{
if (v < .0 || v >= 1. || set < 0. || set >= DUNGEON_SETS) {
return 0;
}
return dungeon_sets[set * 2] + int(v * dungeon_sets[set * 2 + 1]);
}
#endif /* INC_DUNGEON */
+50 -187
View File
@@ -158,7 +158,7 @@ vec4 src_5(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2
return vec4(f);
}
// SRC 6 : circuit
// SRC 6 : cp437
vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
@@ -169,138 +169,6 @@ vec4 src_6(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2
// controls
float z = 10. + magic(f1, b1, 123.) * 20.;
float h = magic(f2, b2, seed + 20.) * .8 + .1;
float v = magic_reverse(f3, b3, seed + 30.) * .8 + .1;
// logic
uv1 *= z;
uv1 += iBeats;
float s0 = rand(floor(mod(uv1, 1000.))) * 1000.;
float s1 = rand(floor(mod(uv1 + vec2(0., 1.), 1000.))) * 1000.;
float s2 = rand(floor(mod(uv1 - vec2(1., 0.), 1000.))) * 1000.;
bool up = rand(s1 + 1.) < h;
bool left = rand(s2 + 2.) < v;
bool down = rand(s0 + 1.) < h;
bool right = rand(s0 + 2.) < v;
bool up_down = up && down;
bool left_right = left && right;
uv1 = mod(uv1, 1.) - .5;
const float t = .1;
float f = 0.;
int c = 0;
if (up) {
f += stripe(uv1.x, -t * .5, t * .5) * step(-t * .5, uv1.y);
c += 1;
}
if (down) {
f += stripe(uv1.x, -t * .5, t * .5) * istep(t * .5, uv1.y);
c += 1;
}
if (left) {
f += stripe(uv1.y, -t * .5, t * .5) * istep(t * .5, uv1.x);
c += 1;
}
if (right) {
f += stripe(uv1.y, -t * .5, t * .5) * step(-t * .5, uv1.x);
c += 1;
}
if (c == 1) {
f += istep(t, length(uv1));
}
f = min(f, 1.);
if ((up_down ^^ left_right) && c == 2) {
if (up_down) {
uv1.xy = uv1.yx;
}
if (rand(s0 + 3.) < .5) {
uv1.x = -uv1.x;
}
float k = rand(s0 + 4.) * 60;
f -= rect(uv1, vec2(0.), vec2(t * 3., t));
f = max(0., f);
if (k < 10.) { // resistor
f += line(uv1, vec2(-t * 3.25, -t * .5), vec2(-t * 2.5, t * 2.), t * .75);
f += line(uv1, vec2(-t * 2.5, t * 2.), vec2(-t * 1.5, -t * 2.), t * .75);
f += line(uv1, vec2(-t * 1.5, -t * 2.), vec2(-t * .5, t * 2.), t * .75);
f += line(uv1, vec2(-t * .5, t * 2.), vec2(t * .5, -t * 2.), t * .75);
f += line(uv1, vec2(t * .5, -t * 2.), vec2(t * 1.5, t * 2.), t * .75);
f += line(uv1, vec2(t * 1.5, t * 2.), vec2(t * 2.5, -t * 2.), t * .75);
f += line(uv1, vec2(t * 2.5, -t * 2.), vec2(t * 3.25, t * .5), t * .75);
} else if (k < 20.) { // capacitor
f += rect(uv1, vec2(-t * 2., 0.), vec2(t, t * .5));
f += rect(uv1, vec2(t * 2., 0.), vec2(t, t * .5));
f += rect(uv1, vec2(t, 0.), vec2(t * .5, t * 3.5));
f += rect(uv1, vec2(-t, 0.), vec2(t * .5, t * 3.5));
} else if (k < 30.) { // diode
f += line(uv1, vec2(-t * 2., t * 2.5), vec2(t * 2., 0.), t);
f += line(uv1, vec2(-t * 2., -t * 2.5), vec2(t * 2., 0.), t);
f += rect(uv1, vec2(t * 2.5, 0.), vec2(t * .5, t * 3.));
f += rect(uv1, vec2(-t * 2.5, 0.), vec2(t * .5, t * 3.));
} else if (k < 40.) { // lamp
f += istep(t * 3.5, length(uv1));
f -= istep(t * 2.5, length(uv1));
f += line(uv1, vec2(-t * 2.), vec2(t * 2.), t);
f += line(uv1, vec2(-t * 2., t * 2.), vec2(t * 2., -t * 2.), t);
} else if (k < 50.) { // inductor
f += istep(t * 2., length(uv1 - vec2(t * 2.5, 0.)));
f += istep(t * 2., length(uv1 - vec2(0., 0.)));
f += istep(t * 2., length(uv1 - vec2(-t * 2.5, 0.)));
f -= 2. * istep(t, length(uv1 - vec2(t * 2.5, 0.)));
f -= 2. * istep(t, length(uv1 - vec2(0., 0.)));
f -= 2. * istep(t, length(uv1 - vec2(-t * 2.5, 0.)));
f *= step(-t * .5, uv1.y);
} else if (k < 60.) { // switch
f += istep(t, length(uv1 - vec2(t * 2.5, 0.)));
f += istep(t, length(uv1 + vec2(t * 2.5, 0.)));
f += line(uv1, vec2(t * 2., 0.), vec2(-t * 2.5, t * (k < 55. ? 3. : 1.)), t);
}
} else if (c == 3) {
if (left_right) {
uv1.xy = uv1.yx;
if (up) {
uv1.x = -uv1.x;
}
} else if (right) {
uv1.x = -uv1.x;
}
float k = rand(s0 + 4.) * 20.;
if (k < 10.) {
f -= rect(uv1, vec2(0.), vec2(t * 3.));
f = max(0., f);
f += rect(uv1, vec2(-t * 3., 0.), vec2(t * .5, t * 3.));
f += line(uv1, vec2(t * .25, t * 3.25), vec2(-t * 3., t), t);
f += line(uv1, vec2(t * .25, -t * 3.25), vec2(-t * 3., -t), t);
}
}
return vec4(f);
}
// SRC 7 : cp437
vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
vec2 uv0 = vUV.st;
float ratio = iResolution.x / iResolution.y;
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
// controls
float zoom = magic(f1, b1, seed + 10.);
vec2 charset = magic_f(f2, b2, seed + 20.);
vec3 charset_ctrl = magic_b(b2, seed + 20.);
@@ -324,9 +192,9 @@ vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2
return vec4(f);
}
// SRC 8 : sentences
// SRC 7 : sentences
vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
vec4 src_7(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
@@ -354,8 +222,8 @@ vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2
return vec4(f);
}
// SRC 9 : sentences repeat
vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
// SRC 8 : sentences repeat
vec4 src_8(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
@@ -389,8 +257,49 @@ vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2
return vec4(f);
}
// SRC 10 : isometric grid
// SRC 9 : dungeon
vec4 src_9(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
vec2 uv0 = vUV.st;
float ratio = iResolution.x / iResolution.y;
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
// controls
float zoom = magic(f1, b1, seed + 10.);
vec2 charset = magic_f(f2, b2, seed + 20.);
vec3 charset_ctrl = magic_b(b2, seed + 20.);
float char_delta = magic(f3, b3, seed + 30.);
// logic
vec2 uv2 = uv1;
uv2 *= zoom * 20. + 3.;
uv2 += iBeats;
uv2 = mod(uv2, 100.) + 100.;
int charset_index = int(charset.x * (DUNGEON_SETS - 1));
int start_char = charset_ctrl.x > 0. ? dungeon_sets[charset_index * 2] : 0x01;
int char_span = int((charset_ctrl.x > 0. ? dungeon_sets[charset_index * 2 + 1] : DUNGEON_COUNT - 1));
char_span = int(char_span * max(1. - charset.y, 1. / (char_span * .75)));
ivec2 uv2i = ivec2(uv2);
int code = ((charset_ctrl.y < 1. || (uv2i.x % 2 ^ uv2i.y % 2) > 0) ? 1 : 0) * (start_char + int((rand(uv2i) + char_delta) * char_span) % char_span);
uv2 = mod(uv2, 1.);
float f = cp437(uv2, code) ? 1. : 0.;
return vec4(f);
}
// SRC 10 :
vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// TODO
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
}
// SRC 11 : isometric grid
vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
@@ -441,13 +350,6 @@ vec4 src_10(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec
return vec4(f);
}
// SRC 11 : video in 2 + thru
vec4 src_11(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// TODO find another source
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
}
// SRC 12 : Scales
vec4 src_12(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
@@ -523,50 +425,11 @@ vec4 src_13(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec
return vec4(f);
}
// SRC 14 : Cursor
// SRC 14 :
vec4 src_14(vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)
{
// start
vec2 uv0 = vUV.st;
float ratio = iResolution.x / iResolution.y;
vec2 uv1 = (uv0 - .5) * vec2(ratio, 1.);
// controls
float size = magic(f1, b1, seed + 10.) * 2. + .1;
float dx = (fmagic(f2, b2, seed + 20.) * (1. - size * .06) - .5) * ratio;
bool flip_x = magic_trigger(b2, seed + 20.);
float dy = fmagic(f3, b3, seed + 30.) * (1. - size * .17) - .5;
bool flip_y = magic_trigger(b3, seed + 30.);
// logic
vec2 uv2 = uv1;
if (flip_x) {
uv2.x = -uv2.x;
}
if (flip_y) {
uv2.y = -uv2.y;
}
uv2 -= vec2(dx, -dy);
uv2 /= size;
uv2 *= -rot(-PI * 0.5);
float f = istep(0., (uv2.x * 2. + uv2.y) * (uv2.x * 2. - uv2.y)) * istep(0., uv2.y);
uv2.y += .1;
f -= istep(0., (uv2.x + uv2.y * 3.) * (uv2.x - uv2.y * 3.)) * istep(0., uv2.y);
f += rect(uv2, vec2(0., -.04), vec2(.01, .04));
return vec4(f);
// TODO
return src_1(vUV, seed, b1, f1, b2, f2, b3, f3);
}
vec4 src_stage(int src, vec2 vUV, int seed, vec3 b1, vec2 f1, vec3 b2, vec2 f2, vec3 b3, vec2 f3)