mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-09 07:49:09 +00:00
57cc38c789aa8b664f69de6ccc19ec19cdccafde
291 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
3f0b4abb8d |
Replaces world.icon_size (and some magic numbers) with defines (#86819)
## About The Pull Request All usages of world.icon_size in code have been replaced with new `ICONSIZE_X`, `ICONSIZE_Y` and `ICONSIZE_ALL` defines depending on context Replaces some "32" magic numbers with the defines A few bits of code have been modified to split up x/y math as well ## Why It's Good For The Game Magic number bad, code more readable, code more flexible and I'm told there's an access cost to doing world.icon_size so minor performance gains ## Changelog 🆑 tonty code: made some code relating to the world's icon size more readable /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
199a5eff21 | Fix imaginary friends not being able to hear their host, some minor adjustments (#86863) | ||
|
|
9e3cf3fe59 |
Fix the greeting message you get upon becoming an imaginary friend including nulls (#86866)
## About The Pull Request Previously the imaginary friend greeting message would be called on `Login()`, but this meant that it could run before it actually linked the `owner` value, thus putting nulls in the message where the owner's name should've been. This just changes it so `greet()` is only called on `Login()` if there's already an owner linked, otherwise calling it when being attached to an owner. ## Why It's Good For The Game Better if the greeting message actually says whose imaginary friend you are. ## Changelog 🆑 fix: The greeting message imaginary friends get upon becoming one actually includes the owner's name, instead of displaying nothing where it should've been. /🆑 |
||
|
|
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 /🆑 |
||
|
|
74a5ac1a6f |
Allows admins to see previously obsessed players, minor obsession code cleanup (#86609)
## About The Pull Request Closes #86603 by adding a dummy antag datum that will be added to everyone who lost the trauma before losing the antag datum (i.e. from being "cured" from trauma in one way or another) Also added defines for obsession objectives ## Changelog 🆑 code: Minor obsession code cleanup admin: Admins can now see players who were previously obsessed but had been "cured" from the trauma /🆑 |
||
|
|
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

~~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
|
||
|
|
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> |
||
|
|
9a9b428b61 |
Wallening Revert [MDB Ignore][IDB Ignore] (#86161)
This PR is reverting the wallening by reverting everything up to
|
||
|
|
4d1639b04c |
Revert "Assorted changes to job assignment code and logging." (#85929)
Reverts tgstation/tgstation#85308  |
||
|
|
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>
|
||
|
|
9314a67724 |
Fixes a typo and bad punctuation in blackout drunk trauma message (#85661)
## About The Pull Request When looking through the code I noticed the blackout drunk message in the split_personality.dm file had a typo (liscense -> license) and bad punctuation + I think the sentences were structured a bit weirdly so I rearranged them. The meaning should be intact but it's grammatically correct and reads easier. ## Why It's Good For The Game spelling and grammar errors are bad and we should get rid of them ## Changelog 🆑 spellcheck: fixed spelling and punctuation in the blackout drunk split personality message /🆑 |
||
|
|
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> |
||
|
|
19b595632f |
Typo fixes and rewrites for some heretic items & traumas (#84214)
## About The Pull Request Fixes some typos. Rewrote some weird sentences that didn't scan right or weren't clear. Rewrites a lot of descriptions for the heretic paintings. Rewrites the painting-related traumas, made them more medical themed and vague. For example, the health scanner will no longer identify the ghost haunting someone and ruining their mood, it will instead report that the patient is hallucinating and depressed. Painting knowledge description got minor rewrites. The painting moodlets are rewritten to be a little more clear where they're coming from. ## Why It's Good For The Game Typo fixes mean players see less typos, which is self evidently good. The rewrites were because I didn't feel like a lot of this stuff was written to a high standard. It was riddled with typos, overly vague in a lot of places, and defaulted to using all caps for horror value far too often. It needed to be a little bit more direct and a little bit more subtle. I've tried hard to keep the original tone and intent but hopefully it's a little spookier now. Codex description got expanded because the old description didn't describe how the book looks which annoyed me a lil. |
||
|
|
747ecb9673 |
Fixes random organ unit test failures (#83900)
don't have to remove languages from something that's qdeling. |
||
|
|
df0e0811c2 |
Significantly increases stamina recovery on most effects that provide it (#83556)
## About The Pull Request Currently, stamina healing is a niche side effect on many drugs, besides a few effects (mostly heretic powers, an obscure side effect of some drinks) that actually contribute to a significant shift in gameplay style when you use them. In this PR I significantly increased the stamina recovery on almost every drug and some effects that provide it. Points of interest (not completely inclusive): Syndicate stimulants heal 12 instead of 5 stamina damage. This will bring you out of stam crit in two cycles, and let you heal out of the slowdown from the stamina damage from a baton strike. The current rate of 5 takes 5 seconds to heal out of stam crit, and the stamina reset takes place before you heal out of stamina damage slowdown. Bath salts heal stamina at the rate stimulants used to. Meth heals stamina slightly slower. Changeling adrenaline will instantly bring you out of stam crit if you're in it; otherwise, it will heal 10 stamina damage. Ephedrine heals 4 stamina per life, instead of 1. Being so drunk that you black out and give up your body to ghost control will make you heal stamina more quickly than an ascended rust heretic. You will also likely be dying of liver damage. ## Why It's Good For The Game At the levels they are set, most of these stamina healing effects have almost no effect on gameplay whatsoever except in the case of tanking a couple of extra disabler shots (only in the case of the high end drugs), or being able to do stamina consuming tasks slightly longer (breaking boulders, grinding with pestle and mortar, working out, ???). Adjusting these numbers would make these drugs an actual factor in combat situations that rely on stamina crit (stun batons, ebows, stamina damaging poisons and diseases). Most of the drugs already have side effects such as brain and organ damage, which in the current state hugely outweighs any reason to use most of them besides a few that give a movespeed buff or prevent baton knockdown (ephedrine, stimulants). This only affects stamina healing. There has been no change to any other interactions with things that knock down or cause any other kind of stun. These changes are in consideration of the fact that taking stamina damage puts you in a cooldown before you can recover your stamina naturally. Effects that cause steady stamina damage will bottom out your stamina the way they do now, unless you use something to heal it. ## Changelog 🆑 balance: Stamina healing has been significantly increased for most reagents and passive effects. /🆑 |
||
|
|
95ca5c0dcc |
RDS-havers now get Gibbering (#83850)
## About The Pull Request Player characters afflicted with the RDS brain trauma now get the gibbering language in addition to the ones they already know. the PR looks like a webedit (it is) because i cannot clone repos because my connection SUCKS but rest assured i tested it by just downloading it all normally ## Why It's Good For The Game someone who is insane may not always be able to articulate their ideas in a way we might consider "language," either by accident or on purpose just to show those stupid sheep. the greatest minds of the station need to be able to speak to one another without persecution for their ideas ## Changelog 🆑 PowerfulAtom111 add: after a quick galactic meeting, insane people around the universe can now speak gibbering to express their ideas free from the prying ears of the walls add: as an insane person, taking your meds deafens your ears to the holy tongue all the other insane people are speaking spellcheck: added a bit of text to the RDS quirk and the RDS medical record text to highlight the insane's new abilities /🆑 |
||
|
|
d5990c31d2 |
Implements some unused mood events into their relevant phobias. (#83796)
Implements some unused mood events found in #83741 🆑 ShizCalev fix: Seeing heretical stuff while having the heresy phobia will now apply the heresy mood event. fix: Seeing skeletons while having the skeleton phobia will now apply the spooked (by skeletons) mood event. /🆑 |
||
|
|
20aab4c7f9 |
Fix imaginary friend trauma and message range (#83590)
## About The Pull Request
So during a previous pr, attaching the imaginary friend to a host and
setting up its preferences were moved from initialization to two
separate procs. The _smite_ was then updated to account for this, but in
the process the brain trauma version was left behind- it even still
tried to add a nonexistent parameter when making a new imaginary friend.
We first fix this by having those two procs be called during
`add_friend(...)`, after finding and assigning a ghost.
```dm
/datum/brain_trauma/special/imaginary_friend/proc/add_friend(mob/dead/observer/ghost)
if(isnull(ghost))
qdel(src)
return
friend.key = ghost.key
friend.attach_to_owner(owner) //new
friend.setup_appearance() //new
friend_initialized = TRUE
friend.log_message("became [key_name(owner)]'s split personality.", LOG_GAME)
message_admins("[ADMIN_LOOKUPFLW(friend)] became [ADMIN_LOOKUPFLW(owner)]'s split personality.")
```
This solves our first issue, where this not being called made every
brain trauma imaginary friend get banished to gay baby jail where they
do not have an appearance, cannot move from their spot, cannot be heard,
and emit runtimes constantly.
Testing this brings us to our second issue, where the host couldn't
actually hear their imaginary friend unless they were at most one tile
away, and would get their message starred if not on the exact same tile.
Looking into it, this seemed to be because `Hear(...)` now had a
`message_range = 0` parameter which we don't actually set here.
Upshot! This seems to let us gut the whisper starring code on our side
and just proxy the right message range to `Hear(...)`.
So we gut our code a bit and do just that, and this fixes it.
## Why It's Good For The Game
Fixes #81138.
Fixes imaginary friend brain trauma being non-functional and emitting
runtimes like hell.
Fixes imaginary friends not being audible to their host beyond a one
tile distance.
## Changelog
🆑
fix: Imaginary friend brain trauma works again.
fix: Imaginary friends can be heard by their hosts from more than a tile
away again.
/🆑
|
||
|
|
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> |
||
|
|
e81f9c6ef0 |
Replaces move_on_shuttle with a trait (#83550)
## About The Pull Request `move_on_shuttle` was a variable that existed on `/mob` despite only ever being used by cameras. This PR downgrades the variable to only exist on `/mob/camera` types, but have the only thing that variable do is add a trait that blocks movement on shuttles if not allowed. This allows us to check the variable without casting to camera, which is what some code was un-necessarily doing. This also retainst the ability to add the trait later on to different mobs who we may not want to be on shuttles that aren't `/mob/camera`. ## Why It's Good For The Game There's no point for this variable to live on `/mob` if all it can do is clog up the VV screen, especially if the current utilization for it is only cameras. Let's move it off `/mob` and turn it into a trait so it still has the similar utilization on a global level without typecasting - as well as make it actually work since needless typecasting was introducing a minor bug ## Changelog Irrelevant. --------- Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> |
||
|
|
93b2f48c49 | Log trauma gain and loss (#83519) | ||
|
|
0cc5cfb178 |
Random Name Generation refactor, generate random names based on languages (for species without name lists, like Felinids and Podpeople) (#83021)
## About The Pull Request This PR moves random name generation for species onto their languages. What does this mean? - For species with a predefined name list, such as Lizards and Moths, nothing. - For species without predefined name lists, such as Felinids, their names will now be randomly generated from their language's syllables.   (In the prefs menu:)  Why? - Well, we actually had some dead code that did this. All I did was fix it up and re-enable it. - Generates some pretty believable in-universe names for various languages that are lacking name lists. Obviously defined lists would be preferred, but until they are added, at least. - Moves some stuff off of species, which is always nice. - Also hopefully makes it a tad easier to work with name generation. There's now a standard framework for getting a random name for a mob, and for getting a random name based on a species. Misc: - Adds a generic `species_prototype` global, uses it in a lot of places in prefs code. - Makes `GLOB.species_list` init via the global defines - Deletes Language SS - Alphabetizes some instances of admin tooling using the list of all species IDs - Docs language stuff - Deletes random_skin_tone, it does pretty much nothin ## Changelog 🆑 Melbert refactor: Random Name Generation has been refactored. Report any instances of people having weird (or "Unknown") names. qol: Felinids, Slimepeople, Podpeople, and some other species without defined namelists now automatically generate names based on their primary language(s). qol: More non-human names can be generated in codewords (and other misc. areas) than just lizard names. /🆑 |
||
|
|
153d09e4c4 |
Fix Primal Instincts (#82741)
## About The Pull Request #82539 randomly made these two lines switch their AI controllers to idle rather than on, when the intent was for them to wake up immediately to do make the mob attack or fight or do something ## Changelog 🆑 Melbert fix: Primal Instincts and Living Flesh should be a tad more reactive /🆑 |
||
|
|
7f8752be14 | Admin Verb Datums MkIII | Now with functional command bar (#82511) | ||
|
|
e0d335b442 | Fixes AI lag by re-adding idle mode to all AI that was lost with the simple mob to basic mob conversion. (#82539) | ||
|
|
c403a6eccc |
Wraps lowertext() to ensure proper stringification. (#82442)
## About The Pull Request Fixes #82440 This PR just creates a new macro, `LOWER_TEXT()` (yes the irony is not lost on me) to wrap around all calls of `lowertext()` and ensure that whatever we input into that proc will be stringified using the `"[]"` (or `tostring()` for the nerds) operator. very simple. I also added a linter to enforce this (and prevent all forms of regression) because I think that machines should do the menial work and we shouldn't expect maintainers to remember this, let me know if you disagree. if there is a time when it should be opted out for some reason, the linter does respect it if you wrap your input with the `UNLINT()` function. |
||
|
|
9723b4b317 |
Replaces even more deciseconds with SECONDS (#82438)
## About The Pull Request
Using these search regexes:
Ending in 0:
`addtimer\((.*),\s?(\d{1,3})0\b\)`
replacement:
`addtimer($1, $2 SECONDS)`
Two digit ending in odd:
`addtimer\((.*), (\d)([1-9])\)$`
replacement:
`addtimer($1, $2.$3 SECONDS)`
Single digit ending odd:
`addtimer\((.*), ([1-9])\)$`
replacement:
`addtimer($1, 0.$2 SECONDS)`
## Why It's Good For The Game
Code readability
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
|
||
|
|
19ab4708c3 |
Adds three brain traumas (feat. returning to monkey) (#82129)
## About The Pull Request - Adds "Primal Instincts" brain trama. - Special trauma - Randomly, your body will be taken over by monkey AI. - You will still be in control of the body, but you will have to fight against the monkey ai for actions. - There is a probability the monkey AI that takes control is aggressive, meaning it will attack anyone nearby. - While primal, you can understand monkey language. - Adds "Kleptomania" brain trauma - Severe trauma - When you have empty hands, you will passively try to pick up things near you. - There is no feedback message associated, so you may not even notice you did this. - This effect is temporarily disabled if you have taken damage recently. - Adds "Possessive" brain trauma - Mild trauma - Randomly, your held items will become undroppable for a short to medium length of time. ## Why It's Good For The Game I was looking through AI stuff recently and remembered we support allowing AI controllers to work in cliented mobs, but we don't use it anywhere (outside of adminbus) So I wanted to add a brain trauma themed around that. Simple enough. But I didn't want to PR just a single trauma, that's boring so I thought of some additional ones. Just to spice up the other two trauma pools. I especially wanted to add some traumas that interact with inventory and items, because while a lot of our traumas involving how a person interacts with the world, not many involve how a person interacts with themself. ## Changelog 🆑 Melbert add: Adds 3 Traumas: Primal Instincts (special), Kleptomania (severe), and Possessive (mild) /🆑 |
||
|
|
47dc38fee2 |
Let's you talk through action figures, plushies, and toy mechs with .l and .r. Also a big clean up of say because its support for non-mobs was lackluster. (#81848)
|
||
|
|
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 |
||
|
|
d6319d2b87 |
Lots of description changes and grammar fixes for heretics (#81761)
## About The Pull Request Changes a lot of text. Apart from grammar fixes, here are the notable changes: - Ash jaunt description just said it is a "short range jaunt" without explaining what exactly a jaunt is. I believe it is better to describe without comparing to another spell the player may not have experience with. - Cosmic grasp now explains what the deal is with star marks and cosmic fields. It is still possible to crosspath into a star mark spell, skipping this description, but I assume a player like that is experienced enough to know what the star mark does anyway... - The knowledge for ash spirits no longer refers to them as "Ash Men" - "Ash Spirit" is the mob's actual name. If you think "Ash Man" is a better name, I can change it around so that the mob gets renamed that instead. - Removes the lines from paradoxical curio's description about causing brain damage on examination - many heretic items cause adverse effects to heathens who try to interact with them, and there is never a need to clutter the description with them. - Changes the eldritch coin description, because the old one was, in my opinion, awkward. I changed it to be more inline with the other items' descriptions, and to not tell non-heretics what its purpose is. If you liked the old one better, I can revert this change. ## Why It's Good For The Game Grammar good. Accurate descriptions good. ## Changelog 🆑 fix: made some heretic descriptions more accurate spellcheck: improved english of the heretical eldritch patrons /🆑 |
||
|
|
35242b4985 |
NEW TRAIT ROLE: Veteran Advisor (#81667)
## About The Pull Request Adds a new Trait Job (jobs which only appear when the station gets a trait for it) - Veteran Advisor. The weight of the trait is 2 which makes it very rare. Veteran Security Advisor is a role designated as a (duh) Advisor for the HoS and Captain, as well as a mentor for all of the Officers. This is because it has an experience requirement of **100 SECURITY HOURS**, so no green Veterans. Veteran Security Advisors are paraplegic (bonded to a wheelchair) and with PTSD which freezes their mood and sometimes causes hallucinations. They get an M1911 pistol in a holster because that's badass. <details> <summary>THE IMAGES</summary> ADVISOR  THINGS HE SPAWNS WITH  HIS UNIQUE MOODLET  SIGNUP BUTTON  </details> ## Why It's Good For The Game More funny Trait Jobs to the game! There is a certain lack of those, there is only Cargorilla and Bridge Assistant. This job has big opportunities. Advisors can behave themselves like drill sergeants, or wise old mentors. Because they are kinda, as people only with 100 Security hours (yes those masochists exist) could play it when it appears. This will also open opportunities for retired Sec mains to tutor new generations without being directly involved in all of the stress. I mostly took a look at the Goonstation "Nanotrasen Security Consultant" and Baystation "Senior Enlisted Advisor" as inspiration. I tried to cut down any chances of this role being abused by power gamers for its M1911 pistol and Bridge access, due to this they are paraplegic so power gamers get disgusted, and if someone does somehow win Antagonists while in a wheelchair - props to them, pure skill. **REMEMBER THAT THIS IS A TRAIT JOB!** This means they won't appear every round, but rather rarely! So they fit in as an occasional extra fun for the round. ## Changelog 🆑 add: NEW TRAIT JOB: Veteran Security Advisor! Advise HoS and Captain on Security matters, mentor Security Officers. Note that they are paraplegic and fully emotional desensitized due to their past experience. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
081b84c631 |
Painkillers now actually induce analgesic effects (#81335)
## About The Pull Request This adds a new trait, `TRAIT_ANALGESIA`, and makes various painkillers (+ tenacity trauma) apply said trait. This prevents various pain-related effects, such as screaming due to pain, and also provides a speed bonus during surgery. ## Why It's Good For The Game Gives more of an incentive to actually use reagents such as morphine or miner's salve. ## Changelog 🆑 add: Painkillers (i.e morphine, miner's salve) now actually induce analgesic effects, preventing various pain-related effects, such as screaming due to pain, and also provides a speed bonus during surgery. add: The tenacity trauma (traumatic neuropathy) also applies analgesic effects. refactor: Simplified code related to reagents adding traits. /🆑 |
||
|
|
e21dc5fec7 |
Kicks Martial Arts out of the attack chain (yippee), makes it use signals, plus a large clean up of existing martial arts (#81097)
## About The Pull Request - Kicks Martial Arts out of the attack chain. - All Martial Arts attacks are now handled via unarmed attack or grab signals - This means all martial arts are now technically on the living level, allowing any mob that can unarmed attack to martial arts. Sort of. YMMV. - All martial arts block checking is now handled by the arts themselves, meaning you can selectively decide for a martial arts strike to not be blocked. Maybe good for the future. - A comprehensive cleanup of all existing martial arts. Improving var names, code, adding some missing animation calls, etc. Fixes #74829 ## Why It's Good For The Game Untangles the mess that is martial arts, making it a lot easier to work with the attack chain and making it overall a ton more consistent. ## Changelog 🆑 Melbert refactor: Big martial arts refactor, they should now overall act a ton more consistent. Also technically any mob can do martial arts. Let me know if something is funky. /🆑 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> |
||
|
|
fc0a1f4068 |
Removes timeout_mod arg from add_mood_effect (#80964)
## About The Pull Request Partial Revert of https://github.com/tgstation/tgstation/pull/80800 Assuming every num passed in the parameters of `add_mood_effect` is a `timeout_mod` is incorrect, because there can be mood events that take a numeric arg which is not meant to be multiplied against the timeout. This leads to the same issue as multiplying it with strings essentially (in one case, shown below, this results in a negative duration of a timer).   Plus having a keyword arg that may or may not actually be what the keyword arg claims to be is really confusing and bad. Instead here's what I propose: passing in an instantiated mood datum itself, which has been modified, and copying the timeout from it before discarding it. It is not as clean as I'd prefer either, but at least it's logically sound and the intent is clear, and it's the best I can think of short of a major refactor of the entire system for this one small thing which is only being used by food quality.  ## Why It's Good For The Game Clearer, less smelly code. ## Changelog 🆑 code: removed the timeout_mod arg from add_mood_event, which was only used for one thing and causes more issues than it's worth /🆑 |
||
|
|
27386bffe8 |
fixes a bunch of moodlets potentially lasting forever (less band-aidy) (#80800)
## About The Pull Request In a previous PR (https://github.com/tgstation/tgstation/pull/79661), I noted that a lot of moodlets tended to have their timeouts break because it was passing their names and whatnot as a parameter, that gets fed into the timeout modifier parameter, causing the timeout multiplier to break, because BYOND type-agnosticism means that it can multiply a number (timeout_mod) by text (a name or some other object), resulting in 0 - which makes a moodlet permanent. This is probably not intended. This fixes that in two ways: - Adding a `1` to potentially applicable moodlets (searched for with a regex of `.add_mood_event(.*, .*,)`) just to make sure the timeout doesn't get multiplied out weirdly. - Making the add_mood_event thing CRASH() if the timeout_mod is bad. If someone else wants to come up with a solution better than this, please do. ## Why It's Good For The Game Maybe having your arm permanently fall asleep after getting it reattached sucks, moodlet-wise. (Being stuck with permanent positive/negative moodlets is probably not intended.) ## Changelog 🆑 fix: Moodlets with parameters/effects e.g. limb reattachment moodlets should probably disappear more appropriately. /🆑 --------- Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com> |
||
|
|
f88da4bcb9 |
Heretic DLC: Path of Moon (#79536)
## About The Pull Request
This pull request adds a new path.
The cross path is between ash and lock.
Credit to Fury McFlurry for the following sprites:
ring_leader_effect
The path goes as follows:
Moonlight Troupe
Grasp of Lunacy
Smile of the moon
> Sidepaths:
Mind Gate
Ashen Eyes
Mark of Moon
Ritual of Knowledge
Lunar Parade
Moonlight Amulette
> Sidepaths:
Curse of Paralasys
Unfathomable Curio
Unsealed Arts
Moonlight blade
Ringleaders Rise
> Sidepaths:
Ashen Ritual
Last Act
Moonlight Troupe:
The first knowledge of path of moon, lets you make Lunar Blades with 2
iron and a knife
Grasp of Lunacy:
The grasp of this path hides your name for 15 seconds after use, but
more importantly it causes the person hit with the grasp
to hallucinate everyone as indistinct human like figures.
Smile of the Moon:
A pointed spell that causes temporary blinding, muting, deafening and
confusing on the person its targeted at, these effects
last longer the less sanity your victim has.
https://github.com/tgstation/tgstation/assets/120136161/db7cfaaa-8fe2-4f20-aa78-c17c17be4d63
Mindgate:
Lock-Moon. This spell causes you and your victim brain damage, the
victim also suffers a short amount of hallucinations
and also 20 oxyloss.
https://github.com/tgstation/tgstation/assets/120136161/11d15acd-11d0-4e7d-a180-6481b18e9fd9
Mark of Moon:
When applied this paths mark pacifies the victim and they remain
pacifist until attacked or until the mark is detonated, when
detonated the victim is left confused.
https://github.com/tgstation/tgstation/assets/120136161/41e601b5-76d4-4765-8b49-ada7de09feb7
Lunar Parade:
A spell that sends out a projectile that causes people hit by it to
follow the projectile whilst being unable to move. The
projectile also bounces around and is really useful to get people off
your back during chases.
https://github.com/tgstation/tgstation/assets/120136161/cddc8390-e8aa-4d68-b1a5-ab181e941a9b
Unfathomable Curio:
Transmute 3 rods, a brain and a belt into an Unfathomable Curio a belt
that can hold blades and items for rituals. Whilst worn
will also veil the heretic, allowing them to take 1 hit without
suffering damage, this veil will recharge quickly outside of
combat. If examined the examiner suffers brain damage and temporary
brain damage, and if a non-heretic uses it once the shield is damaged
the non-heretic user suffers massive brain damage and a permanent
uncurbable brain trauma. Lock-moon
Unsealed Arts:
Allows you to transmute a canvas and an additional item to create a
piece of art, these paintings have different effects depending on the
additional item added. Lock-moon
Possible paintings:
The sister and He Who Wept:
Additional atoms: Eyes.
When a non-heretic looks at the painting they will begin to hallucinate
everyone as heretics.
The First Desire:
Additional atoms: Any bodypart.
Increases the hunger of non-heretics, when examined drops an organ or
body part at the painting.
Great chaparral over rolling hills:
Additional atoms: Any grown food.
Spreads kudzu when placed, when examined grants a flower to the heretic.
Lady out of gates:
Additional atoms: Gloves.
Causes non-heretics to scratch themselves until they remove their
jumpsuit, when examined removes all your mutations.
Climb over the rusted mountain:
Additional atoms: Trash.
Causes non-heretics to rust the floor they walk on and when examined
gives you a cool moodlet
These effects are mitigated for a few minutes when a non-heretic
suffering an effect examines the painting that caused the
effect. Except for great chapparal which spawns kudzu at their feet, and
Lady out of gates which gives them a random negative mutation.
https://github.com/tgstation/tgstation/assets/120136161/1d1bdd2f-cda5-4430-b3af-4742f98a59a8
https://github.com/tgstation/tgstation/assets/120136161/4e843ae4-9786-4e9b-8681-582713f4c789
Moonlight Amulette:
Allows the heretic to transmute 2 sheets of glass, a pair of eyes, a
brain and a tie. If the amulette is used on someone with low
sanity they go berserk attacking everyone if their sanity isnt low
enough it decreases their mood. Optionally you can add a
poppy in the ritual to further decrease their mood on hit.
https://github.com/tgstation/tgstation/assets/120136161/ab820b3f-e7e6-407a-9a1a-93d49c0d7387
Moonlight Blade:
Causes the heretics blades to do brain and sanity damage whilst causing
hallucinations. The blades also cause giggling and
laughter on hit.
Ringleaders Rise:
An AoE spell that deals more brain damage the lower the sanity of the
victim, also causes hallucinations that last longer the
lower the sanity of the victim. If the victims sanity is low enoughit
causes them to go insane, the spell then halves their sanity.
This spell is on a longer cooldown and is more meant to be used as a
payoff or an instigator for a fight. The AoE area is 7 tiles
https://github.com/tgstation/tgstation/assets/120136161/4de85ba2-448a-485c-b739-77fcce86c0cb
Last Act:
The ascension lowers the cooldown of all the heretics spells by 33% and
increases the AoE range of Ringleaders Rise. The main
effect of this ascension is a passive sanity drain and hallucination
aura, if you have low sanity in the aura you will start to suffer
brain damage and if you reach the bottom you gain an aura of
hallucinations thus spreading the moon heretics influence
further. Not only that but roughly 1/5th of the crew will rise in
support of you becoming mini-heretics called acolytes that will attempt
to obey your commands!
I had videos showing off everything but they were too big for github
sadly so I will have to think of some other way to showcase all this
stuff.
This pr also adds a new optional atoms system which means that you can
have rituals that can be improved by adding additional atoms, like for
example moonlight amulette.
Feel free to give some suggestions for further ascension effects.
## Why It's Good For The Game
I feel like heretic is really missing a playstyle around insanity and
this slots neatly in to feel that gap. For being an eldritch antag of
horrors there is surprisingly little interaction with the sanity system
and I feel like this makes up for it, heretic is also missing some
distractions which is where the paintings can really shine and the
hallucinations which breed paranoia.
## Changelog
🆑
add: A new heretic path opens up! Gaze up at the great sky for the path
of the moon opens and the lie shall be slain in pursuit of ultimate
truth!
fix: Fixes the syndicate delusion not working
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
|
||
|
|
908d6f1a2b |
Better Ghost Selection (#80283)
## About The Pull Request Revived my old PR https://github.com/tgstation/tgstation/pull/68901 Replaces the annoying tgui alert popup "Do you want to be X? | Yes | No | Never for this round" that is hard to read and steals window focus, with a nice clean alert in the top right that counts down. If it's the same event/mob they stack with 2x, 3x, etc. It also shows how many candidates/ghosts are signed up. The poll alerts have screentips too, they countdown and show if you're signed up, how many people are signed up, if you chose "never for this round" (which is cancelable) ## Why It's Good For The Game  Way easier to see what role is available, you get a nice pic of the role and get it's name in big text, you can cancel "never for this round", and you can cancel signing up for a role before the timer is up ## Changelog 🆑 refactor: Ghost roles now offer ghosts a clickable poll button. Ghosts can select a role, deselect it, alt-click it for "Never For This Round", can cancel "Never", can see the countdown, and can see how many other people are signed up for the role poll. /🆑 |
||
|
|
fc1e5bfdba |
Obsession targets are logged (#80361)
## About The Pull Request Obsession targets are logged ## Why It's Good For The Game Obsession targets are logged ## Changelog 🆑 Tattle admin: obsession targets are logged /🆑 Co-authored-by: tattle <article.disaster@gmail.com> |
||
|
|
f03084c1ca |
FOV is Dead (Long Live FOV) (#80062)
## About The Pull Request FOV as it is currently implemented is incompatible* with wallening. I'm doin wallening, so we gotta redo things here. The issue is the masking of mobs. Wallening relies on sidemap (layering based off physical position), which only works on things on the same plane (because planes are basically sheets we render down onto) So rather then masking mobs, let's reuse the masking idea from old fov, and use it to cut out a bit of the game render plane, and blur/over-saturate the bit that's masked out. My hope is this makes things visible in light, but not as much in darkness, alongside making more vivid shit more easily seen (just like real life) Here's some videos, what follows after is the commits I care about (since I had to rip a bunch of planes to nothing, so the files changed tab might be a bit of a mess) Oh also I had to remove the darkness pref since the darkness is doing a lot of the heavy lifting now. I'm sorry. Edit: NEW FOV SPRITES! Thanks dongle your aviator glasses will guide us to a better future. https://github.com/tgstation/tgstation/assets/58055496/afa9eeb8-8b7b-4364-b0c0-7ac8070b5609 https://github.com/tgstation/tgstation/assets/58055496/0eff040c-8bf1-47e4-a4f3-dac56fb2ccc8 ## Commits I Care About [Implements something like fov, but without the planes as layers hell]( |
||
|
|
53304ed25d |
Blackout drunkard warning adjustment (#80210)
## About The Pull Request This adjusts the "you have 50 seconds before sobering up!" warning for the blackout-drunkard split personality. Originally, this message would always send when 50 seconds are left, meaning you'd get a "50 seconds left" warning every second, for the last 50 seconds. Now, instead of that, you get a warning starting at the 60 second mark, that updates you every 20 seconds. So basically, you get a warning at 60, 40, and 20 seconds left instead of every second for the last 50 seconds of drunkenness |
||
|
|
c2e5e2f0a8 |
Fixes the typing indicator (#80153)
## About The Pull Request
It was very specifically broken by [this
commit](
|
||
|
|
904c81bbcd |
Moves thinking_IC variable to a trait (#80122)
## About The Pull Request This was another boolean that was used to just manage stuff codeside that really was not accessed _too_ much and is ultimately not useful as a variable on `/mob`. This just moves it to a trait because it's only really used in a few spots for a similar intent+purpose. ## Why It's Good For The Game Less stuff to deal with in the average view variables window whenever looking at a mob, which is really nice and welcome. ## Changelog Doesn't concern players. |
||
|
|
c00f7d53a3 |
The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing medications! This push includes... **Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that provides a decent range of benefits for plant life. **Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that promotes the growth of muscle during and after exercise. **Bamethan** : Inverse of Salbutamol. Blood thinner that drastically increases the chance of receiving bleeding wounds. **Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug that purges basic radiation healing chems. Also increases the severity of radiation poisoning. **Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage, and slowly removes minor toxin damage. **Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking mess of mercury by-product which causes bursts of manic hysteria. **Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of all things related to carps. This is an effort to add more variety to the existing inverse reagent system within chemistry. Not only should this variety serve to provide additional options for a Chemist to experiment with, they should also broaden the possibilities for already existing strategies. |
||
|
|
bbe440b3d6 |
More standardization for ghost notifications (READY) (#79596)
## About The Pull Request I'm still not satisfied with how ghost notifications work. This gives every notification with a source (99% of all notifications, in other words) a link to jump/orbit. Currently, notifications with "play" interactions would only get the interact link, so jumping to the source was pretty annoying. It removes posting the entire message in the alert tooltip, as some got pretty lengthy and it didn't seem to fit. To replace this, they will always use headers After:    NOTIFY_JUMP and NOTIFY_ORBIT have been merged, since the only difference seems to be whether it's a turf. The result shaves off some redundant lines of code, since most-every usage of notify_ghosts uses NOTIFY_ORBIT. ## Why It's Good For The Game More standardization for the ghost notification system. Adds a few alert headers that never had them. All in all, makes it easier for creators to throw alerts at ghosts ## Changelog 🆑 qol: Nearly every ghost alert should now feature a "VIEW" button, even those with click interaction. del: Ghost alerts no longer show the entire message in the tooltip, instead have been replaced with titles. /🆑 |
||
|
|
1a204ec4eb |
Fix split personality commune being unusable I think (#79631)
## About The Pull Request Likely fixes #79586 and likely fixes #78081 . Split persons's loc is their parent mob, so they were being disallowed from casting due to not being loc's in a turf. Further testing required ## Changelog 🆑 Melbert fix: Split persons can talk to their host once again /🆑 |
||
|
|
73d108025f |
Adds wibbles to certain anomalous entities (#79549)
## About The Pull Request Adds wibble animation to portals, some anomalies, and bluespace rifts. https://github.com/tgstation/tgstation/assets/51863163/9355dc53-590e-4558-82a3-15145829ce16 ## Why It's Good For The Game It looks kinda cool. Helps cement these as anomalous, wacky things that don't necessarily fit in our plane of existence. ## Changelog 🆑 Melbert add: Anomalies, portals, and bluespace rifts will now wibble a bit. /🆑 |
||
|
|
5f1125c902 |
Drunken Blackout cannot be gained randomly. (#79526)
## About The Pull Request Fixes #79138. Removes random gain from Alcohol-Induced CNS Impairment, making it only obtainable by actually getting blackout drunk, rather than just bashing your head in with a bat to see what happens. ## Why It's Good For The Game The drunken blackout trauma has a specific flavor tied to the method of gaining it, which is to say, getting drunk off your shits. It doesn't make much sense for it to be gained from other sources of brain damage, since those largely don't involve actually being drunk. This should also fix a bug where the text "**_is blacking out!_**" will randomly appear to observers without any name or anything, which appears to happen when random human corpses have their brains decay enough to randomly receive this trauma while dead. I think there's something to be said for the idea that corpses should not be rolling traumas at all, but that's something for another day. ## Changelog 🆑 fix: You will now only become blackout drunk if you've actually been drinking. fix: Observers should stop being notified that a nameless entity is blacking out. /🆑 |
||
|
|
3c7005a37c |
Converts some notify_ghosts args to bitflags, multilines all notify_ghosts calls (#79320)
## About The Pull Request This helps clean up my favorite helper proc in the whole codebase, `notify_ghosts()`. The notify_suiciders, ignore_mapload, and flashwindow args are GONE. They have been replaced with the notify_flags bitflag argument. This was intended to make deadchat announcements a bitflag argument too, but those got reverted right before I originally wanted to submit this PR. The on-screen popup now shows the notification body when you hover it with your mouse again. The format is now `[notify_ghosts message] -- [click action (orbit/jump/play)]` Every single `notify_ghosts()` call has been changed to multiline format and has been given trailing commas. Pretty! ## Why It's Good For The Game Cleans up a proc that is very popular and going through a lot of changes at the time. Allows for further flexibility when this proc inevitably gets tweaked or improved. 12 -> 10 args is an improvement, and it doesn't impact the helper's flexibility at all. ## Changelog 🆑 Rhials code: The notify_ghosts proc has been cleaned up. Please report any abnormal changes in deadchat notification behavior. qol: The on-screen deadchat popups now contain the notification blurb when hovered with your mouse again. /🆑 |
||
|
|
e03822fe1d |
Standardizes Adding Datum Actions into a proc/define (Bonus AI Support) (Bonus Useless Code Cleanup) (#79389)
## About The Pull Request The way we add multiple actions has been very unstandardized, with several implementations of this code doing certain things wrongly (i.e. not nullchecking `ai_controller`), so let's do something in the vein of #74037 and just make one nice big ol' proc that catches a lot of these cases. There are still a few things that simply can't be done here, but this gets the most generic "give my mob some actions and also maybe tell the AI about it" stuff done. This is only useful in cases where we don't ever need to reference the ability ever again when it's added. In an ideal world we would never need to reference the ability again and it would all be self-contained, but this is not an ideal world. However, a lot of the latticework has been built around certain implementations of this behavior making refactoring it just a bit easier. I also did a lot of auditing on `Destroy()` stuff, because `/datum/action`s listen to signals when their parent is `qdel`ing, so we don't need to neither hold nor clear references on our mob's `Destroy()`. This was all cleaned up now because even if we couldn't use `grant_multiple_actions()` (the new proc I add in this PR), it's just not useful at all and will further hinder efforts to implement this new proc. Also also, I noticed in some places (such as megafauna) that we were initializing a lot of datum actions _in nullspace_. We didn't pass the `src` argument to `New()`. I quickly fixed that, as well as got rid of the useless types we had going on. Also also also, I added a define macro to handle some of the cases that melbert was speaking about in his review down below. All you need to do is invoke the define on the typepath, and you should be good to go from there. There's probably a better way to do it, lmk though. we do the whole `do while` thing in order to prevent code leakages. ## Why It's Good For The Game * Very easy to change the implementation. In case we need to do something different in how we add actions or anything like that, we can simply just edit instances where this proc is located. * Standardizes addition behavior. There's a lot of cases like the aforementioned not-null-checking `ai_controller` that we really need to look out for, so having it all in one accessible proc ensures standard behavior. * Reduces copy-pasta. A lot of mobs had their own individual implementation of this, so let's just clean up all those lines of code. ## Changelog 🆑 refactor: The way mobs get specialized actions (like revenants shocking lights or regal rats summoning rats to their side when you slap them) have been modified, please report any bugs. /🆑 This doesn't touch the following case FTR: * Instances where we need to do work on the `/datum/action` after we `Grant()` it, like if we were to edit some variable on the action or if we need to call procs on said action. I don't like how the current code is so reliant on storing a variable to it, but that's a windmill to attack another time. |