mirror of
https://github.com/Skyrat-SS13/Skyrat-tg.git
synced 2026-07-17 02:44:31 +01:00
master
1334 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
bb70889f6e |
TG Upstream Part 1
3591 individual conflicts Update build.js Update install_node.sh Update byond.js oh my fucking god hat slow huh holy shit we all fall down 2 more I missed 2900 individual conflicts 2700 Individual conflicts replaces yarn file with tg version, bumping us down to 2200-ish Down to 2000 individual conflicts 140 down mmm aaaaaaaaaaaaaaaaaaa not yt 575 soon 900 individual conflicts 600 individual conflicts, 121 file conflicts im not okay 160 across 19 files 29 in 4 files 0 conflicts, compiletime fix time some minor incap stuff missed ticks weird dupe definition stuff missed ticks 2 incap fixes undefs and pie fix Radio update and some extra minor stuff returns a single override no more dupe definitions, 175 compiletime errors Unticked file fix sound and emote stuff honk and more radio stuff |
||
|
|
4c4930c71d | Merge branch 'master' of https://github.com/tgstation/tgstation into pulls-tg-to-fix-shit | ||
|
|
344dc0dd50 |
[MIRROR] Removes a signal and a list from the movetype handler element. (#29663)
Removes a signal and a list from the movetype handler element. (#86119) ## About The Pull Request We can already stop the floating anim by adding the no floating trait, COMSIG_PAUSE_FLOATING_ANIM and the relative paused_floating_anim_atoms list are redundant as we can just use the `TRAIT_CALLBACK_REMOVE` macro and timers. ## Why It's Good For The Game Less crap in the way of a one big bespoke element that manages the movetypes of every living mob in the game. ## Changelog N/A Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
10c2b7364e |
The fishening v3: Fishing lures. (#86007)
## About The Pull Request Over half of the line changes are merely from splitting the fish_types.dm into several files since it was over 1k lines already. One of the small issues with fishing right now is RNG. You want to get some specific fish, and you go through all the micromanaging with hooks, reels and baits only for the random number god to say "nope", and that's only going to get worse the more fish are in the game. However, I've a solution: (unconsumable/reusable) fishing lures, each of which attracts different fish based on different conditions. The only caveat is that they require to be spun at set intervals (usually 1 to 3 seconds, depending on the lure, with a second-long window). Worry not, there're visual cues in the form of a green/red light hovering the fishing float, so you won't get screwed up by the server slowing down or whatever. The whole box of lures (12 so far) can be from cargo for the fair price of 450 credits. I've also added 5 new fish: monkfish, plaice, pike, another punnier variant of the pike, perch and squid. The latter is quite special because of the ink production trait, which lets players use it to blind others at a close range and when butchered, it yields an ink sac, which can be processed into a can of squid ink (one less item exclusive to the produce console), or thrown at people in a sort-of-similar fashion of banana cream pies (except it's ink). <details> <summary>Images</summary> Fishing lures (forgot to take my cursor off the veggie one before the screenshot):  The five new fish:  </details> <details> <summary>A table of fish catchable wth each lure (excluding holodeck)</summary>  </details> A few more things in the CL, baitfish are a thing now. ## Why It's Good For The Game There should be ways to contrast some of the RNG fishing has. After all, it's only going to get more random the more fish are in the game. Furthermore, I find it disappointing that a lot of food stuff is exclusive to the ingredients console and there're no other ways to get it. ## Changelog 🆑 add: Added fishing lures to the game. They don't get used up like baits and let you catch specific kinds of fish, though they need to be spun every few seconds. The whole set can be ordered from cargo for 450 credits. balance: The magnet hook now removes dud chances. add: Added five new fish types: perch, two types of pike, monkfish, plaice and squid. Squids have a fairly special ink production trait, which lets you use them (unless dead) to ink people face at close range, and can be butchered for an ink sac, which can either be processed into canned squid ink, or thrown at someone. fix: Refactored throwing a little. Some items (specifically components/elements) won't be triggered when caught. no more plates shattering despite being caught for example. add: Goldfish, lavaloops, needlefish and armorfish can now be used as baits. /🆑 |
||
|
|
a66065cb6d |
Removes a signal and a list from the movetype handler element. (#86119)
## About The Pull Request We can already stop the floating anim by adding the no floating trait, COMSIG_PAUSE_FLOATING_ANIM and the relative paused_floating_anim_atoms list are redundant as we can just use the `TRAIT_CALLBACK_REMOVE` macro and timers. ## Why It's Good For The Game Less crap in the way of a one big bespoke element that manages the movetypes of every living mob in the game. ## Changelog N/A |
||
|
|
c84fc8201b |
[MIRROR] Heretic Influences use alt appearances (so ghosts can now see them (semi-transparent)) (#29646)
Heretic Influences use alt appearances (so ghosts can now see them (semi-transparent)) (#85932) ## About The Pull Request Removes the rather overcomplicated system behind heretic influences and makes them use alt appearances Fixes a few bugs involving alt appearances that I noticed in making them I made this PR 7 months ago and forgot to Pr it ## Why It's Good For The Game Less complex codes and lets observers get a cut in on the action. Should fix #77530 ## Changelog 🆑 Melbert refactor: Refactored heretic influences a tiny bit, now ghosts can see them! Report any oddities. /🆑 Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
aefa22166c |
Heretic Influences use alt appearances (so ghosts can now see them (semi-transparent)) (#85932)
## About The Pull Request Removes the rather overcomplicated system behind heretic influences and makes them use alt appearances Fixes a few bugs involving alt appearances that I noticed in making them I made this PR 7 months ago and forgot to Pr it ## Why It's Good For The Game Less complex codes and lets observers get a cut in on the action. Should fix #77530 ## Changelog 🆑 Melbert refactor: Refactored heretic influences a tiny bit, now ghosts can see them! Report any oddities. /🆑 |
||
|
|
91baa94ac5 |
event based incapicated and able_to_run (#86031)
## About The Pull Request this is a revival of #82635 . i got permission from potato to reopen this, he did almost all the work. i only just solved the conflicts and fixed all the bugs that were preventing the original from being merged (but it should be TMed first) ## Why It's Good For The Game slightly improves the performance of basic mob AI ## Changelog 🆑 LemonInTheDark refactor: able_to_run and incapacitated have been refactored to be event based /🆑 --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: ZephyrTFA <matthew@tfaluc.com> |
||
|
|
45a7a67c1f |
Reverts an unintended change to Leeching Walk. (#86295)
## About The Pull Request Reverts an accidental change to leeching walk. ## Why It's Good For The Game Few months ago, i reworked Rust Heretic and most of its skills. https://github.com/tgstation/tgstation/pull/83006 One of the changes i pushed was a minor temperature regulation effect being added to leeching walk. This was accidentally reverted by Carlactg in his pr on Cult Vs Heretic https://github.com/tgstation/tgstation/pull/82877 This change was not discussed nor alluded in the pr, and it wasn't even remotely related to it, Carlact themsleves admitted it was their mistake. So i'm reverting it. ## Changelog 🆑 revert: Leeching walk has been granted it's intended temp regulation effect back. /🆑 |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
6a418150e8 |
[MIRROR] Spelling and Grammar Fixes (#29499)
* Spelling and Grammar Fixes * they dont understand --------- Co-authored-by: klorpa <30924131+klorpa@users.noreply.github.com> Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com> |
||
|
|
fc614f1701 |
[MIRROR] Refactored the fish case and examining fish. New bluespace fish case to fit large fish inside a backpack. (#29448)
* Refactored the fish case and examining fish. New bluespace fish case to fit large fish inside a backpack. (#85271) ## About The Pull Request I've refactored the FISH_SAFE_STORAGE trait into an element, mainly because there were a few problems with how it worked: It wasn't stopping hunger from raising, ditto with the breeding wait, and it offered no healing whatsoever, which I find kind of a bummer. The new element will keep the fish from getting any hungrier or ready to reproduce and will heal them up to 65% of their base health. Also, I've added a new bluespace fish case as a techweb design, found along with other stuff in the advanced fishing node, though if you want I can move it to a bluespace node. This should make it possible to reasonably store and carry around larger fish. Examining a fish will no longer give out readings on weight and size if you haven't at least attempted fishing once (you can get to novice level in less than a minute). While examining a fish with apprentice level or higher will also give readings on the general conditions of the fish (is it starving? drowning? has it lost a considerable chunk of health?). The fishing skillchip also gives you these traits. I've also converted two fish variables into traits, because fish have waaaay too many variables. and gave some topdown shading to the pre-existing fishbox sprite. ## Why It's Good For The Game ## Changelog 🆑 add: Added a bluespace fish case to the advanced fishing node. balance: Fish cases will keep a fish from getting hungrier or ready to reproduce, while also healing it up to 65% health. balance: Examining a fish with zero fishing skill whatsoever won't give a reading on its size and weight. Conversely, examining one with the skill leveled two times will give general information on if it's starving, sick, hungry, or dead. /🆑 * Refactored the fish case and examining fish. New bluespace fish case to fit large fish inside a backpack. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
d2c7806047 |
Spelling and Grammar Fixes (#85992)
## About The Pull Request Fixes several errors to spelling, grammar, and punctuation. ## Why It's Good For The Game ## Changelog 🆑 spellcheck: fixed a few typos /🆑 |
||
|
|
4b35b40684 |
[MIRROR] fixes elevation being permanent if you spawn on it (#29473)
* fixes elevation being permanent if you spawn on it (#85952) ## About The Pull Request 1 line change that makes spawning on stuff such as table not offset you forever ## Why It's Good For The Game fixes #84121 ## Changelog 🆑 fix: spawning on a table or other elevated object does not offset you forever /🆑 * fixes elevation being permanent if you spawn on it --------- Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com> |
||
|
|
659e6f0ca2 |
Fishing expansion 2: one-year later boogaloo (#85252)
## About The Pull Request This PR mainly adds more fish and more fishing spots to the game, while refactoring a few aspects of the fishing minigame. Listing out with the new fish: - Arctic char: mainly filler content for the ice hole fishing spot - Sockeye Salmon: ditto but also provides better fillets that boost the quality of resulting food items when cooked or used in recipes - Soulfish: joke content, found by the cursed spring ruin - Skin Crab: also a joke found by the cursed spring - Bump-Fish: filler for the sand fishing spot - Burrower Crab: ditto, reusing a fish sprite I made last year - Sand Surfer: ditto - Three-Eyed Goldfish: It's a reference, doh - Stingray: A modestly weaponizable fish (whoops I've forgot to set the hit sounds), it possess a few traits that make it deliver bits of venom each time you hit someone with it - Swordfish: Huge-ass fish that may require two hands to wield (or not, if the RNG wants to make it smaller). Stats-wise, it's more or less the equivalent of the captain sabre, if not stronger (and more unwieldy due to size and weight). Becomes weaker when dead. Also gives better quality fillets. - Chainsawfish: A mutation of the goldfish with some size, weight and traits requirements, but can also be found on emagged fishing portals. Stronger than the swordfish, it behaves sort of like a chainsaw, with the similar tool behaviour and var values. Also becomes weaker when dead. As for the fishing spots, you can now fish on sand turfs, at the cursed springs or on ice. Rivers/jungle water now has its own fishing spot datum, and no longer uses the generic fishing portal one. To fish on ice, you first have to carve a hole with a pick or a shovel. I've also refactored the fish "AI" hardcoded stuff used in the fishing minigame into their own datums, which let me add a few fancier ways to how the fish moves during the minigame (i.e. the soulfish moving at 1 FPS or the chainsawfish getting faster and faster). As for the sword and chainsaw fish, their potential strength is balanced out by the need of keeping them alive, as well as the potential cumbersomeness, two-handed wielding and potential slowdown from the excessive weight of the fish (Thank you Big Slappy for the inspiration). Other minor changes include: Pufferfish giving better quality fillets (too bad they're poisonous, I'll go and make a skillchip to let cooks safely separate the poisonous liver from the fillets); McGill The lawyer's goldfish) having a 15% of being three-eyed; the aforementioned slowdown from fish weight and two-handed carry from fish size; a couple new fish icons (the ones that hint you on what you're trying to catch) for the fishing minigame; a few adjustments to prevent self-reproducing fish from ignoring the population cap and let fish with a stable population of 1 to crossbreed (also gotta make a different PR to let it happen rarely without the crossbreeding trait). This PR is still a WIP, gotta test it several times. ## Why It's Good For The Game Fishing is something I've been working on for about a year now, but there are still a few places where it's kinda lackluster, like there's not enough diverse fishing spots or useful fish (I'll be working on a separate PR to make the logistic of a carrying a fish around without letting it die a tad easier). Also, look at these sprites:  Can you guess which is which? ## Changelog For the sake of not dumping players with niche information 90% of the players won't understand, I'll keep the CL pretty generic 🆑 add: Added twelve new fish types to the game. Some are cool, other are not, some come with their own special traits and some are straight-up weapons. add: Added more fishing spots to the game. Sand, ice, rivers, the cursed spring... balance: A few fish like salmon, swordfish and pufferfish (poisonous btw) now give better quality fillets when butchered, which can improve the quality of food that uses them even further. balance: Excessive fish weight will make the fish slowier to carry, while excessive size may make it require two hands. balance: Adjusted size, weight and cooldowns of several fish, for the better. /🆑 |
||
|
|
f2e93b63b1 |
fixes elevation being permanent if you spawn on it (#85952)
## About The Pull Request 1 line change that makes spawning on stuff such as table not offset you forever ## Why It's Good For The Game fixes #84121 ## Changelog 🆑 fix: spawning on a table or other elevated object does not offset you forever /🆑 |
||
|
|
ff3b73dc82 |
Refactored the fish case and examining fish. New bluespace fish case to fit large fish inside a backpack. (#85271)
## About The Pull Request I've refactored the FISH_SAFE_STORAGE trait into an element, mainly because there were a few problems with how it worked: It wasn't stopping hunger from raising, ditto with the breeding wait, and it offered no healing whatsoever, which I find kind of a bummer. The new element will keep the fish from getting any hungrier or ready to reproduce and will heal them up to 65% of their base health. Also, I've added a new bluespace fish case as a techweb design, found along with other stuff in the advanced fishing node, though if you want I can move it to a bluespace node. This should make it possible to reasonably store and carry around larger fish. Examining a fish will no longer give out readings on weight and size if you haven't at least attempted fishing once (you can get to novice level in less than a minute). While examining a fish with apprentice level or higher will also give readings on the general conditions of the fish (is it starving? drowning? has it lost a considerable chunk of health?). The fishing skillchip also gives you these traits. I've also converted two fish variables into traits, because fish have waaaay too many variables. and gave some topdown shading to the pre-existing fishbox sprite. ## Why It's Good For The Game ## Changelog 🆑 add: Added a bluespace fish case to the advanced fishing node. balance: Fish cases will keep a fish from getting hungrier or ready to reproduce, while also healing it up to 65% health. balance: Examining a fish with zero fishing skill whatsoever won't give a reading on its size and weight. Conversely, examining one with the skill leveled two times will give general information on if it's starving, sick, hungry, or dead. /🆑 |
||
|
|
4d1639b04c |
Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308  |
||
|
|
6f0dd84a3d |
Splits wall layer into three (#85901)
## About The Pull Request Turns `ON_WALL_LAYER` into `FLAT_ON_WALL_LAYER` `ON_WALL_LAYER` `HIGH_ON_WALL_LAYER` Where `FLAT_ON_WALL_LAYER` is meant for lower-priority wall mounts like signs and posters `ON_WALL_LAYER` is default and `HIGH_ON_WALL_LAYER` is for stuff that "hang over" the wall Also makes the incident display actually wall mounted ## Why It's Good For The Game I noticed this while doing mapping and I thought it was a really cool effect  Unfortunately this effect was a coinflip because all wall mounts were on the same layer. Sometimes it'd look like this  So this allows us to do this kinda stuff consistently. Also has the added effect of letting us "de-prioritize" stuff like posters, so we can hang stuff *over* posters and signs, which could be useful. ## Changelog 🆑 Melbert qol: Some wall mounts will now consistently layer over others (light switches and cameras, notably, should always layer above other mounts like signs and status displays) /🆑 |
||
|
|
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>
|
||
|
|
fec946e9c0 |
/Icon/ Folder cleansing crusade part, I think 4; post-wallening clean-up. (#85823)
Hello everybuddy, your number three rated coder-failure here to clean up some mess. This PR accomplishes some of the more major structural clean up changes I wanted to do with /obj/ folder, but decided to wait on until wallening gets merged, and so, time has come. Several things to still be done, although I know these cleaning PR's are quite a load, so will wait for this one to get done with first. ## Why It's Good For The Game Saner spriters, better sprites, less annoyance. Also deleted a whole load of redundancy this time around, a lot of sprites which existed simultaniously in two places now got exit their quantum superposition. |
||
|
|
4337997c5c |
[MIRROR] Fixes catwalk rendering layering and catwalk pipe cap issues (#29307)
* Fixes catwalk rendering layering and catwalk pipe cap issues (#85236) ## About The Pull Request Sooooooo this one's a mess. First off, layering issues. Pipes, cables, and disposals currently render over catwalks!  That's not great. Looking into it, it seems we've moved the `CATWALK_LAYER` below the `ABOVE_OPEN_TURF_LAYER`, where the catwalk layer is used for closed catwalks. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/__DEFINES/layers.dm#L148-L150 Which, well, we've *also* made it so all `undertile` stuff gets rendered at `ABOVE_OPEN_TURF_LAYER` when below a tile. So! Naively! We swap those around! Easy peasy lemon squeezy. ```dm #define ABOVE_OPEN_TURF_LAYER (12 + TOPDOWN_LAYER) #define CATWALK_LAYER (13 + TOPDOWN_LAYER) ``` And hey! Well!  It's progress! But as we can see in the bottom right catwalk tile, something's not rendering right when they're below the tile... Well, time to take a closer look at our `undertile` element... aaaaaand would you look at that: https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L45-L48 We're setting EVERYTHING to the `FLOOR_PLANE` at `ABOVE_OPEN_TURF_LAYER`, even the stuff that was already on `FLOOR_PLANE` with its own layer like disposals or cables. Meaning, layering fuckery ensues, we can't see shit. So? We just make it only do that when we're not already on the floor plane. ```dm if(PLANE_TO_TRUE(source.plane) != FLOOR_PLANE) SET_PLANE_IMPLICIT(source, FLOOR_PLANE) source.layer = ABOVE_OPEN_TURF_LAYER ``` This solves it!  Progress!  ...Kind of. The _layering_ is solved, but unscrewing and rescrewing them seems to cause pipe caps to manifest out of nowhere! This _sucks_ for debugging, y'know? Anyhow, this is based on two different things: an order of operations issue and catwalks just not being accounted for. First off! Order of operations. On `Initialize(...)`, the base `/obj/machinery/atmospherics` registers a proc that updates pipe caps on `COMSIG_OBJ_HIDE`: https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L114-L115 Meanwhile, `/obj/machinery/atmospherics/pipe`, adds the `undertile` element on its `Initialize(...)`... AFTER calling the parent. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/pipes/pipes.dm#L31-L35 ...Which then registers its own proc on `COMSIG_OBJ_HIDE`... https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L26 This meant that, well, the proc that generates the caps was being called *before* undertile had a chance to chance to remove the `TRAIT_UNDERFLOOR` trait... which pipe caps use to work out when to generate. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L650-L652 So, we swap this around by moving both to a `setup_hiding()` proc which allows the pipe to register its behaviours before calling the parent and it register its, without needing to register it before calling the parent `Initialize(...)`. Cause that's ugly. Now we're generating pipe caps on catwalks! But! That brings us perfectly to the next bit. Cause those pipe caps, even if shown when the tile is open, look *ugly*. Why, when we open a catwalk, are we having our pipes suddenly extend onto the neighbouring tiles and catwalks and going down into them from the top? Arguably, these should behave like they're below tiles, because they logically are even if not technically so. Well, actually, we already have a similar situation with bare plating. It's not applying `TRAIT_UNDERFLOOR`, but also the pipe caps shouldn't be behaving like they're above a tile, because that'd be ugly- and that's what it does! https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L654-L655 So, we just apply a second check there, `iscatwalkturf(...)` ```dm var/turf/node_turf = get_turf(node) if(isplatingturf(node_turf) || iscatwalkturf(node_turf)) continue ``` And? Well!    There we go! There's no weird layering, there's no pipe caps where there shouldn't be, pipes behave like those on catwalks are actually under a tile. It looks _clean_. ... Well, for however clean we can get it to be without making sprites for the opened catwalks but without the integrated plating so we can make an overlay and have the pipes/cables/disposals not spontaneously go over the edges of the catwalk when opened. Or making the under sprites only have the attachment points in the corners, so it looks like the pipes/cables/disposals are going over plating instead of what looks like a raised edge. ## Why It's Good For The Game Fixes #84789. Fixes #82622. Screwing open a catwalk suddenly generating pipecaps on neighbouring closed catwalks and tiles with pipes under them looks weird. ## Changelog 🆑 fix: Fixed pipes/cables/disposals rendering above closed catwalks. fix: Fixed catwalks covering pipes generating illogical pipe caps when screwed. fix: Opened catwalks are no longer assumed to be above-floor for the sake of generating pipe caps. /🆑 * Fixes catwalk rendering layering and catwalk pipe cap issues --------- Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> |
||
|
|
2ce8063930 |
Fixes catwalk rendering layering and catwalk pipe cap issues (#85236)
## About The Pull Request Sooooooo this one's a mess. First off, layering issues. Pipes, cables, and disposals currently render over catwalks!  That's not great. Looking into it, it seems we've moved the `CATWALK_LAYER` below the `ABOVE_OPEN_TURF_LAYER`, where the catwalk layer is used for closed catwalks. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/__DEFINES/layers.dm#L148-L150 Which, well, we've *also* made it so all `undertile` stuff gets rendered at `ABOVE_OPEN_TURF_LAYER` when below a tile. So! Naively! We swap those around! Easy peasy lemon squeezy. ```dm #define ABOVE_OPEN_TURF_LAYER (12 + TOPDOWN_LAYER) #define CATWALK_LAYER (13 + TOPDOWN_LAYER) ``` And hey! Well!  It's progress! But as we can see in the bottom right catwalk tile, something's not rendering right when they're below the tile... Well, time to take a closer look at our `undertile` element... aaaaaand would you look at that: https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L45-L48 We're setting EVERYTHING to the `FLOOR_PLANE` at `ABOVE_OPEN_TURF_LAYER`, even the stuff that was already on `FLOOR_PLANE` with its own layer like disposals or cables. Meaning, layering fuckery ensues, we can't see shit. So? We just make it only do that when we're not already on the floor plane. ```dm if(PLANE_TO_TRUE(source.plane) != FLOOR_PLANE) SET_PLANE_IMPLICIT(source, FLOOR_PLANE) source.layer = ABOVE_OPEN_TURF_LAYER ``` This solves it!  Progress!  ...Kind of. The _layering_ is solved, but unscrewing and rescrewing them seems to cause pipe caps to manifest out of nowhere! This _sucks_ for debugging, y'know? Anyhow, this is based on two different things: an order of operations issue and catwalks just not being accounted for. First off! Order of operations. On `Initialize(...)`, the base `/obj/machinery/atmospherics` registers a proc that updates pipe caps on `COMSIG_OBJ_HIDE`: https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L114-L115 Meanwhile, `/obj/machinery/atmospherics/pipe`, adds the `undertile` element on its `Initialize(...)`... AFTER calling the parent. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/pipes/pipes.dm#L31-L35 ...Which then registers its own proc on `COMSIG_OBJ_HIDE`... https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L26 This meant that, well, the proc that generates the caps was being called *before* undertile had a chance to chance to remove the `TRAIT_UNDERFLOOR` trait... which pipe caps use to work out when to generate. https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L650-L652 So, we swap this around by moving both to a `setup_hiding()` proc which allows the pipe to register its behaviours before calling the parent and it register its, without needing to register it before calling the parent `Initialize(...)`. Cause that's ugly. Now we're generating pipe caps on catwalks! But! That brings us perfectly to the next bit. Cause those pipe caps, even if shown when the tile is open, look *ugly*. Why, when we open a catwalk, are we having our pipes suddenly extend onto the neighbouring tiles and catwalks and going down into them from the top? Arguably, these should behave like they're below tiles, because they logically are even if not technically so. Well, actually, we already have a similar situation with bare plating. It's not applying `TRAIT_UNDERFLOOR`, but also the pipe caps shouldn't be behaving like they're above a tile, because that'd be ugly- and that's what it does! https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L654-L655 So, we just apply a second check there, `iscatwalkturf(...)` ```dm var/turf/node_turf = get_turf(node) if(isplatingturf(node_turf) || iscatwalkturf(node_turf)) continue ``` And? Well!    There we go! There's no weird layering, there's no pipe caps where there shouldn't be, pipes behave like those on catwalks are actually under a tile. It looks _clean_. ... Well, for however clean we can get it to be without making sprites for the opened catwalks but without the integrated plating so we can make an overlay and have the pipes/cables/disposals not spontaneously go over the edges of the catwalk when opened. Or making the under sprites only have the attachment points in the corners, so it looks like the pipes/cables/disposals are going over plating instead of what looks like a raised edge. ## Why It's Good For The Game Fixes #84789. Fixes #82622. Screwing open a catwalk suddenly generating pipecaps on neighbouring closed catwalks and tiles with pipes under them looks weird. ## Changelog 🆑 fix: Fixed pipes/cables/disposals rendering above closed catwalks. fix: Fixed catwalks covering pipes generating illogical pipe caps when screwed. fix: Opened catwalks are no longer assumed to be above-floor for the sake of generating pipe caps. /🆑 |
||
|
|
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?       ## 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> |
||
|
|
f9906ea240 |
[MIRROR] converts most pet behavior into elements (#29221)
* converts most pet behavior into elements (#85290) ## About The Pull Request refactors pet behaviors, such as collars and pet cultists into elements. also this is a first step to completely removing the pet subtype ## Why It's Good For The Game this means itll be alot easier for coders to make their tameable mobs able to wear pet collars without having to make them of the pet subtype, which i also plan to do ## Changelog 🆑 refactor: refactors pet collars and cultist pets into elements /🆑 * converts most pet behavior into elements * removing undefined var --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> |
||
|
|
0e36ba0808 |
converts most pet behavior into elements (#85290)
## About The Pull Request refactors pet behaviors, such as collars and pet cultists into elements. also this is a first step to completely removing the pet subtype ## Why It's Good For The Game this means itll be alot easier for coders to make their tameable mobs able to wear pet collars without having to make them of the pet subtype, which i also plan to do ## Changelog 🆑 refactor: refactors pet collars and cultist pets into elements /🆑 |
||
|
|
a1be42f412 |
[MIRROR] HUD traits now apply their corresponding hud automatically. Most clothing/item/etc sources of HUDs now only use traits (#29072)
[MIRROR] HUD traits now apply their corresponding hud automatically. Most clothing/item/etc sources of HUDs now only use traits [MDB IGNORE] (#3861) * HUD traits now apply their corresponding hud automatically. Most clothing/item/etc sources of HUDs now only use traits (#84984) Currently if you want to apply a HUD you usually add both its trait and the HUD itself. Only exceptions are things like simplemobs where you should avoid adding the hud trait since it adds security/med DB access and such, but there is no cases where you'd want to apply the trait and not apply the hud. Requested by Melbert about a week ago.  This makes working with HUDs significantly easier, as you no longer have to bother with manually adding/removing them. Also potentially removes an edge case where if your hud could get removed while keeping the trait. 🆑 refactor: HUD traits now apply their corresponding hud automatically /🆑 * Modular changes * rest of the modular stuff * no bot path hud actually standard diag glasses don't give this, for some reason --------- Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Mal <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Fluffles <piecopresident@gmail.com> |
||
|
|
680f9992af |
[MIRROR] Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode (#29044)
* Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode (#85172) ## About The Pull Request Closes #84799 ## Changelog 🆑 fix: Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode /🆑 * Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> |
||
|
|
425232136c |
Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode (#85172)
## About The Pull Request Closes #84799 ## Changelog 🆑 fix: Xenomorphs and door pryer basic mobs can now attack airlocks in combat mode /🆑 |
||
|
|
13686fa1d2 |
[MIRROR] Dehydrator, machine version of drying rack (#28996)
* Dehydrator, machine version of drying rack * [MIRROR] Dehydrator, machine version of drying rack [MDB IGNORE] (#3928) * Dehydrator, machine version of drying rack (#85141)  Added dehydrator, a machine version of drying rack. Replaced the second fryer with this rack on some maps to be available roundstart. Also changed the colors of Smart Fridge to be more in line with other kitchen appliances. We have plenty of recipes requiring dried items, and it's silly that the chef has to break down a cafeteria table to build a rack for regular recipes. 🆑 add: Dehydrator, a machine version of drying rack, with a circuit board and available on some kitchens roundstart. image: Updated the color palette of Smart Fridge /🆑 * conflicts, nova maps. * icecats I guess. * f --------- Co-authored-by: Andrew <mt.forspam@gmail.com> Co-authored-by: sqn <zephyrthebreeze@gmail.com> * icewalker * Update icemoon_underground_icewalker_lower.dmm --------- Co-authored-by: Andrew <mt.forspam@gmail.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> Co-authored-by: NovaBot <154629622+NovaBot13@users.noreply.github.com> Co-authored-by: sqn <zephyrthebreeze@gmail.com> |
||
|
|
68f4696e25 |
[MIRROR] You can now raise lobstrosities from chasms chrabs. (#29019)
* You can now raise lobstrosities from chasms chrabs. (#84969) ## About The Pull Request Lobstrosities can now be raised from aquarium icemoon/lavaland chrabs. First of all, you've to get a live chrab, an aquarium, and some fish feed. Second, you place the chrab inside the aquarium and turn the 'allow breeding' settting on (should probably rename it to a more apt name now). Keep the chrab well fed, and possibly with some friends and props in the same aquarium until it develops into a hopefully calm juveline lobstrosity and plops out of the aquarium (it can take some time). From there you can tame it by feeding it its favorite food: arms and lavaloop fish, and wait another dozen minutes for it to mature into a fully grown lobstrosity. Juveline lobstrosities are basically smaller and weaker lobstrosities, if not slightly faster in some ways. Unlike their taller counterparts, they can be tamed. Once done so, they'll retain their tamedness once grown up. Regardless, tamed lobstrosities can be given the pet command to fish for things by pointing at them. Thanks BenMatrix for the profound fisher component, woo. The chrab's weigth and size influence the growth speed of the first stage faster, meaning bigger chrabs (may require crossbreeding) will turn into juveline lobstrosities quickly. Amongst other things influencing the resulting mob are fish traits: Several traits have been given effects that apply to the mob, such as nocturnal regeneration, being venomous or being able to fly akin space carps. Also a new one that prevents the resulting lobstrosity from fully developing Now tested. ## Why It's Good For The Game I'm building upon fishing and aquarium stuff, which has been an interest of mine in a good while, though most of it doesn't have that many practical uses, I'm slowly trying to make it cooler, and chasm chrabs growing into lobstrosities is pretty much in line with the fluff texts for the fish. Eventually I'll have to add tips inside fishing toolboxes, otherwise people won't know even half of it. ## Changelog 🆑 add: You can raise lobstrosities from chasm chrabs inside an aquarium with the 'allow breeding' setting on. Keep the fish well fed, healthy and not lonely if you don't want an hostile one. add: Juveline lobstrosities (from chasms, plasma rivers, or aquariums, xenobio too) can be tamed with arms and lavaloop fishes. add: For lobstrosities grown from aquariums, they can have additional effects based on the fish traits they had in the aquarium, like being venomous or even flying. /🆑 * You can now raise lobstrosities from chasms chrabs. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
bd96f4221a |
[MIRROR] Refactored the on_hit_effect into an element. (#29028)
* Refactored the on_hit_effect into an element. (#85034) ## About The Pull Request on_hit_effect is now an element, which uses signals instead of callbacks. ## Why It's Good For The Game Easy peasy almost lemon squeezy. It's a good thing that I had made the AddElementTrait proc so we can manage multiple sources of a common element. It's much better to use signals than callbacks for components and datums with several possible sources, kinda like how it's been donw with the relay_attackers element. ## Changelog N/A * Refactored the on_hit_effect into an element. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
b99de8cb9c |
Refactored the on_hit_effect into an element. (#85034)
## About The Pull Request on_hit_effect is now an element, which uses signals instead of callbacks. ## Why It's Good For The Game Easy peasy almost lemon squeezy. It's a good thing that I had made the AddElementTrait proc so we can manage multiple sources of a common element. It's much better to use signals than callbacks for components and datums with several possible sources, kinda like how it's been donw with the relay_attackers element. ## Changelog N/A |
||
|
|
c91c50f937 |
You can now raise lobstrosities from chasms chrabs. (#84969)
## About The Pull Request Lobstrosities can now be raised from aquarium icemoon/lavaland chrabs. First of all, you've to get a live chrab, an aquarium, and some fish feed. Second, you place the chrab inside the aquarium and turn the 'allow breeding' settting on (should probably rename it to a more apt name now). Keep the chrab well fed, and possibly with some friends and props in the same aquarium until it develops into a hopefully calm juveline lobstrosity and plops out of the aquarium (it can take some time). From there you can tame it by feeding it its favorite food: arms and lavaloop fish, and wait another dozen minutes for it to mature into a fully grown lobstrosity. Juveline lobstrosities are basically smaller and weaker lobstrosities, if not slightly faster in some ways. Unlike their taller counterparts, they can be tamed. Once done so, they'll retain their tamedness once grown up. Regardless, tamed lobstrosities can be given the pet command to fish for things by pointing at them. Thanks BenMatrix for the profound fisher component, woo. The chrab's weigth and size influence the growth speed of the first stage faster, meaning bigger chrabs (may require crossbreeding) will turn into juveline lobstrosities quickly. Amongst other things influencing the resulting mob are fish traits: Several traits have been given effects that apply to the mob, such as nocturnal regeneration, being venomous or being able to fly akin space carps. Also a new one that prevents the resulting lobstrosity from fully developing Now tested. ## Why It's Good For The Game I'm building upon fishing and aquarium stuff, which has been an interest of mine in a good while, though most of it doesn't have that many practical uses, I'm slowly trying to make it cooler, and chasm chrabs growing into lobstrosities is pretty much in line with the fluff texts for the fish. Eventually I'll have to add tips inside fishing toolboxes, otherwise people won't know even half of it. ## Changelog 🆑 add: You can raise lobstrosities from chasm chrabs inside an aquarium with the 'allow breeding' setting on. Keep the fish well fed, healthy and not lonely if you don't want an hostile one. add: Juveline lobstrosities (from chasms, plasma rivers, or aquariums, xenobio too) can be tamed with arms and lavaloop fishes. add: For lobstrosities grown from aquariums, they can have additional effects based on the fish traits they had in the aquarium, like being venomous or even flying. /🆑 |
||
|
|
5dcae7bce5 |
Merge pull request #28982 from Skyrat-SS13/upstream-merge-85169
[MIRROR] Corrects 200+ instances of "it's" where it should've been "its" instead |
||
|
|
f315b8a852 |
[MIRROR] You can now fish with explosives (#28999)
* You can now fish with explosives (#85118) ## About The Pull Request Iansdoor suggested this to me earlier (but I already knew it was a thing on Goon), and I said ok. Basically, this PR adds an interaction between explosions and fishing. At the cost of potential collateral damage, you can too now use a TTV to catch a lot of fishes (and other stuff). Fish spawned this way will be pretty much dead however. This PR also adds the examine tips already presents in the fishing spot component to the lazy fishing spot element. ## Why It's Good For The Game This PR adds an interaction between fishing and other mechanics of the game. ## Changelog 🆑 add: You can now fish with explosives. fix: Fixed an inconsistency with examining fishing spots with sufficiently high fishing skill (or skillchip). /🆑 * You can now fish with explosives --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
a46e8282c9 |
[MIRROR] Voidwalker Balancing, Fixes and Additions (#28965)
* Voidwalker Balancing, Fixes and Additions * Update declarations.dm --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> |
||
|
|
d2a52eb564 |
You can now fish with explosives (#85118)
## About The Pull Request Iansdoor suggested this to me earlier (but I already knew it was a thing on Goon), and I said ok. Basically, this PR adds an interaction between explosions and fishing. At the cost of potential collateral damage, you can too now use a TTV to catch a lot of fishes (and other stuff). Fish spawned this way will be pretty much dead however. This PR also adds the examine tips already presents in the fishing spot component to the lazy fishing spot element. ## Why It's Good For The Game This PR adds an interaction between fishing and other mechanics of the game. ## Changelog 🆑 add: You can now fish with explosives. fix: Fixed an inconsistency with examining fishing spots with sufficiently high fishing skill (or skillchip). /🆑 |
||
|
|
c04af38744 |
Dehydrator, machine version of drying rack (#85141)
## About The Pull Request  Added dehydrator, a machine version of drying rack. Replaced the second fryer with this rack on some maps to be available roundstart. Also changed the colors of Smart Fridge to be more in line with other kitchen appliances. ## Why It's Good For The Game We have plenty of recipes requiring dried items, and it's silly that the chef has to break down a cafeteria table to build a rack for regular recipes. ## Changelog 🆑 add: Dehydrator, a machine version of drying rack, with a circuit board and available on some kitchens roundstart. image: Updated the color palette of Smart Fridge /🆑 |
||
|
|
aefec7cb2b |
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑 |
||
|
|
5f80128fa9 |
Corrects 200+ instances of "it's" where it should've been "its" instead (#85169)
## About The Pull Request it's - conjunction of "it" and "is" its - possessive form of "it" grammar is hard, and there were a lot of places where "it's" was used where it shouldn't have been. i went and painstakingly searched the entire repository for these instances, spending a few hours on it. i completely ignored the changelog archive, and i may have missed some outliers. most player-facing ones should be corrected, though ## Why It's Good For The Game proper grammar is good ## Changelog 🆑 spellcheck: Numerous instances of "it's" have been properly replaced with "its" /🆑 |
||
|
|
2672a93c66 |
Voidwalker Balancing, Fixes and Additions (#85045)
## About The Pull Request Balances - Stops voidwalkers from breaking glass at all, and throwing items Voidwalkers started using spears to break electrified windows to space area's. Throwing bypasses too many safety checks, and shouldn't be their main means of combat either way - No hitting anyone in crit Voidwalkers were using weapons to try and kill as many people as possible without kidnapping - Only able to pull people Voidwalkers were dragging bags around with a personal armory. It also just looks goofy as hell - Increases space dive enter to 3 seconds (from 2) and decreases space dive exit (from 2 seconds to 1) The original value was pretty fast, and is being used to slip out of combat if anyone ever comes after them. This is intended to a certain degree, but it was a bit too strong - Void Eater becomes blunt during use, needs kidnappings to refresh Yeah... For some it's being used as a murderbone antag, forgoing kidnappings completely. This change makes murderboning significantly more difficult without bothering good faith players. It goes from 25 damage to 15 in 0.5 damage increments. This slightly decreases take-down potentially against people with low-mood, but clicks that go SCRUNGE release dopamine so it balances - Gives voidwalkers chunkyfingers, preventing stun baton and gun use Voidwalker originally had this, but I figured I'd keep it out to give people to freedom to be more opportunistic in combat, but a significant portion defaulted to getting a stunbaton as quick as possible so they could avoid engaging in actual combat - Removes eye slots They're already flash immune. People don't know this so they're all rushing sunglasses. It just looks weird when the space monster is wearing glasses :/. They can still wear scarves if they decide to be fashionable - Void eater applies 10s of NODEATH Yeah fuck it why not? It also prevents succumbing and takes out a lot of cheese - Removed Voidwalker armor They had 10% brute and 20% burn armor. I didn't really think much about the original change, figured they'd be too weak otherwise, but turns out they're sufficiently strong and this kinda deviates from the intended "ambush antag" by making them stronger in sustained combat - Voided go to a safe turf instead of a random one Actually just a mistake on my part. Dumping mute people in the turbine plasma burn chamber is cruel, even for a coder Fixes - The Unsettle ability line of sight didn't check for line of sight :/ Addition: - Gives Voidwalker telepathy. I originally kept it out because whatever but honestly I think it's fine and gives them the chance to communicate if they ever need to. I've also given the abilities it's own sprite and background cause good vibes ## Why It's Good For The Game The original testmerges I spectated went very well! I had it testmerged on Terry and the rounds where I observed were played in very good faith and played a spooky antag incredibly well. I've also seen others play incredibly fun rounds! It seems to have gone downhill a bit though (or Terry is high-RP?). I've observed a few rounds on other servers and the way it's played is not great. I originally kept as little handrails as I could as to give people the most freedom possible in playing the spooky antag, but some people dissappoint me so, so incredibly deeply. It's just been merged but I'm already seeing players ignoring kidnap mechanics in favor of roundremoving as many people as possible, giving up any semblance of stealth in favor of carrying around mini armories. Another spent it's time breaking windows to vent as much of the station as possible. I also knew it would happen, but not this much. I probably should've had this PR up a bit sooner but I've gotten really into Hardrock TerraFirmaCraft (seriously it's _sooo_ good). I can keep going "Argh, players!!" but honestly I've been incredibly naive. These set of balance changes set out to cripple gameplay optimizers while leaving good faithed players unaffected for the most part, bringing it closer to the original design doc I wrote and away from just being another murderbone machine ## Changelog 🆑 add: Gives voidwalker telepathy fix: Fixes the Unsettle ability ignoring line of sight (which was it's sole gimmick, im just dumb) balance: Voidwalkers cannot break windows anymore or throw objects balance: Voidwalkers can no longer harm people in crit balance: Voidwalkers can only pull mobs balance: Voidwalkers' space dive enter has been increased by 1 seconds, but dive exit decreased by 1 second balance: Void eater becomes blunt during use. Kidnap people to refresh it balance: Removes voidwalker glasses slot balance: Gives voidwalkers chunky fingers balance: Voidwalker applies NODEATH on hit balance: Voided victims get dumped in safer places /🆑 --------- Co-authored-by: Jacquerel <hnevard@gmail.com> |
||
|
|
e20762a915 |
[MIRROR] Fixes that one alien feature that uses mouse drag (#28936)
* Fixes that one alien feature that uses mouse drag (#84916) ## About The Pull Request Fixes that one alien feature that uses mouse drag Honestly I really hate this fix, I think strippable should be non-blocking, or alternatively, strippable should have some proc `should_strip` to prevent people from opening the ui in some contexts. But whatever ## Changelog 🆑 Melbert fix: Fixes xenos being able to do that one mechanic that involves mouse-dragging people to you /🆑 * Fixes that one alien feature that uses mouse drag --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
6efbf872e2 |
Fixes immerse holding refs to qdeleted things (#85061)
## About The Pull Request Tin, should fix the following hard del and prevent similar instances:  There was nothing stopping something that was qdeleted from potentially being 'immersed' which is definitely not something that we ever want to be happening. ## Why It's Good For The Game Spurious CI failures are annoying ## Changelog Nothing player facing |
||
|
|
8155177d46 |
Fixes that one alien feature that uses mouse drag (#84916)
## About The Pull Request Fixes that one alien feature that uses mouse drag Honestly I really hate this fix, I think strippable should be non-blocking, or alternatively, strippable should have some proc `should_strip` to prevent people from opening the ui in some contexts. But whatever ## Changelog 🆑 Melbert fix: Fixes xenos being able to do that one mechanic that involves mouse-dragging people to you /🆑 |
||
|
|
dfb12f91d6 |
HUD traits now apply their corresponding hud automatically. Most clothing/item/etc sources of HUDs now only use traits (#84984)
## About The Pull Request Currently if you want to apply a HUD you usually add both its trait and the HUD itself. Only exceptions are things like simplemobs where you should avoid adding the hud trait since it adds security/med DB access and such, but there is no cases where you'd want to apply the trait and not apply the hud. Requested by Melbert about a week ago.  ## Why It's Good For The Game This makes working with HUDs significantly easier, as you no longer have to bother with manually adding/removing them. Also potentially removes an edge case where if your hud could get removed while keeping the trait. ## Changelog 🆑 refactor: HUD traits now apply their corresponding hud automatically /🆑 |
||
|
|
684405925f |
Fixes immerse holding refs to qdeleted things (#85061)
## About The Pull Request Tin, should fix the following hard del and prevent similar instances:  There was nothing stopping something that was qdeleted from potentially being 'immersed' which is definitely not something that we ever want to be happening. ## Why It's Good For The Game Spurious CI failures are annoying ## Changelog Nothing player facing |
||
|
|
f033ac05a8 |
[MIRROR] Small hulk cleanup / nukes TRAIT_IGNOREDAMAGESLOWDOWN (#28882)
* Small hulk cleanup / nukes `TRAIT_IGNOREDAMAGESLOWDOWN` (#85003) ## About The Pull Request I was investigating a bug with hulk in which using it while damaged doesn't put you back on full speed I noticed `TRAIT_IGNOREDAMAGESLOWDOWN` on its own was subtly broken, in that it did nothing if the user did not call `updatehealth` afterwards And guess what, most (if not all) uses of the trait did not do this, so it never applied correctly So I nuked the trait entirely, made all uses of it use the same thing morphine uses (`/datum/movespeed_modifier/damage_slowdown`) And since I was auditing this I saw the ball module was broke, it removed the immunity but never added it. Quick fix I also cleaned up some Hulk stuff while I was in the area because I was in the area. I removed all instances of `check_mutation` and replaced it with trait checking because it made more sense. I also also fixed a bug with the simple flying element never removing on detach because I touched something that uses it for the above change. ## Changelog 🆑 Melbert fix: Using hulk (and a myriad of similar effects) now properly updates your movespeed to ignore the damage movespeed penalty fix: Some things which temporarily make you fly don't make you fly forever fix: MODsuit ball module now properly makes you immune to damage movespeed penalty when in ball form fix: Adding Hulk via VV dropdown doesn't default to adding the strongest hulk available (that which is used by the medieval pirates) /🆑 * Small hulk cleanup / nukes `TRAIT_IGNOREDAMAGESLOWDOWN` --------- Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> |
||
|
|
34f3f479ae |
Small hulk cleanup / nukes TRAIT_IGNOREDAMAGESLOWDOWN (#85003)
## About The Pull Request I was investigating a bug with hulk in which using it while damaged doesn't put you back on full speed I noticed `TRAIT_IGNOREDAMAGESLOWDOWN` on its own was subtly broken, in that it did nothing if the user did not call `updatehealth` afterwards And guess what, most (if not all) uses of the trait did not do this, so it never applied correctly So I nuked the trait entirely, made all uses of it use the same thing morphine uses (`/datum/movespeed_modifier/damage_slowdown`) And since I was auditing this I saw the ball module was broke, it removed the immunity but never added it. Quick fix I also cleaned up some Hulk stuff while I was in the area because I was in the area. I removed all instances of `check_mutation` and replaced it with trait checking because it made more sense. I also also fixed a bug with the simple flying element never removing on detach because I touched something that uses it for the above change. ## Changelog 🆑 Melbert fix: Using hulk (and a myriad of similar effects) now properly updates your movespeed to ignore the damage movespeed penalty fix: Some things which temporarily make you fly don't make you fly forever fix: MODsuit ball module now properly makes you immune to damage movespeed penalty when in ball form fix: Adding Hulk via VV dropdown doesn't default to adding the strongest hulk available (that which is used by the medieval pirates) /🆑 |
||
|
|
474ffe50ef |
[MIRROR] Flattens The Floor Plane (Camera Update Too) (#28632)
* Flattens The Floor Plane (Camera Update Too) (#84350) ## About The Pull Request Ok so like, side map right? It makes things higher up in the world render above things lower down in the world. Most of the time this is what we want, but it is NOT what we want for floors. Floors are allowed to be larger then 32x32, and if they are we want them to render based off JUST their layer. If we don't allow this grass turfs and others get cut off on their bottom edge, which looks WEIRD. In order to make this happen, we can add TOPDOWN_LAYER to every layer on the floor plane and disable sidemap. I've added documentation for this to VISUALS.md, and have also implemented unit test errors to prevent mixing TOPDOWN layers with non topdown planes (or vis versa). This new test adds ~1 second to tests, which is I think a perfectly scrumpulent number. EDIT: I nerd sniped myself and implemented sidemap layering and lighting for cameras (also larger then 32x32 icon support for getflat) The lighting isn't perfect, we don't handle things displaying in the void all that well (I am convinced getflat blending is broken but I have no debugger so I can't fix it properly), but it'll do. This came up cause I had to fix another layering issue in cameras and thought I might as well go all in.  ## Why It's Good For The Game Old:  New:  ## Changelog 🆑 fix: Grass turfs will render properly now. Reworked how floors render, please report any bugs! fix: Cameras now properly capture lighting fix: The layering seen in photos should better match the actual game /🆑 * Flattens The Floor Plane (Camera Update Too) * modular things * Update fluff.dm --------- Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: SpaceLoveSs13 <68121607+SpaceLoveSs13@users.noreply.github.com> |