//Define number of characters
local CHAR_TOTAL = 12

//Define all character frames (no duplicates allowed!)
local CHAR_FRAMES = {}
local framenum = 0

//First set (solo frames)
for i = 0, (CHAR_TOTAL - 1)
	CHAR_FRAMES[1 << i] = framenum
	framenum = $ + 1
end

//Second set (combination frames)
for i = 0, (CHAR_TOTAL - 1)
	local char1 = 1 << i
	
	for j = 0, (CHAR_TOTAL - 1)
		local char2 = 1 << j
		
		if CHAR_FRAMES[char1|char2] == nil and char1 != char2
			CHAR_FRAMES[char1|char2] = framenum
			framenum = $ + 1
		end
	end
end

//Main thinker
function A_AdeleineCanvas(mo)
	//Intial state
	if not mo.canvasframe
		mo.canvasframe = 1 << P_RandomKey(CHAR_TOTAL)
		
	//Go to new frame
	elseif mo.canvasnext
		mo.canvasframe = mo.canvasnext
		mo.canvasnext = 0
		
	//Get and transition to new frame
	else
		mo.canvasnext = 1 << P_RandomKey(CHAR_TOTAL - 1)
		if mo.canvasnext == mo.canvasframe //Don't transition to the same character!
			mo.canvasnext = 1 << (CHAR_TOTAL - 1)
		end
		
		mo.canvasframe = $ | mo.canvasnext
		mo.tics = 5
	end
	
	//Set frame
	local frame = CHAR_FRAMES[mo.canvasframe]
	//print("v: " + mo.canvasframe + " m: " + mo.canvasnext + " r: " + (mo.canvasframe &~ mo.canvasnext))
	if frame != nil
		if frame >= 64
			frame = $ - 64
			mo.sprite = $ + 1
		end
		mo.frame = frame
	end
end