// Vector tile art. Symbols are 32x32 and pull colors from the floor theme's CSS variables.
// Loaded after data.js; the engine calls gfxCell() per grid cell when graphics are on.
const GFX_DEFS=`
`
const SHADOW=``
const FLAME=(x,y,s)=>``
const STONES=(rs)=>rs.map(([x,y,w,h])=>``).join("")
const FLOOR_BASE=``
const BRICKS=(y0,rows,grad)=>{let s="";for(let r=0;r`}return s}
const SPRITES={
f0:FLOOR_BASE+STONES([[1,1,14,9],[17,1,14,9],[1,12,9,8],[12,12,19,8],[1,22,18,9],[21,22,10,9]]),
f1:FLOOR_BASE+STONES([[1,1,10,12],[13,1,18,6],[13,9,9,11],[24,9,7,11],[1,15,10,16],[13,22,18,9]]),
f2:FLOOR_BASE+STONES([[1,1,19,8],[22,1,9,14],[1,11,9,9],[12,11,8,9],[22,17,9,14],[1,22,19,9]])+``,
w:``+BRICKS(0,4,"gW"),
wf:``+BRICKS(0,1,"gW")+BRICKS(8,3,"gWF")+``,
o:``,
i:``,
p:SHADOW+``+FLAME(26.8,11,.75)+``,
B:SHADOW+``,
S:``,
r:``,
x:``,
z:``,
n:``,
q:``,
l:``,
g:``+[20,17,14,11].map(y=>``).join("")+``,
I:``,
M:SHADOW+``,
T:``+FLAME(20.5,8,1),
F:``+FLAME(12.5,11,.9)+FLAME(19.5,11.5,.85)+FLAME(16,9,1.25),
C:`${SHADOW}`,
D:``,
Dd:``,
K:``
}
// Grid-cell kinds from cls() that sit on top of a floor tile.
const GFX_ON_FLOOR="pBiSrxznqlgIMTFCK"
let GFX=1
try{GFX=localStorage.getItem("mrl_gfx")!=="0"}catch(e){}
document.getElementById("s").insertAdjacentHTML("afterbegin",``)
function gfxToggle(){GFX=!GFX;try{localStorage.setItem("mrl_gfx",GFX?"1":"0")}catch(e){}}
function gfxIcon(k){return k=="dark"?"":``}
function gfxCell(c,x,y,glyph){
const k=c.split(" ")[1]
if(!k||k=="u")return ""
const use=id=>``
if(k=="w")return use(y==H-1||tile(x,y+1)=="#"?"w":"wf")
if(k=="o")return use("o")
const fl=use("f"+((x*7+y*13)%3))
if(k=="f")return fl
if(k!="i"&&R[S.r]&&k in R[S.r].ex)return fl+use(R[S.r].ex[k].replace("!","")[0]=="d"?"Dd":"D")+`${glyph}`
return fl+(GFX_ON_FLOOR.includes(k)?use(k):`${glyph}`)
}