Psi error codes#
On this page
Every error the compiler gives has a code, for tools and links (each
entry's address is this page with # and the code, as #E203). The
editor shows the sentence with its code, linked to its entry here. The
common errors have a word on why they happen and a before and after; the
codes marked internal are never a formula's fault. What each name does is
in the Psi language reference.
Characters and numbers (E0xx)#
E001 · a character Psi does not know
I don't understand
…
Psi has numbers, names, a few operators and brackets; anything else, such as ^, $ or a double quote outside a declaration or print(…), is not part of it.
Take the character out. Text in quotes only goes on name, about and control lines and in print(…); for a character's code write it in single quotes, 'A'.
Before:
gray(x ^ 2)
After:
gray(x * x)
E002 · a bad number
…is not a number
Write the number with digits and at most one point, as 12 or 0.5.
E003 · a bad colour
a colour is # and 3 or 6 hex digits (0-9, a-f), as #f80 or #ff8800
Write # and then 3 or 6 hex digits.
E004 · a number out of range
numbers must be between -32768 and 32767
Use a smaller number, or scale it down with a multiply.
E005 · a number run into a name
…is not a number or a name (to multiply, write… * …)
Psi never multiplies by putting things side by side, as maths on paper does.
Put a * between the number and the name.
Before:
gray(2x)
After:
gray(2 * x)
E006 · a bad character
a character goes in quotes, one at a time: 'A', '7' or ':' (there are no strings)
Write one character between single quotes, as 'A'.
Syntax (E1xx)#
E101 · something else was expected
expected … here, found …
Two values side by side with nothing between them: usually an operator or a comma is missing.
Write what the message says is expected at that place.
Before:
v = x y
gray(v)
After:
v = x * y
gray(v)
E102 · a ( never closed
this
(is never closed — add)
Every ( needs its ): the message points at the one left open.
Add the ) that closes it.
Before:
v = (x + 1
gray(v / 2)
After:
v = (x + 1)
gray(v / 2)
E103 · a block never closed
this
layer {is never closed — add}
A block (layer, draw, fn, for, if, sprite) runs to its }; the formula ended first.
Add the } that closes the block.
Before:
layer {
gray(x)
After:
layer {
gray(x)
}
E104 · the colour is not last
the colour has to be the last line (move this to the end)
The last line is the colour, and only the last: lines after it would never be used.
Move the colour line to the end of the formula (or the layer or function).
Before:
gray(x)
v = 1
After:
v = 1
gray(x * v)
E105 · loop inside a layer
loopis the whole formula's: put it on a line of its own, outside the layers
Move the loop line out of the layer.
E106 · a value is missing
a value is missing here
An operator, a = or a , with nothing after it.
Write the value that goes there.
Before:
v =
gray(v)
After:
v = x
gray(v)
E107 · a [ never closed
this
[is never closed — add]
Add the ] that closes it.
E108 · a bare value that is not the colour
only the last line can be a bare value (the colour) — did you mean
name = …?
A line that is only a value, not the last line: it would be worked out and thrown away, so it is most likely a name left out.
Give the value a name with name = …, or make it the last line.
Before:
x + 1
gray(x)
After:
v = x + 1
gray(v / 2)
E109 · loop set twice
loopis already set
Keep one loop line.
E110 · loop without a time
looptakes a number of seconds, e.g.loop 8, orforeverfor one that goes on without repeating
Write loop and a number of seconds, or loop forever.
E111 · use left in a formula
useputs a formula in by its name, as a functionfn p(x, y) { … }, when you leave the line
Finish the line (the editor puts the formula in), or write the function out.
E112 · an empty formula
empty: write a colour, e.g.
hsv(x + t/4, 1, 1)
Write a colour as the last line.
E113 · no colour at the end
the last line should be the colour, e.g.
rgb(r, g, b),hsv(h, s, v)orpal(fire, k)
End the formula with a colour line.
E114 · the wrong number of values
…takes … values, but got …
Each function takes a fixed number of values (the reference's tables say how many); colours may take one more, how much of the pixel they cover.
Give the function the number of values it takes.
Before:
gray(x, 2, 3)
After:
gray(x, 0.5)
E115 · the wrong values for a character
…takes 3 values (…, a column and a row; and a font, normal, small or bold, if you like), but got …
Give it the value, a column and a row, and a font if you like.
E116 · the wrong values for pick
picktakes a number, then the values to pick from:pick(k, a, b, …)
Write pick(k, a, b, …): a number, then the values.
E117 · the bold font has digits only
the bold font has digits only: use
digit(n, x, y, bold)
Use digit(…) for the bold font.
E118 · not a font
the last value of
…is a font: normal (the default), small or bold, found …
Write normal, small or bold, or leave the font out.
E119 · the wrong values for rgb of a colour
rgbof a colour takes the colour and, if you like, how much of the pixel it covers (0 to 1)
Write rgb(colour) or rgb(colour, cover).
E120 · coverage on an inner colour
how much a colour covers goes on the whole line:
rgb(mix(…), k), not on anrgb(…)inside it
Move the coverage to the outer rgb(…).
Names (E2xx)#
E201 · an unknown name
unknown name
…(did you mean…?)
A name is used before it is set, or is spelled differently where it is set.
Set the name on an earlier line, or fix the spelling.
Before:
gray(level)
After:
level = x
gray(level)
E202 · an unknown function
unknown function
…(did you mean…?)
Only the built-in functions can be called; the message suggests the nearest one.
Fix the spelling, or use a function from the cheat sheet.
Before:
gray(sine(x))
After:
gray(sin(x))
E203 · a name that is already a function, table, sprite, palette or control
…is already the name of a … (line …) — pick another name
A value may be set again (v = v * 2 reads the v before it), but functions, tables, sprites, palettes and controls keep their names: neither a value nor another of them can take one. Give it a name of its own.
Give it a name of its own. (A value may be set again, v = v*2, and a layer or function may set a name from outside: only functions, tables, sprites, palettes and controls keep theirs, and none of them takes a value's name.)
Before:
table T = 0.5, 1
T = 2
gray(T[0])
After:
table T = 0.5, 1
k = 2
gray(T[0] * k)
E204 · a word of the language as a name
…is a word of the language; pick another name
The language's own words (loop, layer, part, use, draw, for, table, fn) can't be names; any built-in value or function's name can (it is then yours).
Pick another name: loop, layer, part, use, draw, for, table and fn are the language's own words (any built-in value's name may be yours, and a built-in function's as a value; not a palette's or sun, moon or replay).
Before:
layer = 1
gray(x * layer)
After:
level = 1
gray(x * level)
E205 · a function used as a value
…is a function: write…(…)
A function's name alone is not a value: it needs its brackets and values.
Call it with brackets: name(…).
Before:
gray(sin)
After:
gray(sin(x))
E206 · a palette used as a value
…is a palette: use it aspal(…, k)on the last line
Use it as pal(name, k) on the last line.
E207 · a font used as a value
…is a font: use it asdigit(n, x, y, …)
Use it as the font of digit(…).
E208 · a name that is a palette's
…is a palette's name; pick another name
Pick another name.
E209 · a value called like a function
…is a value, not a function
Leave the brackets off.
E210 · a keyword inside a line
…can only start a line
Move it to the start of a line.
E211 · an unknown palette
unknown palette
…(there are fire, ocean, ice, chrono, amber, rainbow and gray…)
The palettes are fire, ice, ocean, chrono, amber, rainbow and gray, and the ones the formula makes with palette.
Use one of the listed palettes, or write your own with palette name = #…, #….
Before:
pal(lava, x)
After:
pal(fire, x)
E212 · a palette expected
the first value of
…is a palette: fire, ocean, ice, chrono, amber, rainbow or gray
Start with a palette name.
E213 · an unknown blend
unknown blend
…(a layer goes over, add, multiply, screen, max or min)
Use one of the listed blends.
E214 · ink(n) without a whole number
ink(n)takes a whole number from 1 to 255:ink(16)is the canvas in 16 levels
Write the number of levels, as ink(16), and draw with inks k/16.
E215 · a function named as a built-in one
…(…)is a built-in function: afntakes a name of its own
Name the function something else, as fn wave(a) = …. (A value may take a built-in function's name: sin = 0.5, and sin(…) is still the function.)
E216 · a name that is the dotted inputs' group
…is the built-in inputs' name (…); pick another name
Pick another name: sun, moon and replay are the start of the built-in inputs sun.alt, moon.phase, replay.game and the rest.
E217 · since(…) or was(…) of the formula's own value
…is this formula's own value here:…(…)reads a built-in input, so give yours another name
Rename your value (light = …): the formula's own names win everywhere, so since(daylight) would otherwise mean two things on one line.
E218 · a chained comparison
comparisons don't chain: write
… and …(…would compare…, 1 or 0, with …)
Join two comparisons with and: 0 < x and x < 0.5 (a comparison gives 1 or 0, so 0 < x < 0.5 would compare that with 0.5).
Placement and levels (E3xx)#
E301 · a frame { } block
there are no
frame { }blocks: a value is worked out once a frame by itself when it reads only the time, the clock and the controls; write its lines without the block
There are no frame { } blocks: a value that reads only the time, the clock and the controls is worked out once a frame by itself.
Take the lines out of the block, as they are.
Before:
frame {
k = t / 8
}
gray(x * k)
After:
k = t / 8
gray(x * k)
E302 · a colour used as a value
#…is a colour, not a number: use it on the last line, as#f80 * kormix(#000, #f80, k)
A colour such as #f80 is not a number: it goes in the colour line, where it can be dimmed or mixed.
Use the colour in the colour line, not in a number's place.
Before:
v = #f80
gray(v)
After:
v = x
#f80 * v
E303 · a colour outside a layer
with layers, every colour goes inside one: put this line in
layer { … }
Once a formula has a layer, each colour belongs to one: a colour line outside them would have nothing to go on.
Put the colour line inside a layer.
Before:
layer { gray(x) }
gray(y)
After:
layer { gray(x) }
layer add { gray(y) }
E304 · a colour function in a sum of colours
…(…)is a whole colour: it can't be combined with others by+,*,? :or a function (only#…andrgb(r, g, b)can, asc ? #f80 : #000)
Use #… or rgb(…) in the sum, or give the function its own line.
E305 · a colour that can't be summed
…(…)is a whole colour: it can't go into a sum, only be scaled,… * k(#…andrgb(r, g, b)colours can:#fff * k,mix(#000, #f80, k))
Scale it on its own line, or use #… or rgb(…) colours in the sum.
E306 · a colour function that is not the whole line
…(…)is a whole colour: it can only be the last line (of the formula or a layer)
Make it the whole last line.
E307 · a colour inside rgb(r, g, b)
rgb(r, g, b)takes three numbers, not colours: write a colour alone, as#f80 * k
Give rgb(r, g, b) three numbers, or write the colour on its own.
Limits (E4xx)#
E401 · a formula that is too long to read
too long: a formula can be … bytes at most
Shorten the formula.
E402 · too many steps
this formula is too long for the panel: … steps (per frame …, draw …, per row …, per pixel …), the limit is … (or: … — simplify it)
The panel works a formula out for 4,096 pixels at every frame, so the steps a formula takes are limited. Values that change less often (once a row, once a frame) cost much less: move what you can out of the pixel.
Simplify the formula: fewer or simpler steps.
E403 · too many live values
this formula holds more than … values at once (the panel's registers): use each sooner
Set fewer names, or use each value sooner.
E404 · too many numbers
this formula needs … numbers and once-a-frame values, more than the … it can hold (steps: per frame …, draw …, per row …, per pixel …): use fewer
Use fewer different numbers and steps: the section with the most steps is the place to look.
E405 · nested too deeply
this is nested too deeply — split it into named steps
Split it into named steps, name = ….
E406 · a loop time out of range
the loop must be between 0.1 and 3600 seconds
Use a loop between 0.1 and 3600 seconds.
E407 · a layout fault internal
this formula could not be laid out (a bug in Psi) — please report it
Internal: a bug in Psi: please report it, with the formula. It is never the formula's fault.
Report it with the formula.
E408 · not enough memory
not enough memory for this Formula right now
The panel didn't have the memory to compile this Formula just then (a GIF, a look or a transition was holding it): not the formula's fault. It plays when it is next due; a shorter formula needs less.
Try again, or make the Formula smaller.
Layers (E5xx)#
E509 · a layer inside a layer
a layer can't go inside another — close this one with
}first
Close the first layer before starting another.
E510 · a layer without a colour
this layer ends without a colour: its last line is
rgb(…),hsv(…),pal(…)orgray(…)
End the layer with a colour.
Version (E6xx)#
E601 · a newer Psi
this formula needs a newer OpenDMD: it is written for Psi …, this one has Psi …
Update OpenDMD, or write the formula for an older Psi.
E603 · a bad psi version
psitakes the language's version, a whole number:psi 1
Write psi 1.
E604 · psi not on the first line
psi 1goes on the formula's first line
Move psi 1 to the first line.
The draw stage, paint and functions (E7xx)#
E701 · draw { } or a table inside a layer
draw { }goes at the top of the formula, not inside a layer
Move it out of the layer, to the top of the formula.
E702 · a second draw { } block
there can be one
draw { }block (functions that draw are called inside it)
Merge the draw { } blocks into one.
E703 · a bad for line
fortakes a name and a count, e.g.for k < 12 { … }(a whole number from 1 to 1024)
Write for k < 12 { … } with a whole count from 1 to 1024.
E704 · too many loop turns
this formula draws too much a frame (… loop turns in all; the limit is …) — fewer or shorter loops
Use fewer or shorter loops.
E705 · for nested too deep
forloops go two deep at most
Use at most two for loops, one inside the other.
E706 · drawing outside draw { }
…(…)draws: it goes on a line of its own insidedraw { }
line and dot draw into the frame's ink once a frame, so they live in draw { }; the pixels read what they drew as ink.
Put the line inside draw { }.
Before:
line(0, 0, 127, 31)
gray(1)
After:
draw {
line(0, 0, 127, 31)
}
gray(ink)
E707 · a table that is not numbers
a table holds numbers only, as in
table T = 1, -2, 0.5
Write only numbers in the table.
E708 · a per-pixel value in draw { }
draw { }runs once a frame, before any pixel, but…(line …) is per pixel: it reads…(or: but this uses…(…))
draw { } runs once a frame, before the pixels: there is no pixel position there. Work in pixels, with numbers and the time.
Use only values that are the same everywhere inside draw { }.
Before:
draw { dot(x, 1) }
gray(ink)
After:
draw { dot(t * 16, 1) }
gray(ink)
E709 · a loop counter set twice
…is a loop counter: it can't be set (or:…is already a loop counter here)
Use another name.
E710 · a table read wrongly
…[…]reads a table, and…is not one
Read a table with NAME[k].
E711 · a table without a name
a table needs a name, as in
table T = 1, 2, 3
Name the table.
E712 · the wrong values for line or dot
linetakes x0, y0, x1, y1 (pixels from the top left) and, if you like, the ink at each end (0 to 1): … given (dot: x, y and, if you like, its ink)
Give line four values and dot two.
E713 · a line that does not belong in draw { }
inside draw { } go
name = value,for k < N { … },if c { … }and drawing:line,dot,pset,rect,rectfill,circ,circfill,trifill,cls,spr,
Use only those lines inside draw { }; the colour line goes after it.
E714 · ink without draw { }
inkneeds adraw { }block to read from
Write a draw { } block that draws what ink reads.
E715 · for outside draw { }
forgoes insidedraw { }:draw { for k < 12 { … } }
Put the loop inside draw { }.
E716 · a table without [k]
…is a table: read one of its numbers,…[k](k from 0)
Read a number of the table with NAME[k].
E720 · too many colours to paint with
a formula paints with … colours at most (each of a palette's 32 counts)
Paint with fewer colours: a palette used in pal(P, v) takes 32 of the 127.
E721 · not a colour to paint with
a colour to paint with is
#…(as #f80),pal(palette, v)orgray(v)
End the call with a colour: #f80, pal(fire, v) or gray(v) (for brightness into ink, line and dot take a number).
E722 · spr of something that is not a sprite
sprdraws a sprite:spr(name, x, y), its name asprite name { … }'s
Name a sprite block, as spr(ship, x, y).
E723 · spr without its place
… takes a sprite and its place
Give the sprite's place: spr(ship, x, y), and maybe a flip (1 across, 2 down, 3 both).
E724 · a text too long to print
Split the text into two prints.
E725 · no room for a text
this text doesn't fit: tables, sprites and texts hold 1024 numbers in all
Use shorter texts, or fewer tables and sprites.
E726 · a font print doesn't have
normal,smallor (for a value)bold
Write normal, small or, for a number, bold.
E727 · something after a paint call's values
…: expected
)here
Close the call after its colour (and, for print, its font and digits).
E740 · a function written wrongly
a function is
fn name(a, b) = value, orfn name(a, b) { … }for lines that draw
Write fn name(a, b) = value, or fn name(a, b) { … } around lines that draw.
E742 · a function's value that is not a name
a function's values are names:
fn name(a, b) = …
Name each value the function takes: fn ring(cx, r) = ….
E743 · a function with no body
after a function's values:
= value, or{ … }for lines that draw
Put = value after the brackets, or { … } around lines that draw.
E744 · an empty function
function
…has nothing in it
Write what the function works out, or the lines it draws.
E745 · a function calling itself
…calls itself: a function can't (there are no loops of calls)
Use a for loop in draw, or write the steps out.
E746 · a drawing function used as a value
…draws: call it on a line of its own insidedraw { }
Call it on its own line in draw { }: palm(30, 31, 1).
E747 · more than one value on a function's last line
function
…'s last line is one value:fn …(…) = value
Write one value after =, or use { … } for lines that draw.
E748 · a value function called as lines
…is a value, not lines that draw: use it in one,v = …(…)
Use it in a value, v = name(…), or in a call's values.
E749 · too many calls
this formula calls its functions too many times over — simplify it
Call a function fewer times, or set its value once as a name and use the name.
E750 · a part
there are no parts: write a function,
fn p(x, y) { … }, and call it,p(x*2, y)
Write fn p(x, y) { … } with the part's lines; draw it with p(x, y) as the last line.
E751 · a value before a function's last line
only a function's last line is its value: set a name here (
v = …), or move it last
Set a name on each line but the last: v = ….
E752 · a whole-colour function inside a value
…(…)is a whole colour: use it alone on the colour line (only#…andrgb(r, g, b)go into sums)
Use it alone as the last line, or make its last line #… or rgb(…) so it can be mixed.
Frame rate (E8xx)#
E801 · a bad fps
fpsis 25, 50 or 100 (every refresh is 100: or writesmooth)
The panel draws a Formula every refresh of its scan (smooth, or fps 100), every 2nd (the default, fps 50) or every 4th (fps 25); nothing in between.
Write smooth for every refresh, or fps 100, fps 50 or fps 25.
Before:
fps 60
gray(x)
After:
smooth
gray(x)
E802 · smooth or fps inside a layer
the rate (
smoothorfps) is the whole formula's: put it on a line of its own, outside the layers
Move the smooth or fps line out of the layer.
E803 · the rate set twice
the rate is already set: keep one
smoothorfpsline
Keep one smooth or fps line.
Growing values, sprites, palettes, slow layers and declarations (E9xx)#
E901 · a value that grows without end
tgrows without end inloop forever, and this can't take it: use frac(t*k), t % n, sin(t*k), noise(t*k, y, z), a comparison, min, max or smoothstep
In a loop forever formula t grows without end, and most arithmetic on it would lose its precision or overflow. Wrap it first: frac, %, sin and noise keep it in range.
Use frac(t*k), t % n, sin(t*k) or similar in its place.
Before:
loop forever
gray(t*x)
After:
loop forever
gray(frac(t/4 + x))
E902 · too many noises of growing values
noise of values that grow without end: four different ones at most — share one, as noise(u + k, …)
Share one noise between the places that need it.
E903 · seed outside loop forever
seedis for formulas that go on without repeating (loop forever): a new one each time it plays
Add loop forever, or leave seed out.
E904 · too many growing values
this formula has too many values that grow without end (more than …): share one, as frac(u*k) of one
u
Use fewer values that grow without end.
E905 · a colour fed a growing value
a colour can't take a value that grows without end and changes across the panel (
tin aloop foreverformula): use frac(…) of it, or min(t/k, 1) (or: …, asv(line …) does: use frac(v) or min(v/k, 1))
A colour has to be worked out from values that stay in range; t in a loop forever formula does not.
Wrap it in frac(…), or limit it with min(t/k, 1).
Before:
loop forever
v = t + x
gray(v)
After:
loop forever
v = frac(t/8 + x)
gray(v)
E906 · drawing at a growing value
a value that grows without end can't be drawn at: use frac(t*k)*128, t % n or min(t, k)
Use frac(t*k)*128, t % n or min(t, k) as the place.
E907 · a growing value with a per-pixel part
a value that grows without end plus a part per pixel or row only goes into frac, sin, cos, tri, saw, sqr, noise, % or a multiply: add the pixel's part there, as frac(t*k) + x or sin(t*k + x)
Add the pixel's part inside frac, a wave or noise: frac(t*k) + x, sin(t*k + x).
E908 · phase in loop forever
phaseis the position in the loop, andloop foreverhas none: use frac(t/k), a place that comes round every k seconds
phase is t divided by the loop's length, and a loop forever formula has no length to divide by.
Give the formula a loop N line, or write frac(t/k) with a period k of your own.
Before:
loop forever
gray(frac(x + phase))
After:
loop forever
gray(frac(x + t/8))
E910 · a sprite's key too long
a sprite's key has 16 characters at most
Use at most 16 characters in the key.
E911 · a sprite inside a layer
a sprite goes at the top of the formula, not inside a layer
Move the sprite out of the layer.
E912 · a sprite without its key
a sprite starts with its key:
key . 0, R 1, D 2(each character, then the number it reads as)
Start the sprite with a key line.
E913 · a bad key entry
a key entry is a character (not ; { } , - / or a space) and its number, as
R 1or. -0.5, separated by commas
Write each entry as a character, a space and its number, with commas between.
E914 · a character not in the key
…is not in the sprite's key
Add the character to the key, or change the row.
E915 · sprite rows of different widths
a sprite's rows are as wide as its first (… characters), at most 64
Make every row as wide as the first, at most 64.
E916 · a sprite with no rows or too many
a sprite has 1 to 32 rows of characters, after its key
Use 1 to 32 rows.
E917 · a sprite without [u, v]
…is a sprite: read its pixels,…[u, v](column, row from its top left)
Read the sprite at a column and a row, NAME[u, v].
E918 · a sprite read wrongly
a sprite is read at a column and a row:
…[u, v]
Read a sprite with NAME[u, v].
E919 · a sprite never closed
this
sprite {is never closed — add}on a line of its own
Add a } on a line of its own.
E920 · a character twice in the key
…is in the key twice
Keep one entry for each character.
E921 · a palette inside a layer
a palette goes at the top of the formula, not inside a layer
Move the palette out of the layer.
E922 · a palette of the wrong size
a palette is 1 to 32 colours:
palette sea = #003, #06c, #fff(pal(sea, 0) is the first, pal(sea, 1) the last)
Write 1 to 32 colours, each as #f80.
E923 · too many palettes
a formula can have … palettes of its own at most
Use fewer palettes (a palette in a tween's half takes half of one).
E924 · too many numbers in tables and sprites
tables and sprites hold 1024 numbers in all — this would make …
Make the tables and sprites smaller.
E925 · a palette's colour named twice
…already names a colour of…: give this one another name
Give each named colour of a palette its own name.
E926 · a palette's colour named n or step
nandstepare every palette's own (….n,….step): name this colour another way
Pick another name for the colour: P.n is the palette's count and P.step the step between colours.
E927 · an unknown colour of a palette
palette
…has no colour named…: name it in its line, as… #f80
Name the colour on the palette's line (palette road = black #000, kerb #806), or use another of its names.
E931 · cycle turned by a value that changes along a row
cycleturns a whole row at once (by t, a frame value or py), but…(line …) is per pixel: it reads…
cycle turns a whole row's palette at once, so how far it turns can change with the time or the row, not along the row.
Turn it by t, a value of t, or py.
Before:
cycle(fire, x, x)
After:
loop 4
cycle(fire, x, t/4 + y)
E932 · cycle or tween of gray
cycleturns a palette of colours, and gray is not one: write your own,palette g = #000, #fff
Write your own palette.
E933 · too many palettes with cycle
a formula has room for … palettes that
palandcycleread: its own (… here) and each palettecycleturns by another value (… here)
Read fewer palettes with pal and cycle (tweens may read more), or turn fewer by different values.
E934 · cycle without its turn
expected
,and the turn (as incycle(fire, v, t/4)) here, found …
Write the turn after the picture: cycle(palette, v, turn).
E935 · the wrong values for pal or cycle
…takes a palette (and how much of the pixel it covers, 0 to 1, if you like); found …
Give it a palette and a value (cycle also takes the picture and the turn).
E936 · a tween mixed by a value that changes across the panel
tweenmixes a palette once a frame (by t or a frame value), but…(line …) is per pixel: it reads…
Mix it by t, a value of t, a slider or another once-a-frame value.
E937 · a palette's half of the wrong palettes
a palette's half is a tween of palettes of your own with 16 colours at most:
…is not one
In a half, tween palettes of your own of 16 colours or fewer (tweens of them inside are fine).
E938 · a tween painted with
…is a tween, worked out every frame: paint takes a palette of colours (palette p = #000, #fff)
Paint with a palette of colours, or with pal(P, v) of one of the tween's palettes.
E939 · tweens nested too deeply
the tweens need more than … palettes worked out at once: nest them less deeply, or tween fewer palettes that only tweens read
Nest tweens less deeply (a tween as the first palette costs nothing), or read the palettes they make with pal.
E941 · rate above the bottom
rategoes on the bottom layers only: the first layer, or the first few one after another
Put rate on the bottom layers only.
E942 · a bad rate
ratetakes a whole number of frames, 2 to …:layer rate 4 { … }is redrawn every 4th frame
Write a whole number from 2 to the limit.
E943 · different rates
the slow layers share one
rate: give each the same number
Give the slow layers the same rate.
E944 · a rate layer reading the picture
a
ratelayer is drawn on its own: it can't readink,ur,ug,uborul
Do not read ink, ur, ug, ub or ul in a rate formula.
E946 · rate before the blend
write the blend first:
layer add rate 4 { … }
Write the blend, then rate.
E947 · only rate layers
a
ratelayer is the slow one under a layer that moves: add a layer above it, or leaverateout
Add a layer above, or leave rate out.
E948 · a bottom rate layer that does not cover
the bottom
ratelayer draws the whole panel: make it cover everything (layer rate N { … }with no blend and no coverage)
Leave the blend and the coverage off the bottom rate layer.
E951 · a declaration below other lines
…goes in the formula's header, at its top among thename,about,control,look,loopandsmoothlines, before its other lines
The header (name, about, control, look, loop, smooth, in any order) says what the formula is, so it comes first, before anything it works out.
Move it up into the header, the lines at the top (any order there).
Before:
loop 4
v = x
name "Late"
gray(v)
After:
loop 4
name "Late"
v = x
gray(v)
E952 · a declaration twice
…is already set on line …
Keep one line.
E953 · text in quotes not closed
text in quotes ends with
"on the same line
Close the quotes on the same line.
E954 · a character that can't be in quotes
text in quotes can't have
<,>,\or a control character (a tab too) in it
Take it out.
E955 · text too long
too long: this text can be … characters at most
Shorten the text.
E956 · text missing
this takes its text in quotes, e.g.
name "Sunrise"
Write the text in quotes.
E957 · a bad control line
a control is
control NAME lo..hi = default "Label"orcontrol NAME = word, word, …
A control is a slider (control NAME lo..hi = default "Label") or a row of buttons (control NAME = word, word).
Write it as shown.
Before:
control k 1 = 2
gray(k)
After:
control k 0..2 = 1 "Level"
gray(k / 2)
E958 · too many controls
a formula has three controls at most (a, b and c)
Keep three controls at most.
E959 · a range that does not go up
a range goes from the lower number to the higher, e.g.
0..1
Write the lower number first.
E960 · a default outside the range
the default is outside the control's range
Choose a default inside the range.
E961 · a choice of the wrong size
a choice has 2 to 6 words
Give 2 to 6 words.
E962 · a word twice in a choice
…is a choice already
Use each word once.
E963 · a control out of its slot
…is the … control's letter: give this one another name (controls take a, b, c in order)
Name it something else, or put it in its slot.
E964 · a bad look line
looktakes a blend (over, screen, add, multiply, max or min) and an amount from 0 to 100
Write look, a blend and an amount from 0 to 100.
E965 · a blend on a formula with layers
a formula with layers goes over the GIF as a look: write
lookorlook over N
Write look or look over N.
E966 · a choice word that is not a name
a choice is words (names) between commas:
control NAME = word, word, …
Write names between commas.
E967 · more than a declaration takes
expected the end of the
…line, found … (one declaration a line)
Put one declaration on a line.
E968 · an unknown blend in a look
a look's blend is one of over, screen, add, multiply, max, min
Use one of the listed blends.
E969 · text that hides or reorders
text in quotes can't have characters that hide or reorder text (zero-width, direction marks, line separators)
Take them out.
E970 · a scene's when that changes along a row
a scene's
whenis worked out once a frame or once a row (by t, a frame value or py), but…(line …) is per pixel: it reads…
Make when a value of t, the clock, the sliders or the row (py, y); choose per pixel inside the scene instead.
E971 · something other than values in a scene
a scene holds values:
name = …lines (its colours, drawing and palettes go outside it)
Keep name = … lines in the scene; put colours, draw, layer, palette and another scene outside it.
E972 · too many scenes
a formula can have … scenes at most
Join scenes that share a condition, or pick inside one.
E973 · a rate layer reading a scene
a
ratelayer can't read a scene's per-pixel values: work them out outside the scene, or leaverateout
Work the value out outside the scene, or leave rate out.
E974 · a table too long
a table holds 256 numbers at most — this one has …: split it in two
Split the table in two and read the second half from the other.
E975 · a built-in input that doesn't exist
….…is not a built-in input:…has …
Use one of the names listed, as sun.alt or replay.game.
E976 · since or was of something that isn't a built-in input
…(…)takes a built-in input's name, as in…(replay.game): …
Give it one of the built-in inputs listed (since and was follow the panel's own values, not the formula's).
E977 · too many built-in inputs
a formula can read … built-in inputs at most (each
sinceandwasone more) — this one reads …
Read fewer built-in inputs, or fewer since and was of them.
