241 lines
9.4 KiB
GLSL
241 lines
9.4 KiB
GLSL
#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 */ |