2022 Commits

Author SHA1 Message Date
Null 91af7a636f Merge branch 'master' of github.com:tgstation/tgstation 2020-12-17 11:52:37 +01:00
Jack LeCroy 23ee09967e Fix Hanukkah (again) and refactor Moth Week and Beer Day (#55532)
* Fix Hanukkah (again) and refactor Moth Week and Beer Day

* Remove unnecessary changes
2020-12-16 17:16:44 -08:00
Null adfa4949f8 Merge branch 'master' of github.com:tgstation/tgstation 2020-12-14 18:13:56 +01:00
Qustinnus 12c1464bc3 [READY] Creates Datumized AI and applies it to monkeys (#55238)
New AI system, implemented for monkeys.
2020-12-13 13:19:54 +01:00
Null 835ebe0239 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-12-12 13:14:48 +01:00
Qustinnus 15c7de802a Refactor the procedural generation of lavaland and turf/closed/mineral (#54915)
This replaces lavaland's old diagonal tunnel gen which was really 
horrendously jammed into asteroid floor code (?????) with Cellular 
Automata which runs in rust (PR for that here: 
https://github.com/tgstation/rust-g/pull/57 ). The new code is a bit 
cleaner, but also looks better.

VID: https://streamable.com/a45ke2

Things to do:
- Make an icemoon version
- Fix the roundstart atmos adjacency issues

I asked AnturK if this was an acceptable PR for this month; he said it 
was okay as long as I didn't add new areas, which I don't plan to do. 
But if anyone thinks this PR breaks the spirit of the month I'll open 
it again in december.
2020-12-10 20:59:29 -08:00
Jared-Fogle 7d3fd4355f Everything that uses maptext now uses the class that makes it actually readable (#55420)
Adds a MAPTEXT macro that wraps the given text in the maptext class, the thing we use for Runechat to make it so you can actually read it. Everything that sets maptext now uses this.
2020-12-10 23:25:46 +00:00
LemonInTheDark 92f509ea80 Revert "Refactors how movetype flags are added and removed and the floating animation (#54963)" (#55432)
This reverts commit b8425c003a.
2020-12-09 19:30:28 -08:00
silicons 160175ee8b pass_flags handling refactor + rewrites a part of projectiles for the n-th time (#54924)
Yeah uhh this'll probably need testmerging even after it's done because yeah it's a bit big.
If y'all want me to atomize this into two PRs (pass flags vs projectiles) tell me please. Pass flags would have to go in first though, in that case, as new projectile hit handling will rely on pass_flags_self.
Pass flags:

Pass flags handling now uses an atom variable named pass_flags_self.
If any of these match a pass_flag on a thing trying to pass through, it's allowed through by default.
This makes overriding CanAllowThrough unnecessary for the majority of things. I've however not removed overrides for very.. weird cases, like plastic flaps which uses a prob(60) for letting PASSGLASS things through for god knows why.
LETPASSTHROW is now on pass_flags_self
Projectiles:

Not finalized yet, need to do something to make the system I have in mind have less unneeded overhead + snowflake

Basically, for piercing/phasing/otherwise projectiles that go through things instead of hitting the first dense object, I have them use pass_flags flags for two new variables, projectile_phasing and projectile_piercing. Anything with pass_flags_self in the former gets phased through entirely. Anything in the latter gets hit, and the projectile then goes through. on_hit will also register a piercing hit vs a normal hit (so things like missiles can only explode on a normal hit or otherwise, instead of exploding multiple times. Not needed as missiles qdel(src) right now but it's nice to have for the future).

I still need to decide what to do for hit handling proper, as Bump() is still preferred due to it not being as high-overhead as something like scanning on Moved(). I'm thinking I'll make Moved() only scan for cases where it needs to hit a non-dense object - a prone human the user clicked on, anything special like that. Don't know the exact specifics yet, which is why this is still WIP.

Projectiles now use check_pierce() to determine if it goes through something and hits it, doesn't hit it, or doesn't go through something at all (should delete self after hitting). Will likely make an on_pierce proc to be called post-piercing something so you can have !fun! things like projectiles that go down in damage after piercing something. This will likely deprecate the process_hit proc, or at least make it less awful.

scan_for_hit() is now used to attempt to hit something and will return whether the projectile got deleted or not. It will delete the projectile if the projectile does hit something and fails to pierce through it.

scan_moved_turf() (WIP) will be used for handling moving onto a turf.

permutated has been renamed to impacted. Ricocheting projectiles get it reset, allowing projectiles to pierce and potentially hit something again if it goes back around.

A new unit test has been added checking for projectiles with movement type of PHASING. This is because PHASING completely causes projectiles to break down as projectiles mainly sense collisions through Bump. The small boost in performance from using PHASING instead of having all pass flags active/overriding check_pierce is in my opinion not worth the extra snowflake in scan_moved_turf() I'd have to do to deal with having to check for hits manually rather than Bump()ing things.
Movement types

UNSTOPPABLE renamed to PHASING to better describe what it is, going through and crossing everything but not actually bumping.
Why It's Good For The Game

Better pass flags handling allows for less proc overrides, bitflag checks are far less expensive in general.

Fixes penetrating projectiles like sniper penetrators

This system also allows for better handling of piercing projectiles (see above) without too much snowflake code, as you'd only need to modify on_pierce() if you needed to do special handling like dampening damage per target pierced, and otherwise you could just use the standardized system and just set pass flags to what's needed. If you really need a projectile that pierces almost everything, override check_pierce(), which is still going to be easier than what was done before (even with snowflake handling of UNSTOPPABLE flag process_hit() was extremely ugly, now we don't rely on movement types at all.)
2020-12-10 09:29:27 +13:00
Ghom b8425c003a Refactors how movetype flags are added and removed and the floating animation (#54963)
I wanted to refactor how movetype flags are added and removed into traits to prevent multiple sources of specific movement types from conflicting one other. I ended up also having to refactor the floating animation loop (the one that bobs up and down) code in the process.
Why It's Good For The Game

A way to avoid conflict from multiple sources of movement types.
This also stops melee attacks, jitteriness and update_transform() from temporarily disabling the floating movetype bitflag altogether until the next life tick.

Tested, but i'm pretty sure improvements could be made.
Changelog

cl
fix: jitteriness, melee attack animations and resting/standing up should no longer momentarily remove the floating movement type.
/cl
2020-12-10 09:28:32 +13:00
Null b61f478c97 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-12-08 13:27:18 +01:00
Jared-Fogle f00e379939 Singularity component (#55096)
Adds singularity component
2020-12-08 10:58:03 +01:00
Null 3ead4e17e5 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-12-07 20:29:19 +01:00
Null 48d8a89882 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-12-01 14:14:36 +01:00
Tad Hardesty 70e468b891 Merge branch 'master' of https://github.com/tgstation/tgstation into patch/docs-from-github-wiki 2020-11-30 21:25:43 -08:00
TiviPlus de7994c0f7 Init sanity unit test (#55147)
https://github.com/tgstation/TerraGov-Marine-Corps/pull/5326
Stemming from 
https://github.com/ParadiseSS13/Paradise/pull/14770

Basically it just checks for bad initialize calls
2020-11-30 17:15:11 -05:00
Null e3af9f461e Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-30 19:54:43 +01:00
TiviPlus 0eaab0bc54 Grep for space indentation (#54850)
#54604 atomizing
Since a lot of the space indents are in lists ill atomize those later
2020-11-30 12:48:40 -05:00
Tad Hardesty abeb3ca072 Add AnturK's 'GC Issues' guide 2020-11-29 21:27:02 -08:00
Null 6e8a3641e1 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-29 20:34:46 +01:00
Kyle Spier-Swenson ff6576d036 sstimer no longer batches maintenance tasks to the bucket list to avoid edge cases and duplicated logic. (#55140)
* sstimer no longer delays maintenance tasks if its going over its tick.

This was leading to bugs if certain state operations happened while a task was delayed, furthermore if the timer subsystem was overloaded, the invoked timers list would bloat as it would never get cleared out, which would make all timer invocations take longer as they had to add to an ever growing list.

* Update timer.dm

* Fix error when a bucket has only one timer.

* simply timer loop logic & improve timer debug string

It would try to batch up linked list modifications and every issue we have ever had has been related to this, so now it just directly pulls the head of the linked list off, using bucketEject, rather then detect when it reaches the end of the linked list queue it will now just know because the bucket will be empty.

All bucketCount logic has been moved to bucketEject and bucketJoin(), which should also keep that more proper.

* Update timer.dm

* Update timer.dm
2020-11-30 01:30:45 +08:00
Null a43d31a254 Mail rate throttled, colors by department 2020-11-29 11:34:48 +01:00
Null 6308712001 Further reduced mail generation. 2020-11-28 02:14:01 +01:00
Null 1508f5045d Fixed empty mail 2020-11-27 14:33:18 +01:00
Null 27acbc51f8 Throttle mail, add botanist and some sec loot 2020-11-27 13:21:19 +01:00
Null 81c065e9d3 Seriously tuned down how much mail gets made. 2020-11-27 00:56:41 +01:00
Null 7d3d3d8f01 tgui merge / typo fix 2020-11-26 22:39:56 +01:00
Null 4b40083cd4 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-26 22:39:18 +01:00
Null 8f478ceef2 Cargo mail update. 2020-11-26 22:34:38 +01:00
ArcaneMusic bf39caca6a Refactors Pastries into newfood. (#54996)
Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
Co-authored-by: Floyd <Floydje123@hotmail.com>
2020-11-24 16:18:10 -08:00
Null e38c619ee4 Unreverted removal of Box Station
My initial reversion had never resulted in the map appearing in the game. Despite apprehension with Ice Box, it's actually not as bad as I thought it was. Box isn't maintained upstream so dealing with it would suck.
2020-11-16 08:59:30 +01:00
Null d3f08b3235 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-16 08:40:05 +01:00
Kyle Spier-Swenson ea363e7b01 Fix client time timers duplicating if any client time timer caused a stack overflow. (#54977)
* Fix client time timers duplicating if any client time timer caused a stack overflow.
2020-11-16 05:05:21 +00:00
Null bd260131d4 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-15 11:32:08 +01:00
Timberpoes 3475080f21 [TM Candidate] Fix a number of atmos-related runtimes through pipeline and SSair tweaks. (#54804)
* Feex

* Moar feex
2020-11-14 20:07:30 -05:00
Null 3e0b66dec1 Remove 7 sec jobs at round start to prefer departmental jobs. 2020-11-14 19:49:01 +01:00
Null 5c7a32fc97 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-14 11:05:45 +01:00
ArcaneMusic 816fe2e1e3 Arconomy: Amputating the Invisible Hand of Income. (#54161)
* Final Stage Capitalism.

* tweaks.

* Got overzelous in my fervor for blood

* well, this now has my full attention.

* Whoops missed a <<

* fixes issue because there were changes I missed

* Cobby: Departmental income is static.

* Whoops

* Various high cost premium prices and a few custom_prices have been adjusted to better suit the lack of income. Code cleanup on income so they're all in-line with cargo.

* First, this has been atomized out.

* UI is now fixed as god intended.

* Actually no, this is dynamic now. No more confusion.

* Conflicts fixed.

* Apply suggestions from code review

Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>

* tgui recompile.

* Hopefully aquires that green checkmark.

* --fixes the spacing.

* var cleanup and departmental budget assignment cleanup.

* merge conflict fix

Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com>
2020-11-13 16:32:09 -05:00
Null 6ce4d63927 Merge branch 'rnd-reform' 2020-11-13 18:16:03 +01:00
Null 9fb000100f Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-13 18:15:57 +01:00
Null cc236e2a8c A modest R&D reform. 2020-11-13 16:49:55 +01:00
Rob Bailey 505881b188 Performance Logging no longer produces broken csv files (#54894)
Also better file names so it's easier to mass scrape them.
2020-11-10 09:26:31 -05:00
Null e02bbaeed3 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-09 13:38:27 +01:00
TemporalOroboros edd6500d78 /obj/screen --> /atom/movable/screen (#54403)
Repaths screen objects to /atom/movable
2020-11-08 23:07:15 -03:00
Null 1f33012976 Merge branch 'master' of https://github.com/tgstation/tgstation 2020-11-08 17:18:59 +01:00
Rob Bailey a6ffa29818 performance logging (#54809)
Dumps a bunch of perf info to a csv every 10 seconds.

Currently this info is only stored in blackbox where it's effectively useless.
csv is a very easy to parse format and is natively supported by a lot of data analysis tools
2020-11-07 20:22:48 -08:00
Null b56836217f Restored Box and made it the default map again. 2020-11-04 21:34:33 +01:00
Qustinnus 6424b6136e Turns transparency for turfs into an element, and gives it to datum materials. (#54250) 2020-11-03 15:05:54 -08:00
WarlockD f15bcc4692 Initialize and LateInitialize runs correctly at round start (#54594)
I've been pulling my hair out on this one. Ever since I started my ntnet project, I could never get LateInitalize to work right. Apparently it has never worked right. How it was set up before on server start

    Station map loads, Does NOT run Initialize(mapload = TRUE)
    Generates space, lavaland/icebox ruins
    Loads a ruin, DOES run Initialize(mapload = TRUE) EXCEPT on areas
    End of mapping system
    Atom system Initialized and it checks and runs Initialize(mapload = TRUE) on world

You see the issue? Initialize and by extension LateInitialize is run in blocks. Worst, LateInitialize is run on turfs FIRST in ruins BEFORE Initialize is ever run on the other atoms. While there isn't much in Area, there is map_generator so I am sure it caused some grief for map creators.

The NEW order now is

    Station map loads, Does NOT run Initialize(mapload = TRUE)
    Generates space, lavaland/icebox ruins
    Loads a ruin, Does NOT run Initialize(mapload = TRUE)
    End of mapping system
    Atom system Initialized and it checks and runs Initialize(mapload = TRUE) on world

Also if you dynamicly load a map, like snowdin or such, it will Initialize all atoms at once and then run LateInitialize properly
2020-10-26 12:26:46 -03:00
Bobbahbrown 4e48e1379d Interview System / Soft Panic Bunker (#54465)
About The Pull Request

Ports and improves my interview system that has been previously used in the summer ball and toolbox tournament events. Allows for a 'softer' panic bunker, wherein players who fall below the required living time limit can still join the server and be restricted to filling out a questionnaire. Upon completing the questionnaire, the player may be allowed into the server by an administrator. If the application is approved, they get a notification that they will be reconnected and upon reconnecting will have all verbs as they usually would. If the application is denied the user is put on a cooldown after which they may submit a new questionnaire.

Players who are being interviewed (herein interviewees) have no verbs other than those required for the stat panel to function, as well as a verb to pull up the interview panel. Interviews do not persist through restarts, and the ability to join that is granted by an accepted interview is only valid for the duration of that round.

Open interviews are listed under a new 'interviews' tab for admins, which is VERY similar to the existing tickets tab.

Below is what a player who is flagged as an interviewee will see when they join the server. They can do nothing but respond to the questionnaire or leave.
image

This is what an administrator sees after an interview is submitted, they will also see a corresponding message within their chatbox, and an age-old BWOINK when an interview is submitted.
image

The interviews tab, which is similar to the tickets menu. You can open the interview manager panel to view all active (including non-submitted) interviews, queued (submitted) interviews, and closed interviews.

image
FAQ:

What happens if someone submits an interview when no admins are on? It's treated like adminhelps are, the message gets sent to TGS to be dispatched off to configured end-points (like Discord or IRC), and the user is notified that their interview was handled this way.

Can you configure the questions? Yes, in config/ there is now a interviews.txt file in which the welcome message and the individual questions can be set and modified.

Can this be turned on and off during a round? Yes, it can be toggled like the panic bunker. It requires the panic bunker to be raised in order to function.

Can interviewees have further questions asked to them? Yes, if you admin-pm them, which is possible using regular means or a conveniently placed button on the interview UI, they will be able to respond to the message.
Technical details

To use the interview system you must have the panic bunker enabled, this is an additional setting for the panic bunker. It can be set through the PANIC_BUNKER_INTERVIEW setting in config.txt, or alternatively enabled in-game as prompted during the panic bunker toggling process. It also can be toggled on its own using a verb added for this purpose, Toggle PB Interviews found under the server tab. These new actions are included in the logging for the panic bunker. I have also added a reporting stat to the world topic status keyword, which now reports if the interview system is on using the keyword interviews.

As mentioned above, for server operators, configure the questions and welcome message in config/interviews.txt.

Note to maintainers and those with big brains I had to add a call to init_verbs on the stat panel window being ready because seemingly a race condition exists wherein the add_verb of the 'view my interview' verb doesn't cause a refresh of the tabs (and therefore doesn't show the 'Interview' tab) when running in dream daemon but running it directly from visual studio code properly shows the tab. Adding a init_verbs call directly after adding the verb didn't seem to help.
A note for downstreams

If you don't use the HTML stat panel (which may not be a bad thing) then you will have to do some conversion from the HTML stat panel stuff used here to the old style stat panels. It's pretty trivial, but just be aware of that. You can see how I used to use the old stat panels in my PR from the summer ball, here, which should be helpful.
Why It's Good For The Game

This allows for a softer version of the panic bunker which impedes the flow of malicious players while allowing genuine players a chance to enter a round to gain enough time to not be affected by the panic bunker's restrictions.
Changelog

🆑 bobbahbrown
add: Added the interview system, a 'soft' panic bunker which lets players who would normally be blocked from joining be interviewed by admins to be selectively allowed to play.
/🆑
2020-10-25 14:10:06 +13:00