Controller with deferrals and SCHECKs to be specific. Won't lag while updating the sun, weather, or temperature.
Also moved some vars around. Namely the planet walls are stored on the planet, not in the weather_holder.
Planets now have their own turfs, the controller 'gives' them to the planets each cycle if there are any unallocated turfs in the global lists, to avoid iterating over other planets' turfs if you have more than one, then cuts the lists if you were crazy and some turf added some invalid type. This saves us type-checking in the for() loops later to make them crunch faster. The former operation should only happen once at the start of the game (and maybe very rarely when turfs are added/removed from a map during the game).
With regards to the temperature updates, rebuilding the zone entirely is an intensive operation. Instead we can use this new cheaty proc to do it from over here. ZAS code outside ZAS oh noooo. Well, the option is to snowflake this case into ZAS which is maybe worse?
Only downside to all this is that if you manually set weather and time it might take between 1-60 seconds for the controller to get around to checking if you wanted to update it. That's not that big a deal. If you really want you can now debug that controller and call doWork on it.
* Adds system for turfs to have "footstep sounds" that play when someone walks over them.
* Adds system for floor types (the kind of turfs where you can put tiles on them) to support the footstep sounds.
* Adds sounds to plating, tiles, wood, and carpet floor types.
* Footstep sound system is configurable in game_options.txt, it can be turned off completely or the volume adjusted.
* When water returned null from return_air_for_internal_lifeform() the life code treats that as vacuum. Instead we must return a mixture containing at least some gas.
* It will attempt to use the exhale type for the species, or fall back to carbon_dioxide if it can't find that info.
Changes layout of the AI core, see picture in PR.
Moves APCs for core and upload to the backs of the rooms.
Critical APCs can somewhat resist EMP now.
Gives turrets a ten second timeout until they go underneath the turret covers, unless turned off manually or if they lose power.
Adds a new type of turret specifically for the AI upload/core. This type has more health, has a 1/3 chance to ignore EMP, and fires xray lasers, to counter ablative armor.
A new material called Durasteel has been added. It is made from Plasteel and diamonds, and boasts more toughness than Plasteel alone, as well as reflectivity. The inner walls of the AI core are made out of this new material, which makes emitters less helpful.
Emitters can be damaged by projectiles, and will explode if too much damage is sustained. Shooting a Durasteel wall will likely cause you to lose the emitter.
New AI core turrets turn green when on lethal, to show that xray is coming.
Lowers amount needed for building a reinforced wall from a girder from
four to two sheets.
Gets rid of rod products from dismantling a reinforced wall.
Adds one more extra step for undoing the deconstruction.
This means that instead of the base turf being defined by the z-level, it's now defined by area and defaulted by z-level.
Updates all "shuttle" and "solar" areas to have a base_turf of space.
Updates docking arms 1, 2, and 3 on the main asteroid level to have a base_turf of space.
Other z-levels may still need updating.
This change means that all actions which destroy or dismantle a tile - for example bombs, a singularity, a shuttle leaving, or deconstruction - now leave these new areas as space not asteroid. Future mapping efforts may need to take this into account.
Remains of player blob axed.
blob_act() axed. Blob now has an arbitary set of things it can attack.
It will flow over everything else. Blob has an awful tendency to destroy
non-craftables.
Will test more tomorrow.
Blob will now attack mechs.
Fixes#8106.
Fixes#10705.