Commit Graph

16280 Commits

Author SHA1 Message Date
SkyratBot
1477950b60 [MIRROR] Makes baton resistance trait actually work against security stunbatons [MDB IGNORE] (#18715)
* Makes baton resistance trait actually work against security stunbatons (#72645)

## About The Pull Request

I forgot in https://github.com/tgstation/tgstation/pull/68418 to make it
also work against security batons, this PR fixes that. Security batons
now will not knockdown you if you have baton resistance trait.

## Why It's Good For The Game

Baton resistance is useless against security batons because knockdown,
even if it is short is still a guaranteed disarm, that can leave you
without your cool nukie desword and make you die.

## Changelog

🆑
fix: Fixes security stunbatons knockdowning you even if you have baton
resistance trait
/🆑

* Makes baton resistance trait actually work against security stunbatons

Co-authored-by: SuperSlayer <91609255+SuperSlayer0@users.noreply.github.com>
2023-01-14 12:23:13 -08:00
SkyratBot
92dbc63c2a [MIRROR] Migrates the anomaly effects to their own folder, and their own individual files [MDB IGNORE] (#18697)
* Migrates the anomaly effects to their own folder, and their own individual files

* Update anomalies_bluespace.dm

* bye

Co-authored-by: Rhials <Datguy33456@gmail.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-14 12:13:08 -08:00
SkyratBot
0fd25257a9 [MIRROR] Fix blood overlays on energy daggers [MDB IGNORE] (#18682)
* Fix blood overlays on energy daggers

* CLANG

* has this ever worked?

Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
2023-01-13 21:56:37 -08:00
Zonespace
53c77b06fb Mirrors #72429 (#18668)
You can no longer instantly build carving blocks/mineral doors (#72429)

You can no longer instantly build carving blocks/airlocks
Added replaced a few 1's with true's 

## Why It's Good For The Game

SO YOU DONT PLOP DOWN 20 STRUCTURES WHILE A OFFICER IS CHASING YOU
FORTNITE STYLE

## Changelog

🆑 Improvedname
fix: fixes being able to instantly build carving blocks/mineral doors
/🆑

Co-authored-by: jughu <melvin2626@live.nl>
2023-01-13 18:26:25 -05:00
Zonespace
8fabd54ad6 Mirrors #72354 (#18654)
* [no gbp] removes all duplicate armor datums (#72354)

closes #72348
Title

My bad

Heres the script I used this time if you want to
```cs
var baseDir = Environment.CurrentDirectory;

var allFiles = Directory.EnumerateFiles($@"{baseDir}\code", "*.dm", SearchOption.AllDirectories).ToList();
var known = new Dictionary<string, List<KeyValuePair<string, int>>>();

foreach (var file in allFiles)
{
	var fileLines = File.ReadAllLines(file);
	for (var i = 0; i < fileLines.Length; i++)
	{
		var line = fileLines[i];
		if (line.StartsWith("/datum/armor/"))
		{
			var armorName = line.Replace("/datum/armor/", "").Trim();
			if (!known.ContainsKey(armorName))
				known[armorName] = new List<KeyValuePair<string, int>>();
			var knownList = known[armorName];
			knownList.Add(new KeyValuePair<string, int>(file, i));
		}
	}
}

Console.WriteLine($"There are {known.Sum(d => d.Value.Count)} duplicate armor datums.");

var duplicates = new Dictionary<string, List<int>>();
foreach (var (_, entries) in known)
{
	var actuals = entries.Skip(1).ToList();
	foreach (var actual in actuals)
	{
		if (!duplicates.ContainsKey(actual.Key))
			duplicates[actual.Key] = new List<int>();
		duplicates[actual.Key].Add(actual.Value);
	}
}

Console.WriteLine($"There are {duplicates.Count} files to update.");

foreach (var (file, idxes) in duplicates)
{
	var fileContents = File.ReadAllLines(file).ToList();
	foreach (var idx in idxes.OrderByDescending(i => i))
	{
		string line;
		do
		{
			line = fileContents[idx];
			fileContents.RemoveAt(idx);
		}
		while (!String.IsNullOrWhiteSpace(line));
	}
	File.WriteAllLines(file, fileContents);
}
```

* modular

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-01-13 18:05:12 -05:00
SkyratBot
c092ac78e1 [MIRROR] Light Replacer cleanup and afterattack improvement [MDB IGNORE] (#18694)
* Light Replacer cleanup and afterattack improvement (#72566)

## About The Pull Request

Makes a few code improvements to the light replacer.

* increment, decrement, and bulb shards were three values unnecessarily
stored as vars on the light replacer. They are now defines, as they were
static values either way.
* Autodocs variables on the light replacer.
* Everything uses snake case, and the single-character vars have all
been smote from existence.
* Changes some 0/1 use to FALSE/TRUE

In addition to this cleanup, the afterattack chain has been cleaned up a
lot. It now allows you to click on either the light, OR the turf under
it to replace a light. As a bonus, you now get some balloon alerts when
trying to replace lights while empty.
## Why It's Good For The Game

Closes #72557.

Cleans up the code I had to shuffle through to do so.
## Changelog
🆑 Rhials
qol: the light replacer now allows you to click on either the light, or
the floor beneath it, to refill lights.
code: light replacer code is now a bit prettier.
/🆑

* Light Replacer cleanup and afterattack improvement

Co-authored-by: Rhials <Datguy33456@gmail.com>
2023-01-13 14:53:26 -08:00
SkyratBot
1b7316cb85 [MIRROR] Makes pinpointers tell what they are tracking when examined [MDB IGNORE] (#18676)
* Makes pinpointers tell what they are tracking when examined (#72537)

## About The Pull Request

Makes pinpointers tell what/who are they tracking when examined.

## Why It's Good For The Game

Makes pinpointers more comfortable to use.

## Changelog

🆑
qol: Pinpointers now tell what they are tracking when examined
/🆑

* Makes pinpointers tell what they are tracking when examined

Co-authored-by: SuperSlayer <91609255+SuperSlayer0@users.noreply.github.com>
2023-01-12 21:53:44 -08:00
SkyratBot
894a61e048 [MIRROR] Material Resprites by Imaginos & PestoVerde [MDB IGNORE] (#18674)
* Material Resprites by Imaginos & PestoVerde (#72652)

imageadd: New material and ore sprites by PestoVerde & Imaginos

* Material Resprites by Imaginos & PestoVerde

* So long aesthetics folder

I fucking hated you.

Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>
Co-authored-by: Halcyon <81479835+Ebin-Halcyon@users.noreply.github.com>
2023-01-12 18:04:55 -08:00
SkyratBot
a3d2bc53ae [MIRROR] RTD Rapid Tiling Device [MDB IGNORE] (#18546)
* RTD Rapid Tiling Device

* Update tool_designs.dm

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-12 22:15:08 +00:00
SkyratBot
85b56a310d [MIRROR] Fix JSON description for solo bench and tram [NO GBP] [MDB IGNORE] (#18661) 2023-01-12 13:58:59 -08:00
SkyratBot
8a12ce27a8 [MIRROR] Fixes pancake stack sprites [MDB IGNORE] (#18665)
* Fixes pancake stack sprites (#72650)

## About The Pull Request

Pancakes were using inhand_sprite names (with no corresponding inhands)
to get the sprite names for the random stack icons, which is why stacks
consisting of baked pancakes became a pile of errors.

I considered adding six pancake inhand sprites, or GAGSing them, but
decided it does not worth it really, so i have just moved the base name
to a new var, hopefully that is fine in this case. I have made the item
argument of update_snack_overlays explicitly be a pancake, since this is
the only way it is ever used.

## Why It's Good For The Game

Fixes #71158

## Changelog

🆑
fix: pancakes no longer show an error sprite when added to a stack
/🆑

* Fixes pancake stack sprites

Co-authored-by: Profakos <profakos@gmail.com>
2023-01-12 13:21:52 -08:00
SkyratBot
ef1ad8331a [MIRROR] Experiment with holding hard references to objects being qdeleted in 515 (saves 1.1+ seconds on init times, more on prod) [MDB IGNORE] (#18361)
* Experiment with holding hard references to objects being qdeleted in 515 (saves 1.1+ seconds on init times, more on prod) (#72033)

## About The Pull Request
Adds `EXPERIMENT_515_QDEL_HARD_REFERENCE`, which will queue to the GC
subsystem using hard references rather than `\ref`. This is only
possible in 515 because of the new `refcount` proc. `\ref` is very very
slow and has some nasty knock on effects, so removing its usages where
possible is good.

This is an explicit opt in define because I want to give us the ability
to test 515 on live while only testing 515 itself, not our experimental
changes. We have a few more of these we want to do so I made a separate
file for them. They're auto-defined in unit tests so we see them with
the alternate test runner. In a perfect world we'd test both on and off,
but eh.

Closes https://github.com/tgstation/dev-cycles-initiative/issues/10

* Experiment with holding hard references to objects being qdeleted in 515 (saves 1.1+ seconds on init times, more on prod)

* fix missed underbarrels

* HEV radio

* Keeps gc_destroyed from getting updated on every step thru the gc queue. (#72401)

Keeps gc_destroyed from getting updated on every step thru the gc queue.

Fixes logic that assumed gc_destroyed is the time the object first
qdel'ed. it used to get updated on each stage of the garbage controller
and there are 3 stages.

Added list index defines for the inner gc item list.

* test fix

* final fix

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
2023-01-12 16:16:33 -05:00
SkyratBot
9e4a277cfd [MIRROR] Adds the Cursed quirk [MDB IGNORE] (#18492)
* Adds the Cursed quirk

* Update negative_quirks.dm

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-12 15:21:21 -05:00
SkyratBot
bf784520b8 [MIRROR] Handles Log_Globally Being True When Log Type is LOG_VICTIM [MDB IGNORE] (#18663)
* Handles Log_Globally Being True When Log Type is LOG_VICTIM (#72643)

## About The Pull Request

Victim procs would cause a [runtime, click on me for a link to the
runtimebus
entry](https://runtimes.moth.fans/runtime/Invalid%20individual%20logging%20type%3A%20524288.%20Defaulting%20to%204096%20(LOG_GAME).%20(code%2F__HELPERS%2Flogging%2F_logging.dm%3A120)_______%2Fproc%2F_stack_trace)
when you tried to put a victim log in globally. This was the runtime
error for future reference, via
https://tgstation13.download/parsed-logs/manuel/data/logs/2023/01/06/round-197717/runtime.condensed.txt
-

```
The following runtime has occurred 3155 time(s).
runtime error: Invalid individual logging type: 524288. Defaulting to 4096 (LOG_GAME). (code/__HELPERS/logging/_logging.dm:120)
proc name:  stack trace (/proc/_stack_trace)
  source file: stack_trace.dm,4
  usr: 0
  src: null
```

`524288` is the bitflag for `LOG_VICTIM`.

I added in a custom error message for passing in LOG_VICTIM without
adding log_globally just so that we can pick up on it faster without
having to look up the bitflags. I think I prefer it failing loudly as
opposed to just returning, so that people can much more easily pick up
on this behavior being a wrong one. The pattern across the codebase
prior to this PR was pass in log_globally as false along with LOG_VICTIM
in the args to `log_message()`, so I decided to enforce doing that in
this PR. Alternative fix could be to just early return on LOG_VICTIM,
but that would leave a larger footprint and might be better suited for a
different PR, preferably after this one at least gets all of our ducks
in a row.
## Why It's Good For The Game

runtimes bad, actual logging of important stuff good.

apologies if i screwed up how LOG_VICTIM is meant to be used, but
something is definitely wrong and should be addressed. i'm pretty sure
victim logs are only done in addition to a proper log that gets sent
globally, and this is good just for visibility?
## Changelog
Nothing that players would notice.

* Handles Log_Globally Being True When Log Type is LOG_VICTIM

Co-authored-by: san7890 <the@san7890.com>
2023-01-12 12:15:49 -08:00
YakumoChen
ba5403c3ab Makes department guard gear consistent (#18161)
* makes department guard gear consistent

* forgot cuffs

* does it right this time

* Update security.dm

* Update security.dm
2023-01-12 17:16:01 +00:00
SkyratBot
5a18ff0bbb [MIRROR] Completely Culls req_access_txt/req_one_access_txt [MDB IGNORE] (#18458)
* Completely Culls req_access_txt/req_one_access_txt (#72281)

Hey there,

Now that every instance of `req_access` and `req_one_access` is a list
of strings, there is absolutely no reason for
req_access_txt/req_access_one_txt to exist. In fact, any instance where
they were still used in the codebase was very convoluted and was very
broken! Don't worry, I fixed it all out, and life is good.

I also dmdoc the surviving access variables, because those were missing.
I went on the side of caution and made a more verbose documentation with
an example just to have people really grasp this (it took me a while to
actually get it)

I believe that we changed _everything_ over to the
req_access/req_one_access system earlier this year in VV, but the
problem is that _new mappers don't understand the difference between the
two systems_. In fact, the "txt" system is completely redundant since
all it does is transition stuff to the "base" system. So, let's just
completely cull the one that's all but deprecated and ensure this
confusion no longer arises. The whole purpose of "txt" seemed to be to
convert the access, but it's all pointless now that we can just read the
list directly.

I'm also 99% certain that the "access check" on vending machines broke
(and didn't seem to have correct logic in the first place? I
legitimately couldn't find a case where it could fail in testing, so I
changed that up), and that's fixed up now. Let me know if I was clueless
there. I know it's short-circuiting now as opposed to "all must be
true", but it just didn't work.

* Completely Culls req_access_txt/req_one_access_txt

* oh the misery

* makes them use the thing that actually works

* test to see if engineering access is breaking it

* Revert "test to see if engineering access is breaking it"

This reverts commit 3cc2c554ff18f435a51601782e64c76193298db7.

* Fix access checks when req_access is null (#72458)

## About The Pull Request
Fixes #72450 - This seems to be an oversight in some of the access
refactors we've been through recently. When there was an assumption in
`check_access_list()` that `req_access` would always be a list, and that
if it was not something terrible had gone wrong and the door should
default to public access.

With the cleanup of the _txt access vars and the introduction of mapping
access helpers, this assumption is no longer true. `req_access` will be
null when multiple helpers are painted onto the same door, so we need to
handle that properly. Thanks to @MrMelbert for spitting out the attached
fix in mapping general and letting me PR it after testing.

This really needs a suite of unit tests around it. San has helpfully
volunteered to work on that for three hours before getting frustrated.

## Why It's Good For The Game
No more public access to engineering lobby, lathe, etc.


## Changelog
🆑 Vire, MrMelbert
fix: The engineering lobby and lathe are no longer public access
fix: Doors will no longer be treated as public access when they have
multiple accesses set on them
/🆑

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
Co-authored-by: Vire <66576896+Maurukas@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
2023-01-12 11:43:52 -05:00
Zonespace
fa0735b1f6 MIrror #72127 (#18652)
* Food code sweepups + heart boxes have more chocolate variety (#72127)

- Chocolate boxes now contain bonbons (formerly tiny chocolates),
truffles, and peanut butter cups
- Slices of bread now taste like their respective breads instead of
tasting "indescribable"
- Fiesta skewers have food categories now
- Misc food file has had more split out of it into sweets.dm,
vegetables.dm, and packaged.dm
- Removed a bunch of redundant food_reagent code
- Changed the sugar in clown cakes' food_reagents to banana juice
- Increased the amount of vitamin in pound cakes (it's four whole cakes
and the amount of vitamin doesn't go up?)

* modular foods

* Fixes the first merge skew of 2023 (#72414)

https://github.com/tgstation/tgstation/pull/72232

skews with

https://github.com/tgstation/tgstation/pull/72127

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2023-01-12 10:04:20 -05:00
Zonespace
1135ac5e2c Mirror #72280 (#18648)
Add lints for idiomatic balloon alert usage (#72280)

Adds lints for `balloon_alert(span_xxx(...))` (which is always wrong),
and balloon alert where the first letter is a capital (which is usually
wrong). Fixes everything that failed them. As a reminder, abbreviations
like "AI" and "GPS" shouldn't be capitalized in a balloon alert.

In cases where this is intentional for flavor (there was one case), you
can `UNLINT` like so:

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
2023-01-12 08:48:06 -05:00
SkyratBot
bbedb5d2a2 [MIRROR] Headpikes now use proper grammar when referencing their spear type [MDB IGNORE] (#18644)
* Headpikes now use proper grammar when referencing their spear type (#72626)

## About The Pull Request

When creating a name for the headpike structure, the spear name is now
used, rather than just a reference to the spear itself. This led to
funky grammar and ruined immersion etc etc.
## Why It's Good For The Game

Closes #72583.
## Changelog
🆑
spellcheck: Head-spears are now named properly when using alternate
spear types.
/🆑

* Headpikes now use proper grammar when referencing their spear type

Co-authored-by: Rhials <Datguy33456@gmail.com>
2023-01-11 22:30:12 -08:00
SkyratBot
39b446b307 [MIRROR] Fixes a oversight with cummerbund. closes #72357 [MDB IGNORE] (#18451)
Fixes a oversight with cummerbund. closes #72357

Co-authored-by: jughu <melvin2626@live.nl>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-11 22:08:09 -08:00
lessthanthree
280460bab8 [MANUAL MIRROR] [NO GBP] Side mounted tram controls (#18636)
* Side mounted tram controls (#72193)

Continuation of https://github.com/tgstation/tgstation/pull/72047 this
part was left out until it could be done using directional map helpers.
- Side mounts the tram controls freeing up the middle space for
shenanigans or whatever, and you can hit the controls faster from either
side of the tram.
- Emergency exit feature, doors can be forced open when the tram has
lost power.
- Accessible spots for wheelchairs (Ian's injured, you know!)

![image](https://user-images.githubusercontent.com/83487515/210920404-150f394b-4263-45d4-82ef-12eda0cfedb7.png)

- Looks like a tram direction sign instead of an awkward center placed
computer. Build an ice cream or illicit drugs shop or something in the
middle. Frees up space.
- You don't get stuck on an unpowered tram if you don't have a crowbar.
🆑 LT3
imageadd: Tram controls are now side mounted, freeing up space. Even
better, you now have two of them!
imageadd: Added a new accessible space on the tram for wheelchairs
fix: Removed duplicate tram plate/platforms
code: Tram has its own floor subtype for the walls and windows
add: Emergency exit feature added for people who are silly enough to not
carry a crowbar
/🆑

* floors.dmi
2023-01-11 08:14:12 -08:00
SkyratBot
8e5251ea60 [MIRROR] Captain's Spare ID Safe Can Only Hold ID Cards [MDB IGNORE] (#18631)
* Captain's Spare ID Safe Can Only Hold ID Cards (#72584)

## About The Pull Request

I've personally seen this strategy play out the exact same way on more
than one occasion in an higher frequency lately (I've never played as
either side, just witnessed it)- and it always just seems to be an abuse
of a skewed in-game mechanic. So, this PR makes it so that you can only
put IDs into the spare ID safe. Nothing else.
## Why It's Good For The Game

I think this balance change is needed because it really sort of ruins
what I like about nuclear operatives, having to run around and stay
fluid for whatever the nuclear operatives could have, not "HAHA WE WILL
PUT IT IN OUR (NEARLY) IMPENETRABLE SAFE THAT THEY WILL NEED TO USE A C4
DIRECTLY ON AND JUST END UP PLAYING BLOONS TOWER DEFENSE SIX AS WE AWAIT
THOSE RED FUCKS TO ARRIVE". I miss when it would be fun to inject it
into a monkey who could crawl around vents, put it in a disposals loop
around the station to keep the nukies on a wild goose chase, or just
holding your ground in the brig and retreating if they batter you down.
It's just a very OP location in a very OP place with lots of warranted
OP armor for it's intended use case, which is not really being followed
by putting the all-important disk in the safe.

It's just very strong overall due to how protected-from-damage the spare
ID safe is, and I don't really like the fact that this is emerging as a
new "meta gameplay" (even used when there aren't any nuclear
operatives), it just sullies the different variety of ways you can
defend yourself against nuclear operatives when there appears to be
**the clear choice**. I don't like that concept where you can have a
strategy so good that you _shouldn't_ do it.

Also, it's an _ID Safe_. Not a disk safe.
## Changelog
🆑
balance: Due to materials costing a lot more than ever, Nanotrasen's
Spare ID Safe Supplier have cut down on the space inside of the ID Safe,
meaning you can only cram in things as thin as an ID Card.
/🆑

* Captain's Spare ID Safe Can Only Hold ID Cards

Co-authored-by: san7890 <the@san7890.com>
2023-01-10 15:12:27 -08:00
SkyratBot
b44967501c [MIRROR] Optimizes explosions (very slightly) [MDB IGNORE] (#18624)
* Optimizes explosions (very slightly)

* Update explosions.dm

* Update atoms_movable.dm

* Update dungeon.dm

* Update stone.dm

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-10 12:34:26 -08:00
SkyratBot
509b89f45c [MIRROR] Contextual tutorials for swapping hands and dropping items [MDB IGNORE] (#18604)
* Contextual tutorials for swapping hands and dropping items

* Fixes

* Oops

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2023-01-10 14:26:08 +01:00
SkyratBot
be18901411 [MIRROR] [ready] unit tests all worn icons [MDB IGNORE] (#18491)
* [ready] unit tests all worn icons (#72370)

Fixes #71692

🆑 ShizCalev
code: Added a unit test for ALL worn icons.
fix: Fixed a bunch of broken worn icons!
/🆑

* [ready] unit tests all worn icons

* Should have fixed most of the failures now

* Here, hopefully that should fix what was left

* Okay maybe it just hadn't been fixed yet

* I can be a bit dumb sometimes

* Okay, now it's going to work, I promise

* I'm so tired of this

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-01-09 21:10:28 -05:00
SkyratBot
574cc85a3c [MIRROR] you can now flip eyepatches + blindfolds mix eye colors [MDB IGNORE] (#18152)
* you can now flip eyepatches + blindfolds mix eye colors

* Fixes our eye-swapping stuff for the most part (I didn't gut out everything yet, but it's functional)

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-01-09 15:10:08 -05:00
SkyratBot
8e8002b555 [MIRROR] Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars [MDB IGNORE] (#18348)
* Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars

* merge conflicts

* adjust_eye_blur and set_eye_blur_if_lower

* adjust drowsiness overdoses

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 13:14:47 -05:00
SkyratBot
ae3b1e78a4 [MIRROR] Dogs become tamed when given bones [MDB IGNORE] (#18549)
* Dogs become tamed when given bones

* skew

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 08:38:01 -05:00
SkyratBot
36bc850a11 [MIRROR] fixes silly stuff about basic mobs [MDB IGNORE] (#18368)
* fixes silly stuff about basic mobs

* merge conflicts, also apply upstream 72120

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 06:00:48 -05:00
SkyratBot
7ee524f748 [MIRROR] Basic Mob Carp Part VIII: Basic Mob Carp [MDB IGNORE] (#18344)
* Basic Mob Carp Part VIII: Basic Mob Carp

* maps

* missed killing main carp file

* shorki and ocean biomes

* shorki 2: pet-a-boogaloo

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-09 05:48:50 -05:00
SkyratBot
980ee4354e [MIRROR] Replaces a mapped in varedited thing with a subtype [MDB IGNORE] (#18601)
* Replaces a mapped in varedited thing with a subtype (#72521)

## About The Pull Request

Replaces a mapped in VV'd thing with a subtype

Makes it easier to not break maps

## Why It's Good For The Game

VV'd reagents list? For real?

## Changelog

Not necessary

* Replaces a mapped in varedited thing with a subtype

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2023-01-08 22:51:22 -08:00
SkyratBot
3af3989a89 [MIRROR] Makes biological states for wounding limb based, not species based [MDB IGNORE] (#18257)
Makes biological states for wounding limb based, not species based (#71745)

I noticed something pretty terrible when playing around with some humans
locally.
As it turns out, limbs did not preserve their biological state when
amputated - This meant that a skeleton limb on a normal human, still
behaved as if it had a bunch of flesh and veins on it.
I didn't like that, and it seems like an oversight, so I decoupled the
biological state from the species and made it limb based.

What does this mean?
Skeleton limbs on a human will not bleed, but will still break (and be
more prone to breaking)
Human limbs on a skeleton will not bleed, however they will get cuts and
pierces that will not clot and need to be treated to go away - These
limbs will have the same requirements for dismemberment on a skeleton as
they have on a human.

This makes limbs behave according to how they look instead of causing
mild confusion.

🆑 Big chungus wholesome 100
fix: Amputated and reattached limbs now get wounded based on their own
biology, not the current owner's biology.
/🆑

Co-authored-by: ChungusGamer666 <82850673+ChungusGamer666@users.noreply.github.com>
2023-01-09 17:24:08 +13:00
SkyratBot
ae713bf18a [MIRROR] Crafting/Cooking menu update [MDB IGNORE] (#18334)
* Crafting/Cooking menu update

* Yeeted away all of the merge conflicts, time to fix the code

* Okay, now it compiles, and after testing, it seems to work just fine

* Actually, early addition of an upstream fix, so those that don't have hunger can still open the cooking menu

* Fixes the units tests by removing the extra comma in the Stuffed Muli Pod recipe

Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
2023-01-08 15:02:18 -05:00
SkyratBot
b526c7265b [MIRROR] Hologram Projectors for TGC! [MDB IGNORE] (#18570)
* Hologram Projectors for TGC! (#72226)

## About The Pull Request

Adds a new holodeck layout that features a TGC card fighting arena,
complete with holographic representations of your cards. Cards act the
same as physical cards when displayed except you can see the stats of
the cards without needing to inspect and the cards stats can be modified
on the fly for keeping track of equipment.
Example:

![image](https://user-images.githubusercontent.com/40036527/209706941-b6def501-12f3-4ba6-8700-3b4b8ffd7c8f.png)
## Why It's Good For The Game

TGC is a significantly more complicated game then the other ones we have
like UNO and CAS and is extremely messy to play on a table ingame, this
provides a much clearer way of visualizing the game by having all active
creature stats on full display at all times without having to rely on
inspecting cards to check.
## Changelog
🆑
add: Introducing a new holodeck map, the TGC Arena, featuring hologram
projectors for your trading cards.
fix: Janitor and Intern TGC cards are now considered creatures rather
than just humans.
balance: The price of card packs has been reduced from double a paycheck
to 3 quarters of one.
balance: The number of cards available in the good clean fun vendor has
been doubled.
/🆑

* Hologram Projectors for TGC!

Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
2023-01-07 22:36:40 -08:00
SkyratBot
31b8a6eef1 [MIRROR] Tram collision counter hazard lights [MDB IGNORE] (#18579)
* Tram collision counter hazard lights (#72406)

## About The Pull Request
To the best of Nanotrasen's ability, valuable crew members are still
getting hit by the tram. To further encourage safe practices, a new
indicator with hazard lights has been installed outside medbay. It will
flash when tram collisions are occurring during times of lax safety for
extra visibility.

![counterflash](https://user-images.githubusercontent.com/83487515/210483631-5443b4a2-57cf-4b27-8464-53855b59b2ca.gif)

## Why It's Good For The Game
Go for the high score.
## Changelog
🆑 LT3
imageadd: Hazard lights added to the tram collision counter
/🆑

* Tram collision counter hazard lights

Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
2023-01-07 22:34:07 -08:00
SkyratBot
011fefdd81 [MIRROR] Refactors armor into dedicated subtypes [MDB IGNORE] (#18291)
* Refactors armor into dedicated subtypes

* start

* most tg things

* pain (#18584)

* shit

* non-mod changes

* compile

Co-authored-by: John Doe <gamingskeleton3@gmail.com>

* #18291

* compile fix

* ???

Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-07 20:06:16 -08:00
SkyratBot
002ab78d9b [MIRROR] useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init) [MDB IGNORE] (#18243)
* useless update_appearance reduction, emissive_blocker micro optimization (saves a second of init)

* merge conflict

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-07 18:45:54 -05:00
SkyratBot
537837bef3 [MIRROR] Fixes being able to instantly create dense grilles [MDB IGNORE] (#18569)
* Fixes being able to instantly create dense grilles (#72449)

🆑
fix: Fixes being able to instantly create dense grilles
/🆑

Co-authored-by: tattle <66640614+dragomagol@ users.noreply.github.com>

* Fixes being able to instantly create dense grilles

Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: tattle <66640614+dragomagol@ users.noreply.github.com>
2023-01-07 08:28:28 -08:00
SkyratBot
39f62d3917 [MIRROR] adds contextual screentip for stealing access with the agent id [MDB IGNORE] (#18566)
* adds contextual screentip for stealing access with the agent id (#72472)

the agent id or chameleon id has a good feature that lets you steal
accesses from other people but often people are a bit confused on how,
so i've added a item_context screentip that means that when you hover
over someone while holding the agent id it will let you know that you
can steal accesses with a right mouse button input

similarly, i've added one for when it hovers over any item that says
"scan for access" because checking to see if it is an object with an ID
inside of it every single time that you hover over any item seems
expensive.

* adds contextual screentip for stealing access with the agent id

Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
2023-01-07 08:27:08 -08:00
SkyratBot
80d1906bd1 [MIRROR] Basic Mobs can run away [MDB IGNORE] (#18196)
* Basic Mobs can run away (#71963)

## About The Pull Request

That's right I'm still atomising #71421, some day I might even post
something related to carp.
This PR adds various behaviours to basic mobs allowing them to run away,
in a couple of variations.

Mice will flee from anyone who doesn't share their factions, at all
times (so they will scatter from most humans, but not regal rats).
Rabbits and Sheep will flee from anyone who has attacked them.
Pigs will run away from people who have attacked them, but only if
they're below half health.

https://user-images.githubusercontent.com/7483112/207127135-d1737f91-d3f7-468a-ac60-7c7ae5d6623d.mp4

Mice are still plenty catchable because they don't run _very far_ (or
very fast) but I think the chase will be good enrichment.

To achieve this I had to change the signal COMSIG_CARBON_HEALTH_UPDATE
into COMSIG_LIVING_HEALTH_UPDATE but frankly the latter seems more
sensible anyway.

## Why It's Good For The Game

More behaviours to use later when designing mobs, gradually gives mobs
more things to do rather than just sort of moving aimlessly around the
area you left them in.
It'll give people hunting rats in maintenance some exercise.

## Changelog

🆑
add: Mice will now run away from you, you have to catch them if you want
to eat them. Use those traps!
add: Rabbits, Sheep, and Pigs likewise won't just sit there and let you
pulverise them if they can see an escape route.
/🆑

* Basic Mobs can run away

* Modular!

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
2023-01-07 23:51:47 +13:00
SkyratBot
2b9eba0fe0 [MIRROR] Smoothing groups optimization, save 265ms with configs, more on production & w/ space ruins [MDB IGNORE] (#18189)
* Smoothing groups optimization, save 265ms with configs, more on production & w/ space ruins (#71989)

This one is fun.

On every /turf/Initialize and /atom/Initialize, we try to set
`smoothing_groups` and `canSmoothWith` to a cached list of bitfields. At
the type level, these are specified as lists of IDs, which are then
`Join`ed in Initialize, and retrieved from the cache (or built from
there).

The problem is that the cache only misses about 60 times, but the cache
hits more than a hundred thousand times. This means we eat the cost of
`Join` (which is very very slow, because strings + BYOND), as well as
the preliminary `length` checks, for every single atom.

Furthermore, as you might remember, if you have any list variable set on
a type, it'll create a hidden `(init)` proc to create the list. On
turfs, that costs us about 60ms.

This PR does a cool trick where we can completely eliminate the `Join`
*and* the lists at the cost of a little more work when building the
cache.

The trick is that we replace the current type definitions with this:

```patch
- smoothing_groups = list(SMOOTH_GROUP_TURF_OPEN, SMOOTH_GROUP_FLOOR_ASH)
- canSmoothWith = list(SMOOTH_GROUP_FLOOR_ASH, SMOOTH_GROUP_CLOSED_TURFS)
+ smoothing_groups = SMOOTH_GROUP_TURF_OPEN + SMOOTH_GROUP_FLOOR_ASH
+ canSmoothWith = SMOOTH_GROUP_FLOOR_ASH + SMOOTH_GROUP_CLOSED_TURFS
```

These defines, instead of being numbers, are now segments of a string,
delimited by commas.

For instance, if ASH used to be 13, and CLOSED_TURFS used to be 37, this
used to equal `list(13, 37)`. Now, it equals `"13,37,"`.

Then, when the cache misses, we take that string, and treat it as part
of a JSON list, and decode it from there. Meaning:

```java
// Starting value
"13,37,"

// We have a trailing comma, so add a dummy value
"13,37,0"

// Make it an array
"[13,37,0]"

// Decode
list(13, 37, 0)

// Chop off the dummy value
list(13, 37) // Done!
```

This on its own eliminates 265ms *without space ruins*, with the
combined savings of turf/Initialize, atom/Initialize, and the hidden
(init) procs that no longer exist.

Furthermore, there's some other fun stuff we gain from this approach
emergently.

We previously had a difference between `S_TURF` and `S_OBJ`. The idea is
that if you have any smoothing groups with `S_OBJ`, then you will gain
the `SMOOTH_OBJ` bitflag (though note to self, I need to check that the
cost of adding this is actually worth it). This is achieved by the fact
that `S_OBJ` simply takes the last turf, and adds onto that, meaning
that if the biggest value in the sorting groups is greater than that,
then we know we're going to be smoothing to objects.

This new method provides a limitation here. BYOND has no way of
converting a number to a string at compile time, meaning that we can't
evaluate `MAX_S_TURF + offset` into a string. Instead, in order to
preserve the nice UX, `S_OBJ` now instead opts to make the numbers
negative. This means that what used to be something like:

```dm
smoothing_groups = list(SMOOTH_GROUP_ALIEN_RESIN, SMOOTH_GROUP_ALIEN_WEEDS)
```

...which may have been represented as

```dm
smoothing_groups = list(15, MAX_S_TURF + 3)
```

...will now become, at compile time:

```dm
smoothing_groups = "15,-3,"
```

Except! Because we guarantee smoothing groups are sorted through unit
testing, this is actually going to look like:

```dm
smoothing_groups = "-3,15,"
```

Meaning that we can now check if we're smoothing with objects just by
checking if `smoothing_groups[1] == "-"`, as that's the only way that is
possible. Neat!

Furthermore, though much simpler, what used to be `if
(length(smoothing_groups))` (and canSmoothWith) on every single
atom/Initialize and turf/Initialize can now be `if (smoothing_groups)`,
since empty strings are falsy. `length` is about 15% slower than doing
nothing, so in procs as hot as this, this gives some nice gains just on
its own.

For developers, very little changes. Instead of using `list`, you now
use `+`. The order might change, as `S_OBJ` now needs to come first, but
unit tests will catch you if you mess up. Also, you will notice that all
`S_OBJ` have been increased by one. This is because we used to have
`S_TURF(0)` and `S_OBJ(0)`, but with this new trick, -0 == 0, and so
they conflicted and needed to be changed.

* Sorting how did I miss it

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
2023-01-07 23:51:36 +13:00
SkyratBot
bccf824a6c [MIRROR] Turned most syndicate mobs (+ viscerators) into basicmobs [MDB IGNORE] (#18270)
* Turned most syndicate mobs (+ viscerators) into basicmobs (#71871)

## About The Pull Request
Turns the syndicate simpleanimals into basicmobs: (+ stormtrooper, +
space variants) Base Mob, Knife syndies, pistol syndies, SMG
syndies,shotgun syndies, viscerators
also changes some instances of the simple_animal path into the basicmob
ones
Removes civillian syndicates which were useless and also completely
unused
Also removes mech pilots:
![2022-12-09
20_02_18-Window](https://user-images.githubusercontent.com/70376633/206777829-2e49e445-3532-4e8e-8e7c-8d9b0a3a14d0.png)

Also,
makes the basic targetting datums health check configurable
basic attack behavior can now fire in bursts

https://user-images.githubusercontent.com/70376633/206766607-cf2e3659-0c5e-4117-9af7-e573e35bdf80.mp4

https://user-images.githubusercontent.com/70376633/206766630-15b4469f-68be-44c7-9394-1f2b6fe07811.mp4

https://user-images.githubusercontent.com/70376633/206766613-69b42457-a03b-449d-a1b8-a5aa556c76e5.mp4

https://user-images.githubusercontent.com/70376633/206766619-5560a178-8d2f-4b22-adf1-22ace6f63a51.mp4

https://user-images.githubusercontent.com/70376633/206766627-e671d064-fd9e-4204-b823-aa2e07f7fc26.mp4

https://user-images.githubusercontent.com/70376633/206766633-108c1574-3554-4bc1-a9ac-8faed0ec4062.mp4
## Why It's Good For The Game

simpleanimal stinks basic mob good
syndicate AI was really bad to begin with so here we are

## Changelog
🆑
code: Turned most syndicate mobs into basicmobs, making their AI better
and (possibly) more deadlier!
del: Removed syndicate mech pilots and syndicate civvies
/🆑

Co-authored-by: kawoppi <94711066+kawoppi@ users.noreply.github.com>

* Turned most syndicate mobs (+ viscerators) into basicmobs

* map

* code

* Update syndibase.dmm

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: kawoppi <94711066+kawoppi@ users.noreply.github.com>
Co-authored-by: John Doe <gamingskeleton3@gmail.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
2023-01-07 02:48:07 -05:00
SkyratBot
650d64f6d4 [MIRROR] afterattack now returns a flag if it's reasonable to suspect the user intends to act on an item [MDB IGNORE] (#18519)
* afterattack now returns a flag if it's reasonable to suspect the user intends to act on an item

* Update _neck.dm

Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-07 06:55:38 +00:00
SkyratBot
b80abedb59 [MIRROR] refreshes syndi-kits and syndicate surplus crates, introduces shared limited stock [MDB IGNORE] (#18209)
* refreshes syndi-kits and syndicate surplus crates, introduces shared limited stock

* merge conflict

* Surplus balance, Consolidated our surplus crate and the new tg one to just use our stats

* use upstream surplus loot crates

* syndicrate

Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-07 01:42:14 -05:00
SkyratBot
6ce3f3857f [MIRROR] removes extra turtleneck from research directors garment bag [MDB IGNORE] (#18212)
* removes extra turtleneck from research directors garment bag

* Update garment.dm

Co-authored-by: Sol N <116288367+flowercuco@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
2023-01-07 00:48:23 -05:00
SkyratBot
a878c3cc73 [MIRROR] Fixes dual wielding bypassing wizard checks [MDB IGNORE] (#18562)
* Fixes dual wielding bypassing wizard checks (#72431)

Fixes #72428

🆑 ShizCalev
fix: Non-magic inclined mobs will no longer fire staffs while duel
wielding.
/🆑

* Fixes dual wielding bypassing wizard checks

Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
2023-01-06 21:02:53 -08:00
SkyratBot
ba6ac2d897 [MIRROR] xenos can hold xeno toys [MDB IGNORE] (#18543) 2023-01-06 18:58:10 -08:00
SkyratBot
f1ceee89dd [MIRROR] QM has a garment bag now [MDB IGNORE] (#18258)
* QM has a garment bag now

* Update garment.dm

Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
2023-01-06 17:32:12 +00:00
SkyratBot
d2cac47fba [MIRROR] Alien closets deconstruct into alien alloy [MDB IGNORE] (#18522)
* Alien closets deconstruct into alien alloy (#72452)

## About The Pull Request
The other day I found a rare alien locker in maint, hooray!
Deconstructed it to get the alloy, and was instead met with iron. Booo.
## Why It's Good For The Game
Alien lockers should deconstruct into the mineral used to craft them.
## Changelog
🆑 Tattle
fix: alien closets now deconstruct into alien alloy
/🆑

Co-authored-by: tattle <article.disaster@ gmail.com>

* Alien closets deconstruct into alien alloy

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@ gmail.com>
2023-01-06 08:29:48 -08:00
SkyratBot
bd92e328ec [MIRROR] Restore Advanced Mop in-hands sprite [MDB IGNORE] (#18531)
* Restore Advanced Mop in-hands sprite (#72478)

fix: Fixed the advanced mop displaying as a normal mop when held

* Restore Advanced Mop in-hands sprite

Co-authored-by: Darius <5933805+LeDrascol@users.noreply.github.com>
2023-01-06 08:29:13 -08:00