Let’s break down the big ones real quick.
Scent diffusion: This is a multidirectional iteration over the area, since the value of each square is determined by the previous state of each surrounding square and the square itself. This one is really gnarly since you have to build in both backtracking and readahead, which does bad things to caching. We want to add in multiple scent maps, but that’s not happening unless we can get an algorithm that is many times as fast as the one we have now, and enlarging the active area would just make that worse.
FOV: This has a “better” main algorithm now, which means we “only” iterate over the entire map 2-3 times, for transparency, field of view calculation, and lighting. The real killer here is that to derive each of these we have to check many different pieces of data, off the top of my head terrain, furniture, vehicles and fields. Also keeping in mind that vehicles and fields can have multiple components per square.
Tile rendering: This also scales with the number of squares displayed, though at least it’s only with the number displayed instead of the total. A lot of the features we’ve built into the tiling engine have a real cost, like season-specific tiles, fallback tiles, rotations, and multitile support. Each of these features can trigger multiple lookups for the right tile to display. This is mitigated somewhat by a tile cache that was added a month or so ago, but it still slows the game to a crawl on my system if I configure it to have all the tiles visible at once.
Monster AI: Our AI might generally be dumb, but it still has to check its surroundings to figure out what to do. I was doing performance testing earlier tonight with 10,000 zombies on screen, and was able to ditch some major bottlenecks and get the effects of so many zombies interacting mitigated, but it’s still a hell of a lot of calculations happening. Increasing screen size means increasing number of monsters that will be onscreen.
The monsters get to use the scent map for “free” because it’s calculated for them, but they have to do their own LOS, so the cost to compute whether they can see something scales with the distance to the target.
Likewise NPCs have to do LOS the hard way, because they have to just draw lines and see if it intersects with anything.
In the first one I’m debug-invisible, so only the ones that can hear me punching their friends are coming after me.

Made myself visible, and now most of them are trying to pile on.
Fields get updated every turn, and more squares means on average more fields. fire is especially bad, since it rummages around in the items under and around it.
Active items also scale with active map size, and they’re what dominate processing time when operated in any kind of accelerated mode right now (waiting, sleeping, reading, crafting). there are some serious mitigations we can do for active items, but tracking when all the food rots properly and when zombies get back up again and when dynamite blows up isn’t free.