* Fixes mind traits (Curator, Miner, Clown) (#75593)
## About The Pull Request
Tower of Babel (Curator), Naive (Clown), and Storm detector (Shaft
Miner), are all traits that are given to your mind upon taking these
jobs.
However, we have been checking the body for these traits, not the mind.
This meant that Shaft miners werent alerted of ice storms, Clowns didnt
have their unique examine text, and Curators were affected by Tower of
Babel.
This fixes all those issues.
Naive and Tower of Babel realistically should only be on the mind, so I
changed all instances to check the mind. Storm detection is something
you can get through analyzers, so I left it as a check for both your
body and mind traits.
Clown's Naive:

Tower of Babel:

## Why It's Good For The Game
Fixes several bugs for 3 jobs all at once. I don't see any issue reports
on any of these, but they existed.
## Changelog
🆑
fix: Shaft Miners are now alerted of Icemoon storms, Clowns are naive,
and Curators are immune to the Tower of Babel again.
/🆑
* Fixes mind traits (Curator, Miner, Clown)
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Fixes syndicate ghost roles not spawning with codespeak language
* Fixes related NRI issues as well while we're at it
* Fixes a couple issue and adds the new naming scheme
* Phonetic alphabet numbers, fixes trailing space in formatting
* change to NATO numbers rather than phonetic
* final quality sweep
* moved this into the proper place
* Removes the no longer in use 'rank' var
* fixes a runtime
* Update modular_skyrat/master_files/code/modules/mob_spawn/mob_spawn.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Fixes a mistake
* refactor outfit paths
* Doc
* Fixes ashwalkers sometimes spawning without language
* Removes the need for post_transfer_prefs for languages and fixes language prefs not being applied correctly due to a bug
Fixes another bug - the innate language (common) was always being applied when a new mob was spawned on the station, but interestingly it works fine for ghost roles.
My solution to ensure that things are always set up correctly is to use the proc 'adjust_language_to_prefs' to do just that, and call it at the highest level after a mob spawns.
This fixes the bug that was making it so that even if you deselected common from language prefs you'd still get it no matter what. Which honestly I am still fuzzy on the precise cause of because of how much coupling there is between mind code, language holders, and spawning new mobs. The logic of this code is absolutely mental and rather than try to weave things into functions it seems best to just do this instead. Less prone to breakage that way.
* Update modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Suggestions
* A more fitting description for this var
* Modifies language perk tooltips to better fit the codebase, refactors do_not_sanitize into a whitelist instead that can be configured for species
The Ashwalker tooltip inaccurately listed common as a language they were able to speak. Also slightly changed the wording of the rest of the tooltips to reflect the fact it is possible to disable a species' native tongue via prefs.
Refactored the 'do_not_sanitize' var to use a whitelist instead, allowing for more reliable sanitizing and also more configuration for new species to have such features.
* rephrasing
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Add language variety to machines that speak (#71643)
## About The Pull Request
This builds on #70278 by giving other machines (vendors, newscasters,
computers, etc.) the ability to speak different languages. If the
station "Bot language malfunction" trait is rolled, then these machines
will select a random race starting language. If a machine is EMP'd then
it has a chance to change the language. There is also a language wire
that can be pulsed to change the language for vending machines.
Default language for machines is galactic common, but there are rare
exceptions:
- Beach vendors will now speak beachbum
- Syndicate vendors will now speak codespeak
- Changeling vendors will now speak a random language after each slogan
## Why It's Good For The Game
More depth to the language feature.
## Changelog
🆑
add: Add language variety to machines that speak. You can also pulse the
vendor language wire to make it switch languages or EMP a machine to get
the same effect.
add: Shambling cola vendors will now speak a different language each
time they talk. Syndicate vendors will now speak codespeak. Beach
vendors will now speak beachbum.
/🆑
* Add language variety to machines that speak
* updates imported vendors
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Paxilmaniac <paxilmaniac@gmail.com>
* Allows languages to weight the likelihood of certain syllables, refactors certain code related to pick_weight() (#71275)
## About The Pull Request
This PR does the following:
- Defines a new proc in __HELPERS/_lists.dm called
`pick_weight_recursive()`. This is the code from
`/obj/effect/spawner/random/` that allows for nested weighted lists,
moved to its own proc.
- Replaces explicit code in spawners/random.dm with calls to
`pick_weight_recursive()` where appropriate
- Deletes the redundant (and barely used) proc
`/obj/item/loot_table_maker/proc/pick_loot`, as this was equivalent to
`pick_weight_recursive()`
- Moves the global proc `fill_with_ones()` from spawners/random.dm to
__HELPERS/_lists.dm
- Replaces `pick()` in language syllable selection with
`pick_weight_recursive()`, allowing languages to define syllable weights
or use nested lists of syllables.
- Reformats Galactic Common to use nested lists of syllables, allowing
English and Chinese syllables to occur at equal frequency despite having
different numbers of each.
## Why It's Good For The Game
Allowing languages to define syllable weights and nested groups of
syllables is a relatively small change that greatly expands what you can
do with them. In addition to making Galactic Common look nicer in code,
this change also allows for the easy creation of languages with highly
uneven syllable distributions (including ultra-rare secret syllables,
perhaps) or the quick creation of pidgin languages that combine multiple
syllable sets.
Using a new proc simplifies spawner code by reducing repetition. Making
it global allows for other code to easily implement the same flexible
and elegant system of nested lists that spawners already use.
## Changelog
🆑
refactor: defines a new global proc, pick_weight_recursive()
code: languages can weight syllables, and galactic common's definition
is easier to look at
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Allows languages to weight the likelihood of certain syllables, refactors certain code related to pick_weight()
Co-authored-by: skylord-a52 <skylord-a52@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Wizard DLC - Tower of Babel (#69629)
About The Pull Request
This adds a new status effect called - Tower of Babel
Any carbon mob afflicted by the status effect will lose knowledge of every known language and gain a randomized one as a replacement. The affected mob will also be hit with a depressing moodlet that lasts for 15 seconds. Silicons are immune to all effects.
This effect is implemented in several ways:
Tower of Babel wizard event (all crew on the station z level are affected. The wizard is not and gains mastery of every language to taunt their victims)
Admin smite option
Admin secret event (can be reversed)
Staff of Babel (formerly the Staff of Sapping) will spawn during spawn magic wizard event
Magicarp will randomly shoot bolts of babel
Staff of Chaos will randomly shoot bolts of babel
Overdosing on Mushroom Hallucinogen will temporarily and sporadically acquire the effect
The effect can be blocked or cured in several ways:
Curators are given immunity
Reading a book of babel (via lavaland loot) cures and gives immunity
Reading a language book cures and gives immunity ONLY for that particular language
Note - The Tower of Babel does not allow tongueless, mute, or tongue tied people the ability to speak
* Wizard DLC - Tower of Babel
Co-authored-by: Tim <timothymtorres@gmail.com>
* Station trait "Bot language malfunction" triggers on newly created station bots (#70278)
* Bot language malfunction triggers on new bots
* List
* Station trait "Bot language malfunction" triggers on newly created station bots
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Da clownana update! Clownana rework, global hOnKeRbLaSt & monkey synergy. (#63899)
Since maintainer have expressed dissatisfaction with the state of clownanans, i've taken it upon myself to not only reduce their lag generation potential but to also make them more interesting.
All simplemob clowns now:
Are able to speak and understand the monkey language.
Are able to hit banana bunches to initiate the explosive ripening process.
The changes to clownananas speciecially are as follow;
Clownanas are able to rustle every 10 seconds to spawn 3 peels.
Clownanas have a speed of -1 rather than -10.
Clownanas gain the ability to spawn a banana bunch every minute.
Banana bunches are food items imbued with extra banana juice and monkey energy.
Hitting a banana bunch as a simplemob clown causes a honkerblast after a 3 seconds delay.
I've implemented a global honkerblast proc for future use, the honkerblast effects are similiar and inspired by the mech weapon, but less severe at light intensity and more severe at high intensity.
Maintainers are unhappy with the current state of the mob (It spawned enough bananas which never went away that when swept up into one place over 30 minutes, walking over the pile would cause minute long server freezes), and while the mob is popular and enjoyed by many players it is currently quite poorly designed and implemented by a novice coder.
These changes increase the strategic depth of playing this particular mob and rewards more active input from the player.
Co-authored-by: Seth Scherer <supernovaa41@ gmx.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* Da clownana update! Clownana rework, global hOnKeRbLaSt & monkey synergy.
Co-authored-by: Krysonism <49783092+Krysonism@users.noreply.github.com>
Co-authored-by: Seth Scherer <supernovaa41@ gmx.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@ users.noreply.github.com>
* Fixes a fuck ton more harddels (#58779)
Redoes how geese handle eating shit, it was fucking stupid and caused harddels, and while this method is technically slower in the best case, it's a fucking goose
Fixes action related harddels, I hate how they work but at least this way they won't hold refs.
Fixes the hierophont causing its beacon to harddel
Removes the M variable from megafauna actions, it was used like a typed owner and caused harddels, so I burned it
Fixes target and targets_from harddels, replaces all setters of target with LoseTarget and GiveTarget, which should help maintain behavior. I'm not sure if this breaks anything, but if it does we should fix the assumptions that code makes instead of reverting this change
Fixes more area_senstive_contents related harddels, we need to allow the mob to move before clearing out its list.
Fixes marked object harddels (I'm coming for you admin team)
Fixes a language based human harddel
Fixes managed overlay related harddels (This was just emissive blockers, but I think this is a good safety net to have. If we clear the overlay list we should clear this one as well)
Fixes bot core harddels, I hate the fact that this exists but it has no reason to know who its owner is
Adds a walk(src, 0) to simple_animal destroy, it's the best bang for the buck in terms of stopping spurious harddels. Walk related harddels aren't that expensive in the first place, since byond does the same thing I'm doing here, but this makes finding mob harddels easier, so let's go with it
I fixed another source of part harddels, I hate fullupgrade so much
Fixes all the sound loop harddels
* Fixes a fuck ton more harddels
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Renews Maintenance Drones
* And these have conflicts too, but you can't see them
* Skyrat Map Updates (Adding Supermatter Room Area)
Co-authored-by: Jonathan Rubenstein <jrubcop@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
* cultures and languages
* botanist fix
* missing languages
* make sure new saves from scratch get a species set correctly
* Update preferences.dm
* Update new_player.dm
Co-authored-by: Gandalf <jzo123@hotmail.com>
* Web edit fixing "Admins can't give spiders, and xenos common" (#55034)
About The Pull Request
See changelog.
Why It's Good For The Game
This will close#54987, close#50204.
Changelog
🆑
admin: Admins now have the option to remove a language from the blocked_languages list when granting it to a mob through the language menu.
/🆑
* Web edit fixing "Admins can't give spiders, and xenos common"
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
* Dronespeak manual is once again infinite use, and can once again only be used on drones or silicons. (#54192)
* Dronespeak manual is once again infinite use, and can once again only be used on drones or silicons.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Enforce preserving parent proc return values across ui_act call stacks (#53964)
All ui_act procs should call parent by default. All procs should preserve the value of the parent proc when it's TRUTHY and pass it down the call stack. No UI should be interactible when its flags or state indicate it should not be, except when explicity overriden by child procs intentionally disregarding parent return values to achieve a specific goal.
* Enforce preserving parent proc return values across ui_act call stacks
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Rebalances space loot and space exploration (#53916)
* Rebalances space loot and space exploration
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Adds nekomimetic, the felinid language (#52958)
Currently felinids are the only roundstart species without a language, this sees to that.
Changelog
cl Skoglol
add: Adds nekomimetic.
/cl
* Adds nekomimetic, the felinid language
Co-authored-by: skoglol <33292112+kriskog@users.noreply.github.com>
* tgchat (#52426)
Replaces goonchat with a tgui based chat panel
Fixes#52898Fixes#52663
It is as fast as goonchat was (if not faster in certain circumstances), and is very extensible. It has all the necessary code for sorting messages into categories, which means that one of the next features will be multiple tab support.
Additional features that you will get with tgchat right now:
Massively faster server-side performance compared to goonchat, especially if batching multiple messages to one client.
Message persistence across rounds and reconnects. (All messages are stored client-side in IndexedDB)
More robust scroll tracking. If you scroll up, it will not change the scroll position on new messages like goonchat did.
Multiple message combining. (Currently set to combine up to 5 messages over last 5 seconds).
If using the highlighting feature, it highlights the whole message as well as the matching word.
"Now playing" widget, with preview of the song title, a knob for adjusting the volume and a stop button.
Architecture is as following:
```
to_chat() -+
|
SSchat
(queue, batching)
|
window.send_message()
|
v
+-------------+
| tgui-panel |
|+-----------+|
|| tgchat ||
|+-----------+|
+-------------+
```
Subsystem is basically goonchat, but without all the garbage that slows the servers down (string concatenation, double urlencoding, sanitizing, etc). Now, instead of all that, it's being slowed down by json_encode in /datum/tgui_window/proc/send_message, which IMO is completely worth it, and allows sending various templates and widgets to tgchat.
/datum/tgui_window abstracts the whole window away from you, establishes a nice message-passing interface between DM and JS, with two message queues on each side, automatically loads js/css assets for you, basically does everything. You as a developer only have to worry about sending/receiving messages and write javascript.
tgui-panel is a slimmed down version of tgui, and functions as a container for various widgets, and tgchat is one of them. It of course can be expanded with more stuff.
It's also a separate entry point and a JS bundle, so it's not bloating the main tgui bundle, and is currently sitting at about 230kB.
* tgchat
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
* Cleanup up all instances of using var/ definitions in proc parameters. (#52728)
* var/list cleanup
* The rest of the owl
* plushvar bad
* Can't follow my own advice.
* Cleanup up all instances of using var/ definitions in proc parameters.
Co-authored-by: Timberpoes <silent_insomnia_pp@hotmail.co.uk>
* Adds Foreigner Quirk
Blocks Galactic Common
* Exceptions for species without secondary languages.
Adds beachtongue for humans and felinids
* Adds Galactic Uncommon
* Adds uncommon include into the .dme
Gotta tick that box
* Unicode support Part 2 -- copytext()
This is the transition of all copytext() calls to be unicode aware and also some nearby calls in the same functions. Most things are just replacing copytext() with copytext_char() as a terrible character limiter but a few others were slightly more involved.
I replaced a ton of
````
var/something = sanitize(input())
something = copytext(something, 1, MAX_MESSAGE_LEN)
````
with a single stripped_input() call. stripped_input() already calls html_encode(), trim(), and some other sanitization so there shouldn't be any major issues there.
This is still VERY rough btw; DNA is a mess, the status displays are complete ass, there's a copytext() in code\datums\shuttles.dm that I'm not sure what to do with, and I didn't touch anything in the tools folder. I haven't tested this much at all yet, I only got it to compile earlier this morning. There's also likely to be weird bugs until I get around to fixing length(), findtext(), and the rest of the string procs.
* Makes the code functional
* Assume color hex strings are always # followed by ascii.
Properly encodes and decodes the stuff in mob_helpers.dm which fixes some issues there.
* Removes ninjaspeak since it's unused
* Racial Languages
Adds a whole bunch of racial languages.
* Travis you are a cruel mistress
Snarky comments will be the death of me
* Better names, better language distribution
Decided to take some suggestions from the github and discord
* 2001: A Space Indent Odyssey
Fixed that stuff for you, green name man