* At first i thought that i was being forced to add a feature 🤮 but then i realized i was being encouraged to refactor 😄. Electrified chair is now a component instead of a failure (#57117)
* At first i thought that i was being forced to add a feature 🤮 but then i realized i was being encouraged to refactor 😄. Electrified chair is now a component instead of a failure
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Miscellaneous appearance fixes. (#57133)
* Fixes modular computer runtimes
- Adds a proc to eat the source arg of the update icon signal.
* Fixes a couple things not passing the right args
- Fixes the alien leap hallucination passing a string as the first arg to updat_icon
- Fixes the roulette machine passing the payout as the first arg to update_icon.
* Miscellaneous appearance fixes.
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* adds a bitflag for no random pixel shift on dropping, adds turf_flags var to replace usage of flags_1 on turfs (#57263)
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* adds a bitflag for no random pixel shift on dropping, adds turf_flags var to replace usage of flags_1 on turfs
Co-authored-by: Fikou <piotrbryla@onet.pl>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Improved visual clarity for health scanner text (#57076)
* Improved visual clarity for health scanner text
Co-authored-by: Sza'Thi <donniescatch@gmail.com>
* moves gun related icons to guns folder (#57077)
moves ammo icons, projectile icons and hitscan effect icons to guns folder
renames projectile.dmi to ballistic.dmi so its less confusing
moves rcd ammo from ammo.dmi to tools.dmi with the rcd
* moves gun related icons to guns folder
Co-authored-by: Fikou <piotrbryla@onet.pl>
* stop people using message all when their pda doesn't allow it (#57005)
Fixes not checking for Send All permissions in Topic.
* stops people using message all when their pda doesn't allow it
Co-authored-by: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
* Refactors the Light Eater and gives it some flavortext. Some minor behavior changes included. (#55551)
Converts the effects of the nightmares light eater into a component and a couple elements
Adds some flavor text to the light eater
Makes the effects of the nightmare's light eater dispel if the armblade is destroyed
Probably a net increase in code quality
More flavortext
The nightmare's light eater effect can be dispelled if you are willing to sacrifice the armblade
* Refactors the Light Eater and gives it some flavortext. Some minor behavior changes included.
Co-authored-by: TemporalOroboros <TemporalOroboros@gmail.com>
* Portable chem mixer: Integration of fermichem and minor updates to usability (#56894)
- The portable chem mixer now displays pH-values
- It can now dispense 1u of reagents, so buffer solutions can be added carefully
- It can now be loaded with bottles, plastic bottles and condiment bottles (all bottle types that the chem masters/chemistry can make). Beakers also still work of course.
- CTRL+click opens and closes it to switch between filling mode (inventory in which you place beakers and bottles) and dispensing mode (UI in which you dispense to a container)
- When worn on the belt and in filling mode, a left click opens its inventory. No more dragging or alt-clicking needed to open it. (alt-clicking to swap beakers in dispense mode still works, just like the normal dispensers)
- The UI has been resized to, in its default state, make it easier to visually skim through the chemicals in the list
* Portable chem mixer: Integration of fermichem and minor updates to usability
Co-authored-by: LordVollkorn <66637090+LordVollkorn@users.noreply.github.com>
* lowers the size of torches, and lets them be made with leafy mushrooms (#56877)
* lowers the size of torches, and lets them be made with leafy mushrooms
Co-authored-by: Elli-Skala <69182855+Elli-Skala@users.noreply.github.com>
* Change health analyzer, chemical scan is now on right click (#56779)
Health analyzer is now left click for health (or wounds, if you toggle
it) and right click for chemical scans.
Ever since the tgchat combine-previous-chats-in-one thing, knowing what
mode you're on has been a pain for me, as well as needing to cycle
through all of them. Furthermore, this is just a sane right-click
action to have.
* Chemical scan is now on right click, removes it as a toggle
Co-authored-by: Mothblocks <35135081+Jared-Fogle@users.noreply.github.com>
* Add pAI internal GPS to possible software (#56404)
pAIs are now a useful space travelling companion, they can help you
navigate if lost (although only the pAI has the GPS view, so they'll
need to communicate the information). If you're holding a GPS, then the
pAI can find you even if you get separated.
* Add pAI internal GPS to possible software
Co-authored-by: coiax <yellowbounder@gmail.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>
* Further tape and universal recorder improvements (#56023)
- Makes it so warning for time happens based on the time and not when the tape recorder hears something
- Makes stopping work correctly when we try to record with a full tape or when recording stops because of a full tape
- Uses the SECONDS and MINUTES defines instead of a mixture of undefined deciseconds and seconds that are multiplied by 10 (while having to divide by 10 in a couple of places)
- Cannot print a transcript for a blank tape
- Tweaks transcript name setting to be better formatted
- No longer update_icon() after stop() under play() (it's in the stop() proc)
- Reorders stopping to be consistent between playing and recording and logical (which probably makes no noticeable difference)
- Play/record hiss sound loop (mediocre due to lack of options in sound loops to cut and not fade in/out)
- Drop and pick up sounds
- 0→2 throwforce (like it was when Uhangi added them, before Hornygranny made it 0 for some reason)
- Cleans up radial image() usage
- Clarifies radial icon var
- Clarifies tape unspooling and respooling vars
- Random 3 char hexademical on tape names
- Tape can spawn on either side
- Adds greyscale tapes and randomised colouration
* Further tape and universal recorder improvements
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* Yellow slime core and Cakehats not directional light now (#55987)
Yellow slime core when turn on is 360deg as at should be and not directional light and slightly brighter.
Cakehats also get there 360deg light.
* Yellow slime core and Cakehats not directional light now
Co-authored-by: kopoba <kopoba.webmaster@gmail.com>
* Adds sound effects to the tape recorder (#55908)
Adds sound effects to the tape recorder.
Doesn't add the sound of the tape being inserted or removed or the playing/recording hum. Maybe another day. Would also like to add handling sounds to tapes like other objects have.
Why It's Good For The Game
Tape recorders make satisfying sounds. Makes the object feel more real.
Changelog
🆑 cacogen
soundadd: The tape recorder makes sounds when you interact with it
/🆑
* Adds sound effects to the tape recorder
Co-authored-by: cacogen <25089914+cacogen@users.noreply.github.com>
* A few minor tape recorder fixes (#55881)
Tape recorder cassette can no longer be rewound with a pen if it is not unwound.
Tape recorder transcript should look like it has text written on it!
Tape recorder can now play full tapes.
* A few minor tape recorder fixes
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Merge pull request #55798 from spessbro/please-assume-the-position
Integrates vibebots with the pda
* Integrates vibebots with the pda
Co-authored-by: 81Denton <32391752+81Denton@users.noreply.github.com>
* 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.)
* pass_flags handling refactor + rewrites a part of projectiles for the n-th time
Co-authored-by: silicons <2003111+silicons@users.noreply.github.com>
* Fixes chem and addiction scans, null checks for addiction_list (#55105)
So #54797 changed addiction_list to instantiate as a null instead of a list. Turns out a few things relied on the list existing!
Things like health analyser/medical kiosk chem and addiction scans broke, and smokers would no longer get addicted!
Made a few places check if addiction_list is null before continuing.
(Lemon's note, refactored some code to make it cleaner/removed some unneeded loop typechecks)
* Fixes chem and addiction scans, null checks for addiction_list
Co-authored-by: prodirus <44090982+prodirus@users.noreply.github.com>
* Humans have more complicated body temperatures (#54550)
This changes how carbon/humans stabilize body temperature, and changes how damage and wounds are applied based on temperature.
Humans now have a core body temperature along with body temperature. The core temperature is used for natural stabilization and what viruses like fever and shivers target by raising or lowing the core temperature of the mob.
The standard body temperature still exists and acts exactly the same for most items at this time but is now treated as surface temperature in humans.
Damage from body temperature for humans is now based on the core temperature instead of body temperature now.
Humans will now receive burn wounds when the body (surface) temperature is to high for to long.
This causes you to see alerts for the area temperature before you take damage in most cases improving visibility of dangerous situations.
* Humans have more complicated body temperatures
Co-authored-by: NightRed <nightred@gmail.com>
* Fixes PDA bombing have equal chances to work on PDAs without manifest access vs PDAs with it (#55036)
* Makes extra difficulty actually work
0
* Actually fixes it as of what Fikou suggested
* no space, sorry
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>
* Fixes PDA bombing have equal chances to work on PDAs without manifest access vs PDAs with it
Co-authored-by: Bond <58570888+TheBonded@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@ users.noreply.github.com>