Commit Graph

2399 Commits

Author SHA1 Message Date
Seth Scherer
c6a48b1f82 Refactors z level trait checking to be less shit (#69334)
* Puts level traits and their associated z into a list and then uses it to make the z level trait procs less shit. They no longer need to loop through every z level to do what they aim to do.

* Also removes get_level from level_trait because it just does the same checks as already done above in the proc.
2022-08-22 16:45:06 -04:00
ShizCalev
d4c93490ec Fixes login() runtime when players connect before SSsecurity_level finishes initializing (#69152)
Fixes login() runtime when players connect before SSsecurity_level finished initializing
2022-08-18 22:11:29 -04:00
Seth Scherer
f1a363c825 Converts a shitload of istypes to their more concise macros (#69260)
* Converts a lot of istypes() to use their istype macro helpers.
2022-08-18 22:08:44 -04:00
CapybaraExtravagante
5a4f5d54ea Ambience no longer uses reverb (#69003)
* no more local sound

* setup volume settings

* Update code/controllers/subsystem/ambience.dm

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

* Update ambience.dm

Co-authored-by: Capybara <Capybara@CapybaraMailingServices.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2022-08-13 18:19:48 -04:00
Pickle-Coding
75267720e7 Radiation pulses will yield to MC for every turf they iterate through. (#68525)
* Be less scary.

Changes radiation pulses so that they store the turfs they need to irradiate, iterate through them and remove them from the list of turfs to irradiate, then yield to MC if MC got angry, and put the radiation pulse with the remaining turfs to irradiate to the back of the radiation processing list.

Radiation pulses pulse information will no longer popleft the processing list. It will delete itself once there are no turfs to process, or if the source is null.

Caches the turfs to process to loop through, adds a counter for how many turfs it iterated through, and cuts the turfs to process by the turfs that got iterated.
2022-08-06 18:25:14 -07:00
Kylerace
f240be47ff fixes verbs not actually queuing. (#68990)
thanks to Vallat for pointing this out

whoops turns out most verbs havent been queued since may 11th because I made /datum/controller/subsystem/verb_manager have the SS_NO_INIT flag, without also removing a check in verb_manager/proc/can_queue_verb() that stops the verb callback from being queued if the subsystem isnt initialized yet. since subsystems with SS_NO_INIT obviously never have initialized set to TRUE, this always failed for every verb manager subsystem except for SSinput (because it doesnt have SS_NO_INIT).

also adds a debug var to force a subsystem to always queue incoming verbs if possible.

now the default verb management subsystem, and speech_controller will successfully queue verbs again. SSinput always queued verbs so that shouldnt change.
2022-08-06 16:41:15 -07:00
Mothblocks
0a29ded0f6 Revolution victories now call the shuttle when enough of the station is revolutionaries (#68630)
When 65% or more of the station is revs, the shuttle will automatically call. This shuttle can be recalled.

Approved with majority vote from me and @ninjanomnom

Should probably be test merged first, I touched some core shuttle code.

Roughly 60% of rev victories I checked called the shuttle shortly after. That's a lot, but there's still a high amount that aren't, either because the population genuinely wants to stay, or the revolutionary victory was a surprise. The latter of which I had happen to me like, recently! Remember that was the core problem revs victories continuing the round was trying to fix.

With that in mind, this plays nicely with both some player grievances with post-revs while keeping in line with the core of the feature. Players are still, in part, controlling the end of the round, but with affordance given to the most likely scenario.
2022-08-05 18:16:12 -07:00
Mqiib
60bcee9e7b Makes epicenters not explode mobs twice (#68860)
About The Pull Request

Ports yogstation13/Yogstation#13983

This pr effectively halves the damage of explosion epicenters by making them only affect mobs once. Specifically, it removes them from the list of things to explode created by the get_all_contents proc, originally meant to ensure stuff in bags and boxes will set off other bombs in the same bag or box. This had the un(?)intended side-effect of making any objects in the epicenter of the blast take damage a second time, resulting in heavy blasts instakilling and very small explosions doing way too much damage. This is half a balance change and half a bug fix.
Why It's Good For The Game

This allows for more explosion-based weaponry as they now won't all be complete one-shot-win weapons. It also stops things like X4 bolas or explosive holoparasite bolas (you guys have those right?) instantly killing people with no counterplay. Also fireball is now probably a little less meta as a spell since it ONLY PROBABLY immediately wins fights and won't two-shot-crit people, usually. If yall want stuff to still do the same amount of damage just add an extra single-tile explosion to things you want to be more powerful.
Changelog

cl Mqiib, ToasterBiome
balance: Explosion epicenters no longer explode mobs twice; Fireballs and other explosive projectiles are significantly less-damaging

/cl
2022-08-05 12:47:43 +12:00
Mooshimi
b09f3868f8 individual LOG_GAME (#68683)
About The Pull Request

    replaces a ton of log_game with user.log_message so the log is added to individual and global logs.
    adds a few logs for individual LOG_VICTIM, LOG_ATTACK etc logging.
    adds logging for bluespace launchpad's tele coords being changed.
    took the word "has" out of log_combat, as it's extra and just lengthens the log.

Why It's Good For The Admins

It's extremely laggy to open game.txt so an alternative is individual game logs
Changelog

cl
admin: A lot of game logs will now also be in individual game logs, for convenience in log diving.
admin: Added logging for bluespace launchpad x and y offset changes, which go to individual game logs.
admin: Attack logs will now be slightly shorter, one useless word was removed.
/cl
2022-08-05 09:32:02 +12:00
Profakos
b5e57216ee Event menu rewrite (#68472)
About The Pull Request

kép

This PR does the following:

    Force event menu uses tgUI.
    Arranged events into categories, and added a little description to each. The descriptions appear as tooltips when you hover over the Trigger button.
    Rewrote how "Announce to crew?" works. It no longer pops up a panel after the event has been already announced. Instead, the admins select it via a checkbox, and the result is passed through an optional argument.
    announceChance's comment is tweaked a bit to reflect how it actually works at the moment.
    Moved rpgtitles to wizard events, where it belongs.
    Fake Virus and Electric Storms show up to observers, as I believe they are not as common as Space Dust or Camera Failure, and should be cancelable.

Potential issues:
This only solves half of #68408, I don't think admin triggering having a timer and a cancel button is a big issue, as it allows other admins to overrule you if needed, but if i is, I will try to fix it within this PR.

Fixes #68408. Events now spawn immediately, and the the announceChance is overwritten before it begins.

My choices for categories and descriptions might not be the best, feedback would be appreciated.
Why It's Good For The Game

The old spawn menu was completely unorganized, and you could only search using the browser search tool. I believe a built in search bar helps with this issue a bit. I also believe that organizing the events into categories, and adding descriptions will help with newer admins who might not be familiar with all events.
Changelog

cl
refactor: The Force Event UI has been refactored
refactor: Events now have categories and descriptions
refactor: Admin triggered events happen immediately
balance: Fake Virus and Electric Storms are shown to admins, making them cancelable
/cl
2022-08-05 09:18:14 +12:00
Timberpoes
786ac5c855 [MDB Ignore][Bounty][Complete Refactor] Papercode Redux: Too Many Damn Files <Map Conflict Edition> (#68612)
Papercode refactor
2022-08-02 19:27:42 +02:00
Fikou
499f9463cd fixes chameleon card reset issues and makes nuke op trim have a hud icon (#68879)
* partial fix

* outfits now update ids
2022-08-01 16:46:39 -04:00
Kylerace
77c2b7f50c Biddle Verbs: Queues the Most Expensive Verbs for the Next Tick if the Server Is Overloaded (#65589)
This pr goes through: /client/Click(), /client/Topic(), /mob/living/verb/resist(), /mob/verb/quick_equip(), /mob/verb/examinate(), and /mob/verb/mode() and makes them queue their functionality to a subsystem to execute in the next tick if the server is overloaded. To do this a new subsystem is made to handle most verbs called SSverb_manager, if the server is overloaded the verb queues itself in the subsystem and returns, then near the start of the next tick that verb is resumed with the provided callback. The verbs are called directly after SSinput, and the subsystem does not yield until its queue is completely finished.

The exception are clicks from player input since they are extremely important for the feeling of responsiveness. I considered not queuing them but theyre too expensive not to, suffering from a death of a thousand cuts performance wise from many many things in the process adding up. Instead clicks are executed at the very start of the next tick, as the first action that SSinput completes, before player movement is processed even.

A few months ago, before I died I was trying to figure out why games at midpop (40-50 people) had non zero and consistent time dilation without maptick being consistently above 28% (which is when the MC stops yielding for maptick if its overloaded). I found it out, started working on this pr, then promptly died. luckily im a bit less dead now

the current MC has a problem: the cost of verbs is completely and totally invisible to it, it cannot account for them. Why is this bad? because verbs are the last thing to execute in the tick, after the MC and SendMaps have finished executing.
tick diagram2
If the MC is overloaded and uses 100% of the time it allots itself this means that if SendMaps uses the amount its expected to take, verbs have at most 2% of the tick to execute in before they are overtiming and thus delaying the start of the next tick. This is bad, and im 99% sure this is the majority of our overtime.

Take Click() for example. Click isnt listed as a verb but since its called as a result of client commands its executed at the end of the tick like other verbs. in this random 80 pop sybil round profile i had saved on my computer sybil 80 pop (2).txt /client/Click() has an overtime of only 1.8 seconds, which isnt that bad. however it has a self cpu of 2.5 seconds meaning 1.8/2.5 = 72% of its time is overtiming, and it also is calling 80.2 seconds worth of total cpu, which means that more than 57.7 seconds of overtime is attributed to just /client/Click() executing at the very end of a tick. the reason why this isnt obvious is just because the verbs themselves typically dont have high enough self cpu to get high enough on the rankings of overtiming procs to be noticed, all of their overtime is distributed among a ton of procs they call in the chain.

Since i cant guarantee the MC resumes at the very start of the next tick due to other sleeping procs almost always resuming first: I time the duration between clicks being queued up for the next tick and when theyre actually executed. if it exceeds 20 milliseconds of added latency (less than one tenth the average human reaction time) clicks will execute immediately instead of queuing, this should make instances where a player can notice the added latency a vanishingly small minority of cases. still, this should be tm'd
2022-07-31 14:56:18 -07:00
Y0SH1M4S73R
e72ec7445a Fixes a lua state null return related to the print wrapper, improves the lua editor ui formatting, and implements a stopgap lua lag fix (#68816)
This PR fixes this issue by making sure every proc called in the stack of /proc/wrap_lua_print which could sleep is called using INVOKE_ASYNC, and to prevent such problems in the future, marks all the wrappers as SHOULD_NOT_SLEEP(TRUE). I also figured out how to fix the dumb overflowing problem of the lua editor ui.

Due to lag concerns regarding lua states with a large number of global variables (including fields within global tables), I have made it so the global table and state log are hidden by default - they can be shown using a toggle button in the editor ui.
2022-07-31 10:09:01 +03:00
Jeremiah
86e801987e Reworks pAIs (#68241)
A pretty heavy refactor for pAIs that just spilled into a rework.

Attempts to fully document and organize backend code.
Fixes a large number of bugs left untouched for a decade.
Breaks down the frontend into subcomponents.
Rebalances their software modules.
(should) fix pAI faces get removed if you activate them during alert #68242
2022-07-24 16:18:59 +01:00
Y0SH1M4S73R
a6b4c3db8a [GBP no update] Mitigates lua-related harddels and fixes lua signal handlers for COMSIG_PARENT_QDELETING (#68677) 2022-07-24 00:56:17 -07:00
vincentiusvin
ff803b9156 Fixes force irradiation not working. (#68597)
Moment
2022-07-23 00:09:21 -04:00
Profakos
eebd0ef865 Some nightshift fixes (#68566)
Fixes APC night shift manual cycling balloon alert; update_nightshift uses the correct variable
2022-07-22 13:21:23 -04:00
MrMelbert
627de6f1cf Fixes security level alerts playing the incorrect sounds (#68620)
* Fixes security level sounds not playing.
- The sound var was never set, turns out it used the default announcement sounds for alert or no alert.

* Documentation tweak

* Thank you san

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

Co-authored-by: san7890 <the@san7890.com>
2022-07-22 10:05:39 -04:00
Y0SH1M4S73R
4e6e1f090e [Ready for Review] Admin lua scripting (#65635)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-07-19 15:45:23 -07:00
ShizCalev
8c907cf2c0 Tweaks response provided by sssecurity_level during initialization (#68500) 2022-07-17 18:55:48 -07:00
ShizCalev
9083516e4a Fixes active turf message speaking gibberish (#68499) 2022-07-17 18:53:32 -07:00
Seth Scherer
caef4900b5 Removes the Families gamemode (#68480) 2022-07-17 17:47:02 -07:00
BluBerry016
86ef806f1a Greyscale ID Department Colors (+ Rainbow ID Card) (#68217)
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
2022-07-17 01:30:37 -07:00
Kylerace
fe7513d282 addresses reviews on the tram pr made after merge, fixes diagonal movement bugs (#68033) 2022-07-16 21:44:41 -07:00
LemonInTheDark
8ac99b9452 Fixes world status runtiming during initialize (#68364)
I hate it here
2022-07-16 20:09:08 -04:00
Fikou
739812d4e1 Adds Baseballs (#68249)
Adds baseballs to the game (There is a baseball field in the holodeck).
You can now bat thrown objects with the baseball bat to launch them away at high speed.
https://streamable.com/471jvv (baseball is a boomerang here because otherwise this would have been impossible to test singleplayer)
Why It's Good For The Game

it could be fun to have a game of baseball, and people trying to bat an item thrown at them sounds funny
image
Changelog

cl Fikou, sprite by Mooster
add: Baseballs are now available in the Baseball Field on the Holodeck.
add: Baseball Bats can now hit thrown objects mid-air to send them back.
/cl
2022-07-13 21:47:47 +12:00
LemonInTheDark
c57fa9c182 Prevents overtime in the economy SS (#68078)
* Prevents overtime in the economy SS

Ok so like, we were doing a LOT of work all at once without yielding,
which is fine cause like, it's only fired once every 5 minutes, but it's
still kinda dumb

So I've cleaned up the subsystem to make it support an ssair style of
yielding, alongside an optimization to vending machine z level checks
that I suspect was taking a lot of cpu.

Remind me to refactor z level lookup someday bestie

Anyway yeah now we won't see strangely high overtime for ssecon anymore

* vending gang (renames a variable to not just be v

* It is done
2022-07-11 12:33:50 -07:00
Kapu1178
08f3b0bae0 Ambience tweaks (#68264)
* cleans up code and adjusts volume

* Removes can_hear() check

* volume

* review
2022-07-11 14:33:35 -05:00
oranges
80398698b9 New player job selection fixes pack (#68208)
* New player job selection fixes pack

If no jobs are available when random jobbing dont just runtime instead
pop a little tgui alert letting them know they are shit out of luck

Also makes the job debug actually print out the job titles instead of
just printing a . like some kind of insane person

Also also removes some syntax left over from a search and replace

* Update code/modules/mob/dead/new_player/new_player.dm

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>

* Update code/modules/mob/dead/new_player/new_player.dm

Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>

Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
2022-07-08 21:42:13 -04:00
Kapu1178
986659b103 Improves ambience (#68041) 2022-07-07 01:17:14 -07:00
MrMelbert
cdc50e27eb Fixes some cases which references are used in trait sources, potentially causing hard deletes (#67974)
About The Pull Request

Fixes some cases in which actual references were used in trait sources instead of keys (or ref() keys).

This can cause some rare and difficult to find hard deletes.

Trait sources should be a string key relating to the source of it, not an actual reference to what added it. References within trait sources are never handled in Destroy(), because it's not expected behavior, meaning it can cause hanging references.

So, I went through with a regex to find some cases and replaced them.
I used the following and just picked through the few by hand to find erroneous ones.
ADD_TRAIT\(.+, .+, [a-z]+\)
REMOVE_TRAIT_TRAIT\(.+, .+, [a-z]+\)
Why It's Good For The Game

Less hard deletes, probably.
Changelog

cl Melbert
code: Some traits which mistakenly were sourced from a hard reference are no longer.
/cl
2022-07-04 12:02:17 +12:00
MrMelbert
f8f3dbed98 Completely removes proc_holders from existence. Refactors all wizard, xeno, spider, and genetics powers to be actions. Also refactors and sorts ton of accompanying code. (#67083)
* destroy proc holder pt1
- change proc_holder/spell to action/cooldown/spell
- docs all the spell vars, renames some of them
- removes some useless vars
- start with pointed spells, as they're easy

* kill proc_holder pt2
- kill a buncha vars and replace it with flags
- convert a ton over
- general code improvements

* kill proc_holders pt3
- convert a good few more spells
- rename some signals
- handle statpanel
- better docs

* kiill proc_holder pt4:
- restructure the file system of action.dm, separating a good amount of item actions and miscellaneous garbage into files where they belong slightly better. Also splits off item actions, cooldown actions, innate actions, etc. into their own files, overlal making it much better to work with
- converts touch attacks to actions
- converts blood crawl, jaunt subtype

* kills proc_holder pt5
- clears up some icon issues so all the currently converted pages don't have errors
- shapeshift
- some more action cleanup

* kills proc_holder pt5.5:
- some documentation
- reworks feedback to prevent oversight with teleports and stuff

* kills proc_holder pt6:
- converted cult spells
- converted magic missile
- converted mime spells
- chipped away at the errors
- removed some vars which were too general, replaced them with more locally applicable vars. for example "range" which could mean "projectile range" or "aoe radius" or whatever - instead of having a broad net which everyone applies to in a confusing matter, instead lets each spell delegate on their own.
- merged magic/spell and magic/aoe, as the comment intended
- more unified behavior for spell levelling

* kill proc_holders pt 6.5:
- replacing a buncha old proc_holders that have been updated to reduce some errors. sub 900 baby

* kills proc_holder pt 6.75:
- minor fixes

* kills proc_holder pt7:
- cuts down on some errors
- refactors some wiz events

* kills proc_holder pt 7.5:
- malf ranged modules
- some minor errors

* kills proc_holder pt 7.75:
- mor eminor error handling, cleaning up changes

* kill proc_holder pt8:
- refactors spell book
- refactors spell implant
- some more minor error fixing

* kill proc_holder pt 8.5:
- scan ability

* Adds some robust documentation

* kill proc_holder pt9:
- converts some / most mutations over

* kill proc_holder pt10:
- sort out all the granters
- refactor them slightly
- fix some compile errors

* Some set-unset sanity - going to need to test removing Share()

* Removes transfer actions. It doesn't seem to do anything.
- Transfer_actions was called when current = new_character so locially speaking the early return in Grant() should cause it to NOOP. Test this in the future though

* Removes sharing from actions, docs actions better

* Some better documentation for spell and spell components

* Kills proc_holder pt11:
- Finally finishes ALL THE SPELLS IN THE SPELL FOLDER
- Fixes some more errors

* kills proc_holder pt11.5:
- minor error fixing and sanity

* Method of sharing actions. Can be improved  in the future, needs testing

* Implements a way to update the stat panel entry for a spell. Also gets rid of VV stuff, as you can update the bigflags directly in VV now.

* Curse of madness bug I put in.

* kills proc_holder pt12:
- sub 500 errors!
- converts cytology mobs
- converts and refactors spiders slightly
- some minor fixing around the place as usual

* kill proc_holder pt13
- Finishes heretic spells
- Sub 300 errors!
- some touch refactoring to account for mansus grasp

* kills proc_holder pt14:
- revenant
- minor bugfixing for heretic stuff

* kills proc_holder pt14.5:
- some missed stuff for revenant + heretic

* kills proc_holder pt15:
- alien abilities
- more minor fixing
- sub 100 errors. The end is nigh

* kill proc_holder pt16? 17:
- Finishes cult spells
- sub 50 errors!
- refactors the way charge works
- renames / moves some signals

* kills proc_holder pt final:
- sdql spells
- no more errors!

* Bugfixes round 1

* Various bugfixing
- documentation done
- give spell works
- can cast spell gives feedback conditionally
- is available takes into account casting ability

* Some accidental reversions + fixes

* Unit tests

* Completely refactors jaunting
- All bloodcrawling is now handled on the action itself instead of across various living procs
- slaughter demons have their own blood crawls
- jaunting dummies don't have side effects on destroy() anymore

* Wizard spell logging and even more refactoring
2022-07-01 02:01:02 -04:00
Andrew
e792e7f631 Fullscreen, status bar hiding, chat input following the theme (#67987)
* Initial commit

* input is colored according to the theme

* removed unused setting
2022-06-26 20:15:21 -04:00
Kylerace
e3acf068bf fixes ghost hearing (#67989) 2022-06-24 20:10:16 -05:00
Gandalf
110edaa153 Security Level Datums (#67949) 2022-06-24 17:01:45 -07:00
skylord-a52
c371232e2d Rename "Delimber" anomaly to "Bioscrambler" anomaly. (#67886)
Renames all occurrences of "delimber", "delimber_anomaly", "delimbering", etc. to "bioscrambler", "bioscrambler_anomaly", and "bioscrambling", etc.
2022-06-24 02:11:57 -04:00
Kylerace
8f0df7816b (code bounty) The tram is now unstoppably powerful. it cannot be stopped, it cannot be slowed, it cannot be reasoned with. YOU HAVE NO IDEA HOW READY YOU ARE (#66657)
ever see the tram take 10 milliseconds per movement to move 2100 objects? now you have
https://user-images.githubusercontent.com/15794172/166198184-8bab93bd-f584-4269-9ed1-6aee746f8f3c.mp4
About The Pull Request

fixes #66887

done for the code bounty posted by @MMMiracles to optimize the tram so that it can be sped up. the tram is now twice as fast, firing every tick instead of every 2 ticks. and is now around 10x cheaper to move. also adds support for multiz trams, as in trams that span multiple z levels.

the tram on master takes around 10-15 milliseconds per movement with nothing on it other than its starting contents. why is this? because the tram is the canary in the coal mines when it comes to movement code, which is normally expensive as fuck. the tram does way more work than it needs to, and even finds new ways to slow the game down. I'll walk you through a few of the dumber things the tram currently does and how i fixed them.

    the tram, at absolute minimum, has to move 55 separate industrial_lift platforms once per movement. this means that the tram has to unregister its entered/exited signals 55 times when "the tram" as a singular object is only entering 5 new turfs and exiting 5 old turfs every movement, this means that each of the 55 platforms calculates their own destination turfs and checks their contents every movement. The biggest single optimization in this pr was that I made the tram into a single 5x11 multitile object and made it only do entering/exiting checks on the 5 new and 5 old turfs in each movement.
    way too many of the default tram contents are expensive to move for something that has to move a lot. fun fact, did you know that the walls on the tram have opacity? do you know what opacity does for movables? it makes them recalculate static lighting every time they move. did you know that the tram, this entire time, was taking JUST as much time spamming SSlighting updates as it was spending time in SStramprocess? well it is! now it doesnt do that, the walls are transparent. also, every window and every grille on the tram had the atmos_sensitive element applied to them which then added connect_loc to them, causing them to update signals every movement. that is also dumb and i got rid of that with snowflake overrides. Now we must take care to not add things that sneakily register to Moved() or the moved signal to the roundstart tram, because that is dumb, and the relative utility of simulating objects that should normally shatter due to heat and conduct heat from the atmosphere is far less than the cost of moving them, for this one object.
    all tram contents physically Entered() and Exited() their destination and old turfs every movement, even though because they are on a tram they literally do not interact with the turf, the tram does. also, any objects that use connect_loc or connect_loc behalf that are on the same point on the tram also interact with each other because of this. now all contents of the tram act as if theyre being abstract_move()'d to their destination so that (almost) nothing thats in the destination turf or the exit turf can react to the event of "something laying on the tram is moving over you". the rare things that DO need to know what is physically entering or exiting their turf regardless of whether theyre interacting with the ground can register to the abstract entered and exited signals which are now always sent.
    many of the things hooked into Moved(), whether it be overrides of Moved() itself, or handlers for the moved signal, add up to a LOT of processing time. especially for humans. now ive gotten rid of a lot of it, mostly for the tram but also for normal movement. i made footsteps (a significant portion of human movement cost) not do any work if the human themselves didnt do the movement. i optimized has_gravity() a fair amount, and then realized that since everything on the tram isnt changing momentum, i didnt actually need to check gravity for the purposes of drifting (newtonian_move() was taking a significant portion of the cost of movement at some points along the development process). so now it simply doesnt call newtonian_move() for movements that dont represent a change in momentum (by default all movements do).

also i put effort into 1. better organizing tram/lift code so that most of it is inside of a dedicated modules folder instead of scattered around 5 generic folders and 2. moved a lot of behavior from lift platforms themselves into their lift_master_datum since ideally the platforms would just handle moving themselves, while any behavior involving the entire lift such as "move to destination" and "blow up" would be handled by the lift_master_datum.

also
https://user-images.githubusercontent.com/15794172/166220129-ff2ea344-442f-4e3e-94f0-ec58ab438563.mp4
multiz tram (this just adds the capability to map it like this, no tram does this)
Actual Performance Differences

to benchmark this, i added a world.Profile(PROFILER_START) and world.Profile(PROFILER_START) to the tram moving, so that it generates a profiler output of all tram movement without any unrelated procs being recorded (except for world.Profile() overhead). this made it a lot easier to quantify what was slowing down both the tram and movement in general. and i did 3 types of tests on both master and my branch.

also i should note that i sped up the "master" tram test to move once per tick as well, simply because the normal movement speed seems unbearably slow now. so all recorded videos are done at twice the speed of the real tram on master. this doesnt affect the main thing i was trying to measure: cost for each movement.

the first test was the base tram, containing only my player mob and the movables starting on the tram roundstart. on master, this takes around 13 milliseconds or so on my computer (which is pretty close to what it takes on the servers), on this branch, it takes between 0.9-1.3 milliseconds.

ALSO in these benchmarks youll see that tram/proc/travel() will vary significantly between the master and optimized branches. this is 100% because there are 55 times more platforms moving on master compared to the master branch, and thus 55x more calls to this proc. every test was recorded with the exact same amount of distance moved

here are the master and optimized benchmark text files:
master
master base tram.txt
https://user-images.githubusercontent.com/15794172/166210149-f118683d-6f6d-4dfb-b9e4-14f17b26aad8.mp4
also this shows the increased SSlighting usage resulting from the tram on master spamming updates, which doesnt happen on the optimized branch

optimized
optimization base tram.txt
https://user-images.githubusercontent.com/15794172/166206280-cd849aaa-ed3b-4e2f-b741-b8a5726091a9.mp4

the second test is meant to benchmark the best case scaling cost of moving objects, where nothing extra is registered to movement besides the bare minimum stuff on the /atom/movable level. Each of the open tiles of the tram had 1 bluespace rped filled with parts dumped onto it, to the point that the tram in total was moving 2100 objects. the vast majority of these objects did nothing special in movement so they serve as a good base case. only slightly off due to the rped's registering to movement.

on master, this test takes over 100 milliseconds per movement
master 2000 obj's.txt
https://user-images.githubusercontent.com/15794172/166210560-f4de620d-7dc6-4dbd-8b61-4a48149af707.mp4

when optimized, about 10 milliseconds per movement
https://user-images.githubusercontent.com/15794172/166208654-bc10086b-bbfc-49fa-9987-d7558109cc1d.mp4
optimization 2000 obj's.txt

the third test is 300 humans spawned onto the tram, meant to test all the shit added on to movement cost for humans/carbons. in retrospect this test is actually way too biased in favor of my optimizations since the humans are all in only 3 tiles, so all 100 humans on a tile are reacting to the other 99 humans movements, which wouldnt be as bad if they were distributed across 20 tiles like in the second test. so dont read into this one too hard.

on master, this test takes 200 milliseconds
master 300 catgirls.txt

when optimized, this takes about 13-14 milliseconds.
optimization 300 catgirls on ram ranch.txt
Why It's Good For The Game

the tram is literally 10x cheaper to move. and the code is better organized.
currently on master the tram is as fast as running speed, meaning it has no real relative utility compared to just running the tracks (except for the added safety of not having to risk being ran over by the tram). now the tram of which we have an entire map based around can be used to its full potential.

also, has some fixes to things on the tram reacting to movement. for example on master if you are standing on a tram tile that contains a banana and the TRAM moves, you will slip if the banana was in that spot before you (not if you were there first however). this is because the banana has no concept of relative movement, you and it are in the same reference frame but the banana, which failed highschool physics, believes you to have moved onto it and thus subjected you to the humiliation of an unjust slipping. now since tram contents that dont register to abstract entered/exited cannot know about other tram contents on the same tile during a movement, this cannot happen.

also, you no longer make footstep sounds when the tram moves you over a floor
TODO

mainly opened it now so i can create a stopping point and attend to my other now staling prs, we're at a state of functionality far enough to start testmerging it anyways.

add a better way for admins to be notified of the tram overloading the server if someone purposefully stuffs it with as much shit as they can, and for admins to clear said shit.
automatically slow down the tram if SStramprocess takes over like, 10 milliseconds complete. the tram still cant really check tick and yield without introducing logic holes, so making sure it doesnt take half of the tick every tick is important
go over my code to catch dumb shit i forgot about, there always is for these kinds of refactors because im very messy
remove the area based forced_gravity optimization its not worth figuring out why it doesnt work
fix the inevitable merge conflict with master lol
create an icon for the tram_tunnel area type i made so that objects on the tram dont have to enter and exit areas twice in a cross-station traversal

    add an easy way to vv tram lethality for mobs/things being hit by it. its an easy target in another thing i already wanted to do: a reinforced concept of shared variables from any particular tram platform and the entire tram itself. admins should be able to slow down the tram by vv'ing one platform and have it apply to the entire tram for example.

Changelog

cl
balance: the tram is now twice as fast, pray it doesnt get any faster (it cant without raising world fps)
performance: the tram is now about 10 times cheaper to move for the server
add: mappers can now create trams with multiple z levels
code: industrial_lift's now have more of their behavior pertaining to "the entire lift" being handled by their lift_master_datum as opposed to belonging to a random platform on the lift.
/cl
2022-06-24 13:42:09 +12:00
antropod
e8d6d93c95 Fix for randomized recipes not working (metalgen and secret sauce) (#67904) 2022-06-23 12:16:29 -07:00
ArcaneMusic
7f52ff0e39 Arconomy expansion pack 1: Convenience and Luxury goods (#67417) 2022-06-19 09:24:46 -07:00
LemonInTheDark
a6d4e180ad Adds a visualizer for lighting object updating. Optimizes the same (#67678)
It occured to me, we didn't have a good way to "see" what turfs were actually being updated
Figured I'd fix that

I've also added some debug vars on SSlighting to make testing with/without some checks easier

Speaking of which, I've added a second check to lighting corner updating
Basically, if our past and current cached rgb values are the same, there's no point updating

This is possible because static lighting is relative. If you've got a
TON of blue, it'll outweight the red and green you have in smaller amounts

We also do some rounding to ensure values look right

Similarly, if you've got roughly the same lighting, and a bit of something you already have a lot of is added, you're not likely to actually enter a new "bracket" of color

Anyway uh, it's hard to profile this, but I've seen it help quite a bit, mostly with things like emergency lighting that updates lighting in small amounts often, and in constricted spaces.

To some extent just comes down to map design
2022-06-18 19:50:18 -05:00
SmArtKar
7ba5baaa47 [NO GBP] Locate weakpoint hotfixes (#67386)
Fixed locate weakpoint do_after being 3 seconds instead of intended 30. Also you can no longer roll locate weakpoint until you get at least 20 minutes of progression via objectives - these two were commented out for testing reasons and I just forgot to uncomment them.

Also moves station_weakpoints from SStraitor to the objectives themselves.
2022-06-16 17:25:42 +01:00
distributivgesetz
763a10d1cc Resonance cascade polishening, bugfixes and better logging (#67488)
This PR rewrites almost all messages related to cascade events. Some messages felt kinda clunky to read or could have been written better. Overall, the new messages add to the experience as a cascade being a terrifying event in a way that I felt the old ones missed, and they make the event feel overall a lot sharper.

While looking at the resonance cascade code, I noticed that there a lot of stuff about cascades in the air which was not touched on. So, as I do, this PR evolved into a polish and roundup PR for cascades. There was a lot of stuff still hanging out relating to the event, and although the big backend of it sits, there was still a bit left to be completed. Therefore this PR deserves more the title of the "Resonance cascade POLISHENING" instead of the "REFLAVAHRING". But yeah, you ever go on a massive tangent before?
2022-06-16 16:22:22 +01:00
MrMelbert
3c584fd8d7 Fixes / makes it more clear about why research servers might not be generating research points. (#67458)
* Fixes research severs a bit, adds text for missing hard drives, and removes a ton of unused code.
2022-06-07 22:24:12 -04:00
Iamgoofball
aebd156a43 CARGONIA THE FREE: The Quartermaster is now a head of staff. (#67518)
* The Quartermaster is officially a head of staff, with new accesses, a silver ID, ect ect.
* The HoP lost their cargo-related equipment and access, including the Vault monitor, and frequency.
2022-06-07 21:38:02 -04:00
Son-of-Space
3dd6524ea7 [MDB IGNORE] Big Access Tweaks and Organization (#67512)
* Reorganizes some of the access and jobs access code for readability.
* Engineers get access to minisat and tcomms, atmos techs get it on skeleton crew.
* Service jobs that used to have morgue access without reason (bartender/botanist/hop) had it moved to skeleton crew.
* RD lost access to Mining, Mining station, and Medbay (holdover from Genetics), but gained Construction access to easily access the AI.
* Roboticist has had their skeleton crew access to ordnance revoked to align with the geneticist's skeleton crew access
* Miners no longer have SHIPPING access (renamed from Mail Sorting)
* The HoS and Paramedics have proper access to the basics in each department again
* Minisats across all maps now require Minisat access to access.
* Secure tech storage now once again requires both Command and Tech storage access again.
2022-06-07 00:46:05 -04:00
LemonInTheDark
345d1e71d5 Adds logging to overlay overflow errors (#67497)
So we've got this overlay cap of like 100 right? Prevents OOMs
But right now if you overrun it we have no way of knowing how you got
there, so we just end up with no info.

This pr solves that, by adding a printout of icon-icon_state-dir =
amount for each apperance.

Note, we are basically cheating by typing these overlay members as
mutable apperance, they can be just normal appearances, which we don't
have an accessible type for. Fortunately we can cheat.

Oh and if you overflow the limit you get the error overlay applied to
you, for sniks
2022-06-04 03:00:07 -07:00
vincentiusvin
ef036eb869 Assorted Ordnance Code+Map Quality Pass and QoL (#67097)
Three main things I do:

Reinforce the remap that i have made with code changes, making the atmos control devices sane and easy to put if someone else stumbles upon this part of the code again. (a4aea1e - f16e620)

Splits the ordnance areas and renames them, kills ordnance misc and things that have nothing to do with ordnance (anymore?) moves them to exp_lab (useful stuff here) and aux_lab (fluff stuff here like laser range in delta or second circuit lab in tram). (0c99f9f- 3c82a88)

Adds a roundstart program disk containing nt frontier to the ordnance office table. Added a hint to file manager there too to help give players a nudge on how to publish papers. (fd747dc)

First one: Makes mapping these things not require varedit, nicer for other people that dont know how the atmos control stuffs works.

Second one: Misc lab has nothing to do with ordnance jesus christ. Also ord hallway is now irrelevant, our ordnance labs are very far from box now. Will probably make downstreams a bit angry for a while though since they might not be fully up to date on the ordnance maps.

Third one: Pretty much justified it in the about section.

Why is this not atomic: This touches all five maps and needs code backing, so I might as well combine them into one maintenance PR instead of giving my peers merge conflict three times.
2022-06-02 17:15:17 -06:00
GoldenAlpharex
0a4a5d2afd Fixes map votes not happening when the ALLOW_MAP_VOTING config flag was disabled (#67394)
Fixes map votes not happening when allow map voting was disabled by config
2022-05-30 15:05:59 -04:00
SmArtKar
7544e865d0 3(or 4) new traitor objectives (#67287)
This PR introduces 3 new kind of traitor objectives:
Eyesnatcher objective, you'll need to remove your victim's eyes by any means. You will be given a device that you can use to pull out someone's eyes after 3 5 second delays. This would be quite loud and painful to the victim, so make sure you got them restrained or knocked out.

"Public" Sleeper protocol - this is a high progression(30+ minutes) objective. It's basically Sleeper Protocol, but availible for everyone instead of only med personnel.

Locate Structural Weakpoint - a high progression(45+ minutes) objectives that can be only completed once. You will recieve a device that you'll need to use in 2 different (somewhat secure) areas in order to triangulate the structural weakpoint of the station, you'll need to stay in the area for 30 seconds and station AI will be alerted about your attempt. After triangulating it, you will be given a location-locked explosive which will also create from 5 to 8 minor explosions in a 17-25 tile area.

Kidnap personnel - Basically old contractor kidnap. Down someone, get them to the extraction location, call in a pod, stuff them into it and send it back. Additional TCs if you bring them alive.
2022-05-28 00:43:39 -07:00