precision highp float; uniform vec2 resolution; uniform vec2 mouse; uniform float frame; uniform float time; uniform sampler2D backbuffer0; uniform sampler2D backbuffer1; layout(location = 0) out vec4 outColor0; layout(location = 1) out vec4 outColor1; const int HEXCOUNT = 298; const int TEXTCOUNT = 69; const int MAXTEXTLEN = 73; const uint[] HEX = uint[HEXCOUNT](0x00000000u,//Null 0x25575520u,//0 0x23222270u,//1 0x25422170u,//2 0x25424520u,//3 0x46557440u,//4 0x71354520u,//5 0x25135520u,//6 0x75422220u,//7 0x25525520u,//8 0x25564520u,//9 0x00200200u,//: 0x00421000u,/// 0x00000020u,//. 0x00000210u,//, 0x42222240u,//( 0x12222210u,//) 0x00200210u,//; 0x25124520u,//S 0x71131170u,//E 0x72222270u,//I 0x25555520u,//O 0x35555550u,//N 0x35535550u,//R 0x25557550u,//A 0x35555530u,//D 0xC20802C0u,//3(l) 0x34434430u,//3(r) 0x442D8430u,//分(l) 0x11272230u,//分(r) 0x0F844480u,//で(l) 0x07050030u,//で(r) 0x4F4221D0u,//か(l) 0x02551100u,//か(r) 0xE8C2D2C0u,//る(l) 0x30344530u,//る(r) 0xE84E5520u,//み(l) 0x00272210u,//み(r) 0x884C2210u,//ん(l) 0x00005520u,//ん(r) 0x4F429580u,//な(l) 0x06223630u,//な(r) 0x001E0000u,//ー(l) 0x00070000u,//ー(r) 0x8D315940u,//ゆ(l) 0x03555300u,//ゆ(r) 0x00C300C0u,//っ(l) 0x00122100u,//っ(r) 0x08616800u,//く(l) 0x21000120u,//く(r) 0xA62200C0u,//り(l) 0x12222100u,//り(r) 0x00257160u,//e 0x00355550u,//n 0x00346560u,//a 0x00531110u,//r 0x44655560u,//d 0x4F422910u,//だ(l) 0x50701070u,//だ(r) 0x22F222C0u,//ぜ(l) 0x52723030u,//ぜ(r) 0x84B0E0C0u,//今(l) 0x01703100u,//今(r) 0xE22E22E0u,//日(l) 0x74474470u,//日(r) 0x1D11D3D0u,//は(l) 0x17111350u,//は(r) 0x88888800u,//「(l) 0x70000000u,//「(r) 0x25111520u,//C 0x32222220u,//l 0x00612430u,//s 0x20222220u,//i 0x00611160u,//c 0x25155560u,//G 0x11111170u,//L 0x00355310u,//p 0x11355550u,//h 0x088888F0u,//」(l) 0x0E995380u,//の(l) 0x03444430u,//の(r) 0x42B22220u,//作(l) 0x17171710u,//作(r) 0x8F4C4210u,//方(l) 0x07032230u,//方(r) 0x19119590u,//に(l) 0x03000070u,//に(r) 0x0C3000C0u,//つ(l) 0x03444210u,//つ(r) 0x01111520u,//い(l) 0x02444000u,//い(r) 0x07000030u,//て(r) 0x65EEEAD0u,//解(l) 0x76572720u,//解(r) 0x9F4D8B70u,//説(l) 0x27472260u,//説(r) 0x222222C0u,//し(l) 0x00004210u,//し(r) 0x47C46540u,//ね(l) 0x03446560u,//ね(r) 0x8F8FA9E0u,//ま(l) 0x07070160u,//ま(r) 0x0F42C0C0u,//ず(l) 0x57111100u,//ず(r) 0x00000120u,//、(l) 0x8F4E94C0u,//を(l) 0x03061170u,//を(r) 0x8FD8F870u,//実(l) 0x07507070u,//実(r) 0xA1E32220u,//行(l) 0x30722230u,//行(r) 0x17111100u,//す(r) 0xF6EBA700u,//環(l) 0x75723510u,//環(r) 0x2EBEAB40u,//境(l) 0x17273360u,//境(r) 0x4FE5FAF0u,//整(l) 0x65257370u,//整(r) 0xE0F8C210u,//え(l) 0x30301170u,//え(r) 0x0F000860u,//ブ(l) 0x57442100u,//ブ(r) 0xE0F000C0u,//ラ(l) 0x30744300u,//ラ(r) 0x8F1100C0u,//ウ(l) 0x07442100u,//ウ(r) 0x2F2200C0u,//ザ(l) 0x57222100u,//ザ(r) 0xF0888860u,//ア(l) 0x74210000u,//ア(r) 0x444C4440u,//ド(l) 0x50016000u,//ド(r) 0x22222A60u,//レ(l) 0x00042100u,//レ(r) 0x0E000C30u,//ス(l) 0x03221240u,//ス(r) 0x44422210u,//バ(l) 0x50224440u,//バ(r) 0x02722260u,//t 0x00557750u,//w 0x00656430u,//g 0x444C21E0u,//と(l) 0x00300070u,//と(r) 0xE8844210u,//入(l) 0x00011240u,//入(r) 0x8F844210u,//力(l) 0x07444460u,//力(r) 0x03222260u,//れ(r) 0x0E0021E0u,//こ(l) 0xE0E100C0u,//う(l) 0x30344300u,//う(r) 0x4F444210u,//カ(l) 0x07444430u,//カ(r) 0x005AA0C0u,//ッ(l) 0x00222100u,//ッ(r) 0x0F0000F0u,//コ(l) 0x07444470u,//コ(r) 0xF8DDD1F0u,//画(l) 0x70555470u,//画(r) 0xF8F5D5F0u,//面(l) 0x70755570u,//面(r) 0x50551100u,//が(r) 0x8AAE99F0u,//出(l) 0x02234470u,//出(r) 0x0F0E12C0u,//さ(l) 0x17123010u,//さ(r) 0xE84F8480u,//そ(l) 0x30070030u,//そ(r) 0x68340860u,//シ(l) 0x00E888E0u,//ェ(l) 0x00300030u,//ェ(r) 0x4C2D0860u,//ダ(l) 0x57452100u,//ダ(r) 0x8E8F8FE0u,//書(l) 0x03630730u,//書(r) 0x00555570u,//u 0x00555220u,//v 0x8FD8AAD0u,//定(l) 0x07503070u,//定(r) 0x2F8F4F40u,//義(l) 0x27075350u,//義(r) 0x53000070u,//ご(r) 0x4F5F55F0u,//曲(l) 0x17575570u,//曲(r) 0x1D111180u,//げ(l) 0x00701070u,//た(r) 0x1FAFAF50u,//無(l) 0x07272750u,//無(r) 0xFDBDDB90u,//限(l) 0x74747250u,//限(r) 0x2D2D6B60u,//続(l) 0x17174260u,//続(r) 0x00016000u,//ト(r) 0x34000860u,//ン(l) 0x8F00CB80u,//ネ(l) 0x03212400u,//ネ(r) 0x04444210u,//ル(l) 0x11115530u,//ル(r) 0x000C3000u,//イ(l) 0x42111110u,//イ(r) 0xE0F88860u,//デ(l) 0x50700000u,//デ(r) 0xEAEAE3D0u,//思(l) 0x32323550u,//思(r) 0x1C181D10u,//浮(l) 0x72032710u,//浮(r) 0x57111350u,//ば(r) 0xC2BAA220u,//何(l) 0x74767460u,//何(r) 0xE02D30C0u,//ら(l) 0x01034210u,//ら(r) 0x2DAD6BA0u,//締(l) 0x17275320u,//締(r) 0x2A65D520u,//め(l) 0x13554430u,//め(r) 0xA2722680u,//切(l) 0x75555560u,//切(r) 0x75757840u,//明(l) 0x75757460u,//明(r) 0x000F0000u,//一(l) 0x00270000u,//一(r) 0x4E3A6A20u,//体(l) 0x17135310u,//体(r) 0x50300070u,//ど(r) 0x88888080u,//!(l) 0x00377750u,//m 0x00255520u,//o 0x62722220u,//f 0xE2FAAF80u,//最(l) 0x32745250u,//最(r) 0x8F4CF5D0u,//高(l) 0x07117550u,//高(r) 0x8FD0F430u,//完(l) 0x07507170u,//完(r) 0x0E2EAA50u,//成(l) 0x27226250u,//成(r) 0x2FE8F870u,//美(l) 0x27307070u,//美(r) 0x27A2BA70u,//提(l) 0x33726270u,//提(r) 0x8F2EA3D0u,//忘(l) 0x07032550u,//忘(r) 0x96D8FCB0u,//楽(l) 0x43507160u,//楽(r) 0x98401950u,//次(l) 0x07511240u,//次(r) 0xF1D5D1F0u,//回(l) 0x74555470u,//回(r) 0x8F4F4480u,//も(l) 0x03034430u,//も(r) 0xE2E2E430u,//見(l) 0x32323570u,//見(r) 0x8888E960u,//よ(l) 0x03001240u,//よ(r) 0x55575550u,//H 0x00556430u,//y 0x22222020u,//! 0x72222220u,//T 0x22000000u,//' 0x11355530u,//b 0x00552550u,//x 0x11553550u,//k 0x55000000u,//" 0x40444520u,//j 0x71131110u,//F 0x55522220u,//Y 0x25422020u,//? 0x64200000u,//’(l) 0x35535530u,//B 0xC2008080u,//?(l) 0x34430000u,//?(r) 0x000CB880u,//ィ(l) 0x02100000u,//ィ(r) 0x4C210860u,//グ(l) 0xEAEAE520u,//界(l) 0x32323510u,//界(r) 0x771F5F50u,//開(l) 0x77475750u,//開(r) 0xE52DE430u,//発(l) 0x25253170u,//発(r) 0x8E8FCB80u,//老(l) 0x43173070u,//老(r) 0x292FA2E0u,//後(l) 0x10572160u,//後(r) 0xF88CB880u,//不(l) 0x70024000u,//不(r) 0x8F9E4870u,//安(l) 0x07431160u,//安(r) 0x57555750u,//# 0x00000070u,//_ 0x02272200u,//+ 0x42212240u,//{ 0x00707000u,//= 0x04212400u,//< 0x01421400u,//% 0x22222220u,//| 0x25525160u,//& 0x12242210u//} ); const int[] TEXT0 = int[MAXTEXTLEN](1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,18,18,20,21,22,18,23,19,22,24,23,25,26,27,28,29,30,31,28,29,32,33,34,35,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT1 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT2 = int[MAXTEXTLEN](36,37,38,39,40,41,42,43,42,43,42,43,42,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT3 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,23,52,53,54,55,56,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT4 = int[MAXTEXTLEN](61,62,63,64,65,66,67,68,69,70,54,71,71,72,73,0,74,75,18,75,0,74,55,54,76,77,72,73,71,78,0,79,80,81,82,50,51,83,84,85,86,87,88,89,90,30,91,92,93,94,95,96,97,30,91,89,90,48,49,59,60,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT5 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,96,97,30,91,89,90,46,47,30,91,98,99,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT6 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT7 = int[MAXTEXTLEN](100,101,102,103,65,66,104,0,74,75,18,75,105,106,107,108,109,110,102,111,34,35,112,113,114,115,105,106,116,117,118,119,34,35,38,39,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT8 = int[MAXTEXTLEN](120,121,122,123,124,125,126,127,79,80,128,129,130,131,132,133,134,135,136,137,42,43,85,86,67,68,138,139,72,140,70,13,54,76,76,78,0,141,142,143,144,145,146,96,97,30,91,48,49,98,147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT9 = int[MAXTEXTLEN](148,86,149,150,89,90,149,150,151,152,153,154,155,156,89,90,89,90,157,158,159,160,32,161,162,163,30,91,48,49,34,35,65,66,102,103,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT10 = int[MAXTEXTLEN](164,165,46,47,166,167,48,49,168,133,169,170,42,43,171,172,42,43,105,106,173,174,89,90,30,91,89,90,48,49,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT11 = int[MAXTEXTLEN](175,176,105,106,177,178,179,180,102,111,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT12 = int[MAXTEXTLEN](65,66,96,97,148,181,105,106,81,82,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT13 = int[MAXTEXTLEN](182,183,184,103,30,91,25,22,24,36,37,57,185,89,90,85,86,102,111,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT14 = int[MAXTEXTLEN](186,187,188,189,85,86,190,191,48,49,130,192,193,133,194,195,196,197,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT15 = int[MAXTEXTLEN](40,41,38,39,32,33,104,0,40,41,38,39,32,33,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT16 = int[MAXTEXTLEN](13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT17 = int[MAXTEXTLEN](89,90,89,90,128,129,198,199,200,201,128,129,32,161,104,0,202,203,89,90,204,205,32,33,65,206,40,41,89,90,38,39,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT18 = int[MAXTEXTLEN](207,208,105,106,81,82,50,51,57,185,89,90,79,80,32,33,104,0,28,29,32,33,209,210,40,41,48,49,40,41,46,47,30,91,96,97,100,101,46,47,57,185,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT19 = int[MAXTEXTLEN](211,212,213,214,215,216,50,51,65,66,217,218,63,64,57,58,96,97,104,0,219,220,221,222,141,223,149,150,102,111,98,147,65,206,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT20 = int[MAXTEXTLEN](224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT21 = int[MAXTEXTLEN](74,54,225,52,0,226,227,0,75,72,227,52,65,66,228,229,230,231,57,58,32,33,209,210,104,0,81,82,34,35,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT22 = int[MAXTEXTLEN](232,233,234,235,57,58,59,60,224,0,0,0,40,41,38,39,30,91,236,237,96,97,89,90,38,39,57,58,13,13,13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT23 = int[MAXTEXTLEN](139,175,227,175,85,86,238,239,162,163,102,111,34,35,79,80,105,106,240,241,98,147,102,103,85,86,224,0,0,0,18,19,18,18,20,21,22,18,32,161,242,243,96,97,36,37,57,58,59,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT24 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT25 = int[MAXTEXTLEN](141,142,89,90,149,150,98,80,184,111,30,31,104,0,61,62,63,64,65,66,148,86,148,86,100,101,30,31,57,58,59,60,0,0,244,245,246,247,248,249,250,251,30,91,48,49,98,147,252,253,40,41,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT26 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT27 = int[MAXTEXTLEN](254,52,255,0,52,176,52,55,255,226,53,52,42,43,42,43,42,43,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT28 = int[MAXTEXTLEN](44,45,46,47,48,49,50,51,23,52,53,54,55,56,0,77,52,55,52,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT29 = int[MAXTEXTLEN](257,226,56,54,255,14,0,20,258,70,70,0,259,52,0,52,260,76,70,54,72,53,72,53,140,0,77,226,139,0,138,226,0,225,54,261,52,0,262,69,70,54,71,71,72,73,0,74,75,18,75,0,74,55,54,76,77,72,73,71,262,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT30 = int[MAXTEXTLEN](19,53,263,226,255,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT31 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT32 = int[MAXTEXTLEN](264,72,55,71,138,14,0,70,52,138,258,71,0,71,52,138,0,175,76,0,138,77,52,0,52,53,176,72,55,226,53,225,52,53,138,0,138,226,0,55,175,53,0,74,75,18,75,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT33 = int[MAXTEXTLEN](257,255,76,52,0,262,138,139,72,140,70,13,54,76,76,262,0,72,53,138,226,0,255,226,175,55,0,259,55,226,139,71,52,55,258,71,0,54,56,56,55,52,71,71,0,259,54,55,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT34 = int[MAXTEXTLEN](265,226,175,0,71,77,226,175,70,56,0,71,52,52,0,54,0,73,226,226,70,0,71,73,55,52,52,53,0,70,72,261,52,0,138,77,72,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT35 = int[MAXTEXTLEN](75,52,138,258,71,0,71,138,54,55,138,0,139,55,72,138,72,53,140,0,71,226,225,52,0,71,77,54,56,52,55,71,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT36 = int[MAXTEXTLEN](264,72,55,71,138,14,0,56,52,227,72,53,52,0,175,176,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT37 = int[MAXTEXTLEN](22,52,260,138,14,0,139,52,258,70,70,0,225,54,261,52,0,54,0,70,54,56,56,52,55,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT38 = int[MAXTEXTLEN](257,77,52,53,14,0,139,52,258,70,70,0,259,52,53,56,0,72,138,0,138,226,0,70,226,226,261,0,70,72,261,52,0,25,22,24,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT39 = int[MAXTEXTLEN](22,226,139,14,0,54,53,0,52,53,56,70,52,71,71,70,255,0,71,138,55,52,138,73,77,72,53,140,0,138,175,53,53,52,70,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT40 = int[MAXTEXTLEN](24,53,56,14,0,139,52,70,70,14,0,175,77,13,13,13,0,255,52,54,77,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT41 = int[MAXTEXTLEN](13,13,13,13,13,13,13,13,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT42 = int[MAXTEXTLEN](20,0,73,54,53,258,138,0,73,226,225,52,0,175,76,0,139,72,138,77,0,54,53,255,0,140,226,226,56,0,72,56,52,54,71,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT43 = int[MAXTEXTLEN](20,258,176,52,0,70,226,71,138,0,138,55,54,73,261,0,226,227,0,139,77,54,138,0,20,0,52,176,52,53,0,139,54,53,138,0,138,226,0,225,54,261,52,13,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT44 = int[MAXTEXTLEN](257,77,52,0,56,52,54,56,70,72,53,52,258,71,0,138,226,225,226,55,55,226,139,14,0,71,226,0,139,77,54,138,0,71,77,226,175,70,56,0,20,0,56,226,13,13,13,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT45 = int[MAXTEXTLEN](224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,224,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT46 = int[MAXTEXTLEN](74,54,225,52,0,226,227,0,75,72,227,52,0,72,71,0,54,139,52,71,226,225,52,14,0,71,226,0,20,258,70,70,0,225,54,261,52,0,256,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT47 = int[MAXTEXTLEN](20,138,267,0,71,0,73,226,225,76,70,52,138,52,256,0,20,71,53,258,138,0,72,138,0,259,52,54,175,138,72,227,175,70,13,13,13,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT48 = int[MAXTEXTLEN](25,226,53,258,138,0,227,226,55,140,52,138,0,138,226,0,71,175,259,225,72,138,0,72,138,0,138,226,0,139,175,227,175,256,0,20,258,225,0,70,226,226,261,72,53,140,0,227,226,55,139,54,55,56,0,138,226,0,18,19,18,18,20,21,22,18,256,256,256,0,0,0,0); const int[] TEXT49 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT50 = int[MAXTEXTLEN](24,53,56,0,138,77,54,138,258,71,0,54,70,70,0,227,226,55,0,138,226,56,54,255,256,0,268,52,0,71,175,55,52,0,138,226,0,73,77,52,73,261,0,72,138,0,226,175,138,0,53,52,260,138,0,138,72,225,52,256,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT51 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT52 = int[MAXTEXTLEN](65,66,96,97,148,181,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT53 = int[MAXTEXTLEN](25,22,24,85,86,65,66,250,251,118,119,40,41,89,90,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT54 = int[MAXTEXTLEN](130,192,193,133,194,195,196,197,269,270,269,270,269,270,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT55 = int[MAXTEXTLEN](207,208,148,86,79,80,168,133,169,170,42,43,200,201,271,272,193,133,273,121,269,270,269,270,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT56 = int[MAXTEXTLEN](211,212,215,216,0,23,54,255,225,54,55,73,77,72,53,140,0,188,189,274,275,276,277,278,279,0,75,43,18,255,71,138,52,225,0,280,281,282,283,79,80,284,285,286,287,0,264,55,54,73,138,54,70,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT57 = int[MAXTEXTLEN](69,226,53,139,54,255,258,71,0,74,54,225,52,0,226,227,0,75,72,227,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT58 = int[MAXTEXTLEN](76,55,52,73,72,71,72,226,53,0,77,72,140,77,76,0,227,70,226,54,138,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT59 = int[MAXTEXTLEN](175,53,72,227,226,55,225,0,71,54,225,76,70,52,55,3,25,0,259,54,73,261,259,175,227,227,52,55,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT60 = int[MAXTEXTLEN](226,175,138,0,176,52,73,5,0,226,175,138,69,226,70,226,55,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT61 = int[MAXTEXTLEN](288,56,52,227,72,53,52,0,257,15,260,16,0,72,53,138,15,138,52,260,52,70,264,52,138,73,77,15,259,54,73,261,259,175,227,227,52,55,14,72,176,52,73,3,15,140,70,289,264,55,54,140,69,226,226,55,56,13,260,255,16,290,260,14,1,16,13,55,290,13,6,16,0); const int[] TEXT62 = int[MAXTEXTLEN](176,226,72,56,0,225,54,72,53,15,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT63 = int[MAXTEXTLEN](291,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT64 = int[MAXTEXTLEN](0,0,72,53,138,0,73,292,257,15,1,16,14,71,292,43,73,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT65 = int[MAXTEXTLEN](0,0,227,226,55,15,72,53,138,0,72,292,1,17,72,293,10,17,72,290,290,16,71,290,292,257,15,72,176,52,73,3,15,72,294,4,14,72,12,4,16,43,2,16,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT66 = int[MAXTEXTLEN](0,0,226,175,138,69,226,70,226,55,292,176,52,73,5,15,71,292,292,4,295,295,15,73,292,292,2,296,296,71,292,292,3,16,266,2,11,1,16,17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT67 = int[MAXTEXTLEN](297,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); const int[] TEXT68 = int[MAXTEXTLEN](0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0); int[] TEXTLEN = int[TEXTCOUNT](43,1,15,19,62,21,1,41,52,41,33,15,15,24,23,19,10,37,45,41,21,33,40,51,1,55,1,19,21,62,7,1,49,50,40,34,18,27,38,37,23,10,37,45,49,21,40,39,70,1,61,1,9,16,17,25,54,24,23,30,19,73,12,2,19,46,41,2,0); int[MAXTEXTLEN] getText(int i) { int[MAXTEXTLEN] t; if(i == 0) t = TEXT0; else if(i == 1) t = TEXT1; else if(i == 2) t = TEXT2; else if(i == 3) t = TEXT3; else if(i == 4) t = TEXT4; else if(i == 5) t = TEXT5; else if(i == 6) t = TEXT6; else if(i == 7) t = TEXT7; else if(i == 8) t = TEXT8; else if(i == 9) t = TEXT9; else if(i == 10) t = TEXT10; else if(i == 11) t = TEXT11; else if(i == 12) t = TEXT12; else if(i == 13) t = TEXT13; else if(i == 14) t = TEXT14; else if(i == 15) t = TEXT15; else if(i == 16) t = TEXT16; else if(i == 17) t = TEXT17; else if(i == 18) t = TEXT18; else if(i == 19) t = TEXT19; else if(i == 20) t = TEXT20; else if(i == 21) t = TEXT21; else if(i == 22) t = TEXT22; else if(i == 23) t = TEXT23; else if(i == 24) t = TEXT24; else if(i == 25) t = TEXT25; else if(i == 26) t = TEXT26; else if(i == 27) t = TEXT27; else if(i == 28) t = TEXT28; else if(i == 29) t = TEXT29; else if(i == 30) t = TEXT30; else if(i == 31) t = TEXT31; else if(i == 32) t = TEXT32; else if(i == 33) t = TEXT33; else if(i == 34) t = TEXT34; else if(i == 35) t = TEXT35; else if(i == 36) t = TEXT36; else if(i == 37) t = TEXT37; else if(i == 38) t = TEXT38; else if(i == 39) t = TEXT39; else if(i == 40) t = TEXT40; else if(i == 41) t = TEXT41; else if(i == 42) t = TEXT42; else if(i == 43) t = TEXT43; else if(i == 44) t = TEXT44; else if(i == 45) t = TEXT45; else if(i == 46) t = TEXT46; else if(i == 47) t = TEXT47; else if(i == 48) t = TEXT48; else if(i == 49) t = TEXT49; else if(i == 50) t = TEXT50; else if(i == 51) t = TEXT51; else if(i == 52) t = TEXT52; else if(i == 53) t = TEXT53; else if(i == 54) t = TEXT54; else if(i == 55) t = TEXT55; else if(i == 56) t = TEXT56; else if(i == 57) t = TEXT57; else if(i == 58) t = TEXT58; else if(i == 59) t = TEXT59; else if(i == 60) t = TEXT60; else if(i == 61) t = TEXT61; else if(i == 62) t = TEXT62; else if(i == 63) t = TEXT63; else if(i == 64) t = TEXT64; else if(i == 65) t = TEXT65; else if(i == 66) t = TEXT66; else if(i == 67) t = TEXT67; else if(i == 68) t = TEXT68; return t; } #define FRAME int(frame) #define rep(i,n) for(int i=0;i> 16u; v.x += v.y * v.z; v.y += v.z * v.x; v.z += v.x * v.y; return vec3(v) / float(0xffffffffu); } float dot2(vec2 v) { return dot(v,v); } float cross2(vec2 a,vec2 b) { return a.x * b.y - a.y * b.x; } vec3 hex2rgb(int hex) { return vec3((hex >> 16) & 0xff,(hex >> 8) & 0xff,hex & 0xff) / 255.0; } mat3 bnt(vec3 t) { vec3 b,n = vec3(0,1,0); t = norm(t); b = norm(cross(n,t)); n = norm(cross(t,b)); return mat3(b,n,t); } vec3 cyc(vec3 p) { vec3 s = vec3(1,2,3); vec4 n = vec4(0); mat3 m = bnt(s); float f = 1.5; rep(i,8) { p += sin(p.yzx); n += vec4(cross(cos(p),sin(p.zxy)),1); p *= m * f; } return n.xyz / n.w; } vec3 plane(vec3 ro,vec3 rd,vec3 pd,float w) { pd = norm(pd); float l = -(dot(ro,pd) - w) / dot(rd,pd); vec3 rp = ro + rd * l; mat3 m = bnt(pd); vec2 uv = vec2(dot(rp,m[0]),dot(rp,m[1])); return vec3(uv,l < 0. ? 1e5 : l); } float printHalf(vec2 p,int t) { ivec2 i = ivec2(p * vec2(4,8)); return float(inuv(p) && ((HEX[t] >> (i.x + i.y * 4)) & 1u) == 1u); } // https://www.shadertoy.com/view/MlKcDD float sdBezier(in vec2 pos,in vec2 A,in vec2 B,in vec2 C,out vec2 outQ) { vec2 a = B - A; vec2 b = A - 2.0 * B + C; vec2 c = a * 2.0; vec2 d = A - pos; float kk = 1.0 / dot(b,b); float kx = kk * dot(a,b); float ky = kk * (2.0 * dot(a,a) + dot(d,b)) / 3.0; float kz = kk * dot(d,a); float res = 0.0; float sgn = 0.0; float p = ky - kx * kx; float q = kx * (2.0 * kx * kx - 3.0 * ky) + kz; float p3 = p * p * p; float q2 = q * q; float h = q2 + 4.0 * p3; if(h >= 0.0) { h = sqrt(h); vec2 x = (vec2(h,-h) - q) / 2.0; if(abs(p) < 0.001) { float k = p3 / q; x = vec2(k,-k - q); } vec2 uv = sign(x) * pow(abs(x),vec2(1.0 / 3.0)); float t = uv.x + uv.y; t -= (t * (t * t + 3.0 * p) + q) / (3.0 * t * t + 3.0 * p); t = clamp(t - kx,0.0,1.0); vec2 w = d + (c + b * t) * t; outQ = w + pos; res = dot2(w); sgn = cross2(c + 2.0 * b * t,w); } else { // 3 roots float z = sqrt(-p); float v = acos(q / (p * z * 2.0)) / 3.0; float m = cos(v); float n = sin(v); n *= sqrt(3.0); vec3 t = clamp(vec3(m + m,-n - m,n - m) * z - kx,0.0,1.0); vec2 qx = d + (c + b * t.x) * t.x; float dx = dot2(qx),sx = cross2(a + b * t.x,qx); vec2 qy = d + (c + b * t.y) * t.y; float dy = dot2(qy),sy = cross2(a + b * t.y,qy); if(dx < dy) { res = dx; sgn = sx; outQ = qx + pos; } else { res = dy; sgn = sy; outQ = qy + pos; } } return sqrt(res) * (sgn < .0 ? -1. : 1.); } float sdTri(vec2 p,float r) { const float k = sqrt(3.0); p.x = abs(p.x) - r; p.y = p.y + r / k; if(p.x + k * p.y > 0.0) p = vec2(p.x - k * p.y,-k * p.x - p.y) / 2.0; p.x -= clamp(p.x,-2.0 * r,0.0); return -length(p) * sign(p.y); } #define F_DEF 0 #define F_SAD 1 #define F_SLP 2 #define F_HIG 3 vec4 renard(vec2 suv,int ft) { float w = .1; float d = 1e9; vec2 p = vec2(asp.x - .5,.2),q = vec2(asp.x,-.8),f = vec2(.5,.1); vec2 m = (mouse * 2. - 1.) * asp; p = mix(q,m,.75) + cyc(vec3(1,2,T * .02)).xy * .3; if((TIME - SPAN < .0) || (MAXTIME <= TIME - SPAN)) p = vec2(.5,-.2); vec2 A,B,C,nv0,nv1; A = p; C = (p + q) * .5; B = A + f; d = min(d,abs(sdBezier(suv,A,B,C,nv0))); A = C; C = q; B = C - f; d = min(d,abs(sdBezier(suv,A,B,C,nv1))); d -= w; vec2 auv = suv - p; vec2 an = vec2(sin(T * 2.),cos(T * 2.)) * w * .1; float a = atan(f.y,f.x); d = min(d,sdTri((auv * rot(a) - vec2(0,w * 1.5 + an.x)) * rot(ft == F_HIG ? T * PI : .0),w * .4)); d = min(d,sdTri((auv * rot(a) - vec2(w * 1.5,w * 1.5 + an.y)) * rot(ft == F_HIG ? T * PI + PI : .0),w * .4)); // body+ear vec3 bc = vec3(1); if(ft == F_SAD) bc = vec3(.5,.8,1); else if(ft == F_SLP) bc = vec3(.5); else if(ft == F_HIG) bc = .5 + .5 * cos(TAU * (vec3(0,1,2) / 3. + T + dot(nv0,vec2(2)))); vec4 c = vec4(bc,step(d,.0)); c.rgb *= c.a; c = mix(c,vec4(vec3(0),1),smoothstep(.01,.01 - .005,abs(d))); auv -= vec2(.5) * w; d = length(auv) - w * .25; if(ft == F_SAD) { d = min(d,length(vec2(auv.x,mod(auv.y + T * w,.4 * w) - .2 * w)) - .05 * w); d = max(d,auv.y); } else if(ft == F_SLP) { d = box(auv,vec2(.3,.05) * w); } else if(ft == F_HIG) { d = max(d,-mod(length(auv) - T * w,w * .4) + w * .2); } c = mix(c,vec4(vec3(0),c.a),smoothstep(.01,.0,d)); // c.a *= step(.0,box(auv + vec2(1.25,1) * w,vec2(.5,.2*(FT> (_fuv.x + _fuv.y * 4)) & 1u) == 1u) && (0 <= _cuv.y && _cuv.y < 8 && 0 <= _cuv.x && _cuv.x < 4 * _l)); } vec4 ov(vec2 uv) { vec4 c = vec4(0); vec2 suv = (uv * 2. - 1.) * asp,auv = uv * asp2; vec2 wuv = auv - clamp(auv,vec2(.03),vec2(.97,.14)); // renard int fi = F_DEF; if(PH == 1 || PH == 16) fi = F_SLP; else if(PH == 2 || PH == 22 || PH == 23 || (PH == 24 && FT < SPAN * .5)) fi = F_HIG; else if(PH == 17 || PH == 18 || PH == 19) fi = F_SAD; c = renard(suv,fi); // TODO:make smoother // window float d = abs(auv.y - .1) - .1 + .03; c = mix(c,vec4(vec3(0),1),sat(step(max(-d,auv.y - .2),.0) + step(d,.0) * .5) * smoothstep(.0,.3,1. - 2. * abs(auv.x - .5))); // texts int ph,mc,l,gl,ch,ch0,ch1; float wb = .1,pu = 5.; // ja ph = (PH) % 27; int[MAXTEXTLEN] tx = getText(ph); mc = TEXTLEN[ph]; l = int(linearstep(.0,SPAN * .5,FT) * float(mc)); gl = max(36,l + 4); ch0 = printText((auv - (vec2(0,pu) + wb) / vec2(gl * 4)),l,gl,tx); ch1 = printText((auv - (vec2(0,pu) - wb) / vec2(gl * 4)),l,gl,tx); ch = ch0 + ch1; c = ch == 1 ? vec4(vec3(1),1) : ch == 2 ? vec4(vec3(1,0,0),1) : c; // en ph = (PH) % 27 + 25; tx = getText(ph); mc = TEXTLEN[ph]; l = int(linearstep(.0,SPAN * .5,FT) * float(mc)); gl = max(54,l + 4); ch0 = printText((auv - (vec2(0,-pu) + wb) / vec2(gl * 4)),l,gl,tx); ch1 = printText((auv - (vec2(0,-pu) - wb) / vec2(gl * 4)),l,gl,tx); ch = ch0 + ch1; c = ch == 1 ? vec4(vec3(0),1) : ch == 2 ? vec4(vec3(1,1,0),1) : c; c.a = sat(c.a); // transition if(PH == 6 || PH == 24) { vec2 ruv = suv * 4. * rot(-.4); int iy = int(floor(ruv.y)) + 1024; ruv.x += sign(float(iy % 2) - .5) * 48. * (pow(smoothstep(.0,SPAN / 3.,FT),.2) + pow(smoothstep(SPAN * 2. / 3.,SPAN,FT),.2) - 1.); vec2 iuv = floor(ruv),fuv = fract(ruv); vec3 col = mix(vec3(242,162,12) / 255.,vec3(223,242,194) / 255.,float(iy % 2)); col *= printHalf(fuv,int[10](18,19,18,18,20,21,22,18,0,0)[int(iuv.x + 1024.) % 10]); float a = float(ruv.x == clamp(ruv.x,-20.,20.)); c = mix(c,vec4(col,1),a); } // bottom ui vec2 ui = uvmap(auv,vec2(.05,0),vec2(.1,.05)); c = mix(c,vec4(1),step(pmod(ui - .5,3.).x - .15,.0)); ui.x -= 1.; c = mix(c,vec4(1),step(min(pmod(ui - .5,3.).x - .15,box(ui - vec2(.85,.5),vec2(.05,.26))),.0)); ui = ui * 4. - vec2(6,1.3); // T bar float t = min(MAXTIME,T); int nse = int(t) % 60,nmi = int(t) / 60,mse = int(MAXTIME) % 60,mmi = int(MAXTIME) / 60; c = mix(c,vec4(1),float(inuv(ui / vec2(11,1))) * printHalf(fract(ui),(int[]((nmi / 10) % 10,nmi % 10,10,(nse / 10) % 10,nse % 10,11,(mmi / 10) % 10,mmi % 10,10,(mse / 10) % 10,mse % 10)[int(ui.x) % 11] + 1))); c = mix(c,vec4(1),step(abs(auv.y - .05),.002) * .5); c = mix(c,vec4(vec3(1,0,0),1),step(abs(auv.y - .05),.002) * step(auv.x,T / MAXTIME)); return c; } vec3 defo() { vec2 r = resolution,p = (gl_FragCoord.xy * 2. - r) / min(r.x,r.y) - mouse; for(int i = 0; i < 8; ++i) { p.xy = abs(p) / dot(p,p) - vec2(.9 + cos(TIME * .2) * .4); } return p.xxy; } float hashi(vec3 p,float x,float s,float w) { vec3 q = p; q.x = abs(q.x) - x; float d = length(q.xz); float iy = (floor(p.y / s) + .5) * s; p.y = mod(p.y,s) - s * .5; p.x -= clamp(p.x,-x,x); return min(d,length(p)) - w; } const vec2 _e = vec2(1e-2,0); #define normal(_s,_p) norm(vec3(_s(_p+_e.xyy)-_s(_p-_e.xyy),_s(_p+_e.yxy)-_s(_p-_e.yxy),_s(_p+_e.yyx)-_s(_p-_e.yyx))) vec3 getsuv(vec3 wp,vec3 ro,mat3 m,float z) { vec3 od = (ro - wp) * m; vec2 wuv = od.xy / od.z * z; return vec3(wuv,length(ro - wp)); } float batu(vec2 p) { p *= rot(PI * .25); p = abs(p); return max(min(p.x,p.y),max(p.x,p.y) - .03); } float sdf(vec3 p) { float r = PI / 24. * 3.; vec3 q = p; float d = 1e9; if(PH == 12) { d = hashi(q,1.,1.,.2); } else if(PH == 13) { q.xz *= rot(q.y * r); d = hashi(q,1.,1.,.2); } else if(PH == 14) { q.xy *= rot(q.z * .2); q.x = abs(q.x) - 1.5; d = hashi(q.yzx,1.,1.,.2); q = p + vec3(0,0,3); q.xy *= rot(floor(q.z / 6.) * 2.4); q.z = mod(q.z,6.) - 3.; q.xy = vec2(length(q.xy) - 3.,atan(q.y,q.x) / PI * 12.); q.xz *= rot(q.y * r); d = min(d,hashi(q,1.,1.,.2)); } else if(PH == 15) { q.xy = vec2(length(q.xy) - 6.,atan(q.y,q.x) / PI * 12.); q.xz *= rot(q.y * r + T); q.x = abs(q.x) - 4.; q.xz *= rot(-q.y * r); q.x = abs(q.x) - 2.; q.xz *= rot(q.y * r); q.x = abs(q.x) - 1.; d = hashi(q.zyx,1.,1.,.3); } else { d = 10. - length(p); } return d * .5; } vec3 sn(vec2 suv) { vec3 c = vec3(0); vec3 rd,rp,ro,dir; mat3 m; float l = .0,d,z = .5; if(PH < 14) ro = vec3(0,T,-5); else if(PH == 14) ro = vec3(0,0,T * 2.); else ro = vec3(0,0,-5); dir = vec3(0,0,1); z = 1. - length(suv) * .5; if(PH == 15) z = FT * .5 - length(suv) + .5; m = bnt(dir); rd = m * norm(vec3(suv,z)); rep(i,99) { rp = rd * l + ro; l += d = sdf(rp); if(d < 1e-3 || 1e4 < l) break; } vec3 n = normal(sdf,rp); vec3 rl = reflect(rd,n); vec3 ld = norm(vec3(1,1,-1)); c = vec3(1.5) * ceil(sat((sdf(rp + ld * .1) - sdf(rp)) / .1) * 3.) / 3.; if(PH == 15) c = .5 + .5 * cos(vec3(1,2,3) + cyc(rl * .5).x * TAU + T * TAU); vec3 sky = vec3(0); c = mix(sky,c,exp(-l * .05)); // overlay float r = PI / 24. * 3.; float px = length(fwidth(suv)); if(PH == 12) { rep(i,16) { vec3 wp = vec3(1,int(floor(ro.y) / 2.) * 2 + i * 2 - 16,0) + vec3(0,.5,0); vec3 h = pcg3(wp - floor(T * 4.) * .24); vec3 h2 = pcg3(wp.yzx); if(dot(wp - ro,rp - ro) < 1.) continue; vec3 wq = wp + m * vec3(mix(vec2(0,-1),vec2(2,1),h2.xy),-.5); vec2 wuv = getsuv(wp,ro,m,z).xy; vec2 ouv = getsuv(wq,ro,m,z).xy; vec2 sc = vec2(2,1) * mix(24.,10.,h2.z); vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv); vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4); int cl = max(TEXTLEN[52] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT52[int(iuv.x) % cl]; vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y); float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px); float ph = printHalf(fuv,ci); s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1))); c = mix(c,vec3(0,0,1),sat(s)); } } else if(PH == 13) { rep(i,16) { vec3 wp = vec3(-1,int(floor(ro.y) / 2.) * 2 + i * 2 - 16,0) + vec3(0,.5,0); vec3 h = pcg3(wp - floor(T * 4.) * .24); vec3 h2 = pcg3(wp.yzx); wp.xz *= rot(-wp.y * r); if(dot(wp - ro,rp - ro) < 1.) continue; vec3 wq = wp + m * vec3(mix(vec2(-2,-1),vec2(-6,1),h2.xy),-.5); vec2 wuv = getsuv(wp,ro,m,z).xy; vec2 ouv = getsuv(wq,ro,m,z).xy; vec2 sc = vec2(2,1) * mix(24.,10.,h2.z); vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv); vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4); int cl = max(TEXTLEN[53] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT53[int(iuv.x) % cl]; vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y); float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px); float ph = printHalf(fuv,ci); s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1))); c = mix(c,vec3(0,0,1),sat(s)); } } else if(PH == 14) { rep(i,16) { vec3 wp = vec3(0,0,int(floor(ro.z)) + i - 2); vec3 h = pcg3(wp - floor(T * 4.) * .24); vec3 h2 = pcg3(wp.yzx); wp.xy += norm(h2.yz - .5) * 2.; vec3 wq = wp + m * vec3(-mix(vec2(0),vec2(3),h2.xy) * sign(wp.xy),0); if(dot(wp - ro,rp - ro) < 1. || dot(wq - ro,rp - ro) < 1.) continue; vec3 wuv3 = getsuv(wp,ro,m,z); vec2 wuv = wuv3.xy; vec2 ouv = getsuv(wq,ro,m,z).xy; vec2 sc = vec2(2,1) * mix(24.,10.,h2.z); vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv); vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4); int cl = max(TEXTLEN[54] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT54[int(iuv.x) % cl]; vec2 tuv = vec2(clamp(wuv.x,ouv.x,ouv.x + (vec2(cl,0.) / sc).x),ouv.y); float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px); float ph = printHalf(fuv,ci); s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1))); c = mix(c,vec3(0,0,1),sat(s) * smoothstep(8.,4.,wuv3.z)); } } else if(PH == 15) { rep(i,16) { vec3 wp = vec3(1,2,int(floor(ro.z)) + i + int(floor(T * 8.))); vec3 h = pcg3(wp - floor(T * 4.) * .24); vec3 h2 = pcg3(wp.yzx); wp = vec3(vec2(4,0) * rot(h2.x * TAU),h2.y - .5); vec3 wq = wp + m * vec3(-wp.xy * .5,0); if(dot(wp - ro,rp - ro) < 1. || dot(wq - ro,rp - ro) < 1.) continue; vec3 wuv3 = getsuv(wp,ro,m,z); vec2 wuv = wuv3.xy; vec2 ouv = getsuv(wq,ro,m,z).xy; vec2 sc = vec2(2,1) * mix(24.,10.,h2.z); vec2 ruv = (suv - ouv) * sc,iuv = floor(ruv),fuv = fract(ruv); vec3 h3 = pcg3(vec3(wp.y,iuv) + floor(T * 15.) * 2.4); int cl = max(TEXTLEN[55] - 1,1),ci = h.x < .3 ? int(h3.x * float(HEXCOUNT)) : TEXT55[int(iuv.x) % cl]; // vec2 tuv=vec2(clamp(wuv.x,ouv.x,ouv.x+(vec2(cl,0.)/sc).x),ouv.y); vec2 tuv = vec2(mix(ouv.x,ouv.x + (vec2(cl,0.) / sc).x,step(ouv.x + (vec2(cl,0.) / sc).x * .5,wuv.x)),ouv.y); float s = step(seg(suv,wuv,tuv),px) + step(batu(suv - wuv),px); float ph = printHalf(fuv,ci); s += (h3.y < .05 ? 1. - ph : ph + step(fuv.y,.1)) * float(inuv(iuv / vec2(cl,1))); c = mix(c,vec3(1,0,1),sat(s)); } } return c; } vec3 bg(vec2 uv) { vec3 c = vec3(0); vec2 suv = (uv * 2. - 1.) * asp,auv = uv * asp2; if(PH < 9) { c = vec3(.2); } else if(PH < 11) { c = defo(); } else if(PH == 11) { c = vec3(uv,0); } else if(PH < 16) { c = sn(suv); } else if(PH == 16) { c = vec3(0); } else if(PH == 17) { vec3 ro,rd,dir; float l,z = 1.; z = 1. - length(suv) * .3; ro = vec3(0,0,-3) + cyc(vec3(T) * .03); dir = vec3(0,0,1); rd = bnt(dir) * norm(vec3(suv,z)); vec3 pd = vec3(0,0,1); vec3 pn = plane(ro,rd,pd,1.); vec2 puv = pn.xy,res = puv; vec2 sc = vec2(8,16); PH = 15; rep(i,16) { float f = float(i) / 16.; float sp = .1; float rt = T * sp + f,it = floor(rt),ft = fract(rt); vec3 h = pcg3(vec3(i,34. + it,12)); vec2 p = (puv - mix(-sc,sc,vec2(h.y,ft))) * .5; if(p == clamp(p,-asp,asp)) { res = p; PH = int(mix(12.1,15.9,h.z)); } } c = sn(res) * .75; // vec4 ov = ov((res / asp + 1.) * .5); // c = mix(c,ov.rgb,ov.a); PH = 17; } else if(PH < 20) { vec2 sc = vec2(4,1.5); float spf = (PH == 19 ? sat(FT / SPAN * 1.1) : .0); int cl = max(1,TEXTLEN[56] - 1); vec2 ruv = uv * asp * vec2(2,1) * 8.; float iy = floor(ruv.y); vec3 h = pcg3(vec3(1,2,iy)); ruv.x += float(cl) * iy / 8. + T * mix(-8.,8.,h.x); vec2 iuv = floor(ruv),fuv = fract(ruv); bool isl = h.z < spf; int ch = isl ? TEXT57[(int(iuv.x) + 23 * 128) % 23] : TEXT56[(int(iuv.x) + cl * 128) % cl]; float nya = printHalf(fuv,ch); c = (isl ? 1. - nya : nya) * (isl ? vec3(1,0,0) : vec3(1)); } else if(PH == 20) { vec3 h1 = pcg3(vec3(1,2,3) + floor(T * 8.) * 2.4) * 2. - 1.,h2 = pcg3(vec3(4,3,2) - floor(T * 8.) * .32) * 2. - 1.; suv = (suv + h1.xy * .1 - vec2(0,1.2)) * rot(h1.z * .5) * mix(.4,1.,h2.x * .5 + .5); int cl = max(1,TEXTLEN[57] - 1 - 9); vec2 ruv = (suv * .5 + .5) * vec2(cl,4); vec2 iuv = floor(ruv),fuv = fract(ruv); int ch = TEXT57[int(iuv.x) % cl + 9]; c += printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1))) * vec3(1,0,0); } else if(PH == 21) { vec2 ruv = auv * vec2(72.,36.),iuv = floor(ruv),fuv = fract(ruv); int d = 58,u = 68; int iy = u - int(iuv.y) + 8; float ftl = sat(FT / SPAN * 1.5) * 12.; int up = u - 12 + int(ftl);//76 bool tin = d <= iy && iy < (up + 1); int aaa = iy; iy = clamp(iy,d,up); int cl = max(1,TEXTLEN[iy]),ch = getText(iy)[int(iuv.x) % cl]; float pha = printHalf(fuv,ch); c += (aaa == up ? 1. - pha : pha) * float(tin) * float(iuv.x < float(cl) * (aaa == up ? fract(ftl) : aaa < up ? 1. : .0)); } else if(PH < 25) { #define _T(_x,_s) int(texelFetch(backbuffer1,((ivec2(gl_FragCoord.xy)/_s+_x)%(ivec2(resolution)/_s))*_s,0).r+.5) int n = _T(0,8),s = -n; for(int i = 0; i < 9; i++) s += _T(ivec2(i % 3 - 1,i / 3 - 1),8); c = vec3(s == 3 || (n == 1 && s == 2) ? 1 : 0); if(int(frame) % 10 != 0) c = vec3(n); if(PH == 24 && SPAN * .5 < FT) c = vec3(0); } return c; } void main() { float fnyan = mod(time,MAXTIME + SPAN * 3.); TIME = (MAXTIME + SPAN * 2.) < fnyan ? mix(MAXTIME + SPAN * 2.,.0,linearstep(MAXTIME + SPAN * 2.,MAXTIME + SPAN * 3.,fnyan)) : fnyan; T = clamp(TIME - SPAN,.0,MAXTIME); PH = int(floor(T / SPAN)) + 1; FT = mod(T,SPAN); fc = gl_FragCoord.xy,res = resolution,asp = res / min(res.x,res.y),asp2 = res / max(res.x,res.y); vec2 uv = fc / res,suv = (uv * 2. - 1.) * asp; vec3 c = bg(uv); outColor1 = vec4(c,1); c = texture(backbuffer1,uv).rgb; vec4 ov = ov(uv); c = mix(c,ov.rgb,ov.a); if(TIME - SPAN < .0) { // さむね c = vec3(0); vec4 s = renard(suv,F_HIG); c = mix(c,s.rgb,s.a); int cl = 12; vec2 ruv = vec2(uv.x,1. - uv.y - .03) * asp2 * vec2(cl) * vec2(1,.5); vec2 iuv = floor(ruv),fuv = fract(ruv); fuv = vec2(fuv.x,1. - fuv.y); int ch = TEXT0[31 + int(iuv.x) % cl]; c = mix(c,mix(vec3(0),vec3(2,0,0),smoothstep(.0,1.,fuv.y)),printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1)))); cl = 33; ruv = vec2(uv.x,uv.y - .03) * asp2 * vec2(cl) * vec2(1,.5); iuv = floor(ruv),fuv = fract(ruv); ch = TEXT4[6 + int(iuv.x) % cl]; c = mix(c,mix(vec3(0),vec3(2,0,0),smoothstep(.0,1.,fuv.y)),printHalf(fuv,ch) * float(inuv(ruv / vec2(cl,1)))); // start s = start(suv * 5.,linearstep(SPAN - 3.,SPAN,TIME)); c = mix(c,s.rgb,s.a); } if(MAXTIME <= TIME - SPAN) { // stop vec4 s = stop(suv * 5.,linearstep(.0,3.,TIME - SPAN - MAXTIME)); c = mix(c,s.rgb,s.a); } outColor0 = vec4(c,1); }