Replacing some fo mob in viewers() show_message() with visible message().
Simplifying some message code in a couple places, fixing typos and span classes.
Moving do_attack_animation() proc to mob/living
Fixing the pixel offset issue from beds especially rollerbed.
Fixing the nograv bouncing stopping because of another animation being used.(lying down, jittering, attack animation)
(
Nothing when Attack w/ item on dead animal
No varied attack verb for the above.
Item attack on alive SA/syndicate/melee: no sound
No Punchsound on alive and dead SA.
goat attack on SA/human/alien/monkey : no sound
attack_hand and Item attack on dying mouse: nothing
is_muzzled() fix in slime.dm and humanoid.dm and larva.dm and humanattac?kpaw.dm (put a muzzle on self, immune to monkey bites!)
monkey attack on animal: can't attack alive!
monkey (821) has attacked the grey baby slime (477)! (needs bite and sound)
monkey can't attack_paw alien/slime/animal with health below 0.
attack_animal on larva has no sound.
monkey bite on human: no sound
Larva on Humanoid/slime.
can't monkeybite a wounded alien.
larva needs to be attackable by humanoid/slime/hand/item/monkey/SA
Monkey cant bite dead/unconscious monkey
Larva bite has no sound. can't bite anyone but animals
)
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.
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.
Death of the istype invasion from slimes, previously every single color of slime was its own kind of mob, and every single one of those slimes also had an adult form which was a different mob.
There is now only one kind of slime, reliant on new var is_adult and old var colour to determine how it looks. All baby slimes functioned identically outside of icon and core, and all adult slimes functioned identically to each other and to the babys save for a bit higher Health and more capacity to break shit.
A nice side effect is that this solves any inheritence issues of baby slimes growing up since it's still the same mob, though it doesn't solve the same issues for adult slimes splitting.
Also fixed a few annoying but rare bugs (like getting ghosted because you got DC'd and your slime self split and you weren't around to get mind transfered)
Added helper proc for general logging, replaced some logging with this
proc
Pulling now leaves fingerprints
Judging by the opinions in the thread will add some more
logging/fingerprints
Modifies Adjacent() for items, to allow items to be accessed properly inside each other and the user. This fixes a few bugs seen in testing.
Sets a maximum telekinesis range (in case you were using cameras).
The telekinetic grab now does nothing at all in melee combat. This prevents double messages where you attack them with the object telekinetically, and then also attack them with the telekinetic grab.
Crayons had a bug where they were drawing at all distances. This is because in old click code, afterattack() only happened at range when you had the USE_DELAY flag, which is no longer true. Proper behavior is to use parameter 3 (proximity_flag), which is 1 when adjacent or 0 if inaccessible.
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.