I just ended up using the first method, and converted the Matrix by just dividing A by 100 and adding it to X divided by 10000, or M+A/100+X/10000 ]]>

` ``ClrAllLists ClrDraw SetUpEditor For(A,1,20 For(X,1,30 If [A](A,X):Then [A](A,X)→L₁(1+dim(L₁ A+.01X→L₂(1+dim(L₂ End End End For(I,1,dim(L₂ iPart(L₂(I→A 100fPart(L₂(I→X For(S,0,2 For(T,0,2 Pxl-On(T+3A,S+3X End End Text(3A-2(L₁(I)=⁻1),3X,sub("}- ",L₁(I),1 End`

The first method is kinda slow, but its still a bit more bearable than my method.

The second method will be a bit harder to try out, as I usually just use the Matrix editor to create my maps, so I'll have to come up with some way to convert those to a list. ]]>

` ``:For(S,0,2 :For(T,0,2 :Pxl-On(T+3A,S+3X :End :End //becomes :Pxl-On(3A,3X :Pxl-On(3A,3X+1 :Pxl-On(3A,3X+2 :Pxl-On(3A+1,3X :Pxl-On(3A+1,3X+1 :Pxl-On(3A+1,3X+2 :Pxl-On(3A+2,3X :Pxl-On(3A+2,3X+1 :Pxl-On(3A+2,3X+2`

for less overhead, though I am not precisely sure on how much that speeds up BASIC given its rather strange interpretation protocol.

Another way to speed things up is to do some "pre-processing". Will this matrix tend to have lots of empty space? Then consider storing everything in a list instead; basically, encode the location and value of the matrix entries into the decimal digits of a number, like `V.AAXX` where `V` is value and `AA` and `XX` are the Y and X coordinates. So `[A](12,8)=7` could be `7.1208`.

You can then store each of the nonzero data entries in, say, `L₁`, and iterate over all of them, skipping over the empty locations entirely:

` ``:For(L,1,dim(L₁ //Extracting digits :L₁(L→M :int(100fPart(M→A :100fPart(100M→X :int(M→M :If M:Then //insert draw code here :End :If M<0:Text(3A-2([A](A,X)=-1)),3X,sub("}- ",[A](A,X)+3,1 :End`

This also puts the matrix value into a variable, `M`, instead of trying to access the matrix (or list) every time.

And yes, it should be expected that using `Y` as a variable causes issues with the graphscreen; it gets reset to 0 every time the screen is "cleaned".

*Note: I am using the Variable A as a replacement for Y due to some bugs when opening the graph screen*

The code:

` ``For(A,1,20 For(X,1,30 If [A](A,X) Then For(S,0,2 For(T,0,2 Pxl-On(T+3A,S+3X End End End If [A](A,X)<0:Text(3A-2([A](A,X)=-1)),3X,sub("}- ",[A](A,X)+3,1 //This code basically makes a door that players can go through, with doors on walls being "}" and doors on the floors being "-" End End`

Any help is appreciated!

*Please forgive me if I made any mistakes with this post, I am new to the forum*