* Allow admins to cancel dynamic midround events (+ another 2 year old Dynamic fix!) (#57248)
Admins will now be warned with a 10 second timer about a midround event. They will have the option to cancel it, or to replace it with a different midround event.
Fixes a bug where the "Execute" midround ruleset button would not force the chance correctly (FUCK the term "dry_run").
Moves out dynamic ruleset picking to its own file, as in line with the rest of the code splitting I've done. Makes it nicer to work with, as opposed to a several thousand line script.
* Allow admins to cancel dynamic midround events (+ another 2 year old Dynamic fix!)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Adds unit test for spawned food edibility (#57232)
* Adds unit test for spawned food having reagents
- Adds stack trace for biting food failing due to a lack of reagents
- Adds checks for seed var being set under food/grown's initialize() in grown.dm
- Fixes issue with gondola meat code duplicated for penguin meat slabs resulting in a runtime and being unable to slice penguin meat
- Adds seeds for bombananas
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Adds unit test for spawned food edibility
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Fix injection chance always proccing (#57093)
A bug introduced 2 years ago through this diff, which I have no idea
what it was doing. The developer of this hash has apparently left the
SS13 development community, and so I can't ask them their reasoning
behind this. get_injection_chance() always returns a chance, it has no
RNG of its own.
0b90ce9
This is something that shouldn't be taken super lightly, as Dynamic
2021 was balanced entirely around the results of actual rounds, and so
it's possible with this that midround injection becomes way too
uncommon. Worst case scenario, I'll adjust the timers of injection to
try and get a reasonable match.
* Fix midround dynamic injection chance always proccing, another 2 year old Dynamic bug
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Fix multiple high impact rulesets being chosen (#57036)
About The Pull Request
This was code I didn't touch but just never worked. I'm pretty sure this is the fix.
Changelog
🆑
fix: Fixed multiple high impact rulesets being chosen on Dynamic.
/🆑
* Fix multiple high impact rulesets being chosen on Dynamic
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Refactors sharpness to use a bitfield (#56817)
Refactors sharpness to use bitfield instead of bitflags in case someone wants to add more types of sharp things, or unique behaviour with them
* Refactors sharpness to use a bitfield
* Update bullets.dm
Co-authored-by: Sparkezel <53384660+Sparkezel@users.noreply.github.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Fix dynamic parameters ignoring configuration (#56778)
Dynamic was ignoring the parameters in dynamic.json, because they were being ran in can_start, which runs before pre_setup. This has been moved to its own proc which is correctly called after configuration.
Let this be a lesson in why you should not be putting side effects in functions that don't imply they are impure.
* Fix dynamic parameters ignoring configuration
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* Fix forcing certain roundstart rulesets dividing by zero (#56728)
It was trying to scale HIGH_IMPACT_RULESETS, which are not lone. This generalizes it to checking for a scaling cost.
Fixes#56722
* Fix forcing certain roundstart rulesets dividing by zero
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* [READY] Adds station traits: Small modifiers that can randomly be chosen each round
* conflicts
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Moves /datum/var/signal_enabled to datum flags (#56372)
* Moves /datum/var/signal_enabled to datum flags
`signal_enabled` is a variable on /datum, so present almost every object
in the game. Folding it into the existing `datum_flags` variable will
save allocating a variable on every datum in the game.
- Clown weaponry was using the `signal_enabled` variable to turn their
attached slippery component on and off when the shield/sword was
toggled. They now just remove/add the component, rather than touching
deep datum internals.
* Moves /datum/var/signal_enabled to datum flags
Co-authored-by: coiax <yellowbounder@gmail.com>
* renames metal sheets to iron sheets
* Merge branch 'master' into upstream-merge-56643
* yay metal
* Update DeltaStation2_skyrat.dmm
* a
* Update CentCom_skyrat_z2.dmm
* a
* a
Co-authored-by: Fikou <piotrbryla@onet.pl>
Co-authored-by: Gandalf2k15 <jzo123@hotmail.com>
* Dynamic 2021 (#56221)
About The Pull Request
Dynamic 2021, among much other things, splits the threat level into two separate budgets, one for round start and one for midround/latejoin. You can read the design doc, plus methodology and charts here: https://hackmd.io/@ tgstation/S1C4dYJkO.
To server owners: this is incompatible with current dynamic.json configurations. This is not just because some fields have different values now, but because the older values are not balanced towards this system.
Inidividual list of changes (as I remember them):
Threat level is now split into two separate budgets, one for round start and one for midround/latejoin.
In TESTING, you can now run dynamic simulations to see the roundstart picks.
antag_cap is now based on an equation rather than a fixed list of antags per indice--the old system is not scalable. You can now pass it either a number for a fixed constant, or a list with "denominator" and an optional "offset" to fit the equation ceil(x / denominator) + offset, with x being population.
Midround/latejoin timers are now vars on /datum/game_mode/dynamic itself, and thus can be configured by head admins per server.
Removes some older, as far as I can tell completely unused admin tools relating to dynamic.
autotraitor_cooldown is now properly respected from config, and is based on an exact time rather than on ticks (450 used to be 15 minutes, now it's just 15 MINUTES).
The rulesets dynamic chooses are now in a dynamic.json file in round logs. Relies on tgstation/tgstation13.org#64 to be public.
Adds more logging to the autotraitor ruleset for admins.
Midround/latejoin chance modifiers are now configurable.
Labelled "Do Not Merge", as the design doc outlines the specific playtesting schedule I would like to perform.
Note to self: Remove the custom MOTD before merge.
Why It's Good For The Game
(Copied from design doc)
Dynamic currently dumps as much threat as it can into round start threats. This means that rounds at ~50 threat can have an absurd amount of antagonists round start, while leaving very little threat for midround/latejoin antagonists. What inevitably happens is just one of those picked decides to murderbone, leading to the inevitable 20 minute shuttle call. Furthermore, once those antagonists are dead, Dynamic doesn’t have any threat left to spend on new antagonists that keep the round flowing, promoting the mentality of “antags dead, I’m bored, let’s leave”.
The proposed solution of Dynamic 2021 is to split threat level into two separate budgets, one for round start and one for midround/latejoin. This split, like threat level, will also be done on a lorentz curve–meaning that while most rounds will have them evenly split, there is still the possibility of chaotic high antagonist round start rounds, or the possibility of a midround onslaught.
* Dynamic 2021
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* dynamic threat reports are no longer perfectly accurate. (#56252)
I think the concept of info being wrong fits in a game about paranoia, so there's now a -15 to +15% divergence from the actual threat level when a threat report is sent, and a small chance of it just being downright wrong, to prevent people from just relaxing every time its a relatively safe round (and vice versa)
* dynamic threat reports are no longer perfectly accurate.
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
* Revert "separates malf ai from traitor dynamic ruleset (#56090)" (#56197)
Reverts #56090
It literally does not do the one thing its supposed to #56192
* Revert "separates malf ai from traitor dynamic ruleset"
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* separates malf ai from traitor dynamic ruleset (#56090)
Separates malf ai from traitor so admins can treat it separately
* separates malf ai from traitor dynamic ruleset
Co-authored-by: Fikou <piotrbryla@onet.pl>
* Allow dynamic to be configured when used as the forced secret mode (#56122)
Allow dynamic to be configured (roundstart rulesets) when used as the forced secret mode
* Allow dynamic to be configured when used as the forced secret mode
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* [READY] A victory for revolutionaries will no longer end the round on dynamic, instead no new security and command will be allowed to join (#55956)
Currently, a victory for revoutionaries leads to the round abruptly ending on dynamic. This has been replaced by all revolutionaries being deconverted, and no new security or command positions being available.
Also attempts to unionize (pun intended) copy and paste code in the round start and late join revolutionary rulesets into being handled under the revolutionary team instead.
* [READY] A victory for revolutionaries will no longer end the round on dynamic, instead no new security and command will be allowed to join
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* Area-based escape condition checking (#55677)
It turns out that checking if a traitor is in custody for their objectives checks if they're on a red plasteel or plastitanium floortile. This is pretty unintuitive, and one of our newer shuttles (the nature emergency shuttle) didn't have these floortiles in their brig. This changes the checking of a traitor's turf to their area.
I've also gone through all of our existing shuttles that have clear brigs (didn't touch things like the hyperfractal and disco inferno) and changed their areas to this new one.
* Area-based escape condition checking
Co-authored-by: dragomagol <66640614+dragomagol@users.noreply.github.com>
* Merge pull request #55834 from coiax/k33p-th4t-d15k
Move disk verification into skillchip
* Move disk verification into skillchip
Co-authored-by: Jordan Brown <Cyberboss@users.noreply.github.com>
* Allows dynamic game modes to be disabled (#55200)
Currently for headmins to disable game modes they need to set the list of valid threats to 101, counting on the fact that the threat level doesn't go higher than 100.
This is brittle, bypasses checks for having enough valid game modes, and a hacky solution at best.
Made it so that setting the weight of a ruleset set to zero, be it via configs or by var-editing, will no longer draft it for picking, effectively disabling it.
* Allows dynamic game modes to be disabled
Co-authored-by: Rohesie <rohesie@gmail.com>
* Remove duplicate definitions of /obj/effect/ex_act, explicitly noop it (#55076)
/obj/effect/ex_act had several different re-definitions to make it a noop. The original definition would randomly delete it, which is bad news when a lot of /obj/effects are just that--effects, that shouldn't be blown up.
The ones that actually do want to be blown up (like decals) already have their own implementations. The one in place was never ran, and nobody had problems with it.
* Remove duplicate definitions of /obj/effect/ex_act, explicitly noop it
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
* Fixes Ghost Dynamic Abductors (#55176)
Fixes an issue where an abductor team was created every time a midround antagonist was created by Dynamic, even if it wasn't Abductors. This was simply due to some misplaced code.
* Fixes Ghost Dynamic Abductors
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
* Changes grenade proc names to be more clear (#55181)
Grenades have, for the longest time, used the proc name preprime() to refer to arming a timed grenade so that it will boom in a few seconds, and prime() to refer to the grenade actually going boom (or releasing foam or anything else grenades do when they go off). This was very confusing, so now these two procs are called arm_grenade() and detonate().
* Changes grenade proc names to be more clear
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
* Moves grown food to newfood (#55040)
Moves grown food to newfood
Gives trash element support for callbacks for item creation override
* Moves grown food to newfood
Co-authored-by: Qustinnus <Floydje123@hotmail.com>
* [READY] Space Ninja Rework (#53492)
* Automatic changelog compile [ci skip]
* Automatic changelog compile [ci skip]
* Revert "Automatic changelog compile [ci skip]"
This reverts commit 48a63defa644ec9826ee5eb1736e5158d2a636d4.
* Revert "Automatic changelog compile [ci skip]"
This reverts commit cb68f4988edd9d841c4203eecee2067a49ce75c5.
* Revert "Revert "Automatic changelog compile [ci skip]""
This reverts commit e6e1f1ef53ee6611c334efcae6ca7c102edaf351.
* Revert "Revert "Automatic changelog compile [ci skip]""
This reverts commit 1782210527b9819772c0781122bec35b7979bf7d.
* Update changelog.html
* Automatic changelog compile [ci skip]
* Automatic changelog compile [ci skip]
* Move suit_initialization into better location
* Clean up cost check
* Clean up net using
* Clean up Ninja Star
* Clean Up Ninja Stealth
* Clean Up Sword Recall
* Move the event file
* Re-Merge the Changes
* Get your ninja code out of my human.dm
* Move the event into events folder and clean it up
* Can the old space ninja antagonist file
* Roll in the shiny new bad boy
* Get rid of actions/ninja.dm and move its info into respective ability files
* Update one_click_antag with new ninja
* Move proc out of ninja code into proper location
* Update the dme properly this time
* Update code/modules/ninja/suit/ninja_equipment_actions/ninja_suit_initialisation.dm
Co-authored-by: Fikou <piotrbryla@ onet.pl>
* Update code/modules/ninja/suit/gloves.dm
Co-authored-by: Fikou <piotrbryla@ onet.pl>
* Update the antagonist file
* Update ninjaDrainAct
* Re-Add MGS Voice Lines
* Up the Katana Damage Back Up to 30
* Attempting a Risky Manuever
* Adjusting some numbers to fit the delta time PR
* Fix Var Names and do a return ..()
* Remove Unused Defines, Update qdels to QDEL_NULLs
* Update code/modules/antagonists/space_ninja/space_ninja.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Update code/modules/antagonists/space_ninja/space_ninja.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Update code/modules/events/space_ninja.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Update code/modules/ninja/energy_katana.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Update code/modules/ninja/ninja_explosive.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Update code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm
Co-authored-by: Rohesie <rohesie@ gmail.com>
* Remove Unnecessary Condition Checks
* I'll show you what A stands for!
* Turn some things into defines
* Remove is_ninja()
* Gives the SN roles on Antag Gain, not on event spawn
* Clean up mind/key code to be efficient and modern
* Have Deactivated Suit Gloves use default black sprite
* Add the new clothing sprites
* Add new inventory sprites for alternate sprites
* Get Rid of These Again
* Re-add suit changes
* Implement all the suggestions for the antag file
* And then everything else
* Updating the Weight for purpose of testmerge
* Balance Updates
* Update the Objective Definitions
* Remove Now Unreachable Cyborg Interaction Code
* Get That Shit Out of My Forest
* Re-Add Cowl Wearing Sprite
* Re-Add Cowl Inventory Sprite
* Adapt to the new thing?.thing changes
* Re-add New Katana Inhand Sprites
* Re-Add glove's shock but have it do knockdown instead
* Get rid of the these stupid changelog changes
* Update sounds
* Re-add New Mask Sprite
* Re-update katana inventory sprite
* Revert Event Weight
* Update code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm
Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* Re-Add Dynamic Ninja
* Revert Changelog thing
* Update Mob Sprites
* Add files via upload
Co-authored-by: Changelogs <action@ github.com>
Co-authored-by: Fikou <piotrbryla@ onet.pl>
Co-authored-by: Rohesie <rohesie@ gmail.com>
Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* [READY] Space Ninja Rework
Co-authored-by: IndieanaJones <47086570+IndieanaJones@users.noreply.github.com>
Co-authored-by: Changelogs <action@ github.com>
Co-authored-by: Fikou <piotrbryla@ onet.pl>
Co-authored-by: Rohesie <rohesie@ gmail.com>
Co-authored-by: girl <11748095+ExcessiveUseOfCobblestone@ users.noreply.github.com>
* Removes changeling teams and hivemind channel (#54054)
* Removes changeling teams and hivemind channel.
* More cleanup
* some more stuff
* Removes changeling teams and hivemind channel
* Update horror_form.dm
* Update horror_form.dm
* Update horror_form.dm
Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com>
Co-authored-by: Azarak <azarak10@gmail.com>
* Malf AIs no longer fail their survive objective if piloting a shell (#54346)
* Malf AIs no longer fail their survive objective if piloting a shell when the round ends
Co-authored-by: zxaber <37497534+zxaber@users.noreply.github.com>
* Fixes another dynamic issue with protected roles rolling traitor (#54452)
In short:
picking_specific_rule didn't apply configs.
* Fixes another dynamic issue with protected roles rolling traitor
Co-authored-by: TheChosenEvilOne <34602646+TheChosenEvilOne@users.noreply.github.com>