meteor_hit() is a textbook example of snowflake. What you have here is a
proc linked to a single entity (the small meteor) which shouldn't even
have it (ever since I reworked meteors, small meteors explode) that is
present in FIFTY. FUCKING. FILES.
Since an explosion more than clearly does the damage we want done on
meteor impact, it is more than logical to remove it and lighten our code
of obsolete and obscuranting procs
For the handful of times where it isn't possible to straight up remove
it (immovable rod, dust, small meteor), the code was quickly patched by
making it fire ex_act(2), given that small meteors perform
explosion(src.loc, -1, 1, 3, 4, 0)
Doing it quick and dirty because otherwise it's going to cause conflicts
everywhere
Material datum functionality changed to mimic that of reagents etc. by
using a global datum list and an assoc value list.
Material datums added at the atom level.
starting_materials var added - on New(), the materials in the list are
added to a datum. An empty list generates an empty datum, a null means no
datum.
m_amt, g_amt, and where applicable gold_amt, etc. completely removed,
replaced with starting_materials where applicable.
Fabricators
Fixed a bug with fabricators taking design cost, not shown cost.
Fixed a bug with fabricators taking costs before a design was shown
completable.
Fabricators now transfer the materials they use in the design to the atom
produced's material datum.
Designs are now world-consistent : scanning the same atom will ref the
same design, and scanning an atom with a design will fetch it.
Mechanic fabs now add plastic cost on top of the design, not to it.
Mechanic designs no longer require random extra materials.
Mechanic designs are now material-specific, not type-specific.
Mechanic blueprint uses have been removed, in favour of a consumable
system.
RnD wires moved to the datum system.
Autolathe moved under fabricators. It preserves as much functionality as
possible.
Framework added for plastic costs on mechanic fabs to be toggled, and for
removal of designs to be toggled also.
Removed update_values(). RIP, shine on you CPU diamond.
Removed get_moles_by_id and get_archived_moles_by_id, all moles are now accessed directly to reduce call cost.
Added set_temperature and set_volume procs which recalc pressure when temperature or pressure change.
Heat_capacity is now a var updated when gases update.
Modified adjust_gas to use set_gas, modified set_gas to alter heat_capacity, total_moles, and pressure as needed.
Moved gas_mixture gas numbers to a list which is connected to a global gas_datum list, like with reagents.
Modified some maths procs to be more sane, added adjust_gas and set_gas to help with processing.
Added a modular system for gas flags - gases can now be marked as fuel and oxidiser with a flag, logged with a flag, scanned with a flag, etc.
Changed scrubbers to use a list of scrubbing gases rather than a set of vars.
Made miners and xenoarch effects more sensible - they now produce gas by ID, not manually.
Made turfs' starting gases into a list, removed turf gas number vars.
- Fix full reinforced windows using the old description
- Add a new brokenup var for the window's Destroy() call. Defaults to
0, if 1 then the window will shatter into shards and rods (the old
behavior caused any window deleting to shatter them)
- Changes to all files that called Destroy() on windows to use this new
behavior
That code was old and fucky, goddamn
- Span, formatting, newline, visible_message, yeah
- Separate sprites for window panes and full windows. Might need a bit
more refining still, but that's that
- Remove deprecated commented silicate code. If anyone ever wants to
include something akin to silicate, they would benefit from just
recoding it from scratch. An item that adds health and potentially
changes sprite color can't be that hard to make
- Reduce normal window health by 4 to 10. Why would you use plain
windows
- Remove stupid paths that caused shitty inheritance. window/basic and
window/full/basic were dumb as fucking shit and no longer exist (both
transferred to their respective tree parent, for whatever variables
needed transplating, so 2-3). All full window types under full/ all
reinforced window types under reinforced/, all in that order
- Add in more examine() information (construction state and health)
- Add in healthcheck() to replace destroy(), hit() and all that logging
and variable juggling bullshit in about every proc where the window can
be damaged
- ex_act(), blob_act(), meteorhit() now deplete health only and no
longer magically delete or Destroy() windows. Looks a bit ugly on ex_act
3 since reinforced windows can't be destroyed but grilles always are,
and plasma windows still don't block explosions even if they're now
almost bomb-proof, but that's progress
- Remove window damage on passive grab window "slam", massively increase
mob damage on neck/kill window slam (if you let yourself get grabbed
that far, you deserve to die)
- Change construction from that ugly variable juggling to a fancy and
functional switch() construction code. Include bitflags and
deconstruction safety
- All files that were modified outside of window.dm and fullwindow.dm
are compatibility fixes
Try as I might, I couldn't fix#3515. It appears to be fundamentally
fucked due to the way pushing objects (you enter the window's tile) and
pulling objects (you cannot reach the other side of the window, ever)
works. Maybe someone else will manage it
The drop_item arg is now the loc placed, not the child of the loc or whatever.
Removed a few lines of items being placed into themselves, on themselves, into other things manually, into their users, etc.
Cleans up the fix for MoMMI recharger silliness.
This took about 2 hours of non-stop manual searches.
Stuff goes under types.
Types have procs.
Never have 500 lines of repeated code again.
I came very close to crying while editing this. You should appreciate that.
Added the state var to all machines. 0 is unanchored, 1 is anchored, 2 is welded.
Added the WELD_FIXED flag for machines that can be welded down.
Added the weldToFloor proc, which is used to toggle welding down for machines.
Fixed machines not using general procs.
Fixed some relative pathing.
I have decided to release the fixes outside of other SCP-related plans
for Halloween. Maybe more adminbuse will occur this way
- SCP nows stuns and paralyses as soon as he gets a grab, and not after
a huge list of fluff. This ensures you can't lag-walk your way out of
his grab forever. At least it should
- Attempt fix to SCP's sight code. Now he should ALWAYS count himself as
observed if someone is facing him, instead of weighting odds like a
drunkard and ignoring non-direct sight 90 % of the time
- Save up one indent level by returning Life() code after sight check if
we have observed
- Fix error caused by trying to get a vent's name, and foolproof it in
general. No need to know SCP went through the Bar Air Vent 2
This should do for now. If any more bugs show up, warn me