Files
Yogstation/code/game/atoms.dm
Skrem_7 029bca0eaf Skrem is Less Dumb Edition: Modern Medievalism: Bows, Arrows, and Cloaks, oh my! (#17982)
* first bow powercreep edition

* first patch

* description updates

* added the stuff

* follow-up edits

* very mild voicebox updates

* all the stuff

* some value/wording changes + shifts shadow cloak to nukies

* halve bow slowdown

* aaaa

* uhoh

* cloak charge rate changes

* remove redundant line

* upgrades break bow damage to middle finger

* spellbook adjustments

* tribal armor tweaks (I'm looking at you pathfinder cloak and you're gonna get slapped soon)

* aaa

* more stuff

* agh

* done?

* minor tweaks + craftable gloves

* adds bone crossbow crafting recipe

* maybe fix cornflakes

* Squashed commit of the following:

commit 414af05928
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 18 22:05:17 2023 -0500

    Automatic changelog generation #17965 [ci skip]

commit 4dbd995239
Author: adamsong <adamsong@users.noreply.github.com>
Date:   Sat Feb 18 22:05:15 2023 -0500

    Fix apply_innate_effects not getting mob refs like its supposed to, fixes veil health not being modified (#17965)

commit 8f9f915f69
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 18 22:04:08 2023 -0500

    Automatic changelog generation #17970 [ci skip]

commit 50ed5323a5
Author: ynot01 <ynot000001@gmail.com>
Date:   Sat Feb 18 22:04:06 2023 -0500

    Easier wounds on unclosed surgery sites (#17970)

    * Update _bodyparts.dm

    * Update code/modules/surgery/bodyparts/_bodyparts.dm

commit 9c4d0652db
Author: Changelogs <action@github.com>
Date:   Sat Feb 18 14:07:01 2023 +0000

    Automatic changelog compile [ci skip]

commit 03aae8b4cf
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 18 01:58:51 2023 -0500

    Automatic changelog generation #17934 [ci skip]

commit 2761924c1b
Author: ynot01 <ynot000001@gmail.com>
Date:   Sat Feb 18 01:58:49 2023 -0500

    pvp enabled (#17934)

commit cfe754a9a5
Author: Changelogs <action@github.com>
Date:   Sat Feb 18 06:10:32 2023 +0000

    Automatic changelog compile [ci skip]

commit 491ba04913
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 18:08:00 2023 -0500

    Automatic changelog generation #17949 [ci skip]

commit a65d885b53
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 17 18:07:57 2023 -0500

    Fixes energy sword dupe exploit (#17949)

    * Update SuperBeepsky.dm

    * Update code/modules/mob/living/simple_animal/bot/SuperBeepsky.dm

    Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>

    * Update SuperBeepsky.dm

    ---------

    Co-authored-by: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>

commit 7a8a6689b6
Author: Changelogs <action@github.com>
Date:   Fri Feb 17 22:17:32 2023 +0000

    Automatic changelog compile [ci skip]

commit e43f06f61c
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 15:41:43 2023 -0500

    Automatic changelog generation #17924 [ci skip]

commit a4229d8acb
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 17 15:41:40 2023 -0500

    [BOUNTY] Holy Light sect, dedicated to healing (#17924)

    * you defy the light

    * revive and be less bad flavor

    * Update code/modules/religion/religion_sects.dm

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

    ---------

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

commit ad64a89f0a
Author: ktlwjec <122807629+ktlwjec0@users.noreply.github.com>
Date:   Fri Feb 17 18:04:42 2023 +0000

    removes plate from greeneggsandham (#17883)

commit b0c3ca40a8
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 10:59:34 2023 -0500

    Automatic changelog generation #17969 [ci skip]

commit eefceef5ed
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Fri Feb 17 16:59:31 2023 +0100

    [box] fixes opacity on psych doors (#17969)

    * windows

    * opac

commit 4b75b528ee
Author: Changelogs <action@github.com>
Date:   Fri Feb 17 14:07:57 2023 +0000

    Automatic changelog compile [ci skip]

commit 0a5d72beaf
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 01:56:41 2023 -0500

    Automatic changelog generation #17880 [ci skip]

commit f6ed8e4b0b
Author: adamsong <adamsong@users.noreply.github.com>
Date:   Fri Feb 17 01:56:39 2023 -0500

    Makes vote weight and preferred map actually work (#17880)

commit 22657a9023
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 01:50:20 2023 -0500

    Automatic changelog generation #17901 [ci skip]

commit 783f444541
Author: Aquizit <70451213+Aquizit@users.noreply.github.com>
Date:   Fri Feb 17 00:50:17 2023 -0600

    Adds new access define for Secure Tech Storage (#17901)

    * creates secure tech storage define, gives it to CE and adds it to appropriate lists

    * sets new access to secure tech storage doors

    * added secure tech storage to ID modification access

    * reverting map changes, will be changed in another pr per wej

commit b306a6f4c3
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 17 01:33:16 2023 -0500

    Automatic changelog generation #17935 [ci skip]

commit 32cdd383e4
Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com>
Date:   Fri Feb 17 01:33:14 2023 -0500

    Malfunctioning AIs no longer need to kill androids or synthetics (#17935)

    * Update objective.dm

    * Update Malf_Modules.dm

commit d83cc04e94
Author: Changelogs <action@github.com>
Date:   Fri Feb 17 06:11:59 2023 +0000

    Automatic changelog compile [ci skip]

commit b89713fa7c
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 22:40:04 2023 -0500

    Automatic changelog generation #17861 [ci skip]

commit 818973e1e9
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Fri Feb 17 04:40:02 2023 +0100

    fixes some issues in infiltrator base (#17861)

    * huh

    * man

    * adds griddle

    * that's really funny but fuck you

    ---------

    Co-authored-by: Byemoh <baiomurang@gmail.com>

commit af417335c1
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 22:32:01 2023 -0500

    Automatic changelog generation #17942 [ci skip]

commit 4e6037ec58
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Fri Feb 17 04:31:58 2023 +0100

    [box] Fixes some map issues (#17942)

    * eo

    * more

    * more fixes

    * damn

    * cargo double lights

    * rogue cable and wrong id on ai core door

    * derwalls a random rwall

    * tile

commit 2e52265500
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 20:08:21 2023 -0500

    Automatic changelog generation #17917 [ci skip]

commit 6ebf0318d9
Author: Theos <theubernyan@gmail.com>
Date:   Thu Feb 16 20:08:18 2023 -0500

    Removes the knockout from high level bloodsucker mesmerize since it makes the ability weaker (#17917)

    * Removes the knockout from high level bloodsucker mesmerize since it makes the ability weaker

    * Update mesmerize.dm

    * killing you

commit 7d664d3af5
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 20:06:53 2023 -0500

    Automatic changelog generation #17918 [ci skip]

commit dc8148dcb1
Author: ynot01 <ynot000001@gmail.com>
Date:   Thu Feb 16 20:06:51 2023 -0500

    Update roundend.dm (#17918)

commit a46d618224
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 20:06:21 2023 -0500

    Automatic changelog generation #17928 [ci skip]

commit f04bc81f0c
Author: LazennG <58535870+LazennG@users.noreply.github.com>
Date:   Thu Feb 16 17:06:18 2023 -0800

    Update kinetic_crusher.dm (#17928)

commit 18fa2ae7af
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 20:05:51 2023 -0500

    Automatic changelog generation #17946 [ci skip]

commit 6857bacb76
Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com>
Date:   Thu Feb 16 20:05:48 2023 -0500

    Update mousetrap.dm (#17946)

commit 1751af026c
Author: Changelogs <action@github.com>
Date:   Thu Feb 16 22:17:07 2023 +0000

    Automatic changelog compile [ci skip]

commit e005525535
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 12:19:45 2023 -0500

    Automatic changelog generation #17922 [ci skip]

commit bc8ae716ab
Author: Ling <lingbleed@gmail.com>
Date:   Thu Feb 16 18:19:42 2023 +0100

    Fixes Atmos fire fighting backpack (#17922)

commit e04fc1b6a8
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 12:18:03 2023 -0500

    Automatic changelog generation #17939 [ci skip]

commit 93daa6c361
Author: ynot01 <ynot000001@gmail.com>
Date:   Thu Feb 16 12:18:00 2023 -0500

    Bloodsucker Brawn knockdown patch (#17939)

    * Update brawn.dm

    * Update brawn.dm

    * Update brawn.dm

commit 1ef9484767
Author: Changelogs <action@github.com>
Date:   Thu Feb 16 14:09:56 2023 +0000

    Automatic changelog compile [ci skip]

commit eaff1fdb1b
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 05:52:39 2023 -0500

    Automatic changelog generation #17936 [ci skip]

commit 3d42d664bc
Author: adamsong <adamsong@users.noreply.github.com>
Date:   Thu Feb 16 05:52:36 2023 -0500

    Fixes editing bans in game (#17936)

    * Fixes editing bans in game

    * Fixes other error

commit 69ea8d6ca9
Author: Changelogs <action@github.com>
Date:   Thu Feb 16 06:11:47 2023 +0000

    Automatic changelog compile [ci skip]

commit 4e6a16b426
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 16 00:37:02 2023 -0500

    Automatic changelog generation #17923 [ci skip]

commit 2a7da8c107
Author: ynot01 <ynot000001@gmail.com>
Date:   Thu Feb 16 00:37:00 2023 -0500

    fixes clown sect not healing (#17923)

commit 890bc91805
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 20:56:34 2023 -0500

    Automatic changelog generation #17945 [ci skip]

commit b2b39d3ed8
Author: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Date:   Wed Feb 15 20:56:32 2023 -0500

    Update revolution.dm (#17945)

commit ec2cbd2c89
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 20:48:13 2023 -0500

    Automatic changelog generation #17864 [ci skip]

commit cd14d86ed6
Author: Theos <theubernyan@gmail.com>
Date:   Wed Feb 15 20:48:10 2023 -0500

    Buffs the ebow to be faster (#17864)

    * ebow buff??

    * obliterate ebow polonium

    * reduced cooldown

commit df7f9bc020
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 20:47:28 2023 -0500

    Automatic changelog generation #17870 [ci skip]

commit 232aa3fa55
Author: ynot01 <ynot000001@gmail.com>
Date:   Wed Feb 15 20:47:26 2023 -0500

    Update bloodsuckers.dm (#17870)

commit d679caad3c
Author: Changelogs <action@github.com>
Date:   Wed Feb 15 22:17:39 2023 +0000

    Automatic changelog compile [ci skip]

commit 9678f1f65a
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 14:58:11 2023 -0500

    Automatic changelog generation #17930 [ci skip]

commit 039792ea37
Author: Byemoh <baiomurang@gmail.com>
Date:   Wed Feb 15 13:58:09 2023 -0600

    NVS Gax Incinerator Expansion (#17930)

commit a0fe3e174c
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 11:04:14 2023 -0500

    Automatic changelog generation #17941 [ci skip]

commit a263586d88
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Wed Feb 15 17:04:08 2023 +0100

    eee (#17941)

commit f8b90faa17
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 10:11:12 2023 -0500

    Automatic changelog generation #17721 [ci skip]

commit 1d22d7da18
Author: ynot01 <ynot000001@gmail.com>
Date:   Wed Feb 15 10:11:07 2023 -0500

    Long Awaited Psychiatrist Rework (#17721)

    * PART FIVE

    * Update brain_trauma.dm

    * Update examine.dm

    * Update mild.dm

    * Update brain_trauma.dm

    * Update brain_trauma.dm

    * anomalous floating lightswitch

    * undo unintended map changes

    I am sorry I don't know what happened to asteroid station I don't know what changed on the AI satellite I am sorry mapper man

    * can no longer cure things u shouldnt

    wound traumas
    traumas that require the aheal staff
    traumas that come from quirks

    * wej

    * wej 2

    * Update YogStation.dmm

    * Update brain_trauma.dm

    * Update brain_trauma.dm

    * Update brain_trauma.dm

commit 85de433d2d
Author: Changelogs <action@github.com>
Date:   Wed Feb 15 14:08:21 2023 +0000

    Automatic changelog compile [ci skip]

commit a8bd8c2280
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 07:32:49 2023 -0500

    Automatic changelog generation #17916 [ci skip]

commit 3b587559a5
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Wed Feb 15 06:32:46 2023 -0600

    Who approved this (#17916)

commit 6828c4758d
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 06:58:56 2023 -0500

    Automatic changelog generation #17914 [ci skip]

commit 3e3ab2b4d6
Author: ktlwjec <122807629+ktlwjec0@users.noreply.github.com>
Date:   Wed Feb 15 11:58:53 2023 +0000

    fixes processor recipes (#17914)

commit 601ce3f675
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 06:41:26 2023 -0500

    Automatic changelog generation #17888 [ci skip]

commit bf8867a331
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Wed Feb 15 05:41:24 2023 -0600

    no hardcritdamage (#17888)

commit e1a500ec62
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 05:28:58 2023 -0500

    Automatic changelog generation #17781 [ci skip]

commit 874db73a73
Author: ynot01 <ynot000001@gmail.com>
Date:   Wed Feb 15 05:28:55 2023 -0500

    Revert commit 64a6c3a (#17781)

    This reverts 64a6c3ac21

commit 734d6ec0fc
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 15 05:28:03 2023 -0500

    Automatic changelog generation #17772 [ci skip]

commit 30d564c8dc
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Wed Feb 15 04:28:00 2023 -0600

    A vain attempt to make the minigun more viable (#17772)

    * mmm minigun

    * Update minigun.dm

commit e7542e1f55
Author: Changelogs <action@github.com>
Date:   Wed Feb 15 06:11:58 2023 +0000

    Automatic changelog compile [ci skip]

commit b5ed98fe7c
Author: Ling <lingbleed@gmail.com>
Date:   Wed Feb 15 02:18:53 2023 +0100

    Fix crew monitor runtime (#17921)

commit 4c7b5535b6
Author: Changelogs <action@github.com>
Date:   Tue Feb 14 14:08:13 2023 +0000

    Automatic changelog compile [ci skip]

commit cfb81a4b91
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 14 04:06:15 2023 -0500

    Automatic changelog generation #17919 [ci skip]

commit 5268119ca6
Author: ynot01 <ynot000001@gmail.com>
Date:   Tue Feb 14 04:06:12 2023 -0500

    Update recharger.dm (#17919)

commit 06acbae28d
Author: Changelogs <action@github.com>
Date:   Tue Feb 14 06:12:20 2023 +0000

    Automatic changelog compile [ci skip]

commit 369dba9990
Author: Changelogs <action@github.com>
Date:   Mon Feb 13 22:17:26 2023 +0000

    Automatic changelog compile [ci skip]

commit a8b8df1868
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 13 16:51:13 2023 -0500

    Automatic changelog generation #17887 [ci skip]

commit 991c54d7e3
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Mon Feb 13 22:51:10 2023 +0100

    yeah (#17887)

commit d9aec4444d
Author: Changelogs <action@github.com>
Date:   Mon Feb 13 06:12:20 2023 +0000

    Automatic changelog compile [ci skip]

commit bad039c45f
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 12 17:52:39 2023 -0500

    Automatic changelog generation #17897 [ci skip]

commit f251ff8187
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Sun Feb 12 17:52:36 2023 -0500

    better metashield (#17897)

commit 1c7d28f658
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 12 17:51:22 2023 -0500

    Automatic changelog generation #17889 [ci skip]

commit 4f4d2d8bbb
Author: LazennG <58535870+LazennG@users.noreply.github.com>
Date:   Sun Feb 12 14:51:19 2023 -0800

    cooldown actions isavailable now calls parent pro (#17889)

commit 5e3f4b08a7
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 12 17:50:40 2023 -0500

    Automatic changelog generation #17894 [ci skip]

commit 062f0a2fd5
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Sun Feb 12 16:50:37 2023 -0600

    augh (#17894)

commit 494bbd1982
Author: ynot01 <ynot000001@gmail.com>
Date:   Sun Feb 12 07:41:24 2023 -0500

    Update yogstation.dme (#17903)

commit 596b836652
Author: Changelogs <action@github.com>
Date:   Sun Feb 12 06:10:28 2023 +0000

    Automatic changelog compile [ci skip]

commit dc689f3715
Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date:   Sun Feb 12 01:30:21 2023 +0100

    Moves some config settings around which should make debug builds from github run faster (#17900)

          * config update

    * opos

commit 80284d7ca0
Author: Changelogs <action@github.com>
Date:   Sat Feb 11 22:15:52 2023 +0000

    Automatic changelog compile [ci skip]

commit 56e85c55c3
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 13:38:04 2023 -0500

    Automatic changelog generation #17833 [ci skip]

commit 80afe50f46
Author: ynot01 <ynot000001@gmail.com>
Date:   Sat Feb 11 13:38:01 2023 -0500

    Darkspawn is now a midround instead of a gamemode (#17833)

    * dspawn midround

    * disable

    * performance

    * move sec counting down

    * disable nightmare

    * changes S to H

    * runtime safety

    * H and D to var names

commit 435823b827
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 12:49:50 2023 -0500

    Automatic changelog generation #17878 [ci skip]

commit fa4b2b98a3
Author: ynot01 <ynot000001@gmail.com>
Date:   Sat Feb 11 12:49:47 2023 -0500

    You can no longer change directions while dead (#17878)

    * Update bindings_atom.dm

    * Update bindings_atom.dm

    * Update bindings_atom.dm

commit 75cfed640f
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 12:17:44 2023 -0500

    Automatic changelog generation #17842 [ci skip]

commit 291a70fb8f
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Sat Feb 11 11:17:42 2023 -0600

    Removes appendix from darkspawn (#17842)

    * no appendix please

    * just uses nohunger

    * thing

    * might as well remove it from shadowpeople

    they have enough going against them as is

commit 1cc076d57a
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 12:14:44 2023 -0500

    Automatic changelog generation #17828 [ci skip]

commit fef1aed09b
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Sat Feb 11 11:14:42 2023 -0600

    IPC martial buffs (#17828)

    * IPC martial tweak

    * update the movespeed

    * it's the mob that does it

    * bit more uplink stuff

    * no other guns

commit bf62a065f5
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 12:01:19 2023 -0500

    Automatic changelog generation #17824 [ci skip]

commit 20c67e451b
Author: ynot01 <ynot000001@gmail.com>
Date:   Sat Feb 11 12:01:16 2023 -0500

    Antag Reputation Redux (#17824)

    * antag repwork

    * check centcom specifically

    * GLOB.player_list

    * Update antag_rep.txt

    * Update antag_rep.txt

    * better loop

    * set miner to 6

    * set AI to 6

    * cook 5

    * psyfch 5

commit 866c4f0e97
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:39:29 2023 -0500

    Automatic changelog generation #17814 [ci skip]

commit 64726b0798
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Sat Feb 11 11:39:26 2023 -0500

    Changes lizard hiss and increases staff, mentor, and donor retention by allowing felinids to hiss. (#17814)

    * adds sound

    * felinids can hiss

    * felinids can purr

    * You can no longer purr at people

    NanoTrasen has noticed an increase in harassment complaints from stations that employ felinids. The reports indicate that felinids would purr at people. NanoTrasen has since banned workplace purring at people.

    * removes purring

    * update lizard hiss

commit b956f2caae
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:36:59 2023 -0500

    Automatic changelog generation #17809 [ci skip]

commit 00769859a2
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Sat Feb 11 10:36:57 2023 -0600

    Nanite heart buff (#17809)

commit 87bd1794db
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:36:15 2023 -0500

    Automatic changelog generation #17805 [ci skip]

commit f286bdb997
Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com>
Date:   Sat Feb 11 11:36:12 2023 -0500

    you are a good (#17805)

commit a737b7291e
Author: Ling <lingbleed@gmail.com>
Date:   Sat Feb 11 17:35:33 2023 +0100

    Fix a ton of harddels (#17803)

    * Fix a ton of harddels

    * Out of scope

    * Stupid

commit f77eb885d9
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:34:47 2023 -0500

    Automatic changelog generation #17724 [ci skip]

commit 8f4993ae0b
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Sat Feb 11 10:34:45 2023 -0600

    Miners wormhole jaunter location shuffle (#17724)

    * Gives mining medic a jaunter

    * in the outfit rather than the locker

    ---------

    Co-authored-by: Jamie D <993128+JamieD1@users.noreply.github.com>

commit a6779b3a77
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:27:41 2023 -0500

    Automatic changelog generation #17778 [ci skip]

commit 402e2d775a
Author: Xander3359 <66163761+Xander3359@users.noreply.github.com>
Date:   Sat Feb 11 11:27:38 2023 -0500

    One handed crusher (With new sprites) (#17778)

    * 1-Handed Crusher

    The crusher can now be held in 1 hand, wield it to use it.

    * one-handed crusher

    one-handed crusher

    * Update dynamic.json

commit fa67c930d0
Author: Jamie D <993128+JamieD1@users.noreply.github.com>
Date:   Sat Feb 11 16:23:06 2023 +0000

    Update dynamic_rulesets_roundstart.dm

commit 0e05a643a6
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:20:01 2023 -0500

    Automatic changelog generation #17720 [ci skip]

commit 738aac2d74
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Sat Feb 11 10:19:59 2023 -0600

    Revert "replaces chasm spawn from tendrils with lava (#17340)" (#17720)

    This reverts commit d0abdd2d33.

commit 0679f56ea6
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 11:19:12 2023 -0500

    Automatic changelog generation #17609 [ci skip]

commit a5660a07e6
Author: Theos <theubernyan@gmail.com>
Date:   Sat Feb 11 11:19:10 2023 -0500

    Increase wizard playercount from 27 to 34 so its not syndicate station 2 (the second one) (#17609)

    * Increase wizard playercount from 27 to 37 so its not syndicate station 2 (the second one)

    * Update wizard.dm

    * Update dynamic_rulesets_roundstart.dm

commit d1ec159cf3
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 10:50:38 2023 -0500

    Automatic changelog generation #17610 [ci skip]

commit f49b009b1d
Author: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com>
Date:   Sat Feb 11 07:50:35 2023 -0800

    Increase nuke op from 27 to 37 so its not syndicate station 3 (the third one) (#17610)

commit 75b0447f82
Author: Changelogs <action@github.com>
Date:   Sat Feb 11 14:07:34 2023 +0000

    Automatic changelog compile [ci skip]

commit ab07a0c5ca
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 04:18:21 2023 -0500

    Automatic changelog generation #17739 [ci skip]

commit ed09aa658d
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Sat Feb 11 03:18:18 2023 -0600

    Removes mod disks from loot pool, and makes them orderable from cargo. Also adds a KA crate. (#17739)

    * fug

    * no more disks

commit f6cd327077
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 04:07:17 2023 -0500

    Automatic changelog generation #17873 [ci skip]

commit 09a038e850
Author: LazennG <58535870+LazennG@users.noreply.github.com>
Date:   Sat Feb 11 01:07:15 2023 -0800

    no more curveballs (#17873)

commit 186fedce46
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 04:05:05 2023 -0500

    Automatic changelog generation #17865 [ci skip]

commit 422a595d6c
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Sat Feb 11 04:05:02 2023 -0500

    makes darkspawn mindshield text a little less cringe (#17865)

    * makes this text a little less cringe

    * i love repetition of sound

commit c4217e2080
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sat Feb 11 04:04:45 2023 -0500

    Automatic changelog generation #17867 [ci skip]

commit 20fc9d7f33
Author: Theos <theubernyan@gmail.com>
Date:   Sat Feb 11 04:04:42 2023 -0500

    Reduces drakeling attack cooldowns slightly to match the mining equipment they are meant to upgrade (#17867)

commit fdf31d11a7
Author: Changelogs <action@github.com>
Date:   Sat Feb 11 06:10:17 2023 +0000

    Automatic changelog compile [ci skip]

commit 6b0ddaf194
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 20:45:30 2023 -0500

    Automatic changelog generation #17863 [ci skip]

commit 484a70bdc6
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Fri Feb 10 20:45:27 2023 -0500

    hammer fix (#17863)

commit c3f4bee6a9
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 20:43:51 2023 -0500

    Automatic changelog generation #17866 [ci skip]

commit 44d935e116
Author: Mqiib <43766432+Mqiib@users.noreply.github.com>
Date:   Fri Feb 10 20:43:49 2023 -0500

    Unfucks darkspawn veils but they're still weaker (#17866)

    * brtuh

    * Update yogstation/code/game/gamemodes/darkspawn/veil.dm

    whoops

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

    ---------

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

commit 80045a2877
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 19:56:54 2023 -0500

    Automatic changelog generation #17770 [ci skip]

commit 40564ae7f4
Author: githubuser4141 <61243846+githubuser4141@users.noreply.github.com>
Date:   Sat Feb 11 13:56:51 2023 +1300

    Buffs the MK-II Ripley's speed (#17770)

    * dir

    * Update mecha_defense.dm

    * Update uplink_items.dm

    * Update uplink_items.dm

    * Update uplink_items.dm

    * Update ripley.dm

    * Update ripley.dm

    * Update uplink_items.dm

commit bece519a8b
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 18:45:30 2023 -0500

    Automatic changelog generation #17784 [ci skip]

commit 4a499be90f
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Fri Feb 10 18:45:27 2023 -0500

    True semi-auto shotguns + racking medium/heavy ballistics requires both hands + removes outdated stechkin animations (#17784)

    * shotguns actually semi-auto now

    * updates desc

    * removes stechkin animations

    * fixes rack sound

    * Update code/modules/projectiles/guns/ballistic.dm

    Co-authored-by: tattax <71668564+tattax@users.noreply.github.com>

    * slight fixes

    ---------

    Co-authored-by: tattax <71668564+tattax@users.noreply.github.com>

commit 24ad52b6bd
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 18:22:35 2023 -0500

    Automatic changelog generation #17835 [ci skip]

commit 053f8bf856
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Fri Feb 10 18:22:32 2023 -0500

    Typo fix (#17835)

    * Update swarmer.dm

    * Update scripture_scripts.dm

    * Update golems.dm

    * Update pen.dm

    * Update touch_attacks.dm

    * Update uplink_items.dm

    * Update explosive_fist.dm

    * Update garden_warfare.dm

    * Update stealth.dm

    * Update uplink_item.dm

    * Update code/modules/mob/living/carbon/human/species_types/golems.dm

    Co-authored-by: ynot01 <ynot000001@gmail.com>

    * Update scripture_scripts.dm

    ---------

    Co-authored-by: ynot01 <ynot000001@gmail.com>

commit d0e1c6f1f9
Author: Ling <lingbleed@gmail.com>
Date:   Sat Feb 11 00:09:14 2023 +0100

    Actually fixes gas mixer sprite for real this time (#17840)

commit 66545d3bee
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 18:07:46 2023 -0500

    Automatic changelog generation #17847 [ci skip]

commit b04412e57e
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Fri Feb 10 17:07:42 2023 -0600

    Removes #1 cause of suicide in Lizards (#17847)

    * CarkFetishContent

    * 20 minutes and chat message

    * no dead lizards

    * optimization

commit c6ab8818ff
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 18:01:32 2023 -0500

    Automatic changelog generation #17854 [ci skip]

commit 0c13569569
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Fri Feb 10 17:01:20 2023 -0600

    Gives mining medic a laptop to keep track of bodycams (#17854)

    * Gives mining medic a laptop

    * upgraded network card

commit 9a3512a44b
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:59:29 2023 -0500

    Automatic changelog generation #17836 [ci skip]

commit 606c9ced8f
Author: Aquizit <70451213+Aquizit@users.noreply.github.com>
Date:   Fri Feb 10 16:59:27 2023 -0600

    Adds Personnel HUD Type, gives HoP and Cap a pair of sunglasses with it (#17836)

    * adds personnel hud type, sunglasses for HoP and Cap with it

    * renames CMO shades for HoP/Cap, made new shades for CMO

    * forgot to make the sunglasses tint blue

commit fc4a64ed52
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:58:53 2023 -0500

    Automatic changelog generation #17871 [ci skip]

commit ab089cfae7
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 17:58:51 2023 -0500

    Cult tiles now block atmos like everyone though it did (#17871)

    * Update reinf_floor.dm

    * Update cult_structures.dm

    * Update cult_structures.dm

commit 20af730457
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:58:27 2023 -0500

    Automatic changelog generation #17819 [ci skip]

commit 3e918a5658
Author: Mqiib <43766432+Mqiib@users.noreply.github.com>
Date:   Fri Feb 10 17:58:25 2023 -0500

    Unstupidify (#17819)

commit 411c213dcd
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:58:11 2023 -0500

    Automatic changelog generation #17818 [ci skip]

commit 919a2686b6
Author: Ling <lingbleed@gmail.com>
Date:   Fri Feb 10 23:58:08 2023 +0100

    Prevents wormholes from spawning in syndicate shuttles (#17818)

commit b66d0720bb
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:56:47 2023 -0500

    Automatic changelog generation #17811 [ci skip]

commit b9eb469042
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Fri Feb 10 16:56:44 2023 -0600

    Reduces body temp increase from being on fire (#17811)

    * Greatly reduces heat from being on fire

    * even less

commit cdb38b84fd
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:49:43 2023 -0500

    Automatic changelog generation #17804 [ci skip]

commit 1f02d82d27
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 17:49:41 2023 -0500

    from fortnite (#17804)

    do the thing

commit 0c64a222c8
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:47:18 2023 -0500

    Automatic changelog generation #17801 [ci skip]

commit f6bf19009f
Author: Ezhan <39889035+Ethan4303@users.noreply.github.com>
Date:   Fri Feb 10 17:47:15 2023 -0500

    rotates the gas simulator in yogstation turbine (#17801)

commit 7c9b4054a0
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 17:46:46 2023 -0500

    Protects events from being faked random by admins (#17790)

    * Update _event.dm

    * Update _event.dm

commit cf793830ec
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:46:06 2023 -0500

    Automatic changelog generation #17785 [ci skip]

commit 15bb9f53b7
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Fri Feb 10 17:46:03 2023 -0500

    adds a spare mag to oddjob kit (#17785)

commit c69563273b
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:45:23 2023 -0500

    Automatic changelog generation #17769 [ci skip]

commit 367cf38f16
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 17:45:20 2023 -0500

    Purchasable autosurgeon for 5TC (#17769)

    * syndi cat

    * Update uplink_items.dm

commit 247a50bc9f
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:43:58 2023 -0500

    Automatic changelog generation #17735 [ci skip]

commit 167ab6af2b
Author: SapphicOverload <93578146+SapphicOverload@users.noreply.github.com>
Date:   Fri Feb 10 17:43:55 2023 -0500

    Multilingual quirk can no longer give you centcom encrypted language and costs 2 points instead of 3 (#17735)

    * guh

    * Update good.dm

commit bb77f2d6a3
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 17:22:33 2023 -0500

    Automatic changelog generation #17856 [ci skip]

commit f13f241426
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Fri Feb 10 17:22:31 2023 -0500

    Revert "Removes felinid language (#17825)" (#17856)

    This reverts commit e75cb0ad00.

commit c53b3bc784
Author: Changelogs <action@github.com>
Date:   Fri Feb 10 22:17:13 2023 +0000

    Automatic changelog compile [ci skip]

commit bf214dad30
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 15:57:59 2023 -0500

    Automatic changelog generation #17832 [ci skip]

commit 0144098f5c
Author: Addust <80979251+Addust@users.noreply.github.com>
Date:   Fri Feb 10 20:57:56 2023 +0000

    Gives onehalf a blue oxygen tank instead of a red one inside the safe (#17832)

    yes

commit 84c1ff3331
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 13:08:39 2023 -0500

    Automatic changelog generation #17881 [ci skip]

commit e2ce0336ff
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Fri Feb 10 19:08:36 2023 +0100

    ye (#17881)

commit 596ac490f7
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 12:29:57 2023 -0500

    Automatic changelog generation #17812 [ci skip]

commit 2047871e5b
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Fri Feb 10 11:29:53 2023 -0600

    Adds a chemical that purges nanites (#17812)

    * NaniteRemovalChemical

    * rename

    * Update code/modules/reagents/chemistry/reagents/medicine_reagents.dm

    Co-authored-by: Ling <lingbleed@gmail.com>

    ---------

    Co-authored-by: Ling <lingbleed@gmail.com>

commit bb0d420b09
Author: wejengin2 <48154165+wejengin2@users.noreply.github.com>
Date:   Fri Feb 10 16:04:20 2023 +0100

    Massacres the unused maps. (#17764)

    * someone has to do it

    * camels

    * order

    * ok no

commit 0424f5f5e4
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 09:40:37 2023 -0500

    Automatic changelog generation #17823 [ci skip]

commit 611fc49e0b
Author: Jamie D <993128+JamieD1@users.noreply.github.com>
Date:   Fri Feb 10 14:40:33 2023 +0000

    e (#17823)

commit adda8bc9a0
Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date:   Fri Feb 10 15:17:47 2023 +0100

    Update unique_donator_items.dm (#17874)

commit 3a8ad081f9
Author: Changelogs <action@github.com>
Date:   Fri Feb 10 14:08:30 2023 +0000

    Automatic changelog compile [ci skip]

commit ff2f15a395
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 05:01:24 2023 -0500

    Automatic changelog generation #17848 [ci skip]

commit 58a00ef32d
Author: Waterpig <49160555+Majkl-J@users.noreply.github.com>
Date:   Fri Feb 10 11:01:21 2023 +0100

    Adds barricading of airlocks and doors (#17848)

    * I like wood 😩

    * Makes them faster to remove

    * 😩

    * I hate molti

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

    ---------

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

commit 726c31fd2f
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 04:29:51 2023 -0500

    Automatic changelog generation #17807 [ci skip]

commit 9d4d28edd3
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Fri Feb 10 04:29:48 2023 -0500

    Removes corn syrup from catsip (#17807)

commit a995a0e6fd
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 04:28:25 2023 -0500

    Automatic changelog generation #17831 [ci skip]

commit d35292c3d4
Author: Ling <lingbleed@gmail.com>
Date:   Fri Feb 10 10:28:20 2023 +0100

    RPD now builds even when clicked on another pipe (#17831)

commit 51fd6de808
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 03:53:48 2023 -0500

    Automatic changelog generation #17852 [ci skip]

commit 9f91e2edf7
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Fri Feb 10 02:53:45 2023 -0600

    les go (#17852)

commit a55a6d4297
Author: Changelogs <action@github.com>
Date:   Fri Feb 10 06:11:39 2023 +0000

    Automatic changelog compile [ci skip]

commit 380e400cb3
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 01:04:58 2023 -0500

    Automatic changelog generation #17837 [ci skip]

commit 861567f4db
Author: Byemoh <baiomurang@gmail.com>
Date:   Fri Feb 10 00:04:56 2023 -0600

    Update airlock.dm (#17837)

commit 08cec4a012
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 01:01:14 2023 -0500

    Automatic changelog generation #17813 [ci skip]

commit 5cf47b2580
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 01:01:12 2023 -0500

    Update hologram.dm (#17813)

commit ef783cb856
Author: Yogbot-13 <admin@yogstation.net>
Date:   Fri Feb 10 00:58:35 2023 -0500

    Automatic changelog generation #17834 [ci skip]

commit a00b6ce757
Author: ynot01 <ynot000001@gmail.com>
Date:   Fri Feb 10 00:58:33 2023 -0500

    Update medbeam.dm (#17834)

commit d5b72b2259
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 9 20:22:06 2023 -0500

    Automatic changelog generation #17723 [ci skip]

commit 4a6973a465
Author: Byemoh <baiomurang@gmail.com>
Date:   Thu Feb 9 19:22:03 2023 -0600

    Falling into a chasm doesn't delete your body and someone can fish you up (#17723)

    * eeeee

    * e

    * map

    * break

    * eeeee

    * cope

    * Update chasm.dm

commit 229d6664ef
Author: Changelogs <action@github.com>
Date:   Thu Feb 9 22:17:48 2023 +0000

    Automatic changelog compile [ci skip]

commit f606eaac8e
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 9 10:41:20 2023 -0500

    Automatic changelog generation #17670 [ci skip]

commit 26ad93fd58
Author: ynot01 <ynot000001@gmail.com>
Date:   Thu Feb 9 10:41:17 2023 -0500

    Big Heretic revamp (finally) (#17670)

    * heresy

    * Update eldritch_book.dm

    * heat resistant lizards

    * 5 tile range only!

    * delete the shield dummy!

    * Update eldritch_items.dm

    * new sounds

    * Update eldritch_antag.dm

    * Update eldritch_items.dm

    * sanity

    * Update code/modules/antagonists/eldritch_cult/eldritch_book.dm

    Co-authored-by: Ling <lingbleed@gmail.com>

    ---------

    Co-authored-by: Ling <lingbleed@gmail.com>

commit 2264d7e6bc
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 9 10:36:18 2023 -0500

    Automatic changelog generation #17795 [ci skip]

commit 6e401075bd
Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date:   Thu Feb 9 16:36:15 2023 +0100

    It now takes 6 seconds to cremate someone, and 3 seconds to break out if they're conscious (#17795)

    * Update morgue.dm

    * Update morgue.dm

    * Update code/game/objects/structures/morgue.dm

    * Update code/game/objects/structures/morgue.dm

commit c28d359784
Author: Yogbot-13 <admin@yogstation.net>
Date:   Thu Feb 9 10:27:17 2023 -0500

    Automatic changelog generation #17766 [ci skip]

commit a0c31d2aee
Author: Skrem_7 <98909416+Skrem7@users.noreply.github.com>
Date:   Thu Feb 9 10:27:13 2023 -0500

    brrrt (#17766)

commit 9ff2bc445a
Author: Changelogs <action@github.com>
Date:   Thu Feb 9 06:11:19 2023 +0000

    Automatic changelog compile [ci skip]

commit d268cadeda
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 8 18:44:13 2023 -0500

    Automatic changelog generation #17806 [ci skip]

commit c223e28c9d
Author: Ling <lingbleed@gmail.com>
Date:   Thu Feb 9 00:44:11 2023 +0100

    Fix 'id in pda' pref (#17806)

commit 44decca884
Author: Changelogs <action@github.com>
Date:   Wed Feb 8 22:16:57 2023 +0000

    Automatic changelog compile [ci skip]

commit d750b905dd
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 8 13:17:57 2023 -0500

    Automatic changelog generation #17777 [ci skip]

commit 00a527192b
Author: Manatee <74586965+MajManatee@users.noreply.github.com>
Date:   Wed Feb 8 12:17:54 2023 -0600

    More snowflake items - Boxta (#17777)

    * all non spritework

    * Quirky first hat

    * mmm sprites

commit f028dd3418
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 8 12:31:26 2023 -0500

    Automatic changelog generation #17825 [ci skip]

commit e75cb0ad00
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Wed Feb 8 12:31:23 2023 -0500

    Removes felinid language (#17825)

    * Removes felinid language from silicons

    * Removes multilingual (felinid) trait

    * Removes felinid from being granted upon using cat ears

    * Redd moment

    * removes felinid from tongue's possible language base.

    * removes felinid from telecomms

    * removes felinid from language holders

    * removes the felinid language as it provides a material benefit to donors

    * gives felinids the english language holder

    * removes felinid language icon

commit 060c415b04
Author: Changelogs <action@github.com>
Date:   Wed Feb 8 14:08:15 2023 +0000

    Automatic changelog compile [ci skip]

commit 7345f0e82d
Author: Yogbot-13 <admin@yogstation.net>
Date:   Wed Feb 8 05:39:07 2023 -0500

    Automatic changelog generation #17846 [ci skip]

commit 3e51ef4f8b
Author: Molti <108117184+Moltijoe@users.noreply.github.com>
Date:   Wed Feb 8 04:39:03 2023 -0600

    Update lavaland_surface_maze.dmm (#17846)

commit e7823cfc39
Author: Changelogs <action@github.com>
Date:   Wed Feb 8 06:11:43 2023 +0000

    Automatic changelog compile [ci skip]

commit d927ebc03d
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 20:39:04 2023 -0500

    Automatic changelog generation #17802 [ci skip]

commit 0fd7dcfc9d
Author: cuackles <68789204+cuackles@users.noreply.github.com>
Date:   Tue Feb 7 22:39:01 2023 -0300

    monkey energy no longer becomes invisible when crushed (#17802)

    * Update janitor.dmi

    * Update janitor.dmi

    * Update janitor.dmi

commit 61601d937e
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 19:57:01 2023 -0500

    Automatic changelog generation #17791 [ci skip]

commit 902e743274
Author: BurgerLUA <8602857+BurgerLUA@users.noreply.github.com>
Date:   Tue Feb 7 16:56:58 2023 -0800

    MALF is no longer continuous (#17791)

commit 81c0963f74
Author: TheGamerdk <5618080+TheGamerdk@users.noreply.github.com>
Date:   Wed Feb 8 01:56:07 2023 +0100

    Update adminhelp.dm (#17783)

commit 95947d2fe2
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 19:53:00 2023 -0500

    Automatic changelog generation #17742 [ci skip]

commit f83723c389
Author: Ling <lingbleed@gmail.com>
Date:   Wed Feb 8 01:52:57 2023 +0100

    Ports SSfoam and SSsmoke (#17742)

    * Ports SSfoam and SSsmoke

    * Remove dupe define

commit 9bb63a7577
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 19:52:22 2023 -0500

    Automatic changelog generation #17738 [ci skip]

commit 0cf7ecf050
Author: Ling <lingbleed@gmail.com>
Date:   Wed Feb 8 01:52:19 2023 +0100

    Actually adds passive vent to RPD (#17738)

    * Actually adds passive vent to RPD

    * Fixed and re-added passive vents

commit 5b9d198f6f
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 18:37:58 2023 -0500

    Automatic changelog generation #17816 [ci skip]

commit 148e80f8ec
Author: ynot01 <ynot000001@gmail.com>
Date:   Tue Feb 7 18:37:55 2023 -0500

    Fixes foam darts not doing any stamina damage (#17816)

    * Update foam_dart.dm

    * Update foam_dart.dm

commit 42165a9806
Author: Changelogs <action@github.com>
Date:   Tue Feb 7 22:17:04 2023 +0000

    Automatic changelog compile [ci skip]

commit b9f7613d59
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 14:59:58 2023 -0500

    Automatic changelog generation #17748 [ci skip]

commit 1cfbe0fd48
Author: Byemoh <baiomurang@gmail.com>
Date:   Tue Feb 7 13:59:54 2023 -0600

    adds det's sunglasses and shit on his desk on gax and other misc stuff (#17748)

    * eeeeeeeeee

    * shudders

    * readds stuff

commit 3947b4ac5a
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 11:46:17 2023 -0500

    Automatic changelog generation #17799 [ci skip]

commit c3cfad4913
Author: ynot01 <ynot000001@gmail.com>
Date:   Tue Feb 7 11:46:14 2023 -0500

    weird (#17799)

commit 8de1275a99
Author: Changelogs <action@github.com>
Date:   Tue Feb 7 14:08:44 2023 +0000

    Automatic changelog compile [ci skip]

commit 198c9f89aa
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 06:52:05 2023 -0500

    Automatic changelog generation #17822 [ci skip]

commit 63928e7f87
Author: Jamie D <993128+JamieD1@users.noreply.github.com>
Date:   Tue Feb 7 11:52:02 2023 +0000

    Update game_options.txt (#17822)

commit 7daad46a71
Author: Yogbot-13 <admin@yogstation.net>
Date:   Tue Feb 7 05:15:44 2023 -0500

    Automatic changelog generation #17776 [ci skip]

commit b01613407a
Author: Byemoh <baiomurang@gmail.com>
Date:   Tue Feb 7 04:15:40 2023 -0600

    Alternate Gax Arrivals design for free miner ship (#17776)

    * Update GaxStation.dmm

    * Update GaxStation.dmm

    * e

commit 23abc5abd2
Author: Changelogs <action@github.com>
Date:   Tue Feb 7 06:11:41 2023 +0000

    Automatic changelog compile [ci skip]

commit d170eab0aa
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 6 19:03:32 2023 -0500

    Automatic changelog generation #17797 [ci skip]

commit 1aac303800
Author: Redd <36747151+ReddicusDragon@users.noreply.github.com>
Date:   Mon Feb 6 19:03:29 2023 -0500

    Updates inventory procs to allow silent pickup (#17797)

    * adds make_sound parameter to put_in_hands, first step to making items able to be picked up with or without sound

    * adds make_sound parameter to put_in_active_hand, second step in allowing items to be picked up with or without sound

    * adds make_sound parameter to put_in_hand, third step

    * redd moment

    * weeeeeeee

    * NukeOps nuke code papers spawning are now silent

commit 57283fa900
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 6 18:17:08 2023 -0500

    Automatic changelog generation #17712 [ci skip]

commit b2c06b0866
Author: Byemoh <baiomurang@gmail.com>
Date:   Mon Feb 6 17:17:05 2023 -0600

    Lavaland Corn Maze Ruin (#17712)

    * eeee

    * yep

    * Update lavaruinblacklist.txt

    ---------

    Co-authored-by: wejengin2 <48154165+wejengin2@users.noreply.github.com>

commit 0d00d7457c
Author: Changelogs <action@github.com>
Date:   Mon Feb 6 22:16:37 2023 +0000

    Automatic changelog compile [ci skip]

commit 7955f64f79
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 6 10:52:52 2023 -0500

    Automatic changelog generation #17582 [ci skip]

commit 8df29b5392
Author: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com>
Date:   Mon Feb 6 16:52:48 2023 +0100

    Uranium eating aegun, second try (#17582)

    * new aegun

    * it just work

    * Update code/modules/projectiles/guns/energy/energy_gun.dm

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

    * Add files via upload

    * dfuisqbdusq

    ---------

    Co-authored-by: Molti <108117184+Moltijoe@users.noreply.github.com>

commit 498e4e6ae4
Author: Changelogs <action@github.com>
Date:   Mon Feb 6 14:09:30 2023 +0000

    Automatic changelog compile [ci skip]

commit e37654707e
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 6 07:43:42 2023 -0500

    Automatic changelog generation #17768 [ci skip]

commit 5725a33174
Author: ynot01 <ynot000001@gmail.com>
Date:   Mon Feb 6 07:43:39 2023 -0500

    Foam darts now deal stamina damage if you're holding a toy foam gun (#17768)

    * Update foam_dart.dm

    * Update foam_dart.dm

commit d7f3ee4734
Author: Yogbot-13 <admin@yogstation.net>
Date:   Mon Feb 6 06:38:11 2023 -0500

    Automatic changelog generation #17707 [ci skip]

commit a6c0573423
Author: Mqiib <43766432+Mqiib@users.noreply.github.com>
Date:   Mon Feb 6 06:38:08 2023 -0500

    Shimmyjimmies ion bolts to be less "why are they like that" and more "hey that kinda makes sense" (#17707)

    * NEW IONS

    * forgor

    * hos gun shooty

commit cc868113c1
Author: Changelogs <action@github.com>
Date:   Sun Feb 5 22:15:50 2023 +0000

    Automatic changelog compile [ci skip]

commit 0343eb61c8
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 5 14:37:43 2023 -0500

    Automatic changelog generation #17749 [ci skip]

commit e9bb5b6679
Author: ynot01 <ynot000001@gmail.com>
Date:   Sun Feb 5 14:37:41 2023 -0500

    Adds the rest of the roundstart race languages to multilingual quirks (#17749)

    * Update good.dm

    * Update code/datums/traits/good.dm

    Co-authored-by: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com>

    ---------

    Co-authored-by: 00ze-cyclone <96987868+00ze-cyclone@users.noreply.github.com>

commit 00d55013b1
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 5 12:14:21 2023 -0500

    Automatic changelog generation #17779 [ci skip]

commit 85661c5d71
Author: LazennG <58535870+LazennG@users.noreply.github.com>
Date:   Sun Feb 5 09:14:18 2023 -0800

    buster arm patch (#17779)

commit 20b3adaae3
Author: Changelogs <action@github.com>
Date:   Sun Feb 5 14:07:35 2023 +0000

    Automatic changelog compile [ci skip]

commit 123638a50e
Author: Yogbot-13 <admin@yogstation.net>
Date:   Sun Feb 5 01:21:47 2023 -0500

    Automatic changelog generation #17774 [ci skip]

commit 707b8379f9
Author: ktlwjec <122807629+ktlwjec0@users.noreply.github.com>
Date:   Sun Feb 5 06:21:45 2023 +0000

    blue burger uses patty (#17774)

commit 6ba5dd3f5f
Author: Changelogs <action@github.com>
Date:   Sun Feb 5 06:10:13 2023 +0000

    Automatic changelog compile [ci skip]

* Revert "Squashed commit of the following:"

This reverts commit 294dc43cff.

* makes anomaly quiver printable

* running it back

* DIE ICON CORNFLAKES DIE

* Revert "DIE ICON CORNFLAKES DIE"

This reverts commit a5294ffab4.

* if this does not work I will scream

* i forgor lazenn redid this

* linter fixes?

* weh

* adds returning variable to break bow

* fixes quiver/hardlight outlines

* resets dmi files

* hello?

* indentation my beloathed

* icons? please don't github

* fixes gumballs/lollipops

* fixes foam force shotguns

* Revert "fixes foam force shotguns"

This reverts commit 37d079dc91.

* fixes foam force for real

* tidies up some sprites

* agh

* fixes bone-tipped nocked sprite

* makes it so beanbag "slugs" don't look like syringes

* fixes in-hand bone-tipped

* removes message_admins from debugging (oops)

* fixes an oversight with bone crossbow crafting

* aaa

* agh

* Agh x2

* should fix icon cornflakes

* killing

* holy shit i think i learned something today

* a g h

---------

Co-authored-by: nmajask <nmajask@gmail.com>
2023-05-06 23:11:36 -05:00

1430 lines
46 KiB
Plaintext

/**
* The base type for nearly all physical objects in SS13
* Lots and lots of functionality lives here, although in general we are striving to move
* as much as possible to the components/elements system
*/
/atom
layer = TURF_LAYER
plane = GAME_PLANE
var/level = 2
///If non-null, overrides a/an/some in all cases
var/article
///First atom flags var
var/flags_1 = NONE
///Intearaction flags
var/interaction_flags_atom = NONE
///Reagents holder
var/datum/reagents/reagents = null
///This atom's HUD (med/sec, etc) images. Associative list.
var/list/image/hud_list = null
///HUD images that this atom can provide.
var/list/hud_possible
///Value used to increment ex_act() if reactionary_explosions is on
var/explosion_block = 0
/**
* used to store the different colors on an atom
*
* its inherent color, the colored paint applied on it, special color effect etc...
*/
var/list/atom_colours
///overlays that should remain on top and not normally removed when using cut_overlay functions, like c4.
var/list/priority_overlays
/// a very temporary list of overlays to remove
var/list/remove_overlays
/// a very temporary list of overlays to add
var/list/add_overlays
///vis overlays managed by SSvis_overlays to automaticaly turn them like other overlays
var/list/managed_vis_overlays
///Proximity monitor associated with this atom
var/datum/proximity_monitor/proximity_monitor
///Cooldown tick timer for buckle messages
var/buckle_message_cooldown = 0
///Last fingerprints to touch this atom
var/fingerprintslast
var/list/filter_data //For handling persistent filters
///Economy cost of item
var/custom_price
///Economy cost of item in premium vendor
var/custom_premium_price
///Whether spessmen with an ID with an age below AGE_MINOR (21 by default) can buy this item
var/age_restricted = FALSE
//List of datums orbiting this atom
var/datum/component/orbiter/orbiters
/// Radiation insulation types
var/rad_insulation = RAD_NO_INSULATION
///The custom materials this atom is made of, used by a lot of things like furniture, walls, and floors (if I finish the functionality, that is.)
var/list/custom_materials
///Bitfield for how the atom handles materials.
var/material_flags = NONE
var/chat_color_name // Last name used to calculate a color for the chatmessage overlays
var/chat_color // Last color calculated for the the chatmessage overlays
var/chat_color_darkened // A luminescence-shifted value of the last color calculated for chatmessage overlays
///Mobs that are currently do_after'ing this atom, to be cleared from on Destroy()
var/list/targeted_by
var/atom/orbit_target //Reference to atom being orbited
/**
* Called when an atom is created in byond (built in engine proc)
*
* Not a lot happens here in SS13 code, as we offload most of the work to the
* [Intialization](atom.html#proc/Initialize) proc, mostly we run the preloader
* if the preloader is being used and then call InitAtom of which the ultimate
* result is that the Intialize proc is called.
*
* We also generate a tag here if the DF_USE_TAG flag is set on the atom
*/
/atom/New(loc, ...)
//atom creation method that preloads variables at creation
if(GLOB.use_preloader && (src.type == GLOB._preloader_path))//in case the instanciated atom is creating other atoms in New()
world.preloader_load(src)
if(datum_flags & DF_USE_TAG)
GenerateTag()
var/do_initialize = SSatoms.initialized
if(do_initialize != INITIALIZATION_INSSATOMS)
args[1] = do_initialize == INITIALIZATION_INNEW_MAPLOAD
if(SSatoms.InitAtom(src, args))
//we were deleted
return
SSdemo.mark_new(src)
/**
* The primary method that objects are setup in SS13 with
*
* we don't use New as we have better control over when this is called and we can choose
* to delay calls or hook other logic in and so forth
*
* During roundstart map parsing, atoms are queued for intialization in the base atom/New(),
* After the map has loaded, then Initalize is called on all atoms one by one. NB: this
* is also true for loading map templates as well, so they don't Initalize until all objects
* in the map file are parsed and present in the world
*
* If you're creating an object at any point after SSInit has run then this proc will be
* immediately be called from New.
*
* mapload: This parameter is true if the atom being loaded is either being intialized during
* the Atom subsystem intialization, or if the atom is being loaded from the map template.
* If the item is being created at runtime any time after the Atom subsystem is intialized then
* it's false.
*
* You must always call the parent of this proc, otherwise failures will occur as the item
* will not be seen as initalized (this can lead to all sorts of strange behaviour, like
* the item being completely unclickable)
*
* You must not sleep in this proc, or any subprocs
*
* Any parameters from new are passed through (excluding loc), naturally if you're loading from a map
* there are no other arguments
*
* Must return an [initialization hint](code/__DEFINES/subsystems.html) or a runtime will occur.
*
* Note: the following functions don't call the base for optimization and must copypasta handling:
* * /turf/Initialize
* * /turf/open/space/Initialize
*/
/atom/proc/Initialize(mapload, ...)
SHOULD_CALL_PARENT(TRUE)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
flags_1 |= INITIALIZED_1
//atom color stuff
if(color)
add_atom_colour(color, FIXED_COLOUR_PRIORITY)
if (light_system == STATIC_LIGHT && light_power && light_range)
update_light()
if (opacity && isturf(loc))
var/turf/T = loc
T.has_opaque_atom = TRUE // No need to recalculate it in this case, it's guaranteed to be on afterwards anyways.
if (canSmoothWith)
canSmoothWith = typelist("canSmoothWith", canSmoothWith)
if(custom_materials && custom_materials.len)
var/temp_list = list()
for(var/i in custom_materials)
var/datum/material/material = getmaterialref(i) || i
temp_list[material] = custom_materials[material] //Get the proper instanced version
custom_materials = null //Null the list to prepare for applying the materials properly
set_custom_materials(temp_list)
ComponentInitialize()
return INITIALIZE_HINT_NORMAL
/**
* Late Intialization, for code that should run after all atoms have run Intialization
*
* To have your LateIntialize proc be called, your atoms [Initalization](atom.html#proc/Initialize)
* proc must return the hint
* [INITIALIZE_HINT_LATELOAD](code/__DEFINES/subsystems.html#define/INITIALIZE_HINT_LATELOAD)
* otherwise you will never be called.
*
* useful for doing things like finding other machines on GLOB.machines because you can guarantee
* that all atoms will actually exist in the "WORLD" at this time and that all their Intialization
* code has been run
*/
/atom/proc/LateInitialize()
return
/// Put your AddComponent() calls here
/atom/proc/ComponentInitialize()
return
/**
* Top level of the destroy chain for most atoms
*
* Cleans up the following:
* * Removes alternate apperances from huds that see them
* * qdels the reagent holder from atoms if it exists
* * clears the orbiters list
* * clears overlays and priority overlays
* * clears the light object
*/
/atom/Destroy()
if(alternate_appearances)
for(var/current_alternate_appearance in alternate_appearances)
var/datum/atom_hud/alternate_appearance/selected_alternate_appearance = alternate_appearances[current_alternate_appearance]
selected_alternate_appearance.remove_from_hud(src)
if(reagents)
qdel(reagents)
orbiters = null // The component is attached to us normaly and will be deleted elsewhere
// Checking length(overlays) before cutting has significant speed benefits
if (length(overlays))
overlays.Cut()
LAZYCLEARLIST(priority_overlays)
for(var/i in targeted_by)
var/mob/M = i
LAZYREMOVE(M.do_afters, src)
targeted_by = null
QDEL_NULL(light)
if (length(light_sources))
light_sources.Cut()
return ..()
/atom/proc/handle_ricochet(obj/item/projectile/P)
return
///Can the mover object pass this atom, while heading for the target turf
/atom/proc/CanPass(atom/movable/mover, turf/target)
SHOULD_CALL_PARENT(TRUE)
SHOULD_BE_PURE(TRUE)
if(mover.movement_type & UNSTOPPABLE)
return TRUE
. = CanAllowThrough(mover, target)
// This is cheaper than calling the proc every time since most things dont override CanPassThrough
if(!mover.generic_canpass)
return mover.CanPassThrough(src, target, .)
/// Returns true or false to allow the mover to move through src
/atom/proc/CanAllowThrough(atom/movable/mover, turf/target)
SHOULD_CALL_PARENT(TRUE)
SHOULD_BE_PURE(TRUE)
return !density
/**
* Is this atom currently located on centcom
*
* Specifically, is it on the z level and within the centcom areas
*
* You can also be in a shuttleshuttle during endgame transit
*
* Used in gamemode to identify mobs who have escaped and for some other areas of the code
* who don't want atoms where they shouldn't be
*/
/atom/proc/onCentCom()
var/turf/T = get_turf(src)
if(!T)
return FALSE
if(is_reserved_level(T.z))
for(var/A in SSshuttle.mobile)
var/obj/docking_port/mobile/M = A
if(M.launch_status == ENDGAME_TRANSIT)
for(var/place in M.shuttle_areas)
var/area/shuttle/shuttle_area = place
if(T in shuttle_area)
return TRUE
if(!is_centcom_level(T.z))//if not, don't bother
return FALSE
//Check for centcom itself
if(istype(T.loc, /area/centcom))
return TRUE
//Check for centcom shuttles
for(var/A in SSshuttle.mobile)
var/obj/docking_port/mobile/M = A
if(M.launch_status == ENDGAME_LAUNCHED)
for(var/place in M.shuttle_areas)
var/area/shuttle/shuttle_area = place
if(T in shuttle_area)
return TRUE
/**
* Is the atom in any of the centcom syndicate areas
*
* Either in the syndie base on centcom, or any of their shuttles
*
* Also used in gamemode code for win conditions
*/
/atom/proc/onSyndieBase()
var/turf/T = get_turf(src)
if(!T)
return FALSE
if(!is_centcom_level(T.z))//if not, don't bother
return FALSE
if(istype(T.loc, /area/shuttle/syndicate) || istype(T.loc, /area/syndicate_mothership) || istype(T.loc, /area/shuttle/assault_pod))
return TRUE
return FALSE
///This atom has been hit by a hulkified mob in hulk mode (user)
/atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0)
SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user)
if(does_attack_animation)
user.changeNext_move(CLICK_CD_MELEE)
log_combat(user, src, "punched", "hulk powers")
user.do_attack_animation(src, ATTACK_EFFECT_SMASH)
/**
* Ensure a list of atoms/reagents exists inside this atom
*
* Goes throught he list of passed in parts, if they're reagents, adds them to our reagent holder
* creating the reagent holder if it exists.
*
* If the part is a moveable atom and the previous location of the item was a mob/living,
* it calls the inventory handler transferItemToLoc for that mob/living and transfers the part
* to this atom
*
* Otherwise it simply forceMoves the atom into this atom
*/
/atom/proc/CheckParts(list/parts_list)
for(var/A in parts_list)
if(istype(A, /datum/reagent))
if(!reagents)
reagents = new()
reagents.reagent_list.Add(A)
reagents.conditional_update()
else if(ismovable(A))
var/atom/movable/M = A
if(isliving(M.loc))
var/mob/living/L = M.loc
L.transferItemToLoc(M, src)
else
M.forceMove(src)
///Hook for multiz???
/atom/proc/update_multiz(prune_on_fail = FALSE)
return FALSE
///Take air from the passed in gas mixture datum
/atom/proc/assume_air(datum/gas_mixture/giver)
qdel(giver)
return null
///Remove air from this atom
/atom/proc/remove_air(amount)
return null
///Return the current air environment in this atom
/atom/proc/return_air()
if(loc)
return loc.return_air()
else
return null
/atom/proc/return_analyzable_air()
return null
///Return the air if we can analyze it
///Check if this atoms eye is still alive (probably)
/atom/proc/check_eye(mob/user)
return
/atom/proc/Bumped(atom/movable/AM)
set waitfor = FALSE
/// Convenience proc to see if a container is open for chemistry handling
/atom/proc/is_open_container()
return is_refillable() && is_drainable()
/// Is this atom injectable into other atoms
/atom/proc/is_injectable(mob/user, allowmobs = TRUE)
return reagents && (reagents.flags & (INJECTABLE | REFILLABLE))
/// Can we draw from this atom with an injectable atom
/atom/proc/is_drawable(mob/user, allowmobs = TRUE)
return reagents && (reagents.flags & (DRAWABLE | DRAINABLE))
/// Can this atoms reagents be refilled
/atom/proc/is_refillable()
return reagents && (reagents.flags & REFILLABLE)
/// Is this atom drainable of reagents
/atom/proc/is_drainable()
return reagents && (reagents.flags & DRAINABLE)
/// Are you allowed to drop this atom
/atom/proc/AllowDrop()
return FALSE
/// Are you allowed to pass a sided object of the same dir
/atom/proc/CheckExit()
return TRUE
///Is this atom within 1 tile of another atom
/atom/proc/HasProximity(atom/movable/AM as mob|obj)
return
/**
* React to an EMP of the given severity
*
* Default behaviour is to send the COMSIG_ATOM_EMP_ACT signal
*
* If the signal does not return protection, and there are attached wires then we call
* emp_pulse() on the wires
*
* We then return the protection value
*/
/atom/proc/emp_act(severity)
var/protection = SEND_SIGNAL(src, COMSIG_ATOM_EMP_ACT, severity)
if(!(protection & EMP_PROTECT_WIRES) && istype(wires))
wires.emp_pulse()
return protection // Pass the protection value collected here upwards
/**
* React to a hit by a projectile object
*
* Default behaviour is to send the COMSIG_ATOM_BULLET_ACT and then call on_hit() on the projectile
*/
/atom/proc/bullet_act(obj/item/projectile/P, def_zone)
var/sig_return = SEND_SIGNAL(src, COMSIG_ATOM_BULLET_ACT, P, def_zone)
if(sig_return != NONE)
return sig_return
. = P.on_hit(src, 0, def_zone)
///Return true if we're inside the passed in atom
/atom/proc/in_contents_of(container)//can take class or object instance as argument
if(ispath(container))
if(istype(src.loc, container))
return TRUE
else if(src in container)
return TRUE
return FALSE
/**
* Get the name of this object for examine
*
* You can override what is returned from this proc by registering to listen for the
* COMSIG_ATOM_GET_EXAMINE_NAME signal
*/
/atom/proc/get_examine_name(mob/user)
. = "\a <b>[src]</b>"
var/list/override = list(gender == PLURAL ? "some" : "a", " ", "[name]")
if(article)
. = "[article] <b>[src]</b>"
override[EXAMINE_POSITION_ARTICLE] = article
if(SEND_SIGNAL(src, COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED)
. = override.Join("")
///Generate the full examine string of this atom (including icon for goonchat)
/atom/proc/get_examine_string(mob/user, thats = FALSE)
return "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]"
/**
* Called when a mob examines (shift click or verb) this atom
*
* Default behaviour is to get the name and icon of the object and it's reagents where
* the TRANSPARENT flag is set on the reagents holder
*
* Produces a signal COMSIG_PARENT_EXAMINE
*/
/atom/proc/examine(mob/user)
var/examine_string = get_examine_string(user, thats = TRUE)
if(examine_string)
. = list("[examine_string].")
else
. = list()
if(desc)
. += desc
if(custom_materials)
for(var/i in custom_materials)
var/datum/material/M = i
. += "<u>It is made out of [M.name]</u>."
if(reagents)
if(reagents.flags & TRANSPARENT)
. += "It contains:"
if(length(reagents.reagent_list))
if(user.can_see_reagents()) //Show each individual reagent
for(var/datum/reagent/current_reagent in reagents.reagent_list)
. += "&bull; [round(current_reagent.volume, 0.01)] units of [current_reagent.name]"
else //Otherwise, just show the total volume
var/total_volume = 0
for(var/datum/reagent/R in reagents.reagent_list)
total_volume += R.volume
. += "[total_volume] units of various reagents"
else
. += "Nothing."
else if(reagents.flags & AMOUNT_VISIBLE)
if(reagents.total_volume)
. += span_notice("It has [reagents.total_volume] unit\s left.")
else
. += span_danger("It's empty.")
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
/**
* Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_WINDOW (default 1.5 seconds)
*
* This is where you can put extra information on something that may be superfluous or not important in critical gameplay
* moments, while allowing people to manually double-examine to take a closer look
*
* Produces a signal [COMSIG_PARENT_EXAMINE_MORE]
*/
/atom/proc/examine_more(mob/user)
. = list()
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE_MORE, user, .)
if(!LAZYLEN(.)) // lol ..length
return FALSE
/**
* An atom we are buckled or is contained within us has tried to move
*
* Default behaviour is to send a warning that the user can't move while buckled as long
* as the buckle_message_cooldown has expired (50 ticks)
*/
/atom/proc/relaymove(mob/user)
if(buckle_message_cooldown <= world.time)
buckle_message_cooldown = world.time + 50
to_chat(user, span_warning("You can't move while buckled to [src]!"))
return
/// Handle what happens when your contents are exploded by a bomb
/atom/proc/contents_explosion(severity, target)
return //For handling the effects of explosions on contents that would not normally be effected
/**
* React to being hit by an explosion
*
* Default behaviour is to call contents_explosion() and send the COMSIG_ATOM_EX_ACT signal
*/
/atom/proc/ex_act(severity, target)
set waitfor = FALSE
contents_explosion(severity, target)
SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target)
/**
* React to a hit by a blob objecd
*
* default behaviour is to send the COMSIG_ATOM_BLOB_ACT signal
*/
/atom/proc/blob_act(obj/structure/blob/B)
SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B)
return
/atom/proc/fire_act(exposed_temperature, exposed_volume)
SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume)
return
/**
* React to being hit by a thrown object
*
* Default behaviour is to call hitby_react() on ourselves after 2 seconds if we are dense
* and under normal gravity.
*
* Im not sure why this the case, maybe to prevent lots of hitby's if the thrown object is
* deleted shortly after hitting something (during explosions or other massive events that
* throw lots of items around - singularity being a notable example)
*/
/atom/proc/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum)
if(density && !has_gravity(AM)) //thrown stuff bounces off dense stuff in no grav, unless the thrown stuff ends up inside what it hit(embedding, bola, etc...).
addtimer(CALLBACK(src, .proc/hitby_react, AM), 2)
/**
* We have have actually hit the passed in atom
*
* Default behaviour is to move back from the item that hit us
*/
/atom/proc/hitby_react(atom/movable/AM)
if(AM && isturf(AM.loc))
step(AM, turn(AM.dir, 180))
///Handle the atom being slipped over
/atom/proc/handle_slip(mob/living/carbon/C, knockdown_amount, obj/O, lube, stun, force_drop)
return
///returns the mob's dna info as a list, to be inserted in an object's blood_DNA list
/mob/living/proc/get_blood_dna_list()
if(get_blood_id() != /datum/reagent/blood)
return
return list("ANIMAL DNA" = "Y-")
///Get the mobs dna list
/mob/living/carbon/get_blood_dna_list()
if(!(get_blood_id() in list(/datum/reagent/blood, /datum/reagent/toxin/acid))) //polysmorphs have DNA located in literal acid, don't ask me why
return
var/list/blood_dna = list()
if(dna)
blood_dna[dna.unique_enzymes] = dna.blood_type
else
blood_dna["UNKNOWN DNA"] = "X*"
return blood_dna
/mob/living/carbon/alien/get_blood_dna_list()
return list("UNKNOWN DNA" = "X*")
/mob/living/silicon/get_blood_dna_list()
return list("MOTOR OIL" = "SAE 5W-30") //just a little flavor text.
///to add a mob's dna info into an object's blood_dna list.
/atom/proc/transfer_mob_blood_dna(mob/living/L)
// Returns 0 if we have that blood already
var/new_blood_dna = L.get_blood_dna_list()
if(!new_blood_dna)
return FALSE
var/old_length = blood_DNA_length()
add_blood_DNA(new_blood_dna)
if(blood_DNA_length() == old_length)
return FALSE
return TRUE
///to add blood from a mob onto something, and transfer their dna info
/atom/proc/add_mob_blood(mob/living/M)
var/list/blood_dna = M.get_blood_dna_list()
if(!blood_dna)
return FALSE
return add_blood_DNA(blood_dna)
///wash cream off this object
///
///(for the love of space jesus please make this a component)
/atom/proc/wash_cream()
return TRUE
/**
* Wash this atom
*
* This will clean it off any temporary stuff like blood. Override this in your item to add custom cleaning behavior.
* Returns true if any washing was necessary and thus performed
* Arguments:
* * clean_types: any of the CLEAN_ constants
*/
/atom/proc/wash(clean_types)
. = FALSE
if(SEND_SIGNAL(src, COMSIG_COMPONENT_CLEAN_ACT, clean_types))
. = TRUE
// Basically "if has washable coloration"
if(length(atom_colours) >= WASHABLE_COLOUR_PRIORITY && atom_colours[WASHABLE_COLOUR_PRIORITY])
remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
return TRUE
return FALSE //needs this here so it won't return true if things don't wash
///Is this atom in space
/atom/proc/isinspace()
if(isspaceturf(get_turf(src)))
return TRUE
else
return FALSE
///Called when gravity returns after floating I think
/atom/proc/handle_fall()
return
///Respond to the singularity eating this atom
/atom/proc/singularity_act()
return
/**
* Respond to the singularity pulling on us
*
* Default behaviour is to send COMSIG_ATOM_SING_PULL and return
*/
/atom/proc/singularity_pull(obj/singularity/S, current_size)
SEND_SIGNAL(src, COMSIG_ATOM_SING_PULL, S, current_size)
/**
* Respond to acid being used on our atom
*
* Default behaviour is to send COMSIG_ATOM_ACID_ACT and return
*/
/atom/proc/acid_act(acidpwr, acid_volume)
SEND_SIGNAL(src, COMSIG_ATOM_ACID_ACT, acidpwr, acid_volume)
/**
* Respond to an emag being used on our atom
*
* Default behaviour is to send COMSIG_ATOM_EMAG_ACT and return
*/
/atom/proc/emag_act()
SEND_SIGNAL(src, COMSIG_ATOM_EMAG_ACT)
/**
* Respond to a radioactive wave hitting this atom
*
* Default behaviour is to send COMSIG_ATOM_RAD_ACT and return
*/
/atom/proc/rad_act(strength, collectable_radiation)
SEND_SIGNAL(src, COMSIG_ATOM_RAD_ACT, strength, collectable_radiation)
/**
* Respond to narsie eating our atom
*
* Default behaviour is to send COMSIG_ATOM_NARSIE_ACT and return
*/
/atom/proc/narsie_act()
SEND_SIGNAL(src, COMSIG_ATOM_NARSIE_ACT)
/**
* Respond to ratvar eating our atom
*
* Default behaviour is to send COMSIG_ATOM_RATVAR_ACT and return
*/
/atom/proc/ratvar_act()
SEND_SIGNAL(src, COMSIG_ATOM_RATVAR_ACT)
/**
* Respond to honkmother eating our atom
*
* Default behaviour is to send COMSIG_ATOM_HONK_ACT and return
*/
/atom/proc/honk_act()
SEND_SIGNAL(src, COMSIG_ATOM_HONK_ACT)
///Return the values you get when an RCD eats you?
/atom/proc/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
return FALSE
/**
* Respond to an RCD acting on our item
*
* Default behaviour is to send COMSIG_ATOM_RCD_ACT and return FALSE
*/
/atom/proc/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
SEND_SIGNAL(src, COMSIG_ATOM_RCD_ACT, user, the_rcd, passed_mode)
return FALSE
/**
* Implement the behaviour for when a user click drags a storage object to your atom
*
* This behaviour is usually to mass transfer, but this is no longer a used proc as it just
* calls the underyling /datum/component/storage dump act if a component exists
*
* TODO these should be purely component items that intercept the atom clicks higher in the
* call chain
*/
/atom/proc/storage_contents_dump_act(obj/item/storage/src_object, mob/user)
if(GetComponent(/datum/component/storage))
return component_storage_contents_dump_act(src_object, user)
return FALSE
/**
* Implement the behaviour for when a user click drags another storage item to you
*
* In this case we get as many of the tiems from the target items compoent storage and then
* put everything into ourselves (or our storage component)
*
* TODO these should be purely component items that intercept the atom clicks higher in the
* call chain
*/
/atom/proc/component_storage_contents_dump_act(datum/component/storage/src_object, mob/user)
var/list/things = src_object.contents()
var/datum/progressbar/progress = new(user, things.len, src)
var/datum/component/storage/STR = GetComponent(/datum/component/storage)
//yogs start -- stops things from dumping into themselves
if(STR == src_object)
to_chat(user,span_warning("You can't dump the contents of [src_object.parent] into itself!"))
return
//yogs end
while (do_after(user, 1 SECONDS, src, TRUE, FALSE, CALLBACK(STR, /datum/component/storage.proc/handle_mass_item_insertion, things, src_object, user, progress)))
stoplag(1)
qdel(progress)
to_chat(user, span_notice("You dump as much of [src_object.parent]'s contents into [STR.insert_preposition]to [src] as you can."))
STR.orient2hud(user)
src_object.orient2hud(user)
if(user.active_storage) //refresh the HUD to show the transfered contents
user.active_storage.close(user)
user.active_storage.show_to(user)
return TRUE
///Get the best place to dump the items contained in the source storage item?
/atom/proc/get_dumping_location(obj/item/storage/source,mob/user)
return null
/**
* This proc is called when an atom in our contents has it's Destroy() called
*
* Default behaviour is to simply send COMSIG_ATOM_CONTENTS_DEL
*/
/atom/proc/handle_atom_del(atom/A)
SEND_SIGNAL(src, COMSIG_ATOM_CONTENTS_DEL, A)
/**
* called when the turf the atom resides on is ChangeTurfed
*
* Default behaviour is to loop through atom contents and call their HandleTurfChange() proc
*/
/atom/proc/HandleTurfChange(turf/T)
for(var/a in src)
var/atom/A = a
A.HandleTurfChange(T)
/**
* the vision impairment to give to the mob whose perspective is set to that atom
*
* (e.g. an unfocused camera giving you an impaired vision when looking through it)
*/
/atom/proc/get_remote_view_fullscreens(mob/user)
return
/**
* the sight changes to give to the mob whose perspective is set to that atom
*
* (e.g. A mob with nightvision loses its nightvision while looking through a normal camera)
*/
/atom/proc/update_remote_sight(mob/living/user)
return
/**
* Hook for running code when a dir change occurs
*
* Not recommended to use, listen for the COMSIG_ATOM_DIR_CHANGE signal instead (sent by this proc)
*/
/atom/proc/setDir(newdir)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_DIR_CHANGE, dir, newdir)
dir = newdir
/**
* Used to change the pixel shift of an atom
*/
/atom/proc/setShift(dir)
SHOULD_CALL_PARENT(TRUE)
SEND_SIGNAL(src, COMSIG_ATOM_SHIFT_CHANGE, dir)
var/new_x = pixel_x
var/new_y = pixel_y
if (dir & NORTH)
new_y++
if (dir & EAST)
new_x++
if (dir & SOUTH)
new_y--
if (dir & WEST)
new_x--
pixel_x = clamp(new_x, -16, 16)
pixel_y = clamp(new_y, -16, 16)
///Handle melee attack by a mech
/atom/proc/mech_melee_attack(obj/mecha/M, equip_allowed = TRUE)
return
/**
* Called when the atom log's in or out
*
* Default behaviour is to call on_log on the location this atom is in
*/
/atom/proc/on_log(login)
if(loc)
loc.on_log(login)
/*
Atom Colour Priority System
A System that gives finer control over which atom colour to colour the atom with.
The "highest priority" one is always displayed as opposed to the default of
"whichever was set last is displayed"
*/
///Adds an instance of colour_type to the atom's atom_colours list
/atom/proc/add_atom_colour(coloration, colour_priority)
if(!atom_colours || !atom_colours.len)
atom_colours = list()
atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently.
if(!coloration)
return
if(colour_priority > atom_colours.len)
return
atom_colours[colour_priority] = coloration
update_atom_colour()
///Removes an instance of colour_type from the atom's atom_colours list
/atom/proc/remove_atom_colour(colour_priority, coloration)
if(!atom_colours)
return
if(colour_priority > atom_colours.len)
return
if(coloration && atom_colours[colour_priority] != coloration)
return //if we don't have the expected color (for a specific priority) to remove, do nothing
atom_colours[colour_priority] = null
update_atom_colour()
/atom/proc/update_atom_colour()
///Resets the atom's color to null, and then sets it to the highest priority colour available
color = null
if(!atom_colours)
return
for(var/C in atom_colours)
if(islist(C))
var/list/L = C
if(L.len)
color = L
return
else if(C)
color = C
return
/**
* call back when a var is edited on this atom
*
* Can be used to implement special handling of vars
*
* At the atom level, if you edit a var named "color" it will add the atom colour with
* admin level priority to the atom colours list
*
* Also, if GLOB.Debug2 is FALSE, it sets the ADMIN_SPAWNED_1 flag on flags_1, which signifies
* the object has been admin edited
*/
/atom/vv_edit_var(var_name, var_value)
if(!GLOB.Debug2)
flags_1 |= ADMIN_SPAWNED_1
. = ..()
switch(var_name)
if("color")
add_atom_colour(color, ADMIN_COLOUR_PRIORITY)
/**
* Return the markup to for the dropdown list for the VV panel for this atom
*
* Override in subtypes to add custom VV handling in the VV panel
*/
/atom/vv_get_dropdown()
. = ..()
VV_DROPDOWN_SEPERATOR
if(!ismovable(src))
var/turf/curturf = get_turf(src)
if (curturf)
. += "<option value='?_src_=holder;[HrefToken()];adminplayerobservecoodjump=1;X=[curturf.x];Y=[curturf.y];Z=[curturf.z]'>Jump To</option>"
VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRANSFORM, "Modify Transform")
VV_DROPDOWN_OPTION(VV_HK_SHOW_HIDDENPRINTS, "Show Hiddenprint log")
VV_DROPDOWN_OPTION(VV_HK_ADD_REAGENT, "Add Reagent")
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EMP, "EMP Pulse")
VV_DROPDOWN_OPTION(VV_HK_TRIGGER_EXPLOSION, "Explosion")
VV_DROPDOWN_OPTION(VV_HK_RADIATE, "Radiate")
/atom/vv_do_topic(list/href_list)
. = ..()
if(href_list[VV_HK_ADD_REAGENT] && check_rights(R_VAREDIT))
if(!reagents)
var/amount = input(usr, "Specify the reagent size of [src]", "Set Reagent Size", 50) as num|null
if(amount)
create_reagents(amount)
if(reagents)
var/chosen_id
switch(tgui_alert(usr, "Choose a method.", "Add Reagents", list("Search", "Choose from a list", "I'm feeling lucky")))
if("Search")
var/valid_id
while(!valid_id)
chosen_id = input(usr, "Enter the ID of the reagent you want to add.", "Search reagents") as null|text
if(isnull(chosen_id)) //Get me out of here!
break
if (!ispath(text2path(chosen_id)))
chosen_id = pick_closest_path(chosen_id, make_types_fancy(subtypesof(/datum/reagent)))
if (ispath(chosen_id))
valid_id = TRUE
else
valid_id = TRUE
if(!valid_id)
to_chat(usr, span_warning("A reagent with that ID doesn't exist!"))
if("Choose from a list")
chosen_id = input(usr, "Choose a reagent to add.", "Choose a reagent.") as null|anything in sortList(subtypesof(/datum/reagent), /proc/cmp_typepaths_asc)
if("I'm feeling lucky")
chosen_id = pick(subtypesof(/datum/reagent))
if(chosen_id)
var/amount = input(usr, "Choose the amount to add.", "Choose the amount.", reagents.maximum_volume) as num|null
if(amount)
reagents.add_reagent(chosen_id, amount)
log_admin("[key_name(usr)] has added [amount] units of [chosen_id] to [src]")
message_admins(span_notice("[key_name(usr)] has added [amount] units of [chosen_id] to [src]"))
if(href_list[VV_HK_TRIGGER_EXPLOSION] && check_rights(R_FUN))
usr.client.cmd_admin_explosion(src)
if(href_list[VV_HK_TRIGGER_EMP] && check_rights(R_FUN))
usr.client.cmd_admin_emp(src)
if(href_list[VV_HK_SHOW_HIDDENPRINTS])
usr.client.cmd_show_hiddenprints(src)
if(href_list[VV_HK_RADIATE] && check_rights(R_FUN))
var/strength = input(usr, "Choose the radiation strength.", "Choose the strength.") as num|null
if(!isnull(strength))
AddComponent(/datum/component/radioactive, strength)
if(href_list[VV_HK_MODIFY_TRANSFORM] && check_rights(R_VAREDIT))
var/result = input(usr, "Choose the transformation to apply","Transform Mod") as null|anything in list("Scale","Translate","Rotate")
var/matrix/M = transform
if(!result)
return
switch(result)
if("Scale")
var/x = input(usr, "Choose x mod","Transform Mod") as null|num
var/y = input(usr, "Choose y mod","Transform Mod") as null|num
if(isnull(x) || isnull(y))
return
transform = M.Scale(x,y)
if("Translate")
var/x = input(usr, "Choose x mod (negative = left, positive = right)","Transform Mod") as null|num
var/y = input(usr, "Choose y mod (negative = down, positive = up)","Transform Mod") as null|num
if(isnull(x) || isnull(y))
return
transform = M.Translate(x,y)
if("Rotate")
var/angle = input(usr, "Choose angle to rotate","Transform Mod") as null|num
if(isnull(angle))
return
transform = M.Turn(angle)
if(href_list[VV_HK_AUTO_RENAME] && check_rights(R_VAREDIT))
var/newname = input(usr, "What do you want to rename this to?", "Automatic Rename") as null|text
// Check the new name against the chat filter. If it triggers the IC chat filter, give an option to confirm.
if(newname)
log_admin("[key_name(usr)] renamed [src] to [newname].")
message_admins("Admin [key_name_admin(usr)] renamed [ADMIN_FLW(src)] to [newname].")
vv_auto_rename(newname)
/atom/proc/vv_auto_rename(newname)
name = newname
/atom/vv_get_header()
. = ..()
var/refid = REF(src)
. += "[VV_HREF_TARGETREF(refid, VV_HK_AUTO_RENAME, "<b id='name'>[src]</b>")]"
. += "<br><font size='1'><a href='?_src_=vars;[HrefToken()];rotatedatum=[refid];rotatedir=left'><<</a> <a href='?_src_=vars;[HrefToken()];datumedit=[refid];varnameedit=dir' id='dir'>[dir2text(dir) || dir]</a> <a href='?_src_=vars;[HrefToken()];rotatedatum=[refid];rotatedir=right'>>></a></font>"
///Where atoms should drop if taken from this atom
/atom/proc/drop_location()
var/atom/L = loc
if(!L)
return null
return L.AllowDrop() ? L : L.drop_location()
/**
* An atom has entered this atom's contents
*
* Default behaviour is to send the COMSIG_ATOM_ENTERED
*/
/atom/Entered(atom/movable/AM, atom/oldLoc)
SEND_SIGNAL(src, COMSIG_ATOM_ENTERED, AM, oldLoc)
/**
* An atom is attempting to exit this atom's contents
*
* Default behaviour is to send the COMSIG_ATOM_EXIT
*
* Return value should be set to FALSE if the moving atom is unable to leave,
* otherwise leave value the result of the parent call
*/
/atom/Exit(atom/movable/AM, atom/newLoc)
. = ..()
if(SEND_SIGNAL(src, COMSIG_ATOM_EXIT, AM, newLoc) & COMPONENT_ATOM_BLOCK_EXIT)
return FALSE
/**
* An atom has exited this atom's contents
*
* Default behaviour is to send the COMSIG_ATOM_EXITED
*/
/atom/Exited(atom/movable/AM, atom/newLoc)
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, newLoc)
///Return atom temperature
/atom/proc/return_temperature()
return
/**
*Tool behavior procedure. Redirects to tool-specific procs by default.
*
* You can override it to catch all tool interactions, for use in complex deconstruction procs.
*
* Must return parent proc ..() in the end if overridden
*/
/atom/proc/tool_act(mob/living/user, obj/item/I, tool_type)
switch(tool_type)
if(TOOL_CROWBAR)
return crowbar_act(user, I)
if(TOOL_MULTITOOL)
return multitool_act(user, I)
if(TOOL_SCREWDRIVER)
return screwdriver_act(user, I)
if(TOOL_WRENCH)
return wrench_act(user, I)
if(TOOL_WIRECUTTER)
return wirecutter_act(user, I)
if(TOOL_WELDER)
return welder_act(user, I)
if(TOOL_ANALYZER)
return analyzer_act(user, I)
//! Tool-specific behavior procs. To be overridden in subtypes.
///
///Crowbar act
/atom/proc/crowbar_act(mob/living/user, obj/item/I)
return
///Multitool act
/atom/proc/multitool_act(mob/living/user, obj/item/I)
return
///Check if the multitool has an item in it's data buffer
/atom/proc/multitool_check_buffer(user, obj/item/I, silent = FALSE)
if(!istype(I, /obj/item/multitool))
if(user && !silent)
to_chat(user, span_warning("[I] has no data buffer!"))
return FALSE
return TRUE
///Screwdriver act
/atom/proc/screwdriver_act(mob/living/user, obj/item/I)
SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(TOOL_SCREWDRIVER), user, I)
///Wrench act
/atom/proc/wrench_act(mob/living/user, obj/item/I)
return
///Wirecutter act
/atom/proc/wirecutter_act(mob/living/user, obj/item/I)
return
///Welder act
/atom/proc/welder_act(mob/living/user, obj/item/I)
return
///Analyzer act
/atom/proc/analyzer_act(mob/living/user, obj/item/I)
return
///Generate a tag for this atom
/atom/proc/GenerateTag()
return
///Connect this atom to a shuttle
/atom/proc/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock, idnum, override=FALSE)
return
/// Generic logging helper
/atom/proc/log_message(message, message_type, color=null, log_globally=TRUE)
if(!log_globally)
return
var/log_text = "[key_name(src)] [message] [loc_name(src)]"
switch(message_type)
if(LOG_ATTACK)
log_attack(log_text)
if(LOG_SAY)
log_say(log_text)
if(LOG_WHISPER)
log_whisper(log_text)
if(LOG_EMOTE)
log_emote(log_text)
if(LOG_DSAY)
log_dsay(log_text)
if(LOG_PDA)
log_pda(log_text)
if(LOG_CHAT)
log_chat(log_text)
if(LOG_COMMENT)
log_comment(log_text)
if(LOG_TELECOMMS)
log_telecomms(log_text)
if(LOG_NTSL)
log_ntsl(log_text)
if(LOG_OOC)
log_ooc(log_text)
if(LOG_LOOC) // yogs - LOOC log
log_looc(log_text) // yogs - LOOC log
if(LOG_DONATOR) // yogs - Donator log
log_donator(log_text) // yogs - Donator log
if(LOG_ADMIN)
log_admin(log_text)
if(LOG_ADMIN_PRIVATE)
log_admin_private(log_text)
if(LOG_ASAY)
log_adminsay(log_text)
if(LOG_OWNERSHIP)
log_game(log_text)
if(LOG_GAME)
log_game(log_text)
if(LOG_MECHA)
log_mecha(log_text)
else
stack_trace("Invalid individual logging type: [message_type]. Defaulting to [LOG_GAME] (LOG_GAME).")
log_game(log_text)
/// Helper for logging chat messages or other logs with arbitrary inputs (e.g. announcements)
/atom/proc/log_talk(message, message_type, tag=null, log_globally=TRUE, forced_by=null)
var/prefix = tag ? "([tag]) " : ""
var/suffix = forced_by ? " FORCED by [forced_by]" : ""
log_message("[prefix]\"[message]\"[suffix]", message_type, log_globally=log_globally)
/// Helper for logging of messages with only one sender and receiver
/proc/log_directed_talk(atom/source, atom/target, message, message_type, tag)
if(!tag)
stack_trace("Unspecified tag for private message")
tag = "UNKNOWN"
source.log_talk(message, message_type, tag="[tag] to [key_name(target)]")
if(source != target)
target.log_talk(message, message_type, tag="[tag] from [key_name(source)]", log_globally=FALSE)
/**
* Log a combat message in the attack log
*
* 1 argument is the actor performing the action
* 2 argument is the target of the action
* 3 is a verb describing the action (e.g. punched, throwed, kicked, etc.)
* 4 is a tool with which the action was made (usually an item)
* 5 is any additional text, which will be appended to the rest of the log line
*/
/proc/log_combat(atom/user, atom/target, what_done, atom/object=null, addition=null)
var/ssource = key_name(user)
var/starget = key_name(target)
var/mob/living/living_target = target
var/hp = istype(living_target) ? " (NEWHP: [living_target.health]) " : ""
var/sobject = ""
if(object)
sobject = " with [object]"
var/saddition = ""
if(addition)
saddition = " [addition]"
var/postfix = "[sobject][saddition][hp]"
var/message = "has [what_done] [starget][postfix]"
user.log_message(message, LOG_ATTACK, color="red")
if(user != target)
var/reverse_message = "has been [what_done] by [ssource][postfix]"
target.log_message(reverse_message, LOG_ATTACK, color="orange", log_globally=FALSE)
/**
* log_wound() is for when someone is *attacked* and suffers a wound. Note that this only captures wounds from damage, so smites/forced wounds aren't logged, as well as demotions like cuts scabbing over
*
* Note that this has no info on the attack that dealt the wound: information about where damage came from isn't passed to the bodypart's damaged proc. When in doubt, check the attack log for attacks at that same time
* TODO later: Add logging for healed wounds, though that will require some rewriting of healing code to prevent admin heals from spamming the logs. Not high priority
*
* Arguments:
* * victim- The guy who got wounded
* * suffered_wound- The wound, already applied, that we're logging. It has to already be attached so we can get the limb from it
* * dealt_damage- How much damage is associated with the attack that dealt with this wound.
* * dealt_wound_bonus- The wound_bonus, if one was specified, of the wounding attack
* * dealt_bare_wound_bonus- The bare_wound_bonus, if one was specified *and applied*, of the wounding attack. Not shown if armor was present
* * base_roll- Base wounding ability of an attack is a random number from 1 to (dealt_damage ** WOUND_DAMAGE_EXPONENT). This is the number that was rolled in there, before mods
*/
/proc/log_wound(atom/victim, datum/wound/suffered_wound, dealt_damage, dealt_wound_bonus, dealt_bare_wound_bonus, base_roll, attack_direction = null)
if(QDELETED(victim) || !suffered_wound)
return
var/message = "has suffered: [suffered_wound][suffered_wound.limb ? " to [suffered_wound.limb.name]" : null]"// maybe indicate if it's a promote/demote?
if(dealt_damage)
message += " | Damage: [dealt_damage]"
// The base roll is useful since it can show how lucky someone got with the given attack. For example, dealing a cut
if(base_roll)
message += "(rolled [base_roll]/[dealt_damage ** WOUND_DAMAGE_EXPONENT])"
if(dealt_wound_bonus)
message += " | WB: [dealt_wound_bonus]"
if(dealt_bare_wound_bonus)
message += " | BWB: [dealt_bare_wound_bonus]"
if(attack_direction)
message += " | AtkDir: [attack_direction]"
victim.log_message(message, LOG_ATTACK, color="blue")
/atom/movable/proc/add_filter(name,priority,list/params)
if(!filter_data)
filter_data = list()
var/list/p = params.Copy()
p["priority"] = priority
filter_data[name] = p
update_filters()
/atom/movable/proc/update_filters()
filters = null
sortTim(filter_data,associative = TRUE)
for(var/f in filter_data)
var/list/data = filter_data[f]
var/list/arguments = data.Copy()
arguments -= "priority"
filters += filter(arglist(arguments))
/obj/item/update_filters()
. = ..()
for(var/X in actions)
var/datum/action/A = X
A.UpdateButtonIcon()
/atom/movable/proc/get_filter(name)
if(filter_data && filter_data[name])
return filters[filter_data.Find(name)]
/atom/movable/proc/remove_filter(name)
if(filter_data && filter_data[name])
filter_data -= name
update_filters()
/atom/proc/intercept_zImpact(atom/movable/AM, levels = 1)
return FALSE
/**Returns the material composition of the atom.
*
* Used when recycling items, specifically to turn alloys back into their component mats.
*
* Exists because I'd need to add a way to un-alloy alloys or otherwise deal
* with people converting the entire stations material supply into alloys.
*
* Arguments:
* - flags: A set of flags determining how exactly the materials are broken down.
*/
/atom/proc/get_material_composition(breakdown_flags=NONE)
. = list()
var/list/cached_materials = custom_materials
for(var/mat in cached_materials)
var/datum/material/material = getmaterialref(mat)
var/list/material_comp = material.return_composition(cached_materials[material], breakdown_flags)
for(var/comp_mat in material_comp)
.[comp_mat] += material_comp[comp_mat]
/**
* Causes effects when the atom gets hit by a rust effect from heretics
*
* Override this if you want custom behaviour in whatever gets hit by the rust
*/
/atom/proc/rust_heretic_act()
return
/**
* Used to set something as 'open' if it's being used as a supplypod
*
* Override this if you want an atom to be usable as a supplypod.
*/
/atom/proc/setOpened()
return
/**
* Used to set something as 'closed' if it's being used as a supplypod
*
* Override this if you want an atom to be usable as a supplypod.
*/
/atom/proc/setClosed()
return
/**
* Recursive getter method to return a list of all ghosts orbitting this atom
*
* This will work fine without manually passing arguments.
*/
/atom/proc/get_all_orbiters(list/processed, source = TRUE)
var/list/output = list()
if (!processed)
processed = list()
if (src in processed)
return output
if (!source)
output += src
processed += src
for (var/o in orbiters?.orbiters)
var/atom/atom_orbiter = o
output += atom_orbiter.get_all_orbiters(processed, source = FALSE)
return output
///Sets the custom materials for an item.
/atom/proc/set_custom_materials(var/list/materials, multiplier = 1)
if(custom_materials) //Only runs if custom materials existed at first. Should usually be the case but check anyways
for(var/i in custom_materials)
var/datum/material/custom_material = i
custom_material.on_removed(src, material_flags) //Remove the current materials
custom_materials = list() //Reset the list
for(var/x in materials)
var/datum/material/custom_material = x
custom_material.on_applied(src, materials[custom_material] * multiplier, material_flags)
custom_materials[custom_material] += materials[x] * multiplier
///Passes Stat Browser Panel clicks to the game and calls client click on an atom
/atom/Topic(href, list/href_list)
. = ..()
if(!usr?.client)
return
var/client/usr_client = usr.client
var/list/paramslist = list()
if(href_list["statpanel_item_shiftclick"])
paramslist["shift"] = "1"
if(href_list["statpanel_item_ctrlclick"])
paramslist["ctrl"] = "1"
if(href_list["statpanel_item_altclick"])
paramslist["alt"] = "1"
if(href_list["statpanel_item_click"])
// first of all make sure we valid
var/mouseparams = list2params(paramslist)
usr_client.Click(src, loc, null, mouseparams)
return TRUE