Commit Graph
155 Commits
Author SHA1 Message Date
The SharkeningandGitHub b8450f5c04 Revert "Lone operative can't spawn below 30 players" (#4775)
Reverts Bubberstation/Bubberstation#4760

This was merged way too quickly in like 2 hours. So I'm going to revert
it. I am also reopening #4753 which should be merged after this revert
is merged.

🆑 
del: Reverts the 30 pop minimum for Lone Operative
/🆑
2025-10-03 13:09:28 -06:00
ReturnandGitHub 3098364eb5 Lone operative can't spawn below 30 players (#4760)
## About The Pull Request
This prevents Lone Operative from spawning on extreme lowpop
## Why It's Good For The Game
Prevents lowpop players being punished for the NAD overall
## Proof Of Testing
Compiles, currently testing

</details>

## Changelog
🆑 ReturnToZender
add: Lone operatives can no longer spawn below 30 players.
/🆑
2025-09-30 04:26:35 +02:00
MrMelbertandRoxy e0bdfc3f5f Dynamic Rework (#91290)
Implements https://hackmd.io/@tgstation/SkeUS7lSp , rewriting Dynamic
from the ground-up

- Dynamic configuration is now vastly streamlined, making it far far far
easier to understand and edit

- Threat is gone entirely; round chaos is now determined by dynamic
tiers
   - There's 5 dynamic tiers, 0 to 4.
      - 0 is a pure greenshift.
- Tiers are just picked via weight - "16% chance of getting a high chaos
round".
- Tiers have min pop ranges. "Tier 4 (high chaos) requires 25 pop to be
selected".
- Tier determines how much of every ruleset is picked. "Tier 4 (High
Chaos) will pick 3-4 roundstart[1], 1-2 light, 1-2 heavy, and 2-3
latejoins".
- The number of rulesets picked depends on how many people are in the
server - this is also configurable[2]. As an example, a tier that
demands "1-3" rulesets will not spawn 3 rulesets if population <= 40 and
will not spawn 2 rulesets if population <= 25.
- Tiers also determine time before light, heavy, and latejoin rulesets
are picked, as well as the cooldown range between spawns. More chaotic
tiers may send midrounds sooner or wait less time between sending them.

- On the ruleset side of things, "requirements", "scaling", and
"enemies" is gone.
- You can configure a ruleset's min pop and weight flat, or per tier.
- For example a ruleset like Obsession is weighted higher for tiers 1-2
and lower for tiers 3-4.
- Rather than scaling up, roundstart rulesets can just be selected
multiple times.
- Rulesets also have `min_antag_cap` and `max_antag_cap`.
`min_antag_cap` determines how many candidates are needed for it to run,
and `max_antag_cap` determines how many candidates are selected.

- Rulesets attempt to run every 2.5 minutes. [3]

- Light rulesets will ALWAYS be picked before heavy rulesets. [4]

- Light injection chance is no longer 100%, heavy injection chance
formula has been simplified.
- Chance simply scales based on number of dead players / total number
off players, with a flag 50% chance if no antags exist. [5]

[1] This does not guarantee you will actually GET 3-4 roundstart
rulesets. If a roundstart ruleset is picked, and it ends up being unable
to execute (such as "not enough candidates", that slot is effectively a
wash.) This might be revisited.

[2] Currently, this is a hard limit - below X pop, you WILL get a
quarter or a half of the rulesets. This might be revisited to just be
weighted - you are just MORE LIKELY to get a quarter or a half.

[3] Little worried about accidentally frontloading everything so we'll
see about this

[4] This may be revisited but in most contexts it seems sensible.

[5] This may also be revisited, I'm not 100% sure what the best / most
simple way to tackle midround chances is.

Other implementation details

- The process of making rulesets has been streamlined as well. Many
rulesets only amount to a definition and `assign_role`.

- Dynamic.json -> Dynamic.toml

- Dynamic event hijacked was ripped out entirely.
- Most midround antag random events are now dynamic rulesets. Fugitives,
Morphs, Slaughter Demons, etc.
      - The 1 weight slaughter demon event is gone. RIP in peace.
- There is now a hidden midround event that simply adds +1 latejoin, +1
light, or +1 heavy ruleset.

- `mind.special_role` is dead. Minds have a lazylist of special roles
now but it's essentially only used for traitor panel.

- Revs refactored almost entirely. Revs can now exist without a dynamic
ruleset.

- Cult refactored a tiny bit.

- Antag datums cleaned up.

- Pre round setup is less centralized on Dynamic.

- Admins have a whole panel for interfacing with dynamic. It's pretty
slapdash I'm sure someone could make a nicer looking one.

![image](https://github.com/user-attachments/assets/e99ca607-20b0-4d30-ab4a-f602babe7ac7)

![image](https://github.com/user-attachments/assets/470c3c20-c354-4ee6-b63b-a8f36dda4b5c)

- Maybe some other things.

See readme for more info.

Will you see a massive change in how rounds play out? My hunch says
rounds will spawn less rulesets on average, but it's ultimately to how
it's configured

🆑 Melbert
refactor: Dynamic rewritten entirely, report any strange rounds
config: Dynamic config reworked, it's now a TOML file
refactor: Refactored antag roles somewhat, report any oddities
refactor: Refactored Revolution entirely, report any oddities
del: Deleted most midround events that spawn antags - they use dynamic
rulesets now
add: Dynamic rulesets can now be false alarms
add: Adds a random event that gives dynamic the ability to run another
ruleset later
admin: Adds a panel for messing around with dynamic
admin: Adds a panel for chance for every dynamic ruleset to be selected
admin: You can spawn revs without using dynamic now
fix: Nuke team leaders get their fun title back
/🆑

(cherry picked from commit 4c277dc572)
2025-06-26 20:12:17 -04:00
a07183b26f fix abductors getting prefs applied (#3826)
## About The Pull Request
fix abductors getting prefs applied, it is very jank.
Could have made it respect abductor species prefs but ehh nah.
## Why It's Good For The Game
it looks awful it's really bad for abductors.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
fix: abductors no longer look janky because their pref's applied. Sorry.
/🆑

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2025-05-16 02:30:02 -04:00
+3 77616e8b0e Add Proteans to the game. (#3449)
## About The Pull Request

Adds the funny nanite blob dudes from Vigro code into the game. It's
more of a port of the idea since they're coded from the ground up. They
will be more of a utility focused species then a combat focused species.
**They are fragile.**

- Eats metal. You need metal to live and you need metal to heal. 
- Healed by materials. You feed Proteans metal to heal them.
- Difficult to kill, but extremely fragile. They are considered a
deathless species but they are stuck in their suit if they die. **You
have to order a new refactory from cargo to revive them**

**Order Refactory > Screwdriver suit > Insert refactory > Wait 5
minutes.**

- Easily dismembered. They have 30 seconds to recover their limbs and
pop them on or they will melt into nothingness. Can do a lengthy heal
which replaces missing limbs and easy to replace organs.
- Without a refactory, you will wither away.
- Without an orchastrator, you will have a lot of issues moving.
- You can lock your suit on someone. (OOC escape will work)
- You can assimilate modsuits.

- [x] OOC escape
- [x] Suit Transformation fixes
- [x] Modsuit Assimilation
- [x] Ensure organs are working
- [x] Species info and lore
- [x] Antag Proteans
- [x] Custom damage. Disable various surgeries.
- [x] Testing, polish, feedback.
- [x] Runtime and CI fixing.
- [ ] Live testing and balance.

## Why It's Good For The Game

This was the second to top vote on species people wanted to see added
and this is more custom mechanics then what is just a human reskin.

## Proof Of Testing


![NVIDIA_Overlay_bC6M2FThJP](https://github.com/user-attachments/assets/cb8c8594-f82c-408b-a9a1-e86a61bf8a0f)


![NVIDIA_Overlay_dbhHrYltOH](https://github.com/user-attachments/assets/cb643365-5512-465f-8582-337e24211b9f)

## Changelog

🆑 StrangeWeirdKitten, Majkl-J
add: New species: Proteans
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
Co-authored-by: Bubberbot <151680451+Bubberbot@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: aKromatopzia <94389683+aKromatopzia@users.noreply.github.com>
Co-authored-by: Jinshee <96621959+Jinshee@users.noreply.github.com>
Co-authored-by: Jinshee <manastra2536@gmail.com>
Co-authored-by: JustMeTheIInd <145101584+JustMeTheIInd@users.noreply.github.com>
Co-authored-by: nevimer <77420409+nevimer@users.noreply.github.com>
Co-authored-by: Odairu <39929315+Odairu@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2025-05-13 15:05:46 -04:00
Kapu1178andRoxy b9c803a9d8 Base implementation of /datum/persistent_client (#89449)
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).

Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.

Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
2025-03-12 16:47:54 -04:00
Majkl-J b6b8306fda Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-25-02a 2025-02-20 00:00:19 -08:00
940e2d31cf tgstation is back online and you are a horrible goose (#89204)
## About The Pull Request

Converts geese to basic mobs.
Nobody else did this one because two separate other developers have said
they started and then examining what the goose does made them feel
mildly ill, but I am stronger.

I will admit though I wasn't 100% committed to making it work exactly
the same way, I rewrote the entire system to use interfaces I like more
(read: I put all this shit in a status effect which means any mob can be
given the ability to vomit out everything in its contents) and if that
means the behaviour is only "inspired by" that didn't bother me that
much.

**Geese:**
- Wander randomly around.
- Peck people who attack them.
- Occasionally start pecking other nearby animals for absolutely no
reason.
- Eat any food they randomly wander within one tile of, but don't seek
it out further than that.
- Eat anything made of plastic that they randomly wander within one tile
of.
- Choke to death over 30 seconds if they eat anything made of plastic.
- Vomit out whatever it was that they choked on when they die.
- Honk (this is new).

The more famous subtype of goose is Birdboat. Birdboat is a unique goose
present on several maps with some additional behaviour.

**Birdboat:**
- Is chill and doesn't start pecking people for no reason.
- Is occasionally possessed by ghosts.
- Builds up an internal vomit-meter as he eats things. Moving around and
just sort of generally hanging will start rolling dice to find out when
Birdboat's tummy gets upset.
- May start vomiting instead of choking to death on plastic, thereby
saving his own life.
- Vomits out everything that he just ate while running around, making a
mess of the floor.
- Starts eating everything he just vomited out again.

Unlike regular geese who just eat your food and it's gone, Birdboat's
miraculous digestion preserves all of the food he eats so if he consumes
the entire kitchen counter it will eventually come back out again the
way it went in. Although you might not want to eat it any more.

The precise way in which this manifests may be slightly different, but
largely this is also what these animals did before.

Other stuff:

I noticed a bunch of find/set behaviours were not setting a search
range? I think that means they were never finding anything?
I did not actually test any of them to see if they were broken, but it's
possible that a bunch of broken AI behaviours like "climbing trees" may
now actually start triggering because they have a search radius greater
than an orange of 0.

I added "keep this in contents instead of deleting it" as a parameter
for generic eating and slapped it on the goldgrub, as it is used in two
places and may end up being used in more.

## Why It's Good For The Game

This kills off the last user of the `retaliate` subtype and makes our
list so so much closer to finish.
It's like... a couple of bots, a handful of oddballs (I'll probably
handle these soon), and then just the mining bosses and minibosses to
go.

If you give a human the vomit goose ability (now that I made it work on
any mob) they will eject all their organs and body parts via the mouth
until they die, if you don't do the brain or heart first you can vomit
your own head off.

## Changelog

🆑
refactor: Geese have been moved to the basic mob subsystem, please
report any unusual behaviour.
/🆑

---------

Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
2025-01-27 14:54:34 +02:00
d5daa9c9b8 [NO GBP] Renames mob/camera to mob/eye and makes everything follow suit (#87684)
## Why It's Good For The Game

Clarity and consistency regarding DM's systems. 
Internally, `eye` is used for anything that controls the client's view.

![image](https://github.com/user-attachments/assets/7d1291e1-7a6a-4736-a14b-97834e89846f)
How `eye` is used in DM is consistent with how we use the term, so I
figured this would add clarity.

Being named mob/camera also makes it unclear exactly what it's doing.
The name implies that it would function similar to how mob/camera/ai_eye
does, but most of the time it's only used as... an eye.

My ulterior reason for this PR is that I want to clean up
mob/camera/ai_eye and it's subtypes after this.
## Changelog

🆑
server: mob/camera has been renamed to mob/eye, which may break
downstreams
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-11-09 10:57:45 +00:00
Majkl-J e59d8ba64b Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b 2024-10-23 23:27:16 -07:00
SmArtKarandGitHub d4ac95a0e1 Nobody expects the span inquisition: replaces most <span>s with macros (#86798)
## About The Pull Request
123 changed files and multiple crashes after writing broken regex, I
replaced most remains of direct spans with macros. This cleans up the
code and makes it easier to work with in general, see justification for
the original PR. I also fixed a bunch of broken and/or unclosed spans
here too.
I intentionally avoided replacing spans with multiple classes (in most
cases) and spans in the middle of strings as it would impact readability
(in my opinion at least) and could be done later if required.

## Why It's Good For The Game

Cleaner code, actually using our macros, fixes borked HTML in some
places. See original PR.

## Changelog
Nothing player-facing
2024-09-26 19:36:13 +00:00
grungussussandGitHub 58501dce77 Reorganizes the sound folder (#86726)
## About The Pull Request

<details>

- renamed ai folder to announcer

-- announcer --
- moved vox_fem to announcer
- moved approachingTG to announcer

- separated the ambience folder into ambience and instrumental
-- ambience --

- created holy folder moved all related sounds there
- created engineering folder and moved all related sounds there
- created security folder and moved ambidet there
- created general folder and moved ambigen there
- created icemoon folder and moved all icebox-related ambience there
- created medical folder and moved all medbay-related ambi there
- created ruin folder and moves all ruins ambi there
- created beach folder and moved seag and shore there
- created lavaland folder and moved related ambi there
- created aurora_caelus folder and placed its ambi there
- created misc folder and moved the rest of the files that don't have a
specific category into it

-- instrumental --

- moved traitor folder here
- created lobby_music folder and placed our songs there (title0 not used
anywhere? - server-side modification?)

-- items --

- moved secdeath to hailer
- moved surgery to handling

-- effects --

- moved chemistry into effects
- moved hallucinations into effects
- moved health into effects
- moved magic into effects

-- vehicles --

- moved mecha into vehicles


created mobs folder

-- mobs --

- moved creatures folder into mobs
- moved voice into mobs

renamed creatures to non-humanoids
renamed voice to humanoids

-- non-humanoids--

created cyborg folder
created hiss folder
moved harmalarm.ogg to cyborg

-- humanoids --




-- misc --

moved ghostwhisper to misc
moved insane_low_laugh to misc

I give up trying to document this.

</details>

- [X] ambience
- [x] announcer
- [x] effects
- [X] instrumental
- [x] items
- [x] machines
- [x] misc 
- [X] mobs
- [X] runtime
- [X] vehicles

- [ ] attributions

## Why It's Good For The Game

This folder is so disorganized that it's vomit inducing, will make it
easier to find and add new sounds, providng a minor structure to the
sound folder.

## Changelog
🆑 grungussuss
refactor: the sound folder in the source code has been reorganized,
please report any oddities with sounds playing or not playing
server: lobby music has been repathed to sound/music/lobby_music
/🆑
2024-09-23 22:24:50 -07:00
TimberpoesandGitHub 6808a082eb Assorted changes to job assignment code and logging. Runtime free, guaranteed or your money back. Price: $£0. (#85947)
## About The Previous Pull Request

#85308 reverted by #85929


![image](https://github.com/user-attachments/assets/e7518dcb-a60a-4bf1-a3d4-a5a8966d8633)

~~Causes the round to not start when a player isn't eligible for any
jobs at a specific priority level due to runtimes trying to `pick()`
from an empty list aborting the entire job assignment stack.~~
(Fixed???? by
https://github.com/tgstation/tgstation/pull/85947/commits/e0e9f2f430079d4ab7097abe12e75f934131a638)

Maybe we should test merge this for a mo just to make sure no more
cheeky runtimes pop up before merging.

## About The Pull Request

This PR does a couple of minor things:
Makes the job debug logging a bit easier to follow.
Minorly brings some SSjob code up to code standards, converting proc
names to snake_case and doing some otherm is cleanup.
Refactored some stuff into different procs, updated some comments.

And some major things:
Changes the job assignment logic.
Old behaviour
> Assign dynamic priority roles
> Force one Head of Staff (if possible)
> Assign all AIs
> Assign overflow roles (bugged in 2 ways)
> Shuffle the available jobs list once, at the start of the random job
assignment loop
> Pick and assign random jobs for random players from High prefs down,
with a priority on Head of Staff roles
> Handle everyone that couldn't be assigned a random job

New behaviour
> Assign dynamic priority roles
> Assign all Head of Staff roles to players with High prefs
> If no Head of Staff was made in the above way, force one Head of Staff
(if possible)
> Assign all AIs
> Assign overflow roles (fixed)
> Prioritise and fill unfilled head roles at each job priority pref
level, from High prefs down.
> Build a list of all jobs that each unassigned player could be eligible
for at the above pref level.
> Pick a job from that list at random and assign it to the player.
> Handle everyone that couldn't be assigned a random job.

In reality there should be little impact on overall job assignment, the
code changes read more as semantics. For example, the priority check for
filling Head slots will have the same candidate pool in both old and new
versions, but in the new version we're more clearly saying that Heads
are important and we want to prioritise filling them for the sake of
round progression even though the outcome in new and old is the same.

A key change will lead to an increase in assistants - Overflow fixes.

Currently the code block to do early assignments to the Overflow role
doesn't work - or works but not as you'd expect. The idea was is that
because enabling the Overflow role in the prefs menu is an On/Off toggle
that sets the job to High priority when enabled and prevents any other
High priority pref, players that have the Overflow role enabled will
**always** get it. It's their highest priority job with infinite slots.
So we do a pass right at the start to give everyone with the Overflow
role enabled that role and save us wasting time later on in random job
code giving them that same role but with more work.

The problem is the code for this only assigns the Overflow role to
people with it set to Low priority in their prefs, resulting in log
readouts like:
```
[2024-07-27 09:49:43.469] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:43.469] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Radioprague, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caluan, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caractaser, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Apsua, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: AC1, Candidates: 0
```
Where nobody gets pre-assigned the overflow role because their prefs are
all set to the High priority from being toggled... Except wait a second,
some people have it at Medium priority when it should just be a No
Role/High Priority Role toggle?

And herein we meet a problem. My hypothesis is that traits and stuff
that change the overflow have allowed players to set the "ordinary"
overflow role of Assistant to Medium and/or Low priority.

This still shows as enabled in the prefs menu, but leads to an outcome
where a player with assistant enabled is assigned Cook instead.
```
[2024-07-27 09:49:47.775] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:47.775] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
...
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
...
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
```

So players with the Overflow job pref set to Low (an unexpected state,
should be disabled or High) would be guaranteed to get that role if none
of the higher priority Head of Staff/AI/Dynamic roles took over via the
bugged "force overflow for people with the pref enabled" proc.

Players with the Overflow job pref set to High would be guaranteed to
get that role if none of the higher priority Head of Staff/AI/Dynamic
roles took over via the random job assignment code giving them their
Highest priority role thanks to the infinite job slots of the Overflow.

And players with the Overflow job pref set to Medium (an unexpected
state, should be disabled or High) would get Assistant if the shuffle
step of the available jobs list put Assisstant before any of the other
jobs they had prefs enabled for at Medium that weren't already filled,
otherwise they'd get another random job.

This code is now changed to ignore the priority the player has set when
looking for people to fill the overflow role. As long as it **is**
enabled, the player will get it unless they're forced into a dynamic
ruleset role (AI when malf rolls) or a Head of Staff role due to their
other prefs (they have RD set to med or low, and no other player has a
Head of Staff at high so they get randomly picked and miss the overflow
role).

This will increase the number of assistants in shifts where their pref
state has Assisstant in the bugged Medium priority, but doesn't change
it for bugged Low and not-bugged High/On priority.

On the other side of the coin, we have how the random jobs are picked.
They're kinda not random, and I noticed this reading the logs then
reading the code.

The list of available jobs to pick from is randomly shuffled - but only
**once**. All players pull from a list of jobs in the same order. So you
end up with a log block like this:
```
[2024-07-27 09:49:47.985] DEBUG-JOB: DO pass, Player: Pierow, Level:3, Job:Botanist
[2024-07-27 09:49:47.985] DEBUG-JOB: Running AR, Player: Pierow, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.985] DEBUG-JOB: Player: Pierow is now Rank: Botanist, JCP:0, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: DO pass, Player: Daddos, Level:3, Job:Botanist
[2024-07-27 09:49:47.986] DEBUG-JOB: Running AR, Player: Daddos, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.986] DEBUG-JOB: Player: Daddos is now Rank: Botanist, JCP:1, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: FOC job filled and not overflow, Player: Bebrus2, Job: /datum/job/botanist, Current: 2, Limit: 2
[2024-07-27 09:49:47.987] DEBUG-JOB: FOC player job not enabled, Player: Bebrus2
[2024-07-27 09:49:47.987] DEBUG-JOB: DO pass, Player: Bebrus2, Level:3, Job:Cook
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
[2024-07-27 09:49:47.988] DEBUG-JOB: Player: Bebrus2 is now Rank: Cook, JCP:0, JPL:1
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC player job not enabled, Player: Redwizz
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC job filled and not overflow, Player: Redwizz, Job: /datum/job/cook, Current: 1, Limit: 1
```

The list is shuffled into an order of something like `list("Scientist",
"Botanist", "Cook", "Sec Officer", ...)` then iterated over for each
player. So every random job selection goes:
> "Does Player1 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player2 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player3 have Scientist enabled and at the right priority? No?
Okay, Botanist has no slots left so we'll remove it from the list. Okay,
Cook? Yes? You get cook."
> "Does Player4 have Scientist enabled and at the right priority? No?
Okay, Cook has no slots left so we'll remove it from the list. Okay, Sec
Officer? ..."

This can lead to stacked individual departments if it gets randomly
rolled to the start of the list in the shuffle, and completely empty
departments if they end up at the end.

On high pop shifts this is probably less of an issue. Player prefs add
noise to this and as departments at the front fill up, those at the back
pick up some of the lower pref players.

But have you ever had a shift where there's just like... No fucking sec
even though there's tons of players? The logging (before I made changes
in this PR) was a bit ass, but my hypothesis there is that sec officer
was shuffled right at the end of the random job list, so every other
department was filled up before sec officers were picked.

To mitigate this, I made the list shuffle every single time the game
picks a random available job for the player. This should lead to a more
balanced selection of available jobs by avoiding situations where the
code is biased towards packing some departments by accident.
## Why It's Good For The Game

Overflow fixes mean people who go to their prefs and see the Overflow
Role is On will all have the same experience - They will be the Overflow
role.

More random random job selection should prevent individual departments
having a jobs be stacked when it would have otherwise been possible for
a more balanced selection but the code unintentially biased random
departments to be overstaffed and understaffed each shift.
## Changelog
🆑
fix: Having the Overflow Role set to On will properly ensure you get
that role at a High priority as intended by the game code.
fix: Job selection is now a little bit more random. Fixes an
unintentional bias in random job assignment that could lead to
feast-or-famine for roles where everyone is assigned one job and nobody
is assigned another job.
/🆑
2024-09-13 13:58:35 +02:00
tgstation-ci[bot]GitHubtgstation-ci <179393467+tgstation-ci[bot]@users.noreply.github.com>Jordan DominionGhomsan7890MrMelbert
9a9b428b61 Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
8868a5d1fe and replaying the PRs skipping
#85491.

The following 239 (39 + Wallening Main PR excluded) PRs need to be
replayed (DO NOT EDIT THIS LIST MANUALLY, IT IS USED BY THE BOT TO TRACK
PROGRESS):

  - [x] #85777 - Reverted in 3
  - [x] #85767 - Reverted in 2
  - [x] #85763 - Reverted in c
  - [x] #85762 - Reverted in 2
  - [x] #85760 - Reverted in dbc19df13b033ac8bb5a83fa38c5cf140cf31836
  - [x] #85733 - Reverted in 22f17d057eac71661b86c3f2186489568c130043
  - [x] #85721 - Reverted in 6d90643dbbc90f3d21f2d25dc85dc4d4f706d6a3
  - [x] #85719 - Reverted in c52954648309ad4786238f409cd33142d486190f
  - [x] #85705 - Reverted in 3b5ddabfd5ab2cfec226a643be6e8a8fd656c831
  - [x] #85684 - Reverted in cbc1839625f44ba67bcd5489c3629ef98e31b2d4
  - [x] #85662 - Reverted in 69cac24e236604c262093abea7b9566ecbd092c4
  - [x] #85663 - Reverted in f394c3b1430d346b0598abf19fe511b30c3f4676
  - [x] #85673 - Reverted in 8a9ae0411488c9c779a54c5c41076238c230a304
  - [x] #85718 - Reverted in f8f18d8b626e963b06555f76850702740d5de0c3
  - [x] #85667 - Reverted in a1365766d178b727b6c6b503ad410e9d88d57ddd
  - [x] #85683 - Reverted in 3bdb0207d883de8db6f726d976025517cc6d3cba
  - [x] #85676 - Reverted in 0a5d667b2c8a9a2519af2a4fda8cd39f568e5049
  - [x] #85661 - Reverted in 49fc6bc1815133644d7173aa7914ede6c900218a
  - [x] #85682 - Reverted in b41efe96fd72228b079319ac07c660f4cd974af6
  - [x] #85695 - Reverted in 89a173b136cb0297070cef39c5bc9783b6323f02
  - [x] #85654 - Reverted in 1e4836b5173a40fbeb8755e0fb76ebc8d39fe1e0
  - [x] #85655 - Reverted in b4dde41eebd0422e1ec440b4d8d54229fc9617f4
  - [x] #85634 - Reverted in 0c352fc785762da025a68873438593b508f757d9
  - [x] #85700 - Reverted in 1327cf7fe48d7f4fd227120508f77c831aefa4ca
  - [x] #85633 - Reverted in c71c8c9d43112a1f4c6331bbba546881dcffd59d
  - [x] #85649 - Reverted in 73484337077f616878e63208d9bf2309f0d2e579
  - [x] #85475 - Reverted in 839f700001a57646109e75332d5311fe27bbc957
  - [x] #85467 - Reverted in 6f08421f64d01b13775d146cf7a451f9f38e195a
  - [x] #85472 - Reverted in 63c6a9b04e72e8130df5eeb2861c75f80a97e3de
  - [x] #85300 - Reverted in 7c776034f34ee6a76810c1a3779f169f2430c418
  - [x] #85249 - Reverted in 257d02273751fc1f939f76756f70b614a6e06789
  - [x] #85236 - Reverted in f9f4c444c8fc027dea87d4dbe0ebb8dd6bc67154
  - [x] #85299 - Reverted in f24ddff51dc3fec7145a2e97f057f1b286921db3
  - [x] #85228 - Reverted in cb8c318f7e2183d9f941c582f79e4c8b2503d95c
  - [x] #84910 - Reverted in 2a562ca26d9d13f335c276487f66edaa0d21b3bd
  - [x] #84889 - Reverted in 679da6885b034bcd8843f7f4c855388bce263733
  - [x] #84766 - Reverted in 4035dd7adee74af0fed82c14a8749585b2ab1c96
  - [x] #85607 - Reverted in dc9a0462b4c287cee2d541925f8a9988d18d9d85
  - [x] #85618 - Reverted in 2a06f57c89939dc31e9273ef250bd050cff17ff1
  - [x] #85619 - Reverted in b98661affc90e44c68a58c05e57cdf1dfd094c93
  - [x] #85608 - Reverted in 57a935126233f90255aef0a55dab16524be1faac
  - [x] #85648 - Reverted in ab82c66a95d4fbff86040b421a86cc82dca73009
  - [x] #85692 - Reverted in f04fac92bd3594f12f244bae9ea0c5c300c737fb
  - [x] #85544 - Reverted in 7b1198eb5c700e85ec163e60828c01fac55a9909
  - [x] #85631 - Reverted in 81c04ceb553f9887d59f8edf8b2526ff3807264b
  - [x] #85529 - Reverted in 2a7e2c8e3856d67cdefda0d25803393070a6e996
  - [x] #85525 - Reverted in 6ed2d9f28a9333c705eafd21acf54771b8e4db36
  - [x] #85514 - Reverted in a4fa2aa79d93b69d15e0fb9cb1fb7a5bc288bb34
  - [x] #85520 - Reverted in 6e1bd4b11cd55e36cab332c5a0c90c76a2e43703
  - [x] #85521 - Reverted in 79afdac194da5f42b38fb0fdfc394f2b8d485266
  - [x] #85519 - Reverted in a967cae1fb3feea23fdf196595e496431740f52d
  - [x] #85513 - Reverted in e3934edf8794f93a37dc7f63c60aa64ed7b60736
  - [x] #85498 - Reverted in cf1fadbc54a1365362aaeb142cbbd4e2c3be6f15
  - [x] #85485 - Reverted in 2a650ef9c0454bd650d6a13d10c0cb71bb134b2b
  - [x] #85494 - Reverted in bbb97958010dc0f74cee279fd304a7fcaccb625e
  - [x] #85552 - Reverted in f1780715bd054300e50e9102ad150c76690d4ca1
  - [x] #85724 - Reverted in 6933699cef8b01f9aef989f36ca079680a2777ff
  - [x] #85735 - Reverted in a6564f19226ef3969bec0573b49fa772d6e6df31
  - [x] #85729 - Reverted in f728d121a2f27a3cc7973fc2041df9b7193b796d
  - [x] #85704 - Reverted in 38f5b034a3370eda4657a2a5a6adcf3df6ec280c
  - [x] #85660 - Reverted in 7db39869d37ff5b39574d88ffc872449ab5b457c
  - [x] #85752 - Reverted in 1f2988028b7cccad121fc658d6547d89453703b7
  - [x] #85592 - Reverted in 263cbcfcb54746a9361369d86b44cc3e2d375199
  - [x] #85580 - Reverted in a92d53624198dce844c108b5dbea09cf2a16cd10
  - [x] #85573 - Reverted in a7d51042355798038ced44f64e987261b85e93bc
  - [x] #85534 - Reverted in 31787e7d1ce4fec2ce20776672099bf35486a296
  - [x] #85511 - Reverted in 2567a2eb56cdb7058f89ea298e53197147198d82
  - [x] #85508 - Reverted in 69de2ac16c20d968adcd19f0732fd2f84a4ae90e
  - [x] #85680 - Reverted in 44437ac406c708b9a3ab3b47f4e3c10e77a0b91b
  - [x] #85551 - Reverted in 7f17d428fd2787a6982534bfc9ac9188fd4b8675
  - [x] #85478 - Reverted in bd9e575dafc62dc7e1259e8c19199ba15d82be4f
  - [x] #85476 - Reverted in 4ce8052076de0bb52f1ed87663920e98482ade62
  - [x] #85593 - Reverted in 9ff5924d3d56fcba3f180fc4b539568fb2013323
  - [x] #85441 - Reverted in db96015adaec01f3fbcb978796a0d7abd5668932
  - [x] #85567 - Reverted in 62696ad04fb34fd946708309bd3e439db9b3f488
  - [x] #85337 - Reverted in 1267e9f002d03c33187afd2e734e95a78a5ca6ac
  - [x] #85348 - Reverted in 4fcc3c659ee2a38d978e137252309644d5adde8f
  - [x] #85350 - Reverted in e691c833dd5aca2e7808591516e8443e8ccf1b27
  - [x] #85744 - Reverted in 251578d2868a691981b824a268c540b9c15a424e
  - [x] #85772 - Reverted in bc6804a04aa9368074bcc853e689c8fe6de2cb3a
  - [x] #85797 - Reverted in a05e36ec4a0129ff6901ea07488120b54a8ee124
  - [x] #85787 - Reverted in a5393f94b9e71d9ea0625e5fcfb5baaf16af38d3
  - [x] #85742 - Reverted in cd99a2aeaa1347b790c9bfdae35e41900e2ada9a
  - [x] #85440 - Reverted in 8b5ead7c7f0d8087b41256a296e730443752f17d
  - [x] #85739 - Reverted in 3511aae5a4798104220b79ad0e5b2b357dc1e83b
  - [x] #85293 - Reverted in fc687ca36ef476ab9080f0c62b427ab0af533d68
  - [x] #85716 - Reverted in 130b32a222a7585cfdde71aa561fb8b2c7d8083b
- ~~[ ] #85848 - Reverted in f6c46ca2f5cb2d039e4b26731570ca801741cc5d~~
(SKIPPED)
  - [x] #85795 - Reverted in 4684c3325a9135b6bf10eb43026f373993bf605d
  - [x] #85859 - Reverted in 0e0838fe11b7d9af4f62af4f7388ed8fb57bf49c
  - [x] #84873 - Reverted in 34407b79a45718a305f3bfe3fac7f129b4f1c51f
  - [x] #85864 - Reverted in 4b25a209c5019bb65922cd793aff339f20c3d026
- ~~[ ] #85845 - Reverted in a326246e81b7b9242bbf45e7ab3b31caf9ce8147~~
(SKIPPED)
  - [x] #85844 - Reverted in bdf1e6c1e3469884550d3211e51ec9303a022482
- ~~[ ] #85843 - Reverted in 41a8acb196af0988372b06ade7131d07d03daab3~~
(NOT BEING INCLUDED)
- ~~[ ] #85840 - Reverted in 4807bacea8418000f84d62ca0fb122846cab4929~~
(NOT BEING INCLUDED)
- ~~[ ] #85837 - Reverted in bc9edfa8666de14ca4e57e466146d753182a3a71~~
(NOT BEING INCLUDED)
  - [x] #85865 - Reverted in 14c958b465af40f0ff28b100047c4c572919ae19
- ~~[ ] #85818 - Reverted in a77256f74e2d330f5f76141eb9c994a8e5e45810~~
(NOT BEING INCLUDED)
  - [x] #85822 - Reverted in caba685be95fd336f0b09e88bccfb8856d5ad9b4
  - [x] #85794 - Reverted in 0d4de984eb8513d065e8ac724e8cde11f01d4ef7
  - [x] #85756 - Reverted in 9c5a7e1a5f895851493e149ccb5cd50e35cd6101
  - [x] #85852 - Reverted in 74303e5bbae8426a073d068ef4342d8acc420a09
- ~~[ ] #85841 - Reverted in e5831ce3cc87765cb13e6d342417bc1730780392~~
(NOT BEING INCLUDED)
- ~~[ ] #85834 - Reverted in 1be665204da791ec7520d0799c015157fc625953~~
(NOT BEING INCLUDED)
  - [x] #85792 - Reverted in 33b4e48175040f9f76ef83d3154f10c69589b6ad
  - [x] #85646 - Reverted in fd23a0d6c4c96470b688dc0a35370c61c7e32f61
- ~~[ ] #85799 - Reverted in 4a7a6d812f2f301c1e749c92f324223f9bde8a39~~
(NOT BEING INCLUDED)
  - [x] #85819 - Reverted in 8bf001b7889d3a4282947cd332833c473b98eac1
  - [x] #85479 - Reverted in 6aeb5ef4582c03febe0c914185d29f75df4d5d94
- ~~[ ] #85824 - Reverted in 9ca3edfaa17d97306ac73207ef32fd1272061f6b~~
(SKIPPED)
  - [x] #85406 - Reverted in 702280ff48c8aef44f4da9a85eb33a7bc5faa013
  - [x] #85778 - Reverted in ce0ec5c685aadb02ae049d6714f1d2fd6dae1f26
- ~~[ ] #85851 - Reverted in 610c68b275cf3c54181d36ce48bd97b0cce0665c~~
(NOT BEING INCLUDED)
  - [x] #85754 - Reverted in 5cbdda00c5335db79ea50aedba097de1d06bf91b
  - [x] #85266 - Reverted in abdfec798e5223dfa9d67e1967d7618454dbec28
- ~~[ ] #85823 - Reverted in 86b766abd3d77af8ad835a3464fc5ff95cc11079~~
(NOT BEING INCLUDED)
- ~~[ ] #85842 - Reverted in 7ddd47e26ef1bc336e92a6675a33ec3191039c16~~
(NOT BEING INCLUDED)
  - [x] #85857 - Reverted in e32312ee20e9fdccb6dd7c4dc2d185540bd2276b
  - [x] #85856 - Reverted in 7d5d74c2b55a08ef5553568e996053157359dbe2
  - [x] #85276 - Reverted in 1d6fa881e4aef1e6b368d5b6809bccb021fbbd2a
  - [x] #85886 - Reverted in f27d6cabdf8f06f29926616345fa82c4e1e48708
- ~~[ ] #85771 - Reverted in 019d898b601c9ef4d45b7ee0f2144518ee127ca9~~
(SKIPPED)
  - [x] #85464 - Reverted in adc00417795deb85f8aa6170b0f0a07c40c8798c
- ~~[ ] #85870 - Reverted in d69b998420bfb39693bb59b9b9a20611880fdafa~~
(NOT BEING INCLUDED)
- ~~[ ] #85869 - Reverted in 0063c69f111bb67144f9b379476250ce86c99eee~~
(NOT BEING INCLUDED)
  - [x] #85530 - Reverted in b40c93399411d277b3899e149196f3eb974f841f
- ~~[ ] #85871 - Reverted in 63908bbd0a71d0a2bd0a4691816c17cc9eb5310c~~
(NOT BEING INCLUDED)
- ~~[ ] #85832 - Reverted in b29dab083f091198d65a9b0754536f13a935dc2c~~
(SKIPPED)
- ~~[ ] #85825 - Reverted in d072b294ca3bc526df5128df45653db97ba38fe1~~
(NOT BEING INCLUDED)
  - [x] #85632 - Reverted in 290092c7d826aa5b100a38cd4bacc5330b39a934
  - [x] #85902 - Reverted in 76118d620e71f1819a9385863b689d9a8d4ea810
  - [x] #85906 - Reverted in 82623c2cc0fd9aee3e79c95fe5558146c59bc941
  - [x] #85907 - Reverted in 68b7305f21240ca28c33afc904ee532966b7c4bd
  - [x] #85449 - Reverted in ab86a79339ef7b01ceb08dc7279c698927ebcbfa
- ~~[ ] #85875 - Reverted in 0a1fcda90e638e66d574c247e93f0669d0c27b0e~~
(NOT BEING INCLUDED)
- ~~[ ] #85861 - Reverted in 6dad5111aa144860371c93a2d78094fe3d39a7e1~~
(NOT BEING INCLUDED)
  - [x] #85264 - Reverted in dc1d2dcc995f33fc5773e037f5171e9516897281
  - [x] #85726 - Reverted in dbd9ec81586c87c1ab2afc43d43c4f020907dc1b
  - [x] #85730 - Reverted in 7de2c2a1d012ccb03f82c6beabd71a66aa0f910a
  - [x] #85880 - Reverted in 02169d2f28611765997fa332dda69c8031436fd1
  - [x] #85176 - Reverted in e3c85aae1cf665c9892bf7280b7b48ea42323198
- ~~[ ] #85887 - Reverted in 56b35f294b303fd30fbd7685011d37b456d584c7~~
(NOT BEING INCLUDED)
  - [x] #85883 - Reverted in 53be06a505ebd8581114bba8590e378d387b6c1a
- ~~[ ] #85882 - Reverted in a8877ff0083ca5753e3d3b1b9c9edc3613fa6570~~
(NOT BEING INCLUDED)
  - [x] #85895 - Reverted in 741235d41b3a19a40434653f1c14fc0999fac9c3
- ~~[ ] #85746 - Reverted in b7aebb6e5788f6c484173f0a5e29f042ea0c8560~~
(NOT BEING INCLUDED)
- ~~[ ] #85889 - Reverted in d677231d8c55efcd2cf427d510d961cd00f186c7~~
(NOT BEING INCLUDED)
- ~~[ ] #85888 - Reverted in 693f79abae54980ee098d602ed79926d51d5094b~~
(NOT BEING INCLUDED)
  - [x] #85898 - Reverted in 4f41fda23e6b9711aef5d00836591c1ac230612e
- ~~[ ] #85821 - Reverted in 738c9a75f65c4a376da36ad208e1fd8fdeac1ff0~~
(NOT BEING INCLUDED)
  - [x] #85694 - Reverted in f7ea4d19cdaa2067c87c43362b514c684b56b1f3
  - [x] #85308 - Reverted in 4a89b62774da5e9ec9ea241c60ec2a99f51f9bed
  - [x] #85904 - Reverted in 999dbe1773cc7488c629bb8d0d21be5454dbef60
- ~~[ ] #85901 - Reverted in bbf832da9e0c61ad25221530df3b1e93cace25dd~~
(NOT BEING INCLUDED)
- ~~[ ] #85896 - Reverted in 542fe408728faaef8a16869e13c4661018a8a07c~~
(NOT BEING INCLUDED)
  - [x] #85927 - Reverted in 7dc87df28e79ef3e9f3fad83cc0907d2dc867c47
  - [x] #85908 - Reverted in bcca80f073a486ca7908e9636d0e8b275c2085bf
  - [x] #85929 - Reverted in 094bf3610a73961f6433a52ada1a52f25d853738
  - [x] #85877 - Reverted in 5874cafd0dab8d3bd61cf1f662793c2708f42dcc
  - [x] #85903 - Reverted in b3ba8fffc5548e0f2ae6bada3baf10bad3c75e54
- ~~[ ] #85913 - Reverted in 67f7ec48d20f9a64ce4664fa2c452a25b60db59e~~
(SKIPPED)
  - [x] #85914 - Reverted in 7efcd3a5f7fef33c2a1625386bfead80a6ed5309
  - [x] #85917 - Reverted in fc50a5ff998d0e7269131a029e533e90e9dc3c54
- ~~[ ] #85949 - Reverted in 10a8e0f5c69e3ca1eb6e26f00945bfe226598bc2~~
(NOT BEING INCLUDED)
- ~~[ ] #85338 - Reverted in 847549ab938f77464829b1392a1b6f2b2f4b9e8f~~
(SKIPPED)
- ~~[ ] #85922 - Reverted in 3d9388249b8c322aac5dd4980d4ab4673ca01006~~
(SKIPPED)
  - [x] #85923 - Reverted in 2c6ffa4decf40eb52a92353aeb98aee8cbc7b4a2
- ~~[ ] #85920 - Reverted in 1de5b03981d9fcf9c2e6823bffa515fb939aa541~~
(NOT BEING INCLUDED)
  - [x] #85919 - Reverted in 1773e9baccdc941285f56ccb416f5c7125b031ef
  - [x] #85271 - Reverted in aecf8002cf2807a76b6b295867e50392b4bc4534
  - [x] #85918 - Reverted in 023ec3a4d1b1b2fc8f596fea65a77ddc9a06689f
  - [x] #85924 - Reverted in e4886079ad90f33628ac59e0793dfbbc8b8b9420
  - [x] #85928 - Reverted in 7470b7d5ac40be21c345e8825f4c4efc4738e29f
  - [x] #85926 - Reverted in 7761c9e3a1f442f37d4db4b27e5d78fae95edf00
  - [x] #85900 - Reverted in 633736cb0655dc464e9794666c63ae6ec7689826
  - [x] #85909 - Reverted in a47c7ec8a77bd02f8b7bb1ce3c621efbe57077c3
- ~~[ ] #85931 - Reverted in 9bc7a412982da6fbdb9cd24570d98877b76a45c3~~
(NOT BEING INCLUDED)
- ~~[ ] #85894 - Reverted in c15e1711656929aeb59f482145ecf029b40d58b8~~
(SKIPPED)
- ~~[ ] #85759 - Reverted in f45d70be0ffb9bf007bfa18a1bd1b5ce23d6dcfc~~
(SKIPPED)
- ~~[ ] #85892 - Reverted in fc08dc1a7160f584c94e368962eb56c18dccc86a~~
(SKIPPED)
- ~~[ ] #85915 - Reverted in 428f475c26f383998a689560a16de86da3f17557~~
(NOT BEING INCLUDED)
  - [x] #85222 - Reverted in 66e7ac2f00735c90acdb69a50c9e485a0f4e1552
  - [x] #85150 - Reverted in 3079387f926e41febb576105ec0b3acec2f7beba
  - [x] #85935 - Reverted in ce6114f644593ead295763362a61d19077f22acf
- ~~[ ] #85936 - Reverted in f601fa796bce7e70645a84fff91391cbb6ed8e37~~
(NOT BEING INCLUDED)
  - [x] #85937 - Reverted in 64242f589df3d9118fd5c09d19574758260c76a1
- ~~[ ] #85940 - Reverted in a979c6c24705a8729efab5eca40840f1c8070f1d~~
(NOT BEING INCLUDED)
- ~~[ ] #85942 - Reverted in 9562c14083212fc962b8687663ba5fac2ebfdd1a~~
(NOT BEING INCLUDED)
  - [x] #85944 - Reverted in adf8e1927e4b9886c9042d6a0eaaef74e4e0e102
  - [x] #85605 - Reverted in 88dbfb4f859f12549e8cf8ed5204ee8d7183d40f
  - [x] #85945 - Reverted in dea9e79a9c298eae05b8d173d8df4a37218e2d9c
  - [x] #84964 - Reverted in 234481fb1d92a266768fcbca49245151236803ed
  - [x] #85952 - Reverted in c62d87ab54d687db64b1551b319195527ca92924
  - [x] #85953 - Reverted in bd0e46245ccb597081b8baa4f81ff85949f672be
- ~~[ ] #85943 - Reverted in 697b6841391354885ef2d314d9185b8eee7a5cb0~~
(NOT BEING INCLUDED)
  - [x] #85946 - Reverted in f4afd4d330b6fc28397f7707bca8773d44cb15ed
  - [x] #85950 - Reverted in 394fffcb836f32f4e1b1fd91a621249e0e5d7d67
  - [x] #85955 - Reverted in 2230a5bc141cd11fc79ccf6b4b653257508a7e65
  - [x] #85319 - Reverted in fdaddd9cd6ed0bdd1cd78ba3c9729035936abcbd
- ~~[ ] #85934 - Reverted in 41bb6122b6d6e3c38c500d5ddf63808836ab090e~~
(NOT BEING INCLUDED)
- ~~[ ] #85255 - Reverted in 3e213b8554b40e53f6429969d6e9dbaa357fb09e~~
(SKIPPED)
- ~~[ ] #85961 - Reverted in 6f3d000b3601dc7f75f7edd221fab3edc3bbbd8c~~
(NOT BEING INCLUDED)
  - [x] #85956 - Reverted in a5bf22a93ca1a149ca839e6c874d088b32c7c25f
  - [x] #85958 - Reverted in c964a46741bd26a600bb75bc6463c629c11c914f
- ~~[ ] #85969 - Reverted in b599cd4bd3ae223210eb0d3b47c3bd814e1cb08c~~
(NOT BEING INCLUDED)
  - [x] #85252 - Reverted in 5a0e2f31a6e1093ab47970056f5bb3af54172e12
  - [x] #85984 - Reverted in b000da82f62bb48b059a881d596f3a2e7d985d21
  - [x] #85137 - Reverted in 1f31b558e41fc66d5da9db30a83d89cbb9949eae
  - [x] #85881 - Reverted in f3913f94c4557c4fc9d5605cd8e875accabebda6
  - [x] #85972 - Reverted in d3afed87a3a8eed7e0016512d2186b6aded0fca9
  - [x] #85998 - Reverted in 3d286b763cf2f7fe11b6f0ccb2456130570726c2
  - [x] #85358 - Reverted in 75f84bda1b3c80d54ae94a567bf96016aaae45b2
- ~~[ ] #85964 - Reverted in be1aeb010afa20c1b6949218d8911ee9e900b3d7~~
(SKIPPED)
  - [x] #85960 - Reverted in 69cbfce1529377ce7cd998ab474add0d61650d7f
  - [x] #85992 - Reverted in 89e4a7bb0b793461338ba1b0a3d332bf78ef140c
  - [x] #85967 - Reverted in d398e418eb340f309be523514ae0befdf1869560
  - [x] #84888 - Reverted in bb98eb09f06a1fdc0bbb733d6a42d711e6d477bc
- ~~[ ] #85983 - Reverted in 81152a9cd347eb7b4073758e2e96490e6e729ca9~~
(NOT BEING INCLUDED)
  - [x] #85976 - Reverted in 93c091347ca8f04763b91fd4c39ccdff848a0d50
- ~~[ ] #85962 - Reverted in de32ea25b534c725e3d55418ef0363145f0ed2b0~~
(NOT BEING INCLUDED)
  - [x] #85977 - Reverted in 393652a1ef065014748ae6977a9f36b32c99dc7c
  - [x] #85959 - Reverted in 52e6e07eb98bcb74a423934b14d5850dbf2c6647
- ~~[ ] #85988 - Reverted in a5853ccde46b5fee2d9eb31755384de15e7a5a87~~
(SKIPPED)
- ~~[ ] #85974 - Reverted in eab20ba04e6b06f862a0fb35cedb6374af7b93c0~~
(SKIPPED)
  - [x] #85939 - Reverted in ca85b05692f55f6b3e4bd0b3f30c63f89531c33f
  - [x] #85878 - Reverted in 3b3d3dbff9148e46b01f3af28f17f66bef4dfd16
  - [x] #85858 - Reverted in 08d6082e62d07117170ff5ffd065daad1278e853
  - [x] #85651 - Reverted in b76ab4a2114dd0eb78336878b2825d9919c210cc
  - [x] #85505 - Reverted in 0958eaa7b6f4d48400bea4e215e11edaa933ba8a
- ~~[ ] #85352 - Reverted in 620cec18618e514bbe4d3eb0a0d0db1528b9d312~~
(SKIPPED)
  - [x] #85279 - Reverted in ba0fd529ef94ba793fe2eee40975533fe8f475e3
  - [x] #85954 - Reverted in d7fe0336f2a968b93fd02361814930236e3b8ddf
- ~~[ ] #85996 - Reverted in 5fbd62139e0c1b668aaaf35d249d527cdc276b93~~
(SKIPPED)
  - [x] #85994 - Reverted in c99a03c6833ac58e0288111953573f697488234f
  - [x] #85470 - Reverted in fbd5ac46d84d27455cbcf5f998741124ed6de625
- ~~[ ] #85981 - Reverted in dc74c75011ddfb1b16d644fd2ca5607599532d6f~~
(NOT BEING INCLUDED)
  - [x] #86011 - Reverted in b14b42e70e2bd21f19d443065b2342e4591c5e05
  - [x] #85820 - Reverted in 26248546b9f7d0fedec52e7b2f7def40d457e29f
  - [x] #86013 - Reverted in e17ac14f53d08be988f0516e7c39d31496a35184
  - [x] #85986 - Reverted in 4021ffea0b1bbb1f6c5b26a296abd5a8bda1d5b3
  - [x] #86019 - Reverted in c0801b3aa5dbdd33ca7c6c81e80c9fa573ada9e1
  - [x] #86010 - Reverted in 10dff005729305b75deaf1c5755a94125fa5141d
  - [x] #86029 - Reverted in 664619213db52930fa22007561dad01fe8bb3de4
  - [x] #86024 - Reverted in e74ea4368cbd2cd085aa6e8bbe83db07800b0bd4
  - [x] #86022 - Reverted in 0b2fc6a1f478c48546b161fd3ddd571f7ed6000f
  - [x] #86015 - Reverted in b99d93592dbf8840a035f22f26b64bcf27c817cb
  - [x] #85415 - Reverted in d6102c7339838675c03eb771d7a3b5a9bea4035d
- ~~[ ] #85703 - Reverted in 339b7edf3c0318f9f02922018d6918211660234f~~
(SKIPPED)
  - [x] #85890 - Reverted in 4e54f376e07071f84ed283e7468e334aaf6e4e02
  - [x] #86046 - Reverted in 0bbe2c9a048c229d151682e08aca1fa176c3ad91
  - [x] #86008 - Reverted in a0a0635cd6618618c49fda7cf150231d62a14236
  - [x] #86042 - Reverted in fa376315a064b945ed9846225c7f48e38e9b55ed
  - [x] #85891 - Reverted in 603dcd691e9eaad0a610c60c94fee522391bd2b3
  - [x] #86040 - Reverted in e42fc7618194b4b01cb68ca0c61385e465d0cb05
  - [x] #86025 - Reverted in 536bb25fe91845fe05bb7d512d8e73cc193b67ff
  - [x] #86012 - Reverted in 5cb4ec5bdf87653a5bb651c536f21423db30887e
  - [x] #86004 - Reverted in e9536143e78e3b0614d3ce6ee2c9a40005ba9b91
  - [x] #85989 - Reverted in 88a92322c2f028d2e3a2be18951d35d1135a6268
  - [x] #86044 - Reverted in d0a5fb5956be23144e325d3d51f53cb103dd5bbe
  - [x] #86001 - Reverted in 195c3597044315c9b10d002e6196911ac0622c45
  - [x] #86030 - Reverted in 5265796286b481d34fc91a1f8c58b6373d23415e
  - [x] #86055 - Reverted in e82138798cda028b673fe7ac83890e5a6b9e16d2
  - [x] #86057 - Reverted in c921900e6151552aa0768b4c9d7cc58c58dfbcc0
  - [x] #86014 - Reverted in c004d4e989a2faa672793f58fd98bd6fded8194e
  - [x] #85304 - Reverted in 611510bd7f65ee06738b7344326d72f57a131f8a
  - [x] #86061 - Reverted in f14b0a245dcf164bb99f7696e180847bb5be9b11
  - [x] #86075 - Reverted in 5339fe6c098d48769eda3f9935aa3488faa73097
  - [x] #86089 - Reverted in 10b5398e6b55f4799ca7d6740ac50c031e157c43
  - [x] #86081 - Reverted in ba86f43383cd2e8417c0a465c23fe3227fcd5520
  - [x] #85609 - Reverted in 9e5208feaca3163b7f4237c316d880161933777f
  - [x] #86114 - Reverted in cf410a97b8348381f96cc784a6489d7c1dea49ba
  - [x] #86023 - Reverted in a7a2e95c0c1b0598f15019934c80ccc80a9f89af
  - [x] #86027 - Reverted in 9cf71611befac64d26d326c060ef082262aeca70
  - [x] #86016 - Reverted in b67fa06e1559c8de87899bd06d09891b4c7ae947
  - [x] #86095 - Reverted in dc5abd827bb56e1609afe5a9d2bdd957d40cc75c
  - [x] #86105 - Reverted in f5b8e7ecbe99cb38e829a98a4f6eb2c200af8b91
  - [x] #86070 - Reverted in 6c460bbc22827bdbc566b524b8e6a959cbb61c37

After that some startup commits on this branch need to be reverted then
it can be merged.

---------

Co-authored-by: tgstation-ci <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: MrMelbert <kmelbert4@gmail.com>
2024-09-03 10:41:51 +02:00
Waterpig 330cf42ff9 Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-24-08c 2024-08-19 14:43:23 +02:00
Kyle Spier-SwensonandGitHub 4d1639b04c Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308

![image](https://github.com/user-attachments/assets/eb74d378-29da-44f0-bd14-89c95654cb4e)
2024-08-17 15:26:08 -07:00
1eef540054 Assorted changes to job assignment code and logging. (#85308)
## About The Pull Request

This PR does a couple of minor things:
Makes the job debug logging a bit easier to follow.
Minorly brings some SSjob code up to code standards, converting proc
names to snake_case and doing some otherm is cleanup.
Refactored some stuff into different procs, updated some comments.

And some major things:
Changes the job assignment logic.
Old behaviour
> Assign dynamic priority roles
> Force one Head of Staff (if possible)
> Assign all AIs
> Assign overflow roles (bugged in 2 ways)
> Shuffle the available jobs list once, at the start of the random job
assignment loop
> Pick and assign random jobs for random players from High prefs down,
with a priority on Head of Staff roles
> Handle everyone that couldn't be assigned a random job

New behaviour
> Assign dynamic priority roles
> Assign all Head of Staff roles to players with High prefs
> If no Head of Staff was made in the above way, force one Head of Staff
(if possible)
> Assign all AIs
> Assign overflow roles (fixed)
> Prioritise and fill unfilled head roles at each job priority pref
level, from High prefs down.
> Build a list of all jobs that each unassigned player could be eligible
for at the above pref level.
> Pick a job from that list at random and assign it to the player.
> Handle everyone that couldn't be assigned a random job.

In reality there should be little impact on overall job assignment, the
code changes read more as semantics. For example, the priority check for
filling Head slots will have the same candidate pool in both old and new
versions, but in the new version we're more clearly saying that Heads
are important and we want to prioritise filling them for the sake of
round progression even though the outcome in new and old is the same.

A key change will lead to an increase in assistants - Overflow fixes.

Currently the code block to do early assignments to the Overflow role
doesn't work - or works but not as you'd expect. The idea was is that
because enabling the Overflow role in the prefs menu is an On/Off toggle
that sets the job to High priority when enabled and prevents any other
High priority pref, players that have the Overflow role enabled will
**always** get it. It's their highest priority job with infinite slots.
So we do a pass right at the start to give everyone with the Overflow
role enabled that role and save us wasting time later on in random job
code giving them that same role but with more work.

The problem is the code for this only assigns the Overflow role to
people with it set to Low priority in their prefs, resulting in log
readouts like:
```
[2024-07-27 09:49:43.469] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:43.469] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Radioprague, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.472] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caluan, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Caractaser, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.473] DEBUG-JOB: FOC player job enabled at wrong level, Player: Apsua, TheirLevel: High Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
[2024-07-27 09:49:43.475] DEBUG-JOB: AC1, Candidates: 0
```
Where nobody gets pre-assigned the overflow role because their prefs are
all set to the High priority from being toggled... Except wait a second,
some people have it at Medium priority when it should just be a No
Role/High Priority Role toggle?

And herein we meet a problem. My hypothesis is that traits and stuff
that change the overflow have allowed players to set the "ordinary"
overflow role of Assistant to Medium and/or Low priority.

This still shows as enabled in the prefs menu, but leads to an outcome
where a player with assistant enabled is assigned Cook instead.
```
[2024-07-27 09:49:47.775] DEBUG-JOB: DO, Running Overflow Check 1
[2024-07-27 09:49:47.775] DEBUG-JOB: Running FOC, Job: /datum/job/assistant, Level: Low Priority
...
[2024-07-27 09:49:43.475] DEBUG-JOB: FOC player job enabled at wrong level, Player: Bebrus2, TheirLevel: Medium Priority, ReqLevel: Low Priority
...
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
```

So players with the Overflow job pref set to Low (an unexpected state,
should be disabled or High) would be guaranteed to get that role if none
of the higher priority Head of Staff/AI/Dynamic roles took over via the
bugged "force overflow for people with the pref enabled" proc.

Players with the Overflow job pref set to High would be guaranteed to
get that role if none of the higher priority Head of Staff/AI/Dynamic
roles took over via the random job assignment code giving them their
Highest priority role thanks to the infinite job slots of the Overflow.

And players with the Overflow job pref set to Medium (an unexpected
state, should be disabled or High) would get Assistant if the shuffle
step of the available jobs list put Assisstant before any of the other
jobs they had prefs enabled for at Medium that weren't already filled,
otherwise they'd get another random job.

This code is now changed to ignore the priority the player has set when
looking for people to fill the overflow role. As long as it **is**
enabled, the player will get it unless they're forced into a dynamic
ruleset role (AI when malf rolls) or a Head of Staff role due to their
other prefs (they have RD set to med or low, and no other player has a
Head of Staff at high so they get randomly picked and miss the overflow
role).

This will increase the number of assistants in shifts where their pref
state has Assisstant in the bugged Medium priority, but doesn't change
it for bugged Low and not-bugged High/On priority.

On the other side of the coin, we have how the random jobs are picked.
They're kinda not random, and I noticed this reading the logs then
reading the code.

The list of available jobs to pick from is randomly shuffled - but only
**once**. All players pull from a list of jobs in the same order. So you
end up with a log block like this:
```
[2024-07-27 09:49:47.985] DEBUG-JOB: DO pass, Player: Pierow, Level:3, Job:Botanist
[2024-07-27 09:49:47.985] DEBUG-JOB: Running AR, Player: Pierow, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.985] DEBUG-JOB: Player: Pierow is now Rank: Botanist, JCP:0, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: DO pass, Player: Daddos, Level:3, Job:Botanist
[2024-07-27 09:49:47.986] DEBUG-JOB: Running AR, Player: Daddos, Job: /datum/job/botanist, LateJoin: 0
[2024-07-27 09:49:47.986] DEBUG-JOB: Player: Daddos is now Rank: Botanist, JCP:1, JPL:2
[2024-07-27 09:49:47.986] DEBUG-JOB: FOC job filled and not overflow, Player: Bebrus2, Job: /datum/job/botanist, Current: 2, Limit: 2
[2024-07-27 09:49:47.987] DEBUG-JOB: FOC player job not enabled, Player: Bebrus2
[2024-07-27 09:49:47.987] DEBUG-JOB: DO pass, Player: Bebrus2, Level:3, Job:Cook
[2024-07-27 09:49:47.987] DEBUG-JOB: Running AR, Player: Bebrus2, Job: /datum/job/cook, LateJoin: 0
[2024-07-27 09:49:47.988] DEBUG-JOB: Player: Bebrus2 is now Rank: Cook, JCP:0, JPL:1
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC player job not enabled, Player: Redwizz
[2024-07-27 09:49:47.988] DEBUG-JOB: FOC job filled and not overflow, Player: Redwizz, Job: /datum/job/cook, Current: 1, Limit: 1
```

The list is shuffled into an order of something like `list("Scientist",
"Botanist", "Cook", "Sec Officer", ...)` then iterated over for each
player. So every random job selection goes:
> "Does Player1 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player2 have Scientist enabled and at the right priority? No?
Okay, Botanist? Yes? You get botanist."
> "Does Player3 have Scientist enabled and at the right priority? No?
Okay, Botanist has no slots left so we'll remove it from the list. Okay,
Cook? Yes? You get cook."
> "Does Player4 have Scientist enabled and at the right priority? No?
Okay, Cook has no slots left so we'll remove it from the list. Okay, Sec
Officer? ..."

This can lead to stacked individual departments if it gets randomly
rolled to the start of the list in the shuffle, and completely empty
departments if they end up at the end.

On high pop shifts this is probably less of an issue. Player prefs add
noise to this and as departments at the front fill up, those at the back
pick up some of the lower pref players.

But have you ever had a shift where there's just like... No fucking sec
even though there's tons of players? The logging (before I made changes
in this PR) was a bit ass, but my hypothesis there is that sec officer
was shuffled right at the end of the random job list, so every other
department was filled up before sec officers were picked.

To mitigate this, I made the list shuffle every single time the game
picks a random available job for the player. This should lead to a more
balanced selection of available jobs by avoiding situations where the
code is biased towards packing some departments by accident.
## Why It's Good For The Game

Overflow fixes mean people who go to their prefs and see the Overflow
Role is On will all have the same experience - They will be the Overflow
role.

More random random job selection should prevent individual departments
having a jobs be stacked when it would have otherwise been possible for
a more balanced selection but the code unintentially biased random
departments to be overstaffed and understaffed each shift.
## Changelog
🆑
fix: Having the Overflow Role set to On will properly ensure you get
that role at a High priority as intended by the game code.
fix: Job selection is now a little bit more random. Fixes an
unintentional bias in random job assignment that could lead to
feast-or-famine for roles where everyone is assigned one job and nobody
is assigned another job.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-08-17 14:27:45 -06:00
0522bb771a [MIRROR] Crabs and lobstrosities now pack a boatload of puns. (#29360)
* Crabs and lobstrosities now pack a boatload of puns. (#85440)

## About The Pull Request
Whale whale whale, It wasn't shrimple, I had to spend severals minutes
swimming around to find sea-related punss to use for this PR. I'm
otterly and clampletely exhausted.

Soooo, exactly what it reads on the title, however it also applies to
the lobster foam helmet, which is contraband from the Autrodrobe.

## Why It's Good For The Game
I thought it'd been interesting to shove a bunch of puns into crustacean
mobs. To make them a little bit more unique, and see how many puns I
could find or come up with.

## Changelog

🆑
add: Crabs and lobstrosities (as well as the lobster foam helmet and the
fishing hat) now pack a boatload of fish puns.
/🆑

* Crabs and lobstrosities now pack a boatload of puns.

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2024-08-15 17:44:52 +07:00
GhomandGitHub aa26e9fc69 Crabs and lobstrosities now pack a boatload of puns. (#85440)
## About The Pull Request
Whale whale whale, It wasn't shrimple, I had to spend severals minutes
swimming around to find sea-related punss to use for this PR. I'm
otterly and clampletely exhausted.

Soooo, exactly what it reads on the title, however it also applies to
the lobster foam helmet, which is contraband from the Autrodrobe.

## Why It's Good For The Game
I thought it'd been interesting to shove a bunch of puns into crustacean
mobs. To make them a little bit more unique, and see how many puns I
could find or come up with.

## Changelog

🆑
add: Crabs and lobstrosities (as well as the lobster foam helmet and the
fishing hat) now pack a boatload of fish puns.
/🆑
2024-08-14 23:50:33 -04:00
+16 4b4e9dff1d Wallening [IDB IGNORE] [MDB IGNORE] (#85491)
## What's going on here

Kept you waitin huh!

This pr resprites most all walls, windows and other "wall adjacent"
things to a 3/4th perspective, technical term is "tall" walls (we are
very smart).

If you're trying to understand the technical details here, much of the
"rendering tech" is built off the idea of split-vis. Basically, split a
sprite up and render it on adjacent turfs, to prevent seeing "through"
walls/doors, and to support seeing "edges" without actually seeing the
atom itself.

Most of the rest of it is pipelining done to accommodate how icons are
cut.

## Path To Merge

Almost* all sprites and code is done at this point. 
There are some things missing both on and off the bounty list, but that
will be the case forever unless we force upstream (you guys) to stop
adding new shit that doesn't fit the style.
I plan on accepting and integrating prs to the current working repo
<https://github.com/wall-nerds/wallening> up until a merge, to make
contribution simpler and allow things like bounties to close out more
easily

This pr is quite bulky, even stripping away map changes it's maybe 7000
LOC (We have a few maps that were modified with UpdatePaths, I am also
tentatively pring our test map, for future use.)
This may inhibit proper review, although that is part of why I am
willing to make it despite my perfectionism. Apologies in advance.

Due to the perspective shift, a lot of mapping work is going to need to
be done at some point. This comes in varying levels of priority. Many
wallmounts are offset by hand, some are stuck in the wall/basically
cannot be placed on the east/west/north edges of walls (posters), some
just don't look great good in their current position.

Tests are currently a minor bit yorked, I thought it was more important
to get this up then to clean them fully.

## What does it look like?


![dreamseeker_hBsU6wCu91](https://github.com/user-attachments/assets/5392fa3b-60f6-40ea-876f-e686f25f996a)

![dreamseeker_CTiK0Je5iR](https://github.com/user-attachments/assets/1aee23bd-a5ec-4679-b094-d044401b7222)

![dreamseeker_HYkS1Q9GRq](https://github.com/user-attachments/assets/bad8844b-3179-4856-8684-f912e14e844a)

![dreamseeker_Pa18tgyKYp](https://github.com/user-attachments/assets/c2e1d222-9e5c-4500-8829-dd065428644a)

![dreamseeker_BfOBwS2mjH](https://github.com/user-attachments/assets/7dc51153-111d-4b17-93c3-8389daa6b60b)

![dreamseeker_iJazOumiMQ](https://github.com/user-attachments/assets/5837e203-3865-4f60-854e-62b4875c6b99)

## Credits

<details>
<summary>Historical Mumbojumbo</summary>

I am gonna do my best to document how this project came to be. I am
operating off third party info and half remembered details, so if I'm
wrong please yell at me.

This project started sometime in late 2020, as a product of Rohesie
trying to integrate and make easier work from Mojave Sun (A recently
defunct fallout server) with /tg/.

Mojave Sun (Apparently this was LITERALLY JUST infrared baron, that man
is insane) was working with tall walls, IE walls that are 48px tall
instead of the normal 32. This was I THINK done based off a technical
prototype from aao7 proving A it was possible and B it didn't look like
dogwater.

This alongside oranges begging the art team for 3/4th walls (he meant
TGMC style) lead to Rohesie bringing on contributors from general /tg/,
including actionninja who would eventually take over as technical lead
and Kryson, who would define /tg/'s version of the artstyle. Much of the
formative aspects of this project are their work.

The project was coming along pretty well for a few months, but ran into
serious technical issues with `SIDE_MAP`, a byond map_format that allows
for simpler 3/4th rendering.
Due to BULLSHIT I will not detail here, the map format caused issues
both at random with flickering and heavily with multiz.

Concurrent with this, action stepped down after hacking out the
rendering tech and starting work on an icon cutter that would allow for
simpler icon generation, leaving ninjanomnom to manage the project.

Some time passed, and the project stalled out due to the technical
issues. Eventually I built a test case for the issues we had with
`SIDE_MAP` and convinced lummox jr (byond's developer) to explain how
the fuckin thing actually worked. This understanding made the project
theoretically possible, but did not resolve the problems with multi-z.
Resolving those required a full rework of how rendering like, worked. I
(alongside tattle) took over project development from ninjanomnom at
this time, and started work on Plane Cube (#69115), which when finished
would finally make the project technically feasible.

The time between then and now has been slow, progressive work. Many many
artists and technical folks have dumped their time into this (as you can
see from the credits). I will get into this more below but I would like
to explicitly thank (in no particular order) tattle, draco, arcanemusic,
actionninja, imaginos, viro and kylerace for keeping the project alive
in this time period. I would have curled up into a ball and died if I
had to do this all myself, your help has been indispensable.

</details>

<details>
<summary>Detailed Credits</summary>

Deep apologies if I have forgotten someone (I am sure I have, if someone
is you please contact me). I've done my best to collate from the git
log/my memory.

Thanks to (In no particular order):
Raccoff: Being funny to bully, creating threshold decals for airlocks
aa07: (I think) inspiring the project
ActionNinja: Laying the technical rock we build off, supporting me
despite byond trying to kill him, building the icon cutter that makes
this possible
ArcaneMusic: Artistic and technical work spanning from the project's
start to literally today, being a constant of motivation and positivity.
I can't list all the stuff he's done
Armhulen: Key rendering work (he's the reason thindows render right), an
upbeat personality and a kick in the ass. Love you arm
Azlan: Damn cool sprites, consistently
Ben10Omintrix: You know ben showed up just to make basic mobs work, he's
just fuckin like that man
BigBimmer: A large amount of bounty work, alongside just like, throwing
shit around. An absolute joy to work with
Capsandi: Plaques, blastdoors, artistic work early on
CapybaraExtravagante: Rendering work on wall frames
Draco: SO MUCH STUFF. Much of the spritework done over the past two
years is his, constantly engaged and will take on anything. I would have
given up if not for you
Floyd: Early rendering work, so early I don't even know the details.
Enjoy freedom brother
Imaginos16: A guiding hand through the middle years, handled much of the
sprite review and contribution for a good bit there
Iamgoofball: A dedication to detail and aesthetic goals, spends a lot of
effort dissecting feedback with a focus on making things as good as they
can be at the jump
Infrared: Part of the impetus for the project, made all the xenomorph
stuff in the MS style
Jacquerel: A bunch of little upkeep/technical things, has done so much
sprite gruntwork (WHY ARE THERE SO MANY PAINTING TYPES)
Justice12354: Solved a bunch of error sprites (and worked out how to
actually make prs to the project) Thanks bro!
Kryson: Built the artstyle of the project, carrying on for years even
when it was technically dying, only stopping to casually beat cancer. So
much of our style and art is Kryson
KylerAce: Handled annoying technical stuff for me, built window frame
logic and fully got rid of grilles.
LemonInTheDark: Rendering dirtywork, project management and just so much
fucking time in dreammaker editing sprites
Meyhazah: Table buttons, brass windows and alll the old style doors
Mothblocks: Has provided constant support, gave me a deadline and
motivation, erased worries about "it not being done", gave just SO much
money to fill in the critical holes in sprites. Thanks moth
MTandi: Contributed art despite his own blackjack and hookers club
opening right down the road, I'm sorry I rolled over some of your
sprites man I wish we had finished earlier
Ninjanomnomnom: Consulted on gags issues, kept things alive through some
truly shit times
oranges: This is his fault
Rohesie: Organized the effort, did much of the initial like, proof of
concept stuff. I hope you're doin well whatever you're up to.
san7890: Consulting on mapper UX/design problems, being my pet mapper
Senefi: Offsetting items with a focus on detail/the more unused
canidates
SimplyLogan: Detailed map work and mapper feedback, personally very kind
even if we end up talking past each other sometimes. Thank you!
SpaceSmithers: Just like, random mapping support out of nowhere, and
bein a straight up cool dude
Tattle: A bunch of misc project management stuff, organizing the
discord, managing the test server, dealing with all the mapping bullshit
for me, being my backup in case of bus. I know you think you didn't do
much but your presence and work have been a great help
Thunder12345: Came out of nowhere and just so much of the random
bounties, I'm kind of upset about how much we paid him
Time-Green: I hooked him in by fucking with stuff he made and now he's
just doin shit, thanks for helping out man!
Twaticus: Provided artistic feedback and authority for my poor feeble
coder brain, believed in the project for YEARS, was a constant source of
❤️ and affirmation
unit0016: I have no god damn idea who she is, popped out of nowhere on
the github one day and dealt with a bunch of annoying
rendering/refactoring. Godspeed random furry thank you for all your
effort and issue reports
Viro: A bunch of detailed spriting moving towards 3/4ths, both on and
off the wallening fork. If anyone believed this project would be done,
it was viro
Wallem: Artistic review and consultation, was my go-to guy for a long
time when the other two spritetainers were inactive
Waltermeldon: Cracked out a bunch of rendering work, he's the reason
windows look like not dogwater. Alongside floyd and action spent a TON
of time speaking to lummox/unearthing how byond rendering worked trying
to make this thing happen
ZephyrTFA: Added directional airlock helpers, dealt with a big fuckin
bugaboo that was living in my brain like it was nothing. Love you
brother

And finally:
The Mojave Sun development team. They provided a testbed for the idea,
committed hundreds and hundreds of hours to the artstyle, and were a
large reason we caught issues early enough to meaningfully deal with
them. Your work is a testament to what longterm effort and deep detailed
care produce. I hope you're doing well whatever you're up to. Go out
with a bang!
</details>

## Changelog
🆑 Raccoff, aa07, ActionNinja, ArcaneMusic, Armhulen, Azlan,
Ben10Omintrix, BigBimmer, Capsandi, CapybaraExtravagante, Draco, Floyd,
Iamgoofball, Imaginos16, Infrared, Jacquerel, Justice12354, Kryson,
KylerAce, LemonInTheDark, Meyhazah, Mothblocks, MTandi, Ninjanomnom,
oranges, Rohesie, Runi-c, san7890, Senefi, SimplyLogan, SomeAngryMiner,
SpaceSmithers, Tattle, Thunder12345, Time-Green, Twaticus, unit0016,
Viro, Waltermeldon, ZephyrTFA with thanks to the Mojave Sun team!
add: Resprites or offsets almost all "tall" objects in the game to match
a 3/4ths perspective
add: Bunch of rendering mumbo jumbo to make said 3/4ths perspective work
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: = <stewartareid@outlook.com>
Co-authored-by: Capsandi <dansullycc@gmail.com>
Co-authored-by: ArcaneMusic <hero12290@aol.com>
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: SomeAngryMiner <53237389+SomeAngryMiner@users.noreply.github.com>
Co-authored-by: KylerAce <kylerlumpkin1@gmail.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: Runi-c <5150427+Runi-c@users.noreply.github.com>
Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com>
Co-authored-by: tattle <article.disaster@gmail.com>
Co-authored-by: Senefi <20830349+Peliex@users.noreply.github.com>
Co-authored-by: Justice <42555530+Justice12354@users.noreply.github.com>
Co-authored-by: BluBerry016 <50649185+unit0016@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
Co-authored-by: Rob Bailey <github@criticalaction.net>
Co-authored-by: MMMiracles <lolaccount1@hotmail.com>
2024-08-14 09:07:45 +00:00
Waterpig 00aa495320 Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-24-07a 2024-07-02 23:57:38 +02:00
2e7b3d30bd [MIRROR] Adds Perfectly Ordinary Food Truck (#28551)
* Adds Perfectly Ordinary Food Truck (#84144)

## About The Pull Request
Adds a food truck.
![Food truck map](https://i.imgur.com/x1G3he9.png)
![People wearing stripy shirts get FREE
tacos!](https://i.imgur.com/zcycyhi.png)

Also, adds a team of MI13 fugitive hunters. There's 3 in a team, and one
is pre-equipped with a cunning disguise.
## Why It's Good For The Game
So the primary intent here is making a fugitive hunter team that
operates stealthily instead of directly. They have less direct combat
power than other hunters, but they have a few things that help them
infiltrate the crew and assassinate the fugitives.

All agents are issued a makarov, a suppressor, a spare clip of 9mm ammo
(20% chance to be a subtype), a random melee weapon (flash, e-dagger or
combat knife), and a random low-level syndicate gadget (c4 brick,
codespeak manual, freedom implant, etc), and a pair of zipties. Every
agent also gets a agent ID.

Shuttle is equipped with surgery tools (good for plastic surgery),
clothing vendors (good for getting disguised), and a bunch of computers
for cameras and vitals monitors. Spare cyanide pills and 9mm ammo is
provided, as is a single space suit. As an added bonus, you're
opereating out of the back of an old food truck giving you bulletproof
cover for your operations. Spare food is provided, a functional kitchen
is not.
## Changelog
🆑
add: Ghost role food truck merchants may occasionally turn up at the
station.
add: Adds a new fugitive hunter type, MI13 secret agents.
/🆑

---------

Co-authored-by: Afevis <ShizCalev@ users.noreply.github.com>

* Adds Perfectly Ordinary Food Truck

---------

Co-authored-by: Da Cool Boss <142358580+DaCoolBoss@users.noreply.github.com>
Co-authored-by: Afevis <ShizCalev@ users.noreply.github.com>
2024-07-02 15:28:14 +05:30
dc5a3a322d Adds Perfectly Ordinary Food Truck (#84144)
## About The Pull Request
Adds a food truck.
![Food truck map](https://i.imgur.com/x1G3he9.png)
![People wearing stripy shirts get FREE
tacos!](https://i.imgur.com/zcycyhi.png)

Also, adds a team of MI13 fugitive hunters. There's 3 in a team, and one
is pre-equipped with a cunning disguise.
## Why It's Good For The Game
So the primary intent here is making a fugitive hunter team that
operates stealthily instead of directly. They have less direct combat
power than other hunters, but they have a few things that help them
infiltrate the crew and assassinate the fugitives.

All agents are issued a makarov, a suppressor, a spare clip of 9mm ammo
(20% chance to be a subtype), a random melee weapon (flash, e-dagger or
combat knife), and a random low-level syndicate gadget (c4 brick,
codespeak manual, freedom implant, etc), and a pair of zipties. Every
agent also gets a agent ID.

Shuttle is equipped with surgery tools (good for plastic surgery),
clothing vendors (good for getting disguised), and a bunch of computers
for cameras and vitals monitors. Spare cyanide pills and 9mm ammo is
provided, as is a single space suit. As an added bonus, you're
opereating out of the back of an old food truck giving you bulletproof
cover for your operations. Spare food is provided, a functional kitchen
is not.
## Changelog
🆑
add: Ghost role food truck merchants may occasionally turn up at the
station.
add: Adds a new fugitive hunter type, MI13 secret agents.
/🆑

---------

Co-authored-by: Afevis <ShizCalev@users.noreply.github.com>
2024-07-02 02:27:56 +02:00
291c6e3fca [MIRROR] Bounty Hunters have personalized arrival announcements (#28524)
* Bounty Hunters have personalized arrival announcements (#84148)

## About The Pull Request

Fugitive Hunters now have a personalized message for when they arrive,
replacing the generic "Unidentified ship detected near the station"
message.

Spacepol:

![image](https://github.com/tgstation/tgstation/assets/28870487/d00fef5b-f2eb-4dea-baa6-f102546b11b9)

Russians:

![image](https://github.com/tgstation/tgstation/assets/28870487/74aa6f82-5741-4bc8-81be-18da75d35697)

Bounty Hunters:

![image](https://github.com/tgstation/tgstation/assets/28870487/015d4741-5367-4d98-8e10-de513c4654ce)

Psykers:

![image](https://github.com/tgstation/tgstation/assets/28870487/23754b72-7932-42d6-a3d8-2335e7238c0d)

I swear, someday I'll datumize these backstories like we did for
pirates. Maybe after this PR is resolved.
## Why It's Good For The Game

Added flavor is nice. It also gives the crew a cue on how to react to
the hunters, seeing as some hunters are received far more cooperatively
than others (looking at you, SpacePol).

The generic message used to be a fakeout for pirates, but now that THEY
have personalized messages, it doesn't really need to be like that
anymore.
## Changelog
🆑
add: Bounty Hunter teams now have personalized announcements for when
they are spawned in.
/🆑

* Bounty Hunters have personalized arrival announcements

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2024-07-01 19:36:24 +05:30
RhialsandGitHub 224a169dd9 Bounty Hunters have personalized arrival announcements (#84148)
## About The Pull Request

Fugitive Hunters now have a personalized message for when they arrive,
replacing the generic "Unidentified ship detected near the station"
message.

Spacepol:


![image](https://github.com/tgstation/tgstation/assets/28870487/d00fef5b-f2eb-4dea-baa6-f102546b11b9)

Russians:


![image](https://github.com/tgstation/tgstation/assets/28870487/74aa6f82-5741-4bc8-81be-18da75d35697)

Bounty Hunters:


![image](https://github.com/tgstation/tgstation/assets/28870487/015d4741-5367-4d98-8e10-de513c4654ce)

Psykers:


![image](https://github.com/tgstation/tgstation/assets/28870487/23754b72-7932-42d6-a3d8-2335e7238c0d)

I swear, someday I'll datumize these backstories like we did for
pirates. Maybe after this PR is resolved.
## Why It's Good For The Game

Added flavor is nice. It also gives the crew a cue on how to react to
the hunters, seeing as some hunters are received far more cooperatively
than others (looking at you, SpacePol).

The generic message used to be a fakeout for pirates, but now that THEY
have personalized messages, it doesn't really need to be like that
anymore.
## Changelog
🆑
add: Bounty Hunter teams now have personalized announcements for when
they are spawned in.
/🆑
2024-07-01 00:55:32 +02:00
nevimer e96f29d4a5 Merge remote-tracking branch 'Skyrat-SS13/master' into upstream-2024-06-16
# Conflicts:
#	_maps/_basemap.dm
#	_maps/map_files/IceBoxStation/IceBoxStation.dmm
#	_maps/skyrat/automapper/automapper_config.toml
#	code/__DEFINES/surgery.dm
#	code/datums/weather/weather_types/radiation_storm.dm
#	code/modules/antagonists/changeling/changeling.dm
#	code/modules/clothing/neck/_neck.dm
#	code/modules/events/_event.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/kinetic_crusher.dm
#	code/modules/mob/living/basic/vermin/frog.dm
#	modular_skyrat/modules/borgs/code/robot_upgrade.dm
2024-06-16 20:54:25 -04:00
60e22e610d [MIRROR] Misha - the bear (#28204)
* Misha - the bear (#83949)

## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/96586172/beeee166-f838-4bce-ab52-667ed566e25c)
Adds Misha the bear to icebox HoS office, a snow bear with the same
health stats as Sgt. Araneus.
## Why It's Good For The Game
With how easy it is to break into the HoS office on icebox (you don't
need any space protection) it never made sense to keep a slow pet in the
office. The bear is fast and deals 15 damage, while also resistant to
cold.
I think it adds more depth that the HoS tamed a bear on icebox and
trained it. Also the bear fits the map.
## Changelog
🆑 grungussuss
add: Added Misha the bear to the HoS office on icebox.
/🆑

* Misha - the bear

---------

Co-authored-by: grungussuss <96586172+Sadboysuss@users.noreply.github.com>
2024-06-16 04:28:49 +01:00
grungussussandGitHub 9502f89146 Misha - the bear (#83949)
## About The Pull Request

![image](https://github.com/tgstation/tgstation/assets/96586172/beeee166-f838-4bce-ab52-667ed566e25c)
Adds Misha the bear to icebox HoS office, a snow bear with the same
health stats as Sgt. Araneus.
## Why It's Good For The Game
With how easy it is to break into the HoS office on icebox (you don't
need any space protection) it never made sense to keep a slow pet in the
office. The bear is fast and deals 15 damage, while also resistant to
cold.
I think it adds more depth that the HoS tamed a bear on icebox and
trained it. Also the bear fits the map.
## Changelog
🆑 grungussuss
add: Added Misha the bear to the HoS office on icebox.
/🆑
2024-06-16 02:18:13 +01:00
ac5c2a5f6f [MIRROR] Fix revenant spawning next to brains and other unharvestable mobs (#28191)
* Fix revenant spawning next to brains and other unharvestable mobs (#83975)

## About The Pull Request

What it says on the tin. Currently we are adding all dead `mob/living/`
to the list of potential revenant spawns whether or not they are valid
harvest targets.

Decreases the odds of getting a spawn that is not immediately useful as
revenant.

## Why It's Good For The Game

Fix good.

Harvesting only works with `mob/living/carbon/human/` so naturally we
should avoid adding other mobs to the list of potential spawn points.

## Changelog
🆑
fix: Fixed revenant spawning next to brains and other unharvestable dead
mobs.
/🆑

* Fix revenant spawning next to brains and other unharvestable mobs

---------

Co-authored-by: Wayland-Smithy <64715958+Wayland-Smithy@users.noreply.github.com>
2024-06-15 17:41:43 +01:00
Wayland-SmithyandGitHub 932b4dd348 Fix revenant spawning next to brains and other unharvestable mobs (#83975)
## About The Pull Request

What it says on the tin. Currently we are adding all dead `mob/living/`
to the list of potential revenant spawns whether or not they are valid
harvest targets.

Decreases the odds of getting a spawn that is not immediately useful as
revenant.

## Why It's Good For The Game

Fix good.

Harvesting only works with `mob/living/carbon/human/` so naturally we
should avoid adding other mobs to the list of potential spawn points.

## Changelog
🆑
fix: Fixed revenant spawning next to brains and other unharvestable dead
mobs.
/🆑
2024-06-14 23:44:06 -06:00
Waterpig 004e466cea Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-2406b 2024-06-08 14:33:29 +02:00
f591dd3bd3 [MIRROR] Gondolas are now basic mobs (#27934)
* Gondolas are now basic mobs (#83451)

## About The Pull Request

This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.

Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.

## Why It's Good For The Game

The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.

## Changelog

🆑
refactor: Gondolas (including gondola pods) are now basic mobs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>

* Well then. Hope it works.

* Ohhh.

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: Useroth <37159550+Useroth@users.noreply.github.com>
2024-06-02 17:37:45 +02:00
Waterpig 5da11912cb Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-2406a 2024-06-02 10:40:19 +02:00
8442124bcd Gondolas are now basic mobs (#83451)
## About The Pull Request

This PR turns gondolas into basic mobs and does some fiddling with
gondola pods
Their verbs are now action buttons which they lose upon delivering. If
set to stay, they won't have their abilities afterwards (or wont get
them in the first place if the delivery is already done).
Lets them survive without a pod requirement in case admins want to spawn
one for their own stuff, so I also removed it from the snowflake checks
to exclude them from stuff.

Also replaced the hardcoded "cant speak" with simply giving the mute
trait, so admins can make gondolas speak if they want to for any reason.

## Why It's Good For The Game

The pet level of simple animals can finally be killed off, also gives
admins more control over gondola-related stuff if they so wish.

## Changelog

🆑
refactor: Gondolas (including gondola pods) are now basic mobs.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2024-05-31 16:48:31 -06:00
Time-GreenandSkyratBot ff9beb22d1 Removes sentient disease (#83453)
## About The Pull Request

Completely removes sentient disease from the game

## Why It's Good For The Game

Sentient disease is a unique antag and seems fun on paper, but really
doesn't work that well.

Sentient disease is a pretty binary antagonist: you either get cured and
watch helplessly as you lose all your hosts, or you infect everyone and
wipe out the entire station. Its everything bad about conversion antags,
but there's not even any fighting.

I also don't think any amount of balancing can fix sentient disease. If
we make it harder to cure, the disease gets an easier station wipe, but
if we make it less lethal, it loses all ability to stop cure generation.
The core gameplay pitches the entire crew against one disease, and it's
merely a timer before either it gets cured or wipes out everyone

This is my latest sentient disease round, where I wiped out the entire
station. I only even greentexted because there was one guy on the escape
shuttle in crit that barely made it because they had the sense to take
spaceilline.

![image](https://github.com/tgstation/tgstation/assets/7501474/260b3b28-96a1-4a19-8532-ecb94a41c68b)

The removal of the virologist lets us balance viruses to be fairer
challenges to the player, but as long as sentient disease exists we'll
always have to balance viruses somewhat in favor of the enjoyment of the
disease blowing your head and making you spontaneously combust.

## Changelog
🆑
del: Removes sentient disease from the game
/🆑

Hopefully, once we get virology truly sorted out, we can readd sentient
disease, but this would require our diseases to have endgoals that
aren't focused around killing every person, being widespread while also
not being instantly curable. A reworked sentient disease would have to
be so different, it's better to leave it out, fix virology and then
consider if we can truly add a new sentient disease and have it be fun
and fair
2024-05-26 14:57:44 -04:00
Time-GreenandGitHub a3d93ff598 Removes sentient disease (#83453)
## About The Pull Request

Completely removes sentient disease from the game

## Why It's Good For The Game

Sentient disease is a unique antag and seems fun on paper, but really
doesn't work that well.

Sentient disease is a pretty binary antagonist: you either get cured and
watch helplessly as you lose all your hosts, or you infect everyone and
wipe out the entire station. Its everything bad about conversion antags,
but there's not even any fighting.

I also don't think any amount of balancing can fix sentient disease. If
we make it harder to cure, the disease gets an easier station wipe, but
if we make it less lethal, it loses all ability to stop cure generation.
The core gameplay pitches the entire crew against one disease, and it's
merely a timer before either it gets cured or wipes out everyone

This is my latest sentient disease round, where I wiped out the entire
station. I only even greentexted because there was one guy on the escape
shuttle in crit that barely made it because they had the sense to take
spaceilline.


![image](https://github.com/tgstation/tgstation/assets/7501474/260b3b28-96a1-4a19-8532-ecb94a41c68b)

The removal of the virologist lets us balance viruses to be fairer
challenges to the player, but as long as sentient disease exists we'll
always have to balance viruses somewhat in favor of the enjoyment of the
disease blowing your head and making you spontaneously combust.

## Changelog
🆑
del: Removes sentient disease from the game
/🆑

Hopefully, once we get virology truly sorted out, we can readd sentient
disease, but this would require our diseases to have endgoals that
aren't focused around killing every person, being widespread while also
not being instantly curable. A reworked sentient disease would have to
be so different, it's better to leave it out, fix virology and then
consider if we can truly add a new sentient disease and have it be fun
and fair
2024-05-26 11:54:50 -07:00
Waterpig 07e790a87f Merge branch 'master' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-2405b 2024-05-13 17:42:53 +02:00
7df0192743 Fixes some missing poll_ghost_candidates sanity checking for ghost role based events (#83107)
poll_ghost_candidates can return null if nobody signs up, these weren't
properly checking for that case.

Also moved the Santa ghost role over to the proper subtype (not sure if
it was outright broken, but it'll now properly update the Santa's role
and trigger automatically.)

```
[14:41:54] Runtime in code/modules/events/ghost_role/sentience.dm, line 77: Cannot read null.vars
proc name: spawn role (/datum/round_event/ghost_role/sentience/spawn_role)
src: /datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience)
call stack:
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): spawn role()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): try spawning()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): start()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
2024-05-08 21:26:16 -04:00
0d29902736 Fixes some missing poll_ghost_candidates sanity checking for ghost role based events (#83107)
poll_ghost_candidates can return null if nobody signs up, these weren't
properly checking for that case.

Also moved the Santa ghost role over to the proper subtype (not sure if
it was outright broken, but it'll now properly update the Santa's role
and trigger automatically.)

```
[14:41:54] Runtime in code/modules/events/ghost_role/sentience.dm, line 77: Cannot read null.vars
proc name: spawn role (/datum/round_event/ghost_role/sentience/spawn_role)
src: /datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience)
call stack:
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): spawn role()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): try spawning()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): start()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-05-08 19:24:04 -06:00
nevimer 45e52eb774 Merge remote-tracking branch 'skrat/master' into new-bubbermaster
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/hilbertresearchfacility.dmm
#	_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm
#	_maps/map_files/Birdshot/birdshot.dmm
#	_maps/map_files/Deltastation/DeltaStation2.dmm
#	_maps/map_files/IceBoxStation/IceBoxStation.dmm
#	_maps/map_files/MetaStation/MetaStation.dmm
#	_maps/map_files/NorthStar/north_star.dmm
#	_maps/map_files/VoidRaptor/VoidRaptor.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	_maps/shuttles/pirate_ex_interdyne.dmm
#	code/__DEFINES/mobs.dm
#	code/__HELPERS/~skyrat_helpers/is_helpers.dm
#	code/datums/mood.dm
#	code/game/objects/effects/spawners/random/random.dm
#	code/modules/admin/verbs/adminhelp.dm
#	code/modules/clothing/head/jobs.dm
#	code/modules/mob/living/brain/brain_say.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png
#	code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png
#	code/modules/uplink/uplink_items/job.dm
#	config/lavaruinblacklist.txt
#	icons/mob/actions/actions_changeling.dmi
#	icons/mob/clothing/mask.dmi
#	icons/obj/mining.dmi
#	modular_skyrat/master_files/code/modules/client/preferences/headshot.dm
#	modular_skyrat/master_files/code/modules/mob/living/examine_tgui.dm
#	modular_skyrat/master_files/code/modules/research/techweb/all_nodes.dm
#	modular_skyrat/master_files/icons/mob/clothing/under/skirts_dresses.dmi
#	modular_skyrat/master_files/icons/obj/clothing/under/skirts_dresses.dmi
#	modular_skyrat/modules/aesthetics/airlock/icons/airlocks/multi_tile/metal_overlays.dmi
#	modular_skyrat/modules/colony_fabricator/code/appliances/space_heater.dm
#	modular_skyrat/modules/company_imports/code/armament_datums/deforest_medical.dm
#	modular_skyrat/modules/hyposprays/code/hypospray_kits.dm
#	strings/traumas.json
#	tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/headshot.tsx
2024-04-20 22:19:03 -04:00
4e3ae84c26 [MIRROR] slaughter/laughter demon roundend report consume count + you cant bodyslam yourself (#27226)
* slaughter/laughter demon roundend report consume count + you cant bodyslam yourself (#82481)

## About The Pull Request

you cant bodyslam yourself as a slaughter/laughter demon
also
![2024-04-05 18_46_26-Space Station
13](https://github.com/tgstation/tgstation/assets/70376633/2f67747f-fbd4-471a-a8bf-b7c0df6948eb)

also moved antag datum stuff to mind init which means easier spawning

## Why It's Good For The Game

i wanted to brag in OOC about my supreme robust killcount but then i
realized theres no way to verify this
also hurting yourself is stupid

## Changelog
🆑
qol: slaughter/laughter demons have a cooler round end report
qol: you may not bodyslam yourself as a demon
code: slaughter and laughter demons are given their antag datum when
their mind initializes
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>

* slaughter/laughter demon roundend report consume count + you cant bodyslam yourself

---------

Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
2024-04-18 03:02:01 +02:00
b851b54b2f slaughter/laughter demon roundend report consume count + you cant bodyslam yourself (#82481)
## About The Pull Request

you cant bodyslam yourself as a slaughter/laughter demon
also
![2024-04-05 18_46_26-Space Station
13](https://github.com/tgstation/tgstation/assets/70376633/2f67747f-fbd4-471a-a8bf-b7c0df6948eb)

also moved antag datum stuff to mind init which means easier spawning


## Why It's Good For The Game

i wanted to brag in OOC about my supreme robust killcount but then i
realized theres no way to verify this
also hurting yourself is stupid

## Changelog
🆑
qol: slaughter/laughter demons have a cooler round end report
qol: you may not bodyslam yourself as a demon
code: slaughter and laughter demons are given their antag datum when
their mind initializes
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2024-04-07 19:56:08 -06:00
227264f146 [MIRROR] Removes Orbit Polling Component, SSpolling improvement (#26769)
* Removes Orbit Polling Component, SSpolling improvement

* a

* Update effects.dmi

* Update tgstation.dme

* Revert "Update tgstation.dme"

This reverts commit d4fdaf0abbfaacddb0cc0d175dad4e410fe57e44.

---------

Co-authored-by: 13spacemen <46101244+13spacemen@users.noreply.github.com>
Co-authored-by: Pinta <68373373+softcerv@users.noreply.github.com>
2024-03-26 11:20:47 -04:00
05b63df7a5 [MIRROR] Fugitive hunter spawn delay works again (#26833)
* Fugitive hunter spawn delay works again (#81919)

## About The Pull Request

Fugitives hunters no longer spawn after 1 minute under any conditions.

The culprit was improper use of a macro, checking the shuttle status
against it instead of just using it.
## Why It's Good For The Game

Fugitives get some more breathing room and time to gear up.
## Changelog
🆑 Rhials
fix: Fugitive hunters no longer spawn after 1 minute of the fugitives'
arrival.
/🆑

* Fugitive hunter spawn delay works again

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
2024-03-11 22:38:49 -04:00
RhialsandGitHub c9e285917d Fugitive hunter spawn delay works again (#81919)
## About The Pull Request

Fugitives hunters no longer spawn after 1 minute under any conditions.

The culprit was improper use of a macro, checking the shuttle status
against it instead of just using it.
## Why It's Good For The Game

Fugitives get some more breathing room and time to gear up.
## Changelog
🆑 Rhials
fix: Fugitive hunters no longer spawn after 1 minute of the fugitives'
arrival.
/🆑
2024-03-10 23:05:16 +01:00
13spacemenandGitHub 357799c8a5 Removes Orbit Polling Component, SSpolling improvement (#81748)
When I made SSpolling, jlsnow gave me his blessing to delete the orbit
polling component [where you orbit something for 20 seconds before it
chooses a ghost from the orbiters]
It's only used in a few places like soulstones replacing
jobbanned/inactive players, etc.

Also upgraded SSpolling; you can now place a little icon on the sides in
the chat message, chat message looks a lot nicer, the alert pic and the
jump target don't have to be the same anymore, and I made it be able to
pre-pick candidates since 90% of the use cases would just want 1
candidate

Also prints to chat who the chosen one was

Also made slime intelligence potions ask the user for a reason, which
will be displayed in the alert poll
2024-03-06 08:24:36 +00:00
Waterpig e8f9767a11 Merge remote-tracking branch 'Skyrat/upstream-merge-81373' into upstream-2024-3 2024-03-03 10:55:23 +01:00
nevimer bbbc700ff2 fix ninja dna lock 2024-02-27 15:33:45 -05:00
d8f05766a7 [MIRROR] Fugitive Hunters can spawn early if emergency shuttle is called (#26658)
* Fugitive Hunters can spawn early if emergency shuttle is called (#81612)

## About The Pull Request
In the event of a shuttle call, fugitive hunters will spawn early.
(Hunters will still spawn 10 minutes after the fugitives if the shuttle
is idle)
## Why It's Good For The Game
Hunters are currently able to spawn way too late to ever have a chance
to interact with the fugitives, this is lame for both parties involved.
## Changelog
🆑 PapaMichael
balance: Fugitive hunters will spawn early if the emergency shuttle is
called.
/🆑

* Fugitive Hunters can spawn early if emergency shuttle is called

---------

Co-authored-by: PapaMichael <papa.michael.1996@gmail.com>
2024-02-26 23:11:05 -05:00
PapaMichaelandGitHub 633a1e8a5d Fugitive Hunters can spawn early if emergency shuttle is called (#81612)
## About The Pull Request
In the event of a shuttle call, fugitive hunters will spawn early.
(Hunters will still spawn 10 minutes after the fugitives if the shuttle
is idle)
## Why It's Good For The Game
Hunters are currently able to spawn way too late to ever have a chance
to interact with the fugitives, this is lame for both parties involved.
## Changelog
🆑 PapaMichael
balance: Fugitive hunters will spawn early if the emergency shuttle is
called.
/🆑
2024-02-27 02:08:43 +01:00