Commit Graph

6402 Commits

Author SHA1 Message Date
Fikou
cd147702cb fixes voice of god not giving you large text (#60014) 2021-07-05 13:03:42 -07:00
Bobbahbrown
4fcf927bf4 fix buckling to a vehicle not setting your initial sprite position correctly (#59999) 2021-07-04 20:53:26 -07:00
Fikou
adb9b76e1c wisps no longer fall in chasms (#60004)
Co-authored-by: coiax <yellowbounder@gmail.com>
2021-07-04 20:52:28 -07:00
小月猫
fec650f7fe fixed the define for the shock wire (#59995)
no wonder autolathes never shocked the cargo techs whenever they hacked it
2021-07-04 15:27:15 -07:00
coiax
e4d8795e9c Add new Wallets! station trait (#59877)
Add a new simple station trait, that replaces everyone's ID with a
    wallet containing said ID, as well as their starting money, and if
    they're lucky, a little bonus surprise.

        In addition, adds a force variable to station traits, which will
        always enable them, rather than having to edit weight and probability
        of rolling a trait of that sign (postive, negative).

Co-authored-by: Rohesie <rohesie@gmail.com>
2021-07-04 10:20:42 +01:00
Greniza
b2ecb787e1 Environment Protection Bags + Minor Weather Changes (#59752)
Co-authored-by: Matthew J. <12817816+ZephyrTFA@users.noreply.github.com>
2021-07-03 22:05:58 -07:00
Bobbahbrown
972cd3de61 introduce advanced sucking functionality to custodians (+ bonus GAGging) (#59925)
* base sucking functionality

* functional upgrade and upgrade refactor

* minor tweak here

* finish overhaul of upgrades, add gags-ified upgrades

* add documentation (you love to see it)

* update sucking sound

* do some of the requested cleanup, fix key going into trash bag, add right click func
2021-07-04 00:29:46 +02:00
Emmett Gaines
cc791ed2be Makes GAGS layer limit per icon state, not per config file (#59923) 2021-07-03 20:31:34 +02:00
Watermelon914
ebac974568 Fixed being able to insert infinitely many components into a shell. Fixes being able to view the shell's circuit in a locked shell. (#59962) 2021-07-03 14:59:38 -03:00
Watermelon914
a57a04b320 Fixed carps being untameable and fixes tameable code not properly removing itself from something (#59955)
Fixes #59897
2021-07-03 14:44:09 -03:00
RandomGamer123
97e15965a1 Fix ion carbine parts kit's name and other similar grammar issues (#59947) 2021-07-02 21:01:14 -07:00
dragomagol
f5be9c5cee Removes reference to intents from Martial Arts instructions (#59921)
In CQC, Plasma Fist, Sleeping Carp and Wrestling instructions verb:
Harm -> Punch
Disarm -> Shove

Also removed reference to intents from the changeling's tentacle grab, changing it to neutral/combat stance.
2021-07-02 11:59:38 -04:00
Rohesie
2c5a357035 Reverts Entered() passing dir instead of old loc (#59910) 2021-07-01 17:06:42 -07:00
Wayland-Smithy
0ce099fd77 Fix rogue vending machines targeting incorporeal (#59920) 2021-07-01 16:35:26 -07:00
Emmett Gaines
05a4afd2fd Adds verification for reference layers to check if target config has the desired icon_state (#59884) 2021-07-01 13:31:10 -07:00
Seris02
bc09b1d15a Makes it so changeling legs copy digitigrade/normal, try number 2 (#59832)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-07-01 13:30:58 -07:00
RandomGamer123
38278f2e17 Change uplink implants to inherit the uplink flags of the uplink they were bought from (#59735)
Uplinks implants bought from uplinks inherit the uplink flags of the uplink they were bought from.

This fixes an undocumented bug where by purchasing an uplink implant, nuke ops would be able to get things they normally can't.

Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com>
2021-07-01 19:58:33 +01:00
Timberpoes
90a611a344 Fix forensic component inheritance inserting null entries into lists and causing to_chat errors. (#59873)
Fixing the following runtime:

[17:13:04] Runtime in to_chat.dm,88: Empty or null string in to_chat proc call.
  proc name: to chat (/proc/to_chat)
  usr: Cowboy_penis_monster/(Zackary Mason)
  usr.loc: (Telecomms Control Room (105,89,2))
  src: null
  call stack:
  to chat(Zackary Mason (/mob/living/carbon/human), "", null, "", 0, 1, 1, 0)
  the forensic scanner (/obj/item/detective_scanner): add log("", 1)
  the forensic scanner (/obj/item/detective_scanner): scan(Control Room (/obj/machinery/door/airlock/command/glass), Zackary Mason (/mob/living/carbon/human))

Forensic scanner attempting to add "" to the logs, which eventually gets output to_chat.

Tracked error down to forensic component lazylists and the fun of trying to OR two lazylists together.
2021-06-30 23:41:04 -03:00
LemonInTheDark
d368e4d49d Changes how weather sends sound to players, reduces sound loop overtime (#59284)
* Converts looping sounds from a list of play locations to just the one

* Updates all uses of looping sounds to match the new arg

* Adds an area based sound manager that hooks into looping sounds to drive the actual audio. I'll be using this to redo how weather effects handle sound

* Some structrual stuff to make everything else smoother
Timers now properly return the time left for client based timers
Weather sends global signals when it starts/stops
Looping sounds now use their timerid var for all their sound related timers, not just the main loop

* This is the painful part
Adds an area sound manager component, it handles the logic of moving into new areas potentially creating new
sound loops. We do some extra work to prevent stacking sound loops.
Adds an ash storm listener element that adds a tailored area sound manager to clients on the lavaland z level.
It's removed on logout.
Adds the ash_storm_sounds assoc list, a reference to this is passed into area sound managers, and it's modified
in a manner that doesn't break the reference in ash_storm (This is what I hate)

* Hooks ash storm listener into cliented mobs and possessed objects

* Documents the odd ref stuff, adds an ignore start var to looping sounds, fixes some errors and lint issues

* Applies kyler's review

banging

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>

* Cleans up some var names, reduces the amount of looping we do in some areas

* Makes the code compile, redoes the movement listener to be more general

* fuck

* We don't need to detach on del if we're just removing signals on detach

* Should? work

* if(direct) memes

Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
2021-06-30 20:51:35 -04:00
bloons3
6e01f2901f Enhances AI law and borg logging (#59684)
Persistent logging for sometimes disputed actions

The "impacted cyborgs" is useful for reconstructing which borgs were synced to an AI at what time, which sometimes may not be clear from logs
2021-06-30 18:16:23 -03:00
Wayland-Smithy
03c1ce3932 Fix hand teleporter and other portals looping forever (#59894)
Makes portals use Bumped() instead of COMSIG_ATOM_ENTERED for detecting atoms crossing the event horizon.

Removes unused and potential loop causing forceMove argument from do_teleport()
2021-06-29 21:53:37 -03:00
Watermelon914
7e9e2df721 Adds USB to arrest consoles. Adds list circuit components. (#59850)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-06-29 13:23:14 -07:00
AnturK
11b8701215 Fixes minor quirk runtime. (#59870) 2021-06-29 20:13:12 +01:00
Timberpoes
c3917b8225 Cooked steaks are once again edible. (#59855) 2021-06-28 15:39:23 -07:00
zxaber
24be009e96 Jaunting no longer allows you to end up inside a wall (#59520)
Jaunting now keeps track of the last five non-blocked tiles you moved across while in the jaunt. Upon exit, it will attempt to deposit you into the last unblocked tile. Should it run out of tiles to try, you will be returned to your starting location. As such, jaunting mobs can no longer end up inside walls or dense objects. Tables, and anything else with the climbable element, are still allowed.

Added support to /turf/proc/is_blocked_turf() to allow ignoring climbable atoms.

Added the TRAIT_CLIMBABLE trait, applied by the climbable element, to accomplish the above.
2021-06-28 11:03:22 -03:00
Timberpoes
fbdfde900c The to_chat proc no longer accepts null or empty strings and runtimes instead. (#59843)
* Catch null text sent to to_chat

* Brain traumas no longer send empty to_chat gain strings

* Make to_chat_immediate changes and clean up args list formatting

* Fix empty to_chat message where there is no memo for admins

* Fix additional edge case where there are no messages for the ckey.
2021-06-28 16:11:33 +03:00
cacogen
d3dd525e08 Cannabis has more believable effects (#59360)
Adds cannabis reagent and replaces space drugs with it in cannabis products
Adds space drugs to rainbow weed, which fits its theme and might satisfy the people who miss the effect
Removes lipolicide from cannabis products in favour of the reagent consuming nutrition directly
Cannabis reagent gives you messages describing symptoms of cannabis intoxication, makes you laugh, makes you hungry, has a chance to couchlock you buckled to a chair and put you to sleep lying down
Cannabis no longer references hallucinating, can't be overdosed and has no addiction
Adds Stoned status effect, which is applied by cannabis reagent
Stoned status effect slows you down, gives you bloodshot eyes, makes you clumsy, boosts your mood and gives you the drugged sound environment
Adds "stoned" icon state for Stoned status effect screen alert (sprite shamelessly stolen from the Smoke spell)
Adds BLOODSHOT_EYES trait, which is applied by Stoned status effect
Adds examine eye descriptions for bloodshot eyes and player-chosen red eyes
Adds cannabis movespeed modifier, which is applied by the Stoned status effect
Adds Stoned mood event, which is applied by Stoned status effect and gives the same mood boost as High but doesn't reference tripping
2021-06-27 21:14:48 -03:00
Time-Green
a915c7167e Refactors species stomach code, makes ethereal charge inherent to their stomach (#59801)
A stomach would literally just ask the species datum how to be hungry and made a bunch of exceptions for ethereals. I mostly just moved code around so that hunger is handled by a persons stomach, thus shrinking the species.dm bloat.

This also makes it so ethereal's charge mechanic is unique to their stomache, instead of this really weird inbetween where just nothing happens and you kinda starve to death. You can stick an ethereal stomach in a human and this will replace their hunger mechanic with the charge mechanic and lets them absorb power from APCs and everything. You can also give ethereals a normal stomach and they'll use the normal hunger mechanics
2021-06-27 12:35:53 -03:00
Mothblocks
23790c6c5e Fix missing SIGNAL_HANDLER (#59826)
Adds SIGNAL_HANDLER to everywhere that didn't have it that was picked up by dm-lua, which is now ready enough to catch these.
2021-06-27 15:43:49 +01:00
Emmett Gaines
67c89fa1ab Greyscale Mat Datum Stationary Smooth Tanks (#59556)
Stationary gas tanks have been in a terrible place for a long time, this addresses some of the issues with a more balance focused change coming in a second mapping pr after this one.

Stationary gas tanks have been made constructable and act similarly to canisters in that they can be damaged, repaired, and over-pressurized to explode. Additionally, they can be made with any rigid material and their stats depend on that material. A glass tank is going to have far less pressure capability than one made of plasteel.

In terms of gameplay there are two main differences now: Adjacent stationary tanks will merge together both graphically and with their internal storage. Any port on any of the tanks can access this shared storage. Also stationary tanks no longer magically have many times the volume for gas as the tile it's in, instead they have a pressure cap and a normal amount of volume.

Of interest to coders this pr also adds a generic grouping datum that acts similar to how pipe networks work. It maintains a listing of all adjacent objects whose type falls within a specified filter. In this case it's used for the gas tanks to know of every other tank in the group. I'll be looking into spreading it's usage elsewhere where this can replace existing one off systems.

Some (de)construction:
First a glass tank is constructed which is then immediately damaged by the high pressure in the gas storage that is now shared. After repairing it for a moment another metal tank is built.
2021-06-26 19:26:33 -07:00
Timberpoes
ffacc8b1e5 Adds a kneecapping element and adds that very element to baseball bats. (#59816)
Implements appropriate signal handlers for /obj/item/proc/attack_secondary() - Secondary item attacks now send signals and signal handlers can now cancel the attack chain, continue it or move to the primary attack chain.

Adds a kneecapping element.

Kneecapping element replaces the item's secondary attack with an aimed attack at the kneecaps under certain circumstances. If these circumstances are not met, the secondary attack chain will continue as normal with the item's normal secondary attack.

Element is incompatible with non-items. Requires the parent item to have a force equal to or greater than WOUND_MINIMUM_DAMAGE. Also requires that the parent can actually get past pre_secondary_attack without the attack chain cancelling. Funnily enough, the Element doesn't require a blunt weapon. If admins add it to sharp or pointy weapons, they get the same aimed attack but with sharp and pointy wounds instead - Because all the Element does is add a hefty wounding modifier.

Kneecapping attacks have a wounding bonus between severe and critical+10 wound thresholds. Without some serious wound protecting armour this all but guarantees a wound of some sort. The attack is directed specifically at a limb and the limb takes the damage.

Requires the attacker to be aiming for either leg zone, which will be targetted specifically. They will than have a 3-second do_mob before executing the attack.

Kneecapping requires the target to either be on the floor, immobilised or buckled to something.

Passing all the checks will cancel the entire attack chain for the Element to handle attacking logic.

This Element has been added to the baseball bat. Any other items that wish to implement its functionality in the future are free to.
2021-06-26 10:10:58 -03:00
DragonTrance
279c93a0a7 Adds Defines for Species IDs (#59797)
Simply puts species IDs into defines ("lizard" turns into #define SPECIES_LIZARD "lizard"). This does not affect any gameplay, and is purely for making sure future code doesn't go all fucked up because someone accidentally misspells something

I only changed code that was spelt correctly, so if there actually is a typo somewhere, it isn't changed
2021-06-25 15:30:16 -03:00
Arkatos1
0b6bcbe711 Integrates spider eggs into the mob spawners (#59727)
Integrates spider egg clusters into the mob spawners instead of them being their own thing, which cleans up a code a fair bit, and gives players an overview of all available types of clusters in the ghost spawners menu, example image below. This also means players banned from ROLE_ALIEN will not be able to spawn as one, as they are very similiar antagonists in concept and it is probably wiser than using default ROLE_LAVALAND on mob spawners for restriction of this role.
Expanded mob spawners code to accomodate for a situations where spawners are using radials for handling mob choosing, and also for when spawners have special conditions for when they are available (like until eggs are mature, for example).
Mob spawners now support giving their mobs multiple factions membership, instead of being limited to only one.
Spider egg clusters now stop processing when they mature, as there is no need for them to do that anymore by that point.
Cleaned up and updated some spider variant radial info boxes, so players have better idea about each variant individual strengths and weaknesses.
2021-06-25 00:09:19 -03:00
Timberpoes
75a3717a04 Modifies right click logic so that it is not the same priority as modifier keys. (#59656)
Strips out the existing right click code - Due to the myriad of ways right clicking has been implemented, dedicated signals and procs for right clicking without modifiers are fundamentally incompatible with our system of primary and secondary attacks.

Adds additional signals to attacking code. These signals allow atoms to cancel the attack chain early on secondary attacks, or override the standard procs and not send signals to prevent any undesired behaviour from signal handlers.

Items that used RightClick procs have been converted to attack_hand_secondary.

The slaughter demon, having its own set of snowflake code as poor OOP principles have been applied in UnarmedAttack() procs with lacking calls to parent procs and arbitrary redefinition of behaviour, checks for a right click in its own UnarmedAttack() and performs a bodyslam off that.

Storage components now hijack the secondary attackby stage via signals to handle their opening and closing shortcuts on right click. When you right click a storage component equipped item with an object in your active hand, the object has an opportunity to perform its logic in pre secondary attack code and cancel the attack chain. If it does not cancel the attack chain in pre-attack, then the storage component takes over for attackby and, if possible, opens the relevant inventory and ends the attack chain.

The forensic scanner is a proof-of-concept of this working in action. With its scan logic moved from afterattack code to pre attack code for right clicking, right clicking with the scanner will now perform a scan where previously one was impossible. Left clicking still does what it always does - Scans at the very end of the attack chain.

The logic still isn't perfect - For example, you still can't attack containers in melee even in combat mode (you'll either open them or put your weapon into them regardless of which option you choose) - But this is a better setup overall which allows for items to at least override this behaviour in pre-attack if needed.
2021-06-24 14:30:33 -03:00
Watermelon914
921416b5d8 Adds the airlock shell, refactors USB code to be easier to use, implements USB cables for the binary valve and more. (#59728)
Adds the airlock shell. The circuit has full control over the airlock.
Refactors USB code to be easier to use for less experienced coders.
Implements USB cables for the binary valve to be able to open/close the valve.
Adds a private channel for radios that only lets circuits with the same owner's ID to interact with it.
2021-06-24 14:22:19 -03:00
eeSPee
b8f675fbf1 Ghoul Moodlet + Max HP fix (#59682)
Adds ghoul moodlet.
Fixes a undocumented issue with ghouls dying and being revived with 25/50 max health.
2021-06-24 14:21:47 -03:00
Watermelon914
f92403f3ed Added circuit component UI details, added multiplexer and allowed inserting components directly into shells. (#59635)
Adds the multiplexer circuit component - en.wikipedia.org/wiki/Multiplexer
Circuit components can now be directly inserted into shells rather than having to take the integrated circuit out.
Special information can be accessed from components now through the "Info" button besides the eject button on a component.
2021-06-23 18:34:19 -03:00
MrMelbert
8dfd1fb627 Converts tippable behavior from cows and medibots to a component (tip over anything with adminbus) (#59705)
This PR converts cow-tipping and medibot-tipping into a component, /datum/component/tippable. Cows and medibots now use the tippable component to control their tipping behaviors.

This PR also goes through a few atom_attack_hand signals and makes them all send the same arguments.
2021-06-23 00:39:22 -03:00
LemonInTheDark
6fcbce39cd Makes turfs persist their signals, uses this to optimize connect_loc (#59608)
* Makes turfs persist signals

* Splits connect_loc up into two elements, one for stuff that wishes to connect on behalf of something, and one for stuff that just wants to connect normally. Connecting on behalf of someone has a significant amount of overhead, so let's do this to keep things clear

* Converts all uses of connect_loc over to the new patterns

* Adds some comments, actually makes turfs persist signals

* There's no need to detach connect loc anymore, since all it does is unregister signals. Unregisters a signal from formorly decal'd turfs, and makes the changeturf signal persistance stuff actually work

* bro fuck documentation

* Changes from a var to a proc, prevents admemems and idiots

* Extra detail on why we do the copy post qdel
2021-06-22 23:12:34 -04:00
Fikou
24549d707b Toy Update (#59754)
* code

* sprite part 1

* sprites and mapping

* wa

* fix

* warden figure fix

* warden fix 2

* wahwah

* Update code/game/objects/items/toys.dm

* series

Co-authored-by: tralezab <spamqetuo2@gmail.com>
2021-06-22 00:17:26 -07:00
Rohesie
e03cd1aada Refactors move procs to support multitle objects (#59658)
Enter(), Entered(), Exit() and Exited() all passed the old loc forward, but everything except a single a case cared about the direction of the movement more than about the specific source.
Since moving multi-tile objects will have multiple sources of movement but a single direction, this change makes it easier to track their movement.

Cleaned up a lot of code around and made proc inputs compatible.

I'll add opacity support for multi-tile objects in a different PR after this is merged, as this has grown large enough and I don't want to compromise the reviewability.

Tested this locally and as expected it didn't impair movement nor produced any runtimes.
2021-06-20 14:55:37 -07:00
dragomagol
09c0f20377 Correctly pluralize multiple projectiles (#59702)
When something gets hit by multiple projectiles whose names end in "s", an extra "s" gets added to pluralize them. Sadly \s doesn't add the es, so I've made a proc with the other conjugation methods and used it for projectiles.
2021-06-20 14:22:26 -07:00
Timberpoes
65cf3929ce Improves H.A.U.L. gauntlets and /datum/component/strong_pull code, fixing a couple of little issues in the process (#59550)
Does a bit of a logic re-write on the cargo gauntlets and their strong_pull component.

Cargo gauntlets themselves have been converted to use signals for equipping and unequipping.

Their component reference has been changed to a weakref so if the component is ever Destroy()ed for any reason outside of the gauntlets it doesn't hard del.

The strong_pull component now registers signals with parent in RegisterWithParent() instead of Init() and removing the strong grip is no longer a SIGNAL_HANDLER proc. It is now called by the signal handler for no longer pulling things and in Destroy(). This stops instances where pulling things and removing the gloves didn't remove the pull effect appropriately.
2021-06-20 14:12:10 -07:00
ArcaneMusic
839a6d45bc Converts suspenders to GAGS. (#59537)
Suspenders were already basically given a greyscale sprite by me in the past, this converts them to GAGS allowing custom recolors of them through existing code already in place.
2021-06-20 13:54:32 -07:00
Y0SH1M4S73R
63e33bd709 Makes mutant bodyparts and mutcolors into editable genetic traits (plus a whole shitload of otherwise out of scope code improvements because I just HAD to touch old code) (#59636)
I noticed that various nonhuman body features can't be changed using genetics. I corrected this by adding a block to character genomes allowing you to edit features in the DNA console.
2021-06-20 16:20:09 -03:00
Krysonism
83b78e58fa Add ectoscopic sniffer to Robotics Labs (#59494)
This PR adds a new machine; the ectoscopic sniffer, to the robotics lab on each map.

The sniffer is small desktop machine used for detecting paranormal activity, it displays a green flash and a chime every time it is touched(as in attacked) by a ghost.

It has a single wire inside, when this wire is pulsed, it triggers the animation and chime, as if touched by a ghost, maybe some enterprising crewmember can use this to their advantage. When this wire is cut, the device won't trigger, no matter how many spooks or haunts touch it.

---

This PR is above all fun.

Of course, it can be used as the author of the previous PR intended; to alert the roboticists of souls willing to occupy a positronic brain.

Clever spacemen will always figure out how to use this kind of device for more creative parascientifc research.

It is still limited by its low bitrate and the very low quality of the information as compared to something like ghost court, since a single malevolent spirit is able to feed the living bullshit.

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-06-19 14:32:44 +01:00
Watermelon914
21103dc00b Fixes integrated circuits not being able to have more components added to them (#59724)
Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com>
2021-06-19 20:38:35 +12:00
Rohesie
0ec599786a Adds a setter for density (#59529)
Adds set_density()
Fixes one instance of a duplicate density assignment on an object.
Comments two hacky usages of density which will have to forgo using the setter for now.

Lets us append code to the event of density changing.
Pretty sure this is leading up to some multitile object thing -Lemon
2021-06-16 15:06:10 -07:00
Mothblocks
4007f74490 USB Cables -- Connect circuits to computers/machines (#59345)
* Initial commit

* Sprites, finishing work

* More ways to detach from circuitboards

* Clear TODOs, give bots a button

* Fix qdel loop

* Designs

* It's the bots that have them

* Grammar fix

* Feedback for connecting to circuit directly

* Add USB cable design to basic circuitry

* Better naming

* Feedback

* Fix for new code

* COMSIG_CIRCUIT_ADD_COMPONENT_MANUALLY

* span procs
2021-06-15 14:23:16 -04:00
John Willard
a5308068d7 Gives the Bartender a Weapon's permit by default (#59642) 2021-06-15 09:38:52 -07:00