GAME CONCEPT • Considerations & Specifications
Mondriano
Last update: 15 Jan 2026

“Masculine and feminine, vertical and horizontal.” ~1910

“The surface of things gives enjoyment, their interiority gives life.” ~1911

“A form must be of its own time if it is to be recognized: one cannot relate to what one is not or does not have – Thus all that is of the past is to be rejected.” ~1913

“Art is higher than reality and has no direct relation to reality. To approach the spiritual in art, one will make as little use as possible of reality, because reality is opposed to the spiritual. We find ourselves in the presence of an abstract art. Art should be above reality, otherwise it would have no value for man.” ~1914

“I am searching for the proper harmony of rhythm and unchanging proportion… And I cannot tell you how difficult it is.” ~1919

“[Paris, as modern city] is beautiful in its perfection, but perfection means death and decay. Thus interfering with the process of dying is a crime against perfection: it stands in the way of a higher perfection.” ~1920

“Well, I think my paintings are fast enough already…” ~1930

“Vertical and horizontal lines are the expression of two opposing forces; they exist everywhere and dominate everything; their reciprocal action constitutes 'life'. I recognized that the equilibrium of any particular aspect of nature rests on the equivalence of its opposites.” ~1937

“Now the only problem is to destroy these lines also through mutual opposition… I think that the destructive element is too much neglected in art.” ~1943

“Human culture reveals an opposition: diminution of the instinctive faculties and development of the intuitive capacity. A cultivation of instinctive faculties produces human degeneration; a cultivation of intuitive capacities creates human progress.” ~1944

Abstract
Inspired by neoplasticism paintings of the Tableau/Composition series by Pieter Cornelis Mondriaan (1872 - 1944).

With an algorithm to create such textures procedurally, we could generate decent arty levels for a game, where players must collect all dots on the black pathways, reminiscent of Pac-Man.
Statistics
For basic analysis we look at a random assortment of typical paintings in that art style, and try to dissect their structure.
Here they are after applying a normalization step (snap-to-grid):

Statistics :: Rectangles & colours
Size / PartsRectanglesColours
1×11×21×31×42×21×51×62×31×71×82×43×33×44×4WhiBlkRedYelBluGra
1234567891216
72
(12×6)
2369-15-----1--112
(32)
2
(3)
3
(22)
4
(10)
2
(5)
-%
26.0939.14-4.3521.74-----4.35--4.3552.17
(44.44)
8.7
(4.17)
13.04
(30.56)
17.39
(13.89)
8.7
(6.94)
-
144
(12×12)
27-15121213--1-1-8
(42)
4
(26)
3
(16)
4
(21)
3
(15)
5
(24)
%
-3.718.523.77.413.77.4148.15--3.7-3.7-29.63
(29.17)
14.81
(18.06)
11.11
(11.11)
14.81
(14.58)
11.11
(10.42)
18.52
(16.67)
99
(9×11)
2014214-12-1121-7
(32)
2
(12)
3
(14)
3
(17)
2
(18)
3
(6)
%
5.020.010.05.020.0-5.010.0-5.05.010.05.0-35.0
(32.32)
10.0
(12.12)
15.0
(14.14)
15.0
(17.17)
10.0
(18.18)
15.0
(6.06)
72
(8×9)
18-7413-1---1--19
(27)
2
(12)
2
(19)
3
(7)
2
(7)
-%
-38.8922.225.5616.67-5.56---5.56--5.5650.0
(37.5)
11.11
(16.67)
11.11
(26.39)
16.67
(9.72)
11.11
(9.72)
-
96
(8×12)
2427334--3---1-113
(42)
2
(5)
2
(25)
4
(12)
3
(12)
-%
8.3329.1712.512.516.67--12.5---4.17-4.1754.17
(43.75)
8.33
(5.31)
8.33
(26.04)
16.67
12.5)
12.5
(12.5)
-
150
(15×10)
34274422351-31--16
(73)
4
(21)
5
(24)
5
(18)
4
(14)
-%
5.8820.5911.7611.765.885.888.8214.712.94-8.822.94--47.06
(48.67)
11.76
(14.0)
14.71
(16.0)
14.71
(12.0)
11.76
(9.33)
-
72
(8×9)
20163152----2---3
(15)
2
(5)
3
(10)
4
(13)
3
(17)
5
(12)
%
5.030.015.05.025.010.0----10.0---15.0
(20.83)
10.0
(6.94)
15.0
(13.89)
20.0
(18.06)
15.0
(23.61)
25.0
(16.67)
64
(8×8)
1836-122-3---1--5
(21)
2
(8)
1
(5)
2
(8)
1
(6)
7
(16)
%
16.6733.33-5.5611.1111.11-16.67---5.56--27.78
(32.81)
11.11
(12.5)
5.56
(7.81)
11.11
(12.5)
5.56
(9.38)
38.89
(25.0)
48
(6×8)
10-2112-11--11--5
(17)
1
(6)
1
(9)
1
(8)
1
(4)
1
(4)
%
-20.010.010.020.0-10.010.0--10.010.0--50.0
(35.42)
10.0
(12.5)
10.0
(18.75)
10.0
(16.67)
10.0
(8.33)
10.0
(8.33)
140
(14×10)
444208-10--------224
(57)
6
(14)
3
(24)
8
(21)
3
(24)
-%
9.0945.4518.18-22.73--------4.5552.27
(40.71)
13.64
(10.0)
6.82
(17.14)
18.18
(15.0)
6.82
(17.14)
-
72
(8×9)
20-9414-1------17
(20)
2
(6)
2
(19)
3
(9)
1
(4)
5
(14)
%
-45.020.05.020.0-5.0------5.035.0
(27.78)
10.0
(8.33)
10.0
(26.39)
15.0
(12.5)
5.0
(5.56)
25.0
(19.44)
Size / Parts 1×11×21×31×42×21×51×62×31×71×82×43×33×44×4 WhiBlkRedYelBluGra
Total1029258197834154379271110626109
(378)
29
(118)
28
(187)
41
(144)
25
(126)
26
(76)
%
7.3630.2313.186.8116.672.713.4910.470.390.393.882.330.782.3342.25
(36.73)
11.24
(11.47)
10.85
(18.17)
15.89
(13.99)
9.69
(12.24)
10.08
(7.39)

Statistics :: Grid lines
Although at first glance an iterative subdivision seems feasible, a closer look reveals that 1st order dividing lines do not reliably leave dividable areas behind:

×
×
×
×

Game
By virtue of their resemblance to street maps, Mondrian patterns appear very appropriate for building the levels of a Pac-Man variant.
Here an overview for comparison:
Pac-Man (console)Mondriano
Genre
Action maze chaseTurn-based strategy
Style
PixelartAnti-aliased pixelart (~clipart)
View perspective
Floor plan: top-down
Dots
Size: 2×2 pxSize: 4×4 px
Grid cell: 8×8 pxGrid cell: 10×10 px
Avatar
SymbolicAnthropomorphic
Side view¾ top-down view
13×13 px20×20 px
Ability to cut corners
Foes
4 ghosts: Blinky (red), Pinky (pink), Inky (cyan), and Clyde (orange); 14×14 pxVariable number of opponents
Side viewTop-down view
Ghost house in the center
×
Features
Score
Start with 2 extra lives, max: 5
Two internal warp tunnels at maze sidesTwo external teleporters at maze sides
Fixed level structureGenerated level structure,
sizes [8×8 … 27×24]
Fixed player/ghosts start positionRandom player/foes start position
Not all pathways are dottedAll pathways are dotted
Four energizers (aka power pellets)
in fixed positions
Various items
in random positions
×
Phase clock
×
Items: Road tickets, Turnaround

Game :: Rules

Game :: Animation
Animation framerate depends on the chosen speed, where the tempo of a sprite is 1 px per tick.
Crossing a maximum size level area straight from west to east without interruptions takes ~13 to ~40 seconds.
Frequency
Hz
Tick
ms
Dot to dot
(10 px)
sec
Cell to cell
(30 px)
sec
Max traversal
(810 px)
sec
slow20500.51.540.5
normal3033.330.333127
fast6016.670.1670.513.5
In the sprite sheets, idle pose frames are not necessary, and the number of frames in a walk sequence (left foot - right foot) can be arbitrary, typically 4, 6, or 8.
Game :: Avatar
In a config dialogue the avatar character can be changed anytime, chosen from a gallery (img: 30×30 px):


Each animation frame is of size 20×20 px, and all characters have 4 simple walk frames per cardinal direction, except the first character having 8. For further details see sprite sheets.

Unlike pac-man, who strictly keeps moving in his current direction between turn points (junctions or corners), our player decides for each step in which direction to go.

Collision (with foes/dots/sower) detection is very relaxed: only if objects are at the exact same mathematical coordinates, irrespective of how much shapes overlap; as in Pac-Man.
Game :: Foes
Although these guys are anthropomorphic, they crawl like a four-legged animal, vaguely resembling a rake (see also: Foe design).

While the player always moves exactly one step (dot to dot), foes may cover shorter or longer distances on their move, in the range of [.5, .6, .7, … 1.8, 1.9, 2.0] steps.
They will walk in the direction they’re looking until hitting a corner (where they turn 90°), or a junction (where they either turn 90° or keep going forward); in any case they’ll never turn 180° on their own.

Their behaviour depends on the current game phase (neutral or chase) a bit like in Pac-Man: during a neutral phase they decide randomly where to go next at junctions, whereas in a chase phase they calculate which direction to proceed is best for hunting down the avatar.

The number of foes per level depends on its area. Given the classic Pac-Man level has a corresponding Mondrian grid area of 90 (9×10) cells, its foe density is 4 ghosts per 90 cells, thus 1/22.5.
Let’s develop a formula to get decent foe numbers for our examples:
Max. size
Size (cells)72 (12×6)144 (12×12)99 (9×11)72 (8×9)96 (8×12)150 (15×10)72 (8×9)64 (8×8)48 (6×8)140 (14×10)72 (8×9)648 (27×24)
Version 1
Using the linear NFoes = NCells / 22.5 yields ok-ish results, specially for the 5th example (96 cells) which comes close to the Pac-Man area and gets in fact 4 foes after rounding. However, our maximum size (648 cells) area seems a bit overcrowded with ~29 adversaries:
3.206.404.403.204.276.673.202.842.136.223.2028.8
Version 2
Perhaps an exponential function is better? To dampen the growth, we try the square root of cells. Then, to get from sqrt(90 cells)≈9.487 to 4 ghosts, a factor of ~.422 is needed, so we'll inspect NFoes = NCells.5 × .422 which again gives a decent result for the 5th example, but makes the max size area seemingly underpopulated (~11):
3.585.064.203.584.135.173.583.382.924.993.5810.74
Version 3
If we wish the max size area to have about 15 foes, while preserving 4 ghosts for 90 cells, we must fiddle with both the exponent and the constant factor. Term NFoes = NCells.66 × .21 seems to work fine:
3.535.584.363.534.275.733.533.272.705.483.5315.06

Game :: Sower
A very slow (1px/turn) moving green
torus (see sprite sheet), hovering along roads, and replenishing dots.
It always appears on one of the teleporter spots, 100 turns into the level.
It dissolves when colliding with the player, to reappear 100 turns later.
Game :: Items
Road ticketTurnaroundCaffeineSleeping pillStone
InfoOpens a locked (dark violet) road that touches a block of the same primary colour.All foes rotate 180°.Avatar can perform a 2nd step for 3 turns.Placed in avatar position; consumed by the NPC walking over it, whose step length is halved for the next 3 turns.Thrown in viewing direction; hit NPC is stunned for 3 turns.
Level icon
Slot card

Level :: Size
As of dimensions, the only considerable minimal measure so far is the size of a green dot which should at least have a diameter of 4 px to be seen clearly. Granting a circumjacent 1 px distance to the border of the black line (pathway) below, those grid lines therefore should have a thickness of 6 px.
Applying the width ratio 1:4 of lines:cells, like in the art thumbnails, we get 24 px for a cell’s inner width.

As always, our squarish level viewport should have an edge length of 768 px if possible.
Formulating the number (N) of fitting cells…
N × PxCell + (N + 1) × PxLine = 768
… and rearranging for N
→ (N + 1) × (PxCell + PxLine) - PxCell = 768
→ (N + 1) × (PxCell + PxLine) = 768 + PxCell
→ (PxCell + PxLine) = (768 + PxCell) / (N + 1)
→ 1 / (PxCell + PxLine) = (N + 1) / (768 + PxCell)
→ (768 + PxCell) / (PxCell + PxLine) = (N + 1)
N = (768 + PxCell) / (PxCell + PxLine) - 1
… yields…
N = (768 + 24) / (24 + 6) - 1
  = 792 / 30 - 1
  = 25.4
… about 25 cells, so let’s make it a tiny bit landscape by giving it 27×24 cells (816×726 px) for the maximum level size:

Max level area
648 (27×24) cells
Also, with an even number of cells vertically, the teleporter junctions can nicely be centered at the sides.

Btw, while Pac-Man has a fixed number of 222 dots, theoretically our max level has at most 3394 dots (given only 1×1 blocks, using WCells × HCells × 5 + WCells × 3 + HCells × 3 + 1 to get the effective dot grid slots). However, due to the bigger Mondrian rectangles, road density – thus the number of actually placeable dots – is significantly lower, approx. around 2100.

These are the number of dots in our examples:
Size (cells)72 (12×6)144 (12×12)99 (9×11)72 (8×9)96 (8×12)150 (15×10)72 (8×9)64 (8×8)48 (6×8)140 (14×10)72 (8×9)
Dot grid703 (37×19)1369 (37×37)952 (28×34)700 (25×28)925 (25×37)1426 (46×31)700 (25×28)625 (25×25)475 (19×25)1333 (43×31)700 (25×28)
Upper limit415793556412541826412369283773412
Dots266448323259328519275242174497269
Dots / area64.1 %56.5 %58.1 %62.9 %60.6 %62.8 %66.7 %65.6 %61.5 %64.3 %65.3 %
In average, 62.6 % of positions in the effective dot grid are occupied.

Level :: Bonus
When all roads have been cleared from dots, the level is won, a popup appears, and extra points are added to the score.

The amount of this bonus depends on level area and difficulty. While for area we can use the dot grid size, determining a value for difficulty is a bit tricky. However, since we know the player can cut corners, which helps when being chased, it’s obvious that a level is the easier the higher its road density, because more roads mean more junctions, thus more corners to cut.
Using reciprocal (1/easyness → 1/roads) we get area/roads. Finally, area gets some weight by exponentiation:
Bonus = round( (WDotgrid × HDotgrid)1.5 / NRoads)

These are the extra points for our examples:
Max. size
Dot grid703 (37×19)1369 (37×37)952 (28×34)700 (25×28)925 (25×37)1426 (46×31)700 (25×28)625 (25×25)475 (19×25)1333 (43×31)700 (25×28)5986 (82×73)
Roads61705350649050482912156~411
Bonus306397554370440598370326357402331~1127

Level :: Generator
- Rectangles

- Colouring

- Item placement

- Foe placement


Appendix :: Ideas
Collection of brainstorming ideas about features, variations and extensions.

Approved Pending Deprecated
Appendix :: Assets: Avatars
Walk cycles in 4 cardinal directions; frame size: 20×20 px.

Edgar
Billy
Mario
Goblin
Grunt
Hyouta
Natane
Sumomo
Makishi
Merissa
Tougan
Suzana
Denji
Ryou
Kikuna
Ooba
Brendan
Lyra
Chill
Violet
Rachel
Nun
Pirat
Shirona
Goyou
Guy
Mai
Baku
Miru
Rival
Fatty
Catch
Belt
Guard
Scout
Sailor
Punk
Witcher
Cloudy
Frank
Batty
Mildred
Farmer
Cowgirl
Renato
Friren
Volo
Rika
Oak
Toadman
Amaria
Snowite
Luka
Nasco

Appendix :: Assets: Sower
This simple torus only needs an outer ring (with growing/shrinking effect); frame size: 28×28 px: