tldr; use less blocks per frame. tile clones are running too many blocks, and could be running none instead. put stuff in variables before your loops, including rings. clones keep the local variables their parents had.
finding the next performance issues
as a rule of thumb, blocks in snap are slow. except for special operations like stamping or colliding massive costumes, the amount of time spent per frame is pretty much proportional to the amount of blocks ran per frame.
because of this, the next place i went to was the tile sprite, because 700 clones all running a script in a loop means that script is 700x more important to slim down, and the tile script was quite bulky.
optimizing
clones keep the same local variables as the parent when they're created, so just setting the variable in the parent sprite is faster than telling the clone to change it afterwards.
hyperblocks (putting lists into blocks to get a list as output) let me throw out the many many number key checks, and made position math faster and easier to work with.
storing the tile in a local variable instead of grabbing it from the map list let me cut out many long map checks, and storing the position beforehand let me cut out all the recalculating that involved.
i moved the editor out of the tile clone and instead turned it into a script without a hat that runs on the main sprite. instead of every clone checking if it needs to change, the main sprite tells the clone that it needs to change.
after this, the leftover clone code was so small that it would've been slower to check if it was on screen. snap checks if sprites are on screen or not before rendering them anyways, so no real difference there.
since at this point all that the tiles did was move based on the camera, i set them to use the parent sprite as an anchor, so that they move automatically.
since i made changes to the local variables in the tile sprite, i went into the player and enemy sprites and cleaned them up a bit, notably the tile collision code no longer needs to check the map, since the tile has a local variable for it.
results
by my measurements these changes make the project about 3x faster, combined with the previous for a total of 6x.