This somewhat changes how items are placed on them, but for the better as it's more consistent with existing mechanics.
Hitting someone with the tray still scatters the contents around! Works on nonhumans.
Placing icons on the tray still makes them show up on the tray. Using the tray on a table now places the items onto the table, or places the tray itself if it's empty. Robots can't lose their tray this way, I checked.
Service borgs can actually use their tray to carry things! Trays can hold all sorts of stuff, as long as it's small...
A service borg can carry the nuke disk around. The pinpointer does follow it correctly.
If the service borg stashes its tray module, dies, explodes, gibselfs, or is forced to stash its modules by damage, it drops all the tray's contents on the ground.
Fixes#236 (service borgs can't use trays) and #2991 (Items on food trays can't be picked up). Didn't address #1919, the layer issue.
Fixes the "bajillion lines changed" with the maps.
Just in time for the feature freeze, a big change that will introduce bugs! Yay!
Mob verb is called verb/examinate(target), which just calls target.examine(user) and face_atom(target)
For explanation why, see http://www.byond.com/forum/?post=1326139&page=2#comment8198716
Long story short, mob verbs are much faster than object verbs. The goal is to make right-click menus populate faster.
Also changes a bunch of examine() procs to always, ALWAYS call the parent. Except mobs, but you have 1 guess why I'm not touching them. Mostly this affects obj/item/examine().
And also remove a whole shitload of pointless set src in view(2) kind of crap. Also span classes.
Changed "M as mob" in arguments list to "mob/M"; I think the former made it look for proc/can_equip() instead of mob/proc/can_equip().
Also, it no longer returns 0 for a null slot parameter.
Now it calls mob/proc/can_equip(obj/item/I, slot, disable_warning = 0) instead.
Good-riddance, nasty ugly if(istype(...))!
Future task: update corgi/xeno/whatever code to use this proc, now that it's nice and clean.
Ranged weapons and laser eyes have a cooldown of 0.4.
Grilles, windows, windoors, walls and blobs have a cooldown of 0.8.
Hitting mobs will also have a cooldown of 0.8.
Removes the unused USEDELAY flag.
Hopefully nothing went wrong but you never know.
Conflicts:
code/FEA/FEA_fire.dm
code/controllers/supply_shuttle.dm
code/game/gamemodes/changeling/changeling_powers.dm
code/game/machinery/autolathe.dm
code/game/machinery/drying_rack.dm
code/modules/hydroponics/hydroponics.dm
code/modules/projectiles/projectile/magic.dm
code/modules/reagents/Chemistry-Recipes.dm
code/modules/reagents/reagent_dispenser.dm
Change the GC's loops to for() loops instead of while() loops. Also fixed a really stupid mistake where it would cut random shit out of the destroyed list instead of what was just processed.
Made it use world.time instead of world.timeofday to get rid of stupid midnight rollover errors.
Also there's a split between caps on var clearing and deletion checks
Moved the invisibility = 101 bit out of the GC and into atom/Destroy()
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.
- Thrown items play throwhitsound on impact. If no throwhitsound is defined, they play hitsound instead. If that isn't defined, they play genhit.ogg. The latter fixes \#2508. The volume of the sound is dependant on the item's throwforce and/or weight class.
- Adds 15 throwforce to the fireaxe, which previously had only 1.
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.
If throwhitsound isn't defined, a thrown item calls the hitsound
instead. If that isn't defined, no sound is played.
Circular saw now calls pierce.ogg as its throwhitsound instead of its
hitsound.
When you touch an item, to spread the blood, it would take the "bloody_hands" to 0; which is checked if true while you wash your hands. I limited it to only go down to 1, so it will still be true unless you wash your hands.
Fixed an issue where blood_DNA was being cleared before the blood_hands variable was being set to 0. Now you can properly hide your bloody hands with gloves and when you take them off the hands will still be bloody.
Removed an unused variable.
Set the bloody_hands_mob to null where it was appropriate.
The amount of blood you can transfer to other items, when you touch them, will be a little random for variety.
Revive() will now heal your hallos damage.
*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).
All the logging i have found in the code was changed to use the
proc(maybe i missed something)
Killed all runtimes found so far
Proc now handles all the checks, no need to add checks in the body of
object
DONE Plants require 4 light, mushrooms only 2
DONE Harvesting should report how many items were harvested (whether plantbag is used or not)
DONE Plantbag should have a mode to only pick up one kind of plant at a time. Trash and ore bags too.
DONE 1 unit of mutagen should cause non-species mutations. (Radium too)
DONE Uranium should be like radium but even weaker
Everything that had abstract var now has ABSTRACT flag
Everything that checked abstract var now checks ABSTRACT flag
Fixed some runtimes
Fixed click code and face direction changing while cuffed
Added del to all attack_* of the proboscis in case shit goes real
AStar is still weird so added a simple sanity check
Added superclass invoke for the arcane tome
Added superclass invoke to light switches, removed it's (unused) description.
FLightswitch description repetition derp
examine superclass invoke for gas flow meter, space heater, fire extinguishers, grenades/IEDs, fancy boxes and welder. Changed description for welder and fire extinguisher to show their content in a similar style.
Fixed tank, linen bins and janicart description, and added welder of previous commit (forgot to commit it)
REMOVED icon in mop_bucket description (now provided by item class).
REMOVED unused examine() override in clothing/gloves
REMOVED custom examine() for glass/rag
CHANGED using examine superclass on paperwork/paperbin, removed redundant description code
CHANGED examine superclass for power/apc
ADDED universal maxcharge readout for all the powercell types.
CHANGED using examine superclass on machinery/light, removed redundant description code
FIXED weapon/virusdish use a description field.
TWEAK lowercased some of the portable generators.
Fixed improperness of pacman names