Adds sound notifications for Ninja and Wizard Apprentice spawning -- hopefully means fewer afk antags.
Adds a ghostnotice span class, used in the new notify_ghosts proc. Upon creation, things that require ghostly attention (NarSie, golem runes) give more visible messages to the dead.
Retires the 'moderate' span class, which was only used in tomato throwing? Refactors tomato code (this ended up being the meat of this PR, somehow...)
Reorganizes some item definition/procs.
Your dreams of big part storage and fast machine part exchange came true
14 slot R&D part-only autoseeker/picker/dropper/exchager is in
Added different sprites for better capacitors and scanning modules
Changed the power cell type to be compatible with all this machine
changing faggotry
All sprites here are codersprites so ask nien/WJ for better ones if you
want
Works pretty well. If it can't GC something, it'll just del() it and be done.
Speed is amazing, holy shit.
New procs you should be aware of:
qdel(atom/movable) - sets up an object for garbage collection. Call this rather than del(atom/movable).
atom/movable/Destroy() - called right before the object is GC'd, so it still has a loc. Also called if the object is del()'d.
new controller - garbage.dm has all the details on this. Basically it nulls all references on GC'd objects and force del() them if necessary.
Generally speaking, objects should use Destroy() for behavior prior to deletion rather than Del(). You should also always call the parent so the object gets the right gc_destroyed var set.
ISSUES:
Tries to GC mobs atm. This actually works for new players, not so much for humans/monkies/simple_animals/anything. I'm guessing it needs to clear out their mind and HUD and maybe other things.
Gibbing is really bugged. It works, but the overlays just sit there for awhile and ugh. I'm very tempted just to del() mob/living and mob/camera and call it a day.
qdel() equipment doesn't unequip the item.
Pipes don't generally GC correctly. Debugging suggests they get referenced in many pipenets and that isn't cleared properly. However some do work fine. Need assistance here.
Bots don't GC, probably in the radio controller.
Lots of other shit doesn't GC but it's hard to find them because of the pipe spam.
I think I'm calling Destroy() twice by accident.
- Banana peels are now grown weapons
- Banana peel slip duration is now based on their potency
- Clown spawns with a 50 potency banana, which is both regular sized and
produces a skin that's nice and slippery~
- Fixes nettle and deathnettle inhands not disappearing upon use
- Makes nettle and deathnettles use the hitsound variable instead of the
playsound proc directly. Now their hitsounds will scale in volume based
on damage done.
- Makes the banana mortar shoot potency 65 banana peels. Because
otherwise it'd shoot laughably tiny and short in slip duration potency
-1 ones.
- Moves corncobs to be grown weapons and updates their paths. Now their
size will scale based on the size of the corn that spawned them.
- Updates banan paths :)
Weapons that do no damage play a tap sound, except for the bike horn and banhammer.
Adds a different attack message for forceless attacks. It says tapped or
patted on instead of attacked in.
Adds force zero check to armour before attempting to block attacks.
Adds hitsounds to the welder, lighter, matches, cigarettes, energy sword and energy axe for when they're on and off.
Adds 5 force to the lighter when it's lit. Same as when you accidentally burn yourself lighting it. Adds a hitsound and the correct damage type to the lighter.
Adds hitsound volume scaling based on the weapon's force and its weight class. Adds tap sound scaling based on a weapon's weight class.
Removes boldness from item attack messages on non-human mobs. The attack is still bolded for the player
controlling the mob.
Adds a force check to blood spurts when attacking non-human mobs. If the weapon doesn't have a force, no blood will come out.
Adds adminhelp.ogg as the banhammer's hitsound with Cheridan's permission.
Adds a much needed period to the catatonic human examine message.
Makes the activation and deactivation sounds of toy swords, energy swords and energy shields quieter. What an earsore.
Makes description, item_state and name of matches that have burned out on their own consistent with those put out by the player. Changes match, cigarette and lighter attack verbs and forces based on whether they're lit or not.
Fixes a bug that allowed players to light cigarettes with burnt matches.
Names lit cigarettes and children of cigarettes lit [name].
Fixes a bug with the energy blade that kept it at weight class 5 after it was deactivated.
Changes the welder out of fuel message slightly to be less fragmented.
Removes dead air from most of the weapon sound effects used in this pull to make them more responsive. In other words, the fire extinguisher sound will play a lot sooner after you click than before. Equalised their peak volumes to all be -0.1dB and in an attempt to make altering volumes based on force more consistent.
Thank you @YotaXP for help with the item_attack.dm attack messages.
Thank you @optimumtact for help with code for testing item_attack volumes.
Thank you @Giacom for help with the code for scaling hitsound and tap sound volume by hitforce.
Thank you @Tastyfish for telling me why my proc wasn't working.
Thank you to anyone else on #coderbus who helped me who I've forgotten to mention.
*TABLEPASS was already totally obsolete.
FPRINT was used, but it was on virtually everything anyway.
Removes those flags from every instance where they were used. Also assigned and removed other flags where it made sense.
If it is desired, I can revive the flag as NOFPRINT, which would retain the original functionality, though inverted. That way it would be be used only where it was intentional (holodeck items could use this for example).
Crossed() is a byond builtin which is called automatically when two movable atoms overlap (as a side effect of Move(), but not when loc or x/y/z is changed). Previously, turf/Entered() iterated through all objects in the turf in order to tell them an object had entered; with this change, HasEntered() becomes redundant and can be eliminated.
This may reduce lag when a large number of objects are moving in a small space (singularity, mining conveyors, etc) but should cause no changes to functionality at all.
Adjusts the click code to not use client/Click(). The code is largely unchanged, except that it allows the compiler default behaviour of calling atom/Click(), and then forwards the call to mob/ClickOn(). I had some reports that melee combat mixed with movement was behaving oddly, and I believe it may be due to the use of client/Click; the byond documentation says that redefining client/Click() causes additional overhead, and it isn't strictly necessary.
Alters the way double clicks are handled, in an attempt to better handle clickspam, as often occurs during pitched combat. This may also be responsible for the above, but I don't know.
Inserts proximity (aka flag) checks in all afterattack() procs. The old assumption was that unless an item used the USEDELAY flag, afterattack() was only called when adjacent, but this is no longer true. This led to beakers, soap, crayons, etc, all being usable at all ranges.
Removes the NODELAY flag, which was unused. Removes all existing uses of the USEDELAY flag so that it can be readded to things that need extra delay.
Removes the hand_* procs, previously used by restrained actions. Instead, the mob helper mob/RestrainedClickOn() has abosrbed basically all the functionality they were used for, which is really only monkeys with jungle fever.
Adds a special case of the Adjacency() proc for doors. This fixes#136, airlocks being unreachable due to border fire doors. However, this only takes us back to the unpleasant position where you have to open-hand the door, switch to a crowbar, and pry open the firedoor; it still needs a better fix.
Fixes#646, #579, #863
Completely redoes the click code. Moves all click related code into code/_onclick for reference. Also moves hud datum code and all the screen object code I could find into code/_onclick/hud, as it is related. Item attack(), attackby(), afterattack(), and attack_self() have been moved into item_attack.dm for consistency.
Completely removes dummy objects and adds atom.Adjacent(user). This proc checks for border items and anything marked with throwpass for determining whether or not you can reach a given square. A turf helper, ClickCross(), was added to facilitate this.
Removes the monolithic Atom.Click() proc in favor of an overridable click handler attached to mobs. Click code no longer uses the : path operator as a consequence, and mob/lastDblClick has been moved to Client/next_click. A few end arounds were necessary (screen objects, buildmode, and spells), but this has been handled by repurposing Atom.Click(); if you have special click code, insert it in the object's Click() function and return 1 to prevent normal processing.
This update adds support for attack_ghost(); the previous "new" click handler had support for it but was never finished. I have taken the liberty of letting ghosts click portals, the gateway, and the teleporter to jump to the intended target square, and kept the previous default action of examine()ing every damn thing you click. It is to be suggested that you could do more with this proc when ghost interactions are enabled.
This update also adds support for double clicking. It is currently only used for ghosts and AIs, because the original (first) click still registers normally. For both of these, double clicking a square will jump you to it, and double clicking a mob will follow it. In the case of ghosts, double clicking bots and the singularity will also set you following it; if you double click your own corpse, you will re-enter it; this also works if your body is in a closet, sleeper, DNA scanner, etc. Default mobs ignore double clicks as normal.
-- NOTE --
There are two flags which were previously unused or misused by click code: USEDELAY and NODELAY. Ostensibly, USEDELAY would double the normal 1sec delay, and NODELAY would remove it.
Using either of these flags as intended would significantly affect the timing of the game. In particular, USEDELAY is currently applied to guns and about everything else that acts at range. I am adding USEDELAY as a half-second increase for now, but I have not put a significant amount of thought into it. I considered lowering the normal 1sec delay to .8sec to balance it, but the consequences of that on combat involve more calculations than I care to make.
NODELAY seems to never have been used, and I did not implement it, but I could do so trivially.
Moves the shard define into glass.dm
The "You step in the broken glass!" message only appears if you aren't wearing shoes.
Other misc changes and fixes.
Camera bug acts as a mini-camera computer with access to all bugged cameras.
Adjusts camera checks to determine who is looking through them; instead of checking their machine, it now checks the client eye.
Adds camera bug to the uplink list with a cost of 2TC.
-Removes the unused/dumb access stuff from space cash.
-Fixes a bug where dice would vanish if you used a hand labeller on them.
-Moves space cash/coins/mint sprites into their own file, economy.dmi. Moves mineral sheets into mining.dmi.
-Coins are flippable! Features unique flipping sprites and sound effects, and two-headed coins.
-Oh and better sprites for wooden closets too.
Also removes the smallDelivery loop in /mob/proc/get_contents(). It's amazing that proc worked at all, it really does do what it's described as doing. I'm leaving it for now, as the game seems to have gotten on well enough so far, and it'll probably just increase processing for no gain if I fix it.