Commit Graph

1356 Commits

Author SHA1 Message Date
cacogen
abaa9bdedf Adds deflection messages for no damage attacks against objects (#58873)
* Adds deflection messages for no damage attacks

* Changes the addition to ", which doesn't leave a mark" instead
2021-05-14 17:01:23 -04:00
Jonathan Rubenstein
770148de06 Replace Maint. Drone machinery whitelist with last touched check & other tweaks (#58802)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-05-08 16:12:31 -07:00
LemonInTheDark
c906c44393 Fixes a fuck ton more harddels (#58779)
Redoes how geese handle eating shit, it was fucking stupid and caused harddels, and while this method is technically slower in the best case, it's a fucking goose
Fixes action related harddels, I hate how they work but at least this way they won't hold refs.
Fixes the hierophont causing its beacon to harddel
Removes the M variable from megafauna actions, it was used like a typed owner and caused harddels, so I burned it
Fixes target and targets_from harddels, replaces all setters of target with LoseTarget and GiveTarget, which should help maintain behavior. I'm not sure if this breaks anything, but if it does we should fix the assumptions that code makes instead of reverting this change
Fixes more area_senstive_contents related harddels, we need to allow the mob to move before clearing out its list.
Fixes marked object harddels (I'm coming for you admin team)
Fixes a language based human harddel
Fixes managed overlay related harddels (This was just emissive blockers, but I think this is a good safety net to have. If we clear the overlay list we should clear this one as well)
Fixes bot core harddels, I hate the fact that this exists but it has no reason to know who its owner is
Adds a walk(src, 0) to simple_animal destroy, it's the best bang for the buck in terms of stopping spurious harddels. Walk related harddels aren't that expensive in the first place, since byond does the same thing I'm doing here, but this makes finding mob harddels easier, so let's go with it
I fixed another source of part harddels, I hate fullupgrade so much
Fixes all the sound loop harddels
2021-05-05 10:57:27 -04:00
Emmett Gaines
b2b15abe6b Allows canister repairs and adds right click tool acts (#58830)
* Allows canister repairs

* Name consistency and some output cleanup
2021-05-02 02:10:54 -07:00
TemporalOroboros
03164f4fcb Emissive system refactor (#58130)
The emissives system is the system that both lets computer screens and vendors glow in the dark and lets mobs and items block those glows. The current implementation relies on using filters to let mobs and items mask out the glow in the dark overlays on some structures. This is difficult to extend properly without massively increasing maptick. This PR changes the emissives system to use BYONDs native image layering to mask emissive overlays. This should prove to be a more extensible option.

tldr; There exists a system that lets computer screens glow on the dark and lets mobs and items block the glow. It isn't very extensible and this PR attempts to make it more extensible.

How emissive overlays used to work

Currently emissive overlays and the emissive blockers that mask those overlays are handled using a system of inter-masking planes. The emissive overlays and the emissive blockers are placed on separate, hidden plane masters. These are essentially rendering layers and groups. The emissive blocker plane is then used to mask the emissive overlay plane which effectively allows the emissive blockers to block the emissive overlays from being seen. After is has been masked the emissive overlay plane is used to mask the lighting plane, essentially creating holes in the shadows wherever an unblocked glowing thing exists.

Why this is a potential problem

This system works fine. In fact it works great! The computer screens glow, any person or item that winds up on a computer blocks the glow, and everything just works. However, this system runs into some issues when you try to extend it to work on things other than structures. Namely, the current system only supports emissive overlays on structures and emissive overlays that are completely unblockable by any means. As a result, several interesting uses to the system require extending the system.

As a result, if you want to apply emissive overlays to items (which exist between structures and mobs) or emissive overlays to turfs (which exist below structures) you must extend the emissives system to get the emissive overlays and emissive blockers to properly function. Doing this naively, by adding extra emissive overlay and emissive blocker planes and applying all of the relevant masking filters, is not exactly performant.

Maptick is a major contributor to lag and the higher the maptick the more free lag you, the player, get delivered fresh to your client. Trying the naive method resulted in #55782 (1f1b58bb26), an attempt to add glowing carpet to the game. Since the PR revolved around adding glowing carpet it had to extend the emissives system to allow for emissive turfs and emissive blocking structures. Extending the system was done naively as described above and you can see the results. 1.5 times the maptick across the board. Ouch.

So, we know that extending the system in it's current form is impractical. At least if done naively. Thus we are stuck.

tldr; The emissive system currently uses inter-plane masking to allow for emissive blockers to function. This is difficult to reasonably extend without murdering maptick. See #56496 (1f1b58bb26) for the results of naively extending this system.

How emissive overlays are going to work

Alright, so we know that the current system of using planes to let the emissive blockers mask the emissive overlays is difficult to extend in it's current form. The solution is to change how the system works so that it can be extended in a more efficient manner. What we want is a system that allows one set of images to be out masked by another set of images and for the first set of images to be capable of masking the light plane. Preferably, we would also like the ability to interleave the masking effect between emissives and emissive blockers with almost arbitrary layering.

Conveniently, this layering and masking is something BYOND already does to normal items and objects. If we put the emissive overlays and the emissive blockers on the same plane we can use their layers to interleave them almost arbitrarily like any normal structures and items! All we need is a way to mask away the emissive blockers from the resulting rendered plane and we can mask the lighting plane with the remaining emissive overlays.

Luckily, BYOND has provided a single filter that is capable of this task. The color matrix filter. This filter can be used to apply a color matrix to an image! Provided that the emissive overlays and the emissive blockers are different colors we can use a color matrix filter to effectively mask out the emissive blockers from the plane! The resulting emissive plane can be applied as an alpha mask to the lighting plane as it used to, to the same effect. The best part is, we get layering practically for free!

This is exactly what this PR does. It converts the emissives system from the old plane and masking based blocking to a new layer-based system which uses BYONDs native layer handling to mask the emissive overlays.
2021-04-26 15:56:37 -07:00
Gandalf
0fdff5ce1a Makes Ctrl+shift+click pass user (#58480) 2021-04-17 22:50:03 -07:00
Mothblocks
1e848e5738 Move eyestabbing to an element, rather than as part of core combat code (#58358)
Moves eyestabbing off from an item flag that is checked on every item attack to an element.

Kills /obj/item/proc/eyestab, and makes the new element the sole owner.
2021-04-17 00:53:33 +01:00
norill
4783c173f8 Clicking floor tiles closes airlocks (#58124) 2021-04-15 15:07:35 -07:00
Rob Bailey
b0f74e3831 minor layer fixes (#58350)
cl
fix: radials layer correctly
/cl
2021-04-13 13:15:16 +12:00
Jonathan Rubenstein
456e475da5 Renews Maintenance Drones (#58249)
It's the second try! (First: #48456)

Drones are little robots inspired by Keepers from the Mass Effect games. With laws to maintain both the station, and their distance from the matters of others, they were a great ghost role that let you fix up the station when you were otherwise out of the round. They were in the game for quite a while, but were abused. The abusive players completely ignored the laws and did whatever they wanted. Being tiny ventcrawlers, this became a huge issue for admins.

I attempted to bring them back, this time with some gameplay restrictions to enforce their laws a bit better. It seemed to go well, but I required headmin approval, and this all happened near a headmin election, so the project died.

Recently, some people have wanted to bring drones back. So, they gave me a ring, and I started a discussion with the admin team to see what other changes they would want in addition to the previous ones.

Here are those changes:

    They can't interact at all when close to another being, living or dead
    Their binary chat has been removed to separate them from AI and borgs
    They can only hold a whitelist of items necessary to do their job
    They can only interact with machines necessary to do their job
    The drone satchel is gone, and drones now have built in basic tools
    They also can't interact in some blacklisted high risk areas
    Finally, you must play 40 hours total as a Silicon role in order to play as a drone

Additionally, the drone dispenser is not mapped, and the drones must be researched to be constructed.
Why It's Good For The Game

Drones are a fun way to pass the time, and this time they have a lot less freedom. You can still perform the basic function of maintaining the station, but not without difficulty and tedium. This will allow other station roles to perform much better than the drones, while still letting them chug along at their slower pace.
2021-04-13 13:10:36 +12:00
LemonInTheDark
1b7e6c8127 Fixes plane master filters not working properly due to a null in the controlled planes list, turns out OPENSPACE_PLANE isn't an actual plane master. Let's add a stack trace for this case just in, well case yeah? (#58291) 2021-04-12 06:55:45 -07:00
Emmanuel S
a7b6c18a52 Fixes a critical accidental early return (#58128)
Emergency meetings work now

This loop shouldn't give up so quickly
Makes emergency meetings work when there are new players about
Also sets the 'show when dead' var to true so ghosts get the full experience
2021-04-02 21:58:26 -07:00
Emmanuel S
97945e7d08 Adds emergency meetings during april fools (#58098)
🆑
add: The captain can now sometimes call emergency meetings using the communications console! Hopefully the crew will be able to sus out any imposters who might be among them!
/🆑
2021-04-03 10:52:54 +13:00
Rob Bailey
292b217911 Layer overhaul (#57915)
## About The Pull Request
Changes up some layer and plane defines for no particular reason lol

## Why It's Good For The Game
Planes actually override layers, and layers control ordering within planes. A lot of the usage of plane and layer was wholly unnecessary. This refactor helps future maintainability while also being needed staging for _future features._
2021-03-29 09:51:44 -04:00
Ghom
c6bacd5e68 Cyborgs now use the same icon states for charge screen alerts as ethereals. (#57966) 2021-03-27 09:36:04 -07:00
Arkatos1
1bd062e9cf Blobbernaut HUD improvements (#57922) 2021-03-26 03:39:11 -07:00
Thalpy
eee51bcaaa Fermichem 2.6 - Adds the HPLC: a new roundstart method of detecting purity, as well as a method of partially purifying reagents (#57858)
Adds the High-performance liquid chromatography machine - a new roundstart method of detecting purity, as well as a method of partially purifying reagents.

A single machine has been added to each of the 4(5) maps - this lets people determine their purity based off the size of the green (pure portion) to the orange (impure portion) of a reagent's peak shown on the mas spectroscopy display. If a reagent is impure - it will be displayed as red.

In addition to this function, the HPLC can purify reagents by selecting a range of them and pressing the purify button. This will cost some time depending on the mass of the reagent and will purify it up it's default purity (in the tweaked reagent cases - 75%, for the reagents I've yet to get to - 100%). It will also reduce the volume accordingly (so in essence you are reducing the volume of the impure parts).

The sprite itself will indicate when it's running, so you don't need to be nearby it or use the UI to know when it's done
2021-03-26 11:56:53 +02:00
Qustinnus
40d75cc340 You can now put food on plates, and plate no longer materialize out of nowhere as you cook (#57770)
* All plates removed.
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: DeAndre <robustness13@hotmail.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
Co-authored-by: Krysonism <49783092+Krysonism@users.noreply.github.com>
2021-03-26 08:32:27 +01:00
Arkatos1
82dba0c2bc Improves status bar coverage (#57916)
This PR makes sure all MouseEntered() procs call their parent, which handles the status bar. This fixes instances where the status bar was missing, for example when you hovered over the ghost buttons, you would not be shown a name of the button, but completely different object, like "space", which was very misleading. This also means that the new status bar should have better parity the with the old status bar, which also showed these things.
2021-03-25 12:46:12 -04:00
Arkatos1
f599d3e600 Adds right-click support to AIs/Cyborgs (#57881)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-03-22 20:38:11 -07:00
Timberpoes
f116289e67 Fixes not being able to open inactive ticket browser on admin ticket tab. (#57882)
About The Pull Request

Currently admins can't access the ticket logs for Resolved, Disconnected, Closed and Active tickets due to an early return that will block these from being opened in 100% of circumstances.

Clicking on the Active/Disconnected/Closed/Resolved tickets would have behaviour handled by /datum/admin_help_tickets/proc/BrowseTickets() which was reached through Click() calls.

image

When we call .Click() from topic calls, we provide a null var for the control parameter.

This then leads through to /client/Click() where #57084 added a bunch of if(!control) checks supposedly ported from TGMC (or at least Fikou couldn't explain why we changed that).

I can't find a single instance of us using this locally, it appears it's always passed through to Byond. Byond docs at http://www.byond.com/docs/ref/#/client/proc/Click describe it as control - the name of the skin control involved

I can't see any reason to early return if control is a FALSE-y value. This check is what was blocking access to the admin_help_tickets datum.

In testing, removing these checks restored previous functionality.
Why It's Good For The Game

Admins less triggered.
Changelog

🆑
fix: Admins can once again open the stat panels to look at active, disconnected, closed and resolved tickets.
/🆑
2021-03-22 18:14:47 +13:00
Fikou
ed85d3f5aa Full-Automatic Guns (#57084)
* fullauto component

* eh

* h

* brap

* it works!

* FUCK SHITUP

* dumbass

* l6

* oops

* GOD

* THE LAST 10% OF A PROJECT IS 90% OF THE WORK

* slopwer projecitles, replaces the tesla gun

* heavy

* minigun

* minigun stuff

* runtime fixes, pointer icon

* nuh uh

* makes modifeirs things

* nerf this

* yes

* aghh

* agh

* real high intensity changes here

Co-authored-by: Ryll-Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
2021-03-20 21:39:52 -07:00
IndieanaJones
b668738b94 Adds RangedRightClickOn to Mobs (#57841)
* Adds OnRangedRightClick

* Do Changes
2021-03-20 16:35:37 -07:00
Cimika/Lessie/KathyRyals
b8b4bf0399 Refactors /mob/living/CtrlClick(mob/user) and fixes pulling issues. (#57617)
Refactors the whole /mob/living/CtrlClick(mob/user) proc to be better and fixes some issues around grabbing failing due to poor logic. Closes #57618
2021-03-20 16:05:18 -07:00
ATH1909
be36311def player-controlled gorillas can now choose to punch windows down instead of politely knocking on them (#57715) 2021-03-16 02:14:01 -07:00
LemonInTheDark
99cd00f5fe Makes gas actually dissipate (#57634)
* Raises the quantize threshold from 1E-7 to 1E-4.

This makes gas dissipate as expected, and should help with the amount of useless gas floating around the station
at highpop

Adds a garbage_collect() call to the portion of pipeline code where all gasmixes are in one place, this should
clean things up properly.

Changes BREATH_VOLUME from 2 to 1.99. This is imperative
Documents a FUCKING HELLBUG in quantize/breathcode that can lead to breaths just not working sometimes. I'm not
sure how to fix this totally, so I'll document it and pray.
See <https://www.desmos.com/calculator/5icdlnktus>
Adds a unit test to check for this sort of failure.

Addendum for people tweaking this value in the future.
Because o2 tank release values/human o2 requirements are very strictly set to the same pressure, small errors
can cause breakage
This comes from QUANTIZE being used in /datum/gas_mixture.remove(), forming a slight sawtooth pattern of the
added/removed gas, centered on the actual pressure
Changing BREATH_VOLUME can set us on the lower half of this sawtooth, making humans unable to breath at standard
pressure.
There's no good way I can come up with to hardcode a fix for this. So if you're going to change this variable
graph the functions that describe how it is used/how it interacts with breath code, and pick something on the
upper half of the sawtooth
NOTE: I've made this change with a focus on o2 requirements. Changing this will effect other settings, but most
all of them can be ignored, as none will notice.

* Thank you moth man

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>

* Docs the purpose of the breath unit test, and better explains partial pressure

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-03-13 14:49:50 +13:00
necromanceranne
787d88352a Fixes grab telekinesis with CQC (#57602) 2021-03-10 17:31:02 +00:00
wesoda25
26053c296b Fixes ethereals being unable to channel power into APCs, readds some defines (#57417) 2021-03-09 16:12:47 -08:00
Qustinnus
93fdfa1ab4 Adds a hotkey that puts you in throw mode aslong as you hold it (#57331)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-03-08 05:17:19 -08:00
Jack LeCroy
7f99f1bbb3 Fix issues with martial arts attacks not registering (#57131) 2021-03-07 15:22:18 -08:00
Mothblocks
b8ea8ffe2c Replaces Jump to Mob with Spawners Menu (#57471)
The Jump to Mob verb still exists for the 3 people who think they had a good use case for it, but it is no longer front and center.
2021-03-07 10:42:35 -05:00
Ryll Ryll
ced28d5cec Dog AI 2.0 (#57186)
Now that JPS and AI movement datums are fully merged, I'm here to take another (my third actually) crack at giving dogs fun AI. Here's a video demonstration (somewhat WIP), and a quick rundown of everything dogs will be able to do. Basically all of these behaviors are generic and can be extended to other simple mobs,
Commands and Friendship
Fetching
Attack/Harass
Heel
Play Dead
2021-03-07 02:19:38 +00:00
Arkatos1
6cee74d347 HUD cleanup and fixes (#57297) 2021-03-02 15:39:53 -08:00
Fikou
60424d0e0e adds a bitflag for no random pixel shift on dropping, adds turf_flags var to replace usage of flags_1 on turfs (#57263)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-03-01 01:23:38 -08:00
Ryll Ryll
66daec9eb8 *smacks table* Hot Damn! (#57269) 2021-02-28 22:22:33 -08:00
Gurkenglas
95f37913d9 RangedAttack now takes modifiers. (#57214) 2021-02-27 19:55:23 -08:00
Ghom
6554334e33 Combo streaks (not just the hud icons) now reset after half a dozen seconds (amount subject to change). (#57167)
Co-authored-by: Ghommie <425422238+Ghommie@users.noreply.github.com>
2021-02-26 00:13:35 -08:00
Arkatos1
58559751ee Fixes action button movement not working (#57177) 2021-02-25 19:02:35 -08:00
Gurkenglas
9f0579812b ninjaDrainAct is now used with rightclick, not toggled with HUD. (#57153) 2021-02-24 15:21:41 -08:00
Fikou
38fbe0f26b Adds the Intento! (#56770)
Co-authored-by: Jack Edge <yellowbounder@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-02-23 14:42:54 -08:00
Qustinnus
931a32ffb3 Experi-Sci: Techweb nodes may now require you to perform "scientific" experiments (#54093)
Co-authored-by: Brett Williams <bobbahbrown@gmail.com>
Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-02-23 13:30:24 -08:00
Timberpoes
6d8d0a415e Fixes restraint alerts doing nothing when clicked. (#57034) 2021-02-20 00:36:59 -08:00
TemporalOroboros
e4079c87b8 update_appearance (#55468)
Creates update_name and update_desc
Creates the wrapper proc update_appearance to batch update_name, update_desc, and update_icon together
Less non-icon handling code in update_icon and friends
Signal hooks for things that want to change names and descriptions
99%+ of the changes in this are just from switching everything over to update_appearance from update_icon
2021-02-19 12:06:18 -03:00
Timberpoes
25b6d73f9b Fix oversight allowing orbiting players to force the player they're orbitting to *surrender (#56972)
Observers with auto-observe inherit the HUD of the person they're observing. This includes Alerts. Alerts can be clicked. Alerts have varying levels of snowflaked checks. Some called parent and didn't check the return value. Some perform actions direct on usr instead of owner.

All of this has been standardised. Every single screen alert now calls ..() on Click() and returns early if the parent proc call returns false.

/atom/movable/screen/alert/Click now returns some useful value to children that call it.
2021-02-18 00:46:07 -03:00
Qustinnus
e8a7bd566f Hovering your mouse over things now shows their name on the top of the screen (#56729)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2021-02-16 18:57:34 -08:00
Arkatos1
abacfdd0af Replaces Construct HUD with a generic version (#56942) 2021-02-16 15:25:57 -08:00
LemonInTheDark
5c22a0cfc1 Converts many proc overrides to properly use list/modifiers, lots of other smaller things (#56847)
Converts many proc overrides to properly use list/modifiers, fixes some spots where modifiers should have been passed, calls modifiers what it is, a lazy list, and cleans up some improper arg names like L, M, C, and N. Oh and I think there was a spot where someone was trying to pass M.name in as a string, but forgot to wrap it in []. I fixed that too.
2021-02-16 09:18:46 -05:00
Mothblocks
0f435d5dff Remove hideous inline tab indentation, and bans it in contributing guidelines (#56912)
Done using this command sed -Ei 's/(\s*\S+)\s*\t+/\1 /g' code/**/*.dm

We have countless examples in the codebase with this style gone wrong, and defines and such being on hideously different levels of indentation. Fixing this to keep the alignment involves tainting the blames of code your PR doesn't need to be touching at all. And ultimately, it's hideous.

There are some files that this sed makes uglier. I can fix these when they are pointed out, but I believe this is ultimately for the greater good of readability. I'm more concerned with if any strings relied on this.

Hi codeowners!

Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
2021-02-14 16:53:29 -08:00
MrMelbert
4f7a73c3e0 Moves the plant analyzer chem mode to right click + lets you read out a tray's chemical contents (#56836) 2021-02-13 00:35:29 -08:00
LemonInTheDark
f4160f26db Converts all uses of modifiers to lazy access to avoid memes in future (#56846) 2021-02-12 15:25:31 -08:00