-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Improves Bleeding Feedback + Misc Wound/Organ Decay Tweaks (+ Removes Teeth) #56056
Conversation
add closes #55009 |
This feels like it'd be great when combined with an alert providing the same information by the way, but not necessary. |
code/datums/wounds/_wounds.dm
Outdated
* Returns BLOOD_FLOW_STEADY if we're not bleeding or there's no change (like piercing), BLOOD_FLOW_DECREASING if we're clotting (non-critical slashes, gauzed, coagulant, etc), BLOOD_FLOW_INCREASING if we're opening up (crit slashes/herapin) | ||
*/ | ||
/datum/wound/proc/get_bleed_rate_of_change() | ||
if(blood_flow && victim.reagents.has_reagent(/datum/reagent/toxin/heparin)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Heparin should be giving a trait/status effect instead of checking it everywhere like this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pretend I commented this on all your explicit heparin checks.
code/datums/wounds/burns.dm
Outdated
if(infestation <= WOUND_INFECTION_MODERATE && limb.burn_dam < 10) // if we have little/no infection, the limb doesn't have much burn damage, and our nutrition is good, heal some flesh | ||
switch(victim.nutrition) | ||
if(NUTRITION_LEVEL_FED to NUTRITION_LEVEL_WELL_FED) | ||
flesh_healing += 0.6 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Move 0.6 out to its own define if you're going to be using it multiple times.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, just to be clear, this code means that if you've got a "good" amount of nutrition your burns heal, but if you're stuffing your face with ice cream, they are less likely to heal?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just narrowed it down to having at least fed and all being the same rate
code/modules/mob/living/blood.dm
Outdated
if(isturf(src.loc)) //Blood loss still happens in locker, floor stays clean | ||
if(amt >= 10) | ||
add_splatter_floor(src.loc) | ||
else | ||
add_splatter_floor(src.loc, 1) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Drop src
.
code/modules/mob/living/blood.dm
Outdated
bleeding_severity = "Your heartbeat thrashes wildly trying to keep up with your bloodloss" | ||
|
||
var/rate_of_change = ", but it's getting better." // if there's no wounds actively getting bloodier or maintaining the same flow, we must be getting better! | ||
if(reagents?.has_reagent(/datum/reagent/medicine/coagulant)) // if we have coagulant, we're getting better |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This should probably be a trait/status effect too.
Remember for strong mothteeth, drink lots of mothmilk. |
can we finally have status indicator for each category of wounds? instead of generic anime esclamation mark? |
That's actually what I did originally, but there's a really low limit for how many alerts you can have on a person at once, I think somewhere like 5-6 (I can't remember if it's like a hard limit or you just start running out of screen space), so having them all share one alert was necessary. |
code/modules/mob/living/blood.dm
Outdated
|
||
var/rate_of_change = ", but it's getting better." // if there's no wounds actively getting bloodier or maintaining the same flow, we must be getting better! | ||
if(reagents?.has_reagent(/datum/reagent/medicine/coagulant)) // if we have coagulant, we're getting better | ||
rate_of_change = ", but the medicine in your veins is helping the clotting!" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is this really a thing that a person would notice? Maybe if someone had that "self aware" quirk?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
changed the message, but i do want to give people an indication that their coagulant is working or when they run out
code/datums/wounds/burns.dm
Outdated
@@ -174,15 +185,15 @@ | |||
. += "\tSurgical debridement, antiobiotics/sterilizers, or regenerative mesh will rid infection. Paramedic UV penlights are also effective.\n" | |||
|
|||
if(flesh_damage > 0) | |||
. += "Flesh damage detected: Please apply ointment or regenerative mesh to allow recovery.\n" | |||
. += "Flesh damage detected: Application of ointment or regenerative mesh, or ingestion of \"Miner's Salve\", will speed flesh recovery. Good nutrition, rest, and keeping the wound clean can also slowly repair flesh.\n" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Or application of synthflesh... Seems like Miner's Salve is being really specific?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Well it's specific because it's one of the things that works
|
||
/datum/reagent/medicine/coagulant/on_mob_end_metabolize(mob/living/M) | ||
if(was_working) | ||
to_chat(M, "<span class='warning'>The medicine thickening your blood loses its effect!</span>") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Again, it seems... kinda weird that you'd know about this
What about cavity implants on flys and moths? |
@@ -236,6 +236,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai | |||
#define TRAIT_NANITE_MONITORING "nanite_monitoring" //The mob's nanites are sending a monitoring signal visible on diag HUD | |||
/// Prevents mob from riding mobs when buckled onto something | |||
#define TRAIT_CANT_RIDE "cant_ride" | |||
#define TRAIT_BLOODY_MESS "bloody_mess" //from heparin, makes open bleeding wounds rapidly spill more blood | |||
#define TRAIT_COAGULATING "coagulating" //from coagulant reagents, this doesn't affect the bleeding itself but does affect the bleed warning messages |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
this doesn't affect the bleeding itself but does affect the bleed warning messages
Is this comment true? It looks like it manipulates the flow of blood too.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The actual effects on bleeding and wounds that coagulant has is handled in the coagulant reagent. Unlike TRAIT_BLOODY_MESS, which is used to increase bleeding rates in wounds in multiple places, this trait itself is only used as a sign that someone has coagulant in their blood for bleed warning messages.
Should be good to go |
* throw_at() will not quickstart a throw if the throw was triggered from the same stack as SSthrowing/fire() (tgstation#56004) throw_at will not quickstart a throw if the throw was triggered from the same stack as SSthrowing/fire() Infinite throwing loops are fine, as long as they don't loop at the stack level. * what did he mean by this (tgstation#56042) Potato goofed 7 months ago so here's a fix (Fridges were defaulting to a force of true, which was... jank) * Automatic changelog generation for PR tgstation#56042 [ci skip] * Banana & peel resprite. (tgstation#56015) imageadd: Bananas & peels have been resprited. * Automatic changelog generation for PR tgstation#56015 [ci skip] * fixies (tgstation#56054) You can now ride the banana glutton properly. * Automatic changelog generation for PR tgstation#56054 [ci skip] * Adds Rocket Backblast (tgstation#55681) This PR adds the backblast element, which when attached to a gun, creates giant plumes of fire when said gun is fired. The PM9 rocket launcher that nuke ops can buy kinda sucks and even a direct hit with the standard rockets loaded isn't enough to guarantee a one-hit crit on a direct hit against an armored opponent, which sucks for how much you pay for it. In that vein, I've also buffed the standard rockets a bit, they now do 50 brute up from 30 on a direct hit, and they create flames on their explosion. Also makes a tweak to /proc/get_turf_in_angle(), since tile coordinates start at 1,1 instead of 0,0 that proc is now clamped to min 1,1 rather than 0,0 * Automatic changelog generation for PR tgstation#55681 [ci skip] * Sticky syndicate access (tgstation#56032) Adds sticky access. Sticky access will be readded if removed in the identification console. Currently only used to fix tgstation#54429. Also converts some comments in card_ids.dm to DMdoc comments and adds some new ones. * Automatic changelog generation for PR tgstation#56032 [ci skip] * Fix wheel error for ci_suit workflow (tgstation#56053) Adds wheel package since its required by some setup.py Workflow run with this option added: https://github.com/Gamer025/tgstation/pull/1/checks?check_run_id=1672278250 Gets rid of all the error: invalid command 'bdist_wheel' errors in the ci_suite workflows * Tweak the RD's suplexing ability into a skillchip (tgstation#55870) Although this doesn't change the power level of the Research Director, it's important to rework "job title" checks into traits or something similar. Moving job title specific behaviour out of checks by job name and into traits means there's more flexibility to trigger behaviour. If an admin feels the station really needs the ability, they can var edit it in, or spawn the chip. * Automatic changelog generation for PR tgstation#55870 [ci skip] * tgui: List Input (tgstation#56065) Ported over from https://gitlab.com/cmdevs/colonial-warfare/-/merge_requests/613 which provides an input box to select an option from a list. Has a search bar to allow filtering for results and an onKeyDown event to replicate default behaviour from the default list input boxes that BYOND provides (where you are able to type the first letter of an element in the list and it'll jump to the first element that matches and then the next and so on) Right now, it is only applied to the holopad and "Drop Bomb" verb for administrators. Credits to bobbahbrown for the Loader element from AlertModal.js which allows for a timed input (was needed on the CM codebase for timed inputs) and for the majority of the DM code. Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> * Automatic changelog generation for PR tgstation#56065 [ci skip] * Sets the charset and collation for the SQL schema to utf8mb4 (tgstation#56060) Changes the charset and collation in the SQL schema to utf8mb4 (which is default in ubuntu 20.04 and debian 10 for MariaDB). This solves all the problems with russian or other non-latin1 characters in many cases related to the use of the database, because surprisingly the rest is already ready for such use cases. I am not adding any SQL script to migrate from latin1 to utf8mb4, as this is an extremely destructive action. It must be performed manually with the data of all tables backed up before doing so. However, this can be done by using the following queries, one time for database: ALTER DATABASE databse_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; and one for each table: ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; * [READY] Nukes archeology component and icon_plating and environment_type in favor of base_icon_state. Dig behaviour code improvement (tgstation#55819) * aa * Removes archeology component. Nukes icon_plating and environment_type in favor of base_icon_state * Actually maybe lets not use a proc for updating asteroid icon state when its dugged up * Update plating.dm * Automatic changelog generation for PR tgstation#55819 [ci skip] * Correctly transfer skillchips when ahealing someone (tgstation#56064) When ahealing someone via the player panel their skillchips weren't transfered correctly. The actually skillchip object was left in the old brain and eventually hard deleted. This caused a runtime when ahealing someone a second time (after the harddel). This then caused the target to actually have 2 brains because of the runtime while ahealing * Automatic changelog generation for PR tgstation#56064 [ci skip] * Telekinesis can throw non items (vending machines, lockers) only 1 tile far (tgstation#56063) Telekinesis users can now only throw items 10 tiles, everything else can only be thrown 1 tile * Automatic changelog generation for PR tgstation#56063 [ci skip] * Fixes 2 really annoying cytology virus bugs. (tgstation#56062) This PR fixes the generate_sample proc so it properly uses virus_chance to determine when to generate a virus. Now most samples will be virus free as intended. It also fixes the bug where virus penalty and spaceacillin consumption would be multiplied by the number of cell lines, rather than the number of viruses, as intended. * Automatic changelog generation for PR tgstation#56062 [ci skip] * Added a standardized json unit test results log and added my vscode test runner to recommendations (tgstation#56058) Link to the test explorer: https://marketplace.visualstudio.com/items?itemName=Donkie.vscode-tgstation-test-adapter The test explorer adapter lets you compile and run the code in one click of a button, with no messing about with defines necessary The extension supports reading test results from the unit test logs, but its shitty having to parse logs for that, so this PR also adds support for a somewhat standardized method of logging unit test results to a json file instead. * Automatic changelog generation for PR tgstation#56058 [ci skip] * Xenomorph embryos now grow based on consistent timers instead of 100% RNG (3% chance every 2s) (tgstation#55755) • Adds documentation to alien_embryo.dm • Refactors how alien embryos increase their stage var, aka their cute ickle baby development stage. Now it increases stage every minute, which means 5 minutes to grow as opposed to taking 15 seconds to the end of time to grow. • Growth time is now defined by a variable, so admins can var-edit it in game and future coders can easily change the variable to make it take more or less time to grow. It also means it's a simple one-line edit if any of TG's plentiful downstreams want to change this for their server. * Automatic changelog generation for PR tgstation#55755 [ci skip] * Removes the ANIMATION_PARALLEL flag from floating and fixes another issue with the refactor. (tgstation#55930) Co-authored-by: Rohesie <rohesie@gmail.com> * Automatic changelog generation for PR tgstation#55930 [ci skip] * Automatic changelog compile [ci skip] * Replaces 'Goebbles' random last name (tgstation#56074) * Automatic changelog generation for PR tgstation#56074 [ci skip] * Fixes removing AIs from mechs (tgstation#55986) Basically the old code attempted to use locate(AI), but the AI in this case is a ref that is supposed to be provided by the card. Since the card is initially empty when removing AIs from the mech, it couldn't find the null in the occupants list and thus failed with a report that there was no AI in the mech. Now it checks all occupants and makes a list of any AIs it finds, then gives the user the option to pick an AI (though since we don't have any multi-pilot mechs yet the most you can get is one AI, and input with one option just auto-chooses). * Automatic changelog generation for PR tgstation#55986 [ci skip] * Optimize mapmerge's DMM.generate_new_key method (tgstation#56068) Tested on tgstation#55867, takes the merge driver's runtime from 148.1s to 4.8s * stops code from seeping into ic chat (tgstation#56088) changes the reference in the modular computer code from src to computer as src is a datum * Automatic changelog generation for PR tgstation#56088 [ci skip] * Flesh to stone no longer makes you immune to bleeding, refactors bleedsuppress into a trait (tgstation#56078) Being hit by the Flesh to Stone makes you bleed immune to prevent you from getting petrified while bleeding, and bleeding out while turned into stone. However, it doesn't make you vulnerable when you get unpetrified. This is a bug. This also makes bleedsuppress into a trait, as both is broken and should be a trait. * Automatic changelog generation for PR tgstation#56078 [ci skip] * Fixes vehicles like skateboards and wheelys moving multiple times. (tgstation#56070) So wheelys would have 3 instances of the riding component attached on initialize with a different argument, causing them to move 3 tiles at once instead of 1. Skateboards will have 2 attached and move 2, etc. * Automatic changelog generation for PR tgstation#56070 [ci skip] * moves quirk stating from medhud to a button instead of being spammed on your chat (tgstation#56067) shift clicking people with medhud shouldnt fill your whole chat with stuff u dont want except when u press button to see it * Automatic changelog generation for PR tgstation#56067 [ci skip] * Move module creation up in Initialize (tgstation#56086) This is caused by Initialize trying to link the Cyborg to an AI, when this is done successfully toggle_headlamp is called Toggle_headlamp however calls update_icons which tries to set icon_state to module.cyborg_base_icon however module at this point is null because the default module is assigned later in Initialize. This PR moves the module creation up inside Initialize to prevent this. * Automatic changelog generation for PR tgstation#56086 [ci skip] * Fixes tgstation#55670, AIs will be able to see clearly after getting un-pied (tgstation#56087) Fixes tgstation#55670. There was a bug where AIs wouldn't have their blurriness lowered after getting cleaned up. This fixes it by enabling the system that allows living things to lower blurriness on AIs. * Automatic changelog generation for PR tgstation#56087 [ci skip] * Add nanite lab to Runtime Station (tgstation#56044) Doing any testing of new nanite stuff involves spawning in a bunch of machinery and equipment, so including it on Runtime helps with development. * Automatic changelog generation for PR tgstation#56044 [ci skip] * Finishes the allocation refactor (tgstation#55965) tgstation#53841 continuation I recall that the reason for infinite stuns and such was that the priority wasn't being cleared properly when something hitched and I fixed it and I don't remember where exactly but it works now (TM) A variation of this is TMed on TGMC and it works fine * Automatic changelog generation for PR tgstation#55965 [ci skip] * Adds forgotten kit to armament beacon (tgstation#56016) Adds the forgotten kit to the armament beacon, holding the same stats as knight armor and stone sentinel, But with the sprites for the old clockwork armor and helmet, as they are very nice looking sprites. Moves said sprites to the suit and hat file respectively. as-well as adding forgotten helmet/armour to the game, which are said armors. Makes it easier to do any clockcult themed gimmick as the chaplain without wearing the god awful craftable armor, uses sprites that really shoulden't die on the same hill as clockcult. a few others have also told me they'd love to see the old clockcult armor and helmet sprites used for something, as they look nice. * Automatic changelog generation for PR tgstation#56016 [ci skip] * Rework job food/alchohol benefits into livers (tgstation#55721) By moving the "special behaviour" of something like security officers eating donuts, or engineers losing radiation by drinking Screwdrivers, into traits on the liver, this makes the "origin" of that behaviour more clearly defined, rather than something that's attached to the mind of the person. (For example, now if a wizard mindswaps into a Security Officer, they too can now digest donuts good.) Having this behaviour be partially visible to the more medically inclined members of the station (like doctors, and the chaplain for "entrails reading mystic" themes), means that a dismembered liver tells a story to those who know how to read it. Some jobs have more "benefits" than others, for example the only thing that the liver of a Quartermaster gives them is a sense of inadequacy when consuming royal carpet. Clowns having livers that honk make them easier to identify, and plays into the retconned "bike horns are clown livers lore"? Also, why not cut out a clown's liver then honk them with it? You monster. * Automatic changelog generation for PR tgstation#55721 [ci skip] * Makes it possible to create an /obj/item/sharpener with multiple uses (tgstation#55958) Whetstones will now become worn when at 0 uses instead of being either used or not used. All currently existing whetstones start at 1 use. * Automatic changelog generation for PR tgstation#55958 [ci skip] * Refactor caltrop component into element (tgstation#56020) Refactors the nearly completely stateless component "caltrop" into an element. The previous limit on "one message per caltrop per second" has been changed to "one message (about caltrops) per mob per second". This avoids a unique component for each shard of glass, and each cactus in the world, so saves some much needed memory. A message about "sliding over" caltrops has been removed, since it's now intended that you only trigger caltrops if you're not lying down. * Automatic changelog generation for PR tgstation#56020 [ci skip] * Regular CTF no longer has wounding (tgstation#56093) :cl: coiax tweak: Regular Capture-The-Flag players can no longer be wounded. Simulated participants in the Medieval Shuttle can still be violently murdered with wounds however. /:cl: CTF is very fast paced, and if you've taken damage without your shield, you are nearly dead most of the time. However, if you do survive, you're supposed to slowly heal, but wounds are untreatable on the battlefield. People still being able to be bloodily stabbed in the Medieval Shuttle is definitely a feature. - Aliens (xenomorphs) are still immune to wounds, but that immunity is now done with a trait, rather than a typecheck. * Automatic changelog generation for PR tgstation#56093 [ci skip] * Automatic changelog compile [ci skip] * [READY] A victory for revolutionaries will no longer end the round on dynamic, instead no new security and command will be allowed to join (tgstation#55956) Currently, a victory for revoutionaries leads to the round abruptly ending on dynamic. This has been replaced by all revolutionaries being deconverted, and no new security or command positions being available. Also attempts to unionize (pun intended) copy and paste code in the round start and late join revolutionary rulesets into being handled under the revolutionary team instead. * Automatic changelog generation for PR tgstation#55956 [ci skip] * Fixing bugs about the worst simple_animal coded in and material tiles. (tgstation#54885) Fixed floorbots applying floor tiles onto already tiled turfs. Fixed floorbot issues with material tiles. Fixed emagged floorbots spawning lattice when deconstructing floor into plating. * Automatic changelog generation for PR tgstation#54885 [ci skip] * Makes jaunting work properly again (tgstation#56028) Fixes an if check that was checking the area flags of a turf. Prevents a runtime in phased_check, and makes the area noteleport flag work properly. These were introduced by tgstation#55973 * Gives CE an engineering skillchip. (tgstation#56082) Literally gives CE an existing skillchip. * Automatic changelog generation for PR tgstation#56082 [ci skip] * HFR: Better observation of delta_time (tgstation#56009) This changes HFR's fusion_process() to better observe delta_time. * Automatic changelog generation for PR tgstation#56009 [ci skip] * Fix moth aheal runtime (tgstation#56109) Fixes misplaced square bracket to solve runtime issue. * Automatic changelog generation for PR tgstation#56109 [ci skip] * Removes the gen_turfs from icebox arrivals, they don't god damn do anything because they are literally just placeholders for areas, and they aren't in the right fucking area. Also gets rid of some dumb plating that makes the area looks worse imo (tgstation#56107) * Automatic changelog generation for PR tgstation#56107 [ci skip] * Upgrade extools version (tgstation#56104) thanks willox. fixes the game not working on BYOND 513.1539 .dll is from appveyor for the v0.0.7 tag: https://ci.appveyor.com/project/MCHSL/extools/build/job/gbyo64ou0ny01g75/artifacts * Removes the firealarm from the meta freezer, it activated at roundstart due to the cold. (tgstation#56106) * Automatic changelog generation for PR tgstation#56106 [ci skip] * Fix runtime in bolts hallucination (tgstation#56108) Fixes requesting .len from null when the list was never initialized. * Automatic changelog generation for PR tgstation#56108 [ci skip] * [bounty code moment] Adds a way to view the 'Server's Last Round' (tgstation#55646) * Adds "View Last Server Round Report" option. * Automatic changelog generation for PR tgstation#55646 [ci skip] * Now brain trauma paralysis works in arms as intended (tgstation#56105) Fixing issue tgstation#56076 making arms affected by the corresponding brain trauma. Fixing brain trauma paralysis in non-human limbs is impossible without a partial or complete refactor of paralysis code or species code, and since this situation happens very rarely, I doubt someone want to waste time in this. But if someone wants to do it anyway feel free to ask me about how it can be done. * Automatic changelog generation for PR tgstation#56105 [ci skip] * Fixes double catwalks on Delta Station. (tgstation#56110) Removes double and triple catwalks from DeltaStation map. * Automatic changelog generation for PR tgstation#56110 [ci skip] * Added autofocus for the first button in the TGUI list input. (tgstation#56114) Ported over from https://gitlab.com/cmdevs/colonial-warfare/-/merge_requests/647 When you open the TGUI list input, it'll auto-focus the first element so that you can easily navigate with the arrow keys without having to click on the page beforehand. Small QoL when opening the thing, don't have to click on it if you want to navigate via arrows keys, etc. * Automatic changelog generation for PR tgstation#56114 [ci skip] * Automatic changelog compile [ci skip] * [READY] Changes MetaSec Offices Layout, lathe location, and adds walls to maintenance by upload. (Attempt 2) (tgstation#55971) * Try 2 * Missed the edits by Upload * Someone threw the sec couch out the airlock. * Added a few officer spawns * Junk commit for mergability testing * Yet another junk commit * lathe moved. * That gosh darn sec lathe has been moved with prejudice. Tricksy lathe. * Automatic changelog generation for PR tgstation#55971 [ci skip] * Revert "Finishes the allocation refactor (tgstation#55965)" (tgstation#56137) This reverts commit 87234f3. * Comms consoles now have a GPS signal. (tgstation#56121) Helps solve the issue of hidden comms consoles delaying (or forcing) a round end. * Automatic changelog generation for PR tgstation#56121 [ci skip] * Fixes null-named painting issue (tgstation#56113) There was an issue where you could name paintings nothing, which would cause issues with persistency. This was because the stripped_input didn't actually check that you put something in, so the PR adds that check. It now ensures, both when saved and loaded, that there is a title. If not, it sets them to the default 'Untitled Artwork' * Automatic changelog generation for PR tgstation#56113 [ci skip] * Prevents everything except carbons, PAIs and cats from resting to fix Ian paralysis (this time with bitflags). (tgstation#56089) There is now a mobility flag that determines a mob's ability to rest. Only works with living mobs. Most living mobs shouldn't be able to rest, so it's only true for carbons, cats and PAIs. Fixes tgstation#56034. Fixes tgstation#55975 by making borgs unable to rest. * Automatic changelog generation for PR tgstation#56089 [ci skip] * Makes hulk more susceptible to cold damage (tgstation#56131) cl Qustinnus tweak: Hulks now get more damage from freeze damage, take it in brute, and get the damage at higher temps than normal /cl requested by oranges, makes the temp-gun better against hulkies * Automatic changelog generation for PR tgstation#56131 [ci skip] * Automatic changelog compile [ci skip] * Add testing rule to contribution guidelines (tgstation#56147) Adds a clause to the contributing guidelines that you are expected to have tested your code, which implicitly bans webedited larger PRs. Also updates the wording about changelogs. * Fix elevators (tgstation#56117) Currently elevators are broken since they try to use the z level of the assembly inside the button to determine how to move The assemblies z level is however always 0 and instead the z level of the button containing the assembly must be used This fixes this * Automatic changelog generation for PR tgstation#56117 [ci skip] * Fix briochecake icon, add tastes and foodtypes (tgstation#56125) - Adds a missing `icon_state` to the full brioche cake - Adds `SUGAR` to the brioche cake's and slice's `foodtypes`, as they're glazed (according to the description) - Adds butter and cream to the `tastes` as well * Automatic changelog generation for PR tgstation#56125 [ci skip] * var/hacked now actually does something in vendor spawners (tgstation#56144) Oversight made by @TiviPlus when making tgstation#55147 var/hacked wasn't actually used in code and instead, all spawner vendors were instantly hacked. fixes tgstation#56101 * Automatic changelog generation for PR tgstation#56144 [ci skip] * Common Build Tooling (tgstation#55373) Add Common Build Tooling ## Information for Developers On Windows, the build scripts will automatically install Node. Other platforms should use their package manager or download it from https://nodejs.org/en/download/ Pick one: - VSCode: `Ctrl+Shift+B` - VSCode: `F5` (build & run with debugger) or `Ctrl+F5` (build & run without debugger) - Windows: double-click root `Build.bat` (pause to see output) or `tools/build/build.bat` (no pause) - Git Bash and non-Windows: `tools/build/build` ## Information for Server Admins - TGS scripts will automatically install the version of Node specified in `dependencies.sh` - Either use this build script, or compile tgui by running any script in `tgui/bin` folder. ## Details Both dm and tgui are now built with a single script. It's pretty easy to launch: just press `Ctrl+Shift+B` in VSCode, and tada! 🎉 **It's smart.** It will skip certain steps if source files were untouched for that step. So, if you're only touching dm code, it will only rebuild dm code, and will skip tgui. **Syntax is fairly readable and maintainable.** ```js const { Task, runTasks, exec } = require('./cbt'); const taskTgui = new Task('tgui') .depends('tgui/yarn.lock') .depends('tgui/packages/**/*.js') .provides('tgui/public/*.bundle.*') .provides('tgui/public/*.chunk.*') .build(async () => { await exec('tgui/bin/tgui'); }); runTasks([taskTgui]); ``` **This is a long term solution to the js bundle hell.** Now that we have a single script to build everything, bundles have been excluded from the repo, and they will no longer cause conflicts in PRs. This results in quicker PR turnaround time and less time wasted on rebuilding tgui for PRs. **CI pipelines have been updated.** They're not coded in the most optimal way, just making them green for now. ## Possible future work - Support compiling with DM defines by passing them as an argument, like `-D LOWMEMORYMODE`. - Instead of explicitly listing the task sequence in `runTasks()`, support specifying tasks in `.depends()`, which in turn will allow building a graph of dependencies and running things in parallel. Co-authored-by: Tad Hardesty <tad@platymuus.com> - Add root Build.bat - Add trio of tools/bootstrap/ scripts for Node - Add tools/build/README.md - Ensure build script and VSC configuration works properly on Linux - Update TGS4 PreCompile scripts Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com> - Keep PreCompile scripts compatible with TGS3 as well - Update LinuxOneShot PreCompile scripts - Update TGS4 configuration * Fixes checking a person's inventory requiring a do_after and causing a buckle notification. (tgstation#56153) `/atom/movable/proc/mouse_buckle_handling(mob/living/M, mob/living/user)` has functionality that is too generic for `/mob/living/carbon/human/` `/mob/living/carbon/human/MouseDrop_T(mob/living/target, mob/living/user)` contains code that is better suited for `mouse_buckle_handling()` `/mob/living/carbon/human/MouseDrop_T()` results in a call stack that calls the generic `/atom/movable/proc/mouse_buckle_handling()` when the prerequisites for piggybacking or fireman carrying are not satisfied. But this makes no sense and means that when the game state is such that you should be inspecting the inventory, the game state is ALSO such that you are attempting to erroneously buckle a player to yourself. In addition, `MouseDrop_T()` should really not be holding mouse buckling logic in this scenario. As a result, this proc override has been removed from /living/carbon/human entirely. All functionality has been shifted into an overriden `mouse_buckle_handling()` at the /living/carbon/human level. Piggybacking and fireman carrying now actually return a value on success. Finally, if we have successfully handled the MouseDrop_T event through a parent proc call chain, we no longer go on to show the mob's inventory. All these tweaks combined mean that you can now click-drag to view inventories without a do_after and without attempting buckling, /mob/living/carbon/human buckling logic is now appropriately in `mouse_buckle_handling()` and no longer falls through to generic buckling checks, which is not relevant when trying to air quotes "buckle" a mob to a /mob/living/carbon/human. Successfully buckling a player to yourself (in this scenario through fireman carrying) no longer opens the inventory window. I have tested the following behaviours and they work as intended. - [x] Piggybacking - [x] Fireman carrying - [x] Inspecting inventory of /mob/living/carbon/human - [x] Inspecting inventory of /mob/living/simple_animal/pet/dog/corgi/ian - [x] Buckling /mob/living/carbon/human to a chair. - [x] Buckling /mob/living/simple_animal/pet/dog/corgi/ian to a dog bed. * Automatic changelog generation for PR tgstation#56153 [ci skip] * Fixes ghost_roles spawning as transgenders. (tgstation#56151) About The Pull Request An oversight made in tgstation#51058. Almost every other source of changing gender was complete with changing body_type as well, but not the ghost_role spawners. Right now ghost roles can spawn with one gender, but get the other body_type. This results in looking at "her", while the person in question got a surprise. For such things, we already added "Other" gender. cl fix: Ghost roles can no longer spawn as a male with female body_type and vice-versa. /cl * Automatic changelog generation for PR tgstation#56151 [ci skip] * Automatic changelog compile [ci skip] * ID Card access change logging, Part 2 (tgstation#56155) I've condensed the logging into a single define, to allow ID card logging to be easily tweaked and to clean up some messy copy-pasted code. There is no longer admin messaging for Head of Staff accesses, but it's all still logged as it was before. There is a new option for the Investigate verb. Which has the complete logging history for ID card changes that are currently tracked, all in one place. Which admins can ALSO access from Get Current Logs and Get Server Logs for past rounds via id_card_changes.html * Automatic changelog generation for PR tgstation#56155 [ci skip] * Fixes comms console runtime that stops you paying off pirates (and reply to any other messages) (tgstation#56135) This is because JS-side it does a string concat instead of integer addition at messageIndex + 1, as messageIndex is a string and nothing in JS is typed because it is an evil programming language that is a cross between Hitler and Skeletor, with piss of pure liquid malevolence. We appropriately parse the messageIndex to an int radix 10 before adding 1, and everything just works. Also removes two text2num conversions following a recent tgui change that made this no longer necessary. * Automatic changelog generation for PR tgstation#56135 [ci skip] * Icebox Xenobio maint fixes (tgstation#56139) Fills in a hole in Icebox lower Xenobio maint causing active turfs and replaces a magic locker that I'm told is unintentional with a regular one. * Automatic changelog generation for PR tgstation#56139 [ci skip] * fixes grenades with prox sensors (landmines) not working (tgstation#56150) * Automatic changelog generation for PR tgstation#56150 [ci skip] * Improves Bleeding Feedback + Misc Wound/Organ Decay Tweaks (+ Removes Teeth) (tgstation#56056) * Automatic changelog generation for PR tgstation#56056 [ci skip] * Update build process in documentation (tgstation#56173) Building tgstation is a bit different nowadays, so I've updated the docs a bit. * Makes build all default task in vscode. (tgstation#56178) * Update Dockerfile for CBT (tgstation#56175) Follow-up to fix the failing Docker CI on master. - Reorganize the entire Dockerfile to be more readable - Inline the tgstation/byond Dockerfile into our own, so we can change the base distro at will - Also allows us to trash the dependencies.sh<->Dockerfile hack - Use 32-bit libs on a 64-bit distro so that we can download and run recent 64-bit Node binaries - Call tools/build/build rather than DreamMaker directly * Force UTF-8 encoding in tools/bootstrap/node_.ps1 (tgstation#56177) * Try to not do anything after calling TgsReboot() (tgstation#56161) We want to use the script TGS executes when calling this to do ops stuff * Replaces iftrue for scope building with do while in compile overlays (tgstation#56159) * Updates Contribution Guidelines regarding Prior Approval for Station Maps (tgstation#56166) Updates the contribution guidelines to require the addition, removal or replacement of station maps to require prior approval before making the PR. Ultimately shouldn't change much about how the PRs are handled, but gives an early warning that approval should be sought and should help cut down on lost time mapping if I would reject a PR outright. With how long station maps take to make, prior warning that it outright won't be merged is, in my opinion, good. * Explosive lance icons update properly (tgstation#56164) Fixes tgstation#56154. Spears were missing an update_icon on initialize, this adds one. Now, spears will show their grenade upon construction. Works just fine in testing. * Automatic changelog generation for PR tgstation#56164 [ci skip] * Wooden tables now obey The Law of Conservation of Mass (tgstation#56156) ## About The Pull Request Fixes Issue tgstation#56152 making wood tables deconstruct at they should be. Bug vivisection: Okay, see here? This is the proc for creating a table, we can introduce three arguments. One of them is _buildstack. _buildstack overrides Buildstack on initialize, a variable used for storing the type of raw "ore" that the table is supposed to drop in deconstruction. Here is supposed to be null unless we want to override the buildstack with another ore. ```DM /obj/structure/table_frame/proc/make_new_table(table_type, custom_materials, _buildstack) var/obj/structure/table/T = new table_type(loc, _buildstack) T.frame = type T.framestack = framestack T.framestackamount = framestackamount if(custom_materials) T.set_custom_materials(custom_materials) qdel(src) ``` What happened? The proc for building a wood table from a wooden frame, shown below, passed the "type" variable, used for storing the type of table_frame, as a _buildstack argument to the make_new_table proc. This overrides the buildstack variable of the final wooden table, causing it to drop a wooden frame as it was an ore on deconstruction. ```DM /obj/structure/table_frame/wood/attackby(obj/item/I, mob/user, params) [...] if (toConstruct) if(material.get_amount() < 1) to_chat(user, "<span class='warning'>You need one [material.name] sheet to do this!</span>") return to_chat(user, "<span class='notice'>You start adding [material] to [src]...</span>") if(do_after(user, 20, target = src) && material.use(1)) make_new_table(toConstruct, null, type) ``` This is funnier (not very much, to be honest) when we consider that deconstructing with a screwdriver would drop a frame normally, causing it to drop two frames. We could repeat this ad nauseam, essentially cloning wood frames in place as we pleased. So TL;DR: this is another of those simple but hard to hunt bugs that would be prevented with testing and a null on its right place. * Automatic changelog generation for PR tgstation#56156 [ci skip] * Allow dynamic to be configured when used as the forced secret mode (tgstation#56122) Allow dynamic to be configured (roundstart rulesets) when used as the forced secret mode * Automatic changelog generation for PR tgstation#56122 [ci skip] * Makes excited breakdowns independent of adding new turfs. This prevents the dreaded stationwide firelock, at least mostly, and moves us away from being dependant on room size. As a downside, we're closer then ever to ZAS. This also allows us to raise the breakdown timer and decrease the amount of overtime experienced in each tick. (tgstation#56081) ## About The Pull Request This prevents the dreaded station-wide firelock, at least mostly, and moves us away from being dependent on room size. As a downside, we're closer then ever to ZAS, and the transition between pre-breakdown and post-breakdown is a lot more visible. This also allows us to raise the breakdown timer and decrease the amount of overtime experienced in each tick. See video, I'm not sure I'm happy with the current rate, it does look somewhat shit. I'm considering tweaking the alpha curve for gas visuals to try and make it look less not good. [Video](https://cdn.discordapp.com/attachments/326831214667235328/797766078389813298/2021-01-10_01-55-53.mp4) Closes tgstation#56066 ## Why It's Good For The Game Station spanning excited groups are rarer, and will settle down more often. Cold things like space will cool down their group faster, preventing station spanning non updating excited groups. * Automatic changelog generation for PR tgstation#56081 [ci skip] * separates malf ai from traitor dynamic ruleset (tgstation#56090) Separates malf ai from traitor so admins can treat it separately * Automatic changelog generation for PR tgstation#56090 [ci skip] * Redone Metastation Science (tgstation#55867) * fixed conflicts updated the branch and pasted in all the changes again, conflicts and all roundstart turf diffs should be gone now * Update MetaStation.dmm Opened up the cytology lab directly to xenobio, its all one room, with shutters to lockdown cytology in case of an emergency - Nari * Update MetaStation.dmm softened some internal walls on xenobio sat, they dont need to be reinforced, added a small weakpoint to xenobio sat, its not a secure area and doesnt need to be a roundstart gigafort, removed the windows the buttons were on for the slime pens, buttons directly on windows looks bad, replaced with a table - Nari * Remove minor tweak remove the biobag and labcoat tweak from this branch * Update MetaStation.dmm tile under a door had a random disposals pipe, but missing a wire. fixed - Nari * Update MetaStation.dmm fixed merge conflict * Update MetaStation.dmm why??? * Update MetaStation.dmm fix? * Update MetaStation.dmm cant fix sorry * Update MetaStation.dmm trying a fix * fixed conflicts? i think this fixes it?? - Nari * Update MetaStation.dmm Added experimentor - Nari re-tiled sec post -Nari rearranged mech bay so it actually works - Nari re-did the connection between xenobio and the cytology area - Nari added a few requests consoles - Nari added a sci drobe - Nari removed one of the extra deliveries areas - Nari * Update MetaStation.dmm fixed the department request consoles departmentType and name - Nari * Update MetaStation.dmm fleshed out the support line for the bomb site - Nari * Update MetaStation.dmm removed lattices under catwalks, hopefully this fixes * Update MetaStation.dmm fix * Automatic changelog generation for PR tgstation#55867 [ci skip] * Makes the manifest always have a certain department order (tgstation#55917) Makes the manifest always have a certain order to the departments in it. * Automatic changelog generation for PR tgstation#55917 [ci skip] * Infinite Gun Culling: Gun Kit Edition (tgstation#56133) Every prototype firearm in the game now utilizes crafting to construct it, usually sacrificing a standard version of that firearm in order to produce the new one. The guns are made using gun part kits you print from the security protolathe (or buy, in the case of hellfire lasers). * Automatic changelog generation for PR tgstation#56133 [ci skip] * Use draft pull requests instead of the 'Work In Progress' and 'Needs Review' labels. (tgstation#56168) * Automatic changelog compile [ci skip] * 513.1536 is the stable BYOND version (tgstation#56182) * Stack overflow detection for the Master Controller. (tgstation#56008) * Stack overflow detection for the Master Controller. Using a weakref, we can detect if the mc's stack was ended by byond due to a stack overflow, and restart it without waiting the entire defcon countdown in the failsafe controller. I built a system around this concept under /datum/stack_end_detector and deployed it to the MC's main loop with checks in the failsafe controller. * Makes wayfinding great again (tgstation#56055) Interacting with the wayfinding pinpointer dispenser recently after leaving it untouched basically since I added it I realised it has a bunch of bad design decisions that make it unpleasant to interact with so while this can never solve the lack of desirability of the pinpointers themselves hopefully it prevents the machine from contributing to the problem. * Automatic changelog generation for PR tgstation#56055 [ci skip] * Fix Docker build failing on a clean checkout (tgstation#56190) Follow-up to tgstation#56175 which turned out to be accidentally relying on Node already being downloaded. * Makes the rest of large guns bulky (sans traitor objectives and a few others) (tgstation#56132) ## About The Pull Request What it says on the tin. Practically everything but pistols, SMGs, and traitor weapons can no longer be stashed into bags. I had considered making some large guns that traitors can order (like the blast cannon) also bulky, but concealment is important for some of those things. However, the bulldog shotgun and sniper rifle have been made bulky, because they're shotguns and sniper rifles! Traitor objectives are still normal size and can fit in backpacks. ## Why It's Good For The Game Makes previous changes to weapons and thus balance consistent across our full list of guns. Players can clearly understand what can fit in the bag based on the size of the weapon. * Automatic changelog generation for PR tgstation#56132 [ci skip] * Superior auto comment blocks VSCode extension (tgstation#56194) * Adds toggling shower's refills (tgstation#55895) Adds the ability to toggle showers water reclaimers with a multitool Adds some delta_time handling to showers. * Automatic changelog generation for PR tgstation#55895 [ci skip] * Fixes parallax runtime when observing someone without client (tgstation#56092) When observing someone without client (because they for example disconnected) a runtime happened: This was because update_parallax didn't take a mob as parameter but instead always updated the parallax of the mob to which the HUD datum belonged (which was the HUD of the person who you tried to observe) If that mob had no client this caused a runtime. If you observe someone now the game updates parallax for your client and not the client of the person you tried to observe. * Automatic changelog generation for PR tgstation#56092 [ci skip] * [READY] Bespoke Datum Mats (tgstation#55296) * Bespoke Material Backend - Adds support for bespoke materials: - Reimplements [/datum/material/var/id] - Ports GetIdFromArguments from SSdcs - Adds a wrapper define for GetMaterialRef - Adds [MATERIAL_INIT_BESPOKE] - Adds [/datum/material/proc/Initialize] - Does not actually add any bespoke materials - [ ] TODO: Code docs - [ ] TODO: Actually adding bespoke materials * Some has_material procs and cleaning up some spaghetti - Adds a pair of has_material procs for use in checking whether a given atom has a given material * Adds meat - Adds bespoke meat variants - Does not make them accessible - Shuts up the linter * Implements bespoke meat - Makes the material container preserve bespoke materials - Makes the sheetifier accept bespoke materials - Makes the autolathe accept bespoke materials - Makes the gibber produce bespoke meats * Makes butchering produce bespoke meats This is jank and really needs to be folded into a unified butchering and gibbing system * Material documentation - Adds, fixes, and touches up some documentation * Material container insertion callback - Changes the proc used to expand the material container's material list ot a proc used to check whether a material fits into a material container - Instantiating new materials is no longer O(n) relative to the number of autolathes in existence. * Makes processing meat conserve materials - Makes bespoke meat carry over into meatballs * Makes preserving custom materials an option - Implements the ability to turn preserving custom materials _off_ for processor recipes * Fixes all bespoke materials of the same type using the same singleton - We use ids now, not just types. * Makes the fat sucker produce bespoke meats - Because consistency is good. * Fixes autolathes merging bespoke stacks into normal stacks. * Makes the callback to test materials for holdibility optional - @floyd * GetMaterialRef -> GET_MATERIAL_REF - We capitalize macros. * Removes an extraneous callback - Makes the sheetifier use functionality I didn't notice I implemented a few commits ago. * Makes mob and species meat null compatible * Fixes the ore silo - The ore silo had really snowflake material handling that has been brought in line with the rest. - The materials should show up in the correct order. * Fixes minor lathe bugs - Fixes stack_traces caused when lathes tried to fetch materials using reagent typepaths - Fixed the selective reagent disposal topic. I have no idea how long this has been broken. * Various documentation fixes - Clarified a couple comments - Removes an extraneous ?. operator - Fixed mat floor tiles having bugged reagent temperatures * More fixes -/datum/material/meat/mob -> /datum/material/meat/mob_meat - Adds atom typecheck to material containers. * Fixes old typepaths * Automatic changelog generation for PR tgstation#55296 [ci skip] * Fixes showers overexposing washed targets (tgstation#55894) Makes showers consistently expose washed atoms to 5u of their internal reagents Makes showers effectively double the reagents targets are exposed to as per a comment by ArcaneMusic Apparently there were balance concerns over synthflesh showers capable of instantly healing and de-husking anyone you put under them. * Automatic changelog generation for PR tgstation#55894 [ci skip] * Temperature Pump Sanity (tgstation#55926) * fix temperature pump * Cleanup and ui stuff * Punctuation is important you know Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * tgui rebuild Co-authored-by: Ghilker <minefap44@gmail.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Add weakref support to qdel (tgstation#56171) qdel() should allow usage of weakrefs to avoid harddels on long duration qdel_in usage * invert an if statement in beefmen code linter was complaining about returning inside a spawn call and this made enough sense to just flip Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com> Co-authored-by: spessbro <51048066+spessbro@users.noreply.github.com> Co-authored-by: tgstation-server <tgstation-server@tgstation13.org> Co-authored-by: Krysonism <49783092+Krysonism@users.noreply.github.com> Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com> Co-authored-by: interestingusernam3 <51925758+interestingusernam3@users.noreply.github.com> Co-authored-by: Gamer025 <33846895+Gamer025@users.noreply.github.com> Co-authored-by: coiax <yellowbounder@gmail.com> Co-authored-by: Watermelon914 <37270891+Watermelon914@users.noreply.github.com> Co-authored-by: Watermelon914 <3052169-Watermelon914@users.noreply.gitlab.com> Co-authored-by: Aleksej Komarov <stylemistake@gmail.com> Co-authored-by: Vladimir Veisman <v.veisman@fl45h13.me> Co-authored-by: Azarak <azarak10@gmail.com> Co-authored-by: Donkie <daniel.cf.hultgren@gmail.com> Co-authored-by: KathrinBailey <53862927+KathrinBailey@users.noreply.github.com> Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Rohesie <rohesie@gmail.com> Co-authored-by: Changelogs <action@github.com> Co-authored-by: Coffee <CoffeeDragon16@gmail.com> Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com> Co-authored-by: Tad Hardesty <tad@platymuus.com> Co-authored-by: Kylerace <kylerlumpkin1@gmail.com> Co-authored-by: Tlaltecuhtli <33834933+Tlaltecuhtli@users.noreply.github.com> Co-authored-by: TiviPlus <57223640+TiviPlus@users.noreply.github.com> Co-authored-by: Coastfront <50342376+Coastfront@users.noreply.github.com> Co-authored-by: coiax <jack@billbuddy.co.uk> Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: EgorDinamit <53223414+EgorDinamit@users.noreply.github.com> Co-authored-by: esainane <esainane+github@gmail.com> Co-authored-by: Emmanuel S <mrdoomboyo@gmail.com> Co-authored-by: Manybones <miguelbasket1@gmail.com> Co-authored-by: Cartographer-D <63861499+Cartographer-D@users.noreply.github.com> Co-authored-by: Qustinnus <Floydje123@hotmail.com> Co-authored-by: Rob Bailey <actioninja@gmail.com> Co-authored-by: Alex 'Avunia' Takiya <git@takiya.cloud> Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk> Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com> Co-authored-by: AnturK <AnturK@users.noreply.github.com> Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com> Co-authored-by: EOBGames <58124831+EOBGames@users.noreply.github.com> Co-authored-by: Fikou <piotrbryla@onet.pl> Co-authored-by: 小月猫 <alina.r.starkova@gmail.com> Co-authored-by: Seris02 <49109742+Seris02@users.noreply.github.com> Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com> Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com> Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com> Co-authored-by: Ghilker <minefap44@gmail.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: spookydonut <github@spooksoftware.com> Co-authored-by: windarkata <windarkata@users.noreply.github.com>
…78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl:
…78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl:
… yeah? [MDB IGNORE] (#24136) * Bleeding has been subtly broken for 3+ years, let's fix that yeah? (#78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl: * Bleeding has been subtly broken for 3+ years, let's fix that yeah? --------- Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
…et's fix that yeah? (#8033) Original PR: tgstation/tgstation#78783 ----- ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl: --------- Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
…DB IGNORE] (#24136) * Bleeding has been subtly broken for 3+ years, let's fix that yeah? (#78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl: * Bleeding has been subtly broken for 3+ years, let's fix that yeah? --------- Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
…78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl:
…78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in tgstation/tgstation#56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl:
* Nerfs probability that a rat decides to bite a cable (#81364) ## About The Pull Request Rats are 5x less likely to decide to bite a cable ## Why It's Good For The Game Way back when I converted rats to basic mobs, *something* went wrong and rats bite cables wayyyy too often now - it's not uncommon to see a rat has de-cabled an entire section of maint due to some good luck. Funny but not how it functioned originally. I always intended to tone it back down and just never got around to it. ## Changelog :cl: Melbert balance: Rats are now 5x less likely to decide to eat a cable when idling. (1%, down from 5%) /:cl: * Ports LETPASSCLICKS from Daedalus Dock (#77568) A deal with @Fikou - https://github.com/DaedalusDock/daedalusdock/pull/106 In layman's terms, you can grab this wrench now. ![205561405-902f1795-0c63-4dab-8435-d8902f9c4499](https://github.com/tgstation/tgstation/assets/75460809/08f2e782-7532-44a5-beea-fd1278985017) Adds a new pass_flags_self value for click transparency, allowing objects to be dense without blocking click attempts. :cl: add: Lockers, crates, and machines no longer block click attempts in adjacency checks. Basically, you can reach tables cornered between lockers/machines. /:cl: * Ventcrawling mobs now recieve a 1 second delay/warning before exiting vents (#75937) ## About The Pull Request Ventcrawling mobs must now complete a 1 second long do_after before exiting a vent. ![venting sussa mongus sus](https://github.com/tgstation/tgstation/assets/28870487/dbbfef9c-ace5-4cf3-a0a1-96b63810b08a) ## Why It's Good For The Game Helps prevent those _wacky silly awkward moments_ where you speed into a scrubber/vent and accidentally fling yourself out into the open. Having a bit of a delay should reduce frustrations caused by situations like these. ## Changelog :cl: Rhials qol: Ventcrawling mobs have a 1 second delay/warning before exiting the ventilation. /:cl: * Autopopulate bank account ID when linking (#75975) ## About The Pull Request I have no idea how many times I've had to open memories to link my bank account to my ID. ## Why It's Good For The Game Your mob has a memory, use it and fill in the dialog box! ## Changelog :cl: LT3 qol: ID card linking now preloads your bank account number /:cl: * Bleeding has been subtly broken for 3+ years, let's fix that yeah? (#78783) ## About The Pull Request the `drip` argument was being passed an inverted value. Broke in https://github.com/tgstation/tgstation/pull/56056 ## Changelog :cl: fix: Blood once again appears as small drops instead of splatters during minor bleeding. /:cl: * Gives roundstart prisoners a key memory of what their crime is (#79881) ## About The Pull Request Says it on the tin, roundstart permabrig prisoners a key memory so they can remember what crime they committed. ![image](https://github.com/tgstation/tgstation/assets/58376695/325dbd36-bc24-43ea-8f64-1fcf5d613e5f) ## Why It's Good For The Game Prisoners typically remember why they are locked in a jail forever. Also, if you have the "random" crime selected in your preferences, sometimes you can forget what crime you committed if you missed it at the start of the round. ## Changelog :cl: qol: gives roundstart prisoners a key memory of what their crime is /:cl: * Adds wound armor to heretic robes and gives heretic blades knife level wounding (#80146) Adds 20 points of wound armor to ominous robes Adds 10 points to void robes Adds 5 wound bonus(15 bare) to heretic blades. Literally every other armor piece has these, I don’t know why heretic robes were included and honestly it seems like an oversight Heretic blades are made from knives, knives have 5 wound bonus, it makes no sense for heretic blades to be worse than 20 force knives. :cl: balance: heretic robes now have wound armor balance: heretic blades now have knife-level wound bonuses /:cl: * CRAB-17 will round down the credit amount it steals (#79761) ## About The Pull Request When stealing credits, the CRAB-17 takes a between 5 and 15 percent of your current credit balance. Due to how numbers work, this almost always ends up with a fractional amount being taken (ie 10% of 1015 is 101.5) There is, as far as I'm aware, no way to get rid of this fractional amount, as you can only pull whole credits from your ID. ## Why It's Good For The Game CRAB-17 will now take between 5 and 15 percent of your current credits, rounded down. No more 1/3 of a credit to stare at in abject horror. ## Changelog :cl: fix: The CRAB-17 will now only take whole credits, as fractional credits were found to be worth less. :cl: * Health Analyzer now lists embeds (#75113) ## About The Pull Request Health analyzer now shows off any embeds in the limbs, right under their damage. ![image](https://user-images.githubusercontent.com/53777086/235578742-9ebf71ff-5c8f-44d7-96b0-5784e18ae07b.png) ## Why It's Good For The Game Currently the only way to tell there's an embed in a bodypart is by examining them, and Doctors have their health analyzer to examine FOR them. Knowing embeds is an important part of treatment, so I think it's justified to have the analyzer show them this info. ## Changelog :cl: qol: Health Analyzers now show embeds in bodyparts on examine. /:cl: * Latejoining crew start with emergency large crowbars if arrivals is not powered (#75827) If you latejoin, and arrivals environmental power is off (airlocks depowered), you start with an emergency large crowbar in your hands (or floor if both hands are full already) Some arrival shuttles start with a crowbar, but its not enough if someone already took it before you arrived. Being stuck in airlock + firelock CBT especially with no air is very shit (unless youre the CE or an Engineer who start with tools, unlikely) Having a crowbar resolves movement * Screentip images (#76889) ## About The Pull Request Adds some nice little mouse button indicators (optional), this is a port of my version at [Citadel-Station-13/15973](https://github.com/Citadel-Station-13/Citadel-Station-13/pull/15973). **There is no more intent coloring** ## Why It's Good For The Game Quick identification of what to do. Eh, i dunno if it's getting accepted, mothblocks asked me to port it over. ## Changelog :cl: image: Changed screentips icons to something a lot fancier unified with the LMB / RMB text. qol: There are accessibility preferences to disable this! Look for "Screentip context with images" beside the other screentip preferences. /:cl: --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> * Nukie Aliases and Some Hairspray (#79653) ## About The Pull Request Nuclear operatives now receive an alias for their first name, instead of a default human name. This alias is randomly selected, or can be set in your name preferences. ![image](https://github.com/tgstation/tgstation/assets/28870487/2584b625-4668-4738-a662-8205476fac2f) This does not affect Operative Leaders selecting the team's last name. This means that **operative names are now "[Alias chosen by player] [Team name chosen by leader]".** There is a list of default aliases, in case no alias has been selected. I randomly came up with a bunch of stuff from the top of my head and put it in a text file. If you think of something better, choose it yourself! **OH, ALSO:** There's some hair dye in the Firebase dorms now. Useful if you want to further differentiate between your Operative/Crew characters, or just look pretty. ## Why It's Good For The Game No longer shall nukies be "your character but with a different name". Now you can give yourself a bit more identity instead of just a random name. More customization options means more opportunities for people doing interesting stuff, and to branch away from the beaten path of boring meta strats. ## Changelog :cl: Rhials add: Nuclear Operatives, in an attempt to appeal to the more "tacticool" members of their cause, have begun using callsigns to designate themselves. Check your preferences to set your Operative Alias! qol: At the request of the more vain members of the cause, hair dye has been added to the Operative Firebase dorms. /:cl: * Heretic runes are easier to click through and have a windup for clearing them (#75868) Heretic runes no longer have every single transparent pixel set to 1 alpha, to make it easier to click on objects. Clearing heretic runes with mansus grasp takes 0.4 seconds of standing still, to prevent you from accidentally clearing it in combat. Added code for effect remover element to use a windup if set. * Cryo improvements: Auto eject dead and turn on automatically (#77919) ## About The Pull Request This PR makes two changes to cryo. First, if the patient inside is dead, it will notify medical over comms, and if auto mode is on, it will eject them. This is the exact same behaviour as if the patient is fully healed. Second, if auto is on, the tube will turn on as soon as it's closed, preventing negligent doctors from leaving people to die in a locked tube. To prevent people from putting themselves in cryo, you can no longer close the cryo tube yourself when you're standing in it. This is effectively the exact same as it was before, except now the game explicitly tells you that you cannot cryo yourself, instead of letting you jump in and die. ## Why It's Good For The Game For the first change, there is absolutely zero reasons for a dead body to be in a cryotube, and it makes sense that a machine that can tell if someone is fully healed and eject them can tell if they're dead and eject them. For the second change, there are few things worse than being left to die in a cryotube just because the doctor didn't turn it on. You're just locked in there until another doctor walks by and notices that the tube isn't actually on (if they ever do), and you likely die before then, leaving your organs decay, and turn what was once some simple brute and burn into a whole revival ordeal. "Auto" implies that treatment is automatic, so it makes sense that it actually is. ## Changelog :cl: qol: Cryotubes will now notify medbay if the patient within is dead, and will eject them if auto is on. qol: Cryotubes will now automatically turn on when a patient enters it if auto is on, but you can no longer close the cryotube on yourself. /:cl: * Increase TGUI connection lost threshold (#80304) Increases the TGUI connection lost timeout before the manual reconnect button is required. The server takes more than 20 seconds to reboot and start allowing connections for a new round. By increasing the duration TGUI will try to automatically reconnect, players will more consistently actually reconnect to the new round without intervention. * Adds a toggle action to implant HUDs (#79777) <!-- Write **BELOW** The Headers and **ABOVE** The comments else it may not be viewable. --> <!-- You can view Contributing.MD for a detailed description of the pull request process. --> ## About The Pull Request Adds an action for all implanted HUDs to toggle them on and off. The default state is on, and the state is toggled appropriately when the implant is added or removed. This is done by using hud.hide_from and hud.show_to. <!-- Describe The Pull Request. Please be sure every change is documented or this can delay review and even discourage maintainers from merging your PR! --> ## Why It's Good For The Game Quality of life change for roleplay situations where the HUD is usless clutter. <!-- Argue for the merits of your changes and how they benefit the game, especially if they are controversial and/or far reaching. If you can't actually explain WHY what you are doing will improve the game, then it probably isn't good for the game in the first place. --> ## Changelog <!-- If your PR modifies aspects of the game that can be concretely observed by players or admins you should add a changelog. If your change does NOT meet this description, remove this section. Be sure to properly mark your PRs to prevent unnecessary GBP loss. You can read up on GBP and it's effects on PRs in the tgstation guides for contributors. Please note that maintainers freely reserve the right to remove and add tags should they deem it appropriate. You can attempt to finagle the system all you want, but it's best to shoot for clear communication right off the bat. --> :cl: qol: Implanted HUDs can now be toggled on and off with an action. /:cl: <!-- Both :cl:'s are required for the changelog to work! You can put your name to the right of the first :cl: if you want to overwrite your GitHub username as author ingame. --> <!-- You can use multiple of the same prefix (they're only used for the icon ingame) and delete the unneeded ones. Despite some of the tags, changelogs should generally represent how a player might be affected by the changes rather than a summary of the PR's contents. --> --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * Turns down the whistle volume (again) (#75087) ## About The Pull Request Why It's Good For The Game From a poll conducted on what sounds need balancing. It was nerfed a year ago (happy anniversary!) in #66452, but it's still pretty loud today. https://user-images.githubusercontent.com/66640614/235417665-042d4b49-258e-47fd-89ad-aba5d354b820.mp4 ## Changelog :cl: Tattle sound: nerfed the police whistle volume /:cl: Co-authored-by: tattle <article.disaster@gmail.com> * Cauteries have heat, you can smoke with a space helmet (#78122) Cauteries now have 'heat', like lighters, welders, etc. You can smoke with a space helmet as long as you have internals on. > Cauteries now have 'heat', like lighters, welders, etc. Seems like an oversight. If an esword can do it so can a implement meant to sear wounds shut. > You can smoke with a space helmet as long as you have internals on. Space smoking is awesome. :cl: fix: Cauteries now have 'heat', like lighters, welders, etc. qol: You can smoke with a space helmet as long as you have internals on. /:cl: * Visual alert for IV drip (#75646) ## About The Pull Request Adds a visual alert for your mob having an IV connected. ![image](https://github.com/tgstation/tgstation/assets/83487515/03baf383-d01e-4dba-813a-e7f60b5cc9e6) ## Why It's Good For The Game It's easy to forget you have one of these in your arm until it's ripped and you're bleeding out. ## Changelog :cl: LT3 qol: Being connected to an IV now has a visual indicator /:cl: * Pocket keybinds! (#80173) ## About The Pull Request adds 2 (defaulted to ctrl 1 and ctrl 2) keybinds for quick equipping pockets (left and right) visual aid ![image](https://github.com/tgstation/tgstation/assets/114047053/595861f0-9a7b-4f86-8ad9-dd6bb197843c) https://github.com/tgstation/tgstation/assets/114047053/72596cf8-374d-40ac-9de1-20137dc959d4 ## Why It's Good For The Game There are already keybinds for suit storage, belt and bag. Having some keybinds for pockets should let you take things from your inventory with more ease. ## Changelog :cl: add: Added 2 pocket quick equip keybinds /:cl: * Makes dep. order consoles alert the department over radio whenever their cooldown expires (#78703) Title. A lot of the time, order consoles go unused. I think this is because people just don't actually know when taking the trip to the console, even if its, like, 2 feet away, is worth it. Seeing this lil blurb will make people go "oh hey I can get something free now" and go get said free thing. Also, feedback is good. :cl: qol: Departmental order consoles now alert their department via radio when their cooldown expires /:cl: * Very late arrivals can arrive with toast (#75061) https://user-images.githubusercontent.com/5479091/235362295-89b9e21b-abe0-4fb6-b404-a7e02b04dfe6.mp4 Late joiners who arrive after the emergency shuttle has already passed no return have a 20% chance of having toast (If the mask slot isn't already full (I think this is just detectives)) It's a funny anime reference. :cl: add: Crewmembers arriving very late will not always have time to finish their breakfast. /:cl: * Fire Proof Goliath Cloak (#74954) ## About The Pull Request Right so, I was trying to imagine why goliath cloak isn't fire proof when goliaths can quite literally bathe in lava. So I decided it must be an oversight. So now they're fireproof. ![image](https://user-images.githubusercontent.com/126404225/234091167-8018bf17-3f04-45e2-9b16-a15f765e1288.png) ## Why It's Good For The Game Fireproof mob leather is actually fireproof ## Changelog :cl: fix: fixed an oversight - Made Goliath Cloak and Goliath Cloak Hood fireproof. And Goliath hide. /:cl: * Makes railings easier to construct, while making them easier to destroy. (#77894) ## About The Pull Request Changes the cost of railings from 6 metal rods to 2 metal rods. The time to construct has been reduced from 3.6 to 1 second to be in-line with the grille. The health of railings has been reduced from 75 to 25. Armor of railings have been reduced as well by about 30%. I'm not positive on whether or not it should cost 1 metal rod or 2. I decided to play it safe and make it 2. If some maintainer is interested in making it only cost 1 rod then I will gladly do so- but this was my compromise. Also changes decaseconds/ticks to seconds in the rod construction code to make it look better. ## Why It's Good For The Game Railings look nice and it's an absolute pain in the ass that they cost 6 metal rods. They're also currently substantially stronger than grilles for whatever reason. Grilles have 50 health, while railings have 75. The armor of railings makes this health of 75 to a whopping effective health of 150. Railings shouldn't be stronger than full-tile grilles. They should be fairly flimsy. They also shouldn't take a wrench AND wirecutters to deconstruct. Grilles only take wirecutters and we should mirror that. ## Changelog :cl: balance: Railings now only cost 2 rods and are much easier to construct. But they can now be destroyed much easier and cut with wirecutters without unwrenching. /:cl: * Morgue dead body placer guarantees 1 human to dissect if non-human cadaver config is enabled. Morgues spawn with 1 additional body (except on Birdboat). (#77816) - Morgue guarantees 1 human body to dissect even if `morgue_cadaver_disable_nonhumans` config flag is set. - All maps bar birdboat will now spawn with one additional morgue cadaver. - Did some minor code cleanup around the dead body placer, removes an `in world` loop, etc. - Morgue guarantees 1 human body to dissect even if `morgue_cadaver_disable_nonhumans` config flag is set. - This is mostly a downstream server issue but if your server enables this config and has additional species enabled, the odds of you getting a human to dissect tends to be very low. - Why is this a problem? Well, a human is necessary to dissect to get medical's tech. - Why not get genetics to get you a hu-monkey? This is an option, but if A. there's no geneticists or B. they are refusing to cooperate then you tend to be SOL unless you want to wait for a greytide to come in after drinking themselves to death. Given we have a role now dedicated to performing dissections, having no job to do for the first twenty or so minutes due to a lack of a human body is kind of sad. - If this is an intended facet, I will revert this change and leave it to the code improvements / bodycount uptick. - All maps bar birdboat will now spawn with one additional morgue cadaver. - This was actually intended on some maps but has been stealthily removed in some cases? Icebox and Delta used to have two dead body spawners to place 4 cadavers. So I decided to bring this back. - For the most part, this just gives higher population maps more bodies to mess around with. Higher pop means more people means more people need bodies, either for antagging, cooking, body replacements, or coron-ing. - Also like, sometimes messing around with dead bodies are fun, and it's nice to not have to worry that you're running out of them for actual medical use. - I can also make this scale on roundstart pop if we really care. But that seems overkill. Especially as these maps had their body counts higher for a while and were fine. :cl: Melbert balance: If your server has non-human morgue cadavers enabled, you will be guaranteed one human cadaver no matter what. balance: All maps (with the exception of Birdboat) now have an additional morgue cadaver roundstart. /:cl: * Dump donkpokets into microwave (#77317) ![dreamseeker_KMA1Il7OcN](https://github.com/tgstation/tgstation/assets/3625094/b33bcb45-0798-4b22-92d3-836b880fa9d0) ## About The Pull Request Makes it possible to use any storage, not just tray, to fill the microwave. ## Why It's Good For The Game You can dump the entire box of donk pockets in one click. ## Changelog :cl: qol: You can fill microwave with stuff by hitting it with a box full of stuff. /:cl: * Fire temperature effects on a human is soft capped at 1200 kelvin, from when dimishing returns are applied (#79655) ## About The Pull Request Past 1200 kelvin, fire temperature applied to humans receive diminishing returns ![image](https://github.com/tgstation/tgstation/assets/51863163/40ddbcde-f3fa-4ecc-8c5b-ca27e86b9aed) At 30 minutes of fire, a human is expected to be at about 6,200 k ## Why It's Good For The Game It's not really realistic that a body can manage to get up to the hundreds of thousands of kelvin, the energy just isn't there. It doesn't even make sense that a body can get to 6000 kelvin that's like as hot as plasma IRL or something. Humans cremate at 1200 kelvin. Temperature in general should be reigned in to prevent that but that's a much larger project. This also helps curb two issues, one being the "very high temperature reagents" exploit and the other being "shaft miners coming into medical being very difficult to revive". ## Changelog :cl: Melbert balance: Body temperature from being lit on fire will soft cap at 1,200 K. It will still increase beyond this, but with diminishing returns. For example, at 5,000 K, fire will heat 67x weaker. /:cl: * Adds a sound effect for hypospray/medipen injections (#77979) Adds a sound effect for hypospray/medipen injections. Doesn't affect sleepy pens or HMS injectors Sound is sourced from the open source CM codebase. > Adds a sound effect for hypospray/medipen injections. Doesn't affect sleepy pens or HMS injectors Satisfactory, visceral feedback of injection. Sounds nice. Makes stealth injections less noticeable, I guess, not that there's any good candidates for that with medipens. :cl: sound: Adds a sound effect for hypospray/medipen injections. Doesn't affect sleepy pens or HMS injectors /:cl: --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> * adds your mother (#78998) ## About The Pull Request adds a hallucination of the same rarity as a xeno leaping at you https://github.com/tgstation/tgstation/assets/70376633/358dbf59-5add-40e6-ac53-693a971b2d61 your mother will have the same species as you ## Why It's Good For The Game https://cddawiki.chezzo.com/cdda_wiki/index.php/Your_mother ## Changelog :cl: add: added a new hallucination, your mother /:cl: * Fixes a bug where your mother would delete your species after calling you a disappointment, rendering you a broken husk of a mob (#79098) ## About The Pull Request Yep. So I was investigating why a player was weirdly unable to equip things, or do a lot of stuff. And encountered in the runtime logs that _their species datum was deleted_. How? Well...the answer is...your mother. --- So the hallucination of 'your mother' uses the hallucinator's species datum to create itself here: https://github.com/tgstation/tgstation/blob/07096ffcad0f06ac9276c38275fa4e09e7dece41/code/modules/hallucination/mother.dm#L80 Which then calls set_species, but it passes _your actual species datum in as an arg_ https://github.com/tgstation/tgstation/blob/07096ffcad0f06ac9276c38275fa4e09e7dece41/code/__HELPERS/dynamic_human_icon_gen.dm#L12 which leads to the mob _having your species datum_ https://github.com/tgstation/tgstation/blob/07096ffcad0f06ac9276c38275fa4e09e7dece41/code/datums/dna.dm#L512 Then when mother goes away and deletes herself, so does your species datum. Leaving the hallucinator extremely broken, bugged, and humiliated. @MrMelbert maybe letting people `set_species()` using an instantiated species datum was a mistake...lol. ## Why It's Good For The Game Nerfs your mother. She is too powerful! ## Changelog :cl: fix: Fixes a bug where your mother would delete your species after calling you a disappointment, rendering you a broken husk of a mob /:cl: * Every kind of animal can hallucinate their mother (#79300) ## About The Pull Request The "your mother" hallucination fallaciously assumed that only humans could hallucinate, and then would throw errors if a mob with no DNA tried to hallucinate its mother. Now non-human mobs can also see their nagging parent in their brain. ![image](https://github.com/tgstation/tgstation/assets/7483112/38ca44ac-db1b-492d-8383-3ad2dcd1e309) Plus there's an easter egg for one special boy. ## Changelog :cl: fix: Non-human mobs can hallucinate their mothers without causing a runtime error /:cl: * The mother hallucination has more possible one-liners now. (#79724) * Fix your mom * Freedom Implant Feedback and Facelift (#78486) This aims to make the freedom implant a bit less clunky, and a bit more responsive. No fundamental changes or buffs or anything, just some more feedback and player-facing clarity on what this thing actually does. Changes include: - Freedom implants can no longer be implanted into non-carbon (uncuffable) mobs. - The freedom implant will no longer expend charges when used without active restraints. - The to_chat has been replaced with a balloon alert (displayed to the user only, of course). - The implant throws a balloon alert shortly after it runs out of charges, notifying the user that it has degraded and is gone. - The implant pad readout has been changed to provide a bit more useful information, and provide a bit less incorrect information. - No, seriously, what did _"Analyzes certain shadow signals in the nervous system"_ even mean? Shadowlings?? - The uplink listing now lists the number of uses, and explains that the implant is useful for more than just handcuffs. I used this thing once on a nukie round and thought "oh god this needs a facelift immediately". Players should be able to know the basic functions of their toys without having to consult the wiki. :cl: Rhials qol: The freedom implant has received minor feedback and other minor usage improvements. /:cl: * Health analyzers now warn you if someone can't survive their temperature. (#74936) ## About The Pull Request Health analyzers are now red/blue if the temperature of the person is too hot/cold ![image](https://user-images.githubusercontent.com/53777086/233828353-5c40ecbc-032b-4de6-8ea7-70607375f16f.png) ![image](https://user-images.githubusercontent.com/53777086/233828355-5e831236-6961-41d7-909a-67ae2f8036ff.png) ![image](https://user-images.githubusercontent.com/53777086/233828366-f31e82c5-075d-441d-b747-47990cbf3c3f.png) Also because I just noticed it, I moved the signal for health scan down, meaning that things that are registered to it now work with inverse technetium setting it to advanced mode. I also removed the ishuman check for bleeding because it's a carbon proc. This has no game-effects as xenos don't have DNA. ## Why It's Good For The Game We currently expect doctors to see all the important information with red text to know what needs to be fixed, however this is not the case for temperature, we are currently expecting them to pay attention to a body's temperature, and what their species can handle. I think this is quite lame, and I think it would be better if it worked like everything else in the analyzer. ## Changelog :cl: qol: Health analyzers now show body temperature in red/blue if the temperature of the body can't sustain it's own life. fix: Inverse technetium now properly gives advanced details in genetics/radiation analyzing. /:cl: * Refactors High Luminosity Eyes, fixes a ton of bugs related to it as well as qol improvements (#75040) The high luminosity eyes item was extremely out of date, broken, and full of copy paste code from atom lighting. Which is a shame because they were cool. On top of all that it was using a special light effect that was not very performant. I got rid of all that, hooked it into atom lighting as a new light type, and gave it a new TGUI as well because the old ui prompts were not great either. You can now pick a color at random if you want. You can also set the color and range before surgically implanting them. No more being forced to go through the color picker when you just want to change the range. Functionally they should pretty much should be the same as before with some bonus features (see below). ![dreamseeker_nDeLNyOOG2](https://user-images.githubusercontent.com/13398309/235325530-105fe82e-ecc8-4dc4-9c84-143cc6519688.gif) Closes https://github.com/tgstation/tgstation/issues/61041 Closes https://github.com/Skyrat-SS13/Skyrat-tg/issues/14685 This is 100% completed. I just finished fixing the slight translation bug when going from 0->1 range (see above gif) and that was the last thing on my bucket list. I happy enough with this at this point in time. --- EDIT: I have decided to add in one last new feature, and that is... independent settings for eye color. <details> <summary>You can now set eye color independently if you wish</summary> ![dreamseeker_j32B2S4yXQ](https://user-images.githubusercontent.com/13398309/235412568-ffa8e424-8624-4462-9f6f-77c1513aa773.gif) </details> The eye color does not modify the light color in any way when set in this manner, but it can be used for cosmetic purposes. Kind of makes the item more like cybereyes from cyberpunk, which I think are pretty neat! </details> - refactored high luminosity eyes so they use the atom lighting system instead of the way they were doing it before - the new light type, `MOVABLE_LIGHT_BEAM` behaves similarly to directional lights, with some slight differences. it reuses the same lighting overlay sprites but scales them vertically to produce a more focused effect. The result can be seen above. This is in contrast to the old way, which spawned `range` number of individual 32x32 overlays and moved them around. This way should perform better as well as be more maintainable. - added a new TGUI interface for high luminosity eyes with buttons for range, a text field for a color hex, a color picker and randomizer - made the eye overlay emissive when the light is turned on - range goes from 0 to 5. at range 0, the light overlay is turned off and you are left with just the emissive eyes. - added a cosmetic functionality to this item that lets you change the color of your eyes independently of the lighting (and each other) - fixed a bug with directional flashlights sometimes not updating their lighting overlay if you pick them up without changing your direction --- Being able to dynamically set range back and forth exposed some logic issues that had existed with directional light overlays and I have fixed those. That is why there are some edits in that file that may not appear readily obvious why they are there. Apart from that, two other bugs that come to mind: 1) eye code was supposed to keep track of the eye color you had before you got new eyes, but it was overwriting that every time you ran refresh(). 2) lighting was supposed to be turning off the light when range is set to 0, but it was not doing that properly. And of course besides that, there may have been a few instances of finding typos/tidying up code The code for this was like 6 years old and in desperate need of updating. Now it works, and has a nicer UI. :cl: fix: high luminosity eyes light overlays now follow the user correctly qol: high luminosity eyes now have a tgui menu so you no longer have to go through the color picker every time you want to change the range. they also have a new setting that lets you change the color of your eyes independently of the light color. You can now have cybernetic heterochromia if you want fix: directional flashlights when picked up will now always update their cast light direction correctly no matter what dir you are facing refactor: refactors high luminosity eye code to better make use of the atom lighting system, adding a new light type 'MOVABLE_LIGHT_BEAM' /:cl: * Changes syndicate surgery duffelbags to contain advanced tools (#75846) ## About The Pull Request Changes syndicate surgery duffelbags to contain advanced tools. In total, they contain - All advanced surgical tools, alongside the normal ones without an advanced version - Sterilizine gel - Bone gel and surgical tape - Roller bed - Straight jacket, muzzle, and MMI Changed the Syndicate Infiltrators' surgery areas to contain a full syndicate surgery duffelbag. The normal infiltrator now has a operating computer and a closet of misc. surgical clothing and anesthesic tank. ## Why It's Good For The Game > Changes syndicate surgery duffelbags to contain advanced tools. > In total, they contain (...) The only real reason to buy this item is for the increased storage space the duffelbag gives, and I find that a little sad. Surgical tools are plentiful, as they can either be lathed from cargo, medbay, or just taken. A surgeon, the role that *should* thematically need this the most, has absolutely no reason to take it. Now they do! A full set of advanced tools is certainly something that can be considered for purchase, especially with all the bonus items in here - which might just allow a traitor to repair their bones if they're heavily wanted and licking their wounds in maintenance. The TC cost has been increased to 4 to compensate. > Changed the Syndicate Infiltrators' surgery areas to contain a full syndicate surgery duffelbag. Similar to above, but instead, the reasoning is that nukies really do not have a lot of time to do surgery. A lot of the 20 minutes of prep time in War is spent figuring out what you're buying with your exorbitant amount of TC, in non-War you don't really want to delay the mission for five minutes for surgery, and its hassle means that most people do not really want to bother with things like nerve threading, etc. due to the large, annoying time cost. > The normal infiltrator now has a operating computer and a closet of misc. surgical clothing and anesthesic tank. The former is because, well, what the hell, why didn't it have one! Removing the loose tools gave me the space for it. The latter is just me realizing that empty closet is weird and lame and so I gave it some fluff contents to give it a reason to exist. ## Changelog :cl: add: Changes syndicate surgery duffelbags to contain advanced tools, sterilizine, surgical tape, and a roller bed. add: Changed the Syndicate Infiltrators' surgery areas to contain a full syndicate surgery duffelbag. add: The normal infiltrator now has a operating computer and a closet of misc. surgical clothing and anesthesic tank. /:cl: * Improves mob resizing (and UpdatePaths). (#75892) * Makes sure body position y offset is updated if resized [NO GBP] (#75932) ## About The Pull Request So far, the offset is updated only when the user is lying down or standing up, woops. ## Why It's Good For The Game See the title. ## Changelog :cl: fix: Fixed a small issue with mob resizing not promptly updating a body offset variable. /:cl: * Resizing mobs also affects their maptext height (#77065) I'll make this brief: the maptext height isn't currently being affected by mob resizing unlike pixel y, which means text may overlap with an upsized mob's sprite. However, it's a mild issue to be frank. Making runechat look nicer I guess. :cl: fix: the height of runechat messages should now scale correctly with the current size variable of living mob. /:cl: * [NO GBP] fixes the logic for mob size-related maptext height. (#77171) ## About The Pull Request I've made a hiccup in the logic at the last moment and forgot that the offset should be half of the size difference from trom the default identity, not its entirety, this is because scaling is equally distributed vertically and horizontally, we only have to deal with the upper half of it. ## Why It's Good For The Game Fixing a human error. ## Changelog N/A, it's a barely noticeable whoopsie all in all. * Makes mob resizing a smidge more precise. (#77619) ## About The Pull Request I've recently come to learn recently that transform translation, unlike pixel x/y/w/z, doesn't disregard values after the decimal separator, and while that has little effect on atoms with identity transform/interpolation matrices, can alter how the atom is rendered slightly. This way, there shouldn't be visible differences between an icon, scaled by, let's say, 1.23, translated by 2.4 vertically, and a similar icon scaled the same, offset by another 2pixels in the same direction yet translated by the remainder 0.4. ## Why It's Good For The Game Manily because I've a PR up on Skyrat to replace some of the code to actually use the current size variable, tho some players have reported it looks worse than before. Also, title. ## Changelog N/A * [NO GBP] Fixing a minor mistake with update_transform() (#77685) ## About The Pull Request Well, while the translation for lying/standing from #77619 is supposed to work using the decimal place of whatever value the `body_position_pixel_y_offset` variable should be while the mob is in standing position (basically, `get_pixel_y_offset_standing()`), for a fleeting moment idiocy took the better of me, and instead I just used `body_position_pixel_y_offset` (which is of a different value when the mob is lying down), resulting in resized mobs slooowly ascending (if bigger) or descending (if smaller) each time they stood up. Also taking a few seconds to add some `if` checks to avoid running these operations for the wide majority of mobs, which have a default size of 1 anyway. ~~I hope I won't have to make further such PRs for a while.~~ ## Why It's Good For The Game Read above. ## Changelog N/A * Fix wigs being offset too far by mob height (#79262) ## About The Pull Request Wigs now properly adjust their height to match your head's height. They've been being offset twice, first by the worn item code for hats, and again for the overlay applied that actually makes the hair. Adds an argument to said worn item code to just skip the offset business. I'm very open to suggestions on how to do this in a better way, I feel very out of my depth with all this icon code. Fixes #78215 Fixes #73451 Fixes #73153 ## Why It's Good For The Game Fix bugs! ## Changelog :cl: fix: Wigs now properly follow your head when you're any non-standard height /:cl: * Fix get_icon_dimensions being a memory hole where ram goes to die (#80129) Icons can be a real file(), a rsc backed file(), a dynamic rsc (dyn.rsc) reference (known as a cache reference in byond docs), or an /icon which is pointing to one of those. You can tell if a isfile() passing icon is a dynamic rsc reference or if its a static file/compile time rsc reference by looking at the stringify version. In icon file references that crc match a dmi that is compiled in the rsc, this will stringify to the compile time path to that dmi. (fun fact, even vv uploaded icons do this, if the file crc matches a file in the rsc the client has, byond doesn't even upload it, it just tells the server to use the rsc version) Runtime generated dynamic icons are an unbounded concept cache identity wise, the same icon can exist millions of ways and holding them in a list as a key can lead to unbounded memory usage if called often by consumers. So now those are not cached. If this proc turns out to be high cost after this change, that can be helped some by overriding /icon/Width() and /icon/Height() and adding a datum level cache to those as well and fixing code that manages icons so that it keeps the icon datum around as much as it can. --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> * 'Mirrors now display your reflection' Redux. (#77202) This is a revamp of #62638, which is in turn a remake of #49833, a whooping 3 years old PR, that adds one component to the game, used by mirrors, to do what it reads on the title. Thanks ChungusGamer for reminding me about it. This time with vampires not being shown in mirrors. I'm going to post the old screenshots here since I've forgot to take some during the latests tests, while I was busy cussing about a tiny little detail I couldn't achieve (see the documentation on the component path so I don't have to be verbose about it). They look more or less the same, except the visuals look a little less cropped now, ergo nicer-looking: ![immagine](https://user-images.githubusercontent.com/42542238/140630271-b002fe97-59c6-4781-abc9-02046c002dac.png) and here another from the previous attempt at PRing this: ![Bolshevik Spess Junk LV 2021-11-07 024750](https://user-images.githubusercontent.com/42542238/140630301-5ca687ec-153b-4f7d-9e37-76fa038c6299.png) :cl: image: Mirrors now display a reflection of the mobs next to them... except for vampires. /:cl: * [NO GBP] Mirror reflections no longer display progress bars or runechat. (#77446) ## About The Pull Request I was thoroughfully worried this would had been a cursed issue until I figured it out. Mirror reflections now use render targets to copy the appearance of the reflected movable, not vis overlays, with a couple caveats. ## Why It's Good For The Game This will fix #77431. ## Changelog :cl: fix: Mirror reflections no longer display progress bars or runechat. /:cl: * Portals now have a colorful glow (#77298) Most instances of /obj/effect/portal now faintly glow their respective color. ![image](https://github.com/tgstation/tgstation/assets/28870487/3044b435-d4e7-4ba5-86f9-ca6f9e4415c1) This was taken in the dark, the glow isn't as noticeable in the light. Anomaly/jaunter/mech wormholes do not glow, since they use the black-and-grey swirly sprite and don't look like they'd emit any kind of light. Also autodocs some portal related vars and changes one proc to not use single char vars. I also tried adding a soundloop but it sounded kind of crappy so I decided against it. Makes the portals a little bit prettier :) :cl: Rhials qol: Most of the colored oval-shaped portals faintly glow now. Cool! /:cl: * Sets the dynamic human appearance via copy_overlays (#77794) Set_dynamic_human_appearance set the new appearance directly on the target mob. This has caused the mob's name to become Unknown, and its description to become empty, as it inherited the name and description of the appearance's source, which was a default spawned dummy human. This PR makes it so that it nulls the icon of the target, and then copies the appearance via copy_overlays. Thank you Fikou for pointing out this simple solution, I almost did something complicated with signals. * [No GBP] Gives a proper blank icon to dynamic human appearance (#78049) ## About The Pull Request In an earlier PR, I have fixed how the dynamic human appearance is applied to mobs, to ensure their name and description stays. The solution nulled the icon, which caused the HUD to not appear, as they had no image height data to pull from. This PR fixes that by assigning them a blank icon state. ## Why It's Good For The Game Its nice if you can see the HUDs of various mobs. ## Changelog :cl: fix: The HUDs of mobs with dynamic human appearance will appear properly. /:cl: * Tendril Tagging - scanning necropolis tendrils with a mining analyzer updates its GPS tag (#78738) Makes it so that if you wave a mining analyzer over a necropolis tendril (kinda like a geyser), its GPS tag is updated with a code for what it spawns and a numerical designation. Unlike geyser scanning, this awards no points, and is solely for figuring out what tendril spawns what fauna. <details> <summary>Screenshots in the dropdown:</summary> ![image](https://github.com/tgstation/tgstation/assets/31829017/888f19f9-2291-4349-995a-2821e99da375) ![image](https://github.com/tgstation/tgstation/assets/31829017/d847e88e-a8ae-4a18-ae57-aed248343457) ![image](https://github.com/tgstation/tgstation/assets/31829017/d9646dad-70b6-4e92-8b5d-ce5eed873869) Updated: now on the `structure/spawner` level, allowing it to cover icemoon spawners. ![image](https://github.com/tgstation/tgstation/assets/31829017/73cc2972-1c34-485d-8b70-a04f44a92bcd) Updated again: now it has an associated examine thing. ![image](https://github.com/tgstation/tgstation/assets/31829017/44027082-3672-4033-b603-de1a0c3d2af2) </details> Also removes the redundant `gps` variable because it got componentalized. I think being able to know what one of fifteen eerie signals is spawning without having to memorize which one is spawning which thing at what coordinate, or just vaguely going "oh so that's where the legion tendril was today". :cl: qol: Miners can now tag monster spawners (necropolis tendrils, animal dens, demonic portals, and netherworld links) by using their mining scanner on it, which updates their GPS tag (and/or gives them one) to give it a numerical designation and a short identifier for what it's spawning. /:cl: --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> * Prevent space-required station goals from running on planetary maps (#79224) ## About The Pull Request Someone forgot to put `as anything` on an iteration of an array of typepaths. Easy fix. ## Changelog :cl: fix: You will no longer be asked to construct meteor shields on stations which cannot be hit by meteors. /:cl: * go go gadget hat (#78293) ## About The Pull Request adds a hat that you can say a phrase for it to put something in your hands * Tablet UI update (mostly fixes) (#74844) Tablet UIs are now changed when opening/closing an app, instead of constantly checking for a UI change every ui update. Program UI acts no longer call parent, as it was unnecessary, Computers are the ones that should be calling it. Fixes a ton of problems with static data not updating, such as in Messenger, ID management, Siliconnect, and Chat client Chat Client's Admin mode also works again, which was broken when accesses to check was turned into a list. Turns a few lists in Robocontrol into static ones when we aren't changing anything, and makes it actually scan your ID's access. Fixes budget ordering being unable to show the cart/call the cargo shuttle. While I can't seem to find a single issue report on any of the above, these are still problems that should be fixed. :cl: fix: SiliConnect can download borg logs again. fix: The RD can once again enable Admin mode on Wirecarp fix: NT IRN can once again see the shopping cart and call the cargo shuttle. fix: Chat Client, ID Management and Messenger should now update their UIs properly. code: PDAs will hopefully not lag as much when clicking on buttons (such as in ID management). /:cl: * Fixes issues with closing apps on tablets (#75117) ## About The Pull Request - Fixes background apps not reloading the UI - Standardizes opening/closing/backgrounding apps - Simplifies the way apps are closed instead of having 2 procs, one on the PC and one on the program, being named the same thing (wtf) - Removes program states. They existed so computers can know to update their UI every process tick, but since we now do this event based, this is no longer needed, which is good. - Replaces the 'forced' arg from kill_program as it was completely unused, with ``reload_ui``, which is now used to open the UI on close, and not to when we don't want it to. - Closing background apps no longer reloads the entire UI - Responding to an NT Message will no longer open the UI on your face. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/75046 Closes https://github.com/tgstation/tgstation/issues/75108 Makes tablet UIs more responsive and lag less, not checking if a program is closed every process to close it, and makes responding to messages not a hassle every time. Also makes the code easier to understand/read, ## Changelog :cl: fix: Tablets' minimize apps feature works again. /:cl: * ""Fixes"" Siliconnect log UI updating (#75890) i dont think borg logs are static why are they in static update changes them to normal ui update * You can no longer abuse aicard shitcode to return to lobby as an AI (#75964) See title. * Signalizes an AI card thing (#76869) ## About The Pull Request Changes this code to be signalized on AI cards https://github.com/tgstation/tgstation/blob/76bddbd90306829291896e9b90e6e8071933e6fa/code/modules/mob/living/silicon/ai/death.dm#L44-L49 Minor code improvements as well (Moving the sleep out from flushing into its own async proc) ## Why It's Good For The Game Cringe code ## Changelog :cl: Melbert code: AI cards should react more snap-ily to having their occupant perish /:cl: * Robot suit hard-del / exited cleanup (#76583) Constructed cyborgs seemed to hard delete pretty consistently due to their robot suit having poor reference handing Goes through and better implements exited for cyborgs and robot suits Also a hard delete with forced AIs that may have resulted in some metagaming Also fixes 1 nodrop check for hats Hard deletes are bad :cl: Melbert fix: Fixed some hard deletes involving constructed cyborgs fix: Cyborgs with nodrop hats no longer lose them on tip /:cl: --------- Co-authored-by: san7890 <the@san7890.com> * Removes side effects in Destroy from cyborgs, misc related code cleanup (#76867) ## About The Pull Request - Removes side effects from cyborg `Destroy` - Right result in more cyborgs getting dusted... Will have to check this out. - General AI / cyborg code cleanup Fixes #76855 ## Why It's Good For The Game Some more consistent, clean code ## Changelog :cl: Melbert fix: Cyborgs no longer drop their radio key when deleted, only when deconstructed first fix: Cyborgs no longer drop their MMI on deletion, only prior to deletion. This may result in bad code rearing its ugly head, open an issue report on the github if you're a cyborg and get ghosted when you feel like you shouldn't fix: Runtime from syndie cyborgs spawning fix: AI deaths are reported to black box /:cl: --------- Co-authored-by: Jacquerel <hnevard@gmail.com> * Reworks how AI tracking is handled & reorganizes it (#77776) Completely reworks how AI tracking is handled, this has no in-game effects. This moves nearly all AI tracking handling onto ``/datum/tracking``, which previously was pretty bad. I tried documenting as much as I can, making comments actually useful and give accurate information. Turns ``get_camera_list`` into a global proc, which we now use for camera consoles (including the app), cutting down on copy paste in 2 areas and standardizing its behavior/backend. I wanted to generalize this behavior so I can use it for tracking players in https://github.com/tgstation/tgstation/pull/77713 - This helps me do that. Also the current state of AI tracking code is pretty poor and hopefully this improves that area. Closes https://github.com/tgstation/tgstation/issues/42355 :cl: refactor: AI's player-tracking eyes received an unwanted obligatory update, and should now not tell you that a player is untrackable when they clearly obviously can be. /:cl: * Tablet apps are now deleted when necessary & removes console preset. (#75863) Apps now properly delete themselves when removed, so they don't exist in nullspace anymore. Chat client now actually updates the uid, because its New() didn't call parent. Deletes the 'console' subtype of modular computer Updates how downloading and transferring files are handled Fixes being able to infinitely upload apps to a disk Fixes some more bugs I found with apps and prevents spamming apps in a disk. :cl: fix: Maintenance data disks now properly transfer from PC to disk fix: Disks can no longer be flooded with the same app repeatedly. /:cl: * Removes obsolete obj_flags flag (#75356) This flag is literally only used in two objects in the game and seemingly does nothing * Replaces Camera bug with Camera tablet app (#77713) Replaces the Traitor's Camera Bug item with an application that allows you to view camera apps. The difference between this app and the Security one is that it does not have an access requirement, does not make noise (it didn't previously due to a bug, fixed in this PR), and can be installed on PDAs. This can also be installed from syndienet, which means nukies now have a way to see the station cameras while off the ship. Adds Syndicate app disks, which are made of Gold. This is only used by the Camera app as of right now. I also fixed some issues along the way; - Camera tablet app now properly shows cameras - It now properly makes the noises it is supposed to - It clears the viewers properly on the ui being closed or the app being exited. Syndicate app disks ddelete their apps upon being transferred over (like maintenance disks), trying to remain consistent with previous behavior. I also made this for a [personal project I am currently working on](https://hackmd.io/XLt5MoRvRxuhFbwtk4VAUA). I could just make this UI be TGUI, but I thought it could be worth trying to turn it into a better item first. Tracking people is much simpler now- You choose anyone from a list of people found on cameras, and it will try to find a camera that sees them. It follows them until you close the app or switch camera. https://github.com/tgstation/tgstation/assets/53777086/1536ebb9-0c4f-45bb-b593-f98791ea6d23 The Camera Bug is one of the worst traitor items as of current. You can remotely shut off a single camera, something that can be done with basic tools you are likely carrying around anyways, and uses an HTML clunky UI to flip through cameras. This new Traitor item makes it much easier to use, since the camera consoles are something you are likely already used to. It also means emagging a tablet is slightly more useful, and golden data disks are pretty cool. Unfortunately this means that they no longer grant illegal tech, because otherwise you can simply clone the app infinitely for personal use, and deconstruct the disk itself for tech. This can be grinded into gold, but I think if we want an illegal tech item, it'll have to find a new host. Closes https://github.com/tgstation/tgstation/issues/74839 Closes https://github.com/tgstation/tgstation/issues/39975 Closes https://github.com/tgstation/tgstation/issues/53820 :cl: balance: The Traitor's Camera bug is now a tablet app that works like a silent camera console with an extra ability to track people through their nearby cameras. /:cl: * Fixes ai shell deployment not unregistering a death signal properly (#78816) it was screaming runtimes each time an ai disconnected or reconnected to an ai shell because it never unregistered the death disconnect signal properly. ``` [2023-10-01 14:56:38.191] RUNTIME: runtime error: living_death overridden. Use override = TRUE to suppress this warning. - Target: Calaban Default Shell-980 (/mob/living/silicon/robot/shell) Proc: disconnect_shell (code/datums/signals.dm:39) - proc name: stack trace (/proc/_stack_trace) - source file: code/__HELPERS/stack_trace.dm,4 - usr: Calaban (/mob/living/silicon/ai) - src: null - usr.loc: the floor (150,25,4) (/turf/open/floor/circuit) - call stack: - stack trace("living_death overridden. Use o...", "code/datums/signals.dm", 39) - Calaban (/mob/living/silicon/ai): RegisterSignal(Calaban Default Shell-980 (/mob/living/silicon/robot/shell), "living_death", "disconnect_shell", 0) - Calaban (/mob/living/silicon/ai): Deploy to Shell(Calaban Default Shell-980 (/mob/living/silicon/robot/shell)) - Reconnect to shell (/datum/action/innate/deploy_last_shell): Trigger(null) - Reconnect to shell (/atom/movable/screen/movable/action_button): Click(null, "mapwindow.map", "icon-x=12;icon-y=17;left=1;but...") - Reconnect to shell (/atom/movable/screen/movable/action_button): Click(null, "mapwindow.map", "icon-x=12;icon-y=17;left=1;but...") - /datum/callback/verb_callback (/datum/callback/verb_callback): Invoke() - world: push usr(Calaban (/mob/living/silicon/ai), /datum/callback/verb_callback (/datum/callback/verb_callback)) - /datum/callback/verb_callback (/datum/callback/verb_callback): InvokeAsync() - Input (/datum/controller/subsystem/verb_manager/input): run verb queue() - Input (/datum/controller/subsystem/verb_manager/input): fire(0) - Input (/datum/controller/subsystem/verb_manager/input): fire(0) - Input (/datum/controller/subsystem/verb_manager/input): fire(0) - Input (/datum/controller/subsystem/verb_manager/input): ignite(0) - Master (/datum/controller/master): RunQueue() - Master (/datum/controller/master): Loop(2) - Master (/datum/controller/master): StartProcessing(0) ``` shouldn't be player facing i think but who knows maybe we've missed something here on an empty shell death. ai eye resets to the shell's position? no clue lmao it was just fucking annoying * Makes AI tracking more snappy, improves API (AI movement change) (#81401) Ok so tracking (from the datum) worked, but when used to follow someone it had a noticable delay from the datum needing to wait for process to fire to do its work This would be an expensive proc to run constantly, but we don't really have to (there are not that many ai eyes in the world). So rather then only processing to keep step, let's track the target mob by its movement, and then fall back on a process loop to handle rechecking in case of camera memes. This does technically mean you won't "break" the track if the cameras go out until the tracked mob moves, but I think that's a reasonable price to pay for more responsive movement. I think I could make our current system work with it too, though it would be a bit more wasteful. John if you have opinions just lay into me. I've also renamed/pulled apart the helper procs for the trackable datum, with the hope of making how they are used more understandable at a glance Oh and rather then holding a weakref since I needed MOVED anyway I just use QDELETING to free the ref if the mob goes away Implements glide size mirroring so we move at the same speed as our target Also moves the existing signal to send to the trackable datum itself, as appears intended from the doc comment Rewrites ai movement to be less dumb OK so 2 things here. One is a behavior change, the other is a visual QOL thing. The way ai movement works is we move graduated "steps". Either moving 1, 2, or 3 steps per tick. We do this by, so long as input is held down, incrementing a number called "sprint" Currently it'll go from 10 to 50 (formula effectively looks like steps = (sprint / 20) + 1)) Anyway, this is... not fine but ok, but the way we handle deceleration is ass IMO. It's literally just wait 0.5 seconds and sprint resets. I think this feels crummy, so instead I've made it decay depending on how long you go between inputs, at 7x greater rate then it increases. That's the behavior change. Visual change is a lot easier. Ais were not gliding properly. They assumed they had 4 ticks to move a tile, rather then 1. This meant they'd jump around constantly, to catch up to where we expect them to be. I've fixed this by giving them 1 tick instead. Should feel a lot better Snappier response times, cleaner code :cl: add: AI's acceleration now smoothly decays, instead of just falling back down to 0 after 0.5 seconds fix: AI's standard movement (non accelerated) is smooth now, instead of constantly jumping around fix: AIs will now follow their targets more closely, shouldn't have any issues with them lagging behind anymore /:cl: * Remove last traces of `/obj/effect/abstract/eye_lighting`. * Don't double-define `NONSENSICAL_VALUE` * Add `TRAIT_NO_MIRROR_REFLECTION` to bloodsuckers. * Typescript camera console (#78412) ## About The Pull Request Refactors the camera console into typescript, including the secureye, removing the need for its custom css file ![KaBYZCTqG1](https://github.com/tgstation/tgstation/assets/42397676/4de52792-943c-4b2d-94e5-8ff10b678a91) ![Screenshot 2023-09-17 120550](https://github.com/tgstation/tgstation/assets/42397676/a5370678-ffc0-44b4-94b7-f3de95d8286e) ## Why It's Good For The Game Spruces up the UI ever so slightly and possibly fixes an issue #78009 Less code is better code ## Changelog :cl: refactor: Refactors the camera console UI. /:cl: * Camera consoles no longer constantly check camera list (#78822) ## About The Pull Request I would like camera sorting to be handled without having to constantly get the entire list of cameras and sorting itself, but this occasion it isn't even necessary, and was only added because I wanted to keep it consistent with old behavior. This wasn't the best idea, and this is trying to make amends with that. Instead of getting the entire list of cameras when swapping cameras, it instead gets that specific camera from the list and sets your active camera to that. To do so, camera consoles now have a ref to the camera, rather than going by name alone. ## Why It's Good For The Game Explained in the about section mostly, we're no longer checking through and sorting the entire list of cameras every single time you swap from one camera to another. ## Changelog Nothing player-facing. * Camera UI fixes (#78855) ## About The Pull Request Small nits that bothered me about the screen. - you can now press "next" or "previous" while at the end/beginning of the list, respectively - pressing next is now limited to your search results (rather than switching to the next overall) - reduced some checks for cases that will likely never occur (no ref??) ## Why It's Good For The Game UI bug fixes ## Changelog jlsnow301, Syncit21 :cl: fix: Fixed some issues in the security camera UI - pressing next or back will now loop through the cameras fix: Fixed some style issues in the camera console where selected cams weren't showing as selected fix: Camera console search works again /:cl: * Fixes camera console bluescreen (#78926) ## About The Pull Request There was faulty logic in determining what's the next/previous cameras in the list. Didn't account for scenarios with under 3 cameras in the filter. ## Why It's Good For The Game Bug fixes - search without a bluescreen! Fixes #78825 ## Changelog :cl: fix: Fixed the errant bluescreen in the camera console. /:cl: * Fix the SecurEye not working --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com> Co-authored-by: Rhials <Datguy33456@gmail.com> Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Co-authored-by: die_amond <58376695+dieamond13@users.noreply.github.com> Co-authored-by: KittyNoodle <78111117+KittyNoodle@users.noreply.github.com> Co-authored-by: Shadow-Quill <44811257+Shadow-Quill@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> Co-authored-by: SandPoot <43283559+SandPoot@users.noreply.github.com> Co-authored-by: Mothblocks <35135081+Mothblocks@users.norepl…
About The Pull Request
There's been a good handful of things I've wanted to change about Wounds and bleeding for a while, and this is me getting around to doing it. These changes are, in decreasing order of importance,
1. Make it easier to tell how badly you're bleeding
A few months back I was messing around with an admin turret that fired the same rounds the Mosin does, and saw 3 people get lit up and suffer multiple severe/critical piercing gunshot wounds. All three of them then bled to death over the next few minutes despite only one of them being incapacitated. Considering the random messages about wooziness only start around 70-80% blood, and 40%-50% is basically dying, you often don't get much warning of how badly you're doing before it's too late.
This PR gives you feedback via messages for how much blood you're currently losing, and if your rate of bloodloss is getting better (your cuts are clotting, you're bandaged, etc), worse (critical slashes bleed more over time, or if you have herapin in you), or holding steady (like piercing wounds which don't clot on their own). This helps reinforce that if the bleeding is holding steady or getting worse, you'll need to get it treated before it's too late.
These messages describe roughly how much blood you're losing (a small trickle, a steady flow, or you're oozing blood), as well as whether it's getting better, worse, or holding steady (and if they have coagulant in their blood). Hopefully, this'll help people better gauge how badly they should be looking for treatment, or if your cuts will patch themselves up shortly. The code and wording for this is still a bit rough, but it's nothing that can't be tidied up.
2. Improve bleeding balance
Bleeding is mostly fine balance wise, but there's a few issues I wanted to address. Epipen coagulant is basically a get-out-of-all-bleeding-free card since it rapidly closes up all open bleeding Wounds at the same time, making bleeding weak against people who knows how busted pens are, and overly strong against those who don't, especially since really bad bloodloss can sometimes kill you before you can try any of the other treatments. There's also some other wacky things like a nanite protocol that reduces all bleeding by 90% at minimal cost which need addressing.
Epipen coagulant will now passively reduce bleeding by 30% while in the bloodstream, and instead of clotting all bleeding Wounds at the same time, it will only help clot whichever Wound is currently bleeding the most. Determination from suffering Wounds will also slow bleeding by 15%, giving you a bit more time to disengage and find help before bleeding out. Epipens will still be useful in slowing down bloodloss and treating one or two bad Wounds, but will be less effective against large numbers of them. The Rapid Coagulating nanite program has also been renamed to Vein Repressurization and reduces bleeding by 50% for twice the nanite cost.
3. Neaten up burns
Burn wounds have always been a bit awkward, so this gives them a bit of love. The overly long descriptions have been trimmed a bit, and being well fed and free of infection will slowly regenerate the limb's flesh. Mediborgs could already treat infection by use of spaceacillin or the debride flesh surgery, but they could not easily treat the flesh damage of burns since borgs can't use ointment/regen mesh/synthflesh. They can now do so by wrapping the burned limb in gauze and making sure the patient is well fed, then simply waiting a bit.
4. Nerf organ decay
Wounds obviously added a bunch of extra work for doctors to do when patching up bodies, which I've been meaning to offset with a decrease in the decay rate of organs for a while but never got around to. Hearts will fail after around 6 minutes instead of 4, while stomachs and livers decay a bit faster than 15 minutes, and lungs decaying a bit slower than 15. Now all your organs won't fail at the exact same time, which according to the organ shutdown order on wikipedia, enhances realism!
Bonus: Removes teeth
People will no longer grit their teeth when wounded, they now tense up and grit themselves generically. Gritting teeth was an offhanded way of showing the person was in pain, I never meant to say flypeople and moths have teeth, please stop mailing me pictures of moths with teeth.
Closes #55009
Why It's Good For The Game
Make bleeding easier to understand and a bit harder to game, while also making other treatments besides epipens more viable. Makes burn wounds a bit less bad. Finally gives medbay a little buff to offset the extra work from Wounds. Saves me from people asking me if it's canon that moths have teeth.
Changelog
🆑 Ryll/Shaps
add: You'll now get messages when you're bleeding telling you roughly how much blood you're losing and whether the bloodloss is getting better, worse, or holding steady.
tweak: Burn wounds will slowly heal their flesh as long as the limb has < 10 burn damage, the burn has no infection, and the patient is fed.
balance: Hearts now decay slower, failing after roughly 6 minutes instead of 4. Livers and stomachs fail a bit faster than before now, while lungs fail a bit slower, meaning they won't all fail at the same time
balance: Epipen coagulant will no longer clot all bleeding wounds at the same time. Coagulant now slows bleeding by 30%, and will only clot the wound currently losing the most blood. Determination from suffering wounds will slow bleeding by an additional 15%.
balance: Renamed "Rapid Coagulating" nanite program to "Vein Repressurization". It now reduces bleeding by 50% rather than 90%, and costs twice as much.
/:cl: