`maths.dm`:
Removed `var/const`s `E`, `Pi`, `Sqrt2`.
`setup.dm`:
Re-added `PI` here, and added `Sqrt2`, `E` as macros.
The reason for this is that macros have a performance improvement over `var/const`s.
`lists.dm`
Changed the formatting of the `BITTEST(...)` etc. macros so that they can be found by
searching for `#define BITTEST`
`rig.dm`:
Fixed unknown variable error resulting from the usage if `STOPSPRESSUREDMAGE`
which was renamed to `STOPPRESSUREDAMAGE` in one of my earlier commits.
Others:
Replaced constant variable `Pi` usage, with macro `PI`.
`code/setup.dm`:
Fixed large amounts of indenting.
Fixed large numbers of comments and their clarity.
Added parentheses to macros using expressions.
Added FIXME for unused duplicated macros, without certainty of their requirement.
Removed some duplicate macros present. (`BRUTE`, `BURN`, etc.)
Removed macro `PI`, and replaced instances of its use with `var/const/Pi` from `maths.dm`
`code/global.dm`:
Fixed large amounts of indenting, added newlines to long single-lined list definitions.
Slightly clarified comments.
This should have little/no gameplay effect right now, just paving the
way for directional lights.
Replaced handle_rotation() on buckly things with this.
Signed-off-by: Mloc-Argent <colmohici@gmail.com>
When chemical grenade being activated on any unsimulated turf (for example a space turf), smokeFlow() starts infinite while loop, overloading the server.
With the only one unsimulated turf in pending list while() loop can't finish itself and for() loop can't start.
This fix makes chemical grenades being able to explode in space without server going in infinite loop.
Also fixed issue with smoke being able to pass through glass walls with help of c_airblock() proc. That's the best solution I could come up with.
Zone check code was useless because every single turf besides walls (which allready checked) and unsimulated turfs have it, making algorithm believe that turfs behind the glass wall are being reachable by chemsmoke.
I don't know if it was intended not to spread smoke in airless or unsimulated areas, but a bunch of airless simulated floor tiles in space is good enough for this algorithm to start spreading smoke around.
P.S. this algorithm is good for large, open areas and horrible in narrow maint tunnels. It is creating only a single cloud of smoke for 50/50/50 recipie in 1 tile wide tunnel.
- Renamed the variable for the smoke density mechanic to density. Also clamped it to a minimum of 1 so it cant multiply reagents.
- Added some checks so the chemsmoke effect doesn't run if it's in nullspace.
- Removed an unnecessary distance calculation.
- Added a null turf check to prevent runtimes if a really big smoke grenade goes off at the edge of the map.
- Added a check so the reagent copy code doesn't run if there's no reagents to run it on.
- Complete rewrite of the chemsmoke spawning code (everything that happens after the reaction to create the smoke).
- Moved it into it's own file since it's a little longer than the old one code-wise.
- Tweaked the smoke sprites; gave chemsmoke directions for more randomization, and tweaked the timing of their animations so they are smooth now.
Most of the code is documented, so you should be able to follow what's going on just reading through it. In short though:
- Chemsmoke now affects a circular area with a variable range depending on the total amount of chemsmoke created (no more 1-of-each-ingredient smoke grenades - sorry).
- The carried reagent volume in the cloud balances itself according to how big the affected area is (larger area, less carried reagent per turf).
- The carried reagent has more volume the closer you are to the centre of the cloud.
- The visual smoke effect scales with how big the affected area is.