CaveScript32
Old shapes. New words. A prehistoric-inspired script for English, source code, and the pleasure of asking: what does that inscription say?
CaveScript32 is a modern character system created by Michael S. Moniz, with AI-assisted drawing and implementation. Its 32 base signs combine into pairs that represent familiar letters, numbers, punctuation, and spaces. Try an inscription yourself, use the public key, or ask an AI to translate it.
Try an inscription

Show a copyable transcription
Each token below is one character cell. This supplies the same inscription in a form you can copy into an AI assistant without relying on image recognition.
S21+S21 S16+S01 S24+S10 S22+S09 S00+S31 S27+S06 S21+S20 S22+S09 S29+S29 S27+S25 S24+S17 S24+S26 S29+S29 S22+S09 S16+S01 S28+S26 S05+S13 S24+S10 S22+S09 S28+S26 S22+S09 S24+S26 S24+S10 S26+S16 S22+S09 S29+S29 S21+S23 S00+S31 S17+S28 S31+S17 S26+S09
Reveal the English answer
The old signs have a new story.
How to read it
- Read cells from left to right, then top to bottom.
- Inside each cell, read the left sign first and the right sign second. Together they identify one character.
- Find that ordered pair in the character key. Uppercase, lowercase, and punctuation have separate assignments.
- Keep the encoded spaces and line breaks. A picture wrapping onto another row does not itself add a newline.
For example, S21+S21 means capital T; S22+S09 means a space. The order matters: S09+S22 has no assigned character in version 1.0.
To use an AI assistant, give it the inscription or its transcription and this page. Ask it to use the published assignments, preserve case and punctuation, and mark any unreadable cell rather than inventing a letter. If it cannot open links, paste the relevant tables below or attach the reading-key PDF.
The public reading key
The drawings below identify the 32 base signs. The next two charts show every supported character as its pair of signs. Select any chart to open the full-size image.



Version 1.0 supports 98 characters: the 95 printable ASCII characters, plus LF (newline), TAB, and CR (carriage return). These assignments are the same ones used in the original CaveScript32 reading tests.
Copyable character tables
The IDs in these tables correspond exactly to the drawings above. A character written as S23+S30, for example, uses Serpentiform on the left and Y-Sign on the right; it reads as lowercase q.
Uppercase letters
| Character | Ordered sign pair | ASCII number |
|---|---|---|
A | S28+S19 | 65 |
B | S12+S19 | 66 |
C | S17+S07 | 67 |
D | S16+S13 | 68 |
E | S00+S27 | 69 |
F | S08+S23 | 70 |
G | S26+S08 | 71 |
H | S21+S15 | 72 |
I | S03+S11 | 73 |
J | S23+S21 | 74 |
K | S14+S24 | 75 |
L | S20+S11 | 76 |
M | S19+S02 | 77 |
N | S15+S27 | 78 |
O | S09+S06 | 79 |
P | S15+S03 | 80 |
Q | S14+S21 | 81 |
R | S14+S20 | 82 |
S | S01+S14 | 83 |
T | S21+S21 | 84 |
U | S27+S09 | 85 |
V | S05+S29 | 86 |
W | S21+S28 | 87 |
X | S19+S11 | 88 |
Y | S23+S11 | 89 |
Z | S22+S03 | 90 |
Lowercase letters
| Character | Ordered sign pair | ASCII number |
|---|---|---|
a | S28+S26 | 97 |
b | S04+S14 | 98 |
c | S29+S19 | 99 |
d | S21+S20 | 100 |
e | S24+S10 | 101 |
f | S11+S07 | 102 |
g | S24+S17 | 103 |
h | S16+S01 | 104 |
i | S27+S25 | 105 |
j | S25+S05 | 106 |
k | S26+S13 | 107 |
l | S27+S06 | 108 |
m | S09+S04 | 109 |
n | S24+S26 | 110 |
o | S00+S31 | 111 |
p | S28+S30 | 112 |
q | S23+S30 | 113 |
r | S17+S28 | 114 |
s | S29+S29 | 115 |
t | S21+S23 | 116 |
u | S31+S08 | 117 |
v | S05+S13 | 118 |
w | S26+S16 | 119 |
x | S21+S00 | 120 |
y | S31+S17 | 121 |
z | S08+S14 | 122 |
Numbers
| Character | Ordered sign pair | ASCII number |
|---|---|---|
0 | S27+S23 | 48 |
1 | S19+S07 | 49 |
2 | S30+S11 | 50 |
3 | S16+S30 | 51 |
4 | S06+S03 | 52 |
5 | S22+S31 | 53 |
6 | S07+S00 | 54 |
7 | S11+S22 | 55 |
8 | S03+S02 | 56 |
9 | S02+S20 | 57 |
Punctuation, space, and line controls
| Character | Ordered sign pair | ASCII number |
|---|---|---|
SPACE | S22+S09 | 32 |
! | S18+S16 | 33 |
" | S11+S19 | 34 |
# | S19+S26 | 35 |
$ | S28+S27 | 36 |
% | S21+S17 | 37 |
& | S22+S21 | 38 |
' | S15+S30 | 39 |
( | S30+S29 | 40 |
) | S11+S14 | 41 |
* | S15+S08 | 42 |
+ | S30+S27 | 43 |
, | S01+S07 | 44 |
- | S31+S01 | 45 |
. | S26+S09 | 46 |
/ | S20+S25 | 47 |
: | S18+S13 | 58 |
; | S08+S25 | 59 |
< | S19+S15 | 60 |
= | S24+S13 | 61 |
> | S02+S08 | 62 |
? | S03+S25 | 63 |
@ | S06+S14 | 64 |
[ | S16+S12 | 91 |
\ | S29+S17 | 92 |
] | S23+S12 | 93 |
^ | S28+S03 | 94 |
_ | S17+S00 | 95 |
` | S06+S16 | 96 |
{ | S04+S08 | 123 |
| | S20+S12 | 124 |
} | S23+S02 | 125 |
~ | S27+S08 | 126 |
LF / newline | S23+S08 | 10 |
TAB | S29+S00 | 9 |
CR | S27+S03 | 13 |
Copyable names for all 32 signs
| Sign ID | Shape category |
|---|---|
S00 | Asterisk |
S01 | Aviform |
S02 | Circle |
S03 | Claviform |
S04 | Cordiform |
S05 | Crosshatch |
S06 | Cruciform |
S07 | Cupule |
S08 | Dot |
S09 | Finger Fluting |
S10 | Flabelliform |
S11 | Half-Circle |
S12 | Line |
S13 | Negative Hand |
S14 | Open-Angle |
S15 | Oval |
S16 | Pectiform |
S17 | Penniform |
S18 | Positive Hand |
S19 | Quadrangle |
S20 | Reniform |
S21 | Scalariform |
S22 | Segmented Cruciform |
S23 | Serpentiform |
S24 | Spanish Tectiform |
S25 | Spiral |
S26 | Tectiform |
S27 | Triangle |
S28 | Unciform |
S29 | W-Sign |
S30 | Y-Sign |
S31 | Zigzag |
Machine-readable public key (JSON)
{
"name": "CaveScript32",
"encoding_version": "1.0",
"reading_key_url": "https://suposystem.ai/cavescript/",
"description": "Modern character assignments and drawings inspired by prehistoric signs. These are not recovered ancient meanings.",
"reading_order": "Read cells left to right, top to bottom. Each cell contains two ordered signs, left then right. SPACE, LF, TAB and CR each have their own pair. Line wrapping in an image is layout, not an encoded newline.",
"signs": [
{
"id": "S00",
"name": "Asterisk"
},
{
"id": "S01",
"name": "Aviform"
},
{
"id": "S02",
"name": "Circle"
},
{
"id": "S03",
"name": "Claviform"
},
{
"id": "S04",
"name": "Cordiform"
},
{
"id": "S05",
"name": "Crosshatch"
},
{
"id": "S06",
"name": "Cruciform"
},
{
"id": "S07",
"name": "Cupule"
},
{
"id": "S08",
"name": "Dot"
},
{
"id": "S09",
"name": "Finger Fluting"
},
{
"id": "S10",
"name": "Flabelliform"
},
{
"id": "S11",
"name": "Half-Circle"
},
{
"id": "S12",
"name": "Line"
},
{
"id": "S13",
"name": "Negative Hand"
},
{
"id": "S14",
"name": "Open-Angle"
},
{
"id": "S15",
"name": "Oval"
},
{
"id": "S16",
"name": "Pectiform"
},
{
"id": "S17",
"name": "Penniform"
},
{
"id": "S18",
"name": "Positive Hand"
},
{
"id": "S19",
"name": "Quadrangle"
},
{
"id": "S20",
"name": "Reniform"
},
{
"id": "S21",
"name": "Scalariform"
},
{
"id": "S22",
"name": "Segmented Cruciform"
},
{
"id": "S23",
"name": "Serpentiform"
},
{
"id": "S24",
"name": "Spanish Tectiform"
},
{
"id": "S25",
"name": "Spiral"
},
{
"id": "S26",
"name": "Tectiform"
},
{
"id": "S27",
"name": "Triangle"
},
{
"id": "S28",
"name": "Unciform"
},
{
"id": "S29",
"name": "W-Sign"
},
{
"id": "S30",
"name": "Y-Sign"
},
{
"id": "S31",
"name": "Zigzag"
}
],
"characters": [
{
"character": " ",
"label": "SPACE",
"ascii": 32,
"pair": "S22+S09",
"signs": [
22,
9
]
},
{
"character": "!",
"label": "!",
"ascii": 33,
"pair": "S18+S16",
"signs": [
18,
16
]
},
{
"character": "\"",
"label": "\"",
"ascii": 34,
"pair": "S11+S19",
"signs": [
11,
19
]
},
{
"character": "#",
"label": "#",
"ascii": 35,
"pair": "S19+S26",
"signs": [
19,
26
]
},
{
"character": "$",
"label": "$",
"ascii": 36,
"pair": "S28+S27",
"signs": [
28,
27
]
},
{
"character": "%",
"label": "%",
"ascii": 37,
"pair": "S21+S17",
"signs": [
21,
17
]
},
{
"character": "&",
"label": "&",
"ascii": 38,
"pair": "S22+S21",
"signs": [
22,
21
]
},
{
"character": "'",
"label": "'",
"ascii": 39,
"pair": "S15+S30",
"signs": [
15,
30
]
},
{
"character": "(",
"label": "(",
"ascii": 40,
"pair": "S30+S29",
"signs": [
30,
29
]
},
{
"character": ")",
"label": ")",
"ascii": 41,
"pair": "S11+S14",
"signs": [
11,
14
]
},
{
"character": "*",
"label": "*",
"ascii": 42,
"pair": "S15+S08",
"signs": [
15,
8
]
},
{
"character": "+",
"label": "+",
"ascii": 43,
"pair": "S30+S27",
"signs": [
30,
27
]
},
{
"character": ",",
"label": ",",
"ascii": 44,
"pair": "S01+S07",
"signs": [
1,
7
]
},
{
"character": "-",
"label": "-",
"ascii": 45,
"pair": "S31+S01",
"signs": [
31,
1
]
},
{
"character": ".",
"label": ".",
"ascii": 46,
"pair": "S26+S09",
"signs": [
26,
9
]
},
{
"character": "/",
"label": "/",
"ascii": 47,
"pair": "S20+S25",
"signs": [
20,
25
]
},
{
"character": "0",
"label": "0",
"ascii": 48,
"pair": "S27+S23",
"signs": [
27,
23
]
},
{
"character": "1",
"label": "1",
"ascii": 49,
"pair": "S19+S07",
"signs": [
19,
7
]
},
{
"character": "2",
"label": "2",
"ascii": 50,
"pair": "S30+S11",
"signs": [
30,
11
]
},
{
"character": "3",
"label": "3",
"ascii": 51,
"pair": "S16+S30",
"signs": [
16,
30
]
},
{
"character": "4",
"label": "4",
"ascii": 52,
"pair": "S06+S03",
"signs": [
6,
3
]
},
{
"character": "5",
"label": "5",
"ascii": 53,
"pair": "S22+S31",
"signs": [
22,
31
]
},
{
"character": "6",
"label": "6",
"ascii": 54,
"pair": "S07+S00",
"signs": [
7,
0
]
},
{
"character": "7",
"label": "7",
"ascii": 55,
"pair": "S11+S22",
"signs": [
11,
22
]
},
{
"character": "8",
"label": "8",
"ascii": 56,
"pair": "S03+S02",
"signs": [
3,
2
]
},
{
"character": "9",
"label": "9",
"ascii": 57,
"pair": "S02+S20",
"signs": [
2,
20
]
},
{
"character": ":",
"label": ":",
"ascii": 58,
"pair": "S18+S13",
"signs": [
18,
13
]
},
{
"character": ";",
"label": ";",
"ascii": 59,
"pair": "S08+S25",
"signs": [
8,
25
]
},
{
"character": "<",
"label": "<",
"ascii": 60,
"pair": "S19+S15",
"signs": [
19,
15
]
},
{
"character": "=",
"label": "=",
"ascii": 61,
"pair": "S24+S13",
"signs": [
24,
13
]
},
{
"character": ">",
"label": ">",
"ascii": 62,
"pair": "S02+S08",
"signs": [
2,
8
]
},
{
"character": "?",
"label": "?",
"ascii": 63,
"pair": "S03+S25",
"signs": [
3,
25
]
},
{
"character": "@",
"label": "@",
"ascii": 64,
"pair": "S06+S14",
"signs": [
6,
14
]
},
{
"character": "A",
"label": "A",
"ascii": 65,
"pair": "S28+S19",
"signs": [
28,
19
]
},
{
"character": "B",
"label": "B",
"ascii": 66,
"pair": "S12+S19",
"signs": [
12,
19
]
},
{
"character": "C",
"label": "C",
"ascii": 67,
"pair": "S17+S07",
"signs": [
17,
7
]
},
{
"character": "D",
"label": "D",
"ascii": 68,
"pair": "S16+S13",
"signs": [
16,
13
]
},
{
"character": "E",
"label": "E",
"ascii": 69,
"pair": "S00+S27",
"signs": [
0,
27
]
},
{
"character": "F",
"label": "F",
"ascii": 70,
"pair": "S08+S23",
"signs": [
8,
23
]
},
{
"character": "G",
"label": "G",
"ascii": 71,
"pair": "S26+S08",
"signs": [
26,
8
]
},
{
"character": "H",
"label": "H",
"ascii": 72,
"pair": "S21+S15",
"signs": [
21,
15
]
},
{
"character": "I",
"label": "I",
"ascii": 73,
"pair": "S03+S11",
"signs": [
3,
11
]
},
{
"character": "J",
"label": "J",
"ascii": 74,
"pair": "S23+S21",
"signs": [
23,
21
]
},
{
"character": "K",
"label": "K",
"ascii": 75,
"pair": "S14+S24",
"signs": [
14,
24
]
},
{
"character": "L",
"label": "L",
"ascii": 76,
"pair": "S20+S11",
"signs": [
20,
11
]
},
{
"character": "M",
"label": "M",
"ascii": 77,
"pair": "S19+S02",
"signs": [
19,
2
]
},
{
"character": "N",
"label": "N",
"ascii": 78,
"pair": "S15+S27",
"signs": [
15,
27
]
},
{
"character": "O",
"label": "O",
"ascii": 79,
"pair": "S09+S06",
"signs": [
9,
6
]
},
{
"character": "P",
"label": "P",
"ascii": 80,
"pair": "S15+S03",
"signs": [
15,
3
]
},
{
"character": "Q",
"label": "Q",
"ascii": 81,
"pair": "S14+S21",
"signs": [
14,
21
]
},
{
"character": "R",
"label": "R",
"ascii": 82,
"pair": "S14+S20",
"signs": [
14,
20
]
},
{
"character": "S",
"label": "S",
"ascii": 83,
"pair": "S01+S14",
"signs": [
1,
14
]
},
{
"character": "T",
"label": "T",
"ascii": 84,
"pair": "S21+S21",
"signs": [
21,
21
]
},
{
"character": "U",
"label": "U",
"ascii": 85,
"pair": "S27+S09",
"signs": [
27,
9
]
},
{
"character": "V",
"label": "V",
"ascii": 86,
"pair": "S05+S29",
"signs": [
5,
29
]
},
{
"character": "W",
"label": "W",
"ascii": 87,
"pair": "S21+S28",
"signs": [
21,
28
]
},
{
"character": "X",
"label": "X",
"ascii": 88,
"pair": "S19+S11",
"signs": [
19,
11
]
},
{
"character": "Y",
"label": "Y",
"ascii": 89,
"pair": "S23+S11",
"signs": [
23,
11
]
},
{
"character": "Z",
"label": "Z",
"ascii": 90,
"pair": "S22+S03",
"signs": [
22,
3
]
},
{
"character": "[",
"label": "[",
"ascii": 91,
"pair": "S16+S12",
"signs": [
16,
12
]
},
{
"character": "\\",
"label": "\\",
"ascii": 92,
"pair": "S29+S17",
"signs": [
29,
17
]
},
{
"character": "]",
"label": "]",
"ascii": 93,
"pair": "S23+S12",
"signs": [
23,
12
]
},
{
"character": "^",
"label": "^",
"ascii": 94,
"pair": "S28+S03",
"signs": [
28,
3
]
},
{
"character": "_",
"label": "_",
"ascii": 95,
"pair": "S17+S00",
"signs": [
17,
0
]
},
{
"character": "`",
"label": "`",
"ascii": 96,
"pair": "S06+S16",
"signs": [
6,
16
]
},
{
"character": "a",
"label": "a",
"ascii": 97,
"pair": "S28+S26",
"signs": [
28,
26
]
},
{
"character": "b",
"label": "b",
"ascii": 98,
"pair": "S04+S14",
"signs": [
4,
14
]
},
{
"character": "c",
"label": "c",
"ascii": 99,
"pair": "S29+S19",
"signs": [
29,
19
]
},
{
"character": "d",
"label": "d",
"ascii": 100,
"pair": "S21+S20",
"signs": [
21,
20
]
},
{
"character": "e",
"label": "e",
"ascii": 101,
"pair": "S24+S10",
"signs": [
24,
10
]
},
{
"character": "f",
"label": "f",
"ascii": 102,
"pair": "S11+S07",
"signs": [
11,
7
]
},
{
"character": "g",
"label": "g",
"ascii": 103,
"pair": "S24+S17",
"signs": [
24,
17
]
},
{
"character": "h",
"label": "h",
"ascii": 104,
"pair": "S16+S01",
"signs": [
16,
1
]
},
{
"character": "i",
"label": "i",
"ascii": 105,
"pair": "S27+S25",
"signs": [
27,
25
]
},
{
"character": "j",
"label": "j",
"ascii": 106,
"pair": "S25+S05",
"signs": [
25,
5
]
},
{
"character": "k",
"label": "k",
"ascii": 107,
"pair": "S26+S13",
"signs": [
26,
13
]
},
{
"character": "l",
"label": "l",
"ascii": 108,
"pair": "S27+S06",
"signs": [
27,
6
]
},
{
"character": "m",
"label": "m",
"ascii": 109,
"pair": "S09+S04",
"signs": [
9,
4
]
},
{
"character": "n",
"label": "n",
"ascii": 110,
"pair": "S24+S26",
"signs": [
24,
26
]
},
{
"character": "o",
"label": "o",
"ascii": 111,
"pair": "S00+S31",
"signs": [
0,
31
]
},
{
"character": "p",
"label": "p",
"ascii": 112,
"pair": "S28+S30",
"signs": [
28,
30
]
},
{
"character": "q",
"label": "q",
"ascii": 113,
"pair": "S23+S30",
"signs": [
23,
30
]
},
{
"character": "r",
"label": "r",
"ascii": 114,
"pair": "S17+S28",
"signs": [
17,
28
]
},
{
"character": "s",
"label": "s",
"ascii": 115,
"pair": "S29+S29",
"signs": [
29,
29
]
},
{
"character": "t",
"label": "t",
"ascii": 116,
"pair": "S21+S23",
"signs": [
21,
23
]
},
{
"character": "u",
"label": "u",
"ascii": 117,
"pair": "S31+S08",
"signs": [
31,
8
]
},
{
"character": "v",
"label": "v",
"ascii": 118,
"pair": "S05+S13",
"signs": [
5,
13
]
},
{
"character": "w",
"label": "w",
"ascii": 119,
"pair": "S26+S16",
"signs": [
26,
16
]
},
{
"character": "x",
"label": "x",
"ascii": 120,
"pair": "S21+S00",
"signs": [
21,
0
]
},
{
"character": "y",
"label": "y",
"ascii": 121,
"pair": "S31+S17",
"signs": [
31,
17
]
},
{
"character": "z",
"label": "z",
"ascii": 122,
"pair": "S08+S14",
"signs": [
8,
14
]
},
{
"character": "{",
"label": "{",
"ascii": 123,
"pair": "S04+S08",
"signs": [
4,
8
]
},
{
"character": "|",
"label": "|",
"ascii": 124,
"pair": "S20+S12",
"signs": [
20,
12
]
},
{
"character": "}",
"label": "}",
"ascii": 125,
"pair": "S23+S02",
"signs": [
23,
2
]
},
{
"character": "~",
"label": "~",
"ascii": 126,
"pair": "S27+S08",
"signs": [
27,
8
]
},
{
"character": "\n",
"label": "LF / newline",
"ascii": 10,
"pair": "S23+S08",
"signs": [
23,
8
]
},
{
"character": "\t",
"label": "TAB",
"ascii": 9,
"pair": "S29+S00",
"signs": [
29,
0
]
},
{
"character": "\r",
"label": "CR",
"ascii": 13,
"pair": "S27+S03",
"signs": [
27,
3
]
}
]
}
English and programming text
CaveScript32 changes the written appearance of a message while preserving its source characters. An English sentence remains English. A Python or other ASCII source program can be translated back to its original text before being run in its own language. Keep its punctuation and indentation exactly.
You can put an inscription in a book, a game environment, an image, or a website. Place suposystem.ai/cavescript/ beside it so readers can choose how much help they want. Short messages may have several plausible readings without the key.
Downloads
Download the four-page public reading key (PDF): all 32 signs, all 98 character assignments, and the sample inscription.
Where the shapes came from
Michael’s interest in prehistoric artifacts prompted the choice of shapes. The collection draws on the categories shown in The Geometric Signs of Ice Age Europe, associated with Genevieve von Petzinger’s research. Read the archaeological background at the Bradshaw Foundation.
The drawings and character assignments here are modern. They do not claim to recover the original meanings of prehistoric signs. The 32 categories are a source of inspiration, not a complete inventory of prehistoric symbols worldwide.
CaveScript32 / character encoding version 1.0 / Michael S. Moniz / SupoSystem.ai.